summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Checkmate50 <dgeisler50@gmail.com>2016-06-06 23:14:18 -0600
committerGravatar Checkmate50 <dgeisler50@gmail.com>2016-06-06 23:14:18 -0600
commitd652155ae013f36a1ee17653a8e458baad2d9c2c (patch)
tree067d600fe3cd1723afc11682935f0123a1eab653
parentd7fc0deb2ca6d7ebee094b6ea5430d9b41f163ec (diff)
Merging complete. Everything looks good *crosses fingers*
-rw-r--r--.gitattributes42
-rw-r--r--.travis.yml16
-rw-r--r--Binaries/PrepareBoogieZip.bat32
-rw-r--r--Build/CodePlex.Tools.MsBuild.dllbin131072 -> 0 bytes
-rw-r--r--Build/CodePlex.Tools.Wiki.dllbin45056 -> 0 bytes
-rw-r--r--Build/updateVersionFile.xml19
-rw-r--r--README.md21
-rw-r--r--Source/AIFramework/AIFramework.csproj406
-rw-r--r--Source/AIFramework/CommonFunctionSymbols.cs2464
-rw-r--r--Source/AIFramework/Expr.cs1280
-rw-r--r--Source/AIFramework/Functional.cs860
-rw-r--r--Source/AIFramework/Lattice.cs1918
-rw-r--r--Source/AIFramework/Logger.cs112
-rw-r--r--Source/AIFramework/MultiLattice.cs1294
-rw-r--r--Source/AIFramework/Mutable.cs274
-rw-r--r--Source/AIFramework/Polyhedra/LinearConstraint.cs1088
-rw-r--r--Source/AIFramework/Polyhedra/LinearConstraintSystem.cs3510
-rw-r--r--Source/AIFramework/Polyhedra/PolyhedraAbstraction.cs1524
-rw-r--r--Source/AIFramework/Polyhedra/SimplexTableau.cs1260
-rw-r--r--Source/AIFramework/VariableMap/ConstantAbstraction.cs502
-rw-r--r--Source/AIFramework/VariableMap/ConstantExpressions.cs1056
-rw-r--r--Source/AIFramework/VariableMap/DynamicTypeLattice.cs1022
-rw-r--r--Source/AIFramework/VariableMap/Intervals.cs1742
-rw-r--r--Source/AIFramework/VariableMap/MicroLattice.cs208
-rw-r--r--Source/AIFramework/VariableMap/Nullness.cs520
-rw-r--r--Source/AIFramework/VariableMap/VariableMapLattice.cs1708
-rw-r--r--Source/AIFramework/cce.cs384
-rw-r--r--Source/AbsInt/AbsInt.csproj590
-rw-r--r--Source/AbsInt/IntervalDomain.cs2428
-rw-r--r--Source/AbsInt/NativeLattice.cs670
-rw-r--r--Source/AbsInt/Traverse.cs338
-rw-r--r--Source/AbsInt/TrivialDomain.cs158
-rw-r--r--Source/AbsInt/cce.cs124
-rw-r--r--Source/BVD/App.config10
-rw-r--r--Source/BVD/BVD.csproj212
-rw-r--r--Source/BVD/Program.cs56
-rw-r--r--Source/BVD/Properties/AssemblyInfo.cs72
-rw-r--r--Source/Basetypes/Basetypes.csproj406
-rw-r--r--Source/Basetypes/BigDec.cs760
-rw-r--r--Source/Basetypes/BigNum.cs722
-rw-r--r--Source/Basetypes/Rational.cs496
-rw-r--r--Source/Basetypes/Set.cs570
-rw-r--r--Source/Basetypes/cce.cs384
-rw-r--r--Source/Boogie.sln1286
-rw-r--r--Source/BoogieDriver/BoogieDriver.cs212
-rw-r--r--Source/BoogieDriver/BoogieDriver.csproj646
-rw-r--r--Source/BoogieDriver/cce.cs210
-rw-r--r--Source/CodeContractsExtender/CodeContractsExtender.csproj404
-rw-r--r--Source/CodeContractsExtender/cce.cs366
-rw-r--r--Source/Concurrency/App.config12
-rw-r--r--Source/Concurrency/CivlRefinement.cs (renamed from Source/Concurrency/OwickiGries.cs)2418
-rw-r--r--Source/Concurrency/CivlTypeChecker.cs1160
-rw-r--r--Source/Concurrency/Concurrency.csproj228
-rw-r--r--Source/Concurrency/LinearSets.cs2007
-rw-r--r--Source/Concurrency/MoverCheck.cs1320
-rw-r--r--Source/Concurrency/Program.cs88
-rw-r--r--Source/Concurrency/Properties/AssemblyInfo.cs72
-rw-r--r--Source/Concurrency/SimulationRelation.cs394
-rw-r--r--Source/Concurrency/TypeCheck.cs724
-rw-r--r--Source/Concurrency/YieldTypeChecker.cs731
-rw-r--r--Source/Core/Absy.cs8985
-rw-r--r--Source/Core/AbsyCmd.cs6996
-rw-r--r--Source/Core/AbsyExpr.cs6671
-rw-r--r--Source/Core/AbsyQuant.cs1883
-rw-r--r--Source/Core/AbsyType.cs7812
-rw-r--r--Source/Core/AlphaEquality.cs324
-rw-r--r--Source/Core/BoogiePL.atg3022
-rw-r--r--Source/Core/CommandLineOptions.cs4328
-rw-r--r--Source/Core/Core.csproj470
-rw-r--r--Source/Core/DeadVarElim.cs3513
-rw-r--r--Source/Core/Duplicator.cs1623
-rw-r--r--Source/Core/Graph.as352
-rw-r--r--Source/Core/Inline.cs1538
-rw-r--r--Source/Core/InterProceduralReachabilityGraph.cs612
-rw-r--r--Source/Core/LambdaHelper.cs518
-rw-r--r--Source/Core/LoopUnroll.cs572
-rw-r--r--Source/Core/Makefile40
-rw-r--r--Source/Core/OOLongUtil.cs420
-rw-r--r--Source/Core/Parser.cs4848
-rw-r--r--Source/Core/Readme.txt122
-rw-r--r--Source/Core/ResolutionContext.cs1270
-rw-r--r--Source/Core/Scanner.cs1644
-rw-r--r--Source/Core/StandardVisitor.cs2334
-rw-r--r--Source/Core/TypeAmbiguitySeeker.cs244
-rw-r--r--Source/Core/Util.cs1376
-rw-r--r--Source/Core/VCExp.cs476
-rw-r--r--Source/Core/VariableDependenceAnalyser.cs1292
-rw-r--r--Source/Core/Xml.cs630
-rw-r--r--Source/Core/cce.cs384
-rw-r--r--Source/Doomed/DoomCheck.cs814
-rw-r--r--Source/Doomed/DoomErrorHandler.cs170
-rw-r--r--Source/Doomed/Doomed.csproj378
-rw-r--r--Source/Doomed/DoomedLoopUnrolling.cs1298
-rw-r--r--Source/Doomed/DoomedStrategy.cs1054
-rw-r--r--Source/Doomed/HasseDiagram.cs846
-rw-r--r--Source/Doomed/VCDoomed.cs1652
-rw-r--r--Source/ExecutionEngine/ExecutionEngine.cs3586
-rw-r--r--Source/ExecutionEngine/ExecutionEngine.csproj386
-rw-r--r--Source/ExecutionEngine/Properties/AssemblyInfo.cs72
-rw-r--r--Source/ExecutionEngine/VerificationResultCache.cs1332
-rw-r--r--Source/Forro.sln40
-rw-r--r--Source/Forro/Ast.fs76
-rw-r--r--Source/Forro/BoogieAst.fs80
-rw-r--r--Source/Forro/BoogiePrinter.fs224
-rw-r--r--Source/Forro/Forro.fsproj164
-rw-r--r--Source/Forro/Lexer.fsl120
-rw-r--r--Source/Forro/Main.fs114
-rw-r--r--Source/Forro/Parser.fsy244
-rw-r--r--Source/Forro/Printer.fs214
-rw-r--r--Source/Forro/Resolver.fs246
-rw-r--r--Source/Forro/Translator.fs434
-rw-r--r--Source/Graph/Graph.cs2894
-rw-r--r--Source/Graph/Graph.csproj398
-rw-r--r--Source/Graph/cce.cs384
-rw-r--r--Source/Houdini/AbstractHoudini.cs9323
-rw-r--r--Source/Houdini/AnnotationDependenceAnalyser.cs1756
-rw-r--r--Source/Houdini/Checker.cs911
-rw-r--r--Source/Houdini/ConcurrentHoudini.cs208
-rw-r--r--Source/Houdini/Houdini.cs2658
-rw-r--r--Source/Houdini/Houdini.csproj306
-rw-r--r--Source/Houdini/StagedHoudini.cs854
-rw-r--r--Source/Model/Model.cs1412
-rw-r--r--Source/Model/Model.csproj218
-rw-r--r--Source/Model/ModelParser.cs4
-rw-r--r--Source/Model/Properties/AssemblyInfo.cs46
-rw-r--r--Source/ModelViewer/BCTProvider.cs294
-rw-r--r--Source/ModelViewer/BaseProvider.cs272
-rw-r--r--Source/ModelViewer/DafnyProvider.cs776
-rw-r--r--Source/ModelViewer/DataModel.cs594
-rw-r--r--Source/ModelViewer/Main.Designer.cs998
-rw-r--r--Source/ModelViewer/Main.cs1740
-rw-r--r--Source/ModelViewer/Main.resx4382
-rw-r--r--Source/ModelViewer/ModelViewer.csproj422
-rw-r--r--Source/ModelViewer/Namer.cs1160
-rw-r--r--Source/ModelViewer/Properties/AssemblyInfo.cs50
-rw-r--r--Source/ModelViewer/Properties/Resources.Designer.cs126
-rw-r--r--Source/ModelViewer/Properties/Resources.resx232
-rw-r--r--Source/ModelViewer/Properties/Settings.Designer.cs52
-rw-r--r--Source/ModelViewer/Properties/Settings.settings14
-rw-r--r--Source/ModelViewer/SourceView.Designer.cs124
-rw-r--r--Source/ModelViewer/SourceView.cs104
-rw-r--r--Source/ModelViewer/SourceView.resx238
-rw-r--r--Source/ModelViewer/TreeSkeleton.cs410
-rw-r--r--Source/ModelViewer/VccProvider.cs3052
-rw-r--r--Source/ParserHelper/ParserHelper.cs486
-rw-r--r--Source/ParserHelper/ParserHelper.csproj284
-rw-r--r--Source/Predication/Predication.csproj348
-rw-r--r--Source/Predication/SmartBlockPredicator.cs1274
-rw-r--r--Source/Predication/UniformityAnalyser.cs1082
-rw-r--r--Source/Provers/SMTLib/CVC4.cs142
-rw-r--r--Source/Provers/SMTLib/Inspector.cs314
-rw-r--r--Source/Provers/SMTLib/ProverInterface.cs5075
-rw-r--r--Source/Provers/SMTLib/SExpr.cs526
-rw-r--r--Source/Provers/SMTLib/SMTLib.csproj474
-rw-r--r--Source/Provers/SMTLib/SMTLibLineariser.cs1885
-rw-r--r--Source/Provers/SMTLib/SMTLibNamer.cs289
-rw-r--r--Source/Provers/SMTLib/SMTLibProcess.cs787
-rw-r--r--Source/Provers/SMTLib/SMTLibProverOptions.cs316
-rw-r--r--Source/Provers/SMTLib/TypeDeclCollector.cs803
-rw-r--r--Source/Provers/SMTLib/Z3.cs772
-rw-r--r--Source/Provers/SMTLib/cce.cs384
-rw-r--r--Source/Provers/TPTP/ProverInterface.cs702
-rw-r--r--Source/Provers/TPTP/TPTP.csproj260
-rw-r--r--Source/Provers/TPTP/TPTPLineariser.cs1480
-rw-r--r--Source/Provers/TPTP/TypeDeclCollector.cs270
-rw-r--r--Source/Provers/Z3api/ContextLayer.cs1454
-rw-r--r--Source/Provers/Z3api/ProverLayer.cs706
-rw-r--r--Source/Provers/Z3api/SafeContext.cs30
-rw-r--r--Source/Provers/Z3api/StubContext.cs148
-rw-r--r--Source/Provers/Z3api/TypeAdapter.cs392
-rw-r--r--Source/Provers/Z3api/VCExprVisitor.cs1298
-rw-r--r--Source/Provers/Z3api/Z3api.csproj376
-rw-r--r--Source/Provers/Z3api/cce.cs384
-rw-r--r--Source/UnitTests/BasetypesTests/BasetypesTests.csproj136
-rw-r--r--Source/UnitTests/BasetypesTests/Properties/AssemblyInfo.cs72
-rw-r--r--Source/UnitTests/BasetypesTests/packages.config6
-rw-r--r--Source/UnitTests/CoreTests/CoreTests.csproj166
-rw-r--r--Source/UnitTests/CoreTests/Duplicator.cs8
-rw-r--r--Source/UnitTests/CoreTests/Properties/AssemblyInfo.cs72
-rw-r--r--Source/UnitTests/CoreTests/packages.config6
-rw-r--r--Source/UnitTests/TestUtil/Properties/AssemblyInfo.cs72
-rw-r--r--Source/UnitTests/TestUtil/TestUtil.csproj140
-rw-r--r--Source/UnitTests/TestUtil/packages.config6
-rw-r--r--Source/VCExpr/BigLiteralAbstracter.cs462
-rw-r--r--Source/VCExpr/Boogie2VCExpr.cs2478
-rw-r--r--Source/VCExpr/Clustering.cs1042
-rw-r--r--Source/VCExpr/LetBindingSorter.cs322
-rw-r--r--Source/VCExpr/NameClashResolver.cs392
-rw-r--r--Source/VCExpr/SimplifyLikeLineariser.cs2444
-rw-r--r--Source/VCExpr/TermFormulaFlattening.cs494
-rw-r--r--Source/VCExpr/TypeErasure.cs3420
-rw-r--r--Source/VCExpr/TypeErasureArguments.cs1506
-rw-r--r--Source/VCExpr/TypeErasurePremisses.cs2674
-rw-r--r--Source/VCExpr/VCExpr.csproj446
-rw-r--r--Source/VCExpr/VCExprAST.cs4536
-rw-r--r--Source/VCExpr/VCExprASTPrinter.cs864
-rw-r--r--Source/VCExpr/VCExprASTVisitors.cs3360
-rw-r--r--Source/VCExpr/cce.cs384
-rw-r--r--Source/VCGeneration/Check.cs1381
-rw-r--r--Source/VCGeneration/ConditionGeneration.cs4026
-rw-r--r--Source/VCGeneration/Context.cs510
-rw-r--r--Source/VCGeneration/ExprExtensions.cs706
-rw-r--r--Source/VCGeneration/FixedpointVC.cs4474
-rw-r--r--Source/VCGeneration/OrderingAxioms.cs676
-rw-r--r--Source/VCGeneration/RPFP.cs1218
-rw-r--r--Source/VCGeneration/StratifiedVC.cs5820
-rw-r--r--Source/VCGeneration/VC.cs8027
-rw-r--r--Source/VCGeneration/VCGeneration.csproj448
-rw-r--r--Source/VCGeneration/Wlp.cs530
-rw-r--r--Source/VCGeneration/cce.cs210
-rw-r--r--Source/version.cs8
-rw-r--r--Source/version.ssc12
-rw-r--r--Test/AbsHoudini/Answer978
-rw-r--r--Test/AbsHoudini/f1.bpl64
-rw-r--r--Test/AbsHoudini/fail1.bpl36
-rw-r--r--Test/AbsHoudini/houd1.bpl38
-rw-r--r--Test/AbsHoudini/houd10.bpl48
-rw-r--r--Test/AbsHoudini/houd11.bpl30
-rw-r--r--Test/AbsHoudini/houd12.bpl120
-rw-r--r--Test/AbsHoudini/houd2.bpl58
-rw-r--r--Test/AbsHoudini/houd3.bpl58
-rw-r--r--Test/AbsHoudini/houd4.bpl58
-rw-r--r--Test/AbsHoudini/houd5.bpl62
-rw-r--r--Test/AbsHoudini/houd6.bpl92
-rw-r--r--Test/AbsHoudini/houd7.bpl74
-rw-r--r--Test/AbsHoudini/houd8.bpl62
-rw-r--r--Test/AbsHoudini/imp1.bpl42
-rw-r--r--Test/AbsHoudini/int1.bpl52
-rw-r--r--Test/AbsHoudini/multi.bpl134
-rw-r--r--Test/AbsHoudini/pred1.bpl50
-rw-r--r--Test/AbsHoudini/pred2.bpl28
-rw-r--r--Test/AbsHoudini/pred3.bpl52
-rw-r--r--Test/AbsHoudini/pred4.bpl46
-rw-r--r--Test/AbsHoudini/pred5.bpl52
-rw-r--r--Test/AbsHoudini/quant1.bpl18
-rw-r--r--Test/AbsHoudini/quant2.bpl52
-rw-r--r--Test/AbsHoudini/quant3.bpl18
-rw-r--r--Test/AbsHoudini/quant4.bpl18
-rw-r--r--Test/AbsHoudini/quant5.bpl26
-rw-r--r--Test/AbsHoudini/runtest.bat56
-rw-r--r--Test/AbsHoudini/test1.bpl80
-rw-r--r--Test/AbsHoudini/test10.bpl104
-rw-r--r--Test/AbsHoudini/test2.bpl84
-rw-r--r--Test/AbsHoudini/test7.bpl42
-rw-r--r--Test/AbsHoudini/test8.bpl54
-rw-r--r--Test/AbsHoudini/test9.bpl184
-rw-r--r--Test/README.md348
-rw-r--r--Test/aitest0/Intervals.bpl683
-rw-r--r--Test/aitest0/Intervals.bpl.expect2
-rw-r--r--Test/aitest0/Issue25.bpl14
-rw-r--r--Test/aitest0/Issue25.bpl.expect8
-rw-r--r--Test/aitest0/constants.bpl142
-rw-r--r--Test/aitest1/Bound.bpl60
-rw-r--r--Test/aitest1/Linear0.bpl24
-rw-r--r--Test/aitest1/Linear1.bpl26
-rw-r--r--Test/aitest1/Linear2.bpl26
-rw-r--r--Test/aitest1/Linear3.bpl26
-rw-r--r--Test/aitest1/Linear4.bpl38
-rw-r--r--Test/aitest1/Linear5.bpl50
-rw-r--r--Test/aitest1/Linear6.bpl46
-rw-r--r--Test/aitest1/Linear7.bpl42
-rw-r--r--Test/aitest1/Linear8.bpl88
-rw-r--r--Test/aitest1/Linear9.bpl62
-rw-r--r--Test/aitest1/ineq.bpl166
-rw-r--r--Test/aitest9/TestIntervals.bpl144
-rw-r--r--Test/aitest9/VarMapFixpoint.bpl120
-rw-r--r--Test/bitvectors/arrays.bpl84
-rw-r--r--Test/bitvectors/bv0.bpl30
-rw-r--r--Test/bitvectors/bv1.bpl38
-rw-r--r--Test/bitvectors/bv10.bpl24
-rw-r--r--Test/bitvectors/bv2.bpl26
-rw-r--r--Test/bitvectors/bv3.bpl10
-rw-r--r--Test/bitvectors/bv4.bpl50
-rw-r--r--Test/bitvectors/bv5.bpl26
-rw-r--r--Test/bitvectors/bv6.bpl22
-rw-r--r--Test/bitvectors/bv7.bpl22
-rw-r--r--Test/bitvectors/bv8.bpl50
-rw-r--r--Test/bitvectors/bv9.bpl50
-rw-r--r--Test/civl/DeviceCache.bpl (renamed from Test/og/DeviceCache.bpl)420
-rw-r--r--Test/civl/DeviceCache.bpl.expect2
-rw-r--r--Test/civl/FlanaganQadeer.bpl (renamed from Test/og/FlanaganQadeer.bpl)148
-rw-r--r--Test/civl/FlanaganQadeer.bpl.expect2
-rw-r--r--Test/civl/Program1.bpl (renamed from Test/og/Program1.bpl)66
-rw-r--r--Test/civl/Program1.bpl.expect (renamed from Test/og/akash.bpl.expect)4
-rw-r--r--Test/civl/Program2.bpl (renamed from Test/og/Program2.bpl)74
-rw-r--r--Test/civl/Program2.bpl.expect (renamed from Test/og/treiber-stack.bpl.expect)4
-rw-r--r--Test/civl/Program3.bpl (renamed from Test/og/Program3.bpl)72
-rw-r--r--Test/civl/Program3.bpl.expect2
-rw-r--r--Test/civl/Program4.bpl139
-rw-r--r--Test/civl/Program4.bpl.expect (renamed from Test/og/lock-introduced.bpl.expect)4
-rw-r--r--Test/civl/Program5.bpl (renamed from Test/og/Program5.bpl)163
-rw-r--r--Test/civl/Program5.bpl.expect2
-rw-r--r--Test/civl/StoreBuffer.bpl187
-rw-r--r--Test/civl/StoreBuffer.bpl.expect2
-rw-r--r--Test/civl/akash.bpl (renamed from Test/og/akash.bpl)210
-rw-r--r--Test/civl/akash.bpl.expect2
-rw-r--r--Test/civl/alloc.bpl175
-rw-r--r--Test/civl/alloc.bpl.expect2
-rw-r--r--Test/civl/bar.bpl (renamed from Test/og/bar.bpl)114
-rw-r--r--Test/civl/bar.bpl.expect (renamed from Test/og/bar.bpl.expect)26
-rw-r--r--Test/civl/chris.bpl (renamed from Test/og/chris.bpl)56
-rw-r--r--Test/civl/chris.bpl.expect (renamed from Test/og/chris.bpl.expect)4
-rw-r--r--Test/civl/chris2.bpl (renamed from Test/og/chris2.bpl)68
-rw-r--r--Test/civl/chris2.bpl.expect (renamed from Test/og/chris2.bpl.expect)36
-rw-r--r--Test/civl/chris3.bpl19
-rw-r--r--Test/civl/chris3.bpl.expect2
-rw-r--r--Test/civl/chris4.bpl16
-rw-r--r--Test/civl/chris4.bpl.expect5
-rw-r--r--Test/civl/chris5.bpl19
-rw-r--r--Test/civl/chris5.bpl.expect7
-rw-r--r--Test/civl/chris6.bpl14
-rw-r--r--Test/civl/chris6.bpl.expect5
-rw-r--r--Test/civl/chris7.bpl14
-rw-r--r--Test/civl/chris7.bpl.expect (renamed from Test/og/one.bpl.expect)4
-rw-r--r--Test/civl/chris8.bpl15
-rw-r--r--Test/civl/chris8.bpl.expect (renamed from Test/og/termination2.bpl.expect)4
-rw-r--r--Test/civl/civl-paper.bpl (renamed from Test/og/civl-paper.bpl)350
-rw-r--r--Test/civl/civl-paper.bpl.expect2
-rw-r--r--Test/civl/foo.bpl (renamed from Test/og/foo.bpl)114
-rw-r--r--Test/civl/foo.bpl.expect (renamed from Test/og/foo.bpl.expect)16
-rw-r--r--Test/civl/funky.bpl133
-rw-r--r--Test/civl/funky.bpl.expect2
-rw-r--r--Test/civl/ghost.bpl45
-rw-r--r--Test/civl/ghost.bpl.expect2
-rw-r--r--Test/civl/linear-set.bpl (renamed from Test/og/linear-set.bpl)210
-rw-r--r--Test/civl/linear-set.bpl.expect2
-rw-r--r--Test/civl/linear-set2.bpl (renamed from Test/og/linear-set2.bpl)212
-rw-r--r--Test/civl/linear-set2.bpl.expect2
-rw-r--r--Test/civl/lock-introduced.bpl (renamed from Test/og/lock-introduced.bpl)210
-rw-r--r--Test/civl/lock-introduced.bpl.expect2
-rw-r--r--Test/civl/lock.bpl (renamed from Test/og/lock.bpl)114
-rw-r--r--Test/civl/lock.bpl.expect2
-rw-r--r--Test/civl/lock2.bpl (renamed from Test/og/lock2.bpl)126
-rw-r--r--Test/civl/lock2.bpl.expect2
-rw-r--r--Test/civl/multiset.bpl (renamed from Test/og/multiset.bpl)648
-rw-r--r--Test/civl/multiset.bpl.expect2
-rw-r--r--Test/civl/new1.bpl (renamed from Test/og/new1.bpl)84
-rw-r--r--Test/civl/new1.bpl.expect (renamed from Test/og/FlanaganQadeer.bpl.expect)4
-rw-r--r--Test/civl/nocollector.bpl8
-rw-r--r--Test/civl/nocollector.bpl.expect2
-rw-r--r--Test/civl/one.bpl (renamed from Test/og/one.bpl)36
-rw-r--r--Test/civl/one.bpl.expect (renamed from Test/og/new1.bpl.expect)4
-rw-r--r--Test/civl/par-incr.bpl31
-rw-r--r--Test/civl/par-incr.bpl.expect2
-rw-r--r--Test/civl/parallel1.bpl (renamed from Test/og/parallel1.bpl)96
-rw-r--r--Test/civl/parallel1.bpl.expect (renamed from Test/og/parallel1.bpl.expect)16
-rw-r--r--Test/civl/parallel2.bpl (renamed from Test/og/parallel2.bpl)118
-rw-r--r--Test/civl/parallel2.bpl.expect2
-rw-r--r--Test/civl/parallel4.bpl (renamed from Test/og/parallel4.bpl)90
-rw-r--r--Test/civl/parallel4.bpl.expect (renamed from Test/og/parallel4.bpl.expect)12
-rw-r--r--Test/civl/parallel5.bpl (renamed from Test/og/parallel5.bpl)118
-rw-r--r--Test/civl/parallel5.bpl.expect2
-rw-r--r--Test/civl/perm.bpl (renamed from Test/og/perm.bpl)96
-rw-r--r--Test/civl/perm.bpl.expect (renamed from Test/og/linear-set.bpl.expect)4
-rw-r--r--Test/civl/t1.bpl (renamed from Test/og/t1.bpl)206
-rw-r--r--Test/civl/t1.bpl.expect (renamed from Test/og/t1.bpl.expect)18
-rw-r--r--Test/civl/termination.bpl (renamed from Test/og/termination.bpl)36
-rw-r--r--Test/civl/termination.bpl.expect (renamed from Test/og/termination.bpl.expect)4
-rw-r--r--Test/civl/termination2.bpl (renamed from Test/og/termination2.bpl)38
-rw-r--r--Test/civl/termination2.bpl.expect (renamed from Test/og/perm.bpl.expect)4
-rw-r--r--Test/civl/ticket.bpl (renamed from Test/og/ticket.bpl)293
-rw-r--r--Test/civl/ticket.bpl.expect2
-rw-r--r--Test/civl/treiber-stack.bpl (renamed from Test/og/treiber-stack.bpl)407
-rw-r--r--Test/civl/treiber-stack.bpl.expect2
-rw-r--r--Test/civl/wsq.bpl (renamed from Test/og/wsq.bpl)1102
-rw-r--r--Test/civl/wsq.bpl.expect2
-rw-r--r--Test/codeexpr/CodeExpr0.bpl110
-rw-r--r--Test/codeexpr/CodeExpr1.bpl138
-rw-r--r--Test/codeexpr/CodeExpr2.bpl104
-rw-r--r--Test/codeexpr/codeExprBug.bpl30
-rw-r--r--Test/codeexpr/codeExprBug.bpl.expect4
-rw-r--r--Test/commandline/multiple_procs_unusual_identifiers.bpl75
-rw-r--r--Test/commandline/multiple_procs_verify_four_asterisk_wildcard.bpl28
-rw-r--r--Test/commandline/multiple_procs_verify_one.bpl22
-rw-r--r--Test/commandline/multiple_procs_verify_one_request_twice.bpl20
-rw-r--r--Test/commandline/multiple_procs_verify_two.bpl17
-rw-r--r--Test/commandline/multiple_procs_verify_two_asterisk_wildcard_begin.bpl17
-rw-r--r--Test/commandline/multiple_procs_verify_two_asterisk_wildcard_end.bpl17
-rw-r--r--Test/commandline/multiple_procs_verify_two_asterisk_wildcard_inbetween.bpl23
-rw-r--r--Test/datatypes/ex.bpl26
-rw-r--r--Test/datatypes/t1.bpl50
-rw-r--r--Test/datatypes/t2.bpl50
-rw-r--r--Test/doomed/doomdebug.bpl88
-rw-r--r--Test/doomed/doomed.bpl174
-rw-r--r--Test/doomed/notdoomed.bpl116
-rw-r--r--Test/doomed/runtest.bat32
-rw-r--r--Test/doomed/smoke0.bpl158
-rw-r--r--Test/extractloops/detLoopExtract.bpl4
-rw-r--r--Test/extractloops/detLoopExtract2.bpl27
-rw-r--r--Test/extractloops/detLoopExtract2.bpl.expect2
-rw-r--r--Test/extractloops/detLoopExtractNested.bpl23
-rw-r--r--Test/extractloops/detLoopExtractNested.bpl.expect19
-rw-r--r--Test/extractloops/t1.bpl86
-rw-r--r--Test/extractloops/t2.bpl108
-rw-r--r--Test/extractloops/t3.bpl86
-rw-r--r--Test/forro/prog0.forro78
-rw-r--r--Test/generalizedarray/Maps.bpl120
-rw-r--r--Test/havoc0/KbdCreateClassObject.bpl10314
-rw-r--r--Test/havoc0/KeyboardClassFindMorePorts.bpl7564
-rw-r--r--Test/havoc0/KeyboardClassUnload.bpl6670
-rw-r--r--Test/havoc0/MouCreateClassObject.bpl9840
-rw-r--r--Test/havoc0/MouseClassFindMorePorts.bpl7678
-rw-r--r--Test/havoc0/MouseClassUnload.bpl6742
-rw-r--r--Test/houdini/deterministic.bpl54
-rw-r--r--Test/houdini/deterministic.bpl.expect6
-rw-r--r--Test/houdini/houd1.bpl42
-rw-r--r--Test/houdini/houd10.bpl50
-rw-r--r--Test/houdini/houd11.bpl30
-rw-r--r--Test/houdini/houd12.bpl118
-rw-r--r--Test/houdini/houd2.bpl58
-rw-r--r--Test/houdini/houd3.bpl58
-rw-r--r--Test/houdini/houd4.bpl58
-rw-r--r--Test/houdini/houd5.bpl62
-rw-r--r--Test/houdini/houd6.bpl92
-rw-r--r--Test/houdini/houd7.bpl74
-rw-r--r--Test/houdini/houd8.bpl64
-rw-r--r--Test/houdini/houd9.bpl68
-rw-r--r--Test/houdini/mergedProgSingle_dac.bpl15232
-rw-r--r--Test/houdini/mergedProgSingle_dac.bpl.expect380
-rw-r--r--Test/houdini/mergedProgSingle_res_ex1.bpl1242
-rw-r--r--Test/houdini/mergedProgSingle_res_ex1.bpl.expect16
-rw-r--r--Test/houdini/mergedProgSingle_res_ex2.bpl1242
-rw-r--r--Test/houdini/mergedProgSingle_res_ex2.bpl.expect16
-rw-r--r--Test/houdini/test1.bpl76
-rw-r--r--Test/houdini/test10.bpl98
-rw-r--r--Test/houdini/test10.bpl.expect14
-rw-r--r--Test/houdini/test2.bpl80
-rw-r--r--Test/houdini/test7.bpl34
-rw-r--r--Test/houdini/test8.bpl46
-rw-r--r--Test/houdini/test9.bpl150
-rw-r--r--Test/houdini/testUnsatCore.bpl72
-rw-r--r--Test/houdini/testUnsatCore.bpl.expect14
-rw-r--r--Test/inline/Elevator.asml110
-rw-r--r--Test/inline/Elevator.bpl312
-rw-r--r--Test/inline/InliningAndLoops.bpl44
-rw-r--r--Test/inline/codeexpr.bpl124
-rw-r--r--Test/inline/expansion2.bpl38
-rw-r--r--Test/inline/expansion3.bpl26
-rw-r--r--Test/inline/expansion4.bpl22
-rw-r--r--Test/inline/fundef.bpl16
-rw-r--r--Test/inline/fundef2.bpl18
-rw-r--r--Test/inline/polyInline.bpl86
-rw-r--r--Test/inline/test0.bpl100
-rw-r--r--Test/inline/test1.bpl92
-rw-r--r--Test/inline/test2.bpl66
-rw-r--r--Test/inline/test3.bpl58
-rw-r--r--Test/inline/test4.bpl108
-rw-r--r--Test/inline/test5.bpl162
-rw-r--r--Test/inline/test6.bpl78
-rw-r--r--Test/linear/allocator.bpl24
-rw-r--r--Test/linear/async-bug.bpl72
-rw-r--r--Test/linear/async-bug.bpl.expect6
-rw-r--r--Test/linear/bug.bpl32
-rw-r--r--Test/linear/f1.bpl96
-rw-r--r--Test/linear/f2.bpl44
-rw-r--r--Test/linear/f3.bpl20
-rw-r--r--Test/linear/list.bpl100
-rw-r--r--Test/linear/typecheck.bpl233
-rw-r--r--Test/linear/typecheck.bpl.expect32
-rw-r--r--Test/livevars/NestedOneDimensionalMap.bpl62
-rw-r--r--Test/livevars/TwoDimensionalMap.bpl62
-rw-r--r--Test/livevars/bla1.bpl4204
-rw-r--r--Test/livevars/daytona_bug2_ioctl_example_1.bpl8024
-rw-r--r--Test/livevars/daytona_bug2_ioctl_example_2.bpl9720
-rw-r--r--Test/livevars/daytona_bug2_ioctl_example_2.bpl.expect3
-rw-r--r--Test/livevars/stack_overflow.bpl195938
-rw-r--r--Test/lock/Lock.bpl248
-rw-r--r--Test/lock/LockIncorrect.bpl106
-rw-r--r--Test/og/DeviceCache.bpl.expect2
-rw-r--r--Test/og/Program1.bpl.expect2
-rw-r--r--Test/og/Program2.bpl.expect2
-rw-r--r--Test/og/Program4.bpl68
-rw-r--r--Test/og/Program4.bpl.expect2
-rw-r--r--Test/og/Program5.bpl.expect2
-rw-r--r--Test/og/civl-paper.bpl.expect2
-rw-r--r--Test/og/linear-set2.bpl.expect2
-rw-r--r--Test/og/lock.bpl.expect2
-rw-r--r--Test/og/lock2.bpl.expect2
-rw-r--r--Test/og/multiset.bpl.expect2
-rw-r--r--Test/og/parallel2.bpl.expect2
-rw-r--r--Test/og/parallel5.bpl.expect2
-rw-r--r--Test/og/ticket.bpl.expect2
-rw-r--r--Test/og/wsq.bpl.expect2
-rw-r--r--Test/optimization/Optimization0.bpl84
-rw-r--r--Test/optimization/Optimization0.bpl.expect135
-rw-r--r--Test/optimization/Optimization1.bpl32
-rw-r--r--Test/optimization/Optimization1.bpl.expect5
-rw-r--r--Test/optimization/Optimization2.bpl12
-rw-r--r--Test/optimization/Optimization2.bpl.expect3
-rw-r--r--Test/optimization/Optimization3.bpl20
-rw-r--r--Test/optimization/Optimization3.bpl.expect31
-rw-r--r--Test/optimization/lit.local.cfg3
-rw-r--r--Test/prover/EQ_v2.Eval__v4.Eval_out.bpl4514
-rw-r--r--Test/prover/usedot.bpl9
-rw-r--r--Test/prover/z3mutl.bpl46
-rw-r--r--Test/secure/tworound.bpl116
-rw-r--r--Test/smoke/smoke0.bpl110
-rw-r--r--Test/snapshots/Snapshots0.v0.bpl84
-rw-r--r--Test/snapshots/Snapshots0.v1.bpl84
-rw-r--r--Test/snapshots/Snapshots0.v2.bpl62
-rw-r--r--Test/snapshots/Snapshots1.v0.bpl28
-rw-r--r--Test/snapshots/Snapshots1.v1.bpl28
-rw-r--r--Test/snapshots/Snapshots1.v2.bpl30
-rw-r--r--Test/snapshots/Snapshots10.v0.bpl40
-rw-r--r--Test/snapshots/Snapshots10.v1.bpl42
-rw-r--r--Test/snapshots/Snapshots11.v0.bpl28
-rw-r--r--Test/snapshots/Snapshots11.v1.bpl30
-rw-r--r--Test/snapshots/Snapshots12.v0.bpl32
-rw-r--r--Test/snapshots/Snapshots12.v1.bpl32
-rw-r--r--Test/snapshots/Snapshots13.v0.bpl42
-rw-r--r--Test/snapshots/Snapshots13.v1.bpl32
-rw-r--r--Test/snapshots/Snapshots14.v0.bpl42
-rw-r--r--Test/snapshots/Snapshots14.v1.bpl42
-rw-r--r--Test/snapshots/Snapshots15.v0.bpl34
-rw-r--r--Test/snapshots/Snapshots15.v1.bpl34
-rw-r--r--Test/snapshots/Snapshots16.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots16.v1.bpl30
-rw-r--r--Test/snapshots/Snapshots17.v0.bpl64
-rw-r--r--Test/snapshots/Snapshots17.v1.bpl64
-rw-r--r--Test/snapshots/Snapshots18.v0.bpl48
-rw-r--r--Test/snapshots/Snapshots18.v1.bpl48
-rw-r--r--Test/snapshots/Snapshots19.v0.bpl22
-rw-r--r--Test/snapshots/Snapshots19.v1.bpl22
-rw-r--r--Test/snapshots/Snapshots2.v0.bpl24
-rw-r--r--Test/snapshots/Snapshots2.v1.bpl24
-rw-r--r--Test/snapshots/Snapshots2.v2.bpl26
-rw-r--r--Test/snapshots/Snapshots2.v3.bpl26
-rw-r--r--Test/snapshots/Snapshots2.v4.bpl26
-rw-r--r--Test/snapshots/Snapshots2.v5.bpl28
-rw-r--r--Test/snapshots/Snapshots20.v0.bpl40
-rw-r--r--Test/snapshots/Snapshots20.v1.bpl40
-rw-r--r--Test/snapshots/Snapshots21.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots21.v1.bpl30
-rw-r--r--Test/snapshots/Snapshots22.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots22.v1.bpl30
-rw-r--r--Test/snapshots/Snapshots23.v0.bpl44
-rw-r--r--Test/snapshots/Snapshots23.v1.bpl46
-rw-r--r--Test/snapshots/Snapshots23.v2.bpl44
-rw-r--r--Test/snapshots/Snapshots24.v0.bpl50
-rw-r--r--Test/snapshots/Snapshots24.v1.bpl50
-rw-r--r--Test/snapshots/Snapshots25.v0.bpl28
-rw-r--r--Test/snapshots/Snapshots25.v1.bpl28
-rw-r--r--Test/snapshots/Snapshots26.v0.bpl28
-rw-r--r--Test/snapshots/Snapshots26.v1.bpl30
-rw-r--r--Test/snapshots/Snapshots27.v0.bpl28
-rw-r--r--Test/snapshots/Snapshots27.v1.bpl32
-rw-r--r--Test/snapshots/Snapshots28.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots28.v1.bpl32
-rw-r--r--Test/snapshots/Snapshots29.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots29.v1.bpl30
-rw-r--r--Test/snapshots/Snapshots3.v0.bpl36
-rw-r--r--Test/snapshots/Snapshots3.v1.bpl36
-rw-r--r--Test/snapshots/Snapshots30.v0.bpl26
-rw-r--r--Test/snapshots/Snapshots30.v1.bpl28
-rw-r--r--Test/snapshots/Snapshots31.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots31.v1.bpl28
-rw-r--r--Test/snapshots/Snapshots32.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots32.v1.bpl24
-rw-r--r--Test/snapshots/Snapshots33.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots33.v1.bpl16
-rw-r--r--Test/snapshots/Snapshots34.v0.bpl7
-rw-r--r--Test/snapshots/Snapshots34.v1.bpl6
-rw-r--r--Test/snapshots/Snapshots35.v0.bpl7
-rw-r--r--Test/snapshots/Snapshots35.v1.bpl6
-rw-r--r--Test/snapshots/Snapshots36.v0.bpl14
-rw-r--r--Test/snapshots/Snapshots36.v1.bpl14
-rw-r--r--Test/snapshots/Snapshots37.v0.bpl9
-rw-r--r--Test/snapshots/Snapshots37.v1.bpl9
-rw-r--r--Test/snapshots/Snapshots38.v0.bpl13
-rw-r--r--Test/snapshots/Snapshots38.v1.bpl14
-rw-r--r--Test/snapshots/Snapshots38.v2.bpl14
-rw-r--r--Test/snapshots/Snapshots39.v0.bpl13
-rw-r--r--Test/snapshots/Snapshots39.v1.bpl14
-rw-r--r--Test/snapshots/Snapshots39.v2.bpl14
-rw-r--r--Test/snapshots/Snapshots4.v0.bpl72
-rw-r--r--Test/snapshots/Snapshots4.v1.bpl90
-rw-r--r--Test/snapshots/Snapshots40.v0.bpl14
-rw-r--r--Test/snapshots/Snapshots40.v1.bpl15
-rw-r--r--Test/snapshots/Snapshots40.v2.bpl15
-rw-r--r--Test/snapshots/Snapshots41.v0.bpl35
-rw-r--r--Test/snapshots/Snapshots41.v1.bpl39
-rw-r--r--Test/snapshots/Snapshots5.v0.bpl22
-rw-r--r--Test/snapshots/Snapshots5.v1.bpl22
-rw-r--r--Test/snapshots/Snapshots6.v0.bpl34
-rw-r--r--Test/snapshots/Snapshots6.v1.bpl36
-rw-r--r--Test/snapshots/Snapshots7.v0.bpl38
-rw-r--r--Test/snapshots/Snapshots7.v1.bpl40
-rw-r--r--Test/snapshots/Snapshots8.v0.bpl30
-rw-r--r--Test/snapshots/Snapshots8.v1.bpl32
-rw-r--r--Test/snapshots/Snapshots9.v0.bpl34
-rw-r--r--Test/snapshots/Snapshots9.v1.bpl32
-rw-r--r--Test/snapshots/runtest.AI.snapshot4
-rw-r--r--Test/snapshots/runtest.AI.snapshot.expect18
-rw-r--r--Test/snapshots/runtest.snapshot5
-rw-r--r--Test/snapshots/runtest.snapshot.expect1410
-rw-r--r--Test/stratifiedinline/bar1.bpl56
-rw-r--r--Test/stratifiedinline/bar10.bpl86
-rw-r--r--Test/stratifiedinline/bar11.bpl66
-rw-r--r--Test/stratifiedinline/bar12.bpl20
-rw-r--r--Test/stratifiedinline/bar13.bpl72
-rw-r--r--Test/stratifiedinline/bar2.bpl50
-rw-r--r--Test/stratifiedinline/bar3.bpl82
-rw-r--r--Test/stratifiedinline/bar4.bpl78
-rw-r--r--Test/stratifiedinline/bar6.bpl76
-rw-r--r--Test/stratifiedinline/bar7.bpl90
-rw-r--r--Test/stratifiedinline/bar8.bpl88
-rw-r--r--Test/stratifiedinline/bar9.bpl94
-rw-r--r--Test/stratifiedinline/large.bpl33522
-rw-r--r--Test/symdiff/foo.bpl38
-rw-r--r--Test/test0/Arrays0.bpl10
-rw-r--r--Test/test0/Arrays1.bpl44
-rw-r--r--Test/test0/AssertVerifiedUnder0.bpl8
-rw-r--r--Test/test0/AssertVerifiedUnder0.bpl.expect3
-rw-r--r--Test/test0/AttributeParsing.bpl80
-rw-r--r--Test/test0/AttributeParsingErr.bpl50
-rw-r--r--Test/test0/AttributeResolution.bpl80
-rw-r--r--Test/test0/BadLabels0.bpl30
-rw-r--r--Test/test0/BadLabels1.bpl166
-rw-r--r--Test/test0/BadQuantifier.bpl10
-rw-r--r--Test/test0/EmptyCallArgs.bpl44
-rw-r--r--Test/test0/LargeLiterals0.bpl18
-rw-r--r--Test/test0/LineParse.bpl28
-rw-r--r--Test/test0/LineResolve.bpl90
-rw-r--r--Test/test0/MapsResolutionErrors.bpl60
-rw-r--r--Test/test0/ModifiedBag.bpl746
-rw-r--r--Test/test0/Orderings.bpl42
-rw-r--r--Test/test0/PrettyPrint.bpl134
-rw-r--r--Test/test0/Prog0.bpl106
-rw-r--r--Test/test0/Quoting.bpl36
-rw-r--r--Test/test0/SeparateVerification0.bpl54
-rw-r--r--Test/test0/SeparateVerification1.bpl42
-rw-r--r--Test/test0/Triggers0.bpl34
-rw-r--r--Test/test0/Triggers1.bpl258
-rw-r--r--Test/test0/Types0.bpl20
-rw-r--r--Test/test0/Types1.bpl18
-rw-r--r--Test/test0/WhereParsing.bpl72
-rw-r--r--Test/test0/WhereParsing0.bpl68
-rw-r--r--Test/test0/WhereParsing1.bpl34
-rw-r--r--Test/test0/WhereParsing2.bpl8
-rw-r--r--Test/test0/WhereResolution.bpl128
-rw-r--r--Test/test1/Arrays.bpl452
-rw-r--r--Test/test1/AssertVerifiedUnder0.bpl8
-rw-r--r--Test/test1/AssertVerifiedUnder0.bpl.expect3
-rw-r--r--Test/test1/AssumptionVariables0.bpl114
-rw-r--r--Test/test1/AssumptionVariables1.bpl12
-rw-r--r--Test/test1/AssumptionVariables1.bpl.expect4
-rw-r--r--Test/test1/AttributeTyping.bpl74
-rw-r--r--Test/test1/EmptyCallArgs.bpl42
-rw-r--r--Test/test1/Family.bpl98
-rw-r--r--Test/test1/Frame0.bpl34
-rw-r--r--Test/test1/Frame1.bpl198
-rw-r--r--Test/test1/FunBody.bpl30
-rw-r--r--Test/test1/IfThenElse0.bpl4
-rw-r--r--Test/test1/IntReal.bpl100
-rw-r--r--Test/test1/Lambda.bpl4
-rw-r--r--Test/test1/LogicalExprs.bpl16
-rw-r--r--Test/test1/MapsTypeErrors.bpl258
-rw-r--r--Test/test1/Orderings.bpl20
-rw-r--r--Test/test1/StatementIds0.bpl24
-rw-r--r--Test/test1/StatementIds0.bpl.expect5
-rw-r--r--Test/test1/UpdateExprTyping.bpl90
-rw-r--r--Test/test1/WhereTyping.bpl94
-rw-r--r--Test/test13/ErrorTraceTestLoopInvViolationBPL.bpl64
-rw-r--r--Test/test15/CaptureState.bpl58
-rw-r--r--Test/test15/CaptureState.bpl.expect18
-rw-r--r--Test/test15/IntInModel.bpl10
-rw-r--r--Test/test15/InterpretedFunctionTests.bpl38
-rw-r--r--Test/test15/ModelTest.bpl24
-rw-r--r--Test/test15/NullInModel.bpl14
-rw-r--r--Test/test16/LoopUnroll.bpl170
-rw-r--r--Test/test17/Answer16
-rw-r--r--Test/test17/contractinfer.bpl46
-rw-r--r--Test/test17/flpydisk.bpl4590
-rw-r--r--Test/test17/runtest.bat24
-rw-r--r--Test/test2/Arrays.bpl368
-rw-r--r--Test/test2/AssertVerifiedUnder0.bpl78
-rw-r--r--Test/test2/AssertVerifiedUnder0.bpl.expect22
-rw-r--r--Test/test2/AssumeEnsures.bpl142
-rw-r--r--Test/test2/AssumptionVariables0.bpl113
-rw-r--r--Test/test2/AssumptionVariables0.bpl.expect4
-rw-r--r--Test/test2/Axioms.bpl62
-rw-r--r--Test/test2/B.bpl176
-rw-r--r--Test/test2/BadLineNumber.bpl15
-rw-r--r--Test/test2/BadLineNumber.bpl.expect7
-rw-r--r--Test/test2/BoundedTypeParameterQuantifier.bpl14
-rw-r--r--Test/test2/BoundedTypeParameterQuantifier.bpl.expect2
-rw-r--r--Test/test2/Call.bpl124
-rw-r--r--Test/test2/CallVerifiedUnder0.bpl42
-rw-r--r--Test/test2/CallVerifiedUnder0.bpl.expect14
-rw-r--r--Test/test2/ContractEvaluationOrder.bpl72
-rw-r--r--Test/test2/CutBackEdge.bpl84
-rw-r--r--Test/test2/Ensures.bpl154
-rw-r--r--Test/test2/False.bpl36
-rw-r--r--Test/test2/FormulaTerm.bpl282
-rw-r--r--Test/test2/FormulaTerm2.bpl102
-rw-r--r--Test/test2/FreeCall.bpl168
-rw-r--r--Test/test2/IfThenElse1.bpl4
-rw-r--r--Test/test2/Implies.bpl76
-rw-r--r--Test/test2/InvariantVerifiedUnder0.bpl54
-rw-r--r--Test/test2/InvariantVerifiedUnder0.bpl.expect23
-rw-r--r--Test/test2/LambdaOldExpressions.bpl126
-rw-r--r--Test/test2/LambdaPoly.bpl4
-rw-r--r--Test/test2/LoopInvAssume.bpl44
-rw-r--r--Test/test2/NeverPattern.bpl140
-rw-r--r--Test/test2/NullaryMaps.bpl118
-rw-r--r--Test/test2/Old.bpl268
-rw-r--r--Test/test2/OldIllegal.bpl36
-rw-r--r--Test/test2/Passification.bpl342
-rw-r--r--Test/test2/Quantifiers.bpl312
-rw-r--r--Test/test2/SelectiveChecking.bpl4
-rw-r--r--Test/test2/Structured.bpl692
-rw-r--r--Test/test2/Timeouts0.bpl170
-rw-r--r--Test/test2/TypeEncodingM.bpl4
-rw-r--r--Test/test2/UpdateExpr.bpl166
-rw-r--r--Test/test2/Where.bpl330
-rw-r--r--Test/test2/sk_hack.bpl68
-rw-r--r--Test/test2/strings-no-where.bpl1994
-rw-r--r--Test/test2/strings-where.bpl1994
-rw-r--r--Test/test20/Coercions.bpl38
-rw-r--r--Test/test20/EmptySeq.bpl16
-rw-r--r--Test/test20/ParallelAssignment.bpl48
-rw-r--r--Test/test20/ParallelAssignment2.bpl24
-rw-r--r--Test/test20/PolyFuns0.bpl114
-rw-r--r--Test/test20/PolyFuns1.bpl122
-rw-r--r--Test/test20/PolyPolyPoly.bpl48
-rw-r--r--Test/test20/PolyPolyPoly2.bpl70
-rw-r--r--Test/test20/PolyProcs0.bpl70
-rw-r--r--Test/test20/ProcParamReordering.bpl32
-rw-r--r--Test/test20/Prog0.bpl74
-rw-r--r--Test/test20/Prog1.bpl56
-rw-r--r--Test/test20/Prog2.bpl36
-rw-r--r--Test/test20/TypeDecls0.bpl94
-rw-r--r--Test/test20/TypeDecls1.bpl50
-rw-r--r--Test/test20/TypeSynonyms0.bpl66
-rw-r--r--Test/test20/TypeSynonyms1.bpl98
-rw-r--r--Test/test20/TypeSynonyms2.bpl48
-rw-r--r--Test/test21/BooleanQuantification.bpl74
-rw-r--r--Test/test21/BooleanQuantification2.bpl38
-rw-r--r--Test/test21/Boxing.bpl52
-rw-r--r--Test/test21/Casts.bpl32
-rw-r--r--Test/test21/Coercions2.bpl58
-rw-r--r--Test/test21/Colors.bpl52
-rw-r--r--Test/test21/DisjointDomains.bpl72
-rw-r--r--Test/test21/DisjointDomains2.bpl140
-rw-r--r--Test/test21/EmptyList.bpl104
-rw-r--r--Test/test21/EmptySetBug.bpl72
-rw-r--r--Test/test21/Flattening.bpl36
-rw-r--r--Test/test21/FunAxioms.bpl90
-rw-r--r--Test/test21/FunAxioms2.bpl52
-rw-r--r--Test/test21/HeapAbstraction.bpl50
-rw-r--r--Test/test21/HeapAxiom.bpl66
-rw-r--r--Test/test21/InterestingExamples0.bpl26
-rw-r--r--Test/test21/InterestingExamples1.bpl66
-rw-r--r--Test/test21/InterestingExamples2.bpl40
-rw-r--r--Test/test21/InterestingExamples3.bpl66
-rw-r--r--Test/test21/InterestingExamples4.bpl96
-rw-r--r--Test/test21/InterestingExamples5.bpl42
-rw-r--r--Test/test21/Keywords.bpl28
-rw-r--r--Test/test21/LargeLiterals0.bpl50
-rw-r--r--Test/test21/LetSorting.bpl42
-rw-r--r--Test/test21/MapAxiomsConsistency.bpl206
-rw-r--r--Test/test21/MapOutputTypeParams.bpl76
-rw-r--r--Test/test21/Maps0.bpl124
-rw-r--r--Test/test21/Maps1.bpl84
-rw-r--r--Test/test21/Maps2.bpl62
-rw-r--r--Test/test21/NameClash.bpl26
-rw-r--r--Test/test21/Orderings.bpl50
-rw-r--r--Test/test21/Orderings2.bpl46
-rw-r--r--Test/test21/Orderings3.bpl86
-rw-r--r--Test/test21/Orderings4.bpl32
-rw-r--r--Test/test21/ParallelAssignment.bpl122
-rw-r--r--Test/test21/PolyList.bpl134
-rw-r--r--Test/test21/Real.bpl132
-rw-r--r--Test/test21/Triggers0.bpl98
-rw-r--r--Test/test21/Triggers1.bpl44
-rw-r--r--Test/test21/test3_AddMethod_conv.bpl3654
-rw-r--r--Test/test7/MultipleErrors.bpl76
-rw-r--r--Test/test7/NestedVC.bpl46
-rw-r--r--Test/test7/UnreachableBlocks.bpl84
-rw-r--r--Test/textbook/BQueue.bpl864
-rw-r--r--Test/textbook/Bubble.bpl164
-rw-r--r--Test/textbook/DivMod.bpl130
-rw-r--r--Test/textbook/DutchFlag.bpl142
-rw-r--r--Test/textbook/Find.bpl80
-rw-r--r--Test/textbook/McCarthy-91.bpl28
-rw-r--r--Test/textbook/TuringFactorial.bpl70
-rw-r--r--Test/unnecessaryassumes/unnecessaryassumes0.bpl13
-rw-r--r--Test/unnecessaryassumes/unnecessaryassumes0.bpl.expect3
-rw-r--r--Test/unnecessaryassumes/unnecessaryassumes1.bpl23
-rw-r--r--Test/unnecessaryassumes/unnecessaryassumes1.bpl.expect (renamed from Test/og/Program3.bpl.expect)5
-rw-r--r--Test/z3api/Answer518
-rw-r--r--Test/z3api/Boog24.bpl34
-rw-r--r--Test/z3api/bar1.bpl52
-rw-r--r--Test/z3api/bar2.bpl48
-rw-r--r--Test/z3api/bar3.bpl82
-rw-r--r--Test/z3api/bar4.bpl76
-rw-r--r--Test/z3api/bar6.bpl72
-rw-r--r--Test/z3api/boog0.bpl98
-rw-r--r--Test/z3api/boog1.bpl34
-rw-r--r--Test/z3api/boog10.bpl48
-rw-r--r--Test/z3api/boog11.bpl36
-rw-r--r--Test/z3api/boog12.bpl44
-rw-r--r--Test/z3api/boog13.bpl56
-rw-r--r--Test/z3api/boog14.bpl22
-rw-r--r--Test/z3api/boog15.bpl20
-rw-r--r--Test/z3api/boog16.bpl22
-rw-r--r--Test/z3api/boog17.bpl52
-rw-r--r--Test/z3api/boog18.bpl30
-rw-r--r--Test/z3api/boog19.bpl460
-rw-r--r--Test/z3api/boog2.bpl46
-rw-r--r--Test/z3api/boog20.bpl36
-rw-r--r--Test/z3api/boog21.bpl38
-rw-r--r--Test/z3api/boog22.bpl20
-rw-r--r--Test/z3api/boog23.bpl824
-rw-r--r--Test/z3api/boog25.bpl568
-rw-r--r--Test/z3api/boog28.bpl34
-rw-r--r--Test/z3api/boog29.bpl40
-rw-r--r--Test/z3api/boog3.bpl14
-rw-r--r--Test/z3api/boog30.bpl28
-rw-r--r--Test/z3api/boog31.bpl30
-rw-r--r--Test/z3api/boog34.bpl20
-rw-r--r--Test/z3api/boog35.bpl32
-rw-r--r--Test/z3api/boog4.bpl86
-rw-r--r--Test/z3api/boog5.bpl86
-rw-r--r--Test/z3api/boog6.bpl48
-rw-r--r--Test/z3api/boog7.bpl42
-rw-r--r--Test/z3api/boog8.bpl52
-rw-r--r--Test/z3api/boog9.bpl46
-rw-r--r--Test/z3api/runtest.bat30
-rw-r--r--Util/BoogieBuildAndTest.cmd52
-rw-r--r--Util/Code Snippets/contractassertnonnull.snippet62
-rw-r--r--Util/Code Snippets/contractassertnonnullelem.snippet62
-rw-r--r--Util/Code Snippets/contractensuresnonnullelem.snippet60
-rw-r--r--Util/Code Snippets/contractensuresvalret.snippet60
-rw-r--r--Util/Code Snippets/contractensuresvalretNonNullElem.snippet60
-rw-r--r--Util/Code Snippets/contractinvnonnullelem.snippet62
-rw-r--r--Util/Code Snippets/contractrequiresnonnullelem.snippet62
-rw-r--r--Util/Emacs/boogie-mode.el240
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService.sln40
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj356
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs48
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs22
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs794
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Guids.cs24
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs130
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs230
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs58
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs110
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs24
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs686
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs84
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs116
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs38
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs98
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs258
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs100
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs80
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs180
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Properties/AssemblyInfo.cs72
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Resources.Designer.cs126
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/Resources.resx258
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/VSPackage.resx256
-rw-r--r--Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest54
-rw-r--r--Util/latex/boogie.sty242
864 files changed, 310929 insertions, 307283 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..295e1dc8
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,42 @@
+# Autodetect text files and ensure that we normalise their
+# line endings to lf internally. When checked out they may
+# use different line endings.
+* text=auto
+
+# Check out with crlf (Windows) line endings
+*.sln text eol=crlf
+*.csproj text eol=crlf
+*.cs text diff=csharp eol=crlf
+*.fs text eol=crlf
+*.fsproj text eol=crlf
+*.fsy text eol=crlf
+*.fsl text eol=crlf
+*.resx text eol=crlf
+*.vsixmanifest text eol=crlf
+*.atg text eol=crlf
+version.ssc text eol=crlf
+packages.config text eol=crlf
+App.config text eol=crlf
+Build/updateVersionFile.xml text eol=crlf
+*.bat text eol=crlf
+*.cmd text eol=crlf
+*.snippet text eol=crlf
+
+# Check out with lf (UNIX) line endings
+*.sh text eol=lf
+*.py text eol=lf
+Makefile text eol=lf
+.gitignore text eol=lf
+.gitattributes text eol=lf
+*.el text eol=lf
+*.sty text eol=lf
+*.vim text eol=lf
+lit.site.cfg text eol=lf
+lit.local.cfg text eol=lf
+*.expect text eol=lf
+*.md text eol=lf
+.travis.yml text eol=lf
+
+# For the remaining files the line endings of checked out
+# files is defined by the ``core.eol`` git config variable.
+# By default this is the native line ending for the platform.
diff --git a/.travis.yml b/.travis.yml
index c5d0c21d..41ee569f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,16 +6,18 @@ env:
- BOOGIE_CONFIG=Debug
- BOOGIE_CONFIG=Release
install:
- - sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C504E590
- # FIXME: We should not be using GPUVerify's repo for Z3
- - sudo sh -c 'echo "deb http://ppa.launchpad.net/delcypher/gpuverify-smt/ubuntu precise main" > /etc/apt/sources.list.d/smt.list'
+ - wget http://download.opensuse.org/repositories/home:delcypher:z3/xUbuntu_12.04/Release.key
+ - sudo apt-key add - < Release.key
+ # Use Z3 package built by the OpenSUSE build service https://build.opensuse.org/package/show/home:delcypher:z3/z3
+ - sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/delcypher:/z3/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/z3.list"
- sudo apt-get update
- - nuget restore ${TRAVIS_SOLUTION}
- # Install Z3
- - sudo apt-get -y install z3=4.3.2-0~precise2
+ # NuGet is a little flakey in legacy TravisCI, use travis_retry command to retry the command if it fails
+ - travis_retry nuget restore ${TRAVIS_SOLUTION}
+ # Install Z3 executable
+ - sudo apt-get -y install 'z3=4.4.1-*'
# Install needed python tools
- sudo pip install lit OutputCheck pyyaml
- - mkdir -p Source/packages && cd Source/packages && nuget install NUnit.Runners -Version 2.6.3
+ - mkdir -p Source/packages && cd Source/packages && travis_retry nuget install NUnit.Runners -Version 2.6.3
- cd ../../
script:
- xbuild /p:Configuration=${BOOGIE_CONFIG} ${TRAVIS_SOLUTION}
diff --git a/Binaries/PrepareBoogieZip.bat b/Binaries/PrepareBoogieZip.bat
index 5a1b267f..99a7a0a6 100644
--- a/Binaries/PrepareBoogieZip.bat
+++ b/Binaries/PrepareBoogieZip.bat
@@ -7,22 +7,22 @@ if exist %DEST_DIR% del /q %DEST_DIR%\*
if not exist %DEST_DIR% mkdir %DEST_DIR%
for %%f in (
- AbsInt.dll AbsInt.pdb
- Basetypes.dll Basetypes.pdb
- Boogie.exe Boogie.pdb
- BVD.exe BVD.pdb
- CodeContractsExtender.dll CodeContractsExtender.pdb
- Core.dll Core.pdb
- Doomed.dll Doomed.pdb
- Graph.dll Graph.pdb
- Houdini.dll Houdini.pdb
- Model.dll Model.pdb
- ParserHelper.dll ParserHelper.pdb
- Predication.dll Predication.pdb
- Provers.SMTLib.dll Provers.SMTLib.pdb
- UnivBackPred2.smt UnivBackPred2.smt2
- VCExpr.dll VCExpr.pdb
- VCGeneration.dll VCGeneration.pdb
+ BoogieAbsInt.dll BoogieAbsInt.pdb
+ BoogieBasetypes.dll BoogieBasetypes.pdb
+ Boogie.exe Boogie.pdb
+ BVD.exe BVD.pdb
+ BoogieCodeContractsExtender.dll BoogieCodeContractsExtender.pdb
+ BoogieCore.dll BoogieCore.pdb
+ BoogieDoomed.dll BoogieDoomed.pdb
+ BoogieGraph.dll BoogieGraph.pdb
+ BoogieHoudini.dll BoogieHoudini.pdb
+ BoogieModel.dll BoogieModel.pdb
+ BoogieParserHelper.dll BoogieParserHelper.pdb
+ BoogiePredication.dll BoogiePredication.pdb
+ Provers.SMTLib.dll Provers.SMTLib.pdb
+ UnivBackPred2.smt UnivBackPred2.smt2
+ BoogieVCExpr.dll BoogieVCExpr.pdb
+ BoogieVCGeneration.dll BoogieVCGeneration.pdb
) do (
copy %%f %DEST_DIR%
)
diff --git a/Build/CodePlex.Tools.MsBuild.dll b/Build/CodePlex.Tools.MsBuild.dll
deleted file mode 100644
index 2e400e8e..00000000
--- a/Build/CodePlex.Tools.MsBuild.dll
+++ /dev/null
Binary files differ
diff --git a/Build/CodePlex.Tools.Wiki.dll b/Build/CodePlex.Tools.Wiki.dll
deleted file mode 100644
index 9ea2bea8..00000000
--- a/Build/CodePlex.Tools.Wiki.dll
+++ /dev/null
Binary files differ
diff --git a/Build/updateVersionFile.xml b/Build/updateVersionFile.xml
deleted file mode 100644
index 6435133c..00000000
--- a/Build/updateVersionFile.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <UsingTask AssemblyFile="CodePlex.Tools.MsBuild.dll" TaskName="CreateAssemblyInfo" />
-
- <Target Name="CreateAssemblyInfo">
- <CreateAssemblyInfo
- Version="$(CCNetLabel)"
- CreateVersionFile="true"
- ForceReadOnly="true"
- VersionFileName="..\Source\version.ssc"
- />
- <CreateAssemblyInfo
- Version="$(CCNetLabel)"
- CreateVersionFile="true"
- ForceReadOnly="true"
- VersionFileName="..\Source\version.cs"
- />
- </Target>
-</Project>
-
diff --git a/README.md b/README.md
index e86eb187..beb217fd 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,17 @@
# Boogie
-[![Build Status](https://travis-ci.org/boogie-org/boogie.svg)](https://travis-ci.org/boogie-org/boogie)
+## Build Status
+
+| Linux | Windows |
+|-------------------------------|---------------------------------|
+| [![linux build status][1]][2] | [![windows_build_status][3]][4] |
+
+[1]: https://travis-ci.org/boogie-org/boogie.svg?branch=master
+[2]: https://travis-ci.org/boogie-org/boogie
+[3]: https://pmbuilds.inf.ethz.ch/buildStatus/icon?job=boogie
+[4]: #FIXME
+
+## About
Boogie is an intermediate verification language (IVL), intended as a layer on which
to build program verifiers for other languages. Several program verifiers have
@@ -22,9 +33,13 @@ several other institutions make the open-source Boogie tool what it is.
![boogie architecture](http://research.microsoft.com/en-us/projects/boogie/boogie.png)
+More documentation can be found at http://boogie-docs.readthedocs.org/en/latest/ .
+
## Language Reference
-[This is Boogie2](http://research.microsoft.com/en-us/um/people/leino/papers/krml178.pdf) details
+See [Language reference](http://boogie-docs.readthedocs.org/en/latest/LangRef.html).
+
+Note: [This is Boogie2](http://research.microsoft.com/en-us/um/people/leino/papers/krml178.pdf) details
many aspects of the Boogie IVL but is slightly out of date.
## Getting help
@@ -37,7 +52,7 @@ You can also report issues on our [issue tracker](https://github.com/boogie-org/
### Requirements
- [NuGet](https://www.nuget.org/)
-- [Z3](https://github.com/Z3Prover/z3) 4.3.2 or [CVC4](http://cvc4.cs.nyu.edu/web/) **FIXME_VERSION** (note
+- [Z3](https://github.com/Z3Prover/z3) 4.4.1 or [CVC4](http://cvc4.cs.nyu.edu/web/) **FIXME_VERSION** (note
CVC4 support is experimental)
#### Windows specific
diff --git a/Source/AIFramework/AIFramework.csproj b/Source/AIFramework/AIFramework.csproj
index a809b8bf..a04074a6 100644
--- a/Source/AIFramework/AIFramework.csproj
+++ b/Source/AIFramework/AIFramework.csproj
@@ -1,204 +1,204 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{39B0658D-C955-41C5-9A43-48C97A1EF5FD}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>AIFramework</RootNamespace>
- <AssemblyName>AIFramework</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for AIFramework.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\AIFramework.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="CommonFunctionSymbols.cs" />
- <Compile Include="Expr.cs" />
- <Compile Include="Functional.cs" />
- <Compile Include="Lattice.cs" />
- <Compile Include="Logger.cs" />
- <Compile Include="MultiLattice.cs" />
- <Compile Include="Mutable.cs" />
- <Compile Include="Polyhedra\LinearConstraint.cs" />
- <Compile Include="Polyhedra\LinearConstraintSystem.cs" />
- <Compile Include="Polyhedra\PolyhedraAbstraction.cs" />
- <Compile Include="Polyhedra\SimplexTableau.cs" />
- <Compile Include="VariableMap\ConstantAbstraction.cs" />
- <Compile Include="VariableMap\DynamicTypeLattice.cs" />
- <Compile Include="VariableMap\Intervals.cs" />
- <Compile Include="VariableMap\MicroLattice.cs" />
- <Compile Include="VariableMap\Nullness.cs" />
- <Compile Include="VariableMap\VariableMapLattice.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{39B0658D-C955-41C5-9A43-48C97A1EF5FD}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>AIFramework</RootNamespace>
+ <AssemblyName>AIFramework</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for AIFramework.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\AIFramework.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="CommonFunctionSymbols.cs" />
+ <Compile Include="Expr.cs" />
+ <Compile Include="Functional.cs" />
+ <Compile Include="Lattice.cs" />
+ <Compile Include="Logger.cs" />
+ <Compile Include="MultiLattice.cs" />
+ <Compile Include="Mutable.cs" />
+ <Compile Include="Polyhedra\LinearConstraint.cs" />
+ <Compile Include="Polyhedra\LinearConstraintSystem.cs" />
+ <Compile Include="Polyhedra\PolyhedraAbstraction.cs" />
+ <Compile Include="Polyhedra\SimplexTableau.cs" />
+ <Compile Include="VariableMap\ConstantAbstraction.cs" />
+ <Compile Include="VariableMap\DynamicTypeLattice.cs" />
+ <Compile Include="VariableMap\Intervals.cs" />
+ <Compile Include="VariableMap\MicroLattice.cs" />
+ <Compile Include="VariableMap\Nullness.cs" />
+ <Compile Include="VariableMap\VariableMapLattice.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/AIFramework/CommonFunctionSymbols.cs b/Source/AIFramework/CommonFunctionSymbols.cs
index 6f7a9f93..6a287810 100644
--- a/Source/AIFramework/CommonFunctionSymbols.cs
+++ b/Source/AIFramework/CommonFunctionSymbols.cs
@@ -1,1232 +1,1232 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework
-{
- using System.Diagnostics.Contracts;
- using System.Collections;
- using System.Collections.Generic;
- //using Microsoft.SpecSharp.Collections;
- using Microsoft.Basetypes;
-
- /// <summary>
- /// A basic class for function symbols.
- /// </summary>
- public class FunctionSymbol : IFunctionSymbol
- {
- private readonly string/*!*/ display;
- private readonly AIType/*!*/ typ;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(display != null);
- Contract.Invariant(typ != null);
- }
-
-
- public FunctionSymbol(AIType/*!*/ typ)
- : this("FunctionSymbol", typ) {
- Contract.Requires(typ != null);
- }
-
- internal FunctionSymbol(string/*!*/ display, AIType/*!*/ typ) {
- Contract.Requires(typ != null);
- Contract.Requires(display != null);
- this.display = display;
- this.typ = typ;
- // base();
- }
-
- public AIType/*!*/ AIType { get { Contract.Ensures(Contract.Result<AIType>() != null); return typ; } }
-
- [NoDefaultContract]
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return display;
- }
-
- }
-
- /// <summary>
- /// A class for integer constants.
- /// </summary>
- public class IntSymbol : FunctionSymbol
- {
- public readonly BigNum Value;
-
- /// <summary>
- /// The intention is that this constructor be called only from the Int.Const method.
- /// </summary>
- internal IntSymbol(BigNum x)
- : base(cce.NonNull(x.ToString()), Int.Type) {
- this.Value = x;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object other) {
- IntSymbol isym = other as IntSymbol;
- return isym != null && isym.Value.Equals(this.Value);
- }
-
- [Pure]
- public override int GetHashCode() {
- return Value.GetHashCode();
- }
- }
-
- /// <summary>
- /// A class for bitvector constants.
- /// </summary>
- public class BvSymbol : FunctionSymbol
- {
- public readonly BigNum Value;
- public readonly int Bits;
-
- /// <summary>
- /// The intention is that this constructor be called only from the Int.Const method.
- /// </summary>
- internal BvSymbol(BigNum x, int y)
- : base(x + "bv" + y, Bv.Type) {
- this.Value = x;
- this.Bits = y;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object other) {
- BvSymbol isym = other as BvSymbol;
- return isym != null && isym.Value == this.Value && isym.Bits == this.Bits;
- }
-
- [Pure]
- public override int GetHashCode() {
- unchecked {
- return Value.GetHashCode() ^ Bits;
- }
- }
- }
-
- public class DoubleSymbol : FunctionSymbol
- {
- public readonly double Value;
-
- /// <summary>
- /// The intention is that this constructor be called only from the Double.Const method.
- /// </summary>
- internal DoubleSymbol(double x)
- : base(cce.NonNull(x.ToString()), Double.Type) {
- this.Value = x;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object other) {
- DoubleSymbol dsym = other as DoubleSymbol;
- return dsym != null && dsym.Value == this.Value;
- }
-
- [Pure]
- public override int GetHashCode() {
- return Value.GetHashCode();
- }
- }
-
- /// <summary>
- /// Function symbol based on a string. Uses the string equality for determining equality
- /// of symbol.
- /// </summary>
- public class NamedSymbol : FunctionSymbol
- {
- public string/*!*/ Value { [NoDefaultContract] get { Contract.Ensures(Contract.Result<string>() != null); return cce.NonNull(this.ToString()); } }
-
- public NamedSymbol(string/*!*/ symbol, AIType/*!*/ typ)
- : base(symbol, typ) {
- Contract.Requires(typ != null);
- Contract.Requires(symbol != null);
- }
-
- [NoDefaultContract]
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object other) {
- NamedSymbol nsym = other as NamedSymbol;
- return nsym != null && this.Value.Equals(nsym.Value);
- }
-
- [NoDefaultContract]
- [Pure]
- public override int GetHashCode() {
- return Value.GetHashCode();
- }
- }
-
- //
- // In the following, the classes like Value and Prop serve two
- // roles. The primary role is to be the base types for AIType.
- // The only objects of these classes are the representative
- // objects that denote an AIType, which are given by the
- // "Type" property. Subtypes in the AIType language are
- // encoded by subclassing. This yields some "higher-orderness"
- // for checking subtyping in the AIType language, by using
- // the Spec#/C# subclassing checks.
- //
- // The other role is simply as a module for collecting like function
- // symbols.
- //
-
- //-------------------------- Terms ----------------------------------
-
- /// <summary>
- /// A class with the equality symbol and the ValueType.Type.
- /// </summary>
- public class Value : AIType
- {
- private static readonly AIType/*!*/ valtype = new Value();
- public static AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return valtype; } }
-
- private static readonly FunctionType[]/*!*/ funtypeCache = new FunctionType[5];
- public static FunctionType/*!*/ FunctionType(int inParameterCount) {
- Contract.Requires((0 <= inParameterCount));
- Contract.Ensures(Contract.Result<FunctionType>() != null);
- // Contract.Ensures(Contract.Result<>().Arity == inParameterCount);
- FunctionType result;
- if (inParameterCount < funtypeCache.Length) {
- result = funtypeCache[inParameterCount];
- if (result != null) {
- return result;
- }
- }
- AIType[] signature = new AIType[1 + inParameterCount];
- for (int i = 0; i < signature.Length; i++) {
- signature[i] = valtype;
- }
- result = new FunctionType(signature);
- if (inParameterCount < funtypeCache.Length) {
- funtypeCache[inParameterCount] = result;
- }
- return result;
- }
-
- [Once]
- private static AIType/*!*/ binreltype;
-
- private static AIType/*!*/ BinrelType {
- get {
- Contract.Ensures(Contract.Result<AIType>() != null);
- if (binreltype == null) {
- binreltype = new FunctionType(Type, Type, Prop.Type);
- }
- return binreltype;
- }
- }
-
- [Once]
- private static FunctionSymbol/*!*/ _eq;
- public static FunctionSymbol/*!*/ Eq {
- get {
- Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
- if (_eq == null) {
- _eq = new FunctionSymbol("=", BinrelType);
- }
- return _eq;
- }
- }
- [Once]
- private static FunctionSymbol/*!*/ _neq;
- public static FunctionSymbol/*!*/ Neq {
- get {
- Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
- if (_neq == null) {
- _neq = new FunctionSymbol("!=", BinrelType);
- }
- return _neq;
- }
- }
- [Once]
- private static FunctionSymbol/*!*/ _subtype;
- public static FunctionSymbol/*!*/ Subtype {
- get {
- Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
- if (_subtype == null) {
- _subtype = new FunctionSymbol("<:", BinrelType);
- }
- return _subtype;
- }
- }
-
- [Once]
- private static AIType/*!*/ typeof_type;
- private static AIType/*!*/ TypeofType {
- get {
- Contract.Ensures(Contract.Result<AIType>() != null);
- if (typeof_type == null) {
- typeof_type = new FunctionType(Ref.Type, Type);
- }
- return typeof_type;
- }
- }
- [Once]
- private static FunctionSymbol/*!*/ _typeof;
- public static FunctionSymbol/*!*/ Typeof {
- get {
- Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
- if (_typeof == null) {
- _typeof = new FunctionSymbol("typeof", TypeofType);
- }
- return _typeof;
- }
- }
-
- /// <summary>
- /// Value should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- protected Value() { }
-
- }
-
- public class Int : Value
- {
- private static readonly AIType/*!*/ inttype = new Int();
- public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return inttype; } }
-
- private static readonly AIType/*!*/ unaryinttype = new FunctionType(Type, Type);
- private static readonly AIType/*!*/ bininttype = new FunctionType(Type, Type, Type);
- private static readonly AIType/*!*/ relationtype = new FunctionType(Type, Type, Prop.Type);
-
- private static readonly FunctionSymbol/*!*/ _negate = new FunctionSymbol("~", unaryinttype);
- private static readonly FunctionSymbol/*!*/ _add = new FunctionSymbol("+", bininttype);
- private static readonly FunctionSymbol/*!*/ _sub = new FunctionSymbol("-", bininttype);
- private static readonly FunctionSymbol/*!*/ _mul = new FunctionSymbol("*", bininttype);
- private static readonly FunctionSymbol/*!*/ _div = new FunctionSymbol("/", bininttype);
- private static readonly FunctionSymbol/*!*/ _mod = new FunctionSymbol("%", bininttype);
- private static readonly FunctionSymbol/*!*/ _atmost = new FunctionSymbol("<=", relationtype);
- private static readonly FunctionSymbol/*!*/ _less = new FunctionSymbol("<", relationtype);
- private static readonly FunctionSymbol/*!*/ _greater = new FunctionSymbol(">", relationtype);
- private static readonly FunctionSymbol/*!*/ _atleast = new FunctionSymbol(">=", relationtype);
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Negate { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _negate; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Add { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _add; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Sub { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _sub; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Mul { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mul; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Div { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _div; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Mod { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mod; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ AtMost { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atmost; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Less { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _less; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Greater { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _greater; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ AtLeast { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atleast; } }
-
- public static IntSymbol/*!*/ Const(BigNum x) {
- Contract.Ensures(Contract.Result<IntSymbol>() != null);
- // We could cache things here, but for now we don't.
- return new IntSymbol(x);
- }
-
- /// <summary>
- /// Int should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- private Int() { }
- }
-
- public class Double : Value
- {
- private static readonly AIType/*!*/ doubletype = new Double();
- public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return doubletype; } }
-
- public static DoubleSymbol/*!*/ Const(double x) {
- Contract.Ensures(Contract.Result<DoubleSymbol>() != null);
- // We could cache things here, but for now we don't.
- return new DoubleSymbol(x);
- }
-
- /// <summary>
- /// Double should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- private Double() { }
- }
-
- public class Bv : Value
- {
- private static readonly AIType/*!*/ bvtype = new Bv();
- public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return bvtype; } }
-
- private static readonly AIType/*!*/ unaryinttype = new FunctionType(Type, Type);
- private static readonly AIType/*!*/ bininttype = new FunctionType(Type, Type, Type);
- private static readonly AIType/*!*/ relationtype = new FunctionType(Type, Type, Prop.Type);
-
- private static readonly FunctionSymbol/*!*/ _negate = new FunctionSymbol("~", unaryinttype);
- private static readonly FunctionSymbol/*!*/ _add = new FunctionSymbol("+", bininttype);
- private static readonly FunctionSymbol/*!*/ _sub = new FunctionSymbol("-", bininttype);
- private static readonly FunctionSymbol/*!*/ _mul = new FunctionSymbol("*", bininttype);
- private static readonly FunctionSymbol/*!*/ _div = new FunctionSymbol("/", bininttype);
- private static readonly FunctionSymbol/*!*/ _mod = new FunctionSymbol("%", bininttype);
- private static readonly FunctionSymbol/*!*/ _concat = new FunctionSymbol("$concat", bininttype);
- private static readonly FunctionSymbol/*!*/ _extract = new FunctionSymbol("$extract", unaryinttype);
- private static readonly FunctionSymbol/*!*/ _atmost = new FunctionSymbol("<=", relationtype);
- private static readonly FunctionSymbol/*!*/ _less = new FunctionSymbol("<", relationtype);
- private static readonly FunctionSymbol/*!*/ _greater = new FunctionSymbol(">", relationtype);
- private static readonly FunctionSymbol/*!*/ _atleast = new FunctionSymbol(">=", relationtype);
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Negate { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _negate; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Add { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _add; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Sub { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _sub; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Mul { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mul; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Div { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _div; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Mod { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mod; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ AtMost { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atmost; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Less { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _less; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Greater { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _greater; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ AtLeast { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atleast; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Extract { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _extract; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Concat { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _concat; } }
-
- public static BvSymbol/*!*/ Const(BigNum x, int y) {
- Contract.Ensures(Contract.Result<BvSymbol>() != null);
- // We could cache things here, but for now we don't.
- return new BvSymbol(x, y);
- }
-
- /// <summary>
- /// Int should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- private Bv() { }
- }
-
- public class Ref : Value
- {
- private static readonly AIType/*!*/ reftype = new Ref();
- public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return reftype; } }
-
- private static readonly FunctionSymbol/*!*/ _null = new FunctionSymbol("null", Type);
-
- public static FunctionSymbol/*!*/ Null { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _null; } }
-
- /// <summary>
- /// Ref should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- private Ref() { }
- }
-
- public class HeapStructure : Value
- {
- private static readonly AIType/*!*/ reftype = new HeapStructure();
- public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return reftype; } }
-
-
-
- /// <summary>
- /// HeapStructure should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- private HeapStructure() { }
- }
-
- public class FieldName : Value
- {
- private static readonly AIType/*!*/ fieldnametype = new FieldName();
- public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return fieldnametype; } }
-
- private static readonly FunctionSymbol/*!*/ _allocated = new FunctionSymbol("$allocated", FieldName.Type);
- public static FunctionSymbol/*!*/ Allocated { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _allocated; } }
-
- /// <summary>
- /// Is this a boolean field that monotonically goes from false to true?
- /// </summary>
- public static bool IsBooleanMonotonicallyWeakening(IFunctionSymbol/*!*/ f) {
- Contract.Requires(f != null);
- return f.Equals(Allocated);
- }
-
- /// <summary>
- /// FieldName should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- private FieldName() { }
- }
-
- public class Heap : Value
- {
- private static readonly AIType/*!*/ heaptype = new Heap();
- public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return heaptype; } }
-
- // the types in the following, select1, select2, are hard-coded;
- // these types may not always be appropriate
- private static readonly FunctionSymbol/*!*/ _select1 = new FunctionSymbol("sel1",
- // Heap x FieldName -> Prop
- new FunctionType(Type, FieldName.Type, Prop.Type)
- );
- public static FunctionSymbol/*!*/ Select1 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _select1; } }
-
- private static readonly FunctionSymbol/*!*/ _select2 = new FunctionSymbol("sel2",
- // Heap x Ref x FieldName -> Value
- new FunctionType(Type, Ref.Type, FieldName.Type, Value.Type)
- );
- public static FunctionSymbol/*!*/ Select2 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _select2; } }
-
- // the types in the following, store1, store2, are hard-coded;
- // these types may not always be appropriate
- private static readonly FunctionSymbol/*!*/ _update1 = new FunctionSymbol("upd1",
- // Heap x FieldName x Value -> Heap
- new FunctionType(Type, FieldName.Type, Value.Type, Type)
- );
- public static FunctionSymbol/*!*/ Update1 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _update1; } }
-
- private static readonly FunctionSymbol/*!*/ _update2 = new FunctionSymbol("upd2",
- // Heap x Ref x FieldName x Value -> Heap
- new FunctionType(Type, Ref.Type, FieldName.Type, Value.Type, Type)
- );
- public static FunctionSymbol/*!*/ Update2 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _update2; } }
-
- private static readonly FunctionSymbol/*!*/ _unsupportedHeapOp =
- new FunctionSymbol("UnsupportedHeapOp",
- // Heap x FieldName -> Prop
- new FunctionType(Type, FieldName.Type, Prop.Type)
- );
- public static FunctionSymbol/*!*/ UnsupportedHeapOp { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _unsupportedHeapOp; } }
-
- /// <summary>
- /// Heap should not be instantiated from the outside, except perhaps in
- /// subclasses.
- /// </summary>
- private Heap() { }
- }
-
- // public class List : Value
- // {
- // private static IDictionary/*<AIType!,AIType!>*/! lists = new Hashtable();
- // public static AIType! Type(AIType! typeParameter)
- // {
- // if (lists.Contains(typeParameter))
- // return lists[typeParameter];
- // else
- // {
- // AIType! result = new List(typeParameter);
- // lists[typeParameter] = result;
- // return result;
- // }
- // }
- //
- // private static IDictionary/*<AIType!,AIType!>*/! nils = new Hashtable();
- // public static FunctionSymbol! Nil(AIType! typeParameter)
- // {
- // if (nils.Contains(typeParameter))
- // return nils[typeParameter];
- // else
- // {
- // FunctionSymbol! result = new FunctionSymbol(Type(typeParameter));
- // nils[typeParameter] = result;
- // return result;
- // }
- // }
- //
- // private static IDictionary/*<AIType!,AIType!>*/! cons = new Hashtable();
- // public static FunctionSymbol! Cons(AIType! typeParameter)
- // {
- // if (cons.Contains(typeParameter))
- // return cons[typeParameter];
- // else
- // {
- // FunctionSymbol! result = new FunctionSymbol(
- // new FunctionType(typeParameter, Type(typeParameter), Type(typeParameter))
- // );
- // cons[typeParameter] = result;
- // return result;
- // }
- // }
- //
- // private AIType! typeParameter;
- // public AIType(TypeParameter/*!*/ ){
- //Contract.Requires( != null);
- //return typeParameter; } }
- //
- // /// <summary>
- // /// List should not be instantiated from the outside.
- // /// </summary>
- // private List(AIType! typeParameter)
- // {
- // this.typeParameter = typeParameter;
- // }
- // }
- //
- // public class Pair : Value
- // {
- // private static IDictionary! pairs = new Hashtable();
- // public static AIType! Type(AIType! type1, AIType! type2)
- // {
- // Microsoft.AbstractInterpretationFramework.Collections.Pair typpair
- // = new Microsoft.AbstractInterpretationFramework.Collections.Pair(type1, type2);
- //
- // if (pairs.Contains(typpair))
- // return pairs[typpair];
- // else
- // {
- // AIType! result = new Pair(type1, type2);
- // pairs[typpair] = result;
- // return result;
- // }
- // }
- //
- // private static IDictionary! constructs = new Hashtable();
- // public static FunctionSymbol! Pair(AIType! type1, AIType! type2)
- // {
- // Microsoft.AbstractInterpretationFramework.Collections.Pair typpair
- // = new Microsoft.AbstractInterpretationFramework.Collections.Pair(type1, type2);
- //
- // if (constructs.Contains(typpair))
- // return constructs[typpair];
- // else
- // {
- // FunctionSymbol! result = new FunctionSymbol(
- // new FunctionType(type1, type2, Type(type1, type2))
- // );
- // constructs[typpair] = result;
- // return result;
- // }
- // }
- //
- // protected AIType! type1;
- // protected AIType! type2;
- //
- // public AIType(Type1/*!*/ ){
- //Contract.Requires( != null);
- // return type1; } }
- // public AIType(Type2/*!*/ ){
- //Contract.Requires( != null);
- // return type2; } }
- //
- // /// <summary>
- // /// Pair should not be instantiated from the outside, except by subclasses.
- // /// </summary>
- // protected Pair(AIType! type1, AIType! type2)
- // {
- // this.type1 = type1;
- // this.type2 = type2;
- // }
- // }
-
- //-------------------------- Propositions ---------------------------
-
-
- /// <summary>
- /// A class with global propositional symbols and the Prop.Type.
- /// </summary>
- public sealed class Prop : AIType
- {
- private static readonly AIType/*!*/ proptype = new Prop();
-
- public static AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return proptype; } }
-
- private static readonly AIType/*!*/ unaryproptype = new FunctionType(Type, Type);
- private static readonly AIType/*!*/ binproptype = new FunctionType(Type, Type, Type);
- private static readonly AIType/*!*/ quantifiertype =
- new FunctionType(new FunctionType(Value.Type, Type), Type);
-
- private static readonly FunctionSymbol/*!*/ _false = new FunctionSymbol("false", Type);
- private static readonly FunctionSymbol/*!*/ _true = new FunctionSymbol("true", Type);
- private static readonly FunctionSymbol/*!*/ _not = new FunctionSymbol("!", unaryproptype);
- private static readonly FunctionSymbol/*!*/ _and = new FunctionSymbol("/\\", binproptype);
- private static readonly FunctionSymbol/*!*/ _or = new FunctionSymbol("\\/", binproptype);
- private static readonly FunctionSymbol/*!*/ _implies = new FunctionSymbol("==>", binproptype);
- private static readonly FunctionSymbol/*!*/ _exists = new FunctionSymbol("Exists", quantifiertype);
- private static readonly FunctionSymbol/*!*/ _forall = new FunctionSymbol("Forall", quantifiertype);
- private static readonly FunctionSymbol/*!*/ _lambda = new FunctionSymbol("Lambda", quantifiertype);
-
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ False { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _false; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ True { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _true; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Not { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _not; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ And { [Pure] get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _and; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Or { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _or; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Implies { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _implies; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Exists { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _exists; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Forall { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _forall; } }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public static FunctionSymbol/*!*/ Lambda { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _lambda; } }
-
-
- /// <summary>
- /// Prop should not be instantiated from the outside.
- /// </summary>
- private Prop() { }
-
-
-
- //
- // Utility Methods
- //
-
- public static IExpr/*!*/ SimplifiedAnd(IPropExprFactory/*!*/ factory, IExpr/*!*/ e0, IExpr/*!*/ e1) {
- Contract.Requires(e1 != null);
- Contract.Requires(e0 != null);
- Contract.Requires(factory != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IFunApp fun0 = e0 as IFunApp;
- if (fun0 != null) {
- if (fun0.FunctionSymbol.Equals(Prop.True)) {
- return e1;
- } else if (fun0.FunctionSymbol.Equals(Prop.False)) {
- return e0;
- }
- }
-
- IFunApp fun1 = e1 as IFunApp;
- if (fun1 != null) {
- if (fun1.FunctionSymbol.Equals(Prop.True)) {
- return e0;
- } else if (fun1.FunctionSymbol.Equals(Prop.False)) {
- return e1;
- }
- }
-
- return factory.And(e0, e1);
- }
-
- public static IExpr/*!*/ SimplifiedAnd(IPropExprFactory/*!*/ factory, IEnumerable/*<IExpr!>*//*!*/ exprs) {
- Contract.Requires(exprs != null);
- Contract.Requires(factory != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IExpr/*!*/ result = factory.True;
- Contract.Assert(result != null);
- foreach (IExpr/*!*/ conjunct in exprs) {
- Contract.Assert(conjunct != null);
- result = SimplifiedAnd(factory, result, conjunct);
- }
- return result;
- }
-
- public static IExpr/*!*/ SimplifiedOr(IPropExprFactory/*!*/ factory, IExpr/*!*/ e0, IExpr/*!*/ e1) {
- Contract.Requires(e1 != null);
- Contract.Requires(e0 != null);
- Contract.Requires(factory != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IFunApp fun0 = e0 as IFunApp;
- if (fun0 != null) {
- if (fun0.FunctionSymbol.Equals(Prop.False)) {
- return e1;
- } else if (fun0.FunctionSymbol.Equals(Prop.True)) {
- return e0;
- }
- }
-
- IFunApp fun1 = e1 as IFunApp;
- if (fun1 != null) {
- if (fun1.FunctionSymbol.Equals(Prop.False)) {
- return e0;
- } else if (fun1.FunctionSymbol.Equals(Prop.True)) {
- return e1;
- }
- }
-
- return factory.Or(e0, e1);
- }
-
- public static IExpr/*!*/ SimplifiedOr(IPropExprFactory/*!*/ factory, IEnumerable/*<IExpr!>*//*!*/ exprs) {
- Contract.Requires(exprs != null);
- Contract.Requires(factory != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IExpr/*!*/ result = factory.False;
- Contract.Assert(result != null);
- foreach (IExpr/*!*/ disj in exprs) {
- Contract.Assert(disj != null);
- result = SimplifiedOr(factory, result, disj);
- }
- return result;
- }
-
-
-
- /// <summary>
- /// Break top-level conjuncts into a list of sub-expressions.
- /// </summary>
- /// <param name="e">The expression to examine.</param>
- /// <returns>A list of conjuncts.</returns>
- internal static IList/*<IExpr!>*//*!*/ BreakConjuncts(IExpr/*!*/ e) {
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<IList>() != null);
- Contract.Ensures(Contract.ForAll(0, Contract.Result<IList>().Count, i => {
- var sub = Contract.Result<IList>()[i];
- return !(sub is IFunApp) || !((IFunApp)sub).FunctionSymbol.Equals(Prop.And);
- }));
- return BreakJuncts(e, Prop.And);
- }
-
- /// <summary>
- /// Break top-level disjuncts into a list of sub-expressions.
- /// </summary>
- /// <param name="e">The expression to examine.</param>
- /// <returns>A list of conjuncts.</returns>
- internal static IList/*<IExpr!>*//*!*/ BreakDisjuncts(IExpr/*!*/ e) {
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<IList>() != null);
- Contract.Ensures(Contract.ForAll(0, Contract.Result<IList>().Count, i => {
- var sub = Contract.Result<IList>()[i];
- return !(sub is IFunApp) || !((IFunApp)sub).FunctionSymbol.Equals(Prop.Or);
- }));
- return BreakJuncts(e, Prop.Or);
- }
-
- private static IList/*<IExpr!>*//*!*/ BreakJuncts(IExpr/*!*/ e, IFunctionSymbol/*!*/ sym) {
- Contract.Requires(sym != null);
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<IList>() != null);
- Contract.Ensures(Contract.ForAll(0, Contract.Result<IList>().Count, i => {
- var sub = Contract.Result<IList>()[i];
- return (sub is IFunApp) || !((IFunApp)sub).FunctionSymbol.Equals(sym);
- }));
- ArrayList/*<IExpr!>*//*!*/ result = new ArrayList();
-
- IFunApp f = e as IFunApp;
- if (f != null) {
- // If it is a sym, go down into sub-expressions.
- if (f.FunctionSymbol.Equals(sym)) {
- foreach (IExpr/*!*/ arg in f.Arguments) {
- Contract.Assert(arg != null);
- result.AddRange(BreakJuncts(arg, sym));
- }
- }
- // Otherwise, stop.
- else {
- result.Add(e);
- }
- } else {
- result.Add(e);
- }
-
- return result;
- }
- }
-
- /// <summary>
- /// A callback to produce a function body given the bound variable.
- /// </summary>
- /// <param name="var">The bound variable to use.</param>
- /// <returns>The function body.</returns>
- public delegate IExpr/*!*/ FunctionBody(IVariable/*!*/ var);
-
- /// <summary>
- /// An interface for constructing propositional expressions.
- ///
- /// This interface should be implemented by the client. An implementation of
- /// of this class should generally be used as a singleton object.
- /// </summary>
- ///
- [ContractClass(typeof(IPropExprFactoryContracts))]
- public interface IPropExprFactory
- {
- IFunApp/*!*/ False { get /*ensures result.FunctionSymbol.Equals(Prop.False);*/; }
- IFunApp/*!*/ True { get /*ensures result.FunctionSymbol.Equals(Prop.True);*/; }
-
- IFunApp/*!*/ Not(IExpr/*!*/ p) /*ensures result.FunctionSymbol.Equals(Prop.Not);*/;
-
- IFunApp/*!*/ And(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.And);*/;
- IFunApp/*!*/ Or(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.Or);*/;
-
- IFunApp/*!*/ Implies(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.Implies);*/;
- }
- [ContractClassFor(typeof(IPropExprFactory))]
- public abstract class IPropExprFactoryContracts : IPropExprFactory
- {
- #region IPropExprFactory Members
- IFunApp IPropExprFactory.Implies(IExpr p, IExpr q) {
- Contract.Requires(p != null);
- Contract.Requires(q != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp IPropExprFactory.False {
-
- get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
- }
-
- IFunApp IPropExprFactory.True {
- get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
- }
-
- IFunApp IPropExprFactory.Not(IExpr p) {
- Contract.Requires(p != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp IPropExprFactory.And(IExpr p, IExpr q) {
- Contract.Requires(p != null);
- Contract.Requires(q != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp IPropExprFactory.Or(IExpr p, IExpr q) {
- Contract.Requires(p != null);
- Contract.Requires(q != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
-
-
- #endregion
- }
-
- /// <summary>
- /// An interface for constructing value expressions.
- ///
- /// This interface should be implemented by the client. An implementation of
- /// of this class should generally be used as a singleton object.
- /// </summary>
- ///
- [ContractClass(typeof(IValueExprFactoryContracts))]
- public interface IValueExprFactory
- {
- IFunApp/*!*/ Eq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Eq);*/;
- IFunApp/*!*/ Neq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Neq);*/;
- }
- [ContractClassFor(typeof(IValueExprFactory))]
- public abstract class IValueExprFactoryContracts : IValueExprFactory
- {
- #region IValueExprFactory Members
-
- IFunApp IValueExprFactory.Eq(IExpr e0, IExpr e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp IValueExprFactory.Neq(IExpr e0, IExpr e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- #endregion
- }
-
- /// <summary>
- /// An interface for constructing value expressions having to with null.
- ///
- /// This interface should be implemented by the client. An implementation of
- /// of this class should generally be used as a singleton object.
- /// </summary>
- ///
- [ContractClass(typeof(INullnessFactoryContracts))]
- public interface INullnessFactory
- {
- IFunApp/*!*/ Eq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Eq);*/;
- IFunApp/*!*/ Neq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Neq);*/;
- IFunApp/*!*/ Null { get; /*ensures result.FunctionSymbol.Equals(Ref.Null);*/ }
- }
- [ContractClassFor(typeof(INullnessFactory))]
- public abstract class INullnessFactoryContracts : INullnessFactory
- {
- #region INullnessFactory Members
-
- IFunApp INullnessFactory.Eq(IExpr e0, IExpr e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp INullnessFactory.Neq(IExpr e0, IExpr e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp INullnessFactory.Null {
- get {
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
- }
-
- #endregion
- }
-
- /// <summary>
- /// An interface for constructing integer expressions.
- ///
- /// This interface should be implemented by the client. An implementation of
- /// of this class should generally be used as a singleton object.
- /// </summary>
- ///
- [ContractClass(typeof(IIntExprFactoryContracts))]
- public interface IIntExprFactory : IValueExprFactory
- {
- IFunApp/*!*/ Const(BigNum i) /*ensures result.FunctionSymbol.Equals(new IntSymbol(i));*/;
- }
- [ContractClassFor(typeof(IIntExprFactory))]
- public abstract class IIntExprFactoryContracts : IIntExprFactory
- {
-
- #region IIntExprFactory Members
-
- IFunApp IIntExprFactory.Const(BigNum i) {
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- #endregion
-
- #region IValueExprFactory Members
-
- IFunApp IValueExprFactory.Eq(IExpr e0, IExpr e1) {
- throw new System.NotImplementedException();
- }
-
- IFunApp IValueExprFactory.Neq(IExpr e0, IExpr e1) {
- throw new System.NotImplementedException();
- }
-
- #endregion
- }
-
- /// <summary>
- /// An interface for constructing linear integer expressions.
- ///
- /// This interface should be implemented by the client. An implementation of
- /// of this class should generally be used as a singleton object.
- /// </summary>
- ///
- [ContractClass(typeof(ILinearExprFactoryContracts))]
- public interface ILinearExprFactory : IIntExprFactory
- {
- IFunApp/*!*/ AtMost(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.AtMost);*/;
- IFunApp/*!*/ Add(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Add);*/;
- /// <summary>
- /// If "var" is null, returns an expression representing r.
- /// Otherwise, returns an expression representing r*var.
- /// </summary>
- IExpr/*!*/ Term(Microsoft.Basetypes.Rational r, IVariable var);
-
- IFunApp/*!*/ False { get /*ensures result.FunctionSymbol.Equals(Prop.False);*/; }
- IFunApp/*!*/ True { get /*ensures result.FunctionSymbol.Equals(Prop.True);*/; }
- IFunApp/*!*/ And(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.And);*/;
- }
- [ContractClassFor(typeof(ILinearExprFactory))]
- public abstract class ILinearExprFactoryContracts : ILinearExprFactory
- {
-
- #region ILinearExprFactory Members
-
- IFunApp ILinearExprFactory.AtMost(IExpr e0, IExpr e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp ILinearExprFactory.Add(IExpr e0, IExpr e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null); Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IExpr ILinearExprFactory.Term(Rational r, IVariable var) {
- Contract.Ensures(Contract.Result<IExpr>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp ILinearExprFactory.False {
- get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
- }
-
- IFunApp ILinearExprFactory.True {
- get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
- }
-
- IFunApp ILinearExprFactory.And(IExpr p, IExpr q) {
- Contract.Requires(p != null);
- Contract.Requires(q != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- #endregion
-
- #region IIntExprFactory Members
-
- IFunApp IIntExprFactory.Const(BigNum i) {
- throw new System.NotImplementedException();
- }
-
- #endregion
-
- #region IValueExprFactory Members
-
- IFunApp IValueExprFactory.Eq(IExpr e0, IExpr e1) {
- throw new System.NotImplementedException();
- }
-
- IFunApp IValueExprFactory.Neq(IExpr e0, IExpr e1) {
- throw new System.NotImplementedException();
- }
-
- #endregion
- }
-
- /// <summary>
- /// An interface for constructing type expressions and performing some type operations.
- /// The types are assumed to be arranged in a rooted tree.
- ///
- /// This interface should be implemented by the client. An implementation of
- /// of this class should generally be used as a singleton object.
- /// </summary>
- ///
- [ContractClass(typeof(ITypeExprFactoryContracts))]
- public interface ITypeExprFactory
- {
- /// <summary>
- /// Returns an expression denoting the top of the type hierarchy.
- /// </summary>
- IExpr/*!*/ RootType { get; }
-
- /// <summary>
- /// Returns true iff "t" denotes a type constant.
- /// </summary>
- [Pure]
- bool IsTypeConstant(IExpr/*!*/ t);
-
- /// <summary>
- /// Returns true iff t0 and t1 are types such that t0 and t1 are equal.
- /// </summary>
- [Pure]
- bool IsTypeEqual(IExpr/*!*/ t0, IExpr/*!*/ t1);
-
- /// <summary>
- /// Returns true iff t0 and t1 are types such that t0 is a subtype of t1.
- /// </summary>
- [Pure]
- bool IsSubType(IExpr/*!*/ t0, IExpr/*!*/ t1);
-
- /// <summary>
- /// Returns the most derived supertype of both "t0" and "t1". A precondition is
- /// that "t0" and "t1" both represent types.
- /// </summary>
- IExpr/*!*/ JoinTypes(IExpr/*!*/ t0, IExpr/*!*/ t1);
-
- IFunApp/*!*/ IsExactlyA(IExpr/*!*/ e, IExpr/*!*/ type) /*requires IsTypeConstant(type); ensures result.FunctionSymbol.Equals(Value.Eq);*/;
- IFunApp/*!*/ IsA(IExpr/*!*/ e, IExpr/*!*/ type) /*requires IsTypeConstant(type); ensures result.FunctionSymbol.Equals(Value.Subtype);*/;
- }
- [ContractClassFor(typeof(ITypeExprFactory))]
- public abstract class ITypeExprFactoryContracts : ITypeExprFactory
- {
-
- #region ITypeExprFactory Members
-
- IExpr ITypeExprFactory.RootType {
- get { Contract.Ensures(Contract.Result<IExpr>() != null); throw new System.NotImplementedException(); }
- }
-
- bool ITypeExprFactory.IsTypeConstant(IExpr t) {
- Contract.Requires(t != null);
- throw new System.NotImplementedException();
- }
-
- bool ITypeExprFactory.IsTypeEqual(IExpr t0, IExpr t1) {
- Contract.Requires(t0 != null);
- Contract.Requires(t1 != null);
- throw new System.NotImplementedException();
- }
-
- bool ITypeExprFactory.IsSubType(IExpr t0, IExpr t1) {
- Contract.Requires(t0 != null);
- Contract.Requires(t1 != null);
- throw new System.NotImplementedException();
- }
-
- IExpr ITypeExprFactory.JoinTypes(IExpr t0, IExpr t1) {
- Contract.Requires(t0 != null);
- Contract.Requires(t1 != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp ITypeExprFactory.IsExactlyA(IExpr e, IExpr type) {
- Contract.Requires(e != null);
- Contract.Requires(type != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- IFunApp ITypeExprFactory.IsA(IExpr e, IExpr type) {
- Contract.Requires(e != null);
- Contract.Requires(type != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- throw new System.NotImplementedException();
- }
-
- #endregion
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework
+{
+ using System.Diagnostics.Contracts;
+ using System.Collections;
+ using System.Collections.Generic;
+ //using Microsoft.SpecSharp.Collections;
+ using Microsoft.Basetypes;
+
+ /// <summary>
+ /// A basic class for function symbols.
+ /// </summary>
+ public class FunctionSymbol : IFunctionSymbol
+ {
+ private readonly string/*!*/ display;
+ private readonly AIType/*!*/ typ;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(display != null);
+ Contract.Invariant(typ != null);
+ }
+
+
+ public FunctionSymbol(AIType/*!*/ typ)
+ : this("FunctionSymbol", typ) {
+ Contract.Requires(typ != null);
+ }
+
+ internal FunctionSymbol(string/*!*/ display, AIType/*!*/ typ) {
+ Contract.Requires(typ != null);
+ Contract.Requires(display != null);
+ this.display = display;
+ this.typ = typ;
+ // base();
+ }
+
+ public AIType/*!*/ AIType { get { Contract.Ensures(Contract.Result<AIType>() != null); return typ; } }
+
+ [NoDefaultContract]
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return display;
+ }
+
+ }
+
+ /// <summary>
+ /// A class for integer constants.
+ /// </summary>
+ public class IntSymbol : FunctionSymbol
+ {
+ public readonly BigNum Value;
+
+ /// <summary>
+ /// The intention is that this constructor be called only from the Int.Const method.
+ /// </summary>
+ internal IntSymbol(BigNum x)
+ : base(cce.NonNull(x.ToString()), Int.Type) {
+ this.Value = x;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object other) {
+ IntSymbol isym = other as IntSymbol;
+ return isym != null && isym.Value.Equals(this.Value);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return Value.GetHashCode();
+ }
+ }
+
+ /// <summary>
+ /// A class for bitvector constants.
+ /// </summary>
+ public class BvSymbol : FunctionSymbol
+ {
+ public readonly BigNum Value;
+ public readonly int Bits;
+
+ /// <summary>
+ /// The intention is that this constructor be called only from the Int.Const method.
+ /// </summary>
+ internal BvSymbol(BigNum x, int y)
+ : base(x + "bv" + y, Bv.Type) {
+ this.Value = x;
+ this.Bits = y;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object other) {
+ BvSymbol isym = other as BvSymbol;
+ return isym != null && isym.Value == this.Value && isym.Bits == this.Bits;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ unchecked {
+ return Value.GetHashCode() ^ Bits;
+ }
+ }
+ }
+
+ public class DoubleSymbol : FunctionSymbol
+ {
+ public readonly double Value;
+
+ /// <summary>
+ /// The intention is that this constructor be called only from the Double.Const method.
+ /// </summary>
+ internal DoubleSymbol(double x)
+ : base(cce.NonNull(x.ToString()), Double.Type) {
+ this.Value = x;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object other) {
+ DoubleSymbol dsym = other as DoubleSymbol;
+ return dsym != null && dsym.Value == this.Value;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return Value.GetHashCode();
+ }
+ }
+
+ /// <summary>
+ /// Function symbol based on a string. Uses the string equality for determining equality
+ /// of symbol.
+ /// </summary>
+ public class NamedSymbol : FunctionSymbol
+ {
+ public string/*!*/ Value { [NoDefaultContract] get { Contract.Ensures(Contract.Result<string>() != null); return cce.NonNull(this.ToString()); } }
+
+ public NamedSymbol(string/*!*/ symbol, AIType/*!*/ typ)
+ : base(symbol, typ) {
+ Contract.Requires(typ != null);
+ Contract.Requires(symbol != null);
+ }
+
+ [NoDefaultContract]
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object other) {
+ NamedSymbol nsym = other as NamedSymbol;
+ return nsym != null && this.Value.Equals(nsym.Value);
+ }
+
+ [NoDefaultContract]
+ [Pure]
+ public override int GetHashCode() {
+ return Value.GetHashCode();
+ }
+ }
+
+ //
+ // In the following, the classes like Value and Prop serve two
+ // roles. The primary role is to be the base types for AIType.
+ // The only objects of these classes are the representative
+ // objects that denote an AIType, which are given by the
+ // "Type" property. Subtypes in the AIType language are
+ // encoded by subclassing. This yields some "higher-orderness"
+ // for checking subtyping in the AIType language, by using
+ // the Spec#/C# subclassing checks.
+ //
+ // The other role is simply as a module for collecting like function
+ // symbols.
+ //
+
+ //-------------------------- Terms ----------------------------------
+
+ /// <summary>
+ /// A class with the equality symbol and the ValueType.Type.
+ /// </summary>
+ public class Value : AIType
+ {
+ private static readonly AIType/*!*/ valtype = new Value();
+ public static AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return valtype; } }
+
+ private static readonly FunctionType[]/*!*/ funtypeCache = new FunctionType[5];
+ public static FunctionType/*!*/ FunctionType(int inParameterCount) {
+ Contract.Requires((0 <= inParameterCount));
+ Contract.Ensures(Contract.Result<FunctionType>() != null);
+ // Contract.Ensures(Contract.Result<>().Arity == inParameterCount);
+ FunctionType result;
+ if (inParameterCount < funtypeCache.Length) {
+ result = funtypeCache[inParameterCount];
+ if (result != null) {
+ return result;
+ }
+ }
+ AIType[] signature = new AIType[1 + inParameterCount];
+ for (int i = 0; i < signature.Length; i++) {
+ signature[i] = valtype;
+ }
+ result = new FunctionType(signature);
+ if (inParameterCount < funtypeCache.Length) {
+ funtypeCache[inParameterCount] = result;
+ }
+ return result;
+ }
+
+ [Once]
+ private static AIType/*!*/ binreltype;
+
+ private static AIType/*!*/ BinrelType {
+ get {
+ Contract.Ensures(Contract.Result<AIType>() != null);
+ if (binreltype == null) {
+ binreltype = new FunctionType(Type, Type, Prop.Type);
+ }
+ return binreltype;
+ }
+ }
+
+ [Once]
+ private static FunctionSymbol/*!*/ _eq;
+ public static FunctionSymbol/*!*/ Eq {
+ get {
+ Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
+ if (_eq == null) {
+ _eq = new FunctionSymbol("=", BinrelType);
+ }
+ return _eq;
+ }
+ }
+ [Once]
+ private static FunctionSymbol/*!*/ _neq;
+ public static FunctionSymbol/*!*/ Neq {
+ get {
+ Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
+ if (_neq == null) {
+ _neq = new FunctionSymbol("!=", BinrelType);
+ }
+ return _neq;
+ }
+ }
+ [Once]
+ private static FunctionSymbol/*!*/ _subtype;
+ public static FunctionSymbol/*!*/ Subtype {
+ get {
+ Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
+ if (_subtype == null) {
+ _subtype = new FunctionSymbol("<:", BinrelType);
+ }
+ return _subtype;
+ }
+ }
+
+ [Once]
+ private static AIType/*!*/ typeof_type;
+ private static AIType/*!*/ TypeofType {
+ get {
+ Contract.Ensures(Contract.Result<AIType>() != null);
+ if (typeof_type == null) {
+ typeof_type = new FunctionType(Ref.Type, Type);
+ }
+ return typeof_type;
+ }
+ }
+ [Once]
+ private static FunctionSymbol/*!*/ _typeof;
+ public static FunctionSymbol/*!*/ Typeof {
+ get {
+ Contract.Ensures(Contract.Result<FunctionSymbol>() != null);
+ if (_typeof == null) {
+ _typeof = new FunctionSymbol("typeof", TypeofType);
+ }
+ return _typeof;
+ }
+ }
+
+ /// <summary>
+ /// Value should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ protected Value() { }
+
+ }
+
+ public class Int : Value
+ {
+ private static readonly AIType/*!*/ inttype = new Int();
+ public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return inttype; } }
+
+ private static readonly AIType/*!*/ unaryinttype = new FunctionType(Type, Type);
+ private static readonly AIType/*!*/ bininttype = new FunctionType(Type, Type, Type);
+ private static readonly AIType/*!*/ relationtype = new FunctionType(Type, Type, Prop.Type);
+
+ private static readonly FunctionSymbol/*!*/ _negate = new FunctionSymbol("~", unaryinttype);
+ private static readonly FunctionSymbol/*!*/ _add = new FunctionSymbol("+", bininttype);
+ private static readonly FunctionSymbol/*!*/ _sub = new FunctionSymbol("-", bininttype);
+ private static readonly FunctionSymbol/*!*/ _mul = new FunctionSymbol("*", bininttype);
+ private static readonly FunctionSymbol/*!*/ _div = new FunctionSymbol("/", bininttype);
+ private static readonly FunctionSymbol/*!*/ _mod = new FunctionSymbol("%", bininttype);
+ private static readonly FunctionSymbol/*!*/ _atmost = new FunctionSymbol("<=", relationtype);
+ private static readonly FunctionSymbol/*!*/ _less = new FunctionSymbol("<", relationtype);
+ private static readonly FunctionSymbol/*!*/ _greater = new FunctionSymbol(">", relationtype);
+ private static readonly FunctionSymbol/*!*/ _atleast = new FunctionSymbol(">=", relationtype);
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Negate { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _negate; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Add { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _add; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Sub { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _sub; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Mul { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mul; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Div { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _div; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Mod { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mod; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ AtMost { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atmost; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Less { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _less; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Greater { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _greater; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ AtLeast { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atleast; } }
+
+ public static IntSymbol/*!*/ Const(BigNum x) {
+ Contract.Ensures(Contract.Result<IntSymbol>() != null);
+ // We could cache things here, but for now we don't.
+ return new IntSymbol(x);
+ }
+
+ /// <summary>
+ /// Int should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ private Int() { }
+ }
+
+ public class Double : Value
+ {
+ private static readonly AIType/*!*/ doubletype = new Double();
+ public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return doubletype; } }
+
+ public static DoubleSymbol/*!*/ Const(double x) {
+ Contract.Ensures(Contract.Result<DoubleSymbol>() != null);
+ // We could cache things here, but for now we don't.
+ return new DoubleSymbol(x);
+ }
+
+ /// <summary>
+ /// Double should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ private Double() { }
+ }
+
+ public class Bv : Value
+ {
+ private static readonly AIType/*!*/ bvtype = new Bv();
+ public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return bvtype; } }
+
+ private static readonly AIType/*!*/ unaryinttype = new FunctionType(Type, Type);
+ private static readonly AIType/*!*/ bininttype = new FunctionType(Type, Type, Type);
+ private static readonly AIType/*!*/ relationtype = new FunctionType(Type, Type, Prop.Type);
+
+ private static readonly FunctionSymbol/*!*/ _negate = new FunctionSymbol("~", unaryinttype);
+ private static readonly FunctionSymbol/*!*/ _add = new FunctionSymbol("+", bininttype);
+ private static readonly FunctionSymbol/*!*/ _sub = new FunctionSymbol("-", bininttype);
+ private static readonly FunctionSymbol/*!*/ _mul = new FunctionSymbol("*", bininttype);
+ private static readonly FunctionSymbol/*!*/ _div = new FunctionSymbol("/", bininttype);
+ private static readonly FunctionSymbol/*!*/ _mod = new FunctionSymbol("%", bininttype);
+ private static readonly FunctionSymbol/*!*/ _concat = new FunctionSymbol("$concat", bininttype);
+ private static readonly FunctionSymbol/*!*/ _extract = new FunctionSymbol("$extract", unaryinttype);
+ private static readonly FunctionSymbol/*!*/ _atmost = new FunctionSymbol("<=", relationtype);
+ private static readonly FunctionSymbol/*!*/ _less = new FunctionSymbol("<", relationtype);
+ private static readonly FunctionSymbol/*!*/ _greater = new FunctionSymbol(">", relationtype);
+ private static readonly FunctionSymbol/*!*/ _atleast = new FunctionSymbol(">=", relationtype);
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Negate { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _negate; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Add { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _add; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Sub { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _sub; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Mul { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mul; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Div { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _div; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Mod { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _mod; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ AtMost { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atmost; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Less { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _less; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Greater { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _greater; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ AtLeast { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _atleast; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Extract { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _extract; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Concat { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _concat; } }
+
+ public static BvSymbol/*!*/ Const(BigNum x, int y) {
+ Contract.Ensures(Contract.Result<BvSymbol>() != null);
+ // We could cache things here, but for now we don't.
+ return new BvSymbol(x, y);
+ }
+
+ /// <summary>
+ /// Int should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ private Bv() { }
+ }
+
+ public class Ref : Value
+ {
+ private static readonly AIType/*!*/ reftype = new Ref();
+ public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return reftype; } }
+
+ private static readonly FunctionSymbol/*!*/ _null = new FunctionSymbol("null", Type);
+
+ public static FunctionSymbol/*!*/ Null { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _null; } }
+
+ /// <summary>
+ /// Ref should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ private Ref() { }
+ }
+
+ public class HeapStructure : Value
+ {
+ private static readonly AIType/*!*/ reftype = new HeapStructure();
+ public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return reftype; } }
+
+
+
+ /// <summary>
+ /// HeapStructure should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ private HeapStructure() { }
+ }
+
+ public class FieldName : Value
+ {
+ private static readonly AIType/*!*/ fieldnametype = new FieldName();
+ public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return fieldnametype; } }
+
+ private static readonly FunctionSymbol/*!*/ _allocated = new FunctionSymbol("$allocated", FieldName.Type);
+ public static FunctionSymbol/*!*/ Allocated { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _allocated; } }
+
+ /// <summary>
+ /// Is this a boolean field that monotonically goes from false to true?
+ /// </summary>
+ public static bool IsBooleanMonotonicallyWeakening(IFunctionSymbol/*!*/ f) {
+ Contract.Requires(f != null);
+ return f.Equals(Allocated);
+ }
+
+ /// <summary>
+ /// FieldName should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ private FieldName() { }
+ }
+
+ public class Heap : Value
+ {
+ private static readonly AIType/*!*/ heaptype = new Heap();
+ public static new AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return heaptype; } }
+
+ // the types in the following, select1, select2, are hard-coded;
+ // these types may not always be appropriate
+ private static readonly FunctionSymbol/*!*/ _select1 = new FunctionSymbol("sel1",
+ // Heap x FieldName -> Prop
+ new FunctionType(Type, FieldName.Type, Prop.Type)
+ );
+ public static FunctionSymbol/*!*/ Select1 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _select1; } }
+
+ private static readonly FunctionSymbol/*!*/ _select2 = new FunctionSymbol("sel2",
+ // Heap x Ref x FieldName -> Value
+ new FunctionType(Type, Ref.Type, FieldName.Type, Value.Type)
+ );
+ public static FunctionSymbol/*!*/ Select2 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _select2; } }
+
+ // the types in the following, store1, store2, are hard-coded;
+ // these types may not always be appropriate
+ private static readonly FunctionSymbol/*!*/ _update1 = new FunctionSymbol("upd1",
+ // Heap x FieldName x Value -> Heap
+ new FunctionType(Type, FieldName.Type, Value.Type, Type)
+ );
+ public static FunctionSymbol/*!*/ Update1 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _update1; } }
+
+ private static readonly FunctionSymbol/*!*/ _update2 = new FunctionSymbol("upd2",
+ // Heap x Ref x FieldName x Value -> Heap
+ new FunctionType(Type, Ref.Type, FieldName.Type, Value.Type, Type)
+ );
+ public static FunctionSymbol/*!*/ Update2 { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _update2; } }
+
+ private static readonly FunctionSymbol/*!*/ _unsupportedHeapOp =
+ new FunctionSymbol("UnsupportedHeapOp",
+ // Heap x FieldName -> Prop
+ new FunctionType(Type, FieldName.Type, Prop.Type)
+ );
+ public static FunctionSymbol/*!*/ UnsupportedHeapOp { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _unsupportedHeapOp; } }
+
+ /// <summary>
+ /// Heap should not be instantiated from the outside, except perhaps in
+ /// subclasses.
+ /// </summary>
+ private Heap() { }
+ }
+
+ // public class List : Value
+ // {
+ // private static IDictionary/*<AIType!,AIType!>*/! lists = new Hashtable();
+ // public static AIType! Type(AIType! typeParameter)
+ // {
+ // if (lists.Contains(typeParameter))
+ // return lists[typeParameter];
+ // else
+ // {
+ // AIType! result = new List(typeParameter);
+ // lists[typeParameter] = result;
+ // return result;
+ // }
+ // }
+ //
+ // private static IDictionary/*<AIType!,AIType!>*/! nils = new Hashtable();
+ // public static FunctionSymbol! Nil(AIType! typeParameter)
+ // {
+ // if (nils.Contains(typeParameter))
+ // return nils[typeParameter];
+ // else
+ // {
+ // FunctionSymbol! result = new FunctionSymbol(Type(typeParameter));
+ // nils[typeParameter] = result;
+ // return result;
+ // }
+ // }
+ //
+ // private static IDictionary/*<AIType!,AIType!>*/! cons = new Hashtable();
+ // public static FunctionSymbol! Cons(AIType! typeParameter)
+ // {
+ // if (cons.Contains(typeParameter))
+ // return cons[typeParameter];
+ // else
+ // {
+ // FunctionSymbol! result = new FunctionSymbol(
+ // new FunctionType(typeParameter, Type(typeParameter), Type(typeParameter))
+ // );
+ // cons[typeParameter] = result;
+ // return result;
+ // }
+ // }
+ //
+ // private AIType! typeParameter;
+ // public AIType(TypeParameter/*!*/ ){
+ //Contract.Requires( != null);
+ //return typeParameter; } }
+ //
+ // /// <summary>
+ // /// List should not be instantiated from the outside.
+ // /// </summary>
+ // private List(AIType! typeParameter)
+ // {
+ // this.typeParameter = typeParameter;
+ // }
+ // }
+ //
+ // public class Pair : Value
+ // {
+ // private static IDictionary! pairs = new Hashtable();
+ // public static AIType! Type(AIType! type1, AIType! type2)
+ // {
+ // Microsoft.AbstractInterpretationFramework.Collections.Pair typpair
+ // = new Microsoft.AbstractInterpretationFramework.Collections.Pair(type1, type2);
+ //
+ // if (pairs.Contains(typpair))
+ // return pairs[typpair];
+ // else
+ // {
+ // AIType! result = new Pair(type1, type2);
+ // pairs[typpair] = result;
+ // return result;
+ // }
+ // }
+ //
+ // private static IDictionary! constructs = new Hashtable();
+ // public static FunctionSymbol! Pair(AIType! type1, AIType! type2)
+ // {
+ // Microsoft.AbstractInterpretationFramework.Collections.Pair typpair
+ // = new Microsoft.AbstractInterpretationFramework.Collections.Pair(type1, type2);
+ //
+ // if (constructs.Contains(typpair))
+ // return constructs[typpair];
+ // else
+ // {
+ // FunctionSymbol! result = new FunctionSymbol(
+ // new FunctionType(type1, type2, Type(type1, type2))
+ // );
+ // constructs[typpair] = result;
+ // return result;
+ // }
+ // }
+ //
+ // protected AIType! type1;
+ // protected AIType! type2;
+ //
+ // public AIType(Type1/*!*/ ){
+ //Contract.Requires( != null);
+ // return type1; } }
+ // public AIType(Type2/*!*/ ){
+ //Contract.Requires( != null);
+ // return type2; } }
+ //
+ // /// <summary>
+ // /// Pair should not be instantiated from the outside, except by subclasses.
+ // /// </summary>
+ // protected Pair(AIType! type1, AIType! type2)
+ // {
+ // this.type1 = type1;
+ // this.type2 = type2;
+ // }
+ // }
+
+ //-------------------------- Propositions ---------------------------
+
+
+ /// <summary>
+ /// A class with global propositional symbols and the Prop.Type.
+ /// </summary>
+ public sealed class Prop : AIType
+ {
+ private static readonly AIType/*!*/ proptype = new Prop();
+
+ public static AIType/*!*/ Type { get { Contract.Ensures(Contract.Result<AIType>() != null); return proptype; } }
+
+ private static readonly AIType/*!*/ unaryproptype = new FunctionType(Type, Type);
+ private static readonly AIType/*!*/ binproptype = new FunctionType(Type, Type, Type);
+ private static readonly AIType/*!*/ quantifiertype =
+ new FunctionType(new FunctionType(Value.Type, Type), Type);
+
+ private static readonly FunctionSymbol/*!*/ _false = new FunctionSymbol("false", Type);
+ private static readonly FunctionSymbol/*!*/ _true = new FunctionSymbol("true", Type);
+ private static readonly FunctionSymbol/*!*/ _not = new FunctionSymbol("!", unaryproptype);
+ private static readonly FunctionSymbol/*!*/ _and = new FunctionSymbol("/\\", binproptype);
+ private static readonly FunctionSymbol/*!*/ _or = new FunctionSymbol("\\/", binproptype);
+ private static readonly FunctionSymbol/*!*/ _implies = new FunctionSymbol("==>", binproptype);
+ private static readonly FunctionSymbol/*!*/ _exists = new FunctionSymbol("Exists", quantifiertype);
+ private static readonly FunctionSymbol/*!*/ _forall = new FunctionSymbol("Forall", quantifiertype);
+ private static readonly FunctionSymbol/*!*/ _lambda = new FunctionSymbol("Lambda", quantifiertype);
+
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ False { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _false; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ True { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _true; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Not { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _not; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ And { [Pure] get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _and; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Or { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _or; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Implies { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _implies; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Exists { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _exists; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Forall { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _forall; } }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public static FunctionSymbol/*!*/ Lambda { get { Contract.Ensures(Contract.Result<FunctionSymbol>() != null); return _lambda; } }
+
+
+ /// <summary>
+ /// Prop should not be instantiated from the outside.
+ /// </summary>
+ private Prop() { }
+
+
+
+ //
+ // Utility Methods
+ //
+
+ public static IExpr/*!*/ SimplifiedAnd(IPropExprFactory/*!*/ factory, IExpr/*!*/ e0, IExpr/*!*/ e1) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e0 != null);
+ Contract.Requires(factory != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IFunApp fun0 = e0 as IFunApp;
+ if (fun0 != null) {
+ if (fun0.FunctionSymbol.Equals(Prop.True)) {
+ return e1;
+ } else if (fun0.FunctionSymbol.Equals(Prop.False)) {
+ return e0;
+ }
+ }
+
+ IFunApp fun1 = e1 as IFunApp;
+ if (fun1 != null) {
+ if (fun1.FunctionSymbol.Equals(Prop.True)) {
+ return e0;
+ } else if (fun1.FunctionSymbol.Equals(Prop.False)) {
+ return e1;
+ }
+ }
+
+ return factory.And(e0, e1);
+ }
+
+ public static IExpr/*!*/ SimplifiedAnd(IPropExprFactory/*!*/ factory, IEnumerable/*<IExpr!>*//*!*/ exprs) {
+ Contract.Requires(exprs != null);
+ Contract.Requires(factory != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IExpr/*!*/ result = factory.True;
+ Contract.Assert(result != null);
+ foreach (IExpr/*!*/ conjunct in exprs) {
+ Contract.Assert(conjunct != null);
+ result = SimplifiedAnd(factory, result, conjunct);
+ }
+ return result;
+ }
+
+ public static IExpr/*!*/ SimplifiedOr(IPropExprFactory/*!*/ factory, IExpr/*!*/ e0, IExpr/*!*/ e1) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e0 != null);
+ Contract.Requires(factory != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IFunApp fun0 = e0 as IFunApp;
+ if (fun0 != null) {
+ if (fun0.FunctionSymbol.Equals(Prop.False)) {
+ return e1;
+ } else if (fun0.FunctionSymbol.Equals(Prop.True)) {
+ return e0;
+ }
+ }
+
+ IFunApp fun1 = e1 as IFunApp;
+ if (fun1 != null) {
+ if (fun1.FunctionSymbol.Equals(Prop.False)) {
+ return e0;
+ } else if (fun1.FunctionSymbol.Equals(Prop.True)) {
+ return e1;
+ }
+ }
+
+ return factory.Or(e0, e1);
+ }
+
+ public static IExpr/*!*/ SimplifiedOr(IPropExprFactory/*!*/ factory, IEnumerable/*<IExpr!>*//*!*/ exprs) {
+ Contract.Requires(exprs != null);
+ Contract.Requires(factory != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IExpr/*!*/ result = factory.False;
+ Contract.Assert(result != null);
+ foreach (IExpr/*!*/ disj in exprs) {
+ Contract.Assert(disj != null);
+ result = SimplifiedOr(factory, result, disj);
+ }
+ return result;
+ }
+
+
+
+ /// <summary>
+ /// Break top-level conjuncts into a list of sub-expressions.
+ /// </summary>
+ /// <param name="e">The expression to examine.</param>
+ /// <returns>A list of conjuncts.</returns>
+ internal static IList/*<IExpr!>*//*!*/ BreakConjuncts(IExpr/*!*/ e) {
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<IList>() != null);
+ Contract.Ensures(Contract.ForAll(0, Contract.Result<IList>().Count, i => {
+ var sub = Contract.Result<IList>()[i];
+ return !(sub is IFunApp) || !((IFunApp)sub).FunctionSymbol.Equals(Prop.And);
+ }));
+ return BreakJuncts(e, Prop.And);
+ }
+
+ /// <summary>
+ /// Break top-level disjuncts into a list of sub-expressions.
+ /// </summary>
+ /// <param name="e">The expression to examine.</param>
+ /// <returns>A list of conjuncts.</returns>
+ internal static IList/*<IExpr!>*//*!*/ BreakDisjuncts(IExpr/*!*/ e) {
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<IList>() != null);
+ Contract.Ensures(Contract.ForAll(0, Contract.Result<IList>().Count, i => {
+ var sub = Contract.Result<IList>()[i];
+ return !(sub is IFunApp) || !((IFunApp)sub).FunctionSymbol.Equals(Prop.Or);
+ }));
+ return BreakJuncts(e, Prop.Or);
+ }
+
+ private static IList/*<IExpr!>*//*!*/ BreakJuncts(IExpr/*!*/ e, IFunctionSymbol/*!*/ sym) {
+ Contract.Requires(sym != null);
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<IList>() != null);
+ Contract.Ensures(Contract.ForAll(0, Contract.Result<IList>().Count, i => {
+ var sub = Contract.Result<IList>()[i];
+ return (sub is IFunApp) || !((IFunApp)sub).FunctionSymbol.Equals(sym);
+ }));
+ ArrayList/*<IExpr!>*//*!*/ result = new ArrayList();
+
+ IFunApp f = e as IFunApp;
+ if (f != null) {
+ // If it is a sym, go down into sub-expressions.
+ if (f.FunctionSymbol.Equals(sym)) {
+ foreach (IExpr/*!*/ arg in f.Arguments) {
+ Contract.Assert(arg != null);
+ result.AddRange(BreakJuncts(arg, sym));
+ }
+ }
+ // Otherwise, stop.
+ else {
+ result.Add(e);
+ }
+ } else {
+ result.Add(e);
+ }
+
+ return result;
+ }
+ }
+
+ /// <summary>
+ /// A callback to produce a function body given the bound variable.
+ /// </summary>
+ /// <param name="var">The bound variable to use.</param>
+ /// <returns>The function body.</returns>
+ public delegate IExpr/*!*/ FunctionBody(IVariable/*!*/ var);
+
+ /// <summary>
+ /// An interface for constructing propositional expressions.
+ ///
+ /// This interface should be implemented by the client. An implementation of
+ /// of this class should generally be used as a singleton object.
+ /// </summary>
+ ///
+ [ContractClass(typeof(IPropExprFactoryContracts))]
+ public interface IPropExprFactory
+ {
+ IFunApp/*!*/ False { get /*ensures result.FunctionSymbol.Equals(Prop.False);*/; }
+ IFunApp/*!*/ True { get /*ensures result.FunctionSymbol.Equals(Prop.True);*/; }
+
+ IFunApp/*!*/ Not(IExpr/*!*/ p) /*ensures result.FunctionSymbol.Equals(Prop.Not);*/;
+
+ IFunApp/*!*/ And(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.And);*/;
+ IFunApp/*!*/ Or(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.Or);*/;
+
+ IFunApp/*!*/ Implies(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.Implies);*/;
+ }
+ [ContractClassFor(typeof(IPropExprFactory))]
+ public abstract class IPropExprFactoryContracts : IPropExprFactory
+ {
+ #region IPropExprFactory Members
+ IFunApp IPropExprFactory.Implies(IExpr p, IExpr q) {
+ Contract.Requires(p != null);
+ Contract.Requires(q != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp IPropExprFactory.False {
+
+ get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
+ }
+
+ IFunApp IPropExprFactory.True {
+ get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
+ }
+
+ IFunApp IPropExprFactory.Not(IExpr p) {
+ Contract.Requires(p != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp IPropExprFactory.And(IExpr p, IExpr q) {
+ Contract.Requires(p != null);
+ Contract.Requires(q != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp IPropExprFactory.Or(IExpr p, IExpr q) {
+ Contract.Requires(p != null);
+ Contract.Requires(q != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+
+
+ #endregion
+ }
+
+ /// <summary>
+ /// An interface for constructing value expressions.
+ ///
+ /// This interface should be implemented by the client. An implementation of
+ /// of this class should generally be used as a singleton object.
+ /// </summary>
+ ///
+ [ContractClass(typeof(IValueExprFactoryContracts))]
+ public interface IValueExprFactory
+ {
+ IFunApp/*!*/ Eq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Eq);*/;
+ IFunApp/*!*/ Neq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Neq);*/;
+ }
+ [ContractClassFor(typeof(IValueExprFactory))]
+ public abstract class IValueExprFactoryContracts : IValueExprFactory
+ {
+ #region IValueExprFactory Members
+
+ IFunApp IValueExprFactory.Eq(IExpr e0, IExpr e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp IValueExprFactory.Neq(IExpr e0, IExpr e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// An interface for constructing value expressions having to with null.
+ ///
+ /// This interface should be implemented by the client. An implementation of
+ /// of this class should generally be used as a singleton object.
+ /// </summary>
+ ///
+ [ContractClass(typeof(INullnessFactoryContracts))]
+ public interface INullnessFactory
+ {
+ IFunApp/*!*/ Eq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Eq);*/;
+ IFunApp/*!*/ Neq(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Neq);*/;
+ IFunApp/*!*/ Null { get; /*ensures result.FunctionSymbol.Equals(Ref.Null);*/ }
+ }
+ [ContractClassFor(typeof(INullnessFactory))]
+ public abstract class INullnessFactoryContracts : INullnessFactory
+ {
+ #region INullnessFactory Members
+
+ IFunApp INullnessFactory.Eq(IExpr e0, IExpr e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp INullnessFactory.Neq(IExpr e0, IExpr e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp INullnessFactory.Null {
+ get {
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// An interface for constructing integer expressions.
+ ///
+ /// This interface should be implemented by the client. An implementation of
+ /// of this class should generally be used as a singleton object.
+ /// </summary>
+ ///
+ [ContractClass(typeof(IIntExprFactoryContracts))]
+ public interface IIntExprFactory : IValueExprFactory
+ {
+ IFunApp/*!*/ Const(BigNum i) /*ensures result.FunctionSymbol.Equals(new IntSymbol(i));*/;
+ }
+ [ContractClassFor(typeof(IIntExprFactory))]
+ public abstract class IIntExprFactoryContracts : IIntExprFactory
+ {
+
+ #region IIntExprFactory Members
+
+ IFunApp IIntExprFactory.Const(BigNum i) {
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+
+ #region IValueExprFactory Members
+
+ IFunApp IValueExprFactory.Eq(IExpr e0, IExpr e1) {
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp IValueExprFactory.Neq(IExpr e0, IExpr e1) {
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// An interface for constructing linear integer expressions.
+ ///
+ /// This interface should be implemented by the client. An implementation of
+ /// of this class should generally be used as a singleton object.
+ /// </summary>
+ ///
+ [ContractClass(typeof(ILinearExprFactoryContracts))]
+ public interface ILinearExprFactory : IIntExprFactory
+ {
+ IFunApp/*!*/ AtMost(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.AtMost);*/;
+ IFunApp/*!*/ Add(IExpr/*!*/ e0, IExpr/*!*/ e1) /*ensures result.FunctionSymbol.Equals(Value.Add);*/;
+ /// <summary>
+ /// If "var" is null, returns an expression representing r.
+ /// Otherwise, returns an expression representing r*var.
+ /// </summary>
+ IExpr/*!*/ Term(Microsoft.Basetypes.Rational r, IVariable var);
+
+ IFunApp/*!*/ False { get /*ensures result.FunctionSymbol.Equals(Prop.False);*/; }
+ IFunApp/*!*/ True { get /*ensures result.FunctionSymbol.Equals(Prop.True);*/; }
+ IFunApp/*!*/ And(IExpr/*!*/ p, IExpr/*!*/ q) /*ensures result.FunctionSymbol.Equals(Prop.And);*/;
+ }
+ [ContractClassFor(typeof(ILinearExprFactory))]
+ public abstract class ILinearExprFactoryContracts : ILinearExprFactory
+ {
+
+ #region ILinearExprFactory Members
+
+ IFunApp ILinearExprFactory.AtMost(IExpr e0, IExpr e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp ILinearExprFactory.Add(IExpr e0, IExpr e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null); Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IExpr ILinearExprFactory.Term(Rational r, IVariable var) {
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp ILinearExprFactory.False {
+ get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
+ }
+
+ IFunApp ILinearExprFactory.True {
+ get { Contract.Ensures(Contract.Result<IFunApp>() != null); throw new System.NotImplementedException(); }
+ }
+
+ IFunApp ILinearExprFactory.And(IExpr p, IExpr q) {
+ Contract.Requires(p != null);
+ Contract.Requires(q != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+
+ #region IIntExprFactory Members
+
+ IFunApp IIntExprFactory.Const(BigNum i) {
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+
+ #region IValueExprFactory Members
+
+ IFunApp IValueExprFactory.Eq(IExpr e0, IExpr e1) {
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp IValueExprFactory.Neq(IExpr e0, IExpr e1) {
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// An interface for constructing type expressions and performing some type operations.
+ /// The types are assumed to be arranged in a rooted tree.
+ ///
+ /// This interface should be implemented by the client. An implementation of
+ /// of this class should generally be used as a singleton object.
+ /// </summary>
+ ///
+ [ContractClass(typeof(ITypeExprFactoryContracts))]
+ public interface ITypeExprFactory
+ {
+ /// <summary>
+ /// Returns an expression denoting the top of the type hierarchy.
+ /// </summary>
+ IExpr/*!*/ RootType { get; }
+
+ /// <summary>
+ /// Returns true iff "t" denotes a type constant.
+ /// </summary>
+ [Pure]
+ bool IsTypeConstant(IExpr/*!*/ t);
+
+ /// <summary>
+ /// Returns true iff t0 and t1 are types such that t0 and t1 are equal.
+ /// </summary>
+ [Pure]
+ bool IsTypeEqual(IExpr/*!*/ t0, IExpr/*!*/ t1);
+
+ /// <summary>
+ /// Returns true iff t0 and t1 are types such that t0 is a subtype of t1.
+ /// </summary>
+ [Pure]
+ bool IsSubType(IExpr/*!*/ t0, IExpr/*!*/ t1);
+
+ /// <summary>
+ /// Returns the most derived supertype of both "t0" and "t1". A precondition is
+ /// that "t0" and "t1" both represent types.
+ /// </summary>
+ IExpr/*!*/ JoinTypes(IExpr/*!*/ t0, IExpr/*!*/ t1);
+
+ IFunApp/*!*/ IsExactlyA(IExpr/*!*/ e, IExpr/*!*/ type) /*requires IsTypeConstant(type); ensures result.FunctionSymbol.Equals(Value.Eq);*/;
+ IFunApp/*!*/ IsA(IExpr/*!*/ e, IExpr/*!*/ type) /*requires IsTypeConstant(type); ensures result.FunctionSymbol.Equals(Value.Subtype);*/;
+ }
+ [ContractClassFor(typeof(ITypeExprFactory))]
+ public abstract class ITypeExprFactoryContracts : ITypeExprFactory
+ {
+
+ #region ITypeExprFactory Members
+
+ IExpr ITypeExprFactory.RootType {
+ get { Contract.Ensures(Contract.Result<IExpr>() != null); throw new System.NotImplementedException(); }
+ }
+
+ bool ITypeExprFactory.IsTypeConstant(IExpr t) {
+ Contract.Requires(t != null);
+ throw new System.NotImplementedException();
+ }
+
+ bool ITypeExprFactory.IsTypeEqual(IExpr t0, IExpr t1) {
+ Contract.Requires(t0 != null);
+ Contract.Requires(t1 != null);
+ throw new System.NotImplementedException();
+ }
+
+ bool ITypeExprFactory.IsSubType(IExpr t0, IExpr t1) {
+ Contract.Requires(t0 != null);
+ Contract.Requires(t1 != null);
+ throw new System.NotImplementedException();
+ }
+
+ IExpr ITypeExprFactory.JoinTypes(IExpr t0, IExpr t1) {
+ Contract.Requires(t0 != null);
+ Contract.Requires(t1 != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp ITypeExprFactory.IsExactlyA(IExpr e, IExpr type) {
+ Contract.Requires(e != null);
+ Contract.Requires(type != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ IFunApp ITypeExprFactory.IsA(IExpr e, IExpr type) {
+ Contract.Requires(e != null);
+ Contract.Requires(type != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+ }
+}
diff --git a/Source/AIFramework/Expr.cs b/Source/AIFramework/Expr.cs
index 58473592..ae2bd4b7 100644
--- a/Source/AIFramework/Expr.cs
+++ b/Source/AIFramework/Expr.cs
@@ -1,640 +1,640 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-// This file specifies the expression language used by the Abstract
-// Interpretation Framework.
-//
-// expressions e ::= x variables
-// | f(e1,...,en) uninterpreted functions
-// | \x:t.e lambda expressions
-//
-// types t ::= b user-defined/built-in base types
-// | t1 * ... * tn -> t' function type
-
-namespace Microsoft.AbstractInterpretationFramework
-{
- using System.Collections;
- using System;
- using System.Diagnostics.Contracts;
-
- //----------------------------- Expressions -----------------------------
-
- /// <summary>
- /// An interface for expressions. This expression language is specified
- /// by interfaces to allow the client to be able to use their existing
- /// AST nodes as AIF expressions.
- ///
- /// This only serves as a place for operations on expressions. Clients
- /// should implement directly IVariable, IFunApp, ...
- /// </summary>
- [ContractClass(typeof(IExprContracts))]
- public interface IExpr
- {
- /// <summary>
- /// Execute a visit over the expression.
- /// </summary>
- /// <param name="visitor">The expression visitor.</param>
- /// <returns>The result of the visit.</returns>
- [Pure] object DoVisit(ExprVisitor/*!*/ visitor);
-
- // TODO: Type checking of the expressions.
- }
- [ContractClassFor(typeof(IExpr))]
- public abstract class IExprContracts:IExpr{
- #region IExpr Members
-
-public object DoVisit(ExprVisitor visitor)
-{
- Contract.Requires(visitor != null);
- throw new System.NotImplementedException();
-}
-
-#endregion
-}
-
- /// <summary>
- /// An interface for variables.
- ///
- /// This interface should be implemented by the client.
- /// </summary>
- [ContractClass(typeof(IVariableContracts))]
- public interface IVariable : IExpr
- {
- string/*!*/ Name { get; } // Each client must define the name for variables
- }
- [ContractClassFor(typeof(IVariable))]
- public abstract class IVariableContracts:IVariable{
- string IVariable.Name{get{Contract.Ensures(Contract.Result<string>() != null);throw new NotImplementedException();}
-
- }
-
- #region IExpr Members
-
- object IExpr.DoVisit(ExprVisitor visitor) {
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
- /// <summary>
- /// An interface for function applications.
- ///
- /// This interface should be implemented by the client.
- /// </summary>
- ///
- [ContractClass(typeof(IFunAppContracts))]
- public interface IFunApp : IExpr
- {
- IFunctionSymbol/*!*/ FunctionSymbol { get; }
- IList/*<IExpr!>*//*!*/ Arguments
- {
- [Pure][Rep] get;
-
- }
-
- /// <summary>
- /// Provides a method to create a new uninterpreted function
- /// with the same function symbol but with the arguments with
- /// args.
- /// </summary>
- /// <param name="args">The new arguments.</param>
- /// <returns>A copy of the function with the new arguments.</returns>
- IFunApp/*!*/ CloneWithArguments(IList/*<IExpr!>*//*!*/ args)
- //TODO Contract.Requires(this.Arguments.Count == args.Count);
- ;
- }
- [ContractClassFor(typeof(IFunApp))]
-public abstract class IFunAppContracts:IFunApp{
-
-#region IFunApp Members
-
-public IFunctionSymbol FunctionSymbol
-{
- get {Contract.Ensures(Contract.Result<IFunctionSymbol>() != null);
- throw new System.NotImplementedException(); }
-}
-
-public IList Arguments
-{
- get {Contract.Ensures(Contract.Result<IList>() != null);
- Contract.Ensures(Contract.Result<IList>().IsReadOnly);
- throw new System.NotImplementedException(); }
-}
-
-public IFunApp CloneWithArguments(IList args)
-{
- Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
-
-
- throw new System.NotImplementedException();
-}
-
-#endregion
-
-#region IExpr Members
-
-object IExpr.DoVisit(ExprVisitor visitor) {
- throw new NotImplementedException();
-}
-
-#endregion
-}
-
- /// <summary>
- /// An interface for anonymous functions (i.e., lambda expressions)
- /// </summary>
- [ContractClass(typeof(IFunctionContracts))]
- public interface IFunction : IExpr
- {
- IVariable/*!*/ Param { get; }
- AIType/*!*/ ParamType { get; }
- IExpr/*!*/ Body { get; }
-
- IFunction/*!*/ CloneWithBody(IExpr/*!*/ body);
- }
- [ContractClassFor(typeof(IFunction))]
- public abstract class IFunctionContracts:IFunction{
-
- #region IFunction Members
-
- IVariable IFunction.Param {
- get {
- Contract.Ensures(Contract.Result<IVariable>() != null);
- throw new NotImplementedException();
- }
- }
-
- AIType IFunction.ParamType {
- get {
- Contract.Ensures(Contract.Result<AIType>() != null);
- throw new NotImplementedException();
- }
- }
-
- IExpr IFunction.Body {
- get {
- Contract.Ensures(Contract.Result<IExpr>() != null);
- throw new NotImplementedException();
- }
- }
-
- IFunction IFunction.CloneWithBody(IExpr body) {
- Contract.Requires(body != null);
- Contract.Ensures(Contract.Result<IFunction>() != null);
- throw new NotImplementedException();
- }
-
- #endregion
-
- #region IExpr Members
-
- object IExpr.DoVisit(ExprVisitor visitor) {
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
- /// <summary>
- /// An interface representing an expression that at any moment could, in principle, evaluate
- /// to a different value. That is, the abstract interpreter should treat these IExpr's
- /// as unknown values. They are used when there is no other IExpr corresponding to the
- /// expression to be modeled.
- /// </summary>
- public interface IUnknown : IExpr {}
-
- /// <summary>
- /// An abstract class that provides an interface for expression visitors.
- /// </summary>
- [ContractClass(typeof(ExprVisitorContracts))]
- public abstract class ExprVisitor
- {
- public abstract object Default(IExpr/*!*/ expr);
-
- public virtual object VisitVariable(IVariable/*!*/ var){
-Contract.Requires(var != null);
- return Default(var);
- }
-
- public virtual object VisitFunApp(IFunApp/*!*/ funapp){
-Contract.Requires(funapp != null);
- return Default(funapp);
- }
-
- public virtual object VisitFunction(IFunction/*!*/ fun){
-Contract.Requires(fun != null);
- return Default(fun);
- }
- }
- [ContractClassFor(typeof(ExprVisitor))]
- public abstract class ExprVisitorContracts:ExprVisitor{
- public override object Default(IExpr expr)
-{
- Contract.Requires(expr != null); throw new NotImplementedException();
-}}
-
- /// <summary>
- /// A utility class for dealing with expressions.
- /// </summary>
- public sealed class ExprUtil
- {
- /// <summary>
- /// Yield an expression that is 'inexpr' with 'var' replaced by 'subst'.
- /// </summary>
- /// <param name="subst">The expression to substitute.</param>
- /// <param name="var">The variable to substitute for.</param>
- /// <param name="inexpr">The expression to substitute into.</param>
- public static IExpr/*!*/ Substitute(IExpr/*!*/ subst, IVariable/*!*/ var, IExpr/*!*/ inexpr){
-Contract.Requires(inexpr != null);
-Contract.Requires(var != null);
-Contract.Requires(subst != null);
-Contract.Ensures(Contract.Result<IExpr>() != null);
- IExpr result = null;
-
- if (inexpr is IVariable)
- {
- result = inexpr.Equals(var) ? subst : inexpr;
- }
- else if (inexpr is IFunApp)
- {
- IFunApp/*!*/ funapp = (IFunApp/*!*/)cce.NonNull(inexpr);
- IList newargs = null;
-
- var x = new System.Collections.Generic.List<IExpr>();
- foreach (IExpr arg in funapp.Arguments){
- x.Add(Substitute(subst,var, arg));
- }
- newargs = new ArrayList(x);
- //newargs = new ArrayList{ IExpr/*!*/ arg in funapp.Arguments; Substitute(subst, var, arg) };
- result = funapp.CloneWithArguments(newargs);
- }
- else if (inexpr is IFunction)
- {
- IFunction/*!*/ fun = (IFunction/*!*/)cce.NonNull(inexpr);
-
- if (fun.Param.Equals(var))
- result = fun;
- else
- result = fun.CloneWithBody(Substitute(subst, var, fun.Body));
- }
- else if (inexpr is IUnknown)
- {
- result = inexpr;
- }
- else
- {
- {Contract.Assert(false);throw new cce.UnreachableException();}
- }
-
- return result;
- }
-
-
- //
- // Poor man's pattern matching.
- //
- // The methods below implement pattern matching for AI expressions.
- //
- // Example Usage:
- // Match(e, Prop.Imp,
- // (Matcher)delegate (IExpr e) { return Match(e, Prop.And, out x, out y); }
- // out z)
- // which sees if 'e' matches Prop.Imp(Prop.And(x,y),z) binding x,y,z to the subtrees.
- //
- public delegate bool Matcher(IExpr/*!*/ expr);
-
- private static IFunApp/*?*/ MatchFunctionSymbol(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f){
-Contract.Requires(f != null);
-Contract.Requires(expr != null);
- IFunApp app = expr as IFunApp;
- if (app != null)
- {
- if (app.FunctionSymbol.Equals(f))
- return app;
- else
- return null;
- }
- else
- return null;
- }
-
- public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, params Matcher[]/*!*/ subs){
-Contract.Requires(subs != null);
-Contract.Requires(f != null);
-Contract.Requires(expr != null);
- IFunApp app = MatchFunctionSymbol(expr,f);
- if (app != null)
- {
- int i = 0; // Note ***0***
- foreach(Matcher/*!*/ s in subs){
-Contract.Assert(s != null);
- if (!s(cce.NonNull((IExpr)app.Arguments[i]))) { return false; }
- i++;
- }
- return true;
- }
- else { return false; }
- }
-
- // Unary Binding
- public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, out IExpr arg0, params Matcher[]/*!*/ subs){
-Contract.Requires(subs != null);
-Contract.Requires(f != null);
-Contract.Requires(expr != null);
- arg0 = null;
-
- IFunApp app = MatchFunctionSymbol(expr,f);
- if (app != null)
- {
- arg0 = (IExpr/*!*/)cce.NonNull(app.Arguments[0]);
-
- int i = 1; // Note ***1***
- foreach(Matcher/*!*/ s in subs){
-Contract.Assert(s != null);
- if (!s(cce.NonNull((IExpr/*!*/)app.Arguments[i]))) { return false; }
- i++;
- }
- return true;
- }
- else { return false; }
- }
-
- // Binary Binding
- public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, Matcher/*!*/ sub0, out IExpr arg1, params Matcher[]/*!*/ subs){
-Contract.Requires(subs != null);
-Contract.Requires(sub0 != null);
-Contract.Requires(f != null);
-Contract.Requires(expr != null);
- arg1 = null;
-
- IFunApp app = MatchFunctionSymbol(expr,f);
- if (app != null)
- {
- if (!sub0(cce.NonNull((IExpr/*!*/)app.Arguments[0]))) { return false; }
-
- arg1 = (IExpr/*!*/)cce.NonNull(app.Arguments[1]);
-
- int i = 2; // Note ***2***
- foreach(Matcher/*!*/ s in subs){
-Contract.Assert(s != null);
- if (!s(cce.NonNull((IExpr)app.Arguments[i]))) { return false; }
- i++;
- }
- return true;
- }
- else { return false; }
- }
-
- public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, out IExpr arg0, out IExpr arg1, params Matcher[]/*!*/ subs){
-Contract.Requires(subs != null);
-Contract.Requires(f != null);
-Contract.Requires(expr != null);
- arg0 = null;
- arg1 = null;
-
- IFunApp app = MatchFunctionSymbol(expr,f);
- if (app != null)
- {
- arg0 = (IExpr/*!*/)cce.NonNull(app.Arguments[0]);
- arg1 = (IExpr/*!*/)cce.NonNull(app.Arguments[1]);
-
- int i = 2; // Note ***2***
- foreach(Matcher/*!*/ s in subs){
-Contract.Assert(s != null);
- if (!s(cce.NonNull((IExpr/*!*/)app.Arguments[i]))) { return false; }
- i++;
- }
- return true;
- }
- else { return false; }
- }
-
- // Ternary Binding
- public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, out IExpr arg0, out IExpr arg1, out IExpr arg2, params Matcher[]/*!*/ subs){
-Contract.Requires(subs != null);
-Contract.Requires(f != null);
-Contract.Requires(expr != null);
- arg0 = null;
- arg1 = null;
- arg2 = null;
-
- IFunApp app = MatchFunctionSymbol(expr,f);
- if (app != null)
- {
- arg0 = (IExpr/*!*/)cce.NonNull(app.Arguments[0]);
- arg1 = (IExpr/*!*/)cce.NonNull(app.Arguments[1]);
- arg2 = (IExpr/*!*/)cce.NonNull(app.Arguments[2]);
-
- int i = 3; // Note ***3***
- foreach(Matcher/*!*/ s in subs){
-Contract.Assert(s != null);
- if (!s(cce.NonNull((IExpr/*!*/)app.Arguments[i]))) { return false; }
- i++;
- }
- return true;
- }
- else { return false; }
- }
-
- /// <summary>
- /// Not intended to be instantiated.
- /// </summary>
- private ExprUtil() { }
- }
-
- //------------------------------ Symbols --------------------------------
-
- /// <summary>
- /// An interface for function symbols. Constants are represented by
- /// 0-ary function symbols.
- ///
- /// This interface should be implemented by abstract domains, but client
- /// expressions need keep track of function symbols.
- /// </summary>
- [ContractClass(typeof(IFunctionSymbolContracts))]
- public interface IFunctionSymbol
- {
- AIType/*!*/ AIType { [Rep][ResultNotNewlyAllocated]
- get; }
- }
- [ContractClassFor(typeof(IFunctionSymbol))]
- public abstract class IFunctionSymbolContracts:IFunctionSymbol{
- #region IFunctionSymbol Members
-
- AIType IFunctionSymbol.AIType {
- get {
- Contract.Ensures(Contract.Result<AIType>() != null);
- throw new NotImplementedException();
- }
- }
-
- #endregion
- }
-
- /// <summary>
- /// The type of the arguments to ExprUtil.Match, a poor man's pattern
- /// matching.
- /// </summary>
- public interface IMatchable
- {
- }
-
- //-------------------------------- Types --------------------------------
-
- /// <summary>
- /// Types.
- /// </summary>
- public interface AIType
- {
- }
-
- /// <summary>
- /// Function type constructor.
- /// </summary>
- public sealed class FunctionType : AIType
- {
- /*[Own]*/ private readonly IList/*<Type!>*//*!*/ argTypes;
- /*[Own]*/ private readonly AIType/*!*/ retType;
- [ContractInvariantMethod]
-void ObjectInvariant()
-{
- Contract.Invariant(argTypes != null);
- Contract.Invariant(retType != null);
-}
-
-
- public FunctionType(params AIType[]/*!*/ types){
-Contract.Requires(types != null);
- Contract.Requires(types.Length >= 2);
- AIType type = types[types.Length-1];
- Contract.Assume(type != null);
- this.retType = type;
- ArrayList argTypes = new ArrayList();
- for (int i = 0; i < types.Length-1; i++)
- {
- type = types[i];
- Contract.Assume(type != null);
- argTypes.Add(types);
- }
- this.argTypes = ArrayList.ReadOnly(argTypes);
- }
-
- public IList/*<AIType!>*//*!*/ Arguments
- {
- [Pure][Rep]
- get
- {
- Contract.Ensures(Contract.Result<IList>() != null);
- Contract.Ensures(Contract.Result<IList>().IsReadOnly);
- return argTypes;
- }
- }
-
- public int Arity
- {
- get { return argTypes.Count; }
- }
-
- public AIType/*!*/ ReturnType
- {
- get {Contract.Ensures(Contract.Result<AIType>() != null); return retType; }
- }
-
- /* TODO Do we have the invariant that two functions are equal iff they're the same object.
- public override bool Equals(object o)
- {
- if (o != null && o is FunctionType)
- {
- FunctionType other = (FunctionType) o;
-
- if (Arity == other.Arity
- && ReturnType.Equals(other.ReturnType))
- {
- for (int i = 0; i < Arity; i++)
- {
- if (!argTypes[i].Equals(other.argTypes[i]))
- return false;
- }
- return true;
- }
- else
- return false;
- }
- else
- return false;
- }
- */
- }
-
- //------------------------------ Queries -------------------------------
-
- public enum Answer { Yes, No, Maybe };
-
- /// <summary>
- /// An interface that specifies a queryable object that can answer
- /// whether a predicate holds.
- /// </summary>
- ///
- [ContractClass(typeof(IQueryableContracts))]
- public interface IQueryable
- {
- /// <summary>
- /// Answers the query whether the given predicate holds.
- /// </summary>
- /// <param name="pred">The given predicate.</param>
- /// <returns>Yes, No, or Maybe.</returns>
- Answer CheckPredicate(IExpr/*!*/ pred);
-
- /// <summary>
- /// A simplified interface for disequalities. One can always
- /// implement this by calling CheckPredicate, but it may be
- /// more efficient with this method.
- /// </summary>
- Answer CheckVariableDisequality(IVariable/*!*/ var1, IVariable/*!*/ var2);
- }
- [ContractClassFor(typeof(IQueryable))]
- public abstract class IQueryableContracts : IQueryable {
- #region IQueryable Members
-
- public Answer CheckPredicate(IExpr pred) {
- Contract.Requires(pred != null);
- throw new NotImplementedException();
- }
-
- public Answer CheckVariableDisequality(IVariable var1, IVariable var2) {
- Contract.Requires(var1 != null);
- Contract.Requires(var2 != null);
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
- public static class QueryUtil
- {
- public static Answer Negate(Answer ans)
- {
- switch (ans)
- {
- case Answer.Yes:
- return Answer.No;
- case Answer.No:
- return Answer.Yes;
- default:
- return Answer.Maybe;
- }
- }
- }
-
- //----------------------------- Exceptions -----------------------------
-
- public class CheckedException : System.Exception {
- }
- public class TypeError : CheckedException
- {
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+// This file specifies the expression language used by the Abstract
+// Interpretation Framework.
+//
+// expressions e ::= x variables
+// | f(e1,...,en) uninterpreted functions
+// | \x:t.e lambda expressions
+//
+// types t ::= b user-defined/built-in base types
+// | t1 * ... * tn -> t' function type
+
+namespace Microsoft.AbstractInterpretationFramework
+{
+ using System.Collections;
+ using System;
+ using System.Diagnostics.Contracts;
+
+ //----------------------------- Expressions -----------------------------
+
+ /// <summary>
+ /// An interface for expressions. This expression language is specified
+ /// by interfaces to allow the client to be able to use their existing
+ /// AST nodes as AIF expressions.
+ ///
+ /// This only serves as a place for operations on expressions. Clients
+ /// should implement directly IVariable, IFunApp, ...
+ /// </summary>
+ [ContractClass(typeof(IExprContracts))]
+ public interface IExpr
+ {
+ /// <summary>
+ /// Execute a visit over the expression.
+ /// </summary>
+ /// <param name="visitor">The expression visitor.</param>
+ /// <returns>The result of the visit.</returns>
+ [Pure] object DoVisit(ExprVisitor/*!*/ visitor);
+
+ // TODO: Type checking of the expressions.
+ }
+ [ContractClassFor(typeof(IExpr))]
+ public abstract class IExprContracts:IExpr{
+ #region IExpr Members
+
+public object DoVisit(ExprVisitor visitor)
+{
+ Contract.Requires(visitor != null);
+ throw new System.NotImplementedException();
+}
+
+#endregion
+}
+
+ /// <summary>
+ /// An interface for variables.
+ ///
+ /// This interface should be implemented by the client.
+ /// </summary>
+ [ContractClass(typeof(IVariableContracts))]
+ public interface IVariable : IExpr
+ {
+ string/*!*/ Name { get; } // Each client must define the name for variables
+ }
+ [ContractClassFor(typeof(IVariable))]
+ public abstract class IVariableContracts:IVariable{
+ string IVariable.Name{get{Contract.Ensures(Contract.Result<string>() != null);throw new NotImplementedException();}
+
+ }
+
+ #region IExpr Members
+
+ object IExpr.DoVisit(ExprVisitor visitor) {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// An interface for function applications.
+ ///
+ /// This interface should be implemented by the client.
+ /// </summary>
+ ///
+ [ContractClass(typeof(IFunAppContracts))]
+ public interface IFunApp : IExpr
+ {
+ IFunctionSymbol/*!*/ FunctionSymbol { get; }
+ IList/*<IExpr!>*//*!*/ Arguments
+ {
+ [Pure][Rep] get;
+
+ }
+
+ /// <summary>
+ /// Provides a method to create a new uninterpreted function
+ /// with the same function symbol but with the arguments with
+ /// args.
+ /// </summary>
+ /// <param name="args">The new arguments.</param>
+ /// <returns>A copy of the function with the new arguments.</returns>
+ IFunApp/*!*/ CloneWithArguments(IList/*<IExpr!>*//*!*/ args)
+ //TODO Contract.Requires(this.Arguments.Count == args.Count);
+ ;
+ }
+ [ContractClassFor(typeof(IFunApp))]
+public abstract class IFunAppContracts:IFunApp{
+
+#region IFunApp Members
+
+public IFunctionSymbol FunctionSymbol
+{
+ get {Contract.Ensures(Contract.Result<IFunctionSymbol>() != null);
+ throw new System.NotImplementedException(); }
+}
+
+public IList Arguments
+{
+ get {Contract.Ensures(Contract.Result<IList>() != null);
+ Contract.Ensures(Contract.Result<IList>().IsReadOnly);
+ throw new System.NotImplementedException(); }
+}
+
+public IFunApp CloneWithArguments(IList args)
+{
+ Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+
+
+ throw new System.NotImplementedException();
+}
+
+#endregion
+
+#region IExpr Members
+
+object IExpr.DoVisit(ExprVisitor visitor) {
+ throw new NotImplementedException();
+}
+
+#endregion
+}
+
+ /// <summary>
+ /// An interface for anonymous functions (i.e., lambda expressions)
+ /// </summary>
+ [ContractClass(typeof(IFunctionContracts))]
+ public interface IFunction : IExpr
+ {
+ IVariable/*!*/ Param { get; }
+ AIType/*!*/ ParamType { get; }
+ IExpr/*!*/ Body { get; }
+
+ IFunction/*!*/ CloneWithBody(IExpr/*!*/ body);
+ }
+ [ContractClassFor(typeof(IFunction))]
+ public abstract class IFunctionContracts:IFunction{
+
+ #region IFunction Members
+
+ IVariable IFunction.Param {
+ get {
+ Contract.Ensures(Contract.Result<IVariable>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ AIType IFunction.ParamType {
+ get {
+ Contract.Ensures(Contract.Result<AIType>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ IExpr IFunction.Body {
+ get {
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ IFunction IFunction.CloneWithBody(IExpr body) {
+ Contract.Requires(body != null);
+ Contract.Ensures(Contract.Result<IFunction>() != null);
+ throw new NotImplementedException();
+ }
+
+ #endregion
+
+ #region IExpr Members
+
+ object IExpr.DoVisit(ExprVisitor visitor) {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// An interface representing an expression that at any moment could, in principle, evaluate
+ /// to a different value. That is, the abstract interpreter should treat these IExpr's
+ /// as unknown values. They are used when there is no other IExpr corresponding to the
+ /// expression to be modeled.
+ /// </summary>
+ public interface IUnknown : IExpr {}
+
+ /// <summary>
+ /// An abstract class that provides an interface for expression visitors.
+ /// </summary>
+ [ContractClass(typeof(ExprVisitorContracts))]
+ public abstract class ExprVisitor
+ {
+ public abstract object Default(IExpr/*!*/ expr);
+
+ public virtual object VisitVariable(IVariable/*!*/ var){
+Contract.Requires(var != null);
+ return Default(var);
+ }
+
+ public virtual object VisitFunApp(IFunApp/*!*/ funapp){
+Contract.Requires(funapp != null);
+ return Default(funapp);
+ }
+
+ public virtual object VisitFunction(IFunction/*!*/ fun){
+Contract.Requires(fun != null);
+ return Default(fun);
+ }
+ }
+ [ContractClassFor(typeof(ExprVisitor))]
+ public abstract class ExprVisitorContracts:ExprVisitor{
+ public override object Default(IExpr expr)
+{
+ Contract.Requires(expr != null); throw new NotImplementedException();
+}}
+
+ /// <summary>
+ /// A utility class for dealing with expressions.
+ /// </summary>
+ public sealed class ExprUtil
+ {
+ /// <summary>
+ /// Yield an expression that is 'inexpr' with 'var' replaced by 'subst'.
+ /// </summary>
+ /// <param name="subst">The expression to substitute.</param>
+ /// <param name="var">The variable to substitute for.</param>
+ /// <param name="inexpr">The expression to substitute into.</param>
+ public static IExpr/*!*/ Substitute(IExpr/*!*/ subst, IVariable/*!*/ var, IExpr/*!*/ inexpr){
+Contract.Requires(inexpr != null);
+Contract.Requires(var != null);
+Contract.Requires(subst != null);
+Contract.Ensures(Contract.Result<IExpr>() != null);
+ IExpr result = null;
+
+ if (inexpr is IVariable)
+ {
+ result = inexpr.Equals(var) ? subst : inexpr;
+ }
+ else if (inexpr is IFunApp)
+ {
+ IFunApp/*!*/ funapp = (IFunApp/*!*/)cce.NonNull(inexpr);
+ IList newargs = null;
+
+ var x = new System.Collections.Generic.List<IExpr>();
+ foreach (IExpr arg in funapp.Arguments){
+ x.Add(Substitute(subst,var, arg));
+ }
+ newargs = new ArrayList(x);
+ //newargs = new ArrayList{ IExpr/*!*/ arg in funapp.Arguments; Substitute(subst, var, arg) };
+ result = funapp.CloneWithArguments(newargs);
+ }
+ else if (inexpr is IFunction)
+ {
+ IFunction/*!*/ fun = (IFunction/*!*/)cce.NonNull(inexpr);
+
+ if (fun.Param.Equals(var))
+ result = fun;
+ else
+ result = fun.CloneWithBody(Substitute(subst, var, fun.Body));
+ }
+ else if (inexpr is IUnknown)
+ {
+ result = inexpr;
+ }
+ else
+ {
+ {Contract.Assert(false);throw new cce.UnreachableException();}
+ }
+
+ return result;
+ }
+
+
+ //
+ // Poor man's pattern matching.
+ //
+ // The methods below implement pattern matching for AI expressions.
+ //
+ // Example Usage:
+ // Match(e, Prop.Imp,
+ // (Matcher)delegate (IExpr e) { return Match(e, Prop.And, out x, out y); }
+ // out z)
+ // which sees if 'e' matches Prop.Imp(Prop.And(x,y),z) binding x,y,z to the subtrees.
+ //
+ public delegate bool Matcher(IExpr/*!*/ expr);
+
+ private static IFunApp/*?*/ MatchFunctionSymbol(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f){
+Contract.Requires(f != null);
+Contract.Requires(expr != null);
+ IFunApp app = expr as IFunApp;
+ if (app != null)
+ {
+ if (app.FunctionSymbol.Equals(f))
+ return app;
+ else
+ return null;
+ }
+ else
+ return null;
+ }
+
+ public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, params Matcher[]/*!*/ subs){
+Contract.Requires(subs != null);
+Contract.Requires(f != null);
+Contract.Requires(expr != null);
+ IFunApp app = MatchFunctionSymbol(expr,f);
+ if (app != null)
+ {
+ int i = 0; // Note ***0***
+ foreach(Matcher/*!*/ s in subs){
+Contract.Assert(s != null);
+ if (!s(cce.NonNull((IExpr)app.Arguments[i]))) { return false; }
+ i++;
+ }
+ return true;
+ }
+ else { return false; }
+ }
+
+ // Unary Binding
+ public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, out IExpr arg0, params Matcher[]/*!*/ subs){
+Contract.Requires(subs != null);
+Contract.Requires(f != null);
+Contract.Requires(expr != null);
+ arg0 = null;
+
+ IFunApp app = MatchFunctionSymbol(expr,f);
+ if (app != null)
+ {
+ arg0 = (IExpr/*!*/)cce.NonNull(app.Arguments[0]);
+
+ int i = 1; // Note ***1***
+ foreach(Matcher/*!*/ s in subs){
+Contract.Assert(s != null);
+ if (!s(cce.NonNull((IExpr/*!*/)app.Arguments[i]))) { return false; }
+ i++;
+ }
+ return true;
+ }
+ else { return false; }
+ }
+
+ // Binary Binding
+ public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, Matcher/*!*/ sub0, out IExpr arg1, params Matcher[]/*!*/ subs){
+Contract.Requires(subs != null);
+Contract.Requires(sub0 != null);
+Contract.Requires(f != null);
+Contract.Requires(expr != null);
+ arg1 = null;
+
+ IFunApp app = MatchFunctionSymbol(expr,f);
+ if (app != null)
+ {
+ if (!sub0(cce.NonNull((IExpr/*!*/)app.Arguments[0]))) { return false; }
+
+ arg1 = (IExpr/*!*/)cce.NonNull(app.Arguments[1]);
+
+ int i = 2; // Note ***2***
+ foreach(Matcher/*!*/ s in subs){
+Contract.Assert(s != null);
+ if (!s(cce.NonNull((IExpr)app.Arguments[i]))) { return false; }
+ i++;
+ }
+ return true;
+ }
+ else { return false; }
+ }
+
+ public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, out IExpr arg0, out IExpr arg1, params Matcher[]/*!*/ subs){
+Contract.Requires(subs != null);
+Contract.Requires(f != null);
+Contract.Requires(expr != null);
+ arg0 = null;
+ arg1 = null;
+
+ IFunApp app = MatchFunctionSymbol(expr,f);
+ if (app != null)
+ {
+ arg0 = (IExpr/*!*/)cce.NonNull(app.Arguments[0]);
+ arg1 = (IExpr/*!*/)cce.NonNull(app.Arguments[1]);
+
+ int i = 2; // Note ***2***
+ foreach(Matcher/*!*/ s in subs){
+Contract.Assert(s != null);
+ if (!s(cce.NonNull((IExpr/*!*/)app.Arguments[i]))) { return false; }
+ i++;
+ }
+ return true;
+ }
+ else { return false; }
+ }
+
+ // Ternary Binding
+ public static bool Match(IExpr/*!*/ expr, IFunctionSymbol/*!*/ f, out IExpr arg0, out IExpr arg1, out IExpr arg2, params Matcher[]/*!*/ subs){
+Contract.Requires(subs != null);
+Contract.Requires(f != null);
+Contract.Requires(expr != null);
+ arg0 = null;
+ arg1 = null;
+ arg2 = null;
+
+ IFunApp app = MatchFunctionSymbol(expr,f);
+ if (app != null)
+ {
+ arg0 = (IExpr/*!*/)cce.NonNull(app.Arguments[0]);
+ arg1 = (IExpr/*!*/)cce.NonNull(app.Arguments[1]);
+ arg2 = (IExpr/*!*/)cce.NonNull(app.Arguments[2]);
+
+ int i = 3; // Note ***3***
+ foreach(Matcher/*!*/ s in subs){
+Contract.Assert(s != null);
+ if (!s(cce.NonNull((IExpr/*!*/)app.Arguments[i]))) { return false; }
+ i++;
+ }
+ return true;
+ }
+ else { return false; }
+ }
+
+ /// <summary>
+ /// Not intended to be instantiated.
+ /// </summary>
+ private ExprUtil() { }
+ }
+
+ //------------------------------ Symbols --------------------------------
+
+ /// <summary>
+ /// An interface for function symbols. Constants are represented by
+ /// 0-ary function symbols.
+ ///
+ /// This interface should be implemented by abstract domains, but client
+ /// expressions need keep track of function symbols.
+ /// </summary>
+ [ContractClass(typeof(IFunctionSymbolContracts))]
+ public interface IFunctionSymbol
+ {
+ AIType/*!*/ AIType { [Rep][ResultNotNewlyAllocated]
+ get; }
+ }
+ [ContractClassFor(typeof(IFunctionSymbol))]
+ public abstract class IFunctionSymbolContracts:IFunctionSymbol{
+ #region IFunctionSymbol Members
+
+ AIType IFunctionSymbol.AIType {
+ get {
+ Contract.Ensures(Contract.Result<AIType>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// The type of the arguments to ExprUtil.Match, a poor man's pattern
+ /// matching.
+ /// </summary>
+ public interface IMatchable
+ {
+ }
+
+ //-------------------------------- Types --------------------------------
+
+ /// <summary>
+ /// Types.
+ /// </summary>
+ public interface AIType
+ {
+ }
+
+ /// <summary>
+ /// Function type constructor.
+ /// </summary>
+ public sealed class FunctionType : AIType
+ {
+ /*[Own]*/ private readonly IList/*<Type!>*//*!*/ argTypes;
+ /*[Own]*/ private readonly AIType/*!*/ retType;
+ [ContractInvariantMethod]
+void ObjectInvariant()
+{
+ Contract.Invariant(argTypes != null);
+ Contract.Invariant(retType != null);
+}
+
+
+ public FunctionType(params AIType[]/*!*/ types){
+Contract.Requires(types != null);
+ Contract.Requires(types.Length >= 2);
+ AIType type = types[types.Length-1];
+ Contract.Assume(type != null);
+ this.retType = type;
+ ArrayList argTypes = new ArrayList();
+ for (int i = 0; i < types.Length-1; i++)
+ {
+ type = types[i];
+ Contract.Assume(type != null);
+ argTypes.Add(types);
+ }
+ this.argTypes = ArrayList.ReadOnly(argTypes);
+ }
+
+ public IList/*<AIType!>*//*!*/ Arguments
+ {
+ [Pure][Rep]
+ get
+ {
+ Contract.Ensures(Contract.Result<IList>() != null);
+ Contract.Ensures(Contract.Result<IList>().IsReadOnly);
+ return argTypes;
+ }
+ }
+
+ public int Arity
+ {
+ get { return argTypes.Count; }
+ }
+
+ public AIType/*!*/ ReturnType
+ {
+ get {Contract.Ensures(Contract.Result<AIType>() != null); return retType; }
+ }
+
+ /* TODO Do we have the invariant that two functions are equal iff they're the same object.
+ public override bool Equals(object o)
+ {
+ if (o != null && o is FunctionType)
+ {
+ FunctionType other = (FunctionType) o;
+
+ if (Arity == other.Arity
+ && ReturnType.Equals(other.ReturnType))
+ {
+ for (int i = 0; i < Arity; i++)
+ {
+ if (!argTypes[i].Equals(other.argTypes[i]))
+ return false;
+ }
+ return true;
+ }
+ else
+ return false;
+ }
+ else
+ return false;
+ }
+ */
+ }
+
+ //------------------------------ Queries -------------------------------
+
+ public enum Answer { Yes, No, Maybe };
+
+ /// <summary>
+ /// An interface that specifies a queryable object that can answer
+ /// whether a predicate holds.
+ /// </summary>
+ ///
+ [ContractClass(typeof(IQueryableContracts))]
+ public interface IQueryable
+ {
+ /// <summary>
+ /// Answers the query whether the given predicate holds.
+ /// </summary>
+ /// <param name="pred">The given predicate.</param>
+ /// <returns>Yes, No, or Maybe.</returns>
+ Answer CheckPredicate(IExpr/*!*/ pred);
+
+ /// <summary>
+ /// A simplified interface for disequalities. One can always
+ /// implement this by calling CheckPredicate, but it may be
+ /// more efficient with this method.
+ /// </summary>
+ Answer CheckVariableDisequality(IVariable/*!*/ var1, IVariable/*!*/ var2);
+ }
+ [ContractClassFor(typeof(IQueryable))]
+ public abstract class IQueryableContracts : IQueryable {
+ #region IQueryable Members
+
+ public Answer CheckPredicate(IExpr pred) {
+ Contract.Requires(pred != null);
+ throw new NotImplementedException();
+ }
+
+ public Answer CheckVariableDisequality(IVariable var1, IVariable var2) {
+ Contract.Requires(var1 != null);
+ Contract.Requires(var2 != null);
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ public static class QueryUtil
+ {
+ public static Answer Negate(Answer ans)
+ {
+ switch (ans)
+ {
+ case Answer.Yes:
+ return Answer.No;
+ case Answer.No:
+ return Answer.Yes;
+ default:
+ return Answer.Maybe;
+ }
+ }
+ }
+
+ //----------------------------- Exceptions -----------------------------
+
+ public class CheckedException : System.Exception {
+ }
+ public class TypeError : CheckedException
+ {
+ }
+}
diff --git a/Source/AIFramework/Functional.cs b/Source/AIFramework/Functional.cs
index 3b8237bf..51d8562a 100644
--- a/Source/AIFramework/Functional.cs
+++ b/Source/AIFramework/Functional.cs
@@ -1,430 +1,430 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.AbstractInterpretationFramework.Collections {
- using System.Collections;
-
- /// <summary>Represents a functional collection of key/value pairs.</summary>
- /// <filterpriority>2</filterpriority>
- [ContractClass(typeof(IFunctionalMapContracts))]
- public interface IFunctionalMap : System.Collections.ICollection, System.Collections.IEnumerable {
- /// <summary>Adds an element with the provided key and value to the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
- /// <param name="value">The <see cref="T:System.Object" /> to use as the value of the element to add. </param>
- /// <param name="key">The <see cref="T:System.Object" /> to use as the key of the element to add. </param>
- /// <filterpriority>2</filterpriority>
- IFunctionalMap/*!*/ Add(object/*!*/ key, object value);
-
- /// <summary>
- /// Set the value of the key (that is already in the map)
- /// </summary>
- IFunctionalMap/*!*/ Set(object/*!*/ key, object value);
-
- /// <summary>Determines whether the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" /> contains an element with the specified key.</summary>
- /// <returns>true if the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" /> contains an element with the key; otherwise, false.</returns>
- /// <param name="key">The key to locate in the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />. </param>
- /// <filterpriority>2</filterpriority>
- [Pure]
- bool Contains(object/*!*/ key);
-
- /// <summary>Returns an <see cref="T:System.Collections.IDictionaryEnumerator" /> for the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
- /// <returns>An <see cref="T:System.Collections.IDictionaryEnumerator" /> for the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</returns>
- /// <filterpriority>2</filterpriority>
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- new System.Collections.IDictionaryEnumerator GetEnumerator();
-
- /// <summary>Gets an <see cref="T:System.Collections.ICollection" /> containing the keys of the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
- /// <returns>An <see cref="T:System.Collections.ICollection" /> containing the keys of the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</returns>
- /// <filterpriority>2</filterpriority>
- System.Collections.ICollection Keys {
- get;
- }
-
- /// <summary>Removes the element with the specified key from the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
- /// <param name="key">The key of the element to remove. </param>
- /// <filterpriority>2</filterpriority>
- IFunctionalMap/*!*/ Remove(object/*!*/ key);
-
- /// <summary>Gets an <see cref="T:System.Collections.ICollection" /> containing the values in the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
- /// <returns>An <see cref="T:System.Collections.ICollection" /> containing the values in the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</returns>
- /// <filterpriority>2</filterpriority>
- System.Collections.ICollection Values {
- get;
- }
-
- object this[object/*!*/ key] {
- get; /*set;*/
- }
- }
- [ContractClassFor(typeof(IFunctionalMap))]
- public abstract class IFunctionalMapContracts : IFunctionalMap {
-
- #region IFunctionalMap Members
-
- IFunctionalMap IFunctionalMap.Add(object key, object value) {
- Contract.Requires(key != null);
- Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
-
- throw new System.NotImplementedException();
- }
-
- IFunctionalMap IFunctionalMap.Set(object key, object value) {
- Contract.Requires(key != null);
- Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
-
- throw new System.NotImplementedException();
- }
-
- bool IFunctionalMap.Contains(object key) {
- Contract.Requires(key != null);
-
- throw new System.NotImplementedException();
- }
-
- IDictionaryEnumerator IFunctionalMap.GetEnumerator() {
- throw new System.NotImplementedException();
- }
-
- ICollection IFunctionalMap.Keys {
- get {
- throw new System.NotImplementedException();
- }
- }
-
- IFunctionalMap IFunctionalMap.Remove(object key) {
- Contract.Requires(key != null);
- Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
-
- throw new System.NotImplementedException();
- }
-
- ICollection IFunctionalMap.Values {
- get {
- throw new System.NotImplementedException();
- }
- }
-
- object IFunctionalMap.this[object key] {
- get {
- Contract.Requires(key != null);
- throw new System.NotImplementedException();
- }
- }
-
- #endregion
-
- #region ICollection Members
-
- void ICollection.CopyTo(System.Array array, int index) {
- throw new System.NotImplementedException();
- }
-
- int ICollection.Count {
- get {
- throw new System.NotImplementedException();
- }
- }
-
- bool ICollection.IsSynchronized {
- get {
- throw new System.NotImplementedException();
- }
- }
-
- object ICollection.SyncRoot {
- get {
- throw new System.NotImplementedException();
- }
- }
-
- #endregion
-
- #region IEnumerable Members
-
- IEnumerator IEnumerable.GetEnumerator() {
- throw new System.NotImplementedException();
- }
-
- #endregion
- }
-
-
-
- /// <summary>
- /// An implementation of the
- /// <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />
- /// interface with a <see cref="T:System.Collections.Hashtable" /> as the backing store.
- /// </summary>
- class FunctionalHashtable : IFunctionalMap {
- private readonly Hashtable/*!*/ h;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(h != null);
- }
-
-
- /// <summary>
- /// Cannot directly construct an instance of a FunctionalHashtbl.
- /// </summary>
- private FunctionalHashtable() {
- this.h = new Hashtable();
- // base();
- }
-
- /// <summary>
- /// Cannot directly construct an instance of a FunctionalHashtbl.
- /// </summary>
- private FunctionalHashtable(Hashtable/*!*/ h) {
- Contract.Requires(h != null);
- this.h = h;
- // base();
- }
-
- private static readonly IFunctionalMap/*!*/ empty = new FunctionalHashtable();
- public static IFunctionalMap/*!*/ Empty {
- get {
- Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
- return empty;
- }
- }
-
- public IFunctionalMap/*!*/ Add(object/*!*/ key, object value) {
- //Contract.Requires(key != null);
- Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
- Hashtable r = h.Clone() as Hashtable;
- Contract.Assume(r != null);
- r.Add(key, value);
- return new FunctionalHashtable(r);
- }
-
- public IFunctionalMap/*!*/ Set(object/*!*/ key, object value) {
- //Contract.Requires(key != null);
- Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
- Hashtable r = h.Clone() as Hashtable;
-
- Contract.Assume(r != null);
- Contract.Assert(this.Contains(key)); // The entry must be defined
-
- r[key] = value;
- return new FunctionalHashtable(r);
- }
-
- [Pure]
- public bool Contains(object/*!*/ key) {
- //Contract.Requires(key != null);
- return h.Contains(key);
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- IEnumerator/*!*/ IEnumerable.GetEnumerator() {
- Contract.Ensures(Contract.Result<IEnumerator>() != null);
-
- return h.GetEnumerator();
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- IDictionaryEnumerator IFunctionalMap.GetEnumerator() {
- return h.GetEnumerator();
- }
-
- public ICollection Keys {
- get {
- return h.Keys;
- }
- }
-
- public IFunctionalMap/*!*/ Remove(object/*!*/ key) {
- //Contract.Requires(key != null);
- Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
- Hashtable r = h.Clone() as Hashtable;
- Contract.Assume(r != null);
- r.Remove(key);
- return new FunctionalHashtable(r);
- }
-
- public ICollection Values {
- get {
- return h.Values;
- }
- }
-
-
- public object this[object/*!*/ key] {
- get {
- //Contract.Requires(key != null);
- return h[key];
- }
- }
-
- public int Count {
- [Pure]
- get {
- return h.Count;
- }
- }
-
- public bool IsSynchronized {
- [Pure]
- get {
- return h.IsSynchronized;
- }
- }
-
- public object/*!*/ SyncRoot {
- [Pure]
- get {
- Contract.Ensures(Contract.Result<object>() != null);
- return h.SyncRoot;
- }
- }
-
- public void CopyTo(System.Array/*!*/ a, int index) {
- //Contract.Requires(a != null);
- h.CopyTo(a, index);
- }
- }
-
- public struct Pair/*<T1,T2>*/
- {
- private object first;
- private object second;
-
- public object First {
- get {
- return first;
- }
- }
- public object Second {
- get {
- return second;
- }
- }
-
- public Pair(object first, object second) {
- this.first = first;
- this.second = second;
- }
-
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is Pair))
- return false;
-
- Pair other = (Pair)obj;
- return object.Equals(this.first, other.first) && object.Equals(this.second, other.second);
- }
-
- public override int GetHashCode() {
- int h = this.first == null ? 0 : this.first.GetHashCode();
- h ^= this.second == null ? 0 : this.second.GetHashCode();
- return h;
- }
- }
-}
-
-
-namespace Microsoft.AbstractInterpretationFramework.Collections.Generic {
- using System.Collections.Generic;
-
- public struct Pair<T1, T2> {
- private T1 first;
- private T2 second;
-
- public T1 First {
- get {
- return first;
- }
- }
- public T2 Second {
- get {
- return second;
- }
- }
-
- public Pair(T1 first, T2 second) {
- this.first = first;
- this.second = second;
- }
-
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is Pair<T1, T2>))
- return false;
-
- Pair<T1, T2> other = (Pair<T1, T2>)obj;
- return object.Equals(this.first, other.first) && object.Equals(this.second, other.second);
- }
-
- public override int GetHashCode() {
- int h = this.first == null ? 0 : this.first.GetHashCode();
- h ^= this.second == null ? 0 : this.second.GetHashCode();
- return h;
- }
-
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return string.Format("({0},{1})", first, second);
- }
- }
-
- public struct Triple<T1, T2, T3> {
- private T1 first;
- private T2 second;
- private T3 third;
-
- public T1 First {
- get {
- return first;
- }
- }
- public T2 Second {
- get {
- return second;
- }
- }
- public T3 Third {
- get {
- return third;
- }
- }
-
- public Triple(T1 first, T2 second, T3 third) {
- this.first = first;
- this.second = second;
- this.third = third;
- }
-
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is Triple<T1, T2, T3>))
- return false;
-
- Triple<T1, T2, T3> other = (Triple<T1, T2, T3>)obj;
- return object.Equals(this.first, other.first) && object.Equals(this.second, other.second) && object.Equals(this.third, other.third);
- }
-
- public override int GetHashCode() {
- int h = this.first == null ? 0 : this.first.GetHashCode();
- h ^= this.second == null ? 0 : this.second.GetHashCode();
- h ^= this.third == null ? 0 : this.third.GetHashCode();
- return h;
- }
-
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return string.Format("({0},{1},{2})", first, second, third);
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.AbstractInterpretationFramework.Collections {
+ using System.Collections;
+
+ /// <summary>Represents a functional collection of key/value pairs.</summary>
+ /// <filterpriority>2</filterpriority>
+ [ContractClass(typeof(IFunctionalMapContracts))]
+ public interface IFunctionalMap : System.Collections.ICollection, System.Collections.IEnumerable {
+ /// <summary>Adds an element with the provided key and value to the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
+ /// <param name="value">The <see cref="T:System.Object" /> to use as the value of the element to add. </param>
+ /// <param name="key">The <see cref="T:System.Object" /> to use as the key of the element to add. </param>
+ /// <filterpriority>2</filterpriority>
+ IFunctionalMap/*!*/ Add(object/*!*/ key, object value);
+
+ /// <summary>
+ /// Set the value of the key (that is already in the map)
+ /// </summary>
+ IFunctionalMap/*!*/ Set(object/*!*/ key, object value);
+
+ /// <summary>Determines whether the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" /> contains an element with the specified key.</summary>
+ /// <returns>true if the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" /> contains an element with the key; otherwise, false.</returns>
+ /// <param name="key">The key to locate in the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />. </param>
+ /// <filterpriority>2</filterpriority>
+ [Pure]
+ bool Contains(object/*!*/ key);
+
+ /// <summary>Returns an <see cref="T:System.Collections.IDictionaryEnumerator" /> for the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
+ /// <returns>An <see cref="T:System.Collections.IDictionaryEnumerator" /> for the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</returns>
+ /// <filterpriority>2</filterpriority>
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ new System.Collections.IDictionaryEnumerator GetEnumerator();
+
+ /// <summary>Gets an <see cref="T:System.Collections.ICollection" /> containing the keys of the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
+ /// <returns>An <see cref="T:System.Collections.ICollection" /> containing the keys of the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</returns>
+ /// <filterpriority>2</filterpriority>
+ System.Collections.ICollection Keys {
+ get;
+ }
+
+ /// <summary>Removes the element with the specified key from the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
+ /// <param name="key">The key of the element to remove. </param>
+ /// <filterpriority>2</filterpriority>
+ IFunctionalMap/*!*/ Remove(object/*!*/ key);
+
+ /// <summary>Gets an <see cref="T:System.Collections.ICollection" /> containing the values in the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</summary>
+ /// <returns>An <see cref="T:System.Collections.ICollection" /> containing the values in the <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />.</returns>
+ /// <filterpriority>2</filterpriority>
+ System.Collections.ICollection Values {
+ get;
+ }
+
+ object this[object/*!*/ key] {
+ get; /*set;*/
+ }
+ }
+ [ContractClassFor(typeof(IFunctionalMap))]
+ public abstract class IFunctionalMapContracts : IFunctionalMap {
+
+ #region IFunctionalMap Members
+
+ IFunctionalMap IFunctionalMap.Add(object key, object value) {
+ Contract.Requires(key != null);
+ Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
+
+ throw new System.NotImplementedException();
+ }
+
+ IFunctionalMap IFunctionalMap.Set(object key, object value) {
+ Contract.Requires(key != null);
+ Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
+
+ throw new System.NotImplementedException();
+ }
+
+ bool IFunctionalMap.Contains(object key) {
+ Contract.Requires(key != null);
+
+ throw new System.NotImplementedException();
+ }
+
+ IDictionaryEnumerator IFunctionalMap.GetEnumerator() {
+ throw new System.NotImplementedException();
+ }
+
+ ICollection IFunctionalMap.Keys {
+ get {
+ throw new System.NotImplementedException();
+ }
+ }
+
+ IFunctionalMap IFunctionalMap.Remove(object key) {
+ Contract.Requires(key != null);
+ Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
+
+ throw new System.NotImplementedException();
+ }
+
+ ICollection IFunctionalMap.Values {
+ get {
+ throw new System.NotImplementedException();
+ }
+ }
+
+ object IFunctionalMap.this[object key] {
+ get {
+ Contract.Requires(key != null);
+ throw new System.NotImplementedException();
+ }
+ }
+
+ #endregion
+
+ #region ICollection Members
+
+ void ICollection.CopyTo(System.Array array, int index) {
+ throw new System.NotImplementedException();
+ }
+
+ int ICollection.Count {
+ get {
+ throw new System.NotImplementedException();
+ }
+ }
+
+ bool ICollection.IsSynchronized {
+ get {
+ throw new System.NotImplementedException();
+ }
+ }
+
+ object ICollection.SyncRoot {
+ get {
+ throw new System.NotImplementedException();
+ }
+ }
+
+ #endregion
+
+ #region IEnumerable Members
+
+ IEnumerator IEnumerable.GetEnumerator() {
+ throw new System.NotImplementedException();
+ }
+
+ #endregion
+ }
+
+
+
+ /// <summary>
+ /// An implementation of the
+ /// <see cref="T:Microsoft.AbstractInterpretationFramework.Collections.IFunctionalMap" />
+ /// interface with a <see cref="T:System.Collections.Hashtable" /> as the backing store.
+ /// </summary>
+ class FunctionalHashtable : IFunctionalMap {
+ private readonly Hashtable/*!*/ h;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(h != null);
+ }
+
+
+ /// <summary>
+ /// Cannot directly construct an instance of a FunctionalHashtbl.
+ /// </summary>
+ private FunctionalHashtable() {
+ this.h = new Hashtable();
+ // base();
+ }
+
+ /// <summary>
+ /// Cannot directly construct an instance of a FunctionalHashtbl.
+ /// </summary>
+ private FunctionalHashtable(Hashtable/*!*/ h) {
+ Contract.Requires(h != null);
+ this.h = h;
+ // base();
+ }
+
+ private static readonly IFunctionalMap/*!*/ empty = new FunctionalHashtable();
+ public static IFunctionalMap/*!*/ Empty {
+ get {
+ Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
+ return empty;
+ }
+ }
+
+ public IFunctionalMap/*!*/ Add(object/*!*/ key, object value) {
+ //Contract.Requires(key != null);
+ Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
+ Hashtable r = h.Clone() as Hashtable;
+ Contract.Assume(r != null);
+ r.Add(key, value);
+ return new FunctionalHashtable(r);
+ }
+
+ public IFunctionalMap/*!*/ Set(object/*!*/ key, object value) {
+ //Contract.Requires(key != null);
+ Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
+ Hashtable r = h.Clone() as Hashtable;
+
+ Contract.Assume(r != null);
+ Contract.Assert(this.Contains(key)); // The entry must be defined
+
+ r[key] = value;
+ return new FunctionalHashtable(r);
+ }
+
+ [Pure]
+ public bool Contains(object/*!*/ key) {
+ //Contract.Requires(key != null);
+ return h.Contains(key);
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ IEnumerator/*!*/ IEnumerable.GetEnumerator() {
+ Contract.Ensures(Contract.Result<IEnumerator>() != null);
+
+ return h.GetEnumerator();
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ IDictionaryEnumerator IFunctionalMap.GetEnumerator() {
+ return h.GetEnumerator();
+ }
+
+ public ICollection Keys {
+ get {
+ return h.Keys;
+ }
+ }
+
+ public IFunctionalMap/*!*/ Remove(object/*!*/ key) {
+ //Contract.Requires(key != null);
+ Contract.Ensures(Contract.Result<IFunctionalMap>() != null);
+ Hashtable r = h.Clone() as Hashtable;
+ Contract.Assume(r != null);
+ r.Remove(key);
+ return new FunctionalHashtable(r);
+ }
+
+ public ICollection Values {
+ get {
+ return h.Values;
+ }
+ }
+
+
+ public object this[object/*!*/ key] {
+ get {
+ //Contract.Requires(key != null);
+ return h[key];
+ }
+ }
+
+ public int Count {
+ [Pure]
+ get {
+ return h.Count;
+ }
+ }
+
+ public bool IsSynchronized {
+ [Pure]
+ get {
+ return h.IsSynchronized;
+ }
+ }
+
+ public object/*!*/ SyncRoot {
+ [Pure]
+ get {
+ Contract.Ensures(Contract.Result<object>() != null);
+ return h.SyncRoot;
+ }
+ }
+
+ public void CopyTo(System.Array/*!*/ a, int index) {
+ //Contract.Requires(a != null);
+ h.CopyTo(a, index);
+ }
+ }
+
+ public struct Pair/*<T1,T2>*/
+ {
+ private object first;
+ private object second;
+
+ public object First {
+ get {
+ return first;
+ }
+ }
+ public object Second {
+ get {
+ return second;
+ }
+ }
+
+ public Pair(object first, object second) {
+ this.first = first;
+ this.second = second;
+ }
+
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is Pair))
+ return false;
+
+ Pair other = (Pair)obj;
+ return object.Equals(this.first, other.first) && object.Equals(this.second, other.second);
+ }
+
+ public override int GetHashCode() {
+ int h = this.first == null ? 0 : this.first.GetHashCode();
+ h ^= this.second == null ? 0 : this.second.GetHashCode();
+ return h;
+ }
+ }
+}
+
+
+namespace Microsoft.AbstractInterpretationFramework.Collections.Generic {
+ using System.Collections.Generic;
+
+ public struct Pair<T1, T2> {
+ private T1 first;
+ private T2 second;
+
+ public T1 First {
+ get {
+ return first;
+ }
+ }
+ public T2 Second {
+ get {
+ return second;
+ }
+ }
+
+ public Pair(T1 first, T2 second) {
+ this.first = first;
+ this.second = second;
+ }
+
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is Pair<T1, T2>))
+ return false;
+
+ Pair<T1, T2> other = (Pair<T1, T2>)obj;
+ return object.Equals(this.first, other.first) && object.Equals(this.second, other.second);
+ }
+
+ public override int GetHashCode() {
+ int h = this.first == null ? 0 : this.first.GetHashCode();
+ h ^= this.second == null ? 0 : this.second.GetHashCode();
+ return h;
+ }
+
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return string.Format("({0},{1})", first, second);
+ }
+ }
+
+ public struct Triple<T1, T2, T3> {
+ private T1 first;
+ private T2 second;
+ private T3 third;
+
+ public T1 First {
+ get {
+ return first;
+ }
+ }
+ public T2 Second {
+ get {
+ return second;
+ }
+ }
+ public T3 Third {
+ get {
+ return third;
+ }
+ }
+
+ public Triple(T1 first, T2 second, T3 third) {
+ this.first = first;
+ this.second = second;
+ this.third = third;
+ }
+
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is Triple<T1, T2, T3>))
+ return false;
+
+ Triple<T1, T2, T3> other = (Triple<T1, T2, T3>)obj;
+ return object.Equals(this.first, other.first) && object.Equals(this.second, other.second) && object.Equals(this.third, other.third);
+ }
+
+ public override int GetHashCode() {
+ int h = this.first == null ? 0 : this.first.GetHashCode();
+ h ^= this.second == null ? 0 : this.second.GetHashCode();
+ h ^= this.third == null ? 0 : this.third.GetHashCode();
+ return h;
+ }
+
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return string.Format("({0},{1},{2})", first, second, third);
+ }
+ }
+}
diff --git a/Source/AIFramework/Lattice.cs b/Source/AIFramework/Lattice.cs
index ab10be9a..1796f1f6 100644
--- a/Source/AIFramework/Lattice.cs
+++ b/Source/AIFramework/Lattice.cs
@@ -1,960 +1,960 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System;
- using System.Diagnostics.Contracts;
- using System.Collections;
- using G = System.Collections.Generic;
- using System.Diagnostics;
- using Microsoft.AbstractInterpretationFramework.Collections;
- using Microsoft.Boogie;
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System;
+ using System.Diagnostics.Contracts;
+ using System.Collections;
+ using G = System.Collections.Generic;
+ using System.Diagnostics;
+ using Microsoft.AbstractInterpretationFramework.Collections;
+ using Microsoft.Boogie;
+
using ArraySet = Microsoft.Boogie.GSet<object>;
- using IMutableSet = Microsoft.Boogie.GSet<object>;
- using HashSet = Microsoft.Boogie.GSet<object>;
- using ISet = Microsoft.Boogie.GSet<object>;
- using Set = Microsoft.Boogie.GSet<object>;
-
-
- /// <summary>
- /// Specifies the operations (e.g., join) on a mathematical lattice that depend
- /// only on the elements of the lattice.
- /// </summary>
- [ContractClass(typeof(MathematicalLatticeContracts))]
- public abstract class MathematicalLattice {
- #region Element
- /// <summary>
- /// An element of the lattice. This class should be derived from in any
- /// implementation of MathematicalLattice.
- /// </summary>
- [ContractClass(typeof(ElementContracts))]
- public abstract class Element : System.ICloneable {
- /// <summary>
- /// Print out a debug-useful representation of the internal data structure of the lattice element.
- /// </summary>
- public virtual void Dump(string/*!*/ msg) {
- Contract.Requires(msg != null);
- System.Console.WriteLine("Dump({0}) = {1}", msg, this);
- }
-
- public abstract Element/*!*/ Clone();
- object/*!*/ System.ICloneable.Clone() {
- return this.Clone();
- }
-
- public abstract G.ICollection<IVariable/*!*/>/*!*/ FreeVariables();
-
- }
- [ContractClassFor(typeof(Element))]
- public abstract class ElementContracts : Element {
- public override Element Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
-
- }
-
- public override System.Collections.Generic.ICollection<IVariable> FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<G.ICollection<IVariable>>()));
- Contract.Ensures(Contract.Result<System.Collections.Generic.ICollection<IVariable>>().IsReadOnly);
- throw new System.NotImplementedException();
- }
- }
- #endregion
-
- public abstract Element/*!*/ Top {
- get;
- }
- public abstract Element/*!*/ Bottom {
- get;
- }
-
- public abstract bool IsTop(Element/*!*/ e);
- public abstract bool IsBottom(Element/*!*/ e);
-
- /// <summary>
- /// Returns true if a &lt;= this.
- /// </summary>
- protected abstract bool AtMost(Element/*!*/ a, Element/*!*/ b);
- /* The following cases are handled elsewhere and need not be considered in subclass. */
- // requires a.GetType() == b.GetType();
- // requires ! a.IsTop;
- // requires ! a.IsBottom;
- // requires ! b.IsTop;
- // requires ! b.IsBottom;
-
-
- protected Answer TrivialLowerThan(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- if (a.GetType() != b.GetType()) {
- throw new System.InvalidOperationException(
- "operands to <= must be of same Element type"
- );
- }
- if (IsBottom(a)) {
- return Answer.Yes;
- }
- if (IsTop(b)) {
- return Answer.Yes;
- }
- if (IsTop(a)) {
- return Answer.No;
- }
- if (IsBottom(b)) {
- return Answer.No;
- }
-
- return Answer.Maybe;
- }
-
- // Is 'a' better information than 'b'?
- //
- public bool LowerThan(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Answer ans = TrivialLowerThan(a, b);
- return ans != Answer.Maybe ? ans == Answer.Yes : AtMost(a, b);
- }
-
- // Is 'a' worse information than 'b'?
- //
- public bool HigherThan(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- return LowerThan(b, a);
- }
-
- // Are 'a' and 'b' equivalent?
- //
- public bool Equivalent(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- return LowerThan(a, b) && LowerThan(b, a);
- }
-
- public abstract Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b);
- /* The following cases are handled elsewhere and need not be considered in subclass. */
- // requires a.GetType() == b.GetType();
- // requires ! a.IsTop;
- // requires ! a.IsBottom;
- // requires ! b.IsTop;
- // requires ! b.IsBottom;
-
-
- protected Element/*?*/ TrivialJoin(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- if (a.GetType() != b.GetType()) {
- throw new System.InvalidOperationException(
- "operands to Join must be of same Lattice.Element type"
- );
- }
- if (IsTop(a)) {
- return a;
- }
- if (IsTop(b)) {
- return b;
- }
- if (IsBottom(a)) {
- return b;
- }
- if (IsBottom(b)) {
- return a;
- }
-
- return null;
- }
-
- public Element/*!*/ Join(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Element/*?*/ r = TrivialJoin(a, b);
- return r != null ? r : NontrivialJoin(a, b);
- }
-
- public abstract Element/*!*/ NontrivialMeet(Element/*!*/ a, Element/*!*/ b)
- /* The following cases are handled elsewhere and need not be considered in subclass. */
- // requires a.GetType() == b.GetType();
- // requires ! a.IsTop;
- // requires ! a.IsBottom;
- // requires ! b.IsTop;
- // requires ! b.IsBottom;
- ;
-
- protected Element/*?*/ TrivialMeet(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- if (a.GetType() != b.GetType()) {
- throw new System.InvalidOperationException(
- "operands to Meet must be of same Lattice.Element type"
- );
- }
- if (IsTop(a)) {
- return b;
- }
- if (IsTop(b)) {
- return a;
- }
- if (IsBottom(a)) {
- return a;
- }
- if (IsBottom(b)) {
- return b;
- }
-
- return null;
- }
-
- public Element/*!*/ Meet(Element/*!*/ a, Element/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Element/*?*/ r = TrivialMeet(a, b);
- return r != null ? r : NontrivialMeet(a, b);
- }
-
- public abstract Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b);
-
- public virtual void Validate() {
- Debug.Assert(IsTop(Top));
- Debug.Assert(IsBottom(Bottom));
- Debug.Assert(!IsBottom(Top));
- Debug.Assert(!IsTop(Bottom));
-
- Debug.Assert(LowerThan(Top, Top));
- Debug.Assert(LowerThan(Bottom, Top));
- Debug.Assert(LowerThan(Bottom, Bottom));
-
- Debug.Assert(IsTop(Join(Top, Top)));
- Debug.Assert(IsBottom(Join(Bottom, Bottom)));
- }
- }
- [ContractClassFor(typeof(MathematicalLattice))]
- public abstract class MathematicalLatticeContracts : MathematicalLattice {
- public override MathematicalLattice.Element Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
- }
-
- public override MathematicalLattice.Element Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
- }
-
- public override bool IsTop(MathematicalLattice.Element e) {
- Contract.Requires(e != null);
- throw new NotImplementedException();
- }
-
- public override bool IsBottom(MathematicalLattice.Element e) {
- Contract.Requires(e != null);
- throw new NotImplementedException();
- }
-
- protected override bool AtMost(MathematicalLattice.Element a, MathematicalLattice.Element b) {
- Contract.Requires(a != null);
- Contract.Requires(b != null);
- throw new NotImplementedException();
- }
-
- public override MathematicalLattice.Element NontrivialJoin(MathematicalLattice.Element a, MathematicalLattice.Element b) {
- Contract.Requires(a != null);
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
-
- public override MathematicalLattice.Element NontrivialMeet(MathematicalLattice.Element a, MathematicalLattice.Element b) {
- Contract.Requires(a != null);
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
-
- public override MathematicalLattice.Element Widen(MathematicalLattice.Element a, MathematicalLattice.Element b) {
- Contract.Requires(a != null);
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
- }
-
-
- /// <summary>
- /// Provides an abstract interface for the operations of a lattice specific
- /// to abstract interpretation (i.e., that deals with the expression language).
- /// </summary>
- [ContractClass(typeof(LatticeContracts))]
- public abstract class Lattice : MathematicalLattice {
- internal readonly IValueExprFactory/*!*/ valueExprFactory;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(valueExprFactory != null);
- }
-
-
- public Lattice(IValueExprFactory/*!*/ valueExprFactory) {
- Contract.Requires(valueExprFactory != null);
- this.valueExprFactory = valueExprFactory;
- // base();
- }
-
- #region Primitives that commands translate into
-
- public abstract Element/*!*/ Eliminate(Element/*!*/ e, IVariable/*!*/ variable);
-
- public abstract Element/*!*/ Rename(Element/*!*/ e, IVariable/*!*/ oldName, IVariable/*!*/ newName);
-
- public abstract Element/*!*/ Constrain(Element/*!*/ e, IExpr/*!*/ expr);
-
- #endregion
-
-
- // TODO keep this?
- // public Element! Eliminate(Element! e, VariableSeq! variables)
- // {
- // Lattice.Element result = e;
- // foreach (IVariable var in variables)
- // {
- // result = this.Eliminate(result, var);
- // }
- // return result;
- // }
-
-
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- // Note!
- //
- // Concrete classes that implement Lattice must implement one of the AtMost
- // overloads. We provide here a default implementation for one given a "real"
- // implementation of the other. Otherwise, there will be an infinite loop!
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- protected override bool AtMost(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires(b != null);
- //Contract.Requires(a != null);
- return AtMost(a, IdentityCombineNameMap.Map, b, IdentityCombineNameMap.Map);
- }
-
- protected virtual bool AtMost(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- Contract.Requires(bToResult != null);
- Contract.Requires(b != null);
- Contract.Requires(aToResult != null);
- Contract.Requires(a != null);
- return AtMost(ApplyCombineNameMap(a, aToResult), ApplyCombineNameMap(b, bToResult));
- }
-
- public bool LowerThan(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- Contract.Requires(bToResult != null);
- Contract.Requires(b != null);
- Contract.Requires(aToResult != null);
- Contract.Requires(a != null);
- Answer ans = TrivialLowerThan(a, b);
- return ans != Answer.Maybe ? ans == Answer.Yes : AtMost(a, aToResult, b, bToResult);
- }
-
- public bool HigherThan(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- Contract.Requires(bToResult != null);
- Contract.Requires(b != null);
- Contract.Requires(aToResult != null);
- Contract.Requires(a != null);
- return LowerThan(b, bToResult, a, aToResult);
- }
-
-
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- // Note!
- //
- // Concrete classes that implement Lattice must implement one of the NontrivialJoin
- // overloads. We provide here a default implementation for one given a "real"
- // implementation of the other. Otherwise, there will be an infinite loop!
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- public override Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires(b != null);
- //Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return NontrivialJoin(a, IdentityCombineNameMap.Map, b, IdentityCombineNameMap.Map);
- }
-
- public virtual Element/*!*/ NontrivialJoin(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- Contract.Requires(bToResult != null);
- Contract.Requires(b != null);
- Contract.Requires(aToResult != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return NontrivialJoin(ApplyCombineNameMap(a, aToResult), ApplyCombineNameMap(b, bToResult));
- }
-
- public Element/*!*/ Join(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- Contract.Requires(bToResult != null);
- Contract.Requires(b != null);
- Contract.Requires(aToResult != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Element/*?*/ r = TrivialJoin(a, b);
- return r != null ? r : NontrivialJoin(a, aToResult, b, bToResult);
- }
-
-
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- // Note!
- //
- // Concrete classes that implement Lattice must implement one of the Widen
- // overloads. We provide here a default implementation for one given a "real"
- // implementation of the other. Otherwise, there will be an infinite loop!
- //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- public override Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires(b != null);
- //Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return Widen(a, IdentityCombineNameMap.Map, b, IdentityCombineNameMap.Map);
- }
-
- public virtual Element/*!*/ Widen(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- Contract.Requires(bToResult != null);
- Contract.Requires(b != null);
- Contract.Requires(aToResult != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return Widen(ApplyCombineNameMap(a, aToResult), ApplyCombineNameMap(b, bToResult));
- }
-
-
-
- /// <summary>
- /// A default implementation of the <see cref="CheckVariableDisequality"/> given
- /// the appropriate expression factories by calling CheckPredicate.
- /// </summary>
- protected Answer DefaultCheckVariableDisequality(IPropExprFactory/*!*/ propExprFactory, IValueExprFactory/*!*/ valExprFactory, Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
- Contract.Requires(propExprFactory != null);
- Contract.Requires(valExprFactory != null);
- Contract.Requires(e != null);
- Contract.Requires(var1 != null);
- Contract.Requires(var2 != null);
- return this.CheckPredicate(e, propExprFactory.Not(valExprFactory.Eq(var1, var2)));
- }
-
- private Element/*!*/ ApplyCombineNameMap(Element/*!*/ e, ICombineNameMap/*!*/ eToResult) {
- Contract.Requires(eToResult != null);
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Element/*!*/ result = e;
-
- foreach (G.KeyValuePair<IVariable/*!*/, ISet/*<IVariable!>*//*!*/> entry in eToResult.GetSourceToResult()) {
- IVariable/*!*/ sourceName = entry.Key;
- Contract.Assert(sourceName != null);
- ISet/*<IVariable!*//*!*/ resultNames = entry.Value;
- Contract.Assert(resultNames != null);
- // Renaming s to r is okay if
- // (1) s is not used in the result
- // and (2) s has not been renamed already
- bool renameOkay = !resultNames.Contains(sourceName);
- IVariable/*!*/ representative = sourceName;
- Contract.Assert(representative != null);
-
- foreach (IVariable/*!*/ rname in resultNames) {
- Contract.Assert(rname != null);
- // skip if sourceName and rname are the same
- if (object.Equals(sourceName, rname)) {
- continue;
- }
-
- if (renameOkay) {
- result = this.Rename(result, sourceName, rname);
- representative = rname; // representative now rname
- renameOkay = false; // no longer okay to rename
- } else {
- result = this.Constrain(result, valueExprFactory.Eq(representative, rname));
- }
- }
- }
-
- return result;
- }
-
- private sealed class IdentityCombineNameMap : ICombineNameMap {
- public static readonly IdentityCombineNameMap/*!*/ Map = new IdentityCombineNameMap();
-
- private static readonly G.Dictionary<IVariable/*!*/, ISet/*<IVariable!>*//*!*/>/*!*/ emptyDictionary1 = new G.Dictionary<IVariable/*!*/, ISet/*<IVariable!>*//*!*/>();
- private static readonly G.Dictionary<IVariable/*!*/, IVariable/*!*/>/*!*/ emptyDictionary2 = new G.Dictionary<IVariable/*!*/, IVariable/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Map != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(emptyDictionary1) && Contract.ForAll(emptyDictionary1.Values, set =>/*cce.NonNullElements(set)*/set != null));
- Contract.Invariant(cce.NonNullDictionaryAndValues(emptyDictionary2));
- Contract.Invariant(indexMap != null);
- Contract.Invariant(reverseIndexMap != null);
-
- }
-
-
- public ISet/*<IVariable!>*//*?*/ GetResultNames(IVariable/*!*/ srcname) {
- //Contract.Requires(srcname != null);
- ArraySet a = new ArraySet();
- a.Add(srcname);
- return a;
- }
-
- public IVariable/*?*/ GetSourceName(IVariable/*!*/ resname) {
- //Contract.Requires(resname != null);
- return resname;
- }
-
- //TODO: uncomment when works in compiler
- //public G.IEnumerable<G.KeyValuePair<IVariable!,ISet/*<IVariable!>*/!>> GetSourceToResult()
- public IEnumerable/*!*/ GetSourceToResult() {
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
- return emptyDictionary1;
- }
-
- //public G.IEnumerable<G.KeyValuePair<IVariable!,IVariable!>> GetResultToSource()
- public IEnumerable/*!*/ GetResultToSource() {
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
- return emptyDictionary2;
- }
-
- private IdentityCombineNameMap() {
- }
- }
-
- #region Support for MultiLattice to uniquely number every subclass of Lattice
-
-
- private static Hashtable/*<System.Type,int>*//*!*/ indexMap = new Hashtable();
- private static Hashtable/*<int,Lattice>*//*!*/ reverseIndexMap = new Hashtable();
- private static int globalCount = 0;
-
- protected virtual object/*!*/ UniqueId {
- get {
- Contract.Ensures(Contract.Result<object>() != null);
- return cce.NonNull(this.GetType());
- }
- }
-
- public int Index {
- get {
- object unique = this.UniqueId;
- if (indexMap.ContainsKey(unique)) {
- object index = indexMap[unique];
- Contract.Assert(index != null); // this does nothing for nonnull analysis
- if (index != null) {
- return (int)index;
- }
- return 0;
- } else {
- int myIndex = globalCount++;
- indexMap[unique] = myIndex;
- reverseIndexMap[myIndex] = this;
- return myIndex;
- }
- }
- }
-
- public static Lattice GetGlobalLattice(int i) {
- return reverseIndexMap[i] as Lattice;
- }
- #endregion
-
- public static bool LogSwitch = false;
- /// <summary>
- /// Returns the predicate that corresponds to the given lattice element.
- /// </summary>
- public abstract IExpr/*!*/ ToPredicate(Element/*!*/ e);
-
- /// <summary>
- /// Allows the lattice to specify whether it understands a particular function symbol.
- ///
- /// The lattice is always allowed to return "true" even when it really can't do anything
- /// with such functions; however, it is advantageous to say "false" when possible to
- /// avoid being called to do certain things.
- ///
- /// The arguments to a function are provided for context so that the lattice can say
- /// true or false for the same function symbol in different situations. For example,
- /// a lattice may understand the multiplication of a variable and a constant but not
- /// of two variables. The implementation of a lattice should not hold on to the
- /// arguments.
- /// </summary>
- /// <param name="f">The function symbol.</param>
- /// <param name="args">The argument context.</param>
- /// <returns>True if it may understand f, false if it does not understand f.</returns>
- public abstract bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args);
-
- /// <summary>
- /// Return an expression that is equivalent to the given expression that does not
- /// contain the given variable according to the lattice element and queryable.
- /// </summary>
- /// <param name="e">The lattice element.</param>
- /// <param name="q">A queryable for asking addtional information.</param>
- /// <param name="expr">The expression to find an equivalent expression.</param>
- /// <param name="var">The variable to eliminate.</param>
- /// <param name="prohibitedVars">The set of variables that can't be used in the resulting expression.</param>
- /// <returns>
- /// An equivalent expression to <paramref name="expr"/> without <paramref name="var"/>
- /// or null if not possible.
- /// </returns>
- public abstract IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, Set/*<IVariable!>*//*!*/ prohibitedVars);
-
- /// <summary>
- /// Answers a query about whether the given predicate holds given the lattice element.
- /// </summary>
- /// <param name="e">The lattice element.</param>
- /// <param name="pred">The predicate.</param>
- /// <returns>Yes, No, or Maybe.</returns>
- public abstract Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred);
-
- /// <summary>
- /// Answers a disequality about two variables. The same information could be obtained
- /// by asking CheckPredicate, but a different implementation may be simpler and more
- /// efficient.
- /// </summary>
- /// <param name="e">The lattice element.</param>
- /// <param name="var1">The first variable.</param>
- /// <param name="var2">The second variable.</param>
- /// <returns>Yes, No, or Maybe.</returns>
- public abstract Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2);
-
- public abstract string/*!*/ ToString(Element/*!*/ e); // for debugging
-
- }
- [ContractClassFor(typeof(Lattice))]
- abstract class LatticeContracts : Lattice {
- public LatticeContracts()
- : base(null) {
- }
- public override IExpr ToPredicate(MathematicalLattice.Element e) {
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- throw new NotImplementedException();
- }
- public override bool Understands(IFunctionSymbol f, IList args) {
- Contract.Requires(f != null);
- Contract.Requires(args != null);
- throw new NotImplementedException();
- }
- public override IExpr EquivalentExpr(MathematicalLattice.Element e, IQueryable q, IExpr expr, IVariable var, Set prohibitedVars) {
- Contract.Requires(e != null);
- Contract.Requires(q != null);
- Contract.Requires(expr != null);
- Contract.Requires(var != null);
- Contract.Requires(prohibitedVars != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- throw new NotImplementedException();
- }
- public override Answer CheckPredicate(MathematicalLattice.Element e, IExpr pred) {
- Contract.Requires(e != null);
- Contract.Requires(pred != null);
- throw new NotImplementedException();
- }
- public override Answer CheckVariableDisequality(MathematicalLattice.Element e, IVariable var1, IVariable var2) {
- Contract.Requires(e != null);
- Contract.Requires(var1 != null);
- Contract.Requires(var2 != null);
- throw new NotImplementedException();
- }
- public override string ToString(Element e) {
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<string>() != null);
- throw new NotImplementedException();
- }
- public override MathematicalLattice.Element Eliminate(MathematicalLattice.Element e, IVariable variable) {
- Contract.Requires(e != null);
- Contract.Requires(variable != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
- public override MathematicalLattice.Element Rename(MathematicalLattice.Element e, IVariable oldName, IVariable newName) {
- Contract.Requires(e != null);
- Contract.Requires(oldName != null);
- Contract.Requires(newName != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
- public override MathematicalLattice.Element Constrain(MathematicalLattice.Element e, IExpr expr) {
- Contract.Requires(e != null);
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new NotImplementedException();
- }
- }
-
- /// <summary>
- /// Defines the relation between names used in the respective input lattice elements to the
- /// various combination operators (Join,Widen,Meet,AtMost) and the names that should be used
- /// in the resulting lattice element.
- /// </summary>
- [ContractClass(typeof(ICombineNameMapContracts))]
- public interface ICombineNameMap {
- ISet/*<IVariable!>*//*?*/ GetResultNames(IVariable/*!*/ srcname);
- IVariable/*?*/ GetSourceName(IVariable/*!*/ resname);
-
- //TODO: uncommet when works in compiler
- //G.IEnumerable<G.KeyValuePair<IVariable!,ISet/*<IVariable!>*/!>> GetSourceToResult();
- IEnumerable/*!*/ GetSourceToResult();
- //G.IEnumerable<G.KeyValuePair<IVariable!,IVariable!>> GetResultToSource();
- IEnumerable/*!*/ GetResultToSource();
- }
- [ContractClassFor(typeof(ICombineNameMap))]
- public abstract class ICombineNameMapContracts : ICombineNameMap {
- #region ICombineNameMap Members
-
- public Set GetResultNames(IVariable srcname) {
- Contract.Requires(srcname != null);
- throw new NotImplementedException();
- }
-
- public IVariable GetSourceName(IVariable resname) {
- Contract.Requires(resname != null);
- throw new NotImplementedException();
- }
-
- public IEnumerable GetSourceToResult() {
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
- throw new NotImplementedException();
- }
-
- public IEnumerable GetResultToSource() {
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
- /// <summary>
- /// Provides statistics on the number of times an operation is performed
- /// and forwards the real operations to the given lattice in the constructor.
- /// </summary>
- public class StatisticsLattice : Lattice {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(lattice != null);
- }
-
- readonly Lattice/*!*/ lattice;
- int eliminateCount;
- int renameCount;
- int constrainCount;
- int toPredicateCount;
- int atMostCount;
- int topCount;
- int bottomCount;
- int isTopCount;
- int isBottomCount;
- int joinCount;
- int meetCount;
- int widenCount;
- int understandsCount;
- int equivalentExprCount;
- int checkPredicateCount;
- int checkVariableDisequalityCount;
-
- public StatisticsLattice(Lattice/*!*/ lattice)
- : base(lattice.valueExprFactory) {
- Contract.Requires(lattice != null);
- this.lattice = lattice;
- // base(lattice.valueExprFactory);
- }
-
- public override Element/*!*/ Eliminate(Element/*!*/ e, IVariable/*!*/ variable) {
- //Contract.Requires(variable != null);
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- eliminateCount++;
- return lattice.Eliminate(e, variable);
- }
-
- public override Element/*!*/ Rename(Element/*!*/ e, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- //Contract.Requires(newName != null);
- //Contract.Requires(oldName != null);
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- renameCount++;
- return lattice.Rename(e, oldName, newName);
- }
-
- public override Element/*!*/ Constrain(Element/*!*/ e, IExpr/*!*/ expr) {
- //Contract.Requires(expr != null);
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- constrainCount++;
- return lattice.Constrain(e, expr);
- }
-
-
- public override bool Understands(IFunctionSymbol/*!*/ f, IList/*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- understandsCount++;
- return lattice.Understands(f, args);
- }
-
-
- public override IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, ISet/*<IVariable!>*//*!*/ prohibitedVars) {
- //Contract.Requires(prohibitedVars != null);
- //Contract.Requires(var != null);
- //Contract.Requires(expr != null);
- //Contract.Requires(q != null);
- //Contract.Requires(e != null);
- equivalentExprCount++;
- return lattice.EquivalentExpr(e, q, expr, var, prohibitedVars);
- }
-
-
- public override Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred) {
- //Contract.Requires(pred != null);
- //Contract.Requires(e != null);
- checkPredicateCount++;
- return lattice.CheckPredicate(e, pred);
- }
-
-
- public override Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
- //Contract.Requires(var2 != null);
- //Contract.Requires(var1 != null);
- //Contract.Requires(e != null);
- checkVariableDisequalityCount++;
- return lattice.CheckVariableDisequality(e, var1, var2);
- }
-
-
-
- public override IExpr/*!*/ ToPredicate(Element/*!*/ e) {
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- toPredicateCount++;
- return lattice.ToPredicate(e);
- }
-
- public override string/*!*/ ToString(Element/*!*/ e) {
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<string>() != null);
- return lattice.ToString(e);
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return string.Format(
- "StatisticsLattice: #Eliminate={0} #Rename={1} #Constrain={2} #ToPredicate={3} " +
- "#Understands={4} #EquivalentExpr={5} #CheckPredicate={6} #CheckVariableDisequality={7} " +
- "#AtMost={8} #Top={9} #Bottom={9} #IsTop={10} #IsBottom={11} " +
- "#NonTrivialJoin={12} #NonTrivialMeet={13} #Widen={14}",
- eliminateCount, renameCount, constrainCount, toPredicateCount,
- understandsCount, equivalentExprCount, checkPredicateCount, checkVariableDisequalityCount,
- atMostCount, topCount, bottomCount, isTopCount, isBottomCount,
- joinCount, meetCount, widenCount);
- }
-
- protected override bool AtMost(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires(b != null);
- //Contract.Requires(a != null);
- atMostCount++;
- return lattice.LowerThan(a, b);
- }
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- topCount++;
- return lattice.Top;
- }
- }
- public override Element/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- bottomCount++;
- return lattice.Bottom;
- }
- }
-
- public override bool IsTop(Element/*!*/ e) {
- //Contract.Requires(e != null);
- isTopCount++;
- return lattice.IsTop(e);
- }
-
- public override bool IsBottom(Element/*!*/ e) {
- //Contract.Requires(e != null);
- isBottomCount++;
- return lattice.IsBottom(e);
- }
-
- public override Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires(b != null);
- //Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- joinCount++;
- return lattice.NontrivialJoin(a, b);
- }
-
- public override Element/*!*/ NontrivialMeet(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires(b != null);
- //Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- meetCount++;
- return lattice.NontrivialMeet(a, b);
- }
-
- public override Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires(b != null);
- //Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- widenCount++;
- return lattice.Widen(a, b);
- }
-
- public override void Validate() {
- base.Validate();
- lattice.Validate();
- }
-
- protected override object/*!*/ UniqueId {
- get {
- Contract.Ensures(Contract.Result<object>() != null);
- // use the base id, not the underlying-lattice id (is that the right thing to do?)
- return base.UniqueId;
- }
- }
- }
-
-
- public sealed class LatticeQueryable : IQueryable {
- private Lattice/*!*/ lattice;
- private Lattice.Element/*!*/ element;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(lattice != null);
- Contract.Invariant(element != null);
- }
-
-
- public LatticeQueryable(Lattice/*!*/ lattice, Lattice.Element/*!*/ element) {
- Contract.Requires(element != null);
- Contract.Requires(lattice != null);
- this.lattice = lattice;
- this.element = element;
- // base();
- }
-
- public Answer CheckPredicate(IExpr/*!*/ pred) {
- //Contract.Requires(pred != null);
- return lattice.CheckPredicate(element, pred);
- }
-
- public Answer CheckVariableDisequality(IVariable/*!*/ var1, IVariable/*!*/ var2) {
- //Contract.Requires(var2 != null);
- //Contract.Requires(var1 != null);
- return lattice.CheckVariableDisequality(element, var1, var2);
- }
- }
-}
+ using IMutableSet = Microsoft.Boogie.GSet<object>;
+ using HashSet = Microsoft.Boogie.GSet<object>;
+ using ISet = Microsoft.Boogie.GSet<object>;
+ using Set = Microsoft.Boogie.GSet<object>;
+
+
+ /// <summary>
+ /// Specifies the operations (e.g., join) on a mathematical lattice that depend
+ /// only on the elements of the lattice.
+ /// </summary>
+ [ContractClass(typeof(MathematicalLatticeContracts))]
+ public abstract class MathematicalLattice {
+ #region Element
+ /// <summary>
+ /// An element of the lattice. This class should be derived from in any
+ /// implementation of MathematicalLattice.
+ /// </summary>
+ [ContractClass(typeof(ElementContracts))]
+ public abstract class Element : System.ICloneable {
+ /// <summary>
+ /// Print out a debug-useful representation of the internal data structure of the lattice element.
+ /// </summary>
+ public virtual void Dump(string/*!*/ msg) {
+ Contract.Requires(msg != null);
+ System.Console.WriteLine("Dump({0}) = {1}", msg, this);
+ }
+
+ public abstract Element/*!*/ Clone();
+ object/*!*/ System.ICloneable.Clone() {
+ return this.Clone();
+ }
+
+ public abstract G.ICollection<IVariable/*!*/>/*!*/ FreeVariables();
+
+ }
+ [ContractClassFor(typeof(Element))]
+ public abstract class ElementContracts : Element {
+ public override Element Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+
+ }
+
+ public override System.Collections.Generic.ICollection<IVariable> FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<G.ICollection<IVariable>>()));
+ Contract.Ensures(Contract.Result<System.Collections.Generic.ICollection<IVariable>>().IsReadOnly);
+ throw new System.NotImplementedException();
+ }
+ }
+ #endregion
+
+ public abstract Element/*!*/ Top {
+ get;
+ }
+ public abstract Element/*!*/ Bottom {
+ get;
+ }
+
+ public abstract bool IsTop(Element/*!*/ e);
+ public abstract bool IsBottom(Element/*!*/ e);
+
+ /// <summary>
+ /// Returns true if a &lt;= this.
+ /// </summary>
+ protected abstract bool AtMost(Element/*!*/ a, Element/*!*/ b);
+ /* The following cases are handled elsewhere and need not be considered in subclass. */
+ // requires a.GetType() == b.GetType();
+ // requires ! a.IsTop;
+ // requires ! a.IsBottom;
+ // requires ! b.IsTop;
+ // requires ! b.IsBottom;
+
+
+ protected Answer TrivialLowerThan(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ if (a.GetType() != b.GetType()) {
+ throw new System.InvalidOperationException(
+ "operands to <= must be of same Element type"
+ );
+ }
+ if (IsBottom(a)) {
+ return Answer.Yes;
+ }
+ if (IsTop(b)) {
+ return Answer.Yes;
+ }
+ if (IsTop(a)) {
+ return Answer.No;
+ }
+ if (IsBottom(b)) {
+ return Answer.No;
+ }
+
+ return Answer.Maybe;
+ }
+
+ // Is 'a' better information than 'b'?
+ //
+ public bool LowerThan(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Answer ans = TrivialLowerThan(a, b);
+ return ans != Answer.Maybe ? ans == Answer.Yes : AtMost(a, b);
+ }
+
+ // Is 'a' worse information than 'b'?
+ //
+ public bool HigherThan(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ return LowerThan(b, a);
+ }
+
+ // Are 'a' and 'b' equivalent?
+ //
+ public bool Equivalent(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ return LowerThan(a, b) && LowerThan(b, a);
+ }
+
+ public abstract Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b);
+ /* The following cases are handled elsewhere and need not be considered in subclass. */
+ // requires a.GetType() == b.GetType();
+ // requires ! a.IsTop;
+ // requires ! a.IsBottom;
+ // requires ! b.IsTop;
+ // requires ! b.IsBottom;
+
+
+ protected Element/*?*/ TrivialJoin(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ if (a.GetType() != b.GetType()) {
+ throw new System.InvalidOperationException(
+ "operands to Join must be of same Lattice.Element type"
+ );
+ }
+ if (IsTop(a)) {
+ return a;
+ }
+ if (IsTop(b)) {
+ return b;
+ }
+ if (IsBottom(a)) {
+ return b;
+ }
+ if (IsBottom(b)) {
+ return a;
+ }
+
+ return null;
+ }
+
+ public Element/*!*/ Join(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Element/*?*/ r = TrivialJoin(a, b);
+ return r != null ? r : NontrivialJoin(a, b);
+ }
+
+ public abstract Element/*!*/ NontrivialMeet(Element/*!*/ a, Element/*!*/ b)
+ /* The following cases are handled elsewhere and need not be considered in subclass. */
+ // requires a.GetType() == b.GetType();
+ // requires ! a.IsTop;
+ // requires ! a.IsBottom;
+ // requires ! b.IsTop;
+ // requires ! b.IsBottom;
+ ;
+
+ protected Element/*?*/ TrivialMeet(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ if (a.GetType() != b.GetType()) {
+ throw new System.InvalidOperationException(
+ "operands to Meet must be of same Lattice.Element type"
+ );
+ }
+ if (IsTop(a)) {
+ return b;
+ }
+ if (IsTop(b)) {
+ return a;
+ }
+ if (IsBottom(a)) {
+ return a;
+ }
+ if (IsBottom(b)) {
+ return b;
+ }
+
+ return null;
+ }
+
+ public Element/*!*/ Meet(Element/*!*/ a, Element/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Element/*?*/ r = TrivialMeet(a, b);
+ return r != null ? r : NontrivialMeet(a, b);
+ }
+
+ public abstract Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b);
+
+ public virtual void Validate() {
+ Debug.Assert(IsTop(Top));
+ Debug.Assert(IsBottom(Bottom));
+ Debug.Assert(!IsBottom(Top));
+ Debug.Assert(!IsTop(Bottom));
+
+ Debug.Assert(LowerThan(Top, Top));
+ Debug.Assert(LowerThan(Bottom, Top));
+ Debug.Assert(LowerThan(Bottom, Bottom));
+
+ Debug.Assert(IsTop(Join(Top, Top)));
+ Debug.Assert(IsBottom(Join(Bottom, Bottom)));
+ }
+ }
+ [ContractClassFor(typeof(MathematicalLattice))]
+ public abstract class MathematicalLatticeContracts : MathematicalLattice {
+ public override MathematicalLattice.Element Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public override MathematicalLattice.Element Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public override bool IsTop(MathematicalLattice.Element e) {
+ Contract.Requires(e != null);
+ throw new NotImplementedException();
+ }
+
+ public override bool IsBottom(MathematicalLattice.Element e) {
+ Contract.Requires(e != null);
+ throw new NotImplementedException();
+ }
+
+ protected override bool AtMost(MathematicalLattice.Element a, MathematicalLattice.Element b) {
+ Contract.Requires(a != null);
+ Contract.Requires(b != null);
+ throw new NotImplementedException();
+ }
+
+ public override MathematicalLattice.Element NontrivialJoin(MathematicalLattice.Element a, MathematicalLattice.Element b) {
+ Contract.Requires(a != null);
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+
+ public override MathematicalLattice.Element NontrivialMeet(MathematicalLattice.Element a, MathematicalLattice.Element b) {
+ Contract.Requires(a != null);
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+
+ public override MathematicalLattice.Element Widen(MathematicalLattice.Element a, MathematicalLattice.Element b) {
+ Contract.Requires(a != null);
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+
+ /// <summary>
+ /// Provides an abstract interface for the operations of a lattice specific
+ /// to abstract interpretation (i.e., that deals with the expression language).
+ /// </summary>
+ [ContractClass(typeof(LatticeContracts))]
+ public abstract class Lattice : MathematicalLattice {
+ internal readonly IValueExprFactory/*!*/ valueExprFactory;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(valueExprFactory != null);
+ }
+
+
+ public Lattice(IValueExprFactory/*!*/ valueExprFactory) {
+ Contract.Requires(valueExprFactory != null);
+ this.valueExprFactory = valueExprFactory;
+ // base();
+ }
+
+ #region Primitives that commands translate into
+
+ public abstract Element/*!*/ Eliminate(Element/*!*/ e, IVariable/*!*/ variable);
+
+ public abstract Element/*!*/ Rename(Element/*!*/ e, IVariable/*!*/ oldName, IVariable/*!*/ newName);
+
+ public abstract Element/*!*/ Constrain(Element/*!*/ e, IExpr/*!*/ expr);
+
+ #endregion
+
+
+ // TODO keep this?
+ // public Element! Eliminate(Element! e, VariableSeq! variables)
+ // {
+ // Lattice.Element result = e;
+ // foreach (IVariable var in variables)
+ // {
+ // result = this.Eliminate(result, var);
+ // }
+ // return result;
+ // }
+
+
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Note!
+ //
+ // Concrete classes that implement Lattice must implement one of the AtMost
+ // overloads. We provide here a default implementation for one given a "real"
+ // implementation of the other. Otherwise, there will be an infinite loop!
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ protected override bool AtMost(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires(b != null);
+ //Contract.Requires(a != null);
+ return AtMost(a, IdentityCombineNameMap.Map, b, IdentityCombineNameMap.Map);
+ }
+
+ protected virtual bool AtMost(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ Contract.Requires(bToResult != null);
+ Contract.Requires(b != null);
+ Contract.Requires(aToResult != null);
+ Contract.Requires(a != null);
+ return AtMost(ApplyCombineNameMap(a, aToResult), ApplyCombineNameMap(b, bToResult));
+ }
+
+ public bool LowerThan(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ Contract.Requires(bToResult != null);
+ Contract.Requires(b != null);
+ Contract.Requires(aToResult != null);
+ Contract.Requires(a != null);
+ Answer ans = TrivialLowerThan(a, b);
+ return ans != Answer.Maybe ? ans == Answer.Yes : AtMost(a, aToResult, b, bToResult);
+ }
+
+ public bool HigherThan(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ Contract.Requires(bToResult != null);
+ Contract.Requires(b != null);
+ Contract.Requires(aToResult != null);
+ Contract.Requires(a != null);
+ return LowerThan(b, bToResult, a, aToResult);
+ }
+
+
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Note!
+ //
+ // Concrete classes that implement Lattice must implement one of the NontrivialJoin
+ // overloads. We provide here a default implementation for one given a "real"
+ // implementation of the other. Otherwise, there will be an infinite loop!
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires(b != null);
+ //Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return NontrivialJoin(a, IdentityCombineNameMap.Map, b, IdentityCombineNameMap.Map);
+ }
+
+ public virtual Element/*!*/ NontrivialJoin(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ Contract.Requires(bToResult != null);
+ Contract.Requires(b != null);
+ Contract.Requires(aToResult != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return NontrivialJoin(ApplyCombineNameMap(a, aToResult), ApplyCombineNameMap(b, bToResult));
+ }
+
+ public Element/*!*/ Join(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ Contract.Requires(bToResult != null);
+ Contract.Requires(b != null);
+ Contract.Requires(aToResult != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Element/*?*/ r = TrivialJoin(a, b);
+ return r != null ? r : NontrivialJoin(a, aToResult, b, bToResult);
+ }
+
+
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // Note!
+ //
+ // Concrete classes that implement Lattice must implement one of the Widen
+ // overloads. We provide here a default implementation for one given a "real"
+ // implementation of the other. Otherwise, there will be an infinite loop!
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ public override Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires(b != null);
+ //Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Widen(a, IdentityCombineNameMap.Map, b, IdentityCombineNameMap.Map);
+ }
+
+ public virtual Element/*!*/ Widen(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ Contract.Requires(bToResult != null);
+ Contract.Requires(b != null);
+ Contract.Requires(aToResult != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Widen(ApplyCombineNameMap(a, aToResult), ApplyCombineNameMap(b, bToResult));
+ }
+
+
+
+ /// <summary>
+ /// A default implementation of the <see cref="CheckVariableDisequality"/> given
+ /// the appropriate expression factories by calling CheckPredicate.
+ /// </summary>
+ protected Answer DefaultCheckVariableDisequality(IPropExprFactory/*!*/ propExprFactory, IValueExprFactory/*!*/ valExprFactory, Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
+ Contract.Requires(propExprFactory != null);
+ Contract.Requires(valExprFactory != null);
+ Contract.Requires(e != null);
+ Contract.Requires(var1 != null);
+ Contract.Requires(var2 != null);
+ return this.CheckPredicate(e, propExprFactory.Not(valExprFactory.Eq(var1, var2)));
+ }
+
+ private Element/*!*/ ApplyCombineNameMap(Element/*!*/ e, ICombineNameMap/*!*/ eToResult) {
+ Contract.Requires(eToResult != null);
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Element/*!*/ result = e;
+
+ foreach (G.KeyValuePair<IVariable/*!*/, ISet/*<IVariable!>*//*!*/> entry in eToResult.GetSourceToResult()) {
+ IVariable/*!*/ sourceName = entry.Key;
+ Contract.Assert(sourceName != null);
+ ISet/*<IVariable!*//*!*/ resultNames = entry.Value;
+ Contract.Assert(resultNames != null);
+ // Renaming s to r is okay if
+ // (1) s is not used in the result
+ // and (2) s has not been renamed already
+ bool renameOkay = !resultNames.Contains(sourceName);
+ IVariable/*!*/ representative = sourceName;
+ Contract.Assert(representative != null);
+
+ foreach (IVariable/*!*/ rname in resultNames) {
+ Contract.Assert(rname != null);
+ // skip if sourceName and rname are the same
+ if (object.Equals(sourceName, rname)) {
+ continue;
+ }
+
+ if (renameOkay) {
+ result = this.Rename(result, sourceName, rname);
+ representative = rname; // representative now rname
+ renameOkay = false; // no longer okay to rename
+ } else {
+ result = this.Constrain(result, valueExprFactory.Eq(representative, rname));
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private sealed class IdentityCombineNameMap : ICombineNameMap {
+ public static readonly IdentityCombineNameMap/*!*/ Map = new IdentityCombineNameMap();
+
+ private static readonly G.Dictionary<IVariable/*!*/, ISet/*<IVariable!>*//*!*/>/*!*/ emptyDictionary1 = new G.Dictionary<IVariable/*!*/, ISet/*<IVariable!>*//*!*/>();
+ private static readonly G.Dictionary<IVariable/*!*/, IVariable/*!*/>/*!*/ emptyDictionary2 = new G.Dictionary<IVariable/*!*/, IVariable/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Map != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(emptyDictionary1) && Contract.ForAll(emptyDictionary1.Values, set =>/*cce.NonNullElements(set)*/set != null));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(emptyDictionary2));
+ Contract.Invariant(indexMap != null);
+ Contract.Invariant(reverseIndexMap != null);
+
+ }
+
+
+ public ISet/*<IVariable!>*//*?*/ GetResultNames(IVariable/*!*/ srcname) {
+ //Contract.Requires(srcname != null);
+ ArraySet a = new ArraySet();
+ a.Add(srcname);
+ return a;
+ }
+
+ public IVariable/*?*/ GetSourceName(IVariable/*!*/ resname) {
+ //Contract.Requires(resname != null);
+ return resname;
+ }
+
+ //TODO: uncomment when works in compiler
+ //public G.IEnumerable<G.KeyValuePair<IVariable!,ISet/*<IVariable!>*/!>> GetSourceToResult()
+ public IEnumerable/*!*/ GetSourceToResult() {
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+ return emptyDictionary1;
+ }
+
+ //public G.IEnumerable<G.KeyValuePair<IVariable!,IVariable!>> GetResultToSource()
+ public IEnumerable/*!*/ GetResultToSource() {
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+ return emptyDictionary2;
+ }
+
+ private IdentityCombineNameMap() {
+ }
+ }
+
+ #region Support for MultiLattice to uniquely number every subclass of Lattice
+
+
+ private static Hashtable/*<System.Type,int>*//*!*/ indexMap = new Hashtable();
+ private static Hashtable/*<int,Lattice>*//*!*/ reverseIndexMap = new Hashtable();
+ private static int globalCount = 0;
+
+ protected virtual object/*!*/ UniqueId {
+ get {
+ Contract.Ensures(Contract.Result<object>() != null);
+ return cce.NonNull(this.GetType());
+ }
+ }
+
+ public int Index {
+ get {
+ object unique = this.UniqueId;
+ if (indexMap.ContainsKey(unique)) {
+ object index = indexMap[unique];
+ Contract.Assert(index != null); // this does nothing for nonnull analysis
+ if (index != null) {
+ return (int)index;
+ }
+ return 0;
+ } else {
+ int myIndex = globalCount++;
+ indexMap[unique] = myIndex;
+ reverseIndexMap[myIndex] = this;
+ return myIndex;
+ }
+ }
+ }
+
+ public static Lattice GetGlobalLattice(int i) {
+ return reverseIndexMap[i] as Lattice;
+ }
+ #endregion
+
+ public static bool LogSwitch = false;
+ /// <summary>
+ /// Returns the predicate that corresponds to the given lattice element.
+ /// </summary>
+ public abstract IExpr/*!*/ ToPredicate(Element/*!*/ e);
+
+ /// <summary>
+ /// Allows the lattice to specify whether it understands a particular function symbol.
+ ///
+ /// The lattice is always allowed to return "true" even when it really can't do anything
+ /// with such functions; however, it is advantageous to say "false" when possible to
+ /// avoid being called to do certain things.
+ ///
+ /// The arguments to a function are provided for context so that the lattice can say
+ /// true or false for the same function symbol in different situations. For example,
+ /// a lattice may understand the multiplication of a variable and a constant but not
+ /// of two variables. The implementation of a lattice should not hold on to the
+ /// arguments.
+ /// </summary>
+ /// <param name="f">The function symbol.</param>
+ /// <param name="args">The argument context.</param>
+ /// <returns>True if it may understand f, false if it does not understand f.</returns>
+ public abstract bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args);
+
+ /// <summary>
+ /// Return an expression that is equivalent to the given expression that does not
+ /// contain the given variable according to the lattice element and queryable.
+ /// </summary>
+ /// <param name="e">The lattice element.</param>
+ /// <param name="q">A queryable for asking addtional information.</param>
+ /// <param name="expr">The expression to find an equivalent expression.</param>
+ /// <param name="var">The variable to eliminate.</param>
+ /// <param name="prohibitedVars">The set of variables that can't be used in the resulting expression.</param>
+ /// <returns>
+ /// An equivalent expression to <paramref name="expr"/> without <paramref name="var"/>
+ /// or null if not possible.
+ /// </returns>
+ public abstract IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, Set/*<IVariable!>*//*!*/ prohibitedVars);
+
+ /// <summary>
+ /// Answers a query about whether the given predicate holds given the lattice element.
+ /// </summary>
+ /// <param name="e">The lattice element.</param>
+ /// <param name="pred">The predicate.</param>
+ /// <returns>Yes, No, or Maybe.</returns>
+ public abstract Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred);
+
+ /// <summary>
+ /// Answers a disequality about two variables. The same information could be obtained
+ /// by asking CheckPredicate, but a different implementation may be simpler and more
+ /// efficient.
+ /// </summary>
+ /// <param name="e">The lattice element.</param>
+ /// <param name="var1">The first variable.</param>
+ /// <param name="var2">The second variable.</param>
+ /// <returns>Yes, No, or Maybe.</returns>
+ public abstract Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2);
+
+ public abstract string/*!*/ ToString(Element/*!*/ e); // for debugging
+
+ }
+ [ContractClassFor(typeof(Lattice))]
+ abstract class LatticeContracts : Lattice {
+ public LatticeContracts()
+ : base(null) {
+ }
+ public override IExpr ToPredicate(MathematicalLattice.Element e) {
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ throw new NotImplementedException();
+ }
+ public override bool Understands(IFunctionSymbol f, IList args) {
+ Contract.Requires(f != null);
+ Contract.Requires(args != null);
+ throw new NotImplementedException();
+ }
+ public override IExpr EquivalentExpr(MathematicalLattice.Element e, IQueryable q, IExpr expr, IVariable var, Set prohibitedVars) {
+ Contract.Requires(e != null);
+ Contract.Requires(q != null);
+ Contract.Requires(expr != null);
+ Contract.Requires(var != null);
+ Contract.Requires(prohibitedVars != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ throw new NotImplementedException();
+ }
+ public override Answer CheckPredicate(MathematicalLattice.Element e, IExpr pred) {
+ Contract.Requires(e != null);
+ Contract.Requires(pred != null);
+ throw new NotImplementedException();
+ }
+ public override Answer CheckVariableDisequality(MathematicalLattice.Element e, IVariable var1, IVariable var2) {
+ Contract.Requires(e != null);
+ Contract.Requires(var1 != null);
+ Contract.Requires(var2 != null);
+ throw new NotImplementedException();
+ }
+ public override string ToString(Element e) {
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ throw new NotImplementedException();
+ }
+ public override MathematicalLattice.Element Eliminate(MathematicalLattice.Element e, IVariable variable) {
+ Contract.Requires(e != null);
+ Contract.Requires(variable != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+ public override MathematicalLattice.Element Rename(MathematicalLattice.Element e, IVariable oldName, IVariable newName) {
+ Contract.Requires(e != null);
+ Contract.Requires(oldName != null);
+ Contract.Requires(newName != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+ public override MathematicalLattice.Element Constrain(MathematicalLattice.Element e, IExpr expr) {
+ Contract.Requires(e != null);
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// Defines the relation between names used in the respective input lattice elements to the
+ /// various combination operators (Join,Widen,Meet,AtMost) and the names that should be used
+ /// in the resulting lattice element.
+ /// </summary>
+ [ContractClass(typeof(ICombineNameMapContracts))]
+ public interface ICombineNameMap {
+ ISet/*<IVariable!>*//*?*/ GetResultNames(IVariable/*!*/ srcname);
+ IVariable/*?*/ GetSourceName(IVariable/*!*/ resname);
+
+ //TODO: uncommet when works in compiler
+ //G.IEnumerable<G.KeyValuePair<IVariable!,ISet/*<IVariable!>*/!>> GetSourceToResult();
+ IEnumerable/*!*/ GetSourceToResult();
+ //G.IEnumerable<G.KeyValuePair<IVariable!,IVariable!>> GetResultToSource();
+ IEnumerable/*!*/ GetResultToSource();
+ }
+ [ContractClassFor(typeof(ICombineNameMap))]
+ public abstract class ICombineNameMapContracts : ICombineNameMap {
+ #region ICombineNameMap Members
+
+ public Set GetResultNames(IVariable srcname) {
+ Contract.Requires(srcname != null);
+ throw new NotImplementedException();
+ }
+
+ public IVariable GetSourceName(IVariable resname) {
+ Contract.Requires(resname != null);
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetSourceToResult() {
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetResultToSource() {
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ /// <summary>
+ /// Provides statistics on the number of times an operation is performed
+ /// and forwards the real operations to the given lattice in the constructor.
+ /// </summary>
+ public class StatisticsLattice : Lattice {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(lattice != null);
+ }
+
+ readonly Lattice/*!*/ lattice;
+ int eliminateCount;
+ int renameCount;
+ int constrainCount;
+ int toPredicateCount;
+ int atMostCount;
+ int topCount;
+ int bottomCount;
+ int isTopCount;
+ int isBottomCount;
+ int joinCount;
+ int meetCount;
+ int widenCount;
+ int understandsCount;
+ int equivalentExprCount;
+ int checkPredicateCount;
+ int checkVariableDisequalityCount;
+
+ public StatisticsLattice(Lattice/*!*/ lattice)
+ : base(lattice.valueExprFactory) {
+ Contract.Requires(lattice != null);
+ this.lattice = lattice;
+ // base(lattice.valueExprFactory);
+ }
+
+ public override Element/*!*/ Eliminate(Element/*!*/ e, IVariable/*!*/ variable) {
+ //Contract.Requires(variable != null);
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ eliminateCount++;
+ return lattice.Eliminate(e, variable);
+ }
+
+ public override Element/*!*/ Rename(Element/*!*/ e, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ //Contract.Requires(newName != null);
+ //Contract.Requires(oldName != null);
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ renameCount++;
+ return lattice.Rename(e, oldName, newName);
+ }
+
+ public override Element/*!*/ Constrain(Element/*!*/ e, IExpr/*!*/ expr) {
+ //Contract.Requires(expr != null);
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ constrainCount++;
+ return lattice.Constrain(e, expr);
+ }
+
+
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList/*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ understandsCount++;
+ return lattice.Understands(f, args);
+ }
+
+
+ public override IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, ISet/*<IVariable!>*//*!*/ prohibitedVars) {
+ //Contract.Requires(prohibitedVars != null);
+ //Contract.Requires(var != null);
+ //Contract.Requires(expr != null);
+ //Contract.Requires(q != null);
+ //Contract.Requires(e != null);
+ equivalentExprCount++;
+ return lattice.EquivalentExpr(e, q, expr, var, prohibitedVars);
+ }
+
+
+ public override Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred) {
+ //Contract.Requires(pred != null);
+ //Contract.Requires(e != null);
+ checkPredicateCount++;
+ return lattice.CheckPredicate(e, pred);
+ }
+
+
+ public override Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
+ //Contract.Requires(var2 != null);
+ //Contract.Requires(var1 != null);
+ //Contract.Requires(e != null);
+ checkVariableDisequalityCount++;
+ return lattice.CheckVariableDisequality(e, var1, var2);
+ }
+
+
+
+ public override IExpr/*!*/ ToPredicate(Element/*!*/ e) {
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ toPredicateCount++;
+ return lattice.ToPredicate(e);
+ }
+
+ public override string/*!*/ ToString(Element/*!*/ e) {
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ return lattice.ToString(e);
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return string.Format(
+ "StatisticsLattice: #Eliminate={0} #Rename={1} #Constrain={2} #ToPredicate={3} " +
+ "#Understands={4} #EquivalentExpr={5} #CheckPredicate={6} #CheckVariableDisequality={7} " +
+ "#AtMost={8} #Top={9} #Bottom={9} #IsTop={10} #IsBottom={11} " +
+ "#NonTrivialJoin={12} #NonTrivialMeet={13} #Widen={14}",
+ eliminateCount, renameCount, constrainCount, toPredicateCount,
+ understandsCount, equivalentExprCount, checkPredicateCount, checkVariableDisequalityCount,
+ atMostCount, topCount, bottomCount, isTopCount, isBottomCount,
+ joinCount, meetCount, widenCount);
+ }
+
+ protected override bool AtMost(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires(b != null);
+ //Contract.Requires(a != null);
+ atMostCount++;
+ return lattice.LowerThan(a, b);
+ }
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ topCount++;
+ return lattice.Top;
+ }
+ }
+ public override Element/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ bottomCount++;
+ return lattice.Bottom;
+ }
+ }
+
+ public override bool IsTop(Element/*!*/ e) {
+ //Contract.Requires(e != null);
+ isTopCount++;
+ return lattice.IsTop(e);
+ }
+
+ public override bool IsBottom(Element/*!*/ e) {
+ //Contract.Requires(e != null);
+ isBottomCount++;
+ return lattice.IsBottom(e);
+ }
+
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires(b != null);
+ //Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ joinCount++;
+ return lattice.NontrivialJoin(a, b);
+ }
+
+ public override Element/*!*/ NontrivialMeet(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires(b != null);
+ //Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ meetCount++;
+ return lattice.NontrivialMeet(a, b);
+ }
+
+ public override Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires(b != null);
+ //Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ widenCount++;
+ return lattice.Widen(a, b);
+ }
+
+ public override void Validate() {
+ base.Validate();
+ lattice.Validate();
+ }
+
+ protected override object/*!*/ UniqueId {
+ get {
+ Contract.Ensures(Contract.Result<object>() != null);
+ // use the base id, not the underlying-lattice id (is that the right thing to do?)
+ return base.UniqueId;
+ }
+ }
+ }
+
+
+ public sealed class LatticeQueryable : IQueryable {
+ private Lattice/*!*/ lattice;
+ private Lattice.Element/*!*/ element;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(lattice != null);
+ Contract.Invariant(element != null);
+ }
+
+
+ public LatticeQueryable(Lattice/*!*/ lattice, Lattice.Element/*!*/ element) {
+ Contract.Requires(element != null);
+ Contract.Requires(lattice != null);
+ this.lattice = lattice;
+ this.element = element;
+ // base();
+ }
+
+ public Answer CheckPredicate(IExpr/*!*/ pred) {
+ //Contract.Requires(pred != null);
+ return lattice.CheckPredicate(element, pred);
+ }
+
+ public Answer CheckVariableDisequality(IVariable/*!*/ var1, IVariable/*!*/ var2) {
+ //Contract.Requires(var2 != null);
+ //Contract.Requires(var1 != null);
+ return lattice.CheckVariableDisequality(element, var1, var2);
+ }
+ }
+}
diff --git a/Source/AIFramework/Logger.cs b/Source/AIFramework/Logger.cs
index aa7c5979..5b455ab0 100644
--- a/Source/AIFramework/Logger.cs
+++ b/Source/AIFramework/Logger.cs
@@ -1,56 +1,56 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- public class Logger {
- private string/*!*/ dbgmsgContext;
- private static int contextWidth = 0;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(dbgmsgContext != null);
- Contract.Invariant(dbgmsgIndent != null);
- }
-
-
- public bool Enabled = false;
-
- public Logger(string/*!*/ contextMsg) {
- Contract.Requires(contextMsg != null);
- this.dbgmsgContext = "[" + contextMsg + "] ";
- contextWidth = Math.Max(contextWidth, contextMsg.Length + 3);
- // base();
- }
-
- private static System.Text.StringBuilder/*!*/ dbgmsgIndent = new System.Text.StringBuilder();
-
- public void DbgMsgIndent() {
- dbgmsgIndent.Append(' ', 2);
- }
- public void DbgMsgUnindent() {
- if (dbgmsgIndent.Length >= 2)
- dbgmsgIndent.Remove(0, 2);
- }
-
- [ConditionalAttribute("DEBUG")]
- public void DbgMsg(string msg) {
- if (Enabled)
- Debug.WriteLine(dbgmsgContext.PadRight(contextWidth) + dbgmsgIndent + msg);
- }
- [ConditionalAttribute("DEBUG")]
- public void DbgMsgNoLine(string msg) {
- if (Enabled)
- Debug.Write(dbgmsgContext.PadRight(contextWidth) + dbgmsgIndent + msg);
- }
- [ConditionalAttribute("DEBUG")]
- public void DbgMsgPlain(string msg) {
- if (Enabled)
- Debug.Write(msg);
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System;
+ using System.Diagnostics;
+ using System.Diagnostics.Contracts;
+
+ public class Logger {
+ private string/*!*/ dbgmsgContext;
+ private static int contextWidth = 0;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(dbgmsgContext != null);
+ Contract.Invariant(dbgmsgIndent != null);
+ }
+
+
+ public bool Enabled = false;
+
+ public Logger(string/*!*/ contextMsg) {
+ Contract.Requires(contextMsg != null);
+ this.dbgmsgContext = "[" + contextMsg + "] ";
+ contextWidth = Math.Max(contextWidth, contextMsg.Length + 3);
+ // base();
+ }
+
+ private static System.Text.StringBuilder/*!*/ dbgmsgIndent = new System.Text.StringBuilder();
+
+ public void DbgMsgIndent() {
+ dbgmsgIndent.Append(' ', 2);
+ }
+ public void DbgMsgUnindent() {
+ if (dbgmsgIndent.Length >= 2)
+ dbgmsgIndent.Remove(0, 2);
+ }
+
+ [ConditionalAttribute("DEBUG")]
+ public void DbgMsg(string msg) {
+ if (Enabled)
+ Debug.WriteLine(dbgmsgContext.PadRight(contextWidth) + dbgmsgIndent + msg);
+ }
+ [ConditionalAttribute("DEBUG")]
+ public void DbgMsgNoLine(string msg) {
+ if (Enabled)
+ Debug.Write(dbgmsgContext.PadRight(contextWidth) + dbgmsgIndent + msg);
+ }
+ [ConditionalAttribute("DEBUG")]
+ public void DbgMsgPlain(string msg) {
+ if (Enabled)
+ Debug.Write(msg);
+ }
+ }
+}
diff --git a/Source/AIFramework/MultiLattice.cs b/Source/AIFramework/MultiLattice.cs
index ba9aa752..4c9de5f0 100644
--- a/Source/AIFramework/MultiLattice.cs
+++ b/Source/AIFramework/MultiLattice.cs
@@ -1,647 +1,647 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System.Diagnostics.Contracts;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using Microsoft.AbstractInterpretationFramework.Collections;
-
- using Microsoft.Boogie;
-
- using ISet = Microsoft.Boogie.GSet<object>;
- using Set = Microsoft.Boogie.GSet<object>;
-
-
- /// <summary>
- /// The cartesian product lattice.
- /// </summary>
- public class MultiLattice : Lattice, IEnumerable {
- internal class Elt : Element {
- public /*MaybeNull*/Element[] elementPerLattice;
-
- public Elt(int domainCount, bool isBottom) {
- this.elementPerLattice = (domainCount == 0 && isBottom) ? null : new Element[domainCount];
- }
-
- private Elt(Elt/*!*/ other) {
- Contract.Requires(other != null);
- Element[] otherEPL = other.elementPerLattice;
- if (otherEPL != null) {
- Element[] newEPL = new Element[otherEPL.Length];
- for (int i = 0; i < newEPL.Length; i++) {
- newEPL[i] = (Element)(cce.NonNull(otherEPL[i])).Clone();
- }
- this.elementPerLattice = newEPL;
- }
- }
-
- public override Element/*!*/ Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(this);
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- // string s = "MultiLattice+Elt{";
- // string sep = "";
- // Element[] epl = this.elementPerLattice;
- // if (epl != null)
- // {
- // foreach (Element! e in epl)
- // {
- // s += sep + e.ToString();
- // sep = ", ";
- // }
- // }
- // return s + "}";
- if (elementPerLattice == null)
- return "";
- System.Text.StringBuilder buffer = new System.Text.StringBuilder();
- for (int i = 0; i < this.Count; i++) {
- if (i > 0)
- buffer.Append("; ");
- buffer.AppendFormat("{0}", elementPerLattice[i]);
- }
- return buffer.ToString();
- }
-
- public override void Dump(string/*!*/ msg) {
- //Contract.Requires(msg != null);
- System.Console.WriteLine("MultiLattice.Elt.Dump({0})", msg);
- Element[] epl = this.elementPerLattice;
- if (epl != null) {
- foreach (Element/*!*/ e in epl) {
- Contract.Assert(e != null);
- e.Dump(msg);
- }
- }
- }
-
- [Pure]
- public override ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
- List<IVariable/*!*/>/*!*/ list = new List<IVariable/*!*/>();
- for (int i = 0; i < this.Count; i++) {
- list.AddRange(cce.NonNull(this[i]).FreeVariables());
- }
- return cce.NonNull(list.AsReadOnly());
- }
-
- public static Elt/*!*/ Top(ArrayList/*<Lattice>*//*!*/ lattices) {
- Contract.Requires(lattices != null);
- Contract.Ensures(Contract.Result<Elt>() != null);
- Elt multiValue = new Elt(lattices.Count, false);
- for (int i = 0; i < lattices.Count; i++) {
- Lattice d = (Lattice/*!*/)cce.NonNull(lattices[i]);
- multiValue[d.Index] = d.Top;
- }
- Debug.Assert(multiValue.IsValid);
- return multiValue;
- }
-
-
- public static Elt/*!*/ Bottom(ArrayList/*<Lattice>*//*!*/ lattices) {
- Contract.Requires(lattices != null);
- Contract.Ensures(Contract.Result<Elt>() != null);
- Elt multiValue = new Elt(lattices.Count, true);
- for (int i = 0; i < lattices.Count; i++) {
- Lattice d = (Lattice/*!*/)cce.NonNull(lattices[i]);
- multiValue[d.Index] = d.Bottom;
- }
- Debug.Assert(multiValue.IsValid);
- return multiValue;
- }
-
- public bool IsValid {
- get {
- if (this.elementPerLattice == null) {
- return true; /*bottom*/
- }
-
- Element[] epl = this.elementPerLattice;
- for (int i = 0; i < epl.Length; i++) {
- if (epl[i] == null) {
- return false;
- }
- }
- return true;
- }
- }
-
- public int Count {
- get {
- return this.elementPerLattice == null ? 0 : this.elementPerLattice.Length;
- }
- }
-
- public bool Contains(int i) {
- return 0 <= i && i < this.Count;
- }
-
- public Element this[int i] // just syntactic sugar
- {
- get {
- Element[] epl = this.elementPerLattice;
- return epl == null ? null : epl[i];
- }
- set {
- Element[] epl = this.elementPerLattice;
- if (epl == null)
- return;
- epl[i] = value;
- }
- }
-
- } // class
-
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(lattices != null);
- Contract.Invariant(propExprFactory != null);
- }
-
- ArrayList/*<Lattice>*//*!*/ lattices = new ArrayList();
-
- private readonly IPropExprFactory/*!*/ propExprFactory;
-
-
- public MultiLattice(IPropExprFactory/*!*/ propExprFactory, IValueExprFactory/*!*/ valueExprFactory)
- : base(valueExprFactory) {
- Contract.Requires(valueExprFactory != null);
- Contract.Requires(propExprFactory != null);
- this.propExprFactory = propExprFactory;
- // base(valueExprFactory);
- }
-
-
-
- public void AddLattice(Lattice lattice) {
- this.lattices.Add(lattice);
- }
-
- private Lattice/*!*/ SubLattice(int i) {
- Contract.Ensures(Contract.Result<Lattice>() != null);
- return (Lattice/*!*/)cce.NonNull(this.lattices[i]);
- }
-
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return Elt.Top(this.lattices);
- }
- }
-
- public override Element/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return Elt.Bottom(this.lattices);
- }
- }
-
-
-
-
- public override bool IsBottom(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- // The program is errorneous/nonterminating if any subdomain knows it is.
- //
- if (e.elementPerLattice == null) {
- return true;
- }
- for (int i = 0; i < e.Count; i++) {
- if (SubLattice(i).IsBottom(cce.NonNull(e[i]))) {
- return true;
- }
- }
- return false;
- }
-
- public override bool IsTop(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- if (e.elementPerLattice == null) {
- return false;
- }
- // The multidomain knows nothing about the program only if no subdomain
- // knows anything about it.
- //
- for (int i = 0; i < e.Count; i++) {
- if (!SubLattice(i).IsTop(cce.NonNull(e[i]))) {
- return false;
- }
- }
- return true;
- }
-
- protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
-
- for (int i = 0; i < a.Count; i++) {
- Element thisElement = cce.NonNull(a[i]);
- Element thatElement = cce.NonNull(b[i]);
- if (thisElement.GetType() != thatElement.GetType()) {
- throw new System.InvalidOperationException(
- "AtMost called on MultiDomain objects with different lattices"
- );
- }
- if (!SubLattice(i).LowerThan(thisElement, thatElement)) {
- return false;
- }
- }
- return true;
- }
-
- protected override bool AtMost(Element/*!*/ first, ICombineNameMap/*!*/ firstToResult, Element/*!*/ second, ICombineNameMap/*!*/ secondToResult) {
- //Contract.Requires(secondToResult != null);
- //Contract.Requires(second != null);
- //Contract.Requires(firstToResult != null);
- //Contract.Requires(first != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
-
- for (int i = 0; i < a.Count; i++) {
- Element thisElement = cce.NonNull(a[i]);
- Element thatElement = cce.NonNull(b[i]);
- if (thisElement.GetType() != thatElement.GetType()) {
- throw new System.InvalidOperationException(
- "AtMost called on MultiDomain objects with different lattices"
- );
- }
- if (!SubLattice(i).LowerThan(thisElement, firstToResult, thatElement, secondToResult)) {
- return false;
- }
- }
- return true;
- }
-
-
- private enum CombineOp {
- Meet,
- Join,
- Widen
- }
-
- private Element/*!*/ Combine(Element/*!*/ first, ICombineNameMap/*?*/ firstToResult, Element/*!*/ second, ICombineNameMap/*?*/ secondToResult, CombineOp c) {
- Contract.Requires(second != null);
- Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
-
- int unionCount = System.Math.Max(a.Count, b.Count);
- Elt combined = new Elt(unionCount, IsBottom(a) && IsBottom(b));
- for (int i = 0; i < unionCount; i++) {
- bool thisExists = a.Contains(i);
- bool thatExists = b.Contains(i);
-
- if (thisExists && thatExists) {
- Lattice.Element suba = a[i];
- Lattice.Element subb = b[i];
- Contract.Assert(suba != null && subb != null);
-
- switch (c) {
- case CombineOp.Meet:
- combined[i] = SubLattice(i).Meet(suba, subb);
- break;
- case CombineOp.Join:
- if (firstToResult != null && secondToResult != null)
- combined[i] = SubLattice(i).Join(suba, firstToResult, subb, secondToResult);
- else
- combined[i] = SubLattice(i).Join(suba, subb);
- break;
- case CombineOp.Widen:
- if (firstToResult != null && secondToResult != null)
- combined[i] = SubLattice(i).Widen(suba, firstToResult, subb, secondToResult);
- else
- combined[i] = SubLattice(i).Widen(suba, subb);
- break;
- }
- } else if (thisExists) {
- combined[i] = a[i];
- } else {
- combined[i] = b[i];
- }
- }
- Debug.Assert(combined.IsValid);
- return combined;
- }
-
- public override Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires((b != null));
- //Contract.Requires((a != null));
- Contract.Ensures(Contract.Result<Element>() != null);
- return this.Combine(a, null, b, null, CombineOp.Join);
- }
-
- public override Element/*!*/ NontrivialJoin(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- //Contract.Requires((bToResult != null));
- //Contract.Requires((b != null));
- //Contract.Requires((aToResult != null));
- //Contract.Requires((a != null));
- Contract.Ensures(Contract.Result<Element>() != null);
- return this.Combine(a, aToResult, b, bToResult, CombineOp.Join);
- }
-
- public override Element/*!*/ NontrivialMeet(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires((b != null));
- //Contract.Requires((a != null));
- Contract.Ensures(Contract.Result<Element>() != null);
- return this.Combine(a, null, b, null, CombineOp.Meet);
- }
-
- public override Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b) {
- //Contract.Requires((b != null));
- //Contract.Requires((a != null));
- Contract.Ensures(Contract.Result<Element>() != null);
- return this.Combine(a, null, b, null, CombineOp.Widen);
- }
-
- public override Element/*!*/ Widen(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
- //Contract.Requires((bToResult != null));
- //Contract.Requires((b != null));
- //Contract.Requires((aToResult != null));
-
- //Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return this.Combine(a, aToResult, b, bToResult, CombineOp.Widen);
- }
-
- public override Element/*!*/ Eliminate(Element/*!*/ element, IVariable/*!*/ variable) {
- //Contract.Requires(variable != null);
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt e = (Elt)element;
- if (IsBottom(e)) {
- return e;
- }
- Elt newValue = new Elt(e.Count, false);
- for (int i = 0; i < this.lattices.Count; i++) {
- newValue[i] = SubLattice(i).Eliminate(cce.NonNull(e[i]), variable);
- }
- return newValue;
- }
-
-
- public override Element/*!*/ Constrain(Element/*!*/ element, IExpr/*!*/ expr) {
- //Contract.Requires(expr != null);
- //Contract.Requires(element != null);
- //Contract.Ensures(Contract.Result<Element>() != null);
- Elt e = (Elt)element;
- if (IsBottom(e)) {
- return e;
- }
- Elt newValue = new Elt(e.Count, false);
- for (int i = 0; i < this.lattices.Count; i++) {
- newValue[i] = SubLattice(i).Constrain(cce.NonNull(e[i]), expr);
- }
- return newValue;
- }
-
-
- public override Element/*!*/ Rename(Element/*!*/ element, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- //Contract.Requires(newName != null);
- //Contract.Requires(oldName != null);
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt e = (Elt)element;
- if (IsBottom(e)) {
- return e;
- }
- Elt newValue = new Elt(e.Count, false);
- for (int i = 0; i < this.lattices.Count; i++) {
- newValue[i] = SubLattice(i).Rename(cce.NonNull(e[i]), oldName, newName);
- }
- return newValue;
- }
-
-
- public override bool Understands(IFunctionSymbol/*!*/ f, IList/*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- bool result = false;
-
- for (int i = 0; i < this.lattices.Count; i++) {
- result = (result || SubLattice(i).Understands(f, args));
- }
-
- return result;
- }
-
-
- public override string/*!*/ ToString(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<string>() != null);
- Elt e = (Elt)element;
- return e.ToString();
- }
-
-
- public override IExpr/*!*/ ToPredicate(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- Elt e = (Elt)element;
-
- IExpr result = propExprFactory.True;
- for (int i = 0; i < e.Count; i++) {
- IExpr conjunct = SubLattice(i).ToPredicate(cce.NonNull(e[i]));
- Contract.Assert(conjunct != null);
-
- result = Prop.SimplifiedAnd(propExprFactory, conjunct, result);
- }
- return result;
- }
-
- /// <summary>
- /// Return an expression that is equivalent to the given expression that does not
- /// contain the given variable according to the lattice element and queryable.
- ///
- /// Simply asks each sublattice to try to generate an equivalent expression. We
- /// do not try to combine information to infer new equivalences here.
- /// </summary>
- /// <param name="e">The lattice element.</param>
- /// <param name="q">A queryable for asking addtional information.</param>
- /// <param name="expr">The expression to find an equivalent expression.</param>
- /// <param name="var">The variable to eliminate.</param>
- /// <returns>
- /// An equivalent expression to <paramref name="expr"/> without <paramref name="var"/>
- /// or null if not possible.
- /// </returns>
- public override IExpr/*?*/ EquivalentExpr(Element/*!*/ element, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, Set/*<IVariable!>*//*!*/ prohibitedVars) {
- //Contract.Requires(prohibitedVars != null);
- //Contract.Requires(var != null);
- //Contract.Requires(expr != null);
- //Contract.Requires(q != null);
- //Contract.Requires(element != null);
- Elt/*!*/ e = (Elt/*!*/)cce.NonNull(element);
-
- for (int i = 0; i < e.Count; i++) {
- IExpr equivexpr = SubLattice(i).EquivalentExpr(cce.NonNull(e[i]), q, expr, var, prohibitedVars);
-
- if (equivexpr != null)
- return equivexpr;
- }
-
- return null;
- }
-
-
- public override Answer CheckPredicate(Element/*!*/ element, IExpr/*!*/ pred) {
- //Contract.Requires(pred != null);
- //Contract.Requires(element != null);
- Elt/*!*/ e = (Elt/*!*/)cce.NonNull(element);
-
- for (int i = 0; i < e.Count; i++) {
- Answer ans = SubLattice(i).CheckPredicate(cce.NonNull(e[i]), pred);
-
- if (ans == Answer.Yes || ans == Answer.No)
- return ans;
- }
-
- return Answer.Maybe;
- }
-
-
- public override Answer CheckVariableDisequality(Element/*!*/ element, IVariable/*!*/ var1, IVariable/*!*/ var2) {
- //Contract.Requires(var2 != null);
- //Contract.Requires(var1 != null);
- //Contract.Requires(element != null);
- Elt/*!*/ e = (Elt/*!*/)cce.NonNull(element);
-
- for (int i = 0; i < e.Count; i++) {
- Answer ans = SubLattice(i).CheckVariableDisequality(cce.NonNull(e[i]), var1, var2);
-
- if (ans == Answer.Yes || ans == Answer.No)
- return ans;
- }
-
- return Answer.Maybe;
- }
-
-
-
- public override void Validate() {
- base.Validate();
- foreach (Lattice/*!*/ l in lattices) {
- Contract.Assert(l != null);
- l.Validate();
- }
- }
-
- /// <summary>
- /// The enumeration over a MultiLattice is its sublattices.
- /// </summary>
- /// <returns>An enumerator over the sublattices.</returns>
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- public IEnumerator/*<Lattice!>*//*!*/ GetEnumerator() {
- Contract.Ensures(Contract.Result<IEnumerator>() != null);
- return lattices.GetEnumerator();
- }
-
- /// <summary>
- /// Return an enumerable over a mapping of sublattices to the their corresponding
- /// lattice elements given a MultiLattice element.
- /// </summary>
- /// <param name="element">The MultiLattice element.</param>
- /// <returns>
- /// An enumerable that yields an IDictionaryEnumerator over the
- /// (Lattice, Lattice.Element) pairs.
- /// </returns>
- public IEnumerable/*!*/ Subelements(Element/*!*/ element) {
- Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
- return new SubelementsEnumerable(this, (Elt/*!*/)cce.NonNull(element));
- }
-
- /// <summary>
- /// An enumerator over the sublattices and elements.
- /// </summary>
- private sealed class SubelementsEnumerable : IEnumerable {
- private sealed class SubelementsEnumerator : IDictionaryEnumerator {
- private readonly IEnumerator/*<Lattice!>*//*!*/ multiLatticeIter;
- private readonly IEnumerator/*<Lattice.Element!>*//*!*/ multiElementIter;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(multiElementIter != null);
- Contract.Invariant(multiLatticeIter != null);
- }
-
-
- public SubelementsEnumerator(MultiLattice/*!*/ multiLattice, Elt/*!*/ multiElement) {
- Contract.Requires(multiElement != null);
- Contract.Requires(multiLattice != null);
- Contract.Requires(multiElement.elementPerLattice != null);
- this.multiLatticeIter = multiLattice.lattices.GetEnumerator();
- this.multiElementIter = multiElement.elementPerLattice.GetEnumerator();
- // base();
- }
-
- public DictionaryEntry Entry {
- get {
- return new DictionaryEntry(cce.NonNull(multiLatticeIter.Current), multiElementIter.Current);
- }
- }
-
- public object Key {
- get {
- return multiLatticeIter.Current;
- }
- }
-
- public object Value {
- get {
- return multiElementIter.Current;
- }
- }
-
- public object Current {
- get {
- return this.Entry;
- }
- }
-
- public bool MoveNext() {
- return multiLatticeIter.MoveNext() && multiElementIter.MoveNext();
- }
-
- public void Reset() {
- multiLatticeIter.Reset();
- multiElementIter.Reset();
- }
- }
-
- private MultiLattice/*!*/ multiLattice;
- private Elt/*!*/ multiElement;
-
- public SubelementsEnumerable(MultiLattice/*!*/ multiLattice, Elt/*!*/ multiElement) {
- Contract.Requires(multiElement != null);
- Contract.Requires(multiLattice != null);
- this.multiLattice = multiLattice;
- this.multiElement = multiElement;
- // base();
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- public IEnumerator/*!*/ GetEnumerator() {
- Contract.Ensures(Contract.Result<IEnumerator>() != null);
- return new SubelementsEnumerator(multiLattice, multiElement);
- }
- }
-
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System.Diagnostics.Contracts;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics;
+ using Microsoft.AbstractInterpretationFramework.Collections;
+
+ using Microsoft.Boogie;
+
+ using ISet = Microsoft.Boogie.GSet<object>;
+ using Set = Microsoft.Boogie.GSet<object>;
+
+
+ /// <summary>
+ /// The cartesian product lattice.
+ /// </summary>
+ public class MultiLattice : Lattice, IEnumerable {
+ internal class Elt : Element {
+ public /*MaybeNull*/Element[] elementPerLattice;
+
+ public Elt(int domainCount, bool isBottom) {
+ this.elementPerLattice = (domainCount == 0 && isBottom) ? null : new Element[domainCount];
+ }
+
+ private Elt(Elt/*!*/ other) {
+ Contract.Requires(other != null);
+ Element[] otherEPL = other.elementPerLattice;
+ if (otherEPL != null) {
+ Element[] newEPL = new Element[otherEPL.Length];
+ for (int i = 0; i < newEPL.Length; i++) {
+ newEPL[i] = (Element)(cce.NonNull(otherEPL[i])).Clone();
+ }
+ this.elementPerLattice = newEPL;
+ }
+ }
+
+ public override Element/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(this);
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ // string s = "MultiLattice+Elt{";
+ // string sep = "";
+ // Element[] epl = this.elementPerLattice;
+ // if (epl != null)
+ // {
+ // foreach (Element! e in epl)
+ // {
+ // s += sep + e.ToString();
+ // sep = ", ";
+ // }
+ // }
+ // return s + "}";
+ if (elementPerLattice == null)
+ return "";
+ System.Text.StringBuilder buffer = new System.Text.StringBuilder();
+ for (int i = 0; i < this.Count; i++) {
+ if (i > 0)
+ buffer.Append("; ");
+ buffer.AppendFormat("{0}", elementPerLattice[i]);
+ }
+ return buffer.ToString();
+ }
+
+ public override void Dump(string/*!*/ msg) {
+ //Contract.Requires(msg != null);
+ System.Console.WriteLine("MultiLattice.Elt.Dump({0})", msg);
+ Element[] epl = this.elementPerLattice;
+ if (epl != null) {
+ foreach (Element/*!*/ e in epl) {
+ Contract.Assert(e != null);
+ e.Dump(msg);
+ }
+ }
+ }
+
+ [Pure]
+ public override ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
+ List<IVariable/*!*/>/*!*/ list = new List<IVariable/*!*/>();
+ for (int i = 0; i < this.Count; i++) {
+ list.AddRange(cce.NonNull(this[i]).FreeVariables());
+ }
+ return cce.NonNull(list.AsReadOnly());
+ }
+
+ public static Elt/*!*/ Top(ArrayList/*<Lattice>*//*!*/ lattices) {
+ Contract.Requires(lattices != null);
+ Contract.Ensures(Contract.Result<Elt>() != null);
+ Elt multiValue = new Elt(lattices.Count, false);
+ for (int i = 0; i < lattices.Count; i++) {
+ Lattice d = (Lattice/*!*/)cce.NonNull(lattices[i]);
+ multiValue[d.Index] = d.Top;
+ }
+ Debug.Assert(multiValue.IsValid);
+ return multiValue;
+ }
+
+
+ public static Elt/*!*/ Bottom(ArrayList/*<Lattice>*//*!*/ lattices) {
+ Contract.Requires(lattices != null);
+ Contract.Ensures(Contract.Result<Elt>() != null);
+ Elt multiValue = new Elt(lattices.Count, true);
+ for (int i = 0; i < lattices.Count; i++) {
+ Lattice d = (Lattice/*!*/)cce.NonNull(lattices[i]);
+ multiValue[d.Index] = d.Bottom;
+ }
+ Debug.Assert(multiValue.IsValid);
+ return multiValue;
+ }
+
+ public bool IsValid {
+ get {
+ if (this.elementPerLattice == null) {
+ return true; /*bottom*/
+ }
+
+ Element[] epl = this.elementPerLattice;
+ for (int i = 0; i < epl.Length; i++) {
+ if (epl[i] == null) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ public int Count {
+ get {
+ return this.elementPerLattice == null ? 0 : this.elementPerLattice.Length;
+ }
+ }
+
+ public bool Contains(int i) {
+ return 0 <= i && i < this.Count;
+ }
+
+ public Element this[int i] // just syntactic sugar
+ {
+ get {
+ Element[] epl = this.elementPerLattice;
+ return epl == null ? null : epl[i];
+ }
+ set {
+ Element[] epl = this.elementPerLattice;
+ if (epl == null)
+ return;
+ epl[i] = value;
+ }
+ }
+
+ } // class
+
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(lattices != null);
+ Contract.Invariant(propExprFactory != null);
+ }
+
+ ArrayList/*<Lattice>*//*!*/ lattices = new ArrayList();
+
+ private readonly IPropExprFactory/*!*/ propExprFactory;
+
+
+ public MultiLattice(IPropExprFactory/*!*/ propExprFactory, IValueExprFactory/*!*/ valueExprFactory)
+ : base(valueExprFactory) {
+ Contract.Requires(valueExprFactory != null);
+ Contract.Requires(propExprFactory != null);
+ this.propExprFactory = propExprFactory;
+ // base(valueExprFactory);
+ }
+
+
+
+ public void AddLattice(Lattice lattice) {
+ this.lattices.Add(lattice);
+ }
+
+ private Lattice/*!*/ SubLattice(int i) {
+ Contract.Ensures(Contract.Result<Lattice>() != null);
+ return (Lattice/*!*/)cce.NonNull(this.lattices[i]);
+ }
+
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Elt.Top(this.lattices);
+ }
+ }
+
+ public override Element/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Elt.Bottom(this.lattices);
+ }
+ }
+
+
+
+
+ public override bool IsBottom(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ // The program is errorneous/nonterminating if any subdomain knows it is.
+ //
+ if (e.elementPerLattice == null) {
+ return true;
+ }
+ for (int i = 0; i < e.Count; i++) {
+ if (SubLattice(i).IsBottom(cce.NonNull(e[i]))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public override bool IsTop(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ if (e.elementPerLattice == null) {
+ return false;
+ }
+ // The multidomain knows nothing about the program only if no subdomain
+ // knows anything about it.
+ //
+ for (int i = 0; i < e.Count; i++) {
+ if (!SubLattice(i).IsTop(cce.NonNull(e[i]))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+
+ for (int i = 0; i < a.Count; i++) {
+ Element thisElement = cce.NonNull(a[i]);
+ Element thatElement = cce.NonNull(b[i]);
+ if (thisElement.GetType() != thatElement.GetType()) {
+ throw new System.InvalidOperationException(
+ "AtMost called on MultiDomain objects with different lattices"
+ );
+ }
+ if (!SubLattice(i).LowerThan(thisElement, thatElement)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected override bool AtMost(Element/*!*/ first, ICombineNameMap/*!*/ firstToResult, Element/*!*/ second, ICombineNameMap/*!*/ secondToResult) {
+ //Contract.Requires(secondToResult != null);
+ //Contract.Requires(second != null);
+ //Contract.Requires(firstToResult != null);
+ //Contract.Requires(first != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+
+ for (int i = 0; i < a.Count; i++) {
+ Element thisElement = cce.NonNull(a[i]);
+ Element thatElement = cce.NonNull(b[i]);
+ if (thisElement.GetType() != thatElement.GetType()) {
+ throw new System.InvalidOperationException(
+ "AtMost called on MultiDomain objects with different lattices"
+ );
+ }
+ if (!SubLattice(i).LowerThan(thisElement, firstToResult, thatElement, secondToResult)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ private enum CombineOp {
+ Meet,
+ Join,
+ Widen
+ }
+
+ private Element/*!*/ Combine(Element/*!*/ first, ICombineNameMap/*?*/ firstToResult, Element/*!*/ second, ICombineNameMap/*?*/ secondToResult, CombineOp c) {
+ Contract.Requires(second != null);
+ Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+
+ int unionCount = System.Math.Max(a.Count, b.Count);
+ Elt combined = new Elt(unionCount, IsBottom(a) && IsBottom(b));
+ for (int i = 0; i < unionCount; i++) {
+ bool thisExists = a.Contains(i);
+ bool thatExists = b.Contains(i);
+
+ if (thisExists && thatExists) {
+ Lattice.Element suba = a[i];
+ Lattice.Element subb = b[i];
+ Contract.Assert(suba != null && subb != null);
+
+ switch (c) {
+ case CombineOp.Meet:
+ combined[i] = SubLattice(i).Meet(suba, subb);
+ break;
+ case CombineOp.Join:
+ if (firstToResult != null && secondToResult != null)
+ combined[i] = SubLattice(i).Join(suba, firstToResult, subb, secondToResult);
+ else
+ combined[i] = SubLattice(i).Join(suba, subb);
+ break;
+ case CombineOp.Widen:
+ if (firstToResult != null && secondToResult != null)
+ combined[i] = SubLattice(i).Widen(suba, firstToResult, subb, secondToResult);
+ else
+ combined[i] = SubLattice(i).Widen(suba, subb);
+ break;
+ }
+ } else if (thisExists) {
+ combined[i] = a[i];
+ } else {
+ combined[i] = b[i];
+ }
+ }
+ Debug.Assert(combined.IsValid);
+ return combined;
+ }
+
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires((b != null));
+ //Contract.Requires((a != null));
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return this.Combine(a, null, b, null, CombineOp.Join);
+ }
+
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ //Contract.Requires((bToResult != null));
+ //Contract.Requires((b != null));
+ //Contract.Requires((aToResult != null));
+ //Contract.Requires((a != null));
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return this.Combine(a, aToResult, b, bToResult, CombineOp.Join);
+ }
+
+ public override Element/*!*/ NontrivialMeet(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires((b != null));
+ //Contract.Requires((a != null));
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return this.Combine(a, null, b, null, CombineOp.Meet);
+ }
+
+ public override Element/*!*/ Widen(Element/*!*/ a, Element/*!*/ b) {
+ //Contract.Requires((b != null));
+ //Contract.Requires((a != null));
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return this.Combine(a, null, b, null, CombineOp.Widen);
+ }
+
+ public override Element/*!*/ Widen(Element/*!*/ a, ICombineNameMap/*!*/ aToResult, Element/*!*/ b, ICombineNameMap/*!*/ bToResult) {
+ //Contract.Requires((bToResult != null));
+ //Contract.Requires((b != null));
+ //Contract.Requires((aToResult != null));
+
+ //Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return this.Combine(a, aToResult, b, bToResult, CombineOp.Widen);
+ }
+
+ public override Element/*!*/ Eliminate(Element/*!*/ element, IVariable/*!*/ variable) {
+ //Contract.Requires(variable != null);
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt e = (Elt)element;
+ if (IsBottom(e)) {
+ return e;
+ }
+ Elt newValue = new Elt(e.Count, false);
+ for (int i = 0; i < this.lattices.Count; i++) {
+ newValue[i] = SubLattice(i).Eliminate(cce.NonNull(e[i]), variable);
+ }
+ return newValue;
+ }
+
+
+ public override Element/*!*/ Constrain(Element/*!*/ element, IExpr/*!*/ expr) {
+ //Contract.Requires(expr != null);
+ //Contract.Requires(element != null);
+ //Contract.Ensures(Contract.Result<Element>() != null);
+ Elt e = (Elt)element;
+ if (IsBottom(e)) {
+ return e;
+ }
+ Elt newValue = new Elt(e.Count, false);
+ for (int i = 0; i < this.lattices.Count; i++) {
+ newValue[i] = SubLattice(i).Constrain(cce.NonNull(e[i]), expr);
+ }
+ return newValue;
+ }
+
+
+ public override Element/*!*/ Rename(Element/*!*/ element, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ //Contract.Requires(newName != null);
+ //Contract.Requires(oldName != null);
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt e = (Elt)element;
+ if (IsBottom(e)) {
+ return e;
+ }
+ Elt newValue = new Elt(e.Count, false);
+ for (int i = 0; i < this.lattices.Count; i++) {
+ newValue[i] = SubLattice(i).Rename(cce.NonNull(e[i]), oldName, newName);
+ }
+ return newValue;
+ }
+
+
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList/*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ bool result = false;
+
+ for (int i = 0; i < this.lattices.Count; i++) {
+ result = (result || SubLattice(i).Understands(f, args));
+ }
+
+ return result;
+ }
+
+
+ public override string/*!*/ ToString(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ Elt e = (Elt)element;
+ return e.ToString();
+ }
+
+
+ public override IExpr/*!*/ ToPredicate(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ Elt e = (Elt)element;
+
+ IExpr result = propExprFactory.True;
+ for (int i = 0; i < e.Count; i++) {
+ IExpr conjunct = SubLattice(i).ToPredicate(cce.NonNull(e[i]));
+ Contract.Assert(conjunct != null);
+
+ result = Prop.SimplifiedAnd(propExprFactory, conjunct, result);
+ }
+ return result;
+ }
+
+ /// <summary>
+ /// Return an expression that is equivalent to the given expression that does not
+ /// contain the given variable according to the lattice element and queryable.
+ ///
+ /// Simply asks each sublattice to try to generate an equivalent expression. We
+ /// do not try to combine information to infer new equivalences here.
+ /// </summary>
+ /// <param name="e">The lattice element.</param>
+ /// <param name="q">A queryable for asking addtional information.</param>
+ /// <param name="expr">The expression to find an equivalent expression.</param>
+ /// <param name="var">The variable to eliminate.</param>
+ /// <returns>
+ /// An equivalent expression to <paramref name="expr"/> without <paramref name="var"/>
+ /// or null if not possible.
+ /// </returns>
+ public override IExpr/*?*/ EquivalentExpr(Element/*!*/ element, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, Set/*<IVariable!>*//*!*/ prohibitedVars) {
+ //Contract.Requires(prohibitedVars != null);
+ //Contract.Requires(var != null);
+ //Contract.Requires(expr != null);
+ //Contract.Requires(q != null);
+ //Contract.Requires(element != null);
+ Elt/*!*/ e = (Elt/*!*/)cce.NonNull(element);
+
+ for (int i = 0; i < e.Count; i++) {
+ IExpr equivexpr = SubLattice(i).EquivalentExpr(cce.NonNull(e[i]), q, expr, var, prohibitedVars);
+
+ if (equivexpr != null)
+ return equivexpr;
+ }
+
+ return null;
+ }
+
+
+ public override Answer CheckPredicate(Element/*!*/ element, IExpr/*!*/ pred) {
+ //Contract.Requires(pred != null);
+ //Contract.Requires(element != null);
+ Elt/*!*/ e = (Elt/*!*/)cce.NonNull(element);
+
+ for (int i = 0; i < e.Count; i++) {
+ Answer ans = SubLattice(i).CheckPredicate(cce.NonNull(e[i]), pred);
+
+ if (ans == Answer.Yes || ans == Answer.No)
+ return ans;
+ }
+
+ return Answer.Maybe;
+ }
+
+
+ public override Answer CheckVariableDisequality(Element/*!*/ element, IVariable/*!*/ var1, IVariable/*!*/ var2) {
+ //Contract.Requires(var2 != null);
+ //Contract.Requires(var1 != null);
+ //Contract.Requires(element != null);
+ Elt/*!*/ e = (Elt/*!*/)cce.NonNull(element);
+
+ for (int i = 0; i < e.Count; i++) {
+ Answer ans = SubLattice(i).CheckVariableDisequality(cce.NonNull(e[i]), var1, var2);
+
+ if (ans == Answer.Yes || ans == Answer.No)
+ return ans;
+ }
+
+ return Answer.Maybe;
+ }
+
+
+
+ public override void Validate() {
+ base.Validate();
+ foreach (Lattice/*!*/ l in lattices) {
+ Contract.Assert(l != null);
+ l.Validate();
+ }
+ }
+
+ /// <summary>
+ /// The enumeration over a MultiLattice is its sublattices.
+ /// </summary>
+ /// <returns>An enumerator over the sublattices.</returns>
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ public IEnumerator/*<Lattice!>*//*!*/ GetEnumerator() {
+ Contract.Ensures(Contract.Result<IEnumerator>() != null);
+ return lattices.GetEnumerator();
+ }
+
+ /// <summary>
+ /// Return an enumerable over a mapping of sublattices to the their corresponding
+ /// lattice elements given a MultiLattice element.
+ /// </summary>
+ /// <param name="element">The MultiLattice element.</param>
+ /// <returns>
+ /// An enumerable that yields an IDictionaryEnumerator over the
+ /// (Lattice, Lattice.Element) pairs.
+ /// </returns>
+ public IEnumerable/*!*/ Subelements(Element/*!*/ element) {
+ Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+ return new SubelementsEnumerable(this, (Elt/*!*/)cce.NonNull(element));
+ }
+
+ /// <summary>
+ /// An enumerator over the sublattices and elements.
+ /// </summary>
+ private sealed class SubelementsEnumerable : IEnumerable {
+ private sealed class SubelementsEnumerator : IDictionaryEnumerator {
+ private readonly IEnumerator/*<Lattice!>*//*!*/ multiLatticeIter;
+ private readonly IEnumerator/*<Lattice.Element!>*//*!*/ multiElementIter;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(multiElementIter != null);
+ Contract.Invariant(multiLatticeIter != null);
+ }
+
+
+ public SubelementsEnumerator(MultiLattice/*!*/ multiLattice, Elt/*!*/ multiElement) {
+ Contract.Requires(multiElement != null);
+ Contract.Requires(multiLattice != null);
+ Contract.Requires(multiElement.elementPerLattice != null);
+ this.multiLatticeIter = multiLattice.lattices.GetEnumerator();
+ this.multiElementIter = multiElement.elementPerLattice.GetEnumerator();
+ // base();
+ }
+
+ public DictionaryEntry Entry {
+ get {
+ return new DictionaryEntry(cce.NonNull(multiLatticeIter.Current), multiElementIter.Current);
+ }
+ }
+
+ public object Key {
+ get {
+ return multiLatticeIter.Current;
+ }
+ }
+
+ public object Value {
+ get {
+ return multiElementIter.Current;
+ }
+ }
+
+ public object Current {
+ get {
+ return this.Entry;
+ }
+ }
+
+ public bool MoveNext() {
+ return multiLatticeIter.MoveNext() && multiElementIter.MoveNext();
+ }
+
+ public void Reset() {
+ multiLatticeIter.Reset();
+ multiElementIter.Reset();
+ }
+ }
+
+ private MultiLattice/*!*/ multiLattice;
+ private Elt/*!*/ multiElement;
+
+ public SubelementsEnumerable(MultiLattice/*!*/ multiLattice, Elt/*!*/ multiElement) {
+ Contract.Requires(multiElement != null);
+ Contract.Requires(multiLattice != null);
+ this.multiLattice = multiLattice;
+ this.multiElement = multiElement;
+ // base();
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ public IEnumerator/*!*/ GetEnumerator() {
+ Contract.Ensures(Contract.Result<IEnumerator>() != null);
+ return new SubelementsEnumerator(multiLattice, multiElement);
+ }
+ }
+
+
+ }
+}
diff --git a/Source/AIFramework/Mutable.cs b/Source/AIFramework/Mutable.cs
index 7592aa6a..fff0476e 100644
--- a/Source/AIFramework/Mutable.cs
+++ b/Source/AIFramework/Mutable.cs
@@ -1,137 +1,137 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System.Diagnostics.Contracts;
-namespace Microsoft.AbstractInterpretationFramework.Collections {
- using System.Collections;
- using System.Diagnostics.Contracts;
-
- /// <summary>
- /// Extend sets for using as a IWorkList.
- /// </summary>
- public class WorkSet : Microsoft.Boogie.GSet<object>, Microsoft.Boogie.IWorkList {
-
- // See Bug #148 for an explanation of why this is here.
- // Without it, the contract inheritance rules will complain since it
- // has nowhere to attach the out-of-band contract it gets from
- // ICollection.Count that it gets from IWorkList.
- public override int Count {
- get {
- return base.Count;
- }
- }
-
- [Pure]
- public bool IsEmpty() {
- return Count == 0;
- }
-
- /// <summary>
- /// Pull an element out of the workset.
- /// </summary>
- public object Pull() {
- IEnumerator iter = GetEnumerator();
- iter.MoveNext();
-
- object result = cce.NonNull(iter.Current);
- Remove(result);
-
- return result;
- }
-
- bool Microsoft.Boogie.IWorkList.Add(object o) {
- if (o == null)
- throw new System.ArgumentNullException();
- this.Add(o);
- return true;
- }
- bool Microsoft.Boogie.IWorkList.AddAll(IEnumerable objs) {
- if (objs == null)
- throw new System.ArgumentNullException();
- return this.AddAll(objs);
- }
-
- // ICollection members
- public void CopyTo(System.Array/*!*/ a, int i) {
- //Contract.Requires(a != null);
- if (this.Count > a.Length - i)
- throw new System.ArgumentException();
- int j = i;
- foreach (object o in this) {
- a.SetValue(o, j++);
- }
- return;
- }
- object/*!*/ ICollection.SyncRoot {
- [Pure]
- get {
- Contract.Ensures(Contract.Result<object>() != null);
- return this;
- }
- }
- public bool IsSynchronized {
- get {
- return false;
- }
- }
-
- }
-}
-
-namespace Microsoft.AbstractInterpretationFramework.Collections.Generic {
- using System.Collections.Generic;
-
- public class HashMultiset<T> {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(dict != null);
- }
-
- private readonly IDictionary<T, int>/*!*/ dict;
-
- //Contract.Invariant(Contract.ForAll(dict , entry => entry.Value >= 1));
-
- public HashMultiset() {
- this.dict = new Dictionary<T, int>();
- // base();
- }
-
- public HashMultiset(int size) {
- this.dict = new Dictionary<T, int>(size);
- // base();
- }
-
- public void Add(T t) {
- cce.BeginExpose(this);
- {
- if (dict.ContainsKey(t)) {
- dict[t] = dict[t] + 1;
- } else {
- dict.Add(t, 1);
- }
- }
- cce.EndExpose();
- }
-
- public void Remove(T t) {
- if (dict.ContainsKey(t)) {
- cce.BeginExpose(this);
- {
- int count = dict[t];
- if (count == 1) {
- dict.Remove(t);
- } else {
- dict[t] = count - 1;
- }
- }
- cce.EndExpose();
- }
- }
-
- public bool Contains(T t) {
- return dict.ContainsKey(t);
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System.Diagnostics.Contracts;
+namespace Microsoft.AbstractInterpretationFramework.Collections {
+ using System.Collections;
+ using System.Diagnostics.Contracts;
+
+ /// <summary>
+ /// Extend sets for using as a IWorkList.
+ /// </summary>
+ public class WorkSet : Microsoft.Boogie.GSet<object>, Microsoft.Boogie.IWorkList {
+
+ // See Bug #148 for an explanation of why this is here.
+ // Without it, the contract inheritance rules will complain since it
+ // has nowhere to attach the out-of-band contract it gets from
+ // ICollection.Count that it gets from IWorkList.
+ public override int Count {
+ get {
+ return base.Count;
+ }
+ }
+
+ [Pure]
+ public bool IsEmpty() {
+ return Count == 0;
+ }
+
+ /// <summary>
+ /// Pull an element out of the workset.
+ /// </summary>
+ public object Pull() {
+ IEnumerator iter = GetEnumerator();
+ iter.MoveNext();
+
+ object result = cce.NonNull(iter.Current);
+ Remove(result);
+
+ return result;
+ }
+
+ bool Microsoft.Boogie.IWorkList.Add(object o) {
+ if (o == null)
+ throw new System.ArgumentNullException();
+ this.Add(o);
+ return true;
+ }
+ bool Microsoft.Boogie.IWorkList.AddAll(IEnumerable objs) {
+ if (objs == null)
+ throw new System.ArgumentNullException();
+ return this.AddAll(objs);
+ }
+
+ // ICollection members
+ public void CopyTo(System.Array/*!*/ a, int i) {
+ //Contract.Requires(a != null);
+ if (this.Count > a.Length - i)
+ throw new System.ArgumentException();
+ int j = i;
+ foreach (object o in this) {
+ a.SetValue(o, j++);
+ }
+ return;
+ }
+ object/*!*/ ICollection.SyncRoot {
+ [Pure]
+ get {
+ Contract.Ensures(Contract.Result<object>() != null);
+ return this;
+ }
+ }
+ public bool IsSynchronized {
+ get {
+ return false;
+ }
+ }
+
+ }
+}
+
+namespace Microsoft.AbstractInterpretationFramework.Collections.Generic {
+ using System.Collections.Generic;
+
+ public class HashMultiset<T> {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(dict != null);
+ }
+
+ private readonly IDictionary<T, int>/*!*/ dict;
+
+ //Contract.Invariant(Contract.ForAll(dict , entry => entry.Value >= 1));
+
+ public HashMultiset() {
+ this.dict = new Dictionary<T, int>();
+ // base();
+ }
+
+ public HashMultiset(int size) {
+ this.dict = new Dictionary<T, int>(size);
+ // base();
+ }
+
+ public void Add(T t) {
+ cce.BeginExpose(this);
+ {
+ if (dict.ContainsKey(t)) {
+ dict[t] = dict[t] + 1;
+ } else {
+ dict.Add(t, 1);
+ }
+ }
+ cce.EndExpose();
+ }
+
+ public void Remove(T t) {
+ if (dict.ContainsKey(t)) {
+ cce.BeginExpose(this);
+ {
+ int count = dict[t];
+ if (count == 1) {
+ dict.Remove(t);
+ } else {
+ dict[t] = count - 1;
+ }
+ }
+ cce.EndExpose();
+ }
+ }
+
+ public bool Contains(T t) {
+ return dict.ContainsKey(t);
+ }
+ }
+}
diff --git a/Source/AIFramework/Polyhedra/LinearConstraint.cs b/Source/AIFramework/Polyhedra/LinearConstraint.cs
index ab5e14f8..82264364 100644
--- a/Source/AIFramework/Polyhedra/LinearConstraint.cs
+++ b/Source/AIFramework/Polyhedra/LinearConstraint.cs
@@ -1,545 +1,545 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System.Diagnostics.Contracts;
-namespace Microsoft.AbstractInterpretationFramework {
- using System;
- //using System.Compiler;
- using System.Collections;
- using Microsoft.Basetypes;
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System.Diagnostics.Contracts;
+namespace Microsoft.AbstractInterpretationFramework {
+ using System;
+ //using System.Compiler;
+ using System.Collections;
+ using Microsoft.Basetypes;
using Set = Microsoft.Boogie.GSet<object>;
- using IMutableSet = Microsoft.Boogie.GSet<object>;
- using HashSet = Microsoft.Boogie.GSet<object>;
- using ISet = Microsoft.Boogie.GSet<object>;
-
-
- /// <summary>
- /// Represents a single linear constraint, coefficients are stored as Rationals.
- /// </summary>
- public class LinearConstraint {
-
- public enum ConstraintRelation {
- EQ, // equal
- LE, // less-than or equal
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(coefficients != null);
- }
-
- public readonly ConstraintRelation Relation;
- internal Hashtable /*IVariable->Rational*//*!*/ coefficients = new Hashtable /*IVariable->Rational*/ ();
- internal Rational rhs;
-
- public LinearConstraint(ConstraintRelation rel) {
- Relation = rel;
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- string s = null;
- foreach (DictionaryEntry /*IVariable->Rational*/ entry in coefficients) {
- if (s == null) {
- s = "";
- } else {
- s += " + ";
- }
- s += String.Format("{0}*{1}", entry.Value, entry.Key);
- }
- System.Diagnostics.Debug.Assert(s != null, "malformed LinearConstraint: no variables");
- s += String.Format(" {0} {1}", Relation == ConstraintRelation.EQ ? "==" : "<=", rhs);
- return s;
- }
-
-
-#if DONT_KNOW_HOW_TO_TAKE_THE_TYPE_OF_AN_IVARIABLE_YET
- public bool IsOverIntegers
- {
- get
- {
- foreach (DictionaryEntry /*IVariable->Rational*/ entry in coefficients)
- {
- IVariable var = (IVariable)entry.Key;
- if ( ! var.TypedIdent.Type.IsInt) { return false; }
- }
- return true;
- }
- }
-#endif
-
-
- /// <summary>
- /// Note: This method requires that all dimensions are of type Variable, something that's
- /// not required elsewhere in this class.
- /// </summary>
- /// <returns></returns>
- public IExpr/*!*/ ConvertToExpression(ILinearExprFactory/*!*/ factory) {
- Contract.Requires(factory != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IExpr leftSum = null;
- IExpr rightSum = null;
- foreach (DictionaryEntry /*object->Rational*/ entry in coefficients) {
- IVariable var = (IVariable)entry.Key;
- Rational coeff = (Rational)(cce.NonNull(entry.Value));
- if (coeff.IsPositive) {
- leftSum = AddTerm(factory, leftSum, coeff, var);
- } else if (coeff.IsNegative) {
- rightSum = AddTerm(factory, rightSum, -coeff, var);
- } else {
- // ignore the term is coeff==0
- }
- }
-
- if (leftSum == null && rightSum == null) {
- // there are no variables in this constraint
- if (Relation == ConstraintRelation.EQ ? rhs.IsZero : rhs.IsNonNegative) {
- return factory.True;
- } else {
- return factory.False;
- }
- }
-
- if (leftSum == null || (rightSum != null && rhs.IsNegative)) {
- // show the constant on the left side
- leftSum = AddTerm(factory, leftSum, -rhs, null);
- } else if (rightSum == null || rhs.IsPositive) {
- // show the constant on the right side
- rightSum = AddTerm(factory, rightSum, rhs, null);
- }
-
- Contract.Assert(leftSum != null);
- Contract.Assert(rightSum != null);
- return Relation == ConstraintRelation.EQ ? factory.Eq(leftSum, rightSum) : factory.AtMost(leftSum, rightSum);
- }
-
- /// <summary>
- /// Returns an expression that denotes sum + r*x.
- /// If sum==null, drops the "sum +".
- /// If x==null, drops the "*x".
- /// if x!=null and r==1, drops the "r*".
- /// </summary>
- /// <param name="factory"></param>
- /// <param name="sum"></param>
- /// <param name="r"></param>
- /// <param name="x"></param>
- static IExpr/*!*/ AddTerm(ILinearExprFactory/*!*/ factory, /*MayBeNull*/ IExpr sum, Rational r, /*MayBeNull*/ IVariable x) {
- Contract.Requires(factory != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IExpr/*!*/ product = factory.Term(r, x);
- Contract.Assert(product != null);
- if (sum == null) {
- return product;
- } else {
- return factory.Add(sum, product);
- }
- }
- public System.Collections.Generic.IEnumerable<IVariable> GetDefinedDimensionsGeneric() {
- Contract.Ensures(Contract.Result<System.Collections.Generic.IEnumerable<IVariable>>() != null);
- foreach (IVariable/*!*/ dim in coefficients.Keys) {
- Contract.Assert(dim != null);
- yield return dim;
- }
- }
- public ISet /*IVariable!*//*!*/ GetDefinedDimensions() {
- Contract.Ensures(Contract.Result<ISet>() != null);
- HashSet /*IVariable!*/ dims = new HashSet /*IVariable!*/ (coefficients.Count);
- int j = 0;
- foreach (IVariable/*!*/ dim in coefficients.Keys) {
- Contract.Assert(dim != null);
- dims.Add(dim);
- j++;
- }
- System.Diagnostics.Debug.Assert(j == coefficients.Count);
- return dims;
- }
-
- /// <summary>
- /// Returns true iff all of the coefficients in the constraint are 0. In that
- /// case, the constraint has the form 0 &lt;= C for some constant C; hence, the
- /// constraint is either unsatisfiable or trivially satisfiable.
- /// </summary>
- /// <returns></returns>
- public bool IsConstant() {
- foreach (Rational coeff in coefficients.Values) {
- if (coeff.IsNonZero) {
- return false;
- }
- }
- return true;
- }
-
- /// <summary>
- /// For an equality constraint, returns 0 == rhs.
- /// For an inequality constraint, returns 0 &lt;= rhs.
- /// </summary>
- public bool IsConstantSatisfiable() {
- if (Relation == ConstraintRelation.EQ) {
- return rhs.IsZero;
- } else {
- return rhs.IsNonNegative;
- }
- }
-
- /// <summary>
- /// Returns 0 if "this" and "c" are not equivalent constraints. If "this" and "c"
- /// are equivalent constraints, the non-0 return value "m" satisfies "this == m*c".
- /// </summary>
- /// <param name="c"></param>
- /// <returns></returns>
- public Rational IsEquivalent(LinearConstraint/*!*/ c) {
- Contract.Requires(c != null);
- // "m" is the scale factor. If it is 0, it hasn't been used yet. If it
- // is non-0, it will remain that value throughout, and it then says that
- // for every dimension "d", "this[d] == m * c[d]".
- Rational m = Rational.ZERO;
-
- ArrayList /*IVariable*/ dd = new ArrayList /*IVariable*/ ();
- foreach (IVariable/*!*/ d in this.GetDefinedDimensions()) {
- Contract.Assert(d != null);
- if (!dd.Contains(d)) {
- dd.Add(d);
- }
- }
- foreach (IVariable/*!*/ d in c.GetDefinedDimensions()) {
- Contract.Assert(d != null);
- if (!dd.Contains(d)) {
- dd.Add(d);
- }
- }
-
- foreach (IVariable/*!*/ d in dd) {
- Contract.Assert(d != null);
- Rational a = this[d];
- Rational b = c[d];
-
- if (a.IsZero || b.IsZero) {
- if (a.IsNonZero || b.IsNonZero) {
- return Rational.ZERO; // not equivalent
- }
- } else if (m.IsZero) {
- m = a / b;
- } else if (a != m * b) {
- return Rational.ZERO; // not equivalent
- }
- }
-
- // we expect there to have been some non-zero coefficient, so "m" should have been used by now
- System.Diagnostics.Debug.Assert(m.IsNonZero);
-
- // finally, check the rhs
- if (this.rhs == m * c.rhs) {
- return m; // equivalent
- } else {
- return Rational.ZERO; // not equivalent
- }
- }
-
- /// <summary>
- /// Splits an equality constraint into two inequality constraints, the conjunction of
- /// which equals the equality constraint. Assumes "this" is a equality constraint.
- /// </summary>
- /// <param name="a"></param>
- /// <param name="b"></param>
- public void GenerateInequalityConstraints(out LinearConstraint a, out LinearConstraint b) {
- System.Diagnostics.Debug.Assert(this.Relation == ConstraintRelation.EQ);
-
- a = new LinearConstraint(ConstraintRelation.LE);
- a.coefficients = (Hashtable)this.coefficients.Clone();
- a.rhs = this.rhs;
-
- b = new LinearConstraint(ConstraintRelation.LE);
- b.coefficients = new Hashtable /*IVariable->Rational*/ ();
- foreach (DictionaryEntry entry in this.coefficients) {
- b.coefficients[entry.Key] = -(Rational)(cce.NonNull(entry.Value));
- }
- b.rhs = -this.rhs;
- }
-
- public void SetCoefficient(IVariable/*!*/ dimension, Rational coefficient) {
- Contract.Requires(dimension != null);
- coefficients[dimension] = coefficient;
- }
-
- /// <summary>
- /// Removes dimension "dim" from the constraint. Only dimensions with coefficient 0 can
- /// be removed.
- /// </summary>
- /// <param name="dim"></param>
- public void RemoveDimension(IVariable/*!*/ dim) {
- Contract.Requires(dim != null);
- object val = coefficients[dim];
- if (val != null) {
-#if FIXED_SERIALIZER
- Contract.Assert(((Rational)val).IsZero);
-#endif
- coefficients.Remove(dim);
- }
- }
-
- /// <summary>
- /// The getter returns 0 if the dimension is not present.
- /// </summary>
- public Rational this[IVariable/*!*/ dimension] {
- get {
- Contract.Requires(dimension != null);
-
-
- object z = coefficients[dimension];
- if (z == null) {
- return Rational.ZERO;
- } else {
- return (Rational)z;
- }
- }
- set {
- SetCoefficient(dimension, value);
- }
- }
-
- public LinearConstraint Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- Contract.Requires(newName != null);
- Contract.Requires(oldName != null);
- object /*Rational*/ z = coefficients[oldName];
- if (z == null) {
- return this;
- } else {
- System.Diagnostics.Debug.Assert(z is Rational);
- Hashtable /*IVariable->Rational*/ newCoeffs = (Hashtable/*!*/ /*IVariable->Rational*/)cce.NonNull(coefficients.Clone());
- newCoeffs.Remove(oldName);
- newCoeffs.Add(newName, z);
-
- LinearConstraint lc = new LinearConstraint(this.Relation);
- lc.coefficients = newCoeffs;
- lc.rhs = this.rhs;
- return lc;
- }
- }
-
- public LinearConstraint Clone() {
- LinearConstraint z = new LinearConstraint(Relation);
- z.coefficients = (Hashtable /*IVariable->Rational*/)this.coefficients.Clone();
- z.rhs = this.rhs;
- return z;
- }
-
- /// <summary>
- /// Returns a constraint like "this", but with the given relation "r".
- /// </summary>
- /// <returns></returns>
- public LinearConstraint/*!*/ ChangeRelation(ConstraintRelation rel) {
- Contract.Ensures(Contract.Result<LinearConstraint>() != null);
- if (Relation == rel) {
- return this;
- } else {
- LinearConstraint z = new LinearConstraint(rel);
- z.coefficients = (Hashtable)this.coefficients.Clone();
- z.rhs = this.rhs;
- return z;
- }
- }
-
- /// <summary>
- /// Returns a constraint like "this", but, conceptually, with the inequality relation >=.
- /// </summary>
- /// <returns></returns>
- public LinearConstraint/*!*/ ChangeRelationToAtLeast() {
- Contract.Ensures(Contract.Result<LinearConstraint>() != null);
- LinearConstraint z = new LinearConstraint(ConstraintRelation.LE);
- foreach (DictionaryEntry /*IVariable->Rational*/ entry in this.coefficients) {
- z.coefficients.Add(entry.Key, -(Rational)(cce.NonNull(entry.Value)));
- }
- z.rhs = -this.rhs;
- return z;
- }
-
- /// <summary>
- /// Returns the left-hand side of the constraint evaluated at the point "v".
- /// Any coordinate not present in "v" is treated as if it were 0.
- /// Stated differently, this routine treats the left-hand side of the constraint
- /// as a row vector and "v" as a column vector, and then returns the dot-product
- /// of the two.
- /// </summary>
- /// <param name="v"></param>
- /// <returns></returns>
- public Rational EvaluateLhs(FrameElement/*!*/ v) {
- Contract.Requires(v != null);
- Rational q = Rational.ZERO;
- foreach (DictionaryEntry /*IVariable,Rational*/ term in coefficients) {
- IVariable dim = (IVariable/*!*/)cce.NonNull(term.Key);
- Rational a = (Rational)(cce.NonNull(term.Value));
- Rational x = v[dim];
- q += a * x;
- }
- return q;
- }
-
- /// <summary>
- /// Determines whether or not a given vertex or ray saturates the constraint.
- /// </summary>
- /// <param name="fe"></param>
- /// <param name="vertex">true if "fe" is a vertex; false if "fe" is a ray</param>
- /// <returns></returns>
- public bool IsSaturatedBy(FrameElement/*!*/ fe, bool vertex) {
- Contract.Requires(fe != null);
- Rational lhs = EvaluateLhs(fe);
- Rational rhs = vertex ? this.rhs : Rational.ZERO;
- return lhs == rhs;
- }
-
- /// <summary>
- /// Changes the current constraint A*X &lt;= B into (A + m*aa)*X &lt;= B + m*bb,
- /// where "cc" is the constraint aa*X &lt;= bb.
- /// </summary>
- /// <param name="m"></param>
- /// <param name="cc"></param>
- /// <returns></returns>
- public void AddMultiple(Rational m, LinearConstraint/*!*/ cc) {
- Contract.Requires(cc != null);
- foreach (DictionaryEntry /*IVariable->Rational*/ entry in cc.coefficients) {
- IVariable dim = (IVariable)entry.Key;
- Rational d = m * (Rational)(cce.NonNull(entry.Value));
- if (d.IsNonZero) {
- object prev = coefficients[dim];
- if (prev == null) {
- coefficients[dim] = d;
- } else {
- coefficients[dim] = (Rational)prev + d;
- }
- }
- }
- rhs += m * cc.rhs;
- }
-
- /// <summary>
- /// Try to reduce the magnitude of the coefficients used.
- /// Has a side effect on the coefficients, but leaves the meaning of the linear constraint
- /// unchanged.
- /// </summary>
- public void Normalize() {
- // compute the gcd of the numerators and the gcd of the denominators
- Rational gcd = rhs;
- foreach (Rational r in coefficients.Values) {
- gcd = Rational.Gcd(gcd, r);
- }
- // Change all coefficients, to divide their numerators with gcdNum and to
- // divide their denominators with gcdDen.
- Hashtable /*IVariable->Rational*/ newCoefficients = new Hashtable /*IVariable->Rational*/ (coefficients.Count);
- foreach (DictionaryEntry /*IVarianble->Rational*/ e in coefficients) {
- Rational r = (Rational)(cce.NonNull(e.Value));
- if (r.IsNonZero) {
- newCoefficients.Add(e.Key, Rational.FromBignums(r.Numerator / gcd.Numerator, r.Denominator / gcd.Denominator));
- } else {
- newCoefficients.Add(e.Key, r);
- }
- }
-
- coefficients = newCoefficients;
- rhs = rhs.IsNonZero ? Rational.FromBignums(rhs.Numerator / gcd.Numerator, rhs.Denominator / gcd.Denominator) : rhs;
- }
- }
-
- /// <summary>
- /// Represents a frame element (vector of dimension/value tuples). Used only
- /// internally in class LinearConstraintSystem and its communication with class
- /// LinearConstraint.
- /// </summary>
- public class FrameElement {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(terms != null);
- }
-
- Hashtable /*IVariable->Rational*//*!*/ terms = new Hashtable /*IVariable->Rational*/ ();
-
- /// <summary>
- /// Constructs an empty FrameElement. To add dimensions, call AddCoordinate after construction.
- /// </summary>
- public FrameElement() {
- }
-
- /// <summary>
- /// This method is to be thought of as being part of the FrameElement object's construction process.
- /// Assumes "dimension" is not already in FrameElement.
- /// </summary>
- /// <param name="dimension"></param>
- /// <param name="value"></param>
- public void AddCoordinate(IVariable/*!*/ dimension, Rational value) {
- Contract.Requires(dimension != null);
- terms.Add(dimension, value);
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- string s = null;
- foreach (DictionaryEntry item in terms) {
- if (s == null) {
- s = "(";
- } else {
- s += ", ";
- }
- s += String.Format("<{0},{1}>", item.Key, (Rational)(cce.NonNull(item.Value)));
- }
- if (s == null) {
- s = "(";
- }
- return s + ")";
- }
-
- public IMutableSet /*IVariable!*//*!*/ GetDefinedDimensions() {
- Contract.Ensures(Contract.Result<IMutableSet>() != null);
- HashSet /*IVariable!*//*!*/ dims = new HashSet /*IVariable!*/ (terms.Count);
- foreach (IVariable/*!*/ dim in terms.Keys) {
- Contract.Assert(dim != null);
- dims.Add(dim);
- }
- System.Diagnostics.Debug.Assert(dims.Count == terms.Count);
- return dims;
- }
-
- /// <summary>
- /// The getter returns the value at the given dimension, or 0 if that dimension is not defined.
- /// </summary>
- public Rational this[IVariable/*!*/ dimension] {
- get {
- //Contract.Ensures(Contract.Result<Rational>() != null);
- object z = terms[dimension];
- if (z == null) {
- return Rational.ZERO;
- } else {
- return (Rational)z;
- }
- }
- set {
- terms[dimension] = value;
- }
- }
-
- public FrameElement Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- Contract.Requires(newName != null);
- Contract.Requires(oldName != null);
- object /*Rational*/ z = terms[oldName];
- if (z == null) {
- return this;
- } else {
- System.Diagnostics.Debug.Assert(z is Rational);
- Hashtable /*IVariable->Rational*/ newTerms = (Hashtable/*!*/ /*IVariable->Rational*/)cce.NonNull(terms.Clone());
- newTerms.Remove(oldName);
- newTerms.Add(newName, z);
-
- FrameElement fe = new FrameElement();
- fe.terms = newTerms;
- return fe;
- }
- }
-
- public FrameElement Clone() {
- FrameElement z = new FrameElement();
- z.terms = (Hashtable /*IVariable->Rational*/)this.terms.Clone();
- return z;
- }
- }
-}
+ using IMutableSet = Microsoft.Boogie.GSet<object>;
+ using HashSet = Microsoft.Boogie.GSet<object>;
+ using ISet = Microsoft.Boogie.GSet<object>;
+
+
+ /// <summary>
+ /// Represents a single linear constraint, coefficients are stored as Rationals.
+ /// </summary>
+ public class LinearConstraint {
+
+ public enum ConstraintRelation {
+ EQ, // equal
+ LE, // less-than or equal
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(coefficients != null);
+ }
+
+ public readonly ConstraintRelation Relation;
+ internal Hashtable /*IVariable->Rational*//*!*/ coefficients = new Hashtable /*IVariable->Rational*/ ();
+ internal Rational rhs;
+
+ public LinearConstraint(ConstraintRelation rel) {
+ Relation = rel;
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ string s = null;
+ foreach (DictionaryEntry /*IVariable->Rational*/ entry in coefficients) {
+ if (s == null) {
+ s = "";
+ } else {
+ s += " + ";
+ }
+ s += String.Format("{0}*{1}", entry.Value, entry.Key);
+ }
+ System.Diagnostics.Debug.Assert(s != null, "malformed LinearConstraint: no variables");
+ s += String.Format(" {0} {1}", Relation == ConstraintRelation.EQ ? "==" : "<=", rhs);
+ return s;
+ }
+
+
+#if DONT_KNOW_HOW_TO_TAKE_THE_TYPE_OF_AN_IVARIABLE_YET
+ public bool IsOverIntegers
+ {
+ get
+ {
+ foreach (DictionaryEntry /*IVariable->Rational*/ entry in coefficients)
+ {
+ IVariable var = (IVariable)entry.Key;
+ if ( ! var.TypedIdent.Type.IsInt) { return false; }
+ }
+ return true;
+ }
+ }
+#endif
+
+
+ /// <summary>
+ /// Note: This method requires that all dimensions are of type Variable, something that's
+ /// not required elsewhere in this class.
+ /// </summary>
+ /// <returns></returns>
+ public IExpr/*!*/ ConvertToExpression(ILinearExprFactory/*!*/ factory) {
+ Contract.Requires(factory != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IExpr leftSum = null;
+ IExpr rightSum = null;
+ foreach (DictionaryEntry /*object->Rational*/ entry in coefficients) {
+ IVariable var = (IVariable)entry.Key;
+ Rational coeff = (Rational)(cce.NonNull(entry.Value));
+ if (coeff.IsPositive) {
+ leftSum = AddTerm(factory, leftSum, coeff, var);
+ } else if (coeff.IsNegative) {
+ rightSum = AddTerm(factory, rightSum, -coeff, var);
+ } else {
+ // ignore the term is coeff==0
+ }
+ }
+
+ if (leftSum == null && rightSum == null) {
+ // there are no variables in this constraint
+ if (Relation == ConstraintRelation.EQ ? rhs.IsZero : rhs.IsNonNegative) {
+ return factory.True;
+ } else {
+ return factory.False;
+ }
+ }
+
+ if (leftSum == null || (rightSum != null && rhs.IsNegative)) {
+ // show the constant on the left side
+ leftSum = AddTerm(factory, leftSum, -rhs, null);
+ } else if (rightSum == null || rhs.IsPositive) {
+ // show the constant on the right side
+ rightSum = AddTerm(factory, rightSum, rhs, null);
+ }
+
+ Contract.Assert(leftSum != null);
+ Contract.Assert(rightSum != null);
+ return Relation == ConstraintRelation.EQ ? factory.Eq(leftSum, rightSum) : factory.AtMost(leftSum, rightSum);
+ }
+
+ /// <summary>
+ /// Returns an expression that denotes sum + r*x.
+ /// If sum==null, drops the "sum +".
+ /// If x==null, drops the "*x".
+ /// if x!=null and r==1, drops the "r*".
+ /// </summary>
+ /// <param name="factory"></param>
+ /// <param name="sum"></param>
+ /// <param name="r"></param>
+ /// <param name="x"></param>
+ static IExpr/*!*/ AddTerm(ILinearExprFactory/*!*/ factory, /*MayBeNull*/ IExpr sum, Rational r, /*MayBeNull*/ IVariable x) {
+ Contract.Requires(factory != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IExpr/*!*/ product = factory.Term(r, x);
+ Contract.Assert(product != null);
+ if (sum == null) {
+ return product;
+ } else {
+ return factory.Add(sum, product);
+ }
+ }
+ public System.Collections.Generic.IEnumerable<IVariable> GetDefinedDimensionsGeneric() {
+ Contract.Ensures(Contract.Result<System.Collections.Generic.IEnumerable<IVariable>>() != null);
+ foreach (IVariable/*!*/ dim in coefficients.Keys) {
+ Contract.Assert(dim != null);
+ yield return dim;
+ }
+ }
+ public ISet /*IVariable!*//*!*/ GetDefinedDimensions() {
+ Contract.Ensures(Contract.Result<ISet>() != null);
+ HashSet /*IVariable!*/ dims = new HashSet /*IVariable!*/ (coefficients.Count);
+ int j = 0;
+ foreach (IVariable/*!*/ dim in coefficients.Keys) {
+ Contract.Assert(dim != null);
+ dims.Add(dim);
+ j++;
+ }
+ System.Diagnostics.Debug.Assert(j == coefficients.Count);
+ return dims;
+ }
+
+ /// <summary>
+ /// Returns true iff all of the coefficients in the constraint are 0. In that
+ /// case, the constraint has the form 0 &lt;= C for some constant C; hence, the
+ /// constraint is either unsatisfiable or trivially satisfiable.
+ /// </summary>
+ /// <returns></returns>
+ public bool IsConstant() {
+ foreach (Rational coeff in coefficients.Values) {
+ if (coeff.IsNonZero) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /// <summary>
+ /// For an equality constraint, returns 0 == rhs.
+ /// For an inequality constraint, returns 0 &lt;= rhs.
+ /// </summary>
+ public bool IsConstantSatisfiable() {
+ if (Relation == ConstraintRelation.EQ) {
+ return rhs.IsZero;
+ } else {
+ return rhs.IsNonNegative;
+ }
+ }
+
+ /// <summary>
+ /// Returns 0 if "this" and "c" are not equivalent constraints. If "this" and "c"
+ /// are equivalent constraints, the non-0 return value "m" satisfies "this == m*c".
+ /// </summary>
+ /// <param name="c"></param>
+ /// <returns></returns>
+ public Rational IsEquivalent(LinearConstraint/*!*/ c) {
+ Contract.Requires(c != null);
+ // "m" is the scale factor. If it is 0, it hasn't been used yet. If it
+ // is non-0, it will remain that value throughout, and it then says that
+ // for every dimension "d", "this[d] == m * c[d]".
+ Rational m = Rational.ZERO;
+
+ ArrayList /*IVariable*/ dd = new ArrayList /*IVariable*/ ();
+ foreach (IVariable/*!*/ d in this.GetDefinedDimensions()) {
+ Contract.Assert(d != null);
+ if (!dd.Contains(d)) {
+ dd.Add(d);
+ }
+ }
+ foreach (IVariable/*!*/ d in c.GetDefinedDimensions()) {
+ Contract.Assert(d != null);
+ if (!dd.Contains(d)) {
+ dd.Add(d);
+ }
+ }
+
+ foreach (IVariable/*!*/ d in dd) {
+ Contract.Assert(d != null);
+ Rational a = this[d];
+ Rational b = c[d];
+
+ if (a.IsZero || b.IsZero) {
+ if (a.IsNonZero || b.IsNonZero) {
+ return Rational.ZERO; // not equivalent
+ }
+ } else if (m.IsZero) {
+ m = a / b;
+ } else if (a != m * b) {
+ return Rational.ZERO; // not equivalent
+ }
+ }
+
+ // we expect there to have been some non-zero coefficient, so "m" should have been used by now
+ System.Diagnostics.Debug.Assert(m.IsNonZero);
+
+ // finally, check the rhs
+ if (this.rhs == m * c.rhs) {
+ return m; // equivalent
+ } else {
+ return Rational.ZERO; // not equivalent
+ }
+ }
+
+ /// <summary>
+ /// Splits an equality constraint into two inequality constraints, the conjunction of
+ /// which equals the equality constraint. Assumes "this" is a equality constraint.
+ /// </summary>
+ /// <param name="a"></param>
+ /// <param name="b"></param>
+ public void GenerateInequalityConstraints(out LinearConstraint a, out LinearConstraint b) {
+ System.Diagnostics.Debug.Assert(this.Relation == ConstraintRelation.EQ);
+
+ a = new LinearConstraint(ConstraintRelation.LE);
+ a.coefficients = (Hashtable)this.coefficients.Clone();
+ a.rhs = this.rhs;
+
+ b = new LinearConstraint(ConstraintRelation.LE);
+ b.coefficients = new Hashtable /*IVariable->Rational*/ ();
+ foreach (DictionaryEntry entry in this.coefficients) {
+ b.coefficients[entry.Key] = -(Rational)(cce.NonNull(entry.Value));
+ }
+ b.rhs = -this.rhs;
+ }
+
+ public void SetCoefficient(IVariable/*!*/ dimension, Rational coefficient) {
+ Contract.Requires(dimension != null);
+ coefficients[dimension] = coefficient;
+ }
+
+ /// <summary>
+ /// Removes dimension "dim" from the constraint. Only dimensions with coefficient 0 can
+ /// be removed.
+ /// </summary>
+ /// <param name="dim"></param>
+ public void RemoveDimension(IVariable/*!*/ dim) {
+ Contract.Requires(dim != null);
+ object val = coefficients[dim];
+ if (val != null) {
+#if FIXED_SERIALIZER
+ Contract.Assert(((Rational)val).IsZero);
+#endif
+ coefficients.Remove(dim);
+ }
+ }
+
+ /// <summary>
+ /// The getter returns 0 if the dimension is not present.
+ /// </summary>
+ public Rational this[IVariable/*!*/ dimension] {
+ get {
+ Contract.Requires(dimension != null);
+
+
+ object z = coefficients[dimension];
+ if (z == null) {
+ return Rational.ZERO;
+ } else {
+ return (Rational)z;
+ }
+ }
+ set {
+ SetCoefficient(dimension, value);
+ }
+ }
+
+ public LinearConstraint Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ Contract.Requires(newName != null);
+ Contract.Requires(oldName != null);
+ object /*Rational*/ z = coefficients[oldName];
+ if (z == null) {
+ return this;
+ } else {
+ System.Diagnostics.Debug.Assert(z is Rational);
+ Hashtable /*IVariable->Rational*/ newCoeffs = (Hashtable/*!*/ /*IVariable->Rational*/)cce.NonNull(coefficients.Clone());
+ newCoeffs.Remove(oldName);
+ newCoeffs.Add(newName, z);
+
+ LinearConstraint lc = new LinearConstraint(this.Relation);
+ lc.coefficients = newCoeffs;
+ lc.rhs = this.rhs;
+ return lc;
+ }
+ }
+
+ public LinearConstraint Clone() {
+ LinearConstraint z = new LinearConstraint(Relation);
+ z.coefficients = (Hashtable /*IVariable->Rational*/)this.coefficients.Clone();
+ z.rhs = this.rhs;
+ return z;
+ }
+
+ /// <summary>
+ /// Returns a constraint like "this", but with the given relation "r".
+ /// </summary>
+ /// <returns></returns>
+ public LinearConstraint/*!*/ ChangeRelation(ConstraintRelation rel) {
+ Contract.Ensures(Contract.Result<LinearConstraint>() != null);
+ if (Relation == rel) {
+ return this;
+ } else {
+ LinearConstraint z = new LinearConstraint(rel);
+ z.coefficients = (Hashtable)this.coefficients.Clone();
+ z.rhs = this.rhs;
+ return z;
+ }
+ }
+
+ /// <summary>
+ /// Returns a constraint like "this", but, conceptually, with the inequality relation >=.
+ /// </summary>
+ /// <returns></returns>
+ public LinearConstraint/*!*/ ChangeRelationToAtLeast() {
+ Contract.Ensures(Contract.Result<LinearConstraint>() != null);
+ LinearConstraint z = new LinearConstraint(ConstraintRelation.LE);
+ foreach (DictionaryEntry /*IVariable->Rational*/ entry in this.coefficients) {
+ z.coefficients.Add(entry.Key, -(Rational)(cce.NonNull(entry.Value)));
+ }
+ z.rhs = -this.rhs;
+ return z;
+ }
+
+ /// <summary>
+ /// Returns the left-hand side of the constraint evaluated at the point "v".
+ /// Any coordinate not present in "v" is treated as if it were 0.
+ /// Stated differently, this routine treats the left-hand side of the constraint
+ /// as a row vector and "v" as a column vector, and then returns the dot-product
+ /// of the two.
+ /// </summary>
+ /// <param name="v"></param>
+ /// <returns></returns>
+ public Rational EvaluateLhs(FrameElement/*!*/ v) {
+ Contract.Requires(v != null);
+ Rational q = Rational.ZERO;
+ foreach (DictionaryEntry /*IVariable,Rational*/ term in coefficients) {
+ IVariable dim = (IVariable/*!*/)cce.NonNull(term.Key);
+ Rational a = (Rational)(cce.NonNull(term.Value));
+ Rational x = v[dim];
+ q += a * x;
+ }
+ return q;
+ }
+
+ /// <summary>
+ /// Determines whether or not a given vertex or ray saturates the constraint.
+ /// </summary>
+ /// <param name="fe"></param>
+ /// <param name="vertex">true if "fe" is a vertex; false if "fe" is a ray</param>
+ /// <returns></returns>
+ public bool IsSaturatedBy(FrameElement/*!*/ fe, bool vertex) {
+ Contract.Requires(fe != null);
+ Rational lhs = EvaluateLhs(fe);
+ Rational rhs = vertex ? this.rhs : Rational.ZERO;
+ return lhs == rhs;
+ }
+
+ /// <summary>
+ /// Changes the current constraint A*X &lt;= B into (A + m*aa)*X &lt;= B + m*bb,
+ /// where "cc" is the constraint aa*X &lt;= bb.
+ /// </summary>
+ /// <param name="m"></param>
+ /// <param name="cc"></param>
+ /// <returns></returns>
+ public void AddMultiple(Rational m, LinearConstraint/*!*/ cc) {
+ Contract.Requires(cc != null);
+ foreach (DictionaryEntry /*IVariable->Rational*/ entry in cc.coefficients) {
+ IVariable dim = (IVariable)entry.Key;
+ Rational d = m * (Rational)(cce.NonNull(entry.Value));
+ if (d.IsNonZero) {
+ object prev = coefficients[dim];
+ if (prev == null) {
+ coefficients[dim] = d;
+ } else {
+ coefficients[dim] = (Rational)prev + d;
+ }
+ }
+ }
+ rhs += m * cc.rhs;
+ }
+
+ /// <summary>
+ /// Try to reduce the magnitude of the coefficients used.
+ /// Has a side effect on the coefficients, but leaves the meaning of the linear constraint
+ /// unchanged.
+ /// </summary>
+ public void Normalize() {
+ // compute the gcd of the numerators and the gcd of the denominators
+ Rational gcd = rhs;
+ foreach (Rational r in coefficients.Values) {
+ gcd = Rational.Gcd(gcd, r);
+ }
+ // Change all coefficients, to divide their numerators with gcdNum and to
+ // divide their denominators with gcdDen.
+ Hashtable /*IVariable->Rational*/ newCoefficients = new Hashtable /*IVariable->Rational*/ (coefficients.Count);
+ foreach (DictionaryEntry /*IVarianble->Rational*/ e in coefficients) {
+ Rational r = (Rational)(cce.NonNull(e.Value));
+ if (r.IsNonZero) {
+ newCoefficients.Add(e.Key, Rational.FromBignums(r.Numerator / gcd.Numerator, r.Denominator / gcd.Denominator));
+ } else {
+ newCoefficients.Add(e.Key, r);
+ }
+ }
+
+ coefficients = newCoefficients;
+ rhs = rhs.IsNonZero ? Rational.FromBignums(rhs.Numerator / gcd.Numerator, rhs.Denominator / gcd.Denominator) : rhs;
+ }
+ }
+
+ /// <summary>
+ /// Represents a frame element (vector of dimension/value tuples). Used only
+ /// internally in class LinearConstraintSystem and its communication with class
+ /// LinearConstraint.
+ /// </summary>
+ public class FrameElement {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(terms != null);
+ }
+
+ Hashtable /*IVariable->Rational*//*!*/ terms = new Hashtable /*IVariable->Rational*/ ();
+
+ /// <summary>
+ /// Constructs an empty FrameElement. To add dimensions, call AddCoordinate after construction.
+ /// </summary>
+ public FrameElement() {
+ }
+
+ /// <summary>
+ /// This method is to be thought of as being part of the FrameElement object's construction process.
+ /// Assumes "dimension" is not already in FrameElement.
+ /// </summary>
+ /// <param name="dimension"></param>
+ /// <param name="value"></param>
+ public void AddCoordinate(IVariable/*!*/ dimension, Rational value) {
+ Contract.Requires(dimension != null);
+ terms.Add(dimension, value);
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ string s = null;
+ foreach (DictionaryEntry item in terms) {
+ if (s == null) {
+ s = "(";
+ } else {
+ s += ", ";
+ }
+ s += String.Format("<{0},{1}>", item.Key, (Rational)(cce.NonNull(item.Value)));
+ }
+ if (s == null) {
+ s = "(";
+ }
+ return s + ")";
+ }
+
+ public IMutableSet /*IVariable!*//*!*/ GetDefinedDimensions() {
+ Contract.Ensures(Contract.Result<IMutableSet>() != null);
+ HashSet /*IVariable!*//*!*/ dims = new HashSet /*IVariable!*/ (terms.Count);
+ foreach (IVariable/*!*/ dim in terms.Keys) {
+ Contract.Assert(dim != null);
+ dims.Add(dim);
+ }
+ System.Diagnostics.Debug.Assert(dims.Count == terms.Count);
+ return dims;
+ }
+
+ /// <summary>
+ /// The getter returns the value at the given dimension, or 0 if that dimension is not defined.
+ /// </summary>
+ public Rational this[IVariable/*!*/ dimension] {
+ get {
+ //Contract.Ensures(Contract.Result<Rational>() != null);
+ object z = terms[dimension];
+ if (z == null) {
+ return Rational.ZERO;
+ } else {
+ return (Rational)z;
+ }
+ }
+ set {
+ terms[dimension] = value;
+ }
+ }
+
+ public FrameElement Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ Contract.Requires(newName != null);
+ Contract.Requires(oldName != null);
+ object /*Rational*/ z = terms[oldName];
+ if (z == null) {
+ return this;
+ } else {
+ System.Diagnostics.Debug.Assert(z is Rational);
+ Hashtable /*IVariable->Rational*/ newTerms = (Hashtable/*!*/ /*IVariable->Rational*/)cce.NonNull(terms.Clone());
+ newTerms.Remove(oldName);
+ newTerms.Add(newName, z);
+
+ FrameElement fe = new FrameElement();
+ fe.terms = newTerms;
+ return fe;
+ }
+ }
+
+ public FrameElement Clone() {
+ FrameElement z = new FrameElement();
+ z.terms = (Hashtable /*IVariable->Rational*/)this.terms.Clone();
+ return z;
+ }
+ }
+}
diff --git a/Source/AIFramework/Polyhedra/LinearConstraintSystem.cs b/Source/AIFramework/Polyhedra/LinearConstraintSystem.cs
index 74e36eae..59aadb86 100644
--- a/Source/AIFramework/Polyhedra/LinearConstraintSystem.cs
+++ b/Source/AIFramework/Polyhedra/LinearConstraintSystem.cs
@@ -1,1756 +1,1756 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System;
- //using Microsoft.SpecSharp.Collections;
- using System.Diagnostics.Contracts;
- using Microsoft.Basetypes;
-
- using IMutableSet = Microsoft.Boogie.GSet<object>;
- using ISet = Microsoft.Boogie.GSet<object>;
- using HashSet = Microsoft.Boogie.GSet<object>;
-
- /// <summary>
- /// Represents a system of linear constraints (constraint/frame representations).
- /// </summary>
- public class LinearConstraintSystem {
- // --------------------------------------------------------------------------------------------------------
- // ------------------ Data structure ----------------------------------------------------------------------
- // --------------------------------------------------------------------------------------------------------
-
- public /*maybe null*/ ArrayList /*LinearConstraint!*/ Constraints;
- /*maybe null*/
- ArrayList /*FrameElement!*/ FrameVertices;
- /*maybe null*/
- ArrayList /*FrameElement!*/ FrameRays;
- IMutableSet/*IVariable!*//*!*/ FrameDimensions;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(FrameDimensions != null);
- }
-
- /*maybe null*/
- ArrayList /*FrameElement!*/ FrameLines;
- // Invariant: Either all of Constraints, FrameVertices, FrameRays, and FrameLines are
- // null, or all are non-null.
- // Invariant: Any dimension mentioned in Constraints, FrameVertices, FrameRays, or
- // FrameLines is mentioned in FrameDimensions.
- // The meaning of FrameDimensions is that for any dimension x not in FrameDimensions,
- // there is an implicit line along dimension x (that is, (<x,1>)).
-
- void CheckInvariant() {
- if (Constraints == null) {
- System.Diagnostics.Debug.Assert(FrameVertices == null);
- System.Diagnostics.Debug.Assert(FrameRays == null);
- System.Diagnostics.Debug.Assert(FrameLines == null);
- System.Diagnostics.Debug.Assert(FrameDimensions.Count == 0);
- } else {
- System.Diagnostics.Debug.Assert(FrameVertices != null);
- System.Diagnostics.Debug.Assert(FrameRays != null);
- System.Diagnostics.Debug.Assert(FrameLines != null);
-
- foreach (LinearConstraint/*!*/ cc in Constraints) {
- Contract.Assert(cc != null);
-#if FIXED_DESERIALIZER
- Contract.Assert(Contract.ForAll(cc.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
-#endif
- Contract.Assert(cc.coefficients.Count != 0);
- }
- foreach (ArrayList /*FrameElement*//*!*/ FrameComponent in new ArrayList /*FrameElement*/ [] { FrameVertices, FrameRays, FrameLines }) {
- Contract.Assert(FrameComponent != null);
- foreach (FrameElement fe in FrameComponent) {
- if (fe == null)
- continue;
-#if FIXED_DESERIALIZER
- Contract.Assert(Contract.ForAll(fe.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
-#endif
- }
- }
- }
- }
-
- // --------------------------------------------------------------------------------------------------------
- // ------------------ Constructors ------------------------------------------------------------------------
- // --------------------------------------------------------------------------------------------------------
-
- /// <summary>
- /// Creates a LinearConstraintSystem representing the bottom element, that is, representing
- /// an unsatisfiable system of constraints.
- /// </summary>
- [NotDelayed]
- public LinearConstraintSystem() {
- FrameDimensions = new HashSet /*IVariable!*/ ();
- //:base();
- CheckInvariant();
- }
-
- /// <summary>
- /// Constructs a linear constraint system with constraints "cs".
- /// The constructor captures all constraints in "cs".
- /// </summary>
- /// <param name="cs"></param>
- [NotDelayed]
- public LinearConstraintSystem(ArrayList /*LinearConstraint!*//*!*/ cs) {
- Contract.Requires(cs != null);
-#if BUG_159_HAS_BEEN_FIXED
- Contract.Requires(Contract.ForAll(cs) , cc=> cc.coefficients.Count != 0);
-#endif
-
- ArrayList constraints = new ArrayList /*LinearConstraint!*/ (cs.Count);
- foreach (LinearConstraint/*!*/ cc in cs) {
- Contract.Assert(cc != null);
- constraints.Add(cc);
- }
- Constraints = constraints;
- FrameDimensions = new HashSet /*IVariable!*/ (); // to please compiler; this value will be overridden in the call to GenerateFrameConstraints below
- //:base();
-
- GenerateFrameFromConstraints();
- SimplifyConstraints();
- CheckInvariant();
-#if DEBUG_PRINT
- Console.WriteLine("LinearConstraintSystem: constructor produced:");
- Dump();
-#endif
- }
-
- /// <summary>
- /// Constructs a linear constraint system corresponding to given vertex. This constructor
- /// is only used in the test harness--it is not needed for abstract interpretation.
- /// </summary>
- /// <param name="v"></param>
- [NotDelayed]
- LinearConstraintSystem(FrameElement/*!*/ v) {
- Contract.Requires(v != null);
- IMutableSet/*!*/ frameDims = v.GetDefinedDimensions();
- Contract.Assert(frameDims != null);
- ArrayList /*LinearConstraint!*/ constraints = new ArrayList /*LinearConstraint!*/ ();
- foreach (IVariable/*!*/ dim in frameDims) {
- Contract.Assert(dim != null);
- LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
- lc.SetCoefficient(dim, Rational.ONE);
- lc.rhs = v[dim];
- constraints.Add(lc);
- }
- FrameDimensions = frameDims;
- Constraints = constraints;
-
- ArrayList /*FrameElement*/ frameVertices = new ArrayList /*FrameElement*/ ();
- frameVertices.Add(v);
- FrameVertices = frameVertices;
-
- FrameRays = new ArrayList /*FrameElement*/ ();
- FrameLines = new ArrayList /*FrameElement*/ ();
-
- //:base();
- CheckInvariant();
- }
-
- void ChangeIntoBottom() {
- Constraints = null;
- FrameVertices = null;
- FrameRays = null;
- FrameLines = null;
- FrameDimensions.Clear(); // no implicit lines
- }
-
- // --------------------------------------------------------------------------------------------------------
- // ------------------ Public operations and their support routines ----------------------------------------
- // --------------------------------------------------------------------------------------------------------
-
- public bool IsBottom() {
- return Constraints == null;
- }
-
- public bool IsTop() {
- return Constraints != null && Constraints.Count == 0;
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- if (Constraints == null) {
- return "<bottom>";
- } else if (Constraints.Count == 0) {
- return "<top>";
- } else {
- string z = null;
- foreach (LinearConstraint/*!*/ lc in Constraints) {
- Contract.Assert(lc != null);
- string s = lc.ToString();
- if (z == null) {
- z = s;
- } else {
- z += " AND " + s;
- }
- }
- Contract.Assert(z != null);
- return z;
- }
- }
-
-
- public ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
- Contract.Ensures(Contract.Result<ICollection<IVariable>>().IsReadOnly);
- List<IVariable/*!*/> list = new List<IVariable/*!*/>();
- foreach (IVariable/*!*/ v in FrameDimensions) {
- Contract.Assert(v != null);
- list.Add(v);
- }
- return cce.NonNull(list.AsReadOnly());
- }
-
- /// <summary>
- /// Note: This method requires that all dimensions are of type Variable, something that's
- /// not required elsewhere in this class.
- /// </summary>
- /// <returns></returns>
- public IExpr/*!*/ ConvertToExpression(ILinearExprFactory/*!*/ factory) {
- Contract.Requires(factory != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- if (this.Constraints == null) {
- return factory.False;
- }
- if (this.Constraints.Count == 0) {
- return factory.True;
- }
-
- IExpr result = null;
- foreach (LinearConstraint/*!*/ lc in Constraints) {
- Contract.Assert(lc != null);
- IExpr conjunct = lc.ConvertToExpression(factory);
- result = (result == null) ? conjunct : (IExpr)factory.And(conjunct, result);
- }
- Contract.Assert(result != null);
- return result;
- }
-
-
- /* IsSubset(): determines if 'lcs' is a subset of 'this'
- * -- See Cousot/Halbwachs 1978, section
- */
- public bool IsSubset(LinearConstraintSystem/*!*/ lcs) {
- Contract.Requires(lcs != null);
- if (lcs.IsBottom()) {
- return true;
- } else if (this.IsBottom()) {
- return false;
-#if DEBUG
-#else
- } else if (this.IsTop()) { // optimization -- this case not needed for correctness
- return true;
- } else if (lcs.IsTop()) { // optimization -- this case not needed for correctness
- return false;
-#endif
- } else {
- // phase 0: check if frame dimensions are a superset of the constraint dimensions
- ISet /*IVariable!*//*!*/ frameDims = lcs.GetDefinedDimensions();
- Contract.Assert(frameDims != null);
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: IsSubset:");
- Console.WriteLine(" --- this:");
- this.Dump();
- Console.WriteLine(" --- lcs:");
- lcs.Dump();
- Console.WriteLine(" ---");
-#endif
- foreach (LinearConstraint/*!*/ cc in cce.NonNull(this.Constraints)) {
- Contract.Assert(cc != null);
-#if DEBUG_PRINT
- Console.WriteLine(" cc: {0}", cc);
- Console.WriteLine(" cc.GetDefinedDimensions(): {0}", cc.GetDefinedDimensions());
-#endif
-
- if (!Contract.ForAll(cc.GetDefinedDimensionsGeneric(), var => frameDims.Contains(var))) {
-#if DEBUG_PRINT
- Console.WriteLine(" ---> phase 0 subset violated, return false from IsSubset");
-#endif
- return false;
- }
- }
- }
-
- // phase 1: check frame vertices against each constraint...
- foreach (FrameElement/*!*/ v in cce.NonNull(lcs.FrameVertices)) {
- Contract.Assert(v != null);
- foreach (LinearConstraint/*!*/ cc in this.Constraints) {
- Contract.Assert(cc != null);
- Rational q = cc.EvaluateLhs(v);
- if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
- if (!(q <= cc.rhs)) {
-#if DEBUG_PRINT
- Console.WriteLine(" ---> phase 1a subset violated, return false from IsSubset");
-#endif
- return false;
- }
- } else {
- if (!(q == cc.rhs)) {
-#if DEBUG_PRINT
- Console.WriteLine(" ---> phase 1b subset violated, return false from IsSubset");
-#endif
- return false;
- }
- }
- }
- }
-
- // phase 2: check frame rays against each constraint...
- // To check if a ray "r" falls within a constraint "cc", we add the vector "r" to
- // any point "p" on the side of the half-space or plane described by constraint, and
- // then check if the resulting point satisfies the constraint. That is, we check (for
- // an inequality constraint with coefficients a1,a2,...,an and right-hand side
- // constant C):
- // a1*(r1+p1) + a2*(r2+p2) + ... + an*(rn+pn) <= C
- // Equivalently:
- // a1*r1 + a2*r2 + ... + an*rn + a1*p1 + a2*p2 + ... + an*pn <= C
- // To find a point "p", we can pick out a coordinate, call it 1, with a non-zero
- // coefficient in the constraint, and then choose "p" as the point that has the
- // value C/a1 in coordinate 1 and has 0 in all other coordinates. We then check:
- // a1*r1 + a2*r2 + ... + an*rn + a1*(C/a1) + a2*0 + ... + an*0 <= C
- // which simplifies to:
- // a1*r1 + a2*r2 + ... + an*rn + C <= C
- // which in turn simplifies to:
- // a1*r1 + a2*r2 + ... + an*rn <= 0
- // If the constraint is an equality constraint, we simply replace "<=" with "=="
- // above.
- foreach (FrameElement/*!*/ r in cce.NonNull(lcs.FrameRays)) {
- Contract.Assert(r != null);
- System.Diagnostics.Debug.Assert(r != null, "encountered a null ray...");
- foreach (LinearConstraint/*!*/ cc in this.Constraints) {
- Contract.Assert(cc != null);
- System.Diagnostics.Debug.Assert(cc != null, "encountered an null constraint...");
- Rational q = cc.EvaluateLhs(r);
- if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
- if (q.IsPositive) {
-#if DEBUG_PRINT
- Console.WriteLine(" ---> phase 2a subset violated, return false from IsSubset");
-#endif
- return false;
- }
- } else {
- if (q.IsNonZero) {
-#if DEBUG_PRINT
- Console.WriteLine(" ---> phase 2b subset violated, return false from IsSubset");
-#endif
- return false;
- }
- }
- }
- }
-
- // phase 3: check frame lines against each constraint...
- // To check if a line "L" falls within a constraint "cc", we check if both the
- // vector "L" and "-L", interpreted as rays, fall within the constraint. From
- // the discussion above, this means we check the following two properties:
- // a1*L1 + a2*L2 + ... + an*Ln <= 0 (*)
- // a1*(-L1) + a2*(-L2) + ... + an*(-Ln) <= 0
- // The second of these lines can be rewritten as:
- // - a1*L1 - a2*L2 - ... - an*Ln <= 0
- // which is equivalent to:
- // -1 * (a1*L1 + a2*L2 + ... + an*Ln) <= 0
- // Multiplying both sides by -1 and flipping the direction of the inequality,
- // we have:
- // a1*L1 + a2*L2 + ... + an*Ln >= 0 (**)
- // Putting (*) and (**) together, we conclude that we need to check:
- // a1*L1 + a2*L2 + ... + an*Ln == 0
- // If the constraint is an equality constraint, we end up with the same equation.
- foreach (FrameElement/*!*/ line in cce.NonNull(lcs.FrameLines)) {
- Contract.Assert(line != null);
- System.Diagnostics.Debug.Assert(line != null, "encountered a null line...");
- foreach (LinearConstraint/*!*/ cc in this.Constraints) {
- Contract.Assert(cc != null);
- System.Diagnostics.Debug.Assert(cc != null, "encountered an null constraint...");
- Rational q = cc.EvaluateLhs(line);
- if (q.IsNonZero) {
-#if DEBUG_PRINT
- Console.WriteLine(" ---> phase 3 subset violated, return false from IsSubset");
-#endif
- return false;
- }
- }
- }
-
-#if DEBUG_PRINT
- Console.WriteLine(" ---> IsSubset returns true");
-#endif
- return true;
- }
-
- public LinearConstraintSystem/*!*/ Meet(LinearConstraintSystem/*!*/ lcs) {
- Contract.Requires(lcs != null);
- Contract.Requires((this.Constraints != null));
- Contract.Requires((lcs.Constraints != null));
- Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
- ArrayList /*LinearConstraint*/ clist = new ArrayList(this.Constraints.Count + lcs.Constraints.Count);
- clist.AddRange(this.Constraints);
- clist.AddRange(lcs.Constraints);
- return new LinearConstraintSystem(clist);
- }
-
-#if DEBUG_PRINT
- public LinearConstraintSystem Join(LinearConstraintSystem lcs)
- {
- Console.WriteLine("===================================================================================");
- Console.WriteLine("DEBUG: Join");
- Console.WriteLine("Join: this=");
- Dump();
- Console.WriteLine("Join: lcs=");
- lcs.Dump();
- LinearConstraintSystem z = JoinX(lcs);
- Console.WriteLine("----------Join------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- Console.WriteLine("Join: result=");
- z.Dump();
- Console.WriteLine("===================================================================================");
- return z;
- }
-#endif
-
- /// <summary>
- /// The join is computed as described in section 4.4 in Cousot and Halbwachs.
- /// </summary>
- /// <param name="lcs"></param>
- /// <returns></returns>
-#if DEBUG_PRINT
- public LinearConstraintSystem JoinX(LinearConstraintSystem lcs) {
-#else
- public LinearConstraintSystem/*!*/ Join(LinearConstraintSystem/*!*/ lcs) {
- Contract.Requires(lcs != null);
- Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
-#endif
-
- if (this.IsBottom()) {
- return cce.NonNull(lcs.Clone());
- } else if (lcs.IsBottom()) {
- return cce.NonNull(this.Clone());
- } else if (this.IsTop() || lcs.IsTop()) {
- return new LinearConstraintSystem(new ArrayList /*LinearConstraint*/ ());
- } else {
- LinearConstraintSystem/*!*/ z;
- // Start from the "larger" of the two frames (this is just a heuristic measure intended
- // to save work).
- Contract.Assume(this.FrameVertices != null);
- Contract.Assume(this.FrameRays != null);
- Contract.Assume(this.FrameLines != null);
- Contract.Assume(lcs.FrameVertices != null);
- Contract.Assume(lcs.FrameRays != null);
- Contract.Assume(lcs.FrameLines != null);
- if (this.FrameVertices.Count + this.FrameRays.Count + this.FrameLines.Count - this.FrameDimensions.Count <
- lcs.FrameVertices.Count + lcs.FrameRays.Count + lcs.FrameLines.Count - lcs.FrameDimensions.Count) {
- z = cce.NonNull(lcs.Clone());
- lcs = this;
- } else {
- z = cce.NonNull(this.Clone());
- }
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: LinearConstraintSystem.Join ---------------");
- Console.WriteLine("z:");
- z.Dump();
- Console.WriteLine("lcs:");
- lcs.Dump();
-#endif
-
- // Start by explicating the implicit lines of z for the dimensions dims(lcs)-dims(z).
- foreach (IVariable/*!*/ dim in lcs.FrameDimensions) {
- Contract.Assert(dim != null);
- if (!z.FrameDimensions.Contains(dim)) {
- z.FrameDimensions.Add(dim);
- FrameElement line = new FrameElement();
- line.AddCoordinate(dim, Rational.ONE);
- // Note: AddLine is not called (because the line already exists in z--it's just that
- // it was represented implicitly). Instead, just tack the explicit representation onto
- // FrameLines.
- Contract.Assume(z.FrameLines != null);
- z.FrameLines.Add(line);
-#if DEBUG_PRINT
- Console.WriteLine("Join: After explicating line: {0}", line);
- z.Dump();
-#endif
- }
- }
-
- // Now, the vertices, rays, and lines can be added.
- foreach (FrameElement/*!*/ v in lcs.FrameVertices) {
- Contract.Assert(v != null);
- z.AddVertex(v);
-#if DEBUG_PRINT
- Console.WriteLine("Join: After adding vertex: {0}", v);
- z.Dump();
-#endif
- }
- foreach (FrameElement/*!*/ r in lcs.FrameRays) {
- Contract.Assert(r != null);
- z.AddRay(r);
-#if DEBUG_PRINT
- Console.WriteLine("Join: After adding ray: {0}", r);
- z.Dump();
-#endif
- }
- foreach (FrameElement/*!*/ l in lcs.FrameLines) {
- Contract.Assert(l != null);
- z.AddLine(l);
-#if DEBUG_PRINT
- Console.WriteLine("Join: After adding line: {0}", l);
- z.Dump();
-#endif
- }
- // also add to z the implicit lines of lcs
- foreach (IVariable/*!*/ dim in z.FrameDimensions) {
- Contract.Assert(dim != null);
- if (!lcs.FrameDimensions.Contains(dim)) {
- // "dim" is a dimension that's explicit in "z" but implicit in "lcs"
- FrameElement line = new FrameElement();
- line.AddCoordinate(dim, Rational.ONE);
- z.AddLine(line);
-#if DEBUG_PRINT
- Console.WriteLine("Join: After adding lcs's implicit line: {0}", line);
- z.Dump();
-#endif
- }
- }
-
- z.SimplifyFrame();
- z.SimplifyConstraints();
- z.CheckInvariant();
-#if DEBUG_PRINT
- Console.WriteLine("Join: Returning z:");
- z.Dump();
- Console.WriteLine("----------------------------------------");
-#endif
- return z;
- }
- }
-
-#if DEBUG_PRINT
- public LinearConstraintSystem Widen(LinearConstraintSystem lcs)
- {
- Console.WriteLine("===================================================================================");
- Console.WriteLine("DEBUG: Widen");
- Console.WriteLine("Widen: this=");
- Dump();
- Console.WriteLine("Widen: lcs=");
- lcs.Dump();
- LinearConstraintSystem z = WidenX(lcs);
- Console.WriteLine("----------Widen------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- Console.WriteLine("Widen: result=");
- z.Dump();
- Console.WriteLine("===================================================================================");
- return z;
- }
-#endif
-
-#if DEBUG_PRINT
- public LinearConstraintSystem WidenX(LinearConstraintSystem lcs){
-#else
- public LinearConstraintSystem/*!*/ Widen(LinearConstraintSystem/*!*/ lcs) {
- Contract.Requires(lcs != null);
- Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
-#endif
- if (this.IsBottom()) {
- return cce.NonNull(lcs.Clone());
- } else if (lcs.IsBottom()) {
- return cce.NonNull(this.Clone());
- } else if (this.IsTop() || lcs.IsTop()) {
- return new LinearConstraintSystem(new ArrayList /*LinearConstraint*/ ());
- }
-
- // create new LCS, we will add only verified constraints to this...
- ArrayList /*LinearConstraint*/ newConstraints = new ArrayList /*LinearConstraint*/ ();
- Contract.Assume(this.Constraints != null);
- foreach (LinearConstraint/*!*/ ccX in this.Constraints) {
- Contract.Assert(ccX != null);
- LinearConstraint cc = ccX;
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: Starting to check constraint: {0}", cc);
-#endif
- if (cc.IsConstant()) {
- // (Can this ever occur in the stable state of a LinearConstraintSystem? --KRML)
- // constraint is unaffected by the frame components
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: --Adding it!");
-#endif
- newConstraints.Add(cc);
- continue;
- }
-
- // PHASE I: verify constraints against all frame vertices...
-
- foreach (FrameElement/*!*/ vertex in cce.NonNull(lcs.FrameVertices)) {
- Contract.Assert(vertex != null);
- Rational lhs = cc.EvaluateLhs(vertex);
- if (lhs > cc.rhs) {
- // the vertex does not satisfy the inequality <=
- if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: throwing out because of vertex: {0}", vertex);
-#endif
- goto CHECK_NEXT_CONSTRAINT;
- } else {
- // ... but it does satisfy the inequality >=
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: throwing out <= because of vertex: {0}", vertex);
-#endif
- cc = cc.ChangeRelationToAtLeast();
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: left with constraint: {0}", cc);
-#endif
- }
- } else if (cc.Relation == LinearConstraint.ConstraintRelation.EQ && lhs < cc.rhs) {
- // the vertex does not satisfy the inequality >=, and the constraint is an equality constraint
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: throwing out >= because of vertex: {0}", vertex);
-#endif
- cc = cc.ChangeRelation(LinearConstraint.ConstraintRelation.LE);
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: left with contraint: {0}", cc);
-#endif
- }
- }
-
- // PHASE II: verify constraints against all frame rays...
-
- foreach (FrameElement/*!*/ ray in cce.NonNull(lcs.FrameRays)) {
- Contract.Assert(ray != null);
- // The following assumes the constraint to have some dimension with a non-zero coefficient
- Rational lhs = cc.EvaluateLhs(ray);
- if (lhs.IsPositive) {
- // the ray does not satisfy the inequality <=
- if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: throwing out because of ray: {0}", ray);
-#endif
- goto CHECK_NEXT_CONSTRAINT;
- } else {
- // ... but it does satisfy the inequality >=
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: throwing out <= because of ray: {0}", ray);
-#endif
- cc = cc.ChangeRelationToAtLeast();
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: left with contraint: {0}", cc);
-#endif
- }
- } else if (cc.Relation == LinearConstraint.ConstraintRelation.EQ && lhs.IsNegative) {
- // the ray does not satisfy the inequality >=, and the constraint is an equality constraint
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: throwing out >= because of ray: {0}", ray);
-#endif
- cc = cc.ChangeRelation(LinearConstraint.ConstraintRelation.LE);
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: left with constraint: {0}", cc);
-#endif
- }
- }
-
- // PHASE III: verify constraints against all frame lines...
-
- foreach (FrameElement/*!*/ line in cce.NonNull(lcs.FrameLines)) {
- Contract.Assert(line != null);
- // The following assumes the constraint to have some dimension with a non-zero coefficient
- Rational lhs = cc.EvaluateLhs(line);
- if (!lhs.IsZero) {
- // The line satisfies neither the inequality <= nor the equality ==
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: throwing out because of line: {0}", line);
-#endif
- goto CHECK_NEXT_CONSTRAINT;
- }
- }
-
- // constraint has been verified, so add to new constraint system
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: --Adding it!");
-#endif
- newConstraints.Add(cc);
-
- CHECK_NEXT_CONSTRAINT: {
- }
-#if DEBUG_PRINT
- Console.WriteLine("Widen checking: done with that constraint");
-#endif
- }
-
- return new LinearConstraintSystem(newConstraints);
- }
-
-#if DEBUG_PRINT
- public LinearConstraintSystem Project(IVariable/*!*/ dim){
-Contract.Requires(dim != null);
- Console.WriteLine("===================================================================================");
- Console.WriteLine("DEBUG: Project(dim={0})", dim);
- Console.WriteLine("Project: this=");
- Dump();
- LinearConstraintSystem z = ProjectX(dim);
- Console.WriteLine("----------Project------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- Console.WriteLine("Project: result=");
- z.Dump();
- Console.WriteLine("===================================================================================");
- return z;
- }
-#endif
-
-#if DEBUG_PRINT
- public LinearConstraintSystem ProjectX(IVariable/*!*/ dim){Contract.Requires(dim != null);Contract.Requires(this.Constraints != null);
-#else
- public LinearConstraintSystem/*!*/ Project(IVariable/*!*/ dim) {
- Contract.Requires(dim != null);
- Contract.Requires(this.Constraints != null);
- Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
-#endif
-
-
- ArrayList /*LinearConstraint!*//*!*/ cc = Project(dim, Constraints);
- Contract.Assert(cc != null);
- return new LinearConstraintSystem(cc);
- }
-
-#if DEBUG_PRINT
- public LinearConstraintSystem Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName){
-Contract.Requires(newName != null);
-Contract.Requires(oldName != null);
- Console.WriteLine("===================================================================================");
- Console.WriteLine("DEBUG: Rename(oldName={0}, newName={1})", oldName, newName);
- Console.WriteLine("Rename: this=");
- Dump();
- LinearConstraintSystem z = RenameX(oldName, newName);
- Console.WriteLine("----------Rename------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- Console.WriteLine("Rename: result=");
- z.Dump();
- Console.WriteLine("===================================================================================");
- return z;
- }
-#endif
-
-#if DEBUG_PRINT
- public LinearConstraintSystem RenameX(IVariable/*!*/ oldName, IVariable/*!*/ newName){Contract.Requires(oldName != null);Contract.Requires(newName != null);
-#else
- public LinearConstraintSystem/*!*/ Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- Contract.Requires(oldName != null);
- Contract.Requires(newName != null);
- Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
-#endif
- if (this.Constraints == null) {
- System.Diagnostics.Debug.Assert(this.FrameVertices == null);
- System.Diagnostics.Debug.Assert(this.FrameRays == null);
- System.Diagnostics.Debug.Assert(this.FrameLines == null);
- return this;
- }
- IMutableSet /*IVariable!*//*!*/ dims = this.FrameDimensions;
- Contract.Assert(dims != null);
- if (!dims.Contains(oldName)) {
- return this;
- }
-
- LinearConstraintSystem z = new LinearConstraintSystem();
- z.FrameDimensions = cce.NonNull((HashSet/*!*/ /*IVariable!*/)dims.Clone());
- z.FrameDimensions.Remove(oldName);
- z.FrameDimensions.Add(newName);
-
- z.Constraints = new ArrayList /*LinearConstraint!*/ (this.Constraints.Count);
- foreach (LinearConstraint/*!*/ lc in cce.NonNull(this.Constraints)) {
- Contract.Assert(lc != null);
- z.Constraints.Add(lc.Rename(oldName, newName));
- }
- z.FrameVertices = RenameInFE(cce.NonNull(this.FrameVertices), oldName, newName);
- z.FrameRays = RenameInFE(cce.NonNull(this.FrameRays), oldName, newName);
- z.FrameLines = RenameInFE(cce.NonNull(this.FrameLines), oldName, newName);
- return z;
- }
-
- static ArrayList /*FrameElement*/ RenameInFE(ArrayList/*!*/ /*FrameElement*/ list, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- Contract.Requires(list != null);
- Contract.Requires(newName != null);
- Contract.Requires(oldName != null);
- ArrayList/*FrameElement!*//*!*/ z = new ArrayList/*FrameElement!*/ (list.Count);
- Contract.Assert(z != null);
- foreach (FrameElement/*!*/ fe in list) {
- Contract.Assert(fe != null);
- z.Add(fe.Rename(oldName, newName));
- }
- System.Diagnostics.Debug.Assert(z.Count == list.Count);
- return z;
- }
-
- // --------------------------------------------------------------------------------------------------------
- // ------------------ support routines --------------------------------------------------------------------
- // --------------------------------------------------------------------------------------------------------
-
- /// <summary>
- /// Returns a set of constraints that is the given set of constraints with dimension "dim"
- /// projected out. See Cousot and Halbwachs, section 3.3.1.1.
- /// </summary>
- /// <param name="dim"></param>
- /// <param name="constraints"></param>
- /// <returns></returns>
- static ArrayList /*LinearConstraint!*//*!*/ Project(IVariable/*!*/ dim, ArrayList /*LinearConstraint!*//*!*/ constraints) {
- Contract.Requires(constraints != null);
- Contract.Requires(dim != null);
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- // Sort the inequality constaints into ones where dimension "dim" is 0, negative, and
- // positive, respectively. Put equality constraints with a non-0 "dim" into "eq".
- ArrayList /*LinearConstraint!*//*!*/ final = new ArrayList /*LinearConstraint!*/ ();
- ArrayList /*LinearConstraint!*//*!*/ negative = new ArrayList /*LinearConstraint!*/ ();
- ArrayList /*LinearConstraint!*//*!*/ positive = new ArrayList /*LinearConstraint!*/ ();
- ArrayList /*LinearConstraint!*//*!*/ eq = new ArrayList /*LinearConstraint!*/ ();
- foreach (LinearConstraint/*!*/ cc in constraints) {
- Contract.Assert(cc != null);
- Rational coeff = cc[dim];
- if (coeff.IsZero) {
- LinearConstraint lc = cce.NonNull(cc.Clone());
- if (!lc.IsConstant()) {
- lc.RemoveDimension(dim);
- final.Add(lc);
- }
- } else if (cc.Relation == LinearConstraint.ConstraintRelation.EQ) {
- eq.Add(cc);
- } else if (coeff.IsNegative) {
- negative.Add(cc);
- } else {
- System.Diagnostics.Debug.Assert(coeff.IsPositive);
- positive.Add(cc);
- }
- }
-
- if (eq.Count != 0) {
- LinearConstraint eqConstraint = (LinearConstraint/*!*/)cce.NonNull(eq[eq.Count - 1]);
- eq.RemoveAt(eq.Count - 1);
- Rational eqC = -eqConstraint[dim];
-
- foreach (ArrayList /*LinearConstraint!*/ list in new ArrayList[] { eq, negative, positive }) {
- Contract.Assert(list != null);
- foreach (LinearConstraint/*!*/ lcX in list) {
- Contract.Assert(lcX != null);
- LinearConstraint lc = cce.NonNull(lcX.Clone());
- lc.AddMultiple(lc[dim] / eqC, eqConstraint);
- System.Diagnostics.Debug.Assert(lc[dim].IsZero);
- if (!lc.IsConstant()) {
- lc.RemoveDimension(dim);
- final.Add(lc);
- } else {
- System.Diagnostics.Debug.Assert(lc.IsConstantSatisfiable());
- }
- }
- }
- } else {
- // Consider all pairs of constraints with (negative,positive) coefficients of "dim".
- foreach (LinearConstraint/*!*/ cn in negative) {
- Contract.Assert(cn != null);
- Rational dn = -cn[dim];
- System.Diagnostics.Debug.Assert(dn.IsNonNegative);
- foreach (LinearConstraint/*!*/ cp in positive) {
- Contract.Assert(cp != null);
- Rational dp = cp[dim];
-
- LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- lc.AddMultiple(dn, cp);
- lc.AddMultiple(dp, cn);
- System.Diagnostics.Debug.Assert(lc[dim].IsZero);
- if (!lc.IsConstant()) {
- lc.RemoveDimension(dim);
- final.Add(lc);
- } else {
- System.Diagnostics.Debug.Assert(lc.IsConstantSatisfiable());
- }
- }
- }
- }
-
- return final;
- }
-
- /// <summary>
- /// Initializes FrameVertices, FrameRays, FrameLines, and FrameDimensions, see
- /// Cousot and Halbwachs, section 3.4. Any previous values of these fields are
- /// ignored and overwritten.
- ///
- /// If the set of Constraints is unsatisfiable, then "this" is changed into Bottom.
- /// </summary>
- void GenerateFrameFromConstraints() {
- if (Constraints == null) {
- FrameVertices = null;
- FrameRays = null;
- FrameLines = null;
- FrameDimensions = new HashSet /*IVariable!*/ ();
- return;
- }
-
- // Step 1 (see Cousot and Halbwachs, section 3.4.3): create a Simplex Tableau.
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: --- GenerateFrameFromConstraint ---");
- Console.WriteLine("Constraints:");
- foreach (LinearConstraint cc in Constraints)
- {
- Console.WriteLine(" {0}", cc);
- }
-#endif
- SimplexTableau tableau = new SimplexTableau(Constraints);
-#if DEBUG_PRINT
- Console.WriteLine("Initial tableau:");
- tableau.Dump();
-#endif
- FrameDimensions = tableau.GetDimensions();
-#if DEBUG_PRINT
- Console.WriteLine("Dimensions:");
- foreach (object dim in FrameDimensions)
- {
- Console.Write(" {0}", dim);
- }
- Console.WriteLine();
-#endif
-
- // Step 3 and 2: Put as many initial variables as possible into basis, then check if
- // we reached a feasible basis
- tableau.AddInitialVarsToBasis();
-#if DEBUG_PRINT
- Console.WriteLine("Tableau after Step 3:");
- tableau.Dump();
-#endif
- if (!tableau.IsFeasibleBasis) {
- // The polyhedron is empty (according to Cousot and Halbwachs)
- ChangeIntoBottom();
- return;
- }
-
- FrameVertices = new ArrayList /*FrameElement*/ ();
- FrameRays = new ArrayList /*FrameElement*/ ();
- FrameLines = new ArrayList /*FrameElement*/ ();
- if (FrameDimensions.Count == 0) {
- // top element
- return;
- }
-
- if (tableau.AllInitialVarsInBasis) {
- // All initial variables are in basis; there are no lines.
-#if DEBUG_PRINT
- Console.WriteLine("Tableau after Steps 2 and 3 (all initial variables in basis):");
- tableau.Dump();
-#endif
- } else {
- // There are lines
-#if DEBUG_PRINT
- Console.WriteLine("Tableau after Steps 2 and 3 (NOT all initial variables in basis--there are lines):");
- tableau.Dump();
-#endif
- // Step 4.2: Pick out the lines, then produce the tableau for a new polyhedron without those lines.
- ArrayList /*LinearConstraint*/ moreConstraints = cce.NonNull((ArrayList/*!*/ /*LinearConstraint*/)Constraints.Clone());
- tableau.ProduceLines(FrameLines, moreConstraints);
- tableau = new SimplexTableau(moreConstraints);
-#if DEBUG_PRINT
- Console.WriteLine("Lines produced:");
- foreach (FrameElement line in FrameLines)
- {
- Console.WriteLine(" {0}", line);
- }
- Console.WriteLine("The new list of constraints is:");
- foreach (LinearConstraint c in moreConstraints)
- {
- Console.WriteLine(" {0}", c);
- }
- Console.WriteLine("Tableau after producing lines in Step 4.2:");
- tableau.Dump();
-#endif
-
- // Repeat step 3 for the new tableau.
- // Since the new tableau contains no lines, the following call should cause all initial
- // variables to be in basis (see step 4.2 in section 3.4.3 of Cousot and Halbwachs).
- tableau.AddInitialVarsToBasis();
- System.Diagnostics.Debug.Assert(tableau.AllInitialVarsInBasis);
- System.Diagnostics.Debug.Assert(tableau.IsFeasibleBasis); // the new tableau represents a set of feasible constraints, so this basis should be found to be feasible
-#if DEBUG_PRINT
- Console.WriteLine("Tableau after all initial variables have been moved into basis:");
- tableau.Dump();
-#endif
- }
-
- // Step 4.1: One vertex has been found. Find all others, too.
- tableau.TraverseVertices(FrameVertices, FrameRays);
-#if DEBUG_PRINT
- Console.WriteLine("Tableau after vertex traversal:");
- tableau.Dump();
-#endif
- }
-
- class LambdaDimension : IVariable {
- readonly int id;
- static int count = 0;
-
- /// <summary>
- /// Return the name of the variable
- /// </summary>
- public string Name {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- return this.ToString();
- }
- }
-
- public LambdaDimension() {
- id = count;
- count++;
- }
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return "lambda" + id;
- }
- [Pure]
- public object DoVisit(ExprVisitor/*!*/ visitor) {
- //Contract.Requires(visitor != null);
- return visitor.VisitVariable(this);
- }
- }
-
- /// <summary>
- /// Adds a vertex to the frame of "this" and updates Constraints accordingly, see
- /// Cousot and Halbwachs, section 3.3.1.1. However, this method does not simplify
- /// Constraints after the operation; that remains the caller's responsibility (which
- /// gives the caller the opportunity to make multiple calls to AddVertex, AddRay,
- /// and AddLine before calling SimplifyConstraints).
- /// Assumes Constraints (and the frame fields) to be non-null.
- /// </summary>
- /// <param name="vertex"></param>
- void AddVertex(FrameElement/*!*/ vertex) {
- Contract.Requires(vertex != null);
- Contract.Requires(this.FrameVertices != null);
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: AddVertex called on {0}", vertex);
- Console.WriteLine(" Initial constraints:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
-
- FrameVertices.Add(vertex.Clone());
-#if FIXED_DESERIALIZER
- Contract.Assert(Contract.ForAll(vertex.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
-#endif
-
- // We use a new temporary dimension.
- IVariable/*!*/ lambda = new LambdaDimension();
-
- // We change the constraints A*X <= B into
- // A*X + (A*vector - B)*lambda <= A*vector.
- // That means that each row k in A (which corresponds to one LinearConstraint
- // in Constraints) is changed by adding
- // (A*vector - B)[k] * lambda
- // to row k and changing the right-hand side of row k to
- // (A*vector)[k]
- // Note:
- // (A*vector - B)[k]
- // = { vector subtraction is pointwise }
- // (A*vector)[k] - B[k]
- // = { A*vector is a row vector whose every row i is the dot-product of
- // row i of A with the column vector "vector" }
- // A[k]*vector - B[k]
- foreach (LinearConstraint/*!*/ cc in cce.NonNull(Constraints)) {
- Contract.Assert(cc != null);
- Rational d = cc.EvaluateLhs(vertex);
- cc.SetCoefficient(lambda, d - cc.rhs);
- cc.rhs = d;
- }
-
- // We also add the constraints that lambda lies between 0 ...
- LinearConstraint la = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- la.SetCoefficient(lambda, Rational.MINUS_ONE);
- la.rhs = Rational.ZERO;
- Constraints.Add(la);
- // ... and 1.
- la = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- la.SetCoefficient(lambda, Rational.ONE);
- la.rhs = Rational.ONE;
- Constraints.Add(la);
-#if DEBUG_PRINT
- Console.WriteLine(" Constraints after addition:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
-
- // Finally, project out the dummy dimension.
- Constraints = Project(lambda, Constraints);
-
-#if DEBUG_PRINT
- Console.WriteLine(" Resulting constraints:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
- }
-
- /// <summary>
- /// Adds a ray to the frame of "this" and updates Constraints accordingly, see
- /// Cousot and Halbwachs, section 3.3.1.1. However, this method does not simplify
- /// Constraints after the operation; that remains the caller's responsibility (which
- /// gives the caller the opportunity to make multiple calls to AddVertex, AddRay,
- /// and AddLine before calling SimplifyConstraints).
- /// Assumes Constraints (and the frame fields) to be non-null.
- /// </summary>
- /// <param name="ray"></param>
- void AddRay(FrameElement/*!*/ ray) {
- Contract.Requires(ray != null);
- Contract.Requires(this.FrameRays != null);
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: AddRay called on {0}", ray);
- Console.WriteLine(" Initial constraints:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
-
- FrameRays.Add(ray.Clone());
-#if FIXED_DESERIALIZER
- Contract.Assert(Contract.ForAll(ray.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
-#endif
-
- // We use a new temporary dimension.
- IVariable/*!*/ lambda = new LambdaDimension();
-
- // We change the constraints A*X <= B into
- // A*X - (A*ray)*lambda <= B.
- // That means that each row k in A (which corresponds to one LinearConstraint
- // in Constraints) is changed by subtracting
- // (A*ray)[k] * lambda
- // from row k.
- // Note:
- // (A*ray)[k]
- // = { A*ray is a row vector whose every row i is the dot-product of
- // row i of A with the column vector "ray" }
- // A[k]*ray
- foreach (LinearConstraint/*!*/ cc in cce.NonNull(Constraints)) {
- Contract.Assert(cc != null);
- Rational d = cc.EvaluateLhs(ray);
- cc.SetCoefficient(lambda, -d);
- }
-
- // We also add the constraints that lambda is at least 0.
- LinearConstraint la = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- la.SetCoefficient(lambda, Rational.MINUS_ONE);
- la.rhs = Rational.ZERO;
- Constraints.Add(la);
-#if DEBUG_PRINT
- Console.WriteLine(" Constraints after addition:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
-
- // Finally, project out the dummy dimension.
- Constraints = Project(lambda, Constraints);
-
-#if DEBUG_PRINT
- Console.WriteLine(" Resulting constraints:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
- }
-
- /// <summary>
- /// Adds a line to the frame of "this" and updates Constraints accordingly, see
- /// Cousot and Halbwachs, section 3.3.1.1. However, this method does not simplify
- /// Constraints after the operation; that remains the caller's responsibility (which
- /// gives the caller the opportunity to make multiple calls to AddVertex, AddRay,
- /// and AddLine before calling SimplifyConstraints).
- /// Assumes Constraints (and the frame fields) to be non-null.
- /// </summary>
- /// <param name="line"></param>
- void AddLine(FrameElement/*!*/ line) {
- Contract.Requires(line != null);
- Contract.Requires(this.FrameLines != null);
- // Note: The code for AddLine is identical to that of AddRay, except the AddLine
- // does not introduce the constraint 0 <= lambda. (One could imagine sharing the
- // code between AddRay and AddLine.)
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: AddLine called on {0}", line);
- Console.WriteLine(" Initial constraints:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
-
- FrameLines.Add(line.Clone());
-#if FIXED_DESERIALIZER
- Contract.Assert(Contract.ForAll(line.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
-#endif
-
- // We use a new temporary dimension.
- IVariable/*!*/ lambda = new LambdaDimension();
-
- // We change the constraints A*X <= B into
- // A*X - (A*line)*lambda <= B.
- // That means that each row k in A (which corresponds to one LinearConstraint
- // in Constraints) is changed by subtracting
- // (A*line)[k] * lambda
- // from row k.
- // Note:
- // (A*line)[k]
- // = { A*line is a row vector whose every row i is the dot-product of
- // row i of A with the column vector "line" }
- // A[k]*line
- foreach (LinearConstraint/*!*/ cc in cce.NonNull(Constraints)) {
- Contract.Assert(cc != null);
- Rational d = cc.EvaluateLhs(line);
- cc.SetCoefficient(lambda, -d);
- }
-
-#if DEBUG_PRINT
- Console.WriteLine(" Constraints after addition:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
-
- // Finally, project out the dummy dimension.
- Constraints = Project(lambda, Constraints);
-
-#if DEBUG_PRINT
- Console.WriteLine(" Resulting constraints:");
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
-#endif
- }
-
- ISet /*IVariable!*//*!*/ GetDefinedDimensions() {
- Contract.Ensures(Contract.Result<ISet>() != null);
- HashSet /*IVariable!*//*!*/ dims = new HashSet /*IVariable!*/ ();
- foreach (ArrayList p in new ArrayList[] { FrameVertices, FrameRays, FrameLines }) {
- if (p != null) {
- foreach (FrameElement/*!*/ element in p) {
- Contract.Assert(element != null);
- foreach (IVariable/*!*/ dim in element.GetDefinedDimensions()) {
- Contract.Assert(dim != null);
- dims.Add(dim);
- }
- }
- }
- }
- return dims;
- }
-
- // --------------------------------------------------------------------------------------------------------
- // ------------------ Simplification routines -------------------------------------------------------------
- // --------------------------------------------------------------------------------------------------------
-
- /// <summary>
- /// Uses the Constraints to simplify the frame. See section 3.4.4 of Cousot and Halbwachs.
- /// </summary>
- void SimplifyFrame() {
- Contract.Requires(this.Constraints != null);
- SimplificationStatus[]/*!*/ status;
-
- SimplifyFrameElements(cce.NonNull(FrameVertices), true, Constraints, out status);
- RemoveIrrelevantFrameElements(FrameVertices, status, null);
-
- SimplifyFrameElements(cce.NonNull(FrameRays), false, Constraints, out status);
- RemoveIrrelevantFrameElements(FrameRays, status, FrameLines);
- }
-
- enum SimplificationStatus {
- Irrelevant,
- Relevant,
- More
- };
-
- /// <summary>
- /// For each i, sets status[i] to:
- /// <ul>
- /// <li>Irrelevant if ff[i] is irrelevant</li>
- /// <li>Relevant if ff[i] is irrelevant</li>
- /// <li>More if vertices is true and ray ff[i] can be replaced by a line ff[i]</li>
- /// </ul>
- /// </summary>
- /// <param name="ff"></param>
- /// <param name="vertices">true if "ff" contains vertices; false if "ff" contains rays</param>
- /// <param name="constraints"></param>
- /// <param name="status"></param>
- static void SimplifyFrameElements(ArrayList/*!*/ /*FrameElement*/ ff, bool vertices, ArrayList/*!*/ /*LinearConstraint*/ constraints, out SimplificationStatus[]/*!*/ status) {
- Contract.Requires(ff != null);
- Contract.Requires(constraints != null);
- Contract.Ensures(Contract.ValueAtReturn(out status) != null);
- status = new SimplificationStatus[ff.Count];
- bool[,] sat = new bool[ff.Count, constraints.Count];
- for (int i = 0; i < ff.Count; i++) {
- FrameElement f = (FrameElement/*!*/)cce.NonNull(ff[i]);
- int cnt = 0;
- for (int c = 0; c < constraints.Count; c++) {
- LinearConstraint lc = (LinearConstraint/*!*/)cce.NonNull(constraints[c]);
- bool s = lc.IsSaturatedBy(f, vertices);
- if (s) {
- sat[i, c] = true;
- cnt++;
- }
- }
- if (!vertices && cnt == constraints.Count) {
- status[i] = SimplificationStatus.More;
- } else {
- status[i] = SimplificationStatus.Relevant;
- }
- }
-
- CheckPairSimplifications(sat, status);
- }
-
- /// <summary>
- /// Requires sat.GetLength(0) == status.Length.
- /// </summary>
- /// <param name="sat"></param>
- /// <param name="status"></param>
- static void CheckPairSimplifications(bool[,]/*!*/ sat, SimplificationStatus[]/*!*/ status) {
- Contract.Requires(status != null);
- Contract.Requires(sat != null);
- Contract.Requires(sat.GetLength(0) == status.Length);
- int M = sat.GetLength(0);
- int N = sat.GetLength(1);
-
- for (int i = 0; i < M - 1; i++) {
- if (status[i] != SimplificationStatus.Relevant) {
- continue;
- }
- for (int j = i + 1; j < M; j++) {
- if (status[j] != SimplificationStatus.Relevant) {
- continue;
- }
- // check (sat[i,*] <= sat[j,*]) and (sat[i,*] >= sat[j,*])
- int cmp = 0; // -1: (sat[i,*] <= sat[j,*]), 0: equal, 1: (sat[i,*] >= sat[j,*])
- for (int c = 0; c < N; c++) {
- if (cmp < 0) {
- if (sat[i, c] && !sat[j, c]) {
- // incomparable
- goto NEXT_PAIR;
- }
- } else if (0 < cmp) {
- if (!sat[i, c] && sat[j, c]) {
- // incomparable
- goto NEXT_PAIR;
- }
- } else if (sat[i, c] != sat[j, c]) {
- if (!sat[i, c]) {
- cmp = -1;
- } else {
- cmp = 1;
- }
- }
- }
- if (cmp <= 0) {
- // sat[i,*] <= sat[j,*] holds, so mark i as irrelevant
- status[i] = SimplificationStatus.Irrelevant;
- goto NEXT_OUTER;
- } else {
- // sat[i,*] >= sat[j,*] holds, so mark j as irrelevant
- status[j] = SimplificationStatus.Irrelevant;
- }
- NEXT_PAIR: {
- }
- }
- NEXT_OUTER: {
- }
- }
- }
-
- static void RemoveIrrelevantFrameElements(ArrayList/*!*/ /*FrameElement*/ ff, SimplificationStatus[]/*!*/ status,
- /*maybe null*/ ArrayList /*FrameElement*/ lines) {
- Contract.Requires(ff != null);
- Contract.Requires(status != null);
- Contract.Requires(ff.Count == status.Length);
- for (int j = ff.Count - 1; 0 <= j; j--) {
- switch (status[j]) {
- case SimplificationStatus.Relevant:
- break;
- case SimplificationStatus.Irrelevant:
-#if DEBUG_PRINT
- Console.WriteLine("Removing irrelevant {0}: {1}", lines == null ? "vertex" : "ray", ff[j]);
-#endif
- ff.RemoveAt(j);
- break;
- case SimplificationStatus.More:
- System.Diagnostics.Debug.Assert(lines != null);
- FrameElement f = (FrameElement)ff[j];
-#if DEBUG_PRINT
- Console.WriteLine("Changing ray into line: {0}", f);
-#endif
- ff.RemoveAt(j);
- Contract.Assert(lines != null);
- lines.Add(f);
- break;
- }
- }
- }
-
- /// <summary>
- /// Uses the frame to simplify Constraints. See section 3.3.1.2 of Cousot and Halbwachs.
- ///
- /// Note: This code does not necessarily eliminate all irrelevant equalities; Cousot and
- /// Halbwachs only claim that the technique eliminates all irrelevant inequalities.
- /// </summary>
- void SimplifyConstraints() {
- if (Constraints == null) {
- return;
- }
- Contract.Assume(this.FrameVertices != null);
- Contract.Assume(this.FrameRays != null);
-
- SimplificationStatus[] status = new SimplificationStatus[Constraints.Count];
- /*readonly*/
- int feCount = FrameVertices.Count + FrameRays.Count;
-
- // Create a table that keeps track of which constraints are satisfied by which vertices and rays
- bool[,] sat = new bool[Constraints.Count, FrameVertices.Count + FrameRays.Count];
- for (int i = 0; i < Constraints.Count; i++) {
- status[i] = SimplificationStatus.Relevant;
- LinearConstraint lc = (LinearConstraint/*!*/)cce.NonNull(Constraints[i]);
- int cnt = 0; // number of vertices and rays that saturate lc
- for (int j = 0; j < FrameVertices.Count; j++) {
- FrameElement vertex = (FrameElement/*!*/)cce.NonNull(FrameVertices[j]);
- if (lc.IsSaturatedBy(vertex, true)) {
- sat[i, j] = true;
- cnt++;
- }
- }
- if (cnt == 0) {
- // no vertex saturates the constraint, so the constraint is irrelevant
- status[i] = SimplificationStatus.Irrelevant;
- continue;
- }
- for (int j = 0; j < FrameRays.Count; j++) {
- FrameElement ray = (FrameElement/*!*/)cce.NonNull(FrameRays[j]);
- if (lc.IsSaturatedBy(ray, false)) {
- sat[i, FrameVertices.Count + j] = true;
- cnt++;
- }
- }
- if (cnt == feCount) {
- status[i] = SimplificationStatus.More;
- } else {
- // Cousot and Halbwachs says that all equalities are found in the way we just tested.
- // If I understand that right, then we should not get here if the constraint is an
- // equality constraint. The following assertion tests my understanding. --KRML
- System.Diagnostics.Debug.Assert(lc.Relation == LinearConstraint.ConstraintRelation.LE);
- }
- }
-
- CheckPairSimplifications(sat, status);
-
- // Finally, make the changes to the list of constraints
- for (int i = Constraints.Count - 1; 0 <= i; i--) {
- switch (status[i]) {
- case SimplificationStatus.Relevant:
- break;
- case SimplificationStatus.Irrelevant:
-#if DEBUG_PRINT
- Console.WriteLine("Removing irrelevant constraint: {0}", Constraints[i]);
-#endif
- Constraints.RemoveAt(i);
- break;
- case SimplificationStatus.More:
- LinearConstraint lc = (LinearConstraint/*!*/)cce.NonNull(Constraints[i]);
- if (lc.Relation == LinearConstraint.ConstraintRelation.LE) {
-#if DEBUG_PRINT
- Console.WriteLine("Converting the following constraint into an equality: {0}", lc);
-#endif
- LinearConstraint lcEq = lc.ChangeRelation(LinearConstraint.ConstraintRelation.EQ);
- Constraints[i] = lcEq;
- }
- break;
- }
- }
-
- foreach (LinearConstraint/*!*/ lc in Constraints) {
- Contract.Assert(lc != null);
- lc.Normalize();
- }
- }
-
- // --------------------------------------------------------------------------------------------------------
- // ------------------ Cloning routines --------------------------------------------------------------------
- // --------------------------------------------------------------------------------------------------------
-
- public LinearConstraintSystem/*!*/ Clone() {
- Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
- LinearConstraintSystem z = new LinearConstraintSystem();
- z.FrameDimensions = (IMutableSet /*IVariable!*//*!*/)cce.NonNull(this.FrameDimensions.Clone());
- if (this.Constraints != null) {
- z.Constraints = DeeperListCopy_LC(this.Constraints);
- z.FrameVertices = DeeperListCopy_FE(cce.NonNull(this.FrameVertices));
- z.FrameRays = DeeperListCopy_FE(cce.NonNull(this.FrameRays));
- z.FrameLines = DeeperListCopy_FE(cce.NonNull(this.FrameLines));
- } else {
- System.Diagnostics.Debug.Assert(this.FrameVertices == null);
- System.Diagnostics.Debug.Assert(this.FrameRays == null);
- System.Diagnostics.Debug.Assert(this.FrameLines == null);
- // the constructor should already have set these fields of z to null
- System.Diagnostics.Debug.Assert(z.Constraints == null);
- System.Diagnostics.Debug.Assert(z.FrameVertices == null);
- System.Diagnostics.Debug.Assert(z.FrameRays == null);
- System.Diagnostics.Debug.Assert(z.FrameLines == null);
- }
- return z;
- }
-
- /// <summary>
- /// Clones "list" and the elements of "list".
- /// </summary>
- /// <param name="list"></param>
- /// <returns></returns>
- ArrayList /*LinearConstraint*/ DeeperListCopy_LC(ArrayList/*!*/ /*LinearConstraint*/ list) {
- Contract.Requires(list != null);
- ArrayList /*LinearConstraint*/ z = new ArrayList /*LinearConstraint*/ (list.Count);
- foreach (LinearConstraint/*!*/ lc in list) {
- Contract.Assert(lc != null);
- z.Add(lc.Clone());
- }
- System.Diagnostics.Debug.Assert(z.Count == list.Count);
- return z;
- }
-
- /// <summary>
- /// Clones "list" and the elements of "list".
- /// </summary>
- /// <param name="list"></param>
- /// <returns></returns>
- ArrayList /*FrameElement*/ DeeperListCopy_FE(ArrayList/*!*/ /*FrameElement*/ list) {
- Contract.Requires(list != null);
- ArrayList /*FrameElement*/ z = new ArrayList /*FrameElement*/ (list.Count);
- foreach (FrameElement/*!*/ fe in list) {
- Contract.Assert(fe != null);
- z.Add(fe.Clone());
- }
- System.Diagnostics.Debug.Assert(z.Count == list.Count);
- return z;
- }
-
- // --------------------------------------------------------------------------------------------------------
- // ------------------ Debugging and unit test routines ----------------------------------------------------
- // --------------------------------------------------------------------------------------------------------
-
- public void Dump() {
- Console.WriteLine(" Constraints:");
- if (Constraints == null) {
- Console.WriteLine(" <bottom>");
- } else {
- foreach (LinearConstraint cc in Constraints) {
- Console.WriteLine(" {0}", cc);
- }
- }
-
- Console.WriteLine(" FrameDimensions: {0}", FrameDimensions);
-
- Console.WriteLine(" FrameVerticies:");
- if (FrameVertices == null) {
- Console.WriteLine(" <null>");
- } else {
- foreach (FrameElement fe in FrameVertices) {
- Console.WriteLine(" {0}", fe);
- }
- }
-
- Console.WriteLine(" FrameRays:");
- if (FrameRays == null) {
- Console.WriteLine(" <null>");
- } else {
- foreach (FrameElement fe in FrameRays) {
- Console.WriteLine(" {0}", fe);
- }
- }
-
- Console.WriteLine(" FrameLines:");
- if (FrameLines == null) {
- Console.WriteLine(" <null>");
- } else {
- foreach (FrameElement fe in FrameLines) {
- Console.WriteLine(" {0}", fe);
- }
- }
- }
-
- class TestVariable : IVariable {
- readonly string/*!*/ name;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(name != null);
- }
-
-
- public string/*!*/ Name {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- return name;
- }
- }
-
- public TestVariable(string/*!*/ name) {
- Contract.Requires(name != null);
- this.name = name;
- }
- [Pure]
- public object DoVisit(ExprVisitor/*!*/ visitor) {
- //Contract.Requires(visitor != null);
- return visitor.VisitVariable(this);
- }
- }
-
- public static void RunValidationA() {
- IVariable/*!*/ dim1 = new TestVariable("X");
- IVariable/*!*/ dim2 = new TestVariable("Y");
- IVariable/*!*/ dim3 = new TestVariable("Z");
- Contract.Assert(dim1 != null);
- Contract.Assert(dim2 != null);
- Contract.Assert(dim3 != null);
-
- FrameElement s1 = new FrameElement();
- s1.AddCoordinate(dim1, Rational.ONE);
- s1.AddCoordinate(dim2, Rational.MINUS_ONE);
- s1.AddCoordinate(dim3, Rational.ZERO);
- FrameElement s2 = new FrameElement();
- s2.AddCoordinate(dim1, Rational.MINUS_ONE);
- s2.AddCoordinate(dim2, Rational.ONE);
- s2.AddCoordinate(dim3, Rational.ZERO);
- FrameElement r1 = new FrameElement();
- r1.AddCoordinate(dim1, Rational.ZERO);
- r1.AddCoordinate(dim2, Rational.ZERO);
- r1.AddCoordinate(dim3, Rational.ONE);
- FrameElement d1 = new FrameElement();
- d1.AddCoordinate(dim1, Rational.ONE);
- d1.AddCoordinate(dim2, Rational.ONE);
- d1.AddCoordinate(dim3, Rational.ZERO);
-
- // create lcs from frame -- cf. Cousot/Halbwachs 1978, section 3.3.1.1
- LinearConstraintSystem lcs = new LinearConstraintSystem(s1);
- lcs.Dump();
-
- lcs.AddVertex(s2);
- lcs.Dump();
-
- lcs.AddRay(r1);
- lcs.Dump();
-
- lcs.AddLine(d1);
- lcs.Dump();
-
- lcs.SimplifyConstraints();
- lcs.Dump();
-
-#if LATER
- lcs.GenerateFrameFromConstraints(); // should give us back the original frame...
-#endif
- Console.WriteLine("IsSubset? {0}", lcs.IsSubset(lcs.Clone()));
- lcs.Dump();
- }
-
- /// <summary>
- /// Tests the example in section 3.4.3 of Cousot and Halbwachs.
- /// </summary>
- public static void RunValidationB() {
- IVariable/*!*/ X = new TestVariable("X");
- IVariable/*!*/ Y = new TestVariable("Y");
- IVariable/*!*/ Z = new TestVariable("Z");
- Contract.Assert(X != null);
- Contract.Assert(Y != null);
- Contract.Assert(Z != null);
- ArrayList /*LinearConstraint*/ cs = new ArrayList /*LinearConstraint*/ ();
-
- LinearConstraint c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- c.SetCoefficient(X, Rational.MINUS_ONE);
- c.SetCoefficient(Y, Rational.ONE);
- c.SetCoefficient(Z, Rational.MINUS_ONE);
- c.rhs = Rational.ZERO;
- cs.Add(c);
-
- c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- c.SetCoefficient(X, Rational.MINUS_ONE);
- c.rhs = Rational.MINUS_ONE;
- cs.Add(c);
-
- c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- c.SetCoefficient(X, Rational.MINUS_ONE);
- c.SetCoefficient(Y, Rational.MINUS_ONE);
- c.SetCoefficient(Z, Rational.ONE);
- c.rhs = Rational.ZERO;
- cs.Add(c);
-
- c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
- c.SetCoefficient(Y, Rational.MINUS_ONE);
- c.SetCoefficient(Z, Rational.ONE);
- c.rhs = Rational.FromInt(3);
- cs.Add(c);
-
- LinearConstraintSystem lcs = new LinearConstraintSystem(cs);
- Console.WriteLine("==================== The final linear constraint system ====================");
- lcs.Dump();
- }
-
- public static void RunValidationC() {
- // Run the example in section 3.4.3 of Cousot and Halbwachs backwards, that is, from
- // from to constraints.
- IVariable/*!*/ dim1 = new TestVariable("X");
- IVariable/*!*/ dim2 = new TestVariable("Y");
- IVariable/*!*/ dim3 = new TestVariable("Z");
- Contract.Assert(dim1 != null);
- Contract.Assert(dim2 != null);
- Contract.Assert(dim3 != null);
-
- FrameElement s0 = new FrameElement();
- s0.AddCoordinate(dim1, Rational.ONE);
- s0.AddCoordinate(dim2, Rational.FromInts(1, 2));
- s0.AddCoordinate(dim3, Rational.FromInts(-1, 2));
-
- FrameElement s1 = new FrameElement();
- s1.AddCoordinate(dim1, Rational.ONE);
- s1.AddCoordinate(dim2, Rational.FromInts(-1, 2));
- s1.AddCoordinate(dim3, Rational.FromInts(1, 2));
-
- FrameElement s2 = new FrameElement();
- s2.AddCoordinate(dim1, Rational.FromInt(3));
- s2.AddCoordinate(dim2, Rational.FromInts(-3, 2));
- s2.AddCoordinate(dim3, Rational.FromInts(3, 2));
-
- FrameElement r0 = new FrameElement();
- r0.AddCoordinate(dim1, Rational.ONE);
- r0.AddCoordinate(dim2, Rational.FromInts(1, 2));
- r0.AddCoordinate(dim3, Rational.FromInts(-1, 2));
-
- FrameElement r1 = new FrameElement();
- r1.AddCoordinate(dim1, Rational.ONE);
- r1.AddCoordinate(dim2, Rational.ZERO);
- r1.AddCoordinate(dim3, Rational.ZERO);
-
- FrameElement d0 = new FrameElement();
- d0.AddCoordinate(dim1, Rational.ZERO);
- d0.AddCoordinate(dim2, Rational.ONE);
- d0.AddCoordinate(dim3, Rational.ONE);
-
- LinearConstraintSystem lcs = new LinearConstraintSystem(s0);
- lcs.Dump();
-
- lcs.AddVertex(s1);
- lcs.Dump();
-
- lcs.AddVertex(s2);
- lcs.Dump();
-
- lcs.AddRay(r0);
- lcs.Dump();
-
- lcs.AddRay(r1);
- lcs.Dump();
-
- lcs.AddLine(d0);
- lcs.Dump();
-
- lcs.SimplifyConstraints();
- lcs.Dump();
-
-#if LATER
- lcs.GenerateFrameFromConstraints(); // should give us back the original frame...
-#endif
- }
- }
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics;
+ using System;
+ //using Microsoft.SpecSharp.Collections;
+ using System.Diagnostics.Contracts;
+ using Microsoft.Basetypes;
+
+ using IMutableSet = Microsoft.Boogie.GSet<object>;
+ using ISet = Microsoft.Boogie.GSet<object>;
+ using HashSet = Microsoft.Boogie.GSet<object>;
+
+ /// <summary>
+ /// Represents a system of linear constraints (constraint/frame representations).
+ /// </summary>
+ public class LinearConstraintSystem {
+ // --------------------------------------------------------------------------------------------------------
+ // ------------------ Data structure ----------------------------------------------------------------------
+ // --------------------------------------------------------------------------------------------------------
+
+ public /*maybe null*/ ArrayList /*LinearConstraint!*/ Constraints;
+ /*maybe null*/
+ ArrayList /*FrameElement!*/ FrameVertices;
+ /*maybe null*/
+ ArrayList /*FrameElement!*/ FrameRays;
+ IMutableSet/*IVariable!*//*!*/ FrameDimensions;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(FrameDimensions != null);
+ }
+
+ /*maybe null*/
+ ArrayList /*FrameElement!*/ FrameLines;
+ // Invariant: Either all of Constraints, FrameVertices, FrameRays, and FrameLines are
+ // null, or all are non-null.
+ // Invariant: Any dimension mentioned in Constraints, FrameVertices, FrameRays, or
+ // FrameLines is mentioned in FrameDimensions.
+ // The meaning of FrameDimensions is that for any dimension x not in FrameDimensions,
+ // there is an implicit line along dimension x (that is, (<x,1>)).
+
+ void CheckInvariant() {
+ if (Constraints == null) {
+ System.Diagnostics.Debug.Assert(FrameVertices == null);
+ System.Diagnostics.Debug.Assert(FrameRays == null);
+ System.Diagnostics.Debug.Assert(FrameLines == null);
+ System.Diagnostics.Debug.Assert(FrameDimensions.Count == 0);
+ } else {
+ System.Diagnostics.Debug.Assert(FrameVertices != null);
+ System.Diagnostics.Debug.Assert(FrameRays != null);
+ System.Diagnostics.Debug.Assert(FrameLines != null);
+
+ foreach (LinearConstraint/*!*/ cc in Constraints) {
+ Contract.Assert(cc != null);
+#if FIXED_DESERIALIZER
+ Contract.Assert(Contract.ForAll(cc.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
+#endif
+ Contract.Assert(cc.coefficients.Count != 0);
+ }
+ foreach (ArrayList /*FrameElement*//*!*/ FrameComponent in new ArrayList /*FrameElement*/ [] { FrameVertices, FrameRays, FrameLines }) {
+ Contract.Assert(FrameComponent != null);
+ foreach (FrameElement fe in FrameComponent) {
+ if (fe == null)
+ continue;
+#if FIXED_DESERIALIZER
+ Contract.Assert(Contract.ForAll(fe.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
+#endif
+ }
+ }
+ }
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ // ------------------ Constructors ------------------------------------------------------------------------
+ // --------------------------------------------------------------------------------------------------------
+
+ /// <summary>
+ /// Creates a LinearConstraintSystem representing the bottom element, that is, representing
+ /// an unsatisfiable system of constraints.
+ /// </summary>
+ [NotDelayed]
+ public LinearConstraintSystem() {
+ FrameDimensions = new HashSet /*IVariable!*/ ();
+ //:base();
+ CheckInvariant();
+ }
+
+ /// <summary>
+ /// Constructs a linear constraint system with constraints "cs".
+ /// The constructor captures all constraints in "cs".
+ /// </summary>
+ /// <param name="cs"></param>
+ [NotDelayed]
+ public LinearConstraintSystem(ArrayList /*LinearConstraint!*//*!*/ cs) {
+ Contract.Requires(cs != null);
+#if BUG_159_HAS_BEEN_FIXED
+ Contract.Requires(Contract.ForAll(cs) , cc=> cc.coefficients.Count != 0);
+#endif
+
+ ArrayList constraints = new ArrayList /*LinearConstraint!*/ (cs.Count);
+ foreach (LinearConstraint/*!*/ cc in cs) {
+ Contract.Assert(cc != null);
+ constraints.Add(cc);
+ }
+ Constraints = constraints;
+ FrameDimensions = new HashSet /*IVariable!*/ (); // to please compiler; this value will be overridden in the call to GenerateFrameConstraints below
+ //:base();
+
+ GenerateFrameFromConstraints();
+ SimplifyConstraints();
+ CheckInvariant();
+#if DEBUG_PRINT
+ Console.WriteLine("LinearConstraintSystem: constructor produced:");
+ Dump();
+#endif
+ }
+
+ /// <summary>
+ /// Constructs a linear constraint system corresponding to given vertex. This constructor
+ /// is only used in the test harness--it is not needed for abstract interpretation.
+ /// </summary>
+ /// <param name="v"></param>
+ [NotDelayed]
+ LinearConstraintSystem(FrameElement/*!*/ v) {
+ Contract.Requires(v != null);
+ IMutableSet/*!*/ frameDims = v.GetDefinedDimensions();
+ Contract.Assert(frameDims != null);
+ ArrayList /*LinearConstraint!*/ constraints = new ArrayList /*LinearConstraint!*/ ();
+ foreach (IVariable/*!*/ dim in frameDims) {
+ Contract.Assert(dim != null);
+ LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
+ lc.SetCoefficient(dim, Rational.ONE);
+ lc.rhs = v[dim];
+ constraints.Add(lc);
+ }
+ FrameDimensions = frameDims;
+ Constraints = constraints;
+
+ ArrayList /*FrameElement*/ frameVertices = new ArrayList /*FrameElement*/ ();
+ frameVertices.Add(v);
+ FrameVertices = frameVertices;
+
+ FrameRays = new ArrayList /*FrameElement*/ ();
+ FrameLines = new ArrayList /*FrameElement*/ ();
+
+ //:base();
+ CheckInvariant();
+ }
+
+ void ChangeIntoBottom() {
+ Constraints = null;
+ FrameVertices = null;
+ FrameRays = null;
+ FrameLines = null;
+ FrameDimensions.Clear(); // no implicit lines
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ // ------------------ Public operations and their support routines ----------------------------------------
+ // --------------------------------------------------------------------------------------------------------
+
+ public bool IsBottom() {
+ return Constraints == null;
+ }
+
+ public bool IsTop() {
+ return Constraints != null && Constraints.Count == 0;
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ if (Constraints == null) {
+ return "<bottom>";
+ } else if (Constraints.Count == 0) {
+ return "<top>";
+ } else {
+ string z = null;
+ foreach (LinearConstraint/*!*/ lc in Constraints) {
+ Contract.Assert(lc != null);
+ string s = lc.ToString();
+ if (z == null) {
+ z = s;
+ } else {
+ z += " AND " + s;
+ }
+ }
+ Contract.Assert(z != null);
+ return z;
+ }
+ }
+
+
+ public ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
+ Contract.Ensures(Contract.Result<ICollection<IVariable>>().IsReadOnly);
+ List<IVariable/*!*/> list = new List<IVariable/*!*/>();
+ foreach (IVariable/*!*/ v in FrameDimensions) {
+ Contract.Assert(v != null);
+ list.Add(v);
+ }
+ return cce.NonNull(list.AsReadOnly());
+ }
+
+ /// <summary>
+ /// Note: This method requires that all dimensions are of type Variable, something that's
+ /// not required elsewhere in this class.
+ /// </summary>
+ /// <returns></returns>
+ public IExpr/*!*/ ConvertToExpression(ILinearExprFactory/*!*/ factory) {
+ Contract.Requires(factory != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ if (this.Constraints == null) {
+ return factory.False;
+ }
+ if (this.Constraints.Count == 0) {
+ return factory.True;
+ }
+
+ IExpr result = null;
+ foreach (LinearConstraint/*!*/ lc in Constraints) {
+ Contract.Assert(lc != null);
+ IExpr conjunct = lc.ConvertToExpression(factory);
+ result = (result == null) ? conjunct : (IExpr)factory.And(conjunct, result);
+ }
+ Contract.Assert(result != null);
+ return result;
+ }
+
+
+ /* IsSubset(): determines if 'lcs' is a subset of 'this'
+ * -- See Cousot/Halbwachs 1978, section
+ */
+ public bool IsSubset(LinearConstraintSystem/*!*/ lcs) {
+ Contract.Requires(lcs != null);
+ if (lcs.IsBottom()) {
+ return true;
+ } else if (this.IsBottom()) {
+ return false;
+#if DEBUG
+#else
+ } else if (this.IsTop()) { // optimization -- this case not needed for correctness
+ return true;
+ } else if (lcs.IsTop()) { // optimization -- this case not needed for correctness
+ return false;
+#endif
+ } else {
+ // phase 0: check if frame dimensions are a superset of the constraint dimensions
+ ISet /*IVariable!*//*!*/ frameDims = lcs.GetDefinedDimensions();
+ Contract.Assert(frameDims != null);
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: IsSubset:");
+ Console.WriteLine(" --- this:");
+ this.Dump();
+ Console.WriteLine(" --- lcs:");
+ lcs.Dump();
+ Console.WriteLine(" ---");
+#endif
+ foreach (LinearConstraint/*!*/ cc in cce.NonNull(this.Constraints)) {
+ Contract.Assert(cc != null);
+#if DEBUG_PRINT
+ Console.WriteLine(" cc: {0}", cc);
+ Console.WriteLine(" cc.GetDefinedDimensions(): {0}", cc.GetDefinedDimensions());
+#endif
+
+ if (!Contract.ForAll(cc.GetDefinedDimensionsGeneric(), var => frameDims.Contains(var))) {
+#if DEBUG_PRINT
+ Console.WriteLine(" ---> phase 0 subset violated, return false from IsSubset");
+#endif
+ return false;
+ }
+ }
+ }
+
+ // phase 1: check frame vertices against each constraint...
+ foreach (FrameElement/*!*/ v in cce.NonNull(lcs.FrameVertices)) {
+ Contract.Assert(v != null);
+ foreach (LinearConstraint/*!*/ cc in this.Constraints) {
+ Contract.Assert(cc != null);
+ Rational q = cc.EvaluateLhs(v);
+ if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
+ if (!(q <= cc.rhs)) {
+#if DEBUG_PRINT
+ Console.WriteLine(" ---> phase 1a subset violated, return false from IsSubset");
+#endif
+ return false;
+ }
+ } else {
+ if (!(q == cc.rhs)) {
+#if DEBUG_PRINT
+ Console.WriteLine(" ---> phase 1b subset violated, return false from IsSubset");
+#endif
+ return false;
+ }
+ }
+ }
+ }
+
+ // phase 2: check frame rays against each constraint...
+ // To check if a ray "r" falls within a constraint "cc", we add the vector "r" to
+ // any point "p" on the side of the half-space or plane described by constraint, and
+ // then check if the resulting point satisfies the constraint. That is, we check (for
+ // an inequality constraint with coefficients a1,a2,...,an and right-hand side
+ // constant C):
+ // a1*(r1+p1) + a2*(r2+p2) + ... + an*(rn+pn) <= C
+ // Equivalently:
+ // a1*r1 + a2*r2 + ... + an*rn + a1*p1 + a2*p2 + ... + an*pn <= C
+ // To find a point "p", we can pick out a coordinate, call it 1, with a non-zero
+ // coefficient in the constraint, and then choose "p" as the point that has the
+ // value C/a1 in coordinate 1 and has 0 in all other coordinates. We then check:
+ // a1*r1 + a2*r2 + ... + an*rn + a1*(C/a1) + a2*0 + ... + an*0 <= C
+ // which simplifies to:
+ // a1*r1 + a2*r2 + ... + an*rn + C <= C
+ // which in turn simplifies to:
+ // a1*r1 + a2*r2 + ... + an*rn <= 0
+ // If the constraint is an equality constraint, we simply replace "<=" with "=="
+ // above.
+ foreach (FrameElement/*!*/ r in cce.NonNull(lcs.FrameRays)) {
+ Contract.Assert(r != null);
+ System.Diagnostics.Debug.Assert(r != null, "encountered a null ray...");
+ foreach (LinearConstraint/*!*/ cc in this.Constraints) {
+ Contract.Assert(cc != null);
+ System.Diagnostics.Debug.Assert(cc != null, "encountered an null constraint...");
+ Rational q = cc.EvaluateLhs(r);
+ if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
+ if (q.IsPositive) {
+#if DEBUG_PRINT
+ Console.WriteLine(" ---> phase 2a subset violated, return false from IsSubset");
+#endif
+ return false;
+ }
+ } else {
+ if (q.IsNonZero) {
+#if DEBUG_PRINT
+ Console.WriteLine(" ---> phase 2b subset violated, return false from IsSubset");
+#endif
+ return false;
+ }
+ }
+ }
+ }
+
+ // phase 3: check frame lines against each constraint...
+ // To check if a line "L" falls within a constraint "cc", we check if both the
+ // vector "L" and "-L", interpreted as rays, fall within the constraint. From
+ // the discussion above, this means we check the following two properties:
+ // a1*L1 + a2*L2 + ... + an*Ln <= 0 (*)
+ // a1*(-L1) + a2*(-L2) + ... + an*(-Ln) <= 0
+ // The second of these lines can be rewritten as:
+ // - a1*L1 - a2*L2 - ... - an*Ln <= 0
+ // which is equivalent to:
+ // -1 * (a1*L1 + a2*L2 + ... + an*Ln) <= 0
+ // Multiplying both sides by -1 and flipping the direction of the inequality,
+ // we have:
+ // a1*L1 + a2*L2 + ... + an*Ln >= 0 (**)
+ // Putting (*) and (**) together, we conclude that we need to check:
+ // a1*L1 + a2*L2 + ... + an*Ln == 0
+ // If the constraint is an equality constraint, we end up with the same equation.
+ foreach (FrameElement/*!*/ line in cce.NonNull(lcs.FrameLines)) {
+ Contract.Assert(line != null);
+ System.Diagnostics.Debug.Assert(line != null, "encountered a null line...");
+ foreach (LinearConstraint/*!*/ cc in this.Constraints) {
+ Contract.Assert(cc != null);
+ System.Diagnostics.Debug.Assert(cc != null, "encountered an null constraint...");
+ Rational q = cc.EvaluateLhs(line);
+ if (q.IsNonZero) {
+#if DEBUG_PRINT
+ Console.WriteLine(" ---> phase 3 subset violated, return false from IsSubset");
+#endif
+ return false;
+ }
+ }
+ }
+
+#if DEBUG_PRINT
+ Console.WriteLine(" ---> IsSubset returns true");
+#endif
+ return true;
+ }
+
+ public LinearConstraintSystem/*!*/ Meet(LinearConstraintSystem/*!*/ lcs) {
+ Contract.Requires(lcs != null);
+ Contract.Requires((this.Constraints != null));
+ Contract.Requires((lcs.Constraints != null));
+ Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
+ ArrayList /*LinearConstraint*/ clist = new ArrayList(this.Constraints.Count + lcs.Constraints.Count);
+ clist.AddRange(this.Constraints);
+ clist.AddRange(lcs.Constraints);
+ return new LinearConstraintSystem(clist);
+ }
+
+#if DEBUG_PRINT
+ public LinearConstraintSystem Join(LinearConstraintSystem lcs)
+ {
+ Console.WriteLine("===================================================================================");
+ Console.WriteLine("DEBUG: Join");
+ Console.WriteLine("Join: this=");
+ Dump();
+ Console.WriteLine("Join: lcs=");
+ lcs.Dump();
+ LinearConstraintSystem z = JoinX(lcs);
+ Console.WriteLine("----------Join------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+ Console.WriteLine("Join: result=");
+ z.Dump();
+ Console.WriteLine("===================================================================================");
+ return z;
+ }
+#endif
+
+ /// <summary>
+ /// The join is computed as described in section 4.4 in Cousot and Halbwachs.
+ /// </summary>
+ /// <param name="lcs"></param>
+ /// <returns></returns>
+#if DEBUG_PRINT
+ public LinearConstraintSystem JoinX(LinearConstraintSystem lcs) {
+#else
+ public LinearConstraintSystem/*!*/ Join(LinearConstraintSystem/*!*/ lcs) {
+ Contract.Requires(lcs != null);
+ Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
+#endif
+
+ if (this.IsBottom()) {
+ return cce.NonNull(lcs.Clone());
+ } else if (lcs.IsBottom()) {
+ return cce.NonNull(this.Clone());
+ } else if (this.IsTop() || lcs.IsTop()) {
+ return new LinearConstraintSystem(new ArrayList /*LinearConstraint*/ ());
+ } else {
+ LinearConstraintSystem/*!*/ z;
+ // Start from the "larger" of the two frames (this is just a heuristic measure intended
+ // to save work).
+ Contract.Assume(this.FrameVertices != null);
+ Contract.Assume(this.FrameRays != null);
+ Contract.Assume(this.FrameLines != null);
+ Contract.Assume(lcs.FrameVertices != null);
+ Contract.Assume(lcs.FrameRays != null);
+ Contract.Assume(lcs.FrameLines != null);
+ if (this.FrameVertices.Count + this.FrameRays.Count + this.FrameLines.Count - this.FrameDimensions.Count <
+ lcs.FrameVertices.Count + lcs.FrameRays.Count + lcs.FrameLines.Count - lcs.FrameDimensions.Count) {
+ z = cce.NonNull(lcs.Clone());
+ lcs = this;
+ } else {
+ z = cce.NonNull(this.Clone());
+ }
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: LinearConstraintSystem.Join ---------------");
+ Console.WriteLine("z:");
+ z.Dump();
+ Console.WriteLine("lcs:");
+ lcs.Dump();
+#endif
+
+ // Start by explicating the implicit lines of z for the dimensions dims(lcs)-dims(z).
+ foreach (IVariable/*!*/ dim in lcs.FrameDimensions) {
+ Contract.Assert(dim != null);
+ if (!z.FrameDimensions.Contains(dim)) {
+ z.FrameDimensions.Add(dim);
+ FrameElement line = new FrameElement();
+ line.AddCoordinate(dim, Rational.ONE);
+ // Note: AddLine is not called (because the line already exists in z--it's just that
+ // it was represented implicitly). Instead, just tack the explicit representation onto
+ // FrameLines.
+ Contract.Assume(z.FrameLines != null);
+ z.FrameLines.Add(line);
+#if DEBUG_PRINT
+ Console.WriteLine("Join: After explicating line: {0}", line);
+ z.Dump();
+#endif
+ }
+ }
+
+ // Now, the vertices, rays, and lines can be added.
+ foreach (FrameElement/*!*/ v in lcs.FrameVertices) {
+ Contract.Assert(v != null);
+ z.AddVertex(v);
+#if DEBUG_PRINT
+ Console.WriteLine("Join: After adding vertex: {0}", v);
+ z.Dump();
+#endif
+ }
+ foreach (FrameElement/*!*/ r in lcs.FrameRays) {
+ Contract.Assert(r != null);
+ z.AddRay(r);
+#if DEBUG_PRINT
+ Console.WriteLine("Join: After adding ray: {0}", r);
+ z.Dump();
+#endif
+ }
+ foreach (FrameElement/*!*/ l in lcs.FrameLines) {
+ Contract.Assert(l != null);
+ z.AddLine(l);
+#if DEBUG_PRINT
+ Console.WriteLine("Join: After adding line: {0}", l);
+ z.Dump();
+#endif
+ }
+ // also add to z the implicit lines of lcs
+ foreach (IVariable/*!*/ dim in z.FrameDimensions) {
+ Contract.Assert(dim != null);
+ if (!lcs.FrameDimensions.Contains(dim)) {
+ // "dim" is a dimension that's explicit in "z" but implicit in "lcs"
+ FrameElement line = new FrameElement();
+ line.AddCoordinate(dim, Rational.ONE);
+ z.AddLine(line);
+#if DEBUG_PRINT
+ Console.WriteLine("Join: After adding lcs's implicit line: {0}", line);
+ z.Dump();
+#endif
+ }
+ }
+
+ z.SimplifyFrame();
+ z.SimplifyConstraints();
+ z.CheckInvariant();
+#if DEBUG_PRINT
+ Console.WriteLine("Join: Returning z:");
+ z.Dump();
+ Console.WriteLine("----------------------------------------");
+#endif
+ return z;
+ }
+ }
+
+#if DEBUG_PRINT
+ public LinearConstraintSystem Widen(LinearConstraintSystem lcs)
+ {
+ Console.WriteLine("===================================================================================");
+ Console.WriteLine("DEBUG: Widen");
+ Console.WriteLine("Widen: this=");
+ Dump();
+ Console.WriteLine("Widen: lcs=");
+ lcs.Dump();
+ LinearConstraintSystem z = WidenX(lcs);
+ Console.WriteLine("----------Widen------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+ Console.WriteLine("Widen: result=");
+ z.Dump();
+ Console.WriteLine("===================================================================================");
+ return z;
+ }
+#endif
+
+#if DEBUG_PRINT
+ public LinearConstraintSystem WidenX(LinearConstraintSystem lcs){
+#else
+ public LinearConstraintSystem/*!*/ Widen(LinearConstraintSystem/*!*/ lcs) {
+ Contract.Requires(lcs != null);
+ Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
+#endif
+ if (this.IsBottom()) {
+ return cce.NonNull(lcs.Clone());
+ } else if (lcs.IsBottom()) {
+ return cce.NonNull(this.Clone());
+ } else if (this.IsTop() || lcs.IsTop()) {
+ return new LinearConstraintSystem(new ArrayList /*LinearConstraint*/ ());
+ }
+
+ // create new LCS, we will add only verified constraints to this...
+ ArrayList /*LinearConstraint*/ newConstraints = new ArrayList /*LinearConstraint*/ ();
+ Contract.Assume(this.Constraints != null);
+ foreach (LinearConstraint/*!*/ ccX in this.Constraints) {
+ Contract.Assert(ccX != null);
+ LinearConstraint cc = ccX;
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: Starting to check constraint: {0}", cc);
+#endif
+ if (cc.IsConstant()) {
+ // (Can this ever occur in the stable state of a LinearConstraintSystem? --KRML)
+ // constraint is unaffected by the frame components
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: --Adding it!");
+#endif
+ newConstraints.Add(cc);
+ continue;
+ }
+
+ // PHASE I: verify constraints against all frame vertices...
+
+ foreach (FrameElement/*!*/ vertex in cce.NonNull(lcs.FrameVertices)) {
+ Contract.Assert(vertex != null);
+ Rational lhs = cc.EvaluateLhs(vertex);
+ if (lhs > cc.rhs) {
+ // the vertex does not satisfy the inequality <=
+ if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: throwing out because of vertex: {0}", vertex);
+#endif
+ goto CHECK_NEXT_CONSTRAINT;
+ } else {
+ // ... but it does satisfy the inequality >=
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: throwing out <= because of vertex: {0}", vertex);
+#endif
+ cc = cc.ChangeRelationToAtLeast();
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: left with constraint: {0}", cc);
+#endif
+ }
+ } else if (cc.Relation == LinearConstraint.ConstraintRelation.EQ && lhs < cc.rhs) {
+ // the vertex does not satisfy the inequality >=, and the constraint is an equality constraint
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: throwing out >= because of vertex: {0}", vertex);
+#endif
+ cc = cc.ChangeRelation(LinearConstraint.ConstraintRelation.LE);
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: left with contraint: {0}", cc);
+#endif
+ }
+ }
+
+ // PHASE II: verify constraints against all frame rays...
+
+ foreach (FrameElement/*!*/ ray in cce.NonNull(lcs.FrameRays)) {
+ Contract.Assert(ray != null);
+ // The following assumes the constraint to have some dimension with a non-zero coefficient
+ Rational lhs = cc.EvaluateLhs(ray);
+ if (lhs.IsPositive) {
+ // the ray does not satisfy the inequality <=
+ if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: throwing out because of ray: {0}", ray);
+#endif
+ goto CHECK_NEXT_CONSTRAINT;
+ } else {
+ // ... but it does satisfy the inequality >=
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: throwing out <= because of ray: {0}", ray);
+#endif
+ cc = cc.ChangeRelationToAtLeast();
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: left with contraint: {0}", cc);
+#endif
+ }
+ } else if (cc.Relation == LinearConstraint.ConstraintRelation.EQ && lhs.IsNegative) {
+ // the ray does not satisfy the inequality >=, and the constraint is an equality constraint
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: throwing out >= because of ray: {0}", ray);
+#endif
+ cc = cc.ChangeRelation(LinearConstraint.ConstraintRelation.LE);
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: left with constraint: {0}", cc);
+#endif
+ }
+ }
+
+ // PHASE III: verify constraints against all frame lines...
+
+ foreach (FrameElement/*!*/ line in cce.NonNull(lcs.FrameLines)) {
+ Contract.Assert(line != null);
+ // The following assumes the constraint to have some dimension with a non-zero coefficient
+ Rational lhs = cc.EvaluateLhs(line);
+ if (!lhs.IsZero) {
+ // The line satisfies neither the inequality <= nor the equality ==
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: throwing out because of line: {0}", line);
+#endif
+ goto CHECK_NEXT_CONSTRAINT;
+ }
+ }
+
+ // constraint has been verified, so add to new constraint system
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: --Adding it!");
+#endif
+ newConstraints.Add(cc);
+
+ CHECK_NEXT_CONSTRAINT: {
+ }
+#if DEBUG_PRINT
+ Console.WriteLine("Widen checking: done with that constraint");
+#endif
+ }
+
+ return new LinearConstraintSystem(newConstraints);
+ }
+
+#if DEBUG_PRINT
+ public LinearConstraintSystem Project(IVariable/*!*/ dim){
+Contract.Requires(dim != null);
+ Console.WriteLine("===================================================================================");
+ Console.WriteLine("DEBUG: Project(dim={0})", dim);
+ Console.WriteLine("Project: this=");
+ Dump();
+ LinearConstraintSystem z = ProjectX(dim);
+ Console.WriteLine("----------Project------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+ Console.WriteLine("Project: result=");
+ z.Dump();
+ Console.WriteLine("===================================================================================");
+ return z;
+ }
+#endif
+
+#if DEBUG_PRINT
+ public LinearConstraintSystem ProjectX(IVariable/*!*/ dim){Contract.Requires(dim != null);Contract.Requires(this.Constraints != null);
+#else
+ public LinearConstraintSystem/*!*/ Project(IVariable/*!*/ dim) {
+ Contract.Requires(dim != null);
+ Contract.Requires(this.Constraints != null);
+ Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
+#endif
+
+
+ ArrayList /*LinearConstraint!*//*!*/ cc = Project(dim, Constraints);
+ Contract.Assert(cc != null);
+ return new LinearConstraintSystem(cc);
+ }
+
+#if DEBUG_PRINT
+ public LinearConstraintSystem Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName){
+Contract.Requires(newName != null);
+Contract.Requires(oldName != null);
+ Console.WriteLine("===================================================================================");
+ Console.WriteLine("DEBUG: Rename(oldName={0}, newName={1})", oldName, newName);
+ Console.WriteLine("Rename: this=");
+ Dump();
+ LinearConstraintSystem z = RenameX(oldName, newName);
+ Console.WriteLine("----------Rename------------------------------>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+ Console.WriteLine("Rename: result=");
+ z.Dump();
+ Console.WriteLine("===================================================================================");
+ return z;
+ }
+#endif
+
+#if DEBUG_PRINT
+ public LinearConstraintSystem RenameX(IVariable/*!*/ oldName, IVariable/*!*/ newName){Contract.Requires(oldName != null);Contract.Requires(newName != null);
+#else
+ public LinearConstraintSystem/*!*/ Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ Contract.Requires(oldName != null);
+ Contract.Requires(newName != null);
+ Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
+#endif
+ if (this.Constraints == null) {
+ System.Diagnostics.Debug.Assert(this.FrameVertices == null);
+ System.Diagnostics.Debug.Assert(this.FrameRays == null);
+ System.Diagnostics.Debug.Assert(this.FrameLines == null);
+ return this;
+ }
+ IMutableSet /*IVariable!*//*!*/ dims = this.FrameDimensions;
+ Contract.Assert(dims != null);
+ if (!dims.Contains(oldName)) {
+ return this;
+ }
+
+ LinearConstraintSystem z = new LinearConstraintSystem();
+ z.FrameDimensions = cce.NonNull((HashSet/*!*/ /*IVariable!*/)dims.Clone());
+ z.FrameDimensions.Remove(oldName);
+ z.FrameDimensions.Add(newName);
+
+ z.Constraints = new ArrayList /*LinearConstraint!*/ (this.Constraints.Count);
+ foreach (LinearConstraint/*!*/ lc in cce.NonNull(this.Constraints)) {
+ Contract.Assert(lc != null);
+ z.Constraints.Add(lc.Rename(oldName, newName));
+ }
+ z.FrameVertices = RenameInFE(cce.NonNull(this.FrameVertices), oldName, newName);
+ z.FrameRays = RenameInFE(cce.NonNull(this.FrameRays), oldName, newName);
+ z.FrameLines = RenameInFE(cce.NonNull(this.FrameLines), oldName, newName);
+ return z;
+ }
+
+ static ArrayList /*FrameElement*/ RenameInFE(ArrayList/*!*/ /*FrameElement*/ list, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ Contract.Requires(list != null);
+ Contract.Requires(newName != null);
+ Contract.Requires(oldName != null);
+ ArrayList/*FrameElement!*//*!*/ z = new ArrayList/*FrameElement!*/ (list.Count);
+ Contract.Assert(z != null);
+ foreach (FrameElement/*!*/ fe in list) {
+ Contract.Assert(fe != null);
+ z.Add(fe.Rename(oldName, newName));
+ }
+ System.Diagnostics.Debug.Assert(z.Count == list.Count);
+ return z;
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ // ------------------ support routines --------------------------------------------------------------------
+ // --------------------------------------------------------------------------------------------------------
+
+ /// <summary>
+ /// Returns a set of constraints that is the given set of constraints with dimension "dim"
+ /// projected out. See Cousot and Halbwachs, section 3.3.1.1.
+ /// </summary>
+ /// <param name="dim"></param>
+ /// <param name="constraints"></param>
+ /// <returns></returns>
+ static ArrayList /*LinearConstraint!*//*!*/ Project(IVariable/*!*/ dim, ArrayList /*LinearConstraint!*//*!*/ constraints) {
+ Contract.Requires(constraints != null);
+ Contract.Requires(dim != null);
+ Contract.Ensures(Contract.Result<ArrayList>() != null);
+ // Sort the inequality constaints into ones where dimension "dim" is 0, negative, and
+ // positive, respectively. Put equality constraints with a non-0 "dim" into "eq".
+ ArrayList /*LinearConstraint!*//*!*/ final = new ArrayList /*LinearConstraint!*/ ();
+ ArrayList /*LinearConstraint!*//*!*/ negative = new ArrayList /*LinearConstraint!*/ ();
+ ArrayList /*LinearConstraint!*//*!*/ positive = new ArrayList /*LinearConstraint!*/ ();
+ ArrayList /*LinearConstraint!*//*!*/ eq = new ArrayList /*LinearConstraint!*/ ();
+ foreach (LinearConstraint/*!*/ cc in constraints) {
+ Contract.Assert(cc != null);
+ Rational coeff = cc[dim];
+ if (coeff.IsZero) {
+ LinearConstraint lc = cce.NonNull(cc.Clone());
+ if (!lc.IsConstant()) {
+ lc.RemoveDimension(dim);
+ final.Add(lc);
+ }
+ } else if (cc.Relation == LinearConstraint.ConstraintRelation.EQ) {
+ eq.Add(cc);
+ } else if (coeff.IsNegative) {
+ negative.Add(cc);
+ } else {
+ System.Diagnostics.Debug.Assert(coeff.IsPositive);
+ positive.Add(cc);
+ }
+ }
+
+ if (eq.Count != 0) {
+ LinearConstraint eqConstraint = (LinearConstraint/*!*/)cce.NonNull(eq[eq.Count - 1]);
+ eq.RemoveAt(eq.Count - 1);
+ Rational eqC = -eqConstraint[dim];
+
+ foreach (ArrayList /*LinearConstraint!*/ list in new ArrayList[] { eq, negative, positive }) {
+ Contract.Assert(list != null);
+ foreach (LinearConstraint/*!*/ lcX in list) {
+ Contract.Assert(lcX != null);
+ LinearConstraint lc = cce.NonNull(lcX.Clone());
+ lc.AddMultiple(lc[dim] / eqC, eqConstraint);
+ System.Diagnostics.Debug.Assert(lc[dim].IsZero);
+ if (!lc.IsConstant()) {
+ lc.RemoveDimension(dim);
+ final.Add(lc);
+ } else {
+ System.Diagnostics.Debug.Assert(lc.IsConstantSatisfiable());
+ }
+ }
+ }
+ } else {
+ // Consider all pairs of constraints with (negative,positive) coefficients of "dim".
+ foreach (LinearConstraint/*!*/ cn in negative) {
+ Contract.Assert(cn != null);
+ Rational dn = -cn[dim];
+ System.Diagnostics.Debug.Assert(dn.IsNonNegative);
+ foreach (LinearConstraint/*!*/ cp in positive) {
+ Contract.Assert(cp != null);
+ Rational dp = cp[dim];
+
+ LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ lc.AddMultiple(dn, cp);
+ lc.AddMultiple(dp, cn);
+ System.Diagnostics.Debug.Assert(lc[dim].IsZero);
+ if (!lc.IsConstant()) {
+ lc.RemoveDimension(dim);
+ final.Add(lc);
+ } else {
+ System.Diagnostics.Debug.Assert(lc.IsConstantSatisfiable());
+ }
+ }
+ }
+ }
+
+ return final;
+ }
+
+ /// <summary>
+ /// Initializes FrameVertices, FrameRays, FrameLines, and FrameDimensions, see
+ /// Cousot and Halbwachs, section 3.4. Any previous values of these fields are
+ /// ignored and overwritten.
+ ///
+ /// If the set of Constraints is unsatisfiable, then "this" is changed into Bottom.
+ /// </summary>
+ void GenerateFrameFromConstraints() {
+ if (Constraints == null) {
+ FrameVertices = null;
+ FrameRays = null;
+ FrameLines = null;
+ FrameDimensions = new HashSet /*IVariable!*/ ();
+ return;
+ }
+
+ // Step 1 (see Cousot and Halbwachs, section 3.4.3): create a Simplex Tableau.
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: --- GenerateFrameFromConstraint ---");
+ Console.WriteLine("Constraints:");
+ foreach (LinearConstraint cc in Constraints)
+ {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+ SimplexTableau tableau = new SimplexTableau(Constraints);
+#if DEBUG_PRINT
+ Console.WriteLine("Initial tableau:");
+ tableau.Dump();
+#endif
+ FrameDimensions = tableau.GetDimensions();
+#if DEBUG_PRINT
+ Console.WriteLine("Dimensions:");
+ foreach (object dim in FrameDimensions)
+ {
+ Console.Write(" {0}", dim);
+ }
+ Console.WriteLine();
+#endif
+
+ // Step 3 and 2: Put as many initial variables as possible into basis, then check if
+ // we reached a feasible basis
+ tableau.AddInitialVarsToBasis();
+#if DEBUG_PRINT
+ Console.WriteLine("Tableau after Step 3:");
+ tableau.Dump();
+#endif
+ if (!tableau.IsFeasibleBasis) {
+ // The polyhedron is empty (according to Cousot and Halbwachs)
+ ChangeIntoBottom();
+ return;
+ }
+
+ FrameVertices = new ArrayList /*FrameElement*/ ();
+ FrameRays = new ArrayList /*FrameElement*/ ();
+ FrameLines = new ArrayList /*FrameElement*/ ();
+ if (FrameDimensions.Count == 0) {
+ // top element
+ return;
+ }
+
+ if (tableau.AllInitialVarsInBasis) {
+ // All initial variables are in basis; there are no lines.
+#if DEBUG_PRINT
+ Console.WriteLine("Tableau after Steps 2 and 3 (all initial variables in basis):");
+ tableau.Dump();
+#endif
+ } else {
+ // There are lines
+#if DEBUG_PRINT
+ Console.WriteLine("Tableau after Steps 2 and 3 (NOT all initial variables in basis--there are lines):");
+ tableau.Dump();
+#endif
+ // Step 4.2: Pick out the lines, then produce the tableau for a new polyhedron without those lines.
+ ArrayList /*LinearConstraint*/ moreConstraints = cce.NonNull((ArrayList/*!*/ /*LinearConstraint*/)Constraints.Clone());
+ tableau.ProduceLines(FrameLines, moreConstraints);
+ tableau = new SimplexTableau(moreConstraints);
+#if DEBUG_PRINT
+ Console.WriteLine("Lines produced:");
+ foreach (FrameElement line in FrameLines)
+ {
+ Console.WriteLine(" {0}", line);
+ }
+ Console.WriteLine("The new list of constraints is:");
+ foreach (LinearConstraint c in moreConstraints)
+ {
+ Console.WriteLine(" {0}", c);
+ }
+ Console.WriteLine("Tableau after producing lines in Step 4.2:");
+ tableau.Dump();
+#endif
+
+ // Repeat step 3 for the new tableau.
+ // Since the new tableau contains no lines, the following call should cause all initial
+ // variables to be in basis (see step 4.2 in section 3.4.3 of Cousot and Halbwachs).
+ tableau.AddInitialVarsToBasis();
+ System.Diagnostics.Debug.Assert(tableau.AllInitialVarsInBasis);
+ System.Diagnostics.Debug.Assert(tableau.IsFeasibleBasis); // the new tableau represents a set of feasible constraints, so this basis should be found to be feasible
+#if DEBUG_PRINT
+ Console.WriteLine("Tableau after all initial variables have been moved into basis:");
+ tableau.Dump();
+#endif
+ }
+
+ // Step 4.1: One vertex has been found. Find all others, too.
+ tableau.TraverseVertices(FrameVertices, FrameRays);
+#if DEBUG_PRINT
+ Console.WriteLine("Tableau after vertex traversal:");
+ tableau.Dump();
+#endif
+ }
+
+ class LambdaDimension : IVariable {
+ readonly int id;
+ static int count = 0;
+
+ /// <summary>
+ /// Return the name of the variable
+ /// </summary>
+ public string Name {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return this.ToString();
+ }
+ }
+
+ public LambdaDimension() {
+ id = count;
+ count++;
+ }
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "lambda" + id;
+ }
+ [Pure]
+ public object DoVisit(ExprVisitor/*!*/ visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.VisitVariable(this);
+ }
+ }
+
+ /// <summary>
+ /// Adds a vertex to the frame of "this" and updates Constraints accordingly, see
+ /// Cousot and Halbwachs, section 3.3.1.1. However, this method does not simplify
+ /// Constraints after the operation; that remains the caller's responsibility (which
+ /// gives the caller the opportunity to make multiple calls to AddVertex, AddRay,
+ /// and AddLine before calling SimplifyConstraints).
+ /// Assumes Constraints (and the frame fields) to be non-null.
+ /// </summary>
+ /// <param name="vertex"></param>
+ void AddVertex(FrameElement/*!*/ vertex) {
+ Contract.Requires(vertex != null);
+ Contract.Requires(this.FrameVertices != null);
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: AddVertex called on {0}", vertex);
+ Console.WriteLine(" Initial constraints:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+
+ FrameVertices.Add(vertex.Clone());
+#if FIXED_DESERIALIZER
+ Contract.Assert(Contract.ForAll(vertex.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
+#endif
+
+ // We use a new temporary dimension.
+ IVariable/*!*/ lambda = new LambdaDimension();
+
+ // We change the constraints A*X <= B into
+ // A*X + (A*vector - B)*lambda <= A*vector.
+ // That means that each row k in A (which corresponds to one LinearConstraint
+ // in Constraints) is changed by adding
+ // (A*vector - B)[k] * lambda
+ // to row k and changing the right-hand side of row k to
+ // (A*vector)[k]
+ // Note:
+ // (A*vector - B)[k]
+ // = { vector subtraction is pointwise }
+ // (A*vector)[k] - B[k]
+ // = { A*vector is a row vector whose every row i is the dot-product of
+ // row i of A with the column vector "vector" }
+ // A[k]*vector - B[k]
+ foreach (LinearConstraint/*!*/ cc in cce.NonNull(Constraints)) {
+ Contract.Assert(cc != null);
+ Rational d = cc.EvaluateLhs(vertex);
+ cc.SetCoefficient(lambda, d - cc.rhs);
+ cc.rhs = d;
+ }
+
+ // We also add the constraints that lambda lies between 0 ...
+ LinearConstraint la = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ la.SetCoefficient(lambda, Rational.MINUS_ONE);
+ la.rhs = Rational.ZERO;
+ Constraints.Add(la);
+ // ... and 1.
+ la = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ la.SetCoefficient(lambda, Rational.ONE);
+ la.rhs = Rational.ONE;
+ Constraints.Add(la);
+#if DEBUG_PRINT
+ Console.WriteLine(" Constraints after addition:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+
+ // Finally, project out the dummy dimension.
+ Constraints = Project(lambda, Constraints);
+
+#if DEBUG_PRINT
+ Console.WriteLine(" Resulting constraints:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+ }
+
+ /// <summary>
+ /// Adds a ray to the frame of "this" and updates Constraints accordingly, see
+ /// Cousot and Halbwachs, section 3.3.1.1. However, this method does not simplify
+ /// Constraints after the operation; that remains the caller's responsibility (which
+ /// gives the caller the opportunity to make multiple calls to AddVertex, AddRay,
+ /// and AddLine before calling SimplifyConstraints).
+ /// Assumes Constraints (and the frame fields) to be non-null.
+ /// </summary>
+ /// <param name="ray"></param>
+ void AddRay(FrameElement/*!*/ ray) {
+ Contract.Requires(ray != null);
+ Contract.Requires(this.FrameRays != null);
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: AddRay called on {0}", ray);
+ Console.WriteLine(" Initial constraints:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+
+ FrameRays.Add(ray.Clone());
+#if FIXED_DESERIALIZER
+ Contract.Assert(Contract.ForAll(ray.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
+#endif
+
+ // We use a new temporary dimension.
+ IVariable/*!*/ lambda = new LambdaDimension();
+
+ // We change the constraints A*X <= B into
+ // A*X - (A*ray)*lambda <= B.
+ // That means that each row k in A (which corresponds to one LinearConstraint
+ // in Constraints) is changed by subtracting
+ // (A*ray)[k] * lambda
+ // from row k.
+ // Note:
+ // (A*ray)[k]
+ // = { A*ray is a row vector whose every row i is the dot-product of
+ // row i of A with the column vector "ray" }
+ // A[k]*ray
+ foreach (LinearConstraint/*!*/ cc in cce.NonNull(Constraints)) {
+ Contract.Assert(cc != null);
+ Rational d = cc.EvaluateLhs(ray);
+ cc.SetCoefficient(lambda, -d);
+ }
+
+ // We also add the constraints that lambda is at least 0.
+ LinearConstraint la = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ la.SetCoefficient(lambda, Rational.MINUS_ONE);
+ la.rhs = Rational.ZERO;
+ Constraints.Add(la);
+#if DEBUG_PRINT
+ Console.WriteLine(" Constraints after addition:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+
+ // Finally, project out the dummy dimension.
+ Constraints = Project(lambda, Constraints);
+
+#if DEBUG_PRINT
+ Console.WriteLine(" Resulting constraints:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+ }
+
+ /// <summary>
+ /// Adds a line to the frame of "this" and updates Constraints accordingly, see
+ /// Cousot and Halbwachs, section 3.3.1.1. However, this method does not simplify
+ /// Constraints after the operation; that remains the caller's responsibility (which
+ /// gives the caller the opportunity to make multiple calls to AddVertex, AddRay,
+ /// and AddLine before calling SimplifyConstraints).
+ /// Assumes Constraints (and the frame fields) to be non-null.
+ /// </summary>
+ /// <param name="line"></param>
+ void AddLine(FrameElement/*!*/ line) {
+ Contract.Requires(line != null);
+ Contract.Requires(this.FrameLines != null);
+ // Note: The code for AddLine is identical to that of AddRay, except the AddLine
+ // does not introduce the constraint 0 <= lambda. (One could imagine sharing the
+ // code between AddRay and AddLine.)
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: AddLine called on {0}", line);
+ Console.WriteLine(" Initial constraints:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+
+ FrameLines.Add(line.Clone());
+#if FIXED_DESERIALIZER
+ Contract.Assert(Contract.ForAll(line.GetDefinedDimensions() , var=> FrameDimensions.Contains(var)));
+#endif
+
+ // We use a new temporary dimension.
+ IVariable/*!*/ lambda = new LambdaDimension();
+
+ // We change the constraints A*X <= B into
+ // A*X - (A*line)*lambda <= B.
+ // That means that each row k in A (which corresponds to one LinearConstraint
+ // in Constraints) is changed by subtracting
+ // (A*line)[k] * lambda
+ // from row k.
+ // Note:
+ // (A*line)[k]
+ // = { A*line is a row vector whose every row i is the dot-product of
+ // row i of A with the column vector "line" }
+ // A[k]*line
+ foreach (LinearConstraint/*!*/ cc in cce.NonNull(Constraints)) {
+ Contract.Assert(cc != null);
+ Rational d = cc.EvaluateLhs(line);
+ cc.SetCoefficient(lambda, -d);
+ }
+
+#if DEBUG_PRINT
+ Console.WriteLine(" Constraints after addition:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+
+ // Finally, project out the dummy dimension.
+ Constraints = Project(lambda, Constraints);
+
+#if DEBUG_PRINT
+ Console.WriteLine(" Resulting constraints:");
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+#endif
+ }
+
+ ISet /*IVariable!*//*!*/ GetDefinedDimensions() {
+ Contract.Ensures(Contract.Result<ISet>() != null);
+ HashSet /*IVariable!*//*!*/ dims = new HashSet /*IVariable!*/ ();
+ foreach (ArrayList p in new ArrayList[] { FrameVertices, FrameRays, FrameLines }) {
+ if (p != null) {
+ foreach (FrameElement/*!*/ element in p) {
+ Contract.Assert(element != null);
+ foreach (IVariable/*!*/ dim in element.GetDefinedDimensions()) {
+ Contract.Assert(dim != null);
+ dims.Add(dim);
+ }
+ }
+ }
+ }
+ return dims;
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ // ------------------ Simplification routines -------------------------------------------------------------
+ // --------------------------------------------------------------------------------------------------------
+
+ /// <summary>
+ /// Uses the Constraints to simplify the frame. See section 3.4.4 of Cousot and Halbwachs.
+ /// </summary>
+ void SimplifyFrame() {
+ Contract.Requires(this.Constraints != null);
+ SimplificationStatus[]/*!*/ status;
+
+ SimplifyFrameElements(cce.NonNull(FrameVertices), true, Constraints, out status);
+ RemoveIrrelevantFrameElements(FrameVertices, status, null);
+
+ SimplifyFrameElements(cce.NonNull(FrameRays), false, Constraints, out status);
+ RemoveIrrelevantFrameElements(FrameRays, status, FrameLines);
+ }
+
+ enum SimplificationStatus {
+ Irrelevant,
+ Relevant,
+ More
+ };
+
+ /// <summary>
+ /// For each i, sets status[i] to:
+ /// <ul>
+ /// <li>Irrelevant if ff[i] is irrelevant</li>
+ /// <li>Relevant if ff[i] is irrelevant</li>
+ /// <li>More if vertices is true and ray ff[i] can be replaced by a line ff[i]</li>
+ /// </ul>
+ /// </summary>
+ /// <param name="ff"></param>
+ /// <param name="vertices">true if "ff" contains vertices; false if "ff" contains rays</param>
+ /// <param name="constraints"></param>
+ /// <param name="status"></param>
+ static void SimplifyFrameElements(ArrayList/*!*/ /*FrameElement*/ ff, bool vertices, ArrayList/*!*/ /*LinearConstraint*/ constraints, out SimplificationStatus[]/*!*/ status) {
+ Contract.Requires(ff != null);
+ Contract.Requires(constraints != null);
+ Contract.Ensures(Contract.ValueAtReturn(out status) != null);
+ status = new SimplificationStatus[ff.Count];
+ bool[,] sat = new bool[ff.Count, constraints.Count];
+ for (int i = 0; i < ff.Count; i++) {
+ FrameElement f = (FrameElement/*!*/)cce.NonNull(ff[i]);
+ int cnt = 0;
+ for (int c = 0; c < constraints.Count; c++) {
+ LinearConstraint lc = (LinearConstraint/*!*/)cce.NonNull(constraints[c]);
+ bool s = lc.IsSaturatedBy(f, vertices);
+ if (s) {
+ sat[i, c] = true;
+ cnt++;
+ }
+ }
+ if (!vertices && cnt == constraints.Count) {
+ status[i] = SimplificationStatus.More;
+ } else {
+ status[i] = SimplificationStatus.Relevant;
+ }
+ }
+
+ CheckPairSimplifications(sat, status);
+ }
+
+ /// <summary>
+ /// Requires sat.GetLength(0) == status.Length.
+ /// </summary>
+ /// <param name="sat"></param>
+ /// <param name="status"></param>
+ static void CheckPairSimplifications(bool[,]/*!*/ sat, SimplificationStatus[]/*!*/ status) {
+ Contract.Requires(status != null);
+ Contract.Requires(sat != null);
+ Contract.Requires(sat.GetLength(0) == status.Length);
+ int M = sat.GetLength(0);
+ int N = sat.GetLength(1);
+
+ for (int i = 0; i < M - 1; i++) {
+ if (status[i] != SimplificationStatus.Relevant) {
+ continue;
+ }
+ for (int j = i + 1; j < M; j++) {
+ if (status[j] != SimplificationStatus.Relevant) {
+ continue;
+ }
+ // check (sat[i,*] <= sat[j,*]) and (sat[i,*] >= sat[j,*])
+ int cmp = 0; // -1: (sat[i,*] <= sat[j,*]), 0: equal, 1: (sat[i,*] >= sat[j,*])
+ for (int c = 0; c < N; c++) {
+ if (cmp < 0) {
+ if (sat[i, c] && !sat[j, c]) {
+ // incomparable
+ goto NEXT_PAIR;
+ }
+ } else if (0 < cmp) {
+ if (!sat[i, c] && sat[j, c]) {
+ // incomparable
+ goto NEXT_PAIR;
+ }
+ } else if (sat[i, c] != sat[j, c]) {
+ if (!sat[i, c]) {
+ cmp = -1;
+ } else {
+ cmp = 1;
+ }
+ }
+ }
+ if (cmp <= 0) {
+ // sat[i,*] <= sat[j,*] holds, so mark i as irrelevant
+ status[i] = SimplificationStatus.Irrelevant;
+ goto NEXT_OUTER;
+ } else {
+ // sat[i,*] >= sat[j,*] holds, so mark j as irrelevant
+ status[j] = SimplificationStatus.Irrelevant;
+ }
+ NEXT_PAIR: {
+ }
+ }
+ NEXT_OUTER: {
+ }
+ }
+ }
+
+ static void RemoveIrrelevantFrameElements(ArrayList/*!*/ /*FrameElement*/ ff, SimplificationStatus[]/*!*/ status,
+ /*maybe null*/ ArrayList /*FrameElement*/ lines) {
+ Contract.Requires(ff != null);
+ Contract.Requires(status != null);
+ Contract.Requires(ff.Count == status.Length);
+ for (int j = ff.Count - 1; 0 <= j; j--) {
+ switch (status[j]) {
+ case SimplificationStatus.Relevant:
+ break;
+ case SimplificationStatus.Irrelevant:
+#if DEBUG_PRINT
+ Console.WriteLine("Removing irrelevant {0}: {1}", lines == null ? "vertex" : "ray", ff[j]);
+#endif
+ ff.RemoveAt(j);
+ break;
+ case SimplificationStatus.More:
+ System.Diagnostics.Debug.Assert(lines != null);
+ FrameElement f = (FrameElement)ff[j];
+#if DEBUG_PRINT
+ Console.WriteLine("Changing ray into line: {0}", f);
+#endif
+ ff.RemoveAt(j);
+ Contract.Assert(lines != null);
+ lines.Add(f);
+ break;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Uses the frame to simplify Constraints. See section 3.3.1.2 of Cousot and Halbwachs.
+ ///
+ /// Note: This code does not necessarily eliminate all irrelevant equalities; Cousot and
+ /// Halbwachs only claim that the technique eliminates all irrelevant inequalities.
+ /// </summary>
+ void SimplifyConstraints() {
+ if (Constraints == null) {
+ return;
+ }
+ Contract.Assume(this.FrameVertices != null);
+ Contract.Assume(this.FrameRays != null);
+
+ SimplificationStatus[] status = new SimplificationStatus[Constraints.Count];
+ /*readonly*/
+ int feCount = FrameVertices.Count + FrameRays.Count;
+
+ // Create a table that keeps track of which constraints are satisfied by which vertices and rays
+ bool[,] sat = new bool[Constraints.Count, FrameVertices.Count + FrameRays.Count];
+ for (int i = 0; i < Constraints.Count; i++) {
+ status[i] = SimplificationStatus.Relevant;
+ LinearConstraint lc = (LinearConstraint/*!*/)cce.NonNull(Constraints[i]);
+ int cnt = 0; // number of vertices and rays that saturate lc
+ for (int j = 0; j < FrameVertices.Count; j++) {
+ FrameElement vertex = (FrameElement/*!*/)cce.NonNull(FrameVertices[j]);
+ if (lc.IsSaturatedBy(vertex, true)) {
+ sat[i, j] = true;
+ cnt++;
+ }
+ }
+ if (cnt == 0) {
+ // no vertex saturates the constraint, so the constraint is irrelevant
+ status[i] = SimplificationStatus.Irrelevant;
+ continue;
+ }
+ for (int j = 0; j < FrameRays.Count; j++) {
+ FrameElement ray = (FrameElement/*!*/)cce.NonNull(FrameRays[j]);
+ if (lc.IsSaturatedBy(ray, false)) {
+ sat[i, FrameVertices.Count + j] = true;
+ cnt++;
+ }
+ }
+ if (cnt == feCount) {
+ status[i] = SimplificationStatus.More;
+ } else {
+ // Cousot and Halbwachs says that all equalities are found in the way we just tested.
+ // If I understand that right, then we should not get here if the constraint is an
+ // equality constraint. The following assertion tests my understanding. --KRML
+ System.Diagnostics.Debug.Assert(lc.Relation == LinearConstraint.ConstraintRelation.LE);
+ }
+ }
+
+ CheckPairSimplifications(sat, status);
+
+ // Finally, make the changes to the list of constraints
+ for (int i = Constraints.Count - 1; 0 <= i; i--) {
+ switch (status[i]) {
+ case SimplificationStatus.Relevant:
+ break;
+ case SimplificationStatus.Irrelevant:
+#if DEBUG_PRINT
+ Console.WriteLine("Removing irrelevant constraint: {0}", Constraints[i]);
+#endif
+ Constraints.RemoveAt(i);
+ break;
+ case SimplificationStatus.More:
+ LinearConstraint lc = (LinearConstraint/*!*/)cce.NonNull(Constraints[i]);
+ if (lc.Relation == LinearConstraint.ConstraintRelation.LE) {
+#if DEBUG_PRINT
+ Console.WriteLine("Converting the following constraint into an equality: {0}", lc);
+#endif
+ LinearConstraint lcEq = lc.ChangeRelation(LinearConstraint.ConstraintRelation.EQ);
+ Constraints[i] = lcEq;
+ }
+ break;
+ }
+ }
+
+ foreach (LinearConstraint/*!*/ lc in Constraints) {
+ Contract.Assert(lc != null);
+ lc.Normalize();
+ }
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ // ------------------ Cloning routines --------------------------------------------------------------------
+ // --------------------------------------------------------------------------------------------------------
+
+ public LinearConstraintSystem/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<LinearConstraintSystem>() != null);
+ LinearConstraintSystem z = new LinearConstraintSystem();
+ z.FrameDimensions = (IMutableSet /*IVariable!*//*!*/)cce.NonNull(this.FrameDimensions.Clone());
+ if (this.Constraints != null) {
+ z.Constraints = DeeperListCopy_LC(this.Constraints);
+ z.FrameVertices = DeeperListCopy_FE(cce.NonNull(this.FrameVertices));
+ z.FrameRays = DeeperListCopy_FE(cce.NonNull(this.FrameRays));
+ z.FrameLines = DeeperListCopy_FE(cce.NonNull(this.FrameLines));
+ } else {
+ System.Diagnostics.Debug.Assert(this.FrameVertices == null);
+ System.Diagnostics.Debug.Assert(this.FrameRays == null);
+ System.Diagnostics.Debug.Assert(this.FrameLines == null);
+ // the constructor should already have set these fields of z to null
+ System.Diagnostics.Debug.Assert(z.Constraints == null);
+ System.Diagnostics.Debug.Assert(z.FrameVertices == null);
+ System.Diagnostics.Debug.Assert(z.FrameRays == null);
+ System.Diagnostics.Debug.Assert(z.FrameLines == null);
+ }
+ return z;
+ }
+
+ /// <summary>
+ /// Clones "list" and the elements of "list".
+ /// </summary>
+ /// <param name="list"></param>
+ /// <returns></returns>
+ ArrayList /*LinearConstraint*/ DeeperListCopy_LC(ArrayList/*!*/ /*LinearConstraint*/ list) {
+ Contract.Requires(list != null);
+ ArrayList /*LinearConstraint*/ z = new ArrayList /*LinearConstraint*/ (list.Count);
+ foreach (LinearConstraint/*!*/ lc in list) {
+ Contract.Assert(lc != null);
+ z.Add(lc.Clone());
+ }
+ System.Diagnostics.Debug.Assert(z.Count == list.Count);
+ return z;
+ }
+
+ /// <summary>
+ /// Clones "list" and the elements of "list".
+ /// </summary>
+ /// <param name="list"></param>
+ /// <returns></returns>
+ ArrayList /*FrameElement*/ DeeperListCopy_FE(ArrayList/*!*/ /*FrameElement*/ list) {
+ Contract.Requires(list != null);
+ ArrayList /*FrameElement*/ z = new ArrayList /*FrameElement*/ (list.Count);
+ foreach (FrameElement/*!*/ fe in list) {
+ Contract.Assert(fe != null);
+ z.Add(fe.Clone());
+ }
+ System.Diagnostics.Debug.Assert(z.Count == list.Count);
+ return z;
+ }
+
+ // --------------------------------------------------------------------------------------------------------
+ // ------------------ Debugging and unit test routines ----------------------------------------------------
+ // --------------------------------------------------------------------------------------------------------
+
+ public void Dump() {
+ Console.WriteLine(" Constraints:");
+ if (Constraints == null) {
+ Console.WriteLine(" <bottom>");
+ } else {
+ foreach (LinearConstraint cc in Constraints) {
+ Console.WriteLine(" {0}", cc);
+ }
+ }
+
+ Console.WriteLine(" FrameDimensions: {0}", FrameDimensions);
+
+ Console.WriteLine(" FrameVerticies:");
+ if (FrameVertices == null) {
+ Console.WriteLine(" <null>");
+ } else {
+ foreach (FrameElement fe in FrameVertices) {
+ Console.WriteLine(" {0}", fe);
+ }
+ }
+
+ Console.WriteLine(" FrameRays:");
+ if (FrameRays == null) {
+ Console.WriteLine(" <null>");
+ } else {
+ foreach (FrameElement fe in FrameRays) {
+ Console.WriteLine(" {0}", fe);
+ }
+ }
+
+ Console.WriteLine(" FrameLines:");
+ if (FrameLines == null) {
+ Console.WriteLine(" <null>");
+ } else {
+ foreach (FrameElement fe in FrameLines) {
+ Console.WriteLine(" {0}", fe);
+ }
+ }
+ }
+
+ class TestVariable : IVariable {
+ readonly string/*!*/ name;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(name != null);
+ }
+
+
+ public string/*!*/ Name {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return name;
+ }
+ }
+
+ public TestVariable(string/*!*/ name) {
+ Contract.Requires(name != null);
+ this.name = name;
+ }
+ [Pure]
+ public object DoVisit(ExprVisitor/*!*/ visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.VisitVariable(this);
+ }
+ }
+
+ public static void RunValidationA() {
+ IVariable/*!*/ dim1 = new TestVariable("X");
+ IVariable/*!*/ dim2 = new TestVariable("Y");
+ IVariable/*!*/ dim3 = new TestVariable("Z");
+ Contract.Assert(dim1 != null);
+ Contract.Assert(dim2 != null);
+ Contract.Assert(dim3 != null);
+
+ FrameElement s1 = new FrameElement();
+ s1.AddCoordinate(dim1, Rational.ONE);
+ s1.AddCoordinate(dim2, Rational.MINUS_ONE);
+ s1.AddCoordinate(dim3, Rational.ZERO);
+ FrameElement s2 = new FrameElement();
+ s2.AddCoordinate(dim1, Rational.MINUS_ONE);
+ s2.AddCoordinate(dim2, Rational.ONE);
+ s2.AddCoordinate(dim3, Rational.ZERO);
+ FrameElement r1 = new FrameElement();
+ r1.AddCoordinate(dim1, Rational.ZERO);
+ r1.AddCoordinate(dim2, Rational.ZERO);
+ r1.AddCoordinate(dim3, Rational.ONE);
+ FrameElement d1 = new FrameElement();
+ d1.AddCoordinate(dim1, Rational.ONE);
+ d1.AddCoordinate(dim2, Rational.ONE);
+ d1.AddCoordinate(dim3, Rational.ZERO);
+
+ // create lcs from frame -- cf. Cousot/Halbwachs 1978, section 3.3.1.1
+ LinearConstraintSystem lcs = new LinearConstraintSystem(s1);
+ lcs.Dump();
+
+ lcs.AddVertex(s2);
+ lcs.Dump();
+
+ lcs.AddRay(r1);
+ lcs.Dump();
+
+ lcs.AddLine(d1);
+ lcs.Dump();
+
+ lcs.SimplifyConstraints();
+ lcs.Dump();
+
+#if LATER
+ lcs.GenerateFrameFromConstraints(); // should give us back the original frame...
+#endif
+ Console.WriteLine("IsSubset? {0}", lcs.IsSubset(lcs.Clone()));
+ lcs.Dump();
+ }
+
+ /// <summary>
+ /// Tests the example in section 3.4.3 of Cousot and Halbwachs.
+ /// </summary>
+ public static void RunValidationB() {
+ IVariable/*!*/ X = new TestVariable("X");
+ IVariable/*!*/ Y = new TestVariable("Y");
+ IVariable/*!*/ Z = new TestVariable("Z");
+ Contract.Assert(X != null);
+ Contract.Assert(Y != null);
+ Contract.Assert(Z != null);
+ ArrayList /*LinearConstraint*/ cs = new ArrayList /*LinearConstraint*/ ();
+
+ LinearConstraint c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ c.SetCoefficient(X, Rational.MINUS_ONE);
+ c.SetCoefficient(Y, Rational.ONE);
+ c.SetCoefficient(Z, Rational.MINUS_ONE);
+ c.rhs = Rational.ZERO;
+ cs.Add(c);
+
+ c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ c.SetCoefficient(X, Rational.MINUS_ONE);
+ c.rhs = Rational.MINUS_ONE;
+ cs.Add(c);
+
+ c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ c.SetCoefficient(X, Rational.MINUS_ONE);
+ c.SetCoefficient(Y, Rational.MINUS_ONE);
+ c.SetCoefficient(Z, Rational.ONE);
+ c.rhs = Rational.ZERO;
+ cs.Add(c);
+
+ c = new LinearConstraint(LinearConstraint.ConstraintRelation.LE);
+ c.SetCoefficient(Y, Rational.MINUS_ONE);
+ c.SetCoefficient(Z, Rational.ONE);
+ c.rhs = Rational.FromInt(3);
+ cs.Add(c);
+
+ LinearConstraintSystem lcs = new LinearConstraintSystem(cs);
+ Console.WriteLine("==================== The final linear constraint system ====================");
+ lcs.Dump();
+ }
+
+ public static void RunValidationC() {
+ // Run the example in section 3.4.3 of Cousot and Halbwachs backwards, that is, from
+ // from to constraints.
+ IVariable/*!*/ dim1 = new TestVariable("X");
+ IVariable/*!*/ dim2 = new TestVariable("Y");
+ IVariable/*!*/ dim3 = new TestVariable("Z");
+ Contract.Assert(dim1 != null);
+ Contract.Assert(dim2 != null);
+ Contract.Assert(dim3 != null);
+
+ FrameElement s0 = new FrameElement();
+ s0.AddCoordinate(dim1, Rational.ONE);
+ s0.AddCoordinate(dim2, Rational.FromInts(1, 2));
+ s0.AddCoordinate(dim3, Rational.FromInts(-1, 2));
+
+ FrameElement s1 = new FrameElement();
+ s1.AddCoordinate(dim1, Rational.ONE);
+ s1.AddCoordinate(dim2, Rational.FromInts(-1, 2));
+ s1.AddCoordinate(dim3, Rational.FromInts(1, 2));
+
+ FrameElement s2 = new FrameElement();
+ s2.AddCoordinate(dim1, Rational.FromInt(3));
+ s2.AddCoordinate(dim2, Rational.FromInts(-3, 2));
+ s2.AddCoordinate(dim3, Rational.FromInts(3, 2));
+
+ FrameElement r0 = new FrameElement();
+ r0.AddCoordinate(dim1, Rational.ONE);
+ r0.AddCoordinate(dim2, Rational.FromInts(1, 2));
+ r0.AddCoordinate(dim3, Rational.FromInts(-1, 2));
+
+ FrameElement r1 = new FrameElement();
+ r1.AddCoordinate(dim1, Rational.ONE);
+ r1.AddCoordinate(dim2, Rational.ZERO);
+ r1.AddCoordinate(dim3, Rational.ZERO);
+
+ FrameElement d0 = new FrameElement();
+ d0.AddCoordinate(dim1, Rational.ZERO);
+ d0.AddCoordinate(dim2, Rational.ONE);
+ d0.AddCoordinate(dim3, Rational.ONE);
+
+ LinearConstraintSystem lcs = new LinearConstraintSystem(s0);
+ lcs.Dump();
+
+ lcs.AddVertex(s1);
+ lcs.Dump();
+
+ lcs.AddVertex(s2);
+ lcs.Dump();
+
+ lcs.AddRay(r0);
+ lcs.Dump();
+
+ lcs.AddRay(r1);
+ lcs.Dump();
+
+ lcs.AddLine(d0);
+ lcs.Dump();
+
+ lcs.SimplifyConstraints();
+ lcs.Dump();
+
+#if LATER
+ lcs.GenerateFrameFromConstraints(); // should give us back the original frame...
+#endif
+ }
+ }
} \ No newline at end of file
diff --git a/Source/AIFramework/Polyhedra/PolyhedraAbstraction.cs b/Source/AIFramework/Polyhedra/PolyhedraAbstraction.cs
index 06c0f483..6c914a54 100644
--- a/Source/AIFramework/Polyhedra/PolyhedraAbstraction.cs
+++ b/Source/AIFramework/Polyhedra/PolyhedraAbstraction.cs
@@ -1,762 +1,762 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using Microsoft.Basetypes;
-
- using ISet = Microsoft.Boogie.GSet<object>;
- using HashSet = Microsoft.Boogie.GSet<object>;
-
- /// <summary>
- /// Represents an invariant over linear variable constraints, represented by a polyhedron.
- /// </summary>
- public class PolyhedraLattice : Lattice {
- private static readonly Logger/*!*/ log = new Logger("Polyhedra");
-
- private class PolyhedraLatticeElement : Element {
-
- public LinearConstraintSystem/*!*/ lcs;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(lcs != null);
- }
-
-
- /// <summary>
- /// Creates a top or bottom elements, according to parameter "top".
- /// </summary>
- public PolyhedraLatticeElement(bool top) {
- if (top) {
- lcs = new LinearConstraintSystem(new ArrayList /*LinearConstraint*/ ());
- } else {
- lcs = new LinearConstraintSystem();
- }
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return lcs.ToString();
- }
-
- public override void Dump(string/*!*/ msg) {
- //Contract.Requires(msg != null);
- System.Console.WriteLine("PolyhedraLatticeElement.Dump({0}):", msg);
- lcs.Dump();
- }
-
- [Pure]
- public override ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
- return lcs.FreeVariables();
- }
-
- public PolyhedraLatticeElement(LinearConstraintSystem/*!*/ lcs) {
- Contract.Requires(lcs != null);
- this.lcs = lcs;
- }
-
- public override Element/*!*/ Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new PolyhedraLatticeElement(cce.NonNull(lcs.Clone()));
- }
-
- } // class
-
- readonly ILinearExprFactory/*!*/ factory;
- readonly IPropExprFactory/*!*/ propFactory;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(log != null);
- Contract.Invariant(factory != null);
- Contract.Invariant(propFactory != null);
- }
-
-
- public PolyhedraLattice(ILinearExprFactory/*!*/ linearFactory, IPropExprFactory/*!*/ propFactory)
- : base(linearFactory) {
- Contract.Requires(propFactory != null);
- Contract.Requires(linearFactory != null);
- log.Enabled = Lattice.LogSwitch;
- this.factory = linearFactory;
- this.propFactory = propFactory;
- // base(linearFactory);
- }
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new PolyhedraLatticeElement(true);
- }
- }
-
- public override Element/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
-
- return new PolyhedraLatticeElement(false);
- }
- }
-
- public override bool IsBottom(Element/*!*/ element) {
- //Contract.Requires(element != null);
- PolyhedraLatticeElement e = (PolyhedraLatticeElement)element;
- return e.lcs.IsBottom();
- }
-
- public override bool IsTop(Element/*!*/ element) {
- //Contract.Requires(element != null);
- PolyhedraLatticeElement e = (PolyhedraLatticeElement)element;
- return e.lcs.IsTop();
- }
-
-
- /// <summary>
- /// Returns true iff a is a subset of this.
- /// </summary>
- /// <param name="a"></param>
- /// <returns></returns>
- protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
- {
- //Contract.Requires(first != null);
- //Contract.Requires(second != null);
- PolyhedraLatticeElement a = (PolyhedraLatticeElement)first;
- PolyhedraLatticeElement b = (PolyhedraLatticeElement)second;
- return b.lcs.IsSubset(a.lcs);
- }
-
-
- public override string/*!*/ ToString(Element/*!*/ e) {
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<string>() != null);
- return ((PolyhedraLatticeElement)e).lcs.ToString();
- }
-
- public override IExpr/*!*/ ToPredicate(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- PolyhedraLatticeElement e = (PolyhedraLatticeElement)element;
- return e.lcs.ConvertToExpression(factory);
- }
-
-
-
- public override Lattice.Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Lattice.Element>() != null);
- log.DbgMsg("Joining ...");
- log.DbgMsgIndent();
- PolyhedraLatticeElement aa = (PolyhedraLatticeElement)first;
- PolyhedraLatticeElement bb = (PolyhedraLatticeElement)second;
- PolyhedraLatticeElement result = new PolyhedraLatticeElement(aa.lcs.Join(bb.lcs));
- log.DbgMsg(string.Format("{0} |_| {1} --> {2}", this.ToString(first), this.ToString(second), this.ToString(result)));
- log.DbgMsgUnindent();
- return result;
- }
-
-
- public override Lattice.Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Lattice.Element>() != null);
- PolyhedraLatticeElement aa = (PolyhedraLatticeElement)first;
- PolyhedraLatticeElement bb = (PolyhedraLatticeElement)second;
- return new PolyhedraLatticeElement(aa.lcs.Meet(bb.lcs));
- }
-
-
- public override Lattice.Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Lattice.Element>() != null);
- log.DbgMsg("Widening ...");
- log.DbgMsgIndent();
- PolyhedraLatticeElement aa = (PolyhedraLatticeElement)first;
- PolyhedraLatticeElement bb = (PolyhedraLatticeElement)second;
-
- LinearConstraintSystem lcs = aa.lcs.Widen(bb.lcs);
- PolyhedraLatticeElement result = new PolyhedraLatticeElement(lcs);
- log.DbgMsg(string.Format("{0} |_| {1} --> {2}", this.ToString(first), this.ToString(second), this.ToString(result)));
- log.DbgMsgUnindent();
- return result;
- }
-
-
- public override Element/*!*/ Eliminate(Element/*!*/ e, IVariable/*!*/ variable) {
- //Contract.Requires(variable != null);
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- log.DbgMsg(string.Format("Eliminating {0} ...", variable));
-
- PolyhedraLatticeElement ple = (PolyhedraLatticeElement)e;
- if (ple.lcs.IsBottom()) {
- return ple;
- }
- return new PolyhedraLatticeElement(ple.lcs.Project(variable));
- }
-
-
- public override Element/*!*/ Rename(Element/*!*/ e, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- //Contract.Requires(newName != null);
- //Contract.Requires(oldName != null);
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- log.DbgMsg(string.Format("Renaming {0} to {1} in {2} ...", oldName, newName, this.ToString(e)));
-
- PolyhedraLatticeElement ple = (PolyhedraLatticeElement)e;
- if (ple.lcs.IsBottom()) {
- return ple;
- }
- return new PolyhedraLatticeElement(ple.lcs.Rename(oldName, newName));
- }
-
- public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- return f is IntSymbol ||
- f.Equals(Int.Add) ||
- f.Equals(Int.Sub) ||
- f.Equals(Int.Negate) ||
- f.Equals(Int.Mul) ||
- f.Equals(Int.Eq) ||
- f.Equals(Int.Neq) ||
- f.Equals(Prop.Not) ||
- f.Equals(Int.AtMost) ||
- f.Equals(Int.Less) ||
- f.Equals(Int.Greater) ||
- f.Equals(Int.AtLeast);
- }
-
- public override Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
- //Contract.Requires(var2 != null);
- //Contract.Requires(var1 != null);
- //Contract.Requires(e != null);
- PolyhedraLatticeElement/*!*/ ple = (PolyhedraLatticeElement)cce.NonNull(e);
- Contract.Assume(ple.lcs.Constraints != null);
- ArrayList /*LinearConstraint!*//*!*/ clist = (ArrayList /*LinearConstraint!*/)cce.NonNull(ple.lcs.Constraints.Clone());
- LinearConstraint/*!*/ lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
- Contract.Assert(lc != null);
- lc.SetCoefficient(var1, Rational.ONE);
- lc.SetCoefficient(var2, Rational.MINUS_ONE);
- clist.Add(lc);
- LinearConstraintSystem newLcs = new LinearConstraintSystem(clist);
- if (newLcs.IsBottom()) {
- return Answer.Yes;
- } else {
- return Answer.Maybe;
- }
- }
-
- public override Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred) {
- //Contract.Requires(pred != null);
- //Contract.Requires(e != null);
- PolyhedraLatticeElement/*!*/ ple = (PolyhedraLatticeElement)Constrain(e, pred);
- Contract.Assert(ple != null);
- if (ple.lcs.IsBottom()) {
- return Answer.No;
- }
-
- // Note, "pred" may contain expressions that are not understood by the propFactory (in
- // particular, this may happen because--currently, and perhaps is a design we'll want
- // to change in the future--propFactory deals with BoogiePL expressions whereas "pred"
- // may also refer to Equivalences.UninterpFun expressions). Thus, we cannot just
- // call propFactory.Not(pred) to get the negation of "pred".
- pred = new PolyhedraLatticeNegation(pred);
- ple = (PolyhedraLatticeElement)Constrain(e, pred);
- if (ple.lcs.IsBottom()) {
- return Answer.Yes;
- } else {
- return Answer.Maybe;
- }
- }
-
- class PolyhedraLatticeNegation : IFunApp {
- IExpr/*!*/ arg;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(arg != null);
- }
-
-
- public PolyhedraLatticeNegation(IExpr/*!*/ arg) {
- Contract.Requires(arg != null);
- this.arg = arg;
- // base();
- }
-
- [Pure]
- public object DoVisit(ExprVisitor/*!*/ visitor) {
- //Contract.Requires(visitor != null);
- return visitor.VisitFunApp(this);
- }
-
- public IFunctionSymbol/*!*/ FunctionSymbol {
- get {
- Contract.Ensures(Contract.Result<IFunctionSymbol>() != null);
- return Prop.Not;
- }
- }
-
- public IList/*<IExpr!>*//*!*/ Arguments {
- get {
- Contract.Ensures(Contract.Result<IList>() != null);
-
- IExpr[] args = new IExpr[] { arg };
- return ArrayList.ReadOnly(args);
- }
- }
-
- public IFunApp/*!*/ CloneWithArguments(IList/*<IExpr!>*//*!*/ args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<IFunApp>() != null);
- Contract.Assert(args.Count == 1);
- return new PolyhedraLatticeNegation((IExpr/*!*/)cce.NonNull(args[0]));
- }
- }
-
- public override IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, ISet/*<IVariable!>*//*!*/ prohibitedVars) {
- //Contract.Requires(prohibitedVars != null);
- //Contract.Requires(var != null);
- //Contract.Requires(expr != null);
- //Contract.Requires(q != null);
- //Contract.Requires(e != null);
- // BUGBUG: TODO: this method can be implemented in a more precise way
- return null;
- }
-
-
- public override Element/*!*/ Constrain(Element/*!*/ e, IExpr/*!*/ expr) {
- //Contract.Requires(expr != null);
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- log.DbgMsg(string.Format("Constraining with {0} into {1} ...", expr, this.ToString(e)));
-
- PolyhedraLatticeElement ple = (PolyhedraLatticeElement)e;
- if (ple.lcs.IsBottom()) {
- return ple;
- }
- LinearCondition le = LinearExpressionBuilder.AsCondition(expr);
- if (le != null) {
- // update the polyhedron according to the linear expression
- Contract.Assume(ple.lcs.Constraints != null);
- ArrayList /*LinearConstraint*/ clist = (ArrayList/*!*/ /*LinearConstraint*/)cce.NonNull(ple.lcs.Constraints.Clone());
- le.AddToConstraintSystem(clist);
- LinearConstraintSystem newLcs = new LinearConstraintSystem(clist);
-
- return new PolyhedraLatticeElement(newLcs);
- }
- return ple;
- }
-
- } // class
-
-
- /// <summary>
- /// A LinearCondition follows this grammar:
- /// LinearCondition ::= unsatisfiable
- /// | LinearConstraint
- /// | ! LinearConstraint
- /// Note that negations are distributed to the leaves.
- /// </summary>
- ///
- [ContractClass(typeof(LinearConditionContracts))]
- abstract class LinearCondition {
- /// <summary>
- /// Adds constraints to the list "clist". If "this"
- /// entails some disjunctive constraints, they may not be added.
- /// </summary>
- /// <param name="clist"></param>
- public abstract void AddToConstraintSystem(ArrayList/*!*/ /*LinearConstraint*/ clist);
- }
- [ContractClassFor(typeof(LinearCondition))]
- abstract class LinearConditionContracts : LinearCondition {
- public override void AddToConstraintSystem(ArrayList clist) {
- Contract.Requires(clist != null);
- throw new NotImplementedException();
- }
- }
-
- class LCBottom : LinearCondition {
- public override void AddToConstraintSystem(ArrayList/*!*/ /*LinearConstraint*/ clist) {
- //Contract.Requires(clist != null);
- // make an unsatisfiable constraint
- LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
- lc.rhs = Rational.FromInt(1);
- clist.Add(lc);
- }
- }
-
- class LinearConditionLiteral : LinearCondition {
- public readonly bool positive;
- public readonly LinearConstraint/*!*/ constraint;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(constraint != null);
- }
-
- /// <summary>
- /// Precondition: positive || constraint.Relation == LinearConstraint.ConstraintRelation.EQ
- /// </summary>
- /// <param name="positive"></param>
- /// <param name="constraint"></param>
- public LinearConditionLiteral(bool positive, LinearConstraint/*!*/ constraint) {
- Contract.Requires(constraint != null);
- Contract.Requires(positive || constraint.Relation == LinearConstraint.ConstraintRelation.EQ);
- this.positive = positive;
- this.constraint = constraint;
- }
- public override void AddToConstraintSystem(ArrayList/*!*/ /*LinearConstraint*/ clist) {
- //Contract.Requires(clist != null);
- if (positive) {
- clist.Add(constraint);
- } else {
- Contract.Assert(constraint.Relation == LinearConstraint.ConstraintRelation.EQ);
- // the constraint is disjunctive, so just ignore it
- }
- }
- }
-
- class LinearExpressionBuilder {
- /// <summary>
- /// Builds a linear condition from "e", if possible; returns null if not possible.
- /// </summary>
- /// <param name="e"></param>
- /// <returns></returns>
- public static /*maybe null*/ LinearCondition AsCondition(IExpr e) /* throws ArithmeticException */
- {
- return GetCond(e, true);
- }
-
- static /*maybe null*/ LinearCondition GetCond(IExpr e, bool positive) /* throws ArithmeticException */
- {
- IFunApp funapp = e as IFunApp;
- if (funapp == null) {
- return null;
- }
- IFunctionSymbol/*!*/ s = funapp.FunctionSymbol;
- Contract.Assert(s != null);
- if ((positive && s.Equals(Prop.False)) ||
- (!positive && s.Equals(Prop.True))) {
- return new LCBottom();
- } else if (s.Equals(Prop.Not)) {
- Contract.Assert(funapp.Arguments.Count == 1);
- return GetCond((IExpr/*!*/)cce.NonNull(funapp.Arguments[0]), !positive);
- } else if (funapp.Arguments.Count == 2) {
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[1]);
- LinearExpr le0 = AsExpr(arg0);
- if (le0 == null) {
- return null;
- }
- LinearExpr le1 = AsExpr(arg1);
- if (le1 == null) {
- return null;
- }
-
- LinearConstraint constraint = null;
- bool sense = true;
- if ((positive && s.Equals(Int.Less)) || (!positive && s.Equals(Int.AtLeast))) {
- constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.LE, BigNum.ONE);
- } else if ((positive && s.Equals(Int.AtMost)) || (!positive && s.Equals(Int.Greater))) {
- constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.LE, BigNum.ZERO);
- } else if ((positive && s.Equals(Int.AtLeast)) || (!positive && s.Equals(Int.Less))) {
- constraint = MakeConstraint(le1, le0, LinearConstraint.ConstraintRelation.LE, BigNum.ZERO);
- } else if ((positive && s.Equals(Int.Greater)) || (!positive && s.Equals(Int.AtMost))) {
- constraint = MakeConstraint(le1, le0, LinearConstraint.ConstraintRelation.LE, BigNum.ONE);
- } else if (s.Equals(Int.Eq)) {
- constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.EQ, BigNum.ZERO);
- sense = positive;
- } else if (s.Equals(Int.Neq)) {
- constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.EQ, BigNum.ZERO);
- sense = !positive;
- }
- if (constraint != null) {
- if (constraint.coefficients.Count != 0) {
- return new LinearConditionLiteral(sense, constraint);
- } else if (constraint.IsConstantSatisfiable()) {
- return null;
- } else {
- return new LCBottom();
- }
- }
- }
- return null;
- }
-
- public static LinearConstraint MakeConstraint(LinearExpr/*!*/ le0, LinearExpr/*!*/ le1,
- LinearConstraint.ConstraintRelation rel, BigNum constantOffset) /* throws ArithmeticException */
- {
- Contract.Requires(le0 != null);
- Contract.Requires(le1 != null);
- le1.Negate();
- le0.Add(le1);
- le0.AddConstant(constantOffset);
- return le0.ToConstraint(rel);
- }
-
- /// <summary>
- /// Builds a linear expression from "e", if possible; returns null if not possible.
- /// </summary>
- /// <param name="e"></param>
- /// <returns></returns>
- public static /*maybe null*/ LinearExpr AsExpr(IExpr/*!*/ e) /* throws ArithmeticException */
- {
- Contract.Requires(e != null);
- if (e is IVariable) {
- // Note, without a type for the variable, we don't know if the identifier is intended to hold an integer value.
- // However, it seems that no harm can be caused by here treating the identifier as if it held an
- // integer value, because other parts of this method will reject the expression as a linear expression
- // if non-numeric operations other than equality are applied to the identifier.
- return new LinearExpr((IVariable)e);
- } else if (e is IFunApp) {
- IFunApp/*!*/ funapp = (IFunApp)e;
- Contract.Assert(funapp != null);
- IFunctionSymbol/*!*/ s = funapp.FunctionSymbol;
- Contract.Assert(s != null);
-
- if (s is IntSymbol) {
- return new LinearExpr(((IntSymbol)s).Value);
- } else if (s.Equals(Int.Negate)) {
- Contract.Assert(funapp.Arguments.Count == 1);
- LinearExpr le = AsExpr((IExpr/*!*/)cce.NonNull(funapp.Arguments[0]));
- if (le != null) {
- le.Negate();
- return le;
- }
- } else if (s.Equals(Int.Add) || s.Equals(Int.Sub) || s.Equals(Int.Mul)) {
- Contract.Assert(funapp.Arguments.Count == 2);
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[1]);
- LinearExpr le0 = AsExpr(arg0);
- if (le0 == null) {
- return null;
- }
- LinearExpr le1 = AsExpr(arg1);
- if (le1 == null) {
- return null;
- }
-
- if (s.Equals(Int.Add)) {
- le0.Add(le1);
- return le0;
- } else if (s.Equals(Int.Sub)) {
- le1.Negate();
- le0.Add(le1);
- return le0;
- } else if (s.Equals(Int.Mul)) {
- BigNum x;
- if (le0.AsConstant(out x)) {
- le1.Multiply(x);
- return le1;
- } else if (le1.AsConstant(out x)) {
- le0.Multiply(x);
- return le0;
- }
- }
- }
- }
- return null;
- }
- }
-
- class LinearExpr {
- BigNum constant;
- Term terms;
-
- class Term {
- public BigNum coeff; // non-0, if the node is used
- public IVariable/*!*/ var;
- public Term next;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(var != null);
- }
-
- public Term(BigNum coeff, IVariable/*!*/ var) {
- Contract.Requires(var != null);
- this.coeff = coeff;
- this.var = var;
- // base();
- }
- }
-
- public LinearExpr(BigNum x) {
- constant = x;
- }
-
- public LinearExpr(IVariable/*!*/ var) {
- Contract.Requires(var != null);
- constant = BigNum.ZERO;
- terms = new Term(BigNum.ONE, var);
- }
-
- public ISet /*IVariable!*/ GetDefinedDimensions() {
- HashSet /*IVariable!*//*!*/ dims = new HashSet /*IVariable!*/ ();
- for (Term current = terms; current != null; current = current.next) {
- dims.Add(current.var);
- }
- return dims;
- }
-
- public BigNum TermCoefficient(/*MayBeNull*/ IVariable/*!*/ var) {
- Contract.Requires(var != null);
- BigNum z = BigNum.ZERO;
- if (var == null) {
- z = this.constant;
- } else if (terms != null) {
- Term current = terms;
- while (current != null) {
- if (current.var == var) {
- break;
- }
- current = current.next;
- }
- if (current != null) {
- z = current.coeff;
- }
- }
- return z;
- }
-
- public bool AsConstant(out BigNum x) {
- if (terms == null) {
- x = constant;
- return true;
- } else {
- x = BigNum.FromInt(-70022); // to please complier
- return false;
- }
- }
-
- public void Negate() /* throws ArithmeticException */
- {
- checked {
- constant = -constant;
- }
-
- for (Term t = terms; t != null; t = t.next) {
- checked {
- t.coeff = -t.coeff;
- }
- }
- }
-
- /// <summary>
- /// Adds "x" to "this".
- /// </summary>
- /// <param name="x"></param>
- public void AddConstant(BigNum x) /* throws ArithmeticException */
- {
- checked {
- constant += x;
- }
- }
-
- /// <summary>
- /// Adds "le" to "this". Afterwards, "le" should not be used, because it will have been destroyed.
- /// </summary>
- /// <param name="le"></param>
- public void Add(LinearExpr/*!*/ le) /* throws ArithmeticException */
- {
- Contract.Requires(le != null);
- Contract.Requires(le != this);
- checked {
- constant += le.constant;
- }
- le.constant = BigNum.FromInt(-70029); // "le" should no longer be used; assign it a strange value so that misuse is perhaps more easily detected
-
- // optimization:
- if (le.terms == null) {
- return;
- } else if (terms == null) {
- terms = le.terms;
- le.terms = null;
- return;
- }
-
- // merge the two term lists
- // Use a nested loop, which is quadratic in time complexity, but we hope the lists will be small
- Term newTerms = null;
- while (le.terms != null) {
- // take off next term from "le"
- Term t = le.terms;
- le.terms = t.next;
- t.next = null;
-
- for (Term u = terms; u != null; u = u.next) {
- if (u.var == t.var) {
- checked {
- u.coeff += t.coeff;
- }
- goto NextOuter;
- }
- }
- t.next = newTerms;
- newTerms = t;
-
- NextOuter:
- ;
- }
-
- // finally, include all non-0 terms
- while (terms != null) {
- // take off next term from "this"
- Term t = terms;
- terms = t.next;
-
- if (!t.coeff.IsZero) {
- t.next = newTerms;
- newTerms = t;
- }
- }
- terms = newTerms;
- }
-
- public void Multiply(BigNum x) /* throws ArithmeticException */
- {
- if (x.IsZero) {
- constant = BigNum.ZERO;
- terms = null;
- } else {
- for (Term t = terms; t != null; t = t.next) {
- checked {
- t.coeff *= x;
- }
- }
- checked {
- constant *= x;
- }
- }
- }
-
- public bool IsInvertible(IVariable/*!*/ var) {
- Contract.Requires(var != null);
- for (Term t = terms; t != null; t = t.next) {
- if (t.var == var) {
- System.Diagnostics.Debug.Assert(!t.coeff.IsZero);
- return true;
- }
- }
- return false;
- }
-
- public LinearConstraint ToConstraint(LinearConstraint.ConstraintRelation rel) /* throws ArithmeticException */
- {
- LinearConstraint constraint = new LinearConstraint(rel);
- for (Term t = terms; t != null; t = t.next) {
- constraint.SetCoefficient(t.var, t.coeff.ToRational);
- }
- BigNum rhs = -constant;
- constraint.rhs = rhs.ToRational;
- return constraint;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics;
+ using System.Diagnostics.Contracts;
+ using Microsoft.Basetypes;
+
+ using ISet = Microsoft.Boogie.GSet<object>;
+ using HashSet = Microsoft.Boogie.GSet<object>;
+
+ /// <summary>
+ /// Represents an invariant over linear variable constraints, represented by a polyhedron.
+ /// </summary>
+ public class PolyhedraLattice : Lattice {
+ private static readonly Logger/*!*/ log = new Logger("Polyhedra");
+
+ private class PolyhedraLatticeElement : Element {
+
+ public LinearConstraintSystem/*!*/ lcs;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(lcs != null);
+ }
+
+
+ /// <summary>
+ /// Creates a top or bottom elements, according to parameter "top".
+ /// </summary>
+ public PolyhedraLatticeElement(bool top) {
+ if (top) {
+ lcs = new LinearConstraintSystem(new ArrayList /*LinearConstraint*/ ());
+ } else {
+ lcs = new LinearConstraintSystem();
+ }
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return lcs.ToString();
+ }
+
+ public override void Dump(string/*!*/ msg) {
+ //Contract.Requires(msg != null);
+ System.Console.WriteLine("PolyhedraLatticeElement.Dump({0}):", msg);
+ lcs.Dump();
+ }
+
+ [Pure]
+ public override ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
+ return lcs.FreeVariables();
+ }
+
+ public PolyhedraLatticeElement(LinearConstraintSystem/*!*/ lcs) {
+ Contract.Requires(lcs != null);
+ this.lcs = lcs;
+ }
+
+ public override Element/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new PolyhedraLatticeElement(cce.NonNull(lcs.Clone()));
+ }
+
+ } // class
+
+ readonly ILinearExprFactory/*!*/ factory;
+ readonly IPropExprFactory/*!*/ propFactory;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(log != null);
+ Contract.Invariant(factory != null);
+ Contract.Invariant(propFactory != null);
+ }
+
+
+ public PolyhedraLattice(ILinearExprFactory/*!*/ linearFactory, IPropExprFactory/*!*/ propFactory)
+ : base(linearFactory) {
+ Contract.Requires(propFactory != null);
+ Contract.Requires(linearFactory != null);
+ log.Enabled = Lattice.LogSwitch;
+ this.factory = linearFactory;
+ this.propFactory = propFactory;
+ // base(linearFactory);
+ }
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new PolyhedraLatticeElement(true);
+ }
+ }
+
+ public override Element/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+
+ return new PolyhedraLatticeElement(false);
+ }
+ }
+
+ public override bool IsBottom(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ PolyhedraLatticeElement e = (PolyhedraLatticeElement)element;
+ return e.lcs.IsBottom();
+ }
+
+ public override bool IsTop(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ PolyhedraLatticeElement e = (PolyhedraLatticeElement)element;
+ return e.lcs.IsTop();
+ }
+
+
+ /// <summary>
+ /// Returns true iff a is a subset of this.
+ /// </summary>
+ /// <param name="a"></param>
+ /// <returns></returns>
+ protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
+ {
+ //Contract.Requires(first != null);
+ //Contract.Requires(second != null);
+ PolyhedraLatticeElement a = (PolyhedraLatticeElement)first;
+ PolyhedraLatticeElement b = (PolyhedraLatticeElement)second;
+ return b.lcs.IsSubset(a.lcs);
+ }
+
+
+ public override string/*!*/ ToString(Element/*!*/ e) {
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ return ((PolyhedraLatticeElement)e).lcs.ToString();
+ }
+
+ public override IExpr/*!*/ ToPredicate(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ PolyhedraLatticeElement e = (PolyhedraLatticeElement)element;
+ return e.lcs.ConvertToExpression(factory);
+ }
+
+
+
+ public override Lattice.Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Lattice.Element>() != null);
+ log.DbgMsg("Joining ...");
+ log.DbgMsgIndent();
+ PolyhedraLatticeElement aa = (PolyhedraLatticeElement)first;
+ PolyhedraLatticeElement bb = (PolyhedraLatticeElement)second;
+ PolyhedraLatticeElement result = new PolyhedraLatticeElement(aa.lcs.Join(bb.lcs));
+ log.DbgMsg(string.Format("{0} |_| {1} --> {2}", this.ToString(first), this.ToString(second), this.ToString(result)));
+ log.DbgMsgUnindent();
+ return result;
+ }
+
+
+ public override Lattice.Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Lattice.Element>() != null);
+ PolyhedraLatticeElement aa = (PolyhedraLatticeElement)first;
+ PolyhedraLatticeElement bb = (PolyhedraLatticeElement)second;
+ return new PolyhedraLatticeElement(aa.lcs.Meet(bb.lcs));
+ }
+
+
+ public override Lattice.Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Lattice.Element>() != null);
+ log.DbgMsg("Widening ...");
+ log.DbgMsgIndent();
+ PolyhedraLatticeElement aa = (PolyhedraLatticeElement)first;
+ PolyhedraLatticeElement bb = (PolyhedraLatticeElement)second;
+
+ LinearConstraintSystem lcs = aa.lcs.Widen(bb.lcs);
+ PolyhedraLatticeElement result = new PolyhedraLatticeElement(lcs);
+ log.DbgMsg(string.Format("{0} |_| {1} --> {2}", this.ToString(first), this.ToString(second), this.ToString(result)));
+ log.DbgMsgUnindent();
+ return result;
+ }
+
+
+ public override Element/*!*/ Eliminate(Element/*!*/ e, IVariable/*!*/ variable) {
+ //Contract.Requires(variable != null);
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ log.DbgMsg(string.Format("Eliminating {0} ...", variable));
+
+ PolyhedraLatticeElement ple = (PolyhedraLatticeElement)e;
+ if (ple.lcs.IsBottom()) {
+ return ple;
+ }
+ return new PolyhedraLatticeElement(ple.lcs.Project(variable));
+ }
+
+
+ public override Element/*!*/ Rename(Element/*!*/ e, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ //Contract.Requires(newName != null);
+ //Contract.Requires(oldName != null);
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ log.DbgMsg(string.Format("Renaming {0} to {1} in {2} ...", oldName, newName, this.ToString(e)));
+
+ PolyhedraLatticeElement ple = (PolyhedraLatticeElement)e;
+ if (ple.lcs.IsBottom()) {
+ return ple;
+ }
+ return new PolyhedraLatticeElement(ple.lcs.Rename(oldName, newName));
+ }
+
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ return f is IntSymbol ||
+ f.Equals(Int.Add) ||
+ f.Equals(Int.Sub) ||
+ f.Equals(Int.Negate) ||
+ f.Equals(Int.Mul) ||
+ f.Equals(Int.Eq) ||
+ f.Equals(Int.Neq) ||
+ f.Equals(Prop.Not) ||
+ f.Equals(Int.AtMost) ||
+ f.Equals(Int.Less) ||
+ f.Equals(Int.Greater) ||
+ f.Equals(Int.AtLeast);
+ }
+
+ public override Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
+ //Contract.Requires(var2 != null);
+ //Contract.Requires(var1 != null);
+ //Contract.Requires(e != null);
+ PolyhedraLatticeElement/*!*/ ple = (PolyhedraLatticeElement)cce.NonNull(e);
+ Contract.Assume(ple.lcs.Constraints != null);
+ ArrayList /*LinearConstraint!*//*!*/ clist = (ArrayList /*LinearConstraint!*/)cce.NonNull(ple.lcs.Constraints.Clone());
+ LinearConstraint/*!*/ lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
+ Contract.Assert(lc != null);
+ lc.SetCoefficient(var1, Rational.ONE);
+ lc.SetCoefficient(var2, Rational.MINUS_ONE);
+ clist.Add(lc);
+ LinearConstraintSystem newLcs = new LinearConstraintSystem(clist);
+ if (newLcs.IsBottom()) {
+ return Answer.Yes;
+ } else {
+ return Answer.Maybe;
+ }
+ }
+
+ public override Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred) {
+ //Contract.Requires(pred != null);
+ //Contract.Requires(e != null);
+ PolyhedraLatticeElement/*!*/ ple = (PolyhedraLatticeElement)Constrain(e, pred);
+ Contract.Assert(ple != null);
+ if (ple.lcs.IsBottom()) {
+ return Answer.No;
+ }
+
+ // Note, "pred" may contain expressions that are not understood by the propFactory (in
+ // particular, this may happen because--currently, and perhaps is a design we'll want
+ // to change in the future--propFactory deals with BoogiePL expressions whereas "pred"
+ // may also refer to Equivalences.UninterpFun expressions). Thus, we cannot just
+ // call propFactory.Not(pred) to get the negation of "pred".
+ pred = new PolyhedraLatticeNegation(pred);
+ ple = (PolyhedraLatticeElement)Constrain(e, pred);
+ if (ple.lcs.IsBottom()) {
+ return Answer.Yes;
+ } else {
+ return Answer.Maybe;
+ }
+ }
+
+ class PolyhedraLatticeNegation : IFunApp {
+ IExpr/*!*/ arg;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(arg != null);
+ }
+
+
+ public PolyhedraLatticeNegation(IExpr/*!*/ arg) {
+ Contract.Requires(arg != null);
+ this.arg = arg;
+ // base();
+ }
+
+ [Pure]
+ public object DoVisit(ExprVisitor/*!*/ visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.VisitFunApp(this);
+ }
+
+ public IFunctionSymbol/*!*/ FunctionSymbol {
+ get {
+ Contract.Ensures(Contract.Result<IFunctionSymbol>() != null);
+ return Prop.Not;
+ }
+ }
+
+ public IList/*<IExpr!>*//*!*/ Arguments {
+ get {
+ Contract.Ensures(Contract.Result<IList>() != null);
+
+ IExpr[] args = new IExpr[] { arg };
+ return ArrayList.ReadOnly(args);
+ }
+ }
+
+ public IFunApp/*!*/ CloneWithArguments(IList/*<IExpr!>*//*!*/ args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<IFunApp>() != null);
+ Contract.Assert(args.Count == 1);
+ return new PolyhedraLatticeNegation((IExpr/*!*/)cce.NonNull(args[0]));
+ }
+ }
+
+ public override IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, ISet/*<IVariable!>*//*!*/ prohibitedVars) {
+ //Contract.Requires(prohibitedVars != null);
+ //Contract.Requires(var != null);
+ //Contract.Requires(expr != null);
+ //Contract.Requires(q != null);
+ //Contract.Requires(e != null);
+ // BUGBUG: TODO: this method can be implemented in a more precise way
+ return null;
+ }
+
+
+ public override Element/*!*/ Constrain(Element/*!*/ e, IExpr/*!*/ expr) {
+ //Contract.Requires(expr != null);
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ log.DbgMsg(string.Format("Constraining with {0} into {1} ...", expr, this.ToString(e)));
+
+ PolyhedraLatticeElement ple = (PolyhedraLatticeElement)e;
+ if (ple.lcs.IsBottom()) {
+ return ple;
+ }
+ LinearCondition le = LinearExpressionBuilder.AsCondition(expr);
+ if (le != null) {
+ // update the polyhedron according to the linear expression
+ Contract.Assume(ple.lcs.Constraints != null);
+ ArrayList /*LinearConstraint*/ clist = (ArrayList/*!*/ /*LinearConstraint*/)cce.NonNull(ple.lcs.Constraints.Clone());
+ le.AddToConstraintSystem(clist);
+ LinearConstraintSystem newLcs = new LinearConstraintSystem(clist);
+
+ return new PolyhedraLatticeElement(newLcs);
+ }
+ return ple;
+ }
+
+ } // class
+
+
+ /// <summary>
+ /// A LinearCondition follows this grammar:
+ /// LinearCondition ::= unsatisfiable
+ /// | LinearConstraint
+ /// | ! LinearConstraint
+ /// Note that negations are distributed to the leaves.
+ /// </summary>
+ ///
+ [ContractClass(typeof(LinearConditionContracts))]
+ abstract class LinearCondition {
+ /// <summary>
+ /// Adds constraints to the list "clist". If "this"
+ /// entails some disjunctive constraints, they may not be added.
+ /// </summary>
+ /// <param name="clist"></param>
+ public abstract void AddToConstraintSystem(ArrayList/*!*/ /*LinearConstraint*/ clist);
+ }
+ [ContractClassFor(typeof(LinearCondition))]
+ abstract class LinearConditionContracts : LinearCondition {
+ public override void AddToConstraintSystem(ArrayList clist) {
+ Contract.Requires(clist != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ class LCBottom : LinearCondition {
+ public override void AddToConstraintSystem(ArrayList/*!*/ /*LinearConstraint*/ clist) {
+ //Contract.Requires(clist != null);
+ // make an unsatisfiable constraint
+ LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
+ lc.rhs = Rational.FromInt(1);
+ clist.Add(lc);
+ }
+ }
+
+ class LinearConditionLiteral : LinearCondition {
+ public readonly bool positive;
+ public readonly LinearConstraint/*!*/ constraint;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(constraint != null);
+ }
+
+ /// <summary>
+ /// Precondition: positive || constraint.Relation == LinearConstraint.ConstraintRelation.EQ
+ /// </summary>
+ /// <param name="positive"></param>
+ /// <param name="constraint"></param>
+ public LinearConditionLiteral(bool positive, LinearConstraint/*!*/ constraint) {
+ Contract.Requires(constraint != null);
+ Contract.Requires(positive || constraint.Relation == LinearConstraint.ConstraintRelation.EQ);
+ this.positive = positive;
+ this.constraint = constraint;
+ }
+ public override void AddToConstraintSystem(ArrayList/*!*/ /*LinearConstraint*/ clist) {
+ //Contract.Requires(clist != null);
+ if (positive) {
+ clist.Add(constraint);
+ } else {
+ Contract.Assert(constraint.Relation == LinearConstraint.ConstraintRelation.EQ);
+ // the constraint is disjunctive, so just ignore it
+ }
+ }
+ }
+
+ class LinearExpressionBuilder {
+ /// <summary>
+ /// Builds a linear condition from "e", if possible; returns null if not possible.
+ /// </summary>
+ /// <param name="e"></param>
+ /// <returns></returns>
+ public static /*maybe null*/ LinearCondition AsCondition(IExpr e) /* throws ArithmeticException */
+ {
+ return GetCond(e, true);
+ }
+
+ static /*maybe null*/ LinearCondition GetCond(IExpr e, bool positive) /* throws ArithmeticException */
+ {
+ IFunApp funapp = e as IFunApp;
+ if (funapp == null) {
+ return null;
+ }
+ IFunctionSymbol/*!*/ s = funapp.FunctionSymbol;
+ Contract.Assert(s != null);
+ if ((positive && s.Equals(Prop.False)) ||
+ (!positive && s.Equals(Prop.True))) {
+ return new LCBottom();
+ } else if (s.Equals(Prop.Not)) {
+ Contract.Assert(funapp.Arguments.Count == 1);
+ return GetCond((IExpr/*!*/)cce.NonNull(funapp.Arguments[0]), !positive);
+ } else if (funapp.Arguments.Count == 2) {
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[1]);
+ LinearExpr le0 = AsExpr(arg0);
+ if (le0 == null) {
+ return null;
+ }
+ LinearExpr le1 = AsExpr(arg1);
+ if (le1 == null) {
+ return null;
+ }
+
+ LinearConstraint constraint = null;
+ bool sense = true;
+ if ((positive && s.Equals(Int.Less)) || (!positive && s.Equals(Int.AtLeast))) {
+ constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.LE, BigNum.ONE);
+ } else if ((positive && s.Equals(Int.AtMost)) || (!positive && s.Equals(Int.Greater))) {
+ constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.LE, BigNum.ZERO);
+ } else if ((positive && s.Equals(Int.AtLeast)) || (!positive && s.Equals(Int.Less))) {
+ constraint = MakeConstraint(le1, le0, LinearConstraint.ConstraintRelation.LE, BigNum.ZERO);
+ } else if ((positive && s.Equals(Int.Greater)) || (!positive && s.Equals(Int.AtMost))) {
+ constraint = MakeConstraint(le1, le0, LinearConstraint.ConstraintRelation.LE, BigNum.ONE);
+ } else if (s.Equals(Int.Eq)) {
+ constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.EQ, BigNum.ZERO);
+ sense = positive;
+ } else if (s.Equals(Int.Neq)) {
+ constraint = MakeConstraint(le0, le1, LinearConstraint.ConstraintRelation.EQ, BigNum.ZERO);
+ sense = !positive;
+ }
+ if (constraint != null) {
+ if (constraint.coefficients.Count != 0) {
+ return new LinearConditionLiteral(sense, constraint);
+ } else if (constraint.IsConstantSatisfiable()) {
+ return null;
+ } else {
+ return new LCBottom();
+ }
+ }
+ }
+ return null;
+ }
+
+ public static LinearConstraint MakeConstraint(LinearExpr/*!*/ le0, LinearExpr/*!*/ le1,
+ LinearConstraint.ConstraintRelation rel, BigNum constantOffset) /* throws ArithmeticException */
+ {
+ Contract.Requires(le0 != null);
+ Contract.Requires(le1 != null);
+ le1.Negate();
+ le0.Add(le1);
+ le0.AddConstant(constantOffset);
+ return le0.ToConstraint(rel);
+ }
+
+ /// <summary>
+ /// Builds a linear expression from "e", if possible; returns null if not possible.
+ /// </summary>
+ /// <param name="e"></param>
+ /// <returns></returns>
+ public static /*maybe null*/ LinearExpr AsExpr(IExpr/*!*/ e) /* throws ArithmeticException */
+ {
+ Contract.Requires(e != null);
+ if (e is IVariable) {
+ // Note, without a type for the variable, we don't know if the identifier is intended to hold an integer value.
+ // However, it seems that no harm can be caused by here treating the identifier as if it held an
+ // integer value, because other parts of this method will reject the expression as a linear expression
+ // if non-numeric operations other than equality are applied to the identifier.
+ return new LinearExpr((IVariable)e);
+ } else if (e is IFunApp) {
+ IFunApp/*!*/ funapp = (IFunApp)e;
+ Contract.Assert(funapp != null);
+ IFunctionSymbol/*!*/ s = funapp.FunctionSymbol;
+ Contract.Assert(s != null);
+
+ if (s is IntSymbol) {
+ return new LinearExpr(((IntSymbol)s).Value);
+ } else if (s.Equals(Int.Negate)) {
+ Contract.Assert(funapp.Arguments.Count == 1);
+ LinearExpr le = AsExpr((IExpr/*!*/)cce.NonNull(funapp.Arguments[0]));
+ if (le != null) {
+ le.Negate();
+ return le;
+ }
+ } else if (s.Equals(Int.Add) || s.Equals(Int.Sub) || s.Equals(Int.Mul)) {
+ Contract.Assert(funapp.Arguments.Count == 2);
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(funapp.Arguments[1]);
+ LinearExpr le0 = AsExpr(arg0);
+ if (le0 == null) {
+ return null;
+ }
+ LinearExpr le1 = AsExpr(arg1);
+ if (le1 == null) {
+ return null;
+ }
+
+ if (s.Equals(Int.Add)) {
+ le0.Add(le1);
+ return le0;
+ } else if (s.Equals(Int.Sub)) {
+ le1.Negate();
+ le0.Add(le1);
+ return le0;
+ } else if (s.Equals(Int.Mul)) {
+ BigNum x;
+ if (le0.AsConstant(out x)) {
+ le1.Multiply(x);
+ return le1;
+ } else if (le1.AsConstant(out x)) {
+ le0.Multiply(x);
+ return le0;
+ }
+ }
+ }
+ }
+ return null;
+ }
+ }
+
+ class LinearExpr {
+ BigNum constant;
+ Term terms;
+
+ class Term {
+ public BigNum coeff; // non-0, if the node is used
+ public IVariable/*!*/ var;
+ public Term next;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(var != null);
+ }
+
+ public Term(BigNum coeff, IVariable/*!*/ var) {
+ Contract.Requires(var != null);
+ this.coeff = coeff;
+ this.var = var;
+ // base();
+ }
+ }
+
+ public LinearExpr(BigNum x) {
+ constant = x;
+ }
+
+ public LinearExpr(IVariable/*!*/ var) {
+ Contract.Requires(var != null);
+ constant = BigNum.ZERO;
+ terms = new Term(BigNum.ONE, var);
+ }
+
+ public ISet /*IVariable!*/ GetDefinedDimensions() {
+ HashSet /*IVariable!*//*!*/ dims = new HashSet /*IVariable!*/ ();
+ for (Term current = terms; current != null; current = current.next) {
+ dims.Add(current.var);
+ }
+ return dims;
+ }
+
+ public BigNum TermCoefficient(/*MayBeNull*/ IVariable/*!*/ var) {
+ Contract.Requires(var != null);
+ BigNum z = BigNum.ZERO;
+ if (var == null) {
+ z = this.constant;
+ } else if (terms != null) {
+ Term current = terms;
+ while (current != null) {
+ if (current.var == var) {
+ break;
+ }
+ current = current.next;
+ }
+ if (current != null) {
+ z = current.coeff;
+ }
+ }
+ return z;
+ }
+
+ public bool AsConstant(out BigNum x) {
+ if (terms == null) {
+ x = constant;
+ return true;
+ } else {
+ x = BigNum.FromInt(-70022); // to please complier
+ return false;
+ }
+ }
+
+ public void Negate() /* throws ArithmeticException */
+ {
+ checked {
+ constant = -constant;
+ }
+
+ for (Term t = terms; t != null; t = t.next) {
+ checked {
+ t.coeff = -t.coeff;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Adds "x" to "this".
+ /// </summary>
+ /// <param name="x"></param>
+ public void AddConstant(BigNum x) /* throws ArithmeticException */
+ {
+ checked {
+ constant += x;
+ }
+ }
+
+ /// <summary>
+ /// Adds "le" to "this". Afterwards, "le" should not be used, because it will have been destroyed.
+ /// </summary>
+ /// <param name="le"></param>
+ public void Add(LinearExpr/*!*/ le) /* throws ArithmeticException */
+ {
+ Contract.Requires(le != null);
+ Contract.Requires(le != this);
+ checked {
+ constant += le.constant;
+ }
+ le.constant = BigNum.FromInt(-70029); // "le" should no longer be used; assign it a strange value so that misuse is perhaps more easily detected
+
+ // optimization:
+ if (le.terms == null) {
+ return;
+ } else if (terms == null) {
+ terms = le.terms;
+ le.terms = null;
+ return;
+ }
+
+ // merge the two term lists
+ // Use a nested loop, which is quadratic in time complexity, but we hope the lists will be small
+ Term newTerms = null;
+ while (le.terms != null) {
+ // take off next term from "le"
+ Term t = le.terms;
+ le.terms = t.next;
+ t.next = null;
+
+ for (Term u = terms; u != null; u = u.next) {
+ if (u.var == t.var) {
+ checked {
+ u.coeff += t.coeff;
+ }
+ goto NextOuter;
+ }
+ }
+ t.next = newTerms;
+ newTerms = t;
+
+ NextOuter:
+ ;
+ }
+
+ // finally, include all non-0 terms
+ while (terms != null) {
+ // take off next term from "this"
+ Term t = terms;
+ terms = t.next;
+
+ if (!t.coeff.IsZero) {
+ t.next = newTerms;
+ newTerms = t;
+ }
+ }
+ terms = newTerms;
+ }
+
+ public void Multiply(BigNum x) /* throws ArithmeticException */
+ {
+ if (x.IsZero) {
+ constant = BigNum.ZERO;
+ terms = null;
+ } else {
+ for (Term t = terms; t != null; t = t.next) {
+ checked {
+ t.coeff *= x;
+ }
+ }
+ checked {
+ constant *= x;
+ }
+ }
+ }
+
+ public bool IsInvertible(IVariable/*!*/ var) {
+ Contract.Requires(var != null);
+ for (Term t = terms; t != null; t = t.next) {
+ if (t.var == var) {
+ System.Diagnostics.Debug.Assert(!t.coeff.IsZero);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public LinearConstraint ToConstraint(LinearConstraint.ConstraintRelation rel) /* throws ArithmeticException */
+ {
+ LinearConstraint constraint = new LinearConstraint(rel);
+ for (Term t = terms; t != null; t = t.next) {
+ constraint.SetCoefficient(t.var, t.coeff.ToRational);
+ }
+ BigNum rhs = -constant;
+ constraint.rhs = rhs.ToRational;
+ return constraint;
+ }
+ }
+}
diff --git a/Source/AIFramework/Polyhedra/SimplexTableau.cs b/Source/AIFramework/Polyhedra/SimplexTableau.cs
index 4d734c27..347c7c45 100644
--- a/Source/AIFramework/Polyhedra/SimplexTableau.cs
+++ b/Source/AIFramework/Polyhedra/SimplexTableau.cs
@@ -1,630 +1,630 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System.Collections;
- using System;
- using System.Diagnostics.Contracts;
- using Microsoft.Basetypes;
- using IMutableSet = Microsoft.Boogie.GSet<object>;
- using HashSet = Microsoft.Boogie.GSet<object>;
-
-
- /// <summary>
- /// Used by LinearConstraintSystem.GenerateFrameFromConstraints.
- /// </summary>
- public class SimplexTableau {
- readonly int rows;
- readonly int columns;
- readonly Rational[,]/*!*/ m;
-
- readonly int numInitialVars;
- readonly int numSlackVars;
- readonly int rhsColumn;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(m != null);
- Contract.Invariant(inBasis != null);
- Contract.Invariant(basisColumns != null);
- }
-
- readonly ArrayList /*IVariable!*//*!*/ dims;
- readonly int[]/*!*/ basisColumns;
- readonly int[]/*!*/ inBasis;
- bool constructionDone = false;
-
- void CheckInvariant() {
- Contract.Assert(rows == m.GetLength(0));
- Contract.Assert(1 <= columns && columns == m.GetLength(1));
- Contract.Assert(0 <= numInitialVars);
- Contract.Assert(0 <= numSlackVars && numSlackVars <= rows);
- Contract.Assert(numInitialVars + numSlackVars + 1 == columns);
- Contract.Assert(rhsColumn == columns - 1);
- Contract.Assert(dims.Count == numInitialVars);
- Contract.Assert(basisColumns.Length == rows);
- Contract.Assert(inBasis.Length == numInitialVars + numSlackVars);
-
- bool[] b = new bool[numInitialVars + numSlackVars];
- int numColumnsInBasis = 0;
- int numUninitializedRowInfo = 0;
- for (int i = 0; i < rows; i++) {
- int c = basisColumns[i];
- if (c == rhsColumn) {
- // all coefficients in this row are 0 (but the right-hand side may be non-0)
- for (int j = 0; j < rhsColumn; j++) {
- Contract.Assert(m[i, j].IsZero);
- }
- numColumnsInBasis++;
- } else if (c == -1) {
- Contract.Assert(!constructionDone);
- numUninitializedRowInfo++;
- } else {
- // basis column is a column
- Contract.Assert(0 <= c && c < numInitialVars + numSlackVars);
- // basis column is unique
- Contract.Assert(!b[c]);
- b[c] = true;
- // column is marked as being in basis
- Contract.Assert(inBasis[c] == i);
- // basis column really is a basis column
- for (int j = 0; j < rows; j++) {
- if (j == i) {
- Contract.Assert(m[j, c].HasValue(1));// == (Rational)new Rational(1)));
- } else {
- Contract.Assert(m[j, c].IsZero);
- }
- }
- }
- }
- // no other columns are marked as being in basis
- foreach (int i in inBasis) {
- if (0 <= i) {
- Contract.Assert(i < rows);
- numColumnsInBasis++;
- } else {
- Contract.Assert(i == -1);
- }
- }
- Contract.Assert(rows - numUninitializedRowInfo <= numColumnsInBasis && numColumnsInBasis <= rows);
- Contract.Assert(!constructionDone || numUninitializedRowInfo == 0);
- }
-
- /// <summary>
- /// Constructs a matrix that represents the constraints "constraints", adding slack
- /// variables for the inequalities among "constraints". Puts the matrix in canonical
- /// form.
- /// </summary>
- /// <param name="constraints"></param>
- [NotDelayed]
- public SimplexTableau(ArrayList /*LinearConstraint*//*!*/ constraints) {
- Contract.Requires(constraints != null);
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: SimplexTableau constructor called with:");
- foreach (LinearConstraint lc in constraints)
- {
- Console.WriteLine(" {0}", lc);
- }
-#endif
- // Note: This implementation is not particularly efficient, but it'll do for now.
-
- ArrayList dims = this.dims = new ArrayList /*IVariable!*/ ();
- int slacks = 0;
- foreach (LinearConstraint/*!*/ cc in constraints) {
- Contract.Assert(cc != null);
- foreach (IVariable/*!*/ dim in cc.coefficients.Keys) {
- Contract.Assert(dim != null);
- if (!dims.Contains(dim)) {
- dims.Add(dim);
- }
- }
- if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
- slacks++;
- }
- }
-
- int numInitialVars = this.numInitialVars = dims.Count;
- int numSlackVars = this.numSlackVars = slacks;
- int rows = this.rows = constraints.Count;
- int columns = this.columns = numInitialVars + numSlackVars + 1;
- this.m = new Rational[rows, columns];
- this.rhsColumn = columns - 1;
- this.basisColumns = new int[rows];
- this.inBasis = new int[columns - 1];
-
- //:base();
-
- for (int i = 0; i < inBasis.Length; i++) {
- inBasis[i] = -1;
- }
-
- // Fill in the matrix
- int r = 0;
- int iSlack = 0;
- foreach (LinearConstraint/*!*/ cc in constraints) {
- Contract.Assert(cc != null);
- for (int i = 0; i < dims.Count; i++) {
- m[r, i] = cc[(IVariable)cce.NonNull(dims[i])];
- }
- if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
- m[r, numInitialVars + iSlack] = Rational.ONE;
- basisColumns[r] = numInitialVars + iSlack;
- inBasis[numInitialVars + iSlack] = r;
- iSlack++;
- } else {
- basisColumns[r] = -1; // special value to communicate to Pivot that basis column i hasn't been set up yet
- }
- m[r, rhsColumn] = cc.rhs;
- r++;
- }
- Contract.Assert(r == constraints.Count);
- Contract.Assert(iSlack == numSlackVars);
-#if DEBUG_PRINT
- Console.WriteLine("DEBUG: Intermediate tableau state in SimplexTableau constructor:");
- Dump();
-#endif
-
- // Go through the rows with uninitialized basis columns. These correspond to equality constraints.
- // For each one, find an initial variable (non-slack variable) whose column we can make the basis
- // column of the row.
- for (int i = 0; i < rows; i++) {
- if (basisColumns[i] != -1) {
- continue;
- }
- // Find a non-0 column in row i that we can make a basis column. Since rows corresponding
- // to equality constraints don't have slack variables and since the pivot operations performed
- // by iterations of this loop don't introduce any non-0 coefficients in the slack-variable
- // columns of these rows, we only need to look through the columns corresponding to initial
- // variables.
- for (int j = 0; j < numInitialVars; j++) {
- if (m[i, j].IsNonZero) {
-#if DEBUG_PRINT
- Console.WriteLine("-- About to Pivot({0},{1})", i, j);
-#endif
- Contract.Assert(inBasis[j] == -1);
- Pivot(i, j);
-#if DEBUG_PRINT
- Console.WriteLine("Tableau after Pivot:");
- Dump();
-#endif
- goto SET_UP_NEXT_INBASIS_COLUMN;
- }
- }
- // Check the assertion in the comment above, that is, that columns corresponding to slack variables
- // are 0 in this row.
- for (int j = numInitialVars; j < rhsColumn; j++) {
- Contract.Assert(m[i, j].IsZero);
- }
- // There is no column in this row that we can put into basis.
- basisColumns[i] = rhsColumn;
- SET_UP_NEXT_INBASIS_COLUMN: {
- }
- }
-
- constructionDone = true;
- CheckInvariant();
- }
-
- public IMutableSet/*!*/ /*IVariable!*/ GetDimensions() {
- Contract.Ensures(Contract.Result<IMutableSet>() != null);
- HashSet /*IVariable!*/ z = new HashSet /*IVariable!*/ ();
- foreach (IVariable/*!*/ dim in dims) {
- Contract.Assert(dim != null);
- z.Add(dim);
- }
- return z;
- }
-
- public Rational this[int r, int c] {
- get {
- return m[r, c];
- }
- set {
- m[r, c] = value;
- }
- }
-
- /// <summary>
- /// Applies the Pivot Operation on row "r" and column "c".
- ///
- /// This method can be called when !constructionDone, that is, at a time when not all basis
- /// columns have been set up (indicated by -1 in basisColumns). This method helps set up
- /// those basis columns.
- ///
- /// The return value is an undo record that can be used with UnPivot.
- /// </summary>
- /// <param name="r"></param>
- /// <param name="c"></param>
- public Rational[]/*!*/ Pivot(int r, int c) {
- Contract.Ensures(Contract.Result<Rational[]>() != null);
- Contract.Assert(0 <= r && r < rows);
- Contract.Assert(0 <= c && c < columns - 1);
- Contract.Assert(m[r, c].IsNonZero);
- Contract.Assert(inBasis[c] == -1); // follows from invariant and m[r,c] != 0
- Contract.Assert(basisColumns[r] != rhsColumn); // follows from invariant and m[r,c] != 0
-
- Rational[] undo = new Rational[rows + 1];
- for (int i = 0; i < rows; i++) {
- undo[i] = m[i, c];
- }
-
- // scale the pivot row
- Rational q = m[r, c];
- if (q != Rational.ONE) {
- for (int j = 0; j < columns; j++) {
- m[r, j] /= q;
- }
- }
-
- // subtract a multiple of the pivot row from all other rows
- for (int i = 0; i < rows; i++) {
- if (i != r) {
- q = m[i, c];
- if (q.IsNonZero) {
- for (int j = 0; j < columns; j++) {
- m[i, j] -= q * m[r, j];
- }
- }
- }
- }
-
- // update basis information
- int prevCol = basisColumns[r];
- undo[rows] = Rational.FromInt(prevCol);
- basisColumns[r] = c;
- if (prevCol != -1) {
- inBasis[prevCol] = -1;
- }
- inBasis[c] = r;
-
- return undo;
- }
-
- /// <summary>
- /// If the last operation applied to the tableau was:
- /// undo = Pivot(i,j);
- /// then UnPivot(i, j, undo) undoes the pivot operation.
- /// Note: This operation is not supported for any call to Pivot before constructionDone
- /// is set to true.
- /// </summary>
- /// <param name="r"></param>
- /// <param name="c"></param>
- /// <param name="undo"></param>
- void UnPivot(int r, int c, Rational[]/*!*/ undo) {
- Contract.Requires(undo != null);
- Contract.Assert(0 <= r && r < rows);
- Contract.Assert(0 <= c && c < columns - 1);
- Contract.Assert(m[r, c].HasValue(1));
- Contract.Assert(undo.Length == rows + 1);
-
- // add a multiple of the pivot row to all other rows
- for (int i = 0; i < rows; i++) {
- if (i != r) {
- Rational q = undo[i];
- if (q.IsNonZero) {
- for (int j = 0; j < columns; j++) {
- m[i, j] += q * m[r, j];
- }
- }
- }
- }
-
- // scale the pivot row
- Rational p = undo[r];
- for (int j = 0; j < columns; j++) {
- m[r, j] *= p;
- }
-
- // update basis information
- int prevCol = undo[rows].AsInteger;
- Contract.Assert(prevCol != -1);
- basisColumns[r] = prevCol;
- inBasis[c] = -1;
- inBasis[prevCol] = r;
- }
-
- /// <summary>
- /// Returns true iff the current basis of the system of constraints modeled by the simplex tableau
- /// is feasible. May have a side effect of performing a number of pivot operations on the tableau,
- /// but any such pivot operation will be in the columns of slack variables (that is, this routine
- /// does not change the set of initial-variable columns in basis).
- ///
- /// CAVEAT: I have no particular reason to believe that the algorithm used here will terminate. --KRML
- /// </summary>
- /// <returns></returns>
- public bool IsFeasibleBasis {
- get {
- // while there is a slack variable in basis whose row has a negative right-hand side
- while (true) {
- bool feasibleBasis = true;
- for (int c = numInitialVars; c < rhsColumn; c++) {
- int k = inBasis[c];
- if (0 <= k && k < rhsColumn && m[k, rhsColumn].IsNegative) {
- Contract.Assert(m[k, c].HasValue(1)); // c is in basis
- // Try to pivot on a different slack variable in this row
- for (int i = numInitialVars; i < rhsColumn; i++) {
- if (m[k, i].IsNegative) {
- Contract.Assert(c != i); // c is in basis, so m[k,c]==1, which is not negative
- Pivot(k, i);
-#if DEBUG_PRINT
- Console.WriteLine("Tableau after Pivot operation on ({0},{1}) in IsFeasibleBasis:", k, i);
- Dump();
-#endif
- Contract.Assert(inBasis[c] == -1);
- Contract.Assert(inBasis[i] == k);
- Contract.Assert(m[k, rhsColumn].IsNonNegative);
- goto START_ANEW;
- }
- }
- feasibleBasis = false;
- }
- }
- return feasibleBasis;
- START_ANEW:
- ;
- }
- }
- }
-
- /// <summary>
- /// Whether or not all initial variables (the non-slack variables) are in basis)
- /// </summary>
- public bool AllInitialVarsInBasis {
- get {
- for (int i = 0; i < numInitialVars; i++) {
- if (inBasis[i] == -1) {
- return false;
- }
- }
- return true;
- }
- }
-
- /// <summary>
- /// Adds as many initial variables as possible to the basis.
- /// </summary>
- /// <returns></returns>
- public void AddInitialVarsToBasis() {
- // while there exists an initial variable not in the basis and not satisfying
- // condition 3.4.2.2 in Cousot and Halbwachs, perform a pivot operation
- while (true) {
- for (int i = 0; i < numInitialVars; i++) {
- if (inBasis[i] == -1) {
- // initial variable i is not in the basis
- for (int j = 0; j < rows; j++) {
- if (m[j, i].IsNonZero) {
- int k = basisColumns[j];
- if (numInitialVars <= k && k < rhsColumn) {
- // slack variable k is in basis for row j
- Pivot(j, i);
- Contract.Assert(inBasis[k] == -1);
- Contract.Assert(inBasis[i] == j && basisColumns[j] == i);
- goto START_ANEW;
- }
- }
- }
- }
- }
- // No more initial variables can be moved into basis.
- return;
- START_ANEW: {
- }
- }
- }
-
- /// <summary>
- /// Adds to "lines" the lines implied by initial-variable columns not in basis
- /// (see section 3.4.2 of Cousot and Halbwachs), and adds to "constraints" the
- /// constraints to exclude those lines (see step 4.2 of section 3.4.3 of
- /// Cousot and Halbwachs).
- /// </summary>
- /// <param name="lines"></param>
- /// <param name="constraints"></param>
- public void ProduceLines(ArrayList /*FrameElement*//*!*/ lines, ArrayList /*LinearConstraint*//*!*/ constraints) {
- Contract.Requires(constraints != null);
- Contract.Requires(lines != null);
- // for every initial variable not in basis
- for (int i0 = 0; i0 < numInitialVars; i0++) {
- if (inBasis[i0] == -1) {
- FrameElement fe = new FrameElement();
- LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
- for (int i = 0; i < numInitialVars; i++) {
- if (i == i0) {
- fe.AddCoordinate((IVariable)cce.NonNull(dims[i]), Rational.ONE);
- lc.SetCoefficient((IVariable)cce.NonNull(dims[i]), Rational.ONE);
- } else if (inBasis[i] != -1) {
- // i is a basis column
- Contract.Assert(m[inBasis[i], i].HasValue(1));
- Rational val = -m[inBasis[i], i0];
- fe.AddCoordinate((IVariable)cce.NonNull(dims[i]), val);
- lc.SetCoefficient((IVariable)cce.NonNull(dims[i]), val);
- }
- }
- lines.Add(fe);
- constraints.Add(lc);
- }
- }
- }
-
- /// <summary>
- /// From a feasible point where all initial variables are in the basis, traverses
- /// all feasible bases containing all initial variables. For each such basis, adds
- /// the vertices to "vertices" and adds to "rays" the extreme rays. See step 4.2
- /// in section 3.4.3 of Cousot and Halbwachs.
- /// A more efficient algorithm is found in the paper "An algorithm for
- /// determining all extreme points of a convex polytope" by N. E. Dyer and L. G. Proll,
- /// Mathematical Programming, 12, 1977.
- /// Assumes that the tableau is in a state where all initial variables are in the basis.
- /// This method has no net effect on the tableau.
- /// Note: Duplicate vertices and rays may be added.
- /// </summary>
- /// <param name="vertices"></param>
- /// <param name="rays"></param>
- public void TraverseVertices(ArrayList/*!*/ /*FrameElement*/ vertices, ArrayList/*!*/ /*FrameElement*/ rays) {
- Contract.Requires(vertices != null);
- Contract.Requires(rays != null);
- ArrayList /*bool[]*/ basesSeenSoFar = new ArrayList /*bool[]*/ ();
- TraverseBases(basesSeenSoFar, vertices, rays);
- }
-
- /// <summary>
- /// Worker method of TraverseVertices.
- /// This method has no net effect on the tableau.
- /// </summary>
- /// <param name="basesSeenSoFar"></param>
- /// <param name="vertices"></param>
- /// <param name="rays"></param>
- void TraverseBases(ArrayList /*bool[]*//*!*/ basesSeenSoFar, ArrayList /*FrameElement*//*!*/ vertices, ArrayList /*FrameElement*//*!*/ rays) {
- Contract.Requires(rays != null);
- Contract.Requires(vertices != null);
- Contract.Requires(basesSeenSoFar != null);
- CheckInvariant();
-
- bool[] thisBasis = new bool[numSlackVars];
- for (int i = numInitialVars; i < rhsColumn; i++) {
- if (inBasis[i] != -1) {
- thisBasis[i - numInitialVars] = true;
- }
- }
- foreach (bool[]/*!*/ basis in basesSeenSoFar) {
- Contract.Assert(basis != null);
- Contract.Assert(basis.Length == numSlackVars);
- for (int i = 0; i < numSlackVars; i++) {
- if (basis[i] != thisBasis[i]) {
- goto COMPARE_WITH_NEXT_BASIS;
- }
- }
- // thisBasis and basis are the same--that is, basisColumns has been visited before--so
- // we don't traverse anything from here
- return;
- COMPARE_WITH_NEXT_BASIS: {
- }
- }
- // basisColumns has not been seen before; record thisBasis and continue with the traversal here
- basesSeenSoFar.Add(thisBasis);
-
-#if DEBUG_PRINT
- Console.Write("TraverseBases, new basis: ");
- foreach (bool t in thisBasis) {
- Console.Write("{0}", t ? "*" : ".");
- }
- Console.WriteLine();
- Dump();
-#endif
- // Add vertex
- FrameElement v = new FrameElement();
- for (int i = 0; i < rows; i++) {
- int j = basisColumns[i];
- if (j < numInitialVars) {
- v.AddCoordinate((IVariable)cce.NonNull(dims[j]), m[i, rhsColumn]);
- }
- }
-#if DEBUG_PRINT
- Console.WriteLine(" Adding vertex: {0}", v);
-#endif
- vertices.Add(v);
-
- // Add rays. Traverse all columns corresponding to slack variables that
- // are not in basis (see second bullet of section 3.4.2 of Cousot and Halbwachs).
- for (int i0 = numInitialVars; i0 < rhsColumn; i0++) {
- if (inBasis[i0] != -1) {
- // skip those slack-variable columns that are in basis
- continue;
- }
- // check if slack-variable, non-basis column i corresponds to an extreme ray
- for (int row = 0; row < rows; row++) {
- if (m[row, i0].IsPositive) {
- for (int k = numInitialVars; k < rhsColumn; k++) {
- if (inBasis[k] != -1 && m[row, k].IsNonZero) {
- // does not correspond to an extreme ray
- goto CHECK_NEXT_SLACK_VAR;
- }
- }
- }
- }
- // corresponds to an extreme ray
- FrameElement ray = new FrameElement();
- for (int i = 0; i < numInitialVars; i++) {
- int j0 = inBasis[i];
- Rational val = -m[j0, i0];
- ray.AddCoordinate((IVariable)cce.NonNull(dims[i]), val);
- }
-#if DEBUG_PRINT
- Console.WriteLine(" Adding ray: {0}", ray);
-#endif
- rays.Add(ray);
- CHECK_NEXT_SLACK_VAR: {
- }
- }
-
- // Continue traversal
- for (int i = numInitialVars; i < rhsColumn; i++) {
- int j = inBasis[i];
- if (j != -1) {
- // try moving i out of basis and some other slack-variable column into basis
- for (int k = numInitialVars; k < rhsColumn; k++) {
- if (inBasis[k] == -1 && m[j, k].IsPositive) {
- Rational[] undo = Pivot(j, k);
- // check if the new basis is feasible
- for (int p = 0; p < rows; p++) {
- int c = basisColumns[p];
- if (numInitialVars <= c && c < rhsColumn && m[p, rhsColumn].IsNegative) {
- // not feasible
- goto AFTER_TRAVERSE;
- }
- }
- TraverseBases(basesSeenSoFar, vertices, rays);
- AFTER_TRAVERSE:
- UnPivot(j, k, undo);
- }
- }
- }
- }
- }
-
- public void Dump() {
- // names
- Console.Write(" ");
- for (int i = 0; i < numInitialVars; i++) {
- Console.Write(" {0,4} ", dims[i]);
- }
- Console.WriteLine();
- // numbers
- Console.Write(" ");
- for (int i = 0; i < columns; i++) {
- if (i == numInitialVars || i == rhsColumn) {
- Console.Write("|");
- }
- Console.Write(" {0,4}", i);
- if (i < rhsColumn && inBasis[i] != -1) {
- Console.Write("* ");
- Contract.Assert(basisColumns[inBasis[i]] == i);
- } else {
- Console.Write(" ");
- }
- }
- Console.WriteLine();
- // line
- Console.Write(" ");
- for (int i = 0; i < columns; i++) {
- if (i == numInitialVars || i == rhsColumn) {
- Console.Write("+");
- }
- Console.Write("---------");
- }
- Console.WriteLine();
-
- for (int j = 0; j < rows; j++) {
- Console.Write("{0,4}: ", basisColumns[j]);
- for (int i = 0; i < columns; i++) {
- if (i == numInitialVars || i == rhsColumn) {
- Console.Write("|");
- }
- Console.Write(" {0,4:n1} ", m[j, i]);
- }
- Console.WriteLine();
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System.Collections;
+ using System;
+ using System.Diagnostics.Contracts;
+ using Microsoft.Basetypes;
+ using IMutableSet = Microsoft.Boogie.GSet<object>;
+ using HashSet = Microsoft.Boogie.GSet<object>;
+
+
+ /// <summary>
+ /// Used by LinearConstraintSystem.GenerateFrameFromConstraints.
+ /// </summary>
+ public class SimplexTableau {
+ readonly int rows;
+ readonly int columns;
+ readonly Rational[,]/*!*/ m;
+
+ readonly int numInitialVars;
+ readonly int numSlackVars;
+ readonly int rhsColumn;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(m != null);
+ Contract.Invariant(inBasis != null);
+ Contract.Invariant(basisColumns != null);
+ }
+
+ readonly ArrayList /*IVariable!*//*!*/ dims;
+ readonly int[]/*!*/ basisColumns;
+ readonly int[]/*!*/ inBasis;
+ bool constructionDone = false;
+
+ void CheckInvariant() {
+ Contract.Assert(rows == m.GetLength(0));
+ Contract.Assert(1 <= columns && columns == m.GetLength(1));
+ Contract.Assert(0 <= numInitialVars);
+ Contract.Assert(0 <= numSlackVars && numSlackVars <= rows);
+ Contract.Assert(numInitialVars + numSlackVars + 1 == columns);
+ Contract.Assert(rhsColumn == columns - 1);
+ Contract.Assert(dims.Count == numInitialVars);
+ Contract.Assert(basisColumns.Length == rows);
+ Contract.Assert(inBasis.Length == numInitialVars + numSlackVars);
+
+ bool[] b = new bool[numInitialVars + numSlackVars];
+ int numColumnsInBasis = 0;
+ int numUninitializedRowInfo = 0;
+ for (int i = 0; i < rows; i++) {
+ int c = basisColumns[i];
+ if (c == rhsColumn) {
+ // all coefficients in this row are 0 (but the right-hand side may be non-0)
+ for (int j = 0; j < rhsColumn; j++) {
+ Contract.Assert(m[i, j].IsZero);
+ }
+ numColumnsInBasis++;
+ } else if (c == -1) {
+ Contract.Assert(!constructionDone);
+ numUninitializedRowInfo++;
+ } else {
+ // basis column is a column
+ Contract.Assert(0 <= c && c < numInitialVars + numSlackVars);
+ // basis column is unique
+ Contract.Assert(!b[c]);
+ b[c] = true;
+ // column is marked as being in basis
+ Contract.Assert(inBasis[c] == i);
+ // basis column really is a basis column
+ for (int j = 0; j < rows; j++) {
+ if (j == i) {
+ Contract.Assert(m[j, c].HasValue(1));// == (Rational)new Rational(1)));
+ } else {
+ Contract.Assert(m[j, c].IsZero);
+ }
+ }
+ }
+ }
+ // no other columns are marked as being in basis
+ foreach (int i in inBasis) {
+ if (0 <= i) {
+ Contract.Assert(i < rows);
+ numColumnsInBasis++;
+ } else {
+ Contract.Assert(i == -1);
+ }
+ }
+ Contract.Assert(rows - numUninitializedRowInfo <= numColumnsInBasis && numColumnsInBasis <= rows);
+ Contract.Assert(!constructionDone || numUninitializedRowInfo == 0);
+ }
+
+ /// <summary>
+ /// Constructs a matrix that represents the constraints "constraints", adding slack
+ /// variables for the inequalities among "constraints". Puts the matrix in canonical
+ /// form.
+ /// </summary>
+ /// <param name="constraints"></param>
+ [NotDelayed]
+ public SimplexTableau(ArrayList /*LinearConstraint*//*!*/ constraints) {
+ Contract.Requires(constraints != null);
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: SimplexTableau constructor called with:");
+ foreach (LinearConstraint lc in constraints)
+ {
+ Console.WriteLine(" {0}", lc);
+ }
+#endif
+ // Note: This implementation is not particularly efficient, but it'll do for now.
+
+ ArrayList dims = this.dims = new ArrayList /*IVariable!*/ ();
+ int slacks = 0;
+ foreach (LinearConstraint/*!*/ cc in constraints) {
+ Contract.Assert(cc != null);
+ foreach (IVariable/*!*/ dim in cc.coefficients.Keys) {
+ Contract.Assert(dim != null);
+ if (!dims.Contains(dim)) {
+ dims.Add(dim);
+ }
+ }
+ if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
+ slacks++;
+ }
+ }
+
+ int numInitialVars = this.numInitialVars = dims.Count;
+ int numSlackVars = this.numSlackVars = slacks;
+ int rows = this.rows = constraints.Count;
+ int columns = this.columns = numInitialVars + numSlackVars + 1;
+ this.m = new Rational[rows, columns];
+ this.rhsColumn = columns - 1;
+ this.basisColumns = new int[rows];
+ this.inBasis = new int[columns - 1];
+
+ //:base();
+
+ for (int i = 0; i < inBasis.Length; i++) {
+ inBasis[i] = -1;
+ }
+
+ // Fill in the matrix
+ int r = 0;
+ int iSlack = 0;
+ foreach (LinearConstraint/*!*/ cc in constraints) {
+ Contract.Assert(cc != null);
+ for (int i = 0; i < dims.Count; i++) {
+ m[r, i] = cc[(IVariable)cce.NonNull(dims[i])];
+ }
+ if (cc.Relation == LinearConstraint.ConstraintRelation.LE) {
+ m[r, numInitialVars + iSlack] = Rational.ONE;
+ basisColumns[r] = numInitialVars + iSlack;
+ inBasis[numInitialVars + iSlack] = r;
+ iSlack++;
+ } else {
+ basisColumns[r] = -1; // special value to communicate to Pivot that basis column i hasn't been set up yet
+ }
+ m[r, rhsColumn] = cc.rhs;
+ r++;
+ }
+ Contract.Assert(r == constraints.Count);
+ Contract.Assert(iSlack == numSlackVars);
+#if DEBUG_PRINT
+ Console.WriteLine("DEBUG: Intermediate tableau state in SimplexTableau constructor:");
+ Dump();
+#endif
+
+ // Go through the rows with uninitialized basis columns. These correspond to equality constraints.
+ // For each one, find an initial variable (non-slack variable) whose column we can make the basis
+ // column of the row.
+ for (int i = 0; i < rows; i++) {
+ if (basisColumns[i] != -1) {
+ continue;
+ }
+ // Find a non-0 column in row i that we can make a basis column. Since rows corresponding
+ // to equality constraints don't have slack variables and since the pivot operations performed
+ // by iterations of this loop don't introduce any non-0 coefficients in the slack-variable
+ // columns of these rows, we only need to look through the columns corresponding to initial
+ // variables.
+ for (int j = 0; j < numInitialVars; j++) {
+ if (m[i, j].IsNonZero) {
+#if DEBUG_PRINT
+ Console.WriteLine("-- About to Pivot({0},{1})", i, j);
+#endif
+ Contract.Assert(inBasis[j] == -1);
+ Pivot(i, j);
+#if DEBUG_PRINT
+ Console.WriteLine("Tableau after Pivot:");
+ Dump();
+#endif
+ goto SET_UP_NEXT_INBASIS_COLUMN;
+ }
+ }
+ // Check the assertion in the comment above, that is, that columns corresponding to slack variables
+ // are 0 in this row.
+ for (int j = numInitialVars; j < rhsColumn; j++) {
+ Contract.Assert(m[i, j].IsZero);
+ }
+ // There is no column in this row that we can put into basis.
+ basisColumns[i] = rhsColumn;
+ SET_UP_NEXT_INBASIS_COLUMN: {
+ }
+ }
+
+ constructionDone = true;
+ CheckInvariant();
+ }
+
+ public IMutableSet/*!*/ /*IVariable!*/ GetDimensions() {
+ Contract.Ensures(Contract.Result<IMutableSet>() != null);
+ HashSet /*IVariable!*/ z = new HashSet /*IVariable!*/ ();
+ foreach (IVariable/*!*/ dim in dims) {
+ Contract.Assert(dim != null);
+ z.Add(dim);
+ }
+ return z;
+ }
+
+ public Rational this[int r, int c] {
+ get {
+ return m[r, c];
+ }
+ set {
+ m[r, c] = value;
+ }
+ }
+
+ /// <summary>
+ /// Applies the Pivot Operation on row "r" and column "c".
+ ///
+ /// This method can be called when !constructionDone, that is, at a time when not all basis
+ /// columns have been set up (indicated by -1 in basisColumns). This method helps set up
+ /// those basis columns.
+ ///
+ /// The return value is an undo record that can be used with UnPivot.
+ /// </summary>
+ /// <param name="r"></param>
+ /// <param name="c"></param>
+ public Rational[]/*!*/ Pivot(int r, int c) {
+ Contract.Ensures(Contract.Result<Rational[]>() != null);
+ Contract.Assert(0 <= r && r < rows);
+ Contract.Assert(0 <= c && c < columns - 1);
+ Contract.Assert(m[r, c].IsNonZero);
+ Contract.Assert(inBasis[c] == -1); // follows from invariant and m[r,c] != 0
+ Contract.Assert(basisColumns[r] != rhsColumn); // follows from invariant and m[r,c] != 0
+
+ Rational[] undo = new Rational[rows + 1];
+ for (int i = 0; i < rows; i++) {
+ undo[i] = m[i, c];
+ }
+
+ // scale the pivot row
+ Rational q = m[r, c];
+ if (q != Rational.ONE) {
+ for (int j = 0; j < columns; j++) {
+ m[r, j] /= q;
+ }
+ }
+
+ // subtract a multiple of the pivot row from all other rows
+ for (int i = 0; i < rows; i++) {
+ if (i != r) {
+ q = m[i, c];
+ if (q.IsNonZero) {
+ for (int j = 0; j < columns; j++) {
+ m[i, j] -= q * m[r, j];
+ }
+ }
+ }
+ }
+
+ // update basis information
+ int prevCol = basisColumns[r];
+ undo[rows] = Rational.FromInt(prevCol);
+ basisColumns[r] = c;
+ if (prevCol != -1) {
+ inBasis[prevCol] = -1;
+ }
+ inBasis[c] = r;
+
+ return undo;
+ }
+
+ /// <summary>
+ /// If the last operation applied to the tableau was:
+ /// undo = Pivot(i,j);
+ /// then UnPivot(i, j, undo) undoes the pivot operation.
+ /// Note: This operation is not supported for any call to Pivot before constructionDone
+ /// is set to true.
+ /// </summary>
+ /// <param name="r"></param>
+ /// <param name="c"></param>
+ /// <param name="undo"></param>
+ void UnPivot(int r, int c, Rational[]/*!*/ undo) {
+ Contract.Requires(undo != null);
+ Contract.Assert(0 <= r && r < rows);
+ Contract.Assert(0 <= c && c < columns - 1);
+ Contract.Assert(m[r, c].HasValue(1));
+ Contract.Assert(undo.Length == rows + 1);
+
+ // add a multiple of the pivot row to all other rows
+ for (int i = 0; i < rows; i++) {
+ if (i != r) {
+ Rational q = undo[i];
+ if (q.IsNonZero) {
+ for (int j = 0; j < columns; j++) {
+ m[i, j] += q * m[r, j];
+ }
+ }
+ }
+ }
+
+ // scale the pivot row
+ Rational p = undo[r];
+ for (int j = 0; j < columns; j++) {
+ m[r, j] *= p;
+ }
+
+ // update basis information
+ int prevCol = undo[rows].AsInteger;
+ Contract.Assert(prevCol != -1);
+ basisColumns[r] = prevCol;
+ inBasis[c] = -1;
+ inBasis[prevCol] = r;
+ }
+
+ /// <summary>
+ /// Returns true iff the current basis of the system of constraints modeled by the simplex tableau
+ /// is feasible. May have a side effect of performing a number of pivot operations on the tableau,
+ /// but any such pivot operation will be in the columns of slack variables (that is, this routine
+ /// does not change the set of initial-variable columns in basis).
+ ///
+ /// CAVEAT: I have no particular reason to believe that the algorithm used here will terminate. --KRML
+ /// </summary>
+ /// <returns></returns>
+ public bool IsFeasibleBasis {
+ get {
+ // while there is a slack variable in basis whose row has a negative right-hand side
+ while (true) {
+ bool feasibleBasis = true;
+ for (int c = numInitialVars; c < rhsColumn; c++) {
+ int k = inBasis[c];
+ if (0 <= k && k < rhsColumn && m[k, rhsColumn].IsNegative) {
+ Contract.Assert(m[k, c].HasValue(1)); // c is in basis
+ // Try to pivot on a different slack variable in this row
+ for (int i = numInitialVars; i < rhsColumn; i++) {
+ if (m[k, i].IsNegative) {
+ Contract.Assert(c != i); // c is in basis, so m[k,c]==1, which is not negative
+ Pivot(k, i);
+#if DEBUG_PRINT
+ Console.WriteLine("Tableau after Pivot operation on ({0},{1}) in IsFeasibleBasis:", k, i);
+ Dump();
+#endif
+ Contract.Assert(inBasis[c] == -1);
+ Contract.Assert(inBasis[i] == k);
+ Contract.Assert(m[k, rhsColumn].IsNonNegative);
+ goto START_ANEW;
+ }
+ }
+ feasibleBasis = false;
+ }
+ }
+ return feasibleBasis;
+ START_ANEW:
+ ;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Whether or not all initial variables (the non-slack variables) are in basis)
+ /// </summary>
+ public bool AllInitialVarsInBasis {
+ get {
+ for (int i = 0; i < numInitialVars; i++) {
+ if (inBasis[i] == -1) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ /// <summary>
+ /// Adds as many initial variables as possible to the basis.
+ /// </summary>
+ /// <returns></returns>
+ public void AddInitialVarsToBasis() {
+ // while there exists an initial variable not in the basis and not satisfying
+ // condition 3.4.2.2 in Cousot and Halbwachs, perform a pivot operation
+ while (true) {
+ for (int i = 0; i < numInitialVars; i++) {
+ if (inBasis[i] == -1) {
+ // initial variable i is not in the basis
+ for (int j = 0; j < rows; j++) {
+ if (m[j, i].IsNonZero) {
+ int k = basisColumns[j];
+ if (numInitialVars <= k && k < rhsColumn) {
+ // slack variable k is in basis for row j
+ Pivot(j, i);
+ Contract.Assert(inBasis[k] == -1);
+ Contract.Assert(inBasis[i] == j && basisColumns[j] == i);
+ goto START_ANEW;
+ }
+ }
+ }
+ }
+ }
+ // No more initial variables can be moved into basis.
+ return;
+ START_ANEW: {
+ }
+ }
+ }
+
+ /// <summary>
+ /// Adds to "lines" the lines implied by initial-variable columns not in basis
+ /// (see section 3.4.2 of Cousot and Halbwachs), and adds to "constraints" the
+ /// constraints to exclude those lines (see step 4.2 of section 3.4.3 of
+ /// Cousot and Halbwachs).
+ /// </summary>
+ /// <param name="lines"></param>
+ /// <param name="constraints"></param>
+ public void ProduceLines(ArrayList /*FrameElement*//*!*/ lines, ArrayList /*LinearConstraint*//*!*/ constraints) {
+ Contract.Requires(constraints != null);
+ Contract.Requires(lines != null);
+ // for every initial variable not in basis
+ for (int i0 = 0; i0 < numInitialVars; i0++) {
+ if (inBasis[i0] == -1) {
+ FrameElement fe = new FrameElement();
+ LinearConstraint lc = new LinearConstraint(LinearConstraint.ConstraintRelation.EQ);
+ for (int i = 0; i < numInitialVars; i++) {
+ if (i == i0) {
+ fe.AddCoordinate((IVariable)cce.NonNull(dims[i]), Rational.ONE);
+ lc.SetCoefficient((IVariable)cce.NonNull(dims[i]), Rational.ONE);
+ } else if (inBasis[i] != -1) {
+ // i is a basis column
+ Contract.Assert(m[inBasis[i], i].HasValue(1));
+ Rational val = -m[inBasis[i], i0];
+ fe.AddCoordinate((IVariable)cce.NonNull(dims[i]), val);
+ lc.SetCoefficient((IVariable)cce.NonNull(dims[i]), val);
+ }
+ }
+ lines.Add(fe);
+ constraints.Add(lc);
+ }
+ }
+ }
+
+ /// <summary>
+ /// From a feasible point where all initial variables are in the basis, traverses
+ /// all feasible bases containing all initial variables. For each such basis, adds
+ /// the vertices to "vertices" and adds to "rays" the extreme rays. See step 4.2
+ /// in section 3.4.3 of Cousot and Halbwachs.
+ /// A more efficient algorithm is found in the paper "An algorithm for
+ /// determining all extreme points of a convex polytope" by N. E. Dyer and L. G. Proll,
+ /// Mathematical Programming, 12, 1977.
+ /// Assumes that the tableau is in a state where all initial variables are in the basis.
+ /// This method has no net effect on the tableau.
+ /// Note: Duplicate vertices and rays may be added.
+ /// </summary>
+ /// <param name="vertices"></param>
+ /// <param name="rays"></param>
+ public void TraverseVertices(ArrayList/*!*/ /*FrameElement*/ vertices, ArrayList/*!*/ /*FrameElement*/ rays) {
+ Contract.Requires(vertices != null);
+ Contract.Requires(rays != null);
+ ArrayList /*bool[]*/ basesSeenSoFar = new ArrayList /*bool[]*/ ();
+ TraverseBases(basesSeenSoFar, vertices, rays);
+ }
+
+ /// <summary>
+ /// Worker method of TraverseVertices.
+ /// This method has no net effect on the tableau.
+ /// </summary>
+ /// <param name="basesSeenSoFar"></param>
+ /// <param name="vertices"></param>
+ /// <param name="rays"></param>
+ void TraverseBases(ArrayList /*bool[]*//*!*/ basesSeenSoFar, ArrayList /*FrameElement*//*!*/ vertices, ArrayList /*FrameElement*//*!*/ rays) {
+ Contract.Requires(rays != null);
+ Contract.Requires(vertices != null);
+ Contract.Requires(basesSeenSoFar != null);
+ CheckInvariant();
+
+ bool[] thisBasis = new bool[numSlackVars];
+ for (int i = numInitialVars; i < rhsColumn; i++) {
+ if (inBasis[i] != -1) {
+ thisBasis[i - numInitialVars] = true;
+ }
+ }
+ foreach (bool[]/*!*/ basis in basesSeenSoFar) {
+ Contract.Assert(basis != null);
+ Contract.Assert(basis.Length == numSlackVars);
+ for (int i = 0; i < numSlackVars; i++) {
+ if (basis[i] != thisBasis[i]) {
+ goto COMPARE_WITH_NEXT_BASIS;
+ }
+ }
+ // thisBasis and basis are the same--that is, basisColumns has been visited before--so
+ // we don't traverse anything from here
+ return;
+ COMPARE_WITH_NEXT_BASIS: {
+ }
+ }
+ // basisColumns has not been seen before; record thisBasis and continue with the traversal here
+ basesSeenSoFar.Add(thisBasis);
+
+#if DEBUG_PRINT
+ Console.Write("TraverseBases, new basis: ");
+ foreach (bool t in thisBasis) {
+ Console.Write("{0}", t ? "*" : ".");
+ }
+ Console.WriteLine();
+ Dump();
+#endif
+ // Add vertex
+ FrameElement v = new FrameElement();
+ for (int i = 0; i < rows; i++) {
+ int j = basisColumns[i];
+ if (j < numInitialVars) {
+ v.AddCoordinate((IVariable)cce.NonNull(dims[j]), m[i, rhsColumn]);
+ }
+ }
+#if DEBUG_PRINT
+ Console.WriteLine(" Adding vertex: {0}", v);
+#endif
+ vertices.Add(v);
+
+ // Add rays. Traverse all columns corresponding to slack variables that
+ // are not in basis (see second bullet of section 3.4.2 of Cousot and Halbwachs).
+ for (int i0 = numInitialVars; i0 < rhsColumn; i0++) {
+ if (inBasis[i0] != -1) {
+ // skip those slack-variable columns that are in basis
+ continue;
+ }
+ // check if slack-variable, non-basis column i corresponds to an extreme ray
+ for (int row = 0; row < rows; row++) {
+ if (m[row, i0].IsPositive) {
+ for (int k = numInitialVars; k < rhsColumn; k++) {
+ if (inBasis[k] != -1 && m[row, k].IsNonZero) {
+ // does not correspond to an extreme ray
+ goto CHECK_NEXT_SLACK_VAR;
+ }
+ }
+ }
+ }
+ // corresponds to an extreme ray
+ FrameElement ray = new FrameElement();
+ for (int i = 0; i < numInitialVars; i++) {
+ int j0 = inBasis[i];
+ Rational val = -m[j0, i0];
+ ray.AddCoordinate((IVariable)cce.NonNull(dims[i]), val);
+ }
+#if DEBUG_PRINT
+ Console.WriteLine(" Adding ray: {0}", ray);
+#endif
+ rays.Add(ray);
+ CHECK_NEXT_SLACK_VAR: {
+ }
+ }
+
+ // Continue traversal
+ for (int i = numInitialVars; i < rhsColumn; i++) {
+ int j = inBasis[i];
+ if (j != -1) {
+ // try moving i out of basis and some other slack-variable column into basis
+ for (int k = numInitialVars; k < rhsColumn; k++) {
+ if (inBasis[k] == -1 && m[j, k].IsPositive) {
+ Rational[] undo = Pivot(j, k);
+ // check if the new basis is feasible
+ for (int p = 0; p < rows; p++) {
+ int c = basisColumns[p];
+ if (numInitialVars <= c && c < rhsColumn && m[p, rhsColumn].IsNegative) {
+ // not feasible
+ goto AFTER_TRAVERSE;
+ }
+ }
+ TraverseBases(basesSeenSoFar, vertices, rays);
+ AFTER_TRAVERSE:
+ UnPivot(j, k, undo);
+ }
+ }
+ }
+ }
+ }
+
+ public void Dump() {
+ // names
+ Console.Write(" ");
+ for (int i = 0; i < numInitialVars; i++) {
+ Console.Write(" {0,4} ", dims[i]);
+ }
+ Console.WriteLine();
+ // numbers
+ Console.Write(" ");
+ for (int i = 0; i < columns; i++) {
+ if (i == numInitialVars || i == rhsColumn) {
+ Console.Write("|");
+ }
+ Console.Write(" {0,4}", i);
+ if (i < rhsColumn && inBasis[i] != -1) {
+ Console.Write("* ");
+ Contract.Assert(basisColumns[inBasis[i]] == i);
+ } else {
+ Console.Write(" ");
+ }
+ }
+ Console.WriteLine();
+ // line
+ Console.Write(" ");
+ for (int i = 0; i < columns; i++) {
+ if (i == numInitialVars || i == rhsColumn) {
+ Console.Write("+");
+ }
+ Console.Write("---------");
+ }
+ Console.WriteLine();
+
+ for (int j = 0; j < rows; j++) {
+ Console.Write("{0,4}: ", basisColumns[j]);
+ for (int i = 0; i < columns; i++) {
+ if (i == numInitialVars || i == rhsColumn) {
+ Console.Write("|");
+ }
+ Console.Write(" {0,4:n1} ", m[j, i]);
+ }
+ Console.WriteLine();
+ }
+ }
+ }
+}
diff --git a/Source/AIFramework/VariableMap/ConstantAbstraction.cs b/Source/AIFramework/VariableMap/ConstantAbstraction.cs
index d8f17a3c..d73fc28b 100644
--- a/Source/AIFramework/VariableMap/ConstantAbstraction.cs
+++ b/Source/AIFramework/VariableMap/ConstantAbstraction.cs
@@ -1,251 +1,251 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System.Diagnostics.Contracts;
-namespace Microsoft.AbstractInterpretationFramework {
- using System.Collections;
- using System.Diagnostics;
- //using System.Compiler.Analysis;
- using Microsoft.Basetypes;
-
- /// <summary>
- /// Represents an invariant over constant variable assignments.
- /// </summary>
- public class ConstantLattice : MicroLattice {
- enum Value {
- Top,
- Bottom,
- Constant
- }
-
- private class Elt : Element {
- public Value domainValue;
- public BigNum constantValue; // valid iff domainValue == Value.Constant
-
- public Elt(Value v) {
- this.domainValue = v;
- }
-
- public Elt(BigNum i) {
- this.domainValue = Value.Constant;
- this.constantValue = i;
- }
-
- public bool IsConstant {
- get {
- return this.domainValue == Value.Constant;
- }
- }
-
- public BigNum Constant {
- get {
- return this.constantValue;
- }
- } // only when IsConstant
-
- [Pure]
- public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
- return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
- }
-
- public override Element/*!*/ Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- if (this.IsConstant)
- return new Elt(constantValue);
- else
- return new Elt(domainValue);
- }
- }
-
- readonly IIntExprFactory/*!*/ factory;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(factory != null);
- }
-
-
- public ConstantLattice(IIntExprFactory/*!*/ factory) {
- Contract.Requires(factory != null);
- this.factory = factory;
- // base();
- }
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(Value.Top);
- }
- }
-
- public override Element/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(Value.Bottom);
- }
- }
-
- public override bool IsTop(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- return e.domainValue == Value.Top;
- }
-
- public override bool IsBottom(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- return e.domainValue == Value.Bottom;
- }
-
- public override Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- Debug.Assert(a.domainValue == Value.Constant && b.domainValue == Value.Constant);
- return (a.constantValue.Equals(b.constantValue)) ? a : (Elt)Top;
- }
-
- public override Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- Debug.Assert(a.domainValue == Value.Constant && b.domainValue == Value.Constant);
- return (a.constantValue.Equals(b.constantValue)) ? a : (Elt)Bottom;
- }
-
- public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return Join(first, second);
- }
-
- protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
- {
- //Contract.Requires(first!= null);
- //Contract.Requires(second != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- return a.Constant.Equals(b.Constant);
- }
-
- public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
- //Contract.Requires(element != null);
- //Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- return factory.Eq(var, cce.NonNull(GetFoldExpr(element)));
- }
-
- public override IExpr GetFoldExpr(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- Contract.Assert(e.domainValue == Value.Constant);
- return factory.Const(e.constantValue);
- }
-
- public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- return f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
- }
-
- public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ e) {
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
-
- IFunApp nary = e as IFunApp;
- if (nary != null) {
- if (nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq)) {
- IList/*<IExpr!>*//*!*/ args = nary.Arguments;
- Contract.Assert(args != null);
- Contract.Assert(args.Count == 2);
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
-
- // Look for "x == const" or "const == x".
- try {
- if (arg0 is IVariable) {
- BigNum z;
- if (Fold(arg1, out z)) {
- return new Elt(z);
- }
- } else if (arg1 is IVariable) {
- BigNum z;
- if (Fold(arg0, out z)) {
- return new Elt(z);
- }
- }
- } catch (System.ArithmeticException) {
- // fall through and return Top. (Note, an alternative design may
- // consider returning Bottom.)
- }
- }
- }
- return Top;
- }
-
- /// <summary>
- /// Returns true if "expr" represents a constant integer expressions, in which case
- /// "z" returns as that integer. Otherwise, returns false, in which case "z" should
- /// not be used by the caller.
- ///
- /// This method throws an System.ArithmeticException in the event that folding the
- /// constant expression results in an arithmetic overflow or division by zero.
- /// </summary>
- private bool Fold(IExpr/*!*/ expr, out BigNum z) {
- Contract.Requires(expr != null);
- IFunApp e = expr as IFunApp;
- if (e == null) {
- z = BigNum.ZERO;
- return false;
- }
-
- if (e.FunctionSymbol is IntSymbol) {
- z = ((IntSymbol)e.FunctionSymbol).Value;
- return true;
-
- } else if (e.FunctionSymbol.Equals(Int.Negate)) {
- IList/*<IExpr!>*//*!*/ args = e.Arguments;
- Contract.Assert(args != null);
- Contract.Assert(args.Count == 1);
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
-
- if (Fold(arg0, out z)) {
- z = z.Neg;
- return true;
- }
-
- } else if (e.Arguments.Count == 2) {
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(e.Arguments[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(e.Arguments[1]);
- BigNum z0, z1;
- if (Fold(arg0, out z0) && Fold(arg1, out z1)) {
- if (e.FunctionSymbol.Equals(Int.Add)) {
- z = z0 + z1;
- } else if (e.FunctionSymbol.Equals(Int.Sub)) {
- z = z0 - z1;
- } else if (e.FunctionSymbol.Equals(Int.Mul)) {
- z = z0 * z1;
- } else if (e.FunctionSymbol.Equals(Int.Div)) {
- z = z0 / z1;
- } else if (e.FunctionSymbol.Equals(Int.Mod)) {
- z = z0 % z1;
- } else {
- z = BigNum.ZERO;
- return false;
- }
- return true;
- }
- }
-
- z = BigNum.ZERO;
- return false;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System.Diagnostics.Contracts;
+namespace Microsoft.AbstractInterpretationFramework {
+ using System.Collections;
+ using System.Diagnostics;
+ //using System.Compiler.Analysis;
+ using Microsoft.Basetypes;
+
+ /// <summary>
+ /// Represents an invariant over constant variable assignments.
+ /// </summary>
+ public class ConstantLattice : MicroLattice {
+ enum Value {
+ Top,
+ Bottom,
+ Constant
+ }
+
+ private class Elt : Element {
+ public Value domainValue;
+ public BigNum constantValue; // valid iff domainValue == Value.Constant
+
+ public Elt(Value v) {
+ this.domainValue = v;
+ }
+
+ public Elt(BigNum i) {
+ this.domainValue = Value.Constant;
+ this.constantValue = i;
+ }
+
+ public bool IsConstant {
+ get {
+ return this.domainValue == Value.Constant;
+ }
+ }
+
+ public BigNum Constant {
+ get {
+ return this.constantValue;
+ }
+ } // only when IsConstant
+
+ [Pure]
+ public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
+ return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
+ }
+
+ public override Element/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ if (this.IsConstant)
+ return new Elt(constantValue);
+ else
+ return new Elt(domainValue);
+ }
+ }
+
+ readonly IIntExprFactory/*!*/ factory;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(factory != null);
+ }
+
+
+ public ConstantLattice(IIntExprFactory/*!*/ factory) {
+ Contract.Requires(factory != null);
+ this.factory = factory;
+ // base();
+ }
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(Value.Top);
+ }
+ }
+
+ public override Element/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(Value.Bottom);
+ }
+ }
+
+ public override bool IsTop(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ return e.domainValue == Value.Top;
+ }
+
+ public override bool IsBottom(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ return e.domainValue == Value.Bottom;
+ }
+
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ Debug.Assert(a.domainValue == Value.Constant && b.domainValue == Value.Constant);
+ return (a.constantValue.Equals(b.constantValue)) ? a : (Elt)Top;
+ }
+
+ public override Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ Debug.Assert(a.domainValue == Value.Constant && b.domainValue == Value.Constant);
+ return (a.constantValue.Equals(b.constantValue)) ? a : (Elt)Bottom;
+ }
+
+ public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Join(first, second);
+ }
+
+ protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
+ {
+ //Contract.Requires(first!= null);
+ //Contract.Requires(second != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ return a.Constant.Equals(b.Constant);
+ }
+
+ public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ //Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ return factory.Eq(var, cce.NonNull(GetFoldExpr(element)));
+ }
+
+ public override IExpr GetFoldExpr(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ Contract.Assert(e.domainValue == Value.Constant);
+ return factory.Const(e.constantValue);
+ }
+
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ return f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
+ }
+
+ public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ e) {
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+
+ IFunApp nary = e as IFunApp;
+ if (nary != null) {
+ if (nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq)) {
+ IList/*<IExpr!>*//*!*/ args = nary.Arguments;
+ Contract.Assert(args != null);
+ Contract.Assert(args.Count == 2);
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
+
+ // Look for "x == const" or "const == x".
+ try {
+ if (arg0 is IVariable) {
+ BigNum z;
+ if (Fold(arg1, out z)) {
+ return new Elt(z);
+ }
+ } else if (arg1 is IVariable) {
+ BigNum z;
+ if (Fold(arg0, out z)) {
+ return new Elt(z);
+ }
+ }
+ } catch (System.ArithmeticException) {
+ // fall through and return Top. (Note, an alternative design may
+ // consider returning Bottom.)
+ }
+ }
+ }
+ return Top;
+ }
+
+ /// <summary>
+ /// Returns true if "expr" represents a constant integer expressions, in which case
+ /// "z" returns as that integer. Otherwise, returns false, in which case "z" should
+ /// not be used by the caller.
+ ///
+ /// This method throws an System.ArithmeticException in the event that folding the
+ /// constant expression results in an arithmetic overflow or division by zero.
+ /// </summary>
+ private bool Fold(IExpr/*!*/ expr, out BigNum z) {
+ Contract.Requires(expr != null);
+ IFunApp e = expr as IFunApp;
+ if (e == null) {
+ z = BigNum.ZERO;
+ return false;
+ }
+
+ if (e.FunctionSymbol is IntSymbol) {
+ z = ((IntSymbol)e.FunctionSymbol).Value;
+ return true;
+
+ } else if (e.FunctionSymbol.Equals(Int.Negate)) {
+ IList/*<IExpr!>*//*!*/ args = e.Arguments;
+ Contract.Assert(args != null);
+ Contract.Assert(args.Count == 1);
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
+
+ if (Fold(arg0, out z)) {
+ z = z.Neg;
+ return true;
+ }
+
+ } else if (e.Arguments.Count == 2) {
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(e.Arguments[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(e.Arguments[1]);
+ BigNum z0, z1;
+ if (Fold(arg0, out z0) && Fold(arg1, out z1)) {
+ if (e.FunctionSymbol.Equals(Int.Add)) {
+ z = z0 + z1;
+ } else if (e.FunctionSymbol.Equals(Int.Sub)) {
+ z = z0 - z1;
+ } else if (e.FunctionSymbol.Equals(Int.Mul)) {
+ z = z0 * z1;
+ } else if (e.FunctionSymbol.Equals(Int.Div)) {
+ z = z0 / z1;
+ } else if (e.FunctionSymbol.Equals(Int.Mod)) {
+ z = z0 % z1;
+ } else {
+ z = BigNum.ZERO;
+ return false;
+ }
+ return true;
+ }
+ }
+
+ z = BigNum.ZERO;
+ return false;
+ }
+ }
+}
diff --git a/Source/AIFramework/VariableMap/ConstantExpressions.cs b/Source/AIFramework/VariableMap/ConstantExpressions.cs
index fcf49b25..185c700e 100644
--- a/Source/AIFramework/VariableMap/ConstantExpressions.cs
+++ b/Source/AIFramework/VariableMap/ConstantExpressions.cs
@@ -1,538 +1,538 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
- /////////////////////////////////////////////////////////////////////////////////
- // The Abstract domain for determining "constant" expressions
- // i.e. It determines which expression are statically binded
- /////////////////////////////////////////////////////////////////////////////////
-/*
-using System;
-
-namespace Microsoft.AbstractInterpretationFramework
-{
- using Microsoft.Contracts;
- using System.Collections.Generic;
- using Microsoft.AbstractInterpretationFramework;
-
- /// <summary>
- /// This is an abstract domain for inferring constant expressions
- /// </summary>
-
- public class ConstantExpressions : Lattice
- {
- /// <summary>
- /// An abstract element is made of two maps:
- /// + A map from variables to expressions \cup top ( i.e. for each variable, the expression it is binded )
- /// + A map from variables to set of variabes ( i.e. for each variable, the set of variables that depends on its value )
- /// </summary>
- private class AbstractElement: Element
- {
- private Dictionary<IVariable!, BindExpr> variableBindings;
- private Dictionary<IVariable!, List<IVariable>> variableDependences;
-
- static private AbstractElement! bottom;
- static public Element! Bottom
- {
- get
- {
- if(bottom == null)
- {
- bottom = new AbstractElement();
- bottom.variableBindings = null;
- bottom.variableDependences = null;
- }
- assert bottom.variableBindings == null && bottom.variableDependences == null;
- return bottom;
- }
- }
-
- static public Element! Top
- {
- get
- {
- return new AbstractElement();
- }
- }
-
- AbstractElement()
- {
- this.variableBindings = new Dictionary<IVariable!, BindExpr>();
- this.variableDependences = new Dictionary<IVariable!, List<IVariable>>();
- }
-
- /// <summary>
- /// Our abstract element is top if and only if it has any constraint on variables
- /// </summary>
- public bool IsTop
- {
- get
- {
- return this.variableBindings.Keys.Count == 0 && this.variableDependences.Keys.Count == 0;
- }
- }
-
- /// <summary>
- /// Our abstract element is bottom if and only if the maps are null
- /// </summary>
- public bool IsBottom
- {
- get
- {
- assert (this.variableBindings == null) <==> (this.variableDependences == null);
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // The Abstract domain for determining "constant" expressions
+ // i.e. It determines which expression are statically binded
+ /////////////////////////////////////////////////////////////////////////////////
+/*
+using System;
+
+namespace Microsoft.AbstractInterpretationFramework
+{
+ using Microsoft.Contracts;
+ using System.Collections.Generic;
+ using Microsoft.AbstractInterpretationFramework;
+
+ /// <summary>
+ /// This is an abstract domain for inferring constant expressions
+ /// </summary>
+
+ public class ConstantExpressions : Lattice
+ {
+ /// <summary>
+ /// An abstract element is made of two maps:
+ /// + A map from variables to expressions \cup top ( i.e. for each variable, the expression it is binded )
+ /// + A map from variables to set of variabes ( i.e. for each variable, the set of variables that depends on its value )
+ /// </summary>
+ private class AbstractElement: Element
+ {
+ private Dictionary<IVariable!, BindExpr> variableBindings;
+ private Dictionary<IVariable!, List<IVariable>> variableDependences;
+
+ static private AbstractElement! bottom;
+ static public Element! Bottom
+ {
+ get
+ {
+ if(bottom == null)
+ {
+ bottom = new AbstractElement();
+ bottom.variableBindings = null;
+ bottom.variableDependences = null;
+ }
+ assert bottom.variableBindings == null && bottom.variableDependences == null;
+ return bottom;
+ }
+ }
+
+ static public Element! Top
+ {
+ get
+ {
+ return new AbstractElement();
+ }
+ }
+
+ AbstractElement()
+ {
+ this.variableBindings = new Dictionary<IVariable!, BindExpr>();
+ this.variableDependences = new Dictionary<IVariable!, List<IVariable>>();
+ }
+
+ /// <summary>
+ /// Our abstract element is top if and only if it has any constraint on variables
+ /// </summary>
+ public bool IsTop
+ {
+ get
+ {
+ return this.variableBindings.Keys.Count == 0 && this.variableDependences.Keys.Count == 0;
+ }
+ }
+
+ /// <summary>
+ /// Our abstract element is bottom if and only if the maps are null
+ /// </summary>
+ public bool IsBottom
+ {
+ get
+ {
+ assert (this.variableBindings == null) <==> (this.variableDependences == null);
return this.variableBindings == null && this.variableDependences == null;
- }
- }
-
- /// <summary>
- /// The pointwise join...
- /// </summary>
- public static AbstractElement! Join(AbstractElement! left, AbstractElement! right)
- {
+ }
+ }
+
+ /// <summary>
+ /// The pointwise join...
+ /// </summary>
+ public static AbstractElement! Join(AbstractElement! left, AbstractElement! right)
+ {
AbstractElement! result = new AbstractElement();
-
- // Put all the variables in the left
- foreach(IVariable! var in left.variableBindings.Keys)
- {
- BindExpr leftVal = left.variableBindings[var];
- assert leftVal != null;
-
- BindExpr rightVal = right.variableBindings[var];
-
- if(rightVal== null) // the expression is not there
- {
+
+ // Put all the variables in the left
+ foreach(IVariable! var in left.variableBindings.Keys)
+ {
+ BindExpr leftVal = left.variableBindings[var];
+ assert leftVal != null;
+
+ BindExpr rightVal = right.variableBindings[var];
+
+ if(rightVal== null) // the expression is not there
+ {
result.variableBindings.Add(var, leftVal);
- }
- else // both abstract elements have a definition for the variable....
- {
- result.variableBindings.Add(var, BindExpr.Join(leftVal, rightVal));
- }
- }
-
- // Put all the variables in the right
- foreach(IVariable! var in right.variableBindings.Keys)
- {
- BindExpr rightVal = right.variableBindings[var];
- assert rightVal != null;
-
- BindExpr leftVal = left.variableBindings[var];
-
- if(rightVal== null) // the expression is not there
- {
+ }
+ else // both abstract elements have a definition for the variable....
+ {
+ result.variableBindings.Add(var, BindExpr.Join(leftVal, rightVal));
+ }
+ }
+
+ // Put all the variables in the right
+ foreach(IVariable! var in right.variableBindings.Keys)
+ {
+ BindExpr rightVal = right.variableBindings[var];
+ assert rightVal != null;
+
+ BindExpr leftVal = left.variableBindings[var];
+
+ if(rightVal== null) // the expression is not there
+ {
result.variableBindings.Add(var, rightVal);
- }
- else // both abstract elements have a definition for the variable....
- {
- result.variableBindings.Add(var, BindExpr.Join(rightVal, leftVal));
- }
- }
-
- // Join the dependencies...
- foreach(IVariable! var in left.variableDependences.Keys)
- {
- List<IVariable> dependencies = left.variableDependences[var];
- List<IVariable> dup = new List<IVariable>(dependencies);
-
- result.variableDependences.Add(var, dup);
- }
-
- foreach(IVariable! var in right.variableDependences.Keys)
- {
- if(result.variableDependences.ContainsKey(var))
- {
- List<IVariable> dependencies = result.variableDependences[var];
- dependencies.AddRange(right.variableDependences[var]);
- }
- else
- {
- List<IVariable> dependencies = right.variableDependences[var];
- List<IVariable> dup = new List<IVariable>(dependencies);
-
- result.variableDependences.Add(var, dup);
- }
- }
-
- // Normalize... i.e. for the variables such thas they point to an unknown expression (top) we have to update also their values
- result.Normalize();
-
- return result;
- }
-
-
- ///<summary>
- /// Normalize the current abstract element, in that it propagetes the "dynamic" information throughtout the abstract element
- ///</summary>
- public void Normalize()
- {
- if(this.IsBottom)
- return;
- if(this.IsTop)
- return;
- assert this.variableBindings != null;
-
- bool atFixpoint = false;
-
- while(!atFixpoint)
- {
- atFixpoint = true; // guess that we've got the fixpoint...
-
- foreach(IVariable x in this.variableBindings.Keys)
- {
- if(this.variableBindings[x].IsTop) // It means that the variable is tied to a dynamic expression
- {
- foreach(IVariable y in this.variableDependences[x]) // The all the variables that depend on x are also dynamic...
- {
- assert x != y; // A variable cannot depend on itself...
- if(!this.variableBindings[y].IsTop)
- {
- this.variableBindings[y] = BindExpr.Top;
- atFixpoint = false; // the assumption that we were at the fixpoint was false, we have still to propagate some information...
- }
- }
- }
- }
- }
- }
-
- /// <summary>
- /// The pointwise meet...
- /// </summary>
- public static AbstractElement! Meet(AbstractElement! left, AbstractElement! right)
- {
- AbstractElement! result = new AbstractElement();
-
- // Put the variables that are both in left and right
- foreach(IVariable var in left.variableBindings.Keys)
- {
- if(right.variableBindings.ContainsKey(var))
- {
- result.variableBindings.Add(var, BindExpr.Meet(left.variableBindings[var], right.variableBindings[var]));
- }
- }
-
- // Intersect the dependencies
- foreach(IVariable var in result.variableBindings.Keys)
- {
- List<IVariable> depLeft = left.variableDependences[var];
- List<IVariable> depRight = right.variableDependences[var];
-
- // Intersect the two sets
+ }
+ else // both abstract elements have a definition for the variable....
+ {
+ result.variableBindings.Add(var, BindExpr.Join(rightVal, leftVal));
+ }
+ }
+
+ // Join the dependencies...
+ foreach(IVariable! var in left.variableDependences.Keys)
+ {
+ List<IVariable> dependencies = left.variableDependences[var];
+ List<IVariable> dup = new List<IVariable>(dependencies);
+
+ result.variableDependences.Add(var, dup);
+ }
+
+ foreach(IVariable! var in right.variableDependences.Keys)
+ {
+ if(result.variableDependences.ContainsKey(var))
+ {
+ List<IVariable> dependencies = result.variableDependences[var];
+ dependencies.AddRange(right.variableDependences[var]);
+ }
+ else
+ {
+ List<IVariable> dependencies = right.variableDependences[var];
+ List<IVariable> dup = new List<IVariable>(dependencies);
+
+ result.variableDependences.Add(var, dup);
+ }
+ }
+
+ // Normalize... i.e. for the variables such thas they point to an unknown expression (top) we have to update also their values
+ result.Normalize();
+
+ return result;
+ }
+
+
+ ///<summary>
+ /// Normalize the current abstract element, in that it propagetes the "dynamic" information throughtout the abstract element
+ ///</summary>
+ public void Normalize()
+ {
+ if(this.IsBottom)
+ return;
+ if(this.IsTop)
+ return;
+ assert this.variableBindings != null;
+
+ bool atFixpoint = false;
+
+ while(!atFixpoint)
+ {
+ atFixpoint = true; // guess that we've got the fixpoint...
+
+ foreach(IVariable x in this.variableBindings.Keys)
+ {
+ if(this.variableBindings[x].IsTop) // It means that the variable is tied to a dynamic expression
+ {
+ foreach(IVariable y in this.variableDependences[x]) // The all the variables that depend on x are also dynamic...
+ {
+ assert x != y; // A variable cannot depend on itself...
+ if(!this.variableBindings[y].IsTop)
+ {
+ this.variableBindings[y] = BindExpr.Top;
+ atFixpoint = false; // the assumption that we were at the fixpoint was false, we have still to propagate some information...
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// The pointwise meet...
+ /// </summary>
+ public static AbstractElement! Meet(AbstractElement! left, AbstractElement! right)
+ {
+ AbstractElement! result = new AbstractElement();
+
+ // Put the variables that are both in left and right
+ foreach(IVariable var in left.variableBindings.Keys)
+ {
+ if(right.variableBindings.ContainsKey(var))
+ {
+ result.variableBindings.Add(var, BindExpr.Meet(left.variableBindings[var], right.variableBindings[var]));
+ }
+ }
+
+ // Intersect the dependencies
+ foreach(IVariable var in result.variableBindings.Keys)
+ {
+ List<IVariable> depLeft = left.variableDependences[var];
+ List<IVariable> depRight = right.variableDependences[var];
+
+ // Intersect the two sets
result.variableDependences.Add(var, depLeft);
- foreach(IVariable v in depRight)
- {
- if(!result.variableDependences.ContainsKey(v))
- {
+ foreach(IVariable v in depRight)
+ {
+ if(!result.variableDependences.ContainsKey(v))
+ {
result.variableDependences.Remove(v);
- }
- }
- }
-
- // Now we remove the dependencies with variables not in variableBindings
+ }
+ }
+ }
+
+ // Now we remove the dependencies with variables not in variableBindings
List<IVariable>! varsToRemove = new List<IVariable>();
-
- foreach(IVariable var in result.
-
-
- }
-
- /// <summary>
- /// Clone the current abstract element
- /// </summary>
- public override Element! Clone()
- {
- AbstractElement cloned = new AbstractElement();
- foreach(IVariable var in this.variableBindings.Keys)
- {
- cloned.variableBindings.Add(var, this.variableBindings[var]);
- }
-
- foreach(IVariable var in this.variableDependences.Keys)
- {
- List<IVariable> dependingVars = this.variableDependences[var];
- List<IVariable> clonedDependingVars = new List<IVariable>(dependingVars);
+
+ foreach(IVariable var in result.
+
+
+ }
+
+ /// <summary>
+ /// Clone the current abstract element
+ /// </summary>
+ public override Element! Clone()
+ {
+ AbstractElement cloned = new AbstractElement();
+ foreach(IVariable var in this.variableBindings.Keys)
+ {
+ cloned.variableBindings.Add(var, this.variableBindings[var]);
+ }
+
+ foreach(IVariable var in this.variableDependences.Keys)
+ {
+ List<IVariable> dependingVars = this.variableDependences[var];
+ List<IVariable> clonedDependingVars = new List<IVariable>(dependingVars);
cloned.variableDependences.Add(var, clonedDependingVars);
- }
- }
-
- /// <summary>
- /// Return the variables that have a binding
- /// </summary>
- public override ICollection<IVariable!>! FreeVariables()
- {
- List<IVariable!> vars = new List<IVariable!>(this.variableBindings.Keys);
-
- return vars;
- }
-
- public override string! ToString()
- {
+ }
+ }
+
+ /// <summary>
+ /// Return the variables that have a binding
+ /// </summary>
+ public override ICollection<IVariable!>! FreeVariables()
+ {
+ List<IVariable!> vars = new List<IVariable!>(this.variableBindings.Keys);
+
+ return vars;
+ }
+
+ public override string! ToString()
+ {
string! retString = "";
- retString += "Bindings";
-
- foreach(IVariable var in this.variableBindings.Keys)
- {
- string! toAdd = var.ToString() + " -> " + this.variableBindings[var];
- retString += toAdd + ",";
- }
-
- retString += "\nDependencies";
- foreach(IVariable var in this.variableDependences.Keys)
- {
- string! toAdd = var.ToString() + " -> " + this.variableDependences[var];
- retString += toAdd + ",";
- }
-
- return retString;
- }
- }
-
- public override Element! Top
- {
- get
- {
- return AbstractElement.Top;
- }
- }
-
- public override Element! Bottom
- {
- get
- {
- return AbstractElement.Bottom;
- }
- }
-
- public override bool IsTop(Element! e)
- {
- assert e is AbstractElement;
- AbstractElement! absElement = (AbstractElement) e;
-
- return absElement.IsTop;
- }
-
- public override bool IsBottom(Element! e)
- {
- assert e is AbstractElement;
- AbstractElement absElement = (AbstractElement) e;
- return absElement.IsBottom;
- }
-
- /// <summary>
- /// Perform the pointwise join of the two abstract elements
- /// </summary>
- public override Element! NontrivialJoin(Element! a, Element! b)
- {
- assert a is AbstractElement;
- assert b is AbstractElement;
-
- AbstractElement! left = (AbstractElement!) a;
- AbstractElement! right = (AbstractElement!) b;
-
- return AbstractElement.Join(left, right);
- }
-
- /// <summary>
- /// Perform the pointwise meet of two abstract elements
- /// </summary>
- public override Element! NontrivialMeet(Element! a, Element!b)
- {
- assert a is AbstractElement;
- assert b is AbstractElement;
-
- AbstractElement! left = (AbstractElement!) a;
- AbstractElement! right = (AbstractElement!) b;
-
- return AbstractElement.Meet(left, right);
- }
-
-
- }
-
- /// <summary>
- /// A wrapper in order to have the algebraic datatype BindExpr := IExpr | Top
- /// </summary>
- abstract class BindExpr
- {
- /// <summary>
- /// True iff this expression is instance of BindExprTop
- /// </summary>
- public bool IsTop
- {
- get
- {
- return this is BindExprTop;
- }
- }
-
- static public BindExpr Top
- {
- get
- {
- return BindExprTop.UniqueTop;
- }
- }
-
- /// <summary>
- /// True iff this expression is instance of BindExprBottom
- /// </summary>
- public bool IsBottom
- {
- get
- {
- return this is BindExprBottom;
- }
- }
-
- static public BindExpr Bottom
- {
- get
- {
- return BindExprBottom.UniqueBottom;
- }
- }
-
- public static BindExpr! Join(BindExpr! left, BindExpr! right)
- {
- if(left.IsTop || right.IsTop)
- {
- return BindExpr.Top;
- }
- else if(left.IsBottom)
- {
- return right;
- }
- else if(right.IsBottom)
- {
- return left;
- }
- else if(left.EmbeddedExpr != right.EmbeddedExpr)
- {
- return BindExpr.Top;
- }
- else // left.EmbeddedExpr == right.EmbeddedExpr
- {
- return left;
- }
- }
-
- public static BindExpr! Meet(BindExpr! left, BindExpr! right)
- {
- if(left.IsTop)
- {
- return right;
- }
- else if(right.IsTop)
- {
- return right;
- }
- else if(left.IsBottom || right.IsBottom)
- {
- return BindExpr.Bottom;
- }
- else if(left.EmbeddedExpr != right.EmbeddedExpr)
- {
- return BindExpr.Bottom;
- }
- else // left.EmbeddedExpr == right.EmbeddedExpr
- {
- return left;
- }
- }
-
- abstract public IExpr! EmbeddedExpr
- {
- get;
- }
-
- }
-
- /// <summary>
- /// A wrapper for an integer
- /// </summary>
- class Expr : BindExpr
- {
- private IExpr! exp;
-
- public Expr(IExpr! exp)
- {
- this.exp = exp;
- }
-
- override public IExpr! EmbeddedExpr
- {
- get
- {
- return this.exp;
- }
- }
-
- public override string! ToString()
- {
- return this.exp.ToString();
- }
- }
-
- /// <summary>
- /// The dynamic expression
- /// </summary>
- class BindExprTop : BindExpr
- {
- private BindExprTop top = new BindExprTop();
- static public BindExprTop! UniqueTop
- {
- get
- {
- return this.top;
- }
- }
-
- private BindExprTop() {}
-
- override public IExpr! EmbeddedExpr
- {
- get
- {
- assert false; // If we get there, we have an error
- }
- }
-
- public override string! ToString()
- {
- return "<dynamic expression>";
- }
- }
-
- /// <summary>
- /// The unreachable expression
- /// </summary>
- class BindExprBottom : BindExpr
- {
- private BindExprBottom! bottom = new BindExprBottom();
- static public BindExprBottom! UniqueBottom
- {
- get
- {
- return this.bottom;
- }
- }
-
- private BindExprBottom() {}
-
- override public IExpr! EmbeddedExpr
- {
- get
- {
- assert false;
- }
- }
-
- public override string! ToString()
- {
- return "<unreachable expression>";
- }
- }
-
-} // end namespace Microsoft.AbstractInterpretationFramework
+ retString += "Bindings";
+
+ foreach(IVariable var in this.variableBindings.Keys)
+ {
+ string! toAdd = var.ToString() + " -> " + this.variableBindings[var];
+ retString += toAdd + ",";
+ }
+
+ retString += "\nDependencies";
+ foreach(IVariable var in this.variableDependences.Keys)
+ {
+ string! toAdd = var.ToString() + " -> " + this.variableDependences[var];
+ retString += toAdd + ",";
+ }
+
+ return retString;
+ }
+ }
+
+ public override Element! Top
+ {
+ get
+ {
+ return AbstractElement.Top;
+ }
+ }
+
+ public override Element! Bottom
+ {
+ get
+ {
+ return AbstractElement.Bottom;
+ }
+ }
+
+ public override bool IsTop(Element! e)
+ {
+ assert e is AbstractElement;
+ AbstractElement! absElement = (AbstractElement) e;
+
+ return absElement.IsTop;
+ }
+
+ public override bool IsBottom(Element! e)
+ {
+ assert e is AbstractElement;
+ AbstractElement absElement = (AbstractElement) e;
+ return absElement.IsBottom;
+ }
+
+ /// <summary>
+ /// Perform the pointwise join of the two abstract elements
+ /// </summary>
+ public override Element! NontrivialJoin(Element! a, Element! b)
+ {
+ assert a is AbstractElement;
+ assert b is AbstractElement;
+
+ AbstractElement! left = (AbstractElement!) a;
+ AbstractElement! right = (AbstractElement!) b;
+
+ return AbstractElement.Join(left, right);
+ }
+
+ /// <summary>
+ /// Perform the pointwise meet of two abstract elements
+ /// </summary>
+ public override Element! NontrivialMeet(Element! a, Element!b)
+ {
+ assert a is AbstractElement;
+ assert b is AbstractElement;
+
+ AbstractElement! left = (AbstractElement!) a;
+ AbstractElement! right = (AbstractElement!) b;
+
+ return AbstractElement.Meet(left, right);
+ }
+
+
+ }
+
+ /// <summary>
+ /// A wrapper in order to have the algebraic datatype BindExpr := IExpr | Top
+ /// </summary>
+ abstract class BindExpr
+ {
+ /// <summary>
+ /// True iff this expression is instance of BindExprTop
+ /// </summary>
+ public bool IsTop
+ {
+ get
+ {
+ return this is BindExprTop;
+ }
+ }
+
+ static public BindExpr Top
+ {
+ get
+ {
+ return BindExprTop.UniqueTop;
+ }
+ }
+
+ /// <summary>
+ /// True iff this expression is instance of BindExprBottom
+ /// </summary>
+ public bool IsBottom
+ {
+ get
+ {
+ return this is BindExprBottom;
+ }
+ }
+
+ static public BindExpr Bottom
+ {
+ get
+ {
+ return BindExprBottom.UniqueBottom;
+ }
+ }
+
+ public static BindExpr! Join(BindExpr! left, BindExpr! right)
+ {
+ if(left.IsTop || right.IsTop)
+ {
+ return BindExpr.Top;
+ }
+ else if(left.IsBottom)
+ {
+ return right;
+ }
+ else if(right.IsBottom)
+ {
+ return left;
+ }
+ else if(left.EmbeddedExpr != right.EmbeddedExpr)
+ {
+ return BindExpr.Top;
+ }
+ else // left.EmbeddedExpr == right.EmbeddedExpr
+ {
+ return left;
+ }
+ }
+
+ public static BindExpr! Meet(BindExpr! left, BindExpr! right)
+ {
+ if(left.IsTop)
+ {
+ return right;
+ }
+ else if(right.IsTop)
+ {
+ return right;
+ }
+ else if(left.IsBottom || right.IsBottom)
+ {
+ return BindExpr.Bottom;
+ }
+ else if(left.EmbeddedExpr != right.EmbeddedExpr)
+ {
+ return BindExpr.Bottom;
+ }
+ else // left.EmbeddedExpr == right.EmbeddedExpr
+ {
+ return left;
+ }
+ }
+
+ abstract public IExpr! EmbeddedExpr
+ {
+ get;
+ }
+
+ }
+
+ /// <summary>
+ /// A wrapper for an integer
+ /// </summary>
+ class Expr : BindExpr
+ {
+ private IExpr! exp;
+
+ public Expr(IExpr! exp)
+ {
+ this.exp = exp;
+ }
+
+ override public IExpr! EmbeddedExpr
+ {
+ get
+ {
+ return this.exp;
+ }
+ }
+
+ public override string! ToString()
+ {
+ return this.exp.ToString();
+ }
+ }
+
+ /// <summary>
+ /// The dynamic expression
+ /// </summary>
+ class BindExprTop : BindExpr
+ {
+ private BindExprTop top = new BindExprTop();
+ static public BindExprTop! UniqueTop
+ {
+ get
+ {
+ return this.top;
+ }
+ }
+
+ private BindExprTop() {}
+
+ override public IExpr! EmbeddedExpr
+ {
+ get
+ {
+ assert false; // If we get there, we have an error
+ }
+ }
+
+ public override string! ToString()
+ {
+ return "<dynamic expression>";
+ }
+ }
+
+ /// <summary>
+ /// The unreachable expression
+ /// </summary>
+ class BindExprBottom : BindExpr
+ {
+ private BindExprBottom! bottom = new BindExprBottom();
+ static public BindExprBottom! UniqueBottom
+ {
+ get
+ {
+ return this.bottom;
+ }
+ }
+
+ private BindExprBottom() {}
+
+ override public IExpr! EmbeddedExpr
+ {
+ get
+ {
+ assert false;
+ }
+ }
+
+ public override string! ToString()
+ {
+ return "<unreachable expression>";
+ }
+ }
+
+} // end namespace Microsoft.AbstractInterpretationFramework
*/ \ No newline at end of file
diff --git a/Source/AIFramework/VariableMap/DynamicTypeLattice.cs b/Source/AIFramework/VariableMap/DynamicTypeLattice.cs
index 78bd61a0..edda7c1e 100644
--- a/Source/AIFramework/VariableMap/DynamicTypeLattice.cs
+++ b/Source/AIFramework/VariableMap/DynamicTypeLattice.cs
@@ -1,511 +1,511 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System.Collections;
- using System.Diagnostics;
- //using System.Compiler.Analysis;
- //using Microsoft.SpecSharp.Collections;
- using System.Diagnostics.Contracts;
-
- /// <summary>
- /// Represents information about the dynamic type of a variable. In particular, for a
- /// variable "v", represents either Bottom, "typeof(v)==T" for some type T, or a set
- /// of constraints "typeof(v) subtype of T_i for some number of T_i's.
- /// </summary>
- public class DynamicTypeLattice : MicroLattice {
- enum What {
- Bottom,
- Exact,
- Bounds
- }
-
- private class Elt : Element {
- // Representation:
- // - Bottom is represented by: what==What.Bottom
- // - An exact type T is represented by: what==What.Exact && ty==T
- // - A set of type constraints T0, T1, T2, ..., T{n-1} is represented by:
- // -- if n==0: what==What.Bounds && ty==null && manyBounds==null
- // -- if n==1: what==What.Bounds && ty==T0 && manyBounds==null
- // -- if n>=2: what==What.Bounds && ty==null &&
- // manyBounds!=null && manyBounds.Length==n &&
- // manyBounds[0]==T0 && manyBounds[1]==T1 && ... && manyBounds[n-1]==T{n-1}
- // The reason for keeping the one-and-only bound in "ty" in case n==1 is to try
- // to prevent the need for allocating a whole array of bounds, since 1 bound is
- // bound to be common.
- // In the representation, there are no redundant bounds in manyBounds.
- // It is assumed that the types can can occur as exact bounds form a single-inheritance
- // hierarchy. That is, if T0 and T1 are types that can occur as exact types, then
- // there is no v such that typeof(v) is a subtype of both T0 and T1, unless T0 and T1 are
- // the same type.
- public readonly What what;
- public readonly IExpr ty;
- [Rep]
- public readonly IExpr[] manyBounds;
- [ContractInvariantMethod]
- void ObjectInvariant() {
-
- Contract.Invariant(what != What.Bottom || ty == null && manyBounds == null);
- Contract.Invariant(manyBounds == null || what == What.Bounds);
- Contract.Invariant(manyBounds == null || Contract.ForAll(0, manyBounds.Length, i => manyBounds[i] != null));
- }
- public Elt(What what, IExpr ty) {
- Contract.Requires(what != What.Bottom || ty == null);
- Contract.Requires(what != What.Exact || ty != null);
- this.what = what;
- this.ty = ty;
- this.manyBounds = null;
- }
-
- public Elt(IExpr[]/*!*/ bounds) {
- Contract.Requires(bounds != null);
- Contract.Requires(Contract.ForAll(0, bounds.Length, i => bounds[i] != null));
- this.what = What.Bounds;
- if (bounds.Length == 0) {
- this.ty = null;
- this.manyBounds = null;
- } else if (bounds.Length == 1) {
- this.ty = bounds[0];
- this.manyBounds = null;
- } else {
- this.ty = null;
- this.manyBounds = bounds;
- }
- }
-
- /// <summary>
- /// Constructs an Elt with "n" bounds, namely the n non-null values of the "bounds" list.
- /// </summary>
- [NotDelayed]
- public Elt(ArrayList /*IExpr*//*!*/ bounds, int n) {
- Contract.Requires(bounds != null);
- Contract.Requires(0 <= n && n <= bounds.Count);
- this.what = What.Bounds;
- if (n > 1) {
- this.manyBounds = new IExpr[n];
- }
- int k = 0;
- foreach (IExpr bound in bounds) {
- if (bound != null) {
- Contract.Assert(k != n);
- if (n == 1) {
- Contract.Assert(this.ty == null);
- this.ty = bound;
- } else {
- Contract.Assume(manyBounds != null);
- manyBounds[k] = bound;
- }
- k++;
- }
- }
- Contract.Assert(k == n);
- }
-
- public int BoundsCount {
- get {
- Contract.Ensures(0 <= Contract.Result<int>());
- if (manyBounds != null) {
- return manyBounds.Length;
- } else if (ty != null) {
- return 1;
- } else {
- return 0;
- }
- }
- }
-
- [Pure]
- public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
- return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
- }
-
- public override Element/*!*/ Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- if (this.manyBounds != null)
- return new Elt(this.manyBounds);
- else
- return new Elt(this.what, this.ty);
- }
- }
-
- readonly ITypeExprFactory/*!*/ factory;
- readonly IPropExprFactory/*!*/ propFactory;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(factory != null);
- Contract.Invariant(propFactory != null);
- }
-
-
- public DynamicTypeLattice(ITypeExprFactory/*!*/ factory, IPropExprFactory/*!*/ propFactory) {
- Contract.Requires(propFactory != null);
- Contract.Requires(factory != null);
- this.factory = factory;
- this.propFactory = propFactory;
- // base();
- }
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(What.Bounds, null);
- }
- }
-
- public override Element/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(What.Bottom, null);
- }
- }
-
- public override bool IsTop(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- return e.what == What.Bounds && e.ty == null && e.manyBounds == null;
- }
-
- public override bool IsBottom(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- return e.what == What.Bottom;
- }
-
- public override Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- Contract.Assert(a.what != What.Bottom && b.what != What.Bottom);
- if (a.what == What.Exact && b.what == What.Exact) {
- Contract.Assert(a.ty != null && b.ty != null);
- if (factory.IsTypeEqual(a.ty, b.ty)) {
- return a;
- } else {
- return new Elt(What.Bounds, factory.JoinTypes(a.ty, b.ty));
- }
- }
-
- // The result is going to be a Bounds, since at least one of the operands is a Bounds.
- Contract.Assert(1 <= a.BoundsCount && 1 <= b.BoundsCount); // a preconditions is that neither operand is Top
- int n = a.BoundsCount + b.BoundsCount;
-
- // Special case: a and b each has exactly one bound
- if (n == 2) {
- Contract.Assert(a.ty != null && b.ty != null);
- IExpr join = factory.JoinTypes(a.ty, b.ty);
- Contract.Assert(join != null);
- if (join == a.ty && a.what == What.Bounds) {
- return a;
- } else if (join == b.ty && b.what == What.Bounds) {
- return b;
- } else {
- return new Elt(What.Bounds, join);
- }
- }
-
- // General case
- ArrayList /*IExpr*/ allBounds = new ArrayList /*IExpr*/ (n); // final size
- ArrayList /*IExpr!*/ result = new ArrayList /*IExpr!*/ (n); // a guess at the size, but could be as big as size(a)*size(b)
- if (a.ty != null) {
- allBounds.Add(a.ty);
- } else {
- allBounds.AddRange(cce.NonNull(a.manyBounds));
- }
- int bStart = allBounds.Count;
- if (b.ty != null) {
- allBounds.Add(b.ty);
- } else {
- allBounds.AddRange(cce.NonNull(b.manyBounds));
- }
- // compute the join of each pair, putting non-redundant joins into "result"
- for (int i = 0; i < bStart; i++) {
- IExpr/*!*/ aBound = cce.NonNull((IExpr/*!*/)allBounds[i]);
- for (int j = bStart; j < allBounds.Count; j++) {
- IExpr/*!*/ bBound = (IExpr/*!*/)cce.NonNull(allBounds[j]);
-
- IExpr/*!*/ join = factory.JoinTypes(aBound, bBound);
- Contract.Assert(join != null);
-
- int k = 0;
- while (k < result.Count) {
- IExpr/*!*/ r = (IExpr/*!*/)cce.NonNull(result[k]);
- if (factory.IsSubType(join, r)) {
- // "join" is more restrictive than a bound already placed in "result",
- // so toss out "join" and compute the join of the next pair
- goto NEXT_PAIR;
- } else if (factory.IsSubType(r, join)) {
- // "join" is less restrictive than a bound already placed in "result",
- // so toss out that old bound
- result.RemoveAt(k);
- } else {
- k++;
- }
- }
- result.Add(join);
- NEXT_PAIR: {
- }
- }
- }
- return new Elt(result, result.Count);
- }
-
-
- public override Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- Contract.Assert(a.what != What.Bottom && b.what != What.Bottom);
-
- if (a.what == What.Exact && b.what == What.Exact) {
- Contract.Assert(a.ty != null && b.ty != null);
- if (factory.IsTypeEqual(a.ty, b.ty)) {
- return a;
- } else {
- return Bottom;
- }
-
- } else if (a.what == What.Exact || b.what == What.Exact) {
- // One is Bounds, the other Exact. Make b be the Bounds one.
- if (a.what == What.Bounds) {
- Elt tmp = a;
- a = b;
- b = tmp;
- }
- Contract.Assert(a.what == What.Exact && b.what == What.Bounds);
- // Check the exact type against all bounds. If the exact type is more restrictive
- // than all bounds, then return it. If some bound is not met by the exact type, return
- // bottom.
- Contract.Assert(a.ty != null);
- if (b.ty != null && !factory.IsSubType(a.ty, b.ty)) {
- return Bottom;
- }
- if (b.manyBounds != null) {
- foreach (IExpr/*!*/ bound in b.manyBounds) {
- Contract.Assert(bound != null);
- if (!factory.IsSubType(a.ty, bound)) {
- return Bottom;
- }
- }
- }
- return a;
- } else {
- // Both operands are Bounds.
- Contract.Assert(a.what == What.Bounds && b.what == What.Bounds);
-
- // Take all the bounds, but prune those bounds that follow from others.
- Contract.Assert(1 <= a.BoundsCount && 1 <= b.BoundsCount); // a preconditions is that neither operand is Top
- int n = a.BoundsCount + b.BoundsCount;
- // Special case: a and b each has exactly one bound
- if (n == 2) {
- Contract.Assert(a.ty != null && b.ty != null);
- if (factory.IsSubType(a.ty, b.ty)) {
- // a is more restrictive
- return a;
- } else if (factory.IsSubType(b.ty, a.ty)) {
- // b is more restrictive
- return b;
- } else {
- IExpr[]/*!*/ bounds = new IExpr[2];
- bounds[0] = a.ty;
- bounds[1] = b.ty;
- return new Elt(bounds);
- }
- }
-
- // General case
- ArrayList /*IExpr*/ allBounds = new ArrayList /*IExpr*/ (n);
- if (a.ty != null) {
- allBounds.Add(a.ty);
- } else {
- allBounds.AddRange(cce.NonNull(a.manyBounds));
- }
- int bStart = allBounds.Count;
- if (b.ty != null) {
- allBounds.Add(b.ty);
- } else {
- allBounds.AddRange(cce.NonNull(b.manyBounds));
- }
- for (int i = 0; i < bStart; i++) {
- IExpr/*!*/ aBound = cce.NonNull((IExpr)allBounds[i]);
- for (int j = bStart; j < allBounds.Count; j++) {
- IExpr bBound = (IExpr/*! Wouldn't the non-null typing in the original Spec# code had made bBound never null,
- * thus negating the need for the continue statement?*/
- )allBounds[j];
- if (bBound == null) {
- continue;
- } else if (factory.IsSubType(aBound, bBound)) {
- // a is more restrictive, so blot out the b bound
- allBounds[j] = null;
- n--;
- } else if (factory.IsSubType(bBound, aBound)) {
- // b is more restrictive, so blot out the a bound
- allBounds[i] = null;
- n--;
- goto CONTINUE_OUTER_LOOP;
- }
- }
- CONTINUE_OUTER_LOOP: {
- }
- }
- Contract.Assert(1 <= n);
- return new Elt(allBounds, n);
- }
- }
-
- public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return Join(first, second);
- }
-
- protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
- {
- //Contract.Requires(first != null);
- //Contract.Requires(second != null);
- Elt/*!*/ a = (Elt/*!*/)cce.NonNull(first);
- Elt/*!*/ b = (Elt/*!*/)cce.NonNull(second);
- Contract.Assert(a.what != What.Bottom && b.what != What.Bottom);
-
- if (a.what == What.Exact && b.what == What.Exact) {
- Contract.Assert(a.ty != null && b.ty != null);
- return factory.IsTypeEqual(a.ty, b.ty);
- } else if (b.what == What.Exact) {
- return false;
- } else if (a.what == What.Exact) {
- Contract.Assert(a.ty != null);
- if (b.ty != null) {
- return factory.IsSubType(a.ty, b.ty);
- } else {
- return Contract.ForAll(b.manyBounds, bound => factory.IsSubType(a.ty, bound));
- }
- } else {
- Contract.Assert(a.what == What.Bounds && b.what == What.Bounds);
- Contract.Assert(a.ty != null || a.manyBounds != null); // a precondition is that a is not Top
- Contract.Assert(b.ty != null || b.manyBounds != null); // a precondition is that b is not Top
- // Return true iff: for each constraint in b, there is a stricter constraint in a.
- if (a.ty != null && b.ty != null) {
- return factory.IsSubType(a.ty, b.ty);
- } else if (a.ty != null) {
- return Contract.ForAll(b.manyBounds, bound => factory.IsSubType(a.ty, bound));
- } else if (b.ty != null) {
- return Contract.Exists(a.manyBounds, bound => factory.IsSubType(bound, b.ty));
- } else {
- return Contract.ForAll(b.manyBounds, bBound => Contract.Exists(a.manyBounds, aBound => factory.IsSubType(aBound, bBound)));
- }
- }
- }
-
- public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
- //Contract.Requires(element != null);
- //Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- Elt e = (Elt)element;
- switch (e.what) {
- case What.Bottom:
- return propFactory.False;
- case What.Exact:
- return factory.IsExactlyA(var, cce.NonNull(e.ty));
- case What.Bounds:
- if (e.ty == null && e.manyBounds == null) {
- return propFactory.True;
- } else if (e.ty != null) {
- return factory.IsA(var, e.ty);
- } else {
- IExpr/*!*/ p = factory.IsA(var, (IExpr/*!*/)cce.NonNull(e.manyBounds)[0]);
- for (int i = 1; i < e.manyBounds.Length; i++) {
- p = propFactory.And(p, factory.IsA(var, (IExpr/*!*/)cce.NonNull(e.manyBounds[i])));
- }
- return p;
- }
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- throw new System.Exception();
- }
- }
-
- public override IExpr GetFoldExpr(Element/*!*/ e) {
- //Contract.Requires(e != null);
- // cannot fold into an expression that can be substituted for the variable
- return null;
- }
-
- public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- bool isEq = f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
- if (isEq || f.Equals(Microsoft.AbstractInterpretationFramework.Value.Subtype)) {
- Contract.Assert(args.Count == 2);
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
-
- // Look for $typeof(var) == t or t == $typeof(var) or $typeof(var) <: t
- if (isEq && factory.IsTypeConstant(arg0)) {
- // swap the arguments
- IExpr/*!*/ tmp = arg0;
- arg0 = arg1;
- arg1 = tmp;
- } else if (!factory.IsTypeConstant(arg1)) {
- return false;
- }
- IFunApp typeofExpr = arg0 as IFunApp;
- if (typeofExpr != null &&
- typeofExpr.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Typeof)) {
- Contract.Assert(typeofExpr.Arguments.Count == 1);
- if (typeofExpr.Arguments[0] is IVariable) {
- // we have a match
- return true;
- }
- }
- }
- return false;
- }
-
- public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ e) {
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- IFunApp nary = e as IFunApp;
- if (nary != null) {
-
- bool isEq = nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
- if (isEq || nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Subtype)) {
- IList/*<IExpr!>*//*!*/ args = nary.Arguments;
- Contract.Assert(args != null);
- Contract.Assert(args.Count == 2);
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
-
- // Look for $typeof(var) == t or t == $typeof(var) or $typeof(var) <: t
- if (isEq && factory.IsTypeConstant(arg0)) {
- // swap the arguments
- IExpr/*!*/ tmp = arg0;
- arg0 = arg1;
- arg1 = tmp;
- } else if (!factory.IsTypeConstant(arg1)) {
- return Top;
- }
- IFunApp typeofExpr = arg0 as IFunApp;
- if (typeofExpr != null &&
- typeofExpr.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Typeof)) {
- Contract.Assert(typeofExpr.Arguments.Count == 1);
- if (typeofExpr.Arguments[0] is IVariable) {
- // we have a match
- return new Elt(isEq ? What.Exact : What.Bounds, arg1);
- }
- }
- }
- }
- return Top;
- }
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System.Collections;
+ using System.Diagnostics;
+ //using System.Compiler.Analysis;
+ //using Microsoft.SpecSharp.Collections;
+ using System.Diagnostics.Contracts;
+
+ /// <summary>
+ /// Represents information about the dynamic type of a variable. In particular, for a
+ /// variable "v", represents either Bottom, "typeof(v)==T" for some type T, or a set
+ /// of constraints "typeof(v) subtype of T_i for some number of T_i's.
+ /// </summary>
+ public class DynamicTypeLattice : MicroLattice {
+ enum What {
+ Bottom,
+ Exact,
+ Bounds
+ }
+
+ private class Elt : Element {
+ // Representation:
+ // - Bottom is represented by: what==What.Bottom
+ // - An exact type T is represented by: what==What.Exact && ty==T
+ // - A set of type constraints T0, T1, T2, ..., T{n-1} is represented by:
+ // -- if n==0: what==What.Bounds && ty==null && manyBounds==null
+ // -- if n==1: what==What.Bounds && ty==T0 && manyBounds==null
+ // -- if n>=2: what==What.Bounds && ty==null &&
+ // manyBounds!=null && manyBounds.Length==n &&
+ // manyBounds[0]==T0 && manyBounds[1]==T1 && ... && manyBounds[n-1]==T{n-1}
+ // The reason for keeping the one-and-only bound in "ty" in case n==1 is to try
+ // to prevent the need for allocating a whole array of bounds, since 1 bound is
+ // bound to be common.
+ // In the representation, there are no redundant bounds in manyBounds.
+ // It is assumed that the types can can occur as exact bounds form a single-inheritance
+ // hierarchy. That is, if T0 and T1 are types that can occur as exact types, then
+ // there is no v such that typeof(v) is a subtype of both T0 and T1, unless T0 and T1 are
+ // the same type.
+ public readonly What what;
+ public readonly IExpr ty;
+ [Rep]
+ public readonly IExpr[] manyBounds;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+
+ Contract.Invariant(what != What.Bottom || ty == null && manyBounds == null);
+ Contract.Invariant(manyBounds == null || what == What.Bounds);
+ Contract.Invariant(manyBounds == null || Contract.ForAll(0, manyBounds.Length, i => manyBounds[i] != null));
+ }
+ public Elt(What what, IExpr ty) {
+ Contract.Requires(what != What.Bottom || ty == null);
+ Contract.Requires(what != What.Exact || ty != null);
+ this.what = what;
+ this.ty = ty;
+ this.manyBounds = null;
+ }
+
+ public Elt(IExpr[]/*!*/ bounds) {
+ Contract.Requires(bounds != null);
+ Contract.Requires(Contract.ForAll(0, bounds.Length, i => bounds[i] != null));
+ this.what = What.Bounds;
+ if (bounds.Length == 0) {
+ this.ty = null;
+ this.manyBounds = null;
+ } else if (bounds.Length == 1) {
+ this.ty = bounds[0];
+ this.manyBounds = null;
+ } else {
+ this.ty = null;
+ this.manyBounds = bounds;
+ }
+ }
+
+ /// <summary>
+ /// Constructs an Elt with "n" bounds, namely the n non-null values of the "bounds" list.
+ /// </summary>
+ [NotDelayed]
+ public Elt(ArrayList /*IExpr*//*!*/ bounds, int n) {
+ Contract.Requires(bounds != null);
+ Contract.Requires(0 <= n && n <= bounds.Count);
+ this.what = What.Bounds;
+ if (n > 1) {
+ this.manyBounds = new IExpr[n];
+ }
+ int k = 0;
+ foreach (IExpr bound in bounds) {
+ if (bound != null) {
+ Contract.Assert(k != n);
+ if (n == 1) {
+ Contract.Assert(this.ty == null);
+ this.ty = bound;
+ } else {
+ Contract.Assume(manyBounds != null);
+ manyBounds[k] = bound;
+ }
+ k++;
+ }
+ }
+ Contract.Assert(k == n);
+ }
+
+ public int BoundsCount {
+ get {
+ Contract.Ensures(0 <= Contract.Result<int>());
+ if (manyBounds != null) {
+ return manyBounds.Length;
+ } else if (ty != null) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ [Pure]
+ public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
+ return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
+ }
+
+ public override Element/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ if (this.manyBounds != null)
+ return new Elt(this.manyBounds);
+ else
+ return new Elt(this.what, this.ty);
+ }
+ }
+
+ readonly ITypeExprFactory/*!*/ factory;
+ readonly IPropExprFactory/*!*/ propFactory;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(factory != null);
+ Contract.Invariant(propFactory != null);
+ }
+
+
+ public DynamicTypeLattice(ITypeExprFactory/*!*/ factory, IPropExprFactory/*!*/ propFactory) {
+ Contract.Requires(propFactory != null);
+ Contract.Requires(factory != null);
+ this.factory = factory;
+ this.propFactory = propFactory;
+ // base();
+ }
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(What.Bounds, null);
+ }
+ }
+
+ public override Element/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(What.Bottom, null);
+ }
+ }
+
+ public override bool IsTop(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ return e.what == What.Bounds && e.ty == null && e.manyBounds == null;
+ }
+
+ public override bool IsBottom(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ return e.what == What.Bottom;
+ }
+
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ Contract.Assert(a.what != What.Bottom && b.what != What.Bottom);
+ if (a.what == What.Exact && b.what == What.Exact) {
+ Contract.Assert(a.ty != null && b.ty != null);
+ if (factory.IsTypeEqual(a.ty, b.ty)) {
+ return a;
+ } else {
+ return new Elt(What.Bounds, factory.JoinTypes(a.ty, b.ty));
+ }
+ }
+
+ // The result is going to be a Bounds, since at least one of the operands is a Bounds.
+ Contract.Assert(1 <= a.BoundsCount && 1 <= b.BoundsCount); // a preconditions is that neither operand is Top
+ int n = a.BoundsCount + b.BoundsCount;
+
+ // Special case: a and b each has exactly one bound
+ if (n == 2) {
+ Contract.Assert(a.ty != null && b.ty != null);
+ IExpr join = factory.JoinTypes(a.ty, b.ty);
+ Contract.Assert(join != null);
+ if (join == a.ty && a.what == What.Bounds) {
+ return a;
+ } else if (join == b.ty && b.what == What.Bounds) {
+ return b;
+ } else {
+ return new Elt(What.Bounds, join);
+ }
+ }
+
+ // General case
+ ArrayList /*IExpr*/ allBounds = new ArrayList /*IExpr*/ (n); // final size
+ ArrayList /*IExpr!*/ result = new ArrayList /*IExpr!*/ (n); // a guess at the size, but could be as big as size(a)*size(b)
+ if (a.ty != null) {
+ allBounds.Add(a.ty);
+ } else {
+ allBounds.AddRange(cce.NonNull(a.manyBounds));
+ }
+ int bStart = allBounds.Count;
+ if (b.ty != null) {
+ allBounds.Add(b.ty);
+ } else {
+ allBounds.AddRange(cce.NonNull(b.manyBounds));
+ }
+ // compute the join of each pair, putting non-redundant joins into "result"
+ for (int i = 0; i < bStart; i++) {
+ IExpr/*!*/ aBound = cce.NonNull((IExpr/*!*/)allBounds[i]);
+ for (int j = bStart; j < allBounds.Count; j++) {
+ IExpr/*!*/ bBound = (IExpr/*!*/)cce.NonNull(allBounds[j]);
+
+ IExpr/*!*/ join = factory.JoinTypes(aBound, bBound);
+ Contract.Assert(join != null);
+
+ int k = 0;
+ while (k < result.Count) {
+ IExpr/*!*/ r = (IExpr/*!*/)cce.NonNull(result[k]);
+ if (factory.IsSubType(join, r)) {
+ // "join" is more restrictive than a bound already placed in "result",
+ // so toss out "join" and compute the join of the next pair
+ goto NEXT_PAIR;
+ } else if (factory.IsSubType(r, join)) {
+ // "join" is less restrictive than a bound already placed in "result",
+ // so toss out that old bound
+ result.RemoveAt(k);
+ } else {
+ k++;
+ }
+ }
+ result.Add(join);
+ NEXT_PAIR: {
+ }
+ }
+ }
+ return new Elt(result, result.Count);
+ }
+
+
+ public override Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ Contract.Assert(a.what != What.Bottom && b.what != What.Bottom);
+
+ if (a.what == What.Exact && b.what == What.Exact) {
+ Contract.Assert(a.ty != null && b.ty != null);
+ if (factory.IsTypeEqual(a.ty, b.ty)) {
+ return a;
+ } else {
+ return Bottom;
+ }
+
+ } else if (a.what == What.Exact || b.what == What.Exact) {
+ // One is Bounds, the other Exact. Make b be the Bounds one.
+ if (a.what == What.Bounds) {
+ Elt tmp = a;
+ a = b;
+ b = tmp;
+ }
+ Contract.Assert(a.what == What.Exact && b.what == What.Bounds);
+ // Check the exact type against all bounds. If the exact type is more restrictive
+ // than all bounds, then return it. If some bound is not met by the exact type, return
+ // bottom.
+ Contract.Assert(a.ty != null);
+ if (b.ty != null && !factory.IsSubType(a.ty, b.ty)) {
+ return Bottom;
+ }
+ if (b.manyBounds != null) {
+ foreach (IExpr/*!*/ bound in b.manyBounds) {
+ Contract.Assert(bound != null);
+ if (!factory.IsSubType(a.ty, bound)) {
+ return Bottom;
+ }
+ }
+ }
+ return a;
+ } else {
+ // Both operands are Bounds.
+ Contract.Assert(a.what == What.Bounds && b.what == What.Bounds);
+
+ // Take all the bounds, but prune those bounds that follow from others.
+ Contract.Assert(1 <= a.BoundsCount && 1 <= b.BoundsCount); // a preconditions is that neither operand is Top
+ int n = a.BoundsCount + b.BoundsCount;
+ // Special case: a and b each has exactly one bound
+ if (n == 2) {
+ Contract.Assert(a.ty != null && b.ty != null);
+ if (factory.IsSubType(a.ty, b.ty)) {
+ // a is more restrictive
+ return a;
+ } else if (factory.IsSubType(b.ty, a.ty)) {
+ // b is more restrictive
+ return b;
+ } else {
+ IExpr[]/*!*/ bounds = new IExpr[2];
+ bounds[0] = a.ty;
+ bounds[1] = b.ty;
+ return new Elt(bounds);
+ }
+ }
+
+ // General case
+ ArrayList /*IExpr*/ allBounds = new ArrayList /*IExpr*/ (n);
+ if (a.ty != null) {
+ allBounds.Add(a.ty);
+ } else {
+ allBounds.AddRange(cce.NonNull(a.manyBounds));
+ }
+ int bStart = allBounds.Count;
+ if (b.ty != null) {
+ allBounds.Add(b.ty);
+ } else {
+ allBounds.AddRange(cce.NonNull(b.manyBounds));
+ }
+ for (int i = 0; i < bStart; i++) {
+ IExpr/*!*/ aBound = cce.NonNull((IExpr)allBounds[i]);
+ for (int j = bStart; j < allBounds.Count; j++) {
+ IExpr bBound = (IExpr/*! Wouldn't the non-null typing in the original Spec# code had made bBound never null,
+ * thus negating the need for the continue statement?*/
+ )allBounds[j];
+ if (bBound == null) {
+ continue;
+ } else if (factory.IsSubType(aBound, bBound)) {
+ // a is more restrictive, so blot out the b bound
+ allBounds[j] = null;
+ n--;
+ } else if (factory.IsSubType(bBound, aBound)) {
+ // b is more restrictive, so blot out the a bound
+ allBounds[i] = null;
+ n--;
+ goto CONTINUE_OUTER_LOOP;
+ }
+ }
+ CONTINUE_OUTER_LOOP: {
+ }
+ }
+ Contract.Assert(1 <= n);
+ return new Elt(allBounds, n);
+ }
+ }
+
+ public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Join(first, second);
+ }
+
+ protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
+ {
+ //Contract.Requires(first != null);
+ //Contract.Requires(second != null);
+ Elt/*!*/ a = (Elt/*!*/)cce.NonNull(first);
+ Elt/*!*/ b = (Elt/*!*/)cce.NonNull(second);
+ Contract.Assert(a.what != What.Bottom && b.what != What.Bottom);
+
+ if (a.what == What.Exact && b.what == What.Exact) {
+ Contract.Assert(a.ty != null && b.ty != null);
+ return factory.IsTypeEqual(a.ty, b.ty);
+ } else if (b.what == What.Exact) {
+ return false;
+ } else if (a.what == What.Exact) {
+ Contract.Assert(a.ty != null);
+ if (b.ty != null) {
+ return factory.IsSubType(a.ty, b.ty);
+ } else {
+ return Contract.ForAll(b.manyBounds, bound => factory.IsSubType(a.ty, bound));
+ }
+ } else {
+ Contract.Assert(a.what == What.Bounds && b.what == What.Bounds);
+ Contract.Assert(a.ty != null || a.manyBounds != null); // a precondition is that a is not Top
+ Contract.Assert(b.ty != null || b.manyBounds != null); // a precondition is that b is not Top
+ // Return true iff: for each constraint in b, there is a stricter constraint in a.
+ if (a.ty != null && b.ty != null) {
+ return factory.IsSubType(a.ty, b.ty);
+ } else if (a.ty != null) {
+ return Contract.ForAll(b.manyBounds, bound => factory.IsSubType(a.ty, bound));
+ } else if (b.ty != null) {
+ return Contract.Exists(a.manyBounds, bound => factory.IsSubType(bound, b.ty));
+ } else {
+ return Contract.ForAll(b.manyBounds, bBound => Contract.Exists(a.manyBounds, aBound => factory.IsSubType(aBound, bBound)));
+ }
+ }
+ }
+
+ public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ //Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ Elt e = (Elt)element;
+ switch (e.what) {
+ case What.Bottom:
+ return propFactory.False;
+ case What.Exact:
+ return factory.IsExactlyA(var, cce.NonNull(e.ty));
+ case What.Bounds:
+ if (e.ty == null && e.manyBounds == null) {
+ return propFactory.True;
+ } else if (e.ty != null) {
+ return factory.IsA(var, e.ty);
+ } else {
+ IExpr/*!*/ p = factory.IsA(var, (IExpr/*!*/)cce.NonNull(e.manyBounds)[0]);
+ for (int i = 1; i < e.manyBounds.Length; i++) {
+ p = propFactory.And(p, factory.IsA(var, (IExpr/*!*/)cce.NonNull(e.manyBounds[i])));
+ }
+ return p;
+ }
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ throw new System.Exception();
+ }
+ }
+
+ public override IExpr GetFoldExpr(Element/*!*/ e) {
+ //Contract.Requires(e != null);
+ // cannot fold into an expression that can be substituted for the variable
+ return null;
+ }
+
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ bool isEq = f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
+ if (isEq || f.Equals(Microsoft.AbstractInterpretationFramework.Value.Subtype)) {
+ Contract.Assert(args.Count == 2);
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
+
+ // Look for $typeof(var) == t or t == $typeof(var) or $typeof(var) <: t
+ if (isEq && factory.IsTypeConstant(arg0)) {
+ // swap the arguments
+ IExpr/*!*/ tmp = arg0;
+ arg0 = arg1;
+ arg1 = tmp;
+ } else if (!factory.IsTypeConstant(arg1)) {
+ return false;
+ }
+ IFunApp typeofExpr = arg0 as IFunApp;
+ if (typeofExpr != null &&
+ typeofExpr.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Typeof)) {
+ Contract.Assert(typeofExpr.Arguments.Count == 1);
+ if (typeofExpr.Arguments[0] is IVariable) {
+ // we have a match
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ e) {
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ IFunApp nary = e as IFunApp;
+ if (nary != null) {
+
+ bool isEq = nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
+ if (isEq || nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Subtype)) {
+ IList/*<IExpr!>*//*!*/ args = nary.Arguments;
+ Contract.Assert(args != null);
+ Contract.Assert(args.Count == 2);
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
+
+ // Look for $typeof(var) == t or t == $typeof(var) or $typeof(var) <: t
+ if (isEq && factory.IsTypeConstant(arg0)) {
+ // swap the arguments
+ IExpr/*!*/ tmp = arg0;
+ arg0 = arg1;
+ arg1 = tmp;
+ } else if (!factory.IsTypeConstant(arg1)) {
+ return Top;
+ }
+ IFunApp typeofExpr = arg0 as IFunApp;
+ if (typeofExpr != null &&
+ typeofExpr.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Typeof)) {
+ Contract.Assert(typeofExpr.Arguments.Count == 1);
+ if (typeofExpr.Arguments[0] is IVariable) {
+ // we have a match
+ return new Elt(isEq ? What.Exact : What.Bounds, arg1);
+ }
+ }
+ }
+ }
+ return Top;
+ }
+
+ }
+}
diff --git a/Source/AIFramework/VariableMap/Intervals.cs b/Source/AIFramework/VariableMap/Intervals.cs
index 0bf82cf4..98bf9007 100644
--- a/Source/AIFramework/VariableMap/Intervals.cs
+++ b/Source/AIFramework/VariableMap/Intervals.cs
@@ -1,871 +1,871 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-//using System.Compiler.Analysis;
-using Microsoft.AbstractInterpretationFramework.Collections;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-/////////////////////////////////////////////////////////////////////////////////
-// An implementation of the interval abstract domain
-/////////////////////////////////////////////////////////////////////////////////
-
-namespace Microsoft.AbstractInterpretationFramework {
- public class IntervalLattice : MicroLattice {
- readonly ILinearExprFactory/*!*/ factory;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(factory != null);
- }
-
-
- public IntervalLattice(ILinearExprFactory/*!*/ factory) {
- Contract.Requires(factory != null);
- this.factory = factory;
- // base();
- }
-
- public override bool UnderstandsBasicArithmetics {
- get {
- return true;
- }
- }
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
-
- return IntervalElement.Top;
- }
- }
-
- public override Element/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
-
- return IntervalElement.Bottom;
- }
- }
-
- /// <summary>
- /// The paramter is the top?
- /// </summary>
- public override bool IsTop(Element/*!*/ element) {
- //Contract.Requires(element != null);
- IntervalElement interval = (IntervalElement)element;
-
- return interval.IsTop();
- }
-
- /// <summary>
- /// The parameter is the bottom?
- /// </summary>
- public override bool IsBottom(Element/*!*/ element) {
- //Contract.Requires(element != null);
- IntervalElement interval = (IntervalElement)element;
-
- return interval.IsBottom();
- }
-
- /// <summary>
- /// The classic, pointwise, join of intervals
- /// </summary>
- public override Element/*!*/ NontrivialJoin(Element/*!*/ left, Element/*!*/ right) {
- //Contract.Requires(right != null);
- //Contract.Requires(left != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- IntervalElement/*!*/ leftInterval = (IntervalElement/*!*/)cce.NonNull(left);
- IntervalElement/*!*/ rightInterval = (IntervalElement/*!*/)cce.NonNull(right);
-
- ExtendedInt inf = ExtendedInt.Inf(leftInterval.Inf, rightInterval.Inf);
- ExtendedInt sup = ExtendedInt.Sup(leftInterval.Sup, rightInterval.Sup);
-
- IntervalElement/*!*/ join = IntervalElement.Factory(inf, sup);
-
- return join;
- }
-
- /// <summary>
- /// The classic, pointwise, meet of intervals
- /// </summary>
- public override Element/*!*/ NontrivialMeet(Element/*!*/ left, Element/*!*/ right) {
- //Contract.Requires(right != null);
- //Contract.Requires(left != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- IntervalElement/*!*/ leftInterval = (IntervalElement/*!*/)cce.NonNull(left);
- IntervalElement/*!*/ rightInterval = (IntervalElement/*!*/)cce.NonNull(right);
-
- ExtendedInt inf = ExtendedInt.Sup(leftInterval.Inf, rightInterval.Inf);
- ExtendedInt sup = ExtendedInt.Inf(leftInterval.Sup, rightInterval.Sup);
-
- return IntervalElement.Factory(inf, sup);
- }
-
-
- /// <summary>
- /// The very simple widening of intervals, to be improved with thresholds
- /// left is the PREVIOUS value in the iterations and right is the NEW one
- /// </summary>
- public override Element/*!*/ Widen(Element/*!*/ left, Element/*!*/ right) {
- //Contract.Requires(right != null);
- //Contract.Requires(left != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- IntervalElement/*!*/ prevInterval = (IntervalElement/*!*/)cce.NonNull(left);
- IntervalElement/*!*/ nextInterval = (IntervalElement/*!*/)cce.NonNull(right);
-
- ExtendedInt inf = nextInterval.Inf < prevInterval.Inf ? ExtendedInt.MinusInfinity : prevInterval.Inf;
- ExtendedInt sup = nextInterval.Sup > prevInterval.Sup ? ExtendedInt.PlusInfinity : prevInterval.Sup;
-
- IntervalElement widening = IntervalElement.Factory(inf, sup);
-
- return widening;
- }
-
-
- /// <summary>
- /// Return true iff the interval left is containted in right
- /// </summary>
- protected override bool AtMost(Element/*!*/ left, Element/*!*/ right) {
- //Contract.Requires(right != null);
- //Contract.Requires(left != null);
- IntervalElement/*!*/ leftInterval = (IntervalElement/*!*/)cce.NonNull(left);
- IntervalElement/*!*/ rightInterval = (IntervalElement/*!*/)cce.NonNull(right);
-
- if (leftInterval.IsBottom() || rightInterval.IsTop())
- return true;
-
- return rightInterval.Inf <= leftInterval.Inf && leftInterval.Sup <= rightInterval.Sup;
- }
-
- /// <summary>
- /// Return just null
- /// </summary>
- public override IExpr GetFoldExpr(Element/*!*/ element) {
- //Contract.Requires(element != null);
- return null;
- }
-
- /// <summary>
- /// return a predicate inf "\leq x and x "\leq" sup (if inf [or sup] is not oo)
- /// </summary>
- public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
- //Contract.Requires(element != null);
- //Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IntervalElement/*!*/ interval = (IntervalElement/*!*/)cce.NonNull(element);
- IExpr lowerBound = null;
- IExpr upperBound = null;
-
- if (!(interval.Inf is InfinitaryInt)) {
- IExpr constant = this.factory.Const(interval.Inf.Value);
- lowerBound = this.factory.AtMost(constant, var); // inf <= var
- }
- if (!(interval.Sup is InfinitaryInt)) {
- IExpr constant = this.factory.Const(interval.Sup.Value);
- upperBound = this.factory.AtMost(var, constant); // var <= inf
- }
-
- if (lowerBound != null && upperBound != null)
- return this.factory.And(lowerBound, upperBound); // inf <= var && var <= sup
- else
- if (lowerBound != null)
- return lowerBound;
- else
- if (upperBound != null)
- return upperBound;
- else // If we reach this point, both lowerBound and upperBound are null, i.e. we have no bounds on var, so we return simply true...
- return this.factory.True;
- }
-
- /// <summary>
- /// For the moment consider just equalities. Other case must be considered
- /// </summary>
- public override bool Understands(IFunctionSymbol/*!*/ f, IList /*<IExpr*//*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- return f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
- }
-
-
- /// <summary>
- /// Evaluate the predicate passed as input according the semantics of intervals
- /// </summary>
- public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ pred) {
- //Contract.Requires(pred != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return this.EvaluatePredicateWithState(pred, null);
- }
-
- /// <summary>
- /// Evaluate the predicate passed as input according the semantics of intervals and the given state.
- /// Right now just basic arithmetic operations are supported. A future extension may consider an implementation of boolean predicates
- /// </summary>
- public override Element/*!*/ EvaluatePredicateWithState(IExpr/*!*/ pred, IFunctionalMap/* Var -> Element */ state) {
- //Contract.Requires(pred != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- if (pred is IFunApp) {
- IFunApp fun = (IFunApp)pred;
- if (fun.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq)) // if it is a symbol of equality
- {
- IExpr/*!*/ leftArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
- IExpr/*!*/ rightArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
- if (leftArg is IVariable) {
- return Eval(rightArg, state);
- } else if (rightArg is IVariable) {
- return Eval(leftArg, state);
- }
- }
- }
- // otherwise we simply return Top
- return IntervalElement.Top;
- }
-
- /// <summary>
- /// Evaluate the expression (that is assured to be an arithmetic expression, in the state passed as a parameter
- /// </summary>
- private IntervalElement/*!*/ Eval(IExpr/*!*/ exp, IFunctionalMap/* Var -> Element */ state) {
- Contract.Requires((exp != null));
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
-
- IntervalElement/*!*/ retVal = (IntervalElement/*!*/)cce.NonNull(Top);
-
- // Eval the expression by structural induction
-
-
- if (exp is IVariable && state != null) // A variable
- {
- object lookup = state[exp];
- if (lookup is IntervalElement)
- retVal = (IntervalElement)lookup;
- else {
- retVal = (IntervalElement)Top;
- }
- } else if (exp is IFunApp) {
- IFunApp fun = (IFunApp)exp;
-
- if (fun.FunctionSymbol is IntSymbol) // An integer
- {
- IntSymbol intSymb = (IntSymbol)fun.FunctionSymbol;
- BigNum val = intSymb.Value;
-
- retVal = IntervalElement.Factory(val);
- } else if (fun.FunctionSymbol.Equals(Int.Negate)) // An unary minus
- {
- IExpr/*!*/ arg = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
- IntervalElement/*!*/ argEval = Eval(arg, state);
- Contract.Assert(argEval != null);
- IntervalElement/*!*/ zero = IntervalElement.Factory(BigNum.ZERO);
- Contract.Assert(zero != null);
-
- retVal = zero - argEval;
- } else if (fun.Arguments.Count == 2) {
- IExpr/*!*/ left = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
- IExpr/*!*/ right = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
-
- IntervalElement/*!*/ leftVal = Eval(left, state);
- Contract.Assert(leftVal != null);
- IntervalElement/*!*/ rightVal = Eval(right, state);
- Contract.Assert(rightVal != null);
-
- if (fun.FunctionSymbol.Equals(Int.Add))
- retVal = leftVal + rightVal;
- else if (fun.FunctionSymbol.Equals(Int.Sub))
- retVal = leftVal - rightVal;
- else if (fun.FunctionSymbol.Equals(Int.Mul))
- retVal = leftVal * rightVal;
- else if (fun.FunctionSymbol.Equals(Int.Div))
- retVal = leftVal / rightVal;
- else if (fun.FunctionSymbol.Equals(Int.Mod))
- retVal = leftVal % rightVal;
- }
- }
-
- return retVal;
- }
-
- /// <summary>
- /// Inner class standing for an interval on integers, possibly unbounded
- /// </summary>
- private class IntervalElement : Element {
- protected static readonly IntervalElement/*!*/ TopInterval = new IntervalElement(new MinusInfinity(), new PlusInfinity()); // Top = [-oo , +oo]
- protected static readonly IntervalElement/*!*/ BottomInterval = new IntervalElement(new PlusInfinity(), new MinusInfinity()); // Bottom = [+oo, -oo]
-
- private readonly ExtendedInt/*!*/ inf;
- private readonly ExtendedInt/*!*/ sup;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(inf != null);
- Contract.Invariant(sup != null);
- }
-
- public ExtendedInt/*!*/ Inf {
- get {
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
-
- return inf;
- }
- }
-
- public ExtendedInt/*!*/ Sup {
- get {
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
-
- return sup;
- }
- }
-
- // Construct the inteval [val, val]
- protected IntervalElement(BigNum val) {
- this.inf = this.sup = ExtendedInt.Factory(val);
- // base();
- }
-
- // Construct the interval [inf, sup]
- protected IntervalElement(BigNum infInt, BigNum supInt) {
- this.inf = ExtendedInt.Factory(infInt);
- this.sup = ExtendedInt.Factory(supInt);
- // base(); // to please the compiler...
- }
-
- protected IntervalElement(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires(sup != null);
- Contract.Requires(inf != null);
- this.inf = inf;
- this.sup = sup;
- // base();
- }
-
- // Construct an Interval
- public static IntervalElement/*!*/ Factory(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires((sup != null));
- Contract.Requires((inf != null));
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- if (inf is MinusInfinity && sup is PlusInfinity)
- return Top;
- if (inf > sup)
- return Bottom;
- // otherwise...
- return new IntervalElement(inf, sup);
- }
-
- public static IntervalElement/*!*/ Factory(BigNum i) {
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- return new IntervalElement(i);
- }
-
- public static IntervalElement/*!*/ Factory(BigNum inf, BigNum sup) {
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- ExtendedInt/*!*/ i = ExtendedInt.Factory(inf);
- ExtendedInt/*!*/ s = ExtendedInt.Factory(sup);
-
- return Factory(i, s);
- }
-
- static public IntervalElement/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
-
- return TopInterval;
- }
- }
-
- static public IntervalElement/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
-
- return BottomInterval;
- }
- }
-
- public bool IsTop() {
- return this.inf is MinusInfinity && this.sup is PlusInfinity;
- }
-
- public bool IsBottom() {
- return this.inf > this.sup;
- }
-
- #region Below are the arithmetic operations lifted to intervals
-
- // Addition
- public static IntervalElement/*!*/ operator +(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- ExtendedInt/*!*/ inf = a.inf + b.inf;
- Contract.Assert(inf != null);
- ExtendedInt/*!*/ sup = a.sup + b.sup;
- Contract.Assert(sup != null);
-
- return Factory(inf, sup);
- }
-
- // Subtraction
- public static IntervalElement/*!*/ operator -(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- ExtendedInt/*!*/ inf = a.inf - b.sup;
- Contract.Assert(inf != null);
-
- ExtendedInt/*!*/ sup = a.sup - b.inf;
- Contract.Assert(sup != null);
- IntervalElement/*!*/ sub = Factory(inf, sup);
- Contract.Assert(sub != null);
-
- return sub;
- }
-
- // Multiplication
- public static IntervalElement/*!*/ operator *(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- ExtendedInt/*!*/ infinf = a.inf * b.inf;
- Contract.Assert(infinf != null);
- ExtendedInt/*!*/ infsup = a.inf * b.sup;
- Contract.Assert(infsup != null);
- ExtendedInt/*!*/ supinf = a.sup * b.inf;
- Contract.Assert(supinf != null);
- ExtendedInt/*!*/ supsup = a.sup * b.sup;
- Contract.Assert(supsup != null);
-
- ExtendedInt/*!*/ inf = ExtendedInt.Inf(infinf, infsup, supinf, supsup);
- Contract.Assert(inf != null);
- ExtendedInt/*!*/ sup = ExtendedInt.Sup(infinf, infsup, supinf, supsup);
- Contract.Assert(sup != null);
-
- return Factory(inf, sup);
- }
-
- // Division
- public static IntervalElement/*!*/ operator /(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- if (b.inf.IsZero && b.sup.IsZero) // Check division by zero
- return IntervalElement.Top;
-
- ExtendedInt/*!*/ infinf = a.inf / b.inf;
- Contract.Assert(infinf != null);
- ExtendedInt/*!*/ infsup = a.inf / b.sup;
- Contract.Assert(infsup != null);
- ExtendedInt/*!*/ supinf = a.sup / b.inf;
- Contract.Assert(supinf != null);
- ExtendedInt/*!*/ supsup = a.sup / b.sup;
- Contract.Assert(supsup != null);
-
- ExtendedInt/*!*/ inf = ExtendedInt.Inf(infinf, infsup, supinf, supsup);
- Contract.Assert(inf != null);
- ExtendedInt/*!*/ sup = ExtendedInt.Sup(infinf, infsup, supinf, supsup);
- Contract.Assert(sup != null);
-
- return Factory(inf, sup);
- }
-
- // Division
- public static IntervalElement/*!*/ operator %(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<IntervalElement>() != null);
- if (b.inf.IsZero && b.sup.IsZero) // Check division by zero
- return IntervalElement.Top;
-
- ExtendedInt/*!*/ infinf = a.inf % b.inf;
- Contract.Assert(infinf != null);
- ExtendedInt/*!*/ infsup = a.inf % b.sup;
- Contract.Assert(infsup != null);
- ExtendedInt/*!*/ supinf = a.sup % b.inf;
- Contract.Assert(supinf != null);
- ExtendedInt/*!*/ supsup = a.sup % b.sup;
- Contract.Assert(supsup != null);
-
- ExtendedInt inf = ExtendedInt.Inf(infinf, infsup, supinf, supsup);
- ExtendedInt sup = ExtendedInt.Sup(infinf, infsup, supinf, supsup);
-
- return Factory(inf, sup);
- }
-
- #endregion
-
- #region Overriden methods
-
- public override Element/*!*/ Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- // Real copying should not be needed because intervals are immutable?
- return this;
- /*
- int valInf = this.inf.Value;
- int valSup = this.sup.Value;
-
- ExtendedInt clonedInf = ExtendedInt.Factory(valInf);
- ExtendedInt clonedSup = ExtendedInt.Factory(valSup);
-
- return Factory(clonedInf, clonedSup);
- */
- }
-
- [Pure]
- public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
- return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return "[" + this.inf + ", " + this.sup + "]";
- }
-
- #endregion
- }
- }
-
-
- /// The interface for an extended integer
- ///
- [ContractClass(typeof(ExtendedIntContracts))]
- abstract class ExtendedInt {
- private static readonly PlusInfinity/*!*/ cachedPlusInf = new PlusInfinity();
- private static readonly MinusInfinity/*!*/ cachedMinusInf = new MinusInfinity();
-
- static public ExtendedInt/*!*/ PlusInfinity {
- get {
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
-
- return cachedPlusInf;
- }
- }
-
- static public ExtendedInt/*!*/ MinusInfinity {
- get {
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
-
- return cachedMinusInf;
- }
- }
-
- public abstract BigNum Value {
- get;
- }
-
- public abstract int Signum {
- get;
- }
-
- public bool IsZero {
- get {
- return Signum == 0;
- }
- }
-
- public bool IsPositive {
- get {
- return Signum > 0;
- }
- }
-
- public bool IsNegative {
- get {
- return Signum < 0;
- }
- }
-
-
- #region Below are the extensions of arithmetic operations on extended integers
-
- // Addition
- public static ExtendedInt/*!*/ operator +(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (a is InfinitaryInt) {
- return a;
- } else if (b is InfinitaryInt) {
- return b;
- } else {
- return ExtendedInt.Factory(a.Value + b.Value);
- }
- }
-
- // Subtraction
- public static ExtendedInt/*!*/ operator -(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (a is InfinitaryInt) {
- return a;
- } else if (b is InfinitaryInt) {
- return UnaryMinus(b);
- } else {
- return ExtendedInt.Factory(a.Value - b.Value);
- }
- }
-
- // Unary minus
- public static ExtendedInt/*!*/ operator -(ExtendedInt/*!*/ a) {
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- // BUGBUG: Some compiler error prevents the unary minus operator from being used
- return UnaryMinus(a);
- }
-
- // Unary minus
- public static ExtendedInt/*!*/ UnaryMinus(ExtendedInt/*!*/ a) {
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (a is PlusInfinity)
- return cachedMinusInf;
- if (a is MinusInfinity)
- return cachedPlusInf;
- else // a is a PureInteger
- return new PureInteger(-a.Value);
- }
-
- // Multiplication
- public static ExtendedInt/*!*/ operator *(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (a.IsZero) {
- return a;
- } else if (b.IsZero) {
- return b;
- } else if (a is InfinitaryInt) {
- if (b.IsPositive) {
- return a;
- } else {
- return UnaryMinus(a);
- }
- } else if (b is InfinitaryInt) {
- if (a.IsPositive) {
- return b;
- } else {
- return UnaryMinus(b);
- }
- } else {
- return ExtendedInt.Factory(a.Value * b.Value);
- }
- }
-
- // Division
- public static ExtendedInt/*!*/ operator /(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (b.IsZero) {
- return a.IsPositive ? (ExtendedInt)cachedPlusInf : cachedMinusInf;
- }
- if (a is InfinitaryInt) {
- return a;
- } else if (b is InfinitaryInt) {
- return b;
- } else {
- return ExtendedInt.Factory(a.Value / b.Value);
- }
- }
-
- // Modulo
- public static ExtendedInt/*!*/ operator %(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (b.IsZero) {
- return a.IsPositive ? (ExtendedInt)cachedPlusInf : cachedMinusInf;
- }
- if (a is InfinitaryInt) {
- return a;
- } else if (b is InfinitaryInt) {
- return b;
- } else {
- return ExtendedInt.Factory(a.Value % b.Value);
- }
- }
-
- #endregion
-
- #region Inf and Sup operations
-
- public abstract int CompareTo(ExtendedInt/*!*/ that);
-
- public static bool operator <(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires(sup != null);
- Contract.Requires(inf != null);
- return inf.CompareTo(sup) < 0;
- }
-
- public static bool operator >(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires(sup != null);
- Contract.Requires(inf != null);
- return inf.CompareTo(sup) > 0;
- }
-
- public static bool operator <=(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires(sup != null);
- Contract.Requires(inf != null);
- return inf.CompareTo(sup) <= 0;
- }
-
- public static bool operator >=(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires(sup != null);
- Contract.Requires(inf != null);
- Contract.Requires(inf != null && sup != null);
- return inf.CompareTo(sup) >= 0;
- }
-
- public static ExtendedInt/*!*/ Inf(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires(sup != null);
- Contract.Requires(inf != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (inf < sup)
- return inf;
- else
- return sup;
- }
-
- public static ExtendedInt/*!*/ Inf(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b, ExtendedInt/*!*/ c, ExtendedInt/*!*/ d) {
- Contract.Requires(d != null);
- Contract.Requires(c != null);
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- ExtendedInt/*!*/ infab = Inf(a, b);
- Contract.Assert(infab != null);
- ExtendedInt/*!*/ infcd = Inf(c, d);
- Contract.Assert(infcd != null);
-
- return Inf(infab, infcd);
- }
-
- public static ExtendedInt/*!*/ Sup(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
- Contract.Requires(sup != null);
- Contract.Requires(inf != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- if (inf > sup)
- return inf;
- else
- return sup;
- }
-
- public static ExtendedInt/*!*/ Sup(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b, ExtendedInt/*!*/ c, ExtendedInt/*!*/ d) {
- Contract.Requires(d != null);
- Contract.Requires(c != null);
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- ExtendedInt/*!*/ supab = Sup(a, b);
- Contract.Assert(supab != null);
- ExtendedInt/*!*/ supcd = Sup(c, d);
- Contract.Assert(supcd != null);
-
- return Sup(supab, supcd);
- }
-
- #endregion
-
- // Return the ExtendedInt corresponding to the value
- public static ExtendedInt/*!*/ Factory(BigNum val) {
- Contract.Ensures(Contract.Result<ExtendedInt>() != null);
- return new PureInteger(val);
- }
- }
- [ContractClassFor(typeof(ExtendedInt))]
- abstract class ExtendedIntContracts : ExtendedInt {
- public override int CompareTo(ExtendedInt that) {
- Contract.Requires(that != null);
- throw new NotImplementedException();
- }
- }
-
- // Stands for a normal (finite) integer x
- class PureInteger : ExtendedInt {
- public PureInteger(BigNum i) {
- this.val = i;
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return this.Value.ToString();
- }
-
- private BigNum val;
- public override BigNum Value {
- get {
- return this.val;
- }
- }
-
- public override int Signum {
- get {
- return val.Signum;
- }
- }
-
- public override int CompareTo(ExtendedInt/*!*/ that) {
- //Contract.Requires(that != null);
- if (that is PlusInfinity)
- return -1;
- else if (that is PureInteger)
- return this.Value.CompareTo(that.Value);
- else // then that is a MinusInfinity
- return 1;
- }
- }
-
- abstract class InfinitaryInt : ExtendedInt {
- public override BigNum Value {
- get {
- throw new InvalidOperationException();
- }
- }
- }
-
- class PlusInfinity : InfinitaryInt {
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return "+oo";
- }
-
- public override int Signum {
- get {
- return 1;
- }
- }
-
- public override int CompareTo(ExtendedInt/*!*/ that) {
- //Contract.Requires(that != null);
- if (that is PlusInfinity)
- return 0;
- else
- return 1;
- }
- }
-
- class MinusInfinity : InfinitaryInt {
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return "-oo";
- }
-
- public override int Signum {
- get {
- return -1;
- }
- }
-
- public override int CompareTo(ExtendedInt/*!*/ that) {
- //Contract.Requires(that != null);
- if (that is MinusInfinity)
- return 0;
- else
- return -1;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+//using System.Compiler.Analysis;
+using Microsoft.AbstractInterpretationFramework.Collections;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+/////////////////////////////////////////////////////////////////////////////////
+// An implementation of the interval abstract domain
+/////////////////////////////////////////////////////////////////////////////////
+
+namespace Microsoft.AbstractInterpretationFramework {
+ public class IntervalLattice : MicroLattice {
+ readonly ILinearExprFactory/*!*/ factory;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(factory != null);
+ }
+
+
+ public IntervalLattice(ILinearExprFactory/*!*/ factory) {
+ Contract.Requires(factory != null);
+ this.factory = factory;
+ // base();
+ }
+
+ public override bool UnderstandsBasicArithmetics {
+ get {
+ return true;
+ }
+ }
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+
+ return IntervalElement.Top;
+ }
+ }
+
+ public override Element/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+
+ return IntervalElement.Bottom;
+ }
+ }
+
+ /// <summary>
+ /// The paramter is the top?
+ /// </summary>
+ public override bool IsTop(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ IntervalElement interval = (IntervalElement)element;
+
+ return interval.IsTop();
+ }
+
+ /// <summary>
+ /// The parameter is the bottom?
+ /// </summary>
+ public override bool IsBottom(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ IntervalElement interval = (IntervalElement)element;
+
+ return interval.IsBottom();
+ }
+
+ /// <summary>
+ /// The classic, pointwise, join of intervals
+ /// </summary>
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ left, Element/*!*/ right) {
+ //Contract.Requires(right != null);
+ //Contract.Requires(left != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ IntervalElement/*!*/ leftInterval = (IntervalElement/*!*/)cce.NonNull(left);
+ IntervalElement/*!*/ rightInterval = (IntervalElement/*!*/)cce.NonNull(right);
+
+ ExtendedInt inf = ExtendedInt.Inf(leftInterval.Inf, rightInterval.Inf);
+ ExtendedInt sup = ExtendedInt.Sup(leftInterval.Sup, rightInterval.Sup);
+
+ IntervalElement/*!*/ join = IntervalElement.Factory(inf, sup);
+
+ return join;
+ }
+
+ /// <summary>
+ /// The classic, pointwise, meet of intervals
+ /// </summary>
+ public override Element/*!*/ NontrivialMeet(Element/*!*/ left, Element/*!*/ right) {
+ //Contract.Requires(right != null);
+ //Contract.Requires(left != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ IntervalElement/*!*/ leftInterval = (IntervalElement/*!*/)cce.NonNull(left);
+ IntervalElement/*!*/ rightInterval = (IntervalElement/*!*/)cce.NonNull(right);
+
+ ExtendedInt inf = ExtendedInt.Sup(leftInterval.Inf, rightInterval.Inf);
+ ExtendedInt sup = ExtendedInt.Inf(leftInterval.Sup, rightInterval.Sup);
+
+ return IntervalElement.Factory(inf, sup);
+ }
+
+
+ /// <summary>
+ /// The very simple widening of intervals, to be improved with thresholds
+ /// left is the PREVIOUS value in the iterations and right is the NEW one
+ /// </summary>
+ public override Element/*!*/ Widen(Element/*!*/ left, Element/*!*/ right) {
+ //Contract.Requires(right != null);
+ //Contract.Requires(left != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ IntervalElement/*!*/ prevInterval = (IntervalElement/*!*/)cce.NonNull(left);
+ IntervalElement/*!*/ nextInterval = (IntervalElement/*!*/)cce.NonNull(right);
+
+ ExtendedInt inf = nextInterval.Inf < prevInterval.Inf ? ExtendedInt.MinusInfinity : prevInterval.Inf;
+ ExtendedInt sup = nextInterval.Sup > prevInterval.Sup ? ExtendedInt.PlusInfinity : prevInterval.Sup;
+
+ IntervalElement widening = IntervalElement.Factory(inf, sup);
+
+ return widening;
+ }
+
+
+ /// <summary>
+ /// Return true iff the interval left is containted in right
+ /// </summary>
+ protected override bool AtMost(Element/*!*/ left, Element/*!*/ right) {
+ //Contract.Requires(right != null);
+ //Contract.Requires(left != null);
+ IntervalElement/*!*/ leftInterval = (IntervalElement/*!*/)cce.NonNull(left);
+ IntervalElement/*!*/ rightInterval = (IntervalElement/*!*/)cce.NonNull(right);
+
+ if (leftInterval.IsBottom() || rightInterval.IsTop())
+ return true;
+
+ return rightInterval.Inf <= leftInterval.Inf && leftInterval.Sup <= rightInterval.Sup;
+ }
+
+ /// <summary>
+ /// Return just null
+ /// </summary>
+ public override IExpr GetFoldExpr(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ return null;
+ }
+
+ /// <summary>
+ /// return a predicate inf "\leq x and x "\leq" sup (if inf [or sup] is not oo)
+ /// </summary>
+ public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ //Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IntervalElement/*!*/ interval = (IntervalElement/*!*/)cce.NonNull(element);
+ IExpr lowerBound = null;
+ IExpr upperBound = null;
+
+ if (!(interval.Inf is InfinitaryInt)) {
+ IExpr constant = this.factory.Const(interval.Inf.Value);
+ lowerBound = this.factory.AtMost(constant, var); // inf <= var
+ }
+ if (!(interval.Sup is InfinitaryInt)) {
+ IExpr constant = this.factory.Const(interval.Sup.Value);
+ upperBound = this.factory.AtMost(var, constant); // var <= inf
+ }
+
+ if (lowerBound != null && upperBound != null)
+ return this.factory.And(lowerBound, upperBound); // inf <= var && var <= sup
+ else
+ if (lowerBound != null)
+ return lowerBound;
+ else
+ if (upperBound != null)
+ return upperBound;
+ else // If we reach this point, both lowerBound and upperBound are null, i.e. we have no bounds on var, so we return simply true...
+ return this.factory.True;
+ }
+
+ /// <summary>
+ /// For the moment consider just equalities. Other case must be considered
+ /// </summary>
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList /*<IExpr*//*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ return f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
+ }
+
+
+ /// <summary>
+ /// Evaluate the predicate passed as input according the semantics of intervals
+ /// </summary>
+ public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ pred) {
+ //Contract.Requires(pred != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return this.EvaluatePredicateWithState(pred, null);
+ }
+
+ /// <summary>
+ /// Evaluate the predicate passed as input according the semantics of intervals and the given state.
+ /// Right now just basic arithmetic operations are supported. A future extension may consider an implementation of boolean predicates
+ /// </summary>
+ public override Element/*!*/ EvaluatePredicateWithState(IExpr/*!*/ pred, IFunctionalMap/* Var -> Element */ state) {
+ //Contract.Requires(pred != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ if (pred is IFunApp) {
+ IFunApp fun = (IFunApp)pred;
+ if (fun.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq)) // if it is a symbol of equality
+ {
+ IExpr/*!*/ leftArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
+ IExpr/*!*/ rightArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
+ if (leftArg is IVariable) {
+ return Eval(rightArg, state);
+ } else if (rightArg is IVariable) {
+ return Eval(leftArg, state);
+ }
+ }
+ }
+ // otherwise we simply return Top
+ return IntervalElement.Top;
+ }
+
+ /// <summary>
+ /// Evaluate the expression (that is assured to be an arithmetic expression, in the state passed as a parameter
+ /// </summary>
+ private IntervalElement/*!*/ Eval(IExpr/*!*/ exp, IFunctionalMap/* Var -> Element */ state) {
+ Contract.Requires((exp != null));
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+
+ IntervalElement/*!*/ retVal = (IntervalElement/*!*/)cce.NonNull(Top);
+
+ // Eval the expression by structural induction
+
+
+ if (exp is IVariable && state != null) // A variable
+ {
+ object lookup = state[exp];
+ if (lookup is IntervalElement)
+ retVal = (IntervalElement)lookup;
+ else {
+ retVal = (IntervalElement)Top;
+ }
+ } else if (exp is IFunApp) {
+ IFunApp fun = (IFunApp)exp;
+
+ if (fun.FunctionSymbol is IntSymbol) // An integer
+ {
+ IntSymbol intSymb = (IntSymbol)fun.FunctionSymbol;
+ BigNum val = intSymb.Value;
+
+ retVal = IntervalElement.Factory(val);
+ } else if (fun.FunctionSymbol.Equals(Int.Negate)) // An unary minus
+ {
+ IExpr/*!*/ arg = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
+ IntervalElement/*!*/ argEval = Eval(arg, state);
+ Contract.Assert(argEval != null);
+ IntervalElement/*!*/ zero = IntervalElement.Factory(BigNum.ZERO);
+ Contract.Assert(zero != null);
+
+ retVal = zero - argEval;
+ } else if (fun.Arguments.Count == 2) {
+ IExpr/*!*/ left = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
+ IExpr/*!*/ right = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
+
+ IntervalElement/*!*/ leftVal = Eval(left, state);
+ Contract.Assert(leftVal != null);
+ IntervalElement/*!*/ rightVal = Eval(right, state);
+ Contract.Assert(rightVal != null);
+
+ if (fun.FunctionSymbol.Equals(Int.Add))
+ retVal = leftVal + rightVal;
+ else if (fun.FunctionSymbol.Equals(Int.Sub))
+ retVal = leftVal - rightVal;
+ else if (fun.FunctionSymbol.Equals(Int.Mul))
+ retVal = leftVal * rightVal;
+ else if (fun.FunctionSymbol.Equals(Int.Div))
+ retVal = leftVal / rightVal;
+ else if (fun.FunctionSymbol.Equals(Int.Mod))
+ retVal = leftVal % rightVal;
+ }
+ }
+
+ return retVal;
+ }
+
+ /// <summary>
+ /// Inner class standing for an interval on integers, possibly unbounded
+ /// </summary>
+ private class IntervalElement : Element {
+ protected static readonly IntervalElement/*!*/ TopInterval = new IntervalElement(new MinusInfinity(), new PlusInfinity()); // Top = [-oo , +oo]
+ protected static readonly IntervalElement/*!*/ BottomInterval = new IntervalElement(new PlusInfinity(), new MinusInfinity()); // Bottom = [+oo, -oo]
+
+ private readonly ExtendedInt/*!*/ inf;
+ private readonly ExtendedInt/*!*/ sup;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(inf != null);
+ Contract.Invariant(sup != null);
+ }
+
+ public ExtendedInt/*!*/ Inf {
+ get {
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+
+ return inf;
+ }
+ }
+
+ public ExtendedInt/*!*/ Sup {
+ get {
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+
+ return sup;
+ }
+ }
+
+ // Construct the inteval [val, val]
+ protected IntervalElement(BigNum val) {
+ this.inf = this.sup = ExtendedInt.Factory(val);
+ // base();
+ }
+
+ // Construct the interval [inf, sup]
+ protected IntervalElement(BigNum infInt, BigNum supInt) {
+ this.inf = ExtendedInt.Factory(infInt);
+ this.sup = ExtendedInt.Factory(supInt);
+ // base(); // to please the compiler...
+ }
+
+ protected IntervalElement(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires(sup != null);
+ Contract.Requires(inf != null);
+ this.inf = inf;
+ this.sup = sup;
+ // base();
+ }
+
+ // Construct an Interval
+ public static IntervalElement/*!*/ Factory(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires((sup != null));
+ Contract.Requires((inf != null));
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ if (inf is MinusInfinity && sup is PlusInfinity)
+ return Top;
+ if (inf > sup)
+ return Bottom;
+ // otherwise...
+ return new IntervalElement(inf, sup);
+ }
+
+ public static IntervalElement/*!*/ Factory(BigNum i) {
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ return new IntervalElement(i);
+ }
+
+ public static IntervalElement/*!*/ Factory(BigNum inf, BigNum sup) {
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ ExtendedInt/*!*/ i = ExtendedInt.Factory(inf);
+ ExtendedInt/*!*/ s = ExtendedInt.Factory(sup);
+
+ return Factory(i, s);
+ }
+
+ static public IntervalElement/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+
+ return TopInterval;
+ }
+ }
+
+ static public IntervalElement/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+
+ return BottomInterval;
+ }
+ }
+
+ public bool IsTop() {
+ return this.inf is MinusInfinity && this.sup is PlusInfinity;
+ }
+
+ public bool IsBottom() {
+ return this.inf > this.sup;
+ }
+
+ #region Below are the arithmetic operations lifted to intervals
+
+ // Addition
+ public static IntervalElement/*!*/ operator +(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ ExtendedInt/*!*/ inf = a.inf + b.inf;
+ Contract.Assert(inf != null);
+ ExtendedInt/*!*/ sup = a.sup + b.sup;
+ Contract.Assert(sup != null);
+
+ return Factory(inf, sup);
+ }
+
+ // Subtraction
+ public static IntervalElement/*!*/ operator -(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ ExtendedInt/*!*/ inf = a.inf - b.sup;
+ Contract.Assert(inf != null);
+
+ ExtendedInt/*!*/ sup = a.sup - b.inf;
+ Contract.Assert(sup != null);
+ IntervalElement/*!*/ sub = Factory(inf, sup);
+ Contract.Assert(sub != null);
+
+ return sub;
+ }
+
+ // Multiplication
+ public static IntervalElement/*!*/ operator *(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ ExtendedInt/*!*/ infinf = a.inf * b.inf;
+ Contract.Assert(infinf != null);
+ ExtendedInt/*!*/ infsup = a.inf * b.sup;
+ Contract.Assert(infsup != null);
+ ExtendedInt/*!*/ supinf = a.sup * b.inf;
+ Contract.Assert(supinf != null);
+ ExtendedInt/*!*/ supsup = a.sup * b.sup;
+ Contract.Assert(supsup != null);
+
+ ExtendedInt/*!*/ inf = ExtendedInt.Inf(infinf, infsup, supinf, supsup);
+ Contract.Assert(inf != null);
+ ExtendedInt/*!*/ sup = ExtendedInt.Sup(infinf, infsup, supinf, supsup);
+ Contract.Assert(sup != null);
+
+ return Factory(inf, sup);
+ }
+
+ // Division
+ public static IntervalElement/*!*/ operator /(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ if (b.inf.IsZero && b.sup.IsZero) // Check division by zero
+ return IntervalElement.Top;
+
+ ExtendedInt/*!*/ infinf = a.inf / b.inf;
+ Contract.Assert(infinf != null);
+ ExtendedInt/*!*/ infsup = a.inf / b.sup;
+ Contract.Assert(infsup != null);
+ ExtendedInt/*!*/ supinf = a.sup / b.inf;
+ Contract.Assert(supinf != null);
+ ExtendedInt/*!*/ supsup = a.sup / b.sup;
+ Contract.Assert(supsup != null);
+
+ ExtendedInt/*!*/ inf = ExtendedInt.Inf(infinf, infsup, supinf, supsup);
+ Contract.Assert(inf != null);
+ ExtendedInt/*!*/ sup = ExtendedInt.Sup(infinf, infsup, supinf, supsup);
+ Contract.Assert(sup != null);
+
+ return Factory(inf, sup);
+ }
+
+ // Division
+ public static IntervalElement/*!*/ operator %(IntervalElement/*!*/ a, IntervalElement/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<IntervalElement>() != null);
+ if (b.inf.IsZero && b.sup.IsZero) // Check division by zero
+ return IntervalElement.Top;
+
+ ExtendedInt/*!*/ infinf = a.inf % b.inf;
+ Contract.Assert(infinf != null);
+ ExtendedInt/*!*/ infsup = a.inf % b.sup;
+ Contract.Assert(infsup != null);
+ ExtendedInt/*!*/ supinf = a.sup % b.inf;
+ Contract.Assert(supinf != null);
+ ExtendedInt/*!*/ supsup = a.sup % b.sup;
+ Contract.Assert(supsup != null);
+
+ ExtendedInt inf = ExtendedInt.Inf(infinf, infsup, supinf, supsup);
+ ExtendedInt sup = ExtendedInt.Sup(infinf, infsup, supinf, supsup);
+
+ return Factory(inf, sup);
+ }
+
+ #endregion
+
+ #region Overriden methods
+
+ public override Element/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ // Real copying should not be needed because intervals are immutable?
+ return this;
+ /*
+ int valInf = this.inf.Value;
+ int valSup = this.sup.Value;
+
+ ExtendedInt clonedInf = ExtendedInt.Factory(valInf);
+ ExtendedInt clonedSup = ExtendedInt.Factory(valSup);
+
+ return Factory(clonedInf, clonedSup);
+ */
+ }
+
+ [Pure]
+ public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
+ return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "[" + this.inf + ", " + this.sup + "]";
+ }
+
+ #endregion
+ }
+ }
+
+
+ /// The interface for an extended integer
+ ///
+ [ContractClass(typeof(ExtendedIntContracts))]
+ abstract class ExtendedInt {
+ private static readonly PlusInfinity/*!*/ cachedPlusInf = new PlusInfinity();
+ private static readonly MinusInfinity/*!*/ cachedMinusInf = new MinusInfinity();
+
+ static public ExtendedInt/*!*/ PlusInfinity {
+ get {
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+
+ return cachedPlusInf;
+ }
+ }
+
+ static public ExtendedInt/*!*/ MinusInfinity {
+ get {
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+
+ return cachedMinusInf;
+ }
+ }
+
+ public abstract BigNum Value {
+ get;
+ }
+
+ public abstract int Signum {
+ get;
+ }
+
+ public bool IsZero {
+ get {
+ return Signum == 0;
+ }
+ }
+
+ public bool IsPositive {
+ get {
+ return Signum > 0;
+ }
+ }
+
+ public bool IsNegative {
+ get {
+ return Signum < 0;
+ }
+ }
+
+
+ #region Below are the extensions of arithmetic operations on extended integers
+
+ // Addition
+ public static ExtendedInt/*!*/ operator +(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (a is InfinitaryInt) {
+ return a;
+ } else if (b is InfinitaryInt) {
+ return b;
+ } else {
+ return ExtendedInt.Factory(a.Value + b.Value);
+ }
+ }
+
+ // Subtraction
+ public static ExtendedInt/*!*/ operator -(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (a is InfinitaryInt) {
+ return a;
+ } else if (b is InfinitaryInt) {
+ return UnaryMinus(b);
+ } else {
+ return ExtendedInt.Factory(a.Value - b.Value);
+ }
+ }
+
+ // Unary minus
+ public static ExtendedInt/*!*/ operator -(ExtendedInt/*!*/ a) {
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ // BUGBUG: Some compiler error prevents the unary minus operator from being used
+ return UnaryMinus(a);
+ }
+
+ // Unary minus
+ public static ExtendedInt/*!*/ UnaryMinus(ExtendedInt/*!*/ a) {
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (a is PlusInfinity)
+ return cachedMinusInf;
+ if (a is MinusInfinity)
+ return cachedPlusInf;
+ else // a is a PureInteger
+ return new PureInteger(-a.Value);
+ }
+
+ // Multiplication
+ public static ExtendedInt/*!*/ operator *(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (a.IsZero) {
+ return a;
+ } else if (b.IsZero) {
+ return b;
+ } else if (a is InfinitaryInt) {
+ if (b.IsPositive) {
+ return a;
+ } else {
+ return UnaryMinus(a);
+ }
+ } else if (b is InfinitaryInt) {
+ if (a.IsPositive) {
+ return b;
+ } else {
+ return UnaryMinus(b);
+ }
+ } else {
+ return ExtendedInt.Factory(a.Value * b.Value);
+ }
+ }
+
+ // Division
+ public static ExtendedInt/*!*/ operator /(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (b.IsZero) {
+ return a.IsPositive ? (ExtendedInt)cachedPlusInf : cachedMinusInf;
+ }
+ if (a is InfinitaryInt) {
+ return a;
+ } else if (b is InfinitaryInt) {
+ return b;
+ } else {
+ return ExtendedInt.Factory(a.Value / b.Value);
+ }
+ }
+
+ // Modulo
+ public static ExtendedInt/*!*/ operator %(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (b.IsZero) {
+ return a.IsPositive ? (ExtendedInt)cachedPlusInf : cachedMinusInf;
+ }
+ if (a is InfinitaryInt) {
+ return a;
+ } else if (b is InfinitaryInt) {
+ return b;
+ } else {
+ return ExtendedInt.Factory(a.Value % b.Value);
+ }
+ }
+
+ #endregion
+
+ #region Inf and Sup operations
+
+ public abstract int CompareTo(ExtendedInt/*!*/ that);
+
+ public static bool operator <(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires(sup != null);
+ Contract.Requires(inf != null);
+ return inf.CompareTo(sup) < 0;
+ }
+
+ public static bool operator >(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires(sup != null);
+ Contract.Requires(inf != null);
+ return inf.CompareTo(sup) > 0;
+ }
+
+ public static bool operator <=(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires(sup != null);
+ Contract.Requires(inf != null);
+ return inf.CompareTo(sup) <= 0;
+ }
+
+ public static bool operator >=(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires(sup != null);
+ Contract.Requires(inf != null);
+ Contract.Requires(inf != null && sup != null);
+ return inf.CompareTo(sup) >= 0;
+ }
+
+ public static ExtendedInt/*!*/ Inf(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires(sup != null);
+ Contract.Requires(inf != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (inf < sup)
+ return inf;
+ else
+ return sup;
+ }
+
+ public static ExtendedInt/*!*/ Inf(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b, ExtendedInt/*!*/ c, ExtendedInt/*!*/ d) {
+ Contract.Requires(d != null);
+ Contract.Requires(c != null);
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ ExtendedInt/*!*/ infab = Inf(a, b);
+ Contract.Assert(infab != null);
+ ExtendedInt/*!*/ infcd = Inf(c, d);
+ Contract.Assert(infcd != null);
+
+ return Inf(infab, infcd);
+ }
+
+ public static ExtendedInt/*!*/ Sup(ExtendedInt/*!*/ inf, ExtendedInt/*!*/ sup) {
+ Contract.Requires(sup != null);
+ Contract.Requires(inf != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ if (inf > sup)
+ return inf;
+ else
+ return sup;
+ }
+
+ public static ExtendedInt/*!*/ Sup(ExtendedInt/*!*/ a, ExtendedInt/*!*/ b, ExtendedInt/*!*/ c, ExtendedInt/*!*/ d) {
+ Contract.Requires(d != null);
+ Contract.Requires(c != null);
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ ExtendedInt/*!*/ supab = Sup(a, b);
+ Contract.Assert(supab != null);
+ ExtendedInt/*!*/ supcd = Sup(c, d);
+ Contract.Assert(supcd != null);
+
+ return Sup(supab, supcd);
+ }
+
+ #endregion
+
+ // Return the ExtendedInt corresponding to the value
+ public static ExtendedInt/*!*/ Factory(BigNum val) {
+ Contract.Ensures(Contract.Result<ExtendedInt>() != null);
+ return new PureInteger(val);
+ }
+ }
+ [ContractClassFor(typeof(ExtendedInt))]
+ abstract class ExtendedIntContracts : ExtendedInt {
+ public override int CompareTo(ExtendedInt that) {
+ Contract.Requires(that != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ // Stands for a normal (finite) integer x
+ class PureInteger : ExtendedInt {
+ public PureInteger(BigNum i) {
+ this.val = i;
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this.Value.ToString();
+ }
+
+ private BigNum val;
+ public override BigNum Value {
+ get {
+ return this.val;
+ }
+ }
+
+ public override int Signum {
+ get {
+ return val.Signum;
+ }
+ }
+
+ public override int CompareTo(ExtendedInt/*!*/ that) {
+ //Contract.Requires(that != null);
+ if (that is PlusInfinity)
+ return -1;
+ else if (that is PureInteger)
+ return this.Value.CompareTo(that.Value);
+ else // then that is a MinusInfinity
+ return 1;
+ }
+ }
+
+ abstract class InfinitaryInt : ExtendedInt {
+ public override BigNum Value {
+ get {
+ throw new InvalidOperationException();
+ }
+ }
+ }
+
+ class PlusInfinity : InfinitaryInt {
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "+oo";
+ }
+
+ public override int Signum {
+ get {
+ return 1;
+ }
+ }
+
+ public override int CompareTo(ExtendedInt/*!*/ that) {
+ //Contract.Requires(that != null);
+ if (that is PlusInfinity)
+ return 0;
+ else
+ return 1;
+ }
+ }
+
+ class MinusInfinity : InfinitaryInt {
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "-oo";
+ }
+
+ public override int Signum {
+ get {
+ return -1;
+ }
+ }
+
+ public override int CompareTo(ExtendedInt/*!*/ that) {
+ //Contract.Requires(that != null);
+ if (that is MinusInfinity)
+ return 0;
+ else
+ return -1;
+ }
+ }
+}
diff --git a/Source/AIFramework/VariableMap/MicroLattice.cs b/Source/AIFramework/VariableMap/MicroLattice.cs
index ef98f8f7..f46349b7 100644
--- a/Source/AIFramework/VariableMap/MicroLattice.cs
+++ b/Source/AIFramework/VariableMap/MicroLattice.cs
@@ -1,105 +1,105 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework
-{
- using System.Diagnostics.Contracts;
- using System.Collections;
- using System.Diagnostics;
- //using System.Compiler;
- using Microsoft.AbstractInterpretationFramework.Collections;
-
- /// <summary>
- /// Interface for a lattice that works on a per-variable basis.
- /// </summary>
- ///
- [ContractClass(typeof(MicroLatticeContracts))]
- public abstract class MicroLattice : MathematicalLattice
- {
- /// <summary>
- /// Returns the predicate on the given variable for the given
- /// lattice element.
- /// </summary>
- public abstract IExpr/*!*/ ToPredicate(IVariable/*!*/ v, Element/*!*/ e);
- /* requires !e.IsBottom && !e.IsTop; */
-
- /// <summary>
- /// Allows the lattice to specify whether it understands a particular function symbol.
- ///
- /// The lattice is always allowed to "true" even when it really can't do anything with
- /// such functions; however, it is advantageous to say "false" when possible to avoid
- /// being called to do certain things.
- ///
- /// The arguments to a function are provided for context so that the lattice can say
- /// true or false for the same function symbol in different situations. For example,
- /// a lattice may understand the multiplication of a variable and a constant but not
- /// of two variables. The implementation of a lattice should not hold on to the
- /// arguments.
- /// </summary>
- /// <param name="f">The function symbol.</param>
- /// <param name="args">The argument context.</param>
- /// <returns>True if it may understand f, false if it does not understand f.</returns>
- public abstract bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args);
-
- /// <summary>
- /// Set this property to true if the implemented MicroLattice can handle basic arithmetic.
- /// Stated otherwise this property is set to true if the MicroLattice provides a transfer function for a predicate in a given state
- /// </summary>
- public virtual bool UnderstandsBasicArithmetics
- {
- get { return false; }
- }
-
- /// <summary>
- /// Evaluate the predicate e and a yield the lattice element
- /// that is implied by it.
- /// </summary>
- /// <param name="e">The predicate that is assumed to contain 1 variable.</param>
- /// <returns>The most precise lattice element that is implied by the predicate.</returns>
- public abstract Element/*!*/ EvaluatePredicate(IExpr/*!*/ e);
-
- /// <summary>
- /// Evaluate the predicate e and yield an overapproximation of the predicate under the state that is passed as a parameter
- /// Note that unless the subclass implement it, the default behavior is to evaluate the predicate stateless, that implies that it
- /// is evaluated in any possible context, i.e. it is an upper approximation
- /// </summary>
- public virtual Element/*!*/ EvaluatePredicateWithState(IExpr/*!*/ e, IFunctionalMap state){
-Contract.Requires(e != null);
-Contract.Ensures(Contract.Result<Element>() != null);
- return EvaluatePredicate(e);
- }
-
- /// <summary>
- /// Give an expression (often a value) that can be used to substitute for
- /// the variable.
- /// </summary>
- /// <param name="e">A lattice element.</param>
- /// <returns>The null value if no such expression can be given.</returns>
- public abstract IExpr GetFoldExpr(Element/*!*/ e);
- }
- [ContractClassFor(typeof(MicroLattice))]
- public abstract class MicroLatticeContracts : MicroLattice {
- public override IExpr ToPredicate(IVariable v, MathematicalLattice.Element e) {
- Contract.Requires(v != null);
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- throw new System.NotImplementedException();
- }
- public override bool Understands(IFunctionSymbol f, IList args) {
- Contract.Requires(f != null);
- Contract.Requires(args != null);
- throw new System.NotImplementedException();
- }
- public override Element EvaluatePredicate(IExpr e) {
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- throw new System.NotImplementedException();
- }
- public override IExpr GetFoldExpr(MathematicalLattice.Element e) {
- Contract.Requires(e != null);
- throw new System.NotImplementedException();
- }
- }
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework
+{
+ using System.Diagnostics.Contracts;
+ using System.Collections;
+ using System.Diagnostics;
+ //using System.Compiler;
+ using Microsoft.AbstractInterpretationFramework.Collections;
+
+ /// <summary>
+ /// Interface for a lattice that works on a per-variable basis.
+ /// </summary>
+ ///
+ [ContractClass(typeof(MicroLatticeContracts))]
+ public abstract class MicroLattice : MathematicalLattice
+ {
+ /// <summary>
+ /// Returns the predicate on the given variable for the given
+ /// lattice element.
+ /// </summary>
+ public abstract IExpr/*!*/ ToPredicate(IVariable/*!*/ v, Element/*!*/ e);
+ /* requires !e.IsBottom && !e.IsTop; */
+
+ /// <summary>
+ /// Allows the lattice to specify whether it understands a particular function symbol.
+ ///
+ /// The lattice is always allowed to "true" even when it really can't do anything with
+ /// such functions; however, it is advantageous to say "false" when possible to avoid
+ /// being called to do certain things.
+ ///
+ /// The arguments to a function are provided for context so that the lattice can say
+ /// true or false for the same function symbol in different situations. For example,
+ /// a lattice may understand the multiplication of a variable and a constant but not
+ /// of two variables. The implementation of a lattice should not hold on to the
+ /// arguments.
+ /// </summary>
+ /// <param name="f">The function symbol.</param>
+ /// <param name="args">The argument context.</param>
+ /// <returns>True if it may understand f, false if it does not understand f.</returns>
+ public abstract bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args);
+
+ /// <summary>
+ /// Set this property to true if the implemented MicroLattice can handle basic arithmetic.
+ /// Stated otherwise this property is set to true if the MicroLattice provides a transfer function for a predicate in a given state
+ /// </summary>
+ public virtual bool UnderstandsBasicArithmetics
+ {
+ get { return false; }
+ }
+
+ /// <summary>
+ /// Evaluate the predicate e and a yield the lattice element
+ /// that is implied by it.
+ /// </summary>
+ /// <param name="e">The predicate that is assumed to contain 1 variable.</param>
+ /// <returns>The most precise lattice element that is implied by the predicate.</returns>
+ public abstract Element/*!*/ EvaluatePredicate(IExpr/*!*/ e);
+
+ /// <summary>
+ /// Evaluate the predicate e and yield an overapproximation of the predicate under the state that is passed as a parameter
+ /// Note that unless the subclass implement it, the default behavior is to evaluate the predicate stateless, that implies that it
+ /// is evaluated in any possible context, i.e. it is an upper approximation
+ /// </summary>
+ public virtual Element/*!*/ EvaluatePredicateWithState(IExpr/*!*/ e, IFunctionalMap state){
+Contract.Requires(e != null);
+Contract.Ensures(Contract.Result<Element>() != null);
+ return EvaluatePredicate(e);
+ }
+
+ /// <summary>
+ /// Give an expression (often a value) that can be used to substitute for
+ /// the variable.
+ /// </summary>
+ /// <param name="e">A lattice element.</param>
+ /// <returns>The null value if no such expression can be given.</returns>
+ public abstract IExpr GetFoldExpr(Element/*!*/ e);
+ }
+ [ContractClassFor(typeof(MicroLattice))]
+ public abstract class MicroLatticeContracts : MicroLattice {
+ public override IExpr ToPredicate(IVariable v, MathematicalLattice.Element e) {
+ Contract.Requires(v != null);
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ throw new System.NotImplementedException();
+ }
+ public override bool Understands(IFunctionSymbol f, IList args) {
+ Contract.Requires(f != null);
+ Contract.Requires(args != null);
+ throw new System.NotImplementedException();
+ }
+ public override Element EvaluatePredicate(IExpr e) {
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ throw new System.NotImplementedException();
+ }
+ public override IExpr GetFoldExpr(MathematicalLattice.Element e) {
+ Contract.Requires(e != null);
+ throw new System.NotImplementedException();
+ }
+ }
} \ No newline at end of file
diff --git a/Source/AIFramework/VariableMap/Nullness.cs b/Source/AIFramework/VariableMap/Nullness.cs
index 613f55e0..474792e0 100644
--- a/Source/AIFramework/VariableMap/Nullness.cs
+++ b/Source/AIFramework/VariableMap/Nullness.cs
@@ -1,260 +1,260 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System.Diagnostics.Contracts;
-namespace Microsoft.AbstractInterpretationFramework {
- using System.Collections;
- using System.Diagnostics;
- //using System.Compiler.Analysis;
-
- public class NullnessLattice : MicroLattice {
- readonly INullnessFactory/*!*/ factory;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(factory != null);
- }
-
-
- public NullnessLattice(INullnessFactory/*!*/ factory) {
- Contract.Requires(factory != null);
- this.factory = factory;
- // base();
- }
-
- enum Value {
- Bottom,
- NotNull,
- Null,
- MayBeNull
- }
-
- private class Elt : Element {
- public Value value;
-
- public Elt(Value v) {
- this.value = v;
- }
-
- [Pure]
- public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
- return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
- }
-
- public override Element/*!*/ Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(this.value);
- }
- }
-
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(Value.MayBeNull);
- }
- }
-
- public override Element/*!*/ Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(Value.Bottom);
- }
- }
-
- public static Element/*!*/ Null {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(Value.Null);
- }
- }
-
- public static Element/*!*/ NotNull {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(Value.NotNull);
- }
- }
-
- public override bool IsTop(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- return e.value == Value.MayBeNull;
- }
-
- public override bool IsBottom(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- return e.value == Value.Bottom;
- }
-
- public override Lattice.Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Lattice.Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- return (a.value == b.value) ? a : (Elt)Top;
- }
-
- public override Lattice.Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Lattice.Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- return (a.value == b.value) ? a : (Elt)Bottom;
- }
-
- public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return Join(first, second);
- }
-
- protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
- {
- //Contract.Requires(first != null);
- //Contract.Requires(second != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
- return a.value == b.value;
- }
-
- public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
- //Contract.Requires(element != null);
- //Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- Elt e = (Elt)element;
-
- if (e.value == Value.NotNull) {
- return factory.Neq(var, factory.Null);
- }
- if (e.value == Value.Null) {
- return factory.Eq(var, factory.Null);
- }
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- throw new System.Exception();
- }
-
- public override IExpr GetFoldExpr(Element/*!*/ e) {
- //Contract.Requires(e != null);
- Elt elt = (Elt)e;
- if (elt.value == Value.Null) {
- return factory.Null;
- } else {
- // can't fold into an expression
- return null;
- }
- }
-
- public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- if (f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq) ||
- f.Equals(Microsoft.AbstractInterpretationFramework.Value.Neq)) {
-
- Contract.Assert(args.Count == 2);
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
-
- // Look for "x OP null" or "null OP x" where OP is "==" or "!=".
- if (arg0 is IVariable && arg1 is IFunApp && ((IFunApp)arg1).FunctionSymbol == Ref.Null) {
- return true;
- } else if (arg1 is IVariable && arg0 is IFunApp && ((IFunApp)arg0).FunctionSymbol == Ref.Null) {
- return true;
- }
- }
- return false;
- }
-
- public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ e) {
- //Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- IFunApp nary = e as IFunApp;
- if (nary != null) {
- bool isEq = nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
- if (isEq || nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Neq)) {
- IList/*<IExpr!>*//*!*/ args = nary.Arguments;
- Contract.Assert(args != null);
- Contract.Assert(args.Count == 2);
- IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
- IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
-
- // Look for "x OP null" or "null OP x" where OP is "==" or "!=".
- IVariable var = null;
- if (arg0 is IVariable && arg1 is IFunApp && ((IFunApp)arg1).FunctionSymbol == Ref.Null) {
- var = (IVariable)arg0;
- } else if (arg1 is IVariable && arg0 is IFunApp && ((IFunApp)arg0).FunctionSymbol == Ref.Null) {
- var = (IVariable)arg1;
- }
-
- if (var != null) // found the pattern
- {
- return isEq ? Null : NotNull;
- }
- }
- }
- return Top;
- }
- }
-
-#if false
-
- public class NullnessMicroLattice : MicroLattice
- {
- public override MicroLatticeElement Top { get { return NullnessLatticeElement.Top; } }
- public override MicroLatticeElement Bottom { get { return NullnessLatticeElement.Bottom; } }
-
-
- public override MicroLatticeElement EvaluateExpression (Expr e, LookupValue lookup)
- {
- if (e is LiteralExpr && ((LiteralExpr)e).Val == null)
- {
- return NullnessLatticeElement.Null;
- }
- return Top;
- }
-
-
- public override MicroLatticeElement EvaluatePredicate (Expr e, LookupValue lookup)
- {
- NAryExpr nary = e as NAryExpr;
- if (nary != null &&
- (nary.Fun.FunctionName.Equals("==") || nary.Fun.FunctionName.Equals("!=")))
- {
- Debug.Assert(nary.Args.Length == 2);
-
- Expr arg0 = nary.Args[0], arg1 = nary.Args[1];
- Variable var = null;
-
- // Look for "x OP null" or "null OP x" where OP is "==" or "!=".
- if (arg0 is IdentifierExpr && arg1 is LiteralExpr && ((LiteralExpr)arg1).Val == null)
- {
- var = ((IdentifierExpr)arg0).Decl;
- }
- else if (arg1 is IdentifierExpr && arg0 is LiteralExpr && ((LiteralExpr)arg0).Val == null)
- {
- var = ((IdentifierExpr)arg1).Decl;
- }
-
- if (var != null) // found the pattern
- {
- return nary.Fun.FunctionName.Equals("==") ?
- NullnessLatticeElement.Null :
- NullnessLatticeElement.NotNull;
- }
- }
- return Top;
- }
- }
-
-#endif
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System.Diagnostics.Contracts;
+namespace Microsoft.AbstractInterpretationFramework {
+ using System.Collections;
+ using System.Diagnostics;
+ //using System.Compiler.Analysis;
+
+ public class NullnessLattice : MicroLattice {
+ readonly INullnessFactory/*!*/ factory;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(factory != null);
+ }
+
+
+ public NullnessLattice(INullnessFactory/*!*/ factory) {
+ Contract.Requires(factory != null);
+ this.factory = factory;
+ // base();
+ }
+
+ enum Value {
+ Bottom,
+ NotNull,
+ Null,
+ MayBeNull
+ }
+
+ private class Elt : Element {
+ public Value value;
+
+ public Elt(Value v) {
+ this.value = v;
+ }
+
+ [Pure]
+ public override System.Collections.Generic.ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<System.Collections.Generic.ICollection<IVariable>>()));
+ return cce.NonNull(new System.Collections.Generic.List<IVariable/*!*/>()).AsReadOnly();
+ }
+
+ public override Element/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(this.value);
+ }
+ }
+
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(Value.MayBeNull);
+ }
+ }
+
+ public override Element/*!*/ Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(Value.Bottom);
+ }
+ }
+
+ public static Element/*!*/ Null {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(Value.Null);
+ }
+ }
+
+ public static Element/*!*/ NotNull {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(Value.NotNull);
+ }
+ }
+
+ public override bool IsTop(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ return e.value == Value.MayBeNull;
+ }
+
+ public override bool IsBottom(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ return e.value == Value.Bottom;
+ }
+
+ public override Lattice.Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Lattice.Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ return (a.value == b.value) ? a : (Elt)Top;
+ }
+
+ public override Lattice.Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Lattice.Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ return (a.value == b.value) ? a : (Elt)Bottom;
+ }
+
+ public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Join(first, second);
+ }
+
+ protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) // this <= that
+ {
+ //Contract.Requires(first != null);
+ //Contract.Requires(second != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+ return a.value == b.value;
+ }
+
+ public override IExpr/*!*/ ToPredicate(IVariable/*!*/ var, Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ //Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ Elt e = (Elt)element;
+
+ if (e.value == Value.NotNull) {
+ return factory.Neq(var, factory.Null);
+ }
+ if (e.value == Value.Null) {
+ return factory.Eq(var, factory.Null);
+ }
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ throw new System.Exception();
+ }
+
+ public override IExpr GetFoldExpr(Element/*!*/ e) {
+ //Contract.Requires(e != null);
+ Elt elt = (Elt)e;
+ if (elt.value == Value.Null) {
+ return factory.Null;
+ } else {
+ // can't fold into an expression
+ return null;
+ }
+ }
+
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList/*<IExpr!>*//*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ if (f.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq) ||
+ f.Equals(Microsoft.AbstractInterpretationFramework.Value.Neq)) {
+
+ Contract.Assert(args.Count == 2);
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
+
+ // Look for "x OP null" or "null OP x" where OP is "==" or "!=".
+ if (arg0 is IVariable && arg1 is IFunApp && ((IFunApp)arg1).FunctionSymbol == Ref.Null) {
+ return true;
+ } else if (arg1 is IVariable && arg0 is IFunApp && ((IFunApp)arg0).FunctionSymbol == Ref.Null) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public override Element/*!*/ EvaluatePredicate(IExpr/*!*/ e) {
+ //Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ IFunApp nary = e as IFunApp;
+ if (nary != null) {
+ bool isEq = nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq);
+ if (isEq || nary.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Neq)) {
+ IList/*<IExpr!>*//*!*/ args = nary.Arguments;
+ Contract.Assert(args != null);
+ Contract.Assert(args.Count == 2);
+ IExpr/*!*/ arg0 = (IExpr/*!*/)cce.NonNull(args[0]);
+ IExpr/*!*/ arg1 = (IExpr/*!*/)cce.NonNull(args[1]);
+
+ // Look for "x OP null" or "null OP x" where OP is "==" or "!=".
+ IVariable var = null;
+ if (arg0 is IVariable && arg1 is IFunApp && ((IFunApp)arg1).FunctionSymbol == Ref.Null) {
+ var = (IVariable)arg0;
+ } else if (arg1 is IVariable && arg0 is IFunApp && ((IFunApp)arg0).FunctionSymbol == Ref.Null) {
+ var = (IVariable)arg1;
+ }
+
+ if (var != null) // found the pattern
+ {
+ return isEq ? Null : NotNull;
+ }
+ }
+ }
+ return Top;
+ }
+ }
+
+#if false
+
+ public class NullnessMicroLattice : MicroLattice
+ {
+ public override MicroLatticeElement Top { get { return NullnessLatticeElement.Top; } }
+ public override MicroLatticeElement Bottom { get { return NullnessLatticeElement.Bottom; } }
+
+
+ public override MicroLatticeElement EvaluateExpression (Expr e, LookupValue lookup)
+ {
+ if (e is LiteralExpr && ((LiteralExpr)e).Val == null)
+ {
+ return NullnessLatticeElement.Null;
+ }
+ return Top;
+ }
+
+
+ public override MicroLatticeElement EvaluatePredicate (Expr e, LookupValue lookup)
+ {
+ NAryExpr nary = e as NAryExpr;
+ if (nary != null &&
+ (nary.Fun.FunctionName.Equals("==") || nary.Fun.FunctionName.Equals("!=")))
+ {
+ Debug.Assert(nary.Args.Length == 2);
+
+ Expr arg0 = nary.Args[0], arg1 = nary.Args[1];
+ Variable var = null;
+
+ // Look for "x OP null" or "null OP x" where OP is "==" or "!=".
+ if (arg0 is IdentifierExpr && arg1 is LiteralExpr && ((LiteralExpr)arg1).Val == null)
+ {
+ var = ((IdentifierExpr)arg0).Decl;
+ }
+ else if (arg1 is IdentifierExpr && arg0 is LiteralExpr && ((LiteralExpr)arg0).Val == null)
+ {
+ var = ((IdentifierExpr)arg1).Decl;
+ }
+
+ if (var != null) // found the pattern
+ {
+ return nary.Fun.FunctionName.Equals("==") ?
+ NullnessLatticeElement.Null :
+ NullnessLatticeElement.NotNull;
+ }
+ }
+ return Top;
+ }
+ }
+
+#endif
+
+}
diff --git a/Source/AIFramework/VariableMap/VariableMapLattice.cs b/Source/AIFramework/VariableMap/VariableMapLattice.cs
index 172cef01..752d3f01 100644
--- a/Source/AIFramework/VariableMap/VariableMapLattice.cs
+++ b/Source/AIFramework/VariableMap/VariableMapLattice.cs
@@ -1,854 +1,854 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.AbstractInterpretationFramework {
- using System.Diagnostics.Contracts;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
-
- using Microsoft.AbstractInterpretationFramework;
- using Microsoft.AbstractInterpretationFramework.Collections;
-
- using Microsoft.Boogie;
-
- using IMutableSet = Microsoft.Boogie.GSet<object>;
- using ISet = Microsoft.Boogie.GSet<object>;
- using Set = Microsoft.Boogie.GSet<object>;
- using HashSet = Microsoft.Boogie.GSet<object>;
-
- /// <summary>
- /// Creates a lattice that works for several variables given a MicroLattice. Assumes
- /// if one variable is bottom, then all variables are bottom.
- /// </summary>
- public class VariableMapLattice : Lattice {
- private class Elt : Element {
- /// <summary>
- /// IsBottom(e) iff e.constraints == null
- /// </summary>
- /*MayBeNull*/
- private IFunctionalMap constraints; // of type IVariable -> LATTICE_ELEMENT
- public IFunctionalMap Constraints {
- get {
- return this.constraints;
- }
- }
-
- private Elt(bool top) {
- if (top) {
- this.constraints = FunctionalHashtable.Empty;
- } else {
- this.constraints = null;
- }
- }
-
- public override Element/*!*/ Clone() {
- Contract.Ensures(Contract.Result<Element>() != null);
- return new Elt(this.constraints);
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- if (constraints == null) {
- return "<bottom>";
- }
- string s = "[";
- string sep = "";
- foreach (IVariable/*!*/ v in cce.NonNull(constraints.Keys)) {
- Contract.Assert(v != null);
- Element m = (Element)constraints[v];
- s += sep + v.Name + " -> " + m;
- sep = ", ";
- }
- return s + "]";
- }
-
- public static readonly Elt/*!*/ Top = new Elt(true);
- public static readonly Elt/*!*/ Bottom = new Elt(false);
-
-
- public Elt(IFunctionalMap constraints) {
- this.constraints = constraints;
- }
-
- public bool IsBottom {
- get {
- return this.constraints == null;
- }
- }
-
- public int Count {
- get {
- return this.constraints == null ? 0 : this.constraints.Count;
- }
- }
-
- public IEnumerable/*<IVariable>*//*!*/ Variables {
- get {
- Contract.Requires(!this.IsBottom);
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
- Contract.Assume(this.constraints != null);
- return cce.NonNull(this.constraints.Keys);
- }
- }
-
- public IEnumerable/*<IVariable>*//*!*/ SortedVariables(/*maybe null*/ IComparer variableComparer) {
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
- if (variableComparer == null) {
- return Variables;
- } else {
- ArrayList /*IVariable*/ vars = new ArrayList /*IVariable*/ (Count);
- foreach (IVariable variable in Variables) {
- vars.Add(variable);
- }
- vars.Sort(variableComparer);
- return vars;
- }
- }
-
- public Element Lookup(IVariable v) {
- if ((v == null) || (this.constraints == null)) {
- return null;
- }
- return (Element)this.constraints[v];
- }
-
- public Element this[IVariable/*!*/ key] {
- get {
- Contract.Requires(!this.IsBottom);
- Contract.Requires(key != null);
- Contract.Assume(this.constraints != null);
- return (Element)constraints[key];
- }
- }
-
- /// <summary>
- /// Add a new entry in the functional map: var --> value.
- /// If the variable is already there, throws an exception
- /// </summary>
- public Elt/*!*/ Add(IVariable/*!*/ var, Element/*!*/ value, MicroLattice/*!*/ microLattice) {
- Contract.Requires(microLattice != null);
- Contract.Requires(value != null);
- Contract.Requires(var != null);
- Contract.Requires((!this.IsBottom));
- Contract.Ensures(Contract.Result<Elt>() != null);
- Contract.Assume(this.constraints != null);
- Contract.Assert(!this.constraints.Contains(var));
-
- if (microLattice.IsBottom(value)) {
- return Bottom;
- }
- if (microLattice.IsTop(value)) {
- return this.Remove(var, microLattice);
- }
-
- return new Elt(this.constraints.Add(var, value));
- }
-
- /// <summary>
- /// Set the value of the variable in the functional map
- /// If the variable is not already there, throws an exception
- /// </summary>
- public Elt/*!*/ Set(IVariable/*!*/ var, Element/*!*/ value, MicroLattice/*!*/ microLattice) {
- Contract.Requires(microLattice != null);
- Contract.Requires(value != null);
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<Elt>() != null);
- if (microLattice.IsBottom(value)) {
- return Bottom;
- }
- if (microLattice.IsTop(value)) {
- return this.Remove(var, microLattice);
- }
-
- Contract.Assume(this.constraints != null);
- Contract.Assert(this.constraints.Contains(var));
-
- // this.constraints[var] = value;
- IFunctionalMap newMap = this.constraints.Set(var, value);
-
- return new Elt(newMap);
- }
-
- public Elt/*!*/ Remove(IVariable/*!*/ var, MicroLattice microLattice) {
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<Elt>() != null);
- if (this.IsBottom) {
- return this;
- }
- Contract.Assume(this.constraints != null);
- return new Elt(this.constraints.Remove(var));
- }
-
- public Elt/*!*/ Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName, MicroLattice/*!*/ microLattice) {
- Contract.Requires(microLattice != null);
- Contract.Requires(newName != null);
- Contract.Requires(oldName != null);
- Contract.Requires((!this.IsBottom));
- Contract.Ensures(Contract.Result<Elt>() != null);
- Element value = this[oldName];
- if (value == null) {
- return this;
- } // 'oldName' isn't in the map, so neither will be 'newName'
- Contract.Assume(this.constraints != null);
- IFunctionalMap newMap = this.constraints.Remove(oldName);
- newMap = newMap.Add(newName, value);
- return new Elt(newMap);
- }
-
- [Pure]
- public override ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
- throw new System.NotImplementedException();
- }
-
- } // class
-
- private readonly MicroLattice/*!*/ microLattice;
-
- private readonly IPropExprFactory/*!*/ propExprFactory;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(microLattice != null);
- Contract.Invariant(propExprFactory != null);
- }
-
-
- private readonly /*maybe null*/IComparer variableComparer;
-
- public VariableMapLattice(IPropExprFactory/*!*/ propExprFactory, IValueExprFactory/*!*/ valueExprFactory, MicroLattice/*!*/ microLattice, /*maybe null*/IComparer variableComparer)
- : base(valueExprFactory) {
- Contract.Requires(microLattice != null);
- Contract.Requires(valueExprFactory != null);
- Contract.Requires(propExprFactory != null);
- this.propExprFactory = propExprFactory;
- this.microLattice = microLattice;
- this.variableComparer = variableComparer;
- // base(valueExprFactory);
- }
-
- protected override object/*!*/ UniqueId {
- get {
- Contract.Ensures(Contract.Result<object>() != null);
- return this.microLattice.GetType();
- }
- }
-
- public override Element/*!*/ Top {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return Elt.Top;
- }
- }
-
- public override Element Bottom {
- get {
- Contract.Ensures(Contract.Result<Element>() != null);
- return Elt.Bottom;
- }
- }
-
- public override bool IsTop(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Elt e = (Elt)element;
- return !e.IsBottom && e.Count == 0;
- }
-
- public override bool IsBottom(Element/*!*/ element) {
- //Contract.Requires(element != null);
- return ((Elt)element).IsBottom;
- }
-
- protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
-
- // return true iff every constraint in "this" is no weaker than the corresponding
- // constraint in "that" and there are no additional constraints in "that"
- foreach (IVariable/*!*/ var in a.Variables) {
- Contract.Assert(var != null);
- Element thisValue = cce.NonNull(a[var]);
-
- Element thatValue = b[var];
- if (thatValue == null) {
- continue;
- } // it's okay for "a" to know something "b" doesn't
-
- if (this.microLattice.LowerThan(thisValue, thatValue)) {
- continue;
- } // constraint for "var" satisfies AtMost relation
-
- return false;
- }
- foreach (IVariable/*!*/ var in b.Variables) {
- Contract.Assert(var != null);
- if (a.Lookup(var) != null) {
- continue;
- } // we checked this case in the loop above
-
- Element thatValue = cce.NonNull(b[var]);
- if (this.microLattice.IsTop(thatValue)) {
- continue;
- } // this is a trivial constraint
-
- return false;
- }
- return true;
- }
-
- private Elt/*!*/ AddConstraint(Element/*!*/ element, IVariable/*!*/ var, /*MicroLattice*/Element/*!*/ newValue) {
- Contract.Requires((newValue != null));
- Contract.Requires((var != null));
- Contract.Requires((element != null));
- Contract.Ensures(Contract.Result<Elt>() != null);
- Elt e = (Elt)element;
-
- if (!e.IsBottom && !this.microLattice.IsBottom(newValue)) // if we're not at bottom
- {
- /*MicroLattice*/
- Element currentValue = e[var];
-
- if (currentValue == null) {
- // No information currently, so we just add the new info.
- return e.Add(var, newValue, this.microLattice);
- } else {
- // Otherwise, take the meet of the new and current info.
- //return e.Add(var, this.microLattice.Meet(currentValue, newValue), this.microLattice);
- return e.Set(var, this.microLattice.Meet(currentValue, newValue), this.microLattice);
- }
- }
- return e;
- }
-
- public override string/*!*/ ToString(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<string>() != null);
- Elt e = (Elt)element;
-
- if (IsTop(e)) {
- return "<top>";
- }
- if (IsBottom(e)) {
- return "<bottom>";
- }
-
- int k = 0;
- System.Text.StringBuilder buffer = new System.Text.StringBuilder();
- foreach (IVariable/*!*/ key in e.SortedVariables(variableComparer)) {
- Contract.Assert(key != null);
- if (k++ > 0) {
- buffer.Append("; ");
- }
- buffer.AppendFormat("{0} = {1}", key, e[key]);
- }
- return buffer.ToString();
- }
-
- public override Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
-
- IFunctionalMap newMap = FunctionalHashtable.Empty;
- foreach (IVariable/*!*/ key in a.Variables) {
- Contract.Assert(key != null);
- Element aValue = a[key];
- Element bValue = b[key];
-
- if (aValue != null && bValue != null) {
- // Keep only the variables known to both elements.
- Element newValue = this.microLattice.Join(aValue, bValue);
- newMap = newMap.Add(key, newValue);
- }
- }
- Elt/*!*/ join = new Elt(newMap);
- Contract.Assert(join != null);
-
- // System.Console.WriteLine("{0} join {1} = {2} ", this.ToString(a), ToString(b), ToString(join));
-
- return join;
- }
-
- public override Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires(second != null);
- //Contract.Requires(first != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
-
- IFunctionalMap newMap = FunctionalHashtable.Empty;
- foreach (IVariable/*!*/ key in a.Variables) {
- Contract.Assert(key != null);
- Element/*!*/ aValue = cce.NonNull(a[key]);
- Element bValue = b[key];
-
- Element newValue =
- bValue == null ? aValue :
- this.microLattice.Meet(aValue, bValue);
-
- newMap = newMap.Add(key, newValue);
- }
- foreach (IVariable/*!*/ key in b.Variables) {
- Contract.Assert(key != null);
- Element aValue = a[key];
- Element bValue = b[key];
- Debug.Assert(bValue != null);
-
- if (aValue == null) {
- // It's a variable we didn't cover in the last loop.
- newMap = newMap.Add(key, bValue);
- }
- }
- return new Elt(newMap);
- }
-
- /// <summary>
- /// Perform the pointwise widening of the elements in the map
- /// </summary>
- public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
- //Contract.Requires((second != null));
- //Contract.Requires((first != null));
- Contract.Ensures(Contract.Result<Element>() != null);
- Elt a = (Elt)first;
- Elt b = (Elt)second;
-
- // Note we have to add those cases as we do not have a "NonTrivialWiden" method
- if (a.IsBottom)
- return new Elt(b.Constraints);
- if (b.IsBottom)
- return new Elt(a.Constraints);
-
- IFunctionalMap newMap = FunctionalHashtable.Empty;
- foreach (IVariable/*!*/ key in a.Variables) {
- Contract.Assert(key != null);
- Element aValue = a[key];
- Element bValue = b[key];
-
- if (aValue != null && bValue != null) {
- // Keep only the variables known to both elements.
- Element newValue = this.microLattice.Widen(aValue, bValue);
- newMap = newMap.Add(key, newValue);
- }
- }
- Element/*!*/ widen = new Elt(newMap);
- Contract.Assert(widen != null);
- // System.Console.WriteLine("{0} widen {1} = {2} ", this.ToString(a), ToString(b), ToString(widen));
-
- return widen;
- }
-
- internal static ISet/*<IVariable!>*//*!*/ VariablesInExpression(IExpr/*!*/ e, ISet/*<IVariable!>*//*!*/ ignoreVars) {
- Contract.Requires(ignoreVars != null);
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<ISet>() != null);
- HashSet s = new HashSet();
-
- IFunApp f = e as IFunApp;
- IFunction lambda = e as IFunction;
-
- if (e is IVariable) {
- if (!ignoreVars.Contains(e))
- s.Add(e);
- } else if (f != null) // e is IFunApp
- {
- foreach (IExpr/*!*/ arg in f.Arguments) {
- Contract.Assert(arg != null);
- s.AddAll(VariablesInExpression(arg, ignoreVars));
- }
- } else if (lambda != null) {
- IMutableSet x = new HashSet(1);
- x.Add(lambda.Param);
-
- // Ignore the bound variable
- s.AddAll(VariablesInExpression(lambda.Body, cce.NonNull(Set.Union(ignoreVars, x))));
- } else if (e is IUnknown) {
- // skip (actually, it would be appropriate to return the universal set of all variables)
- } else {
- Debug.Assert(false, "case not handled: " + e);
- }
- return s;
- }
-
-
- private static ArrayList/*<IExpr>*//*!*/ FindConjuncts(IExpr e) {
- Contract.Ensures(Contract.Result<ArrayList>() != null);
- ArrayList result = new ArrayList();
-
- IFunApp f = e as IFunApp;
- if (f != null) {
- if (f.FunctionSymbol.Equals(Prop.And)) {
- foreach (IExpr arg in f.Arguments) {
- result.AddRange(FindConjuncts(arg));
- }
- } else if (f.FunctionSymbol.Equals(Prop.Or)
- || f.FunctionSymbol.Equals(Prop.Implies)) {
- // Do nothing.
- } else {
- result.Add(e);
- }
- } else {
- result.Add(e);
- }
-
- return result;
- }
-
- private static bool IsSimpleEquality(IExpr expr, out IVariable left, out IVariable right) {
- Contract.Ensures(!Contract.Result<bool>() || Contract.ValueAtReturn(out left) != null && Contract.ValueAtReturn(out right) != null);
- left = null;
- right = null;
-
- // See if we have an equality
- IFunApp nary = expr as IFunApp;
- if (nary == null || !nary.FunctionSymbol.Equals(Value.Eq)) {
- return false;
- }
-
- // See if it is an equality of two variables
- IVariable idLeft = nary.Arguments[0] as IVariable;
- IVariable idRight = nary.Arguments[1] as IVariable;
- if (idLeft == null || idRight == null) {
- return false;
- }
-
- left = idLeft;
- right = idRight;
- return true;
- }
-
- /// <summary>
- /// Returns true iff the expression is in the form var == arithmeticExpr
- /// </summary>
- private static bool IsArithmeticExpr(IExpr/*!*/ expr) {
- Contract.Requires(expr != null);
- // System.Console.WriteLine("\t\tIsArithmetic called with {0} of type {1}", expr, expr.GetType().ToString());
-
- if (expr is IVariable) // expr is a variable
- return true;
- else if (expr is IFunApp) // may be ==, +, -, /, % or an integer
- {
- IFunApp fun = (IFunApp)expr;
-
- if (fun.FunctionSymbol is IntSymbol) // it is an integer
- return true;
- else if (fun.FunctionSymbol.Equals(Int.Negate)) // it is an unary minus
- return IsArithmeticExpr((IExpr/*!*/)cce.NonNull(fun.Arguments[0]));
- else if (fun.Arguments.Count != 2) // A function of two or more operands is not arithmetic
- return false;
- else {
- IExpr/*!*/ left = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
- IExpr/*!*/ right = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
-
- if (!(left is IVariable || right is IVariable)) // At least one of the two operands must be a variable
- return false;
-
- if (fun.FunctionSymbol.Equals(Value.Eq)
- || fun.FunctionSymbol.Equals(Int.Add)
- || fun.FunctionSymbol.Equals(Int.Sub)
- || fun.FunctionSymbol.Equals(Int.Mul)
- || fun.FunctionSymbol.Equals(Int.Div)
- || fun.FunctionSymbol.Equals(Int.Mod))
- return IsArithmeticExpr(left) && IsArithmeticExpr(right);
- else
- return false;
- }
- } else {
- return false;
- }
- }
-
- public override IExpr/*!*/ ToPredicate(Element/*!*/ element) {
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- if (IsTop(element)) {
- return propExprFactory.True;
- }
- if (IsBottom(element)) {
- return propExprFactory.False;
- }
-
- Elt e = (Elt)element;
- IExpr truth = propExprFactory.True;
- IExpr result = truth;
-
- foreach (IVariable/*!*/ variable in e.SortedVariables(variableComparer)) {
- Contract.Assert(variable != null);
- Element value = (Element)e[variable];
-
- if (value == null || this.microLattice.IsTop(value)) {
- continue;
- } // Skip variables about which we know nothing.
- if (this.microLattice.IsBottom(value)) {
- return propExprFactory.False;
- }
-
- IExpr conjunct = this.microLattice.ToPredicate(variable, value);
-
- result = (result == truth) ? (IExpr)conjunct : (IExpr)propExprFactory.And(result, conjunct);
- }
- return result;
- }
-
-
- public override Element/*!*/ Eliminate(Element/*!*/ element, IVariable/*!*/ variable) {
- //Contract.Requires(variable != null);
- //Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<Element>() != null);
- return cce.NonNull((Elt)element).Remove(variable, this.microLattice);
- }
-
- private delegate IExpr/*!*/ OnUnableToInline(IVariable/*!*/ var);
- private IExpr/*!*/ IdentityVarToExpr(IVariable/*!*/ var) {
- //Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- return var;
- }
-
- /// <summary>
- /// Return a new expression in which each variable has been
- /// replaced by an expression representing what is known about
- /// that variable.
- /// </summary>
- private IExpr/*!*/ InlineVariables(Elt/*!*/ element, IExpr/*!*/ expr, ISet/*<IVariable!>*//*!*/ notInlineable,
- OnUnableToInline/*!*/ unableToInline) {
- Contract.Requires(unableToInline != null);
- Contract.Requires(notInlineable != null);
- Contract.Requires(expr != null);
- Contract.Requires(element != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- IVariable var = expr as IVariable;
- if (var != null) {
- /*MicroLattice*/
- Element value = element[var];
- if (notInlineable.Contains(var) || value == null || this.microLattice.IsTop(value)) {
- return unableToInline(var); // We don't know anything about this variable.
- } else {
- // GetFoldExpr returns null when it can yield an expression that
- // can be substituted for the variable.
- IExpr valueExpr = this.microLattice.GetFoldExpr(value);
- return (valueExpr == null) ? var : valueExpr;
- }
- }
-
- // else
-
- IFunApp fun = expr as IFunApp;
- if (fun != null) {
- IList newargs = new ArrayList();
- foreach (IExpr/*!*/ arg in fun.Arguments) {
- Contract.Assert(arg != null);
- newargs.Add(InlineVariables(element, arg, notInlineable, unableToInline));
- }
- return fun.CloneWithArguments(newargs);
- }
-
- // else
-
- IFunction lambda = expr as IFunction;
- if (lambda != null) {
- IMutableSet x = new HashSet(1);
- x.Add(lambda.Param);
-
- // Don't inline the bound variable
- return lambda.CloneWithBody(
- InlineVariables(element, lambda.Body,
- cce.NonNull(Set.Union(notInlineable, x)), unableToInline)
- );
- }
-
- // else
-
- if (expr is IUnknown) {
- return expr;
- } else {
- throw
- new System.NotImplementedException("cannot inline identifies in expression " + expr);
- }
- }
-
-
- public override Element/*!*/ Constrain(Element/*!*/ element, IExpr/*!*/ expr) {
- //Contract.Requires(expr != null);
- //Contract.Requires(element != null);
- //Contract.Ensures(Contract.Result<Element>() != null);
- Elt/*!*/ result = (Elt)element;
- Contract.Assert(result != null);
-
- if (IsBottom(element)) {
- return result; // == element
- }
-
- expr = InlineVariables(result, expr, cce.NonNull(Set.Empty), new OnUnableToInline(IdentityVarToExpr));
-
- foreach (IExpr/*!*/ conjunct in FindConjuncts(expr)) {
- Contract.Assert(conjunct != null);
- IVariable left, right;
-
- if (IsSimpleEquality(conjunct, out left, out right)) {
- #region The conjunct is a simple equality
-
-
- Contract.Assert(left != null && right != null);
-
- Element leftValue = result[left], rightValue = result[right];
- if (leftValue == null) {
- leftValue = this.microLattice.Top;
- }
- if (rightValue == null) {
- rightValue = this.microLattice.Top;
- }
- Element newValue = this.microLattice.Meet(leftValue, rightValue);
- result = AddConstraint(result, left, newValue);
- result = AddConstraint(result, right, newValue);
-
- #endregion
- } else {
- ISet/*<IVariable>*/ variablesInvolved = VariablesInExpression(conjunct, Set.Empty);
-
- if (variablesInvolved.Count == 1) {
- #region We have just one variable
-
- IVariable var = null;
- foreach (IVariable/*!*/ v in variablesInvolved) {
- Contract.Assert(v != null);
- var = v;
- } // why is there no better way to get the elements?
- Contract.Assert(var != null);
- Element/*!*/ value = this.microLattice.EvaluatePredicate(conjunct);
- result = AddConstraint(result, var, value);
-
- #endregion
- } else if (IsArithmeticExpr(conjunct) && this.microLattice.UnderstandsBasicArithmetics) {
- #region We evalaute an arithmetic expression
-
- IFunApp fun = (IFunApp)conjunct;
- if (fun.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq)) // if it is a symbol of equality
- {
- // get the variable to be assigned
- IExpr/*!*/ leftArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
- IExpr/*!*/ rightArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
- IExpr/*!*/ var = (leftArg is IVariable) ? leftArg : rightArg;
-
- Element/*!*/ value = this.microLattice.EvaluatePredicateWithState(conjunct, result.Constraints);
- Contract.Assert(value != null);
- result = AddConstraint(result, (IVariable/*!*/)cce.NonNull(var), value);
- }
- #endregion
- }
- }
- }
- return result;
- }
-
-
- public override Element/*!*/ Rename(Element/*!*/ element, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
- //Contract.Requires(newName != null);
- //Contract.Requires(oldName != null);
- //Contract.Requires(element != null);
- //Contract.Ensures(Contract.Result<Element>() != null);
- if (IsBottom(element)) {
- return element;
- } else {
- return ((Elt)element).Rename(oldName, newName, this.microLattice);
- }
- }
-
-
- public override bool Understands(IFunctionSymbol/*!*/ f, IList/*!*/ args) {
- //Contract.Requires(args != null);
- //Contract.Requires(f != null);
- return f.Equals(Prop.And) ||
- f.Equals(Value.Eq) ||
- microLattice.Understands(f, args);
- }
-
- private sealed class EquivalentExprException : CheckedException {
- }
- private sealed class EquivalentExprInlineCallback {
- private readonly IVariable/*!*/ var;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(var != null);
- }
-
- public EquivalentExprInlineCallback(IVariable/*!*/ var) {
- Contract.Requires(var != null);
- this.var = var;
- // base();
- }
-
- public IExpr/*!*/ ThrowOnUnableToInline(IVariable/*!*/ othervar)
- //throws EquivalentExprException;
- {
- Contract.Requires(othervar != null);
- Contract.Ensures(Contract.Result<IExpr>() != null);
- Contract.EnsuresOnThrow<EquivalentExprException>(true);
- if (othervar.Equals(var))
- throw new EquivalentExprException();
- else
- return othervar;
- }
- }
-
- public override IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, ISet/*<IVariable!>*//*!*/ prohibitedVars) {
- //Contract.Requires(prohibitedVars != null);
- //Contract.Requires(var != null);
- //Contract.Requires(expr != null);
- //Contract.Requires(q != null);
- //Contract.Requires(e != null);
- try {
- EquivalentExprInlineCallback closure = new EquivalentExprInlineCallback(var);
- return InlineVariables((Elt)e, expr, cce.NonNull(Set.Empty),
- new OnUnableToInline(closure.ThrowOnUnableToInline));
- } catch (EquivalentExprException) {
- return null;
- }
- }
-
-
- /// <summary>
- /// Check to see if the given predicate holds in the given lattice element.
- ///
- /// TODO: We leave this unimplemented for now and just return maybe.
- /// </summary>
- /// <param name="e">The lattice element.</param>
- /// <param name="pred">The predicate.</param>
- /// <returns>Yes, No, or Maybe</returns>
- public override Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred) {
- //Contract.Requires(pred != null);
- //Contract.Requires(e != null);
- return Answer.Maybe;
- }
-
- /// <summary>
- /// Answers a disequality about two variables. The same information could be obtained
- /// by asking CheckPredicate, but a different implementation may be simpler and more
- /// efficient.
- ///
- /// TODO: We leave this unimplemented for now and just return maybe.
- /// </summary>
- /// <param name="e">The lattice element.</param>
- /// <param name="var1">The first variable.</param>
- /// <param name="var2">The second variable.</param>
- /// <returns>Yes, No, or Maybe.</returns>
- public override Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
- //Contract.Requires(var2 != null);
- //Contract.Requires(var1 != null);
- //Contract.Requires(e != null);
- return Answer.Maybe;
- }
-
- public override void Validate() {
- base.Validate();
- microLattice.Validate();
- }
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.AbstractInterpretationFramework {
+ using System.Diagnostics.Contracts;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics;
+
+ using Microsoft.AbstractInterpretationFramework;
+ using Microsoft.AbstractInterpretationFramework.Collections;
+
+ using Microsoft.Boogie;
+
+ using IMutableSet = Microsoft.Boogie.GSet<object>;
+ using ISet = Microsoft.Boogie.GSet<object>;
+ using Set = Microsoft.Boogie.GSet<object>;
+ using HashSet = Microsoft.Boogie.GSet<object>;
+
+ /// <summary>
+ /// Creates a lattice that works for several variables given a MicroLattice. Assumes
+ /// if one variable is bottom, then all variables are bottom.
+ /// </summary>
+ public class VariableMapLattice : Lattice {
+ private class Elt : Element {
+ /// <summary>
+ /// IsBottom(e) iff e.constraints == null
+ /// </summary>
+ /*MayBeNull*/
+ private IFunctionalMap constraints; // of type IVariable -> LATTICE_ELEMENT
+ public IFunctionalMap Constraints {
+ get {
+ return this.constraints;
+ }
+ }
+
+ private Elt(bool top) {
+ if (top) {
+ this.constraints = FunctionalHashtable.Empty;
+ } else {
+ this.constraints = null;
+ }
+ }
+
+ public override Element/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return new Elt(this.constraints);
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ if (constraints == null) {
+ return "<bottom>";
+ }
+ string s = "[";
+ string sep = "";
+ foreach (IVariable/*!*/ v in cce.NonNull(constraints.Keys)) {
+ Contract.Assert(v != null);
+ Element m = (Element)constraints[v];
+ s += sep + v.Name + " -> " + m;
+ sep = ", ";
+ }
+ return s + "]";
+ }
+
+ public static readonly Elt/*!*/ Top = new Elt(true);
+ public static readonly Elt/*!*/ Bottom = new Elt(false);
+
+
+ public Elt(IFunctionalMap constraints) {
+ this.constraints = constraints;
+ }
+
+ public bool IsBottom {
+ get {
+ return this.constraints == null;
+ }
+ }
+
+ public int Count {
+ get {
+ return this.constraints == null ? 0 : this.constraints.Count;
+ }
+ }
+
+ public IEnumerable/*<IVariable>*//*!*/ Variables {
+ get {
+ Contract.Requires(!this.IsBottom);
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+ Contract.Assume(this.constraints != null);
+ return cce.NonNull(this.constraints.Keys);
+ }
+ }
+
+ public IEnumerable/*<IVariable>*//*!*/ SortedVariables(/*maybe null*/ IComparer variableComparer) {
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+ if (variableComparer == null) {
+ return Variables;
+ } else {
+ ArrayList /*IVariable*/ vars = new ArrayList /*IVariable*/ (Count);
+ foreach (IVariable variable in Variables) {
+ vars.Add(variable);
+ }
+ vars.Sort(variableComparer);
+ return vars;
+ }
+ }
+
+ public Element Lookup(IVariable v) {
+ if ((v == null) || (this.constraints == null)) {
+ return null;
+ }
+ return (Element)this.constraints[v];
+ }
+
+ public Element this[IVariable/*!*/ key] {
+ get {
+ Contract.Requires(!this.IsBottom);
+ Contract.Requires(key != null);
+ Contract.Assume(this.constraints != null);
+ return (Element)constraints[key];
+ }
+ }
+
+ /// <summary>
+ /// Add a new entry in the functional map: var --> value.
+ /// If the variable is already there, throws an exception
+ /// </summary>
+ public Elt/*!*/ Add(IVariable/*!*/ var, Element/*!*/ value, MicroLattice/*!*/ microLattice) {
+ Contract.Requires(microLattice != null);
+ Contract.Requires(value != null);
+ Contract.Requires(var != null);
+ Contract.Requires((!this.IsBottom));
+ Contract.Ensures(Contract.Result<Elt>() != null);
+ Contract.Assume(this.constraints != null);
+ Contract.Assert(!this.constraints.Contains(var));
+
+ if (microLattice.IsBottom(value)) {
+ return Bottom;
+ }
+ if (microLattice.IsTop(value)) {
+ return this.Remove(var, microLattice);
+ }
+
+ return new Elt(this.constraints.Add(var, value));
+ }
+
+ /// <summary>
+ /// Set the value of the variable in the functional map
+ /// If the variable is not already there, throws an exception
+ /// </summary>
+ public Elt/*!*/ Set(IVariable/*!*/ var, Element/*!*/ value, MicroLattice/*!*/ microLattice) {
+ Contract.Requires(microLattice != null);
+ Contract.Requires(value != null);
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<Elt>() != null);
+ if (microLattice.IsBottom(value)) {
+ return Bottom;
+ }
+ if (microLattice.IsTop(value)) {
+ return this.Remove(var, microLattice);
+ }
+
+ Contract.Assume(this.constraints != null);
+ Contract.Assert(this.constraints.Contains(var));
+
+ // this.constraints[var] = value;
+ IFunctionalMap newMap = this.constraints.Set(var, value);
+
+ return new Elt(newMap);
+ }
+
+ public Elt/*!*/ Remove(IVariable/*!*/ var, MicroLattice microLattice) {
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<Elt>() != null);
+ if (this.IsBottom) {
+ return this;
+ }
+ Contract.Assume(this.constraints != null);
+ return new Elt(this.constraints.Remove(var));
+ }
+
+ public Elt/*!*/ Rename(IVariable/*!*/ oldName, IVariable/*!*/ newName, MicroLattice/*!*/ microLattice) {
+ Contract.Requires(microLattice != null);
+ Contract.Requires(newName != null);
+ Contract.Requires(oldName != null);
+ Contract.Requires((!this.IsBottom));
+ Contract.Ensures(Contract.Result<Elt>() != null);
+ Element value = this[oldName];
+ if (value == null) {
+ return this;
+ } // 'oldName' isn't in the map, so neither will be 'newName'
+ Contract.Assume(this.constraints != null);
+ IFunctionalMap newMap = this.constraints.Remove(oldName);
+ newMap = newMap.Add(newName, value);
+ return new Elt(newMap);
+ }
+
+ [Pure]
+ public override ICollection<IVariable/*!*/>/*!*/ FreeVariables() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<IVariable>>()));
+ throw new System.NotImplementedException();
+ }
+
+ } // class
+
+ private readonly MicroLattice/*!*/ microLattice;
+
+ private readonly IPropExprFactory/*!*/ propExprFactory;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(microLattice != null);
+ Contract.Invariant(propExprFactory != null);
+ }
+
+
+ private readonly /*maybe null*/IComparer variableComparer;
+
+ public VariableMapLattice(IPropExprFactory/*!*/ propExprFactory, IValueExprFactory/*!*/ valueExprFactory, MicroLattice/*!*/ microLattice, /*maybe null*/IComparer variableComparer)
+ : base(valueExprFactory) {
+ Contract.Requires(microLattice != null);
+ Contract.Requires(valueExprFactory != null);
+ Contract.Requires(propExprFactory != null);
+ this.propExprFactory = propExprFactory;
+ this.microLattice = microLattice;
+ this.variableComparer = variableComparer;
+ // base(valueExprFactory);
+ }
+
+ protected override object/*!*/ UniqueId {
+ get {
+ Contract.Ensures(Contract.Result<object>() != null);
+ return this.microLattice.GetType();
+ }
+ }
+
+ public override Element/*!*/ Top {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Elt.Top;
+ }
+ }
+
+ public override Element Bottom {
+ get {
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return Elt.Bottom;
+ }
+ }
+
+ public override bool IsTop(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Elt e = (Elt)element;
+ return !e.IsBottom && e.Count == 0;
+ }
+
+ public override bool IsBottom(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ return ((Elt)element).IsBottom;
+ }
+
+ protected override bool AtMost(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+
+ // return true iff every constraint in "this" is no weaker than the corresponding
+ // constraint in "that" and there are no additional constraints in "that"
+ foreach (IVariable/*!*/ var in a.Variables) {
+ Contract.Assert(var != null);
+ Element thisValue = cce.NonNull(a[var]);
+
+ Element thatValue = b[var];
+ if (thatValue == null) {
+ continue;
+ } // it's okay for "a" to know something "b" doesn't
+
+ if (this.microLattice.LowerThan(thisValue, thatValue)) {
+ continue;
+ } // constraint for "var" satisfies AtMost relation
+
+ return false;
+ }
+ foreach (IVariable/*!*/ var in b.Variables) {
+ Contract.Assert(var != null);
+ if (a.Lookup(var) != null) {
+ continue;
+ } // we checked this case in the loop above
+
+ Element thatValue = cce.NonNull(b[var]);
+ if (this.microLattice.IsTop(thatValue)) {
+ continue;
+ } // this is a trivial constraint
+
+ return false;
+ }
+ return true;
+ }
+
+ private Elt/*!*/ AddConstraint(Element/*!*/ element, IVariable/*!*/ var, /*MicroLattice*/Element/*!*/ newValue) {
+ Contract.Requires((newValue != null));
+ Contract.Requires((var != null));
+ Contract.Requires((element != null));
+ Contract.Ensures(Contract.Result<Elt>() != null);
+ Elt e = (Elt)element;
+
+ if (!e.IsBottom && !this.microLattice.IsBottom(newValue)) // if we're not at bottom
+ {
+ /*MicroLattice*/
+ Element currentValue = e[var];
+
+ if (currentValue == null) {
+ // No information currently, so we just add the new info.
+ return e.Add(var, newValue, this.microLattice);
+ } else {
+ // Otherwise, take the meet of the new and current info.
+ //return e.Add(var, this.microLattice.Meet(currentValue, newValue), this.microLattice);
+ return e.Set(var, this.microLattice.Meet(currentValue, newValue), this.microLattice);
+ }
+ }
+ return e;
+ }
+
+ public override string/*!*/ ToString(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ Elt e = (Elt)element;
+
+ if (IsTop(e)) {
+ return "<top>";
+ }
+ if (IsBottom(e)) {
+ return "<bottom>";
+ }
+
+ int k = 0;
+ System.Text.StringBuilder buffer = new System.Text.StringBuilder();
+ foreach (IVariable/*!*/ key in e.SortedVariables(variableComparer)) {
+ Contract.Assert(key != null);
+ if (k++ > 0) {
+ buffer.Append("; ");
+ }
+ buffer.AppendFormat("{0} = {1}", key, e[key]);
+ }
+ return buffer.ToString();
+ }
+
+ public override Element/*!*/ NontrivialJoin(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+
+ IFunctionalMap newMap = FunctionalHashtable.Empty;
+ foreach (IVariable/*!*/ key in a.Variables) {
+ Contract.Assert(key != null);
+ Element aValue = a[key];
+ Element bValue = b[key];
+
+ if (aValue != null && bValue != null) {
+ // Keep only the variables known to both elements.
+ Element newValue = this.microLattice.Join(aValue, bValue);
+ newMap = newMap.Add(key, newValue);
+ }
+ }
+ Elt/*!*/ join = new Elt(newMap);
+ Contract.Assert(join != null);
+
+ // System.Console.WriteLine("{0} join {1} = {2} ", this.ToString(a), ToString(b), ToString(join));
+
+ return join;
+ }
+
+ public override Element/*!*/ NontrivialMeet(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires(second != null);
+ //Contract.Requires(first != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+
+ IFunctionalMap newMap = FunctionalHashtable.Empty;
+ foreach (IVariable/*!*/ key in a.Variables) {
+ Contract.Assert(key != null);
+ Element/*!*/ aValue = cce.NonNull(a[key]);
+ Element bValue = b[key];
+
+ Element newValue =
+ bValue == null ? aValue :
+ this.microLattice.Meet(aValue, bValue);
+
+ newMap = newMap.Add(key, newValue);
+ }
+ foreach (IVariable/*!*/ key in b.Variables) {
+ Contract.Assert(key != null);
+ Element aValue = a[key];
+ Element bValue = b[key];
+ Debug.Assert(bValue != null);
+
+ if (aValue == null) {
+ // It's a variable we didn't cover in the last loop.
+ newMap = newMap.Add(key, bValue);
+ }
+ }
+ return new Elt(newMap);
+ }
+
+ /// <summary>
+ /// Perform the pointwise widening of the elements in the map
+ /// </summary>
+ public override Element/*!*/ Widen(Element/*!*/ first, Element/*!*/ second) {
+ //Contract.Requires((second != null));
+ //Contract.Requires((first != null));
+ Contract.Ensures(Contract.Result<Element>() != null);
+ Elt a = (Elt)first;
+ Elt b = (Elt)second;
+
+ // Note we have to add those cases as we do not have a "NonTrivialWiden" method
+ if (a.IsBottom)
+ return new Elt(b.Constraints);
+ if (b.IsBottom)
+ return new Elt(a.Constraints);
+
+ IFunctionalMap newMap = FunctionalHashtable.Empty;
+ foreach (IVariable/*!*/ key in a.Variables) {
+ Contract.Assert(key != null);
+ Element aValue = a[key];
+ Element bValue = b[key];
+
+ if (aValue != null && bValue != null) {
+ // Keep only the variables known to both elements.
+ Element newValue = this.microLattice.Widen(aValue, bValue);
+ newMap = newMap.Add(key, newValue);
+ }
+ }
+ Element/*!*/ widen = new Elt(newMap);
+ Contract.Assert(widen != null);
+ // System.Console.WriteLine("{0} widen {1} = {2} ", this.ToString(a), ToString(b), ToString(widen));
+
+ return widen;
+ }
+
+ internal static ISet/*<IVariable!>*//*!*/ VariablesInExpression(IExpr/*!*/ e, ISet/*<IVariable!>*//*!*/ ignoreVars) {
+ Contract.Requires(ignoreVars != null);
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<ISet>() != null);
+ HashSet s = new HashSet();
+
+ IFunApp f = e as IFunApp;
+ IFunction lambda = e as IFunction;
+
+ if (e is IVariable) {
+ if (!ignoreVars.Contains(e))
+ s.Add(e);
+ } else if (f != null) // e is IFunApp
+ {
+ foreach (IExpr/*!*/ arg in f.Arguments) {
+ Contract.Assert(arg != null);
+ s.AddAll(VariablesInExpression(arg, ignoreVars));
+ }
+ } else if (lambda != null) {
+ IMutableSet x = new HashSet(1);
+ x.Add(lambda.Param);
+
+ // Ignore the bound variable
+ s.AddAll(VariablesInExpression(lambda.Body, cce.NonNull(Set.Union(ignoreVars, x))));
+ } else if (e is IUnknown) {
+ // skip (actually, it would be appropriate to return the universal set of all variables)
+ } else {
+ Debug.Assert(false, "case not handled: " + e);
+ }
+ return s;
+ }
+
+
+ private static ArrayList/*<IExpr>*//*!*/ FindConjuncts(IExpr e) {
+ Contract.Ensures(Contract.Result<ArrayList>() != null);
+ ArrayList result = new ArrayList();
+
+ IFunApp f = e as IFunApp;
+ if (f != null) {
+ if (f.FunctionSymbol.Equals(Prop.And)) {
+ foreach (IExpr arg in f.Arguments) {
+ result.AddRange(FindConjuncts(arg));
+ }
+ } else if (f.FunctionSymbol.Equals(Prop.Or)
+ || f.FunctionSymbol.Equals(Prop.Implies)) {
+ // Do nothing.
+ } else {
+ result.Add(e);
+ }
+ } else {
+ result.Add(e);
+ }
+
+ return result;
+ }
+
+ private static bool IsSimpleEquality(IExpr expr, out IVariable left, out IVariable right) {
+ Contract.Ensures(!Contract.Result<bool>() || Contract.ValueAtReturn(out left) != null && Contract.ValueAtReturn(out right) != null);
+ left = null;
+ right = null;
+
+ // See if we have an equality
+ IFunApp nary = expr as IFunApp;
+ if (nary == null || !nary.FunctionSymbol.Equals(Value.Eq)) {
+ return false;
+ }
+
+ // See if it is an equality of two variables
+ IVariable idLeft = nary.Arguments[0] as IVariable;
+ IVariable idRight = nary.Arguments[1] as IVariable;
+ if (idLeft == null || idRight == null) {
+ return false;
+ }
+
+ left = idLeft;
+ right = idRight;
+ return true;
+ }
+
+ /// <summary>
+ /// Returns true iff the expression is in the form var == arithmeticExpr
+ /// </summary>
+ private static bool IsArithmeticExpr(IExpr/*!*/ expr) {
+ Contract.Requires(expr != null);
+ // System.Console.WriteLine("\t\tIsArithmetic called with {0} of type {1}", expr, expr.GetType().ToString());
+
+ if (expr is IVariable) // expr is a variable
+ return true;
+ else if (expr is IFunApp) // may be ==, +, -, /, % or an integer
+ {
+ IFunApp fun = (IFunApp)expr;
+
+ if (fun.FunctionSymbol is IntSymbol) // it is an integer
+ return true;
+ else if (fun.FunctionSymbol.Equals(Int.Negate)) // it is an unary minus
+ return IsArithmeticExpr((IExpr/*!*/)cce.NonNull(fun.Arguments[0]));
+ else if (fun.Arguments.Count != 2) // A function of two or more operands is not arithmetic
+ return false;
+ else {
+ IExpr/*!*/ left = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
+ IExpr/*!*/ right = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
+
+ if (!(left is IVariable || right is IVariable)) // At least one of the two operands must be a variable
+ return false;
+
+ if (fun.FunctionSymbol.Equals(Value.Eq)
+ || fun.FunctionSymbol.Equals(Int.Add)
+ || fun.FunctionSymbol.Equals(Int.Sub)
+ || fun.FunctionSymbol.Equals(Int.Mul)
+ || fun.FunctionSymbol.Equals(Int.Div)
+ || fun.FunctionSymbol.Equals(Int.Mod))
+ return IsArithmeticExpr(left) && IsArithmeticExpr(right);
+ else
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public override IExpr/*!*/ ToPredicate(Element/*!*/ element) {
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ if (IsTop(element)) {
+ return propExprFactory.True;
+ }
+ if (IsBottom(element)) {
+ return propExprFactory.False;
+ }
+
+ Elt e = (Elt)element;
+ IExpr truth = propExprFactory.True;
+ IExpr result = truth;
+
+ foreach (IVariable/*!*/ variable in e.SortedVariables(variableComparer)) {
+ Contract.Assert(variable != null);
+ Element value = (Element)e[variable];
+
+ if (value == null || this.microLattice.IsTop(value)) {
+ continue;
+ } // Skip variables about which we know nothing.
+ if (this.microLattice.IsBottom(value)) {
+ return propExprFactory.False;
+ }
+
+ IExpr conjunct = this.microLattice.ToPredicate(variable, value);
+
+ result = (result == truth) ? (IExpr)conjunct : (IExpr)propExprFactory.And(result, conjunct);
+ }
+ return result;
+ }
+
+
+ public override Element/*!*/ Eliminate(Element/*!*/ element, IVariable/*!*/ variable) {
+ //Contract.Requires(variable != null);
+ //Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<Element>() != null);
+ return cce.NonNull((Elt)element).Remove(variable, this.microLattice);
+ }
+
+ private delegate IExpr/*!*/ OnUnableToInline(IVariable/*!*/ var);
+ private IExpr/*!*/ IdentityVarToExpr(IVariable/*!*/ var) {
+ //Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ return var;
+ }
+
+ /// <summary>
+ /// Return a new expression in which each variable has been
+ /// replaced by an expression representing what is known about
+ /// that variable.
+ /// </summary>
+ private IExpr/*!*/ InlineVariables(Elt/*!*/ element, IExpr/*!*/ expr, ISet/*<IVariable!>*//*!*/ notInlineable,
+ OnUnableToInline/*!*/ unableToInline) {
+ Contract.Requires(unableToInline != null);
+ Contract.Requires(notInlineable != null);
+ Contract.Requires(expr != null);
+ Contract.Requires(element != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ IVariable var = expr as IVariable;
+ if (var != null) {
+ /*MicroLattice*/
+ Element value = element[var];
+ if (notInlineable.Contains(var) || value == null || this.microLattice.IsTop(value)) {
+ return unableToInline(var); // We don't know anything about this variable.
+ } else {
+ // GetFoldExpr returns null when it can yield an expression that
+ // can be substituted for the variable.
+ IExpr valueExpr = this.microLattice.GetFoldExpr(value);
+ return (valueExpr == null) ? var : valueExpr;
+ }
+ }
+
+ // else
+
+ IFunApp fun = expr as IFunApp;
+ if (fun != null) {
+ IList newargs = new ArrayList();
+ foreach (IExpr/*!*/ arg in fun.Arguments) {
+ Contract.Assert(arg != null);
+ newargs.Add(InlineVariables(element, arg, notInlineable, unableToInline));
+ }
+ return fun.CloneWithArguments(newargs);
+ }
+
+ // else
+
+ IFunction lambda = expr as IFunction;
+ if (lambda != null) {
+ IMutableSet x = new HashSet(1);
+ x.Add(lambda.Param);
+
+ // Don't inline the bound variable
+ return lambda.CloneWithBody(
+ InlineVariables(element, lambda.Body,
+ cce.NonNull(Set.Union(notInlineable, x)), unableToInline)
+ );
+ }
+
+ // else
+
+ if (expr is IUnknown) {
+ return expr;
+ } else {
+ throw
+ new System.NotImplementedException("cannot inline identifies in expression " + expr);
+ }
+ }
+
+
+ public override Element/*!*/ Constrain(Element/*!*/ element, IExpr/*!*/ expr) {
+ //Contract.Requires(expr != null);
+ //Contract.Requires(element != null);
+ //Contract.Ensures(Contract.Result<Element>() != null);
+ Elt/*!*/ result = (Elt)element;
+ Contract.Assert(result != null);
+
+ if (IsBottom(element)) {
+ return result; // == element
+ }
+
+ expr = InlineVariables(result, expr, cce.NonNull(Set.Empty), new OnUnableToInline(IdentityVarToExpr));
+
+ foreach (IExpr/*!*/ conjunct in FindConjuncts(expr)) {
+ Contract.Assert(conjunct != null);
+ IVariable left, right;
+
+ if (IsSimpleEquality(conjunct, out left, out right)) {
+ #region The conjunct is a simple equality
+
+
+ Contract.Assert(left != null && right != null);
+
+ Element leftValue = result[left], rightValue = result[right];
+ if (leftValue == null) {
+ leftValue = this.microLattice.Top;
+ }
+ if (rightValue == null) {
+ rightValue = this.microLattice.Top;
+ }
+ Element newValue = this.microLattice.Meet(leftValue, rightValue);
+ result = AddConstraint(result, left, newValue);
+ result = AddConstraint(result, right, newValue);
+
+ #endregion
+ } else {
+ ISet/*<IVariable>*/ variablesInvolved = VariablesInExpression(conjunct, Set.Empty);
+
+ if (variablesInvolved.Count == 1) {
+ #region We have just one variable
+
+ IVariable var = null;
+ foreach (IVariable/*!*/ v in variablesInvolved) {
+ Contract.Assert(v != null);
+ var = v;
+ } // why is there no better way to get the elements?
+ Contract.Assert(var != null);
+ Element/*!*/ value = this.microLattice.EvaluatePredicate(conjunct);
+ result = AddConstraint(result, var, value);
+
+ #endregion
+ } else if (IsArithmeticExpr(conjunct) && this.microLattice.UnderstandsBasicArithmetics) {
+ #region We evalaute an arithmetic expression
+
+ IFunApp fun = (IFunApp)conjunct;
+ if (fun.FunctionSymbol.Equals(Microsoft.AbstractInterpretationFramework.Value.Eq)) // if it is a symbol of equality
+ {
+ // get the variable to be assigned
+ IExpr/*!*/ leftArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[0]);
+ IExpr/*!*/ rightArg = (IExpr/*!*/)cce.NonNull(fun.Arguments[1]);
+ IExpr/*!*/ var = (leftArg is IVariable) ? leftArg : rightArg;
+
+ Element/*!*/ value = this.microLattice.EvaluatePredicateWithState(conjunct, result.Constraints);
+ Contract.Assert(value != null);
+ result = AddConstraint(result, (IVariable/*!*/)cce.NonNull(var), value);
+ }
+ #endregion
+ }
+ }
+ }
+ return result;
+ }
+
+
+ public override Element/*!*/ Rename(Element/*!*/ element, IVariable/*!*/ oldName, IVariable/*!*/ newName) {
+ //Contract.Requires(newName != null);
+ //Contract.Requires(oldName != null);
+ //Contract.Requires(element != null);
+ //Contract.Ensures(Contract.Result<Element>() != null);
+ if (IsBottom(element)) {
+ return element;
+ } else {
+ return ((Elt)element).Rename(oldName, newName, this.microLattice);
+ }
+ }
+
+
+ public override bool Understands(IFunctionSymbol/*!*/ f, IList/*!*/ args) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(f != null);
+ return f.Equals(Prop.And) ||
+ f.Equals(Value.Eq) ||
+ microLattice.Understands(f, args);
+ }
+
+ private sealed class EquivalentExprException : CheckedException {
+ }
+ private sealed class EquivalentExprInlineCallback {
+ private readonly IVariable/*!*/ var;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(var != null);
+ }
+
+ public EquivalentExprInlineCallback(IVariable/*!*/ var) {
+ Contract.Requires(var != null);
+ this.var = var;
+ // base();
+ }
+
+ public IExpr/*!*/ ThrowOnUnableToInline(IVariable/*!*/ othervar)
+ //throws EquivalentExprException;
+ {
+ Contract.Requires(othervar != null);
+ Contract.Ensures(Contract.Result<IExpr>() != null);
+ Contract.EnsuresOnThrow<EquivalentExprException>(true);
+ if (othervar.Equals(var))
+ throw new EquivalentExprException();
+ else
+ return othervar;
+ }
+ }
+
+ public override IExpr/*?*/ EquivalentExpr(Element/*!*/ e, IQueryable/*!*/ q, IExpr/*!*/ expr, IVariable/*!*/ var, ISet/*<IVariable!>*//*!*/ prohibitedVars) {
+ //Contract.Requires(prohibitedVars != null);
+ //Contract.Requires(var != null);
+ //Contract.Requires(expr != null);
+ //Contract.Requires(q != null);
+ //Contract.Requires(e != null);
+ try {
+ EquivalentExprInlineCallback closure = new EquivalentExprInlineCallback(var);
+ return InlineVariables((Elt)e, expr, cce.NonNull(Set.Empty),
+ new OnUnableToInline(closure.ThrowOnUnableToInline));
+ } catch (EquivalentExprException) {
+ return null;
+ }
+ }
+
+
+ /// <summary>
+ /// Check to see if the given predicate holds in the given lattice element.
+ ///
+ /// TODO: We leave this unimplemented for now and just return maybe.
+ /// </summary>
+ /// <param name="e">The lattice element.</param>
+ /// <param name="pred">The predicate.</param>
+ /// <returns>Yes, No, or Maybe</returns>
+ public override Answer CheckPredicate(Element/*!*/ e, IExpr/*!*/ pred) {
+ //Contract.Requires(pred != null);
+ //Contract.Requires(e != null);
+ return Answer.Maybe;
+ }
+
+ /// <summary>
+ /// Answers a disequality about two variables. The same information could be obtained
+ /// by asking CheckPredicate, but a different implementation may be simpler and more
+ /// efficient.
+ ///
+ /// TODO: We leave this unimplemented for now and just return maybe.
+ /// </summary>
+ /// <param name="e">The lattice element.</param>
+ /// <param name="var1">The first variable.</param>
+ /// <param name="var2">The second variable.</param>
+ /// <returns>Yes, No, or Maybe.</returns>
+ public override Answer CheckVariableDisequality(Element/*!*/ e, IVariable/*!*/ var1, IVariable/*!*/ var2) {
+ //Contract.Requires(var2 != null);
+ //Contract.Requires(var1 != null);
+ //Contract.Requires(e != null);
+ return Answer.Maybe;
+ }
+
+ public override void Validate() {
+ base.Validate();
+ microLattice.Validate();
+ }
+
+ }
+}
diff --git a/Source/AIFramework/cce.cs b/Source/AIFramework/cce.cs
index ef594484..1e0b12a5 100644
--- a/Source/AIFramework/cce.cs
+++ b/Source/AIFramework/cce.cs
@@ -1,193 +1,193 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
- }
- //[Pure]
- //public static bool NonNullElements(VariableSeq collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
- return iEnumerator != null;
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
- //[Pure]
- //public static bool IsValid(Microsoft.Dafny.Expression expression) {
- // return true;
- //}
- //public static List<T> toList<T>(PureCollections.Sequence s) {
- // List<T> toRet = new List<T>();
- // foreach (T t in s.elems)
- // if(t!=null)
- // toRet.Add(t);
- // return toRet;
- //}
-
- //internal static bool NonNullElements(Set set) {
- // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
- //}
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
+ }
+ //[Pure]
+ //public static bool NonNullElements(VariableSeq collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
+ return iEnumerator != null;
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+ //[Pure]
+ //public static bool IsValid(Microsoft.Dafny.Expression expression) {
+ // return true;
+ //}
+ //public static List<T> toList<T>(PureCollections.Sequence s) {
+ // List<T> toRet = new List<T>();
+ // foreach (T t in s.elems)
+ // if(t!=null)
+ // toRet.Add(t);
+ // return toRet;
+ //}
+
+ //internal static bool NonNullElements(Set set) {
+ // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
+ //}
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/AbsInt/AbsInt.csproj b/Source/AbsInt/AbsInt.csproj
index 69a2667c..359eb146 100644
--- a/Source/AbsInt/AbsInt.csproj
+++ b/Source/AbsInt/AbsInt.csproj
@@ -1,296 +1,296 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>AbsInt</RootNamespace>
- <AssemblyName>AbsInt</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for AbsInt.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\x86\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
- <OutputPath>bin\x86\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <Optimize>true</Optimize>
- <DebugType>pdbonly</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>bin\Release\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'z3apidebug|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\x86\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>bin\z3apidebug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for AbsInt.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\x86\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Data" />
- <Reference Include="System.Numerics" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="IntervalDomain.cs" />
- <Compile Include="TrivialDomain.cs" />
- <Compile Include="NativeLattice.cs" />
- <Compile Include="Traverse.cs" />
- <Compile Include="..\version.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>AbsInt</RootNamespace>
+ <AssemblyName>BoogieAbsInt</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for AbsInt.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <OutputPath>bin\x86\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <Optimize>true</Optimize>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Release\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'z3apidebug|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>bin\z3apidebug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for AbsInt.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\AbsInt.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="IntervalDomain.cs" />
+ <Compile Include="TrivialDomain.cs" />
+ <Compile Include="NativeLattice.cs" />
+ <Compile Include="Traverse.cs" />
+ <Compile Include="..\version.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/AbsInt/IntervalDomain.cs b/Source/AbsInt/IntervalDomain.cs
index d5a5efc9..0dd78cbb 100644
--- a/Source/AbsInt/IntervalDomain.cs
+++ b/Source/AbsInt/IntervalDomain.cs
@@ -1,1210 +1,1218 @@
-using System;
-using System.Numerics;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-namespace Microsoft.Boogie.AbstractInterpretation
-{
- class NativeIntervallDomain : NativeLattice
- {
- abstract class E_Common : NativeLattice.Element { }
- class E_Bottom : E_Common
- {
- public override Expr ToExpr() {
- return Expr.False;
- }
- }
- class E : E_Common
- {
- public readonly Node N;
- public E() { }
- public E(Node n) {
- N = n;
- }
-
- public override Expr ToExpr() {
- Expr expr = Expr.True;
- for (var n = N; n != null; n = n.Next) {
- expr = BplAnd(expr, n.ToExpr());
- }
- return expr;
- }
- }
- public class Node
- {
- public readonly Variable V; // variable has type bool or int
- // For an integer variable (Lo,Hi) indicates Lo <= V < Hi, where Lo==null means no lower bound and Hi==null means no upper bound.
- // For a real variable (Lo,Hi) indicates Lo <= V <= Hi, where Lo==null means no lower bound and Hi==null means no upper bound.
- // For a boolean variable, (Lo,Hi) is one of: (null,null) for {false,true}, (null,1) for {false}, and (1,null) for {true}.
- public readonly BigInteger? Lo;
- public readonly BigInteger? Hi;
- public Node Next; // always sorted according to StrictlyBefore; readonly after full initialization
- [Pure]
- public static bool StrictlyBefore(Variable a, Variable b) {
- Contract.Assert(a.UniqueId != b.UniqueId || a == b);
- return a.UniqueId < b.UniqueId;
- }
-
- Node(Variable v, BigInteger? lo, BigInteger? hi, Node next) {
- Contract.Requires(lo != null || hi != null); // don't accept empty constraints
- Contract.Requires(next == null || StrictlyBefore(v, next.V));
- V = v;
- Lo = lo;
- Hi = hi;
- Next = next;
- }
-
- /// <summary>
- /// This constructor leaves Next as null, allowing the caller to fill in Next to finish off the construction.
- /// </summary>
- public Node(Variable v, BigInteger? lo, BigInteger? hi) {
- Contract.Requires(lo != null || hi != null); // don't accept empty constraints
- V = v;
- Lo = lo;
- Hi = hi;
- }
-
- /// <summary>
- /// Returns a Node that has the constraints head.{V,Lo,Hi} plus
- /// all the constraints entailed by Nodes reachable from tail.
- /// Requires that "head" sorts no later than anything in "tail".
- /// Create either returns "head" itself or returns a new Node.
- /// </summary>
- public static Node Create(Node head, Node tail) {
- Contract.Requires(head != null);
- Contract.Requires(tail == null || !StrictlyBefore(tail.V, head.V));
- Contract.Requires(head != tail);
-
- if (head.Next == tail) {
- return head;
- } else if (tail != null && head.V == tail.V) {
- // incorporate both constraints into one Node
- return new Node(head.V, Max(head.Lo, tail.Lo, true), Min(head.Lo, tail.Lo, true), tail.Next);
- } else {
- return new Node(head.V, head.Lo, head.Hi, tail);
- }
- }
-
- public static void GetBounds(Node n, Variable v, out BigInteger? lo, out BigInteger? hi) {
- for (; n != null; n = n.Next) {
- if (n.V == v) {
- lo = n.Lo;
- hi = n.Hi;
- return;
- } else if (StrictlyBefore(v, n.V)) {
- break;
- }
- }
- lo = null;
- hi = null;
- }
-
- /// <summary>
- /// Return the minimum of "a" and "b". If treatNullAsUnit==true, then "null" is
- /// interpreted as positive infinity (the unit element of min); otherwise, it is
- /// treated as negative infinity (the zero element of min).
- /// </summary>
- public static BigInteger? Min(BigInteger? a, BigInteger? b, bool treatNullAsUnit) {
- if (a == null) {
- return treatNullAsUnit ? b : a;
- } else if (b == null) {
- return treatNullAsUnit ? a : b;
- } else {
- return BigInteger.Min((BigInteger)a, (BigInteger)b);
- }
- }
-
- /// <summary>
- /// Return the maximum of "a" and "b". If treatNullAsUnit==true, then "null" is
- /// interpreted as negative infinity (the unit element of max); otherwise, it is
- /// treated as positive infinity (the zero element of max).
- /// </summary>
- public static BigInteger? Max(BigInteger? a, BigInteger? b, bool treatNullAsUnit) {
- if (a == null) {
- return treatNullAsUnit ? b : a;
- } else if (b == null) {
- return treatNullAsUnit ? a : b;
- } else {
- return BigInteger.Max((BigInteger)a, (BigInteger)b);
- }
- }
-
- public static IEnumerable<Tuple<Node, Node>> Merge(Node a, Node b) {
- while (true) {
- if (a == null && b == null) {
- yield break;
- } else if (a == null || b == null) {
- yield return new Tuple<Node, Node>(a, b);
- if (a != null) { a = a.Next; } else { b = b.Next; }
- } else if (a.V == b.V) {
- yield return new Tuple<Node, Node>(a, b);
- a = a.Next; b = b.Next;
- } else if (StrictlyBefore(a.V, b.V)) {
- yield return new Tuple<Node, Node>(a, null);
- a = a.Next;
- } else {
- yield return new Tuple<Node, Node>(null, b);
- b = b.Next;
- }
- }
- }
-
- public Expr ToExpr() {
- if (!V.IsMutable && CommandLineOptions.Clo.InstrumentInfer != CommandLineOptions.InstrumentationPlaces.Everywhere) {
- // omit invariants about readonly variables
- return Expr.True;
- } else if (V.TypedIdent.Type.IsBool) {
- if (Lo == null && Hi == null) {
- return Expr.True;
- } else {
- Contract.Assert((Lo == null && (BigInteger)Hi == 1) || (Hi == null && (BigInteger)Lo == 1));
- var ide = new IdentifierExpr(Token.NoToken, V);
- return Hi == null ? ide : Expr.Not(ide);
- }
- } else if (V.TypedIdent.Type.IsInt) {
- Expr e = Expr.True;
- if (Lo != null && Hi != null && Lo + 1 == Hi) {
- // produce an equality
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplEq(ide, NumberToExpr((BigInteger)Lo, V.TypedIdent.Type)));
- } else {
- // produce a (possibly empty) conjunction of inequalities
- if (Lo != null) {
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplLe(NumberToExpr((BigInteger)Lo, V.TypedIdent.Type), ide));
- }
- if (Hi != null) {
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplLt(ide, NumberToExpr((BigInteger)Hi, V.TypedIdent.Type)));
- }
- }
- return e;
- } else if (V.TypedIdent.Type.IsReal){
- Expr e = Expr.True;
- if (Lo != null && Hi != null && Lo == Hi) {
- // produce an equality
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplEq(ide, NumberToExpr((BigInteger)Lo, V.TypedIdent.Type)));
- } else {
- // produce a (possibly empty) conjunction of inequalities
- if (Lo != null) {
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplLe(NumberToExpr((BigInteger)Lo, V.TypedIdent.Type), ide));
- }
- if (Hi != null) {
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplLe(ide, NumberToExpr((BigInteger)Hi, V.TypedIdent.Type)));
- }
- }
- return e;
- } else {
- Contract.Assert(V.TypedIdent.Type.IsFloat);
- Expr e = Expr.True;
- if (Lo != null && Hi != null && Lo == Hi)
- {
- // produce an equality
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplEq(ide, NumberToExpr((BigInteger)Lo, V.TypedIdent.Type)));
- }
- else
- {
- // produce a (possibly empty) conjunction of inequalities
- if (Lo != null)
- {
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplLe(NumberToExpr((BigInteger)Lo, V.TypedIdent.Type), ide));
- }
- if (Hi != null)
- {
- var ide = new IdentifierExpr(Token.NoToken, V);
- e = Expr.And(e, BplLe(ide, NumberToExpr((BigInteger)Hi, V.TypedIdent.Type)));
- }
- }
- return e;
- }
- }
- }
-
- static Expr NumberToExpr(BigInteger n, Type ty) {
- if (n == null) {
- return null;
- } else if (ty.IsReal) {
- return Expr.Literal(Basetypes.BigDec.FromBigInt(n));
- } else if (ty.IsFloat) {
- return Expr.Literal(Basetypes.BigFloat.FromBigInt(n, ty.FloatExponent, ty.FloatMantissa));
- } else {
- Contract.Assume(ty.IsInt);
- return Expr.Literal(Basetypes.BigNum.FromBigInt(n));
- }
- }
-
- List<BigInteger> upThresholds; // invariant: thresholds are sorted
- List<BigInteger> downThresholds; // invariant: thresholds are sorted
-
- /// <summary>
- /// Requires "thresholds" to be sorted.
- /// </summary>
- public NativeIntervallDomain() {
- upThresholds = new List<BigInteger>();
- downThresholds = new List<BigInteger>();
- }
-
- public override void Specialize(Implementation impl) {
- if (impl == null) {
- // remove thresholds
- upThresholds = new List<BigInteger>();
- downThresholds = new List<BigInteger>();
- } else {
- var tf = new ThresholdFinder(impl);
- tf.Find(out downThresholds, out upThresholds);
-#if DEBUG_PRINT
- Console.Write("DEBUG: for implementation '{0}', setting downs to [", impl.Name);
- foreach (var i in downThresholds) {
- Console.Write(" {0}", i);
- }
- Console.Write(" ] and ups to [");
- foreach (var i in upThresholds) {
- Console.Write(" {0}", i);
- }
- Console.WriteLine(" ]");
-#endif
- }
- base.Specialize(impl);
- }
-
- private E_Common top = new E();
- private E_Common bottom = new E_Bottom();
-
- public override Element Top { get { return top; } }
- public override Element Bottom { get { return bottom; } }
-
- public override bool IsTop(Element element) {
- var e = element as E;
- return e != null && e.N == null;
- }
- public override bool IsBottom(Element element) {
- return element is E_Bottom;
- }
-
- public override bool Below(Element a, Element b) {
- if (a is E_Bottom) {
- return true;
- } else if (b is E_Bottom) {
- return false;
- } else {
- var aa = (E)a;
- var bb = (E)b;
- // check if every constraint in 'bb' is implied by constraints in 'aa'
- foreach (var t in Node.Merge(aa.N, bb.N)) {
- var x = t.Item1;
- var y = t.Item2;
- if (x == null) {
- // bb constrains a variable that aa does not
- return false;
- } else if (y == null) {
- // aa constrains a variable that bb does not; that's fine
- } else if (y.Lo != null && (x.Lo == null || x.Lo < y.Lo)) {
- // bb has a Lo constraint, and either aa has no Lo constraint or it has a weaker Lo constraint
- return false;
- } else if (y.Hi != null && (x.Hi == null || y.Hi < x.Hi)) {
- // bb has a Hi o constraint, and either aa has no Hi constraint or it has a weaker Hi constraint
- return false;
- }
- }
- return true;
- }
- }
-
- public override Element Meet(Element a, Element b) {
- if (a is E_Bottom) {
- return a;
- } else if (b is E_Bottom) {
- return b;
- } else {
- var aa = (E)a;
- var bb = (E)b;
- Node head = null;
- Node prev = null;
- foreach (var t in Node.Merge(aa.N, bb.N)) {
- var x = t.Item1;
- var y = t.Item2;
- Node n;
- if (x == null) {
- n = new Node(y.V, y.Lo, y.Hi);
- } else if (y == null) {
- n = new Node(x.V, x.Lo, x.Hi);
- } else {
- var lo = Node.Max(x.Lo, y.Lo, true);
- var hi = Node.Min(x.Hi, y.Hi, true);
- // if hi<=lo (or hi<lo for reals), then we're overconstrained
- if (lo != null && hi != null && (x.V.TypedIdent.Type.IsReal ? hi < lo : hi <= lo)) {
- return bottom;
- }
- n = new Node(x.V, lo, hi);
- }
- if (head == null) {
- head = n;
- } else {
- prev.Next = n;
- }
- prev = n;
- }
- return new E(head);
- }
- }
-
- public override Element Join(Element a, Element b) {
- if (a is E_Bottom) {
- return b;
- } else if (b is E_Bottom) {
- return a;
- } else {
- var aa = (E)a;
- var bb = (E)b;
- // for each variable, take the weaker of the constraints
- Node head = null;
- Node prev = null;
- foreach (var t in Node.Merge(aa.N, bb.N)) {
- if (t.Item1 != null && t.Item2 != null) {
- var lo = Node.Min(t.Item1.Lo, t.Item2.Lo, false);
- var hi = Node.Max(t.Item1.Hi, t.Item2.Hi, false);
- if (lo != null || hi != null) {
- var n = new Node(t.Item1.V, lo, hi);
- if (head == null) {
- head = n;
- } else {
- prev.Next = n;
- }
- prev = n;
- }
- }
- }
- return new E(head);
- }
- }
-
- public override Element Widen(Element a, Element b) {
- if (a is E_Bottom) {
- return b; // since this is done just once, we maintain the ascending chains property
- } else if (b is E_Bottom) {
- return a;
- } else {
- var aa = (E)a;
- var bb = (E)b;
- // return a subset of the constraints of aa, namely those that are implied by bb
- Node head = null;
- Node prev = null;
- foreach (var t in Node.Merge(aa.N, bb.N)) {
- var x = t.Item1;
- var y = t.Item2;
- if (x != null && y != null) {
- BigInteger? lo, hi;
- lo = hi = null;
- if (x.Lo != null && y.Lo != null) {
- if (x.Lo <= y.Lo) {
- // okay, we keep the lower bound
- lo = x.Lo;
- } else {
- // set "lo" to the threshold that is below (or equal) y.Lo
- lo = RoundDown((BigInteger)y.Lo);
- }
- }
- if (x.Hi != null && y.Hi != null) {
- if (y.Hi <= x.Hi) {
- // okay, we keep the upper bound
- hi = x.Hi;
- } else {
- // set "hi" to the threshold that is above (or equal) y.Hi
- hi = RoundUp((BigInteger)y.Hi);
- }
- }
- if (lo != null || hi != null) {
- var n = new Node(x.V, lo, hi);
- if (head == null) {
- head = n;
- } else {
- prev.Next = n;
- }
- prev = n;
- }
- }
- }
- return new E(head);
- }
- }
-
- /// <summary>
- /// For a proof of correctness of this method, see Test/dafny2/Intervals.dfy.
- /// A difference is that the this method returns:
- /// let d = Dafny_RoundDown(k);
- /// return d == -1 ? null : downThresholds[d];
- /// </summary>
- BigInteger? RoundDown(BigInteger k)
- {
- if (downThresholds.Count == 0 || k < downThresholds[0]) {
- return null;
- }
- var i = 0;
- var j = downThresholds.Count - 1;
- while (i < j)
- {
- var mid = i + (j - i + 1) / 2;
- if (downThresholds[mid] <= k) {
- i = mid;
- } else {
- j = mid - 1;
- }
- }
- return downThresholds[i];
- }
-
- /// <summary>
- /// For a proof of correctness of this method, see Test/dafny2/Intervals.dfy.
- /// A difference is that the this method returns:
- /// let d = Dafny_RoundUp(k);
- /// return d == thresholds.Count ? null : upThresholds[d];
- /// </summary>
- BigInteger? RoundUp(BigInteger k)
- {
- if (upThresholds.Count == 0 || upThresholds[upThresholds.Count - 1] < k) {
- return null;
- }
- var i = 0;
- var j = upThresholds.Count - 1;
- while (i < j)
- {
- var mid = i + (j - i) / 2;
- if (upThresholds[mid] < k) {
- i = mid + 1;
- } else {
- j = mid;
- }
- }
- return upThresholds[i];
- }
-
- public override Element Constrain(Element element, Expr expr) {
- if (element is E_Bottom) {
- return element;
- } else {
- var e = (E)element;
- var c = Constraint(expr, e.N);
- return c == null ? element : Meet(element, c);
- }
- }
-
- /// <summary>
- /// Returns an Element that corresponds to the constraints implied by "expr" in the
- /// state "state".
- /// Return "null" to indicate no constraints.
- /// </summary>
- E_Common Constraint(Expr expr, Node state) {
- Variable v;
- if (IsVariable(expr, out v)) {
- var n = new Node(v, BigInteger.One, null);
- return new E(n);
- } else if (expr is LiteralExpr) {
- var e = (LiteralExpr)expr;
- return (bool)e.Val ? null : new E_Bottom();
- } else if (expr is NAryExpr) {
- var e = (NAryExpr)expr;
- if (e.Fun is UnaryOperator) {
- if (((UnaryOperator)e.Fun).Op == UnaryOperator.Opcode.Not) {
- if (IsVariable(e.Args[0], out v)) {
- var n = new Node(v, null, BigInteger.One);
- return new E(n);
- }
- }
- } else if (e.Fun is BinaryOperator) {
- var op = ((BinaryOperator)e.Fun).Op;
- var arg0 = e.Args[0];
- var arg1 = e.Args[1];
- switch (op) {
- case BinaryOperator.Opcode.Eq:
- case BinaryOperator.Opcode.Iff: {
- E_Common c = null;
- if (IsVariable(arg0, out v)) {
- BigInteger? lo, hi;
- if (PartiallyEvaluate(arg1, state, out lo, out hi)) {
- var n = new Node(v, lo, hi);
- c = new E(n);
- }
- }
- if (IsVariable(arg1, out v)) {
- BigInteger? lo, hi;
- if (PartiallyEvaluate(arg1, state, out lo, out hi)) {
- var n = new Node(v, lo, hi);
- c = c == null ? new E(n) : (E_Common)Meet(c, new E(n));
- }
- }
- return c;
- }
- case BinaryOperator.Opcode.Neq: {
- E_Common c = null;
- if (IsVariable(arg0, out v)) {
- c = ConstrainNeq(state, v, arg1);
- }
- if (IsVariable(arg1, out v)) {
- var cc = ConstrainNeq(state, v, arg0);
- if (cc != null) {
- c = c == null ? cc : (E_Common)Meet(c, cc);
- }
- }
- return c;
- }
- case BinaryOperator.Opcode.Le: {
- E_Common c = null;
- if (IsVariable(arg1, out v)) {
- BigInteger? lo, hi;
- PartiallyEvaluate(arg0, state, out lo, out hi);
- if (lo != null) {
- var n = new Node(v, lo, null);
- c = new E(n);
- }
- }
- if (IsVariable(arg0, out v)) {
- BigInteger? lo, hi;
- PartiallyEvaluate(arg1, state, out lo, out hi);
- if (hi != null) {
- var n = new Node(v, null, hi);
- c = c == null ? new E(n) : (E_Common)Meet(c, new E(n));
- }
- }
- return c;
- }
- case BinaryOperator.Opcode.Lt: {
- E_Common c = null;
- if (IsVariable(arg1, out v)) {
- BigInteger? lo, hi;
- PartiallyEvaluate(arg0, state, out lo, out hi);
- if (lo != null) {
- var n = new Node(v, v.TypedIdent.Type.IsReal ? lo : lo + 1, null);
- c = new E(n);
- }
- }
- if (IsVariable(arg0, out v)) {
- BigInteger? lo, hi;
- PartiallyEvaluate(arg1, state, out lo, out hi);
- if (hi != null) {
- var n = new Node(v, null, v.TypedIdent.Type.IsReal ? hi : hi - 1);
- c = c == null ? new E(n) : (E_Common)Meet(c, new E(n));
- }
- }
- return c;
- }
- case BinaryOperator.Opcode.Ge: {
- var tmp = arg0; arg0 = arg1; arg1 = tmp;
- goto case BinaryOperator.Opcode.Le;
- }
- case BinaryOperator.Opcode.Gt: {
- var tmp = arg0; arg0 = arg1; arg1 = tmp;
- goto case BinaryOperator.Opcode.Lt;
- }
- default:
- break;
- }
- }
- }
- return null; // approximation
- }
-
- private E ConstrainNeq(Node state, Variable v, Expr arg) {
- BigInteger? lo, hi;
- if (PartiallyEvaluate(arg, state, out lo, out hi)) {
- if (!v.TypedIdent.Type.IsReal && lo != null && hi != null && lo + 1 == hi) {
- var exclude = lo;
- // If the partially evaluated arg (whose value is "exclude") is an end-point of
- // the interval known for "v", then produce a constraint that excludes that bound.
- Node.GetBounds(state, v, out lo, out hi);
- if (lo != null && lo == exclude) {
- var n = new Node(v, lo + 1, null);
- return new E(n);
- } else if (hi != null && exclude + 1 == hi) {
- var n = new Node(v, null, exclude);
- return new E(n);
- }
- }
- }
- return null;
- }
-
- bool IsVariable(Expr expr, out Variable v) {
- var e = expr as IdentifierExpr;
- if (e == null) {
- v = null;
- return false;
- } else {
- v = e.Decl;
- return true;
- }
- }
-
- public override Element Update(Element element, AssignCmd cmd) {
- if (element is E_Bottom) {
- return element;
- }
- var e = (E)element;
- var nn = e.N;
- Contract.Assert(cmd.Lhss.Count == cmd.Rhss.Count);
- for (int i = 0; i < cmd.Lhss.Count; i++) {
- var lhs = cmd.Lhss[i];
- var rhs = cmd.Rhss[i];
- BigInteger? lo;
- BigInteger? hi;
- PartiallyEvaluate(rhs, e.N, out lo, out hi);
- nn = UpdateOne(nn, lhs.DeepAssignedVariable, lo, hi);
- }
- return new E(nn);
- }
-
- bool PartiallyEvaluate(Expr rhs, Node node, out BigInteger? lo, out BigInteger? hi) {
- var pe = new PEVisitor(node);
- pe.VisitExpr(rhs);
- lo = pe.Lo;
- hi = pe.Hi;
- return lo != null || hi != null;
- }
-
- class PEVisitor : ReadOnlyVisitor
- {
- public BigInteger? Lo;
- public BigInteger? Hi;
-
- readonly BigInteger one = BigInteger.One;
-
- Node N;
- public PEVisitor(Node n) {
- N = n;
- }
-
- // Override visitors for all expressions that can return a boolean, integer, or real result
-
- public override Expr VisitExpr(Expr node) {
- Lo = Hi = null;
- return base.VisitExpr(node);
- }
- public override Expr VisitLiteralExpr(LiteralExpr node) {
- if (node.Val is BigNum) {
- var n = ((BigNum)node.Val).ToBigInteger;
- Lo = n;
- Hi = n + 1;
- } else if (node.Val is BigDec) {
- BigInteger floor, ceiling;
- ((BigDec)node.Val).FloorCeiling(out floor, out ceiling);
- Lo = floor;
- Hi = ceiling;
- } else if (node.Val is BigFloat) {
- BigNum floor, ceiling;
- ((BigFloat)node.Val).FloorCeiling(out floor, out ceiling);
- Lo = floor.ToBigInteger;
- Hi = ceiling.ToBigInteger;
- } else if (node.Val is bool) {
- if ((bool)node.Val) {
- // true
- Lo = one;
- Hi = null;
- } else {
- // false
- Lo = null;
- Hi = one;
- }
- }
- return node;
- }
- public override Expr VisitIdentifierExpr(IdentifierExpr node) {
- if (node.Type.IsBool || node.Type.IsInt || node.Type.IsReal) {
- Node.GetBounds(N, node.Decl, out Lo, out Hi);
- }
- return node;
- }
- public override Expr VisitNAryExpr(NAryExpr node) {
- if (node.Fun is UnaryOperator) {
- var op = (UnaryOperator)node.Fun;
- Contract.Assert(node.Args.Count == 1);
- if (op.Op == UnaryOperator.Opcode.Neg) {
- BigInteger? lo, hi;
- VisitExpr(node.Args[0]);
- lo = Lo; hi = Hi;
- if (hi != null) {
- Lo = node.Type.IsReal ? -hi : 1 - hi;
- }
- if (lo != null) {
- Hi = node.Type.IsReal ? -lo : 1 - lo;
- }
- }
- else if (op.Op == UnaryOperator.Opcode.Not) {
- VisitExpr(node.Args[0]);
- Contract.Assert((Lo == null && Hi == null) ||
- (Lo == null && (BigInteger)Hi == 1) ||
- (Hi == null && (BigInteger)Lo == 1));
- var tmp = Lo;
- Lo = Hi;
- Hi = tmp;
- }
- } else if (node.Fun is BinaryOperator) {
- var op = (BinaryOperator)node.Fun;
- Contract.Assert(node.Args.Count == 2);
- BigInteger? lo0, hi0, lo1, hi1;
- VisitExpr(node.Args[0]);
- lo0 = Lo; hi0 = Hi;
- VisitExpr(node.Args[1]);
- lo1 = Lo; hi1 = Hi;
- Lo = Hi = null;
- var isReal = node.Args[0].Type.IsReal;
- switch (op.Op) {
- case BinaryOperator.Opcode.And:
- if (hi0 != null || hi1 != null) {
- // one operand is definitely false, thus so is the result
- Lo = null; Hi = one;
- } else if (lo0 != null && lo1 != null) {
- // both operands are definitely true, thus so is the result
- Lo = one; Hi = null;
- }
- break;
- case BinaryOperator.Opcode.Or:
- if (lo0 != null || lo1 != null) {
- // one operand is definitely true, thus so is the result
- Lo = one; Hi = null;
- } else if (hi0 != null && hi1 != null) {
- // both operands are definitely false, thus so is the result
- Lo = null; Hi = one;
- }
- break;
- case BinaryOperator.Opcode.Imp:
- if (hi0 != null || lo1 != null) {
- // either arg0 false or arg1 is true, so the result is true
- Lo = one; Hi = null;
- } else if (lo0 != null && hi1 != null) {
- // arg0 is true and arg1 is false, so the result is false
- Lo = null; Hi = one;
- }
- break;
- case BinaryOperator.Opcode.Iff:
- if (lo0 != null && lo1 != null) {
- Lo = one; Hi = null;
- } else if (hi0 != null && hi1 != null) {
- Lo = one; Hi = null;
- } else if (lo0 != null && hi1 != null) {
- Lo = null; Hi = one;
- } else if (hi0 != null && lo1 != null) {
- Lo = null; Hi = one;
- }
- if (op.Op == BinaryOperator.Opcode.Neq) {
- var tmp = Lo; Lo = Hi; Hi = tmp;
- }
- break;
- case BinaryOperator.Opcode.Eq:
- case BinaryOperator.Opcode.Neq:
- if (node.Args[0].Type.IsBool) {
- goto case BinaryOperator.Opcode.Iff;
- }
- // For Eq:
- // If the (lo0,hi0) and (lo1,hi1) ranges do not overlap, the answer is false.
- // If both ranges are the same unit range, then the answer is true.
- if (hi0 != null && lo1 != null && (isReal ? hi0 < lo1 : hi0 <= lo1)) {
- // no overlap
- Lo = null; Hi = one;
- } else if (lo0 != null && hi1 != null && (isReal ? hi1 < lo0 : hi1 <= lo0)) {
- Lo = null; Hi = one;
- // no overlaop
- } else if (lo0 != null && hi0 != null && lo1 != null && hi1 != null &&
- lo0 == lo1 && hi0 == hi1 && // ranges are the same
- (isReal ? lo0 == hi0 : lo0 + 1 == hi0)) { // unit range
- // both ranges are the same unit range
- Lo = one; Hi = null;
- }
- if (op.Op == BinaryOperator.Opcode.Neq) {
- var tmp = Lo; Lo = Hi; Hi = tmp;
- }
- break;
- case BinaryOperator.Opcode.Le:
- if (isReal) {
- // If hi0 <= lo1, then the answer is true.
- // If hi1 < lo0, then the answer is false.
- if (hi0 != null && lo1 != null && hi0 <= lo1) {
- Lo = one; Hi = null;
- } else if (hi1 != null && lo0 != null && hi1 < lo0) {
- Lo = null; Hi = one;
- }
- } else {
- // If hi0 - 1 <= lo1, then the answer is true.
- // If hi1 <= lo0, then the answer is false.
- if (hi0 != null && lo1 != null && hi0 - 1 <= lo1) {
- Lo = one; Hi = null;
- } else if (lo0 != null && hi1 != null && hi1 <= lo0) {
- Lo = null; Hi = one;
- }
- }
- break;
- case BinaryOperator.Opcode.Lt:
- if (isReal) {
- // If hi0 < lo1, then the answer is true.
- // If hi1 <= lo0, then the answer is false.
- if (hi0 != null && lo1 != null && hi0 < lo1) {
- Lo = one; Hi = null;
- } else if (hi1 != null && lo0 != null && hi1 <= lo0) {
- Lo = null; Hi = one;
- }
- } else {
- // If hi0 <= lo1, then the answer is true.
- // If hi1 - 1 <= lo0, then the answer is false.
- if (hi0 != null && lo1 != null && hi0 <= lo1) {
- Lo = one; Hi = null;
- } else if (lo0 != null && hi1 != null && hi1 - 1 <= lo0) {
- Lo = null; Hi = one;
- }
- }
- break;
- case BinaryOperator.Opcode.Gt:
- // swap the operands and then continue as Lt
- {
- var tmp = lo0; lo0 = lo1; lo1 = tmp;
- tmp = hi0; hi0 = hi1; hi1 = tmp;
- }
- goto case BinaryOperator.Opcode.Lt;
- case BinaryOperator.Opcode.Ge:
- // swap the operands and then continue as Le
- {
- var tmp = lo0; lo0 = lo1; lo1 = tmp;
- tmp = hi0; hi0 = hi1; hi1 = tmp;
- }
- goto case BinaryOperator.Opcode.Le;
- case BinaryOperator.Opcode.Add:
- if (lo0 != null && lo1 != null) {
- Lo = lo0 + lo1;
- }
- if (hi0 != null && hi1 != null) {
- Hi = isReal ? hi0 + hi1 : hi0 + hi1 - 1;
- }
- break;
- case BinaryOperator.Opcode.Sub:
- if (lo0 != null && hi1 != null) {
- Lo = isReal ? lo0 - hi1 : lo0 - hi1 + 1;
- }
- if (hi0 != null && lo1 != null) {
- Hi = hi0 - lo1;
- }
- break;
- case BinaryOperator.Opcode.Mul:
- // this uses an incomplete approximation that could be tightened up
- if (lo0 != null && lo1 != null) {
- if (0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
- Lo = lo0 * lo1;
- Hi = hi0 == null || hi1 == null ? null : isReal ? hi0 * hi1 : (hi0 - 1) * (hi1 - 1) + 1;
- } else if ((BigInteger)lo0 < 0 && (BigInteger)lo1 < 0) {
- Lo = null; // approximation
- Hi = isReal ? lo0 * lo1 : lo0 * lo1 + 1;
- }
- }
- break;
- case BinaryOperator.Opcode.Div:
- // this uses an incomplete approximation that could be tightened up
- if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
- Lo = BigInteger.Zero;
- Hi = hi0;
- }
- break;
- case BinaryOperator.Opcode.Mod:
- // this uses an incomplete approximation that could be tightened up
- if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
- Lo = BigInteger.Zero;
- Hi = hi1;
- }
- break;
- case BinaryOperator.Opcode.RealDiv:
- // this uses an incomplete approximation that could be tightened up
- if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
- Lo = BigInteger.Zero;
- Hi = 1 <= (BigInteger)lo1 ? hi0 : null;
- }
- break;
- case BinaryOperator.Opcode.Pow:
- // this uses an incomplete approximation that could be tightened up
- if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
- Lo = 1 <= (BigInteger)lo1 ? BigInteger.One : BigInteger.Zero;
- Hi = hi1;
- }
- break;
- default:
- break;
- }
- } else if (node.Fun is IfThenElse) {
- var op = (IfThenElse)node.Fun;
- Contract.Assert(node.Args.Count == 3);
- BigInteger? guardLo, guardHi, lo0, hi0, lo1, hi1;
- VisitExpr(node.Args[0]);
- guardLo = Lo; guardHi = Hi;
- VisitExpr(node.Args[1]);
- lo0 = Lo; hi0 = Hi;
- VisitExpr(node.Args[2]);
- lo1 = Lo; hi1 = Hi;
- Contract.Assert(guardLo == null || guardHi == null); // this is a consequence of the guard being boolean
- if (guardLo != null) {
- // guard is always true
- Lo = lo0; Hi = hi0;
- } else if (guardHi != null) {
- // guard is always false
- Lo = lo1; Hi = hi1;
- } else {
- // we don't know which branch will be taken, so join the information from the two branches
- Lo = Node.Min(lo0, lo1, false);
- Hi = Node.Max(hi0, hi1, false);
- }
- } else if (node.Fun is FunctionCall) {
- var call = (FunctionCall)node.Fun;
- // See if this is an identity function, which we do by checking: that the function has
- // exactly one argument and the function has been marked by the user with the attribute {:identity}
- bool claimsToBeIdentity = false;
- if (call.ArgumentCount == 1 && call.Func.CheckBooleanAttribute("identity", ref claimsToBeIdentity) && claimsToBeIdentity && node.Args[0].Type.Equals(node.Type)) {
- VisitExpr(node.Args[0]);
- }
- }
- return node;
- }
- public override BinderExpr VisitBinderExpr(BinderExpr node) {
- // don't recurse on subexpression
- return node;
- }
- public override Expr VisitOldExpr(OldExpr node) {
- // don't recurse on subexpression
- return node;
- }
- public override Expr VisitCodeExpr(CodeExpr node) {
- // don't recurse on subexpression
- return node;
- }
- public override Expr VisitBvConcatExpr(BvConcatExpr node) {
- // don't recurse on subexpression
- return node;
- }
- public override Expr VisitBvExtractExpr(BvExtractExpr node) {
- // don't recurse on subexpression
- return node;
- }
- }
-
- public override Element Eliminate(Element element, Variable v) {
- if (element is E_Bottom) {
- return element;
- }
- var e = (E)element;
- var nn = UpdateOne(e.N, v, null, null);
- if (nn == e.N) {
- return element;
- } else {
- return new E(nn);
- }
- }
-
- Node UpdateOne(Node nn, Variable v, BigInteger? lo, BigInteger? hi) {
- var orig = nn;
- Node head = null;
- Node prev = null;
- var foundV = false;
- for (; nn != null && !Node.StrictlyBefore(v, nn.V); nn = nn.Next) {
- if (nn.V == v) {
- foundV = true;
- nn = nn.Next;
- break; // we found the place where the new node goes
- } else {
- var n = new Node(nn.V, nn.Lo, nn.Hi); // copy this Node
- if (head == null) {
- head = n;
- } else {
- prev.Next = n;
- }
- prev = n;
- }
- }
- Node rest;
- if (lo == null && hi == null) {
- // eliminate all information about "v"
- if (!foundV) {
- return orig;
- }
- rest = nn;
- } else {
- rest = new Node(v, lo, hi);
- rest.Next = nn;
- }
- if (head == null) {
- head = rest;
- } else {
- prev.Next = rest;
- }
- return head;
- }
-
- /// <summary>
- /// Return a resolved/type-checked expression that represents the conjunction of a and b.
- /// Requires a and b to be resolved and type checked already.
- /// </summary>
- public static Expr BplAnd(Expr a, Expr b) {
- if (a == Expr.True) {
- return b;
- } else if (b == Expr.True) {
- return a;
- } else {
- var nary = Expr.Binary(BinaryOperator.Opcode.And, a, b);
- nary.Type = Type.Bool;
- nary.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- return nary;
- }
- }
-
- /// <summary>
- /// Return a resolved/type-checked expression that represents a EQUALS b.
- /// Requires a and b to be resolved and type checked already.
- /// </summary>
- public static Expr BplEq(Expr a, Expr b) {
- var e = Expr.Eq(a, b);
- e.Type = Type.Bool;
- return e;
- }
-
- /// <summary>
- /// Return a resolved/type-checked expression that represents a LESS-EQUAL b.
- /// Requires a and b to be resolved and type checked already.
- /// </summary>
- public static Expr BplLe(Expr a, Expr b) {
- var e = Expr.Le(a, b);
- e.Type = Type.Bool;
- return e;
- }
- /// <summary>
- /// Return a resolved/type-checked expression that represents a LESS b.
- /// Requires a and b to be resolved and type checked already.
- /// </summary>
- public static Expr BplLt(Expr a, Expr b) {
- var e = Expr.Lt(a, b);
- e.Type = Type.Bool;
- return e;
- }
- }
-
- public class ThresholdFinder : ReadOnlyVisitor
- {
- readonly Implementation Impl;
- public ThresholdFinder(Implementation impl) {
- Contract.Requires(impl != null);
- Impl = impl;
- }
- HashSet<BigInteger> downs = new HashSet<BigInteger>();
- HashSet<BigInteger> ups = new HashSet<BigInteger>();
- public void Find(out List<BigInteger> downThresholds, out List<BigInteger> upThresholds) {
- // always include -1, 0, 1 as down-thresholds
- downs.Clear();
- downs.Add(-1);
- downs.Add(0);
- downs.Add(1);
- // always include 0 and 1 as up-thresholds
- ups.Clear();
- ups.Add(0);
- ups.Add(1);
-
- foreach (Requires p in Impl.Proc.Requires) {
- Visit(p.Condition);
- }
- foreach (Ensures p in Impl.Proc.Ensures) {
- Visit(p.Condition);
- }
- foreach (var b in Impl.Blocks) {
- foreach (Cmd c in b.Cmds) {
- Visit(c);
- }
- }
-
- // convert the HashSets to sorted Lists and return
- downThresholds = new List<BigInteger>();
- foreach (var i in downs) {
- downThresholds.Add(i);
- }
- downThresholds.Sort();
- upThresholds = new List<BigInteger>();
- foreach (var i in ups) {
- upThresholds.Add(i);
- }
- upThresholds.Sort();
- }
-
- public override Expr VisitNAryExpr(NAryExpr node) {
- if (node.Fun is BinaryOperator) {
- var op = (BinaryOperator)node.Fun;
- Contract.Assert(node.Args.Count == 2);
- var arg0 = node.Args[0];
- var arg1 = node.Args[1];
- var offset = arg0.Type.IsReal ? 0 : 1;
- BigInteger? k;
- switch (op.Op) {
- case BinaryOperator.Opcode.Eq:
- case BinaryOperator.Opcode.Neq:
- k = AsIntLiteral(arg0);
- if (k != null) {
- var i = (BigInteger)k;
- downs.Add(i - 1);
- downs.Add(i);
- ups.Add(i + 1);
- ups.Add(i + 2);
- }
- k = AsIntLiteral(arg1);
- if (k != null) {
- var i = (BigInteger)k;
- downs.Add(i - 1);
- downs.Add(i);
- ups.Add(i + 1);
- ups.Add(i + 2);
- }
- break;
- case BinaryOperator.Opcode.Le:
- k = AsIntLiteral(arg0);
- if (k != null) {
- var i = (BigInteger)k;
- downs.Add(i - 1);
- downs.Add(i);
- }
- k = AsIntLiteral(arg1);
- if (k != null) {
- var i = (BigInteger)k;
- ups.Add(i + offset);
- ups.Add(i + 1 + offset);
- }
- break;
- case BinaryOperator.Opcode.Lt:
- k = AsIntLiteral(arg0);
- if (k != null) {
- var i = (BigInteger)k;
- downs.Add(i );
- downs.Add(i + 1);
- }
- k = AsIntLiteral(arg1);
- if (k != null) {
- var i = (BigInteger)k;
- ups.Add(i - 1 + offset);
- ups.Add(i + offset);
- }
- break;
- case BinaryOperator.Opcode.Ge:
- { var tmp = arg0; arg0 = arg1; arg1 = tmp; }
- goto case BinaryOperator.Opcode.Le;
- case BinaryOperator.Opcode.Gt:
- { var tmp = arg0; arg0 = arg1; arg1 = tmp; }
- goto case BinaryOperator.Opcode.Lt;
- default:
- break;
- }
- }
- return base.VisitNAryExpr(node);
- }
-
- BigInteger? AsIntLiteral(Expr e) {
- var lit = e as LiteralExpr;
- if (lit != null && lit.isBigNum) {
- BigNum bn = lit.asBigNum;
- return bn.ToBigInteger;
- }
- return null;
- }
- }
-
-}
+using System;
+using System.Numerics;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+namespace Microsoft.Boogie.AbstractInterpretation
+{
+ class NativeIntervallDomain : NativeLattice
+ {
+ abstract class E_Common : NativeLattice.Element { }
+ class E_Bottom : E_Common
+ {
+ public override Expr ToExpr() {
+ return Expr.False;
+ }
+ }
+ class E : E_Common
+ {
+ public readonly Node N;
+ public E() { }
+ public E(Node n) {
+ N = n;
+ }
+
+ public override Expr ToExpr() {
+ Expr expr = Expr.True;
+ for (var n = N; n != null; n = n.Next) {
+ expr = BplAnd(expr, n.ToExpr());
+ }
+ return expr;
+ }
+ }
+ public class Node
+ {
+ public readonly Variable V; // variable has type bool or int
+ // For an integer variable (Lo,Hi) indicates Lo <= V < Hi, where Lo==null means no lower bound and Hi==null means no upper bound.
+ // For a real variable (Lo,Hi) indicates Lo <= V <= Hi, where Lo==null means no lower bound and Hi==null means no upper bound.
+ // For a boolean variable, (Lo,Hi) is one of: (null,null) for {false,true}, (null,1) for {false}, and (1,null) for {true}.
+ public readonly BigInteger? Lo;
+ public readonly BigInteger? Hi;
+ public Node Next; // always sorted according to StrictlyBefore; readonly after full initialization
+ [Pure]
+ public static bool StrictlyBefore(Variable a, Variable b) {
+ Contract.Assert(a.UniqueId != b.UniqueId || a == b);
+ return a.UniqueId < b.UniqueId;
+ }
+
+ Node(Variable v, BigInteger? lo, BigInteger? hi, Node next) {
+ Contract.Requires(lo != null || hi != null); // don't accept empty constraints
+ Contract.Requires(next == null || StrictlyBefore(v, next.V));
+ V = v;
+ Lo = lo;
+ Hi = hi;
+ Next = next;
+ }
+
+ /// <summary>
+ /// This constructor leaves Next as null, allowing the caller to fill in Next to finish off the construction.
+ /// </summary>
+ public Node(Variable v, BigInteger? lo, BigInteger? hi) {
+ Contract.Requires(lo != null || hi != null); // don't accept empty constraints
+ V = v;
+ Lo = lo;
+ Hi = hi;
+ }
+
+ /// <summary>
+ /// Returns a Node that has the constraints head.{V,Lo,Hi} plus
+ /// all the constraints entailed by Nodes reachable from tail.
+ /// Requires that "head" sorts no later than anything in "tail".
+ /// Create either returns "head" itself or returns a new Node.
+ /// </summary>
+ public static Node Create(Node head, Node tail) {
+ Contract.Requires(head != null);
+ Contract.Requires(tail == null || !StrictlyBefore(tail.V, head.V));
+ Contract.Requires(head != tail);
+
+ if (head.Next == tail) {
+ return head;
+ } else if (tail != null && head.V == tail.V) {
+ // incorporate both constraints into one Node
+ return new Node(head.V, Max(head.Lo, tail.Lo, true), Min(head.Lo, tail.Lo, true), tail.Next);
+ } else {
+ return new Node(head.V, head.Lo, head.Hi, tail);
+ }
+ }
+
+ public static void GetBounds(Node n, Variable v, out BigInteger? lo, out BigInteger? hi) {
+ for (; n != null; n = n.Next) {
+ if (n.V == v) {
+ lo = n.Lo;
+ hi = n.Hi;
+ return;
+ } else if (StrictlyBefore(v, n.V)) {
+ break;
+ }
+ }
+ lo = null;
+ hi = null;
+ }
+
+ /// <summary>
+ /// Return the minimum of "a" and "b". If treatNullAsUnit==true, then "null" is
+ /// interpreted as positive infinity (the unit element of min); otherwise, it is
+ /// treated as negative infinity (the zero element of min).
+ /// </summary>
+ public static BigInteger? Min(BigInteger? a, BigInteger? b, bool treatNullAsUnit) {
+ if (a == null) {
+ return treatNullAsUnit ? b : a;
+ } else if (b == null) {
+ return treatNullAsUnit ? a : b;
+ } else {
+ return BigInteger.Min((BigInteger)a, (BigInteger)b);
+ }
+ }
+
+ /// <summary>
+ /// Return the maximum of "a" and "b". If treatNullAsUnit==true, then "null" is
+ /// interpreted as negative infinity (the unit element of max); otherwise, it is
+ /// treated as positive infinity (the zero element of max).
+ /// </summary>
+ public static BigInteger? Max(BigInteger? a, BigInteger? b, bool treatNullAsUnit) {
+ if (a == null) {
+ return treatNullAsUnit ? b : a;
+ } else if (b == null) {
+ return treatNullAsUnit ? a : b;
+ } else {
+ return BigInteger.Max((BigInteger)a, (BigInteger)b);
+ }
+ }
+
+ public static IEnumerable<Tuple<Node, Node>> Merge(Node a, Node b) {
+ while (true) {
+ if (a == null && b == null) {
+ yield break;
+ } else if (a == null || b == null) {
+ yield return new Tuple<Node, Node>(a, b);
+ if (a != null) { a = a.Next; } else { b = b.Next; }
+ } else if (a.V == b.V) {
+ yield return new Tuple<Node, Node>(a, b);
+ a = a.Next; b = b.Next;
+ } else if (StrictlyBefore(a.V, b.V)) {
+ yield return new Tuple<Node, Node>(a, null);
+ a = a.Next;
+ } else {
+ yield return new Tuple<Node, Node>(null, b);
+ b = b.Next;
+ }
+ }
+ }
+
+ public Expr ToExpr() {
+ if (!V.IsMutable && CommandLineOptions.Clo.InstrumentInfer != CommandLineOptions.InstrumentationPlaces.Everywhere) {
+ // omit invariants about readonly variables
+ return Expr.True;
+ } else if (V.TypedIdent.Type.IsBool) {
+ if (Lo == null && Hi == null) {
+ return Expr.True;
+ } else {
+ Contract.Assert((Lo == null && (BigInteger)Hi == 1) || (Hi == null && (BigInteger)Lo == 1));
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ return Hi == null ? ide : Expr.Not(ide);
+ }
+ } else if (V.TypedIdent.Type.IsInt) {
+ Expr e = Expr.True;
+ if (Lo != null && Hi != null && Lo + 1 == Hi) {
+ // produce an equality
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplEq(ide, NumberToExpr((BigInteger)Lo, V.TypedIdent.Type)));
+ } else {
+ // produce a (possibly empty) conjunction of inequalities
+ if (Lo != null) {
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplLe(NumberToExpr((BigInteger)Lo, V.TypedIdent.Type), ide));
+ }
+ if (Hi != null) {
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplLt(ide, NumberToExpr((BigInteger)Hi, V.TypedIdent.Type)));
+ }
+ }
+ return e;
+ } else if (V.TypedIdent.Type.IsReal){
+ Expr e = Expr.True;
+ if (Lo != null && Hi != null && Lo == Hi) {
+ // produce an equality
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplEq(ide, NumberToExpr((BigInteger)Lo, V.TypedIdent.Type)));
+ } else {
+ // produce a (possibly empty) conjunction of inequalities
+ if (Lo != null) {
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplLe(NumberToExpr((BigInteger)Lo, V.TypedIdent.Type), ide));
+ }
+ if (Hi != null) {
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplLe(ide, NumberToExpr((BigInteger)Hi, V.TypedIdent.Type)));
+ }
+ }
+ return e;
+ } else {
+ Contract.Assert(V.TypedIdent.Type.IsFloat);
+ Expr e = Expr.True;
+ if (Lo != null && Hi != null && Lo == Hi)
+ {
+ // produce an equality
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplEq(ide, NumberToExpr((BigInteger)Lo, V.TypedIdent.Type)));
+ }
+ else
+ {
+ // produce a (possibly empty) conjunction of inequalities
+ if (Lo != null)
+ {
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplLe(NumberToExpr((BigInteger)Lo, V.TypedIdent.Type), ide));
+ }
+ if (Hi != null)
+ {
+ var ide = new IdentifierExpr(Token.NoToken, V);
+ e = Expr.And(e, BplLe(ide, NumberToExpr((BigInteger)Hi, V.TypedIdent.Type)));
+ }
+ }
+ return e;
+ }
+ }
+ }
+
+ static Expr NumberToExpr(BigInteger n, Type ty) {
+ if (n == null) {
+ return null;
+ } else if (ty.IsReal) {
+ return Expr.Literal(Basetypes.BigDec.FromBigInt(n));
+ } else if (ty.IsFloat) {
+ return Expr.Literal(Basetypes.BigFloat.FromBigInt(n, ty.FloatExponent, ty.FloatMantissa));
+ } else {
+ Contract.Assume(ty.IsInt);
+ return Expr.Literal(Basetypes.BigNum.FromBigInt(n));
+ }
+ }
+
+ List<BigInteger> upThresholds; // invariant: thresholds are sorted
+ List<BigInteger> downThresholds; // invariant: thresholds are sorted
+
+ /// <summary>
+ /// Requires "thresholds" to be sorted.
+ /// </summary>
+ public NativeIntervallDomain() {
+ upThresholds = new List<BigInteger>();
+ downThresholds = new List<BigInteger>();
+ }
+
+ public override void Specialize(Implementation impl) {
+ if (impl == null) {
+ // remove thresholds
+ upThresholds = new List<BigInteger>();
+ downThresholds = new List<BigInteger>();
+ } else {
+ var tf = new ThresholdFinder(impl);
+ tf.Find(out downThresholds, out upThresholds);
+#if DEBUG_PRINT
+ Console.Write("DEBUG: for implementation '{0}', setting downs to [", impl.Name);
+ foreach (var i in downThresholds) {
+ Console.Write(" {0}", i);
+ }
+ Console.Write(" ] and ups to [");
+ foreach (var i in upThresholds) {
+ Console.Write(" {0}", i);
+ }
+ Console.WriteLine(" ]");
+#endif
+ }
+ base.Specialize(impl);
+ }
+
+ private E_Common top = new E();
+ private E_Common bottom = new E_Bottom();
+
+ public override Element Top { get { return top; } }
+ public override Element Bottom { get { return bottom; } }
+
+ public override bool IsTop(Element element) {
+ var e = element as E;
+ return e != null && e.N == null;
+ }
+ public override bool IsBottom(Element element) {
+ return element is E_Bottom;
+ }
+
+ public override bool Below(Element a, Element b) {
+ if (a is E_Bottom) {
+ return true;
+ } else if (b is E_Bottom) {
+ return false;
+ } else {
+ var aa = (E)a;
+ var bb = (E)b;
+ // check if every constraint in 'bb' is implied by constraints in 'aa'
+ foreach (var t in Node.Merge(aa.N, bb.N)) {
+ var x = t.Item1;
+ var y = t.Item2;
+ if (x == null) {
+ // bb constrains a variable that aa does not
+ return false;
+ } else if (y == null) {
+ // aa constrains a variable that bb does not; that's fine
+ } else if (y.Lo != null && (x.Lo == null || x.Lo < y.Lo)) {
+ // bb has a Lo constraint, and either aa has no Lo constraint or it has a weaker Lo constraint
+ return false;
+ } else if (y.Hi != null && (x.Hi == null || y.Hi < x.Hi)) {
+ // bb has a Hi o constraint, and either aa has no Hi constraint or it has a weaker Hi constraint
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ public override Element Meet(Element a, Element b) {
+ if (a is E_Bottom) {
+ return a;
+ } else if (b is E_Bottom) {
+ return b;
+ } else {
+ var aa = (E)a;
+ var bb = (E)b;
+ Node head = null;
+ Node prev = null;
+ foreach (var t in Node.Merge(aa.N, bb.N)) {
+ var x = t.Item1;
+ var y = t.Item2;
+ Node n;
+ if (x == null) {
+ n = new Node(y.V, y.Lo, y.Hi);
+ } else if (y == null) {
+ n = new Node(x.V, x.Lo, x.Hi);
+ } else {
+ var lo = Node.Max(x.Lo, y.Lo, true);
+ var hi = Node.Min(x.Hi, y.Hi, true);
+ // if hi<=lo (or hi<lo for reals), then we're overconstrained
+ if (lo != null && hi != null && (x.V.TypedIdent.Type.IsReal ? hi < lo : hi <= lo)) {
+ return bottom;
+ }
+ n = new Node(x.V, lo, hi);
+ }
+ if (head == null) {
+ head = n;
+ } else {
+ prev.Next = n;
+ }
+ prev = n;
+ }
+ return new E(head);
+ }
+ }
+
+ public override Element Join(Element a, Element b) {
+ if (a is E_Bottom) {
+ return b;
+ } else if (b is E_Bottom) {
+ return a;
+ } else {
+ var aa = (E)a;
+ var bb = (E)b;
+ // for each variable, take the weaker of the constraints
+ Node head = null;
+ Node prev = null;
+ foreach (var t in Node.Merge(aa.N, bb.N)) {
+ if (t.Item1 != null && t.Item2 != null) {
+ var lo = Node.Min(t.Item1.Lo, t.Item2.Lo, false);
+ var hi = Node.Max(t.Item1.Hi, t.Item2.Hi, false);
+ if (lo != null || hi != null) {
+ var n = new Node(t.Item1.V, lo, hi);
+ if (head == null) {
+ head = n;
+ } else {
+ prev.Next = n;
+ }
+ prev = n;
+ }
+ }
+ }
+ return new E(head);
+ }
+ }
+
+ public override Element Widen(Element a, Element b) {
+ if (a is E_Bottom) {
+ return b; // since this is done just once, we maintain the ascending chains property
+ } else if (b is E_Bottom) {
+ return a;
+ } else {
+ var aa = (E)a;
+ var bb = (E)b;
+ // return a subset of the constraints of aa, namely those that are implied by bb
+ Node head = null;
+ Node prev = null;
+ foreach (var t in Node.Merge(aa.N, bb.N)) {
+ var x = t.Item1;
+ var y = t.Item2;
+ if (x != null && y != null) {
+ BigInteger? lo, hi;
+ lo = hi = null;
+ if (x.Lo != null && y.Lo != null) {
+ if (x.Lo <= y.Lo) {
+ // okay, we keep the lower bound
+ lo = x.Lo;
+ } else {
+ // set "lo" to the threshold that is below (or equal) y.Lo
+ lo = RoundDown((BigInteger)y.Lo);
+ }
+ }
+ if (x.Hi != null && y.Hi != null) {
+ if (y.Hi <= x.Hi) {
+ // okay, we keep the upper bound
+ hi = x.Hi;
+ } else {
+ // set "hi" to the threshold that is above (or equal) y.Hi
+ hi = RoundUp((BigInteger)y.Hi);
+ }
+ }
+ if (lo != null || hi != null) {
+ var n = new Node(x.V, lo, hi);
+ if (head == null) {
+ head = n;
+ } else {
+ prev.Next = n;
+ }
+ prev = n;
+ }
+ }
+ }
+ return new E(head);
+ }
+ }
+
+ /// <summary>
+ /// For a proof of correctness of this method, see Test/dafny2/Intervals.dfy.
+ /// A difference is that the this method returns:
+ /// let d = Dafny_RoundDown(k);
+ /// return d == -1 ? null : downThresholds[d];
+ /// </summary>
+ BigInteger? RoundDown(BigInteger k)
+ {
+ if (downThresholds.Count == 0 || k < downThresholds[0]) {
+ return null;
+ }
+ var i = 0;
+ var j = downThresholds.Count - 1;
+ while (i < j)
+ {
+ var mid = i + (j - i + 1) / 2;
+ if (downThresholds[mid] <= k) {
+ i = mid;
+ } else {
+ j = mid - 1;
+ }
+ }
+ return downThresholds[i];
+ }
+
+ /// <summary>
+ /// For a proof of correctness of this method, see Test/dafny2/Intervals.dfy.
+ /// A difference is that the this method returns:
+ /// let d = Dafny_RoundUp(k);
+ /// return d == thresholds.Count ? null : upThresholds[d];
+ /// </summary>
+ BigInteger? RoundUp(BigInteger k)
+ {
+ if (upThresholds.Count == 0 || upThresholds[upThresholds.Count - 1] < k) {
+ return null;
+ }
+ var i = 0;
+ var j = upThresholds.Count - 1;
+ while (i < j)
+ {
+ var mid = i + (j - i) / 2;
+ if (upThresholds[mid] < k) {
+ i = mid + 1;
+ } else {
+ j = mid;
+ }
+ }
+ return upThresholds[i];
+ }
+
+ public override Element Constrain(Element element, Expr expr) {
+ if (element is E_Bottom) {
+ return element;
+ } else {
+ var e = (E)element;
+ var c = Constraint(expr, e.N);
+ return c == null ? element : Meet(element, c);
+ }
+ }
+
+ /// <summary>
+ /// Returns an Element that corresponds to the constraints implied by "expr" in the
+ /// state "state".
+ /// Return "null" to indicate no constraints.
+ /// </summary>
+ E_Common Constraint(Expr expr, Node state) {
+ Variable v;
+ if (IsVariable(expr, out v)) {
+ var n = new Node(v, BigInteger.One, null);
+ return new E(n);
+ } else if (expr is LiteralExpr) {
+ var e = (LiteralExpr)expr;
+ return (bool)e.Val ? null : new E_Bottom();
+ } else if (expr is NAryExpr) {
+ var e = (NAryExpr)expr;
+ if (e.Fun is UnaryOperator) {
+ if (((UnaryOperator)e.Fun).Op == UnaryOperator.Opcode.Not) {
+ if (IsVariable(e.Args[0], out v)) {
+ var n = new Node(v, null, BigInteger.One);
+ return new E(n);
+ }
+ }
+ } else if (e.Fun is BinaryOperator) {
+ var op = ((BinaryOperator)e.Fun).Op;
+ var arg0 = e.Args[0];
+ var arg1 = e.Args[1];
+ switch (op) {
+ case BinaryOperator.Opcode.Eq:
+ case BinaryOperator.Opcode.Iff: {
+ E_Common c = null;
+ if (IsVariable(arg0, out v)) {
+ BigInteger? lo, hi;
+ if (PartiallyEvaluate(arg1, state, out lo, out hi)) {
+ var n = new Node(v, lo, hi);
+ c = new E(n);
+ }
+ }
+ if (IsVariable(arg1, out v)) {
+ BigInteger? lo, hi;
+ if (PartiallyEvaluate(arg1, state, out lo, out hi)) {
+ var n = new Node(v, lo, hi);
+ c = c == null ? new E(n) : (E_Common)Meet(c, new E(n));
+ }
+ }
+ return c;
+ }
+ case BinaryOperator.Opcode.Neq: {
+ E_Common c = null;
+ if (IsVariable(arg0, out v)) {
+ c = ConstrainNeq(state, v, arg1);
+ }
+ if (IsVariable(arg1, out v)) {
+ var cc = ConstrainNeq(state, v, arg0);
+ if (cc != null) {
+ c = c == null ? cc : (E_Common)Meet(c, cc);
+ }
+ }
+ return c;
+ }
+ case BinaryOperator.Opcode.Le: {
+ E_Common c = null;
+ if (IsVariable(arg1, out v)) {
+ BigInteger? lo, hi;
+ PartiallyEvaluate(arg0, state, out lo, out hi);
+ if (lo != null) {
+ var n = new Node(v, lo, null);
+ c = new E(n);
+ }
+ }
+ if (IsVariable(arg0, out v)) {
+ BigInteger? lo, hi;
+ PartiallyEvaluate(arg1, state, out lo, out hi);
+ if (hi != null) {
+ var n = new Node(v, null, hi);
+ c = c == null ? new E(n) : (E_Common)Meet(c, new E(n));
+ }
+ }
+ return c;
+ }
+ case BinaryOperator.Opcode.Lt: {
+ E_Common c = null;
+ if (IsVariable(arg1, out v)) {
+ BigInteger? lo, hi;
+ PartiallyEvaluate(arg0, state, out lo, out hi);
+ if (lo != null) {
+ var n = new Node(v, v.TypedIdent.Type.IsReal ? lo : lo + 1, null);
+ c = new E(n);
+ }
+ }
+ if (IsVariable(arg0, out v)) {
+ BigInteger? lo, hi;
+ PartiallyEvaluate(arg1, state, out lo, out hi);
+ if (hi != null) {
+ var n = new Node(v, null, v.TypedIdent.Type.IsReal ? hi : hi - 1);
+ c = c == null ? new E(n) : (E_Common)Meet(c, new E(n));
+ }
+ }
+ return c;
+ }
+ case BinaryOperator.Opcode.Ge: {
+ var tmp = arg0; arg0 = arg1; arg1 = tmp;
+ goto case BinaryOperator.Opcode.Le;
+ }
+ case BinaryOperator.Opcode.Gt: {
+ var tmp = arg0; arg0 = arg1; arg1 = tmp;
+ goto case BinaryOperator.Opcode.Lt;
+ }
+ default:
+ break;
+ }
+ }
+ }
+ return null; // approximation
+ }
+
+ private E ConstrainNeq(Node state, Variable v, Expr arg) {
+ BigInteger? lo, hi;
+ if (PartiallyEvaluate(arg, state, out lo, out hi)) {
+ if (!v.TypedIdent.Type.IsReal && lo != null && hi != null && lo + 1 == hi) {
+ var exclude = lo;
+ // If the partially evaluated arg (whose value is "exclude") is an end-point of
+ // the interval known for "v", then produce a constraint that excludes that bound.
+ Node.GetBounds(state, v, out lo, out hi);
+ if (lo != null && lo == exclude) {
+ var n = new Node(v, lo + 1, null);
+ return new E(n);
+ } else if (hi != null && exclude + 1 == hi) {
+ var n = new Node(v, null, exclude);
+ return new E(n);
+ }
+ }
+ }
+ return null;
+ }
+
+ bool IsVariable(Expr expr, out Variable v) {
+ var e = expr as IdentifierExpr;
+ if (e == null) {
+ v = null;
+ return false;
+ } else {
+ v = e.Decl;
+ return true;
+ }
+ }
+
+ public override Element Update(Element element, AssignCmd cmd) {
+ if (element is E_Bottom) {
+ return element;
+ }
+ var e = (E)element;
+ var nn = e.N;
+ Contract.Assert(cmd.Lhss.Count == cmd.Rhss.Count);
+ for (int i = 0; i < cmd.Lhss.Count; i++) {
+ var lhs = cmd.Lhss[i];
+ var rhs = cmd.Rhss[i];
+ BigInteger? lo;
+ BigInteger? hi;
+ PartiallyEvaluate(rhs, e.N, out lo, out hi);
+ nn = UpdateOne(nn, lhs.DeepAssignedVariable, lo, hi);
+ }
+ return new E(nn);
+ }
+
+ bool PartiallyEvaluate(Expr rhs, Node node, out BigInteger? lo, out BigInteger? hi) {
+ var pe = new PEVisitor(node);
+ pe.VisitExpr(rhs);
+ lo = pe.Lo;
+ hi = pe.Hi;
+ return lo != null || hi != null;
+ }
+
+ class PEVisitor : ReadOnlyVisitor
+ {
+ public BigInteger? Lo;
+ public BigInteger? Hi;
+
+ readonly BigInteger one = BigInteger.One;
+
+ Node N;
+ public PEVisitor(Node n) {
+ N = n;
+ }
+
+ // Override visitors for all expressions that can return a boolean, integer, or real result
+
+ public override Expr VisitExpr(Expr node) {
+ Lo = Hi = null;
+ return base.VisitExpr(node);
+ }
+ public override Expr VisitLiteralExpr(LiteralExpr node) {
+ if (node.Val is BigNum) {
+ var n = ((BigNum)node.Val).ToBigInteger;
+ Lo = n;
+ Hi = n + 1;
+ } else if (node.Val is BigDec) {
+ BigInteger floor, ceiling;
+ ((BigDec)node.Val).FloorCeiling(out floor, out ceiling);
+ Lo = floor;
+ Hi = ceiling;
+ } else if (node.Val is BigFloat) {
+ BigNum floor, ceiling;
+ ((BigFloat)node.Val).FloorCeiling(out floor, out ceiling);
+ Lo = floor.ToBigInteger;
+ Hi = ceiling.ToBigInteger;
+ } else if (node.Val is bool) {
+ if ((bool)node.Val) {
+ // true
+ Lo = one;
+ Hi = null;
+ } else {
+ // false
+ Lo = null;
+ Hi = one;
+ }
+ }
+ return node;
+ }
+ public override Expr VisitIdentifierExpr(IdentifierExpr node) {
+ if (node.Type.IsBool || node.Type.IsInt || node.Type.IsReal) {
+ Node.GetBounds(N, node.Decl, out Lo, out Hi);
+ }
+ return node;
+ }
+ public override Expr VisitNAryExpr(NAryExpr node) {
+ if (node.Fun is UnaryOperator) {
+ var op = (UnaryOperator)node.Fun;
+ Contract.Assert(node.Args.Count == 1);
+ if (op.Op == UnaryOperator.Opcode.Neg) {
+ BigInteger? lo, hi;
+ VisitExpr(node.Args[0]);
+ lo = Lo; hi = Hi;
+ if (hi != null) {
+ Lo = node.Type.IsReal ? -hi : 1 - hi;
+ } else {
+ Lo = null;
+ }
+ if (lo != null) {
+ Hi = node.Type.IsReal ? -lo : 1 - lo;
+ } else {
+ Hi = null;
+ }
+ }
+ else if (op.Op == UnaryOperator.Opcode.Not) {
+ VisitExpr(node.Args[0]);
+ Contract.Assert((Lo == null && Hi == null) ||
+ (Lo == null && (BigInteger)Hi == 1) ||
+ (Hi == null && (BigInteger)Lo == 1));
+ var tmp = Lo;
+ Lo = Hi;
+ Hi = tmp;
+ }
+ } else if (node.Fun is BinaryOperator) {
+ var op = (BinaryOperator)node.Fun;
+ Contract.Assert(node.Args.Count == 2);
+ BigInteger? lo0, hi0, lo1, hi1;
+ VisitExpr(node.Args[0]);
+ lo0 = Lo; hi0 = Hi;
+ VisitExpr(node.Args[1]);
+ lo1 = Lo; hi1 = Hi;
+ Lo = Hi = null;
+ var isReal = node.Args[0].Type.IsReal;
+ switch (op.Op) {
+ case BinaryOperator.Opcode.And:
+ if (hi0 != null || hi1 != null) {
+ // one operand is definitely false, thus so is the result
+ Lo = null; Hi = one;
+ } else if (lo0 != null && lo1 != null) {
+ // both operands are definitely true, thus so is the result
+ Lo = one; Hi = null;
+ }
+ break;
+ case BinaryOperator.Opcode.Or:
+ if (lo0 != null || lo1 != null) {
+ // one operand is definitely true, thus so is the result
+ Lo = one; Hi = null;
+ } else if (hi0 != null && hi1 != null) {
+ // both operands are definitely false, thus so is the result
+ Lo = null; Hi = one;
+ }
+ break;
+ case BinaryOperator.Opcode.Imp:
+ if (hi0 != null || lo1 != null) {
+ // either arg0 false or arg1 is true, so the result is true
+ Lo = one; Hi = null;
+ } else if (lo0 != null && hi1 != null) {
+ // arg0 is true and arg1 is false, so the result is false
+ Lo = null; Hi = one;
+ }
+ break;
+ case BinaryOperator.Opcode.Iff:
+ if (lo0 != null && lo1 != null) {
+ Lo = one; Hi = null;
+ } else if (hi0 != null && hi1 != null) {
+ Lo = one; Hi = null;
+ } else if (lo0 != null && hi1 != null) {
+ Lo = null; Hi = one;
+ } else if (hi0 != null && lo1 != null) {
+ Lo = null; Hi = one;
+ }
+ if (op.Op == BinaryOperator.Opcode.Neq) {
+ var tmp = Lo; Lo = Hi; Hi = tmp;
+ }
+ break;
+ case BinaryOperator.Opcode.Eq:
+ case BinaryOperator.Opcode.Neq:
+ if (node.Args[0].Type.IsBool) {
+ goto case BinaryOperator.Opcode.Iff;
+ }
+ // For Eq:
+ // If the (lo0,hi0) and (lo1,hi1) ranges do not overlap, the answer is false.
+ // If both ranges are the same unit range, then the answer is true.
+ if (hi0 != null && lo1 != null && (isReal ? hi0 < lo1 : hi0 <= lo1)) {
+ // no overlap
+ Lo = null; Hi = one;
+ } else if (lo0 != null && hi1 != null && (isReal ? hi1 < lo0 : hi1 <= lo0)) {
+ Lo = null; Hi = one;
+ // no overlaop
+ } else if (lo0 != null && hi0 != null && lo1 != null && hi1 != null &&
+ lo0 == lo1 && hi0 == hi1 && // ranges are the same
+ (isReal ? lo0 == hi0 : lo0 + 1 == hi0)) { // unit range
+ // both ranges are the same unit range
+ Lo = one; Hi = null;
+ }
+ if (op.Op == BinaryOperator.Opcode.Neq) {
+ var tmp = Lo; Lo = Hi; Hi = tmp;
+ }
+ break;
+ case BinaryOperator.Opcode.Le:
+ if (isReal) {
+ // If hi0 <= lo1, then the answer is true.
+ // If hi1 < lo0, then the answer is false.
+ if (hi0 != null && lo1 != null && hi0 <= lo1) {
+ Lo = one; Hi = null;
+ } else if (hi1 != null && lo0 != null && hi1 < lo0) {
+ Lo = null; Hi = one;
+ }
+ } else {
+ // If hi0 - 1 <= lo1, then the answer is true.
+ // If hi1 <= lo0, then the answer is false.
+ if (hi0 != null && lo1 != null && hi0 - 1 <= lo1) {
+ Lo = one; Hi = null;
+ } else if (lo0 != null && hi1 != null && hi1 <= lo0) {
+ Lo = null; Hi = one;
+ }
+ }
+ break;
+ case BinaryOperator.Opcode.Lt:
+ if (isReal) {
+ // If hi0 < lo1, then the answer is true.
+ // If hi1 <= lo0, then the answer is false.
+ if (hi0 != null && lo1 != null && hi0 < lo1) {
+ Lo = one; Hi = null;
+ } else if (hi1 != null && lo0 != null && hi1 <= lo0) {
+ Lo = null; Hi = one;
+ }
+ } else {
+ // If hi0 <= lo1, then the answer is true.
+ // If hi1 - 1 <= lo0, then the answer is false.
+ if (hi0 != null && lo1 != null && hi0 <= lo1) {
+ Lo = one; Hi = null;
+ } else if (lo0 != null && hi1 != null && hi1 - 1 <= lo0) {
+ Lo = null; Hi = one;
+ }
+ }
+ break;
+ case BinaryOperator.Opcode.Gt:
+ // swap the operands and then continue as Lt
+ {
+ var tmp = lo0; lo0 = lo1; lo1 = tmp;
+ tmp = hi0; hi0 = hi1; hi1 = tmp;
+ }
+ goto case BinaryOperator.Opcode.Lt;
+ case BinaryOperator.Opcode.Ge:
+ // swap the operands and then continue as Le
+ {
+ var tmp = lo0; lo0 = lo1; lo1 = tmp;
+ tmp = hi0; hi0 = hi1; hi1 = tmp;
+ }
+ goto case BinaryOperator.Opcode.Le;
+ case BinaryOperator.Opcode.Add:
+ if (lo0 != null && lo1 != null) {
+ Lo = lo0 + lo1;
+ }
+ if (hi0 != null && hi1 != null) {
+ Hi = isReal ? hi0 + hi1 : hi0 + hi1 - 1;
+ }
+ break;
+ case BinaryOperator.Opcode.Sub:
+ if (lo0 != null && hi1 != null) {
+ Lo = isReal ? lo0 - hi1 : lo0 - hi1 + 1;
+ }
+ if (hi0 != null && lo1 != null) {
+ Hi = hi0 - lo1;
+ }
+ break;
+ case BinaryOperator.Opcode.Mul:
+ // this uses an incomplete approximation that could be tightened up
+ if (lo0 != null && lo1 != null) {
+ if (0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
+ Lo = lo0 * lo1;
+ Hi = hi0 == null || hi1 == null ? null : isReal ? hi0 * hi1 : (hi0 - 1) * (hi1 - 1) + 1;
+ } else if ((BigInteger)lo0 < 0 && (BigInteger)lo1 < 0) {
+ Lo = null; // approximation
+ Hi = isReal ? lo0 * lo1 : lo0 * lo1 + 1;
+ }
+ }
+ break;
+ case BinaryOperator.Opcode.Div:
+ // this uses an incomplete approximation that could be tightened up
+ if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
+ Lo = BigInteger.Zero;
+ Hi = hi0;
+ }
+ break;
+ case BinaryOperator.Opcode.Mod:
+ // this uses an incomplete approximation that could be tightened up
+ if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
+ Lo = BigInteger.Zero;
+ Hi = hi1;
+ if (lo0 < lo1 && hi0 != null && hi0 < lo1) {
+ Lo = lo0;
+ Hi = hi0;
+ }
+ }
+ break;
+ case BinaryOperator.Opcode.RealDiv:
+ // this uses an incomplete approximation that could be tightened up
+ if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
+ Lo = BigInteger.Zero;
+ Hi = 1 <= (BigInteger)lo1 ? hi0 : null;
+ }
+ break;
+ case BinaryOperator.Opcode.Pow:
+ // this uses an incomplete approximation that could be tightened up
+ if (lo0 != null && lo1 != null && 0 <= (BigInteger)lo0 && 0 <= (BigInteger)lo1) {
+ Lo = 1 <= (BigInteger)lo1 ? BigInteger.One : BigInteger.Zero;
+ Hi = hi1;
+ }
+ break;
+ default:
+ break;
+ }
+ } else if (node.Fun is IfThenElse) {
+ var op = (IfThenElse)node.Fun;
+ Contract.Assert(node.Args.Count == 3);
+ BigInteger? guardLo, guardHi, lo0, hi0, lo1, hi1;
+ VisitExpr(node.Args[0]);
+ guardLo = Lo; guardHi = Hi;
+ VisitExpr(node.Args[1]);
+ lo0 = Lo; hi0 = Hi;
+ VisitExpr(node.Args[2]);
+ lo1 = Lo; hi1 = Hi;
+ Contract.Assert(guardLo == null || guardHi == null); // this is a consequence of the guard being boolean
+ if (guardLo != null) {
+ // guard is always true
+ Lo = lo0; Hi = hi0;
+ } else if (guardHi != null) {
+ // guard is always false
+ Lo = lo1; Hi = hi1;
+ } else {
+ // we don't know which branch will be taken, so join the information from the two branches
+ Lo = Node.Min(lo0, lo1, false);
+ Hi = Node.Max(hi0, hi1, false);
+ }
+ } else if (node.Fun is FunctionCall) {
+ var call = (FunctionCall)node.Fun;
+ // See if this is an identity function, which we do by checking: that the function has
+ // exactly one argument and the function has been marked by the user with the attribute {:identity}
+ bool claimsToBeIdentity = false;
+ if (call.ArgumentCount == 1 && call.Func.CheckBooleanAttribute("identity", ref claimsToBeIdentity) && claimsToBeIdentity && node.Args[0].Type.Equals(node.Type)) {
+ VisitExpr(node.Args[0]);
+ }
+ }
+ return node;
+ }
+ public override BinderExpr VisitBinderExpr(BinderExpr node) {
+ // don't recurse on subexpression
+ return node;
+ }
+ public override Expr VisitOldExpr(OldExpr node) {
+ // don't recurse on subexpression
+ return node;
+ }
+ public override Expr VisitCodeExpr(CodeExpr node) {
+ // don't recurse on subexpression
+ return node;
+ }
+ public override Expr VisitBvConcatExpr(BvConcatExpr node) {
+ // don't recurse on subexpression
+ return node;
+ }
+ public override Expr VisitBvExtractExpr(BvExtractExpr node) {
+ // don't recurse on subexpression
+ return node;
+ }
+ }
+
+ public override Element Eliminate(Element element, Variable v) {
+ if (element is E_Bottom) {
+ return element;
+ }
+ var e = (E)element;
+ var nn = UpdateOne(e.N, v, null, null);
+ if (nn == e.N) {
+ return element;
+ } else {
+ return new E(nn);
+ }
+ }
+
+ Node UpdateOne(Node nn, Variable v, BigInteger? lo, BigInteger? hi) {
+ var orig = nn;
+ Node head = null;
+ Node prev = null;
+ var foundV = false;
+ for (; nn != null && !Node.StrictlyBefore(v, nn.V); nn = nn.Next) {
+ if (nn.V == v) {
+ foundV = true;
+ nn = nn.Next;
+ break; // we found the place where the new node goes
+ } else {
+ var n = new Node(nn.V, nn.Lo, nn.Hi); // copy this Node
+ if (head == null) {
+ head = n;
+ } else {
+ prev.Next = n;
+ }
+ prev = n;
+ }
+ }
+ Node rest;
+ if (lo == null && hi == null) {
+ // eliminate all information about "v"
+ if (!foundV) {
+ return orig;
+ }
+ rest = nn;
+ } else {
+ rest = new Node(v, lo, hi);
+ rest.Next = nn;
+ }
+ if (head == null) {
+ head = rest;
+ } else {
+ prev.Next = rest;
+ }
+ return head;
+ }
+
+ /// <summary>
+ /// Return a resolved/type-checked expression that represents the conjunction of a and b.
+ /// Requires a and b to be resolved and type checked already.
+ /// </summary>
+ public static Expr BplAnd(Expr a, Expr b) {
+ if (a == Expr.True) {
+ return b;
+ } else if (b == Expr.True) {
+ return a;
+ } else {
+ var nary = Expr.Binary(BinaryOperator.Opcode.And, a, b);
+ nary.Type = Type.Bool;
+ nary.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ return nary;
+ }
+ }
+
+ /// <summary>
+ /// Return a resolved/type-checked expression that represents a EQUALS b.
+ /// Requires a and b to be resolved and type checked already.
+ /// </summary>
+ public static Expr BplEq(Expr a, Expr b) {
+ var e = Expr.Eq(a, b);
+ e.Type = Type.Bool;
+ return e;
+ }
+
+ /// <summary>
+ /// Return a resolved/type-checked expression that represents a LESS-EQUAL b.
+ /// Requires a and b to be resolved and type checked already.
+ /// </summary>
+ public static Expr BplLe(Expr a, Expr b) {
+ var e = Expr.Le(a, b);
+ e.Type = Type.Bool;
+ return e;
+ }
+ /// <summary>
+ /// Return a resolved/type-checked expression that represents a LESS b.
+ /// Requires a and b to be resolved and type checked already.
+ /// </summary>
+ public static Expr BplLt(Expr a, Expr b) {
+ var e = Expr.Lt(a, b);
+ e.Type = Type.Bool;
+ return e;
+ }
+ }
+
+ public class ThresholdFinder : ReadOnlyVisitor
+ {
+ readonly Implementation Impl;
+ public ThresholdFinder(Implementation impl) {
+ Contract.Requires(impl != null);
+ Impl = impl;
+ }
+ HashSet<BigInteger> downs = new HashSet<BigInteger>();
+ HashSet<BigInteger> ups = new HashSet<BigInteger>();
+ public void Find(out List<BigInteger> downThresholds, out List<BigInteger> upThresholds) {
+ // always include -1, 0, 1 as down-thresholds
+ downs.Clear();
+ downs.Add(-1);
+ downs.Add(0);
+ downs.Add(1);
+ // always include 0 and 1 as up-thresholds
+ ups.Clear();
+ ups.Add(0);
+ ups.Add(1);
+
+ foreach (Requires p in Impl.Proc.Requires) {
+ Visit(p.Condition);
+ }
+ foreach (Ensures p in Impl.Proc.Ensures) {
+ Visit(p.Condition);
+ }
+ foreach (var b in Impl.Blocks) {
+ foreach (Cmd c in b.Cmds) {
+ Visit(c);
+ }
+ }
+
+ // convert the HashSets to sorted Lists and return
+ downThresholds = new List<BigInteger>();
+ foreach (var i in downs) {
+ downThresholds.Add(i);
+ }
+ downThresholds.Sort();
+ upThresholds = new List<BigInteger>();
+ foreach (var i in ups) {
+ upThresholds.Add(i);
+ }
+ upThresholds.Sort();
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node) {
+ if (node.Fun is BinaryOperator) {
+ var op = (BinaryOperator)node.Fun;
+ Contract.Assert(node.Args.Count == 2);
+ var arg0 = node.Args[0];
+ var arg1 = node.Args[1];
+ var offset = arg0.Type.IsReal ? 0 : 1;
+ BigInteger? k;
+ switch (op.Op) {
+ case BinaryOperator.Opcode.Eq:
+ case BinaryOperator.Opcode.Neq:
+ k = AsIntLiteral(arg0);
+ if (k != null) {
+ var i = (BigInteger)k;
+ downs.Add(i - 1);
+ downs.Add(i);
+ ups.Add(i + 1);
+ ups.Add(i + 2);
+ }
+ k = AsIntLiteral(arg1);
+ if (k != null) {
+ var i = (BigInteger)k;
+ downs.Add(i - 1);
+ downs.Add(i);
+ ups.Add(i + 1);
+ ups.Add(i + 2);
+ }
+ break;
+ case BinaryOperator.Opcode.Le:
+ k = AsIntLiteral(arg0);
+ if (k != null) {
+ var i = (BigInteger)k;
+ downs.Add(i - 1);
+ downs.Add(i);
+ }
+ k = AsIntLiteral(arg1);
+ if (k != null) {
+ var i = (BigInteger)k;
+ ups.Add(i + offset);
+ ups.Add(i + 1 + offset);
+ }
+ break;
+ case BinaryOperator.Opcode.Lt:
+ k = AsIntLiteral(arg0);
+ if (k != null) {
+ var i = (BigInteger)k;
+ downs.Add(i );
+ downs.Add(i + 1);
+ }
+ k = AsIntLiteral(arg1);
+ if (k != null) {
+ var i = (BigInteger)k;
+ ups.Add(i - 1 + offset);
+ ups.Add(i + offset);
+ }
+ break;
+ case BinaryOperator.Opcode.Ge:
+ { var tmp = arg0; arg0 = arg1; arg1 = tmp; }
+ goto case BinaryOperator.Opcode.Le;
+ case BinaryOperator.Opcode.Gt:
+ { var tmp = arg0; arg0 = arg1; arg1 = tmp; }
+ goto case BinaryOperator.Opcode.Lt;
+ default:
+ break;
+ }
+ }
+ return base.VisitNAryExpr(node);
+ }
+
+ BigInteger? AsIntLiteral(Expr e) {
+ var lit = e as LiteralExpr;
+ if (lit != null && lit.isBigNum) {
+ BigNum bn = lit.asBigNum;
+ return bn.ToBigInteger;
+ }
+ return null;
+ }
+ }
+
+}
diff --git a/Source/AbsInt/NativeLattice.cs b/Source/AbsInt/NativeLattice.cs
index 30014643..d1ae215a 100644
--- a/Source/AbsInt/NativeLattice.cs
+++ b/Source/AbsInt/NativeLattice.cs
@@ -1,335 +1,335 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie;
-
-namespace Microsoft.Boogie.AbstractInterpretation
-{
- /// <summary>
- /// Specifies the operations (e.g., join) on a mathematical lattice that depend
- /// only on the elements of the lattice.
- /// </summary>
- public abstract class NativeLattice
- {
- /// <summary>
- /// An element of the lattice. This class should be derived from in any
- /// implementation of MathematicalLattice.
- /// </summary>
- public abstract class Element
- {
- public abstract Expr ToExpr();
- }
-
- public abstract Element Top { get; }
- public abstract Element Bottom { get; }
-
- public abstract bool IsTop(Element element);
- public abstract bool IsBottom(Element element);
-
- /// <summary>
- /// Is 'a' better (or equal) information than 'b'? That is, is 'a' below 'b' in the lattice?
- /// </summary>
- public abstract bool Below(Element a, Element b);
-
- public abstract Element Meet(Element a, Element b);
- public abstract Element Join(Element a, Element b);
- public abstract Element Widen(Element a, Element b);
-
- public abstract Element Constrain(Element element, Expr expr);
- public abstract Element Update(Element element, AssignCmd cmd); // requiers 'cmd' to be a simple (possibly parallel) assignment command
- public abstract Element Eliminate(Element element, Variable v);
-
- /// <summary>
- /// Specialize the lattice to implementation "impl", if non-null.
- /// If "impl" is null, remove specialization.
- /// </summary>
- public virtual void Specialize(Implementation impl) {
- }
-
- public virtual void Validate() {
- Contract.Assert(IsTop(Top));
- Contract.Assert(IsBottom(Bottom));
- Contract.Assert(!IsBottom(Top));
- Contract.Assert(!IsTop(Bottom));
-
- Contract.Assert(Below(Top, Top));
- Contract.Assert(Below(Bottom, Top));
- Contract.Assert(Below(Bottom, Bottom));
-
- Contract.Assert(IsTop(Join(Top, Top)));
- Contract.Assert(IsBottom(Join(Bottom, Bottom)));
- }
- }
-
- public class NativeAbstractInterpretation
- {
- public static void RunAbstractInterpretation(Program program) {
- Contract.Requires(program != null);
-
- if (!CommandLineOptions.Clo.UseAbstractInterpretation) {
- return;
- }
- Helpers.ExtraTraceInformation("Starting abstract interpretation");
-
- DateTime start = new DateTime(); // to please compiler's definite assignment rules
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine();
- Console.WriteLine("Running abstract interpretation...");
- start = DateTime.UtcNow;
- }
-
- WidenPoints.Compute(program);
-
- NativeLattice lattice = null;
- if (CommandLineOptions.Clo.Ai.J_Trivial) {
- lattice = new TrivialDomain();
- } else if (CommandLineOptions.Clo.Ai.J_Intervals) {
- lattice = new NativeIntervallDomain();
- }
-
- if (lattice != null) {
- Dictionary<Procedure, Implementation[]> procedureImplementations = ComputeProcImplMap(program);
- ComputeProgramInvariants(program, procedureImplementations, lattice);
- if (CommandLineOptions.Clo.Ai.DebugStatistics) {
- Console.Error.WriteLine(lattice);
- }
- }
-
- if (CommandLineOptions.Clo.Trace) {
- DateTime end = DateTime.UtcNow;
- TimeSpan elapsed = end - start;
- Console.WriteLine(" [{0} s]", elapsed.TotalSeconds);
- Console.Out.Flush();
- }
- }
-
- private static Dictionary<Procedure, Implementation[]> ComputeProcImplMap(Program program) {
- Contract.Requires(program != null);
- // Since implementations call procedures (impl. signatures)
- // rather than directly calling other implementations, we first
- // need to compute which implementations implement which
- // procedures and remember which implementations call which
- // procedures.
-
- return program
- .Implementations
- .GroupBy(i => i.Proc).Select(g => g.ToArray()).ToDictionary(a => a[0].Proc);
- }
-
- /// <summary>
- /// Compute and apply the invariants for the program using the underlying abstract domain.
- /// </summary>
- public static void ComputeProgramInvariants(Program program, Dictionary<Procedure, Implementation[]> procedureImplementations, NativeLattice lattice) {
- Contract.Requires(program != null);
- Contract.Requires(procedureImplementations != null);
- Contract.Requires(lattice != null);
-
- // Gather all the axioms to create the initial lattice element
- // Differently stated, it is the \alpha from axioms (i.e. first order formulae) to the underlyng abstract domain
- var initialElement = lattice.Top;
- Contract.Assert(initialElement != null);
- foreach (var ax in program.Axioms) {
- initialElement = lattice.Constrain(initialElement, ax.Expr);
- }
-
- // analyze each procedure
- foreach (var proc in program.Procedures) {
- if (procedureImplementations.ContainsKey(proc)) {
- // analyze each implementation of the procedure
- foreach (var impl in procedureImplementations[proc]) {
- // add the precondition to the axioms
- Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
- var start = initialElement;
- foreach (Requires pre in proc.Requires) {
- Expr e = Substituter.Apply(formalProcImplSubst, pre.Condition);
- start = lattice.Constrain(start, e);
- }
-
- lattice.Specialize(impl);
- Analyze(impl, lattice, start);
- lattice.Specialize(null);
- }
- }
- }
- }
-
- public static void Analyze(Implementation impl, NativeLattice lattice, NativeLattice.Element start) {
- // We need to keep track of some information for each(some) block(s). To do that efficiently,
- // we number the implementation's blocks sequentially, and then we can use arrays to store
- // the additional information.
- var pre = new NativeLattice.Element[impl.Blocks.Count]; // set to null if we never compute a join/widen at this block
- var post = CommandLineOptions.Clo.InstrumentInfer == CommandLineOptions.InstrumentationPlaces.Everywhere ? new NativeLattice.Element[impl.Blocks.Count] : null;
- var iterations = new int[impl.Blocks.Count];
- var bottom = lattice.Bottom;
- int n = 0;
- foreach (var block in impl.Blocks) {
- block.aiId = n;
- // Note: The forward analysis below will store lattice elements in pre[n] if pre[n] is non-null.
- // Thus, the assignment "pre[n] = bottom;" below must be done under the following condition:
- // n == 0 || block.widenBlock
- // One possible strategy would be to do it only under that condition. Alternatively,
- // one could do the assignment under the following condition:
- // n == 0 || block.widenBlock || block.Predecessors.Length != 1
- // (which would require first setting the Predecessors field). In any case, if
- // CommandLineOptions.Clo.InstrumentInfer == CommandLineOptions.InstrumentationPlaces.Everywhere
- // then all pre[n] should be set.
- pre[n] = bottom;
- n++;
- }
- Contract.Assert(n == impl.Blocks.Count);
-
- var workItems = new Queue<Tuple<Block, NativeLattice.Element>>();
- workItems.Enqueue(new Tuple<Block, NativeLattice.Element>(impl.Blocks[0], start));
- //ComputeBlockInvariantsNative(impl, );
- // compute a fixpoint here
- while (workItems.Count > 0) {
- var workItem = workItems.Dequeue();
- var b = workItem.Item1;
- var id = b.aiId;
- var e = workItem.Item2;
- if (pre[id] == null) {
- // no pre information stored here, so just go ahead through the block
- } else if (lattice.Below(e, pre[id])) {
- // no change
- continue;
- } else if (b.widenBlock && CommandLineOptions.Clo.StepsBeforeWidening <= iterations[id]) {
- e = lattice.Widen(pre[id], e);
- pre[id] = e;
- iterations[id]++;
- } else {
- e = lattice.Join(pre[id], e);
- pre[id] = e;
- iterations[id]++;
- }
-
- // propagate'e' through b.Cmds
- foreach (Cmd cmd in b.Cmds) {
- e = Step(lattice, cmd, e);
- }
-
- if (post != null && pre[id] != null) {
- post[id] = e;
- }
-
- var g = b.TransferCmd as GotoCmd;
- if (g != null) { // if g==null, it's a pity we didn't pay attention to that earlier, because then we could have skipped analyzing the code in this block
- foreach (Block succ in g.labelTargets) {
- workItems.Enqueue(new Tuple<Block, NativeLattice.Element>(succ, e));
- }
- }
- }
-
- Instrument(impl, pre, post);
- }
-
- static void Instrument(Implementation impl, NativeLattice.Element[] pre, NativeLattice.Element[] post) {
- Contract.Requires(impl != null);
- Contract.Requires(pre != null);
-
- foreach (var b in impl.Blocks) {
- var element = pre[b.aiId];
- if (element != null && (b.widenBlock || CommandLineOptions.Clo.InstrumentInfer == CommandLineOptions.InstrumentationPlaces.Everywhere)) {
- List<Cmd> newCommands = new List<Cmd>();
- Expr inv = element.ToExpr();
- PredicateCmd cmd;
- var kv = new QKeyValue(Token.NoToken, "inferred", new List<object>(), null);
- if (CommandLineOptions.Clo.InstrumentWithAsserts) {
- cmd = new AssertCmd(Token.NoToken, inv, kv);
- } else {
- cmd = new AssumeCmd(Token.NoToken, inv, kv);
- }
- newCommands.Add(cmd);
- newCommands.AddRange(b.Cmds);
- if (post != null && post[b.aiId] != null) {
- inv = post[b.aiId].ToExpr();
- kv = new QKeyValue(Token.NoToken, "inferred", new List<object>(), null);
- if (CommandLineOptions.Clo.InstrumentWithAsserts) {
- cmd = new AssertCmd(Token.NoToken, inv, kv);
- } else {
- cmd = new AssumeCmd(Token.NoToken, inv, kv);
- }
- newCommands.Add(cmd);
- }
- b.Cmds = newCommands; // destructively replace the commands of the block
- }
- }
- }
-
- /// <summary>
- /// The abstract transition relation.
- /// 'cmd' is allowed to be a StateCmd.
- /// </summary>
- static NativeLattice.Element Step(NativeLattice lattice, Cmd cmd, NativeLattice.Element elmt) {
- Contract.Requires(lattice != null);
- Contract.Requires(cmd != null);
- Contract.Requires(elmt != null);
- Contract.Ensures(Contract.Result<NativeLattice.Element>() != null);
-
- if (cmd is AssignCmd) { // parallel assignment
- var c = (AssignCmd)cmd;
- elmt = lattice.Update(elmt, c.AsSimpleAssignCmd);
- } else if (cmd is HavocCmd) {
- var c = (HavocCmd)cmd;
- foreach (IdentifierExpr id in c.Vars) {
- Contract.Assert(id != null);
- elmt = lattice.Eliminate(elmt, id.Decl);
- }
- } else if (cmd is PredicateCmd) {
- var c = (PredicateCmd)cmd;
- var conjuncts = new List<Expr>();
- foreach (var ee in Conjuncts(c.Expr)) {
- Contract.Assert(ee != null);
- elmt = lattice.Constrain(elmt, ee);
- }
- } else if (cmd is StateCmd) {
- var c = (StateCmd)cmd;
- // Iterate the abstract transition on all the commands in the desugaring of the call
- foreach (Cmd callDesug in c.Cmds) {
- Contract.Assert(callDesug != null);
- elmt = Step(lattice, callDesug, elmt);
- }
- // Project out the local variables of the StateCmd
- foreach (Variable local in c.Locals) {
- Contract.Assert(local != null);
- elmt = lattice.Eliminate(elmt, local);
- }
- } else if (cmd is SugaredCmd) {
- var c = (SugaredCmd)cmd;
- elmt = Step(lattice, c.Desugaring, elmt);
- } else if (cmd is CommentCmd) {
- // skip
- } else {
- Contract.Assert(false); // unknown command
- }
- return elmt;
- }
-
- /// <summary>
- /// Yields the conjuncts of 'expr'.
- /// </summary>
- public static IEnumerable<Expr> Conjuncts(Expr expr) {
- Contract.Requires(expr != null);
-
- var e = expr as NAryExpr;
- if (e != null && e.Fun.FunctionName == "&&") { // if it is a conjunction
- foreach (Expr ee in e.Args) {
- Contract.Assert(ee != null);
- foreach (var c in Conjuncts(ee)) {
- yield return c;
- }
- }
- } else {
- yield return expr;
- }
- }
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie;
+
+namespace Microsoft.Boogie.AbstractInterpretation
+{
+ /// <summary>
+ /// Specifies the operations (e.g., join) on a mathematical lattice that depend
+ /// only on the elements of the lattice.
+ /// </summary>
+ public abstract class NativeLattice
+ {
+ /// <summary>
+ /// An element of the lattice. This class should be derived from in any
+ /// implementation of MathematicalLattice.
+ /// </summary>
+ public abstract class Element
+ {
+ public abstract Expr ToExpr();
+ }
+
+ public abstract Element Top { get; }
+ public abstract Element Bottom { get; }
+
+ public abstract bool IsTop(Element element);
+ public abstract bool IsBottom(Element element);
+
+ /// <summary>
+ /// Is 'a' better (or equal) information than 'b'? That is, is 'a' below 'b' in the lattice?
+ /// </summary>
+ public abstract bool Below(Element a, Element b);
+
+ public abstract Element Meet(Element a, Element b);
+ public abstract Element Join(Element a, Element b);
+ public abstract Element Widen(Element a, Element b);
+
+ public abstract Element Constrain(Element element, Expr expr);
+ public abstract Element Update(Element element, AssignCmd cmd); // requiers 'cmd' to be a simple (possibly parallel) assignment command
+ public abstract Element Eliminate(Element element, Variable v);
+
+ /// <summary>
+ /// Specialize the lattice to implementation "impl", if non-null.
+ /// If "impl" is null, remove specialization.
+ /// </summary>
+ public virtual void Specialize(Implementation impl) {
+ }
+
+ public virtual void Validate() {
+ Contract.Assert(IsTop(Top));
+ Contract.Assert(IsBottom(Bottom));
+ Contract.Assert(!IsBottom(Top));
+ Contract.Assert(!IsTop(Bottom));
+
+ Contract.Assert(Below(Top, Top));
+ Contract.Assert(Below(Bottom, Top));
+ Contract.Assert(Below(Bottom, Bottom));
+
+ Contract.Assert(IsTop(Join(Top, Top)));
+ Contract.Assert(IsBottom(Join(Bottom, Bottom)));
+ }
+ }
+
+ public class NativeAbstractInterpretation
+ {
+ public static void RunAbstractInterpretation(Program program) {
+ Contract.Requires(program != null);
+
+ if (!CommandLineOptions.Clo.UseAbstractInterpretation) {
+ return;
+ }
+ Helpers.ExtraTraceInformation("Starting abstract interpretation");
+
+ DateTime start = new DateTime(); // to please compiler's definite assignment rules
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine();
+ Console.WriteLine("Running abstract interpretation...");
+ start = DateTime.UtcNow;
+ }
+
+ WidenPoints.Compute(program);
+
+ NativeLattice lattice = null;
+ if (CommandLineOptions.Clo.Ai.J_Trivial) {
+ lattice = new TrivialDomain();
+ } else if (CommandLineOptions.Clo.Ai.J_Intervals) {
+ lattice = new NativeIntervallDomain();
+ }
+
+ if (lattice != null) {
+ Dictionary<Procedure, Implementation[]> procedureImplementations = ComputeProcImplMap(program);
+ ComputeProgramInvariants(program, procedureImplementations, lattice);
+ if (CommandLineOptions.Clo.Ai.DebugStatistics) {
+ Console.Error.WriteLine(lattice);
+ }
+ }
+
+ if (CommandLineOptions.Clo.Trace) {
+ DateTime end = DateTime.UtcNow;
+ TimeSpan elapsed = end - start;
+ Console.WriteLine(" [{0} s]", elapsed.TotalSeconds);
+ Console.Out.Flush();
+ }
+ }
+
+ private static Dictionary<Procedure, Implementation[]> ComputeProcImplMap(Program program) {
+ Contract.Requires(program != null);
+ // Since implementations call procedures (impl. signatures)
+ // rather than directly calling other implementations, we first
+ // need to compute which implementations implement which
+ // procedures and remember which implementations call which
+ // procedures.
+
+ return program
+ .Implementations
+ .GroupBy(i => i.Proc).Select(g => g.ToArray()).ToDictionary(a => a[0].Proc);
+ }
+
+ /// <summary>
+ /// Compute and apply the invariants for the program using the underlying abstract domain.
+ /// </summary>
+ public static void ComputeProgramInvariants(Program program, Dictionary<Procedure, Implementation[]> procedureImplementations, NativeLattice lattice) {
+ Contract.Requires(program != null);
+ Contract.Requires(procedureImplementations != null);
+ Contract.Requires(lattice != null);
+
+ // Gather all the axioms to create the initial lattice element
+ // Differently stated, it is the \alpha from axioms (i.e. first order formulae) to the underlyng abstract domain
+ var initialElement = lattice.Top;
+ Contract.Assert(initialElement != null);
+ foreach (var ax in program.Axioms) {
+ initialElement = lattice.Constrain(initialElement, ax.Expr);
+ }
+
+ // analyze each procedure
+ foreach (var proc in program.Procedures) {
+ if (procedureImplementations.ContainsKey(proc)) {
+ // analyze each implementation of the procedure
+ foreach (var impl in procedureImplementations[proc]) {
+ // add the precondition to the axioms
+ Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
+ var start = initialElement;
+ foreach (Requires pre in proc.Requires) {
+ Expr e = Substituter.Apply(formalProcImplSubst, pre.Condition);
+ start = lattice.Constrain(start, e);
+ }
+
+ lattice.Specialize(impl);
+ Analyze(impl, lattice, start);
+ lattice.Specialize(null);
+ }
+ }
+ }
+ }
+
+ public static void Analyze(Implementation impl, NativeLattice lattice, NativeLattice.Element start) {
+ // We need to keep track of some information for each(some) block(s). To do that efficiently,
+ // we number the implementation's blocks sequentially, and then we can use arrays to store
+ // the additional information.
+ var pre = new NativeLattice.Element[impl.Blocks.Count]; // set to null if we never compute a join/widen at this block
+ var post = CommandLineOptions.Clo.InstrumentInfer == CommandLineOptions.InstrumentationPlaces.Everywhere ? new NativeLattice.Element[impl.Blocks.Count] : null;
+ var iterations = new int[impl.Blocks.Count];
+ var bottom = lattice.Bottom;
+ int n = 0;
+ foreach (var block in impl.Blocks) {
+ block.aiId = n;
+ // Note: The forward analysis below will store lattice elements in pre[n] if pre[n] is non-null.
+ // Thus, the assignment "pre[n] = bottom;" below must be done under the following condition:
+ // n == 0 || block.widenBlock
+ // One possible strategy would be to do it only under that condition. Alternatively,
+ // one could do the assignment under the following condition:
+ // n == 0 || block.widenBlock || block.Predecessors.Length != 1
+ // (which would require first setting the Predecessors field). In any case, if
+ // CommandLineOptions.Clo.InstrumentInfer == CommandLineOptions.InstrumentationPlaces.Everywhere
+ // then all pre[n] should be set.
+ pre[n] = bottom;
+ n++;
+ }
+ Contract.Assert(n == impl.Blocks.Count);
+
+ var workItems = new Queue<Tuple<Block, NativeLattice.Element>>();
+ workItems.Enqueue(new Tuple<Block, NativeLattice.Element>(impl.Blocks[0], start));
+ //ComputeBlockInvariantsNative(impl, );
+ // compute a fixpoint here
+ while (workItems.Count > 0) {
+ var workItem = workItems.Dequeue();
+ var b = workItem.Item1;
+ var id = b.aiId;
+ var e = workItem.Item2;
+ if (pre[id] == null) {
+ // no pre information stored here, so just go ahead through the block
+ } else if (lattice.Below(e, pre[id])) {
+ // no change
+ continue;
+ } else if (b.widenBlock && CommandLineOptions.Clo.StepsBeforeWidening <= iterations[id]) {
+ e = lattice.Widen(pre[id], e);
+ pre[id] = e;
+ iterations[id]++;
+ } else {
+ e = lattice.Join(pre[id], e);
+ pre[id] = e;
+ iterations[id]++;
+ }
+
+ // propagate'e' through b.Cmds
+ foreach (Cmd cmd in b.Cmds) {
+ e = Step(lattice, cmd, e);
+ }
+
+ if (post != null && pre[id] != null) {
+ post[id] = e;
+ }
+
+ var g = b.TransferCmd as GotoCmd;
+ if (g != null) { // if g==null, it's a pity we didn't pay attention to that earlier, because then we could have skipped analyzing the code in this block
+ foreach (Block succ in g.labelTargets) {
+ workItems.Enqueue(new Tuple<Block, NativeLattice.Element>(succ, e));
+ }
+ }
+ }
+
+ Instrument(impl, pre, post);
+ }
+
+ static void Instrument(Implementation impl, NativeLattice.Element[] pre, NativeLattice.Element[] post) {
+ Contract.Requires(impl != null);
+ Contract.Requires(pre != null);
+
+ foreach (var b in impl.Blocks) {
+ var element = pre[b.aiId];
+ if (element != null && (b.widenBlock || CommandLineOptions.Clo.InstrumentInfer == CommandLineOptions.InstrumentationPlaces.Everywhere)) {
+ List<Cmd> newCommands = new List<Cmd>();
+ Expr inv = element.ToExpr();
+ PredicateCmd cmd;
+ var kv = new QKeyValue(Token.NoToken, "inferred", new List<object>(), null);
+ if (CommandLineOptions.Clo.InstrumentWithAsserts) {
+ cmd = new AssertCmd(Token.NoToken, inv, kv);
+ } else {
+ cmd = new AssumeCmd(Token.NoToken, inv, kv);
+ }
+ newCommands.Add(cmd);
+ newCommands.AddRange(b.Cmds);
+ if (post != null && post[b.aiId] != null) {
+ inv = post[b.aiId].ToExpr();
+ kv = new QKeyValue(Token.NoToken, "inferred", new List<object>(), null);
+ if (CommandLineOptions.Clo.InstrumentWithAsserts) {
+ cmd = new AssertCmd(Token.NoToken, inv, kv);
+ } else {
+ cmd = new AssumeCmd(Token.NoToken, inv, kv);
+ }
+ newCommands.Add(cmd);
+ }
+ b.Cmds = newCommands; // destructively replace the commands of the block
+ }
+ }
+ }
+
+ /// <summary>
+ /// The abstract transition relation.
+ /// 'cmd' is allowed to be a StateCmd.
+ /// </summary>
+ static NativeLattice.Element Step(NativeLattice lattice, Cmd cmd, NativeLattice.Element elmt) {
+ Contract.Requires(lattice != null);
+ Contract.Requires(cmd != null);
+ Contract.Requires(elmt != null);
+ Contract.Ensures(Contract.Result<NativeLattice.Element>() != null);
+
+ if (cmd is AssignCmd) { // parallel assignment
+ var c = (AssignCmd)cmd;
+ elmt = lattice.Update(elmt, c.AsSimpleAssignCmd);
+ } else if (cmd is HavocCmd) {
+ var c = (HavocCmd)cmd;
+ foreach (IdentifierExpr id in c.Vars) {
+ Contract.Assert(id != null);
+ elmt = lattice.Eliminate(elmt, id.Decl);
+ }
+ } else if (cmd is PredicateCmd) {
+ var c = (PredicateCmd)cmd;
+ var conjuncts = new List<Expr>();
+ foreach (var ee in Conjuncts(c.Expr)) {
+ Contract.Assert(ee != null);
+ elmt = lattice.Constrain(elmt, ee);
+ }
+ } else if (cmd is StateCmd) {
+ var c = (StateCmd)cmd;
+ // Iterate the abstract transition on all the commands in the desugaring of the call
+ foreach (Cmd callDesug in c.Cmds) {
+ Contract.Assert(callDesug != null);
+ elmt = Step(lattice, callDesug, elmt);
+ }
+ // Project out the local variables of the StateCmd
+ foreach (Variable local in c.Locals) {
+ Contract.Assert(local != null);
+ elmt = lattice.Eliminate(elmt, local);
+ }
+ } else if (cmd is SugaredCmd) {
+ var c = (SugaredCmd)cmd;
+ elmt = Step(lattice, c.Desugaring, elmt);
+ } else if (cmd is CommentCmd) {
+ // skip
+ } else {
+ Contract.Assert(false); // unknown command
+ }
+ return elmt;
+ }
+
+ /// <summary>
+ /// Yields the conjuncts of 'expr'.
+ /// </summary>
+ public static IEnumerable<Expr> Conjuncts(Expr expr) {
+ Contract.Requires(expr != null);
+
+ var e = expr as NAryExpr;
+ if (e != null && e.Fun.FunctionName == "&&") { // if it is a conjunction
+ foreach (Expr ee in e.Args) {
+ Contract.Assert(ee != null);
+ foreach (var c in Conjuncts(ee)) {
+ yield return c;
+ }
+ }
+ } else {
+ yield return expr;
+ }
+ }
+
+ }
+}
diff --git a/Source/AbsInt/Traverse.cs b/Source/AbsInt/Traverse.cs
index 184a4071..92377e56 100644
--- a/Source/AbsInt/Traverse.cs
+++ b/Source/AbsInt/Traverse.cs
@@ -1,169 +1,169 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.Boogie {
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.Contracts;
-
-
- /// <summary>
- /// This class provides the functionality of traversing a program to determine which
- /// blocks are blocks where the widening operator may need to be applied. Assumes
- /// all 'currentlyTraversed' bits to be initially false, and leaves them that way in
- /// the end. Assumes the 'widenBlock' bits are initially false, and sets them
- /// appropriately.
- /// </summary>
- public class WidenPoints {
- /// <summary>
- /// Compute the widen points of a program
- /// </summary>
- public static void Compute(Program program) {
- Contract.Requires(program != null);
- cce.BeginExpose(program);
-
- foreach (var impl in program.Implementations) {
- if (impl.Blocks != null && impl.Blocks.Count > 0) {
- Contract.Assume(cce.IsConsistent(impl));
- cce.BeginExpose(impl);
- Block start = impl.Blocks[0];
- Contract.Assume(start != null);
- Contract.Assume(cce.IsConsistent(start));
- Visit(start);
-
- // We reset the state...
- foreach (Block b in impl.Blocks) {
- cce.BeginExpose(b);
- b.TraversingStatus = Block.VisitState.ToVisit;
- cce.EndExpose();
- }
- cce.EndExpose();
- }
- }
- cce.EndExpose();
- }
-
- static void Visit(Block b) {
- Contract.Requires(b != null);
- Contract.Assume(cce.IsExposable(b));
- if (b.TraversingStatus == Block.VisitState.BeingVisited) {
- cce.BeginExpose(b);
- // we got here through a back-edge
- b.widenBlock = true;
- cce.EndExpose();
- } else if (b.TraversingStatus == Block.VisitState.AlreadyVisited) {
- // do nothing... we already saw this node
- } else if (b.TransferCmd is GotoCmd) {
- Contract.Assert(b.TraversingStatus == Block.VisitState.ToVisit);
-
- GotoCmd g = (GotoCmd)b.TransferCmd;
- cce.BeginExpose(b);
-
- cce.BeginExpose(g); //PM: required for the subsequent expose (g.labelTargets)
- b.TraversingStatus = Block.VisitState.BeingVisited;
-
- // labelTargets is made non-null by Resolve, which we assume
- // has already called in a prior pass.
- Contract.Assume(g.labelTargets != null);
- cce.BeginExpose(g.labelTargets);
- foreach (Block succ in g.labelTargets)
- // invariant b.currentlyTraversed;
- //PM: The following loop invariant will work once properties are axiomatized
- //&& (g.labelNames != null && g.labelTargets != null ==> g.labelNames.Length == g.labelTargets.Length);
- {
- Contract.Assert(succ != null);
- Visit(succ);
- }
- cce.EndExpose();
-
- Contract.Assert(b.TraversingStatus == Block.VisitState.BeingVisited);
- // System.Diagnostics.Debug.Assert(b.currentlyTraversed);
-
- b.TraversingStatus = Block.VisitState.AlreadyVisited;
-
- //PM: The folowing assumption is needed because we cannot prove that a simple field update
- //PM: leaves the value of a property unchanged.
- Contract.Assume(g.labelNames == null || g.labelNames.Count == g.labelTargets.Count);
- cce.EndExpose();
- } else {
- Contract.Assert(b.TransferCmd == null || b.TransferCmd is ReturnCmd); // It must be a returnCmd;
- }
- }
-
- static private Block rootBlock = null; // The root point we have to consider
-
- /// <summary>
- /// Compute the blocks in the body loop.
- /// <param name ="block"> Tt is the head of the loop. It must be a widen block </param>
- /// <return> The blocks that are in the loop from block </return>
- /// </summary>
- public static List<Block> ComputeLoopBodyFrom(Block block) {
- Contract.Requires(block.widenBlock);
- Contract.Requires(block != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
-
- Contract.Assert(rootBlock == null);
- rootBlock = block;
-
- List<Block/*!*/> blocksInLoop = new List<Block/*!*/>(); // We use a list just because .net does not define a set
- List<Block/*!*/> visitingPath = new List<Block/*!*/>(); // The order is important, as we want paths
-
- blocksInLoop.Add(block);
-
- DoDFSVisit(block, visitingPath, blocksInLoop);
-
- visitingPath.Add(block);
-
-
- rootBlock = null; // We reset the invariant
-
- return blocksInLoop;
- }
-
- /// <summary>
- /// Perform the Depth-first search of the so to find the loop
- /// <param name = "block"> The block to visit </param>
- /// <param name = "path"> The path we are visiting so far </param>
- /// </summary>
- private static void DoDFSVisit(Block block, List<Block> path, List<Block> blocksInPath) {
- Contract.Requires(block != null);
- Contract.Requires(cce.NonNullElements(path));
- Contract.Requires(cce.NonNullElements(path));
- #region case 1. We visit the root => We are done, "path" is a path inside the loop
- if (block == rootBlock && path.Count > 1) {
- blocksInPath.AddRange(path); // Add all the blocks in this path
- }
-
- #endregion
- #region case 2. We visit a node that ends with a return => "path" is not inside the loop
- if (block.TransferCmd is ReturnCmd) {
- return;
- }
- #endregion
- #region case 3. We visit a node with successors => continue the exploration of its successors
- {
- Contract.Assert(block.TransferCmd is GotoCmd);
- GotoCmd successors = (GotoCmd)block.TransferCmd;
- Contract.Assert(successors != null);
-
- if (successors.labelTargets != null)
- foreach (Block nextBlock in successors.labelTargets) {
- Contract.Assert(nextBlock != null);
- if (path.Contains(nextBlock)) // If the current path has already seen the block, just skip it
- continue;
- // Otherwise we perform the DFS visit
- path.Add(nextBlock);
- DoDFSVisit(nextBlock, path, blocksInPath);
-
- Contract.Assert(nextBlock == path[path.Count - 1]);
- path.RemoveAt(path.Count - 1);
- }
-
- }
-
- #endregion
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.Boogie {
+ using System;
+ using System.Collections.Generic;
+ using System.Diagnostics.Contracts;
+
+
+ /// <summary>
+ /// This class provides the functionality of traversing a program to determine which
+ /// blocks are blocks where the widening operator may need to be applied. Assumes
+ /// all 'currentlyTraversed' bits to be initially false, and leaves them that way in
+ /// the end. Assumes the 'widenBlock' bits are initially false, and sets them
+ /// appropriately.
+ /// </summary>
+ public class WidenPoints {
+ /// <summary>
+ /// Compute the widen points of a program
+ /// </summary>
+ public static void Compute(Program program) {
+ Contract.Requires(program != null);
+ cce.BeginExpose(program);
+
+ foreach (var impl in program.Implementations) {
+ if (impl.Blocks != null && impl.Blocks.Count > 0) {
+ Contract.Assume(cce.IsConsistent(impl));
+ cce.BeginExpose(impl);
+ Block start = impl.Blocks[0];
+ Contract.Assume(start != null);
+ Contract.Assume(cce.IsConsistent(start));
+ Visit(start);
+
+ // We reset the state...
+ foreach (Block b in impl.Blocks) {
+ cce.BeginExpose(b);
+ b.TraversingStatus = Block.VisitState.ToVisit;
+ cce.EndExpose();
+ }
+ cce.EndExpose();
+ }
+ }
+ cce.EndExpose();
+ }
+
+ static void Visit(Block b) {
+ Contract.Requires(b != null);
+ Contract.Assume(cce.IsExposable(b));
+ if (b.TraversingStatus == Block.VisitState.BeingVisited) {
+ cce.BeginExpose(b);
+ // we got here through a back-edge
+ b.widenBlock = true;
+ cce.EndExpose();
+ } else if (b.TraversingStatus == Block.VisitState.AlreadyVisited) {
+ // do nothing... we already saw this node
+ } else if (b.TransferCmd is GotoCmd) {
+ Contract.Assert(b.TraversingStatus == Block.VisitState.ToVisit);
+
+ GotoCmd g = (GotoCmd)b.TransferCmd;
+ cce.BeginExpose(b);
+
+ cce.BeginExpose(g); //PM: required for the subsequent expose (g.labelTargets)
+ b.TraversingStatus = Block.VisitState.BeingVisited;
+
+ // labelTargets is made non-null by Resolve, which we assume
+ // has already called in a prior pass.
+ Contract.Assume(g.labelTargets != null);
+ cce.BeginExpose(g.labelTargets);
+ foreach (Block succ in g.labelTargets)
+ // invariant b.currentlyTraversed;
+ //PM: The following loop invariant will work once properties are axiomatized
+ //&& (g.labelNames != null && g.labelTargets != null ==> g.labelNames.Length == g.labelTargets.Length);
+ {
+ Contract.Assert(succ != null);
+ Visit(succ);
+ }
+ cce.EndExpose();
+
+ Contract.Assert(b.TraversingStatus == Block.VisitState.BeingVisited);
+ // System.Diagnostics.Debug.Assert(b.currentlyTraversed);
+
+ b.TraversingStatus = Block.VisitState.AlreadyVisited;
+
+ //PM: The folowing assumption is needed because we cannot prove that a simple field update
+ //PM: leaves the value of a property unchanged.
+ Contract.Assume(g.labelNames == null || g.labelNames.Count == g.labelTargets.Count);
+ cce.EndExpose();
+ } else {
+ Contract.Assert(b.TransferCmd == null || b.TransferCmd is ReturnCmd); // It must be a returnCmd;
+ }
+ }
+
+ static private Block rootBlock = null; // The root point we have to consider
+
+ /// <summary>
+ /// Compute the blocks in the body loop.
+ /// <param name ="block"> Tt is the head of the loop. It must be a widen block </param>
+ /// <return> The blocks that are in the loop from block </return>
+ /// </summary>
+ public static List<Block> ComputeLoopBodyFrom(Block block) {
+ Contract.Requires(block.widenBlock);
+ Contract.Requires(block != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+
+ Contract.Assert(rootBlock == null);
+ rootBlock = block;
+
+ List<Block/*!*/> blocksInLoop = new List<Block/*!*/>(); // We use a list just because .net does not define a set
+ List<Block/*!*/> visitingPath = new List<Block/*!*/>(); // The order is important, as we want paths
+
+ blocksInLoop.Add(block);
+
+ DoDFSVisit(block, visitingPath, blocksInLoop);
+
+ visitingPath.Add(block);
+
+
+ rootBlock = null; // We reset the invariant
+
+ return blocksInLoop;
+ }
+
+ /// <summary>
+ /// Perform the Depth-first search of the so to find the loop
+ /// <param name = "block"> The block to visit </param>
+ /// <param name = "path"> The path we are visiting so far </param>
+ /// </summary>
+ private static void DoDFSVisit(Block block, List<Block> path, List<Block> blocksInPath) {
+ Contract.Requires(block != null);
+ Contract.Requires(cce.NonNullElements(path));
+ Contract.Requires(cce.NonNullElements(path));
+ #region case 1. We visit the root => We are done, "path" is a path inside the loop
+ if (block == rootBlock && path.Count > 1) {
+ blocksInPath.AddRange(path); // Add all the blocks in this path
+ }
+
+ #endregion
+ #region case 2. We visit a node that ends with a return => "path" is not inside the loop
+ if (block.TransferCmd is ReturnCmd) {
+ return;
+ }
+ #endregion
+ #region case 3. We visit a node with successors => continue the exploration of its successors
+ {
+ Contract.Assert(block.TransferCmd is GotoCmd);
+ GotoCmd successors = (GotoCmd)block.TransferCmd;
+ Contract.Assert(successors != null);
+
+ if (successors.labelTargets != null)
+ foreach (Block nextBlock in successors.labelTargets) {
+ Contract.Assert(nextBlock != null);
+ if (path.Contains(nextBlock)) // If the current path has already seen the block, just skip it
+ continue;
+ // Otherwise we perform the DFS visit
+ path.Add(nextBlock);
+ DoDFSVisit(nextBlock, path, blocksInPath);
+
+ Contract.Assert(nextBlock == path[path.Count - 1]);
+ path.RemoveAt(path.Count - 1);
+ }
+
+ }
+
+ #endregion
+ }
+ }
+}
diff --git a/Source/AbsInt/TrivialDomain.cs b/Source/AbsInt/TrivialDomain.cs
index f9298e11..123bcefe 100644
--- a/Source/AbsInt/TrivialDomain.cs
+++ b/Source/AbsInt/TrivialDomain.cs
@@ -1,79 +1,79 @@
-using System;
-using System.Numerics;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie.AbstractInterpretation
-{
- class TrivialDomain : NativeLattice
- {
- class E : NativeLattice.Element
- {
- public readonly bool IsTop;
- public E(bool isTop) {
- IsTop = isTop;
- }
-
- public override Expr ToExpr() {
- return Expr.Literal(IsTop);
- }
- }
-
- private E top = new E(true);
- private E bottom = new E(false);
-
- public override Element Top { get { return top; } }
- public override Element Bottom { get { return bottom; } }
-
- public override bool IsTop(Element element) {
- var e = (E)element;
- return e.IsTop;
- }
- public override bool IsBottom(Element element) {
- var e = (E)element;
- return !e.IsTop;
- }
-
- public override bool Below(Element a, Element b) {
- return IsBottom(a) || IsTop(b);
- }
-
- public override Element Meet(Element a, Element b) {
- if (IsBottom(b)) {
- return b;
- } else {
- return a;
- }
- }
-
- public override Element Join(Element a, Element b) {
- if (IsTop(b)) {
- return b;
- } else {
- return a;
- }
- }
-
- public override Element Widen(Element a, Element b) {
- return Join(a, b); // it's a finite domain, after all
- }
-
- public override Element Constrain(Element element, Expr expr) {
- var e = (E)element;
- var lit = expr as LiteralExpr;
- if (lit != null && lit.isBool && !(bool)lit.Val) {
- return bottom;
- } else {
- return e;
- }
- }
-
- public override Element Update(Element element, AssignCmd cmd) {
- return element;
- }
-
- public override Element Eliminate(Element element, Variable v) {
- return element;
- }
- }
-}
+using System;
+using System.Numerics;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Boogie.AbstractInterpretation
+{
+ class TrivialDomain : NativeLattice
+ {
+ class E : NativeLattice.Element
+ {
+ public readonly bool IsTop;
+ public E(bool isTop) {
+ IsTop = isTop;
+ }
+
+ public override Expr ToExpr() {
+ return Expr.Literal(IsTop);
+ }
+ }
+
+ private E top = new E(true);
+ private E bottom = new E(false);
+
+ public override Element Top { get { return top; } }
+ public override Element Bottom { get { return bottom; } }
+
+ public override bool IsTop(Element element) {
+ var e = (E)element;
+ return e.IsTop;
+ }
+ public override bool IsBottom(Element element) {
+ var e = (E)element;
+ return !e.IsTop;
+ }
+
+ public override bool Below(Element a, Element b) {
+ return IsBottom(a) || IsTop(b);
+ }
+
+ public override Element Meet(Element a, Element b) {
+ if (IsBottom(b)) {
+ return b;
+ } else {
+ return a;
+ }
+ }
+
+ public override Element Join(Element a, Element b) {
+ if (IsTop(b)) {
+ return b;
+ } else {
+ return a;
+ }
+ }
+
+ public override Element Widen(Element a, Element b) {
+ return Join(a, b); // it's a finite domain, after all
+ }
+
+ public override Element Constrain(Element element, Expr expr) {
+ var e = (E)element;
+ var lit = expr as LiteralExpr;
+ if (lit != null && lit.isBool && !(bool)lit.Val) {
+ return bottom;
+ } else {
+ return e;
+ }
+ }
+
+ public override Element Update(Element element, AssignCmd cmd) {
+ return element;
+ }
+
+ public override Element Eliminate(Element element, Variable v) {
+ return element;
+ }
+ }
+}
diff --git a/Source/AbsInt/cce.cs b/Source/AbsInt/cce.cs
index 693d608c..627add75 100644
--- a/Source/AbsInt/cce.cs
+++ b/Source/AbsInt/cce.cs
@@ -1,62 +1,62 @@
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-using Microsoft.Boogie;
-
- /// <summary>
- /// A class containing static methods to extend the functionality of Code Contracts
- /// </summary>
-
-public static class cce {
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements(VariableSeq collection) {
- return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- }
-
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
-
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
-
- public static bool IsPeerConsistent(this object o) {
- return true;
- }
-
- public static bool IsConsistent(this object o) {
- return true;
- }
-
- public static bool IsExposable(this object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- }
-}
-public class PeerAttribute : System.Attribute {
-}
-public class RepAttribute : System.Attribute {
-}
-public class CapturedAttribute : System.Attribute {
-}
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+using Microsoft.Boogie;
+
+ /// <summary>
+ /// A class containing static methods to extend the functionality of Code Contracts
+ /// </summary>
+
+public static class cce {
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements(VariableSeq collection) {
+ return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ }
+
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+
+ public static bool IsPeerConsistent(this object o) {
+ return true;
+ }
+
+ public static bool IsConsistent(this object o) {
+ return true;
+ }
+
+ public static bool IsExposable(this object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ }
+}
+public class PeerAttribute : System.Attribute {
+}
+public class RepAttribute : System.Attribute {
+}
+public class CapturedAttribute : System.Attribute {
+}
diff --git a/Source/BVD/App.config b/Source/BVD/App.config
index fad249e4..8e156463 100644
--- a/Source/BVD/App.config
+++ b/Source/BVD/App.config
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<configuration>
- <startup>
- <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
- </startup>
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+ </startup>
</configuration> \ No newline at end of file
diff --git a/Source/BVD/BVD.csproj b/Source/BVD/BVD.csproj
index ccf52191..e83cfdd7 100644
--- a/Source/BVD/BVD.csproj
+++ b/Source/BVD/BVD.csproj
@@ -1,106 +1,106 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{8A05D14E-F2BF-4890-BBE0-D76B18A50797}</ProjectGuid>
- <OutputType>WinExe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie.ModelViewer</RootNamespace>
- <AssemblyName>BVD</AssemblyName>
- <FileAlignment>512</FileAlignment>
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <ProductVersion>12.0.0</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Data" />
- <Reference Include="System.Deployment" />
- <Reference Include="System.Drawing" />
- <Reference Include="System.Numerics" />
- <Reference Include="System.Windows.Forms" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Program.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="App.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\ModelViewer\ModelViewer.csproj">
- <Project>{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}</Project>
- <Name>ModelViewer</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include=".NETFramework,Version=v4.5">
- <Visible>False</Visible>
- <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{8A05D14E-F2BF-4890-BBE0-D76B18A50797}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Microsoft.Boogie.ModelViewer</RootNamespace>
+ <AssemblyName>BVD</AssemblyName>
+ <FileAlignment>512</FileAlignment>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <ProductVersion>12.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Deployment" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Windows.Forms" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\ModelViewer\ModelViewer.csproj">
+ <Project>{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}</Project>
+ <Name>ModelViewer</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include=".NETFramework,Version=v4.5">
+ <Visible>False</Visible>
+ <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
diff --git a/Source/BVD/Program.cs b/Source/BVD/Program.cs
index 669ea995..a606c863 100644
--- a/Source/BVD/Program.cs
+++ b/Source/BVD/Program.cs
@@ -1,28 +1,28 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows.Forms;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- static class Program
- {
- /// <summary>
- /// The main entry point for the application.
- /// </summary>
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- try
- {
- Application.Run(new Main(System.Environment.GetCommandLineArgs()));
- }
- catch (Exception exc)
- {
- MessageBox.Show(exc.Message, "Model Viewer Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Microsoft.Boogie.ModelViewer
+{
+ static class Program
+ {
+ /// <summary>
+ /// The main entry point for the application.
+ /// </summary>
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ try
+ {
+ Application.Run(new Main(System.Environment.GetCommandLineArgs()));
+ }
+ catch (Exception exc)
+ {
+ MessageBox.Show(exc.Message, "Model Viewer Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
+ }
+ }
+ }
+}
diff --git a/Source/BVD/Properties/AssemblyInfo.cs b/Source/BVD/Properties/AssemblyInfo.cs
index 3512374e..0e9c953a 100644
--- a/Source/BVD/Properties/AssemblyInfo.cs
+++ b/Source/BVD/Properties/AssemblyInfo.cs
@@ -1,36 +1,36 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("BVD")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("BVD")]
-[assembly: AssemblyCopyright("Copyright © 2013")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("00610a12-cf4c-4c29-af30-31a99d22b9d8")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("BVD")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("BVD")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("00610a12-cf4c-4c29-af30-31a99d22b9d8")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Source/Basetypes/Basetypes.csproj b/Source/Basetypes/Basetypes.csproj
index 4ecdee8d..5b425bc5 100644
--- a/Source/Basetypes/Basetypes.csproj
+++ b/Source/Basetypes/Basetypes.csproj
@@ -1,204 +1,204 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Basetypes</RootNamespace>
- <AssemblyName>Basetypes</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for Basetypes.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\Basetypes.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Numerics" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="BigDec.cs" />
- <Compile Include="BigNum.cs" />
- <Compile Include="BigFloat.cs" />
- <Compile Include="Rational.cs" />
- <Compile Include="Set.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Basetypes</RootNamespace>
+ <AssemblyName>BoogieBasetypes</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for Basetypes.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\Basetypes.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="BigDec.cs" />
+ <Compile Include="BigNum.cs" />
+ <Compile Include="BigFloat.cs" />
+ <Compile Include="Rational.cs" />
+ <Compile Include="Set.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/Basetypes/BigDec.cs b/Source/Basetypes/BigDec.cs
index 0aeea8b1..e4666793 100644
--- a/Source/Basetypes/BigDec.cs
+++ b/Source/Basetypes/BigDec.cs
@@ -1,380 +1,380 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.Diagnostics.Contracts;
-using System.Diagnostics;
-
-
-namespace Microsoft.Basetypes {
- using BIM = System.Numerics.BigInteger;
-
-
- /// <summary>
- /// A representation of decimal values.
- /// </summary>
- public struct BigDec {
-
- // the internal representation
- [Rep]
- internal readonly BIM mantissa;
- [Rep]
- internal readonly int exponent;
-
- public BIM Mantissa {
- get {
- return mantissa;
- }
- }
-
- public int Exponent {
- get {
- return exponent;
- }
- }
-
- public static readonly BigDec ZERO = FromInt(0);
- private static readonly BIM ten = new BIM(10);
-
-
- ////////////////////////////////////////////////////////////////////////////
- // Constructors
-
- [Pure]
- public static BigDec FromInt(int v) {
- return new BigDec(v, 0);
- }
-
- [Pure]
- public static BigDec FromBigInt(BIM v) {
- return new BigDec(v, 0);
- }
-
- [Pure]
- public static BigDec FromString(string v) {
- if (v == null) throw new FormatException();
-
- BIM integral = BIM.Zero;
- BIM fraction = BIM.Zero;
- int exponent = 0;
-
- int len = v.Length;
-
- int i = v.IndexOf('e');
- if (i >= 0) {
- if (i + 1 == v.Length) throw new FormatException();
- exponent = Int32.Parse(v.Substring(i + 1, len - i - 1));
- len = i;
- }
-
- int fractionLen = 0;
- i = v.IndexOf('.');
- if (i >= 0) {
- if (i + 1 == v.Length) throw new FormatException();
- fractionLen = len - i - 1;
- fraction = BIM.Parse(v.Substring(i + 1, fractionLen));
- len = i;
- }
-
- integral = BIM.Parse(v.Substring(0, len));
-
- if (!fraction.IsZero) {
- while (fractionLen > 0) {
- integral = integral * ten;
- exponent = exponent - 1;
- fractionLen = fractionLen - 1;
- }
- }
-
- if (integral.Sign == -1) {
- return new BigDec(integral - fraction, exponent);
- }
- else {
- return new BigDec(integral + fraction, exponent);
- }
- }
-
- internal BigDec(BIM mantissa, int exponent) {
- if (mantissa.IsZero) {
- this.mantissa = mantissa;
- this.exponent = 0;
- }
- else {
- while (mantissa % ten == BIM.Zero) {
- mantissa = mantissa / ten;
- exponent = exponent + 1;
- }
- this.mantissa = mantissa;
- this.exponent = exponent;
- }
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
- // Basic object operations
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is BigDec))
- return false;
-
- return (this == (BigDec)obj);
- }
-
- [Pure]
- public override int GetHashCode() {
- return this.mantissa.GetHashCode() * 13 + this.exponent.GetHashCode();
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return String.Format("{0}e{1}", this.mantissa.ToString(), this.exponent.ToString());
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
- // Conversion operations
-
- // ``floor`` rounds towards negative infinity (like SMT-LIBv2's to_int).
- /// <summary>
- /// Computes the floor and ceiling of this BigDec. Note the choice of rounding towards negative
- /// infinity rather than zero for floor is because SMT-LIBv2's to_int function floors this way.
- /// </summary>
- /// <param name="floor">The Floor (rounded towards negative infinity)</param>
- /// <param name="ceiling">Ceiling (rounded towards positive infinity)</param>
- public void FloorCeiling(out BIM floor, out BIM ceiling) {
- BIM n = this.mantissa;
- int e = this.exponent;
- if (n.IsZero) {
- floor = ceiling = n;
- } else if (0 <= e) {
- // it's an integer
- for (; 0 < e; e--) {
- n = n * ten;
- }
- floor = ceiling = n;
- } else {
- // it's a non-zero integer, so the ceiling is one more than the floor
- for (; e < 0 && !n.IsZero; e++) {
- n = n / ten; // Division rounds towards negative infinity
- }
-
- if (this.mantissa >= 0) {
- floor = n;
- ceiling = n + 1;
- } else {
- ceiling = n;
- floor = n - 1;
- }
- }
- Debug.Assert(floor <= ceiling, "Invariant was not maintained");
- }
-
- [Pure]
- public String ToDecimalString(int maxDigits) {
- string s = this.mantissa.ToString();
- int digits = (this.mantissa >= 0) ? s.Length : s.Length - 1;
- BIM max = BIM.Pow(10, maxDigits);
- BIM min = -max;
-
- if (this.exponent >= 0) {
- if (maxDigits < digits || maxDigits - digits < this.exponent) {
- return String.Format("{0}.0", (this.mantissa >= 0) ? max.ToString() : min.ToString());
- }
- else {
- return String.Format("{0}{1}.0", s, new string('0', this.exponent));
- }
- }
- else {
- int exp = -this.exponent;
-
- if (exp < digits) {
- int intDigits = digits - exp;
- if (maxDigits < intDigits) {
- return String.Format("{0}.0", (this.mantissa >= 0) ? max.ToString() : min.ToString());
- }
- else {
- int fracDigits = Math.Min(maxDigits, digits - intDigits);
- return String.Format("{0}.{1}", s.Substring(0, intDigits), s.Substring(intDigits, fracDigits));
- }
- }
- else {
- int fracDigits = Math.Min(maxDigits, digits);
- return String.Format("0.{0}{1}", new string('0', exp - fracDigits), s.Substring(0, fracDigits));
- }
- }
- }
-
- [Pure]
- public string ToDecimalString() {
- string m = this.mantissa.ToString();
- var e = this.exponent;
- if (0 <= this.exponent) {
- return m + Zeros(e) + ".0";
- } else {
- e = -e;
- // compute k to be the longest suffix of m consisting of all zeros (but no longer than e, and not the entire string)
- var maxK = e < m.Length ? e : m.Length - 1;
- var last = m.Length - 1;
- var k = 0;
- while (k < maxK && m[last - k] == '0') {
- k++;
- }
- if (0 < k) {
- // chop off the suffix of k zeros from m and adjust e accordingly
- m = m.Substring(0, m.Length - k);
- e -= k;
- }
- if (e == 0) {
- return m;
- } else if (e < m.Length) {
- var n = m.Length - e;
- return m.Substring(0, n) + "." + m.Substring(n);
- } else {
- return "0." + Zeros(e - m.Length) + m;
- }
- }
- }
-
- [Pure]
- public static string Zeros(int n) {
- Contract.Requires(0 <= n);
- if (n <= 10) {
- var tenZeros = "0000000000";
- return tenZeros.Substring(0, n);
- } else {
- var d = n / 2;
- var s = Zeros(d);
- if (n % 2 == 0) {
- return s + s;
- } else {
- return s + s + "0";
- }
- }
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
- // Basic arithmetic operations
-
- [Pure]
- public BigDec Abs {
- get {
- return new BigDec(BIM.Abs(this.mantissa), this.exponent);
- }
- }
-
- [Pure]
- public BigDec Negate {
- get {
- return new BigDec(BIM.Negate(this.mantissa), this.exponent);
- }
- }
-
- [Pure]
- public static BigDec operator -(BigDec x) {
- return x.Negate;
- }
-
- [Pure]
- public static BigDec operator +(BigDec x, BigDec y) {
- BIM m1 = x.mantissa;
- int e1 = x.exponent;
- BIM m2 = y.mantissa;
- int e2 = y.exponent;
- if (e2 < e1) {
- m1 = y.mantissa;
- e1 = y.exponent;
- m2 = x.mantissa;
- e2 = x.exponent;
- }
-
- while (e2 > e1) {
- m2 = m2 * ten;
- e2 = e2 - 1;
- }
-
- return new BigDec(m1 + m2, e1);
- }
-
- [Pure]
- public static BigDec operator -(BigDec x, BigDec y) {
- return x + y.Negate;
- }
-
- [Pure]
- public static BigDec operator *(BigDec x, BigDec y) {
- return new BigDec(x.mantissa * y.mantissa, x.exponent + y.exponent);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
- // Some basic comparison operations
-
- public bool IsPositive {
- get {
- return (this.mantissa > BIM.Zero);
- }
- }
-
- public bool IsNegative {
- get {
- return (this.mantissa < BIM.Zero);
- }
- }
-
- public bool IsZero {
- get {
- return this.mantissa.IsZero;
- }
- }
-
- [Pure]
- public int CompareTo(BigDec that) {
- if (this.mantissa == that.mantissa && this.exponent == that.exponent) {
- return 0;
- }
- else {
- BigDec d = this - that;
- return d.IsNegative ? -1 : 1;
- }
- }
-
- [Pure]
- public static bool operator ==(BigDec x, BigDec y) {
- return x.CompareTo(y) == 0;
- }
-
- [Pure]
- public static bool operator !=(BigDec x, BigDec y) {
- return x.CompareTo(y) != 0;
- }
-
- [Pure]
- public static bool operator <(BigDec x, BigDec y) {
- return x.CompareTo(y) < 0;
- }
-
- [Pure]
- public static bool operator >(BigDec x, BigDec y) {
- return x.CompareTo(y) > 0;
- }
-
- [Pure]
- public static bool operator <=(BigDec x, BigDec y) {
- return x.CompareTo(y) <= 0;
- }
-
- [Pure]
- public static bool operator >=(BigDec x, BigDec y) {
- return x.CompareTo(y) >= 0;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.Diagnostics.Contracts;
+using System.Diagnostics;
+
+
+namespace Microsoft.Basetypes {
+ using BIM = System.Numerics.BigInteger;
+
+
+ /// <summary>
+ /// A representation of decimal values.
+ /// </summary>
+ public struct BigDec {
+
+ // the internal representation
+ [Rep]
+ internal readonly BIM mantissa;
+ [Rep]
+ internal readonly int exponent;
+
+ public BIM Mantissa {
+ get {
+ return mantissa;
+ }
+ }
+
+ public int Exponent {
+ get {
+ return exponent;
+ }
+ }
+
+ public static readonly BigDec ZERO = FromInt(0);
+ private static readonly BIM ten = new BIM(10);
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Constructors
+
+ [Pure]
+ public static BigDec FromInt(int v) {
+ return new BigDec(v, 0);
+ }
+
+ [Pure]
+ public static BigDec FromBigInt(BIM v) {
+ return new BigDec(v, 0);
+ }
+
+ [Pure]
+ public static BigDec FromString(string v) {
+ if (v == null) throw new FormatException();
+
+ BIM integral = BIM.Zero;
+ BIM fraction = BIM.Zero;
+ int exponent = 0;
+
+ int len = v.Length;
+
+ int i = v.IndexOf('e');
+ if (i >= 0) {
+ if (i + 1 == v.Length) throw new FormatException();
+ exponent = Int32.Parse(v.Substring(i + 1, len - i - 1));
+ len = i;
+ }
+
+ int fractionLen = 0;
+ i = v.IndexOf('.');
+ if (i >= 0) {
+ if (i + 1 == v.Length) throw new FormatException();
+ fractionLen = len - i - 1;
+ fraction = BIM.Parse(v.Substring(i + 1, fractionLen));
+ len = i;
+ }
+
+ integral = BIM.Parse(v.Substring(0, len));
+
+ if (!fraction.IsZero) {
+ while (fractionLen > 0) {
+ integral = integral * ten;
+ exponent = exponent - 1;
+ fractionLen = fractionLen - 1;
+ }
+ }
+
+ if (integral.Sign == -1) {
+ return new BigDec(integral - fraction, exponent);
+ }
+ else {
+ return new BigDec(integral + fraction, exponent);
+ }
+ }
+
+ internal BigDec(BIM mantissa, int exponent) {
+ if (mantissa.IsZero) {
+ this.mantissa = mantissa;
+ this.exponent = 0;
+ }
+ else {
+ while (mantissa % ten == BIM.Zero) {
+ mantissa = mantissa / ten;
+ exponent = exponent + 1;
+ }
+ this.mantissa = mantissa;
+ this.exponent = exponent;
+ }
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Basic object operations
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is BigDec))
+ return false;
+
+ return (this == (BigDec)obj);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return this.mantissa.GetHashCode() * 13 + this.exponent.GetHashCode();
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return String.Format("{0}e{1}", this.mantissa.ToString(), this.exponent.ToString());
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Conversion operations
+
+ // ``floor`` rounds towards negative infinity (like SMT-LIBv2's to_int).
+ /// <summary>
+ /// Computes the floor and ceiling of this BigDec. Note the choice of rounding towards negative
+ /// infinity rather than zero for floor is because SMT-LIBv2's to_int function floors this way.
+ /// </summary>
+ /// <param name="floor">The Floor (rounded towards negative infinity)</param>
+ /// <param name="ceiling">Ceiling (rounded towards positive infinity)</param>
+ public void FloorCeiling(out BIM floor, out BIM ceiling) {
+ BIM n = this.mantissa;
+ int e = this.exponent;
+ if (n.IsZero) {
+ floor = ceiling = n;
+ } else if (0 <= e) {
+ // it's an integer
+ for (; 0 < e; e--) {
+ n = n * ten;
+ }
+ floor = ceiling = n;
+ } else {
+ // it's a non-zero integer, so the ceiling is one more than the floor
+ for (; e < 0 && !n.IsZero; e++) {
+ n = n / ten; // Division rounds towards negative infinity
+ }
+
+ if (this.mantissa >= 0) {
+ floor = n;
+ ceiling = n + 1;
+ } else {
+ ceiling = n;
+ floor = n - 1;
+ }
+ }
+ Debug.Assert(floor <= ceiling, "Invariant was not maintained");
+ }
+
+ [Pure]
+ public String ToDecimalString(int maxDigits) {
+ string s = this.mantissa.ToString();
+ int digits = (this.mantissa >= 0) ? s.Length : s.Length - 1;
+ BIM max = BIM.Pow(10, maxDigits);
+ BIM min = -max;
+
+ if (this.exponent >= 0) {
+ if (maxDigits < digits || maxDigits - digits < this.exponent) {
+ return String.Format("{0}.0", (this.mantissa >= 0) ? max.ToString() : min.ToString());
+ }
+ else {
+ return String.Format("{0}{1}.0", s, new string('0', this.exponent));
+ }
+ }
+ else {
+ int exp = -this.exponent;
+
+ if (exp < digits) {
+ int intDigits = digits - exp;
+ if (maxDigits < intDigits) {
+ return String.Format("{0}.0", (this.mantissa >= 0) ? max.ToString() : min.ToString());
+ }
+ else {
+ int fracDigits = Math.Min(maxDigits, digits - intDigits);
+ return String.Format("{0}.{1}", s.Substring(0, intDigits), s.Substring(intDigits, fracDigits));
+ }
+ }
+ else {
+ int fracDigits = Math.Min(maxDigits, digits);
+ return String.Format("0.{0}{1}", new string('0', exp - fracDigits), s.Substring(0, fracDigits));
+ }
+ }
+ }
+
+ [Pure]
+ public string ToDecimalString() {
+ string m = this.mantissa.ToString();
+ var e = this.exponent;
+ if (0 <= this.exponent) {
+ return m + Zeros(e) + ".0";
+ } else {
+ e = -e;
+ // compute k to be the longest suffix of m consisting of all zeros (but no longer than e, and not the entire string)
+ var maxK = e < m.Length ? e : m.Length - 1;
+ var last = m.Length - 1;
+ var k = 0;
+ while (k < maxK && m[last - k] == '0') {
+ k++;
+ }
+ if (0 < k) {
+ // chop off the suffix of k zeros from m and adjust e accordingly
+ m = m.Substring(0, m.Length - k);
+ e -= k;
+ }
+ if (e == 0) {
+ return m;
+ } else if (e < m.Length) {
+ var n = m.Length - e;
+ return m.Substring(0, n) + "." + m.Substring(n);
+ } else {
+ return "0." + Zeros(e - m.Length) + m;
+ }
+ }
+ }
+
+ [Pure]
+ public static string Zeros(int n) {
+ Contract.Requires(0 <= n);
+ if (n <= 10) {
+ var tenZeros = "0000000000";
+ return tenZeros.Substring(0, n);
+ } else {
+ var d = n / 2;
+ var s = Zeros(d);
+ if (n % 2 == 0) {
+ return s + s;
+ } else {
+ return s + s + "0";
+ }
+ }
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Basic arithmetic operations
+
+ [Pure]
+ public BigDec Abs {
+ get {
+ return new BigDec(BIM.Abs(this.mantissa), this.exponent);
+ }
+ }
+
+ [Pure]
+ public BigDec Negate {
+ get {
+ return new BigDec(BIM.Negate(this.mantissa), this.exponent);
+ }
+ }
+
+ [Pure]
+ public static BigDec operator -(BigDec x) {
+ return x.Negate;
+ }
+
+ [Pure]
+ public static BigDec operator +(BigDec x, BigDec y) {
+ BIM m1 = x.mantissa;
+ int e1 = x.exponent;
+ BIM m2 = y.mantissa;
+ int e2 = y.exponent;
+ if (e2 < e1) {
+ m1 = y.mantissa;
+ e1 = y.exponent;
+ m2 = x.mantissa;
+ e2 = x.exponent;
+ }
+
+ while (e2 > e1) {
+ m2 = m2 * ten;
+ e2 = e2 - 1;
+ }
+
+ return new BigDec(m1 + m2, e1);
+ }
+
+ [Pure]
+ public static BigDec operator -(BigDec x, BigDec y) {
+ return x + y.Negate;
+ }
+
+ [Pure]
+ public static BigDec operator *(BigDec x, BigDec y) {
+ return new BigDec(x.mantissa * y.mantissa, x.exponent + y.exponent);
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Some basic comparison operations
+
+ public bool IsPositive {
+ get {
+ return (this.mantissa > BIM.Zero);
+ }
+ }
+
+ public bool IsNegative {
+ get {
+ return (this.mantissa < BIM.Zero);
+ }
+ }
+
+ public bool IsZero {
+ get {
+ return this.mantissa.IsZero;
+ }
+ }
+
+ [Pure]
+ public int CompareTo(BigDec that) {
+ if (this.mantissa == that.mantissa && this.exponent == that.exponent) {
+ return 0;
+ }
+ else {
+ BigDec d = this - that;
+ return d.IsNegative ? -1 : 1;
+ }
+ }
+
+ [Pure]
+ public static bool operator ==(BigDec x, BigDec y) {
+ return x.CompareTo(y) == 0;
+ }
+
+ [Pure]
+ public static bool operator !=(BigDec x, BigDec y) {
+ return x.CompareTo(y) != 0;
+ }
+
+ [Pure]
+ public static bool operator <(BigDec x, BigDec y) {
+ return x.CompareTo(y) < 0;
+ }
+
+ [Pure]
+ public static bool operator >(BigDec x, BigDec y) {
+ return x.CompareTo(y) > 0;
+ }
+
+ [Pure]
+ public static bool operator <=(BigDec x, BigDec y) {
+ return x.CompareTo(y) <= 0;
+ }
+
+ [Pure]
+ public static bool operator >=(BigDec x, BigDec y) {
+ return x.CompareTo(y) >= 0;
+ }
+ }
+}
diff --git a/Source/Basetypes/BigNum.cs b/Source/Basetypes/BigNum.cs
index ff676bc6..4469f149 100644
--- a/Source/Basetypes/BigNum.cs
+++ b/Source/Basetypes/BigNum.cs
@@ -1,361 +1,361 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.Diagnostics.Contracts;
-
-
-namespace Microsoft.Basetypes {
- using BIM = System.Numerics.BigInteger;
-
- /// <summary>
- /// A thin wrapper around System.Numerics.BigInteger
- /// (to be able to define equality, etc. properly)
- /// </summary>
- public struct BigNum {
-
- // the internal representation
- [Rep]
- internal readonly System.Numerics.BigInteger val;
- public static readonly BigNum ZERO = new BigNum(BIM.Zero);
- public static readonly BigNum ONE = new BigNum(BIM.One);
- public static readonly BigNum MINUS_ONE = new BigNum(-BIM.One);
-
- [Pure]
- public static BigNum FromInt(int v) {
- return new BigNum(new BIM(v));
- }
-
- [Pure]
- public static BigNum FromUInt(uint v) {
- return new BigNum(new BIM((long)v));
- }
-
- [Pure]
- public static BigNum FromLong(long v) {
- return new BigNum(new BIM(v));
- }
-
- [Pure]
- public static BigNum FromBigInt(System.Numerics.BigInteger v) {
- return new BigNum(v);
- }
-
- [Pure]
- public static BigNum FromULong(ulong v) {
- return FromString("" + v);
- }
-
- [Pure]
- public static BigNum FromString(string v) {
- try {
- return new BigNum(BIM.Parse(v));
- } catch (System.ArgumentException) {
- throw new FormatException();
- }
- }
-
- public static bool TryParse(string v, out BigNum res) {
- try {
- res = BigNum.FromString(v);
- return true;
- } catch (FormatException) {
- res = ZERO;
- return false;
- }
- }
-
- // Convert to int, without checking whether overflows occur
- public int ToInt {
- get {
- return (int)val;
- }
- }
-
- public BIM ToBigInteger {
- get {
- return val;
- }
- }
-
- // Convert to int; assert that no overflows occur
- public int ToIntSafe {
- get {
- Contract.Assert(this.InInt32);
- return this.ToInt;
- }
- }
-
- public Rational ToRational {
- get {
- return Rational.FromBignum(this);
- }
- }
-
- public byte[] ToByteArray()
- {
- return this.val.ToByteArray();
- }
-
- internal BigNum(System.Numerics.BigInteger val) {
- this.val = val;
- }
-
- public static bool operator ==(BigNum x, BigNum y) {
- return (x.val == y.val);
- }
-
- public static bool operator !=(BigNum x, BigNum y) {
- return !(x.val == y.val);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is BigNum))
- return false;
-
- BigNum other = (BigNum)obj;
- return (this.val == other.val);
- }
-
- [Pure]
- public override int GetHashCode() {
- return this.val.GetHashCode();
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return cce.NonNull(val.ToString());
- }
-
- //////////////////////////////////////////////////////////////////////////////
- // Very limited support for format strings
- // Note: Negative integers are linearised with a minus "-" in hexadecimal,
- // not in 2-complement notation (in contrast to what the method
- // int32.ToString(format) does)
-
- [Pure]
- public string/*!*/ ToString(string/*!*/ format) {
- Contract.Requires(format != null);
- Contract.Ensures(Contract.Result<string>() != null);
- if (format.StartsWith("d") || format.StartsWith("D")) {
- string res = this.Abs.ToString();
- Contract.Assert(res != null);
- return addMinus(this.Signum,
- prefixWithZeros(extractPrecision(format), res));
- } else if (format.StartsWith("x") || format.StartsWith("X")) {
- string res = this.toHex(format.Substring(0, 1));
- Contract.Assert(res != null);
- return addMinus(this.Signum,
- prefixWithZeros(extractPrecision(format), res));
- } else {
- throw new FormatException("Format " + format + " is not supported");
- }
- }
-
- private static readonly System.Numerics.BigInteger BI_2_TO_24 = new BIM(0x1000000);
-
- [Pure]
- private string/*!*/ toHex(string/*!*/ format) {
- Contract.Requires(format != null);
- Contract.Ensures(Contract.Result<string>() != null);
- string res = "";
- System.Numerics.BigInteger rem = this.Abs.val;
-
- while (rem > BIM.Zero) {
- res = ((int)(rem % BI_2_TO_24)).ToString(format) + res;
- rem = rem / BI_2_TO_24;
- }
-
- return res;
- }
-
- [Pure]
- private int extractPrecision(string/*!*/ format) {
- Contract.Requires(format != null);
- if (format.Length > 1)
- // will throw a FormatException if the precision is invalid;
- // that is ok
- return Int32.Parse(format.Substring(1));
- // always output at least one digit
- return 1;
- }
-
- [Pure]
- private string/*!*/ addMinus(int signum, string/*!*/ suffix) {
- Contract.Requires(suffix != null);
- Contract.Ensures(Contract.Result<string>() != null);
- if (signum < 0)
- return "-" + suffix;
- return suffix;
- }
-
- [Pure]
- private string/*!*/ prefixWithZeros(int minLength, string/*!*/ suffix) {
- Contract.Requires(suffix != null);
- Contract.Ensures(Contract.Result<string>() != null);
- StringBuilder res = new StringBuilder();
- while (res.Length + suffix.Length < minLength)
- res.Append("0");
- res.Append(suffix);
- return res.ToString();
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Basic arithmetic operations
-
- public BigNum Abs {
- get {
- return new BigNum(BIM.Abs(this.val));
- }
- }
-
- public BigNum Neg {
- get {
- return new BigNum(-this.val);
- }
- }
-
- [Pure]
- public static BigNum operator -(BigNum x) {
- return x.Neg;
- }
-
- [Pure]
- public static BigNum operator +(BigNum x, BigNum y) {
- return new BigNum(x.val + y.val);
- }
-
- [Pure]
- public static BigNum operator -(BigNum x, BigNum y) {
- return new BigNum(x.val - y.val);
- }
-
- [Pure]
- public static BigNum operator *(BigNum x, BigNum y) {
- return new BigNum(x.val * y.val);
- }
-
- // TODO: check that this has a proper semantics (which? :-))
- [Pure]
- public static BigNum operator /(BigNum x, BigNum y) {
- return new BigNum(x.val / y.val);
- }
-
- // TODO: check that this has a proper semantics (which? :-))
- [Pure]
- public static BigNum operator %(BigNum x, BigNum y) {
- return new BigNum(x.val - ((x.val / y.val) * y.val));
- }
-
- [Pure]
- public BigNum Min(BigNum that) {
- return new BigNum(this.val <= that.val ? this.val : that.val);
- }
-
- [Pure]
- public BigNum Max(BigNum that) {
- return new BigNum(this.val >= that.val ? this.val : that.val);
- }
-
- /// <summary>
- /// Returns the greatest common divisor of this and _y.
- /// </summary>
- /// <param name="_y"></param>
- /// <returns></returns>
- public BigNum Gcd(BigNum _y) {
- Contract.Ensures(!Contract.Result<BigNum>().IsNegative);
- BigNum x = this.Abs;
- BigNum y = _y.Abs;
-
- while (true) {
- if (x < y) {
- y = y % x;
- if (y.IsZero) {
- return x;
- }
- } else {
- x = x % y;
- if (x.IsZero) {
- return y;
- }
- }
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Some basic comparison operations
-
- public int Signum {
- get {
- return this.val.Sign;
- }
- }
-
- public bool IsPositive {
- get {
- return (this.val > BIM.Zero);
- }
- }
-
- public bool IsNegative {
- get {
- return (this.val < BIM.Zero);
- }
- }
-
- public bool IsZero {
- get {
- return this.val.IsZero;
- }
- }
-
- [Pure]
- public int CompareTo(BigNum that) {
- if (this.val == that.val)
- return 0;
- if (this.val < that.val)
- return -1;
- return 1;
- }
-
- [Pure]
- public static bool operator <(BigNum x, BigNum y) {
- return (x.val < y.val);
- }
-
- [Pure]
- public static bool operator >(BigNum x, BigNum y) {
- return (x.val > y.val);
- }
-
- [Pure]
- public static bool operator <=(BigNum x, BigNum y) {
- return (x.val <= y.val);
- }
-
- [Pure]
- public static bool operator >=(BigNum x, BigNum y) {
- return (x.val >= y.val);
- }
-
-
- private static readonly System.Numerics.BigInteger MaxInt32 =
- new BIM(Int32.MaxValue);
- private static readonly System.Numerics.BigInteger MinInt32 =
- new BIM(Int32.MinValue);
-
- public bool InInt32 {
- get {
- return (val >= MinInt32) && (val <= MaxInt32);
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.Diagnostics.Contracts;
+
+
+namespace Microsoft.Basetypes {
+ using BIM = System.Numerics.BigInteger;
+
+ /// <summary>
+ /// A thin wrapper around System.Numerics.BigInteger
+ /// (to be able to define equality, etc. properly)
+ /// </summary>
+ public struct BigNum {
+
+ // the internal representation
+ [Rep]
+ internal readonly System.Numerics.BigInteger val;
+ public static readonly BigNum ZERO = new BigNum(BIM.Zero);
+ public static readonly BigNum ONE = new BigNum(BIM.One);
+ public static readonly BigNum MINUS_ONE = new BigNum(-BIM.One);
+
+ [Pure]
+ public static BigNum FromInt(int v) {
+ return new BigNum(new BIM(v));
+ }
+
+ [Pure]
+ public static BigNum FromUInt(uint v) {
+ return new BigNum(new BIM((long)v));
+ }
+
+ [Pure]
+ public static BigNum FromLong(long v) {
+ return new BigNum(new BIM(v));
+ }
+
+ [Pure]
+ public static BigNum FromBigInt(System.Numerics.BigInteger v) {
+ return new BigNum(v);
+ }
+
+ [Pure]
+ public static BigNum FromULong(ulong v) {
+ return FromString("" + v);
+ }
+
+ [Pure]
+ public static BigNum FromString(string v) {
+ try {
+ return new BigNum(BIM.Parse(v));
+ } catch (System.ArgumentException) {
+ throw new FormatException();
+ }
+ }
+
+ public static bool TryParse(string v, out BigNum res) {
+ try {
+ res = BigNum.FromString(v);
+ return true;
+ } catch (FormatException) {
+ res = ZERO;
+ return false;
+ }
+ }
+
+ // Convert to int, without checking whether overflows occur
+ public int ToInt {
+ get {
+ return (int)val;
+ }
+ }
+
+ public BIM ToBigInteger {
+ get {
+ return val;
+ }
+ }
+
+ // Convert to int; assert that no overflows occur
+ public int ToIntSafe {
+ get {
+ Contract.Assert(this.InInt32);
+ return this.ToInt;
+ }
+ }
+
+ public Rational ToRational {
+ get {
+ return Rational.FromBignum(this);
+ }
+ }
+
+ public byte[] ToByteArray()
+ {
+ return this.val.ToByteArray();
+ }
+
+ internal BigNum(System.Numerics.BigInteger val) {
+ this.val = val;
+ }
+
+ public static bool operator ==(BigNum x, BigNum y) {
+ return (x.val == y.val);
+ }
+
+ public static bool operator !=(BigNum x, BigNum y) {
+ return !(x.val == y.val);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is BigNum))
+ return false;
+
+ BigNum other = (BigNum)obj;
+ return (this.val == other.val);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return this.val.GetHashCode();
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return cce.NonNull(val.ToString());
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Very limited support for format strings
+ // Note: Negative integers are linearised with a minus "-" in hexadecimal,
+ // not in 2-complement notation (in contrast to what the method
+ // int32.ToString(format) does)
+
+ [Pure]
+ public string/*!*/ ToString(string/*!*/ format) {
+ Contract.Requires(format != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ if (format.StartsWith("d") || format.StartsWith("D")) {
+ string res = this.Abs.ToString();
+ Contract.Assert(res != null);
+ return addMinus(this.Signum,
+ prefixWithZeros(extractPrecision(format), res));
+ } else if (format.StartsWith("x") || format.StartsWith("X")) {
+ string res = this.toHex(format.Substring(0, 1));
+ Contract.Assert(res != null);
+ return addMinus(this.Signum,
+ prefixWithZeros(extractPrecision(format), res));
+ } else {
+ throw new FormatException("Format " + format + " is not supported");
+ }
+ }
+
+ private static readonly System.Numerics.BigInteger BI_2_TO_24 = new BIM(0x1000000);
+
+ [Pure]
+ private string/*!*/ toHex(string/*!*/ format) {
+ Contract.Requires(format != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ string res = "";
+ System.Numerics.BigInteger rem = this.Abs.val;
+
+ while (rem > BIM.Zero) {
+ res = ((int)(rem % BI_2_TO_24)).ToString(format) + res;
+ rem = rem / BI_2_TO_24;
+ }
+
+ return res;
+ }
+
+ [Pure]
+ private int extractPrecision(string/*!*/ format) {
+ Contract.Requires(format != null);
+ if (format.Length > 1)
+ // will throw a FormatException if the precision is invalid;
+ // that is ok
+ return Int32.Parse(format.Substring(1));
+ // always output at least one digit
+ return 1;
+ }
+
+ [Pure]
+ private string/*!*/ addMinus(int signum, string/*!*/ suffix) {
+ Contract.Requires(suffix != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ if (signum < 0)
+ return "-" + suffix;
+ return suffix;
+ }
+
+ [Pure]
+ private string/*!*/ prefixWithZeros(int minLength, string/*!*/ suffix) {
+ Contract.Requires(suffix != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ StringBuilder res = new StringBuilder();
+ while (res.Length + suffix.Length < minLength)
+ res.Append("0");
+ res.Append(suffix);
+ return res.ToString();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Basic arithmetic operations
+
+ public BigNum Abs {
+ get {
+ return new BigNum(BIM.Abs(this.val));
+ }
+ }
+
+ public BigNum Neg {
+ get {
+ return new BigNum(-this.val);
+ }
+ }
+
+ [Pure]
+ public static BigNum operator -(BigNum x) {
+ return x.Neg;
+ }
+
+ [Pure]
+ public static BigNum operator +(BigNum x, BigNum y) {
+ return new BigNum(x.val + y.val);
+ }
+
+ [Pure]
+ public static BigNum operator -(BigNum x, BigNum y) {
+ return new BigNum(x.val - y.val);
+ }
+
+ [Pure]
+ public static BigNum operator *(BigNum x, BigNum y) {
+ return new BigNum(x.val * y.val);
+ }
+
+ // TODO: check that this has a proper semantics (which? :-))
+ [Pure]
+ public static BigNum operator /(BigNum x, BigNum y) {
+ return new BigNum(x.val / y.val);
+ }
+
+ // TODO: check that this has a proper semantics (which? :-))
+ [Pure]
+ public static BigNum operator %(BigNum x, BigNum y) {
+ return new BigNum(x.val - ((x.val / y.val) * y.val));
+ }
+
+ [Pure]
+ public BigNum Min(BigNum that) {
+ return new BigNum(this.val <= that.val ? this.val : that.val);
+ }
+
+ [Pure]
+ public BigNum Max(BigNum that) {
+ return new BigNum(this.val >= that.val ? this.val : that.val);
+ }
+
+ /// <summary>
+ /// Returns the greatest common divisor of this and _y.
+ /// </summary>
+ /// <param name="_y"></param>
+ /// <returns></returns>
+ public BigNum Gcd(BigNum _y) {
+ Contract.Ensures(!Contract.Result<BigNum>().IsNegative);
+ BigNum x = this.Abs;
+ BigNum y = _y.Abs;
+
+ while (true) {
+ if (x < y) {
+ y = y % x;
+ if (y.IsZero) {
+ return x;
+ }
+ } else {
+ x = x % y;
+ if (x.IsZero) {
+ return y;
+ }
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Some basic comparison operations
+
+ public int Signum {
+ get {
+ return this.val.Sign;
+ }
+ }
+
+ public bool IsPositive {
+ get {
+ return (this.val > BIM.Zero);
+ }
+ }
+
+ public bool IsNegative {
+ get {
+ return (this.val < BIM.Zero);
+ }
+ }
+
+ public bool IsZero {
+ get {
+ return this.val.IsZero;
+ }
+ }
+
+ [Pure]
+ public int CompareTo(BigNum that) {
+ if (this.val == that.val)
+ return 0;
+ if (this.val < that.val)
+ return -1;
+ return 1;
+ }
+
+ [Pure]
+ public static bool operator <(BigNum x, BigNum y) {
+ return (x.val < y.val);
+ }
+
+ [Pure]
+ public static bool operator >(BigNum x, BigNum y) {
+ return (x.val > y.val);
+ }
+
+ [Pure]
+ public static bool operator <=(BigNum x, BigNum y) {
+ return (x.val <= y.val);
+ }
+
+ [Pure]
+ public static bool operator >=(BigNum x, BigNum y) {
+ return (x.val >= y.val);
+ }
+
+
+ private static readonly System.Numerics.BigInteger MaxInt32 =
+ new BIM(Int32.MaxValue);
+ private static readonly System.Numerics.BigInteger MinInt32 =
+ new BIM(Int32.MinValue);
+
+ public bool InInt32 {
+ get {
+ return (val >= MinInt32) && (val <= MaxInt32);
+ }
+ }
+ }
+}
diff --git a/Source/Basetypes/Rational.cs b/Source/Basetypes/Rational.cs
index cd0eddce..ef59cf4f 100644
--- a/Source/Basetypes/Rational.cs
+++ b/Source/Basetypes/Rational.cs
@@ -1,248 +1,248 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Basetypes {
- /// <summary>
- /// The representation of a rational number.
- /// </summary>
- public struct Rational {
- public static readonly Rational ZERO = Rational.FromInts(0, 1);
- public static readonly Rational ONE = Rational.FromInts(1, 1);
- public static readonly Rational MINUS_ONE = Rational.FromInts(-1, 1);
-
- private BigNum numerator, denominator;
-
- // int numerator;
- // int denominator;
-
-
- // invariant: 0 < denominator || (numerator == 0 && denominator == 0);
- // invariant: numerator != 0 ==> gcd(abs(numerator),denominator) == 1;
- // invariant: numerator == 0 ==> denominator == 1 || denominator == 0;
-
- public static Rational FromInt(int x) {
- return FromBignum(BigNum.FromInt(x));
- }
-
- public static Rational FromBignum(BigNum n)
- {
- return new Rational(n, BigNum.ONE);
- }
-
- private Rational(BigNum num, BigNum den)
- {
- Contract.Assert(den.Signum > 0);
- Contract.Assert(num == BigNum.ZERO || num.Gcd(den) == BigNum.ONE);
- numerator = num;
- denominator = den;
- }
-
- public static Rational FromBignums(BigNum num, BigNum den) {
- Contract.Assert(!den.IsZero);
- if (num == BigNum.ZERO)
- return ZERO;
- if (den.Signum < 0) {
- den = -den;
- num = -num;
- }
- if (den == BigNum.ONE)
- return new Rational(num, den);
- var gcd = num.Gcd(den);
- if (gcd == BigNum.ONE)
- return new Rational(num, den);
- return new Rational(num / gcd, den / gcd);
- }
-
- public static Rational FromInts(int num, int den) {
- return FromBignums(BigNum.FromInt(num), BigNum.FromInt(den));
- }
-
- /// <summary>
- /// Returns the absolute value of the rational.
- /// </summary>
- public Rational Abs() {
- Contract.Ensures(Contract.Result<Rational>().IsNonNegative);
- if (IsNonNegative) {
- return this;
- } else {
- return -this;
- }
- }
-
- /// <summary>
- /// Returns a rational whose numerator and denominator, resepctively, are the Gcd
- /// of the numerators and denominators of r and s. If one of r and s is 0, the absolute
- /// value of the other is returned. If both are 0, 1 is returned.
- /// </summary>
- public static Rational Gcd(Rational r, Rational s) {
- Contract.Ensures(Contract.Result<Rational>().IsPositive);
- if (r.IsZero) {
- if (s.IsZero) {
- return ONE;
- } else {
- return s.Abs();
- }
- } else if (s.IsZero) {
- return r.Abs();
- } else {
- return new Rational(r.Numerator.Gcd(s.Numerator),
- r.Denominator.Gcd(s.Denominator));
- }
- }
-
- public BigNum Numerator { get { return numerator; } }
- public BigNum Denominator { get { return denominator == BigNum.ZERO ? BigNum.ONE : denominator; } }
-
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return String.Format("{0}/{1}", Numerator, Denominator);
- }
-
-
- public static bool operator ==(Rational r, Rational s) {
- return r.Numerator == s.Numerator && r.Denominator == s.Denominator;
- }
-
- public static bool operator !=(Rational r, Rational s) {
- return !(r == s);
- }
-
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- return obj is Rational && (Rational)obj == this;
- }
-
- public override int GetHashCode() {
- return this.Numerator.GetHashCode() * 13 + this.Denominator.GetHashCode();
- }
-
- public int Signum {
- get {
- return this.Numerator.Signum;
- }
- }
-
- public bool IsZero {
- get {
- return Signum == 0;
- }
- }
-
- public bool IsNonZero {
- get {
- return Signum != 0;
- }
- }
-
- public bool IsIntegral {
- get {
- return Denominator == BigNum.ONE;
- }
- }
-
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public bool HasValue(int n) {
- return this == FromInt(n);
- }
-
- /// <summary>
- /// Returns the rational as an integer. Requires the rational to be integral.
- /// </summary>
- public int AsInteger {
- get {
- Contract.Assert(this.IsIntegral);
- return Numerator.ToIntSafe;
- }
- }
-
- public BigNum AsBigNum {
- get {
- Contract.Assert(this.IsIntegral);
- return Numerator;
- }
- }
-
- public double AsDouble {
- [Pure]
- get {
- if (this.IsZero) {
- return 0.0;
- } else {
- return (double)Numerator.ToIntSafe / (double)Denominator.ToIntSafe;
- }
- }
- }
-
- public bool IsNegative {
- [Pure]
- get {
- return Signum < 0;
- }
- }
-
- public bool IsPositive {
- [Pure]
- get {
- return 0 < Signum;
- }
- }
-
- public bool IsNonNegative {
- [Pure]
- get {
- return 0 <= Signum;
- }
- }
-
- public static Rational operator -(Rational r)
- {
- return new Rational(-r.Numerator, r.Denominator);
- }
-
- public static Rational operator /(Rational r, Rational s)
- {
- return FromBignums(r.Numerator * s.Denominator, r.Denominator * s.Numerator);
- }
-
- public static Rational operator -(Rational r, Rational s)
- {
- return r + (-s);
- }
-
- public static Rational operator +(Rational r, Rational s)
- {
- return FromBignums(r.Numerator * s.Denominator + s.Numerator * r.Denominator, r.Denominator * s.Denominator);
- }
-
- public static Rational operator *(Rational r, Rational s)
- {
- return FromBignums(r.Numerator * s.Numerator, r.Denominator * s.Denominator);
- }
-
- public static bool operator <(Rational r, Rational s)
- {
- return (r - s).Signum < 0;
- }
-
- public static bool operator <=(Rational r, Rational s)
- {
- return !(r > s);
- }
-
- public static bool operator >=(Rational r, Rational s) {
- return !(r < s);
- }
-
- public static bool operator >(Rational r, Rational s) {
- return s < r;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Basetypes {
+ /// <summary>
+ /// The representation of a rational number.
+ /// </summary>
+ public struct Rational {
+ public static readonly Rational ZERO = Rational.FromInts(0, 1);
+ public static readonly Rational ONE = Rational.FromInts(1, 1);
+ public static readonly Rational MINUS_ONE = Rational.FromInts(-1, 1);
+
+ private BigNum numerator, denominator;
+
+ // int numerator;
+ // int denominator;
+
+
+ // invariant: 0 < denominator || (numerator == 0 && denominator == 0);
+ // invariant: numerator != 0 ==> gcd(abs(numerator),denominator) == 1;
+ // invariant: numerator == 0 ==> denominator == 1 || denominator == 0;
+
+ public static Rational FromInt(int x) {
+ return FromBignum(BigNum.FromInt(x));
+ }
+
+ public static Rational FromBignum(BigNum n)
+ {
+ return new Rational(n, BigNum.ONE);
+ }
+
+ private Rational(BigNum num, BigNum den)
+ {
+ Contract.Assert(den.Signum > 0);
+ Contract.Assert(num == BigNum.ZERO || num.Gcd(den) == BigNum.ONE);
+ numerator = num;
+ denominator = den;
+ }
+
+ public static Rational FromBignums(BigNum num, BigNum den) {
+ Contract.Assert(!den.IsZero);
+ if (num == BigNum.ZERO)
+ return ZERO;
+ if (den.Signum < 0) {
+ den = -den;
+ num = -num;
+ }
+ if (den == BigNum.ONE)
+ return new Rational(num, den);
+ var gcd = num.Gcd(den);
+ if (gcd == BigNum.ONE)
+ return new Rational(num, den);
+ return new Rational(num / gcd, den / gcd);
+ }
+
+ public static Rational FromInts(int num, int den) {
+ return FromBignums(BigNum.FromInt(num), BigNum.FromInt(den));
+ }
+
+ /// <summary>
+ /// Returns the absolute value of the rational.
+ /// </summary>
+ public Rational Abs() {
+ Contract.Ensures(Contract.Result<Rational>().IsNonNegative);
+ if (IsNonNegative) {
+ return this;
+ } else {
+ return -this;
+ }
+ }
+
+ /// <summary>
+ /// Returns a rational whose numerator and denominator, resepctively, are the Gcd
+ /// of the numerators and denominators of r and s. If one of r and s is 0, the absolute
+ /// value of the other is returned. If both are 0, 1 is returned.
+ /// </summary>
+ public static Rational Gcd(Rational r, Rational s) {
+ Contract.Ensures(Contract.Result<Rational>().IsPositive);
+ if (r.IsZero) {
+ if (s.IsZero) {
+ return ONE;
+ } else {
+ return s.Abs();
+ }
+ } else if (s.IsZero) {
+ return r.Abs();
+ } else {
+ return new Rational(r.Numerator.Gcd(s.Numerator),
+ r.Denominator.Gcd(s.Denominator));
+ }
+ }
+
+ public BigNum Numerator { get { return numerator; } }
+ public BigNum Denominator { get { return denominator == BigNum.ZERO ? BigNum.ONE : denominator; } }
+
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return String.Format("{0}/{1}", Numerator, Denominator);
+ }
+
+
+ public static bool operator ==(Rational r, Rational s) {
+ return r.Numerator == s.Numerator && r.Denominator == s.Denominator;
+ }
+
+ public static bool operator !=(Rational r, Rational s) {
+ return !(r == s);
+ }
+
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ return obj is Rational && (Rational)obj == this;
+ }
+
+ public override int GetHashCode() {
+ return this.Numerator.GetHashCode() * 13 + this.Denominator.GetHashCode();
+ }
+
+ public int Signum {
+ get {
+ return this.Numerator.Signum;
+ }
+ }
+
+ public bool IsZero {
+ get {
+ return Signum == 0;
+ }
+ }
+
+ public bool IsNonZero {
+ get {
+ return Signum != 0;
+ }
+ }
+
+ public bool IsIntegral {
+ get {
+ return Denominator == BigNum.ONE;
+ }
+ }
+
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public bool HasValue(int n) {
+ return this == FromInt(n);
+ }
+
+ /// <summary>
+ /// Returns the rational as an integer. Requires the rational to be integral.
+ /// </summary>
+ public int AsInteger {
+ get {
+ Contract.Assert(this.IsIntegral);
+ return Numerator.ToIntSafe;
+ }
+ }
+
+ public BigNum AsBigNum {
+ get {
+ Contract.Assert(this.IsIntegral);
+ return Numerator;
+ }
+ }
+
+ public double AsDouble {
+ [Pure]
+ get {
+ if (this.IsZero) {
+ return 0.0;
+ } else {
+ return (double)Numerator.ToIntSafe / (double)Denominator.ToIntSafe;
+ }
+ }
+ }
+
+ public bool IsNegative {
+ [Pure]
+ get {
+ return Signum < 0;
+ }
+ }
+
+ public bool IsPositive {
+ [Pure]
+ get {
+ return 0 < Signum;
+ }
+ }
+
+ public bool IsNonNegative {
+ [Pure]
+ get {
+ return 0 <= Signum;
+ }
+ }
+
+ public static Rational operator -(Rational r)
+ {
+ return new Rational(-r.Numerator, r.Denominator);
+ }
+
+ public static Rational operator /(Rational r, Rational s)
+ {
+ return FromBignums(r.Numerator * s.Denominator, r.Denominator * s.Numerator);
+ }
+
+ public static Rational operator -(Rational r, Rational s)
+ {
+ return r + (-s);
+ }
+
+ public static Rational operator +(Rational r, Rational s)
+ {
+ return FromBignums(r.Numerator * s.Denominator + s.Numerator * r.Denominator, r.Denominator * s.Denominator);
+ }
+
+ public static Rational operator *(Rational r, Rational s)
+ {
+ return FromBignums(r.Numerator * s.Numerator, r.Denominator * s.Denominator);
+ }
+
+ public static bool operator <(Rational r, Rational s)
+ {
+ return (r - s).Signum < 0;
+ }
+
+ public static bool operator <=(Rational r, Rational s)
+ {
+ return !(r > s);
+ }
+
+ public static bool operator >=(Rational r, Rational s) {
+ return !(r < s);
+ }
+
+ public static bool operator >(Rational r, Rational s) {
+ return s < r;
+ }
+ }
+}
diff --git a/Source/Basetypes/Set.cs b/Source/Basetypes/Set.cs
index dfd65b4b..0cc1d103 100644
--- a/Source/Basetypes/Set.cs
+++ b/Source/Basetypes/Set.cs
@@ -1,286 +1,286 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.Boogie {
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics.Contracts;
-
- /// <summary>
- /// A class representing a mathematical set.
- /// </summary>
- public class GSet<T> : ICloneable, IEnumerable, IEnumerable<T> {
- /*[Own]*/
- Dictionary<T, int> ht;
- List<T> arr; // keep elements in a well-defined order; otherwise iteration is non-deterministic
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(ht != null);
- Contract.Invariant(arr != null);
- Contract.Invariant(ht.Count == arr.Count);
- }
-
-
- public GSet() {
- ht = new Dictionary<T, int>();
- arr = new List<T>();
- //:base();
- }
-
- private GSet(Dictionary<T,int>/*!*/ ht, List<T> arr) {
- Contract.Requires(ht != null);
- Contract.Requires(arr != null);
- this.ht = ht;
- this.arr = arr;
- //:base();
- }
-
- public GSet(int capacity) {
- ht = new Dictionary<T, int>(capacity);
- arr = new List<T>(capacity);
- //:base();
- }
-
-
- public readonly static GSet<T>/*!*/ Empty = new GSet<T>();
-
- public void Clear() {
- ht.Clear();
- arr.Clear();
- }
-
- /// <summary>
- /// This method idempotently adds "o" to the set.
- /// In notation:
- /// this.SetElements = this.SetElements_old \union {o};
- /// </summary>
- public void Add(T o) {
- if (!ht.ContainsKey(o)) {
- ht[o] = arr.Count;
- arr.Add(o);
- }
- }
-
- /// <summary>
- /// this.SetElements = this.SetElements_old \union s.GSet<T>Elements;
- /// </summary>
- public void AddRange(IEnumerable<T> s) {
- foreach (T o in s) {
- Add(o);
- }
- }
-
- /// <summary>
- /// this.SetElements = this.SetElements_old \setminus {o};
- /// </summary>
- public void Remove(T o) {
- int idx;
- if (ht.TryGetValue(o, out idx)) {
- var last = arr[arr.Count - 1];
- arr.RemoveAt(arr.Count - 1);
- if (idx != arr.Count) {
- arr[idx] = last;
- ht[last] = idx;
- }
- ht.Remove(o);
- }
- }
-
- /// <summary>
- /// this.SetElements = this.SetElements_old \setminus s.SetElements;
- /// </summary>
- public void RemoveRange(IEnumerable<T> s) {
- Contract.Requires(s != null);
- if (s == this) {
- ht.Clear();
- arr.Clear();
- } else {
- foreach (T o in s) {
- Remove(o);
- }
- }
- }
-
- /// <summary>
- /// Returns an arbitrary element from the set.
- /// </summary>
- public T Choose() {
- Contract.Requires((Count > 0));
- foreach(var e in this)
- return e;
- return default(T);
- }
-
- /// <summary>
- /// Picks an arbitrary element from the set, removes it, and returns it.
- /// </summary>
- public T Take() {
- Contract.Requires((Count > 0));
- Contract.Ensures(Count == Contract.OldValue(Count) - 1);
- T r = Choose();
- Remove(r);
- return r;
- }
-
- public void Intersect(GSet<T>/*!*/ s) {
- Contract.Requires(s != null);
- if (s == this) return;
- ht.Clear();
- var newArr = new List<T>();
- foreach (T key in arr) {
- if (s.ht.ContainsKey(key)) {
- ht[key] = newArr.Count;
- newArr.Add(key);
- }
- }
- arr = newArr;
- }
-
- /// <summary>
- /// The getter returns true iff "o" is in the set.
- /// The setter adds the value "o" (for "true") or removes "o" (for "false")
- /// </summary>
- public bool this[T o] {
- get {
- return ht.ContainsKey(o);
- }
- set {
- if (value) {
- Add(o);
- } else {
- Remove(o);
- }
- }
- }
-
- /// <summary>
- /// Returns true iff "o" is an element of "this".
- /// </summary>
- /// <param name="o"></param>
- /// <returns></returns>
- [Pure]
- public bool Contains(T o) {
- return this.ht.ContainsKey(o);
- }
-
- /// <summary>
- /// Returns true iff every element of "s" is an element of "this", that is, if
- /// "s" is a subset of "this".
- /// </summary>
- /// <param name="s"></param>
- /// <returns></returns>
- public bool ContainsRange(IEnumerable<T> s) {
- Contract.Requires(s != null);
- if (s != this) {
- foreach (T key in s) {
- if (!this.ht.ContainsKey(key)) {
- return false;
- }
- }
- }
- return true;
- }
-
- public object/*!*/ Clone() {
- Contract.Ensures(Contract.Result<object>() != null);
- return new GSet<T>(new Dictionary<T,int>(ht), new List<T>(arr));
- }
-
- public virtual int Count {
- get {
- return ht.Count;
- }
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- string s = null;
- foreach (object/*!*/ key in ht.Keys) {
- Contract.Assert(key != null);
- if (s == null) {
- s = "{";
- } else {
- s += ", ";
- }
- s += key.ToString();
- }
- if (s == null) {
- return "{}";
- } else {
- return s + "}";
- }
- }
-
- //----------------------------- Static Methods ---------------------------------
-
- // Functional Intersect
- public static GSet<T>/*!*/ Intersect(GSet<T>/*!*/ a, GSet<T>/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<GSet<T>>() != null);
- //Contract.Ensures(Contract.ForAll(result, x => a[x] && b[x] ));
- GSet<T>/*!*/ res = (GSet<T>/*!*/)cce.NonNull(a.Clone());
- res.Intersect(b);
- return res;
- }
- // Functional Union
- public static GSet<T>/*!*/ Union(GSet<T>/*!*/ a, GSet<T>/*!*/ b) {
- Contract.Requires(a != null);
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<GSet<T>>() != null);
- // Contract.Ensures(Contract.ForAll(result, x => a[x] || b[x] ));
- GSet<T>/*!*/ res = (GSet<T>/*!*/)cce.NonNull(a.Clone());
- res.AddRange(b);
- return res;
- }
-
- public delegate bool SetFilter(object/*!*/ obj);
-
- public static GSet<T>/*!*/ Filter(GSet<T>/*!*/ a, Func<T,bool> filter) {
- Contract.Requires(filter != null);
- Contract.Requires(a != null);
- Contract.Ensures(Contract.Result<GSet<T>>() != null);
- GSet<T> inter = new GSet<T>();
-
- foreach (T elem in a) {
- Contract.Assert(elem != null);
- if (filter(elem)) {
- inter.Add(elem);
- }
- }
- return inter;
- }
-
- public IEnumerator<T> GetEnumerator()
- {
- return arr.GetEnumerator();
- }
-
- IEnumerator IEnumerable.GetEnumerator()
- {
- return ((IEnumerable)arr).GetEnumerator();
- }
-
- public bool AddAll(IEnumerable s)
- {
- foreach (T e in s) Add(e);
- return true;
- }
- }
-
-
- public interface IWorkList : ICollection {
- bool Add(object o);
- bool AddAll(IEnumerable objs);
- bool IsEmpty();
- object Pull();
- }
-
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.Boogie {
+ using System;
+ using System.IO;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics.Contracts;
+
+ /// <summary>
+ /// A class representing a mathematical set.
+ /// </summary>
+ public class GSet<T> : ICloneable, IEnumerable, IEnumerable<T> {
+ /*[Own]*/
+ Dictionary<T, int> ht;
+ List<T> arr; // keep elements in a well-defined order; otherwise iteration is non-deterministic
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(ht != null);
+ Contract.Invariant(arr != null);
+ Contract.Invariant(ht.Count == arr.Count);
+ }
+
+
+ public GSet() {
+ ht = new Dictionary<T, int>();
+ arr = new List<T>();
+ //:base();
+ }
+
+ private GSet(Dictionary<T,int>/*!*/ ht, List<T> arr) {
+ Contract.Requires(ht != null);
+ Contract.Requires(arr != null);
+ this.ht = ht;
+ this.arr = arr;
+ //:base();
+ }
+
+ public GSet(int capacity) {
+ ht = new Dictionary<T, int>(capacity);
+ arr = new List<T>(capacity);
+ //:base();
+ }
+
+
+ public readonly static GSet<T>/*!*/ Empty = new GSet<T>();
+
+ public void Clear() {
+ ht.Clear();
+ arr.Clear();
+ }
+
+ /// <summary>
+ /// This method idempotently adds "o" to the set.
+ /// In notation:
+ /// this.SetElements = this.SetElements_old \union {o};
+ /// </summary>
+ public void Add(T o) {
+ if (!ht.ContainsKey(o)) {
+ ht[o] = arr.Count;
+ arr.Add(o);
+ }
+ }
+
+ /// <summary>
+ /// this.SetElements = this.SetElements_old \union s.GSet<T>Elements;
+ /// </summary>
+ public void AddRange(IEnumerable<T> s) {
+ foreach (T o in s) {
+ Add(o);
+ }
+ }
+
+ /// <summary>
+ /// this.SetElements = this.SetElements_old \setminus {o};
+ /// </summary>
+ public void Remove(T o) {
+ int idx;
+ if (ht.TryGetValue(o, out idx)) {
+ var last = arr[arr.Count - 1];
+ arr.RemoveAt(arr.Count - 1);
+ if (idx != arr.Count) {
+ arr[idx] = last;
+ ht[last] = idx;
+ }
+ ht.Remove(o);
+ }
+ }
+
+ /// <summary>
+ /// this.SetElements = this.SetElements_old \setminus s.SetElements;
+ /// </summary>
+ public void RemoveRange(IEnumerable<T> s) {
+ Contract.Requires(s != null);
+ if (s == this) {
+ ht.Clear();
+ arr.Clear();
+ } else {
+ foreach (T o in s) {
+ Remove(o);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Returns an arbitrary element from the set.
+ /// </summary>
+ public T Choose() {
+ Contract.Requires((Count > 0));
+ foreach(var e in this)
+ return e;
+ return default(T);
+ }
+
+ /// <summary>
+ /// Picks an arbitrary element from the set, removes it, and returns it.
+ /// </summary>
+ public T Take() {
+ Contract.Requires((Count > 0));
+ Contract.Ensures(Count == Contract.OldValue(Count) - 1);
+ T r = Choose();
+ Remove(r);
+ return r;
+ }
+
+ public void Intersect(GSet<T>/*!*/ s) {
+ Contract.Requires(s != null);
+ if (s == this) return;
+ ht.Clear();
+ var newArr = new List<T>();
+ foreach (T key in arr) {
+ if (s.ht.ContainsKey(key)) {
+ ht[key] = newArr.Count;
+ newArr.Add(key);
+ }
+ }
+ arr = newArr;
+ }
+
+ /// <summary>
+ /// The getter returns true iff "o" is in the set.
+ /// The setter adds the value "o" (for "true") or removes "o" (for "false")
+ /// </summary>
+ public bool this[T o] {
+ get {
+ return ht.ContainsKey(o);
+ }
+ set {
+ if (value) {
+ Add(o);
+ } else {
+ Remove(o);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Returns true iff "o" is an element of "this".
+ /// </summary>
+ /// <param name="o"></param>
+ /// <returns></returns>
+ [Pure]
+ public bool Contains(T o) {
+ return this.ht.ContainsKey(o);
+ }
+
+ /// <summary>
+ /// Returns true iff every element of "s" is an element of "this", that is, if
+ /// "s" is a subset of "this".
+ /// </summary>
+ /// <param name="s"></param>
+ /// <returns></returns>
+ public bool ContainsRange(IEnumerable<T> s) {
+ Contract.Requires(s != null);
+ if (s != this) {
+ foreach (T key in s) {
+ if (!this.ht.ContainsKey(key)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ public object/*!*/ Clone() {
+ Contract.Ensures(Contract.Result<object>() != null);
+ return new GSet<T>(new Dictionary<T,int>(ht), new List<T>(arr));
+ }
+
+ public virtual int Count {
+ get {
+ return ht.Count;
+ }
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ string s = null;
+ foreach (object/*!*/ key in ht.Keys) {
+ Contract.Assert(key != null);
+ if (s == null) {
+ s = "{";
+ } else {
+ s += ", ";
+ }
+ s += key.ToString();
+ }
+ if (s == null) {
+ return "{}";
+ } else {
+ return s + "}";
+ }
+ }
+
+ //----------------------------- Static Methods ---------------------------------
+
+ // Functional Intersect
+ public static GSet<T>/*!*/ Intersect(GSet<T>/*!*/ a, GSet<T>/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<GSet<T>>() != null);
+ //Contract.Ensures(Contract.ForAll(result, x => a[x] && b[x] ));
+ GSet<T>/*!*/ res = (GSet<T>/*!*/)cce.NonNull(a.Clone());
+ res.Intersect(b);
+ return res;
+ }
+ // Functional Union
+ public static GSet<T>/*!*/ Union(GSet<T>/*!*/ a, GSet<T>/*!*/ b) {
+ Contract.Requires(a != null);
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<GSet<T>>() != null);
+ // Contract.Ensures(Contract.ForAll(result, x => a[x] || b[x] ));
+ GSet<T>/*!*/ res = (GSet<T>/*!*/)cce.NonNull(a.Clone());
+ res.AddRange(b);
+ return res;
+ }
+
+ public delegate bool SetFilter(object/*!*/ obj);
+
+ public static GSet<T>/*!*/ Filter(GSet<T>/*!*/ a, Func<T,bool> filter) {
+ Contract.Requires(filter != null);
+ Contract.Requires(a != null);
+ Contract.Ensures(Contract.Result<GSet<T>>() != null);
+ GSet<T> inter = new GSet<T>();
+
+ foreach (T elem in a) {
+ Contract.Assert(elem != null);
+ if (filter(elem)) {
+ inter.Add(elem);
+ }
+ }
+ return inter;
+ }
+
+ public IEnumerator<T> GetEnumerator()
+ {
+ return arr.GetEnumerator();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return ((IEnumerable)arr).GetEnumerator();
+ }
+
+ public bool AddAll(IEnumerable s)
+ {
+ foreach (T e in s) Add(e);
+ return true;
+ }
+ }
+
+
+ public interface IWorkList : ICollection {
+ bool Add(object o);
+ bool AddAll(IEnumerable objs);
+ bool IsEmpty();
+ object Pull();
+ }
+
+
} \ No newline at end of file
diff --git a/Source/Basetypes/cce.cs b/Source/Basetypes/cce.cs
index ef594484..1e0b12a5 100644
--- a/Source/Basetypes/cce.cs
+++ b/Source/Basetypes/cce.cs
@@ -1,193 +1,193 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
- }
- //[Pure]
- //public static bool NonNullElements(VariableSeq collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
- return iEnumerator != null;
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
- //[Pure]
- //public static bool IsValid(Microsoft.Dafny.Expression expression) {
- // return true;
- //}
- //public static List<T> toList<T>(PureCollections.Sequence s) {
- // List<T> toRet = new List<T>();
- // foreach (T t in s.elems)
- // if(t!=null)
- // toRet.Add(t);
- // return toRet;
- //}
-
- //internal static bool NonNullElements(Set set) {
- // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
- //}
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
+ }
+ //[Pure]
+ //public static bool NonNullElements(VariableSeq collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
+ return iEnumerator != null;
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+ //[Pure]
+ //public static bool IsValid(Microsoft.Dafny.Expression expression) {
+ // return true;
+ //}
+ //public static List<T> toList<T>(PureCollections.Sequence s) {
+ // List<T> toRet = new List<T>();
+ // foreach (T t in s.elems)
+ // if(t!=null)
+ // toRet.Add(t);
+ // return toRet;
+ //}
+
+ //internal static bool NonNullElements(Set set) {
+ // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
+ //}
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/Boogie.sln b/Source/Boogie.sln
index f16c1032..0823775c 100644
--- a/Source/Boogie.sln
+++ b/Source/Boogie.sln
@@ -1,643 +1,643 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Provers", "Provers", "{B758C1E3-824A-439F-AA2F-0BA1143E8C8D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoogieDriver", "BoogieDriver\BoogieDriver.csproj", "{DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}"
- ProjectSection(ProjectDependencies) = postProject
- {D07B8E38-E172-47F4-AD02-0373014A46D3} = {D07B8E38-E172-47F4-AD02-0373014A46D3}
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AbsInt", "AbsInt\AbsInt.csproj", "{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SMTLib", "Provers\SMTLib\SMTLib.csproj", "{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VCGeneration", "VCGeneration\VCGeneration.csproj", "{E1F10180-C7B9-4147-B51F-FA1B701966DC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VCExpr", "VCExpr\VCExpr.csproj", "{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "Core\Core.csproj", "{B230A69C-C466-4065-B9C1-84D80E76D802}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Graph", "Graph\Graph.csproj", "{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Basetypes", "Basetypes\Basetypes.csproj", "{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeContractsExtender", "CodeContractsExtender\CodeContractsExtender.csproj", "{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelViewer", "ModelViewer\ModelViewer.csproj", "{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParserHelper", "ParserHelper\ParserHelper.csproj", "{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Houdini", "Houdini\Houdini.csproj", "{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Predication", "Predication\Predication.csproj", "{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Doomed", "Doomed\Doomed.csproj", "{884386A3-58E9-40BB-A273-B24976775553}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExecutionEngine", "ExecutionEngine\ExecutionEngine.csproj", "{EAA5EB79-D475-4601-A59B-825C191CD25F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BVD", "BVD\BVD.csproj", "{8A05D14E-F2BF-4890-BBE0-D76B18A50797}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Concurrency", "Concurrency\Concurrency.csproj", "{D07B8E38-E172-47F4-AD02-0373014A46D3}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{0C77D814-EC94-45D7-9F9B-213C425D0F15}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreTests", "UnitTests\CoreTests\CoreTests.csproj", "{961B3BCA-2067-43B2-8E43-23C4293F21B9}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtil", "UnitTests\TestUtil\TestUtil.csproj", "{59118E35-4236-495E-AF6E-0D641302ED2C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasetypesTests", "UnitTests\BasetypesTests\BasetypesTests.csproj", "{D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Checked|.NET = Checked|.NET
- Checked|Any CPU = Checked|Any CPU
- Checked|Mixed Platforms = Checked|Mixed Platforms
- Checked|x86 = Checked|x86
- Debug|.NET = Debug|.NET
- Debug|Any CPU = Debug|Any CPU
- Debug|Mixed Platforms = Debug|Mixed Platforms
- Debug|x86 = Debug|x86
- Release|.NET = Release|.NET
- Release|Any CPU = Release|Any CPU
- Release|Mixed Platforms = Release|Mixed Platforms
- Release|x86 = Release|x86
- z3apidebug|.NET = z3apidebug|.NET
- z3apidebug|Any CPU = z3apidebug|Any CPU
- z3apidebug|Mixed Platforms = z3apidebug|Mixed Platforms
- z3apidebug|x86 = z3apidebug|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|.NET.Build.0 = Checked|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|x86.ActiveCfg = Checked|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|.NET.Build.0 = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|x86.ActiveCfg = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|.NET.ActiveCfg = Release|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|.NET.Build.0 = Release|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Any CPU.Build.0 = Release|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|x86.ActiveCfg = Release|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|x86.ActiveCfg = z3apidebug|x86
- {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|x86.Build.0 = z3apidebug|x86
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|.NET.Build.0 = Checked|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|x86.ActiveCfg = Checked|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|.NET.Build.0 = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|.NET.ActiveCfg = Release|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|.NET.Build.0 = Release|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Any CPU.Build.0 = Release|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|x86.ActiveCfg = Release|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|x86.ActiveCfg = z3apidebug|x86
- {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|x86.Build.0 = z3apidebug|x86
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|.NET.Build.0 = Checked|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|x86.ActiveCfg = Checked|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|.NET.Build.0 = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|x86.ActiveCfg = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|.NET.ActiveCfg = Release|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Any CPU.Build.0 = Release|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|x86.ActiveCfg = Release|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|.NET.Build.0 = Checked|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|x86.ActiveCfg = Checked|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|.NET.Build.0 = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|x86.ActiveCfg = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|.NET.ActiveCfg = Release|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Any CPU.Build.0 = Release|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|x86.ActiveCfg = Release|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
- {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|.NET.Build.0 = Checked|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|x86.ActiveCfg = Checked|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|.NET.Build.0 = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|x86.ActiveCfg = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|.NET.ActiveCfg = Release|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Any CPU.Build.0 = Release|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|x86.ActiveCfg = Release|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
- {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|.NET.Build.0 = Checked|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|x86.ActiveCfg = Checked|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|.NET.Build.0 = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|x86.ActiveCfg = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|.NET.ActiveCfg = Release|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|.NET.Build.0 = Release|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Any CPU.Build.0 = Release|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|x86.ActiveCfg = Release|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
- {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|.NET.Build.0 = Checked|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|x86.ActiveCfg = Checked|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|.NET.Build.0 = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|.NET.ActiveCfg = Release|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Any CPU.Build.0 = Release|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|x86.ActiveCfg = Release|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
- {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|.NET.Build.0 = Checked|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|x86.ActiveCfg = Checked|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|.NET.Build.0 = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|x86.ActiveCfg = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|.NET.ActiveCfg = Release|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|.NET.Build.0 = Release|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Any CPU.Build.0 = Release|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|x86.ActiveCfg = Release|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
- {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|.NET.Build.0 = Checked|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|x86.ActiveCfg = Checked|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|.NET.Build.0 = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|x86.ActiveCfg = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|.NET.ActiveCfg = Release|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|.NET.Build.0 = Release|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Any CPU.Build.0 = Release|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|x86.ActiveCfg = Release|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
- {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|.NET.ActiveCfg = Checked|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|.NET.Build.0 = Checked|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|Any CPU.ActiveCfg = Checked|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|Mixed Platforms.ActiveCfg = Checked|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|Mixed Platforms.Build.0 = Checked|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|x86.ActiveCfg = Checked|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|x86.Build.0 = Checked|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|.NET.ActiveCfg = Debug|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|.NET.Build.0 = Debug|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|Any CPU.ActiveCfg = Debug|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|Mixed Platforms.Build.0 = Debug|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|x86.ActiveCfg = Debug|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|x86.Build.0 = Debug|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|.NET.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|Any CPU.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|Mixed Platforms.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|Mixed Platforms.Build.0 = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|x86.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|x86.Build.0 = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|.NET.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|Any CPU.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|Mixed Platforms.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|Mixed Platforms.Build.0 = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|x86.ActiveCfg = Release|x86
- {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|x86.Build.0 = Release|x86
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|.NET.Build.0 = Checked|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|x86.ActiveCfg = Checked|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|.NET.Build.0 = Debug|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|x86.ActiveCfg = Debug|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|.NET.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Any CPU.Build.0 = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|x86.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|x86.Build.0 = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|.NET.ActiveCfg = Checked|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|.NET.Build.0 = Checked|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Any CPU.Build.0 = Checked|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|x86.ActiveCfg = Checked|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|.NET.Build.0 = Debug|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|x86.ActiveCfg = Debug|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|.NET.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Any CPU.Build.0 = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|x86.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|x86.Build.0 = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|.NET.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|.NET.Build.0 = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Any CPU.Build.0 = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|x86.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|.NET.Build.0 = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|x86.ActiveCfg = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|.NET.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Any CPU.Build.0 = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|x86.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|x86.Build.0 = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|.NET.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|.NET.Build.0 = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Any CPU.Build.0 = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|x86.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|.NET.Build.0 = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|x86.ActiveCfg = Debug|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|.NET.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Any CPU.Build.0 = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|x86.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Checked|.NET.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Checked|.NET.Build.0 = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Checked|Any CPU.Build.0 = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Checked|x86.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Debug|.NET.Build.0 = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Debug|x86.ActiveCfg = Debug|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Release|.NET.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Release|.NET.Build.0 = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Release|Any CPU.Build.0 = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.Release|x86.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|.NET.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|.NET.Build.0 = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Any CPU.Build.0 = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|x86.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|.NET.Build.0 = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|.NET.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Any CPU.Build.0 = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|x86.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|.NET.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|.NET.Build.0 = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Any CPU.Build.0 = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|x86.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|.NET.Build.0 = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|x86.ActiveCfg = Debug|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|.NET.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|.NET.Build.0 = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Any CPU.Build.0 = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|x86.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|.NET.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|.NET.Build.0 = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Any CPU.Build.0 = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|x86.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|.NET.Build.0 = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|x86.ActiveCfg = Debug|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|.NET.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|.NET.Build.0 = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Any CPU.Build.0 = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|x86.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|.NET.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Any CPU.Build.0 = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|x86.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|x86.ActiveCfg = Debug|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|.NET.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Any CPU.Build.0 = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|x86.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|.NET.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Any CPU.Build.0 = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|x86.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|.NET.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Any CPU.Build.0 = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|x86.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|.NET.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Any CPU.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Any CPU.Build.0 = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|x86.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|x86.ActiveCfg = Debug|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|.NET.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Any CPU.Build.0 = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|x86.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|x86.ActiveCfg = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {9B163AA3-36BC-4AFB-88AB-79BC9E97E401} = {B758C1E3-824A-439F-AA2F-0BA1143E8C8D}
- {961B3BCA-2067-43B2-8E43-23C4293F21B9} = {0C77D814-EC94-45D7-9F9B-213C425D0F15}
- {59118E35-4236-495E-AF6E-0D641302ED2C} = {0C77D814-EC94-45D7-9F9B-213C425D0F15}
- {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9} = {0C77D814-EC94-45D7-9F9B-213C425D0F15}
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Provers", "Provers", "{B758C1E3-824A-439F-AA2F-0BA1143E8C8D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoogieDriver", "BoogieDriver\BoogieDriver.csproj", "{DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {D07B8E38-E172-47F4-AD02-0373014A46D3} = {D07B8E38-E172-47F4-AD02-0373014A46D3}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AbsInt", "AbsInt\AbsInt.csproj", "{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SMTLib", "Provers\SMTLib\SMTLib.csproj", "{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VCGeneration", "VCGeneration\VCGeneration.csproj", "{E1F10180-C7B9-4147-B51F-FA1B701966DC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VCExpr", "VCExpr\VCExpr.csproj", "{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "Core\Core.csproj", "{B230A69C-C466-4065-B9C1-84D80E76D802}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Graph", "Graph\Graph.csproj", "{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Basetypes", "Basetypes\Basetypes.csproj", "{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeContractsExtender", "CodeContractsExtender\CodeContractsExtender.csproj", "{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelViewer", "ModelViewer\ModelViewer.csproj", "{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParserHelper", "ParserHelper\ParserHelper.csproj", "{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Houdini", "Houdini\Houdini.csproj", "{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Predication", "Predication\Predication.csproj", "{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Doomed", "Doomed\Doomed.csproj", "{884386A3-58E9-40BB-A273-B24976775553}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExecutionEngine", "ExecutionEngine\ExecutionEngine.csproj", "{EAA5EB79-D475-4601-A59B-825C191CD25F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BVD", "BVD\BVD.csproj", "{8A05D14E-F2BF-4890-BBE0-D76B18A50797}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Concurrency", "Concurrency\Concurrency.csproj", "{D07B8E38-E172-47F4-AD02-0373014A46D3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{0C77D814-EC94-45D7-9F9B-213C425D0F15}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreTests", "UnitTests\CoreTests\CoreTests.csproj", "{961B3BCA-2067-43B2-8E43-23C4293F21B9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtil", "UnitTests\TestUtil\TestUtil.csproj", "{59118E35-4236-495E-AF6E-0D641302ED2C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasetypesTests", "UnitTests\BasetypesTests\BasetypesTests.csproj", "{D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Checked|.NET = Checked|.NET
+ Checked|Any CPU = Checked|Any CPU
+ Checked|Mixed Platforms = Checked|Mixed Platforms
+ Checked|x86 = Checked|x86
+ Debug|.NET = Debug|.NET
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x86 = Debug|x86
+ Release|.NET = Release|.NET
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x86 = Release|x86
+ z3apidebug|.NET = z3apidebug|.NET
+ z3apidebug|Any CPU = z3apidebug|Any CPU
+ z3apidebug|Mixed Platforms = z3apidebug|Mixed Platforms
+ z3apidebug|x86 = z3apidebug|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|.NET.Build.0 = Checked|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|.NET.Build.0 = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|.NET.ActiveCfg = Release|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|.NET.Build.0 = Release|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.Release|x86.ActiveCfg = Release|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|x86.ActiveCfg = z3apidebug|x86
+ {DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}.z3apidebug|x86.Build.0 = z3apidebug|x86
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|.NET.Build.0 = Checked|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|.NET.Build.0 = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|.NET.ActiveCfg = Release|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|.NET.Build.0 = Release|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.Release|x86.ActiveCfg = Release|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|x86.ActiveCfg = z3apidebug|x86
+ {0EFA3E43-690B-48DC-A72C-384A3EA7F31F}.z3apidebug|x86.Build.0 = z3apidebug|x86
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|.NET.Build.0 = Checked|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|.NET.Build.0 = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|.NET.ActiveCfg = Release|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.Release|x86.ActiveCfg = Release|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|.NET.Build.0 = Checked|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|.NET.Build.0 = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|.NET.ActiveCfg = Release|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.Release|x86.ActiveCfg = Release|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
+ {E1F10180-C7B9-4147-B51F-FA1B701966DC}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|.NET.Build.0 = Checked|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|.NET.Build.0 = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|.NET.ActiveCfg = Release|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.Release|x86.ActiveCfg = Release|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
+ {56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|.NET.Build.0 = Checked|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|.NET.Build.0 = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|.NET.ActiveCfg = Release|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|.NET.Build.0 = Release|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.Release|x86.ActiveCfg = Release|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
+ {B230A69C-C466-4065-B9C1-84D80E76D802}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|.NET.Build.0 = Checked|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|.NET.Build.0 = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|.NET.ActiveCfg = Release|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.Release|x86.ActiveCfg = Release|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
+ {69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|.NET.Build.0 = Checked|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|.NET.Build.0 = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|.NET.ActiveCfg = Release|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|.NET.Build.0 = Release|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.Release|x86.ActiveCfg = Release|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
+ {43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|.NET.Build.0 = Checked|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|.NET.Build.0 = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|.NET.ActiveCfg = Release|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|.NET.Build.0 = Release|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.Release|x86.ActiveCfg = Release|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|.NET.ActiveCfg = z3apidebug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Any CPU.ActiveCfg = z3apidebug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Any CPU.Build.0 = z3apidebug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|x86.ActiveCfg = z3apidebug|Any CPU
+ {ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}.z3apidebug|x86.Build.0 = z3apidebug|Any CPU
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|.NET.ActiveCfg = Checked|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|.NET.Build.0 = Checked|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|Any CPU.ActiveCfg = Checked|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|Mixed Platforms.ActiveCfg = Checked|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|Mixed Platforms.Build.0 = Checked|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|x86.ActiveCfg = Checked|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Checked|x86.Build.0 = Checked|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|.NET.ActiveCfg = Debug|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|.NET.Build.0 = Debug|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|x86.ActiveCfg = Debug|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Debug|x86.Build.0 = Debug|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|.NET.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|Any CPU.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|Mixed Platforms.Build.0 = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|x86.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.Release|x86.Build.0 = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|.NET.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|Any CPU.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|Mixed Platforms.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|Mixed Platforms.Build.0 = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|x86.ActiveCfg = Release|x86
+ {A678C6EB-B329-46A9-BBFC-7585F01ACD7C}.z3apidebug|x86.Build.0 = Release|x86
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|.NET.Build.0 = Checked|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|.NET.Build.0 = Debug|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|.NET.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.Release|x86.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}.z3apidebug|x86.Build.0 = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|.NET.ActiveCfg = Checked|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|.NET.Build.0 = Checked|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Any CPU.ActiveCfg = Checked|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Any CPU.Build.0 = Checked|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Checked|x86.ActiveCfg = Checked|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|.NET.Build.0 = Debug|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|.NET.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.Release|x86.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}.z3apidebug|x86.Build.0 = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|.NET.Build.0 = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Mixed Platforms.ActiveCfg = Checked|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|Mixed Platforms.Build.0 = Checked|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Checked|x86.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|.NET.Build.0 = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|.NET.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.Release|x86.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {CF41E903-78EB-43BA-A355-E5FEB5ECECD4}.z3apidebug|x86.Build.0 = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|.NET.Build.0 = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Checked|x86.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|.NET.Build.0 = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|.NET.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.Release|x86.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Checked|.NET.Build.0 = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Checked|x86.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Debug|.NET.Build.0 = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Release|.NET.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Release|.NET.Build.0 = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Release|Any CPU.Build.0 = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.Release|x86.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {884386A3-58E9-40BB-A273-B24976775553}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|.NET.Build.0 = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Checked|x86.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|.NET.Build.0 = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|.NET.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.Release|x86.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {EAA5EB79-D475-4601-A59B-825C191CD25F}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|.NET.Build.0 = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Checked|x86.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|.NET.Build.0 = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|.NET.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|.NET.Build.0 = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.Release|x86.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {8A05D14E-F2BF-4890-BBE0-D76B18A50797}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|.NET.Build.0 = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Checked|x86.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|.NET.Build.0 = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|.NET.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|.NET.Build.0 = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.Release|x86.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {D07B8E38-E172-47F4-AD02-0373014A46D3}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Checked|x86.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|.NET.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.Release|x86.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Checked|x86.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|.NET.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.Release|x86.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {59118E35-4236-495E-AF6E-0D641302ED2C}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|.NET.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Any CPU.Build.0 = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|Mixed Platforms.Build.0 = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Checked|x86.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|.NET.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.Release|x86.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|.NET.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Any CPU.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Any CPU.Build.0 = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|Mixed Platforms.Build.0 = Release|Any CPU
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}.z3apidebug|x86.ActiveCfg = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {9B163AA3-36BC-4AFB-88AB-79BC9E97E401} = {B758C1E3-824A-439F-AA2F-0BA1143E8C8D}
+ {961B3BCA-2067-43B2-8E43-23C4293F21B9} = {0C77D814-EC94-45D7-9F9B-213C425D0F15}
+ {59118E35-4236-495E-AF6E-0D641302ED2C} = {0C77D814-EC94-45D7-9F9B-213C425D0F15}
+ {D00C3F22-1EDA-4781-8F0E-81991E9CB0D9} = {0C77D814-EC94-45D7-9F9B-213C425D0F15}
+ EndGlobalSection
+EndGlobal
diff --git a/Source/BoogieDriver/BoogieDriver.cs b/Source/BoogieDriver/BoogieDriver.cs
index fa038803..be88a745 100644
--- a/Source/BoogieDriver/BoogieDriver.cs
+++ b/Source/BoogieDriver/BoogieDriver.cs
@@ -1,106 +1,106 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// OnlyBoogie OnlyBoogie.ssc
-// - main program for taking a BPL program and verifying it
-//---------------------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie {
- using System;
- using System.IO;
- using System.Collections.Generic;
- using System.Diagnostics.Contracts;
-
- /*
- The following assemblies are referenced because they are needed at runtime, not at compile time:
- BaseTypes
- Provers.Z3
- System.Compiler.Framework
- */
-
- public class OnlyBoogie
- {
-
- public static int Main(string[] args)
- {
- Contract.Requires(cce.NonNullElements(args));
-
- ExecutionEngine.printer = new ConsolePrinter();
-
- CommandLineOptions.Install(new CommandLineOptions());
-
- CommandLineOptions.Clo.RunningBoogieFromCommandLine = true;
- if (!CommandLineOptions.Clo.Parse(args)) {
- goto END;
- }
- if (CommandLineOptions.Clo.Files.Count == 0) {
- ExecutionEngine.printer.ErrorWriteLine(Console.Out, "*** Error: No input files were specified.");
- goto END;
- }
- if (CommandLineOptions.Clo.XmlSink != null) {
- string errMsg = CommandLineOptions.Clo.XmlSink.Open();
- if (errMsg != null) {
- ExecutionEngine.printer.ErrorWriteLine(Console.Out, "*** Error: " + errMsg);
- goto END;
- }
- }
- if (!CommandLineOptions.Clo.DontShowLogo) {
- Console.WriteLine(CommandLineOptions.Clo.Version);
- }
- if (CommandLineOptions.Clo.ShowEnv == CommandLineOptions.ShowEnvironment.Always) {
- Console.WriteLine("---Command arguments");
- foreach (string arg in args) {
- Contract.Assert(arg != null);
- Console.WriteLine(arg);
- }
-
- Console.WriteLine("--------------------");
- }
-
- Helpers.ExtraTraceInformation("Becoming sentient");
-
- List<string> fileList = new List<string>();
- foreach (string file in CommandLineOptions.Clo.Files) {
- string extension = Path.GetExtension(file);
- if (extension != null) {
- extension = extension.ToLower();
- }
- if (extension == ".txt") {
- StreamReader stream = new StreamReader(file);
- string s = stream.ReadToEnd();
- fileList.AddRange(s.Split(new char[3] {' ', '\n', '\r'}, StringSplitOptions.RemoveEmptyEntries));
- }
- else {
- fileList.Add(file);
- }
- }
- foreach (string file in fileList) {
- Contract.Assert(file != null);
- string extension = Path.GetExtension(file);
- if (extension != null) {
- extension = extension.ToLower();
- }
- if (extension != ".bpl") {
- ExecutionEngine.printer.ErrorWriteLine(Console.Out, "*** Error: '{0}': Filename extension '{1}' is not supported. Input files must be BoogiePL programs (.bpl).", file,
- extension == null ? "" : extension);
- goto END;
- }
- }
- ExecutionEngine.ProcessFiles(fileList);
- return 0;
-
- END:
- if (CommandLineOptions.Clo.XmlSink != null) {
- CommandLineOptions.Clo.XmlSink.Close();
- }
- if (CommandLineOptions.Clo.Wait) {
- Console.WriteLine("Press Enter to exit.");
- Console.ReadLine();
- }
- return 1;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// OnlyBoogie OnlyBoogie.ssc
+// - main program for taking a BPL program and verifying it
+//---------------------------------------------------------------------------------------------
+
+namespace Microsoft.Boogie {
+ using System;
+ using System.IO;
+ using System.Collections.Generic;
+ using System.Diagnostics.Contracts;
+
+ /*
+ The following assemblies are referenced because they are needed at runtime, not at compile time:
+ BaseTypes
+ Provers.Z3
+ System.Compiler.Framework
+ */
+
+ public class OnlyBoogie
+ {
+
+ public static int Main(string[] args)
+ {
+ Contract.Requires(cce.NonNullElements(args));
+
+ ExecutionEngine.printer = new ConsolePrinter();
+
+ CommandLineOptions.Install(new CommandLineOptions());
+
+ CommandLineOptions.Clo.RunningBoogieFromCommandLine = true;
+ if (!CommandLineOptions.Clo.Parse(args)) {
+ goto END;
+ }
+ if (CommandLineOptions.Clo.Files.Count == 0) {
+ ExecutionEngine.printer.ErrorWriteLine(Console.Out, "*** Error: No input files were specified.");
+ goto END;
+ }
+ if (CommandLineOptions.Clo.XmlSink != null) {
+ string errMsg = CommandLineOptions.Clo.XmlSink.Open();
+ if (errMsg != null) {
+ ExecutionEngine.printer.ErrorWriteLine(Console.Out, "*** Error: " + errMsg);
+ goto END;
+ }
+ }
+ if (!CommandLineOptions.Clo.DontShowLogo) {
+ Console.WriteLine(CommandLineOptions.Clo.Version);
+ }
+ if (CommandLineOptions.Clo.ShowEnv == CommandLineOptions.ShowEnvironment.Always) {
+ Console.WriteLine("---Command arguments");
+ foreach (string arg in args) {
+ Contract.Assert(arg != null);
+ Console.WriteLine(arg);
+ }
+
+ Console.WriteLine("--------------------");
+ }
+
+ Helpers.ExtraTraceInformation("Becoming sentient");
+
+ List<string> fileList = new List<string>();
+ foreach (string file in CommandLineOptions.Clo.Files) {
+ string extension = Path.GetExtension(file);
+ if (extension != null) {
+ extension = extension.ToLower();
+ }
+ if (extension == ".txt") {
+ StreamReader stream = new StreamReader(file);
+ string s = stream.ReadToEnd();
+ fileList.AddRange(s.Split(new char[3] {' ', '\n', '\r'}, StringSplitOptions.RemoveEmptyEntries));
+ }
+ else {
+ fileList.Add(file);
+ }
+ }
+ foreach (string file in fileList) {
+ Contract.Assert(file != null);
+ string extension = Path.GetExtension(file);
+ if (extension != null) {
+ extension = extension.ToLower();
+ }
+ if (extension != ".bpl") {
+ ExecutionEngine.printer.ErrorWriteLine(Console.Out, "*** Error: '{0}': Filename extension '{1}' is not supported. Input files must be BoogiePL programs (.bpl).", file,
+ extension == null ? "" : extension);
+ goto END;
+ }
+ }
+ ExecutionEngine.ProcessFiles(fileList);
+ return 0;
+
+ END:
+ if (CommandLineOptions.Clo.XmlSink != null) {
+ CommandLineOptions.Clo.XmlSink.Close();
+ }
+ if (CommandLineOptions.Clo.Wait) {
+ Console.WriteLine("Press Enter to exit.");
+ Console.ReadLine();
+ }
+ return 1;
+ }
+ }
+}
diff --git a/Source/BoogieDriver/BoogieDriver.csproj b/Source/BoogieDriver/BoogieDriver.csproj
index 14d607f9..90e0be41 100644
--- a/Source/BoogieDriver/BoogieDriver.csproj
+++ b/Source/BoogieDriver/BoogieDriver.csproj
@@ -1,324 +1,324 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>BoogieDriver</RootNamespace>
- <AssemblyName>Boogie</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <TargetFrameworkProfile />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>..\Provers\Z3api\bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for BoogieDriver.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>..\..\Binaries\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\x86\Debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>..\..\Binaries\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
- <OutputPath>bin\x86\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <Optimize>true</Optimize>
- <DebugType>pdbonly</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>bin\Release\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'z3apidebug|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\x86\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>bin\z3apidebug\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for BoogieDriver.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\x86\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>x86</PlatformTarget>
- <CodeAnalysisLogFile>..\..\Binaries\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="BoogieDriver.cs" />
- <Compile Include="..\version.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\AbsInt\AbsInt.csproj">
- <Project>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</Project>
- <Name>AbsInt</Name>
- </ProjectReference>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\Doomed\Doomed.csproj">
- <Project>{884386A3-58E9-40BB-A273-B24976775553}</Project>
- <Name>Doomed</Name>
- </ProjectReference>
- <ProjectReference Include="..\ExecutionEngine\ExecutionEngine.csproj">
- <Project>{EAA5EB79-D475-4601-A59B-825C191CD25F}</Project>
- <Name>ExecutionEngine</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\Houdini\Houdini.csproj">
- <Project>{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}</Project>
- <Name>Houdini</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\Predication\Predication.csproj">
- <Project>{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}</Project>
- <Name>Predication</Name>
- </ProjectReference>
- <ProjectReference Include="..\Provers\SMTLib\SMTLib.csproj">
- <Project>{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}</Project>
- <Name>SMTLib</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCExpr\VCExpr.csproj">
- <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
- <Name>VCExpr</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{DAB6BAA4-7AF7-449F-96AB-F58F34D03A7A}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>BoogieDriver</RootNamespace>
+ <AssemblyName>Boogie</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <TargetFrameworkProfile />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>..\Provers\Z3api\bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for BoogieDriver.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>..\..\Binaries\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\Debug\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>..\..\Binaries\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <OutputPath>bin\x86\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <Optimize>true</Optimize>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Release\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'z3apidebug|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>bin\z3apidebug\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for BoogieDriver.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <CodeAnalysisLogFile>..\..\Binaries\Boogie.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="BoogieDriver.cs" />
+ <Compile Include="..\version.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\AbsInt\AbsInt.csproj">
+ <Project>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</Project>
+ <Name>AbsInt</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Doomed\Doomed.csproj">
+ <Project>{884386A3-58E9-40BB-A273-B24976775553}</Project>
+ <Name>Doomed</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ExecutionEngine\ExecutionEngine.csproj">
+ <Project>{EAA5EB79-D475-4601-A59B-825C191CD25F}</Project>
+ <Name>ExecutionEngine</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Houdini\Houdini.csproj">
+ <Project>{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}</Project>
+ <Name>Houdini</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Predication\Predication.csproj">
+ <Project>{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}</Project>
+ <Name>Predication</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Provers\SMTLib\SMTLib.csproj">
+ <Project>{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}</Project>
+ <Name>SMTLib</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCExpr\VCExpr.csproj">
+ <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
+ <Name>VCExpr</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/BoogieDriver/cce.cs b/Source/BoogieDriver/cce.cs
index 23d79815..42cabfcb 100644
--- a/Source/BoogieDriver/cce.cs
+++ b/Source/BoogieDriver/cce.cs
@@ -1,105 +1,105 @@
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-using Microsoft.Boogie;
-
- /// <summary>
- /// A class containing static methods to extend the functionality of Code Contracts
- /// </summary>
-
-public static class cce {
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && NonNullElements(collection.Keys) && NonNullElements(collection.Values);
- }
- [Pure]
- public static bool NonNullElements(VariableSeq collection) {
- return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- }
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
-
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
-}
-
-public class PeerAttribute : System.Attribute {
-}
-public class RepAttribute : System.Attribute {
-}
-public class CapturedAttribute : System.Attribute {
-}
-public class NotDelayedAttribute : System.Attribute {
-}
-public class NoDefaultContractAttribute : System.Attribute {
-}
-public class VerifyAttribute : System.Attribute {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : System.Attribute {
- }
-public class AdditiveAttribute : System.Attribute {
-}
-public class ReadsAttribute : System.Attribute {
- public enum Reads {
- Nothing,
- };
- public ReadsAttribute(object o) {
- }
-}
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+using Microsoft.Boogie;
+
+ /// <summary>
+ /// A class containing static methods to extend the functionality of Code Contracts
+ /// </summary>
+
+public static class cce {
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && NonNullElements(collection.Keys) && NonNullElements(collection.Values);
+ }
+ [Pure]
+ public static bool NonNullElements(VariableSeq collection) {
+ return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ }
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+}
+
+public class PeerAttribute : System.Attribute {
+}
+public class RepAttribute : System.Attribute {
+}
+public class CapturedAttribute : System.Attribute {
+}
+public class NotDelayedAttribute : System.Attribute {
+}
+public class NoDefaultContractAttribute : System.Attribute {
+}
+public class VerifyAttribute : System.Attribute {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : System.Attribute {
+ }
+public class AdditiveAttribute : System.Attribute {
+}
+public class ReadsAttribute : System.Attribute {
+ public enum Reads {
+ Nothing,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
diff --git a/Source/CodeContractsExtender/CodeContractsExtender.csproj b/Source/CodeContractsExtender/CodeContractsExtender.csproj
index c87ed8ab..38535dc4 100644
--- a/Source/CodeContractsExtender/CodeContractsExtender.csproj
+++ b/Source/CodeContractsExtender/CodeContractsExtender.csproj
@@ -1,202 +1,202 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.30729</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>CodeContractsExtender</RootNamespace>
- <AssemblyName>CodeContractsExtender</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for CodeContractsExtender.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\CodeContractsExtender.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Xml.Linq">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Data.DataSetExtensions">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="cce.cs" />
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>CodeContractsExtender</RootNamespace>
+ <AssemblyName>BoogieCodeContractsExtender</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for CodeContractsExtender.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\CodeContractsExtender.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Xml.Linq">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data.DataSetExtensions">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="cce.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Source/CodeContractsExtender/cce.cs b/Source/CodeContractsExtender/cce.cs
index 02b80458..0e6a0607 100644
--- a/Source/CodeContractsExtender/cce.cs
+++ b/Source/CodeContractsExtender/cce.cs
@@ -1,184 +1,184 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) where T : class {
- Contract.Requires(t != null);
- Contract.Ensures(Contract.Result<T>() != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) where T : class {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullDictionaryAndValues<TKey, TValue>(IDictionary<TKey, TValue> collection) where TValue : class {
- return collection != null && cce.NonNullElements(collection.Values);
- }
- //[Pure]
- //public static bool NonNullElements(List<Variable> collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) where T : class {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) where TKey : class where TValue : class {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) where T : class {
- return iEnumerator != null;
- }
- [Pure]
- public static bool NonNull<T>(HashSet<T> set) where T : class {
- return set != null && !set.Contains(null);
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
-
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) where T : class {
+ Contract.Requires(t != null);
+ Contract.Ensures(Contract.Result<T>() != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) where T : class {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullDictionaryAndValues<TKey, TValue>(IDictionary<TKey, TValue> collection) where TValue : class {
+ return collection != null && cce.NonNullElements(collection.Values);
+ }
+ //[Pure]
+ //public static bool NonNullElements(List<Variable> collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) where T : class {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) where TKey : class where TValue : class {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) where T : class {
+ return iEnumerator != null;
+ }
+ [Pure]
+ public static bool NonNull<T>(HashSet<T> set) where T : class {
+ return set != null && !set.Contains(null);
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/Concurrency/App.config b/Source/Concurrency/App.config
index 84bc4207..e95ce985 100644
--- a/Source/Concurrency/App.config
+++ b/Source/Concurrency/App.config
@@ -1,6 +1,6 @@
-<?xml version="1.0"?>
-<configuration>
- <startup>
- <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
- </startup>
-</configuration>
+<?xml version="1.0"?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
+ </startup>
+</configuration>
diff --git a/Source/Concurrency/OwickiGries.cs b/Source/Concurrency/CivlRefinement.cs
index dbd1dcbd..75ff2358 100644
--- a/Source/Concurrency/OwickiGries.cs
+++ b/Source/Concurrency/CivlRefinement.cs
@@ -1,1188 +1,1230 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Microsoft.Boogie;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.GraphUtil;
-
-namespace Microsoft.Boogie
-{
- public class MyDuplicator : Duplicator
- {
- MoverTypeChecker moverTypeChecker;
- public int layerNum;
- Procedure enclosingProc;
- Implementation enclosingImpl;
- public Dictionary<Procedure, Procedure> procMap; /* Original -> Duplicate */
- public Dictionary<Absy, Absy> absyMap; /* Duplicate -> Original */
- public Dictionary<Implementation, Implementation> implMap; /* Duplicate -> Original */
- public HashSet<Procedure> yieldingProcs;
- public List<Implementation> impls;
-
- public MyDuplicator(MoverTypeChecker moverTypeChecker, int layerNum)
- {
- this.moverTypeChecker = moverTypeChecker;
- this.layerNum = layerNum;
- this.enclosingProc = null;
- this.enclosingImpl = null;
- this.procMap = new Dictionary<Procedure, Procedure>();
- this.absyMap = new Dictionary<Absy, Absy>();
- this.implMap = new Dictionary<Implementation, Implementation>();
- this.yieldingProcs = new HashSet<Procedure>();
- this.impls = new List<Implementation>();
- }
-
- private void ProcessCallCmd(CallCmd originalCallCmd, CallCmd callCmd, List<Cmd> newCmds)
- {
- int enclosingProcLayerNum = moverTypeChecker.procToActionInfo[enclosingImpl.Proc].createdAtLayerNum;
- Procedure originalProc = originalCallCmd.Proc;
- if (moverTypeChecker.procToActionInfo.ContainsKey(originalProc))
- {
- AtomicActionInfo atomicActionInfo = moverTypeChecker.procToActionInfo[originalProc] as AtomicActionInfo;
- if (atomicActionInfo != null && atomicActionInfo.thisGate.Count > 0 && layerNum == enclosingProcLayerNum)
- {
- newCmds.Add(new HavocCmd(Token.NoToken, new List<IdentifierExpr>(new IdentifierExpr[] { Expr.Ident(dummyLocalVar) })));
- Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
- for (int i = 0; i < originalProc.InParams.Count; i++)
- {
- map[originalProc.InParams[i]] = callCmd.Ins[i];
- }
- Substitution subst = Substituter.SubstitutionFromHashtable(map);
- foreach (AssertCmd assertCmd in atomicActionInfo.thisGate)
- {
- newCmds.Add(Substituter.Apply(subst, assertCmd));
- }
- }
- }
- newCmds.Add(callCmd);
- }
-
- private void ProcessParCallCmd(ParCallCmd originalParCallCmd, ParCallCmd parCallCmd, List<Cmd> newCmds)
- {
- int maxCalleeLayerNum = 0;
- foreach (CallCmd iter in originalParCallCmd.CallCmds)
- {
- int calleeLayerNum = moverTypeChecker.procToActionInfo[iter.Proc].createdAtLayerNum;
- if (calleeLayerNum > maxCalleeLayerNum)
- maxCalleeLayerNum = calleeLayerNum;
- }
- if (layerNum > maxCalleeLayerNum)
- {
- for (int i = 0; i < parCallCmd.CallCmds.Count; i++)
- {
- ProcessCallCmd(originalParCallCmd.CallCmds[i], parCallCmd.CallCmds[i], newCmds);
- absyMap[parCallCmd.CallCmds[i]] = originalParCallCmd;
- }
- }
- else
- {
- newCmds.Add(parCallCmd);
- }
- }
-
- public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq)
- {
- List<Cmd> cmds = base.VisitCmdSeq(cmdSeq);
- List<Cmd> newCmds = new List<Cmd>();
- for (int i = 0; i < cmds.Count; i++)
- {
- Cmd originalCmd = cmdSeq[i];
- Cmd cmd = cmds[i];
-
- CallCmd originalCallCmd = originalCmd as CallCmd;
- if (originalCallCmd != null)
- {
- ProcessCallCmd(originalCallCmd, cmd as CallCmd, newCmds);
- continue;
- }
-
- ParCallCmd originalParCallCmd = originalCmd as ParCallCmd;
- if (originalParCallCmd != null)
- {
- ProcessParCallCmd(originalParCallCmd, cmd as ParCallCmd, newCmds);
- continue;
- }
-
- newCmds.Add(cmd);
- }
- return newCmds;
- }
-
- public override YieldCmd VisitYieldCmd(YieldCmd node)
- {
- YieldCmd yieldCmd = base.VisitYieldCmd(node);
- absyMap[yieldCmd] = node;
- return yieldCmd;
- }
-
- public override Block VisitBlock(Block node)
- {
- Block block = base.VisitBlock(node);
- absyMap[block] = node;
- return block;
- }
-
- public override Cmd VisitCallCmd(CallCmd node)
- {
- CallCmd callCmd = (CallCmd) base.VisitCallCmd(node);
- callCmd.Proc = VisitProcedure(callCmd.Proc);
- callCmd.callee = callCmd.Proc.Name;
- absyMap[callCmd] = node;
- return callCmd;
- }
-
- public override Cmd VisitParCallCmd(ParCallCmd node)
- {
- ParCallCmd parCallCmd = (ParCallCmd) base.VisitParCallCmd(node);
- absyMap[parCallCmd] = node;
- return parCallCmd;
- }
-
- public override Procedure VisitProcedure(Procedure node)
- {
- if (!moverTypeChecker.procToActionInfo.ContainsKey(node))
- return node;
- if (!procMap.ContainsKey(node))
- {
- enclosingProc = node;
- Procedure proc = (Procedure)node.Clone();
- proc.Name = string.Format("{0}_{1}", node.Name, layerNum);
- proc.InParams = this.VisitVariableSeq(node.InParams);
- proc.Modifies = this.VisitIdentifierExprSeq(node.Modifies);
- proc.OutParams = this.VisitVariableSeq(node.OutParams);
-
- ActionInfo actionInfo = moverTypeChecker.procToActionInfo[node];
- if (actionInfo.createdAtLayerNum < layerNum)
- {
- proc.Requires = new List<Requires>();
- proc.Ensures = new List<Ensures>();
- Implementation impl;
- AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
- if (atomicActionInfo != null)
- {
- CodeExpr action = (CodeExpr)VisitCodeExpr(atomicActionInfo.thisAction);
- List<Cmd> cmds = new List<Cmd>();
- foreach (AssertCmd assertCmd in atomicActionInfo.thisGate)
- {
- cmds.Add(new AssumeCmd(Token.NoToken, (Expr)Visit(assertCmd.Expr)));
- }
- Block newInitBlock = new Block(Token.NoToken, "_init", cmds,
- new GotoCmd(Token.NoToken, new List<string>(new string[] { action.Blocks[0].Label }),
- new List<Block>(new Block[] { action.Blocks[0] })));
- List<Block> newBlocks = new List<Block>();
- newBlocks.Add(newInitBlock);
- newBlocks.AddRange(action.Blocks);
- impl = new Implementation(Token.NoToken, proc.Name, node.TypeParameters, node.InParams, node.OutParams, action.LocVars, newBlocks);
- }
- else
- {
- Block newInitBlock = new Block(Token.NoToken, "_init", new List<Cmd>(), new ReturnCmd(Token.NoToken));
- List<Block> newBlocks = new List<Block>();
- newBlocks.Add(newInitBlock);
- impl = new Implementation(Token.NoToken, proc.Name, node.TypeParameters, node.InParams, node.OutParams, new List<Variable>(), newBlocks);
- }
- impl.Proc = proc;
- impl.Proc.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
- impl.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
- impls.Add(impl);
- }
- else
- {
- yieldingProcs.Add(proc);
- proc.Requires = this.VisitRequiresSeq(node.Requires);
- proc.Ensures = this.VisitEnsuresSeq(node.Ensures);
- }
- procMap[node] = proc;
- proc.Modifies = new List<IdentifierExpr>();
- moverTypeChecker.SharedVariables.Iter(x => proc.Modifies.Add(Expr.Ident(x)));
- }
- return procMap[node];
- }
-
- private Variable dummyLocalVar;
- public override Implementation VisitImplementation(Implementation node)
- {
- enclosingImpl = node;
- dummyLocalVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "og_dummy", Type.Bool));
- Implementation impl = base.VisitImplementation(node);
- implMap[impl] = node;
- impl.LocVars.Add(dummyLocalVar);
- impl.Name = impl.Proc.Name;
- return impl;
- }
-
- public override Requires VisitRequires(Requires node)
- {
- Requires requires = base.VisitRequires(node);
- if (node.Free)
- return requires;
- if (!moverTypeChecker.absyToLayerNums[node].Contains(layerNum))
- requires.Condition = Expr.True;
- return requires;
- }
-
- public override Ensures VisitEnsures(Ensures node)
- {
- Ensures ensures = base.VisitEnsures(node);
- if (node.Free)
- return ensures;
- AtomicActionInfo atomicActionInfo = moverTypeChecker.procToActionInfo[enclosingProc] as AtomicActionInfo;
- bool isAtomicSpecification = atomicActionInfo != null && atomicActionInfo.ensures == node;
- if (isAtomicSpecification || !moverTypeChecker.absyToLayerNums[node].Contains(layerNum))
- {
- ensures.Condition = Expr.True;
- ensures.Attributes = OwickiGries.RemoveMoverAttribute(ensures.Attributes);
- }
- return ensures;
- }
-
- public override Cmd VisitAssertCmd(AssertCmd node)
- {
- AssertCmd assertCmd = (AssertCmd) base.VisitAssertCmd(node);
- if (!moverTypeChecker.absyToLayerNums[node].Contains(layerNum))
- assertCmd.Expr = Expr.True;
- return assertCmd;
- }
- }
-
- public class OwickiGries
- {
- LinearTypeChecker linearTypeChecker;
- MoverTypeChecker moverTypeChecker;
- Dictionary<Absy, Absy> absyMap;
- Dictionary<Implementation, Implementation> implMap;
- HashSet<Procedure> yieldingProcs;
- int layerNum;
- List<IdentifierExpr> globalMods;
- Dictionary<string, Procedure> asyncAndParallelCallDesugarings;
- List<Procedure> yieldCheckerProcs;
- List<Implementation> yieldCheckerImpls;
- Procedure yieldProc;
-
- Variable pc;
- Variable ok;
- Expr alpha;
- Expr beta;
- HashSet<Variable> frame;
-
- public OwickiGries(LinearTypeChecker linearTypeChecker, MoverTypeChecker moverTypeChecker, MyDuplicator duplicator)
- {
- this.linearTypeChecker = linearTypeChecker;
- this.moverTypeChecker = moverTypeChecker;
- this.absyMap = duplicator.absyMap;
- this.layerNum = duplicator.layerNum;
- this.implMap = duplicator.implMap;
- this.yieldingProcs = duplicator.yieldingProcs;
- Program program = linearTypeChecker.program;
- globalMods = new List<IdentifierExpr>();
- foreach (Variable g in moverTypeChecker.SharedVariables)
- {
- globalMods.Add(Expr.Ident(g));
- }
- asyncAndParallelCallDesugarings = new Dictionary<string, Procedure>();
- yieldCheckerProcs = new List<Procedure>();
- yieldCheckerImpls = new List<Implementation>();
- yieldProc = null;
- }
-
- private IEnumerable<Variable> AvailableLinearVars(Absy absy)
- {
- return linearTypeChecker.AvailableLinearVars(absyMap[absy]);
- }
-
- private CallCmd CallToYieldProc(IToken tok, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar)
- {
- List<Expr> exprSeq = new List<Expr>();
- foreach (string domainName in linearTypeChecker.linearDomains.Keys)
- {
- exprSeq.Add(Expr.Ident(domainNameToLocalVar[domainName]));
- }
- foreach (IdentifierExpr ie in globalMods)
- {
- exprSeq.Add(Expr.Ident(ogOldGlobalMap[ie.Decl]));
- }
- if (yieldProc == null)
- {
- List<Variable> inputs = new List<Variable>();
- foreach (string domainName in linearTypeChecker.linearDomains.Keys)
- {
- var domain = linearTypeChecker.linearDomains[domainName];
- Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "linear_" + domainName + "_in", new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Type.Bool)), true);
- inputs.Add(f);
- }
- foreach (IdentifierExpr ie in globalMods)
- {
- Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", ie.Decl.Name), ie.Decl.TypedIdent.Type), true);
- inputs.Add(f);
- }
- yieldProc = new Procedure(Token.NoToken, string.Format("og_yield_{0}", layerNum), new List<TypeVariable>(), inputs, new List<Variable>(), new List<Requires>(), new List<IdentifierExpr>(), new List<Ensures>());
- yieldProc.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
- }
- CallCmd yieldCallCmd = new CallCmd(Token.NoToken, yieldProc.Name, exprSeq, new List<IdentifierExpr>());
- yieldCallCmd.Proc = yieldProc;
- return yieldCallCmd;
- }
-
- private void AddCallToYieldProc(IToken tok, List<Cmd> newCmds, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar)
- {
- if (!CommandLineOptions.Clo.TrustNonInterference)
- {
- CallCmd yieldCallCmd = CallToYieldProc(tok, ogOldGlobalMap, domainNameToLocalVar);
- newCmds.Add(yieldCallCmd);
- }
-
- if (pc != null)
- {
- Expr aa = OldEqualityExprForGlobals(ogOldGlobalMap);
- Expr bb = OldEqualityExpr(ogOldGlobalMap);
-
- // assert pc || g_old == g || beta(i, g_old, o, g);
- Expr assertExpr = Expr.Or(Expr.Ident(pc), Expr.Or(aa, beta));
- assertExpr.Typecheck(new TypecheckingContext(null));
- AssertCmd skipOrBetaAssertCmd = new AssertCmd(tok, assertExpr);
- skipOrBetaAssertCmd.ErrorData = "Transition invariant in initial state violated";
- newCmds.Add(skipOrBetaAssertCmd);
-
- // assert pc ==> o_old == o && g_old == g;
- assertExpr = Expr.Imp(Expr.Ident(pc), bb);
- assertExpr.Typecheck(new TypecheckingContext(null));
- AssertCmd skipAssertCmd = new AssertCmd(tok, assertExpr);
- skipAssertCmd.ErrorData = "Transition invariant in final state violated"; ;
- newCmds.Add(skipAssertCmd);
-
- // pc, ok := g_old == g ==> pc, ok || beta(i, g_old, o, g);
- List<AssignLhs> pcUpdateLHS = new List<AssignLhs>(
- new AssignLhs[] {
- new SimpleAssignLhs(Token.NoToken, Expr.Ident(pc)),
- new SimpleAssignLhs(Token.NoToken, Expr.Ident(ok))
- });
- List<Expr> pcUpdateRHS = new List<Expr>(
- new Expr[] {
- Expr.Imp(aa, Expr.Ident(pc)),
- Expr.Or(Expr.Ident(ok), beta)
- });
- foreach (Expr e in pcUpdateRHS)
- {
- e.Typecheck(new TypecheckingContext(null));
- }
- newCmds.Add(new AssignCmd(Token.NoToken, pcUpdateLHS, pcUpdateRHS));
- }
- }
-
- private Dictionary<string, Expr> ComputeAvailableExprs(IEnumerable<Variable> availableLinearVars, Dictionary<string, Variable> domainNameToInputVar)
- {
- Dictionary<string, Expr> domainNameToExpr = new Dictionary<string, Expr>();
- foreach (var domainName in linearTypeChecker.linearDomains.Keys)
- {
- var expr = Expr.Ident(domainNameToInputVar[domainName]);
- expr.Resolve(new ResolutionContext(null));
- expr.Typecheck(new TypecheckingContext(null));
- domainNameToExpr[domainName] = expr;
- }
- foreach (Variable v in availableLinearVars)
- {
- var domainName = linearTypeChecker.FindDomainName(v);
- if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
- var domain = linearTypeChecker.linearDomains[domainName];
- if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
- Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
- var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapOrBool), new List<Expr> { ie, domainNameToExpr[domainName] });
- expr.Resolve(new ResolutionContext(null));
- expr.Typecheck(new TypecheckingContext(null));
- domainNameToExpr[domainName] = expr;
- }
- return domainNameToExpr;
- }
-
- private void AddUpdatesToOldGlobalVars(List<Cmd> newCmds, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<string, Expr> domainNameToExpr)
- {
- List<AssignLhs> lhss = new List<AssignLhs>();
- List<Expr> rhss = new List<Expr>();
- foreach (var domainName in linearTypeChecker.linearDomains.Keys)
- {
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(domainNameToLocalVar[domainName])));
- rhss.Add(domainNameToExpr[domainName]);
- }
- foreach (Variable g in ogOldGlobalMap.Keys)
- {
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(ogOldGlobalMap[g])));
- rhss.Add(Expr.Ident(g));
- }
- if (lhss.Count > 0)
- {
- newCmds.Add(new AssignCmd(Token.NoToken, lhss, rhss));
- }
- }
-
- private Expr OldEqualityExpr(Dictionary<Variable, Variable> ogOldGlobalMap)
- {
- Expr bb = Expr.True;
- foreach (Variable o in ogOldGlobalMap.Keys)
- {
- if (o is GlobalVariable && !frame.Contains(o)) continue;
- bb = Expr.And(bb, Expr.Eq(Expr.Ident(o), Expr.Ident(ogOldGlobalMap[o])));
- bb.Type = Type.Bool;
- }
- return bb;
- }
-
- private Expr OldEqualityExprForGlobals(Dictionary<Variable, Variable> ogOldGlobalMap)
- {
- Expr bb = Expr.True;
- foreach (Variable o in ogOldGlobalMap.Keys)
- {
- if (o is GlobalVariable && frame.Contains(o))
- {
- bb = Expr.And(bb, Expr.Eq(Expr.Ident(o), Expr.Ident(ogOldGlobalMap[o])));
- bb.Type = Type.Bool;
- }
- }
- return bb;
- }
-
- private void DesugarYield(YieldCmd yieldCmd, List<Cmd> cmds, List<Cmd> newCmds, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar)
- {
- AddCallToYieldProc(yieldCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
-
- if (globalMods.Count > 0)
- {
- newCmds.Add(new HavocCmd(Token.NoToken, globalMods));
- if (pc != null)
- {
- // assume pc || alpha(i, g);
- Expr assumeExpr = Expr.Or(Expr.Ident(pc), alpha);
- assumeExpr.Type = Type.Bool;
- newCmds.Add(new AssumeCmd(Token.NoToken, assumeExpr));
- }
- }
-
- Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(AvailableLinearVars(yieldCmd), domainNameToInputVar);
- AddUpdatesToOldGlobalVars(newCmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
-
- for (int j = 0; j < cmds.Count; j++)
- {
- PredicateCmd predCmd = (PredicateCmd)cmds[j];
- newCmds.Add(new AssumeCmd(Token.NoToken, predCmd.Expr));
- }
- }
-
- public void DesugarParallelCallCmd(List<Cmd> newCmds, ParCallCmd parCallCmd)
- {
- List<string> parallelCalleeNames = new List<string>();
- List<Expr> ins = new List<Expr>();
- List<IdentifierExpr> outs = new List<IdentifierExpr>();
- string procName = "og";
- foreach (CallCmd callCmd in parCallCmd.CallCmds)
- {
- procName = procName + "_" + callCmd.Proc.Name;
- ins.AddRange(callCmd.Ins);
- outs.AddRange(callCmd.Outs);
- }
- Procedure proc;
- if (asyncAndParallelCallDesugarings.ContainsKey(procName))
- {
- proc = asyncAndParallelCallDesugarings[procName];
- }
- else
- {
- List<Variable> inParams = new List<Variable>();
- List<Variable> outParams = new List<Variable>();
- List<Requires> requiresSeq = new List<Requires>();
- List<Ensures> ensuresSeq = new List<Ensures>();
- int count = 0;
- foreach (CallCmd callCmd in parCallCmd.CallCmds)
- {
- Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
- foreach (Variable x in callCmd.Proc.InParams)
- {
- Variable y = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_{0}_{1}", count, x.Name), x.TypedIdent.Type), true);
- inParams.Add(y);
- map[x] = Expr.Ident(y);
- }
- foreach (Variable x in callCmd.Proc.OutParams)
- {
- Variable y = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_{0}_{1}", count, x.Name), x.TypedIdent.Type), false);
- outParams.Add(y);
- map[x] = Expr.Ident(y);
- }
- Contract.Assume(callCmd.Proc.TypeParameters.Count == 0);
- Substitution subst = Substituter.SubstitutionFromHashtable(map);
- foreach (Requires req in callCmd.Proc.Requires)
- {
- requiresSeq.Add(new Requires(req.tok, req.Free, Substituter.Apply(subst, req.Condition), null, req.Attributes));
- }
- foreach (Ensures ens in callCmd.Proc.Ensures)
- {
- ensuresSeq.Add(new Ensures(ens.tok, ens.Free, Substituter.Apply(subst, ens.Condition), null, ens.Attributes));
- }
- count++;
- }
- proc = new Procedure(Token.NoToken, procName, new List<TypeVariable>(), inParams, outParams, requiresSeq, globalMods, ensuresSeq);
- asyncAndParallelCallDesugarings[procName] = proc;
- }
- CallCmd dummyCallCmd = new CallCmd(parCallCmd.tok, proc.Name, ins, outs, parCallCmd.Attributes);
- dummyCallCmd.Proc = proc;
- newCmds.Add(dummyCallCmd);
- }
-
- private void CreateYieldCheckerImpl(Implementation impl, List<List<Cmd>> yields)
- {
- if (yields.Count == 0) return;
-
- Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
- foreach (Variable local in impl.LocVars)
- {
- var copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, local.Name, local.TypedIdent.Type));
- map[local] = Expr.Ident(copy);
- }
-
- Program program = linearTypeChecker.program;
- List<Variable> locals = new List<Variable>();
- List<Variable> inputs = new List<Variable>();
- foreach (IdentifierExpr ie in map.Values)
- {
- locals.Add(ie.Decl);
- }
- for (int i = 0; i < impl.InParams.Count - linearTypeChecker.linearDomains.Count; i++)
- {
- Variable inParam = impl.InParams[i];
- Variable copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, inParam.Name, inParam.TypedIdent.Type));
- locals.Add(copy);
- map[impl.InParams[i]] = Expr.Ident(copy);
- }
- {
- int i = impl.InParams.Count - linearTypeChecker.linearDomains.Count;
- foreach (string domainName in linearTypeChecker.linearDomains.Keys)
- {
- Variable inParam = impl.InParams[i];
- Variable copy = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, inParam.Name, inParam.TypedIdent.Type), true);
- inputs.Add(copy);
- map[impl.InParams[i]] = Expr.Ident(copy);
- i++;
- }
- }
- for (int i = 0; i < impl.OutParams.Count; i++)
- {
- Variable outParam = impl.OutParams[i];
- var copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, outParam.Name, outParam.TypedIdent.Type));
- locals.Add(copy);
- map[impl.OutParams[i]] = Expr.Ident(copy);
- }
- Dictionary<Variable, Expr> ogOldLocalMap = new Dictionary<Variable, Expr>();
- Dictionary<Variable, Expr> assumeMap = new Dictionary<Variable, Expr>(map);
- foreach (IdentifierExpr ie in globalMods)
- {
- Variable g = ie.Decl;
- var copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_local_old_{0}", g.Name), g.TypedIdent.Type));
- locals.Add(copy);
- ogOldLocalMap[g] = Expr.Ident(copy);
- Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", g.Name), g.TypedIdent.Type), true);
- inputs.Add(f);
- assumeMap[g] = Expr.Ident(f);
- }
-
- Substitution assumeSubst = Substituter.SubstitutionFromHashtable(assumeMap);
- Substitution oldSubst = Substituter.SubstitutionFromHashtable(ogOldLocalMap);
- Substitution subst = Substituter.SubstitutionFromHashtable(map);
- List<Block> yieldCheckerBlocks = new List<Block>();
- List<String> labels = new List<String>();
- List<Block> labelTargets = new List<Block>();
- Block yieldCheckerBlock = new Block(Token.NoToken, "exit", new List<Cmd>(), new ReturnCmd(Token.NoToken));
- labels.Add(yieldCheckerBlock.Label);
- labelTargets.Add(yieldCheckerBlock);
- yieldCheckerBlocks.Add(yieldCheckerBlock);
- int yieldCount = 0;
- foreach (List<Cmd> cs in yields)
- {
- List<Cmd> newCmds = new List<Cmd>();
- foreach (Cmd cmd in cs)
- {
- PredicateCmd predCmd = (PredicateCmd)cmd;
- newCmds.Add(new AssumeCmd(Token.NoToken, Substituter.ApplyReplacingOldExprs(assumeSubst, oldSubst, predCmd.Expr)));
- }
- foreach (Cmd cmd in cs)
- {
- PredicateCmd predCmd = (PredicateCmd)cmd;
- var newExpr = Substituter.ApplyReplacingOldExprs(subst, oldSubst, predCmd.Expr);
- if (predCmd is AssertCmd)
- {
- AssertCmd assertCmd = new AssertCmd(predCmd.tok, newExpr, predCmd.Attributes);
- assertCmd.ErrorData = "Non-interference check failed";
- newCmds.Add(assertCmd);
- }
- else
- {
- newCmds.Add(new AssumeCmd(Token.NoToken, newExpr));
- }
- }
- newCmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
- yieldCheckerBlock = new Block(Token.NoToken, "L" + yieldCount++, newCmds, new ReturnCmd(Token.NoToken));
- labels.Add(yieldCheckerBlock.Label);
- labelTargets.Add(yieldCheckerBlock);
- yieldCheckerBlocks.Add(yieldCheckerBlock);
- }
- yieldCheckerBlocks.Insert(0, new Block(Token.NoToken, "enter", new List<Cmd>(), new GotoCmd(Token.NoToken, labels, labelTargets)));
-
- // Create the yield checker procedure
- var yieldCheckerName = string.Format("{0}_YieldChecker_{1}", "Impl", impl.Name);
- var yieldCheckerProc = new Procedure(Token.NoToken, yieldCheckerName, impl.TypeParameters, inputs, new List<Variable>(), new List<Requires>(), new List<IdentifierExpr>(), new List<Ensures>());
- yieldCheckerProc.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
- yieldCheckerProcs.Add(yieldCheckerProc);
-
- // Create the yield checker implementation
- var yieldCheckerImpl = new Implementation(Token.NoToken, yieldCheckerName, impl.TypeParameters, inputs, new List<Variable>(), locals, yieldCheckerBlocks);
- yieldCheckerImpl.Proc = yieldCheckerProc;
- yieldCheckerImpl.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
- yieldCheckerImpls.Add(yieldCheckerImpl);
- }
-
- private bool IsYieldingHeader(Graph<Block> graph, Block header)
- {
- foreach (Block backEdgeNode in graph.BackEdgeNodes(header))
- {
- foreach (Block x in graph.NaturalLoops(header, backEdgeNode))
- {
- foreach (Cmd cmd in x.Cmds)
- {
- if (cmd is YieldCmd)
- return true;
- if (cmd is ParCallCmd)
- return true;
- CallCmd callCmd = cmd as CallCmd;
- if (callCmd == null) continue;
- if (yieldingProcs.Contains(callCmd.Proc))
- return true;
- }
- }
- }
- return false;
- }
-
- private Graph<Block> ComputeYieldingLoopHeaders(Implementation impl, out HashSet<Block> yieldingHeaders)
- {
- Graph<Block> graph;
- impl.PruneUnreachableBlocks();
- impl.ComputePredecessorsForBlocks();
- graph = Program.GraphFromImpl(impl);
- graph.ComputeLoops();
- if (!graph.Reducible)
- {
- throw new Exception("Irreducible flow graphs are unsupported.");
- }
- yieldingHeaders = new HashSet<Block>();
- IEnumerable<Block> sortedHeaders = graph.SortHeadersByDominance();
- foreach (Block header in sortedHeaders)
- {
- if (yieldingHeaders.Any(x => graph.DominatorMap.DominatedBy(x, header)))
- {
- yieldingHeaders.Add(header);
- }
- else if (IsYieldingHeader(graph, header))
- {
- yieldingHeaders.Add(header);
- }
- else
- {
- continue;
- }
- }
- return graph;
- }
-
- private void SetupRefinementCheck(Implementation impl,
- out List<Variable> newLocalVars,
- out Dictionary<string, Variable> domainNameToInputVar, out Dictionary<string, Variable> domainNameToLocalVar, out Dictionary<Variable, Variable> ogOldGlobalMap)
- {
- pc = null;
- ok = null;
- alpha = null;
- beta = null;
- frame = null;
-
- newLocalVars = new List<Variable>();
- Program program = linearTypeChecker.program;
- ogOldGlobalMap = new Dictionary<Variable, Variable>();
- foreach (IdentifierExpr ie in globalMods)
- {
- Variable g = ie.Decl;
- LocalVariable l = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", g.Name), g.TypedIdent.Type));
- ogOldGlobalMap[g] = l;
- newLocalVars.Add(l);
- }
-
- Procedure originalProc = implMap[impl].Proc;
- ActionInfo actionInfo = moverTypeChecker.procToActionInfo[originalProc];
- if (actionInfo.createdAtLayerNum == this.layerNum)
- {
- pc = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "og_pc", Type.Bool));
- newLocalVars.Add(pc);
- ok = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "og_ok", Type.Bool));
- newLocalVars.Add(ok);
- Dictionary<Variable, Expr> alwaysMap = new Dictionary<Variable, Expr>();
- for (int i = 0; i < originalProc.InParams.Count; i++)
- {
- alwaysMap[originalProc.InParams[i]] = Expr.Ident(impl.InParams[i]);
- }
- for (int i = 0; i < originalProc.OutParams.Count; i++)
- {
- alwaysMap[originalProc.OutParams[i]] = Expr.Ident(impl.OutParams[i]);
- }
- Substitution always = Substituter.SubstitutionFromHashtable(alwaysMap);
- Dictionary<Variable, Expr> foroldMap = new Dictionary<Variable, Expr>();
- foreach (IdentifierExpr ie in globalMods)
- {
- foroldMap[ie.Decl] = Expr.Ident(ogOldGlobalMap[ie.Decl]);
- }
- Substitution forold = Substituter.SubstitutionFromHashtable(foroldMap);
- frame = new HashSet<Variable>(moverTypeChecker.SharedVariables);
- HashSet<Variable> introducedVars = new HashSet<Variable>();
- foreach (Variable v in moverTypeChecker.SharedVariables)
- {
- if (moverTypeChecker.globalVarToSharedVarInfo[v].hideLayerNum <= actionInfo.createdAtLayerNum ||
- moverTypeChecker.globalVarToSharedVarInfo[v].introLayerNum > actionInfo.createdAtLayerNum)
- {
- frame.Remove(v);
- }
- if (moverTypeChecker.globalVarToSharedVarInfo[v].introLayerNum == actionInfo.createdAtLayerNum)
- {
- introducedVars.Add(v);
- }
- }
- AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
- if (atomicActionInfo == null)
- {
- beta = Expr.True;
- foreach (var v in frame)
- {
- beta = Expr.And(beta, Expr.Eq(Expr.Ident(v), foroldMap[v]));
- }
- alpha = Expr.True;
- }
- else
- {
- Expr betaExpr = (new MoverCheck.TransitionRelationComputation(moverTypeChecker.program, atomicActionInfo, frame, introducedVars)).TransitionRelationCompute();
- beta = Substituter.ApplyReplacingOldExprs(always, forold, betaExpr);
- Expr alphaExpr = Expr.True;
- foreach (AssertCmd assertCmd in atomicActionInfo.thisGate)
- {
- alphaExpr = Expr.And(alphaExpr, assertCmd.Expr);
- alphaExpr.Type = Type.Bool;
- }
- alpha = Substituter.Apply(always, alphaExpr);
- }
- foreach (Variable f in impl.OutParams)
- {
- LocalVariable copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_old_{0}", f.Name), f.TypedIdent.Type));
- newLocalVars.Add(copy);
- ogOldGlobalMap[f] = copy;
- }
- }
-
- domainNameToInputVar = new Dictionary<string, Variable>();
- domainNameToLocalVar = new Dictionary<string, Variable>();
- {
- int i = impl.InParams.Count - linearTypeChecker.linearDomains.Count;
- foreach (string domainName in linearTypeChecker.linearDomains.Keys)
- {
- Variable inParam = impl.InParams[i];
- domainNameToInputVar[domainName] = inParam;
- Variable l = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, inParam.Name + "_local", inParam.TypedIdent.Type));
- domainNameToLocalVar[domainName] = l;
- newLocalVars.Add(l);
- i++;
- }
- }
- }
-
- private void TransformImpl(Implementation impl)
- {
- HashSet<Block> yieldingHeaders;
- Graph<Block> graph = ComputeYieldingLoopHeaders(impl, out yieldingHeaders);
-
- List<Variable> newLocalVars;
- Dictionary<string, Variable> domainNameToInputVar, domainNameToLocalVar;
- Dictionary<Variable, Variable> ogOldGlobalMap;
- SetupRefinementCheck(impl, out newLocalVars, out domainNameToInputVar, out domainNameToLocalVar, out ogOldGlobalMap);
-
- List<List<Cmd>> yields = CollectAndDesugarYields(impl, domainNameToInputVar, domainNameToLocalVar, ogOldGlobalMap);
-
- List<Variable> oldPcs, oldOks;
- ProcessLoopHeaders(impl, graph, yieldingHeaders, domainNameToInputVar, domainNameToLocalVar, ogOldGlobalMap, out oldPcs, out oldOks);
-
- AddInitialBlock(impl, oldPcs, oldOks, domainNameToInputVar, domainNameToLocalVar, ogOldGlobalMap);
-
- CreateYieldCheckerImpl(impl, yields);
-
- impl.LocVars.AddRange(newLocalVars);
- impl.LocVars.AddRange(oldPcs);
- impl.LocVars.AddRange(oldOks);
-
- UnifyCallsToYieldProc(impl, ogOldGlobalMap, domainNameToLocalVar);
- }
-
- private void UnifyCallsToYieldProc(Implementation impl, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar)
- {
- CallCmd yieldCallCmd = CallToYieldProc(Token.NoToken, ogOldGlobalMap, domainNameToLocalVar);
- Block yieldCheckBlock = new Block(Token.NoToken, "CallToYieldProc", new List<Cmd>(new Cmd[] { yieldCallCmd, new AssumeCmd(Token.NoToken, Expr.False) }), new ReturnCmd(Token.NoToken));
- List<Block> newBlocks = new List<Block>();
- foreach (Block b in impl.Blocks)
- {
- TransferCmd transferCmd = b.TransferCmd;
- List<Cmd> newCmds = new List<Cmd>();
- for (int i = b.Cmds.Count-1; i >= 0; i--)
- {
- CallCmd callCmd = b.Cmds[i] as CallCmd;
- if (callCmd == null || callCmd.Proc != yieldProc)
- {
- newCmds.Insert(0, b.Cmds[i]);
- }
- else
- {
- Block newBlock = new Block(Token.NoToken, b.Label + i, newCmds, transferCmd);
- newCmds = new List<Cmd>();
- transferCmd = new GotoCmd(Token.NoToken, new List<string>(new string[] { newBlock.Label, yieldCheckBlock.Label }),
- new List<Block>(new Block[] { newBlock, yieldCheckBlock }));
- newBlocks.Add(newBlock);
- }
- }
- b.Cmds = newCmds;
- b.TransferCmd = transferCmd;
- }
- impl.Blocks.AddRange(newBlocks);
- impl.Blocks.Add(yieldCheckBlock);
- }
-
- private List<List<Cmd>> CollectAndDesugarYields(Implementation impl,
- Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<Variable, Variable> ogOldGlobalMap)
- {
- // Collect the yield predicates and desugar yields
- List<List<Cmd>> yields = new List<List<Cmd>>();
- List<Cmd> cmds = new List<Cmd>();
- foreach (Block b in impl.Blocks)
- {
- YieldCmd yieldCmd = null;
- List<Cmd> newCmds = new List<Cmd>();
- for (int i = 0; i < b.Cmds.Count; i++)
- {
- Cmd cmd = b.Cmds[i];
- if (cmd is YieldCmd)
- {
- yieldCmd = (YieldCmd)cmd;
- continue;
- }
- if (yieldCmd != null)
- {
- PredicateCmd pcmd = cmd as PredicateCmd;
- if (pcmd == null)
- {
- DesugarYield(yieldCmd, cmds, newCmds, ogOldGlobalMap, domainNameToInputVar, domainNameToLocalVar);
- if (cmds.Count > 0)
- {
- yields.Add(cmds);
- cmds = new List<Cmd>();
- }
- yieldCmd = null;
- }
- else
- {
- cmds.Add(pcmd);
- }
- }
-
- if (cmd is CallCmd)
- {
- CallCmd callCmd = cmd as CallCmd;
- if (yieldingProcs.Contains(callCmd.Proc))
- {
- AddCallToYieldProc(callCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
- }
- if (callCmd.IsAsync)
- {
- if (!asyncAndParallelCallDesugarings.ContainsKey(callCmd.Proc.Name))
- {
- asyncAndParallelCallDesugarings[callCmd.Proc.Name] = new Procedure(Token.NoToken, string.Format("DummyAsyncTarget_{0}", callCmd.Proc.Name), callCmd.Proc.TypeParameters, callCmd.Proc.InParams, callCmd.Proc.OutParams, callCmd.Proc.Requires, new List<IdentifierExpr>(), new List<Ensures>());
- }
- var dummyAsyncTargetProc = asyncAndParallelCallDesugarings[callCmd.Proc.Name];
- CallCmd dummyCallCmd = new CallCmd(callCmd.tok, dummyAsyncTargetProc.Name, callCmd.Ins, callCmd.Outs, callCmd.Attributes);
- dummyCallCmd.Proc = dummyAsyncTargetProc;
- newCmds.Add(dummyCallCmd);
- }
- else
- {
- newCmds.Add(callCmd);
- }
- if (yieldingProcs.Contains(callCmd.Proc))
- {
- HashSet<Variable> availableLinearVars = new HashSet<Variable>(AvailableLinearVars(callCmd));
- linearTypeChecker.AddAvailableVars(callCmd, availableLinearVars);
- Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(availableLinearVars, domainNameToInputVar);
- AddUpdatesToOldGlobalVars(newCmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
- }
- }
- else if (cmd is ParCallCmd)
- {
- ParCallCmd parCallCmd = cmd as ParCallCmd;
- AddCallToYieldProc(parCallCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
- DesugarParallelCallCmd(newCmds, parCallCmd);
- HashSet<Variable> availableLinearVars = new HashSet<Variable>(AvailableLinearVars(parCallCmd));
- linearTypeChecker.AddAvailableVars(parCallCmd, availableLinearVars);
- Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(availableLinearVars, domainNameToInputVar);
- AddUpdatesToOldGlobalVars(newCmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
- }
- else
- {
- newCmds.Add(cmd);
- }
- }
- if (yieldCmd != null)
- {
- DesugarYield(yieldCmd, cmds, newCmds, ogOldGlobalMap, domainNameToInputVar, domainNameToLocalVar);
- if (cmds.Count > 0)
- {
- yields.Add(cmds);
- cmds = new List<Cmd>();
- }
- }
- if (b.TransferCmd is ReturnCmd)
- {
- AddCallToYieldProc(b.TransferCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
- if (pc != null)
- {
- AssertCmd assertCmd = new AssertCmd(b.TransferCmd.tok, Expr.Ident(ok));
- assertCmd.ErrorData = "Failed to execute atomic action before procedure return";
- newCmds.Add(assertCmd);
- }
- }
- b.Cmds = newCmds;
- }
- return yields;
- }
-
- private void ProcessLoopHeaders(Implementation impl, Graph<Block> graph, HashSet<Block> yieldingHeaders,
- Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<Variable, Variable> ogOldGlobalMap,
- out List<Variable> oldPcs, out List<Variable> oldOks)
- {
- oldPcs = new List<Variable>();
- oldOks = new List<Variable>();
- foreach (Block header in yieldingHeaders)
- {
- LocalVariable oldPc = null;
- LocalVariable oldOk = null;
- if (pc != null)
- {
- oldPc = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}", pc.Name, header.Label), Type.Bool));
- oldPcs.Add(oldPc);
- oldOk = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}", ok.Name, header.Label), Type.Bool));
- oldOks.Add(oldOk);
- }
- Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(AvailableLinearVars(header), domainNameToInputVar);
- foreach (Block pred in header.Predecessors)
- {
- AddCallToYieldProc(header.tok, pred.Cmds, ogOldGlobalMap, domainNameToLocalVar);
- if (pc != null && !graph.BackEdgeNodes(header).Contains(pred))
- {
- pred.Cmds.Add(new AssignCmd(Token.NoToken, new List<AssignLhs>(
- new AssignLhs[] { new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldPc)), new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldOk)) }),
- new List<Expr>(new Expr[] { Expr.Ident(pc), Expr.Ident(ok) })));
- }
- AddUpdatesToOldGlobalVars(pred.Cmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
- }
- List<Cmd> newCmds = new List<Cmd>();
- if (pc != null)
- {
- AssertCmd assertCmd;
- assertCmd = new AssertCmd(header.tok, Expr.Eq(Expr.Ident(oldPc), Expr.Ident(pc)));
- assertCmd.ErrorData = "Specification state must not change for transitions ending in loop headers";
- newCmds.Add(assertCmd);
- assertCmd = new AssertCmd(header.tok, Expr.Imp(Expr.Ident(oldOk), Expr.Ident(ok)));
- assertCmd.ErrorData = "Specification state must not change for transitions ending in loop headers";
- newCmds.Add(assertCmd);
- }
- foreach (string domainName in linearTypeChecker.linearDomains.Keys)
- {
- newCmds.Add(new AssumeCmd(Token.NoToken, Expr.Eq(Expr.Ident(domainNameToLocalVar[domainName]), domainNameToExpr[domainName])));
- }
- foreach (Variable v in ogOldGlobalMap.Keys)
- {
- newCmds.Add(new AssumeCmd(Token.NoToken, Expr.Eq(Expr.Ident(v), Expr.Ident(ogOldGlobalMap[v]))));
- }
- newCmds.AddRange(header.Cmds);
- header.Cmds = newCmds;
- }
- }
-
- private void AddInitialBlock(Implementation impl, List<Variable> oldPcs, List<Variable> oldOks,
- Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<Variable, Variable> ogOldGlobalMap)
- {
- // Add initial block
- List<AssignLhs> lhss = new List<AssignLhs>();
- List<Expr> rhss = new List<Expr>();
- if (pc != null)
- {
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(pc)));
- rhss.Add(Expr.False);
- foreach (Variable oldPc in oldPcs)
- {
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldPc)));
- rhss.Add(Expr.False);
- }
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(ok)));
- rhss.Add(Expr.False);
- foreach (Variable oldOk in oldOks)
- {
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldOk)));
- rhss.Add(Expr.False);
- }
- }
- Dictionary<string, Expr> domainNameToExpr = new Dictionary<string, Expr>();
- foreach (var domainName in linearTypeChecker.linearDomains.Keys)
- {
- domainNameToExpr[domainName] = Expr.Ident(domainNameToInputVar[domainName]);
- }
- for (int i = 0; i < impl.InParams.Count - linearTypeChecker.linearDomains.Count; i++)
- {
- Variable v = impl.InParams[i];
- var domainName = linearTypeChecker.FindDomainName(v);
- if (domainName == null) continue;
- if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
- var domain = linearTypeChecker.linearDomains[domainName];
- if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
- Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
- domainNameToExpr[domainName] = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapOrBool), new List<Expr> { ie, domainNameToExpr[domainName] });
- }
- foreach (string domainName in linearTypeChecker.linearDomains.Keys)
- {
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(domainNameToLocalVar[domainName])));
- rhss.Add(domainNameToExpr[domainName]);
- }
- foreach (Variable g in ogOldGlobalMap.Keys)
- {
- lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(ogOldGlobalMap[g])));
- rhss.Add(Expr.Ident(g));
- }
- if (lhss.Count > 0)
- {
- Block initBlock = new Block(Token.NoToken, "og_init", new List<Cmd> { new AssignCmd(Token.NoToken, lhss, rhss) }, new GotoCmd(Token.NoToken, new List<String> { impl.Blocks[0].Label }, new List<Block> { impl.Blocks[0] }));
- impl.Blocks.Insert(0, initBlock);
- }
- }
-
- private void AddYieldProcAndImpl(List<Declaration> decls)
- {
- if (yieldProc == null) return;
-
- Program program = linearTypeChecker.program;
- List<Variable> inputs = new List<Variable>();
- foreach (string domainName in linearTypeChecker.linearDomains.Keys)
- {
- var domain = linearTypeChecker.linearDomains[domainName];
- Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "linear_" + domainName + "_in", new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Type.Bool)), true);
- inputs.Add(f);
- }
- foreach (IdentifierExpr ie in globalMods)
- {
- Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", ie.Decl.Name), ie.Decl.TypedIdent.Type), true);
- inputs.Add(f);
- }
- List<Block> blocks = new List<Block>();
- TransferCmd transferCmd = new ReturnCmd(Token.NoToken);
- if (yieldCheckerProcs.Count > 0)
- {
- List<Block> blockTargets = new List<Block>();
- List<String> labelTargets = new List<String>();
- int labelCount = 0;
- foreach (Procedure proc in yieldCheckerProcs)
- {
- List<Expr> exprSeq = new List<Expr>();
- foreach (Variable v in inputs)
- {
- exprSeq.Add(Expr.Ident(v));
- }
- CallCmd callCmd = new CallCmd(Token.NoToken, proc.Name, exprSeq, new List<IdentifierExpr>());
- callCmd.Proc = proc;
- string label = string.Format("L_{0}", labelCount++);
- Block block = new Block(Token.NoToken, label, new List<Cmd> { callCmd }, new ReturnCmd(Token.NoToken));
- labelTargets.Add(label);
- blockTargets.Add(block);
- blocks.Add(block);
- }
- transferCmd = new GotoCmd(Token.NoToken, labelTargets, blockTargets);
- }
- blocks.Insert(0, new Block(Token.NoToken, "enter", new List<Cmd>(), transferCmd));
-
- var yieldImpl = new Implementation(Token.NoToken, yieldProc.Name, new List<TypeVariable>(), inputs, new List<Variable>(), new List<Variable>(), blocks);
- yieldImpl.Proc = yieldProc;
- yieldImpl.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
- decls.Add(yieldProc);
- decls.Add(yieldImpl);
- }
-
- public static QKeyValue RemoveYieldsAttribute(QKeyValue iter)
- {
- if (iter == null) return null;
- iter.Next = RemoveYieldsAttribute(iter.Next);
- return (iter.Key == "yields") ? iter.Next : iter;
- }
-
- public static QKeyValue RemoveMoverAttribute(QKeyValue iter)
- {
- if (iter == null) return null;
- iter.Next = RemoveMoverAttribute(iter.Next);
- if (iter.Key == "atomic" || iter.Key == "right" || iter.Key == "left" || iter.Key == "both")
- return iter.Next;
- else
- return iter;
- }
-
- private List<Declaration> Collect()
- {
- List<Declaration> decls = new List<Declaration>();
- foreach (Procedure proc in yieldCheckerProcs)
- {
- decls.Add(proc);
- }
- foreach (Implementation impl in yieldCheckerImpls)
- {
- decls.Add(impl);
- }
- foreach (Procedure proc in asyncAndParallelCallDesugarings.Values)
- {
- decls.Add(proc);
- }
- AddYieldProcAndImpl(decls);
- return decls;
- }
-
- public static void AddCheckers(LinearTypeChecker linearTypeChecker, MoverTypeChecker moverTypeChecker, List<Declaration> decls)
- {
- Program program = linearTypeChecker.program;
- foreach (int layerNum in moverTypeChecker.AllCreatedLayerNums.Except(new int[] { moverTypeChecker.leastUnimplementedLayerNum }))
- {
- if (CommandLineOptions.Clo.TrustLayersDownto <= layerNum || layerNum <= CommandLineOptions.Clo.TrustLayersUpto) continue;
-
- MyDuplicator duplicator = new MyDuplicator(moverTypeChecker, layerNum);
- foreach (var proc in program.Procedures)
- {
- if (!moverTypeChecker.procToActionInfo.ContainsKey(proc)) continue;
- Procedure duplicateProc = duplicator.VisitProcedure(proc);
- decls.Add(duplicateProc);
- }
- decls.AddRange(duplicator.impls);
- OwickiGries ogTransform = new OwickiGries(linearTypeChecker, moverTypeChecker, duplicator);
- foreach (var impl in program.Implementations)
- {
- if (!moverTypeChecker.procToActionInfo.ContainsKey(impl.Proc) || moverTypeChecker.procToActionInfo[impl.Proc].createdAtLayerNum < layerNum)
- continue;
- Implementation duplicateImpl = duplicator.VisitImplementation(impl);
- ogTransform.TransformImpl(duplicateImpl);
- decls.Add(duplicateImpl);
- }
- decls.AddRange(ogTransform.Collect());
- }
- }
- }
-}
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Boogie;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.GraphUtil;
+
+namespace Microsoft.Boogie
+{
+ public class MyDuplicator : Duplicator
+ {
+ CivlTypeChecker civlTypeChecker;
+ public int layerNum;
+ Procedure enclosingProc;
+ Implementation enclosingImpl;
+ public Dictionary<Procedure, Procedure> procMap; /* Original -> Duplicate */
+ public Dictionary<Absy, Absy> absyMap; /* Duplicate -> Original */
+ public Dictionary<Implementation, Implementation> implMap; /* Duplicate -> Original */
+ public HashSet<Procedure> yieldingProcs;
+ public List<Implementation> impls;
+
+ public MyDuplicator(CivlTypeChecker civlTypeChecker, int layerNum)
+ {
+ this.civlTypeChecker = civlTypeChecker;
+ this.layerNum = layerNum;
+ this.enclosingProc = null;
+ this.enclosingImpl = null;
+ this.procMap = new Dictionary<Procedure, Procedure>();
+ this.absyMap = new Dictionary<Absy, Absy>();
+ this.implMap = new Dictionary<Implementation, Implementation>();
+ this.yieldingProcs = new HashSet<Procedure>();
+ this.impls = new List<Implementation>();
+ }
+
+ private void ProcessCallCmd(CallCmd originalCallCmd, CallCmd callCmd, List<Cmd> newCmds)
+ {
+ int enclosingProcLayerNum = civlTypeChecker.procToActionInfo[enclosingImpl.Proc].createdAtLayerNum;
+ Procedure originalProc = originalCallCmd.Proc;
+
+ if (civlTypeChecker.procToAtomicProcedureInfo.ContainsKey(originalProc))
+ {
+ if (civlTypeChecker.CallExists(originalCallCmd, enclosingProcLayerNum, layerNum))
+ {
+ newCmds.Add(callCmd);
+ }
+ }
+ else if (civlTypeChecker.procToActionInfo.ContainsKey(originalProc))
+ {
+ AtomicActionInfo atomicActionInfo = civlTypeChecker.procToActionInfo[originalProc] as AtomicActionInfo;
+ if (atomicActionInfo != null && atomicActionInfo.gate.Count > 0 && layerNum == enclosingProcLayerNum)
+ {
+ newCmds.Add(new HavocCmd(Token.NoToken, new List<IdentifierExpr>(new IdentifierExpr[] { Expr.Ident(dummyLocalVar) })));
+ Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
+ for (int i = 0; i < originalProc.InParams.Count; i++)
+ {
+ map[originalProc.InParams[i]] = callCmd.Ins[i];
+ }
+ Substitution subst = Substituter.SubstitutionFromHashtable(map);
+ foreach (AssertCmd assertCmd in atomicActionInfo.gate)
+ {
+ newCmds.Add(Substituter.Apply(subst, assertCmd));
+ }
+ }
+ newCmds.Add(callCmd);
+ }
+ else
+ {
+ Debug.Assert(false);
+ }
+ }
+
+ private void ProcessParCallCmd(ParCallCmd originalParCallCmd, ParCallCmd parCallCmd, List<Cmd> newCmds)
+ {
+ int maxCalleeLayerNum = 0;
+ foreach (CallCmd iter in originalParCallCmd.CallCmds)
+ {
+ int calleeLayerNum = civlTypeChecker.procToActionInfo[iter.Proc].createdAtLayerNum;
+ if (calleeLayerNum > maxCalleeLayerNum)
+ maxCalleeLayerNum = calleeLayerNum;
+ }
+ if (layerNum > maxCalleeLayerNum)
+ {
+ for (int i = 0; i < parCallCmd.CallCmds.Count; i++)
+ {
+ ProcessCallCmd(originalParCallCmd.CallCmds[i], parCallCmd.CallCmds[i], newCmds);
+ absyMap[parCallCmd.CallCmds[i]] = originalParCallCmd;
+ }
+ }
+ else
+ {
+ newCmds.Add(parCallCmd);
+ }
+ }
+
+ public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq)
+ {
+ List<Cmd> cmds = base.VisitCmdSeq(cmdSeq);
+ List<Cmd> newCmds = new List<Cmd>();
+ for (int i = 0; i < cmds.Count; i++)
+ {
+ Cmd originalCmd = cmdSeq[i];
+ Cmd cmd = cmds[i];
+
+ CallCmd originalCallCmd = originalCmd as CallCmd;
+ if (originalCallCmd != null)
+ {
+ ProcessCallCmd(originalCallCmd, cmd as CallCmd, newCmds);
+ continue;
+ }
+
+ ParCallCmd originalParCallCmd = originalCmd as ParCallCmd;
+ if (originalParCallCmd != null)
+ {
+ ProcessParCallCmd(originalParCallCmd, cmd as ParCallCmd, newCmds);
+ continue;
+ }
+
+ newCmds.Add(cmd);
+ }
+ return newCmds;
+ }
+
+ public override YieldCmd VisitYieldCmd(YieldCmd node)
+ {
+ YieldCmd yieldCmd = base.VisitYieldCmd(node);
+ absyMap[yieldCmd] = node;
+ return yieldCmd;
+ }
+
+ public override Block VisitBlock(Block node)
+ {
+ Block block = base.VisitBlock(node);
+ absyMap[block] = node;
+ return block;
+ }
+
+ public override Cmd VisitCallCmd(CallCmd node)
+ {
+ CallCmd callCmd = (CallCmd) base.VisitCallCmd(node);
+ callCmd.Proc = VisitProcedure(callCmd.Proc);
+ callCmd.callee = callCmd.Proc.Name;
+ absyMap[callCmd] = node;
+ return callCmd;
+ }
+
+ public override Cmd VisitParCallCmd(ParCallCmd node)
+ {
+ ParCallCmd parCallCmd = (ParCallCmd) base.VisitParCallCmd(node);
+ absyMap[parCallCmd] = node;
+ return parCallCmd;
+ }
+
+ public override Procedure VisitProcedure(Procedure node)
+ {
+ if (!civlTypeChecker.procToActionInfo.ContainsKey(node))
+ return node;
+ if (!procMap.ContainsKey(node))
+ {
+ enclosingProc = node;
+ Procedure proc = (Procedure)node.Clone();
+ proc.Name = string.Format("{0}_{1}", node.Name, layerNum);
+ proc.InParams = this.VisitVariableSeq(node.InParams);
+ proc.Modifies = this.VisitIdentifierExprSeq(node.Modifies);
+ proc.OutParams = this.VisitVariableSeq(node.OutParams);
+
+ ActionInfo actionInfo = civlTypeChecker.procToActionInfo[node];
+ if (actionInfo.createdAtLayerNum < layerNum)
+ {
+ proc.Requires = new List<Requires>();
+ proc.Ensures = new List<Ensures>();
+ Implementation impl;
+ AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
+ if (atomicActionInfo != null)
+ {
+ CodeExpr action = (CodeExpr)VisitCodeExpr(atomicActionInfo.action);
+ List<Cmd> cmds = new List<Cmd>();
+ foreach (AssertCmd assertCmd in atomicActionInfo.gate)
+ {
+ cmds.Add(new AssumeCmd(Token.NoToken, (Expr)Visit(assertCmd.Expr)));
+ }
+ Block newInitBlock = new Block(Token.NoToken, "_init", cmds,
+ new GotoCmd(Token.NoToken, new List<string>(new string[] { action.Blocks[0].Label }),
+ new List<Block>(new Block[] { action.Blocks[0] })));
+ List<Block> newBlocks = new List<Block>();
+ newBlocks.Add(newInitBlock);
+ newBlocks.AddRange(action.Blocks);
+ impl = new Implementation(Token.NoToken, proc.Name, node.TypeParameters, node.InParams, node.OutParams, action.LocVars, newBlocks);
+ }
+ else
+ {
+ Block newInitBlock = new Block(Token.NoToken, "_init", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+ List<Block> newBlocks = new List<Block>();
+ newBlocks.Add(newInitBlock);
+ impl = new Implementation(Token.NoToken, proc.Name, node.TypeParameters, node.InParams, node.OutParams, new List<Variable>(), newBlocks);
+ }
+ impl.Proc = proc;
+ impl.Proc.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
+ impl.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
+ impls.Add(impl);
+ }
+ else
+ {
+ yieldingProcs.Add(proc);
+ proc.Requires = this.VisitRequiresSeq(node.Requires);
+ proc.Ensures = this.VisitEnsuresSeq(node.Ensures);
+ }
+ procMap[node] = proc;
+ proc.Modifies = new List<IdentifierExpr>();
+ civlTypeChecker.SharedVariables.Iter(x => proc.Modifies.Add(Expr.Ident(x)));
+ }
+ return procMap[node];
+ }
+
+ private Variable dummyLocalVar;
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ enclosingImpl = node;
+ dummyLocalVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "og_dummy", Type.Bool));
+ Implementation impl = base.VisitImplementation(node);
+ implMap[impl] = node;
+ impl.LocVars.Add(dummyLocalVar);
+ impl.Name = impl.Proc.Name;
+ return impl;
+ }
+
+ public override Requires VisitRequires(Requires node)
+ {
+ Requires requires = base.VisitRequires(node);
+ if (node.Free)
+ return requires;
+ if (!civlTypeChecker.absyToLayerNums[node].Contains(layerNum))
+ requires.Condition = Expr.True;
+ return requires;
+ }
+
+ public override Ensures VisitEnsures(Ensures node)
+ {
+ Ensures ensures = base.VisitEnsures(node);
+ if (node.Free)
+ return ensures;
+ AtomicActionInfo atomicActionInfo = civlTypeChecker.procToActionInfo[enclosingProc] as AtomicActionInfo;
+ bool isAtomicSpecification = atomicActionInfo != null && atomicActionInfo.ensures == node;
+ if (isAtomicSpecification || !civlTypeChecker.absyToLayerNums[node].Contains(layerNum))
+ {
+ ensures.Condition = Expr.True;
+ ensures.Attributes = CivlRefinement.RemoveMoverAttribute(ensures.Attributes);
+ }
+ return ensures;
+ }
+
+ public override Cmd VisitAssertCmd(AssertCmd node)
+ {
+ AssertCmd assertCmd = (AssertCmd) base.VisitAssertCmd(node);
+ if (!civlTypeChecker.absyToLayerNums[node].Contains(layerNum))
+ assertCmd.Expr = Expr.True;
+ return assertCmd;
+ }
+ }
+
+ public class CivlRefinement
+ {
+ LinearTypeChecker linearTypeChecker;
+ CivlTypeChecker civlTypeChecker;
+ Dictionary<Absy, Absy> absyMap;
+ Dictionary<Implementation, Implementation> implMap;
+ HashSet<Procedure> yieldingProcs;
+ int layerNum;
+ List<IdentifierExpr> globalMods;
+ Dictionary<string, Procedure> asyncAndParallelCallDesugarings;
+ List<Procedure> yieldCheckerProcs;
+ List<Implementation> yieldCheckerImpls;
+ Procedure yieldProc;
+
+ Variable pc;
+ Variable ok;
+ Expr alpha;
+ Expr beta;
+ HashSet<Variable> frame;
+
+ public CivlRefinement(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker, MyDuplicator duplicator)
+ {
+ this.linearTypeChecker = linearTypeChecker;
+ this.civlTypeChecker = civlTypeChecker;
+ this.absyMap = duplicator.absyMap;
+ this.layerNum = duplicator.layerNum;
+ this.implMap = duplicator.implMap;
+ this.yieldingProcs = duplicator.yieldingProcs;
+ Program program = linearTypeChecker.program;
+ globalMods = new List<IdentifierExpr>();
+ foreach (Variable g in civlTypeChecker.SharedVariables)
+ {
+ globalMods.Add(Expr.Ident(g));
+ }
+ asyncAndParallelCallDesugarings = new Dictionary<string, Procedure>();
+ yieldCheckerProcs = new List<Procedure>();
+ yieldCheckerImpls = new List<Implementation>();
+ yieldProc = null;
+ }
+
+ private IEnumerable<Variable> AvailableLinearVars(Absy absy)
+ {
+ HashSet<Variable> availableVars = new HashSet<Variable>(linearTypeChecker.AvailableLinearVars(absyMap[absy]));
+ foreach (var g in civlTypeChecker.globalVarToSharedVarInfo.Keys)
+ {
+ SharedVariableInfo info = civlTypeChecker.globalVarToSharedVarInfo[g];
+ if (!(info.introLayerNum <= layerNum && layerNum <= info.hideLayerNum))
+ {
+ availableVars.Remove(g);
+ }
+ }
+ foreach (var v in civlTypeChecker.localVarToLocalVariableInfo.Keys)
+ {
+ LocalVariableInfo info = civlTypeChecker.localVarToLocalVariableInfo[v];
+ if (layerNum < info.layer)
+ {
+ availableVars.Remove(v);
+ }
+ }
+ return availableVars;
+ }
+
+ private CallCmd CallToYieldProc(IToken tok, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar)
+ {
+ List<Expr> exprSeq = new List<Expr>();
+ foreach (string domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ exprSeq.Add(Expr.Ident(domainNameToLocalVar[domainName]));
+ }
+ foreach (IdentifierExpr ie in globalMods)
+ {
+ exprSeq.Add(Expr.Ident(ogOldGlobalMap[ie.Decl]));
+ }
+ if (yieldProc == null)
+ {
+ List<Variable> inputs = new List<Variable>();
+ foreach (string domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ var domain = linearTypeChecker.linearDomains[domainName];
+ Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "linear_" + domainName + "_in", new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Type.Bool)), true);
+ inputs.Add(f);
+ }
+ foreach (IdentifierExpr ie in globalMods)
+ {
+ Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", ie.Decl.Name), ie.Decl.TypedIdent.Type), true);
+ inputs.Add(f);
+ }
+ yieldProc = new Procedure(Token.NoToken, string.Format("og_yield_{0}", layerNum), new List<TypeVariable>(), inputs, new List<Variable>(), new List<Requires>(), new List<IdentifierExpr>(), new List<Ensures>());
+ yieldProc.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
+ }
+ CallCmd yieldCallCmd = new CallCmd(Token.NoToken, yieldProc.Name, exprSeq, new List<IdentifierExpr>());
+ yieldCallCmd.Proc = yieldProc;
+ return yieldCallCmd;
+ }
+
+ private void AddCallToYieldProc(IToken tok, List<Cmd> newCmds, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar)
+ {
+ if (!CommandLineOptions.Clo.TrustNonInterference)
+ {
+ CallCmd yieldCallCmd = CallToYieldProc(tok, ogOldGlobalMap, domainNameToLocalVar);
+ newCmds.Add(yieldCallCmd);
+ }
+
+ if (pc != null)
+ {
+ Expr aa = OldEqualityExprForGlobals(ogOldGlobalMap);
+ Expr bb = OldEqualityExpr(ogOldGlobalMap);
+
+ // assert pc || g_old == g || beta(i, g_old, o, g);
+ Expr assertExpr = Expr.Or(Expr.Ident(pc), Expr.Or(aa, beta));
+ assertExpr.Typecheck(new TypecheckingContext(null));
+ AssertCmd skipOrBetaAssertCmd = new AssertCmd(tok, assertExpr);
+ skipOrBetaAssertCmd.ErrorData = "Transition invariant in initial state violated";
+ newCmds.Add(skipOrBetaAssertCmd);
+
+ // assert pc ==> o_old == o && g_old == g;
+ assertExpr = Expr.Imp(Expr.Ident(pc), bb);
+ assertExpr.Typecheck(new TypecheckingContext(null));
+ AssertCmd skipAssertCmd = new AssertCmd(tok, assertExpr);
+ skipAssertCmd.ErrorData = "Transition invariant in final state violated"; ;
+ newCmds.Add(skipAssertCmd);
+
+ // pc, ok := g_old == g ==> pc, ok || beta(i, g_old, o, g);
+ List<AssignLhs> pcUpdateLHS = new List<AssignLhs>(
+ new AssignLhs[] {
+ new SimpleAssignLhs(Token.NoToken, Expr.Ident(pc)),
+ new SimpleAssignLhs(Token.NoToken, Expr.Ident(ok))
+ });
+ List<Expr> pcUpdateRHS = new List<Expr>(
+ new Expr[] {
+ Expr.Imp(aa, Expr.Ident(pc)),
+ Expr.Or(Expr.Ident(ok), beta)
+ });
+ foreach (Expr e in pcUpdateRHS)
+ {
+ e.Typecheck(new TypecheckingContext(null));
+ }
+ newCmds.Add(new AssignCmd(Token.NoToken, pcUpdateLHS, pcUpdateRHS));
+ }
+ }
+
+ private Dictionary<string, Expr> ComputeAvailableExprs(IEnumerable<Variable> availableLinearVars, Dictionary<string, Variable> domainNameToInputVar)
+ {
+ Dictionary<string, Expr> domainNameToExpr = new Dictionary<string, Expr>();
+ foreach (var domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ var expr = Expr.Ident(domainNameToInputVar[domainName]);
+ expr.Resolve(new ResolutionContext(null));
+ expr.Typecheck(new TypecheckingContext(null));
+ domainNameToExpr[domainName] = expr;
+ }
+ foreach (Variable v in availableLinearVars)
+ {
+ var domainName = linearTypeChecker.FindDomainName(v);
+ if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
+ var domain = linearTypeChecker.linearDomains[domainName];
+ if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
+ Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
+ var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapOrBool), new List<Expr> { ie, domainNameToExpr[domainName] });
+ expr.Resolve(new ResolutionContext(null));
+ expr.Typecheck(new TypecheckingContext(null));
+ domainNameToExpr[domainName] = expr;
+ }
+ return domainNameToExpr;
+ }
+
+ private void AddUpdatesToOldGlobalVars(List<Cmd> newCmds, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<string, Expr> domainNameToExpr)
+ {
+ List<AssignLhs> lhss = new List<AssignLhs>();
+ List<Expr> rhss = new List<Expr>();
+ foreach (var domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(domainNameToLocalVar[domainName])));
+ rhss.Add(domainNameToExpr[domainName]);
+ }
+ foreach (Variable g in ogOldGlobalMap.Keys)
+ {
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(ogOldGlobalMap[g])));
+ rhss.Add(Expr.Ident(g));
+ }
+ if (lhss.Count > 0)
+ {
+ newCmds.Add(new AssignCmd(Token.NoToken, lhss, rhss));
+ }
+ }
+
+ private Expr OldEqualityExpr(Dictionary<Variable, Variable> ogOldGlobalMap)
+ {
+ Expr bb = Expr.True;
+ foreach (Variable o in ogOldGlobalMap.Keys)
+ {
+ if (o is GlobalVariable && !frame.Contains(o)) continue;
+ bb = Expr.And(bb, Expr.Eq(Expr.Ident(o), Expr.Ident(ogOldGlobalMap[o])));
+ bb.Type = Type.Bool;
+ }
+ return bb;
+ }
+
+ private Expr OldEqualityExprForGlobals(Dictionary<Variable, Variable> ogOldGlobalMap)
+ {
+ Expr bb = Expr.True;
+ foreach (Variable o in ogOldGlobalMap.Keys)
+ {
+ if (o is GlobalVariable && frame.Contains(o))
+ {
+ bb = Expr.And(bb, Expr.Eq(Expr.Ident(o), Expr.Ident(ogOldGlobalMap[o])));
+ bb.Type = Type.Bool;
+ }
+ }
+ return bb;
+ }
+
+ private void DesugarYield(YieldCmd yieldCmd, List<Cmd> cmds, List<Cmd> newCmds, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar)
+ {
+ AddCallToYieldProc(yieldCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
+
+ if (globalMods.Count > 0)
+ {
+ newCmds.Add(new HavocCmd(Token.NoToken, globalMods));
+ if (pc != null)
+ {
+ // assume pc || alpha(i, g);
+ Expr assumeExpr = Expr.Or(Expr.Ident(pc), alpha);
+ assumeExpr.Type = Type.Bool;
+ newCmds.Add(new AssumeCmd(Token.NoToken, assumeExpr));
+ }
+ }
+
+ Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(AvailableLinearVars(yieldCmd), domainNameToInputVar);
+ AddUpdatesToOldGlobalVars(newCmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
+
+ for (int j = 0; j < cmds.Count; j++)
+ {
+ PredicateCmd predCmd = (PredicateCmd)cmds[j];
+ newCmds.Add(new AssumeCmd(Token.NoToken, predCmd.Expr));
+ }
+ }
+
+ public void DesugarParallelCallCmd(List<Cmd> newCmds, ParCallCmd parCallCmd)
+ {
+ List<string> parallelCalleeNames = new List<string>();
+ List<Expr> ins = new List<Expr>();
+ List<IdentifierExpr> outs = new List<IdentifierExpr>();
+ string procName = "og";
+ foreach (CallCmd callCmd in parCallCmd.CallCmds)
+ {
+ procName = procName + "_" + callCmd.Proc.Name;
+ ins.AddRange(callCmd.Ins);
+ outs.AddRange(callCmd.Outs);
+ }
+ Procedure proc;
+ if (asyncAndParallelCallDesugarings.ContainsKey(procName))
+ {
+ proc = asyncAndParallelCallDesugarings[procName];
+ }
+ else
+ {
+ List<Variable> inParams = new List<Variable>();
+ List<Variable> outParams = new List<Variable>();
+ List<Requires> requiresSeq = new List<Requires>();
+ List<Ensures> ensuresSeq = new List<Ensures>();
+ int count = 0;
+ foreach (CallCmd callCmd in parCallCmd.CallCmds)
+ {
+ Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
+ foreach (Variable x in callCmd.Proc.InParams)
+ {
+ Variable y = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_{0}_{1}", count, x.Name), x.TypedIdent.Type), true);
+ inParams.Add(y);
+ map[x] = Expr.Ident(y);
+ }
+ foreach (Variable x in callCmd.Proc.OutParams)
+ {
+ Variable y = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_{0}_{1}", count, x.Name), x.TypedIdent.Type), false);
+ outParams.Add(y);
+ map[x] = Expr.Ident(y);
+ }
+ Contract.Assume(callCmd.Proc.TypeParameters.Count == 0);
+ Substitution subst = Substituter.SubstitutionFromHashtable(map);
+ foreach (Requires req in callCmd.Proc.Requires)
+ {
+ requiresSeq.Add(new Requires(req.tok, req.Free, Substituter.Apply(subst, req.Condition), null, req.Attributes));
+ }
+ foreach (Ensures ens in callCmd.Proc.Ensures)
+ {
+ ensuresSeq.Add(new Ensures(ens.tok, ens.Free, Substituter.Apply(subst, ens.Condition), null, ens.Attributes));
+ }
+ count++;
+ }
+ proc = new Procedure(Token.NoToken, procName, new List<TypeVariable>(), inParams, outParams, requiresSeq, globalMods, ensuresSeq);
+ asyncAndParallelCallDesugarings[procName] = proc;
+ }
+ CallCmd dummyCallCmd = new CallCmd(parCallCmd.tok, proc.Name, ins, outs, parCallCmd.Attributes);
+ dummyCallCmd.Proc = proc;
+ newCmds.Add(dummyCallCmd);
+ }
+
+ private void CreateYieldCheckerImpl(Implementation impl, List<List<Cmd>> yields)
+ {
+ if (yields.Count == 0) return;
+
+ Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
+ foreach (Variable local in impl.LocVars)
+ {
+ var copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, local.Name, local.TypedIdent.Type));
+ map[local] = Expr.Ident(copy);
+ }
+
+ Program program = linearTypeChecker.program;
+ List<Variable> locals = new List<Variable>();
+ List<Variable> inputs = new List<Variable>();
+ foreach (IdentifierExpr ie in map.Values)
+ {
+ locals.Add(ie.Decl);
+ }
+ for (int i = 0; i < impl.InParams.Count - linearTypeChecker.linearDomains.Count; i++)
+ {
+ Variable inParam = impl.InParams[i];
+ Variable copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, inParam.Name, inParam.TypedIdent.Type));
+ locals.Add(copy);
+ map[impl.InParams[i]] = Expr.Ident(copy);
+ }
+ {
+ int i = impl.InParams.Count - linearTypeChecker.linearDomains.Count;
+ foreach (string domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ Variable inParam = impl.InParams[i];
+ Variable copy = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, inParam.Name, inParam.TypedIdent.Type), true);
+ inputs.Add(copy);
+ map[impl.InParams[i]] = Expr.Ident(copy);
+ i++;
+ }
+ }
+ for (int i = 0; i < impl.OutParams.Count; i++)
+ {
+ Variable outParam = impl.OutParams[i];
+ var copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, outParam.Name, outParam.TypedIdent.Type));
+ locals.Add(copy);
+ map[impl.OutParams[i]] = Expr.Ident(copy);
+ }
+ Dictionary<Variable, Expr> ogOldLocalMap = new Dictionary<Variable, Expr>();
+ Dictionary<Variable, Expr> assumeMap = new Dictionary<Variable, Expr>(map);
+ foreach (IdentifierExpr ie in globalMods)
+ {
+ Variable g = ie.Decl;
+ var copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_local_old_{0}", g.Name), g.TypedIdent.Type));
+ locals.Add(copy);
+ ogOldLocalMap[g] = Expr.Ident(copy);
+ Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", g.Name), g.TypedIdent.Type), true);
+ inputs.Add(f);
+ assumeMap[g] = Expr.Ident(f);
+ }
+
+ Substitution assumeSubst = Substituter.SubstitutionFromHashtable(assumeMap);
+ Substitution oldSubst = Substituter.SubstitutionFromHashtable(ogOldLocalMap);
+ Substitution subst = Substituter.SubstitutionFromHashtable(map);
+ List<Block> yieldCheckerBlocks = new List<Block>();
+ List<String> labels = new List<String>();
+ List<Block> labelTargets = new List<Block>();
+ Block yieldCheckerBlock = new Block(Token.NoToken, "exit", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+ labels.Add(yieldCheckerBlock.Label);
+ labelTargets.Add(yieldCheckerBlock);
+ yieldCheckerBlocks.Add(yieldCheckerBlock);
+ int yieldCount = 0;
+ foreach (List<Cmd> cs in yields)
+ {
+ List<Cmd> newCmds = new List<Cmd>();
+ foreach (Cmd cmd in cs)
+ {
+ PredicateCmd predCmd = (PredicateCmd)cmd;
+ newCmds.Add(new AssumeCmd(Token.NoToken, Substituter.ApplyReplacingOldExprs(assumeSubst, oldSubst, predCmd.Expr)));
+ }
+ foreach (Cmd cmd in cs)
+ {
+ PredicateCmd predCmd = (PredicateCmd)cmd;
+ var newExpr = Substituter.ApplyReplacingOldExprs(subst, oldSubst, predCmd.Expr);
+ if (predCmd is AssertCmd)
+ {
+ AssertCmd assertCmd = new AssertCmd(predCmd.tok, newExpr, predCmd.Attributes);
+ assertCmd.ErrorData = "Non-interference check failed";
+ newCmds.Add(assertCmd);
+ }
+ else
+ {
+ newCmds.Add(new AssumeCmd(Token.NoToken, newExpr));
+ }
+ }
+ newCmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
+ yieldCheckerBlock = new Block(Token.NoToken, "L" + yieldCount++, newCmds, new ReturnCmd(Token.NoToken));
+ labels.Add(yieldCheckerBlock.Label);
+ labelTargets.Add(yieldCheckerBlock);
+ yieldCheckerBlocks.Add(yieldCheckerBlock);
+ }
+ yieldCheckerBlocks.Insert(0, new Block(Token.NoToken, "enter", new List<Cmd>(), new GotoCmd(Token.NoToken, labels, labelTargets)));
+
+ // Create the yield checker procedure
+ var yieldCheckerName = string.Format("{0}_YieldChecker_{1}", "Impl", impl.Name);
+ var yieldCheckerProc = new Procedure(Token.NoToken, yieldCheckerName, impl.TypeParameters, inputs, new List<Variable>(), new List<Requires>(), new List<IdentifierExpr>(), new List<Ensures>());
+ yieldCheckerProc.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
+ yieldCheckerProcs.Add(yieldCheckerProc);
+
+ // Create the yield checker implementation
+ var yieldCheckerImpl = new Implementation(Token.NoToken, yieldCheckerName, impl.TypeParameters, inputs, new List<Variable>(), locals, yieldCheckerBlocks);
+ yieldCheckerImpl.Proc = yieldCheckerProc;
+ yieldCheckerImpl.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
+ yieldCheckerImpls.Add(yieldCheckerImpl);
+ }
+
+ private bool IsYieldingHeader(Graph<Block> graph, Block header)
+ {
+ foreach (Block backEdgeNode in graph.BackEdgeNodes(header))
+ {
+ foreach (Block x in graph.NaturalLoops(header, backEdgeNode))
+ {
+ foreach (Cmd cmd in x.Cmds)
+ {
+ if (cmd is YieldCmd)
+ return true;
+ if (cmd is ParCallCmd)
+ return true;
+ CallCmd callCmd = cmd as CallCmd;
+ if (callCmd == null) continue;
+ if (yieldingProcs.Contains(callCmd.Proc))
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private Graph<Block> ComputeYieldingLoopHeaders(Implementation impl, out HashSet<Block> yieldingHeaders)
+ {
+ Graph<Block> graph;
+ impl.PruneUnreachableBlocks();
+ impl.ComputePredecessorsForBlocks();
+ graph = Program.GraphFromImpl(impl);
+ graph.ComputeLoops();
+ if (!graph.Reducible)
+ {
+ throw new Exception("Irreducible flow graphs are unsupported.");
+ }
+ yieldingHeaders = new HashSet<Block>();
+ IEnumerable<Block> sortedHeaders = graph.SortHeadersByDominance();
+ foreach (Block header in sortedHeaders)
+ {
+ if (yieldingHeaders.Any(x => graph.DominatorMap.DominatedBy(x, header)))
+ {
+ yieldingHeaders.Add(header);
+ }
+ else if (IsYieldingHeader(graph, header))
+ {
+ yieldingHeaders.Add(header);
+ }
+ else
+ {
+ continue;
+ }
+ }
+ return graph;
+ }
+
+ private void SetupRefinementCheck(Implementation impl,
+ out List<Variable> newLocalVars,
+ out Dictionary<string, Variable> domainNameToInputVar, out Dictionary<string, Variable> domainNameToLocalVar, out Dictionary<Variable, Variable> ogOldGlobalMap)
+ {
+ pc = null;
+ ok = null;
+ alpha = null;
+ beta = null;
+ frame = null;
+
+ newLocalVars = new List<Variable>();
+ Program program = linearTypeChecker.program;
+ ogOldGlobalMap = new Dictionary<Variable, Variable>();
+ foreach (IdentifierExpr ie in globalMods)
+ {
+ Variable g = ie.Decl;
+ LocalVariable l = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", g.Name), g.TypedIdent.Type));
+ ogOldGlobalMap[g] = l;
+ newLocalVars.Add(l);
+ }
+
+ Procedure originalProc = implMap[impl].Proc;
+ ActionInfo actionInfo = civlTypeChecker.procToActionInfo[originalProc];
+ if (actionInfo.createdAtLayerNum == this.layerNum)
+ {
+ pc = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "og_pc", Type.Bool));
+ newLocalVars.Add(pc);
+ ok = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "og_ok", Type.Bool));
+ newLocalVars.Add(ok);
+ Dictionary<Variable, Expr> alwaysMap = new Dictionary<Variable, Expr>();
+ for (int i = 0; i < originalProc.InParams.Count; i++)
+ {
+ alwaysMap[originalProc.InParams[i]] = Expr.Ident(impl.InParams[i]);
+ }
+ for (int i = 0; i < originalProc.OutParams.Count; i++)
+ {
+ alwaysMap[originalProc.OutParams[i]] = Expr.Ident(impl.OutParams[i]);
+ }
+ Substitution always = Substituter.SubstitutionFromHashtable(alwaysMap);
+ Dictionary<Variable, Expr> foroldMap = new Dictionary<Variable, Expr>();
+ foreach (IdentifierExpr ie in globalMods)
+ {
+ foroldMap[ie.Decl] = Expr.Ident(ogOldGlobalMap[ie.Decl]);
+ }
+ Substitution forold = Substituter.SubstitutionFromHashtable(foroldMap);
+ frame = new HashSet<Variable>(civlTypeChecker.SharedVariables);
+ foreach (Variable v in civlTypeChecker.SharedVariables)
+ {
+ if (civlTypeChecker.globalVarToSharedVarInfo[v].hideLayerNum <= actionInfo.createdAtLayerNum ||
+ civlTypeChecker.globalVarToSharedVarInfo[v].introLayerNum > actionInfo.createdAtLayerNum)
+ {
+ frame.Remove(v);
+ }
+ }
+ AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
+ if (atomicActionInfo == null)
+ {
+ beta = Expr.True;
+ foreach (var v in frame)
+ {
+ beta = Expr.And(beta, Expr.Eq(Expr.Ident(v), foroldMap[v]));
+ }
+ alpha = Expr.True;
+ }
+ else
+ {
+ Expr betaExpr = (new MoverCheck.TransitionRelationComputation(civlTypeChecker.program, atomicActionInfo, frame, new HashSet<Variable>())).TransitionRelationCompute(true);
+ beta = Substituter.ApplyReplacingOldExprs(always, forold, betaExpr);
+ Expr alphaExpr = Expr.True;
+ foreach (AssertCmd assertCmd in atomicActionInfo.gate)
+ {
+ alphaExpr = Expr.And(alphaExpr, assertCmd.Expr);
+ alphaExpr.Type = Type.Bool;
+ }
+ alpha = Substituter.Apply(always, alphaExpr);
+ }
+ foreach (Variable f in impl.OutParams)
+ {
+ LocalVariable copy = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_old_{0}", f.Name), f.TypedIdent.Type));
+ newLocalVars.Add(copy);
+ ogOldGlobalMap[f] = copy;
+ }
+ }
+
+ domainNameToInputVar = new Dictionary<string, Variable>();
+ domainNameToLocalVar = new Dictionary<string, Variable>();
+ {
+ int i = impl.InParams.Count - linearTypeChecker.linearDomains.Count;
+ foreach (string domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ Variable inParam = impl.InParams[i];
+ domainNameToInputVar[domainName] = inParam;
+ Variable l = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, inParam.Name + "_local", inParam.TypedIdent.Type));
+ domainNameToLocalVar[domainName] = l;
+ newLocalVars.Add(l);
+ i++;
+ }
+ }
+ }
+
+ private void TransformImpl(Implementation impl)
+ {
+ HashSet<Block> yieldingHeaders;
+ Graph<Block> graph = ComputeYieldingLoopHeaders(impl, out yieldingHeaders);
+
+ List<Variable> newLocalVars;
+ Dictionary<string, Variable> domainNameToInputVar, domainNameToLocalVar;
+ Dictionary<Variable, Variable> ogOldGlobalMap;
+ SetupRefinementCheck(impl, out newLocalVars, out domainNameToInputVar, out domainNameToLocalVar, out ogOldGlobalMap);
+
+ List<List<Cmd>> yields = CollectAndDesugarYields(impl, domainNameToInputVar, domainNameToLocalVar, ogOldGlobalMap);
+
+ List<Variable> oldPcs, oldOks;
+ ProcessLoopHeaders(impl, graph, yieldingHeaders, domainNameToInputVar, domainNameToLocalVar, ogOldGlobalMap, out oldPcs, out oldOks);
+
+ AddInitialBlock(impl, oldPcs, oldOks, domainNameToInputVar, domainNameToLocalVar, ogOldGlobalMap);
+
+ CreateYieldCheckerImpl(impl, yields);
+
+ impl.LocVars.AddRange(newLocalVars);
+ impl.LocVars.AddRange(oldPcs);
+ impl.LocVars.AddRange(oldOks);
+
+ UnifyCallsToYieldProc(impl, ogOldGlobalMap, domainNameToLocalVar);
+ }
+
+ private void UnifyCallsToYieldProc(Implementation impl, Dictionary<Variable, Variable> ogOldGlobalMap, Dictionary<string, Variable> domainNameToLocalVar)
+ {
+ CallCmd yieldCallCmd = CallToYieldProc(Token.NoToken, ogOldGlobalMap, domainNameToLocalVar);
+ Block yieldCheckBlock = new Block(Token.NoToken, "CallToYieldProc", new List<Cmd>(new Cmd[] { yieldCallCmd, new AssumeCmd(Token.NoToken, Expr.False) }), new ReturnCmd(Token.NoToken));
+ List<Block> newBlocks = new List<Block>();
+ foreach (Block b in impl.Blocks)
+ {
+ TransferCmd transferCmd = b.TransferCmd;
+ List<Cmd> newCmds = new List<Cmd>();
+ for (int i = b.Cmds.Count-1; i >= 0; i--)
+ {
+ CallCmd callCmd = b.Cmds[i] as CallCmd;
+ if (callCmd == null || callCmd.Proc != yieldProc)
+ {
+ newCmds.Insert(0, b.Cmds[i]);
+ }
+ else
+ {
+ Block newBlock = new Block(Token.NoToken, b.Label + i, newCmds, transferCmd);
+ newCmds = new List<Cmd>();
+ transferCmd = new GotoCmd(Token.NoToken, new List<string>(new string[] { newBlock.Label, yieldCheckBlock.Label }),
+ new List<Block>(new Block[] { newBlock, yieldCheckBlock }));
+ newBlocks.Add(newBlock);
+ }
+ }
+ b.Cmds = newCmds;
+ b.TransferCmd = transferCmd;
+ }
+ impl.Blocks.AddRange(newBlocks);
+ impl.Blocks.Add(yieldCheckBlock);
+ }
+
+ private List<List<Cmd>> CollectAndDesugarYields(Implementation impl,
+ Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<Variable, Variable> ogOldGlobalMap)
+ {
+ // Collect the yield predicates and desugar yields
+ List<List<Cmd>> yields = new List<List<Cmd>>();
+ List<Cmd> cmds = new List<Cmd>();
+ foreach (Block b in impl.Blocks)
+ {
+ YieldCmd yieldCmd = null;
+ List<Cmd> newCmds = new List<Cmd>();
+ for (int i = 0; i < b.Cmds.Count; i++)
+ {
+ Cmd cmd = b.Cmds[i];
+ if (cmd is YieldCmd)
+ {
+ yieldCmd = (YieldCmd)cmd;
+ continue;
+ }
+ if (yieldCmd != null)
+ {
+ PredicateCmd pcmd = cmd as PredicateCmd;
+ if (pcmd == null)
+ {
+ DesugarYield(yieldCmd, cmds, newCmds, ogOldGlobalMap, domainNameToInputVar, domainNameToLocalVar);
+ if (cmds.Count > 0)
+ {
+ yields.Add(cmds);
+ cmds = new List<Cmd>();
+ }
+ yieldCmd = null;
+ }
+ else
+ {
+ cmds.Add(pcmd);
+ }
+ }
+
+ if (cmd is CallCmd)
+ {
+ CallCmd callCmd = cmd as CallCmd;
+ if (yieldingProcs.Contains(callCmd.Proc))
+ {
+ AddCallToYieldProc(callCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
+ }
+ if (callCmd.IsAsync)
+ {
+ if (!asyncAndParallelCallDesugarings.ContainsKey(callCmd.Proc.Name))
+ {
+ asyncAndParallelCallDesugarings[callCmd.Proc.Name] = new Procedure(Token.NoToken, string.Format("DummyAsyncTarget_{0}", callCmd.Proc.Name), callCmd.Proc.TypeParameters, callCmd.Proc.InParams, callCmd.Proc.OutParams, callCmd.Proc.Requires, new List<IdentifierExpr>(), new List<Ensures>());
+ }
+ var dummyAsyncTargetProc = asyncAndParallelCallDesugarings[callCmd.Proc.Name];
+ CallCmd dummyCallCmd = new CallCmd(callCmd.tok, dummyAsyncTargetProc.Name, callCmd.Ins, callCmd.Outs, callCmd.Attributes);
+ dummyCallCmd.Proc = dummyAsyncTargetProc;
+ newCmds.Add(dummyCallCmd);
+ }
+ else
+ {
+ newCmds.Add(callCmd);
+ }
+ if (yieldingProcs.Contains(callCmd.Proc))
+ {
+ HashSet<Variable> availableLinearVars = new HashSet<Variable>(AvailableLinearVars(callCmd));
+ linearTypeChecker.AddAvailableVars(callCmd, availableLinearVars);
+
+ if (!callCmd.IsAsync && globalMods.Count > 0 && pc != null)
+ {
+ // assume pc || alpha(i, g);
+ Expr assumeExpr = Expr.Or(Expr.Ident(pc), alpha);
+ assumeExpr.Type = Type.Bool;
+ newCmds.Add(new AssumeCmd(Token.NoToken, assumeExpr));
+ }
+
+ Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(availableLinearVars, domainNameToInputVar);
+ AddUpdatesToOldGlobalVars(newCmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
+ }
+ }
+ else if (cmd is ParCallCmd)
+ {
+ ParCallCmd parCallCmd = cmd as ParCallCmd;
+ AddCallToYieldProc(parCallCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
+ DesugarParallelCallCmd(newCmds, parCallCmd);
+ HashSet<Variable> availableLinearVars = new HashSet<Variable>(AvailableLinearVars(parCallCmd));
+ linearTypeChecker.AddAvailableVars(parCallCmd, availableLinearVars);
+
+ if (globalMods.Count > 0 && pc != null)
+ {
+ // assume pc || alpha(i, g);
+ Expr assumeExpr = Expr.Or(Expr.Ident(pc), alpha);
+ assumeExpr.Type = Type.Bool;
+ newCmds.Add(new AssumeCmd(Token.NoToken, assumeExpr));
+ }
+
+ Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(availableLinearVars, domainNameToInputVar);
+ AddUpdatesToOldGlobalVars(newCmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
+ }
+ else
+ {
+ newCmds.Add(cmd);
+ }
+ }
+ if (yieldCmd != null)
+ {
+ DesugarYield(yieldCmd, cmds, newCmds, ogOldGlobalMap, domainNameToInputVar, domainNameToLocalVar);
+ if (cmds.Count > 0)
+ {
+ yields.Add(cmds);
+ cmds = new List<Cmd>();
+ }
+ }
+ if (b.TransferCmd is ReturnCmd)
+ {
+ AddCallToYieldProc(b.TransferCmd.tok, newCmds, ogOldGlobalMap, domainNameToLocalVar);
+ if (pc != null)
+ {
+ AssertCmd assertCmd = new AssertCmd(b.TransferCmd.tok, Expr.Ident(ok));
+ assertCmd.ErrorData = "Failed to execute atomic action before procedure return";
+ newCmds.Add(assertCmd);
+ }
+ }
+ b.Cmds = newCmds;
+ }
+ return yields;
+ }
+
+ private void ProcessLoopHeaders(Implementation impl, Graph<Block> graph, HashSet<Block> yieldingHeaders,
+ Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<Variable, Variable> ogOldGlobalMap,
+ out List<Variable> oldPcs, out List<Variable> oldOks)
+ {
+ oldPcs = new List<Variable>();
+ oldOks = new List<Variable>();
+ foreach (Block header in yieldingHeaders)
+ {
+ LocalVariable oldPc = null;
+ LocalVariable oldOk = null;
+ if (pc != null)
+ {
+ oldPc = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}", pc.Name, header.Label), Type.Bool));
+ oldPcs.Add(oldPc);
+ oldOk = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}", ok.Name, header.Label), Type.Bool));
+ oldOks.Add(oldOk);
+ }
+ Dictionary<string, Expr> domainNameToExpr = ComputeAvailableExprs(AvailableLinearVars(header), domainNameToInputVar);
+ foreach (Block pred in header.Predecessors)
+ {
+ AddCallToYieldProc(header.tok, pred.Cmds, ogOldGlobalMap, domainNameToLocalVar);
+ if (pc != null && !graph.BackEdgeNodes(header).Contains(pred))
+ {
+ pred.Cmds.Add(new AssignCmd(Token.NoToken, new List<AssignLhs>(
+ new AssignLhs[] { new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldPc)), new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldOk)) }),
+ new List<Expr>(new Expr[] { Expr.Ident(pc), Expr.Ident(ok) })));
+ }
+ AddUpdatesToOldGlobalVars(pred.Cmds, ogOldGlobalMap, domainNameToLocalVar, domainNameToExpr);
+ }
+ List<Cmd> newCmds = new List<Cmd>();
+ if (pc != null)
+ {
+ AssertCmd assertCmd;
+ assertCmd = new AssertCmd(header.tok, Expr.Eq(Expr.Ident(oldPc), Expr.Ident(pc)));
+ assertCmd.ErrorData = "Specification state must not change for transitions ending in loop headers";
+ newCmds.Add(assertCmd);
+ assertCmd = new AssertCmd(header.tok, Expr.Imp(Expr.Ident(oldOk), Expr.Ident(ok)));
+ assertCmd.ErrorData = "Specification state must not change for transitions ending in loop headers";
+ newCmds.Add(assertCmd);
+ }
+ foreach (string domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ newCmds.Add(new AssumeCmd(Token.NoToken, Expr.Eq(Expr.Ident(domainNameToLocalVar[domainName]), domainNameToExpr[domainName])));
+ }
+ foreach (Variable v in ogOldGlobalMap.Keys)
+ {
+ newCmds.Add(new AssumeCmd(Token.NoToken, Expr.Eq(Expr.Ident(v), Expr.Ident(ogOldGlobalMap[v]))));
+ }
+ newCmds.AddRange(header.Cmds);
+ header.Cmds = newCmds;
+ }
+ }
+
+ private void AddInitialBlock(Implementation impl, List<Variable> oldPcs, List<Variable> oldOks,
+ Dictionary<string, Variable> domainNameToInputVar, Dictionary<string, Variable> domainNameToLocalVar, Dictionary<Variable, Variable> ogOldGlobalMap)
+ {
+ // Add initial block
+ List<AssignLhs> lhss = new List<AssignLhs>();
+ List<Expr> rhss = new List<Expr>();
+ if (pc != null)
+ {
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(pc)));
+ rhss.Add(Expr.False);
+ foreach (Variable oldPc in oldPcs)
+ {
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldPc)));
+ rhss.Add(Expr.False);
+ }
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(ok)));
+ rhss.Add(Expr.False);
+ foreach (Variable oldOk in oldOks)
+ {
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(oldOk)));
+ rhss.Add(Expr.False);
+ }
+ }
+ Dictionary<string, Expr> domainNameToExpr = new Dictionary<string, Expr>();
+ foreach (var domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ domainNameToExpr[domainName] = Expr.Ident(domainNameToInputVar[domainName]);
+ }
+ for (int i = 0; i < impl.InParams.Count - linearTypeChecker.linearDomains.Count; i++)
+ {
+ Variable v = impl.InParams[i];
+ var domainName = linearTypeChecker.FindDomainName(v);
+ if (domainName == null) continue;
+ if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
+ var domain = linearTypeChecker.linearDomains[domainName];
+ if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
+ Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
+ domainNameToExpr[domainName] = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapOrBool), new List<Expr> { ie, domainNameToExpr[domainName] });
+ }
+ foreach (string domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(domainNameToLocalVar[domainName])));
+ rhss.Add(domainNameToExpr[domainName]);
+ }
+ foreach (Variable g in ogOldGlobalMap.Keys)
+ {
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, Expr.Ident(ogOldGlobalMap[g])));
+ rhss.Add(Expr.Ident(g));
+ }
+ if (lhss.Count > 0)
+ {
+ Block initBlock = new Block(Token.NoToken, "og_init", new List<Cmd> { new AssignCmd(Token.NoToken, lhss, rhss) }, new GotoCmd(Token.NoToken, new List<String> { impl.Blocks[0].Label }, new List<Block> { impl.Blocks[0] }));
+ impl.Blocks.Insert(0, initBlock);
+ }
+ }
+
+ private void AddYieldProcAndImpl(List<Declaration> decls)
+ {
+ if (yieldProc == null) return;
+
+ Program program = linearTypeChecker.program;
+ List<Variable> inputs = new List<Variable>();
+ foreach (string domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ var domain = linearTypeChecker.linearDomains[domainName];
+ Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "linear_" + domainName + "_in", new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Type.Bool)), true);
+ inputs.Add(f);
+ }
+ foreach (IdentifierExpr ie in globalMods)
+ {
+ Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("og_global_old_{0}", ie.Decl.Name), ie.Decl.TypedIdent.Type), true);
+ inputs.Add(f);
+ }
+ List<Block> blocks = new List<Block>();
+ TransferCmd transferCmd = new ReturnCmd(Token.NoToken);
+ if (yieldCheckerProcs.Count > 0)
+ {
+ List<Block> blockTargets = new List<Block>();
+ List<String> labelTargets = new List<String>();
+ int labelCount = 0;
+ foreach (Procedure proc in yieldCheckerProcs)
+ {
+ List<Expr> exprSeq = new List<Expr>();
+ foreach (Variable v in inputs)
+ {
+ exprSeq.Add(Expr.Ident(v));
+ }
+ CallCmd callCmd = new CallCmd(Token.NoToken, proc.Name, exprSeq, new List<IdentifierExpr>());
+ callCmd.Proc = proc;
+ string label = string.Format("L_{0}", labelCount++);
+ Block block = new Block(Token.NoToken, label, new List<Cmd> { callCmd }, new ReturnCmd(Token.NoToken));
+ labelTargets.Add(label);
+ blockTargets.Add(block);
+ blocks.Add(block);
+ }
+ transferCmd = new GotoCmd(Token.NoToken, labelTargets, blockTargets);
+ }
+ blocks.Insert(0, new Block(Token.NoToken, "enter", new List<Cmd>(), transferCmd));
+
+ var yieldImpl = new Implementation(Token.NoToken, yieldProc.Name, new List<TypeVariable>(), inputs, new List<Variable>(), new List<Variable>(), blocks);
+ yieldImpl.Proc = yieldProc;
+ yieldImpl.AddAttribute("inline", new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(1)));
+ decls.Add(yieldProc);
+ decls.Add(yieldImpl);
+ }
+
+ public static QKeyValue RemoveYieldsAttribute(QKeyValue iter)
+ {
+ if (iter == null) return null;
+ iter.Next = RemoveYieldsAttribute(iter.Next);
+ return (iter.Key == "yields") ? iter.Next : iter;
+ }
+
+ public static QKeyValue RemoveMoverAttribute(QKeyValue iter)
+ {
+ if (iter == null) return null;
+ iter.Next = RemoveMoverAttribute(iter.Next);
+ if (iter.Key == "atomic" || iter.Key == "right" || iter.Key == "left" || iter.Key == "both")
+ return iter.Next;
+ else
+ return iter;
+ }
+
+ private List<Declaration> Collect()
+ {
+ List<Declaration> decls = new List<Declaration>();
+ foreach (Procedure proc in yieldCheckerProcs)
+ {
+ decls.Add(proc);
+ }
+ foreach (Implementation impl in yieldCheckerImpls)
+ {
+ decls.Add(impl);
+ }
+ foreach (Procedure proc in asyncAndParallelCallDesugarings.Values)
+ {
+ decls.Add(proc);
+ }
+ AddYieldProcAndImpl(decls);
+ return decls;
+ }
+
+ public static void AddCheckers(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker, List<Declaration> decls)
+ {
+ Program program = linearTypeChecker.program;
+ foreach (int layerNum in civlTypeChecker.AllLayerNums)
+ {
+ if (CommandLineOptions.Clo.TrustLayersDownto <= layerNum || layerNum <= CommandLineOptions.Clo.TrustLayersUpto) continue;
+
+ MyDuplicator duplicator = new MyDuplicator(civlTypeChecker, layerNum);
+ foreach (var proc in program.Procedures)
+ {
+ if (!civlTypeChecker.procToActionInfo.ContainsKey(proc)) continue;
+ Procedure duplicateProc = duplicator.VisitProcedure(proc);
+ decls.Add(duplicateProc);
+ }
+ decls.AddRange(duplicator.impls);
+ CivlRefinement civlTransform = new CivlRefinement(linearTypeChecker, civlTypeChecker, duplicator);
+ foreach (var impl in program.Implementations)
+ {
+ if (!civlTypeChecker.procToActionInfo.ContainsKey(impl.Proc) || civlTypeChecker.procToActionInfo[impl.Proc].createdAtLayerNum < layerNum)
+ continue;
+ Implementation duplicateImpl = duplicator.VisitImplementation(impl);
+ civlTransform.TransformImpl(duplicateImpl);
+ decls.Add(duplicateImpl);
+ }
+ decls.AddRange(civlTransform.Collect());
+ }
+ }
+ }
+}
diff --git a/Source/Concurrency/CivlTypeChecker.cs b/Source/Concurrency/CivlTypeChecker.cs
new file mode 100644
index 00000000..b426d9ed
--- /dev/null
+++ b/Source/Concurrency/CivlTypeChecker.cs
@@ -0,0 +1,1160 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Boogie;
+using System.Diagnostics.Contracts;
+using System.Diagnostics;
+
+namespace Microsoft.Boogie
+{
+ public enum MoverType
+ {
+ Top,
+ Atomic,
+ Right,
+ Left,
+ Both
+ }
+
+ public class ActionInfo
+ {
+ public Procedure proc;
+ public int createdAtLayerNum;
+ public int availableUptoLayerNum;
+ public bool hasImplementation;
+ public bool isExtern;
+
+ public ActionInfo(Procedure proc, int createdAtLayerNum, int availableUptoLayerNum)
+ {
+ this.proc = proc;
+ this.createdAtLayerNum = createdAtLayerNum;
+ this.availableUptoLayerNum = availableUptoLayerNum;
+ this.hasImplementation = false;
+ this.isExtern = QKeyValue.FindBoolAttribute(proc.Attributes, "extern");
+ }
+
+ public virtual bool IsRightMover
+ {
+ get { return true; }
+ }
+
+ public virtual bool IsLeftMover
+ {
+ get { return true; }
+ }
+ }
+
+ public class AtomicActionInfo : ActionInfo
+ {
+ public Ensures ensures;
+ public MoverType moverType;
+ public List<AssertCmd> gate;
+ public CodeExpr action;
+ public List<AssertCmd> thisGate;
+ public CodeExpr thisAction;
+ public List<Variable> thisInParams;
+ public List<Variable> thisOutParams;
+ public List<AssertCmd> thatGate;
+ public CodeExpr thatAction;
+ public List<Variable> thatInParams;
+ public List<Variable> thatOutParams;
+ public HashSet<Variable> actionUsedGlobalVars;
+ public HashSet<Variable> modifiedGlobalVars;
+ public HashSet<Variable> gateUsedGlobalVars;
+ public bool hasAssumeCmd;
+ public Dictionary<Variable, Expr> thisMap;
+ public Dictionary<Variable, Expr> thatMap;
+
+ public bool CommutesWith(AtomicActionInfo actionInfo)
+ {
+ if (this.modifiedGlobalVars.Intersect(actionInfo.actionUsedGlobalVars).Count() > 0)
+ return false;
+ if (this.actionUsedGlobalVars.Intersect(actionInfo.modifiedGlobalVars).Count() > 0)
+ return false;
+ return true;
+ }
+
+ public override bool IsRightMover
+ {
+ get { return moverType == MoverType.Right || moverType == MoverType.Both; }
+ }
+
+ public override bool IsLeftMover
+ {
+ get { return moverType == MoverType.Left || moverType == MoverType.Both; }
+ }
+
+ public AtomicActionInfo(Procedure proc, Ensures ensures, MoverType moverType, int layerNum, int availableUptoLayerNum)
+ : base(proc, layerNum, availableUptoLayerNum)
+ {
+ this.ensures = ensures;
+ this.moverType = moverType;
+ this.gate = new List<AssertCmd>();
+ this.action = ensures.Condition as CodeExpr;
+ this.thisGate = new List<AssertCmd>();
+ this.thisInParams = new List<Variable>();
+ this.thisOutParams = new List<Variable>();
+ this.thatGate = new List<AssertCmd>();
+ this.thatInParams = new List<Variable>();
+ this.thatOutParams = new List<Variable>();
+ this.hasAssumeCmd = false;
+ this.thisMap = new Dictionary<Variable, Expr>();
+ this.thatMap = new Dictionary<Variable, Expr>();
+
+ foreach (Block block in this.action.Blocks)
+ {
+ block.Cmds.ForEach(x => this.hasAssumeCmd = this.hasAssumeCmd || x is AssumeCmd);
+ }
+
+ foreach (Block block in this.action.Blocks)
+ {
+ if (block.TransferCmd is ReturnExprCmd)
+ {
+ block.TransferCmd = new ReturnCmd(block.TransferCmd.tok);
+ }
+ }
+
+ var cmds = this.action.Blocks[0].Cmds;
+ for (int i = 0; i < cmds.Count; i++)
+ {
+ AssertCmd assertCmd = cmds[i] as AssertCmd;
+ if (assertCmd == null) break;
+ this.gate.Add(assertCmd);
+ cmds[i] = new AssumeCmd(assertCmd.tok, Expr.True);
+ }
+
+ foreach (Variable x in proc.InParams)
+ {
+ Variable thisx = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "this_" + x.Name, x.TypedIdent.Type), true, x.Attributes);
+ this.thisInParams.Add(thisx);
+ this.thisMap[x] = Expr.Ident(thisx);
+ Variable thatx = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "that_" + x.Name, x.TypedIdent.Type), true, x.Attributes);
+ this.thatInParams.Add(thatx);
+ this.thatMap[x] = Expr.Ident(thatx);
+ }
+ foreach (Variable x in proc.OutParams)
+ {
+ Variable thisx = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "this_" + x.Name, x.TypedIdent.Type), false, x.Attributes);
+ this.thisOutParams.Add(thisx);
+ this.thisMap[x] = Expr.Ident(thisx);
+ Variable thatx = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "that_" + x.Name, x.TypedIdent.Type), false, x.Attributes);
+ this.thatOutParams.Add(thatx);
+ this.thatMap[x] = Expr.Ident(thatx);
+ }
+ List<Variable> thisLocVars = new List<Variable>();
+ List<Variable> thatLocVars = new List<Variable>();
+ foreach (Variable x in this.action.LocVars)
+ {
+ Variable thisx = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "this_" + x.Name, x.TypedIdent.Type), false);
+ thisMap[x] = Expr.Ident(thisx);
+ thisLocVars.Add(thisx);
+ Variable thatx = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "that_" + x.Name, x.TypedIdent.Type), false);
+ thatMap[x] = Expr.Ident(thatx);
+ thatLocVars.Add(thatx);
+ }
+ Contract.Assume(proc.TypeParameters.Count == 0);
+ Substitution thisSubst = Substituter.SubstitutionFromHashtable(this.thisMap);
+ Substitution thatSubst = Substituter.SubstitutionFromHashtable(this.thatMap);
+ foreach (AssertCmd assertCmd in this.gate)
+ {
+ this.thisGate.Add((AssertCmd)Substituter.Apply(thisSubst, assertCmd));
+ this.thatGate.Add((AssertCmd)Substituter.Apply(thatSubst, assertCmd));
+ }
+ this.thisAction = new CodeExpr(thisLocVars, SubstituteBlocks(this.action.Blocks, thisSubst, "this_"));
+ this.thatAction = new CodeExpr(thatLocVars, SubstituteBlocks(this.action.Blocks, thatSubst, "that_"));
+
+ {
+ VariableCollector collector = new VariableCollector();
+ collector.Visit(this.action);
+ this.actionUsedGlobalVars = new HashSet<Variable>(collector.usedVars.Where(x => x is GlobalVariable));
+ }
+
+ List<Variable> modifiedVars = new List<Variable>();
+ foreach (Block block in this.action.Blocks)
+ {
+ block.Cmds.ForEach(cmd => cmd.AddAssignedVariables(modifiedVars));
+ }
+ this.modifiedGlobalVars = new HashSet<Variable>(modifiedVars.Where(x => x is GlobalVariable));
+
+ {
+ VariableCollector collector = new VariableCollector();
+ this.gate.ForEach(assertCmd => collector.Visit(assertCmd));
+ this.gateUsedGlobalVars = new HashSet<Variable>(collector.usedVars.Where(x => x is GlobalVariable));
+ }
+ }
+
+ private List<Block> SubstituteBlocks(List<Block> blocks, Substitution subst, string blockLabelPrefix)
+ {
+ Dictionary<Block, Block> blockMap = new Dictionary<Block, Block>();
+ List<Block> otherBlocks = new List<Block>();
+ foreach (Block block in blocks)
+ {
+ List<Cmd> otherCmds = new List<Cmd>();
+ foreach (Cmd cmd in block.Cmds)
+ {
+ otherCmds.Add(Substituter.Apply(subst, cmd));
+ }
+ Block otherBlock = new Block();
+ otherBlock.Cmds = otherCmds;
+ otherBlock.Label = blockLabelPrefix + block.Label;
+ otherBlocks.Add(otherBlock);
+ blockMap[block] = otherBlock;
+ }
+ foreach (Block block in blocks)
+ {
+ if (block.TransferCmd is ReturnCmd)
+ {
+ blockMap[block].TransferCmd = new ReturnCmd(block.TransferCmd.tok);
+ continue;
+ }
+ List<Block> otherGotoCmdLabelTargets = new List<Block>();
+ List<string> otherGotoCmdLabelNames = new List<string>();
+ GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
+ foreach (Block target in gotoCmd.labelTargets)
+ {
+ otherGotoCmdLabelTargets.Add(blockMap[target]);
+ otherGotoCmdLabelNames.Add(blockMap[target].Label);
+ }
+ blockMap[block].TransferCmd = new GotoCmd(block.TransferCmd.tok, otherGotoCmdLabelNames, otherGotoCmdLabelTargets);
+ }
+ return otherBlocks;
+ }
+ }
+
+ public class SharedVariableInfo
+ {
+ public int introLayerNum;
+ public int hideLayerNum;
+
+ public SharedVariableInfo(int introLayerNum, int hideLayerNum)
+ {
+ this.introLayerNum = introLayerNum;
+ this.hideLayerNum = hideLayerNum;
+ }
+ }
+
+ public class LayerEraser : ReadOnlyVisitor
+ {
+ private QKeyValue RemoveLayerAttribute(QKeyValue iter)
+ {
+ if (iter == null) return null;
+ iter.Next = RemoveLayerAttribute(iter.Next);
+ return (iter.Key == "layer") ? iter.Next : iter;
+ }
+
+ public override Variable VisitVariable(Variable node)
+ {
+ node.Attributes = RemoveLayerAttribute(node.Attributes);
+ return base.VisitVariable(node);
+ }
+
+ public override Procedure VisitProcedure(Procedure node)
+ {
+ node.Attributes = RemoveLayerAttribute(node.Attributes);
+ return base.VisitProcedure(node);
+ }
+
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ node.Attributes = RemoveLayerAttribute(node.Attributes);
+ return base.VisitImplementation(node);
+ }
+
+ public override Requires VisitRequires(Requires node)
+ {
+ node.Attributes = RemoveLayerAttribute(node.Attributes);
+ return base.VisitRequires(node);
+ }
+
+ public override Ensures VisitEnsures(Ensures node)
+ {
+ node.Attributes = RemoveLayerAttribute(node.Attributes);
+ return base.VisitEnsures(node);
+ }
+
+ public override Cmd VisitAssertCmd(AssertCmd node)
+ {
+ node.Attributes = RemoveLayerAttribute(node.Attributes);
+ return base.VisitAssertCmd(node);
+ }
+ }
+
+ public class LayerRange
+ {
+ public int lowerLayerNum;
+ public int upperLayerNum;
+ public LayerRange(int layer)
+ {
+ this.lowerLayerNum = layer;
+ this.upperLayerNum = layer;
+ }
+ public LayerRange(int lower, int upper)
+ {
+ this.lowerLayerNum = lower;
+ this.upperLayerNum = upper;
+ }
+ public LayerRange(IEnumerable<int> layerNums)
+ {
+ int min = int.MaxValue;
+ int max = int.MinValue;
+ foreach (var layerNum in layerNums)
+ {
+ if (layerNum < min)
+ {
+ min = layerNum;
+ }
+ if (max < layerNum)
+ {
+ max = layerNum;
+ }
+ }
+ this.lowerLayerNum = min;
+ this.upperLayerNum = max;
+ }
+ public bool Contains(int layerNum)
+ {
+ return lowerLayerNum <= layerNum && layerNum <= upperLayerNum;
+ }
+ public bool Subset(int lower, int upper)
+ {
+ return lower <= lowerLayerNum && upperLayerNum <= upper;
+ }
+ public bool Equal(int lower, int upper)
+ {
+ return lower == lowerLayerNum && upperLayerNum == upper;
+ }
+ public bool Subset(LayerRange info)
+ {
+ return info.lowerLayerNum <= lowerLayerNum && upperLayerNum <= info.upperLayerNum;
+ }
+ }
+
+ public class AtomicProcedureInfo
+ {
+ public bool isPure;
+ public LayerRange layerRange;
+ public AtomicProcedureInfo()
+ {
+ this.isPure = true;
+ this.layerRange = null;
+ }
+ public AtomicProcedureInfo(LayerRange layerRange)
+ {
+ this.isPure = false;
+ this.layerRange = layerRange;
+ }
+ }
+
+ public class LocalVariableInfo
+ {
+ public int layer;
+ public LocalVariableInfo(int layer)
+ {
+ this.layer = layer;
+ }
+ }
+
+ public class CivlTypeChecker : ReadOnlyVisitor
+ {
+ CheckingContext checkingContext;
+ Procedure enclosingProc;
+ Implementation enclosingImpl;
+ HashSet<Variable> sharedVarsAccessed;
+ int introducedLocalVarsUpperBound;
+
+ public Program program;
+ public int errorCount;
+ public Dictionary<Variable, SharedVariableInfo> globalVarToSharedVarInfo;
+ public Dictionary<Procedure, ActionInfo> procToActionInfo;
+ public Dictionary<Procedure, AtomicProcedureInfo> procToAtomicProcedureInfo;
+ public Dictionary<Absy, HashSet<int>> absyToLayerNums;
+ public Dictionary<Variable, LocalVariableInfo> localVarToLocalVariableInfo;
+ Dictionary<CallCmd, int> pureCallLayer;
+
+ public bool CallExists(CallCmd callCmd, int enclosingProcLayerNum, int layerNum)
+ {
+ Debug.Assert(procToAtomicProcedureInfo.ContainsKey(callCmd.Proc));
+ var atomicProcedureInfo = procToAtomicProcedureInfo[callCmd.Proc];
+ if (atomicProcedureInfo.isPure)
+ {
+ return pureCallLayer[callCmd] <= layerNum;
+ }
+ else
+ {
+ return enclosingProcLayerNum == layerNum;
+ }
+ }
+
+ private static List<int> FindLayers(QKeyValue kv)
+ {
+ List<int> layers = new List<int>();
+ for (; kv != null; kv = kv.Next)
+ {
+ if (kv.Key != "layer") continue;
+ foreach (var o in kv.Params)
+ {
+ Expr e = o as Expr;
+ if (e == null) return null;
+ LiteralExpr l = e as LiteralExpr;
+ if (l == null) return null;
+ if (!l.isBigNum) return null;
+ layers.Add(l.asBigNum.ToIntSafe);
+ }
+ }
+ return layers;
+ }
+
+ private static int Least(IEnumerable<int> layerNums)
+ {
+ int least = int.MaxValue;
+ foreach (var layer in layerNums)
+ {
+ if (layer < least)
+ {
+ least = layer;
+ }
+ }
+ return least;
+ }
+
+ private static MoverType GetMoverType(Ensures e)
+ {
+ if (QKeyValue.FindBoolAttribute(e.Attributes, "atomic"))
+ return MoverType.Atomic;
+ if (QKeyValue.FindBoolAttribute(e.Attributes, "right"))
+ return MoverType.Right;
+ if (QKeyValue.FindBoolAttribute(e.Attributes, "left"))
+ return MoverType.Left;
+ if (QKeyValue.FindBoolAttribute(e.Attributes, "both"))
+ return MoverType.Both;
+ return MoverType.Top;
+ }
+
+ public CivlTypeChecker(Program program)
+ {
+ this.errorCount = 0;
+ this.checkingContext = new CheckingContext(null);
+ this.program = program;
+ this.enclosingProc = null;
+ this.enclosingImpl = null;
+ this.sharedVarsAccessed = null;
+ this.introducedLocalVarsUpperBound = int.MinValue;
+
+ this.localVarToLocalVariableInfo = new Dictionary<Variable, LocalVariableInfo>();
+ this.absyToLayerNums = new Dictionary<Absy, HashSet<int>>();
+ this.globalVarToSharedVarInfo = new Dictionary<Variable, SharedVariableInfo>();
+ this.procToActionInfo = new Dictionary<Procedure, ActionInfo>();
+ this.procToAtomicProcedureInfo = new Dictionary<Procedure, AtomicProcedureInfo>();
+ this.pureCallLayer = new Dictionary<CallCmd, int>();
+
+ foreach (var g in program.GlobalVariables)
+ {
+ List<int> layerNums = FindLayers(g.Attributes);
+ if (layerNums.Count == 0)
+ {
+ // Inaccessible from yielding and atomic procedures
+ }
+ else if (layerNums.Count == 1)
+ {
+ this.globalVarToSharedVarInfo[g] = new SharedVariableInfo(layerNums[0], int.MaxValue);
+ }
+ else if (layerNums.Count == 2)
+ {
+ this.globalVarToSharedVarInfo[g] = new SharedVariableInfo(layerNums[0], layerNums[1]);
+ }
+ else
+ {
+ Error(g, "Too many layer numbers");
+ }
+ }
+ }
+
+ private HashSet<int> allLayerNums;
+ public IEnumerable<int> AllLayerNums
+ {
+ get
+ {
+ if (allLayerNums == null)
+ {
+ allLayerNums = new HashSet<int>();
+ foreach (ActionInfo actionInfo in procToActionInfo.Values)
+ {
+ allLayerNums.Add(actionInfo.createdAtLayerNum);
+ }
+ foreach (var layerNums in absyToLayerNums.Values)
+ {
+ foreach (var layer in layerNums)
+ {
+ allLayerNums.Add(layer);
+ }
+ }
+ }
+ return allLayerNums;
+ }
+ }
+
+ private LayerRange FindLayerRange()
+ {
+ int maxIntroLayerNum = int.MinValue;
+ int minHideLayerNum = int.MaxValue;
+ foreach (var g in sharedVarsAccessed)
+ {
+ if (globalVarToSharedVarInfo[g].introLayerNum > maxIntroLayerNum)
+ {
+ maxIntroLayerNum = globalVarToSharedVarInfo[g].introLayerNum;
+ }
+ if (globalVarToSharedVarInfo[g].hideLayerNum < minHideLayerNum)
+ {
+ minHideLayerNum = globalVarToSharedVarInfo[g].hideLayerNum;
+ }
+ }
+ return new LayerRange(maxIntroLayerNum, minHideLayerNum);
+ }
+
+ public void TypeCheck()
+ {
+ foreach (var proc in program.Procedures)
+ {
+ if (!QKeyValue.FindBoolAttribute(proc.Attributes, "pure")) continue;
+ if (QKeyValue.FindBoolAttribute(proc.Attributes, "yields"))
+ {
+ Error(proc, "Pure procedure must not yield");
+ continue;
+ }
+ if (QKeyValue.FindBoolAttribute(proc.Attributes, "layer"))
+ {
+ Error(proc, "Pure procedure must not have layers");
+ continue;
+ }
+ if (proc.Modifies.Count > 0)
+ {
+ Error(proc, "Pure procedure must not modify a global variable");
+ continue;
+ }
+ procToAtomicProcedureInfo[proc] = new AtomicProcedureInfo();
+ }
+ foreach (var proc in program.Procedures)
+ {
+ if (QKeyValue.FindBoolAttribute(proc.Attributes, "yields")) continue;
+ var procLayerNums = FindLayers(proc.Attributes);
+ if (procLayerNums.Count == 0) continue;
+ foreach (IdentifierExpr ie in proc.Modifies)
+ {
+ if (!globalVarToSharedVarInfo.ContainsKey(ie.Decl))
+ {
+ Error(proc, "Atomic procedure cannot modify a global variable without layer numbers");
+ continue;
+ }
+ }
+ int lower, upper;
+ if (procLayerNums.Count == 1)
+ {
+ lower = procLayerNums[0];
+ upper = procLayerNums[0];
+ }
+ else if (procLayerNums.Count == 2)
+ {
+ lower = procLayerNums[0];
+ upper = procLayerNums[1];
+ if (lower >= upper)
+ {
+ Error(proc, "Lower layer must be less than upper layer");
+ continue;
+ }
+ }
+ else
+ {
+ Error(proc, "Atomic procedure must specify a layer range");
+ continue;
+ }
+ LayerRange layerRange = new LayerRange(lower, upper);
+ procToAtomicProcedureInfo[proc] = new AtomicProcedureInfo(layerRange);
+ }
+ if (errorCount > 0) return;
+
+ foreach (Implementation impl in program.Implementations)
+ {
+ if (!procToAtomicProcedureInfo.ContainsKey(impl.Proc)) continue;
+ var atomicProcedureInfo = procToAtomicProcedureInfo[impl.Proc];
+ if (atomicProcedureInfo.isPure)
+ {
+ this.enclosingImpl = impl;
+ (new PurityChecker(this)).VisitImplementation(impl);
+ }
+ else
+ {
+ this.enclosingImpl = impl;
+ this.sharedVarsAccessed = new HashSet<Variable>();
+ (new PurityChecker(this)).VisitImplementation(impl);
+ LayerRange upperBound = FindLayerRange();
+ LayerRange lowerBound = atomicProcedureInfo.layerRange;
+ if (!lowerBound.Subset(upperBound))
+ {
+ Error(impl, "Atomic procedure cannot access global variable");
+ }
+ this.sharedVarsAccessed = null;
+ }
+ }
+ if (errorCount > 0) return;
+
+ foreach (var proc in program.Procedures)
+ {
+ if (!QKeyValue.FindBoolAttribute(proc.Attributes, "yields")) continue;
+
+ int createdAtLayerNum; // must be initialized by the following code, otherwise it is an error
+ int availableUptoLayerNum = int.MaxValue;
+ List<int> attrs = FindLayers(proc.Attributes);
+ if (attrs.Count == 1)
+ {
+ createdAtLayerNum = attrs[0];
+ }
+ else if (attrs.Count == 2)
+ {
+ createdAtLayerNum = attrs[0];
+ availableUptoLayerNum = attrs[1];
+ }
+ else
+ {
+ Error(proc, "Incorrect number of layers");
+ continue;
+ }
+ foreach (Ensures e in proc.Ensures)
+ {
+ MoverType moverType = GetMoverType(e);
+ if (moverType == MoverType.Top) continue;
+ CodeExpr codeExpr = e.Condition as CodeExpr;
+ if (codeExpr == null)
+ {
+ Error(e, "An atomic action must be a CodeExpr");
+ continue;
+ }
+ if (procToActionInfo.ContainsKey(proc))
+ {
+ Error(proc, "A procedure can have at most one atomic action");
+ continue;
+ }
+ if (availableUptoLayerNum <= createdAtLayerNum)
+ {
+ Error(proc, "Creation layer number must be less than the available upto layer number");
+ continue;
+ }
+
+ sharedVarsAccessed = new HashSet<Variable>();
+ enclosingProc = proc;
+ enclosingImpl = null;
+ base.VisitEnsures(e);
+ LayerRange upperBound = FindLayerRange();
+ LayerRange lowerBound = new LayerRange(createdAtLayerNum, availableUptoLayerNum);
+ if (lowerBound.Subset(upperBound))
+ {
+ procToActionInfo[proc] = new AtomicActionInfo(proc, e, moverType, createdAtLayerNum, availableUptoLayerNum);
+ }
+ else
+ {
+ Error(e, "A variable being accessed in this action is unavailable");
+ }
+ sharedVarsAccessed = null;
+ }
+ if (errorCount > 0) continue;
+ if (!procToActionInfo.ContainsKey(proc))
+ {
+ if (availableUptoLayerNum < createdAtLayerNum)
+ {
+ Error(proc, "Creation layer number must be no more than the available upto layer number");
+ continue;
+ }
+ else
+ {
+ procToActionInfo[proc] = new ActionInfo(proc, createdAtLayerNum, availableUptoLayerNum);
+ }
+ }
+ }
+ if (errorCount > 0) return;
+
+ foreach (var impl in program.Implementations)
+ {
+ if (!procToActionInfo.ContainsKey(impl.Proc)) continue;
+ ActionInfo actionInfo = procToActionInfo[impl.Proc];
+ procToActionInfo[impl.Proc].hasImplementation = true;
+ if (actionInfo.isExtern)
+ {
+ Error(impl.Proc, "Extern procedure cannot have an implementation");
+ }
+ }
+ if (errorCount > 0) return;
+
+ foreach (Procedure proc in procToActionInfo.Keys)
+ {
+ for (int i = 0; i < proc.InParams.Count; i++)
+ {
+ Variable v = proc.InParams[i];
+ var layer = FindLocalVariableLayer(proc, v, procToActionInfo[proc].createdAtLayerNum);
+ if (layer == int.MinValue) continue;
+ localVarToLocalVariableInfo[v] = new LocalVariableInfo(layer);
+ }
+ for (int i = 0; i < proc.OutParams.Count; i++)
+ {
+ Variable v = proc.OutParams[i];
+ var layer = FindLocalVariableLayer(proc, v, procToActionInfo[proc].createdAtLayerNum);
+ if (layer == int.MinValue) continue;
+ localVarToLocalVariableInfo[v] = new LocalVariableInfo(layer);
+ }
+ }
+ foreach (Implementation node in program.Implementations)
+ {
+ if (!procToActionInfo.ContainsKey(node.Proc)) continue;
+ foreach (Variable v in node.LocVars)
+ {
+ var layer = FindLocalVariableLayer(node, v, procToActionInfo[node.Proc].createdAtLayerNum);
+ if (layer == int.MinValue) continue;
+ localVarToLocalVariableInfo[v] = new LocalVariableInfo(layer);
+ }
+ for (int i = 0; i < node.Proc.InParams.Count; i++)
+ {
+ Variable v = node.Proc.InParams[i];
+ if (!localVarToLocalVariableInfo.ContainsKey(v)) continue;
+ var layer = localVarToLocalVariableInfo[v].layer;
+ localVarToLocalVariableInfo[node.InParams[i]] = new LocalVariableInfo(layer);
+ }
+ for (int i = 0; i < node.Proc.OutParams.Count; i++)
+ {
+ Variable v = node.Proc.OutParams[i];
+ if (!localVarToLocalVariableInfo.ContainsKey(v)) continue;
+ var layer = localVarToLocalVariableInfo[v].layer;
+ localVarToLocalVariableInfo[node.OutParams[i]] = new LocalVariableInfo(layer);
+ }
+ }
+ if (errorCount > 0) return;
+
+ this.VisitProgram(program);
+ if (errorCount > 0) return;
+ YieldTypeChecker.PerformYieldSafeCheck(this);
+ new LayerEraser().VisitProgram(program);
+ }
+
+ public IEnumerable<Variable> SharedVariables
+ {
+ get { return this.globalVarToSharedVarInfo.Keys; }
+ }
+
+ private int FindLocalVariableLayer(Declaration decl, Variable v, int enclosingProcLayerNum)
+ {
+ var layers = FindLayers(v.Attributes);
+ if (layers.Count == 0) return int.MinValue;
+ if (layers.Count > 1)
+ {
+ Error(decl, "Incorrect number of layers");
+ return int.MinValue;
+ }
+ if (layers[0] > enclosingProcLayerNum)
+ {
+ Error(decl, "Layer of local variable cannot be greater than the creation layer of enclosing procedure");
+ return int.MinValue;
+ }
+ return layers[0];
+ }
+
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ if (!procToActionInfo.ContainsKey(node.Proc))
+ {
+ return node;
+ }
+ this.enclosingImpl = node;
+ this.enclosingProc = null;
+ return base.VisitImplementation(node);
+ }
+
+ public override Procedure VisitProcedure(Procedure node)
+ {
+ if (!procToActionInfo.ContainsKey(node))
+ {
+ return node;
+ }
+ this.enclosingProc = node;
+ this.enclosingImpl = null;
+ return base.VisitProcedure(node);
+ }
+
+ public override Cmd VisitCallCmd(CallCmd node)
+ {
+ int enclosingProcLayerNum = procToActionInfo[enclosingImpl.Proc].createdAtLayerNum;
+ if (procToActionInfo.ContainsKey(node.Proc))
+ {
+ ActionInfo actionInfo = procToActionInfo[node.Proc];
+ if (node.IsAsync && actionInfo is AtomicActionInfo)
+ {
+ Error(node, "Target of async call cannot be an atomic action");
+ }
+ int calleeLayerNum = procToActionInfo[node.Proc].createdAtLayerNum;
+ if (enclosingProcLayerNum < calleeLayerNum ||
+ (enclosingProcLayerNum == calleeLayerNum && actionInfo is AtomicActionInfo))
+ {
+ Error(node, "The layer of the caller must be greater than the layer of the callee");
+ }
+ else if (enclosingProcLayerNum == calleeLayerNum && enclosingImpl.OutParams.Count > 0)
+ {
+ HashSet<Variable> outParams = new HashSet<Variable>(enclosingImpl.OutParams);
+ foreach (var x in node.Outs)
+ {
+ if (x.Decl is GlobalVariable)
+ {
+ Error(node, "A global variable cannot be used as output argument for this call");
+ }
+ else if (outParams.Contains(x.Decl))
+ {
+ Error(node, "An output variable of the enclosing implementation cannot be used as output argument for this call");
+ }
+ }
+ }
+ if (actionInfo.availableUptoLayerNum < enclosingProcLayerNum)
+ {
+ Error(node, "The callee is not available in the caller procedure");
+ }
+ for (int i = 0; i < node.Ins.Count; i++)
+ {
+ Visit(node.Ins[i]);
+ if (introducedLocalVarsUpperBound != int.MinValue)
+ {
+ var formal = node.Proc.InParams[i];
+ if (!localVarToLocalVariableInfo.ContainsKey(formal) ||
+ introducedLocalVarsUpperBound > localVarToLocalVariableInfo[formal].layer)
+ {
+ Error(node, "An introduced local variable is accessed but not available");
+ }
+ introducedLocalVarsUpperBound = int.MinValue;
+ }
+ }
+ for (int i = 0; i < node.Outs.Count; i++)
+ {
+ var formal = node.Proc.OutParams[i];
+ if (!localVarToLocalVariableInfo.ContainsKey(formal)) continue;
+ var actual = node.Outs[i].Decl;
+ if (localVarToLocalVariableInfo.ContainsKey(actual) &&
+ localVarToLocalVariableInfo[formal].layer <= localVarToLocalVariableInfo[actual].layer)
+ continue;
+ Error(node, "Formal parameter of call must be introduced no later than the actual parameter");
+ }
+ return node;
+ }
+ else if (procToAtomicProcedureInfo.ContainsKey(node.Proc))
+ {
+ var atomicProcedureInfo = procToAtomicProcedureInfo[node.Proc];
+ if (atomicProcedureInfo.isPure)
+ {
+ if (node.Outs.Count > 0)
+ {
+ int inferredLayer = int.MinValue;
+ foreach (var ie in node.Outs)
+ {
+ if (!localVarToLocalVariableInfo.ContainsKey(ie.Decl)) continue;
+ if (inferredLayer < localVarToLocalVariableInfo[ie.Decl].layer)
+ {
+ inferredLayer = localVarToLocalVariableInfo[ie.Decl].layer;
+ }
+ }
+ pureCallLayer[node] = inferredLayer;
+ if (inferredLayer != int.MinValue)
+ {
+ foreach (var ie in node.Outs)
+ {
+ if (!localVarToLocalVariableInfo.ContainsKey(ie.Decl))
+ {
+ Error(node, "Output variable must be introduced");
+ }
+ else if (inferredLayer != localVarToLocalVariableInfo[ie.Decl].layer)
+ {
+ Error(node, "All output variables must be introduced at the same layer");
+ }
+ }
+ }
+ Debug.Assert(introducedLocalVarsUpperBound == int.MinValue);
+ foreach (var e in node.Ins)
+ {
+ Visit(e);
+ if (inferredLayer < introducedLocalVarsUpperBound)
+ {
+ Error(node, "An introduced local variable is not accessible");
+ }
+ introducedLocalVarsUpperBound = int.MinValue;
+ }
+ }
+ else
+ {
+ Debug.Assert(introducedLocalVarsUpperBound == int.MinValue);
+ int inferredLayer = int.MinValue;
+ foreach (var e in node.Ins)
+ {
+ Visit(e);
+ if (inferredLayer < introducedLocalVarsUpperBound)
+ {
+ inferredLayer = introducedLocalVarsUpperBound;
+ }
+ introducedLocalVarsUpperBound = int.MinValue;
+ }
+ pureCallLayer[node] = inferredLayer;
+ }
+ }
+ else
+ {
+ if (enclosingProcLayerNum != atomicProcedureInfo.layerRange.upperLayerNum)
+ {
+ Error(node, "Creation layer of caller must be the upper bound of the layer range of callee");
+ }
+ foreach (var ie in node.Proc.Modifies)
+ {
+ if (enclosingProcLayerNum != globalVarToSharedVarInfo[ie.Decl].introLayerNum)
+ {
+ Error(node, "Creation layer of caller must be identical to the introduction layer of modified variable");
+ }
+ }
+ foreach (var ie in node.Outs)
+ {
+ if (localVarToLocalVariableInfo.ContainsKey(ie.Decl) &&
+ enclosingProcLayerNum == localVarToLocalVariableInfo[ie.Decl].layer)
+ continue;
+ Error(node, "Output variable must be introduced at the creation layer of caller");
+ }
+ }
+ return node;
+ }
+ else
+ {
+ Error(node, "A yielding procedure can call only atomic or yielding procedures");
+ return node;
+ }
+ }
+
+ public override Cmd VisitParCallCmd(ParCallCmd node)
+ {
+ int enclosingProcLayerNum = procToActionInfo[enclosingImpl.Proc].createdAtLayerNum;
+ bool isLeftMover = true;
+ bool isRightMover = true;
+ int maxCalleeLayerNum = 0;
+ int atomicActionCalleeLayerNum = 0;
+ int numAtomicActions = 0;
+ foreach (CallCmd iter in node.CallCmds)
+ {
+ ActionInfo actionInfo = procToActionInfo[iter.Proc];
+ isLeftMover = isLeftMover && actionInfo.IsLeftMover;
+ isRightMover = isRightMover && actionInfo.IsRightMover;
+ if (actionInfo.createdAtLayerNum > maxCalleeLayerNum)
+ {
+ maxCalleeLayerNum = actionInfo.createdAtLayerNum;
+ }
+ if (actionInfo is AtomicActionInfo)
+ {
+ numAtomicActions++;
+ if (atomicActionCalleeLayerNum == 0)
+ {
+ atomicActionCalleeLayerNum = actionInfo.createdAtLayerNum;
+ }
+ else if (atomicActionCalleeLayerNum != actionInfo.createdAtLayerNum)
+ {
+ Error(node, "All atomic actions must be introduced at the same layer");
+ }
+ }
+ }
+ if (numAtomicActions > 1 && !isLeftMover && !isRightMover)
+ {
+ Error(node, "The atomic actions in the parallel call must be all right movers or all left movers");
+ }
+ if (0 < atomicActionCalleeLayerNum && atomicActionCalleeLayerNum < maxCalleeLayerNum)
+ {
+ Error(node, "Atomic actions must be introduced at the highest layer");
+ }
+ return base.VisitParCallCmd(node);
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ if (node.Decl is GlobalVariable)
+ {
+ if (sharedVarsAccessed == null)
+ {
+ Error(node, "Shared variable can be accessed only in atomic actions or specifications");
+ }
+ else if (this.globalVarToSharedVarInfo.ContainsKey(node.Decl))
+ {
+ sharedVarsAccessed.Add(node.Decl);
+ }
+ else
+ {
+ Error(node, "Accessed shared variable must have layer annotation");
+ }
+ }
+ else if ((node.Decl is Formal || node.Decl is Variable) && localVarToLocalVariableInfo.ContainsKey(node.Decl))
+ {
+ var localVariableInfo = localVarToLocalVariableInfo[node.Decl];
+ if (introducedLocalVarsUpperBound < localVariableInfo.layer)
+ {
+ introducedLocalVarsUpperBound = localVariableInfo.layer;
+ }
+ }
+ return base.VisitIdentifierExpr(node);
+ }
+
+ public override Ensures VisitEnsures(Ensures ensures)
+ {
+ ActionInfo actionInfo = procToActionInfo[enclosingProc];
+ AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
+ if (atomicActionInfo != null && atomicActionInfo.ensures == ensures)
+ {
+ // This case has already been checked
+ }
+ else
+ {
+ sharedVarsAccessed = new HashSet<Variable>();
+ Debug.Assert(introducedLocalVarsUpperBound == int.MinValue);
+ base.VisitEnsures(ensures);
+ CheckAndAddLayers(ensures, ensures.Attributes, actionInfo.createdAtLayerNum);
+ if (introducedLocalVarsUpperBound > Least(FindLayers(ensures.Attributes)))
+ {
+ Error(ensures, "An introduced local variable is accessed but not available");
+ }
+ introducedLocalVarsUpperBound = int.MinValue;
+ sharedVarsAccessed = null;
+ }
+ return ensures;
+ }
+
+ public override Requires VisitRequires(Requires requires)
+ {
+ sharedVarsAccessed = new HashSet<Variable>();
+ Debug.Assert(introducedLocalVarsUpperBound == int.MinValue);
+ base.VisitRequires(requires);
+ CheckAndAddLayers(requires, requires.Attributes, procToActionInfo[enclosingProc].createdAtLayerNum);
+ if (introducedLocalVarsUpperBound > Least(FindLayers(requires.Attributes)))
+ {
+ Error(requires, "An introduced local variable is accessed but not available");
+ }
+ introducedLocalVarsUpperBound = int.MinValue;
+ sharedVarsAccessed = null;
+ return requires;
+ }
+
+ public override Cmd VisitAssertCmd(AssertCmd node)
+ {
+ if (enclosingImpl == null)
+ {
+ // in this case, we are visiting an assert inside a CodeExpr
+ return base.VisitAssertCmd(node);
+ }
+ sharedVarsAccessed = new HashSet<Variable>();
+ Debug.Assert(introducedLocalVarsUpperBound == int.MinValue);
+ base.VisitAssertCmd(node);
+ CheckAndAddLayers(node, node.Attributes, procToActionInfo[enclosingImpl.Proc].createdAtLayerNum);
+ if (introducedLocalVarsUpperBound > Least(FindLayers(node.Attributes)))
+ {
+ Error(node, "An introduced local variable is accessed but not available");
+ }
+ introducedLocalVarsUpperBound = int.MinValue;
+ sharedVarsAccessed = null;
+ return node;
+ }
+
+ private List<int> RemoveDuplicatesAndSort(List<int> attrs)
+ {
+ HashSet<int> layerSet = new HashSet<int>(attrs);
+ List<int> layers = new List<int>(layerSet);
+ layers.Sort();
+ return layers;
+ }
+
+ private void CheckAndAddLayers(Absy node, QKeyValue attributes, int enclosingProcLayerNum)
+ {
+ List<int> attrs = RemoveDuplicatesAndSort(FindLayers(attributes));
+ if (attrs.Count == 0)
+ {
+ Error(node, "layer not present");
+ return;
+ }
+ LayerRange upperBound = FindLayerRange();
+ absyToLayerNums[node] = new HashSet<int>();
+ foreach (int layerNum in attrs)
+ {
+ if (layerNum > enclosingProcLayerNum)
+ {
+ Error(node, "The layer cannot be greater than the layer of enclosing procedure");
+ }
+ else if (upperBound.Contains(layerNum))
+ {
+ absyToLayerNums[node].Add(layerNum);
+ }
+ else
+ {
+ Error(node, string.Format("A variable being accessed in this specification is unavailable at layer {0}", layerNum));
+ }
+ }
+ }
+
+ public void Error(Absy node, string message)
+ {
+ checkingContext.Error(node, message);
+ errorCount++;
+ }
+
+ private class PurityChecker : StandardVisitor
+ {
+ private CivlTypeChecker civlTypeChecker;
+
+ public PurityChecker(CivlTypeChecker civlTypeChecker)
+ {
+ this.civlTypeChecker = civlTypeChecker;
+ }
+
+ public override Cmd VisitCallCmd(CallCmd node)
+ {
+ Procedure enclosingProc = civlTypeChecker.enclosingImpl.Proc;
+ if (!civlTypeChecker.procToAtomicProcedureInfo.ContainsKey(node.Proc))
+ {
+ civlTypeChecker.Error(node, "Atomic procedure can only call an atomic procedure");
+ return base.VisitCallCmd(node);
+ }
+ var callerInfo = civlTypeChecker.procToAtomicProcedureInfo[enclosingProc];
+ var calleeInfo = civlTypeChecker.procToAtomicProcedureInfo[node.Proc];
+ if (calleeInfo.isPure)
+ {
+ // do nothing
+ }
+ else if (callerInfo.isPure)
+ {
+ civlTypeChecker.Error(node, "Pure procedure can only call pure procedures");
+ }
+ else if (!callerInfo.layerRange.Subset(calleeInfo.layerRange))
+ {
+ civlTypeChecker.Error(node, "Caller layers must be subset of callee layers");
+ }
+ return base.VisitCallCmd(node);
+ }
+
+ public override Cmd VisitParCallCmd(ParCallCmd node)
+ {
+ civlTypeChecker.Error(node, "Atomic procedures cannot make parallel calls");
+ return node;
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ Procedure enclosingProc = civlTypeChecker.enclosingImpl.Proc;
+ if (node.Decl is GlobalVariable)
+ {
+ if (civlTypeChecker.procToAtomicProcedureInfo[enclosingProc].isPure)
+ {
+ civlTypeChecker.Error(node, "Pure procedure cannot access global variables");
+ }
+ else if (!civlTypeChecker.globalVarToSharedVarInfo.ContainsKey(node.Decl))
+ {
+ civlTypeChecker.Error(node, "Atomic procedure cannot access a global variable without layer numbers");
+ }
+ else
+ {
+ civlTypeChecker.sharedVarsAccessed.Add(node.Decl);
+ }
+ }
+ return node;
+ }
+ }
+ }
+}
diff --git a/Source/Concurrency/Concurrency.csproj b/Source/Concurrency/Concurrency.csproj
index c245d05a..ac90077c 100644
--- a/Source/Concurrency/Concurrency.csproj
+++ b/Source/Concurrency/Concurrency.csproj
@@ -1,115 +1,115 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{D07B8E38-E172-47F4-AD02-0373014A46D3}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Concurrency</RootNamespace>
- <AssemblyName>Concurrency</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <StartupObject />
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>TRACE;DEBUG;QED</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <Choose>
- <When Condition="'$(Configuration)' == 'QED'">
- <ItemGroup>
- <Reference Include="Microsoft.Automata">
- <HintPath>..\..\Binaries\Microsoft.Automata.dll</HintPath>
- </Reference>
- </ItemGroup>
- </When>
- <Otherwise>
- </Otherwise>
- </Choose>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="LinearSets.cs" />
- <Compile Include="MoverCheck.cs" />
- <Compile Include="OwickiGries.cs" />
- <Compile Include="Program.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="SimulationRelation.cs" />
- <Compile Include="TypeCheck.cs" />
- <Compile Include="YieldTypeChecker.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="App.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{b230a69c-c466-4065-b9c1-84d80e76d802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69a2b0b8-bcac-4101-ae7a-556fcc58c06e}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{fcd3ac7f-9dfd-46c8-ab1e-09f0b0f16dc5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <WCFMetadata Include="Service References\" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{D07B8E38-E172-47F4-AD02-0373014A46D3}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Concurrency</RootNamespace>
+ <AssemblyName>BoogieConcurrency</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <StartupObject />
+ </PropertyGroup>
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>TRACE;DEBUG;QED</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <Choose>
+ <When Condition="'$(Configuration)' == 'QED'">
+ <ItemGroup>
+ <Reference Include="Microsoft.Automata">
+ <HintPath>..\..\Binaries\Microsoft.Automata.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ </When>
+ <Otherwise>
+ </Otherwise>
+ </Choose>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LinearSets.cs" />
+ <Compile Include="MoverCheck.cs" />
+ <Compile Include="CivlRefinement.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="SimulationRelation.cs" />
+ <Compile Include="CivlTypeChecker.cs" />
+ <Compile Include="YieldTypeChecker.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{b230a69c-c466-4065-b9c1-84d80e76d802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69a2b0b8-bcac-4101-ae7a-556fcc58c06e}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{fcd3ac7f-9dfd-46c8-ab1e-09f0b0f16dc5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <WCFMetadata Include="Service References\" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/Concurrency/LinearSets.cs b/Source/Concurrency/LinearSets.cs
index e3891c18..f654b688 100644
--- a/Source/Concurrency/LinearSets.cs
+++ b/Source/Concurrency/LinearSets.cs
@@ -1,1004 +1,1003 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Microsoft.Boogie;
-using System.Diagnostics;
-
-namespace Microsoft.Boogie
-{
- public class LinearEraser : ReadOnlyVisitor
- {
- private QKeyValue RemoveLinearAttribute(QKeyValue iter)
- {
- if (iter == null) return null;
- iter.Next = RemoveLinearAttribute(iter.Next);
- return (iter.Key == "linear" || iter.Key == "linear_in" || iter.Key == "linear_out") ? iter.Next : iter;
- }
-
- public override Variable VisitVariable(Variable node)
- {
- node.Attributes = RemoveLinearAttribute(node.Attributes);
- return base.VisitVariable(node);
- }
-
- public override Function VisitFunction(Function node)
- {
- node.Attributes = RemoveLinearAttribute(node.Attributes);
- return base.VisitFunction(node);
- }
- }
-
- public enum LinearKind {
- LINEAR,
- LINEAR_IN,
- LINEAR_OUT
- }
-
- public class LinearTypeChecker : ReadOnlyVisitor
- {
- public Program program;
- public int errorCount;
- public CheckingContext checkingContext;
- public Dictionary<string, Dictionary<Type, Function>> domainNameToCollectors;
- private Dictionary<Absy, HashSet<Variable>> availableLinearVars;
- public Dictionary<Variable, LinearQualifier> inParamToLinearQualifier;
- public Dictionary<Variable, string> outParamToDomainName;
- public Dictionary<Variable, string> varToDomainName;
- public Dictionary<Variable, string> globalVarToDomainName;
- public Dictionary<string, LinearDomain> linearDomains;
-
- public LinearTypeChecker(Program program)
- {
- this.program = program;
- this.errorCount = 0;
- this.checkingContext = new CheckingContext(null);
- this.domainNameToCollectors = new Dictionary<string, Dictionary<Type, Function>>();
- this.availableLinearVars = new Dictionary<Absy, HashSet<Variable>>();
- this.inParamToLinearQualifier = new Dictionary<Variable, LinearQualifier>();
- this.outParamToDomainName = new Dictionary<Variable, string>();
- this.varToDomainName = new Dictionary<Variable, string>();
- this.globalVarToDomainName = new Dictionary<Variable, string>();
- this.linearDomains = new Dictionary<string, LinearDomain>();
- }
- public void TypeCheck()
- {
- this.VisitProgram(program);
- foreach (string domainName in domainNameToCollectors.Keys)
- {
- var collectors = domainNameToCollectors[domainName];
- if (collectors.Count == 0) continue;
- this.linearDomains[domainName] = new LinearDomain(program, domainName, collectors);
- }
- Dictionary<Absy, HashSet<Variable>> newAvailableLinearVars = new Dictionary<Absy, HashSet<Variable>>();
- foreach (Absy absy in this.availableLinearVars.Keys)
- {
- HashSet<Variable> vars = new HashSet<Variable>();
- foreach (Variable var in this.availableLinearVars[absy])
- {
- if (var is GlobalVariable) continue;
- string domainName = FindDomainName(var);
- if (this.linearDomains.ContainsKey(domainName))
- {
- vars.Add(var);
- }
- }
- newAvailableLinearVars[absy] = vars;
- }
- this.availableLinearVars = newAvailableLinearVars;
- var temp = new Dictionary<Variable, string>();
- foreach (Variable v in outParamToDomainName.Keys)
- {
- if (linearDomains.ContainsKey(outParamToDomainName[v]))
- temp[v] = outParamToDomainName[v];
- }
- this.outParamToDomainName = temp;
- temp = new Dictionary<Variable, string>();
- foreach (Variable v in varToDomainName.Keys)
- {
- if (linearDomains.ContainsKey(varToDomainName[v]))
- temp[v] = varToDomainName[v];
- }
- this.varToDomainName = temp;
- temp = new Dictionary<Variable, string>();
- foreach (Variable v in globalVarToDomainName.Keys)
- {
- if (linearDomains.ContainsKey(globalVarToDomainName[v]))
- temp[v] = globalVarToDomainName[v];
- }
- this.globalVarToDomainName = temp;
- }
- private void Error(Absy node, string message)
- {
- checkingContext.Error(node, message);
- errorCount++;
- }
- public override Program VisitProgram(Program node)
- {
- foreach (GlobalVariable g in program.GlobalVariables)
- {
- string domainName = FindDomainName(g);
- if (domainName != null)
- {
- globalVarToDomainName[g] = domainName;
- }
- }
- return base.VisitProgram(node);
- }
- public override Function VisitFunction(Function node)
- {
- string domainName = QKeyValue.FindStringAttribute(node.Attributes, "linear");
- if (domainName != null)
- {
- if (!domainNameToCollectors.ContainsKey(domainName))
- {
- domainNameToCollectors[domainName] = new Dictionary<Type, Function>();
- }
- if (node.InParams.Count == 1 && node.OutParams.Count == 1)
- {
- Type inType = node.InParams[0].TypedIdent.Type;
- MapType outType = node.OutParams[0].TypedIdent.Type as MapType;
- if (domainNameToCollectors[domainName].ContainsKey(inType))
- {
- Error(node, string.Format("A collector for domain for input type has already been defined"));
- }
- else if (outType == null || outType.Arguments.Count != 1 || !outType.Result.Equals(Type.Bool))
- {
- Error(node, "Output of a linear domain collector should be of set type");
- }
- else
- {
- domainNameToCollectors[domainName][inType] = node;
- }
- }
- else
- {
- Error(node, "Linear domain collector should have one input and one output parameter");
- }
- }
- return base.VisitFunction(node);
- }
- public override Implementation VisitImplementation(Implementation node)
- {
- node.PruneUnreachableBlocks();
- node.ComputePredecessorsForBlocks();
- GraphUtil.Graph<Block> graph = Program.GraphFromImpl(node);
- graph.ComputeLoops();
-
- HashSet<Variable> start = new HashSet<Variable>(globalVarToDomainName.Keys);
- for (int i = 0; i < node.InParams.Count; i++)
- {
- Variable v = node.Proc.InParams[i];
- string domainName = FindDomainName(v);
- if (domainName != null)
- {
- var kind = FindLinearKind(v);
- inParamToLinearQualifier[node.InParams[i]] = new LinearQualifier(domainName, kind);
- if (kind == LinearKind.LINEAR || kind == LinearKind.LINEAR_IN)
- {
- start.Add(node.InParams[i]);
- }
- }
- }
- for (int i = 0; i < node.OutParams.Count; i++)
- {
- string domainName = FindDomainName(node.Proc.OutParams[i]);
- if (domainName != null)
- {
- outParamToDomainName[node.OutParams[i]] = domainName;
- }
- }
-
- var oldErrorCount = this.errorCount;
- var impl = base.VisitImplementation(node);
- if (oldErrorCount < this.errorCount)
- return impl;
-
- Stack<Block> dfsStack = new Stack<Block>();
- HashSet<Block> dfsStackAsSet = new HashSet<Block>();
- availableLinearVars[node.Blocks[0]] = start;
- dfsStack.Push(node.Blocks[0]);
- dfsStackAsSet.Add(node.Blocks[0]);
- while (dfsStack.Count > 0)
- {
- Block b = dfsStack.Pop();
- dfsStackAsSet.Remove(b);
- HashSet<Variable> end = PropagateAvailableLinearVarsAcrossBlock(b);
- if (b.TransferCmd is ReturnCmd)
- {
- foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(end))
- {
- Error(b.TransferCmd, string.Format("Global variable {0} must be available at a return", g.Name));
- }
- foreach (Variable v in node.InParams)
- {
- if (FindDomainName(v) == null || FindLinearKind(v) == LinearKind.LINEAR_IN || end.Contains(v)) continue;
- Error(b.TransferCmd, string.Format("Input variable {0} must be available at a return", v.Name));
- }
- foreach (Variable v in node.OutParams)
- {
- if (FindDomainName(v) == null || end.Contains(v)) continue;
- Error(b.TransferCmd, string.Format("Output variable {0} must be available at a return", v.Name));
- }
- continue;
- }
- GotoCmd gotoCmd = b.TransferCmd as GotoCmd;
- foreach (Block target in gotoCmd.labelTargets)
- {
- if (!availableLinearVars.ContainsKey(target))
- {
- availableLinearVars[target] = new HashSet<Variable>(end);
- dfsStack.Push(target);
- dfsStackAsSet.Add(target);
- }
- else
- {
- var savedAvailableVars = new HashSet<Variable>(availableLinearVars[target]);
- availableLinearVars[target].IntersectWith(end);
- if (savedAvailableVars.IsProperSupersetOf(availableLinearVars[target]) && !dfsStackAsSet.Contains(target))
- {
- dfsStack.Push(target);
- dfsStackAsSet.Add(target);
- }
- }
- }
- }
-
- if (graph.Reducible)
- {
- foreach (Block header in graph.Headers)
- {
- foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(availableLinearVars[header]))
- {
- Error(header, string.Format("Global variable {0} must be available at a loop head", g.Name));
- }
- }
- }
- return impl;
- }
- public void AddAvailableVars(CallCmd callCmd, HashSet<Variable> start)
- {
- foreach (IdentifierExpr ie in callCmd.Outs)
- {
- if (FindDomainName(ie.Decl) == null) continue;
- start.Add(ie.Decl);
- }
- for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
- {
- IdentifierExpr ie = callCmd.Ins[i] as IdentifierExpr;
- if (ie == null) continue;
- Variable v = callCmd.Proc.InParams[i];
- if (FindDomainName(v) == null) continue;
- if (FindLinearKind(v) == LinearKind.LINEAR_OUT)
- {
- start.Add(ie.Decl);
- }
- }
- }
- public void AddAvailableVars(ParCallCmd parCallCmd, HashSet<Variable> start)
- {
- foreach (CallCmd callCmd in parCallCmd.CallCmds)
- {
- AddAvailableVars(callCmd, start);
- }
- }
- private HashSet<Variable> PropagateAvailableLinearVarsAcrossBlock(Block b) {
- HashSet<Variable> start = new HashSet<Variable>(availableLinearVars[b]);
- foreach (Cmd cmd in b.Cmds)
- {
- if (cmd is AssignCmd)
- {
- AssignCmd assignCmd = (AssignCmd)cmd;
- for (int i = 0; i < assignCmd.Lhss.Count; i++)
- {
- if (FindDomainName(assignCmd.Lhss[i].DeepAssignedVariable) == null) continue;
- IdentifierExpr ie = assignCmd.Rhss[i] as IdentifierExpr;
- if (!start.Contains(ie.Decl))
- {
- Error(ie, "unavailable source for a linear read");
- }
- else
- {
- start.Remove(ie.Decl);
- }
- }
- foreach (AssignLhs assignLhs in assignCmd.Lhss)
- {
- if (FindDomainName(assignLhs.DeepAssignedVariable) == null) continue;
- start.Add(assignLhs.DeepAssignedVariable);
- }
- }
- else if (cmd is CallCmd)
- {
- foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(start))
- {
- Error(cmd, string.Format("Global variable {0} must be available at a call", g.Name));
- }
- CallCmd callCmd = (CallCmd)cmd;
- for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
- {
- Variable param = callCmd.Proc.InParams[i];
- if (FindDomainName(param) == null) continue;
- IdentifierExpr ie = callCmd.Ins[i] as IdentifierExpr;
- LinearKind paramKind = FindLinearKind(param);
- if (start.Contains(ie.Decl))
- {
- if (callCmd.IsAsync || paramKind == LinearKind.LINEAR_IN)
- {
- start.Remove(ie.Decl);
- }
- }
- else
- {
- if (paramKind == LinearKind.LINEAR_OUT)
- {
- start.Add(ie.Decl);
- }
- else
- {
- Error(ie, "unavailable source for a linear read");
- }
- }
- }
- availableLinearVars[callCmd] = new HashSet<Variable>(start);
- AddAvailableVars(callCmd, start);
- }
- else if (cmd is ParCallCmd)
- {
- foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(start))
- {
- Error(cmd, string.Format("Global variable {0} must be available at a call", g.Name));
- }
- ParCallCmd parCallCmd = (ParCallCmd)cmd;
- foreach (CallCmd callCmd in parCallCmd.CallCmds)
- {
- for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
- {
- Variable param = callCmd.Proc.InParams[i];
- if (FindDomainName(param) == null) continue;
- IdentifierExpr ie = callCmd.Ins[i] as IdentifierExpr;
- LinearKind paramKind = FindLinearKind(param);
- if (start.Contains(ie.Decl))
- {
- if (paramKind == LinearKind.LINEAR_IN)
- {
- start.Remove(ie.Decl);
- }
- }
- else
- {
- if (paramKind == LinearKind.LINEAR_OUT)
- {
- start.Add(ie.Decl);
- }
- else
- {
- Error(ie, "unavailable source for a linear read");
- }
- }
- }
- }
- availableLinearVars[parCallCmd] = new HashSet<Variable>(start);
- AddAvailableVars(parCallCmd, start);
- }
- else if (cmd is HavocCmd)
- {
- HavocCmd havocCmd = (HavocCmd)cmd;
- foreach (IdentifierExpr ie in havocCmd.Vars)
- {
- if (FindDomainName(ie.Decl) == null) continue;
- start.Remove(ie.Decl);
- }
- }
- else if (cmd is YieldCmd)
- {
- foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(start))
- {
- Error(cmd, string.Format("Global variable {0} must be available at a yield", g.Name));
- }
- availableLinearVars[cmd] = new HashSet<Variable>(start);
- }
- }
- return start;
- }
- public string FindDomainName(Variable v)
- {
- if (globalVarToDomainName.ContainsKey(v))
- return globalVarToDomainName[v];
- if (inParamToLinearQualifier.ContainsKey(v))
- return inParamToLinearQualifier[v].domainName;
- if (outParamToDomainName.ContainsKey(v))
- return outParamToDomainName[v];
- string domainName = QKeyValue.FindStringAttribute(v.Attributes, "linear");
- if (domainName != null)
- return domainName;
- domainName = QKeyValue.FindStringAttribute(v.Attributes, "linear_in");
- if (domainName != null)
- return domainName;
- return QKeyValue.FindStringAttribute(v.Attributes, "linear_out");
- }
- public LinearKind FindLinearKind(Variable v)
- {
- if (globalVarToDomainName.ContainsKey(v))
- return LinearKind.LINEAR;
- if (inParamToLinearQualifier.ContainsKey(v))
- return inParamToLinearQualifier[v].kind;
- if (outParamToDomainName.ContainsKey(v))
- return LinearKind.LINEAR;
-
- if (QKeyValue.FindStringAttribute(v.Attributes, "linear") != null)
- {
- return LinearKind.LINEAR;
- }
- else if (QKeyValue.FindStringAttribute(v.Attributes, "linear_in") != null)
- {
- return LinearKind.LINEAR_IN;
- }
- else if (QKeyValue.FindStringAttribute(v.Attributes, "linear_out") != null)
- {
- return LinearKind.LINEAR_OUT;
- }
- else
- {
- Debug.Assert(false);
- return LinearKind.LINEAR;
- }
- }
- public override Variable VisitVariable(Variable node)
- {
- string domainName = FindDomainName(node);
- if (domainName != null)
- {
- if (!domainNameToCollectors.ContainsKey(domainName))
- {
- domainNameToCollectors[domainName] = new Dictionary<Type,Function>();
- }
- LinearKind kind = FindLinearKind(node);
- if (kind != LinearKind.LINEAR)
- {
- if (node is GlobalVariable || node is LocalVariable || (node is Formal && !(node as Formal).InComing))
- {
- Error(node, "Variable must be declared linear (as opposed to linear_in or linear_out)");
- }
- }
- }
- return base.VisitVariable(node);
- }
- public override Cmd VisitAssignCmd(AssignCmd node)
- {
- HashSet<Variable> rhsVars = new HashSet<Variable>();
- for (int i = 0; i < node.Lhss.Count; i++)
- {
- AssignLhs lhs = node.Lhss[i];
- Variable lhsVar = lhs.DeepAssignedVariable;
- string domainName = FindDomainName(lhsVar);
- if (domainName == null) continue;
- SimpleAssignLhs salhs = lhs as SimpleAssignLhs;
- if (salhs == null)
- {
- Error(node, string.Format("Only simple assignment allowed on linear variable {0}", lhsVar.Name));
- continue;
- }
- IdentifierExpr rhs = node.Rhss[i] as IdentifierExpr;
- if (rhs == null)
- {
- Error(node, string.Format("Only variable can be assigned to linear variable {0}", lhsVar.Name));
- continue;
- }
- string rhsDomainName = FindDomainName(rhs.Decl);
- if (rhsDomainName == null)
- {
- Error(node, string.Format("Only linear variable can be assigned to linear variable {0}", lhsVar.Name));
- continue;
- }
- if (domainName != rhsDomainName)
- {
- Error(node, string.Format("Linear variable of domain {0} cannot be assigned to linear variable of domain {1}", rhsDomainName, domainName));
- continue;
- }
- if (rhsVars.Contains(rhs.Decl))
- {
- Error(node, string.Format("Linear variable {0} can occur only once in the right-hand-side of an assignment", rhs.Decl.Name));
- continue;
- }
- rhsVars.Add(rhs.Decl);
- }
- return base.VisitAssignCmd(node);
- }
- public override Cmd VisitCallCmd(CallCmd node)
- {
- HashSet<Variable> inVars = new HashSet<Variable>();
- for (int i = 0; i < node.Proc.InParams.Count; i++)
- {
- Variable formal = node.Proc.InParams[i];
- string domainName = FindDomainName(formal);
- if (domainName == null) continue;
- IdentifierExpr actual = node.Ins[i] as IdentifierExpr;
- if (actual == null)
- {
- Error(node, string.Format("Only variable can be passed to linear parameter {0}", formal.Name));
- continue;
- }
- string actualDomainName = FindDomainName(actual.Decl);
- if (actualDomainName == null)
- {
- Error(node, string.Format("Only a linear argument can be passed to linear parameter {0}", formal.Name));
- continue;
- }
- if (domainName != actualDomainName)
- {
- Error(node, "The domains of formal and actual parameters must be the same");
- continue;
- }
- if (actual.Decl is GlobalVariable)
- {
- Error(node, "Only local linear variable can be an actual input parameter of a procedure call");
- continue;
- }
- if (inVars.Contains(actual.Decl))
- {
- Error(node, string.Format("Linear variable {0} can occur only once as an input parameter", actual.Decl.Name));
- continue;
- }
- inVars.Add(actual.Decl);
- }
- for (int i = 0; i < node.Proc.OutParams.Count; i++)
- {
- IdentifierExpr actual = node.Outs[i];
- string actualDomainName = FindDomainName(actual.Decl);
- if (actualDomainName == null) continue;
- Variable formal = node.Proc.OutParams[i];
- string domainName = FindDomainName(formal);
- if (domainName == null)
- {
- Error(node, "Only a linear variable can be passed to a linear parameter");
- continue;
- }
- if (domainName != actualDomainName)
- {
- Error(node, "The domains of formal and actual parameters must be the same");
- continue;
- }
- if (actual.Decl is GlobalVariable)
- {
- Error(node, "Only local linear variable can be actual output parameter of a procedure call");
- continue;
- }
- }
- return base.VisitCallCmd(node);
- }
- public override Cmd VisitParCallCmd(ParCallCmd node)
- {
- HashSet<Variable> parallelCallInvars = new HashSet<Variable>();
- foreach (CallCmd callCmd in node.CallCmds)
- {
- for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
- {
- Variable formal = callCmd.Proc.InParams[i];
- string domainName = FindDomainName(formal);
- if (domainName == null) continue;
- IdentifierExpr actual = callCmd.Ins[i] as IdentifierExpr;
- if (parallelCallInvars.Contains(actual.Decl))
- {
- Error(node, string.Format("Linear variable {0} can occur only once as an input parameter of a parallel call", actual.Decl.Name));
- }
- else
- {
- parallelCallInvars.Add(actual.Decl);
- }
- }
- }
- return base.VisitParCallCmd(node);
- }
-
- public override Requires VisitRequires(Requires requires)
- {
- return requires;
- }
-
- public override Ensures VisitEnsures(Ensures ensures)
- {
- return ensures;
- }
-
- public IEnumerable<Variable> AvailableLinearVars(Absy absy)
- {
- if (availableLinearVars.ContainsKey(absy))
- {
- return availableLinearVars[absy];
- }
- else
- {
- return new HashSet<Variable>();
- }
- }
-
- private void AddDisjointnessExpr(List<Cmd> newCmds, Absy absy, Dictionary<string, Variable> domainNameToInputVar)
- {
- Dictionary<string, HashSet<Variable>> domainNameToScope = new Dictionary<string, HashSet<Variable>>();
- foreach (var domainName in linearDomains.Keys)
- {
- domainNameToScope[domainName] = new HashSet<Variable>();
- }
- foreach (Variable v in AvailableLinearVars(absy))
- {
- var domainName = FindDomainName(v);
- domainNameToScope[domainName].Add(v);
- }
- foreach (Variable v in program.GlobalVariables)
- {
- var domainName = FindDomainName(v);
- if (domainName == null) continue;
- domainNameToScope[domainName].Add(v);
- }
- foreach (string domainName in linearDomains.Keys)
- {
- newCmds.Add(new AssumeCmd(Token.NoToken, DisjointnessExpr(domainName, domainNameToInputVar[domainName], domainNameToScope[domainName])));
- }
- }
-
- public void Transform()
- {
- foreach (var impl in program.Implementations)
- {
- Dictionary<string, Variable> domainNameToInputVar = new Dictionary<string, Variable>();
- foreach (string domainName in linearDomains.Keys)
- {
- var domain = linearDomains[domainName];
- Formal f = new Formal(
- Token.NoToken,
- new TypedIdent(Token.NoToken,
- "linear_" + domainName + "_in",
- new MapType(Token.NoToken, new List<TypeVariable>(),
- new List<Type> { domain.elementType }, Type.Bool)), true);
- impl.InParams.Add(f);
- domainNameToInputVar[domainName] = f;
- }
-
- foreach (Block b in impl.Blocks)
- {
- List<Cmd> newCmds = new List<Cmd>();
- for (int i = 0; i < b.Cmds.Count; i++)
- {
- Cmd cmd = b.Cmds[i];
- newCmds.Add(cmd);
- if (cmd is CallCmd)
- {
- CallCmd callCmd = cmd as CallCmd;
- if (callCmd.IsAsync)
- {
- foreach (var domainName in linearDomains.Keys)
- {
- var domain = linearDomains[domainName];
- var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstBool), new List<Expr> { Expr.False });
- expr.Resolve(new ResolutionContext(null));
- expr.Typecheck(new TypecheckingContext(null));
- callCmd.Ins.Add(expr);
- }
- }
- else
- {
- Dictionary<string, Expr> domainNameToExpr = new Dictionary<string, Expr>();
- foreach (var domainName in linearDomains.Keys)
- {
- domainNameToExpr[domainName] = Expr.Ident(domainNameToInputVar[domainName]);
- }
- foreach (Variable v in AvailableLinearVars(callCmd))
- {
- var domainName = FindDomainName(v);
- var domain = linearDomains[domainName];
- if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
- Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
- var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapOrBool), new List<Expr> { ie, domainNameToExpr[domainName] });
- expr.Resolve(new ResolutionContext(null));
- expr.Typecheck(new TypecheckingContext(null));
- domainNameToExpr[domainName] = expr;
- }
- foreach (var domainName in linearDomains.Keys)
- {
- callCmd.Ins.Add(domainNameToExpr[domainName]);
- }
- }
- }
- else if (cmd is ParCallCmd)
- {
- ParCallCmd parCallCmd = (ParCallCmd)cmd;
- foreach (CallCmd callCmd in parCallCmd.CallCmds)
- {
- foreach (var domainName in linearDomains.Keys)
- {
- var domain = linearDomains[domainName];
- var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstBool), new List<Expr> { Expr.False });
- expr.Resolve(new ResolutionContext(null));
- expr.Typecheck(new TypecheckingContext(null));
- callCmd.Ins.Add(expr);
- }
- }
- }
- else if (cmd is YieldCmd)
- {
- AddDisjointnessExpr(newCmds, cmd, domainNameToInputVar);
- }
- }
- b.Cmds = newCmds;
- }
-
- {
- // Loops
- impl.PruneUnreachableBlocks();
- impl.ComputePredecessorsForBlocks();
- GraphUtil.Graph<Block> g = Program.GraphFromImpl(impl);
- g.ComputeLoops();
- if (g.Reducible)
- {
- foreach (Block header in g.Headers)
- {
- List<Cmd> newCmds = new List<Cmd>();
- AddDisjointnessExpr(newCmds, header, domainNameToInputVar);
- newCmds.AddRange(header.Cmds);
- header.Cmds = newCmds;
- }
- }
- }
- }
-
- foreach (var proc in program.Procedures)
- {
- Dictionary<string, HashSet<Variable>> domainNameToInputScope = new Dictionary<string, HashSet<Variable>>();
- Dictionary<string, HashSet<Variable>> domainNameToOutputScope = new Dictionary<string, HashSet<Variable>>();
- foreach (var domainName in linearDomains.Keys)
- {
- domainNameToInputScope[domainName] = new HashSet<Variable>();
- domainNameToOutputScope[domainName] = new HashSet<Variable>();
-
- }
- foreach (Variable v in globalVarToDomainName.Keys)
- {
- var domainName = globalVarToDomainName[v];
- domainNameToInputScope[domainName].Add(v);
- domainNameToOutputScope[domainName].Add(v);
- }
- foreach (Variable v in proc.InParams)
- {
- var domainName = FindDomainName(v);
- if (domainName == null) continue;
- if (!this.linearDomains.ContainsKey(domainName)) continue;
- domainNameToInputScope[domainName].Add(v);
- }
- foreach (Variable v in proc.OutParams)
- {
- var domainName = FindDomainName(v);
- if (domainName == null) continue;
- if (!this.linearDomains.ContainsKey(domainName)) continue;
- domainNameToOutputScope[domainName].Add(v);
- }
- foreach (var domainName in linearDomains.Keys)
- {
- proc.Requires.Add(new Requires(true, DisjointnessExpr(domainName, domainNameToInputScope[domainName])));
- var domain = linearDomains[domainName];
- Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "linear_" + domainName + "_in", new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Type.Bool)), true);
- proc.InParams.Add(f);
- proc.Ensures.Add(new Ensures(true, DisjointnessExpr(domainName, f, domainNameToOutputScope[domainName])));
- }
- }
-
- foreach (LinearDomain domain in linearDomains.Values)
- {
- program.AddTopLevelDeclaration(domain.mapConstBool);
- program.AddTopLevelDeclaration(domain.mapConstInt);
- program.AddTopLevelDeclaration(domain.mapEqInt);
- program.AddTopLevelDeclaration(domain.mapImpBool);
- program.AddTopLevelDeclaration(domain.mapOrBool);
- foreach (Axiom axiom in domain.axioms)
- {
- program.AddTopLevelDeclaration(axiom);
- }
- }
-
- //int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
- //CommandLineOptions.Clo.PrintUnstructured = 1;
- //PrintBplFile("lsd.bpl", program, false, false);
- //CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
- }
-
- private Expr SubsetExpr(LinearDomain domain, Expr ie, Variable partition, int partitionCount)
- {
- Expr e = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstInt), new List<Expr> { new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(partitionCount)) });
- e = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapEqInt), new List<Expr> { Expr.Ident(partition), e });
- e = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapImpBool), new List<Expr> { ie, e });
- e = Expr.Eq(e, new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstBool), new List<Expr> { Expr.True }));
- return e;
- }
-
- private Expr SubsetExprs(LinearDomain domain, HashSet<Variable> scope, Variable partition, int count, Expr expr)
- {
- foreach (Variable v in scope)
- {
- if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
- Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
- expr = Expr.And(SubsetExpr(domain, ie, partition, count), expr);
- count++;
- }
- expr = new ExistsExpr(Token.NoToken, new List<Variable> { partition }, expr);
- expr.Resolve(new ResolutionContext(null));
- expr.Typecheck(new TypecheckingContext(null));
- return expr;
- }
-
- public Expr DisjointnessExpr(string domainName, Variable inputVar, HashSet<Variable> scope)
- {
- LinearDomain domain = linearDomains[domainName];
- BoundVariable partition = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("partition_{0}", domainName), new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Microsoft.Boogie.Type.Int)));
- return SubsetExprs(domain, scope, partition, 1, SubsetExpr(domain, Expr.Ident(inputVar), partition, 0));
- }
-
- public Expr DisjointnessExpr(string domainName, HashSet<Variable> scope)
- {
- LinearDomain domain = linearDomains[domainName];
- BoundVariable partition = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("partition_{0}", domainName), new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Microsoft.Boogie.Type.Int)));
- return SubsetExprs(domain, scope, partition, 0, Expr.True);
- }
- }
-
- public class LinearQualifier
- {
- public string domainName;
- public LinearKind kind;
- public LinearQualifier(string domainName, LinearKind kind)
- {
- this.domainName = domainName;
- this.kind = kind;
- }
- }
-
- public class LinearDomain
- {
- public Function mapEqInt;
- public Function mapConstInt;
- public Function mapOrBool;
- public Function mapImpBool;
- public Function mapConstBool;
- public List<Axiom> axioms;
- public Type elementType;
- public Dictionary<Type, Function> collectors;
-
- public LinearDomain(Program program, string domainName, Dictionary<Type, Function> collectors)
- {
- this.axioms = new List<Axiom>();
- this.collectors = collectors;
- MapType setType = (MapType)collectors.First().Value.OutParams[0].TypedIdent.Type;
- this.elementType = setType.Arguments[0];
- MapType mapTypeBool = new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { this.elementType }, Type.Bool);
- MapType mapTypeInt = new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { this.elementType }, Type.Int);
- this.mapOrBool = new Function(Token.NoToken, "linear_" + domainName + "_MapOr",
- new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool), true),
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool), true) },
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
- if (CommandLineOptions.Clo.UseArrayTheory)
- {
- this.mapOrBool.AddAttribute("builtin", "MapOr");
- }
- else
- {
- BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool));
- IdentifierExpr aie = Expr.Ident(a);
- BoundVariable b = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool));
- IdentifierExpr bie = Expr.Ident(b);
- BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
- IdentifierExpr xie = Expr.Ident(x);
- var mapApplTerm = new NAryExpr(Token.NoToken, new FunctionCall(mapOrBool), new List<Expr> { aie, bie } );
- var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { mapApplTerm, xie } );
- var rhsTerm = Expr.Or(new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { aie, xie } ),
- new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { bie, xie} ));
- var axiomExpr = new ForallExpr(Token.NoToken, new List<TypeVariable>(), new List<Variable> { a, b }, null,
- new Trigger(Token.NoToken, true, new List<Expr> { mapApplTerm }),
- new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, rhsTerm)));
- axiomExpr.Typecheck(new TypecheckingContext(null));
- axioms.Add(new Axiom(Token.NoToken, axiomExpr));
- }
-
- this.mapImpBool = new Function(Token.NoToken, "linear_" + domainName + "_MapImp",
- new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool), true),
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool), true) },
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
- if (CommandLineOptions.Clo.UseArrayTheory)
- {
- this.mapImpBool.AddAttribute("builtin", "MapImp");
- }
- else
- {
- BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool));
- IdentifierExpr aie = Expr.Ident(a);
- BoundVariable b = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool));
- IdentifierExpr bie = Expr.Ident(b);
- BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
- IdentifierExpr xie = Expr.Ident(x);
- var mapApplTerm = new NAryExpr(Token.NoToken, new FunctionCall(mapImpBool), new List<Expr> { aie, bie });
- var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { mapApplTerm, xie });
- var rhsTerm = Expr.Imp(new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { aie, xie }),
- new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { bie, xie }));
- var axiomExpr = new ForallExpr(Token.NoToken, new List<TypeVariable>(), new List<Variable> { a, b }, null,
- new Trigger(Token.NoToken, true, new List<Expr> { mapApplTerm }),
- new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, rhsTerm)));
- axiomExpr.Typecheck(new TypecheckingContext(null));
- axioms.Add(new Axiom(Token.NoToken, axiomExpr));
- }
-
- this.mapConstBool = new Function(Token.NoToken, "linear_" + domainName + "_MapConstBool",
- new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", Type.Bool), true) },
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
- if (CommandLineOptions.Clo.UseArrayTheory)
- {
- this.mapConstBool.AddAttribute("builtin", "MapConst");
- }
- else
- {
- BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
- IdentifierExpr xie = Expr.Ident(x);
- var trueTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1),
- new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(mapConstBool), new List<Expr> { Expr.True }), xie });
- var trueAxiomExpr = new ForallExpr(Token.NoToken, new List<Variable> { x }, trueTerm);
- trueAxiomExpr.Typecheck(new TypecheckingContext(null));
- axioms.Add(new Axiom(Token.NoToken, trueAxiomExpr));
- var falseTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1),
- new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(mapConstBool), new List<Expr> { Expr.False }), xie });
- var falseAxiomExpr = new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Unary(Token.NoToken, UnaryOperator.Opcode.Not, falseTerm));
- falseAxiomExpr.Typecheck(new TypecheckingContext(null));
- axioms.Add(new Axiom(Token.NoToken, falseAxiomExpr));
- }
-
- this.mapEqInt = new Function(Token.NoToken, "linear_" + domainName + "_MapEq",
- new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeInt), true),
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeInt), true) },
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
- if (CommandLineOptions.Clo.UseArrayTheory)
- {
- this.mapEqInt.AddAttribute("builtin", "MapEq");
- }
- else
- {
- BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeInt));
- IdentifierExpr aie = Expr.Ident(a);
- BoundVariable b = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeInt));
- IdentifierExpr bie = Expr.Ident(b);
- BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
- IdentifierExpr xie = Expr.Ident(x);
- var mapApplTerm = new NAryExpr(Token.NoToken, new FunctionCall(mapEqInt), new List<Expr> { aie, bie });
- var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { mapApplTerm, xie });
- var rhsTerm = Expr.Eq(new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { aie, xie }),
- new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { bie, xie }));
- var axiomExpr = new ForallExpr(Token.NoToken, new List<TypeVariable>(), new List<Variable> { a, b }, null,
- new Trigger(Token.NoToken, true, new List<Expr> { mapApplTerm }),
- new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, rhsTerm)));
- axiomExpr.Typecheck(new TypecheckingContext(null));
- axioms.Add(new Axiom(Token.NoToken, axiomExpr));
- }
-
- this.mapConstInt = new Function(Token.NoToken, "linear_" + domainName + "_MapConstInt",
- new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", Type.Int), true) },
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeInt), false));
- if (CommandLineOptions.Clo.UseArrayTheory)
- {
- this.mapConstInt.AddAttribute("builtin", "MapConst");
- }
- else
- {
- BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", Type.Int));
- IdentifierExpr aie = Expr.Ident(a);
- BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
- IdentifierExpr xie = Expr.Ident(x);
- var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(mapConstInt), new List<Expr> { aie }), xie });
- var axiomExpr = new ForallExpr(Token.NoToken, new List<Variable> { a, x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, aie));
- axiomExpr.Typecheck(new TypecheckingContext(null));
- axioms.Add(new Axiom(Token.NoToken, axiomExpr));
- }
-
- foreach (var axiom in axioms)
- {
- axiom.Expr.Resolve(new ResolutionContext(null));
- axiom.Expr.Typecheck(new TypecheckingContext(null));
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Boogie;
+using System.Diagnostics;
+
+namespace Microsoft.Boogie
+{
+ public class LinearEraser : ReadOnlyVisitor
+ {
+ private QKeyValue RemoveLinearAttribute(QKeyValue iter)
+ {
+ if (iter == null) return null;
+ iter.Next = RemoveLinearAttribute(iter.Next);
+ return (iter.Key == "linear" || iter.Key == "linear_in" || iter.Key == "linear_out") ? iter.Next : iter;
+ }
+
+ public override Variable VisitVariable(Variable node)
+ {
+ node.Attributes = RemoveLinearAttribute(node.Attributes);
+ return base.VisitVariable(node);
+ }
+
+ public override Function VisitFunction(Function node)
+ {
+ node.Attributes = RemoveLinearAttribute(node.Attributes);
+ return base.VisitFunction(node);
+ }
+ }
+
+ public enum LinearKind {
+ LINEAR,
+ LINEAR_IN,
+ LINEAR_OUT
+ }
+
+ public class LinearTypeChecker : ReadOnlyVisitor
+ {
+ public Program program;
+ public int errorCount;
+ public CheckingContext checkingContext;
+ public Dictionary<string, Dictionary<Type, Function>> domainNameToCollectors;
+ private Dictionary<Absy, HashSet<Variable>> availableLinearVars;
+ public Dictionary<Variable, LinearQualifier> inParamToLinearQualifier;
+ public Dictionary<Variable, string> outParamToDomainName;
+ public Dictionary<Variable, string> varToDomainName;
+ public Dictionary<Variable, string> globalVarToDomainName;
+ public Dictionary<string, LinearDomain> linearDomains;
+
+ public LinearTypeChecker(Program program)
+ {
+ this.program = program;
+ this.errorCount = 0;
+ this.checkingContext = new CheckingContext(null);
+ this.domainNameToCollectors = new Dictionary<string, Dictionary<Type, Function>>();
+ this.availableLinearVars = new Dictionary<Absy, HashSet<Variable>>();
+ this.inParamToLinearQualifier = new Dictionary<Variable, LinearQualifier>();
+ this.outParamToDomainName = new Dictionary<Variable, string>();
+ this.varToDomainName = new Dictionary<Variable, string>();
+ this.globalVarToDomainName = new Dictionary<Variable, string>();
+ this.linearDomains = new Dictionary<string, LinearDomain>();
+ }
+ public void TypeCheck()
+ {
+ this.VisitProgram(program);
+ foreach (string domainName in domainNameToCollectors.Keys)
+ {
+ var collectors = domainNameToCollectors[domainName];
+ if (collectors.Count == 0) continue;
+ this.linearDomains[domainName] = new LinearDomain(program, domainName, collectors);
+ }
+ Dictionary<Absy, HashSet<Variable>> newAvailableLinearVars = new Dictionary<Absy, HashSet<Variable>>();
+ foreach (Absy absy in this.availableLinearVars.Keys)
+ {
+ HashSet<Variable> vars = new HashSet<Variable>();
+ foreach (Variable var in this.availableLinearVars[absy])
+ {
+ if (var is GlobalVariable) continue;
+ string domainName = FindDomainName(var);
+ if (this.linearDomains.ContainsKey(domainName))
+ {
+ vars.Add(var);
+ }
+ }
+ newAvailableLinearVars[absy] = vars;
+ }
+ this.availableLinearVars = newAvailableLinearVars;
+ var temp = new Dictionary<Variable, string>();
+ foreach (Variable v in outParamToDomainName.Keys)
+ {
+ if (linearDomains.ContainsKey(outParamToDomainName[v]))
+ temp[v] = outParamToDomainName[v];
+ }
+ this.outParamToDomainName = temp;
+ temp = new Dictionary<Variable, string>();
+ foreach (Variable v in varToDomainName.Keys)
+ {
+ if (linearDomains.ContainsKey(varToDomainName[v]))
+ temp[v] = varToDomainName[v];
+ }
+ this.varToDomainName = temp;
+ temp = new Dictionary<Variable, string>();
+ foreach (Variable v in globalVarToDomainName.Keys)
+ {
+ if (linearDomains.ContainsKey(globalVarToDomainName[v]))
+ temp[v] = globalVarToDomainName[v];
+ }
+ this.globalVarToDomainName = temp;
+ }
+ private void Error(Absy node, string message)
+ {
+ checkingContext.Error(node, message);
+ errorCount++;
+ }
+ public override Program VisitProgram(Program node)
+ {
+ foreach (GlobalVariable g in program.GlobalVariables)
+ {
+ string domainName = FindDomainName(g);
+ if (domainName != null)
+ {
+ globalVarToDomainName[g] = domainName;
+ }
+ }
+ return base.VisitProgram(node);
+ }
+ public override Function VisitFunction(Function node)
+ {
+ string domainName = QKeyValue.FindStringAttribute(node.Attributes, "linear");
+ if (domainName != null)
+ {
+ if (!domainNameToCollectors.ContainsKey(domainName))
+ {
+ domainNameToCollectors[domainName] = new Dictionary<Type, Function>();
+ }
+ if (node.InParams.Count == 1 && node.OutParams.Count == 1)
+ {
+ Type inType = node.InParams[0].TypedIdent.Type;
+ MapType outType = node.OutParams[0].TypedIdent.Type as MapType;
+ if (domainNameToCollectors[domainName].ContainsKey(inType))
+ {
+ Error(node, string.Format("A collector for domain for input type has already been defined"));
+ }
+ else if (outType == null || outType.Arguments.Count != 1 || !outType.Result.Equals(Type.Bool))
+ {
+ Error(node, "Output of a linear domain collector should be of set type");
+ }
+ else
+ {
+ domainNameToCollectors[domainName][inType] = node;
+ }
+ }
+ else
+ {
+ Error(node, "Linear domain collector should have one input and one output parameter");
+ }
+ }
+ return base.VisitFunction(node);
+ }
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ node.PruneUnreachableBlocks();
+ node.ComputePredecessorsForBlocks();
+ GraphUtil.Graph<Block> graph = Program.GraphFromImpl(node);
+ graph.ComputeLoops();
+
+ HashSet<Variable> start = new HashSet<Variable>(globalVarToDomainName.Keys);
+ for (int i = 0; i < node.InParams.Count; i++)
+ {
+ Variable v = node.Proc.InParams[i];
+ string domainName = FindDomainName(v);
+ if (domainName != null)
+ {
+ var kind = FindLinearKind(v);
+ inParamToLinearQualifier[node.InParams[i]] = new LinearQualifier(domainName, kind);
+ if (kind == LinearKind.LINEAR || kind == LinearKind.LINEAR_IN)
+ {
+ start.Add(node.InParams[i]);
+ }
+ }
+ }
+ for (int i = 0; i < node.OutParams.Count; i++)
+ {
+ string domainName = FindDomainName(node.Proc.OutParams[i]);
+ if (domainName != null)
+ {
+ outParamToDomainName[node.OutParams[i]] = domainName;
+ }
+ }
+
+ var oldErrorCount = this.errorCount;
+ var impl = base.VisitImplementation(node);
+ if (oldErrorCount < this.errorCount)
+ return impl;
+
+ Stack<Block> dfsStack = new Stack<Block>();
+ HashSet<Block> dfsStackAsSet = new HashSet<Block>();
+ availableLinearVars[node.Blocks[0]] = start;
+ dfsStack.Push(node.Blocks[0]);
+ dfsStackAsSet.Add(node.Blocks[0]);
+ while (dfsStack.Count > 0)
+ {
+ Block b = dfsStack.Pop();
+ dfsStackAsSet.Remove(b);
+ HashSet<Variable> end = PropagateAvailableLinearVarsAcrossBlock(b);
+ if (b.TransferCmd is ReturnCmd)
+ {
+ foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(end))
+ {
+ Error(b.TransferCmd, string.Format("Global variable {0} must be available at a return", g.Name));
+ }
+ foreach (Variable v in node.InParams)
+ {
+ if (FindDomainName(v) == null || FindLinearKind(v) == LinearKind.LINEAR_IN || end.Contains(v)) continue;
+ Error(b.TransferCmd, string.Format("Input variable {0} must be available at a return", v.Name));
+ }
+ foreach (Variable v in node.OutParams)
+ {
+ if (FindDomainName(v) == null || end.Contains(v)) continue;
+ Error(b.TransferCmd, string.Format("Output variable {0} must be available at a return", v.Name));
+ }
+ continue;
+ }
+ GotoCmd gotoCmd = b.TransferCmd as GotoCmd;
+ foreach (Block target in gotoCmd.labelTargets)
+ {
+ if (!availableLinearVars.ContainsKey(target))
+ {
+ availableLinearVars[target] = new HashSet<Variable>(end);
+ dfsStack.Push(target);
+ dfsStackAsSet.Add(target);
+ }
+ else
+ {
+ var savedAvailableVars = new HashSet<Variable>(availableLinearVars[target]);
+ availableLinearVars[target].IntersectWith(end);
+ if (savedAvailableVars.IsProperSupersetOf(availableLinearVars[target]) && !dfsStackAsSet.Contains(target))
+ {
+ dfsStack.Push(target);
+ dfsStackAsSet.Add(target);
+ }
+ }
+ }
+ }
+
+ if (graph.Reducible)
+ {
+ foreach (Block header in graph.Headers)
+ {
+ foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(availableLinearVars[header]))
+ {
+ Error(header, string.Format("Global variable {0} must be available at a loop head", g.Name));
+ }
+ }
+ }
+ return impl;
+ }
+ public void AddAvailableVars(CallCmd callCmd, HashSet<Variable> start)
+ {
+ foreach (IdentifierExpr ie in callCmd.Outs)
+ {
+ if (FindDomainName(ie.Decl) == null) continue;
+ start.Add(ie.Decl);
+ }
+ for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
+ {
+ IdentifierExpr ie = callCmd.Ins[i] as IdentifierExpr;
+ if (ie == null) continue;
+ Variable v = callCmd.Proc.InParams[i];
+ if (FindDomainName(v) == null) continue;
+ if (FindLinearKind(v) == LinearKind.LINEAR_OUT)
+ {
+ start.Add(ie.Decl);
+ }
+ }
+ }
+ public void AddAvailableVars(ParCallCmd parCallCmd, HashSet<Variable> start)
+ {
+ foreach (CallCmd callCmd in parCallCmd.CallCmds)
+ {
+ AddAvailableVars(callCmd, start);
+ }
+ }
+ private HashSet<Variable> PropagateAvailableLinearVarsAcrossBlock(Block b) {
+ HashSet<Variable> start = new HashSet<Variable>(availableLinearVars[b]);
+ foreach (Cmd cmd in b.Cmds)
+ {
+ if (cmd is AssignCmd)
+ {
+ AssignCmd assignCmd = (AssignCmd)cmd;
+ for (int i = 0; i < assignCmd.Lhss.Count; i++)
+ {
+ if (FindDomainName(assignCmd.Lhss[i].DeepAssignedVariable) == null) continue;
+ IdentifierExpr ie = assignCmd.Rhss[i] as IdentifierExpr;
+ if (!start.Contains(ie.Decl))
+ {
+ Error(ie, "unavailable source for a linear read");
+ }
+ else
+ {
+ start.Remove(ie.Decl);
+ }
+ }
+ foreach (AssignLhs assignLhs in assignCmd.Lhss)
+ {
+ if (FindDomainName(assignLhs.DeepAssignedVariable) == null) continue;
+ start.Add(assignLhs.DeepAssignedVariable);
+ }
+ }
+ else if (cmd is CallCmd)
+ {
+ foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(start))
+ {
+ Error(cmd, string.Format("Global variable {0} must be available at a call", g.Name));
+ }
+ CallCmd callCmd = (CallCmd)cmd;
+ for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
+ {
+ Variable param = callCmd.Proc.InParams[i];
+ if (FindDomainName(param) == null) continue;
+ IdentifierExpr ie = callCmd.Ins[i] as IdentifierExpr;
+ LinearKind paramKind = FindLinearKind(param);
+ if (start.Contains(ie.Decl))
+ {
+ if (callCmd.IsAsync || paramKind == LinearKind.LINEAR_IN)
+ {
+ start.Remove(ie.Decl);
+ }
+ }
+ else
+ {
+ if (paramKind == LinearKind.LINEAR_OUT)
+ {
+ start.Add(ie.Decl);
+ }
+ else
+ {
+ Error(ie, "unavailable source for a linear read");
+ }
+ }
+ }
+ availableLinearVars[callCmd] = new HashSet<Variable>(start);
+ AddAvailableVars(callCmd, start);
+ }
+ else if (cmd is ParCallCmd)
+ {
+ foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(start))
+ {
+ Error(cmd, string.Format("Global variable {0} must be available at a call", g.Name));
+ }
+ ParCallCmd parCallCmd = (ParCallCmd)cmd;
+ foreach (CallCmd callCmd in parCallCmd.CallCmds)
+ {
+ for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
+ {
+ Variable param = callCmd.Proc.InParams[i];
+ if (FindDomainName(param) == null) continue;
+ IdentifierExpr ie = callCmd.Ins[i] as IdentifierExpr;
+ LinearKind paramKind = FindLinearKind(param);
+ if (start.Contains(ie.Decl))
+ {
+ if (paramKind == LinearKind.LINEAR_IN)
+ {
+ start.Remove(ie.Decl);
+ }
+ }
+ else
+ {
+ if (paramKind == LinearKind.LINEAR_OUT)
+ {
+ start.Add(ie.Decl);
+ }
+ else
+ {
+ Error(ie, "unavailable source for a linear read");
+ }
+ }
+ }
+ }
+ availableLinearVars[parCallCmd] = new HashSet<Variable>(start);
+ AddAvailableVars(parCallCmd, start);
+ }
+ else if (cmd is HavocCmd)
+ {
+ HavocCmd havocCmd = (HavocCmd)cmd;
+ foreach (IdentifierExpr ie in havocCmd.Vars)
+ {
+ if (FindDomainName(ie.Decl) == null) continue;
+ start.Remove(ie.Decl);
+ }
+ }
+ else if (cmd is YieldCmd)
+ {
+ foreach (GlobalVariable g in globalVarToDomainName.Keys.Except(start))
+ {
+ Error(cmd, string.Format("Global variable {0} must be available at a yield", g.Name));
+ }
+ availableLinearVars[cmd] = new HashSet<Variable>(start);
+ }
+ }
+ return start;
+ }
+ public string FindDomainName(Variable v)
+ {
+ if (globalVarToDomainName.ContainsKey(v))
+ return globalVarToDomainName[v];
+ if (inParamToLinearQualifier.ContainsKey(v))
+ return inParamToLinearQualifier[v].domainName;
+ if (outParamToDomainName.ContainsKey(v))
+ return outParamToDomainName[v];
+ string domainName = QKeyValue.FindStringAttribute(v.Attributes, "linear");
+ if (domainName != null)
+ return domainName;
+ domainName = QKeyValue.FindStringAttribute(v.Attributes, "linear_in");
+ if (domainName != null)
+ return domainName;
+ return QKeyValue.FindStringAttribute(v.Attributes, "linear_out");
+ }
+ public LinearKind FindLinearKind(Variable v)
+ {
+ if (globalVarToDomainName.ContainsKey(v))
+ return LinearKind.LINEAR;
+ if (inParamToLinearQualifier.ContainsKey(v))
+ return inParamToLinearQualifier[v].kind;
+ if (outParamToDomainName.ContainsKey(v))
+ return LinearKind.LINEAR;
+
+ if (QKeyValue.FindStringAttribute(v.Attributes, "linear") != null)
+ {
+ return LinearKind.LINEAR;
+ }
+ else if (QKeyValue.FindStringAttribute(v.Attributes, "linear_in") != null)
+ {
+ return LinearKind.LINEAR_IN;
+ }
+ else if (QKeyValue.FindStringAttribute(v.Attributes, "linear_out") != null)
+ {
+ return LinearKind.LINEAR_OUT;
+ }
+ else
+ {
+ Debug.Assert(false);
+ return LinearKind.LINEAR;
+ }
+ }
+ public override Variable VisitVariable(Variable node)
+ {
+ string domainName = FindDomainName(node);
+ if (domainName != null)
+ {
+ if (!domainNameToCollectors.ContainsKey(domainName))
+ {
+ domainNameToCollectors[domainName] = new Dictionary<Type,Function>();
+ }
+ LinearKind kind = FindLinearKind(node);
+ if (kind != LinearKind.LINEAR)
+ {
+ if (node is GlobalVariable || node is LocalVariable || (node is Formal && !(node as Formal).InComing))
+ {
+ Error(node, "Variable must be declared linear (as opposed to linear_in or linear_out)");
+ }
+ }
+ }
+ return base.VisitVariable(node);
+ }
+ public override Cmd VisitAssignCmd(AssignCmd node)
+ {
+ HashSet<Variable> rhsVars = new HashSet<Variable>();
+ for (int i = 0; i < node.Lhss.Count; i++)
+ {
+ AssignLhs lhs = node.Lhss[i];
+ Variable lhsVar = lhs.DeepAssignedVariable;
+ string domainName = FindDomainName(lhsVar);
+ if (domainName == null) continue;
+ SimpleAssignLhs salhs = lhs as SimpleAssignLhs;
+ if (salhs == null)
+ {
+ Error(node, string.Format("Only simple assignment allowed on linear variable {0}", lhsVar.Name));
+ continue;
+ }
+ IdentifierExpr rhs = node.Rhss[i] as IdentifierExpr;
+ if (rhs == null)
+ {
+ Error(node, string.Format("Only variable can be assigned to linear variable {0}", lhsVar.Name));
+ continue;
+ }
+ string rhsDomainName = FindDomainName(rhs.Decl);
+ if (rhsDomainName == null)
+ {
+ Error(node, string.Format("Only linear variable can be assigned to linear variable {0}", lhsVar.Name));
+ continue;
+ }
+ if (domainName != rhsDomainName)
+ {
+ Error(node, string.Format("Linear variable of domain {0} cannot be assigned to linear variable of domain {1}", rhsDomainName, domainName));
+ continue;
+ }
+ if (rhsVars.Contains(rhs.Decl))
+ {
+ Error(node, string.Format("Linear variable {0} can occur only once in the right-hand-side of an assignment", rhs.Decl.Name));
+ continue;
+ }
+ rhsVars.Add(rhs.Decl);
+ }
+ return base.VisitAssignCmd(node);
+ }
+ public override Cmd VisitCallCmd(CallCmd node)
+ {
+ HashSet<Variable> inVars = new HashSet<Variable>();
+ for (int i = 0; i < node.Proc.InParams.Count; i++)
+ {
+ Variable formal = node.Proc.InParams[i];
+ string domainName = FindDomainName(formal);
+ if (domainName == null) continue;
+ IdentifierExpr actual = node.Ins[i] as IdentifierExpr;
+ if (actual == null)
+ {
+ Error(node, string.Format("Only variable can be passed to linear parameter {0}", formal.Name));
+ continue;
+ }
+ string actualDomainName = FindDomainName(actual.Decl);
+ if (actualDomainName == null)
+ {
+ Error(node, string.Format("Only a linear argument can be passed to linear parameter {0}", formal.Name));
+ continue;
+ }
+ if (domainName != actualDomainName)
+ {
+ Error(node, "The domains of formal and actual parameters must be the same");
+ continue;
+ }
+ if (actual.Decl is GlobalVariable)
+ {
+ Error(node, "Only local linear variable can be an actual input parameter of a procedure call");
+ continue;
+ }
+ if (inVars.Contains(actual.Decl))
+ {
+ Error(node, string.Format("Linear variable {0} can occur only once as an input parameter", actual.Decl.Name));
+ continue;
+ }
+ inVars.Add(actual.Decl);
+ }
+ for (int i = 0; i < node.Proc.OutParams.Count; i++)
+ {
+ IdentifierExpr actual = node.Outs[i];
+ string actualDomainName = FindDomainName(actual.Decl);
+ if (actualDomainName == null) continue;
+ Variable formal = node.Proc.OutParams[i];
+ string domainName = FindDomainName(formal);
+ if (domainName == null)
+ {
+ Error(node, "Only a linear variable can be passed to a linear parameter");
+ continue;
+ }
+ if (domainName != actualDomainName)
+ {
+ Error(node, "The domains of formal and actual parameters must be the same");
+ continue;
+ }
+ if (actual.Decl is GlobalVariable)
+ {
+ Error(node, "Only local linear variable can be actual output parameter of a procedure call");
+ continue;
+ }
+ }
+ return base.VisitCallCmd(node);
+ }
+ public override Cmd VisitParCallCmd(ParCallCmd node)
+ {
+ HashSet<Variable> parallelCallInvars = new HashSet<Variable>();
+ foreach (CallCmd callCmd in node.CallCmds)
+ {
+ for (int i = 0; i < callCmd.Proc.InParams.Count; i++)
+ {
+ Variable formal = callCmd.Proc.InParams[i];
+ string domainName = FindDomainName(formal);
+ if (domainName == null) continue;
+ IdentifierExpr actual = callCmd.Ins[i] as IdentifierExpr;
+ if (parallelCallInvars.Contains(actual.Decl))
+ {
+ Error(node, string.Format("Linear variable {0} can occur only once as an input parameter of a parallel call", actual.Decl.Name));
+ }
+ else
+ {
+ parallelCallInvars.Add(actual.Decl);
+ }
+ }
+ }
+ return base.VisitParCallCmd(node);
+ }
+
+ public override Requires VisitRequires(Requires requires)
+ {
+ return requires;
+ }
+
+ public override Ensures VisitEnsures(Ensures ensures)
+ {
+ return ensures;
+ }
+
+ public IEnumerable<Variable> AvailableLinearVars(Absy absy)
+ {
+ if (availableLinearVars.ContainsKey(absy))
+ {
+ return availableLinearVars[absy];
+ }
+ else
+ {
+ return new HashSet<Variable>();
+ }
+ }
+
+ private void AddDisjointnessExpr(List<Cmd> newCmds, Absy absy, Dictionary<string, Variable> domainNameToInputVar)
+ {
+ Dictionary<string, HashSet<Variable>> domainNameToScope = new Dictionary<string, HashSet<Variable>>();
+ foreach (var domainName in linearDomains.Keys)
+ {
+ domainNameToScope[domainName] = new HashSet<Variable>();
+ }
+ foreach (Variable v in AvailableLinearVars(absy))
+ {
+ var domainName = FindDomainName(v);
+ domainNameToScope[domainName].Add(v);
+ }
+ foreach (Variable v in globalVarToDomainName.Keys)
+ {
+ var domainName = FindDomainName(v);
+ domainNameToScope[domainName].Add(v);
+ }
+ foreach (string domainName in linearDomains.Keys)
+ {
+ newCmds.Add(new AssumeCmd(Token.NoToken, DisjointnessExpr(domainName, domainNameToInputVar[domainName], domainNameToScope[domainName])));
+ }
+ }
+
+ public void Transform()
+ {
+ foreach (var impl in program.Implementations)
+ {
+ Dictionary<string, Variable> domainNameToInputVar = new Dictionary<string, Variable>();
+ foreach (string domainName in linearDomains.Keys)
+ {
+ var domain = linearDomains[domainName];
+ Formal f = new Formal(
+ Token.NoToken,
+ new TypedIdent(Token.NoToken,
+ "linear_" + domainName + "_in",
+ new MapType(Token.NoToken, new List<TypeVariable>(),
+ new List<Type> { domain.elementType }, Type.Bool)), true);
+ impl.InParams.Add(f);
+ domainNameToInputVar[domainName] = f;
+ }
+
+ foreach (Block b in impl.Blocks)
+ {
+ List<Cmd> newCmds = new List<Cmd>();
+ for (int i = 0; i < b.Cmds.Count; i++)
+ {
+ Cmd cmd = b.Cmds[i];
+ newCmds.Add(cmd);
+ if (cmd is CallCmd)
+ {
+ CallCmd callCmd = cmd as CallCmd;
+ if (callCmd.IsAsync)
+ {
+ foreach (var domainName in linearDomains.Keys)
+ {
+ var domain = linearDomains[domainName];
+ var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstBool), new List<Expr> { Expr.False });
+ expr.Resolve(new ResolutionContext(null));
+ expr.Typecheck(new TypecheckingContext(null));
+ callCmd.Ins.Add(expr);
+ }
+ }
+ else
+ {
+ Dictionary<string, Expr> domainNameToExpr = new Dictionary<string, Expr>();
+ foreach (var domainName in linearDomains.Keys)
+ {
+ domainNameToExpr[domainName] = Expr.Ident(domainNameToInputVar[domainName]);
+ }
+ foreach (Variable v in AvailableLinearVars(callCmd))
+ {
+ var domainName = FindDomainName(v);
+ var domain = linearDomains[domainName];
+ if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
+ Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
+ var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapOrBool), new List<Expr> { ie, domainNameToExpr[domainName] });
+ expr.Resolve(new ResolutionContext(null));
+ expr.Typecheck(new TypecheckingContext(null));
+ domainNameToExpr[domainName] = expr;
+ }
+ foreach (var domainName in linearDomains.Keys)
+ {
+ callCmd.Ins.Add(domainNameToExpr[domainName]);
+ }
+ }
+ }
+ else if (cmd is ParCallCmd)
+ {
+ ParCallCmd parCallCmd = (ParCallCmd)cmd;
+ foreach (CallCmd callCmd in parCallCmd.CallCmds)
+ {
+ foreach (var domainName in linearDomains.Keys)
+ {
+ var domain = linearDomains[domainName];
+ var expr = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstBool), new List<Expr> { Expr.False });
+ expr.Resolve(new ResolutionContext(null));
+ expr.Typecheck(new TypecheckingContext(null));
+ callCmd.Ins.Add(expr);
+ }
+ }
+ }
+ else if (cmd is YieldCmd)
+ {
+ AddDisjointnessExpr(newCmds, cmd, domainNameToInputVar);
+ }
+ }
+ b.Cmds = newCmds;
+ }
+
+ {
+ // Loops
+ impl.PruneUnreachableBlocks();
+ impl.ComputePredecessorsForBlocks();
+ GraphUtil.Graph<Block> g = Program.GraphFromImpl(impl);
+ g.ComputeLoops();
+ if (g.Reducible)
+ {
+ foreach (Block header in g.Headers)
+ {
+ List<Cmd> newCmds = new List<Cmd>();
+ AddDisjointnessExpr(newCmds, header, domainNameToInputVar);
+ newCmds.AddRange(header.Cmds);
+ header.Cmds = newCmds;
+ }
+ }
+ }
+ }
+
+ foreach (var proc in program.Procedures)
+ {
+ Dictionary<string, HashSet<Variable>> domainNameToInputScope = new Dictionary<string, HashSet<Variable>>();
+ Dictionary<string, HashSet<Variable>> domainNameToOutputScope = new Dictionary<string, HashSet<Variable>>();
+ foreach (var domainName in linearDomains.Keys)
+ {
+ domainNameToInputScope[domainName] = new HashSet<Variable>();
+ domainNameToOutputScope[domainName] = new HashSet<Variable>();
+
+ }
+ foreach (Variable v in globalVarToDomainName.Keys)
+ {
+ var domainName = globalVarToDomainName[v];
+ domainNameToInputScope[domainName].Add(v);
+ domainNameToOutputScope[domainName].Add(v);
+ }
+ foreach (Variable v in proc.InParams)
+ {
+ var domainName = FindDomainName(v);
+ if (domainName == null) continue;
+ if (!this.linearDomains.ContainsKey(domainName)) continue;
+ domainNameToInputScope[domainName].Add(v);
+ }
+ foreach (Variable v in proc.OutParams)
+ {
+ var domainName = FindDomainName(v);
+ if (domainName == null) continue;
+ if (!this.linearDomains.ContainsKey(domainName)) continue;
+ domainNameToOutputScope[domainName].Add(v);
+ }
+ foreach (var domainName in linearDomains.Keys)
+ {
+ proc.Requires.Add(new Requires(true, DisjointnessExpr(domainName, domainNameToInputScope[domainName])));
+ var domain = linearDomains[domainName];
+ Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "linear_" + domainName + "_in", new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Type.Bool)), true);
+ proc.InParams.Add(f);
+ proc.Ensures.Add(new Ensures(true, DisjointnessExpr(domainName, f, domainNameToOutputScope[domainName])));
+ }
+ }
+
+ foreach (LinearDomain domain in linearDomains.Values)
+ {
+ program.AddTopLevelDeclaration(domain.mapConstBool);
+ program.AddTopLevelDeclaration(domain.mapConstInt);
+ program.AddTopLevelDeclaration(domain.mapEqInt);
+ program.AddTopLevelDeclaration(domain.mapImpBool);
+ program.AddTopLevelDeclaration(domain.mapOrBool);
+ foreach (Axiom axiom in domain.axioms)
+ {
+ program.AddTopLevelDeclaration(axiom);
+ }
+ }
+
+ //int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
+ //CommandLineOptions.Clo.PrintUnstructured = 1;
+ //PrintBplFile("lsd.bpl", program, false, false);
+ //CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
+ }
+
+ private Expr SubsetExpr(LinearDomain domain, Expr ie, Variable partition, int partitionCount)
+ {
+ Expr e = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstInt), new List<Expr> { new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(partitionCount)) });
+ e = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapEqInt), new List<Expr> { Expr.Ident(partition), e });
+ e = new NAryExpr(Token.NoToken, new FunctionCall(domain.mapImpBool), new List<Expr> { ie, e });
+ e = Expr.Eq(e, new NAryExpr(Token.NoToken, new FunctionCall(domain.mapConstBool), new List<Expr> { Expr.True }));
+ return e;
+ }
+
+ private Expr SubsetExprs(LinearDomain domain, HashSet<Variable> scope, Variable partition, int count, Expr expr)
+ {
+ foreach (Variable v in scope)
+ {
+ if (!domain.collectors.ContainsKey(v.TypedIdent.Type)) continue;
+ Expr ie = new NAryExpr(Token.NoToken, new FunctionCall(domain.collectors[v.TypedIdent.Type]), new List<Expr> { Expr.Ident(v) });
+ expr = Expr.And(SubsetExpr(domain, ie, partition, count), expr);
+ count++;
+ }
+ expr = new ExistsExpr(Token.NoToken, new List<Variable> { partition }, expr);
+ expr.Resolve(new ResolutionContext(null));
+ expr.Typecheck(new TypecheckingContext(null));
+ return expr;
+ }
+
+ public Expr DisjointnessExpr(string domainName, Variable inputVar, HashSet<Variable> scope)
+ {
+ LinearDomain domain = linearDomains[domainName];
+ BoundVariable partition = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("partition_{0}", domainName), new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Microsoft.Boogie.Type.Int)));
+ return SubsetExprs(domain, scope, partition, 1, SubsetExpr(domain, Expr.Ident(inputVar), partition, 0));
+ }
+
+ public Expr DisjointnessExpr(string domainName, HashSet<Variable> scope)
+ {
+ LinearDomain domain = linearDomains[domainName];
+ BoundVariable partition = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("partition_{0}", domainName), new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { domain.elementType }, Microsoft.Boogie.Type.Int)));
+ return SubsetExprs(domain, scope, partition, 0, Expr.True);
+ }
+ }
+
+ public class LinearQualifier
+ {
+ public string domainName;
+ public LinearKind kind;
+ public LinearQualifier(string domainName, LinearKind kind)
+ {
+ this.domainName = domainName;
+ this.kind = kind;
+ }
+ }
+
+ public class LinearDomain
+ {
+ public Function mapEqInt;
+ public Function mapConstInt;
+ public Function mapOrBool;
+ public Function mapImpBool;
+ public Function mapConstBool;
+ public List<Axiom> axioms;
+ public Type elementType;
+ public Dictionary<Type, Function> collectors;
+
+ public LinearDomain(Program program, string domainName, Dictionary<Type, Function> collectors)
+ {
+ this.axioms = new List<Axiom>();
+ this.collectors = collectors;
+ MapType setType = (MapType)collectors.First().Value.OutParams[0].TypedIdent.Type;
+ this.elementType = setType.Arguments[0];
+ MapType mapTypeBool = new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { this.elementType }, Type.Bool);
+ MapType mapTypeInt = new MapType(Token.NoToken, new List<TypeVariable>(), new List<Type> { this.elementType }, Type.Int);
+ this.mapOrBool = new Function(Token.NoToken, "linear_" + domainName + "_MapOr",
+ new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool), true),
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool), true) },
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ {
+ this.mapOrBool.AddAttribute("builtin", "MapOr");
+ }
+ else
+ {
+ BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool));
+ IdentifierExpr aie = Expr.Ident(a);
+ BoundVariable b = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool));
+ IdentifierExpr bie = Expr.Ident(b);
+ BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
+ IdentifierExpr xie = Expr.Ident(x);
+ var mapApplTerm = new NAryExpr(Token.NoToken, new FunctionCall(mapOrBool), new List<Expr> { aie, bie } );
+ var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { mapApplTerm, xie } );
+ var rhsTerm = Expr.Or(new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { aie, xie } ),
+ new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { bie, xie} ));
+ var axiomExpr = new ForallExpr(Token.NoToken, new List<TypeVariable>(), new List<Variable> { a, b }, null,
+ new Trigger(Token.NoToken, true, new List<Expr> { mapApplTerm }),
+ new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, rhsTerm)));
+ axiomExpr.Typecheck(new TypecheckingContext(null));
+ axioms.Add(new Axiom(Token.NoToken, axiomExpr));
+ }
+
+ this.mapImpBool = new Function(Token.NoToken, "linear_" + domainName + "_MapImp",
+ new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool), true),
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool), true) },
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ {
+ this.mapImpBool.AddAttribute("builtin", "MapImp");
+ }
+ else
+ {
+ BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeBool));
+ IdentifierExpr aie = Expr.Ident(a);
+ BoundVariable b = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeBool));
+ IdentifierExpr bie = Expr.Ident(b);
+ BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
+ IdentifierExpr xie = Expr.Ident(x);
+ var mapApplTerm = new NAryExpr(Token.NoToken, new FunctionCall(mapImpBool), new List<Expr> { aie, bie });
+ var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { mapApplTerm, xie });
+ var rhsTerm = Expr.Imp(new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { aie, xie }),
+ new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { bie, xie }));
+ var axiomExpr = new ForallExpr(Token.NoToken, new List<TypeVariable>(), new List<Variable> { a, b }, null,
+ new Trigger(Token.NoToken, true, new List<Expr> { mapApplTerm }),
+ new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, rhsTerm)));
+ axiomExpr.Typecheck(new TypecheckingContext(null));
+ axioms.Add(new Axiom(Token.NoToken, axiomExpr));
+ }
+
+ this.mapConstBool = new Function(Token.NoToken, "linear_" + domainName + "_MapConstBool",
+ new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", Type.Bool), true) },
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ {
+ this.mapConstBool.AddAttribute("builtin", "MapConst");
+ }
+ else
+ {
+ BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
+ IdentifierExpr xie = Expr.Ident(x);
+ var trueTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1),
+ new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(mapConstBool), new List<Expr> { Expr.True }), xie });
+ var trueAxiomExpr = new ForallExpr(Token.NoToken, new List<Variable> { x }, trueTerm);
+ trueAxiomExpr.Typecheck(new TypecheckingContext(null));
+ axioms.Add(new Axiom(Token.NoToken, trueAxiomExpr));
+ var falseTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1),
+ new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(mapConstBool), new List<Expr> { Expr.False }), xie });
+ var falseAxiomExpr = new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Unary(Token.NoToken, UnaryOperator.Opcode.Not, falseTerm));
+ falseAxiomExpr.Typecheck(new TypecheckingContext(null));
+ axioms.Add(new Axiom(Token.NoToken, falseAxiomExpr));
+ }
+
+ this.mapEqInt = new Function(Token.NoToken, "linear_" + domainName + "_MapEq",
+ new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeInt), true),
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeInt), true) },
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeBool), false));
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ {
+ this.mapEqInt.AddAttribute("builtin", "MapEq");
+ }
+ else
+ {
+ BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", mapTypeInt));
+ IdentifierExpr aie = Expr.Ident(a);
+ BoundVariable b = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "b", mapTypeInt));
+ IdentifierExpr bie = Expr.Ident(b);
+ BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
+ IdentifierExpr xie = Expr.Ident(x);
+ var mapApplTerm = new NAryExpr(Token.NoToken, new FunctionCall(mapEqInt), new List<Expr> { aie, bie });
+ var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { mapApplTerm, xie });
+ var rhsTerm = Expr.Eq(new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { aie, xie }),
+ new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { bie, xie }));
+ var axiomExpr = new ForallExpr(Token.NoToken, new List<TypeVariable>(), new List<Variable> { a, b }, null,
+ new Trigger(Token.NoToken, true, new List<Expr> { mapApplTerm }),
+ new ForallExpr(Token.NoToken, new List<Variable> { x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, rhsTerm)));
+ axiomExpr.Typecheck(new TypecheckingContext(null));
+ axioms.Add(new Axiom(Token.NoToken, axiomExpr));
+ }
+
+ this.mapConstInt = new Function(Token.NoToken, "linear_" + domainName + "_MapConstInt",
+ new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "b", Type.Int), true) },
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "c", mapTypeInt), false));
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ {
+ this.mapConstInt.AddAttribute("builtin", "MapConst");
+ }
+ else
+ {
+ BoundVariable a = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "a", Type.Int));
+ IdentifierExpr aie = Expr.Ident(a);
+ BoundVariable x = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "x", elementType));
+ IdentifierExpr xie = Expr.Ident(x);
+ var lhsTerm = new NAryExpr(Token.NoToken, new MapSelect(Token.NoToken, 1), new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(mapConstInt), new List<Expr> { aie }), xie });
+ var axiomExpr = new ForallExpr(Token.NoToken, new List<Variable> { a, x }, Expr.Binary(BinaryOperator.Opcode.Eq, lhsTerm, aie));
+ axiomExpr.Typecheck(new TypecheckingContext(null));
+ axioms.Add(new Axiom(Token.NoToken, axiomExpr));
+ }
+
+ foreach (var axiom in axioms)
+ {
+ axiom.Expr.Resolve(new ResolutionContext(null));
+ axiom.Expr.Typecheck(new TypecheckingContext(null));
+ }
+ }
+ }
+}
diff --git a/Source/Concurrency/MoverCheck.cs b/Source/Concurrency/MoverCheck.cs
index 971e7271..732bcaa4 100644
--- a/Source/Concurrency/MoverCheck.cs
+++ b/Source/Concurrency/MoverCheck.cs
@@ -1,649 +1,673 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics.Contracts;
-using System.Diagnostics;
-
-namespace Microsoft.Boogie
-{
- public class MoverCheck
- {
- LinearTypeChecker linearTypeChecker;
- MoverTypeChecker moverTypeChecker;
- List<Declaration> decls;
- HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>> commutativityCheckerCache;
- HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>> gatePreservationCheckerCache;
- HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>> failurePreservationCheckerCache;
- private MoverCheck(LinearTypeChecker linearTypeChecker, MoverTypeChecker moverTypeChecker, List<Declaration> decls)
- {
- this.linearTypeChecker = linearTypeChecker;
- this.moverTypeChecker = moverTypeChecker;
- this.decls = decls;
- this.commutativityCheckerCache = new HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>>();
- this.gatePreservationCheckerCache = new HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>>();
- this.failurePreservationCheckerCache = new HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>>();
- }
-
- public static void AddCheckers(LinearTypeChecker linearTypeChecker, MoverTypeChecker moverTypeChecker, List<Declaration> decls)
- {
- if (moverTypeChecker.procToActionInfo.Count == 0)
- return;
-
- List<ActionInfo> sortedByCreatedLayerNum = new List<ActionInfo>(moverTypeChecker.procToActionInfo.Values.Where(x => x is AtomicActionInfo));
- sortedByCreatedLayerNum.Sort((x, y) => { return (x.createdAtLayerNum == y.createdAtLayerNum) ? 0 : (x.createdAtLayerNum < y.createdAtLayerNum) ? -1 : 1; });
- List<ActionInfo> sortedByAvailableUptoLayerNum = new List<ActionInfo>(moverTypeChecker.procToActionInfo.Values.Where(x => x is AtomicActionInfo));
- sortedByAvailableUptoLayerNum.Sort((x, y) => { return (x.availableUptoLayerNum == y.availableUptoLayerNum) ? 0 : (x.availableUptoLayerNum < y.availableUptoLayerNum) ? -1 : 1; });
-
- Dictionary<int, HashSet<AtomicActionInfo>> pools = new Dictionary<int, HashSet<AtomicActionInfo>>();
- int indexIntoSortedByCreatedLayerNum = 0;
- int indexIntoSortedByAvailableUptoLayerNum = 0;
- HashSet<AtomicActionInfo> currPool = new HashSet<AtomicActionInfo>();
- while (indexIntoSortedByCreatedLayerNum < sortedByCreatedLayerNum.Count)
- {
- var currLayerNum = sortedByCreatedLayerNum[indexIntoSortedByCreatedLayerNum].createdAtLayerNum;
- pools[currLayerNum] = new HashSet<AtomicActionInfo>(currPool);
- while (indexIntoSortedByCreatedLayerNum < sortedByCreatedLayerNum.Count)
- {
- var actionInfo = sortedByCreatedLayerNum[indexIntoSortedByCreatedLayerNum] as AtomicActionInfo;
- if (actionInfo.createdAtLayerNum > currLayerNum) break;
- pools[currLayerNum].Add(actionInfo);
- indexIntoSortedByCreatedLayerNum++;
- }
- while (indexIntoSortedByAvailableUptoLayerNum < sortedByAvailableUptoLayerNum.Count)
- {
- var actionInfo = sortedByAvailableUptoLayerNum[indexIntoSortedByAvailableUptoLayerNum] as AtomicActionInfo;
- if (actionInfo.availableUptoLayerNum > currLayerNum) break;
- pools[currLayerNum].Remove(actionInfo);
- indexIntoSortedByAvailableUptoLayerNum++;
- }
- currPool = pools[currLayerNum];
- }
-
- Program program = moverTypeChecker.program;
- MoverCheck moverChecking = new MoverCheck(linearTypeChecker, moverTypeChecker, decls);
- foreach (int layerNum in pools.Keys)
- {
- foreach (AtomicActionInfo first in pools[layerNum])
- {
- Debug.Assert(first.moverType != MoverType.Top);
- if (first.moverType == MoverType.Atomic)
- continue;
- foreach (AtomicActionInfo second in pools[layerNum])
- {
- if (first.IsRightMover)
- {
- moverChecking.CreateCommutativityChecker(program, first, second);
- moverChecking.CreateGatePreservationChecker(program, second, first);
- }
- if (first.IsLeftMover)
- {
- moverChecking.CreateCommutativityChecker(program, second, first);
- moverChecking.CreateGatePreservationChecker(program, first, second);
- moverChecking.CreateFailurePreservationChecker(program, second, first);
- }
- }
- }
- }
- foreach (ActionInfo actionInfo in moverTypeChecker.procToActionInfo.Values)
- {
- AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
- if (atomicActionInfo != null && atomicActionInfo.IsLeftMover && atomicActionInfo.hasAssumeCmd)
- {
- moverChecking.CreateNonBlockingChecker(program, atomicActionInfo);
- }
- }
- }
-
- public sealed class MyDuplicator : Duplicator
- {
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- IdentifierExpr ret = (IdentifierExpr) base.VisitIdentifierExpr(node);
- if (ret.Decl is GlobalVariable)
- {
- return new OldExpr(Token.NoToken, ret);
- }
- else
- {
- return ret;
- }
- }
- }
-
- public class TransitionRelationComputation
- {
- private Program program;
- private AtomicActionInfo first; // corresponds to that*
- private AtomicActionInfo second; // corresponds to this*
- private Stack<Cmd> cmdStack;
- private List<PathInfo> paths;
- private HashSet<Variable> frame;
- private HashSet<Variable> postExistVars;
-
- public TransitionRelationComputation(Program program, AtomicActionInfo second, HashSet<Variable> frame, HashSet<Variable> postExistVars)
- {
- this.postExistVars = postExistVars;
- this.frame = frame;
- TransitionRelationComputationHelper(program, null, second);
- }
-
- public TransitionRelationComputation(Program program, AtomicActionInfo first, AtomicActionInfo second, HashSet<Variable> frame, HashSet<Variable> postExistVars)
- {
- this.postExistVars = postExistVars;
- this.frame = frame;
- TransitionRelationComputationHelper(program, first, second);
- }
-
- private void TransitionRelationComputationHelper(Program program, AtomicActionInfo first, AtomicActionInfo second)
- {
- this.program = program;
- this.first = first;
- this.second = second;
- this.cmdStack = new Stack<Cmd>();
- this.paths = new List<PathInfo>();
- List<IdentifierExpr> havocVars = new List<IdentifierExpr>();
- this.second.thisOutParams.ForEach(v => havocVars.Add(Expr.Ident(v)));
- this.second.thisAction.LocVars.ForEach(v => havocVars.Add(Expr.Ident(v)));
- if (havocVars.Count > 0)
- {
- HavocCmd havocCmd = new HavocCmd(Token.NoToken, havocVars);
- cmdStack.Push(havocCmd);
- }
- Search(this.second.thisAction.Blocks[0], false);
- }
-
- private void Substitute(Dictionary<Variable, Expr> map, ref List<Expr> pathExprs, ref Dictionary<Variable, Expr> varToExpr)
- {
- Substitution subst = Substituter.SubstitutionFromHashtable(map);
- List<Expr> oldPathExprs = pathExprs;
- pathExprs = new List<Expr>();
- foreach (Expr pathExpr in oldPathExprs)
- {
- pathExprs.Add(Substituter.Apply(subst, pathExpr));
- }
- Dictionary<Variable, Expr> oldVarToExpr = varToExpr;
- varToExpr = new Dictionary<Variable, Expr>();
- foreach (Variable v in oldVarToExpr.Keys)
- {
- varToExpr[v] = Substituter.Apply(subst, oldVarToExpr[v]);
- }
- }
-
- struct PathInfo
- {
- public HashSet<Variable> existsVars;
- public Dictionary<Variable, Expr> varToExpr;
- public List<Expr> pathExprs;
-
- public PathInfo(HashSet<Variable> existsVars, Dictionary<Variable, Expr> varToExpr, List<Expr> pathExprs)
- {
- this.existsVars = existsVars;
- this.varToExpr = varToExpr;
- this.pathExprs = pathExprs;
- }
- }
-
- private void FlattenAnd(Expr x, List<Expr> xs)
- {
- NAryExpr naryExpr = x as NAryExpr;
- if (naryExpr != null && naryExpr.Fun.FunctionName == "&&")
- {
- FlattenAnd(naryExpr.Args[0], xs);
- FlattenAnd(naryExpr.Args[1], xs);
- }
- else
- {
- xs.Add(x);
- }
- }
-
- private void AddPath()
- {
- HashSet<Variable> existsVars = new HashSet<Variable>();
- Dictionary<Variable, Expr> varToExpr = new Dictionary<Variable, Expr>();
- foreach (Variable v in frame)
- {
- varToExpr[v] = Expr.Ident(v);
- }
- if (first != null)
- {
- foreach (Variable v in first.thatOutParams)
- {
- varToExpr[v] = Expr.Ident(v);
- }
- }
- foreach (Variable v in second.thisOutParams)
- {
- varToExpr[v] = Expr.Ident(v);
- }
- List<Expr> pathExprs = new List<Expr>();
- int boundVariableCount = 0;
- foreach (Cmd cmd in cmdStack)
- {
- if (cmd is AssumeCmd)
- {
- AssumeCmd assumeCmd = cmd as AssumeCmd;
- FlattenAnd(assumeCmd.Expr, pathExprs);
- }
- else if (cmd is AssignCmd)
- {
- AssignCmd assignCmd = (cmd as AssignCmd).AsSimpleAssignCmd;
- Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
- for (int k = 0; k < assignCmd.Lhss.Count; k++)
- {
- map[assignCmd.Lhss[k].DeepAssignedVariable] = assignCmd.Rhss[k];
- }
- Substitute(map, ref pathExprs, ref varToExpr);
- }
- else if (cmd is HavocCmd)
- {
- HavocCmd havocCmd = cmd as HavocCmd;
- Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
- foreach (IdentifierExpr ie in havocCmd.Vars)
- {
- BoundVariable bv = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "#tmp_" + boundVariableCount++, ie.Decl.TypedIdent.Type));
- map[ie.Decl] = Expr.Ident(bv);
- existsVars.Add(bv);
- }
- Substitute(map, ref pathExprs, ref varToExpr);
- }
- else
- {
- Debug.Assert(false);
- }
- }
- paths.Add(new PathInfo(existsVars, varToExpr, pathExprs));
- }
-
- private Expr CalculatePathCondition(PathInfo path)
- {
- Expr returnExpr = Expr.True;
-
- HashSet<Variable> existsVars = path.existsVars;
- Dictionary<Variable, Expr> existsMap = new Dictionary<Variable, Expr>();
-
- Dictionary<Variable, Expr> varToExpr = path.varToExpr;
- foreach (Variable v in varToExpr.Keys)
- {
- if (postExistVars.Contains(v)) continue;
- IdentifierExpr ie = varToExpr[v] as IdentifierExpr;
- if (ie != null && !existsMap.ContainsKey(ie.Decl) && existsVars.Contains(ie.Decl))
- {
- existsMap[ie.Decl] = Expr.Ident(v);
- existsVars.Remove(ie.Decl);
- }
- else
- {
- returnExpr = Expr.And(returnExpr, Expr.Eq(Expr.Ident(v), (new MyDuplicator()).VisitExpr(varToExpr[v])));
- returnExpr.Type = Type.Bool;
- }
- }
-
- List<Expr> pathExprs = new List<Expr>();
- path.pathExprs.ForEach(x => pathExprs.Add((new MyDuplicator()).VisitExpr(x)));
- foreach (Expr x in pathExprs)
- {
- Variable boundVar;
- Expr boundVarExpr;
- if (InferSubstitution(x, out boundVar, out boundVarExpr) && existsVars.Contains(boundVar))
- {
- existsMap[boundVar] = boundVarExpr;
- existsVars.Remove(boundVar);
- }
- else
- {
- returnExpr = Expr.And(returnExpr, x);
- returnExpr.Type = Type.Bool;
- }
- }
-
- returnExpr = Substituter.Apply(Substituter.SubstitutionFromHashtable(existsMap), returnExpr);
- if (existsVars.Count > 0)
- {
- returnExpr = new ExistsExpr(Token.NoToken, new List<Variable>(existsVars), returnExpr);
- }
- return returnExpr;
- }
-
- bool InferSubstitution(Expr x, out Variable var, out Expr expr)
- {
- var = null;
- expr = null;
- NAryExpr naryExpr = x as NAryExpr;
- if (naryExpr == null || naryExpr.Fun.FunctionName != "==")
- {
- return false;
- }
- IdentifierExpr arg0 = naryExpr.Args[0] as IdentifierExpr;
- if (arg0 != null && arg0.Decl is BoundVariable)
- {
- var = arg0.Decl;
- expr = naryExpr.Args[1];
- return true;
- }
- IdentifierExpr arg1 = naryExpr.Args[1] as IdentifierExpr;
- if (arg1 != null && arg1.Decl is BoundVariable)
- {
- var = arg1.Decl;
- expr = naryExpr.Args[0];
- return true;
- }
- return false;
- }
-
- public Expr TransitionRelationCompute()
- {
- Expr transitionRelation = Expr.False;
- foreach (PathInfo path in paths)
- {
- transitionRelation = Expr.Or(transitionRelation, CalculatePathCondition(path));
- }
- ResolutionContext rc = new ResolutionContext(null);
- rc.StateMode = ResolutionContext.State.Two;
- transitionRelation.Resolve(rc);
- transitionRelation.Typecheck(new TypecheckingContext(null));
- return transitionRelation;
- }
-
- private void Search(Block b, bool inFirst)
- {
- int pathSizeAtEntry = cmdStack.Count;
- foreach (Cmd cmd in b.Cmds)
- {
- cmdStack.Push(cmd);
- }
- if (b.TransferCmd is ReturnCmd)
- {
- if (first == null || inFirst)
- {
- AddPath();
- }
- else
- {
- List<IdentifierExpr> havocVars = new List<IdentifierExpr>();
- first.thatOutParams.ForEach(v => havocVars.Add(Expr.Ident(v)));
- first.thatAction.LocVars.ForEach(v => havocVars.Add(Expr.Ident(v)));
- if (havocVars.Count > 0)
- {
- HavocCmd havocCmd = new HavocCmd(Token.NoToken, havocVars);
- cmdStack.Push(havocCmd);
- }
- Search(first.thatAction.Blocks[0], true);
- }
- }
- else
- {
- GotoCmd gotoCmd = b.TransferCmd as GotoCmd;
- foreach (Block target in gotoCmd.labelTargets)
- {
- Search(target, inFirst);
- }
- }
- Debug.Assert(cmdStack.Count >= pathSizeAtEntry);
- while (cmdStack.Count > pathSizeAtEntry)
- {
- cmdStack.Pop();
- }
- }
- }
-
- private static List<Block> CloneBlocks(List<Block> blocks)
- {
- Dictionary<Block, Block> blockMap = new Dictionary<Block, Block>();
- List<Block> otherBlocks = new List<Block>();
- foreach (Block block in blocks)
- {
- List<Cmd> otherCmds = new List<Cmd>();
- foreach (Cmd cmd in block.Cmds)
- {
- otherCmds.Add(cmd);
- }
- Block otherBlock = new Block();
- otherBlock.Cmds = otherCmds;
- otherBlock.Label = block.Label;
- otherBlocks.Add(otherBlock);
- blockMap[block] = otherBlock;
- }
- foreach (Block block in blocks)
- {
- if (block.TransferCmd is ReturnCmd) continue;
- List<Block> otherGotoCmdLabelTargets = new List<Block>();
- List<string> otherGotoCmdLabelNames = new List<string>();
- GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
- foreach (Block target in gotoCmd.labelTargets)
- {
- otherGotoCmdLabelTargets.Add(blockMap[target]);
- otherGotoCmdLabelNames.Add(blockMap[target].Label);
- }
- blockMap[block].TransferCmd = new GotoCmd(block.TransferCmd.tok, otherGotoCmdLabelNames, otherGotoCmdLabelTargets);
- }
- return otherBlocks;
- }
-
- private List<Requires> DisjointnessRequires(Program program, AtomicActionInfo first, AtomicActionInfo second, HashSet<Variable> frame)
- {
- List<Requires> requires = new List<Requires>();
- Dictionary<string, HashSet<Variable>> domainNameToScope = new Dictionary<string, HashSet<Variable>>();
- foreach (var domainName in linearTypeChecker.linearDomains.Keys)
- {
- domainNameToScope[domainName] = new HashSet<Variable>();
- }
- foreach (Variable v in frame)
- {
- var domainName = linearTypeChecker.FindDomainName(v);
- if (domainName == null) continue;
- if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
- domainNameToScope[domainName].Add(v);
- }
- if (first != null)
- {
- foreach (Variable v in first.thatInParams)
- {
- var domainName = linearTypeChecker.FindDomainName(v);
- if (domainName == null) continue;
- if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
- domainNameToScope[domainName].Add(v);
- }
- }
- foreach (Variable v in second.thisInParams)
- {
- var domainName = linearTypeChecker.FindDomainName(v);
- if (domainName == null) continue;
- if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
- domainNameToScope[domainName].Add(v);
- }
- foreach (string domainName in domainNameToScope.Keys)
- {
- requires.Add(new Requires(false, linearTypeChecker.DisjointnessExpr(domainName, domainNameToScope[domainName])));
- }
- return requires;
- }
-
- private void CreateCommutativityChecker(Program program, AtomicActionInfo first, AtomicActionInfo second)
- {
- if (first == second && first.thatInParams.Count == 0 && first.thatOutParams.Count == 0)
- return;
- if (first.CommutesWith(second))
- return;
- Tuple<AtomicActionInfo, AtomicActionInfo> actionPair = new Tuple<AtomicActionInfo, AtomicActionInfo>(first, second);
- if (commutativityCheckerCache.Contains(actionPair))
- return;
- commutativityCheckerCache.Add(actionPair);
-
- List<Variable> inputs = new List<Variable>();
- inputs.AddRange(first.thatInParams);
- inputs.AddRange(second.thisInParams);
- List<Variable> outputs = new List<Variable>();
- outputs.AddRange(first.thatOutParams);
- outputs.AddRange(second.thisOutParams);
- List<Variable> locals = new List<Variable>();
- locals.AddRange(first.thatAction.LocVars);
- locals.AddRange(second.thisAction.LocVars);
- List<Block> firstBlocks = CloneBlocks(first.thatAction.Blocks);
- List<Block> secondBlocks = CloneBlocks(second.thisAction.Blocks);
- foreach (Block b in firstBlocks)
- {
- if (b.TransferCmd is ReturnCmd)
- {
- List<Block> bs = new List<Block>();
- bs.Add(secondBlocks[0]);
- List<string> ls = new List<string>();
- ls.Add(secondBlocks[0].Label);
- b.TransferCmd = new GotoCmd(Token.NoToken, ls, bs);
- }
- }
- List<Block> blocks = new List<Block>();
- blocks.AddRange(firstBlocks);
- blocks.AddRange(secondBlocks);
- HashSet<Variable> frame = new HashSet<Variable>();
- frame.UnionWith(first.gateUsedGlobalVars);
- frame.UnionWith(first.actionUsedGlobalVars);
- frame.UnionWith(second.gateUsedGlobalVars);
- frame.UnionWith(second.actionUsedGlobalVars);
- List<Requires> requires = DisjointnessRequires(program, first, second, frame);
- foreach (AssertCmd assertCmd in first.thatGate)
- requires.Add(new Requires(false, assertCmd.Expr));
- foreach (AssertCmd assertCmd in second.thisGate)
- requires.Add(new Requires(false, assertCmd.Expr));
- List<Ensures> ensures = new List<Ensures>();
- Expr transitionRelation = (new TransitionRelationComputation(program, first, second, frame, new HashSet<Variable>())).TransitionRelationCompute();
- Ensures ensureCheck = new Ensures(false, transitionRelation);
- ensureCheck.ErrorData = string.Format("Commutativity check between {0} and {1} failed", first.proc.Name, second.proc.Name);
- ensures.Add(ensureCheck);
- string checkerName = string.Format("CommutativityChecker_{0}_{1}", first.proc.Name, second.proc.Name);
- List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
- moverTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
- Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, requires, globalVars, ensures);
- Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, locals, blocks);
- impl.Proc = proc;
- this.decls.Add(impl);
- this.decls.Add(proc);
- }
-
- private void CreateGatePreservationChecker(Program program, AtomicActionInfo first, AtomicActionInfo second)
- {
- if (first.gateUsedGlobalVars.Intersect(second.modifiedGlobalVars).Count() == 0)
- return;
- Tuple<AtomicActionInfo, AtomicActionInfo> actionPair = new Tuple<AtomicActionInfo, AtomicActionInfo>(first, second);
- if (gatePreservationCheckerCache.Contains(actionPair))
- return;
- gatePreservationCheckerCache.Add(actionPair);
-
- List<Variable> inputs = new List<Variable>();
- inputs.AddRange(first.thatInParams);
- inputs.AddRange(second.thisInParams);
- List<Variable> outputs = new List<Variable>();
- outputs.AddRange(first.thatOutParams);
- outputs.AddRange(second.thisOutParams);
- List<Variable> locals = new List<Variable>();
- locals.AddRange(second.thisAction.LocVars);
- List<Block> secondBlocks = CloneBlocks(second.thisAction.Blocks);
- HashSet<Variable> frame = new HashSet<Variable>();
- frame.UnionWith(first.gateUsedGlobalVars);
- frame.UnionWith(second.gateUsedGlobalVars);
- frame.UnionWith(second.actionUsedGlobalVars);
- List<Requires> requires = DisjointnessRequires(program, first, second, frame);
- List<Ensures> ensures = new List<Ensures>();
- foreach (AssertCmd assertCmd in first.thatGate)
- {
- requires.Add(new Requires(false, assertCmd.Expr));
- Ensures ensureCheck = new Ensures(assertCmd.tok, false, assertCmd.Expr, null);
- ensureCheck.ErrorData = string.Format("Gate not preserved by {0}", second.proc.Name);
- ensures.Add(ensureCheck);
- }
- foreach (AssertCmd assertCmd in second.thisGate)
- requires.Add(new Requires(false, assertCmd.Expr));
- string checkerName = string.Format("GatePreservationChecker_{0}_{1}", first.proc.Name, second.proc.Name);
- List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
- moverTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
- Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, requires, globalVars, ensures);
- Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, locals, secondBlocks);
- impl.Proc = proc;
- this.decls.Add(impl);
- this.decls.Add(proc);
- }
-
- private void CreateFailurePreservationChecker(Program program, AtomicActionInfo first, AtomicActionInfo second)
- {
- if (first.gateUsedGlobalVars.Intersect(second.modifiedGlobalVars).Count() == 0)
- return;
- Tuple<AtomicActionInfo, AtomicActionInfo> actionPair = new Tuple<AtomicActionInfo, AtomicActionInfo>(first, second);
- if (failurePreservationCheckerCache.Contains(actionPair))
- return;
- failurePreservationCheckerCache.Add(actionPair);
-
- List<Variable> inputs = new List<Variable>();
- inputs.AddRange(first.thatInParams);
- inputs.AddRange(second.thisInParams);
- List<Variable> outputs = new List<Variable>();
- outputs.AddRange(first.thatOutParams);
- outputs.AddRange(second.thisOutParams);
- List<Variable> locals = new List<Variable>();
- locals.AddRange(second.thisAction.LocVars);
- List<Block> secondBlocks = CloneBlocks(second.thisAction.Blocks);
- HashSet<Variable> frame = new HashSet<Variable>();
- frame.UnionWith(first.gateUsedGlobalVars);
- frame.UnionWith(second.gateUsedGlobalVars);
- frame.UnionWith(second.actionUsedGlobalVars);
- List<Requires> requires = DisjointnessRequires(program, first, second, frame);
- Expr gateExpr = Expr.True;
- foreach (AssertCmd assertCmd in first.thatGate)
- {
- gateExpr = Expr.And(gateExpr, assertCmd.Expr);
- gateExpr.Type = Type.Bool;
- }
- gateExpr = Expr.Not(gateExpr);
- gateExpr.Type = Type.Bool;
- requires.Add(new Requires(false, gateExpr));
- List<Ensures> ensures = new List<Ensures>();
- Ensures ensureCheck = new Ensures(false, gateExpr);
- ensureCheck.ErrorData = string.Format("Gate failure of {0} not preserved by {1}", first.proc.Name, second.proc.Name);
- ensures.Add(ensureCheck);
- foreach (AssertCmd assertCmd in second.thisGate)
- requires.Add(new Requires(false, assertCmd.Expr));
- string checkerName = string.Format("FailurePreservationChecker_{0}_{1}", first.proc.Name, second.proc.Name);
- List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
- moverTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
- Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, requires, globalVars, ensures);
- Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, locals, secondBlocks);
- impl.Proc = proc;
- this.decls.Add(impl);
- this.decls.Add(proc);
- }
-
- private void CreateNonBlockingChecker(Program program, AtomicActionInfo second)
- {
- List<Variable> inputs = new List<Variable>();
- inputs.AddRange(second.thisInParams);
-
- HashSet<Variable> frame = new HashSet<Variable>();
- frame.UnionWith(second.gateUsedGlobalVars);
- frame.UnionWith(second.actionUsedGlobalVars);
- List<Requires> requires = DisjointnessRequires(program, null, second, frame);
- foreach (AssertCmd assertCmd in second.thisGate)
- {
- requires.Add(new Requires(false, assertCmd.Expr));
- }
- HashSet<Variable> postExistVars = new HashSet<Variable>();
- postExistVars.UnionWith(frame);
- postExistVars.UnionWith(second.thisOutParams);
- Expr ensuresExpr = (new TransitionRelationComputation(program, second, frame, postExistVars)).TransitionRelationCompute();
- List<Ensures> ensures = new List<Ensures>();
- Ensures ensureCheck = new Ensures(false, ensuresExpr);
- ensureCheck.ErrorData = string.Format("{0} is blocking", second.proc.Name);
- ensures.Add(ensureCheck);
-
- List<Block> blocks = new List<Block>();
- blocks.Add(new Block(Token.NoToken, "L", new List<Cmd>(), new ReturnCmd(Token.NoToken)));
- string checkerName = string.Format("NonBlockingChecker_{0}", second.proc.Name);
- List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
- moverTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
- Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, new List<Variable>(), requires, globalVars, ensures);
- Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, new List<Variable>(), new List<Variable>(), blocks);
- impl.Proc = proc;
- this.decls.Add(impl);
- this.decls.Add(proc);
- }
- }
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics.Contracts;
+using System.Diagnostics;
+
+namespace Microsoft.Boogie
+{
+ public class MoverCheck
+ {
+ LinearTypeChecker linearTypeChecker;
+ CivlTypeChecker civlTypeChecker;
+ List<Declaration> decls;
+ HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>> commutativityCheckerCache;
+ HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>> gatePreservationCheckerCache;
+ HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>> failurePreservationCheckerCache;
+ private MoverCheck(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker, List<Declaration> decls)
+ {
+ this.linearTypeChecker = linearTypeChecker;
+ this.civlTypeChecker = civlTypeChecker;
+ this.decls = decls;
+ this.commutativityCheckerCache = new HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>>();
+ this.gatePreservationCheckerCache = new HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>>();
+ this.failurePreservationCheckerCache = new HashSet<Tuple<AtomicActionInfo, AtomicActionInfo>>();
+ }
+
+ public static void AddCheckers(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker, List<Declaration> decls)
+ {
+ if (civlTypeChecker.procToActionInfo.Count == 0)
+ return;
+
+ List<ActionInfo> sortedByCreatedLayerNum = new List<ActionInfo>(civlTypeChecker.procToActionInfo.Values.Where(x => x is AtomicActionInfo && !x.isExtern));
+ sortedByCreatedLayerNum.Sort((x, y) => { return (x.createdAtLayerNum == y.createdAtLayerNum) ? 0 : (x.createdAtLayerNum < y.createdAtLayerNum) ? -1 : 1; });
+ List<ActionInfo> sortedByAvailableUptoLayerNum = new List<ActionInfo>(civlTypeChecker.procToActionInfo.Values.Where(x => x is AtomicActionInfo && !x.isExtern));
+ sortedByAvailableUptoLayerNum.Sort((x, y) => { return (x.availableUptoLayerNum == y.availableUptoLayerNum) ? 0 : (x.availableUptoLayerNum < y.availableUptoLayerNum) ? -1 : 1; });
+
+ Dictionary<int, HashSet<AtomicActionInfo>> pools = new Dictionary<int, HashSet<AtomicActionInfo>>();
+ int indexIntoSortedByCreatedLayerNum = 0;
+ int indexIntoSortedByAvailableUptoLayerNum = 0;
+ HashSet<AtomicActionInfo> currPool = new HashSet<AtomicActionInfo>();
+ while (indexIntoSortedByCreatedLayerNum < sortedByCreatedLayerNum.Count)
+ {
+ var currLayerNum = sortedByCreatedLayerNum[indexIntoSortedByCreatedLayerNum].createdAtLayerNum;
+ pools[currLayerNum] = new HashSet<AtomicActionInfo>(currPool);
+ while (indexIntoSortedByCreatedLayerNum < sortedByCreatedLayerNum.Count)
+ {
+ var actionInfo = sortedByCreatedLayerNum[indexIntoSortedByCreatedLayerNum] as AtomicActionInfo;
+ if (actionInfo.createdAtLayerNum > currLayerNum) break;
+ pools[currLayerNum].Add(actionInfo);
+ indexIntoSortedByCreatedLayerNum++;
+ }
+ while (indexIntoSortedByAvailableUptoLayerNum < sortedByAvailableUptoLayerNum.Count)
+ {
+ var actionInfo = sortedByAvailableUptoLayerNum[indexIntoSortedByAvailableUptoLayerNum] as AtomicActionInfo;
+ if (actionInfo.availableUptoLayerNum > currLayerNum) break;
+ pools[currLayerNum].Remove(actionInfo);
+ indexIntoSortedByAvailableUptoLayerNum++;
+ }
+ currPool = pools[currLayerNum];
+ }
+
+ Program program = civlTypeChecker.program;
+ MoverCheck moverChecking = new MoverCheck(linearTypeChecker, civlTypeChecker, decls);
+ foreach (int layerNum in pools.Keys)
+ {
+ foreach (AtomicActionInfo first in pools[layerNum])
+ {
+ Debug.Assert(first.moverType != MoverType.Top);
+ if (first.moverType == MoverType.Atomic)
+ continue;
+ foreach (AtomicActionInfo second in pools[layerNum])
+ {
+ if (first.IsRightMover)
+ {
+ moverChecking.CreateCommutativityChecker(program, first, second);
+ moverChecking.CreateGatePreservationChecker(program, second, first);
+ }
+ if (first.IsLeftMover)
+ {
+ moverChecking.CreateCommutativityChecker(program, second, first);
+ moverChecking.CreateGatePreservationChecker(program, first, second);
+ moverChecking.CreateFailurePreservationChecker(program, second, first);
+ }
+ }
+ }
+ }
+ foreach (AtomicActionInfo atomicActionInfo in sortedByCreatedLayerNum)
+ {
+ if (atomicActionInfo.IsLeftMover && atomicActionInfo.hasAssumeCmd)
+ {
+ moverChecking.CreateNonBlockingChecker(program, atomicActionInfo);
+ }
+ }
+ }
+
+ public sealed class MyDuplicator : Duplicator
+ {
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ IdentifierExpr ret = (IdentifierExpr) base.VisitIdentifierExpr(node);
+ if (ret.Decl is GlobalVariable)
+ {
+ return new OldExpr(Token.NoToken, ret);
+ }
+ else
+ {
+ return ret;
+ }
+ }
+ }
+
+ public class TransitionRelationComputation
+ {
+ private Program program;
+ private AtomicActionInfo first; // corresponds to that*
+ private AtomicActionInfo second; // corresponds to this*
+ private Stack<Cmd> cmdStack;
+ private List<PathInfo> paths;
+ private HashSet<Variable> frame;
+ private HashSet<Variable> postExistVars;
+
+ public TransitionRelationComputation(Program program, AtomicActionInfo second, HashSet<Variable> frame, HashSet<Variable> postExistVars)
+ {
+ this.postExistVars = postExistVars;
+ this.frame = frame;
+ TransitionRelationComputationHelper(program, null, second);
+ }
+
+ public TransitionRelationComputation(Program program, AtomicActionInfo first, AtomicActionInfo second, HashSet<Variable> frame, HashSet<Variable> postExistVars)
+ {
+ this.postExistVars = postExistVars;
+ this.frame = frame;
+ TransitionRelationComputationHelper(program, first, second);
+ }
+
+ private void TransitionRelationComputationHelper(Program program, AtomicActionInfo first, AtomicActionInfo second)
+ {
+ this.program = program;
+ this.first = first;
+ this.second = second;
+ this.cmdStack = new Stack<Cmd>();
+ this.paths = new List<PathInfo>();
+ List<IdentifierExpr> havocVars = new List<IdentifierExpr>();
+ this.second.thisOutParams.ForEach(v => havocVars.Add(Expr.Ident(v)));
+ this.second.thisAction.LocVars.ForEach(v => havocVars.Add(Expr.Ident(v)));
+ if (havocVars.Count > 0)
+ {
+ HavocCmd havocCmd = new HavocCmd(Token.NoToken, havocVars);
+ cmdStack.Push(havocCmd);
+ }
+ Search(this.second.thisAction.Blocks[0], false);
+ }
+
+ private void Substitute(Dictionary<Variable, Expr> map, ref List<Expr> pathExprs, ref Dictionary<Variable, Expr> varToExpr)
+ {
+ Substitution subst = Substituter.SubstitutionFromHashtable(map);
+ List<Expr> oldPathExprs = pathExprs;
+ pathExprs = new List<Expr>();
+ foreach (Expr pathExpr in oldPathExprs)
+ {
+ pathExprs.Add(Substituter.Apply(subst, pathExpr));
+ }
+ Dictionary<Variable, Expr> oldVarToExpr = varToExpr;
+ varToExpr = new Dictionary<Variable, Expr>();
+ foreach (Variable v in oldVarToExpr.Keys)
+ {
+ varToExpr[v] = Substituter.Apply(subst, oldVarToExpr[v]);
+ }
+ }
+
+ struct PathInfo
+ {
+ public HashSet<Variable> existsVars;
+ public Dictionary<Variable, Expr> varToExpr;
+ public List<Expr> pathExprs;
+
+ public PathInfo(HashSet<Variable> existsVars, Dictionary<Variable, Expr> varToExpr, List<Expr> pathExprs)
+ {
+ this.existsVars = existsVars;
+ this.varToExpr = varToExpr;
+ this.pathExprs = pathExprs;
+ }
+ }
+
+ private void FlattenAnd(Expr x, List<Expr> xs)
+ {
+ NAryExpr naryExpr = x as NAryExpr;
+ if (naryExpr != null && naryExpr.Fun.FunctionName == "&&")
+ {
+ FlattenAnd(naryExpr.Args[0], xs);
+ FlattenAnd(naryExpr.Args[1], xs);
+ }
+ else
+ {
+ xs.Add(x);
+ }
+ }
+
+ private void AddPath()
+ {
+ HashSet<Variable> existsVars = new HashSet<Variable>();
+ Dictionary<Variable, Expr> varToExpr = new Dictionary<Variable, Expr>();
+ foreach (Variable v in frame)
+ {
+ varToExpr[v] = Expr.Ident(v);
+ }
+ if (first != null)
+ {
+ foreach (Variable v in first.thatOutParams)
+ {
+ varToExpr[v] = Expr.Ident(v);
+ }
+ }
+ foreach (Variable v in second.thisOutParams)
+ {
+ varToExpr[v] = Expr.Ident(v);
+ }
+ List<Expr> pathExprs = new List<Expr>();
+ int boundVariableCount = 0;
+ foreach (Cmd cmd in cmdStack)
+ {
+ if (cmd is AssumeCmd)
+ {
+ AssumeCmd assumeCmd = cmd as AssumeCmd;
+ FlattenAnd(assumeCmd.Expr, pathExprs);
+ }
+ else if (cmd is AssignCmd)
+ {
+ AssignCmd assignCmd = (cmd as AssignCmd).AsSimpleAssignCmd;
+ Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
+ for (int k = 0; k < assignCmd.Lhss.Count; k++)
+ {
+ map[assignCmd.Lhss[k].DeepAssignedVariable] = assignCmd.Rhss[k];
+ }
+ Substitute(map, ref pathExprs, ref varToExpr);
+ }
+ else if (cmd is HavocCmd)
+ {
+ HavocCmd havocCmd = cmd as HavocCmd;
+ Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
+ foreach (IdentifierExpr ie in havocCmd.Vars)
+ {
+ BoundVariable bv = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, "#tmp_" + boundVariableCount++, ie.Decl.TypedIdent.Type));
+ map[ie.Decl] = Expr.Ident(bv);
+ existsVars.Add(bv);
+ }
+ Substitute(map, ref pathExprs, ref varToExpr);
+ }
+ else
+ {
+ Debug.Assert(false);
+ }
+ }
+ paths.Add(new PathInfo(existsVars, varToExpr, pathExprs));
+ }
+
+ private Expr CalculatePathCondition(PathInfo path)
+ {
+ Expr returnExpr = Expr.True;
+
+ HashSet<Variable> existsVars = path.existsVars;
+ Dictionary<Variable, Expr> existsMap = new Dictionary<Variable, Expr>();
+
+ Dictionary<Variable, Expr> varToExpr = path.varToExpr;
+ foreach (Variable v in varToExpr.Keys)
+ {
+ if (postExistVars.Contains(v)) continue;
+ IdentifierExpr ie = varToExpr[v] as IdentifierExpr;
+ if (ie != null && !existsMap.ContainsKey(ie.Decl) && existsVars.Contains(ie.Decl))
+ {
+ existsMap[ie.Decl] = Expr.Ident(v);
+ existsVars.Remove(ie.Decl);
+ }
+ else
+ {
+ returnExpr = Expr.And(returnExpr, Expr.Eq(Expr.Ident(v), (new MyDuplicator()).VisitExpr(varToExpr[v])));
+ returnExpr.Type = Type.Bool;
+ }
+ }
+
+ List<Expr> pathExprs = new List<Expr>();
+ path.pathExprs.ForEach(x => pathExprs.Add((new MyDuplicator()).VisitExpr(x)));
+ foreach (Expr x in pathExprs)
+ {
+ Variable boundVar;
+ Expr boundVarExpr;
+ if (InferSubstitution(x, out boundVar, out boundVarExpr) && existsVars.Contains(boundVar))
+ {
+ existsMap[boundVar] = boundVarExpr;
+ existsVars.Remove(boundVar);
+ }
+ else
+ {
+ returnExpr = Expr.And(returnExpr, x);
+ returnExpr.Type = Type.Bool;
+ }
+ }
+
+ returnExpr = Substituter.Apply(Substituter.SubstitutionFromHashtable(existsMap), returnExpr);
+ if (existsVars.Count > 0)
+ {
+ returnExpr = new ExistsExpr(Token.NoToken, new List<Variable>(existsVars), returnExpr);
+ }
+ return returnExpr;
+ }
+
+ bool InferSubstitution(Expr x, out Variable var, out Expr expr)
+ {
+ var = null;
+ expr = null;
+ NAryExpr naryExpr = x as NAryExpr;
+ if (naryExpr == null || naryExpr.Fun.FunctionName != "==")
+ {
+ return false;
+ }
+ IdentifierExpr arg0 = naryExpr.Args[0] as IdentifierExpr;
+ if (arg0 != null && arg0.Decl is BoundVariable)
+ {
+ var = arg0.Decl;
+ expr = naryExpr.Args[1];
+ return true;
+ }
+ IdentifierExpr arg1 = naryExpr.Args[1] as IdentifierExpr;
+ if (arg1 != null && arg1.Decl is BoundVariable)
+ {
+ var = arg1.Decl;
+ expr = naryExpr.Args[0];
+ return true;
+ }
+ return false;
+ }
+
+ public Expr TransitionRelationCompute(bool withOriginalInOutVariables = false)
+ {
+ Expr transitionRelation = Expr.False;
+ foreach (PathInfo path in paths)
+ {
+ transitionRelation = Expr.Or(transitionRelation, CalculatePathCondition(path));
+ }
+ ResolutionContext rc = new ResolutionContext(null);
+ rc.StateMode = ResolutionContext.State.Two;
+ transitionRelation.Resolve(rc);
+ transitionRelation.Typecheck(new TypecheckingContext(null));
+
+ if (withOriginalInOutVariables)
+ {
+ Dictionary<Variable, Expr> invertedMap = new Dictionary<Variable, Expr>();
+ if (first != null)
+ {
+ foreach (var x in first.thatMap)
+ {
+ invertedMap[((IdentifierExpr)x.Value).Decl] = Expr.Ident(x.Key);
+ }
+ }
+ if (second != null)
+ {
+ foreach (var x in second.thisMap)
+ {
+ invertedMap[((IdentifierExpr)x.Value).Decl] = Expr.Ident(x.Key);
+ }
+ }
+ Substitution subst = Substituter.SubstitutionFromHashtable(invertedMap);
+ return Substituter.Apply(subst, transitionRelation);
+ }
+ else
+ {
+ return transitionRelation;
+ }
+
+ }
+
+ private void Search(Block b, bool inFirst)
+ {
+ int pathSizeAtEntry = cmdStack.Count;
+ foreach (Cmd cmd in b.Cmds)
+ {
+ cmdStack.Push(cmd);
+ }
+ if (b.TransferCmd is ReturnCmd)
+ {
+ if (first == null || inFirst)
+ {
+ AddPath();
+ }
+ else
+ {
+ List<IdentifierExpr> havocVars = new List<IdentifierExpr>();
+ first.thatOutParams.ForEach(v => havocVars.Add(Expr.Ident(v)));
+ first.thatAction.LocVars.ForEach(v => havocVars.Add(Expr.Ident(v)));
+ if (havocVars.Count > 0)
+ {
+ HavocCmd havocCmd = new HavocCmd(Token.NoToken, havocVars);
+ cmdStack.Push(havocCmd);
+ }
+ Search(first.thatAction.Blocks[0], true);
+ }
+ }
+ else
+ {
+ GotoCmd gotoCmd = b.TransferCmd as GotoCmd;
+ foreach (Block target in gotoCmd.labelTargets)
+ {
+ Search(target, inFirst);
+ }
+ }
+ Debug.Assert(cmdStack.Count >= pathSizeAtEntry);
+ while (cmdStack.Count > pathSizeAtEntry)
+ {
+ cmdStack.Pop();
+ }
+ }
+ }
+
+ private static List<Block> CloneBlocks(List<Block> blocks)
+ {
+ Dictionary<Block, Block> blockMap = new Dictionary<Block, Block>();
+ List<Block> otherBlocks = new List<Block>();
+ foreach (Block block in blocks)
+ {
+ List<Cmd> otherCmds = new List<Cmd>();
+ foreach (Cmd cmd in block.Cmds)
+ {
+ otherCmds.Add(cmd);
+ }
+ Block otherBlock = new Block();
+ otherBlock.Cmds = otherCmds;
+ otherBlock.Label = block.Label;
+ otherBlocks.Add(otherBlock);
+ blockMap[block] = otherBlock;
+ }
+ foreach (Block block in blocks)
+ {
+ if (block.TransferCmd is ReturnCmd) continue;
+ List<Block> otherGotoCmdLabelTargets = new List<Block>();
+ List<string> otherGotoCmdLabelNames = new List<string>();
+ GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
+ foreach (Block target in gotoCmd.labelTargets)
+ {
+ otherGotoCmdLabelTargets.Add(blockMap[target]);
+ otherGotoCmdLabelNames.Add(blockMap[target].Label);
+ }
+ blockMap[block].TransferCmd = new GotoCmd(block.TransferCmd.tok, otherGotoCmdLabelNames, otherGotoCmdLabelTargets);
+ }
+ return otherBlocks;
+ }
+
+ private List<Requires> DisjointnessRequires(Program program, AtomicActionInfo first, AtomicActionInfo second, HashSet<Variable> frame)
+ {
+ List<Requires> requires = new List<Requires>();
+ Dictionary<string, HashSet<Variable>> domainNameToScope = new Dictionary<string, HashSet<Variable>>();
+ foreach (var domainName in linearTypeChecker.linearDomains.Keys)
+ {
+ domainNameToScope[domainName] = new HashSet<Variable>();
+ }
+ foreach (Variable v in frame)
+ {
+ var domainName = linearTypeChecker.FindDomainName(v);
+ if (domainName == null) continue;
+ if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
+ domainNameToScope[domainName].Add(v);
+ }
+ if (first != null)
+ {
+ foreach (Variable v in first.thatInParams)
+ {
+ var domainName = linearTypeChecker.FindDomainName(v);
+ if (domainName == null) continue;
+ if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
+ domainNameToScope[domainName].Add(v);
+ }
+ }
+ foreach (Variable v in second.thisInParams)
+ {
+ var domainName = linearTypeChecker.FindDomainName(v);
+ if (domainName == null) continue;
+ if (!linearTypeChecker.linearDomains.ContainsKey(domainName)) continue;
+ domainNameToScope[domainName].Add(v);
+ }
+ foreach (string domainName in domainNameToScope.Keys)
+ {
+ requires.Add(new Requires(false, linearTypeChecker.DisjointnessExpr(domainName, domainNameToScope[domainName])));
+ }
+ return requires;
+ }
+
+ private void CreateCommutativityChecker(Program program, AtomicActionInfo first, AtomicActionInfo second)
+ {
+ if (first == second && first.thatInParams.Count == 0 && first.thatOutParams.Count == 0)
+ return;
+ if (first.CommutesWith(second))
+ return;
+ Tuple<AtomicActionInfo, AtomicActionInfo> actionPair = new Tuple<AtomicActionInfo, AtomicActionInfo>(first, second);
+ if (commutativityCheckerCache.Contains(actionPair))
+ return;
+ commutativityCheckerCache.Add(actionPair);
+
+ List<Variable> inputs = new List<Variable>();
+ inputs.AddRange(first.thatInParams);
+ inputs.AddRange(second.thisInParams);
+ List<Variable> outputs = new List<Variable>();
+ outputs.AddRange(first.thatOutParams);
+ outputs.AddRange(second.thisOutParams);
+ List<Variable> locals = new List<Variable>();
+ locals.AddRange(first.thatAction.LocVars);
+ locals.AddRange(second.thisAction.LocVars);
+ List<Block> firstBlocks = CloneBlocks(first.thatAction.Blocks);
+ List<Block> secondBlocks = CloneBlocks(second.thisAction.Blocks);
+ foreach (Block b in firstBlocks)
+ {
+ if (b.TransferCmd is ReturnCmd)
+ {
+ List<Block> bs = new List<Block>();
+ bs.Add(secondBlocks[0]);
+ List<string> ls = new List<string>();
+ ls.Add(secondBlocks[0].Label);
+ b.TransferCmd = new GotoCmd(Token.NoToken, ls, bs);
+ }
+ }
+ List<Block> blocks = new List<Block>();
+ blocks.AddRange(firstBlocks);
+ blocks.AddRange(secondBlocks);
+ HashSet<Variable> frame = new HashSet<Variable>();
+ frame.UnionWith(first.gateUsedGlobalVars);
+ frame.UnionWith(first.actionUsedGlobalVars);
+ frame.UnionWith(second.gateUsedGlobalVars);
+ frame.UnionWith(second.actionUsedGlobalVars);
+ List<Requires> requires = DisjointnessRequires(program, first, second, frame);
+ foreach (AssertCmd assertCmd in first.thatGate)
+ requires.Add(new Requires(false, assertCmd.Expr));
+ foreach (AssertCmd assertCmd in second.thisGate)
+ requires.Add(new Requires(false, assertCmd.Expr));
+ List<Ensures> ensures = new List<Ensures>();
+ Expr transitionRelation = (new TransitionRelationComputation(program, first, second, frame, new HashSet<Variable>())).TransitionRelationCompute();
+ Ensures ensureCheck = new Ensures(false, transitionRelation);
+ ensureCheck.ErrorData = string.Format("Commutativity check between {0} and {1} failed", first.proc.Name, second.proc.Name);
+ ensures.Add(ensureCheck);
+ string checkerName = string.Format("CommutativityChecker_{0}_{1}", first.proc.Name, second.proc.Name);
+ List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
+ civlTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
+ Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, requires, globalVars, ensures);
+ Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, locals, blocks);
+ impl.Proc = proc;
+ this.decls.Add(impl);
+ this.decls.Add(proc);
+ }
+
+ private void CreateGatePreservationChecker(Program program, AtomicActionInfo first, AtomicActionInfo second)
+ {
+ if (first.gateUsedGlobalVars.Intersect(second.modifiedGlobalVars).Count() == 0)
+ return;
+ Tuple<AtomicActionInfo, AtomicActionInfo> actionPair = new Tuple<AtomicActionInfo, AtomicActionInfo>(first, second);
+ if (gatePreservationCheckerCache.Contains(actionPair))
+ return;
+ gatePreservationCheckerCache.Add(actionPair);
+
+ List<Variable> inputs = new List<Variable>();
+ inputs.AddRange(first.thatInParams);
+ inputs.AddRange(second.thisInParams);
+ List<Variable> outputs = new List<Variable>();
+ outputs.AddRange(first.thatOutParams);
+ outputs.AddRange(second.thisOutParams);
+ List<Variable> locals = new List<Variable>();
+ locals.AddRange(second.thisAction.LocVars);
+ List<Block> secondBlocks = CloneBlocks(second.thisAction.Blocks);
+ HashSet<Variable> frame = new HashSet<Variable>();
+ frame.UnionWith(first.gateUsedGlobalVars);
+ frame.UnionWith(second.gateUsedGlobalVars);
+ frame.UnionWith(second.actionUsedGlobalVars);
+ List<Requires> requires = DisjointnessRequires(program, first, second, frame);
+ List<Ensures> ensures = new List<Ensures>();
+ foreach (AssertCmd assertCmd in first.thatGate)
+ {
+ requires.Add(new Requires(false, assertCmd.Expr));
+ Ensures ensureCheck = new Ensures(assertCmd.tok, false, assertCmd.Expr, null);
+ ensureCheck.ErrorData = string.Format("Gate not preserved by {0}", second.proc.Name);
+ ensures.Add(ensureCheck);
+ }
+ foreach (AssertCmd assertCmd in second.thisGate)
+ requires.Add(new Requires(false, assertCmd.Expr));
+ string checkerName = string.Format("GatePreservationChecker_{0}_{1}", first.proc.Name, second.proc.Name);
+ List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
+ civlTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
+ Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, requires, globalVars, ensures);
+ Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, locals, secondBlocks);
+ impl.Proc = proc;
+ this.decls.Add(impl);
+ this.decls.Add(proc);
+ }
+
+ private void CreateFailurePreservationChecker(Program program, AtomicActionInfo first, AtomicActionInfo second)
+ {
+ if (first.gateUsedGlobalVars.Intersect(second.modifiedGlobalVars).Count() == 0)
+ return;
+ Tuple<AtomicActionInfo, AtomicActionInfo> actionPair = new Tuple<AtomicActionInfo, AtomicActionInfo>(first, second);
+ if (failurePreservationCheckerCache.Contains(actionPair))
+ return;
+ failurePreservationCheckerCache.Add(actionPair);
+
+ List<Variable> inputs = new List<Variable>();
+ inputs.AddRange(first.thatInParams);
+ inputs.AddRange(second.thisInParams);
+ List<Variable> outputs = new List<Variable>();
+ outputs.AddRange(first.thatOutParams);
+ outputs.AddRange(second.thisOutParams);
+ List<Variable> locals = new List<Variable>();
+ locals.AddRange(second.thisAction.LocVars);
+ List<Block> secondBlocks = CloneBlocks(second.thisAction.Blocks);
+ HashSet<Variable> frame = new HashSet<Variable>();
+ frame.UnionWith(first.gateUsedGlobalVars);
+ frame.UnionWith(second.gateUsedGlobalVars);
+ frame.UnionWith(second.actionUsedGlobalVars);
+ List<Requires> requires = DisjointnessRequires(program, first, second, frame);
+ Expr gateExpr = Expr.True;
+ foreach (AssertCmd assertCmd in first.thatGate)
+ {
+ gateExpr = Expr.And(gateExpr, assertCmd.Expr);
+ gateExpr.Type = Type.Bool;
+ }
+ gateExpr = Expr.Not(gateExpr);
+ gateExpr.Type = Type.Bool;
+ requires.Add(new Requires(false, gateExpr));
+ List<Ensures> ensures = new List<Ensures>();
+ Ensures ensureCheck = new Ensures(false, gateExpr);
+ ensureCheck.ErrorData = string.Format("Gate failure of {0} not preserved by {1}", first.proc.Name, second.proc.Name);
+ ensures.Add(ensureCheck);
+ foreach (AssertCmd assertCmd in second.thisGate)
+ requires.Add(new Requires(false, assertCmd.Expr));
+ string checkerName = string.Format("FailurePreservationChecker_{0}_{1}", first.proc.Name, second.proc.Name);
+ List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
+ civlTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
+ Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, requires, globalVars, ensures);
+ Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, outputs, locals, secondBlocks);
+ impl.Proc = proc;
+ this.decls.Add(impl);
+ this.decls.Add(proc);
+ }
+
+ private void CreateNonBlockingChecker(Program program, AtomicActionInfo second)
+ {
+ List<Variable> inputs = new List<Variable>();
+ inputs.AddRange(second.thisInParams);
+
+ HashSet<Variable> frame = new HashSet<Variable>();
+ frame.UnionWith(second.gateUsedGlobalVars);
+ frame.UnionWith(second.actionUsedGlobalVars);
+ List<Requires> requires = DisjointnessRequires(program, null, second, frame);
+ foreach (AssertCmd assertCmd in second.thisGate)
+ {
+ requires.Add(new Requires(false, assertCmd.Expr));
+ }
+ HashSet<Variable> postExistVars = new HashSet<Variable>();
+ postExistVars.UnionWith(frame);
+ postExistVars.UnionWith(second.thisOutParams);
+ Expr ensuresExpr = (new TransitionRelationComputation(program, second, frame, postExistVars)).TransitionRelationCompute();
+ List<Ensures> ensures = new List<Ensures>();
+ Ensures ensureCheck = new Ensures(false, ensuresExpr);
+ ensureCheck.ErrorData = string.Format("{0} is blocking", second.proc.Name);
+ ensures.Add(ensureCheck);
+
+ List<Block> blocks = new List<Block>();
+ blocks.Add(new Block(Token.NoToken, "L", new List<Cmd>(), new ReturnCmd(Token.NoToken)));
+ string checkerName = string.Format("NonBlockingChecker_{0}", second.proc.Name);
+ List<IdentifierExpr> globalVars = new List<IdentifierExpr>();
+ civlTypeChecker.SharedVariables.Iter(x => globalVars.Add(Expr.Ident(x)));
+ Procedure proc = new Procedure(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, new List<Variable>(), requires, globalVars, ensures);
+ Implementation impl = new Implementation(Token.NoToken, checkerName, new List<TypeVariable>(), inputs, new List<Variable>(), new List<Variable>(), blocks);
+ impl.Proc = proc;
+ this.decls.Add(impl);
+ this.decls.Add(proc);
+ }
+ }
} \ No newline at end of file
diff --git a/Source/Concurrency/Program.cs b/Source/Concurrency/Program.cs
index 8042476e..1be7cc07 100644
--- a/Source/Concurrency/Program.cs
+++ b/Source/Concurrency/Program.cs
@@ -1,44 +1,44 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie
-{
- public class Concurrency
- {
- public static void Transform(LinearTypeChecker linearTypeChecker, MoverTypeChecker moverTypeChecker)
- {
- List<Declaration> originalDecls = new List<Declaration>();
- Program program = linearTypeChecker.program;
- foreach (var decl in program.TopLevelDeclarations)
- {
- Procedure proc = decl as Procedure;
- if (proc != null && moverTypeChecker.procToActionInfo.ContainsKey(proc))
- {
- originalDecls.Add(proc);
- continue;
- }
- Implementation impl = decl as Implementation;
- if (impl != null && moverTypeChecker.procToActionInfo.ContainsKey(impl.Proc))
- {
- originalDecls.Add(impl);
- }
- }
-
- List<Declaration> decls = new List<Declaration>();
- if (!CommandLineOptions.Clo.TrustAtomicityTypes)
- {
- MoverCheck.AddCheckers(linearTypeChecker, moverTypeChecker, decls);
- }
- OwickiGries.AddCheckers(linearTypeChecker, moverTypeChecker, decls);
- foreach (Declaration decl in decls)
- {
- decl.Attributes = OwickiGries.RemoveYieldsAttribute(decl.Attributes);
- }
- program.RemoveTopLevelDeclarations(x => originalDecls.Contains(x));
- program.AddTopLevelDeclarations(decls);
- }
-
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Microsoft.Boogie
+{
+ public class Concurrency
+ {
+ public static void Transform(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker)
+ {
+ List<Declaration> originalDecls = new List<Declaration>();
+ Program program = linearTypeChecker.program;
+ foreach (var decl in program.TopLevelDeclarations)
+ {
+ Procedure proc = decl as Procedure;
+ if (proc != null && civlTypeChecker.procToActionInfo.ContainsKey(proc))
+ {
+ originalDecls.Add(proc);
+ continue;
+ }
+ Implementation impl = decl as Implementation;
+ if (impl != null && civlTypeChecker.procToActionInfo.ContainsKey(impl.Proc))
+ {
+ originalDecls.Add(impl);
+ }
+ }
+
+ List<Declaration> decls = new List<Declaration>();
+ if (!CommandLineOptions.Clo.TrustAtomicityTypes)
+ {
+ MoverCheck.AddCheckers(linearTypeChecker, civlTypeChecker, decls);
+ }
+ CivlRefinement.AddCheckers(linearTypeChecker, civlTypeChecker, decls);
+ foreach (Declaration decl in decls)
+ {
+ decl.Attributes = CivlRefinement.RemoveYieldsAttribute(decl.Attributes);
+ }
+ program.RemoveTopLevelDeclarations(x => originalDecls.Contains(x));
+ program.AddTopLevelDeclarations(decls);
+ }
+
+ }
+}
diff --git a/Source/Concurrency/Properties/AssemblyInfo.cs b/Source/Concurrency/Properties/AssemblyInfo.cs
index 48430488..7e90c12f 100644
--- a/Source/Concurrency/Properties/AssemblyInfo.cs
+++ b/Source/Concurrency/Properties/AssemblyInfo.cs
@@ -1,36 +1,36 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Concurrency")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Concurrency")]
-[assembly: AssemblyCopyright("Copyright © 2013")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("867039c5-87dc-4f76-9f90-4f52afc90116")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Concurrency")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Concurrency")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("867039c5-87dc-4f76-9f90-4f52afc90116")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Source/Concurrency/SimulationRelation.cs b/Source/Concurrency/SimulationRelation.cs
index 7f130f76..c97ebfb7 100644
--- a/Source/Concurrency/SimulationRelation.cs
+++ b/Source/Concurrency/SimulationRelation.cs
@@ -1,197 +1,197 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Boogie.GraphUtil;
-
-namespace Microsoft.Boogie
-{
- public class SimulationRelation<A, B, L>
- {
- class Graph<T>
- {
- HashSet<T> nodes;
- Dictionary<T, Dictionary<L, List<T>>> successors;
- Dictionary<T, Dictionary<L, List<T>>> predecessors;
-
- public Graph(List<Tuple<T, L, T>> edges)
- {
- nodes = new HashSet<T>();
- successors = new Dictionary<T, Dictionary<L, List<T>>>();
- predecessors = new Dictionary<T, Dictionary<L, List<T>>>();
- foreach (Tuple<T, L, T> edge in edges)
- {
- T source = edge.Item1;
- L label = edge.Item2;
- T dest = edge.Item3;
- nodes.Add(source);
- nodes.Add(dest);
- if (!successors.ContainsKey(source))
- {
- successors[source] = new Dictionary<L, List<T>>();
- }
- if (!successors[source].ContainsKey(label))
- {
- successors[source][label] = new List<T>();
- }
- if (!predecessors.ContainsKey(dest))
- {
- predecessors[dest] = new Dictionary<L, List<T>>();
- }
- if (!predecessors[dest].ContainsKey(label))
- {
- predecessors[dest][label] = new List<T>();
- }
- successors[source][label].Add(dest);
- predecessors[dest][label].Add(source);
- }
- }
-
- public IEnumerable<T> Nodes { get { return nodes; } }
-
- public IEnumerable<T> Post(T t, L l)
- {
- if (successors.ContainsKey(t) && successors[t].ContainsKey(l))
- {
- return successors[t][l];
- }
- else
- {
- return Enumerable.Empty<T>();
- }
- }
-
- public IEnumerable<T> Post(IEnumerable<T> set, L l)
- {
- return set.Select(x => Post(x, l)).Aggregate(Enumerable.Empty<T>(), (p, q) => p.Concat(q));
- }
-
- public IEnumerable<T> Pre(T t, L l)
- {
- if (predecessors.ContainsKey(t) && predecessors[t].ContainsKey(l))
- {
- return predecessors[t][l];
- }
- else
- {
- return Enumerable.Empty<T>();
- }
- }
-
- public IEnumerable<T> Pre(IEnumerable<T> set, L l)
- {
- return set.Select(x => Pre(x, l)).Aggregate(Enumerable.Empty<T>(), (p, q) => p.Concat(q));
- }
-
- public IEnumerable<L> PostLabels(T t)
- {
- if (successors.ContainsKey(t))
- {
- return successors[t].Keys;
- }
- else
- {
- return Enumerable.Empty<L>();
- }
- }
-
- public IEnumerable<L> PreLabels(T t)
- {
- if (predecessors.ContainsKey(t))
- {
- return predecessors[t].Keys;
- }
- else
- {
- return Enumerable.Empty<L>();
- }
- }
- }
-
- Graph<A> aGraph;
- Graph<B> bGraph;
- Dictionary<A, HashSet<B>> initialConstraints;
-
- public SimulationRelation(List<Tuple<A, L, A>> aEdges, List<Tuple<B, L, B>> bEdges, Dictionary<A, HashSet<B>> initialConstraints)
- {
- this.aGraph = new Graph<A>(aEdges);
- this.bGraph = new Graph<B>(bEdges);
- this.initialConstraints = initialConstraints;
- }
-
- public Dictionary<A, HashSet<B>> ComputeSimulationRelation()
- {
- Dictionary<A, HashSet<B>> prevsim;
- Dictionary<A, HashSet<B>> sim;
- Dictionary<Tuple<A, L>, HashSet<B>> remove;
- Queue<Tuple<A,L>> workQueue;
-
- prevsim = new Dictionary<A, HashSet<B>>();
- sim = new Dictionary<A, HashSet<B>>();
- remove = new Dictionary<Tuple<A, L>, HashSet<B>>();
- workQueue = new Queue<Tuple<A,L>>();
- foreach (var a in aGraph.Nodes)
- {
- prevsim[a] = new HashSet<B>(bGraph.Nodes);
- sim[a] = new HashSet<B>();
- HashSet<L> aOutgoingLabels = new HashSet<L>(aGraph.PostLabels(a));
- foreach (var b in bGraph.Nodes)
- {
- IEnumerable<L> bOutgoingLabels = bGraph.PostLabels(b);
- if (aOutgoingLabels.IsSubsetOf(bOutgoingLabels))
- {
- sim[a].Add(b);
- }
- }
- if (initialConstraints.ContainsKey(a))
- {
- sim[a].IntersectWith(initialConstraints[a]);
- }
-
- foreach (var l in aGraph.PreLabels(a))
- {
- Tuple<A, L> x = new Tuple<A, L>(a, l);
- remove[x] = new HashSet<B>(bGraph.Pre(prevsim[a], l).Except(bGraph.Pre(sim[a], l)));
- if (remove[x].Count > 0)
- {
- workQueue.Enqueue(x);
- }
- }
- }
-
- while (workQueue.Count > 0)
- {
- Tuple<A,L> x = workQueue.Dequeue();
- A v = x.Item1;
- foreach (A u in aGraph.Pre(v, x.Item2))
- {
- foreach (B w in remove[x])
- {
- if (sim[u].Contains(w))
- {
- sim[u].Remove(w);
- foreach (L l in bGraph.PreLabels(w))
- {
- foreach (B b in bGraph.Pre(w, l))
- {
- if (bGraph.Post(b, l).Intersect(sim[u]).Count() == 0)
- {
- Tuple<A, L> z = new Tuple<A, L>(u, l);
- if (!remove.ContainsKey(z))
- remove[z] = new HashSet<B>();
- remove[z].Add(b);
- workQueue.Enqueue(z);
- }
- }
- }
- }
- }
- }
- prevsim[v] = new HashSet<B>(sim[v]);
- remove[x] = new HashSet<B>();
- }
-
- return sim;
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Boogie.GraphUtil;
+
+namespace Microsoft.Boogie
+{
+ public class SimulationRelation<A, B, L>
+ {
+ class Graph<T>
+ {
+ HashSet<T> nodes;
+ Dictionary<T, Dictionary<L, List<T>>> successors;
+ Dictionary<T, Dictionary<L, List<T>>> predecessors;
+
+ public Graph(List<Tuple<T, L, T>> edges)
+ {
+ nodes = new HashSet<T>();
+ successors = new Dictionary<T, Dictionary<L, List<T>>>();
+ predecessors = new Dictionary<T, Dictionary<L, List<T>>>();
+ foreach (Tuple<T, L, T> edge in edges)
+ {
+ T source = edge.Item1;
+ L label = edge.Item2;
+ T dest = edge.Item3;
+ nodes.Add(source);
+ nodes.Add(dest);
+ if (!successors.ContainsKey(source))
+ {
+ successors[source] = new Dictionary<L, List<T>>();
+ }
+ if (!successors[source].ContainsKey(label))
+ {
+ successors[source][label] = new List<T>();
+ }
+ if (!predecessors.ContainsKey(dest))
+ {
+ predecessors[dest] = new Dictionary<L, List<T>>();
+ }
+ if (!predecessors[dest].ContainsKey(label))
+ {
+ predecessors[dest][label] = new List<T>();
+ }
+ successors[source][label].Add(dest);
+ predecessors[dest][label].Add(source);
+ }
+ }
+
+ public IEnumerable<T> Nodes { get { return nodes; } }
+
+ public IEnumerable<T> Post(T t, L l)
+ {
+ if (successors.ContainsKey(t) && successors[t].ContainsKey(l))
+ {
+ return successors[t][l];
+ }
+ else
+ {
+ return Enumerable.Empty<T>();
+ }
+ }
+
+ public IEnumerable<T> Post(IEnumerable<T> set, L l)
+ {
+ return set.Select(x => Post(x, l)).Aggregate(Enumerable.Empty<T>(), (p, q) => p.Concat(q));
+ }
+
+ public IEnumerable<T> Pre(T t, L l)
+ {
+ if (predecessors.ContainsKey(t) && predecessors[t].ContainsKey(l))
+ {
+ return predecessors[t][l];
+ }
+ else
+ {
+ return Enumerable.Empty<T>();
+ }
+ }
+
+ public IEnumerable<T> Pre(IEnumerable<T> set, L l)
+ {
+ return set.Select(x => Pre(x, l)).Aggregate(Enumerable.Empty<T>(), (p, q) => p.Concat(q));
+ }
+
+ public IEnumerable<L> PostLabels(T t)
+ {
+ if (successors.ContainsKey(t))
+ {
+ return successors[t].Keys;
+ }
+ else
+ {
+ return Enumerable.Empty<L>();
+ }
+ }
+
+ public IEnumerable<L> PreLabels(T t)
+ {
+ if (predecessors.ContainsKey(t))
+ {
+ return predecessors[t].Keys;
+ }
+ else
+ {
+ return Enumerable.Empty<L>();
+ }
+ }
+ }
+
+ Graph<A> aGraph;
+ Graph<B> bGraph;
+ Dictionary<A, HashSet<B>> initialConstraints;
+
+ public SimulationRelation(List<Tuple<A, L, A>> aEdges, List<Tuple<B, L, B>> bEdges, Dictionary<A, HashSet<B>> initialConstraints)
+ {
+ this.aGraph = new Graph<A>(aEdges);
+ this.bGraph = new Graph<B>(bEdges);
+ this.initialConstraints = initialConstraints;
+ }
+
+ public Dictionary<A, HashSet<B>> ComputeSimulationRelation()
+ {
+ Dictionary<A, HashSet<B>> prevsim;
+ Dictionary<A, HashSet<B>> sim;
+ Dictionary<Tuple<A, L>, HashSet<B>> remove;
+ Queue<Tuple<A,L>> workQueue;
+
+ prevsim = new Dictionary<A, HashSet<B>>();
+ sim = new Dictionary<A, HashSet<B>>();
+ remove = new Dictionary<Tuple<A, L>, HashSet<B>>();
+ workQueue = new Queue<Tuple<A,L>>();
+ foreach (var a in aGraph.Nodes)
+ {
+ prevsim[a] = new HashSet<B>(bGraph.Nodes);
+ sim[a] = new HashSet<B>();
+ HashSet<L> aOutgoingLabels = new HashSet<L>(aGraph.PostLabels(a));
+ foreach (var b in bGraph.Nodes)
+ {
+ IEnumerable<L> bOutgoingLabels = bGraph.PostLabels(b);
+ if (aOutgoingLabels.IsSubsetOf(bOutgoingLabels))
+ {
+ sim[a].Add(b);
+ }
+ }
+ if (initialConstraints.ContainsKey(a))
+ {
+ sim[a].IntersectWith(initialConstraints[a]);
+ }
+
+ foreach (var l in aGraph.PreLabels(a))
+ {
+ Tuple<A, L> x = new Tuple<A, L>(a, l);
+ remove[x] = new HashSet<B>(bGraph.Pre(prevsim[a], l).Except(bGraph.Pre(sim[a], l)));
+ if (remove[x].Count > 0)
+ {
+ workQueue.Enqueue(x);
+ }
+ }
+ }
+
+ while (workQueue.Count > 0)
+ {
+ Tuple<A,L> x = workQueue.Dequeue();
+ A v = x.Item1;
+ foreach (A u in aGraph.Pre(v, x.Item2))
+ {
+ foreach (B w in remove[x])
+ {
+ if (sim[u].Contains(w))
+ {
+ sim[u].Remove(w);
+ foreach (L l in bGraph.PreLabels(w))
+ {
+ foreach (B b in bGraph.Pre(w, l))
+ {
+ if (bGraph.Post(b, l).Intersect(sim[u]).Count() == 0)
+ {
+ Tuple<A, L> z = new Tuple<A, L>(u, l);
+ if (!remove.ContainsKey(z))
+ remove[z] = new HashSet<B>();
+ remove[z].Add(b);
+ workQueue.Enqueue(z);
+ }
+ }
+ }
+ }
+ }
+ }
+ prevsim[v] = new HashSet<B>(sim[v]);
+ remove[x] = new HashSet<B>();
+ }
+
+ return sim;
+ }
+ }
+}
diff --git a/Source/Concurrency/TypeCheck.cs b/Source/Concurrency/TypeCheck.cs
deleted file mode 100644
index f2b2c0ca..00000000
--- a/Source/Concurrency/TypeCheck.cs
+++ /dev/null
@@ -1,724 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Boogie;
-using System.Diagnostics.Contracts;
-using System.Diagnostics;
-
-namespace Microsoft.Boogie
-{
- public enum MoverType
- {
- Top,
- Atomic,
- Right,
- Left,
- Both
- }
-
- public class ActionInfo
- {
- public Procedure proc;
- public int createdAtLayerNum;
- public int availableUptoLayerNum;
- public bool hasImplementation;
-
- public ActionInfo(Procedure proc, int createdAtLayerNum, int availableUptoLayerNum)
- {
- this.proc = proc;
- this.createdAtLayerNum = createdAtLayerNum;
- this.availableUptoLayerNum = availableUptoLayerNum;
- this.hasImplementation = false;
- }
-
- public virtual bool IsRightMover
- {
- get { return true; }
- }
-
- public virtual bool IsLeftMover
- {
- get { return true; }
- }
- }
-
- public class AtomicActionInfo : ActionInfo
- {
- public Ensures ensures;
- public MoverType moverType;
- public List<AssertCmd> thisGate;
- public CodeExpr thisAction;
- public List<Variable> thisInParams;
- public List<Variable> thisOutParams;
- public List<AssertCmd> thatGate;
- public CodeExpr thatAction;
- public List<Variable> thatInParams;
- public List<Variable> thatOutParams;
- public HashSet<Variable> actionUsedGlobalVars;
- public HashSet<Variable> modifiedGlobalVars;
- public HashSet<Variable> gateUsedGlobalVars;
- public bool hasAssumeCmd;
-
- public bool CommutesWith(AtomicActionInfo actionInfo)
- {
- if (this.modifiedGlobalVars.Intersect(actionInfo.actionUsedGlobalVars).Count() > 0)
- return false;
- if (this.actionUsedGlobalVars.Intersect(actionInfo.modifiedGlobalVars).Count() > 0)
- return false;
- return true;
- }
-
- public override bool IsRightMover
- {
- get { return moverType == MoverType.Right || moverType == MoverType.Both; }
- }
-
- public override bool IsLeftMover
- {
- get { return moverType == MoverType.Left || moverType == MoverType.Both; }
- }
-
- public AtomicActionInfo(Procedure proc, Ensures ensures, MoverType moverType, int layerNum, int availableUptoLayerNum)
- : base(proc, layerNum, availableUptoLayerNum)
- {
- CodeExpr codeExpr = ensures.Condition as CodeExpr;
- this.ensures = ensures;
- this.moverType = moverType;
- this.thisGate = new List<AssertCmd>();
- this.thisAction = codeExpr;
- this.thisInParams = new List<Variable>();
- this.thisOutParams = new List<Variable>();
- this.thatGate = new List<AssertCmd>();
- this.thatInParams = new List<Variable>();
- this.thatOutParams = new List<Variable>();
- this.hasAssumeCmd = false;
-
- foreach (Block block in codeExpr.Blocks)
- {
- block.Cmds.ForEach(x => this.hasAssumeCmd = this.hasAssumeCmd || x is AssumeCmd);
- }
-
- var cmds = thisAction.Blocks[0].Cmds;
- for (int i = 0; i < cmds.Count; i++)
- {
- AssertCmd assertCmd = cmds[i] as AssertCmd;
- if (assertCmd == null) break;
- thisGate.Add(assertCmd);
- cmds[i] = new AssumeCmd(assertCmd.tok, Expr.True);
- }
-
- Dictionary<Variable, Expr> map = new Dictionary<Variable, Expr>();
- foreach (Variable x in proc.InParams)
- {
- this.thisInParams.Add(x);
- Variable y = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "that_" + x.Name, x.TypedIdent.Type), true, x.Attributes);
- this.thatInParams.Add(y);
- map[x] = Expr.Ident(y);
- }
- foreach (Variable x in proc.OutParams)
- {
- this.thisOutParams.Add(x);
- Variable y = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "that_" + x.Name, x.TypedIdent.Type), false, x.Attributes);
- this.thatOutParams.Add(y);
- map[x] = Expr.Ident(y);
- }
- List<Variable> thatLocVars = new List<Variable>();
- foreach (Variable x in thisAction.LocVars)
- {
- Variable y = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "that_" + x.Name, x.TypedIdent.Type), false);
- map[x] = Expr.Ident(y);
- thatLocVars.Add(y);
- }
- Contract.Assume(proc.TypeParameters.Count == 0);
- Substitution subst = Substituter.SubstitutionFromHashtable(map);
- foreach (AssertCmd assertCmd in thisGate)
- {
- thatGate.Add((AssertCmd)Substituter.Apply(subst, assertCmd));
- }
- Dictionary<Block, Block> blockMap = new Dictionary<Block, Block>();
- List<Block> thatBlocks = new List<Block>();
- foreach (Block block in thisAction.Blocks)
- {
- List<Cmd> otherCmds = new List<Cmd>();
- foreach (Cmd cmd in block.Cmds)
- {
- otherCmds.Add(Substituter.Apply(subst, cmd));
- }
- Block thatBlock = new Block();
- thatBlock.Cmds = otherCmds;
- thatBlock.Label = "that_" + block.Label;
- block.Label = "this_" + block.Label;
- thatBlocks.Add(thatBlock);
- blockMap[block] = thatBlock;
- if (block.TransferCmd is GotoCmd)
- {
- GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
- for (int i = 0; i < gotoCmd.labelNames.Count; i++)
- {
- gotoCmd.labelNames[i] = "this_" + gotoCmd.labelNames[i];
- }
- }
- }
- foreach (Block block in thisAction.Blocks)
- {
- if (block.TransferCmd is ReturnExprCmd)
- {
- block.TransferCmd = new ReturnCmd(block.TransferCmd.tok);
- blockMap[block].TransferCmd = new ReturnCmd(block.TransferCmd.tok);
- continue;
- }
- List<Block> thatGotoCmdLabelTargets = new List<Block>();
- List<string> thatGotoCmdLabelNames = new List<string>();
- GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
- foreach (Block target in gotoCmd.labelTargets)
- {
- thatGotoCmdLabelTargets.Add(blockMap[target]);
- thatGotoCmdLabelNames.Add(blockMap[target].Label);
- }
- blockMap[block].TransferCmd = new GotoCmd(block.TransferCmd.tok, thatGotoCmdLabelNames, thatGotoCmdLabelTargets);
- }
- this.thatAction = new CodeExpr(thatLocVars, thatBlocks);
-
- {
- VariableCollector collector = new VariableCollector();
- collector.Visit(codeExpr);
- this.actionUsedGlobalVars = new HashSet<Variable>(collector.usedVars.Where(x => x is GlobalVariable));
- }
-
- List<Variable> modifiedVars = new List<Variable>();
- foreach (Block block in codeExpr.Blocks)
- {
- block.Cmds.ForEach(cmd => cmd.AddAssignedVariables(modifiedVars));
- }
- this.modifiedGlobalVars = new HashSet<Variable>(modifiedVars.Where(x => x is GlobalVariable));
-
- {
- VariableCollector collector = new VariableCollector();
- this.thisGate.ForEach(assertCmd => collector.Visit(assertCmd));
- this.gateUsedGlobalVars = new HashSet<Variable>(collector.usedVars.Where(x => x is GlobalVariable));
- }
- }
- }
-
- public class SharedVariableInfo
- {
- public int introLayerNum;
- public int hideLayerNum;
-
- public SharedVariableInfo(int introLayerNum, int hideLayerNum)
- {
- this.introLayerNum = introLayerNum;
- this.hideLayerNum = hideLayerNum;
- }
- }
-
- public class LayerEraser : ReadOnlyVisitor
- {
- private QKeyValue RemoveLayerAttribute(QKeyValue iter)
- {
- if (iter == null) return null;
- iter.Next = RemoveLayerAttribute(iter.Next);
- return (iter.Key == "layer") ? iter.Next : iter;
- }
-
- public override Variable VisitVariable(Variable node)
- {
- node.Attributes = RemoveLayerAttribute(node.Attributes);
- return base.VisitVariable(node);
- }
-
- public override Procedure VisitProcedure(Procedure node)
- {
- node.Attributes = RemoveLayerAttribute(node.Attributes);
- return base.VisitProcedure(node);
- }
-
- public override Implementation VisitImplementation(Implementation node)
- {
- node.Attributes = RemoveLayerAttribute(node.Attributes);
- return base.VisitImplementation(node);
- }
-
- public override Requires VisitRequires(Requires node)
- {
- node.Attributes = RemoveLayerAttribute(node.Attributes);
- return base.VisitRequires(node);
- }
-
- public override Ensures VisitEnsures(Ensures node)
- {
- node.Attributes = RemoveLayerAttribute(node.Attributes);
- return base.VisitEnsures(node);
- }
-
- public override Cmd VisitAssertCmd(AssertCmd node)
- {
- node.Attributes = RemoveLayerAttribute(node.Attributes);
- return base.VisitAssertCmd(node);
- }
- }
-
- public class MoverTypeChecker : ReadOnlyVisitor
- {
- CheckingContext checkingContext;
- public int errorCount;
- public Dictionary<Variable, SharedVariableInfo> globalVarToSharedVarInfo;
- Procedure enclosingProc;
- Implementation enclosingImpl;
- public Dictionary<Procedure, ActionInfo> procToActionInfo;
- public Program program;
- bool canAccessSharedVars;
- bool canAccessAuxVars;
- int minLayerNum;
- int maxLayerNum;
- public Dictionary<Absy, HashSet<int>> absyToLayerNums;
- HashSet<Variable> auxVars;
- public int leastUnimplementedLayerNum;
-
- private static List<int> FindLayers(QKeyValue kv)
- {
- HashSet<int> attrs = new HashSet<int>();
- for (; kv != null; kv = kv.Next)
- {
- if (kv.Key != "layer") continue;
- foreach (var o in kv.Params)
- {
- Expr e = o as Expr;
- if (e == null) continue;
- LiteralExpr l = e as LiteralExpr;
- if (l != null && l.isBigNum)
- attrs.Add(l.asBigNum.ToIntSafe);
- }
- }
- List<int> layers = attrs.ToList();
- layers.Sort();
- return layers;
- }
-
- private static MoverType GetMoverType(Ensures e)
- {
- if (QKeyValue.FindBoolAttribute(e.Attributes, "atomic"))
- return MoverType.Atomic;
- if (QKeyValue.FindBoolAttribute(e.Attributes, "right"))
- return MoverType.Right;
- if (QKeyValue.FindBoolAttribute(e.Attributes, "left"))
- return MoverType.Left;
- if (QKeyValue.FindBoolAttribute(e.Attributes, "both"))
- return MoverType.Both;
- return MoverType.Top;
- }
-
- public MoverTypeChecker(Program program)
- {
- this.auxVars = new HashSet<Variable>();
- this.absyToLayerNums = new Dictionary<Absy, HashSet<int>>();
- this.globalVarToSharedVarInfo = new Dictionary<Variable, SharedVariableInfo>();
- this.procToActionInfo = new Dictionary<Procedure, ActionInfo>();
- this.errorCount = 0;
- this.checkingContext = new CheckingContext(null);
- this.program = program;
- this.enclosingProc = null;
- this.enclosingImpl = null;
- this.canAccessSharedVars = false;
- this.canAccessAuxVars = false;
- this.minLayerNum = int.MaxValue;
- this.maxLayerNum = -1;
- this.leastUnimplementedLayerNum = int.MaxValue;
- foreach (var g in program.GlobalVariables)
- {
- List<int> layerNums = FindLayers(g.Attributes);
- if (layerNums.Count == 0)
- {
- // Cannot access atomic actions
- }
- else if (layerNums.Count == 1)
- {
- this.globalVarToSharedVarInfo[g] = new SharedVariableInfo(layerNums[0], int.MaxValue);
- }
- else if (layerNums.Count == 2)
- {
- this.globalVarToSharedVarInfo[g] = new SharedVariableInfo(layerNums[0], layerNums[1]);
- }
- else
- {
- Error(g, "Too many layer numbers");
- }
- }
- }
-
- private HashSet<int> allCreatedLayerNums;
- public IEnumerable<int> AllCreatedLayerNums
- {
- get
- {
- if (allCreatedLayerNums == null)
- {
- allCreatedLayerNums = new HashSet<int>();
- foreach (ActionInfo actionInfo in procToActionInfo.Values)
- {
- allCreatedLayerNums.Add(actionInfo.createdAtLayerNum);
- }
- }
- return allCreatedLayerNums;
- }
- }
-
- public void TypeCheck()
- {
- foreach (var proc in program.Procedures)
- {
- if (!QKeyValue.FindBoolAttribute(proc.Attributes, "yields")) continue;
-
- int createdAtLayerNum; // must be initialized by the following code, otherwise it is an error
- int availableUptoLayerNum = int.MaxValue;
- List<int> attrs = FindLayers(proc.Attributes);
- if (attrs.Count == 1)
- {
- createdAtLayerNum = attrs[0];
- }
- else if (attrs.Count == 2)
- {
- createdAtLayerNum = attrs[0];
- availableUptoLayerNum = attrs[1];
- }
- else
- {
- Error(proc, "Incorrect number of layers");
- continue;
- }
- if (availableUptoLayerNum <= createdAtLayerNum)
- {
- Error(proc, "Creation layer number must be less than the available upto layer number");
- continue;
- }
- foreach (Ensures e in proc.Ensures)
- {
- MoverType moverType = GetMoverType(e);
- if (moverType == MoverType.Top) continue;
- CodeExpr codeExpr = e.Condition as CodeExpr;
- if (codeExpr == null)
- {
- Error(e, "An atomic action must be a CodeExpr");
- continue;
- }
- if (procToActionInfo.ContainsKey(proc))
- {
- Error(proc, "A procedure can have at most one atomic action");
- continue;
- }
-
- minLayerNum = int.MaxValue;
- maxLayerNum = -1;
- canAccessSharedVars = true;
- enclosingProc = proc;
- enclosingImpl = null;
- base.VisitEnsures(e);
- canAccessSharedVars = false;
- if (maxLayerNum > createdAtLayerNum)
- {
- Error(e, "A variable being accessed is introduced after this action is created");
- }
- else if (availableUptoLayerNum > minLayerNum)
- {
- Error(e, "A variable being accessed is hidden before this action becomes unavailable");
- }
- else
- {
- procToActionInfo[proc] = new AtomicActionInfo(proc, e, moverType, createdAtLayerNum, availableUptoLayerNum);
- }
- }
- if (errorCount > 0) continue;
- if (!procToActionInfo.ContainsKey(proc))
- {
- procToActionInfo[proc] = new ActionInfo(proc, createdAtLayerNum, availableUptoLayerNum);
- }
- }
- if (errorCount > 0) return;
- foreach (var impl in program.Implementations)
- {
- if (!procToActionInfo.ContainsKey(impl.Proc)) continue;
- procToActionInfo[impl.Proc].hasImplementation = true;
- }
- foreach (var proc in procToActionInfo.Keys)
- {
- ActionInfo actionInfo = procToActionInfo[proc];
- if (actionInfo.hasImplementation) continue;
- if (leastUnimplementedLayerNum == int.MaxValue)
- {
- leastUnimplementedLayerNum = actionInfo.createdAtLayerNum;
- }
- else if (leastUnimplementedLayerNum == actionInfo.createdAtLayerNum)
- {
- // do nothing
- }
- else
- {
- Error(proc, "All unimplemented atomic actions must be created at the same layer");
- }
- }
- foreach (var g in this.globalVarToSharedVarInfo.Keys)
- {
- var info = globalVarToSharedVarInfo[g];
- if (!this.AllCreatedLayerNums.Contains(info.introLayerNum))
- {
- Error(g, "Variable must be introduced with creation of some atomic action");
- }
- if (info.hideLayerNum != int.MaxValue && !this.AllCreatedLayerNums.Contains(info.hideLayerNum))
- {
- Error(g, "Variable must be hidden with creation of some atomic action");
- }
- }
- if (errorCount > 0) return;
- this.VisitProgram(program);
- if (errorCount > 0) return;
- YieldTypeChecker.PerformYieldSafeCheck(this);
- new LayerEraser().VisitProgram(program);
- }
-
- public IEnumerable<Variable> SharedVariables
- {
- get { return this.globalVarToSharedVarInfo.Keys; }
- }
-
- public override Implementation VisitImplementation(Implementation node)
- {
- if (!procToActionInfo.ContainsKey(node.Proc))
- {
- return node;
- }
- this.enclosingImpl = node;
- this.enclosingProc = null;
- auxVars = new HashSet<Variable>();
- foreach (Variable v in node.LocVars)
- {
- if (QKeyValue.FindBoolAttribute(v.Attributes, "aux"))
- {
- auxVars.Add(v);
- }
- }
- return base.VisitImplementation(node);
- }
-
- public override Procedure VisitProcedure(Procedure node)
- {
- if (!procToActionInfo.ContainsKey(node))
- {
- return node;
- }
- this.enclosingProc = node;
- this.enclosingImpl = null;
- return base.VisitProcedure(node);
- }
-
- public override Cmd VisitCallCmd(CallCmd node)
- {
- int enclosingProcLayerNum = procToActionInfo[enclosingImpl.Proc].createdAtLayerNum;
- if (procToActionInfo.ContainsKey(node.Proc))
- {
- ActionInfo actionInfo = procToActionInfo[node.Proc];
- if (node.IsAsync && actionInfo is AtomicActionInfo)
- {
- Error(node, "Target of async call cannot be an atomic action");
- }
- int calleeLayerNum = procToActionInfo[node.Proc].createdAtLayerNum;
- if (enclosingProcLayerNum < calleeLayerNum ||
- (enclosingProcLayerNum == calleeLayerNum && actionInfo is AtomicActionInfo))
- {
- Error(node, "The layer of the caller must be greater than the layer of the callee");
- }
- else if (enclosingProcLayerNum == calleeLayerNum && enclosingImpl.OutParams.Count > 0)
- {
- HashSet<Variable> outParams = new HashSet<Variable>(enclosingImpl.OutParams);
- foreach (var x in node.Outs)
- {
- if (x.Decl is GlobalVariable)
- {
- Error(node, "A global variable cannot be used as output argument for this call");
- }
- else if (outParams.Contains(x.Decl))
- {
- Error(node, "An output variable of the enclosing implementation cannot be used as output argument for this call");
- }
- }
- }
- if (actionInfo.availableUptoLayerNum < enclosingProcLayerNum)
- {
- Error(node, "The callee is not available in the caller procedure");
- }
- }
- else
- {
- Error(node, "Yielding procedure can call only a yielding procedure");
- }
- return base.VisitCallCmd(node);
- }
-
- public override Cmd VisitParCallCmd(ParCallCmd node)
- {
- int enclosingProcLayerNum = procToActionInfo[enclosingImpl.Proc].createdAtLayerNum;
- bool isLeftMover = true;
- bool isRightMover = true;
- int maxCalleeLayerNum = 0;
- int numAtomicActions = 0;
- foreach (CallCmd iter in node.CallCmds)
- {
- ActionInfo actionInfo = procToActionInfo[iter.Proc];
- isLeftMover = isLeftMover && actionInfo.IsLeftMover;
- isRightMover = isRightMover && actionInfo.IsRightMover;
- if (actionInfo.createdAtLayerNum > maxCalleeLayerNum)
- {
- maxCalleeLayerNum = actionInfo.createdAtLayerNum;
- }
- if (actionInfo is AtomicActionInfo)
- {
- numAtomicActions++;
- }
- }
- if (maxCalleeLayerNum < enclosingProcLayerNum && !isLeftMover && !isRightMover && node.CallCmds.Count > 1)
- {
- Error(node, "The callees in the parallel call must be all right movers or all left movers");
- }
- if (maxCalleeLayerNum == enclosingProcLayerNum && numAtomicActions > 0)
- {
- Error(node, "If some callee in the parallel call has the same layer as the enclosing procedure, then no callee can be an atomic action");
- }
- return base.VisitParCallCmd(node);
- }
-
- public override Cmd VisitAssignCmd(AssignCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- for (int i = 0; i < node.Lhss.Count; ++i)
- {
- bool savedCanAccessSharedVars = canAccessSharedVars;
- bool savedCanAccessAuxVars = canAccessAuxVars;
- Variable v = node.Lhss[i].DeepAssignedVariable;
- if (v is LocalVariable && auxVars.Contains(v))
- {
- canAccessSharedVars = true;
- canAccessAuxVars = true;
- }
- this.Visit(node.Lhss[i]);
- this.Visit(node.Rhss[i]);
- canAccessSharedVars = savedCanAccessSharedVars;
- canAccessAuxVars = savedCanAccessAuxVars;
- }
- return node;
- }
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- if (node.Decl is GlobalVariable)
- {
- if (!canAccessSharedVars)
- {
- Error(node, "Shared variable can be accessed only in atomic actions or specifications");
- }
- else if (this.globalVarToSharedVarInfo.ContainsKey(node.Decl))
- {
- if (this.globalVarToSharedVarInfo[node.Decl].hideLayerNum < minLayerNum)
- {
- minLayerNum = this.globalVarToSharedVarInfo[node.Decl].hideLayerNum;
- }
- if (this.globalVarToSharedVarInfo[node.Decl].introLayerNum > maxLayerNum)
- {
- maxLayerNum = this.globalVarToSharedVarInfo[node.Decl].introLayerNum;
- }
- }
- else
- {
- Error(node, "Accessed shared variable must have layer annotation");
- }
- }
- else if (node.Decl is LocalVariable && auxVars.Contains(node.Decl) && !canAccessAuxVars)
- {
- Error(node, "Auxiliary variable can be accessed only in assertions");
- }
-
- return base.VisitIdentifierExpr(node);
- }
-
- public override Ensures VisitEnsures(Ensures ensures)
- {
- minLayerNum = int.MaxValue;
- maxLayerNum = -1;
- canAccessSharedVars = true;
- Ensures ret = base.VisitEnsures(ensures);
- canAccessSharedVars = false;
- ActionInfo actionInfo = procToActionInfo[enclosingProc];
- AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
- if (atomicActionInfo != null && atomicActionInfo.ensures == ensures)
- {
- // This case has already been checked
- }
- else
- {
- CheckAndAddLayers(ensures, ensures.Attributes, actionInfo.createdAtLayerNum);
- }
- return ret;
- }
-
- public override Requires VisitRequires(Requires requires)
- {
- minLayerNum = int.MaxValue;
- maxLayerNum = -1;
- canAccessSharedVars = true;
- Requires ret = base.VisitRequires(requires);
- canAccessSharedVars = false;
- CheckAndAddLayers(requires, requires.Attributes, procToActionInfo[enclosingProc].createdAtLayerNum);
- return ret;
- }
-
- public override Cmd VisitAssertCmd(AssertCmd node)
- {
- if (enclosingImpl == null)
- return base.VisitAssertCmd(node);
- minLayerNum = int.MaxValue;
- maxLayerNum = -1;
- canAccessSharedVars = true;
- canAccessAuxVars = true;
- Cmd ret = base.VisitAssertCmd(node);
- canAccessAuxVars = false;
- canAccessSharedVars = false;
- CheckAndAddLayers(node, node.Attributes, procToActionInfo[enclosingImpl.Proc].createdAtLayerNum);
- return ret;
- }
-
- private void CheckAndAddLayers(Absy node, QKeyValue attributes, int enclosingProcLayerNum)
- {
- List<int> attrs = FindLayers(attributes);
- if (attrs.Count == 0)
- {
- Error(node, "layer not present");
- return;
- }
- absyToLayerNums[node] = new HashSet<int>();
- foreach (int layerNum in attrs)
- {
- if (layerNum == leastUnimplementedLayerNum || !AllCreatedLayerNums.Contains(layerNum))
- {
- Error(node, "Illegal layer number");
- }
- else if (layerNum > enclosingProcLayerNum)
- {
- Error(node, "The layer cannot be greater than the layer of enclosing procedure");
- }
- else if (maxLayerNum < layerNum && layerNum <= minLayerNum)
- {
- absyToLayerNums[node].Add(layerNum);
- }
- else
- {
- Error(node, string.Format("A variable being accessed in this specification is unavailable at layer {0}", layerNum));
- }
- }
- }
-
- public void Error(Absy node, string message)
- {
- checkingContext.Error(node, message);
- errorCount++;
- }
- }
-} \ No newline at end of file
diff --git a/Source/Concurrency/YieldTypeChecker.cs b/Source/Concurrency/YieldTypeChecker.cs
index 95884626..ed59d3ad 100644
--- a/Source/Concurrency/YieldTypeChecker.cs
+++ b/Source/Concurrency/YieldTypeChecker.cs
@@ -1,363 +1,368 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Boogie;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics;
-
-namespace Microsoft.Boogie
-{
- class YieldTypeChecker
- {
- static List<Tuple<int, int, int>> ASpec;
- static List<Tuple<int, int, int>> BSpec;
- static List<Tuple<int, int, int>> CSpec;
- static YieldTypeChecker()
- {
- // initial: 0, final: 1
- ASpec = new List<Tuple<int,int,int>>();
- ASpec.Add(new Tuple<int, int, int>(0, 'Y', 1));
- ASpec.Add(new Tuple<int, int, int>(1, 'Y', 1));
- ASpec.Add(new Tuple<int, int, int>(1, 'B', 1));
- ASpec.Add(new Tuple<int, int, int>(1, 'R', 1));
- ASpec.Add(new Tuple<int, int, int>(1, 'L', 1));
- ASpec.Add(new Tuple<int, int, int>(1, 'A', 1));
- ASpec.Add(new Tuple<int, int, int>(0, 'P', 0));
- ASpec.Add(new Tuple<int, int, int>(1, 'P', 1));
-
- // initial: 1, final: 0
- BSpec = new List<Tuple<int, int, int>>();
- BSpec.Add(new Tuple<int, int, int>(1, 'Y', 0));
- BSpec.Add(new Tuple<int, int, int>(1, 'Y', 1));
- BSpec.Add(new Tuple<int, int, int>(1, 'B', 1));
- BSpec.Add(new Tuple<int, int, int>(1, 'R', 1));
- BSpec.Add(new Tuple<int, int, int>(1, 'L', 1));
- BSpec.Add(new Tuple<int, int, int>(1, 'A', 1));
- BSpec.Add(new Tuple<int, int, int>(0, 'P', 0));
- BSpec.Add(new Tuple<int, int, int>(1, 'P', 1));
-
- // initial: {0, 1}, final: {0, 1}
- CSpec = new List<Tuple<int,int,int>>();
- CSpec.Add(new Tuple<int, int, int>(0, 'B', 0));
- CSpec.Add(new Tuple<int, int, int>(0, 'R', 0));
- CSpec.Add(new Tuple<int, int, int>(0, 'Y', 0));
- CSpec.Add(new Tuple<int, int, int>(0, 'B', 1));
- CSpec.Add(new Tuple<int, int, int>(0, 'R', 1));
- CSpec.Add(new Tuple<int, int, int>(0, 'L', 1));
- CSpec.Add(new Tuple<int, int, int>(0, 'A', 1));
- CSpec.Add(new Tuple<int, int, int>(1, 'B', 1));
- CSpec.Add(new Tuple<int, int, int>(1, 'L', 1));
- CSpec.Add(new Tuple<int, int, int>(1, 'Y', 0));
- CSpec.Add(new Tuple<int, int, int>(0, 'P', 0));
- CSpec.Add(new Tuple<int, int, int>(1, 'P', 1));
- }
-
- private void IsYieldTypeSafe()
- {
- List<Tuple<int, int, int>> implEdges = new List<Tuple<int, int, int>>();
- foreach (Tuple<int, int> e in edgeLabels.Keys)
- {
- implEdges.Add(new Tuple<int, int, int>(e.Item1, edgeLabels[e], e.Item2));
- }
- //Console.WriteLine(PrintGraph(impl, implEdges, initialState, finalStates));
- ASpecCheck(implEdges);
- BSpecCheck(implEdges);
- CSpecCheck(implEdges);
- }
-
- private void ASpecCheck(List<Tuple<int, int, int>> implEdges)
- {
- Dictionary<int, HashSet<int>> initialConstraints = new Dictionary<int, HashSet<int>>();
- initialConstraints[initialState] = new HashSet<int>(new int[] { 0 });
- foreach (var finalState in finalStates)
- {
- initialConstraints[finalState] = new HashSet<int>(new int[] { 1 });
- }
- SimulationRelation<int, int, int> x = new SimulationRelation<int, int, int>(implEdges, ASpec, initialConstraints);
- Dictionary<int, HashSet<int>> simulationRelation = x.ComputeSimulationRelation();
- if (simulationRelation[initialState].Count == 0)
- {
- moverTypeChecker.Error(impl, string.Format("Implementation {0} fails simulation check A at layer {1}. An action must be preceded by a yield.\n", impl.Name, currLayerNum));
- }
- }
-
- private void BSpecCheck(List<Tuple<int, int, int>> implEdges)
- {
- Dictionary<int, HashSet<int>> initialConstraints = new Dictionary<int, HashSet<int>>();
- initialConstraints[initialState] = new HashSet<int>(new int[] { 1 });
- foreach (var finalState in finalStates)
- {
- initialConstraints[finalState] = new HashSet<int>(new int[] { 0 });
- }
- SimulationRelation<int, int, int> x = new SimulationRelation<int, int, int>(implEdges, BSpec, initialConstraints);
- Dictionary<int, HashSet<int>> simulationRelation = x.ComputeSimulationRelation();
- if (simulationRelation[initialState].Count == 0)
- {
- moverTypeChecker.Error(impl, string.Format("Implementation {0} fails simulation check B at layer {1}. An action must be succeeded by a yield.\n", impl.Name, currLayerNum));
- }
- }
-
- private void CSpecCheck(List<Tuple<int, int, int>> implEdges)
- {
- Dictionary<int, HashSet<int>> initialConstraints = new Dictionary<int, HashSet<int>>();
- foreach (Block block in loopHeaders)
- {
- if (!IsTerminatingLoopHeader(block))
- {
- initialConstraints[absyToNode[block]] = new HashSet<int>(new int[] { 0 });
- }
- }
- SimulationRelation<int, int, int> x = new SimulationRelation<int, int, int>(implEdges, CSpec, initialConstraints);
- Dictionary<int, HashSet<int>> simulationRelation = x.ComputeSimulationRelation();
- if (simulationRelation[initialState].Count == 0)
- {
- moverTypeChecker.Error(impl, string.Format("Implementation {0} fails simulation check C at layer {1}. Transactions must be separated by a yield.\n", impl.Name, currLayerNum));
- }
- }
-
- private bool IsTerminatingLoopHeader(Block block)
- {
- foreach (Cmd cmd in block.Cmds)
- {
- AssertCmd assertCmd = cmd as AssertCmd;
- if (assertCmd != null && QKeyValue.FindBoolAttribute(assertCmd.Attributes, "terminates") && moverTypeChecker.absyToLayerNums[assertCmd].Contains(currLayerNum))
- {
- return true;
- }
- }
- return false;
- }
-
- public static void PerformYieldSafeCheck(MoverTypeChecker moverTypeChecker)
- {
- foreach (var impl in moverTypeChecker.program.Implementations)
- {
- if (!moverTypeChecker.procToActionInfo.ContainsKey(impl.Proc)) continue;
- impl.PruneUnreachableBlocks();
- Graph<Block> implGraph = Program.GraphFromImpl(impl);
- implGraph.ComputeLoops();
- int specLayerNum = moverTypeChecker.procToActionInfo[impl.Proc].createdAtLayerNum;
- foreach (int layerNum in moverTypeChecker.AllCreatedLayerNums.Except(new int[] { moverTypeChecker.leastUnimplementedLayerNum }))
- {
- if (layerNum > specLayerNum) continue;
- YieldTypeChecker executor = new YieldTypeChecker(moverTypeChecker, impl, layerNum, implGraph.Headers);
- }
- }
- }
-
- int stateCounter;
- MoverTypeChecker moverTypeChecker;
- Implementation impl;
- int currLayerNum;
- Dictionary<Absy, int> absyToNode;
- Dictionary<int, Absy> nodeToAbsy;
- int initialState;
- HashSet<int> finalStates;
- Dictionary<Tuple<int, int>, int> edgeLabels;
- IEnumerable<Block> loopHeaders;
-
- private YieldTypeChecker(MoverTypeChecker moverTypeChecker, Implementation impl, int currLayerNum, IEnumerable<Block> loopHeaders)
- {
- this.moverTypeChecker = moverTypeChecker;
- this.impl = impl;
- this.currLayerNum = currLayerNum;
- this.loopHeaders = loopHeaders;
- this.stateCounter = 0;
- this.absyToNode = new Dictionary<Absy, int>();
- this.initialState = 0;
- this.finalStates = new HashSet<int>();
- this.edgeLabels = new Dictionary<Tuple<int, int>, int>();
-
- foreach (Block block in impl.Blocks)
- {
- absyToNode[block] = stateCounter;
- stateCounter++;
- foreach (Cmd cmd in block.Cmds)
- {
- absyToNode[cmd] = stateCounter;
- stateCounter++;
- }
- absyToNode[block.TransferCmd] = stateCounter;
- stateCounter++;
- if (block.TransferCmd is ReturnCmd)
- {
- finalStates.Add(absyToNode[block.TransferCmd]);
- }
- }
- foreach (Block block in impl.Blocks)
- {
- Absy blockEntry = block.Cmds.Count == 0 ? (Absy)block.TransferCmd : (Absy)block.Cmds[0];
- edgeLabels[new Tuple<int, int>(absyToNode[block], absyToNode[blockEntry])] = 'P';
-
- GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
- if (gotoCmd == null) continue;
- foreach (Block successor in gotoCmd.labelTargets)
- {
- edgeLabels[new Tuple<int, int>(absyToNode[gotoCmd], absyToNode[successor])] = 'P';
- }
- }
-
- this.nodeToAbsy = new Dictionary<int, Absy>();
- foreach (KeyValuePair<Absy, int> state in absyToNode)
- {
- this.nodeToAbsy[state.Value] = state.Key;
- }
-
- ComputeGraph();
- IsYieldTypeSafe();
- }
-
- private void ComputeGraph()
- {
- foreach (Block block in impl.Blocks)
- {
- for (int i = 0; i < block.Cmds.Count; i++)
- {
- Cmd cmd = block.Cmds[i];
- int curr = absyToNode[cmd];
- int next = (i + 1 == block.Cmds.Count) ? absyToNode[block.TransferCmd] : absyToNode[block.Cmds[i + 1]];
- Tuple<int, int> edge = new Tuple<int, int>(curr, next);
- if (cmd is CallCmd)
- {
- CallCmd callCmd = cmd as CallCmd;
- if (callCmd.IsAsync)
- {
- ActionInfo actionInfo = moverTypeChecker.procToActionInfo[callCmd.Proc];
- if (currLayerNum <= actionInfo.createdAtLayerNum)
- edgeLabels[edge] = 'L';
- else
- edgeLabels[edge] = 'B';
- }
- else if (!moverTypeChecker.procToActionInfo.ContainsKey(callCmd.Proc))
- {
- edgeLabels[edge] = 'P';
- }
- else
- {
- MoverType moverType;
- ActionInfo actionInfo = moverTypeChecker.procToActionInfo[callCmd.Proc];
- if (actionInfo.createdAtLayerNum >= currLayerNum)
- {
- moverType = MoverType.Top;
- }
- else
- {
- AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
- if (atomicActionInfo == null)
- moverType = MoverType.Both;
- else
- moverType = atomicActionInfo.moverType;
- }
- switch (moverType)
- {
- case MoverType.Atomic:
- edgeLabels[edge] = 'A';
- break;
- case MoverType.Both:
- edgeLabels[edge] = 'B';
- break;
- case MoverType.Left:
- edgeLabels[edge] = 'L';
- break;
- case MoverType.Right:
- edgeLabels[edge] = 'R';
- break;
- case MoverType.Top:
- edgeLabels[edge] = 'Y';
- break;
- }
- }
- }
- else if (cmd is ParCallCmd)
- {
- ParCallCmd parCallCmd = cmd as ParCallCmd;
- bool isYield = false;
- bool isRightMover = true;
- bool isLeftMover = true;
- foreach (CallCmd callCmd in parCallCmd.CallCmds)
- {
- if (moverTypeChecker.procToActionInfo[callCmd.Proc].createdAtLayerNum >= currLayerNum)
- {
- isYield = true;
- }
- }
- if (isYield)
- {
- edgeLabels[edge] = 'Y';
- }
- else
- {
- foreach (CallCmd callCmd in parCallCmd.CallCmds)
- {
- ActionInfo actionInfo = moverTypeChecker.procToActionInfo[callCmd.Proc];
- isRightMover = isRightMover && actionInfo.IsRightMover;
- isLeftMover = isLeftMover && actionInfo.IsLeftMover;
- }
- if (isLeftMover && isRightMover)
- {
- edgeLabels[edge] = 'B';
- }
- else if (isLeftMover)
- {
- edgeLabels[edge] = 'L';
- }
- else if (isRightMover)
- {
- edgeLabels[edge] = 'R';
- }
- else
- {
- Debug.Assert(parCallCmd.CallCmds.Count == 1);
- edgeLabels[edge] = 'A';
- }
- }
- }
- else if (cmd is YieldCmd)
- {
- edgeLabels[edge] = 'Y';
- }
- else
- {
- edgeLabels[edge] = 'P';
- }
- }
- }
- }
-
- private static string PrintGraph(Implementation impl, List<Tuple<int, int, int>> edges, int initialState, HashSet<int> finalStates)
- {
- var s = new StringBuilder();
- s.AppendLine("\nImplementation " + impl.Proc.Name + " digraph G {");
- foreach (var e in edges)
- {
- string label = "P";
- switch (e.Item2)
- {
- case 'P': label = "P"; break;
- case 'Y': label = "Y"; break;
- case 'B': label = "B"; break;
- case 'R': label = "R"; break;
- case 'L': label = "L"; break;
- case 'A': label = "A"; break;
- default: Debug.Assert(false); break;
- }
- s.AppendLine(" \"" + e.Item1.ToString() + "\" -- " + label + " --> " + " \"" + e.Item3.ToString() + "\";");
- }
- s.AppendLine("}");
- s.AppendLine("Initial state: " + initialState);
- s.Append("Final states: ");
- bool first = true;
- foreach (int finalState in finalStates)
- {
- s.Append((first ? "" : ", ") + finalState);
- first = false;
- }
- s.AppendLine();
- return s.ToString();
- }
- }
-}
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Boogie;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics;
+
+namespace Microsoft.Boogie
+{
+ class YieldTypeChecker
+ {
+ static List<Tuple<int, int, int>> ASpec;
+ static List<Tuple<int, int, int>> BSpec;
+ static List<Tuple<int, int, int>> CSpec;
+ static YieldTypeChecker()
+ {
+ // initial: 0, final: 1
+ ASpec = new List<Tuple<int,int,int>>();
+ ASpec.Add(new Tuple<int, int, int>(0, 'Y', 1));
+ ASpec.Add(new Tuple<int, int, int>(1, 'Y', 1));
+ ASpec.Add(new Tuple<int, int, int>(1, 'B', 1));
+ ASpec.Add(new Tuple<int, int, int>(1, 'R', 1));
+ ASpec.Add(new Tuple<int, int, int>(1, 'L', 1));
+ ASpec.Add(new Tuple<int, int, int>(1, 'A', 1));
+ ASpec.Add(new Tuple<int, int, int>(0, 'P', 0));
+ ASpec.Add(new Tuple<int, int, int>(1, 'P', 1));
+
+ // initial: 1, final: 0
+ BSpec = new List<Tuple<int, int, int>>();
+ BSpec.Add(new Tuple<int, int, int>(1, 'Y', 0));
+ BSpec.Add(new Tuple<int, int, int>(1, 'Y', 1));
+ BSpec.Add(new Tuple<int, int, int>(1, 'B', 1));
+ BSpec.Add(new Tuple<int, int, int>(1, 'R', 1));
+ BSpec.Add(new Tuple<int, int, int>(1, 'L', 1));
+ BSpec.Add(new Tuple<int, int, int>(1, 'A', 1));
+ BSpec.Add(new Tuple<int, int, int>(0, 'P', 0));
+ BSpec.Add(new Tuple<int, int, int>(1, 'P', 1));
+
+ // initial: {0, 1}, final: {0, 1}
+ CSpec = new List<Tuple<int,int,int>>();
+ CSpec.Add(new Tuple<int, int, int>(0, 'B', 0));
+ CSpec.Add(new Tuple<int, int, int>(0, 'R', 0));
+ CSpec.Add(new Tuple<int, int, int>(0, 'Y', 0));
+ CSpec.Add(new Tuple<int, int, int>(0, 'B', 1));
+ CSpec.Add(new Tuple<int, int, int>(0, 'R', 1));
+ CSpec.Add(new Tuple<int, int, int>(0, 'L', 1));
+ CSpec.Add(new Tuple<int, int, int>(0, 'A', 1));
+ CSpec.Add(new Tuple<int, int, int>(1, 'B', 1));
+ CSpec.Add(new Tuple<int, int, int>(1, 'L', 1));
+ CSpec.Add(new Tuple<int, int, int>(1, 'Y', 0));
+ CSpec.Add(new Tuple<int, int, int>(0, 'P', 0));
+ CSpec.Add(new Tuple<int, int, int>(1, 'P', 1));
+ }
+
+ private void IsYieldTypeSafe()
+ {
+ List<Tuple<int, int, int>> implEdges = new List<Tuple<int, int, int>>();
+ foreach (Tuple<int, int> e in edgeLabels.Keys)
+ {
+ implEdges.Add(new Tuple<int, int, int>(e.Item1, edgeLabels[e], e.Item2));
+ }
+ //Console.WriteLine(PrintGraph(impl, implEdges, initialState, finalStates));
+ ASpecCheck(implEdges);
+ BSpecCheck(implEdges);
+ CSpecCheck(implEdges);
+ }
+
+ private void ASpecCheck(List<Tuple<int, int, int>> implEdges)
+ {
+ Dictionary<int, HashSet<int>> initialConstraints = new Dictionary<int, HashSet<int>>();
+ initialConstraints[initialState] = new HashSet<int>(new int[] { 0 });
+ foreach (var finalState in finalStates)
+ {
+ initialConstraints[finalState] = new HashSet<int>(new int[] { 1 });
+ }
+ SimulationRelation<int, int, int> x = new SimulationRelation<int, int, int>(implEdges, ASpec, initialConstraints);
+ Dictionary<int, HashSet<int>> simulationRelation = x.ComputeSimulationRelation();
+ if (simulationRelation[initialState].Count == 0)
+ {
+ civlTypeChecker.Error(impl, string.Format("Implementation {0} fails simulation check A at layer {1}. An action must be preceded by a yield.\n", impl.Name, currLayerNum));
+ }
+ }
+
+ private void BSpecCheck(List<Tuple<int, int, int>> implEdges)
+ {
+ Dictionary<int, HashSet<int>> initialConstraints = new Dictionary<int, HashSet<int>>();
+ initialConstraints[initialState] = new HashSet<int>(new int[] { 1 });
+ foreach (var finalState in finalStates)
+ {
+ initialConstraints[finalState] = new HashSet<int>(new int[] { 0 });
+ }
+ SimulationRelation<int, int, int> x = new SimulationRelation<int, int, int>(implEdges, BSpec, initialConstraints);
+ Dictionary<int, HashSet<int>> simulationRelation = x.ComputeSimulationRelation();
+ if (simulationRelation[initialState].Count == 0)
+ {
+ civlTypeChecker.Error(impl, string.Format("Implementation {0} fails simulation check B at layer {1}. An action must be succeeded by a yield.\n", impl.Name, currLayerNum));
+ }
+ }
+
+ private void CSpecCheck(List<Tuple<int, int, int>> implEdges)
+ {
+ Dictionary<int, HashSet<int>> initialConstraints = new Dictionary<int, HashSet<int>>();
+ foreach (Block block in loopHeaders)
+ {
+ if (!IsTerminatingLoopHeader(block))
+ {
+ initialConstraints[absyToNode[block]] = new HashSet<int>(new int[] { 0 });
+ }
+ }
+ SimulationRelation<int, int, int> x = new SimulationRelation<int, int, int>(implEdges, CSpec, initialConstraints);
+ Dictionary<int, HashSet<int>> simulationRelation = x.ComputeSimulationRelation();
+ if (simulationRelation[initialState].Count == 0)
+ {
+ civlTypeChecker.Error(impl, string.Format("Implementation {0} fails simulation check C at layer {1}. Transactions must be separated by a yield.\n", impl.Name, currLayerNum));
+ }
+ }
+
+ private bool IsTerminatingLoopHeader(Block block)
+ {
+ foreach (Cmd cmd in block.Cmds)
+ {
+ AssertCmd assertCmd = cmd as AssertCmd;
+ if (assertCmd != null && QKeyValue.FindBoolAttribute(assertCmd.Attributes, "terminates") && civlTypeChecker.absyToLayerNums[assertCmd].Contains(currLayerNum))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static void PerformYieldSafeCheck(CivlTypeChecker civlTypeChecker)
+ {
+ foreach (var impl in civlTypeChecker.program.Implementations)
+ {
+ if (!civlTypeChecker.procToActionInfo.ContainsKey(impl.Proc)) continue;
+ impl.PruneUnreachableBlocks();
+ Graph<Block> implGraph = Program.GraphFromImpl(impl);
+ implGraph.ComputeLoops();
+ int specLayerNum = civlTypeChecker.procToActionInfo[impl.Proc].createdAtLayerNum;
+ foreach (int layerNum in civlTypeChecker.AllLayerNums)
+ {
+ if (layerNum > specLayerNum) continue;
+ YieldTypeChecker executor = new YieldTypeChecker(civlTypeChecker, impl, layerNum, implGraph.Headers);
+ }
+ }
+ }
+
+ int stateCounter;
+ CivlTypeChecker civlTypeChecker;
+ Implementation impl;
+ int currLayerNum;
+ Dictionary<Absy, int> absyToNode;
+ Dictionary<int, Absy> nodeToAbsy;
+ int initialState;
+ HashSet<int> finalStates;
+ Dictionary<Tuple<int, int>, int> edgeLabels;
+ IEnumerable<Block> loopHeaders;
+
+ private YieldTypeChecker(CivlTypeChecker civlTypeChecker, Implementation impl, int currLayerNum, IEnumerable<Block> loopHeaders)
+ {
+ this.civlTypeChecker = civlTypeChecker;
+ this.impl = impl;
+ this.currLayerNum = currLayerNum;
+ this.loopHeaders = loopHeaders;
+ this.stateCounter = 0;
+ this.absyToNode = new Dictionary<Absy, int>();
+ this.initialState = 0;
+ this.finalStates = new HashSet<int>();
+ this.edgeLabels = new Dictionary<Tuple<int, int>, int>();
+
+ foreach (Block block in impl.Blocks)
+ {
+ absyToNode[block] = stateCounter;
+ stateCounter++;
+ foreach (Cmd cmd in block.Cmds)
+ {
+ absyToNode[cmd] = stateCounter;
+ stateCounter++;
+ }
+ absyToNode[block.TransferCmd] = stateCounter;
+ stateCounter++;
+ if (block.TransferCmd is ReturnCmd)
+ {
+ finalStates.Add(absyToNode[block.TransferCmd]);
+ }
+ }
+ foreach (Block block in impl.Blocks)
+ {
+ Absy blockEntry = block.Cmds.Count == 0 ? (Absy)block.TransferCmd : (Absy)block.Cmds[0];
+ edgeLabels[new Tuple<int, int>(absyToNode[block], absyToNode[blockEntry])] = 'P';
+
+ GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
+ if (gotoCmd == null) continue;
+ foreach (Block successor in gotoCmd.labelTargets)
+ {
+ edgeLabels[new Tuple<int, int>(absyToNode[gotoCmd], absyToNode[successor])] = 'P';
+ }
+ }
+
+ this.nodeToAbsy = new Dictionary<int, Absy>();
+ foreach (KeyValuePair<Absy, int> state in absyToNode)
+ {
+ this.nodeToAbsy[state.Value] = state.Key;
+ }
+
+ ComputeGraph();
+ IsYieldTypeSafe();
+ }
+
+ private void ComputeGraph()
+ {
+ foreach (Block block in impl.Blocks)
+ {
+ for (int i = 0; i < block.Cmds.Count; i++)
+ {
+ Cmd cmd = block.Cmds[i];
+ int curr = absyToNode[cmd];
+ int next = (i + 1 == block.Cmds.Count) ? absyToNode[block.TransferCmd] : absyToNode[block.Cmds[i + 1]];
+ Tuple<int, int> edge = new Tuple<int, int>(curr, next);
+ if (cmd is CallCmd)
+ {
+ CallCmd callCmd = cmd as CallCmd;
+ if (callCmd.IsAsync)
+ {
+ ActionInfo actionInfo = civlTypeChecker.procToActionInfo[callCmd.Proc];
+ if (currLayerNum <= actionInfo.createdAtLayerNum)
+ edgeLabels[edge] = 'L';
+ else
+ edgeLabels[edge] = 'B';
+ }
+ else if (!civlTypeChecker.procToActionInfo.ContainsKey(callCmd.Proc))
+ {
+ edgeLabels[edge] = 'P';
+ }
+ else
+ {
+ MoverType moverType;
+ ActionInfo actionInfo = civlTypeChecker.procToActionInfo[callCmd.Proc];
+ if (actionInfo.createdAtLayerNum >= currLayerNum)
+ {
+ moverType = MoverType.Top;
+ }
+ else
+ {
+ AtomicActionInfo atomicActionInfo = actionInfo as AtomicActionInfo;
+ if (atomicActionInfo == null)
+ moverType = MoverType.Both;
+ else
+ moverType = atomicActionInfo.moverType;
+ }
+ switch (moverType)
+ {
+ case MoverType.Atomic:
+ edgeLabels[edge] = 'A';
+ break;
+ case MoverType.Both:
+ edgeLabels[edge] = 'B';
+ break;
+ case MoverType.Left:
+ edgeLabels[edge] = 'L';
+ break;
+ case MoverType.Right:
+ edgeLabels[edge] = 'R';
+ break;
+ case MoverType.Top:
+ edgeLabels[edge] = 'Y';
+ break;
+ }
+ }
+ }
+ else if (cmd is ParCallCmd)
+ {
+ ParCallCmd parCallCmd = cmd as ParCallCmd;
+ bool isYield = false;
+ bool isRightMover = true;
+ bool isLeftMover = true;
+ foreach (CallCmd callCmd in parCallCmd.CallCmds)
+ {
+ if (civlTypeChecker.procToActionInfo[callCmd.Proc].createdAtLayerNum >= currLayerNum)
+ {
+ isYield = true;
+ }
+ }
+ if (isYield)
+ {
+ edgeLabels[edge] = 'Y';
+ }
+ else
+ {
+ int numAtomicActions = 0;
+ foreach (CallCmd callCmd in parCallCmd.CallCmds)
+ {
+ ActionInfo actionInfo = civlTypeChecker.procToActionInfo[callCmd.Proc];
+ isRightMover = isRightMover && actionInfo.IsRightMover;
+ isLeftMover = isLeftMover && actionInfo.IsLeftMover;
+ if (actionInfo is AtomicActionInfo)
+ {
+ numAtomicActions++;
+ }
+ }
+ if (isLeftMover && isRightMover)
+ {
+ edgeLabels[edge] = 'B';
+ }
+ else if (isLeftMover)
+ {
+ edgeLabels[edge] = 'L';
+ }
+ else if (isRightMover)
+ {
+ edgeLabels[edge] = 'R';
+ }
+ else
+ {
+ Debug.Assert(numAtomicActions == 1);
+ edgeLabels[edge] = 'A';
+ }
+ }
+ }
+ else if (cmd is YieldCmd)
+ {
+ edgeLabels[edge] = 'Y';
+ }
+ else
+ {
+ edgeLabels[edge] = 'P';
+ }
+ }
+ }
+ }
+
+ private static string PrintGraph(Implementation impl, List<Tuple<int, int, int>> edges, int initialState, HashSet<int> finalStates)
+ {
+ var s = new StringBuilder();
+ s.AppendLine("\nImplementation " + impl.Proc.Name + " digraph G {");
+ foreach (var e in edges)
+ {
+ string label = "P";
+ switch (e.Item2)
+ {
+ case 'P': label = "P"; break;
+ case 'Y': label = "Y"; break;
+ case 'B': label = "B"; break;
+ case 'R': label = "R"; break;
+ case 'L': label = "L"; break;
+ case 'A': label = "A"; break;
+ default: Debug.Assert(false); break;
+ }
+ s.AppendLine(" \"" + e.Item1.ToString() + "\" -- " + label + " --> " + " \"" + e.Item3.ToString() + "\";");
+ }
+ s.AppendLine("}");
+ s.AppendLine("Initial state: " + initialState);
+ s.Append("Final states: ");
+ bool first = true;
+ foreach (int finalState in finalStates)
+ {
+ s.Append((first ? "" : ", ") + finalState);
+ first = false;
+ }
+ s.AppendLine();
+ return s.ToString();
+ }
+ }
+}
diff --git a/Source/Core/Absy.cs b/Source/Core/Absy.cs
index a1a54024..8a8558bf 100644
--- a/Source/Core/Absy.cs
+++ b/Source/Core/Absy.cs
@@ -1,4456 +1,4529 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// BoogiePL - Absy.cs
-//---------------------------------------------------------------------------------------------
-namespace Microsoft.Boogie.AbstractInterpretation {
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
-
- public class CallSite {
- public readonly Implementation/*!*/ Impl;
- public readonly Block/*!*/ Block;
- public readonly int Statement; // invariant: Block[Statement] is CallCmd
- public readonly ProcedureSummaryEntry/*!*/ SummaryEntry;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Impl != null);
- Contract.Invariant(Block != null);
- Contract.Invariant(SummaryEntry != null);
- }
-
-
- public CallSite(Implementation impl, Block b, int stmt, ProcedureSummaryEntry summaryEntry) {
- Contract.Requires(summaryEntry != null);
- Contract.Requires(b != null);
- Contract.Requires(impl != null);
- this.Impl = impl;
- this.Block = b;
- this.Statement = stmt;
- this.SummaryEntry = summaryEntry;
- }
- }
-
- public class ProcedureSummaryEntry {
-
- private HashSet<CallSite>/*!*/ _returnPoints; // whenever OnExit changes, we start analysis again at all the ReturnPoints
-
- public HashSet<CallSite>/*!*/ ReturnPoints {
- get {
- Contract.Ensures(Contract.Result<HashSet<CallSite>>() != null);
- return this._returnPoints;
- }
- set {
- Contract.Requires(value != null);
- this._returnPoints = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._returnPoints != null);
- }
-
- public ProcedureSummaryEntry() {
- this._returnPoints = new HashSet<CallSite>();
- }
-
- } // class
-
- public class ProcedureSummary : ArrayList/*<ProcedureSummaryEntry>*/
- {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(
- !IsReadOnly && !IsFixedSize);
- }
-
- public new ProcedureSummaryEntry/*!*/ this[int i] {
- get {
- Contract.Requires(0 <= i && i < Count);
- Contract.Ensures(Contract.Result<ProcedureSummaryEntry>() != null);
- return cce.NonNull((ProcedureSummaryEntry/*!*/)base[i]);
- }
- }
-
- } // class
-} // namespace
-
-namespace Microsoft.Boogie {
- using System;
- using System.Linq;
- using System.Collections;
- using System.Diagnostics;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Diagnostics.Contracts;
- using Microsoft.Boogie.AbstractInterpretation;
- using Microsoft.Boogie.GraphUtil;
- using Set = GSet<object>;
-
- [ContractClass(typeof(AbsyContracts))]
- public abstract class Absy {
- private IToken/*!*/ _tok;
- private int uniqueId;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._tok != null);
- }
-
- public IToken tok { //Rename this property and "_tok" if possible
- get {
- Contract.Ensures(Contract.Result<IToken>() != null);
- return this._tok;
- }
- set {
- Contract.Requires(value != null);
- this._tok = value;
- }
- }
-
- public int Line {
- get {
- return tok != null ? tok.line : -1;
- }
- }
- public int Col {
- get {
- return tok != null ? tok.col : -1;
- }
- }
-
- public Absy(IToken tok) {
- Contract.Requires(tok != null);
- this._tok = tok;
- this.uniqueId = System.Threading.Interlocked.Increment(ref CurrentAbsyNodeId);
- }
-
- private static int CurrentAbsyNodeId = -1;
-
- // We uniquely number every AST node to make them
- // suitable for our implementation of functional maps.
- //
- public int UniqueId {
- get {
- return this.uniqueId;
- }
- }
-
- private const int indent_size = 2;
- protected static string Indent(int level) {
- return new string(' ', (indent_size * level));
- }
- [NeedsContracts]
- public abstract void Resolve(ResolutionContext/*!*/ rc);
-
- /// <summary>
- /// Requires the object to have been successfully resolved.
- /// </summary>
- /// <param name="tc"></param>
- [NeedsContracts]
- public abstract void Typecheck(TypecheckingContext/*!*/ tc);
- /// <summary>
- /// Intorduced this so the uniqueId is not the same on a cloned object.
- /// </summary>
- /// <param name="tc"></param>
- public virtual Absy Clone() {
- Contract.Ensures(Contract.Result<Absy>() != null);
- Absy/*!*/ result = cce.NonNull((Absy/*!*/)this.MemberwiseClone());
- result.uniqueId = System.Threading.Interlocked.Increment(ref CurrentAbsyNodeId); // BUGBUG??
-
- if (InternalNumberedMetadata != null) {
- // This should probably use the lock
- result.InternalNumberedMetadata = new List<Object>(this.InternalNumberedMetadata);
- }
-
- return result;
- }
-
- public virtual Absy StdDispatch(StandardVisitor visitor) {
- Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- System.Diagnostics.Debug.Fail("Unknown Absy node type: " + this.GetType());
- throw new System.NotImplementedException();
- }
-
- #region numberedmetadata
- // Implementation of Numbered Metadata
- // This allows any number of arbitrary objects to be
- // associated with an instance of an Absy at run time
- // in a type safe manner using an integer as a key.
-
- // We could use a dictionary but we use a List for look up speed
- // For this to work well the user needs to use small integers as
- // keys. The list is created lazily to minimise memory overhead.
- private volatile List<Object> InternalNumberedMetadata = null;
-
- // The lock exists to ensure that InternalNumberedMetadata is a singleton
- // for every instance of this class.
- // It is static to minimise the memory overhead (we don't want a lock per instance).
- private static readonly Object NumberedMetadataLock = new object();
-
- /// <summary>
- /// Gets the number of meta data objects associated with this instance
- /// </summary>
- /// <value>The numbered meta data count.</value>
- public int NumberedMetaDataCount
- {
- get { return InternalNumberedMetadata == null? 0: InternalNumberedMetadata.Count; }
- }
-
- /// <summary>
- /// Gets an IEnumerable over the numbered metadata associated
- /// with this instance.
- /// </summary>
- /// <value>
- /// The numbered meta data enumerable that looks like the Enumerable
- /// of a dictionary.
- /// </value>
- public IEnumerable<KeyValuePair<int, Object>> NumberedMetadata
- {
- get {
- if (InternalNumberedMetadata == null)
- return Enumerable.Empty<KeyValuePair<int,Object>>();
- else
- return InternalNumberedMetadata.Select((v, index) => new KeyValuePair<int, Object>(index, v));
- }
- }
-
- /// <summary>
- /// Gets the metatdata at specified index.
- /// ArgumentOutOfRange exception is raised if it is not available.
- /// InvalidCastExcpetion is raised if the metadata is available but the wrong type was requested.
- /// </summary>
- /// <returns>The stored metadata of type T</returns>
- /// <param name="index">The index of the metadata</param>
- /// <typeparam name="T">The type of the metadata object required</typeparam>
- public T GetMetadata<T>(int index) {
- // We aren't using NumberedMetadataLock for speed. Perhaps we should be using it?
- if (InternalNumberedMetadata == null)
- throw new ArgumentOutOfRangeException();
-
- if (InternalNumberedMetadata[index] is T)
- return (T) InternalNumberedMetadata[index];
- else if (InternalNumberedMetadata[index] == null) {
- throw new InvalidCastException("Numbered metadata " + index +
- " is null which cannot be casted to " + typeof(T));
- }
- else {
- throw new InvalidCastException("Numbered metadata " + index +
- " is of type " + InternalNumberedMetadata[index].GetType() +
- " rather than requested type " + typeof(T));
- }
- }
-
- private void InitialiseNumberedMetadata() {
- // Ensure InternalNumberedMetadata is a singleton
- if (InternalNumberedMetadata == null) {
- lock (NumberedMetadataLock) {
- if (InternalNumberedMetadata == null)
- InternalNumberedMetadata = new List<Object>();
- }
- }
- }
-
- /// <summary>
- /// Sets the metadata for this instace at a specified index.
- /// </summary>
- /// <param name="index">The index of the metadata</param>
- /// <param name="value">The value to set</param>
- /// <typeparam name="T">The type of value</typeparam>
- public void SetMetadata<T>(int index, T value) {
- InitialiseNumberedMetadata();
-
- if (index < 0)
- throw new IndexOutOfRangeException();
-
- lock (NumberedMetadataLock) {
- if (index < InternalNumberedMetadata.Count)
- InternalNumberedMetadata[index] = value;
- else {
- // Make sure expansion only happens once whilst we pad
- if (InternalNumberedMetadata.Capacity <= index) {
- // Use the next available power of 2
- InternalNumberedMetadata.Capacity = (int) Math.Pow(2, Math.Ceiling(Math.Log(index+1,2)));
- }
-
- // Pad with nulls
- while (InternalNumberedMetadata.Count < index)
- InternalNumberedMetadata.Add (null);
-
- InternalNumberedMetadata.Add(value);
- Debug.Assert(InternalNumberedMetadata.Count == (index + 1));
- }
- }
- }
-
- #endregion
-
- }
-
- [ContractClassFor(typeof(Absy))]
- public abstract class AbsyContracts : Absy {
- public override void Resolve(ResolutionContext rc) {
- Contract.Requires(rc != null);
- throw new NotImplementedException();
- }
- public AbsyContracts() :base(null){
-
- }
- public override void Typecheck(TypecheckingContext tc) {
- Contract.Requires(tc != null);
- throw new NotImplementedException();
- }
- }
-
- public interface IPotentialErrorNode<out TGet>
- {
- TGet ErrorData
- {
- get;
- }
- }
-
- public interface IPotentialErrorNode<out TGet, in TSet> : IPotentialErrorNode<TGet>
- {
- new TSet ErrorData
- {
- set;
- }
- }
-
- public class Program : Absy {
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(this.topLevelDeclarations));
- Contract.Invariant(cce.NonNullElements(this.globalVariablesCache, true));
- }
-
- public Program()
- : base(Token.NoToken) {
- this.topLevelDeclarations = new List<Declaration>();
- }
-
- public void Emit(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- stream.SetToken(this);
- this.topLevelDeclarations.Emit(stream);
- }
-
- public void ProcessDatatypeConstructors() {
- Dictionary<string, DatatypeConstructor> constructors = new Dictionary<string, DatatypeConstructor>();
- List<Declaration> prunedTopLevelDeclarations = new List<Declaration>();
- foreach (Declaration decl in TopLevelDeclarations) {
- Function func = decl as Function;
- if (func == null || !QKeyValue.FindBoolAttribute(decl.Attributes, "constructor")) {
- prunedTopLevelDeclarations.Add(decl);
- continue;
- }
- if (constructors.ContainsKey(func.Name)) continue;
- DatatypeConstructor constructor = new DatatypeConstructor(func);
- constructors.Add(func.Name, constructor);
- prunedTopLevelDeclarations.Add(constructor);
- }
- ClearTopLevelDeclarations();
- AddTopLevelDeclarations(prunedTopLevelDeclarations);
-
- foreach (DatatypeConstructor f in constructors.Values) {
- for (int i = 0; i < f.InParams.Count; i++) {
- DatatypeSelector selector = new DatatypeSelector(f, i);
- f.selectors.Add(selector);
- AddTopLevelDeclaration(selector);
- }
- DatatypeMembership membership = new DatatypeMembership(f);
- f.membership = membership;
- AddTopLevelDeclaration(membership);
- }
- }
-
- /// <summary>
- /// Returns the number of name resolution errors.
- /// </summary>
- /// <returns></returns>
- public int Resolve() {
- return Resolve((IErrorSink)null);
- }
-
- public int Resolve(IErrorSink errorSink) {
- ResolutionContext rc = new ResolutionContext(errorSink);
- Resolve(rc);
- return rc.ErrorCount;
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Helpers.ExtraTraceInformation("Starting resolution");
-
- foreach (var d in TopLevelDeclarations) {
- d.Register(rc);
- }
-
- ResolveTypes(rc);
-
- var prunedTopLevelDecls = new List<Declaration/*!*/>();
- foreach (var d in TopLevelDeclarations) {
- if (QKeyValue.FindBoolAttribute(d.Attributes, "ignore")) {
- continue;
- }
- // resolve all the non-type-declarations
- if (!(d is TypeCtorDecl || d is TypeSynonymDecl)) {
- int e = rc.ErrorCount;
- d.Resolve(rc);
- if (CommandLineOptions.Clo.OverlookBoogieTypeErrors && rc.ErrorCount != e && d is Implementation) {
- // ignore this implementation
- System.Console.WriteLine("Warning: Ignoring implementation {0} because of translation resolution errors", ((Implementation)d).Name);
- rc.ErrorCount = e;
- continue;
- }
- }
- prunedTopLevelDecls.Add(d);
- }
- ClearTopLevelDeclarations();
- AddTopLevelDeclarations(prunedTopLevelDecls);
-
- foreach (var v in Variables) {
- v.ResolveWhere(rc);
- }
- }
-
- private void ResolveTypes(ResolutionContext rc) {
- Contract.Requires(rc != null);
- // first resolve type constructors
- foreach (var d in TopLevelDeclarations.OfType<TypeCtorDecl>()) {
- if (!QKeyValue.FindBoolAttribute(d.Attributes, "ignore"))
- d.Resolve(rc);
- }
-
- // collect type synonym declarations
- List<TypeSynonymDecl/*!*/>/*!*/ synonymDecls = new List<TypeSynonymDecl/*!*/>();
- foreach (var d in TopLevelDeclarations.OfType<TypeSynonymDecl>()) {
- Contract.Assert(d != null);
- if (!QKeyValue.FindBoolAttribute(d.Attributes, "ignore"))
- synonymDecls.Add((TypeSynonymDecl)d);
- }
-
- // then resolve the type synonyms by a simple
- // fixed-point iteration
- TypeSynonymDecl.ResolveTypeSynonyms(synonymDecls, rc);
- }
-
- public int Typecheck() {
- return this.Typecheck((IErrorSink)null);
- }
-
- public int Typecheck(IErrorSink errorSink) {
- TypecheckingContext tc = new TypecheckingContext(errorSink);
- Typecheck(tc);
- return tc.ErrorCount;
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- Helpers.ExtraTraceInformation("Starting typechecking");
-
- int oldErrorCount = tc.ErrorCount;
- foreach (var d in TopLevelDeclarations) {
- d.Typecheck(tc);
- }
-
- if (oldErrorCount == tc.ErrorCount) {
- // check whether any type proxies have remained uninstantiated
- TypeAmbiguitySeeker/*!*/ seeker = new TypeAmbiguitySeeker(tc);
- foreach (var d in TopLevelDeclarations) {
- seeker.Visit(d);
- }
- }
- }
-
- public override Absy Clone()
- {
- var cloned = (Program)base.Clone();
- cloned.topLevelDeclarations = new List<Declaration>();
- cloned.AddTopLevelDeclarations(topLevelDeclarations);
- return cloned;
- }
-
- [Rep]
- private List<Declaration/*!*/>/*!*/ topLevelDeclarations;
-
- public IEnumerable<Declaration> TopLevelDeclarations
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Declaration>>()));
- return topLevelDeclarations.AsReadOnly();
- }
-
- set
- {
- Contract.Requires(value != null);
- // materialize the decls, in case there is any dependency
- // back on topLevelDeclarations
- var v = value.ToList();
- // remove null elements
- v.RemoveAll(d => (d == null));
- // now clear the decls
- ClearTopLevelDeclarations();
- // and add the values
- AddTopLevelDeclarations(v);
- }
- }
-
- public void AddTopLevelDeclaration(Declaration decl)
- {
- Contract.Requires(!TopLevelDeclarationsAreFrozen);
- Contract.Requires(decl != null);
-
- topLevelDeclarations.Add(decl);
- this.globalVariablesCache = null;
- }
-
- public void AddTopLevelDeclarations(IEnumerable<Declaration> decls)
- {
- Contract.Requires(!TopLevelDeclarationsAreFrozen);
- Contract.Requires(cce.NonNullElements(decls));
-
- topLevelDeclarations.AddRange(decls);
- this.globalVariablesCache = null;
- }
-
- public void RemoveTopLevelDeclaration(Declaration decl)
- {
- Contract.Requires(!TopLevelDeclarationsAreFrozen);
-
- topLevelDeclarations.Remove(decl);
- this.globalVariablesCache = null;
- }
-
- public void RemoveTopLevelDeclarations(Predicate<Declaration> match)
- {
- Contract.Requires(!TopLevelDeclarationsAreFrozen);
-
- topLevelDeclarations.RemoveAll(match);
- this.globalVariablesCache = null;
- }
-
- public void ClearTopLevelDeclarations()
- {
- Contract.Requires(!TopLevelDeclarationsAreFrozen);
-
- topLevelDeclarations.Clear();
- this.globalVariablesCache = null;
- }
-
- bool topLevelDeclarationsAreFrozen;
- public bool TopLevelDeclarationsAreFrozen { get { return topLevelDeclarationsAreFrozen; } }
- public void FreezeTopLevelDeclarations()
- {
- topLevelDeclarationsAreFrozen = true;
- }
-
- Dictionary<string, Implementation> implementationsCache;
- public IEnumerable<Implementation> Implementations
- {
- get
- {
- if (implementationsCache != null)
- {
- return implementationsCache.Values;
- }
- var result = TopLevelDeclarations.OfType<Implementation>();
- if (topLevelDeclarationsAreFrozen)
- {
- implementationsCache = result.ToDictionary(p => p.Id);
- }
- return result;
- }
- }
-
- public Implementation FindImplementation(string id)
- {
- Implementation result = null;
- if (implementationsCache != null && implementationsCache.TryGetValue(id, out result))
- {
- return result;
- }
- else
- {
- return Implementations.FirstOrDefault(i => i.Id == id);
- }
- }
-
- List<Axiom> axiomsCache;
- public IEnumerable<Axiom> Axioms
- {
- get
- {
- if (axiomsCache != null)
- {
- return axiomsCache;
- }
- var result = TopLevelDeclarations.OfType<Axiom>();
- if (topLevelDeclarationsAreFrozen)
- {
- axiomsCache = result.ToList();
- }
- return result;
- }
- }
-
- Dictionary<string, Procedure> proceduresCache;
- public IEnumerable<Procedure> Procedures
- {
- get
- {
- if (proceduresCache != null)
- {
- return proceduresCache.Values;
- }
- var result = TopLevelDeclarations.OfType<Procedure>();
- if (topLevelDeclarationsAreFrozen)
- {
- proceduresCache = result.ToDictionary(p => p.Name);
- }
- return result;
- }
- }
-
- public Procedure FindProcedure(string name)
- {
- Procedure result = null;
- if (proceduresCache != null && proceduresCache.TryGetValue(name, out result))
- {
- return result;
- }
- else
- {
- return Procedures.FirstOrDefault(p => p.Name == name);
- }
- }
-
- Dictionary<string, Function> functionsCache;
- public IEnumerable<Function> Functions
- {
- get
- {
- if (functionsCache != null)
- {
- return functionsCache.Values;
- }
- var result = TopLevelDeclarations.OfType<Function>();
- if (topLevelDeclarationsAreFrozen)
- {
- functionsCache = result.ToDictionary(f => f.Name);
- }
- return result;
- }
- }
-
- public Function FindFunction(string name)
- {
- Function result = null;
- if (functionsCache != null && functionsCache.TryGetValue(name, out result))
- {
- return result;
- }
- else
- {
- return Functions.FirstOrDefault(f => f.Name == name);
- }
- }
-
- public IEnumerable<Variable> Variables
- {
- get
- {
- return TopLevelDeclarations.OfType<Variable>();
- }
- }
-
- public IEnumerable<Constant> Constants
- {
- get
- {
- return TopLevelDeclarations.OfType<Constant>();
- }
- }
-
- private IEnumerable<GlobalVariable/*!*/> globalVariablesCache = null;
- public List<GlobalVariable/*!*/>/*!*/ GlobalVariables
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<GlobalVariable>>()));
-
- if (globalVariablesCache == null)
- globalVariablesCache = TopLevelDeclarations.OfType<GlobalVariable>();
-
- return new List<GlobalVariable>(globalVariablesCache);
- }
- }
-
- public IEnumerable<Block> Blocks()
- {
- return Implementations.Select(Item => Item.Blocks).SelectMany(Item => Item);
- }
-
- public void ComputeStronglyConnectedComponents() {
- foreach (var d in this.TopLevelDeclarations) {
- d.ComputeStronglyConnectedComponents();
- }
- }
-
- /// <summary>
- /// Reset the abstract stated computed before
- /// </summary>
- public void ResetAbstractInterpretationState() {
- foreach (var d in this.TopLevelDeclarations) {
- d.ResetAbstractInterpretationState();
- }
- }
-
- public void UnrollLoops(int n, bool uc) {
- Contract.Requires(0 <= n);
- foreach (var impl in Implementations) {
- if (impl.Blocks != null && impl.Blocks.Count > 0) {
- cce.BeginExpose(impl);
- {
- Block start = impl.Blocks[0];
- Contract.Assume(start != null);
- Contract.Assume(cce.IsConsistent(start));
- impl.Blocks = LoopUnroll.UnrollLoops(start, n, uc);
- impl.FreshenCaptureStates();
- }
- cce.EndExpose();
- }
- }
- }
-
- void CreateProceduresForLoops(Implementation impl, Graph<Block/*!*/>/*!*/ g,
- List<Implementation/*!*/>/*!*/ loopImpls,
- Dictionary<string, Dictionary<string, Block>> fullMap) {
- Contract.Requires(impl != null);
- Contract.Requires(cce.NonNullElements(loopImpls));
- // Enumerate the headers
- // for each header h:
- // create implementation p_h with
- // inputs = inputs, outputs, and locals of impl
- // outputs = outputs and locals of impl
- // locals = empty set
- // add call o := p_h(i) at the beginning of the header block
- // break the back edges whose target is h
- // Enumerate the headers again to create the bodies of p_h
- // for each header h:
- // compute the loop corresponding to h
- // make copies of all blocks in the loop for h
- // delete all target edges that do not go to a block in the loop
- // create a new entry block and a new return block
- // add edges from entry block to the loop header and the return block
- // add calls o := p_h(i) at the end of the blocks that are sources of back edges
- foreach (Block block in impl.Blocks)
- {
- AddToFullMap(fullMap, impl.Name, block.Label, block);
- }
-
- bool detLoopExtract = CommandLineOptions.Clo.DeterministicExtractLoops;
-
- Dictionary<Block/*!*/, List<Variable>/*!*/>/*!*/ loopHeaderToInputs = new Dictionary<Block/*!*/, List<Variable>/*!*/>();
- Dictionary<Block/*!*/, List<Variable>/*!*/>/*!*/ loopHeaderToOutputs = new Dictionary<Block/*!*/, List<Variable>/*!*/>();
- Dictionary<Block/*!*/, Dictionary<Variable, Expr>/*!*/>/*!*/ loopHeaderToSubstMap = new Dictionary<Block/*!*/, Dictionary<Variable, Expr>/*!*/>();
- Dictionary<Block/*!*/, LoopProcedure/*!*/>/*!*/ loopHeaderToLoopProc = new Dictionary<Block/*!*/, LoopProcedure/*!*/>();
- Dictionary<Block/*!*/, CallCmd/*!*/>/*!*/ loopHeaderToCallCmd1 = new Dictionary<Block/*!*/, CallCmd/*!*/>();
- Dictionary<Block, CallCmd> loopHeaderToCallCmd2 = new Dictionary<Block, CallCmd>();
- Dictionary<Block, AssignCmd> loopHeaderToAssignCmd = new Dictionary<Block, AssignCmd>();
-
- foreach (Block/*!*/ header in g.Headers) {
- Contract.Assert(header != null);
- Contract.Assert(header != null);
- List<Variable> inputs = new List<Variable>();
- List<Variable> outputs = new List<Variable>();
- List<Expr> callInputs1 = new List<Expr>();
- List<IdentifierExpr> callOutputs1 = new List<IdentifierExpr>();
- List<Expr> callInputs2 = new List<Expr>();
- List<IdentifierExpr> callOutputs2 = new List<IdentifierExpr>();
- List<AssignLhs> lhss = new List<AssignLhs>();
- List<Expr> rhss = new List<Expr>();
- Dictionary<Variable, Expr> substMap = new Dictionary<Variable, Expr>(); // Variable -> IdentifierExpr
-
- List<Variable>/*!*/ targets = new List<Variable>();
- HashSet<Variable> footprint = new HashSet<Variable>();
-
- foreach (Block/*!*/ b in g.BackEdgeNodes(header))
- {
- Contract.Assert(b != null);
- foreach (Block/*!*/ block in g.NaturalLoops(header, b))
- {
- Contract.Assert(block != null);
- foreach (Cmd/*!*/ cmd in block.Cmds)
- {
- Contract.Assert(cmd != null);
- cmd.AddAssignedVariables(targets);
-
- VariableCollector c = new VariableCollector();
- c.Visit(cmd);
- footprint.UnionWith(c.usedVars);
- }
- }
- }
-
- List<IdentifierExpr>/*!*/ globalMods = new List<IdentifierExpr>();
- Set targetSet = new Set();
- foreach (Variable/*!*/ v in targets)
- {
- Contract.Assert(v != null);
- if (targetSet.Contains(v))
- continue;
- targetSet.Add(v);
- if (v is GlobalVariable)
- globalMods.Add(new IdentifierExpr(Token.NoToken, v));
- }
-
- foreach (Variable v in impl.InParams) {
- Contract.Assert(v != null);
- if (!footprint.Contains(v)) continue;
- callInputs1.Add(new IdentifierExpr(Token.NoToken, v));
- Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "in_" + v.Name, v.TypedIdent.Type), true);
- inputs.Add(f);
- callInputs2.Add(new IdentifierExpr(Token.NoToken, f));
- substMap[v] = new IdentifierExpr(Token.NoToken, f);
- }
- foreach (Variable v in impl.OutParams) {
- Contract.Assert(v != null);
- if (!footprint.Contains(v)) continue;
- callInputs1.Add(new IdentifierExpr(Token.NoToken, v));
- Formal f1 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "in_" + v.Name, v.TypedIdent.Type), true);
- inputs.Add(f1);
- if (targetSet.Contains(v))
- {
- callOutputs1.Add(new IdentifierExpr(Token.NoToken, v));
- Formal f2 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "out_" + v.Name, v.TypedIdent.Type), false);
- outputs.Add(f2);
- callInputs2.Add(new IdentifierExpr(Token.NoToken, f2));
- callOutputs2.Add(new IdentifierExpr(Token.NoToken, f2));
- lhss.Add(new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, f2)));
- rhss.Add(new IdentifierExpr(Token.NoToken, f1));
- substMap[v] = new IdentifierExpr(Token.NoToken, f2);
- }
- else
- {
- callInputs2.Add(new IdentifierExpr(Token.NoToken, f1));
- substMap[v] = new IdentifierExpr(Token.NoToken, f1);
- }
- }
- foreach (Variable v in impl.LocVars) {
- Contract.Assert(v != null);
- if (!footprint.Contains(v)) continue;
- callInputs1.Add(new IdentifierExpr(Token.NoToken, v));
- Formal f1 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "in_" + v.Name, v.TypedIdent.Type), true);
- inputs.Add(f1);
- if (targetSet.Contains(v))
- {
- callOutputs1.Add(new IdentifierExpr(Token.NoToken, v));
- Formal f2 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "out_" + v.Name, v.TypedIdent.Type), false);
- outputs.Add(f2);
- callInputs2.Add(new IdentifierExpr(Token.NoToken, f2));
- callOutputs2.Add(new IdentifierExpr(Token.NoToken, f2));
- lhss.Add(new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, f2)));
- rhss.Add(new IdentifierExpr(Token.NoToken, f1));
- substMap[v] = new IdentifierExpr(Token.NoToken, f2);
- }
- else
- {
- callInputs2.Add(new IdentifierExpr(Token.NoToken, f1));
- substMap[v] = new IdentifierExpr(Token.NoToken, f1);
- }
- }
-
- loopHeaderToInputs[header] = inputs;
- loopHeaderToOutputs[header] = outputs;
- loopHeaderToSubstMap[header] = substMap;
- LoopProcedure loopProc = new LoopProcedure(impl, header, inputs, outputs, globalMods);
- loopHeaderToLoopProc[header] = loopProc;
-
- CallCmd callCmd1 = new CallCmd(Token.NoToken, loopProc.Name, callInputs1, callOutputs1);
- callCmd1.Proc = loopProc;
- loopHeaderToCallCmd1[header] = callCmd1;
-
- CallCmd callCmd2 = new CallCmd(Token.NoToken, loopProc.Name, callInputs2, callOutputs2);
- callCmd2.Proc = loopProc;
- loopHeaderToCallCmd2[header] = callCmd2;
-
- Debug.Assert(lhss.Count == rhss.Count);
- if (lhss.Count > 0)
- {
- AssignCmd assignCmd = new AssignCmd(Token.NoToken, lhss, rhss);
- loopHeaderToAssignCmd[header] = assignCmd;
- }
- }
-
- // Keep track of the new blocks created: maps a header node to the
- // header_last block that was created because of splitting header.
- Dictionary<Block, Block> newBlocksCreated = new Dictionary<Block, Block>();
-
- bool headRecursion = false; // testing an option to put recursive call before loop body
-
- IEnumerable<Block> sortedHeaders = g.SortHeadersByDominance();
- foreach (Block/*!*/ header in sortedHeaders)
- {
- Contract.Assert(header != null);
- LoopProcedure loopProc = loopHeaderToLoopProc[header];
- Dictionary<Block, Block> blockMap = new Dictionary<Block, Block>();
- HashSet<string> dummyBlocks = new HashSet<string>();
-
- CodeCopier codeCopier = new CodeCopier(loopHeaderToSubstMap[header]); // fix me
- List<Variable> inputs = loopHeaderToInputs[header];
- List<Variable> outputs = loopHeaderToOutputs[header];
- int si_unique_loc = 1; // Added by AL: to distinguish the back edges
- foreach (Block/*!*/ source in g.BackEdgeNodes(header)) {
- Contract.Assert(source != null);
- foreach (Block/*!*/ block in g.NaturalLoops(header, source)) {
- Contract.Assert(block != null);
- if (blockMap.ContainsKey(block))
- continue;
- Block newBlock = new Block();
- newBlock.Label = block.Label;
- if (headRecursion && block == header)
- {
- CallCmd callCmd = (CallCmd)(loopHeaderToCallCmd2[header]).Clone();
- addUniqueCallAttr(si_unique_loc, callCmd);
- si_unique_loc++;
- newBlock.Cmds.Add(callCmd); // add the recursive call at head of loop
- var rest = codeCopier.CopyCmdSeq(block.Cmds);
- newBlock.Cmds.AddRange(rest);
- }
- else
- newBlock.Cmds = codeCopier.CopyCmdSeq(block.Cmds);
- blockMap[block] = newBlock;
- if (newBlocksCreated.ContainsKey(block))
- {
- Block newBlock2 = new Block();
- newBlock2.Label = newBlocksCreated[block].Label;
- newBlock2.Cmds = codeCopier.CopyCmdSeq(newBlocksCreated[block].Cmds);
- blockMap[newBlocksCreated[block]] = newBlock2;
- }
- //for detLoopExtract, need the immediate successors even outside the loop
- if (detLoopExtract) {
- GotoCmd auxGotoCmd = block.TransferCmd as GotoCmd;
- Contract.Assert(auxGotoCmd != null && auxGotoCmd.labelNames != null &&
- auxGotoCmd.labelTargets != null && auxGotoCmd.labelTargets.Count >= 1);
- foreach(var bl in auxGotoCmd.labelTargets) {
- bool found = false;
- foreach(var n in g.NaturalLoops(header, source)) { //very expensive, can we do a contains?
- if (bl == n) { //clarify: is this the right comparison?
- found = true;
- break;
- }
- }
- if (!found) {
- Block auxNewBlock = new Block();
- auxNewBlock.Label = ((Block)bl).Label;
- auxNewBlock.Cmds = codeCopier.CopyCmdSeq(((Block)bl).Cmds);
- //add restoration code for such blocks
- if (loopHeaderToAssignCmd.ContainsKey(header))
- {
- AssignCmd assignCmd = loopHeaderToAssignCmd[header];
- auxNewBlock.Cmds.Add(assignCmd);
- }
- List<AssignLhs> lhsg = new List<AssignLhs>();
- List<IdentifierExpr>/*!*/ globalsMods = loopHeaderToLoopProc[header].Modifies;
- foreach (IdentifierExpr gl in globalsMods)
- lhsg.Add(new SimpleAssignLhs(Token.NoToken, gl));
- List<Expr> rhsg = new List<Expr>();
- foreach (IdentifierExpr gl in globalsMods)
- rhsg.Add(new OldExpr(Token.NoToken, gl));
- if (lhsg.Count != 0)
- {
- AssignCmd globalAssignCmd = new AssignCmd(Token.NoToken, lhsg, rhsg);
- auxNewBlock.Cmds.Add(globalAssignCmd);
- }
- blockMap[(Block)bl] = auxNewBlock;
- }
- }
-
- }
- }
-
- List<Cmd> cmdSeq;
- if (headRecursion)
- cmdSeq = new List<Cmd>();
- else
- {
- CallCmd callCmd = (CallCmd)(loopHeaderToCallCmd2[header]).Clone();
- addUniqueCallAttr(si_unique_loc, callCmd);
- si_unique_loc++;
- cmdSeq = new List<Cmd> { callCmd };
- }
-
- Block/*!*/ block1 = new Block(Token.NoToken, source.Label + "_dummy",
- new List<Cmd>{ new AssumeCmd(Token.NoToken, Expr.False) }, new ReturnCmd(Token.NoToken));
- Block/*!*/ block2 = new Block(Token.NoToken, block1.Label,
- cmdSeq, new ReturnCmd(Token.NoToken));
- impl.Blocks.Add(block1);
- dummyBlocks.Add(block1.Label);
-
- GotoCmd gotoCmd = source.TransferCmd as GotoCmd;
- Contract.Assert(gotoCmd != null && gotoCmd.labelNames != null && gotoCmd.labelTargets != null && gotoCmd.labelTargets.Count >= 1);
- List<String>/*!*/ newLabels = new List<String>();
- List<Block>/*!*/ newTargets = new List<Block>();
- for (int i = 0; i < gotoCmd.labelTargets.Count; i++) {
- if (gotoCmd.labelTargets[i] == header)
- continue;
- newTargets.Add(gotoCmd.labelTargets[i]);
- newLabels.Add(gotoCmd.labelNames[i]);
- }
- newTargets.Add(block1);
- newLabels.Add(block1.Label);
- gotoCmd.labelNames = newLabels;
- gotoCmd.labelTargets = newTargets;
- blockMap[block1] = block2;
- }
- List<Block/*!*/>/*!*/ blocks = new List<Block/*!*/>();
- Block exit = new Block(Token.NoToken, "exit", new List<Cmd>(), new ReturnCmd(Token.NoToken));
- GotoCmd cmd = new GotoCmd(Token.NoToken,
- new List<String> { cce.NonNull(blockMap[header]).Label, exit.Label },
- new List<Block> { blockMap[header], exit });
-
- if (detLoopExtract) //cutting the non-determinism
- cmd = new GotoCmd(Token.NoToken,
- new List<String> { cce.NonNull(blockMap[header]).Label },
- new List<Block> { blockMap[header] });
-
- Block entry;
- List<Cmd> initCmds = new List<Cmd>();
- if (loopHeaderToAssignCmd.ContainsKey(header)) {
- AssignCmd assignCmd = loopHeaderToAssignCmd[header];
- initCmds.Add(assignCmd);
- }
-
- entry = new Block(Token.NoToken, "entry", initCmds, cmd);
- blocks.Add(entry);
-
- foreach (Block/*!*/ block in blockMap.Keys) {
- Contract.Assert(block != null);
- Block/*!*/ newBlock = cce.NonNull(blockMap[block]);
- GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
- if (gotoCmd == null) {
- newBlock.TransferCmd = new ReturnCmd(Token.NoToken);
- } else {
- Contract.Assume(gotoCmd.labelNames != null && gotoCmd.labelTargets != null);
- List<String> newLabels = new List<String>();
- List<Block> newTargets = new List<Block>();
- for (int i = 0; i < gotoCmd.labelTargets.Count; i++) {
- Block target = gotoCmd.labelTargets[i];
- if (blockMap.ContainsKey(target)) {
- newLabels.Add(gotoCmd.labelNames[i]);
- newTargets.Add(blockMap[target]);
- }
- }
- if (newTargets.Count == 0) {
- if (!detLoopExtract)
- newBlock.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
- newBlock.TransferCmd = new ReturnCmd(Token.NoToken);
- } else {
- newBlock.TransferCmd = new GotoCmd(Token.NoToken, newLabels, newTargets);
- }
- }
- blocks.Add(newBlock);
- }
- blocks.Add(exit);
- Implementation loopImpl =
- new Implementation(Token.NoToken, loopProc.Name,
- new List<TypeVariable>(), inputs, outputs, new List<Variable>(), blocks);
- loopImpl.Proc = loopProc;
- loopImpls.Add(loopImpl);
-
- // Make a (shallow) copy of the header before splitting it
- Block origHeader = new Block(header.tok, header.Label, header.Cmds, header.TransferCmd);
-
- // Finally, add call to the loop in the containing procedure
- string lastIterBlockName = header.Label + "_last";
- Block lastIterBlock = new Block(Token.NoToken, lastIterBlockName, header.Cmds, header.TransferCmd);
- newBlocksCreated[header] = lastIterBlock;
- header.Cmds = new List<Cmd> { loopHeaderToCallCmd1[header] };
- header.TransferCmd = new GotoCmd(Token.NoToken, new List<String> { lastIterBlockName }, new List<Block> { lastIterBlock });
- impl.Blocks.Add(lastIterBlock);
- blockMap[origHeader] = blockMap[header];
- blockMap.Remove(header);
-
- Contract.Assert(fullMap[impl.Name][header.Label] == header);
- fullMap[impl.Name][header.Label] = origHeader;
-
- foreach (Block block in blockMap.Keys)
- {
- // Don't add dummy blocks to the map
- if (dummyBlocks.Contains(blockMap[block].Label)) continue;
-
- // Following two statements are for nested loops: compose map
- if (!fullMap[impl.Name].ContainsKey(block.Label)) continue;
- var target = fullMap[impl.Name][block.Label];
-
- AddToFullMap(fullMap, loopProc.Name, blockMap[block].Label, target);
- }
-
- fullMap[impl.Name].Remove(header.Label);
- fullMap[impl.Name][lastIterBlockName] = origHeader;
- }
- }
-
- private void addUniqueCallAttr(int val, CallCmd cmd)
- {
- var a = new List<object>();
- a.Add(new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(val)));
-
- cmd.Attributes = new QKeyValue(Token.NoToken, "si_unique_call", a, cmd.Attributes);
- }
-
- private void AddToFullMap(Dictionary<string, Dictionary<string, Block>> fullMap, string procName, string blockName, Block block)
- {
- if (!fullMap.ContainsKey(procName))
- fullMap[procName] = new Dictionary<string, Block>();
- fullMap[procName][blockName] = block;
- }
-
- public static Graph<Implementation> BuildCallGraph(Program program) {
- Graph<Implementation> callGraph = new Graph<Implementation>();
- Dictionary<Procedure, HashSet<Implementation>> procToImpls = new Dictionary<Procedure, HashSet<Implementation>>();
- foreach (var proc in program.Procedures) {
- procToImpls[proc] = new HashSet<Implementation>();
- }
- foreach (var impl in program.Implementations) {
- if (impl.SkipVerification) continue;
- callGraph.AddSource(impl);
- procToImpls[impl.Proc].Add(impl);
- }
- foreach (var impl in program.Implementations) {
- if (impl.SkipVerification) continue;
- foreach (Block b in impl.Blocks) {
- foreach (Cmd c in b.Cmds) {
- CallCmd cc = c as CallCmd;
- if (cc == null) continue;
- foreach (Implementation callee in procToImpls[cc.Proc]) {
- callGraph.AddEdge(impl, callee);
- }
- }
- }
- }
- return callGraph;
- }
-
- public static Graph<Block/*!*/>/*!*/ GraphFromImpl(Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<Graph<Block>>().Nodes));
- Contract.Ensures(Contract.Result<Graph<Block>>() != null);
-
- Graph<Block/*!*/> g = new Graph<Block/*!*/>();
- g.AddSource(impl.Blocks[0]); // there is always at least one node in the graph
-
- foreach (Block b in impl.Blocks) {
- Contract.Assert(b != null);
- GotoCmd gtc = b.TransferCmd as GotoCmd;
- if (gtc != null) {
- foreach (Block/*!*/ dest in cce.NonNull(gtc.labelTargets)) {
- Contract.Assert(dest != null);
- g.AddEdge(b, dest);
- }
- }
- }
- return g;
- }
-
- public class IrreducibleLoopException : Exception {}
-
- public Graph<Block> ProcessLoops(Implementation impl) {
- while (true) {
- impl.PruneUnreachableBlocks();
- impl.ComputePredecessorsForBlocks();
- Graph<Block/*!*/>/*!*/ g = GraphFromImpl(impl);
- g.ComputeLoops();
- if (g.Reducible) {
- return g;
- }
- throw new IrreducibleLoopException();
-#if USED_CODE
- System.Diagnostics.Debug.Assert(g.SplitCandidates.Count > 0);
- Block splitCandidate = null;
- foreach (Block b in g.SplitCandidates) {
- if (b.Predecessors.Length > 1) {
- splitCandidate = b;
- break;
- }
- }
- System.Diagnostics.Debug.Assert(splitCandidate != null);
- int count = 0;
- foreach (Block b in splitCandidate.Predecessors) {
- GotoCmd gotoCmd = (GotoCmd)b.TransferCmd;
- gotoCmd.labelNames.Remove(splitCandidate.Label);
- gotoCmd.labelTargets.Remove(splitCandidate);
-
- CodeCopier codeCopier = new CodeCopier(new Hashtable(), new Hashtable());
- List<Cmd> newCmdSeq = codeCopier.CopyCmdSeq(splitCandidate.Cmds);
- TransferCmd newTransferCmd;
- GotoCmd splitGotoCmd = splitCandidate.TransferCmd as GotoCmd;
- if (splitGotoCmd == null) {
- newTransferCmd = new ReturnCmd(splitCandidate.tok);
- }
- else {
- List<String> newLabelNames = new List<String>();
- newLabelNames.AddRange(splitGotoCmd.labelNames);
- List<Block> newLabelTargets = new List<Block>();
- newLabelTargets.AddRange(splitGotoCmd.labelTargets);
- newTransferCmd = new GotoCmd(splitCandidate.tok, newLabelNames, newLabelTargets);
- }
- Block copy = new Block(splitCandidate.tok, splitCandidate.Label + count++, newCmdSeq, newTransferCmd);
-
- impl.Blocks.Add(copy);
- gotoCmd.AddTarget(copy);
- }
-#endif
- }
- }
-
- public Dictionary<string, Dictionary<string, Block>> ExtractLoops()
- {
- HashSet<string> procsWithIrreducibleLoops = null;
- return ExtractLoops(out procsWithIrreducibleLoops);
- }
-
- public Dictionary<string, Dictionary<string, Block>> ExtractLoops(out HashSet<string> procsWithIrreducibleLoops)
- {
- procsWithIrreducibleLoops = new HashSet<string>();
- List<Implementation/*!*/>/*!*/ loopImpls = new List<Implementation/*!*/>();
- Dictionary<string, Dictionary<string, Block>> fullMap = new Dictionary<string, Dictionary<string, Block>>();
- foreach (var impl in this.Implementations)
- {
- if (impl.Blocks != null && impl.Blocks.Count > 0)
- {
- try
- {
- Graph<Block> g = ProcessLoops(impl);
- CreateProceduresForLoops(impl, g, loopImpls, fullMap);
- }
- catch (IrreducibleLoopException)
- {
- System.Diagnostics.Debug.Assert(!fullMap.ContainsKey(impl.Name));
- fullMap[impl.Name] = null;
- procsWithIrreducibleLoops.Add(impl.Name);
-
- if (CommandLineOptions.Clo.ExtractLoopsUnrollIrreducible)
- {
- // statically unroll loops in this procedure
-
- // First, build a map of the current blocks
- var origBlocks = new Dictionary<string, Block>();
- foreach (var blk in impl.Blocks) origBlocks.Add(blk.Label, blk);
-
- // unroll
- Block start = impl.Blocks[0];
- impl.Blocks = LoopUnroll.UnrollLoops(start, CommandLineOptions.Clo.RecursionBound, false);
-
- // Now construct the "map back" information
- // Resulting block label -> original block
- var blockMap = new Dictionary<string, Block>();
- foreach (var blk in impl.Blocks)
- {
- var sl = LoopUnroll.sanitizeLabel(blk.Label);
- if (sl == blk.Label) blockMap.Add(blk.Label, blk);
- else
- {
- Contract.Assert(origBlocks.ContainsKey(sl));
- blockMap.Add(blk.Label, origBlocks[sl]);
- }
- }
- fullMap[impl.Name] = blockMap;
- }
- }
- }
- }
- foreach (Implementation/*!*/ loopImpl in loopImpls)
- {
- Contract.Assert(loopImpl != null);
- AddTopLevelDeclaration(loopImpl);
- AddTopLevelDeclaration(loopImpl.Proc);
- }
- return fullMap;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitProgram(this);
- }
-
- int extractedFunctionCount;
- public string FreshExtractedFunctionName()
- {
- var c = System.Threading.Interlocked.Increment(ref extractedFunctionCount);
- return string.Format("##extracted_function##{0}", c);
- }
-
- private int invariantGenerationCounter = 0;
-
- public Constant MakeExistentialBoolean() {
- Constant ExistentialBooleanConstant = new Constant(Token.NoToken, new TypedIdent(tok, "_b" + invariantGenerationCounter, Microsoft.Boogie.Type.Bool), false);
- invariantGenerationCounter++;
- ExistentialBooleanConstant.AddAttribute("existential", new object[] { Expr.True });
- AddTopLevelDeclaration(ExistentialBooleanConstant);
- return ExistentialBooleanConstant;
- }
-
- public PredicateCmd CreateCandidateInvariant(Expr e, string tag = null) {
- Constant ExistentialBooleanConstant = MakeExistentialBoolean();
- IdentifierExpr ExistentialBoolean = new IdentifierExpr(Token.NoToken, ExistentialBooleanConstant);
- PredicateCmd invariant = new AssertCmd(Token.NoToken, Expr.Imp(ExistentialBoolean, e));
- if (tag != null)
- invariant.Attributes = new QKeyValue(Token.NoToken, "tag", new List<object>(new object[] { tag }), null);
- return invariant;
- }
- }
-
- //---------------------------------------------------------------------
- // Declarations
-
- [ContractClass(typeof(DeclarationContracts))]
- public abstract class Declaration : Absy {
- public QKeyValue Attributes;
-
- public Declaration(IToken tok)
- : base(tok) {
- Contract.Requires(tok != null);
- }
-
- protected void EmitAttributes(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- kv.Emit(stream);
- stream.Write(" ");
- }
- }
-
- protected void ResolveAttributes(ResolutionContext rc) {
- Contract.Requires(rc != null);
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- kv.Resolve(rc);
- }
- }
-
- protected void TypecheckAttributes(TypecheckingContext rc) {
- Contract.Requires(rc != null);
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- kv.Typecheck(rc);
- }
- }
-
- /// <summary>
- /// If the declaration has an attribute {:name} or {:name true}, then set "result" to "true" and return "true".
- /// If the declaration has an attribute {:name false}, then set "result" to "false" and return "true".
- /// Otherwise, return "false" and leave "result" unchanged (which gives the caller an easy way to indicate
- /// a default value if the attribute is not mentioned).
- /// If there is more than one attribute called :name, then the last attribute rules.
- /// </summary>
- public bool CheckBooleanAttribute(string name, ref bool result) {
- Contract.Requires(name != null);
- var kv = FindAttribute(name);
- if (kv != null) {
- if (kv.Params.Count == 0) {
- result = true;
- return true;
- } else if (kv.Params.Count == 1) {
- var lit = kv.Params[0] as LiteralExpr;
- if (lit != null && lit.isBool) {
- result = lit.asBool;
- return true;
- }
- }
- }
- return false;
- }
-
- /// <summary>
- /// Find and return the last occurrence of an attribute with the name "name", if any. If none, return null.
- /// </summary>
- public QKeyValue FindAttribute(string name) {
- Contract.Requires(name != null);
- QKeyValue res = null;
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- if (kv.Key == name) {
- res = kv;
- }
- }
- return res;
- }
-
- // Look for {:name expr} in list of attributes.
- public Expr FindExprAttribute(string name) {
- Contract.Requires(name != null);
- Expr res = null;
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- if (kv.Key == name) {
- if (kv.Params.Count == 1 && kv.Params[0] is Expr) {
- res = (Expr)kv.Params[0];
- }
- }
- }
- return res;
- }
-
- // Look for {:name string} in list of attributes.
- public string FindStringAttribute(string name) {
- Contract.Requires(name != null);
- return QKeyValue.FindStringAttribute(this.Attributes, name);
- }
-
- // Look for {:name N} or {:name N} in list of attributes. Return result in 'result'
- // (which is not touched if there is no attribute specified).
- //
- // Returns false is there was an error processing the flag, true otherwise.
- public bool CheckIntAttribute(string name, ref int result) {
- Contract.Requires(name != null);
- Expr expr = FindExprAttribute(name);
- if (expr != null) {
- if (expr is LiteralExpr && ((LiteralExpr)expr).isBigNum) {
- result = ((LiteralExpr)expr).asBigNum.ToInt;
- } else {
- return false;
- }
- }
- return true;
- }
-
- public void AddAttribute(string name, params object[] vals) {
- Contract.Requires(name != null);
- QKeyValue kv;
- for (kv = this.Attributes; kv != null; kv = kv.Next) {
- if (kv.Key == name) {
- kv.AddParams(vals);
- break;
- }
- }
- if (kv == null) {
- Attributes = new QKeyValue(tok, name, new List<object/*!*/>(vals), Attributes);
- }
- }
-
- public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
- public abstract void Register(ResolutionContext/*!*/ rc);
-
- /// <summary>
- /// Compute the strongly connected components of the declaration.
- /// By default, it does nothing
- /// </summary>
- public virtual void ComputeStronglyConnectedComponents() { /* Does nothing */
- }
-
- /// <summary>
- /// Reset the abstract stated computed before
- /// </summary>
- public virtual void ResetAbstractInterpretationState() { /* does nothing */
- }
- }
- [ContractClassFor(typeof(Declaration))]
- public abstract class DeclarationContracts : Declaration {
- public DeclarationContracts() :base(null){
- }
- public override void Register(ResolutionContext rc) {
- Contract.Requires(rc != null);
- throw new NotImplementedException();
- }
- public override void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- throw new NotImplementedException();
- }
- }
-
- public class Axiom : Declaration {
- private Expr/*!*/ expression;
-
- public Expr Expr {
- get {
- Contract.Ensures(Contract.Result<Expr>() != null);
- return this.expression;
- }
- set {
- Contract.Requires(value != null);
- this.expression = value;
- }
- }
-
- [ContractInvariantMethod]
- void ExprInvariant() {
- Contract.Invariant(this.expression != null);
- }
-
- public string Comment;
-
- public Axiom(IToken tok, Expr expr)
- : this(tok, expr, null) {
- Contract.Requires(expr != null);
- Contract.Requires(tok != null);
- }
-
- public Axiom(IToken/*!*/ tok, Expr/*!*/ expr, string comment)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- this.expression = expr;
- Comment = comment;
- }
-
- public Axiom(IToken tok, Expr expr, string comment, QKeyValue kv)
- : this(tok, expr, comment) {
- Contract.Requires(expr != null);
- Contract.Requires(tok != null);
- this.Attributes = kv;
- }
-
- public bool DependenciesCollected { get; set; }
-
- ISet<Function> functionDependencies;
-
- public ISet<Function> FunctionDependencies
- {
- get { return functionDependencies; }
- }
-
- public void AddFunctionDependency(Function function)
- {
- Contract.Requires(function != null);
-
- if (functionDependencies == null)
- {
- functionDependencies = new HashSet<Function>();
- }
- functionDependencies.Add(function);
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- if (Comment != null) {
- stream.WriteLine(this, level, "// " + Comment);
- }
- stream.Write(this, level, "axiom ");
- EmitAttributes(stream);
- this.Expr.Emit(stream);
- stream.WriteLine(";");
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddAxiom(this);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- ResolveAttributes(rc);
- rc.StateMode = ResolutionContext.State.StateLess;
- Expr.Resolve(rc);
- rc.StateMode = ResolutionContext.State.Single;
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- TypecheckAttributes(tc);
- Expr.Typecheck(tc);
- Contract.Assert(Expr.Type != null); // follows from postcondition of Expr.Typecheck
- if (!Expr.Type.Unify(Type.Bool)) {
- tc.Error(this, "axioms must be of type bool");
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitAxiom(this);
- }
- }
-
- public abstract class NamedDeclaration : Declaration {
- private string/*!*/ name;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(name != null);
- }
-
- public string/*!*/ Name {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- return this.name;
- }
- set {
- Contract.Requires(value != null);
- this.name = value;
- }
- }
-
- public int TimeLimit
- {
- get
- {
- int tl = CommandLineOptions.Clo.ProverKillTime;
- CheckIntAttribute("timeLimit", ref tl);
- return tl;
- }
- }
-
- public NamedDeclaration(IToken/*!*/ tok, string/*!*/ name)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- this.name = name;
- }
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return cce.NonNull(Name);
- }
- }
-
- public class TypeCtorDecl : NamedDeclaration {
- public readonly int Arity;
-
- public TypeCtorDecl(IToken/*!*/ tok, string/*!*/ name, int Arity)
- : base(tok, name) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- this.Arity = Arity;
- }
- public TypeCtorDecl(IToken/*!*/ tok, string/*!*/ name, int Arity, QKeyValue kv)
- : base(tok, name) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- this.Arity = Arity;
- this.Attributes = kv;
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "type ");
- EmitAttributes(stream);
- stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(Name));
- for (int i = 0; i < Arity; ++i)
- stream.Write(" _");
- stream.WriteLine(";");
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddType(this);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- ResolveAttributes(rc);
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- TypecheckAttributes(tc);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitTypeCtorDecl(this);
- }
- }
-
- public class TypeSynonymDecl : NamedDeclaration {
- private List<TypeVariable>/*!*/ typeParameters;
-
- public List<TypeVariable> TypeParameters {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
- return this.typeParameters;
- }
- set {
- Contract.Requires(value != null);
- this.typeParameters = value;
- }
- }
-
- private Type/*!*/ body;
-
- public Type Body {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.body;
- }
- set {
- Contract.Requires(value != null);
- this.body = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this.body != null);
- Contract.Invariant(this.typeParameters != null);
- }
-
- public TypeSynonymDecl(IToken/*!*/ tok, string/*!*/ name,
- List<TypeVariable>/*!*/ typeParams, Type/*!*/ body)
- : base(tok, name) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(body != null);
- this.typeParameters = typeParams;
- this.body = body;
- }
- public TypeSynonymDecl(IToken/*!*/ tok, string/*!*/ name,
- List<TypeVariable>/*!*/ typeParams, Type/*!*/ body, QKeyValue kv)
- : base(tok, name) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(body != null);
- this.typeParameters = typeParams;
- this.body = body;
- this.Attributes = kv;
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "type ");
- EmitAttributes(stream);
- stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(Name));
- if (TypeParameters.Count > 0)
- stream.Write(" ");
- TypeParameters.Emit(stream, " ");
- stream.Write(" = ");
- Body.Emit(stream);
- stream.WriteLine(";");
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddType(this);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- ResolveAttributes(rc);
-
- int previousState = rc.TypeBinderState;
- try {
- foreach (TypeVariable/*!*/ v in TypeParameters) {
- Contract.Assert(v != null);
- rc.AddTypeBinder(v);
- }
- Body = Body.ResolveType(rc);
- } finally {
- rc.TypeBinderState = previousState;
- }
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- TypecheckAttributes(tc);
- }
-
- public static void ResolveTypeSynonyms(List<TypeSynonymDecl/*!*/>/*!*/ synonymDecls, ResolutionContext/*!*/ rc) {
- Contract.Requires(cce.NonNullElements(synonymDecls));
- Contract.Requires(rc != null);
- // then discover all dependencies between type synonyms
- IDictionary<TypeSynonymDecl/*!*/, List<TypeSynonymDecl/*!*/>/*!*/>/*!*/ deps =
- new Dictionary<TypeSynonymDecl/*!*/, List<TypeSynonymDecl/*!*/>/*!*/>();
- foreach (TypeSynonymDecl/*!*/ decl in synonymDecls) {
- Contract.Assert(decl != null);
- List<TypeSynonymDecl/*!*/>/*!*/ declDeps = new List<TypeSynonymDecl/*!*/>();
- FindDependencies(decl.Body, declDeps, rc);
- deps.Add(decl, declDeps);
- }
-
- List<TypeSynonymDecl/*!*/>/*!*/ resolved = new List<TypeSynonymDecl/*!*/>();
-
- int unresolved = synonymDecls.Count - resolved.Count;
- while (unresolved > 0) {
- foreach (TypeSynonymDecl/*!*/ decl in synonymDecls) {
- Contract.Assert(decl != null);
- if (!resolved.Contains(decl) &&
- deps[decl].All(d => resolved.Contains(d))) {
- decl.Resolve(rc);
- resolved.Add(decl);
- }
- }
-
- int newUnresolved = synonymDecls.Count - resolved.Count;
- if (newUnresolved < unresolved) {
- // we are making progress
- unresolved = newUnresolved;
- } else {
- // there have to be cycles in the definitions
- foreach (TypeSynonymDecl/*!*/ decl in synonymDecls) {
- Contract.Assert(decl != null);
- if (!resolved.Contains(decl)) {
- rc.Error(decl,
- "type synonym could not be resolved because of cycles: {0}" +
- " (replacing body with \"bool\" to continue resolving)",
- decl.Name);
-
- // we simply replace the bodies of all remaining type
- // synonyms with "bool" so that resolution can continue
- decl.Body = Type.Bool;
- decl.Resolve(rc);
- }
- }
-
- unresolved = 0;
- }
- }
- }
-
- // determine a list of all type synonyms that occur in "type"
- private static void FindDependencies(Type/*!*/ type, List<TypeSynonymDecl/*!*/>/*!*/ deps, ResolutionContext/*!*/ rc) {
- Contract.Requires(type != null);
- Contract.Requires(cce.NonNullElements(deps));
- Contract.Requires(rc != null);
- if (type.IsVariable || type.IsBasic) {
- // nothing
- } else if (type.IsUnresolved) {
- UnresolvedTypeIdentifier/*!*/ unresType = type.AsUnresolved;
- Contract.Assert(unresType != null);
- TypeSynonymDecl dep = rc.LookUpTypeSynonym(unresType.Name);
- if (dep != null)
- deps.Add(dep);
- foreach (Type/*!*/ subtype in unresType.Arguments) {
- Contract.Assert(subtype != null);
- FindDependencies(subtype, deps, rc);
- }
- } else if (type.IsMap) {
- MapType/*!*/ mapType = type.AsMap;
- Contract.Assert(mapType != null);
- foreach (Type/*!*/ subtype in mapType.Arguments) {
- Contract.Assert(subtype != null);
- FindDependencies(subtype, deps, rc);
- }
- FindDependencies(mapType.Result, deps, rc);
- } else if (type.IsCtor) {
- // this can happen because we allow types to be resolved multiple times
- CtorType/*!*/ ctorType = type.AsCtor;
- Contract.Assert(ctorType != null);
- foreach (Type/*!*/ subtype in ctorType.Arguments) {
- Contract.Assert(subtype != null);
- FindDependencies(subtype, deps, rc);
- }
- } else {
- System.Diagnostics.Debug.Fail("Did not expect this type during resolution: "
- + type);
- }
- }
-
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitTypeSynonymDecl(this);
- }
- }
-
- public abstract class Variable : NamedDeclaration {
- private TypedIdent/*!*/ typedIdent;
-
- public TypedIdent TypedIdent {
- get {
- Contract.Ensures(Contract.Result<TypedIdent>() != null);
- return this.typedIdent;
- }
- set {
- Contract.Requires(value != null);
- this.typedIdent = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this.typedIdent != null);
- }
-
- public Variable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent)
- : base(tok, typedIdent.Name) {
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent != null);
- this.typedIdent = typedIdent;
- }
-
- public Variable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent, QKeyValue kv)
- : base(tok, typedIdent.Name) {
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent != null);
- this.typedIdent = typedIdent;
- this.Attributes = kv;
- }
-
- public abstract bool IsMutable {
- get;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "var ");
- EmitVitals(stream, level, true);
- stream.WriteLine(";");
- }
- public void EmitVitals(TokenTextWriter stream, int level, bool emitAttributes) {
- Contract.Requires(stream != null);
- if (emitAttributes) {
- EmitAttributes(stream);
- }
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds && this.TypedIdent.HasName) {
- stream.Write("h{0}^^", this.GetHashCode()); // the idea is that this will prepend the name printed by TypedIdent.Emit
- }
- this.TypedIdent.Emit(stream);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- this.TypedIdent.Resolve(rc);
- }
- public void ResolveWhere(ResolutionContext rc) {
- Contract.Requires(rc != null);
- if (QKeyValue.FindBoolAttribute(Attributes, "assumption") && this.TypedIdent.WhereExpr != null)
- {
- rc.Error(tok, "assumption variable may not be declared with a where clause");
- }
- if (this.TypedIdent.WhereExpr != null) {
- this.TypedIdent.WhereExpr.Resolve(rc);
- }
- ResolveAttributes(rc);
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- TypecheckAttributes(tc);
- this.TypedIdent.Typecheck(tc);
- if (QKeyValue.FindBoolAttribute(Attributes, "assumption") && !this.TypedIdent.Type.IsBool)
- {
- tc.Error(tok, "assumption variable must be of type 'bool'");
- }
- }
- }
-
- public class VariableComparer : IComparer {
- public int Compare(object a, object b) {
- Variable A = a as Variable;
- Variable B = b as Variable;
- if (A == null || B == null) {
- throw new ArgumentException("VariableComparer works only on objects of type Variable");
- }
- return cce.NonNull(A.Name).CompareTo(B.Name);
- }
- }
-
- // class to specify the <:-parents of the values of constants
- public class ConstantParent {
- public readonly IdentifierExpr/*!*/ Parent;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Parent != null);
- }
-
- // if true, the sub-dag underneath this constant-parent edge is
- // disjoint from all other unique sub-dags
- public readonly bool Unique;
-
- public ConstantParent(IdentifierExpr parent, bool unique) {
- Contract.Requires(parent != null);
- Parent = parent;
- Unique = unique;
- }
- }
-
- public class Constant : Variable {
- // when true, the value of this constant is meant to be distinct
- // from all other constants.
- public readonly bool Unique;
-
- // the <:-parents of the value of this constant. If the field is
- // null, no information about the parents is provided, which means
- // that the parental situation is unconstrained.
- public readonly ReadOnlyCollection<ConstantParent/*!*/> Parents;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(Parents, true));
- }
-
- // if true, it is assumed that the immediate <:-children of the
- // value of this constant are completely specified
- public readonly bool ChildrenComplete;
-
- public Constant(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent)
- : base(tok, typedIdent) {
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent != null);
- Contract.Requires(typedIdent.Name != null && (!typedIdent.HasName || typedIdent.Name.Length > 0));
- Contract.Requires(typedIdent.WhereExpr == null);
- this.Unique = true;
- this.Parents = null;
- this.ChildrenComplete = false;
- }
- public Constant(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent, bool unique)
- : base(tok, typedIdent) {
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent != null);
- Contract.Requires(typedIdent.Name != null && typedIdent.Name.Length > 0);
- Contract.Requires(typedIdent.WhereExpr == null);
- this.Unique = unique;
- this.Parents = null;
- this.ChildrenComplete = false;
- }
- public Constant(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent,
- bool unique,
- IEnumerable<ConstantParent/*!*/> parents, bool childrenComplete,
- QKeyValue kv)
- : base(tok, typedIdent, kv) {
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent != null);
- Contract.Requires(cce.NonNullElements(parents, true));
- Contract.Requires(typedIdent.Name != null && typedIdent.Name.Length > 0);
- Contract.Requires(typedIdent.WhereExpr == null);
- this.Unique = unique;
- this.Parents = parents == null ? null : new ReadOnlyCollection<ConstantParent>(parents.ToList());
- this.ChildrenComplete = childrenComplete;
- }
- public override bool IsMutable {
- get {
- return false;
- }
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "const ");
- EmitAttributes(stream);
- if (this.Unique) {
- stream.Write(this, level, "unique ");
- }
- EmitVitals(stream, level, false);
-
- if (Parents != null || ChildrenComplete) {
- stream.Write(this, level, " extends");
- string/*!*/ sep = " ";
- foreach (ConstantParent/*!*/ p in cce.NonNull(Parents)) {
- Contract.Assert(p != null);
- stream.Write(this, level, sep);
- sep = ", ";
- if (p.Unique)
- stream.Write(this, level, "unique ");
- p.Parent.Emit(stream);
- }
- if (ChildrenComplete)
- stream.Write(this, level, " complete");
- }
-
- stream.WriteLine(";");
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddVariable(this, true);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- base.Resolve(rc);
- if (Parents != null) {
- foreach (ConstantParent/*!*/ p in Parents) {
- Contract.Assert(p != null);
- p.Parent.Resolve(rc);
- if (p.Parent.Decl != null && !(p.Parent.Decl is Constant))
- rc.Error(p.Parent, "the parent of a constant has to be a constant");
- if (this.Equals(p.Parent.Decl))
- rc.Error(p.Parent, "constant cannot be its own parent");
- }
- }
-
- // check that no parent occurs twice
- // (could be optimised)
- if (Parents != null) {
- for (int i = 0; i < Parents.Count; ++i) {
- if (Parents[i].Parent.Decl != null) {
- for (int j = i + 1; j < Parents.Count; ++j) {
- if (Parents[j].Parent.Decl != null &&
- cce.NonNull(Parents[i].Parent.Decl).Equals(Parents[j].Parent.Decl))
- rc.Error(Parents[j].Parent,
- "{0} occurs more than once as parent",
- Parents[j].Parent.Decl);
- }
- }
- }
- }
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- base.Typecheck(tc);
-
- if (Parents != null) {
- foreach (ConstantParent/*!*/ p in Parents) {
- Contract.Assert(p != null);
- p.Parent.Typecheck(tc);
- if (!cce.NonNull(p.Parent.Decl).TypedIdent.Type.Unify(this.TypedIdent.Type))
- tc.Error(p.Parent,
- "parent of constant has incompatible type ({0} instead of {1})",
- p.Parent.Decl.TypedIdent.Type, this.TypedIdent.Type);
- }
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitConstant(this);
- }
- }
- public class GlobalVariable : Variable {
- public GlobalVariable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent)
- : base(tok, typedIdent) {
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent != null);
- }
- public GlobalVariable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent, QKeyValue kv)
- : base(tok, typedIdent, kv) {
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent != null);
- }
- public override bool IsMutable {
- get {
- return true;
- }
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddVariable(this, true);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitGlobalVariable(this);
- }
- }
- public class Formal : Variable {
- public bool InComing;
- public Formal(IToken tok, TypedIdent typedIdent, bool incoming, QKeyValue kv)
- : base(tok, typedIdent, kv) {
- Contract.Requires(typedIdent != null);
- Contract.Requires(tok != null);
- InComing = incoming;
- }
- public Formal(IToken tok, TypedIdent typedIdent, bool incoming)
- : this(tok, typedIdent, incoming, null) {
- Contract.Requires(typedIdent != null);
- Contract.Requires(tok != null);
- }
- public override bool IsMutable {
- get {
- return !InComing;
- }
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddVariable(this, false);
- }
-
- /// <summary>
- /// Given a sequence of Formal declarations, returns sequence of Formals like the given one but without where clauses
- /// and without any attributes.
- /// The Type of each Formal is cloned.
- /// </summary>
- public static List<Variable> StripWhereClauses(List<Variable> w) {
- Contract.Requires(w != null);
- Contract.Ensures(Contract.Result<List<Variable>>() != null);
- List<Variable> s = new List<Variable>();
- foreach (Variable/*!*/ v in w) {
- Contract.Assert(v != null);
- Formal f = (Formal)v;
- TypedIdent ti = f.TypedIdent;
- s.Add(new Formal(f.tok, new TypedIdent(ti.tok, ti.Name, ti.Type.CloneUnresolved()), f.InComing, null));
- }
- return s;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitFormal(this);
- }
- }
- public class LocalVariable : Variable {
- public LocalVariable(IToken tok, TypedIdent typedIdent, QKeyValue kv)
- : base(tok, typedIdent, kv) {
- Contract.Requires(typedIdent != null);
- Contract.Requires(tok != null);
- }
- public LocalVariable(IToken tok, TypedIdent typedIdent)
- : base(tok, typedIdent, null) {
- Contract.Requires(typedIdent != null);
- Contract.Requires(tok != null);
- }
- public override bool IsMutable {
- get {
- return true;
- }
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddVariable(this, false);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitLocalVariable(this);
- }
- }
- public class Incarnation : LocalVariable {
- public int incarnationNumber;
- public Incarnation(Variable/*!*/ var, int i) :
- base(
- var.tok,
- new TypedIdent(var.TypedIdent.tok, var.TypedIdent.Name + "@" + i, var.TypedIdent.Type)
- ) {
- Contract.Requires(var != null);
- incarnationNumber = i;
- }
-
- }
- public class BoundVariable : Variable {
- public BoundVariable(IToken tok, TypedIdent typedIdent)
- : base(tok, typedIdent) {
- Contract.Requires(typedIdent != null);
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent.WhereExpr == null);
- }
- public BoundVariable(IToken tok, TypedIdent typedIdent, QKeyValue kv)
- : base(tok, typedIdent, kv) {
- Contract.Requires(typedIdent != null);
- Contract.Requires(tok != null);
- Contract.Requires(typedIdent.WhereExpr == null);
- }
- public override bool IsMutable {
- get {
- return false;
- }
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddVariable(this, false);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitBoundVariable(this);
- }
- }
-
- public abstract class DeclWithFormals : NamedDeclaration {
- public List<TypeVariable>/*!*/ TypeParameters;
-
- private /*readonly--except in StandardVisitor*/ List<Variable>/*!*/ inParams, outParams;
-
- public List<Variable>/*!*/ InParams {
- get {
- Contract.Ensures(Contract.Result<List<Variable>>() != null);
- return this.inParams;
- }
- set {
- Contract.Requires(value != null);
- this.inParams = value;
- }
- }
-
- public List<Variable>/*!*/ OutParams
- {
- get {
- Contract.Ensures(Contract.Result<List<Variable>>() != null);
- return this.outParams;
- }
- set {
- Contract.Requires(value != null);
- this.outParams = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(TypeParameters != null);
- Contract.Invariant(this.inParams != null);
- Contract.Invariant(this.outParams != null);
- }
-
- public DeclWithFormals(IToken tok, string name, List<TypeVariable> typeParams,
- List<Variable> inParams, List<Variable> outParams)
- : base(tok, name) {
- Contract.Requires(inParams != null);
- Contract.Requires(outParams != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- this.TypeParameters = typeParams;
- this.inParams = inParams;
- this.outParams = outParams;
- }
-
- protected DeclWithFormals(DeclWithFormals that)
- : base(that.tok, cce.NonNull(that.Name)) {
- Contract.Requires(that != null);
- this.TypeParameters = that.TypeParameters;
- this.inParams = cce.NonNull(that.InParams);
- this.outParams = cce.NonNull(that.OutParams);
- }
-
- public byte[] MD5Checksum_;
- public byte[] MD5Checksum
- {
- get
- {
- if (MD5Checksum_ == null)
- {
- var c = Checksum;
- if (c != null)
- {
- MD5Checksum_ = System.Security.Cryptography.MD5.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(c));
- }
- }
- return MD5Checksum_;
- }
- }
-
- public byte[] MD5DependencyChecksum_;
- public byte[] MD5DependencyChecksum
- {
- get
- {
- Contract.Requires(DependenciesCollected);
-
- if (MD5DependencyChecksum_ == null && MD5Checksum != null)
- {
- var c = MD5Checksum;
- var transFuncDeps = new HashSet<Function>();
- if (procedureDependencies != null)
- {
- foreach (var p in procedureDependencies)
- {
- if (p.FunctionDependencies != null)
- {
- foreach (var f in p.FunctionDependencies)
- {
- transFuncDeps.Add(f);
- }
- }
- var pc = p.MD5Checksum;
- if (pc == null) { return null; }
- c = ChecksumHelper.CombineChecksums(c, pc, true);
- }
- }
- if (FunctionDependencies != null)
- {
- foreach (var f in FunctionDependencies)
- {
- transFuncDeps.Add(f);
- }
- }
- var q = new Queue<Function>(transFuncDeps);
- while (q.Any())
- {
- var f = q.Dequeue();
- var fc = f.MD5Checksum;
- if (fc == null) { return null; }
- c = ChecksumHelper.CombineChecksums(c, fc, true);
- if (f.FunctionDependencies != null)
- {
- foreach (var d in f.FunctionDependencies)
- {
- if (!transFuncDeps.Contains(d))
- {
- transFuncDeps.Add(d);
- q.Enqueue(d);
- }
- }
- }
- }
- MD5DependencyChecksum_ = c;
- }
- return MD5DependencyChecksum_;
- }
- }
-
- public string Checksum
- {
- get
- {
- return FindStringAttribute("checksum");
- }
- }
-
- string dependencyChecksum;
- public string DependencyChecksum
- {
- get
- {
- if (dependencyChecksum == null && DependenciesCollected && MD5DependencyChecksum != null)
- {
- dependencyChecksum = BitConverter.ToString(MD5DependencyChecksum);
- }
- return dependencyChecksum;
- }
- }
-
- public bool DependenciesCollected { get; set; }
-
- ISet<Procedure> procedureDependencies;
-
- public ISet<Procedure> ProcedureDependencies
- {
- get { return procedureDependencies; }
- }
-
- public void AddProcedureDependency(Procedure procedure)
- {
- Contract.Requires(procedure != null);
-
- if (procedureDependencies == null)
- {
- procedureDependencies = new HashSet<Procedure>();
- }
- procedureDependencies.Add(procedure);
- }
-
- ISet<Function> functionDependencies;
-
- public ISet<Function> FunctionDependencies
- {
- get { return functionDependencies; }
- }
-
- public void AddFunctionDependency(Function function)
- {
- Contract.Requires(function != null);
-
- if (functionDependencies == null)
- {
- functionDependencies = new HashSet<Function>();
- }
- functionDependencies.Add(function);
- }
-
- protected void EmitSignature(TokenTextWriter stream, bool shortRet) {
- Contract.Requires(stream != null);
- Type.EmitOptionalTypeParams(stream, TypeParameters);
- stream.Write("(");
- stream.push();
- InParams.Emit(stream, true);
- stream.Write(")");
- stream.sep();
-
- if (shortRet) {
- Contract.Assert(OutParams.Count == 1);
- stream.Write(" : ");
- cce.NonNull(OutParams[0]).TypedIdent.Type.Emit(stream);
- } else if (OutParams.Count > 0) {
- stream.Write(" returns (");
- OutParams.Emit(stream, true);
- stream.Write(")");
- }
- stream.pop();
- }
-
- // Register all type parameters at the resolution context
- protected void RegisterTypeParameters(ResolutionContext rc) {
- Contract.Requires(rc != null);
- foreach (TypeVariable/*!*/ v in TypeParameters) {
- Contract.Assert(v != null);
- rc.AddTypeBinder(v);
- }
- }
-
- protected void SortTypeParams() {
- List<Type>/*!*/ allTypes = new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray());
- Contract.Assert(allTypes != null);
- allTypes.AddRange(new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()));
- TypeParameters = Type.SortTypeParams(TypeParameters, allTypes, null);
- }
-
- /// <summary>
- /// Adds the given formals to the current variable context, and then resolves
- /// the types of those formals. Does NOT resolve the where clauses of the
- /// formals.
- /// Relies on the caller to first create, and later tear down, that variable
- /// context.
- /// </summary>
- /// <param name="rc"></param>
- protected void RegisterFormals(List<Variable> formals, ResolutionContext rc) {
- Contract.Requires(rc != null);
- Contract.Requires(formals != null);
- foreach (Formal/*!*/ f in formals) {
- Contract.Assert(f != null);
- if (f.Name != TypedIdent.NoName) {
- rc.AddVariable(f, false);
- }
- f.Resolve(rc);
- }
- }
-
- /// <summary>
- /// Resolves the where clauses (and attributes) of the formals.
- /// </summary>
- /// <param name="rc"></param>
- protected void ResolveFormals(List<Variable> formals, ResolutionContext rc) {
- Contract.Requires(rc != null);
- Contract.Requires(formals != null);
- foreach (Formal/*!*/ f in formals) {
- Contract.Assert(f != null);
- f.ResolveWhere(rc);
- }
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- TypecheckAttributes(tc);
- foreach (Formal/*!*/ p in InParams) {
- Contract.Assert(p != null);
- p.Typecheck(tc);
- }
- foreach (Formal/*!*/ p in OutParams) {
- Contract.Assert(p != null);
- p.Typecheck(tc);
- }
- }
- }
-
- public class DatatypeConstructor : Function {
- public List<DatatypeSelector> selectors;
- public DatatypeMembership membership;
-
- public DatatypeConstructor(Function func)
- : base(func.tok, func.Name, func.TypeParameters, func.InParams, func.OutParams[0], func.Comment, func.Attributes)
- {
- selectors = new List<DatatypeSelector>();
- }
-
- public override void Resolve(ResolutionContext rc) {
- HashSet<string> selectorNames = new HashSet<string>();
- foreach (DatatypeSelector selector in selectors) {
- if (selector.Name.StartsWith("#")) {
- rc.Error(selector.tok, "The selector must be a non-empty string");
- }
- else {
- if (selectorNames.Contains(selector.Name))
- rc.Error(this.tok, "The selectors for a constructor must be distinct strings");
- else
- selectorNames.Add(selector.Name);
- }
- }
- base.Resolve(rc);
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- CtorType outputType = this.OutParams[0].TypedIdent.Type as CtorType;
- if (outputType == null || !outputType.IsDatatype()) {
- tc.Error(tok, "The output type of a constructor must be a datatype");
- }
- base.Typecheck(tc);
- }
- }
-
- public class DatatypeSelector : Function {
- public Function constructor;
- public int index;
- public DatatypeSelector(Function constructor, int index)
- : base(constructor.InParams[index].tok,
- constructor.InParams[index].Name + "#" + constructor.Name,
- new List<Variable> { new Formal(constructor.tok, new TypedIdent(constructor.tok, "", constructor.OutParams[0].TypedIdent.Type), true) },
- new Formal(constructor.tok, new TypedIdent(constructor.tok, "", constructor.InParams[index].TypedIdent.Type), false))
- {
- this.constructor = constructor;
- this.index = index;
- }
-
- public override void Emit(TokenTextWriter stream, int level) { }
- }
-
- public class DatatypeMembership : Function {
- public Function constructor;
- public DatatypeMembership(Function constructor)
- : base(constructor.tok,
- "is#" + constructor.Name,
- new List<Variable> { new Formal(constructor.tok, new TypedIdent(constructor.tok, "", constructor.OutParams[0].TypedIdent.Type), true) },
- new Formal(constructor.tok, new TypedIdent(constructor.tok, "", Type.Bool), false))
- {
- this.constructor = constructor;
- }
-
- public override void Emit(TokenTextWriter stream, int level) { }
- }
-
- public class Function : DeclWithFormals {
- public string Comment;
-
- // the body is only set if the function is declared with {:inline}
- public Expr Body;
- public Axiom DefinitionAxiom;
-
- public IList<Axiom> otherDefinitionAxioms;
- public IEnumerable<Axiom> OtherDefinitionAxioms
- {
- get
- {
- return otherDefinitionAxioms;
- }
- }
-
- public void AddOtherDefinitionAxiom(Axiom axiom)
- {
- Contract.Requires(axiom != null);
-
- if (otherDefinitionAxioms == null)
- {
- otherDefinitionAxioms = new List<Axiom>();
- }
- otherDefinitionAxioms.Add(axiom);
- }
-
- public bool doingExpansion;
-
- private bool neverTrigger;
- private bool neverTriggerComputed;
-
- public Function(IToken tok, string name, List<Variable> args, Variable result)
- : this(tok, name, new List<TypeVariable>(), args, result, null) {
- Contract.Requires(result != null);
- Contract.Requires(args != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, new List<TypeVariable>(), args, result, null);
- }
- public Function(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> args, Variable result)
- : this(tok, name, typeParams, args, result, null) {
- Contract.Requires(result != null);
- Contract.Requires(args != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, typeParams, args, result, null);
- }
- public Function(IToken tok, string name, List<Variable> args, Variable result, string comment)
- : this(tok, name, new List<TypeVariable>(), args, result, comment) {
- Contract.Requires(result != null);
- Contract.Requires(args != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, new List<TypeVariable>(), args, result, comment);
- }
- public Function(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> args, Variable/*!*/ result, string comment)
- : base(tok, name, typeParams, args, new List<Variable> { result }) {
- Contract.Requires(result != null);
- Contract.Requires(args != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- Comment = comment;
- }
- public Function(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> args, Variable result,
- string comment, QKeyValue kv)
- : this(tok, name, typeParams, args, result, comment) {
- Contract.Requires(args != null);
- Contract.Requires(result != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, typeParams, args, result, comment);
- this.Attributes = kv;
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- if (Comment != null) {
- stream.WriteLine(this, level, "// " + Comment);
- }
- stream.Write(this, level, "function ");
- EmitAttributes(stream);
- if (Body != null && !QKeyValue.FindBoolAttribute(Attributes, "inline")) {
- // Boogie inlines any function whose .Body field is non-null. The parser populates the .Body field
- // is the :inline attribute is present, but if someone creates the Boogie file directly as an AST, then
- // the :inline attribute may not be there. We'll make sure it's printed, so one can see that this means
- // that the body will be inlined.
- stream.Write("{:inline} ");
- }
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- stream.Write("h{0}^^{1}", this.GetHashCode(), TokenTextWriter.SanitizeIdentifier(this.Name));
- } else {
- stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
- }
- EmitSignature(stream, true);
- if (Body != null) {
- stream.WriteLine();
- stream.WriteLine("{");
- stream.Write(level + 1, "");
- Body.Emit(stream);
- stream.WriteLine();
- stream.WriteLine("}");
- } else {
- stream.WriteLine(";");
- }
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddProcedure(this);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- int previousTypeBinderState = rc.TypeBinderState;
- try {
- RegisterTypeParameters(rc);
- rc.PushVarContext();
- RegisterFormals(InParams, rc);
- RegisterFormals(OutParams, rc);
- ResolveAttributes(rc);
- if (Body != null)
- {
- rc.StateMode = ResolutionContext.State.StateLess;
- Body.Resolve(rc);
- rc.StateMode = ResolutionContext.State.Single;
- }
- rc.PopVarContext();
- Type.CheckBoundVariableOccurrences(TypeParameters,
- new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- this.tok, "function arguments",
- rc);
- } finally {
- rc.TypeBinderState = previousTypeBinderState;
- }
- SortTypeParams();
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- // PR: why was the base call left out previously?
- base.Typecheck(tc);
- // TypecheckAttributes(tc);
- if (Body != null) {
- Body.Typecheck(tc);
- if (!cce.NonNull(Body.Type).Unify(cce.NonNull(OutParams[0]).TypedIdent.Type))
- tc.Error(Body,
- "function body with invalid type: {0} (expected: {1})",
- Body.Type, cce.NonNull(OutParams[0]).TypedIdent.Type);
- }
- }
-
- public bool NeverTrigger {
- get {
- if (!neverTriggerComputed) {
- this.CheckBooleanAttribute("never_pattern", ref neverTrigger);
- neverTriggerComputed = true;
- }
- return neverTrigger;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitFunction(this);
- }
-
- public Axiom CreateDefinitionAxiom(Expr definition, QKeyValue kv = null) {
- Contract.Requires(definition != null);
-
- List<Variable> dummies = new List<Variable>();
- List<Expr> callArgs = new List<Expr>();
- int i = 0;
- foreach (Formal/*!*/ f in InParams) {
- Contract.Assert(f != null);
- string nm = f.TypedIdent.HasName ? f.TypedIdent.Name : "_" + i;
- dummies.Add(new BoundVariable(f.tok, new TypedIdent(f.tok, nm, f.TypedIdent.Type)));
- callArgs.Add(new IdentifierExpr(f.tok, nm));
- i++;
- }
- List<TypeVariable>/*!*/ quantifiedTypeVars = new List<TypeVariable>();
- foreach (TypeVariable/*!*/ t in TypeParameters) {
- Contract.Assert(t != null);
- quantifiedTypeVars.Add(new TypeVariable(tok, t.Name));
- }
-
- Expr call = new NAryExpr(tok, new FunctionCall(new IdentifierExpr(tok, Name)), callArgs);
- // specify the type of the function, because it might be that
- // type parameters only occur in the output type
- call = Expr.CoerceType(tok, call, (Type)OutParams[0].TypedIdent.Type.Clone());
- Expr def = Expr.Binary(tok, BinaryOperator.Opcode.Eq, call, definition);
- if (quantifiedTypeVars.Count != 0 || dummies.Count != 0) {
- def = new ForallExpr(tok, quantifiedTypeVars, dummies,
- kv,
- new Trigger(tok, true, new List<Expr> { call }, null),
- def);
- }
- DefinitionAxiom = new Axiom(tok, def);
- return DefinitionAxiom;
- }
- }
-
- public class Macro : Function {
- public Macro(IToken tok, string name, List<Variable> args, Variable result)
- : base(tok, name, args, result) { }
- }
-
- public class Requires : Absy, IPotentialErrorNode<string, string> {
- public readonly bool Free;
-
- private Expr/*!*/ _condition;
-
- public Expr/*!*/ Condition {
- get {
- Contract.Ensures(Contract.Result<Expr>() != null);
- return this._condition;
- }
- set {
- Contract.Requires(value != null);
- this._condition = value;
- }
- }
-
- public string Comment;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._condition != null);
- }
-
-
- // TODO: convert to use generics
- private string errorData;
- public string ErrorData {
- get {
- return errorData;
- }
- set {
- errorData = value;
- }
- }
-
-
- private MiningStrategy errorDataEnhanced;
- public MiningStrategy ErrorDataEnhanced {
- get {
- return errorDataEnhanced;
- }
- set {
- errorDataEnhanced = value;
- }
- }
-
- public QKeyValue Attributes;
-
- public String ErrorMessage {
- get {
- return QKeyValue.FindStringAttribute(Attributes, "msg");
- }
- }
-
- public Requires(IToken token, bool free, Expr condition, string comment, QKeyValue kv)
- : base(token) {
- Contract.Requires(condition != null);
- Contract.Requires(token != null);
- this.Free = free;
- this._condition = condition;
- this.Comment = comment;
- this.Attributes = kv;
- }
-
- public Requires(IToken token, bool free, Expr condition, string comment)
- : this(token, free, condition, comment, null) {
- Contract.Requires(condition != null);
- Contract.Requires(token != null);
- //:this(token, free, condition, comment, null);
- }
-
- public Requires(bool free, Expr condition)
- : this(Token.NoToken, free, condition, null) {
- Contract.Requires(condition != null);
- //:this(Token.NoToken, free, condition, null);
- }
-
- public Requires(bool free, Expr condition, string comment)
- : this(Token.NoToken, free, condition, comment) {
- Contract.Requires(condition != null);
- //:this(Token.NoToken, free, condition, comment);
- }
-
- public void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- if (Comment != null) {
- stream.WriteLine(this, level, "// " + Comment);
- }
- stream.Write(this, level, "{0}requires ", Free ? "free " : "");
- Cmd.EmitAttributes(stream, Attributes);
- this.Condition.Emit(stream);
- stream.WriteLine(";");
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- this.Condition.Resolve(rc);
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- this.Condition.Typecheck(tc);
- Contract.Assert(this.Condition.Type != null); // follows from postcondition of Expr.Typecheck
- if (!this.Condition.Type.Unify(Type.Bool)) {
- tc.Error(this, "preconditions must be of type bool");
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- return visitor.VisitRequires(this);
- }
- }
-
- public class Ensures : Absy, IPotentialErrorNode<string, string> {
- public readonly bool Free;
-
- private Expr/*!*/ _condition;
-
- public Expr/*!*/ Condition {
- get {
- Contract.Ensures(Contract.Result<Expr>() != null);
- return this._condition;
- }
- set {
- Contract.Requires(value != null);
- this._condition = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._condition != null);
- }
-
- public string Comment;
-
- // TODO: convert to use generics
- private string errorData;
- public string ErrorData {
- get {
- return errorData;
- }
- set {
- errorData = value;
- }
- }
-
- private MiningStrategy errorDataEnhanced;
- public MiningStrategy ErrorDataEnhanced {
- get {
- return errorDataEnhanced;
- }
- set {
- errorDataEnhanced = value;
- }
- }
-
- public String ErrorMessage {
- get {
- return QKeyValue.FindStringAttribute(Attributes, "msg");
- }
- }
-
- public QKeyValue Attributes;
-
- public Ensures(IToken token, bool free, Expr/*!*/ condition, string comment, QKeyValue kv)
- : base(token) {
- Contract.Requires(condition != null);
- Contract.Requires(token != null);
- this.Free = free;
- this._condition = condition;
- this.Comment = comment;
- this.Attributes = kv;
- }
-
- public Ensures(IToken token, bool free, Expr condition, string comment)
- : this(token, free, condition, comment, null) {
- Contract.Requires(condition != null);
- Contract.Requires(token != null);
- //:this(token, free, condition, comment, null);
- }
-
- public Ensures(bool free, Expr condition)
- : this(Token.NoToken, free, condition, null) {
- Contract.Requires(condition != null);
- //:this(Token.NoToken, free, condition, null);
- }
-
- public Ensures(bool free, Expr condition, string comment)
- : this(Token.NoToken, free, condition, comment) {
- Contract.Requires(condition != null);
- //:this(Token.NoToken, free, condition, comment);
- }
-
- public void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- if (Comment != null) {
- stream.WriteLine(this, level, "// " + Comment);
- }
- stream.Write(this, level, "{0}ensures ", Free ? "free " : "");
- Cmd.EmitAttributes(stream, Attributes);
- this.Condition.Emit(stream);
- stream.WriteLine(";");
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- this.Condition.Resolve(rc);
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- this.Condition.Typecheck(tc);
- Contract.Assert(this.Condition.Type != null); // follows from postcondition of Expr.Typecheck
- if (!this.Condition.Type.Unify(Type.Bool)) {
- tc.Error(this, "postconditions must be of type bool");
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- return visitor.VisitEnsures(this);
- }
- }
-
- public class Procedure : DeclWithFormals {
- public List<Requires>/*!*/ Requires;
- public List<IdentifierExpr>/*!*/ Modifies;
- public List<Ensures>/*!*/ Ensures;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Requires != null);
- Contract.Invariant(Modifies != null);
- Contract.Invariant(Ensures != null);
- Contract.Invariant(Summary != null);
- }
-
-
- // Abstract interpretation: Procedure-specific invariants...
- [Rep]
- public readonly ProcedureSummary/*!*/ Summary;
-
- public Procedure(IToken/*!*/ tok, string/*!*/ name, List<TypeVariable>/*!*/ typeParams, List<Variable>/*!*/ inParams, List<Variable>/*!*/ outParams,
- List<Requires>/*!*/ requires, List<IdentifierExpr>/*!*/ modifies, List<Ensures>/*!*/ ensures)
- : this(tok, name, typeParams, inParams, outParams, requires, modifies, ensures, null) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(inParams != null);
- Contract.Requires(outParams != null);
- Contract.Requires(requires != null);
- Contract.Requires(modifies != null);
- Contract.Requires(ensures != null);
- //:this(tok, name, typeParams, inParams, outParams, requires, modifies, ensures, null);
- }
-
- public Procedure(IToken/*!*/ tok, string/*!*/ name, List<TypeVariable>/*!*/ typeParams, List<Variable>/*!*/ inParams, List<Variable>/*!*/ outParams,
- List<Requires>/*!*/ @requires, List<IdentifierExpr>/*!*/ @modifies, List<Ensures>/*!*/ @ensures, QKeyValue kv
- )
- : base(tok, name, typeParams, inParams, outParams) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(inParams != null);
- Contract.Requires(outParams != null);
- Contract.Requires(@requires != null);
- Contract.Requires(@modifies != null);
- Contract.Requires(@ensures != null);
- this.Requires = @requires;
- this.Modifies = @modifies;
- this.Ensures = @ensures;
- this.Summary = new ProcedureSummary();
- this.Attributes = kv;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "procedure ");
- EmitAttributes(stream);
- stream.Write(this, level, "{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
- EmitSignature(stream, false);
- stream.WriteLine(";");
-
- level++;
-
- foreach (Requires/*!*/ e in this.Requires) {
- Contract.Assert(e != null);
- e.Emit(stream, level);
- }
-
- if (this.Modifies.Count > 0) {
- stream.Write(level, "modifies ");
- this.Modifies.Emit(stream, false);
- stream.WriteLine(";");
- }
-
- foreach (Ensures/*!*/ e in this.Ensures) {
- Contract.Assert(e != null);
- e.Emit(stream, level);
- }
-
- if (!CommandLineOptions.Clo.IntraproceduralInfer) {
- for (int s = 0; s < this.Summary.Count; s++) {
- ProcedureSummaryEntry/*!*/ entry = cce.NonNull(this.Summary[s]);
- stream.Write(level + 1, "// ");
- stream.WriteLine();
- }
- }
-
- stream.WriteLine();
- stream.WriteLine();
- }
-
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.AddProcedure(this);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.PushVarContext();
-
- foreach (IdentifierExpr/*!*/ ide in Modifies) {
- Contract.Assert(ide != null);
- ide.Resolve(rc);
- }
-
- int previousTypeBinderState = rc.TypeBinderState;
- try {
- RegisterTypeParameters(rc);
-
- RegisterFormals(InParams, rc);
- ResolveFormals(InParams, rc); // "where" clauses of in-parameters are resolved without the out-parameters in scope
- foreach (Requires/*!*/ e in Requires) {
- Contract.Assert(e != null);
- e.Resolve(rc);
- }
- RegisterFormals(OutParams, rc);
- ResolveFormals(OutParams, rc); // "where" clauses of out-parameters are resolved with both in- and out-parametes in scope
-
- rc.StateMode = ResolutionContext.State.Two;
- foreach (Ensures/*!*/ e in Ensures) {
- Contract.Assert(e != null);
- e.Resolve(rc);
- }
- rc.StateMode = ResolutionContext.State.Single;
- ResolveAttributes(rc);
-
- Type.CheckBoundVariableOccurrences(TypeParameters,
- new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- this.tok, "procedure arguments",
- rc);
-
- } finally {
- rc.TypeBinderState = previousTypeBinderState;
- }
-
- rc.PopVarContext();
-
- SortTypeParams();
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- base.Typecheck(tc);
- foreach (IdentifierExpr/*!*/ ide in Modifies) {
- Contract.Assert(ide != null);
- Contract.Assume(ide.Decl != null);
- if (!ide.Decl.IsMutable) {
- tc.Error(this, "modifies list contains constant: {0}", ide.Name);
- }
- ide.Typecheck(tc);
- }
- foreach (Requires/*!*/ e in Requires) {
- Contract.Assert(e != null);
- e.Typecheck(tc);
- }
- bool oldYields = tc.Yields;
- tc.Yields = QKeyValue.FindBoolAttribute(Attributes, "yields");
- foreach (Ensures/*!*/ e in Ensures) {
- Contract.Assert(e != null);
- e.Typecheck(tc);
- }
- tc.Yields = oldYields;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitProcedure(this);
- }
- }
-
- public class LoopProcedure : Procedure
- {
- public Implementation enclosingImpl;
- private Dictionary<Block, Block> blockMap;
- private Dictionary<string, Block> blockLabelMap;
-
- public LoopProcedure(Implementation impl, Block header,
- List<Variable> inputs, List<Variable> outputs, List<IdentifierExpr> globalMods)
- : base(Token.NoToken, impl.Name + "_loop_" + header.ToString(),
- new List<TypeVariable>(), inputs, outputs,
- new List<Requires>(), globalMods, new List<Ensures>())
- {
- enclosingImpl = impl;
- }
-
- public void setBlockMap(Dictionary<Block, Block> bm)
- {
- blockMap = bm;
- blockLabelMap = new Dictionary<string, Block>();
- foreach (var kvp in bm)
- {
- blockLabelMap.Add(kvp.Key.Label, kvp.Value);
- }
- }
-
- public Block getBlock(string label)
- {
- if (blockLabelMap.ContainsKey(label)) return blockLabelMap[label];
- return null;
- }
- }
-
- public class Implementation : DeclWithFormals {
- public List<Variable>/*!*/ LocVars;
- [Rep]
- public StmtList StructuredStmts;
- [Rep]
- public List<Block/*!*/>/*!*/ Blocks;
- public Procedure Proc;
-
- // Blocks before applying passification etc.
- // Both are used only when /inline is set.
- public List<Block/*!*/> OriginalBlocks;
- public List<Variable> OriginalLocVars;
-
- public readonly ISet<byte[]> AssertionChecksums = new HashSet<byte[]>(ChecksumComparer.Default);
-
- public sealed class ChecksumComparer : IEqualityComparer<byte[]>
- {
- static IEqualityComparer<byte[]> defaultComparer;
- public static IEqualityComparer<byte[]> Default
- {
- get
- {
- if (defaultComparer == null)
- {
- defaultComparer = new ChecksumComparer();
- }
- return defaultComparer;
- }
- }
-
- public bool Equals(byte[] x, byte[] y)
- {
- if (x == null || y == null)
- {
- return x == y;
- }
- else
- {
- return x.SequenceEqual(y);
- }
- }
-
- public int GetHashCode(byte[] checksum)
- {
- if (checksum == null)
- {
- throw new ArgumentNullException("checksum");
- }
- else
- {
- var result = 17;
- for (int i = 0; i < checksum.Length; i++)
- {
- result = result * 23 + checksum[i];
- }
- return result;
- }
- }
- }
-
- public void AddAssertionChecksum(byte[] checksum)
- {
- Contract.Requires(checksum != null);
-
- if (AssertionChecksums != null)
- {
- AssertionChecksums.Add(checksum);
- }
- }
-
- public ISet<byte[]> AssertionChecksumsInCachedSnapshot { get; set; }
-
- public bool IsAssertionChecksumInCachedSnapshot(byte[] checksum)
- {
- Contract.Requires(AssertionChecksumsInCachedSnapshot != null);
-
- return AssertionChecksumsInCachedSnapshot.Contains(checksum);
- }
-
- public IList<AssertCmd> RecycledFailingAssertions { get; protected set; }
-
- public void AddRecycledFailingAssertion(AssertCmd assertion)
- {
- if (RecycledFailingAssertions == null)
- {
- RecycledFailingAssertions = new List<AssertCmd>();
- }
- RecycledFailingAssertions.Add(assertion);
- }
-
- // Strongly connected components
- private StronglyConnectedComponents<Block/*!*/> scc;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(LocVars != null);
- Contract.Invariant(cce.NonNullElements(Blocks));
- Contract.Invariant(cce.NonNullElements(OriginalBlocks, true));
- Contract.Invariant(cce.NonNullElements(scc, true));
-
- }
- private bool BlockPredecessorsComputed;
- public bool StronglyConnectedComponentsComputed {
- get {
- return this.scc != null;
- }
- }
-
- public bool SkipVerification {
- get {
- bool verify = true;
- cce.NonNull(this.Proc).CheckBooleanAttribute("verify", ref verify);
- this.CheckBooleanAttribute("verify", ref verify);
- if (!verify) {
- return true;
- }
-
- if (CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assert ||
- CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assume) {
- Expr inl = this.FindExprAttribute("inline");
- if (inl == null)
- inl = this.Proc.FindExprAttribute("inline");
- if (inl != null && inl is LiteralExpr && ((LiteralExpr)inl).isBigNum && ((LiteralExpr)inl).asBigNum.Signum > 0) {
- return true;
- }
- }
-
- if (CommandLineOptions.Clo.StratifiedInlining > 0) {
- return !QKeyValue.FindBoolAttribute(Attributes, "entrypoint");
- }
-
- return false;
- }
- }
-
- public string Id
- {
- get
- {
- var id = FindStringAttribute("id");
- if (id == null)
- {
- id = Name + GetHashCode().ToString() + ":0";
- }
- return id;
- }
- }
-
- public int Priority
- {
- get
- {
- int priority = 0;
- CheckIntAttribute("priority", ref priority);
- if (priority <= 0)
- {
- priority = 1;
- }
- return priority;
- }
- }
-
- public IDictionary<byte[], object> ErrorChecksumToCachedError { get; private set; }
-
- public bool IsErrorChecksumInCachedSnapshot(byte[] checksum)
- {
- Contract.Requires(ErrorChecksumToCachedError != null);
-
- return ErrorChecksumToCachedError.ContainsKey(checksum);
- }
-
- public void SetErrorChecksumToCachedError(IEnumerable<Tuple<byte[], byte[], object>> errors)
- {
- Contract.Requires(errors != null);
-
- ErrorChecksumToCachedError = new Dictionary<byte[], object>(ChecksumComparer.Default);
- foreach (var kv in errors)
- {
- ErrorChecksumToCachedError[kv.Item1] = kv.Item3;
- if (kv.Item2 != null)
- {
- ErrorChecksumToCachedError[kv.Item2] = null;
- }
- }
- }
-
- public bool HasCachedSnapshot
- {
- get
- {
- return ErrorChecksumToCachedError != null && AssertionChecksumsInCachedSnapshot != null;
- }
- }
-
- public bool AnyErrorsInCachedSnapshot
- {
- get
- {
- Contract.Requires(ErrorChecksumToCachedError != null);
-
- return ErrorChecksumToCachedError.Any();
- }
- }
-
- IList<LocalVariable> injectedAssumptionVariables;
- public IList<LocalVariable> InjectedAssumptionVariables
- {
- get
- {
- return injectedAssumptionVariables != null ? injectedAssumptionVariables : new List<LocalVariable>();
- }
- }
-
- IList<LocalVariable> doomedInjectedAssumptionVariables;
- public IList<LocalVariable> DoomedInjectedAssumptionVariables
- {
- get
- {
- return doomedInjectedAssumptionVariables != null ? doomedInjectedAssumptionVariables : new List<LocalVariable>();
- }
- }
-
- public List<LocalVariable> RelevantInjectedAssumptionVariables(Dictionary<Variable, Expr> incarnationMap)
- {
- return InjectedAssumptionVariables.Where(v => { Expr e; if (incarnationMap.TryGetValue(v, out e)) { var le = e as LiteralExpr; return le == null || !le.IsTrue; } else { return false; } }).ToList();
- }
-
- public List<LocalVariable> RelevantDoomedInjectedAssumptionVariables(Dictionary<Variable, Expr> incarnationMap)
- {
- return DoomedInjectedAssumptionVariables.Where(v => { Expr e; if (incarnationMap.TryGetValue(v, out e)) { var le = e as LiteralExpr; return le == null || !le.IsTrue; } else { return false; } }).ToList();
- }
-
- public Expr ConjunctionOfInjectedAssumptionVariables(Dictionary<Variable, Expr> incarnationMap, out bool isTrue)
- {
- Contract.Requires(incarnationMap != null);
-
- var vars = RelevantInjectedAssumptionVariables(incarnationMap).Select(v => incarnationMap[v]).ToList();
- isTrue = vars.Count == 0;
- return LiteralExpr.BinaryTreeAnd(vars);
- }
-
- public void InjectAssumptionVariable(LocalVariable variable, bool isDoomed = false)
- {
- LocVars.Add(variable);
- if (isDoomed)
- {
- if (doomedInjectedAssumptionVariables == null)
- {
- doomedInjectedAssumptionVariables = new List<LocalVariable>();
- }
- doomedInjectedAssumptionVariables.Add(variable);
- }
- else
- {
- if (injectedAssumptionVariables == null)
- {
- injectedAssumptionVariables = new List<LocalVariable>();
- }
- injectedAssumptionVariables.Add(variable);
- }
- }
-
- public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] StmtList structuredStmts, QKeyValue kv)
- : this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, kv, new Errors()) {
- Contract.Requires(structuredStmts != null);
- Contract.Requires(localVariables != null);
- Contract.Requires(outParams != null);
- Contract.Requires(inParams != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, new Errors());
- }
-
- public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] StmtList structuredStmts)
- : this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, new Errors()) {
- Contract.Requires(structuredStmts != null);
- Contract.Requires(localVariables != null);
- Contract.Requires(outParams != null);
- Contract.Requires(inParams != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, new Errors());
- }
-
- public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] StmtList structuredStmts, Errors errorHandler)
- : this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, errorHandler) {
- Contract.Requires(errorHandler != null);
- Contract.Requires(structuredStmts != null);
- Contract.Requires(localVariables != null);
- Contract.Requires(outParams != null);
- Contract.Requires(inParams != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, errorHandler);
- }
-
- public Implementation(IToken/*!*/ tok,
- string/*!*/ name,
- List<TypeVariable>/*!*/ typeParams,
- List<Variable>/*!*/ inParams,
- List<Variable>/*!*/ outParams,
- List<Variable>/*!*/ localVariables,
- [Captured] StmtList/*!*/ structuredStmts,
- QKeyValue kv,
- Errors/*!*/ errorHandler)
- : base(tok, name, typeParams, inParams, outParams) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(inParams != null);
- Contract.Requires(outParams != null);
- Contract.Requires(localVariables != null);
- Contract.Requires(structuredStmts != null);
- Contract.Requires(errorHandler != null);
- LocVars = localVariables;
- StructuredStmts = structuredStmts;
- BigBlocksResolutionContext ctx = new BigBlocksResolutionContext(structuredStmts, errorHandler);
- Blocks = ctx.Blocks;
- BlockPredecessorsComputed = false;
- scc = null;
- Attributes = kv;
- }
-
- public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] List<Block/*!*/> block)
- : this(tok, name, typeParams, inParams, outParams, localVariables, block, null) {
- Contract.Requires(cce.NonNullElements(block));
- Contract.Requires(localVariables != null);
- Contract.Requires(outParams != null);
- Contract.Requires(inParams != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(name != null);
- Contract.Requires(tok != null);
- //:this(tok, name, typeParams, inParams, outParams, localVariables, block, null);
- }
-
- public Implementation(IToken/*!*/ tok,
- string/*!*/ name,
- List<TypeVariable>/*!*/ typeParams,
- List<Variable>/*!*/ inParams,
- List<Variable>/*!*/ outParams,
- List<Variable>/*!*/ localVariables,
- [Captured] List<Block/*!*/>/*!*/ blocks,
- QKeyValue kv)
- : base(tok, name, typeParams, inParams, outParams) {
- Contract.Requires(name != null);
- Contract.Requires(inParams != null);
- Contract.Requires(outParams != null);
- Contract.Requires(localVariables != null);
- Contract.Requires(cce.NonNullElements(blocks));
- LocVars = localVariables;
- Blocks = blocks;
- BlockPredecessorsComputed = false;
- scc = null;
- Attributes = kv;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "implementation ");
- EmitAttributes(stream);
- stream.Write(this, level, "{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
- EmitSignature(stream, false);
- stream.WriteLine();
-
- stream.WriteLine(level, "{0}", '{');
-
- foreach (Variable/*!*/ v in this.LocVars) {
- Contract.Assert(v != null);
- v.Emit(stream, level + 1);
- }
-
- if (this.StructuredStmts != null && !CommandLineOptions.Clo.PrintInstrumented && !CommandLineOptions.Clo.PrintInlined) {
- if (this.LocVars.Count > 0) {
- stream.WriteLine();
- }
- if (CommandLineOptions.Clo.PrintUnstructured < 2) {
- if (CommandLineOptions.Clo.PrintUnstructured == 1) {
- stream.WriteLine(this, level + 1, "/*** structured program:");
- }
- this.StructuredStmts.Emit(stream, level + 1);
- if (CommandLineOptions.Clo.PrintUnstructured == 1) {
- stream.WriteLine(level + 1, "**** end structured program */");
- }
- }
- }
-
- if (this.StructuredStmts == null || 1 <= CommandLineOptions.Clo.PrintUnstructured ||
- CommandLineOptions.Clo.PrintInstrumented || CommandLineOptions.Clo.PrintInlined) {
- foreach (Block b in this.Blocks) {
- b.Emit(stream, level + 1);
- }
- }
-
- stream.WriteLine(level, "{0}", '}');
-
- stream.WriteLine();
- stream.WriteLine();
- }
- public override void Register(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- // nothing to register
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- if (Proc != null) {
- // already resolved
- return;
- }
-
- DeclWithFormals dwf = rc.LookUpProcedure(cce.NonNull(this.Name));
- Proc = dwf as Procedure;
- if (dwf == null) {
- rc.Error(this, "implementation given for undeclared procedure: {0}", this.Name);
- } else if (Proc == null) {
- rc.Error(this, "implementations given for function, not procedure: {0}", this.Name);
- }
-
- int previousTypeBinderState = rc.TypeBinderState;
- try {
- RegisterTypeParameters(rc);
-
- rc.PushVarContext();
- RegisterFormals(InParams, rc);
- RegisterFormals(OutParams, rc);
-
- foreach (Variable/*!*/ v in LocVars) {
- Contract.Assert(v != null);
- v.Register(rc);
- v.Resolve(rc);
- }
- foreach (Variable/*!*/ v in LocVars) {
- Contract.Assert(v != null);
- v.ResolveWhere(rc);
- }
-
- rc.PushProcedureContext();
- foreach (Block b in Blocks) {
- b.Register(rc);
- }
-
- ResolveAttributes(rc);
-
- rc.StateMode = ResolutionContext.State.Two;
- foreach (Block b in Blocks) {
- b.Resolve(rc);
- }
- rc.StateMode = ResolutionContext.State.Single;
-
- rc.PopProcedureContext();
- rc.PopVarContext();
-
- Type.CheckBoundVariableOccurrences(TypeParameters,
- new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- this.tok, "implementation arguments",
- rc);
- } finally {
- rc.TypeBinderState = previousTypeBinderState;
- }
- SortTypeParams();
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- base.Typecheck(tc);
-
- Contract.Assume(this.Proc != null);
-
- if (this.TypeParameters.Count != Proc.TypeParameters.Count) {
- tc.Error(this, "mismatched number of type parameters in procedure implementation: {0}",
- this.Name);
- } else {
- // if the numbers of type parameters are different, it is
- // difficult to compare the argument types
- MatchFormals(this.InParams, Proc.InParams, "in", tc);
- MatchFormals(this.OutParams, Proc.OutParams, "out", tc);
- }
-
- foreach (Variable/*!*/ v in LocVars) {
- Contract.Assert(v != null);
- v.Typecheck(tc);
- }
- List<IdentifierExpr> oldFrame = tc.Frame;
- bool oldYields = tc.Yields;
- tc.Frame = Proc.Modifies;
- tc.Yields = QKeyValue.FindBoolAttribute(Proc.Attributes, "yields");
- foreach (Block b in Blocks) {
- b.Typecheck(tc);
- }
- Contract.Assert(tc.Frame == Proc.Modifies);
- tc.Frame = oldFrame;
- tc.Yields = oldYields;
- }
- void MatchFormals(List<Variable>/*!*/ implFormals, List<Variable>/*!*/ procFormals, string/*!*/ inout, TypecheckingContext/*!*/ tc) {
- Contract.Requires(implFormals != null);
- Contract.Requires(procFormals != null);
- Contract.Requires(inout != null);
- Contract.Requires(tc != null);
- if (implFormals.Count != procFormals.Count) {
- tc.Error(this, "mismatched number of {0}-parameters in procedure implementation: {1}",
- inout, this.Name);
- } else {
- // unify the type parameters so that types can be compared
- Contract.Assert(Proc != null);
- Contract.Assert(this.TypeParameters.Count == Proc.TypeParameters.Count);
-
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst1 =
- new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst2 =
- new Dictionary<TypeVariable/*!*/, Type/*!*/>();
-
- for (int i = 0; i < this.TypeParameters.Count; ++i) {
- TypeVariable/*!*/ newVar =
- new TypeVariable(Token.NoToken, Proc.TypeParameters[i].Name);
- Contract.Assert(newVar != null);
- subst1.Add(Proc.TypeParameters[i], newVar);
- subst2.Add(this.TypeParameters[i], newVar);
- }
-
- for (int i = 0; i < implFormals.Count; i++) {
- // the names of the formals are allowed to change from the proc to the impl
-
- // but types must be identical
- Type t = cce.NonNull((Variable)implFormals[i]).TypedIdent.Type.Substitute(subst2);
- Type u = cce.NonNull((Variable)procFormals[i]).TypedIdent.Type.Substitute(subst1);
- if (!t.Equals(u)) {
- string/*!*/ a = cce.NonNull((Variable)implFormals[i]).Name;
- Contract.Assert(a != null);
- string/*!*/ b = cce.NonNull((Variable)procFormals[i]).Name;
- Contract.Assert(b != null);
- string/*!*/ c;
- if (a == b) {
- c = a;
- } else {
- c = String.Format("{0} (named {1} in implementation)", b, a);
- }
- tc.Error(this, "mismatched type of {0}-parameter in implementation {1}: {2}", inout, this.Name, c);
- }
- }
- }
- }
-
- private Dictionary<Variable, Expr>/*?*/ formalMap = null;
- public void ResetImplFormalMap() {
- this.formalMap = null;
- }
- public Dictionary<Variable, Expr>/*!*/ GetImplFormalMap() {
- Contract.Ensures(Contract.Result<Dictionary<Variable, Expr>>() != null);
-
- if (this.formalMap != null)
- return this.formalMap;
- else {
- Dictionary<Variable, Expr>/*!*/ map = new Dictionary<Variable, Expr> (InParams.Count + OutParams.Count);
-
- Contract.Assume(this.Proc != null);
- Contract.Assume(InParams.Count == Proc.InParams.Count);
- for (int i = 0; i < InParams.Count; i++) {
- Variable/*!*/ v = InParams[i];
- Contract.Assert(v != null);
- IdentifierExpr ie = new IdentifierExpr(v.tok, v);
- Variable/*!*/ pv = Proc.InParams[i];
- Contract.Assert(pv != null);
- map.Add(pv, ie);
- }
- System.Diagnostics.Debug.Assert(OutParams.Count == Proc.OutParams.Count);
- for (int i = 0; i < OutParams.Count; i++) {
- Variable/*!*/ v = cce.NonNull(OutParams[i]);
- IdentifierExpr ie = new IdentifierExpr(v.tok, v);
- Variable pv = cce.NonNull(Proc.OutParams[i]);
- map.Add(pv, ie);
- }
- this.formalMap = map;
-
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- Console.WriteLine("Implementation.GetImplFormalMap on {0}:", this.Name);
- using (TokenTextWriter stream = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/false, /*pretty=*/ false)) {
- foreach (var e in map) {
- Console.Write(" ");
- cce.NonNull((Variable/*!*/)e.Key).Emit(stream, 0);
- Console.Write(" --> ");
- cce.NonNull((Expr)e.Value).Emit(stream);
- Console.WriteLine();
- }
- }
- }
-
- return map;
- }
- }
-
- /// <summary>
- /// Return a collection of blocks that are reachable from the block passed as a parameter.
- /// The block must be defined in the current implementation
- /// </summary>
- public ICollection<Block/*!*/> GetConnectedComponents(Block startingBlock) {
- Contract.Requires(startingBlock != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<Block>>(), true));
- Contract.Assert(this.Blocks.Contains(startingBlock));
-
- if (!this.BlockPredecessorsComputed)
- ComputeStronglyConnectedComponents();
-
-#if DEBUG_PRINT
- System.Console.WriteLine("* Strongly connected components * \n{0} \n ** ", scc);
-#endif
-
- foreach (ICollection<Block/*!*/> component in cce.NonNull(this.scc)) {
- foreach (Block/*!*/ b in component) {
- Contract.Assert(b != null);
- if (b == startingBlock) // We found the compontent that owns the startingblock
- {
- return component;
- }
- }
- }
-
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // if we are here, it means that the block is not in one of the components. This is an error.
- }
-
- /// <summary>
- /// Compute the strongly connected compontents of the blocks in the implementation.
- /// As a side effect, it also computes the "predecessor" relation for the block in the implementation
- /// </summary>
- override public void ComputeStronglyConnectedComponents() {
- if (!this.BlockPredecessorsComputed)
- ComputePredecessorsForBlocks();
-
- Adjacency<Block/*!*/> next = new Adjacency<Block/*!*/>(Successors);
- Adjacency<Block/*!*/> prev = new Adjacency<Block/*!*/>(Predecessors);
-
- this.scc = new StronglyConnectedComponents<Block/*!*/>(this.Blocks, next, prev);
- scc.Compute();
-
-
- foreach (Block/*!*/ block in this.Blocks) {
- Contract.Assert(block != null);
- block.Predecessors = new List<Block>();
- }
-
- }
-
- /// <summary>
- /// Reset the abstract stated computed before
- /// </summary>
- override public void ResetAbstractInterpretationState() {
- foreach (Block/*!*/ b in this.Blocks) {
- Contract.Assert(b != null);
- b.ResetAbstractInterpretationState();
- }
- }
-
- /// <summary>
- /// A private method used as delegate for the strongly connected components.
- /// It return, given a node, the set of its successors
- /// </summary>
- private IEnumerable/*<Block!>*//*!*/ Successors(Block node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
-
- GotoCmd gotoCmd = node.TransferCmd as GotoCmd;
-
- if (gotoCmd != null) { // If it is a gotoCmd
- Contract.Assert(gotoCmd.labelTargets != null);
-
- return gotoCmd.labelTargets;
- } else { // otherwise must be a ReturnCmd
- Contract.Assert(node.TransferCmd is ReturnCmd);
-
- return new List<Block/*!*/>();
- }
- }
-
- /// <summary>
- /// A private method used as delegate for the strongly connected components.
- /// It return, given a node, the set of its predecessors
- /// </summary>
- private IEnumerable/*<Block!>*//*!*/ Predecessors(Block node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<IEnumerable>() != null);
-
- Contract.Assert(this.BlockPredecessorsComputed);
-
- return node.Predecessors;
- }
-
- /// <summary>
- /// Compute the predecessor informations for the blocks
- /// </summary>
- public void ComputePredecessorsForBlocks() {
- foreach (Block b in this.Blocks) {
- b.Predecessors = new List<Block>();
- }
- foreach (Block b in this.Blocks) {
- GotoCmd gtc = b.TransferCmd as GotoCmd;
- if (gtc != null) {
- Contract.Assert(gtc.labelTargets != null);
- foreach (Block/*!*/ dest in gtc.labelTargets) {
- Contract.Assert(dest != null);
- dest.Predecessors.Add(b);
- }
- }
- }
- this.BlockPredecessorsComputed = true;
- }
-
- public void PruneUnreachableBlocks() {
- ArrayList /*Block!*/ visitNext = new ArrayList /*Block!*/ ();
- List<Block/*!*/> reachableBlocks = new List<Block/*!*/>();
- HashSet<Block> reachable = new HashSet<Block>(); // the set of elements in "reachableBlocks"
-
- visitNext.Add(this.Blocks[0]);
- while (visitNext.Count != 0) {
- Block b = cce.NonNull((Block)visitNext[visitNext.Count - 1]);
- visitNext.RemoveAt(visitNext.Count - 1);
- if (!reachable.Contains(b)) {
- reachableBlocks.Add(b);
- reachable.Add(b);
- if (b.TransferCmd is GotoCmd) {
- if (CommandLineOptions.Clo.PruneInfeasibleEdges) {
- foreach (Cmd/*!*/ s in b.Cmds) {
- Contract.Assert(s != null);
- if (s is PredicateCmd) {
- LiteralExpr e = ((PredicateCmd)s).Expr as LiteralExpr;
- if (e != null && e.IsFalse) {
- // This statement sequence will never reach the end, because of this "assume false" or "assert false".
- // Hence, it does not reach its successors.
- b.TransferCmd = new ReturnCmd(b.TransferCmd.tok);
- goto NEXT_BLOCK;
- }
- }
- }
- }
- // it seems that the goto statement at the end may be reached
- foreach (Block succ in cce.NonNull((GotoCmd)b.TransferCmd).labelTargets) {
- Contract.Assume(succ != null);
- visitNext.Add(succ);
- }
- }
- }
- NEXT_BLOCK: {
- }
- }
-
- this.Blocks = reachableBlocks;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitImplementation(this);
- }
-
- public void FreshenCaptureStates() {
-
- // Assume commands with the "captureState" attribute allow model states to be
- // captured for error reporting.
- // Some program transformations, such as loop unrolling, duplicate parts of the
- // program, leading to "capture-state-assumes" being duplicated. This leads
- // to ambiguity when getting a state from the model.
- // This method replaces the key of every "captureState" attribute with something
- // unique
-
- int FreshCounter = 0;
- foreach(var b in Blocks) {
- List<Cmd> newCmds = new List<Cmd>();
- for (int i = 0; i < b.Cmds.Count(); i++) {
- var a = b.Cmds[i] as AssumeCmd;
- if (a != null && (QKeyValue.FindStringAttribute(a.Attributes, "captureState") != null)) {
- string StateName = QKeyValue.FindStringAttribute(a.Attributes, "captureState");
- newCmds.Add(new AssumeCmd(Token.NoToken, a.Expr, FreshenCaptureState(a.Attributes, FreshCounter)));
- FreshCounter++;
- }
- else {
- newCmds.Add(b.Cmds[i]);
- }
- }
- b.Cmds = newCmds;
- }
- }
-
- private QKeyValue FreshenCaptureState(QKeyValue Attributes, int FreshCounter) {
- // Returns attributes identical to Attributes, but:
- // - reversed (for ease of implementation; should not matter)
- // - with the value for "captureState" replaced by a fresh value
- Contract.Requires(QKeyValue.FindStringAttribute(Attributes, "captureState") != null);
- string FreshValue = QKeyValue.FindStringAttribute(Attributes, "captureState") + "$renamed$" + Name + "$" + FreshCounter;
-
- QKeyValue result = null;
- while (Attributes != null) {
- if (Attributes.Key.Equals("captureState")) {
- result = new QKeyValue(Token.NoToken, Attributes.Key, new List<object>() { FreshValue }, result);
- } else {
- result = new QKeyValue(Token.NoToken, Attributes.Key, Attributes.Params, result);
- }
- Attributes = Attributes.Next;
- }
- return result;
- }
-
- }
-
-
- public class TypedIdent : Absy {
- public const string NoName = "";
-
- private string/*!*/ _name;
-
- public string/*!*/ Name {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return this._name;
- }
- set {
- Contract.Requires(value != null);
- this._name = value;
- }
- }
-
- private Type/*!*/ _type;
-
- public Type/*!*/ Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- return this._type;
- }
- set {
- Contract.Requires(value != null);
- this._type = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._name != null);
- Contract.Invariant(this._type != null);
- }
-
- public Expr WhereExpr;
- // [NotDelayed]
- public TypedIdent(IToken/*!*/ tok, string/*!*/ name, Type/*!*/ type)
- : this(tok, name, type, null) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(type != null);
- Contract.Ensures(this.WhereExpr == null); //PM: needed to verify BoogiePropFactory.FreshBoundVariable
- //:this(tok, name, type, null); // here for aesthetic reasons
- }
- // [NotDelayed]
- public TypedIdent(IToken/*!*/ tok, string/*!*/ name, Type/*!*/ type, Expr whereExpr)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(type != null);
- Contract.Ensures(this.WhereExpr == whereExpr);
- this._name = name;
- this._type = type;
- this.WhereExpr = whereExpr;
- }
- public bool HasName {
- get {
- return this.Name != NoName;
- }
- }
- public void Emit(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- stream.SetToken(this);
- stream.push();
- if (this.Name != NoName) {
- stream.Write("{0}: ", TokenTextWriter.SanitizeIdentifier(this.Name));
- }
- this.Type.Emit(stream);
- if (this.WhereExpr != null) {
- stream.sep();
- stream.Write(" where ");
- this.WhereExpr.Emit(stream);
- }
- stream.pop();
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- // NOTE: WhereExpr needs to be resolved by the caller, because the caller must provide a modified ResolutionContext
- this.Type = this.Type.ResolveType(rc);
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- // type variables can occur when working with polymorphic functions/procedures
- // if (!this.Type.IsClosed)
- // tc.Error(this, "free variables in type of an identifier: {0}",
- // this.Type.FreeVariables);
- if (this.WhereExpr != null) {
- this.WhereExpr.Typecheck(tc);
- Contract.Assert(this.WhereExpr.Type != null); // follows from postcondition of Expr.Typecheck
- if (!this.WhereExpr.Type.Unify(Type.Bool)) {
- tc.Error(this, "where clauses must be of type bool");
- }
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitTypedIdent(this);
- }
- }
-
- #region Helper methods for generic Sequences
-
- public static class TypeVariableSeqAlgorithms {
- public static void AppendWithoutDups(this List<TypeVariable> tvs, List<TypeVariable> s1) {
- Contract.Requires(s1 != null);
- for (int i = 0; i < s1.Count; i++) {
- TypeVariable/*!*/ next = s1[i];
- Contract.Assert(next != null);
- if (!tvs.Contains(next))
- tvs.Add(next);
- }
- }
- }
-
- public static class Emitter {
-
- public static void Emit(this List<Declaration/*!*/>/*!*/ decls, TokenTextWriter stream) {
- Contract.Requires(stream != null);
- Contract.Requires(cce.NonNullElements(decls));
- bool first = true;
- foreach (Declaration d in decls) {
- if (d == null)
- continue;
- if (first) {
- first = false;
- } else {
- stream.WriteLine();
- }
- d.Emit(stream, 0);
- }
- }
-
- public static void Emit(this List<String> ss, TokenTextWriter stream) {
- Contract.Requires(stream != null);
- string sep = "";
- foreach (string/*!*/ s in ss) {
- Contract.Assert(s != null);
- stream.Write(sep);
- sep = ", ";
- stream.Write(s);
- }
- }
-
- public static void Emit(this IList<Expr> ts, TokenTextWriter stream) {
- Contract.Requires(stream != null);
- string sep = "";
- stream.push();
- foreach (Expr/*!*/ e in ts) {
- Contract.Assert(e != null);
- stream.Write(sep);
- sep = ", ";
- stream.sep();
- e.Emit(stream);
- }
- stream.pop();
- }
-
- public static void Emit(this List<IdentifierExpr> ids, TokenTextWriter stream, bool printWhereComments) {
- Contract.Requires(stream != null);
- string sep = "";
- foreach (IdentifierExpr/*!*/ e in ids) {
- Contract.Assert(e != null);
- stream.Write(sep);
- sep = ", ";
- e.Emit(stream);
-
- if (printWhereComments && e.Decl != null && e.Decl.TypedIdent.WhereExpr != null) {
- stream.Write(" /* where ");
- e.Decl.TypedIdent.WhereExpr.Emit(stream);
- stream.Write(" */");
- }
- }
- }
-
- public static void Emit(this List<Variable> vs, TokenTextWriter stream, bool emitAttributes) {
- Contract.Requires(stream != null);
- string sep = "";
- stream.push();
- foreach (Variable/*!*/ v in vs) {
- Contract.Assert(v != null);
- stream.Write(sep);
- sep = ", ";
- stream.sep();
- v.EmitVitals(stream, 0, emitAttributes);
- }
- stream.pop();
- }
-
- public static void Emit(this List<Type> tys, TokenTextWriter stream, string separator) {
- Contract.Requires(separator != null);
- Contract.Requires(stream != null);
- string sep = "";
- foreach (Type/*!*/ v in tys) {
- Contract.Assert(v != null);
- stream.Write(sep);
- sep = separator;
- v.Emit(stream);
- }
- }
-
- public static void Emit(this List<TypeVariable> tvs, TokenTextWriter stream, string separator) {
- Contract.Requires(separator != null);
- Contract.Requires(stream != null);
- string sep = "";
- foreach (TypeVariable/*!*/ v in tvs) {
- Contract.Assert(v != null);
- stream.Write(sep);
- sep = separator;
- v.Emit(stream);
- }
- }
-
- }
- #endregion
-
-
- #region Regular Expressions
- // a data structure to recover the "program structure" from the flow graph
- public abstract class RE : Cmd {
- public RE()
- : base(Token.NoToken) {
- }
- public override void AddAssignedVariables(List<Variable> vars) {
- //Contract.Requires(vars != null);
- throw new NotImplementedException();
- }
- }
- public class AtomicRE : RE {
- private Block/*!*/ _b;
-
- public Block b
- {
- get
- {
- Contract.Ensures(Contract.Result<Block>() != null);
- return this._b;
- }
- set
- {
- Contract.Requires(value != null);
- this._b = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._b != null);
- }
-
- public AtomicRE(Block block) {
- Contract.Requires(block != null);
- this._b = block;
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- b.Resolve(rc);
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- b.Typecheck(tc);
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- b.Emit(stream, level);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitAtomicRE(this);
- }
- }
- public abstract class CompoundRE : RE {
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- return;
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- return;
- }
- }
- public class Sequential : CompoundRE {
- private RE/*!*/ _first;
-
- public RE/*!*/ first {
- get {
- Contract.Ensures(Contract.Result<RE>() != null);
- return this._first;
- }
- set {
- Contract.Requires(value != null);
- this._first = value;
- }
- }
-
- private RE/*!*/ _second;
-
- public RE/*!*/ second {
- get {
- Contract.Ensures(Contract.Result<RE>() != null);
- return this._second;
- }
- set {
- Contract.Requires(value != null);
- this._second = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._first != null);
- Contract.Invariant(this._second != null);
- }
-
- public Sequential(RE first, RE second) {
- Contract.Requires(first != null);
- Contract.Requires(second != null);
- this._first = first;
- this._second = second;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.WriteLine();
- stream.WriteLine("{0};", Indent(stream.UseForComputingChecksums ? 0 : level));
- first.Emit(stream, level + 1);
- second.Emit(stream, level + 1);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitSequential(this);
- }
- }
- public class Choice : CompoundRE {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._rs != null);
- }
-
- private List<RE>/*!*/ _rs;
-
- public List<RE>/*!*/ rs { //Rename this (and _rs) if possible
- get {
- Contract.Ensures(Contract.Result<List<RE>>() != null);
- return this._rs;
- }
- set {
- Contract.Requires(value != null);
- this._rs = value;
- }
- }
-
- public Choice(List<RE> operands) {
- Contract.Requires(operands != null);
- this._rs = operands;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.WriteLine();
- stream.WriteLine("{0}[]", Indent(stream.UseForComputingChecksums ? 0 : level));
- foreach (RE/*!*/ r in rs) {
- Contract.Assert(r != null);
- r.Emit(stream, level + 1);
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitChoice(this);
- }
- }
- public class DAG2RE {
- public static RE Transform(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<RE>() != null);
- TransferCmd tc = b.TransferCmd;
- if (tc is ReturnCmd) {
- return new AtomicRE(b);
- } else if (tc is GotoCmd) {
- GotoCmd/*!*/ g = (GotoCmd)tc;
- Contract.Assert(g != null);
- Contract.Assume(g.labelTargets != null);
- if (g.labelTargets.Count == 1) {
- return new Sequential(new AtomicRE(b), Transform(cce.NonNull(g.labelTargets[0])));
- } else {
- List<RE> rs = new List<RE>();
- foreach (Block/*!*/ target in g.labelTargets) {
- Contract.Assert(target != null);
- RE r = Transform(target);
- rs.Add(r);
- }
- RE second = new Choice(rs);
- return new Sequential(new AtomicRE(b), second);
- }
- } else {
- Contract.Assume(false);
- throw new cce.UnreachableException();
- }
- }
- }
-
- #endregion
-
- // NOTE: This class is here for convenience, since this file's
- // classes are used pretty much everywhere.
-
- public class BoogieDebug {
- public static bool DoPrinting = false;
-
- public static void Write(string format, params object[] args) {
- Contract.Requires(args != null);
- Contract.Requires(format != null);
- if (DoPrinting) {
- Console.Error.Write(format, args);
- }
- }
-
- public static void WriteLine(string format, params object[] args) {
- Contract.Requires(args != null);
- Contract.Requires(format != null);
- if (DoPrinting) {
- Console.Error.WriteLine(format, args);
- }
- }
-
- public static void WriteLine() {
- if (DoPrinting) {
- Console.Error.WriteLine();
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// BoogiePL - Absy.cs
+//---------------------------------------------------------------------------------------------
+namespace Microsoft.Boogie.AbstractInterpretation {
+ using System.Diagnostics;
+ using System.Diagnostics.Contracts;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public class CallSite {
+ public readonly Implementation/*!*/ Impl;
+ public readonly Block/*!*/ Block;
+ public readonly int Statement; // invariant: Block[Statement] is CallCmd
+ public readonly ProcedureSummaryEntry/*!*/ SummaryEntry;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Impl != null);
+ Contract.Invariant(Block != null);
+ Contract.Invariant(SummaryEntry != null);
+ }
+
+
+ public CallSite(Implementation impl, Block b, int stmt, ProcedureSummaryEntry summaryEntry) {
+ Contract.Requires(summaryEntry != null);
+ Contract.Requires(b != null);
+ Contract.Requires(impl != null);
+ this.Impl = impl;
+ this.Block = b;
+ this.Statement = stmt;
+ this.SummaryEntry = summaryEntry;
+ }
+ }
+
+ public class ProcedureSummaryEntry {
+
+ private HashSet<CallSite>/*!*/ _returnPoints; // whenever OnExit changes, we start analysis again at all the ReturnPoints
+
+ public HashSet<CallSite>/*!*/ ReturnPoints {
+ get {
+ Contract.Ensures(Contract.Result<HashSet<CallSite>>() != null);
+ return this._returnPoints;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._returnPoints = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._returnPoints != null);
+ }
+
+ public ProcedureSummaryEntry() {
+ this._returnPoints = new HashSet<CallSite>();
+ }
+
+ } // class
+
+ public class ProcedureSummary : ArrayList/*<ProcedureSummaryEntry>*/
+ {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(
+ !IsReadOnly && !IsFixedSize);
+ }
+
+ public new ProcedureSummaryEntry/*!*/ this[int i] {
+ get {
+ Contract.Requires(0 <= i && i < Count);
+ Contract.Ensures(Contract.Result<ProcedureSummaryEntry>() != null);
+ return cce.NonNull((ProcedureSummaryEntry/*!*/)base[i]);
+ }
+ }
+
+ } // class
+} // namespace
+
+namespace Microsoft.Boogie {
+ using System;
+ using System.Linq;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Collections.Generic;
+ using System.Collections.ObjectModel;
+ using System.Diagnostics.Contracts;
+ using Microsoft.Boogie.AbstractInterpretation;
+ using Microsoft.Boogie.GraphUtil;
+ using Set = GSet<object>;
+
+ [ContractClass(typeof(AbsyContracts))]
+ public abstract class Absy {
+ private IToken/*!*/ _tok;
+ private int uniqueId;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._tok != null);
+ }
+
+ public IToken tok { //Rename this property and "_tok" if possible
+ get {
+ Contract.Ensures(Contract.Result<IToken>() != null);
+ return this._tok;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._tok = value;
+ }
+ }
+
+ public int Line {
+ get {
+ return tok != null ? tok.line : -1;
+ }
+ }
+ public int Col {
+ get {
+ return tok != null ? tok.col : -1;
+ }
+ }
+
+ public Absy(IToken tok) {
+ Contract.Requires(tok != null);
+ this._tok = tok;
+ this.uniqueId = System.Threading.Interlocked.Increment(ref CurrentAbsyNodeId);
+ }
+
+ private static int CurrentAbsyNodeId = -1;
+
+ // We uniquely number every AST node to make them
+ // suitable for our implementation of functional maps.
+ //
+ public int UniqueId {
+ get {
+ return this.uniqueId;
+ }
+ }
+
+ private const int indent_size = 2;
+ protected static string Indent(int level) {
+ return new string(' ', (indent_size * level));
+ }
+ [NeedsContracts]
+ public abstract void Resolve(ResolutionContext/*!*/ rc);
+
+ /// <summary>
+ /// Requires the object to have been successfully resolved.
+ /// </summary>
+ /// <param name="tc"></param>
+ [NeedsContracts]
+ public abstract void Typecheck(TypecheckingContext/*!*/ tc);
+ /// <summary>
+ /// Intorduced this so the uniqueId is not the same on a cloned object.
+ /// </summary>
+ /// <param name="tc"></param>
+ public virtual Absy Clone() {
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ Absy/*!*/ result = cce.NonNull((Absy/*!*/)this.MemberwiseClone());
+ result.uniqueId = System.Threading.Interlocked.Increment(ref CurrentAbsyNodeId); // BUGBUG??
+
+ if (InternalNumberedMetadata != null) {
+ // This should probably use the lock
+ result.InternalNumberedMetadata = new List<Object>(this.InternalNumberedMetadata);
+ }
+
+ return result;
+ }
+
+ public virtual Absy StdDispatch(StandardVisitor visitor) {
+ Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ System.Diagnostics.Debug.Fail("Unknown Absy node type: " + this.GetType());
+ throw new System.NotImplementedException();
+ }
+
+ #region numberedmetadata
+ // Implementation of Numbered Metadata
+ // This allows any number of arbitrary objects to be
+ // associated with an instance of an Absy at run time
+ // in a type safe manner using an integer as a key.
+
+ // We could use a dictionary but we use a List for look up speed
+ // For this to work well the user needs to use small integers as
+ // keys. The list is created lazily to minimise memory overhead.
+ private volatile List<Object> InternalNumberedMetadata = null;
+
+ // The lock exists to ensure that InternalNumberedMetadata is a singleton
+ // for every instance of this class.
+ // It is static to minimise the memory overhead (we don't want a lock per instance).
+ private static readonly Object NumberedMetadataLock = new object();
+
+ /// <summary>
+ /// Gets the number of meta data objects associated with this instance
+ /// </summary>
+ /// <value>The numbered meta data count.</value>
+ public int NumberedMetaDataCount
+ {
+ get { return InternalNumberedMetadata == null? 0: InternalNumberedMetadata.Count; }
+ }
+
+ /// <summary>
+ /// Gets an IEnumerable over the numbered metadata associated
+ /// with this instance.
+ /// </summary>
+ /// <value>
+ /// The numbered meta data enumerable that looks like the Enumerable
+ /// of a dictionary.
+ /// </value>
+ public IEnumerable<KeyValuePair<int, Object>> NumberedMetadata
+ {
+ get {
+ if (InternalNumberedMetadata == null)
+ return Enumerable.Empty<KeyValuePair<int,Object>>();
+ else
+ return InternalNumberedMetadata.Select((v, index) => new KeyValuePair<int, Object>(index, v));
+ }
+ }
+
+ /// <summary>
+ /// Gets the metatdata at specified index.
+ /// ArgumentOutOfRange exception is raised if it is not available.
+ /// InvalidCastExcpetion is raised if the metadata is available but the wrong type was requested.
+ /// </summary>
+ /// <returns>The stored metadata of type T</returns>
+ /// <param name="index">The index of the metadata</param>
+ /// <typeparam name="T">The type of the metadata object required</typeparam>
+ public T GetMetadata<T>(int index) {
+ // We aren't using NumberedMetadataLock for speed. Perhaps we should be using it?
+ if (InternalNumberedMetadata == null)
+ throw new ArgumentOutOfRangeException();
+
+ if (InternalNumberedMetadata[index] is T)
+ return (T) InternalNumberedMetadata[index];
+ else if (InternalNumberedMetadata[index] == null) {
+ throw new InvalidCastException("Numbered metadata " + index +
+ " is null which cannot be casted to " + typeof(T));
+ }
+ else {
+ throw new InvalidCastException("Numbered metadata " + index +
+ " is of type " + InternalNumberedMetadata[index].GetType() +
+ " rather than requested type " + typeof(T));
+ }
+ }
+
+ private void InitialiseNumberedMetadata() {
+ // Ensure InternalNumberedMetadata is a singleton
+ if (InternalNumberedMetadata == null) {
+ lock (NumberedMetadataLock) {
+ if (InternalNumberedMetadata == null)
+ InternalNumberedMetadata = new List<Object>();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Sets the metadata for this instace at a specified index.
+ /// </summary>
+ /// <param name="index">The index of the metadata</param>
+ /// <param name="value">The value to set</param>
+ /// <typeparam name="T">The type of value</typeparam>
+ public void SetMetadata<T>(int index, T value) {
+ InitialiseNumberedMetadata();
+
+ if (index < 0)
+ throw new IndexOutOfRangeException();
+
+ lock (NumberedMetadataLock) {
+ if (index < InternalNumberedMetadata.Count)
+ InternalNumberedMetadata[index] = value;
+ else {
+ // Make sure expansion only happens once whilst we pad
+ if (InternalNumberedMetadata.Capacity <= index) {
+ // Use the next available power of 2
+ InternalNumberedMetadata.Capacity = (int) Math.Pow(2, Math.Ceiling(Math.Log(index+1,2)));
+ }
+
+ // Pad with nulls
+ while (InternalNumberedMetadata.Count < index)
+ InternalNumberedMetadata.Add (null);
+
+ InternalNumberedMetadata.Add(value);
+ Debug.Assert(InternalNumberedMetadata.Count == (index + 1));
+ }
+ }
+ }
+
+ #endregion
+
+ }
+
+ [ContractClassFor(typeof(Absy))]
+ public abstract class AbsyContracts : Absy {
+ public override void Resolve(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ throw new NotImplementedException();
+ }
+ public AbsyContracts() :base(null){
+
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ Contract.Requires(tc != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public interface IPotentialErrorNode<out TGet>
+ {
+ TGet ErrorData
+ {
+ get;
+ }
+ }
+
+ public interface IPotentialErrorNode<out TGet, in TSet> : IPotentialErrorNode<TGet>
+ {
+ new TSet ErrorData
+ {
+ set;
+ }
+ }
+
+ public class Program : Absy {
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(this.topLevelDeclarations));
+ Contract.Invariant(cce.NonNullElements(this.globalVariablesCache, true));
+ }
+
+ public Program()
+ : base(Token.NoToken) {
+ this.topLevelDeclarations = new List<Declaration>();
+ }
+
+ public void Emit(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ stream.SetToken(this);
+ this.topLevelDeclarations.Emit(stream);
+ }
+
+ public void ProcessDatatypeConstructors() {
+ Dictionary<string, DatatypeConstructor> constructors = new Dictionary<string, DatatypeConstructor>();
+ List<Declaration> prunedTopLevelDeclarations = new List<Declaration>();
+ foreach (Declaration decl in TopLevelDeclarations) {
+ Function func = decl as Function;
+ if (func == null || !QKeyValue.FindBoolAttribute(decl.Attributes, "constructor")) {
+ prunedTopLevelDeclarations.Add(decl);
+ continue;
+ }
+ if (constructors.ContainsKey(func.Name)) continue;
+ DatatypeConstructor constructor = new DatatypeConstructor(func);
+ constructors.Add(func.Name, constructor);
+ prunedTopLevelDeclarations.Add(constructor);
+ }
+ ClearTopLevelDeclarations();
+ AddTopLevelDeclarations(prunedTopLevelDeclarations);
+
+ foreach (DatatypeConstructor f in constructors.Values) {
+ for (int i = 0; i < f.InParams.Count; i++) {
+ DatatypeSelector selector = new DatatypeSelector(f, i);
+ f.selectors.Add(selector);
+ AddTopLevelDeclaration(selector);
+ }
+ DatatypeMembership membership = new DatatypeMembership(f);
+ f.membership = membership;
+ AddTopLevelDeclaration(membership);
+ }
+ }
+
+ /// <summary>
+ /// Returns the number of name resolution errors.
+ /// </summary>
+ /// <returns></returns>
+ public int Resolve() {
+ return Resolve((IErrorSink)null);
+ }
+
+ public int Resolve(IErrorSink errorSink) {
+ ResolutionContext rc = new ResolutionContext(errorSink);
+ Resolve(rc);
+ return rc.ErrorCount;
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Helpers.ExtraTraceInformation("Starting resolution");
+
+ foreach (var d in TopLevelDeclarations) {
+ d.Register(rc);
+ }
+
+ ResolveTypes(rc);
+
+ var prunedTopLevelDecls = new List<Declaration/*!*/>();
+ foreach (var d in TopLevelDeclarations) {
+ if (QKeyValue.FindBoolAttribute(d.Attributes, "ignore")) {
+ continue;
+ }
+ // resolve all the non-type-declarations
+ if (!(d is TypeCtorDecl || d is TypeSynonymDecl)) {
+ int e = rc.ErrorCount;
+ d.Resolve(rc);
+ if (CommandLineOptions.Clo.OverlookBoogieTypeErrors && rc.ErrorCount != e && d is Implementation) {
+ // ignore this implementation
+ System.Console.WriteLine("Warning: Ignoring implementation {0} because of translation resolution errors", ((Implementation)d).Name);
+ rc.ErrorCount = e;
+ continue;
+ }
+ }
+ prunedTopLevelDecls.Add(d);
+ }
+ ClearTopLevelDeclarations();
+ AddTopLevelDeclarations(prunedTopLevelDecls);
+
+ foreach (var v in Variables) {
+ v.ResolveWhere(rc);
+ }
+ }
+
+ private void ResolveTypes(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ // first resolve type constructors
+ foreach (var d in TopLevelDeclarations.OfType<TypeCtorDecl>()) {
+ if (!QKeyValue.FindBoolAttribute(d.Attributes, "ignore"))
+ d.Resolve(rc);
+ }
+
+ // collect type synonym declarations
+ List<TypeSynonymDecl/*!*/>/*!*/ synonymDecls = new List<TypeSynonymDecl/*!*/>();
+ foreach (var d in TopLevelDeclarations.OfType<TypeSynonymDecl>()) {
+ Contract.Assert(d != null);
+ if (!QKeyValue.FindBoolAttribute(d.Attributes, "ignore"))
+ synonymDecls.Add((TypeSynonymDecl)d);
+ }
+
+ // then resolve the type synonyms by a simple
+ // fixed-point iteration
+ TypeSynonymDecl.ResolveTypeSynonyms(synonymDecls, rc);
+ }
+
+ public int Typecheck() {
+ return this.Typecheck((IErrorSink)null);
+ }
+
+ public int Typecheck(IErrorSink errorSink) {
+ TypecheckingContext tc = new TypecheckingContext(errorSink);
+ Typecheck(tc);
+ return tc.ErrorCount;
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ Helpers.ExtraTraceInformation("Starting typechecking");
+
+ int oldErrorCount = tc.ErrorCount;
+ foreach (var d in TopLevelDeclarations) {
+ d.Typecheck(tc);
+ }
+
+ if (oldErrorCount == tc.ErrorCount) {
+ // check whether any type proxies have remained uninstantiated
+ TypeAmbiguitySeeker/*!*/ seeker = new TypeAmbiguitySeeker(tc);
+ foreach (var d in TopLevelDeclarations) {
+ seeker.Visit(d);
+ }
+ }
+ }
+
+ public override Absy Clone()
+ {
+ var cloned = (Program)base.Clone();
+ cloned.topLevelDeclarations = new List<Declaration>();
+ cloned.AddTopLevelDeclarations(topLevelDeclarations);
+ return cloned;
+ }
+
+ [Rep]
+ private List<Declaration/*!*/>/*!*/ topLevelDeclarations;
+
+ public IEnumerable<Declaration> TopLevelDeclarations
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Declaration>>()));
+ return topLevelDeclarations.AsReadOnly();
+ }
+
+ set
+ {
+ Contract.Requires(value != null);
+ // materialize the decls, in case there is any dependency
+ // back on topLevelDeclarations
+ var v = value.ToList();
+ // remove null elements
+ v.RemoveAll(d => (d == null));
+ // now clear the decls
+ ClearTopLevelDeclarations();
+ // and add the values
+ AddTopLevelDeclarations(v);
+ }
+ }
+
+ public void AddTopLevelDeclaration(Declaration decl)
+ {
+ Contract.Requires(!TopLevelDeclarationsAreFrozen);
+ Contract.Requires(decl != null);
+
+ topLevelDeclarations.Add(decl);
+ this.globalVariablesCache = null;
+ }
+
+ public void AddTopLevelDeclarations(IEnumerable<Declaration> decls)
+ {
+ Contract.Requires(!TopLevelDeclarationsAreFrozen);
+ Contract.Requires(cce.NonNullElements(decls));
+
+ topLevelDeclarations.AddRange(decls);
+ this.globalVariablesCache = null;
+ }
+
+ public void RemoveTopLevelDeclaration(Declaration decl)
+ {
+ Contract.Requires(!TopLevelDeclarationsAreFrozen);
+
+ topLevelDeclarations.Remove(decl);
+ this.globalVariablesCache = null;
+ }
+
+ public void RemoveTopLevelDeclarations(Predicate<Declaration> match)
+ {
+ Contract.Requires(!TopLevelDeclarationsAreFrozen);
+
+ topLevelDeclarations.RemoveAll(match);
+ this.globalVariablesCache = null;
+ }
+
+ public void ClearTopLevelDeclarations()
+ {
+ Contract.Requires(!TopLevelDeclarationsAreFrozen);
+
+ topLevelDeclarations.Clear();
+ this.globalVariablesCache = null;
+ }
+
+ bool topLevelDeclarationsAreFrozen;
+ public bool TopLevelDeclarationsAreFrozen { get { return topLevelDeclarationsAreFrozen; } }
+ public void FreezeTopLevelDeclarations()
+ {
+ topLevelDeclarationsAreFrozen = true;
+ }
+
+ Dictionary<string, Implementation> implementationsCache;
+ public IEnumerable<Implementation> Implementations
+ {
+ get
+ {
+ if (implementationsCache != null)
+ {
+ return implementationsCache.Values;
+ }
+ var result = TopLevelDeclarations.OfType<Implementation>();
+ if (topLevelDeclarationsAreFrozen)
+ {
+ implementationsCache = result.ToDictionary(p => p.Id);
+ }
+ return result;
+ }
+ }
+
+ public Implementation FindImplementation(string id)
+ {
+ Implementation result = null;
+ if (implementationsCache != null && implementationsCache.TryGetValue(id, out result))
+ {
+ return result;
+ }
+ else
+ {
+ return Implementations.FirstOrDefault(i => i.Id == id);
+ }
+ }
+
+ List<Axiom> axiomsCache;
+ public IEnumerable<Axiom> Axioms
+ {
+ get
+ {
+ if (axiomsCache != null)
+ {
+ return axiomsCache;
+ }
+ var result = TopLevelDeclarations.OfType<Axiom>();
+ if (topLevelDeclarationsAreFrozen)
+ {
+ axiomsCache = result.ToList();
+ }
+ return result;
+ }
+ }
+
+ Dictionary<string, Procedure> proceduresCache;
+ public IEnumerable<Procedure> Procedures
+ {
+ get
+ {
+ if (proceduresCache != null)
+ {
+ return proceduresCache.Values;
+ }
+ var result = TopLevelDeclarations.OfType<Procedure>();
+ if (topLevelDeclarationsAreFrozen)
+ {
+ proceduresCache = result.ToDictionary(p => p.Name);
+ }
+ return result;
+ }
+ }
+
+ public Procedure FindProcedure(string name)
+ {
+ Procedure result = null;
+ if (proceduresCache != null && proceduresCache.TryGetValue(name, out result))
+ {
+ return result;
+ }
+ else
+ {
+ return Procedures.FirstOrDefault(p => p.Name == name);
+ }
+ }
+
+ Dictionary<string, Function> functionsCache;
+ public IEnumerable<Function> Functions
+ {
+ get
+ {
+ if (functionsCache != null)
+ {
+ return functionsCache.Values;
+ }
+ var result = TopLevelDeclarations.OfType<Function>();
+ if (topLevelDeclarationsAreFrozen)
+ {
+ functionsCache = result.ToDictionary(f => f.Name);
+ }
+ return result;
+ }
+ }
+
+ public Function FindFunction(string name)
+ {
+ Function result = null;
+ if (functionsCache != null && functionsCache.TryGetValue(name, out result))
+ {
+ return result;
+ }
+ else
+ {
+ return Functions.FirstOrDefault(f => f.Name == name);
+ }
+ }
+
+ public IEnumerable<Variable> Variables
+ {
+ get
+ {
+ return TopLevelDeclarations.OfType<Variable>();
+ }
+ }
+
+ public IEnumerable<Constant> Constants
+ {
+ get
+ {
+ return TopLevelDeclarations.OfType<Constant>();
+ }
+ }
+
+ private IEnumerable<GlobalVariable/*!*/> globalVariablesCache = null;
+ public List<GlobalVariable/*!*/>/*!*/ GlobalVariables
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<GlobalVariable>>()));
+
+ if (globalVariablesCache == null)
+ globalVariablesCache = TopLevelDeclarations.OfType<GlobalVariable>();
+
+ return new List<GlobalVariable>(globalVariablesCache);
+ }
+ }
+
+ public readonly ISet<string> NecessaryAssumes = new HashSet<string>();
+
+ public IEnumerable<Block> Blocks()
+ {
+ return Implementations.Select(Item => Item.Blocks).SelectMany(Item => Item);
+ }
+
+ public void ComputeStronglyConnectedComponents() {
+ foreach (var d in this.TopLevelDeclarations) {
+ d.ComputeStronglyConnectedComponents();
+ }
+ }
+
+ /// <summary>
+ /// Reset the abstract stated computed before
+ /// </summary>
+ public void ResetAbstractInterpretationState() {
+ foreach (var d in this.TopLevelDeclarations) {
+ d.ResetAbstractInterpretationState();
+ }
+ }
+
+ public void UnrollLoops(int n, bool uc) {
+ Contract.Requires(0 <= n);
+ foreach (var impl in Implementations) {
+ if (impl.Blocks != null && impl.Blocks.Count > 0) {
+ cce.BeginExpose(impl);
+ {
+ Block start = impl.Blocks[0];
+ Contract.Assume(start != null);
+ Contract.Assume(cce.IsConsistent(start));
+ impl.Blocks = LoopUnroll.UnrollLoops(start, n, uc);
+ impl.FreshenCaptureStates();
+ }
+ cce.EndExpose();
+ }
+ }
+ }
+
+
+ /// <summary>
+ /// Finds blocks that break out of a loop in NaturalLoops(header, backEdgeNode)
+ /// </summary>
+ /// <param name="header"></param>
+ /// <param name="backEdgeNode"></param>
+ /// <returns></returns>
+ private HashSet<Block> GetBreakBlocksOfLoop(Block header, Block backEdgeNode, Graph<Block/*!*/>/*!*/ g)
+ {
+ Contract.Assert(CommandLineOptions.Clo.DeterministicExtractLoops, "Can only be called with /deterministicExtractLoops option");
+ var immSuccBlks = new HashSet<Block>();
+ var loopBlocks = g.NaturalLoops(header, backEdgeNode);
+ foreach (Block/*!*/ block in loopBlocks)
+ {
+ Contract.Assert(block != null);
+ var auxCmd = block.TransferCmd as GotoCmd;
+ if (auxCmd == null) continue;
+ foreach (var bl in auxCmd.labelTargets)
+ {
+ if (loopBlocks.Contains(bl)) continue;
+ immSuccBlks.Add(bl);
+ }
+ }
+ return immSuccBlks;
+ }
+
+ private HashSet<Block> GetBlocksInAllNaturalLoops(Block header, Graph<Block/*!*/>/*!*/ g)
+ {
+ Contract.Assert(CommandLineOptions.Clo.DeterministicExtractLoops, "Can only be called with /deterministicExtractLoops option");
+ var allBlocksInNaturalLoops = new HashSet<Block>();
+ foreach (Block/*!*/ source in g.BackEdgeNodes(header))
+ {
+ Contract.Assert(source != null);
+ g.NaturalLoops(header, source).Iter(b => allBlocksInNaturalLoops.Add(b));
+ }
+ return allBlocksInNaturalLoops;
+ }
+
+
+ void CreateProceduresForLoops(Implementation impl, Graph<Block/*!*/>/*!*/ g,
+ List<Implementation/*!*/>/*!*/ loopImpls,
+ Dictionary<string, Dictionary<string, Block>> fullMap) {
+ Contract.Requires(impl != null);
+ Contract.Requires(cce.NonNullElements(loopImpls));
+ // Enumerate the headers
+ // for each header h:
+ // create implementation p_h with
+ // inputs = inputs, outputs, and locals of impl
+ // outputs = outputs and locals of impl
+ // locals = empty set
+ // add call o := p_h(i) at the beginning of the header block
+ // break the back edges whose target is h
+ // Enumerate the headers again to create the bodies of p_h
+ // for each header h:
+ // compute the loop corresponding to h
+ // make copies of all blocks in the loop for h
+ // delete all target edges that do not go to a block in the loop
+ // create a new entry block and a new return block
+ // add edges from entry block to the loop header and the return block
+ // add calls o := p_h(i) at the end of the blocks that are sources of back edges
+ foreach (Block block in impl.Blocks)
+ {
+ AddToFullMap(fullMap, impl.Name, block.Label, block);
+ }
+
+ bool detLoopExtract = CommandLineOptions.Clo.DeterministicExtractLoops;
+
+ Dictionary<Block/*!*/, List<Variable>/*!*/>/*!*/ loopHeaderToInputs = new Dictionary<Block/*!*/, List<Variable>/*!*/>();
+ Dictionary<Block/*!*/, List<Variable>/*!*/>/*!*/ loopHeaderToOutputs = new Dictionary<Block/*!*/, List<Variable>/*!*/>();
+ Dictionary<Block/*!*/, Dictionary<Variable, Expr>/*!*/>/*!*/ loopHeaderToSubstMap = new Dictionary<Block/*!*/, Dictionary<Variable, Expr>/*!*/>();
+ Dictionary<Block/*!*/, LoopProcedure/*!*/>/*!*/ loopHeaderToLoopProc = new Dictionary<Block/*!*/, LoopProcedure/*!*/>();
+ Dictionary<Block/*!*/, CallCmd/*!*/>/*!*/ loopHeaderToCallCmd1 = new Dictionary<Block/*!*/, CallCmd/*!*/>();
+ Dictionary<Block, CallCmd> loopHeaderToCallCmd2 = new Dictionary<Block, CallCmd>();
+ Dictionary<Block, AssignCmd> loopHeaderToAssignCmd = new Dictionary<Block, AssignCmd>();
+
+ foreach (Block/*!*/ header in g.Headers) {
+ Contract.Assert(header != null);
+ Contract.Assert(header != null);
+ List<Variable> inputs = new List<Variable>();
+ List<Variable> outputs = new List<Variable>();
+ List<Expr> callInputs1 = new List<Expr>();
+ List<IdentifierExpr> callOutputs1 = new List<IdentifierExpr>();
+ List<Expr> callInputs2 = new List<Expr>();
+ List<IdentifierExpr> callOutputs2 = new List<IdentifierExpr>();
+ List<AssignLhs> lhss = new List<AssignLhs>();
+ List<Expr> rhss = new List<Expr>();
+ Dictionary<Variable, Expr> substMap = new Dictionary<Variable, Expr>(); // Variable -> IdentifierExpr
+
+ List<Variable>/*!*/ targets = new List<Variable>();
+ HashSet<Variable> footprint = new HashSet<Variable>();
+
+ foreach (Block/*!*/ b in g.BackEdgeNodes(header))
+ {
+ Contract.Assert(b != null);
+ HashSet<Block> immSuccBlks = new HashSet<Block>();
+ if (detLoopExtract)
+ {
+ //Need to get the blocks that exit the loop, as we need to add them to targets and footprint
+ immSuccBlks = GetBreakBlocksOfLoop(header, b, g);
+ }
+ foreach (Block/*!*/ block in g.NaturalLoops(header, b).Union(immSuccBlks))
+ {
+ Contract.Assert(block != null);
+ foreach (Cmd/*!*/ cmd in block.Cmds)
+ {
+ Contract.Assert(cmd != null);
+ cmd.AddAssignedVariables(targets);
+
+ VariableCollector c = new VariableCollector();
+ c.Visit(cmd);
+ footprint.UnionWith(c.usedVars);
+ }
+ }
+ }
+
+ List<IdentifierExpr>/*!*/ globalMods = new List<IdentifierExpr>();
+ Set targetSet = new Set();
+ foreach (Variable/*!*/ v in targets)
+ {
+ Contract.Assert(v != null);
+ if (targetSet.Contains(v))
+ continue;
+ targetSet.Add(v);
+ if (v is GlobalVariable)
+ globalMods.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+
+ foreach (Variable v in impl.InParams) {
+ Contract.Assert(v != null);
+ if (!footprint.Contains(v)) continue;
+ callInputs1.Add(new IdentifierExpr(Token.NoToken, v));
+ Formal f = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "in_" + v.Name, v.TypedIdent.Type), true);
+ inputs.Add(f);
+ callInputs2.Add(new IdentifierExpr(Token.NoToken, f));
+ substMap[v] = new IdentifierExpr(Token.NoToken, f);
+ }
+ foreach (Variable v in impl.OutParams) {
+ Contract.Assert(v != null);
+ if (!footprint.Contains(v)) continue;
+ callInputs1.Add(new IdentifierExpr(Token.NoToken, v));
+ Formal f1 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "in_" + v.Name, v.TypedIdent.Type), true);
+ inputs.Add(f1);
+ if (targetSet.Contains(v))
+ {
+ callOutputs1.Add(new IdentifierExpr(Token.NoToken, v));
+ Formal f2 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "out_" + v.Name, v.TypedIdent.Type), false);
+ outputs.Add(f2);
+ callInputs2.Add(new IdentifierExpr(Token.NoToken, f2));
+ callOutputs2.Add(new IdentifierExpr(Token.NoToken, f2));
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, f2)));
+ rhss.Add(new IdentifierExpr(Token.NoToken, f1));
+ substMap[v] = new IdentifierExpr(Token.NoToken, f2);
+ }
+ else
+ {
+ callInputs2.Add(new IdentifierExpr(Token.NoToken, f1));
+ substMap[v] = new IdentifierExpr(Token.NoToken, f1);
+ }
+ }
+ foreach (Variable v in impl.LocVars) {
+ Contract.Assert(v != null);
+ if (!footprint.Contains(v)) continue;
+ callInputs1.Add(new IdentifierExpr(Token.NoToken, v));
+ Formal f1 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "in_" + v.Name, v.TypedIdent.Type), true);
+ inputs.Add(f1);
+ if (targetSet.Contains(v))
+ {
+ callOutputs1.Add(new IdentifierExpr(Token.NoToken, v));
+ Formal f2 = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "out_" + v.Name, v.TypedIdent.Type), false);
+ outputs.Add(f2);
+ callInputs2.Add(new IdentifierExpr(Token.NoToken, f2));
+ callOutputs2.Add(new IdentifierExpr(Token.NoToken, f2));
+ lhss.Add(new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, f2)));
+ rhss.Add(new IdentifierExpr(Token.NoToken, f1));
+ substMap[v] = new IdentifierExpr(Token.NoToken, f2);
+ }
+ else
+ {
+ callInputs2.Add(new IdentifierExpr(Token.NoToken, f1));
+ substMap[v] = new IdentifierExpr(Token.NoToken, f1);
+ }
+ }
+
+ loopHeaderToInputs[header] = inputs;
+ loopHeaderToOutputs[header] = outputs;
+ loopHeaderToSubstMap[header] = substMap;
+ LoopProcedure loopProc = new LoopProcedure(impl, header, inputs, outputs, globalMods);
+ loopHeaderToLoopProc[header] = loopProc;
+
+ CallCmd callCmd1 = new CallCmd(Token.NoToken, loopProc.Name, callInputs1, callOutputs1);
+ callCmd1.Proc = loopProc;
+ loopHeaderToCallCmd1[header] = callCmd1;
+
+ CallCmd callCmd2 = new CallCmd(Token.NoToken, loopProc.Name, callInputs2, callOutputs2);
+ callCmd2.Proc = loopProc;
+ loopHeaderToCallCmd2[header] = callCmd2;
+
+ Debug.Assert(lhss.Count == rhss.Count);
+ if (lhss.Count > 0)
+ {
+ AssignCmd assignCmd = new AssignCmd(Token.NoToken, lhss, rhss);
+ loopHeaderToAssignCmd[header] = assignCmd;
+ }
+ }
+
+ // Keep track of the new blocks created: maps a header node to the
+ // header_last block that was created because of splitting header.
+ Dictionary<Block, Block> newBlocksCreated = new Dictionary<Block, Block>();
+
+ bool headRecursion = false; // testing an option to put recursive call before loop body
+
+ IEnumerable<Block> sortedHeaders = g.SortHeadersByDominance();
+ foreach (Block/*!*/ header in sortedHeaders)
+ {
+ Contract.Assert(header != null);
+ LoopProcedure loopProc = loopHeaderToLoopProc[header];
+ Dictionary<Block, Block> blockMap = new Dictionary<Block, Block>();
+ HashSet<string> dummyBlocks = new HashSet<string>();
+
+ CodeCopier codeCopier = new CodeCopier(loopHeaderToSubstMap[header]); // fix me
+ List<Variable> inputs = loopHeaderToInputs[header];
+ List<Variable> outputs = loopHeaderToOutputs[header];
+ int si_unique_loc = 1; // Added by AL: to distinguish the back edges
+ foreach (Block/*!*/ source in g.BackEdgeNodes(header)) {
+ Contract.Assert(source != null);
+ foreach (Block/*!*/ block in g.NaturalLoops(header, source)) {
+ Contract.Assert(block != null);
+ if (blockMap.ContainsKey(block))
+ continue;
+ Block newBlock = new Block();
+ newBlock.Label = block.Label;
+ if (headRecursion && block == header)
+ {
+ CallCmd callCmd = (CallCmd)(loopHeaderToCallCmd2[header]).Clone();
+ addUniqueCallAttr(si_unique_loc, callCmd);
+ si_unique_loc++;
+ newBlock.Cmds.Add(callCmd); // add the recursive call at head of loop
+ var rest = codeCopier.CopyCmdSeq(block.Cmds);
+ newBlock.Cmds.AddRange(rest);
+ }
+ else
+ newBlock.Cmds = codeCopier.CopyCmdSeq(block.Cmds);
+ blockMap[block] = newBlock;
+ if (newBlocksCreated.ContainsKey(block))
+ {
+ Block newBlock2 = new Block();
+ newBlock2.Label = newBlocksCreated[block].Label;
+ newBlock2.Cmds = codeCopier.CopyCmdSeq(newBlocksCreated[block].Cmds);
+ blockMap[newBlocksCreated[block]] = newBlock2;
+ }
+ //for detLoopExtract, need the immediate successors even outside the loop
+ if (detLoopExtract) {
+ GotoCmd auxGotoCmd = block.TransferCmd as GotoCmd;
+ Contract.Assert(auxGotoCmd != null && auxGotoCmd.labelNames != null &&
+ auxGotoCmd.labelTargets != null && auxGotoCmd.labelTargets.Count >= 1);
+ //BUGFIX on 10/26/15: this contains nodes present in NaturalLoops for a different backedgenode
+ var loopNodes = GetBlocksInAllNaturalLoops(header, g); //var loopNodes = g.NaturalLoops(header, source);
+ foreach(var bl in auxGotoCmd.labelTargets) {
+ if (g.Nodes.Contains(bl) && //newly created blocks are not present in NaturalLoop(header, xx, g)
+ !loopNodes.Contains(bl)) {
+ Block auxNewBlock = new Block();
+ auxNewBlock.Label = ((Block)bl).Label;
+ //these blocks may have read/write locals that are not present in naturalLoops
+ //we need to capture these variables
+ auxNewBlock.Cmds = codeCopier.CopyCmdSeq(((Block)bl).Cmds);
+ //add restoration code for such blocks
+ if (loopHeaderToAssignCmd.ContainsKey(header))
+ {
+ AssignCmd assignCmd = loopHeaderToAssignCmd[header];
+ auxNewBlock.Cmds.Add(assignCmd);
+ }
+ List<AssignLhs> lhsg = new List<AssignLhs>();
+ List<IdentifierExpr>/*!*/ globalsMods = loopHeaderToLoopProc[header].Modifies;
+ foreach (IdentifierExpr gl in globalsMods)
+ lhsg.Add(new SimpleAssignLhs(Token.NoToken, gl));
+ List<Expr> rhsg = new List<Expr>();
+ foreach (IdentifierExpr gl in globalsMods)
+ rhsg.Add(new OldExpr(Token.NoToken, gl));
+ if (lhsg.Count != 0)
+ {
+ AssignCmd globalAssignCmd = new AssignCmd(Token.NoToken, lhsg, rhsg);
+ auxNewBlock.Cmds.Add(globalAssignCmd);
+ }
+ blockMap[(Block)bl] = auxNewBlock;
+ }
+ }
+
+ }
+ }
+
+ List<Cmd> cmdSeq;
+ if (headRecursion)
+ cmdSeq = new List<Cmd>();
+ else
+ {
+ CallCmd callCmd = (CallCmd)(loopHeaderToCallCmd2[header]).Clone();
+ addUniqueCallAttr(si_unique_loc, callCmd);
+ si_unique_loc++;
+ cmdSeq = new List<Cmd> { callCmd };
+ }
+
+ Block/*!*/ block1 = new Block(Token.NoToken, source.Label + "_dummy",
+ new List<Cmd>{ new AssumeCmd(Token.NoToken, Expr.False) }, new ReturnCmd(Token.NoToken));
+ Block/*!*/ block2 = new Block(Token.NoToken, block1.Label,
+ cmdSeq, new ReturnCmd(Token.NoToken));
+ impl.Blocks.Add(block1);
+ dummyBlocks.Add(block1.Label);
+
+ GotoCmd gotoCmd = source.TransferCmd as GotoCmd;
+ Contract.Assert(gotoCmd != null && gotoCmd.labelNames != null && gotoCmd.labelTargets != null && gotoCmd.labelTargets.Count >= 1);
+ List<String>/*!*/ newLabels = new List<String>();
+ List<Block>/*!*/ newTargets = new List<Block>();
+ for (int i = 0; i < gotoCmd.labelTargets.Count; i++) {
+ if (gotoCmd.labelTargets[i] == header)
+ continue;
+ newTargets.Add(gotoCmd.labelTargets[i]);
+ newLabels.Add(gotoCmd.labelNames[i]);
+ }
+ newTargets.Add(block1);
+ newLabels.Add(block1.Label);
+ gotoCmd.labelNames = newLabels;
+ gotoCmd.labelTargets = newTargets;
+ blockMap[block1] = block2;
+ }
+ List<Block/*!*/>/*!*/ blocks = new List<Block/*!*/>();
+ Block exit = new Block(Token.NoToken, "exit", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+ GotoCmd cmd = new GotoCmd(Token.NoToken,
+ new List<String> { cce.NonNull(blockMap[header]).Label, exit.Label },
+ new List<Block> { blockMap[header], exit });
+
+ if (detLoopExtract) //cutting the non-determinism
+ cmd = new GotoCmd(Token.NoToken,
+ new List<String> { cce.NonNull(blockMap[header]).Label },
+ new List<Block> { blockMap[header] });
+
+ Block entry;
+ List<Cmd> initCmds = new List<Cmd>();
+ if (loopHeaderToAssignCmd.ContainsKey(header)) {
+ AssignCmd assignCmd = loopHeaderToAssignCmd[header];
+ initCmds.Add(assignCmd);
+ }
+
+ entry = new Block(Token.NoToken, "entry", initCmds, cmd);
+ blocks.Add(entry);
+
+ foreach (Block/*!*/ block in blockMap.Keys) {
+ Contract.Assert(block != null);
+ Block/*!*/ newBlock = cce.NonNull(blockMap[block]);
+ GotoCmd gotoCmd = block.TransferCmd as GotoCmd;
+ if (gotoCmd == null) {
+ newBlock.TransferCmd = new ReturnCmd(Token.NoToken);
+ } else {
+ Contract.Assume(gotoCmd.labelNames != null && gotoCmd.labelTargets != null);
+ List<String> newLabels = new List<String>();
+ List<Block> newTargets = new List<Block>();
+ for (int i = 0; i < gotoCmd.labelTargets.Count; i++) {
+ Block target = gotoCmd.labelTargets[i];
+ if (blockMap.ContainsKey(target)) {
+ newLabels.Add(gotoCmd.labelNames[i]);
+ newTargets.Add(blockMap[target]);
+ }
+ }
+ if (newTargets.Count == 0) {
+ if (!detLoopExtract)
+ newBlock.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
+ newBlock.TransferCmd = new ReturnCmd(Token.NoToken);
+ } else {
+ newBlock.TransferCmd = new GotoCmd(Token.NoToken, newLabels, newTargets);
+ }
+ }
+ blocks.Add(newBlock);
+ }
+ blocks.Add(exit);
+ Implementation loopImpl =
+ new Implementation(Token.NoToken, loopProc.Name,
+ new List<TypeVariable>(), inputs, outputs, new List<Variable>(), blocks);
+ loopImpl.Proc = loopProc;
+ loopImpls.Add(loopImpl);
+
+ // Make a (shallow) copy of the header before splitting it
+ Block origHeader = new Block(header.tok, header.Label, header.Cmds, header.TransferCmd);
+
+ // Finally, add call to the loop in the containing procedure
+ string lastIterBlockName = header.Label + "_last";
+ Block lastIterBlock = new Block(Token.NoToken, lastIterBlockName, header.Cmds, header.TransferCmd);
+ newBlocksCreated[header] = lastIterBlock;
+ header.Cmds = new List<Cmd> { loopHeaderToCallCmd1[header] };
+ header.TransferCmd = new GotoCmd(Token.NoToken, new List<String> { lastIterBlockName }, new List<Block> { lastIterBlock });
+ impl.Blocks.Add(lastIterBlock);
+ blockMap[origHeader] = blockMap[header];
+ blockMap.Remove(header);
+
+ Contract.Assert(fullMap[impl.Name][header.Label] == header);
+ fullMap[impl.Name][header.Label] = origHeader;
+
+ foreach (Block block in blockMap.Keys)
+ {
+ // Don't add dummy blocks to the map
+ if (dummyBlocks.Contains(blockMap[block].Label)) continue;
+
+ // Following two statements are for nested loops: compose map
+ if (!fullMap[impl.Name].ContainsKey(block.Label)) continue;
+ var target = fullMap[impl.Name][block.Label];
+
+ AddToFullMap(fullMap, loopProc.Name, blockMap[block].Label, target);
+ }
+
+ fullMap[impl.Name].Remove(header.Label);
+ fullMap[impl.Name][lastIterBlockName] = origHeader;
+ }
+ }
+
+ private void addUniqueCallAttr(int val, CallCmd cmd)
+ {
+ var a = new List<object>();
+ a.Add(new LiteralExpr(Token.NoToken, Microsoft.Basetypes.BigNum.FromInt(val)));
+
+ cmd.Attributes = new QKeyValue(Token.NoToken, "si_unique_call", a, cmd.Attributes);
+ }
+
+ private void AddToFullMap(Dictionary<string, Dictionary<string, Block>> fullMap, string procName, string blockName, Block block)
+ {
+ if (!fullMap.ContainsKey(procName))
+ fullMap[procName] = new Dictionary<string, Block>();
+ fullMap[procName][blockName] = block;
+ }
+
+ public static Graph<Implementation> BuildCallGraph(Program program) {
+ Graph<Implementation> callGraph = new Graph<Implementation>();
+ Dictionary<Procedure, HashSet<Implementation>> procToImpls = new Dictionary<Procedure, HashSet<Implementation>>();
+ foreach (var proc in program.Procedures) {
+ procToImpls[proc] = new HashSet<Implementation>();
+ }
+ foreach (var impl in program.Implementations) {
+ if (impl.SkipVerification) continue;
+ callGraph.AddSource(impl);
+ procToImpls[impl.Proc].Add(impl);
+ }
+ foreach (var impl in program.Implementations) {
+ if (impl.SkipVerification) continue;
+ foreach (Block b in impl.Blocks) {
+ foreach (Cmd c in b.Cmds) {
+ CallCmd cc = c as CallCmd;
+ if (cc == null) continue;
+ foreach (Implementation callee in procToImpls[cc.Proc]) {
+ callGraph.AddEdge(impl, callee);
+ }
+ }
+ }
+ }
+ return callGraph;
+ }
+
+ public static Graph<Block/*!*/>/*!*/ GraphFromImpl(Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<Graph<Block>>().Nodes));
+ Contract.Ensures(Contract.Result<Graph<Block>>() != null);
+
+ Graph<Block/*!*/> g = new Graph<Block/*!*/>();
+ g.AddSource(impl.Blocks[0]); // there is always at least one node in the graph
+
+ foreach (Block b in impl.Blocks) {
+ Contract.Assert(b != null);
+ GotoCmd gtc = b.TransferCmd as GotoCmd;
+ if (gtc != null) {
+ foreach (Block/*!*/ dest in cce.NonNull(gtc.labelTargets)) {
+ Contract.Assert(dest != null);
+ g.AddEdge(b, dest);
+ }
+ }
+ }
+ return g;
+ }
+
+ public class IrreducibleLoopException : Exception {}
+
+ public Graph<Block> ProcessLoops(Implementation impl) {
+ while (true) {
+ impl.PruneUnreachableBlocks();
+ impl.ComputePredecessorsForBlocks();
+ Graph<Block/*!*/>/*!*/ g = GraphFromImpl(impl);
+ g.ComputeLoops();
+ if (g.Reducible) {
+ return g;
+ }
+ throw new IrreducibleLoopException();
+#if USED_CODE
+ System.Diagnostics.Debug.Assert(g.SplitCandidates.Count > 0);
+ Block splitCandidate = null;
+ foreach (Block b in g.SplitCandidates) {
+ if (b.Predecessors.Length > 1) {
+ splitCandidate = b;
+ break;
+ }
+ }
+ System.Diagnostics.Debug.Assert(splitCandidate != null);
+ int count = 0;
+ foreach (Block b in splitCandidate.Predecessors) {
+ GotoCmd gotoCmd = (GotoCmd)b.TransferCmd;
+ gotoCmd.labelNames.Remove(splitCandidate.Label);
+ gotoCmd.labelTargets.Remove(splitCandidate);
+
+ CodeCopier codeCopier = new CodeCopier(new Hashtable(), new Hashtable());
+ List<Cmd> newCmdSeq = codeCopier.CopyCmdSeq(splitCandidate.Cmds);
+ TransferCmd newTransferCmd;
+ GotoCmd splitGotoCmd = splitCandidate.TransferCmd as GotoCmd;
+ if (splitGotoCmd == null) {
+ newTransferCmd = new ReturnCmd(splitCandidate.tok);
+ }
+ else {
+ List<String> newLabelNames = new List<String>();
+ newLabelNames.AddRange(splitGotoCmd.labelNames);
+ List<Block> newLabelTargets = new List<Block>();
+ newLabelTargets.AddRange(splitGotoCmd.labelTargets);
+ newTransferCmd = new GotoCmd(splitCandidate.tok, newLabelNames, newLabelTargets);
+ }
+ Block copy = new Block(splitCandidate.tok, splitCandidate.Label + count++, newCmdSeq, newTransferCmd);
+
+ impl.Blocks.Add(copy);
+ gotoCmd.AddTarget(copy);
+ }
+#endif
+ }
+ }
+
+ public Dictionary<string, Dictionary<string, Block>> ExtractLoops()
+ {
+ HashSet<string> procsWithIrreducibleLoops = null;
+ return ExtractLoops(out procsWithIrreducibleLoops);
+ }
+
+ public Dictionary<string, Dictionary<string, Block>> ExtractLoops(out HashSet<string> procsWithIrreducibleLoops)
+ {
+ procsWithIrreducibleLoops = new HashSet<string>();
+ List<Implementation/*!*/>/*!*/ loopImpls = new List<Implementation/*!*/>();
+ Dictionary<string, Dictionary<string, Block>> fullMap = new Dictionary<string, Dictionary<string, Block>>();
+ foreach (var impl in this.Implementations)
+ {
+ if (impl.Blocks != null && impl.Blocks.Count > 0)
+ {
+ try
+ {
+ Graph<Block> g = ProcessLoops(impl);
+ CreateProceduresForLoops(impl, g, loopImpls, fullMap);
+ }
+ catch (IrreducibleLoopException)
+ {
+ System.Diagnostics.Debug.Assert(!fullMap.ContainsKey(impl.Name));
+ fullMap[impl.Name] = null;
+ procsWithIrreducibleLoops.Add(impl.Name);
+
+ if (CommandLineOptions.Clo.ExtractLoopsUnrollIrreducible)
+ {
+ // statically unroll loops in this procedure
+
+ // First, build a map of the current blocks
+ var origBlocks = new Dictionary<string, Block>();
+ foreach (var blk in impl.Blocks) origBlocks.Add(blk.Label, blk);
+
+ // unroll
+ Block start = impl.Blocks[0];
+ impl.Blocks = LoopUnroll.UnrollLoops(start, CommandLineOptions.Clo.RecursionBound, false);
+
+ // Now construct the "map back" information
+ // Resulting block label -> original block
+ var blockMap = new Dictionary<string, Block>();
+ foreach (var blk in impl.Blocks)
+ {
+ var sl = LoopUnroll.sanitizeLabel(blk.Label);
+ if (sl == blk.Label) blockMap.Add(blk.Label, blk);
+ else
+ {
+ Contract.Assert(origBlocks.ContainsKey(sl));
+ blockMap.Add(blk.Label, origBlocks[sl]);
+ }
+ }
+ fullMap[impl.Name] = blockMap;
+ }
+ }
+ }
+ }
+ foreach (Implementation/*!*/ loopImpl in loopImpls)
+ {
+ Contract.Assert(loopImpl != null);
+ AddTopLevelDeclaration(loopImpl);
+ AddTopLevelDeclaration(loopImpl.Proc);
+ }
+ return fullMap;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitProgram(this);
+ }
+
+ int extractedFunctionCount;
+ public string FreshExtractedFunctionName()
+ {
+ var c = System.Threading.Interlocked.Increment(ref extractedFunctionCount);
+ return string.Format("##extracted_function##{0}", c);
+ }
+
+ private int invariantGenerationCounter = 0;
+
+ public Constant MakeExistentialBoolean() {
+ Constant ExistentialBooleanConstant = new Constant(Token.NoToken, new TypedIdent(tok, "_b" + invariantGenerationCounter, Microsoft.Boogie.Type.Bool), false);
+ invariantGenerationCounter++;
+ ExistentialBooleanConstant.AddAttribute("existential", new object[] { Expr.True });
+ AddTopLevelDeclaration(ExistentialBooleanConstant);
+ return ExistentialBooleanConstant;
+ }
+
+ public PredicateCmd CreateCandidateInvariant(Expr e, string tag = null) {
+ Constant ExistentialBooleanConstant = MakeExistentialBoolean();
+ IdentifierExpr ExistentialBoolean = new IdentifierExpr(Token.NoToken, ExistentialBooleanConstant);
+ PredicateCmd invariant = new AssertCmd(Token.NoToken, Expr.Imp(ExistentialBoolean, e));
+ if (tag != null)
+ invariant.Attributes = new QKeyValue(Token.NoToken, "tag", new List<object>(new object[] { tag }), null);
+ return invariant;
+ }
+ }
+
+ //---------------------------------------------------------------------
+ // Declarations
+
+ [ContractClass(typeof(DeclarationContracts))]
+ public abstract class Declaration : Absy {
+ public QKeyValue Attributes;
+
+ public Declaration(IToken tok)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ }
+
+ protected void EmitAttributes(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ kv.Emit(stream);
+ stream.Write(" ");
+ }
+ }
+
+ protected void ResolveAttributes(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ kv.Resolve(rc);
+ }
+ }
+
+ protected void TypecheckAttributes(TypecheckingContext rc) {
+ Contract.Requires(rc != null);
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ kv.Typecheck(rc);
+ }
+ }
+
+ /// <summary>
+ /// If the declaration has an attribute {:name} or {:name true}, then set "result" to "true" and return "true".
+ /// If the declaration has an attribute {:name false}, then set "result" to "false" and return "true".
+ /// Otherwise, return "false" and leave "result" unchanged (which gives the caller an easy way to indicate
+ /// a default value if the attribute is not mentioned).
+ /// If there is more than one attribute called :name, then the last attribute rules.
+ /// </summary>
+ public bool CheckBooleanAttribute(string name, ref bool result) {
+ Contract.Requires(name != null);
+ var kv = FindAttribute(name);
+ if (kv != null) {
+ if (kv.Params.Count == 0) {
+ result = true;
+ return true;
+ } else if (kv.Params.Count == 1) {
+ var lit = kv.Params[0] as LiteralExpr;
+ if (lit != null && lit.isBool) {
+ result = lit.asBool;
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /// <summary>
+ /// Find and return the last occurrence of an attribute with the name "name", if any. If none, return null.
+ /// </summary>
+ public QKeyValue FindAttribute(string name) {
+ Contract.Requires(name != null);
+ QKeyValue res = null;
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ if (kv.Key == name) {
+ res = kv;
+ }
+ }
+ return res;
+ }
+
+ // Look for {:name expr} in list of attributes.
+ public Expr FindExprAttribute(string name) {
+ Contract.Requires(name != null);
+ Expr res = null;
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ if (kv.Key == name) {
+ if (kv.Params.Count == 1 && kv.Params[0] is Expr) {
+ res = (Expr)kv.Params[0];
+ }
+ }
+ }
+ return res;
+ }
+
+ // Look for {:name string} in list of attributes.
+ public string FindStringAttribute(string name) {
+ Contract.Requires(name != null);
+ return QKeyValue.FindStringAttribute(this.Attributes, name);
+ }
+
+ // Look for {:name N} or {:name N} in list of attributes. Return result in 'result'
+ // (which is not touched if there is no attribute specified).
+ //
+ // Returns false is there was an error processing the flag, true otherwise.
+ public bool CheckIntAttribute(string name, ref int result) {
+ Contract.Requires(name != null);
+ Expr expr = FindExprAttribute(name);
+ if (expr != null) {
+ if (expr is LiteralExpr && ((LiteralExpr)expr).isBigNum) {
+ result = ((LiteralExpr)expr).asBigNum.ToInt;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public void AddAttribute(string name, params object[] vals) {
+ Contract.Requires(name != null);
+ QKeyValue kv;
+ for (kv = this.Attributes; kv != null; kv = kv.Next) {
+ if (kv.Key == name) {
+ kv.AddParams(vals);
+ break;
+ }
+ }
+ if (kv == null) {
+ Attributes = new QKeyValue(tok, name, new List<object/*!*/>(vals), Attributes);
+ }
+ }
+
+ public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
+ public abstract void Register(ResolutionContext/*!*/ rc);
+
+ /// <summary>
+ /// Compute the strongly connected components of the declaration.
+ /// By default, it does nothing
+ /// </summary>
+ public virtual void ComputeStronglyConnectedComponents() { /* Does nothing */
+ }
+
+ /// <summary>
+ /// Reset the abstract stated computed before
+ /// </summary>
+ public virtual void ResetAbstractInterpretationState() { /* does nothing */
+ }
+ }
+ [ContractClassFor(typeof(Declaration))]
+ public abstract class DeclarationContracts : Declaration {
+ public DeclarationContracts() :base(null){
+ }
+ public override void Register(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ throw new NotImplementedException();
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public class Axiom : Declaration {
+ private Expr/*!*/ expression;
+
+ public Expr Expr {
+ get {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return this.expression;
+ }
+ set {
+ Contract.Requires(value != null);
+ this.expression = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ExprInvariant() {
+ Contract.Invariant(this.expression != null);
+ }
+
+ public string Comment;
+
+ public Axiom(IToken tok, Expr expr)
+ : this(tok, expr, null) {
+ Contract.Requires(expr != null);
+ Contract.Requires(tok != null);
+ }
+
+ public Axiom(IToken/*!*/ tok, Expr/*!*/ expr, string comment)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ this.expression = expr;
+ Comment = comment;
+ }
+
+ public Axiom(IToken tok, Expr expr, string comment, QKeyValue kv)
+ : this(tok, expr, comment) {
+ Contract.Requires(expr != null);
+ Contract.Requires(tok != null);
+ this.Attributes = kv;
+ }
+
+ public bool DependenciesCollected { get; set; }
+
+ ISet<Function> functionDependencies;
+
+ public ISet<Function> FunctionDependencies
+ {
+ get { return functionDependencies; }
+ }
+
+ public void AddFunctionDependency(Function function)
+ {
+ Contract.Requires(function != null);
+
+ if (functionDependencies == null)
+ {
+ functionDependencies = new HashSet<Function>();
+ }
+ functionDependencies.Add(function);
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ if (Comment != null) {
+ stream.WriteLine(this, level, "// " + Comment);
+ }
+ stream.Write(this, level, "axiom ");
+ EmitAttributes(stream);
+ this.Expr.Emit(stream);
+ stream.WriteLine(";");
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddAxiom(this);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ ResolveAttributes(rc);
+ rc.StateMode = ResolutionContext.State.StateLess;
+ Expr.Resolve(rc);
+ rc.StateMode = ResolutionContext.State.Single;
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ TypecheckAttributes(tc);
+ Expr.Typecheck(tc);
+ Contract.Assert(Expr.Type != null); // follows from postcondition of Expr.Typecheck
+ if (!Expr.Type.Unify(Type.Bool)) {
+ tc.Error(this, "axioms must be of type bool");
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitAxiom(this);
+ }
+ }
+
+ public abstract class NamedDeclaration : Declaration {
+ private string/*!*/ name;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(name != null);
+ }
+
+ public string/*!*/ Name {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return this.name;
+ }
+ set {
+ Contract.Requires(value != null);
+ this.name = value;
+ }
+ }
+
+ public int TimeLimit
+ {
+ get
+ {
+ int tl = CommandLineOptions.Clo.ProverKillTime;
+ CheckIntAttribute("timeLimit", ref tl);
+ return tl;
+ }
+ }
+
+ public NamedDeclaration(IToken/*!*/ tok, string/*!*/ name)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ this.name = name;
+ }
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return cce.NonNull(Name);
+ }
+ }
+
+ public class TypeCtorDecl : NamedDeclaration {
+ public readonly int Arity;
+
+ public TypeCtorDecl(IToken/*!*/ tok, string/*!*/ name, int Arity)
+ : base(tok, name) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ this.Arity = Arity;
+ }
+ public TypeCtorDecl(IToken/*!*/ tok, string/*!*/ name, int Arity, QKeyValue kv)
+ : base(tok, name) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ this.Arity = Arity;
+ this.Attributes = kv;
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "type ");
+ EmitAttributes(stream);
+ stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(Name));
+ for (int i = 0; i < Arity; ++i)
+ stream.Write(" _");
+ stream.WriteLine(";");
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddType(this);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ ResolveAttributes(rc);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ TypecheckAttributes(tc);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitTypeCtorDecl(this);
+ }
+ }
+
+ public class TypeSynonymDecl : NamedDeclaration {
+ private List<TypeVariable>/*!*/ typeParameters;
+
+ public List<TypeVariable> TypeParameters {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+ return this.typeParameters;
+ }
+ set {
+ Contract.Requires(value != null);
+ this.typeParameters = value;
+ }
+ }
+
+ private Type/*!*/ body;
+
+ public Type Body {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.body;
+ }
+ set {
+ Contract.Requires(value != null);
+ this.body = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this.body != null);
+ Contract.Invariant(this.typeParameters != null);
+ }
+
+ public TypeSynonymDecl(IToken/*!*/ tok, string/*!*/ name,
+ List<TypeVariable>/*!*/ typeParams, Type/*!*/ body)
+ : base(tok, name) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(body != null);
+ this.typeParameters = typeParams;
+ this.body = body;
+ }
+ public TypeSynonymDecl(IToken/*!*/ tok, string/*!*/ name,
+ List<TypeVariable>/*!*/ typeParams, Type/*!*/ body, QKeyValue kv)
+ : base(tok, name) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(body != null);
+ this.typeParameters = typeParams;
+ this.body = body;
+ this.Attributes = kv;
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "type ");
+ EmitAttributes(stream);
+ stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(Name));
+ if (TypeParameters.Count > 0)
+ stream.Write(" ");
+ TypeParameters.Emit(stream, " ");
+ stream.Write(" = ");
+ Body.Emit(stream);
+ stream.WriteLine(";");
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddType(this);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ ResolveAttributes(rc);
+
+ int previousState = rc.TypeBinderState;
+ try {
+ foreach (TypeVariable/*!*/ v in TypeParameters) {
+ Contract.Assert(v != null);
+ rc.AddTypeBinder(v);
+ }
+ Body = Body.ResolveType(rc);
+ } finally {
+ rc.TypeBinderState = previousState;
+ }
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ TypecheckAttributes(tc);
+ }
+
+ public static void ResolveTypeSynonyms(List<TypeSynonymDecl/*!*/>/*!*/ synonymDecls, ResolutionContext/*!*/ rc) {
+ Contract.Requires(cce.NonNullElements(synonymDecls));
+ Contract.Requires(rc != null);
+ // then discover all dependencies between type synonyms
+ IDictionary<TypeSynonymDecl/*!*/, List<TypeSynonymDecl/*!*/>/*!*/>/*!*/ deps =
+ new Dictionary<TypeSynonymDecl/*!*/, List<TypeSynonymDecl/*!*/>/*!*/>();
+ foreach (TypeSynonymDecl/*!*/ decl in synonymDecls) {
+ Contract.Assert(decl != null);
+ List<TypeSynonymDecl/*!*/>/*!*/ declDeps = new List<TypeSynonymDecl/*!*/>();
+ FindDependencies(decl.Body, declDeps, rc);
+ deps.Add(decl, declDeps);
+ }
+
+ List<TypeSynonymDecl/*!*/>/*!*/ resolved = new List<TypeSynonymDecl/*!*/>();
+
+ int unresolved = synonymDecls.Count - resolved.Count;
+ while (unresolved > 0) {
+ foreach (TypeSynonymDecl/*!*/ decl in synonymDecls) {
+ Contract.Assert(decl != null);
+ if (!resolved.Contains(decl) &&
+ deps[decl].All(d => resolved.Contains(d))) {
+ decl.Resolve(rc);
+ resolved.Add(decl);
+ }
+ }
+
+ int newUnresolved = synonymDecls.Count - resolved.Count;
+ if (newUnresolved < unresolved) {
+ // we are making progress
+ unresolved = newUnresolved;
+ } else {
+ // there have to be cycles in the definitions
+ foreach (TypeSynonymDecl/*!*/ decl in synonymDecls) {
+ Contract.Assert(decl != null);
+ if (!resolved.Contains(decl)) {
+ rc.Error(decl,
+ "type synonym could not be resolved because of cycles: {0}" +
+ " (replacing body with \"bool\" to continue resolving)",
+ decl.Name);
+
+ // we simply replace the bodies of all remaining type
+ // synonyms with "bool" so that resolution can continue
+ decl.Body = Type.Bool;
+ decl.Resolve(rc);
+ }
+ }
+
+ unresolved = 0;
+ }
+ }
+ }
+
+ // determine a list of all type synonyms that occur in "type"
+ private static void FindDependencies(Type/*!*/ type, List<TypeSynonymDecl/*!*/>/*!*/ deps, ResolutionContext/*!*/ rc) {
+ Contract.Requires(type != null);
+ Contract.Requires(cce.NonNullElements(deps));
+ Contract.Requires(rc != null);
+ if (type.IsVariable || type.IsBasic) {
+ // nothing
+ } else if (type.IsUnresolved) {
+ UnresolvedTypeIdentifier/*!*/ unresType = type.AsUnresolved;
+ Contract.Assert(unresType != null);
+ TypeSynonymDecl dep = rc.LookUpTypeSynonym(unresType.Name);
+ if (dep != null)
+ deps.Add(dep);
+ foreach (Type/*!*/ subtype in unresType.Arguments) {
+ Contract.Assert(subtype != null);
+ FindDependencies(subtype, deps, rc);
+ }
+ } else if (type.IsMap) {
+ MapType/*!*/ mapType = type.AsMap;
+ Contract.Assert(mapType != null);
+ foreach (Type/*!*/ subtype in mapType.Arguments) {
+ Contract.Assert(subtype != null);
+ FindDependencies(subtype, deps, rc);
+ }
+ FindDependencies(mapType.Result, deps, rc);
+ } else if (type.IsCtor) {
+ // this can happen because we allow types to be resolved multiple times
+ CtorType/*!*/ ctorType = type.AsCtor;
+ Contract.Assert(ctorType != null);
+ foreach (Type/*!*/ subtype in ctorType.Arguments) {
+ Contract.Assert(subtype != null);
+ FindDependencies(subtype, deps, rc);
+ }
+ } else {
+ System.Diagnostics.Debug.Fail("Did not expect this type during resolution: "
+ + type);
+ }
+ }
+
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitTypeSynonymDecl(this);
+ }
+ }
+
+ public abstract class Variable : NamedDeclaration {
+ private TypedIdent/*!*/ typedIdent;
+
+ public TypedIdent TypedIdent {
+ get {
+ Contract.Ensures(Contract.Result<TypedIdent>() != null);
+ return this.typedIdent;
+ }
+ set {
+ Contract.Requires(value != null);
+ this.typedIdent = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this.typedIdent != null);
+ }
+
+ public Variable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent)
+ : base(tok, typedIdent.Name) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent != null);
+ this.typedIdent = typedIdent;
+ }
+
+ public Variable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent, QKeyValue kv)
+ : base(tok, typedIdent.Name) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent != null);
+ this.typedIdent = typedIdent;
+ this.Attributes = kv;
+ }
+
+ public abstract bool IsMutable {
+ get;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "var ");
+ EmitVitals(stream, level, true);
+ stream.WriteLine(";");
+ }
+ public void EmitVitals(TokenTextWriter stream, int level, bool emitAttributes) {
+ Contract.Requires(stream != null);
+ if (emitAttributes) {
+ EmitAttributes(stream);
+ }
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds && this.TypedIdent.HasName) {
+ stream.Write("h{0}^^", this.GetHashCode()); // the idea is that this will prepend the name printed by TypedIdent.Emit
+ }
+ this.TypedIdent.Emit(stream);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ this.TypedIdent.Resolve(rc);
+ }
+ public void ResolveWhere(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ if (QKeyValue.FindBoolAttribute(Attributes, "assumption") && this.TypedIdent.WhereExpr != null)
+ {
+ rc.Error(tok, "assumption variable may not be declared with a where clause");
+ }
+ if (this.TypedIdent.WhereExpr != null) {
+ this.TypedIdent.WhereExpr.Resolve(rc);
+ }
+ ResolveAttributes(rc);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ TypecheckAttributes(tc);
+ this.TypedIdent.Typecheck(tc);
+ if (QKeyValue.FindBoolAttribute(Attributes, "assumption") && !this.TypedIdent.Type.IsBool)
+ {
+ tc.Error(tok, "assumption variable must be of type 'bool'");
+ }
+ }
+ }
+
+ public class VariableComparer : IComparer {
+ public int Compare(object a, object b) {
+ Variable A = a as Variable;
+ Variable B = b as Variable;
+ if (A == null || B == null) {
+ throw new ArgumentException("VariableComparer works only on objects of type Variable");
+ }
+ return cce.NonNull(A.Name).CompareTo(B.Name);
+ }
+ }
+
+ // class to specify the <:-parents of the values of constants
+ public class ConstantParent {
+ public readonly IdentifierExpr/*!*/ Parent;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Parent != null);
+ }
+
+ // if true, the sub-dag underneath this constant-parent edge is
+ // disjoint from all other unique sub-dags
+ public readonly bool Unique;
+
+ public ConstantParent(IdentifierExpr parent, bool unique) {
+ Contract.Requires(parent != null);
+ Parent = parent;
+ Unique = unique;
+ }
+ }
+
+ public class Constant : Variable {
+ // when true, the value of this constant is meant to be distinct
+ // from all other constants.
+ public readonly bool Unique;
+
+ // the <:-parents of the value of this constant. If the field is
+ // null, no information about the parents is provided, which means
+ // that the parental situation is unconstrained.
+ public readonly ReadOnlyCollection<ConstantParent/*!*/> Parents;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(Parents, true));
+ }
+
+ // if true, it is assumed that the immediate <:-children of the
+ // value of this constant are completely specified
+ public readonly bool ChildrenComplete;
+
+ public Constant(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent)
+ : base(tok, typedIdent) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(typedIdent.Name != null && (!typedIdent.HasName || typedIdent.Name.Length > 0));
+ Contract.Requires(typedIdent.WhereExpr == null);
+ this.Unique = true;
+ this.Parents = null;
+ this.ChildrenComplete = false;
+ }
+ public Constant(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent, bool unique)
+ : base(tok, typedIdent) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(typedIdent.Name != null && typedIdent.Name.Length > 0);
+ Contract.Requires(typedIdent.WhereExpr == null);
+ this.Unique = unique;
+ this.Parents = null;
+ this.ChildrenComplete = false;
+ }
+ public Constant(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent,
+ bool unique,
+ IEnumerable<ConstantParent/*!*/> parents, bool childrenComplete,
+ QKeyValue kv)
+ : base(tok, typedIdent, kv) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(cce.NonNullElements(parents, true));
+ Contract.Requires(typedIdent.Name != null && typedIdent.Name.Length > 0);
+ Contract.Requires(typedIdent.WhereExpr == null);
+ this.Unique = unique;
+ this.Parents = parents == null ? null : new ReadOnlyCollection<ConstantParent>(parents.ToList());
+ this.ChildrenComplete = childrenComplete;
+ }
+ public override bool IsMutable {
+ get {
+ return false;
+ }
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "const ");
+ EmitAttributes(stream);
+ if (this.Unique) {
+ stream.Write(this, level, "unique ");
+ }
+ EmitVitals(stream, level, false);
+
+ if (Parents != null || ChildrenComplete) {
+ stream.Write(this, level, " extends");
+ string/*!*/ sep = " ";
+ foreach (ConstantParent/*!*/ p in cce.NonNull(Parents)) {
+ Contract.Assert(p != null);
+ stream.Write(this, level, sep);
+ sep = ", ";
+ if (p.Unique)
+ stream.Write(this, level, "unique ");
+ p.Parent.Emit(stream);
+ }
+ if (ChildrenComplete)
+ stream.Write(this, level, " complete");
+ }
+
+ stream.WriteLine(";");
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddVariable(this, true);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ base.Resolve(rc);
+ if (Parents != null) {
+ foreach (ConstantParent/*!*/ p in Parents) {
+ Contract.Assert(p != null);
+ p.Parent.Resolve(rc);
+ if (p.Parent.Decl != null && !(p.Parent.Decl is Constant))
+ rc.Error(p.Parent, "the parent of a constant has to be a constant");
+ if (this.Equals(p.Parent.Decl))
+ rc.Error(p.Parent, "constant cannot be its own parent");
+ }
+ }
+
+ // check that no parent occurs twice
+ // (could be optimised)
+ if (Parents != null) {
+ for (int i = 0; i < Parents.Count; ++i) {
+ if (Parents[i].Parent.Decl != null) {
+ for (int j = i + 1; j < Parents.Count; ++j) {
+ if (Parents[j].Parent.Decl != null &&
+ cce.NonNull(Parents[i].Parent.Decl).Equals(Parents[j].Parent.Decl))
+ rc.Error(Parents[j].Parent,
+ "{0} occurs more than once as parent",
+ Parents[j].Parent.Decl);
+ }
+ }
+ }
+ }
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ base.Typecheck(tc);
+
+ if (Parents != null) {
+ foreach (ConstantParent/*!*/ p in Parents) {
+ Contract.Assert(p != null);
+ p.Parent.Typecheck(tc);
+ if (!cce.NonNull(p.Parent.Decl).TypedIdent.Type.Unify(this.TypedIdent.Type))
+ tc.Error(p.Parent,
+ "parent of constant has incompatible type ({0} instead of {1})",
+ p.Parent.Decl.TypedIdent.Type, this.TypedIdent.Type);
+ }
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitConstant(this);
+ }
+ }
+ public class GlobalVariable : Variable {
+ public GlobalVariable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent)
+ : base(tok, typedIdent) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent != null);
+ }
+ public GlobalVariable(IToken/*!*/ tok, TypedIdent/*!*/ typedIdent, QKeyValue kv)
+ : base(tok, typedIdent, kv) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent != null);
+ }
+ public override bool IsMutable {
+ get {
+ return true;
+ }
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddVariable(this, true);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitGlobalVariable(this);
+ }
+ }
+ public class Formal : Variable {
+ public bool InComing;
+ public Formal(IToken tok, TypedIdent typedIdent, bool incoming, QKeyValue kv)
+ : base(tok, typedIdent, kv) {
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(tok != null);
+ InComing = incoming;
+ }
+ public Formal(IToken tok, TypedIdent typedIdent, bool incoming)
+ : this(tok, typedIdent, incoming, null) {
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(tok != null);
+ }
+ public override bool IsMutable {
+ get {
+ return !InComing;
+ }
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddVariable(this, false);
+ }
+
+ /// <summary>
+ /// Given a sequence of Formal declarations, returns sequence of Formals like the given one but without where clauses
+ /// and without any attributes.
+ /// The Type of each Formal is cloned.
+ /// </summary>
+ public static List<Variable> StripWhereClauses(List<Variable> w) {
+ Contract.Requires(w != null);
+ Contract.Ensures(Contract.Result<List<Variable>>() != null);
+ List<Variable> s = new List<Variable>();
+ foreach (Variable/*!*/ v in w) {
+ Contract.Assert(v != null);
+ Formal f = (Formal)v;
+ TypedIdent ti = f.TypedIdent;
+ s.Add(new Formal(f.tok, new TypedIdent(ti.tok, ti.Name, ti.Type.CloneUnresolved()), f.InComing, null));
+ }
+ return s;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitFormal(this);
+ }
+ }
+ public class LocalVariable : Variable {
+ public LocalVariable(IToken tok, TypedIdent typedIdent, QKeyValue kv)
+ : base(tok, typedIdent, kv) {
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(tok != null);
+ }
+ public LocalVariable(IToken tok, TypedIdent typedIdent)
+ : base(tok, typedIdent, null) {
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(tok != null);
+ }
+ public override bool IsMutable {
+ get {
+ return true;
+ }
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddVariable(this, false);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitLocalVariable(this);
+ }
+ }
+ public class Incarnation : LocalVariable {
+ public int incarnationNumber;
+ public readonly Variable OriginalVariable;
+ public Incarnation(Variable/*!*/ var, int i) :
+ base(
+ var.tok,
+ new TypedIdent(var.TypedIdent.tok, var.TypedIdent.Name + "@" + i, var.TypedIdent.Type)
+ ) {
+ Contract.Requires(var != null);
+ incarnationNumber = i;
+ OriginalVariable = var;
+ }
+
+ }
+ public class BoundVariable : Variable {
+ public BoundVariable(IToken tok, TypedIdent typedIdent)
+ : base(tok, typedIdent) {
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent.WhereExpr == null);
+ }
+ public BoundVariable(IToken tok, TypedIdent typedIdent, QKeyValue kv)
+ : base(tok, typedIdent, kv) {
+ Contract.Requires(typedIdent != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(typedIdent.WhereExpr == null);
+ }
+ public override bool IsMutable {
+ get {
+ return false;
+ }
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddVariable(this, false);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitBoundVariable(this);
+ }
+ }
+
+ public abstract class DeclWithFormals : NamedDeclaration {
+ public List<TypeVariable>/*!*/ TypeParameters;
+
+ private /*readonly--except in StandardVisitor*/ List<Variable>/*!*/ inParams, outParams;
+
+ public List<Variable>/*!*/ InParams {
+ get {
+ Contract.Ensures(Contract.Result<List<Variable>>() != null);
+ return this.inParams;
+ }
+ set {
+ Contract.Requires(value != null);
+ this.inParams = value;
+ }
+ }
+
+ public List<Variable>/*!*/ OutParams
+ {
+ get {
+ Contract.Ensures(Contract.Result<List<Variable>>() != null);
+ return this.outParams;
+ }
+ set {
+ Contract.Requires(value != null);
+ this.outParams = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(TypeParameters != null);
+ Contract.Invariant(this.inParams != null);
+ Contract.Invariant(this.outParams != null);
+ }
+
+ public DeclWithFormals(IToken tok, string name, List<TypeVariable> typeParams,
+ List<Variable> inParams, List<Variable> outParams)
+ : base(tok, name) {
+ Contract.Requires(inParams != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ this.TypeParameters = typeParams;
+ this.inParams = inParams;
+ this.outParams = outParams;
+ }
+
+ protected DeclWithFormals(DeclWithFormals that)
+ : base(that.tok, cce.NonNull(that.Name)) {
+ Contract.Requires(that != null);
+ this.TypeParameters = that.TypeParameters;
+ this.inParams = cce.NonNull(that.InParams);
+ this.outParams = cce.NonNull(that.OutParams);
+ }
+
+ public byte[] MD5Checksum_;
+ public byte[] MD5Checksum
+ {
+ get
+ {
+ if (MD5Checksum_ == null)
+ {
+ var c = Checksum;
+ if (c != null)
+ {
+ MD5Checksum_ = System.Security.Cryptography.MD5.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(c));
+ }
+ }
+ return MD5Checksum_;
+ }
+ }
+
+ public byte[] MD5DependencyChecksum_;
+ public byte[] MD5DependencyChecksum
+ {
+ get
+ {
+ Contract.Requires(DependenciesCollected);
+
+ if (MD5DependencyChecksum_ == null && MD5Checksum != null)
+ {
+ var c = MD5Checksum;
+ var transFuncDeps = new HashSet<Function>();
+ if (procedureDependencies != null)
+ {
+ foreach (var p in procedureDependencies)
+ {
+ if (p.FunctionDependencies != null)
+ {
+ foreach (var f in p.FunctionDependencies)
+ {
+ transFuncDeps.Add(f);
+ }
+ }
+ var pc = p.MD5Checksum;
+ if (pc == null) { return null; }
+ c = ChecksumHelper.CombineChecksums(c, pc, true);
+ }
+ }
+ if (FunctionDependencies != null)
+ {
+ foreach (var f in FunctionDependencies)
+ {
+ transFuncDeps.Add(f);
+ }
+ }
+ var q = new Queue<Function>(transFuncDeps);
+ while (q.Any())
+ {
+ var f = q.Dequeue();
+ var fc = f.MD5Checksum;
+ if (fc == null) { return null; }
+ c = ChecksumHelper.CombineChecksums(c, fc, true);
+ if (f.FunctionDependencies != null)
+ {
+ foreach (var d in f.FunctionDependencies)
+ {
+ if (!transFuncDeps.Contains(d))
+ {
+ transFuncDeps.Add(d);
+ q.Enqueue(d);
+ }
+ }
+ }
+ }
+ MD5DependencyChecksum_ = c;
+ }
+ return MD5DependencyChecksum_;
+ }
+ }
+
+ public string Checksum
+ {
+ get
+ {
+ return FindStringAttribute("checksum");
+ }
+ }
+
+ string dependencyChecksum;
+ public string DependencyChecksum
+ {
+ get
+ {
+ if (dependencyChecksum == null && DependenciesCollected && MD5DependencyChecksum != null)
+ {
+ dependencyChecksum = BitConverter.ToString(MD5DependencyChecksum);
+ }
+ return dependencyChecksum;
+ }
+ }
+
+ public bool DependenciesCollected { get; set; }
+
+ ISet<Procedure> procedureDependencies;
+
+ public ISet<Procedure> ProcedureDependencies
+ {
+ get { return procedureDependencies; }
+ }
+
+ public void AddProcedureDependency(Procedure procedure)
+ {
+ Contract.Requires(procedure != null);
+
+ if (procedureDependencies == null)
+ {
+ procedureDependencies = new HashSet<Procedure>();
+ }
+ procedureDependencies.Add(procedure);
+ }
+
+ ISet<Function> functionDependencies;
+
+ public ISet<Function> FunctionDependencies
+ {
+ get { return functionDependencies; }
+ }
+
+ public void AddFunctionDependency(Function function)
+ {
+ Contract.Requires(function != null);
+
+ if (functionDependencies == null)
+ {
+ functionDependencies = new HashSet<Function>();
+ }
+ functionDependencies.Add(function);
+ }
+
+ public bool SignatureEquals(DeclWithFormals other)
+ {
+ Contract.Requires(other != null);
+
+ string sig = null;
+ string otherSig = null;
+ using (var strWr = new System.IO.StringWriter())
+ using (var tokTxtWr = new TokenTextWriter("<no file>", strWr, false, false))
+ {
+ EmitSignature(tokTxtWr, this is Function);
+ sig = strWr.ToString();
+ }
+
+ using (var otherStrWr = new System.IO.StringWriter())
+ using (var otherTokTxtWr = new TokenTextWriter("<no file>", otherStrWr, false, false))
+ {
+ EmitSignature(otherTokTxtWr, other is Function);
+ otherSig = otherStrWr.ToString();
+ }
+ return sig == otherSig;
+ }
+
+ protected void EmitSignature(TokenTextWriter stream, bool shortRet) {
+ Contract.Requires(stream != null);
+ Type.EmitOptionalTypeParams(stream, TypeParameters);
+ stream.Write("(");
+ stream.push();
+ InParams.Emit(stream, true);
+ stream.Write(")");
+ stream.sep();
+
+ if (shortRet) {
+ Contract.Assert(OutParams.Count == 1);
+ stream.Write(" : ");
+ cce.NonNull(OutParams[0]).TypedIdent.Type.Emit(stream);
+ } else if (OutParams.Count > 0) {
+ stream.Write(" returns (");
+ OutParams.Emit(stream, true);
+ stream.Write(")");
+ }
+ stream.pop();
+ }
+
+ // Register all type parameters at the resolution context
+ protected void RegisterTypeParameters(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ foreach (TypeVariable/*!*/ v in TypeParameters) {
+ Contract.Assert(v != null);
+ rc.AddTypeBinder(v);
+ }
+ }
+
+ protected void SortTypeParams() {
+ List<Type>/*!*/ allTypes = new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray());
+ Contract.Assert(allTypes != null);
+ allTypes.AddRange(new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()));
+ TypeParameters = Type.SortTypeParams(TypeParameters, allTypes, null);
+ }
+
+ /// <summary>
+ /// Adds the given formals to the current variable context, and then resolves
+ /// the types of those formals. Does NOT resolve the where clauses of the
+ /// formals.
+ /// Relies on the caller to first create, and later tear down, that variable
+ /// context.
+ /// </summary>
+ /// <param name="rc"></param>
+ protected void RegisterFormals(List<Variable> formals, ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ Contract.Requires(formals != null);
+ foreach (Formal/*!*/ f in formals) {
+ Contract.Assert(f != null);
+ if (f.Name != TypedIdent.NoName) {
+ rc.AddVariable(f, false);
+ }
+ f.Resolve(rc);
+ }
+ }
+
+ /// <summary>
+ /// Resolves the where clauses (and attributes) of the formals.
+ /// </summary>
+ /// <param name="rc"></param>
+ protected void ResolveFormals(List<Variable> formals, ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ Contract.Requires(formals != null);
+ foreach (Formal/*!*/ f in formals) {
+ Contract.Assert(f != null);
+ f.ResolveWhere(rc);
+ }
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ TypecheckAttributes(tc);
+ foreach (Formal/*!*/ p in InParams) {
+ Contract.Assert(p != null);
+ p.Typecheck(tc);
+ }
+ foreach (Formal/*!*/ p in OutParams) {
+ Contract.Assert(p != null);
+ p.Typecheck(tc);
+ }
+ }
+ }
+
+ public class DatatypeConstructor : Function {
+ public List<DatatypeSelector> selectors;
+ public DatatypeMembership membership;
+
+ public DatatypeConstructor(Function func)
+ : base(func.tok, func.Name, func.TypeParameters, func.InParams, func.OutParams[0], func.Comment, func.Attributes)
+ {
+ selectors = new List<DatatypeSelector>();
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ HashSet<string> selectorNames = new HashSet<string>();
+ foreach (DatatypeSelector selector in selectors) {
+ if (selector.Name.StartsWith("#")) {
+ rc.Error(selector.tok, "The selector must be a non-empty string");
+ }
+ else {
+ if (selectorNames.Contains(selector.Name))
+ rc.Error(this.tok, "The selectors for a constructor must be distinct strings");
+ else
+ selectorNames.Add(selector.Name);
+ }
+ }
+ base.Resolve(rc);
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ CtorType outputType = this.OutParams[0].TypedIdent.Type as CtorType;
+ if (outputType == null || !outputType.IsDatatype()) {
+ tc.Error(tok, "The output type of a constructor must be a datatype");
+ }
+ base.Typecheck(tc);
+ }
+ }
+
+ public class DatatypeSelector : Function {
+ public Function constructor;
+ public int index;
+ public DatatypeSelector(Function constructor, int index)
+ : base(constructor.InParams[index].tok,
+ constructor.InParams[index].Name + "#" + constructor.Name,
+ new List<Variable> { new Formal(constructor.tok, new TypedIdent(constructor.tok, "", constructor.OutParams[0].TypedIdent.Type), true) },
+ new Formal(constructor.tok, new TypedIdent(constructor.tok, "", constructor.InParams[index].TypedIdent.Type), false))
+ {
+ this.constructor = constructor;
+ this.index = index;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) { }
+ }
+
+ public class DatatypeMembership : Function {
+ public Function constructor;
+ public DatatypeMembership(Function constructor)
+ : base(constructor.tok,
+ "is#" + constructor.Name,
+ new List<Variable> { new Formal(constructor.tok, new TypedIdent(constructor.tok, "", constructor.OutParams[0].TypedIdent.Type), true) },
+ new Formal(constructor.tok, new TypedIdent(constructor.tok, "", Type.Bool), false))
+ {
+ this.constructor = constructor;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) { }
+ }
+
+ public class Function : DeclWithFormals {
+ public string Comment;
+
+ // the body is only set if the function is declared with {:inline}
+ public Expr Body;
+ public Axiom DefinitionAxiom;
+
+ public IList<Axiom> otherDefinitionAxioms;
+ public IEnumerable<Axiom> OtherDefinitionAxioms
+ {
+ get
+ {
+ return otherDefinitionAxioms;
+ }
+ }
+
+ public void AddOtherDefinitionAxiom(Axiom axiom)
+ {
+ Contract.Requires(axiom != null);
+
+ if (otherDefinitionAxioms == null)
+ {
+ otherDefinitionAxioms = new List<Axiom>();
+ }
+ otherDefinitionAxioms.Add(axiom);
+ }
+
+ public bool doingExpansion;
+
+ private bool neverTrigger;
+ private bool neverTriggerComputed;
+
+ public string OriginalLambdaExprAsString;
+
+ public Function(IToken tok, string name, List<Variable> args, Variable result)
+ : this(tok, name, new List<TypeVariable>(), args, result, null) {
+ Contract.Requires(result != null);
+ Contract.Requires(args != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, new List<TypeVariable>(), args, result, null);
+ }
+ public Function(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> args, Variable result)
+ : this(tok, name, typeParams, args, result, null) {
+ Contract.Requires(result != null);
+ Contract.Requires(args != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, typeParams, args, result, null);
+ }
+ public Function(IToken tok, string name, List<Variable> args, Variable result, string comment)
+ : this(tok, name, new List<TypeVariable>(), args, result, comment) {
+ Contract.Requires(result != null);
+ Contract.Requires(args != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, new List<TypeVariable>(), args, result, comment);
+ }
+ public Function(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> args, Variable/*!*/ result, string comment)
+ : base(tok, name, typeParams, args, new List<Variable> { result }) {
+ Contract.Requires(result != null);
+ Contract.Requires(args != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ Comment = comment;
+ }
+ public Function(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> args, Variable result,
+ string comment, QKeyValue kv)
+ : this(tok, name, typeParams, args, result, comment) {
+ Contract.Requires(args != null);
+ Contract.Requires(result != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, typeParams, args, result, comment);
+ this.Attributes = kv;
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ if (Comment != null) {
+ stream.WriteLine(this, level, "// " + Comment);
+ }
+ stream.Write(this, level, "function ");
+ EmitAttributes(stream);
+ if (Body != null && !QKeyValue.FindBoolAttribute(Attributes, "inline")) {
+ // Boogie inlines any function whose .Body field is non-null. The parser populates the .Body field
+ // is the :inline attribute is present, but if someone creates the Boogie file directly as an AST, then
+ // the :inline attribute may not be there. We'll make sure it's printed, so one can see that this means
+ // that the body will be inlined.
+ stream.Write("{:inline} ");
+ }
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ stream.Write("h{0}^^{1}", this.GetHashCode(), TokenTextWriter.SanitizeIdentifier(this.Name));
+ } else {
+ stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
+ }
+ EmitSignature(stream, true);
+ if (Body != null) {
+ stream.WriteLine();
+ stream.WriteLine("{");
+ stream.Write(level + 1, "");
+ Body.Emit(stream);
+ stream.WriteLine();
+ stream.WriteLine("}");
+ } else {
+ stream.WriteLine(";");
+ }
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddProcedure(this);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ int previousTypeBinderState = rc.TypeBinderState;
+ try {
+ RegisterTypeParameters(rc);
+ rc.PushVarContext();
+ RegisterFormals(InParams, rc);
+ RegisterFormals(OutParams, rc);
+ ResolveAttributes(rc);
+ if (Body != null)
+ {
+ rc.StateMode = ResolutionContext.State.StateLess;
+ Body.Resolve(rc);
+ rc.StateMode = ResolutionContext.State.Single;
+ }
+ rc.PopVarContext();
+ Type.CheckBoundVariableOccurrences(TypeParameters,
+ new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ this.tok, "function arguments",
+ rc);
+ } finally {
+ rc.TypeBinderState = previousTypeBinderState;
+ }
+ SortTypeParams();
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ // PR: why was the base call left out previously?
+ base.Typecheck(tc);
+ // TypecheckAttributes(tc);
+ if (Body != null) {
+ Body.Typecheck(tc);
+ if (!cce.NonNull(Body.Type).Unify(cce.NonNull(OutParams[0]).TypedIdent.Type))
+ tc.Error(Body,
+ "function body with invalid type: {0} (expected: {1})",
+ Body.Type, cce.NonNull(OutParams[0]).TypedIdent.Type);
+ }
+ }
+
+ public bool NeverTrigger {
+ get {
+ if (!neverTriggerComputed) {
+ this.CheckBooleanAttribute("never_pattern", ref neverTrigger);
+ neverTriggerComputed = true;
+ }
+ return neverTrigger;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitFunction(this);
+ }
+
+ public Axiom CreateDefinitionAxiom(Expr definition, QKeyValue kv = null) {
+ Contract.Requires(definition != null);
+
+ List<Variable> dummies = new List<Variable>();
+ List<Expr> callArgs = new List<Expr>();
+ int i = 0;
+ foreach (Formal/*!*/ f in InParams) {
+ Contract.Assert(f != null);
+ string nm = f.TypedIdent.HasName ? f.TypedIdent.Name : "_" + i;
+ dummies.Add(new BoundVariable(f.tok, new TypedIdent(f.tok, nm, f.TypedIdent.Type)));
+ callArgs.Add(new IdentifierExpr(f.tok, nm));
+ i++;
+ }
+ List<TypeVariable>/*!*/ quantifiedTypeVars = new List<TypeVariable>();
+ foreach (TypeVariable/*!*/ t in TypeParameters) {
+ Contract.Assert(t != null);
+ quantifiedTypeVars.Add(new TypeVariable(tok, t.Name));
+ }
+
+ Expr call = new NAryExpr(tok, new FunctionCall(new IdentifierExpr(tok, Name)), callArgs);
+ // specify the type of the function, because it might be that
+ // type parameters only occur in the output type
+ call = Expr.CoerceType(tok, call, (Type)OutParams[0].TypedIdent.Type.Clone());
+ Expr def = Expr.Binary(tok, BinaryOperator.Opcode.Eq, call, definition);
+ if (quantifiedTypeVars.Count != 0 || dummies.Count != 0) {
+ def = new ForallExpr(tok, quantifiedTypeVars, dummies,
+ kv,
+ new Trigger(tok, true, new List<Expr> { call }, null),
+ def);
+ }
+ DefinitionAxiom = new Axiom(tok, def);
+ return DefinitionAxiom;
+ }
+ }
+
+ public class Macro : Function {
+ public Macro(IToken tok, string name, List<Variable> args, Variable result)
+ : base(tok, name, args, result) { }
+ }
+
+ public class Requires : Absy, IPotentialErrorNode<string, string> {
+ public readonly bool Free;
+
+ private Expr/*!*/ _condition;
+
+ public Expr/*!*/ Condition {
+ get {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return this._condition;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._condition = value;
+ }
+ }
+
+ public string Comment;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._condition != null);
+ }
+
+
+ // TODO: convert to use generics
+ private string errorData;
+ public string ErrorData {
+ get {
+ return errorData;
+ }
+ set {
+ errorData = value;
+ }
+ }
+
+
+ private MiningStrategy errorDataEnhanced;
+ public MiningStrategy ErrorDataEnhanced {
+ get {
+ return errorDataEnhanced;
+ }
+ set {
+ errorDataEnhanced = value;
+ }
+ }
+
+ public QKeyValue Attributes;
+
+ public String ErrorMessage {
+ get {
+ return QKeyValue.FindStringAttribute(Attributes, "msg");
+ }
+ }
+
+ public Requires(IToken token, bool free, Expr condition, string comment, QKeyValue kv)
+ : base(token) {
+ Contract.Requires(condition != null);
+ Contract.Requires(token != null);
+ this.Free = free;
+ this._condition = condition;
+ this.Comment = comment;
+ this.Attributes = kv;
+ }
+
+ public Requires(IToken token, bool free, Expr condition, string comment)
+ : this(token, free, condition, comment, null) {
+ Contract.Requires(condition != null);
+ Contract.Requires(token != null);
+ //:this(token, free, condition, comment, null);
+ }
+
+ public Requires(bool free, Expr condition)
+ : this(Token.NoToken, free, condition, null) {
+ Contract.Requires(condition != null);
+ //:this(Token.NoToken, free, condition, null);
+ }
+
+ public Requires(bool free, Expr condition, string comment)
+ : this(Token.NoToken, free, condition, comment) {
+ Contract.Requires(condition != null);
+ //:this(Token.NoToken, free, condition, comment);
+ }
+
+ public void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ if (Comment != null) {
+ stream.WriteLine(this, level, "// " + Comment);
+ }
+ stream.Write(this, level, "{0}requires ", Free ? "free " : "");
+ Cmd.EmitAttributes(stream, Attributes);
+ this.Condition.Emit(stream);
+ stream.WriteLine(";");
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ this.Condition.Resolve(rc);
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ this.Condition.Typecheck(tc);
+ Contract.Assert(this.Condition.Type != null); // follows from postcondition of Expr.Typecheck
+ if (!this.Condition.Type.Unify(Type.Bool)) {
+ tc.Error(this, "preconditions must be of type bool");
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ return visitor.VisitRequires(this);
+ }
+ }
+
+ public class Ensures : Absy, IPotentialErrorNode<string, string> {
+ public readonly bool Free;
+
+ private Expr/*!*/ _condition;
+
+ public Expr/*!*/ Condition {
+ get {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return this._condition;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._condition = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._condition != null);
+ }
+
+ public string Comment;
+
+ // TODO: convert to use generics
+ private string errorData;
+ public string ErrorData {
+ get {
+ return errorData;
+ }
+ set {
+ errorData = value;
+ }
+ }
+
+ private MiningStrategy errorDataEnhanced;
+ public MiningStrategy ErrorDataEnhanced {
+ get {
+ return errorDataEnhanced;
+ }
+ set {
+ errorDataEnhanced = value;
+ }
+ }
+
+ public String ErrorMessage {
+ get {
+ return QKeyValue.FindStringAttribute(Attributes, "msg");
+ }
+ }
+
+ public QKeyValue Attributes;
+
+ public Ensures(IToken token, bool free, Expr/*!*/ condition, string comment, QKeyValue kv)
+ : base(token) {
+ Contract.Requires(condition != null);
+ Contract.Requires(token != null);
+ this.Free = free;
+ this._condition = condition;
+ this.Comment = comment;
+ this.Attributes = kv;
+ }
+
+ public Ensures(IToken token, bool free, Expr condition, string comment)
+ : this(token, free, condition, comment, null) {
+ Contract.Requires(condition != null);
+ Contract.Requires(token != null);
+ //:this(token, free, condition, comment, null);
+ }
+
+ public Ensures(bool free, Expr condition)
+ : this(Token.NoToken, free, condition, null) {
+ Contract.Requires(condition != null);
+ //:this(Token.NoToken, free, condition, null);
+ }
+
+ public Ensures(bool free, Expr condition, string comment)
+ : this(Token.NoToken, free, condition, comment) {
+ Contract.Requires(condition != null);
+ //:this(Token.NoToken, free, condition, comment);
+ }
+
+ public void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ if (Comment != null) {
+ stream.WriteLine(this, level, "// " + Comment);
+ }
+ stream.Write(this, level, "{0}ensures ", Free ? "free " : "");
+ Cmd.EmitAttributes(stream, Attributes);
+ this.Condition.Emit(stream);
+ stream.WriteLine(";");
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ this.Condition.Resolve(rc);
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ this.Condition.Typecheck(tc);
+ Contract.Assert(this.Condition.Type != null); // follows from postcondition of Expr.Typecheck
+ if (!this.Condition.Type.Unify(Type.Bool)) {
+ tc.Error(this, "postconditions must be of type bool");
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ return visitor.VisitEnsures(this);
+ }
+ }
+
+ public class Procedure : DeclWithFormals {
+ public List<Requires>/*!*/ Requires;
+ public List<IdentifierExpr>/*!*/ Modifies;
+ public List<Ensures>/*!*/ Ensures;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Requires != null);
+ Contract.Invariant(Modifies != null);
+ Contract.Invariant(Ensures != null);
+ Contract.Invariant(Summary != null);
+ }
+
+
+ // Abstract interpretation: Procedure-specific invariants...
+ [Rep]
+ public readonly ProcedureSummary/*!*/ Summary;
+
+ public Procedure(IToken/*!*/ tok, string/*!*/ name, List<TypeVariable>/*!*/ typeParams, List<Variable>/*!*/ inParams, List<Variable>/*!*/ outParams,
+ List<Requires>/*!*/ requires, List<IdentifierExpr>/*!*/ modifies, List<Ensures>/*!*/ ensures)
+ : this(tok, name, typeParams, inParams, outParams, requires, modifies, ensures, null) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(requires != null);
+ Contract.Requires(modifies != null);
+ Contract.Requires(ensures != null);
+ //:this(tok, name, typeParams, inParams, outParams, requires, modifies, ensures, null);
+ }
+
+ public Procedure(IToken/*!*/ tok, string/*!*/ name, List<TypeVariable>/*!*/ typeParams, List<Variable>/*!*/ inParams, List<Variable>/*!*/ outParams,
+ List<Requires>/*!*/ @requires, List<IdentifierExpr>/*!*/ @modifies, List<Ensures>/*!*/ @ensures, QKeyValue kv
+ )
+ : base(tok, name, typeParams, inParams, outParams) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(@requires != null);
+ Contract.Requires(@modifies != null);
+ Contract.Requires(@ensures != null);
+ this.Requires = @requires;
+ this.Modifies = @modifies;
+ this.Ensures = @ensures;
+ this.Summary = new ProcedureSummary();
+ this.Attributes = kv;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "procedure ");
+ EmitAttributes(stream);
+ stream.Write(this, level, "{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
+ EmitSignature(stream, false);
+ stream.WriteLine(";");
+
+ level++;
+
+ foreach (Requires/*!*/ e in this.Requires) {
+ Contract.Assert(e != null);
+ e.Emit(stream, level);
+ }
+
+ if (this.Modifies.Count > 0) {
+ stream.Write(level, "modifies ");
+ this.Modifies.Emit(stream, false);
+ stream.WriteLine(";");
+ }
+
+ foreach (Ensures/*!*/ e in this.Ensures) {
+ Contract.Assert(e != null);
+ e.Emit(stream, level);
+ }
+
+ if (!CommandLineOptions.Clo.IntraproceduralInfer) {
+ for (int s = 0; s < this.Summary.Count; s++) {
+ ProcedureSummaryEntry/*!*/ entry = cce.NonNull(this.Summary[s]);
+ stream.Write(level + 1, "// ");
+ stream.WriteLine();
+ }
+ }
+
+ stream.WriteLine();
+ stream.WriteLine();
+ }
+
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.AddProcedure(this);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.PushVarContext();
+
+ foreach (IdentifierExpr/*!*/ ide in Modifies) {
+ Contract.Assert(ide != null);
+ ide.Resolve(rc);
+ }
+
+ int previousTypeBinderState = rc.TypeBinderState;
+ try {
+ RegisterTypeParameters(rc);
+
+ RegisterFormals(InParams, rc);
+ ResolveFormals(InParams, rc); // "where" clauses of in-parameters are resolved without the out-parameters in scope
+ foreach (Requires/*!*/ e in Requires) {
+ Contract.Assert(e != null);
+ e.Resolve(rc);
+ }
+ RegisterFormals(OutParams, rc);
+ ResolveFormals(OutParams, rc); // "where" clauses of out-parameters are resolved with both in- and out-parametes in scope
+
+ rc.StateMode = ResolutionContext.State.Two;
+ foreach (Ensures/*!*/ e in Ensures) {
+ Contract.Assert(e != null);
+ e.Resolve(rc);
+ }
+ rc.StateMode = ResolutionContext.State.Single;
+ ResolveAttributes(rc);
+
+ Type.CheckBoundVariableOccurrences(TypeParameters,
+ new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ this.tok, "procedure arguments",
+ rc);
+
+ } finally {
+ rc.TypeBinderState = previousTypeBinderState;
+ }
+
+ rc.PopVarContext();
+
+ SortTypeParams();
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ base.Typecheck(tc);
+ foreach (IdentifierExpr/*!*/ ide in Modifies) {
+ Contract.Assert(ide != null);
+ Contract.Assume(ide.Decl != null);
+ if (!ide.Decl.IsMutable) {
+ tc.Error(this, "modifies list contains constant: {0}", ide.Name);
+ }
+ ide.Typecheck(tc);
+ }
+ foreach (Requires/*!*/ e in Requires) {
+ Contract.Assert(e != null);
+ e.Typecheck(tc);
+ }
+ bool oldYields = tc.Yields;
+ tc.Yields = QKeyValue.FindBoolAttribute(Attributes, "yields");
+ foreach (Ensures/*!*/ e in Ensures) {
+ Contract.Assert(e != null);
+ e.Typecheck(tc);
+ }
+ tc.Yields = oldYields;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitProcedure(this);
+ }
+ }
+
+ public class LoopProcedure : Procedure
+ {
+ public Implementation enclosingImpl;
+ private Dictionary<Block, Block> blockMap;
+ private Dictionary<string, Block> blockLabelMap;
+
+ public LoopProcedure(Implementation impl, Block header,
+ List<Variable> inputs, List<Variable> outputs, List<IdentifierExpr> globalMods)
+ : base(Token.NoToken, impl.Name + "_loop_" + header.ToString(),
+ new List<TypeVariable>(), inputs, outputs,
+ new List<Requires>(), globalMods, new List<Ensures>())
+ {
+ enclosingImpl = impl;
+ }
+
+ public void setBlockMap(Dictionary<Block, Block> bm)
+ {
+ blockMap = bm;
+ blockLabelMap = new Dictionary<string, Block>();
+ foreach (var kvp in bm)
+ {
+ blockLabelMap.Add(kvp.Key.Label, kvp.Value);
+ }
+ }
+
+ public Block getBlock(string label)
+ {
+ if (blockLabelMap.ContainsKey(label)) return blockLabelMap[label];
+ return null;
+ }
+ }
+
+ public class Implementation : DeclWithFormals {
+ public List<Variable>/*!*/ LocVars;
+ [Rep]
+ public StmtList StructuredStmts;
+ [Rep]
+ public List<Block/*!*/>/*!*/ Blocks;
+ public Procedure Proc;
+
+ // Blocks before applying passification etc.
+ // Both are used only when /inline is set.
+ public List<Block/*!*/> OriginalBlocks;
+ public List<Variable> OriginalLocVars;
+
+ public readonly ISet<byte[]> AssertionChecksums = new HashSet<byte[]>(ChecksumComparer.Default);
+
+ public sealed class ChecksumComparer : IEqualityComparer<byte[]>
+ {
+ static IEqualityComparer<byte[]> defaultComparer;
+ public static IEqualityComparer<byte[]> Default
+ {
+ get
+ {
+ if (defaultComparer == null)
+ {
+ defaultComparer = new ChecksumComparer();
+ }
+ return defaultComparer;
+ }
+ }
+
+ public bool Equals(byte[] x, byte[] y)
+ {
+ if (x == null || y == null)
+ {
+ return x == y;
+ }
+ else
+ {
+ return x.SequenceEqual(y);
+ }
+ }
+
+ public int GetHashCode(byte[] checksum)
+ {
+ if (checksum == null)
+ {
+ throw new ArgumentNullException("checksum");
+ }
+ else
+ {
+ var result = 17;
+ for (int i = 0; i < checksum.Length; i++)
+ {
+ result = result * 23 + checksum[i];
+ }
+ return result;
+ }
+ }
+ }
+
+ public void AddAssertionChecksum(byte[] checksum)
+ {
+ Contract.Requires(checksum != null);
+
+ if (AssertionChecksums != null)
+ {
+ AssertionChecksums.Add(checksum);
+ }
+ }
+
+ public ISet<byte[]> AssertionChecksumsInCachedSnapshot { get; set; }
+
+ public bool IsAssertionChecksumInCachedSnapshot(byte[] checksum)
+ {
+ Contract.Requires(AssertionChecksumsInCachedSnapshot != null);
+
+ return AssertionChecksumsInCachedSnapshot.Contains(checksum);
+ }
+
+ public IList<AssertCmd> RecycledFailingAssertions { get; protected set; }
+
+ public void AddRecycledFailingAssertion(AssertCmd assertion)
+ {
+ if (RecycledFailingAssertions == null)
+ {
+ RecycledFailingAssertions = new List<AssertCmd>();
+ }
+ RecycledFailingAssertions.Add(assertion);
+ }
+
+ public Cmd ExplicitAssumptionAboutCachedPrecondition { get; set; }
+
+ // Strongly connected components
+ private StronglyConnectedComponents<Block/*!*/> scc;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(LocVars != null);
+ Contract.Invariant(cce.NonNullElements(Blocks));
+ Contract.Invariant(cce.NonNullElements(OriginalBlocks, true));
+ Contract.Invariant(cce.NonNullElements(scc, true));
+
+ }
+ private bool BlockPredecessorsComputed;
+ public bool StronglyConnectedComponentsComputed {
+ get {
+ return this.scc != null;
+ }
+ }
+
+ public bool SkipVerification {
+ get {
+ bool verify = true;
+ cce.NonNull(this.Proc).CheckBooleanAttribute("verify", ref verify);
+ this.CheckBooleanAttribute("verify", ref verify);
+ if (!verify) {
+ return true;
+ }
+
+ if (CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assert ||
+ CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assume) {
+ Expr inl = this.FindExprAttribute("inline");
+ if (inl == null)
+ inl = this.Proc.FindExprAttribute("inline");
+ if (inl != null && inl is LiteralExpr && ((LiteralExpr)inl).isBigNum && ((LiteralExpr)inl).asBigNum.Signum > 0) {
+ return true;
+ }
+ }
+
+ if (CommandLineOptions.Clo.StratifiedInlining > 0) {
+ return !QKeyValue.FindBoolAttribute(Attributes, "entrypoint");
+ }
+
+ return false;
+ }
+ }
+
+ public string Id
+ {
+ get
+ {
+ var id = FindStringAttribute("id");
+ if (id == null)
+ {
+ id = Name + GetHashCode().ToString() + ":0";
+ }
+ return id;
+ }
+ }
+
+ public int Priority
+ {
+ get
+ {
+ int priority = 0;
+ CheckIntAttribute("priority", ref priority);
+ if (priority <= 0)
+ {
+ priority = 1;
+ }
+ return priority;
+ }
+ }
+
+ public IDictionary<byte[], object> ErrorChecksumToCachedError { get; private set; }
+
+ public bool IsErrorChecksumInCachedSnapshot(byte[] checksum)
+ {
+ Contract.Requires(ErrorChecksumToCachedError != null);
+
+ return ErrorChecksumToCachedError.ContainsKey(checksum);
+ }
+
+ public void SetErrorChecksumToCachedError(IEnumerable<Tuple<byte[], byte[], object>> errors)
+ {
+ Contract.Requires(errors != null);
+
+ ErrorChecksumToCachedError = new Dictionary<byte[], object>(ChecksumComparer.Default);
+ foreach (var kv in errors)
+ {
+ ErrorChecksumToCachedError[kv.Item1] = kv.Item3;
+ if (kv.Item2 != null)
+ {
+ ErrorChecksumToCachedError[kv.Item2] = null;
+ }
+ }
+ }
+
+ public bool HasCachedSnapshot
+ {
+ get
+ {
+ return ErrorChecksumToCachedError != null && AssertionChecksumsInCachedSnapshot != null;
+ }
+ }
+
+ public bool AnyErrorsInCachedSnapshot
+ {
+ get
+ {
+ Contract.Requires(ErrorChecksumToCachedError != null);
+
+ return ErrorChecksumToCachedError.Any();
+ }
+ }
+
+ IList<LocalVariable> injectedAssumptionVariables;
+ public IList<LocalVariable> InjectedAssumptionVariables
+ {
+ get
+ {
+ return injectedAssumptionVariables != null ? injectedAssumptionVariables : new List<LocalVariable>();
+ }
+ }
+
+ IList<LocalVariable> doomedInjectedAssumptionVariables;
+ public IList<LocalVariable> DoomedInjectedAssumptionVariables
+ {
+ get
+ {
+ return doomedInjectedAssumptionVariables != null ? doomedInjectedAssumptionVariables : new List<LocalVariable>();
+ }
+ }
+
+ public List<LocalVariable> RelevantInjectedAssumptionVariables(Dictionary<Variable, Expr> incarnationMap)
+ {
+ return InjectedAssumptionVariables.Where(v => { Expr e; if (incarnationMap.TryGetValue(v, out e)) { var le = e as LiteralExpr; return le == null || !le.IsTrue; } else { return false; } }).ToList();
+ }
+
+ public List<LocalVariable> RelevantDoomedInjectedAssumptionVariables(Dictionary<Variable, Expr> incarnationMap)
+ {
+ return DoomedInjectedAssumptionVariables.Where(v => { Expr e; if (incarnationMap.TryGetValue(v, out e)) { var le = e as LiteralExpr; return le == null || !le.IsTrue; } else { return false; } }).ToList();
+ }
+
+ public Expr ConjunctionOfInjectedAssumptionVariables(Dictionary<Variable, Expr> incarnationMap, out bool isTrue)
+ {
+ Contract.Requires(incarnationMap != null);
+
+ var vars = RelevantInjectedAssumptionVariables(incarnationMap).Select(v => incarnationMap[v]).ToList();
+ isTrue = vars.Count == 0;
+ return LiteralExpr.BinaryTreeAnd(vars);
+ }
+
+ public void InjectAssumptionVariable(LocalVariable variable, bool isDoomed = false)
+ {
+ LocVars.Add(variable);
+ if (isDoomed)
+ {
+ if (doomedInjectedAssumptionVariables == null)
+ {
+ doomedInjectedAssumptionVariables = new List<LocalVariable>();
+ }
+ doomedInjectedAssumptionVariables.Add(variable);
+ }
+ else
+ {
+ if (injectedAssumptionVariables == null)
+ {
+ injectedAssumptionVariables = new List<LocalVariable>();
+ }
+ injectedAssumptionVariables.Add(variable);
+ }
+ }
+
+ public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] StmtList structuredStmts, QKeyValue kv)
+ : this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, kv, new Errors()) {
+ Contract.Requires(structuredStmts != null);
+ Contract.Requires(localVariables != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, new Errors());
+ }
+
+ public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] StmtList structuredStmts)
+ : this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, new Errors()) {
+ Contract.Requires(structuredStmts != null);
+ Contract.Requires(localVariables != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, new Errors());
+ }
+
+ public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] StmtList structuredStmts, Errors errorHandler)
+ : this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, errorHandler) {
+ Contract.Requires(errorHandler != null);
+ Contract.Requires(structuredStmts != null);
+ Contract.Requires(localVariables != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, typeParams, inParams, outParams, localVariables, structuredStmts, null, errorHandler);
+ }
+
+ public Implementation(IToken/*!*/ tok,
+ string/*!*/ name,
+ List<TypeVariable>/*!*/ typeParams,
+ List<Variable>/*!*/ inParams,
+ List<Variable>/*!*/ outParams,
+ List<Variable>/*!*/ localVariables,
+ [Captured] StmtList/*!*/ structuredStmts,
+ QKeyValue kv,
+ Errors/*!*/ errorHandler)
+ : base(tok, name, typeParams, inParams, outParams) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(localVariables != null);
+ Contract.Requires(structuredStmts != null);
+ Contract.Requires(errorHandler != null);
+ LocVars = localVariables;
+ StructuredStmts = structuredStmts;
+ BigBlocksResolutionContext ctx = new BigBlocksResolutionContext(structuredStmts, errorHandler);
+ Blocks = ctx.Blocks;
+ BlockPredecessorsComputed = false;
+ scc = null;
+ Attributes = kv;
+ }
+
+ public Implementation(IToken tok, string name, List<TypeVariable> typeParams, List<Variable> inParams, List<Variable> outParams, List<Variable> localVariables, [Captured] List<Block/*!*/> block)
+ : this(tok, name, typeParams, inParams, outParams, localVariables, block, null) {
+ Contract.Requires(cce.NonNullElements(block));
+ Contract.Requires(localVariables != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(name != null);
+ Contract.Requires(tok != null);
+ //:this(tok, name, typeParams, inParams, outParams, localVariables, block, null);
+ }
+
+ public Implementation(IToken/*!*/ tok,
+ string/*!*/ name,
+ List<TypeVariable>/*!*/ typeParams,
+ List<Variable>/*!*/ inParams,
+ List<Variable>/*!*/ outParams,
+ List<Variable>/*!*/ localVariables,
+ [Captured] List<Block/*!*/>/*!*/ blocks,
+ QKeyValue kv)
+ : base(tok, name, typeParams, inParams, outParams) {
+ Contract.Requires(name != null);
+ Contract.Requires(inParams != null);
+ Contract.Requires(outParams != null);
+ Contract.Requires(localVariables != null);
+ Contract.Requires(cce.NonNullElements(blocks));
+ LocVars = localVariables;
+ Blocks = blocks;
+ BlockPredecessorsComputed = false;
+ scc = null;
+ Attributes = kv;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "implementation ");
+ EmitAttributes(stream);
+ stream.Write(this, level, "{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
+ EmitSignature(stream, false);
+ stream.WriteLine();
+
+ stream.WriteLine(level, "{0}", '{');
+
+ foreach (Variable/*!*/ v in this.LocVars) {
+ Contract.Assert(v != null);
+ v.Emit(stream, level + 1);
+ }
+
+ if (this.StructuredStmts != null && !CommandLineOptions.Clo.PrintInstrumented && !CommandLineOptions.Clo.PrintInlined) {
+ if (this.LocVars.Count > 0) {
+ stream.WriteLine();
+ }
+ if (CommandLineOptions.Clo.PrintUnstructured < 2) {
+ if (CommandLineOptions.Clo.PrintUnstructured == 1) {
+ stream.WriteLine(this, level + 1, "/*** structured program:");
+ }
+ this.StructuredStmts.Emit(stream, level + 1);
+ if (CommandLineOptions.Clo.PrintUnstructured == 1) {
+ stream.WriteLine(level + 1, "**** end structured program */");
+ }
+ }
+ }
+
+ if (this.StructuredStmts == null || 1 <= CommandLineOptions.Clo.PrintUnstructured ||
+ CommandLineOptions.Clo.PrintInstrumented || CommandLineOptions.Clo.PrintInlined) {
+ foreach (Block b in this.Blocks) {
+ b.Emit(stream, level + 1);
+ }
+ }
+
+ stream.WriteLine(level, "{0}", '}');
+
+ stream.WriteLine();
+ stream.WriteLine();
+ }
+ public override void Register(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ // nothing to register
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ if (Proc != null) {
+ // already resolved
+ return;
+ }
+
+ DeclWithFormals dwf = rc.LookUpProcedure(cce.NonNull(this.Name));
+ Proc = dwf as Procedure;
+ if (dwf == null) {
+ rc.Error(this, "implementation given for undeclared procedure: {0}", this.Name);
+ } else if (Proc == null) {
+ rc.Error(this, "implementations given for function, not procedure: {0}", this.Name);
+ }
+
+ int previousTypeBinderState = rc.TypeBinderState;
+ try {
+ RegisterTypeParameters(rc);
+
+ rc.PushVarContext();
+ RegisterFormals(InParams, rc);
+ RegisterFormals(OutParams, rc);
+
+ foreach (Variable/*!*/ v in LocVars) {
+ Contract.Assert(v != null);
+ v.Register(rc);
+ v.Resolve(rc);
+ }
+ foreach (Variable/*!*/ v in LocVars) {
+ Contract.Assert(v != null);
+ v.ResolveWhere(rc);
+ }
+
+ rc.PushProcedureContext();
+ foreach (Block b in Blocks) {
+ b.Register(rc);
+ }
+
+ ResolveAttributes(rc);
+
+ rc.StateMode = ResolutionContext.State.Two;
+ foreach (Block b in Blocks) {
+ b.Resolve(rc);
+ }
+ rc.StateMode = ResolutionContext.State.Single;
+
+ rc.PopProcedureContext();
+ rc.PopVarContext();
+
+ Type.CheckBoundVariableOccurrences(TypeParameters,
+ new List<Type>(InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ new List<Type>(OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ this.tok, "implementation arguments",
+ rc);
+ } finally {
+ rc.TypeBinderState = previousTypeBinderState;
+ }
+ SortTypeParams();
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ base.Typecheck(tc);
+
+ Contract.Assume(this.Proc != null);
+
+ if (this.TypeParameters.Count != Proc.TypeParameters.Count) {
+ tc.Error(this, "mismatched number of type parameters in procedure implementation: {0}",
+ this.Name);
+ } else {
+ // if the numbers of type parameters are different, it is
+ // difficult to compare the argument types
+ MatchFormals(this.InParams, Proc.InParams, "in", tc);
+ MatchFormals(this.OutParams, Proc.OutParams, "out", tc);
+ }
+
+ foreach (Variable/*!*/ v in LocVars) {
+ Contract.Assert(v != null);
+ v.Typecheck(tc);
+ }
+ List<IdentifierExpr> oldFrame = tc.Frame;
+ bool oldYields = tc.Yields;
+ tc.Frame = Proc.Modifies;
+ tc.Yields = QKeyValue.FindBoolAttribute(Proc.Attributes, "yields");
+ foreach (Block b in Blocks) {
+ b.Typecheck(tc);
+ }
+ Contract.Assert(tc.Frame == Proc.Modifies);
+ tc.Frame = oldFrame;
+ tc.Yields = oldYields;
+ }
+ void MatchFormals(List<Variable>/*!*/ implFormals, List<Variable>/*!*/ procFormals, string/*!*/ inout, TypecheckingContext/*!*/ tc) {
+ Contract.Requires(implFormals != null);
+ Contract.Requires(procFormals != null);
+ Contract.Requires(inout != null);
+ Contract.Requires(tc != null);
+ if (implFormals.Count != procFormals.Count) {
+ tc.Error(this, "mismatched number of {0}-parameters in procedure implementation: {1}",
+ inout, this.Name);
+ } else {
+ // unify the type parameters so that types can be compared
+ Contract.Assert(Proc != null);
+ Contract.Assert(this.TypeParameters.Count == Proc.TypeParameters.Count);
+
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst1 =
+ new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst2 =
+ new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+
+ for (int i = 0; i < this.TypeParameters.Count; ++i) {
+ TypeVariable/*!*/ newVar =
+ new TypeVariable(Token.NoToken, Proc.TypeParameters[i].Name);
+ Contract.Assert(newVar != null);
+ subst1.Add(Proc.TypeParameters[i], newVar);
+ subst2.Add(this.TypeParameters[i], newVar);
+ }
+
+ for (int i = 0; i < implFormals.Count; i++) {
+ // the names of the formals are allowed to change from the proc to the impl
+
+ // but types must be identical
+ Type t = cce.NonNull((Variable)implFormals[i]).TypedIdent.Type.Substitute(subst2);
+ Type u = cce.NonNull((Variable)procFormals[i]).TypedIdent.Type.Substitute(subst1);
+ if (!t.Equals(u)) {
+ string/*!*/ a = cce.NonNull((Variable)implFormals[i]).Name;
+ Contract.Assert(a != null);
+ string/*!*/ b = cce.NonNull((Variable)procFormals[i]).Name;
+ Contract.Assert(b != null);
+ string/*!*/ c;
+ if (a == b) {
+ c = a;
+ } else {
+ c = String.Format("{0} (named {1} in implementation)", b, a);
+ }
+ tc.Error(this, "mismatched type of {0}-parameter in implementation {1}: {2}", inout, this.Name, c);
+ }
+ }
+ }
+ }
+
+ private Dictionary<Variable, Expr>/*?*/ formalMap = null;
+ public void ResetImplFormalMap() {
+ this.formalMap = null;
+ }
+ public Dictionary<Variable, Expr>/*!*/ GetImplFormalMap() {
+ Contract.Ensures(Contract.Result<Dictionary<Variable, Expr>>() != null);
+
+ if (this.formalMap != null)
+ return this.formalMap;
+ else {
+ Dictionary<Variable, Expr>/*!*/ map = new Dictionary<Variable, Expr> (InParams.Count + OutParams.Count);
+
+ Contract.Assume(this.Proc != null);
+ Contract.Assume(InParams.Count == Proc.InParams.Count);
+ for (int i = 0; i < InParams.Count; i++) {
+ Variable/*!*/ v = InParams[i];
+ Contract.Assert(v != null);
+ IdentifierExpr ie = new IdentifierExpr(v.tok, v);
+ Variable/*!*/ pv = Proc.InParams[i];
+ Contract.Assert(pv != null);
+ map.Add(pv, ie);
+ }
+ System.Diagnostics.Debug.Assert(OutParams.Count == Proc.OutParams.Count);
+ for (int i = 0; i < OutParams.Count; i++) {
+ Variable/*!*/ v = cce.NonNull(OutParams[i]);
+ IdentifierExpr ie = new IdentifierExpr(v.tok, v);
+ Variable pv = cce.NonNull(Proc.OutParams[i]);
+ map.Add(pv, ie);
+ }
+ this.formalMap = map;
+
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ Console.WriteLine("Implementation.GetImplFormalMap on {0}:", this.Name);
+ using (TokenTextWriter stream = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/false, /*pretty=*/ false)) {
+ foreach (var e in map) {
+ Console.Write(" ");
+ cce.NonNull((Variable/*!*/)e.Key).Emit(stream, 0);
+ Console.Write(" --> ");
+ cce.NonNull((Expr)e.Value).Emit(stream);
+ Console.WriteLine();
+ }
+ }
+ }
+
+ return map;
+ }
+ }
+
+ /// <summary>
+ /// Return a collection of blocks that are reachable from the block passed as a parameter.
+ /// The block must be defined in the current implementation
+ /// </summary>
+ public ICollection<Block/*!*/> GetConnectedComponents(Block startingBlock) {
+ Contract.Requires(startingBlock != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<Block>>(), true));
+ Contract.Assert(this.Blocks.Contains(startingBlock));
+
+ if (!this.BlockPredecessorsComputed)
+ ComputeStronglyConnectedComponents();
+
+#if DEBUG_PRINT
+ System.Console.WriteLine("* Strongly connected components * \n{0} \n ** ", scc);
+#endif
+
+ foreach (ICollection<Block/*!*/> component in cce.NonNull(this.scc)) {
+ foreach (Block/*!*/ b in component) {
+ Contract.Assert(b != null);
+ if (b == startingBlock) // We found the compontent that owns the startingblock
+ {
+ return component;
+ }
+ }
+ }
+
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // if we are here, it means that the block is not in one of the components. This is an error.
+ }
+
+ /// <summary>
+ /// Compute the strongly connected compontents of the blocks in the implementation.
+ /// As a side effect, it also computes the "predecessor" relation for the block in the implementation
+ /// </summary>
+ override public void ComputeStronglyConnectedComponents() {
+ if (!this.BlockPredecessorsComputed)
+ ComputePredecessorsForBlocks();
+
+ Adjacency<Block/*!*/> next = new Adjacency<Block/*!*/>(Successors);
+ Adjacency<Block/*!*/> prev = new Adjacency<Block/*!*/>(Predecessors);
+
+ this.scc = new StronglyConnectedComponents<Block/*!*/>(this.Blocks, next, prev);
+ scc.Compute();
+
+
+ foreach (Block/*!*/ block in this.Blocks) {
+ Contract.Assert(block != null);
+ block.Predecessors = new List<Block>();
+ }
+
+ }
+
+ /// <summary>
+ /// Reset the abstract stated computed before
+ /// </summary>
+ override public void ResetAbstractInterpretationState() {
+ foreach (Block/*!*/ b in this.Blocks) {
+ Contract.Assert(b != null);
+ b.ResetAbstractInterpretationState();
+ }
+ }
+
+ /// <summary>
+ /// A private method used as delegate for the strongly connected components.
+ /// It return, given a node, the set of its successors
+ /// </summary>
+ private IEnumerable/*<Block!>*//*!*/ Successors(Block node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+
+ GotoCmd gotoCmd = node.TransferCmd as GotoCmd;
+
+ if (gotoCmd != null) { // If it is a gotoCmd
+ Contract.Assert(gotoCmd.labelTargets != null);
+
+ return gotoCmd.labelTargets;
+ } else { // otherwise must be a ReturnCmd
+ Contract.Assert(node.TransferCmd is ReturnCmd);
+
+ return new List<Block/*!*/>();
+ }
+ }
+
+ /// <summary>
+ /// A private method used as delegate for the strongly connected components.
+ /// It return, given a node, the set of its predecessors
+ /// </summary>
+ private IEnumerable/*<Block!>*//*!*/ Predecessors(Block node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<IEnumerable>() != null);
+
+ Contract.Assert(this.BlockPredecessorsComputed);
+
+ return node.Predecessors;
+ }
+
+ /// <summary>
+ /// Compute the predecessor informations for the blocks
+ /// </summary>
+ public void ComputePredecessorsForBlocks() {
+ foreach (Block b in this.Blocks) {
+ b.Predecessors = new List<Block>();
+ }
+ foreach (Block b in this.Blocks) {
+ GotoCmd gtc = b.TransferCmd as GotoCmd;
+ if (gtc != null) {
+ Contract.Assert(gtc.labelTargets != null);
+ foreach (Block/*!*/ dest in gtc.labelTargets) {
+ Contract.Assert(dest != null);
+ dest.Predecessors.Add(b);
+ }
+ }
+ }
+ this.BlockPredecessorsComputed = true;
+ }
+
+ public void PruneUnreachableBlocks() {
+ ArrayList /*Block!*/ visitNext = new ArrayList /*Block!*/ ();
+ List<Block/*!*/> reachableBlocks = new List<Block/*!*/>();
+ HashSet<Block> reachable = new HashSet<Block>(); // the set of elements in "reachableBlocks"
+
+ visitNext.Add(this.Blocks[0]);
+ while (visitNext.Count != 0) {
+ Block b = cce.NonNull((Block)visitNext[visitNext.Count - 1]);
+ visitNext.RemoveAt(visitNext.Count - 1);
+ if (!reachable.Contains(b)) {
+ reachableBlocks.Add(b);
+ reachable.Add(b);
+ if (b.TransferCmd is GotoCmd) {
+ if (CommandLineOptions.Clo.PruneInfeasibleEdges) {
+ foreach (Cmd/*!*/ s in b.Cmds) {
+ Contract.Assert(s != null);
+ if (s is PredicateCmd) {
+ LiteralExpr e = ((PredicateCmd)s).Expr as LiteralExpr;
+ if (e != null && e.IsFalse) {
+ // This statement sequence will never reach the end, because of this "assume false" or "assert false".
+ // Hence, it does not reach its successors.
+ b.TransferCmd = new ReturnCmd(b.TransferCmd.tok);
+ goto NEXT_BLOCK;
+ }
+ }
+ }
+ }
+ // it seems that the goto statement at the end may be reached
+ foreach (Block succ in cce.NonNull((GotoCmd)b.TransferCmd).labelTargets) {
+ Contract.Assume(succ != null);
+ visitNext.Add(succ);
+ }
+ }
+ }
+ NEXT_BLOCK: {
+ }
+ }
+
+ this.Blocks = reachableBlocks;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitImplementation(this);
+ }
+
+ public void FreshenCaptureStates() {
+
+ // Assume commands with the "captureState" attribute allow model states to be
+ // captured for error reporting.
+ // Some program transformations, such as loop unrolling, duplicate parts of the
+ // program, leading to "capture-state-assumes" being duplicated. This leads
+ // to ambiguity when getting a state from the model.
+ // This method replaces the key of every "captureState" attribute with something
+ // unique
+
+ int FreshCounter = 0;
+ foreach(var b in Blocks) {
+ List<Cmd> newCmds = new List<Cmd>();
+ for (int i = 0; i < b.Cmds.Count(); i++) {
+ var a = b.Cmds[i] as AssumeCmd;
+ if (a != null && (QKeyValue.FindStringAttribute(a.Attributes, "captureState") != null)) {
+ string StateName = QKeyValue.FindStringAttribute(a.Attributes, "captureState");
+ newCmds.Add(new AssumeCmd(Token.NoToken, a.Expr, FreshenCaptureState(a.Attributes, FreshCounter)));
+ FreshCounter++;
+ }
+ else {
+ newCmds.Add(b.Cmds[i]);
+ }
+ }
+ b.Cmds = newCmds;
+ }
+ }
+
+ private QKeyValue FreshenCaptureState(QKeyValue Attributes, int FreshCounter) {
+ // Returns attributes identical to Attributes, but:
+ // - reversed (for ease of implementation; should not matter)
+ // - with the value for "captureState" replaced by a fresh value
+ Contract.Requires(QKeyValue.FindStringAttribute(Attributes, "captureState") != null);
+ string FreshValue = QKeyValue.FindStringAttribute(Attributes, "captureState") + "$renamed$" + Name + "$" + FreshCounter;
+
+ QKeyValue result = null;
+ while (Attributes != null) {
+ if (Attributes.Key.Equals("captureState")) {
+ result = new QKeyValue(Token.NoToken, Attributes.Key, new List<object>() { FreshValue }, result);
+ } else {
+ result = new QKeyValue(Token.NoToken, Attributes.Key, Attributes.Params, result);
+ }
+ Attributes = Attributes.Next;
+ }
+ return result;
+ }
+
+ }
+
+
+ public class TypedIdent : Absy {
+ public const string NoName = "";
+
+ private string/*!*/ _name;
+
+ public string/*!*/ Name {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this._name;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._name = value;
+ }
+ }
+
+ private Type/*!*/ _type;
+
+ public Type/*!*/ Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this._type;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._type = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._name != null);
+ Contract.Invariant(this._type != null);
+ }
+
+ public Expr WhereExpr;
+ // [NotDelayed]
+ public TypedIdent(IToken/*!*/ tok, string/*!*/ name, Type/*!*/ type)
+ : this(tok, name, type, null) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(type != null);
+ Contract.Ensures(this.WhereExpr == null); //PM: needed to verify BoogiePropFactory.FreshBoundVariable
+ //:this(tok, name, type, null); // here for aesthetic reasons
+ }
+ // [NotDelayed]
+ public TypedIdent(IToken/*!*/ tok, string/*!*/ name, Type/*!*/ type, Expr whereExpr)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(type != null);
+ Contract.Ensures(this.WhereExpr == whereExpr);
+ this._name = name;
+ this._type = type;
+ this.WhereExpr = whereExpr;
+ }
+ public bool HasName {
+ get {
+ return this.Name != NoName;
+ }
+ }
+ public void Emit(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ stream.SetToken(this);
+ stream.push();
+ if (this.Name != NoName) {
+ stream.Write("{0}: ", TokenTextWriter.SanitizeIdentifier(this.Name));
+ }
+ this.Type.Emit(stream);
+ if (this.WhereExpr != null) {
+ stream.sep();
+ stream.Write(" where ");
+ this.WhereExpr.Emit(stream);
+ }
+ stream.pop();
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ // NOTE: WhereExpr needs to be resolved by the caller, because the caller must provide a modified ResolutionContext
+ this.Type = this.Type.ResolveType(rc);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ // type variables can occur when working with polymorphic functions/procedures
+ // if (!this.Type.IsClosed)
+ // tc.Error(this, "free variables in type of an identifier: {0}",
+ // this.Type.FreeVariables);
+ if (this.WhereExpr != null) {
+ this.WhereExpr.Typecheck(tc);
+ Contract.Assert(this.WhereExpr.Type != null); // follows from postcondition of Expr.Typecheck
+ if (!this.WhereExpr.Type.Unify(Type.Bool)) {
+ tc.Error(this, "where clauses must be of type bool");
+ }
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitTypedIdent(this);
+ }
+ }
+
+ #region Helper methods for generic Sequences
+
+ public static class TypeVariableSeqAlgorithms {
+ public static void AppendWithoutDups(this List<TypeVariable> tvs, List<TypeVariable> s1) {
+ Contract.Requires(s1 != null);
+ for (int i = 0; i < s1.Count; i++) {
+ TypeVariable/*!*/ next = s1[i];
+ Contract.Assert(next != null);
+ if (!tvs.Contains(next))
+ tvs.Add(next);
+ }
+ }
+ }
+
+ public static class Emitter {
+
+ public static void Emit(this List<Declaration/*!*/>/*!*/ decls, TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ Contract.Requires(cce.NonNullElements(decls));
+ bool first = true;
+ foreach (Declaration d in decls) {
+ if (d == null)
+ continue;
+ if (first) {
+ first = false;
+ } else {
+ stream.WriteLine();
+ }
+ d.Emit(stream, 0);
+ }
+ }
+
+ public static void Emit(this List<String> ss, TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ string sep = "";
+ foreach (string/*!*/ s in ss) {
+ Contract.Assert(s != null);
+ stream.Write(sep);
+ sep = ", ";
+ stream.Write(s);
+ }
+ }
+
+ public static void Emit(this IList<Expr> ts, TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ string sep = "";
+ stream.push();
+ foreach (Expr/*!*/ e in ts) {
+ Contract.Assert(e != null);
+ stream.Write(sep);
+ sep = ", ";
+ stream.sep();
+ e.Emit(stream);
+ }
+ stream.pop();
+ }
+
+ public static void Emit(this List<IdentifierExpr> ids, TokenTextWriter stream, bool printWhereComments) {
+ Contract.Requires(stream != null);
+ string sep = "";
+ foreach (IdentifierExpr/*!*/ e in ids) {
+ Contract.Assert(e != null);
+ stream.Write(sep);
+ sep = ", ";
+ e.Emit(stream);
+
+ if (printWhereComments && e.Decl != null && e.Decl.TypedIdent.WhereExpr != null) {
+ stream.Write(" /* where ");
+ e.Decl.TypedIdent.WhereExpr.Emit(stream);
+ stream.Write(" */");
+ }
+ }
+ }
+
+ public static void Emit(this List<Variable> vs, TokenTextWriter stream, bool emitAttributes) {
+ Contract.Requires(stream != null);
+ string sep = "";
+ stream.push();
+ foreach (Variable/*!*/ v in vs) {
+ Contract.Assert(v != null);
+ stream.Write(sep);
+ sep = ", ";
+ stream.sep();
+ v.EmitVitals(stream, 0, emitAttributes);
+ }
+ stream.pop();
+ }
+
+ public static void Emit(this List<Type> tys, TokenTextWriter stream, string separator) {
+ Contract.Requires(separator != null);
+ Contract.Requires(stream != null);
+ string sep = "";
+ foreach (Type/*!*/ v in tys) {
+ Contract.Assert(v != null);
+ stream.Write(sep);
+ sep = separator;
+ v.Emit(stream);
+ }
+ }
+
+ public static void Emit(this List<TypeVariable> tvs, TokenTextWriter stream, string separator) {
+ Contract.Requires(separator != null);
+ Contract.Requires(stream != null);
+ string sep = "";
+ foreach (TypeVariable/*!*/ v in tvs) {
+ Contract.Assert(v != null);
+ stream.Write(sep);
+ sep = separator;
+ v.Emit(stream);
+ }
+ }
+
+ }
+ #endregion
+
+
+ #region Regular Expressions
+ // a data structure to recover the "program structure" from the flow graph
+ public abstract class RE : Cmd {
+ public RE()
+ : base(Token.NoToken) {
+ }
+ public override void AddAssignedVariables(List<Variable> vars) {
+ //Contract.Requires(vars != null);
+ throw new NotImplementedException();
+ }
+ }
+ public class AtomicRE : RE {
+ private Block/*!*/ _b;
+
+ public Block b
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<Block>() != null);
+ return this._b;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this._b = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._b != null);
+ }
+
+ public AtomicRE(Block block) {
+ Contract.Requires(block != null);
+ this._b = block;
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ b.Resolve(rc);
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ b.Typecheck(tc);
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ b.Emit(stream, level);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitAtomicRE(this);
+ }
+ }
+ public abstract class CompoundRE : RE {
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ return;
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ return;
+ }
+ }
+ public class Sequential : CompoundRE {
+ private RE/*!*/ _first;
+
+ public RE/*!*/ first {
+ get {
+ Contract.Ensures(Contract.Result<RE>() != null);
+ return this._first;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._first = value;
+ }
+ }
+
+ private RE/*!*/ _second;
+
+ public RE/*!*/ second {
+ get {
+ Contract.Ensures(Contract.Result<RE>() != null);
+ return this._second;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._second = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._first != null);
+ Contract.Invariant(this._second != null);
+ }
+
+ public Sequential(RE first, RE second) {
+ Contract.Requires(first != null);
+ Contract.Requires(second != null);
+ this._first = first;
+ this._second = second;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.WriteLine();
+ stream.WriteLine("{0};", Indent(stream.UseForComputingChecksums ? 0 : level));
+ first.Emit(stream, level + 1);
+ second.Emit(stream, level + 1);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitSequential(this);
+ }
+ }
+ public class Choice : CompoundRE {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._rs != null);
+ }
+
+ private List<RE>/*!*/ _rs;
+
+ public List<RE>/*!*/ rs { //Rename this (and _rs) if possible
+ get {
+ Contract.Ensures(Contract.Result<List<RE>>() != null);
+ return this._rs;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._rs = value;
+ }
+ }
+
+ public Choice(List<RE> operands) {
+ Contract.Requires(operands != null);
+ this._rs = operands;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.WriteLine();
+ stream.WriteLine("{0}[]", Indent(stream.UseForComputingChecksums ? 0 : level));
+ foreach (RE/*!*/ r in rs) {
+ Contract.Assert(r != null);
+ r.Emit(stream, level + 1);
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitChoice(this);
+ }
+ }
+ public class DAG2RE {
+ public static RE Transform(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<RE>() != null);
+ TransferCmd tc = b.TransferCmd;
+ if (tc is ReturnCmd) {
+ return new AtomicRE(b);
+ } else if (tc is GotoCmd) {
+ GotoCmd/*!*/ g = (GotoCmd)tc;
+ Contract.Assert(g != null);
+ Contract.Assume(g.labelTargets != null);
+ if (g.labelTargets.Count == 1) {
+ return new Sequential(new AtomicRE(b), Transform(cce.NonNull(g.labelTargets[0])));
+ } else {
+ List<RE> rs = new List<RE>();
+ foreach (Block/*!*/ target in g.labelTargets) {
+ Contract.Assert(target != null);
+ RE r = Transform(target);
+ rs.Add(r);
+ }
+ RE second = new Choice(rs);
+ return new Sequential(new AtomicRE(b), second);
+ }
+ } else {
+ Contract.Assume(false);
+ throw new cce.UnreachableException();
+ }
+ }
+ }
+
+ #endregion
+
+ // NOTE: This class is here for convenience, since this file's
+ // classes are used pretty much everywhere.
+
+ public class BoogieDebug {
+ public static bool DoPrinting = false;
+
+ public static void Write(string format, params object[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(format != null);
+ if (DoPrinting) {
+ Console.Error.Write(format, args);
+ }
+ }
+
+ public static void WriteLine(string format, params object[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(format != null);
+ if (DoPrinting) {
+ Console.Error.WriteLine(format, args);
+ }
+ }
+
+ public static void WriteLine() {
+ if (DoPrinting) {
+ Console.Error.WriteLine();
+ }
+ }
+ }
+}
diff --git a/Source/Core/AbsyCmd.cs b/Source/Core/AbsyCmd.cs
index b5581ea6..2e33e1dd 100644
--- a/Source/Core/AbsyCmd.cs
+++ b/Source/Core/AbsyCmd.cs
@@ -1,3496 +1,3500 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// BoogiePL - Absy.cs
-//---------------------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie {
- using System;
- using System.Collections;
- using System.Diagnostics;
- using System.Collections.Generic;
- using System.Linq;
- using Microsoft.Boogie.AbstractInterpretation;
- using System.Diagnostics.Contracts;
- using Set = GSet<object>;
-
-
- //---------------------------------------------------------------------
- // BigBlock
- public class BigBlock {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(tok != null);
- Contract.Invariant(Anonymous || this.labelName != null);
- Contract.Invariant(this._ec == null || this._tc == null);
- Contract.Invariant(this._simpleCmds != null);
- }
-
- public readonly IToken/*!*/ tok;
-
- public readonly bool Anonymous;
-
- private string labelName;
-
- public string LabelName
- {
- get
- {
- Contract.Ensures(Anonymous || Contract.Result<string>() != null);
- return this.labelName;
- }
- set
- {
- Contract.Requires(Anonymous || value != null);
- this.labelName = value;
- }
- }
-
- [Rep]
- private List<Cmd>/*!*/ _simpleCmds;
-
- public List<Cmd>/*!*/ simpleCmds
- {
- get
- {
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- return this._simpleCmds;
- }
- set
- {
- Contract.Requires(value != null);
- this._simpleCmds = value;
- }
- }
-
- private StructuredCmd _ec;
-
- public StructuredCmd ec
- {
- get
- {
- return this._ec;
- }
- set
- {
- Contract.Requires(value == null || this.tc == null);
- this._ec = value;
- }
- }
-
- private TransferCmd _tc;
-
- public TransferCmd tc
- {
- get
- {
- return this._tc;
- }
- set
- {
- Contract.Requires(value == null || this.ec == null);
- this._tc = value;
- }
- }
-
- public BigBlock successorBigBlock; // semantic successor (may be a back-edge, pointing back to enclosing while statement); null if successor is end of procedure body (or if field has not yet been initialized)
-
- public BigBlock(IToken tok, string labelName, [Captured] List<Cmd> simpleCmds, StructuredCmd ec, TransferCmd tc) {
- Contract.Requires(simpleCmds != null);
- Contract.Requires(tok != null);
- Contract.Requires(ec == null || tc == null);
- this.tok = tok;
- this.Anonymous = labelName == null;
- this.labelName = labelName;
- this._simpleCmds = simpleCmds;
- this._ec = ec;
- this._tc = tc;
- }
-
- public void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- if (!Anonymous) {
- stream.WriteLine(level, "{0}:",
- CommandLineOptions.Clo.PrintWithUniqueASTIds ? String.Format("h{0}^^{1}", this.GetHashCode(), this.LabelName) : this.LabelName);
- }
-
- foreach (Cmd/*!*/ c in this.simpleCmds) {
- Contract.Assert(c != null);
- c.Emit(stream, level + 1);
- }
-
- if (this.ec != null) {
- this.ec.Emit(stream, level + 1);
- } else if (this.tc != null) {
- this.tc.Emit(stream, level + 1);
- }
- }
- }
-
- public class StmtList {
- [Rep]
- private readonly List<BigBlock/*!*/>/*!*/ bigBlocks;
-
- public IList<BigBlock/*!*/>/*!*/ BigBlocks
- {
- get
- {
- Contract.Ensures(Contract.Result<IList<BigBlock>>() != null);
- Contract.Ensures(Contract.Result<IList<BigBlock>>().IsReadOnly);
- return this.bigBlocks.AsReadOnly();
- }
- }
-
- public List<Cmd> PrefixCommands;
- public readonly IToken/*!*/ EndCurly;
- public StmtList ParentContext;
- public BigBlock ParentBigBlock;
-
- private readonly HashSet<string/*!*/>/*!*/ labels = new HashSet<string/*!*/>();
-
- public void AddLabel(string label)
- {
- labels.Add(label);
- }
-
- public IEnumerable<string/*!*/>/*!*/ Labels
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<string/*!*/>/*!*/>()));
- return this.labels.AsEnumerable<string>();
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(EndCurly != null);
- Contract.Invariant(cce.NonNullElements(this.bigBlocks));
- Contract.Invariant(cce.NonNullElements(this.labels));
- }
-
- public StmtList(IList<BigBlock/*!*/>/*!*/ bigblocks, IToken endCurly) {
- Contract.Requires(endCurly != null);
- Contract.Requires(cce.NonNullElements(bigblocks));
- Contract.Requires(bigblocks.Count > 0);
- this.bigBlocks = new List<BigBlock>(bigblocks);
- this.EndCurly = endCurly;
- }
-
- // prints the list of statements, not the surrounding curly braces
- public void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- bool needSeperator = false;
- foreach (BigBlock b in BigBlocks) {
- Contract.Assert(b != null);
- Contract.Assume(cce.IsPeerConsistent(b));
- if (needSeperator) {
- stream.WriteLine();
- }
- b.Emit(stream, level);
- needSeperator = true;
- }
- }
-
- /// <summary>
- /// Tries to insert the commands "prefixCmds" at the beginning of the first block
- /// of the StmtList, and returns "true" iff it succeeded.
- /// In the event of success, the "suggestedLabel" returns as the name of the
- /// block inside StmtList where "prefixCmds" were inserted. This name may be the
- /// same as the one passed in, in case this StmtList has no preference as to what
- /// to call its first block. In the event of failure, "suggestedLabel" is returned
- /// as its input value.
- /// Note, to be conservative (that is, ignoring the possible optimization that this
- /// method enables), this method can do nothing and return false.
- /// </summary>
- public bool PrefixFirstBlock([Captured] List<Cmd> prefixCmds, ref string suggestedLabel) {
- Contract.Requires(suggestedLabel != null);
- Contract.Requires(prefixCmds != null);
- Contract.Ensures(Contract.Result<bool>() || cce.Owner.None(prefixCmds)); // "prefixCmds" is captured only on success
- Contract.Assume(PrefixCommands == null); // prefix has not been used
-
- BigBlock bb0 = BigBlocks[0];
- if (prefixCmds.Count == 0) {
- // This is always a success, since there is nothing to insert. Now, decide
- // which name to use for the first block.
- if (bb0.Anonymous) {
- bb0.LabelName = suggestedLabel;
- } else {
- Contract.Assert(bb0.LabelName != null);
- suggestedLabel = bb0.LabelName;
- }
- return true;
-
- } else {
- // There really is something to insert. We can do this inline only if the first
- // block is anonymous (which implies there is no branch to it from within the block).
- if (bb0.Anonymous) {
- PrefixCommands = prefixCmds;
- bb0.LabelName = suggestedLabel;
- return true;
- } else {
- return false;
- }
- }
- }
- }
-
- /// <summary>
- /// The AST for Boogie structured commands was designed to support backward compatibility with
- /// the Boogie unstructured commands. This has made the structured commands hard to construct.
- /// The StmtListBuilder class makes it easier to build structured commands.
- /// </summary>
- public class StmtListBuilder {
- List<BigBlock/*!*/>/*!*/ bigBlocks = new List<BigBlock/*!*/>();
- string label;
- List<Cmd> simpleCmds;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(bigBlocks));
- }
-
- void Dump(StructuredCmd scmd, TransferCmd tcmd) {
- Contract.Requires(scmd == null || tcmd == null);
- Contract.Ensures(label == null && simpleCmds == null);
- if (label == null && simpleCmds == null && scmd == null && tcmd == null) {
- // nothing to do
- } else {
- if (simpleCmds == null) {
- simpleCmds = new List<Cmd>();
- }
- bigBlocks.Add(new BigBlock(Token.NoToken, label, simpleCmds, scmd, tcmd));
- label = null;
- simpleCmds = null;
- }
- }
-
- /// <summary>
- /// Collects the StmtList built so far and returns it. The StmtListBuilder should no longer
- /// be used once this method has been invoked.
- /// </summary>
- public StmtList Collect(IToken endCurlyBrace) {
- Contract.Requires(endCurlyBrace != null);
- Contract.Ensures(Contract.Result<StmtList>() != null);
- Dump(null, null);
- if (bigBlocks.Count == 0) {
- simpleCmds = new List<Cmd>(); // the StmtList constructor doesn't like an empty list of BigBlock's
- Dump(null, null);
- }
- return new StmtList(bigBlocks, endCurlyBrace);
- }
-
- public void Add(Cmd cmd) {
- Contract.Requires(cmd != null);
- if (simpleCmds == null) {
- simpleCmds = new List<Cmd>();
- }
- simpleCmds.Add(cmd);
- }
-
- public void Add(StructuredCmd scmd) {
- Contract.Requires(scmd != null);
- Dump(scmd, null);
- }
-
- public void Add(TransferCmd tcmd) {
- Contract.Requires(tcmd != null);
- Dump(null, tcmd);
- }
-
- public void AddLabelCmd(string label) {
- Contract.Requires(label != null);
- Dump(null, null);
- this.label = label;
- }
-
- public void AddLocalVariable(string name) {
- Contract.Requires(name != null);
- // TODO
- }
- }
-
- class BigBlocksResolutionContext {
- StmtList/*!*/ stmtList;
- [Peer]
- List<Block/*!*/> blocks;
- string/*!*/ prefix = "anon";
- int anon = 0;
- int FreshAnon()
- {
- return anon++;
- }
- HashSet<string/*!*/> allLabels = new HashSet<string/*!*/>();
- Errors/*!*/ errorHandler;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(stmtList != null);
- Contract.Invariant(cce.NonNullElements(blocks, true));
- Contract.Invariant(prefix != null);
- Contract.Invariant(cce.NonNullElements(allLabels, true));
- Contract.Invariant(errorHandler != null);
- }
-
- private void ComputeAllLabels(StmtList stmts) {
- if (stmts == null) return;
- foreach (BigBlock bb in stmts.BigBlocks) {
- if (bb.LabelName != null) {
- allLabels.Add(bb.LabelName);
- }
- ComputeAllLabels(bb.ec);
- }
- }
-
- private void ComputeAllLabels(StructuredCmd cmd) {
- if (cmd == null) return;
- if (cmd is IfCmd) {
- IfCmd ifCmd = (IfCmd)cmd;
- ComputeAllLabels(ifCmd.thn);
- ComputeAllLabels(ifCmd.elseIf);
- ComputeAllLabels(ifCmd.elseBlock);
- }
- else if (cmd is WhileCmd) {
- WhileCmd whileCmd = (WhileCmd)cmd;
- ComputeAllLabels(whileCmd.Body);
- }
- }
-
- public BigBlocksResolutionContext(StmtList stmtList, Errors errorHandler) {
- Contract.Requires(errorHandler != null);
- Contract.Requires(stmtList != null);
- this.stmtList = stmtList;
- this.errorHandler = errorHandler;
- ComputeAllLabels(stmtList);
- }
-
- public List<Block/*!*/>/*!*/ Blocks {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
- if (blocks == null) {
- blocks = new List<Block/*!*/>();
-
- int startErrorCount = this.errorHandler.count;
- // Check that all goto statements go to a label in allLabels, and no break statement to a non-enclosing loop.
- // Also, determine a good value for "prefix".
- CheckLegalLabels(stmtList, null, null);
-
- // fill in names of anonymous blocks
- NameAnonymousBlocks(stmtList);
-
- // determine successor blocks
- RecordSuccessors(stmtList, null);
-
- if (this.errorHandler.count == startErrorCount) {
- // generate blocks from the big blocks
- CreateBlocks(stmtList, null);
- }
- }
- return blocks;
- }
- }
-
- void CheckLegalLabels(StmtList stmtList, StmtList parentContext, BigBlock parentBigBlock) {
- Contract.Requires(stmtList != null);
- Contract.Requires((parentContext == null) == (parentBigBlock == null));
- Contract.Requires(stmtList.ParentContext == null); // it hasn't been set yet
- //modifies stmtList.*;
- Contract.Ensures(stmtList.ParentContext == parentContext);
- stmtList.ParentContext = parentContext;
- stmtList.ParentBigBlock = parentBigBlock;
-
- // record the labels declared in this StmtList
- foreach (BigBlock b in stmtList.BigBlocks) {
- if (b.LabelName != null) {
- string n = b.LabelName;
- if (n.StartsWith(prefix)) {
- if (prefix.Length < n.Length && n[prefix.Length] == '0') {
- prefix += "1";
- } else {
- prefix += "0";
- }
- }
- stmtList.AddLabel(b.LabelName);
- }
- }
-
- // check that labels in this and nested StmtList's are legal
- foreach (BigBlock b in stmtList.BigBlocks) {
- // goto's must reference blocks in enclosing blocks
- if (b.tc is GotoCmd) {
- GotoCmd g = (GotoCmd)b.tc;
- foreach (string/*!*/ lbl in cce.NonNull(g.labelNames)) {
- Contract.Assert(lbl != null);
- /*
- bool found = false;
- for (StmtList sl = stmtList; sl != null; sl = sl.ParentContext) {
- if (sl.Labels.Contains(lbl)) {
- found = true;
- break;
- }
- }
- if (!found) {
- this.errorHandler.SemErr(g.tok, "Error: goto label '" + lbl + "' is undefined or out of reach");
- }
- */
- if (!allLabels.Contains(lbl)) {
- this.errorHandler.SemErr(g.tok, "Error: goto label '" + lbl + "' is undefined");
- }
- }
- }
-
- // break labels must refer to an enclosing while statement
- else if (b.ec is BreakCmd) {
- BreakCmd bcmd = (BreakCmd)b.ec;
- Contract.Assert(bcmd.BreakEnclosure == null); // it hasn't been initialized yet
- bool found = false;
- for (StmtList sl = stmtList; sl.ParentBigBlock != null; sl = sl.ParentContext) {
- cce.LoopInvariant(sl != null);
- BigBlock bb = sl.ParentBigBlock;
-
- if (bcmd.Label == null) {
- // a label-less break statement breaks out of the innermost enclosing while statement
- if (bb.ec is WhileCmd) {
- bcmd.BreakEnclosure = bb;
- found = true;
- break;
- }
- } else if (bcmd.Label == bb.LabelName) {
- // a break statement with a label can break out of both if statements and while statements
- if (bb.simpleCmds.Count == 0) {
- // this is a good target: the label refers to the if/while statement
- bcmd.BreakEnclosure = bb;
- } else {
- // the label of bb refers to the first statement of bb, which in which case is a simple statement, not an if/while statement
- this.errorHandler.SemErr(bcmd.tok, "Error: break label '" + bcmd.Label + "' must designate an enclosing statement");
- }
- found = true; // don't look any further, since we've found a matching label
- break;
- }
- }
- if (!found) {
- if (bcmd.Label == null) {
- this.errorHandler.SemErr(bcmd.tok, "Error: break statement is not inside a loop");
- } else {
- this.errorHandler.SemErr(bcmd.tok, "Error: break label '" + bcmd.Label + "' must designate an enclosing statement");
- }
- }
- }
-
- // recurse
- else if (b.ec is WhileCmd) {
- WhileCmd wcmd = (WhileCmd)b.ec;
- CheckLegalLabels(wcmd.Body, stmtList, b);
- } else {
- for (IfCmd ifcmd = b.ec as IfCmd; ifcmd != null; ifcmd = ifcmd.elseIf) {
- CheckLegalLabels(ifcmd.thn, stmtList, b);
- if (ifcmd.elseBlock != null) {
- CheckLegalLabels(ifcmd.elseBlock, stmtList, b);
- }
- }
- }
- }
- }
-
- void NameAnonymousBlocks(StmtList stmtList) {
- Contract.Requires(stmtList != null);
- foreach (BigBlock b in stmtList.BigBlocks) {
- if (b.LabelName == null) {
- b.LabelName = prefix + FreshAnon();
- }
- if (b.ec is WhileCmd) {
- WhileCmd wcmd = (WhileCmd)b.ec;
- NameAnonymousBlocks(wcmd.Body);
- } else {
- for (IfCmd ifcmd = b.ec as IfCmd; ifcmd != null; ifcmd = ifcmd.elseIf) {
- NameAnonymousBlocks(ifcmd.thn);
- if (ifcmd.elseBlock != null) {
- NameAnonymousBlocks(ifcmd.elseBlock);
- }
- }
- }
- }
- }
-
- void RecordSuccessors(StmtList stmtList, BigBlock successor) {
- Contract.Requires(stmtList != null);
- for (int i = stmtList.BigBlocks.Count; 0 <= --i; ) {
- BigBlock big = stmtList.BigBlocks[i];
- big.successorBigBlock = successor;
-
- if (big.ec is WhileCmd) {
- WhileCmd wcmd = (WhileCmd)big.ec;
- RecordSuccessors(wcmd.Body, big);
- } else {
- for (IfCmd ifcmd = big.ec as IfCmd; ifcmd != null; ifcmd = ifcmd.elseIf) {
- RecordSuccessors(ifcmd.thn, successor);
- if (ifcmd.elseBlock != null) {
- RecordSuccessors(ifcmd.elseBlock, successor);
- }
- }
- }
-
- successor = big;
- }
- }
-
- // If the enclosing context is a loop, then "runOffTheEndLabel" is the loop head label;
- // otherwise, it is null.
- void CreateBlocks(StmtList stmtList, string runOffTheEndLabel) {
- Contract.Requires(stmtList != null);
- Contract.Requires(blocks != null);
- List<Cmd> cmdPrefixToApply = stmtList.PrefixCommands;
-
- int n = stmtList.BigBlocks.Count;
- foreach (BigBlock b in stmtList.BigBlocks) {
- n--;
- Contract.Assert(b.LabelName != null);
- List<Cmd> theSimpleCmds;
- if (cmdPrefixToApply == null) {
- theSimpleCmds = b.simpleCmds;
- } else {
- theSimpleCmds = new List<Cmd>();
- theSimpleCmds.AddRange(cmdPrefixToApply);
- theSimpleCmds.AddRange(b.simpleCmds);
- cmdPrefixToApply = null; // now, we've used 'em up
- }
-
- if (b.tc != null) {
- // this BigBlock has the very same components as a Block
- Contract.Assert(b.ec == null);
- Block block = new Block(b.tok, b.LabelName, theSimpleCmds, b.tc);
- blocks.Add(block);
-
- } else if (b.ec == null) {
- TransferCmd trCmd;
- if (n == 0 && runOffTheEndLabel != null) {
- // goto the given label instead of the textual successor block
- trCmd = new GotoCmd(stmtList.EndCurly, new List<String> { runOffTheEndLabel });
- } else {
- trCmd = GotoSuccessor(stmtList.EndCurly, b);
- }
- Block block = new Block(b.tok, b.LabelName, theSimpleCmds, trCmd);
- blocks.Add(block);
-
- } else if (b.ec is BreakCmd) {
- BreakCmd bcmd = (BreakCmd)b.ec;
- Contract.Assert(bcmd.BreakEnclosure != null);
- Block block = new Block(b.tok, b.LabelName, theSimpleCmds, GotoSuccessor(b.ec.tok, bcmd.BreakEnclosure));
- blocks.Add(block);
-
- } else if (b.ec is WhileCmd) {
- WhileCmd wcmd = (WhileCmd)b.ec;
- var a = FreshAnon();
- string loopHeadLabel = prefix + a + "_LoopHead";
- string/*!*/ loopBodyLabel = prefix + a + "_LoopBody";
- string loopDoneLabel = prefix + a + "_LoopDone";
-
- List<Cmd> ssBody = new List<Cmd>();
- List<Cmd> ssDone = new List<Cmd>();
- if (wcmd.Guard != null) {
- var ac = new AssumeCmd(wcmd.tok, wcmd.Guard);
- ac.Attributes = new QKeyValue(wcmd.tok, "partition", new List<object>(), null);
- ssBody.Add(ac);
-
- ac = new AssumeCmd(wcmd.tok, Expr.Not(wcmd.Guard));
- ac.Attributes = new QKeyValue(wcmd.tok, "partition", new List<object>(), null);
- ssDone.Add(ac);
- }
-
- // Try to squeeze in ssBody into the first block of wcmd.Body
- bool bodyGuardTakenCareOf = wcmd.Body.PrefixFirstBlock(ssBody, ref loopBodyLabel);
-
- // ... goto LoopHead;
- Block block = new Block(b.tok, b.LabelName, theSimpleCmds, new GotoCmd(wcmd.tok, new List<String> { loopHeadLabel }));
- blocks.Add(block);
-
- // LoopHead: assert/assume loop_invariant; goto LoopDone, LoopBody;
- List<Cmd> ssHead = new List<Cmd>();
- foreach (PredicateCmd inv in wcmd.Invariants) {
- ssHead.Add(inv);
- }
- block = new Block(wcmd.tok, loopHeadLabel, ssHead, new GotoCmd(wcmd.tok, new List<String> { loopDoneLabel, loopBodyLabel }));
- blocks.Add(block);
-
- if (!bodyGuardTakenCareOf) {
- // LoopBody: assume guard; goto firstLoopBlock;
- block = new Block(wcmd.tok, loopBodyLabel, ssBody, new GotoCmd(wcmd.tok, new List<String> { wcmd.Body.BigBlocks[0].LabelName }));
- blocks.Add(block);
- }
-
- // recurse to create the blocks for the loop body
- CreateBlocks(wcmd.Body, loopHeadLabel);
-
- // LoopDone: assume !guard; goto loopSuccessor;
- TransferCmd trCmd;
- if (n == 0 && runOffTheEndLabel != null) {
- // goto the given label instead of the textual successor block
- trCmd = new GotoCmd(wcmd.tok, new List<String> { runOffTheEndLabel });
- } else {
- trCmd = GotoSuccessor(wcmd.tok, b);
- }
- block = new Block(wcmd.tok, loopDoneLabel, ssDone, trCmd);
- blocks.Add(block);
-
- } else {
- IfCmd ifcmd = (IfCmd)b.ec;
- string predLabel = b.LabelName;
- List<Cmd> predCmds = theSimpleCmds;
-
- for (; ifcmd != null; ifcmd = ifcmd.elseIf) {
- var a = FreshAnon();
- string thenLabel = prefix + a + "_Then";
- Contract.Assert(thenLabel != null);
- string elseLabel = prefix + a + "_Else";
- Contract.Assert(elseLabel != null);
-
- List<Cmd> ssThen = new List<Cmd>();
- List<Cmd> ssElse = new List<Cmd>();
- if (ifcmd.Guard != null) {
- var ac = new AssumeCmd(ifcmd.tok, ifcmd.Guard);
- ac.Attributes = new QKeyValue(ifcmd.tok, "partition", new List<object>(), null);
- ssThen.Add(ac);
-
- ac = new AssumeCmd(ifcmd.tok, Expr.Not(ifcmd.Guard));
- ac.Attributes = new QKeyValue(ifcmd.tok, "partition", new List<object>(), null);
- ssElse.Add(ac);
- }
-
- // Try to squeeze in ssThen/ssElse into the first block of ifcmd.thn/ifcmd.elseBlock
- bool thenGuardTakenCareOf = ifcmd.thn.PrefixFirstBlock(ssThen, ref thenLabel);
- bool elseGuardTakenCareOf = false;
- if (ifcmd.elseBlock != null) {
- elseGuardTakenCareOf = ifcmd.elseBlock.PrefixFirstBlock(ssElse, ref elseLabel);
- }
-
- // ... goto Then, Else;
- Block block = new Block(b.tok, predLabel, predCmds,
- new GotoCmd(ifcmd.tok, new List<String> { thenLabel, elseLabel }));
- blocks.Add(block);
-
- if (!thenGuardTakenCareOf) {
- // Then: assume guard; goto firstThenBlock;
- block = new Block(ifcmd.tok, thenLabel, ssThen, new GotoCmd(ifcmd.tok, new List<String> { ifcmd.thn.BigBlocks[0].LabelName }));
- blocks.Add(block);
- }
-
- // recurse to create the blocks for the then branch
- CreateBlocks(ifcmd.thn, n == 0 ? runOffTheEndLabel : null);
-
- if (ifcmd.elseBlock != null) {
- Contract.Assert(ifcmd.elseIf == null);
- if (!elseGuardTakenCareOf) {
- // Else: assume !guard; goto firstElseBlock;
- block = new Block(ifcmd.tok, elseLabel, ssElse, new GotoCmd(ifcmd.tok, new List<String> { ifcmd.elseBlock.BigBlocks[0].LabelName }));
- blocks.Add(block);
- }
-
- // recurse to create the blocks for the else branch
- CreateBlocks(ifcmd.elseBlock, n == 0 ? runOffTheEndLabel : null);
-
- } else if (ifcmd.elseIf != null) {
- // this is an "else if"
- predLabel = elseLabel;
- predCmds = new List<Cmd>();
- if (ifcmd.Guard != null) {
- var ac = new AssumeCmd(ifcmd.tok, Expr.Not(ifcmd.Guard));
- ac.Attributes = new QKeyValue(ifcmd.tok, "partition", new List<object>(), null);
- predCmds.Add(ac);
- }
-
- } else {
- // no else alternative is specified, so else branch is just "skip"
- // Else: assume !guard; goto ifSuccessor;
- TransferCmd trCmd;
- if (n == 0 && runOffTheEndLabel != null) {
- // goto the given label instead of the textual successor block
- trCmd = new GotoCmd(ifcmd.tok, new List<String> { runOffTheEndLabel });
- } else {
- trCmd = GotoSuccessor(ifcmd.tok, b);
- }
- block = new Block(ifcmd.tok, elseLabel, ssElse, trCmd);
- blocks.Add(block);
- }
- }
- }
- }
- }
-
- TransferCmd GotoSuccessor(IToken tok, BigBlock b) {
- Contract.Requires(b != null);
- Contract.Requires(tok != null);
- Contract.Ensures(Contract.Result<TransferCmd>() != null);
- if (b.successorBigBlock != null) {
- return new GotoCmd(tok, new List<String> { b.successorBigBlock.LabelName });
- } else {
- return new ReturnCmd(tok);
- }
- }
- }
-
- [ContractClass(typeof(StructuredCmdContracts))]
- public abstract class StructuredCmd {
- private IToken/*!*/ _tok;
-
- public IToken/*!*/ tok
- {
- get
- {
- Contract.Ensures(Contract.Result<IToken>() != null);
- return this._tok;
- }
- set
- {
- Contract.Requires(value != null);
- this._tok = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._tok != null);
- }
-
- public StructuredCmd(IToken tok) {
- Contract.Requires(tok != null);
- this._tok = tok;
- }
-
- public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
- }
- [ContractClassFor(typeof(StructuredCmd))]
- public abstract class StructuredCmdContracts : StructuredCmd {
- public override void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- throw new NotImplementedException();
- }
- public StructuredCmdContracts() :base(null){
-
- }
- }
-
- public class IfCmd : StructuredCmd {
- public Expr Guard;
-
- private StmtList/*!*/ _thn;
-
- public StmtList/*!*/ thn
- {
- get
- {
- Contract.Ensures(Contract.Result<StmtList>() != null);
- return this._thn;
- }
- set
- {
- Contract.Requires(value != null);
- this._thn = value;
- }
- }
-
- private IfCmd _elseIf;
-
- public IfCmd elseIf
- {
- get
- {
- return this._elseIf;
- }
- set
- {
- Contract.Requires(value == null || this.elseBlock == null);
- this._elseIf = value;
- }
- }
-
- private StmtList _elseBlock;
-
- public StmtList elseBlock
- {
- get
- {
- return this._elseBlock;
- }
- set
- {
- Contract.Requires(value == null || this.elseIf == null);
- this._elseBlock = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._thn != null);
- Contract.Invariant(this._elseIf == null || this._elseBlock == null);
- }
-
- public IfCmd(IToken/*!*/ tok, Expr guard, StmtList/*!*/ thn, IfCmd elseIf, StmtList elseBlock)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(thn != null);
- Contract.Requires(elseIf == null || elseBlock == null);
- this.Guard = guard;
- this._thn = thn;
- this._elseIf = elseIf;
- this._elseBlock = elseBlock;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- stream.Write(level, "if (");
- IfCmd/*!*/ ifcmd = this;
- while (true) {
- if (ifcmd.Guard == null) {
- stream.Write("*");
- } else {
- ifcmd.Guard.Emit(stream);
- }
- stream.WriteLine(")");
-
- stream.WriteLine(level, "{");
- ifcmd.thn.Emit(stream, level + 1);
- stream.WriteLine(level, "}");
-
- if (ifcmd.elseIf != null) {
- stream.Write(level, "else if (");
- ifcmd = ifcmd.elseIf;
- continue;
- } else if (ifcmd.elseBlock != null) {
- stream.WriteLine(level, "else");
- stream.WriteLine(level, "{");
- ifcmd.elseBlock.Emit(stream, level + 1);
- stream.WriteLine(level, "}");
- }
- break;
- }
- }
- }
-
- public class WhileCmd : StructuredCmd {
- [Peer]
- public Expr Guard;
- public List<PredicateCmd/*!*/>/*!*/ Invariants;
- public StmtList/*!*/ Body;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Body != null);
- Contract.Invariant(cce.NonNullElements(Invariants));
- }
-
-
- public WhileCmd(IToken tok, [Captured] Expr guard, List<PredicateCmd/*!*/>/*!*/ invariants, StmtList/*!*/ body)
- : base(tok) {
- Contract.Requires(cce.NonNullElements(invariants));
- Contract.Requires(body != null);
- Contract.Requires(tok != null);
- this.Guard = guard;
- this.Invariants = invariants;
- this.Body = body;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- stream.Write(level, "while (");
- if (Guard == null) {
- stream.Write("*");
- } else {
- Guard.Emit(stream);
- }
- stream.WriteLine(")");
-
- foreach (PredicateCmd inv in Invariants) {
- if (inv is AssumeCmd) {
- stream.Write(level + 1, "free invariant ");
- } else {
- stream.Write(level + 1, "invariant ");
- }
- Cmd.EmitAttributes(stream, inv.Attributes);
- inv.Expr.Emit(stream);
- stream.WriteLine(";");
- }
-
- stream.WriteLine(level, "{");
- Body.Emit(stream, level + 1);
- stream.WriteLine(level, "}");
- }
- }
-
- public class BreakCmd : StructuredCmd {
- public string Label;
- public BigBlock BreakEnclosure;
-
- public BreakCmd(IToken tok, string label)
- : base(tok) {
- Contract.Requires(tok != null);
- this.Label = label;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
-
- if (Label == null) {
- stream.WriteLine(level, "break;");
- } else {
- stream.WriteLine(level, "break {0};", Label);
- }
- }
- }
-
- //---------------------------------------------------------------------
- // Block
- public sealed class Block : Absy {
- private string/*!*/ label; // Note, Label is mostly readonly, but it can change to the name of a nearby block during block coalescing and empty-block removal
-
- public string/*!*/ Label
- {
- get
- {
- Contract.Ensures(Contract.Result<string>() != null);
- return this.label;
- }
- set
- {
- Contract.Requires(value != null);
- this.label = value;
- }
- }
-
- [Rep]
- [ElementsPeer]
- public List<Cmd>/*!*/ cmds;
-
- public List<Cmd>/*!*/ Cmds
- {
- get
- {
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- return this.cmds;
- }
- set
- {
- Contract.Requires(value != null);
- this.cmds = value;
- }
- }
-
- [Rep] //PM: needed to verify Traverse.Visit
- public TransferCmd TransferCmd; // maybe null only because we allow deferred initialization (necessary for cyclic structures)
-
- public byte[] Checksum;
-
- // Abstract interpretation
-
- // public bool currentlyTraversed;
-
- public enum VisitState {
- ToVisit,
- BeingVisited,
- AlreadyVisited
- }; // used by WidenPoints.Compute
- public VisitState TraversingStatus;
-
- public int aiId; // block ID used by the abstract interpreter, which may change these numbers with each AI run
- public bool widenBlock;
- public int iterations; // Count the number of time we visited the block during fixpoint computation. Used to decide if we widen or not
-
- // VC generation and SCC computation
- public List<Block>/*!*/ Predecessors;
-
- // This field is used during passification to null-out entries in block2Incartion hashtable early
- public int succCount;
-
- private HashSet<Variable/*!*/> _liveVarsBefore;
-
- public IEnumerable<Variable/*!*/> liveVarsBefore
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Variable/*!*/>>(), true));
- if (this._liveVarsBefore == null)
- return null;
- else
- return this._liveVarsBefore.AsEnumerable<Variable>();
- }
- set
- {
- Contract.Requires(cce.NonNullElements(value, true));
- if (value == null)
- this._liveVarsBefore = null;
- else
- this._liveVarsBefore = new HashSet<Variable>(value);
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this.label != null);
- Contract.Invariant(this.cmds != null);
- Contract.Invariant(cce.NonNullElements(this._liveVarsBefore, true));
- }
-
- public bool IsLive(Variable v) {
- Contract.Requires(v != null);
- if (liveVarsBefore == null)
- return true;
- return liveVarsBefore.Contains(v);
- }
-
- public Block()
- : this(Token.NoToken, "", new List<Cmd>(), new ReturnCmd(Token.NoToken)) {
-
- }
-
- public Block(IToken tok, string/*!*/ label, List<Cmd>/*!*/ cmds, TransferCmd transferCmd)
- : base(tok) {
- Contract.Requires(label != null);
- Contract.Requires(cmds != null);
- Contract.Requires(tok != null);
- this.label = label;
- this.cmds = cmds;
- this.TransferCmd = transferCmd;
- this.Predecessors = new List<Block>();
- this._liveVarsBefore = null;
- this.TraversingStatus = VisitState.ToVisit;
- this.iterations = 0;
- }
-
- public void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- stream.WriteLine();
- stream.WriteLine(
- this,
- level,
- "{0}:{1}",
- CommandLineOptions.Clo.PrintWithUniqueASTIds ? String.Format("h{0}^^{1}", this.GetHashCode(), this.Label) : this.Label,
- this.widenBlock ? " // cut point" : "");
-
- foreach (Cmd/*!*/ c in this.Cmds) {
- Contract.Assert(c != null);
- c.Emit(stream, level + 1);
- }
- Contract.Assume(this.TransferCmd != null);
- this.TransferCmd.Emit(stream, level + 1);
- }
-
- public void Register(ResolutionContext rc) {
- Contract.Requires(rc != null);
- rc.AddBlock(this);
- }
-
- public override void Resolve(ResolutionContext rc) {
-
-
- foreach (Cmd/*!*/ c in Cmds) {
- Contract.Assert(c != null);
- c.Resolve(rc);
- }
- Contract.Assume(this.TransferCmd != null);
- TransferCmd.Resolve(rc);
- }
-
- public override void Typecheck(TypecheckingContext tc) {
-
- foreach (Cmd/*!*/ c in Cmds) {
- Contract.Assert(c != null);
- c.Typecheck(tc);
- }
- Contract.Assume(this.TransferCmd != null);
- TransferCmd.Typecheck(tc);
- }
-
- /// <summary>
- /// Reset the abstract intepretation state of this block. It does this by putting the iterations to 0 and the pre and post states to null
- /// </summary>
- public void ResetAbstractInterpretationState() {
- // this.currentlyTraversed = false;
- this.TraversingStatus = VisitState.ToVisit;
- this.iterations = 0;
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return this.Label + (this.widenBlock ? "[w]" : "");
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
-
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitBlock(this);
- }
- }
-
- //---------------------------------------------------------------------
- // Commands
- [ContractClassFor(typeof(Cmd))]
- public abstract class CmdContracts : Cmd {
- public CmdContracts() :base(null){
-
- }
- public override void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- throw new NotImplementedException();
- }
- public override void AddAssignedVariables(List<Variable> vars) {
- Contract.Requires(vars != null);
- throw new NotImplementedException();
- }
- }
-
- public static class ChecksumHelper
- {
- public static void ComputeChecksums(Cmd cmd, Implementation impl, ISet<Variable> usedVariables, byte[] currentChecksum = null)
- {
- if (CommandLineOptions.Clo.VerifySnapshots < 2)
- {
- return;
- }
-
- var assumeCmd = cmd as AssumeCmd;
- if (assumeCmd != null
- && QKeyValue.FindBoolAttribute(assumeCmd.Attributes, "assumption_variable_initialization"))
- {
- // Ignore assumption variable initializations.
- assumeCmd.Checksum = currentChecksum;
- return;
- }
-
- using (var strWr = new System.IO.StringWriter())
- using (var tokTxtWr = new TokenTextWriter("<no file>", strWr, false, false))
- {
- tokTxtWr.UseForComputingChecksums = true;
- var havocCmd = cmd as HavocCmd;
- if (havocCmd != null)
- {
- tokTxtWr.Write("havoc ");
- var relevantVars = havocCmd.Vars.Where(e => usedVariables.Contains(e.Decl) && !e.Decl.Name.StartsWith("a##post##")).OrderBy(e => e.Name).ToList();
- relevantVars.Emit(tokTxtWr, true);
- tokTxtWr.WriteLine(";");
- }
- else
- {
- cmd.Emit(tokTxtWr, 0);
- }
- var md5 = System.Security.Cryptography.MD5.Create();
- var str = strWr.ToString();
- if (str.Any())
- {
- var data = System.Text.Encoding.UTF8.GetBytes(str);
- var checksum = md5.ComputeHash(data);
- currentChecksum = currentChecksum != null ? CombineChecksums(currentChecksum, checksum) : checksum;
- }
- cmd.Checksum = currentChecksum;
- }
-
- var assertCmd = cmd as AssertCmd;
- if (assertCmd != null && assertCmd.Checksum != null)
- {
- var assertRequiresCmd = assertCmd as AssertRequiresCmd;
- if (assertRequiresCmd != null)
- {
- impl.AddAssertionChecksum(assertRequiresCmd.Checksum);
- impl.AddAssertionChecksum(assertRequiresCmd.Call.Checksum);
- assertRequiresCmd.SugaredCmdChecksum = assertRequiresCmd.Call.Checksum;
- }
- else
- {
- impl.AddAssertionChecksum(assertCmd.Checksum);
- }
- }
-
- var sugaredCmd = cmd as SugaredCmd;
- if (sugaredCmd != null)
- {
- // The checksum of a sugared command should not depend on the desugaring itself.
- var stateCmd = sugaredCmd.Desugaring as StateCmd;
- if (stateCmd != null)
- {
- foreach (var c in stateCmd.Cmds)
- {
- ComputeChecksums(c, impl, usedVariables, currentChecksum);
- currentChecksum = c.Checksum;
- if (c.SugaredCmdChecksum == null)
- {
- c.SugaredCmdChecksum = cmd.Checksum;
- }
- }
- }
- else
- {
- ComputeChecksums(sugaredCmd.Desugaring, impl, usedVariables, currentChecksum);
- }
- }
- }
-
- public static byte[] CombineChecksums(byte[] first, byte[] second, bool unordered = false)
- {
- Contract.Requires(first != null && (second == null || first.Length == second.Length));
-
- var result = (byte[])(first.Clone());
- for (int i = 0; second != null && i < second.Length; i++)
- {
- if (unordered)
- {
- result[i] += second[i];
- }
- else
- {
- result[i] = (byte)(result[i] * 31 ^ second[i]);
- }
- }
- return result;
- }
- }
-
- [ContractClass(typeof(CmdContracts))]
- public abstract class Cmd : Absy {
- public byte[] Checksum { get; internal set; }
- public byte[] SugaredCmdChecksum { get; internal set; }
-
- public Cmd(IToken/*!*/ tok)
- : base(tok) {
- Contract.Assert(tok != null);
- }
- public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
- public abstract void AddAssignedVariables(List<Variable>/*!*/ vars);
- public void CheckAssignments(TypecheckingContext tc)
- {
- Contract.Requires(tc != null);
- List<Variable>/*!*/ vars = new List<Variable>();
- this.AddAssignedVariables(vars);
- foreach (Variable/*!*/ v in vars)
- {
- Contract.Assert(v != null);
- if (!v.IsMutable)
- {
- tc.Error(this, "command assigns to an immutable variable: {0}", v.Name);
- }
- else if (!CommandLineOptions.Clo.DoModSetAnalysis && v is GlobalVariable)
- {
- if (tc.Yields) {
- // a yielding procedure is allowed to modify any global variable
- }
- else if (tc.Frame == null)
- {
- tc.Error(this, "update to a global variable allowed only inside an atomic action of a yielding procedure");
- }
- else if (!tc.InFrame(v))
- {
- tc.Error(this, "command assigns to a global variable that is not in the enclosing procedure's modifies clause: {0}", v.Name);
- }
- }
- }
- }
-
- // Methods to simulate the old SimpleAssignCmd and MapAssignCmd
- public static AssignCmd SimpleAssign(IToken tok, IdentifierExpr lhs, Expr rhs) {
- Contract.Requires(rhs != null);
- Contract.Requires(lhs != null);
- Contract.Requires(tok != null);
- Contract.Ensures(Contract.Result<AssignCmd>() != null);
- List<AssignLhs/*!*/>/*!*/ lhss = new List<AssignLhs/*!*/>();
- List<Expr/*!*/>/*!*/ rhss = new List<Expr/*!*/>();
-
- lhss.Add(new SimpleAssignLhs(lhs.tok, lhs));
- rhss.Add(rhs);
-
- return new AssignCmd(tok, lhss, rhss);
- }
-
- public static AssignCmd/*!*/ MapAssign(IToken tok,
- IdentifierExpr/*!*/ map,
- List<Expr>/*!*/ indexes, Expr/*!*/ rhs) {
-
- Contract.Requires(tok != null);
- Contract.Requires(map != null);
- Contract.Requires(indexes != null);
- Contract.Requires(rhs != null);
- Contract.Ensures(Contract.Result<AssignCmd>() != null);
- List<AssignLhs/*!*/>/*!*/ lhss = new List<AssignLhs/*!*/>();
- List<Expr/*!*/>/*!*/ rhss = new List<Expr/*!*/>();
- List<Expr/*!*/>/*!*/ indexesList = new List<Expr/*!*/>();
-
-
-
- foreach (Expr e in indexes)
- indexesList.Add(cce.NonNull(e));
-
- lhss.Add(new MapAssignLhs(map.tok,
- new SimpleAssignLhs(map.tok, map),
- indexesList));
- rhss.Add(rhs);
-
- return new AssignCmd(tok, lhss, rhss);
- }
-
- public static AssignCmd/*!*/ MapAssign(IToken tok,
- IdentifierExpr/*!*/ map,
- params Expr[]/*!*/ args) {
- Contract.Requires(tok != null);
- Contract.Requires(map != null);
- Contract.Requires(args != null);
- Contract.Requires(args.Length > 0); // at least the rhs
- Contract.Requires(Contract.ForAll(args, i => i != null));
- Contract.Ensures(Contract.Result<AssignCmd>() != null);
-
- List<AssignLhs/*!*/>/*!*/ lhss = new List<AssignLhs/*!*/>();
- List<Expr/*!*/>/*!*/ rhss = new List<Expr/*!*/>();
- List<Expr/*!*/>/*!*/ indexesList = new List<Expr/*!*/>();
-
- for (int i = 0; i < args.Length - 1; ++i)
- indexesList.Add(cce.NonNull(args[i]));
-
- lhss.Add(new MapAssignLhs(map.tok,
- new SimpleAssignLhs(map.tok, map),
- indexesList));
- rhss.Add(cce.NonNull(args[args.Length - 1]));
-
- return new AssignCmd(tok, lhss, rhss);
- }
-
- /// <summary>
- /// This is a helper routine for printing a linked list of attributes. Each attribute
- /// is terminated by a space.
- /// </summary>
- public static void EmitAttributes(TokenTextWriter stream, QKeyValue attributes) {
- Contract.Requires(stream != null);
-
- if (stream.UseForComputingChecksums) { return; }
-
- for (QKeyValue kv = attributes; kv != null; kv = kv.Next) {
- kv.Emit(stream);
- stream.Write(" ");
- }
- }
- public static void ResolveAttributes(QKeyValue attributes, ResolutionContext rc) {
- Contract.Requires(rc != null);
- for (QKeyValue kv = attributes; kv != null; kv = kv.Next) {
- kv.Resolve(rc);
- }
- }
- public static void TypecheckAttributes(QKeyValue attributes, TypecheckingContext tc) {
- Contract.Requires(tc != null);
- for (QKeyValue kv = attributes; kv != null; kv = kv.Next) {
- kv.Typecheck(tc);
- }
- }
-
- [Pure]
- public override string ToString()
- {
- Contract.Ensures(Contract.Result<string>() != null);
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false , /*pretty=*/ false)) {
- this.Emit(stream, 0);
- }
- return buffer.ToString();
- }
- }
-
- public class YieldCmd : Cmd
- {
- public YieldCmd(IToken/*!*/ tok)
- : base(tok)
- {
- Contract.Requires(tok != null);
- }
- public override void Emit(TokenTextWriter stream, int level)
- {
- //Contract.Requires(stream != null);
- stream.WriteLine(this, level, "yield;");
- }
- public override void Resolve(ResolutionContext rc)
- {
- // nothing to resolve
- }
- public override void Typecheck(TypecheckingContext tc)
- {
- if (!CommandLineOptions.Clo.DoModSetAnalysis && !tc.Yields)
- {
- tc.Error(this, "enclosing procedure of a yield command must yield");
- }
- }
- public override void AddAssignedVariables(List<Variable> vars)
- {
- // nothing to add
- }
- public override Absy StdDispatch(StandardVisitor visitor)
- {
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitYieldCmd(this);
- }
- }
-
- public class CommentCmd : Cmd // just a convenience for debugging
- {
- public readonly string/*!*/ Comment;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Comment != null);
- }
-
- public CommentCmd(string c)
- : base(Token.NoToken) {
- Contract.Requires(c != null);
- Comment = c;
- }
- public override void Emit(TokenTextWriter stream, int level) {
- if (stream.UseForComputingChecksums) { return; }
-
- if (this.Comment.Contains("\n")) {
- stream.WriteLine(this, level, "/* {0} */", this.Comment);
- } else {
- stream.WriteLine(this, level, "// {0}", this.Comment);
- }
- }
- public override void Resolve(ResolutionContext rc) {
-
- }
- public override void AddAssignedVariables(List<Variable> vars) {
-
- }
- public override void Typecheck(TypecheckingContext tc) {
-
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
-
-
- return visitor.VisitCommentCmd(this);
- }
- }
-
- // class for parallel assignments, which subsumes both the old
- // SimpleAssignCmd and the old MapAssignCmd
- public class AssignCmd : Cmd {
- private List<AssignLhs/*!*/>/*!*/ _lhss;
-
- public IList<AssignLhs/*!*/>/*!*/ Lhss {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IList<AssignLhs>>()));
- Contract.Ensures(Contract.Result<IList<AssignLhs>>().IsReadOnly);
- return this._lhss.AsReadOnly();
- }
- set {
- Contract.Requires(cce.NonNullElements(value));
- this._lhss = new List<AssignLhs>(value);
- }
- }
-
- internal void SetLhs(int index, AssignLhs lhs)
- {
- Contract.Requires(0 <= index && index < this.Lhss.Count);
- Contract.Requires(lhs != null);
- Contract.Ensures(this.Lhss[index] == lhs);
- this._lhss[index] = lhs;
- }
-
- private List<Expr/*!*/>/*!*/ _rhss;
-
- public IList<Expr/*!*/>/*!*/ Rhss {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IList<Expr>>()));
- Contract.Ensures(Contract.Result<IList<Expr>>().IsReadOnly);
- return this._rhss.AsReadOnly();
- }
- set {
- Contract.Requires(cce.NonNullElements(value));
- this._rhss = new List<Expr>(value);
- }
- }
-
- internal void SetRhs(int index, Expr rhs)
- {
- Contract.Requires(0 <= index && index < this.Rhss.Count);
- Contract.Requires(rhs != null);
- Contract.Ensures(this.Rhss[index] == rhs);
- this._rhss[index] = rhs;
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(this._lhss));
- Contract.Invariant(cce.NonNullElements(this._rhss));
- }
-
-
- public AssignCmd(IToken tok, IList<AssignLhs/*!*/>/*!*/ lhss, IList<Expr/*!*/>/*!*/ rhss)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(cce.NonNullElements(rhss));
- Contract.Requires(cce.NonNullElements(lhss));
- this._lhss = new List<AssignLhs>(lhss);
- this._rhss = new List<Expr>(rhss);
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- if (stream.UseForComputingChecksums)
- {
- var lhs = Lhss.FirstOrDefault() as SimpleAssignLhs;
- if (lhs != null
- && lhs.AssignedVariable.Decl != null
- && (QKeyValue.FindBoolAttribute(lhs.AssignedVariable.Decl.Attributes, "assumption")
- || lhs.AssignedVariable.Decl.Name.Contains("##old##")))
- {
- return;
- }
- }
-
- stream.Write(this, level, "");
-
- string/*!*/ sep = "";
- foreach (AssignLhs/*!*/ l in Lhss) {
- Contract.Assert(l != null);
- stream.Write(sep);
- sep = ", ";
- l.Emit(stream);
- }
-
- stream.Write(" := ");
-
- sep = "";
- foreach (Expr/*!*/ e in Rhss) {
- Contract.Assert(e != null);
- stream.Write(sep);
- sep = ", ";
- e.Emit(stream);
- }
-
- stream.WriteLine(";");
- }
-
- public override void Resolve(ResolutionContext rc) {
-
- if (Lhss.Count != Rhss.Count)
- rc.Error(this,
- "number of left-hand sides does not match number of right-hand sides");
-
- foreach (AssignLhs/*!*/ e in Lhss) {
- Contract.Assert(e != null);
- e.Resolve(rc);
- }
- foreach (Expr/*!*/ e in Rhss) {
- Contract.Assert(e != null);
- e.Resolve(rc);
- }
-
- // check for double occurrences of assigned variables
- // (could be optimised)
- for (int i = 0; i < Lhss.Count; ++i) {
- for (int j = i + 1; j < Lhss.Count; ++j) {
- if (cce.NonNull(Lhss[i].DeepAssignedVariable).Equals(
- Lhss[j].DeepAssignedVariable))
- rc.Error(Lhss[j],
- "variable {0} is assigned more than once in parallel assignment",
- Lhss[j].DeepAssignedVariable);
- }
- }
-
- for (int i = 0; i < Lhss.Count; i++)
- {
- var lhs = Lhss[i].AsExpr as IdentifierExpr;
- if (lhs != null && lhs.Decl != null && QKeyValue.FindBoolAttribute(lhs.Decl.Attributes, "assumption"))
- {
- var rhs = Rhss[i] as NAryExpr;
- if (rhs == null
- || !(rhs.Fun is BinaryOperator)
- || ((BinaryOperator)(rhs.Fun)).Op != BinaryOperator.Opcode.And
- || !(rhs.Args[0] is IdentifierExpr)
- || ((IdentifierExpr)(rhs.Args[0])).Name != lhs.Name)
- {
- rc.Error(tok, string.Format("RHS of assignment to assumption variable {0} must match expression \"{0} && <boolean expression>\"", lhs.Name));
- }
- else if (rc.HasVariableBeenAssigned(lhs.Decl.Name))
- {
- rc.Error(tok, "assumption variable may not be assigned to more than once");
- }
- else
- {
- rc.MarkVariableAsAssigned(lhs.Decl.Name);
- }
- }
- }
- }
-
- public override void Typecheck(TypecheckingContext tc) {
-
- foreach (AssignLhs/*!*/ e in Lhss) {
- Contract.Assert(e != null);
- e.Typecheck(tc);
- }
- foreach (Expr/*!*/ e in Rhss) {
- Contract.Assert(e != null);
- e.Typecheck(tc);
- }
-
- this.CheckAssignments(tc);
-
- for (int i = 0; i < Lhss.Count; ++i) {
- Type ltype = Lhss[i].Type;
- Type rtype = Rhss[i].Type;
- if (ltype != null && rtype != null) {
- // otherwise, there has already been an error when
- // typechecking the lhs or rhs
- if (!ltype.Unify(rtype))
- tc.Error(Lhss[i],
- "mismatched types in assignment command (cannot assign {0} to {1})",
- rtype, ltype);
- }
- }
- }
-
- public override void AddAssignedVariables(List<Variable> vars) {
-
- foreach (AssignLhs/*!*/ l in Lhss) {
- Contract.Assert(l != null);
- vars.Add(l.DeepAssignedVariable);
- }
- }
-
- // transform away the syntactic sugar of map assignments and
- // determine an equivalent assignment in which all rhs are simple
- // variables
- public AssignCmd/*!*/ AsSimpleAssignCmd {
- get {
- Contract.Ensures(Contract.Result<AssignCmd>() != null);
-
- List<AssignLhs/*!*/>/*!*/ newLhss = new List<AssignLhs/*!*/>();
- List<Expr/*!*/>/*!*/ newRhss = new List<Expr/*!*/>();
-
- for (int i = 0; i < Lhss.Count; ++i) {
- IdentifierExpr/*!*/ newLhs;
- Expr/*!*/ newRhs;
- Lhss[i].AsSimpleAssignment(Rhss[i], out newLhs, out newRhs);
- newLhss.Add(new SimpleAssignLhs(Token.NoToken, newLhs));
- newRhss.Add(newRhs);
- }
-
- return new AssignCmd(Token.NoToken, newLhss, newRhss);
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
-
-
- return visitor.VisitAssignCmd(this);
- }
- }
-
- // There are two different kinds of left-hand sides in assignments:
- // simple variables (identifiers), or locations of a map
- [ContractClass(typeof(AssignLhsContracts))]
- public abstract class AssignLhs : Absy {
- // The type of the lhs is determined during typechecking
- public abstract Type Type {
- get;
- }
- // Determine the variable that is actually assigned in this lhs
- public abstract IdentifierExpr/*!*/ DeepAssignedIdentifier {
- get;
- }
- public abstract Variable DeepAssignedVariable {
- get;
- }
-
- public AssignLhs(IToken/*!*/ tok)
- : base(tok) {
- Contract.Requires(tok != null);
- }
- public abstract void Emit(TokenTextWriter/*!*/ stream);
-
- public abstract Expr/*!*/ AsExpr {
- get;
- }
-
- // transform away the syntactic sugar of map assignments and
- // determine an equivalent simple assignment
- internal abstract void AsSimpleAssignment(Expr/*!*/ rhs,
- out IdentifierExpr/*!*/ simpleLhs,
- out Expr/*!*/ simpleRhs);
- }
- [ContractClassFor(typeof(AssignLhs))]
- public abstract class AssignLhsContracts : AssignLhs {
- public AssignLhsContracts():base(null)
- {
-
- }public override IdentifierExpr DeepAssignedIdentifier {
-
- get {
- Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
- throw new NotImplementedException();
- }
- }
- public override Expr AsExpr {
- get {
- Contract.Ensures(Contract.Result<Expr>() != null);
- throw new NotImplementedException();
- }
-
- }
- internal override void AsSimpleAssignment(Expr rhs, out IdentifierExpr simpleLhs, out Expr simpleRhs) {
- Contract.Requires(rhs != null);
- Contract.Ensures(Contract.ValueAtReturn(out simpleLhs) != null);
- Contract.Ensures(Contract.ValueAtReturn(out simpleRhs) != null);
-
- throw new NotImplementedException();
- }
- }
-
- public class SimpleAssignLhs : AssignLhs {
- public IdentifierExpr/*!*/ AssignedVariable;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AssignedVariable != null);
- }
-
-
- public override Type Type {
- get {
- return AssignedVariable.Type;
- }
- }
-
- public override IdentifierExpr/*!*/ DeepAssignedIdentifier {
- get {
- Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
- return AssignedVariable;
- }
- }
-
- public override Variable DeepAssignedVariable {
- get {
- return AssignedVariable.Decl;
- }
- }
-
- public SimpleAssignLhs(IToken tok, IdentifierExpr assignedVariable)
- : base(tok) {
- Contract.Requires(assignedVariable != null);
- Contract.Requires(tok != null);
- AssignedVariable = assignedVariable;
- }
- public override void Resolve(ResolutionContext rc) {
-
- AssignedVariable.Resolve(rc);
- }
- public override void Typecheck(TypecheckingContext tc) {
-
- AssignedVariable.Typecheck(tc);
- }
- public override void Emit(TokenTextWriter stream) {
-
- AssignedVariable.Emit(stream);
- }
- public override Expr/*!*/ AsExpr {
- get {
- Contract.Ensures(Contract.Result<Expr>() != null);
-
- return AssignedVariable;
- }
- }
- internal override void AsSimpleAssignment(Expr rhs,
- out IdentifierExpr/*!*/ simpleLhs,
- out Expr/*!*/ simpleRhs) {
-
-
-
- simpleLhs = AssignedVariable;
- simpleRhs = rhs;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
-
-
- return visitor.VisitSimpleAssignLhs(this);
- }
- }
-
- // A map-assignment-lhs (m[t1, t2, ...] := ...) is quite similar to
- // a map select expression, but it is cleaner to keep those two
- // things separate
- public class MapAssignLhs : AssignLhs {
- public AssignLhs/*!*/ Map;
-
- public List<Expr/*!*/>/*!*/ Indexes;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Map != null);
- Contract.Invariant(cce.NonNullElements(Indexes));
- }
-
-
- // The instantiation of type parameters of the map that is
- // determined during type checking.
- public TypeParamInstantiation TypeParameters = null;
-
- private Type TypeAttr = null;
-
- public override Type Type {
- get {
- return TypeAttr;
- }
- }
-
- public override IdentifierExpr/*!*/ DeepAssignedIdentifier {
- get {
- Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
-
- return Map.DeepAssignedIdentifier;
- }
- }
-
- public override Variable DeepAssignedVariable {
- get {
- return Map.DeepAssignedVariable;
- }
- }
-
- public MapAssignLhs(IToken tok, AssignLhs map, List<Expr/*!*/>/*!*/ indexes)
- : base(tok) {
- Contract.Requires(map != null);
- Contract.Requires(tok != null);
- Contract.Requires(cce.NonNullElements(indexes));
-
- Map = map;
- Indexes = indexes;
- }
- public override void Resolve(ResolutionContext rc) {
-
- Map.Resolve(rc);
- foreach (Expr/*!*/ e in Indexes) {
- Contract.Assert(e != null);
- e.Resolve(rc);
- }
- }
- public override void Typecheck(TypecheckingContext tc) {
-
- Map.Typecheck(tc);
- foreach (Expr/*!*/ e in Indexes) {
- Contract.Assert(e != null);
- e.Typecheck(tc);
- }
-
- // we use the same typechecking code as in MapSelect
- List<Expr>/*!*/ selectArgs = new List<Expr>();
- foreach (Expr/*!*/ e in Indexes) {
- Contract.Assert(e != null);
- selectArgs.Add(e);
- }
- TypeParamInstantiation/*!*/ tpInsts;
- TypeAttr =
- MapSelect.Typecheck(cce.NonNull(Map.Type), Map,
- selectArgs, out tpInsts, tc, tok, "map assignment");
- TypeParameters = tpInsts;
- }
- public override void Emit(TokenTextWriter stream) {
-
- Map.Emit(stream);
- stream.Write("[");
- string/*!*/ sep = "";
- foreach (Expr/*!*/ e in Indexes) {
- Contract.Assert(e != null);
- stream.Write(sep);
- sep = ", ";
- e.Emit(stream);
- }
- stream.Write("]");
- }
- public override Expr/*!*/ AsExpr {
- get {
- Contract.Ensures(Contract.Result<Expr>() != null);
-
- NAryExpr/*!*/ res = Expr.Select(Map.AsExpr, Indexes);
- Contract.Assert(res != null);
- res.TypeParameters = this.TypeParameters;
- res.Type = this.Type;
- return res;
- }
- }
- internal override void AsSimpleAssignment(Expr rhs,
- out IdentifierExpr/*!*/ simpleLhs,
- out Expr/*!*/ simpleRhs) { //Contract.Requires(rhs != null);
- Contract.Ensures(Contract.ValueAtReturn(out simpleLhs) != null);
- Contract.Ensures(Contract.ValueAtReturn(out simpleRhs) != null);
-
- NAryExpr/*!*/ newRhs = Expr.Store(Map.AsExpr, Indexes, rhs);
- Contract.Assert(newRhs != null);
- newRhs.TypeParameters = this.TypeParameters;
- newRhs.Type = Map.Type;
- Map.AsSimpleAssignment(newRhs, out simpleLhs, out simpleRhs);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitMapAssignLhs(this);
- }
- }
-
- /// <summary>
- /// A StateCmd is like an imperative-let binding around a sequence of commands.
- /// There is no user syntax for a StateCmd. Instead, a StateCmd is only used
- /// temporarily during the desugaring phase inside the VC generator.
- /// </summary>
- public class StateCmd : Cmd {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._locals != null);
- Contract.Invariant(this._cmds != null);
- }
-
- private List<Variable> _locals;
-
- public /*readonly, except for the StandardVisitor*/ List<Variable>/*!*/ Locals {
- get {
- Contract.Ensures(Contract.Result<List<Variable>>() != null);
- return this._locals;
- }
- internal set {
- Contract.Requires(value != null);
- this._locals = value;
- }
- }
-
- private List<Cmd> _cmds;
-
- public /*readonly, except for the StandardVisitor*/ List<Cmd>/*!*/ Cmds {
- get {
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- return this._cmds;
- }
- set {
- Contract.Requires(value != null);
- this._cmds = value;
- }
- }
-
- public StateCmd(IToken tok, List<Variable>/*!*/ locals, List<Cmd>/*!*/ cmds)
- : base(tok) {
- Contract.Requires(locals != null);
- Contract.Requires(cmds != null);
- Contract.Requires(tok != null);
- this._locals = locals;
- this._cmds = cmds;
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.PushVarContext();
- foreach (Variable/*!*/ v in Locals) {
- Contract.Assert(v != null);
- rc.AddVariable(v, false);
- }
- foreach (Cmd/*!*/ cmd in Cmds) {
- Contract.Assert(cmd != null);
- cmd.Resolve(rc);
- }
- rc.PopVarContext();
- }
-
- public override void AddAssignedVariables(List<Variable> vars) {
- //Contract.Requires(vars != null);
- List<Variable>/*!*/ vs = new List<Variable>();
- foreach (Cmd/*!*/ cmd in this.Cmds) {
- Contract.Assert(cmd != null);
- cmd.AddAssignedVariables(vs);
- }
- System.Collections.Hashtable/*!*/ localsSet = new System.Collections.Hashtable();
- foreach (Variable/*!*/ local in this.Locals) {
- Contract.Assert(local != null);
- localsSet[local] = bool.TrueString;
- }
- foreach (Variable/*!*/ v in vs) {
- Contract.Assert(v != null);
- if (!localsSet.ContainsKey(v)) {
- vars.Add(v);
- }
- }
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- foreach (Cmd/*!*/ cmd in Cmds) {
- Contract.Assert(cmd != null);
- cmd.Typecheck(tc);
- }
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.WriteLine(this, level, "{");
- foreach (Variable/*!*/ v in Locals) {
- Contract.Assert(v != null);
- v.Emit(stream, level + 1);
- }
- foreach (Cmd/*!*/ c in Cmds) {
- Contract.Assert(c != null);
- c.Emit(stream, level + 1);
- }
- stream.WriteLine(level, "}");
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitStateCmd(this);
- }
- }
- [ContractClass(typeof(SugaredCmdContracts))]
- abstract public class SugaredCmd : Cmd {
- private Cmd desugaring; // null until desugared
-
- public SugaredCmd(IToken/*!*/ tok)
- : base(tok) {
- Contract.Requires(tok != null);
- }
-
- public Cmd/*!*/ Desugaring {
- get {
- Contract.Ensures(Contract.Result<Cmd>() != null);
-
- if (desugaring == null) {
- desugaring = ComputeDesugaring();
- }
- return desugaring;
- }
- }
- /// <summary>
- /// This method invokes "visitor.Visit" on the desugaring, and then updates the
- /// desugaring to the result thereof. The method's intended use is for subclasses
- /// of StandardVisitor that need to also visit the desugaring. Note, since the
- /// "desugaring" field is updated, this is not an appropriate method to be called
- /// be a ReadOnlyVisitor; such visitors should instead just call
- /// visitor.Visit(sugaredCmd.Desugaring).
- /// </summary>
- public void VisitDesugaring(StandardVisitor visitor) {
- Contract.Requires(visitor != null && !(visitor is ReadOnlyVisitor));
- if (desugaring != null) {
- desugaring = (Cmd)visitor.Visit(desugaring);
- }
- }
- protected abstract Cmd/*!*/ ComputeDesugaring();
-
- public void ExtendDesugaring(IEnumerable<Cmd> before, IEnumerable<Cmd> beforePreconditionCheck, IEnumerable<Cmd> after)
- {
- var desug = Desugaring;
- var stCmd = desug as StateCmd;
- if (stCmd != null)
- {
- stCmd.Cmds.InsertRange(0, before);
- var idx = stCmd.Cmds.FindIndex(c => c is AssertCmd || c is HavocCmd || c is AssumeCmd);
- if (idx < 0)
- {
- idx = 0;
- }
- stCmd.Cmds.InsertRange(idx, beforePreconditionCheck);
- stCmd.Cmds.AddRange(after);
- }
- else if (desug != null)
- {
- var cmds = new List<Cmd>(before);
- cmds.Add(desug);
- cmds.AddRange(after);
- desugaring = new StateCmd(Token.NoToken, new List<Variable>(), cmds);
- }
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- if (CommandLineOptions.Clo.PrintDesugarings && !stream.UseForComputingChecksums) {
- stream.WriteLine(this, level, "/*** desugaring:");
- Desugaring.Emit(stream, level);
- stream.WriteLine(level, "**** end desugaring */");
- }
- }
- }
- [ContractClassFor(typeof(SugaredCmd))]
- public abstract class SugaredCmdContracts : SugaredCmd {
- public SugaredCmdContracts() :base(null){
-
- }
- protected override Cmd ComputeDesugaring() {
- Contract.Ensures(Contract.Result<Cmd>() != null);
-
- throw new NotImplementedException();
- }
- }
-
- public abstract class CallCommonality : SugaredCmd {
- public QKeyValue Attributes;
-
- private bool isFree = false;
- public bool IsFree {
- get {
- return isFree;
- }
- set {
- isFree = value;
- }
- }
-
- private bool isAsync = false;
- public bool IsAsync
- {
- get
- {
- return isAsync;
- }
- set
- {
- isAsync = value;
- }
- }
-
- protected CallCommonality(IToken tok, QKeyValue kv)
- : base(tok) {
- Contract.Requires(tok != null);
- Attributes = kv;
- }
-
- protected enum TempVarKind {
- Formal,
- Old,
- Bound
- }
-
- // We have to give the type explicitly, because the type of the formal "likeThisOne" can contain type variables
- protected Variable CreateTemporaryVariable(List<Variable> tempVars, Variable likeThisOne, Type ty, TempVarKind kind, ref int uniqueId) {
- Contract.Requires(ty != null);
- Contract.Requires(likeThisOne != null);
- Contract.Requires(tempVars != null);
- Contract.Ensures(Contract.Result<Variable>() != null);
- string/*!*/ tempNamePrefix;
- switch (kind) {
- case TempVarKind.Formal:
- tempNamePrefix = "formal@";
- break;
- case TempVarKind.Old:
- tempNamePrefix = "old@";
- break;
- case TempVarKind.Bound:
- tempNamePrefix = "forall@";
- break;
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // unexpected kind
- }
- TypedIdent ti = likeThisOne.TypedIdent;
- // KLM: uniqueId was messing up FixedPointVC for unknown reason.
- // I reverted this change for FixedPointVC only.
- int id = CommandLineOptions.Clo.FixedPointEngine != null ? UniqueId : (uniqueId++);
- TypedIdent newTi = new TypedIdent(ti.tok, "call" + id + tempNamePrefix + ti.Name, ty);
- Variable/*!*/ v;
- if (kind == TempVarKind.Bound) {
- v = new BoundVariable(likeThisOne.tok, newTi);
- } else {
- v = new LocalVariable(likeThisOne.tok, newTi);
- tempVars.Add(v);
- }
- return v;
- }
- }
-
- public class ParCallCmd : CallCommonality, IPotentialErrorNode<object, object>
- {
- public List<CallCmd> CallCmds;
- public ParCallCmd(IToken tok, List<CallCmd> callCmds)
- : base(tok, null)
- {
- this.CallCmds = callCmds;
- }
- public ParCallCmd(IToken tok, List<CallCmd> callCmds, QKeyValue kv)
- : base(tok, kv)
- {
- this.CallCmds = callCmds;
- }
- protected override Cmd ComputeDesugaring()
- {
- throw new NotImplementedException();
- }
- private object errorData;
- public object ErrorData
- {
- get
- {
- return errorData;
- }
- set
- {
- errorData = value;
- }
- }
- public override void Resolve(ResolutionContext rc)
- {
- ResolveAttributes(Attributes, rc);
- foreach (CallCmd callCmd in CallCmds)
- {
- callCmd.Resolve(rc);
- }
- HashSet<Variable> parallelCallLhss = new HashSet<Variable>();
- foreach (CallCmd callCmd in CallCmds)
- {
- foreach (IdentifierExpr ie in callCmd.Outs)
- {
- if (parallelCallLhss.Contains(ie.Decl))
- {
- rc.Error(this, "left-hand side of parallel call command contains variable twice: {0}", ie.Name);
- }
- else
- {
- parallelCallLhss.Add(ie.Decl);
- }
- }
- }
- }
- public override void Typecheck(TypecheckingContext tc)
- {
- TypecheckAttributes(Attributes, tc);
- if (!CommandLineOptions.Clo.DoModSetAnalysis)
- {
- if (!tc.Yields)
- {
- tc.Error(this, "enclosing procedure of a parallel call must yield");
- }
- foreach (CallCmd callCmd in CallCmds)
- {
- if (!QKeyValue.FindBoolAttribute(callCmd.Proc.Attributes, "yields"))
- {
- tc.Error(callCmd, "target procedure of a parallel call must yield");
- }
- }
- }
- foreach (CallCmd callCmd in CallCmds)
- {
- callCmd.Typecheck(tc);
- }
- }
- public override void AddAssignedVariables(List<Variable> vars)
- {
- foreach (CallCmd callCmd in CallCmds)
- {
- callCmd.AddAssignedVariables(vars);
- }
- }
- public override Absy StdDispatch(StandardVisitor visitor)
- {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitParCallCmd(this);
- }
- }
-
- public class CallCmd : CallCommonality, IPotentialErrorNode<object, object>
- {
- public string/*!*/ callee { get; set; }
- public Procedure Proc;
- public LocalVariable AssignedAssumptionVariable;
-
- // Element of the following lists can be null, which means that
- // the call happens with * as these parameters
- public List<Expr>/*!*/ Ins;
- public List<IdentifierExpr>/*!*/ Outs;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(callee != null);
- Contract.Invariant(Ins != null);
- Contract.Invariant(Outs != null);
- }
-
- //public Lattice.Element StateAfterCall;
-
- // The instantiation of type parameters that is determined during
- // type checking
- public TypeParamInstantiation TypeParameters = null;
-
- // TODO: convert to use generics
- private object errorData;
- public object ErrorData {
- get {
- return errorData;
- }
- set {
- errorData = value;
- }
- }
- public CallCmd(IToken tok, string callee, List<Expr> ins, List<IdentifierExpr> outs)
- : base(tok, null) {
- Contract.Requires(outs != null);
- Contract.Requires(ins != null);
- Contract.Requires(callee != null);
- Contract.Requires(tok != null);
- this.callee = callee;
- this.Ins = ins;
- this.Outs = outs;
- }
- public CallCmd(IToken tok, string callee, List<Expr> ins, List<IdentifierExpr> outs, QKeyValue kv)
- : base(tok, kv) {
- Contract.Requires(outs != null);
- Contract.Requires(ins != null);
- Contract.Requires(callee != null);
- Contract.Requires(tok != null);
- this.callee = callee;
- this.Ins = ins;
- this.Outs = outs;
- }
-
- public CallCmd(IToken tok, string callee, List<Expr> ins, List<IdentifierExpr> outs, QKeyValue kv, bool IsAsync)
- : base(tok, kv)
- {
- Contract.Requires(outs != null);
- Contract.Requires(ins != null);
- Contract.Requires(callee != null);
- Contract.Requires(tok != null);
- this.callee = callee;
- this.Ins = ins;
- this.Outs = outs;
- this.IsAsync = IsAsync;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "");
- if (IsFree) {
- stream.Write("free ");
- }
- if (IsAsync) {
- stream.Write("async ");
- }
- stream.Write("call ");
- EmitAttributes(stream, Attributes);
- string sep = "";
- if (Outs.Count > 0) {
- foreach (Expr arg in Outs) {
- stream.Write(sep);
- sep = ", ";
- if (arg == null) {
- stream.Write("*");
- } else {
- arg.Emit(stream);
- }
- }
- stream.Write(" := ");
- }
- stream.Write(TokenTextWriter.SanitizeIdentifier(callee));
- stream.Write("(");
- sep = "";
- foreach (Expr arg in Ins) {
- stream.Write(sep);
- sep = ", ";
- if (arg == null) {
- stream.Write("*");
- } else {
- arg.Emit(stream);
- }
- }
- stream.WriteLine(");");
- base.Emit(stream, level);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- if (Proc != null) {
- // already resolved
- return;
- }
- ResolveAttributes(Attributes, rc);
- Proc = rc.LookUpProcedure(callee) as Procedure;
- if (Proc == null) {
- rc.Error(this, "call to undeclared procedure: {0}", callee);
- }
- foreach (Expr e in Ins) {
- if (e != null) {
- e.Resolve(rc);
- }
- }
- HashSet<Variable> actualOuts = new HashSet<Variable>();
- foreach (IdentifierExpr ide in Outs) {
- if (ide != null) {
- ide.Resolve(rc);
- if (ide.Decl != null) {
- if (actualOuts.Contains(ide.Decl)) {
- rc.Error(this, "left-hand side of call command contains variable twice: {0}", ide.Name);
- } else {
- actualOuts.Add(ide.Decl);
- }
- }
- }
- }
-
- if (Proc == null)
- return;
-
- // first make sure that the right number of parameters is given
- // (a similar check is in CheckArgumentTypes, but we are not
- // able to call this method because it cannot cope with Ins/Outs
- // that are null)
- if (Ins.Count != Proc.InParams.Count) {
- rc.Error(this.tok,
- "wrong number of arguments in call to {0}: {1}",
- callee, Ins.Count);
- return;
- }
- if (Outs.Count != Proc.OutParams.Count) {
- rc.Error(this.tok,
- "wrong number of result variables in call to {0}: {1}",
- callee, Outs.Count);
- return;
- }
- if (IsAsync) {
- if (Proc.OutParams.Count > 0) {
- rc.Error(this.tok, "a procedure called asynchronously can have no output parameters");
- return;
- }
- }
-
- // Check that type parameters can be determined using the given
- // actual i/o arguments. This is done already during resolution
- // because CheckBoundVariableOccurrences needs a resolution
- // context
- List<Type>/*!*/ formalInTypes = new List<Type>();
- List<Type>/*!*/ formalOutTypes = new List<Type>();
- for (int i = 0; i < Ins.Count; ++i)
- if (Ins[i] != null)
- formalInTypes.Add(cce.NonNull(Proc.InParams[i]).TypedIdent.Type);
- for (int i = 0; i < Outs.Count; ++i)
- if (Outs[i] != null)
- formalOutTypes.Add(cce.NonNull(Proc.OutParams[i]).TypedIdent.Type);
-
- // we need to bind the type parameters for this
- // (this is expected by CheckBoundVariableOccurrences)
- int previousTypeBinderState = rc.TypeBinderState;
- try {
- foreach (TypeVariable/*!*/ v in Proc.TypeParameters) {
- Contract.Assert(v != null);
- rc.AddTypeBinder(v);
- }
- Type.CheckBoundVariableOccurrences(Proc.TypeParameters,
- formalInTypes, formalOutTypes,
- this.tok, "types of given arguments",
- rc);
- } finally {
- rc.TypeBinderState = previousTypeBinderState;
- }
- }
-
- public override void AddAssignedVariables(List<Variable> vars) {
- if (this.IsAsync)
- return;
- foreach (IdentifierExpr e in Outs) {
- if (e != null) {
- vars.Add(e.Decl);
- }
- }
- Contract.Assume(this.Proc != null);
- foreach (IdentifierExpr/*!*/ e in this.Proc.Modifies) {
- Contract.Assert(e != null);
- vars.Add(e.Decl);
- }
- if (AssignedAssumptionVariable != null)
- {
- vars.Add(AssignedAssumptionVariable);
- }
- }
-
- public override void Typecheck(TypecheckingContext tc)
- {
- //Contract.Requires(tc != null);
- Contract.Assume(this.Proc != null); // we assume the CallCmd has been successfully resolved before calling this Typecheck method
-
- TypecheckAttributes(Attributes, tc);
-
- // typecheck in-parameters
- foreach (Expr e in Ins)
- if (e != null)
- e.Typecheck(tc);
- foreach (Expr e in Outs)
- if (e != null)
- e.Typecheck(tc);
- this.CheckAssignments(tc);
-
- List<Type>/*!*/ formalInTypes = new List<Type>();
- List<Type>/*!*/ formalOutTypes = new List<Type>();
- List<Expr>/*!*/ actualIns = new List<Expr>();
- List<IdentifierExpr>/*!*/ actualOuts = new List<IdentifierExpr>();
- for (int i = 0; i < Ins.Count; ++i)
- {
- if (Ins[i] != null)
- {
- formalInTypes.Add(cce.NonNull(Proc.InParams[i]).TypedIdent.Type);
- actualIns.Add(Ins[i]);
- }
- }
- for (int i = 0; i < Outs.Count; ++i)
- {
- if (Outs[i] != null)
- {
- formalOutTypes.Add(cce.NonNull(Proc.OutParams[i]).TypedIdent.Type);
- actualOuts.Add(Outs[i]);
- }
- }
-
- // match actuals with formals
- List<Type/*!*/>/*!*/ actualTypeParams;
- Type.CheckArgumentTypes(Proc.TypeParameters,
- out actualTypeParams,
- formalInTypes, actualIns,
- formalOutTypes, actualOuts,
- this.tok,
- "call to " + callee,
- tc);
- Contract.Assert(cce.NonNullElements(actualTypeParams));
- TypeParameters = SimpleTypeParamInstantiation.From(Proc.TypeParameters,
- actualTypeParams);
-
- if (!CommandLineOptions.Clo.DoModSetAnalysis && IsAsync)
- {
- if (!tc.Yields)
- {
- tc.Error(this, "enclosing procedure of an async call must yield");
- }
- if (!QKeyValue.FindBoolAttribute(Proc.Attributes, "yields"))
- {
- tc.Error(this, "target procedure of an async call must yield");
- }
- }
- }
-
- private IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ TypeParamSubstitution() {
- Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
- Contract.Assume(TypeParameters != null);
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ res = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- foreach (TypeVariable/*!*/ v in TypeParameters.FormalTypeParams) {
- Contract.Assert(v != null);
- res.Add(v, TypeParameters[v]);
- }
- return res;
- }
-
- protected override Cmd ComputeDesugaring() {
- Contract.Ensures(Contract.Result<Cmd>() != null);
-
- int uniqueId = 0;
- List<Cmd> newBlockBody = new List<Cmd>();
- Dictionary<Variable, Expr> substMap = new Dictionary<Variable, Expr>();
- Dictionary<Variable, Expr> substMapOld = new Dictionary<Variable, Expr>();
- Dictionary<Variable, Expr> substMapBound = new Dictionary<Variable, Expr>();
- List<Variable>/*!*/ tempVars = new List<Variable>();
-
- // proc P(ins) returns (outs)
- // requires Pre
- // //modifies frame
- // ensures Post
- //
- // call aouts := P(ains)
-
- // ins : formal in parameters of procedure
- // frame : a list of global variables from the modifies clause
- // outs : formal out parameters of procedure
- // ains : actual in arguments passed to call
- // aouts : actual variables assigned to from call
- // cins : new variables created just for this call, one per ains
- // cframe : new variables created just for this call, to keep track of OLD values
- // couts : new variables created just for this call, one per aouts
- // WildcardVars : new variables created just for this call, one per null in ains
-
- #region Create cins; each one is an incarnation of the corresponding in parameter
- List<Variable>/*!*/ cins = new List<Variable>();
- List<Variable> wildcardVars = new List<Variable>();
- Contract.Assume(this.Proc != null);
- for (int i = 0; i < this.Proc.InParams.Count; ++i) {
- Variable/*!*/ param = cce.NonNull(this.Proc.InParams[i]);
- bool isWildcard = this.Ins[i] == null;
-
- Type/*!*/ actualType;
- if (isWildcard)
- actualType = param.TypedIdent.Type.Substitute(TypeParamSubstitution());
- else
- // during type checking, we have ensured that the type of the actual
- // parameter Ins[i] is correct, so we can use it here
- actualType = cce.NonNull(cce.NonNull(Ins[i]).Type);
-
- Variable cin = CreateTemporaryVariable(tempVars, param, actualType,
- TempVarKind.Formal, ref uniqueId);
- cins.Add(cin);
- IdentifierExpr ie = new IdentifierExpr(cin.tok, cin);
- substMap.Add(param, ie);
- if (isWildcard) {
- cin = CreateTemporaryVariable(tempVars, param,
- actualType, TempVarKind.Bound, ref uniqueId);
- wildcardVars.Add(cin);
- ie = new IdentifierExpr(cin.tok, cin);
- }
- substMapBound.Add(param, ie);
- }
- #endregion
- #region call aouts := P(ains) becomes: (open outlining one level to see)
- #region cins := ains (or havoc cin when ain is null)
- for (int i = 0, n = this.Ins.Count; i < n; i++) {
- IdentifierExpr/*!*/ cin_exp = new IdentifierExpr(cce.NonNull(cins[i]).tok, cce.NonNull(cins[i]));
- Contract.Assert(cin_exp != null);
- if (this.Ins[i] != null) {
- AssignCmd assign = Cmd.SimpleAssign(Token.NoToken, cin_exp, cce.NonNull(this.Ins[i]));
- newBlockBody.Add(assign);
- } else {
- List<IdentifierExpr>/*!*/ ies = new List<IdentifierExpr>();
- ies.Add(cin_exp);
- HavocCmd havoc = new HavocCmd(Token.NoToken, ies);
- newBlockBody.Add(havoc);
- }
- }
- #endregion
-
- #region assert (exists wildcardVars :: Pre[ins := cins])
- Substitution s = Substituter.SubstitutionFromHashtable(substMapBound);
- bool hasWildcard = (wildcardVars.Count != 0);
- Expr preConjunction = null;
- for (int i = 0; i < this.Proc.Requires.Count; i++) {
- Requires/*!*/ req = cce.NonNull(this.Proc.Requires[i]);
- if (!req.Free && !IsFree) {
- if (hasWildcard) {
- Expr pre = Substituter.Apply(s, req.Condition);
- if (preConjunction == null) {
- preConjunction = pre;
- } else {
- preConjunction = Expr.And(preConjunction, pre);
- }
- } else {
- Requires/*!*/ reqCopy = (Requires/*!*/)cce.NonNull(req.Clone());
- reqCopy.Condition = Substituter.Apply(s, req.Condition);
- AssertCmd/*!*/ a = new AssertRequiresCmd(this, reqCopy);
- Contract.Assert(a != null);
- a.ErrorDataEnhanced = reqCopy.ErrorDataEnhanced;
- newBlockBody.Add(a);
- }
- }
- else if (CommandLineOptions.Clo.StratifiedInlining > 0)
- {
- // inject free requires as assume statements at the call site
- AssumeCmd/*!*/ a = new AssumeCmd(req.tok, Substituter.Apply(s, req.Condition));
- Contract.Assert(a != null);
- newBlockBody.Add(a);
- }
- }
- if (hasWildcard) {
- if (preConjunction == null) {
- preConjunction = Expr.True;
- }
- Expr/*!*/ expr = new ExistsExpr(tok, wildcardVars, preConjunction);
- Contract.Assert(expr != null);
- AssertCmd/*!*/ a = new AssertCmd(tok, expr);
- Contract.Assert(a != null);
- a.ErrorDataEnhanced = AssertCmd.GenerateBoundVarMiningStrategy(expr);
- newBlockBody.Add(a);
- }
- #endregion
-
- #region assume Pre[ins := cins] with formal paramters
- if (hasWildcard) {
- s = Substituter.SubstitutionFromHashtable(substMap);
- for (int i = 0; i < this.Proc.Requires.Count; i++) {
- Requires/*!*/ req = cce.NonNull(this.Proc.Requires[i]);
- if (!req.Free) {
- Requires/*!*/ reqCopy = (Requires/*!*/)cce.NonNull(req.Clone());
- reqCopy.Condition = Substituter.Apply(s, req.Condition);
- AssumeCmd/*!*/ a = new AssumeCmd(tok, reqCopy.Condition);
- Contract.Assert(a != null);
- newBlockBody.Add(a);
- }
- }
- }
- #endregion
-
- #region cframe := frame (to hold onto frame values in case they are referred to in the postcondition)
- List<IdentifierExpr> havocVarExprs = new List<IdentifierExpr>();
-
- foreach (IdentifierExpr/*!*/ f in this.Proc.Modifies) {
- Contract.Assert(f != null);
- Contract.Assume(f.Decl != null);
- Contract.Assert(f.Type != null);
- Variable v = CreateTemporaryVariable(tempVars, f.Decl, f.Type, TempVarKind.Old, ref uniqueId);
- IdentifierExpr v_exp = new IdentifierExpr(v.tok, v);
- substMapOld.Add(f.Decl, v_exp); // this assumes no duplicates in this.Proc.Modifies
- AssignCmd assign = Cmd.SimpleAssign(f.tok, v_exp, f);
- newBlockBody.Add(assign);
-
- // fra
- if (!havocVarExprs.Contains(f))
- havocVarExprs.Add(f);
- }
- #endregion
- #region Create couts
- List<Variable>/*!*/ couts = new List<Variable>();
- for (int i = 0; i < this.Proc.OutParams.Count; ++i) {
- Variable/*!*/ param = cce.NonNull(this.Proc.OutParams[i]);
- bool isWildcard = this.Outs[i] == null;
-
- Type/*!*/ actualType;
- if (isWildcard)
- actualType = param.TypedIdent.Type.Substitute(TypeParamSubstitution());
- else
- // during type checking, we have ensured that the type of the actual
- // out parameter Outs[i] is correct, so we can use it here
- actualType = cce.NonNull(cce.NonNull(Outs[i]).Type);
-
- Variable cout = CreateTemporaryVariable(tempVars, param, actualType,
- TempVarKind.Formal, ref uniqueId);
- couts.Add(cout);
- IdentifierExpr ie = new IdentifierExpr(cout.tok, cout);
- substMap.Add(param, ie);
-
- if (!havocVarExprs.Contains(ie))
- havocVarExprs.Add(ie);
- }
- // add the where clauses, now that we have the entire substitution map
- foreach (Variable/*!*/ param in this.Proc.OutParams) {
- Contract.Assert(param != null);
- Expr w = param.TypedIdent.WhereExpr;
- if (w != null) {
- IdentifierExpr ie = (IdentifierExpr/*!*/)cce.NonNull(substMap[param]);
- Contract.Assert(ie.Decl != null);
- ie.Decl.TypedIdent.WhereExpr = Substituter.Apply(Substituter.SubstitutionFromHashtable(substMap), w);
- }
- }
- #endregion
-
- #region havoc frame, couts
- // pass on this's token
- HavocCmd hc = new HavocCmd(this.tok, havocVarExprs);
- newBlockBody.Add(hc);
- #endregion
-
- #region assume Post[ins, outs, old(frame) := cins, couts, cframe]
- calleeSubstitution = Substituter.SubstitutionFromHashtable(substMap, true, Proc);
- calleeSubstitutionOld = Substituter.SubstitutionFromHashtable(substMapOld, true, Proc);
- foreach (Ensures/*!*/ e in this.Proc.Ensures) {
- Contract.Assert(e != null);
- Expr copy = Substituter.ApplyReplacingOldExprs(calleeSubstitution, calleeSubstitutionOld, e.Condition);
- AssumeCmd assume = new AssumeCmd(this.tok, copy);
- #region stratified inlining support
- if (QKeyValue.FindBoolAttribute(e.Attributes, "si_fcall"))
- {
- assume.Attributes = Attributes;
- }
- if (QKeyValue.FindBoolAttribute(e.Attributes, "candidate"))
- {
- assume.Attributes = new QKeyValue(Token.NoToken, "candidate", new List<object>(), assume.Attributes);
- assume.Attributes.AddParam(this.callee);
- }
- #endregion
- newBlockBody.Add(assume);
- }
- #endregion
-
- #region aouts := couts
- for (int i = 0, n = this.Outs.Count; i < n; i++) {
- if (this.Outs[i] != null) {
- Variable/*!*/ param_i = cce.NonNull(this.Proc.OutParams[i]);
- Expr/*!*/ cout_exp = new IdentifierExpr(cce.NonNull(couts[i]).tok, cce.NonNull(couts[i]));
- Contract.Assert(cout_exp != null);
- AssignCmd assign = Cmd.SimpleAssign(param_i.tok, cce.NonNull(this.Outs[i]), cout_exp);
- newBlockBody.Add(assign);
- }
- }
- #endregion
- #endregion
-
- return new StateCmd(this.tok, tempVars, newBlockBody);
- }
-
- class NameEqualityComparer : EqualityComparer<IdentifierExpr>
- {
- public override bool Equals(IdentifierExpr x, IdentifierExpr y)
- {
- return x.Name.Equals(y.Name);
- }
-
- public override int GetHashCode(IdentifierExpr obj)
- {
- return obj.Name.GetHashCode();
- }
- }
-
- NameEqualityComparer comparer = new NameEqualityComparer();
-
- public Substitution calleeSubstitution;
- public Substitution calleeSubstitutionOld;
-
- public IEnumerable<IdentifierExpr> UnmodifiedBefore(Procedure oldProcedure)
- {
- Contract.Requires(oldProcedure != null);
-
- return Proc.Modifies.Except(oldProcedure.Modifies, comparer).Select(e => new IdentifierExpr(Token.NoToken, e.Decl));
- }
-
- public IEnumerable<IdentifierExpr> ModifiedBefore(Procedure oldProcedure)
- {
- Contract.Requires(oldProcedure != null);
-
- return oldProcedure.Modifies.Except(Proc.Modifies, comparer).Select(e => new IdentifierExpr(Token.NoToken, e.Decl));
- }
-
- public Expr Postcondition(Procedure procedure, List<Expr> modifies, Dictionary<Variable, Expr> oldSubst, Program program, Func<Expr, Expr> extract)
- {
- Contract.Requires(calleeSubstitution != null && calleeSubstitutionOld != null && modifies != null && oldSubst != null && program != null && extract != null);
-
- Substitution substOldCombined = v => { Expr s; if (oldSubst.TryGetValue(v, out s)) { return s; } return calleeSubstitutionOld(v); };
-
- var clauses = procedure.Ensures.Select(e => Substituter.FunctionCallReresolvingApplyReplacingOldExprs(calleeSubstitution, substOldCombined, e.Condition, program)).Concat(modifies);
- // TODO(wuestholz): Try extracting a function for each clause:
- // return Conjunction(clauses.Select(c => extract(c)));
- var conj = Conjunction(clauses);
- return conj != null ? extract(conj) : conj;
- }
-
- public Expr CheckedPrecondition(Procedure procedure, Program program, Func<Expr, Expr> extract)
- {
- Contract.Requires(calleeSubstitution != null && calleeSubstitutionOld != null && program != null && extract != null);
-
- var clauses = procedure.Requires.Where(r => !r.Free).Select(r => Substituter.FunctionCallReresolvingApplyReplacingOldExprs(calleeSubstitution, calleeSubstitutionOld, r.Condition, program));
- // TODO(wuestholz): Try extracting a function for each clause:
- // return Conjunction(clauses.Select(c => extract(c)));
- var conj = Conjunction(clauses);
- return conj != null ? extract(conj) : conj;
- }
-
- private static Expr Conjunction(IEnumerable<Expr> conjuncts)
- {
- // TODO(wuestholz): Maybe we should use 'LiteralExpr.BinaryTreeAnd' instead.
- Expr result = null;
- foreach (var c in conjuncts)
- {
- if (result != null)
- {
- result = LiteralExpr.And(result, c);
- result.Type = Type.Bool;
- }
- else
- {
- result = c;
- result.Type = Type.Bool;
- }
- }
- return result;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitCallCmd(this);
- }
- }
-
- public abstract class PredicateCmd : Cmd {
- public QKeyValue Attributes;
- public /*readonly--except in StandardVisitor*/ Expr/*!*/ Expr;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Expr != null);
- }
-
- public PredicateCmd(IToken/*!*/ tok, Expr/*!*/ expr)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- Expr = expr;
- }
- public PredicateCmd(IToken/*!*/ tok, Expr/*!*/ expr, QKeyValue kv)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- Expr = expr;
- Attributes = kv;
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Expr.Resolve(rc);
- }
- public override void AddAssignedVariables(List<Variable> vars) {
- //Contract.Requires(vars != null);
- }
- }
-
- public abstract class MiningStrategy {
- // abstract class to bind all MiningStrategys, i.e., all types of enhanced error data
- // types together
- }
-
- public class ListOfMiningStrategies : MiningStrategy {
-
- private List<MiningStrategy>/*!*/ _msList;
-
- public List<MiningStrategy>/*!*/ msList
- {
- get
- {
- Contract.Ensures(Contract.Result<List<MiningStrategy>>() != null);
- return this._msList;
- }
- set
- {
- Contract.Requires(value != null);
- this._msList = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._msList != null);
- }
-
- public ListOfMiningStrategies(List<MiningStrategy> l) {
- Contract.Requires(l != null);
- this._msList = l;
- }
- }
-
- public class EEDTemplate : MiningStrategy {
- private string/*!*/ _reason;
- public string/*!*/ reason
- {
- get
- {
- Contract.Ensures(Contract.Result<string>() != null);
- return this._reason;
- }
- set
- {
- Contract.Requires(value != null);
- this._reason = value;
- }
- }
-
- private List<Expr/*!*/>/*!*/ exprList;
- public IEnumerable<Expr> Expressions
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Expr>>()));
- return this.exprList.AsReadOnly();
- }
- set
- {
- Contract.Requires(cce.NonNullElements(value));
- this.exprList = new List<Expr>(value);
- }
- }
-
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._reason != null);
- Contract.Invariant(cce.NonNullElements(this.exprList));
- }
-
- public EEDTemplate(string reason, List<Expr/*!*/>/*!*/ exprList) {
- Contract.Requires(reason != null);
- Contract.Requires(cce.NonNullElements(exprList));
- this._reason = reason;
- this.exprList = exprList;
- }
- }
-
- public class AssertCmd : PredicateCmd, IPotentialErrorNode<object, object>
- {
- public Expr OrigExpr;
- public Dictionary<Variable, Expr> IncarnationMap;
-
- Expr verifiedUnder;
- public Expr VerifiedUnder
- {
- get
- {
- if (verifiedUnder != null)
- {
- return verifiedUnder;
- }
- verifiedUnder = QKeyValue.FindExprAttribute(Attributes, "verified_under");
- return verifiedUnder;
- }
- }
-
- public void MarkAsVerifiedUnder(Expr expr)
- {
- Attributes = new QKeyValue(tok, "verified_under", new List<object> { expr }, Attributes);
- verifiedUnder = expr;
- }
-
- // TODO: convert to use generics
- private object errorData;
- public object ErrorData {
- get {
- return errorData;
- }
- set {
- errorData = value;
- }
- }
-
- public string ErrorMessage {
- get {
- return QKeyValue.FindStringAttribute(Attributes, "msg");
- }
- }
-
- private MiningStrategy errorDataEnhanced;
- public MiningStrategy ErrorDataEnhanced {
- get {
- return errorDataEnhanced;
- }
- set {
- errorDataEnhanced = value;
- }
- }
-
- public AssertCmd(IToken/*!*/ tok, Expr/*!*/ expr)
- : base(tok, expr) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- errorDataEnhanced = GenerateBoundVarMiningStrategy(expr);
- }
-
- public AssertCmd(IToken/*!*/ tok, Expr/*!*/ expr, QKeyValue kv)
- : base(tok, expr, kv) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- errorDataEnhanced = GenerateBoundVarMiningStrategy(expr);
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "assert ");
- EmitAttributes(stream, Attributes);
- this.Expr.Emit(stream);
- stream.WriteLine(";");
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- ResolveAttributes(Attributes, rc);
- base.Resolve(rc);
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- TypecheckAttributes(Attributes, tc);
- Expr.Typecheck(tc);
- Contract.Assert(Expr.Type != null); // follows from Expr.Typecheck postcondition
- if (!Expr.Type.Unify(Type.Bool)) {
- tc.Error(this, "an asserted expression must be of type bool (got: {0})", Expr.Type);
- }
- }
-
- public static MiningStrategy GenerateBoundVarMiningStrategy(Expr expr) {
- Contract.Requires(expr != null);
- List<MiningStrategy> l = new List<MiningStrategy>();
- if (expr != null) {
- l = GenerateBoundVarListForMining(expr, l);
- }
- return new ListOfMiningStrategies(l);
- }
-
- public static List<MiningStrategy>/*!*/ GenerateBoundVarListForMining(Expr expr, List<MiningStrategy> l) {
- Contract.Requires(l != null);
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<List<MiningStrategy>>() != null);
-
- // go through the origExpr and identify all bound variables in the AST.
- if (expr is LiteralExpr || expr is IdentifierExpr) {
- //end recursion
- } else if (expr is NAryExpr) {
- NAryExpr e = (NAryExpr)expr;
- foreach (Expr/*!*/ arg in e.Args) {
- Contract.Assert(arg != null);
- l = GenerateBoundVarListForMining(arg, l);
- }
- } else if (expr is OldExpr) {
- OldExpr e = (OldExpr)expr;
- l = GenerateBoundVarListForMining(e.Expr, l);
- } else if (expr is QuantifierExpr) {
- QuantifierExpr qe = (QuantifierExpr)expr;
- List<Variable> vs = qe.Dummies;
- foreach (Variable/*!*/ x in vs) {
- Contract.Assert(x != null);
- string name = x.Name;
- if (name.StartsWith("^")) {
- name = name.Substring(1);
- List<Expr> exprList = new List<Expr>();
- exprList.Add(new IdentifierExpr(Token.NoToken, x.ToString(), x.TypedIdent.Type));
- MiningStrategy eed = new EEDTemplate("The bound variable " + name + " has the value {0}.", exprList);
- l.Add(eed);
- }
- }
- l = GenerateBoundVarListForMining(qe.Body, l);
- }
- return l;
- }
-
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitAssertCmd(this);
- }
- }
-
- // An AssertCmd that is a loop invariant check before the loop iteration starts
- public class LoopInitAssertCmd : AssertCmd {
- public LoopInitAssertCmd(IToken/*!*/ tok, Expr/*!*/ expr)
- : base(tok, expr) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- }
- }
-
- // An AssertCmd that is a loop invariant check to maintain the invariant after iteration
- public class LoopInvMaintainedAssertCmd : AssertCmd {
- public LoopInvMaintainedAssertCmd(IToken/*!*/ tok, Expr/*!*/ expr)
- : base(tok, expr) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- }
- }
-
- /// <summary>
- /// An AssertCmd that is introduced in translation from the requires on a call.
- /// </summary>
- public class AssertRequiresCmd : AssertCmd {
- public CallCmd/*!*/ Call;
- public Requires/*!*/ Requires;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Call != null);
- Contract.Invariant(Requires != null);
- }
-
-
- public AssertRequiresCmd(CallCmd/*!*/ call, Requires/*!*/ requires)
- : base(call.tok, requires.Condition) {
- Contract.Requires(call != null);
- Contract.Requires(requires != null);
- this.Call = call;
- this.Requires = requires;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitAssertRequiresCmd(this);
- }
- }
-
- /// <summary>
- /// An AssertCmd that is introduced in translation from an ensures
- /// declaration.
- /// </summary>
- public class AssertEnsuresCmd : AssertCmd {
- public Ensures/*!*/ Ensures;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Ensures != null);
- }
-
- public AssertEnsuresCmd(Ensures/*!*/ ens)
- : base(ens.tok, ens.Condition) {
- Contract.Requires(ens != null);
- this.Ensures = ens;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitAssertEnsuresCmd(this);
- }
- }
-
- public class AssumeCmd : PredicateCmd {
- public AssumeCmd(IToken/*!*/ tok, Expr/*!*/ expr)
- : base(tok, expr) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- }
- public AssumeCmd(IToken/*!*/ tok, Expr/*!*/ expr, QKeyValue kv)
- : base(tok, expr, kv) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
-
- if (stream.UseForComputingChecksums && QKeyValue.FindBoolAttribute(Attributes, "precondition_previous_snapshot")) { return; }
-
- stream.Write(this, level, "assume ");
- EmitAttributes(stream, Attributes);
- this.Expr.Emit(stream);
- stream.WriteLine(";");
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- Expr.Typecheck(tc);
- Contract.Assert(Expr.Type != null); // follows from Expr.Typecheck postcondition
- if (!Expr.Type.Unify(Type.Bool)) {
- tc.Error(this, "an assumed expression must be of type bool (got: {0})", Expr.Type);
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitAssumeCmd(this);
- }
- }
-
- public class ReturnExprCmd : ReturnCmd {
- public Expr/*!*/ Expr;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Expr != null);
- }
-
- public ReturnExprCmd(IToken/*!*/ tok, Expr/*!*/ expr)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- Expr = expr;
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "return ");
- this.Expr.Emit(stream);
- stream.WriteLine(";");
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- Expr.Typecheck(tc);
- Contract.Assert(Expr.Type != null); // follows from Expr.Typecheck postcondition
- if (!Expr.Type.Unify(Type.Bool)) {
- tc.Error(this, "a return expression must be of type bool (got: {0})", Expr.Type);
- }
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Expr.Resolve(rc);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitReturnExprCmd(this);
- }
- }
-
- public class HavocCmd : Cmd {
- private List<IdentifierExpr>/*!*/ _vars;
-
- public List<IdentifierExpr>/*!*/ Vars {
- get {
- Contract.Ensures(Contract.Result<List<IdentifierExpr>>() != null);
- return this._vars;
- }
- set {
- Contract.Requires(value != null);
- this._vars = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._vars != null);
- }
-
- public HavocCmd(IToken/*!*/ tok, List<IdentifierExpr>/*!*/ vars)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(vars != null);
- this._vars = vars;
- }
-
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.Write(this, level, "havoc ");
- Vars.Emit(stream, true);
- stream.WriteLine(";");
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- foreach (IdentifierExpr/*!*/ ide in Vars) {
- Contract.Assert(ide != null);
- ide.Resolve(rc);
- }
- }
- public override void AddAssignedVariables(List<Variable> vars) {
- //Contract.Requires(vars != null);
- foreach (IdentifierExpr/*!*/ e in this.Vars) {
- Contract.Assert(e != null);
- vars.Add(e.Decl);
- }
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- foreach (IdentifierExpr ie in Vars)
- {
- ie.Typecheck(tc);
- }
- this.CheckAssignments(tc);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitHavocCmd(this);
- }
- }
-
- //---------------------------------------------------------------------
- // Transfer commands
- [ContractClass(typeof(TransferCmdContracts))]
- public abstract class TransferCmd : Absy {
- internal TransferCmd(IToken/*!*/ tok)
- : base(tok) {
- Contract.Requires(tok != null);
- }
- public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- // nothing to typecheck
- }
-
- public override string ToString()
- {
- Contract.Ensures(Contract.Result<string>() != null);
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false , /*pretty=*/ false)) {
- this.Emit(stream, 0);
- }
- return buffer.ToString();
- }
- }
- [ContractClassFor(typeof(TransferCmd))]
- public abstract class TransferCmdContracts : TransferCmd {
- public TransferCmdContracts() :base(null){
-
- }
- public override void Emit(TokenTextWriter stream, int level) {
- Contract.Requires(stream != null);
- throw new NotImplementedException();
- }
- }
-
- public class ReturnCmd : TransferCmd {
- public ReturnCmd(IToken/*!*/ tok)
- : base(tok) {
- Contract.Requires(tok != null);
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- stream.WriteLine(this, level, "return;");
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- // nothing to resolve
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitReturnCmd(this);
- }
- }
-
- public class GotoCmd : TransferCmd {
- [Rep]
- public List<String> labelNames;
- [Rep]
- public List<Block> labelTargets;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(labelNames == null || labelTargets == null || labelNames.Count == labelTargets.Count);
- }
-
- [NotDelayed]
- public GotoCmd(IToken/*!*/ tok, List<String>/*!*/ labelSeq)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(labelSeq != null);
- this.labelNames = labelSeq;
- }
- public GotoCmd(IToken/*!*/ tok, List<String>/*!*/ labelSeq, List<Block>/*!*/ blockSeq)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(labelSeq != null);
- Contract.Requires(blockSeq != null);
- Debug.Assert(labelSeq.Count == blockSeq.Count);
- for (int i = 0; i < labelSeq.Count; i++) {
- Debug.Assert(Equals(labelSeq[i], cce.NonNull(blockSeq[i]).Label));
- }
-
- this.labelNames = labelSeq;
- this.labelTargets = blockSeq;
- }
- public GotoCmd(IToken/*!*/ tok, List<Block>/*!*/ blockSeq)
- : base(tok) { //requires (blockSeq[i] != null ==> blockSeq[i].Label != null);
- Contract.Requires(tok != null);
- Contract.Requires(blockSeq != null);
- List<String> labelSeq = new List<String>();
- for (int i = 0; i < blockSeq.Count; i++)
- labelSeq.Add(cce.NonNull(blockSeq[i]).Label);
- this.labelNames = labelSeq;
- this.labelTargets = blockSeq;
- }
- public void AddTarget(Block b) {
- Contract.Requires(b != null);
- Contract.Requires(b.Label != null);
- Contract.Requires(this.labelTargets != null);
- Contract.Requires(this.labelNames != null);
- this.labelTargets.Add(b);
- this.labelNames.Add(b.Label);
- }
- public override void Emit(TokenTextWriter stream, int level) {
- //Contract.Requires(stream != null);
- Contract.Assume(this.labelNames != null);
- stream.Write(this, level, "goto ");
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- if (labelTargets == null) {
- string sep = "";
- foreach (string name in labelNames) {
- stream.Write("{0}{1}^^{2}", sep, "NoDecl", name);
- sep = ", ";
- }
- } else {
- string sep = "";
- foreach (Block/*!*/ b in labelTargets) {
- Contract.Assert(b != null);
- stream.Write("{0}h{1}^^{2}", sep, b.GetHashCode(), b.Label);
- sep = ", ";
- }
- }
- } else {
- labelNames.Emit(stream);
- }
- stream.WriteLine(";");
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(labelTargets != null);
- if (labelTargets != null) {
- // already resolved
- return;
- }
- Contract.Assume(this.labelNames != null);
- labelTargets = new List<Block>();
- foreach (string/*!*/ lbl in labelNames) {
- Contract.Assert(lbl != null);
- Block b = rc.LookUpBlock(lbl);
- if (b == null) {
- rc.Error(this, "goto to unknown block: {0}", lbl);
- } else {
- labelTargets.Add(b);
- }
- }
- Debug.Assert(rc.ErrorCount > 0 || labelTargets.Count == labelNames.Count);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitGotoCmd(this);
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// BoogiePL - Absy.cs
+//---------------------------------------------------------------------------------------------
+
+namespace Microsoft.Boogie {
+ using System;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Collections.Generic;
+ using System.Linq;
+ using Microsoft.Boogie.AbstractInterpretation;
+ using System.Diagnostics.Contracts;
+ using Set = GSet<object>;
+
+
+ //---------------------------------------------------------------------
+ // BigBlock
+ public class BigBlock {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(tok != null);
+ Contract.Invariant(Anonymous || this.labelName != null);
+ Contract.Invariant(this._ec == null || this._tc == null);
+ Contract.Invariant(this._simpleCmds != null);
+ }
+
+ public readonly IToken/*!*/ tok;
+
+ public readonly bool Anonymous;
+
+ private string labelName;
+
+ public string LabelName
+ {
+ get
+ {
+ Contract.Ensures(Anonymous || Contract.Result<string>() != null);
+ return this.labelName;
+ }
+ set
+ {
+ Contract.Requires(Anonymous || value != null);
+ this.labelName = value;
+ }
+ }
+
+ [Rep]
+ private List<Cmd>/*!*/ _simpleCmds;
+
+ public List<Cmd>/*!*/ simpleCmds
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ return this._simpleCmds;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this._simpleCmds = value;
+ }
+ }
+
+ private StructuredCmd _ec;
+
+ public StructuredCmd ec
+ {
+ get
+ {
+ return this._ec;
+ }
+ set
+ {
+ Contract.Requires(value == null || this.tc == null);
+ this._ec = value;
+ }
+ }
+
+ private TransferCmd _tc;
+
+ public TransferCmd tc
+ {
+ get
+ {
+ return this._tc;
+ }
+ set
+ {
+ Contract.Requires(value == null || this.ec == null);
+ this._tc = value;
+ }
+ }
+
+ public BigBlock successorBigBlock; // semantic successor (may be a back-edge, pointing back to enclosing while statement); null if successor is end of procedure body (or if field has not yet been initialized)
+
+ public BigBlock(IToken tok, string labelName, [Captured] List<Cmd> simpleCmds, StructuredCmd ec, TransferCmd tc) {
+ Contract.Requires(simpleCmds != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(ec == null || tc == null);
+ this.tok = tok;
+ this.Anonymous = labelName == null;
+ this.labelName = labelName;
+ this._simpleCmds = simpleCmds;
+ this._ec = ec;
+ this._tc = tc;
+ }
+
+ public void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ if (!Anonymous) {
+ stream.WriteLine(level, "{0}:",
+ CommandLineOptions.Clo.PrintWithUniqueASTIds ? String.Format("h{0}^^{1}", this.GetHashCode(), this.LabelName) : this.LabelName);
+ }
+
+ foreach (Cmd/*!*/ c in this.simpleCmds) {
+ Contract.Assert(c != null);
+ c.Emit(stream, level + 1);
+ }
+
+ if (this.ec != null) {
+ this.ec.Emit(stream, level + 1);
+ } else if (this.tc != null) {
+ this.tc.Emit(stream, level + 1);
+ }
+ }
+ }
+
+ public class StmtList {
+ [Rep]
+ private readonly List<BigBlock/*!*/>/*!*/ bigBlocks;
+
+ public IList<BigBlock/*!*/>/*!*/ BigBlocks
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<IList<BigBlock>>() != null);
+ Contract.Ensures(Contract.Result<IList<BigBlock>>().IsReadOnly);
+ return this.bigBlocks.AsReadOnly();
+ }
+ }
+
+ public List<Cmd> PrefixCommands;
+ public readonly IToken/*!*/ EndCurly;
+ public StmtList ParentContext;
+ public BigBlock ParentBigBlock;
+
+ private readonly HashSet<string/*!*/>/*!*/ labels = new HashSet<string/*!*/>();
+
+ public void AddLabel(string label)
+ {
+ labels.Add(label);
+ }
+
+ public IEnumerable<string/*!*/>/*!*/ Labels
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<string/*!*/>/*!*/>()));
+ return this.labels.AsEnumerable<string>();
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(EndCurly != null);
+ Contract.Invariant(cce.NonNullElements(this.bigBlocks));
+ Contract.Invariant(cce.NonNullElements(this.labels));
+ }
+
+ public StmtList(IList<BigBlock/*!*/>/*!*/ bigblocks, IToken endCurly) {
+ Contract.Requires(endCurly != null);
+ Contract.Requires(cce.NonNullElements(bigblocks));
+ Contract.Requires(bigblocks.Count > 0);
+ this.bigBlocks = new List<BigBlock>(bigblocks);
+ this.EndCurly = endCurly;
+ }
+
+ // prints the list of statements, not the surrounding curly braces
+ public void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ bool needSeperator = false;
+ foreach (BigBlock b in BigBlocks) {
+ Contract.Assert(b != null);
+ Contract.Assume(cce.IsPeerConsistent(b));
+ if (needSeperator) {
+ stream.WriteLine();
+ }
+ b.Emit(stream, level);
+ needSeperator = true;
+ }
+ }
+
+ /// <summary>
+ /// Tries to insert the commands "prefixCmds" at the beginning of the first block
+ /// of the StmtList, and returns "true" iff it succeeded.
+ /// In the event of success, the "suggestedLabel" returns as the name of the
+ /// block inside StmtList where "prefixCmds" were inserted. This name may be the
+ /// same as the one passed in, in case this StmtList has no preference as to what
+ /// to call its first block. In the event of failure, "suggestedLabel" is returned
+ /// as its input value.
+ /// Note, to be conservative (that is, ignoring the possible optimization that this
+ /// method enables), this method can do nothing and return false.
+ /// </summary>
+ public bool PrefixFirstBlock([Captured] List<Cmd> prefixCmds, ref string suggestedLabel) {
+ Contract.Requires(suggestedLabel != null);
+ Contract.Requires(prefixCmds != null);
+ Contract.Ensures(Contract.Result<bool>() || cce.Owner.None(prefixCmds)); // "prefixCmds" is captured only on success
+ Contract.Assume(PrefixCommands == null); // prefix has not been used
+
+ BigBlock bb0 = BigBlocks[0];
+ if (prefixCmds.Count == 0) {
+ // This is always a success, since there is nothing to insert. Now, decide
+ // which name to use for the first block.
+ if (bb0.Anonymous) {
+ bb0.LabelName = suggestedLabel;
+ } else {
+ Contract.Assert(bb0.LabelName != null);
+ suggestedLabel = bb0.LabelName;
+ }
+ return true;
+
+ } else {
+ // There really is something to insert. We can do this inline only if the first
+ // block is anonymous (which implies there is no branch to it from within the block).
+ if (bb0.Anonymous) {
+ PrefixCommands = prefixCmds;
+ bb0.LabelName = suggestedLabel;
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// The AST for Boogie structured commands was designed to support backward compatibility with
+ /// the Boogie unstructured commands. This has made the structured commands hard to construct.
+ /// The StmtListBuilder class makes it easier to build structured commands.
+ /// </summary>
+ public class StmtListBuilder {
+ List<BigBlock/*!*/>/*!*/ bigBlocks = new List<BigBlock/*!*/>();
+ string label;
+ List<Cmd> simpleCmds;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(bigBlocks));
+ }
+
+ void Dump(StructuredCmd scmd, TransferCmd tcmd) {
+ Contract.Requires(scmd == null || tcmd == null);
+ Contract.Ensures(label == null && simpleCmds == null);
+ if (label == null && simpleCmds == null && scmd == null && tcmd == null) {
+ // nothing to do
+ } else {
+ if (simpleCmds == null) {
+ simpleCmds = new List<Cmd>();
+ }
+ bigBlocks.Add(new BigBlock(Token.NoToken, label, simpleCmds, scmd, tcmd));
+ label = null;
+ simpleCmds = null;
+ }
+ }
+
+ /// <summary>
+ /// Collects the StmtList built so far and returns it. The StmtListBuilder should no longer
+ /// be used once this method has been invoked.
+ /// </summary>
+ public StmtList Collect(IToken endCurlyBrace) {
+ Contract.Requires(endCurlyBrace != null);
+ Contract.Ensures(Contract.Result<StmtList>() != null);
+ Dump(null, null);
+ if (bigBlocks.Count == 0) {
+ simpleCmds = new List<Cmd>(); // the StmtList constructor doesn't like an empty list of BigBlock's
+ Dump(null, null);
+ }
+ return new StmtList(bigBlocks, endCurlyBrace);
+ }
+
+ public void Add(Cmd cmd) {
+ Contract.Requires(cmd != null);
+ if (simpleCmds == null) {
+ simpleCmds = new List<Cmd>();
+ }
+ simpleCmds.Add(cmd);
+ }
+
+ public void Add(StructuredCmd scmd) {
+ Contract.Requires(scmd != null);
+ Dump(scmd, null);
+ }
+
+ public void Add(TransferCmd tcmd) {
+ Contract.Requires(tcmd != null);
+ Dump(null, tcmd);
+ }
+
+ public void AddLabelCmd(string label) {
+ Contract.Requires(label != null);
+ Dump(null, null);
+ this.label = label;
+ }
+
+ public void AddLocalVariable(string name) {
+ Contract.Requires(name != null);
+ // TODO
+ }
+ }
+
+ class BigBlocksResolutionContext {
+ StmtList/*!*/ stmtList;
+ [Peer]
+ List<Block/*!*/> blocks;
+ string/*!*/ prefix = "anon";
+ int anon = 0;
+ int FreshAnon()
+ {
+ return anon++;
+ }
+ HashSet<string/*!*/> allLabels = new HashSet<string/*!*/>();
+ Errors/*!*/ errorHandler;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(stmtList != null);
+ Contract.Invariant(cce.NonNullElements(blocks, true));
+ Contract.Invariant(prefix != null);
+ Contract.Invariant(cce.NonNullElements(allLabels, true));
+ Contract.Invariant(errorHandler != null);
+ }
+
+ private void ComputeAllLabels(StmtList stmts) {
+ if (stmts == null) return;
+ foreach (BigBlock bb in stmts.BigBlocks) {
+ if (bb.LabelName != null) {
+ allLabels.Add(bb.LabelName);
+ }
+ ComputeAllLabels(bb.ec);
+ }
+ }
+
+ private void ComputeAllLabels(StructuredCmd cmd) {
+ if (cmd == null) return;
+ if (cmd is IfCmd) {
+ IfCmd ifCmd = (IfCmd)cmd;
+ ComputeAllLabels(ifCmd.thn);
+ ComputeAllLabels(ifCmd.elseIf);
+ ComputeAllLabels(ifCmd.elseBlock);
+ }
+ else if (cmd is WhileCmd) {
+ WhileCmd whileCmd = (WhileCmd)cmd;
+ ComputeAllLabels(whileCmd.Body);
+ }
+ }
+
+ public BigBlocksResolutionContext(StmtList stmtList, Errors errorHandler) {
+ Contract.Requires(errorHandler != null);
+ Contract.Requires(stmtList != null);
+ this.stmtList = stmtList;
+ this.errorHandler = errorHandler;
+ ComputeAllLabels(stmtList);
+ }
+
+ public List<Block/*!*/>/*!*/ Blocks {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+ if (blocks == null) {
+ blocks = new List<Block/*!*/>();
+
+ int startErrorCount = this.errorHandler.count;
+ // Check that all goto statements go to a label in allLabels, and no break statement to a non-enclosing loop.
+ // Also, determine a good value for "prefix".
+ CheckLegalLabels(stmtList, null, null);
+
+ // fill in names of anonymous blocks
+ NameAnonymousBlocks(stmtList);
+
+ // determine successor blocks
+ RecordSuccessors(stmtList, null);
+
+ if (this.errorHandler.count == startErrorCount) {
+ // generate blocks from the big blocks
+ CreateBlocks(stmtList, null);
+ }
+ }
+ return blocks;
+ }
+ }
+
+ void CheckLegalLabels(StmtList stmtList, StmtList parentContext, BigBlock parentBigBlock) {
+ Contract.Requires(stmtList != null);
+ Contract.Requires((parentContext == null) == (parentBigBlock == null));
+ Contract.Requires(stmtList.ParentContext == null); // it hasn't been set yet
+ //modifies stmtList.*;
+ Contract.Ensures(stmtList.ParentContext == parentContext);
+ stmtList.ParentContext = parentContext;
+ stmtList.ParentBigBlock = parentBigBlock;
+
+ // record the labels declared in this StmtList
+ foreach (BigBlock b in stmtList.BigBlocks) {
+ if (b.LabelName != null) {
+ string n = b.LabelName;
+ if (n.StartsWith(prefix)) {
+ if (prefix.Length < n.Length && n[prefix.Length] == '0') {
+ prefix += "1";
+ } else {
+ prefix += "0";
+ }
+ }
+ stmtList.AddLabel(b.LabelName);
+ }
+ }
+
+ // check that labels in this and nested StmtList's are legal
+ foreach (BigBlock b in stmtList.BigBlocks) {
+ // goto's must reference blocks in enclosing blocks
+ if (b.tc is GotoCmd) {
+ GotoCmd g = (GotoCmd)b.tc;
+ foreach (string/*!*/ lbl in cce.NonNull(g.labelNames)) {
+ Contract.Assert(lbl != null);
+ /*
+ bool found = false;
+ for (StmtList sl = stmtList; sl != null; sl = sl.ParentContext) {
+ if (sl.Labels.Contains(lbl)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ this.errorHandler.SemErr(g.tok, "Error: goto label '" + lbl + "' is undefined or out of reach");
+ }
+ */
+ if (!allLabels.Contains(lbl)) {
+ this.errorHandler.SemErr(g.tok, "Error: goto label '" + lbl + "' is undefined");
+ }
+ }
+ }
+
+ // break labels must refer to an enclosing while statement
+ else if (b.ec is BreakCmd) {
+ BreakCmd bcmd = (BreakCmd)b.ec;
+ Contract.Assert(bcmd.BreakEnclosure == null); // it hasn't been initialized yet
+ bool found = false;
+ for (StmtList sl = stmtList; sl.ParentBigBlock != null; sl = sl.ParentContext) {
+ cce.LoopInvariant(sl != null);
+ BigBlock bb = sl.ParentBigBlock;
+
+ if (bcmd.Label == null) {
+ // a label-less break statement breaks out of the innermost enclosing while statement
+ if (bb.ec is WhileCmd) {
+ bcmd.BreakEnclosure = bb;
+ found = true;
+ break;
+ }
+ } else if (bcmd.Label == bb.LabelName) {
+ // a break statement with a label can break out of both if statements and while statements
+ if (bb.simpleCmds.Count == 0) {
+ // this is a good target: the label refers to the if/while statement
+ bcmd.BreakEnclosure = bb;
+ } else {
+ // the label of bb refers to the first statement of bb, which in which case is a simple statement, not an if/while statement
+ this.errorHandler.SemErr(bcmd.tok, "Error: break label '" + bcmd.Label + "' must designate an enclosing statement");
+ }
+ found = true; // don't look any further, since we've found a matching label
+ break;
+ }
+ }
+ if (!found) {
+ if (bcmd.Label == null) {
+ this.errorHandler.SemErr(bcmd.tok, "Error: break statement is not inside a loop");
+ } else {
+ this.errorHandler.SemErr(bcmd.tok, "Error: break label '" + bcmd.Label + "' must designate an enclosing statement");
+ }
+ }
+ }
+
+ // recurse
+ else if (b.ec is WhileCmd) {
+ WhileCmd wcmd = (WhileCmd)b.ec;
+ CheckLegalLabels(wcmd.Body, stmtList, b);
+ } else {
+ for (IfCmd ifcmd = b.ec as IfCmd; ifcmd != null; ifcmd = ifcmd.elseIf) {
+ CheckLegalLabels(ifcmd.thn, stmtList, b);
+ if (ifcmd.elseBlock != null) {
+ CheckLegalLabels(ifcmd.elseBlock, stmtList, b);
+ }
+ }
+ }
+ }
+ }
+
+ void NameAnonymousBlocks(StmtList stmtList) {
+ Contract.Requires(stmtList != null);
+ foreach (BigBlock b in stmtList.BigBlocks) {
+ if (b.LabelName == null) {
+ b.LabelName = prefix + FreshAnon();
+ }
+ if (b.ec is WhileCmd) {
+ WhileCmd wcmd = (WhileCmd)b.ec;
+ NameAnonymousBlocks(wcmd.Body);
+ } else {
+ for (IfCmd ifcmd = b.ec as IfCmd; ifcmd != null; ifcmd = ifcmd.elseIf) {
+ NameAnonymousBlocks(ifcmd.thn);
+ if (ifcmd.elseBlock != null) {
+ NameAnonymousBlocks(ifcmd.elseBlock);
+ }
+ }
+ }
+ }
+ }
+
+ void RecordSuccessors(StmtList stmtList, BigBlock successor) {
+ Contract.Requires(stmtList != null);
+ for (int i = stmtList.BigBlocks.Count; 0 <= --i; ) {
+ BigBlock big = stmtList.BigBlocks[i];
+ big.successorBigBlock = successor;
+
+ if (big.ec is WhileCmd) {
+ WhileCmd wcmd = (WhileCmd)big.ec;
+ RecordSuccessors(wcmd.Body, big);
+ } else {
+ for (IfCmd ifcmd = big.ec as IfCmd; ifcmd != null; ifcmd = ifcmd.elseIf) {
+ RecordSuccessors(ifcmd.thn, successor);
+ if (ifcmd.elseBlock != null) {
+ RecordSuccessors(ifcmd.elseBlock, successor);
+ }
+ }
+ }
+
+ successor = big;
+ }
+ }
+
+ // If the enclosing context is a loop, then "runOffTheEndLabel" is the loop head label;
+ // otherwise, it is null.
+ void CreateBlocks(StmtList stmtList, string runOffTheEndLabel) {
+ Contract.Requires(stmtList != null);
+ Contract.Requires(blocks != null);
+ List<Cmd> cmdPrefixToApply = stmtList.PrefixCommands;
+
+ int n = stmtList.BigBlocks.Count;
+ foreach (BigBlock b in stmtList.BigBlocks) {
+ n--;
+ Contract.Assert(b.LabelName != null);
+ List<Cmd> theSimpleCmds;
+ if (cmdPrefixToApply == null) {
+ theSimpleCmds = b.simpleCmds;
+ } else {
+ theSimpleCmds = new List<Cmd>();
+ theSimpleCmds.AddRange(cmdPrefixToApply);
+ theSimpleCmds.AddRange(b.simpleCmds);
+ cmdPrefixToApply = null; // now, we've used 'em up
+ }
+
+ if (b.tc != null) {
+ // this BigBlock has the very same components as a Block
+ Contract.Assert(b.ec == null);
+ Block block = new Block(b.tok, b.LabelName, theSimpleCmds, b.tc);
+ blocks.Add(block);
+
+ } else if (b.ec == null) {
+ TransferCmd trCmd;
+ if (n == 0 && runOffTheEndLabel != null) {
+ // goto the given label instead of the textual successor block
+ trCmd = new GotoCmd(stmtList.EndCurly, new List<String> { runOffTheEndLabel });
+ } else {
+ trCmd = GotoSuccessor(stmtList.EndCurly, b);
+ }
+ Block block = new Block(b.tok, b.LabelName, theSimpleCmds, trCmd);
+ blocks.Add(block);
+
+ } else if (b.ec is BreakCmd) {
+ BreakCmd bcmd = (BreakCmd)b.ec;
+ Contract.Assert(bcmd.BreakEnclosure != null);
+ Block block = new Block(b.tok, b.LabelName, theSimpleCmds, GotoSuccessor(b.ec.tok, bcmd.BreakEnclosure));
+ blocks.Add(block);
+
+ } else if (b.ec is WhileCmd) {
+ WhileCmd wcmd = (WhileCmd)b.ec;
+ var a = FreshAnon();
+ string loopHeadLabel = prefix + a + "_LoopHead";
+ string/*!*/ loopBodyLabel = prefix + a + "_LoopBody";
+ string loopDoneLabel = prefix + a + "_LoopDone";
+
+ List<Cmd> ssBody = new List<Cmd>();
+ List<Cmd> ssDone = new List<Cmd>();
+ if (wcmd.Guard != null) {
+ var ac = new AssumeCmd(wcmd.tok, wcmd.Guard);
+ ac.Attributes = new QKeyValue(wcmd.tok, "partition", new List<object>(), null);
+ ssBody.Add(ac);
+
+ ac = new AssumeCmd(wcmd.tok, Expr.Not(wcmd.Guard));
+ ac.Attributes = new QKeyValue(wcmd.tok, "partition", new List<object>(), null);
+ ssDone.Add(ac);
+ }
+
+ // Try to squeeze in ssBody into the first block of wcmd.Body
+ bool bodyGuardTakenCareOf = wcmd.Body.PrefixFirstBlock(ssBody, ref loopBodyLabel);
+
+ // ... goto LoopHead;
+ Block block = new Block(b.tok, b.LabelName, theSimpleCmds, new GotoCmd(wcmd.tok, new List<String> { loopHeadLabel }));
+ blocks.Add(block);
+
+ // LoopHead: assert/assume loop_invariant; goto LoopDone, LoopBody;
+ List<Cmd> ssHead = new List<Cmd>();
+ foreach (PredicateCmd inv in wcmd.Invariants) {
+ ssHead.Add(inv);
+ }
+ block = new Block(wcmd.tok, loopHeadLabel, ssHead, new GotoCmd(wcmd.tok, new List<String> { loopDoneLabel, loopBodyLabel }));
+ blocks.Add(block);
+
+ if (!bodyGuardTakenCareOf) {
+ // LoopBody: assume guard; goto firstLoopBlock;
+ block = new Block(wcmd.tok, loopBodyLabel, ssBody, new GotoCmd(wcmd.tok, new List<String> { wcmd.Body.BigBlocks[0].LabelName }));
+ blocks.Add(block);
+ }
+
+ // recurse to create the blocks for the loop body
+ CreateBlocks(wcmd.Body, loopHeadLabel);
+
+ // LoopDone: assume !guard; goto loopSuccessor;
+ TransferCmd trCmd;
+ if (n == 0 && runOffTheEndLabel != null) {
+ // goto the given label instead of the textual successor block
+ trCmd = new GotoCmd(wcmd.tok, new List<String> { runOffTheEndLabel });
+ } else {
+ trCmd = GotoSuccessor(wcmd.tok, b);
+ }
+ block = new Block(wcmd.tok, loopDoneLabel, ssDone, trCmd);
+ blocks.Add(block);
+
+ } else {
+ IfCmd ifcmd = (IfCmd)b.ec;
+ string predLabel = b.LabelName;
+ List<Cmd> predCmds = theSimpleCmds;
+
+ for (; ifcmd != null; ifcmd = ifcmd.elseIf) {
+ var a = FreshAnon();
+ string thenLabel = prefix + a + "_Then";
+ Contract.Assert(thenLabel != null);
+ string elseLabel = prefix + a + "_Else";
+ Contract.Assert(elseLabel != null);
+
+ List<Cmd> ssThen = new List<Cmd>();
+ List<Cmd> ssElse = new List<Cmd>();
+ if (ifcmd.Guard != null) {
+ var ac = new AssumeCmd(ifcmd.tok, ifcmd.Guard);
+ ac.Attributes = new QKeyValue(ifcmd.tok, "partition", new List<object>(), null);
+ ssThen.Add(ac);
+
+ ac = new AssumeCmd(ifcmd.tok, Expr.Not(ifcmd.Guard));
+ ac.Attributes = new QKeyValue(ifcmd.tok, "partition", new List<object>(), null);
+ ssElse.Add(ac);
+ }
+
+ // Try to squeeze in ssThen/ssElse into the first block of ifcmd.thn/ifcmd.elseBlock
+ bool thenGuardTakenCareOf = ifcmd.thn.PrefixFirstBlock(ssThen, ref thenLabel);
+ bool elseGuardTakenCareOf = false;
+ if (ifcmd.elseBlock != null) {
+ elseGuardTakenCareOf = ifcmd.elseBlock.PrefixFirstBlock(ssElse, ref elseLabel);
+ }
+
+ // ... goto Then, Else;
+ Block block = new Block(b.tok, predLabel, predCmds,
+ new GotoCmd(ifcmd.tok, new List<String> { thenLabel, elseLabel }));
+ blocks.Add(block);
+
+ if (!thenGuardTakenCareOf) {
+ // Then: assume guard; goto firstThenBlock;
+ block = new Block(ifcmd.tok, thenLabel, ssThen, new GotoCmd(ifcmd.tok, new List<String> { ifcmd.thn.BigBlocks[0].LabelName }));
+ blocks.Add(block);
+ }
+
+ // recurse to create the blocks for the then branch
+ CreateBlocks(ifcmd.thn, n == 0 ? runOffTheEndLabel : null);
+
+ if (ifcmd.elseBlock != null) {
+ Contract.Assert(ifcmd.elseIf == null);
+ if (!elseGuardTakenCareOf) {
+ // Else: assume !guard; goto firstElseBlock;
+ block = new Block(ifcmd.tok, elseLabel, ssElse, new GotoCmd(ifcmd.tok, new List<String> { ifcmd.elseBlock.BigBlocks[0].LabelName }));
+ blocks.Add(block);
+ }
+
+ // recurse to create the blocks for the else branch
+ CreateBlocks(ifcmd.elseBlock, n == 0 ? runOffTheEndLabel : null);
+
+ } else if (ifcmd.elseIf != null) {
+ // this is an "else if"
+ predLabel = elseLabel;
+ predCmds = new List<Cmd>();
+ if (ifcmd.Guard != null) {
+ var ac = new AssumeCmd(ifcmd.tok, Expr.Not(ifcmd.Guard));
+ ac.Attributes = new QKeyValue(ifcmd.tok, "partition", new List<object>(), null);
+ predCmds.Add(ac);
+ }
+
+ } else {
+ // no else alternative is specified, so else branch is just "skip"
+ // Else: assume !guard; goto ifSuccessor;
+ TransferCmd trCmd;
+ if (n == 0 && runOffTheEndLabel != null) {
+ // goto the given label instead of the textual successor block
+ trCmd = new GotoCmd(ifcmd.tok, new List<String> { runOffTheEndLabel });
+ } else {
+ trCmd = GotoSuccessor(ifcmd.tok, b);
+ }
+ block = new Block(ifcmd.tok, elseLabel, ssElse, trCmd);
+ blocks.Add(block);
+ }
+ }
+ }
+ }
+ }
+
+ TransferCmd GotoSuccessor(IToken tok, BigBlock b) {
+ Contract.Requires(b != null);
+ Contract.Requires(tok != null);
+ Contract.Ensures(Contract.Result<TransferCmd>() != null);
+ if (b.successorBigBlock != null) {
+ return new GotoCmd(tok, new List<String> { b.successorBigBlock.LabelName });
+ } else {
+ return new ReturnCmd(tok);
+ }
+ }
+ }
+
+ [ContractClass(typeof(StructuredCmdContracts))]
+ public abstract class StructuredCmd {
+ private IToken/*!*/ _tok;
+
+ public IToken/*!*/ tok
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<IToken>() != null);
+ return this._tok;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this._tok = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._tok != null);
+ }
+
+ public StructuredCmd(IToken tok) {
+ Contract.Requires(tok != null);
+ this._tok = tok;
+ }
+
+ public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
+ }
+ [ContractClassFor(typeof(StructuredCmd))]
+ public abstract class StructuredCmdContracts : StructuredCmd {
+ public override void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ throw new NotImplementedException();
+ }
+ public StructuredCmdContracts() :base(null){
+
+ }
+ }
+
+ public class IfCmd : StructuredCmd {
+ public Expr Guard;
+
+ private StmtList/*!*/ _thn;
+
+ public StmtList/*!*/ thn
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<StmtList>() != null);
+ return this._thn;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this._thn = value;
+ }
+ }
+
+ private IfCmd _elseIf;
+
+ public IfCmd elseIf
+ {
+ get
+ {
+ return this._elseIf;
+ }
+ set
+ {
+ Contract.Requires(value == null || this.elseBlock == null);
+ this._elseIf = value;
+ }
+ }
+
+ private StmtList _elseBlock;
+
+ public StmtList elseBlock
+ {
+ get
+ {
+ return this._elseBlock;
+ }
+ set
+ {
+ Contract.Requires(value == null || this.elseIf == null);
+ this._elseBlock = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._thn != null);
+ Contract.Invariant(this._elseIf == null || this._elseBlock == null);
+ }
+
+ public IfCmd(IToken/*!*/ tok, Expr guard, StmtList/*!*/ thn, IfCmd elseIf, StmtList elseBlock)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(thn != null);
+ Contract.Requires(elseIf == null || elseBlock == null);
+ this.Guard = guard;
+ this._thn = thn;
+ this._elseIf = elseIf;
+ this._elseBlock = elseBlock;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ stream.Write(level, "if (");
+ IfCmd/*!*/ ifcmd = this;
+ while (true) {
+ if (ifcmd.Guard == null) {
+ stream.Write("*");
+ } else {
+ ifcmd.Guard.Emit(stream);
+ }
+ stream.WriteLine(")");
+
+ stream.WriteLine(level, "{");
+ ifcmd.thn.Emit(stream, level + 1);
+ stream.WriteLine(level, "}");
+
+ if (ifcmd.elseIf != null) {
+ stream.Write(level, "else if (");
+ ifcmd = ifcmd.elseIf;
+ continue;
+ } else if (ifcmd.elseBlock != null) {
+ stream.WriteLine(level, "else");
+ stream.WriteLine(level, "{");
+ ifcmd.elseBlock.Emit(stream, level + 1);
+ stream.WriteLine(level, "}");
+ }
+ break;
+ }
+ }
+ }
+
+ public class WhileCmd : StructuredCmd {
+ [Peer]
+ public Expr Guard;
+ public List<PredicateCmd/*!*/>/*!*/ Invariants;
+ public StmtList/*!*/ Body;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Body != null);
+ Contract.Invariant(cce.NonNullElements(Invariants));
+ }
+
+
+ public WhileCmd(IToken tok, [Captured] Expr guard, List<PredicateCmd/*!*/>/*!*/ invariants, StmtList/*!*/ body)
+ : base(tok) {
+ Contract.Requires(cce.NonNullElements(invariants));
+ Contract.Requires(body != null);
+ Contract.Requires(tok != null);
+ this.Guard = guard;
+ this.Invariants = invariants;
+ this.Body = body;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ stream.Write(level, "while (");
+ if (Guard == null) {
+ stream.Write("*");
+ } else {
+ Guard.Emit(stream);
+ }
+ stream.WriteLine(")");
+
+ foreach (PredicateCmd inv in Invariants) {
+ if (inv is AssumeCmd) {
+ stream.Write(level + 1, "free invariant ");
+ } else {
+ stream.Write(level + 1, "invariant ");
+ }
+ Cmd.EmitAttributes(stream, inv.Attributes);
+ inv.Expr.Emit(stream);
+ stream.WriteLine(";");
+ }
+
+ stream.WriteLine(level, "{");
+ Body.Emit(stream, level + 1);
+ stream.WriteLine(level, "}");
+ }
+ }
+
+ public class BreakCmd : StructuredCmd {
+ public string Label;
+ public BigBlock BreakEnclosure;
+
+ public BreakCmd(IToken tok, string label)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ this.Label = label;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+
+ if (Label == null) {
+ stream.WriteLine(level, "break;");
+ } else {
+ stream.WriteLine(level, "break {0};", Label);
+ }
+ }
+ }
+
+ //---------------------------------------------------------------------
+ // Block
+ public sealed class Block : Absy {
+ private string/*!*/ label; // Note, Label is mostly readonly, but it can change to the name of a nearby block during block coalescing and empty-block removal
+
+ public string/*!*/ Label
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this.label;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this.label = value;
+ }
+ }
+
+ [Rep]
+ [ElementsPeer]
+ public List<Cmd>/*!*/ cmds;
+
+ public List<Cmd>/*!*/ Cmds
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ return this.cmds;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this.cmds = value;
+ }
+ }
+
+ [Rep] //PM: needed to verify Traverse.Visit
+ public TransferCmd TransferCmd; // maybe null only because we allow deferred initialization (necessary for cyclic structures)
+
+ public byte[] Checksum;
+
+ // Abstract interpretation
+
+ // public bool currentlyTraversed;
+
+ public enum VisitState {
+ ToVisit,
+ BeingVisited,
+ AlreadyVisited
+ }; // used by WidenPoints.Compute
+ public VisitState TraversingStatus;
+
+ public int aiId; // block ID used by the abstract interpreter, which may change these numbers with each AI run
+ public bool widenBlock;
+ public int iterations; // Count the number of time we visited the block during fixpoint computation. Used to decide if we widen or not
+
+ // VC generation and SCC computation
+ public List<Block>/*!*/ Predecessors;
+
+ // This field is used during passification to null-out entries in block2Incartion hashtable early
+ public int succCount;
+
+ private HashSet<Variable/*!*/> _liveVarsBefore;
+
+ public IEnumerable<Variable/*!*/> liveVarsBefore
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Variable/*!*/>>(), true));
+ if (this._liveVarsBefore == null)
+ return null;
+ else
+ return this._liveVarsBefore.AsEnumerable<Variable>();
+ }
+ set
+ {
+ Contract.Requires(cce.NonNullElements(value, true));
+ if (value == null)
+ this._liveVarsBefore = null;
+ else
+ this._liveVarsBefore = new HashSet<Variable>(value);
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this.label != null);
+ Contract.Invariant(this.cmds != null);
+ Contract.Invariant(cce.NonNullElements(this._liveVarsBefore, true));
+ }
+
+ public bool IsLive(Variable v) {
+ Contract.Requires(v != null);
+ if (liveVarsBefore == null)
+ return true;
+ return liveVarsBefore.Contains(v);
+ }
+
+ public Block()
+ : this(Token.NoToken, "", new List<Cmd>(), new ReturnCmd(Token.NoToken)) {
+
+ }
+
+ public Block(IToken tok, string/*!*/ label, List<Cmd>/*!*/ cmds, TransferCmd transferCmd)
+ : base(tok) {
+ Contract.Requires(label != null);
+ Contract.Requires(cmds != null);
+ Contract.Requires(tok != null);
+ this.label = label;
+ this.cmds = cmds;
+ this.TransferCmd = transferCmd;
+ this.Predecessors = new List<Block>();
+ this._liveVarsBefore = null;
+ this.TraversingStatus = VisitState.ToVisit;
+ this.iterations = 0;
+ }
+
+ public void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ stream.WriteLine();
+ stream.WriteLine(
+ this,
+ level,
+ "{0}:{1}",
+ CommandLineOptions.Clo.PrintWithUniqueASTIds ? String.Format("h{0}^^{1}", this.GetHashCode(), this.Label) : this.Label,
+ this.widenBlock ? " // cut point" : "");
+
+ foreach (Cmd/*!*/ c in this.Cmds) {
+ Contract.Assert(c != null);
+ c.Emit(stream, level + 1);
+ }
+ Contract.Assume(this.TransferCmd != null);
+ this.TransferCmd.Emit(stream, level + 1);
+ }
+
+ public void Register(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ rc.AddBlock(this);
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+
+
+ foreach (Cmd/*!*/ c in Cmds) {
+ Contract.Assert(c != null);
+ c.Resolve(rc);
+ }
+ Contract.Assume(this.TransferCmd != null);
+ TransferCmd.Resolve(rc);
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+
+ foreach (Cmd/*!*/ c in Cmds) {
+ Contract.Assert(c != null);
+ c.Typecheck(tc);
+ }
+ Contract.Assume(this.TransferCmd != null);
+ TransferCmd.Typecheck(tc);
+ }
+
+ /// <summary>
+ /// Reset the abstract intepretation state of this block. It does this by putting the iterations to 0 and the pre and post states to null
+ /// </summary>
+ public void ResetAbstractInterpretationState() {
+ // this.currentlyTraversed = false;
+ this.TraversingStatus = VisitState.ToVisit;
+ this.iterations = 0;
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this.Label + (this.widenBlock ? "[w]" : "");
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitBlock(this);
+ }
+ }
+
+ //---------------------------------------------------------------------
+ // Commands
+ [ContractClassFor(typeof(Cmd))]
+ public abstract class CmdContracts : Cmd {
+ public CmdContracts() :base(null){
+
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ throw new NotImplementedException();
+ }
+ public override void AddAssignedVariables(List<Variable> vars) {
+ Contract.Requires(vars != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public static class ChecksumHelper
+ {
+ public static void ComputeChecksums(Cmd cmd, Implementation impl, ISet<Variable> usedVariables, byte[] currentChecksum = null)
+ {
+ if (CommandLineOptions.Clo.VerifySnapshots < 2)
+ {
+ return;
+ }
+
+ if (cmd.IrrelevantForChecksumComputation)
+ {
+ cmd.Checksum = currentChecksum;
+ return;
+ }
+
+ var assumeCmd = cmd as AssumeCmd;
+ if (assumeCmd != null
+ && QKeyValue.FindBoolAttribute(assumeCmd.Attributes, "assumption_variable_initialization"))
+ {
+ // Ignore assumption variable initializations.
+ assumeCmd.Checksum = currentChecksum;
+ return;
+ }
+
+ using (var strWr = new System.IO.StringWriter())
+ using (var tokTxtWr = new TokenTextWriter("<no file>", strWr, false, false))
+ {
+ tokTxtWr.UseForComputingChecksums = true;
+ var havocCmd = cmd as HavocCmd;
+ if (havocCmd != null)
+ {
+ tokTxtWr.Write("havoc ");
+ var relevantVars = havocCmd.Vars.Where(e => usedVariables.Contains(e.Decl) && !e.Decl.Name.StartsWith("a##cached##")).OrderBy(e => e.Name).ToList();
+ relevantVars.Emit(tokTxtWr, true);
+ tokTxtWr.WriteLine(";");
+ }
+ else
+ {
+ cmd.Emit(tokTxtWr, 0);
+ }
+ var md5 = System.Security.Cryptography.MD5.Create();
+ var str = strWr.ToString();
+ if (str.Any())
+ {
+ var data = System.Text.Encoding.UTF8.GetBytes(str);
+ var checksum = md5.ComputeHash(data);
+ currentChecksum = currentChecksum != null ? CombineChecksums(currentChecksum, checksum) : checksum;
+ }
+ cmd.Checksum = currentChecksum;
+ }
+
+ var assertCmd = cmd as AssertCmd;
+ if (assertCmd != null && assertCmd.Checksum != null)
+ {
+ var assertRequiresCmd = assertCmd as AssertRequiresCmd;
+ if (assertRequiresCmd != null)
+ {
+ impl.AddAssertionChecksum(assertRequiresCmd.Checksum);
+ impl.AddAssertionChecksum(assertRequiresCmd.Call.Checksum);
+ assertRequiresCmd.SugaredCmdChecksum = assertRequiresCmd.Call.Checksum;
+ }
+ else
+ {
+ impl.AddAssertionChecksum(assertCmd.Checksum);
+ }
+ }
+
+ var sugaredCmd = cmd as SugaredCmd;
+ if (sugaredCmd != null)
+ {
+ // The checksum of a sugared command should not depend on the desugaring itself.
+ var stateCmd = sugaredCmd.Desugaring as StateCmd;
+ if (stateCmd != null)
+ {
+ foreach (var c in stateCmd.Cmds)
+ {
+ ComputeChecksums(c, impl, usedVariables, currentChecksum);
+ currentChecksum = c.Checksum;
+ if (c.SugaredCmdChecksum == null)
+ {
+ c.SugaredCmdChecksum = cmd.Checksum;
+ }
+ }
+ }
+ else
+ {
+ ComputeChecksums(sugaredCmd.Desugaring, impl, usedVariables, currentChecksum);
+ }
+ }
+ }
+
+ public static byte[] CombineChecksums(byte[] first, byte[] second, bool unordered = false)
+ {
+ Contract.Requires(first != null && (second == null || first.Length == second.Length));
+
+ var result = (byte[])(first.Clone());
+ for (int i = 0; second != null && i < second.Length; i++)
+ {
+ if (unordered)
+ {
+ result[i] += second[i];
+ }
+ else
+ {
+ result[i] = (byte)(result[i] * 31 ^ second[i]);
+ }
+ }
+ return result;
+ }
+ }
+
+ [ContractClass(typeof(CmdContracts))]
+ public abstract class Cmd : Absy {
+ public byte[] Checksum { get; internal set; }
+ public byte[] SugaredCmdChecksum { get; internal set; }
+ public bool IrrelevantForChecksumComputation { get; set; }
+
+ public Cmd(IToken/*!*/ tok)
+ : base(tok) {
+ Contract.Assert(tok != null);
+ }
+ public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
+ public abstract void AddAssignedVariables(List<Variable>/*!*/ vars);
+ public void CheckAssignments(TypecheckingContext tc)
+ {
+ Contract.Requires(tc != null);
+ List<Variable>/*!*/ vars = new List<Variable>();
+ this.AddAssignedVariables(vars);
+ foreach (Variable/*!*/ v in vars)
+ {
+ Contract.Assert(v != null);
+ if (!v.IsMutable)
+ {
+ tc.Error(this, "command assigns to an immutable variable: {0}", v.Name);
+ }
+ else if (!CommandLineOptions.Clo.DoModSetAnalysis && v is GlobalVariable)
+ {
+ if (tc.Yields) {
+ // a yielding procedure is allowed to modify any global variable
+ }
+ else if (tc.Frame == null)
+ {
+ tc.Error(this, "update to a global variable allowed only inside an atomic action of a yielding procedure");
+ }
+ else if (!tc.InFrame(v))
+ {
+ tc.Error(this, "command assigns to a global variable that is not in the enclosing procedure's modifies clause: {0}", v.Name);
+ }
+ }
+ }
+ }
+
+ // Methods to simulate the old SimpleAssignCmd and MapAssignCmd
+ public static AssignCmd SimpleAssign(IToken tok, IdentifierExpr lhs, Expr rhs) {
+ Contract.Requires(rhs != null);
+ Contract.Requires(lhs != null);
+ Contract.Requires(tok != null);
+ Contract.Ensures(Contract.Result<AssignCmd>() != null);
+ List<AssignLhs/*!*/>/*!*/ lhss = new List<AssignLhs/*!*/>();
+ List<Expr/*!*/>/*!*/ rhss = new List<Expr/*!*/>();
+
+ lhss.Add(new SimpleAssignLhs(lhs.tok, lhs));
+ rhss.Add(rhs);
+
+ return new AssignCmd(tok, lhss, rhss);
+ }
+
+ public static AssignCmd/*!*/ MapAssign(IToken tok,
+ IdentifierExpr/*!*/ map,
+ List<Expr>/*!*/ indexes, Expr/*!*/ rhs) {
+
+ Contract.Requires(tok != null);
+ Contract.Requires(map != null);
+ Contract.Requires(indexes != null);
+ Contract.Requires(rhs != null);
+ Contract.Ensures(Contract.Result<AssignCmd>() != null);
+ List<AssignLhs/*!*/>/*!*/ lhss = new List<AssignLhs/*!*/>();
+ List<Expr/*!*/>/*!*/ rhss = new List<Expr/*!*/>();
+ List<Expr/*!*/>/*!*/ indexesList = new List<Expr/*!*/>();
+
+
+
+ foreach (Expr e in indexes)
+ indexesList.Add(cce.NonNull(e));
+
+ lhss.Add(new MapAssignLhs(map.tok,
+ new SimpleAssignLhs(map.tok, map),
+ indexesList));
+ rhss.Add(rhs);
+
+ return new AssignCmd(tok, lhss, rhss);
+ }
+
+ public static AssignCmd/*!*/ MapAssign(IToken tok,
+ IdentifierExpr/*!*/ map,
+ params Expr[]/*!*/ args) {
+ Contract.Requires(tok != null);
+ Contract.Requires(map != null);
+ Contract.Requires(args != null);
+ Contract.Requires(args.Length > 0); // at least the rhs
+ Contract.Requires(Contract.ForAll(args, i => i != null));
+ Contract.Ensures(Contract.Result<AssignCmd>() != null);
+
+ List<AssignLhs/*!*/>/*!*/ lhss = new List<AssignLhs/*!*/>();
+ List<Expr/*!*/>/*!*/ rhss = new List<Expr/*!*/>();
+ List<Expr/*!*/>/*!*/ indexesList = new List<Expr/*!*/>();
+
+ for (int i = 0; i < args.Length - 1; ++i)
+ indexesList.Add(cce.NonNull(args[i]));
+
+ lhss.Add(new MapAssignLhs(map.tok,
+ new SimpleAssignLhs(map.tok, map),
+ indexesList));
+ rhss.Add(cce.NonNull(args[args.Length - 1]));
+
+ return new AssignCmd(tok, lhss, rhss);
+ }
+
+ /// <summary>
+ /// This is a helper routine for printing a linked list of attributes. Each attribute
+ /// is terminated by a space.
+ /// </summary>
+ public static void EmitAttributes(TokenTextWriter stream, QKeyValue attributes) {
+ Contract.Requires(stream != null);
+
+ if (stream.UseForComputingChecksums) { return; }
+
+ for (QKeyValue kv = attributes; kv != null; kv = kv.Next) {
+ kv.Emit(stream);
+ stream.Write(" ");
+ }
+ }
+ public static void ResolveAttributes(QKeyValue attributes, ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ for (QKeyValue kv = attributes; kv != null; kv = kv.Next) {
+ kv.Resolve(rc);
+ }
+ }
+ public static void TypecheckAttributes(QKeyValue attributes, TypecheckingContext tc) {
+ Contract.Requires(tc != null);
+ for (QKeyValue kv = attributes; kv != null; kv = kv.Next) {
+ kv.Typecheck(tc);
+ }
+ }
+
+ [Pure]
+ public override string ToString()
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false , /*pretty=*/ false)) {
+ this.Emit(stream, 0);
+ }
+ return buffer.ToString();
+ }
+ }
+
+ public class YieldCmd : Cmd
+ {
+ public YieldCmd(IToken/*!*/ tok)
+ : base(tok)
+ {
+ Contract.Requires(tok != null);
+ }
+ public override void Emit(TokenTextWriter stream, int level)
+ {
+ //Contract.Requires(stream != null);
+ stream.WriteLine(this, level, "yield;");
+ }
+ public override void Resolve(ResolutionContext rc)
+ {
+ // nothing to resolve
+ }
+ public override void Typecheck(TypecheckingContext tc)
+ {
+ if (!CommandLineOptions.Clo.DoModSetAnalysis && !tc.Yields)
+ {
+ tc.Error(this, "enclosing procedure of a yield command must yield");
+ }
+ }
+ public override void AddAssignedVariables(List<Variable> vars)
+ {
+ // nothing to add
+ }
+ public override Absy StdDispatch(StandardVisitor visitor)
+ {
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitYieldCmd(this);
+ }
+ }
+
+ public class CommentCmd : Cmd // just a convenience for debugging
+ {
+ public readonly string/*!*/ Comment;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Comment != null);
+ }
+
+ public CommentCmd(string c)
+ : base(Token.NoToken) {
+ Contract.Requires(c != null);
+ Comment = c;
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ if (stream.UseForComputingChecksums) { return; }
+
+ if (this.Comment.Contains("\n")) {
+ stream.WriteLine(this, level, "/* {0} */", this.Comment);
+ } else {
+ stream.WriteLine(this, level, "// {0}", this.Comment);
+ }
+ }
+ public override void Resolve(ResolutionContext rc) {
+
+ }
+ public override void AddAssignedVariables(List<Variable> vars) {
+
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+
+
+ return visitor.VisitCommentCmd(this);
+ }
+ }
+
+ // class for parallel assignments, which subsumes both the old
+ // SimpleAssignCmd and the old MapAssignCmd
+ public class AssignCmd : Cmd {
+ private List<AssignLhs/*!*/>/*!*/ _lhss;
+
+ public IList<AssignLhs/*!*/>/*!*/ Lhss {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IList<AssignLhs>>()));
+ Contract.Ensures(Contract.Result<IList<AssignLhs>>().IsReadOnly);
+ return this._lhss.AsReadOnly();
+ }
+ set {
+ Contract.Requires(cce.NonNullElements(value));
+ this._lhss = new List<AssignLhs>(value);
+ }
+ }
+
+ internal void SetLhs(int index, AssignLhs lhs)
+ {
+ Contract.Requires(0 <= index && index < this.Lhss.Count);
+ Contract.Requires(lhs != null);
+ Contract.Ensures(this.Lhss[index] == lhs);
+ this._lhss[index] = lhs;
+ }
+
+ private List<Expr/*!*/>/*!*/ _rhss;
+
+ public IList<Expr/*!*/>/*!*/ Rhss {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IList<Expr>>()));
+ Contract.Ensures(Contract.Result<IList<Expr>>().IsReadOnly);
+ return this._rhss.AsReadOnly();
+ }
+ set {
+ Contract.Requires(cce.NonNullElements(value));
+ this._rhss = new List<Expr>(value);
+ }
+ }
+
+ internal void SetRhs(int index, Expr rhs)
+ {
+ Contract.Requires(0 <= index && index < this.Rhss.Count);
+ Contract.Requires(rhs != null);
+ Contract.Ensures(this.Rhss[index] == rhs);
+ this._rhss[index] = rhs;
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(this._lhss));
+ Contract.Invariant(cce.NonNullElements(this._rhss));
+ }
+
+
+ public AssignCmd(IToken tok, IList<AssignLhs/*!*/>/*!*/ lhss, IList<Expr/*!*/>/*!*/ rhss)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(cce.NonNullElements(rhss));
+ Contract.Requires(cce.NonNullElements(lhss));
+ this._lhss = new List<AssignLhs>(lhss);
+ this._rhss = new List<Expr>(rhss);
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ stream.Write(this, level, "");
+
+ string/*!*/ sep = "";
+ foreach (AssignLhs/*!*/ l in Lhss) {
+ Contract.Assert(l != null);
+ stream.Write(sep);
+ sep = ", ";
+ l.Emit(stream);
+ }
+
+ stream.Write(" := ");
+
+ sep = "";
+ foreach (Expr/*!*/ e in Rhss) {
+ Contract.Assert(e != null);
+ stream.Write(sep);
+ sep = ", ";
+ e.Emit(stream);
+ }
+
+ stream.WriteLine(";");
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+
+ if (Lhss.Count != Rhss.Count)
+ rc.Error(this,
+ "number of left-hand sides does not match number of right-hand sides");
+
+ foreach (AssignLhs/*!*/ e in Lhss) {
+ Contract.Assert(e != null);
+ e.Resolve(rc);
+ }
+ foreach (Expr/*!*/ e in Rhss) {
+ Contract.Assert(e != null);
+ e.Resolve(rc);
+ }
+
+ // check for double occurrences of assigned variables
+ // (could be optimised)
+ for (int i = 0; i < Lhss.Count; ++i) {
+ for (int j = i + 1; j < Lhss.Count; ++j) {
+ if (cce.NonNull(Lhss[i].DeepAssignedVariable).Equals(
+ Lhss[j].DeepAssignedVariable))
+ rc.Error(Lhss[j],
+ "variable {0} is assigned more than once in parallel assignment",
+ Lhss[j].DeepAssignedVariable);
+ }
+ }
+
+ for (int i = 0; i < Lhss.Count; i++)
+ {
+ var lhs = Lhss[i].AsExpr as IdentifierExpr;
+ if (lhs != null && lhs.Decl != null && QKeyValue.FindBoolAttribute(lhs.Decl.Attributes, "assumption"))
+ {
+ var rhs = Rhss[i] as NAryExpr;
+ if (rhs == null
+ || !(rhs.Fun is BinaryOperator)
+ || ((BinaryOperator)(rhs.Fun)).Op != BinaryOperator.Opcode.And
+ || !(rhs.Args[0] is IdentifierExpr)
+ || ((IdentifierExpr)(rhs.Args[0])).Name != lhs.Name)
+ {
+ rc.Error(tok, string.Format("RHS of assignment to assumption variable {0} must match expression \"{0} && <boolean expression>\"", lhs.Name));
+ }
+ else if (rc.HasVariableBeenAssigned(lhs.Decl.Name))
+ {
+ rc.Error(tok, "assumption variable may not be assigned to more than once");
+ }
+ else
+ {
+ rc.MarkVariableAsAssigned(lhs.Decl.Name);
+ }
+ }
+ }
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+
+ foreach (AssignLhs/*!*/ e in Lhss) {
+ Contract.Assert(e != null);
+ e.Typecheck(tc);
+ }
+ foreach (Expr/*!*/ e in Rhss) {
+ Contract.Assert(e != null);
+ e.Typecheck(tc);
+ }
+
+ this.CheckAssignments(tc);
+
+ for (int i = 0; i < Lhss.Count; ++i) {
+ Type ltype = Lhss[i].Type;
+ Type rtype = Rhss[i].Type;
+ if (ltype != null && rtype != null) {
+ // otherwise, there has already been an error when
+ // typechecking the lhs or rhs
+ if (!ltype.Unify(rtype))
+ tc.Error(Lhss[i],
+ "mismatched types in assignment command (cannot assign {0} to {1})",
+ rtype, ltype);
+ }
+ }
+ }
+
+ public override void AddAssignedVariables(List<Variable> vars) {
+
+ foreach (AssignLhs/*!*/ l in Lhss) {
+ Contract.Assert(l != null);
+ vars.Add(l.DeepAssignedVariable);
+ }
+ }
+
+ // transform away the syntactic sugar of map assignments and
+ // determine an equivalent assignment in which all rhs are simple
+ // variables
+ public AssignCmd/*!*/ AsSimpleAssignCmd {
+ get {
+ Contract.Ensures(Contract.Result<AssignCmd>() != null);
+
+ List<AssignLhs/*!*/>/*!*/ newLhss = new List<AssignLhs/*!*/>();
+ List<Expr/*!*/>/*!*/ newRhss = new List<Expr/*!*/>();
+
+ for (int i = 0; i < Lhss.Count; ++i) {
+ IdentifierExpr/*!*/ newLhs;
+ Expr/*!*/ newRhs;
+ Lhss[i].AsSimpleAssignment(Rhss[i], out newLhs, out newRhs);
+ newLhss.Add(new SimpleAssignLhs(Token.NoToken, newLhs));
+ newRhss.Add(newRhs);
+ }
+
+ return new AssignCmd(Token.NoToken, newLhss, newRhss);
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+
+
+ return visitor.VisitAssignCmd(this);
+ }
+ }
+
+ // There are two different kinds of left-hand sides in assignments:
+ // simple variables (identifiers), or locations of a map
+ [ContractClass(typeof(AssignLhsContracts))]
+ public abstract class AssignLhs : Absy {
+ // The type of the lhs is determined during typechecking
+ public abstract Type Type {
+ get;
+ }
+ // Determine the variable that is actually assigned in this lhs
+ public abstract IdentifierExpr/*!*/ DeepAssignedIdentifier {
+ get;
+ }
+ public abstract Variable DeepAssignedVariable {
+ get;
+ }
+
+ public AssignLhs(IToken/*!*/ tok)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ }
+ public abstract void Emit(TokenTextWriter/*!*/ stream);
+
+ public abstract Expr/*!*/ AsExpr {
+ get;
+ }
+
+ // transform away the syntactic sugar of map assignments and
+ // determine an equivalent simple assignment
+ internal abstract void AsSimpleAssignment(Expr/*!*/ rhs,
+ out IdentifierExpr/*!*/ simpleLhs,
+ out Expr/*!*/ simpleRhs);
+ }
+ [ContractClassFor(typeof(AssignLhs))]
+ public abstract class AssignLhsContracts : AssignLhs {
+ public AssignLhsContracts():base(null)
+ {
+
+ }public override IdentifierExpr DeepAssignedIdentifier {
+
+ get {
+ Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
+ throw new NotImplementedException();
+ }
+ }
+ public override Expr AsExpr {
+ get {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ throw new NotImplementedException();
+ }
+
+ }
+ internal override void AsSimpleAssignment(Expr rhs, out IdentifierExpr simpleLhs, out Expr simpleRhs) {
+ Contract.Requires(rhs != null);
+ Contract.Ensures(Contract.ValueAtReturn(out simpleLhs) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out simpleRhs) != null);
+
+ throw new NotImplementedException();
+ }
+ }
+
+ public class SimpleAssignLhs : AssignLhs {
+ public IdentifierExpr/*!*/ AssignedVariable;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AssignedVariable != null);
+ }
+
+
+ public override Type Type {
+ get {
+ return AssignedVariable.Type;
+ }
+ }
+
+ public override IdentifierExpr/*!*/ DeepAssignedIdentifier {
+ get {
+ Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
+ return AssignedVariable;
+ }
+ }
+
+ public override Variable DeepAssignedVariable {
+ get {
+ return AssignedVariable.Decl;
+ }
+ }
+
+ public SimpleAssignLhs(IToken tok, IdentifierExpr assignedVariable)
+ : base(tok) {
+ Contract.Requires(assignedVariable != null);
+ Contract.Requires(tok != null);
+ AssignedVariable = assignedVariable;
+ }
+ public override void Resolve(ResolutionContext rc) {
+
+ AssignedVariable.Resolve(rc);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+
+ AssignedVariable.Typecheck(tc);
+ }
+ public override void Emit(TokenTextWriter stream) {
+
+ AssignedVariable.Emit(stream);
+ }
+ public override Expr/*!*/ AsExpr {
+ get {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+
+ return AssignedVariable;
+ }
+ }
+ internal override void AsSimpleAssignment(Expr rhs,
+ out IdentifierExpr/*!*/ simpleLhs,
+ out Expr/*!*/ simpleRhs) {
+
+
+
+ simpleLhs = AssignedVariable;
+ simpleRhs = rhs;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+
+
+ return visitor.VisitSimpleAssignLhs(this);
+ }
+ }
+
+ // A map-assignment-lhs (m[t1, t2, ...] := ...) is quite similar to
+ // a map select expression, but it is cleaner to keep those two
+ // things separate
+ public class MapAssignLhs : AssignLhs {
+ public AssignLhs/*!*/ Map;
+
+ public List<Expr/*!*/>/*!*/ Indexes;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Map != null);
+ Contract.Invariant(cce.NonNullElements(Indexes));
+ }
+
+
+ // The instantiation of type parameters of the map that is
+ // determined during type checking.
+ public TypeParamInstantiation TypeParameters = null;
+
+ private Type TypeAttr = null;
+
+ public override Type Type {
+ get {
+ return TypeAttr;
+ }
+ }
+
+ public override IdentifierExpr/*!*/ DeepAssignedIdentifier {
+ get {
+ Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
+
+ return Map.DeepAssignedIdentifier;
+ }
+ }
+
+ public override Variable DeepAssignedVariable {
+ get {
+ return Map.DeepAssignedVariable;
+ }
+ }
+
+ public MapAssignLhs(IToken tok, AssignLhs map, List<Expr/*!*/>/*!*/ indexes)
+ : base(tok) {
+ Contract.Requires(map != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(cce.NonNullElements(indexes));
+
+ Map = map;
+ Indexes = indexes;
+ }
+ public override void Resolve(ResolutionContext rc) {
+
+ Map.Resolve(rc);
+ foreach (Expr/*!*/ e in Indexes) {
+ Contract.Assert(e != null);
+ e.Resolve(rc);
+ }
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+
+ Map.Typecheck(tc);
+ foreach (Expr/*!*/ e in Indexes) {
+ Contract.Assert(e != null);
+ e.Typecheck(tc);
+ }
+
+ // we use the same typechecking code as in MapSelect
+ List<Expr>/*!*/ selectArgs = new List<Expr>();
+ foreach (Expr/*!*/ e in Indexes) {
+ Contract.Assert(e != null);
+ selectArgs.Add(e);
+ }
+ TypeParamInstantiation/*!*/ tpInsts;
+ TypeAttr =
+ MapSelect.Typecheck(cce.NonNull(Map.Type), Map,
+ selectArgs, out tpInsts, tc, tok, "map assignment");
+ TypeParameters = tpInsts;
+ }
+ public override void Emit(TokenTextWriter stream) {
+
+ Map.Emit(stream);
+ stream.Write("[");
+ string/*!*/ sep = "";
+ foreach (Expr/*!*/ e in Indexes) {
+ Contract.Assert(e != null);
+ stream.Write(sep);
+ sep = ", ";
+ e.Emit(stream);
+ }
+ stream.Write("]");
+ }
+ public override Expr/*!*/ AsExpr {
+ get {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+
+ NAryExpr/*!*/ res = Expr.Select(Map.AsExpr, Indexes);
+ Contract.Assert(res != null);
+ res.TypeParameters = this.TypeParameters;
+ res.Type = this.Type;
+ return res;
+ }
+ }
+ internal override void AsSimpleAssignment(Expr rhs,
+ out IdentifierExpr/*!*/ simpleLhs,
+ out Expr/*!*/ simpleRhs) { //Contract.Requires(rhs != null);
+ Contract.Ensures(Contract.ValueAtReturn(out simpleLhs) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out simpleRhs) != null);
+
+ NAryExpr/*!*/ newRhs = Expr.Store(Map.AsExpr, Indexes, rhs);
+ Contract.Assert(newRhs != null);
+ newRhs.TypeParameters = this.TypeParameters;
+ newRhs.Type = Map.Type;
+ Map.AsSimpleAssignment(newRhs, out simpleLhs, out simpleRhs);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitMapAssignLhs(this);
+ }
+ }
+
+ /// <summary>
+ /// A StateCmd is like an imperative-let binding around a sequence of commands.
+ /// There is no user syntax for a StateCmd. Instead, a StateCmd is only used
+ /// temporarily during the desugaring phase inside the VC generator.
+ /// </summary>
+ public class StateCmd : Cmd {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._locals != null);
+ Contract.Invariant(this._cmds != null);
+ }
+
+ private List<Variable> _locals;
+
+ public /*readonly, except for the StandardVisitor*/ List<Variable>/*!*/ Locals {
+ get {
+ Contract.Ensures(Contract.Result<List<Variable>>() != null);
+ return this._locals;
+ }
+ internal set {
+ Contract.Requires(value != null);
+ this._locals = value;
+ }
+ }
+
+ private List<Cmd> _cmds;
+
+ public /*readonly, except for the StandardVisitor*/ List<Cmd>/*!*/ Cmds {
+ get {
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ return this._cmds;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._cmds = value;
+ }
+ }
+
+ public StateCmd(IToken tok, List<Variable>/*!*/ locals, List<Cmd>/*!*/ cmds)
+ : base(tok) {
+ Contract.Requires(locals != null);
+ Contract.Requires(cmds != null);
+ Contract.Requires(tok != null);
+ this._locals = locals;
+ this._cmds = cmds;
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.PushVarContext();
+ foreach (Variable/*!*/ v in Locals) {
+ Contract.Assert(v != null);
+ rc.AddVariable(v, false);
+ }
+ foreach (Cmd/*!*/ cmd in Cmds) {
+ Contract.Assert(cmd != null);
+ cmd.Resolve(rc);
+ }
+ rc.PopVarContext();
+ }
+
+ public override void AddAssignedVariables(List<Variable> vars) {
+ //Contract.Requires(vars != null);
+ List<Variable>/*!*/ vs = new List<Variable>();
+ foreach (Cmd/*!*/ cmd in this.Cmds) {
+ Contract.Assert(cmd != null);
+ cmd.AddAssignedVariables(vs);
+ }
+ System.Collections.Hashtable/*!*/ localsSet = new System.Collections.Hashtable();
+ foreach (Variable/*!*/ local in this.Locals) {
+ Contract.Assert(local != null);
+ localsSet[local] = bool.TrueString;
+ }
+ foreach (Variable/*!*/ v in vs) {
+ Contract.Assert(v != null);
+ if (!localsSet.ContainsKey(v)) {
+ vars.Add(v);
+ }
+ }
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ foreach (Cmd/*!*/ cmd in Cmds) {
+ Contract.Assert(cmd != null);
+ cmd.Typecheck(tc);
+ }
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.WriteLine(this, level, "{");
+ foreach (Variable/*!*/ v in Locals) {
+ Contract.Assert(v != null);
+ v.Emit(stream, level + 1);
+ }
+ foreach (Cmd/*!*/ c in Cmds) {
+ Contract.Assert(c != null);
+ c.Emit(stream, level + 1);
+ }
+ stream.WriteLine(level, "}");
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitStateCmd(this);
+ }
+ }
+ [ContractClass(typeof(SugaredCmdContracts))]
+ abstract public class SugaredCmd : Cmd {
+ private Cmd desugaring; // null until desugared
+
+ public SugaredCmd(IToken/*!*/ tok)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ }
+
+ public Cmd/*!*/ Desugaring {
+ get {
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+
+ if (desugaring == null) {
+ desugaring = ComputeDesugaring();
+ }
+ return desugaring;
+ }
+ }
+ /// <summary>
+ /// This method invokes "visitor.Visit" on the desugaring, and then updates the
+ /// desugaring to the result thereof. The method's intended use is for subclasses
+ /// of StandardVisitor that need to also visit the desugaring. Note, since the
+ /// "desugaring" field is updated, this is not an appropriate method to be called
+ /// be a ReadOnlyVisitor; such visitors should instead just call
+ /// visitor.Visit(sugaredCmd.Desugaring).
+ /// </summary>
+ public void VisitDesugaring(StandardVisitor visitor) {
+ Contract.Requires(visitor != null && !(visitor is ReadOnlyVisitor));
+ if (desugaring != null) {
+ desugaring = (Cmd)visitor.Visit(desugaring);
+ }
+ }
+ protected abstract Cmd/*!*/ ComputeDesugaring();
+
+ public void ExtendDesugaring(IEnumerable<Cmd> before, IEnumerable<Cmd> beforePreconditionCheck, IEnumerable<Cmd> after)
+ {
+ var desug = Desugaring;
+ var stCmd = desug as StateCmd;
+ if (stCmd != null)
+ {
+ stCmd.Cmds.InsertRange(0, before);
+ var idx = stCmd.Cmds.FindIndex(c => c is AssertCmd || c is HavocCmd || c is AssumeCmd);
+ if (idx < 0)
+ {
+ idx = 0;
+ }
+ stCmd.Cmds.InsertRange(idx, beforePreconditionCheck);
+ stCmd.Cmds.AddRange(after);
+ }
+ else if (desug != null)
+ {
+ var cmds = new List<Cmd>(before);
+ cmds.Add(desug);
+ cmds.AddRange(after);
+ desugaring = new StateCmd(Token.NoToken, new List<Variable>(), cmds);
+ }
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ if (CommandLineOptions.Clo.PrintDesugarings && !stream.UseForComputingChecksums) {
+ stream.WriteLine(this, level, "/*** desugaring:");
+ Desugaring.Emit(stream, level);
+ stream.WriteLine(level, "**** end desugaring */");
+ }
+ }
+ }
+ [ContractClassFor(typeof(SugaredCmd))]
+ public abstract class SugaredCmdContracts : SugaredCmd {
+ public SugaredCmdContracts() :base(null){
+
+ }
+ protected override Cmd ComputeDesugaring() {
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+
+ public abstract class CallCommonality : SugaredCmd {
+ public QKeyValue Attributes;
+
+ private bool isFree = false;
+ public bool IsFree {
+ get {
+ return isFree;
+ }
+ set {
+ isFree = value;
+ }
+ }
+
+ private bool isAsync = false;
+ public bool IsAsync
+ {
+ get
+ {
+ return isAsync;
+ }
+ set
+ {
+ isAsync = value;
+ }
+ }
+
+ protected CallCommonality(IToken tok, QKeyValue kv)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Attributes = kv;
+ }
+
+ protected enum TempVarKind {
+ Formal,
+ Old,
+ Bound
+ }
+
+ // We have to give the type explicitly, because the type of the formal "likeThisOne" can contain type variables
+ protected Variable CreateTemporaryVariable(List<Variable> tempVars, Variable likeThisOne, Type ty, TempVarKind kind, ref int uniqueId) {
+ Contract.Requires(ty != null);
+ Contract.Requires(likeThisOne != null);
+ Contract.Requires(tempVars != null);
+ Contract.Ensures(Contract.Result<Variable>() != null);
+ string/*!*/ tempNamePrefix;
+ switch (kind) {
+ case TempVarKind.Formal:
+ tempNamePrefix = "formal@";
+ break;
+ case TempVarKind.Old:
+ tempNamePrefix = "old@";
+ break;
+ case TempVarKind.Bound:
+ tempNamePrefix = "forall@";
+ break;
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // unexpected kind
+ }
+ TypedIdent ti = likeThisOne.TypedIdent;
+ // KLM: uniqueId was messing up FixedPointVC for unknown reason.
+ // I reverted this change for FixedPointVC only.
+ int id = CommandLineOptions.Clo.FixedPointEngine != null ? UniqueId : (uniqueId++);
+ TypedIdent newTi = new TypedIdent(ti.tok, "call" + id + tempNamePrefix + ti.Name, ty);
+ Variable/*!*/ v;
+ if (kind == TempVarKind.Bound) {
+ v = new BoundVariable(likeThisOne.tok, newTi);
+ } else {
+ v = new LocalVariable(likeThisOne.tok, newTi);
+ tempVars.Add(v);
+ }
+ return v;
+ }
+ }
+
+ public class ParCallCmd : CallCommonality, IPotentialErrorNode<object, object>
+ {
+ public List<CallCmd> CallCmds;
+ public ParCallCmd(IToken tok, List<CallCmd> callCmds)
+ : base(tok, null)
+ {
+ this.CallCmds = callCmds;
+ }
+ public ParCallCmd(IToken tok, List<CallCmd> callCmds, QKeyValue kv)
+ : base(tok, kv)
+ {
+ this.CallCmds = callCmds;
+ }
+ protected override Cmd ComputeDesugaring()
+ {
+ throw new NotImplementedException();
+ }
+ private object errorData;
+ public object ErrorData
+ {
+ get
+ {
+ return errorData;
+ }
+ set
+ {
+ errorData = value;
+ }
+ }
+ public override void Resolve(ResolutionContext rc)
+ {
+ ResolveAttributes(Attributes, rc);
+ foreach (CallCmd callCmd in CallCmds)
+ {
+ callCmd.Resolve(rc);
+ }
+ HashSet<Variable> parallelCallLhss = new HashSet<Variable>();
+ foreach (CallCmd callCmd in CallCmds)
+ {
+ foreach (IdentifierExpr ie in callCmd.Outs)
+ {
+ if (parallelCallLhss.Contains(ie.Decl))
+ {
+ rc.Error(this, "left-hand side of parallel call command contains variable twice: {0}", ie.Name);
+ }
+ else
+ {
+ parallelCallLhss.Add(ie.Decl);
+ }
+ }
+ }
+ }
+ public override void Typecheck(TypecheckingContext tc)
+ {
+ TypecheckAttributes(Attributes, tc);
+ if (!CommandLineOptions.Clo.DoModSetAnalysis)
+ {
+ if (!tc.Yields)
+ {
+ tc.Error(this, "enclosing procedure of a parallel call must yield");
+ }
+ foreach (CallCmd callCmd in CallCmds)
+ {
+ if (!QKeyValue.FindBoolAttribute(callCmd.Proc.Attributes, "yields"))
+ {
+ tc.Error(callCmd, "target procedure of a parallel call must yield");
+ }
+ }
+ }
+ foreach (CallCmd callCmd in CallCmds)
+ {
+ callCmd.Typecheck(tc);
+ }
+ }
+ public override void AddAssignedVariables(List<Variable> vars)
+ {
+ foreach (CallCmd callCmd in CallCmds)
+ {
+ callCmd.AddAssignedVariables(vars);
+ }
+ }
+ public override Absy StdDispatch(StandardVisitor visitor)
+ {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitParCallCmd(this);
+ }
+ }
+
+ public class CallCmd : CallCommonality, IPotentialErrorNode<object, object>
+ {
+ public string/*!*/ callee { get; set; }
+ public Procedure Proc;
+ public LocalVariable AssignedAssumptionVariable;
+
+ // Element of the following lists can be null, which means that
+ // the call happens with * as these parameters
+ public List<Expr>/*!*/ Ins;
+ public List<IdentifierExpr>/*!*/ Outs;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(callee != null);
+ Contract.Invariant(Ins != null);
+ Contract.Invariant(Outs != null);
+ }
+
+ //public Lattice.Element StateAfterCall;
+
+ // The instantiation of type parameters that is determined during
+ // type checking
+ public TypeParamInstantiation TypeParameters = null;
+
+ // TODO: convert to use generics
+ private object errorData;
+ public object ErrorData {
+ get {
+ return errorData;
+ }
+ set {
+ errorData = value;
+ }
+ }
+ public CallCmd(IToken tok, string callee, List<Expr> ins, List<IdentifierExpr> outs)
+ : base(tok, null) {
+ Contract.Requires(outs != null);
+ Contract.Requires(ins != null);
+ Contract.Requires(callee != null);
+ Contract.Requires(tok != null);
+ this.callee = callee;
+ this.Ins = ins;
+ this.Outs = outs;
+ }
+ public CallCmd(IToken tok, string callee, List<Expr> ins, List<IdentifierExpr> outs, QKeyValue kv)
+ : base(tok, kv) {
+ Contract.Requires(outs != null);
+ Contract.Requires(ins != null);
+ Contract.Requires(callee != null);
+ Contract.Requires(tok != null);
+ this.callee = callee;
+ this.Ins = ins;
+ this.Outs = outs;
+ }
+
+ public CallCmd(IToken tok, string callee, List<Expr> ins, List<IdentifierExpr> outs, QKeyValue kv, bool IsAsync)
+ : base(tok, kv)
+ {
+ Contract.Requires(outs != null);
+ Contract.Requires(ins != null);
+ Contract.Requires(callee != null);
+ Contract.Requires(tok != null);
+ this.callee = callee;
+ this.Ins = ins;
+ this.Outs = outs;
+ this.IsAsync = IsAsync;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "");
+ if (IsFree) {
+ stream.Write("free ");
+ }
+ if (IsAsync) {
+ stream.Write("async ");
+ }
+ stream.Write("call ");
+ EmitAttributes(stream, Attributes);
+ string sep = "";
+ if (Outs.Count > 0) {
+ foreach (Expr arg in Outs) {
+ stream.Write(sep);
+ sep = ", ";
+ if (arg == null) {
+ stream.Write("*");
+ } else {
+ arg.Emit(stream);
+ }
+ }
+ stream.Write(" := ");
+ }
+ stream.Write(TokenTextWriter.SanitizeIdentifier(callee));
+ stream.Write("(");
+ sep = "";
+ foreach (Expr arg in Ins) {
+ stream.Write(sep);
+ sep = ", ";
+ if (arg == null) {
+ stream.Write("*");
+ } else {
+ arg.Emit(stream);
+ }
+ }
+ stream.WriteLine(");");
+ base.Emit(stream, level);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ if (Proc != null) {
+ // already resolved
+ return;
+ }
+ ResolveAttributes(Attributes, rc);
+ Proc = rc.LookUpProcedure(callee) as Procedure;
+ if (Proc == null) {
+ rc.Error(this, "call to undeclared procedure: {0}", callee);
+ }
+ foreach (Expr e in Ins) {
+ if (e != null) {
+ e.Resolve(rc);
+ }
+ }
+ HashSet<Variable> actualOuts = new HashSet<Variable>();
+ foreach (IdentifierExpr ide in Outs) {
+ if (ide != null) {
+ ide.Resolve(rc);
+ if (ide.Decl != null) {
+ if (actualOuts.Contains(ide.Decl)) {
+ rc.Error(this, "left-hand side of call command contains variable twice: {0}", ide.Name);
+ } else {
+ actualOuts.Add(ide.Decl);
+ }
+ }
+ }
+ }
+
+ if (Proc == null)
+ return;
+
+ // first make sure that the right number of parameters is given
+ // (a similar check is in CheckArgumentTypes, but we are not
+ // able to call this method because it cannot cope with Ins/Outs
+ // that are null)
+ if (Ins.Count != Proc.InParams.Count) {
+ rc.Error(this.tok,
+ "wrong number of arguments in call to {0}: {1}",
+ callee, Ins.Count);
+ return;
+ }
+ if (Outs.Count != Proc.OutParams.Count) {
+ rc.Error(this.tok,
+ "wrong number of result variables in call to {0}: {1}",
+ callee, Outs.Count);
+ return;
+ }
+ if (IsAsync) {
+ if (Proc.OutParams.Count > 0) {
+ rc.Error(this.tok, "a procedure called asynchronously can have no output parameters");
+ return;
+ }
+ }
+
+ // Check that type parameters can be determined using the given
+ // actual i/o arguments. This is done already during resolution
+ // because CheckBoundVariableOccurrences needs a resolution
+ // context
+ List<Type>/*!*/ formalInTypes = new List<Type>();
+ List<Type>/*!*/ formalOutTypes = new List<Type>();
+ for (int i = 0; i < Ins.Count; ++i)
+ if (Ins[i] != null)
+ formalInTypes.Add(cce.NonNull(Proc.InParams[i]).TypedIdent.Type);
+ for (int i = 0; i < Outs.Count; ++i)
+ if (Outs[i] != null)
+ formalOutTypes.Add(cce.NonNull(Proc.OutParams[i]).TypedIdent.Type);
+
+ // we need to bind the type parameters for this
+ // (this is expected by CheckBoundVariableOccurrences)
+ int previousTypeBinderState = rc.TypeBinderState;
+ try {
+ foreach (TypeVariable/*!*/ v in Proc.TypeParameters) {
+ Contract.Assert(v != null);
+ rc.AddTypeBinder(v);
+ }
+ Type.CheckBoundVariableOccurrences(Proc.TypeParameters,
+ formalInTypes, formalOutTypes,
+ this.tok, "types of given arguments",
+ rc);
+ } finally {
+ rc.TypeBinderState = previousTypeBinderState;
+ }
+
+ var id = QKeyValue.FindStringAttribute(Attributes, "id");
+ if (id != null)
+ {
+ rc.AddStatementId(tok, id);
+ }
+ }
+
+ public override void AddAssignedVariables(List<Variable> vars) {
+ if (this.IsAsync)
+ return;
+ foreach (IdentifierExpr e in Outs) {
+ if (e != null) {
+ vars.Add(e.Decl);
+ }
+ }
+ Contract.Assume(this.Proc != null);
+ foreach (IdentifierExpr/*!*/ e in this.Proc.Modifies) {
+ Contract.Assert(e != null);
+ vars.Add(e.Decl);
+ }
+ if (AssignedAssumptionVariable != null)
+ {
+ vars.Add(AssignedAssumptionVariable);
+ }
+ }
+
+ public override void Typecheck(TypecheckingContext tc)
+ {
+ //Contract.Requires(tc != null);
+ Contract.Assume(this.Proc != null); // we assume the CallCmd has been successfully resolved before calling this Typecheck method
+
+ TypecheckAttributes(Attributes, tc);
+
+ // typecheck in-parameters
+ foreach (Expr e in Ins)
+ if (e != null)
+ e.Typecheck(tc);
+ foreach (Expr e in Outs)
+ if (e != null)
+ e.Typecheck(tc);
+ this.CheckAssignments(tc);
+
+ List<Type>/*!*/ formalInTypes = new List<Type>();
+ List<Type>/*!*/ formalOutTypes = new List<Type>();
+ List<Expr>/*!*/ actualIns = new List<Expr>();
+ List<IdentifierExpr>/*!*/ actualOuts = new List<IdentifierExpr>();
+ for (int i = 0; i < Ins.Count; ++i)
+ {
+ if (Ins[i] != null)
+ {
+ formalInTypes.Add(cce.NonNull(Proc.InParams[i]).TypedIdent.Type);
+ actualIns.Add(Ins[i]);
+ }
+ }
+ for (int i = 0; i < Outs.Count; ++i)
+ {
+ if (Outs[i] != null)
+ {
+ formalOutTypes.Add(cce.NonNull(Proc.OutParams[i]).TypedIdent.Type);
+ actualOuts.Add(Outs[i]);
+ }
+ }
+
+ // match actuals with formals
+ List<Type/*!*/>/*!*/ actualTypeParams;
+ Type.CheckArgumentTypes(Proc.TypeParameters,
+ out actualTypeParams,
+ formalInTypes, actualIns,
+ formalOutTypes, actualOuts,
+ this.tok,
+ "call to " + callee,
+ tc);
+ Contract.Assert(cce.NonNullElements(actualTypeParams));
+ TypeParameters = SimpleTypeParamInstantiation.From(Proc.TypeParameters,
+ actualTypeParams);
+
+ if (!CommandLineOptions.Clo.DoModSetAnalysis && IsAsync)
+ {
+ if (!tc.Yields)
+ {
+ tc.Error(this, "enclosing procedure of an async call must yield");
+ }
+ if (!QKeyValue.FindBoolAttribute(Proc.Attributes, "yields"))
+ {
+ tc.Error(this, "target procedure of an async call must yield");
+ }
+ }
+ }
+
+ private IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ TypeParamSubstitution() {
+ Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
+ Contract.Assume(TypeParameters != null);
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ res = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ foreach (TypeVariable/*!*/ v in TypeParameters.FormalTypeParams) {
+ Contract.Assert(v != null);
+ res.Add(v, TypeParameters[v]);
+ }
+ return res;
+ }
+
+ protected override Cmd ComputeDesugaring() {
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+
+ int uniqueId = 0;
+ List<Cmd> newBlockBody = new List<Cmd>();
+ Dictionary<Variable, Expr> substMap = new Dictionary<Variable, Expr>();
+ Dictionary<Variable, Expr> substMapOld = new Dictionary<Variable, Expr>();
+ Dictionary<Variable, Expr> substMapBound = new Dictionary<Variable, Expr>();
+ List<Variable>/*!*/ tempVars = new List<Variable>();
+
+ // proc P(ins) returns (outs)
+ // requires Pre
+ // //modifies frame
+ // ensures Post
+ //
+ // call aouts := P(ains)
+
+ // ins : formal in parameters of procedure
+ // frame : a list of global variables from the modifies clause
+ // outs : formal out parameters of procedure
+ // ains : actual in arguments passed to call
+ // aouts : actual variables assigned to from call
+ // cins : new variables created just for this call, one per ains
+ // cframe : new variables created just for this call, to keep track of OLD values
+ // couts : new variables created just for this call, one per aouts
+ // WildcardVars : new variables created just for this call, one per null in ains
+
+ #region Create cins; each one is an incarnation of the corresponding in parameter
+ List<Variable>/*!*/ cins = new List<Variable>();
+ List<Variable> wildcardVars = new List<Variable>();
+ Contract.Assume(this.Proc != null);
+ for (int i = 0; i < this.Proc.InParams.Count; ++i) {
+ Variable/*!*/ param = cce.NonNull(this.Proc.InParams[i]);
+ bool isWildcard = this.Ins[i] == null;
+
+ Type/*!*/ actualType;
+ if (isWildcard)
+ actualType = param.TypedIdent.Type.Substitute(TypeParamSubstitution());
+ else
+ // during type checking, we have ensured that the type of the actual
+ // parameter Ins[i] is correct, so we can use it here
+ actualType = cce.NonNull(cce.NonNull(Ins[i]).Type);
+
+ Variable cin = CreateTemporaryVariable(tempVars, param, actualType,
+ TempVarKind.Formal, ref uniqueId);
+ cins.Add(cin);
+ IdentifierExpr ie = new IdentifierExpr(cin.tok, cin);
+ substMap.Add(param, ie);
+ if (isWildcard) {
+ cin = CreateTemporaryVariable(tempVars, param,
+ actualType, TempVarKind.Bound, ref uniqueId);
+ wildcardVars.Add(cin);
+ ie = new IdentifierExpr(cin.tok, cin);
+ }
+ substMapBound.Add(param, ie);
+ }
+ #endregion
+ #region call aouts := P(ains) becomes: (open outlining one level to see)
+ #region cins := ains (or havoc cin when ain is null)
+ for (int i = 0, n = this.Ins.Count; i < n; i++) {
+ IdentifierExpr/*!*/ cin_exp = new IdentifierExpr(cce.NonNull(cins[i]).tok, cce.NonNull(cins[i]));
+ Contract.Assert(cin_exp != null);
+ if (this.Ins[i] != null) {
+ AssignCmd assign = Cmd.SimpleAssign(Token.NoToken, cin_exp, cce.NonNull(this.Ins[i]));
+ newBlockBody.Add(assign);
+ } else {
+ List<IdentifierExpr>/*!*/ ies = new List<IdentifierExpr>();
+ ies.Add(cin_exp);
+ HavocCmd havoc = new HavocCmd(Token.NoToken, ies);
+ newBlockBody.Add(havoc);
+ }
+ }
+ #endregion
+
+ #region assert (exists wildcardVars :: Pre[ins := cins])
+ Substitution s = Substituter.SubstitutionFromHashtable(substMapBound);
+ bool hasWildcard = (wildcardVars.Count != 0);
+ Expr preConjunction = null;
+ for (int i = 0; i < this.Proc.Requires.Count; i++) {
+ Requires/*!*/ req = cce.NonNull(this.Proc.Requires[i]);
+ if (!req.Free && !IsFree) {
+ if (hasWildcard) {
+ Expr pre = Substituter.Apply(s, req.Condition);
+ if (preConjunction == null) {
+ preConjunction = pre;
+ } else {
+ preConjunction = Expr.And(preConjunction, pre);
+ }
+ } else {
+ Requires/*!*/ reqCopy = (Requires/*!*/)cce.NonNull(req.Clone());
+ reqCopy.Condition = Substituter.Apply(s, req.Condition);
+ AssertCmd/*!*/ a = new AssertRequiresCmd(this, reqCopy);
+ Contract.Assert(a != null);
+ if (Attributes != null)
+ {
+ // Inherit attributes of call.
+ var attrCopy = (QKeyValue)cce.NonNull(Attributes.Clone());
+ attrCopy = Substituter.Apply(s, attrCopy);
+ a.Attributes = attrCopy;
+ }
+ a.ErrorDataEnhanced = reqCopy.ErrorDataEnhanced;
+ newBlockBody.Add(a);
+ }
+ }
+ else if (CommandLineOptions.Clo.StratifiedInlining > 0)
+ {
+ // inject free requires as assume statements at the call site
+ AssumeCmd/*!*/ a = new AssumeCmd(req.tok, Substituter.Apply(s, req.Condition));
+ Contract.Assert(a != null);
+ newBlockBody.Add(a);
+ }
+ }
+ if (hasWildcard) {
+ if (preConjunction == null) {
+ preConjunction = Expr.True;
+ }
+ Expr/*!*/ expr = new ExistsExpr(tok, wildcardVars, preConjunction);
+ Contract.Assert(expr != null);
+ AssertCmd/*!*/ a = new AssertCmd(tok, expr);
+ Contract.Assert(a != null);
+ if (Attributes != null)
+ {
+ // Inherit attributes of call.
+ var attrCopy = (QKeyValue)cce.NonNull(Attributes.Clone());
+ attrCopy = Substituter.Apply(s, attrCopy);
+ a.Attributes = attrCopy;
+ }
+ a.ErrorDataEnhanced = AssertCmd.GenerateBoundVarMiningStrategy(expr);
+ newBlockBody.Add(a);
+ }
+ #endregion
+
+ #region assume Pre[ins := cins] with formal paramters
+ if (hasWildcard) {
+ s = Substituter.SubstitutionFromHashtable(substMap);
+ for (int i = 0; i < this.Proc.Requires.Count; i++) {
+ Requires/*!*/ req = cce.NonNull(this.Proc.Requires[i]);
+ if (!req.Free) {
+ Requires/*!*/ reqCopy = (Requires/*!*/)cce.NonNull(req.Clone());
+ reqCopy.Condition = Substituter.Apply(s, req.Condition);
+ AssumeCmd/*!*/ a = new AssumeCmd(tok, reqCopy.Condition);
+ Contract.Assert(a != null);
+ newBlockBody.Add(a);
+ }
+ }
+ }
+ #endregion
+
+ #region cframe := frame (to hold onto frame values in case they are referred to in the postcondition)
+ List<IdentifierExpr> havocVarExprs = new List<IdentifierExpr>();
+
+ foreach (IdentifierExpr/*!*/ f in this.Proc.Modifies) {
+ Contract.Assert(f != null);
+ Contract.Assume(f.Decl != null);
+ Contract.Assert(f.Type != null);
+ Variable v = CreateTemporaryVariable(tempVars, f.Decl, f.Type, TempVarKind.Old, ref uniqueId);
+ IdentifierExpr v_exp = new IdentifierExpr(v.tok, v);
+ substMapOld.Add(f.Decl, v_exp); // this assumes no duplicates in this.Proc.Modifies
+ AssignCmd assign = Cmd.SimpleAssign(f.tok, v_exp, f);
+ newBlockBody.Add(assign);
+
+ // fra
+ if (!havocVarExprs.Contains(f))
+ havocVarExprs.Add(f);
+ }
+ #endregion
+ #region Create couts
+ List<Variable>/*!*/ couts = new List<Variable>();
+ for (int i = 0; i < this.Proc.OutParams.Count; ++i) {
+ Variable/*!*/ param = cce.NonNull(this.Proc.OutParams[i]);
+ bool isWildcard = this.Outs[i] == null;
+
+ Type/*!*/ actualType;
+ if (isWildcard)
+ actualType = param.TypedIdent.Type.Substitute(TypeParamSubstitution());
+ else
+ // during type checking, we have ensured that the type of the actual
+ // out parameter Outs[i] is correct, so we can use it here
+ actualType = cce.NonNull(cce.NonNull(Outs[i]).Type);
+
+ Variable cout = CreateTemporaryVariable(tempVars, param, actualType,
+ TempVarKind.Formal, ref uniqueId);
+ couts.Add(cout);
+ IdentifierExpr ie = new IdentifierExpr(cout.tok, cout);
+ substMap.Add(param, ie);
+
+ if (!havocVarExprs.Contains(ie))
+ havocVarExprs.Add(ie);
+ }
+ // add the where clauses, now that we have the entire substitution map
+ foreach (Variable/*!*/ param in this.Proc.OutParams) {
+ Contract.Assert(param != null);
+ Expr w = param.TypedIdent.WhereExpr;
+ if (w != null) {
+ IdentifierExpr ie = (IdentifierExpr/*!*/)cce.NonNull(substMap[param]);
+ Contract.Assert(ie.Decl != null);
+ ie.Decl.TypedIdent.WhereExpr = Substituter.Apply(Substituter.SubstitutionFromHashtable(substMap), w);
+ }
+ }
+ #endregion
+
+ #region havoc frame, couts
+ // pass on this's token
+ HavocCmd hc = new HavocCmd(this.tok, havocVarExprs);
+ newBlockBody.Add(hc);
+ #endregion
+
+ #region assume Post[ins, outs, old(frame) := cins, couts, cframe]
+ calleeSubstitution = Substituter.SubstitutionFromHashtable(substMap, true, Proc);
+ calleeSubstitutionOld = Substituter.SubstitutionFromHashtable(substMapOld, true, Proc);
+ foreach (Ensures/*!*/ e in this.Proc.Ensures) {
+ Contract.Assert(e != null);
+ Expr copy = Substituter.ApplyReplacingOldExprs(calleeSubstitution, calleeSubstitutionOld, e.Condition);
+ AssumeCmd assume = new AssumeCmd(this.tok, copy);
+ #region stratified inlining support
+ if (QKeyValue.FindBoolAttribute(e.Attributes, "si_fcall"))
+ {
+ assume.Attributes = Attributes;
+ }
+ if (QKeyValue.FindBoolAttribute(e.Attributes, "candidate"))
+ {
+ assume.Attributes = new QKeyValue(Token.NoToken, "candidate", new List<object>(), assume.Attributes);
+ assume.Attributes.AddParam(this.callee);
+ }
+ #endregion
+ newBlockBody.Add(assume);
+ }
+ #endregion
+
+ #region aouts := couts
+ for (int i = 0, n = this.Outs.Count; i < n; i++) {
+ if (this.Outs[i] != null) {
+ Variable/*!*/ param_i = cce.NonNull(this.Proc.OutParams[i]);
+ Expr/*!*/ cout_exp = new IdentifierExpr(cce.NonNull(couts[i]).tok, cce.NonNull(couts[i]));
+ Contract.Assert(cout_exp != null);
+ AssignCmd assign = Cmd.SimpleAssign(param_i.tok, cce.NonNull(this.Outs[i]), cout_exp);
+ newBlockBody.Add(assign);
+ }
+ }
+ #endregion
+ #endregion
+
+ return new StateCmd(this.tok, tempVars, newBlockBody);
+ }
+
+ class NameEqualityComparer : EqualityComparer<IdentifierExpr>
+ {
+ public override bool Equals(IdentifierExpr x, IdentifierExpr y)
+ {
+ return x.Name.Equals(y.Name);
+ }
+
+ public override int GetHashCode(IdentifierExpr obj)
+ {
+ return obj.Name.GetHashCode();
+ }
+ }
+
+ NameEqualityComparer comparer = new NameEqualityComparer();
+
+ public Substitution calleeSubstitution;
+ public Substitution calleeSubstitutionOld;
+
+ public IEnumerable<IdentifierExpr> UnmodifiedBefore(Procedure oldProcedure)
+ {
+ Contract.Requires(oldProcedure != null);
+
+ return Proc.Modifies.Except(oldProcedure.Modifies, comparer).Select(e => new IdentifierExpr(Token.NoToken, e.Decl));
+ }
+
+ public IEnumerable<IdentifierExpr> ModifiedBefore(Procedure oldProcedure)
+ {
+ Contract.Requires(oldProcedure != null);
+
+ return oldProcedure.Modifies.Except(Proc.Modifies, comparer).Select(e => new IdentifierExpr(Token.NoToken, e.Decl));
+ }
+
+ public Expr Postcondition(Procedure procedure, List<Expr> modifies, Dictionary<Variable, Expr> oldSubst, Program program, Func<Expr, Expr> extract)
+ {
+ Contract.Requires(calleeSubstitution != null && calleeSubstitutionOld != null && modifies != null && oldSubst != null && program != null && extract != null);
+
+ Substitution substOldCombined = v => { Expr s; if (oldSubst.TryGetValue(v, out s)) { return s; } return calleeSubstitutionOld(v); };
+
+ var clauses = procedure.Ensures.Select(e => Substituter.FunctionCallReresolvingApplyReplacingOldExprs(calleeSubstitution, substOldCombined, e.Condition, program)).Concat(modifies);
+ // TODO(wuestholz): Try extracting a function for each clause:
+ // return Conjunction(clauses.Select(c => extract(c)));
+ var conj = Expr.And(clauses, true);
+ return conj != null ? extract(conj) : conj;
+ }
+
+ public Expr CheckedPrecondition(Procedure procedure, Program program, Func<Expr, Expr> extract)
+ {
+ Contract.Requires(calleeSubstitution != null && calleeSubstitutionOld != null && program != null && extract != null);
+
+ var clauses = procedure.Requires.Where(r => !r.Free).Select(r => Substituter.FunctionCallReresolvingApplyReplacingOldExprs(calleeSubstitution, calleeSubstitutionOld, r.Condition, program));
+ // TODO(wuestholz): Try extracting a function for each clause:
+ // return Conjunction(clauses.Select(c => extract(c)));
+ var conj = Expr.And(clauses, true);
+ return conj != null ? extract(conj) : conj;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitCallCmd(this);
+ }
+ }
+
+ public abstract class PredicateCmd : Cmd {
+ public QKeyValue Attributes;
+ public /*readonly--except in StandardVisitor*/ Expr/*!*/ Expr;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Expr != null);
+ }
+
+ public PredicateCmd(IToken/*!*/ tok, Expr/*!*/ expr)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ Expr = expr;
+ }
+ public PredicateCmd(IToken/*!*/ tok, Expr/*!*/ expr, QKeyValue kv)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ Expr = expr;
+ Attributes = kv;
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Expr.Resolve(rc);
+
+ var id = QKeyValue.FindStringAttribute(Attributes, "id");
+ if (id != null)
+ {
+ rc.AddStatementId(tok, id);
+ }
+ }
+ public override void AddAssignedVariables(List<Variable> vars) {
+ //Contract.Requires(vars != null);
+ }
+ }
+
+ public abstract class MiningStrategy {
+ // abstract class to bind all MiningStrategys, i.e., all types of enhanced error data
+ // types together
+ }
+
+ public class ListOfMiningStrategies : MiningStrategy {
+
+ private List<MiningStrategy>/*!*/ _msList;
+
+ public List<MiningStrategy>/*!*/ msList
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<List<MiningStrategy>>() != null);
+ return this._msList;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this._msList = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._msList != null);
+ }
+
+ public ListOfMiningStrategies(List<MiningStrategy> l) {
+ Contract.Requires(l != null);
+ this._msList = l;
+ }
+ }
+
+ public class EEDTemplate : MiningStrategy {
+ private string/*!*/ _reason;
+ public string/*!*/ reason
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this._reason;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this._reason = value;
+ }
+ }
+
+ private List<Expr/*!*/>/*!*/ exprList;
+ public IEnumerable<Expr> Expressions
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Expr>>()));
+ return this.exprList.AsReadOnly();
+ }
+ set
+ {
+ Contract.Requires(cce.NonNullElements(value));
+ this.exprList = new List<Expr>(value);
+ }
+ }
+
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._reason != null);
+ Contract.Invariant(cce.NonNullElements(this.exprList));
+ }
+
+ public EEDTemplate(string reason, List<Expr/*!*/>/*!*/ exprList) {
+ Contract.Requires(reason != null);
+ Contract.Requires(cce.NonNullElements(exprList));
+ this._reason = reason;
+ this.exprList = exprList;
+ }
+ }
+
+ public class AssertCmd : PredicateCmd, IPotentialErrorNode<object, object>
+ {
+ public Expr OrigExpr;
+ public Dictionary<Variable, Expr> IncarnationMap;
+
+ Expr verifiedUnder;
+ public Expr VerifiedUnder
+ {
+ get
+ {
+ if (verifiedUnder != null)
+ {
+ return verifiedUnder;
+ }
+ verifiedUnder = QKeyValue.FindExprAttribute(Attributes, "verified_under");
+ return verifiedUnder;
+ }
+ }
+
+ public void MarkAsVerifiedUnder(Expr expr)
+ {
+ Attributes = new QKeyValue(tok, "verified_under", new List<object> { expr }, Attributes);
+ verifiedUnder = expr;
+ }
+
+ // TODO: convert to use generics
+ private object errorData;
+ public object ErrorData {
+ get {
+ return errorData;
+ }
+ set {
+ errorData = value;
+ }
+ }
+
+ public string ErrorMessage {
+ get {
+ return QKeyValue.FindStringAttribute(Attributes, "msg");
+ }
+ }
+
+ private MiningStrategy errorDataEnhanced;
+ public MiningStrategy ErrorDataEnhanced {
+ get {
+ return errorDataEnhanced;
+ }
+ set {
+ errorDataEnhanced = value;
+ }
+ }
+
+ public AssertCmd(IToken/*!*/ tok, Expr/*!*/ expr)
+ : base(tok, expr) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ errorDataEnhanced = GenerateBoundVarMiningStrategy(expr);
+ }
+
+ public AssertCmd(IToken/*!*/ tok, Expr/*!*/ expr, QKeyValue kv)
+ : base(tok, expr, kv) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ errorDataEnhanced = GenerateBoundVarMiningStrategy(expr);
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "assert ");
+ EmitAttributes(stream, Attributes);
+ this.Expr.Emit(stream);
+ stream.WriteLine(";");
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ ResolveAttributes(Attributes, rc);
+ base.Resolve(rc);
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ TypecheckAttributes(Attributes, tc);
+ Expr.Typecheck(tc);
+ Contract.Assert(Expr.Type != null); // follows from Expr.Typecheck postcondition
+ if (!Expr.Type.Unify(Type.Bool)) {
+ tc.Error(this, "an asserted expression must be of type bool (got: {0})", Expr.Type);
+ }
+ }
+
+ public static MiningStrategy GenerateBoundVarMiningStrategy(Expr expr) {
+ Contract.Requires(expr != null);
+ List<MiningStrategy> l = new List<MiningStrategy>();
+ if (expr != null) {
+ l = GenerateBoundVarListForMining(expr, l);
+ }
+ return new ListOfMiningStrategies(l);
+ }
+
+ public static List<MiningStrategy>/*!*/ GenerateBoundVarListForMining(Expr expr, List<MiningStrategy> l) {
+ Contract.Requires(l != null);
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<List<MiningStrategy>>() != null);
+
+ // go through the origExpr and identify all bound variables in the AST.
+ if (expr is LiteralExpr || expr is IdentifierExpr) {
+ //end recursion
+ } else if (expr is NAryExpr) {
+ NAryExpr e = (NAryExpr)expr;
+ foreach (Expr/*!*/ arg in e.Args) {
+ Contract.Assert(arg != null);
+ l = GenerateBoundVarListForMining(arg, l);
+ }
+ } else if (expr is OldExpr) {
+ OldExpr e = (OldExpr)expr;
+ l = GenerateBoundVarListForMining(e.Expr, l);
+ } else if (expr is QuantifierExpr) {
+ QuantifierExpr qe = (QuantifierExpr)expr;
+ List<Variable> vs = qe.Dummies;
+ foreach (Variable/*!*/ x in vs) {
+ Contract.Assert(x != null);
+ string name = x.Name;
+ if (name.StartsWith("^")) {
+ name = name.Substring(1);
+ List<Expr> exprList = new List<Expr>();
+ exprList.Add(new IdentifierExpr(Token.NoToken, x.ToString(), x.TypedIdent.Type));
+ MiningStrategy eed = new EEDTemplate("The bound variable " + name + " has the value {0}.", exprList);
+ l.Add(eed);
+ }
+ }
+ l = GenerateBoundVarListForMining(qe.Body, l);
+ }
+ return l;
+ }
+
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitAssertCmd(this);
+ }
+ }
+
+ // An AssertCmd that is a loop invariant check before the loop iteration starts
+ public class LoopInitAssertCmd : AssertCmd {
+ public LoopInitAssertCmd(IToken/*!*/ tok, Expr/*!*/ expr)
+ : base(tok, expr) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ }
+ }
+
+ // An AssertCmd that is a loop invariant check to maintain the invariant after iteration
+ public class LoopInvMaintainedAssertCmd : AssertCmd {
+ public LoopInvMaintainedAssertCmd(IToken/*!*/ tok, Expr/*!*/ expr)
+ : base(tok, expr) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ }
+ }
+
+ /// <summary>
+ /// An AssertCmd that is introduced in translation from the requires on a call.
+ /// </summary>
+ public class AssertRequiresCmd : AssertCmd {
+ public CallCmd/*!*/ Call;
+ public Requires/*!*/ Requires;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Call != null);
+ Contract.Invariant(Requires != null);
+ }
+
+
+ public AssertRequiresCmd(CallCmd/*!*/ call, Requires/*!*/ requires)
+ : base(call.tok, requires.Condition) {
+ Contract.Requires(call != null);
+ Contract.Requires(requires != null);
+ this.Call = call;
+ this.Requires = requires;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitAssertRequiresCmd(this);
+ }
+ }
+
+ /// <summary>
+ /// An AssertCmd that is introduced in translation from an ensures
+ /// declaration.
+ /// </summary>
+ public class AssertEnsuresCmd : AssertCmd {
+ public Ensures/*!*/ Ensures;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Ensures != null);
+ }
+
+ public AssertEnsuresCmd(Ensures/*!*/ ens)
+ : base(ens.tok, ens.Condition) {
+ Contract.Requires(ens != null);
+ this.Ensures = ens;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitAssertEnsuresCmd(this);
+ }
+ }
+
+ public class AssumeCmd : PredicateCmd {
+ public AssumeCmd(IToken/*!*/ tok, Expr/*!*/ expr)
+ : base(tok, expr) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ }
+ public AssumeCmd(IToken/*!*/ tok, Expr/*!*/ expr, QKeyValue kv)
+ : base(tok, expr, kv) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "assume ");
+ EmitAttributes(stream, Attributes);
+ this.Expr.Emit(stream);
+ stream.WriteLine(";");
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ ResolveAttributes(Attributes, rc);
+ base.Resolve(rc);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ TypecheckAttributes(Attributes, tc);
+ Expr.Typecheck(tc);
+ Contract.Assert(Expr.Type != null); // follows from Expr.Typecheck postcondition
+ if (!Expr.Type.Unify(Type.Bool)) {
+ tc.Error(this, "an assumed expression must be of type bool (got: {0})", Expr.Type);
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitAssumeCmd(this);
+ }
+ }
+
+ public class ReturnExprCmd : ReturnCmd {
+ public Expr/*!*/ Expr;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Expr != null);
+ }
+
+ public ReturnExprCmd(IToken/*!*/ tok, Expr/*!*/ expr)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ Expr = expr;
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "return ");
+ this.Expr.Emit(stream);
+ stream.WriteLine(";");
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ Expr.Typecheck(tc);
+ Contract.Assert(Expr.Type != null); // follows from Expr.Typecheck postcondition
+ if (!Expr.Type.Unify(Type.Bool)) {
+ tc.Error(this, "a return expression must be of type bool (got: {0})", Expr.Type);
+ }
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Expr.Resolve(rc);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitReturnExprCmd(this);
+ }
+ }
+
+ public class HavocCmd : Cmd {
+ private List<IdentifierExpr>/*!*/ _vars;
+
+ public List<IdentifierExpr>/*!*/ Vars {
+ get {
+ Contract.Ensures(Contract.Result<List<IdentifierExpr>>() != null);
+ return this._vars;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._vars = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._vars != null);
+ }
+
+ public HavocCmd(IToken/*!*/ tok, List<IdentifierExpr>/*!*/ vars)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(vars != null);
+ this._vars = vars;
+ }
+
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, level, "havoc ");
+ Vars.Emit(stream, true);
+ stream.WriteLine(";");
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ foreach (IdentifierExpr/*!*/ ide in Vars) {
+ Contract.Assert(ide != null);
+ ide.Resolve(rc);
+ }
+ }
+ public override void AddAssignedVariables(List<Variable> vars) {
+ //Contract.Requires(vars != null);
+ foreach (IdentifierExpr/*!*/ e in this.Vars) {
+ Contract.Assert(e != null);
+ vars.Add(e.Decl);
+ }
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ foreach (IdentifierExpr ie in Vars)
+ {
+ ie.Typecheck(tc);
+ }
+ this.CheckAssignments(tc);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitHavocCmd(this);
+ }
+ }
+
+ //---------------------------------------------------------------------
+ // Transfer commands
+ [ContractClass(typeof(TransferCmdContracts))]
+ public abstract class TransferCmd : Absy {
+ internal TransferCmd(IToken/*!*/ tok)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ }
+ public abstract void Emit(TokenTextWriter/*!*/ stream, int level);
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ // nothing to typecheck
+ }
+
+ public override string ToString()
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false , /*pretty=*/ false)) {
+ this.Emit(stream, 0);
+ }
+ return buffer.ToString();
+ }
+ }
+ [ContractClassFor(typeof(TransferCmd))]
+ public abstract class TransferCmdContracts : TransferCmd {
+ public TransferCmdContracts() :base(null){
+
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ Contract.Requires(stream != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public class ReturnCmd : TransferCmd {
+ public ReturnCmd(IToken/*!*/ tok)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ stream.WriteLine(this, level, "return;");
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ // nothing to resolve
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitReturnCmd(this);
+ }
+ }
+
+ public class GotoCmd : TransferCmd {
+ [Rep]
+ public List<String> labelNames;
+ [Rep]
+ public List<Block> labelTargets;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(labelNames == null || labelTargets == null || labelNames.Count == labelTargets.Count);
+ }
+
+ [NotDelayed]
+ public GotoCmd(IToken/*!*/ tok, List<String>/*!*/ labelSeq)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(labelSeq != null);
+ this.labelNames = labelSeq;
+ }
+ public GotoCmd(IToken/*!*/ tok, List<String>/*!*/ labelSeq, List<Block>/*!*/ blockSeq)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(labelSeq != null);
+ Contract.Requires(blockSeq != null);
+ Debug.Assert(labelSeq.Count == blockSeq.Count);
+ for (int i = 0; i < labelSeq.Count; i++) {
+ Debug.Assert(Equals(labelSeq[i], cce.NonNull(blockSeq[i]).Label));
+ }
+
+ this.labelNames = labelSeq;
+ this.labelTargets = blockSeq;
+ }
+ public GotoCmd(IToken/*!*/ tok, List<Block>/*!*/ blockSeq)
+ : base(tok) { //requires (blockSeq[i] != null ==> blockSeq[i].Label != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(blockSeq != null);
+ List<String> labelSeq = new List<String>();
+ for (int i = 0; i < blockSeq.Count; i++)
+ labelSeq.Add(cce.NonNull(blockSeq[i]).Label);
+ this.labelNames = labelSeq;
+ this.labelTargets = blockSeq;
+ }
+ public void AddTarget(Block b) {
+ Contract.Requires(b != null);
+ Contract.Requires(b.Label != null);
+ Contract.Requires(this.labelTargets != null);
+ Contract.Requires(this.labelNames != null);
+ this.labelTargets.Add(b);
+ this.labelNames.Add(b.Label);
+ }
+ public override void Emit(TokenTextWriter stream, int level) {
+ //Contract.Requires(stream != null);
+ Contract.Assume(this.labelNames != null);
+ stream.Write(this, level, "goto ");
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ if (labelTargets == null) {
+ string sep = "";
+ foreach (string name in labelNames) {
+ stream.Write("{0}{1}^^{2}", sep, "NoDecl", name);
+ sep = ", ";
+ }
+ } else {
+ string sep = "";
+ foreach (Block/*!*/ b in labelTargets) {
+ Contract.Assert(b != null);
+ stream.Write("{0}h{1}^^{2}", sep, b.GetHashCode(), b.Label);
+ sep = ", ";
+ }
+ }
+ } else {
+ labelNames.Emit(stream);
+ }
+ stream.WriteLine(";");
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(labelTargets != null);
+ if (labelTargets != null) {
+ // already resolved
+ return;
+ }
+ Contract.Assume(this.labelNames != null);
+ labelTargets = new List<Block>();
+ foreach (string/*!*/ lbl in labelNames) {
+ Contract.Assert(lbl != null);
+ Block b = rc.LookUpBlock(lbl);
+ if (b == null) {
+ rc.Error(this, "goto to unknown block: {0}", lbl);
+ } else {
+ labelTargets.Add(b);
+ }
+ }
+ Debug.Assert(rc.ErrorCount > 0 || labelTargets.Count == labelNames.Count);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitGotoCmd(this);
+ }
+ }
+}
diff --git a/Source/Core/AbsyExpr.cs b/Source/Core/AbsyExpr.cs
index 6b2e1201..b980a22b 100644
--- a/Source/Core/AbsyExpr.cs
+++ b/Source/Core/AbsyExpr.cs
@@ -1,3320 +1,3351 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// BoogiePL - Absy.cs
-//---------------------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie {
- using System;
- using System.Collections;
- using System.Diagnostics;
- using System.Collections.Generic;
- using Microsoft.Boogie.AbstractInterpretation;
- using System.Diagnostics.Contracts;
- using System.Linq;
- using Microsoft.Basetypes;
-
- using Set = GSet<object>; // not that the set used is not a set of Variable only, as it also contains TypeVariables
-
-
- //---------------------------------------------------------------------
- // Expressions
- //
- // For expressions, we override the Equals and GetHashCode method to
- // implement structural equality. Note this is not logical equivalence
- // and is not modulo alpha-renaming.
- //---------------------------------------------------------------------
-
-
- [ContractClass(typeof(ExprContracts))]
- public abstract class Expr : Absy {
- public Expr(IToken/*!*/ tok, bool immutable)
- : base(tok) {
- Contract.Requires(tok != null);
- this.Immutable = immutable;
- }
-
- public void Emit(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- Emit(stream, 0, false);
- }
-
- /// <summary>
- /// If true the client is making a promise that this Expr will be
- /// treated immutably (i.e. once constructed it is never changed).
- /// This is currently not enforced but it should be!
- ///
- /// This allows the Expr's hash code to be cached making calls to
- /// GetHashCode() very cheap.
- /// </summary>
- /// <value><c>true</c> if immutable; otherwise, <c>false</c>.</value>
- public bool Immutable {
- get;
- private set;
- }
-
- /// <summary>
- /// Computes the hash code of this Expr skipping any cache.
- ///
- /// Sub classes should place their implementation of computing their hashcode
- /// here (making sure to call GetHashCode() not ComputeHashCode() on Expr for performance reasons)
- /// and have GetHashCode() use a cached result from ComputeHashCode() if the
- /// Expr was constructed to be immutable.
- /// </summary>
- /// <returns>The hash code.</returns>
- public abstract int ComputeHashCode();
- protected int CachedHashCode = 0;
-
- public abstract void Emit(TokenTextWriter/*!*/ wr, int contextBindingStrength, bool fragileContext);
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
- this.Emit(stream, 0, false);
- }
- return buffer.ToString();
- }
-
- /// <summary>
- /// Add to "freeVars" the free variables in the expression.
- /// </summary>
- public abstract void ComputeFreeVariables(Set /*Variable*//*!*/ freeVars);
-
- /// <summary>
- /// Filled in by the Typecheck method. A value of "null" means a succeeding
- /// call to Typecheck has not taken place (that is, either Typecheck hasn't
- /// been called or Typecheck encountered an error in the expression to be
- /// typechecked).
- /// </summary>
- private Type _Type = null;
- public Type Type {
- get {
- return _Type;
- }
- set {
- if (_Type == null) {
- // Expr has never been type checked so always allow this
- _Type = value;
- } else {
- if (Immutable && !_Type.Equals(value))
- throw new InvalidOperationException("Cannot change the Type of an Immutable Expr");
-
- // Once the Type has been set (i.e. no longer null) we never change the reference
- // if this Expr is immutable, even if the Type is equivalent (i.e. _Type.Equals(newType))
- if (!Immutable)
- _Type = value;
- }
- }
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- Contract.Ensures(Type != null);
- // This body is added only because C# insists on it. It should really be left out, as if TypeCheck still were abstract.
- // The reason for mentioning the method here at all is to give TypeCheck a postcondition for all expressions.
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- /// <summary>
- /// Returns the type of the expression, supposing that all its subexpressions are well typed.
- /// </summary>
- public abstract Type/*!*/ ShallowType {
- get;
- }
-
- // Handy syntactic sugar follows:
-
- public static NAryExpr Unary(IToken x, UnaryOperator.Opcode op, Expr e1) {
- Contract.Requires(e1 != null);
- Contract.Requires(x != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return new NAryExpr(x, new UnaryOperator(x, op), new List<Expr> { e1 });
- }
-
- public static NAryExpr Binary(IToken x, BinaryOperator.Opcode op, Expr e0, Expr e1) {
- Contract.Requires(e1 != null);
- Contract.Requires(e0 != null);
- Contract.Requires(x != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return new NAryExpr(x, new BinaryOperator(x, op), new List<Expr> { e0, e1 });
- }
-
- public static NAryExpr Binary(BinaryOperator.Opcode op, Expr e0, Expr e1) {
- Contract.Requires(e1 != null);
- Contract.Requires(e0 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(Token.NoToken, op, e0, e1);
- }
-
- public static NAryExpr Eq(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Eq, e1, e2);
- }
- public static NAryExpr Neq(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Neq, e1, e2);
- }
- public static NAryExpr Le(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Le, e1, e2);
- }
- public static NAryExpr Ge(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Ge, e1, e2);
- }
- public static NAryExpr Lt(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Lt, e1, e2);
- }
- public static NAryExpr Gt(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Gt, e1, e2);
- }
- public static Expr And(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- if (e1 == true_) {
- return e2;
- } else if (e2 == true_) {
- return e1;
- } else if (e1 == false_ || e2 == false_) {
- return false_;
- } else {
- var res = Binary(BinaryOperator.Opcode.And, e1, e2);
- res.Type = Microsoft.Boogie.Type.Bool;
- res.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- return res;
- }
- }
- public static Expr Or(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- if (e1 == false_) {
- return e2;
- } else if (e2 == false_) {
- return e1;
- } else if (e1 == true_ || e2 == true_) {
- return true_;
- } else {
- return Binary(BinaryOperator.Opcode.Or, e1, e2);
- }
- }
- public static Expr Not(Expr e1) {
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- NAryExpr nary = e1 as NAryExpr;
-
- if (e1 == true_) {
- return false_;
- } else if (e1 == false_) {
- return true_;
- } else if (nary != null) {
- if (nary.Fun is UnaryOperator) {
- UnaryOperator op = (UnaryOperator)nary.Fun;
- if (op.Op == UnaryOperator.Opcode.Not) {
- return cce.NonNull(nary.Args[0]);
- }
- } else if (nary.Fun is BinaryOperator) {
- BinaryOperator op = (BinaryOperator)nary.Fun;
- Expr arg0 = cce.NonNull(nary.Args[0]);
- Expr arg1 = cce.NonNull(nary.Args[1]);
- if (op.Op == BinaryOperator.Opcode.Eq) {
- return Neq(arg0, arg1);
- } else if (op.Op == BinaryOperator.Opcode.Neq) {
- return Eq(arg0, arg1);
- } else if (op.Op == BinaryOperator.Opcode.Lt) {
- return Le(arg1, arg0);
- } else if (op.Op == BinaryOperator.Opcode.Le) {
- return Lt(arg1, arg0);
- } else if (op.Op == BinaryOperator.Opcode.Ge) {
- return Gt(arg1, arg0);
- } else if (op.Op == BinaryOperator.Opcode.Gt) {
- return Ge(arg1, arg0);
- }
- }
- }
-
- return Unary(Token.NoToken, UnaryOperator.Opcode.Not, e1);
- }
-
- public static Expr Neg(Expr e1) {
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return Unary(Token.NoToken, UnaryOperator.Opcode.Neg, e1);
- }
-
- public static NAryExpr Imp(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Imp, e1, e2);
- }
- public static NAryExpr Iff(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Iff, e1, e2);
- }
- public static NAryExpr Add(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Add, e1, e2);
- }
- public static NAryExpr Sub(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Sub, e1, e2);
- }
- public static NAryExpr Mul(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Mul, e1, e2);
- }
- public static NAryExpr Div(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Div, e1, e2);
- }
- public static NAryExpr Mod(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Mod, e1, e2);
- }
- public static NAryExpr RealDiv(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.RealDiv, e1, e2);
- }
- public static NAryExpr FloatDiv(Expr e1, Expr e2)
- {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.FloatDiv, e1, e2);
- }
- public static NAryExpr Pow(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Pow, e1, e2);
- }
- public static NAryExpr Subtype(Expr e1, Expr e2) {
- Contract.Requires(e2 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Binary(BinaryOperator.Opcode.Subtype, e1, e2);
- }
-
- public static IdentifierExpr Ident(string name, Type type) {
- Contract.Requires(type != null);
- Contract.Requires(name != null);
- Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
- return new IdentifierExpr(Token.NoToken, name, type);
- }
-
- public static IdentifierExpr Ident(Variable decl) {
- Contract.Requires(decl != null);
- Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
- IdentifierExpr result = new IdentifierExpr(Token.NoToken, decl);
- return result;
- }
-
- public static LiteralExpr Literal(bool value) {
- Contract.Ensures(Contract.Result<LiteralExpr>() != null);
- return new LiteralExpr(Token.NoToken, value);
- }
- public static LiteralExpr Literal(int value) {
- Contract.Ensures(Contract.Result<LiteralExpr>() != null);
- return new LiteralExpr(Token.NoToken, BigNum.FromInt(value));
- }
- public static LiteralExpr Literal(BigNum value) {
- Contract.Ensures(Contract.Result<LiteralExpr>() != null);
- return new LiteralExpr(Token.NoToken, value);
- }
- public static LiteralExpr Literal(BigDec value) {
- Contract.Ensures(Contract.Result<LiteralExpr>() != null);
- return new LiteralExpr(Token.NoToken, value);
- }
- public static LiteralExpr Literal(BigFloat value)
- {
- Contract.Ensures(Contract.Result<LiteralExpr>() != null);
- return new LiteralExpr(Token.NoToken, value);
- }
-
- private static LiteralExpr/*!*/ true_ = Literal(true);
- public static LiteralExpr/*!*/ True {
- get {
- Contract.Ensures(Contract.Result<LiteralExpr>() != null);
- return true_;
- }
- }
-
- private static LiteralExpr/*!*/ false_ = Literal(false);
- public static LiteralExpr/*!*/ False {
- get {
- Contract.Ensures(Contract.Result<LiteralExpr>() != null);
- return false_;
- }
- }
-
-
- public static NAryExpr Select(Expr map, params Expr[] args) {
- Contract.Requires(args != null);
- Contract.Requires(map != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return SelectTok(Token.NoToken, map, args);
- }
-
- public static NAryExpr Select(Expr map, List<Expr/*!*/>/*!*/ args) {
- Contract.Requires(map != null);
- Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return Select(map, args.ToArray());
- }
-
- // use a different name for this variant of the method
- // (-> some bug prevents overloading in this case)
- public static NAryExpr SelectTok(IToken x, Expr map, params Expr[] args) {
- Contract.Requires(args != null);
- Contract.Requires(map != null);
- Contract.Requires(x != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- List<Expr>/*!*/ allArgs = new List<Expr>();
- allArgs.Add(map);
- foreach (Expr/*!*/ a in args) {
- Contract.Assert(a != null);
- allArgs.Add(a);
- }
- return new NAryExpr(x, new MapSelect(Token.NoToken, args.Length), allArgs);
- }
-
- public static NAryExpr Store(Expr map, params Expr[] args) {
- Contract.Requires(args != null);
- Contract.Requires(map != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- return StoreTok(Token.NoToken, map, args);
- }
-
- public static NAryExpr Store(Expr map, List<Expr/*!*/>/*!*/ indexes, Expr rhs) {
- Contract.Requires(rhs != null);
- Contract.Requires(map != null);
- Contract.Requires(cce.NonNullElements(indexes));
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- Expr[]/*!*/ allArgs = new Expr[indexes.Count + 1];
- for (int i = 0; i < indexes.Count; ++i)
- allArgs[i] = indexes[i];
- allArgs[indexes.Count] = rhs;
- return Store(map, allArgs);
- }
-
- // use a different name for this variant of the method
- // (-> some bug prevents overloading in this case)
- public static NAryExpr/*!*/ StoreTok(IToken x, Expr map, params Expr[] args) {
- Contract.Requires(args != null);
- Contract.Requires(map != null);
- Contract.Requires(x != null);
- Contract.Requires(args.Length > 0); // zero or more indices, plus the value
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
-
- List<Expr>/*!*/ allArgs = new List<Expr>();
- allArgs.Add(map);
- foreach (Expr/*!*/ a in args) {
- Contract.Assert(a != null);
- allArgs.Add(a);
- }
- return new NAryExpr(x, new MapStore(Token.NoToken, args.Length - 1), allArgs);
- }
-
- public static NAryExpr CoerceType(IToken x, Expr subexpr, Type type) {
- Contract.Requires(type != null);
- Contract.Requires(subexpr != null);
- Contract.Requires(x != null);
- Contract.Ensures(Contract.Result<NAryExpr>() != null);
- List<Expr>/*!*/ args = new List<Expr>();
- args.Add(subexpr);
- return new NAryExpr(x, new TypeCoercion(x, type), args);
- }
-
- public static Expr BinaryTreeAnd(List<Expr> terms)
- {
- return BinaryTreeAnd(terms, 0, terms.Count - 1);
- }
-
- private static Expr BinaryTreeAnd(List<Expr> terms, int start, int end)
- {
- if (start > end)
- return Expr.True;
- if (start == end)
- return terms[start];
- if (start + 1 == end)
- return Expr.And(terms[start], terms[start + 1]);
- var mid = (start + end) / 2;
- return Expr.And(BinaryTreeAnd(terms, start, mid), BinaryTreeAnd(terms, mid + 1, end));
- }
- }
- [ContractClassFor(typeof(Expr))]
- public abstract class ExprContracts : Expr {
- public ExprContracts() :base(null, /*immutable=*/ false){
-
- }
- public override void Emit(TokenTextWriter wr, int contextBindingStrength, bool fragileContext) {
- Contract.Requires(wr != null);
- throw new NotImplementedException();
- }
- public override void ComputeFreeVariables(Set freeVars) {
- Contract.Requires(freeVars != null);
- throw new NotImplementedException();
- }
- public override Type ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
- }
- }
-
- public class LiteralExpr : Expr {
- public readonly object/*!*/ Val; // false, true, a BigNum, a BigDec, a BigFloat, or a BvConst
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Val != null);
- }
-
- /// <summary>
- /// Creates a literal expression for the boolean value "b".
- /// </summary>
- /// <param name="tok"></param>
- /// <param name="b"></param>
- public LiteralExpr(IToken/*!*/ tok, bool b, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Val = b;
- Type = Type.Bool;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- /// <summary>
- /// Creates a literal expression for the integer value "v".
- /// </summary>
- /// <param name="tok"></param>
- /// <param name="v"></param>
- public LiteralExpr(IToken/*!*/ tok, BigNum v, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Val = v;
- Type = Type.Int;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- /// <summary>
- /// Creates a literal expression for the real value "v".
- /// </summary>
- /// <param name="tok"></param>
- /// <param name="v"></param>
- public LiteralExpr(IToken/*!*/ tok, BigDec v, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Val = v;
- Type = Type.Real;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- /// <summary>
- /// Creates a literal expression for the floating point value "v".
- /// </summary>
- /// <param name="tok"></param>
- /// <param name="v"></param>
- public LiteralExpr(IToken/*!*/ tok, BigFloat v, bool immutable = false)
- : base(tok, immutable)
- {
- Contract.Requires(tok != null);
- Val = v;
- Type = Type.GetFloatType(v.ExponentSize, v.SignificandSize);
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- /// <summary>
- /// Creates a literal expression for the bitvector value "v".
- /// </summary>
- public LiteralExpr(IToken/*!*/ tok, BigNum v, int b, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(0 <= b);
- Val = new BvConst(v, b);
- Type = Type.GetBvType(b);
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is LiteralExpr))
- return false;
-
- LiteralExpr other = (LiteralExpr)obj;
- return object.Equals(this.Val, other.Val);
- }
-
- [Pure]
- public override int GetHashCode() {
- if (Immutable)
- return this.CachedHashCode;
- else
- return ComputeHashCode();
- }
-
- [Pure]
- public override int ComputeHashCode() {
- return this.Val.GetHashCode();
- }
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
- if (this.Val is bool) {
- stream.Write((bool)this.Val ? "true" : "false"); // correct capitalization
- } else {
- stream.Write(cce.NonNull(this.Val.ToString()));
- }
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- // nothing to resolve
- }
- public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- //Contract.Requires(freeVars != null);
- // no free variables to add
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- this.Type = ShallowType;
- }
-
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- if (Val is bool) {
- return Type.Bool;
- } else if (Val is BigNum) {
- return Type.Int;
- } else if (Val is BigDec) {
- return Type.Real;
- } else if (Val is BigFloat) {
- BigFloat temp = (BigFloat)Val;
- return Type.GetFloatType(temp.ExponentSize, temp.SignificandSize);
- } else if (Val is BvConst) {
- return Type.GetBvType(((BvConst)Val).Bits);
- } else {
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // like, where did this value come from?!
- }
- }
- }
-
- public bool IsFalse {
- get {
- return Val is bool && ((bool)Val) == false;
- }
- }
- public bool IsTrue {
- get {
- return Val is bool && ((bool)Val) == true;
- }
- }
-
- // should be eliminated after converting everything to BigNums
- private int asInt {
- get {
- return asBigNum.ToIntSafe;
- }
- }
-
- public bool isBigNum {
- get {
- return Val is BigNum;
- }
- }
-
- public BigNum asBigNum {
- get {
- Contract.Assert(isBigNum);
- return (BigNum)cce.NonNull(Val);
- }
- }
-
- public bool isBigDec {
- get {
- return Val is BigDec;
- }
- }
-
- public bool isBigFloat
- {
- get
- {
- return Val is BigFloat;
- }
- }
-
- public BigDec asBigDec {
- get {
- Contract.Assert(isBigDec);
- return (BigDec)cce.NonNull(Val);
- }
- }
-
- public BigFloat asBigFloat {
- get {
- Contract.Assert(isBigFloat);
- return (BigFloat)cce.NonNull(Val);
- }
- }
-
- public bool isBool {
- get {
- return Val is bool;
- }
- }
-
- public bool asBool {
- get {
- Contract.Assert(isBool);
- return (bool)cce.NonNull(Val);
- }
- }
-
- public bool isBvConst {
- get {
- return Val is BvConst;
- }
- }
-
- public BvConst asBvConst {
- get {
- Contract.Assert(isBvConst);
- return (BvConst)cce.NonNull(Val);
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitLiteralExpr(this);
- }
- }
-
- public class BvConst {
- public readonly BigNum Value;
- public readonly int Bits;
-
- public BvConst(BigNum v, int b) {
- Contract.Assert(v.Signum >= 0);
- Value = v;
- Bits = b;
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return Value + "bv" + Bits;
- }
-
- [Pure]
- public string ToReadableString() {
- Contract.Ensures(Contract.Result<string>() != null);
- if (Value > BigNum.FromInt(10000)) {
- string val = cce.NonNull(Value.ToString("x"));
- int pos = val.Length % 4;
- string res = "0x" + val.Substring(0, pos);
- Contract.Assert(res != null);
- while (pos < val.Length) {
- res += "." + val.Substring(pos, 4);
- pos += 4;
- }
- return res + ".bv" + Bits;
- } else
- return ToString();
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- BvConst other = obj as BvConst;
- if (other == null)
- return false;
-
- return Bits == other.Bits && Value == other.Value;
- }
-
- [Pure]
- public override int GetHashCode() {
- unchecked {
- return Value.GetHashCode() ^ Bits;
- }
- }
- }
-
- public class IdentifierExpr : Expr {
- private string _Name;
- public string Name { // identifier symbol
- get {
- return _Name;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Cannot change Name on Immutable Expr");
-
- _Name = value;
- }
- }
- private Variable _Decl;
- public Variable Decl { // identifier declaration
- get {
- return _Decl;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Cannot change Decl on Immutable Expr");
-
- _Decl = value;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Name != null);
- }
-
-
- /// <summary>
- /// Creates an unresolved identifier expression. This constructor is intended to be called
- /// only from within the parser; for use inside the translation, use another constructor, which
- /// specifies the type of the expression.
- /// </summary>
- /// <param name="tok"></param>
- /// <param name="name"></param>
- internal IdentifierExpr(IToken/*!*/ tok, string/*!*/ name, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- _Name = name;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
- /// <summary>
- /// Creates an unresolved identifier expression.
- /// </summary>
- /// <param name="tok"></param>
- /// <param name="name"></param>
- /// <param name="type"></param>
- public IdentifierExpr(IToken/*!*/ tok, string/*!*/ name, Type/*!*/ type, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(name != null);
- Contract.Requires(type != null);
- _Name = name;
- Type = type;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- /// <summary>
- /// Creates a resolved identifier expression.
- /// </summary>
- /// <param name="tok"></param>
- /// <param name="d"></param>
- public IdentifierExpr(IToken/*!*/ tok, Variable/*!*/ d, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(d != null);
- _Name = cce.NonNull(d.Name);
- _Decl = d;
- Type = d.TypedIdent.Type;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is IdentifierExpr))
- return false;
-
- IdentifierExpr other = (IdentifierExpr)obj;
- return object.Equals(this.Name, other.Name) && object.Equals(this.Decl, other.Decl);
- }
-
- [Pure]
- public override int GetHashCode() {
- if (Immutable)
- return this.CachedHashCode;
- else
- return ComputeHashCode();
- }
-
- [Pure]
- public override int ComputeHashCode() {
- int h = this.Name == null ? 0 : this.Name.GetHashCode();
- h ^= this.Decl == null ? 0 : this.Decl.GetHashCode();
- return h;
- }
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds && !stream.UseForComputingChecksums) {
- stream.Write("{0}^^", this.Decl == null ? "NoDecl" : "h" + this.Decl.GetHashCode());
- }
- stream.Write(this, "{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- if (Decl != null) {
- // already resolved, but re-resolve type just in case it came from an unresolved type
- if (Type != null) {
- Type = Type.ResolveType(rc);
- }
- return;
- }
- Decl = rc.LookUpVariable(Name);
- if (Decl == null) {
- rc.Error(this, "undeclared identifier: {0}", Name);
- } else if (rc.StateMode == ResolutionContext.State.StateLess && Decl is GlobalVariable) {
- rc.Error(this, "cannot refer to a global variable in this context: {0}", Name);
- }
- if (Type != null) {
- Type = Type.ResolveType(rc);
- }
- }
- public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- //Contract.Requires(freeVars != null);
- Contract.Assume(this.Decl != null);
- freeVars.Add(Decl);
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- if (this.Decl != null) {
- // sanity check
- if (Type != null && !Type.Equals(Decl.TypedIdent.Type)) {
- tc.Error(this, "internal error, shallow-type assignment was done incorrectly, {0}:{1} != {2}",
- Name, Type, Decl.TypedIdent.Type);
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
- Type = Decl.TypedIdent.Type;
- }
- }
-
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- Contract.Assert(Type != null);
- return Type;
- }
- }
-
- public sealed class ConstantFunApp {
- private IdentifierExpr/*!*/ identifierExpr;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(identifierExpr != null);
- Contract.Invariant(emptyArgs != null);
- }
-
- public IdentifierExpr/*!*/ IdentifierExpr {
- get {
- Contract.Requires(IdentifierExpr != null);
- return identifierExpr;
- }
- }
-
- private static IList/*!*/ emptyArgs = ArrayList.ReadOnly(cce.NonNull((IList/*!*/)new ArrayList()));
- public IList/*!*/ Arguments {
- get {
- Contract.Ensures(Contract.Result<IList>() != null);
- return emptyArgs;
- }
- }
-
- public ConstantFunApp(IdentifierExpr ie, Constant c) {
- Contract.Requires(c != null);
- Contract.Requires(ie != null);
- this.identifierExpr = ie;
- }
-
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitIdentifierExpr(this);
- }
- }
-
- public class OldExpr : Expr
- {
- private Expr _Expr;
- public Expr/*!*/ Expr {
- get {
- return _Expr;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Cannot change Expr of an Immutable OldExpr");
-
- _Expr = value;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Expr != null);
- }
-
- public OldExpr(IToken/*!*/ tok, Expr/*!*/ expr, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(expr != null);
- _Expr = expr;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is OldExpr))
- return false;
-
- OldExpr other = (OldExpr)obj;
- return object.Equals(this.Expr, other.Expr);
- }
- [Pure]
- public override int GetHashCode() {
- if (Immutable)
- return this.CachedHashCode;
- else
- return ComputeHashCode ();
- }
- public override int ComputeHashCode() {
- // FIXME: This is wrong, it's as if the OldExpr node isn't there at all
- return this.Expr == null ? 0 : this.Expr.GetHashCode();
- }
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- stream.Write(this, "old(");
- this.Expr.Emit(stream);
- stream.Write(")");
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- if (rc.StateMode != ResolutionContext.State.Two) {
- rc.Error(this, "old expressions allowed only in two-state contexts");
- }
- Expr.Resolve(rc);
- }
- public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- //Contract.Requires(freeVars != null);
- Expr.ComputeFreeVariables(freeVars);
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- Expr.Typecheck(tc);
- Type = Expr.Type;
- }
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return Expr.ShallowType;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitOldExpr(this);
- }
- }
- [ContractClass(typeof(IAppliableVisitorContracts<>))]
- public interface IAppliableVisitor<T> {
- T Visit(UnaryOperator/*!*/ unaryOperator);
- T Visit(BinaryOperator/*!*/ binaryOperator);
- T Visit(FunctionCall/*!*/ functionCall);
- T Visit(MapSelect/*!*/ mapSelect);
- T Visit(MapStore/*!*/ mapStore);
- T Visit(TypeCoercion/*!*/ typeCoercion);
- T Visit(ArithmeticCoercion/*!*/ arithCoercion);
- T Visit(IfThenElse/*!*/ ifThenElse);
- }
- [ContractClassFor(typeof(IAppliableVisitor<>))]
- public abstract class IAppliableVisitorContracts<T> : IAppliableVisitor<T> {
-
- #region IAppliableVisitor<T> Members
-
- public T Visit(UnaryOperator unaryOperator) {
- Contract.Requires(unaryOperator != null);
- throw new NotImplementedException();
- }
-
- public T Visit(BinaryOperator binaryOperator) {
- Contract.Requires(binaryOperator != null);
- throw new NotImplementedException();
- }
-
- public T Visit(FunctionCall functionCall) {
- Contract.Requires(functionCall != null);
- throw new NotImplementedException();
- }
-
- public T Visit(MapSelect mapSelect) {
- Contract.Requires(mapSelect != null);
- throw new NotImplementedException();
- }
-
- public T Visit(MapStore mapStore) {
- Contract.Requires(mapStore != null);
- throw new NotImplementedException();
- }
-
- public T Visit(TypeCoercion typeCoercion) {
- Contract.Requires(typeCoercion != null);
- throw new NotImplementedException();
- }
-
- public T Visit(ArithmeticCoercion arithCoercion) {
- Contract.Requires(arithCoercion != null);
- throw new NotImplementedException();
- }
-
- public T Visit(IfThenElse ifThenElse) {
- Contract.Requires(ifThenElse != null);
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
- [ContractClass(typeof(IAppliableContracts))]
- public interface IAppliable {
- string/*!*/ FunctionName {
- get;
- }
-
- /// <summary>
- /// Emits to "stream" the operator applied to the given arguments.
- /// The length of "args" can be anything that the parser allows for this appliable operator
- /// (but can be nothing else).
- /// </summary>
- /// <param name="args"></param>
- /// <param name="stream"></param>
- /// <param name="contextBindingStrength"></param>
- /// <param name="fragileContext"></param>
- void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream, int contextBindingStrength, bool fragileContext);
-
- void Resolve(ResolutionContext/*!*/ rc, Expr/*!*/ subjectForErrorReporting);
-
- /// <summary>
- /// Requires the object to have been properly resolved.
- /// </summary>
- int ArgumentCount {
- get;
- }
-
- /// <summary>
- /// Typechecks the arguments "args" for the Appliable. If the arguments are
- /// appropriate, returns the result type; otherwise returns null.
- /// As result of the type checking, the values of type parameters of the
- /// appliable can be returned (which are then stored in the NAryExpr and later
- /// also used in the VCExprAST).
- /// Requires the object to have been successfully resolved.
- /// Requires args.Length == ArgumentCount.
- /// Requires all elements of "args" to have a non-null Type field.
- /// </summary>
- /// <param name="args"></param>
- /// <param name="tc"></param>
- Type Typecheck(IList<Expr>/*!*/ args, out TypeParamInstantiation/*!*/ tpInstantiation, TypecheckingContext/*!*/ tc);
-
- // Contract.Requires( Microsoft.SpecSharp.Collections.Reductions.Forall{Expr! arg in args; arg.Type != null});
-
- /// <summary>
- /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
- /// </summary>
- Type/*!*/ ShallowType(IList<Expr>/*!*/ args);
-
- T Dispatch<T>(IAppliableVisitor<T>/*!*/ visitor);
- }
- [ContractClassFor(typeof(IAppliable))]
- abstract class IAppliableContracts : IAppliable {
-
- #region IAppliable Members
-
- public string FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- throw new NotImplementedException();
- }
- }
-
- public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- Contract.Requires(args != null);
- Contract.Requires(stream != null);
- throw new NotImplementedException();
- }
-
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- Contract.Requires(rc != null);
- Contract.Requires(subjectForErrorReporting != null);
- throw new NotImplementedException();
- }
-
- public int ArgumentCount {
- get {
- throw new NotImplementedException();
- }
- }
-
- public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
- Contract.Requires(args != null);
- Contract.Requires(tc != null);
- Contract.Ensures(Contract.ValueAtReturn(out args) != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- Contract.Ensures(args.Count == Contract.OldValue(args.Count));
- throw new NotImplementedException();
- }
-
- public Type ShallowType(IList<Expr> args) {
- Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
-
- public T Dispatch<T>(IAppliableVisitor<T> visitor) {
- Contract.Requires(visitor != null);
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
-
- [ContractClass(typeof(IOverloadedAppliableContracts))]
- public interface IOverloadedAppliable {
- void ResolveOverloading(NAryExpr/*!*/ expr);
- bool DoNotResolveOverloading { get; set; }
- }
- [ContractClassFor(typeof(IOverloadedAppliable))]
- public abstract class IOverloadedAppliableContracts : IOverloadedAppliable {
-
- #region IOverloadedAppliable Members
-
- void IOverloadedAppliable.ResolveOverloading(NAryExpr expr) {
- Contract.Requires(expr != null);
- throw new NotImplementedException();
- }
-
- public bool DoNotResolveOverloading
- {
- get
- {
- throw new NotImplementedException();
- }
- set
- {
- throw new NotImplementedException();
- }
- }
-
- #endregion
- }
-
- public class UnaryOperator : IAppliable {
- private IToken/*!*/ tok;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(tok != null);
- }
-
- public enum Opcode {
- Neg,
- Not
- };
- private Opcode op;
- public Opcode Op {
- get {
- return op;
- }
- }
- public UnaryOperator(IToken tok, Opcode op) {
- Contract.Requires(tok != null);
- this.tok = tok;
- this.op = op;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is UnaryOperator))
- return false;
-
- UnaryOperator other = (UnaryOperator)obj;
- return object.Equals(this.op, other.op);
- }
- [Pure]
- public override int GetHashCode() {
- return (int)this.op;
- }
-
- public string/*!*/ FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- switch (this.op) {
- case Opcode.Neg:
- return "-";
- case Opcode.Not:
- return "!";
- }
- System.Diagnostics.Debug.Fail("unknown unary operator: " + op.ToString());
- throw new Exception();
- }
- }
-
- public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- //Contract.Requires(args != null);
- stream.SetToken(ref this.tok);
- Contract.Assert(args.Count == 1);
- // determine if parens are needed
- int opBindingStrength = 0x70;
- bool parensNeeded = opBindingStrength < contextBindingStrength ||
- (fragileContext && opBindingStrength == contextBindingStrength);
-
- if (parensNeeded) {
- stream.Write("(");
- }
- stream.Write(FunctionName);
- cce.NonNull(args[0]).Emit(stream, opBindingStrength, false);
- if (parensNeeded) {
- stream.Write(")");
- }
- }
-
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- if (rc.TriggerMode && this.op == Opcode.Not) {
- rc.Error(subjectForErrorReporting, "boolean operators are not allowed in triggers");
- }
- }
-
- public int ArgumentCount {
- get {
- return 1;
- }
- }
-
- public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- Contract.Ensures(Contract.ValueAtReturn(out args) != null);
-
- Contract.Assume(args.Count == 1);
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
- Type arg0type = cce.NonNull(cce.NonNull(args[0]).Type);
- switch (this.op) {
- case Opcode.Neg:
- if (arg0type.Unify(Type.Int)) {
- return Type.Int;
- }
- if (arg0type.Unify(Type.Real)) {
- return Type.Real;
- }
- //if (arg0type.Unify(Type.Float)) {
- //return Type.Float;
- //}
- goto BAD_TYPE;
- case Opcode.Not:
- if (arg0type.Unify(Type.Bool)) {
- return Type.Bool;
- }
- goto BAD_TYPE;
- }
- System.Diagnostics.Debug.Fail("unknown unary operator: " + op.ToString());
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- BAD_TYPE:
- tc.Error(this.tok, "invalid argument type ({1}) to unary operator {0}",
- this.FunctionName, arg0type);
- return null;
- }
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- switch (this.op) {
- case Opcode.Neg:
- return cce.NonNull(cce.NonNull(args[0]).Type);
- case Opcode.Not:
- return Type.Bool;
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // unexpected unary operator
- }
- }
-
- public object Evaluate(object argument) {
- if (argument == null) {
- return null;
- }
- switch (this.op) {
- case Opcode.Neg:
- if (argument is BigNum) {
- return -((BigNum)argument);
- }
- if (argument is BigDec) {
- return -((BigDec)argument);
- }
- if (argument is BigFloat) {
- return -((BigFloat)argument);
- }
- break;
- case Opcode.Not:
- if (argument is bool) {
- return !((bool)argument);
- }
- throw new System.InvalidOperationException("unary Not only applies to bool");
- }
- return null; // unreachable
- }
-
- public T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
- }
-
- public class BinaryOperator : IAppliable, IOverloadedAppliable {
- private IToken/*!*/ tok;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(tok != null);
- }
-
- public bool DoNotResolveOverloading { get; set; }
-
- public enum Opcode {
- Add,
- Sub,
- Mul,
- Div,
- Mod,
- RealDiv,
- FloatDiv,
- Pow,
- Eq,
- Neq,
- Gt,
- Ge,
- Lt,
- Le,
- And,
- Or,
- Imp,
- Iff,
- Subtype
- };
- private Opcode op;
- public Opcode Op {
- get {
- return op;
- }
- }
- public BinaryOperator(IToken tok, Opcode op) {
- Contract.Requires(tok != null);
- this.tok = tok;
- this.op = op;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is BinaryOperator))
- return false;
-
- BinaryOperator other = (BinaryOperator)obj;
- return object.Equals(this.op, other.op);
- }
-
- [Pure]
- public override int GetHashCode() {
- return (int)this.op << 1;
- }
-
- public string/*!*/ FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- switch (this.op) {
- case Opcode.Add:
- return "+";
- case Opcode.Sub:
- return "-";
- case Opcode.Mul:
- return "*";
- case Opcode.Div:
- return "div";
- case Opcode.Mod:
- return "mod";
- case Opcode.RealDiv:
- return "/";
- case Opcode.Pow:
- return "**";
- case Opcode.Eq:
- return "==";
- case Opcode.Neq:
- return "!=";
- case Opcode.Gt:
- return ">";
- case Opcode.Ge:
- return ">=";
- case Opcode.Lt:
- return "<";
- case Opcode.Le:
- return "<=";
- case Opcode.And:
- return "&&";
- case Opcode.Or:
- return "||";
- case Opcode.Imp:
- return "==>";
- case Opcode.Iff:
- return "<==>";
- case Opcode.Subtype:
- return "<:";
- }
- System.Diagnostics.Debug.Fail("unknown binary operator: " + op.ToString());
- throw new Exception();
- }
- }
-
- public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- //Contract.Requires(args != null);
- stream.SetToken(ref this.tok);
- Contract.Assert(args.Count == 2);
- // determine if parens are needed
- int opBindingStrength;
- bool fragileLeftContext = false; // false means "allow same binding power on left without parens"
- bool fragileRightContext = false; // false means "allow same binding power on right without parens"
- switch (this.op) {
- case Opcode.Add:
- opBindingStrength = 0x40;
- break;
- case Opcode.Sub:
- opBindingStrength = 0x40;
- fragileRightContext = true;
- break;
- case Opcode.Mul:
- opBindingStrength = 0x50;
- break;
- case Opcode.Div:
- opBindingStrength = 0x50;
- fragileRightContext = true;
- break;
- case Opcode.Mod:
- opBindingStrength = 0x50;
- fragileRightContext = true;
- break;
- case Opcode.RealDiv:
- opBindingStrength = 0x50;
- fragileRightContext = true;
- break;
- case Opcode.Pow:
- opBindingStrength = 0x60;
- fragileRightContext = true;
- break;
- case Opcode.Eq:
- case Opcode.Neq:
- case Opcode.Gt:
- case Opcode.Ge:
- case Opcode.Lt:
- case Opcode.Le:
- case Opcode.Subtype:
- opBindingStrength = 0x30;
- fragileLeftContext = fragileRightContext = true;
- break;
- case Opcode.And:
- opBindingStrength = 0x20;
- break;
- case Opcode.Or:
- opBindingStrength = 0x21;
- break;
- case Opcode.Imp:
- opBindingStrength = 0x10;
- fragileLeftContext = true;
- break;
- case Opcode.Iff:
- opBindingStrength = 0x00;
- break;
- default:
- System.Diagnostics.Debug.Fail("unknown binary operator: " + op.ToString());
- opBindingStrength = -1; // to please compiler, which refuses to consider whether or not all enumeration cases have been considered!
- break;
- }
- int opBS = opBindingStrength & 0xF0;
- int ctxtBS = contextBindingStrength & 0xF0;
- bool parensNeeded = opBS < ctxtBS ||
- (opBS == ctxtBS && (opBindingStrength != contextBindingStrength || fragileContext));
-
- var pop = stream.push(FunctionName);
- if (parensNeeded) {
- stream.Write("(");
- }
- cce.NonNull(args[0]).Emit(stream, opBindingStrength, fragileLeftContext);
- stream.sep();
- stream.Write(" {0} ", FunctionName);
- cce.NonNull(args[1]).Emit(stream, opBindingStrength, fragileRightContext);
- if (parensNeeded) {
- stream.Write(")");
- }
- stream.pop(pop);
- }
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- if (rc.TriggerMode) {
- switch (this.op) {
- case Opcode.Add:
- case Opcode.Sub:
- case Opcode.Mul:
- case Opcode.Div:
- case Opcode.Mod:
- case Opcode.RealDiv:
- case Opcode.Pow:
- case Opcode.Neq: // Neq is allowed, but not Eq
- case Opcode.Subtype:
- // These are fine
- break;
-
- case Opcode.Eq:
- rc.Error(subjectForErrorReporting, "equality is not allowed in triggers");
- break;
-
- case Opcode.Gt:
- case Opcode.Ge:
- case Opcode.Lt:
- case Opcode.Le:
- rc.Error(subjectForErrorReporting, "arithmetic comparisons are not allowed in triggers");
- break;
-
- case Opcode.And:
- case Opcode.Or:
- case Opcode.Imp:
- case Opcode.Iff:
- rc.Error(subjectForErrorReporting, "boolean operators are not allowed in triggers");
- break;
-
- default:
- System.Diagnostics.Debug.Fail("unknown binary operator: " + this.op.ToString());
- break;
- }
- }
- }
- public int ArgumentCount {
- get {
- return 2;
- }
- }
- public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- Contract.Ensures(args != null);
- Contract.Assert(args.Count == 2);
- // the default; the only binary operator with a type parameter is equality, but right
- // we don't store this parameter because it does not appear necessary
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
- Expr arg0 = cce.NonNull(args[0]);
- Expr arg1 = cce.NonNull(args[1]);
- Type arg0type = cce.NonNull(arg0.Type);
- Type arg1type = cce.NonNull(arg1.Type);
- switch (this.op) {
- case Opcode.Add:
- case Opcode.Sub:
- case Opcode.Mul:
- if (arg0type.Unify(Type.Int) && arg1type.Unify(Type.Int)) {
- return Type.Int;
- }
- if (arg0type.Unify(Type.Real) && arg1type.Unify(Type.Real)) {
- return Type.Real;
- }
- if (arg0type.IsFloat && arg0type.Unify(arg1type)) {
- return Type.GetFloatType(arg0.Type.FloatExponent, arg0.Type.FloatMantissa);
- }
- if (arg1type.IsFloat && arg1type.Unify(arg0type)) {
- return Type.GetFloatType(arg1.Type.FloatExponent, arg1.Type.FloatMantissa);
- }
- goto BAD_TYPE;
- case Opcode.Div:
- case Opcode.Mod:
- if (arg0type.Unify(Type.Int) && arg1type.Unify(Type.Int)) {
- return Type.Int;
- }
- goto BAD_TYPE;
- case Opcode.RealDiv:
- if ((arg0type.Unify(Type.Int) || arg0type.Unify(Type.Real)) &&
- (arg1type.Unify(Type.Int) || arg1type.Unify(Type.Real))) {
- return Type.Real;
- }
- if (arg0type.IsFloat && arg0type.Unify(arg1type)) {
- return Type.GetFloatType(arg0.Type.FloatExponent, arg0.Type.FloatMantissa);
- }
- if (arg1type.IsFloat && arg1type.Unify(arg0type)) {
- return Type.GetFloatType(arg1.Type.FloatExponent, arg1.Type.FloatMantissa);
- }
- goto BAD_TYPE;
- case Opcode.Pow:
- if (arg0type.Unify(Type.Real) && arg1type.Unify(Type.Real)) {
- return Type.Real;
- }
- goto BAD_TYPE;
- case Opcode.Eq:
- case Opcode.Neq:
- // Comparison is allowed if the argument types are unifiable
- // (i.e., if there is any chance that the values of the arguments are
- // in the same domain)
- if (arg0type.Equals(arg1type)) {
- // quick path
- return Type.Bool;
- }
- List<TypeVariable>/*!*/ unifiable = new List<TypeVariable>();
- unifiable.AddRange(arg0type.FreeVariables);
- unifiable.AddRange(arg1type.FreeVariables);
-
- if (arg0type.Unify(arg1type, unifiable, new Dictionary<TypeVariable/*!*/, Type/*!*/>()))
- return Type.Bool;
- goto BAD_TYPE;
- case Opcode.Gt:
- case Opcode.Ge:
- case Opcode.Lt:
- case Opcode.Le:
- if (arg0type.Unify(Type.Int) && arg1type.Unify(Type.Int)) {
- return Type.Bool;
- }
- if (arg0type.Unify(Type.Real) && arg1type.Unify(Type.Real)) {
- return Type.Bool;
- }
- if ((arg0type.IsFloat && arg0type.Unify(arg1type)) || (arg1type.IsFloat && arg1type.Unify(arg0type))) {
- return Type.Bool;
- }
- goto BAD_TYPE;
- case Opcode.And:
- case Opcode.Or:
- case Opcode.Imp:
- case Opcode.Iff:
- if (arg0type.Unify(Type.Bool) && arg1type.Unify(Type.Bool)) {
- return Type.Bool;
- }
- goto BAD_TYPE;
- case Opcode.Subtype:
- // Subtype is polymorphically typed and can compare things of
- // arbitrary types (but both arguments must have the same type)
- if (arg0type.Unify(arg1type)) {
- return Type.Bool;
- }
- goto BAD_TYPE;
- }
- System.Diagnostics.Debug.Fail("unknown binary operator: " + op.ToString());
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- BAD_TYPE:
- tc.Error(this.tok, "invalid argument types ({1} and {2}) to binary operator {0}", this.FunctionName, arg0type, arg1type);
- return null;
- }
-
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- switch (this.op) {
- case Opcode.Add:
- case Opcode.Sub:
- case Opcode.Mul:
- return cce.NonNull(args[0]).ShallowType;
-
- case Opcode.Div:
- case Opcode.Mod:
- return Type.Int;
-
- case Opcode.RealDiv:
- case Opcode.Pow:
- return Type.Real;
-
- case Opcode.Eq:
- case Opcode.Neq:
- case Opcode.Gt:
- case Opcode.Ge:
- case Opcode.Lt:
- case Opcode.Le:
- case Opcode.And:
- case Opcode.Or:
- case Opcode.Imp:
- case Opcode.Iff:
- case Opcode.Subtype:
- return Type.Bool;
-
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // unexpected binary operator
- }
- }
-
- public void ResolveOverloading(NAryExpr expr) {
- //Contract.Requires(expr != null);
-
- // immutable Expr must not be modified
- if (DoNotResolveOverloading || expr.Immutable)
- {
- return;
- }
-
- Expr arg0 = cce.NonNull(expr.Args[0]);
- Expr arg1 = cce.NonNull(expr.Args[1]);
- switch (op) {
- case Opcode.Eq:
- if (arg0.Type != null && arg0.Type.IsBool && arg1.Type != null && arg1.Type.IsBool) {
- expr.Fun = new BinaryOperator(tok, Opcode.Iff);
- }
- break;
- case Opcode.Neq:
- if (arg0.Type != null && arg0.Type.IsBool && arg1.Type != null && arg1.Type.IsBool) {
- expr.Fun = new BinaryOperator(tok, Opcode.Iff);
- var arg1New = new NAryExpr(expr.tok, new UnaryOperator(tok, UnaryOperator.Opcode.Not), new List<Expr> { arg1 });
-
- // ugly ... there should be some more general approach,
- // e.g., to typecheck the whole expression again
- arg1New.Type = Type.Bool;
- arg1New.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
-
- expr.Args[1] = arg1New;
- }
- break;
- }
- }
-
- public object Evaluate(object e1, object e2) {
- if (e1 == null || e2 == null) {
- return null;
- }
-
- switch (this.op) {
- case Opcode.Add:
- if (e1 is BigNum && e2 is BigNum) {
- return ((BigNum)e1) + ((BigNum)e2);
- }
- if (e1 is BigDec && e2 is BigDec) {
- return ((BigDec)e1) + ((BigDec)e2);
- }
- if (e1 is BigFloat && e2 is BigFloat) {
- return ((BigFloat)e1) + ((BigFloat)e2);
- }
- break;
- case Opcode.Sub:
- if (e1 is BigNum && e2 is BigNum) {
- return ((BigNum)e1) - ((BigNum)e2);
- }
- if (e1 is BigDec && e2 is BigDec) {
- return ((BigDec)e1) - ((BigDec)e2);
- }
- if (e1 is BigFloat && e2 is BigFloat) {
- return ((BigFloat)e1) - ((BigFloat)e2);
- }
- break;
- case Opcode.Mul:
- if (e1 is BigNum && e2 is BigNum) {
- return ((BigNum)e1) * ((BigNum)e2);
- }
- if (e1 is BigDec && e2 is BigDec) {
- return ((BigDec)e1) * ((BigDec)e2);
- }
- if (e1 is BigFloat && e2 is BigFloat) {
- return ((BigFloat)e1) * ((BigFloat)e2);
- }
- break;
- case Opcode.Div:
- if (e1 is BigNum && e2 is BigNum) {
- return /* TODO: right semantics? */ ((BigNum)e1) / ((BigNum)e2);
- }
- break;
- case Opcode.Mod:
- if (e1 is BigNum && e2 is BigNum) {
- return /* TODO: right semantics? */ ((BigNum)e1) % ((BigNum)e2);
- }
- break;
- case Opcode.RealDiv:
- // TODO: add partial evaluation fro real division
- break;
- case Opcode.FloatDiv:
- //TODO: add float division
- break;
- case Opcode.Pow:
- // TODO: add partial evaluation fro real exponentiation
- break;
- case Opcode.Lt:
- if (e1 is BigNum && e2 is BigNum) {
- return ((BigNum)e1) < ((BigNum)e2);
- }
- if (e1 is BigDec && e2 is BigDec) {
- return ((BigDec)e1) < ((BigDec)e2);
- }
- if (e1 is BigFloat && e2 is BigFloat) {
- return ((BigFloat)e1) < ((BigFloat)e2);
- }
- break;
- case Opcode.Le:
- if (e1 is BigNum && e2 is BigNum) {
- return ((BigNum)e1) <= ((BigNum)e2);
- }
- if (e1 is BigDec && e2 is BigDec) {
- return ((BigDec)e1) <= ((BigDec)e2);
- }
- if (e1 is BigFloat && e2 is BigFloat) {
- return ((BigFloat)e1) <= ((BigFloat)e2);
- }
- break;
- case Opcode.Gt:
- if (e1 is BigNum && e2 is BigNum) {
- return ((BigNum)e1) > ((BigNum)e2);
- }
- if (e1 is BigDec && e2 is BigDec) {
- return ((BigDec)e1) > ((BigDec)e2);
- }
- if (e1 is BigFloat && e2 is BigFloat) {
- return ((BigFloat)e1) > ((BigFloat)e2);
- }
- break;
- case Opcode.Ge:
- if (e1 is BigNum && e2 is BigNum) {
- return ((BigNum)e1) >= ((BigNum)e2);
- }
- if (e1 is BigDec && e2 is BigDec) {
- return ((BigDec)e1) >= ((BigDec)e2);
- }
- if (e1 is BigFloat && e2 is BigFloat) {
- return ((BigFloat)e1) >= ((BigFloat)e2);
- }
- break;
-
- case Opcode.And:
- if (e1 is bool && e2 is bool) {
- return (bool)e1 && (bool)e2;
- }
- break;
- case Opcode.Or:
- if (e1 is bool && e2 is bool) {
- return (bool)e1 || (bool)e2;
- }
- break;
- case Opcode.Imp:
- if (e1 is bool && e2 is bool) {
- return !(bool)e1 || (bool)e2;
- }
- break;
- case Opcode.Iff:
- if (e1 is bool && e2 is bool) {
- return e1 == e2;
- }
- break;
-
- case Opcode.Eq:
- return Equals(e1, e2);
- case Opcode.Neq:
- return !Equals(e1, e2);
-
- case Opcode.Subtype:
- throw new System.NotImplementedException();
- }
- throw new System.InvalidOperationException("bad types to binary operator " + this.op);
- }
-
- public T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
-
- }
-
- public class FunctionCall : IAppliable {
- private IdentifierExpr/*!*/ name;
- public Function Func;
- public FunctionCall(IdentifierExpr name) {
- Contract.Requires(name != null);
- this.name = name;
- }
- public FunctionCall(Function f) {
- Contract.Requires(f != null);
- this.Func = f;
- this.name = new IdentifierExpr(Token.NoToken, f.Name);
-
- // We need set the type of this IdentifierExpr so ShallowType() works
- Debug.Assert(f.OutParams.Count > 0);
- this.name.Type = f.OutParams[0].TypedIdent.Type;
- }
- public string/*!*/ FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return this.name.Name;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(name != null);
- }
-
- public FunctionCall createUnresolvedCopy()
- {
- return new FunctionCall(new IdentifierExpr(name.tok, name.Name, name.Type));
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return name.Name;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object other) {
- FunctionCall fc = other as FunctionCall;
- return fc != null && this.Func == fc.Func;
- }
- [Pure]
- public override int GetHashCode() {
- Contract.Assume(this.Func != null);
- return Func.GetHashCode();
- }
-
- virtual public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- //Contract.Requires(args != null);
- this.name.Emit(stream, 0xF0, false);
- if (stream.UseForComputingChecksums)
- {
- var c = Func.DependencyChecksum;
- if (c != null)
- {
- stream.Write(string.Format("[dependency_checksum:{0}]", c));
- }
- }
- stream.Write("(");
- args.Emit(stream);
- stream.Write(")");
- }
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- if (Func != null) {
- // already resolved
- return;
- }
- Func = rc.LookUpProcedure(name.Name) as Function;
- if (Func == null) {
- rc.Error(this.name, "use of undeclared function: {0}", name.Name);
- }
- else if (name.Type == null) {
- // We need set the type of this IdentifierExpr so ShallowType() works
- Debug.Assert(name.Type == null);
- Debug.Assert(Func.OutParams.Count > 0);
- name.Type = Func.OutParams[0].TypedIdent.Type;
- }
- }
- public virtual int ArgumentCount {
- get {
- Contract.Assume(Func != null); // ArgumentCount requires object to be properly resolved.
- return Func.InParams.Count;
- }
- }
- public virtual Type Typecheck(IList<Expr> actuals, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- //Contract.Requires(actuals != null);
- Contract.Ensures(Contract.ValueAtReturn(out actuals) != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- Contract.Assume(this.Func != null);
- Contract.Assume(actuals.Count == Func.InParams.Count);
- Contract.Assume(Func.OutParams.Count == 1);
-
- List<Type/*!*/>/*!*/ resultingTypeArgs;
- List<Type> actualResultType =
- Type.CheckArgumentTypes(Func.TypeParameters,
- out resultingTypeArgs,
- new List<Type>(Func.InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- actuals,
- new List<Type>(Func.OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
- null,
- // we need some token to report a possibly wrong number of
- // arguments
- actuals.Count > 0 ? cce.NonNull(actuals[0]).tok : Token.NoToken,
- "application of " + name.Name,
- tc);
-
- if (actualResultType == null) {
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
- return null;
- } else {
- Contract.Assert(actualResultType.Count == 1);
- tpInstantiation =
- SimpleTypeParamInstantiation.From(Func.TypeParameters, resultingTypeArgs);
- return actualResultType[0];
- }
- }
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Assume(name.Type != null);
- return name.Type;
- }
-
- public virtual T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
- }
-
- public class TypeCoercion : IAppliable {
- private IToken/*!*/ tok;
- public Type/*!*/ Type;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(tok != null);
- }
-
- public TypeCoercion(IToken tok, Type type) {
- Contract.Requires(type != null);
- Contract.Requires(tok != null);
- this.tok = tok;
- this.Type = type;
- }
-
- public override bool Equals(object obj) {
- TypeCoercion other = obj as TypeCoercion;
- if (other == null) {
- return false;
- } else {
- return object.Equals(Type, other.Type);
- }
- }
-
-
-
- public
- string/*!*/ FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- return ":";
- }
- }
-
- public void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
- int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(args != null);
- //Contract.Requires(stream != null);
- stream.SetToken(ref this.tok);
- Contract.Assert(args.Count == 1);
- // determine if parens are needed
- int opBindingStrength = 0x80;
- bool parensNeeded = opBindingStrength < contextBindingStrength ||
- (fragileContext && opBindingStrength == contextBindingStrength);
-
- if (parensNeeded)
- stream.Write("(");
-
- cce.NonNull(args[0]).Emit(stream, opBindingStrength, false);
- stream.Write("{0} ", FunctionName);
- Type.Emit(stream, 0);
-
- if (parensNeeded)
- stream.Write(")");
- }
-
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- this.Type = this.Type.ResolveType(rc);
- }
-
- public int ArgumentCount {
- get {
- return 1;
- }
- }
-
- public Type Typecheck(IList<Expr>/*!*/ args,
- out TypeParamInstantiation/*!*/ tpInstantiation,
- TypecheckingContext/*!*/ tc) {
- //Contract.Requires(args != null);
- //Contract.Requires(tc != null);
- Contract.Ensures(args != null);
-
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
-
- Contract.Assume(args.Count == 1);
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
-
- if (!this.Type.Unify(cce.NonNull(cce.NonNull(args[0]).Type)))
- tc.Error(this.tok, "{0} cannot be coerced to {1}",
- cce.NonNull(args[0]).Type, this.Type);
- return this.Type;
- }
-
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.Type;
- }
-
- public T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
-
- }
-
- public class ArithmeticCoercion : IAppliable {
- public enum CoercionType {
- ToInt,
- ToReal,
- ToFloat
- }
-
- private IToken/*!*/ tok;
- public readonly CoercionType Coercion;
- private readonly string name;
- private readonly Type type;
- private readonly Type argType;
- private readonly Type argType2;
- private readonly int hashCode;
-
- public ArithmeticCoercion(IToken tok, CoercionType coercion) {
- this.tok = tok;
- this.Coercion = coercion;
-
- switch (coercion) {
- case CoercionType.ToInt:
- this.name = "int";
- this.type = Type.Int;
- this.argType = Type.Real;
- this.hashCode = 1;
- break;
- case CoercionType.ToReal:
- this.name = "real";
- this.type = Type.Real;
- this.argType = Type.Int;
- this.hashCode = 2;
- break;
- default:
- Contract.Assert(false);
- break;
- }
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return this.name;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object other) {
- ArithmeticCoercion ac = other as ArithmeticCoercion;
- return ac != null && this.Coercion == ac.Coercion;
- }
-
- [Pure]
- public override int GetHashCode() {
- return this.hashCode;
- }
-
- public string/*!*/ FunctionName {
- get {
- return this.name;
- }
- }
-
- public int ArgumentCount {
- get {
- return 1;
- }
- }
-
- virtual public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- //Contract.Requires(args != null);
- stream.Write(this.name);
- stream.Write("(");
- args.Emit(stream);
- stream.Write(")");
- }
-
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- }
-
- public virtual Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- //Contract.Requires(args != null);
- Contract.Ensures(args != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
-
- Contract.Assert(args.Count == 1);
-
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
-
- if (!(cce.NonNull(cce.NonNull(args[0]).Type).Unify(argType) || cce.NonNull(cce.NonNull(args[0]).Type).Unify(argType2)))
- {
- tc.Error(this.tok, "argument type {0} does not match expected type {1} or type {2}", cce.NonNull(args[0]).Type, this.argType, this.argType2);
- }
-
- return this.type;
- }
-
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.type;
- }
-
- public virtual T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
- }
-
- public class NAryExpr : Expr {
- [Additive]
- [Peer]
- private IAppliable _Fun;
- public IAppliable/*!*/ Fun {
- get {
- return _Fun;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Cannot change Function used by Immutable NAryExpr");
-
- _Fun = value;
- }
- }
- private List<Expr> _Args;
- public IList<Expr> Args {
- get {
- if (Immutable)
- return _Args.AsReadOnly();
- else
- return _Args;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Cannot change Args of Immutable NAryExpr");
-
- _Args = value as List<Expr>;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Fun != null);
- Contract.Invariant(Args != null);
- }
-
-
- // The instantiation of type parameters that is determined during type checking.
- // Which type parameters are available depends on the IAppliable
- public TypeParamInstantiation TypeParameters = null;
-
- [Captured]
- public NAryExpr(IToken/*!*/ tok, IAppliable/*!*/ fun, IList<Expr>/*!*/ args, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(fun != null);
- Contract.Requires(args != null);
- _Fun = fun;
- Contract.Assert(Contract.ForAll(0, args.Count, index => args[index] != null));
- if (immutable) {
- // We need to make a new list because the client might be holding
- // references to the list that they gave us which could be used to
- // circumvent the immutability enforcement
- _Args = new List<Expr>(args);
- CachedHashCode = ComputeHashCode();
- } else {
- if (args is List<Expr>) {
- // Preserve NAryExpr's old behaviour, we take ownership of the List<Expr>.
- // We can only do this if the type matches
- _Args = args as List<Expr>;
- }
- else {
- // Otherwise we must make a copy
- _Args = new List<Expr> (args);
- }
- }
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is NAryExpr))
- return false;
-
- NAryExpr other = (NAryExpr)obj;
- return object.Equals(this.Fun, other.Fun) && this.Args.SequenceEqual(other.Args);
- }
-
- [Pure]
- public override int GetHashCode() {
- if (Immutable)
- return this.CachedHashCode;
- else
- return ComputeHashCode();
- }
-
- [Pure]
- public override int ComputeHashCode() {
- int h = this.Fun.GetHashCode();
- // DO NOT USE Args.GetHashCode() because that uses Object.GetHashCode() which uses references
- // We want structural equality
- foreach (var arg in Args) {
- h = (97*h) + arg.GetHashCode();
- }
- return h;
- }
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
- Fun.Emit(Args, stream, contextBindingStrength, fragileContext);
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Fun.Resolve(rc, this);
- foreach (Expr/*!*/ e in Args) {
- Contract.Assert(e != null);
- e.Resolve(rc);
- }
- }
- public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- //Contract.Requires(freeVars != null);
- foreach (Expr/*!*/ e in Args) {
- Contract.Assert(e != null);
- e.ComputeFreeVariables(freeVars);
- }
- // also add the free type variables
- if (TypeParameters != null) {
- foreach (TypeVariable/*!*/ var in TypeParameters.FormalTypeParams) {
- Contract.Assert(var != null);
- foreach (TypeVariable/*!*/ w in TypeParameters[var].FreeVariables) {
- Contract.Assert(w != null);
- freeVars.Add(w);
- }
- }
- }
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- int prevErrorCount = tc.ErrorCount;
- foreach (Expr/*!*/ e in Args) {
- Contract.Assert(e != null);
- e.Typecheck(tc);
- }
- if (Fun.ArgumentCount != Args.Count) {
- tc.Error(this, "wrong number of arguments to function: {0} ({1} instead of {2})",
- Fun.FunctionName, Args.Count, Fun.ArgumentCount);
- } else if (tc.ErrorCount == prevErrorCount &&
- // if the type parameters are set, this node has already been
- // typechecked and does not need to be checked again
- TypeParameters == null) {
- TypeParamInstantiation tpInsts;
- Type = Fun.Typecheck(Args, out tpInsts, tc); // Make sure we pass Args so if this Expr is immutable it is protected
- TypeParameters = tpInsts;
- }
- IOverloadedAppliable oa = Fun as IOverloadedAppliable;
- if (oa != null) {
- oa.ResolveOverloading(this);
- }
- if (Type == null) {
- // set Type to some non-null value
- Type = new TypeProxy(this.tok, "type_checking_error");
- }
- }
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return Fun.ShallowType(Args);
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitNAryExpr(this);
- }
- }
-
- public class MapSelect : IAppliable {
-
- public readonly int Arity;
- private readonly IToken/*!*/ tok;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(tok != null);
- }
-
-
- public MapSelect(IToken tok, int arity) {
- Contract.Requires(tok != null);
- this.tok = tok;
- this.Arity = arity;
- }
-
- public string/*!*/ FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- return "MapSelect";
- }
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (!(obj is MapSelect))
- return false;
-
- MapSelect other = (MapSelect)obj;
- return this.Arity == other.Arity;
- }
-
- [Pure]
- public override int GetHashCode() {
- return Arity.GetHashCode() * 2823;
- }
-
- public void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
- int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(args != null);
- //Contract.Requires(stream != null);
- Contract.Assume(args.Count == Arity + 1);
- Emit(args, stream, contextBindingStrength, fragileContext, false);
- }
-
- public static void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
- int contextBindingStrength, bool fragileContext,
- bool withRhs) {
- Contract.Requires(args != null);
- Contract.Requires(stream != null);
- const int opBindingStrength = 0x90;
- bool parensNeeded = opBindingStrength < contextBindingStrength ||
- (fragileContext && opBindingStrength == contextBindingStrength);
-
- if (parensNeeded) {
- stream.Write("(");
- }
- cce.NonNull(args[0]).Emit(stream, opBindingStrength, false);
- stream.Write("[");
-
- string sep = "";
- int lastIndex = withRhs ? args.Count - 1 : args.Count;
- for (int i = 1; i < lastIndex; ++i) {
- stream.Write(sep);
- sep = ", ";
- cce.NonNull(args[i]).Emit(stream);
- }
-
- if (withRhs) {
- stream.Write(" := ");
- cce.NonNull(args.Last()).Emit(stream);
- }
-
- stream.Write("]");
- if (parensNeeded) {
- stream.Write(")");
- }
- }
-
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- // PR: nothing?
- }
-
- public int ArgumentCount {
- get {
- return Arity + 1;
- }
- }
-
- // it is assumed that each of the arguments has already been typechecked
- public static Type Typecheck(Type/*!*/ mapType,
- // we just pass an Absy, because in
- // the AssignCmd maps can also be
- // represented by non-expressions
- Absy/*!*/ map,
- List<Expr>/*!*/ indexes,
- // the type parameters, in this context, are the parameters of the
- // potentially polymorphic map type. Because it might happen that
- // the whole map type is unknown and represented using a MapTypeProxy,
- // the instantiations given in the following out-parameter are subject
- // to change if further unifications are done.
- out TypeParamInstantiation/*!*/ tpInstantiation,
- TypecheckingContext/*!*/ tc,
- IToken/*!*/ typeCheckingSubject,
- string/*!*/ opName) {
- Contract.Requires(mapType != null);
- Contract.Requires(map != null);
- Contract.Requires(indexes != null);
- Contract.Requires(tc != null);
- Contract.Requires(typeCheckingSubject != null);
- Contract.Requires(opName != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
-
- mapType = mapType.Expanded;
- if (mapType.IsMap && mapType.MapArity != indexes.Count) {
- tc.Error(typeCheckingSubject, "wrong number of arguments in {0}: {1} instead of {2}",
- opName, indexes.Count, mapType.MapArity);
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
- return null;
- } else if (!mapType.Unify(new MapTypeProxy(map.tok, "select", indexes.Count))) {
- tc.Error(map.tok, "{0} applied to a non-map: {1}", opName, map);
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
- return null;
- }
- mapType = TypeProxy.FollowProxy(mapType);
-
- if (mapType is MapType) {
- MapType mt = (MapType)mapType;
- return mt.CheckArgumentTypes(indexes, out tpInstantiation,
- typeCheckingSubject, opName, tc);
- } else {
- MapTypeProxy mt = (MapTypeProxy)mapType;
- return mt.CheckArgumentTypes(indexes, out tpInstantiation,
- typeCheckingSubject, opName, tc);
- }
- }
-
- public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- Contract.Assume(args.Count == Arity + 1);
-
- // FIXME: Wny are we passing a copy?
- List<Expr> actualArgs = new List<Expr>();
- for (int i = 1; i < args.Count; ++i)
- actualArgs.Add(args[i]);
-
- return Typecheck(cce.NonNull(cce.NonNull(args[0]).Type), cce.NonNull(args[0]),
- actualArgs, out tpInstantiation, tc, this.tok, "map select");
- }
-
- /// <summary>
- /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
- /// </summary>
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Expr a0 = cce.NonNull(args[0]);
- Type a0Type = a0.ShallowType;
- if (a0Type == null || !a0Type.IsMap) {
- // we are unable to determine the type of the select, so just return an arbitrary type
- return Type.Int;
- }
- MapType mapType = a0Type.AsMap;
- List<Type> actualArgTypes = new List<Type>();
- for (int i = 1; i < args.Count; ++i) {
- actualArgTypes.Add(cce.NonNull(args[i]).ShallowType);
- }
- return Type.InferValueType(mapType.TypeParameters, mapType.Arguments, mapType.Result, actualArgTypes);
- }
-
- public T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
- }
-
- public class MapStore : IAppliable {
-
- public readonly int Arity;
- public readonly IToken/*!*/ tok;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(tok != null);
- }
-
-
- public MapStore(IToken tok, int arity) {
- Contract.Requires(tok != null);
- this.tok = tok;
- this.Arity = arity;
- }
-
- public string/*!*/ FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- return "MapStore";
- }
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (!(obj is MapStore))
- return false;
-
- MapStore other = (MapStore)obj;
- return this.Arity == other.Arity;
- }
-
- [Pure]
- public override int GetHashCode() {
- return Arity.GetHashCode() * 28231;
- }
-
- public void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
- int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(args != null);
- //Contract.Requires(stream != null);
- Contract.Assert(args.Count == Arity + 2);
- MapSelect.Emit(args, stream, contextBindingStrength, fragileContext, true);
- }
-
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- // PR: nothing?
- }
-
- public int ArgumentCount {
- get {
- return Arity + 2;
- }
- }
-
- // it is assumed that each of the arguments has already been typechecked
- public static Type Typecheck(IList<Expr>/*!*/ args, out TypeParamInstantiation/*!*/ tpInstantiation,
- TypecheckingContext/*!*/ tc,
- IToken/*!*/ typeCheckingSubject,
- string/*!*/ opName) {
- Contract.Requires(args != null);
- Contract.Requires(tc != null);
- Contract.Requires(typeCheckingSubject != null);
- Contract.Requires(opName != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
-
- // part of the type checking works exactly as for MapSelect
- List<Expr> selectArgs = new List<Expr>();
- for (int i = 1; i < args.Count - 1; ++i)
- selectArgs.Add(args[i]);
- Type resultType =
- MapSelect.Typecheck(cce.NonNull(cce.NonNull(args[0]).Type), cce.NonNull(args[0]),
- selectArgs, out tpInstantiation, tc, typeCheckingSubject, opName);
-
- // check the the rhs has the right type
- if (resultType == null) {
- // error messages have already been created by MapSelect.Typecheck
- return null;
- }
- Type rhsType = cce.NonNull(cce.NonNull(args.Last()).Type);
- if (!resultType.Unify(rhsType)) {
- tc.Error(cce.NonNull(args.Last()).tok,
- "right-hand side in {0} with wrong type: {1} (expected: {2})",
- opName, rhsType, resultType);
- return null;
- }
-
- return cce.NonNull(args[0]).Type;
- }
-
- public Type Typecheck(IList<Expr>/*!*/ args,
- out TypeParamInstantiation/*!*/ tpInstantiation,
- TypecheckingContext/*!*/ tc) {
- //Contract.Requires(args != null);
- //Contract.Requires(tc != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- Contract.Ensures(Contract.ValueAtReturn(out args) != null);
- Contract.Assert(args.Count == Arity + 2);
- return Typecheck(args, out tpInstantiation, tc, this.tok, "map store");
- }
-
- /// <summary>
- /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
- /// </summary>
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return cce.NonNull(args[0]).ShallowType;
- }
-
- public T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
- }
-
-
- public class IfThenElse : IAppliable {
-
- private IToken/*!*/ _tok;
-
- public IToken/*!*/ tok
- {
- get
- {
- Contract.Ensures(Contract.Result<IToken>() != null);
- return this._tok;
- }
- set
- {
- Contract.Requires(value != null);
- this._tok = value;
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this._tok != null);
- }
-
- public IfThenElse(IToken tok) {
- Contract.Requires(tok != null);
- this._tok = tok;
- }
-
- public string/*!*/ FunctionName {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
-
- return "if-then-else";
- }
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (!(obj is IfThenElse))
- return false;
- return true;
- }
-
- [Pure]
- public override int GetHashCode() {
- return 1;
- }
-
- public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- //Contract.Requires(args != null);
- stream.SetToken(this);
- Contract.Assert(args.Count == 3);
- stream.push();
- stream.Write("(if ");
- cce.NonNull(args[0]).Emit(stream, 0x00, false);
- stream.sep();
- stream.Write(" then ");
- cce.NonNull(args[1]).Emit(stream, 0x00, false);
- stream.sep();
- stream.Write(" else ");
- cce.NonNull(args[2]).Emit(stream, 0x00, false);
- stream.Write(")");
- stream.pop();
- }
-
- public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
- //Contract.Requires(subjectForErrorReporting != null);
- //Contract.Requires(rc != null);
- // PR: nothing?
- }
-
- public int ArgumentCount {
- get {
- return 3;
- }
- }
-
- public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- //Contract.Requires(args != null);
- Contract.Ensures(args != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- Contract.Assert(args.Count == 3);
- // the default; the only binary operator with a type parameter is equality, but right
- // we don't store this parameter because it does not appear necessary
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
- Expr arg0 = cce.NonNull(args[0]);
- Expr arg1 = cce.NonNull(args[1]);
- Expr arg2 = cce.NonNull(args[2]);
-
- if (!cce.NonNull(arg0.Type).Unify(Type.Bool)) {
- tc.Error(this.tok, "the first argument to if-then-else should be bool, not {0}", arg0.Type);
- } else if (!cce.NonNull(arg1.Type).Unify(cce.NonNull(arg2.Type))) {
- tc.Error(this.tok, "branches of if-then-else have incompatible types {0} and {1}", arg1.Type, arg2.Type);
- } else {
- return arg1.Type;
- }
-
- return null;
- }
-
- /// <summary>
- /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
- /// </summary>
- public Type ShallowType(IList<Expr> args) {
- //Contract.Requires(args != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return cce.NonNull(args[1]).ShallowType;
- }
-
- public T Dispatch<T>(IAppliableVisitor<T> visitor) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this);
- }
- }
-
-
-
- public class CodeExpr : Expr {
- public List<Variable>/*!*/ LocVars;
- [Rep]
- public List<Block/*!*/>/*!*/ Blocks;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(LocVars != null);
- Contract.Invariant(cce.NonNullElements(Blocks));
- }
-
- public CodeExpr(List<Variable>/*!*/ localVariables, List<Block/*!*/>/*!*/ blocks, bool immutable=false)
- : base(Token.NoToken, immutable) {
- Contract.Requires(localVariables != null);
- Contract.Requires(cce.NonNullElements(blocks));
- Contract.Requires(0 < blocks.Count);
- LocVars = localVariables;
- Blocks = blocks;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- // FIXME: This seems wrong we don't want reference equality, we want structural equality
- [Pure]
- public override bool Equals(object obj)
- {
- return base.Equals(obj);
- }
-
- [Pure]
- public override int GetHashCode()
- {
- if (Immutable)
- return CachedHashCode;
- else
- return ComputeHashCode();
- }
-
- [Pure]
- public override int ComputeHashCode() {
- return base.GetHashCode();
- }
-
-
- public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- //Contract.Requires(freeVars != null);
- // Treat a BlockEexpr as if it has no free variables at all
- }
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- //level++;
- int level = 0;
- stream.WriteLine(level, "|{");
-
- if (this.LocVars.Count > 0) {
- stream.Write(level + 1, "var ");
- this.LocVars.Emit(stream, true);
- stream.WriteLine(";");
- }
-
- foreach (Block/*!*/ b in this.Blocks) {
- Contract.Assert(b != null);
- b.Emit(stream, level + 1);
- }
-
- stream.WriteLine();
- stream.WriteLine(level, "}|");
-
- stream.WriteLine();
- stream.WriteLine();
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
-
- rc.PushVarContext();
- foreach (Variable/*!*/ v in LocVars) {
- Contract.Assert(v != null);
- v.Register(rc);
- v.Resolve(rc);
- }
-
- rc.PushProcedureContext();
- foreach (Block/*!*/ b in Blocks) {
- Contract.Assert(b != null);
- b.Register(rc);
- }
-
- foreach (Block/*!*/ b in Blocks) {
- Contract.Assert(b != null);
- b.Resolve(rc);
- }
-
- rc.PopProcedureContext();
- rc.PopVarContext();
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- foreach (Variable/*!*/ v in LocVars) {
- Contract.Assert(v != null);
- v.Typecheck(tc);
- }
- foreach (Block/*!*/ b in Blocks) {
- Contract.Assert(b != null);
- b.Typecheck(tc);
- }
- this.Type = Type.Bool;
- }
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return Type.Bool;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitCodeExpr(this);
- }
- }
-
- public class BvExtractExpr : Expr {
- private /*readonly--except in StandardVisitor*/ Expr/*!*/ _Bitvector;
- public Expr Bitvector {
- get {
- return _Bitvector;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Cannot change BitVector field of an immutable BvExtractExpr");
-
- _Bitvector = value;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(_Bitvector != null);
- }
-
- public readonly int Start, End;
-
- public BvExtractExpr(IToken/*!*/ tok, Expr/*!*/ bv, int end, int start, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(bv != null);
- _Bitvector = bv;
- Start = start;
- End = end;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is BvExtractExpr))
- return false;
-
- BvExtractExpr other = (BvExtractExpr)obj;
- return object.Equals(this.Bitvector, other.Bitvector) &&
- this.Start.Equals(other.Start) && this.End.Equals(other.End);
- }
-
- [Pure]
- public override int GetHashCode() {
- if (Immutable)
- return CachedHashCode;
- else
- return ComputeHashCode();
- }
-
- [Pure]
- public override int ComputeHashCode() {
- int h = this.Bitvector.GetHashCode();
- h ^= Start * 17 ^ End * 13;
- return h;
- }
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
- int opBindingStrength = 0x90;
- bool parensNeeded = opBindingStrength < contextBindingStrength ||
- (fragileContext && opBindingStrength == contextBindingStrength);
-
- if (parensNeeded) {
- stream.Write("(");
- }
- Bitvector.Emit(stream, opBindingStrength, false);
- stream.Write("[" + End + ":" + Start + "]");
- if (parensNeeded) {
- stream.Write(")");
- }
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Bitvector.Resolve(rc);
- }
- public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- //Contract.Requires(freeVars != null);
- Bitvector.ComputeFreeVariables(freeVars);
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- Bitvector.Typecheck(tc);
- Contract.Assert(Bitvector.Type != null); // follows from postcondition of Expr.Typecheck
-
- if (Start < 0) {
- tc.Error(this, "start index in extract must not be negative");
- } else if (End < 0) {
- tc.Error(this, "end index in extract must not be negative");
- } else if (End < Start) {
- tc.Error(this, "start index in extract must be no bigger than the end index");
- } else {
- Type typeConstraint = new BvTypeProxy(this.tok, "extract", End - Start);
- if (typeConstraint.Unify(Bitvector.Type)) {
- Type = Type.GetBvType(End - Start);
- } else {
- tc.Error(this, "extract operand must be a bitvector of at least {0} bits (got {1})", End - Start, Bitvector.Type);
- }
- }
- if (Type == null) {
- Type = new TypeProxy(this.tok, "type_checking_error");
- }
- }
-
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return Type.GetBvType(End - Start);
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitBvExtractExpr(this);
- }
- }
-
- public class BvConcatExpr : Expr {
- private /*readonly--except in StandardVisitor*/ Expr/*!*/ _E0, _E1;
- public Expr E0 {
- get {
- return _E0;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Can't change E0 reference on immutable Expr");
-
- _E0 = value;
- }
- }
- public Expr E1 {
- get {
- return _E1;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException("Can't change E1 reference on immutable Expr");
-
- _E1 = value;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(E0 != null);
- Contract.Invariant(E1 != null);
- }
-
-
- public BvConcatExpr(IToken/*!*/ tok, Expr/*!*/ e0, Expr/*!*/ e1, bool immutable=false)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- _E0 = e0;
- _E1 = e1;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- if (obj == null)
- return false;
- if (!(obj is BvConcatExpr))
- return false;
-
- BvConcatExpr other = (BvConcatExpr)obj;
- return object.Equals(this.E0, other.E0) && object.Equals(this.E1, other.E1);
- }
-
- [Pure]
- public override int GetHashCode()
- {
- if (Immutable)
- return CachedHashCode;
- else
- return ComputeHashCode();
- }
-
- [Pure]
- public override int ComputeHashCode() {
- int h = this.E0.GetHashCode() ^ this.E1.GetHashCode() * 17;
- return h;
- }
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
- int opBindingStrength = 0x32;
- bool parensNeeded = opBindingStrength < contextBindingStrength ||
- (fragileContext && opBindingStrength == contextBindingStrength);
-
- if (parensNeeded) {
- stream.Write("(");
- }
- E0.Emit(stream, opBindingStrength, false);
- stream.Write(" ++ ");
- // while this operator is associative, our incomplete axioms in int translation don't
- // make much use of it, so better stick to the actual tree shape
- E1.Emit(stream, opBindingStrength, true);
- if (parensNeeded) {
- stream.Write(")");
- }
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- E0.Resolve(rc);
- E1.Resolve(rc);
- }
- public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- //Contract.Requires(freeVars != null);
- E0.ComputeFreeVariables(freeVars);
- E1.ComputeFreeVariables(freeVars);
- }
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- E0.Typecheck(tc);
- Contract.Assert(E0.Type != null); // follows from postcondition of Expr.Typecheck
- E1.Typecheck(tc);
- Contract.Assert(E1.Type != null); // follows from postcondition of Expr.Typecheck
-
- if (E0.Type.Unify(new BvTypeProxy(this.tok, "concat0", 0)) && E1.Type.Unify(new BvTypeProxy(this.tok, "concat1", 0))) {
- Type = new BvTypeProxy(this.tok, "concat", E0.Type, E1.Type);
- } else {
- tc.Error(this, "++ operands need to be bitvectors (got {0}, {1})", E0.Type, E1.Type);
- }
- if (Type == null) {
- Type = new TypeProxy(this.tok, "type_checking_error");
- }
- }
-
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- Type t0 = E0.ShallowType;
- Type t1 = E1.ShallowType;
- int len0 = t0.IsBv ? t0.BvBits : /*expression is not type correct, so just pick an arbitrary number of bits*/0;
- int len1 = t1.IsBv ? t1.BvBits : /*expression is not type correct, so just pick an arbitrary number of bits*/0;
- return Type.GetBvType(len0 + len1);
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitBvConcatExpr(this);
- }
- }
-}
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// BoogiePL - Absy.cs
+//---------------------------------------------------------------------------------------------
+
+namespace Microsoft.Boogie {
+ using System;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Collections.Generic;
+ using Microsoft.Boogie.AbstractInterpretation;
+ using System.Diagnostics.Contracts;
+ using System.Linq;
+ using Microsoft.Basetypes;
+
+ using Set = GSet<object>; // not that the set used is not a set of Variable only, as it also contains TypeVariables
+
+
+ //---------------------------------------------------------------------
+ // Expressions
+ //
+ // For expressions, we override the Equals and GetHashCode method to
+ // implement structural equality. Note this is not logical equivalence
+ // and is not modulo alpha-renaming.
+ //---------------------------------------------------------------------
+
+
+ [ContractClass(typeof(ExprContracts))]
+ public abstract class Expr : Absy {
+ public Expr(IToken/*!*/ tok, bool immutable)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ this.Immutable = immutable;
+ }
+
+ public void Emit(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ Emit(stream, 0, false);
+ }
+
+ /// <summary>
+ /// If true the client is making a promise that this Expr will be
+ /// treated immutably (i.e. once constructed it is never changed).
+ /// This is currently not enforced but it should be!
+ ///
+ /// This allows the Expr's hash code to be cached making calls to
+ /// GetHashCode() very cheap.
+ /// </summary>
+ /// <value><c>true</c> if immutable; otherwise, <c>false</c>.</value>
+ public bool Immutable {
+ get;
+ private set;
+ }
+
+ /// <summary>
+ /// Computes the hash code of this Expr skipping any cache.
+ ///
+ /// Sub classes should place their implementation of computing their hashcode
+ /// here (making sure to call GetHashCode() not ComputeHashCode() on Expr for performance reasons)
+ /// and have GetHashCode() use a cached result from ComputeHashCode() if the
+ /// Expr was constructed to be immutable.
+ /// </summary>
+ /// <returns>The hash code.</returns>
+ public abstract int ComputeHashCode();
+ protected int CachedHashCode = 0;
+
+ public abstract void Emit(TokenTextWriter/*!*/ wr, int contextBindingStrength, bool fragileContext);
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
+ this.Emit(stream, 0, false);
+ }
+ return buffer.ToString();
+ }
+
+ /// <summary>
+ /// Add to "freeVars" the free variables in the expression.
+ /// </summary>
+ public abstract void ComputeFreeVariables(Set /*Variable*//*!*/ freeVars);
+
+ /// <summary>
+ /// Filled in by the Typecheck method. A value of "null" means a succeeding
+ /// call to Typecheck has not taken place (that is, either Typecheck hasn't
+ /// been called or Typecheck encountered an error in the expression to be
+ /// typechecked).
+ /// </summary>
+ private Type _Type = null;
+ public Type Type {
+ get {
+ return _Type;
+ }
+ set {
+ if (_Type == null) {
+ // Expr has never been type checked so always allow this
+ _Type = value;
+ } else {
+ if (Immutable && !_Type.Equals(value))
+ throw new InvalidOperationException("Cannot change the Type of an Immutable Expr");
+
+ // Once the Type has been set (i.e. no longer null) we never change the reference
+ // if this Expr is immutable, even if the Type is equivalent (i.e. _Type.Equals(newType))
+ if (!Immutable)
+ _Type = value;
+ }
+ }
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ Contract.Ensures(Type != null);
+ // This body is added only because C# insists on it. It should really be left out, as if TypeCheck still were abstract.
+ // The reason for mentioning the method here at all is to give TypeCheck a postcondition for all expressions.
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ /// <summary>
+ /// Returns the type of the expression, supposing that all its subexpressions are well typed.
+ /// </summary>
+ public abstract Type/*!*/ ShallowType {
+ get;
+ }
+
+ // Handy syntactic sugar follows:
+
+ public static NAryExpr Unary(IToken x, UnaryOperator.Opcode op, Expr e1) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(x != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return new NAryExpr(x, new UnaryOperator(x, op), new List<Expr> { e1 });
+ }
+
+ public static NAryExpr Binary(IToken x, BinaryOperator.Opcode op, Expr e0, Expr e1) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e0 != null);
+ Contract.Requires(x != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return new NAryExpr(x, new BinaryOperator(x, op), new List<Expr> { e0, e1 });
+ }
+
+ public static NAryExpr Binary(BinaryOperator.Opcode op, Expr e0, Expr e1) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e0 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(Token.NoToken, op, e0, e1);
+ }
+
+ public static NAryExpr Eq(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Eq, e1, e2);
+ }
+ public static NAryExpr Neq(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Neq, e1, e2);
+ }
+ public static NAryExpr Le(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Le, e1, e2);
+ }
+ public static NAryExpr Ge(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Ge, e1, e2);
+ }
+ public static NAryExpr Lt(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Lt, e1, e2);
+ }
+ public static NAryExpr Gt(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Gt, e1, e2);
+ }
+ public static Expr And(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ if (e1 == true_) {
+ return e2;
+ } else if (e2 == true_) {
+ return e1;
+ } else if (e1 == false_ || e2 == false_) {
+ return false_;
+ } else {
+ var res = Binary(BinaryOperator.Opcode.And, e1, e2);
+ res.Type = Microsoft.Boogie.Type.Bool;
+ res.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ return res;
+ }
+ }
+ public static Expr Or(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ if (e1 == false_) {
+ return e2;
+ } else if (e2 == false_) {
+ return e1;
+ } else if (e1 == true_ || e2 == true_) {
+ return true_;
+ } else {
+ return Binary(BinaryOperator.Opcode.Or, e1, e2);
+ }
+ }
+ public static Expr Not(Expr e1) {
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ NAryExpr nary = e1 as NAryExpr;
+
+ if (e1 == true_) {
+ return false_;
+ } else if (e1 == false_) {
+ return true_;
+ } else if (nary != null) {
+ if (nary.Fun is UnaryOperator) {
+ UnaryOperator op = (UnaryOperator)nary.Fun;
+ if (op.Op == UnaryOperator.Opcode.Not) {
+ return cce.NonNull(nary.Args[0]);
+ }
+ } else if (nary.Fun is BinaryOperator) {
+ BinaryOperator op = (BinaryOperator)nary.Fun;
+ Expr arg0 = cce.NonNull(nary.Args[0]);
+ Expr arg1 = cce.NonNull(nary.Args[1]);
+ if (op.Op == BinaryOperator.Opcode.Eq) {
+ return Neq(arg0, arg1);
+ } else if (op.Op == BinaryOperator.Opcode.Neq) {
+ return Eq(arg0, arg1);
+ } else if (op.Op == BinaryOperator.Opcode.Lt) {
+ return Le(arg1, arg0);
+ } else if (op.Op == BinaryOperator.Opcode.Le) {
+ return Lt(arg1, arg0);
+ } else if (op.Op == BinaryOperator.Opcode.Ge) {
+ return Gt(arg1, arg0);
+ } else if (op.Op == BinaryOperator.Opcode.Gt) {
+ return Ge(arg1, arg0);
+ }
+ }
+ }
+
+ return Unary(Token.NoToken, UnaryOperator.Opcode.Not, e1);
+ }
+
+ public static Expr Neg(Expr e1) {
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return Unary(Token.NoToken, UnaryOperator.Opcode.Neg, e1);
+ }
+
+ public static NAryExpr Imp(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Imp, e1, e2);
+ }
+ public static NAryExpr Iff(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Iff, e1, e2);
+ }
+ public static NAryExpr Add(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Add, e1, e2);
+ }
+ public static NAryExpr Sub(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Sub, e1, e2);
+ }
+ public static NAryExpr Mul(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Mul, e1, e2);
+ }
+ public static NAryExpr Div(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Div, e1, e2);
+ }
+ public static NAryExpr Mod(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Mod, e1, e2);
+ }
+ public static NAryExpr RealDiv(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.RealDiv, e1, e2);
+ }
+ public static NAryExpr FloatDiv(Expr e1, Expr e2)
+ {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.FloatDiv, e1, e2);
+ }
+ public static NAryExpr Pow(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Pow, e1, e2);
+ }
+ public static NAryExpr Subtype(Expr e1, Expr e2) {
+ Contract.Requires(e2 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Binary(BinaryOperator.Opcode.Subtype, e1, e2);
+ }
+
+ public static IdentifierExpr Ident(string name, Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires(name != null);
+ Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
+ return new IdentifierExpr(Token.NoToken, name, type);
+ }
+
+ public static IdentifierExpr Ident(Variable decl) {
+ Contract.Requires(decl != null);
+ Contract.Ensures(Contract.Result<IdentifierExpr>() != null);
+ IdentifierExpr result = new IdentifierExpr(Token.NoToken, decl);
+ return result;
+ }
+
+ public static LiteralExpr Literal(bool value) {
+ Contract.Ensures(Contract.Result<LiteralExpr>() != null);
+ return new LiteralExpr(Token.NoToken, value);
+ }
+ public static LiteralExpr Literal(int value) {
+ Contract.Ensures(Contract.Result<LiteralExpr>() != null);
+ return new LiteralExpr(Token.NoToken, BigNum.FromInt(value));
+ }
+ public static LiteralExpr Literal(BigNum value) {
+ Contract.Ensures(Contract.Result<LiteralExpr>() != null);
+ return new LiteralExpr(Token.NoToken, value);
+ }
+ public static LiteralExpr Literal(BigDec value) {
+ Contract.Ensures(Contract.Result<LiteralExpr>() != null);
+ return new LiteralExpr(Token.NoToken, value);
+ }
+ public static LiteralExpr Literal(BigFloat value)
+ {
+ Contract.Ensures(Contract.Result<LiteralExpr>() != null);
+ return new LiteralExpr(Token.NoToken, value);
+ }
+
+ private static LiteralExpr/*!*/ true_ = Literal(true);
+ public static LiteralExpr/*!*/ True {
+ get {
+ Contract.Ensures(Contract.Result<LiteralExpr>() != null);
+ return true_;
+ }
+ }
+
+ private static LiteralExpr/*!*/ false_ = Literal(false);
+ public static LiteralExpr/*!*/ False {
+ get {
+ Contract.Ensures(Contract.Result<LiteralExpr>() != null);
+ return false_;
+ }
+ }
+
+
+ public static NAryExpr Select(Expr map, params Expr[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(map != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return SelectTok(Token.NoToken, map, args);
+ }
+
+ public static NAryExpr Select(Expr map, List<Expr/*!*/>/*!*/ args) {
+ Contract.Requires(map != null);
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return Select(map, args.ToArray());
+ }
+
+ // use a different name for this variant of the method
+ // (-> some bug prevents overloading in this case)
+ public static NAryExpr SelectTok(IToken x, Expr map, params Expr[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(map != null);
+ Contract.Requires(x != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ List<Expr>/*!*/ allArgs = new List<Expr>();
+ allArgs.Add(map);
+ foreach (Expr/*!*/ a in args) {
+ Contract.Assert(a != null);
+ allArgs.Add(a);
+ }
+ return new NAryExpr(x, new MapSelect(Token.NoToken, args.Length), allArgs);
+ }
+
+ public static NAryExpr Store(Expr map, params Expr[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(map != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ return StoreTok(Token.NoToken, map, args);
+ }
+
+ public static NAryExpr Store(Expr map, List<Expr/*!*/>/*!*/ indexes, Expr rhs) {
+ Contract.Requires(rhs != null);
+ Contract.Requires(map != null);
+ Contract.Requires(cce.NonNullElements(indexes));
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ Expr[]/*!*/ allArgs = new Expr[indexes.Count + 1];
+ for (int i = 0; i < indexes.Count; ++i)
+ allArgs[i] = indexes[i];
+ allArgs[indexes.Count] = rhs;
+ return Store(map, allArgs);
+ }
+
+ // use a different name for this variant of the method
+ // (-> some bug prevents overloading in this case)
+ public static NAryExpr/*!*/ StoreTok(IToken x, Expr map, params Expr[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(map != null);
+ Contract.Requires(x != null);
+ Contract.Requires(args.Length > 0); // zero or more indices, plus the value
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+
+ List<Expr>/*!*/ allArgs = new List<Expr>();
+ allArgs.Add(map);
+ foreach (Expr/*!*/ a in args) {
+ Contract.Assert(a != null);
+ allArgs.Add(a);
+ }
+ return new NAryExpr(x, new MapStore(Token.NoToken, args.Length - 1), allArgs);
+ }
+
+ public static NAryExpr CoerceType(IToken x, Expr subexpr, Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires(subexpr != null);
+ Contract.Requires(x != null);
+ Contract.Ensures(Contract.Result<NAryExpr>() != null);
+ List<Expr>/*!*/ args = new List<Expr>();
+ args.Add(subexpr);
+ return new NAryExpr(x, new TypeCoercion(x, type), args);
+ }
+
+ public static Expr BinaryTreeAnd(List<Expr> terms)
+ {
+ return BinaryTreeAnd(terms, 0, terms.Count - 1);
+ }
+
+ private static Expr BinaryTreeAnd(List<Expr> terms, int start, int end)
+ {
+ if (start > end)
+ return Expr.True;
+ if (start == end)
+ return terms[start];
+ if (start + 1 == end)
+ return Expr.And(terms[start], terms[start + 1]);
+ var mid = (start + end) / 2;
+ return Expr.And(BinaryTreeAnd(terms, start, mid), BinaryTreeAnd(terms, mid + 1, end));
+ }
+
+ public static Expr And(IEnumerable<Expr> conjuncts, bool returnNullIfEmpty = false)
+ {
+ Expr result = null;
+ foreach (var c in conjuncts)
+ {
+ if (result != null)
+ {
+ result = LiteralExpr.And(result, c);
+ result.Type = Type.Bool;
+ }
+ else
+ {
+ result = c;
+ result.Type = Type.Bool;
+ }
+ }
+ if (result == null && !returnNullIfEmpty)
+ {
+ result = Expr.True;
+ }
+ return result;
+ }
+ }
+ [ContractClassFor(typeof(Expr))]
+ public abstract class ExprContracts : Expr {
+ public ExprContracts() :base(null, /*immutable=*/ false){
+
+ }
+ public override void Emit(TokenTextWriter wr, int contextBindingStrength, bool fragileContext) {
+ Contract.Requires(wr != null);
+ throw new NotImplementedException();
+ }
+ public override void ComputeFreeVariables(Set freeVars) {
+ Contract.Requires(freeVars != null);
+ throw new NotImplementedException();
+ }
+ public override Type ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+ }
+
+ public class LiteralExpr : Expr {
+ public readonly object/*!*/ Val; // false, true, a BigNum, a BigDec, a BigFloat, or a BvConst
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Val != null);
+ }
+
+ /// <summary>
+ /// Creates a literal expression for the boolean value "b".
+ /// </summary>
+ /// <param name="tok"></param>
+ /// <param name="b"></param>
+ public LiteralExpr(IToken/*!*/ tok, bool b, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Val = b;
+ Type = Type.Bool;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ /// <summary>
+ /// Creates a literal expression for the integer value "v".
+ /// </summary>
+ /// <param name="tok"></param>
+ /// <param name="v"></param>
+ public LiteralExpr(IToken/*!*/ tok, BigNum v, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Val = v;
+ Type = Type.Int;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ /// <summary>
+ /// Creates a literal expression for the real value "v".
+ /// </summary>
+ /// <param name="tok"></param>
+ /// <param name="v"></param>
+ public LiteralExpr(IToken/*!*/ tok, BigDec v, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Val = v;
+ Type = Type.Real;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ /// <summary>
+ /// Creates a literal expression for the floating point value "v".
+ /// </summary>
+ /// <param name="tok"></param>
+ /// <param name="v"></param>
+ public LiteralExpr(IToken/*!*/ tok, BigFloat v, bool immutable = false)
+ : base(tok, immutable)
+ {
+ Contract.Requires(tok != null);
+ Val = v;
+ Type = Type.GetFloatType(v.ExponentSize, v.SignificandSize);
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ /// <summary>
+ /// Creates a literal expression for the bitvector value "v".
+ /// </summary>
+ public LiteralExpr(IToken/*!*/ tok, BigNum v, int b, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(0 <= b);
+ Val = new BvConst(v, b);
+ Type = Type.GetBvType(b);
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is LiteralExpr))
+ return false;
+
+ LiteralExpr other = (LiteralExpr)obj;
+ return object.Equals(this.Val, other.Val);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ if (Immutable)
+ return this.CachedHashCode;
+ else
+ return ComputeHashCode();
+ }
+
+ [Pure]
+ public override int ComputeHashCode() {
+ return this.Val.GetHashCode();
+ }
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+ if (this.Val is bool) {
+ stream.Write((bool)this.Val ? "true" : "false"); // correct capitalization
+ } else {
+ stream.Write(cce.NonNull(this.Val.ToString()));
+ }
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ // nothing to resolve
+ }
+ public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ //Contract.Requires(freeVars != null);
+ // no free variables to add
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ this.Type = ShallowType;
+ }
+
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ if (Val is bool) {
+ return Type.Bool;
+ } else if (Val is BigNum) {
+ return Type.Int;
+ } else if (Val is BigDec) {
+ return Type.Real;
+ } else if (Val is BigFloat) {
+ BigFloat temp = (BigFloat)Val;
+ return Type.GetFloatType(temp.ExponentSize, temp.SignificandSize);
+ } else if (Val is BvConst) {
+ return Type.GetBvType(((BvConst)Val).Bits);
+ } else {
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // like, where did this value come from?!
+ }
+ }
+ }
+
+ public bool IsFalse {
+ get {
+ return Val is bool && ((bool)Val) == false;
+ }
+ }
+ public bool IsTrue {
+ get {
+ return Val is bool && ((bool)Val) == true;
+ }
+ }
+
+ // should be eliminated after converting everything to BigNums
+ private int asInt {
+ get {
+ return asBigNum.ToIntSafe;
+ }
+ }
+
+ public bool isBigNum {
+ get {
+ return Val is BigNum;
+ }
+ }
+
+ public BigNum asBigNum {
+ get {
+ Contract.Assert(isBigNum);
+ return (BigNum)cce.NonNull(Val);
+ }
+ }
+
+ public bool isBigDec {
+ get {
+ return Val is BigDec;
+ }
+ }
+
+ public bool isBigFloat
+ {
+ get
+ {
+ return Val is BigFloat;
+ }
+ }
+
+ public BigDec asBigDec {
+ get {
+ Contract.Assert(isBigDec);
+ return (BigDec)cce.NonNull(Val);
+ }
+ }
+
+ public BigFloat asBigFloat {
+ get {
+ Contract.Assert(isBigFloat);
+ return (BigFloat)cce.NonNull(Val);
+ }
+ }
+
+ public bool isBool {
+ get {
+ return Val is bool;
+ }
+ }
+
+ public bool asBool {
+ get {
+ Contract.Assert(isBool);
+ return (bool)cce.NonNull(Val);
+ }
+ }
+
+ public bool isBvConst {
+ get {
+ return Val is BvConst;
+ }
+ }
+
+ public BvConst asBvConst {
+ get {
+ Contract.Assert(isBvConst);
+ return (BvConst)cce.NonNull(Val);
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitLiteralExpr(this);
+ }
+ }
+
+ public class BvConst {
+ public readonly BigNum Value;
+ public readonly int Bits;
+
+ public BvConst(BigNum v, int b) {
+ Contract.Assert(v.Signum >= 0);
+ Value = v;
+ Bits = b;
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return Value + "bv" + Bits;
+ }
+
+ [Pure]
+ public string ToReadableString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ if (Value > BigNum.FromInt(10000)) {
+ string val = cce.NonNull(Value.ToString("x"));
+ int pos = val.Length % 4;
+ string res = "0x" + val.Substring(0, pos);
+ Contract.Assert(res != null);
+ while (pos < val.Length) {
+ res += "." + val.Substring(pos, 4);
+ pos += 4;
+ }
+ return res + ".bv" + Bits;
+ } else
+ return ToString();
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ BvConst other = obj as BvConst;
+ if (other == null)
+ return false;
+
+ return Bits == other.Bits && Value == other.Value;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ unchecked {
+ return Value.GetHashCode() ^ Bits;
+ }
+ }
+ }
+
+ public class IdentifierExpr : Expr {
+ private string _Name;
+ public string Name { // identifier symbol
+ get {
+ return _Name;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Cannot change Name on Immutable Expr");
+
+ _Name = value;
+ }
+ }
+ private Variable _Decl;
+ public Variable Decl { // identifier declaration
+ get {
+ return _Decl;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Cannot change Decl on Immutable Expr");
+
+ _Decl = value;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Name != null);
+ }
+
+
+ /// <summary>
+ /// Creates an unresolved identifier expression. This constructor is intended to be called
+ /// only from within the parser; for use inside the translation, use another constructor, which
+ /// specifies the type of the expression.
+ /// </summary>
+ /// <param name="tok"></param>
+ /// <param name="name"></param>
+ internal IdentifierExpr(IToken/*!*/ tok, string/*!*/ name, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ _Name = name;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+ /// <summary>
+ /// Creates an unresolved identifier expression.
+ /// </summary>
+ /// <param name="tok"></param>
+ /// <param name="name"></param>
+ /// <param name="type"></param>
+ public IdentifierExpr(IToken/*!*/ tok, string/*!*/ name, Type/*!*/ type, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(name != null);
+ Contract.Requires(type != null);
+ _Name = name;
+ Type = type;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ /// <summary>
+ /// Creates a resolved identifier expression.
+ /// </summary>
+ /// <param name="tok"></param>
+ /// <param name="d"></param>
+ public IdentifierExpr(IToken/*!*/ tok, Variable/*!*/ d, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(d != null);
+ _Name = cce.NonNull(d.Name);
+ _Decl = d;
+ Type = d.TypedIdent.Type;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is IdentifierExpr))
+ return false;
+
+ IdentifierExpr other = (IdentifierExpr)obj;
+ return object.Equals(this.Name, other.Name) && object.Equals(this.Decl, other.Decl);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ if (Immutable)
+ return this.CachedHashCode;
+ else
+ return ComputeHashCode();
+ }
+
+ [Pure]
+ public override int ComputeHashCode() {
+ int h = this.Name == null ? 0 : this.Name.GetHashCode();
+ h ^= this.Decl == null ? 0 : this.Decl.GetHashCode();
+ return h;
+ }
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds && !stream.UseForComputingChecksums) {
+ stream.Write("{0}^^", this.Decl == null ? "NoDecl" : "h" + this.Decl.GetHashCode());
+ }
+ stream.Write(this, "{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ if (Decl != null) {
+ // already resolved, but re-resolve type just in case it came from an unresolved type
+ if (Type != null) {
+ Type = Type.ResolveType(rc);
+ }
+ return;
+ }
+ Decl = rc.LookUpVariable(Name);
+ if (Decl == null) {
+ rc.Error(this, "undeclared identifier: {0}", Name);
+ } else if (rc.StateMode == ResolutionContext.State.StateLess && Decl is GlobalVariable) {
+ rc.Error(this, "cannot refer to a global variable in this context: {0}", Name);
+ }
+ if (Type != null) {
+ Type = Type.ResolveType(rc);
+ }
+ }
+ public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ //Contract.Requires(freeVars != null);
+ Contract.Assume(this.Decl != null);
+ freeVars.Add(Decl);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ if (this.Decl != null) {
+ // sanity check
+ if (Type != null && !Type.Equals(Decl.TypedIdent.Type)) {
+ tc.Error(this, "internal error, shallow-type assignment was done incorrectly, {0}:{1} != {2}",
+ Name, Type, Decl.TypedIdent.Type);
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+ Type = Decl.TypedIdent.Type;
+ }
+ }
+
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ Contract.Assert(Type != null);
+ return Type;
+ }
+ }
+
+ public sealed class ConstantFunApp {
+ private IdentifierExpr/*!*/ identifierExpr;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(identifierExpr != null);
+ Contract.Invariant(emptyArgs != null);
+ }
+
+ public IdentifierExpr/*!*/ IdentifierExpr {
+ get {
+ Contract.Requires(IdentifierExpr != null);
+ return identifierExpr;
+ }
+ }
+
+ private static IList/*!*/ emptyArgs = ArrayList.ReadOnly(cce.NonNull((IList/*!*/)new ArrayList()));
+ public IList/*!*/ Arguments {
+ get {
+ Contract.Ensures(Contract.Result<IList>() != null);
+ return emptyArgs;
+ }
+ }
+
+ public ConstantFunApp(IdentifierExpr ie, Constant c) {
+ Contract.Requires(c != null);
+ Contract.Requires(ie != null);
+ this.identifierExpr = ie;
+ }
+
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitIdentifierExpr(this);
+ }
+ }
+
+ public class OldExpr : Expr
+ {
+ private Expr _Expr;
+ public Expr/*!*/ Expr {
+ get {
+ return _Expr;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Cannot change Expr of an Immutable OldExpr");
+
+ _Expr = value;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Expr != null);
+ }
+
+ public OldExpr(IToken/*!*/ tok, Expr/*!*/ expr, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(expr != null);
+ _Expr = expr;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is OldExpr))
+ return false;
+
+ OldExpr other = (OldExpr)obj;
+ return object.Equals(this.Expr, other.Expr);
+ }
+ [Pure]
+ public override int GetHashCode() {
+ if (Immutable)
+ return this.CachedHashCode;
+ else
+ return ComputeHashCode ();
+ }
+ public override int ComputeHashCode() {
+ // FIXME: This is wrong, it's as if the OldExpr node isn't there at all
+ return this.Expr == null ? 0 : this.Expr.GetHashCode();
+ }
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ stream.Write(this, "old(");
+ this.Expr.Emit(stream);
+ stream.Write(")");
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ if (rc.StateMode != ResolutionContext.State.Two) {
+ rc.Error(this, "old expressions allowed only in two-state contexts");
+ }
+ Expr.Resolve(rc);
+ }
+ public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ //Contract.Requires(freeVars != null);
+ Expr.ComputeFreeVariables(freeVars);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ Expr.Typecheck(tc);
+ Type = Expr.Type;
+ }
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return Expr.ShallowType;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitOldExpr(this);
+ }
+ }
+ [ContractClass(typeof(IAppliableVisitorContracts<>))]
+ public interface IAppliableVisitor<T> {
+ T Visit(UnaryOperator/*!*/ unaryOperator);
+ T Visit(BinaryOperator/*!*/ binaryOperator);
+ T Visit(FunctionCall/*!*/ functionCall);
+ T Visit(MapSelect/*!*/ mapSelect);
+ T Visit(MapStore/*!*/ mapStore);
+ T Visit(TypeCoercion/*!*/ typeCoercion);
+ T Visit(ArithmeticCoercion/*!*/ arithCoercion);
+ T Visit(IfThenElse/*!*/ ifThenElse);
+ }
+ [ContractClassFor(typeof(IAppliableVisitor<>))]
+ public abstract class IAppliableVisitorContracts<T> : IAppliableVisitor<T> {
+
+ #region IAppliableVisitor<T> Members
+
+ public T Visit(UnaryOperator unaryOperator) {
+ Contract.Requires(unaryOperator != null);
+ throw new NotImplementedException();
+ }
+
+ public T Visit(BinaryOperator binaryOperator) {
+ Contract.Requires(binaryOperator != null);
+ throw new NotImplementedException();
+ }
+
+ public T Visit(FunctionCall functionCall) {
+ Contract.Requires(functionCall != null);
+ throw new NotImplementedException();
+ }
+
+ public T Visit(MapSelect mapSelect) {
+ Contract.Requires(mapSelect != null);
+ throw new NotImplementedException();
+ }
+
+ public T Visit(MapStore mapStore) {
+ Contract.Requires(mapStore != null);
+ throw new NotImplementedException();
+ }
+
+ public T Visit(TypeCoercion typeCoercion) {
+ Contract.Requires(typeCoercion != null);
+ throw new NotImplementedException();
+ }
+
+ public T Visit(ArithmeticCoercion arithCoercion) {
+ Contract.Requires(arithCoercion != null);
+ throw new NotImplementedException();
+ }
+
+ public T Visit(IfThenElse ifThenElse) {
+ Contract.Requires(ifThenElse != null);
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ [ContractClass(typeof(IAppliableContracts))]
+ public interface IAppliable {
+ string/*!*/ FunctionName {
+ get;
+ }
+
+ /// <summary>
+ /// Emits to "stream" the operator applied to the given arguments.
+ /// The length of "args" can be anything that the parser allows for this appliable operator
+ /// (but can be nothing else).
+ /// </summary>
+ /// <param name="args"></param>
+ /// <param name="stream"></param>
+ /// <param name="contextBindingStrength"></param>
+ /// <param name="fragileContext"></param>
+ void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream, int contextBindingStrength, bool fragileContext);
+
+ void Resolve(ResolutionContext/*!*/ rc, Expr/*!*/ subjectForErrorReporting);
+
+ /// <summary>
+ /// Requires the object to have been properly resolved.
+ /// </summary>
+ int ArgumentCount {
+ get;
+ }
+
+ /// <summary>
+ /// Typechecks the arguments "args" for the Appliable. If the arguments are
+ /// appropriate, returns the result type; otherwise returns null.
+ /// As result of the type checking, the values of type parameters of the
+ /// appliable can be returned (which are then stored in the NAryExpr and later
+ /// also used in the VCExprAST).
+ /// Requires the object to have been successfully resolved.
+ /// Requires args.Length == ArgumentCount.
+ /// Requires all elements of "args" to have a non-null Type field.
+ /// </summary>
+ /// <param name="args"></param>
+ /// <param name="tc"></param>
+ Type Typecheck(IList<Expr>/*!*/ args, out TypeParamInstantiation/*!*/ tpInstantiation, TypecheckingContext/*!*/ tc);
+
+ // Contract.Requires( Microsoft.SpecSharp.Collections.Reductions.Forall{Expr! arg in args; arg.Type != null});
+
+ /// <summary>
+ /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
+ /// </summary>
+ Type/*!*/ ShallowType(IList<Expr>/*!*/ args);
+
+ T Dispatch<T>(IAppliableVisitor<T>/*!*/ visitor);
+ }
+ [ContractClassFor(typeof(IAppliable))]
+ abstract class IAppliableContracts : IAppliable {
+
+ #region IAppliable Members
+
+ public string FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ Contract.Requires(args != null);
+ Contract.Requires(stream != null);
+ throw new NotImplementedException();
+ }
+
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ Contract.Requires(rc != null);
+ Contract.Requires(subjectForErrorReporting != null);
+ throw new NotImplementedException();
+ }
+
+ public int ArgumentCount {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
+ Contract.Requires(args != null);
+ Contract.Requires(tc != null);
+ Contract.Ensures(Contract.ValueAtReturn(out args) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ Contract.Ensures(args.Count == Contract.OldValue(args.Count));
+ throw new NotImplementedException();
+ }
+
+ public Type ShallowType(IList<Expr> args) {
+ Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+
+ public T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ Contract.Requires(visitor != null);
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+
+ [ContractClass(typeof(IOverloadedAppliableContracts))]
+ public interface IOverloadedAppliable {
+ void ResolveOverloading(NAryExpr/*!*/ expr);
+ bool DoNotResolveOverloading { get; set; }
+ }
+ [ContractClassFor(typeof(IOverloadedAppliable))]
+ public abstract class IOverloadedAppliableContracts : IOverloadedAppliable {
+
+ #region IOverloadedAppliable Members
+
+ void IOverloadedAppliable.ResolveOverloading(NAryExpr expr) {
+ Contract.Requires(expr != null);
+ throw new NotImplementedException();
+ }
+
+ public bool DoNotResolveOverloading
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ #endregion
+ }
+
+ public class UnaryOperator : IAppliable {
+ private IToken/*!*/ tok;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(tok != null);
+ }
+
+ public enum Opcode {
+ Neg,
+ Not
+ };
+ private Opcode op;
+ public Opcode Op {
+ get {
+ return op;
+ }
+ }
+ public UnaryOperator(IToken tok, Opcode op) {
+ Contract.Requires(tok != null);
+ this.tok = tok;
+ this.op = op;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is UnaryOperator))
+ return false;
+
+ UnaryOperator other = (UnaryOperator)obj;
+ return object.Equals(this.op, other.op);
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return (int)this.op;
+ }
+
+ public string/*!*/ FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ switch (this.op) {
+ case Opcode.Neg:
+ return "-";
+ case Opcode.Not:
+ return "!";
+ }
+ System.Diagnostics.Debug.Fail("unknown unary operator: " + op.ToString());
+ throw new Exception();
+ }
+ }
+
+ public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ //Contract.Requires(args != null);
+ stream.SetToken(ref this.tok);
+ Contract.Assert(args.Count == 1);
+ // determine if parens are needed
+ int opBindingStrength = 0x70;
+ bool parensNeeded = opBindingStrength < contextBindingStrength ||
+ (fragileContext && opBindingStrength == contextBindingStrength);
+
+ if (parensNeeded) {
+ stream.Write("(");
+ }
+ stream.Write(FunctionName);
+ cce.NonNull(args[0]).Emit(stream, opBindingStrength, false);
+ if (parensNeeded) {
+ stream.Write(")");
+ }
+ }
+
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ if (rc.TriggerMode && this.op == Opcode.Not) {
+ rc.Error(subjectForErrorReporting, "boolean operators are not allowed in triggers");
+ }
+ }
+
+ public int ArgumentCount {
+ get {
+ return 1;
+ }
+ }
+
+ public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out args) != null);
+
+ Contract.Assume(args.Count == 1);
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+ Type arg0type = cce.NonNull(cce.NonNull(args[0]).Type);
+ switch (this.op) {
+ case Opcode.Neg:
+ if (arg0type.Unify(Type.Int)) {
+ return Type.Int;
+ }
+ if (arg0type.Unify(Type.Real)) {
+ return Type.Real;
+ }
+ //if (arg0type.Unify(Type.Float)) {
+ //return Type.Float;
+ //}
+ goto BAD_TYPE;
+ case Opcode.Not:
+ if (arg0type.Unify(Type.Bool)) {
+ return Type.Bool;
+ }
+ goto BAD_TYPE;
+ }
+ System.Diagnostics.Debug.Fail("unknown unary operator: " + op.ToString());
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ BAD_TYPE:
+ tc.Error(this.tok, "invalid argument type ({1}) to unary operator {0}",
+ this.FunctionName, arg0type);
+ return null;
+ }
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ switch (this.op) {
+ case Opcode.Neg:
+ return cce.NonNull(cce.NonNull(args[0]).Type);
+ case Opcode.Not:
+ return Type.Bool;
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // unexpected unary operator
+ }
+ }
+
+ public object Evaluate(object argument) {
+ if (argument == null) {
+ return null;
+ }
+ switch (this.op) {
+ case Opcode.Neg:
+ if (argument is BigNum) {
+ return -((BigNum)argument);
+ }
+ if (argument is BigDec) {
+ return -((BigDec)argument);
+ }
+ if (argument is BigFloat) {
+ return -((BigFloat)argument);
+ }
+ break;
+ case Opcode.Not:
+ if (argument is bool) {
+ return !((bool)argument);
+ }
+ throw new System.InvalidOperationException("unary Not only applies to bool");
+ }
+ return null; // unreachable
+ }
+
+ public T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+ }
+
+ public class BinaryOperator : IAppliable, IOverloadedAppliable {
+ private IToken/*!*/ tok;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(tok != null);
+ }
+
+ public bool DoNotResolveOverloading { get; set; }
+
+ public enum Opcode {
+ Add,
+ Sub,
+ Mul,
+ Div,
+ Mod,
+ RealDiv,
+ FloatDiv,
+ Pow,
+ Eq,
+ Neq,
+ Gt,
+ Ge,
+ Lt,
+ Le,
+ And,
+ Or,
+ Imp,
+ Iff,
+ Subtype
+ };
+ private Opcode op;
+ public Opcode Op {
+ get {
+ return op;
+ }
+ }
+ public BinaryOperator(IToken tok, Opcode op) {
+ Contract.Requires(tok != null);
+ this.tok = tok;
+ this.op = op;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is BinaryOperator))
+ return false;
+
+ BinaryOperator other = (BinaryOperator)obj;
+ return object.Equals(this.op, other.op);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return (int)this.op << 1;
+ }
+
+ public string/*!*/ FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ switch (this.op) {
+ case Opcode.Add:
+ return "+";
+ case Opcode.Sub:
+ return "-";
+ case Opcode.Mul:
+ return "*";
+ case Opcode.Div:
+ return "div";
+ case Opcode.Mod:
+ return "mod";
+ case Opcode.RealDiv:
+ return "/";
+ case Opcode.Pow:
+ return "**";
+ case Opcode.Eq:
+ return "==";
+ case Opcode.Neq:
+ return "!=";
+ case Opcode.Gt:
+ return ">";
+ case Opcode.Ge:
+ return ">=";
+ case Opcode.Lt:
+ return "<";
+ case Opcode.Le:
+ return "<=";
+ case Opcode.And:
+ return "&&";
+ case Opcode.Or:
+ return "||";
+ case Opcode.Imp:
+ return "==>";
+ case Opcode.Iff:
+ return "<==>";
+ case Opcode.Subtype:
+ return "<:";
+ }
+ System.Diagnostics.Debug.Fail("unknown binary operator: " + op.ToString());
+ throw new Exception();
+ }
+ }
+
+ public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ //Contract.Requires(args != null);
+ stream.SetToken(ref this.tok);
+ Contract.Assert(args.Count == 2);
+ // determine if parens are needed
+ int opBindingStrength;
+ bool fragileLeftContext = false; // false means "allow same binding power on left without parens"
+ bool fragileRightContext = false; // false means "allow same binding power on right without parens"
+ switch (this.op) {
+ case Opcode.Add:
+ opBindingStrength = 0x40;
+ break;
+ case Opcode.Sub:
+ opBindingStrength = 0x40;
+ fragileRightContext = true;
+ break;
+ case Opcode.Mul:
+ opBindingStrength = 0x50;
+ break;
+ case Opcode.Div:
+ opBindingStrength = 0x50;
+ fragileRightContext = true;
+ break;
+ case Opcode.Mod:
+ opBindingStrength = 0x50;
+ fragileRightContext = true;
+ break;
+ case Opcode.RealDiv:
+ opBindingStrength = 0x50;
+ fragileRightContext = true;
+ break;
+ case Opcode.Pow:
+ opBindingStrength = 0x60;
+ fragileRightContext = true;
+ break;
+ case Opcode.Eq:
+ case Opcode.Neq:
+ case Opcode.Gt:
+ case Opcode.Ge:
+ case Opcode.Lt:
+ case Opcode.Le:
+ case Opcode.Subtype:
+ opBindingStrength = 0x30;
+ fragileLeftContext = fragileRightContext = true;
+ break;
+ case Opcode.And:
+ opBindingStrength = 0x20;
+ break;
+ case Opcode.Or:
+ opBindingStrength = 0x21;
+ break;
+ case Opcode.Imp:
+ opBindingStrength = 0x10;
+ fragileLeftContext = true;
+ break;
+ case Opcode.Iff:
+ opBindingStrength = 0x00;
+ break;
+ default:
+ System.Diagnostics.Debug.Fail("unknown binary operator: " + op.ToString());
+ opBindingStrength = -1; // to please compiler, which refuses to consider whether or not all enumeration cases have been considered!
+ break;
+ }
+ int opBS = opBindingStrength & 0xF0;
+ int ctxtBS = contextBindingStrength & 0xF0;
+ bool parensNeeded = opBS < ctxtBS ||
+ (opBS == ctxtBS && (opBindingStrength != contextBindingStrength || fragileContext));
+
+ var pop = stream.push(FunctionName);
+ if (parensNeeded) {
+ stream.Write("(");
+ }
+ cce.NonNull(args[0]).Emit(stream, opBindingStrength, fragileLeftContext);
+ stream.sep();
+ stream.Write(" {0} ", FunctionName);
+ cce.NonNull(args[1]).Emit(stream, opBindingStrength, fragileRightContext);
+ if (parensNeeded) {
+ stream.Write(")");
+ }
+ stream.pop(pop);
+ }
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ if (rc.TriggerMode) {
+ switch (this.op) {
+ case Opcode.Add:
+ case Opcode.Sub:
+ case Opcode.Mul:
+ case Opcode.Div:
+ case Opcode.Mod:
+ case Opcode.RealDiv:
+ case Opcode.Pow:
+ case Opcode.Neq: // Neq is allowed, but not Eq
+ case Opcode.Subtype:
+ // These are fine
+ break;
+
+ case Opcode.Eq:
+ rc.Error(subjectForErrorReporting, "equality is not allowed in triggers");
+ break;
+
+ case Opcode.Gt:
+ case Opcode.Ge:
+ case Opcode.Lt:
+ case Opcode.Le:
+ rc.Error(subjectForErrorReporting, "arithmetic comparisons are not allowed in triggers");
+ break;
+
+ case Opcode.And:
+ case Opcode.Or:
+ case Opcode.Imp:
+ case Opcode.Iff:
+ rc.Error(subjectForErrorReporting, "boolean operators are not allowed in triggers");
+ break;
+
+ default:
+ System.Diagnostics.Debug.Fail("unknown binary operator: " + this.op.ToString());
+ break;
+ }
+ }
+ }
+ public int ArgumentCount {
+ get {
+ return 2;
+ }
+ }
+ public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ Contract.Ensures(args != null);
+ Contract.Assert(args.Count == 2);
+ // the default; the only binary operator with a type parameter is equality, but right
+ // we don't store this parameter because it does not appear necessary
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+ Expr arg0 = cce.NonNull(args[0]);
+ Expr arg1 = cce.NonNull(args[1]);
+ Type arg0type = cce.NonNull(arg0.Type);
+ Type arg1type = cce.NonNull(arg1.Type);
+ switch (this.op) {
+ case Opcode.Add:
+ case Opcode.Sub:
+ case Opcode.Mul:
+ if (arg0type.Unify(Type.Int) && arg1type.Unify(Type.Int)) {
+ return Type.Int;
+ }
+ if (arg0type.Unify(Type.Real) && arg1type.Unify(Type.Real)) {
+ return Type.Real;
+ }
+ if (arg0type.IsFloat && arg0type.Unify(arg1type)) {
+ return Type.GetFloatType(arg0.Type.FloatExponent, arg0.Type.FloatMantissa);
+ }
+ if (arg1type.IsFloat && arg1type.Unify(arg0type)) {
+ return Type.GetFloatType(arg1.Type.FloatExponent, arg1.Type.FloatMantissa);
+ }
+ goto BAD_TYPE;
+ case Opcode.Div:
+ case Opcode.Mod:
+ if (arg0type.Unify(Type.Int) && arg1type.Unify(Type.Int)) {
+ return Type.Int;
+ }
+ goto BAD_TYPE;
+ case Opcode.RealDiv:
+ if ((arg0type.Unify(Type.Int) || arg0type.Unify(Type.Real)) &&
+ (arg1type.Unify(Type.Int) || arg1type.Unify(Type.Real))) {
+ return Type.Real;
+ }
+ if (arg0type.IsFloat && arg0type.Unify(arg1type)) {
+ return Type.GetFloatType(arg0.Type.FloatExponent, arg0.Type.FloatMantissa);
+ }
+ if (arg1type.IsFloat && arg1type.Unify(arg0type)) {
+ return Type.GetFloatType(arg1.Type.FloatExponent, arg1.Type.FloatMantissa);
+ }
+ goto BAD_TYPE;
+ case Opcode.Pow:
+ if (arg0type.Unify(Type.Real) && arg1type.Unify(Type.Real)) {
+ return Type.Real;
+ }
+ goto BAD_TYPE;
+ case Opcode.Eq:
+ case Opcode.Neq:
+ // Comparison is allowed if the argument types are unifiable
+ // (i.e., if there is any chance that the values of the arguments are
+ // in the same domain)
+ if (arg0type.Equals(arg1type)) {
+ // quick path
+ return Type.Bool;
+ }
+ List<TypeVariable>/*!*/ unifiable = new List<TypeVariable>();
+ unifiable.AddRange(arg0type.FreeVariables);
+ unifiable.AddRange(arg1type.FreeVariables);
+
+ if (arg0type.Unify(arg1type, unifiable, new Dictionary<TypeVariable/*!*/, Type/*!*/>()))
+ return Type.Bool;
+ goto BAD_TYPE;
+ case Opcode.Gt:
+ case Opcode.Ge:
+ case Opcode.Lt:
+ case Opcode.Le:
+ if (arg0type.Unify(Type.Int) && arg1type.Unify(Type.Int)) {
+ return Type.Bool;
+ }
+ if (arg0type.Unify(Type.Real) && arg1type.Unify(Type.Real)) {
+ return Type.Bool;
+ }
+ if ((arg0type.IsFloat && arg0type.Unify(arg1type)) || (arg1type.IsFloat && arg1type.Unify(arg0type))) {
+ return Type.Bool;
+ }
+ goto BAD_TYPE;
+ case Opcode.And:
+ case Opcode.Or:
+ case Opcode.Imp:
+ case Opcode.Iff:
+ if (arg0type.Unify(Type.Bool) && arg1type.Unify(Type.Bool)) {
+ return Type.Bool;
+ }
+ goto BAD_TYPE;
+ case Opcode.Subtype:
+ // Subtype is polymorphically typed and can compare things of
+ // arbitrary types (but both arguments must have the same type)
+ if (arg0type.Unify(arg1type)) {
+ return Type.Bool;
+ }
+ goto BAD_TYPE;
+ }
+ System.Diagnostics.Debug.Fail("unknown binary operator: " + op.ToString());
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ BAD_TYPE:
+ tc.Error(this.tok, "invalid argument types ({1} and {2}) to binary operator {0}", this.FunctionName, arg0type, arg1type);
+ return null;
+ }
+
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ switch (this.op) {
+ case Opcode.Add:
+ case Opcode.Sub:
+ case Opcode.Mul:
+ return cce.NonNull(args[0]).ShallowType;
+
+ case Opcode.Div:
+ case Opcode.Mod:
+ return Type.Int;
+
+ case Opcode.RealDiv:
+ case Opcode.Pow:
+ return Type.Real;
+
+ case Opcode.Eq:
+ case Opcode.Neq:
+ case Opcode.Gt:
+ case Opcode.Ge:
+ case Opcode.Lt:
+ case Opcode.Le:
+ case Opcode.And:
+ case Opcode.Or:
+ case Opcode.Imp:
+ case Opcode.Iff:
+ case Opcode.Subtype:
+ return Type.Bool;
+
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // unexpected binary operator
+ }
+ }
+
+ public void ResolveOverloading(NAryExpr expr) {
+ //Contract.Requires(expr != null);
+
+ // immutable Expr must not be modified
+ if (DoNotResolveOverloading || expr.Immutable)
+ {
+ return;
+ }
+
+ Expr arg0 = cce.NonNull(expr.Args[0]);
+ Expr arg1 = cce.NonNull(expr.Args[1]);
+ switch (op) {
+ case Opcode.Eq:
+ if (arg0.Type != null && arg0.Type.IsBool && arg1.Type != null && arg1.Type.IsBool) {
+ expr.Fun = new BinaryOperator(tok, Opcode.Iff);
+ }
+ break;
+ case Opcode.Neq:
+ if (arg0.Type != null && arg0.Type.IsBool && arg1.Type != null && arg1.Type.IsBool) {
+ expr.Fun = new BinaryOperator(tok, Opcode.Iff);
+ var arg1New = new NAryExpr(expr.tok, new UnaryOperator(tok, UnaryOperator.Opcode.Not), new List<Expr> { arg1 });
+
+ // ugly ... there should be some more general approach,
+ // e.g., to typecheck the whole expression again
+ arg1New.Type = Type.Bool;
+ arg1New.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+
+ expr.Args[1] = arg1New;
+ }
+ break;
+ }
+ }
+
+ public object Evaluate(object e1, object e2) {
+ if (e1 == null || e2 == null) {
+ return null;
+ }
+
+ switch (this.op) {
+ case Opcode.Add:
+ if (e1 is BigNum && e2 is BigNum) {
+ return ((BigNum)e1) + ((BigNum)e2);
+ }
+ if (e1 is BigDec && e2 is BigDec) {
+ return ((BigDec)e1) + ((BigDec)e2);
+ }
+ if (e1 is BigFloat && e2 is BigFloat) {
+ return ((BigFloat)e1) + ((BigFloat)e2);
+ }
+ break;
+ case Opcode.Sub:
+ if (e1 is BigNum && e2 is BigNum) {
+ return ((BigNum)e1) - ((BigNum)e2);
+ }
+ if (e1 is BigDec && e2 is BigDec) {
+ return ((BigDec)e1) - ((BigDec)e2);
+ }
+ if (e1 is BigFloat && e2 is BigFloat) {
+ return ((BigFloat)e1) - ((BigFloat)e2);
+ }
+ break;
+ case Opcode.Mul:
+ if (e1 is BigNum && e2 is BigNum) {
+ return ((BigNum)e1) * ((BigNum)e2);
+ }
+ if (e1 is BigDec && e2 is BigDec) {
+ return ((BigDec)e1) * ((BigDec)e2);
+ }
+ if (e1 is BigFloat && e2 is BigFloat) {
+ return ((BigFloat)e1) * ((BigFloat)e2);
+ }
+ break;
+ case Opcode.Div:
+ if (e1 is BigNum && e2 is BigNum) {
+ return /* TODO: right semantics? */ ((BigNum)e1) / ((BigNum)e2);
+ }
+ break;
+ case Opcode.Mod:
+ if (e1 is BigNum && e2 is BigNum) {
+ return /* TODO: right semantics? */ ((BigNum)e1) % ((BigNum)e2);
+ }
+ break;
+ case Opcode.RealDiv:
+ // TODO: add partial evaluation fro real division
+ break;
+ case Opcode.FloatDiv:
+ //TODO: add float division
+ break;
+ case Opcode.Pow:
+ // TODO: add partial evaluation fro real exponentiation
+ break;
+ case Opcode.Lt:
+ if (e1 is BigNum && e2 is BigNum) {
+ return ((BigNum)e1) < ((BigNum)e2);
+ }
+ if (e1 is BigDec && e2 is BigDec) {
+ return ((BigDec)e1) < ((BigDec)e2);
+ }
+ if (e1 is BigFloat && e2 is BigFloat) {
+ return ((BigFloat)e1) < ((BigFloat)e2);
+ }
+ break;
+ case Opcode.Le:
+ if (e1 is BigNum && e2 is BigNum) {
+ return ((BigNum)e1) <= ((BigNum)e2);
+ }
+ if (e1 is BigDec && e2 is BigDec) {
+ return ((BigDec)e1) <= ((BigDec)e2);
+ }
+ if (e1 is BigFloat && e2 is BigFloat) {
+ return ((BigFloat)e1) <= ((BigFloat)e2);
+ }
+ break;
+ case Opcode.Gt:
+ if (e1 is BigNum && e2 is BigNum) {
+ return ((BigNum)e1) > ((BigNum)e2);
+ }
+ if (e1 is BigDec && e2 is BigDec) {
+ return ((BigDec)e1) > ((BigDec)e2);
+ }
+ if (e1 is BigFloat && e2 is BigFloat) {
+ return ((BigFloat)e1) > ((BigFloat)e2);
+ }
+ break;
+ case Opcode.Ge:
+ if (e1 is BigNum && e2 is BigNum) {
+ return ((BigNum)e1) >= ((BigNum)e2);
+ }
+ if (e1 is BigDec && e2 is BigDec) {
+ return ((BigDec)e1) >= ((BigDec)e2);
+ }
+ if (e1 is BigFloat && e2 is BigFloat) {
+ return ((BigFloat)e1) >= ((BigFloat)e2);
+ }
+ break;
+
+ case Opcode.And:
+ if (e1 is bool && e2 is bool) {
+ return (bool)e1 && (bool)e2;
+ }
+ break;
+ case Opcode.Or:
+ if (e1 is bool && e2 is bool) {
+ return (bool)e1 || (bool)e2;
+ }
+ break;
+ case Opcode.Imp:
+ if (e1 is bool && e2 is bool) {
+ return !(bool)e1 || (bool)e2;
+ }
+ break;
+ case Opcode.Iff:
+ if (e1 is bool && e2 is bool) {
+ return e1 == e2;
+ }
+ break;
+
+ case Opcode.Eq:
+ return Equals(e1, e2);
+ case Opcode.Neq:
+ return !Equals(e1, e2);
+
+ case Opcode.Subtype:
+ throw new System.NotImplementedException();
+ }
+ throw new System.InvalidOperationException("bad types to binary operator " + this.op);
+ }
+
+ public T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+
+ }
+
+ public class FunctionCall : IAppliable {
+ private IdentifierExpr/*!*/ name;
+ public Function Func;
+ public FunctionCall(IdentifierExpr name) {
+ Contract.Requires(name != null);
+ this.name = name;
+ }
+ public FunctionCall(Function f) {
+ Contract.Requires(f != null);
+ this.Func = f;
+ this.name = new IdentifierExpr(Token.NoToken, f.Name);
+
+ // We need set the type of this IdentifierExpr so ShallowType() works
+ Debug.Assert(f.OutParams.Count > 0);
+ this.name.Type = f.OutParams[0].TypedIdent.Type;
+ }
+ public string/*!*/ FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this.name.Name;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(name != null);
+ }
+
+ public FunctionCall createUnresolvedCopy()
+ {
+ return new FunctionCall(new IdentifierExpr(name.tok, name.Name, name.Type));
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return name.Name;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object other) {
+ FunctionCall fc = other as FunctionCall;
+ return fc != null && this.Func == fc.Func;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ Contract.Assume(this.Func != null);
+ return Func.GetHashCode();
+ }
+
+ virtual public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ //Contract.Requires(args != null);
+
+ if (stream.UseForComputingChecksums && Func.OriginalLambdaExprAsString != null)
+ {
+ stream.Write(Func.OriginalLambdaExprAsString);
+ }
+ else
+ {
+ this.name.Emit(stream, 0xF0, false);
+ }
+ if (stream.UseForComputingChecksums)
+ {
+ var c = Func.DependencyChecksum;
+ if (c != null)
+ {
+ stream.Write(string.Format("[dependency_checksum:{0}]", c));
+ }
+ }
+ stream.Write("(");
+ args.Emit(stream);
+ stream.Write(")");
+ }
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ if (Func != null) {
+ // already resolved
+ return;
+ }
+ Func = rc.LookUpProcedure(name.Name) as Function;
+ if (Func == null) {
+ rc.Error(this.name, "use of undeclared function: {0}", name.Name);
+ }
+ else if (name.Type == null) {
+ // We need set the type of this IdentifierExpr so ShallowType() works
+ Debug.Assert(name.Type == null);
+ Debug.Assert(Func.OutParams.Count > 0);
+ name.Type = Func.OutParams[0].TypedIdent.Type;
+ }
+ }
+ public virtual int ArgumentCount {
+ get {
+ Contract.Assume(Func != null); // ArgumentCount requires object to be properly resolved.
+ return Func.InParams.Count;
+ }
+ }
+ public virtual Type Typecheck(IList<Expr> actuals, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ //Contract.Requires(actuals != null);
+ Contract.Ensures(Contract.ValueAtReturn(out actuals) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ Contract.Assume(this.Func != null);
+ Contract.Assume(actuals.Count == Func.InParams.Count);
+ Contract.Assume(Func.OutParams.Count == 1);
+
+ List<Type/*!*/>/*!*/ resultingTypeArgs;
+ List<Type> actualResultType =
+ Type.CheckArgumentTypes(Func.TypeParameters,
+ out resultingTypeArgs,
+ new List<Type>(Func.InParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ actuals,
+ new List<Type>(Func.OutParams.Select(Item => Item.TypedIdent.Type).ToArray()),
+ null,
+ // we need some token to report a possibly wrong number of
+ // arguments
+ actuals.Count > 0 ? cce.NonNull(actuals[0]).tok : Token.NoToken,
+ "application of " + name.Name,
+ tc);
+
+ if (actualResultType == null) {
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+ return null;
+ } else {
+ Contract.Assert(actualResultType.Count == 1);
+ tpInstantiation =
+ SimpleTypeParamInstantiation.From(Func.TypeParameters, resultingTypeArgs);
+ return actualResultType[0];
+ }
+ }
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Assume(name.Type != null);
+ return name.Type;
+ }
+
+ public virtual T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+ }
+
+ public class TypeCoercion : IAppliable {
+ private IToken/*!*/ tok;
+ public Type/*!*/ Type;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(tok != null);
+ }
+
+ public TypeCoercion(IToken tok, Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires(tok != null);
+ this.tok = tok;
+ this.Type = type;
+ }
+
+ public override bool Equals(object obj) {
+ TypeCoercion other = obj as TypeCoercion;
+ if (other == null) {
+ return false;
+ } else {
+ return object.Equals(Type, other.Type);
+ }
+ }
+
+
+
+ public
+ string/*!*/ FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return ":";
+ }
+ }
+
+ public void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
+ int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(stream != null);
+ stream.SetToken(ref this.tok);
+ Contract.Assert(args.Count == 1);
+ // determine if parens are needed
+ int opBindingStrength = 0x80;
+ bool parensNeeded = opBindingStrength < contextBindingStrength ||
+ (fragileContext && opBindingStrength == contextBindingStrength);
+
+ if (parensNeeded)
+ stream.Write("(");
+
+ cce.NonNull(args[0]).Emit(stream, opBindingStrength, false);
+ stream.Write("{0} ", FunctionName);
+ Type.Emit(stream, 0);
+
+ if (parensNeeded)
+ stream.Write(")");
+ }
+
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ this.Type = this.Type.ResolveType(rc);
+ }
+
+ public int ArgumentCount {
+ get {
+ return 1;
+ }
+ }
+
+ public Type Typecheck(IList<Expr>/*!*/ args,
+ out TypeParamInstantiation/*!*/ tpInstantiation,
+ TypecheckingContext/*!*/ tc) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(tc != null);
+ Contract.Ensures(args != null);
+
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+
+ Contract.Assume(args.Count == 1);
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+
+ if (!this.Type.Unify(cce.NonNull(cce.NonNull(args[0]).Type)))
+ tc.Error(this.tok, "{0} cannot be coerced to {1}",
+ cce.NonNull(args[0]).Type, this.Type);
+ return this.Type;
+ }
+
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.Type;
+ }
+
+ public T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+
+ }
+
+ public class ArithmeticCoercion : IAppliable {
+ public enum CoercionType {
+ ToInt,
+ ToReal,
+ ToFloat
+ }
+
+ private IToken/*!*/ tok;
+ public readonly CoercionType Coercion;
+ private readonly string name;
+ private readonly Type type;
+ private readonly Type argType;
+ private readonly Type argType2;
+ private readonly int hashCode;
+
+ public ArithmeticCoercion(IToken tok, CoercionType coercion) {
+ this.tok = tok;
+ this.Coercion = coercion;
+
+ switch (coercion) {
+ case CoercionType.ToInt:
+ this.name = "int";
+ this.type = Type.Int;
+ this.argType = Type.Real;
+ this.hashCode = 1;
+ break;
+ case CoercionType.ToReal:
+ this.name = "real";
+ this.type = Type.Real;
+ this.argType = Type.Int;
+ this.hashCode = 2;
+ break;
+ default:
+ Contract.Assert(false);
+ break;
+ }
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this.name;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object other) {
+ ArithmeticCoercion ac = other as ArithmeticCoercion;
+ return ac != null && this.Coercion == ac.Coercion;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return this.hashCode;
+ }
+
+ public string/*!*/ FunctionName {
+ get {
+ return this.name;
+ }
+ }
+
+ public int ArgumentCount {
+ get {
+ return 1;
+ }
+ }
+
+ virtual public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ //Contract.Requires(args != null);
+ stream.Write(this.name);
+ stream.Write("(");
+ args.Emit(stream);
+ stream.Write(")");
+ }
+
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ }
+
+ public virtual Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ //Contract.Requires(args != null);
+ Contract.Ensures(args != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+
+ Contract.Assert(args.Count == 1);
+
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+
+ if (!(cce.NonNull(cce.NonNull(args[0]).Type).Unify(argType) || cce.NonNull(cce.NonNull(args[0]).Type).Unify(argType2)))
+ {
+ tc.Error(this.tok, "argument type {0} does not match expected type {1} or type {2}", cce.NonNull(args[0]).Type, this.argType, this.argType2);
+ }
+
+ return this.type;
+ }
+
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.type;
+ }
+
+ public virtual T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+ }
+
+ public class NAryExpr : Expr {
+ [Additive]
+ [Peer]
+ private IAppliable _Fun;
+ public IAppliable/*!*/ Fun {
+ get {
+ return _Fun;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Cannot change Function used by Immutable NAryExpr");
+
+ _Fun = value;
+ }
+ }
+ private List<Expr> _Args;
+ public IList<Expr> Args {
+ get {
+ if (Immutable)
+ return _Args.AsReadOnly();
+ else
+ return _Args;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Cannot change Args of Immutable NAryExpr");
+
+ _Args = value as List<Expr>;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Fun != null);
+ Contract.Invariant(Args != null);
+ }
+
+
+ // The instantiation of type parameters that is determined during type checking.
+ // Which type parameters are available depends on the IAppliable
+ public TypeParamInstantiation TypeParameters = null;
+
+ [Captured]
+ public NAryExpr(IToken/*!*/ tok, IAppliable/*!*/ fun, IList<Expr>/*!*/ args, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(fun != null);
+ Contract.Requires(args != null);
+ _Fun = fun;
+ Contract.Assert(Contract.ForAll(0, args.Count, index => args[index] != null));
+ if (immutable) {
+ // We need to make a new list because the client might be holding
+ // references to the list that they gave us which could be used to
+ // circumvent the immutability enforcement
+ _Args = new List<Expr>(args);
+ CachedHashCode = ComputeHashCode();
+ } else {
+ if (args is List<Expr>) {
+ // Preserve NAryExpr's old behaviour, we take ownership of the List<Expr>.
+ // We can only do this if the type matches
+ _Args = args as List<Expr>;
+ }
+ else {
+ // Otherwise we must make a copy
+ _Args = new List<Expr> (args);
+ }
+ }
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is NAryExpr))
+ return false;
+
+ NAryExpr other = (NAryExpr)obj;
+ return object.Equals(this.Fun, other.Fun) && this.Args.SequenceEqual(other.Args);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ if (Immutable)
+ return this.CachedHashCode;
+ else
+ return ComputeHashCode();
+ }
+
+ [Pure]
+ public override int ComputeHashCode() {
+ int h = this.Fun.GetHashCode();
+ // DO NOT USE Args.GetHashCode() because that uses Object.GetHashCode() which uses references
+ // We want structural equality
+ foreach (var arg in Args) {
+ h = (97*h) + arg.GetHashCode();
+ }
+ return h;
+ }
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+ Fun.Emit(Args, stream, contextBindingStrength, fragileContext);
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Fun.Resolve(rc, this);
+ foreach (Expr/*!*/ e in Args) {
+ Contract.Assert(e != null);
+ e.Resolve(rc);
+ }
+ }
+ public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ //Contract.Requires(freeVars != null);
+ foreach (Expr/*!*/ e in Args) {
+ Contract.Assert(e != null);
+ e.ComputeFreeVariables(freeVars);
+ }
+ // also add the free type variables
+ if (TypeParameters != null) {
+ foreach (TypeVariable/*!*/ var in TypeParameters.FormalTypeParams) {
+ Contract.Assert(var != null);
+ foreach (TypeVariable/*!*/ w in TypeParameters[var].FreeVariables) {
+ Contract.Assert(w != null);
+ freeVars.Add(w);
+ }
+ }
+ }
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ int prevErrorCount = tc.ErrorCount;
+ foreach (Expr/*!*/ e in Args) {
+ Contract.Assert(e != null);
+ e.Typecheck(tc);
+ }
+ if (Fun.ArgumentCount != Args.Count) {
+ tc.Error(this, "wrong number of arguments to function: {0} ({1} instead of {2})",
+ Fun.FunctionName, Args.Count, Fun.ArgumentCount);
+ } else if (tc.ErrorCount == prevErrorCount &&
+ // if the type parameters are set, this node has already been
+ // typechecked and does not need to be checked again
+ TypeParameters == null) {
+ TypeParamInstantiation tpInsts;
+ Type = Fun.Typecheck(Args, out tpInsts, tc); // Make sure we pass Args so if this Expr is immutable it is protected
+ TypeParameters = tpInsts;
+ }
+ IOverloadedAppliable oa = Fun as IOverloadedAppliable;
+ if (oa != null) {
+ oa.ResolveOverloading(this);
+ }
+ if (Type == null) {
+ // set Type to some non-null value
+ Type = new TypeProxy(this.tok, "type_checking_error");
+ }
+ }
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return Fun.ShallowType(Args);
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitNAryExpr(this);
+ }
+ }
+
+ public class MapSelect : IAppliable {
+
+ public readonly int Arity;
+ private readonly IToken/*!*/ tok;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(tok != null);
+ }
+
+
+ public MapSelect(IToken tok, int arity) {
+ Contract.Requires(tok != null);
+ this.tok = tok;
+ this.Arity = arity;
+ }
+
+ public string/*!*/ FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return "MapSelect";
+ }
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (!(obj is MapSelect))
+ return false;
+
+ MapSelect other = (MapSelect)obj;
+ return this.Arity == other.Arity;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return Arity.GetHashCode() * 2823;
+ }
+
+ public void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
+ int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(stream != null);
+ Contract.Assume(args.Count == Arity + 1);
+ Emit(args, stream, contextBindingStrength, fragileContext, false);
+ }
+
+ public static void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
+ int contextBindingStrength, bool fragileContext,
+ bool withRhs) {
+ Contract.Requires(args != null);
+ Contract.Requires(stream != null);
+ const int opBindingStrength = 0x90;
+ bool parensNeeded = opBindingStrength < contextBindingStrength ||
+ (fragileContext && opBindingStrength == contextBindingStrength);
+
+ if (parensNeeded) {
+ stream.Write("(");
+ }
+ cce.NonNull(args[0]).Emit(stream, opBindingStrength, false);
+ stream.Write("[");
+
+ string sep = "";
+ int lastIndex = withRhs ? args.Count - 1 : args.Count;
+ for (int i = 1; i < lastIndex; ++i) {
+ stream.Write(sep);
+ sep = ", ";
+ cce.NonNull(args[i]).Emit(stream);
+ }
+
+ if (withRhs) {
+ stream.Write(" := ");
+ cce.NonNull(args.Last()).Emit(stream);
+ }
+
+ stream.Write("]");
+ if (parensNeeded) {
+ stream.Write(")");
+ }
+ }
+
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ // PR: nothing?
+ }
+
+ public int ArgumentCount {
+ get {
+ return Arity + 1;
+ }
+ }
+
+ // it is assumed that each of the arguments has already been typechecked
+ public static Type Typecheck(Type/*!*/ mapType,
+ // we just pass an Absy, because in
+ // the AssignCmd maps can also be
+ // represented by non-expressions
+ Absy/*!*/ map,
+ List<Expr>/*!*/ indexes,
+ // the type parameters, in this context, are the parameters of the
+ // potentially polymorphic map type. Because it might happen that
+ // the whole map type is unknown and represented using a MapTypeProxy,
+ // the instantiations given in the following out-parameter are subject
+ // to change if further unifications are done.
+ out TypeParamInstantiation/*!*/ tpInstantiation,
+ TypecheckingContext/*!*/ tc,
+ IToken/*!*/ typeCheckingSubject,
+ string/*!*/ opName) {
+ Contract.Requires(mapType != null);
+ Contract.Requires(map != null);
+ Contract.Requires(indexes != null);
+ Contract.Requires(tc != null);
+ Contract.Requires(typeCheckingSubject != null);
+ Contract.Requires(opName != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+
+ mapType = mapType.Expanded;
+ if (mapType.IsMap && mapType.MapArity != indexes.Count) {
+ tc.Error(typeCheckingSubject, "wrong number of arguments in {0}: {1} instead of {2}",
+ opName, indexes.Count, mapType.MapArity);
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+ return null;
+ } else if (!mapType.Unify(new MapTypeProxy(map.tok, "select", indexes.Count))) {
+ tc.Error(map.tok, "{0} applied to a non-map: {1}", opName, map);
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+ return null;
+ }
+ mapType = TypeProxy.FollowProxy(mapType);
+
+ if (mapType is MapType) {
+ MapType mt = (MapType)mapType;
+ return mt.CheckArgumentTypes(indexes, out tpInstantiation,
+ typeCheckingSubject, opName, tc);
+ } else {
+ MapTypeProxy mt = (MapTypeProxy)mapType;
+ return mt.CheckArgumentTypes(indexes, out tpInstantiation,
+ typeCheckingSubject, opName, tc);
+ }
+ }
+
+ public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ Contract.Assume(args.Count == Arity + 1);
+
+ // FIXME: Wny are we passing a copy?
+ List<Expr> actualArgs = new List<Expr>();
+ for (int i = 1; i < args.Count; ++i)
+ actualArgs.Add(args[i]);
+
+ return Typecheck(cce.NonNull(cce.NonNull(args[0]).Type), cce.NonNull(args[0]),
+ actualArgs, out tpInstantiation, tc, this.tok, "map select");
+ }
+
+ /// <summary>
+ /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
+ /// </summary>
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Expr a0 = cce.NonNull(args[0]);
+ Type a0Type = a0.ShallowType;
+ if (a0Type == null || !a0Type.IsMap) {
+ // we are unable to determine the type of the select, so just return an arbitrary type
+ return Type.Int;
+ }
+ MapType mapType = a0Type.AsMap;
+ List<Type> actualArgTypes = new List<Type>();
+ for (int i = 1; i < args.Count; ++i) {
+ actualArgTypes.Add(cce.NonNull(args[i]).ShallowType);
+ }
+ return Type.InferValueType(mapType.TypeParameters, mapType.Arguments, mapType.Result, actualArgTypes);
+ }
+
+ public T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+ }
+
+ public class MapStore : IAppliable {
+
+ public readonly int Arity;
+ public readonly IToken/*!*/ tok;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(tok != null);
+ }
+
+
+ public MapStore(IToken tok, int arity) {
+ Contract.Requires(tok != null);
+ this.tok = tok;
+ this.Arity = arity;
+ }
+
+ public string/*!*/ FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return "MapStore";
+ }
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (!(obj is MapStore))
+ return false;
+
+ MapStore other = (MapStore)obj;
+ return this.Arity == other.Arity;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return Arity.GetHashCode() * 28231;
+ }
+
+ public void Emit(IList<Expr>/*!*/ args, TokenTextWriter/*!*/ stream,
+ int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(stream != null);
+ Contract.Assert(args.Count == Arity + 2);
+ MapSelect.Emit(args, stream, contextBindingStrength, fragileContext, true);
+ }
+
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ // PR: nothing?
+ }
+
+ public int ArgumentCount {
+ get {
+ return Arity + 2;
+ }
+ }
+
+ // it is assumed that each of the arguments has already been typechecked
+ public static Type Typecheck(IList<Expr>/*!*/ args, out TypeParamInstantiation/*!*/ tpInstantiation,
+ TypecheckingContext/*!*/ tc,
+ IToken/*!*/ typeCheckingSubject,
+ string/*!*/ opName) {
+ Contract.Requires(args != null);
+ Contract.Requires(tc != null);
+ Contract.Requires(typeCheckingSubject != null);
+ Contract.Requires(opName != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+
+ // part of the type checking works exactly as for MapSelect
+ List<Expr> selectArgs = new List<Expr>();
+ for (int i = 1; i < args.Count - 1; ++i)
+ selectArgs.Add(args[i]);
+ Type resultType =
+ MapSelect.Typecheck(cce.NonNull(cce.NonNull(args[0]).Type), cce.NonNull(args[0]),
+ selectArgs, out tpInstantiation, tc, typeCheckingSubject, opName);
+
+ // check the the rhs has the right type
+ if (resultType == null) {
+ // error messages have already been created by MapSelect.Typecheck
+ return null;
+ }
+ Type rhsType = cce.NonNull(cce.NonNull(args.Last()).Type);
+ if (!resultType.Unify(rhsType)) {
+ tc.Error(cce.NonNull(args.Last()).tok,
+ "right-hand side in {0} with wrong type: {1} (expected: {2})",
+ opName, rhsType, resultType);
+ return null;
+ }
+
+ return cce.NonNull(args[0]).Type;
+ }
+
+ public Type Typecheck(IList<Expr>/*!*/ args,
+ out TypeParamInstantiation/*!*/ tpInstantiation,
+ TypecheckingContext/*!*/ tc) {
+ //Contract.Requires(args != null);
+ //Contract.Requires(tc != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out args) != null);
+ Contract.Assert(args.Count == Arity + 2);
+ return Typecheck(args, out tpInstantiation, tc, this.tok, "map store");
+ }
+
+ /// <summary>
+ /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
+ /// </summary>
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return cce.NonNull(args[0]).ShallowType;
+ }
+
+ public T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+ }
+
+
+ public class IfThenElse : IAppliable {
+
+ private IToken/*!*/ _tok;
+
+ public IToken/*!*/ tok
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<IToken>() != null);
+ return this._tok;
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ this._tok = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this._tok != null);
+ }
+
+ public IfThenElse(IToken tok) {
+ Contract.Requires(tok != null);
+ this._tok = tok;
+ }
+
+ public string/*!*/ FunctionName {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return "if-then-else";
+ }
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (!(obj is IfThenElse))
+ return false;
+ return true;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return 1;
+ }
+
+ public void Emit(IList<Expr> args, TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ //Contract.Requires(args != null);
+ stream.SetToken(this);
+ Contract.Assert(args.Count == 3);
+ stream.push();
+ stream.Write("(if ");
+ cce.NonNull(args[0]).Emit(stream, 0x00, false);
+ stream.sep();
+ stream.Write(" then ");
+ cce.NonNull(args[1]).Emit(stream, 0x00, false);
+ stream.sep();
+ stream.Write(" else ");
+ cce.NonNull(args[2]).Emit(stream, 0x00, false);
+ stream.Write(")");
+ stream.pop();
+ }
+
+ public void Resolve(ResolutionContext rc, Expr subjectForErrorReporting) {
+ //Contract.Requires(subjectForErrorReporting != null);
+ //Contract.Requires(rc != null);
+ // PR: nothing?
+ }
+
+ public int ArgumentCount {
+ get {
+ return 3;
+ }
+ }
+
+ public Type Typecheck(IList<Expr> args, out TypeParamInstantiation tpInstantiation, TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ //Contract.Requires(args != null);
+ Contract.Ensures(args != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ Contract.Assert(args.Count == 3);
+ // the default; the only binary operator with a type parameter is equality, but right
+ // we don't store this parameter because it does not appear necessary
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+ Expr arg0 = cce.NonNull(args[0]);
+ Expr arg1 = cce.NonNull(args[1]);
+ Expr arg2 = cce.NonNull(args[2]);
+
+ if (!cce.NonNull(arg0.Type).Unify(Type.Bool)) {
+ tc.Error(this.tok, "the first argument to if-then-else should be bool, not {0}", arg0.Type);
+ } else if (!cce.NonNull(arg1.Type).Unify(cce.NonNull(arg2.Type))) {
+ tc.Error(this.tok, "branches of if-then-else have incompatible types {0} and {1}", arg1.Type, arg2.Type);
+ } else {
+ return arg1.Type;
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Returns the result type of the IAppliable, supposing the argument are of the correct types.
+ /// </summary>
+ public Type ShallowType(IList<Expr> args) {
+ //Contract.Requires(args != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return cce.NonNull(args[1]).ShallowType;
+ }
+
+ public T Dispatch<T>(IAppliableVisitor<T> visitor) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this);
+ }
+ }
+
+
+
+ public class CodeExpr : Expr {
+ public List<Variable>/*!*/ LocVars;
+ [Rep]
+ public List<Block/*!*/>/*!*/ Blocks;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(LocVars != null);
+ Contract.Invariant(cce.NonNullElements(Blocks));
+ }
+
+ public CodeExpr(List<Variable>/*!*/ localVariables, List<Block/*!*/>/*!*/ blocks, bool immutable=false)
+ : base(Token.NoToken, immutable) {
+ Contract.Requires(localVariables != null);
+ Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Requires(0 < blocks.Count);
+ LocVars = localVariables;
+ Blocks = blocks;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ // FIXME: This seems wrong we don't want reference equality, we want structural equality
+ [Pure]
+ public override bool Equals(object obj)
+ {
+ return base.Equals(obj);
+ }
+
+ [Pure]
+ public override int GetHashCode()
+ {
+ if (Immutable)
+ return CachedHashCode;
+ else
+ return ComputeHashCode();
+ }
+
+ [Pure]
+ public override int ComputeHashCode() {
+ return base.GetHashCode();
+ }
+
+
+ public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ //Contract.Requires(freeVars != null);
+ // Treat a BlockEexpr as if it has no free variables at all
+ }
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ //level++;
+ int level = 0;
+ stream.WriteLine(level, "|{");
+
+ if (this.LocVars.Count > 0) {
+ stream.Write(level + 1, "var ");
+ this.LocVars.Emit(stream, true);
+ stream.WriteLine(";");
+ }
+
+ foreach (Block/*!*/ b in this.Blocks) {
+ Contract.Assert(b != null);
+ b.Emit(stream, level + 1);
+ }
+
+ stream.WriteLine();
+ stream.WriteLine(level, "}|");
+
+ stream.WriteLine();
+ stream.WriteLine();
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+
+ rc.PushVarContext();
+ foreach (Variable/*!*/ v in LocVars) {
+ Contract.Assert(v != null);
+ v.Register(rc);
+ v.Resolve(rc);
+ }
+
+ rc.PushProcedureContext();
+ foreach (Block/*!*/ b in Blocks) {
+ Contract.Assert(b != null);
+ b.Register(rc);
+ }
+
+ foreach (Block/*!*/ b in Blocks) {
+ Contract.Assert(b != null);
+ b.Resolve(rc);
+ }
+
+ rc.PopProcedureContext();
+ rc.PopVarContext();
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ foreach (Variable/*!*/ v in LocVars) {
+ Contract.Assert(v != null);
+ v.Typecheck(tc);
+ }
+ foreach (Block/*!*/ b in Blocks) {
+ Contract.Assert(b != null);
+ b.Typecheck(tc);
+ }
+ this.Type = Type.Bool;
+ }
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return Type.Bool;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitCodeExpr(this);
+ }
+ }
+
+ public class BvExtractExpr : Expr {
+ private /*readonly--except in StandardVisitor*/ Expr/*!*/ _Bitvector;
+ public Expr Bitvector {
+ get {
+ return _Bitvector;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Cannot change BitVector field of an immutable BvExtractExpr");
+
+ _Bitvector = value;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(_Bitvector != null);
+ }
+
+ public readonly int Start, End;
+
+ public BvExtractExpr(IToken/*!*/ tok, Expr/*!*/ bv, int end, int start, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(bv != null);
+ _Bitvector = bv;
+ Start = start;
+ End = end;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is BvExtractExpr))
+ return false;
+
+ BvExtractExpr other = (BvExtractExpr)obj;
+ return object.Equals(this.Bitvector, other.Bitvector) &&
+ this.Start.Equals(other.Start) && this.End.Equals(other.End);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ if (Immutable)
+ return CachedHashCode;
+ else
+ return ComputeHashCode();
+ }
+
+ [Pure]
+ public override int ComputeHashCode() {
+ int h = this.Bitvector.GetHashCode();
+ h ^= Start * 17 ^ End * 13;
+ return h;
+ }
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+ int opBindingStrength = 0x90;
+ bool parensNeeded = opBindingStrength < contextBindingStrength ||
+ (fragileContext && opBindingStrength == contextBindingStrength);
+
+ if (parensNeeded) {
+ stream.Write("(");
+ }
+ Bitvector.Emit(stream, opBindingStrength, false);
+ stream.Write("[" + End + ":" + Start + "]");
+ if (parensNeeded) {
+ stream.Write(")");
+ }
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Bitvector.Resolve(rc);
+ }
+ public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ //Contract.Requires(freeVars != null);
+ Bitvector.ComputeFreeVariables(freeVars);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ Bitvector.Typecheck(tc);
+ Contract.Assert(Bitvector.Type != null); // follows from postcondition of Expr.Typecheck
+
+ if (Start < 0) {
+ tc.Error(this, "start index in extract must not be negative");
+ } else if (End < 0) {
+ tc.Error(this, "end index in extract must not be negative");
+ } else if (End < Start) {
+ tc.Error(this, "start index in extract must be no bigger than the end index");
+ } else {
+ Type typeConstraint = new BvTypeProxy(this.tok, "extract", End - Start);
+ if (typeConstraint.Unify(Bitvector.Type)) {
+ Type = Type.GetBvType(End - Start);
+ } else {
+ tc.Error(this, "extract operand must be a bitvector of at least {0} bits (got {1})", End - Start, Bitvector.Type);
+ }
+ }
+ if (Type == null) {
+ Type = new TypeProxy(this.tok, "type_checking_error");
+ }
+ }
+
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return Type.GetBvType(End - Start);
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitBvExtractExpr(this);
+ }
+ }
+
+ public class BvConcatExpr : Expr {
+ private /*readonly--except in StandardVisitor*/ Expr/*!*/ _E0, _E1;
+ public Expr E0 {
+ get {
+ return _E0;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Can't change E0 reference on immutable Expr");
+
+ _E0 = value;
+ }
+ }
+ public Expr E1 {
+ get {
+ return _E1;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException("Can't change E1 reference on immutable Expr");
+
+ _E1 = value;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(E0 != null);
+ Contract.Invariant(E1 != null);
+ }
+
+
+ public BvConcatExpr(IToken/*!*/ tok, Expr/*!*/ e0, Expr/*!*/ e1, bool immutable=false)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ _E0 = e0;
+ _E1 = e1;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj is BvConcatExpr))
+ return false;
+
+ BvConcatExpr other = (BvConcatExpr)obj;
+ return object.Equals(this.E0, other.E0) && object.Equals(this.E1, other.E1);
+ }
+
+ [Pure]
+ public override int GetHashCode()
+ {
+ if (Immutable)
+ return CachedHashCode;
+ else
+ return ComputeHashCode();
+ }
+
+ [Pure]
+ public override int ComputeHashCode() {
+ int h = this.E0.GetHashCode() ^ this.E1.GetHashCode() * 17;
+ return h;
+ }
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+ int opBindingStrength = 0x32;
+ bool parensNeeded = opBindingStrength < contextBindingStrength ||
+ (fragileContext && opBindingStrength == contextBindingStrength);
+
+ if (parensNeeded) {
+ stream.Write("(");
+ }
+ E0.Emit(stream, opBindingStrength, false);
+ stream.Write(" ++ ");
+ // while this operator is associative, our incomplete axioms in int translation don't
+ // make much use of it, so better stick to the actual tree shape
+ E1.Emit(stream, opBindingStrength, true);
+ if (parensNeeded) {
+ stream.Write(")");
+ }
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ E0.Resolve(rc);
+ E1.Resolve(rc);
+ }
+ public override void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ //Contract.Requires(freeVars != null);
+ E0.ComputeFreeVariables(freeVars);
+ E1.ComputeFreeVariables(freeVars);
+ }
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ E0.Typecheck(tc);
+ Contract.Assert(E0.Type != null); // follows from postcondition of Expr.Typecheck
+ E1.Typecheck(tc);
+ Contract.Assert(E1.Type != null); // follows from postcondition of Expr.Typecheck
+
+ if (E0.Type.Unify(new BvTypeProxy(this.tok, "concat0", 0)) && E1.Type.Unify(new BvTypeProxy(this.tok, "concat1", 0))) {
+ Type = new BvTypeProxy(this.tok, "concat", E0.Type, E1.Type);
+ } else {
+ tc.Error(this, "++ operands need to be bitvectors (got {0}, {1})", E0.Type, E1.Type);
+ }
+ if (Type == null) {
+ Type = new TypeProxy(this.tok, "type_checking_error");
+ }
+ }
+
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ Type t0 = E0.ShallowType;
+ Type t1 = E1.ShallowType;
+ int len0 = t0.IsBv ? t0.BvBits : /*expression is not type correct, so just pick an arbitrary number of bits*/0;
+ int len1 = t1.IsBv ? t1.BvBits : /*expression is not type correct, so just pick an arbitrary number of bits*/0;
+ return Type.GetBvType(len0 + len1);
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitBvConcatExpr(this);
+ }
+ }
+}
+
diff --git a/Source/Core/AbsyQuant.cs b/Source/Core/AbsyQuant.cs
index 2258e553..3a27eddf 100644
--- a/Source/Core/AbsyQuant.cs
+++ b/Source/Core/AbsyQuant.cs
@@ -1,930 +1,953 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// BoogiePL - AbsyQuant.cs
-//---------------------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie {
- using System;
- using System.Collections;
- using System.Diagnostics;
- using System.Collections.Generic;
- using System.Linq;
- using Microsoft.Boogie.AbstractInterpretation;
- using System.Diagnostics.Contracts;
- using Microsoft.Basetypes;
-
- using Set = GSet<object>;
-
- //---------------------------------------------------------------------
- // Quantifiers and general binders
- //---------------------------------------------------------------------
-
- public enum BinderKind {
- Forall,
- Exists,
- Lambda
- }
- [ContractClassFor(typeof(BinderExpr))]
- abstract class BinderExprContracts : BinderExpr {
- public override BinderKind Kind {
- get {
- throw new NotImplementedException();
- }
- }
- public BinderExprContracts():base(null,null,null,null,null,false){
- }
-
- public override Type ShallowType {
- get {
- throw new NotImplementedException();
- }
- }
- }
- [ContractClass(typeof(BinderExprContracts))]
- public abstract class BinderExpr : Expr {
- public List<TypeVariable>/*!*/ TypeParameters;
- public List<Variable>/*!*/ Dummies;
- public QKeyValue Attributes;
- // FIXME: Protect the above Fields
- public Expr _Body;
- public Expr/*!*/ Body {
- get {
- return _Body;
- }
- set {
- if (Immutable)
- throw new InvalidOperationException ("Cannot change the Body of an immutable BinderExpr");
-
- _Body = value;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(TypeParameters != null);
- Contract.Invariant(Dummies != null);
- Contract.Invariant(Body != null);
- }
-
- public BinderExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParameters,
- List<Variable>/*!*/ dummies, QKeyValue kv, Expr/*!*/ body, bool immutable)
- : base(tok, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(typeParameters != null);
- Contract.Requires(dummies != null);
- Contract.Requires(body != null);
- Contract.Requires(dummies.Count + typeParameters.Count > 0);
- TypeParameters = typeParameters;
- Dummies = dummies;
- Attributes = kv;
- _Body = body;
- if (immutable)
- CachedHashCode = ComputeHashCode();
- }
-
- abstract public BinderKind Kind {
- get;
- }
-
- protected static bool CompareAttributesAndTriggers = false;
-
- public static bool EqualWithAttributesAndTriggers(object a, object b) {
- CompareAttributesAndTriggers = true;
- var res = object.Equals(a, b);
- Contract.Assert(CompareAttributesAndTriggers);
- CompareAttributesAndTriggers = false;
- return res;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object obj) {
- return BinderEquals(obj);
- }
-
- public bool BinderEquals(object obj) {
- if (obj == null) {
- return false;
- }
- if (!(obj is BinderExpr) ||
- this.Kind != ((BinderExpr) obj).Kind) {
- return false;
- }
-
- var other = (BinderExpr) obj;
-
- return this.TypeParameters.SequenceEqual(other.TypeParameters)
- && this.Dummies.SequenceEqual(other.Dummies)
- && (!CompareAttributesAndTriggers || object.Equals(this.Attributes, other.Attributes))
- && object.Equals(this.Body, other.Body);
- }
-
- [Pure]
- public override int GetHashCode()
- {
- if (Immutable)
- return CachedHashCode;
- else
- return ComputeHashCode();
- }
-
- [Pure]
- public override int ComputeHashCode() {
- // Note, we don't hash triggers and attributes
-
- // DO NOT USE Dummies.GetHashCode() because we want structurally
- // identical Expr to have the same hash code **not** identical references
- // to have the same hash code.
- int h = 0;
- foreach (var dummyVar in this.Dummies) {
- h = ( 53 * h ) + dummyVar.GetHashCode();
- }
-
- h ^= this.Body.GetHashCode();
-
- // DO NOT USE TypeParameters.GetHashCode() because we want structural
- // identical Expr to have the same hash code **not** identical references
- // to have the same hash code.
- int h2 = 0;
- foreach (var typeParam in this.TypeParameters) {
- h2 = ( 97 * h2 ) + typeParam.GetHashCode();
- }
-
- h = h * 5 + h2;
- h *= ((int)Kind + 1);
- return h;
- }
-
- protected virtual void EmitTypeHint(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- }
-
- protected virtual void EmitTriggers(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- }
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
- //Contract.Requires(stream != null);
- stream.push();
- stream.Write(this, "({0}", Kind.ToString().ToLower());
- this.EmitTypeHint(stream);
- Type.EmitOptionalTypeParams(stream, TypeParameters);
- stream.Write(this, " ");
- this.Dummies.Emit(stream, true);
- stream.Write(" :: ");
- stream.sep();
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- kv.Emit(stream);
- stream.Write(" ");
- }
- this.EmitTriggers(stream);
- stream.sep();
-
- this.Body.Emit(stream);
- stream.Write(")");
- stream.pop();
- }
-
- protected virtual void ResolveTriggers(ResolutionContext rc) {
- Contract.Requires(rc != null);
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- if (rc.TriggerMode) {
- rc.Error(this, "quantifiers are not allowed in triggers");
- }
-
- int previousTypeBinderState = rc.TypeBinderState;
- try {
- foreach (TypeVariable/*!*/ v in TypeParameters) {
- Contract.Assert(v != null);
- rc.AddTypeBinder(v);
- }
-
- rc.PushVarContext();
- foreach (Variable/*!*/ v in Dummies) {
- Contract.Assert(v != null);
- v.Register(rc);
- v.Resolve(rc);
- }
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- kv.Resolve(rc);
- }
- this.ResolveTriggers(rc);
- Body.Resolve(rc);
- rc.PopVarContext();
-
- // establish a canonical order of the type parameters
- this.TypeParameters = Type.SortTypeParams(TypeParameters, new List<Type>(Dummies.Select(Item => Item.TypedIdent.Type).ToArray()), null);
-
- } finally {
- rc.TypeBinderState = previousTypeBinderState;
- }
- }
-
- public override void ComputeFreeVariables(Set freeVars) {
- //Contract.Requires(freeVars != null);
- ComputeBinderFreeVariables(TypeParameters, Dummies, Body, Attributes, freeVars);
- }
-
- public static void ComputeBinderFreeVariables(List<TypeVariable> typeParameters, List<Variable> dummies, Expr body, QKeyValue attributes, Set freeVars) {
- Contract.Requires(dummies != null);
- Contract.Requires(body != null);
-
- foreach (var v in dummies) {
- Contract.Assert(v != null);
- Contract.Assert(!freeVars[v]);
- }
- body.ComputeFreeVariables(freeVars);
- for (var a = attributes; a != null; a = a.Next) {
- foreach (var o in a.Params) {
- var e = o as Expr;
- if (e != null) {
- e.ComputeFreeVariables(freeVars);
- }
- }
- }
- foreach (var v in dummies) {
- freeVars.AddRange(v.TypedIdent.Type.FreeVariables);
- }
- freeVars.RemoveRange(dummies);
- freeVars.RemoveRange(typeParameters);
- }
-
- protected List<TypeVariable> GetUnmentionedTypeParameters() {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
- List<TypeVariable>/*!*/ dummyParameters = Type.FreeVariablesIn(new List<Type>(Dummies.Select(Item => Item.TypedIdent.Type).ToArray()));
- Contract.Assert(dummyParameters != null);
- List<TypeVariable>/*!*/ unmentionedParameters = new List<TypeVariable>();
- foreach (TypeVariable/*!*/ var in TypeParameters) {
- Contract.Assert(var != null);
- if (!dummyParameters.Contains(var))
- unmentionedParameters.Add(var);
- }
- return unmentionedParameters;
- }
- }
-
- public class QKeyValue : Absy {
- public readonly string/*!*/ Key;
- private readonly List<object/*!*/>/*!*/ _params; // each element is either a string or an Expr
-
- public void AddParam(object p)
- {
- Contract.Requires(p != null);
- this._params.Add(p);
- }
-
- public void AddParams(IEnumerable<object> ps)
- {
- Contract.Requires(cce.NonNullElements(ps));
- this._params.AddRange(ps);
- }
-
- public void ClearParams()
- {
- this._params.Clear();
- }
-
- public IList<object> Params
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IList<object>>()));
- Contract.Ensures(Contract.Result<IList<object>>().IsReadOnly);
- return this._params.AsReadOnly();
- }
- }
-
- public QKeyValue Next;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Key != null);
- Contract.Invariant(cce.NonNullElements(this._params));
- }
-
- public QKeyValue(IToken tok, string key, IList<object/*!*/>/*!*/ parameters, QKeyValue next)
- : base(tok) {
- Contract.Requires(key != null);
- Contract.Requires(tok != null);
- Contract.Requires(cce.NonNullElements(parameters));
- Key = key;
- this._params = new List<object>(parameters);
- Next = next;
- }
-
- public void Emit(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- stream.Write("{:");
- stream.Write(Key);
- string sep = " ";
- foreach (object p in Params) {
- stream.Write(sep);
- sep = ", ";
- if (p is string) {
- stream.Write("\"");
- stream.Write((string)p);
- stream.Write("\"");
- } else {
- ((Expr)p).Emit(stream);
- }
- }
- stream.Write("}");
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- foreach (object p in Params) {
- if (p is Expr) {
- ((Expr)p).Resolve(rc);
- }
- }
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- foreach (object p in Params) {
- if (p is Expr) {
- ((Expr)p).Typecheck(tc);
- }
- }
- }
- public void AddLast(QKeyValue other) {
- Contract.Requires(other != null);
- QKeyValue current = this;
- while (current.Next != null) {
- current = current.Next;
- }
- current.Next = other;
- }
- // Look for {:name string} in list of attributes.
- [Pure]
- public static string FindStringAttribute(QKeyValue kv, string name) {
- Contract.Requires(name != null);
- for (; kv != null; kv = kv.Next) {
- if (kv.Key == name) {
- if (kv.Params.Count == 1 && kv.Params[0] is string) {
- return (string)kv.Params[0];
- }
- }
- }
- return null;
- }
- // Look for {:name expr} in list of attributes.
- public static Expr FindExprAttribute(QKeyValue kv, string name) {
- Contract.Requires(name != null);
- for (; kv != null; kv = kv.Next) {
- if (kv.Key == name) {
- if (kv.Params.Count == 1 && kv.Params[0] is Expr) {
- return (Expr)kv.Params[0];
- }
- }
- }
- return null;
- }
- // Return 'true' if {:name true} or {:name} is an attribute in 'kv'
- public static bool FindBoolAttribute(QKeyValue kv, string name) {
- Contract.Requires(name != null);
- for (; kv != null; kv = kv.Next) {
- if (kv.Key == name) {
- return kv.Params.Count == 0 ||
- (kv.Params.Count == 1 && kv.Params[0] is LiteralExpr && ((LiteralExpr)kv.Params[0]).IsTrue);
- }
- }
- return false;
- }
-
- public static int FindIntAttribute(QKeyValue kv, string name, int defl) {
- Contract.Requires(name != null);
- Expr e = FindExprAttribute(kv, name);
- LiteralExpr l = e as LiteralExpr;
- if (l != null && l.isBigNum)
- return l.asBigNum.ToIntSafe;
- return defl;
- }
-
- public override Absy Clone() {
- List<object> newParams = new List<object>();
- foreach (object o in Params)
- newParams.Add(o);
- return new QKeyValue(tok, Key, newParams, (Next == null) ? null : (QKeyValue)Next.Clone());
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- return visitor.VisitQKeyValue(this);
- }
-
- public override bool Equals(object obj) {
- var other = obj as QKeyValue;
- if (other == null) {
- return false;
- } else {
- return Key == other.Key && object.Equals(Params, other.Params) &&
- (Next == null
- ? other.Next == null
- : object.Equals(Next, other.Next));
- }
- }
-
- public override int GetHashCode() {
- throw new NotImplementedException();
- }
- }
-
- public class Trigger : Absy {
- public readonly bool Pos;
- [Rep]
- private List<Expr>/*!*/ tr;
-
- public IList<Expr>/*!*/ Tr
- {
- get
- {
- Contract.Ensures(Contract.Result<IList<Expr>>() != null);
- Contract.Ensures(Contract.Result<IList<Expr>>().Count >= 1);
- Contract.Ensures(this.Pos || Contract.Result<IList<Expr>>().Count == 1);
- return this.tr.AsReadOnly();
- }
- set
- {
- Contract.Requires(value != null);
- Contract.Requires(value.Count >= 1);
- Contract.Requires(this.Pos || value.Count == 1);
- this.tr = new List<Expr>(value);
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(this.tr != null);
- Contract.Invariant(this.tr.Count >= 1);
- Contract.Invariant(Pos || this.tr.Count == 1);
- }
-
- public Trigger Next;
-
- public Trigger(IToken/*!*/ tok, bool pos, IEnumerable<Expr>/*!*/ tr, Trigger next = null)
- : base(tok) {
- Contract.Requires(tok != null);
- Contract.Requires(tr != null);
- Contract.Requires(tr.Count() >= 1);
- Contract.Requires(pos || tr.Count() == 1);
- this.Pos = pos;
- this.Tr = new List<Expr>(tr);
- this.Next = next;
- }
-
- public void Emit(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- stream.SetToken(this);
- Contract.Assert(this.Tr.Count >= 1);
- string/*!*/ sep = Pos ? "{ " : "{:nopats ";
- foreach (Expr/*!*/ e in this.Tr) {
- Contract.Assert(e != null);
- stream.Write(sep);
- sep = ", ";
- e.Emit(stream);
- }
- stream.Write(" }");
- }
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- rc.TriggerMode = true;
- foreach (Expr/*!*/ e in this.Tr) {
- Contract.Assert(e != null);
- e.Resolve(rc);
-
- // just a variable by itself is not allowed
- if (e is IdentifierExpr) {
- rc.Error(e, "a matching pattern must be more than just a variable by itself: {0}", e);
- }
-
- // the free-variable check is performed in the surrounding quantifier expression (because that's
- // where the bound variables are known)
- }
- rc.TriggerMode = false;
- }
-
- /// <summary>
- /// Add to "freeVars" the free variables in the triggering expressions.
- /// </summary>
- public void ComputeFreeVariables(Set /*Variable*/ freeVars) {
- Contract.Requires(freeVars != null);
- foreach (Expr/*!*/ e in this.Tr) {
- Contract.Assert(e != null);
- e.ComputeFreeVariables(freeVars);
- }
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- foreach (Expr/*!*/ e in this.Tr) {
- Contract.Assert(e != null);
- e.Typecheck(tc);
- }
- }
-
- public void AddLast(Trigger other) {
- Trigger current = this;
- while (current.Next != null) {
- current = current.Next;
- }
- current.Next = other;
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitTrigger(this);
- }
-
- public override bool Equals(object obj) {
- var other = obj as Trigger;
- if (other == null) {
- return false;
- } else {
- return this.Tr.SequenceEqual(other.Tr) &&
- (Next == null ? other.Next == null : object.Equals(Next, other.Next));
- }
- }
-
- public override int GetHashCode() {
- throw new NotImplementedException();
- }
- }
-
- public class ForallExpr : QuantifierExpr {
- public ForallExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParams,
- List<Variable>/*!*/ dummies, QKeyValue kv, Trigger triggers, Expr/*!*/ body, bool immutable=false)
- : base(tok, typeParams, dummies, kv, triggers, body, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(dummies != null);
- Contract.Requires(body != null);
- Contract.Requires(dummies.Count + typeParams.Count > 0);
- }
- public ForallExpr(IToken tok, List<Variable> dummies, Trigger triggers, Expr body, bool immutable=false)
- : base(tok, new List<TypeVariable>(), dummies, null, triggers, body, immutable) {
- Contract.Requires(body != null);
- Contract.Requires(dummies != null);
- Contract.Requires(tok != null);
- Contract.Requires(dummies.Count > 0);
- }
- public ForallExpr(IToken tok, List<Variable> dummies, Expr body, bool immutable=false)
- : base(tok, new List<TypeVariable>(), dummies, null, null, body, immutable) {
- Contract.Requires(body != null);
- Contract.Requires(dummies != null);
- Contract.Requires(tok != null);
- Contract.Requires(dummies.Count > 0);
- }
- public ForallExpr(IToken tok, List<TypeVariable> typeParams, List<Variable> dummies, Expr body, bool immutable=false)
- : base(tok, typeParams, dummies, null, null, body, immutable) {
- Contract.Requires(body != null);
- Contract.Requires(dummies != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(tok != null);
- Contract.Requires(dummies.Count + typeParams.Count > 0);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitForallExpr(this);
- }
-
- public override BinderKind Kind {
- get {
- return BinderKind.Forall;
- }
- }
- }
-
- public class ExistsExpr : QuantifierExpr {
- public ExistsExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParams, List<Variable>/*!*/ dummies,
- QKeyValue kv, Trigger triggers, Expr/*!*/ body, bool immutable=false)
- : base(tok, typeParams, dummies, kv, triggers, body, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(typeParams != null);
- Contract.Requires(dummies != null);
- Contract.Requires(body != null);
- Contract.Requires(dummies.Count + typeParams.Count > 0);
- }
- public ExistsExpr(IToken tok, List<Variable> dummies, Trigger triggers, Expr body, bool immutable=false)
- : base(tok, new List<TypeVariable>(), dummies, null, triggers, body, immutable) {
- Contract.Requires(body != null);
- Contract.Requires(dummies != null);
- Contract.Requires(tok != null);
- Contract.Requires(dummies.Count > 0);
- }
- public ExistsExpr(IToken tok, List<Variable> dummies, Expr body, bool immutable=false)
- : base(tok, new List<TypeVariable>(), dummies, null, null, body, immutable) {
- Contract.Requires(body != null);
- Contract.Requires(dummies != null);
- Contract.Requires(tok != null);
- Contract.Requires(dummies.Count > 0);
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitExistsExpr(this);
- }
-
- public override BinderKind Kind {
- get {
- return BinderKind.Exists;
- }
- }
- }
-
- public abstract class QuantifierExpr : BinderExpr {
- public Trigger Triggers;
-
- static int SkolemIds = -1;
- public static int GetNextSkolemId() {
- return System.Threading.Interlocked.Increment(ref SkolemIds);
- }
-
- public readonly int SkolemId;
-
- public QuantifierExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParameters,
- List<Variable>/*!*/ dummies, QKeyValue kv, Trigger triggers, Expr/*!*/ body, bool immutable)
- : base(tok, typeParameters, dummies, kv, body, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(typeParameters != null);
- Contract.Requires(dummies != null);
- Contract.Requires(body != null);
- Contract.Requires(dummies.Count + typeParameters.Count > 0);
-
- Contract.Assert((this is ForallExpr) || (this is ExistsExpr));
-
- Triggers = triggers;
- SkolemId = GetNextSkolemId();
- }
-
- protected override void EmitTriggers(TokenTextWriter stream) {
- //Contract.Requires(stream != null);
- stream.push();
- for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
- tr.Emit(stream);
- stream.Write(" ");
- stream.sep();
- }
- stream.pop();
- }
-
- // if the user says ( forall x :: forall y :: ... ) and specifies *no* triggers, we transform it to
- // (forall x, y :: ... ) which may help the prover to pick trigger terms
- //
- // (Note: there used to be a different criterion here, which allowed merging when triggers were specified, which could cause prover errors due to resulting unbound variables in the triggers)
- private void MergeAdjecentQuantifier() {
- QuantifierExpr qbody = Body as QuantifierExpr;
- if (!(qbody != null && (qbody is ForallExpr) == (this is ForallExpr) && Triggers == null)) {
- return;
- }
- qbody.MergeAdjecentQuantifier();
- if (this.Triggers != null || qbody.Triggers != null) {
- return;
- }
- Body = qbody.Body;
- TypeParameters.AddRange(qbody.TypeParameters);
- Dummies.AddRange(qbody.Dummies);
- Triggers = qbody.Triggers;
- if (qbody.Attributes != null) {
- if (Attributes == null) {
- Attributes = qbody.Attributes;
- } else {
- QKeyValue p = Attributes;
- while (p.Next != null) {
- p = p.Next;
- }
- p.Next = qbody.Attributes;
- }
- }
- }
-
- #region never triggers
- private class NeverTriggerCollector : ReadOnlyVisitor {
- QuantifierExpr/*!*/ parent;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(parent != null);
- }
-
- public NeverTriggerCollector(QuantifierExpr p) {
- Contract.Requires(p != null);
- parent = p;
- }
-
- public override Expr VisitNAryExpr(NAryExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- FunctionCall fn = node.Fun as FunctionCall;
- if (fn != null && cce.NonNull(fn.Func).NeverTrigger) {
- parent.Triggers = new Trigger(fn.Func.tok, false, new List<Expr> { node} , parent.Triggers);
- }
- return base.VisitNAryExpr(node);
- }
- public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node) {
- // don't go into quantifier expression or its triggers, since the terms in there may have more bound variables
- // (note, with only the VisitBinderExpr override below, we'd still be visiting triggers, which we don't want to do)
- return node;
- }
- public override BinderExpr VisitBinderExpr(BinderExpr node) {
- // don't go into binder expression, since the terms in there may have more bound variables
- return node;
- }
- }
-
- private bool neverTriggerApplied;
- private void ApplyNeverTriggers() {
- if (neverTriggerApplied) {
- return;
- }
- neverTriggerApplied = true;
-
- for (Trigger t = Triggers; t != null; t = t.Next) {
- if (t.Pos) {
- return;
- }
- }
-
- NeverTriggerCollector visitor = new NeverTriggerCollector(this);
- visitor.VisitExpr(Body);
- }
- #endregion
-
- protected override void ResolveTriggers(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
- int prevErrorCount = rc.ErrorCount;
- tr.Resolve(rc);
- if (prevErrorCount == rc.ErrorCount) {
- // for positive triggers, make sure all bound variables are mentioned
- if (tr.Pos) {
- Set /*Variable*/ freeVars = new Set /*Variable*/ ();
- tr.ComputeFreeVariables(freeVars);
- foreach (Variable/*!*/ v in Dummies) {
- Contract.Assert(v != null);
- if (!freeVars[v]) {
- rc.Error(tr, "trigger must mention all quantified variables, but does not mention: {0}", v);
- }
- }
- }
- }
- }
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- int oldErrorCount = rc.ErrorCount;
-
- this.MergeAdjecentQuantifier();
-
- base.Resolve(rc);
-
- if (oldErrorCount == rc.ErrorCount) {
- this.ApplyNeverTriggers();
- }
- }
-
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- kv.Typecheck(tc);
- }
- for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
- tr.Typecheck(tc);
- }
- Body.Typecheck(tc);
- Contract.Assert(Body.Type != null); // follows from postcondition of Expr.Typecheck
- if (!Body.Type.Unify(Type.Bool)) {
- tc.Error(this, "quantifier body must be of type bool");
- }
- this.Type = Type.Bool;
-
- // Check that type parameters occur in the types of the
- // dummies, or otherwise in the triggers. This can only be
- // done after typechecking
- List<TypeVariable>/*!*/ unmentionedParameters = GetUnmentionedTypeParameters();
- Contract.Assert(unmentionedParameters != null);
-
- if (unmentionedParameters.Count > 0) {
- // all the type parameters that do not occur in dummy types
- // have to occur in triggers
-
- for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
- // for positive triggers, make sure all bound variables are mentioned
- if (tr.Pos) {
- Set /*Variable*/ freeVars = new Set /*Variable*/ ();
- tr.ComputeFreeVariables(freeVars);
- foreach (TypeVariable/*!*/ v in unmentionedParameters) {
- Contract.Assert(v != null);
- if (!freeVars[v])
- tc.Error(tr,
- "trigger does not mention {0}, which does not occur in variables types either",
- v);
- }
- }
- }
- }
- }
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return Type.Bool;
- }
- }
-
- public override bool Equals(object obj) {
- var other = obj as QuantifierExpr;
- if (other == null) {
- return false;
- } else {
- return this.BinderEquals(obj) &&
- (!CompareAttributesAndTriggers || object.Equals(Triggers, other.Triggers));
- }
- }
- }
-
-
- public class LambdaExpr : BinderExpr {
- public LambdaExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParameters,
- List<Variable>/*!*/ dummies, QKeyValue kv, Expr/*!*/ body, bool immutable=false)
- : base(tok, typeParameters, dummies, kv, body, immutable) {
- Contract.Requires(tok != null);
- Contract.Requires(typeParameters != null);
- Contract.Requires(dummies != null);
- Contract.Requires(body != null);
- Contract.Requires(dummies.Count + typeParameters.Count > 0);
- }
-
- public override BinderKind Kind {
- get {
- return BinderKind.Lambda;
- }
- }
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- base.Resolve(rc);
- }
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
- kv.Typecheck(tc);
- }
- Body.Typecheck(tc);
- Contract.Assert(Body.Type != null); // follows from postcondition of Expr.Typecheck
-
- List<Type>/*!*/ argTypes = new List<Type>();
- foreach (Variable/*!*/ v in Dummies) {
- Contract.Assert(v != null);
- argTypes.Add(v.TypedIdent.Type);
- }
- this.Type = new MapType(this.tok, this.TypeParameters, argTypes, Body.Type);
-
- // Check that type parameters occur in the types of the
- // dummies, or otherwise in the triggers. This can only be
- // done after typechecking
- List<TypeVariable>/*!*/ unmentionedParameters = GetUnmentionedTypeParameters();
- Contract.Assert(unmentionedParameters != null);
-
- if (unmentionedParameters.Count > 0) {
- tc.Error(this, "the type variable {0} does not occur in types of the lambda parameters", unmentionedParameters[0]);
- }
- }
-
- private Type mapType;
- public override Type/*!*/ ShallowType {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- if (mapType == null) {
- List<Type>/*!*/ argTypes = new List<Type>();
- foreach (Variable/*!*/ v in Dummies) {
- Contract.Assert(v != null);
- argTypes.Add(v.TypedIdent.Type);
- }
- mapType = new MapType(this.tok, this.TypeParameters, argTypes, Body.ShallowType);
- }
-
- return mapType;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitLambdaExpr(this);
- }
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// BoogiePL - AbsyQuant.cs
+//---------------------------------------------------------------------------------------------
+
+namespace Microsoft.Boogie {
+ using System;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Collections.Generic;
+ using System.Linq;
+ using Microsoft.Boogie.AbstractInterpretation;
+ using System.Diagnostics.Contracts;
+ using Microsoft.Basetypes;
+
+ using Set = GSet<object>;
+
+ //---------------------------------------------------------------------
+ // Quantifiers and general binders
+ //---------------------------------------------------------------------
+
+ public enum BinderKind {
+ Forall,
+ Exists,
+ Lambda
+ }
+ [ContractClassFor(typeof(BinderExpr))]
+ abstract class BinderExprContracts : BinderExpr {
+ public override BinderKind Kind {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+ public BinderExprContracts():base(null,null,null,null,null,false){
+ }
+
+ public override Type ShallowType {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+ }
+ [ContractClass(typeof(BinderExprContracts))]
+ public abstract class BinderExpr : Expr {
+ public List<TypeVariable>/*!*/ TypeParameters;
+ public List<Variable>/*!*/ Dummies;
+ public QKeyValue Attributes;
+ // FIXME: Protect the above Fields
+ public Expr _Body;
+ public Expr/*!*/ Body {
+ get {
+ return _Body;
+ }
+ set {
+ if (Immutable)
+ throw new InvalidOperationException ("Cannot change the Body of an immutable BinderExpr");
+
+ _Body = value;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(TypeParameters != null);
+ Contract.Invariant(Dummies != null);
+ Contract.Invariant(Body != null);
+ }
+
+ public BinderExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParameters,
+ List<Variable>/*!*/ dummies, QKeyValue kv, Expr/*!*/ body, bool immutable)
+ : base(tok, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typeParameters != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(body != null);
+ Contract.Requires(dummies.Count + typeParameters.Count > 0);
+ TypeParameters = typeParameters;
+ Dummies = dummies;
+ Attributes = kv;
+ _Body = body;
+ if (immutable)
+ CachedHashCode = ComputeHashCode();
+ }
+
+ abstract public BinderKind Kind {
+ get;
+ }
+
+ protected static bool CompareAttributesAndTriggers = false;
+
+ public static bool EqualWithAttributesAndTriggers(object a, object b) {
+ CompareAttributesAndTriggers = true;
+ var res = object.Equals(a, b);
+ Contract.Assert(CompareAttributesAndTriggers);
+ CompareAttributesAndTriggers = false;
+ return res;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object obj) {
+ return BinderEquals(obj);
+ }
+
+ public bool BinderEquals(object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj is BinderExpr) ||
+ this.Kind != ((BinderExpr) obj).Kind) {
+ return false;
+ }
+
+ var other = (BinderExpr) obj;
+
+ return this.TypeParameters.SequenceEqual(other.TypeParameters)
+ && this.Dummies.SequenceEqual(other.Dummies)
+ && (!CompareAttributesAndTriggers || object.Equals(this.Attributes, other.Attributes))
+ && object.Equals(this.Body, other.Body);
+ }
+
+ [Pure]
+ public override int GetHashCode()
+ {
+ if (Immutable)
+ return CachedHashCode;
+ else
+ return ComputeHashCode();
+ }
+
+ [Pure]
+ public override int ComputeHashCode() {
+ // Note, we don't hash triggers and attributes
+
+ // DO NOT USE Dummies.GetHashCode() because we want structurally
+ // identical Expr to have the same hash code **not** identical references
+ // to have the same hash code.
+ int h = 0;
+ foreach (var dummyVar in this.Dummies) {
+ h = ( 53 * h ) + dummyVar.GetHashCode();
+ }
+
+ h ^= this.Body.GetHashCode();
+
+ // DO NOT USE TypeParameters.GetHashCode() because we want structural
+ // identical Expr to have the same hash code **not** identical references
+ // to have the same hash code.
+ int h2 = 0;
+ foreach (var typeParam in this.TypeParameters) {
+ h2 = ( 97 * h2 ) + typeParam.GetHashCode();
+ }
+
+ h = h * 5 + h2;
+ h *= ((int)Kind + 1);
+ return h;
+ }
+
+ protected virtual void EmitTypeHint(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ }
+
+ protected virtual void EmitTriggers(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ }
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength, bool fragileContext) {
+ //Contract.Requires(stream != null);
+ stream.push();
+ stream.Write(this, "({0}", Kind.ToString().ToLower());
+ this.EmitTypeHint(stream);
+ Type.EmitOptionalTypeParams(stream, TypeParameters);
+ stream.Write(this, " ");
+ this.Dummies.Emit(stream, true);
+ stream.Write(" :: ");
+ stream.sep();
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ kv.Emit(stream);
+ stream.Write(" ");
+ }
+ this.EmitTriggers(stream);
+ stream.sep();
+
+ this.Body.Emit(stream);
+ stream.Write(")");
+ stream.pop();
+ }
+
+ protected virtual void ResolveTriggers(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ if (rc.TriggerMode) {
+ rc.Error(this, "quantifiers are not allowed in triggers");
+ }
+
+ int previousTypeBinderState = rc.TypeBinderState;
+ try {
+ foreach (TypeVariable/*!*/ v in TypeParameters) {
+ Contract.Assert(v != null);
+ rc.AddTypeBinder(v);
+ }
+
+ rc.PushVarContext();
+ foreach (Variable/*!*/ v in Dummies) {
+ Contract.Assert(v != null);
+ v.Register(rc);
+ v.Resolve(rc);
+ }
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ kv.Resolve(rc);
+ }
+ this.ResolveTriggers(rc);
+ Body.Resolve(rc);
+ rc.PopVarContext();
+
+ // establish a canonical order of the type parameters
+ this.TypeParameters = Type.SortTypeParams(TypeParameters, new List<Type>(Dummies.Select(Item => Item.TypedIdent.Type).ToArray()), null);
+
+ } finally {
+ rc.TypeBinderState = previousTypeBinderState;
+ }
+ }
+
+ public override void ComputeFreeVariables(Set freeVars) {
+ //Contract.Requires(freeVars != null);
+ ComputeBinderFreeVariables(TypeParameters, Dummies, Body, Attributes, freeVars);
+ }
+
+ public static void ComputeBinderFreeVariables(List<TypeVariable> typeParameters, List<Variable> dummies, Expr body, QKeyValue attributes, Set freeVars) {
+ Contract.Requires(dummies != null);
+ Contract.Requires(body != null);
+
+ foreach (var v in dummies) {
+ Contract.Assert(v != null);
+ Contract.Assert(!freeVars[v]);
+ }
+ body.ComputeFreeVariables(freeVars);
+ for (var a = attributes; a != null; a = a.Next) {
+ foreach (var o in a.Params) {
+ var e = o as Expr;
+ if (e != null) {
+ e.ComputeFreeVariables(freeVars);
+ }
+ }
+ }
+ foreach (var v in dummies) {
+ freeVars.AddRange(v.TypedIdent.Type.FreeVariables);
+ }
+ freeVars.RemoveRange(dummies);
+ freeVars.RemoveRange(typeParameters);
+ }
+
+ protected List<TypeVariable> GetUnmentionedTypeParameters() {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+ List<TypeVariable>/*!*/ dummyParameters = Type.FreeVariablesIn(new List<Type>(Dummies.Select(Item => Item.TypedIdent.Type).ToArray()));
+ Contract.Assert(dummyParameters != null);
+ List<TypeVariable>/*!*/ unmentionedParameters = new List<TypeVariable>();
+ foreach (TypeVariable/*!*/ var in TypeParameters) {
+ Contract.Assert(var != null);
+ if (!dummyParameters.Contains(var))
+ unmentionedParameters.Add(var);
+ }
+ return unmentionedParameters;
+ }
+ }
+
+ public class QKeyValue : Absy {
+ public readonly string/*!*/ Key;
+ private readonly List<object/*!*/>/*!*/ _params; // each element is either a string or an Expr
+
+ public void AddParam(object p)
+ {
+ Contract.Requires(p != null);
+ this._params.Add(p);
+ }
+
+ public void AddParams(IEnumerable<object> ps)
+ {
+ Contract.Requires(cce.NonNullElements(ps));
+ this._params.AddRange(ps);
+ }
+
+ public void ClearParams()
+ {
+ this._params.Clear();
+ }
+
+ public IList<object> Params
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IList<object>>()));
+ Contract.Ensures(Contract.Result<IList<object>>().IsReadOnly);
+ return this._params.AsReadOnly();
+ }
+ }
+
+ public QKeyValue Next;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Key != null);
+ Contract.Invariant(cce.NonNullElements(this._params));
+ }
+
+ public QKeyValue(IToken tok, string key, IList<object/*!*/>/*!*/ parameters, QKeyValue next)
+ : base(tok) {
+ Contract.Requires(key != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(cce.NonNullElements(parameters));
+ Key = key;
+ this._params = new List<object>(parameters);
+ Next = next;
+ }
+
+ public void Emit(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ stream.Write("{:");
+ stream.Write(Key);
+ string sep = " ";
+ foreach (object p in Params) {
+ stream.Write(sep);
+ sep = ", ";
+ if (p is string) {
+ stream.Write("\"");
+ stream.Write((string)p);
+ stream.Write("\"");
+ } else {
+ ((Expr)p).Emit(stream);
+ }
+ }
+ stream.Write("}");
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+
+ if ((Key == "minimize" || Key == "maximize") && Params.Count != 1)
+ {
+ rc.Error(this, "attributes :minimize and :maximize accept only one argument");
+ }
+
+ if (Key == "verified_under" && Params.Count != 1)
+ {
+ rc.Error(this, "attribute :verified_under accepts only one argument");
+ }
+
+ foreach (object p in Params) {
+ if (p is Expr) {
+ ((Expr)p).Resolve(rc);
+ }
+ }
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ foreach (object p in Params) {
+ var expr = p as Expr;
+ if (expr != null) {
+ expr.Typecheck(tc);
+ }
+ if ((Key == "minimize" || Key == "maximize")
+ && (expr == null || !(expr.Type.IsInt || expr.Type.IsReal || expr.Type.IsBv)))
+ {
+ tc.Error(this, "attributes :minimize and :maximize accept only one argument of type int, real or bv");
+ break;
+ }
+ if (Key == "verified_under" && (expr == null || !expr.Type.IsBool))
+ {
+ tc.Error(this, "attribute :verified_under accepts only one argument of type bool");
+ break;
+ }
+ }
+ }
+ public void AddLast(QKeyValue other) {
+ Contract.Requires(other != null);
+ QKeyValue current = this;
+ while (current.Next != null) {
+ current = current.Next;
+ }
+ current.Next = other;
+ }
+ // Look for {:name string} in list of attributes.
+ [Pure]
+ public static string FindStringAttribute(QKeyValue kv, string name) {
+ Contract.Requires(name != null);
+ for (; kv != null; kv = kv.Next) {
+ if (kv.Key == name) {
+ if (kv.Params.Count == 1 && kv.Params[0] is string) {
+ return (string)kv.Params[0];
+ }
+ }
+ }
+ return null;
+ }
+ // Look for {:name expr} in list of attributes.
+ public static Expr FindExprAttribute(QKeyValue kv, string name) {
+ Contract.Requires(name != null);
+ for (; kv != null; kv = kv.Next) {
+ if (kv.Key == name) {
+ if (kv.Params.Count == 1 && kv.Params[0] is Expr) {
+ return (Expr)kv.Params[0];
+ }
+ }
+ }
+ return null;
+ }
+ // Return 'true' if {:name true} or {:name} is an attribute in 'kv'
+ public static bool FindBoolAttribute(QKeyValue kv, string name) {
+ Contract.Requires(name != null);
+ for (; kv != null; kv = kv.Next) {
+ if (kv.Key == name) {
+ return kv.Params.Count == 0 ||
+ (kv.Params.Count == 1 && kv.Params[0] is LiteralExpr && ((LiteralExpr)kv.Params[0]).IsTrue);
+ }
+ }
+ return false;
+ }
+
+ public static int FindIntAttribute(QKeyValue kv, string name, int defl) {
+ Contract.Requires(name != null);
+ Expr e = FindExprAttribute(kv, name);
+ LiteralExpr l = e as LiteralExpr;
+ if (l != null && l.isBigNum)
+ return l.asBigNum.ToIntSafe;
+ return defl;
+ }
+
+ public override Absy Clone() {
+ List<object> newParams = new List<object>();
+ foreach (object o in Params)
+ newParams.Add(o);
+ return new QKeyValue(tok, Key, newParams, (Next == null) ? null : (QKeyValue)Next.Clone());
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ return visitor.VisitQKeyValue(this);
+ }
+
+ public override bool Equals(object obj) {
+ var other = obj as QKeyValue;
+ if (other == null) {
+ return false;
+ } else {
+ return Key == other.Key && object.Equals(Params, other.Params) &&
+ (Next == null
+ ? other.Next == null
+ : object.Equals(Next, other.Next));
+ }
+ }
+
+ public override int GetHashCode() {
+ throw new NotImplementedException();
+ }
+ }
+
+ public class Trigger : Absy {
+ public readonly bool Pos;
+ [Rep]
+ private List<Expr>/*!*/ tr;
+
+ public IList<Expr>/*!*/ Tr
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<IList<Expr>>() != null);
+ Contract.Ensures(Contract.Result<IList<Expr>>().Count >= 1);
+ Contract.Ensures(this.Pos || Contract.Result<IList<Expr>>().Count == 1);
+ return this.tr.AsReadOnly();
+ }
+ set
+ {
+ Contract.Requires(value != null);
+ Contract.Requires(value.Count >= 1);
+ Contract.Requires(this.Pos || value.Count == 1);
+ this.tr = new List<Expr>(value);
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(this.tr != null);
+ Contract.Invariant(this.tr.Count >= 1);
+ Contract.Invariant(Pos || this.tr.Count == 1);
+ }
+
+ public Trigger Next;
+
+ public Trigger(IToken/*!*/ tok, bool pos, IEnumerable<Expr>/*!*/ tr, Trigger next = null)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ Contract.Requires(tr != null);
+ Contract.Requires(tr.Count() >= 1);
+ Contract.Requires(pos || tr.Count() == 1);
+ this.Pos = pos;
+ this.Tr = new List<Expr>(tr);
+ this.Next = next;
+ }
+
+ public void Emit(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ stream.SetToken(this);
+ Contract.Assert(this.Tr.Count >= 1);
+ string/*!*/ sep = Pos ? "{ " : "{:nopats ";
+ foreach (Expr/*!*/ e in this.Tr) {
+ Contract.Assert(e != null);
+ stream.Write(sep);
+ sep = ", ";
+ e.Emit(stream);
+ }
+ stream.Write(" }");
+ }
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ rc.TriggerMode = true;
+ foreach (Expr/*!*/ e in this.Tr) {
+ Contract.Assert(e != null);
+ e.Resolve(rc);
+
+ // just a variable by itself is not allowed
+ if (e is IdentifierExpr) {
+ rc.Error(e, "a matching pattern must be more than just a variable by itself: {0}", e);
+ }
+
+ // the free-variable check is performed in the surrounding quantifier expression (because that's
+ // where the bound variables are known)
+ }
+ rc.TriggerMode = false;
+ }
+
+ /// <summary>
+ /// Add to "freeVars" the free variables in the triggering expressions.
+ /// </summary>
+ public void ComputeFreeVariables(Set /*Variable*/ freeVars) {
+ Contract.Requires(freeVars != null);
+ foreach (Expr/*!*/ e in this.Tr) {
+ Contract.Assert(e != null);
+ e.ComputeFreeVariables(freeVars);
+ }
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ foreach (Expr/*!*/ e in this.Tr) {
+ Contract.Assert(e != null);
+ e.Typecheck(tc);
+ }
+ }
+
+ public void AddLast(Trigger other) {
+ Trigger current = this;
+ while (current.Next != null) {
+ current = current.Next;
+ }
+ current.Next = other;
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitTrigger(this);
+ }
+
+ public override bool Equals(object obj) {
+ var other = obj as Trigger;
+ if (other == null) {
+ return false;
+ } else {
+ return this.Tr.SequenceEqual(other.Tr) &&
+ (Next == null ? other.Next == null : object.Equals(Next, other.Next));
+ }
+ }
+
+ public override int GetHashCode() {
+ throw new NotImplementedException();
+ }
+ }
+
+ public class ForallExpr : QuantifierExpr {
+ public ForallExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParams,
+ List<Variable>/*!*/ dummies, QKeyValue kv, Trigger triggers, Expr/*!*/ body, bool immutable=false)
+ : base(tok, typeParams, dummies, kv, triggers, body, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(body != null);
+ Contract.Requires(dummies.Count + typeParams.Count > 0);
+ }
+ public ForallExpr(IToken tok, List<Variable> dummies, Trigger triggers, Expr body, bool immutable=false)
+ : base(tok, new List<TypeVariable>(), dummies, null, triggers, body, immutable) {
+ Contract.Requires(body != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(dummies.Count > 0);
+ }
+ public ForallExpr(IToken tok, List<Variable> dummies, Expr body, bool immutable=false)
+ : base(tok, new List<TypeVariable>(), dummies, null, null, body, immutable) {
+ Contract.Requires(body != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(dummies.Count > 0);
+ }
+ public ForallExpr(IToken tok, List<TypeVariable> typeParams, List<Variable> dummies, Expr body, bool immutable=false)
+ : base(tok, typeParams, dummies, null, null, body, immutable) {
+ Contract.Requires(body != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(dummies.Count + typeParams.Count > 0);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitForallExpr(this);
+ }
+
+ public override BinderKind Kind {
+ get {
+ return BinderKind.Forall;
+ }
+ }
+ }
+
+ public class ExistsExpr : QuantifierExpr {
+ public ExistsExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParams, List<Variable>/*!*/ dummies,
+ QKeyValue kv, Trigger triggers, Expr/*!*/ body, bool immutable=false)
+ : base(tok, typeParams, dummies, kv, triggers, body, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typeParams != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(body != null);
+ Contract.Requires(dummies.Count + typeParams.Count > 0);
+ }
+ public ExistsExpr(IToken tok, List<Variable> dummies, Trigger triggers, Expr body, bool immutable=false)
+ : base(tok, new List<TypeVariable>(), dummies, null, triggers, body, immutable) {
+ Contract.Requires(body != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(dummies.Count > 0);
+ }
+ public ExistsExpr(IToken tok, List<Variable> dummies, Expr body, bool immutable=false)
+ : base(tok, new List<TypeVariable>(), dummies, null, null, body, immutable) {
+ Contract.Requires(body != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(tok != null);
+ Contract.Requires(dummies.Count > 0);
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitExistsExpr(this);
+ }
+
+ public override BinderKind Kind {
+ get {
+ return BinderKind.Exists;
+ }
+ }
+ }
+
+ public abstract class QuantifierExpr : BinderExpr {
+ public Trigger Triggers;
+
+ static int SkolemIds = -1;
+ public static int GetNextSkolemId() {
+ return System.Threading.Interlocked.Increment(ref SkolemIds);
+ }
+
+ public readonly int SkolemId;
+
+ public QuantifierExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParameters,
+ List<Variable>/*!*/ dummies, QKeyValue kv, Trigger triggers, Expr/*!*/ body, bool immutable)
+ : base(tok, typeParameters, dummies, kv, body, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typeParameters != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(body != null);
+ Contract.Requires(dummies.Count + typeParameters.Count > 0);
+
+ Contract.Assert((this is ForallExpr) || (this is ExistsExpr));
+
+ Triggers = triggers;
+ SkolemId = GetNextSkolemId();
+ }
+
+ protected override void EmitTriggers(TokenTextWriter stream) {
+ //Contract.Requires(stream != null);
+ stream.push();
+ for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
+ tr.Emit(stream);
+ stream.Write(" ");
+ stream.sep();
+ }
+ stream.pop();
+ }
+
+ // if the user says ( forall x :: forall y :: ... ) and specifies *no* triggers, we transform it to
+ // (forall x, y :: ... ) which may help the prover to pick trigger terms
+ //
+ // (Note: there used to be a different criterion here, which allowed merging when triggers were specified, which could cause prover errors due to resulting unbound variables in the triggers)
+ private void MergeAdjecentQuantifier() {
+ QuantifierExpr qbody = Body as QuantifierExpr;
+ if (!(qbody != null && (qbody is ForallExpr) == (this is ForallExpr) && Triggers == null)) {
+ return;
+ }
+ qbody.MergeAdjecentQuantifier();
+ if (this.Triggers != null || qbody.Triggers != null) {
+ return;
+ }
+ Body = qbody.Body;
+ TypeParameters.AddRange(qbody.TypeParameters);
+ Dummies.AddRange(qbody.Dummies);
+ Triggers = qbody.Triggers;
+ if (qbody.Attributes != null) {
+ if (Attributes == null) {
+ Attributes = qbody.Attributes;
+ } else {
+ QKeyValue p = Attributes;
+ while (p.Next != null) {
+ p = p.Next;
+ }
+ p.Next = qbody.Attributes;
+ }
+ }
+ }
+
+ #region never triggers
+ private class NeverTriggerCollector : ReadOnlyVisitor {
+ QuantifierExpr/*!*/ parent;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(parent != null);
+ }
+
+ public NeverTriggerCollector(QuantifierExpr p) {
+ Contract.Requires(p != null);
+ parent = p;
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ FunctionCall fn = node.Fun as FunctionCall;
+ if (fn != null && cce.NonNull(fn.Func).NeverTrigger) {
+ parent.Triggers = new Trigger(fn.Func.tok, false, new List<Expr> { node} , parent.Triggers);
+ }
+ return base.VisitNAryExpr(node);
+ }
+ public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node) {
+ // don't go into quantifier expression or its triggers, since the terms in there may have more bound variables
+ // (note, with only the VisitBinderExpr override below, we'd still be visiting triggers, which we don't want to do)
+ return node;
+ }
+ public override BinderExpr VisitBinderExpr(BinderExpr node) {
+ // don't go into binder expression, since the terms in there may have more bound variables
+ return node;
+ }
+ }
+
+ private bool neverTriggerApplied;
+ private void ApplyNeverTriggers() {
+ if (neverTriggerApplied) {
+ return;
+ }
+ neverTriggerApplied = true;
+
+ for (Trigger t = Triggers; t != null; t = t.Next) {
+ if (t.Pos) {
+ return;
+ }
+ }
+
+ NeverTriggerCollector visitor = new NeverTriggerCollector(this);
+ visitor.VisitExpr(Body);
+ }
+ #endregion
+
+ protected override void ResolveTriggers(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
+ int prevErrorCount = rc.ErrorCount;
+ tr.Resolve(rc);
+ if (prevErrorCount == rc.ErrorCount) {
+ // for positive triggers, make sure all bound variables are mentioned
+ if (tr.Pos) {
+ Set /*Variable*/ freeVars = new Set /*Variable*/ ();
+ tr.ComputeFreeVariables(freeVars);
+ foreach (Variable/*!*/ v in Dummies) {
+ Contract.Assert(v != null);
+ if (!freeVars[v]) {
+ rc.Error(tr, "trigger must mention all quantified variables, but does not mention: {0}", v);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ int oldErrorCount = rc.ErrorCount;
+
+ this.MergeAdjecentQuantifier();
+
+ base.Resolve(rc);
+
+ if (oldErrorCount == rc.ErrorCount) {
+ this.ApplyNeverTriggers();
+ }
+ }
+
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ kv.Typecheck(tc);
+ }
+ for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
+ tr.Typecheck(tc);
+ }
+ Body.Typecheck(tc);
+ Contract.Assert(Body.Type != null); // follows from postcondition of Expr.Typecheck
+ if (!Body.Type.Unify(Type.Bool)) {
+ tc.Error(this, "quantifier body must be of type bool");
+ }
+ this.Type = Type.Bool;
+
+ // Check that type parameters occur in the types of the
+ // dummies, or otherwise in the triggers. This can only be
+ // done after typechecking
+ List<TypeVariable>/*!*/ unmentionedParameters = GetUnmentionedTypeParameters();
+ Contract.Assert(unmentionedParameters != null);
+
+ if (unmentionedParameters.Count > 0) {
+ // all the type parameters that do not occur in dummy types
+ // have to occur in triggers
+
+ for (Trigger tr = this.Triggers; tr != null; tr = tr.Next) {
+ // for positive triggers, make sure all bound variables are mentioned
+ if (tr.Pos) {
+ Set /*Variable*/ freeVars = new Set /*Variable*/ ();
+ tr.ComputeFreeVariables(freeVars);
+ foreach (TypeVariable/*!*/ v in unmentionedParameters) {
+ Contract.Assert(v != null);
+ if (!freeVars[v])
+ tc.Error(tr,
+ "trigger does not mention {0}, which does not occur in variables types either",
+ v);
+ }
+ }
+ }
+ }
+ }
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return Type.Bool;
+ }
+ }
+
+ public override bool Equals(object obj) {
+ var other = obj as QuantifierExpr;
+ if (other == null) {
+ return false;
+ } else {
+ return this.BinderEquals(obj) &&
+ (!CompareAttributesAndTriggers || object.Equals(Triggers, other.Triggers));
+ }
+ }
+ }
+
+
+ public class LambdaExpr : BinderExpr {
+ public LambdaExpr(IToken/*!*/ tok, List<TypeVariable>/*!*/ typeParameters,
+ List<Variable>/*!*/ dummies, QKeyValue kv, Expr/*!*/ body, bool immutable=false)
+ : base(tok, typeParameters, dummies, kv, body, immutable) {
+ Contract.Requires(tok != null);
+ Contract.Requires(typeParameters != null);
+ Contract.Requires(dummies != null);
+ Contract.Requires(body != null);
+ Contract.Requires(dummies.Count + typeParameters.Count > 0);
+ }
+
+ public override BinderKind Kind {
+ get {
+ return BinderKind.Lambda;
+ }
+ }
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ base.Resolve(rc);
+ }
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ for (QKeyValue kv = this.Attributes; kv != null; kv = kv.Next) {
+ kv.Typecheck(tc);
+ }
+ Body.Typecheck(tc);
+ Contract.Assert(Body.Type != null); // follows from postcondition of Expr.Typecheck
+
+ List<Type>/*!*/ argTypes = new List<Type>();
+ foreach (Variable/*!*/ v in Dummies) {
+ Contract.Assert(v != null);
+ argTypes.Add(v.TypedIdent.Type);
+ }
+ this.Type = new MapType(this.tok, this.TypeParameters, argTypes, Body.Type);
+
+ // Check that type parameters occur in the types of the
+ // dummies, or otherwise in the triggers. This can only be
+ // done after typechecking
+ List<TypeVariable>/*!*/ unmentionedParameters = GetUnmentionedTypeParameters();
+ Contract.Assert(unmentionedParameters != null);
+
+ if (unmentionedParameters.Count > 0) {
+ tc.Error(this, "the type variable {0} does not occur in types of the lambda parameters", unmentionedParameters[0]);
+ }
+ }
+
+ private Type mapType;
+ public override Type/*!*/ ShallowType {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ if (mapType == null) {
+ List<Type>/*!*/ argTypes = new List<Type>();
+ foreach (Variable/*!*/ v in Dummies) {
+ Contract.Assert(v != null);
+ argTypes.Add(v.TypedIdent.Type);
+ }
+ mapType = new MapType(this.tok, this.TypeParameters, argTypes, Body.ShallowType);
+ }
+
+ return mapType;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitLambdaExpr(this);
+ }
+
+ }
+}
diff --git a/Source/Core/AbsyType.cs b/Source/Core/AbsyType.cs
index 5d41a8dd..96de5c0b 100644
--- a/Source/Core/AbsyType.cs
+++ b/Source/Core/AbsyType.cs
@@ -1,3907 +1,3907 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// BoogiePL - Absy.cs
-//---------------------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie {
- using System;
- using System.Collections;
- using System.Diagnostics;
- using System.Linq;
- using System.Collections.Generic;
- using Microsoft.Boogie.AbstractInterpretation;
- using System.Diagnostics.Contracts;
-
- //=====================================================================
- //---------------------------------------------------------------------
- // Types
- [ContractClass(typeof(TypeContracts))]
- public abstract class Type : Absy {
- public Type(IToken/*!*/ token)
- : base(token) {
- Contract.Requires(token != null);
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively. Applying Clone to a type will return
- // a type in which all bound variables have been replaced with new
- // variables, whereas free variables have not changed
-
- public override Absy Clone() {
- Contract.Ensures(Contract.Result<Absy>() != null);
- return this.Clone(new Dictionary<TypeVariable/*!*/, TypeVariable/*!*/>());
- }
-
- public abstract Type/*!*/ Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap);
-
- /// <summary>
- /// Clones the type, but only syntactically. Anything resolved in the source
- /// type is left unresolved (that is, with just the name) in the destination type.
- /// </summary>
- public abstract Type/*!*/ CloneUnresolved();
-
- //----------- Linearisation ----------------------------------
-
- public void Emit(TokenTextWriter stream) {
- Contract.Requires(stream != null);
- this.Emit(stream, 0);
- }
-
- public abstract void Emit(TokenTextWriter/*!*/ stream, int contextBindingStrength);
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/false, /*pretty=*/ false)) {
- this.Emit(stream);
- }
- return buffer.ToString();
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (ReferenceEquals(this, that))
- return true;
- Type thatType = that as Type;
- return thatType != null && this.Equals(thatType,
- new List<TypeVariable>(),
- new List<TypeVariable>());
- }
-
- [Pure]
- public abstract bool Equals(Type/*!*/ that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables);
-
- // used to skip leading type annotations (subexpressions of the
- // resulting type might still contain annotations)
- internal virtual Type/*!*/ Expanded {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return this;
- }
- }
-
- //----------- Unification of types -----------
-
- /// <summary>
- /// Add a constraint that this==that, if possible, and return true.
- /// If not possible, return false (which may have added some partial constraints).
- /// No error is printed.
- /// </summary>
- public bool Unify(Type that) {
- Contract.Requires(that != null);
- return Unify(that, new List<TypeVariable>(), new Dictionary<TypeVariable/*!*/, Type/*!*/>());
- }
-
- public abstract bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- // an idempotent substitution that describes the
- // unification result up to a certain point
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier);
-
-
- [Pure]
- public static bool IsIdempotent(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
- Contract.Requires(cce.NonNullDictionaryAndValues(unifier));
- return unifier.Values.All(val => val.FreeVariables.All(var => !unifier.ContainsKey(var)));
- }
-
-
-#if OLD_UNIFICATION
- // Compute a most general unification of two types. null is returned if
- // no such unifier exists. The unifier is not allowed to subtitute any
- // type variables other than the ones in "unifiableVariables"
- public IDictionary<TypeVariable!, Type!> Unify(Type! that,
- List<TypeVariable>! unifiableVariables) {
- Dictionary<TypeVariable!, Type!>! result = new Dictionary<TypeVariable!, Type!> ();
- try {
- this.Unify(that, unifiableVariables,
- new List<TypeVariable> (), new List<TypeVariable> (), result);
- } catch (UnificationFailedException) {
- return null;
- }
- return result;
- }
-
- // Compute an idempotent most general unifier and add the result to the argument
- // unifier. The result is true iff the unification succeeded
- public bool Unify(Type! that,
- List<TypeVariable>! unifiableVariables,
- // given mappings that need to be taken into account
- // the old unifier has to be idempotent as well
- IDictionary<TypeVariable!, Type!>! unifier)
- {
- Contract.Requires(Contract.ForAll(unifier.Keys , key=> unifiableVariables.Has(key)));
- Contract.Requires(IsIdempotent(unifier));
- try {
- this.Unify(that, unifiableVariables,
- new List<TypeVariable> (), new List<TypeVariable> (), unifier);
- } catch (UnificationFailedException) {
- return false;
- }
- return true;
- }
-
- public abstract void Unify(Type! that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- // an idempotent substitution that describes the
- // unification result up to a certain point
- IDictionary<TypeVariable!, Type!>! result);
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public abstract Type/*!*/ Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst);
-
- //----------- Hashcodes ----------------------------------
-
- // Hack to be able to access the hashcode of superclasses further up
- // (from the subclasses of this class)
- [Pure]
- protected int GetBaseHashCode() {
- return base.GetHashCode();
- }
-
- [Pure]
- public override int GetHashCode() {
- return this.GetHashCode(new List<TypeVariable>());
- }
-
- [Pure]
- public abstract int GetHashCode(List<TypeVariable>/*!*/ boundVariables);
-
- //----------- Resolution ----------------------------------
-
- public override void Resolve(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- System.Diagnostics.Debug.Fail("Type.Resolve should never be called." +
- " Use Type.ResolveType instead");
- }
-
- public abstract Type/*!*/ ResolveType(ResolutionContext/*!*/ rc);
-
- public override void Typecheck(TypecheckingContext tc) {
- //Contract.Requires(tc != null);
- System.Diagnostics.Debug.Fail("Type.Typecheck should never be called");
- }
-
- // determine the free variables in a type, in the order in which the variables occur
- public abstract List<TypeVariable>/*!*/ FreeVariables {
- get;
- }
-
- // determine the free type proxies in a type, in the order in which they occur
- public abstract List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get;
- }
-
- protected static void AppendWithoutDups<A>(List<A> a, List<A> b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- foreach (A x in b)
- if (!a.Contains(x))
- a.Add(x);
- }
-
- public bool IsClosed {
- get {
- return FreeVariables.Count == 0;
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- // the following methods should be used instead of simple casts or the
- // C# "is" operator, because they handle type synonym annotations and
- // type proxies correctly
-
- public virtual bool IsBasic {
- get {
- return false;
- }
- }
- public virtual bool IsInt {
- get {
- return false;
- }
- }
- public virtual bool IsReal {
- get {
- return false;
- }
- }
- public virtual bool IsFloat {
- get {
- return false;
- }
- }
- public virtual bool IsBool {
- get {
- return false;
- }
- }
-
- public virtual bool IsVariable {
- get {
- return false;
- }
- }
- public virtual TypeVariable/*!*/ AsVariable {
- get {
- Contract.Ensures(Contract.Result<TypeVariable>() != null);
-
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.AsVariable should never be called
- }
- }
- public virtual bool IsCtor {
- get {
- return false;
- }
- }
- public virtual CtorType/*!*/ AsCtor {
- get {
- Contract.Ensures(Contract.Result<CtorType>() != null);
-
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.AsCtor should never be called
- }
- }
- public virtual bool IsMap {
- get {
- return false;
- }
- }
- public virtual MapType/*!*/ AsMap {
- get {
- Contract.Ensures(Contract.Result<MapType>() != null);
-
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.AsMap should never be called
- }
- }
- public virtual int MapArity {
- get {
-
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.MapArity should never be called
- }
- }
- public virtual bool IsUnresolved {
- get {
- return false;
- }
- }
- public virtual UnresolvedTypeIdentifier/*!*/ AsUnresolved {
- get {
- Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
-
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.AsUnresolved should never be called
- }
- }
-
- public virtual bool isFloat {
- get {
- return false;
- }
- }
- public virtual int FloatExponent
- {
- get
- {
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.FloatExponent should never be called
- }
- }
- public virtual int FloatMantissa {
- get {
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.FloatMantissa should never be called
- }
- }
- public virtual bool IsBv {
- get {
- return false;
- }
- }
- public virtual int BvBits {
- get {
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // Type.BvBits should never be called
- }
- }
-
- public static readonly Type/*!*/ Int = new BasicType(SimpleType.Int);
- public static readonly Type/*!*/ Real = new BasicType(SimpleType.Real);
- public static readonly Type/*!*/ Bool = new BasicType(SimpleType.Bool);
- private static BvType[] bvtypeCache;
-
- static public BvType GetBvType(int sz) {
- Contract.Requires(0 <= sz);
- Contract.Ensures(Contract.Result<BvType>() != null);
-
- if (bvtypeCache == null) {
- bvtypeCache = new BvType[128];
- }
- if (sz < bvtypeCache.Length) {
- BvType t = bvtypeCache[sz];
- if (t == null) {
- t = new BvType(sz);
- bvtypeCache[sz] = t;
- }
- return t;
- } else {
- return new BvType(sz);
- }
- }
-
- static public FloatType GetFloatType(int exp, int man) {
- Contract.Requires(0 <= exp);
- Contract.Requires(0 <= man);
- Contract.Ensures(Contract.Result<FloatType>() != null);
-
- return new FloatType(exp, man);
- }
-
- //------------ Match formal argument types on actual argument types
- //------------ and return the resulting substitution of type variables
-
-#if OLD_UNIFICATION
- public static IDictionary<TypeVariable!, Type!>!
- MatchArgumentTypes(List<TypeVariable>! typeParams,
- List<Type>! formalArgs,
- List<Expr>! actualArgs,
- List<Type> formalOuts,
- List<IdentifierExpr> actualOuts,
- string! opName,
- TypecheckingContext! tc)
- {
- Contract.Requires(formalArgs.Length == actualArgs.Length);
- Contract.Requires(formalOuts == null <==> actualOuts == null);
- Contract.Requires(formalOuts != null ==> formalOuts.Length == actualOuts.Length);
- List<TypeVariable>! boundVarSeq0 = new List<TypeVariable> ();
- List<TypeVariable>! boundVarSeq1 = new List<TypeVariable> ();
- Dictionary<TypeVariable!, Type!>! subst = new Dictionary<TypeVariable!, Type!>();
-
- for (int i = 0; i < formalArgs.Length; ++i) {
- try {
- Type! actualType = cce.NonNull((!)actualArgs[i]).Type;
- // if the type variables to be matched occur in the actual
- // argument types, something has gone very wrong
- Contract.Assert(forall{TypeVariable! var in typeParams);
- !actualType.FreeVariables.Has(var)};
- formalArgs[i].Unify(actualType,
- typeParams,
- boundVarSeq0, boundVarSeq1,
- subst);
- } catch (UnificationFailedException) {
- tc.Error(actualArgs[i],
- "invalid type for argument {0} in {1}: {2} (expected: {3})",
- i, opName, actualArgs[i].Type,
- // we insert the type parameters that have already been
- // chosen to get a more precise error message
- formalArgs[i].Substitute(subst));
- // the bound variable sequences should be empty ...
- // so that we can continue with the unification
- Contract.Assert(boundVarSeq0.Length == 0 && boundVarSeq1.Length == 0);
- }
- }
-
- if (formalOuts != null) {
- for (int i = 0; i < formalOuts.Length; ++i) {
- try {
- Type! actualType = cce.NonNull((!)actualOuts[i]).Type;
- // if the type variables to be matched occur in the actual
- // argument types, something has gone very wrong
- Contract.Assert(forall{TypeVariable! var in typeParams);
- !actualType.FreeVariables.Has(var)};
- formalOuts[i].Unify(actualType,
- typeParams,
- boundVarSeq0, boundVarSeq1,
- subst);
- } catch (UnificationFailedException) {
- tc.Error(actualOuts[i],
- "invalid type for result {0} in {1}: {2} (expected: {3})",
- i, opName, actualOuts[i].Type,
- // we insert the type parameters that have already been
- // chosen to get a more precise error message
- formalOuts[i].Substitute(subst));
- // the bound variable sequences should be empty ...
- // so that we can continue with the unification
- Contract.Assert(boundVarSeq0.Length == 0 && boundVarSeq1.Length == 0);
- }
- }
- }
-
- // we only allow type parameters to be substituted
- Contract.Assert(Contract.ForAll(subst.Keys , var=> typeParams.Has(var)));
-
- return subst;
- }
-#else
- public static IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/
- MatchArgumentTypes(List<TypeVariable>/*!*/ typeParams,
- List<Type>/*!*/ formalArgs,
- IList<Expr>/*!*/ actualArgs,
- List<Type> formalOuts,
- List<IdentifierExpr> actualOuts,
- string/*!*/ opName,
- TypecheckingContext/*!*/ tc) {
- Contract.Requires(typeParams != null);
- Contract.Requires(formalArgs != null);
- Contract.Requires(actualArgs != null);
- Contract.Requires(opName != null);
- Contract.Requires(tc != null);
- Contract.Requires(formalArgs.Count == actualArgs.Count);
- Contract.Requires((formalOuts == null) == (actualOuts == null));
- Contract.Requires(formalOuts == null || formalOuts.Count == cce.NonNull(actualOuts).Count);
- Contract.Requires(tc == null || opName != null);//Redundant
- Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
-
- // requires "actualArgs" and "actualOuts" to have been type checked
-
- Dictionary<TypeVariable/*!*/, Type/*!*/> subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- foreach (TypeVariable/*!*/ tv in typeParams) {
- Contract.Assert(tv != null);
- TypeProxy proxy = new TypeProxy(Token.NoToken, tv.Name);
- subst.Add(tv, proxy);
- }
-
- for (int i = 0; i < formalArgs.Count; i++) {
- Type formal = formalArgs[i].Substitute(subst);
- Type actual = cce.NonNull(cce.NonNull(actualArgs[i]).Type);
- // if the type variables to be matched occur in the actual
- // argument types, something has gone very wrong
- Contract.Assert(Contract.ForAll(0, typeParams.Count, index => !actual.FreeVariables.Contains(typeParams[index])));
-
- if (!formal.Unify(actual)) {
- Contract.Assume(tc != null); // caller expected no errors
- Contract.Assert(opName != null); // follows from precondition
- tc.Error(cce.NonNull(actualArgs[i]),
- "invalid type for argument {0} in {1}: {2} (expected: {3})",
- i, opName, actual, formalArgs[i]);
- }
- }
-
- if (formalOuts != null) {
- for (int i = 0; i < formalOuts.Count; ++i) {
- Type formal = formalOuts[i].Substitute(subst);
- Type actual = cce.NonNull(cce.NonNull(actualOuts)[i].Type);
- // if the type variables to be matched occur in the actual
- // argument types, something has gone very wrong
- Contract.Assert(Contract.ForAll(0, typeParams.Count, var => !actual.FreeVariables.Contains(typeParams[var])));
-
- if (!formal.Unify(actual)) {
- Contract.Assume(tc != null); // caller expected no errors
- Contract.Assert(opName != null); // follows from precondition
- tc.Error(actualOuts[i],
- "invalid type for out-parameter {0} in {1}: {2} (expected: {3})",
- i, opName, actual, formal);
- }
- }
- }
-
- return subst;
- }
-#endif
-
- //------------ Match formal argument types of a function or map
- //------------ on concrete types, substitute the result into the
- //------------ result type. Null is returned for type errors
-
- public static List<Type> CheckArgumentTypes(List<TypeVariable>/*!*/ typeParams,
- out List<Type/*!*/>/*!*/ actualTypeParams,
- List<Type>/*!*/ formalIns,
- IList<Expr>/*!*/ actualIns,
- List<Type>/*!*/ formalOuts,
- List<IdentifierExpr> actualOuts,
- IToken/*!*/ typeCheckingSubject,
- string/*!*/ opName,
- TypecheckingContext/*!*/ tc)
- // requires "actualIns" and "actualOuts" to have been type checked
- {
- Contract.Requires(typeParams != null);
-
- Contract.Requires(formalIns != null);
- Contract.Requires(formalOuts != null);
- Contract.Requires(actualIns != null);
- Contract.Requires(typeCheckingSubject != null);
- Contract.Requires(opName != null);Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out actualTypeParams)));
- actualTypeParams = new List<Type/*!*/>();
-
- if (formalIns.Count != actualIns.Count) {
- tc.Error(typeCheckingSubject, "wrong number of arguments in {0}: {1}",
- opName, actualIns.Count);
- // if there are no type parameters, we can still return the result
- // type and hope that the type checking proceeds
- return typeParams.Count == 0 ? formalOuts : null;
- } else if (actualOuts != null && formalOuts.Count != actualOuts.Count) {
- tc.Error(typeCheckingSubject, "wrong number of result variables in {0}: {1}",
- opName, actualOuts.Count);
- // if there are no type parameters, we can still return the result
- // type and hope that the type checking proceeds
- actualTypeParams = new List<Type>();
- return typeParams.Count == 0 ? formalOuts : null;
- }
-
- int previousErrorCount = tc.ErrorCount;
- IDictionary<TypeVariable/*!*/, Type/*!*/> subst =
- MatchArgumentTypes(typeParams, formalIns, actualIns,
- actualOuts != null ? formalOuts : null, actualOuts, opName, tc);
- Contract.Assert(cce.NonNullDictionaryAndValues(subst));
- foreach (TypeVariable/*!*/ var in typeParams) {
- Contract.Assert(var != null);
- actualTypeParams.Add(subst[var]);
- }
-
- List<Type>/*!*/ actualResults = new List<Type>();
- foreach (Type/*!*/ t in formalOuts) {
- Contract.Assert(t != null);
- actualResults.Add(t.Substitute(subst));
- }
- List<TypeVariable> resultFreeVars = FreeVariablesIn(actualResults);
- if (previousErrorCount != tc.ErrorCount) {
- // errors occured when matching the formal arguments
- // in case we have been able to substitute all type parameters,
- // we can still return the result type and hope that the
- // type checking proceeds in a meaningful manner
- if (typeParams.All(param => !resultFreeVars.Contains(param)))
- return actualResults;
- else
- // otherwise there is no point in returning the result type,
- // type checking would only get confused even further
- return null;
- }
-
- Contract.Assert(Contract.ForAll(0, typeParams.Count, index => !resultFreeVars.Contains(typeParams[index])));
- return actualResults;
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
- // about the same as Type.CheckArgumentTypes, but without
- // detailed error reports
- public static Type/*!*/ InferValueType(List<TypeVariable>/*!*/ typeParams,
- List<Type>/*!*/ formalArgs,
- Type/*!*/ formalResult,
- List<Type>/*!*/ actualArgs) {
- Contract.Requires(typeParams != null);
- Contract.Requires(formalArgs != null);
- Contract.Requires(formalResult != null);
- Contract.Requires(actualArgs != null);
- Contract.Ensures(Contract.Result<Type>() != null);
-
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst =
- InferTypeParameters(typeParams, formalArgs, actualArgs);
- Contract.Assert(cce.NonNullDictionaryAndValues(subst));
-
- Type/*!*/ res = formalResult.Substitute(subst);
- Contract.Assert(res != null);
- // all type parameters have to be substituted with concrete types
- List<TypeVariable>/*!*/ resFreeVars = res.FreeVariables;
- Contract.Assert(resFreeVars != null);
- Contract.Assert(Contract.ForAll(0, typeParams.Count, var => !resFreeVars.Contains(typeParams[var])));
- return res;
- }
-
-#if OLD_UNIFICATION
- public static IDictionary<TypeVariable!, Type!>!
- InferTypeParameters(List<TypeVariable>! typeParams,
- List<Type>! formalArgs,
- List<Type>! actualArgs)
- {
- Contract.Requires(formalArgs.Length == actualArgs.Length);
-
- List<TypeVariable>! boundVarSeq0 = new List<TypeVariable> ();
- List<TypeVariable>! boundVarSeq1 = new List<TypeVariable> ();
- Dictionary<TypeVariable!, Type!>! subst = new Dictionary<TypeVariable!, Type!>();
-
- for (int i = 0; i < formalArgs.Length; ++i) {
- try {
- Contract.Assert(forall{TypeVariable! var in typeParams);
- !actualArgs[i].FreeVariables.Has(var)};
- formalArgs[i].Unify(actualArgs[i], typeParams,
- boundVarSeq0, boundVarSeq1, subst);
- } catch (UnificationFailedException) {
- System.Diagnostics.Debug.Fail("Type unification failed: " +
- formalArgs[i] + " vs " + actualArgs[i]);
- }
- }
-
- // we only allow type parameters to be substituted
- Contract.Assert(Contract.ForAll(subst.Keys , var=> typeParams.Has(var)));
- return subst;
- }
-#else
- /// <summary>
- /// like Type.CheckArgumentTypes, but assumes no errors
- /// (and only does arguments, not results; and takes actuals as List<Type>, not List<Expr>)
- /// </summary>
- public static IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/
- InferTypeParameters(List<TypeVariable>/*!*/ typeParams,
- List<Type>/*!*/ formalArgs,
- List<Type>/*!*/ actualArgs) {
- Contract.Requires(typeParams != null);
- Contract.Requires(formalArgs != null);
- Contract.Requires(actualArgs != null);Contract.Requires(formalArgs.Count == actualArgs.Count);
- Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
-
-
- List<Type> proxies = new List<Type>();
- Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- foreach (TypeVariable/*!*/ tv in typeParams) {
- Contract.Assert(tv != null);
- TypeProxy proxy = new TypeProxy(Token.NoToken, tv.Name);
- proxies.Add(proxy);
- subst.Add(tv, proxy);
- }
-
- for (int i = 0; i < formalArgs.Count; i++) {
- Type formal = formalArgs[i].Substitute(subst);
- Type actual = actualArgs[i];
- // if the type variables to be matched occur in the actual
- // argument types, something has gone very wrong
- Contract.Assert(Contract.ForAll(0, typeParams.Count, index => !actual.FreeVariables.Contains(typeParams[index])));
-
- if (!formal.Unify(actual)) {
- Contract.Assume(false); // caller expected no errors
- }
- }
-
- return subst;
- }
-#endif
-
- //----------- Helper methods to deal with bound type variables ---------------
-
- public static void EmitOptionalTypeParams(TokenTextWriter stream, List<TypeVariable> typeParams) {
- Contract.Requires(typeParams != null);
- Contract.Requires(stream != null);
- if (typeParams.Count > 0) {
- stream.Write("<");
- typeParams.Emit(stream, ","); // default binding strength of 0 is ok
- stream.Write(">");
- }
- }
-
- // Sort the type parameters according to the order of occurrence in the argument types
- public static List<TypeVariable>/*!*/ SortTypeParams(List<TypeVariable>/*!*/ typeParams, List<Type>/*!*/ argumentTypes, Type resultType) {
- Contract.Requires(typeParams != null);
- Contract.Requires(argumentTypes != null);
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
-
- Contract.Ensures(Contract.Result<List<TypeVariable>>().Count == typeParams.Count);
- if (typeParams.Count == 0) {
- return typeParams;
- }
-
- List<TypeVariable> freeVarsInUse = FreeVariablesIn(argumentTypes);
- if (resultType != null) {
- freeVarsInUse.AppendWithoutDups(resultType.FreeVariables);
- }
- // "freeVarsInUse" is already sorted, but it may contain type variables not in "typeParams".
- // So, project "freeVarsInUse" onto "typeParams":
- List<TypeVariable> sortedTypeParams = new List<TypeVariable>();
- foreach (TypeVariable/*!*/ var in freeVarsInUse) {
- Contract.Assert(var != null);
- if (typeParams.Contains(var)) {
- sortedTypeParams.Add(var);
- }
- }
-
- if (sortedTypeParams.Count < typeParams.Count)
- // add the type parameters not mentioned in "argumentTypes" in
- // the end of the list (this can happen for quantifiers)
- sortedTypeParams.AppendWithoutDups(typeParams);
-
- return sortedTypeParams;
- }
-
- // Check that each of the type parameters occurs in at least one argument type.
- // Return true if some type parameters appear only among "moreArgumentTypes" and
- // not in "argumentTypes".
- [Pure]
- public static bool CheckBoundVariableOccurrences(List<TypeVariable>/*!*/ typeParams,
- List<Type>/*!*/ argumentTypes,
- List<Type> moreArgumentTypes,
- IToken/*!*/ resolutionSubject,
- string/*!*/ subjectName,
- ResolutionContext/*!*/ rc) {
- Contract.Requires(typeParams != null);
- Contract.Requires(argumentTypes != null);
- Contract.Requires(resolutionSubject != null);
- Contract.Requires(subjectName != null);
- Contract.Requires(rc != null);
- List<TypeVariable> freeVarsInArgs = FreeVariablesIn(argumentTypes);
- List<TypeVariable> moFreeVarsInArgs = moreArgumentTypes == null ? null : FreeVariablesIn(moreArgumentTypes);
- bool someTypeParamsAppearOnlyAmongMo = false;
- foreach (TypeVariable/*!*/ var in typeParams) {
- Contract.Assert(var != null);
- if (rc.LookUpTypeBinder(var.Name) == var) // avoid to complain twice about variables that are bound multiple times
- {
- if (freeVarsInArgs.Contains(var)) {
- // cool
- } else if (moFreeVarsInArgs != null && moFreeVarsInArgs.Contains(var)) {
- someTypeParamsAppearOnlyAmongMo = true;
- } else {
- rc.Error(resolutionSubject,
- "type variable must occur in {0}: {1}",
- subjectName, var);
- }
- }
- }
- return someTypeParamsAppearOnlyAmongMo;
- }
-
- [Pure]
- public static List<TypeVariable> FreeVariablesIn(List<Type> arguments) {
- Contract.Requires(arguments != null);
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
- List<TypeVariable>/*!*/ res = new List<TypeVariable>();
- foreach (Type/*!*/ t in arguments) {
- Contract.Assert(t != null);
- res.AppendWithoutDups(t.FreeVariables);
- }
- return res;
- }
- }
- [ContractClassFor(typeof(Type))]
- public abstract class TypeContracts : Type {
- public TypeContracts() :base(null){
-
- }
- public override List<TypeProxy> FreeProxies {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- throw new NotImplementedException();
- }
- }
- public override List<TypeVariable> FreeVariables {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
- throw new NotImplementedException();
- }
- }
- public override Type Clone(IDictionary<TypeVariable, TypeVariable> varMap) {
- Contract.Requires(cce.NonNullDictionaryAndValues(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- Contract.Requires(stream != null);
- throw new NotImplementedException();
- }
- public override bool Equals(Type that, List<TypeVariable> thisBoundVariables, List<TypeVariable> thatBoundVariables) {
- Contract.Requires(that != null);
- Contract.Requires(thisBoundVariables != null);
- Contract.Requires(thatBoundVariables != null);
- throw new NotImplementedException();
- }
- public override bool Unify(Type that, List<TypeVariable> unifiableVariables, IDictionary<TypeVariable, Type> unifier) {
- Contract.Requires(that != null);
- Contract.Requires(unifiableVariables != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(unifier));
- Contract.Requires(Contract.ForAll(unifier.Keys, key => unifiableVariables.Contains(key)));
- Contract.Requires(IsIdempotent(unifier));
- throw new NotImplementedException();
- }
- public override Type Substitute(IDictionary<TypeVariable, Type> subst) {
- Contract.Requires(cce.NonNullDictionaryAndValues(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
- public override Type ResolveType(ResolutionContext rc) {
- Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- Contract.Requires(boundVariables != null);
- throw new NotImplementedException();
- }
- }
- //=====================================================================
-
- public class BasicType : Type {
- public readonly SimpleType T;
- public BasicType(IToken/*!*/ token, SimpleType t)
- : base(token) {
- Contract.Requires(token != null);
- T = t;
- }
- public BasicType(SimpleType t)
- : base(Token.NoToken) {
- T = t;
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively.
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- // BasicTypes are immutable anyway, we do not clone
- return this;
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- return this;
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- // no parentheses are necessary for basic types
- stream.SetToken(this);
- stream.Write("{0}", this);
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- switch (T) {
- case SimpleType.Int:
- return "int";
- case SimpleType.Real:
- return "real";
- case SimpleType.Bool:
- return "bool";
- }
- Debug.Assert(false, "bad type " + T);
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // make compiler happy
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- // shortcut
- Type thatType = that as Type;
- if (thatType == null)
- return false;
- BasicType thatBasicType = TypeProxy.FollowProxy(thatType.Expanded) as BasicType;
- return thatBasicType != null && this.T == thatBasicType.T;
- }
-
- [Pure]
- public override bool Equals(Type that, List<TypeVariable> thisBoundVariables, List<TypeVariable> thatBoundVariables) {
- //Contract.Requires(thatBoundVariables != null);
- //Contract.Requires(thisBoundVariables != null);
- //Contract.Requires(that != null);
- return this.Equals(that);
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type that, List<TypeVariable> unifiableVariables, IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(that != null);
- //Contract.Requires(cce.NonNullElements(unifier));
- // an idempotent substitution that describes the
- // unification result up to a certain point
-
- that = that.Expanded;
- if (that is TypeProxy || that is TypeVariable) {
- return that.Unify(this, unifiableVariables, unifier);
- } else {
- return this.Equals(that);
- }
- }
-
-#if OLD_UNIFICATION
- public override void Unify(Type! that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- IDictionary<TypeVariable!, Type!>! result) {
- that = that.Expanded;
- if (that is TypeVariable) {
- that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
- } else {
- if (!this.Equals(that))
- throw UNIFICATION_FAILED;
- }
- }
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- return this;
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- return this.T.GetHashCode();
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // nothing to resolve
- return this;
- }
-
- // determine the free variables in a type, in the order in which the variables occur
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
-
- return new List<TypeVariable>(); // basic type are closed
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- return new List<TypeProxy/*!*/>();
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsBasic {
- get {
- return true;
- }
- }
- public override bool IsInt {
- get {
- return this.T == SimpleType.Int;
- }
- }
- public override bool IsReal {
- get {
- return this.T == SimpleType.Real;
- }
- }
- public override bool IsBool {
- get {
- return this.T == SimpleType.Bool;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitBasicType(this);
- }
- }
-
- //=====================================================================
-
- //Note that the functions in this class were directly copied from the BV class just below
- public class FloatType : Type {
- public readonly int Mantissa; //Size of mantissa in bits
- public readonly int Exponent; //Size of exponent in bits
-
- public FloatType(IToken token, int exponent, int mantissa)
- : base(token) {
- Contract.Requires(token != null);
- Exponent = exponent;
- Mantissa = mantissa;
- }
-
- public FloatType(int exponent, int mantissa)
- : base(Token.NoToken) {
- Exponent = exponent;
- Mantissa = mantissa;
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively.
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap)
- {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- // FloatTypes are immutable anyway, we do not clone
- return this;
- }
-
- public override Type CloneUnresolved()
- {
- Contract.Ensures(Contract.Result<Type>() != null);
- return this;
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength)
- {
- //Contract.Requires(stream != null);
- // no parentheses are necessary for bitvector-types
- stream.SetToken(this);
- stream.Write("{0}", this);
- }
-
- public override string ToString()
- {
- Contract.Ensures(Contract.Result<string>() != null);
- return "float (" + Exponent + " " + Mantissa + ")";
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- public override bool Equals(Type/*!*/ that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables)
- {
- FloatType thatFloatType = TypeProxy.FollowProxy(that.Expanded) as FloatType;
- return thatFloatType != null && this.Mantissa == thatFloatType.Mantissa && this.Exponent == thatFloatType.Exponent;
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- // an idempotent substitution that describes the
- // unification result up to a certain point
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier)
- {
- //Contract.Requires(that != null);
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(cce.NonNullElements(unifier));
- that = that.Expanded;
- if (that is TypeProxy || that is TypeVariable) {
- return that.Unify(this, unifiableVariables, unifier);
- }
- else {
- return this.Equals(that);
- }
- }
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst)
- {
- Contract.Ensures(Contract.Result<Type>() != null);
- return this;
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables)
- {
- return this.Mantissa.GetHashCode() + this.Exponent.GetHashCode();
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc)
- {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // nothing to resolve
- return this;
- }
-
- // determine the free variables in a type, in the order in which the variables occur
- public override List<TypeVariable>/*!*/ FreeVariables
- {
- get
- {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
-
- return new List<TypeVariable>(); // bitvector-type are closed
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- return new List<TypeProxy/*!*/>();
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsFloat {
- get {
- return true;
- }
- }
- public override int FloatMantissa {
- get {
- return Mantissa;
- }
- }
- public override int FloatExponent {
- get {
- return Exponent;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor)
- {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitFloatType(this);
- }
-
- }
-
- //=====================================================================
-
- public class BvType : Type {
- public readonly int Bits;
-
- public BvType(IToken token, int bits)
- : base(token) {
- Contract.Requires(token != null);
- Bits = bits;
- }
-
- public BvType(int bits)
- : base(Token.NoToken) {
- Bits = bits;
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively.
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- // BvTypes are immutable anyway, we do not clone
- return this;
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- return this;
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- // no parentheses are necessary for bitvector-types
- stream.SetToken(this);
- stream.Write("{0}", this);
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return "bv" + Bits;
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- public override bool Equals(Type/*!*/ that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables) {
- //Contract.Requires(thisBoundVariables != null);
- //Contract.Requires(thatBoundVariables != null);
- //Contract.Requires(that != null);
- BvType thatBvType = TypeProxy.FollowProxy(that.Expanded) as BvType;
- return thatBvType != null && this.Bits == thatBvType.Bits;
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- // an idempotent substitution that describes the
- // unification result up to a certain point
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
- //Contract.Requires(that != null);
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(cce.NonNullElements(unifier));
- that = that.Expanded;
- if (that is TypeProxy || that is TypeVariable) {
- return that.Unify(this, unifiableVariables, unifier);
- } else {
- return this.Equals(that);
- }
- }
-
-#if OLD_UNIFICATION
- public override void Unify(Type that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- IDictionary<TypeVariable!, Type!> result){
-Contract.Requires(result != null);
-Contract.Requires(that != null);
- that = that.Expanded;
- if (that is TypeVariable) {
- that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
- } else {
- if (!this.Equals(that))
- throw UNIFICATION_FAILED;
- }
- }
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- return this;
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- return this.Bits.GetHashCode();
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // nothing to resolve
- return this;
- }
-
- // determine the free variables in a type, in the order in which the variables occur
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
-
- return new List<TypeVariable>(); // bitvector-type are closed
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- return new List<TypeProxy/*!*/>();
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsBv {
- get {
- return true;
- }
- }
- public override int BvBits {
- get {
- return Bits;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitBvType(this);
- }
- }
-
- //=====================================================================
-
- // An AST node containing an identifier and a sequence of type arguments, which
- // will be turned either into a TypeVariable, into a CtorType or into a BvType
- // during the resolution phase
- public class UnresolvedTypeIdentifier : Type {
- public readonly string/*!*/ Name;
- public readonly List<Type>/*!*/ Arguments;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Name != null);
- Contract.Invariant(Arguments != null);
- }
-
-
- public UnresolvedTypeIdentifier(IToken token, string name)
- : this(token, name, new List<Type>()) {
- Contract.Requires(name != null);
- Contract.Requires(token != null);
- }
-
- public UnresolvedTypeIdentifier(IToken token, string name, List<Type> arguments)
- : base(token) {
- Contract.Requires(arguments != null);
- Contract.Requires(name != null);
- Contract.Requires(token != null);
- this.Name = name;
- this.Arguments = arguments;
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.Clone(varMap));
- }
- return new UnresolvedTypeIdentifier(tok, Name, newArgs);
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.CloneUnresolved());
- }
- return new UnresolvedTypeIdentifier(tok, Name, newArgs);
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- public override bool Equals(Type that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables) {
- //Contract.Requires(thisBoundVariables != null);
- //Contract.Requires(thatBoundVariables != null);
- //Contract.Requires(that != null);
- System.Diagnostics.Debug.Fail("UnresolvedTypeIdentifier.Equals should never be called");
- return false; // to make the compiler happy
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type that,
- List<TypeVariable>/*!*/ unifiableVariables,
- IDictionary<TypeVariable/*!*/, Type/*!*/> result) {
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(cce.NonNullElements(result));
- //Contract.Requires(that != null);
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // UnresolvedTypeIdentifier.Unify should never be called
- }
-
-#if OLD_UNIFICATION
- public override void Unify(Type that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- IDictionary<TypeVariable!, Type!> result){
-Contract.Requires(result != null);
-Contract.Requires(that != null);
- System.Diagnostics.Debug.Fail("UnresolvedTypeIdentifier.Unify should never be called");
- }
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // UnresolvedTypeIdentifier.Substitute should never be called
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // UnresolvedTypeIdentifier.GetHashCode should never be called
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // first case: the type name denotes a bitvector-type
- if (Name.StartsWith("bv") && Name.Length > 2) {
- bool is_bv = true;
- for (int i = 2; i < Name.Length; ++i) {
- if (!char.IsDigit(Name[i])) {
- is_bv = false;
- break;
- }
- }
- if (is_bv) {
- if (Arguments.Count > 0) {
- rc.Error(this,
- "bitvector types must not be applied to arguments: {0}",
- Name);
- }
- return new BvType(tok, int.Parse(Name.Substring(2)));
- }
- }
-
- // second case: the identifier is resolved to a type variable
- TypeVariable var = rc.LookUpTypeBinder(Name);
- if (var != null) {
- if (Arguments.Count > 0) {
- rc.Error(this,
- "type variables must not be applied to arguments: {0}",
- var);
- }
- return var;
- }
-
- // third case: the identifier denotes a type constructor and we
- // recursively resolve the arguments
- TypeCtorDecl ctorDecl = rc.LookUpType(Name);
- if (ctorDecl != null) {
- if (Arguments.Count != ctorDecl.Arity) {
- rc.Error(this,
- "type constructor received wrong number of arguments: {0}",
- ctorDecl);
- return this;
- }
- return new CtorType(tok, ctorDecl, ResolveArguments(rc));
- }
-
- // fourth case: the identifier denotes a type synonym
- TypeSynonymDecl synDecl = rc.LookUpTypeSynonym(Name);
- if (synDecl != null) {
- if (Arguments.Count != synDecl.TypeParameters.Count) {
- rc.Error(this,
- "type synonym received wrong number of arguments: {0}",
- synDecl);
- return this;
- }
- List<Type>/*!*/ resolvedArgs = ResolveArguments(rc);
- Contract.Assert(resolvedArgs != null);
-
- return new TypeSynonymAnnotation(this.tok, synDecl, resolvedArgs);
-
- }
-
- // otherwise: this name is not declared anywhere
- rc.Error(this, "undeclared type: {0}", Name);
- return this;
- }
-
- private List<Type> ResolveArguments(ResolutionContext rc) {
- Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<List<Type>>() != null);
- List<Type>/*!*/ resolvedArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- resolvedArgs.Add(t.ResolveType(rc));
- }
- return resolvedArgs;
- }
-
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
-
- return new List<TypeVariable>();
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- return new List<TypeProxy/*!*/>();
- }
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
- // PR: should unresolved types be syntactically distinguished from resolved types?
- CtorType.EmitCtorType(this.Name, Arguments, stream, contextBindingStrength);
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsUnresolved {
- get {
- return true;
- }
- }
- public override UnresolvedTypeIdentifier/*!*/ AsUnresolved {
- get {
- Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
- return this;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitUnresolvedTypeIdentifier(this);
- }
- }
-
- //=====================================================================
-
- public class TypeVariable : Type {
- public readonly string/*!*/ Name;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Name != null);
- }
-
-
- public TypeVariable(IToken token, string name)
- : base(token) {
- Contract.Requires(name != null);
- Contract.Requires(token != null);
- this.Name = name;
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- // if this variable is mapped to some new variable, we take the new one
- // otherwise, return this
- TypeVariable res;
- varMap.TryGetValue(this, out res);
- if (res == null)
- return this;
- else
- return res;
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- return this;
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- public override bool Equals(Type that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables) {
- //Contract.Requires(thisBoundVariables != null);
- //Contract.Requires(thatBoundVariables != null);
- //Contract.Requires(that != null);
- TypeVariable thatAsTypeVar = TypeProxy.FollowProxy(that.Expanded) as TypeVariable;
-
- if (thatAsTypeVar == null)
- return false;
-
- int thisIndex = thisBoundVariables.LastIndexOf(this);
- int thatIndex = thatBoundVariables.LastIndexOf(thatAsTypeVar);
- return (thisIndex >= 0 && thisIndex == thatIndex) ||
- (thisIndex == -1 && thatIndex == -1 &&
- Object.ReferenceEquals(this, thatAsTypeVar));
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- // an idempotent substitution that describes the
- // unification result up to a certain point
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
- //Contract.Requires(that != null);
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(cce.NonNullElements(unifier));
- that = that.Expanded;
- if (that is TypeProxy && !(that is ConstrainedProxy))
- return that.Unify(this, unifiableVariables, unifier);
-
- if (this.Equals(that))
- return true;
-
- if (unifiableVariables.Contains(this)) {
- Type previousSubst;
- unifier.TryGetValue(this, out previousSubst);
- if (previousSubst == null) {
- return addSubstitution(unifier, that);
- } else {
- // we have to unify the old instantiation with the new one
- return previousSubst.Unify(that, unifiableVariables, unifier);
- }
- }
-
- // this cannot be instantiated with anything
- // but that possibly can ...
-
- TypeVariable tv = that as TypeVariable;
-
- return tv != null &&
- unifiableVariables.Contains(tv) &&
- that.Unify(this, unifiableVariables, unifier);
- }
-
- // TODO: the following might cause problems, because when applying substitutions
- // to type proxies the substitutions are not propagated to the proxy
- // constraints (right now at least)
- private bool addSubstitution(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ oldSolution,
- // the type that "this" is instantiated with
- Type/*!*/ newSubst) {
- Contract.Requires(cce.NonNullDictionaryAndValues(oldSolution));
- Contract.Requires(newSubst != null);
- Contract.Requires(!oldSolution.ContainsKey(this));
-
- Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ newMapping = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- // apply the old (idempotent) substitution to the new instantiation
- Type/*!*/ substSubst = newSubst.Substitute(oldSolution);
- Contract.Assert(substSubst != null);
- // occurs check
- if (substSubst.FreeVariables.Contains(this))
- return false;
- newMapping.Add(this, substSubst);
-
- // apply the new substitution to the old ones to ensure idempotence
- List<TypeVariable/*!*/>/*!*/ keys = new List<TypeVariable/*!*/>();
- keys.AddRange(oldSolution.Keys);
- foreach (TypeVariable/*!*/ var in keys) {
- Contract.Assert(var != null);
- oldSolution[var] = oldSolution[var].Substitute(newMapping);
- }
- oldSolution.Add(this, substSubst);
-
- Contract.Assert(IsIdempotent(oldSolution));
- return true;
- }
-
-#if OLD_UNIFICATION
- public override void Unify(Type that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- IDictionary<TypeVariable!, Type!> result){
-Contract.Requires(result != null);
-Contract.Requires(that != null);
- that = that.Expanded;
- int thisIndex = thisBoundVariables.LastIndexOf(this);
- if (thisIndex == -1) {
- // this is not a bound variable and can possibly be matched on that
- // that must not contain any bound variables
- List<TypeVariable>! thatFreeVars = that.FreeVariables;
- if (thatBoundVariables.Any(var=> thatFreeVars.Has(var)))
- throw UNIFICATION_FAILED;
-
- // otherwise, in case that is a typevariable it cannot be bound and
- // we can just check for equality
- if (this.Equals(that))
- return;
-
- if (!unifiableVariables.Has(this)) {
- // this cannot be instantiated with anything
- // but that possibly can ...
- if ((that is TypeVariable) &&
- unifiableVariables.Has(that as TypeVariable)) {
- that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
- return;
- } else {
- throw UNIFICATION_FAILED;
- }
- }
-
- Type previousSubst;
- result.TryGetValue(this, out previousSubst);
- if (previousSubst == null) {
- addSubstitution(result, that);
- } else {
- // we have to unify the old instantiation with the new one
- previousSubst.Unify(that, unifiableVariables, thisBoundVariables, thatBoundVariables, result);
- }
- } else {
- // this is a bound variable, that also has to be one (with the same index)
- if (!(that is TypeVariable) ||
- thatBoundVariables.LastIndexOf(that) != thisIndex)
- throw UNIFICATION_FAILED;
- }
- }
-
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- Type res;
- if (subst.TryGetValue(this, out res)) {
- Contract.Assert(res != null);
- return res;
- } else {
- return this;
- }
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- int thisIndex = boundVariables.LastIndexOf(this);
- if (thisIndex == -1)
- return GetBaseHashCode();
- return thisIndex * 27473671;
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- // never put parentheses around variables
- stream.SetToken(this);
- stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- //Contract.Ensures(Contract.Result<Type>() != null);
- // nothing to resolve
- return this;
- }
-
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
- return new List<TypeVariable> { this };
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- return new List<TypeProxy/*!*/>();
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsVariable {
- get {
- return true;
- }
- }
- public override TypeVariable/*!*/ AsVariable {
- get {
- Contract.Ensures(Contract.Result<TypeVariable>() != null);
- return this;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- //Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitTypeVariable(this);
- }
- }
-
- //=====================================================================
-
- public class TypeProxy : Type {
- static int proxies = 0;
- protected readonly string/*!*/ Name;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Name != null);
- }
-
-
- public TypeProxy(IToken token, string givenName)
- : this(token, givenName, "proxy") {
- Contract.Requires(givenName != null);
- Contract.Requires(token != null);
- }
-
- protected TypeProxy(IToken token, string givenName, string kind)
- : base(token) {
- Contract.Requires(kind != null);
- Contract.Requires(givenName != null);
- Contract.Requires(token != null);
- Name = givenName + "$" + kind + "#" + proxies;
- proxies++;
- }
-
- private Type proxyFor;
- public Type ProxyFor {
- // apply path shortening, and then return the value of proxyFor
- get {
- TypeProxy anotherProxy = proxyFor as TypeProxy;
- if (anotherProxy != null && anotherProxy.proxyFor != null) {
- // apply path shortening by bypassing "anotherProxy" (and possibly others)
- proxyFor = anotherProxy.ProxyFor;
- Contract.Assert(proxyFor != null);
- }
- return proxyFor;
- }
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Everything)]
- public static Type FollowProxy(Type t) {
- Contract.Requires(t != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Ensures(!(Contract.Result<Type>() is TypeProxy) || ((TypeProxy)Contract.Result<Type>()).proxyFor == null);
- if (t is TypeProxy) {
- Type p = ((TypeProxy)t).ProxyFor;
- if (p != null) {
- return p;
- }
- }
- return t;
- }
-
- protected void DefineProxy(Type ty) {
- Contract.Requires(ty != null);
- Contract.Requires(ProxyFor == null);
- // follow ty down to the leaf level, so that we can avoid creating a cycle
- ty = FollowProxy(ty);
- if (!object.ReferenceEquals(this, ty)) {
- proxyFor = ty;
- }
- }
-
- //----------- Cloning ----------------------------------
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.Clone(varMap);
- } else {
- return new TypeProxy(this.tok, this.Name); // the clone will have a name that ends with $proxy<n>$proxy<m>
- }
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- return new TypeProxy(this.tok, this.Name); // the clone will have a name that ends with $proxy<n>$proxy<m>
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- public override bool Equals(Type that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables) {
- //Contract.Requires(thisBoundVariables != null);
- //Contract.Requires(thatBoundVariables != null);
- //Contract.Requires(that != null);
- if (object.ReferenceEquals(this, that)) {
- return true;
- }
- Type p = ProxyFor;
- if (p != null) {
- return p.Equals(that, thisBoundVariables, thatBoundVariables);
- } else {
- // This proxy could be made to be equal to anything, so what to return?
- return false;
- }
- }
-
- //----------- Unification of types -----------
-
- // determine whether the occurs check fails: this is a strict subtype of that
- protected bool ReallyOccursIn(Type that) {
- Contract.Requires(that != null);
- that = FollowProxy(that.Expanded);
- return that.FreeProxies.Contains(this) &&
- (that.IsCtor || that.IsMap && this != that && this.ProxyFor != that);
- }
-
- public override bool Unify(Type that,
- List<TypeVariable>/*!*/ unifiableVariables,
- IDictionary<TypeVariable/*!*/, Type/*!*/> result) {
- //Contract.Requires(cce.NonNullElements(result));
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(that != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.Unify(that, unifiableVariables, result);
- } else {
- // unify this with that
- if (this.ReallyOccursIn(that))
- return false;
- DefineProxy(that.Expanded);
- return true;
- }
- }
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.Substitute(subst);
- } else {
- return this;
- }
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.GetHashCode(boundVariables);
- } else {
- return GetBaseHashCode();
- }
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- Type p = ProxyFor;
- if (p != null) {
- p.Emit(stream, contextBindingStrength);
- } else {
- // no need for parentheses
- stream.SetToken(this);
- stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
- }
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.ResolveType(rc);
- } else {
- return this;
- }
- }
-
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
-
- Type p = ProxyFor;
- if (p != null) {
- return p.FreeVariables;
- } else {
- return new List<TypeVariable>();
- }
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- Type p = ProxyFor;
- if (p != null) {
- return p.FreeProxies;
- } else {
- List<TypeProxy/*!*/>/*!*/ res = new List<TypeProxy/*!*/>();
- res.Add(this);
- return res;
- }
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsBasic {
- get {
- Type p = ProxyFor;
- return p != null && p.IsBasic;
- }
- }
- public override bool IsInt {
- get {
- Type p = ProxyFor;
- return p != null && p.IsInt;
- }
- }
- public override bool IsReal {
- get {
- Type p = ProxyFor;
- return p != null && p.IsReal;
- }
- }
- public override bool IsFloat {
- get {
- Type p = ProxyFor;
- return p != null && p.IsFloat;
- }
- }
- public override bool IsBool {
- get {
- Type p = ProxyFor;
- return p != null && p.IsBool;
- }
- }
-
- public override bool IsVariable {
- get {
- Type p = ProxyFor;
- return p != null && p.IsVariable;
- }
- }
- public override TypeVariable/*!*/ AsVariable {
- get {
- Contract.Ensures(Contract.Result<TypeVariable>() != null);
-
- Type p = ProxyFor;
- Contract.Assume(p != null);
- return p.AsVariable;
- }
- }
-
- public override bool IsCtor {
- get {
- Type p = ProxyFor;
- return p != null && p.IsCtor;
- }
- }
- public override CtorType/*!*/ AsCtor {
- get {
- Contract.Ensures(Contract.Result<CtorType>() != null);
-
- Type p = ProxyFor;
- Contract.Assume(p != null);
- return p.AsCtor;
- }
- }
- public override bool IsMap {
- get {
- Type p = ProxyFor;
- return p != null && p.IsMap;
- }
- }
- public override MapType/*!*/ AsMap {
- get {
- Contract.Ensures(Contract.Result<MapType>() != null);
-
- Type p = ProxyFor;
- Contract.Assume(p != null);
- return p.AsMap;
- }
- }
- public override int MapArity {
- get {
- Type p = ProxyFor;
- Contract.Assume(p != null);
- return p.MapArity;
- }
- }
- public override bool IsUnresolved {
- get {
- Type p = ProxyFor;
- return p != null && p.IsUnresolved;
- }
- }
- public override UnresolvedTypeIdentifier/*!*/ AsUnresolved {
- get {
- Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
-
- Type p = ProxyFor;
- Contract.Assume(p != null);
- return p.AsUnresolved;
- }
- }
-
- public override bool IsBv {
- get {
- Type p = ProxyFor;
- return p != null && p.IsBv;
- }
- }
- public override int BvBits {
- get {
- Type p = ProxyFor;
- Contract.Assume(p != null);
- return p.BvBits;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitTypeProxy(this);
- }
- }
-
- public abstract class ConstrainedProxy : TypeProxy {
- protected ConstrainedProxy(IToken token, string givenName, string kind)
- : base(token, givenName, kind) {
- Contract.Requires(kind != null);
- Contract.Requires(givenName != null);
- Contract.Requires(token != null);
- }
- }
-
- /// <summary>
- /// Each instance of this class represents a set of bitvector types. In particular, it represents
- /// a bitvector type bvN iff
- /// minBits ATMOST N and
- /// foreach constraint (t0,t1), the types represented by t0 and t1 are bitvector types whose
- /// number of bits add up to N.
- /// This means that the size of a BvTypeProxy p is constrained not only by p.minBits, but also
- /// by the size of various t0 and t1 types that are transitively part of BvTypeProxy constraints.
- /// If such a t0 or t1 were to get its ProxyFor field defined, then p would have to be further
- /// constrained too. This doesn't seem like it would ever occur in a Boogie 2 program, because:
- /// the only place where a BvTypeProxy with constraints can occur is as the type of a
- /// BvConcatExpr, and
- /// the types of all local variables are explicitly declared, which means that the types of
- /// subexpressions of a BvConcatExpr are not going to change other than via the type of the
- /// BvConcatExpr.
- /// So, this implementation of BvTypeProxy does not keep track of where a BvTypeProxy may occur
- /// transitively in some other BvTypeProxy's constraints.
- /// </summary>
- public class BvTypeProxy : ConstrainedProxy {
- public int MinBits;
- List<BvTypeConstraint/*!*/> constraints;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(constraints, true));
- }
-
- class BvTypeConstraint {
- public Type/*!*/ T0;
- public Type/*!*/ T1;
- public BvTypeConstraint(Type t0, Type t1) {
- Contract.Requires(t1 != null);
- Contract.Requires(t0 != null);
- Contract.Requires(t0.IsBv && t1.IsBv);
- T0 = t0;
- T1 = t1;
- }
- }
-
- public BvTypeProxy(IToken token, string name, int minBits)
- : base(token, name, "bv" + minBits + "proxy") {
- Contract.Requires(name != null);
- Contract.Requires(token != null);
- this.MinBits = minBits;
- }
-
- /// <summary>
- /// Requires that any further constraints to be placed on t0 and t1 go via the object to
- /// be constructed.
- /// </summary>
- public BvTypeProxy(IToken token, string name, Type t0, Type t1)
- : base(token, name, "bvproxy") {
- Contract.Requires(t1 != null);
- Contract.Requires(t0 != null);
- Contract.Requires(name != null);
- Contract.Requires(token != null);
- Contract.Requires(t0.IsBv && t1.IsBv);
- t0 = FollowProxy(t0);
- t1 = FollowProxy(t1);
- this.MinBits = MinBitsFor(t0) + MinBitsFor(t1);
- List<BvTypeConstraint/*!*/> list = new List<BvTypeConstraint/*!*/>();
- list.Add(new BvTypeConstraint(t0, t1));
- this.constraints = list;
- }
-
- /// <summary>
- /// Construct a BvTypeProxy like p, but with minBits.
- /// </summary>
- private BvTypeProxy(BvTypeProxy p, int minBits)
- : base(p.tok, p.Name, "") {
- Contract.Requires(p != null);
- this.MinBits = minBits;
- this.constraints = p.constraints;
- }
-
- private BvTypeProxy(IToken token, string name, int minBits, List<BvTypeConstraint/*!*/> constraints)
- : base(token, name, "") {
- Contract.Requires(cce.NonNullElements(constraints, true));
- Contract.Requires(name != null);
- Contract.Requires(token != null);
- this.MinBits = minBits;
- this.constraints = constraints;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Everything)]
- private static int MinBitsFor(Type t) {
- Contract.Requires(t != null);
- Contract.Requires(t.IsBv);
- Contract.Ensures(0 <= Contract.Result<int>());
-
- if (t is TypeSynonymAnnotation) {
- return MinBitsFor(((TypeSynonymAnnotation)t).ExpandedType);
- }
-
- if (t is BvType) {
- return t.BvBits;
- } else {
- return ((BvTypeProxy)t).MinBits;
- }
- }
-
- //----------- Cloning ----------------------------------
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.Clone(varMap);
- } else {
- return new BvTypeProxy(this.tok, this.Name, this.MinBits, this.constraints); // the clone will have a name that ends with $bvproxy<n>$bvproxy<m>
- }
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- return new BvTypeProxy(this.tok, this.Name, this.MinBits, this.constraints); // the clone will have a name that ends with $bvproxy<n>$bvproxy<m>
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type that,
- List<TypeVariable> unifiableVariables,
- IDictionary<TypeVariable, Type> result) {
- //Contract.Requires(cce.NonNullElements(result));
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(that != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.Unify(that, unifiableVariables, result);
- }
-
- // unify this with that, if possible
- that = that.Expanded;
- that = FollowProxy(that);
-
- if (this.ReallyOccursIn(that))
- return false;
-
- TypeVariable tv = that as TypeVariable;
-
- if (tv != null && unifiableVariables.Contains(tv))
- return that.Unify(this, unifiableVariables, result);
-
- if (object.ReferenceEquals(this, that)) {
- return true;
- } else if (that is BvType) {
- if (MinBits <= that.BvBits) {
- if (constraints != null) {
- foreach (BvTypeConstraint btc in constraints) {
- int minT1 = MinBitsFor(btc.T1);
- int left = IncreaseBits(btc.T0, that.BvBits - minT1);
- left = IncreaseBits(btc.T1, minT1 + left);
- Contract.Assert(left == 0); // because it should always be possible to increase the total size of a BvTypeConstraint pair (t0,t1) arbitrarily
- }
- }
- DefineProxy(that);
- return true;
- }
- } else if (that is BvTypeProxy) {
- BvTypeProxy bt = (BvTypeProxy)that;
- // keep the proxy with the stronger constraint (that is, the higher minBits), but if either
- // has a constraints list, then concatenate both constraints lists and define the previous
- // proxies to the new one
- if (this.constraints != null || bt.constraints != null) {
- List<BvTypeConstraint/*!*/> list = new List<BvTypeConstraint/*!*/>();
- if (this.constraints != null) {
- list.AddRange(this.constraints);
- }
- if (bt.constraints != null) {
- list.AddRange(bt.constraints);
- }
- BvTypeProxy np = new BvTypeProxy(this.tok, this.Name, Math.Max(this.MinBits, bt.MinBits), list);
- this.DefineProxy(np);
- bt.DefineProxy(np);
- } else if (this.MinBits <= bt.MinBits) {
- this.DefineProxy(bt);
- } else {
- bt.DefineProxy(this);
- }
- return true;
- } else if (that is ConstrainedProxy) {
- // only bitvector proxies can be unified with this BvTypeProxy
- return false;
- } else if (that is TypeProxy) {
- // define: that.ProxyFor := this;
- return that.Unify(this, unifiableVariables, result);
- }
- return false;
- }
-
- private static int IncreaseBits(Type t, int to) {
- Contract.Requires(t != null);
- Contract.Requires(t.IsBv && 0 <= to && MinBitsFor(t) <= to);
- Contract.Ensures(0 <= Contract.Result<int>() && Contract.Result<int>() <= to);
-
- if(t is TypeSynonymAnnotation) {
- return IncreaseBits(((TypeSynonymAnnotation)t).ExpandedType, to);
- }
-
- t = FollowProxy(t);
- if (t is BvType) {
- return to - t.BvBits;
- } else {
- BvTypeProxy p = (BvTypeProxy)t;
- Contract.Assert(p.MinBits <= to);
- if (p.MinBits < to) {
- BvTypeProxy q = new BvTypeProxy(p, to);
- p.DefineProxy(q);
- }
- return 0; // we were able to satisfy the request completely
- }
- }
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- if (this.ProxyFor == null) {
- // check that the constraints are clean and do not contain any
- // of the substituted variables (otherwise, we are in big trouble)
- Contract.Assert(Contract.ForAll(constraints, c =>
- Contract.ForAll(subst.Keys, var =>
- !c.T0.FreeVariables.Contains(var) && !c.T1.FreeVariables.Contains(var))));
- }
- return base.Substitute(subst);
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsBv {
- get {
- return true;
- }
- }
- public override int BvBits {
- get {
- // This method is supposed to return the number of bits supplied, but unless the proxy has been resolved,
- // we only have a lower bound on the number of bits supplied. But this method is not supposed to be
- // called until type checking has finished, at which time the minBits is stable.
- Type p = ProxyFor;
- if (p != null) {
- return p.BvBits;
- } else {
- return MinBits;
- }
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitBvTypeProxy(this);
- }
- }
-
- // Proxy representing map types with a certain arity. Apart from the arity,
- // a number of constraints on the index and value type of the map type may
- // be known (such constraints result from applied select and store operations).
- // Because map type can be polymorphic (in the most general case, each index or
- // value type is described by a separate type parameter) any combination of
- // constraints can be satisfied.
- public class MapTypeProxy : ConstrainedProxy {
- public readonly int Arity;
- private readonly List<Constraint>/*!*/ constraints = new List<Constraint>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(constraints != null);
- }
-
-
- // each constraint specifies that the given combination of argument/result
- // types must be a possible instance of the formal map argument/result types
- private struct Constraint {
- public readonly List<Type>/*!*/ Arguments;
- public readonly Type/*!*/ Result;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Arguments != null);
- Contract.Invariant(Result != null);
- }
-
-
- public Constraint(List<Type> arguments, Type result) {
- Contract.Requires(result != null);
- Contract.Requires(arguments != null);
- Arguments = arguments;
- Result = result;
- }
-
- public Constraint Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- Contract.Requires(cce.NonNullDictionaryAndValues(varMap));
- List<Type>/*!*/ args = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- args.Add(t.Clone(varMap));
- }
- Type/*!*/ res = Result.Clone(varMap);
- Contract.Assert(res != null);
- return new Constraint(args, res);
- }
-
- public bool Unify(MapType that,
- List<TypeVariable>/*!*/ unifiableVariables,
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
- Contract.Requires(unifiableVariables != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(result));
- Contract.Requires(that != null);
- Contract.Requires(Arguments.Count == that.Arguments.Count);
- Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- foreach (TypeVariable/*!*/ tv in that.TypeParameters) {
- Contract.Assert(tv != null);
- TypeProxy proxy = new TypeProxy(Token.NoToken, tv.Name);
- subst.Add(tv, proxy);
- }
-
- bool good = true;
- for (int i = 0; i < that.Arguments.Count; i++) {
- Type t0 = that.Arguments[i].Substitute(subst);
- Type t1 = this.Arguments[i];
- good &= t0.Unify(t1, unifiableVariables, result);
- }
- good &= that.Result.Substitute(subst).Unify(this.Result, unifiableVariables, result);
- return good;
- }
- }
-
- public MapTypeProxy(IToken token, string name, int arity)
- : base(token, name, "mapproxy") {
- Contract.Requires(name != null);
- Contract.Requires(token != null);
- Contract.Requires(0 <= arity);
- this.Arity = arity;
- }
-
- private void AddConstraint(Constraint c) {
- Contract.Requires(c.Arguments.Count == Arity);
-
- Type f = ProxyFor;
- MapType mf = f as MapType;
- if (mf != null) {
- bool success = c.Unify(mf, new List<TypeVariable>(), new Dictionary<TypeVariable/*!*/, Type/*!*/>());
- Contract.Assert(success);
- return;
- }
-
- MapTypeProxy mpf = f as MapTypeProxy;
- if (mpf != null) {
- mpf.AddConstraint(c);
- return;
- }
-
- Contract.Assert(f == null); // no other types should occur as specialisations of this proxy
-
- constraints.Add(c);
- }
-
- public Type CheckArgumentTypes(List<Expr>/*!*/ actualArgs,
- out TypeParamInstantiation/*!*/ tpInstantiation,
- IToken/*!*/ typeCheckingSubject,
- string/*!*/ opName,
- TypecheckingContext/*!*/ tc) {
- Contract.Requires(actualArgs != null);
- Contract.Requires(typeCheckingSubject != null);
- Contract.Requires(opName != null);
- Contract.Requires(tc != null);
- Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
-
-
-
- Type f = ProxyFor;
- MapType mf = f as MapType;
- if (mf != null)
- return mf.CheckArgumentTypes(actualArgs, out tpInstantiation, typeCheckingSubject, opName, tc);
-
- MapTypeProxy mpf = f as MapTypeProxy;
- if (mpf != null)
- return mpf.CheckArgumentTypes(actualArgs, out tpInstantiation, typeCheckingSubject, opName, tc);
-
- Contract.Assert(f == null); // no other types should occur as specialisations of this proxy
-
- // otherwise, we just record the constraints given by this usage of the map type
- List<Type>/*!*/ arguments = new List<Type>();
- foreach (Expr/*!*/ e in actualArgs) {
- Contract.Assert(e != null);
- arguments.Add(e.Type);
- }
- Type/*!*/ result = new TypeProxy(tok, "result");
- Contract.Assert(result != null);
- AddConstraint(new Constraint(arguments, result));
-
- List<Type>/*!*/ argumentsResult = new List<Type>();
- foreach (Expr/*!*/ e in actualArgs) {
- Contract.Assert(e != null);
- argumentsResult.Add(e.Type);
- }
- argumentsResult.Add(result);
-
- tpInstantiation = new MapTypeProxyParamInstantiation(this, argumentsResult);
- return result;
- }
-
- //----------- Cloning ----------------------------------
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- Type p = ProxyFor;
- if (p != null) {
- return p.Clone(varMap);
- } else {
- MapTypeProxy p2 = new MapTypeProxy(tok, Name, Arity);
- foreach (Constraint c in constraints)
- p2.AddConstraint(c.Clone(varMap));
- return p2; // the clone will have a name that ends with $mapproxy<n>$mapproxy<m> (hopefully)
- }
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- Type p = ProxyFor;
- if (p != null) {
- p.Emit(stream, contextBindingStrength);
- } else {
- stream.Write("[");
- string/*!*/ sep = "";
- for (int i = 0; i < Arity; ++i) {
- stream.Write(sep);
- sep = ", ";
- stream.Write("?");
- }
- stream.Write("]?");
- }
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
- //Contract.Requires(that != null);
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(cce.NonNullElements(result));
- Type p = ProxyFor;
- if (p != null) {
- return p.Unify(that, unifiableVariables, result);
- }
-
- // unify this with that, if possible
- that = that.Expanded;
- that = FollowProxy(that);
-
- if (this.ReallyOccursIn(that))
- return false;
-
- TypeVariable tv = that as TypeVariable;
-
- if (tv != null && unifiableVariables.Contains(tv))
- return that.Unify(this, unifiableVariables, result);
-
- if (object.ReferenceEquals(this, that)) {
- return true;
- } else if (that is MapType) {
- MapType mapType = (MapType)that;
- if (mapType.Arguments.Count == Arity) {
- bool good = true;
- foreach (Constraint c in constraints)
- good &= c.Unify(mapType, unifiableVariables, result);
- if (good) {
- DefineProxy(mapType);
- return true;
- }
- }
- } else if (that is MapTypeProxy) {
- MapTypeProxy mt = (MapTypeProxy)that;
- if (mt.Arity == this.Arity) {
- // we propagate the constraints of this proxy to the more specific one
- foreach (Constraint c in constraints)
- mt.AddConstraint(c);
- DefineProxy(mt);
- return true;
- }
- } else if (that is ConstrainedProxy) {
- // only map-type proxies can be unified with this MapTypeProxy
- return false;
- } else if (that is TypeProxy) {
- // define: that.ProxyFor := this;
- return that.Unify(this, unifiableVariables, result);
- }
- return false;
- }
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- if (this.ProxyFor == null) {
- // check that the constraints are clean and do not contain any
- // of the substituted variables (otherwise, we are in big trouble)
- Contract.Assert(Contract.ForAll(constraints, c =>
- Contract.ForAll(subst.Keys, var =>
- Contract.ForAll(0, c.Arguments.Count, t => !c.Arguments[t].FreeVariables.Contains(var)) &&
- !c.Result.FreeVariables.Contains(var))));
- }
- return base.Substitute(subst);
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsMap {
- get {
- return true;
- }
- }
- public override MapType/*!*/ AsMap {
- get {
- Contract.Ensures(Contract.Result<MapType>() != null);
-
- Type p = ProxyFor;
- if (p != null) {
- return p.AsMap;
- } else {
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // what to do now?
- }
- }
- }
- public override int MapArity {
- get {
- return Arity;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitMapTypeProxy(this);
- }
- }
-
- //=====================================================================
-
- // Used to annotate types with type synoyms that were used in the
- // original unresolved types. Such types should be considered as
- // equivalent to ExpandedType, the annotations are only used to enable
- // better pretty-printing
- public class TypeSynonymAnnotation : Type {
- public Type/*!*/ ExpandedType;
-
- public readonly List<Type>/*!*/ Arguments;
- // is set during resolution and determines whether the right number of arguments is given
- public readonly TypeSynonymDecl/*!*/ Decl;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(ExpandedType != null);
- Contract.Invariant(Arguments != null);
- Contract.Invariant(Decl != null);
- }
-
-
- public TypeSynonymAnnotation(IToken/*!*/ token, TypeSynonymDecl/*!*/ decl, List<Type>/*!*/ arguments)
- : base(token) {
- Contract.Requires(token != null);
- Contract.Requires(decl != null);
- Contract.Requires(arguments != null);
- Contract.Requires(arguments.Count == decl.TypeParameters.Count);
- this.Decl = decl;
- this.Arguments = arguments;
-
- // build a substitution that can be applied to the definition of
- // the type synonym
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst =
- new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- for (int i = 0; i < arguments.Count; ++i)
- subst.Add(decl.TypeParameters[i], arguments[i]);
-
- ExpandedType = decl.Body.Substitute(subst);
- }
-
- private TypeSynonymAnnotation(IToken/*!*/ token, TypeSynonymDecl/*!*/ decl, List<Type>/*!*/ arguments,
- Type/*!*/ expandedType)
- : base(token) {
- Contract.Requires(token != null);
- Contract.Requires(decl != null);
- Contract.Requires(arguments != null);
- Contract.Requires(expandedType != null);
-
- this.Decl = decl;
- this.Arguments = arguments;
- this.ExpandedType = expandedType;
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.Clone(varMap));
- }
- Type/*!*/ newExpandedType = ExpandedType.Clone(varMap);
- Contract.Assert(newExpandedType != null);
- return new TypeSynonymAnnotation(tok, Decl, newArgs, newExpandedType);
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.CloneUnresolved());
- }
- return new TypeSynonymAnnotation(tok, Decl, newArgs);
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- public override bool Equals(Type/*!*/ that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables) {
- //Contract.Requires(that != null);
- //Contract.Requires(thisBoundVariables != null);
- //Contract.Requires(thatBoundVariables != null);
- return ExpandedType.Equals(that, thisBoundVariables, thatBoundVariables);
- }
-
- // used to skip leading type annotations
- internal override Type/*!*/ Expanded {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return ExpandedType.Expanded;
- }
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
- //Contract.Requires(that != null);
- //Contract.Requires(unifiableVariables != null);
- //Contract.Requires(cce.NonNullElements(result));
- return ExpandedType.Unify(that, unifiableVariables, result);
- }
-
-#if OLD_UNIFICATION
- public override void Unify(Type! that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- IDictionary<TypeVariable!, Type!>! result) {
- ExpandedType.Unify(that, unifiableVariables,
- thisBoundVariables, thatBoundVariables, result);
- }
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- if (subst.Count == 0)
- return this;
- List<Type> newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.Substitute(subst));
- }
- Type/*!*/ newExpandedType = ExpandedType.Substitute(subst);
- Contract.Assert(newExpandedType != null);
- return new TypeSynonymAnnotation(tok, Decl, newArgs, newExpandedType);
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- return ExpandedType.GetHashCode(boundVariables);
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
- CtorType.EmitCtorType(this.Decl.Name, Arguments, stream, contextBindingStrength);
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type> resolvedArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- resolvedArgs.Add(t.ResolveType(rc));
- }
- return new TypeSynonymAnnotation(tok, Decl, resolvedArgs);
- }
-
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
-
- return ExpandedType.FreeVariables;
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
- return ExpandedType.FreeProxies;
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsBasic {
- get {
- return ExpandedType.IsBasic;
- }
- }
- public override bool IsInt {
- get {
- return ExpandedType.IsInt;
- }
- }
- public override bool IsReal
- {
- get
- {
- return ExpandedType.IsReal;
- }
- }
- public override bool IsFloat
- {
- get
- {
- return ExpandedType.IsFloat;
- }
- }
- public override bool IsBool {
- get {
- return ExpandedType.IsBool;
- }
- }
-
- public override bool IsVariable {
- get {
- return ExpandedType.IsVariable;
- }
- }
- public override TypeVariable/*!*/ AsVariable {
- get {
- Contract.Ensures(Contract.Result<TypeVariable>() != null);
- return ExpandedType.AsVariable;
- }
- }
- public override bool IsCtor {
- get {
- return ExpandedType.IsCtor;
- }
- }
- public override CtorType/*!*/ AsCtor {
- get {
- Contract.Ensures(Contract.Result<CtorType>() != null);
- return ExpandedType.AsCtor;
- }
- }
- public override bool IsMap {
- get {
- return ExpandedType.IsMap;
- }
- }
- public override MapType/*!*/ AsMap {
- get {
- Contract.Ensures(Contract.Result<MapType>() != null);
- return ExpandedType.AsMap;
- }
- }
- public override bool IsUnresolved {
- get {
- return ExpandedType.IsUnresolved;
- }
- }
- public override UnresolvedTypeIdentifier/*!*/ AsUnresolved {
- get {
- Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
-
- return ExpandedType.AsUnresolved;
- }
- }
-
- public override bool IsBv {
- get {
- return ExpandedType.IsBv;
- }
- }
- public override int BvBits {
- get {
- return ExpandedType.BvBits;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitTypeSynonymAnnotation(this);
- }
- }
-
- //=====================================================================
-
- public class CtorType : Type {
- public readonly List<Type>/*!*/ Arguments;
- // is set during resolution and determines whether the right number of arguments is given
- public readonly TypeCtorDecl/*!*/ Decl;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Arguments != null);
- Contract.Invariant(Decl != null);
- }
-
-
- public CtorType(IToken/*!*/ token, TypeCtorDecl/*!*/ decl, List<Type>/*!*/ arguments)
- : base(token) {
- Contract.Requires(token != null);
- Contract.Requires(decl != null);
- Contract.Requires(arguments != null);
- Contract.Requires(arguments.Count == decl.Arity);
- this.Decl = decl;
- this.Arguments = arguments;
- }
-
- public bool IsDatatype() {
- return QKeyValue.FindBoolAttribute(Decl.Attributes, "datatype");
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.Clone(varMap));
- }
- return new CtorType(tok, Decl, newArgs);
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.CloneUnresolved());
- }
- return new CtorType(tok, Decl, newArgs);
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- Type thatType = that as Type;
- if (thatType == null)
- return false;
- thatType = TypeProxy.FollowProxy(thatType.Expanded);
- // shortcut
- CtorType thatCtorType = thatType as CtorType;
- if (thatCtorType == null || !this.Decl.Equals(thatCtorType.Decl))
- return false;
- if (Arguments.Count == 0)
- return true;
- return base.Equals(thatType);
- }
-
- [Pure]
- public override bool Equals(Type/*!*/ that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables) {
- that = TypeProxy.FollowProxy(that.Expanded);
- CtorType thatCtorType = that as CtorType;
- if (thatCtorType == null || !this.Decl.Equals(thatCtorType.Decl))
- return false;
- for (int i = 0; i < Arguments.Count; ++i) {
- if (!Arguments[i].Equals(thatCtorType.Arguments[i],
- thisBoundVariables, thatBoundVariables))
- return false;
- }
- return true;
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
- that = that.Expanded;
- if (that is TypeProxy || that is TypeVariable)
- return that.Unify(this, unifiableVariables, result);
-
- CtorType thatCtorType = that as CtorType;
- if (thatCtorType == null || !thatCtorType.Decl.Equals(Decl)) {
- return false;
- } else {
- bool good = true;
- for (int i = 0; i < Arguments.Count; ++i)
- good &= Arguments[i].Unify(thatCtorType.Arguments[i], unifiableVariables, result);
- return good;
- }
- }
-
-#if OLD_UNIFICATION
- public override void Unify(Type! that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- IDictionary<TypeVariable!, Type!>! result) {
- that = that.Expanded;
- if (that is TypeVariable) {
- that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
- return;
- }
-
- CtorType thatCtorType = that as CtorType;
- if (thatCtorType == null || !thatCtorType.Decl.Equals(Decl))
- throw UNIFICATION_FAILED;
- for (int i = 0; i < Arguments.Length; ++i)
- Arguments[i].Unify(thatCtorType.Arguments[i],
- unifiableVariables,
- thisBoundVariables, thatBoundVariables,
- result);
- }
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- if (subst.Count == 0)
- return this;
- List<Type> newArgs = new List<Type>();
- lock (Arguments)
- {
- foreach (Type/*!*/ t in Arguments)
- {
- Contract.Assert(t != null);
- newArgs.Add(t.Substitute(subst));
- }
- }
- return new CtorType(tok, Decl, newArgs);
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- int res = 1637643879 * Decl.GetHashCode();
- foreach (Type/*!*/ t in Arguments.ToArray()) {
- Contract.Assert(t != null);
- res = res * 3 + t.GetHashCode(boundVariables);
- }
- return res;
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
- EmitCtorType(this.Decl.Name, Arguments, stream, contextBindingStrength);
- }
-
- internal static void EmitCtorType(string name, List<Type> args, TokenTextWriter stream, int contextBindingStrength) {
- Contract.Requires(stream != null);
- Contract.Requires(args != null);
- Contract.Requires(name != null);
- int opBindingStrength = args.Count > 0 ? 0 : 2;
- if (opBindingStrength < contextBindingStrength)
- stream.Write("(");
-
- stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(name));
- int i = args.Count;
- foreach (Type/*!*/ t in args) {
- Contract.Assert(t != null);
- stream.Write(" ");
- // use a lower binding strength for the last argument
- // to allow map-types without parentheses
- t.Emit(stream, i == 1 ? 1 : 2);
- i = i - 1;
- }
-
- if (opBindingStrength < contextBindingStrength)
- stream.Write(")");
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- List<Type> resolvedArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- resolvedArgs.Add(t.ResolveType(rc));
- }
- return new CtorType(tok, Decl, resolvedArgs);
- }
-
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- List<TypeVariable>/*!*/ res = new List<TypeVariable>();
- foreach (Type/*!*/ t in Arguments.ToArray()) {
- Contract.Assert(t != null);
- res.AppendWithoutDups(t.FreeVariables);
- }
- return res;
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- List<TypeProxy/*!*/>/*!*/ res = new List<TypeProxy/*!*/>();
- foreach (Type/*!*/ t in Arguments.ToArray()) {
- Contract.Assert(t != null);
- AppendWithoutDups(res, t.FreeProxies);
- }
- return res;
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsCtor {
- get {
- return true;
- }
- }
- public override CtorType/*!*/ AsCtor {
- get {
- return this;
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitCtorType(this);
- }
- }
-
- //=====================================================================
-
- public class MapType : Type {
- // an invariant is that each of the type parameters has to occur as
- // free variable in at least one of the arguments
- public readonly List<TypeVariable>/*!*/ TypeParameters;
- public readonly List<Type>/*!*/ Arguments;
- public Type/*!*/ Result;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(TypeParameters != null);
- Contract.Invariant(Arguments != null);
- Contract.Invariant(Result != null);
- }
-
-
- public MapType(IToken/*!*/ token, List<TypeVariable>/*!*/ typeParameters, List<Type>/*!*/ arguments, Type/*!*/ result)
- : base(token) {
- Contract.Requires(token != null);
- Contract.Requires(typeParameters != null);
- Contract.Requires(arguments != null);
- Contract.Requires(result != null);
-
- this.TypeParameters = typeParameters;
- this.Result = result;
- this.Arguments = arguments;
- }
-
- //----------- Cloning ----------------------------------
- // We implement our own clone-method, because bound type variables
- // have to be created in the right way. It is /not/ ok to just clone
- // everything recursively
-
- public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
- //Contract.Requires(cce.NonNullElements(varMap));
- Contract.Ensures(Contract.Result<Type>() != null);
- IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ newVarMap =
- new Dictionary<TypeVariable/*!*/, TypeVariable/*!*/>();
- foreach (KeyValuePair<TypeVariable/*!*/, TypeVariable/*!*/> p in varMap) {
- Contract.Assert(cce.NonNullElements(p));
- if (!TypeParameters.Contains(p.Key))
- newVarMap.Add(p);
- }
-
- List<TypeVariable>/*!*/ newTypeParams = new List<TypeVariable>();
- foreach (TypeVariable/*!*/ var in TypeParameters) {
- Contract.Assert(var != null);
- TypeVariable/*!*/ newVar = new TypeVariable(var.tok, var.Name);
- Contract.Assert(newVar != null);
- newVarMap.Add(var, newVar);
- newTypeParams.Add(newVar);
- }
-
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.Clone(newVarMap));
- }
- Type/*!*/ newResult = Result.Clone(newVarMap);
- Contract.Assert(newResult != null);
-
- return new MapType(this.tok, newTypeParams, newArgs, newResult);
- }
-
- public override Type CloneUnresolved() {
- Contract.Ensures(Contract.Result<Type>() != null);
- List<TypeVariable>/*!*/ newTypeParams = new List<TypeVariable>();
- foreach (TypeVariable/*!*/ var in TypeParameters) {
- Contract.Assert(var != null);
- TypeVariable/*!*/ newVar = new TypeVariable(var.tok, var.Name);
- Contract.Assert(newVar != null);
- newTypeParams.Add(newVar);
- }
-
- List<Type>/*!*/ newArgs = new List<Type>();
- foreach (Type/*!*/ t in Arguments) {
- Contract.Assert(t != null);
- newArgs.Add(t.CloneUnresolved());
- }
- Type/*!*/ newResult = Result.CloneUnresolved();
- Contract.Assert(newResult != null);
-
- return new MapType(this.tok, newTypeParams, newArgs, newResult);
- }
-
- //----------- Equality ----------------------------------
-
- [Pure]
- public override bool Equals(Type/*!*/ that,
- List<TypeVariable>/*!*/ thisBoundVariables,
- List<TypeVariable>/*!*/ thatBoundVariables)
- {
- that = TypeProxy.FollowProxy(that.Expanded);
- MapType thatMapType = that as MapType;
- if (thatMapType == null ||
- this.TypeParameters.Count != thatMapType.TypeParameters.Count ||
- this.Arguments.Count != thatMapType.Arguments.Count)
- return false;
-
- thisBoundVariables = thisBoundVariables.ToList();
- foreach (TypeVariable/*!*/ var in this.TypeParameters)
- {
- Contract.Assert(var != null);
- thisBoundVariables.Add(var);
- }
- thatBoundVariables = thatBoundVariables.ToList();
- foreach (TypeVariable/*!*/ var in thatMapType.TypeParameters)
- {
- Contract.Assert(var != null);
- thatBoundVariables.Add(var);
- }
-
- for (int i = 0; i < Arguments.Count; ++i)
- {
- if (!Arguments[i].Equals(thatMapType.Arguments[i],
- thisBoundVariables, thatBoundVariables))
- return false;
- }
-
- return this.Result.Equals(thatMapType.Result,
- thisBoundVariables, thatBoundVariables);
- }
-
- //----------- Unification of types -----------
-
- public override bool Unify(Type/*!*/ that,
- List<TypeVariable>/*!*/ unifiableVariables,
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
- that = that.Expanded;
- if (that is TypeProxy || that is TypeVariable)
- return that.Unify(this, unifiableVariables, result);
-
- MapType thatMapType = that as MapType;
- if (thatMapType == null ||
- this.TypeParameters.Count != thatMapType.TypeParameters.Count ||
- this.Arguments.Count != thatMapType.Arguments.Count)
- return false;
-
- // treat the bound variables of the two map types as equal...
- Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst0 =
- new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst1 =
- new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- List<TypeVariable> freshies = new List<TypeVariable>();
- for (int i = 0; i < this.TypeParameters.Count; i++) {
- TypeVariable tp0 = this.TypeParameters[i];
- TypeVariable tp1 = thatMapType.TypeParameters[i];
- TypeVariable freshVar = new TypeVariable(tp0.tok, tp0.Name);
- freshies.Add(freshVar);
- subst0.Add(tp0, freshVar);
- subst1.Add(tp1, freshVar);
- }
- // ... and then unify the domain and range types
- bool good = true;
- for (int i = 0; i < this.Arguments.Count; i++) {
- Type t0 = this.Arguments[i].Substitute(subst0);
- Type t1 = thatMapType.Arguments[i].Substitute(subst1);
- good &= t0.Unify(t1, unifiableVariables, result);
- }
- Type r0 = this.Result.Substitute(subst0);
- Type r1 = thatMapType.Result.Substitute(subst1);
- good &= r0.Unify(r1, unifiableVariables, result);
-
- // Finally, check that none of the bound variables has escaped
- if (good && freshies.Count != 0) {
- // This is done by looking for occurrences of the fresh variables in the
- // non-substituted types ...
- List<TypeVariable> freeVars = this.FreeVariables;
- foreach (TypeVariable fr in freshies)
- if (freeVars.Contains(fr)) {
- return false;
- } // fresh variable escaped
- freeVars = thatMapType.FreeVariables;
- foreach (TypeVariable fr in freshies)
- if (freeVars.Contains(fr)) {
- return false;
- } // fresh variable escaped
-
- // ... and in the resulting unifier of type variables
- foreach (KeyValuePair<TypeVariable/*!*/, Type/*!*/> pair in result) {
- Contract.Assert(cce.NonNullElements(pair));
- freeVars = pair.Value.FreeVariables;
- foreach (TypeVariable fr in freshies)
- if (freeVars.Contains(fr)) {
- return false;
- } // fresh variable escaped
- }
- }
-
- return good;
- }
-
-#if OLD_UNIFICATION
- public override void Unify(Type! that,
- List<TypeVariable>! unifiableVariables,
- List<TypeVariable>! thisBoundVariables,
- List<TypeVariable>! thatBoundVariables,
- IDictionary<TypeVariable!, Type!>! result) {
- that = that.Expanded;
- if (that is TypeVariable) {
- that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
- return;
- }
-
- MapType thatMapType = that as MapType;
- if (thatMapType == null ||
- this.TypeParameters.Length != thatMapType.TypeParameters.Length ||
- this.Arguments.Length != thatMapType.Arguments.Length)
- throw UNIFICATION_FAILED;
-
- // ensure that no collisions occur
- if (this.collisionsPossible(result)) {
- ((MapType)this.Clone())
- .Unify(that, unifiableVariables,
- thisBoundVariables, thatBoundVariables, result);
- return;
- }
- if (thatMapType.collisionsPossible(result))
- thatMapType = (MapType)that.Clone();
-
- foreach(TypeVariable/*!*/ var in this.TypeParameters){
-Contract.Assert(var != null);
- thisBoundVariables.Add(var);}
- foreach(TypeVariable/*!*/ var in thatMapType.TypeParameters){
-Contract.Assert(var != null);
- thatBoundVariables.Add(var);}
-
- try {
-
- for (int i = 0; i < Arguments.Length; ++i)
- Arguments[i].Unify(thatMapType.Arguments[i],
- unifiableVariables,
- thisBoundVariables, thatBoundVariables,
- result);
- Result.Unify(thatMapType.Result,
- unifiableVariables,
- thisBoundVariables, thatBoundVariables,
- result);
-
- } finally {
- // make sure that the bound variables are removed again
- for (int i = 0; i < this.TypeParameters.Length; ++i) {
- thisBoundVariables.Remove();
- thatBoundVariables.Remove();
- }
- }
- }
-#endif
-
- //----------- Substitution of free variables with types not containing bound variables -----------------
-
- [Pure]
- private bool collisionsPossible(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- Contract.Requires(cce.NonNullDictionaryAndValues(subst));
- // PR: could be written more efficiently
- return TypeParameters.Any(param => subst.ContainsKey(param) || subst.Values.Any(val => val.FreeVariables.Contains(param)));
- }
-
- public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
- //Contract.Requires(cce.NonNullElements(subst));
- Contract.Ensures(Contract.Result<Type>() != null);
- if (subst.Count == 0)
- return this;
-
- // there are two cases in which we have to be careful:
- // * a variable to be substituted is shadowed by a variable binder
- // * a substituted term contains variables that are bound in the
- // type (variable capture)
- //
- // in both cases, we first clone the type to ensure that bound
- // variables are fresh
-
- if (collisionsPossible(subst)) {
- MapType/*!*/ newType = (MapType)this.Clone();
- Contract.Assert(newType != null);
- Contract.Assert(newType.Equals(this) && !newType.collisionsPossible(subst));
- return newType.Substitute(subst);
- }
-
- List<Type> newArgs = new List<Type>();
- lock (Arguments)
- {
- foreach (Type/*!*/ t in Arguments)
- {
- Contract.Assert(t != null);
- newArgs.Add(t.Substitute(subst));
- }
- }
- Type/*!*/ newResult = Result.Substitute(subst);
- Contract.Assert(newResult != null);
-
- return new MapType(tok, TypeParameters, newArgs, newResult);
- }
-
- //----------- Hashcodes ----------------------------------
-
- [Pure]
- public override int GetHashCode(List<TypeVariable> boundVariables) {
- //Contract.Requires(boundVariables != null);
- int res = 7643761 * TypeParameters.Count + 65121 * Arguments.Count;
-
- boundVariables = boundVariables.ToList();
- foreach (TypeVariable/*!*/ var in this.TypeParameters) {
- Contract.Assert(var != null);
- boundVariables.Add(var);
- }
-
- foreach (Type/*!*/ t in Arguments.ToArray()) {
- Contract.Assert(t != null);
- res = res * 5 + t.GetHashCode(boundVariables);
- }
- res = res * 7 + Result.GetHashCode(boundVariables);
-
- return res;
- }
-
- //----------- Linearisation ----------------------------------
-
- public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
- //Contract.Requires(stream != null);
- stream.SetToken(this);
-
- const int opBindingStrength = 1;
- if (opBindingStrength < contextBindingStrength)
- stream.Write("(");
-
- EmitOptionalTypeParams(stream, TypeParameters);
-
- stream.Write("[");
- Arguments.Emit(stream, ","); // default binding strength of 0 is ok
- stream.Write("]");
- Result.Emit(stream); // default binding strength of 0 is ok
-
- if (opBindingStrength < contextBindingStrength)
- stream.Write(")");
- }
-
- //----------- Resolution ----------------------------------
-
- public override Type ResolveType(ResolutionContext rc) {
- //Contract.Requires(rc != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- int previousState = rc.TypeBinderState;
- try {
- foreach (TypeVariable/*!*/ v in TypeParameters) {
- Contract.Assert(v != null);
- rc.AddTypeBinder(v);
- }
-
- List<Type> resolvedArgs = new List<Type>();
- foreach (Type/*!*/ ty in Arguments) {
- Contract.Assert(ty != null);
- resolvedArgs.Add(ty.ResolveType(rc));
- }
-
- Type resolvedResult = Result.ResolveType(rc);
-
- CheckBoundVariableOccurrences(TypeParameters,
- resolvedArgs, new List<Type> { resolvedResult },
- this.tok, "map arguments",
- rc);
-
- // sort the type parameters so that they are bound in the order of occurrence
- List<TypeVariable>/*!*/ sortedTypeParams = SortTypeParams(TypeParameters, resolvedArgs, resolvedResult);
- Contract.Assert(sortedTypeParams != null);
- return new MapType(tok, sortedTypeParams, resolvedArgs, resolvedResult);
- } finally {
- rc.TypeBinderState = previousState;
- }
- }
-
- public override List<TypeVariable>/*!*/ FreeVariables {
- get {
- List<TypeVariable>/*!*/ res = FreeVariablesIn(Arguments.ToList());
- Contract.Assert(res != null);
- res.AppendWithoutDups(Result.FreeVariables);
- foreach (TypeVariable/*!*/ v in TypeParameters.ToArray()) {
- Contract.Assert(v != null);
- res.Remove(v);
- }
- return res;
- }
- }
-
- public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
- get {
- List<TypeProxy/*!*/>/*!*/ res = new List<TypeProxy/*!*//*!*/>();
- foreach (Type/*!*/ t in Arguments.ToArray()) {
- Contract.Assert(t != null);
- AppendWithoutDups(res, t.FreeProxies);
- }
- AppendWithoutDups(res, Result.FreeProxies);
- return res;
- }
- }
-
- //----------- Getters/Issers ----------------------------------
-
- public override bool IsMap {
- get {
- return true;
- }
- }
- public override MapType/*!*/ AsMap {
- get {
- return this;
- }
- }
- public override int MapArity {
- get {
- return Arguments.Count;
- }
- }
-
- //------------ Match formal argument types of the map
- //------------ on concrete types, substitute the result into the
- //------------ result type. Null is returned if so many type checking
- //------------ errors occur that the situation is hopeless
-
- public Type CheckArgumentTypes(List<Expr>/*!*/ actualArgs,
- out TypeParamInstantiation/*!*/ tpInstantiation,
- IToken/*!*/ typeCheckingSubject,
- string/*!*/ opName,
- TypecheckingContext/*!*/ tc) {
- Contract.Requires(actualArgs != null);
- Contract.Requires(typeCheckingSubject != null);
-
- Contract.Requires(opName != null);
- Contract.Requires(tc != null);
-Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
- List<Type/*!*/>/*!*/ actualTypeParams;
- List<Type> actualResult =
- Type.CheckArgumentTypes(TypeParameters, out actualTypeParams, Arguments, actualArgs,
- new List<Type> { Result }, null, typeCheckingSubject, opName, tc);
- if (actualResult == null) {
- tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
- return null;
- } else {
- Contract.Assert(actualResult.Count == 1);
- tpInstantiation = SimpleTypeParamInstantiation.From(TypeParameters, actualTypeParams);
- return actualResult[0];
- }
- }
-
- public override Absy StdDispatch(StandardVisitor visitor) {
- //Contract.Requires(visitor != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- return visitor.VisitMapType(this);
- }
- }
-
- //---------------------------------------------------------------------
-
- public enum SimpleType {
- Int,
- Real,
- Bool
- };
-
-
- //=====================================================================
-
- // Interface for representing the instantiations of type parameters of
- // polymorphic functions or maps. We introduce an own interface for this
- // instead of using a simple list or dictionary, because in some cases
- // (due to the type proxies for map types) the actual number and instantiation
- // of type parameters can only be determined very late.
- [ContractClass(typeof(TypeParamInstantiationContracts))]
- public interface TypeParamInstantiation {
- // return what formal type parameters there are
- List<TypeVariable/*!*/>/*!*/ FormalTypeParams {
- get;
- }
- // given a formal type parameter, return the actual instantiation
- Type/*!*/ this[TypeVariable/*!*/ var] {
- get;
- }
- }
- [ContractClassFor(typeof(TypeParamInstantiation))]
- public abstract class TypeParamInstantiationContracts : TypeParamInstantiation {
- #region TypeParamInstantiation Members
-
- public List<TypeVariable> FormalTypeParams {
-
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeVariable>>()));
- throw new NotImplementedException();
- }
- }
-
- public Type this[TypeVariable var] {
- get {
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
- }
-
- #endregion
- }
-
-
- public class SimpleTypeParamInstantiation : TypeParamInstantiation {
- private readonly List<TypeVariable/*!*/>/*!*/ TypeParams;
- [ContractInvariantMethod]
- void TypeParamsInvariantMethod() {
- Contract.Invariant(cce.NonNullElements(TypeParams));
- }
- private readonly IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ Instantiations;
- [ContractInvariantMethod]
- void InstantiationsInvariantMethod() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(Instantiations));
- }
-
- public SimpleTypeParamInstantiation(List<TypeVariable/*!*/>/*!*/ typeParams,
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ instantiations) {
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Requires(cce.NonNullDictionaryAndValues(instantiations));
- this.TypeParams = typeParams;
- this.Instantiations = instantiations;
- }
-
- public static TypeParamInstantiation/*!*/ From(List<TypeVariable> typeParams, List<Type/*!*/>/*!*/ actualTypeParams) {
- Contract.Requires(cce.NonNullElements(actualTypeParams));
- Contract.Requires(typeParams != null);
- Contract.Requires(typeParams.Count == actualTypeParams.Count);
- Contract.Ensures(Contract.Result<TypeParamInstantiation>() != null);
-
- if (typeParams.Count == 0)
- return EMPTY;
-
- List<TypeVariable/*!*/>/*!*/ typeParamList = new List<TypeVariable/*!*/>();
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- for (int i = 0; i < typeParams.Count; ++i) {
- typeParamList.Add(typeParams[i]);
- dict.Add(typeParams[i], actualTypeParams[i]);
- }
- return new SimpleTypeParamInstantiation(typeParamList, dict);
- }
-
- public static readonly TypeParamInstantiation EMPTY =
- new SimpleTypeParamInstantiation(new List<TypeVariable/*!*/>(),
- new Dictionary<TypeVariable/*!*/, Type/*!*/>());
-
- // return what formal type parameters there are
- public List<TypeVariable/*!*/>/*!*/ FormalTypeParams {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeVariable>>()));
- return TypeParams;
- }
- }
- // given a formal type parameter, return the actual instantiation
- public Type/*!*/ this[TypeVariable/*!*/ var] {
- get {
- return Instantiations[var];
- }
- }
- }
-
- // Implementation of TypeParamInstantiation that refers to the current
- // value of a MapTypeProxy. This means that the values return by the
- // methods of this implementation can change in case the MapTypeProxy
- // receives further unifications.
- class MapTypeProxyParamInstantiation : TypeParamInstantiation {
- private readonly MapTypeProxy/*!*/ Proxy;
-
- // the argument and result type of this particular usage of the map
- // type. these are necessary to derive the values of the type parameters
- private readonly List<Type>/*!*/ ArgumentsResult;
-
- // field that is initialised once all necessary information is available
- // (the MapTypeProxy is instantiated to an actual type) and the instantiation
- // of a type parameter is queried
- private IDictionary<TypeVariable/*!*/, Type/*!*/> Instantiations = null;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Proxy != null);
- Contract.Invariant(ArgumentsResult != null);
- Contract.Invariant(Instantiations == null || cce.NonNullDictionaryAndValues(Instantiations));
- }
-
-
- public MapTypeProxyParamInstantiation(MapTypeProxy/*!*/ proxy,
- List<Type>/*!*/ argumentsResult) {
- Contract.Requires(proxy != null);
- Contract.Requires(argumentsResult != null);
- this.Proxy = proxy;
- this.ArgumentsResult = argumentsResult;
- }
-
- // return what formal type parameters there are
- public List<TypeVariable/*!*/>/*!*/ FormalTypeParams {
- get {
- MapType realType = Proxy.ProxyFor as MapType;
- if (realType == null)
- // no instantiation of the map type is known, which means
- // that the map type is assumed to be monomorphic
- return new List<TypeVariable/*!*/>();
- else
- return realType.TypeParameters.ToList();
- }
- }
-
- // given a formal type parameter, return the actual instantiation
- public Type/*!*/ this[TypeVariable/*!*/ var] {
- get {
- // then there has to be an instantiation that is a polymorphic map type
- if (Instantiations == null) {
- MapType realType = Proxy.ProxyFor as MapType;
- Contract.Assert(realType != null);
- List<Type>/*!*/ formalArgs = new List<Type>();
- foreach (Type/*!*/ t in realType.Arguments) {
- Contract.Assert(t != null);
- formalArgs.Add(t);
- }
- formalArgs.Add(realType.Result);
- Instantiations =
- Type.InferTypeParameters(realType.TypeParameters, formalArgs, ArgumentsResult);
- }
- return Instantiations[var];
- }
- }
- }
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// BoogiePL - Absy.cs
+//---------------------------------------------------------------------------------------------
+
+namespace Microsoft.Boogie {
+ using System;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Linq;
+ using System.Collections.Generic;
+ using Microsoft.Boogie.AbstractInterpretation;
+ using System.Diagnostics.Contracts;
+
+ //=====================================================================
+ //---------------------------------------------------------------------
+ // Types
+ [ContractClass(typeof(TypeContracts))]
+ public abstract class Type : Absy {
+ public Type(IToken/*!*/ token)
+ : base(token) {
+ Contract.Requires(token != null);
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively. Applying Clone to a type will return
+ // a type in which all bound variables have been replaced with new
+ // variables, whereas free variables have not changed
+
+ public override Absy Clone() {
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return this.Clone(new Dictionary<TypeVariable/*!*/, TypeVariable/*!*/>());
+ }
+
+ public abstract Type/*!*/ Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap);
+
+ /// <summary>
+ /// Clones the type, but only syntactically. Anything resolved in the source
+ /// type is left unresolved (that is, with just the name) in the destination type.
+ /// </summary>
+ public abstract Type/*!*/ CloneUnresolved();
+
+ //----------- Linearisation ----------------------------------
+
+ public void Emit(TokenTextWriter stream) {
+ Contract.Requires(stream != null);
+ this.Emit(stream, 0);
+ }
+
+ public abstract void Emit(TokenTextWriter/*!*/ stream, int contextBindingStrength);
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/false, /*pretty=*/ false)) {
+ this.Emit(stream);
+ }
+ return buffer.ToString();
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (ReferenceEquals(this, that))
+ return true;
+ Type thatType = that as Type;
+ return thatType != null && this.Equals(thatType,
+ new List<TypeVariable>(),
+ new List<TypeVariable>());
+ }
+
+ [Pure]
+ public abstract bool Equals(Type/*!*/ that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables);
+
+ // used to skip leading type annotations (subexpressions of the
+ // resulting type might still contain annotations)
+ internal virtual Type/*!*/ Expanded {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return this;
+ }
+ }
+
+ //----------- Unification of types -----------
+
+ /// <summary>
+ /// Add a constraint that this==that, if possible, and return true.
+ /// If not possible, return false (which may have added some partial constraints).
+ /// No error is printed.
+ /// </summary>
+ public bool Unify(Type that) {
+ Contract.Requires(that != null);
+ return Unify(that, new List<TypeVariable>(), new Dictionary<TypeVariable/*!*/, Type/*!*/>());
+ }
+
+ public abstract bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ // an idempotent substitution that describes the
+ // unification result up to a certain point
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier);
+
+
+ [Pure]
+ public static bool IsIdempotent(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(unifier));
+ return unifier.Values.All(val => val.FreeVariables.All(var => !unifier.ContainsKey(var)));
+ }
+
+
+#if OLD_UNIFICATION
+ // Compute a most general unification of two types. null is returned if
+ // no such unifier exists. The unifier is not allowed to subtitute any
+ // type variables other than the ones in "unifiableVariables"
+ public IDictionary<TypeVariable!, Type!> Unify(Type! that,
+ List<TypeVariable>! unifiableVariables) {
+ Dictionary<TypeVariable!, Type!>! result = new Dictionary<TypeVariable!, Type!> ();
+ try {
+ this.Unify(that, unifiableVariables,
+ new List<TypeVariable> (), new List<TypeVariable> (), result);
+ } catch (UnificationFailedException) {
+ return null;
+ }
+ return result;
+ }
+
+ // Compute an idempotent most general unifier and add the result to the argument
+ // unifier. The result is true iff the unification succeeded
+ public bool Unify(Type! that,
+ List<TypeVariable>! unifiableVariables,
+ // given mappings that need to be taken into account
+ // the old unifier has to be idempotent as well
+ IDictionary<TypeVariable!, Type!>! unifier)
+ {
+ Contract.Requires(Contract.ForAll(unifier.Keys , key=> unifiableVariables.Has(key)));
+ Contract.Requires(IsIdempotent(unifier));
+ try {
+ this.Unify(that, unifiableVariables,
+ new List<TypeVariable> (), new List<TypeVariable> (), unifier);
+ } catch (UnificationFailedException) {
+ return false;
+ }
+ return true;
+ }
+
+ public abstract void Unify(Type! that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ // an idempotent substitution that describes the
+ // unification result up to a certain point
+ IDictionary<TypeVariable!, Type!>! result);
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public abstract Type/*!*/ Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst);
+
+ //----------- Hashcodes ----------------------------------
+
+ // Hack to be able to access the hashcode of superclasses further up
+ // (from the subclasses of this class)
+ [Pure]
+ protected int GetBaseHashCode() {
+ return base.GetHashCode();
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return this.GetHashCode(new List<TypeVariable>());
+ }
+
+ [Pure]
+ public abstract int GetHashCode(List<TypeVariable>/*!*/ boundVariables);
+
+ //----------- Resolution ----------------------------------
+
+ public override void Resolve(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ System.Diagnostics.Debug.Fail("Type.Resolve should never be called." +
+ " Use Type.ResolveType instead");
+ }
+
+ public abstract Type/*!*/ ResolveType(ResolutionContext/*!*/ rc);
+
+ public override void Typecheck(TypecheckingContext tc) {
+ //Contract.Requires(tc != null);
+ System.Diagnostics.Debug.Fail("Type.Typecheck should never be called");
+ }
+
+ // determine the free variables in a type, in the order in which the variables occur
+ public abstract List<TypeVariable>/*!*/ FreeVariables {
+ get;
+ }
+
+ // determine the free type proxies in a type, in the order in which they occur
+ public abstract List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get;
+ }
+
+ protected static void AppendWithoutDups<A>(List<A> a, List<A> b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ foreach (A x in b)
+ if (!a.Contains(x))
+ a.Add(x);
+ }
+
+ public bool IsClosed {
+ get {
+ return FreeVariables.Count == 0;
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ // the following methods should be used instead of simple casts or the
+ // C# "is" operator, because they handle type synonym annotations and
+ // type proxies correctly
+
+ public virtual bool IsBasic {
+ get {
+ return false;
+ }
+ }
+ public virtual bool IsInt {
+ get {
+ return false;
+ }
+ }
+ public virtual bool IsReal {
+ get {
+ return false;
+ }
+ }
+ public virtual bool IsFloat {
+ get {
+ return false;
+ }
+ }
+ public virtual bool IsBool {
+ get {
+ return false;
+ }
+ }
+
+ public virtual bool IsVariable {
+ get {
+ return false;
+ }
+ }
+ public virtual TypeVariable/*!*/ AsVariable {
+ get {
+ Contract.Ensures(Contract.Result<TypeVariable>() != null);
+
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.AsVariable should never be called
+ }
+ }
+ public virtual bool IsCtor {
+ get {
+ return false;
+ }
+ }
+ public virtual CtorType/*!*/ AsCtor {
+ get {
+ Contract.Ensures(Contract.Result<CtorType>() != null);
+
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.AsCtor should never be called
+ }
+ }
+ public virtual bool IsMap {
+ get {
+ return false;
+ }
+ }
+ public virtual MapType/*!*/ AsMap {
+ get {
+ Contract.Ensures(Contract.Result<MapType>() != null);
+
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.AsMap should never be called
+ }
+ }
+ public virtual int MapArity {
+ get {
+
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.MapArity should never be called
+ }
+ }
+ public virtual bool IsUnresolved {
+ get {
+ return false;
+ }
+ }
+ public virtual UnresolvedTypeIdentifier/*!*/ AsUnresolved {
+ get {
+ Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
+
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.AsUnresolved should never be called
+ }
+ }
+
+ public virtual bool isFloat {
+ get {
+ return false;
+ }
+ }
+ public virtual int FloatExponent
+ {
+ get
+ {
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.FloatExponent should never be called
+ }
+ }
+ public virtual int FloatMantissa {
+ get {
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.FloatMantissa should never be called
+ }
+ }
+ public virtual bool IsBv {
+ get {
+ return false;
+ }
+ }
+ public virtual int BvBits {
+ get {
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // Type.BvBits should never be called
+ }
+ }
+
+ public static readonly Type/*!*/ Int = new BasicType(SimpleType.Int);
+ public static readonly Type/*!*/ Real = new BasicType(SimpleType.Real);
+ public static readonly Type/*!*/ Bool = new BasicType(SimpleType.Bool);
+ private static BvType[] bvtypeCache;
+
+ static public BvType GetBvType(int sz) {
+ Contract.Requires(0 <= sz);
+ Contract.Ensures(Contract.Result<BvType>() != null);
+
+ if (bvtypeCache == null) {
+ bvtypeCache = new BvType[128];
+ }
+ if (sz < bvtypeCache.Length) {
+ BvType t = bvtypeCache[sz];
+ if (t == null) {
+ t = new BvType(sz);
+ bvtypeCache[sz] = t;
+ }
+ return t;
+ } else {
+ return new BvType(sz);
+ }
+ }
+
+ static public FloatType GetFloatType(int exp, int man) {
+ Contract.Requires(0 <= exp);
+ Contract.Requires(0 <= man);
+ Contract.Ensures(Contract.Result<FloatType>() != null);
+
+ return new FloatType(exp, man);
+ }
+
+ //------------ Match formal argument types on actual argument types
+ //------------ and return the resulting substitution of type variables
+
+#if OLD_UNIFICATION
+ public static IDictionary<TypeVariable!, Type!>!
+ MatchArgumentTypes(List<TypeVariable>! typeParams,
+ List<Type>! formalArgs,
+ List<Expr>! actualArgs,
+ List<Type> formalOuts,
+ List<IdentifierExpr> actualOuts,
+ string! opName,
+ TypecheckingContext! tc)
+ {
+ Contract.Requires(formalArgs.Length == actualArgs.Length);
+ Contract.Requires(formalOuts == null <==> actualOuts == null);
+ Contract.Requires(formalOuts != null ==> formalOuts.Length == actualOuts.Length);
+ List<TypeVariable>! boundVarSeq0 = new List<TypeVariable> ();
+ List<TypeVariable>! boundVarSeq1 = new List<TypeVariable> ();
+ Dictionary<TypeVariable!, Type!>! subst = new Dictionary<TypeVariable!, Type!>();
+
+ for (int i = 0; i < formalArgs.Length; ++i) {
+ try {
+ Type! actualType = cce.NonNull((!)actualArgs[i]).Type;
+ // if the type variables to be matched occur in the actual
+ // argument types, something has gone very wrong
+ Contract.Assert(forall{TypeVariable! var in typeParams);
+ !actualType.FreeVariables.Has(var)};
+ formalArgs[i].Unify(actualType,
+ typeParams,
+ boundVarSeq0, boundVarSeq1,
+ subst);
+ } catch (UnificationFailedException) {
+ tc.Error(actualArgs[i],
+ "invalid type for argument {0} in {1}: {2} (expected: {3})",
+ i, opName, actualArgs[i].Type,
+ // we insert the type parameters that have already been
+ // chosen to get a more precise error message
+ formalArgs[i].Substitute(subst));
+ // the bound variable sequences should be empty ...
+ // so that we can continue with the unification
+ Contract.Assert(boundVarSeq0.Length == 0 && boundVarSeq1.Length == 0);
+ }
+ }
+
+ if (formalOuts != null) {
+ for (int i = 0; i < formalOuts.Length; ++i) {
+ try {
+ Type! actualType = cce.NonNull((!)actualOuts[i]).Type;
+ // if the type variables to be matched occur in the actual
+ // argument types, something has gone very wrong
+ Contract.Assert(forall{TypeVariable! var in typeParams);
+ !actualType.FreeVariables.Has(var)};
+ formalOuts[i].Unify(actualType,
+ typeParams,
+ boundVarSeq0, boundVarSeq1,
+ subst);
+ } catch (UnificationFailedException) {
+ tc.Error(actualOuts[i],
+ "invalid type for result {0} in {1}: {2} (expected: {3})",
+ i, opName, actualOuts[i].Type,
+ // we insert the type parameters that have already been
+ // chosen to get a more precise error message
+ formalOuts[i].Substitute(subst));
+ // the bound variable sequences should be empty ...
+ // so that we can continue with the unification
+ Contract.Assert(boundVarSeq0.Length == 0 && boundVarSeq1.Length == 0);
+ }
+ }
+ }
+
+ // we only allow type parameters to be substituted
+ Contract.Assert(Contract.ForAll(subst.Keys , var=> typeParams.Has(var)));
+
+ return subst;
+ }
+#else
+ public static IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/
+ MatchArgumentTypes(List<TypeVariable>/*!*/ typeParams,
+ List<Type>/*!*/ formalArgs,
+ IList<Expr>/*!*/ actualArgs,
+ List<Type> formalOuts,
+ List<IdentifierExpr> actualOuts,
+ string/*!*/ opName,
+ TypecheckingContext/*!*/ tc) {
+ Contract.Requires(typeParams != null);
+ Contract.Requires(formalArgs != null);
+ Contract.Requires(actualArgs != null);
+ Contract.Requires(opName != null);
+ Contract.Requires(tc != null);
+ Contract.Requires(formalArgs.Count == actualArgs.Count);
+ Contract.Requires((formalOuts == null) == (actualOuts == null));
+ Contract.Requires(formalOuts == null || formalOuts.Count == cce.NonNull(actualOuts).Count);
+ Contract.Requires(tc == null || opName != null);//Redundant
+ Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
+
+ // requires "actualArgs" and "actualOuts" to have been type checked
+
+ Dictionary<TypeVariable/*!*/, Type/*!*/> subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ foreach (TypeVariable/*!*/ tv in typeParams) {
+ Contract.Assert(tv != null);
+ TypeProxy proxy = new TypeProxy(Token.NoToken, tv.Name);
+ subst.Add(tv, proxy);
+ }
+
+ for (int i = 0; i < formalArgs.Count; i++) {
+ Type formal = formalArgs[i].Substitute(subst);
+ Type actual = cce.NonNull(cce.NonNull(actualArgs[i]).Type);
+ // if the type variables to be matched occur in the actual
+ // argument types, something has gone very wrong
+ Contract.Assert(Contract.ForAll(0, typeParams.Count, index => !actual.FreeVariables.Contains(typeParams[index])));
+
+ if (!formal.Unify(actual)) {
+ Contract.Assume(tc != null); // caller expected no errors
+ Contract.Assert(opName != null); // follows from precondition
+ tc.Error(cce.NonNull(actualArgs[i]),
+ "invalid type for argument {0} in {1}: {2} (expected: {3})",
+ i, opName, actual, formalArgs[i]);
+ }
+ }
+
+ if (formalOuts != null) {
+ for (int i = 0; i < formalOuts.Count; ++i) {
+ Type formal = formalOuts[i].Substitute(subst);
+ Type actual = cce.NonNull(cce.NonNull(actualOuts)[i].Type);
+ // if the type variables to be matched occur in the actual
+ // argument types, something has gone very wrong
+ Contract.Assert(Contract.ForAll(0, typeParams.Count, var => !actual.FreeVariables.Contains(typeParams[var])));
+
+ if (!formal.Unify(actual)) {
+ Contract.Assume(tc != null); // caller expected no errors
+ Contract.Assert(opName != null); // follows from precondition
+ tc.Error(actualOuts[i],
+ "invalid type for out-parameter {0} in {1}: {2} (expected: {3})",
+ i, opName, actual, formal);
+ }
+ }
+ }
+
+ return subst;
+ }
+#endif
+
+ //------------ Match formal argument types of a function or map
+ //------------ on concrete types, substitute the result into the
+ //------------ result type. Null is returned for type errors
+
+ public static List<Type> CheckArgumentTypes(List<TypeVariable>/*!*/ typeParams,
+ out List<Type/*!*/>/*!*/ actualTypeParams,
+ List<Type>/*!*/ formalIns,
+ IList<Expr>/*!*/ actualIns,
+ List<Type>/*!*/ formalOuts,
+ List<IdentifierExpr> actualOuts,
+ IToken/*!*/ typeCheckingSubject,
+ string/*!*/ opName,
+ TypecheckingContext/*!*/ tc)
+ // requires "actualIns" and "actualOuts" to have been type checked
+ {
+ Contract.Requires(typeParams != null);
+
+ Contract.Requires(formalIns != null);
+ Contract.Requires(formalOuts != null);
+ Contract.Requires(actualIns != null);
+ Contract.Requires(typeCheckingSubject != null);
+ Contract.Requires(opName != null);Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out actualTypeParams)));
+ actualTypeParams = new List<Type/*!*/>();
+
+ if (formalIns.Count != actualIns.Count) {
+ tc.Error(typeCheckingSubject, "wrong number of arguments in {0}: {1}",
+ opName, actualIns.Count);
+ // if there are no type parameters, we can still return the result
+ // type and hope that the type checking proceeds
+ return typeParams.Count == 0 ? formalOuts : null;
+ } else if (actualOuts != null && formalOuts.Count != actualOuts.Count) {
+ tc.Error(typeCheckingSubject, "wrong number of result variables in {0}: {1}",
+ opName, actualOuts.Count);
+ // if there are no type parameters, we can still return the result
+ // type and hope that the type checking proceeds
+ actualTypeParams = new List<Type>();
+ return typeParams.Count == 0 ? formalOuts : null;
+ }
+
+ int previousErrorCount = tc.ErrorCount;
+ IDictionary<TypeVariable/*!*/, Type/*!*/> subst =
+ MatchArgumentTypes(typeParams, formalIns, actualIns,
+ actualOuts != null ? formalOuts : null, actualOuts, opName, tc);
+ Contract.Assert(cce.NonNullDictionaryAndValues(subst));
+ foreach (TypeVariable/*!*/ var in typeParams) {
+ Contract.Assert(var != null);
+ actualTypeParams.Add(subst[var]);
+ }
+
+ List<Type>/*!*/ actualResults = new List<Type>();
+ foreach (Type/*!*/ t in formalOuts) {
+ Contract.Assert(t != null);
+ actualResults.Add(t.Substitute(subst));
+ }
+ List<TypeVariable> resultFreeVars = FreeVariablesIn(actualResults);
+ if (previousErrorCount != tc.ErrorCount) {
+ // errors occured when matching the formal arguments
+ // in case we have been able to substitute all type parameters,
+ // we can still return the result type and hope that the
+ // type checking proceeds in a meaningful manner
+ if (typeParams.All(param => !resultFreeVars.Contains(param)))
+ return actualResults;
+ else
+ // otherwise there is no point in returning the result type,
+ // type checking would only get confused even further
+ return null;
+ }
+
+ Contract.Assert(Contract.ForAll(0, typeParams.Count, index => !resultFreeVars.Contains(typeParams[index])));
+ return actualResults;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ // about the same as Type.CheckArgumentTypes, but without
+ // detailed error reports
+ public static Type/*!*/ InferValueType(List<TypeVariable>/*!*/ typeParams,
+ List<Type>/*!*/ formalArgs,
+ Type/*!*/ formalResult,
+ List<Type>/*!*/ actualArgs) {
+ Contract.Requires(typeParams != null);
+ Contract.Requires(formalArgs != null);
+ Contract.Requires(formalResult != null);
+ Contract.Requires(actualArgs != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst =
+ InferTypeParameters(typeParams, formalArgs, actualArgs);
+ Contract.Assert(cce.NonNullDictionaryAndValues(subst));
+
+ Type/*!*/ res = formalResult.Substitute(subst);
+ Contract.Assert(res != null);
+ // all type parameters have to be substituted with concrete types
+ List<TypeVariable>/*!*/ resFreeVars = res.FreeVariables;
+ Contract.Assert(resFreeVars != null);
+ Contract.Assert(Contract.ForAll(0, typeParams.Count, var => !resFreeVars.Contains(typeParams[var])));
+ return res;
+ }
+
+#if OLD_UNIFICATION
+ public static IDictionary<TypeVariable!, Type!>!
+ InferTypeParameters(List<TypeVariable>! typeParams,
+ List<Type>! formalArgs,
+ List<Type>! actualArgs)
+ {
+ Contract.Requires(formalArgs.Length == actualArgs.Length);
+
+ List<TypeVariable>! boundVarSeq0 = new List<TypeVariable> ();
+ List<TypeVariable>! boundVarSeq1 = new List<TypeVariable> ();
+ Dictionary<TypeVariable!, Type!>! subst = new Dictionary<TypeVariable!, Type!>();
+
+ for (int i = 0; i < formalArgs.Length; ++i) {
+ try {
+ Contract.Assert(forall{TypeVariable! var in typeParams);
+ !actualArgs[i].FreeVariables.Has(var)};
+ formalArgs[i].Unify(actualArgs[i], typeParams,
+ boundVarSeq0, boundVarSeq1, subst);
+ } catch (UnificationFailedException) {
+ System.Diagnostics.Debug.Fail("Type unification failed: " +
+ formalArgs[i] + " vs " + actualArgs[i]);
+ }
+ }
+
+ // we only allow type parameters to be substituted
+ Contract.Assert(Contract.ForAll(subst.Keys , var=> typeParams.Has(var)));
+ return subst;
+ }
+#else
+ /// <summary>
+ /// like Type.CheckArgumentTypes, but assumes no errors
+ /// (and only does arguments, not results; and takes actuals as List<Type>, not List<Expr>)
+ /// </summary>
+ public static IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/
+ InferTypeParameters(List<TypeVariable>/*!*/ typeParams,
+ List<Type>/*!*/ formalArgs,
+ List<Type>/*!*/ actualArgs) {
+ Contract.Requires(typeParams != null);
+ Contract.Requires(formalArgs != null);
+ Contract.Requires(actualArgs != null);Contract.Requires(formalArgs.Count == actualArgs.Count);
+ Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
+
+
+ List<Type> proxies = new List<Type>();
+ Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ foreach (TypeVariable/*!*/ tv in typeParams) {
+ Contract.Assert(tv != null);
+ TypeProxy proxy = new TypeProxy(Token.NoToken, tv.Name);
+ proxies.Add(proxy);
+ subst.Add(tv, proxy);
+ }
+
+ for (int i = 0; i < formalArgs.Count; i++) {
+ Type formal = formalArgs[i].Substitute(subst);
+ Type actual = actualArgs[i];
+ // if the type variables to be matched occur in the actual
+ // argument types, something has gone very wrong
+ Contract.Assert(Contract.ForAll(0, typeParams.Count, index => !actual.FreeVariables.Contains(typeParams[index])));
+
+ if (!formal.Unify(actual)) {
+ Contract.Assume(false); // caller expected no errors
+ }
+ }
+
+ return subst;
+ }
+#endif
+
+ //----------- Helper methods to deal with bound type variables ---------------
+
+ public static void EmitOptionalTypeParams(TokenTextWriter stream, List<TypeVariable> typeParams) {
+ Contract.Requires(typeParams != null);
+ Contract.Requires(stream != null);
+ if (typeParams.Count > 0) {
+ stream.Write("<");
+ typeParams.Emit(stream, ","); // default binding strength of 0 is ok
+ stream.Write(">");
+ }
+ }
+
+ // Sort the type parameters according to the order of occurrence in the argument types
+ public static List<TypeVariable>/*!*/ SortTypeParams(List<TypeVariable>/*!*/ typeParams, List<Type>/*!*/ argumentTypes, Type resultType) {
+ Contract.Requires(typeParams != null);
+ Contract.Requires(argumentTypes != null);
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+
+ Contract.Ensures(Contract.Result<List<TypeVariable>>().Count == typeParams.Count);
+ if (typeParams.Count == 0) {
+ return typeParams;
+ }
+
+ List<TypeVariable> freeVarsInUse = FreeVariablesIn(argumentTypes);
+ if (resultType != null) {
+ freeVarsInUse.AppendWithoutDups(resultType.FreeVariables);
+ }
+ // "freeVarsInUse" is already sorted, but it may contain type variables not in "typeParams".
+ // So, project "freeVarsInUse" onto "typeParams":
+ List<TypeVariable> sortedTypeParams = new List<TypeVariable>();
+ foreach (TypeVariable/*!*/ var in freeVarsInUse) {
+ Contract.Assert(var != null);
+ if (typeParams.Contains(var)) {
+ sortedTypeParams.Add(var);
+ }
+ }
+
+ if (sortedTypeParams.Count < typeParams.Count)
+ // add the type parameters not mentioned in "argumentTypes" in
+ // the end of the list (this can happen for quantifiers)
+ sortedTypeParams.AppendWithoutDups(typeParams);
+
+ return sortedTypeParams;
+ }
+
+ // Check that each of the type parameters occurs in at least one argument type.
+ // Return true if some type parameters appear only among "moreArgumentTypes" and
+ // not in "argumentTypes".
+ [Pure]
+ public static bool CheckBoundVariableOccurrences(List<TypeVariable>/*!*/ typeParams,
+ List<Type>/*!*/ argumentTypes,
+ List<Type> moreArgumentTypes,
+ IToken/*!*/ resolutionSubject,
+ string/*!*/ subjectName,
+ ResolutionContext/*!*/ rc) {
+ Contract.Requires(typeParams != null);
+ Contract.Requires(argumentTypes != null);
+ Contract.Requires(resolutionSubject != null);
+ Contract.Requires(subjectName != null);
+ Contract.Requires(rc != null);
+ List<TypeVariable> freeVarsInArgs = FreeVariablesIn(argumentTypes);
+ List<TypeVariable> moFreeVarsInArgs = moreArgumentTypes == null ? null : FreeVariablesIn(moreArgumentTypes);
+ bool someTypeParamsAppearOnlyAmongMo = false;
+ foreach (TypeVariable/*!*/ var in typeParams) {
+ Contract.Assert(var != null);
+ if (rc.LookUpTypeBinder(var.Name) == var) // avoid to complain twice about variables that are bound multiple times
+ {
+ if (freeVarsInArgs.Contains(var)) {
+ // cool
+ } else if (moFreeVarsInArgs != null && moFreeVarsInArgs.Contains(var)) {
+ someTypeParamsAppearOnlyAmongMo = true;
+ } else {
+ rc.Error(resolutionSubject,
+ "type variable must occur in {0}: {1}",
+ subjectName, var);
+ }
+ }
+ }
+ return someTypeParamsAppearOnlyAmongMo;
+ }
+
+ [Pure]
+ public static List<TypeVariable> FreeVariablesIn(List<Type> arguments) {
+ Contract.Requires(arguments != null);
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+ List<TypeVariable>/*!*/ res = new List<TypeVariable>();
+ foreach (Type/*!*/ t in arguments) {
+ Contract.Assert(t != null);
+ res.AppendWithoutDups(t.FreeVariables);
+ }
+ return res;
+ }
+ }
+ [ContractClassFor(typeof(Type))]
+ public abstract class TypeContracts : Type {
+ public TypeContracts() :base(null){
+
+ }
+ public override List<TypeProxy> FreeProxies {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ throw new NotImplementedException();
+ }
+ }
+ public override List<TypeVariable> FreeVariables {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+ throw new NotImplementedException();
+ }
+ }
+ public override Type Clone(IDictionary<TypeVariable, TypeVariable> varMap) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ Contract.Requires(stream != null);
+ throw new NotImplementedException();
+ }
+ public override bool Equals(Type that, List<TypeVariable> thisBoundVariables, List<TypeVariable> thatBoundVariables) {
+ Contract.Requires(that != null);
+ Contract.Requires(thisBoundVariables != null);
+ Contract.Requires(thatBoundVariables != null);
+ throw new NotImplementedException();
+ }
+ public override bool Unify(Type that, List<TypeVariable> unifiableVariables, IDictionary<TypeVariable, Type> unifier) {
+ Contract.Requires(that != null);
+ Contract.Requires(unifiableVariables != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(unifier));
+ Contract.Requires(Contract.ForAll(unifier.Keys, key => unifiableVariables.Contains(key)));
+ Contract.Requires(IsIdempotent(unifier));
+ throw new NotImplementedException();
+ }
+ public override Type Substitute(IDictionary<TypeVariable, Type> subst) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+ public override Type ResolveType(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ Contract.Requires(boundVariables != null);
+ throw new NotImplementedException();
+ }
+ }
+ //=====================================================================
+
+ public class BasicType : Type {
+ public readonly SimpleType T;
+ public BasicType(IToken/*!*/ token, SimpleType t)
+ : base(token) {
+ Contract.Requires(token != null);
+ T = t;
+ }
+ public BasicType(SimpleType t)
+ : base(Token.NoToken) {
+ T = t;
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively.
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // BasicTypes are immutable anyway, we do not clone
+ return this;
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this;
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ // no parentheses are necessary for basic types
+ stream.SetToken(this);
+ stream.Write("{0}", this);
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ switch (T) {
+ case SimpleType.Int:
+ return "int";
+ case SimpleType.Real:
+ return "real";
+ case SimpleType.Bool:
+ return "bool";
+ }
+ Debug.Assert(false, "bad type " + T);
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // make compiler happy
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ // shortcut
+ Type thatType = that as Type;
+ if (thatType == null)
+ return false;
+ BasicType thatBasicType = TypeProxy.FollowProxy(thatType.Expanded) as BasicType;
+ return thatBasicType != null && this.T == thatBasicType.T;
+ }
+
+ [Pure]
+ public override bool Equals(Type that, List<TypeVariable> thisBoundVariables, List<TypeVariable> thatBoundVariables) {
+ //Contract.Requires(thatBoundVariables != null);
+ //Contract.Requires(thisBoundVariables != null);
+ //Contract.Requires(that != null);
+ return this.Equals(that);
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type that, List<TypeVariable> unifiableVariables, IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(that != null);
+ //Contract.Requires(cce.NonNullElements(unifier));
+ // an idempotent substitution that describes the
+ // unification result up to a certain point
+
+ that = that.Expanded;
+ if (that is TypeProxy || that is TypeVariable) {
+ return that.Unify(this, unifiableVariables, unifier);
+ } else {
+ return this.Equals(that);
+ }
+ }
+
+#if OLD_UNIFICATION
+ public override void Unify(Type! that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ IDictionary<TypeVariable!, Type!>! result) {
+ that = that.Expanded;
+ if (that is TypeVariable) {
+ that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
+ } else {
+ if (!this.Equals(that))
+ throw UNIFICATION_FAILED;
+ }
+ }
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this;
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ return this.T.GetHashCode();
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // nothing to resolve
+ return this;
+ }
+
+ // determine the free variables in a type, in the order in which the variables occur
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+
+ return new List<TypeVariable>(); // basic type are closed
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ return new List<TypeProxy/*!*/>();
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsBasic {
+ get {
+ return true;
+ }
+ }
+ public override bool IsInt {
+ get {
+ return this.T == SimpleType.Int;
+ }
+ }
+ public override bool IsReal {
+ get {
+ return this.T == SimpleType.Real;
+ }
+ }
+ public override bool IsBool {
+ get {
+ return this.T == SimpleType.Bool;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitBasicType(this);
+ }
+ }
+
+ //=====================================================================
+
+ //Note that the functions in this class were directly copied from the BV class just below
+ public class FloatType : Type {
+ public readonly int Mantissa; //Size of mantissa in bits
+ public readonly int Exponent; //Size of exponent in bits
+
+ public FloatType(IToken token, int exponent, int mantissa)
+ : base(token) {
+ Contract.Requires(token != null);
+ Exponent = exponent;
+ Mantissa = mantissa;
+ }
+
+ public FloatType(int exponent, int mantissa)
+ : base(Token.NoToken) {
+ Exponent = exponent;
+ Mantissa = mantissa;
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively.
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap)
+ {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // FloatTypes are immutable anyway, we do not clone
+ return this;
+ }
+
+ public override Type CloneUnresolved()
+ {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this;
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength)
+ {
+ //Contract.Requires(stream != null);
+ // no parentheses are necessary for bitvector-types
+ stream.SetToken(this);
+ stream.Write("{0}", this);
+ }
+
+ public override string ToString()
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "float (" + Exponent + " " + Mantissa + ")";
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ public override bool Equals(Type/*!*/ that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables)
+ {
+ FloatType thatFloatType = TypeProxy.FollowProxy(that.Expanded) as FloatType;
+ return thatFloatType != null && this.Mantissa == thatFloatType.Mantissa && this.Exponent == thatFloatType.Exponent;
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ // an idempotent substitution that describes the
+ // unification result up to a certain point
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier)
+ {
+ //Contract.Requires(that != null);
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(cce.NonNullElements(unifier));
+ that = that.Expanded;
+ if (that is TypeProxy || that is TypeVariable) {
+ return that.Unify(this, unifiableVariables, unifier);
+ }
+ else {
+ return this.Equals(that);
+ }
+ }
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst)
+ {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this;
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables)
+ {
+ return this.Mantissa.GetHashCode() + this.Exponent.GetHashCode();
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc)
+ {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // nothing to resolve
+ return this;
+ }
+
+ // determine the free variables in a type, in the order in which the variables occur
+ public override List<TypeVariable>/*!*/ FreeVariables
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+
+ return new List<TypeVariable>(); // bitvector-type are closed
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ return new List<TypeProxy/*!*/>();
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsFloat {
+ get {
+ return true;
+ }
+ }
+ public override int FloatMantissa {
+ get {
+ return Mantissa;
+ }
+ }
+ public override int FloatExponent {
+ get {
+ return Exponent;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor)
+ {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitFloatType(this);
+ }
+
+ }
+
+ //=====================================================================
+
+ public class BvType : Type {
+ public readonly int Bits;
+
+ public BvType(IToken token, int bits)
+ : base(token) {
+ Contract.Requires(token != null);
+ Bits = bits;
+ }
+
+ public BvType(int bits)
+ : base(Token.NoToken) {
+ Bits = bits;
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively.
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // BvTypes are immutable anyway, we do not clone
+ return this;
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this;
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ // no parentheses are necessary for bitvector-types
+ stream.SetToken(this);
+ stream.Write("{0}", this);
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "bv" + Bits;
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ public override bool Equals(Type/*!*/ that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables) {
+ //Contract.Requires(thisBoundVariables != null);
+ //Contract.Requires(thatBoundVariables != null);
+ //Contract.Requires(that != null);
+ BvType thatBvType = TypeProxy.FollowProxy(that.Expanded) as BvType;
+ return thatBvType != null && this.Bits == thatBvType.Bits;
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ // an idempotent substitution that describes the
+ // unification result up to a certain point
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
+ //Contract.Requires(that != null);
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(cce.NonNullElements(unifier));
+ that = that.Expanded;
+ if (that is TypeProxy || that is TypeVariable) {
+ return that.Unify(this, unifiableVariables, unifier);
+ } else {
+ return this.Equals(that);
+ }
+ }
+
+#if OLD_UNIFICATION
+ public override void Unify(Type that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ IDictionary<TypeVariable!, Type!> result){
+Contract.Requires(result != null);
+Contract.Requires(that != null);
+ that = that.Expanded;
+ if (that is TypeVariable) {
+ that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
+ } else {
+ if (!this.Equals(that))
+ throw UNIFICATION_FAILED;
+ }
+ }
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this;
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ return this.Bits.GetHashCode();
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // nothing to resolve
+ return this;
+ }
+
+ // determine the free variables in a type, in the order in which the variables occur
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+
+ return new List<TypeVariable>(); // bitvector-type are closed
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ return new List<TypeProxy/*!*/>();
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsBv {
+ get {
+ return true;
+ }
+ }
+ public override int BvBits {
+ get {
+ return Bits;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitBvType(this);
+ }
+ }
+
+ //=====================================================================
+
+ // An AST node containing an identifier and a sequence of type arguments, which
+ // will be turned either into a TypeVariable, into a CtorType or into a BvType
+ // during the resolution phase
+ public class UnresolvedTypeIdentifier : Type {
+ public readonly string/*!*/ Name;
+ public readonly List<Type>/*!*/ Arguments;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Name != null);
+ Contract.Invariant(Arguments != null);
+ }
+
+
+ public UnresolvedTypeIdentifier(IToken token, string name)
+ : this(token, name, new List<Type>()) {
+ Contract.Requires(name != null);
+ Contract.Requires(token != null);
+ }
+
+ public UnresolvedTypeIdentifier(IToken token, string name, List<Type> arguments)
+ : base(token) {
+ Contract.Requires(arguments != null);
+ Contract.Requires(name != null);
+ Contract.Requires(token != null);
+ this.Name = name;
+ this.Arguments = arguments;
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.Clone(varMap));
+ }
+ return new UnresolvedTypeIdentifier(tok, Name, newArgs);
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.CloneUnresolved());
+ }
+ return new UnresolvedTypeIdentifier(tok, Name, newArgs);
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ public override bool Equals(Type that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables) {
+ //Contract.Requires(thisBoundVariables != null);
+ //Contract.Requires(thatBoundVariables != null);
+ //Contract.Requires(that != null);
+ System.Diagnostics.Debug.Fail("UnresolvedTypeIdentifier.Equals should never be called");
+ return false; // to make the compiler happy
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ IDictionary<TypeVariable/*!*/, Type/*!*/> result) {
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(cce.NonNullElements(result));
+ //Contract.Requires(that != null);
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // UnresolvedTypeIdentifier.Unify should never be called
+ }
+
+#if OLD_UNIFICATION
+ public override void Unify(Type that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ IDictionary<TypeVariable!, Type!> result){
+Contract.Requires(result != null);
+Contract.Requires(that != null);
+ System.Diagnostics.Debug.Fail("UnresolvedTypeIdentifier.Unify should never be called");
+ }
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // UnresolvedTypeIdentifier.Substitute should never be called
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // UnresolvedTypeIdentifier.GetHashCode should never be called
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // first case: the type name denotes a bitvector-type
+ if (Name.StartsWith("bv") && Name.Length > 2) {
+ bool is_bv = true;
+ for (int i = 2; i < Name.Length; ++i) {
+ if (!char.IsDigit(Name[i])) {
+ is_bv = false;
+ break;
+ }
+ }
+ if (is_bv) {
+ if (Arguments.Count > 0) {
+ rc.Error(this,
+ "bitvector types must not be applied to arguments: {0}",
+ Name);
+ }
+ return new BvType(tok, int.Parse(Name.Substring(2)));
+ }
+ }
+
+ // second case: the identifier is resolved to a type variable
+ TypeVariable var = rc.LookUpTypeBinder(Name);
+ if (var != null) {
+ if (Arguments.Count > 0) {
+ rc.Error(this,
+ "type variables must not be applied to arguments: {0}",
+ var);
+ }
+ return var;
+ }
+
+ // third case: the identifier denotes a type constructor and we
+ // recursively resolve the arguments
+ TypeCtorDecl ctorDecl = rc.LookUpType(Name);
+ if (ctorDecl != null) {
+ if (Arguments.Count != ctorDecl.Arity) {
+ rc.Error(this,
+ "type constructor received wrong number of arguments: {0}",
+ ctorDecl);
+ return this;
+ }
+ return new CtorType(tok, ctorDecl, ResolveArguments(rc));
+ }
+
+ // fourth case: the identifier denotes a type synonym
+ TypeSynonymDecl synDecl = rc.LookUpTypeSynonym(Name);
+ if (synDecl != null) {
+ if (Arguments.Count != synDecl.TypeParameters.Count) {
+ rc.Error(this,
+ "type synonym received wrong number of arguments: {0}",
+ synDecl);
+ return this;
+ }
+ List<Type>/*!*/ resolvedArgs = ResolveArguments(rc);
+ Contract.Assert(resolvedArgs != null);
+
+ return new TypeSynonymAnnotation(this.tok, synDecl, resolvedArgs);
+
+ }
+
+ // otherwise: this name is not declared anywhere
+ rc.Error(this, "undeclared type: {0}", Name);
+ return this;
+ }
+
+ private List<Type> ResolveArguments(ResolutionContext rc) {
+ Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<List<Type>>() != null);
+ List<Type>/*!*/ resolvedArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ resolvedArgs.Add(t.ResolveType(rc));
+ }
+ return resolvedArgs;
+ }
+
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+
+ return new List<TypeVariable>();
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ return new List<TypeProxy/*!*/>();
+ }
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+ // PR: should unresolved types be syntactically distinguished from resolved types?
+ CtorType.EmitCtorType(this.Name, Arguments, stream, contextBindingStrength);
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsUnresolved {
+ get {
+ return true;
+ }
+ }
+ public override UnresolvedTypeIdentifier/*!*/ AsUnresolved {
+ get {
+ Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
+ return this;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitUnresolvedTypeIdentifier(this);
+ }
+ }
+
+ //=====================================================================
+
+ public class TypeVariable : Type {
+ public readonly string/*!*/ Name;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Name != null);
+ }
+
+
+ public TypeVariable(IToken token, string name)
+ : base(token) {
+ Contract.Requires(name != null);
+ Contract.Requires(token != null);
+ this.Name = name;
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // if this variable is mapped to some new variable, we take the new one
+ // otherwise, return this
+ TypeVariable res;
+ varMap.TryGetValue(this, out res);
+ if (res == null)
+ return this;
+ else
+ return res;
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this;
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ public override bool Equals(Type that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables) {
+ //Contract.Requires(thisBoundVariables != null);
+ //Contract.Requires(thatBoundVariables != null);
+ //Contract.Requires(that != null);
+ TypeVariable thatAsTypeVar = TypeProxy.FollowProxy(that.Expanded) as TypeVariable;
+
+ if (thatAsTypeVar == null)
+ return false;
+
+ int thisIndex = thisBoundVariables.LastIndexOf(this);
+ int thatIndex = thatBoundVariables.LastIndexOf(thatAsTypeVar);
+ return (thisIndex >= 0 && thisIndex == thatIndex) ||
+ (thisIndex == -1 && thatIndex == -1 &&
+ Object.ReferenceEquals(this, thatAsTypeVar));
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ // an idempotent substitution that describes the
+ // unification result up to a certain point
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ unifier) {
+ //Contract.Requires(that != null);
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(cce.NonNullElements(unifier));
+ that = that.Expanded;
+ if (that is TypeProxy && !(that is ConstrainedProxy))
+ return that.Unify(this, unifiableVariables, unifier);
+
+ if (this.Equals(that))
+ return true;
+
+ if (unifiableVariables.Contains(this)) {
+ Type previousSubst;
+ unifier.TryGetValue(this, out previousSubst);
+ if (previousSubst == null) {
+ return addSubstitution(unifier, that);
+ } else {
+ // we have to unify the old instantiation with the new one
+ return previousSubst.Unify(that, unifiableVariables, unifier);
+ }
+ }
+
+ // this cannot be instantiated with anything
+ // but that possibly can ...
+
+ TypeVariable tv = that as TypeVariable;
+
+ return tv != null &&
+ unifiableVariables.Contains(tv) &&
+ that.Unify(this, unifiableVariables, unifier);
+ }
+
+ // TODO: the following might cause problems, because when applying substitutions
+ // to type proxies the substitutions are not propagated to the proxy
+ // constraints (right now at least)
+ private bool addSubstitution(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ oldSolution,
+ // the type that "this" is instantiated with
+ Type/*!*/ newSubst) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(oldSolution));
+ Contract.Requires(newSubst != null);
+ Contract.Requires(!oldSolution.ContainsKey(this));
+
+ Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ newMapping = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ // apply the old (idempotent) substitution to the new instantiation
+ Type/*!*/ substSubst = newSubst.Substitute(oldSolution);
+ Contract.Assert(substSubst != null);
+ // occurs check
+ if (substSubst.FreeVariables.Contains(this))
+ return false;
+ newMapping.Add(this, substSubst);
+
+ // apply the new substitution to the old ones to ensure idempotence
+ List<TypeVariable/*!*/>/*!*/ keys = new List<TypeVariable/*!*/>();
+ keys.AddRange(oldSolution.Keys);
+ foreach (TypeVariable/*!*/ var in keys) {
+ Contract.Assert(var != null);
+ oldSolution[var] = oldSolution[var].Substitute(newMapping);
+ }
+ oldSolution.Add(this, substSubst);
+
+ Contract.Assert(IsIdempotent(oldSolution));
+ return true;
+ }
+
+#if OLD_UNIFICATION
+ public override void Unify(Type that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ IDictionary<TypeVariable!, Type!> result){
+Contract.Requires(result != null);
+Contract.Requires(that != null);
+ that = that.Expanded;
+ int thisIndex = thisBoundVariables.LastIndexOf(this);
+ if (thisIndex == -1) {
+ // this is not a bound variable and can possibly be matched on that
+ // that must not contain any bound variables
+ List<TypeVariable>! thatFreeVars = that.FreeVariables;
+ if (thatBoundVariables.Any(var=> thatFreeVars.Has(var)))
+ throw UNIFICATION_FAILED;
+
+ // otherwise, in case that is a typevariable it cannot be bound and
+ // we can just check for equality
+ if (this.Equals(that))
+ return;
+
+ if (!unifiableVariables.Has(this)) {
+ // this cannot be instantiated with anything
+ // but that possibly can ...
+ if ((that is TypeVariable) &&
+ unifiableVariables.Has(that as TypeVariable)) {
+ that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
+ return;
+ } else {
+ throw UNIFICATION_FAILED;
+ }
+ }
+
+ Type previousSubst;
+ result.TryGetValue(this, out previousSubst);
+ if (previousSubst == null) {
+ addSubstitution(result, that);
+ } else {
+ // we have to unify the old instantiation with the new one
+ previousSubst.Unify(that, unifiableVariables, thisBoundVariables, thatBoundVariables, result);
+ }
+ } else {
+ // this is a bound variable, that also has to be one (with the same index)
+ if (!(that is TypeVariable) ||
+ thatBoundVariables.LastIndexOf(that) != thisIndex)
+ throw UNIFICATION_FAILED;
+ }
+ }
+
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Type res;
+ if (subst.TryGetValue(this, out res)) {
+ Contract.Assert(res != null);
+ return res;
+ } else {
+ return this;
+ }
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ int thisIndex = boundVariables.LastIndexOf(this);
+ if (thisIndex == -1)
+ return GetBaseHashCode();
+ return thisIndex * 27473671;
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ // never put parentheses around variables
+ stream.SetToken(this);
+ stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ //Contract.Ensures(Contract.Result<Type>() != null);
+ // nothing to resolve
+ return this;
+ }
+
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+ return new List<TypeVariable> { this };
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ return new List<TypeProxy/*!*/>();
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsVariable {
+ get {
+ return true;
+ }
+ }
+ public override TypeVariable/*!*/ AsVariable {
+ get {
+ Contract.Ensures(Contract.Result<TypeVariable>() != null);
+ return this;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ //Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitTypeVariable(this);
+ }
+ }
+
+ //=====================================================================
+
+ public class TypeProxy : Type {
+ static int proxies = 0;
+ protected readonly string/*!*/ Name;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Name != null);
+ }
+
+
+ public TypeProxy(IToken token, string givenName)
+ : this(token, givenName, "proxy") {
+ Contract.Requires(givenName != null);
+ Contract.Requires(token != null);
+ }
+
+ protected TypeProxy(IToken token, string givenName, string kind)
+ : base(token) {
+ Contract.Requires(kind != null);
+ Contract.Requires(givenName != null);
+ Contract.Requires(token != null);
+ Name = givenName + "$" + kind + "#" + proxies;
+ proxies++;
+ }
+
+ private Type proxyFor;
+ public Type ProxyFor {
+ // apply path shortening, and then return the value of proxyFor
+ get {
+ TypeProxy anotherProxy = proxyFor as TypeProxy;
+ if (anotherProxy != null && anotherProxy.proxyFor != null) {
+ // apply path shortening by bypassing "anotherProxy" (and possibly others)
+ proxyFor = anotherProxy.ProxyFor;
+ Contract.Assert(proxyFor != null);
+ }
+ return proxyFor;
+ }
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Everything)]
+ public static Type FollowProxy(Type t) {
+ Contract.Requires(t != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Ensures(!(Contract.Result<Type>() is TypeProxy) || ((TypeProxy)Contract.Result<Type>()).proxyFor == null);
+ if (t is TypeProxy) {
+ Type p = ((TypeProxy)t).ProxyFor;
+ if (p != null) {
+ return p;
+ }
+ }
+ return t;
+ }
+
+ protected void DefineProxy(Type ty) {
+ Contract.Requires(ty != null);
+ Contract.Requires(ProxyFor == null);
+ // follow ty down to the leaf level, so that we can avoid creating a cycle
+ ty = FollowProxy(ty);
+ if (!object.ReferenceEquals(this, ty)) {
+ proxyFor = ty;
+ }
+ }
+
+ //----------- Cloning ----------------------------------
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Clone(varMap);
+ } else {
+ return new TypeProxy(this.tok, this.Name); // the clone will have a name that ends with $proxy<n>$proxy<m>
+ }
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return new TypeProxy(this.tok, this.Name); // the clone will have a name that ends with $proxy<n>$proxy<m>
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ public override bool Equals(Type that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables) {
+ //Contract.Requires(thisBoundVariables != null);
+ //Contract.Requires(thatBoundVariables != null);
+ //Contract.Requires(that != null);
+ if (object.ReferenceEquals(this, that)) {
+ return true;
+ }
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Equals(that, thisBoundVariables, thatBoundVariables);
+ } else {
+ // This proxy could be made to be equal to anything, so what to return?
+ return false;
+ }
+ }
+
+ //----------- Unification of types -----------
+
+ // determine whether the occurs check fails: this is a strict subtype of that
+ protected bool ReallyOccursIn(Type that) {
+ Contract.Requires(that != null);
+ that = FollowProxy(that.Expanded);
+ return that.FreeProxies.Contains(this) &&
+ (that.IsCtor || that.IsMap && this != that && this.ProxyFor != that);
+ }
+
+ public override bool Unify(Type that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ IDictionary<TypeVariable/*!*/, Type/*!*/> result) {
+ //Contract.Requires(cce.NonNullElements(result));
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(that != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Unify(that, unifiableVariables, result);
+ } else {
+ // unify this with that
+ if (this.ReallyOccursIn(that))
+ return false;
+ DefineProxy(that.Expanded);
+ return true;
+ }
+ }
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Substitute(subst);
+ } else {
+ return this;
+ }
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.GetHashCode(boundVariables);
+ } else {
+ return GetBaseHashCode();
+ }
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ p.Emit(stream, contextBindingStrength);
+ } else {
+ // no need for parentheses
+ stream.SetToken(this);
+ stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(this.Name));
+ }
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.ResolveType(rc);
+ } else {
+ return this;
+ }
+ }
+
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.FreeVariables;
+ } else {
+ return new List<TypeVariable>();
+ }
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.FreeProxies;
+ } else {
+ List<TypeProxy/*!*/>/*!*/ res = new List<TypeProxy/*!*/>();
+ res.Add(this);
+ return res;
+ }
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsBasic {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsBasic;
+ }
+ }
+ public override bool IsInt {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsInt;
+ }
+ }
+ public override bool IsReal {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsReal;
+ }
+ }
+ public override bool IsFloat {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsFloat;
+ }
+ }
+ public override bool IsBool {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsBool;
+ }
+ }
+
+ public override bool IsVariable {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsVariable;
+ }
+ }
+ public override TypeVariable/*!*/ AsVariable {
+ get {
+ Contract.Ensures(Contract.Result<TypeVariable>() != null);
+
+ Type p = ProxyFor;
+ Contract.Assume(p != null);
+ return p.AsVariable;
+ }
+ }
+
+ public override bool IsCtor {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsCtor;
+ }
+ }
+ public override CtorType/*!*/ AsCtor {
+ get {
+ Contract.Ensures(Contract.Result<CtorType>() != null);
+
+ Type p = ProxyFor;
+ Contract.Assume(p != null);
+ return p.AsCtor;
+ }
+ }
+ public override bool IsMap {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsMap;
+ }
+ }
+ public override MapType/*!*/ AsMap {
+ get {
+ Contract.Ensures(Contract.Result<MapType>() != null);
+
+ Type p = ProxyFor;
+ Contract.Assume(p != null);
+ return p.AsMap;
+ }
+ }
+ public override int MapArity {
+ get {
+ Type p = ProxyFor;
+ Contract.Assume(p != null);
+ return p.MapArity;
+ }
+ }
+ public override bool IsUnresolved {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsUnresolved;
+ }
+ }
+ public override UnresolvedTypeIdentifier/*!*/ AsUnresolved {
+ get {
+ Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
+
+ Type p = ProxyFor;
+ Contract.Assume(p != null);
+ return p.AsUnresolved;
+ }
+ }
+
+ public override bool IsBv {
+ get {
+ Type p = ProxyFor;
+ return p != null && p.IsBv;
+ }
+ }
+ public override int BvBits {
+ get {
+ Type p = ProxyFor;
+ Contract.Assume(p != null);
+ return p.BvBits;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitTypeProxy(this);
+ }
+ }
+
+ public abstract class ConstrainedProxy : TypeProxy {
+ protected ConstrainedProxy(IToken token, string givenName, string kind)
+ : base(token, givenName, kind) {
+ Contract.Requires(kind != null);
+ Contract.Requires(givenName != null);
+ Contract.Requires(token != null);
+ }
+ }
+
+ /// <summary>
+ /// Each instance of this class represents a set of bitvector types. In particular, it represents
+ /// a bitvector type bvN iff
+ /// minBits ATMOST N and
+ /// foreach constraint (t0,t1), the types represented by t0 and t1 are bitvector types whose
+ /// number of bits add up to N.
+ /// This means that the size of a BvTypeProxy p is constrained not only by p.minBits, but also
+ /// by the size of various t0 and t1 types that are transitively part of BvTypeProxy constraints.
+ /// If such a t0 or t1 were to get its ProxyFor field defined, then p would have to be further
+ /// constrained too. This doesn't seem like it would ever occur in a Boogie 2 program, because:
+ /// the only place where a BvTypeProxy with constraints can occur is as the type of a
+ /// BvConcatExpr, and
+ /// the types of all local variables are explicitly declared, which means that the types of
+ /// subexpressions of a BvConcatExpr are not going to change other than via the type of the
+ /// BvConcatExpr.
+ /// So, this implementation of BvTypeProxy does not keep track of where a BvTypeProxy may occur
+ /// transitively in some other BvTypeProxy's constraints.
+ /// </summary>
+ public class BvTypeProxy : ConstrainedProxy {
+ public int MinBits;
+ List<BvTypeConstraint/*!*/> constraints;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(constraints, true));
+ }
+
+ class BvTypeConstraint {
+ public Type/*!*/ T0;
+ public Type/*!*/ T1;
+ public BvTypeConstraint(Type t0, Type t1) {
+ Contract.Requires(t1 != null);
+ Contract.Requires(t0 != null);
+ Contract.Requires(t0.IsBv && t1.IsBv);
+ T0 = t0;
+ T1 = t1;
+ }
+ }
+
+ public BvTypeProxy(IToken token, string name, int minBits)
+ : base(token, name, "bv" + minBits + "proxy") {
+ Contract.Requires(name != null);
+ Contract.Requires(token != null);
+ this.MinBits = minBits;
+ }
+
+ /// <summary>
+ /// Requires that any further constraints to be placed on t0 and t1 go via the object to
+ /// be constructed.
+ /// </summary>
+ public BvTypeProxy(IToken token, string name, Type t0, Type t1)
+ : base(token, name, "bvproxy") {
+ Contract.Requires(t1 != null);
+ Contract.Requires(t0 != null);
+ Contract.Requires(name != null);
+ Contract.Requires(token != null);
+ Contract.Requires(t0.IsBv && t1.IsBv);
+ t0 = FollowProxy(t0);
+ t1 = FollowProxy(t1);
+ this.MinBits = MinBitsFor(t0) + MinBitsFor(t1);
+ List<BvTypeConstraint/*!*/> list = new List<BvTypeConstraint/*!*/>();
+ list.Add(new BvTypeConstraint(t0, t1));
+ this.constraints = list;
+ }
+
+ /// <summary>
+ /// Construct a BvTypeProxy like p, but with minBits.
+ /// </summary>
+ private BvTypeProxy(BvTypeProxy p, int minBits)
+ : base(p.tok, p.Name, "") {
+ Contract.Requires(p != null);
+ this.MinBits = minBits;
+ this.constraints = p.constraints;
+ }
+
+ private BvTypeProxy(IToken token, string name, int minBits, List<BvTypeConstraint/*!*/> constraints)
+ : base(token, name, "") {
+ Contract.Requires(cce.NonNullElements(constraints, true));
+ Contract.Requires(name != null);
+ Contract.Requires(token != null);
+ this.MinBits = minBits;
+ this.constraints = constraints;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Everything)]
+ private static int MinBitsFor(Type t) {
+ Contract.Requires(t != null);
+ Contract.Requires(t.IsBv);
+ Contract.Ensures(0 <= Contract.Result<int>());
+
+ if (t is TypeSynonymAnnotation) {
+ return MinBitsFor(((TypeSynonymAnnotation)t).ExpandedType);
+ }
+
+ if (t is BvType) {
+ return t.BvBits;
+ } else {
+ return ((BvTypeProxy)t).MinBits;
+ }
+ }
+
+ //----------- Cloning ----------------------------------
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Clone(varMap);
+ } else {
+ return new BvTypeProxy(this.tok, this.Name, this.MinBits, this.constraints); // the clone will have a name that ends with $bvproxy<n>$bvproxy<m>
+ }
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return new BvTypeProxy(this.tok, this.Name, this.MinBits, this.constraints); // the clone will have a name that ends with $bvproxy<n>$bvproxy<m>
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type that,
+ List<TypeVariable> unifiableVariables,
+ IDictionary<TypeVariable, Type> result) {
+ //Contract.Requires(cce.NonNullElements(result));
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(that != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Unify(that, unifiableVariables, result);
+ }
+
+ // unify this with that, if possible
+ that = that.Expanded;
+ that = FollowProxy(that);
+
+ if (this.ReallyOccursIn(that))
+ return false;
+
+ TypeVariable tv = that as TypeVariable;
+
+ if (tv != null && unifiableVariables.Contains(tv))
+ return that.Unify(this, unifiableVariables, result);
+
+ if (object.ReferenceEquals(this, that)) {
+ return true;
+ } else if (that is BvType) {
+ if (MinBits <= that.BvBits) {
+ if (constraints != null) {
+ foreach (BvTypeConstraint btc in constraints) {
+ int minT1 = MinBitsFor(btc.T1);
+ int left = IncreaseBits(btc.T0, that.BvBits - minT1);
+ left = IncreaseBits(btc.T1, minT1 + left);
+ Contract.Assert(left == 0); // because it should always be possible to increase the total size of a BvTypeConstraint pair (t0,t1) arbitrarily
+ }
+ }
+ DefineProxy(that);
+ return true;
+ }
+ } else if (that is BvTypeProxy) {
+ BvTypeProxy bt = (BvTypeProxy)that;
+ // keep the proxy with the stronger constraint (that is, the higher minBits), but if either
+ // has a constraints list, then concatenate both constraints lists and define the previous
+ // proxies to the new one
+ if (this.constraints != null || bt.constraints != null) {
+ List<BvTypeConstraint/*!*/> list = new List<BvTypeConstraint/*!*/>();
+ if (this.constraints != null) {
+ list.AddRange(this.constraints);
+ }
+ if (bt.constraints != null) {
+ list.AddRange(bt.constraints);
+ }
+ BvTypeProxy np = new BvTypeProxy(this.tok, this.Name, Math.Max(this.MinBits, bt.MinBits), list);
+ this.DefineProxy(np);
+ bt.DefineProxy(np);
+ } else if (this.MinBits <= bt.MinBits) {
+ this.DefineProxy(bt);
+ } else {
+ bt.DefineProxy(this);
+ }
+ return true;
+ } else if (that is ConstrainedProxy) {
+ // only bitvector proxies can be unified with this BvTypeProxy
+ return false;
+ } else if (that is TypeProxy) {
+ // define: that.ProxyFor := this;
+ return that.Unify(this, unifiableVariables, result);
+ }
+ return false;
+ }
+
+ private static int IncreaseBits(Type t, int to) {
+ Contract.Requires(t != null);
+ Contract.Requires(t.IsBv && 0 <= to && MinBitsFor(t) <= to);
+ Contract.Ensures(0 <= Contract.Result<int>() && Contract.Result<int>() <= to);
+
+ if(t is TypeSynonymAnnotation) {
+ return IncreaseBits(((TypeSynonymAnnotation)t).ExpandedType, to);
+ }
+
+ t = FollowProxy(t);
+ if (t is BvType) {
+ return to - t.BvBits;
+ } else {
+ BvTypeProxy p = (BvTypeProxy)t;
+ Contract.Assert(p.MinBits <= to);
+ if (p.MinBits < to) {
+ BvTypeProxy q = new BvTypeProxy(p, to);
+ p.DefineProxy(q);
+ }
+ return 0; // we were able to satisfy the request completely
+ }
+ }
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (this.ProxyFor == null) {
+ // check that the constraints are clean and do not contain any
+ // of the substituted variables (otherwise, we are in big trouble)
+ Contract.Assert(Contract.ForAll(constraints, c =>
+ Contract.ForAll(subst.Keys, var =>
+ !c.T0.FreeVariables.Contains(var) && !c.T1.FreeVariables.Contains(var))));
+ }
+ return base.Substitute(subst);
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsBv {
+ get {
+ return true;
+ }
+ }
+ public override int BvBits {
+ get {
+ // This method is supposed to return the number of bits supplied, but unless the proxy has been resolved,
+ // we only have a lower bound on the number of bits supplied. But this method is not supposed to be
+ // called until type checking has finished, at which time the minBits is stable.
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.BvBits;
+ } else {
+ return MinBits;
+ }
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitBvTypeProxy(this);
+ }
+ }
+
+ // Proxy representing map types with a certain arity. Apart from the arity,
+ // a number of constraints on the index and value type of the map type may
+ // be known (such constraints result from applied select and store operations).
+ // Because map type can be polymorphic (in the most general case, each index or
+ // value type is described by a separate type parameter) any combination of
+ // constraints can be satisfied.
+ public class MapTypeProxy : ConstrainedProxy {
+ public readonly int Arity;
+ private readonly List<Constraint>/*!*/ constraints = new List<Constraint>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(constraints != null);
+ }
+
+
+ // each constraint specifies that the given combination of argument/result
+ // types must be a possible instance of the formal map argument/result types
+ private struct Constraint {
+ public readonly List<Type>/*!*/ Arguments;
+ public readonly Type/*!*/ Result;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Arguments != null);
+ Contract.Invariant(Result != null);
+ }
+
+
+ public Constraint(List<Type> arguments, Type result) {
+ Contract.Requires(result != null);
+ Contract.Requires(arguments != null);
+ Arguments = arguments;
+ Result = result;
+ }
+
+ public Constraint Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(varMap));
+ List<Type>/*!*/ args = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ args.Add(t.Clone(varMap));
+ }
+ Type/*!*/ res = Result.Clone(varMap);
+ Contract.Assert(res != null);
+ return new Constraint(args, res);
+ }
+
+ public bool Unify(MapType that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
+ Contract.Requires(unifiableVariables != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(result));
+ Contract.Requires(that != null);
+ Contract.Requires(Arguments.Count == that.Arguments.Count);
+ Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ foreach (TypeVariable/*!*/ tv in that.TypeParameters) {
+ Contract.Assert(tv != null);
+ TypeProxy proxy = new TypeProxy(Token.NoToken, tv.Name);
+ subst.Add(tv, proxy);
+ }
+
+ bool good = true;
+ for (int i = 0; i < that.Arguments.Count; i++) {
+ Type t0 = that.Arguments[i].Substitute(subst);
+ Type t1 = this.Arguments[i];
+ good &= t0.Unify(t1, unifiableVariables, result);
+ }
+ good &= that.Result.Substitute(subst).Unify(this.Result, unifiableVariables, result);
+ return good;
+ }
+ }
+
+ public MapTypeProxy(IToken token, string name, int arity)
+ : base(token, name, "mapproxy") {
+ Contract.Requires(name != null);
+ Contract.Requires(token != null);
+ Contract.Requires(0 <= arity);
+ this.Arity = arity;
+ }
+
+ private void AddConstraint(Constraint c) {
+ Contract.Requires(c.Arguments.Count == Arity);
+
+ Type f = ProxyFor;
+ MapType mf = f as MapType;
+ if (mf != null) {
+ bool success = c.Unify(mf, new List<TypeVariable>(), new Dictionary<TypeVariable/*!*/, Type/*!*/>());
+ Contract.Assert(success);
+ return;
+ }
+
+ MapTypeProxy mpf = f as MapTypeProxy;
+ if (mpf != null) {
+ mpf.AddConstraint(c);
+ return;
+ }
+
+ Contract.Assert(f == null); // no other types should occur as specialisations of this proxy
+
+ constraints.Add(c);
+ }
+
+ public Type CheckArgumentTypes(List<Expr>/*!*/ actualArgs,
+ out TypeParamInstantiation/*!*/ tpInstantiation,
+ IToken/*!*/ typeCheckingSubject,
+ string/*!*/ opName,
+ TypecheckingContext/*!*/ tc) {
+ Contract.Requires(actualArgs != null);
+ Contract.Requires(typeCheckingSubject != null);
+ Contract.Requires(opName != null);
+ Contract.Requires(tc != null);
+ Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+
+
+
+ Type f = ProxyFor;
+ MapType mf = f as MapType;
+ if (mf != null)
+ return mf.CheckArgumentTypes(actualArgs, out tpInstantiation, typeCheckingSubject, opName, tc);
+
+ MapTypeProxy mpf = f as MapTypeProxy;
+ if (mpf != null)
+ return mpf.CheckArgumentTypes(actualArgs, out tpInstantiation, typeCheckingSubject, opName, tc);
+
+ Contract.Assert(f == null); // no other types should occur as specialisations of this proxy
+
+ // otherwise, we just record the constraints given by this usage of the map type
+ List<Type>/*!*/ arguments = new List<Type>();
+ foreach (Expr/*!*/ e in actualArgs) {
+ Contract.Assert(e != null);
+ arguments.Add(e.Type);
+ }
+ Type/*!*/ result = new TypeProxy(tok, "result");
+ Contract.Assert(result != null);
+ AddConstraint(new Constraint(arguments, result));
+
+ List<Type>/*!*/ argumentsResult = new List<Type>();
+ foreach (Expr/*!*/ e in actualArgs) {
+ Contract.Assert(e != null);
+ argumentsResult.Add(e.Type);
+ }
+ argumentsResult.Add(result);
+
+ tpInstantiation = new MapTypeProxyParamInstantiation(this, argumentsResult);
+ return result;
+ }
+
+ //----------- Cloning ----------------------------------
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Clone(varMap);
+ } else {
+ MapTypeProxy p2 = new MapTypeProxy(tok, Name, Arity);
+ foreach (Constraint c in constraints)
+ p2.AddConstraint(c.Clone(varMap));
+ return p2; // the clone will have a name that ends with $mapproxy<n>$mapproxy<m> (hopefully)
+ }
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ Type p = ProxyFor;
+ if (p != null) {
+ p.Emit(stream, contextBindingStrength);
+ } else {
+ stream.Write("[");
+ string/*!*/ sep = "";
+ for (int i = 0; i < Arity; ++i) {
+ stream.Write(sep);
+ sep = ", ";
+ stream.Write("?");
+ }
+ stream.Write("]?");
+ }
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
+ //Contract.Requires(that != null);
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(cce.NonNullElements(result));
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.Unify(that, unifiableVariables, result);
+ }
+
+ // unify this with that, if possible
+ that = that.Expanded;
+ that = FollowProxy(that);
+
+ if (this.ReallyOccursIn(that))
+ return false;
+
+ TypeVariable tv = that as TypeVariable;
+
+ if (tv != null && unifiableVariables.Contains(tv))
+ return that.Unify(this, unifiableVariables, result);
+
+ if (object.ReferenceEquals(this, that)) {
+ return true;
+ } else if (that is MapType) {
+ MapType mapType = (MapType)that;
+ if (mapType.Arguments.Count == Arity) {
+ bool good = true;
+ foreach (Constraint c in constraints)
+ good &= c.Unify(mapType, unifiableVariables, result);
+ if (good) {
+ DefineProxy(mapType);
+ return true;
+ }
+ }
+ } else if (that is MapTypeProxy) {
+ MapTypeProxy mt = (MapTypeProxy)that;
+ if (mt.Arity == this.Arity) {
+ // we propagate the constraints of this proxy to the more specific one
+ foreach (Constraint c in constraints)
+ mt.AddConstraint(c);
+ DefineProxy(mt);
+ return true;
+ }
+ } else if (that is ConstrainedProxy) {
+ // only map-type proxies can be unified with this MapTypeProxy
+ return false;
+ } else if (that is TypeProxy) {
+ // define: that.ProxyFor := this;
+ return that.Unify(this, unifiableVariables, result);
+ }
+ return false;
+ }
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (this.ProxyFor == null) {
+ // check that the constraints are clean and do not contain any
+ // of the substituted variables (otherwise, we are in big trouble)
+ Contract.Assert(Contract.ForAll(constraints, c =>
+ Contract.ForAll(subst.Keys, var =>
+ Contract.ForAll(0, c.Arguments.Count, t => !c.Arguments[t].FreeVariables.Contains(var)) &&
+ !c.Result.FreeVariables.Contains(var))));
+ }
+ return base.Substitute(subst);
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsMap {
+ get {
+ return true;
+ }
+ }
+ public override MapType/*!*/ AsMap {
+ get {
+ Contract.Ensures(Contract.Result<MapType>() != null);
+
+ Type p = ProxyFor;
+ if (p != null) {
+ return p.AsMap;
+ } else {
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // what to do now?
+ }
+ }
+ }
+ public override int MapArity {
+ get {
+ return Arity;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitMapTypeProxy(this);
+ }
+ }
+
+ //=====================================================================
+
+ // Used to annotate types with type synoyms that were used in the
+ // original unresolved types. Such types should be considered as
+ // equivalent to ExpandedType, the annotations are only used to enable
+ // better pretty-printing
+ public class TypeSynonymAnnotation : Type {
+ public Type/*!*/ ExpandedType;
+
+ public readonly List<Type>/*!*/ Arguments;
+ // is set during resolution and determines whether the right number of arguments is given
+ public readonly TypeSynonymDecl/*!*/ Decl;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(ExpandedType != null);
+ Contract.Invariant(Arguments != null);
+ Contract.Invariant(Decl != null);
+ }
+
+
+ public TypeSynonymAnnotation(IToken/*!*/ token, TypeSynonymDecl/*!*/ decl, List<Type>/*!*/ arguments)
+ : base(token) {
+ Contract.Requires(token != null);
+ Contract.Requires(decl != null);
+ Contract.Requires(arguments != null);
+ Contract.Requires(arguments.Count == decl.TypeParameters.Count);
+ this.Decl = decl;
+ this.Arguments = arguments;
+
+ // build a substitution that can be applied to the definition of
+ // the type synonym
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst =
+ new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ for (int i = 0; i < arguments.Count; ++i)
+ subst.Add(decl.TypeParameters[i], arguments[i]);
+
+ ExpandedType = decl.Body.Substitute(subst);
+ }
+
+ private TypeSynonymAnnotation(IToken/*!*/ token, TypeSynonymDecl/*!*/ decl, List<Type>/*!*/ arguments,
+ Type/*!*/ expandedType)
+ : base(token) {
+ Contract.Requires(token != null);
+ Contract.Requires(decl != null);
+ Contract.Requires(arguments != null);
+ Contract.Requires(expandedType != null);
+
+ this.Decl = decl;
+ this.Arguments = arguments;
+ this.ExpandedType = expandedType;
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.Clone(varMap));
+ }
+ Type/*!*/ newExpandedType = ExpandedType.Clone(varMap);
+ Contract.Assert(newExpandedType != null);
+ return new TypeSynonymAnnotation(tok, Decl, newArgs, newExpandedType);
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.CloneUnresolved());
+ }
+ return new TypeSynonymAnnotation(tok, Decl, newArgs);
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ public override bool Equals(Type/*!*/ that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables) {
+ //Contract.Requires(that != null);
+ //Contract.Requires(thisBoundVariables != null);
+ //Contract.Requires(thatBoundVariables != null);
+ return ExpandedType.Equals(that, thisBoundVariables, thatBoundVariables);
+ }
+
+ // used to skip leading type annotations
+ internal override Type/*!*/ Expanded {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return ExpandedType.Expanded;
+ }
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
+ //Contract.Requires(that != null);
+ //Contract.Requires(unifiableVariables != null);
+ //Contract.Requires(cce.NonNullElements(result));
+ return ExpandedType.Unify(that, unifiableVariables, result);
+ }
+
+#if OLD_UNIFICATION
+ public override void Unify(Type! that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ IDictionary<TypeVariable!, Type!>! result) {
+ ExpandedType.Unify(that, unifiableVariables,
+ thisBoundVariables, thatBoundVariables, result);
+ }
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (subst.Count == 0)
+ return this;
+ List<Type> newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.Substitute(subst));
+ }
+ Type/*!*/ newExpandedType = ExpandedType.Substitute(subst);
+ Contract.Assert(newExpandedType != null);
+ return new TypeSynonymAnnotation(tok, Decl, newArgs, newExpandedType);
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ return ExpandedType.GetHashCode(boundVariables);
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+ CtorType.EmitCtorType(this.Decl.Name, Arguments, stream, contextBindingStrength);
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type> resolvedArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ resolvedArgs.Add(t.ResolveType(rc));
+ }
+ return new TypeSynonymAnnotation(tok, Decl, resolvedArgs);
+ }
+
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ Contract.Ensures(Contract.Result<List<TypeVariable>>() != null);
+
+ return ExpandedType.FreeVariables;
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeProxy>>()));
+ return ExpandedType.FreeProxies;
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsBasic {
+ get {
+ return ExpandedType.IsBasic;
+ }
+ }
+ public override bool IsInt {
+ get {
+ return ExpandedType.IsInt;
+ }
+ }
+ public override bool IsReal
+ {
+ get
+ {
+ return ExpandedType.IsReal;
+ }
+ }
+ public override bool IsFloat
+ {
+ get
+ {
+ return ExpandedType.IsFloat;
+ }
+ }
+ public override bool IsBool {
+ get {
+ return ExpandedType.IsBool;
+ }
+ }
+
+ public override bool IsVariable {
+ get {
+ return ExpandedType.IsVariable;
+ }
+ }
+ public override TypeVariable/*!*/ AsVariable {
+ get {
+ Contract.Ensures(Contract.Result<TypeVariable>() != null);
+ return ExpandedType.AsVariable;
+ }
+ }
+ public override bool IsCtor {
+ get {
+ return ExpandedType.IsCtor;
+ }
+ }
+ public override CtorType/*!*/ AsCtor {
+ get {
+ Contract.Ensures(Contract.Result<CtorType>() != null);
+ return ExpandedType.AsCtor;
+ }
+ }
+ public override bool IsMap {
+ get {
+ return ExpandedType.IsMap;
+ }
+ }
+ public override MapType/*!*/ AsMap {
+ get {
+ Contract.Ensures(Contract.Result<MapType>() != null);
+ return ExpandedType.AsMap;
+ }
+ }
+ public override bool IsUnresolved {
+ get {
+ return ExpandedType.IsUnresolved;
+ }
+ }
+ public override UnresolvedTypeIdentifier/*!*/ AsUnresolved {
+ get {
+ Contract.Ensures(Contract.Result<UnresolvedTypeIdentifier>() != null);
+
+ return ExpandedType.AsUnresolved;
+ }
+ }
+
+ public override bool IsBv {
+ get {
+ return ExpandedType.IsBv;
+ }
+ }
+ public override int BvBits {
+ get {
+ return ExpandedType.BvBits;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitTypeSynonymAnnotation(this);
+ }
+ }
+
+ //=====================================================================
+
+ public class CtorType : Type {
+ public readonly List<Type>/*!*/ Arguments;
+ // is set during resolution and determines whether the right number of arguments is given
+ public readonly TypeCtorDecl/*!*/ Decl;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Arguments != null);
+ Contract.Invariant(Decl != null);
+ }
+
+
+ public CtorType(IToken/*!*/ token, TypeCtorDecl/*!*/ decl, List<Type>/*!*/ arguments)
+ : base(token) {
+ Contract.Requires(token != null);
+ Contract.Requires(decl != null);
+ Contract.Requires(arguments != null);
+ Contract.Requires(arguments.Count == decl.Arity);
+ this.Decl = decl;
+ this.Arguments = arguments;
+ }
+
+ public bool IsDatatype() {
+ return QKeyValue.FindBoolAttribute(Decl.Attributes, "datatype");
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.Clone(varMap));
+ }
+ return new CtorType(tok, Decl, newArgs);
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.CloneUnresolved());
+ }
+ return new CtorType(tok, Decl, newArgs);
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ Type thatType = that as Type;
+ if (thatType == null)
+ return false;
+ thatType = TypeProxy.FollowProxy(thatType.Expanded);
+ // shortcut
+ CtorType thatCtorType = thatType as CtorType;
+ if (thatCtorType == null || !this.Decl.Equals(thatCtorType.Decl))
+ return false;
+ if (Arguments.Count == 0)
+ return true;
+ return base.Equals(thatType);
+ }
+
+ [Pure]
+ public override bool Equals(Type/*!*/ that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables) {
+ that = TypeProxy.FollowProxy(that.Expanded);
+ CtorType thatCtorType = that as CtorType;
+ if (thatCtorType == null || !this.Decl.Equals(thatCtorType.Decl))
+ return false;
+ for (int i = 0; i < Arguments.Count; ++i) {
+ if (!Arguments[i].Equals(thatCtorType.Arguments[i],
+ thisBoundVariables, thatBoundVariables))
+ return false;
+ }
+ return true;
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
+ that = that.Expanded;
+ if (that is TypeProxy || that is TypeVariable)
+ return that.Unify(this, unifiableVariables, result);
+
+ CtorType thatCtorType = that as CtorType;
+ if (thatCtorType == null || !thatCtorType.Decl.Equals(Decl)) {
+ return false;
+ } else {
+ bool good = true;
+ for (int i = 0; i < Arguments.Count; ++i)
+ good &= Arguments[i].Unify(thatCtorType.Arguments[i], unifiableVariables, result);
+ return good;
+ }
+ }
+
+#if OLD_UNIFICATION
+ public override void Unify(Type! that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ IDictionary<TypeVariable!, Type!>! result) {
+ that = that.Expanded;
+ if (that is TypeVariable) {
+ that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
+ return;
+ }
+
+ CtorType thatCtorType = that as CtorType;
+ if (thatCtorType == null || !thatCtorType.Decl.Equals(Decl))
+ throw UNIFICATION_FAILED;
+ for (int i = 0; i < Arguments.Length; ++i)
+ Arguments[i].Unify(thatCtorType.Arguments[i],
+ unifiableVariables,
+ thisBoundVariables, thatBoundVariables,
+ result);
+ }
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (subst.Count == 0)
+ return this;
+ List<Type> newArgs = new List<Type>();
+ lock (Arguments)
+ {
+ foreach (Type/*!*/ t in Arguments)
+ {
+ Contract.Assert(t != null);
+ newArgs.Add(t.Substitute(subst));
+ }
+ }
+ return new CtorType(tok, Decl, newArgs);
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ int res = 1637643879 * Decl.GetHashCode();
+ foreach (Type/*!*/ t in Arguments.ToArray()) {
+ Contract.Assert(t != null);
+ res = res * 3 + t.GetHashCode(boundVariables);
+ }
+ return res;
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+ EmitCtorType(this.Decl.Name, Arguments, stream, contextBindingStrength);
+ }
+
+ internal static void EmitCtorType(string name, List<Type> args, TokenTextWriter stream, int contextBindingStrength) {
+ Contract.Requires(stream != null);
+ Contract.Requires(args != null);
+ Contract.Requires(name != null);
+ int opBindingStrength = args.Count > 0 ? 0 : 2;
+ if (opBindingStrength < contextBindingStrength)
+ stream.Write("(");
+
+ stream.Write("{0}", TokenTextWriter.SanitizeIdentifier(name));
+ int i = args.Count;
+ foreach (Type/*!*/ t in args) {
+ Contract.Assert(t != null);
+ stream.Write(" ");
+ // use a lower binding strength for the last argument
+ // to allow map-types without parentheses
+ t.Emit(stream, i == 1 ? 1 : 2);
+ i = i - 1;
+ }
+
+ if (opBindingStrength < contextBindingStrength)
+ stream.Write(")");
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<Type> resolvedArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ resolvedArgs.Add(t.ResolveType(rc));
+ }
+ return new CtorType(tok, Decl, resolvedArgs);
+ }
+
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ List<TypeVariable>/*!*/ res = new List<TypeVariable>();
+ foreach (Type/*!*/ t in Arguments.ToArray()) {
+ Contract.Assert(t != null);
+ res.AppendWithoutDups(t.FreeVariables);
+ }
+ return res;
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ List<TypeProxy/*!*/>/*!*/ res = new List<TypeProxy/*!*/>();
+ foreach (Type/*!*/ t in Arguments.ToArray()) {
+ Contract.Assert(t != null);
+ AppendWithoutDups(res, t.FreeProxies);
+ }
+ return res;
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsCtor {
+ get {
+ return true;
+ }
+ }
+ public override CtorType/*!*/ AsCtor {
+ get {
+ return this;
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitCtorType(this);
+ }
+ }
+
+ //=====================================================================
+
+ public class MapType : Type {
+ // an invariant is that each of the type parameters has to occur as
+ // free variable in at least one of the arguments
+ public readonly List<TypeVariable>/*!*/ TypeParameters;
+ public readonly List<Type>/*!*/ Arguments;
+ public Type/*!*/ Result;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(TypeParameters != null);
+ Contract.Invariant(Arguments != null);
+ Contract.Invariant(Result != null);
+ }
+
+
+ public MapType(IToken/*!*/ token, List<TypeVariable>/*!*/ typeParameters, List<Type>/*!*/ arguments, Type/*!*/ result)
+ : base(token) {
+ Contract.Requires(token != null);
+ Contract.Requires(typeParameters != null);
+ Contract.Requires(arguments != null);
+ Contract.Requires(result != null);
+
+ this.TypeParameters = typeParameters;
+ this.Result = result;
+ this.Arguments = arguments;
+ }
+
+ //----------- Cloning ----------------------------------
+ // We implement our own clone-method, because bound type variables
+ // have to be created in the right way. It is /not/ ok to just clone
+ // everything recursively
+
+ public override Type Clone(IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ varMap) {
+ //Contract.Requires(cce.NonNullElements(varMap));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ IDictionary<TypeVariable/*!*/, TypeVariable/*!*/>/*!*/ newVarMap =
+ new Dictionary<TypeVariable/*!*/, TypeVariable/*!*/>();
+ foreach (KeyValuePair<TypeVariable/*!*/, TypeVariable/*!*/> p in varMap) {
+ Contract.Assert(cce.NonNullElements(p));
+ if (!TypeParameters.Contains(p.Key))
+ newVarMap.Add(p);
+ }
+
+ List<TypeVariable>/*!*/ newTypeParams = new List<TypeVariable>();
+ foreach (TypeVariable/*!*/ var in TypeParameters) {
+ Contract.Assert(var != null);
+ TypeVariable/*!*/ newVar = new TypeVariable(var.tok, var.Name);
+ Contract.Assert(newVar != null);
+ newVarMap.Add(var, newVar);
+ newTypeParams.Add(newVar);
+ }
+
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.Clone(newVarMap));
+ }
+ Type/*!*/ newResult = Result.Clone(newVarMap);
+ Contract.Assert(newResult != null);
+
+ return new MapType(this.tok, newTypeParams, newArgs, newResult);
+ }
+
+ public override Type CloneUnresolved() {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ List<TypeVariable>/*!*/ newTypeParams = new List<TypeVariable>();
+ foreach (TypeVariable/*!*/ var in TypeParameters) {
+ Contract.Assert(var != null);
+ TypeVariable/*!*/ newVar = new TypeVariable(var.tok, var.Name);
+ Contract.Assert(newVar != null);
+ newTypeParams.Add(newVar);
+ }
+
+ List<Type>/*!*/ newArgs = new List<Type>();
+ foreach (Type/*!*/ t in Arguments) {
+ Contract.Assert(t != null);
+ newArgs.Add(t.CloneUnresolved());
+ }
+ Type/*!*/ newResult = Result.CloneUnresolved();
+ Contract.Assert(newResult != null);
+
+ return new MapType(this.tok, newTypeParams, newArgs, newResult);
+ }
+
+ //----------- Equality ----------------------------------
+
+ [Pure]
+ public override bool Equals(Type/*!*/ that,
+ List<TypeVariable>/*!*/ thisBoundVariables,
+ List<TypeVariable>/*!*/ thatBoundVariables)
+ {
+ that = TypeProxy.FollowProxy(that.Expanded);
+ MapType thatMapType = that as MapType;
+ if (thatMapType == null ||
+ this.TypeParameters.Count != thatMapType.TypeParameters.Count ||
+ this.Arguments.Count != thatMapType.Arguments.Count)
+ return false;
+
+ thisBoundVariables = thisBoundVariables.ToList();
+ foreach (TypeVariable/*!*/ var in this.TypeParameters)
+ {
+ Contract.Assert(var != null);
+ thisBoundVariables.Add(var);
+ }
+ thatBoundVariables = thatBoundVariables.ToList();
+ foreach (TypeVariable/*!*/ var in thatMapType.TypeParameters)
+ {
+ Contract.Assert(var != null);
+ thatBoundVariables.Add(var);
+ }
+
+ for (int i = 0; i < Arguments.Count; ++i)
+ {
+ if (!Arguments[i].Equals(thatMapType.Arguments[i],
+ thisBoundVariables, thatBoundVariables))
+ return false;
+ }
+
+ return this.Result.Equals(thatMapType.Result,
+ thisBoundVariables, thatBoundVariables);
+ }
+
+ //----------- Unification of types -----------
+
+ public override bool Unify(Type/*!*/ that,
+ List<TypeVariable>/*!*/ unifiableVariables,
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ result) {
+ that = that.Expanded;
+ if (that is TypeProxy || that is TypeVariable)
+ return that.Unify(this, unifiableVariables, result);
+
+ MapType thatMapType = that as MapType;
+ if (thatMapType == null ||
+ this.TypeParameters.Count != thatMapType.TypeParameters.Count ||
+ this.Arguments.Count != thatMapType.Arguments.Count)
+ return false;
+
+ // treat the bound variables of the two map types as equal...
+ Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst0 =
+ new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ Dictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst1 =
+ new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ List<TypeVariable> freshies = new List<TypeVariable>();
+ for (int i = 0; i < this.TypeParameters.Count; i++) {
+ TypeVariable tp0 = this.TypeParameters[i];
+ TypeVariable tp1 = thatMapType.TypeParameters[i];
+ TypeVariable freshVar = new TypeVariable(tp0.tok, tp0.Name);
+ freshies.Add(freshVar);
+ subst0.Add(tp0, freshVar);
+ subst1.Add(tp1, freshVar);
+ }
+ // ... and then unify the domain and range types
+ bool good = true;
+ for (int i = 0; i < this.Arguments.Count; i++) {
+ Type t0 = this.Arguments[i].Substitute(subst0);
+ Type t1 = thatMapType.Arguments[i].Substitute(subst1);
+ good &= t0.Unify(t1, unifiableVariables, result);
+ }
+ Type r0 = this.Result.Substitute(subst0);
+ Type r1 = thatMapType.Result.Substitute(subst1);
+ good &= r0.Unify(r1, unifiableVariables, result);
+
+ // Finally, check that none of the bound variables has escaped
+ if (good && freshies.Count != 0) {
+ // This is done by looking for occurrences of the fresh variables in the
+ // non-substituted types ...
+ List<TypeVariable> freeVars = this.FreeVariables;
+ foreach (TypeVariable fr in freshies)
+ if (freeVars.Contains(fr)) {
+ return false;
+ } // fresh variable escaped
+ freeVars = thatMapType.FreeVariables;
+ foreach (TypeVariable fr in freshies)
+ if (freeVars.Contains(fr)) {
+ return false;
+ } // fresh variable escaped
+
+ // ... and in the resulting unifier of type variables
+ foreach (KeyValuePair<TypeVariable/*!*/, Type/*!*/> pair in result) {
+ Contract.Assert(cce.NonNullElements(pair));
+ freeVars = pair.Value.FreeVariables;
+ foreach (TypeVariable fr in freshies)
+ if (freeVars.Contains(fr)) {
+ return false;
+ } // fresh variable escaped
+ }
+ }
+
+ return good;
+ }
+
+#if OLD_UNIFICATION
+ public override void Unify(Type! that,
+ List<TypeVariable>! unifiableVariables,
+ List<TypeVariable>! thisBoundVariables,
+ List<TypeVariable>! thatBoundVariables,
+ IDictionary<TypeVariable!, Type!>! result) {
+ that = that.Expanded;
+ if (that is TypeVariable) {
+ that.Unify(this, unifiableVariables, thatBoundVariables, thisBoundVariables, result);
+ return;
+ }
+
+ MapType thatMapType = that as MapType;
+ if (thatMapType == null ||
+ this.TypeParameters.Length != thatMapType.TypeParameters.Length ||
+ this.Arguments.Length != thatMapType.Arguments.Length)
+ throw UNIFICATION_FAILED;
+
+ // ensure that no collisions occur
+ if (this.collisionsPossible(result)) {
+ ((MapType)this.Clone())
+ .Unify(that, unifiableVariables,
+ thisBoundVariables, thatBoundVariables, result);
+ return;
+ }
+ if (thatMapType.collisionsPossible(result))
+ thatMapType = (MapType)that.Clone();
+
+ foreach(TypeVariable/*!*/ var in this.TypeParameters){
+Contract.Assert(var != null);
+ thisBoundVariables.Add(var);}
+ foreach(TypeVariable/*!*/ var in thatMapType.TypeParameters){
+Contract.Assert(var != null);
+ thatBoundVariables.Add(var);}
+
+ try {
+
+ for (int i = 0; i < Arguments.Length; ++i)
+ Arguments[i].Unify(thatMapType.Arguments[i],
+ unifiableVariables,
+ thisBoundVariables, thatBoundVariables,
+ result);
+ Result.Unify(thatMapType.Result,
+ unifiableVariables,
+ thisBoundVariables, thatBoundVariables,
+ result);
+
+ } finally {
+ // make sure that the bound variables are removed again
+ for (int i = 0; i < this.TypeParameters.Length; ++i) {
+ thisBoundVariables.Remove();
+ thatBoundVariables.Remove();
+ }
+ }
+ }
+#endif
+
+ //----------- Substitution of free variables with types not containing bound variables -----------------
+
+ [Pure]
+ private bool collisionsPossible(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(subst));
+ // PR: could be written more efficiently
+ return TypeParameters.Any(param => subst.ContainsKey(param) || subst.Values.Any(val => val.FreeVariables.Contains(param)));
+ }
+
+ public override Type Substitute(IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst) {
+ //Contract.Requires(cce.NonNullElements(subst));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (subst.Count == 0)
+ return this;
+
+ // there are two cases in which we have to be careful:
+ // * a variable to be substituted is shadowed by a variable binder
+ // * a substituted term contains variables that are bound in the
+ // type (variable capture)
+ //
+ // in both cases, we first clone the type to ensure that bound
+ // variables are fresh
+
+ if (collisionsPossible(subst)) {
+ MapType/*!*/ newType = (MapType)this.Clone();
+ Contract.Assert(newType != null);
+ Contract.Assert(newType.Equals(this) && !newType.collisionsPossible(subst));
+ return newType.Substitute(subst);
+ }
+
+ List<Type> newArgs = new List<Type>();
+ lock (Arguments)
+ {
+ foreach (Type/*!*/ t in Arguments)
+ {
+ Contract.Assert(t != null);
+ newArgs.Add(t.Substitute(subst));
+ }
+ }
+ Type/*!*/ newResult = Result.Substitute(subst);
+ Contract.Assert(newResult != null);
+
+ return new MapType(tok, TypeParameters, newArgs, newResult);
+ }
+
+ //----------- Hashcodes ----------------------------------
+
+ [Pure]
+ public override int GetHashCode(List<TypeVariable> boundVariables) {
+ //Contract.Requires(boundVariables != null);
+ int res = 7643761 * TypeParameters.Count + 65121 * Arguments.Count;
+
+ boundVariables = boundVariables.ToList();
+ foreach (TypeVariable/*!*/ var in this.TypeParameters) {
+ Contract.Assert(var != null);
+ boundVariables.Add(var);
+ }
+
+ foreach (Type/*!*/ t in Arguments.ToArray()) {
+ Contract.Assert(t != null);
+ res = res * 5 + t.GetHashCode(boundVariables);
+ }
+ res = res * 7 + Result.GetHashCode(boundVariables);
+
+ return res;
+ }
+
+ //----------- Linearisation ----------------------------------
+
+ public override void Emit(TokenTextWriter stream, int contextBindingStrength) {
+ //Contract.Requires(stream != null);
+ stream.SetToken(this);
+
+ const int opBindingStrength = 1;
+ if (opBindingStrength < contextBindingStrength)
+ stream.Write("(");
+
+ EmitOptionalTypeParams(stream, TypeParameters);
+
+ stream.Write("[");
+ Arguments.Emit(stream, ","); // default binding strength of 0 is ok
+ stream.Write("]");
+ Result.Emit(stream); // default binding strength of 0 is ok
+
+ if (opBindingStrength < contextBindingStrength)
+ stream.Write(")");
+ }
+
+ //----------- Resolution ----------------------------------
+
+ public override Type ResolveType(ResolutionContext rc) {
+ //Contract.Requires(rc != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ int previousState = rc.TypeBinderState;
+ try {
+ foreach (TypeVariable/*!*/ v in TypeParameters) {
+ Contract.Assert(v != null);
+ rc.AddTypeBinder(v);
+ }
+
+ List<Type> resolvedArgs = new List<Type>();
+ foreach (Type/*!*/ ty in Arguments) {
+ Contract.Assert(ty != null);
+ resolvedArgs.Add(ty.ResolveType(rc));
+ }
+
+ Type resolvedResult = Result.ResolveType(rc);
+
+ CheckBoundVariableOccurrences(TypeParameters,
+ resolvedArgs, new List<Type> { resolvedResult },
+ this.tok, "map arguments",
+ rc);
+
+ // sort the type parameters so that they are bound in the order of occurrence
+ List<TypeVariable>/*!*/ sortedTypeParams = SortTypeParams(TypeParameters, resolvedArgs, resolvedResult);
+ Contract.Assert(sortedTypeParams != null);
+ return new MapType(tok, sortedTypeParams, resolvedArgs, resolvedResult);
+ } finally {
+ rc.TypeBinderState = previousState;
+ }
+ }
+
+ public override List<TypeVariable>/*!*/ FreeVariables {
+ get {
+ List<TypeVariable>/*!*/ res = FreeVariablesIn(Arguments.ToList());
+ Contract.Assert(res != null);
+ res.AppendWithoutDups(Result.FreeVariables);
+ foreach (TypeVariable/*!*/ v in TypeParameters.ToArray()) {
+ Contract.Assert(v != null);
+ res.Remove(v);
+ }
+ return res;
+ }
+ }
+
+ public override List<TypeProxy/*!*/>/*!*/ FreeProxies {
+ get {
+ List<TypeProxy/*!*/>/*!*/ res = new List<TypeProxy/*!*//*!*/>();
+ foreach (Type/*!*/ t in Arguments.ToArray()) {
+ Contract.Assert(t != null);
+ AppendWithoutDups(res, t.FreeProxies);
+ }
+ AppendWithoutDups(res, Result.FreeProxies);
+ return res;
+ }
+ }
+
+ //----------- Getters/Issers ----------------------------------
+
+ public override bool IsMap {
+ get {
+ return true;
+ }
+ }
+ public override MapType/*!*/ AsMap {
+ get {
+ return this;
+ }
+ }
+ public override int MapArity {
+ get {
+ return Arguments.Count;
+ }
+ }
+
+ //------------ Match formal argument types of the map
+ //------------ on concrete types, substitute the result into the
+ //------------ result type. Null is returned if so many type checking
+ //------------ errors occur that the situation is hopeless
+
+ public Type CheckArgumentTypes(List<Expr>/*!*/ actualArgs,
+ out TypeParamInstantiation/*!*/ tpInstantiation,
+ IToken/*!*/ typeCheckingSubject,
+ string/*!*/ opName,
+ TypecheckingContext/*!*/ tc) {
+ Contract.Requires(actualArgs != null);
+ Contract.Requires(typeCheckingSubject != null);
+
+ Contract.Requires(opName != null);
+ Contract.Requires(tc != null);
+Contract.Ensures(Contract.ValueAtReturn(out tpInstantiation) != null);
+ List<Type/*!*/>/*!*/ actualTypeParams;
+ List<Type> actualResult =
+ Type.CheckArgumentTypes(TypeParameters, out actualTypeParams, Arguments, actualArgs,
+ new List<Type> { Result }, null, typeCheckingSubject, opName, tc);
+ if (actualResult == null) {
+ tpInstantiation = SimpleTypeParamInstantiation.EMPTY;
+ return null;
+ } else {
+ Contract.Assert(actualResult.Count == 1);
+ tpInstantiation = SimpleTypeParamInstantiation.From(TypeParameters, actualTypeParams);
+ return actualResult[0];
+ }
+ }
+
+ public override Absy StdDispatch(StandardVisitor visitor) {
+ //Contract.Requires(visitor != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ return visitor.VisitMapType(this);
+ }
+ }
+
+ //---------------------------------------------------------------------
+
+ public enum SimpleType {
+ Int,
+ Real,
+ Bool
+ };
+
+
+ //=====================================================================
+
+ // Interface for representing the instantiations of type parameters of
+ // polymorphic functions or maps. We introduce an own interface for this
+ // instead of using a simple list or dictionary, because in some cases
+ // (due to the type proxies for map types) the actual number and instantiation
+ // of type parameters can only be determined very late.
+ [ContractClass(typeof(TypeParamInstantiationContracts))]
+ public interface TypeParamInstantiation {
+ // return what formal type parameters there are
+ List<TypeVariable/*!*/>/*!*/ FormalTypeParams {
+ get;
+ }
+ // given a formal type parameter, return the actual instantiation
+ Type/*!*/ this[TypeVariable/*!*/ var] {
+ get;
+ }
+ }
+ [ContractClassFor(typeof(TypeParamInstantiation))]
+ public abstract class TypeParamInstantiationContracts : TypeParamInstantiation {
+ #region TypeParamInstantiation Members
+
+ public List<TypeVariable> FormalTypeParams {
+
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeVariable>>()));
+ throw new NotImplementedException();
+ }
+ }
+
+ public Type this[TypeVariable var] {
+ get {
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+
+ #endregion
+ }
+
+
+ public class SimpleTypeParamInstantiation : TypeParamInstantiation {
+ private readonly List<TypeVariable/*!*/>/*!*/ TypeParams;
+ [ContractInvariantMethod]
+ void TypeParamsInvariantMethod() {
+ Contract.Invariant(cce.NonNullElements(TypeParams));
+ }
+ private readonly IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ Instantiations;
+ [ContractInvariantMethod]
+ void InstantiationsInvariantMethod() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(Instantiations));
+ }
+
+ public SimpleTypeParamInstantiation(List<TypeVariable/*!*/>/*!*/ typeParams,
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ instantiations) {
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Requires(cce.NonNullDictionaryAndValues(instantiations));
+ this.TypeParams = typeParams;
+ this.Instantiations = instantiations;
+ }
+
+ public static TypeParamInstantiation/*!*/ From(List<TypeVariable> typeParams, List<Type/*!*/>/*!*/ actualTypeParams) {
+ Contract.Requires(cce.NonNullElements(actualTypeParams));
+ Contract.Requires(typeParams != null);
+ Contract.Requires(typeParams.Count == actualTypeParams.Count);
+ Contract.Ensures(Contract.Result<TypeParamInstantiation>() != null);
+
+ if (typeParams.Count == 0)
+ return EMPTY;
+
+ List<TypeVariable/*!*/>/*!*/ typeParamList = new List<TypeVariable/*!*/>();
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ for (int i = 0; i < typeParams.Count; ++i) {
+ typeParamList.Add(typeParams[i]);
+ dict.Add(typeParams[i], actualTypeParams[i]);
+ }
+ return new SimpleTypeParamInstantiation(typeParamList, dict);
+ }
+
+ public static readonly TypeParamInstantiation EMPTY =
+ new SimpleTypeParamInstantiation(new List<TypeVariable/*!*/>(),
+ new Dictionary<TypeVariable/*!*/, Type/*!*/>());
+
+ // return what formal type parameters there are
+ public List<TypeVariable/*!*/>/*!*/ FormalTypeParams {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeVariable>>()));
+ return TypeParams;
+ }
+ }
+ // given a formal type parameter, return the actual instantiation
+ public Type/*!*/ this[TypeVariable/*!*/ var] {
+ get {
+ return Instantiations[var];
+ }
+ }
+ }
+
+ // Implementation of TypeParamInstantiation that refers to the current
+ // value of a MapTypeProxy. This means that the values return by the
+ // methods of this implementation can change in case the MapTypeProxy
+ // receives further unifications.
+ class MapTypeProxyParamInstantiation : TypeParamInstantiation {
+ private readonly MapTypeProxy/*!*/ Proxy;
+
+ // the argument and result type of this particular usage of the map
+ // type. these are necessary to derive the values of the type parameters
+ private readonly List<Type>/*!*/ ArgumentsResult;
+
+ // field that is initialised once all necessary information is available
+ // (the MapTypeProxy is instantiated to an actual type) and the instantiation
+ // of a type parameter is queried
+ private IDictionary<TypeVariable/*!*/, Type/*!*/> Instantiations = null;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Proxy != null);
+ Contract.Invariant(ArgumentsResult != null);
+ Contract.Invariant(Instantiations == null || cce.NonNullDictionaryAndValues(Instantiations));
+ }
+
+
+ public MapTypeProxyParamInstantiation(MapTypeProxy/*!*/ proxy,
+ List<Type>/*!*/ argumentsResult) {
+ Contract.Requires(proxy != null);
+ Contract.Requires(argumentsResult != null);
+ this.Proxy = proxy;
+ this.ArgumentsResult = argumentsResult;
+ }
+
+ // return what formal type parameters there are
+ public List<TypeVariable/*!*/>/*!*/ FormalTypeParams {
+ get {
+ MapType realType = Proxy.ProxyFor as MapType;
+ if (realType == null)
+ // no instantiation of the map type is known, which means
+ // that the map type is assumed to be monomorphic
+ return new List<TypeVariable/*!*/>();
+ else
+ return realType.TypeParameters.ToList();
+ }
+ }
+
+ // given a formal type parameter, return the actual instantiation
+ public Type/*!*/ this[TypeVariable/*!*/ var] {
+ get {
+ // then there has to be an instantiation that is a polymorphic map type
+ if (Instantiations == null) {
+ MapType realType = Proxy.ProxyFor as MapType;
+ Contract.Assert(realType != null);
+ List<Type>/*!*/ formalArgs = new List<Type>();
+ foreach (Type/*!*/ t in realType.Arguments) {
+ Contract.Assert(t != null);
+ formalArgs.Add(t);
+ }
+ formalArgs.Add(realType.Result);
+ Instantiations =
+ Type.InferTypeParameters(realType.TypeParameters, formalArgs, ArgumentsResult);
+ }
+ return Instantiations[var];
+ }
+ }
+ }
} \ No newline at end of file
diff --git a/Source/Core/AlphaEquality.cs b/Source/Core/AlphaEquality.cs
index 1d4a1d95..986cc4bd 100644
--- a/Source/Core/AlphaEquality.cs
+++ b/Source/Core/AlphaEquality.cs
@@ -1,162 +1,162 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System.ComponentModel;
-
-namespace Microsoft.Boogie
-{
-
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
-
- public class AlphaEquality : IEqualityComparer<Expr>
- {
- private readonly DeBruijnRenamer deBruijn = new DeBruijnRenamer();
-
- bool IEqualityComparer<Expr>.Equals(Expr x, Expr y) {
- var nx = deBruijn.Rename(x);
- var ny = deBruijn.Rename(y);
- return BinderExpr.EqualWithAttributesAndTriggers(nx, ny);
- }
-
- int IEqualityComparer<Expr>.GetHashCode(Expr obj) {
- return 0;
- // Best we can do because GetHashCode for Expression don't respect its equality.
- // When it does, we can instead use:
- // return deBruijn.Rename(obj).GetHashCode();
- }
-
- // Renames expressions into deBruijn indicies, such as
- // (lambda x : int :: x + a)
- // into
- // (lambda bv#0 : int :: bv#0 + fv#0)
- // It does not handle type variables yet, but it could be added.
- //
- // This class could be made public, but it is not since the Rename method
- // could then leak FreeVariables out of here.
- private class DeBruijnRenamer : Duplicator
- {
-
- // Maps from index positions and types to new variables
- private readonly TypeDict<BoundVariable> boundVars =
- new TypeDict<BoundVariable>("bv", ti => new BoundVariable(Token.NoToken, ti));
-
- private readonly TypeDict<FreeVariable> freeVars =
- new TypeDict<FreeVariable>("fv", ti => new FreeVariable(ti));
-
- // These three variables are reset at the beginning of every renaming
- private int boundVarCount, freeVarCount;
- private Dictionary<Variable, FreeVariable> freeVarMap;
-
- // Cached, previous results
- private readonly Dictionary<Expr, Expr> cache = new Dictionary<Expr, Expr>();
-
- public Expr Rename(Expr e) {
- Expr ne;
- if (!cache.TryGetValue(e, out ne)) {
- boundVarCount = 0;
- freeVarCount = 0;
- freeVarMap = new Dictionary<Variable, FreeVariable>();
-
- ne = VisitExpr(e);
- cache[e] = ne;
-#if DEBUG_ALPHA_RENAMING
- var wr = new TokenTextWriter("<console>", Console.Out, true);
- Console.Write("nm( ");
- e.Emit(wr);
- Console.WriteLine(" )");
- Console.Write(" = ");
- ne.Emit(wr);
- Console.WriteLine("");
- Console.WriteLine("h = " + ne.GetHashCode());
-#endif
- }
- return ne;
- }
-
- public override BinderExpr VisitBinderExpr(BinderExpr node) {
- var subst = new Dictionary<Variable, Expr>();
- var newBound = new List<Variable>();
- foreach (var bv in node.Dummies) {
- var bvNew = boundVars[boundVarCount++, bv.TypedIdent.Type];
- newBound.Add(bvNew);
- subst[bv] = new IdentifierExpr(Token.NoToken, bvNew);
- }
- node.Dummies = this.VisitVariableSeq(newBound);
- node.Body = this.VisitExpr(Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), node.Body));
- return node;
- }
-
- public override Variable VisitVariable(Variable node) {
- FreeVariable fv;
- var bv = node as BoundVariable;
- if (boundVars.ContainsValue(bv)) {
- return node;
- } else if (freeVarMap.TryGetValue(node, out fv)) {
- return fv;
- } else {
- return freeVarMap[node] = freeVars[freeVarCount++, node.TypedIdent.Type];
- }
- }
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node) {
- var ie = (IdentifierExpr) base.VisitIdentifierExpr(node);
- // Need to fix up the name, since IdentifierExpr's equality also checks the name
- ie.Name = ie.Decl.TypedIdent.Name;
- return ie;
- }
-
- private class TypeDict<A>
- {
- private readonly Dictionary<Tuple<int, Type>, A> vars = new Dictionary<Tuple<int, Type>, A>();
-
- private readonly string Prefix; // either "bv" or "fv"
- private readonly Func<TypedIdent, A> Mk; // either new BoundVar or new FreeVar
-
- public TypeDict(string prefix, Func<TypedIdent, A> mk) {
- Prefix = prefix;
- Mk = mk;
- }
-
- // For debugging purposes, we create unique names when types differ, but the index are the same.
- private int created = 0;
-
- // Make sure that this index and this type is always mapped to the same variable
- public A this[int i, Type t] {
- get {
- A v;
- if (!vars.TryGetValue(Tuple.Create(i, t), out v)) {
- v = Mk(new TypedIdent(Token.NoToken, Prefix + i + "#" + created++, t));
- vars[Tuple.Create(i, t)] = v;
- }
- return v;
- }
- }
-
- public bool ContainsValue(A a) {
- return vars.ContainsValue(a);
- }
- }
-
- private class FreeVariable : Variable
- {
- public FreeVariable(TypedIdent ti) : base(Token.NoToken, ti) {}
-
- public override bool IsMutable {
- get { throw new cce.UnreachableException(); }
- }
-
- public override void Register(ResolutionContext rc) {
- throw new cce.UnreachableException();
- }
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System.ComponentModel;
+
+namespace Microsoft.Boogie
+{
+
+ using System;
+ using System.IO;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics;
+ using System.Diagnostics.Contracts;
+
+ public class AlphaEquality : IEqualityComparer<Expr>
+ {
+ private readonly DeBruijnRenamer deBruijn = new DeBruijnRenamer();
+
+ bool IEqualityComparer<Expr>.Equals(Expr x, Expr y) {
+ var nx = deBruijn.Rename(x);
+ var ny = deBruijn.Rename(y);
+ return BinderExpr.EqualWithAttributesAndTriggers(nx, ny);
+ }
+
+ int IEqualityComparer<Expr>.GetHashCode(Expr obj) {
+ return 0;
+ // Best we can do because GetHashCode for Expression don't respect its equality.
+ // When it does, we can instead use:
+ // return deBruijn.Rename(obj).GetHashCode();
+ }
+
+ // Renames expressions into deBruijn indicies, such as
+ // (lambda x : int :: x + a)
+ // into
+ // (lambda bv#0 : int :: bv#0 + fv#0)
+ // It does not handle type variables yet, but it could be added.
+ //
+ // This class could be made public, but it is not since the Rename method
+ // could then leak FreeVariables out of here.
+ private class DeBruijnRenamer : Duplicator
+ {
+
+ // Maps from index positions and types to new variables
+ private readonly TypeDict<BoundVariable> boundVars =
+ new TypeDict<BoundVariable>("bv", ti => new BoundVariable(Token.NoToken, ti));
+
+ private readonly TypeDict<FreeVariable> freeVars =
+ new TypeDict<FreeVariable>("fv", ti => new FreeVariable(ti));
+
+ // These three variables are reset at the beginning of every renaming
+ private int boundVarCount, freeVarCount;
+ private Dictionary<Variable, FreeVariable> freeVarMap;
+
+ // Cached, previous results
+ private readonly Dictionary<Expr, Expr> cache = new Dictionary<Expr, Expr>();
+
+ public Expr Rename(Expr e) {
+ Expr ne;
+ if (!cache.TryGetValue(e, out ne)) {
+ boundVarCount = 0;
+ freeVarCount = 0;
+ freeVarMap = new Dictionary<Variable, FreeVariable>();
+
+ ne = VisitExpr(e);
+ cache[e] = ne;
+#if DEBUG_ALPHA_RENAMING
+ var wr = new TokenTextWriter("<console>", Console.Out, true);
+ Console.Write("nm( ");
+ e.Emit(wr);
+ Console.WriteLine(" )");
+ Console.Write(" = ");
+ ne.Emit(wr);
+ Console.WriteLine("");
+ Console.WriteLine("h = " + ne.GetHashCode());
+#endif
+ }
+ return ne;
+ }
+
+ public override BinderExpr VisitBinderExpr(BinderExpr node) {
+ var subst = new Dictionary<Variable, Expr>();
+ var newBound = new List<Variable>();
+ foreach (var bv in node.Dummies) {
+ var bvNew = boundVars[boundVarCount++, bv.TypedIdent.Type];
+ newBound.Add(bvNew);
+ subst[bv] = new IdentifierExpr(Token.NoToken, bvNew);
+ }
+ node.Dummies = this.VisitVariableSeq(newBound);
+ node.Body = this.VisitExpr(Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), node.Body));
+ return node;
+ }
+
+ public override Variable VisitVariable(Variable node) {
+ FreeVariable fv;
+ var bv = node as BoundVariable;
+ if (boundVars.ContainsValue(bv)) {
+ return node;
+ } else if (freeVarMap.TryGetValue(node, out fv)) {
+ return fv;
+ } else {
+ return freeVarMap[node] = freeVars[freeVarCount++, node.TypedIdent.Type];
+ }
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node) {
+ var ie = (IdentifierExpr) base.VisitIdentifierExpr(node);
+ // Need to fix up the name, since IdentifierExpr's equality also checks the name
+ ie.Name = ie.Decl.TypedIdent.Name;
+ return ie;
+ }
+
+ private class TypeDict<A>
+ {
+ private readonly Dictionary<Tuple<int, Type>, A> vars = new Dictionary<Tuple<int, Type>, A>();
+
+ private readonly string Prefix; // either "bv" or "fv"
+ private readonly Func<TypedIdent, A> Mk; // either new BoundVar or new FreeVar
+
+ public TypeDict(string prefix, Func<TypedIdent, A> mk) {
+ Prefix = prefix;
+ Mk = mk;
+ }
+
+ // For debugging purposes, we create unique names when types differ, but the index are the same.
+ private int created = 0;
+
+ // Make sure that this index and this type is always mapped to the same variable
+ public A this[int i, Type t] {
+ get {
+ A v;
+ if (!vars.TryGetValue(Tuple.Create(i, t), out v)) {
+ v = Mk(new TypedIdent(Token.NoToken, Prefix + i + "#" + created++, t));
+ vars[Tuple.Create(i, t)] = v;
+ }
+ return v;
+ }
+ }
+
+ public bool ContainsValue(A a) {
+ return vars.ContainsValue(a);
+ }
+ }
+
+ private class FreeVariable : Variable
+ {
+ public FreeVariable(TypedIdent ti) : base(Token.NoToken, ti) {}
+
+ public override bool IsMutable {
+ get { throw new cce.UnreachableException(); }
+ }
+
+ public override void Register(ResolutionContext rc) {
+ throw new cce.UnreachableException();
+ }
+ }
+ }
+ }
+}
diff --git a/Source/Core/BoogiePL.atg b/Source/Core/BoogiePL.atg
index 644a5d3d..091ceeb0 100644
--- a/Source/Core/BoogiePL.atg
+++ b/Source/Core/BoogiePL.atg
@@ -1,1511 +1,1511 @@
-
-/*---------------------------------------------------------------------------
-// BoogiePL -
-//--------------------------------------------------------------------------*/
-
-/*using System;*/
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using Microsoft.Boogie;
-using Microsoft.Basetypes;
-using Bpl = Microsoft.Boogie;
-
-
-COMPILER BoogiePL
-
-/*--------------------------------------------------------------------------*/
-
-readonly Program/*!*/ Pgm;
-
-readonly Expr/*!*/ dummyExpr;
-readonly Cmd/*!*/ dummyCmd;
-readonly Block/*!*/ dummyBlock;
-readonly Bpl.Type/*!*/ dummyType;
-readonly List<Expr>/*!*/ dummyExprSeq;
-readonly TransferCmd/*!*/ dummyTransferCmd;
-readonly StructuredCmd/*!*/ dummyStructuredCmd;
-
-///<summary>
-///Returns the number of parsing errors encountered. If 0, "program" returns as
-///the parsed program.
-///</summary>
-public static int Parse (string/*!*/ filename, /*maybe null*/ List<string/*!*/> defines, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
- Contract.Requires(filename != null);
- Contract.Requires(cce.NonNullElements(defines,true));
-
- if (defines == null) {
- defines = new List<string/*!*/>();
- }
-
- if (filename == "stdin.bpl") {
- var s = ParserHelper.Fill(Console.In, defines);
- return Parse(s, filename, out program, useBaseName);
- } else {
- FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
- var s = ParserHelper.Fill(stream, defines);
- var ret = Parse(s, filename, out program, useBaseName);
- stream.Close();
- return ret;
- }
-}
-
-
-public static int Parse (string s, string/*!*/ filename, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
- Contract.Requires(s != null);
- Contract.Requires(filename != null);
-
- byte[]/*!*/ buffer = cce.NonNull(UTF8Encoding.Default.GetBytes(s));
- MemoryStream ms = new MemoryStream(buffer,false);
- Errors errors = new Errors();
- Scanner scanner = new Scanner(ms, errors, filename, useBaseName);
-
- Parser parser = new Parser(scanner, errors, false);
- parser.Parse();
- if (parser.errors.count == 0)
- {
- program = parser.Pgm;
- program.ProcessDatatypeConstructors();
- return 0;
- }
- else
- {
- program = null;
- return parser.errors.count;
- }
-}
-
-public Parser(Scanner/*!*/ scanner, Errors/*!*/ errors, bool disambiguation)
- : this(scanner, errors)
-{
- // initialize readonly fields
- Pgm = new Program();
- dummyExpr = new LiteralExpr(Token.NoToken, false);
- dummyCmd = new AssumeCmd(Token.NoToken, dummyExpr);
- dummyBlock = new Block(Token.NoToken, "dummyBlock", new List<Cmd>(), new ReturnCmd(Token.NoToken));
- dummyType = new BasicType(Token.NoToken, SimpleType.Bool);
- dummyExprSeq = new List<Expr> ();
- dummyTransferCmd = new ReturnCmd(Token.NoToken);
- dummyStructuredCmd = new BreakCmd(Token.NoToken, null);
-}
-
-// Class to represent the bounds of a bitvector expression t[a:b].
-// Objects of this class only exist during parsing and are directly
-// turned into BvExtract before they get anywhere else
-private class BvBounds : Expr {
- public BigNum Lower;
- public BigNum Upper;
- public BvBounds(IToken/*!*/ tok, BigNum lower, BigNum upper)
- : base(tok) {
- Contract.Requires(tok != null);
- this.Lower = lower;
- this.Upper = upper;
- }
- public override Bpl.Type/*!*/ ShallowType { get {Contract.Ensures(Contract.Result<Bpl.Type>() != null); return Bpl.Type.Int; } }
- public override void Resolve(ResolutionContext/*!*/ rc) {
- // Contract.Requires(rc != null);
- rc.Error(this, "bitvector bounds in illegal position");
- }
- public override void Emit(TokenTextWriter/*!*/ stream,
- int contextBindingStrength, bool fragileContext) {
- Contract.Assert(false);throw new cce.UnreachableException();
- }
- public override void ComputeFreeVariables(GSet<object>/*!*/ freeVars) { Contract.Assert(false);throw new cce.UnreachableException(); }
-}
-
-/*--------------------------------------------------------------------------*/
-CHARACTERS
- letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
- digit = "0123456789".
- special = "'~#$^_.?`".
- glyph = "`~!@#$%^&*()-_=+[{]}|;:',<.>/?\\".
-
- cr = '\r'.
- lf = '\n'.
- tab = '\t'.
-
- space = ' '.
- quote = '"'.
-
- newLine = cr + lf.
- regularStringChar = ANY - quote - newLine.
-
- nondigit = letter + special.
- nonquote = letter + digit + space + glyph.
-
-
-/*------------------------------------------------------------------------*/
-TOKENS
- ident = [ '\\' ] nondigit {nondigit | digit}.
- bvlit = digit {digit} 'b' 'v' digit {digit}.
- digits = digit {digit}.
-
- string = quote { regularStringChar | "\\\"" } quote.
-
- decimal = digit {digit} 'e' [ '-' ] digit {digit} .
- float = digit {digit} '.' digit {digit} [ 'e' [ '-' ] digit {digit} ] .
-
-COMMENTS FROM "/*" TO "*/" NESTED
-COMMENTS FROM "//" TO lf
-
-IGNORE cr + lf + tab
-
-
-/*------------------------------------------------------------------------*/
-PRODUCTIONS
-
-
-/*------------------------------------------------------------------------*/
-BoogiePL
-= (. List<Variable>/*!*/ vs;
- List<Declaration>/*!*/ ds;
- Axiom/*!*/ ax;
- List<Declaration/*!*/>/*!*/ ts;
- Procedure/*!*/ pr;
- Implementation im;
- Implementation/*!*/ nnim;
- .)
- { Consts<out vs> (. foreach(Bpl.Variable/*!*/ v in vs){
- Contract.Assert(v != null);
- Pgm.AddTopLevelDeclaration(v);
- }
- .)
- | Function<out ds> (. foreach(Bpl.Declaration/*!*/ d in ds){
- Contract.Assert(d != null);
- Pgm.AddTopLevelDeclaration(d);
- }
- .)
- | Axiom<out ax> (. Pgm.AddTopLevelDeclaration(ax); .)
- | UserDefinedTypes<out ts> (. foreach(Declaration/*!*/ td in ts){
- Contract.Assert(td != null);
- Pgm.AddTopLevelDeclaration(td);
- }
- .)
- | GlobalVars<out vs> (. foreach(Bpl.Variable/*!*/ v in vs){
- Contract.Assert(v != null);
- Pgm.AddTopLevelDeclaration(v);
- }
- .)
- | Procedure<out pr, out im> (. Pgm.AddTopLevelDeclaration(pr);
- if (im != null) {
- Pgm.AddTopLevelDeclaration(im);
- }
- .)
- | Implementation<out nnim> (. Pgm.AddTopLevelDeclaration(nnim); .)
- }
- EOF
- .
-
-/*------------------------------------------------------------------------*/
-GlobalVars<.out List<Variable>/*!*/ ds.>
-= (.
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- QKeyValue kv = null;
- ds = new List<Variable>();
- var dsx = ds;
- .)
- "var"
- { Attribute<ref kv> }
- IdsTypeWheres<true, "global variables", delegate(TypedIdent tyd) { dsx.Add(new GlobalVariable(tyd.tok, tyd, kv)); } > ";"
- .
-
-LocalVars<.List<Variable>/*!*/ ds.>
-= (.
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- QKeyValue kv = null;
- .)
- "var"
- { Attribute<ref kv> }
- IdsTypeWheres<true, "local variables", delegate(TypedIdent tyd) { ds.Add(new LocalVariable(tyd.tok, tyd, kv)); } > ";"
- .
-
-ProcFormals<.bool incoming, bool allowWhereClauses, out List<Variable>/*!*/ ds.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- ds = new List<Variable>();
- var dsx = ds;
- var context = allowWhereClauses ? "procedure formals" : "the 'implementation' copies of formals";
- .)
- "("
- [ AttrsIdsTypeWheres<allowWhereClauses, allowWhereClauses, context, delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new Formal(tyd.tok, tyd, incoming, kv)); }>
- ]
- ")"
- .
-
-BoundVars<.IToken/*!*/ x, out List<Variable>/*!*/ ds.>
-= (.
- Contract.Requires(x != null);
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- List<TypedIdent>/*!*/ tyds = new List<TypedIdent>();
- ds = new List<Variable>();
- var dsx = ds;
- .)
- AttrsIdsTypeWheres<true, false, "bound variables", delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new BoundVariable(tyd.tok, tyd, kv)); } >
- .
-
-/*------------------------------------------------------------------------*/
-/* IdsType is used with const declarations */
-IdsType<.out List<TypedIdent>/*!*/ tyds.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out tyds) != null); List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty; .)
- Idents<out ids> ":" Type<out ty>
- (. tyds = new List<TypedIdent>();
- foreach(Token/*!*/ id in ids){
- Contract.Assert(id != null);
- tyds.Add(new TypedIdent(id, id.val, ty, null));
- }
- .)
- .
-
-/* AttrsIdsTypeWheres is used with the declarations of formals and bound variables */
-AttrsIdsTypeWheres<. bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action .>
-=
- AttributesIdsTypeWhere<allowAttributes, allowWhereClauses, context, action>
- { "," AttributesIdsTypeWhere<allowAttributes, allowWhereClauses, context, action> }
- .
-
-IdsTypeWheres<. bool allowWhereClauses, string context, System.Action<TypedIdent> action .>
-=
- IdsTypeWhere<allowWhereClauses, context, action>
- { "," IdsTypeWhere<allowWhereClauses, context, action> }
- .
-
-AttributesIdsTypeWhere<. bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action .>
-= (. QKeyValue kv = null; .)
- { Attribute<ref kv> (. if (!allowAttributes) {
- kv = null;
- this.SemErr("attributes are not allowed on " + context);
- }
- .)
- }
- IdsTypeWhere<allowWhereClauses, context, delegate(TypedIdent tyd) { action(tyd, kv); }>
- .
-
-/* context is allowed to be null if allowWhereClauses is true */
-IdsTypeWhere<. bool allowWhereClauses, string context, System.Action<TypedIdent> action .>
-= (. List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty; Expr wh = null; Expr/*!*/ nne; .)
- Idents<out ids> ":" Type<out ty>
- [ "where" Expression<out nne> (. if (!allowWhereClauses) {
- this.SemErr("where clause not allowed on " + context);
- } else {
- wh = nne;
- }
- .)
- ]
- (. foreach(Token/*!*/ id in ids){
- Contract.Assert(id != null);
- action(new TypedIdent(id, id.val, ty, wh));
- }
- .)
- .
-
-/*------------------------------------------------------------------------*/
-Type<out Bpl.Type/*!*/ ty>
-= (.Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken/*!*/ tok; ty = dummyType; .)
- (
- TypeAtom<out ty>
- |
- Ident<out tok> (. List<Bpl.Type>/*!*/ args = new List<Bpl.Type> (); .)
- [ TypeArgs<args> ] (. ty = new UnresolvedTypeIdentifier (tok, tok.val, args); .)
- |
- MapType<out ty>
- )
- .
-
-TypeArgs<.List<Bpl.Type>/*!*/ ts.>
-= (.Contract.Requires(ts != null); IToken/*!*/ tok; Bpl.Type/*!*/ ty; .)
- (
- TypeAtom<out ty> (. ts.Add(ty); .)
- [ TypeArgs<ts> ]
- |
- Ident<out tok> (. List<Bpl.Type>/*!*/ args = new List<Bpl.Type> ();
- ts.Add(new UnresolvedTypeIdentifier (tok, tok.val, args)); .)
- [ TypeArgs<ts> ]
- |
- MapType<out ty> (. ts.Add(ty); .)
- )
- .
-
-TypeAtom<out Bpl.Type/*!*/ ty>
-= (.Contract.Ensures(Contract.ValueAtReturn(out ty) != null); ty = dummyType; .)
- ( "int" (. ty = new BasicType(t, SimpleType.Int); .)
- | "real" (. ty = new BasicType(t, SimpleType.Real); .)
- | "bool" (. ty = new BasicType(t, SimpleType.Bool); .)
- /* note: bitvectors are handled in UnresolvedTypeIdentifier */
- |
- "("
- Type<out ty>
- ")"
- )
- .
-
-MapType<out Bpl.Type/*!*/ ty>
-= (.Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken tok = null;
- IToken/*!*/ nnTok;
- List<Bpl.Type>/*!*/ arguments = new List<Bpl.Type>();
- Bpl.Type/*!*/ result;
- List<TypeVariable>/*!*/ typeParameters = new List<TypeVariable>();
- .)
- [ TypeParams<out nnTok, out typeParameters> (. tok = nnTok; .) ]
- "[" (. if (tok == null) tok = t; .)
- [ Types<arguments> ]
- "]"
- Type<out result>
- (.
- ty = new MapType(tok, typeParameters, arguments, result);
- .)
- .
-
-TypeParams<.out IToken/*!*/ tok, out List<TypeVariable>/*!*/ typeParams.>
-= (.Contract.Ensures(Contract.ValueAtReturn(out tok) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); List<IToken>/*!*/ typeParamToks; .)
- "<" (. tok = t; .)
- Idents<out typeParamToks>
- ">"
- (.
- typeParams = new List<TypeVariable> ();
- foreach(Token/*!*/ id in typeParamToks){
- Contract.Assert(id != null);
- typeParams.Add(new TypeVariable(id, id.val));}
- .)
- .
-
-Types<.List<Bpl.Type>/*!*/ ts.>
-= (. Contract.Requires(ts != null); Bpl.Type/*!*/ ty; .)
- Type<out ty> (. ts.Add(ty); .)
- { "," Type<out ty> (. ts.Add(ty); .)
- }
- .
-
-
-/*------------------------------------------------------------------------*/
-Consts<.out List<Variable>/*!*/ ds.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out ds) != null); IToken/*!*/ y; List<TypedIdent>/*!*/ xs;
- ds = new List<Variable>();
- bool u = false; QKeyValue kv = null;
- bool ChildrenComplete = false;
- List<ConstantParent/*!*/> Parents = null; .)
- "const" (. y = t; .)
- { Attribute<ref kv> }
- [ "unique" (. u = true; .)
- ]
- IdsType<out xs>
- [ OrderSpec<out ChildrenComplete, out Parents> ]
- (. bool makeClone = false;
- foreach(TypedIdent/*!*/ x in xs){
- Contract.Assert(x != null);
-
- // ensure that no sharing is introduced
- List<ConstantParent/*!*/> ParentsClone;
- if (makeClone && Parents != null) {
- ParentsClone = new List<ConstantParent/*!*/> ();
- foreach (ConstantParent/*!*/ p in Parents){
- Contract.Assert(p != null);
- ParentsClone.Add(new ConstantParent (
- new IdentifierExpr (p.Parent.tok, p.Parent.Name),
- p.Unique));}
- } else {
- ParentsClone = Parents;
- }
- makeClone = true;
-
- ds.Add(new Constant(y, x, u, ParentsClone, ChildrenComplete, kv));
- }
- .)
- ";"
- .
-
-OrderSpec<.out bool ChildrenComplete, out List<ConstantParent/*!*/> Parents.>
-= (.Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out Parents),true)); ChildrenComplete = false;
- Parents = null;
- bool u;
- IToken/*!*/ parent; .)
- "extends" (. Parents = new List<ConstantParent/*!*/> ();
- u = false; .)
- [
- [ "unique" (. u = true; .)
- ]
- Ident<out parent> (. Parents.Add(new ConstantParent (
- new IdentifierExpr(parent, parent.val), u)); .)
- {
- "," (. u = false; .)
- [ "unique" (. u = true; .)
- ]
- Ident<out parent> (. Parents.Add(new ConstantParent (
- new IdentifierExpr(parent, parent.val), u)); .)
- }
- ]
- [ "complete" (. ChildrenComplete = true; .)
- ]
- .
-
-/*------------------------------------------------------------------------*/
-Function<.out List<Declaration>/*!*/ ds.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- ds = new List<Declaration>(); IToken/*!*/ z;
- IToken/*!*/ typeParamTok;
- var typeParams = new List<TypeVariable>();
- var arguments = new List<Variable>();
- TypedIdent/*!*/ tyd;
- TypedIdent retTyd = null;
- Bpl.Type/*!*/ retTy;
- QKeyValue argKv = null;
- QKeyValue kv = null;
- Expr definition = null;
- Expr/*!*/ tmp;
- .)
- "function" { Attribute<ref kv> } Ident<out z>
- [ TypeParams<out typeParamTok, out typeParams> ]
- "("
- [ VarOrType<out tyd, out argKv> (. arguments.Add(new Formal(tyd.tok, tyd, true, argKv)); .)
- { "," VarOrType<out tyd, out argKv> (. arguments.Add(new Formal(tyd.tok, tyd, true, argKv)); .)
- } ] ")"
- (. argKv = null; .)
- (
- "returns" "(" VarOrType<out retTyd, out argKv> ")"
- |
- ":" Type<out retTy> (. retTyd = new TypedIdent(retTy.tok, TypedIdent.NoName, retTy); .)
- )
- ( "{" Expression<out tmp> (. definition = tmp; .) "}" | ";" )
- (.
- if (retTyd == null) {
- // construct a dummy type for the case of syntax error
- retTyd = new TypedIdent(t, TypedIdent.NoName, new BasicType(t, SimpleType.Int));
- }
- Function/*!*/ func = new Function(z, z.val, typeParams, arguments,
- new Formal(retTyd.tok, retTyd, false, argKv), null, kv);
- Contract.Assert(func != null);
- ds.Add(func);
- bool allUnnamed = true;
- foreach(Formal/*!*/ f in arguments){
- Contract.Assert(f != null);
- if (f.TypedIdent.HasName) {
- allUnnamed = false;
- break;
- }
- }
- if (!allUnnamed) {
- Bpl.Type prevType = null;
- for (int i = arguments.Count; 0 <= --i; ) {
- TypedIdent/*!*/ curr = cce.NonNull(arguments[i]).TypedIdent;
- if (curr.HasName) {
- // the argument was given as both an identifier and a type
- prevType = curr.Type;
- } else {
- // the argument was given as just one "thing", which syntactically parsed as a type
- if (prevType == null) {
- this.errors.SemErr(curr.tok, "the type of the last parameter is unspecified");
- break;
- }
- Bpl.Type ty = curr.Type;
- var uti = ty as UnresolvedTypeIdentifier;
- if (uti != null && uti.Arguments.Count == 0) {
- // the given "thing" was just an identifier, so let's use it as the name of the parameter
- curr.Name = uti.Name;
- curr.Type = prevType;
- } else {
- this.errors.SemErr(curr.tok, "expecting an identifier as parameter name");
- }
- }
- }
- }
- if (definition != null) {
- // generate either an axiom or a function body
- if (QKeyValue.FindBoolAttribute(kv, "inline")) {
- func.Body = definition;
- } else {
- ds.Add(func.CreateDefinitionAxiom(definition, kv));
- }
- }
- .)
- .
-
-VarOrType<out TypedIdent/*!*/ tyd, out QKeyValue kv>
-= (.
- Contract.Ensures(Contract.ValueAtReturn(out tyd) != null);
- string/*!*/ varName = TypedIdent.NoName;
- Bpl.Type/*!*/ ty;
- IToken/*!*/ tok;
- kv = null;
- .)
- { Attribute<ref kv> }
- Type<out ty> (. tok = ty.tok; .)
- [ ":" (. var uti = ty as UnresolvedTypeIdentifier;
- if (uti != null && uti.Arguments.Count == 0) {
- varName = uti.Name;
- } else {
- this.SemErr("expected identifier before ':'");
- }
- .)
- Type<out ty>
- ]
- (. tyd = new TypedIdent(tok, varName, ty); .)
- .
-
-/*------------------------------------------------------------------------*/
-Axiom<out Axiom/*!*/ m>
-= (.Contract.Ensures(Contract.ValueAtReturn(out m) != null); Expr/*!*/ e; QKeyValue kv = null; .)
- "axiom"
- { Attribute<ref kv> }
- (. IToken/*!*/ x = t; .)
- Proposition<out e> ";" (. m = new Axiom(x,e, null, kv); .)
- .
-
-/*------------------------------------------------------------------------*/
-UserDefinedTypes<.out List<Declaration/*!*/>/*!*/ ts.>
-= (. Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out ts))); Declaration/*!*/ decl; QKeyValue kv = null; ts = new List<Declaration/*!*/> (); .)
- "type"
- { Attribute<ref kv> }
- UserDefinedType<out decl, kv> (. ts.Add(decl); .)
- { "," UserDefinedType<out decl, kv> (. ts.Add(decl); .) }
- ";"
- .
-
-UserDefinedType<out Declaration/*!*/ decl, QKeyValue kv>
-= (. Contract.Ensures(Contract.ValueAtReturn(out decl) != null); IToken/*!*/ id; List<IToken>/*!*/ paramTokens = new List<IToken> ();
- Bpl.Type/*!*/ body = dummyType; bool synonym = false; .)
- Ident<out id>
- [ WhiteSpaceIdents<out paramTokens> ]
- [
- "=" Type<out body>
- (. synonym = true; .)
- ]
- (.
- if (synonym) {
- List<TypeVariable>/*!*/ typeParams = new List<TypeVariable>();
- foreach(Token/*!*/ t in paramTokens){
- Contract.Assert(t != null);
- typeParams.Add(new TypeVariable(t, t.val));}
- decl = new TypeSynonymDecl(id, id.val, typeParams, body, kv);
- } else {
- decl = new TypeCtorDecl(id, id.val, paramTokens.Count, kv);
- }
- .)
- .
-
-
-/*------------------------------------------------------------------------*/
-Procedure<out Procedure/*!*/ proc, out /*maybe null*/ Implementation impl>
-= (. Contract.Ensures(Contract.ValueAtReturn(out proc) != null); IToken/*!*/ x;
- List<TypeVariable>/*!*/ typeParams;
- List<Variable>/*!*/ ins, outs;
- List<Requires>/*!*/ pre = new List<Requires>();
- List<IdentifierExpr>/*!*/ mods = new List<IdentifierExpr>();
- List<Ensures>/*!*/ post = new List<Ensures>();
-
- List<Variable>/*!*/ locals = new List<Variable>();
- StmtList/*!*/ stmtList;
- QKeyValue kv = null;
- impl = null;
- .)
-
- "procedure"
- ProcSignature<true, out x, out typeParams, out ins, out outs, out kv>
- ( ";"
- { Spec<pre, mods, post> }
- | { Spec<pre, mods, post> }
- ImplBody<out locals, out stmtList>
- (.
- impl = new Implementation(x, x.val, typeParams,
- Formal.StripWhereClauses(ins), Formal.StripWhereClauses(outs), locals, stmtList, kv == null ? null : (QKeyValue)kv.Clone(), this.errors);
- .)
- )
- (. proc = new Procedure(x, x.val, typeParams, ins, outs, pre, mods, post, kv); .)
- .
-
-
-Implementation<out Implementation/*!*/ impl>
-= (. Contract.Ensures(Contract.ValueAtReturn(out impl) != null); IToken/*!*/ x;
- List<TypeVariable>/*!*/ typeParams;
- List<Variable>/*!*/ ins, outs;
- List<Variable>/*!*/ locals;
- StmtList/*!*/ stmtList;
- QKeyValue kv;
- .)
-
- "implementation"
- ProcSignature<false, out x, out typeParams, out ins, out outs, out kv>
- ImplBody<out locals, out stmtList>
- (. impl = new Implementation(x, x.val, typeParams, ins, outs, locals, stmtList, kv, this.errors); .)
- .
-
-
-ProcSignature<.bool allowWhereClausesOnFormals, out IToken/*!*/ name, out List<TypeVariable>/*!*/ typeParams,
- out List<Variable>/*!*/ ins, out List<Variable>/*!*/ outs, out QKeyValue kv.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out name) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ins) != null); Contract.Ensures(Contract.ValueAtReturn(out outs) != null);
- IToken/*!*/ typeParamTok; typeParams = new List<TypeVariable>();
- outs = new List<Variable>(); kv = null; .)
- { Attribute<ref kv> }
- Ident<out name>
- [ TypeParams<out typeParamTok, out typeParams> ]
- ProcFormals<true, allowWhereClausesOnFormals, out ins>
- [ "returns" ProcFormals<false, allowWhereClausesOnFormals, out outs> ]
- .
-
-
-Spec<.List<Requires>/*!*/ pre, List<IdentifierExpr>/*!*/ mods, List<Ensures>/*!*/ post.>
-= (.Contract.Requires(pre != null); Contract.Requires(mods != null); Contract.Requires(post != null); List<IToken>/*!*/ ms; .)
- ( "modifies"
- [ Idents<out ms> (. foreach(IToken/*!*/ m in ms){
- Contract.Assert(m != null);
- mods.Add(new IdentifierExpr(m, m.val));
- }
- .)
- ] ";"
- | "free" SpecPrePost<true, pre, post>
- | SpecPrePost<false, pre, post>
- )
- .
-
-SpecPrePost<.bool free, List<Requires>/*!*/ pre, List<Ensures>/*!*/ post.>
-= (. Contract.Requires(pre != null); Contract.Requires(post != null); Expr/*!*/ e; Token tok = null; QKeyValue kv = null; .)
- ( "requires" (. tok = t; .)
- { Attribute<ref kv> }
- Proposition<out e> ";" (. pre.Add(new Requires(tok, free, e, null, kv)); .)
- | "ensures" (. tok = t; .)
- { Attribute<ref kv> }
- Proposition<out e> ";" (. post.Add(new Ensures(tok, free, e, null, kv)); .)
- )
- .
-
-/*------------------------------------------------------------------------*/
-
-ImplBody<.out List<Variable>/*!*/ locals, out StmtList/*!*/ stmtList.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); locals = new List<Variable>(); .)
- "{"
- { LocalVars<locals> }
- StmtList<out stmtList>
- .
-
-/* the StmtList also reads the final curly brace */
-StmtList<out StmtList/*!*/ stmtList>
-= (. Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); List<BigBlock/*!*/> bigblocks = new List<BigBlock/*!*/>();
- /* built-up state for the current BigBlock: */
- IToken startToken = null; string currentLabel = null;
- List<Cmd> cs = null; /* invariant: startToken != null ==> cs != null */
- /* temporary variables: */
- IToken label; Cmd c; BigBlock b;
- StructuredCmd ec = null; StructuredCmd/*!*/ ecn;
- TransferCmd tc = null; TransferCmd/*!*/ tcn;
- .)
-
- {
- ( LabelOrCmd<out c, out label>
- (. if (c != null) {
- // LabelOrCmd read a Cmd
- Contract.Assert(label == null);
- if (startToken == null) { startToken = c.tok; cs = new List<Cmd>(); }
- Contract.Assert(cs != null);
- cs.Add(c);
- } else {
- // LabelOrCmd read a label
- Contract.Assert(label != null);
- if (startToken != null) {
- Contract.Assert(cs != null);
- // dump the built-up state into a BigBlock
- b = new BigBlock(startToken, currentLabel, cs, null, null);
- bigblocks.Add(b);
- cs = null;
- }
- startToken = label;
- currentLabel = label.val;
- cs = new List<Cmd>();
- }
- .)
-
- | StructuredCmd<out ecn>
- (. ec = ecn;
- if (startToken == null) { startToken = ec.tok; cs = new List<Cmd>(); }
- Contract.Assert(cs != null);
- b = new BigBlock(startToken, currentLabel, cs, ec, null);
- bigblocks.Add(b);
- startToken = null; currentLabel = null; cs = null;
- .)
-
- | TransferCmd<out tcn>
- (. tc = tcn;
- if (startToken == null) { startToken = tc.tok; cs = new List<Cmd>(); }
- Contract.Assert(cs != null);
- b = new BigBlock(startToken, currentLabel, cs, null, tc);
- bigblocks.Add(b);
- startToken = null; currentLabel = null; cs = null;
- .)
-
- )
- }
- "}"
- (. IToken/*!*/ endCurly = t;
- if (startToken == null && bigblocks.Count == 0) {
- startToken = t; cs = new List<Cmd>();
- }
- if (startToken != null) {
- Contract.Assert(cs != null);
- b = new BigBlock(startToken, currentLabel, cs, null, null);
- bigblocks.Add(b);
- }
-
- stmtList = new StmtList(bigblocks, endCurly);
- .)
- .
-
-TransferCmd<out TransferCmd/*!*/ tc>
-= (. Contract.Ensures(Contract.ValueAtReturn(out tc) != null); tc = dummyTransferCmd;
- Token y; List<IToken>/*!*/ xs;
- List<String> ss = new List<String>();
- .)
- ( "goto" (. y = t; .)
- Idents<out xs> (. foreach(IToken/*!*/ s in xs){
- Contract.Assert(s != null);
- ss.Add(s.val); }
- tc = new GotoCmd(y, ss);
- .)
- | "return" (. tc = new ReturnCmd(t); .)
- ) ";"
- .
-
-StructuredCmd<out StructuredCmd/*!*/ ec>
-= (. Contract.Ensures(Contract.ValueAtReturn(out ec) != null); ec = dummyStructuredCmd; Contract.Assume(cce.IsPeerConsistent(ec));
- IfCmd/*!*/ ifcmd; WhileCmd/*!*/ wcmd; BreakCmd/*!*/ bcmd;
- .)
- ( IfCmd<out ifcmd> (. ec = ifcmd; .)
- | WhileCmd<out wcmd> (. ec = wcmd; .)
- | BreakCmd<out bcmd> (. ec = bcmd; .)
- )
- .
-
-IfCmd<out IfCmd/*!*/ ifcmd>
-= (. Contract.Ensures(Contract.ValueAtReturn(out ifcmd) != null); IToken/*!*/ x;
- Expr guard;
- StmtList/*!*/ thn;
- IfCmd/*!*/ elseIf; IfCmd elseIfOption = null;
- StmtList/*!*/ els; StmtList elseOption = null;
- .)
- "if" (. x = t; .)
- Guard<out guard>
- "{" StmtList<out thn>
- [ "else"
- ( IfCmd<out elseIf> (. elseIfOption = elseIf; .)
- | "{"
- StmtList<out els> (. elseOption = els; .)
- )
- ]
- (. ifcmd = new IfCmd(x, guard, thn, elseIfOption, elseOption); .)
- .
-
-WhileCmd<out WhileCmd/*!*/ wcmd>
-= (. Contract.Ensures(Contract.ValueAtReturn(out wcmd) != null); IToken/*!*/ x; Token z;
- Expr guard; Expr/*!*/ e; bool isFree;
- List<PredicateCmd/*!*/> invariants = new List<PredicateCmd/*!*/>();
- StmtList/*!*/ body;
- QKeyValue kv = null;
- .)
- "while" (. x = t; .)
- Guard<out guard> (. Contract.Assume(guard == null || cce.Owner.None(guard)); .)
- { (. isFree = false; z = la/*lookahead token*/; .)
- [ "free" (. isFree = true; .)
- ]
- "invariant"
- { Attribute<ref kv> }
- Expression<out e> (. if (isFree) {
- invariants.Add(new AssumeCmd(z, e, kv));
- } else {
- invariants.Add(new AssertCmd(z, e, kv));
- }
- kv = null;
- .)
- ";"
- }
- "{"
- StmtList<out body> (. wcmd = new WhileCmd(x, guard, invariants, body); .)
- .
-
-Guard<out Expr e>
-= (. Expr/*!*/ ee; e = null; .)
- "("
- ( "*" (. e = null; .)
- | Expression<out ee> (. e = ee; .)
- )
- ")"
- .
-
-BreakCmd<out BreakCmd/*!*/ bcmd>
-= (.Contract.Ensures(Contract.ValueAtReturn(out bcmd) != null); IToken/*!*/ x; IToken/*!*/ y;
- string breakLabel = null;
- .)
- "break" (. x = t; .)
- [ Ident<out y> (. breakLabel = y.val; .)
- ] ";" (. bcmd = new BreakCmd(x, breakLabel); .)
- .
-
-/*------------------------------------------------------------------------*/
-
-LabelOrCmd<out Cmd c, out IToken label>
-/* ensures (c == null) != (label != null) */
-= (. IToken/*!*/ x; Expr/*!*/ e;
- List<IToken>/*!*/ xs;
- List<IdentifierExpr> ids;
- c = dummyCmd; label = null;
- Cmd/*!*/ cn;
- QKeyValue kv = null;
- .)
- ( LabelOrAssign<out c, out label>
- | "assert" (. x = t; .)
- { Attribute<ref kv> }
- Proposition<out e> (. c = new AssertCmd(x, e, kv); .)
- ";"
- | "assume" (. x = t; .)
- { Attribute<ref kv> }
- Proposition<out e> (. c = new AssumeCmd(x, e, kv); .)
- ";"
- | "havoc" (. x = t; .)
- Idents<out xs> ";" (. ids = new List<IdentifierExpr>();
- foreach(IToken/*!*/ y in xs){
- Contract.Assert(y != null);
- ids.Add(new IdentifierExpr(y, y.val));
- }
- c = new HavocCmd(x,ids);
- .)
- | CallCmd<out cn> ";" (. c = cn; .)
- | ParCallCmd<out cn> (. c = cn; .)
- | "yield" (. x = t; .)
- ";" (. c = new YieldCmd(x); .)
- )
- .
-
-/*------------------------------------------------------------------------*/
-
-LabelOrAssign<out Cmd c, out IToken label>
-/* ensures (c == null) != (label != null) */
-= (. IToken/*!*/ id; IToken/*!*/ x, y; Expr/*!*/ e0;
- c = dummyCmd; label = null;
- AssignLhs/*!*/ lhs;
- List<AssignLhs/*!*/>/*!*/ lhss;
- List<Expr/*!*/>/*!*/ rhss;
- List<Expr/*!*/>/*!*/ indexes;
- .)
- Ident<out id> (. x = t; .)
- ( ":" (. c = null; label = x; .)
-
- | (. lhss = new List<AssignLhs/*!*/>(); .)
- (. lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val)); .)
-
- { MapAssignIndex<out y, out indexes> (. lhs = new MapAssignLhs(y, lhs, indexes); .) }
- (. lhss.Add(lhs); .)
-
- { ","
- Ident<out id>
- (. lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val)); .)
- { MapAssignIndex<out y, out indexes> (. lhs = new MapAssignLhs(y, lhs, indexes); .) }
- (. lhss.Add(lhs); .)
- }
-
- ":=" (. x = t; /* use location of := */ .)
- Expression<out e0> (. rhss = new List<Expr/*!*/> ();
- rhss.Add(e0); .)
- { ","
- Expression<out e0> (. rhss.Add(e0); .)
- }
- ";" (. c = new AssignCmd(x, lhss, rhss); .)
- )
- .
-
-MapAssignIndex<.out IToken/*!*/ x, out List<Expr/*!*/>/*!*/ indexes.>
-= (.Contract.Ensures(Contract.ValueAtReturn(out x) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out indexes))); indexes = new List<Expr/*!*/> ();
- Expr/*!*/ e;
- .)
- "[" (. x = t; .)
- [
- Expression<out e> (. indexes.Add(e); .)
- { ","
- Expression<out e> (. indexes.Add(e); .)
- }
- ]
- "]"
- .
-
-/*------------------------------------------------------------------------*/
-CallCmd<out Cmd c>
-= (. Contract.Ensures(Contract.ValueAtReturn(out c) != null);
- IToken x;
- bool isAsync = false;
- bool isFree = false;
- QKeyValue kv = null;
- c = null;
- .)
- [ "async" (. isAsync = true; .)
- ]
- [ "free" (. isFree = true; .)
- ]
- "call" (. x = t; .)
- { Attribute<ref kv> }
- CallParams<isAsync, isFree, kv, x, out c> (. .)
- .
-
-ParCallCmd<out Cmd d>
-= (. Contract.Ensures(Contract.ValueAtReturn(out d) != null);
- IToken x;
- QKeyValue kv = null;
- Cmd c = null;
- List<CallCmd> callCmds = new List<CallCmd>();
- .)
- "par" (. x = t; .)
- { Attribute<ref kv> }
- CallParams<false, false, kv, x, out c> (. callCmds.Add((CallCmd)c); .)
- { "|" CallParams<false, false, kv, x, out c> (. callCmds.Add((CallCmd)c); .)
- }
- ";" (. d = new ParCallCmd(x, callCmds, kv); .)
- .
-
-CallParams<bool isAsync, bool isFree, QKeyValue kv, IToken x, out Cmd c>
-= (.
- List<IdentifierExpr> ids = new List<IdentifierExpr>();
- List<Expr> es = new List<Expr>();
- Expr en;
- IToken first;
- IToken p;
- c = null;
- .)
- Ident<out first>
- ( "("
- [ Expression<out en> (. es.Add(en); .)
- { "," Expression<out en> (. es.Add(en); .)
- }
- ]
- ")" (. c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync; .)
- |
- (. ids.Add(new IdentifierExpr(first, first.val)); .)
- [ "," Ident<out p> (. ids.Add(new IdentifierExpr(p, p.val)); .)
- { "," Ident<out p> (. ids.Add(new IdentifierExpr(p, p.val)); .)
- }
- ] ":="
- Ident<out first> "("
- [ Expression<out en> (. es.Add(en); .)
- { "," Expression<out en> (. es.Add(en); .)
- }
- ]
- ")" (. c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync; .)
- )
- .
-
-/*------------------------------------------------------------------------*/
-Proposition<out Expr/*!*/ e>
-=(.Contract.Ensures(Contract.ValueAtReturn(out e) != null);.)
- Expression<out e>
- .
-
-/*------------------------------------------------------------------------*/
-Idents<.out List<IToken>/*!*/ xs.>
-= (.Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>(); .)
- Ident<out id> (. xs.Add(id); .)
- { "," Ident<out id> (. xs.Add(id); .)
- }
- .
-
-/*------------------------------------------------------------------------*/
-WhiteSpaceIdents<.out List<IToken>/*!*/ xs.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>(); .)
- Ident<out id> (. xs.Add(id); .)
- { Ident<out id> (. xs.Add(id); .)
- }
- .
-
-/*------------------------------------------------------------------------*/
-Expressions<.out List<Expr>/*!*/ es.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out es) != null); Expr/*!*/ e; es = new List<Expr>(); .)
- Expression<out e> (. es.Add(e); .)
- { "," Expression<out e> (. es.Add(e); .)
- }
- .
-
-/*------------------------------------------------------------------------*/
-Expression<.out Expr/*!*/ e0.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
- ImpliesExpression<false, out e0>
- { EquivOp (. x = t; .)
- ImpliesExpression<false, out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Iff, e0, e1); .)
- }
- .
-
-EquivOp = "<==>" | '\u21d4'.
-
-/*------------------------------------------------------------------------*/
-ImpliesExpression<bool noExplies, out Expr/*!*/ e0>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
- LogicalExpression<out e0>
- [
- ImpliesOp (. x = t; .)
- /* recurse because implication is right-associative */
- ImpliesExpression<true, out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e0, e1); .)
- |
- ExpliesOp (. if (noExplies)
- this.SemErr("illegal mixture of ==> and <==, use parentheses to disambiguate");
- x = t; .)
- LogicalExpression<out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0); .)
- /* loop because explies is left-associative */
- {
- ExpliesOp (. x = t; .)
- LogicalExpression<out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0); .)
- }
- ]
- .
-
-ImpliesOp = "==>" | '\u21d2'.
-ExpliesOp = "<==" | '\u21d0'.
-
-/*------------------------------------------------------------------------*/
-LogicalExpression<out Expr/*!*/ e0>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
- RelationalExpression<out e0>
- [ AndOp (. x = t; .)
- RelationalExpression<out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1); .)
- { AndOp (. x = t; .)
- RelationalExpression<out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1); .)
- }
- | OrOp (. x = t; .)
- RelationalExpression<out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1); .)
- { OrOp (. x = t; .)
- RelationalExpression<out e1>
- (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1); .)
- }
- ]
- .
-
-AndOp = "&&" | '\u2227'.
-OrOp = "||" | '\u2228'.
-
-/*------------------------------------------------------------------------*/
-RelationalExpression<out Expr/*!*/ e0>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op; .)
- BvTerm<out e0>
- [ RelOp<out x, out op>
- BvTerm<out e1> (. e0 = Expr.Binary(x, op, e0, e1); .)
- ]
- .
-
-RelOp<out IToken/*!*/ x, out BinaryOperator.Opcode op>
-= (.Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/; .)
- ( "==" (. x = t; op=BinaryOperator.Opcode.Eq; .)
- | "<" (. x = t; op=BinaryOperator.Opcode.Lt; .)
- | ">" (. x = t; op=BinaryOperator.Opcode.Gt; .)
- | "<=" (. x = t; op=BinaryOperator.Opcode.Le; .)
- | ">=" (. x = t; op=BinaryOperator.Opcode.Ge; .)
- | "!=" (. x = t; op=BinaryOperator.Opcode.Neq; .)
- | "<:" (. x = t; op=BinaryOperator.Opcode.Subtype; .)
- | '\u2260' (. x = t; op=BinaryOperator.Opcode.Neq; .)
- | '\u2264' (. x = t; op=BinaryOperator.Opcode.Le; .)
- | '\u2265' (. x = t; op=BinaryOperator.Opcode.Ge; .)
- )
- .
-
-/*------------------------------------------------------------------------*/
-BvTerm<out Expr/*!*/ e0>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
- Term<out e0>
- { "++" (. x = t; .)
- Term<out e1> (. e0 = new BvConcatExpr(x, e0, e1); .)
- }
- .
-
-
-/*------------------------------------------------------------------------*/
-Term<out Expr/*!*/ e0>
-= (.Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op; .)
- Factor<out e0>
- { AddOp<out x, out op>
- Factor<out e1> (. e0 = Expr.Binary(x, op, e0, e1); .)
- }
- .
-
-AddOp<out IToken/*!*/ x, out BinaryOperator.Opcode op>
-= (.Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/; .)
- ( "+" (. x = t; op=BinaryOperator.Opcode.Add; .)
- | "-" (. x = t; op=BinaryOperator.Opcode.Sub; .)
- )
- .
-
-/*------------------------------------------------------------------------*/
-Factor<out Expr/*!*/ e0>
-= (.Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op; .)
- Power<out e0>
- { MulOp<out x, out op>
- Power<out e1> (. e0 = Expr.Binary(x, op, e0, e1); .)
- }
- .
-
-MulOp<out IToken/*!*/ x, out BinaryOperator.Opcode op>
-= (. Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/; .)
- ( "*" (. x = t; op=BinaryOperator.Opcode.Mul; .)
- | "div" (. x = t; op=BinaryOperator.Opcode.Div; .)
- | "mod" (. x = t; op=BinaryOperator.Opcode.Mod; .)
- | "/" (. x = t; op=BinaryOperator.Opcode.RealDiv; .)
- )
- .
-
-/*------------------------------------------------------------------------*/
-Power<out Expr/*!*/ e0>
-= (.Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
- UnaryExpression<out e0>
- [
- "**" (. x = t; .)
- /* recurse because exponentation is right-associative */
- Power<out e1> (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Pow, e0, e1); .)
- ]
- .
-
-/*------------------------------------------------------------------------*/
-UnaryExpression<out Expr/*!*/ e>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
- e = dummyExpr;
- .)
- ( "-" (. x = t; .)
- UnaryExpression<out e> (. e = Expr.Unary(x, UnaryOperator.Opcode.Neg, e); .)
- | NegOp (. x = t; .)
- UnaryExpression<out e> (. e = Expr.Unary(x, UnaryOperator.Opcode.Not, e); .)
- | CoercionExpression<out e>
- )
- .
-
-NegOp = "!" | '\u00ac'.
-
-/*------------------------------------------------------------------------*/
-
-/* This production creates ambiguities, because types can start with "<"
- (polymorphic map types), but can also be followed by "<" (inequalities).
- Coco deals with these ambiguities in a reasonable way by preferring to read
- further types (type arguments) over relational symbols. E.g., "5 : C < 0"
- will cause a parse error because "<" is treated as the beginning of a
- map type. */
-
-CoercionExpression<out Expr/*!*/ e>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
- Bpl.Type/*!*/ coercedTo;
- BigNum bn;
- .)
- ArrayExpression<out e>
- { ":" (. x = t; .)
- (
- Type<out coercedTo> (. e = Expr.CoerceType(x, e, coercedTo); .)
- |
- Nat<out bn> /* This means that we really look at a bitvector
- expression t[a:b] */
- (. if (!(e is LiteralExpr) || !((LiteralExpr)e).isBigNum) {
- this.SemErr("arguments of extract need to be integer literals");
- e = new BvBounds(x, bn, BigNum.ZERO);
- } else {
- e = new BvBounds(x, bn, ((LiteralExpr)e).asBigNum);
- }
- .)
- )
- }
- .
-
-/*------------------------------------------------------------------------*/
-ArrayExpression<out Expr/*!*/ e>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
- Expr/*!*/ index0 = dummyExpr; Expr/*!*/ e1;
- bool store; bool bvExtract;
- List<Expr>/*!*/ allArgs = dummyExprSeq;
- .)
- AtomExpression<out e>
- { "[" (. x = t; allArgs = new List<Expr> ();
- allArgs.Add(e);
- store = false; bvExtract = false; .)
- [
- Expression<out index0>
- (. if (index0 is BvBounds)
- bvExtract = true;
- else
- allArgs.Add(index0);
- .)
- { "," Expression<out e1>
- (. if (bvExtract || e1 is BvBounds)
- this.SemErr("bitvectors only have one dimension");
- allArgs.Add(e1);
- .)
- }
- [ ":=" Expression<out e1>
- (. if (bvExtract || e1 is BvBounds)
- this.SemErr("assignment to bitvectors is not possible");
- allArgs.Add(e1); store = true;
- .)
- ]
- | ":=" Expression<out e1> (. allArgs.Add(e1); store = true; .)
- ]
- "]"
- (. if (store)
- e = new NAryExpr(x, new MapStore(x, allArgs.Count - 2), allArgs);
- else if (bvExtract)
- e = new BvExtractExpr(x, e,
- ((BvBounds)index0).Upper.ToIntSafe,
- ((BvBounds)index0).Lower.ToIntSafe);
- else
- e = new NAryExpr(x, new MapSelect(x, allArgs.Count - 1), allArgs);
- .)
- }
- .
-
-
-/*------------------------------------------------------------------------*/
-AtomExpression<out Expr/*!*/ e>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x; int n; BigNum bn; BigDec bd;
- List<Expr>/*!*/ es; List<Variable>/*!*/ ds; Trigger trig;
- List<TypeVariable>/*!*/ typeParams;
- IdentifierExpr/*!*/ id;
- QKeyValue kv;
- e = dummyExpr;
- List<Variable>/*!*/ locals;
- List<Block/*!*/>/*!*/ blocks;
- .)
- ( "false" (. e = new LiteralExpr(t, false); .)
- | "true" (. e = new LiteralExpr(t, true); .)
- | Nat<out bn> (. e = new LiteralExpr(t, bn); .)
- | Dec<out bd> (. e = new LiteralExpr(t, bd); .)
- | BvLit<out bn, out n> (. e = new LiteralExpr(t, bn, n); .)
-
- | Ident<out x> (. id = new IdentifierExpr(x, x.val); e = id; .)
- [ "("
- ( Expressions<out es> (. e = new NAryExpr(x, new FunctionCall(id), es); .)
- | /* empty */ (. e = new NAryExpr(x, new FunctionCall(id), new List<Expr>()); .)
- )
- ")"
- ]
-
- | "old" (. x = t; .)
- "("
- Expression<out e>
- ")" (. e = new OldExpr(x, e); .)
-
- | "int" (. x = t; .)
- "("
- Expression<out e>
- ")" (. e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToInt), new List<Expr>{ e }); .)
-
- | "real" (. x = t; .)
- "("
- Expression<out e>
- ")" (. e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToReal), new List<Expr>{ e }); .)
-
- | "(" ( Expression<out e> (. if (e is BvBounds)
- this.SemErr("parentheses around bitvector bounds " +
- "are not allowed"); .)
- | Forall (. x = t; .)
- QuantifierBody<x, out typeParams, out ds, out kv, out trig, out e>
- (. if (typeParams.Count + ds.Count > 0)
- e = new ForallExpr(x, typeParams, ds, kv, trig, e); .)
- | Exists (. x = t; .)
- QuantifierBody<x, out typeParams, out ds, out kv, out trig, out e>
- (. if (typeParams.Count + ds.Count > 0)
- e = new ExistsExpr(x, typeParams, ds, kv, trig, e); .)
- | Lambda (. x = t; .)
- QuantifierBody<x, out typeParams, out ds, out kv, out trig, out e>
- (. if (trig != null)
- SemErr("triggers not allowed in lambda expressions");
- if (typeParams.Count + ds.Count > 0)
- e = new LambdaExpr(x, typeParams, ds, kv, e); .)
- )
- ")"
- | IfThenElseExpression<out e>
- | CodeExpression<out locals, out blocks> (. e = new CodeExpr(locals, blocks); .)
- )
- .
-
-CodeExpression<.out List<Variable>/*!*/ locals, out List<Block/*!*/>/*!*/ blocks.>
-= (. Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out blocks))); locals = new List<Variable>(); Block/*!*/ b;
- blocks = new List<Block/*!*/>();
- .)
- "|{"
- { LocalVars<locals> }
- SpecBlock<out b> (. blocks.Add(b); .)
- { SpecBlock<out b> (. blocks.Add(b); .)
- }
- "}|"
- .
-
-SpecBlock<out Block/*!*/ b>
-= (. Contract.Ensures(Contract.ValueAtReturn(out b) != null); IToken/*!*/ x; IToken/*!*/ y;
- Cmd c; IToken label;
- List<Cmd> cs = new List<Cmd>();
- List<IToken>/*!*/ xs;
- List<String> ss = new List<String>();
- b = dummyBlock;
- Expr/*!*/ e;
- .)
- Ident<out x> ":"
- { LabelOrCmd<out c, out label>
- (. if (c != null) {
- Contract.Assert(label == null);
- cs.Add(c);
- } else {
- Contract.Assert(label != null);
- SemErr("SpecBlock's can only have one label");
- }
- .)
- }
- ( "goto" (. y = t; .)
- Idents<out xs> (. foreach(IToken/*!*/ s in xs){
- Contract.Assert(s != null);
- ss.Add(s.val); }
- b = new Block(x,x.val,cs,new GotoCmd(y,ss));
- .)
- | "return" Expression<out e>
- (. b = new Block(x,x.val,cs,new ReturnExprCmd(t,e)); .)
- )
- ";"
- .
-
-Attribute<ref QKeyValue kv>
-= (. Trigger trig = null; .)
- AttributeOrTrigger<ref kv, ref trig> (. if (trig != null) this.SemErr("only attributes, not triggers, allowed here"); .)
-.
-
-AttributeOrTrigger<ref QKeyValue kv, ref Trigger trig>
-= (. IToken/*!*/ tok; Expr/*!*/ e; List<Expr>/*!*/ es;
- string key;
- List<object/*!*/> parameters; object/*!*/ param;
- .)
- "{" (. tok = t; .)
- (
- ":" ident (. key = t.val; parameters = new List<object/*!*/>(); .)
- [ AttributeParameter<out param> (. parameters.Add(param); .)
- { "," AttributeParameter<out param> (. parameters.Add(param); .)
- }
- ]
- (. if (key == "nopats") {
- if (parameters.Count == 1 && parameters[0] is Expr) {
- e = (Expr)parameters[0];
- if(trig==null){
- trig = new Trigger(tok, false, new List<Expr> { e }, null);
- } else {
- trig.AddLast(new Trigger(tok, false, new List<Expr> { e }, null));
- }
- } else {
- this.SemErr("the 'nopats' quantifier attribute expects a string-literal parameter");
- }
- } else {
- if (kv==null) {
- kv = new QKeyValue(tok, key, parameters, null);
- } else {
- kv.AddLast(new QKeyValue(tok, key, parameters, null));
- }
- }
- .)
- |
- Expression<out e> (. es = new List<Expr> { e }; .)
- { "," Expression<out e> (. es.Add(e); .)
- } (. if (trig==null) {
- trig = new Trigger(tok, true, es, null);
- } else {
- trig.AddLast(new Trigger(tok, true, es, null));
- }
- .)
- )
- "}"
- .
-
-AttributeParameter<out object/*!*/ o>
-= (. Contract.Ensures(Contract.ValueAtReturn(out o) != null);
- o = "error";
- Expr/*!*/ e;
- .)
- ( string (. o = t.val.Substring(1, t.val.Length-2); .)
- | Expression<out e> (. o = e; .)
- )
- .
-
-IfThenElseExpression<out Expr/*!*/ e>
-= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null);
- IToken/*!*/ tok;
- Expr/*!*/ e0, e1, e2;
- e = dummyExpr; .)
- "if" (. tok = t; .) Expression<out e0> "then" Expression<out e1> "else" Expression<out e2>
- (. e = new NAryExpr(tok, new IfThenElse(tok), new List<Expr>{ e0, e1, e2 }); .)
- .
-
-
-QuantifierBody<.IToken/*!*/ q, out List<TypeVariable>/*!*/ typeParams, out List<Variable>/*!*/ ds,
- out QKeyValue kv, out Trigger trig, out Expr/*!*/ body.>
-= (. Contract.Requires(q != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ds) != null); Contract.Ensures(Contract.ValueAtReturn(out body) != null);
- trig = null; typeParams = new List<TypeVariable> ();
- IToken/*!*/ tok;
- kv = null;
- ds = new List<Variable> ();
- .)
- (
- TypeParams<out tok, out typeParams>
- [ BoundVars<q, out ds> ]
- |
- BoundVars<q, out ds>
- )
- QSep
- { AttributeOrTrigger<ref kv, ref trig> }
- Expression<out body>
- .
-
-Forall = "forall" | '\u2200'.
-Exists = "exists" | '\u2203'.
-Lambda = "lambda" | '\u03bb'.
-QSep = "::" | '\u2022'.
-
-/*------------------------------------------------------------------------*/
-Ident<out IToken/*!*/ x>
-=(.Contract.Ensures(Contract.ValueAtReturn(out x) != null);.)
- ident (. x = t;
- if (x.val.StartsWith("\\"))
- x.val = x.val.Substring(1);
- .)
- .
-
-/*------------------------------------------------------------------------*/
-Nat<out BigNum n>
-=
- digits
- (. try {
- n = BigNum.FromString(t.val);
- } catch (FormatException) {
- this.SemErr("incorrectly formatted number");
- n = BigNum.ZERO;
- }
- .)
- .
-
-/*------------------------------------------------------------------------*/
-Dec<out BigDec n>
-= (. string s = ""; .)
- (
- decimal (. s = t.val; .)
- |
- float (. s = t.val; .)
- )
- (. try {
- n = BigDec.FromString(s);
- } catch (FormatException) {
- this.SemErr("incorrectly formatted number");
- n = BigDec.ZERO;
- }
- .)
- .
-
-/*------------------------------------------------------------------------*/
-BvLit<out BigNum n, out int m>
-=
- bvlit
- (.
- int pos = t.val.IndexOf("bv");
- string a = t.val.Substring(0, pos);
- string b = t.val.Substring(pos + 2);
- try {
- n = BigNum.FromString(a);
- m = Convert.ToInt32(b);
- } catch (FormatException) {
- this.SemErr("incorrectly formatted bitvector");
- n = BigNum.ZERO;
- m = 0;
- }
- .)
- .
-END BoogiePL.
+
+/*---------------------------------------------------------------------------
+// BoogiePL -
+//--------------------------------------------------------------------------*/
+
+/*using System;*/
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using Microsoft.Boogie;
+using Microsoft.Basetypes;
+using Bpl = Microsoft.Boogie;
+
+
+COMPILER BoogiePL
+
+/*--------------------------------------------------------------------------*/
+
+readonly Program/*!*/ Pgm;
+
+readonly Expr/*!*/ dummyExpr;
+readonly Cmd/*!*/ dummyCmd;
+readonly Block/*!*/ dummyBlock;
+readonly Bpl.Type/*!*/ dummyType;
+readonly List<Expr>/*!*/ dummyExprSeq;
+readonly TransferCmd/*!*/ dummyTransferCmd;
+readonly StructuredCmd/*!*/ dummyStructuredCmd;
+
+///<summary>
+///Returns the number of parsing errors encountered. If 0, "program" returns as
+///the parsed program.
+///</summary>
+public static int Parse (string/*!*/ filename, /*maybe null*/ List<string/*!*/> defines, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
+ Contract.Requires(filename != null);
+ Contract.Requires(cce.NonNullElements(defines,true));
+
+ if (defines == null) {
+ defines = new List<string/*!*/>();
+ }
+
+ if (filename == "stdin.bpl") {
+ var s = ParserHelper.Fill(Console.In, defines);
+ return Parse(s, filename, out program, useBaseName);
+ } else {
+ FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
+ var s = ParserHelper.Fill(stream, defines);
+ var ret = Parse(s, filename, out program, useBaseName);
+ stream.Close();
+ return ret;
+ }
+}
+
+
+public static int Parse (string s, string/*!*/ filename, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
+ Contract.Requires(s != null);
+ Contract.Requires(filename != null);
+
+ byte[]/*!*/ buffer = cce.NonNull(UTF8Encoding.Default.GetBytes(s));
+ MemoryStream ms = new MemoryStream(buffer,false);
+ Errors errors = new Errors();
+ Scanner scanner = new Scanner(ms, errors, filename, useBaseName);
+
+ Parser parser = new Parser(scanner, errors, false);
+ parser.Parse();
+ if (parser.errors.count == 0)
+ {
+ program = parser.Pgm;
+ program.ProcessDatatypeConstructors();
+ return 0;
+ }
+ else
+ {
+ program = null;
+ return parser.errors.count;
+ }
+}
+
+public Parser(Scanner/*!*/ scanner, Errors/*!*/ errors, bool disambiguation)
+ : this(scanner, errors)
+{
+ // initialize readonly fields
+ Pgm = new Program();
+ dummyExpr = new LiteralExpr(Token.NoToken, false);
+ dummyCmd = new AssumeCmd(Token.NoToken, dummyExpr);
+ dummyBlock = new Block(Token.NoToken, "dummyBlock", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+ dummyType = new BasicType(Token.NoToken, SimpleType.Bool);
+ dummyExprSeq = new List<Expr> ();
+ dummyTransferCmd = new ReturnCmd(Token.NoToken);
+ dummyStructuredCmd = new BreakCmd(Token.NoToken, null);
+}
+
+// Class to represent the bounds of a bitvector expression t[a:b].
+// Objects of this class only exist during parsing and are directly
+// turned into BvExtract before they get anywhere else
+private class BvBounds : Expr {
+ public BigNum Lower;
+ public BigNum Upper;
+ public BvBounds(IToken/*!*/ tok, BigNum lower, BigNum upper)
+ : base(tok) {
+ Contract.Requires(tok != null);
+ this.Lower = lower;
+ this.Upper = upper;
+ }
+ public override Bpl.Type/*!*/ ShallowType { get {Contract.Ensures(Contract.Result<Bpl.Type>() != null); return Bpl.Type.Int; } }
+ public override void Resolve(ResolutionContext/*!*/ rc) {
+ // Contract.Requires(rc != null);
+ rc.Error(this, "bitvector bounds in illegal position");
+ }
+ public override void Emit(TokenTextWriter/*!*/ stream,
+ int contextBindingStrength, bool fragileContext) {
+ Contract.Assert(false);throw new cce.UnreachableException();
+ }
+ public override void ComputeFreeVariables(GSet<object>/*!*/ freeVars) { Contract.Assert(false);throw new cce.UnreachableException(); }
+}
+
+/*--------------------------------------------------------------------------*/
+CHARACTERS
+ letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
+ digit = "0123456789".
+ special = "'~#$^_.?`".
+ glyph = "`~!@#$%^&*()-_=+[{]}|;:',<.>/?\\".
+
+ cr = '\r'.
+ lf = '\n'.
+ tab = '\t'.
+
+ space = ' '.
+ quote = '"'.
+
+ newLine = cr + lf.
+ regularStringChar = ANY - quote - newLine.
+
+ nondigit = letter + special.
+ nonquote = letter + digit + space + glyph.
+
+
+/*------------------------------------------------------------------------*/
+TOKENS
+ ident = [ '\\' ] nondigit {nondigit | digit}.
+ bvlit = digit {digit} 'b' 'v' digit {digit}.
+ digits = digit {digit}.
+
+ string = quote { regularStringChar | "\\\"" } quote.
+
+ decimal = digit {digit} 'e' [ '-' ] digit {digit} .
+ float = digit {digit} '.' digit {digit} [ 'e' [ '-' ] digit {digit} ] .
+
+COMMENTS FROM "/*" TO "*/" NESTED
+COMMENTS FROM "//" TO lf
+
+IGNORE cr + lf + tab
+
+
+/*------------------------------------------------------------------------*/
+PRODUCTIONS
+
+
+/*------------------------------------------------------------------------*/
+BoogiePL
+= (. List<Variable>/*!*/ vs;
+ List<Declaration>/*!*/ ds;
+ Axiom/*!*/ ax;
+ List<Declaration/*!*/>/*!*/ ts;
+ Procedure/*!*/ pr;
+ Implementation im;
+ Implementation/*!*/ nnim;
+ .)
+ { Consts<out vs> (. foreach(Bpl.Variable/*!*/ v in vs){
+ Contract.Assert(v != null);
+ Pgm.AddTopLevelDeclaration(v);
+ }
+ .)
+ | Function<out ds> (. foreach(Bpl.Declaration/*!*/ d in ds){
+ Contract.Assert(d != null);
+ Pgm.AddTopLevelDeclaration(d);
+ }
+ .)
+ | Axiom<out ax> (. Pgm.AddTopLevelDeclaration(ax); .)
+ | UserDefinedTypes<out ts> (. foreach(Declaration/*!*/ td in ts){
+ Contract.Assert(td != null);
+ Pgm.AddTopLevelDeclaration(td);
+ }
+ .)
+ | GlobalVars<out vs> (. foreach(Bpl.Variable/*!*/ v in vs){
+ Contract.Assert(v != null);
+ Pgm.AddTopLevelDeclaration(v);
+ }
+ .)
+ | Procedure<out pr, out im> (. Pgm.AddTopLevelDeclaration(pr);
+ if (im != null) {
+ Pgm.AddTopLevelDeclaration(im);
+ }
+ .)
+ | Implementation<out nnim> (. Pgm.AddTopLevelDeclaration(nnim); .)
+ }
+ EOF
+ .
+
+/*------------------------------------------------------------------------*/
+GlobalVars<.out List<Variable>/*!*/ ds.>
+= (.
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ QKeyValue kv = null;
+ ds = new List<Variable>();
+ var dsx = ds;
+ .)
+ "var"
+ { Attribute<ref kv> }
+ IdsTypeWheres<true, "global variables", delegate(TypedIdent tyd) { dsx.Add(new GlobalVariable(tyd.tok, tyd, kv)); } > ";"
+ .
+
+LocalVars<.List<Variable>/*!*/ ds.>
+= (.
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ QKeyValue kv = null;
+ .)
+ "var"
+ { Attribute<ref kv> }
+ IdsTypeWheres<true, "local variables", delegate(TypedIdent tyd) { ds.Add(new LocalVariable(tyd.tok, tyd, kv)); } > ";"
+ .
+
+ProcFormals<.bool incoming, bool allowWhereClauses, out List<Variable>/*!*/ ds.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ ds = new List<Variable>();
+ var dsx = ds;
+ var context = allowWhereClauses ? "procedure formals" : "the 'implementation' copies of formals";
+ .)
+ "("
+ [ AttrsIdsTypeWheres<allowWhereClauses, allowWhereClauses, context, delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new Formal(tyd.tok, tyd, incoming, kv)); }>
+ ]
+ ")"
+ .
+
+BoundVars<.IToken/*!*/ x, out List<Variable>/*!*/ ds.>
+= (.
+ Contract.Requires(x != null);
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ List<TypedIdent>/*!*/ tyds = new List<TypedIdent>();
+ ds = new List<Variable>();
+ var dsx = ds;
+ .)
+ AttrsIdsTypeWheres<true, false, "bound variables", delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new BoundVariable(tyd.tok, tyd, kv)); } >
+ .
+
+/*------------------------------------------------------------------------*/
+/* IdsType is used with const declarations */
+IdsType<.out List<TypedIdent>/*!*/ tyds.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out tyds) != null); List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty; .)
+ Idents<out ids> ":" Type<out ty>
+ (. tyds = new List<TypedIdent>();
+ foreach(Token/*!*/ id in ids){
+ Contract.Assert(id != null);
+ tyds.Add(new TypedIdent(id, id.val, ty, null));
+ }
+ .)
+ .
+
+/* AttrsIdsTypeWheres is used with the declarations of formals and bound variables */
+AttrsIdsTypeWheres<. bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action .>
+=
+ AttributesIdsTypeWhere<allowAttributes, allowWhereClauses, context, action>
+ { "," AttributesIdsTypeWhere<allowAttributes, allowWhereClauses, context, action> }
+ .
+
+IdsTypeWheres<. bool allowWhereClauses, string context, System.Action<TypedIdent> action .>
+=
+ IdsTypeWhere<allowWhereClauses, context, action>
+ { "," IdsTypeWhere<allowWhereClauses, context, action> }
+ .
+
+AttributesIdsTypeWhere<. bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action .>
+= (. QKeyValue kv = null; .)
+ { Attribute<ref kv> (. if (!allowAttributes) {
+ kv = null;
+ this.SemErr("attributes are not allowed on " + context);
+ }
+ .)
+ }
+ IdsTypeWhere<allowWhereClauses, context, delegate(TypedIdent tyd) { action(tyd, kv); }>
+ .
+
+/* context is allowed to be null if allowWhereClauses is true */
+IdsTypeWhere<. bool allowWhereClauses, string context, System.Action<TypedIdent> action .>
+= (. List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty; Expr wh = null; Expr/*!*/ nne; .)
+ Idents<out ids> ":" Type<out ty>
+ [ "where" Expression<out nne> (. if (!allowWhereClauses) {
+ this.SemErr("where clause not allowed on " + context);
+ } else {
+ wh = nne;
+ }
+ .)
+ ]
+ (. foreach(Token/*!*/ id in ids){
+ Contract.Assert(id != null);
+ action(new TypedIdent(id, id.val, ty, wh));
+ }
+ .)
+ .
+
+/*------------------------------------------------------------------------*/
+Type<out Bpl.Type/*!*/ ty>
+= (.Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken/*!*/ tok; ty = dummyType; .)
+ (
+ TypeAtom<out ty>
+ |
+ Ident<out tok> (. List<Bpl.Type>/*!*/ args = new List<Bpl.Type> (); .)
+ [ TypeArgs<args> ] (. ty = new UnresolvedTypeIdentifier (tok, tok.val, args); .)
+ |
+ MapType<out ty>
+ )
+ .
+
+TypeArgs<.List<Bpl.Type>/*!*/ ts.>
+= (.Contract.Requires(ts != null); IToken/*!*/ tok; Bpl.Type/*!*/ ty; .)
+ (
+ TypeAtom<out ty> (. ts.Add(ty); .)
+ [ TypeArgs<ts> ]
+ |
+ Ident<out tok> (. List<Bpl.Type>/*!*/ args = new List<Bpl.Type> ();
+ ts.Add(new UnresolvedTypeIdentifier (tok, tok.val, args)); .)
+ [ TypeArgs<ts> ]
+ |
+ MapType<out ty> (. ts.Add(ty); .)
+ )
+ .
+
+TypeAtom<out Bpl.Type/*!*/ ty>
+= (.Contract.Ensures(Contract.ValueAtReturn(out ty) != null); ty = dummyType; .)
+ ( "int" (. ty = new BasicType(t, SimpleType.Int); .)
+ | "real" (. ty = new BasicType(t, SimpleType.Real); .)
+ | "bool" (. ty = new BasicType(t, SimpleType.Bool); .)
+ /* note: bitvectors are handled in UnresolvedTypeIdentifier */
+ |
+ "("
+ Type<out ty>
+ ")"
+ )
+ .
+
+MapType<out Bpl.Type/*!*/ ty>
+= (.Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken tok = null;
+ IToken/*!*/ nnTok;
+ List<Bpl.Type>/*!*/ arguments = new List<Bpl.Type>();
+ Bpl.Type/*!*/ result;
+ List<TypeVariable>/*!*/ typeParameters = new List<TypeVariable>();
+ .)
+ [ TypeParams<out nnTok, out typeParameters> (. tok = nnTok; .) ]
+ "[" (. if (tok == null) tok = t; .)
+ [ Types<arguments> ]
+ "]"
+ Type<out result>
+ (.
+ ty = new MapType(tok, typeParameters, arguments, result);
+ .)
+ .
+
+TypeParams<.out IToken/*!*/ tok, out List<TypeVariable>/*!*/ typeParams.>
+= (.Contract.Ensures(Contract.ValueAtReturn(out tok) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); List<IToken>/*!*/ typeParamToks; .)
+ "<" (. tok = t; .)
+ Idents<out typeParamToks>
+ ">"
+ (.
+ typeParams = new List<TypeVariable> ();
+ foreach(Token/*!*/ id in typeParamToks){
+ Contract.Assert(id != null);
+ typeParams.Add(new TypeVariable(id, id.val));}
+ .)
+ .
+
+Types<.List<Bpl.Type>/*!*/ ts.>
+= (. Contract.Requires(ts != null); Bpl.Type/*!*/ ty; .)
+ Type<out ty> (. ts.Add(ty); .)
+ { "," Type<out ty> (. ts.Add(ty); .)
+ }
+ .
+
+
+/*------------------------------------------------------------------------*/
+Consts<.out List<Variable>/*!*/ ds.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out ds) != null); IToken/*!*/ y; List<TypedIdent>/*!*/ xs;
+ ds = new List<Variable>();
+ bool u = false; QKeyValue kv = null;
+ bool ChildrenComplete = false;
+ List<ConstantParent/*!*/> Parents = null; .)
+ "const" (. y = t; .)
+ { Attribute<ref kv> }
+ [ "unique" (. u = true; .)
+ ]
+ IdsType<out xs>
+ [ OrderSpec<out ChildrenComplete, out Parents> ]
+ (. bool makeClone = false;
+ foreach(TypedIdent/*!*/ x in xs){
+ Contract.Assert(x != null);
+
+ // ensure that no sharing is introduced
+ List<ConstantParent/*!*/> ParentsClone;
+ if (makeClone && Parents != null) {
+ ParentsClone = new List<ConstantParent/*!*/> ();
+ foreach (ConstantParent/*!*/ p in Parents){
+ Contract.Assert(p != null);
+ ParentsClone.Add(new ConstantParent (
+ new IdentifierExpr (p.Parent.tok, p.Parent.Name),
+ p.Unique));}
+ } else {
+ ParentsClone = Parents;
+ }
+ makeClone = true;
+
+ ds.Add(new Constant(y, x, u, ParentsClone, ChildrenComplete, kv));
+ }
+ .)
+ ";"
+ .
+
+OrderSpec<.out bool ChildrenComplete, out List<ConstantParent/*!*/> Parents.>
+= (.Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out Parents),true)); ChildrenComplete = false;
+ Parents = null;
+ bool u;
+ IToken/*!*/ parent; .)
+ "extends" (. Parents = new List<ConstantParent/*!*/> ();
+ u = false; .)
+ [
+ [ "unique" (. u = true; .)
+ ]
+ Ident<out parent> (. Parents.Add(new ConstantParent (
+ new IdentifierExpr(parent, parent.val), u)); .)
+ {
+ "," (. u = false; .)
+ [ "unique" (. u = true; .)
+ ]
+ Ident<out parent> (. Parents.Add(new ConstantParent (
+ new IdentifierExpr(parent, parent.val), u)); .)
+ }
+ ]
+ [ "complete" (. ChildrenComplete = true; .)
+ ]
+ .
+
+/*------------------------------------------------------------------------*/
+Function<.out List<Declaration>/*!*/ ds.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ ds = new List<Declaration>(); IToken/*!*/ z;
+ IToken/*!*/ typeParamTok;
+ var typeParams = new List<TypeVariable>();
+ var arguments = new List<Variable>();
+ TypedIdent/*!*/ tyd;
+ TypedIdent retTyd = null;
+ Bpl.Type/*!*/ retTy;
+ QKeyValue argKv = null;
+ QKeyValue kv = null;
+ Expr definition = null;
+ Expr/*!*/ tmp;
+ .)
+ "function" { Attribute<ref kv> } Ident<out z>
+ [ TypeParams<out typeParamTok, out typeParams> ]
+ "("
+ [ VarOrType<out tyd, out argKv> (. arguments.Add(new Formal(tyd.tok, tyd, true, argKv)); .)
+ { "," VarOrType<out tyd, out argKv> (. arguments.Add(new Formal(tyd.tok, tyd, true, argKv)); .)
+ } ] ")"
+ (. argKv = null; .)
+ (
+ "returns" "(" VarOrType<out retTyd, out argKv> ")"
+ |
+ ":" Type<out retTy> (. retTyd = new TypedIdent(retTy.tok, TypedIdent.NoName, retTy); .)
+ )
+ ( "{" Expression<out tmp> (. definition = tmp; .) "}" | ";" )
+ (.
+ if (retTyd == null) {
+ // construct a dummy type for the case of syntax error
+ retTyd = new TypedIdent(t, TypedIdent.NoName, new BasicType(t, SimpleType.Int));
+ }
+ Function/*!*/ func = new Function(z, z.val, typeParams, arguments,
+ new Formal(retTyd.tok, retTyd, false, argKv), null, kv);
+ Contract.Assert(func != null);
+ ds.Add(func);
+ bool allUnnamed = true;
+ foreach(Formal/*!*/ f in arguments){
+ Contract.Assert(f != null);
+ if (f.TypedIdent.HasName) {
+ allUnnamed = false;
+ break;
+ }
+ }
+ if (!allUnnamed) {
+ Bpl.Type prevType = null;
+ for (int i = arguments.Count; 0 <= --i; ) {
+ TypedIdent/*!*/ curr = cce.NonNull(arguments[i]).TypedIdent;
+ if (curr.HasName) {
+ // the argument was given as both an identifier and a type
+ prevType = curr.Type;
+ } else {
+ // the argument was given as just one "thing", which syntactically parsed as a type
+ if (prevType == null) {
+ this.errors.SemErr(curr.tok, "the type of the last parameter is unspecified");
+ break;
+ }
+ Bpl.Type ty = curr.Type;
+ var uti = ty as UnresolvedTypeIdentifier;
+ if (uti != null && uti.Arguments.Count == 0) {
+ // the given "thing" was just an identifier, so let's use it as the name of the parameter
+ curr.Name = uti.Name;
+ curr.Type = prevType;
+ } else {
+ this.errors.SemErr(curr.tok, "expecting an identifier as parameter name");
+ }
+ }
+ }
+ }
+ if (definition != null) {
+ // generate either an axiom or a function body
+ if (QKeyValue.FindBoolAttribute(kv, "inline")) {
+ func.Body = definition;
+ } else {
+ ds.Add(func.CreateDefinitionAxiom(definition, kv));
+ }
+ }
+ .)
+ .
+
+VarOrType<out TypedIdent/*!*/ tyd, out QKeyValue kv>
+= (.
+ Contract.Ensures(Contract.ValueAtReturn(out tyd) != null);
+ string/*!*/ varName = TypedIdent.NoName;
+ Bpl.Type/*!*/ ty;
+ IToken/*!*/ tok;
+ kv = null;
+ .)
+ { Attribute<ref kv> }
+ Type<out ty> (. tok = ty.tok; .)
+ [ ":" (. var uti = ty as UnresolvedTypeIdentifier;
+ if (uti != null && uti.Arguments.Count == 0) {
+ varName = uti.Name;
+ } else {
+ this.SemErr("expected identifier before ':'");
+ }
+ .)
+ Type<out ty>
+ ]
+ (. tyd = new TypedIdent(tok, varName, ty); .)
+ .
+
+/*------------------------------------------------------------------------*/
+Axiom<out Axiom/*!*/ m>
+= (.Contract.Ensures(Contract.ValueAtReturn(out m) != null); Expr/*!*/ e; QKeyValue kv = null; .)
+ "axiom"
+ { Attribute<ref kv> }
+ (. IToken/*!*/ x = t; .)
+ Proposition<out e> ";" (. m = new Axiom(x,e, null, kv); .)
+ .
+
+/*------------------------------------------------------------------------*/
+UserDefinedTypes<.out List<Declaration/*!*/>/*!*/ ts.>
+= (. Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out ts))); Declaration/*!*/ decl; QKeyValue kv = null; ts = new List<Declaration/*!*/> (); .)
+ "type"
+ { Attribute<ref kv> }
+ UserDefinedType<out decl, kv> (. ts.Add(decl); .)
+ { "," UserDefinedType<out decl, kv> (. ts.Add(decl); .) }
+ ";"
+ .
+
+UserDefinedType<out Declaration/*!*/ decl, QKeyValue kv>
+= (. Contract.Ensures(Contract.ValueAtReturn(out decl) != null); IToken/*!*/ id; List<IToken>/*!*/ paramTokens = new List<IToken> ();
+ Bpl.Type/*!*/ body = dummyType; bool synonym = false; .)
+ Ident<out id>
+ [ WhiteSpaceIdents<out paramTokens> ]
+ [
+ "=" Type<out body>
+ (. synonym = true; .)
+ ]
+ (.
+ if (synonym) {
+ List<TypeVariable>/*!*/ typeParams = new List<TypeVariable>();
+ foreach(Token/*!*/ t in paramTokens){
+ Contract.Assert(t != null);
+ typeParams.Add(new TypeVariable(t, t.val));}
+ decl = new TypeSynonymDecl(id, id.val, typeParams, body, kv);
+ } else {
+ decl = new TypeCtorDecl(id, id.val, paramTokens.Count, kv);
+ }
+ .)
+ .
+
+
+/*------------------------------------------------------------------------*/
+Procedure<out Procedure/*!*/ proc, out /*maybe null*/ Implementation impl>
+= (. Contract.Ensures(Contract.ValueAtReturn(out proc) != null); IToken/*!*/ x;
+ List<TypeVariable>/*!*/ typeParams;
+ List<Variable>/*!*/ ins, outs;
+ List<Requires>/*!*/ pre = new List<Requires>();
+ List<IdentifierExpr>/*!*/ mods = new List<IdentifierExpr>();
+ List<Ensures>/*!*/ post = new List<Ensures>();
+
+ List<Variable>/*!*/ locals = new List<Variable>();
+ StmtList/*!*/ stmtList;
+ QKeyValue kv = null;
+ impl = null;
+ .)
+
+ "procedure"
+ ProcSignature<true, out x, out typeParams, out ins, out outs, out kv>
+ ( ";"
+ { Spec<pre, mods, post> }
+ | { Spec<pre, mods, post> }
+ ImplBody<out locals, out stmtList>
+ (.
+ impl = new Implementation(x, x.val, typeParams,
+ Formal.StripWhereClauses(ins), Formal.StripWhereClauses(outs), locals, stmtList, kv == null ? null : (QKeyValue)kv.Clone(), this.errors);
+ .)
+ )
+ (. proc = new Procedure(x, x.val, typeParams, ins, outs, pre, mods, post, kv); .)
+ .
+
+
+Implementation<out Implementation/*!*/ impl>
+= (. Contract.Ensures(Contract.ValueAtReturn(out impl) != null); IToken/*!*/ x;
+ List<TypeVariable>/*!*/ typeParams;
+ List<Variable>/*!*/ ins, outs;
+ List<Variable>/*!*/ locals;
+ StmtList/*!*/ stmtList;
+ QKeyValue kv;
+ .)
+
+ "implementation"
+ ProcSignature<false, out x, out typeParams, out ins, out outs, out kv>
+ ImplBody<out locals, out stmtList>
+ (. impl = new Implementation(x, x.val, typeParams, ins, outs, locals, stmtList, kv, this.errors); .)
+ .
+
+
+ProcSignature<.bool allowWhereClausesOnFormals, out IToken/*!*/ name, out List<TypeVariable>/*!*/ typeParams,
+ out List<Variable>/*!*/ ins, out List<Variable>/*!*/ outs, out QKeyValue kv.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out name) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ins) != null); Contract.Ensures(Contract.ValueAtReturn(out outs) != null);
+ IToken/*!*/ typeParamTok; typeParams = new List<TypeVariable>();
+ outs = new List<Variable>(); kv = null; .)
+ { Attribute<ref kv> }
+ Ident<out name>
+ [ TypeParams<out typeParamTok, out typeParams> ]
+ ProcFormals<true, allowWhereClausesOnFormals, out ins>
+ [ "returns" ProcFormals<false, allowWhereClausesOnFormals, out outs> ]
+ .
+
+
+Spec<.List<Requires>/*!*/ pre, List<IdentifierExpr>/*!*/ mods, List<Ensures>/*!*/ post.>
+= (.Contract.Requires(pre != null); Contract.Requires(mods != null); Contract.Requires(post != null); List<IToken>/*!*/ ms; .)
+ ( "modifies"
+ [ Idents<out ms> (. foreach(IToken/*!*/ m in ms){
+ Contract.Assert(m != null);
+ mods.Add(new IdentifierExpr(m, m.val));
+ }
+ .)
+ ] ";"
+ | "free" SpecPrePost<true, pre, post>
+ | SpecPrePost<false, pre, post>
+ )
+ .
+
+SpecPrePost<.bool free, List<Requires>/*!*/ pre, List<Ensures>/*!*/ post.>
+= (. Contract.Requires(pre != null); Contract.Requires(post != null); Expr/*!*/ e; Token tok = null; QKeyValue kv = null; .)
+ ( "requires" (. tok = t; .)
+ { Attribute<ref kv> }
+ Proposition<out e> ";" (. pre.Add(new Requires(tok, free, e, null, kv)); .)
+ | "ensures" (. tok = t; .)
+ { Attribute<ref kv> }
+ Proposition<out e> ";" (. post.Add(new Ensures(tok, free, e, null, kv)); .)
+ )
+ .
+
+/*------------------------------------------------------------------------*/
+
+ImplBody<.out List<Variable>/*!*/ locals, out StmtList/*!*/ stmtList.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); locals = new List<Variable>(); .)
+ "{"
+ { LocalVars<locals> }
+ StmtList<out stmtList>
+ .
+
+/* the StmtList also reads the final curly brace */
+StmtList<out StmtList/*!*/ stmtList>
+= (. Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); List<BigBlock/*!*/> bigblocks = new List<BigBlock/*!*/>();
+ /* built-up state for the current BigBlock: */
+ IToken startToken = null; string currentLabel = null;
+ List<Cmd> cs = null; /* invariant: startToken != null ==> cs != null */
+ /* temporary variables: */
+ IToken label; Cmd c; BigBlock b;
+ StructuredCmd ec = null; StructuredCmd/*!*/ ecn;
+ TransferCmd tc = null; TransferCmd/*!*/ tcn;
+ .)
+
+ {
+ ( LabelOrCmd<out c, out label>
+ (. if (c != null) {
+ // LabelOrCmd read a Cmd
+ Contract.Assert(label == null);
+ if (startToken == null) { startToken = c.tok; cs = new List<Cmd>(); }
+ Contract.Assert(cs != null);
+ cs.Add(c);
+ } else {
+ // LabelOrCmd read a label
+ Contract.Assert(label != null);
+ if (startToken != null) {
+ Contract.Assert(cs != null);
+ // dump the built-up state into a BigBlock
+ b = new BigBlock(startToken, currentLabel, cs, null, null);
+ bigblocks.Add(b);
+ cs = null;
+ }
+ startToken = label;
+ currentLabel = label.val;
+ cs = new List<Cmd>();
+ }
+ .)
+
+ | StructuredCmd<out ecn>
+ (. ec = ecn;
+ if (startToken == null) { startToken = ec.tok; cs = new List<Cmd>(); }
+ Contract.Assert(cs != null);
+ b = new BigBlock(startToken, currentLabel, cs, ec, null);
+ bigblocks.Add(b);
+ startToken = null; currentLabel = null; cs = null;
+ .)
+
+ | TransferCmd<out tcn>
+ (. tc = tcn;
+ if (startToken == null) { startToken = tc.tok; cs = new List<Cmd>(); }
+ Contract.Assert(cs != null);
+ b = new BigBlock(startToken, currentLabel, cs, null, tc);
+ bigblocks.Add(b);
+ startToken = null; currentLabel = null; cs = null;
+ .)
+
+ )
+ }
+ "}"
+ (. IToken/*!*/ endCurly = t;
+ if (startToken == null && bigblocks.Count == 0) {
+ startToken = t; cs = new List<Cmd>();
+ }
+ if (startToken != null) {
+ Contract.Assert(cs != null);
+ b = new BigBlock(startToken, currentLabel, cs, null, null);
+ bigblocks.Add(b);
+ }
+
+ stmtList = new StmtList(bigblocks, endCurly);
+ .)
+ .
+
+TransferCmd<out TransferCmd/*!*/ tc>
+= (. Contract.Ensures(Contract.ValueAtReturn(out tc) != null); tc = dummyTransferCmd;
+ Token y; List<IToken>/*!*/ xs;
+ List<String> ss = new List<String>();
+ .)
+ ( "goto" (. y = t; .)
+ Idents<out xs> (. foreach(IToken/*!*/ s in xs){
+ Contract.Assert(s != null);
+ ss.Add(s.val); }
+ tc = new GotoCmd(y, ss);
+ .)
+ | "return" (. tc = new ReturnCmd(t); .)
+ ) ";"
+ .
+
+StructuredCmd<out StructuredCmd/*!*/ ec>
+= (. Contract.Ensures(Contract.ValueAtReturn(out ec) != null); ec = dummyStructuredCmd; Contract.Assume(cce.IsPeerConsistent(ec));
+ IfCmd/*!*/ ifcmd; WhileCmd/*!*/ wcmd; BreakCmd/*!*/ bcmd;
+ .)
+ ( IfCmd<out ifcmd> (. ec = ifcmd; .)
+ | WhileCmd<out wcmd> (. ec = wcmd; .)
+ | BreakCmd<out bcmd> (. ec = bcmd; .)
+ )
+ .
+
+IfCmd<out IfCmd/*!*/ ifcmd>
+= (. Contract.Ensures(Contract.ValueAtReturn(out ifcmd) != null); IToken/*!*/ x;
+ Expr guard;
+ StmtList/*!*/ thn;
+ IfCmd/*!*/ elseIf; IfCmd elseIfOption = null;
+ StmtList/*!*/ els; StmtList elseOption = null;
+ .)
+ "if" (. x = t; .)
+ Guard<out guard>
+ "{" StmtList<out thn>
+ [ "else"
+ ( IfCmd<out elseIf> (. elseIfOption = elseIf; .)
+ | "{"
+ StmtList<out els> (. elseOption = els; .)
+ )
+ ]
+ (. ifcmd = new IfCmd(x, guard, thn, elseIfOption, elseOption); .)
+ .
+
+WhileCmd<out WhileCmd/*!*/ wcmd>
+= (. Contract.Ensures(Contract.ValueAtReturn(out wcmd) != null); IToken/*!*/ x; Token z;
+ Expr guard; Expr/*!*/ e; bool isFree;
+ List<PredicateCmd/*!*/> invariants = new List<PredicateCmd/*!*/>();
+ StmtList/*!*/ body;
+ QKeyValue kv = null;
+ .)
+ "while" (. x = t; .)
+ Guard<out guard> (. Contract.Assume(guard == null || cce.Owner.None(guard)); .)
+ { (. isFree = false; z = la/*lookahead token*/; .)
+ [ "free" (. isFree = true; .)
+ ]
+ "invariant"
+ { Attribute<ref kv> }
+ Expression<out e> (. if (isFree) {
+ invariants.Add(new AssumeCmd(z, e, kv));
+ } else {
+ invariants.Add(new AssertCmd(z, e, kv));
+ }
+ kv = null;
+ .)
+ ";"
+ }
+ "{"
+ StmtList<out body> (. wcmd = new WhileCmd(x, guard, invariants, body); .)
+ .
+
+Guard<out Expr e>
+= (. Expr/*!*/ ee; e = null; .)
+ "("
+ ( "*" (. e = null; .)
+ | Expression<out ee> (. e = ee; .)
+ )
+ ")"
+ .
+
+BreakCmd<out BreakCmd/*!*/ bcmd>
+= (.Contract.Ensures(Contract.ValueAtReturn(out bcmd) != null); IToken/*!*/ x; IToken/*!*/ y;
+ string breakLabel = null;
+ .)
+ "break" (. x = t; .)
+ [ Ident<out y> (. breakLabel = y.val; .)
+ ] ";" (. bcmd = new BreakCmd(x, breakLabel); .)
+ .
+
+/*------------------------------------------------------------------------*/
+
+LabelOrCmd<out Cmd c, out IToken label>
+/* ensures (c == null) != (label != null) */
+= (. IToken/*!*/ x; Expr/*!*/ e;
+ List<IToken>/*!*/ xs;
+ List<IdentifierExpr> ids;
+ c = dummyCmd; label = null;
+ Cmd/*!*/ cn;
+ QKeyValue kv = null;
+ .)
+ ( LabelOrAssign<out c, out label>
+ | "assert" (. x = t; .)
+ { Attribute<ref kv> }
+ Proposition<out e> (. c = new AssertCmd(x, e, kv); .)
+ ";"
+ | "assume" (. x = t; .)
+ { Attribute<ref kv> }
+ Proposition<out e> (. c = new AssumeCmd(x, e, kv); .)
+ ";"
+ | "havoc" (. x = t; .)
+ Idents<out xs> ";" (. ids = new List<IdentifierExpr>();
+ foreach(IToken/*!*/ y in xs){
+ Contract.Assert(y != null);
+ ids.Add(new IdentifierExpr(y, y.val));
+ }
+ c = new HavocCmd(x,ids);
+ .)
+ | CallCmd<out cn> ";" (. c = cn; .)
+ | ParCallCmd<out cn> (. c = cn; .)
+ | "yield" (. x = t; .)
+ ";" (. c = new YieldCmd(x); .)
+ )
+ .
+
+/*------------------------------------------------------------------------*/
+
+LabelOrAssign<out Cmd c, out IToken label>
+/* ensures (c == null) != (label != null) */
+= (. IToken/*!*/ id; IToken/*!*/ x, y; Expr/*!*/ e0;
+ c = dummyCmd; label = null;
+ AssignLhs/*!*/ lhs;
+ List<AssignLhs/*!*/>/*!*/ lhss;
+ List<Expr/*!*/>/*!*/ rhss;
+ List<Expr/*!*/>/*!*/ indexes;
+ .)
+ Ident<out id> (. x = t; .)
+ ( ":" (. c = null; label = x; .)
+
+ | (. lhss = new List<AssignLhs/*!*/>(); .)
+ (. lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val)); .)
+
+ { MapAssignIndex<out y, out indexes> (. lhs = new MapAssignLhs(y, lhs, indexes); .) }
+ (. lhss.Add(lhs); .)
+
+ { ","
+ Ident<out id>
+ (. lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val)); .)
+ { MapAssignIndex<out y, out indexes> (. lhs = new MapAssignLhs(y, lhs, indexes); .) }
+ (. lhss.Add(lhs); .)
+ }
+
+ ":=" (. x = t; /* use location of := */ .)
+ Expression<out e0> (. rhss = new List<Expr/*!*/> ();
+ rhss.Add(e0); .)
+ { ","
+ Expression<out e0> (. rhss.Add(e0); .)
+ }
+ ";" (. c = new AssignCmd(x, lhss, rhss); .)
+ )
+ .
+
+MapAssignIndex<.out IToken/*!*/ x, out List<Expr/*!*/>/*!*/ indexes.>
+= (.Contract.Ensures(Contract.ValueAtReturn(out x) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out indexes))); indexes = new List<Expr/*!*/> ();
+ Expr/*!*/ e;
+ .)
+ "[" (. x = t; .)
+ [
+ Expression<out e> (. indexes.Add(e); .)
+ { ","
+ Expression<out e> (. indexes.Add(e); .)
+ }
+ ]
+ "]"
+ .
+
+/*------------------------------------------------------------------------*/
+CallCmd<out Cmd c>
+= (. Contract.Ensures(Contract.ValueAtReturn(out c) != null);
+ IToken x;
+ bool isAsync = false;
+ bool isFree = false;
+ QKeyValue kv = null;
+ c = null;
+ .)
+ [ "async" (. isAsync = true; .)
+ ]
+ [ "free" (. isFree = true; .)
+ ]
+ "call" (. x = t; .)
+ { Attribute<ref kv> }
+ CallParams<isAsync, isFree, kv, x, out c> (. .)
+ .
+
+ParCallCmd<out Cmd d>
+= (. Contract.Ensures(Contract.ValueAtReturn(out d) != null);
+ IToken x;
+ QKeyValue kv = null;
+ Cmd c = null;
+ List<CallCmd> callCmds = new List<CallCmd>();
+ .)
+ "par" (. x = t; .)
+ { Attribute<ref kv> }
+ CallParams<false, false, kv, x, out c> (. callCmds.Add((CallCmd)c); .)
+ { "|" CallParams<false, false, kv, x, out c> (. callCmds.Add((CallCmd)c); .)
+ }
+ ";" (. d = new ParCallCmd(x, callCmds, kv); .)
+ .
+
+CallParams<bool isAsync, bool isFree, QKeyValue kv, IToken x, out Cmd c>
+= (.
+ List<IdentifierExpr> ids = new List<IdentifierExpr>();
+ List<Expr> es = new List<Expr>();
+ Expr en;
+ IToken first;
+ IToken p;
+ c = null;
+ .)
+ Ident<out first>
+ ( "("
+ [ Expression<out en> (. es.Add(en); .)
+ { "," Expression<out en> (. es.Add(en); .)
+ }
+ ]
+ ")" (. c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync; .)
+ |
+ (. ids.Add(new IdentifierExpr(first, first.val)); .)
+ [ "," Ident<out p> (. ids.Add(new IdentifierExpr(p, p.val)); .)
+ { "," Ident<out p> (. ids.Add(new IdentifierExpr(p, p.val)); .)
+ }
+ ] ":="
+ Ident<out first> "("
+ [ Expression<out en> (. es.Add(en); .)
+ { "," Expression<out en> (. es.Add(en); .)
+ }
+ ]
+ ")" (. c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync; .)
+ )
+ .
+
+/*------------------------------------------------------------------------*/
+Proposition<out Expr/*!*/ e>
+=(.Contract.Ensures(Contract.ValueAtReturn(out e) != null);.)
+ Expression<out e>
+ .
+
+/*------------------------------------------------------------------------*/
+Idents<.out List<IToken>/*!*/ xs.>
+= (.Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>(); .)
+ Ident<out id> (. xs.Add(id); .)
+ { "," Ident<out id> (. xs.Add(id); .)
+ }
+ .
+
+/*------------------------------------------------------------------------*/
+WhiteSpaceIdents<.out List<IToken>/*!*/ xs.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>(); .)
+ Ident<out id> (. xs.Add(id); .)
+ { Ident<out id> (. xs.Add(id); .)
+ }
+ .
+
+/*------------------------------------------------------------------------*/
+Expressions<.out List<Expr>/*!*/ es.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out es) != null); Expr/*!*/ e; es = new List<Expr>(); .)
+ Expression<out e> (. es.Add(e); .)
+ { "," Expression<out e> (. es.Add(e); .)
+ }
+ .
+
+/*------------------------------------------------------------------------*/
+Expression<.out Expr/*!*/ e0.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
+ ImpliesExpression<false, out e0>
+ { EquivOp (. x = t; .)
+ ImpliesExpression<false, out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Iff, e0, e1); .)
+ }
+ .
+
+EquivOp = "<==>" | '\u21d4'.
+
+/*------------------------------------------------------------------------*/
+ImpliesExpression<bool noExplies, out Expr/*!*/ e0>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
+ LogicalExpression<out e0>
+ [
+ ImpliesOp (. x = t; .)
+ /* recurse because implication is right-associative */
+ ImpliesExpression<true, out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e0, e1); .)
+ |
+ ExpliesOp (. if (noExplies)
+ this.SemErr("illegal mixture of ==> and <==, use parentheses to disambiguate");
+ x = t; .)
+ LogicalExpression<out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0); .)
+ /* loop because explies is left-associative */
+ {
+ ExpliesOp (. x = t; .)
+ LogicalExpression<out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0); .)
+ }
+ ]
+ .
+
+ImpliesOp = "==>" | '\u21d2'.
+ExpliesOp = "<==" | '\u21d0'.
+
+/*------------------------------------------------------------------------*/
+LogicalExpression<out Expr/*!*/ e0>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
+ RelationalExpression<out e0>
+ [ AndOp (. x = t; .)
+ RelationalExpression<out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1); .)
+ { AndOp (. x = t; .)
+ RelationalExpression<out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1); .)
+ }
+ | OrOp (. x = t; .)
+ RelationalExpression<out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1); .)
+ { OrOp (. x = t; .)
+ RelationalExpression<out e1>
+ (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1); .)
+ }
+ ]
+ .
+
+AndOp = "&&" | '\u2227'.
+OrOp = "||" | '\u2228'.
+
+/*------------------------------------------------------------------------*/
+RelationalExpression<out Expr/*!*/ e0>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op; .)
+ BvTerm<out e0>
+ [ RelOp<out x, out op>
+ BvTerm<out e1> (. e0 = Expr.Binary(x, op, e0, e1); .)
+ ]
+ .
+
+RelOp<out IToken/*!*/ x, out BinaryOperator.Opcode op>
+= (.Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/; .)
+ ( "==" (. x = t; op=BinaryOperator.Opcode.Eq; .)
+ | "<" (. x = t; op=BinaryOperator.Opcode.Lt; .)
+ | ">" (. x = t; op=BinaryOperator.Opcode.Gt; .)
+ | "<=" (. x = t; op=BinaryOperator.Opcode.Le; .)
+ | ">=" (. x = t; op=BinaryOperator.Opcode.Ge; .)
+ | "!=" (. x = t; op=BinaryOperator.Opcode.Neq; .)
+ | "<:" (. x = t; op=BinaryOperator.Opcode.Subtype; .)
+ | '\u2260' (. x = t; op=BinaryOperator.Opcode.Neq; .)
+ | '\u2264' (. x = t; op=BinaryOperator.Opcode.Le; .)
+ | '\u2265' (. x = t; op=BinaryOperator.Opcode.Ge; .)
+ )
+ .
+
+/*------------------------------------------------------------------------*/
+BvTerm<out Expr/*!*/ e0>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
+ Term<out e0>
+ { "++" (. x = t; .)
+ Term<out e1> (. e0 = new BvConcatExpr(x, e0, e1); .)
+ }
+ .
+
+
+/*------------------------------------------------------------------------*/
+Term<out Expr/*!*/ e0>
+= (.Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op; .)
+ Factor<out e0>
+ { AddOp<out x, out op>
+ Factor<out e1> (. e0 = Expr.Binary(x, op, e0, e1); .)
+ }
+ .
+
+AddOp<out IToken/*!*/ x, out BinaryOperator.Opcode op>
+= (.Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/; .)
+ ( "+" (. x = t; op=BinaryOperator.Opcode.Add; .)
+ | "-" (. x = t; op=BinaryOperator.Opcode.Sub; .)
+ )
+ .
+
+/*------------------------------------------------------------------------*/
+Factor<out Expr/*!*/ e0>
+= (.Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op; .)
+ Power<out e0>
+ { MulOp<out x, out op>
+ Power<out e1> (. e0 = Expr.Binary(x, op, e0, e1); .)
+ }
+ .
+
+MulOp<out IToken/*!*/ x, out BinaryOperator.Opcode op>
+= (. Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/; .)
+ ( "*" (. x = t; op=BinaryOperator.Opcode.Mul; .)
+ | "div" (. x = t; op=BinaryOperator.Opcode.Div; .)
+ | "mod" (. x = t; op=BinaryOperator.Opcode.Mod; .)
+ | "/" (. x = t; op=BinaryOperator.Opcode.RealDiv; .)
+ )
+ .
+
+/*------------------------------------------------------------------------*/
+Power<out Expr/*!*/ e0>
+= (.Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; .)
+ UnaryExpression<out e0>
+ [
+ "**" (. x = t; .)
+ /* recurse because exponentation is right-associative */
+ Power<out e1> (. e0 = Expr.Binary(x, BinaryOperator.Opcode.Pow, e0, e1); .)
+ ]
+ .
+
+/*------------------------------------------------------------------------*/
+UnaryExpression<out Expr/*!*/ e>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
+ e = dummyExpr;
+ .)
+ ( "-" (. x = t; .)
+ UnaryExpression<out e> (. e = Expr.Unary(x, UnaryOperator.Opcode.Neg, e); .)
+ | NegOp (. x = t; .)
+ UnaryExpression<out e> (. e = Expr.Unary(x, UnaryOperator.Opcode.Not, e); .)
+ | CoercionExpression<out e>
+ )
+ .
+
+NegOp = "!" | '\u00ac'.
+
+/*------------------------------------------------------------------------*/
+
+/* This production creates ambiguities, because types can start with "<"
+ (polymorphic map types), but can also be followed by "<" (inequalities).
+ Coco deals with these ambiguities in a reasonable way by preferring to read
+ further types (type arguments) over relational symbols. E.g., "5 : C < 0"
+ will cause a parse error because "<" is treated as the beginning of a
+ map type. */
+
+CoercionExpression<out Expr/*!*/ e>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
+ Bpl.Type/*!*/ coercedTo;
+ BigNum bn;
+ .)
+ ArrayExpression<out e>
+ { ":" (. x = t; .)
+ (
+ Type<out coercedTo> (. e = Expr.CoerceType(x, e, coercedTo); .)
+ |
+ Nat<out bn> /* This means that we really look at a bitvector
+ expression t[a:b] */
+ (. if (!(e is LiteralExpr) || !((LiteralExpr)e).isBigNum) {
+ this.SemErr("arguments of extract need to be integer literals");
+ e = new BvBounds(x, bn, BigNum.ZERO);
+ } else {
+ e = new BvBounds(x, bn, ((LiteralExpr)e).asBigNum);
+ }
+ .)
+ )
+ }
+ .
+
+/*------------------------------------------------------------------------*/
+ArrayExpression<out Expr/*!*/ e>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
+ Expr/*!*/ index0 = dummyExpr; Expr/*!*/ e1;
+ bool store; bool bvExtract;
+ List<Expr>/*!*/ allArgs = dummyExprSeq;
+ .)
+ AtomExpression<out e>
+ { "[" (. x = t; allArgs = new List<Expr> ();
+ allArgs.Add(e);
+ store = false; bvExtract = false; .)
+ [
+ Expression<out index0>
+ (. if (index0 is BvBounds)
+ bvExtract = true;
+ else
+ allArgs.Add(index0);
+ .)
+ { "," Expression<out e1>
+ (. if (bvExtract || e1 is BvBounds)
+ this.SemErr("bitvectors only have one dimension");
+ allArgs.Add(e1);
+ .)
+ }
+ [ ":=" Expression<out e1>
+ (. if (bvExtract || e1 is BvBounds)
+ this.SemErr("assignment to bitvectors is not possible");
+ allArgs.Add(e1); store = true;
+ .)
+ ]
+ | ":=" Expression<out e1> (. allArgs.Add(e1); store = true; .)
+ ]
+ "]"
+ (. if (store)
+ e = new NAryExpr(x, new MapStore(x, allArgs.Count - 2), allArgs);
+ else if (bvExtract)
+ e = new BvExtractExpr(x, e,
+ ((BvBounds)index0).Upper.ToIntSafe,
+ ((BvBounds)index0).Lower.ToIntSafe);
+ else
+ e = new NAryExpr(x, new MapSelect(x, allArgs.Count - 1), allArgs);
+ .)
+ }
+ .
+
+
+/*------------------------------------------------------------------------*/
+AtomExpression<out Expr/*!*/ e>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x; int n; BigNum bn; BigDec bd;
+ List<Expr>/*!*/ es; List<Variable>/*!*/ ds; Trigger trig;
+ List<TypeVariable>/*!*/ typeParams;
+ IdentifierExpr/*!*/ id;
+ QKeyValue kv;
+ e = dummyExpr;
+ List<Variable>/*!*/ locals;
+ List<Block/*!*/>/*!*/ blocks;
+ .)
+ ( "false" (. e = new LiteralExpr(t, false); .)
+ | "true" (. e = new LiteralExpr(t, true); .)
+ | Nat<out bn> (. e = new LiteralExpr(t, bn); .)
+ | Dec<out bd> (. e = new LiteralExpr(t, bd); .)
+ | BvLit<out bn, out n> (. e = new LiteralExpr(t, bn, n); .)
+
+ | Ident<out x> (. id = new IdentifierExpr(x, x.val); e = id; .)
+ [ "("
+ ( Expressions<out es> (. e = new NAryExpr(x, new FunctionCall(id), es); .)
+ | /* empty */ (. e = new NAryExpr(x, new FunctionCall(id), new List<Expr>()); .)
+ )
+ ")"
+ ]
+
+ | "old" (. x = t; .)
+ "("
+ Expression<out e>
+ ")" (. e = new OldExpr(x, e); .)
+
+ | "int" (. x = t; .)
+ "("
+ Expression<out e>
+ ")" (. e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToInt), new List<Expr>{ e }); .)
+
+ | "real" (. x = t; .)
+ "("
+ Expression<out e>
+ ")" (. e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToReal), new List<Expr>{ e }); .)
+
+ | "(" ( Expression<out e> (. if (e is BvBounds)
+ this.SemErr("parentheses around bitvector bounds " +
+ "are not allowed"); .)
+ | Forall (. x = t; .)
+ QuantifierBody<x, out typeParams, out ds, out kv, out trig, out e>
+ (. if (typeParams.Count + ds.Count > 0)
+ e = new ForallExpr(x, typeParams, ds, kv, trig, e); .)
+ | Exists (. x = t; .)
+ QuantifierBody<x, out typeParams, out ds, out kv, out trig, out e>
+ (. if (typeParams.Count + ds.Count > 0)
+ e = new ExistsExpr(x, typeParams, ds, kv, trig, e); .)
+ | Lambda (. x = t; .)
+ QuantifierBody<x, out typeParams, out ds, out kv, out trig, out e>
+ (. if (trig != null)
+ SemErr("triggers not allowed in lambda expressions");
+ if (typeParams.Count + ds.Count > 0)
+ e = new LambdaExpr(x, typeParams, ds, kv, e); .)
+ )
+ ")"
+ | IfThenElseExpression<out e>
+ | CodeExpression<out locals, out blocks> (. e = new CodeExpr(locals, blocks); .)
+ )
+ .
+
+CodeExpression<.out List<Variable>/*!*/ locals, out List<Block/*!*/>/*!*/ blocks.>
+= (. Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out blocks))); locals = new List<Variable>(); Block/*!*/ b;
+ blocks = new List<Block/*!*/>();
+ .)
+ "|{"
+ { LocalVars<locals> }
+ SpecBlock<out b> (. blocks.Add(b); .)
+ { SpecBlock<out b> (. blocks.Add(b); .)
+ }
+ "}|"
+ .
+
+SpecBlock<out Block/*!*/ b>
+= (. Contract.Ensures(Contract.ValueAtReturn(out b) != null); IToken/*!*/ x; IToken/*!*/ y;
+ Cmd c; IToken label;
+ List<Cmd> cs = new List<Cmd>();
+ List<IToken>/*!*/ xs;
+ List<String> ss = new List<String>();
+ b = dummyBlock;
+ Expr/*!*/ e;
+ .)
+ Ident<out x> ":"
+ { LabelOrCmd<out c, out label>
+ (. if (c != null) {
+ Contract.Assert(label == null);
+ cs.Add(c);
+ } else {
+ Contract.Assert(label != null);
+ SemErr("SpecBlock's can only have one label");
+ }
+ .)
+ }
+ ( "goto" (. y = t; .)
+ Idents<out xs> (. foreach(IToken/*!*/ s in xs){
+ Contract.Assert(s != null);
+ ss.Add(s.val); }
+ b = new Block(x,x.val,cs,new GotoCmd(y,ss));
+ .)
+ | "return" Expression<out e>
+ (. b = new Block(x,x.val,cs,new ReturnExprCmd(t,e)); .)
+ )
+ ";"
+ .
+
+Attribute<ref QKeyValue kv>
+= (. Trigger trig = null; .)
+ AttributeOrTrigger<ref kv, ref trig> (. if (trig != null) this.SemErr("only attributes, not triggers, allowed here"); .)
+.
+
+AttributeOrTrigger<ref QKeyValue kv, ref Trigger trig>
+= (. IToken/*!*/ tok; Expr/*!*/ e; List<Expr>/*!*/ es;
+ string key;
+ List<object/*!*/> parameters; object/*!*/ param;
+ .)
+ "{" (. tok = t; .)
+ (
+ ":" ident (. key = t.val; parameters = new List<object/*!*/>(); .)
+ [ AttributeParameter<out param> (. parameters.Add(param); .)
+ { "," AttributeParameter<out param> (. parameters.Add(param); .)
+ }
+ ]
+ (. if (key == "nopats") {
+ if (parameters.Count == 1 && parameters[0] is Expr) {
+ e = (Expr)parameters[0];
+ if(trig==null){
+ trig = new Trigger(tok, false, new List<Expr> { e }, null);
+ } else {
+ trig.AddLast(new Trigger(tok, false, new List<Expr> { e }, null));
+ }
+ } else {
+ this.SemErr("the 'nopats' quantifier attribute expects a string-literal parameter");
+ }
+ } else {
+ if (kv==null) {
+ kv = new QKeyValue(tok, key, parameters, null);
+ } else {
+ kv.AddLast(new QKeyValue(tok, key, parameters, null));
+ }
+ }
+ .)
+ |
+ Expression<out e> (. es = new List<Expr> { e }; .)
+ { "," Expression<out e> (. es.Add(e); .)
+ } (. if (trig==null) {
+ trig = new Trigger(tok, true, es, null);
+ } else {
+ trig.AddLast(new Trigger(tok, true, es, null));
+ }
+ .)
+ )
+ "}"
+ .
+
+AttributeParameter<out object/*!*/ o>
+= (. Contract.Ensures(Contract.ValueAtReturn(out o) != null);
+ o = "error";
+ Expr/*!*/ e;
+ .)
+ ( string (. o = t.val.Substring(1, t.val.Length-2); .)
+ | Expression<out e> (. o = e; .)
+ )
+ .
+
+IfThenElseExpression<out Expr/*!*/ e>
+= (. Contract.Ensures(Contract.ValueAtReturn(out e) != null);
+ IToken/*!*/ tok;
+ Expr/*!*/ e0, e1, e2;
+ e = dummyExpr; .)
+ "if" (. tok = t; .) Expression<out e0> "then" Expression<out e1> "else" Expression<out e2>
+ (. e = new NAryExpr(tok, new IfThenElse(tok), new List<Expr>{ e0, e1, e2 }); .)
+ .
+
+
+QuantifierBody<.IToken/*!*/ q, out List<TypeVariable>/*!*/ typeParams, out List<Variable>/*!*/ ds,
+ out QKeyValue kv, out Trigger trig, out Expr/*!*/ body.>
+= (. Contract.Requires(q != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ds) != null); Contract.Ensures(Contract.ValueAtReturn(out body) != null);
+ trig = null; typeParams = new List<TypeVariable> ();
+ IToken/*!*/ tok;
+ kv = null;
+ ds = new List<Variable> ();
+ .)
+ (
+ TypeParams<out tok, out typeParams>
+ [ BoundVars<q, out ds> ]
+ |
+ BoundVars<q, out ds>
+ )
+ QSep
+ { AttributeOrTrigger<ref kv, ref trig> }
+ Expression<out body>
+ .
+
+Forall = "forall" | '\u2200'.
+Exists = "exists" | '\u2203'.
+Lambda = "lambda" | '\u03bb'.
+QSep = "::" | '\u2022'.
+
+/*------------------------------------------------------------------------*/
+Ident<out IToken/*!*/ x>
+=(.Contract.Ensures(Contract.ValueAtReturn(out x) != null);.)
+ ident (. x = t;
+ if (x.val.StartsWith("\\"))
+ x.val = x.val.Substring(1);
+ .)
+ .
+
+/*------------------------------------------------------------------------*/
+Nat<out BigNum n>
+=
+ digits
+ (. try {
+ n = BigNum.FromString(t.val);
+ } catch (FormatException) {
+ this.SemErr("incorrectly formatted number");
+ n = BigNum.ZERO;
+ }
+ .)
+ .
+
+/*------------------------------------------------------------------------*/
+Dec<out BigDec n>
+= (. string s = ""; .)
+ (
+ decimal (. s = t.val; .)
+ |
+ float (. s = t.val; .)
+ )
+ (. try {
+ n = BigDec.FromString(s);
+ } catch (FormatException) {
+ this.SemErr("incorrectly formatted number");
+ n = BigDec.ZERO;
+ }
+ .)
+ .
+
+/*------------------------------------------------------------------------*/
+BvLit<out BigNum n, out int m>
+=
+ bvlit
+ (.
+ int pos = t.val.IndexOf("bv");
+ string a = t.val.Substring(0, pos);
+ string b = t.val.Substring(pos + 2);
+ try {
+ n = BigNum.FromString(a);
+ m = Convert.ToInt32(b);
+ } catch (FormatException) {
+ this.SemErr("incorrectly formatted bitvector");
+ n = BigNum.ZERO;
+ m = 0;
+ }
+ .)
+ .
+END BoogiePL.
diff --git a/Source/Core/CommandLineOptions.cs b/Source/Core/CommandLineOptions.cs
index dbbb6fd0..e9aa3ceb 100644
--- a/Source/Core/CommandLineOptions.cs
+++ b/Source/Core/CommandLineOptions.cs
@@ -1,2143 +1,2185 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.IO;
-using System.Linq;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie {
- public class CommandLineOptionEngine
- {
- public readonly string ToolName;
- public readonly string DescriptiveToolName;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(ToolName != null);
- Contract.Invariant(DescriptiveToolName != null);
- Contract.Invariant(this._environment != null);
- Contract.Invariant(cce.NonNullElements(this._files));
- Contract.Invariant(this._fileTimestamp != null);
- }
-
- private string/*!*/ _environment = "";
-
- public string Environment {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return this._environment;
- }
- set {
- Contract.Requires(value != null);
- this._environment = value;
- }
- }
-
- private readonly List<string/*!*/>/*!*/ _files = new List<string/*!*/>();
-
- public IList<string/*!*/>/*!*/ Files {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IList<string>>()));
- Contract.Ensures(Contract.Result<IList<string>>().IsReadOnly);
- return this._files.AsReadOnly();
- }
- }
-
- public bool HelpRequested = false;
- public bool AttrHelpRequested = false;
-
- public CommandLineOptionEngine(string toolName, string descriptiveName) {
- Contract.Requires(toolName != null);
- Contract.Requires(descriptiveName != null);
- ToolName = toolName;
- DescriptiveToolName = descriptiveName;
- }
-
- public virtual string/*!*/ VersionNumber {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return cce.NonNull(cce.NonNull(System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location)).FileVersion);
- }
- }
- public virtual string/*!*/ VersionSuffix {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return " version " + VersionNumber + ", Copyright (c) 2003-2014, Microsoft.";
- }
- }
- public virtual string/*!*/ Version {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return DescriptiveToolName + VersionSuffix;
- }
- }
-
- private string/*!*/ _fileTimestamp = cce.NonNull(DateTime.Now.ToString("o")).Replace(':', '.');
-
- public string FileTimestamp {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return this._fileTimestamp;
- }
- set {
- Contract.Requires(value != null);
- this._fileTimestamp = value;
- }
- }
-
- public void ExpandFilename(ref string pattern, string logPrefix, string fileTimestamp) {
- if (pattern != null) {
- pattern = pattern.Replace("@PREFIX@", logPrefix).Replace("@TIME@", fileTimestamp);
- string fn = Files.Count == 0 ? "" : Files[Files.Count - 1];
- fn = fn.Replace('/', '-').Replace('\\', '-');
- pattern = pattern.Replace("@FILE@", fn);
- }
- }
-
- /// <summary>
- /// Process the option and modify "ps" accordingly.
- /// Return true if the option is one that is recognized.
- /// </summary>
- protected virtual bool ParseOption(string name, CommandLineParseState ps) {
- Contract.Requires(name != null);
- Contract.Requires(ps != null);
-
- switch (name) {
- case "help":
- case "?":
- if (ps.ConfirmArgumentCount(0)) {
- HelpRequested = true;
- }
- return true;
- case "attrHelp":
- if (ps.ConfirmArgumentCount(0)) {
- AttrHelpRequested = true;
- }
- return true;
- default:
- break;
- }
- return false; // unrecognized option
- }
-
- protected class CommandLineParseState
- {
- public string s;
- public bool hasColonArgument;
- public readonly string[]/*!*/ args;
- public int i;
- public int nextIndex;
- public bool EncounteredErrors;
- public readonly string ToolName;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(args != null);
- Contract.Invariant(0 <= i && i <= args.Length);
- Contract.Invariant(0 <= nextIndex && nextIndex <= args.Length);
- }
-
-
- public CommandLineParseState(string[] args, string toolName) {
- Contract.Requires(args != null);
- Contract.Requires(Contract.ForAll(0, args.Length, i => args[i] != null));
- Contract.Requires(toolName != null);
- Contract.Ensures(this.args == args);
- this.ToolName = toolName;
- this.s = null; // set later by client
- this.hasColonArgument = false; // set later by client
- this.args = args;
- this.i = 0;
- this.nextIndex = 0; // set later by client
- this.EncounteredErrors = false;
- }
-
- public bool CheckBooleanFlag(string flagName, ref bool flag, bool valueWhenPresent) {
- Contract.Requires(flagName != null);
- //modifies nextIndex, encounteredErrors, Console.Error.*;
- bool flagPresent = false;
-
- if ((s == "/" + flagName || s == "-" + flagName) && ConfirmArgumentCount(0)) {
- flag = valueWhenPresent;
- flagPresent = true;
- }
- return flagPresent;
- }
-
- public bool CheckBooleanFlag(string flagName, ref bool flag) {
- Contract.Requires(flagName != null);
- //modifies nextIndex, encounteredErrors, Console.Error.*;
- return CheckBooleanFlag(flagName, ref flag, true);
- }
-
- /// <summary>
- /// If there is one argument and it is a non-negative integer, then set "arg" to that number and return "true".
- /// Otherwise, emit error message, leave "arg" unchanged, and return "false".
- /// </summary>
- public bool GetNumericArgument(ref int arg) {
- //modifies nextIndex, encounteredErrors, Console.Error.*;
- return GetNumericArgument(ref arg, a => 0 <= a);
- }
-
- /// <summary>
- /// If there is one argument and the filtering predicate holds, then set "arg" to that number and return "true".
- /// Otherwise, emit error message, leave "arg" unchanged, and return "false".
- /// </summary>
- public bool GetNumericArgument(ref int arg, Predicate<int> filter) {
- Contract.Requires(filter != null);
-
- if (this.ConfirmArgumentCount(1)) {
- try {
- Contract.Assume(args[i] != null);
- Contract.Assert(args[i] is string); // needed to prove args[i].IsPeerConsistent
- int d = Convert.ToInt32(this.args[this.i]);
- if (filter == null || filter(d)) {
- arg = d;
- return true;
- }
- } catch (System.FormatException) {
- } catch (System.OverflowException) {
- }
- } else {
- return false;
- }
- Error("Invalid argument \"{0}\" to option {1}", args[this.i], this.s);
- return false;
- }
-
- /// <summary>
- /// If there is one argument and it is a non-negative integer less than "limit",
- /// then set "arg" to that number and return "true".
- /// Otherwise, emit error message, leave "arg" unchanged, and return "false".
- /// </summary>
- public bool GetNumericArgument(ref int arg, int limit) {
- Contract.Requires(this.i < args.Length);
- Contract.Ensures(Math.Min(arg, 0) <= Contract.ValueAtReturn(out arg) && Contract.ValueAtReturn(out arg) < limit);
- //modifies nextIndex, encounteredErrors, Console.Error.*;
- int a = arg;
- if (!GetNumericArgument(ref a)) {
- return false;
- } else if (a < limit) {
- arg = a;
- return true;
- } else {
- Error("Invalid argument \"{0}\" to option {1}", args[this.i], this.s);
- return false;
- }
- }
-
- /// <summary>
- /// If there is one argument and it is a non-negative real, then set "arg" to that number and return "true".
- /// Otherwise, emit an error message, leave "arg" unchanged, and return "false".
- /// </summary>
- public bool GetNumericArgument(ref double arg) {
- Contract.Ensures(Contract.ValueAtReturn(out arg) >= 0);
- //modifies nextIndex, encounteredErrors, Console.Error.*;
- if (this.ConfirmArgumentCount(1)) {
- try {
- Contract.Assume(args[i] != null);
- Contract.Assert(args[i] is string); // needed to prove args[i].IsPeerConsistent
- double d = Convert.ToDouble(this.args[this.i]);
- if (0 <= d) {
- arg = d;
- return true;
- }
- } catch (System.FormatException) {
- } catch (System.OverflowException) {
- }
- } else {
- return false;
- }
- Error("Invalid argument \"{0}\" to option {1}", args[this.i], this.s);
- return false;
- }
-
- public bool ConfirmArgumentCount(int argCount) {
- Contract.Requires(0 <= argCount);
- //modifies nextIndex, encounteredErrors, Console.Error.*;
- Contract.Ensures(Contract.Result<bool>() == (!(hasColonArgument && argCount != 1) && !(args.Length < i + argCount)));
- if (hasColonArgument && argCount != 1) {
- Error("\"{0}\" cannot take a colon argument", s);
- nextIndex = args.Length;
- return false;
- } else if (args.Length < i + argCount) {
- Error("\"{0}\" expects {1} argument{2}", s, argCount.ToString(), (string)(argCount == 1 ? "" : "s"));
- nextIndex = args.Length;
- return false;
- } else {
- nextIndex = i + argCount;
- return true;
- }
- }
-
- public void Error(string message, params string[] args) {
- Contract.Requires(args != null);
- Contract.Requires(message != null);
- //modifies encounteredErrors, Console.Error.*;
- Console.Error.WriteLine("{0}: Error: {1}", ToolName, String.Format(message, args));
- EncounteredErrors = true;
- }
- }
-
- public virtual void Usage() {
- Console.WriteLine("{0}: usage: {0} [ option ... ] [ filename ... ]", ToolName);
- Console.WriteLine(@" where <option> is one of
-
- ---- General options -------------------------------------------------------
-
- /help this message
- /attrHelp print a message about declaration attributes supported by
- this implementation");
- }
-
- public virtual void AttributeUsage() {
- }
-
- /// <summary>
- /// This method is called after all parsing is done, if no parse errors were encountered.
- /// </summary>
- public virtual void ApplyDefaultOptions() {
- }
-
- /// <summary>
- /// Parses the command-line arguments "args" into the global flag variables. Returns true
- /// if there were no errors.
- /// </summary>
- /// <param name="args">Consumed ("captured" and possibly modified) by the method.</param>
- public bool Parse([Captured] string[]/*!*/ args) {
- Contract.Requires(cce.NonNullElements(args));
-
- // save the command line options for the log files
- Environment += "Command Line Options: " + args.Concat(" ");
- args = cce.NonNull((string[])args.Clone()); // the operations performed may mutate the array, so make a copy
- var ps = new CommandLineParseState(args, ToolName);
-
- while (ps.i < args.Length) {
- cce.LoopInvariant(ps.args == args);
- string arg = args[ps.i];
- Contract.Assert(arg != null);
- ps.s = arg.Trim();
-
- bool isOption = ps.s.StartsWith("-") || ps.s.StartsWith("/");
- int colonIndex = ps.s.IndexOf(':');
- if (0 <= colonIndex && isOption) {
- ps.hasColonArgument = true;
- args[ps.i] = ps.s.Substring(colonIndex + 1);
- ps.s = ps.s.Substring(0, colonIndex);
- } else {
- ps.i++;
- ps.hasColonArgument = false;
- }
- ps.nextIndex = ps.i;
-
- if (isOption) {
- if (!ParseOption(ps.s.Substring(1), ps)) {
- if (Path.DirectorySeparatorChar == '/' && ps.s.StartsWith("/"))
- this._files.Add(arg);
- else
- ps.Error("unknown switch: {0}", ps.s);
- }
- } else {
- this._files.Add(arg);
- }
-
- ps.i = ps.nextIndex;
- }
-
- if (HelpRequested) {
- Usage();
- } else if (AttrHelpRequested) {
- AttributeUsage();
- } else if (ps.EncounteredErrors) {
- Console.WriteLine("Use /help for available options");
- }
-
- if (ps.EncounteredErrors) {
- return false;
- } else {
- this.ApplyDefaultOptions();
- return true;
- }
- }
-
- }
-
- /// <summary>
- /// Boogie command-line options (other tools can subclass this class in order to support a
- /// superset of Boogie's options.
- /// </summary>
- public class CommandLineOptions : CommandLineOptionEngine {
-
- public CommandLineOptions()
- : base("Boogie", "Boogie program verifier") {
- }
-
- protected CommandLineOptions(string toolName, string descriptiveName)
- : base(toolName, descriptiveName) {
- Contract.Requires(toolName != null);
- Contract.Requires(descriptiveName != null);
- }
-
- private static CommandLineOptions clo;
- public static CommandLineOptions/*!*/ Clo
- {
- get { return clo; }
- }
-
- public static void Install(CommandLineOptions options) {
- Contract.Requires(options != null);
- clo = options;
- }
-
- public const long Megabyte = 1048576;
-
- // Flags and arguments
-
- public bool RunningBoogieFromCommandLine = false; // "false" means running Boogie from the plug-in
-
- [ContractInvariantMethod]
- void ObjectInvariant2() {
- Contract.Invariant(LogPrefix != null);
- Contract.Invariant(0 <= PrintUnstructured && PrintUnstructured < 3); // 0 = print only structured, 1 = both structured and unstructured, 2 = only unstructured
- }
-
- public int VerifySnapshots = -1;
- public bool VerifySeparately = false;
- public string PrintFile = null;
- public int PrintUnstructured = 0;
- public bool UseBaseNameForFileName = false;
- public int DoomStrategy = -1;
- public bool DoomRestartTP = false;
- public bool PrintDesugarings = false;
- public string SimplifyLogFilePath = null;
- public bool PrintInstrumented = false;
- public bool InstrumentWithAsserts = false;
- public enum InstrumentationPlaces {
- LoopHeaders,
- Everywhere
- }
- public InstrumentationPlaces InstrumentInfer = InstrumentationPlaces.LoopHeaders;
- public bool PrintWithUniqueASTIds = false;
- private string XmlSinkFilename = null;
- [Peer]
- public XmlSink XmlSink = null;
- public bool Wait = false;
- public bool Trace = false;
- public bool TraceTimes = false;
- public bool TraceProofObligations = false;
- public bool TraceCachingForTesting
- {
- get
- {
- return TraceCaching == 1 || TraceCaching == 3;
- }
- }
- public bool TraceCachingForBenchmarking
- {
- get
- {
- return TraceCaching == 2 || TraceCaching == 3;
- }
- }
- public bool TraceCachingForDebugging
- {
- get
- {
- return TraceCaching == 3;
- }
- }
- internal int TraceCaching = 0;
- public bool NoResolve = false;
- public bool NoTypecheck = false;
- public bool OverlookBoogieTypeErrors = false;
- public bool Verify = true;
- public bool TraceVerify = false;
- public int /*(0:3)*/ ErrorTrace = 1;
- public bool IntraproceduralInfer = true;
- public bool ContractInfer = false;
- public bool ExplainHoudini = false;
- public bool ReverseHoudiniWorklist = false;
- public bool ConcurrentHoudini = false;
- public bool ModifyTopologicalSorting = false;
- public bool DebugConcurrentHoudini = false;
- public bool HoudiniUseCrossDependencies = false;
- public string StagedHoudini = null;
- public bool DebugStagedHoudini = false;
- public bool StagedHoudiniReachabilityAnalysis = false;
- public bool StagedHoudiniMergeIgnoredAnnotations = false;
- public int StagedHoudiniThreads = 1;
- public string VariableDependenceIgnore = null;
- public string AbstractHoudini = null;
- public bool UseUnsatCoreForContractInfer = false;
- public bool PrintAssignment = false;
- public int InlineDepth = -1;
- public bool UseProverEvaluate = false; // Use ProverInterface's Evaluate method, instead of model to get variable values
- public bool UseUncheckedContracts = false;
- public bool SimplifyLogFileAppend = false;
- public bool SoundnessSmokeTest = false;
- public string Z3ExecutablePath = null;
- public string CVC4ExecutablePath = null;
- public int KInductionDepth = -1;
-
- private string/*!*/ _logPrefix = "";
-
- public string LogPrefix {
- get {
- Contract.Ensures(Contract.Result<string>() != null);
- return this._logPrefix;
- }
- set {
- Contract.Requires(value != null);
- this._logPrefix = value;
- }
- }
-
- public bool PrettyPrint = true;
-
- public enum ProverWarnings {
- None,
- Stdout,
- Stderr
- }
- public ProverWarnings PrintProverWarnings = ProverWarnings.None;
- public int ProverShutdownLimit = 0;
-
- public enum SubsumptionOption {
- Never,
- NotForQuantifiers,
- Always
- }
- public SubsumptionOption UseSubsumption = SubsumptionOption.Always;
-
- public bool AlwaysAssumeFreeLoopInvariants = false;
-
- public enum ShowEnvironment {
- Never,
- DuringPrint,
- Always
- }
- public ShowEnvironment ShowEnv = ShowEnvironment.DuringPrint;
- public bool DontShowLogo = false;
- [ContractInvariantMethod]
- void ObjectInvariant3() {
- Contract.Invariant(-1 <= LoopFrameConditions && LoopFrameConditions < 3);
- Contract.Invariant(0 <= ModifiesDefault && ModifiesDefault < 7);
- Contract.Invariant((0 <= PrintErrorModel && PrintErrorModel <= 2) || PrintErrorModel == 4);
- Contract.Invariant(0 <= EnhancedErrorMessages && EnhancedErrorMessages < 2);
- Contract.Invariant(0 <= StepsBeforeWidening && StepsBeforeWidening <= 9);
- Contract.Invariant(-1 <= this.bracketIdsInVC && this.bracketIdsInVC <= 1);
- Contract.Invariant(cce.NonNullElements(this.proverOptions));
- }
-
- public int LoopUnrollCount = -1; // -1 means don't unroll loops
- public bool SoundLoopUnrolling = false;
- public int LoopFrameConditions = -1; // -1 means not specified -- this will be replaced by the "implications" section below
- public int ModifiesDefault = 5;
- public bool LocalModifiesChecks = true;
- public bool NoVerifyByDefault = false;
- public enum OwnershipModelOption {
- Standard,
- Experimental,
- Trivial
- }
- public OwnershipModelOption OwnershipModelEncoding = OwnershipModelOption.Standard;
- public int PrintErrorModel = 0;
- public string PrintErrorModelFile = null;
- public string/*?*/ ModelViewFile = null;
- public int EnhancedErrorMessages = 0;
- public string PrintCFGPrefix = null;
- public bool ForceBplErrors = false; // if true, boogie error is shown even if "msg" attribute is present
- public bool UseArrayTheory = false;
- public bool UseSmtOutputFormat = false;
- public bool WeakArrayTheory = false;
- public bool UseLabels = true;
- public bool SIBoolControlVC = false;
- public bool MonomorphicArrays {
- get {
- return UseArrayTheory || TypeEncodingMethod == TypeEncoding.Monomorphic;
- }
- }
- public bool ExpandLambdas = true; // not useful from command line, only to be set to false programatically
- public bool DoModSetAnalysis = false;
- public bool UseAbstractInterpretation = true; // true iff the user want to use abstract interpretation
- private int /*0..9*/stepsBeforeWidening = 0; // The number of steps that must be done before applying a widen operator
-
- public int StepsBeforeWidening
- {
- get
- {
- Contract.Ensures(0 <= Contract.Result<int>() && Contract.Result<int>() <= 9);
- return this.stepsBeforeWidening;
- }
- set
- {
- Contract.Requires(0 <= value && value <= 9);
- this.stepsBeforeWidening = value;
- }
- }
-
- public string OwickiGriesDesugaredOutputFile = null;
- public bool TrustAtomicityTypes = false;
- public bool TrustNonInterference = false;
- public int TrustLayersUpto = -1;
- public int TrustLayersDownto = int.MaxValue;
-
- public enum VCVariety {
- Structured,
- Block,
- Local,
- BlockNested,
- BlockReach,
- BlockNestedReach,
- Dag,
- DagIterative,
- Doomed,
- Unspecified
- }
- public VCVariety vcVariety = VCVariety.Unspecified; // will not be Unspecified after command line has been parsed
-
- public bool RemoveEmptyBlocks = true;
- public bool CoalesceBlocks = true;
- public bool PruneInfeasibleEdges = true;
-
- [Rep]
- public ProverFactory TheProverFactory;
- public string ProverName;
- [Peer]
- private List<string> proverOptions = new List<string>();
-
- public IEnumerable<string> ProverOptions
- {
- set
- {
- Contract.Requires(cce.NonNullElements(value));
-
- this.proverOptions = new List<string>(value);
- }
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<string>>()));
-
- foreach (string s in this.proverOptions)
- yield return s;
- }
- }
-
- [Obsolete("use the setter for 'ProverOptions' directly")]
- public void AddProverOption(string option)
- {
- Contract.Requires(option != null);
-
- this.ProverOptions = this.ProverOptions.Concat1(option);
- }
-
- [Obsolete("use the setter for 'ProverOptions' directly")]
- public void RemoveAllProverOptions(Predicate<string> match)
- {
- this.ProverOptions = this.ProverOptions.Where(s => !match(s));
- }
-
- private int bracketIdsInVC = -1; // -1 - not specified, 0 - no, 1 - yes
-
- public int BracketIdsInVC {
- get {
- Contract.Ensures(-1 <= Contract.Result<int>() && Contract.Result<int>() <= 1);
- return this.bracketIdsInVC;
- }
- set {
- Contract.Requires(-1 <= value && value <= 1);
- this.bracketIdsInVC = value;
- }
- }
-
- public bool CausalImplies = false;
-
- public int SimplifyProverMatchDepth = -1; // -1 means not specified
- public int ProverKillTime = -1; // -1 means not specified
- public int SmokeTimeout = 10; // default to 10s
- public int ProverCCLimit = 5;
- public bool z3AtFlag = true;
- public bool RestartProverPerVC = false;
-
- public double VcsMaxCost = 1.0;
- public double VcsPathJoinMult = 0.8;
- public double VcsPathCostMult = 1.0;
- public double VcsAssumeMult = 0.01;
- public double VcsPathSplitMult = 0.5; // 0.5-always, 2-rarely do path splitting
- public int VcsMaxSplits = 1;
- public int VcsMaxKeepGoingSplits = 1;
- public int VcsFinalAssertTimeout = 30;
- public int VcsKeepGoingTimeout = 1;
- public int VcsCores = 1;
- public bool VcsDumpSplits = false;
-
- public bool DebugRefuted = false;
-
- public XmlSink XmlRefuted {
- get {
- if (DebugRefuted)
- return XmlSink;
- else
- return null;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant4() {
- Contract.Invariant(cce.NonNullElements(this.z3Options));
- Contract.Invariant(0 <= Z3lets && Z3lets < 4);
- }
-
- [Peer]
- private List<string> z3Options = new List<string>();
-
- public IEnumerable<string> Z3Options
- {
- get
- {
- Contract.Ensures(Contract.Result<IEnumerable<string>>() != null);
- foreach (string s in z3Options)
- yield return s;
- }
- }
-
- public void AddZ3Option(string option)
- {
- Contract.Requires(option != null);
- this.z3Options.Add(option);
- }
-
- public bool Z3types = false;
- public int Z3lets = 3; // 0 - none, 1 - only LET TERM, 2 - only LET FORMULA, 3 - (default) any
-
-
- // Maximum amount of virtual memory (in bytes) for the prover to use
- //
- // Non-positive number indicates unbounded.
- public long MaxProverMemory = 100 * Megabyte;
-
- // Minimum number of prover calls before restart
- public int MinNumOfProverCalls = 5;
-
- public enum PlatformType {
- notSpecified,
- v1,
- v11,
- v2,
- cli1
- }
- public PlatformType TargetPlatform;
- public string TargetPlatformLocation;
- public string StandardLibraryLocation;
-
- // whether procedure inlining is enabled at call sites.
- public enum Inlining {
- None,
- Assert,
- Assume,
- Spec
- };
- public Inlining ProcedureInlining = Inlining.Assume;
- public bool PrintInlined = false;
- public bool ExtractLoops = false;
- public bool DeterministicExtractLoops = false;
- public string SecureVcGen = null;
- public int StratifiedInlining = 0;
- public string FixedPointEngine = null;
- public int StratifiedInliningOption = 0;
- public bool StratifiedInliningWithoutModels = false; // disable model generation for SI
- public int StratifiedInliningVerbose = 0; // verbosity level
- public int RecursionBound = 500;
- public bool NonUniformUnfolding = false;
- public int StackDepthBound = 0;
- public string inferLeastForUnsat = null;
-
- // Inference mode for fixed point engine
- public enum FixedPointInferenceMode {
- Corral,
- OldCorral,
- Flat,
- Procedure,
- Call
- };
- public FixedPointInferenceMode FixedPointMode = FixedPointInferenceMode.Procedure;
-
- public string PrintFixedPoint = null;
-
- public string PrintConjectures = null;
-
- public bool ExtractLoopsUnrollIrreducible = true; // unroll irreducible loops? (set programmatically)
-
- public enum TypeEncoding {
- None,
- Predicates,
- Arguments,
- Monomorphic
- };
- public TypeEncoding TypeEncodingMethod = TypeEncoding.Predicates;
-
- public bool Monomorphize = false;
-
- public bool ReflectAdd = false;
-
- public int LiveVariableAnalysis = 1;
-
- // Static constructor
- static CommandLineOptions() {
- if (System.Type.GetType("Mono.Runtime") == null) { // MONO
- TraceListenerCollection/*!*/ dbl = Debug.Listeners;
- Contract.Assert(dbl != null);
- Contract.Assume(cce.IsPeerConsistent(dbl)); // hangs off static field
- dbl.Add(new DefaultTraceListener());
- }
- }
-
- public IEnumerable<string/*!*/> ProcsToCheck {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<string/*!*/>>(), true));
- return this.procsToCheck != null ? this.procsToCheck.AsEnumerable() : null;
- }
- }
-
- private List<string/*!*/> procsToCheck = null; // null means "no restriction"
-
- [ContractInvariantMethod]
- void ObjectInvariant5() {
- Contract.Invariant(cce.NonNullElements(this.procsToCheck, true));
- Contract.Invariant(Ai != null);
- }
-
- public class AiFlags {
- public bool J_Trivial = false;
- public bool J_Intervals = false;
- public bool DebugStatistics = false;
- }
- public readonly AiFlags/*!*/ Ai = new AiFlags();
-
- public class ConcurrentHoudiniOptions
- {
- public List<string> ProverOptions = new List<string>();
- public int ProverCCLimit = 5;
- public bool DisableLoopInvEntryAssert = false;
- public bool DisableLoopInvMaintainedAssert = false;
- public bool ModifyTopologicalSorting = false;
- }
- public List<ConcurrentHoudiniOptions> Cho = new List<ConcurrentHoudiniOptions>();
-
- protected override bool ParseOption(string name, CommandLineOptionEngine.CommandLineParseState ps) {
- var args = ps.args; // convenient synonym
- switch (name) {
- case "infer":
- if (ps.ConfirmArgumentCount(1)) {
- foreach (char c in cce.NonNull(args[ps.i])) {
- switch (c) {
- case 't':
- Ai.J_Trivial = true;
- UseAbstractInterpretation = true;
- break;
- case 'j':
- Ai.J_Intervals = true;
- UseAbstractInterpretation = true;
- break;
- case 's':
- Ai.DebugStatistics = true;
- UseAbstractInterpretation = true;
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- StepsBeforeWidening = (int)char.GetNumericValue(c);
- break;
- default:
- ps.Error("Invalid argument '{0}' to option {1}", c.ToString(), ps.s);
- break;
- }
- }
- }
- return true;
-
- case "noinfer":
- if (ps.ConfirmArgumentCount(0)) {
- UseAbstractInterpretation = false;
- }
- return true;
-
- case "break":
- case "launch":
- if (ps.ConfirmArgumentCount(0)) {
- System.Diagnostics.Debugger.Launch();
- }
- return true;
-
- case "proc":
- if (this.procsToCheck == null) {
- this.procsToCheck = new List<string/*!*/>();
- }
- if (ps.ConfirmArgumentCount(1)) {
- this.procsToCheck.Add(cce.NonNull(args[ps.i]));
- }
- return true;
-
- case "xml":
- if (ps.ConfirmArgumentCount(1)) {
- XmlSinkFilename = args[ps.i];
- }
- return true;
-
- case "print":
- if (ps.ConfirmArgumentCount(1)) {
- PrintFile = args[ps.i];
- }
- return true;
-
- case "pretty":
- int val = 1;
- if (ps.GetNumericArgument(ref val, 2)) {
- PrettyPrint = val == 1;
- }
- return true;
-
- case "OwickiGries":
- if (ps.ConfirmArgumentCount(1)) {
- OwickiGriesDesugaredOutputFile = args[ps.i];
- }
- return true;
-
- case "trustLayersUpto":
- if (ps.ConfirmArgumentCount(1))
- {
- ps.GetNumericArgument(ref TrustLayersUpto);
- }
- return true;
-
- case "trustLayersDownto":
- if (ps.ConfirmArgumentCount(1))
- {
- ps.GetNumericArgument(ref TrustLayersDownto);
- }
- return true;
-
- case "proverLog":
- if (ps.ConfirmArgumentCount(1)) {
- SimplifyLogFilePath = args[ps.i];
- }
- return true;
-
- case "logPrefix":
- if (ps.ConfirmArgumentCount(1)) {
- string s = cce.NonNull(args[ps.i]);
- LogPrefix += s.Replace('/', '-').Replace('\\', '-');
- }
- return true;
-
- case "proverShutdownLimit":
- ps.GetNumericArgument(ref ProverShutdownLimit);
- return true;
-
- case "errorTrace":
- ps.GetNumericArgument(ref ErrorTrace, 3);
- return true;
-
- case "proverWarnings": {
- int pw = 0;
- if (ps.GetNumericArgument(ref pw, 3)) {
- switch (pw) {
- case 0:
- PrintProverWarnings = ProverWarnings.None;
- break;
- case 1:
- PrintProverWarnings = ProverWarnings.Stdout;
- break;
- case 2:
- PrintProverWarnings = ProverWarnings.Stderr;
- break;
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // postcondition of GetNumericArgument guarantees that we don't get here
- }
- }
- return true;
- }
-
- case "env": {
- int e = 0;
- if (ps.GetNumericArgument(ref e, 3)) {
- switch (e) {
- case 0:
- ShowEnv = ShowEnvironment.Never;
- break;
- case 1:
- ShowEnv = ShowEnvironment.DuringPrint;
- break;
- case 2:
- ShowEnv = ShowEnvironment.Always;
- break;
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // postcondition of GetNumericArgument guarantees that we don't get here
- }
- }
- return true;
- }
-
- case "loopUnroll":
- ps.GetNumericArgument(ref LoopUnrollCount);
- return true;
-
- case "printModel":
- if (ps.ConfirmArgumentCount(1)) {
- switch (args[ps.i]) {
- case "0":
- PrintErrorModel = 0;
- break;
- case "1":
- PrintErrorModel = 1;
- break;
- case "2":
- PrintErrorModel = 2;
- break;
- case "4":
- PrintErrorModel = 4;
- break;
- default:
- ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- break;
- }
- }
- return true;
-
- case "mv":
- if (ps.ConfirmArgumentCount(1)) {
- ModelViewFile = args[ps.i];
- }
- return true;
-
- case "printModelToFile":
- if (ps.ConfirmArgumentCount(1)) {
- PrintErrorModelFile = args[ps.i];
- }
- return true;
-
- case "enhancedErrorMessages":
- ps.GetNumericArgument(ref EnhancedErrorMessages, 2);
- return true;
-
- case "printCFG":
- if (ps.ConfirmArgumentCount(1)) {
- PrintCFGPrefix = args[ps.i];
- }
- return true;
-
- case "inlineDepth":
- ps.GetNumericArgument(ref InlineDepth);
- return true;
-
- case "subsumption": {
- int s = 0;
- if (ps.GetNumericArgument(ref s, 3)) {
- switch (s) {
- case 0:
- UseSubsumption = SubsumptionOption.Never;
- break;
- case 1:
- UseSubsumption = SubsumptionOption.NotForQuantifiers;
- break;
- case 2:
- UseSubsumption = SubsumptionOption.Always;
- break;
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- } // postcondition of GetNumericArgument guarantees that we don't get here
- }
- }
- return true;
- }
-
- case "liveVariableAnalysis": {
- int lva = 0;
- if (ps.GetNumericArgument(ref lva, 3)) {
- LiveVariableAnalysis = lva;
- }
- return true;
- }
-
- case "removeEmptyBlocks": {
- int reb = 0;
- if (ps.GetNumericArgument(ref reb, 2)) {
- RemoveEmptyBlocks = reb == 1;
- }
- return true;
- }
-
- case "coalesceBlocks": {
- int cb = 0;
- if (ps.GetNumericArgument(ref cb, 2)) {
- CoalesceBlocks = cb == 1;
- }
- return true;
- }
-
- case "noPruneInfeasibleEdges": {
- if (ps.ConfirmArgumentCount(0)) {
- PruneInfeasibleEdges = false;
- }
- return true;
- }
-
- case "stagedHoudini": {
- if (ps.ConfirmArgumentCount(1)) {
- if(args[ps.i] == "COARSE" ||
- args[ps.i] == "FINE" ||
- args[ps.i] == "BALANCED") {
- StagedHoudini = args[ps.i];
- } else {
- ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- }
- }
- return true;
- }
-
- case "stagedHoudiniThreads": {
- ps.GetNumericArgument(ref StagedHoudiniThreads);
- return true;
- }
-
- case "stagedHoudiniReachabilityAnalysis": {
- if (ps.ConfirmArgumentCount(0)) {
- StagedHoudiniReachabilityAnalysis = true;
- }
- return true;
- }
-
- case "stagedHoudiniMergeIgnoredAnnotations": {
- if (ps.ConfirmArgumentCount(0)) {
- StagedHoudiniMergeIgnoredAnnotations = true;
- }
- return true;
- }
-
- case "debugStagedHoudini": {
- if (ps.ConfirmArgumentCount(0)) {
- DebugStagedHoudini = true;
- }
- return true;
- }
-
- case "variableDependenceIgnore": {
- if (ps.ConfirmArgumentCount(1)) {
- VariableDependenceIgnore = args[ps.i];
- }
- return true;
- }
-
- case "abstractHoudini":
- {
- if (ps.ConfirmArgumentCount(1))
- {
- AbstractHoudini = args[ps.i];
- }
- return true;
- }
- case "vc":
- if (ps.ConfirmArgumentCount(1)) {
- switch (args[ps.i]) {
- case "s":
- case "structured":
- vcVariety = VCVariety.Structured;
- break;
- case "b":
- case "block":
- vcVariety = VCVariety.Block;
- break;
- case "l":
- case "local":
- vcVariety = VCVariety.Local;
- break;
- case "n":
- case "nested":
- vcVariety = VCVariety.BlockNested;
- break;
- case "m":
- vcVariety = VCVariety.BlockNestedReach;
- break;
- case "r":
- vcVariety = VCVariety.BlockReach;
- break;
- case "d":
- case "dag":
- vcVariety = VCVariety.Dag;
- break;
- case "i":
- vcVariety = VCVariety.DagIterative;
- break;
- case "doomed":
- vcVariety = VCVariety.Doomed;
- break;
- default:
- ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- break;
- }
- }
- return true;
-
- case "prover":
- if (ps.ConfirmArgumentCount(1)) {
- TheProverFactory = ProverFactory.Load(cce.NonNull(args[ps.i]));
- ProverName = cce.NonNull(args[ps.i]).ToUpper();
- }
- return true;
-
- case "p":
- case "proverOpt":
- if (ps.ConfirmArgumentCount(1)) {
- ProverOptions = ProverOptions.Concat1(cce.NonNull(args[ps.i]));
- }
- return true;
-
- case "DoomStrategy":
- ps.GetNumericArgument(ref DoomStrategy);
- return true;
-
- case "DoomRestartTP":
- if (ps.ConfirmArgumentCount(0)) {
- DoomRestartTP = true;
- }
- return true;
-
- case "extractLoops":
- if (ps.ConfirmArgumentCount(0)) {
- ExtractLoops = true;
- }
- return true;
-
- case "deterministicExtractLoops":
- if (ps.ConfirmArgumentCount(0)) {
- DeterministicExtractLoops = true;
- }
- return true;
-
- case "inline":
- if (ps.ConfirmArgumentCount(1)) {
- switch (args[ps.i]) {
- case "none":
- ProcedureInlining = Inlining.None;
- break;
- case "assert":
- ProcedureInlining = Inlining.Assert;
- break;
- case "assume":
- ProcedureInlining = Inlining.Assume;
- break;
- case "spec":
- ProcedureInlining = Inlining.Spec;
- break;
- default:
- ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- break;
- }
- }
- return true;
- case "secure":
- if (ps.ConfirmArgumentCount(1))
- SecureVcGen = args[ps.i];
- return true;
- case "stratifiedInline":
- if (ps.ConfirmArgumentCount(1)) {
- switch (args[ps.i]) {
- case "0":
- StratifiedInlining = 0;
- break;
- case "1":
- StratifiedInlining = 1;
- break;
- default:
- StratifiedInlining = Int32.Parse(cce.NonNull(args[ps.i]));
- //ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- break;
- }
- }
- return true;
- case "fixedPointEngine":
- if (ps.ConfirmArgumentCount(1))
- {
- FixedPointEngine = args[ps.i];
- }
- return true;
- case "fixedPointInfer":
- if (ps.ConfirmArgumentCount(1))
- {
- switch (args[ps.i])
- {
- case "corral":
- FixedPointMode = FixedPointInferenceMode.Corral;
- break;
- case "oldCorral":
- FixedPointMode = FixedPointInferenceMode.OldCorral;
- break;
- case "flat":
- FixedPointMode = FixedPointInferenceMode.Flat;
- break;
- case "procedure":
- FixedPointMode = FixedPointInferenceMode.Procedure;
- break;
- case "call":
- FixedPointMode = FixedPointInferenceMode.Call;
- break;
- default:
- ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- break;
- }
- }
- return true;
- case "printFixedPoint":
- if (ps.ConfirmArgumentCount(1))
- {
- PrintFixedPoint = args[ps.i];
- }
- return true;
- case "printConjectures":
- if (ps.ConfirmArgumentCount(1))
- {
- PrintConjectures = args[ps.i];
- }
- return true;
- case "siVerbose":
- if (ps.ConfirmArgumentCount(1)) {
- StratifiedInliningVerbose = Int32.Parse(cce.NonNull(args[ps.i]));
- }
- return true;
- case "recursionBound":
- if (ps.ConfirmArgumentCount(1)) {
- RecursionBound = Int32.Parse(cce.NonNull(args[ps.i]));
- }
- return true;
- case "stackDepthBound":
- if (ps.ConfirmArgumentCount(1))
- {
- StackDepthBound = Int32.Parse(cce.NonNull(args[ps.i]));
- }
- return true;
- case "stratifiedInlineOption":
- if (ps.ConfirmArgumentCount(1)) {
- StratifiedInliningOption = Int32.Parse(cce.NonNull(args[ps.i]));
- }
- return true;
-
- case "inferLeastForUnsat":
- if (ps.ConfirmArgumentCount(1)) {
- inferLeastForUnsat = args[ps.i];
- }
- return true;
-
- case "typeEncoding":
- if (ps.ConfirmArgumentCount(1)) {
- switch (args[ps.i]) {
- case "n":
- case "none":
- TypeEncodingMethod = TypeEncoding.None;
- break;
- case "p":
- case "predicates":
- TypeEncodingMethod = TypeEncoding.Predicates;
- break;
- case "a":
- case "arguments":
- TypeEncodingMethod = TypeEncoding.Arguments;
- break;
- case "m":
- case "monomorphic":
- TypeEncodingMethod = TypeEncoding.Monomorphic;
- break;
- default:
- ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- break;
- }
- }
- return true;
-
- case "instrumentInfer":
- if (ps.ConfirmArgumentCount(1)) {
- switch (args[ps.i]) {
- case "e":
- InstrumentInfer = InstrumentationPlaces.Everywhere;
- break;
- case "h":
- InstrumentInfer = InstrumentationPlaces.LoopHeaders;
- break;
- default:
- ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
- break;
- }
- }
- return true;
-
- case "concurrentHoudini":
- if (ps.ConfirmArgumentCount(0)) {
- ConcurrentHoudini = true;
- }
- return true;
-
- case "modifyTopologicalSorting":
- if (ps.ConfirmArgumentCount(0)) {
- ModifyTopologicalSorting = true;
- }
- return true;
-
- case "debugConcurrentHoudini":
- if (ps.ConfirmArgumentCount(0)) {
- DebugConcurrentHoudini = true;
- }
- return true;
-
- case "vcBrackets":
- ps.GetNumericArgument(ref bracketIdsInVC, 2);
- return true;
-
- case "proverMemoryLimit": {
- int d = 0;
- if (ps.GetNumericArgument(ref d)) {
- MaxProverMemory = d * Megabyte;
- }
- return true;
- }
-
- case "vcsMaxCost":
- ps.GetNumericArgument(ref VcsMaxCost);
- return true;
-
- case "vcsPathJoinMult":
- ps.GetNumericArgument(ref VcsPathJoinMult);
- return true;
-
- case "vcsPathCostMult":
- ps.GetNumericArgument(ref VcsPathCostMult);
- return true;
-
- case "vcsAssumeMult":
- ps.GetNumericArgument(ref VcsAssumeMult);
- return true;
-
- case "vcsPathSplitMult":
- ps.GetNumericArgument(ref VcsPathSplitMult);
- return true;
-
- case "vcsMaxSplits":
- ps.GetNumericArgument(ref VcsMaxSplits);
- return true;
-
- case "vcsMaxKeepGoingSplits":
- ps.GetNumericArgument(ref VcsMaxKeepGoingSplits);
- return true;
-
- case "vcsFinalAssertTimeout":
- ps.GetNumericArgument(ref VcsFinalAssertTimeout);
- return true;
-
- case "vcsKeepGoingTimeout":
- ps.GetNumericArgument(ref VcsKeepGoingTimeout);
- return true;
-
- case "vcsCores":
- ps.GetNumericArgument(ref VcsCores, a => 1 <= a);
- return true;
-
- case "vcsLoad":
- double load = 0.0;
- if (ps.GetNumericArgument(ref load)) {
- if (3.0 <= load) {
- ps.Error("surprisingly high load specified; got {0}, expected nothing above 3.0", load.ToString());
- load = 3.0;
- }
- int p = (int)Math.Round(System.Environment.ProcessorCount * load);
- VcsCores = p < 1 ? 1 : p;
- }
- return true;
-
- case "simplifyMatchDepth":
- ps.GetNumericArgument(ref SimplifyProverMatchDepth);
- return true;
-
- case "timeLimit":
- ps.GetNumericArgument(ref ProverKillTime);
- return true;
-
- case "smokeTimeout":
- ps.GetNumericArgument(ref SmokeTimeout);
- return true;
-
- case "errorLimit":
- ps.GetNumericArgument(ref ProverCCLimit);
- return true;
-
- case "verifySnapshots":
- ps.GetNumericArgument(ref VerifySnapshots, 3);
- return true;
-
- case "traceCaching":
- ps.GetNumericArgument(ref TraceCaching, 4);
- return true;
-
- case "useSmtOutputFormat": {
- if (ps.ConfirmArgumentCount(0)) {
- UseSmtOutputFormat = true;
- }
- return true;
- }
-
- case "z3opt":
- if (ps.ConfirmArgumentCount(1)) {
- AddZ3Option(cce.NonNull(args[ps.i]));
- }
- return true;
-
- case "z3lets":
- ps.GetNumericArgument(ref Z3lets, 4);
- return true;
-
- case "platform":
- if (ps.ConfirmArgumentCount(1)) {
- StringCollection platformOptions = this.ParseNamedArgumentList(args[ps.i]);
- if (platformOptions != null && platformOptions.Count > 0) {
- try {
- this.TargetPlatform = (PlatformType)cce.NonNull(Enum.Parse(typeof(PlatformType), cce.NonNull(platformOptions[0])));
- } catch {
- ps.Error("Bad /platform type '{0}'", platformOptions[0]);
- break;
- }
- if (platformOptions.Count > 1) {
- this.TargetPlatformLocation = platformOptions[1];
- if (!Directory.Exists(platformOptions[1])) {
- ps.Error("/platform directory '{0}' does not exist", platformOptions[1]);
- break;
- }
- }
- }
- }
- return true;
-
- case "z3exe":
- if (ps.ConfirmArgumentCount(1)) {
- Z3ExecutablePath = args[ps.i];
- }
- return true;
-
- case "cvc4exe":
- if (ps.ConfirmArgumentCount(1)) {
- CVC4ExecutablePath = args[ps.i];
- }
- return true;
-
- case "kInductionDepth":
- ps.GetNumericArgument(ref KInductionDepth);
- return true;
-
- default:
- bool optionValue = false;
- if (ps.CheckBooleanFlag("printUnstructured", ref optionValue)) {
- PrintUnstructured = optionValue ? 1 : 0;
- return true;
- }
-
- if (ps.CheckBooleanFlag("printDesugared", ref PrintDesugarings) ||
- ps.CheckBooleanFlag("printInstrumented", ref PrintInstrumented) ||
- ps.CheckBooleanFlag("printWithUniqueIds", ref PrintWithUniqueASTIds) ||
- ps.CheckBooleanFlag("wait", ref Wait) ||
- ps.CheckBooleanFlag("trace", ref Trace) ||
- ps.CheckBooleanFlag("traceTimes", ref TraceTimes) ||
- ps.CheckBooleanFlag("tracePOs", ref TraceProofObligations) ||
- ps.CheckBooleanFlag("noResolve", ref NoResolve) ||
- ps.CheckBooleanFlag("noTypecheck", ref NoTypecheck) ||
- ps.CheckBooleanFlag("overlookTypeErrors", ref OverlookBoogieTypeErrors) ||
- ps.CheckBooleanFlag("noVerify", ref Verify, false) ||
- ps.CheckBooleanFlag("traceverify", ref TraceVerify) ||
- ps.CheckBooleanFlag("alwaysAssumeFreeLoopInvariants", ref AlwaysAssumeFreeLoopInvariants, true) ||
- ps.CheckBooleanFlag("nologo", ref DontShowLogo) ||
- ps.CheckBooleanFlag("proverLogAppend", ref SimplifyLogFileAppend) ||
- ps.CheckBooleanFlag("soundLoopUnrolling", ref SoundLoopUnrolling) ||
- ps.CheckBooleanFlag("checkInfer", ref InstrumentWithAsserts) ||
- ps.CheckBooleanFlag("interprocInfer", ref IntraproceduralInfer, false) ||
- ps.CheckBooleanFlag("restartProver", ref RestartProverPerVC) ||
- ps.CheckBooleanFlag("printInlined", ref PrintInlined) ||
- ps.CheckBooleanFlag("smoke", ref SoundnessSmokeTest) ||
- ps.CheckBooleanFlag("vcsDumpSplits", ref VcsDumpSplits) ||
- ps.CheckBooleanFlag("dbgRefuted", ref DebugRefuted) ||
- ps.CheckBooleanFlag("causalImplies", ref CausalImplies) ||
- ps.CheckBooleanFlag("reflectAdd", ref ReflectAdd) ||
- ps.CheckBooleanFlag("z3types", ref Z3types) ||
- ps.CheckBooleanFlag("z3multipleErrors", ref z3AtFlag, false) ||
- ps.CheckBooleanFlag("monomorphize", ref Monomorphize) ||
- ps.CheckBooleanFlag("useArrayTheory", ref UseArrayTheory) ||
- ps.CheckBooleanFlag("weakArrayTheory", ref WeakArrayTheory) ||
- ps.CheckBooleanFlag("doModSetAnalysis", ref DoModSetAnalysis) ||
- ps.CheckBooleanFlag("doNotUseLabels", ref UseLabels, false) ||
- ps.CheckBooleanFlag("boolControlVC", ref SIBoolControlVC, true) ||
- ps.CheckBooleanFlag("contractInfer", ref ContractInfer) ||
- ps.CheckBooleanFlag("explainHoudini", ref ExplainHoudini) ||
- ps.CheckBooleanFlag("reverseHoudiniWorklist", ref ReverseHoudiniWorklist) ||
- ps.CheckBooleanFlag("crossDependencies", ref HoudiniUseCrossDependencies) ||
- ps.CheckBooleanFlag("useUnsatCoreForContractInfer", ref UseUnsatCoreForContractInfer) ||
- ps.CheckBooleanFlag("printAssignment", ref PrintAssignment) ||
- ps.CheckBooleanFlag("useProverEvaluate", ref UseProverEvaluate) ||
- ps.CheckBooleanFlag("nonUniformUnfolding", ref NonUniformUnfolding) ||
- ps.CheckBooleanFlag("deterministicExtractLoops", ref DeterministicExtractLoops) ||
- ps.CheckBooleanFlag("verifySeparately", ref VerifySeparately) ||
- ps.CheckBooleanFlag("trustAtomicityTypes", ref TrustAtomicityTypes) ||
- ps.CheckBooleanFlag("trustNonInterference", ref TrustNonInterference) ||
- ps.CheckBooleanFlag("useBaseNameForFileName", ref UseBaseNameForFileName)
- ) {
- // one of the boolean flags matched
- return true;
- }
- break;
- }
-
- return base.ParseOption(name, ps); // defer to superclass
- }
-
- public override void ApplyDefaultOptions() {
- Contract.Ensures(TheProverFactory != null);
- Contract.Ensures(vcVariety != VCVariety.Unspecified);
-
- base.ApplyDefaultOptions();
-
- // expand macros in filenames, now that LogPrefix is fully determined
- ExpandFilename(ref XmlSinkFilename, LogPrefix, FileTimestamp);
- ExpandFilename(ref PrintFile, LogPrefix, FileTimestamp);
- ExpandFilename(ref SimplifyLogFilePath, LogPrefix, FileTimestamp);
- ExpandFilename(ref PrintErrorModelFile, LogPrefix, FileTimestamp);
-
- Contract.Assume(XmlSink == null); // XmlSink is to be set here
- if (XmlSinkFilename != null) {
- XmlSink = new XmlSink(XmlSinkFilename);
- }
-
- if (TheProverFactory == null) {
- TheProverFactory = ProverFactory.Load("SMTLib");
- ProverName = "SMTLib".ToUpper();
- }
-
- var proverOpts = TheProverFactory.BlankProverOptions();
- proverOpts.Parse(ProverOptions);
- if (!TheProverFactory.SupportsLabels(proverOpts)) {
- UseLabels = false;
- }
-
- if (vcVariety == VCVariety.Unspecified) {
- vcVariety = TheProverFactory.DefaultVCVariety;
- }
-
- if (UseArrayTheory) {
- Monomorphize = true;
- }
-
- if (inferLeastForUnsat != null) {
- StratifiedInlining = 1;
- }
-
- if (StratifiedInlining > 0) {
- TypeEncodingMethod = TypeEncoding.Monomorphic;
- UseArrayTheory = true;
- UseAbstractInterpretation = false;
- MaxProverMemory = 0; // no max: avoids restarts
- if (ProverName == "Z3API" || ProverName == "SMTLIB") {
- ProverCCLimit = 1;
- }
- if (UseProverEvaluate)
- StratifiedInliningWithoutModels = true;
- }
-
- if (Trace) {
- BoogieDebug.DoPrinting = true; // reuse the -trace option for debug printing
- }
- }
-
-
-
- public bool UserWantsToCheckRoutine(string methodFullname) {
- Contract.Requires(methodFullname != null);
- if (ProcsToCheck == null) {
- // no preference
- return true;
- }
- return ProcsToCheck.Any(s => 0 <= methodFullname.IndexOf(s));
- }
-
- public virtual StringCollection ParseNamedArgumentList(string argList) {
- if (argList == null || argList.Length == 0)
- return null;
- StringCollection result = new StringCollection();
- int i = 0;
- for (int n = argList.Length; i < n; ) {
- cce.LoopInvariant(0 <= i);
- int separatorIndex = this.GetArgumentSeparatorIndex(argList, i);
- if (separatorIndex > i) {
- result.Add(argList.Substring(i, separatorIndex - i));
- i = separatorIndex + 1;
- continue;
- }
- result.Add(argList.Substring(i));
- break;
- }
- return result;
- }
- public int GetArgumentSeparatorIndex(string argList, int startIndex) {
- Contract.Requires(argList != null);
- Contract.Requires(0 <= startIndex && startIndex <= argList.Length);
- Contract.Ensures(Contract.Result<int>() < argList.Length);
- int commaIndex = argList.IndexOf(",", startIndex);
- int semicolonIndex = argList.IndexOf(";", startIndex);
- if (commaIndex == -1)
- return semicolonIndex;
- if (semicolonIndex == -1)
- return commaIndex;
- if (commaIndex < semicolonIndex)
- return commaIndex;
- return semicolonIndex;
- }
-
- public override void AttributeUsage() {
- Console.WriteLine(
-@"Boogie: The following attributes are supported by this implementation.
-
- ---- On top-level declarations ---------------------------------------------
-
- {:ignore}
- Ignore the declaration (after checking for duplicate names).
-
- {:extern}
- If two top-level declarations introduce the same name (for example, two
- constants with the same name or two procedures with the same name), then
- Boogie usually produces an error message. However, if at least one of
- the declarations is declared with :extern, one of the declarations is
- ignored. If both declarations are :extern, Boogie arbitrarily chooses
- one of them to keep; otherwise, Boogie ignore the :extern declaration
- and keeps the other.
-
- {:checksum <string>}
- Attach a checksum to be used for verification result caching.
-
- ---- On implementations and procedures -------------------------------------
-
- {:inline N}
- Inline given procedure (can be also used on implementation).
- N should be a non-negative number and represents the inlining depth.
- With /inline:assume call is replaced with ""assume false"" once inlining depth is reached.
- With /inline:assert call is replaced with ""assert false"" once inlining depth is reached.
- With /inline:spec call is left as is once inlining depth is reached.
- With the above three options, methods with the attribute {:inline N} are not verified.
- With /inline:none the entire attribute is ignored.
-
- {:verify false}
- Skip verification of an implementation.
-
- {:vcs_max_cost N}
- {:vcs_max_splits N}
- {:vcs_max_keep_going_splits N}
- Per-implementation versions of
- /vcsMaxCost, /vcsMaxSplits and /vcsMaxKeepGoingSplits.
-
- {:selective_checking true}
- Turn all asserts into assumes except for the ones reachable from
- assumptions marked with the attribute {:start_checking_here}.
- Thus, ""assume {:start_checking_here} something;"" becomes an inverse
- of ""assume false;"": the first one disables all verification before
- it, and the second one disables all verification after.
-
- {:priority N}
- Assign a positive priority 'N' to an implementation to control the order
- in which implementations are verified (default: N = 1).
-
- {:id <string>}
- Assign a unique ID to an implementation to be used for verification
- result caching (default: ""<impl. name>:0"").
-
- {:timeLimit N}
- Set the time limit for a given implementation.
-
- ---- On functions ----------------------------------------------------------
-
- {:builtin ""spec""}
- {:bvbuiltin ""spec""}
- Rewrite the function to built-in prover function symbol 'fn'.
-
- {:inline}
- {:inline true}
- Expand function according to its definition before going to the prover.
-
- {:never_pattern true}
- Terms starting with this function symbol will never be
- automatically selected as patterns. It does not prevent them
- from being used inside the triggers, and does not affect explicit
- trigger annotations. Internally it works by adding {:nopats ...}
- annotations to quantifiers.
-
- {:identity}
- {:identity true}
- If the function has 1 argument and the use of it has type X->X for
- some X, then the abstract interpreter will treat the function as an
- identity function. Note, the abstract interpreter trusts the
- attribute--it does not try to verify that the function really is an
- identity function.
-
- ---- On variables ----------------------------------------------------------
-
- {:existential true}
- Marks a global Boolean variable as existentially quantified. If
- used in combination with option /contractInfer Boogie will check
- whether there exists a Boolean assignment to the existentials
- that makes all verification conditions valid. Without option
- /contractInfer the attribute is ignored.
-
- ---- On assert statements --------------------------------------------------
-
- {:subsumption n}
- Overrides the /subsumption command-line setting for this assertion.
-
- {:split_here}
- Verifies code leading to this point and code leading from this point
- to the next split_here as separate pieces. May help with timeouts.
- May also occasionally double-report errors.
-
- ---- The end ---------------------------------------------------------------
-");
- }
-
- public override void Usage() {
- Console.WriteLine(@"
- /nologo suppress printing of version number, copyright message
- /env:<n> print command line arguments
- 0 - never, 1 (default) - during BPL print and prover log,
- 2 - like 1 and also to standard output
- /wait await Enter from keyboard before terminating program
- /xml:<file> also produce output in XML format to <file>
-
- ---- Boogie options --------------------------------------------------------
-
- Multiple .bpl files supplied on the command line are concatenated into one
- Boogie program.
-
- /proc:<p> : limits which procedures to check
- /noResolve : parse only
- /noTypecheck : parse and resolve only
-
- /print:<file> : print Boogie program after parsing it
- (use - as <file> to print to console)
- /pretty:<n>
- 0 - print each Boogie statement on one line (faster).
- 1 (default) - pretty-print with some line breaks.
- /printWithUniqueIds : print augmented information that uniquely
- identifies variables
- /printUnstructured : with /print option, desugars all structured statements
- /printDesugared : with /print option, desugars calls
-
- /overlookTypeErrors : skip any implementation with resolution or type
- checking errors
-
- /loopUnroll:<n>
- unroll loops, following up to n back edges (and then some)
- /soundLoopUnrolling
- sound loop unrolling
- /printModel:<n>
- 0 (default) - do not print Z3's error model
- 1 - print Z3's error model
- 2 - print Z3's error model plus reverse mappings
- 4 - print Z3's error model in a more human readable way
- /printModelToFile:<file>
- print model to <file> instead of console
- /mv:<file> Specify file where to save the model in BVD format
- /enhancedErrorMessages:<n>
- 0 (default) - no enhanced error messages
- 1 - Z3 error model enhanced error messages
-
- /printCFG:<prefix> : print control flow graph of each implementation in
- Graphviz format to files named:
- <prefix>.<procedure name>.dot
-
- /useBaseNameForFileName : When parsing use basename of file for tokens instead
- of the path supplied on the command line
-
- ---- Inference options -----------------------------------------------------
-
- /infer:<flags>
- use abstract interpretation to infer invariants
- The default is /infer:i"
- // This is not 100% true, as the /infer ALWAYS creates
- // a multilattice, whereas if nothing is specified then
- // intervals are isntantiated WITHOUT being embedded in
- // a multilattice
- + @"
- <flags> are as follows (missing <flags> means all)
- i = intervals
- c = constant propagation
- d = dynamic type
- n = nullness
- p = polyhedra for linear inequalities
- t = trivial bottom/top lattice (cannot be combined with
- other domains)
- j = stronger intervals (cannot be combined with other
- domains)
- or the following (which denote options, not domains):
- s = debug statistics
- 0..9 = number of iterations before applying a widen (default=0)
- /noinfer turn off the default inference, and overrides the /infer
- switch on its left
- /checkInfer instrument inferred invariants as asserts to be checked by
- theorem prover
- /interprocInfer
- perform interprocedural inference (deprecated, not supported)
- /contractInfer
- perform procedure contract inference
- /instrumentInfer
- h - instrument inferred invariants only at beginning of
- loop headers (default)
- e - instrument inferred invariants at beginning and end
- of every block (this mode is intended for use in
- debugging of abstract domains)
- /printInstrumented
- print Boogie program after it has been instrumented with
- invariants
-
- ---- Debugging and general tracing options ---------------------------------
-
- /trace blurt out various debug trace information
- /traceTimes output timing information at certain points in the pipeline
- /tracePOs output information about the number of proof obligations
- (also included in the /trace output)
- /log[:method] Print debug output during translation
-
- /break launch and break into debugger
-
- ---- Verification-condition generation options -----------------------------
-
- /liveVariableAnalysis:<c>
- 0 = do not perform live variable analysis
- 1 = perform live variable analysis (default)
- 2 = perform interprocedural live variable analysis
- /noVerify skip VC generation and invocation of the theorem prover
- /verifySnapshots:<n>
- verify several program snapshots (named <filename>.v0.bpl
- to <filename>.vN.bpl) using verification result caching:
- 0 - do not use any verification result caching (default)
- 1 - use the basic verification result caching
- 2 - use the more advanced verification result caching
- /verifySeparately
- verify each input program separately
- /removeEmptyBlocks:<c>
- 0 - do not remove empty blocks during VC generation
- 1 - remove empty blocks (default)
- /coalesceBlocks:<c>
- 0 = do not coalesce blocks
- 1 = coalesce blocks (default)
- /vc:<variety> n = nested block (default for /prover:Simplify),
- m = nested block reach,
- b = flat block, r = flat block reach,
- s = structured, l = local,
- d = dag (default, except with /prover:Simplify)
- doomed = doomed
- /traceverify print debug output during verification condition generation
- /subsumption:<c>
- apply subsumption to asserted conditions:
- 0 - never, 1 - not for quantifiers, 2 (default) - always
- /alwaysAssumeFreeLoopInvariants
- usually, a free loop invariant (or assume
- statement in that position) is ignored in checking contexts
- (like other free things); this option includes these free
- loop invariants as assumes in both contexts
- /inline:<i> use inlining strategy <i> for procedures with the :inline
- attribute, see /attrHelp for details:
- none
- assume (default)
- assert
- spec
- /printInlined
- print the implementation after inlining calls to
- procedures with the :inline attribute (works with /inline)
- /lazyInline:1
- Use the lazy inlining algorithm
- /stratifiedInline:1
- Use the stratified inlining algorithm
- /fixedPointEngine:<engine>
- Use the specified fixed point engine for inference
- /recursionBound:<n>
- Set the recursion bound for stratified inlining to
- be n (default 500)
- /inferLeastForUnsat:<str>
- Infer the least number of constants (whose names
- are prefixed by <str>) that need to be set to
- true for the program to be correct. This turns
- on stratified inlining.
- /smoke Soundness Smoke Test: try to stick assert false; in some
- places in the BPL and see if we can still prove it
- /smokeTimeout:<n>
- Timeout, in seconds, for a single theorem prover
- invocation during smoke test, defaults to 10.
- /causalImplies
- Translate Boogie's A ==> B into prover's A ==> A && B.
- /typeEncoding:<m>
- how to encode types when sending VC to theorem prover
- n = none (unsound)
- p = predicates (default)
- a = arguments
- m = monomorphic
- /monomorphize
- Do not abstract map types in the encoding (this is an
- experimental feature that will not do the right thing if
- the program uses polymorphism)
- /reflectAdd In the VC, generate an auxiliary symbol, elsewhere defined
- to be +, instead of +.
-
- ---- Verification-condition splitting --------------------------------------
-
- /vcsMaxCost:<f>
- VC will not be split unless the cost of a VC exceeds this
- number, defaults to 2000.0. This does NOT apply in the
- keep-going mode after first round of splitting.
- /vcsMaxSplits:<n>
- Maximal number of VC generated per method. In keep
- going mode only applies to the first round.
- Defaults to 1.
- /vcsMaxKeepGoingSplits:<n>
- If set to more than 1, activates the keep
- going mode, where after the first round of splitting,
- VCs that timed out are split into <n> pieces and retried
- until we succeed proving them, or there is only one
- assertion on a single path and it timeouts (in which
- case error is reported for that assertion).
- Defaults to 1.
- /vcsKeepGoingTimeout:<n>
- Timeout in seconds for a single theorem prover
- invocation in keep going mode, except for the final
- single-assertion case. Defaults to 1s.
- /vcsFinalAssertTimeout:<n>
- Timeout in seconds for the single last
- assertion in the keep going mode. Defaults to 30s.
- /vcsPathJoinMult:<f>
- If more than one path join at a block, by how much
- multiply the number of paths in that block, to accomodate
- for the fact that the prover will learn something on one
- paths, before proceeding to another. Defaults to 0.8.
- /vcsPathCostMult:<f1>
- /vcsAssumeMult:<f2>
- The cost of a block is
- (<assert-cost> + <f2>*<assume-cost>) *
- (1.0 + <f1>*<entering-paths>)
- <f1> defaults to 1.0, <f2> defaults to 0.01.
- The cost of a single assertion or assumption is
- currently always 1.0.
- /vcsPathSplitMult:<f>
- If the best path split of a VC of cost A is into
- VCs of cost B and C, then the split is applied if
- A >= <f>*(B+C), otherwise assertion splitting will be
- applied. Defaults to 0.5 (always do path splitting if
- possible), set to more to do less path splitting
- and more assertion splitting.
- /vcsDumpSplits
- For split #n dump split.n.dot and split.n.bpl.
- Warning: Affects error reporting.
- /vcsCores:<n>
- Try to verify <n> VCs at once. Defaults to 1.
- /vcsLoad:<f> Sets vcsCores to the machine's ProcessorCount * f,
- rounded to the nearest integer (where 0.0 <= f <= 3.0),
- but never to less than 1.
-
- ---- Prover options --------------------------------------------------------
-
- /errorLimit:<num>
- Limit the number of errors produced for each procedure
- (default is 5, some provers may support only 1)
- /timeLimit:<num>
- Limit the number of seconds spent trying to verify
- each procedure
- /errorTrace:<n>
- 0 - no Trace labels in the error output,
- 1 (default) - include useful Trace labels in error output,
- 2 - include all Trace labels in the error output
- /vcBrackets:<b>
- bracket odd-charactered identifier names with |'s. <b> is:
- 0 - no (default with non-/prover:Simplify),
- 1 - yes (default with /prover:Simplify)
- /prover:<tp> use theorem prover <tp>, where <tp> is either the name of
- a DLL containing the prover interface located in the
- Boogie directory, or a full path to a DLL containing such
- an interface. The standard interfaces shipped include:
- SMTLib (default, uses the SMTLib2 format and calls Z3)
- Z3 (uses Z3 with the Simplify format)
- Simplify
- ContractInference (uses Z3)
- Z3api (Z3 using Managed .NET API)
- /proverOpt:KEY[=VALUE]
- Provide a prover-specific option (short form /p).
- /proverLog:<file>
- Log input for the theorem prover. Like filenames
- supplied as arguments to other options, <file> can use the
- following macros:
- @TIME@ expands to the current time
- @PREFIX@ expands to the concatenation of strings given
- by /logPrefix options
- @FILE@ expands to the last filename specified on the
- command line
- In addition, /proverLog can also use the macro '@PROC@',
- which causes there to be one prover log file per
- verification condition, and the macro then expands to the
- name of the procedure that the verification condition is for.
- /logPrefix:<str>
- Defines the expansion of the macro '@PREFIX@', which can
- be used in various filenames specified by other options.
- /proverLogAppend
- Append (not overwrite) the specified prover log file
- /proverWarnings
- 0 (default) - don't print, 1 - print to stdout,
- 2 - print to stderr
- /proverMemoryLimit:<num>
- Limit on the virtual memory for prover before
- restart in MB (default:100MB)
- /restartProver
- Restart the prover after each query
- /proverShutdownLimit<num>
- Time between closing the stream to the prover and
- killing the prover process (default: 0s)
- /platform:<ptype>,<location>
- ptype = v11,v2,cli1
- location = platform libraries directory
-
- Simplify specific options:
- /simplifyMatchDepth:<num>
- Set Simplify prover's matching depth limit
-
- Z3 specific options:
- /z3opt:<arg> specify additional Z3 options
- /z3multipleErrors
- report multiple counterexamples for each error
- /useArrayTheory
- use Z3's native theory (as opposed to axioms). Currently
- implies /monomorphize.
- /useSmtOutputFormat
- Z3 outputs a model in the SMTLIB2 format.
- /z3types generate multi-sorted VC that make use of Z3 types
- /z3lets:<n> 0 - no LETs, 1 - only LET TERM, 2 - only LET FORMULA,
- 3 - (default) any
- /z3exe:<path>
- path to Z3 executable
-
- CVC4 specific options:
- /cvc4exe:<path>
- path to CVC4 executable
-");
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.IO;
+using System.Linq;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using System.Text.RegularExpressions;
+
+namespace Microsoft.Boogie {
+ public class CommandLineOptionEngine
+ {
+ public readonly string ToolName;
+ public readonly string DescriptiveToolName;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(ToolName != null);
+ Contract.Invariant(DescriptiveToolName != null);
+ Contract.Invariant(this._environment != null);
+ Contract.Invariant(cce.NonNullElements(this._files));
+ Contract.Invariant(this._fileTimestamp != null);
+ }
+
+ private string/*!*/ _environment = "";
+
+ public string Environment {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this._environment;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._environment = value;
+ }
+ }
+
+ private readonly List<string/*!*/>/*!*/ _files = new List<string/*!*/>();
+
+ public IList<string/*!*/>/*!*/ Files {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IList<string>>()));
+ Contract.Ensures(Contract.Result<IList<string>>().IsReadOnly);
+ return this._files.AsReadOnly();
+ }
+ }
+
+ public bool HelpRequested = false;
+ public bool AttrHelpRequested = false;
+
+ public CommandLineOptionEngine(string toolName, string descriptiveName) {
+ Contract.Requires(toolName != null);
+ Contract.Requires(descriptiveName != null);
+ ToolName = toolName;
+ DescriptiveToolName = descriptiveName;
+ }
+
+ public virtual string/*!*/ VersionNumber {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return cce.NonNull(cce.NonNull(System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location)).FileVersion);
+ }
+ }
+ public virtual string/*!*/ VersionSuffix {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return " version " + VersionNumber + ", Copyright (c) 2003-2014, Microsoft.";
+ }
+ }
+ public virtual string/*!*/ Version {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return DescriptiveToolName + VersionSuffix;
+ }
+ }
+
+ private string/*!*/ _fileTimestamp = cce.NonNull(DateTime.Now.ToString("o")).Replace(':', '.');
+
+ public string FileTimestamp {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this._fileTimestamp;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._fileTimestamp = value;
+ }
+ }
+
+ public void ExpandFilename(ref string pattern, string logPrefix, string fileTimestamp) {
+ if (pattern != null) {
+ pattern = pattern.Replace("@PREFIX@", logPrefix).Replace("@TIME@", fileTimestamp);
+ string fn = Files.Count == 0 ? "" : Files[Files.Count - 1];
+ fn = fn.Replace('/', '-').Replace('\\', '-');
+ pattern = pattern.Replace("@FILE@", fn);
+ }
+ }
+
+ /// <summary>
+ /// Process the option and modify "ps" accordingly.
+ /// Return true if the option is one that is recognized.
+ /// </summary>
+ protected virtual bool ParseOption(string name, CommandLineParseState ps) {
+ Contract.Requires(name != null);
+ Contract.Requires(ps != null);
+
+ switch (name) {
+ case "help":
+ case "?":
+ if (ps.ConfirmArgumentCount(0)) {
+ HelpRequested = true;
+ }
+ return true;
+ case "attrHelp":
+ if (ps.ConfirmArgumentCount(0)) {
+ AttrHelpRequested = true;
+ }
+ return true;
+ default:
+ break;
+ }
+ return false; // unrecognized option
+ }
+
+ protected class CommandLineParseState
+ {
+ public string s;
+ public bool hasColonArgument;
+ public readonly string[]/*!*/ args;
+ public int i;
+ public int nextIndex;
+ public bool EncounteredErrors;
+ public readonly string ToolName;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(args != null);
+ Contract.Invariant(0 <= i && i <= args.Length);
+ Contract.Invariant(0 <= nextIndex && nextIndex <= args.Length);
+ }
+
+
+ public CommandLineParseState(string[] args, string toolName) {
+ Contract.Requires(args != null);
+ Contract.Requires(Contract.ForAll(0, args.Length, i => args[i] != null));
+ Contract.Requires(toolName != null);
+ Contract.Ensures(this.args == args);
+ this.ToolName = toolName;
+ this.s = null; // set later by client
+ this.hasColonArgument = false; // set later by client
+ this.args = args;
+ this.i = 0;
+ this.nextIndex = 0; // set later by client
+ this.EncounteredErrors = false;
+ }
+
+ public bool CheckBooleanFlag(string flagName, ref bool flag, bool valueWhenPresent) {
+ Contract.Requires(flagName != null);
+ //modifies nextIndex, encounteredErrors, Console.Error.*;
+ bool flagPresent = false;
+
+ if ((s == "/" + flagName || s == "-" + flagName) && ConfirmArgumentCount(0)) {
+ flag = valueWhenPresent;
+ flagPresent = true;
+ }
+ return flagPresent;
+ }
+
+ public bool CheckBooleanFlag(string flagName, ref bool flag) {
+ Contract.Requires(flagName != null);
+ //modifies nextIndex, encounteredErrors, Console.Error.*;
+ return CheckBooleanFlag(flagName, ref flag, true);
+ }
+
+ /// <summary>
+ /// If there is one argument and it is a non-negative integer, then set "arg" to that number and return "true".
+ /// Otherwise, emit error message, leave "arg" unchanged, and return "false".
+ /// </summary>
+ public bool GetNumericArgument(ref int arg) {
+ //modifies nextIndex, encounteredErrors, Console.Error.*;
+ return GetNumericArgument(ref arg, a => 0 <= a);
+ }
+
+ /// <summary>
+ /// If there is one argument and the filtering predicate holds, then set "arg" to that number and return "true".
+ /// Otherwise, emit error message, leave "arg" unchanged, and return "false".
+ /// </summary>
+ public bool GetNumericArgument(ref int arg, Predicate<int> filter) {
+ Contract.Requires(filter != null);
+
+ if (this.ConfirmArgumentCount(1)) {
+ try {
+ Contract.Assume(args[i] != null);
+ Contract.Assert(args[i] is string); // needed to prove args[i].IsPeerConsistent
+ int d = Convert.ToInt32(this.args[this.i]);
+ if (filter == null || filter(d)) {
+ arg = d;
+ return true;
+ }
+ } catch (System.FormatException) {
+ } catch (System.OverflowException) {
+ }
+ } else {
+ return false;
+ }
+ Error("Invalid argument \"{0}\" to option {1}", args[this.i], this.s);
+ return false;
+ }
+
+ /// <summary>
+ /// If there is one argument and it is a non-negative integer less than "limit",
+ /// then set "arg" to that number and return "true".
+ /// Otherwise, emit error message, leave "arg" unchanged, and return "false".
+ /// </summary>
+ public bool GetNumericArgument(ref int arg, int limit) {
+ Contract.Requires(this.i < args.Length);
+ Contract.Ensures(Math.Min(arg, 0) <= Contract.ValueAtReturn(out arg) && Contract.ValueAtReturn(out arg) < limit);
+ //modifies nextIndex, encounteredErrors, Console.Error.*;
+ int a = arg;
+ if (!GetNumericArgument(ref a)) {
+ return false;
+ } else if (a < limit) {
+ arg = a;
+ return true;
+ } else {
+ Error("Invalid argument \"{0}\" to option {1}", args[this.i], this.s);
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// If there is one argument and it is a non-negative real, then set "arg" to that number and return "true".
+ /// Otherwise, emit an error message, leave "arg" unchanged, and return "false".
+ /// </summary>
+ public bool GetNumericArgument(ref double arg) {
+ Contract.Ensures(Contract.ValueAtReturn(out arg) >= 0);
+ //modifies nextIndex, encounteredErrors, Console.Error.*;
+ if (this.ConfirmArgumentCount(1)) {
+ try {
+ Contract.Assume(args[i] != null);
+ Contract.Assert(args[i] is string); // needed to prove args[i].IsPeerConsistent
+ double d = Convert.ToDouble(this.args[this.i]);
+ if (0 <= d) {
+ arg = d;
+ return true;
+ }
+ } catch (System.FormatException) {
+ } catch (System.OverflowException) {
+ }
+ } else {
+ return false;
+ }
+ Error("Invalid argument \"{0}\" to option {1}", args[this.i], this.s);
+ return false;
+ }
+
+ public bool ConfirmArgumentCount(int argCount) {
+ Contract.Requires(0 <= argCount);
+ //modifies nextIndex, encounteredErrors, Console.Error.*;
+ Contract.Ensures(Contract.Result<bool>() == (!(hasColonArgument && argCount != 1) && !(args.Length < i + argCount)));
+ if (hasColonArgument && argCount != 1) {
+ Error("\"{0}\" cannot take a colon argument", s);
+ nextIndex = args.Length;
+ return false;
+ } else if (args.Length < i + argCount) {
+ Error("\"{0}\" expects {1} argument{2}", s, argCount.ToString(), (string)(argCount == 1 ? "" : "s"));
+ nextIndex = args.Length;
+ return false;
+ } else {
+ nextIndex = i + argCount;
+ return true;
+ }
+ }
+
+ public void Error(string message, params string[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(message != null);
+ //modifies encounteredErrors, Console.Error.*;
+ Console.Error.WriteLine("{0}: Error: {1}", ToolName, String.Format(message, args));
+ EncounteredErrors = true;
+ }
+ }
+
+ public virtual void Usage() {
+ Console.WriteLine("{0}: usage: {0} [ option ... ] [ filename ... ]", ToolName);
+ Console.WriteLine(@" where <option> is one of
+
+ ---- General options -------------------------------------------------------
+
+ /help this message
+ /attrHelp print a message about declaration attributes supported by
+ this implementation");
+ }
+
+ public virtual void AttributeUsage() {
+ }
+
+ /// <summary>
+ /// This method is called after all parsing is done, if no parse errors were encountered.
+ /// </summary>
+ public virtual void ApplyDefaultOptions() {
+ }
+
+ /// <summary>
+ /// Parses the command-line arguments "args" into the global flag variables. Returns true
+ /// if there were no errors.
+ /// </summary>
+ /// <param name="args">Consumed ("captured" and possibly modified) by the method.</param>
+ public bool Parse([Captured] string[]/*!*/ args) {
+ Contract.Requires(cce.NonNullElements(args));
+
+ // save the command line options for the log files
+ Environment += "Command Line Options: " + args.Concat(" ");
+ args = cce.NonNull((string[])args.Clone()); // the operations performed may mutate the array, so make a copy
+ var ps = new CommandLineParseState(args, ToolName);
+
+ while (ps.i < args.Length) {
+ cce.LoopInvariant(ps.args == args);
+ string arg = args[ps.i];
+ Contract.Assert(arg != null);
+ ps.s = arg.Trim();
+
+ bool isOption = ps.s.StartsWith("-") || ps.s.StartsWith("/");
+ int colonIndex = ps.s.IndexOf(':');
+ if (0 <= colonIndex && isOption) {
+ ps.hasColonArgument = true;
+ args[ps.i] = ps.s.Substring(colonIndex + 1);
+ ps.s = ps.s.Substring(0, colonIndex);
+ } else {
+ ps.i++;
+ ps.hasColonArgument = false;
+ }
+ ps.nextIndex = ps.i;
+
+ if (isOption) {
+ if (!ParseOption(ps.s.Substring(1), ps)) {
+ if (Path.DirectorySeparatorChar == '/' && ps.s.StartsWith("/"))
+ this._files.Add(arg);
+ else
+ ps.Error("unknown switch: {0}", ps.s);
+ }
+ } else {
+ this._files.Add(arg);
+ }
+
+ ps.i = ps.nextIndex;
+ }
+
+ if (HelpRequested) {
+ Usage();
+ } else if (AttrHelpRequested) {
+ AttributeUsage();
+ } else if (ps.EncounteredErrors) {
+ Console.WriteLine("Use /help for available options");
+ }
+
+ if (ps.EncounteredErrors) {
+ return false;
+ } else {
+ this.ApplyDefaultOptions();
+ return true;
+ }
+ }
+
+ }
+
+ /// <summary>
+ /// Boogie command-line options (other tools can subclass this class in order to support a
+ /// superset of Boogie's options.
+ /// </summary>
+ public class CommandLineOptions : CommandLineOptionEngine {
+
+ public CommandLineOptions()
+ : base("Boogie", "Boogie program verifier") {
+ }
+
+ protected CommandLineOptions(string toolName, string descriptiveName)
+ : base(toolName, descriptiveName) {
+ Contract.Requires(toolName != null);
+ Contract.Requires(descriptiveName != null);
+ }
+
+ private static CommandLineOptions clo;
+ public static CommandLineOptions/*!*/ Clo
+ {
+ get { return clo; }
+ }
+
+ public static void Install(CommandLineOptions options) {
+ Contract.Requires(options != null);
+ clo = options;
+ }
+
+ public const long Megabyte = 1048576;
+
+ // Flags and arguments
+
+ public bool RunningBoogieFromCommandLine = false; // "false" means running Boogie from the plug-in
+
+ [ContractInvariantMethod]
+ void ObjectInvariant2() {
+ Contract.Invariant(LogPrefix != null);
+ Contract.Invariant(0 <= PrintUnstructured && PrintUnstructured < 3); // 0 = print only structured, 1 = both structured and unstructured, 2 = only unstructured
+ }
+
+ public int VerifySnapshots = -1;
+ public bool VerifySeparately = false;
+ public string PrintFile = null;
+ public int PrintUnstructured = 0;
+ public bool UseBaseNameForFileName = false;
+ public int DoomStrategy = -1;
+ public bool DoomRestartTP = false;
+ public bool PrintDesugarings = false;
+ public string SimplifyLogFilePath = null;
+ public bool PrintInstrumented = false;
+ public bool InstrumentWithAsserts = false;
+ public string ProverPreamble = null;
+
+ public enum InstrumentationPlaces {
+ LoopHeaders,
+ Everywhere
+ }
+ public InstrumentationPlaces InstrumentInfer = InstrumentationPlaces.LoopHeaders;
+ public bool PrintWithUniqueASTIds = false;
+ private string XmlSinkFilename = null;
+ [Peer]
+ public XmlSink XmlSink = null;
+ public bool Wait = false;
+ public bool Trace = false;
+ public bool TraceTimes = false;
+ public bool TraceProofObligations = false;
+ public bool TraceCachingForTesting
+ {
+ get
+ {
+ return TraceCaching == 1 || TraceCaching == 3;
+ }
+ }
+ public bool TraceCachingForBenchmarking
+ {
+ get
+ {
+ return TraceCaching == 2 || TraceCaching == 3;
+ }
+ }
+ public bool TraceCachingForDebugging
+ {
+ get
+ {
+ return TraceCaching == 3;
+ }
+ }
+ internal int TraceCaching = 0;
+ public bool NoResolve = false;
+ public bool NoTypecheck = false;
+ public bool OverlookBoogieTypeErrors = false;
+ public bool Verify = true;
+ public bool TraceVerify = false;
+ public int /*(0:3)*/ ErrorTrace = 1;
+ public bool IntraproceduralInfer = true;
+ public bool ContractInfer = false;
+ public bool ExplainHoudini = false;
+ public bool ReverseHoudiniWorklist = false;
+ public bool ConcurrentHoudini = false;
+ public bool ModifyTopologicalSorting = false;
+ public bool DebugConcurrentHoudini = false;
+ public bool HoudiniUseCrossDependencies = false;
+ public string StagedHoudini = null;
+ public bool DebugStagedHoudini = false;
+ public bool StagedHoudiniReachabilityAnalysis = false;
+ public bool StagedHoudiniMergeIgnoredAnnotations = false;
+ public int StagedHoudiniThreads = 1;
+ public string VariableDependenceIgnore = null;
+ public string AbstractHoudini = null;
+ public bool UseUnsatCoreForContractInfer = false;
+ public bool PrintAssignment = false;
+ // TODO(wuestholz): Add documentation for this flag.
+ public bool PrintNecessaryAssumes = false;
+ public int InlineDepth = -1;
+ public bool UseProverEvaluate = false; // Use ProverInterface's Evaluate method, instead of model to get variable values
+ public bool UseUncheckedContracts = false;
+ public bool SimplifyLogFileAppend = false;
+ public bool SoundnessSmokeTest = false;
+ public string Z3ExecutablePath = null;
+ public string Z3ExecutableName = null;
+ public string CVC4ExecutablePath = null;
+ public int KInductionDepth = -1;
+
+ private string/*!*/ _logPrefix = "";
+
+ public string LogPrefix {
+ get {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return this._logPrefix;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._logPrefix = value;
+ }
+ }
+
+ public bool PrettyPrint = true;
+
+ public enum ProverWarnings {
+ None,
+ Stdout,
+ Stderr
+ }
+ public ProverWarnings PrintProverWarnings = ProverWarnings.None;
+ public int ProverShutdownLimit = 0;
+
+ public enum SubsumptionOption {
+ Never,
+ NotForQuantifiers,
+ Always
+ }
+ public SubsumptionOption UseSubsumption = SubsumptionOption.Always;
+
+ public bool AlwaysAssumeFreeLoopInvariants = false;
+
+ public enum ShowEnvironment {
+ Never,
+ DuringPrint,
+ Always
+ }
+ public ShowEnvironment ShowEnv = ShowEnvironment.DuringPrint;
+ public bool DontShowLogo = false;
+ [ContractInvariantMethod]
+ void ObjectInvariant3() {
+ Contract.Invariant(-1 <= LoopFrameConditions && LoopFrameConditions < 3);
+ Contract.Invariant(0 <= ModifiesDefault && ModifiesDefault < 7);
+ Contract.Invariant((0 <= PrintErrorModel && PrintErrorModel <= 2) || PrintErrorModel == 4);
+ Contract.Invariant(0 <= EnhancedErrorMessages && EnhancedErrorMessages < 2);
+ Contract.Invariant(0 <= StepsBeforeWidening && StepsBeforeWidening <= 9);
+ Contract.Invariant(-1 <= this.bracketIdsInVC && this.bracketIdsInVC <= 1);
+ Contract.Invariant(cce.NonNullElements(this.proverOptions));
+ }
+
+ public int LoopUnrollCount = -1; // -1 means don't unroll loops
+ public bool SoundLoopUnrolling = false;
+ public int LoopFrameConditions = -1; // -1 means not specified -- this will be replaced by the "implications" section below
+ public int ModifiesDefault = 5;
+ public bool LocalModifiesChecks = true;
+ public bool NoVerifyByDefault = false;
+ public enum OwnershipModelOption {
+ Standard,
+ Experimental,
+ Trivial
+ }
+ public OwnershipModelOption OwnershipModelEncoding = OwnershipModelOption.Standard;
+ public int PrintErrorModel = 0;
+ public string PrintErrorModelFile = null;
+ public string/*?*/ ModelViewFile = null;
+ public int EnhancedErrorMessages = 0;
+ public string PrintCFGPrefix = null;
+ public bool ForceBplErrors = false; // if true, boogie error is shown even if "msg" attribute is present
+ public bool UseArrayTheory = false;
+ public bool UseSmtOutputFormat = false;
+ public bool WeakArrayTheory = false;
+ public bool UseLabels = true;
+ public bool RunDiagnosticsOnTimeout = false;
+ public bool TraceDiagnosticsOnTimeout = false;
+ public int TimeLimitPerAssertionInPercent = 10;
+ public bool SIBoolControlVC = false;
+ public bool MonomorphicArrays {
+ get {
+ return UseArrayTheory || TypeEncodingMethod == TypeEncoding.Monomorphic;
+ }
+ }
+ public bool ExpandLambdas = true; // not useful from command line, only to be set to false programatically
+ public bool DoModSetAnalysis = false;
+ public bool UseAbstractInterpretation = true; // true iff the user want to use abstract interpretation
+ private int /*0..9*/stepsBeforeWidening = 0; // The number of steps that must be done before applying a widen operator
+
+ public int StepsBeforeWidening
+ {
+ get
+ {
+ Contract.Ensures(0 <= Contract.Result<int>() && Contract.Result<int>() <= 9);
+ return this.stepsBeforeWidening;
+ }
+ set
+ {
+ Contract.Requires(0 <= value && value <= 9);
+ this.stepsBeforeWidening = value;
+ }
+ }
+
+ public string CivlDesugaredFile = null;
+ public bool TrustAtomicityTypes = false;
+ public bool TrustNonInterference = false;
+ public int TrustLayersUpto = -1;
+ public int TrustLayersDownto = int.MaxValue;
+
+ public enum VCVariety {
+ Structured,
+ Block,
+ Local,
+ BlockNested,
+ BlockReach,
+ BlockNestedReach,
+ Dag,
+ DagIterative,
+ Doomed,
+ Unspecified
+ }
+ public VCVariety vcVariety = VCVariety.Unspecified; // will not be Unspecified after command line has been parsed
+
+ public bool RemoveEmptyBlocks = true;
+ public bool CoalesceBlocks = true;
+ public bool PruneInfeasibleEdges = true;
+
+ [Rep]
+ public ProverFactory TheProverFactory;
+ public string ProverName;
+ [Peer]
+ private List<string> proverOptions = new List<string>();
+
+ public IEnumerable<string> ProverOptions
+ {
+ set
+ {
+ Contract.Requires(cce.NonNullElements(value));
+
+ this.proverOptions = new List<string>(value);
+ }
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<string>>()));
+
+ foreach (string s in this.proverOptions)
+ yield return s;
+ }
+ }
+
+ [Obsolete("use the setter for 'ProverOptions' directly")]
+ public void AddProverOption(string option)
+ {
+ Contract.Requires(option != null);
+
+ this.ProverOptions = this.ProverOptions.Concat1(option);
+ }
+
+ [Obsolete("use the setter for 'ProverOptions' directly")]
+ public void RemoveAllProverOptions(Predicate<string> match)
+ {
+ this.ProverOptions = this.ProverOptions.Where(s => !match(s));
+ }
+
+ private int bracketIdsInVC = -1; // -1 - not specified, 0 - no, 1 - yes
+
+ public int BracketIdsInVC {
+ get {
+ Contract.Ensures(-1 <= Contract.Result<int>() && Contract.Result<int>() <= 1);
+ return this.bracketIdsInVC;
+ }
+ set {
+ Contract.Requires(-1 <= value && value <= 1);
+ this.bracketIdsInVC = value;
+ }
+ }
+
+ public bool CausalImplies = false;
+
+ public int SimplifyProverMatchDepth = -1; // -1 means not specified
+ public int ProverKillTime = -1; // -1 means not specified
+ public int SmokeTimeout = 10; // default to 10s
+ public int ProverCCLimit = 5;
+ public bool z3AtFlag = true;
+ public bool RestartProverPerVC = false;
+
+ public double VcsMaxCost = 1.0;
+ public double VcsPathJoinMult = 0.8;
+ public double VcsPathCostMult = 1.0;
+ public double VcsAssumeMult = 0.01;
+ public double VcsPathSplitMult = 0.5; // 0.5-always, 2-rarely do path splitting
+ public int VcsMaxSplits = 1;
+ public int VcsMaxKeepGoingSplits = 1;
+ public int VcsFinalAssertTimeout = 30;
+ public int VcsKeepGoingTimeout = 1;
+ public int VcsCores = 1;
+ public bool VcsDumpSplits = false;
+
+ public bool DebugRefuted = false;
+
+ public XmlSink XmlRefuted {
+ get {
+ if (DebugRefuted)
+ return XmlSink;
+ else
+ return null;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant4() {
+ Contract.Invariant(cce.NonNullElements(this.z3Options));
+ Contract.Invariant(0 <= Z3lets && Z3lets < 4);
+ }
+
+ [Peer]
+ private List<string> z3Options = new List<string>();
+
+ public IEnumerable<string> Z3Options
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<IEnumerable<string>>() != null);
+ foreach (string s in z3Options)
+ yield return s;
+ }
+ }
+
+ public void AddZ3Option(string option)
+ {
+ Contract.Requires(option != null);
+ this.z3Options.Add(option);
+ }
+
+ public bool Z3types = false;
+ public int Z3lets = 3; // 0 - none, 1 - only LET TERM, 2 - only LET FORMULA, 3 - (default) any
+
+
+ // Maximum amount of virtual memory (in bytes) for the prover to use
+ //
+ // Non-positive number indicates unbounded.
+ public long MaxProverMemory = 100 * Megabyte;
+
+ // Minimum number of prover calls before restart
+ public int MinNumOfProverCalls = 5;
+
+ public enum PlatformType {
+ notSpecified,
+ v1,
+ v11,
+ v2,
+ cli1
+ }
+ public PlatformType TargetPlatform;
+ public string TargetPlatformLocation;
+ public string StandardLibraryLocation;
+
+ // whether procedure inlining is enabled at call sites.
+ public enum Inlining {
+ None,
+ Assert,
+ Assume,
+ Spec
+ };
+ public Inlining ProcedureInlining = Inlining.Assume;
+ public bool PrintInlined = false;
+ public bool ExtractLoops = false;
+ public bool DeterministicExtractLoops = false;
+ public string SecureVcGen = null;
+ public int StratifiedInlining = 0;
+ public string FixedPointEngine = null;
+ public int StratifiedInliningOption = 0;
+ public bool StratifiedInliningWithoutModels = false; // disable model generation for SI
+ public int StratifiedInliningVerbose = 0; // verbosity level
+ public int RecursionBound = 500;
+ public bool NonUniformUnfolding = false;
+ public int StackDepthBound = 0;
+ public string inferLeastForUnsat = null;
+
+ // Inference mode for fixed point engine
+ public enum FixedPointInferenceMode {
+ Corral,
+ OldCorral,
+ Flat,
+ Procedure,
+ Call
+ };
+ public FixedPointInferenceMode FixedPointMode = FixedPointInferenceMode.Procedure;
+
+ public string PrintFixedPoint = null;
+
+ public string PrintConjectures = null;
+
+ public bool ExtractLoopsUnrollIrreducible = true; // unroll irreducible loops? (set programmatically)
+
+ public enum TypeEncoding {
+ None,
+ Predicates,
+ Arguments,
+ Monomorphic
+ };
+ public TypeEncoding TypeEncodingMethod = TypeEncoding.Predicates;
+
+ public bool Monomorphize = false;
+
+ public bool ReflectAdd = false;
+
+ public int LiveVariableAnalysis = 1;
+
+ // Static constructor
+ static CommandLineOptions() {
+ if (System.Type.GetType("Mono.Runtime") == null) { // MONO
+ TraceListenerCollection/*!*/ dbl = Debug.Listeners;
+ Contract.Assert(dbl != null);
+ Contract.Assume(cce.IsPeerConsistent(dbl)); // hangs off static field
+ dbl.Add(new DefaultTraceListener());
+ }
+ }
+
+ public IEnumerable<string/*!*/> ProcsToCheck {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<string/*!*/>>(), true));
+ return this.procsToCheck != null ? this.procsToCheck.AsEnumerable() : null;
+ }
+ }
+
+ private List<string/*!*/> procsToCheck = null; // null means "no restriction"
+
+ [ContractInvariantMethod]
+ void ObjectInvariant5() {
+ Contract.Invariant(cce.NonNullElements(this.procsToCheck, true));
+ Contract.Invariant(Ai != null);
+ }
+
+ public class AiFlags {
+ public bool J_Trivial = false;
+ public bool J_Intervals = false;
+ public bool DebugStatistics = false;
+ }
+ public readonly AiFlags/*!*/ Ai = new AiFlags();
+
+ public class ConcurrentHoudiniOptions
+ {
+ public List<string> ProverOptions = new List<string>();
+ public int ProverCCLimit = 5;
+ public bool DisableLoopInvEntryAssert = false;
+ public bool DisableLoopInvMaintainedAssert = false;
+ public bool ModifyTopologicalSorting = false;
+ }
+ public List<ConcurrentHoudiniOptions> Cho = new List<ConcurrentHoudiniOptions>();
+
+ protected override bool ParseOption(string name, CommandLineOptionEngine.CommandLineParseState ps) {
+ var args = ps.args; // convenient synonym
+ switch (name) {
+ case "infer":
+ if (ps.ConfirmArgumentCount(1)) {
+ foreach (char c in cce.NonNull(args[ps.i])) {
+ switch (c) {
+ case 't':
+ Ai.J_Trivial = true;
+ UseAbstractInterpretation = true;
+ break;
+ case 'j':
+ Ai.J_Intervals = true;
+ UseAbstractInterpretation = true;
+ break;
+ case 's':
+ Ai.DebugStatistics = true;
+ UseAbstractInterpretation = true;
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ StepsBeforeWidening = (int)char.GetNumericValue(c);
+ break;
+ default:
+ ps.Error("Invalid argument '{0}' to option {1}", c.ToString(), ps.s);
+ break;
+ }
+ }
+ }
+ return true;
+
+ case "noinfer":
+ if (ps.ConfirmArgumentCount(0)) {
+ UseAbstractInterpretation = false;
+ }
+ return true;
+
+ case "break":
+ case "launch":
+ if (ps.ConfirmArgumentCount(0)) {
+ System.Diagnostics.Debugger.Launch();
+ }
+ return true;
+
+ case "proc":
+ if (this.procsToCheck == null) {
+ this.procsToCheck = new List<string/*!*/>();
+ }
+ if (ps.ConfirmArgumentCount(1)) {
+ this.procsToCheck.Add(cce.NonNull(args[ps.i]));
+ }
+ return true;
+
+ case "xml":
+ if (ps.ConfirmArgumentCount(1)) {
+ XmlSinkFilename = args[ps.i];
+ }
+ return true;
+
+ case "print":
+ if (ps.ConfirmArgumentCount(1)) {
+ PrintFile = args[ps.i];
+ }
+ return true;
+
+ case "pretty":
+ int val = 1;
+ if (ps.GetNumericArgument(ref val, 2)) {
+ PrettyPrint = val == 1;
+ }
+ return true;
+
+ case "CivlDesugaredFile":
+ if (ps.ConfirmArgumentCount(1)) {
+ CivlDesugaredFile = args[ps.i];
+ }
+ return true;
+
+ case "trustLayersUpto":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ ps.GetNumericArgument(ref TrustLayersUpto);
+ }
+ return true;
+
+ case "trustLayersDownto":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ ps.GetNumericArgument(ref TrustLayersDownto);
+ }
+ return true;
+
+ case "proverLog":
+ if (ps.ConfirmArgumentCount(1)) {
+ SimplifyLogFilePath = args[ps.i];
+ }
+ return true;
+
+ case "proverPreamble":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ ProverPreamble = args[ps.i];
+ }
+ return true;
+
+ case "logPrefix":
+ if (ps.ConfirmArgumentCount(1)) {
+ string s = cce.NonNull(args[ps.i]);
+ LogPrefix += s.Replace('/', '-').Replace('\\', '-');
+ }
+ return true;
+
+ case "proverShutdownLimit":
+ ps.GetNumericArgument(ref ProverShutdownLimit);
+ return true;
+
+ case "errorTrace":
+ ps.GetNumericArgument(ref ErrorTrace, 3);
+ return true;
+
+ case "proverWarnings": {
+ int pw = 0;
+ if (ps.GetNumericArgument(ref pw, 3)) {
+ switch (pw) {
+ case 0:
+ PrintProverWarnings = ProverWarnings.None;
+ break;
+ case 1:
+ PrintProverWarnings = ProverWarnings.Stdout;
+ break;
+ case 2:
+ PrintProverWarnings = ProverWarnings.Stderr;
+ break;
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // postcondition of GetNumericArgument guarantees that we don't get here
+ }
+ }
+ return true;
+ }
+
+ case "env": {
+ int e = 0;
+ if (ps.GetNumericArgument(ref e, 3)) {
+ switch (e) {
+ case 0:
+ ShowEnv = ShowEnvironment.Never;
+ break;
+ case 1:
+ ShowEnv = ShowEnvironment.DuringPrint;
+ break;
+ case 2:
+ ShowEnv = ShowEnvironment.Always;
+ break;
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // postcondition of GetNumericArgument guarantees that we don't get here
+ }
+ }
+ return true;
+ }
+
+ case "loopUnroll":
+ ps.GetNumericArgument(ref LoopUnrollCount);
+ return true;
+
+ case "printModel":
+ if (ps.ConfirmArgumentCount(1)) {
+ switch (args[ps.i]) {
+ case "0":
+ PrintErrorModel = 0;
+ break;
+ case "1":
+ PrintErrorModel = 1;
+ break;
+ case "2":
+ PrintErrorModel = 2;
+ break;
+ case "4":
+ PrintErrorModel = 4;
+ break;
+ default:
+ ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ break;
+ }
+ }
+ return true;
+
+ case "mv":
+ if (ps.ConfirmArgumentCount(1)) {
+ ModelViewFile = args[ps.i];
+ }
+ return true;
+
+ case "printModelToFile":
+ if (ps.ConfirmArgumentCount(1)) {
+ PrintErrorModelFile = args[ps.i];
+ }
+ return true;
+
+ case "enhancedErrorMessages":
+ ps.GetNumericArgument(ref EnhancedErrorMessages, 2);
+ return true;
+
+ case "printCFG":
+ if (ps.ConfirmArgumentCount(1)) {
+ PrintCFGPrefix = args[ps.i];
+ }
+ return true;
+
+ case "inlineDepth":
+ ps.GetNumericArgument(ref InlineDepth);
+ return true;
+
+ case "subsumption": {
+ int s = 0;
+ if (ps.GetNumericArgument(ref s, 3)) {
+ switch (s) {
+ case 0:
+ UseSubsumption = SubsumptionOption.Never;
+ break;
+ case 1:
+ UseSubsumption = SubsumptionOption.NotForQuantifiers;
+ break;
+ case 2:
+ UseSubsumption = SubsumptionOption.Always;
+ break;
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ } // postcondition of GetNumericArgument guarantees that we don't get here
+ }
+ }
+ return true;
+ }
+
+ case "liveVariableAnalysis": {
+ int lva = 0;
+ if (ps.GetNumericArgument(ref lva, 3)) {
+ LiveVariableAnalysis = lva;
+ }
+ return true;
+ }
+
+ case "removeEmptyBlocks": {
+ int reb = 0;
+ if (ps.GetNumericArgument(ref reb, 2)) {
+ RemoveEmptyBlocks = reb == 1;
+ }
+ return true;
+ }
+
+ case "coalesceBlocks": {
+ int cb = 0;
+ if (ps.GetNumericArgument(ref cb, 2)) {
+ CoalesceBlocks = cb == 1;
+ }
+ return true;
+ }
+
+ case "noPruneInfeasibleEdges": {
+ if (ps.ConfirmArgumentCount(0)) {
+ PruneInfeasibleEdges = false;
+ }
+ return true;
+ }
+
+ case "stagedHoudini": {
+ if (ps.ConfirmArgumentCount(1)) {
+ if(args[ps.i] == "COARSE" ||
+ args[ps.i] == "FINE" ||
+ args[ps.i] == "BALANCED") {
+ StagedHoudini = args[ps.i];
+ } else {
+ ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ }
+ }
+ return true;
+ }
+
+ case "stagedHoudiniThreads": {
+ ps.GetNumericArgument(ref StagedHoudiniThreads);
+ return true;
+ }
+
+ case "stagedHoudiniReachabilityAnalysis": {
+ if (ps.ConfirmArgumentCount(0)) {
+ StagedHoudiniReachabilityAnalysis = true;
+ }
+ return true;
+ }
+
+ case "stagedHoudiniMergeIgnoredAnnotations": {
+ if (ps.ConfirmArgumentCount(0)) {
+ StagedHoudiniMergeIgnoredAnnotations = true;
+ }
+ return true;
+ }
+
+ case "debugStagedHoudini": {
+ if (ps.ConfirmArgumentCount(0)) {
+ DebugStagedHoudini = true;
+ }
+ return true;
+ }
+
+ case "variableDependenceIgnore": {
+ if (ps.ConfirmArgumentCount(1)) {
+ VariableDependenceIgnore = args[ps.i];
+ }
+ return true;
+ }
+
+ case "abstractHoudini":
+ {
+ if (ps.ConfirmArgumentCount(1))
+ {
+ AbstractHoudini = args[ps.i];
+ }
+ return true;
+ }
+ case "vc":
+ if (ps.ConfirmArgumentCount(1)) {
+ switch (args[ps.i]) {
+ case "s":
+ case "structured":
+ vcVariety = VCVariety.Structured;
+ break;
+ case "b":
+ case "block":
+ vcVariety = VCVariety.Block;
+ break;
+ case "l":
+ case "local":
+ vcVariety = VCVariety.Local;
+ break;
+ case "n":
+ case "nested":
+ vcVariety = VCVariety.BlockNested;
+ break;
+ case "m":
+ vcVariety = VCVariety.BlockNestedReach;
+ break;
+ case "r":
+ vcVariety = VCVariety.BlockReach;
+ break;
+ case "d":
+ case "dag":
+ vcVariety = VCVariety.Dag;
+ break;
+ case "i":
+ vcVariety = VCVariety.DagIterative;
+ break;
+ case "doomed":
+ vcVariety = VCVariety.Doomed;
+ break;
+ default:
+ ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ break;
+ }
+ }
+ return true;
+
+ case "prover":
+ if (ps.ConfirmArgumentCount(1)) {
+ TheProverFactory = ProverFactory.Load(cce.NonNull(args[ps.i]));
+ ProverName = cce.NonNull(args[ps.i]).ToUpper();
+ }
+ return true;
+
+ case "p":
+ case "proverOpt":
+ if (ps.ConfirmArgumentCount(1)) {
+ ProverOptions = ProverOptions.Concat1(cce.NonNull(args[ps.i]));
+ }
+ return true;
+
+ case "DoomStrategy":
+ ps.GetNumericArgument(ref DoomStrategy);
+ return true;
+
+ case "DoomRestartTP":
+ if (ps.ConfirmArgumentCount(0)) {
+ DoomRestartTP = true;
+ }
+ return true;
+
+ case "extractLoops":
+ if (ps.ConfirmArgumentCount(0)) {
+ ExtractLoops = true;
+ }
+ return true;
+
+ case "deterministicExtractLoops":
+ if (ps.ConfirmArgumentCount(0)) {
+ DeterministicExtractLoops = true;
+ }
+ return true;
+
+ case "inline":
+ if (ps.ConfirmArgumentCount(1)) {
+ switch (args[ps.i]) {
+ case "none":
+ ProcedureInlining = Inlining.None;
+ break;
+ case "assert":
+ ProcedureInlining = Inlining.Assert;
+ break;
+ case "assume":
+ ProcedureInlining = Inlining.Assume;
+ break;
+ case "spec":
+ ProcedureInlining = Inlining.Spec;
+ break;
+ default:
+ ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ break;
+ }
+ }
+ return true;
+ case "secure":
+ if (ps.ConfirmArgumentCount(1))
+ SecureVcGen = args[ps.i];
+ return true;
+ case "stratifiedInline":
+ if (ps.ConfirmArgumentCount(1)) {
+ switch (args[ps.i]) {
+ case "0":
+ StratifiedInlining = 0;
+ break;
+ case "1":
+ StratifiedInlining = 1;
+ break;
+ default:
+ StratifiedInlining = Int32.Parse(cce.NonNull(args[ps.i]));
+ //ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ break;
+ }
+ }
+ return true;
+ case "fixedPointEngine":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ FixedPointEngine = args[ps.i];
+ }
+ return true;
+ case "fixedPointInfer":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ switch (args[ps.i])
+ {
+ case "corral":
+ FixedPointMode = FixedPointInferenceMode.Corral;
+ break;
+ case "oldCorral":
+ FixedPointMode = FixedPointInferenceMode.OldCorral;
+ break;
+ case "flat":
+ FixedPointMode = FixedPointInferenceMode.Flat;
+ break;
+ case "procedure":
+ FixedPointMode = FixedPointInferenceMode.Procedure;
+ break;
+ case "call":
+ FixedPointMode = FixedPointInferenceMode.Call;
+ break;
+ default:
+ ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ break;
+ }
+ }
+ return true;
+ case "printFixedPoint":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ PrintFixedPoint = args[ps.i];
+ }
+ return true;
+ case "printConjectures":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ PrintConjectures = args[ps.i];
+ }
+ return true;
+ case "siVerbose":
+ if (ps.ConfirmArgumentCount(1)) {
+ StratifiedInliningVerbose = Int32.Parse(cce.NonNull(args[ps.i]));
+ }
+ return true;
+ case "recursionBound":
+ if (ps.ConfirmArgumentCount(1)) {
+ RecursionBound = Int32.Parse(cce.NonNull(args[ps.i]));
+ }
+ return true;
+ case "stackDepthBound":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ StackDepthBound = Int32.Parse(cce.NonNull(args[ps.i]));
+ }
+ return true;
+ case "stratifiedInlineOption":
+ if (ps.ConfirmArgumentCount(1)) {
+ StratifiedInliningOption = Int32.Parse(cce.NonNull(args[ps.i]));
+ }
+ return true;
+
+ case "inferLeastForUnsat":
+ if (ps.ConfirmArgumentCount(1)) {
+ inferLeastForUnsat = args[ps.i];
+ }
+ return true;
+
+ case "typeEncoding":
+ if (ps.ConfirmArgumentCount(1)) {
+ switch (args[ps.i]) {
+ case "n":
+ case "none":
+ TypeEncodingMethod = TypeEncoding.None;
+ break;
+ case "p":
+ case "predicates":
+ TypeEncodingMethod = TypeEncoding.Predicates;
+ break;
+ case "a":
+ case "arguments":
+ TypeEncodingMethod = TypeEncoding.Arguments;
+ break;
+ case "m":
+ case "monomorphic":
+ TypeEncodingMethod = TypeEncoding.Monomorphic;
+ break;
+ default:
+ ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ break;
+ }
+ }
+ return true;
+
+ case "instrumentInfer":
+ if (ps.ConfirmArgumentCount(1)) {
+ switch (args[ps.i]) {
+ case "e":
+ InstrumentInfer = InstrumentationPlaces.Everywhere;
+ break;
+ case "h":
+ InstrumentInfer = InstrumentationPlaces.LoopHeaders;
+ break;
+ default:
+ ps.Error("Invalid argument \"{0}\" to option {1}", args[ps.i], ps.s);
+ break;
+ }
+ }
+ return true;
+
+ case "concurrentHoudini":
+ if (ps.ConfirmArgumentCount(0)) {
+ ConcurrentHoudini = true;
+ }
+ return true;
+
+ case "modifyTopologicalSorting":
+ if (ps.ConfirmArgumentCount(0)) {
+ ModifyTopologicalSorting = true;
+ }
+ return true;
+
+ case "debugConcurrentHoudini":
+ if (ps.ConfirmArgumentCount(0)) {
+ DebugConcurrentHoudini = true;
+ }
+ return true;
+
+ case "vcBrackets":
+ ps.GetNumericArgument(ref bracketIdsInVC, 2);
+ return true;
+
+ case "proverMemoryLimit": {
+ int d = 0;
+ if (ps.GetNumericArgument(ref d)) {
+ MaxProverMemory = d * Megabyte;
+ }
+ return true;
+ }
+
+ case "vcsMaxCost":
+ ps.GetNumericArgument(ref VcsMaxCost);
+ return true;
+
+ case "vcsPathJoinMult":
+ ps.GetNumericArgument(ref VcsPathJoinMult);
+ return true;
+
+ case "vcsPathCostMult":
+ ps.GetNumericArgument(ref VcsPathCostMult);
+ return true;
+
+ case "vcsAssumeMult":
+ ps.GetNumericArgument(ref VcsAssumeMult);
+ return true;
+
+ case "vcsPathSplitMult":
+ ps.GetNumericArgument(ref VcsPathSplitMult);
+ return true;
+
+ case "vcsMaxSplits":
+ ps.GetNumericArgument(ref VcsMaxSplits);
+ return true;
+
+ case "vcsMaxKeepGoingSplits":
+ ps.GetNumericArgument(ref VcsMaxKeepGoingSplits);
+ return true;
+
+ case "vcsFinalAssertTimeout":
+ ps.GetNumericArgument(ref VcsFinalAssertTimeout);
+ return true;
+
+ case "vcsKeepGoingTimeout":
+ ps.GetNumericArgument(ref VcsKeepGoingTimeout);
+ return true;
+
+ case "vcsCores":
+ ps.GetNumericArgument(ref VcsCores, a => 1 <= a);
+ return true;
+
+ case "vcsLoad":
+ double load = 0.0;
+ if (ps.GetNumericArgument(ref load)) {
+ if (3.0 <= load) {
+ ps.Error("surprisingly high load specified; got {0}, expected nothing above 3.0", load.ToString());
+ load = 3.0;
+ }
+ int p = (int)Math.Round(System.Environment.ProcessorCount * load);
+ VcsCores = p < 1 ? 1 : p;
+ }
+ return true;
+
+ case "simplifyMatchDepth":
+ ps.GetNumericArgument(ref SimplifyProverMatchDepth);
+ return true;
+
+ case "timeLimit":
+ ps.GetNumericArgument(ref ProverKillTime);
+ return true;
+
+ case "timeLimitPerAssertionInPercent":
+ ps.GetNumericArgument(ref TimeLimitPerAssertionInPercent, a => 0 < a);
+ return true;
+
+ case "smokeTimeout":
+ ps.GetNumericArgument(ref SmokeTimeout);
+ return true;
+
+ case "errorLimit":
+ ps.GetNumericArgument(ref ProverCCLimit);
+ return true;
+
+ case "verifySnapshots":
+ ps.GetNumericArgument(ref VerifySnapshots, 4);
+ return true;
+
+ case "traceCaching":
+ ps.GetNumericArgument(ref TraceCaching, 4);
+ return true;
+
+ case "useSmtOutputFormat": {
+ if (ps.ConfirmArgumentCount(0)) {
+ UseSmtOutputFormat = true;
+ }
+ return true;
+ }
+
+ case "z3opt":
+ if (ps.ConfirmArgumentCount(1)) {
+ AddZ3Option(cce.NonNull(args[ps.i]));
+ }
+ return true;
+
+ case "z3lets":
+ ps.GetNumericArgument(ref Z3lets, 4);
+ return true;
+
+ case "platform":
+ if (ps.ConfirmArgumentCount(1)) {
+ StringCollection platformOptions = this.ParseNamedArgumentList(args[ps.i]);
+ if (platformOptions != null && platformOptions.Count > 0) {
+ try {
+ this.TargetPlatform = (PlatformType)cce.NonNull(Enum.Parse(typeof(PlatformType), cce.NonNull(platformOptions[0])));
+ } catch {
+ ps.Error("Bad /platform type '{0}'", platformOptions[0]);
+ break;
+ }
+ if (platformOptions.Count > 1) {
+ this.TargetPlatformLocation = platformOptions[1];
+ if (!Directory.Exists(platformOptions[1])) {
+ ps.Error("/platform directory '{0}' does not exist", platformOptions[1]);
+ break;
+ }
+ }
+ }
+ }
+ return true;
+
+ case "z3exe":
+ if (ps.ConfirmArgumentCount(1)) {
+ Z3ExecutablePath = args[ps.i];
+ }
+ return true;
+ // This sets name of z3 binary boogie binary directory, not path
+ case "z3name":
+ if (ps.ConfirmArgumentCount(1))
+ {
+ Z3ExecutableName = args[ps.i];
+ }
+ return true;
+
+ case "cvc4exe":
+ if (ps.ConfirmArgumentCount(1)) {
+ CVC4ExecutablePath = args[ps.i];
+ }
+ return true;
+
+ case "kInductionDepth":
+ ps.GetNumericArgument(ref KInductionDepth);
+ return true;
+
+ default:
+ bool optionValue = false;
+ if (ps.CheckBooleanFlag("printUnstructured", ref optionValue)) {
+ PrintUnstructured = optionValue ? 1 : 0;
+ return true;
+ }
+
+ if (ps.CheckBooleanFlag("printDesugared", ref PrintDesugarings) ||
+ ps.CheckBooleanFlag("printInstrumented", ref PrintInstrumented) ||
+ ps.CheckBooleanFlag("printWithUniqueIds", ref PrintWithUniqueASTIds) ||
+ ps.CheckBooleanFlag("wait", ref Wait) ||
+ ps.CheckBooleanFlag("trace", ref Trace) ||
+ ps.CheckBooleanFlag("traceTimes", ref TraceTimes) ||
+ ps.CheckBooleanFlag("tracePOs", ref TraceProofObligations) ||
+ ps.CheckBooleanFlag("noResolve", ref NoResolve) ||
+ ps.CheckBooleanFlag("noTypecheck", ref NoTypecheck) ||
+ ps.CheckBooleanFlag("overlookTypeErrors", ref OverlookBoogieTypeErrors) ||
+ ps.CheckBooleanFlag("noVerify", ref Verify, false) ||
+ ps.CheckBooleanFlag("traceverify", ref TraceVerify) ||
+ ps.CheckBooleanFlag("alwaysAssumeFreeLoopInvariants", ref AlwaysAssumeFreeLoopInvariants, true) ||
+ ps.CheckBooleanFlag("nologo", ref DontShowLogo) ||
+ ps.CheckBooleanFlag("proverLogAppend", ref SimplifyLogFileAppend) ||
+ ps.CheckBooleanFlag("soundLoopUnrolling", ref SoundLoopUnrolling) ||
+ ps.CheckBooleanFlag("checkInfer", ref InstrumentWithAsserts) ||
+ ps.CheckBooleanFlag("interprocInfer", ref IntraproceduralInfer, false) ||
+ ps.CheckBooleanFlag("restartProver", ref RestartProverPerVC) ||
+ ps.CheckBooleanFlag("printInlined", ref PrintInlined) ||
+ ps.CheckBooleanFlag("smoke", ref SoundnessSmokeTest) ||
+ ps.CheckBooleanFlag("vcsDumpSplits", ref VcsDumpSplits) ||
+ ps.CheckBooleanFlag("dbgRefuted", ref DebugRefuted) ||
+ ps.CheckBooleanFlag("causalImplies", ref CausalImplies) ||
+ ps.CheckBooleanFlag("reflectAdd", ref ReflectAdd) ||
+ ps.CheckBooleanFlag("z3types", ref Z3types) ||
+ ps.CheckBooleanFlag("z3multipleErrors", ref z3AtFlag, false) ||
+ ps.CheckBooleanFlag("monomorphize", ref Monomorphize) ||
+ ps.CheckBooleanFlag("useArrayTheory", ref UseArrayTheory) ||
+ ps.CheckBooleanFlag("weakArrayTheory", ref WeakArrayTheory) ||
+ ps.CheckBooleanFlag("doModSetAnalysis", ref DoModSetAnalysis) ||
+ ps.CheckBooleanFlag("doNotUseLabels", ref UseLabels, false) ||
+ ps.CheckBooleanFlag("runDiagnosticsOnTimeout", ref RunDiagnosticsOnTimeout) ||
+ ps.CheckBooleanFlag("traceDiagnosticsOnTimeout", ref TraceDiagnosticsOnTimeout) ||
+ ps.CheckBooleanFlag("boolControlVC", ref SIBoolControlVC, true) ||
+ ps.CheckBooleanFlag("contractInfer", ref ContractInfer) ||
+ ps.CheckBooleanFlag("explainHoudini", ref ExplainHoudini) ||
+ ps.CheckBooleanFlag("reverseHoudiniWorklist", ref ReverseHoudiniWorklist) ||
+ ps.CheckBooleanFlag("crossDependencies", ref HoudiniUseCrossDependencies) ||
+ ps.CheckBooleanFlag("useUnsatCoreForContractInfer", ref UseUnsatCoreForContractInfer) ||
+ ps.CheckBooleanFlag("printAssignment", ref PrintAssignment) ||
+ ps.CheckBooleanFlag("printNecessaryAssumes", ref PrintNecessaryAssumes) ||
+ ps.CheckBooleanFlag("useProverEvaluate", ref UseProverEvaluate) ||
+ ps.CheckBooleanFlag("nonUniformUnfolding", ref NonUniformUnfolding) ||
+ ps.CheckBooleanFlag("deterministicExtractLoops", ref DeterministicExtractLoops) ||
+ ps.CheckBooleanFlag("verifySeparately", ref VerifySeparately) ||
+ ps.CheckBooleanFlag("trustAtomicityTypes", ref TrustAtomicityTypes) ||
+ ps.CheckBooleanFlag("trustNonInterference", ref TrustNonInterference) ||
+ ps.CheckBooleanFlag("useBaseNameForFileName", ref UseBaseNameForFileName)
+ ) {
+ // one of the boolean flags matched
+ return true;
+ }
+ break;
+ }
+
+ return base.ParseOption(name, ps); // defer to superclass
+ }
+
+ public override void ApplyDefaultOptions() {
+ Contract.Ensures(TheProverFactory != null);
+ Contract.Ensures(vcVariety != VCVariety.Unspecified);
+
+ base.ApplyDefaultOptions();
+
+ // expand macros in filenames, now that LogPrefix is fully determined
+ ExpandFilename(ref XmlSinkFilename, LogPrefix, FileTimestamp);
+ ExpandFilename(ref PrintFile, LogPrefix, FileTimestamp);
+ ExpandFilename(ref SimplifyLogFilePath, LogPrefix, FileTimestamp);
+ ExpandFilename(ref PrintErrorModelFile, LogPrefix, FileTimestamp);
+
+ Contract.Assume(XmlSink == null); // XmlSink is to be set here
+ if (XmlSinkFilename != null) {
+ XmlSink = new XmlSink(XmlSinkFilename);
+ }
+
+ if (TheProverFactory == null) {
+ TheProverFactory = ProverFactory.Load("SMTLib");
+ ProverName = "SMTLib".ToUpper();
+ }
+
+ var proverOpts = TheProverFactory.BlankProverOptions();
+ proverOpts.Parse(ProverOptions);
+ if (!TheProverFactory.SupportsLabels(proverOpts)) {
+ UseLabels = false;
+ }
+
+ if (vcVariety == VCVariety.Unspecified) {
+ vcVariety = TheProverFactory.DefaultVCVariety;
+ }
+
+ if (UseArrayTheory) {
+ Monomorphize = true;
+ }
+
+ if (inferLeastForUnsat != null) {
+ StratifiedInlining = 1;
+ }
+
+ if (StratifiedInlining > 0) {
+ TypeEncodingMethod = TypeEncoding.Monomorphic;
+ UseArrayTheory = true;
+ UseAbstractInterpretation = false;
+ MaxProverMemory = 0; // no max: avoids restarts
+ if (ProverName == "Z3API" || ProverName == "SMTLIB") {
+ ProverCCLimit = 1;
+ }
+ if (UseProverEvaluate)
+ StratifiedInliningWithoutModels = true;
+ }
+
+ if (Trace) {
+ BoogieDebug.DoPrinting = true; // reuse the -trace option for debug printing
+ }
+ }
+
+
+
+ public bool UserWantsToCheckRoutine(string methodFullname) {
+ Contract.Requires(methodFullname != null);
+ if (ProcsToCheck == null) {
+ // no preference
+ return true;
+ }
+ return ProcsToCheck.Any(s => Regex.IsMatch(methodFullname, "^" + Regex.Escape(s).Replace(@"\*", ".*") + "$"));
+ }
+
+ public virtual StringCollection ParseNamedArgumentList(string argList) {
+ if (argList == null || argList.Length == 0)
+ return null;
+ StringCollection result = new StringCollection();
+ int i = 0;
+ for (int n = argList.Length; i < n; ) {
+ cce.LoopInvariant(0 <= i);
+ int separatorIndex = this.GetArgumentSeparatorIndex(argList, i);
+ if (separatorIndex > i) {
+ result.Add(argList.Substring(i, separatorIndex - i));
+ i = separatorIndex + 1;
+ continue;
+ }
+ result.Add(argList.Substring(i));
+ break;
+ }
+ return result;
+ }
+ public int GetArgumentSeparatorIndex(string argList, int startIndex) {
+ Contract.Requires(argList != null);
+ Contract.Requires(0 <= startIndex && startIndex <= argList.Length);
+ Contract.Ensures(Contract.Result<int>() < argList.Length);
+ int commaIndex = argList.IndexOf(",", startIndex);
+ int semicolonIndex = argList.IndexOf(";", startIndex);
+ if (commaIndex == -1)
+ return semicolonIndex;
+ if (semicolonIndex == -1)
+ return commaIndex;
+ if (commaIndex < semicolonIndex)
+ return commaIndex;
+ return semicolonIndex;
+ }
+
+ public override void AttributeUsage() {
+ Console.WriteLine(
+@"Boogie: The following attributes are supported by this implementation.
+
+ ---- On top-level declarations ---------------------------------------------
+
+ {:ignore}
+ Ignore the declaration (after checking for duplicate names).
+
+ {:extern}
+ If two top-level declarations introduce the same name (for example, two
+ constants with the same name or two procedures with the same name), then
+ Boogie usually produces an error message. However, if at least one of
+ the declarations is declared with :extern, one of the declarations is
+ ignored. If both declarations are :extern, Boogie arbitrarily chooses
+ one of them to keep; otherwise, Boogie ignore the :extern declaration
+ and keeps the other.
+
+ {:checksum <string>}
+ Attach a checksum to be used for verification result caching.
+
+ ---- On implementations and procedures -------------------------------------
+
+ {:inline N}
+ Inline given procedure (can be also used on implementation).
+ N should be a non-negative number and represents the inlining depth.
+ With /inline:assume call is replaced with ""assume false"" once inlining depth is reached.
+ With /inline:assert call is replaced with ""assert false"" once inlining depth is reached.
+ With /inline:spec call is left as is once inlining depth is reached.
+ With the above three options, methods with the attribute {:inline N} are not verified.
+ With /inline:none the entire attribute is ignored.
+
+ {:verify false}
+ Skip verification of an implementation.
+
+ {:vcs_max_cost N}
+ {:vcs_max_splits N}
+ {:vcs_max_keep_going_splits N}
+ Per-implementation versions of
+ /vcsMaxCost, /vcsMaxSplits and /vcsMaxKeepGoingSplits.
+
+ {:selective_checking true}
+ Turn all asserts into assumes except for the ones reachable from
+ assumptions marked with the attribute {:start_checking_here}.
+ Thus, ""assume {:start_checking_here} something;"" becomes an inverse
+ of ""assume false;"": the first one disables all verification before
+ it, and the second one disables all verification after.
+
+ {:priority N}
+ Assign a positive priority 'N' to an implementation to control the order
+ in which implementations are verified (default: N = 1).
+
+ {:id <string>}
+ Assign a unique ID to an implementation to be used for verification
+ result caching (default: ""<impl. name>:0"").
+
+ {:timeLimit N}
+ Set the time limit for a given implementation.
+
+ ---- On functions ----------------------------------------------------------
+
+ {:builtin ""spec""}
+ {:bvbuiltin ""spec""}
+ Rewrite the function to built-in prover function symbol 'fn'.
+
+ {:inline}
+ {:inline true}
+ Expand function according to its definition before going to the prover.
+
+ {:never_pattern true}
+ Terms starting with this function symbol will never be
+ automatically selected as patterns. It does not prevent them
+ from being used inside the triggers, and does not affect explicit
+ trigger annotations. Internally it works by adding {:nopats ...}
+ annotations to quantifiers.
+
+ {:identity}
+ {:identity true}
+ If the function has 1 argument and the use of it has type X->X for
+ some X, then the abstract interpreter will treat the function as an
+ identity function. Note, the abstract interpreter trusts the
+ attribute--it does not try to verify that the function really is an
+ identity function.
+
+ ---- On variables ----------------------------------------------------------
+
+ {:existential true}
+ Marks a global Boolean variable as existentially quantified. If
+ used in combination with option /contractInfer Boogie will check
+ whether there exists a Boolean assignment to the existentials
+ that makes all verification conditions valid. Without option
+ /contractInfer the attribute is ignored.
+
+ ---- On assert statements --------------------------------------------------
+
+ {:subsumption n}
+ Overrides the /subsumption command-line setting for this assertion.
+
+ {:split_here}
+ Verifies code leading to this point and code leading from this point
+ to the next split_here as separate pieces. May help with timeouts.
+ May also occasionally double-report errors.
+
+ ---- The end ---------------------------------------------------------------
+");
+ }
+
+ public override void Usage() {
+ Console.WriteLine(@"
+ /nologo suppress printing of version number, copyright message
+ /env:<n> print command line arguments
+ 0 - never, 1 (default) - during BPL print and prover log,
+ 2 - like 1 and also to standard output
+ /wait await Enter from keyboard before terminating program
+ /xml:<file> also produce output in XML format to <file>
+
+ ---- Boogie options --------------------------------------------------------
+
+ Multiple .bpl files supplied on the command line are concatenated into one
+ Boogie program.
+
+ /proc:<p> : Only check procedures matched by pattern <p>. This option
+ may be specified multiple times to match multiple patterns.
+ The pattern <p> matches the whole procedure name (i.e.
+ pattern ""foo"" will only match a procedure called foo and
+ not fooBar). The pattern <p> may contain * wildcards which
+ match any character zero or more times. For example the
+ pattern ""ab*d"" would match abd, abcd and abccd but not
+ Aabd nor abdD. The pattern ""*ab*d*"" would match abd,
+ abcd, abccd, Abd and abdD.
+ /noResolve : parse only
+ /noTypecheck : parse and resolve only
+
+ /print:<file> : print Boogie program after parsing it
+ (use - as <file> to print to console)
+ /pretty:<n>
+ 0 - print each Boogie statement on one line (faster).
+ 1 (default) - pretty-print with some line breaks.
+ /printWithUniqueIds : print augmented information that uniquely
+ identifies variables
+ /printUnstructured : with /print option, desugars all structured statements
+ /printDesugared : with /print option, desugars calls
+
+ /overlookTypeErrors : skip any implementation with resolution or type
+ checking errors
+
+ /loopUnroll:<n>
+ unroll loops, following up to n back edges (and then some)
+ /soundLoopUnrolling
+ sound loop unrolling
+ /printModel:<n>
+ 0 (default) - do not print Z3's error model
+ 1 - print Z3's error model
+ 2 - print Z3's error model plus reverse mappings
+ 4 - print Z3's error model in a more human readable way
+ /printModelToFile:<file>
+ print model to <file> instead of console
+ /mv:<file> Specify file where to save the model in BVD format
+ /enhancedErrorMessages:<n>
+ 0 (default) - no enhanced error messages
+ 1 - Z3 error model enhanced error messages
+
+ /printCFG:<prefix> : print control flow graph of each implementation in
+ Graphviz format to files named:
+ <prefix>.<procedure name>.dot
+
+ /useBaseNameForFileName : When parsing use basename of file for tokens instead
+ of the path supplied on the command line
+
+ ---- Inference options -----------------------------------------------------
+
+ /infer:<flags>
+ use abstract interpretation to infer invariants
+ The default is /infer:i"
+ // This is not 100% true, as the /infer ALWAYS creates
+ // a multilattice, whereas if nothing is specified then
+ // intervals are isntantiated WITHOUT being embedded in
+ // a multilattice
+ + @"
+ <flags> are as follows (missing <flags> means all)
+ i = intervals
+ c = constant propagation
+ d = dynamic type
+ n = nullness
+ p = polyhedra for linear inequalities
+ t = trivial bottom/top lattice (cannot be combined with
+ other domains)
+ j = stronger intervals (cannot be combined with other
+ domains)
+ or the following (which denote options, not domains):
+ s = debug statistics
+ 0..9 = number of iterations before applying a widen (default=0)
+ /noinfer turn off the default inference, and overrides the /infer
+ switch on its left
+ /checkInfer instrument inferred invariants as asserts to be checked by
+ theorem prover
+ /interprocInfer
+ perform interprocedural inference (deprecated, not supported)
+ /contractInfer
+ perform procedure contract inference
+ /instrumentInfer
+ h - instrument inferred invariants only at beginning of
+ loop headers (default)
+ e - instrument inferred invariants at beginning and end
+ of every block (this mode is intended for use in
+ debugging of abstract domains)
+ /printInstrumented
+ print Boogie program after it has been instrumented with
+ invariants
+
+ ---- Debugging and general tracing options ---------------------------------
+
+ /trace blurt out various debug trace information
+ /traceTimes output timing information at certain points in the pipeline
+ /tracePOs output information about the number of proof obligations
+ (also included in the /trace output)
+ /log[:method] Print debug output during translation
+
+ /break launch and break into debugger
+
+ ---- Verification-condition generation options -----------------------------
+
+ /liveVariableAnalysis:<c>
+ 0 = do not perform live variable analysis
+ 1 = perform live variable analysis (default)
+ 2 = perform interprocedural live variable analysis
+ /noVerify skip VC generation and invocation of the theorem prover
+ /verifySnapshots:<n>
+ verify several program snapshots (named <filename>.v0.bpl
+ to <filename>.vN.bpl) using verification result caching:
+ 0 - do not use any verification result caching (default)
+ 1 - use the basic verification result caching
+ 2 - use the more advanced verification result caching
+ 3 - use the more advanced caching and report errors according
+ to the new source locations for errors and their
+ related locations (but not /errorTrace and CaptureState
+ locations)
+ /verifySeparately
+ verify each input program separately
+ /removeEmptyBlocks:<c>
+ 0 - do not remove empty blocks during VC generation
+ 1 - remove empty blocks (default)
+ /coalesceBlocks:<c>
+ 0 = do not coalesce blocks
+ 1 = coalesce blocks (default)
+ /vc:<variety> n = nested block (default for /prover:Simplify),
+ m = nested block reach,
+ b = flat block, r = flat block reach,
+ s = structured, l = local,
+ d = dag (default, except with /prover:Simplify)
+ doomed = doomed
+ /traceverify print debug output during verification condition generation
+ /subsumption:<c>
+ apply subsumption to asserted conditions:
+ 0 - never, 1 - not for quantifiers, 2 (default) - always
+ /alwaysAssumeFreeLoopInvariants
+ usually, a free loop invariant (or assume
+ statement in that position) is ignored in checking contexts
+ (like other free things); this option includes these free
+ loop invariants as assumes in both contexts
+ /inline:<i> use inlining strategy <i> for procedures with the :inline
+ attribute, see /attrHelp for details:
+ none
+ assume (default)
+ assert
+ spec
+ /printInlined
+ print the implementation after inlining calls to
+ procedures with the :inline attribute (works with /inline)
+ /lazyInline:1
+ Use the lazy inlining algorithm
+ /stratifiedInline:1
+ Use the stratified inlining algorithm
+ /fixedPointEngine:<engine>
+ Use the specified fixed point engine for inference
+ /recursionBound:<n>
+ Set the recursion bound for stratified inlining to
+ be n (default 500)
+ /inferLeastForUnsat:<str>
+ Infer the least number of constants (whose names
+ are prefixed by <str>) that need to be set to
+ true for the program to be correct. This turns
+ on stratified inlining.
+ /smoke Soundness Smoke Test: try to stick assert false; in some
+ places in the BPL and see if we can still prove it
+ /smokeTimeout:<n>
+ Timeout, in seconds, for a single theorem prover
+ invocation during smoke test, defaults to 10.
+ /causalImplies
+ Translate Boogie's A ==> B into prover's A ==> A && B.
+ /typeEncoding:<m>
+ how to encode types when sending VC to theorem prover
+ n = none (unsound)
+ p = predicates (default)
+ a = arguments
+ m = monomorphic
+ /monomorphize
+ Do not abstract map types in the encoding (this is an
+ experimental feature that will not do the right thing if
+ the program uses polymorphism)
+ /reflectAdd In the VC, generate an auxiliary symbol, elsewhere defined
+ to be +, instead of +.
+
+ ---- Verification-condition splitting --------------------------------------
+
+ /vcsMaxCost:<f>
+ VC will not be split unless the cost of a VC exceeds this
+ number, defaults to 2000.0. This does NOT apply in the
+ keep-going mode after first round of splitting.
+ /vcsMaxSplits:<n>
+ Maximal number of VC generated per method. In keep
+ going mode only applies to the first round.
+ Defaults to 1.
+ /vcsMaxKeepGoingSplits:<n>
+ If set to more than 1, activates the keep
+ going mode, where after the first round of splitting,
+ VCs that timed out are split into <n> pieces and retried
+ until we succeed proving them, or there is only one
+ assertion on a single path and it timeouts (in which
+ case error is reported for that assertion).
+ Defaults to 1.
+ /vcsKeepGoingTimeout:<n>
+ Timeout in seconds for a single theorem prover
+ invocation in keep going mode, except for the final
+ single-assertion case. Defaults to 1s.
+ /vcsFinalAssertTimeout:<n>
+ Timeout in seconds for the single last
+ assertion in the keep going mode. Defaults to 30s.
+ /vcsPathJoinMult:<f>
+ If more than one path join at a block, by how much
+ multiply the number of paths in that block, to accomodate
+ for the fact that the prover will learn something on one
+ paths, before proceeding to another. Defaults to 0.8.
+ /vcsPathCostMult:<f1>
+ /vcsAssumeMult:<f2>
+ The cost of a block is
+ (<assert-cost> + <f2>*<assume-cost>) *
+ (1.0 + <f1>*<entering-paths>)
+ <f1> defaults to 1.0, <f2> defaults to 0.01.
+ The cost of a single assertion or assumption is
+ currently always 1.0.
+ /vcsPathSplitMult:<f>
+ If the best path split of a VC of cost A is into
+ VCs of cost B and C, then the split is applied if
+ A >= <f>*(B+C), otherwise assertion splitting will be
+ applied. Defaults to 0.5 (always do path splitting if
+ possible), set to more to do less path splitting
+ and more assertion splitting.
+ /vcsDumpSplits
+ For split #n dump split.n.dot and split.n.bpl.
+ Warning: Affects error reporting.
+ /vcsCores:<n>
+ Try to verify <n> VCs at once. Defaults to 1.
+ /vcsLoad:<f> Sets vcsCores to the machine's ProcessorCount * f,
+ rounded to the nearest integer (where 0.0 <= f <= 3.0),
+ but never to less than 1.
+
+ ---- Prover options --------------------------------------------------------
+
+ /errorLimit:<num>
+ Limit the number of errors produced for each procedure
+ (default is 5, some provers may support only 1)
+ /timeLimit:<num>
+ Limit the number of seconds spent trying to verify
+ each procedure
+ /errorTrace:<n>
+ 0 - no Trace labels in the error output,
+ 1 (default) - include useful Trace labels in error output,
+ 2 - include all Trace labels in the error output
+ /vcBrackets:<b>
+ bracket odd-charactered identifier names with |'s. <b> is:
+ 0 - no (default with non-/prover:Simplify),
+ 1 - yes (default with /prover:Simplify)
+ /prover:<tp> use theorem prover <tp>, where <tp> is either the name of
+ a DLL containing the prover interface located in the
+ Boogie directory, or a full path to a DLL containing such
+ an interface. The standard interfaces shipped include:
+ SMTLib (default, uses the SMTLib2 format and calls Z3)
+ Z3 (uses Z3 with the Simplify format)
+ Simplify
+ ContractInference (uses Z3)
+ Z3api (Z3 using Managed .NET API)
+ /proverOpt:KEY[=VALUE]
+ Provide a prover-specific option (short form /p).
+ /proverLog:<file>
+ Log input for the theorem prover. Like filenames
+ supplied as arguments to other options, <file> can use the
+ following macros:
+ @TIME@ expands to the current time
+ @PREFIX@ expands to the concatenation of strings given
+ by /logPrefix options
+ @FILE@ expands to the last filename specified on the
+ command line
+ In addition, /proverLog can also use the macro '@PROC@',
+ which causes there to be one prover log file per
+ verification condition, and the macro then expands to the
+ name of the procedure that the verification condition is for.
+ /logPrefix:<str>
+ Defines the expansion of the macro '@PREFIX@', which can
+ be used in various filenames specified by other options.
+ /proverLogAppend
+ Append (not overwrite) the specified prover log file
+ /proverWarnings
+ 0 (default) - don't print, 1 - print to stdout,
+ 2 - print to stderr
+ /proverMemoryLimit:<num>
+ Limit on the virtual memory for prover before
+ restart in MB (default:100MB)
+ /restartProver
+ Restart the prover after each query
+ /proverShutdownLimit<num>
+ Time between closing the stream to the prover and
+ killing the prover process (default: 0s)
+ /platform:<ptype>,<location>
+ ptype = v11,v2,cli1
+ location = platform libraries directory
+
+ Simplify specific options:
+ /simplifyMatchDepth:<num>
+ Set Simplify prover's matching depth limit
+
+ Z3 specific options:
+ /z3opt:<arg> specify additional Z3 options
+ /z3multipleErrors
+ report multiple counterexamples for each error
+ /useArrayTheory
+ use Z3's native theory (as opposed to axioms). Currently
+ implies /monomorphize.
+ /useSmtOutputFormat
+ Z3 outputs a model in the SMTLIB2 format.
+ /z3types generate multi-sorted VC that make use of Z3 types
+ /z3lets:<n> 0 - no LETs, 1 - only LET TERM, 2 - only LET FORMULA,
+ 3 - (default) any
+ /z3exe:<path>
+ path to Z3 executable
+
+ CVC4 specific options:
+ /cvc4exe:<path>
+ path to CVC4 executable
+");
+ }
+ }
+}
diff --git a/Source/Core/Core.csproj b/Source/Core/Core.csproj
index fbb23cfe..7c4cb7ae 100644
--- a/Source/Core/Core.csproj
+++ b/Source/Core/Core.csproj
@@ -1,236 +1,236 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{B230A69C-C466-4065-B9C1-84D80E76D802}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Core</RootNamespace>
- <AssemblyName>Core</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for Core.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Numerics" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Absy.cs" />
- <Compile Include="AbsyCmd.cs" />
- <Compile Include="AbsyExpr.cs" />
- <Compile Include="AbsyQuant.cs" />
- <Compile Include="AbsyType.cs" />
- <Compile Include="AlphaEquality.cs" />
- <Compile Include="InterProceduralReachabilityGraph.cs" />
- <Compile Include="CommandLineOptions.cs" />
- <Compile Include="DeadVarElim.cs" />
- <Compile Include="Duplicator.cs" />
- <Compile Include="Inline.cs" />
- <Compile Include="LambdaHelper.cs" />
- <Compile Include="LoopUnroll.cs" />
- <Compile Include="OOLongUtil.cs" />
- <Compile Include="Parser.cs" />
- <Compile Include="ResolutionContext.cs" />
- <Compile Include="Scanner.cs" />
- <Compile Include="StandardVisitor.cs" />
- <Compile Include="TypeAmbiguitySeeker.cs" />
- <Compile Include="Util.cs" />
- <Compile Include="VariableDependenceAnalyser.cs" />
- <Compile Include="VCExp.cs" />
- <Compile Include="..\version.cs" />
- <Compile Include="Xml.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <None Include="BoogiePL.atg" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{B230A69C-C466-4065-B9C1-84D80E76D802}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Core</RootNamespace>
+ <AssemblyName>BoogieCore</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for Core.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Absy.cs" />
+ <Compile Include="AbsyCmd.cs" />
+ <Compile Include="AbsyExpr.cs" />
+ <Compile Include="AbsyQuant.cs" />
+ <Compile Include="AbsyType.cs" />
+ <Compile Include="AlphaEquality.cs" />
+ <Compile Include="InterProceduralReachabilityGraph.cs" />
+ <Compile Include="CommandLineOptions.cs" />
+ <Compile Include="DeadVarElim.cs" />
+ <Compile Include="Duplicator.cs" />
+ <Compile Include="Inline.cs" />
+ <Compile Include="LambdaHelper.cs" />
+ <Compile Include="LoopUnroll.cs" />
+ <Compile Include="OOLongUtil.cs" />
+ <Compile Include="Parser.cs" />
+ <Compile Include="ResolutionContext.cs" />
+ <Compile Include="Scanner.cs" />
+ <Compile Include="StandardVisitor.cs" />
+ <Compile Include="TypeAmbiguitySeeker.cs" />
+ <Compile Include="Util.cs" />
+ <Compile Include="VariableDependenceAnalyser.cs" />
+ <Compile Include="VCExp.cs" />
+ <Compile Include="..\version.cs" />
+ <Compile Include="Xml.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="BoogiePL.atg" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/Core/DeadVarElim.cs b/Source/Core/DeadVarElim.cs
index 77086f0f..fc39debb 100644
--- a/Source/Core/DeadVarElim.cs
+++ b/Source/Core/DeadVarElim.cs
@@ -1,1753 +1,1762 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-
-
-namespace Microsoft.Boogie {
- public class UnusedVarEliminator : VariableCollector {
- public static void Eliminate(Program program) {
- Contract.Requires(program != null);
- UnusedVarEliminator elim = new UnusedVarEliminator();
- elim.Visit(program);
- }
-
- private UnusedVarEliminator()
- : base() {
-
- }
-
- public override Implementation VisitImplementation(Implementation node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Implementation>() != null);
- //Console.WriteLine("Procedure {0}", node.Name);
- Implementation/*!*/ impl = base.VisitImplementation(node);
- Contract.Assert(impl != null);
- //Console.WriteLine("Old number of local variables = {0}", impl.LocVars.Length);
- List<Variable>/*!*/ vars = new List<Variable>();
- foreach (Variable/*!*/ var in impl.LocVars) {
- Contract.Assert(var != null);
- if (_usedVars.Contains(var))
- vars.Add(var);
- }
- impl.LocVars = vars;
- //Console.WriteLine("New number of local variables = {0}", impl.LocVars.Length);
- //Console.WriteLine("---------------------------------");
- _usedVars.Clear();
- return impl;
- }
- }
-
- public class ModSetCollector : ReadOnlyVisitor {
- private Procedure enclosingProc;
- private Dictionary<Procedure/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ modSets;
- private HashSet<Procedure> yieldingProcs;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(modSets));
- Contract.Invariant(Contract.ForAll(modSets.Values, v => cce.NonNullElements(v)));
- }
-
- public ModSetCollector() {
- modSets = new Dictionary<Procedure/*!*/, HashSet<Variable/*!*/>/*!*/>();
- yieldingProcs = new HashSet<Procedure>();
- }
-
- private bool moreProcessingRequired;
-
- public void DoModSetAnalysis(Program program) {
- Contract.Requires(program != null);
-
- if (CommandLineOptions.Clo.Trace)
- {
-// Console.WriteLine();
-// Console.WriteLine("Running modset analysis ...");
-// int procCount = 0;
-// foreach (Declaration/*!*/ decl in program.TopLevelDeclarations)
-// {
-// Contract.Assert(decl != null);
-// if (decl is Procedure)
-// procCount++;
-// }
-// Console.WriteLine("Number of procedures = {0}", procCount);*/
- }
-
- HashSet<Procedure/*!*/> implementedProcs = new HashSet<Procedure/*!*/>();
- foreach (var impl in program.Implementations) {
- if (impl.Proc != null)
- implementedProcs.Add(impl.Proc);
- }
- foreach (var proc in program.Procedures) {
- if (!implementedProcs.Contains(proc))
- {
- enclosingProc = proc;
- foreach (var expr in proc.Modifies)
- {
- Contract.Assert(expr != null);
- ProcessVariable(expr.Decl);
- }
- enclosingProc = null;
- }
- else
- {
- modSets.Add(proc, new HashSet<Variable>());
- }
- }
-
- moreProcessingRequired = true;
- while (moreProcessingRequired) {
- moreProcessingRequired = false;
- this.Visit(program);
- }
-
- foreach (Procedure x in modSets.Keys)
- {
- x.Modifies = new List<IdentifierExpr>();
- foreach (Variable v in modSets[x])
- {
- x.Modifies.Add(new IdentifierExpr(v.tok, v));
- }
- }
- foreach (Procedure x in yieldingProcs)
- {
- if (!QKeyValue.FindBoolAttribute(x.Attributes, "yields"))
- {
- x.AddAttribute("yields");
- }
- }
-
-#if DEBUG_PRINT
- Console.WriteLine("Number of procedures with nonempty modsets = {0}", modSets.Keys.Count);
- foreach (Procedure/*!*/ x in modSets.Keys) {
- Contract.Assert(x != null);
- Console.Write("{0} : ", x.Name);
- bool first = true;
- foreach (Variable/*!*/ y in modSets[x]) {
- Contract.Assert(y != null);
- if (first)
- first = false;
- else
- Console.Write(", ");
- Console.Write("{0}", y.Name);
- }
- Console.WriteLine("");
- }
-#endif
- }
-
- public override Implementation VisitImplementation(Implementation node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Implementation>() != null);
- enclosingProc = node.Proc;
- Implementation/*!*/ ret = base.VisitImplementation(node);
- Contract.Assert(ret != null);
- enclosingProc = null;
-
- return ret;
- }
- public override YieldCmd VisitYieldCmd(YieldCmd node)
- {
- if (!yieldingProcs.Contains(enclosingProc))
- {
- yieldingProcs.Add(enclosingProc);
- moreProcessingRequired = true;
- }
- return base.VisitYieldCmd(node);
- }
- public override Cmd VisitAssignCmd(AssignCmd assignCmd) {
- //Contract.Requires(assignCmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Cmd ret = base.VisitAssignCmd(assignCmd);
- foreach (AssignLhs/*!*/ lhs in assignCmd.Lhss) {
- Contract.Assert(lhs != null);
- ProcessVariable(lhs.DeepAssignedVariable);
- }
- return ret;
- }
- public override Cmd VisitHavocCmd(HavocCmd havocCmd) {
- //Contract.Requires(havocCmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Cmd ret = base.VisitHavocCmd(havocCmd);
- foreach (IdentifierExpr/*!*/ expr in havocCmd.Vars) {
- Contract.Assert(expr != null);
- ProcessVariable(expr.Decl);
- }
- return ret;
- }
- public override Cmd VisitCallCmd(CallCmd callCmd) {
- //Contract.Requires(callCmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Cmd ret = base.VisitCallCmd(callCmd);
- foreach (IdentifierExpr ie in callCmd.Outs)
- {
- if (ie != null) ProcessVariable(ie.Decl);
- }
- Procedure callee = callCmd.Proc;
- if (callee == null)
- return ret;
- if (modSets.ContainsKey(callee)) {
- foreach (Variable var in modSets[callee]) {
- ProcessVariable(var);
- }
- }
- if (!yieldingProcs.Contains(enclosingProc) && (yieldingProcs.Contains(callCmd.Proc) || callCmd.IsAsync))
- {
- yieldingProcs.Add(enclosingProc);
- moreProcessingRequired = true;
- }
- if (callCmd.IsAsync)
- {
- if (!yieldingProcs.Contains(callCmd.Proc))
- {
- yieldingProcs.Add(callCmd.Proc);
- moreProcessingRequired = true;
- }
- }
- return ret;
- }
- public override Cmd VisitParCallCmd(ParCallCmd node)
- {
- //Contract.Requires(callCmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Cmd ret = base.VisitParCallCmd(node);
- if (!yieldingProcs.Contains(enclosingProc))
- {
- yieldingProcs.Add(enclosingProc);
- moreProcessingRequired = true;
- }
- foreach (CallCmd callCmd in node.CallCmds)
- {
- if (!yieldingProcs.Contains(callCmd.Proc))
- {
- yieldingProcs.Add(callCmd.Proc);
- moreProcessingRequired = true;
- }
- }
- return ret;
- }
- private void ProcessVariable(Variable var) {
- Procedure/*!*/ localProc = cce.NonNull(enclosingProc);
- if (var == null)
- return;
- if (!(var is GlobalVariable))
- return;
- if (!modSets.ContainsKey(localProc)) {
- modSets[localProc] = new HashSet<Variable/*!*/>();
- }
- if (modSets[localProc].Contains(var))
- return;
- moreProcessingRequired = true;
- modSets[localProc].Add(var);
- }
- public override Expr VisitCodeExpr(CodeExpr node) {
- // don't go into the code expression, since it can only modify variables local to the code expression,
- // and the mod-set analysis is interested in global variables
- return node;
- }
- }
-
- public class MutableVariableCollector : ReadOnlyVisitor
- {
- public HashSet<Variable> UsedVariables = new HashSet<Variable>();
-
- public void AddUsedVariables(HashSet<Variable> usedVariables)
- {
- Contract.Requires(usedVariables != null);
-
- foreach (var v in usedVariables)
- {
- UsedVariables.Add(v);
- }
- }
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() != null);
-
- if (node.Decl != null && node.Decl.IsMutable)
- {
- UsedVariables.Add(node.Decl);
- }
- return base.VisitIdentifierExpr(node);
- }
- }
-
- public class VariableCollector : ReadOnlyVisitor {
- protected HashSet<Variable/*!*/>/*!*/ _usedVars;
- public IEnumerable<Variable /*!*/>/*!*/ usedVars
- {
- get
- {
- return _usedVars.AsEnumerable();
- }
- }
-
- protected HashSet<Variable/*!*/>/*!*/ _oldVarsUsed;
- public IEnumerable<Variable /*!*/>/*!*/ oldVarsUsed
- {
- get
- {
- return _oldVarsUsed.AsEnumerable();
- }
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(_usedVars));
- Contract.Invariant(cce.NonNullElements(_oldVarsUsed));
- }
-
- int insideOldExpr;
-
- public VariableCollector() {
- _usedVars = new System.Collections.Generic.HashSet<Variable/*!*/>();
- _oldVarsUsed = new System.Collections.Generic.HashSet<Variable/*!*/>();
- insideOldExpr = 0;
- }
-
- public override Expr VisitOldExpr(OldExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- insideOldExpr++;
- node.Expr = this.VisitExpr(node.Expr);
- insideOldExpr--;
- return node;
- }
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- if (node.Decl != null) {
- _usedVars.Add(node.Decl);
- if (insideOldExpr > 0) {
- _oldVarsUsed.Add(node.Decl);
- }
- }
- return node;
- }
- }
-
- public class BlockCoalescer : ReadOnlyVisitor {
- public static void CoalesceBlocks(Program program) {
- Contract.Requires(program != null);
- BlockCoalescer blockCoalescer = new BlockCoalescer();
- blockCoalescer.Visit(program);
- }
-
- private static HashSet<Block/*!*/>/*!*/ ComputeMultiPredecessorBlocks(Implementation/*!*/ impl) {
- Contract.Requires(impl != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Block>>()));
- HashSet<Block/*!*/> visitedBlocks = new HashSet<Block/*!*/>();
- HashSet<Block/*!*/> multiPredBlocks = new HashSet<Block/*!*/>();
- Stack<Block/*!*/> dfsStack = new Stack<Block/*!*/>();
- dfsStack.Push(impl.Blocks[0]);
- while (dfsStack.Count > 0) {
- Block/*!*/ b = dfsStack.Pop();
- Contract.Assert(b != null);
- if (visitedBlocks.Contains(b)) {
- multiPredBlocks.Add(b);
- continue;
- }
- visitedBlocks.Add(b);
- if (b.TransferCmd == null)
- continue;
- if (b.TransferCmd is ReturnCmd)
- continue;
- Contract.Assert(b.TransferCmd is GotoCmd);
- GotoCmd gotoCmd = (GotoCmd)b.TransferCmd;
- if (gotoCmd.labelTargets == null)
- continue;
- foreach (Block/*!*/ succ in gotoCmd.labelTargets) {
- Contract.Assert(succ != null);
- dfsStack.Push(succ);
- }
- }
- return multiPredBlocks;
- }
-
- public override Implementation VisitImplementation(Implementation impl) {
- //Contract.Requires(impl != null);
- Contract.Ensures(Contract.Result<Implementation>() != null);
- //Console.WriteLine("Procedure {0}", impl.Name);
- //Console.WriteLine("Initial number of blocks = {0}", impl.Blocks.Count);
-
- HashSet<Block/*!*/> multiPredBlocks = ComputeMultiPredecessorBlocks(impl);
- Contract.Assert(cce.NonNullElements(multiPredBlocks));
- HashSet<Block/*!*/> visitedBlocks = new HashSet<Block/*!*/>();
- HashSet<Block/*!*/> removedBlocks = new HashSet<Block/*!*/>();
- Stack<Block/*!*/> dfsStack = new Stack<Block/*!*/>();
- dfsStack.Push(impl.Blocks[0]);
- while (dfsStack.Count > 0) {
- Block/*!*/ b = dfsStack.Pop();
- Contract.Assert(b != null);
- if (visitedBlocks.Contains(b))
- continue;
- visitedBlocks.Add(b);
- if (b.TransferCmd == null)
- continue;
- if (b.TransferCmd is ReturnCmd)
- continue;
- Contract.Assert(b.TransferCmd is GotoCmd);
- GotoCmd gotoCmd = (GotoCmd)b.TransferCmd;
- if (gotoCmd.labelTargets == null)
- continue;
- if (gotoCmd.labelTargets.Count == 1) {
- Block/*!*/ succ = cce.NonNull(gotoCmd.labelTargets[0]);
- if (!multiPredBlocks.Contains(succ)) {
- foreach (Cmd/*!*/ cmd in succ.Cmds) {
- Contract.Assert(cmd != null);
- b.Cmds.Add(cmd);
- }
- b.TransferCmd = succ.TransferCmd;
- if (!b.tok.IsValid && succ.tok.IsValid) {
- b.tok = succ.tok;
- b.Label = succ.Label;
- }
- removedBlocks.Add(succ);
- dfsStack.Push(b);
- visitedBlocks.Remove(b);
- continue;
- }
- }
- foreach (Block/*!*/ succ in gotoCmd.labelTargets) {
- Contract.Assert(succ != null);
- dfsStack.Push(succ);
- }
- }
-
- List<Block/*!*/> newBlocks = new List<Block/*!*/>();
- foreach (Block/*!*/ b in impl.Blocks) {
- Contract.Assert(b != null);
- if (visitedBlocks.Contains(b) && !removedBlocks.Contains(b)) {
- newBlocks.Add(b);
- }
- }
- impl.Blocks = newBlocks;
-
- // Console.WriteLine("Final number of blocks = {0}", impl.Blocks.Count);
- return impl;
- }
- }
-
- public class LiveVariableAnalysis {
- public static void ClearLiveVariables(Implementation impl) {
- Contract.Requires(impl != null);
- foreach (Block/*!*/ block in impl.Blocks) {
- Contract.Assert(block != null);
- block.liveVarsBefore = null;
- }
- }
-
- public static void ComputeLiveVariables(Implementation impl) {
- Contract.Requires(impl != null);
- Microsoft.Boogie.Helpers.ExtraTraceInformation("Starting live variable analysis");
- Graph<Block> dag = new Graph<Block>();
- dag.AddSource(cce.NonNull(impl.Blocks[0])); // there is always at least one node in the graph
- foreach (Block b in impl.Blocks) {
- GotoCmd gtc = b.TransferCmd as GotoCmd;
- if (gtc != null) {
- Contract.Assume(gtc.labelTargets != null);
- foreach (Block/*!*/ dest in gtc.labelTargets) {
- Contract.Assert(dest != null);
- dag.AddEdge(dest, b);
- }
- }
- }
-
- IEnumerable<Block> sortedNodes;
- if (CommandLineOptions.Clo.ModifyTopologicalSorting) {
- sortedNodes = dag.TopologicalSort(true);
- } else {
- sortedNodes = dag.TopologicalSort();
- }
- foreach (Block/*!*/ block in sortedNodes) {
- Contract.Assert(block != null);
- HashSet<Variable/*!*/>/*!*/ liveVarsAfter = new HashSet<Variable/*!*/>();
-
- // The injected assumption variables should always be considered to be live.
- foreach (var v in impl.InjectedAssumptionVariables.Concat(impl.DoomedInjectedAssumptionVariables))
- {
- liveVarsAfter.Add(v);
- }
-
- if (block.TransferCmd is GotoCmd) {
- GotoCmd gotoCmd = (GotoCmd)block.TransferCmd;
- if (gotoCmd.labelTargets != null) {
- foreach (Block/*!*/ succ in gotoCmd.labelTargets) {
- Contract.Assert(succ != null);
- Contract.Assert(succ.liveVarsBefore != null);
- liveVarsAfter.UnionWith(succ.liveVarsBefore);
- }
- }
- }
-
- List<Cmd> cmds = block.Cmds;
- int len = cmds.Count;
- for (int i = len - 1; i >= 0; i--) {
- if (cmds[i] is CallCmd) {
- Procedure/*!*/ proc = cce.NonNull(cce.NonNull((CallCmd/*!*/)cmds[i]).Proc);
- if (InterProcGenKill.HasSummary(proc.Name)) {
- liveVarsAfter =
- InterProcGenKill.PropagateLiveVarsAcrossCall(cce.NonNull((CallCmd/*!*/)cmds[i]), liveVarsAfter);
- continue;
- }
- }
- Propagate(cmds[i], liveVarsAfter);
- }
-
- block.liveVarsBefore = liveVarsAfter;
-
- }
- }
-
- // perform in place update of liveSet
- public static void Propagate(Cmd cmd, HashSet<Variable/*!*/>/*!*/ liveSet) {
- Contract.Requires(cmd != null);
- Contract.Requires(cce.NonNullElements(liveSet));
- if (cmd is AssignCmd) {
- AssignCmd/*!*/ assignCmd = (AssignCmd)cce.NonNull(cmd);
- // I must first iterate over all the targets and remove the live ones.
- // After the removals are done, I must add the variables referred on
- // the right side of the removed targets
-
- AssignCmd simpleAssignCmd = assignCmd.AsSimpleAssignCmd;
- HashSet<int> indexSet = new HashSet<int>();
- int index = 0;
- foreach (AssignLhs/*!*/ lhs in simpleAssignCmd.Lhss) {
- Contract.Assert(lhs != null);
- SimpleAssignLhs salhs = lhs as SimpleAssignLhs;
- Contract.Assert(salhs != null);
- Variable var = salhs.DeepAssignedVariable;
- if (var != null && liveSet.Contains(var)) {
- indexSet.Add(index);
- liveSet.Remove(var);
- }
- index++;
- }
- index = 0;
- foreach (Expr/*!*/ expr in simpleAssignCmd.Rhss) {
- Contract.Assert(expr != null);
- if (indexSet.Contains(index)) {
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(expr);
- liveSet.UnionWith(collector.usedVars);
- }
- index++;
- }
- } else if (cmd is HavocCmd) {
- HavocCmd/*!*/ havocCmd = (HavocCmd)cmd;
- foreach (IdentifierExpr/*!*/ expr in havocCmd.Vars) {
- Contract.Assert(expr != null);
- if (expr.Decl != null && !(QKeyValue.FindBoolAttribute(expr.Decl.Attributes, "assumption") && expr.Decl.Name.StartsWith("a##post##"))) {
- liveSet.Remove(expr.Decl);
- }
- }
- } else if (cmd is PredicateCmd) {
- Contract.Assert((cmd is AssertCmd || cmd is AssumeCmd));
- PredicateCmd/*!*/ predicateCmd = (PredicateCmd)cce.NonNull(cmd);
- if (predicateCmd.Expr is LiteralExpr) {
- LiteralExpr le = (LiteralExpr)predicateCmd.Expr;
- if (le.IsFalse) {
- liveSet.Clear();
- }
- } else {
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(predicateCmd.Expr);
- liveSet.UnionWith(collector.usedVars);
- }
- } else if (cmd is CommentCmd) {
- // comments are just for debugging and don't affect verification
- } else if (cmd is SugaredCmd) {
- SugaredCmd/*!*/ sugCmd = (SugaredCmd)cce.NonNull(cmd);
- Propagate(sugCmd.Desugaring, liveSet);
- } else if (cmd is StateCmd) {
- StateCmd/*!*/ stCmd = (StateCmd)cce.NonNull(cmd);
- List<Cmd>/*!*/ cmds = cce.NonNull(stCmd.Cmds);
- int len = cmds.Count;
- for (int i = len - 1; i >= 0; i--) {
- Propagate(cmds[i], liveSet);
- }
- foreach (Variable/*!*/ v in stCmd.Locals) {
- Contract.Assert(v != null);
- liveSet.Remove(v);
- }
- } else {
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
- }
- }
-
- /*
- // An idempotent semiring interface
- abstract public class Weight {
- abstract public Weight! one();
- abstract public Weight! zero();
- abstract public Weight! extend(Weight! w1, Weight! w2);
- abstract public Weight! combine(Weight! w1, Weight! w2);
- abstract public Weight! isEqual(Weight! w);
- abstract public Weight! projectLocals()
- }
- */
-
- // Weight domain for LiveVariableAnalysis (Gen/Kill)
-
- public class GenKillWeight {
- // lambda S. (S - kill) union gen
- HashSet<Variable/*!*/>/*!*/ gen;
- HashSet<Variable/*!*/>/*!*/ kill;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(gen));
- Contract.Invariant(cce.NonNullElements(kill));
- Contract.Invariant(oneWeight != null);
- Contract.Invariant(zeroWeight != null);
- }
-
- bool isZero;
-
- public static GenKillWeight/*!*/ oneWeight = new GenKillWeight(new HashSet<Variable/*!*/>(), new HashSet<Variable/*!*/>());
- public static GenKillWeight/*!*/ zeroWeight = new GenKillWeight();
-
- // initializes to zero
- public GenKillWeight() {
- this.isZero = true;
- this.gen = new HashSet<Variable/*!*/>();
- this.kill = new HashSet<Variable/*!*/>();
- }
-
- public GenKillWeight(HashSet<Variable/*!*/> gen, HashSet<Variable/*!*/> kill) {
- Contract.Requires(cce.NonNullElements(gen));
- Contract.Requires(cce.NonNullElements(kill));
- Contract.Assert(gen != null);
- Contract.Assert(kill != null);
- this.gen = gen;
- this.kill = kill;
- this.isZero = false;
- }
-
- public static GenKillWeight one() {
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- return oneWeight;
- }
-
- public static GenKillWeight zero() {
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- return zeroWeight;
- }
-
- public static GenKillWeight extend(GenKillWeight w1, GenKillWeight w2) {
- Contract.Requires(w2 != null);
- Contract.Requires(w1 != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- if (w1.isZero || w2.isZero)
- return zero();
-
- HashSet<Variable> t = new HashSet<Variable>(w2.gen);
- t.ExceptWith(w1.kill);
- HashSet<Variable> g = new HashSet<Variable>(w1.gen);
- g.UnionWith(t);
- HashSet<Variable> k = new HashSet<Variable>(w1.kill);
- k.UnionWith(w2.kill);
- return new GenKillWeight(g, k);
- //return new GenKillWeight(w1.gen.Union(w2.gen.Difference(w1.kill)), w1.kill.Union(w2.kill));
- }
-
- public static GenKillWeight combine(GenKillWeight w1, GenKillWeight w2) {
- Contract.Requires(w2 != null);
- Contract.Requires(w1 != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- if (w1.isZero)
- return w2;
- if (w2.isZero)
- return w1;
-
- HashSet<Variable> g = new HashSet<Variable>(w1.gen);
- g.UnionWith(w2.gen);
- HashSet<Variable> k = new HashSet<Variable>(w1.kill);
- k.IntersectWith(w2.kill);
- return new GenKillWeight(g, k);
- //return new GenKillWeight(w1.gen.Union(w2.gen), w1.kill.Intersection(w2.kill));
- }
-
- public static GenKillWeight projectLocals(GenKillWeight w) {
- Contract.Requires(w != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- HashSet<Variable/*!*/> gen = new HashSet<Variable>();
- foreach (Variable v in w.gen)
- {
- if (isGlobal(v))
- gen.Add(v);
- }
- HashSet<Variable/*!*/> kill = new HashSet<Variable>();
- foreach (Variable v in w.kill)
- {
- if (isGlobal(v))
- kill.Add(v);
- }
-
- return new GenKillWeight(gen, kill);
- }
-
- public static bool isEqual(GenKillWeight w1, GenKillWeight w2) {
- Contract.Requires(w2 != null);
- Contract.Requires(w1 != null);
- if (w1.isZero)
- return w2.isZero;
- if (w2.isZero)
- return w1.isZero;
-
- return (w1.gen.Equals(w2.gen) && w1.kill.Equals(w2.kill));
- }
-
- private static bool isGlobal(Variable v) {
- Contract.Requires(v != null);
- return (v is GlobalVariable);
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return string.Format("({0},{1})", gen.ToString(), kill.ToString());
- }
-
- public HashSet<Variable/*!*/>/*!*/ getLiveVars() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
- return gen;
- }
-
- public HashSet<Variable/*!*/>/*!*/ getLiveVars(HashSet<Variable/*!*/>/*!*/ lv) {
- Contract.Requires(cce.NonNullElements(lv));
- Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
- HashSet<Variable> temp = new HashSet<Variable>(lv);
- temp.ExceptWith(kill);
- temp.UnionWith(gen);
- return temp;
- }
-
- }
-
- public class ICFG {
- public Graph<Block/*!*/>/*!*/ graph;
- // Map from procedure to the list of blocks that call that procedure
- public Dictionary<string/*!*/, List<Block/*!*/>/*!*/>/*!*/ procsCalled;
- public HashSet<Block/*!*/>/*!*/ nodes;
- public Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>/*!*/ succEdges;
- public Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>/*!*/ predEdges;
- private Dictionary<Block/*!*/, int>/*!*/ priority;
-
- public HashSet<Block/*!*/>/*!*/ srcNodes;
- public HashSet<Block/*!*/>/*!*/ exitNodes;
-
- public Dictionary<Block/*!*/, GenKillWeight/*!*/>/*!*/ weightBefore;
- public Dictionary<Block/*!*/, GenKillWeight/*!*/>/*!*/ weightAfter;
- public Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ liveVarsAfter;
- public Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ liveVarsBefore;
-
- public GenKillWeight/*!*/ summary;
- public Implementation/*!*/ impl;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(graph.Nodes));
- Contract.Invariant(cce.NonNullDictionaryAndValues(procsCalled));
- Contract.Invariant(cce.NonNullElements(nodes));
- Contract.Invariant(cce.NonNullDictionaryAndValues(succEdges));
- Contract.Invariant(cce.NonNullDictionaryAndValues(predEdges));
- Contract.Invariant(priority != null);
- Contract.Invariant(cce.NonNullElements(srcNodes));
- Contract.Invariant(cce.NonNullElements(exitNodes));
- Contract.Invariant(cce.NonNullDictionaryAndValues(weightBefore));
- Contract.Invariant(cce.NonNullDictionaryAndValues(weightAfter));
- Contract.Invariant(cce.NonNullDictionaryAndValues(liveVarsAfter));
- Contract.Invariant(cce.NonNullDictionaryAndValues(liveVarsBefore));
- Contract.Invariant(summary != null);
- Contract.Invariant(impl != null);
- }
-
-
- [NotDelayed]
- public ICFG(Implementation impl) {
- Contract.Requires(impl != null);
- this.graph = new Graph<Block/*!*/>();
- this.procsCalled = new Dictionary<string/*!*/, List<Block/*!*/>/*!*/>();
- this.nodes = new HashSet<Block/*!*/>();
- this.succEdges = new Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>();
- this.predEdges = new Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>();
-
- this.priority = new Dictionary<Block/*!*/, int>();
-
- this.srcNodes = new HashSet<Block/*!*/>();
- this.exitNodes = new HashSet<Block/*!*/>();
-
- this.weightBefore = new Dictionary<Block/*!*/, GenKillWeight/*!*/>();
- this.weightAfter = new Dictionary<Block/*!*/, GenKillWeight/*!*/>();
- this.liveVarsAfter = new Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>();
- this.liveVarsBefore = new Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>();
-
- summary = GenKillWeight.zero();
- this.impl = impl;
-
- Initialize(impl);
-
- }
-
- private void Initialize(Implementation impl) {
- Contract.Requires(impl != null);
- addSource(impl.Blocks[0]);
- graph.AddSource(impl.Blocks[0]);
-
- foreach (Block/*!*/ b in impl.Blocks) {
- Contract.Assert(b != null);
- if (b.TransferCmd is ReturnCmd) {
- exitNodes.Add(b);
- } else {
- GotoCmd gc = b.TransferCmd as GotoCmd;
- Contract.Assert(gc != null);
- Contract.Assert(gc.labelTargets != null);
- foreach (Block/*!*/ t in gc.labelTargets) {
- Contract.Assert(t != null);
- addEdge(b, t);
- graph.AddEdge(b, t);
- }
- }
-
- weightBefore[b] = GenKillWeight.zero();
- weightAfter[b] = GenKillWeight.zero();
-
- foreach (Cmd/*!*/ c in b.Cmds) {
- Contract.Assert(c != null);
- if (c is CallCmd) {
- CallCmd/*!*/ cc = cce.NonNull((CallCmd/*!*/)c);
- Contract.Assert(cc.Proc != null);
- string/*!*/ procName = cc.Proc.Name;
- Contract.Assert(procName != null);
- if (!procsCalled.ContainsKey(procName)) {
- procsCalled.Add(procName, new List<Block/*!*/>());
- }
- procsCalled[procName].Add(b);
- }
- }
- }
-
- List<Block>/*!*/ sortedNodes;
- bool acyclic;
-
- graph.TarjanTopSort(out acyclic, out sortedNodes);
-
- if (!acyclic) {
- Console.WriteLine("Warning: graph is not a dag");
- }
-
- int num = sortedNodes.Count;
- foreach (Block/*!*/ b in sortedNodes) {
- Contract.Assert(b != null);
- priority.Add(b, num);
- num--;
- }
-
- }
-
- public int getPriority(Block b) {
- Contract.Requires(b != null);
- if (priority.ContainsKey(b))
- return priority[b];
- return Int32.MaxValue;
- }
-
- private void addSource(Block b) {
- Contract.Requires(b != null);
- registerNode(b);
- this.srcNodes.Add(b);
- }
-
- private void addExit(Block b) {
- Contract.Requires(b != null);
- registerNode(b);
- this.exitNodes.Add(b);
- }
-
- private void registerNode(Block b) {
- Contract.Requires(b != null);
- if (!succEdges.ContainsKey(b)) {
- succEdges.Add(b, new HashSet<Block/*!*/>());
- }
-
- if (!predEdges.ContainsKey(b)) {
- predEdges.Add(b, new HashSet<Block/*!*/>());
- }
-
- nodes.Add(b);
- }
-
- private void addEdge(Block src, Block tgt) {
- Contract.Requires(tgt != null);
- Contract.Requires(src != null);
- registerNode(src);
- registerNode(tgt);
-
- succEdges[src].Add(tgt);
- predEdges[tgt].Add(src);
- }
-
-
- }
-
- // Interprocedural Gen/Kill Analysis
- public class InterProcGenKill {
- Program/*!*/ program;
- Dictionary<string/*!*/, ICFG/*!*/>/*!*/ procICFG;
- Dictionary<string/*!*/, Procedure/*!*/>/*!*/ name2Proc;
- Dictionary<string/*!*/, List<WorkItem/*!*/>/*!*/>/*!*/ callers;
- Graph<string/*!*/>/*!*/ callGraph;
- Dictionary<string/*!*/, int>/*!*/ procPriority;
- int maxBlocksInProc;
-
- WorkList/*!*/ workList;
-
- Implementation/*!*/ mainImpl;
-
- static Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ varsLiveAtExit = new Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>();
- static Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ varsLiveAtEntry = new Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>();
- static Dictionary<string/*!*/, GenKillWeight/*!*/>/*!*/ varsLiveSummary = new Dictionary<string/*!*/, GenKillWeight/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(workList != null);
- Contract.Invariant(mainImpl != null);
- Contract.Invariant(program != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(procICFG));
- Contract.Invariant(cce.NonNullDictionaryAndValues(name2Proc));
- Contract.Invariant(cce.NonNullDictionaryAndValues(callers) &&
- Contract.ForAll(callers.Values, v => cce.NonNullElements(v)));
- Contract.Invariant(cce.NonNullElements(callGraph.Nodes));
- Contract.Invariant(procPriority != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(varsLiveAtEntry));
- Contract.Invariant(cce.NonNullDictionaryAndValues(varsLiveAtExit) &&
- Contract.ForAll(varsLiveAtExit.Values, v => cce.NonNullElements(v)));
- Contract.Invariant(cce.NonNullDictionaryAndValues(varsLiveSummary));
- Contract.Invariant(cce.NonNullDictionaryAndValues(weightCacheAfterCall));
- Contract.Invariant(cce.NonNullDictionaryAndValues(weightCacheBeforeCall));
- }
-
-
- [NotDelayed]
- public InterProcGenKill(Implementation impl, Program program) {
- Contract.Requires(program != null);
- Contract.Requires(impl != null);
- this.program = program;
- procICFG = new Dictionary<string/*!*/, ICFG/*!*/>();
- name2Proc = new Dictionary<string/*!*/, Procedure/*!*/>();
- workList = new WorkList();
- this.callers = new Dictionary<string/*!*/, List<WorkItem/*!*/>/*!*/>();
- this.callGraph = new Graph<string/*!*/>();
- this.procPriority = new Dictionary<string/*!*/, int>();
- this.maxBlocksInProc = 0;
- this.mainImpl = impl;
-
- Dictionary<string/*!*/, Implementation/*!*/>/*!*/ name2Impl = new Dictionary<string/*!*/, Implementation/*!*/>();
- varsLiveAtExit.Clear();
- varsLiveAtEntry.Clear();
- varsLiveSummary.Clear();
-
- foreach (var decl in program.TopLevelDeclarations) {
- Contract.Assert(decl != null);
- if (decl is Implementation) {
- Implementation/*!*/ imp = (Implementation/*!*/)cce.NonNull(decl);
- name2Impl[imp.Name] = imp;
- } else if (decl is Procedure) {
- Procedure/*!*/ proc = cce.NonNull(decl as Procedure);
- name2Proc[proc.Name] = proc;
- }
- }
-
- ICFG/*!*/ mainICFG = new ICFG(mainImpl);
- Contract.Assert(mainICFG != null);
- procICFG.Add(mainICFG.impl.Name, mainICFG);
- callGraph.AddSource(mainICFG.impl.Name);
-
- List<ICFG/*!*/>/*!*/ procsToConsider = new List<ICFG/*!*/>();
- procsToConsider.Add(mainICFG);
-
- while (procsToConsider.Count != 0) {
- ICFG/*!*/ p = procsToConsider[0];
- Contract.Assert(p != null);
- procsToConsider.RemoveAt(0);
-
- foreach (string/*!*/ callee in p.procsCalled.Keys) {
- Contract.Assert(callee != null);
- if (!name2Impl.ContainsKey(callee))
- continue;
-
- callGraph.AddEdge(p.impl.Name, callee);
-
- if (maxBlocksInProc < p.nodes.Count) {
- maxBlocksInProc = p.nodes.Count;
- }
-
- if (!callers.ContainsKey(callee)) {
- callers.Add(callee, new List<WorkItem/*!*/>());
- }
- foreach (Block/*!*/ b in p.procsCalled[callee]) {
- Contract.Assert(b != null);
- callers[callee].Add(new WorkItem(p, b));
- }
-
- if (procICFG.ContainsKey(callee))
- continue;
- ICFG/*!*/ ncfg = new ICFG(name2Impl[callee]);
- Contract.Assert(ncfg != null);
- procICFG.Add(callee, ncfg);
- procsToConsider.Add(ncfg);
- }
- }
-
- bool acyclic;
- List<string>/*!*/ sortedNodes;
- callGraph.TarjanTopSort(out acyclic, out sortedNodes);
-
- Contract.Assert(acyclic);
-
- int cnt = 0;
- for (int i = sortedNodes.Count - 1; i >= 0; i--) {
- string s = sortedNodes[i];
- if (s == null)
- continue;
- procPriority.Add(s, cnt);
- cnt++;
- }
-
- }
-
- public static HashSet<Variable/*!*/>/*!*/ GetVarsLiveAtExit(Implementation impl, Program prog) {
- Contract.Requires(prog != null);
- Contract.Requires(impl != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
- if (varsLiveAtExit.ContainsKey(impl.Name)) {
- return varsLiveAtExit[impl.Name];
- }
- // Return default: all globals and out params
- HashSet<Variable/*!*/>/*!*/ lv = new HashSet<Variable/*!*/>();
- foreach (Variable/*!*/ v in prog.GlobalVariables) {
- Contract.Assert(v != null);
- lv.Add(v);
- }
- foreach (Variable/*!*/ v in impl.OutParams) {
- Contract.Assert(v != null);
- lv.Add(v);
- }
- return lv;
- }
-
- public static HashSet<Variable/*!*/>/*!*/ GetVarsLiveAtEntry(Implementation impl, Program prog) {
- Contract.Requires(prog != null);
- Contract.Requires(impl != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
- if (varsLiveAtEntry.ContainsKey(impl.Name)) {
- return varsLiveAtEntry[impl.Name];
- }
- // Return default: all globals and in params
- HashSet<Variable/*!*/>/*!*/ lv = new HashSet<Variable/*!*/>();
- foreach (Variable/*!*/ v in prog.GlobalVariables) {
- Contract.Assert(v != null);
- lv.Add(v);
- }
- foreach (Variable/*!*/ v in impl.InParams) {
- Contract.Assert(v != null);
- lv.Add(v);
- }
- return lv;
- }
-
- public static bool HasSummary(string name) {
- Contract.Requires(name != null);
- return varsLiveSummary.ContainsKey(name);
- }
-
- public static HashSet<Variable/*!*/>/*!*/ PropagateLiveVarsAcrossCall(CallCmd cmd, HashSet<Variable/*!*/>/*!*/ lvAfter) {
- Contract.Requires(cmd != null);
- Contract.Requires(cce.NonNullElements(lvAfter));
- Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
- Procedure/*!*/ proc = cce.NonNull(cmd.Proc);
- if (varsLiveSummary.ContainsKey(proc.Name)) {
- GenKillWeight/*!*/ w1 = getWeightBeforeCall(cmd);
- Contract.Assert(w1 != null);
- GenKillWeight/*!*/ w2 = varsLiveSummary[proc.Name];
- Contract.Assert(w2 != null);
- GenKillWeight/*!*/ w3 = getWeightAfterCall(cmd);
- Contract.Assert(w3 != null);
- GenKillWeight/*!*/ w = GenKillWeight.extend(w1, GenKillWeight.extend(w2, w3));
- Contract.Assert(w != null);
- return w.getLiveVars(lvAfter);
- }
- HashSet<Variable/*!*/>/*!*/ ret = new HashSet<Variable/*!*/>();
- ret.UnionWith(lvAfter);
- LiveVariableAnalysis.Propagate(cmd, ret);
- return ret;
- }
-
- class WorkItem {
- public ICFG/*!*/ cfg;
- public Block/*!*/ block;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cfg != null);
- Contract.Invariant(block != null);
- }
-
-
- public WorkItem(ICFG cfg, Block block) {
- Contract.Requires(block != null);
- Contract.Requires(cfg != null);
- this.cfg = cfg;
- this.block = block;
- }
-
- public GenKillWeight getWeightAfter() {
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- return cfg.weightAfter[block];
- }
-
- public bool setWeightBefore(GenKillWeight w) {
- Contract.Requires(w != null);
- GenKillWeight/*!*/ prev = cfg.weightBefore[block];
- Contract.Assert(prev != null);
- GenKillWeight/*!*/ curr = GenKillWeight.combine(w, prev);
- Contract.Assert(curr != null);
- if (GenKillWeight.isEqual(prev, curr))
- return false;
- cfg.weightBefore[block] = curr;
- return true;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object other) {
- WorkItem/*!*/ wi = (WorkItem/*!*/)cce.NonNull(other);
- return (wi.cfg == cfg && wi.block == block);
- }
-
- [Pure]
- public override int GetHashCode() {
- return 0;
- }
-
- public string getLabel() {
- Contract.Ensures(Contract.Result<string>() != null);
- return cfg.impl.Name + "::" + block.Label;
- }
-
- }
-
- private void AddToWorkList(WorkItem wi) {
- Contract.Requires(wi != null);
- int i = procPriority[wi.cfg.impl.Name];
- int j = wi.cfg.getPriority(wi.block);
- int priority = (i * maxBlocksInProc) + j;
-
- workList.Add(wi, priority);
- }
-
- private void AddToWorkListReverse(WorkItem wi) {
- Contract.Requires(wi != null);
- int i = procPriority[wi.cfg.impl.Name];
- int j = wi.cfg.getPriority(wi.block);
- int priority = (procPriority.Count - i) * maxBlocksInProc + j;
- workList.Add(wi, priority);
- }
-
- class WorkList {
- SortedList<int, int>/*!*/ priorities;
- HashSet<string/*!*/>/*!*/ labels;
-
- Dictionary<int, List<WorkItem/*!*/>/*!*/>/*!*/ workList;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(priorities != null);
- Contract.Invariant(cce.NonNullElements(labels));
- Contract.Invariant(cce.NonNullDictionaryAndValues(workList) &&
- Contract.ForAll(workList.Values, v => cce.NonNullElements(v)));
- }
-
-
- public WorkList() {
- labels = new HashSet<string/*!*/>();
- priorities = new SortedList<int, int>();
- workList = new Dictionary<int, List<WorkItem/*!*/>/*!*/>();
- }
-
- public void Add(WorkItem wi, int priority) {
- Contract.Requires(wi != null);
- string/*!*/ lab = wi.getLabel();
- Contract.Assert(lab != null);
- if (labels.Contains(lab)) {
- // Already on worklist
- return;
- }
- labels.Add(lab);
- if (!workList.ContainsKey(priority)) {
- workList.Add(priority, new List<WorkItem/*!*/>());
- }
- workList[priority].Add(wi);
- if (!priorities.ContainsKey(priority)) {
- priorities.Add(priority, 0);
- }
-
- priorities[priority] = priorities[priority] + 1;
- }
-
- public WorkItem Get() {
- Contract.Ensures(Contract.Result<WorkItem>() != null);
- // Get minimum priority
- int p = cce.NonNull(priorities.Keys)[0];
- priorities[p] = priorities[p] - 1;
- if (priorities[p] == 0) {
- priorities.Remove(p);
- }
-
- // Get a WI with this priority
- WorkItem/*!*/ wi = workList[p][0];
- Contract.Assert(wi != null);
- workList[p].RemoveAt(0);
-
- // update labels
- labels.Remove(wi.getLabel());
- return wi;
- }
-
- public int Count {
- get {
- return labels.Count;
- }
- }
- }
-
- private GenKillWeight getSummary(CallCmd cmd) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- Contract.Assert(cmd.Proc != null);
- string/*!*/ procName = cmd.Proc.Name;
- Contract.Assert(procName != null);
- if (procICFG.ContainsKey(procName)) {
- ICFG/*!*/ cfg = procICFG[procName];
- Contract.Assert(cfg != null);
- return GenKillWeight.projectLocals(cfg.summary);
- }
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- public static void ComputeLiveVars(Implementation impl, Program/*!*/ prog) {
- Contract.Requires(prog != null);
- Contract.Requires(impl != null);
- InterProcGenKill/*!*/ ipgk = new InterProcGenKill(impl, prog);
- Contract.Assert(ipgk != null);
- ipgk.Compute();
- }
-
- public void Compute() {
- // Put all exit nodes in the worklist
- foreach (ICFG/*!*/ cfg in procICFG.Values) {
- Contract.Assert(cfg != null);
- foreach (Block/*!*/ eb in cfg.exitNodes) {
- Contract.Assert(eb != null);
- WorkItem/*!*/ wi = new WorkItem(cfg, eb);
- Contract.Assert(wi != null);
- cfg.weightAfter[eb] = GenKillWeight.one();
- AddToWorkList(wi);
- }
- }
-
- while (workList.Count != 0) {
- WorkItem/*!*/ wi = workList.Get();
- Contract.Assert(wi != null);
- process(wi);
- }
-
- // Propagate LV to all procedures
- foreach (ICFG/*!*/ cfg in procICFG.Values) {
- Contract.Assert(cfg != null);
- foreach (Block/*!*/ b in cfg.nodes) {
- Contract.Assert(b != null);
- cfg.liveVarsAfter.Add(b, new HashSet<Variable/*!*/>());
- cfg.liveVarsBefore.Add(b, new HashSet<Variable/*!*/>());
- }
- }
-
- ICFG/*!*/ mainCfg = procICFG[mainImpl.Name];
- Contract.Assert(mainCfg != null);
- foreach (Block/*!*/ eb in mainCfg.exitNodes) {
- Contract.Assert(eb != null);
- WorkItem/*!*/ wi = new WorkItem(mainCfg, eb);
- Contract.Assert(wi != null);
- AddToWorkListReverse(wi);
- }
-
- while (workList.Count != 0) {
- WorkItem/*!*/ wi = workList.Get();
- Contract.Assert(wi != null);
- processLV(wi);
- }
-
- // Set live variable info
- foreach (ICFG/*!*/ cfg in procICFG.Values) {
- Contract.Assert(cfg != null);
- HashSet<Variable/*!*/>/*!*/ lv = new HashSet<Variable/*!*/>();
- foreach (Block/*!*/ eb in cfg.exitNodes) {
- Contract.Assert(eb != null);
- lv.UnionWith(cfg.liveVarsAfter[eb]);
- }
- varsLiveAtExit.Add(cfg.impl.Name, lv);
- lv = new HashSet<Variable/*!*/>();
- foreach (Block/*!*/ eb in cfg.srcNodes) {
- Contract.Assert(eb != null);
- lv.UnionWith(cfg.liveVarsBefore[eb]);
- }
- varsLiveAtEntry.Add(cfg.impl.Name, lv);
- varsLiveSummary.Add(cfg.impl.Name, cfg.summary);
- }
-
- /*
- foreach(Block/*!*/
- /* b in mainImpl.Blocks){
-Contract.Assert(b != null);
-//Set<Variable!> lv = cfg.weightBefore[b].getLiveVars();
-b.liveVarsBefore = procICFG[mainImpl.Name].liveVarsAfter[b];
-//foreach(GlobalVariable/*!*/
- /* v in program.GlobalVariables){Contract.Assert(v != null);
-// b.liveVarsBefore.Add(v);
-//}
-}
-*/
- }
-
- // Called when summaries have already been computed
- private void processLV(WorkItem wi) {
- Contract.Requires(wi != null);
- ICFG/*!*/ cfg = wi.cfg;
- Contract.Assert(cfg != null);
- Block/*!*/ block = wi.block;
- Contract.Assert(block != null);
- HashSet<Variable/*!*/>/*!*/ lv = cfg.liveVarsAfter[block];
- Contract.Assert(cce.NonNullElements(lv));
- // Propagate backwards in the block
- HashSet<Variable/*!*/>/*!*/ prop = new HashSet<Variable/*!*/>();
- prop.UnionWith(lv);
- for (int i = block.Cmds.Count - 1; i >= 0; i--) {
- Cmd/*!*/ cmd = block.Cmds[i];
- Contract.Assert(cmd != null);
- if (cmd is CallCmd) {
- string/*!*/ procName = cce.NonNull(cce.NonNull((CallCmd)cmd).Proc).Name;
- Contract.Assert(procName != null);
- if (procICFG.ContainsKey(procName)) {
- ICFG/*!*/ callee = procICFG[procName];
- Contract.Assert(callee != null);
- // Inter propagation
- // Remove local variables; add return variables
- HashSet<Variable/*!*/>/*!*/ elv = new HashSet<Variable/*!*/>();
- foreach (Variable/*!*/ v in prop) {
- Contract.Assert(v != null);
- if (v is GlobalVariable)
- elv.Add(v);
- }
- foreach (Variable/*!*/ v in callee.impl.OutParams) {
- Contract.Assert(v != null);
- elv.Add(v);
- }
-
- foreach (Block/*!*/ eb in callee.exitNodes) {
- Contract.Assert(eb != null);
- callee.liveVarsAfter[eb].UnionWith(elv);
- // TODO: check if modified before inserting
- AddToWorkListReverse(new WorkItem(callee, eb));
- }
-
- // Continue with intra propagation
- GenKillWeight/*!*/ summary = getWeightCall(cce.NonNull((CallCmd/*!*/)cmd));
- prop = summary.getLiveVars(prop);
- } else {
- LiveVariableAnalysis.Propagate(cmd, prop);
- }
- } else {
- LiveVariableAnalysis.Propagate(cmd, prop);
- }
- }
-
- cfg.liveVarsBefore[block].UnionWith(prop);
-
- foreach (Block/*!*/ b in cfg.predEdges[block]) {
- Contract.Assert(b != null);
- HashSet<Variable/*!*/>/*!*/ prev = cfg.liveVarsAfter[b];
- Contract.Assert(cce.NonNullElements(prev));
- HashSet<Variable/*!*/>/*!*/ curr = new HashSet<Variable>(prev);
- curr.UnionWith(cfg.liveVarsBefore[block]);
- Contract.Assert(cce.NonNullElements(curr));
- if (curr.Count != prev.Count) {
- cfg.liveVarsAfter[b] = curr;
- AddToWorkListReverse(new WorkItem(cfg, b));
- }
- }
- }
-
- private void process(WorkItem wi) {
- Contract.Requires(wi != null);
- GenKillWeight/*!*/ w = wi.getWeightAfter();
- Contract.Assert(w != null);
-
- for (int i = wi.block.Cmds.Count - 1; i >= 0; i--) {
- Cmd/*!*/ c = wi.block.Cmds[i];
- Contract.Assert(c != null);
- if (c is CallCmd && procICFG.ContainsKey(cce.NonNull(cce.NonNull((CallCmd)c).Proc).Name)) {
- w = GenKillWeight.extend(getWeightCall(cce.NonNull((CallCmd)c)), w);
- } else {
- GenKillWeight/*!*/ cweight = getWeight(c, wi.cfg.impl, program);
- Contract.Assert(cweight != null);
- w = GenKillWeight.extend(cweight, w);
- }
- }
-
- bool change = wi.setWeightBefore(w);
-
- if (change && wi.cfg.srcNodes.Contains(wi.block)) {
- GenKillWeight/*!*/ prev = wi.cfg.summary;
- Contract.Assert(prev != null);
- GenKillWeight/*!*/ curr = GenKillWeight.combine(prev, wi.cfg.weightBefore[wi.block]);
- Contract.Assert(curr != null);
- if (!GenKillWeight.isEqual(prev, curr)) {
- wi.cfg.summary = curr;
- // push callers onto the worklist
- if (callers.ContainsKey(wi.cfg.impl.Name)) {
- foreach (WorkItem/*!*/ caller in callers[wi.cfg.impl.Name]) {
- Contract.Assert(caller != null);
- AddToWorkList(caller);
- }
- }
- }
- }
-
- foreach (Block/*!*/ b in wi.cfg.predEdges[wi.block]) {
- Contract.Assert(b != null);
- GenKillWeight/*!*/ prev = wi.cfg.weightAfter[b];
- Contract.Assert(prev != null);
- GenKillWeight/*!*/ curr = GenKillWeight.combine(prev, w);
- Contract.Assert(curr != null);
- if (!GenKillWeight.isEqual(prev, curr)) {
- wi.cfg.weightAfter[b] = curr;
- AddToWorkList(new WorkItem(wi.cfg, b));
- }
- }
-
- }
-
- static Dictionary<Cmd/*!*/, GenKillWeight/*!*/>/*!*/ weightCache = new Dictionary<Cmd/*!*/, GenKillWeight/*!*/>();
-
- private static GenKillWeight getWeight(Cmd cmd) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- return getWeight(cmd, null, null);
- }
-
- private GenKillWeight getWeightCall(CallCmd cmd) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- GenKillWeight/*!*/ w1 = getWeightBeforeCall(cmd);
- GenKillWeight/*!*/ w2 = getSummary(cmd);
- GenKillWeight/*!*/ w3 = getWeightAfterCall(cmd);
- Contract.Assert(w1 != null);
- Contract.Assert(w2 != null);
- Contract.Assert(w3 != null);
- return GenKillWeight.extend(w1, GenKillWeight.extend(w2, w3));
- }
-
- private static GenKillWeight getWeight(Cmd cmd, Implementation impl, Program prog) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
-
- if (weightCache.ContainsKey(cmd))
- return weightCache[cmd];
-
- HashSet<Variable/*!*/>/*!*/ gen = new HashSet<Variable/*!*/>();
- HashSet<Variable/*!*/>/*!*/ kill = new HashSet<Variable/*!*/>();
- GenKillWeight/*!*/ ret;
-
- if (cmd is AssignCmd) {
- AssignCmd/*!*/ assignCmd = (AssignCmd)cmd;
- Contract.Assert(cmd != null);
- // I must first iterate over all the targets and remove the live ones.
- // After the removals are done, I must add the variables referred on
- // the right side of the removed targets
- foreach (AssignLhs/*!*/ lhs in assignCmd.Lhss) {
- Contract.Assert(lhs != null);
- Variable var = lhs.DeepAssignedVariable;
- if (var != null) {
- if (lhs is SimpleAssignLhs) {
- // we should only remove non-map target variables because there is an implicit
- // read of a map variable in an assignment to it
- kill.Add(var);
- }
- }
- }
- int index = 0;
- foreach (Expr/*!*/ expr in assignCmd.Rhss) {
- Contract.Assert(expr != null);
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(expr);
- gen.UnionWith(collector.usedVars);
- AssignLhs lhs = assignCmd.Lhss[index];
- if (lhs is MapAssignLhs) {
- // If the target is a map, then all indices are also read
- MapAssignLhs malhs = (MapAssignLhs)lhs;
- foreach (Expr e in malhs.Indexes) {
- VariableCollector/*!*/ c = new VariableCollector();
- c.Visit(e);
- gen.UnionWith(c.usedVars);
- }
- }
- index++;
- }
- ret = new GenKillWeight(gen, kill);
- } else if (cmd is HavocCmd) {
- HavocCmd/*!*/ havocCmd = (HavocCmd)cce.NonNull(cmd);
- foreach (IdentifierExpr/*!*/ expr in havocCmd.Vars) {
- Contract.Assert(expr != null);
- if (expr.Decl != null) {
- kill.Add(expr.Decl);
- }
- }
- ret = new GenKillWeight(gen, kill);
- } else if (cmd is PredicateCmd) {
- Contract.Assert((cmd is AssertCmd || cmd is AssumeCmd));
- PredicateCmd/*!*/ predicateCmd = (PredicateCmd)cce.NonNull(cmd);
- if (predicateCmd.Expr is LiteralExpr && prog != null && impl != null) {
- LiteralExpr le = (LiteralExpr)predicateCmd.Expr;
- if (le.IsFalse) {
- var globals = prog.GlobalVariables;
- Contract.Assert(cce.NonNullElements(globals));
- foreach (Variable/*!*/ v in globals) {
- Contract.Assert(v != null);
- kill.Add(v);
- }
- foreach (Variable/*!*/ v in impl.LocVars) {
- Contract.Assert(v != null);
- kill.Add(v);
- }
- foreach (Variable/*!*/ v in impl.OutParams) {
- Contract.Assert(v != null);
- kill.Add(v);
- }
- }
- } else {
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(predicateCmd.Expr);
- gen.UnionWith(collector.usedVars);
- }
- ret = new GenKillWeight(gen, kill);
- } else if (cmd is CommentCmd) {
- ret = new GenKillWeight(gen, kill);
- // comments are just for debugging and don't affect verification
- } else if (cmd is SugaredCmd) {
- SugaredCmd/*!*/ sugCmd = (SugaredCmd)cmd;
- Contract.Assert(sugCmd != null);
- ret = getWeight(sugCmd.Desugaring, impl, prog);
- } else if (cmd is StateCmd) {
- StateCmd/*!*/ stCmd = (StateCmd)cmd;
- Contract.Assert(stCmd != null);
- List<Cmd>/*!*/ cmds = stCmd.Cmds;
- Contract.Assert(cmds != null);
- int len = cmds.Count;
- ret = GenKillWeight.one();
- for (int i = len - 1; i >= 0; i--) {
- GenKillWeight/*!*/ w = getWeight(cmds[i], impl, prog);
- Contract.Assert(w != null);
- ret = GenKillWeight.extend(w, ret);
- }
- foreach (Variable/*!*/ v in stCmd.Locals) {
- Contract.Assert(v != null);
- kill.Add(v);
- }
- ret = GenKillWeight.extend(new GenKillWeight(gen, kill), ret);
- } else {
- {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- weightCache[cmd] = ret;
- return ret;
- }
-
- static Dictionary<Cmd/*!*/, GenKillWeight/*!*/>/*!*/ weightCacheAfterCall = new Dictionary<Cmd/*!*/, GenKillWeight/*!*/>();
- static Dictionary<Cmd/*!*/, GenKillWeight/*!*/>/*!*/ weightCacheBeforeCall = new Dictionary<Cmd/*!*/, GenKillWeight/*!*/>();
-
- private static GenKillWeight getWeightAfterCall(Cmd cmd) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
-
- if (weightCacheAfterCall.ContainsKey(cmd))
- return weightCacheAfterCall[cmd];
-
- HashSet<Variable/*!*/>/*!*/ gen = new HashSet<Variable/*!*/>();
- HashSet<Variable/*!*/>/*!*/ kill = new HashSet<Variable/*!*/>();
-
- Contract.Assert(cmd is CallCmd);
- CallCmd/*!*/ ccmd = cce.NonNull((CallCmd)cmd);
-
- foreach (IdentifierExpr/*!*/ ie in ccmd.Outs) {
- Contract.Assert(ie != null);
- if (ie.Decl != null)
- kill.Add(ie.Decl);
- }
-
- // Variables in ensures are considered as "read"
- foreach (Ensures/*!*/ re in cce.NonNull(ccmd.Proc).Ensures) {
- Contract.Assert(re != null);
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(re.Condition);
- foreach (Variable/*!*/ v in collector.usedVars) {
- Contract.Assert(v != null);
- if (v is GlobalVariable) {
- gen.Add(v);
- }
- }
- }
-
- GenKillWeight/*!*/ ret = new GenKillWeight(gen, kill);
- Contract.Assert(ret != null);
- weightCacheAfterCall[cmd] = ret;
- return ret;
- }
-
- private static GenKillWeight getWeightBeforeCall(Cmd cmd) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<GenKillWeight>() != null);
- Contract.Assert((cmd is CallCmd));
- if (weightCacheBeforeCall.ContainsKey(cmd))
- return weightCacheBeforeCall[cmd];
-
- HashSet<Variable/*!*/>/*!*/ gen = new HashSet<Variable/*!*/>();
- HashSet<Variable/*!*/>/*!*/ kill = new HashSet<Variable/*!*/>();
- CallCmd/*!*/ ccmd = cce.NonNull((CallCmd/*!*/)cmd);
-
- foreach (Expr/*!*/ expr in ccmd.Ins) {
- Contract.Assert(expr != null);
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(expr);
- gen.UnionWith(collector.usedVars);
- }
-
- Contract.Assert(ccmd.Proc != null);
-
- // Variables in requires are considered as "read"
- foreach (Requires/*!*/ re in ccmd.Proc.Requires) {
- Contract.Assert(re != null);
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(re.Condition);
- foreach (Variable/*!*/ v in collector.usedVars) {
- Contract.Assert(v != null);
- if (v is GlobalVariable) {
- gen.Add(v);
- }
- }
- }
-
- // Old variables in ensures are considered as "read"
- foreach (Ensures/*!*/ re in ccmd.Proc.Ensures) {
- Contract.Assert(re != null);
- VariableCollector/*!*/ collector = new VariableCollector();
- collector.Visit(re.Condition);
- foreach (Variable/*!*/ v in collector.oldVarsUsed) {
- Contract.Assert(v != null);
- if (v is GlobalVariable) {
- gen.Add(v);
- }
- }
- }
-
- GenKillWeight/*!*/ ret = new GenKillWeight(gen, kill);
- Contract.Assert(ret != null);
- weightCacheAfterCall[cmd] = ret;
- return ret;
- }
- }
-
- public class TokenEliminator : ReadOnlyVisitor
- {
- public int TokenCount = 0;
- public override Expr VisitExpr(Expr node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitExpr(node);
- }
- public override Variable VisitVariable(Variable node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitVariable(node);
- }
- public override Function VisitFunction(Function node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitFunction(node);
- }
- public override Implementation VisitImplementation(Implementation node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitImplementation(node);
- }
- public override Procedure VisitProcedure(Procedure node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitProcedure(node);
- }
- public override Axiom VisitAxiom(Axiom node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitAxiom(node);
- }
- public override Cmd VisitAssignCmd(AssignCmd node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitAssignCmd(node);
- }
- public override Cmd VisitAssumeCmd(AssumeCmd node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitAssumeCmd(node);
- }
- public override Cmd VisitHavocCmd(HavocCmd node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitHavocCmd(node);
- }
- public override Constant VisitConstant(Constant node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitConstant(node);
- }
- public override TransferCmd VisitTransferCmd(TransferCmd node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitTransferCmd(node);
- }
- public override Block VisitBlock(Block node)
- {
- node.tok = Token.NoToken;
- TokenCount++;
- return base.VisitBlock(node);
- }
- }
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+
+
+namespace Microsoft.Boogie {
+ public class UnusedVarEliminator : VariableCollector {
+ public static void Eliminate(Program program) {
+ Contract.Requires(program != null);
+ UnusedVarEliminator elim = new UnusedVarEliminator();
+ elim.Visit(program);
+ }
+
+ private UnusedVarEliminator()
+ : base() {
+
+ }
+
+ public override Implementation VisitImplementation(Implementation node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Implementation>() != null);
+ //Console.WriteLine("Procedure {0}", node.Name);
+ Implementation/*!*/ impl = base.VisitImplementation(node);
+ Contract.Assert(impl != null);
+ //Console.WriteLine("Old number of local variables = {0}", impl.LocVars.Length);
+ List<Variable>/*!*/ vars = new List<Variable>();
+ foreach (Variable/*!*/ var in impl.LocVars) {
+ Contract.Assert(var != null);
+ if (_usedVars.Contains(var))
+ vars.Add(var);
+ }
+ impl.LocVars = vars;
+ //Console.WriteLine("New number of local variables = {0}", impl.LocVars.Length);
+ //Console.WriteLine("---------------------------------");
+ _usedVars.Clear();
+ return impl;
+ }
+ }
+
+ public class ModSetCollector : ReadOnlyVisitor {
+ private Procedure enclosingProc;
+ private Dictionary<Procedure/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ modSets;
+ private HashSet<Procedure> yieldingProcs;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(modSets));
+ Contract.Invariant(Contract.ForAll(modSets.Values, v => cce.NonNullElements(v)));
+ }
+
+ public ModSetCollector() {
+ modSets = new Dictionary<Procedure/*!*/, HashSet<Variable/*!*/>/*!*/>();
+ yieldingProcs = new HashSet<Procedure>();
+ }
+
+ private bool moreProcessingRequired;
+
+ public void DoModSetAnalysis(Program program) {
+ Contract.Requires(program != null);
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+// Console.WriteLine();
+// Console.WriteLine("Running modset analysis ...");
+// int procCount = 0;
+// foreach (Declaration/*!*/ decl in program.TopLevelDeclarations)
+// {
+// Contract.Assert(decl != null);
+// if (decl is Procedure)
+// procCount++;
+// }
+// Console.WriteLine("Number of procedures = {0}", procCount);*/
+ }
+
+ HashSet<Procedure/*!*/> implementedProcs = new HashSet<Procedure/*!*/>();
+ foreach (var impl in program.Implementations) {
+ if (impl.Proc != null)
+ implementedProcs.Add(impl.Proc);
+ }
+ foreach (var proc in program.Procedures) {
+ if (!implementedProcs.Contains(proc))
+ {
+ enclosingProc = proc;
+ foreach (var expr in proc.Modifies)
+ {
+ Contract.Assert(expr != null);
+ ProcessVariable(expr.Decl);
+ }
+ enclosingProc = null;
+ }
+ else
+ {
+ modSets.Add(proc, new HashSet<Variable>());
+ }
+ }
+
+ moreProcessingRequired = true;
+ while (moreProcessingRequired) {
+ moreProcessingRequired = false;
+ this.Visit(program);
+ }
+
+ foreach (Procedure x in modSets.Keys)
+ {
+ x.Modifies = new List<IdentifierExpr>();
+ foreach (Variable v in modSets[x])
+ {
+ x.Modifies.Add(new IdentifierExpr(v.tok, v));
+ }
+ }
+ foreach (Procedure x in yieldingProcs)
+ {
+ if (!QKeyValue.FindBoolAttribute(x.Attributes, "yields"))
+ {
+ x.AddAttribute("yields");
+ }
+ }
+
+#if DEBUG_PRINT
+ Console.WriteLine("Number of procedures with nonempty modsets = {0}", modSets.Keys.Count);
+ foreach (Procedure/*!*/ x in modSets.Keys) {
+ Contract.Assert(x != null);
+ Console.Write("{0} : ", x.Name);
+ bool first = true;
+ foreach (Variable/*!*/ y in modSets[x]) {
+ Contract.Assert(y != null);
+ if (first)
+ first = false;
+ else
+ Console.Write(", ");
+ Console.Write("{0}", y.Name);
+ }
+ Console.WriteLine("");
+ }
+#endif
+ }
+
+ public override Implementation VisitImplementation(Implementation node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Implementation>() != null);
+ enclosingProc = node.Proc;
+ Implementation/*!*/ ret = base.VisitImplementation(node);
+ Contract.Assert(ret != null);
+ enclosingProc = null;
+
+ return ret;
+ }
+ public override YieldCmd VisitYieldCmd(YieldCmd node)
+ {
+ if (!yieldingProcs.Contains(enclosingProc))
+ {
+ yieldingProcs.Add(enclosingProc);
+ moreProcessingRequired = true;
+ }
+ return base.VisitYieldCmd(node);
+ }
+ public override Cmd VisitAssignCmd(AssignCmd assignCmd) {
+ //Contract.Requires(assignCmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Cmd ret = base.VisitAssignCmd(assignCmd);
+ foreach (AssignLhs/*!*/ lhs in assignCmd.Lhss) {
+ Contract.Assert(lhs != null);
+ ProcessVariable(lhs.DeepAssignedVariable);
+ }
+ return ret;
+ }
+ public override Cmd VisitHavocCmd(HavocCmd havocCmd) {
+ //Contract.Requires(havocCmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Cmd ret = base.VisitHavocCmd(havocCmd);
+ foreach (IdentifierExpr/*!*/ expr in havocCmd.Vars) {
+ Contract.Assert(expr != null);
+ ProcessVariable(expr.Decl);
+ }
+ return ret;
+ }
+ public override Cmd VisitCallCmd(CallCmd callCmd) {
+ //Contract.Requires(callCmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Cmd ret = base.VisitCallCmd(callCmd);
+ foreach (IdentifierExpr ie in callCmd.Outs)
+ {
+ if (ie != null) ProcessVariable(ie.Decl);
+ }
+ Procedure callee = callCmd.Proc;
+ if (callee == null)
+ return ret;
+ if (modSets.ContainsKey(callee)) {
+ foreach (Variable var in modSets[callee]) {
+ ProcessVariable(var);
+ }
+ }
+ if (!yieldingProcs.Contains(enclosingProc) && (yieldingProcs.Contains(callCmd.Proc) || callCmd.IsAsync))
+ {
+ yieldingProcs.Add(enclosingProc);
+ moreProcessingRequired = true;
+ }
+ if (callCmd.IsAsync)
+ {
+ if (!yieldingProcs.Contains(callCmd.Proc))
+ {
+ yieldingProcs.Add(callCmd.Proc);
+ moreProcessingRequired = true;
+ }
+ }
+ return ret;
+ }
+ public override Cmd VisitParCallCmd(ParCallCmd node)
+ {
+ //Contract.Requires(callCmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Cmd ret = base.VisitParCallCmd(node);
+ if (!yieldingProcs.Contains(enclosingProc))
+ {
+ yieldingProcs.Add(enclosingProc);
+ moreProcessingRequired = true;
+ }
+ foreach (CallCmd callCmd in node.CallCmds)
+ {
+ if (!yieldingProcs.Contains(callCmd.Proc))
+ {
+ yieldingProcs.Add(callCmd.Proc);
+ moreProcessingRequired = true;
+ }
+ }
+ return ret;
+ }
+ private void ProcessVariable(Variable var) {
+ Procedure/*!*/ localProc = cce.NonNull(enclosingProc);
+ if (var == null)
+ return;
+ if (!(var is GlobalVariable))
+ return;
+ if (!modSets.ContainsKey(localProc)) {
+ modSets[localProc] = new HashSet<Variable/*!*/>();
+ }
+ if (modSets[localProc].Contains(var))
+ return;
+ moreProcessingRequired = true;
+ modSets[localProc].Add(var);
+ }
+ public override Expr VisitCodeExpr(CodeExpr node) {
+ // don't go into the code expression, since it can only modify variables local to the code expression,
+ // and the mod-set analysis is interested in global variables
+ return node;
+ }
+ }
+
+ public class MutableVariableCollector : ReadOnlyVisitor
+ {
+ public HashSet<Variable> UsedVariables = new HashSet<Variable>();
+
+ public void AddUsedVariables(HashSet<Variable> usedVariables)
+ {
+ Contract.Requires(usedVariables != null);
+
+ foreach (var v in usedVariables)
+ {
+ UsedVariables.Add(v);
+ }
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+
+ if (node.Decl != null && node.Decl.IsMutable)
+ {
+ UsedVariables.Add(node.Decl);
+ }
+ return base.VisitIdentifierExpr(node);
+ }
+ }
+
+ public class VariableCollector : ReadOnlyVisitor {
+ protected HashSet<Variable/*!*/>/*!*/ _usedVars;
+ public IEnumerable<Variable /*!*/>/*!*/ usedVars
+ {
+ get
+ {
+ return _usedVars.AsEnumerable();
+ }
+ }
+
+ protected HashSet<Variable/*!*/>/*!*/ _oldVarsUsed;
+ public IEnumerable<Variable /*!*/>/*!*/ oldVarsUsed
+ {
+ get
+ {
+ return _oldVarsUsed.AsEnumerable();
+ }
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(_usedVars));
+ Contract.Invariant(cce.NonNullElements(_oldVarsUsed));
+ }
+
+ int insideOldExpr;
+
+ public VariableCollector() {
+ _usedVars = new System.Collections.Generic.HashSet<Variable/*!*/>();
+ _oldVarsUsed = new System.Collections.Generic.HashSet<Variable/*!*/>();
+ insideOldExpr = 0;
+ }
+
+ public override Expr VisitOldExpr(OldExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ insideOldExpr++;
+ node.Expr = this.VisitExpr(node.Expr);
+ insideOldExpr--;
+ return node;
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ if (node.Decl != null) {
+ _usedVars.Add(node.Decl);
+ if (insideOldExpr > 0) {
+ _oldVarsUsed.Add(node.Decl);
+ }
+ }
+ return node;
+ }
+ }
+
+ public class BlockCoalescer : ReadOnlyVisitor {
+ public static void CoalesceBlocks(Program program) {
+ Contract.Requires(program != null);
+ BlockCoalescer blockCoalescer = new BlockCoalescer();
+ blockCoalescer.Visit(program);
+ }
+
+ private static HashSet<Block/*!*/>/*!*/ ComputeMultiPredecessorBlocks(Implementation/*!*/ impl) {
+ Contract.Requires(impl != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Block>>()));
+ HashSet<Block/*!*/> visitedBlocks = new HashSet<Block/*!*/>();
+ HashSet<Block/*!*/> multiPredBlocks = new HashSet<Block/*!*/>();
+ Stack<Block/*!*/> dfsStack = new Stack<Block/*!*/>();
+ dfsStack.Push(impl.Blocks[0]);
+ while (dfsStack.Count > 0) {
+ Block/*!*/ b = dfsStack.Pop();
+ Contract.Assert(b != null);
+ if (visitedBlocks.Contains(b)) {
+ multiPredBlocks.Add(b);
+ continue;
+ }
+ visitedBlocks.Add(b);
+ if (b.TransferCmd == null)
+ continue;
+ if (b.TransferCmd is ReturnCmd)
+ continue;
+ Contract.Assert(b.TransferCmd is GotoCmd);
+ GotoCmd gotoCmd = (GotoCmd)b.TransferCmd;
+ if (gotoCmd.labelTargets == null)
+ continue;
+ foreach (Block/*!*/ succ in gotoCmd.labelTargets) {
+ Contract.Assert(succ != null);
+ dfsStack.Push(succ);
+ }
+ }
+ return multiPredBlocks;
+ }
+
+ public override Implementation VisitImplementation(Implementation impl) {
+ //Contract.Requires(impl != null);
+ Contract.Ensures(Contract.Result<Implementation>() != null);
+ //Console.WriteLine("Procedure {0}", impl.Name);
+ //Console.WriteLine("Initial number of blocks = {0}", impl.Blocks.Count);
+
+ HashSet<Block/*!*/> multiPredBlocks = ComputeMultiPredecessorBlocks(impl);
+ Contract.Assert(cce.NonNullElements(multiPredBlocks));
+ HashSet<Block/*!*/> visitedBlocks = new HashSet<Block/*!*/>();
+ HashSet<Block/*!*/> removedBlocks = new HashSet<Block/*!*/>();
+ Stack<Block/*!*/> dfsStack = new Stack<Block/*!*/>();
+ dfsStack.Push(impl.Blocks[0]);
+ while (dfsStack.Count > 0) {
+ Block/*!*/ b = dfsStack.Pop();
+ Contract.Assert(b != null);
+ if (visitedBlocks.Contains(b))
+ continue;
+ visitedBlocks.Add(b);
+ if (b.TransferCmd == null)
+ continue;
+ if (b.TransferCmd is ReturnCmd)
+ continue;
+ Contract.Assert(b.TransferCmd is GotoCmd);
+ GotoCmd gotoCmd = (GotoCmd)b.TransferCmd;
+ if (gotoCmd.labelTargets == null)
+ continue;
+ if (gotoCmd.labelTargets.Count == 1) {
+ Block/*!*/ succ = cce.NonNull(gotoCmd.labelTargets[0]);
+ if (!multiPredBlocks.Contains(succ)) {
+ foreach (Cmd/*!*/ cmd in succ.Cmds) {
+ Contract.Assert(cmd != null);
+ b.Cmds.Add(cmd);
+ }
+ b.TransferCmd = succ.TransferCmd;
+ if (!b.tok.IsValid && succ.tok.IsValid) {
+ b.tok = succ.tok;
+ b.Label = succ.Label;
+ }
+ removedBlocks.Add(succ);
+ dfsStack.Push(b);
+ visitedBlocks.Remove(b);
+ continue;
+ }
+ }
+ foreach (Block/*!*/ succ in gotoCmd.labelTargets) {
+ Contract.Assert(succ != null);
+ dfsStack.Push(succ);
+ }
+ }
+
+ List<Block/*!*/> newBlocks = new List<Block/*!*/>();
+ foreach (Block/*!*/ b in impl.Blocks) {
+ Contract.Assert(b != null);
+ if (visitedBlocks.Contains(b) && !removedBlocks.Contains(b)) {
+ newBlocks.Add(b);
+ }
+ }
+ impl.Blocks = newBlocks;
+ foreach (Block b in impl.Blocks)
+ {
+ if (b.TransferCmd is ReturnCmd) continue;
+ GotoCmd gotoCmd = b.TransferCmd as GotoCmd;
+ gotoCmd.labelNames = new List<string>();
+ foreach (Block succ in gotoCmd.labelTargets)
+ {
+ gotoCmd.labelNames.Add(succ.Label);
+ }
+ }
+ // Console.WriteLine("Final number of blocks = {0}", impl.Blocks.Count);
+ return impl;
+ }
+ }
+
+ public class LiveVariableAnalysis {
+ public static void ClearLiveVariables(Implementation impl) {
+ Contract.Requires(impl != null);
+ foreach (Block/*!*/ block in impl.Blocks) {
+ Contract.Assert(block != null);
+ block.liveVarsBefore = null;
+ }
+ }
+
+ public static void ComputeLiveVariables(Implementation impl) {
+ Contract.Requires(impl != null);
+ Microsoft.Boogie.Helpers.ExtraTraceInformation("Starting live variable analysis");
+ Graph<Block> dag = new Graph<Block>();
+ dag.AddSource(cce.NonNull(impl.Blocks[0])); // there is always at least one node in the graph
+ foreach (Block b in impl.Blocks) {
+ GotoCmd gtc = b.TransferCmd as GotoCmd;
+ if (gtc != null) {
+ Contract.Assume(gtc.labelTargets != null);
+ foreach (Block/*!*/ dest in gtc.labelTargets) {
+ Contract.Assert(dest != null);
+ dag.AddEdge(dest, b);
+ }
+ }
+ }
+
+ IEnumerable<Block> sortedNodes;
+ if (CommandLineOptions.Clo.ModifyTopologicalSorting) {
+ sortedNodes = dag.TopologicalSort(true);
+ } else {
+ sortedNodes = dag.TopologicalSort();
+ }
+ foreach (Block/*!*/ block in sortedNodes) {
+ Contract.Assert(block != null);
+ HashSet<Variable/*!*/>/*!*/ liveVarsAfter = new HashSet<Variable/*!*/>();
+
+ // The injected assumption variables should always be considered to be live.
+ foreach (var v in impl.InjectedAssumptionVariables.Concat(impl.DoomedInjectedAssumptionVariables))
+ {
+ liveVarsAfter.Add(v);
+ }
+
+ if (block.TransferCmd is GotoCmd) {
+ GotoCmd gotoCmd = (GotoCmd)block.TransferCmd;
+ if (gotoCmd.labelTargets != null) {
+ foreach (Block/*!*/ succ in gotoCmd.labelTargets) {
+ Contract.Assert(succ != null);
+ Contract.Assert(succ.liveVarsBefore != null);
+ liveVarsAfter.UnionWith(succ.liveVarsBefore);
+ }
+ }
+ }
+
+ List<Cmd> cmds = block.Cmds;
+ int len = cmds.Count;
+ for (int i = len - 1; i >= 0; i--) {
+ if (cmds[i] is CallCmd) {
+ Procedure/*!*/ proc = cce.NonNull(cce.NonNull((CallCmd/*!*/)cmds[i]).Proc);
+ if (InterProcGenKill.HasSummary(proc.Name)) {
+ liveVarsAfter =
+ InterProcGenKill.PropagateLiveVarsAcrossCall(cce.NonNull((CallCmd/*!*/)cmds[i]), liveVarsAfter);
+ continue;
+ }
+ }
+ Propagate(cmds[i], liveVarsAfter);
+ }
+
+ block.liveVarsBefore = liveVarsAfter;
+
+ }
+ }
+
+ // perform in place update of liveSet
+ public static void Propagate(Cmd cmd, HashSet<Variable/*!*/>/*!*/ liveSet) {
+ Contract.Requires(cmd != null);
+ Contract.Requires(cce.NonNullElements(liveSet));
+ if (cmd is AssignCmd) {
+ AssignCmd/*!*/ assignCmd = (AssignCmd)cce.NonNull(cmd);
+ // I must first iterate over all the targets and remove the live ones.
+ // After the removals are done, I must add the variables referred on
+ // the right side of the removed targets
+
+ AssignCmd simpleAssignCmd = assignCmd.AsSimpleAssignCmd;
+ HashSet<int> indexSet = new HashSet<int>();
+ int index = 0;
+ foreach (AssignLhs/*!*/ lhs in simpleAssignCmd.Lhss) {
+ Contract.Assert(lhs != null);
+ SimpleAssignLhs salhs = lhs as SimpleAssignLhs;
+ Contract.Assert(salhs != null);
+ Variable var = salhs.DeepAssignedVariable;
+ if (var != null && liveSet.Contains(var)) {
+ indexSet.Add(index);
+ liveSet.Remove(var);
+ }
+ index++;
+ }
+ index = 0;
+ foreach (Expr/*!*/ expr in simpleAssignCmd.Rhss) {
+ Contract.Assert(expr != null);
+ if (indexSet.Contains(index)) {
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(expr);
+ liveSet.UnionWith(collector.usedVars);
+ }
+ index++;
+ }
+ } else if (cmd is HavocCmd) {
+ HavocCmd/*!*/ havocCmd = (HavocCmd)cmd;
+ foreach (IdentifierExpr/*!*/ expr in havocCmd.Vars) {
+ Contract.Assert(expr != null);
+ if (expr.Decl != null && !(QKeyValue.FindBoolAttribute(expr.Decl.Attributes, "assumption") && expr.Decl.Name.StartsWith("a##cached##"))) {
+ liveSet.Remove(expr.Decl);
+ }
+ }
+ } else if (cmd is PredicateCmd) {
+ Contract.Assert((cmd is AssertCmd || cmd is AssumeCmd));
+ PredicateCmd/*!*/ predicateCmd = (PredicateCmd)cce.NonNull(cmd);
+ if (predicateCmd.Expr is LiteralExpr) {
+ LiteralExpr le = (LiteralExpr)predicateCmd.Expr;
+ if (le.IsFalse) {
+ liveSet.Clear();
+ }
+ } else {
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(predicateCmd.Expr);
+ liveSet.UnionWith(collector.usedVars);
+ }
+ } else if (cmd is CommentCmd) {
+ // comments are just for debugging and don't affect verification
+ } else if (cmd is SugaredCmd) {
+ SugaredCmd/*!*/ sugCmd = (SugaredCmd)cce.NonNull(cmd);
+ Propagate(sugCmd.Desugaring, liveSet);
+ } else if (cmd is StateCmd) {
+ StateCmd/*!*/ stCmd = (StateCmd)cce.NonNull(cmd);
+ List<Cmd>/*!*/ cmds = cce.NonNull(stCmd.Cmds);
+ int len = cmds.Count;
+ for (int i = len - 1; i >= 0; i--) {
+ Propagate(cmds[i], liveSet);
+ }
+ foreach (Variable/*!*/ v in stCmd.Locals) {
+ Contract.Assert(v != null);
+ liveSet.Remove(v);
+ }
+ } else {
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+ }
+ }
+
+ /*
+ // An idempotent semiring interface
+ abstract public class Weight {
+ abstract public Weight! one();
+ abstract public Weight! zero();
+ abstract public Weight! extend(Weight! w1, Weight! w2);
+ abstract public Weight! combine(Weight! w1, Weight! w2);
+ abstract public Weight! isEqual(Weight! w);
+ abstract public Weight! projectLocals()
+ }
+ */
+
+ // Weight domain for LiveVariableAnalysis (Gen/Kill)
+
+ public class GenKillWeight {
+ // lambda S. (S - kill) union gen
+ HashSet<Variable/*!*/>/*!*/ gen;
+ HashSet<Variable/*!*/>/*!*/ kill;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(gen));
+ Contract.Invariant(cce.NonNullElements(kill));
+ Contract.Invariant(oneWeight != null);
+ Contract.Invariant(zeroWeight != null);
+ }
+
+ bool isZero;
+
+ public static GenKillWeight/*!*/ oneWeight = new GenKillWeight(new HashSet<Variable/*!*/>(), new HashSet<Variable/*!*/>());
+ public static GenKillWeight/*!*/ zeroWeight = new GenKillWeight();
+
+ // initializes to zero
+ public GenKillWeight() {
+ this.isZero = true;
+ this.gen = new HashSet<Variable/*!*/>();
+ this.kill = new HashSet<Variable/*!*/>();
+ }
+
+ public GenKillWeight(HashSet<Variable/*!*/> gen, HashSet<Variable/*!*/> kill) {
+ Contract.Requires(cce.NonNullElements(gen));
+ Contract.Requires(cce.NonNullElements(kill));
+ Contract.Assert(gen != null);
+ Contract.Assert(kill != null);
+ this.gen = gen;
+ this.kill = kill;
+ this.isZero = false;
+ }
+
+ public static GenKillWeight one() {
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ return oneWeight;
+ }
+
+ public static GenKillWeight zero() {
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ return zeroWeight;
+ }
+
+ public static GenKillWeight extend(GenKillWeight w1, GenKillWeight w2) {
+ Contract.Requires(w2 != null);
+ Contract.Requires(w1 != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ if (w1.isZero || w2.isZero)
+ return zero();
+
+ HashSet<Variable> t = new HashSet<Variable>(w2.gen);
+ t.ExceptWith(w1.kill);
+ HashSet<Variable> g = new HashSet<Variable>(w1.gen);
+ g.UnionWith(t);
+ HashSet<Variable> k = new HashSet<Variable>(w1.kill);
+ k.UnionWith(w2.kill);
+ return new GenKillWeight(g, k);
+ //return new GenKillWeight(w1.gen.Union(w2.gen.Difference(w1.kill)), w1.kill.Union(w2.kill));
+ }
+
+ public static GenKillWeight combine(GenKillWeight w1, GenKillWeight w2) {
+ Contract.Requires(w2 != null);
+ Contract.Requires(w1 != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ if (w1.isZero)
+ return w2;
+ if (w2.isZero)
+ return w1;
+
+ HashSet<Variable> g = new HashSet<Variable>(w1.gen);
+ g.UnionWith(w2.gen);
+ HashSet<Variable> k = new HashSet<Variable>(w1.kill);
+ k.IntersectWith(w2.kill);
+ return new GenKillWeight(g, k);
+ //return new GenKillWeight(w1.gen.Union(w2.gen), w1.kill.Intersection(w2.kill));
+ }
+
+ public static GenKillWeight projectLocals(GenKillWeight w) {
+ Contract.Requires(w != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ HashSet<Variable/*!*/> gen = new HashSet<Variable>();
+ foreach (Variable v in w.gen)
+ {
+ if (isGlobal(v))
+ gen.Add(v);
+ }
+ HashSet<Variable/*!*/> kill = new HashSet<Variable>();
+ foreach (Variable v in w.kill)
+ {
+ if (isGlobal(v))
+ kill.Add(v);
+ }
+
+ return new GenKillWeight(gen, kill);
+ }
+
+ public static bool isEqual(GenKillWeight w1, GenKillWeight w2) {
+ Contract.Requires(w2 != null);
+ Contract.Requires(w1 != null);
+ if (w1.isZero)
+ return w2.isZero;
+ if (w2.isZero)
+ return w1.isZero;
+
+ return (w1.gen.Equals(w2.gen) && w1.kill.Equals(w2.kill));
+ }
+
+ private static bool isGlobal(Variable v) {
+ Contract.Requires(v != null);
+ return (v is GlobalVariable);
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return string.Format("({0},{1})", gen.ToString(), kill.ToString());
+ }
+
+ public HashSet<Variable/*!*/>/*!*/ getLiveVars() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
+ return gen;
+ }
+
+ public HashSet<Variable/*!*/>/*!*/ getLiveVars(HashSet<Variable/*!*/>/*!*/ lv) {
+ Contract.Requires(cce.NonNullElements(lv));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
+ HashSet<Variable> temp = new HashSet<Variable>(lv);
+ temp.ExceptWith(kill);
+ temp.UnionWith(gen);
+ return temp;
+ }
+
+ }
+
+ public class ICFG {
+ public Graph<Block/*!*/>/*!*/ graph;
+ // Map from procedure to the list of blocks that call that procedure
+ public Dictionary<string/*!*/, List<Block/*!*/>/*!*/>/*!*/ procsCalled;
+ public HashSet<Block/*!*/>/*!*/ nodes;
+ public Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>/*!*/ succEdges;
+ public Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>/*!*/ predEdges;
+ private Dictionary<Block/*!*/, int>/*!*/ priority;
+
+ public HashSet<Block/*!*/>/*!*/ srcNodes;
+ public HashSet<Block/*!*/>/*!*/ exitNodes;
+
+ public Dictionary<Block/*!*/, GenKillWeight/*!*/>/*!*/ weightBefore;
+ public Dictionary<Block/*!*/, GenKillWeight/*!*/>/*!*/ weightAfter;
+ public Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ liveVarsAfter;
+ public Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ liveVarsBefore;
+
+ public GenKillWeight/*!*/ summary;
+ public Implementation/*!*/ impl;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(graph.Nodes));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(procsCalled));
+ Contract.Invariant(cce.NonNullElements(nodes));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(succEdges));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(predEdges));
+ Contract.Invariant(priority != null);
+ Contract.Invariant(cce.NonNullElements(srcNodes));
+ Contract.Invariant(cce.NonNullElements(exitNodes));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(weightBefore));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(weightAfter));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(liveVarsAfter));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(liveVarsBefore));
+ Contract.Invariant(summary != null);
+ Contract.Invariant(impl != null);
+ }
+
+
+ [NotDelayed]
+ public ICFG(Implementation impl) {
+ Contract.Requires(impl != null);
+ this.graph = new Graph<Block/*!*/>();
+ this.procsCalled = new Dictionary<string/*!*/, List<Block/*!*/>/*!*/>();
+ this.nodes = new HashSet<Block/*!*/>();
+ this.succEdges = new Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>();
+ this.predEdges = new Dictionary<Block/*!*/, HashSet<Block/*!*/>/*!*/>();
+
+ this.priority = new Dictionary<Block/*!*/, int>();
+
+ this.srcNodes = new HashSet<Block/*!*/>();
+ this.exitNodes = new HashSet<Block/*!*/>();
+
+ this.weightBefore = new Dictionary<Block/*!*/, GenKillWeight/*!*/>();
+ this.weightAfter = new Dictionary<Block/*!*/, GenKillWeight/*!*/>();
+ this.liveVarsAfter = new Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>();
+ this.liveVarsBefore = new Dictionary<Block/*!*/, HashSet<Variable/*!*/>/*!*/>();
+
+ summary = GenKillWeight.zero();
+ this.impl = impl;
+
+ Initialize(impl);
+
+ }
+
+ private void Initialize(Implementation impl) {
+ Contract.Requires(impl != null);
+ addSource(impl.Blocks[0]);
+ graph.AddSource(impl.Blocks[0]);
+
+ foreach (Block/*!*/ b in impl.Blocks) {
+ Contract.Assert(b != null);
+ if (b.TransferCmd is ReturnCmd) {
+ exitNodes.Add(b);
+ } else {
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ Contract.Assert(gc != null);
+ Contract.Assert(gc.labelTargets != null);
+ foreach (Block/*!*/ t in gc.labelTargets) {
+ Contract.Assert(t != null);
+ addEdge(b, t);
+ graph.AddEdge(b, t);
+ }
+ }
+
+ weightBefore[b] = GenKillWeight.zero();
+ weightAfter[b] = GenKillWeight.zero();
+
+ foreach (Cmd/*!*/ c in b.Cmds) {
+ Contract.Assert(c != null);
+ if (c is CallCmd) {
+ CallCmd/*!*/ cc = cce.NonNull((CallCmd/*!*/)c);
+ Contract.Assert(cc.Proc != null);
+ string/*!*/ procName = cc.Proc.Name;
+ Contract.Assert(procName != null);
+ if (!procsCalled.ContainsKey(procName)) {
+ procsCalled.Add(procName, new List<Block/*!*/>());
+ }
+ procsCalled[procName].Add(b);
+ }
+ }
+ }
+
+ List<Block>/*!*/ sortedNodes;
+ bool acyclic;
+
+ graph.TarjanTopSort(out acyclic, out sortedNodes);
+
+ if (!acyclic) {
+ Console.WriteLine("Warning: graph is not a dag");
+ }
+
+ int num = sortedNodes.Count;
+ foreach (Block/*!*/ b in sortedNodes) {
+ Contract.Assert(b != null);
+ priority.Add(b, num);
+ num--;
+ }
+
+ }
+
+ public int getPriority(Block b) {
+ Contract.Requires(b != null);
+ if (priority.ContainsKey(b))
+ return priority[b];
+ return Int32.MaxValue;
+ }
+
+ private void addSource(Block b) {
+ Contract.Requires(b != null);
+ registerNode(b);
+ this.srcNodes.Add(b);
+ }
+
+ private void addExit(Block b) {
+ Contract.Requires(b != null);
+ registerNode(b);
+ this.exitNodes.Add(b);
+ }
+
+ private void registerNode(Block b) {
+ Contract.Requires(b != null);
+ if (!succEdges.ContainsKey(b)) {
+ succEdges.Add(b, new HashSet<Block/*!*/>());
+ }
+
+ if (!predEdges.ContainsKey(b)) {
+ predEdges.Add(b, new HashSet<Block/*!*/>());
+ }
+
+ nodes.Add(b);
+ }
+
+ private void addEdge(Block src, Block tgt) {
+ Contract.Requires(tgt != null);
+ Contract.Requires(src != null);
+ registerNode(src);
+ registerNode(tgt);
+
+ succEdges[src].Add(tgt);
+ predEdges[tgt].Add(src);
+ }
+
+
+ }
+
+ // Interprocedural Gen/Kill Analysis
+ public class InterProcGenKill {
+ Program/*!*/ program;
+ Dictionary<string/*!*/, ICFG/*!*/>/*!*/ procICFG;
+ Dictionary<string/*!*/, Procedure/*!*/>/*!*/ name2Proc;
+ Dictionary<string/*!*/, List<WorkItem/*!*/>/*!*/>/*!*/ callers;
+ Graph<string/*!*/>/*!*/ callGraph;
+ Dictionary<string/*!*/, int>/*!*/ procPriority;
+ int maxBlocksInProc;
+
+ WorkList/*!*/ workList;
+
+ Implementation/*!*/ mainImpl;
+
+ static Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ varsLiveAtExit = new Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>();
+ static Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>/*!*/ varsLiveAtEntry = new Dictionary<string/*!*/, HashSet<Variable/*!*/>/*!*/>();
+ static Dictionary<string/*!*/, GenKillWeight/*!*/>/*!*/ varsLiveSummary = new Dictionary<string/*!*/, GenKillWeight/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(workList != null);
+ Contract.Invariant(mainImpl != null);
+ Contract.Invariant(program != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(procICFG));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(name2Proc));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(callers) &&
+ Contract.ForAll(callers.Values, v => cce.NonNullElements(v)));
+ Contract.Invariant(cce.NonNullElements(callGraph.Nodes));
+ Contract.Invariant(procPriority != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(varsLiveAtEntry));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(varsLiveAtExit) &&
+ Contract.ForAll(varsLiveAtExit.Values, v => cce.NonNullElements(v)));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(varsLiveSummary));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(weightCacheAfterCall));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(weightCacheBeforeCall));
+ }
+
+
+ [NotDelayed]
+ public InterProcGenKill(Implementation impl, Program program) {
+ Contract.Requires(program != null);
+ Contract.Requires(impl != null);
+ this.program = program;
+ procICFG = new Dictionary<string/*!*/, ICFG/*!*/>();
+ name2Proc = new Dictionary<string/*!*/, Procedure/*!*/>();
+ workList = new WorkList();
+ this.callers = new Dictionary<string/*!*/, List<WorkItem/*!*/>/*!*/>();
+ this.callGraph = new Graph<string/*!*/>();
+ this.procPriority = new Dictionary<string/*!*/, int>();
+ this.maxBlocksInProc = 0;
+ this.mainImpl = impl;
+
+ Dictionary<string/*!*/, Implementation/*!*/>/*!*/ name2Impl = new Dictionary<string/*!*/, Implementation/*!*/>();
+ varsLiveAtExit.Clear();
+ varsLiveAtEntry.Clear();
+ varsLiveSummary.Clear();
+
+ foreach (var decl in program.TopLevelDeclarations) {
+ Contract.Assert(decl != null);
+ if (decl is Implementation) {
+ Implementation/*!*/ imp = (Implementation/*!*/)cce.NonNull(decl);
+ name2Impl[imp.Name] = imp;
+ } else if (decl is Procedure) {
+ Procedure/*!*/ proc = cce.NonNull(decl as Procedure);
+ name2Proc[proc.Name] = proc;
+ }
+ }
+
+ ICFG/*!*/ mainICFG = new ICFG(mainImpl);
+ Contract.Assert(mainICFG != null);
+ procICFG.Add(mainICFG.impl.Name, mainICFG);
+ callGraph.AddSource(mainICFG.impl.Name);
+
+ List<ICFG/*!*/>/*!*/ procsToConsider = new List<ICFG/*!*/>();
+ procsToConsider.Add(mainICFG);
+
+ while (procsToConsider.Count != 0) {
+ ICFG/*!*/ p = procsToConsider[0];
+ Contract.Assert(p != null);
+ procsToConsider.RemoveAt(0);
+
+ foreach (string/*!*/ callee in p.procsCalled.Keys) {
+ Contract.Assert(callee != null);
+ if (!name2Impl.ContainsKey(callee))
+ continue;
+
+ callGraph.AddEdge(p.impl.Name, callee);
+
+ if (maxBlocksInProc < p.nodes.Count) {
+ maxBlocksInProc = p.nodes.Count;
+ }
+
+ if (!callers.ContainsKey(callee)) {
+ callers.Add(callee, new List<WorkItem/*!*/>());
+ }
+ foreach (Block/*!*/ b in p.procsCalled[callee]) {
+ Contract.Assert(b != null);
+ callers[callee].Add(new WorkItem(p, b));
+ }
+
+ if (procICFG.ContainsKey(callee))
+ continue;
+ ICFG/*!*/ ncfg = new ICFG(name2Impl[callee]);
+ Contract.Assert(ncfg != null);
+ procICFG.Add(callee, ncfg);
+ procsToConsider.Add(ncfg);
+ }
+ }
+
+ bool acyclic;
+ List<string>/*!*/ sortedNodes;
+ callGraph.TarjanTopSort(out acyclic, out sortedNodes);
+
+ Contract.Assert(acyclic);
+
+ int cnt = 0;
+ for (int i = sortedNodes.Count - 1; i >= 0; i--) {
+ string s = sortedNodes[i];
+ if (s == null)
+ continue;
+ procPriority.Add(s, cnt);
+ cnt++;
+ }
+
+ }
+
+ public static HashSet<Variable/*!*/>/*!*/ GetVarsLiveAtExit(Implementation impl, Program prog) {
+ Contract.Requires(prog != null);
+ Contract.Requires(impl != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
+ if (varsLiveAtExit.ContainsKey(impl.Name)) {
+ return varsLiveAtExit[impl.Name];
+ }
+ // Return default: all globals and out params
+ HashSet<Variable/*!*/>/*!*/ lv = new HashSet<Variable/*!*/>();
+ foreach (Variable/*!*/ v in prog.GlobalVariables) {
+ Contract.Assert(v != null);
+ lv.Add(v);
+ }
+ foreach (Variable/*!*/ v in impl.OutParams) {
+ Contract.Assert(v != null);
+ lv.Add(v);
+ }
+ return lv;
+ }
+
+ public static HashSet<Variable/*!*/>/*!*/ GetVarsLiveAtEntry(Implementation impl, Program prog) {
+ Contract.Requires(prog != null);
+ Contract.Requires(impl != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
+ if (varsLiveAtEntry.ContainsKey(impl.Name)) {
+ return varsLiveAtEntry[impl.Name];
+ }
+ // Return default: all globals and in params
+ HashSet<Variable/*!*/>/*!*/ lv = new HashSet<Variable/*!*/>();
+ foreach (Variable/*!*/ v in prog.GlobalVariables) {
+ Contract.Assert(v != null);
+ lv.Add(v);
+ }
+ foreach (Variable/*!*/ v in impl.InParams) {
+ Contract.Assert(v != null);
+ lv.Add(v);
+ }
+ return lv;
+ }
+
+ public static bool HasSummary(string name) {
+ Contract.Requires(name != null);
+ return varsLiveSummary.ContainsKey(name);
+ }
+
+ public static HashSet<Variable/*!*/>/*!*/ PropagateLiveVarsAcrossCall(CallCmd cmd, HashSet<Variable/*!*/>/*!*/ lvAfter) {
+ Contract.Requires(cmd != null);
+ Contract.Requires(cce.NonNullElements(lvAfter));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<HashSet<Variable>>()));
+ Procedure/*!*/ proc = cce.NonNull(cmd.Proc);
+ if (varsLiveSummary.ContainsKey(proc.Name)) {
+ GenKillWeight/*!*/ w1 = getWeightBeforeCall(cmd);
+ Contract.Assert(w1 != null);
+ GenKillWeight/*!*/ w2 = varsLiveSummary[proc.Name];
+ Contract.Assert(w2 != null);
+ GenKillWeight/*!*/ w3 = getWeightAfterCall(cmd);
+ Contract.Assert(w3 != null);
+ GenKillWeight/*!*/ w = GenKillWeight.extend(w1, GenKillWeight.extend(w2, w3));
+ Contract.Assert(w != null);
+ return w.getLiveVars(lvAfter);
+ }
+ HashSet<Variable/*!*/>/*!*/ ret = new HashSet<Variable/*!*/>();
+ ret.UnionWith(lvAfter);
+ LiveVariableAnalysis.Propagate(cmd, ret);
+ return ret;
+ }
+
+ class WorkItem {
+ public ICFG/*!*/ cfg;
+ public Block/*!*/ block;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cfg != null);
+ Contract.Invariant(block != null);
+ }
+
+
+ public WorkItem(ICFG cfg, Block block) {
+ Contract.Requires(block != null);
+ Contract.Requires(cfg != null);
+ this.cfg = cfg;
+ this.block = block;
+ }
+
+ public GenKillWeight getWeightAfter() {
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ return cfg.weightAfter[block];
+ }
+
+ public bool setWeightBefore(GenKillWeight w) {
+ Contract.Requires(w != null);
+ GenKillWeight/*!*/ prev = cfg.weightBefore[block];
+ Contract.Assert(prev != null);
+ GenKillWeight/*!*/ curr = GenKillWeight.combine(w, prev);
+ Contract.Assert(curr != null);
+ if (GenKillWeight.isEqual(prev, curr))
+ return false;
+ cfg.weightBefore[block] = curr;
+ return true;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object other) {
+ WorkItem/*!*/ wi = (WorkItem/*!*/)cce.NonNull(other);
+ return (wi.cfg == cfg && wi.block == block);
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return 0;
+ }
+
+ public string getLabel() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return cfg.impl.Name + "::" + block.Label;
+ }
+
+ }
+
+ private void AddToWorkList(WorkItem wi) {
+ Contract.Requires(wi != null);
+ int i = procPriority[wi.cfg.impl.Name];
+ int j = wi.cfg.getPriority(wi.block);
+ int priority = (i * maxBlocksInProc) + j;
+
+ workList.Add(wi, priority);
+ }
+
+ private void AddToWorkListReverse(WorkItem wi) {
+ Contract.Requires(wi != null);
+ int i = procPriority[wi.cfg.impl.Name];
+ int j = wi.cfg.getPriority(wi.block);
+ int priority = (procPriority.Count - i) * maxBlocksInProc + j;
+ workList.Add(wi, priority);
+ }
+
+ class WorkList {
+ SortedList<int, int>/*!*/ priorities;
+ HashSet<string/*!*/>/*!*/ labels;
+
+ Dictionary<int, List<WorkItem/*!*/>/*!*/>/*!*/ workList;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(priorities != null);
+ Contract.Invariant(cce.NonNullElements(labels));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(workList) &&
+ Contract.ForAll(workList.Values, v => cce.NonNullElements(v)));
+ }
+
+
+ public WorkList() {
+ labels = new HashSet<string/*!*/>();
+ priorities = new SortedList<int, int>();
+ workList = new Dictionary<int, List<WorkItem/*!*/>/*!*/>();
+ }
+
+ public void Add(WorkItem wi, int priority) {
+ Contract.Requires(wi != null);
+ string/*!*/ lab = wi.getLabel();
+ Contract.Assert(lab != null);
+ if (labels.Contains(lab)) {
+ // Already on worklist
+ return;
+ }
+ labels.Add(lab);
+ if (!workList.ContainsKey(priority)) {
+ workList.Add(priority, new List<WorkItem/*!*/>());
+ }
+ workList[priority].Add(wi);
+ if (!priorities.ContainsKey(priority)) {
+ priorities.Add(priority, 0);
+ }
+
+ priorities[priority] = priorities[priority] + 1;
+ }
+
+ public WorkItem Get() {
+ Contract.Ensures(Contract.Result<WorkItem>() != null);
+ // Get minimum priority
+ int p = cce.NonNull(priorities.Keys)[0];
+ priorities[p] = priorities[p] - 1;
+ if (priorities[p] == 0) {
+ priorities.Remove(p);
+ }
+
+ // Get a WI with this priority
+ WorkItem/*!*/ wi = workList[p][0];
+ Contract.Assert(wi != null);
+ workList[p].RemoveAt(0);
+
+ // update labels
+ labels.Remove(wi.getLabel());
+ return wi;
+ }
+
+ public int Count {
+ get {
+ return labels.Count;
+ }
+ }
+ }
+
+ private GenKillWeight getSummary(CallCmd cmd) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ Contract.Assert(cmd.Proc != null);
+ string/*!*/ procName = cmd.Proc.Name;
+ Contract.Assert(procName != null);
+ if (procICFG.ContainsKey(procName)) {
+ ICFG/*!*/ cfg = procICFG[procName];
+ Contract.Assert(cfg != null);
+ return GenKillWeight.projectLocals(cfg.summary);
+ }
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ public static void ComputeLiveVars(Implementation impl, Program/*!*/ prog) {
+ Contract.Requires(prog != null);
+ Contract.Requires(impl != null);
+ InterProcGenKill/*!*/ ipgk = new InterProcGenKill(impl, prog);
+ Contract.Assert(ipgk != null);
+ ipgk.Compute();
+ }
+
+ public void Compute() {
+ // Put all exit nodes in the worklist
+ foreach (ICFG/*!*/ cfg in procICFG.Values) {
+ Contract.Assert(cfg != null);
+ foreach (Block/*!*/ eb in cfg.exitNodes) {
+ Contract.Assert(eb != null);
+ WorkItem/*!*/ wi = new WorkItem(cfg, eb);
+ Contract.Assert(wi != null);
+ cfg.weightAfter[eb] = GenKillWeight.one();
+ AddToWorkList(wi);
+ }
+ }
+
+ while (workList.Count != 0) {
+ WorkItem/*!*/ wi = workList.Get();
+ Contract.Assert(wi != null);
+ process(wi);
+ }
+
+ // Propagate LV to all procedures
+ foreach (ICFG/*!*/ cfg in procICFG.Values) {
+ Contract.Assert(cfg != null);
+ foreach (Block/*!*/ b in cfg.nodes) {
+ Contract.Assert(b != null);
+ cfg.liveVarsAfter.Add(b, new HashSet<Variable/*!*/>());
+ cfg.liveVarsBefore.Add(b, new HashSet<Variable/*!*/>());
+ }
+ }
+
+ ICFG/*!*/ mainCfg = procICFG[mainImpl.Name];
+ Contract.Assert(mainCfg != null);
+ foreach (Block/*!*/ eb in mainCfg.exitNodes) {
+ Contract.Assert(eb != null);
+ WorkItem/*!*/ wi = new WorkItem(mainCfg, eb);
+ Contract.Assert(wi != null);
+ AddToWorkListReverse(wi);
+ }
+
+ while (workList.Count != 0) {
+ WorkItem/*!*/ wi = workList.Get();
+ Contract.Assert(wi != null);
+ processLV(wi);
+ }
+
+ // Set live variable info
+ foreach (ICFG/*!*/ cfg in procICFG.Values) {
+ Contract.Assert(cfg != null);
+ HashSet<Variable/*!*/>/*!*/ lv = new HashSet<Variable/*!*/>();
+ foreach (Block/*!*/ eb in cfg.exitNodes) {
+ Contract.Assert(eb != null);
+ lv.UnionWith(cfg.liveVarsAfter[eb]);
+ }
+ varsLiveAtExit.Add(cfg.impl.Name, lv);
+ lv = new HashSet<Variable/*!*/>();
+ foreach (Block/*!*/ eb in cfg.srcNodes) {
+ Contract.Assert(eb != null);
+ lv.UnionWith(cfg.liveVarsBefore[eb]);
+ }
+ varsLiveAtEntry.Add(cfg.impl.Name, lv);
+ varsLiveSummary.Add(cfg.impl.Name, cfg.summary);
+ }
+
+ /*
+ foreach(Block/*!*/
+ /* b in mainImpl.Blocks){
+Contract.Assert(b != null);
+//Set<Variable!> lv = cfg.weightBefore[b].getLiveVars();
+b.liveVarsBefore = procICFG[mainImpl.Name].liveVarsAfter[b];
+//foreach(GlobalVariable/*!*/
+ /* v in program.GlobalVariables){Contract.Assert(v != null);
+// b.liveVarsBefore.Add(v);
+//}
+}
+*/
+ }
+
+ // Called when summaries have already been computed
+ private void processLV(WorkItem wi) {
+ Contract.Requires(wi != null);
+ ICFG/*!*/ cfg = wi.cfg;
+ Contract.Assert(cfg != null);
+ Block/*!*/ block = wi.block;
+ Contract.Assert(block != null);
+ HashSet<Variable/*!*/>/*!*/ lv = cfg.liveVarsAfter[block];
+ Contract.Assert(cce.NonNullElements(lv));
+ // Propagate backwards in the block
+ HashSet<Variable/*!*/>/*!*/ prop = new HashSet<Variable/*!*/>();
+ prop.UnionWith(lv);
+ for (int i = block.Cmds.Count - 1; i >= 0; i--) {
+ Cmd/*!*/ cmd = block.Cmds[i];
+ Contract.Assert(cmd != null);
+ if (cmd is CallCmd) {
+ string/*!*/ procName = cce.NonNull(cce.NonNull((CallCmd)cmd).Proc).Name;
+ Contract.Assert(procName != null);
+ if (procICFG.ContainsKey(procName)) {
+ ICFG/*!*/ callee = procICFG[procName];
+ Contract.Assert(callee != null);
+ // Inter propagation
+ // Remove local variables; add return variables
+ HashSet<Variable/*!*/>/*!*/ elv = new HashSet<Variable/*!*/>();
+ foreach (Variable/*!*/ v in prop) {
+ Contract.Assert(v != null);
+ if (v is GlobalVariable)
+ elv.Add(v);
+ }
+ foreach (Variable/*!*/ v in callee.impl.OutParams) {
+ Contract.Assert(v != null);
+ elv.Add(v);
+ }
+
+ foreach (Block/*!*/ eb in callee.exitNodes) {
+ Contract.Assert(eb != null);
+ callee.liveVarsAfter[eb].UnionWith(elv);
+ // TODO: check if modified before inserting
+ AddToWorkListReverse(new WorkItem(callee, eb));
+ }
+
+ // Continue with intra propagation
+ GenKillWeight/*!*/ summary = getWeightCall(cce.NonNull((CallCmd/*!*/)cmd));
+ prop = summary.getLiveVars(prop);
+ } else {
+ LiveVariableAnalysis.Propagate(cmd, prop);
+ }
+ } else {
+ LiveVariableAnalysis.Propagate(cmd, prop);
+ }
+ }
+
+ cfg.liveVarsBefore[block].UnionWith(prop);
+
+ foreach (Block/*!*/ b in cfg.predEdges[block]) {
+ Contract.Assert(b != null);
+ HashSet<Variable/*!*/>/*!*/ prev = cfg.liveVarsAfter[b];
+ Contract.Assert(cce.NonNullElements(prev));
+ HashSet<Variable/*!*/>/*!*/ curr = new HashSet<Variable>(prev);
+ curr.UnionWith(cfg.liveVarsBefore[block]);
+ Contract.Assert(cce.NonNullElements(curr));
+ if (curr.Count != prev.Count) {
+ cfg.liveVarsAfter[b] = curr;
+ AddToWorkListReverse(new WorkItem(cfg, b));
+ }
+ }
+ }
+
+ private void process(WorkItem wi) {
+ Contract.Requires(wi != null);
+ GenKillWeight/*!*/ w = wi.getWeightAfter();
+ Contract.Assert(w != null);
+
+ for (int i = wi.block.Cmds.Count - 1; i >= 0; i--) {
+ Cmd/*!*/ c = wi.block.Cmds[i];
+ Contract.Assert(c != null);
+ if (c is CallCmd && procICFG.ContainsKey(cce.NonNull(cce.NonNull((CallCmd)c).Proc).Name)) {
+ w = GenKillWeight.extend(getWeightCall(cce.NonNull((CallCmd)c)), w);
+ } else {
+ GenKillWeight/*!*/ cweight = getWeight(c, wi.cfg.impl, program);
+ Contract.Assert(cweight != null);
+ w = GenKillWeight.extend(cweight, w);
+ }
+ }
+
+ bool change = wi.setWeightBefore(w);
+
+ if (change && wi.cfg.srcNodes.Contains(wi.block)) {
+ GenKillWeight/*!*/ prev = wi.cfg.summary;
+ Contract.Assert(prev != null);
+ GenKillWeight/*!*/ curr = GenKillWeight.combine(prev, wi.cfg.weightBefore[wi.block]);
+ Contract.Assert(curr != null);
+ if (!GenKillWeight.isEqual(prev, curr)) {
+ wi.cfg.summary = curr;
+ // push callers onto the worklist
+ if (callers.ContainsKey(wi.cfg.impl.Name)) {
+ foreach (WorkItem/*!*/ caller in callers[wi.cfg.impl.Name]) {
+ Contract.Assert(caller != null);
+ AddToWorkList(caller);
+ }
+ }
+ }
+ }
+
+ foreach (Block/*!*/ b in wi.cfg.predEdges[wi.block]) {
+ Contract.Assert(b != null);
+ GenKillWeight/*!*/ prev = wi.cfg.weightAfter[b];
+ Contract.Assert(prev != null);
+ GenKillWeight/*!*/ curr = GenKillWeight.combine(prev, w);
+ Contract.Assert(curr != null);
+ if (!GenKillWeight.isEqual(prev, curr)) {
+ wi.cfg.weightAfter[b] = curr;
+ AddToWorkList(new WorkItem(wi.cfg, b));
+ }
+ }
+
+ }
+
+ static Dictionary<Cmd/*!*/, GenKillWeight/*!*/>/*!*/ weightCache = new Dictionary<Cmd/*!*/, GenKillWeight/*!*/>();
+
+ private static GenKillWeight getWeight(Cmd cmd) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ return getWeight(cmd, null, null);
+ }
+
+ private GenKillWeight getWeightCall(CallCmd cmd) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ GenKillWeight/*!*/ w1 = getWeightBeforeCall(cmd);
+ GenKillWeight/*!*/ w2 = getSummary(cmd);
+ GenKillWeight/*!*/ w3 = getWeightAfterCall(cmd);
+ Contract.Assert(w1 != null);
+ Contract.Assert(w2 != null);
+ Contract.Assert(w3 != null);
+ return GenKillWeight.extend(w1, GenKillWeight.extend(w2, w3));
+ }
+
+ private static GenKillWeight getWeight(Cmd cmd, Implementation impl, Program prog) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+
+ if (weightCache.ContainsKey(cmd))
+ return weightCache[cmd];
+
+ HashSet<Variable/*!*/>/*!*/ gen = new HashSet<Variable/*!*/>();
+ HashSet<Variable/*!*/>/*!*/ kill = new HashSet<Variable/*!*/>();
+ GenKillWeight/*!*/ ret;
+
+ if (cmd is AssignCmd) {
+ AssignCmd/*!*/ assignCmd = (AssignCmd)cmd;
+ Contract.Assert(cmd != null);
+ // I must first iterate over all the targets and remove the live ones.
+ // After the removals are done, I must add the variables referred on
+ // the right side of the removed targets
+ foreach (AssignLhs/*!*/ lhs in assignCmd.Lhss) {
+ Contract.Assert(lhs != null);
+ Variable var = lhs.DeepAssignedVariable;
+ if (var != null) {
+ if (lhs is SimpleAssignLhs) {
+ // we should only remove non-map target variables because there is an implicit
+ // read of a map variable in an assignment to it
+ kill.Add(var);
+ }
+ }
+ }
+ int index = 0;
+ foreach (Expr/*!*/ expr in assignCmd.Rhss) {
+ Contract.Assert(expr != null);
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(expr);
+ gen.UnionWith(collector.usedVars);
+ AssignLhs lhs = assignCmd.Lhss[index];
+ if (lhs is MapAssignLhs) {
+ // If the target is a map, then all indices are also read
+ MapAssignLhs malhs = (MapAssignLhs)lhs;
+ foreach (Expr e in malhs.Indexes) {
+ VariableCollector/*!*/ c = new VariableCollector();
+ c.Visit(e);
+ gen.UnionWith(c.usedVars);
+ }
+ }
+ index++;
+ }
+ ret = new GenKillWeight(gen, kill);
+ } else if (cmd is HavocCmd) {
+ HavocCmd/*!*/ havocCmd = (HavocCmd)cce.NonNull(cmd);
+ foreach (IdentifierExpr/*!*/ expr in havocCmd.Vars) {
+ Contract.Assert(expr != null);
+ if (expr.Decl != null) {
+ kill.Add(expr.Decl);
+ }
+ }
+ ret = new GenKillWeight(gen, kill);
+ } else if (cmd is PredicateCmd) {
+ Contract.Assert((cmd is AssertCmd || cmd is AssumeCmd));
+ PredicateCmd/*!*/ predicateCmd = (PredicateCmd)cce.NonNull(cmd);
+ if (predicateCmd.Expr is LiteralExpr && prog != null && impl != null) {
+ LiteralExpr le = (LiteralExpr)predicateCmd.Expr;
+ if (le.IsFalse) {
+ var globals = prog.GlobalVariables;
+ Contract.Assert(cce.NonNullElements(globals));
+ foreach (Variable/*!*/ v in globals) {
+ Contract.Assert(v != null);
+ kill.Add(v);
+ }
+ foreach (Variable/*!*/ v in impl.LocVars) {
+ Contract.Assert(v != null);
+ kill.Add(v);
+ }
+ foreach (Variable/*!*/ v in impl.OutParams) {
+ Contract.Assert(v != null);
+ kill.Add(v);
+ }
+ }
+ } else {
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(predicateCmd.Expr);
+ gen.UnionWith(collector.usedVars);
+ }
+ ret = new GenKillWeight(gen, kill);
+ } else if (cmd is CommentCmd) {
+ ret = new GenKillWeight(gen, kill);
+ // comments are just for debugging and don't affect verification
+ } else if (cmd is SugaredCmd) {
+ SugaredCmd/*!*/ sugCmd = (SugaredCmd)cmd;
+ Contract.Assert(sugCmd != null);
+ ret = getWeight(sugCmd.Desugaring, impl, prog);
+ } else if (cmd is StateCmd) {
+ StateCmd/*!*/ stCmd = (StateCmd)cmd;
+ Contract.Assert(stCmd != null);
+ List<Cmd>/*!*/ cmds = stCmd.Cmds;
+ Contract.Assert(cmds != null);
+ int len = cmds.Count;
+ ret = GenKillWeight.one();
+ for (int i = len - 1; i >= 0; i--) {
+ GenKillWeight/*!*/ w = getWeight(cmds[i], impl, prog);
+ Contract.Assert(w != null);
+ ret = GenKillWeight.extend(w, ret);
+ }
+ foreach (Variable/*!*/ v in stCmd.Locals) {
+ Contract.Assert(v != null);
+ kill.Add(v);
+ }
+ ret = GenKillWeight.extend(new GenKillWeight(gen, kill), ret);
+ } else {
+ {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ weightCache[cmd] = ret;
+ return ret;
+ }
+
+ static Dictionary<Cmd/*!*/, GenKillWeight/*!*/>/*!*/ weightCacheAfterCall = new Dictionary<Cmd/*!*/, GenKillWeight/*!*/>();
+ static Dictionary<Cmd/*!*/, GenKillWeight/*!*/>/*!*/ weightCacheBeforeCall = new Dictionary<Cmd/*!*/, GenKillWeight/*!*/>();
+
+ private static GenKillWeight getWeightAfterCall(Cmd cmd) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+
+ if (weightCacheAfterCall.ContainsKey(cmd))
+ return weightCacheAfterCall[cmd];
+
+ HashSet<Variable/*!*/>/*!*/ gen = new HashSet<Variable/*!*/>();
+ HashSet<Variable/*!*/>/*!*/ kill = new HashSet<Variable/*!*/>();
+
+ Contract.Assert(cmd is CallCmd);
+ CallCmd/*!*/ ccmd = cce.NonNull((CallCmd)cmd);
+
+ foreach (IdentifierExpr/*!*/ ie in ccmd.Outs) {
+ Contract.Assert(ie != null);
+ if (ie.Decl != null)
+ kill.Add(ie.Decl);
+ }
+
+ // Variables in ensures are considered as "read"
+ foreach (Ensures/*!*/ re in cce.NonNull(ccmd.Proc).Ensures) {
+ Contract.Assert(re != null);
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(re.Condition);
+ foreach (Variable/*!*/ v in collector.usedVars) {
+ Contract.Assert(v != null);
+ if (v is GlobalVariable) {
+ gen.Add(v);
+ }
+ }
+ }
+
+ GenKillWeight/*!*/ ret = new GenKillWeight(gen, kill);
+ Contract.Assert(ret != null);
+ weightCacheAfterCall[cmd] = ret;
+ return ret;
+ }
+
+ private static GenKillWeight getWeightBeforeCall(Cmd cmd) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<GenKillWeight>() != null);
+ Contract.Assert((cmd is CallCmd));
+ if (weightCacheBeforeCall.ContainsKey(cmd))
+ return weightCacheBeforeCall[cmd];
+
+ HashSet<Variable/*!*/>/*!*/ gen = new HashSet<Variable/*!*/>();
+ HashSet<Variable/*!*/>/*!*/ kill = new HashSet<Variable/*!*/>();
+ CallCmd/*!*/ ccmd = cce.NonNull((CallCmd/*!*/)cmd);
+
+ foreach (Expr/*!*/ expr in ccmd.Ins) {
+ Contract.Assert(expr != null);
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(expr);
+ gen.UnionWith(collector.usedVars);
+ }
+
+ Contract.Assert(ccmd.Proc != null);
+
+ // Variables in requires are considered as "read"
+ foreach (Requires/*!*/ re in ccmd.Proc.Requires) {
+ Contract.Assert(re != null);
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(re.Condition);
+ foreach (Variable/*!*/ v in collector.usedVars) {
+ Contract.Assert(v != null);
+ if (v is GlobalVariable) {
+ gen.Add(v);
+ }
+ }
+ }
+
+ // Old variables in ensures are considered as "read"
+ foreach (Ensures/*!*/ re in ccmd.Proc.Ensures) {
+ Contract.Assert(re != null);
+ VariableCollector/*!*/ collector = new VariableCollector();
+ collector.Visit(re.Condition);
+ foreach (Variable/*!*/ v in collector.oldVarsUsed) {
+ Contract.Assert(v != null);
+ if (v is GlobalVariable) {
+ gen.Add(v);
+ }
+ }
+ }
+
+ GenKillWeight/*!*/ ret = new GenKillWeight(gen, kill);
+ Contract.Assert(ret != null);
+ weightCacheAfterCall[cmd] = ret;
+ return ret;
+ }
+ }
+
+ public class TokenEliminator : ReadOnlyVisitor
+ {
+ public int TokenCount = 0;
+ public override Expr VisitExpr(Expr node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitExpr(node);
+ }
+ public override Variable VisitVariable(Variable node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitVariable(node);
+ }
+ public override Function VisitFunction(Function node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitFunction(node);
+ }
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitImplementation(node);
+ }
+ public override Procedure VisitProcedure(Procedure node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitProcedure(node);
+ }
+ public override Axiom VisitAxiom(Axiom node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitAxiom(node);
+ }
+ public override Cmd VisitAssignCmd(AssignCmd node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitAssignCmd(node);
+ }
+ public override Cmd VisitAssumeCmd(AssumeCmd node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitAssumeCmd(node);
+ }
+ public override Cmd VisitHavocCmd(HavocCmd node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitHavocCmd(node);
+ }
+ public override Constant VisitConstant(Constant node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitConstant(node);
+ }
+ public override TransferCmd VisitTransferCmd(TransferCmd node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitTransferCmd(node);
+ }
+ public override Block VisitBlock(Block node)
+ {
+ node.tok = Token.NoToken;
+ TokenCount++;
+ return base.VisitBlock(node);
+ }
+ }
} \ No newline at end of file
diff --git a/Source/Core/Duplicator.cs b/Source/Core/Duplicator.cs
index 181b80a1..bbc7e0ad 100644
--- a/Source/Core/Duplicator.cs
+++ b/Source/Core/Duplicator.cs
@@ -1,794 +1,829 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// BoogiePL - Duplicator.cs
-//---------------------------------------------------------------------------------------------
-
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Linq;
-
-namespace Microsoft.Boogie {
- public class Duplicator : StandardVisitor {
- // This is used to ensure that Procedures get duplicated only once
- // and that Implementation.Proc is resolved to the correct duplicated
- // Procedure.
- private Dictionary<Procedure,Procedure> OldToNewProcedureMap = null;
-
- public override Absy Visit(Absy node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
- node = base.Visit(node);
- return node;
- }
-
- public override Cmd VisitAssertCmd(AssertCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return base.VisitAssertCmd((AssertCmd)node.Clone());
- }
- public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node)
- {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return base.VisitAssertEnsuresCmd((AssertEnsuresCmd)node.Clone());
- }
- public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node)
- {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return base.VisitAssertRequiresCmd((AssertRequiresCmd)node.Clone());
- }
- public override Cmd VisitAssignCmd(AssignCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- AssignCmd clone = (AssignCmd)node.Clone();
- clone.Lhss = new List<AssignLhs/*!*/>(clone.Lhss);
- clone.Rhss = new List<Expr/*!*/>(clone.Rhss);
- return base.VisitAssignCmd(clone);
- }
- public override Cmd VisitAssumeCmd(AssumeCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return base.VisitAssumeCmd((AssumeCmd)node.Clone());
- }
- public override AtomicRE VisitAtomicRE(AtomicRE node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AtomicRE>() != null);
- return base.VisitAtomicRE((AtomicRE)node.Clone());
- }
- public override Axiom VisitAxiom(Axiom node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Axiom>() != null);
- return base.VisitAxiom((Axiom)node.Clone());
- }
- public override Type VisitBasicType(BasicType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // do /not/ clone the type recursively
- return (BasicType)node.Clone();
- }
- public override Block VisitBlock(Block node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Block>() != null);
- return base.VisitBlock((Block) node.Clone());
- }
- public override Expr VisitBvConcatExpr (BvConcatExpr node) {
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitBvConcatExpr((BvConcatExpr) node.Clone());
- }
- public override Expr VisitBvExtractExpr(BvExtractExpr node) {
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitBvExtractExpr((BvExtractExpr) node.Clone());
- }
- public override Expr VisitCodeExpr(CodeExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- CodeExpr clone = (CodeExpr)base.VisitCodeExpr((CodeExpr)node.Clone());
- // Before returning, fix up the resolved goto targets
- Contract.Assert(node.Blocks.Count == clone.Blocks.Count);
- Dictionary<Block, Block> subst = new Dictionary<Block, Block>();
- for (int i = 0; i < node.Blocks.Count; i++) {
- subst.Add(node.Blocks[i], clone.Blocks[i]);
- }
- foreach (Block/*!*/ b in clone.Blocks) {
- Contract.Assert(b != null);
- GotoCmd g = b.TransferCmd as GotoCmd;
- if (g != null) {
- List<Block> targets = new List<Block>();
- foreach (Block t in cce.NonNull(g.labelTargets)) {
- Block nt = subst[t];
- targets.Add(nt);
- }
- g.labelTargets = targets;
- }
- }
- return clone;
- }
- public override List<Block> VisitBlockSeq(List<Block> blockSeq) {
- //Contract.Requires(blockSeq != null);
- Contract.Ensures(Contract.Result<List<Block>>() != null);
- return base.VisitBlockSeq(new List<Block>(blockSeq));
- }
- public override List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks) {
- //Contract.Requires(cce.NonNullElements(blocks));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
- return base.VisitBlockList(new List<Block/*!*/>(blocks));
- }
- public override BoundVariable VisitBoundVariable(BoundVariable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<BoundVariable>() != null);
- return base.VisitBoundVariable((BoundVariable)node.Clone());
- }
- public override Type VisitBvType(BvType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // do /not/ clone the type recursively
- return (BvType)node.Clone();
- }
- public override Cmd VisitCallCmd(CallCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- CallCmd clone = (CallCmd)node.Clone();
- Contract.Assert(clone != null);
- clone.Ins = new List<Expr>(clone.Ins);
- clone.Outs = new List<IdentifierExpr>(clone.Outs);
- return base.VisitCallCmd(clone);
- }
- public override Choice VisitChoice(Choice node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Choice>() != null);
- return base.VisitChoice((Choice)node.Clone());
- }
- public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq) {
- //Contract.Requires(cmdSeq != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- return base.VisitCmdSeq(new List<Cmd>(cmdSeq));
- }
- public override Constant VisitConstant(Constant node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Constant>() != null);
- return base.VisitConstant((Constant)node.Clone());
- }
- public override CtorType VisitCtorType(CtorType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<CtorType>() != null);
- // do /not/ clone the type recursively
- return (CtorType)node.Clone();
- }
- public override Declaration VisitDeclaration(Declaration node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Declaration>() != null);
- return base.VisitDeclaration((Declaration)node.Clone());
- }
- public override List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList) {
- //Contract.Requires(cce.NonNullElements(declarationList));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Declaration>>()));
-
- // For Implementation.Proc to resolve correctly to duplicated Procedures
- // we need to visit the procedures first
- for (int i = 0, n = declarationList.Count; i < n; i++) {
- if (!( declarationList[i] is Procedure ))
- continue;
-
- declarationList[i] = cce.NonNull((Declaration) this.Visit(declarationList[i]));
- }
-
- // Now visit everything else
- for (int i = 0, n = declarationList.Count; i < n; i++) {
- if (declarationList[i] is Procedure)
- continue;
-
- declarationList[i] = cce.NonNull((Declaration) this.Visit(declarationList[i]));
- }
- return declarationList;
- }
- public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<DeclWithFormals>() != null);
- return base.VisitDeclWithFormals((DeclWithFormals)node.Clone());
- }
- public override Ensures VisitEnsures(Ensures node)
- {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Ensures>() != null);
- return base.VisitEnsures((Ensures)node.Clone());
- }
- public override List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq)
- {
- //Contract.Requires(ensuresSeq != null);
- Contract.Ensures(Contract.Result<List<Ensures>>() != null);
- return base.VisitEnsuresSeq(new List<Ensures>(ensuresSeq));
- }
- public override Expr VisitExistsExpr(ExistsExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitExistsExpr((ExistsExpr)node.Clone());
- }
- public override Expr VisitExpr(Expr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitExpr((Expr)node.Clone());
- }
- public override IList<Expr> VisitExprSeq(IList<Expr> list) {
- //Contract.Requires(list != null);
- Contract.Ensures(Contract.Result<IList<Expr>>() != null);
- return base.VisitExprSeq(new List<Expr>(list));
- }
- public override Expr VisitForallExpr(ForallExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitForallExpr((ForallExpr)node.Clone());
- }
- public override Formal VisitFormal(Formal node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Formal>() != null);
- return base.VisitFormal((Formal)node.Clone());
- }
- public override Function VisitFunction(Function node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- return base.VisitFunction((Function)node.Clone());
- }
- public override GlobalVariable VisitGlobalVariable(GlobalVariable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<GlobalVariable>() != null);
- return base.VisitGlobalVariable((GlobalVariable)node.Clone());
- }
- public override GotoCmd VisitGotoCmd(GotoCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<GotoCmd>() != null);
- // NOTE: This doesn't duplicate the labelTarget basic blocks
- // or resolve them to the new blocks
- // VisitImplementation() and VisitBlock() handle this
- return base.VisitGotoCmd( (GotoCmd)node.Clone());
- }
- public override Cmd VisitHavocCmd(HavocCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return base.VisitHavocCmd((HavocCmd)node.Clone());
- }
- public override Expr VisitIdentifierExpr(IdentifierExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitIdentifierExpr((IdentifierExpr)node.Clone());
- }
- public override List<IdentifierExpr> VisitIdentifierExprSeq(List<IdentifierExpr> identifierExprSeq) {
- //Contract.Requires(identifierExprSeq != null);
- Contract.Ensures(Contract.Result<List<IdentifierExpr>>() != null);
- return base.VisitIdentifierExprSeq(new List<IdentifierExpr>(identifierExprSeq));
- }
- public override Implementation VisitImplementation(Implementation node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Implementation>() != null);
- var impl = base.VisitImplementation((Implementation)node.Clone());
- var blockDuplicationMapping = new Dictionary<Block, Block>();
-
- // Compute the mapping between the blocks of the old implementation (node)
- // and the new implementation (impl).
- foreach (var blockPair in node.Blocks.Zip(impl.Blocks)) {
- blockDuplicationMapping.Add(blockPair.Item1, blockPair.Item2);
- }
-
- // The GotoCmds and blocks have now been duplicated.
- // Resolve GotoCmd targets to the duplicated blocks
- foreach (GotoCmd gotoCmd in impl.Blocks.Select( bb => bb.TransferCmd).OfType<GotoCmd>()) {
- var newLabelTargets = new List<Block>();
- var newLabelNames = new List<string>();
- for (int index = 0; index < gotoCmd.labelTargets.Count; ++index) {
- var newBlock = blockDuplicationMapping[gotoCmd.labelTargets[index]];
- newLabelTargets.Add(newBlock);
- newLabelNames.Add(newBlock.Label);
- }
- gotoCmd.labelTargets = newLabelTargets;
- gotoCmd.labelNames = newLabelNames;
- }
-
- return impl;
- }
- public override Expr VisitLiteralExpr(LiteralExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitLiteralExpr((LiteralExpr)node.Clone());
- }
- public override LocalVariable VisitLocalVariable(LocalVariable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<LocalVariable>() != null);
- return base.VisitLocalVariable((LocalVariable)node.Clone());
- }
- public override AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AssignLhs>() != null);
- MapAssignLhs clone = (MapAssignLhs)node.Clone();
- clone.Indexes = new List<Expr/*!*/>(clone.Indexes);
- return base.VisitMapAssignLhs(clone);
- }
- public override MapType VisitMapType(MapType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<MapType>() != null);
- // do /not/ clone the type recursively
- return (MapType)node.Clone();
- }
- public override Expr VisitNAryExpr(NAryExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitNAryExpr((NAryExpr)node.Clone());
- }
- public override Expr VisitOldExpr(OldExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return base.VisitOldExpr((OldExpr)node.Clone());
- }
- public override Cmd VisitParCallCmd(ParCallCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- ParCallCmd clone = (ParCallCmd)node.Clone();
- Contract.Assert(clone != null);
- clone.CallCmds = new List<CallCmd>(node.CallCmds);
- return base.VisitParCallCmd(clone);
- }
- public override Procedure VisitProcedure(Procedure node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Procedure>() != null);
- Procedure newProcedure = null;
- if (OldToNewProcedureMap != null && OldToNewProcedureMap.ContainsKey(node)) {
- newProcedure = OldToNewProcedureMap[node];
- } else {
- newProcedure = base.VisitProcedure((Procedure) node.Clone());
- if (OldToNewProcedureMap != null)
- OldToNewProcedureMap[node] = newProcedure;
- }
- return newProcedure;
- }
- public override Program VisitProgram(Program node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Program>() != null);
-
- // If cloning an entire program we need to ensure that
- // Implementation.Proc gets resolved to the right Procedure
- // (i.e. we don't duplicate Procedure twice) and CallCmds
- // call the right Procedure.
- // The map below is used to achieve this.
- OldToNewProcedureMap = new Dictionary<Procedure, Procedure>();
- var newProgram = base.VisitProgram((Program)node.Clone());
-
- // We need to make sure that CallCmds get resolved to call Procedures we duplicated
- // instead of pointing to procedures in the old program
- var callCmds = newProgram.Blocks().SelectMany(b => b.Cmds).OfType<CallCmd>();
- foreach (var callCmd in callCmds) {
- callCmd.Proc = OldToNewProcedureMap[callCmd.Proc];
- }
-
- OldToNewProcedureMap = null; // This Visitor could be used for other things later so remove the map.
- return newProgram;
- }
- public override QKeyValue VisitQKeyValue(QKeyValue node) {
- //Contract.Requires(node != null);
- var newParams = new List<object>();
- foreach (var o in node.Params) {
- var e = o as Expr;
- if (e == null) {
- newParams.Add(o);
- } else {
- newParams.Add((Expr)this.Visit(e));
- }
- }
- QKeyValue next = node.Next == null ? null : (QKeyValue)this.Visit(node.Next);
- return new QKeyValue(node.tok, node.Key, newParams, next);
- }
- public override BinderExpr VisitBinderExpr(BinderExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<BinderExpr>() != null);
- return base.VisitBinderExpr((BinderExpr)node.Clone());
- }
- public override Requires VisitRequires(Requires node)
- {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Requires>() != null);
- return base.VisitRequires((Requires)node.Clone());
- }
- public override List<Requires> VisitRequiresSeq(List<Requires> requiresSeq)
- {
- //Contract.Requires(requiresSeq != null);
- Contract.Ensures(Contract.Result<List<Requires>>() != null);
- return base.VisitRequiresSeq(new List<Requires>(requiresSeq));
- }
- public override Cmd VisitRE(RE node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return base.VisitRE((RE)node.Clone());
- }
- public override List<RE> VisitRESeq(List<RE> reSeq) {
- //Contract.Requires(reSeq != null);
- Contract.Ensures(Contract.Result<List<RE>>() != null);
- return base.VisitRESeq(new List<RE>(reSeq));
- }
- public override ReturnCmd VisitReturnCmd(ReturnCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<ReturnCmd>() != null);
- return base.VisitReturnCmd((ReturnCmd)node.Clone());
- }
- public override ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<ReturnExprCmd>() != null);
- return base.VisitReturnExprCmd((ReturnExprCmd)node.Clone());
- }
- public override Sequential VisitSequential(Sequential node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Sequential>() != null);
- return base.VisitSequential((Sequential)node.Clone());
- }
- public override AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AssignLhs>() != null);
- return base.VisitSimpleAssignLhs((SimpleAssignLhs)node.Clone());
- }
- public override Cmd VisitStateCmd(StateCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return base.VisitStateCmd((StateCmd)node.Clone());
- }
- public override TransferCmd VisitTransferCmd(TransferCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<TransferCmd>() != null);
- return base.VisitTransferCmd((TransferCmd)node.Clone());
- }
- public override Trigger VisitTrigger(Trigger node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Trigger>() != null);
- return base.VisitTrigger((Trigger)node.Clone());
- }
- public override Type VisitType(Type node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // do /not/ clone the type recursively
- return (Type)node.Clone();
- }
- public override TypedIdent VisitTypedIdent(TypedIdent node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<TypedIdent>() != null);
- return base.VisitTypedIdent((TypedIdent)node.Clone());
- }
- public override Variable VisitVariable(Variable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Variable>() != null);
- return node;
- }
- public override List<Variable> VisitVariableSeq(List<Variable> variableSeq) {
- //Contract.Requires(variableSeq != null);
- Contract.Ensures(Contract.Result<List<Variable>>() != null);
- return base.VisitVariableSeq(new List<Variable>(variableSeq));
- }
- public override YieldCmd VisitYieldCmd(YieldCmd node)
- {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<YieldCmd>() != null);
- return base.VisitYieldCmd((YieldCmd)node.Clone());
- }
- }
-
-
- #region A duplicator that also does substitutions for a set of variables
- /// <summary>
- /// A substitution is a partial mapping from Variables to Exprs.
- /// </summary>
- public delegate Expr/*?*/ Substitution(Variable/*!*/ v);
-
- public static class Substituter {
- public static Substitution SubstitutionFromHashtable(Dictionary<Variable, Expr> map, bool fallBackOnName = false, Procedure proc = null)
- {
- Contract.Requires(map != null);
- Contract.Ensures(Contract.Result<Substitution>() != null);
- // TODO: With Whidbey, could use anonymous functions.
- return new Substitution(new CreateSubstitutionClosure(map, fallBackOnName, proc).Method);
- }
- private sealed class CreateSubstitutionClosure {
- Dictionary<Variable /*!*/, Expr /*!*/>/*!*/ map;
- Dictionary<string /*!*/, Expr /*!*/>/*!*/ nameMap;
- Procedure proc;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(map != null);
- }
-
- static string UniqueName(Variable variable, Procedure proc)
- {
- // TODO(wuestholz): Maybe we should define structural equality for variables instead.
- var scope = "#global_scope#";
- if (proc != null && !(variable is GlobalVariable || variable is Constant))
- {
- scope = proc.Name;
- }
- return string.Format("{0}.{1}", scope, variable.Name);
- }
-
- public CreateSubstitutionClosure(Dictionary<Variable, Expr> map, bool fallBackOnName = false, Procedure proc = null)
- : base() {
- Contract.Requires(map != null);
- this.map = map;
- this.proc = proc;
- if (fallBackOnName && proc != null)
- {
- this.nameMap = map.ToDictionary(kv => UniqueName(kv.Key, proc), kv => kv.Value);
- }
- }
- public Expr/*?*/ Method(Variable v) {
- Contract.Requires(v != null);
- if(map.ContainsKey(v)) {
- return map[v];
- }
- Expr e;
- if (nameMap != null && proc != null && nameMap.TryGetValue(UniqueName(v, proc), out e))
- {
- return e;
- }
- return null;
- }
- }
-
- // ----------------------------- Substitutions for Expr -------------------------------
-
- /// <summary>
- /// Apply a substitution to an expression. Any variables not in domain(subst)
- /// is not changed. The substitutions apply within the "old", but the "old"
- /// expression remains.
- /// </summary>
- public static Expr Apply(Substitution subst, Expr expr) {
- Contract.Requires(subst != null);
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return (Expr)new NormalSubstituter(subst).Visit(expr);
- }
-
- /// <summary>
- /// Apply a substitution to an expression.
- /// Outside "old" expressions, the substitution "always" is applied; any variable not in
- /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
- /// variables in domain(forOld), apply map "always" to variables in
- /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
- /// </summary>
- public static Expr Apply(Substitution always, Substitution forold, Expr expr) {
- Contract.Requires(always != null);
- Contract.Requires(forold != null);
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return (Expr)new NormalSubstituter(always, forold).Visit(expr);
- }
-
- /// <summary>
- /// Apply a substitution to an expression replacing "old" expressions.
- /// Outside "old" expressions, the substitution "always" is applied; any variable not in
- /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
- /// variables in domain(forOld), apply map "always" to variables in
- /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
- /// </summary>
- public static Expr ApplyReplacingOldExprs(Substitution always, Substitution forOld, Expr expr) {
- Contract.Requires(always != null);
- Contract.Requires(forOld != null);
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return (Expr)new ReplacingOldSubstituter(always, forOld).Visit(expr);
- }
-
- public static Expr FunctionCallReresolvingApplyReplacingOldExprs(Substitution always, Substitution forOld, Expr expr, Program program)
- {
- Contract.Requires(always != null);
- Contract.Requires(forOld != null);
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return (Expr)new FunctionCallReresolvingReplacingOldSubstituter(program, always, forOld).Visit(expr);
- }
-
- // ----------------------------- Substitutions for Cmd -------------------------------
-
- /// <summary>
- /// Apply a substitution to a command. Any variables not in domain(subst)
- /// is not changed. The substitutions apply within the "old", but the "old"
- /// expression remains.
- /// </summary>
- public static Cmd Apply(Substitution subst, Cmd cmd) {
- Contract.Requires(subst != null);
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return (Cmd)new NormalSubstituter(subst).Visit(cmd);
- }
-
- /// <summary>
- /// Apply a substitution to a command.
- /// Outside "old" expressions, the substitution "always" is applied; any variable not in
- /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
- /// variables in domain(forOld), apply map "always" to variables in
- /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
- /// </summary>
- public static Cmd Apply(Substitution always, Substitution forOld, Cmd cmd)
- {
- Contract.Requires(always != null);
- Contract.Requires(forOld != null);
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return (Cmd)new NormalSubstituter(always, forOld).Visit(cmd);
- }
-
- /// <summary>
- /// Apply a substitution to a command replacing "old" expressions.
- /// Outside "old" expressions, the substitution "always" is applied; any variable not in
- /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
- /// variables in domain(forOld), apply map "always" to variables in
- /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
- /// </summary>
- public static Cmd ApplyReplacingOldExprs(Substitution always, Substitution forOld, Cmd cmd) {
- Contract.Requires(always != null);
- Contract.Requires(forOld != null);
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return (Cmd)new ReplacingOldSubstituter(always, forOld).Visit(cmd);
- }
-
- // ----------------------------- Substitutions for QKeyValue -------------------------------
-
- /// <summary>
- /// Apply a substitution to a list of attributes. Any variables not in domain(subst)
- /// is not changed. The substitutions apply within the "old", but the "old"
- /// expression remains.
- /// </summary>
- public static QKeyValue Apply(Substitution subst, QKeyValue kv) {
- Contract.Requires(subst != null);
- if (kv == null) {
- return null;
- } else {
- return (QKeyValue)new NormalSubstituter(subst).Visit(kv);
- }
- }
-
- /// <summary>
- /// Apply a substitution to a list of attributes replacing "old" expressions.
- /// For a further description, see "ApplyReplacingOldExprs" above for Expr.
- /// </summary>
- public static QKeyValue ApplyReplacingOldExprs(Substitution always, Substitution forOld, QKeyValue kv) {
- Contract.Requires(always != null);
- Contract.Requires(forOld != null);
- if (kv == null) {
- return null;
- } else {
- return (QKeyValue)new ReplacingOldSubstituter(always, forOld).Visit(kv);
- }
- }
-
- // ------------------------------------------------------------
-
- private sealed class NormalSubstituter : Duplicator
- {
- private readonly Substitution/*!*/ always;
- private readonly Substitution/*!*/ forold;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(always != null);
- Contract.Invariant(forold != null);
- }
-
- public NormalSubstituter(Substitution subst)
- : base() {
- Contract.Requires(subst != null);
- this.always = subst;
- this.forold = Substituter.SubstitutionFromHashtable(new Dictionary<Variable, Expr>());
- }
-
- public NormalSubstituter(Substitution subst, Substitution forold)
- : base()
- {
- Contract.Requires(subst != null);
- this.always = subst;
- this.forold = forold;
- }
-
- private bool insideOldExpr = false;
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Expr/*?*/ e = null;
-
- if (insideOldExpr)
- {
- e = forold(cce.NonNull(node.Decl));
- }
-
- if (e == null)
- {
- e = always(cce.NonNull(node.Decl));
- }
-
- return e == null ? base.VisitIdentifierExpr(node) : e;
- }
-
- public override Expr VisitOldExpr(OldExpr node)
- {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- bool previouslyInOld = insideOldExpr;
- insideOldExpr = true;
- Expr/*!*/ e = (Expr/*!*/)cce.NonNull(this.Visit(node.Expr));
- insideOldExpr = previouslyInOld;
- return new OldExpr(node.tok, e);
- }
- }
-
- private sealed class FunctionCallReresolvingReplacingOldSubstituter : ReplacingOldSubstituter
- {
- readonly Program Program;
-
- public FunctionCallReresolvingReplacingOldSubstituter(Program program, Substitution always, Substitution forold)
- : base(always, forold)
- {
- Program = program;
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- var result = base.VisitNAryExpr(node);
- var nAryExpr = result as NAryExpr;
- if (nAryExpr != null)
- {
- var funCall = nAryExpr.Fun as FunctionCall;
- if (funCall != null)
- {
- funCall.Func = Program.FindFunction(funCall.FunctionName);
- }
- }
- return result;
- }
- }
-
- private class ReplacingOldSubstituter : Duplicator {
- private readonly Substitution/*!*/ always;
- private readonly Substitution/*!*/ forold;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(always != null);
- Contract.Invariant(forold != null);
- }
-
- public ReplacingOldSubstituter(Substitution always, Substitution forold)
- : base() {
- Contract.Requires(forold != null);
- Contract.Requires(always != null);
- this.always = always;
- this.forold = forold;
- }
-
- private bool insideOldExpr = false;
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Expr/*?*/ e = null;
-
- if (insideOldExpr) {
- e = forold(cce.NonNull(node.Decl));
- }
-
- if (e == null) {
- e = always(cce.NonNull(node.Decl));
- }
-
- return e == null ? base.VisitIdentifierExpr(node) : e;
- }
-
- public override Expr VisitOldExpr(OldExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- bool previouslyInOld = insideOldExpr;
- insideOldExpr = true;
- Expr/*!*/ e = (Expr/*!*/)cce.NonNull(this.Visit(node.Expr));
- insideOldExpr = previouslyInOld;
- return e;
- }
- }
- }
- #endregion
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// BoogiePL - Duplicator.cs
+//---------------------------------------------------------------------------------------------
+
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Linq;
+
+namespace Microsoft.Boogie {
+ public class Duplicator : StandardVisitor {
+ // This is used to ensure that Procedures get duplicated only once
+ // and that Implementation.Proc is resolved to the correct duplicated
+ // Procedure.
+ private Dictionary<Procedure,Procedure> OldToNewProcedureMap = null;
+
+ public override Absy Visit(Absy node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+ node = base.Visit(node);
+ return node;
+ }
+
+ public override Cmd VisitAssertCmd(AssertCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return base.VisitAssertCmd((AssertCmd)node.Clone());
+ }
+ public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node)
+ {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return base.VisitAssertEnsuresCmd((AssertEnsuresCmd)node.Clone());
+ }
+ public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node)
+ {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return base.VisitAssertRequiresCmd((AssertRequiresCmd)node.Clone());
+ }
+ public override Cmd VisitAssignCmd(AssignCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ AssignCmd clone = (AssignCmd)node.Clone();
+ clone.Lhss = new List<AssignLhs/*!*/>(clone.Lhss);
+ clone.Rhss = new List<Expr/*!*/>(clone.Rhss);
+ return base.VisitAssignCmd(clone);
+ }
+ public override Cmd VisitAssumeCmd(AssumeCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return base.VisitAssumeCmd((AssumeCmd)node.Clone());
+ }
+ public override AtomicRE VisitAtomicRE(AtomicRE node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AtomicRE>() != null);
+ return base.VisitAtomicRE((AtomicRE)node.Clone());
+ }
+ public override Axiom VisitAxiom(Axiom node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Axiom>() != null);
+ return base.VisitAxiom((Axiom)node.Clone());
+ }
+ public override Type VisitBasicType(BasicType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // do /not/ clone the type recursively
+ return (BasicType)node.Clone();
+ }
+ public override Block VisitBlock(Block node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+ return base.VisitBlock((Block) node.Clone());
+ }
+ public override Expr VisitBvConcatExpr (BvConcatExpr node) {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitBvConcatExpr((BvConcatExpr) node.Clone());
+ }
+ public override Expr VisitBvExtractExpr(BvExtractExpr node) {
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitBvExtractExpr((BvExtractExpr) node.Clone());
+ }
+ public override Expr VisitCodeExpr(CodeExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ CodeExpr clone = (CodeExpr)base.VisitCodeExpr((CodeExpr)node.Clone());
+ // Before returning, fix up the resolved goto targets
+ Contract.Assert(node.Blocks.Count == clone.Blocks.Count);
+ Dictionary<Block, Block> subst = new Dictionary<Block, Block>();
+ for (int i = 0; i < node.Blocks.Count; i++) {
+ subst.Add(node.Blocks[i], clone.Blocks[i]);
+ }
+ foreach (Block/*!*/ b in clone.Blocks) {
+ Contract.Assert(b != null);
+ GotoCmd g = b.TransferCmd as GotoCmd;
+ if (g != null) {
+ List<Block> targets = new List<Block>();
+ foreach (Block t in cce.NonNull(g.labelTargets)) {
+ Block nt = subst[t];
+ targets.Add(nt);
+ }
+ g.labelTargets = targets;
+ }
+ }
+ return clone;
+ }
+ public override List<Block> VisitBlockSeq(List<Block> blockSeq) {
+ //Contract.Requires(blockSeq != null);
+ Contract.Ensures(Contract.Result<List<Block>>() != null);
+ return base.VisitBlockSeq(new List<Block>(blockSeq));
+ }
+ public override List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks) {
+ //Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+ return base.VisitBlockList(new List<Block/*!*/>(blocks));
+ }
+ public override BoundVariable VisitBoundVariable(BoundVariable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<BoundVariable>() != null);
+ return base.VisitBoundVariable((BoundVariable)node.Clone());
+ }
+ public override Type VisitBvType(BvType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // do /not/ clone the type recursively
+ return (BvType)node.Clone();
+ }
+ public override Cmd VisitCallCmd(CallCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ CallCmd clone = (CallCmd)node.Clone();
+ Contract.Assert(clone != null);
+ clone.Ins = new List<Expr>(clone.Ins);
+ clone.Outs = new List<IdentifierExpr>(clone.Outs);
+ return base.VisitCallCmd(clone);
+ }
+ public override Choice VisitChoice(Choice node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Choice>() != null);
+ return base.VisitChoice((Choice)node.Clone());
+ }
+ public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq) {
+ //Contract.Requires(cmdSeq != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ return base.VisitCmdSeq(new List<Cmd>(cmdSeq));
+ }
+ public override Constant VisitConstant(Constant node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Constant>() != null);
+ return base.VisitConstant((Constant)node.Clone());
+ }
+ public override CtorType VisitCtorType(CtorType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<CtorType>() != null);
+ // do /not/ clone the type recursively
+ return (CtorType)node.Clone();
+ }
+ public override Declaration VisitDeclaration(Declaration node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Declaration>() != null);
+ return base.VisitDeclaration((Declaration)node.Clone());
+ }
+ public override List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList) {
+ //Contract.Requires(cce.NonNullElements(declarationList));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Declaration>>()));
+
+ // For Implementation.Proc to resolve correctly to duplicated Procedures
+ // we need to visit the procedures first
+ for (int i = 0, n = declarationList.Count; i < n; i++) {
+ if (!( declarationList[i] is Procedure ))
+ continue;
+
+ declarationList[i] = cce.NonNull((Declaration) this.Visit(declarationList[i]));
+ }
+
+ // Now visit everything else
+ for (int i = 0, n = declarationList.Count; i < n; i++) {
+ if (declarationList[i] is Procedure)
+ continue;
+
+ declarationList[i] = cce.NonNull((Declaration) this.Visit(declarationList[i]));
+ }
+ return declarationList;
+ }
+ public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<DeclWithFormals>() != null);
+ return base.VisitDeclWithFormals((DeclWithFormals)node.Clone());
+ }
+ public override Ensures VisitEnsures(Ensures node)
+ {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Ensures>() != null);
+ return base.VisitEnsures((Ensures)node.Clone());
+ }
+ public override List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq)
+ {
+ //Contract.Requires(ensuresSeq != null);
+ Contract.Ensures(Contract.Result<List<Ensures>>() != null);
+ return base.VisitEnsuresSeq(new List<Ensures>(ensuresSeq));
+ }
+ public override Expr VisitExistsExpr(ExistsExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitExistsExpr((ExistsExpr)node.Clone());
+ }
+ public override Expr VisitExpr(Expr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitExpr((Expr)node.Clone());
+ }
+ public override IList<Expr> VisitExprSeq(IList<Expr> list) {
+ //Contract.Requires(list != null);
+ Contract.Ensures(Contract.Result<IList<Expr>>() != null);
+ return base.VisitExprSeq(new List<Expr>(list));
+ }
+ public override Expr VisitForallExpr(ForallExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitForallExpr((ForallExpr)node.Clone());
+ }
+ public override Formal VisitFormal(Formal node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Formal>() != null);
+ return base.VisitFormal((Formal)node.Clone());
+ }
+ public override Function VisitFunction(Function node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return base.VisitFunction((Function)node.Clone());
+ }
+ public override GlobalVariable VisitGlobalVariable(GlobalVariable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<GlobalVariable>() != null);
+ return base.VisitGlobalVariable((GlobalVariable)node.Clone());
+ }
+ public override GotoCmd VisitGotoCmd(GotoCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<GotoCmd>() != null);
+ // NOTE: This doesn't duplicate the labelTarget basic blocks
+ // or resolve them to the new blocks
+ // VisitImplementation() and VisitBlock() handle this
+ return base.VisitGotoCmd( (GotoCmd)node.Clone());
+ }
+ public override Cmd VisitHavocCmd(HavocCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return base.VisitHavocCmd((HavocCmd)node.Clone());
+ }
+ public override Expr VisitIdentifierExpr(IdentifierExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitIdentifierExpr((IdentifierExpr)node.Clone());
+ }
+ public override List<IdentifierExpr> VisitIdentifierExprSeq(List<IdentifierExpr> identifierExprSeq) {
+ //Contract.Requires(identifierExprSeq != null);
+ Contract.Ensures(Contract.Result<List<IdentifierExpr>>() != null);
+ return base.VisitIdentifierExprSeq(new List<IdentifierExpr>(identifierExprSeq));
+ }
+ public override Implementation VisitImplementation(Implementation node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Implementation>() != null);
+ var impl = base.VisitImplementation((Implementation)node.Clone());
+ var blockDuplicationMapping = new Dictionary<Block, Block>();
+
+ // Compute the mapping between the blocks of the old implementation (node)
+ // and the new implementation (impl).
+ foreach (var blockPair in node.Blocks.Zip(impl.Blocks)) {
+ blockDuplicationMapping.Add(blockPair.Item1, blockPair.Item2);
+ }
+
+ // The GotoCmds and blocks have now been duplicated.
+ // Resolve GotoCmd targets to the duplicated blocks
+ foreach (GotoCmd gotoCmd in impl.Blocks.Select( bb => bb.TransferCmd).OfType<GotoCmd>()) {
+ var newLabelTargets = new List<Block>();
+ var newLabelNames = new List<string>();
+ for (int index = 0; index < gotoCmd.labelTargets.Count; ++index) {
+ var newBlock = blockDuplicationMapping[gotoCmd.labelTargets[index]];
+ newLabelTargets.Add(newBlock);
+ newLabelNames.Add(newBlock.Label);
+ }
+ gotoCmd.labelTargets = newLabelTargets;
+ gotoCmd.labelNames = newLabelNames;
+ }
+
+ return impl;
+ }
+ public override Expr VisitLiteralExpr(LiteralExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitLiteralExpr((LiteralExpr)node.Clone());
+ }
+ public override LocalVariable VisitLocalVariable(LocalVariable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<LocalVariable>() != null);
+ return base.VisitLocalVariable((LocalVariable)node.Clone());
+ }
+ public override AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AssignLhs>() != null);
+ MapAssignLhs clone = (MapAssignLhs)node.Clone();
+ clone.Indexes = new List<Expr/*!*/>(clone.Indexes);
+ return base.VisitMapAssignLhs(clone);
+ }
+ public override MapType VisitMapType(MapType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<MapType>() != null);
+ // do /not/ clone the type recursively
+ return (MapType)node.Clone();
+ }
+ public override Expr VisitNAryExpr(NAryExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitNAryExpr((NAryExpr)node.Clone());
+ }
+ public override Expr VisitOldExpr(OldExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return base.VisitOldExpr((OldExpr)node.Clone());
+ }
+ public override Cmd VisitParCallCmd(ParCallCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ ParCallCmd clone = (ParCallCmd)node.Clone();
+ Contract.Assert(clone != null);
+ clone.CallCmds = new List<CallCmd>(node.CallCmds);
+ return base.VisitParCallCmd(clone);
+ }
+ public override Procedure VisitProcedure(Procedure node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Procedure>() != null);
+ Procedure newProcedure = null;
+ if (OldToNewProcedureMap != null && OldToNewProcedureMap.ContainsKey(node)) {
+ newProcedure = OldToNewProcedureMap[node];
+ } else {
+ newProcedure = base.VisitProcedure((Procedure) node.Clone());
+ if (OldToNewProcedureMap != null)
+ OldToNewProcedureMap[node] = newProcedure;
+ }
+ return newProcedure;
+ }
+ public override Program VisitProgram(Program node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Program>() != null);
+
+ // If cloning an entire program we need to ensure that
+ // Implementation.Proc gets resolved to the right Procedure
+ // (i.e. we don't duplicate Procedure twice) and CallCmds
+ // call the right Procedure.
+ // The map below is used to achieve this.
+ OldToNewProcedureMap = new Dictionary<Procedure, Procedure>();
+ var newProgram = base.VisitProgram((Program)node.Clone());
+
+ // We need to make sure that CallCmds get resolved to call Procedures we duplicated
+ // instead of pointing to procedures in the old program
+ var callCmds = newProgram.Blocks().SelectMany(b => b.Cmds).OfType<CallCmd>();
+ foreach (var callCmd in callCmds) {
+ callCmd.Proc = OldToNewProcedureMap[callCmd.Proc];
+ }
+
+ OldToNewProcedureMap = null; // This Visitor could be used for other things later so remove the map.
+ return newProgram;
+ }
+ public override QKeyValue VisitQKeyValue(QKeyValue node) {
+ //Contract.Requires(node != null);
+ var newParams = new List<object>();
+ foreach (var o in node.Params) {
+ var e = o as Expr;
+ if (e == null) {
+ newParams.Add(o);
+ } else {
+ newParams.Add((Expr)this.Visit(e));
+ }
+ }
+ QKeyValue next = node.Next == null ? null : (QKeyValue)this.Visit(node.Next);
+ return new QKeyValue(node.tok, node.Key, newParams, next);
+ }
+ public override BinderExpr VisitBinderExpr(BinderExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<BinderExpr>() != null);
+ return base.VisitBinderExpr((BinderExpr)node.Clone());
+ }
+ public override Requires VisitRequires(Requires node)
+ {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Requires>() != null);
+ return base.VisitRequires((Requires)node.Clone());
+ }
+ public override List<Requires> VisitRequiresSeq(List<Requires> requiresSeq)
+ {
+ //Contract.Requires(requiresSeq != null);
+ Contract.Ensures(Contract.Result<List<Requires>>() != null);
+ return base.VisitRequiresSeq(new List<Requires>(requiresSeq));
+ }
+ public override Cmd VisitRE(RE node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return base.VisitRE((RE)node.Clone());
+ }
+ public override List<RE> VisitRESeq(List<RE> reSeq) {
+ //Contract.Requires(reSeq != null);
+ Contract.Ensures(Contract.Result<List<RE>>() != null);
+ return base.VisitRESeq(new List<RE>(reSeq));
+ }
+ public override ReturnCmd VisitReturnCmd(ReturnCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<ReturnCmd>() != null);
+ return base.VisitReturnCmd((ReturnCmd)node.Clone());
+ }
+ public override ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<ReturnExprCmd>() != null);
+ return base.VisitReturnExprCmd((ReturnExprCmd)node.Clone());
+ }
+ public override Sequential VisitSequential(Sequential node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Sequential>() != null);
+ return base.VisitSequential((Sequential)node.Clone());
+ }
+ public override AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AssignLhs>() != null);
+ return base.VisitSimpleAssignLhs((SimpleAssignLhs)node.Clone());
+ }
+ public override Cmd VisitStateCmd(StateCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return base.VisitStateCmd((StateCmd)node.Clone());
+ }
+ public override TransferCmd VisitTransferCmd(TransferCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<TransferCmd>() != null);
+ return base.VisitTransferCmd((TransferCmd)node.Clone());
+ }
+ public override Trigger VisitTrigger(Trigger node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Trigger>() != null);
+ return base.VisitTrigger((Trigger)node.Clone());
+ }
+ public override Type VisitType(Type node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // do /not/ clone the type recursively
+ return (Type)node.Clone();
+ }
+ public override TypedIdent VisitTypedIdent(TypedIdent node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<TypedIdent>() != null);
+ return base.VisitTypedIdent((TypedIdent)node.Clone());
+ }
+ public override Variable VisitVariable(Variable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Variable>() != null);
+ return node;
+ }
+ public override List<Variable> VisitVariableSeq(List<Variable> variableSeq) {
+ //Contract.Requires(variableSeq != null);
+ Contract.Ensures(Contract.Result<List<Variable>>() != null);
+ return base.VisitVariableSeq(new List<Variable>(variableSeq));
+ }
+ public override YieldCmd VisitYieldCmd(YieldCmd node)
+ {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<YieldCmd>() != null);
+ return base.VisitYieldCmd((YieldCmd)node.Clone());
+ }
+ }
+
+
+ #region A duplicator that also does substitutions for a set of variables
+ /// <summary>
+ /// A substitution is a partial mapping from Variables to Exprs.
+ /// </summary>
+ public delegate Expr/*?*/ Substitution(Variable/*!*/ v);
+
+ public static class Substituter {
+ public static Substitution SubstitutionFromHashtable(Dictionary<Variable, Expr> map, bool fallBackOnName = false, Procedure proc = null)
+ {
+ Contract.Requires(map != null);
+ Contract.Ensures(Contract.Result<Substitution>() != null);
+ // TODO: With Whidbey, could use anonymous functions.
+ return new Substitution(new CreateSubstitutionClosure(map, fallBackOnName, proc).Method);
+ }
+ private sealed class CreateSubstitutionClosure {
+ Dictionary<Variable /*!*/, Expr /*!*/>/*!*/ map;
+ Dictionary<string /*!*/, Expr /*!*/>/*!*/ nameMap;
+ Procedure proc;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(map != null);
+ }
+
+ static string UniqueName(Variable variable, Procedure proc)
+ {
+ // TODO(wuestholz): Maybe we should define structural equality for variables instead.
+ var scope = "#global_scope#";
+ if (proc != null && !(variable is GlobalVariable || variable is Constant))
+ {
+ scope = proc.Name;
+ }
+ return string.Format("{0}.{1}", scope, variable.Name);
+ }
+
+ public CreateSubstitutionClosure(Dictionary<Variable, Expr> map, bool fallBackOnName = false, Procedure proc = null)
+ : base() {
+ Contract.Requires(map != null);
+ this.map = map;
+ this.proc = proc;
+ if (fallBackOnName && proc != null)
+ {
+ this.nameMap = map.ToDictionary(kv => UniqueName(kv.Key, proc), kv => kv.Value);
+ }
+ }
+ public Expr/*?*/ Method(Variable v) {
+ Contract.Requires(v != null);
+ if(map.ContainsKey(v)) {
+ return map[v];
+ }
+ Expr e;
+ if (nameMap != null && proc != null && nameMap.TryGetValue(UniqueName(v, proc), out e))
+ {
+ return e;
+ }
+ return null;
+ }
+ }
+
+ // ----------------------------- Substitutions for Expr -------------------------------
+
+ /// <summary>
+ /// Apply a substitution to an expression. Any variables not in domain(subst)
+ /// is not changed. The substitutions apply within the "old", but the "old"
+ /// expression remains.
+ /// </summary>
+ public static Expr Apply(Substitution subst, Expr expr) {
+ Contract.Requires(subst != null);
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return (Expr)new NormalSubstituter(subst).Visit(expr);
+ }
+
+ /// <summary>
+ /// Apply a substitution to an expression.
+ /// Outside "old" expressions, the substitution "always" is applied; any variable not in
+ /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
+ /// variables in domain(forOld), apply map "always" to variables in
+ /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
+ /// </summary>
+ public static Expr Apply(Substitution always, Substitution forold, Expr expr) {
+ Contract.Requires(always != null);
+ Contract.Requires(forold != null);
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return (Expr)new NormalSubstituter(always, forold).Visit(expr);
+ }
+
+ /// <summary>
+ /// Apply a substitution to an expression replacing "old" expressions.
+ /// Outside "old" expressions, the substitution "always" is applied; any variable not in
+ /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
+ /// variables in domain(forOld), apply map "always" to variables in
+ /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
+ /// </summary>
+ public static Expr ApplyReplacingOldExprs(Substitution always, Substitution forOld, Expr expr) {
+ Contract.Requires(always != null);
+ Contract.Requires(forOld != null);
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return (Expr)new ReplacingOldSubstituter(always, forOld).Visit(expr);
+ }
+
+ public static Expr FunctionCallReresolvingApplyReplacingOldExprs(Substitution always, Substitution forOld, Expr expr, Program program)
+ {
+ Contract.Requires(always != null);
+ Contract.Requires(forOld != null);
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return (Expr)new FunctionCallReresolvingReplacingOldSubstituter(program, always, forOld).Visit(expr);
+ }
+
+ public static Expr FunctionCallReresolvingApply(Substitution always, Substitution forOld, Expr expr, Program program)
+ {
+ Contract.Requires(always != null);
+ Contract.Requires(forOld != null);
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return (Expr)new FunctionCallReresolvingNormalSubstituter(program, always, forOld).Visit(expr);
+ }
+
+ // ----------------------------- Substitutions for Cmd -------------------------------
+
+ /// <summary>
+ /// Apply a substitution to a command. Any variables not in domain(subst)
+ /// is not changed. The substitutions apply within the "old", but the "old"
+ /// expression remains.
+ /// </summary>
+ public static Cmd Apply(Substitution subst, Cmd cmd) {
+ Contract.Requires(subst != null);
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return (Cmd)new NormalSubstituter(subst).Visit(cmd);
+ }
+
+ /// <summary>
+ /// Apply a substitution to a command.
+ /// Outside "old" expressions, the substitution "always" is applied; any variable not in
+ /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
+ /// variables in domain(forOld), apply map "always" to variables in
+ /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
+ /// </summary>
+ public static Cmd Apply(Substitution always, Substitution forOld, Cmd cmd)
+ {
+ Contract.Requires(always != null);
+ Contract.Requires(forOld != null);
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return (Cmd)new NormalSubstituter(always, forOld).Visit(cmd);
+ }
+
+ /// <summary>
+ /// Apply a substitution to a command replacing "old" expressions.
+ /// Outside "old" expressions, the substitution "always" is applied; any variable not in
+ /// domain(always) is not changed. Inside "old" expressions, apply map "forOld" to
+ /// variables in domain(forOld), apply map "always" to variables in
+ /// domain(always)-domain(forOld), and leave variable unchanged otherwise.
+ /// </summary>
+ public static Cmd ApplyReplacingOldExprs(Substitution always, Substitution forOld, Cmd cmd) {
+ Contract.Requires(always != null);
+ Contract.Requires(forOld != null);
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return (Cmd)new ReplacingOldSubstituter(always, forOld).Visit(cmd);
+ }
+
+ // ----------------------------- Substitutions for QKeyValue -------------------------------
+
+ /// <summary>
+ /// Apply a substitution to a list of attributes. Any variables not in domain(subst)
+ /// is not changed. The substitutions apply within the "old", but the "old"
+ /// expression remains.
+ /// </summary>
+ public static QKeyValue Apply(Substitution subst, QKeyValue kv) {
+ Contract.Requires(subst != null);
+ if (kv == null) {
+ return null;
+ } else {
+ return (QKeyValue)new NormalSubstituter(subst).Visit(kv);
+ }
+ }
+
+ /// <summary>
+ /// Apply a substitution to a list of attributes replacing "old" expressions.
+ /// For a further description, see "ApplyReplacingOldExprs" above for Expr.
+ /// </summary>
+ public static QKeyValue ApplyReplacingOldExprs(Substitution always, Substitution forOld, QKeyValue kv) {
+ Contract.Requires(always != null);
+ Contract.Requires(forOld != null);
+ if (kv == null) {
+ return null;
+ } else {
+ return (QKeyValue)new ReplacingOldSubstituter(always, forOld).Visit(kv);
+ }
+ }
+
+ // ------------------------------------------------------------
+
+ private class NormalSubstituter : Duplicator
+ {
+ private readonly Substitution/*!*/ always;
+ private readonly Substitution/*!*/ forold;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(always != null);
+ Contract.Invariant(forold != null);
+ }
+
+ public NormalSubstituter(Substitution subst)
+ : base() {
+ Contract.Requires(subst != null);
+ this.always = subst;
+ this.forold = Substituter.SubstitutionFromHashtable(new Dictionary<Variable, Expr>());
+ }
+
+ public NormalSubstituter(Substitution subst, Substitution forold)
+ : base()
+ {
+ Contract.Requires(subst != null);
+ this.always = subst;
+ this.forold = forold;
+ }
+
+ private bool insideOldExpr = false;
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Expr/*?*/ e = null;
+
+ if (insideOldExpr)
+ {
+ e = forold(cce.NonNull(node.Decl));
+ }
+
+ if (e == null)
+ {
+ e = always(cce.NonNull(node.Decl));
+ }
+
+ return e == null ? base.VisitIdentifierExpr(node) : e;
+ }
+
+ public override Expr VisitOldExpr(OldExpr node)
+ {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ bool previouslyInOld = insideOldExpr;
+ insideOldExpr = true;
+ Expr/*!*/ e = (Expr/*!*/)cce.NonNull(this.Visit(node.Expr));
+ insideOldExpr = previouslyInOld;
+ return new OldExpr(node.tok, e);
+ }
+ }
+
+ private sealed class FunctionCallReresolvingReplacingOldSubstituter : ReplacingOldSubstituter
+ {
+ readonly Program Program;
+
+ public FunctionCallReresolvingReplacingOldSubstituter(Program program, Substitution always, Substitution forold)
+ : base(always, forold)
+ {
+ Program = program;
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ var result = base.VisitNAryExpr(node);
+ var nAryExpr = result as NAryExpr;
+ if (nAryExpr != null)
+ {
+ var funCall = nAryExpr.Fun as FunctionCall;
+ if (funCall != null)
+ {
+ funCall.Func = Program.FindFunction(funCall.FunctionName);
+ }
+ }
+ return result;
+ }
+ }
+
+ private sealed class FunctionCallReresolvingNormalSubstituter : NormalSubstituter
+ {
+ readonly Program Program;
+
+ public FunctionCallReresolvingNormalSubstituter(Program program, Substitution always, Substitution forold)
+ : base(always, forold)
+ {
+ Program = program;
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ var result = base.VisitNAryExpr(node);
+ var nAryExpr = result as NAryExpr;
+ if (nAryExpr != null)
+ {
+ var funCall = nAryExpr.Fun as FunctionCall;
+ if (funCall != null)
+ {
+ funCall.Func = Program.FindFunction(funCall.FunctionName);
+ }
+ }
+ return result;
+ }
+ }
+
+ private class ReplacingOldSubstituter : Duplicator {
+ private readonly Substitution/*!*/ always;
+ private readonly Substitution/*!*/ forold;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(always != null);
+ Contract.Invariant(forold != null);
+ }
+
+ public ReplacingOldSubstituter(Substitution always, Substitution forold)
+ : base() {
+ Contract.Requires(forold != null);
+ Contract.Requires(always != null);
+ this.always = always;
+ this.forold = forold;
+ }
+
+ private bool insideOldExpr = false;
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Expr/*?*/ e = null;
+
+ if (insideOldExpr) {
+ e = forold(cce.NonNull(node.Decl));
+ }
+
+ if (e == null) {
+ e = always(cce.NonNull(node.Decl));
+ }
+
+ return e == null ? base.VisitIdentifierExpr(node) : e;
+ }
+
+ public override Expr VisitOldExpr(OldExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ bool previouslyInOld = insideOldExpr;
+ insideOldExpr = true;
+ Expr/*!*/ e = (Expr/*!*/)cce.NonNull(this.Visit(node.Expr));
+ insideOldExpr = previouslyInOld;
+ return e;
+ }
+ }
+ }
+ #endregion
+}
diff --git a/Source/Core/Graph.as b/Source/Core/Graph.as
deleted file mode 100644
index 1466c341..00000000
--- a/Source/Core/Graph.as
+++ /dev/null
@@ -1,352 +0,0 @@
-using System.Collections;
-namespace Graphing;
-
-type Node = object;
-type Edge = <Node,Node>;
-
-class PreHeader {
- Node myHeader;
- PreHeader(Node h) { myHeader = h; }
-
- public override string ToString() { return "#" + myHeader.ToString(); }
-}
-
-public class Graph {
- private Set<Edge> es;
- private Set<Node> ns;
- private Node source;
- private bool reducible;
- private Set<Node> headers;
- private Map<Node,Set<Node>> backEdgeNodes;
- private Map<Edge,Set<Node>> naturalLoops;
- private Map<Node,Set<Node>> dominatorMap;
- private Map<Node,Set<Node>> immediateDominatorMap;
-
- public Graph(Set<Edge> edges)
- {
- es = edges;
- ns = Set<Node>{ x : <x,y> in es } + Set<Node>{ y : <x,y> in es };
- }
- public Graph()
- { es = Set<Edge>{}; ns = Set<Node>{}; }
-
- public void AddSource(Node x)
- {
- ns += Set<Node>{x};
- source = x;
- }
- public void AddEdge(Node source, Node dest)
- {
- es += Set<Edge>{<source,dest>};
- ns += Set<Node>{source, dest};
- }
-
- public Set<Node> Nodes { get { return ns; } }
- public Set<Edge> Edges { get { return es; } }
-
- public bool Edge(Node x, Node y) { return <x,y> in es; }
- Set<Node> predecessors(Node n)
- {
- Set<Node> result = Set{ x : x in Nodes, Edge(x,n) };
- return result;
- }
- public override string ToString() { return es.ToString(); }
-
- public IEnumerable TopologicalSort()
- {
- <bool,Seq<Node>> <res,ns> = TopSort(this);
- return res ? ns : null;
- }
- public void ComputeLoops()
- {
- <bool, Set<Node>, Map<Node,Set<Node>>, Map<Edge,Set<Node>>>
- <reducible,headers,backEdgeNodes,naturalLoops> = Reducible(this,this.source);
- this.reducible = reducible;
- this.headers = headers;
- this.backEdgeNodes = backEdgeNodes;
- this.naturalLoops = naturalLoops;
- return;
- }
- public bool Reducible { get { return reducible; } }
- public IEnumerable Headers { get { return headers; } }
- public IEnumerable BackEdgeNodes(Node h) { return h in backEdgeNodes ? backEdgeNodes[h] : null; }
- public IEnumerable NaturalLoops(Node header, Node backEdgeNode)
- { Edge e = <backEdgeNode,header>; return e in naturalLoops ? naturalLoops[e] : null; }
- public bool Acyclic { get { return Acyclic(this,this.source); } }
- public Map<Node,Set<Node>> DominatorMap
- {
- get {
- if (dominatorMap == null) dominatorMap = ComputeDominators(this, source);
- return dominatorMap;
- }
- }
- public Map<Node,Set<Node>> ImmediateDominatorMap
- {
- get {
- if (immediateDominatorMap == null)
- {
- immediateDominatorMap = Map{};
- foreach(Node y in Nodes)
- {
- Set<Node> nodesThatYDominates = Set{ x : x in Nodes, x != y && (y in DominatorMap[x]) };
- Set<Node> immediateDominatees = Set{ x : x in nodesThatYDominates,
- !(Exists{ v != y && v != x && (v in DominatorMap[x]) : v in nodesThatYDominates })
- };
- immediateDominatorMap[y] = immediateDominatees;
- }
- }
- return immediateDominatorMap;
- }
- }
- public Set<Node> ImmediatelyDominatedBy(Node n) { return ImmediateDominatorMap[n]; }
-
-}
-
-// From AsmL distribution example: TopologicalSort
-<bool,Seq<Node>> TopSort(Graph g)
-{
- Seq<Node> S = Seq{};
- Set<Node> V = g.Nodes;
- bool change = true;
- while ( change )
- {
- change = false;
- Set<Node> X = V - ((Set<Node>) S);
- if ( X != Set{} )
- {
- Node temp = Choose{ v : v in X, !(Exists{ g.Edge(u,v) : u in X }) ifnone null };
- if ( temp == null )
- {
- return <false,Seq<Node>{}>;
- }
- else if ( temp != Seq<Node>{} )
- {
- S += Seq{temp};
- change = true;
- }
- }
- }
- return <true,S>;
-}
-
-bool Acyclic(Graph g, Node source)
-{
- <bool,Seq<Node>> <acyc,xs> = TopSort(g);
- return acyc;
-}
-
-//
-// [Dragon, pp. 670--671]
-// returns map D s.t. d in D(n) iff d dom n
-//
-Map<Node,Set<Node>> ComputeDominators(Graph g, Node source) {
- Set<Node> N = g.Nodes;
- Set<Node> nonSourceNodes = N - Set{source};
- Map<Node,Set<Node>> D = Map{};
- D[source] = Set<Node>{ source };
- foreach (Node n in nonSourceNodes)
- {
- D[n] = N;
- }
- bool change = true;
- while ( change )
- {
- change = false;
- foreach (Node n in nonSourceNodes)
- {
- Set<Set<Node>> allPreds = Set{ D[p] : p in g.predecessors(n) };
- Set<Node> temp = Set<Node>{ n } + BigIntersect(allPreds);
- if ( temp != D[n] )
- {
- change = true;
- D[n] = temp;
- }
- }
- }
- return D;
-}
-
-// [Dragon, Fig. 10.15, p. 604. Algorithm for constructing the natural loop.]
-Set<Node> NaturalLoop(Graph g, Edge backEdge)
-{
- <Node,Node> <n,d> = backEdge;
- Seq<Node> stack = Seq{};
- Set<Node> loop = Set{ d };
- if ( n != d ) // then n is not in loop
- {
- loop += Set{ n };
- stack = Seq{ n } + stack; // push n onto stack
- }
- while ( stack != Seq{} ) // not empty
- {
- Node m = Head(stack);
- stack = Tail(stack); // pop stack
- foreach (Node p in g.predecessors(m))
- {
- if ( !(p in loop) )
- {
- loop += Set{ p };
- stack = Seq{ p } + stack; // push p onto stack
- }
- }
- }
- return loop;
-}
-
-// [Dragon, p. 606]
-<bool, Set<Node>, Map<Node,Set<Node>>, Map<Edge,Set<Node>>>
- Reducible(Graph g, Node source) {
- // first, compute the dom relation
- Map<Node,Set<Node>> D = g.DominatorMap;
- return Reducible(g,source,D);
-}
-
-// [Dragon, p. 606]
-<bool, Set<Node>, Map<Node,Set<Node>>, Map<Edge,Set<Node>>>
- Reducible(Graph g, Node source, Map<Node,Set<Node>> DomRelation) {
-
- Set<Edge> edges = g.Edges;
- Set<Edge> backEdges = Set{};
- Set<Edge> nonBackEdges = Set{};
- foreach (Edge e in edges)
- {
- <Node,Node> <x,y> = e; // so there is an edge from x to y
- if ( y in DomRelation[x] ) // y dom x: which means y dominates x
- {
- backEdges += Set{ e };
- }
- else
- {
- nonBackEdges += Set{ e };
- }
- }
- if ( !Acyclic(new Graph(nonBackEdges), source) )
- {
- return <false,Set<Node>{},Map<Node,Set<Node>>{},Map<Edge,Set<Node>>{}>;
- }
- else
- {
- Set<Node> headers = Set{ d : <n,d> in backEdges };
- Map<Node,Set<Node>> backEdgeNodes = Map{ h -> bs : h in headers, bs = Set<Node>{ b : <b,x> in backEdges, x == h } };
- Map<Edge,Set<Node>> naturalLoops = Map{ e -> NaturalLoop(g,e) : e in backEdges };
-
- return <true, headers, backEdgeNodes, naturalLoops>;
- }
-}
-
-// [Dragon, p. 606]
-bool OldReducible(Graph g, Node source) {
- // first, compute the dom relation
- Map<Node,Set<Node>> D = ComputeDominators(g, source);
- return OldReducible(g,source,D);
-}
-
-// [Dragon, p. 606]
-bool OldReducible(Graph g, Node source, Map<Node,Set<Node>> DomRelation) {
-
- Set<Edge> edges = g.Edges;
- Set<Edge> backEdges = Set{};
- Set<Edge> nonBackEdges = Set{};
- foreach (Edge e in edges)
- {
- <Node,Node> <x,y> = e;
- if ( y in DomRelation[x] ) // y dom x
- {
- backEdges += Set{ e };
- }
- else
- {
- nonBackEdges += Set{ e };
- }
- }
- WriteLine("backEdges: " + backEdges);
- WriteLine("nonBackEdges: " + nonBackEdges);
- if ( Acyclic(new Graph(nonBackEdges), source) )
- {
- foreach(Edge e in backEdges)
- {
- Set<Node> naturalLoop = NaturalLoop(g,e);
- WriteLine("Natural loop for back edge '" + e + "' is: " + naturalLoop);
- }
- Set<Node> headers = Set{ d : <n,d> in backEdges };
- WriteLine("Loop headers = " + headers);
-
- edges -= backEdges; // this cuts all of the back edges
- foreach (Node h in headers)
- {
- Set<Edge> bs = Set{ <n,d> : <n,d> in backEdges, d == h };
- Set<Node> preds = Set<Node>{ p : <p,y> in edges, y == h };
- Node preheader = new PreHeader(h);
- edges += Set{ <preheader,h> };
- foreach (Node p in preds)
- {
- edges -= Set{ <p,h> };
- edges += Set{ <p,preheader> };
- }
- }
- Graph newGraph = new Graph(edges);
- WriteLine("transformed graph = " + newGraph);
- return true;
- }
- else
- {
- return false;
- }
-}
-
-void Main()
-{
- Graph g;
- Map<Node,Set<Node>> D;
-/*
- g = new Graph(Set<Edge>{ <1,2>, <1,3>, <2,3> });
- g.AddSource(1);
- Map<Node,Set<Node>> doms = ComputeDominators(g,1);
- WriteLine(doms);
-*/
- g = new Graph(Set<Edge>{
- <1,2>, <1,3>,
- <2,3>,
- <3,4>,
- <4,3>, <4,5>, <4,6>,
- <5,7>,
- <6,7>,
- <7,4>, <7,8>,
- <8,3>, <8,9>, <8,10>,
- <9,1>,
- <10,7>
- });
- g.AddSource(1);
- WriteLine("G = " + g);
- D = ComputeDominators(g,1);
- WriteLine("Dom relation: " + D);
- WriteLine("G's Dominator Map = " + g.DominatorMap);
- WriteLine("G's Immediate Dominator Map = " + g.ImmediateDominatorMap);
- WriteLine("G is reducible: " + OldReducible(g,1,D));
- g.ComputeLoops();
-
- WriteLine("");
-
- g = new Graph(Set<Edge>{ <1,2>, <1,3>, <2,3>, <3,2> });
- g.AddSource(1);
- WriteLine("G = " + g);
- D = ComputeDominators(g,1);
- WriteLine("Dom relation: " + D);
- WriteLine("G's Dominator Map = " + g.DominatorMap);
- WriteLine("G's Immediate Dominator Map = " + g.ImmediateDominatorMap);
- WriteLine("G is reducible: " + OldReducible(g,1,D));
- g.ComputeLoops();
-
- WriteLine("");
-
- g = new Graph(Set<Edge>{ <1,2>, <2,3>, <2,4>, <3,2> });
- g.AddSource(1);
- WriteLine("G = " + g);
- WriteLine("G's Dominator Map = " + g.DominatorMap);
- WriteLine("G's Immediate Dominator Map = " + g.ImmediateDominatorMap);
-// D = ComputeDominators(g,1);
-// WriteLine("Dom relation: " + D);
-// WriteLine("G is reducible: " + OldReducible(g,1,D));
- g.ComputeLoops();
-
-} \ No newline at end of file
diff --git a/Source/Core/Inline.cs b/Source/Core/Inline.cs
index cfeaeb8a..958051d5 100644
--- a/Source/Core/Inline.cs
+++ b/Source/Core/Inline.cs
@@ -1,770 +1,770 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.Boogie {
-
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics.Contracts;
- using BoogiePL=Microsoft.Boogie;
- using System.Diagnostics;
- using System.Text.RegularExpressions; // for procedure inlining
-
- public delegate void InlineCallback(Implementation/*!*/ impl);
-
- public class Inliner : Duplicator {
- protected bool inlinedSomething;
-
- protected Program program;
-
- private InlineCallback inlineCallback;
-
- protected CodeCopier/*!*/ codeCopier;
-
- protected Dictionary<string/*!*/, int>/*!*/ /* Procedure.Name -> int */ recursiveProcUnrollMap;
-
- protected Dictionary<string/*!*/, int>/*!*/ /* Procedure.Name -> int */ inlinedProcLblMap;
-
- protected int inlineDepth;
-
- protected List<Variable>/*!*/ newLocalVars;
-
- protected List<IdentifierExpr>/*!*/ newModifies;
-
- protected string prefix;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(program != null);
- Contract.Invariant(newLocalVars != null);
- Contract.Invariant(newModifies != null);
- Contract.Invariant(codeCopier != null);
- Contract.Invariant(recursiveProcUnrollMap != null);
- Contract.Invariant(inlinedProcLblMap != null);
- }
-
- public override Expr VisitCodeExpr(CodeExpr node)
- {
- Inliner codeExprInliner = new Inliner(program, inlineCallback, CommandLineOptions.Clo.InlineDepth);
- codeExprInliner.newLocalVars.AddRange(node.LocVars);
- codeExprInliner.inlinedProcLblMap = this.inlinedProcLblMap;
- List<Block> newCodeExprBlocks = codeExprInliner.DoInlineBlocks(node.Blocks, ref inlinedSomething);
- return new CodeExpr(codeExprInliner.newLocalVars, newCodeExprBlocks);
- }
-
- protected void NextInlinedProcLabel(string procName) {
- Contract.Requires(procName != null);
- int currentId;
- if (inlinedProcLblMap.TryGetValue(procName, out currentId)) {
- inlinedProcLblMap[procName] = currentId + 1;
- } else {
- inlinedProcLblMap.Add(procName, 0);
- }
- }
-
- protected string GetInlinedProcLabel(string procName) {
- Contract.Requires(procName != null);
- Contract.Ensures(Contract.Result<string>() != null);
- return prefix + procName + "$" + inlinedProcLblMap[procName];
- }
-
- protected string GetProcVarName(string procName, string formalName) {
- Contract.Requires(formalName != null);
- Contract.Requires(procName != null);
- Contract.Ensures(Contract.Result<string>() != null);
- return GetInlinedProcLabel(procName) + "$" + formalName;
- }
-
- public Inliner(Program program, InlineCallback cb, int inlineDepth) {
- this.program = program;
- this.inlinedProcLblMap = new Dictionary<string/*!*/, int>();
- this.recursiveProcUnrollMap = new Dictionary<string/*!*/, int>();
- this.inlineDepth = inlineDepth;
- this.codeCopier = new CodeCopier();
- this.inlineCallback = cb;
- this.newLocalVars = new List<Variable>();
- this.newModifies = new List<IdentifierExpr>();
- this.prefix = null;
- }
-
- // This method calculates a prefix (storing it in the prefix field) so that prepending it to any string
- // is guaranteed not to create a conflict with the names of variables and blocks in scope inside impl.
- protected void ComputePrefix(Program program, Implementation impl)
- {
- this.prefix = "inline$";
- foreach (var v in impl.InParams)
- {
- DistinguishPrefix(v.Name);
- }
- foreach (var v in impl.OutParams)
- {
- DistinguishPrefix(v.Name);
- }
- foreach (var v in impl.LocVars)
- {
- DistinguishPrefix(v.Name);
- }
- foreach (var v in program.GlobalVariables)
- {
- DistinguishPrefix(v.Name);
- }
- foreach (Block b in impl.Blocks)
- {
- DistinguishPrefix(b.Label);
- }
- }
-
- private void DistinguishPrefix(string s)
- {
- if (!s.StartsWith(prefix)) return;
- for (int i = prefix.Length; i < s.Length; i++)
- {
- prefix = prefix + "$";
- if (s[i] != '$') break;
- }
- if (prefix == s)
- {
- prefix = prefix + "$";
- }
- }
-
- protected static void ProcessImplementation(Program program, Implementation impl, Inliner inliner) {
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
-
- inliner.ComputePrefix(program, impl);
-
- inliner.newLocalVars.AddRange(impl.LocVars);
- inliner.newModifies.AddRange(impl.Proc.Modifies);
-
- bool inlined = false;
- List<Block> newBlocks = inliner.DoInlineBlocks(impl.Blocks, ref inlined);
- Contract.Assert(cce.NonNullElements(newBlocks));
-
- if (!inlined)
- return;
-
- impl.InParams = new List<Variable>(impl.InParams);
- impl.OutParams = new List<Variable>(impl.OutParams);
- impl.LocVars = inliner.newLocalVars;
- impl.Proc.Modifies = inliner.newModifies;
- impl.Blocks = newBlocks;
-
- impl.ResetImplFormalMap();
-
- // we need to resolve the new code
- inliner.ResolveImpl(impl);
-
- if (CommandLineOptions.Clo.PrintInlined) {
- inliner.EmitImpl(impl);
- }
- }
-
- public static void ProcessImplementationForHoudini(Program program, Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Requires(program != null);
- Contract.Requires(impl.Proc != null);
- ProcessImplementation(program, impl, new Inliner(program, null, CommandLineOptions.Clo.InlineDepth));
- }
-
- public static void ProcessImplementation(Program program, Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Requires(program != null);
- Contract.Requires(impl.Proc != null);
- ProcessImplementation(program, impl, new Inliner(program, null, -1));
- }
-
- protected void EmitImpl(Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
- Console.WriteLine("after inlining procedure calls");
- impl.Proc.Emit(new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false), 0);
- impl.Emit(new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false), 0);
- }
-
- private sealed class DummyErrorSink : IErrorSink {
- public void Error(IToken tok, string msg) {
- //Contract.Requires(msg != null);
- //Contract.Requires(tok != null);
- // FIXME
- // noop.
- // This is required because during the resolution, some resolution errors happen
- // (such as the ones caused addion of loop invariants J_(block.Label) by the AI package
- }
- }
-
- protected void ResolveImpl(Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Ensures(impl.Proc != null);
- ResolutionContext rc = new ResolutionContext(new DummyErrorSink());
-
- foreach (var decl in program.TopLevelDeclarations) {
- decl.Register(rc);
- }
-
- impl.Proc = null; // to force Resolve() redo the operation
- impl.Resolve(rc);
-
- TypecheckingContext tc = new TypecheckingContext(new DummyErrorSink());
-
- impl.Typecheck(tc);
- }
-
- // Redundant for this class; but gives a chance for other classes to
- // override this and implement their own inlining policy
- protected virtual int GetInlineCount(CallCmd callCmd, Implementation impl)
- {
- return GetInlineCount(impl);
- }
-
- // returns true if it is ok to further unroll the procedure
- // otherwise, the procedure is not inlined at the call site
- protected int GetInlineCount(Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
-
- string/*!*/ procName = impl.Name;
- Contract.Assert(procName != null);
- int c;
- if (recursiveProcUnrollMap.TryGetValue(procName, out c)) {
- return c;
- }
-
- c = -1; // TryGetValue above always overwrites c
- impl.CheckIntAttribute("inline", ref c);
- // procedure attribute overrides implementation
- impl.Proc.CheckIntAttribute("inline", ref c);
-
- recursiveProcUnrollMap[procName] = c;
- return c;
- }
-
- void CheckRecursion(Implementation impl, Stack<Procedure/*!*/>/*!*/ callStack) {
- Contract.Requires(impl != null);
- Contract.Requires(cce.NonNullElements(callStack));
- foreach (Procedure/*!*/ p in callStack) {
- Contract.Assert(p != null);
- if (p == impl.Proc) {
- string msg = "";
- foreach (Procedure/*!*/ q in callStack) {
- Contract.Assert(q != null);
- msg = q.Name + " -> " + msg;
- }
- msg += p.Name;
- //checkingCtx.Error(impl, "inlined procedure is recursive, call stack: {0}", msg);
- }
- }
- }
-
- private int InlineCallCmd(Block block, CallCmd callCmd, Implementation impl, List<Cmd> newCmds, List<Block> newBlocks, int lblCount)
- {
- Contract.Assume(impl != null);
- Contract.Assert(cce.NonNull(impl.OriginalBlocks).Count > 0);
-
- // do inline now
- int nextlblCount = lblCount + 1;
- string nextBlockLabel = block.Label + "$" + nextlblCount;
-
- // run the callback before each inline
- if (inlineCallback != null)
- {
- inlineCallback(impl);
- }
-
- // increment the counter for the procedure to be used in constructing the locals and formals
- NextInlinedProcLabel(impl.Proc.Name);
-
- BeginInline(impl);
-
- List<Block/*!*/>/*!*/ inlinedBlocks = CreateInlinedBlocks(callCmd, impl, nextBlockLabel);
- Contract.Assert(cce.NonNullElements(inlinedBlocks));
-
- EndInline();
-
- if (inlineDepth >= 0)
- {
- Debug.Assert(inlineDepth > 0);
- inlineDepth = inlineDepth - 1;
- }
- else
- {
- recursiveProcUnrollMap[impl.Name] = recursiveProcUnrollMap[impl.Name] - 1;
- }
-
- bool inlinedSomething = true;
- inlinedBlocks = DoInlineBlocks(inlinedBlocks, ref inlinedSomething);
-
- if (inlineDepth >= 0)
- {
- inlineDepth = inlineDepth + 1;
- }
- else
- {
- recursiveProcUnrollMap[impl.Name] = recursiveProcUnrollMap[impl.Name] + 1;
- }
-
- Block/*!*/ startBlock = inlinedBlocks[0];
- Contract.Assert(startBlock != null);
-
- GotoCmd gotoCmd = new GotoCmd(Token.NoToken, new List<String> { startBlock.Label });
- Block newBlock = new Block(block.tok, ((lblCount == 0) ? (block.Label) : (block.Label + "$" + lblCount)), newCmds, gotoCmd);
-
- newBlocks.Add(newBlock);
- newBlocks.AddRange(inlinedBlocks);
-
- return nextlblCount;
- }
-
- public virtual List<Block/*!*/>/*!*/ DoInlineBlocks(List<Block/*!*/>/*!*/ blocks, ref bool inlinedSomething) {
- Contract.Requires(cce.NonNullElements(blocks));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
- List<Block/*!*/>/*!*/ newBlocks = new List<Block/*!*/>();
-
- foreach (Block block in blocks) {
- TransferCmd/*!*/ transferCmd = cce.NonNull(block.TransferCmd);
- List<Cmd> cmds = block.Cmds;
- List<Cmd> newCmds = new List<Cmd>();
- int lblCount = 0;
-
- for (int i = 0; i < cmds.Count; ++i)
- {
- Cmd cmd = cmds[i];
-
- if (cmd is CallCmd)
- {
- CallCmd callCmd = (CallCmd)cmd;
- Implementation impl = FindProcImpl(program, callCmd.Proc);
- if (impl == null)
- {
- newCmds.Add(codeCopier.CopyCmd(callCmd));
- continue;
- }
- int inline = inlineDepth >= 0 ? inlineDepth : GetInlineCount(callCmd, impl);
- if (inline > 0)
- {
- inlinedSomething = true;
- lblCount = InlineCallCmd(block, callCmd, impl, newCmds, newBlocks, lblCount);
- newCmds = new List<Cmd>();
- }
- else if (inline == 0)
- {
- inlinedSomething = true;
- if (CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assert)
- {
- // add assert
- newCmds.Add(new AssertCmd(callCmd.tok, Expr.False));
- }
- else if (CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assume)
- {
- // add assume
- newCmds.Add(new AssumeCmd(callCmd.tok, Expr.False));
- }
- else
- {
- // add call
- newCmds.Add(codeCopier.CopyCmd(callCmd));
- }
- }
- else
- {
- newCmds.Add(codeCopier.CopyCmd(callCmd));
- }
- }
- else if (cmd is PredicateCmd)
- {
- PredicateCmd predCmd = (PredicateCmd)cmd;
- this.inlinedSomething = false;
- Expr newExpr = this.VisitExpr(predCmd.Expr);
- if (this.inlinedSomething)
- {
- inlinedSomething = true;
- PredicateCmd newPredCmd = (PredicateCmd)codeCopier.CopyCmd(predCmd);
- newPredCmd.Expr = newExpr;
- newCmds.Add(newPredCmd);
- }
- else
- {
- newCmds.Add(codeCopier.CopyCmd(predCmd));
- }
- }
- else if (cmd is AssignCmd)
- {
- AssignCmd assignCmd = (AssignCmd)cmd;
- this.inlinedSomething = false;
- List<Expr> newRhss = new List<Expr>();
- foreach (Expr rhsExpr in assignCmd.Rhss)
- {
- newRhss.Add(this.VisitExpr(rhsExpr));
- }
- if (this.inlinedSomething)
- {
- inlinedSomething = true;
- AssignCmd newAssignCmd = (AssignCmd)codeCopier.CopyCmd(assignCmd);
- newAssignCmd.Rhss = newRhss;
- newCmds.Add(newAssignCmd);
- }
- else
- {
- newCmds.Add(codeCopier.CopyCmd(assignCmd));
- }
- }
- else
- {
- newCmds.Add(codeCopier.CopyCmd(cmd));
- }
- }
-
- Block newBlock = new Block(block.tok, ((lblCount == 0) ? (block.Label) : (block.Label + "$" + lblCount)), newCmds, codeCopier.CopyTransferCmd(transferCmd));
- newBlocks.Add(newBlock);
- }
-
- return newBlocks;
- }
-
- protected void BeginInline(Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
- Contract.Requires(newModifies != null);
- Contract.Requires(newLocalVars != null);
-
- Dictionary<Variable, Expr> substMap = new Dictionary<Variable, Expr>();
- Procedure proc = impl.Proc;
-
- foreach (Variable/*!*/ locVar in cce.NonNull(impl.OriginalLocVars)) {
- Contract.Assert(locVar != null);
- LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, locVar.Name), locVar.TypedIdent.Type, locVar.TypedIdent.WhereExpr));
- localVar.Attributes = locVar.Attributes; // copy attributes
- newLocalVars.Add(localVar);
- IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
- substMap.Add(locVar, ie);
- }
-
- for (int i = 0; i < impl.InParams.Count; i++) {
- Variable inVar = cce.NonNull(impl.InParams[i]);
- LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, inVar.Name), inVar.TypedIdent.Type, inVar.TypedIdent.WhereExpr));
- newLocalVars.Add(localVar);
- if (impl.Proc != null) localVar.Attributes = impl.Proc.InParams[i].Attributes; // copy attributes
- IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
- substMap.Add(inVar, ie);
- // also add a substitution from the corresponding formal occurring in the PROCEDURE declaration
- Variable procInVar = cce.NonNull(proc.InParams[i]);
- if (procInVar != inVar) {
- substMap.Add(procInVar, ie);
- }
- }
-
- for (int i = 0; i < impl.OutParams.Count; i++) {
- Variable outVar = cce.NonNull(impl.OutParams[i]);
- LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, outVar.Name), outVar.TypedIdent.Type, outVar.TypedIdent.WhereExpr));
- if (impl.Proc != null) localVar.Attributes = impl.Proc.OutParams[i].Attributes; // copy attributes
- newLocalVars.Add(localVar);
- IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
- substMap.Add(outVar, ie);
- // also add a substitution from the corresponding formal occurring in the PROCEDURE declaration
- Variable procOutVar = cce.NonNull(proc.OutParams[i]);
- if (procOutVar != outVar) {
- substMap.Add(procOutVar, ie);
- }
- }
-
- Dictionary<Variable, Expr> substMapOld = new Dictionary<Variable, Expr>();
-
- foreach (IdentifierExpr/*!*/ mie in proc.Modifies) {
- Contract.Assert(mie != null);
- Variable/*!*/ mVar = cce.NonNull(mie.Decl);
- LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, mVar.Name), mVar.TypedIdent.Type));
- newLocalVars.Add(localVar);
- IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
- substMapOld.Add(mVar, ie);
- // FIXME why are we doing this? the modifies list should already include them.
- // add the modified variable to the modifies list of the procedure
- if (!newModifies.Contains(mie)) {
- newModifies.Add(mie);
- }
- }
-
- codeCopier.Subst = Substituter.SubstitutionFromHashtable(substMap);
- codeCopier.OldSubst = Substituter.SubstitutionFromHashtable(substMapOld);
- }
-
- protected void EndInline() {
- codeCopier.Subst = null;
- codeCopier.OldSubst = null;
- }
-
- private Cmd InlinedRequires(CallCmd callCmd, Requires req) {
- Requires/*!*/ reqCopy = (Requires/*!*/)cce.NonNull(req.Clone());
- if (req.Free)
- reqCopy.Condition = Expr.True;
- else
- reqCopy.Condition = codeCopier.CopyExpr(req.Condition);
- AssertCmd/*!*/ a = new AssertRequiresCmd(callCmd, reqCopy);
- a.ErrorDataEnhanced = reqCopy.ErrorDataEnhanced;
- return a;
- }
-
- private Cmd InlinedEnsures(CallCmd callCmd, Ensures ens) {
- if (QKeyValue.FindBoolAttribute(ens.Attributes, "InlineAssume")) {
- return new AssumeCmd(ens.tok, codeCopier.CopyExpr(ens.Condition));
- } else if (ens.Free) {
- return new AssumeCmd(ens.tok, Expr.True);
- } else {
- Ensures/*!*/ ensCopy = (Ensures/*!*/)cce.NonNull(ens.Clone());
- ensCopy.Condition = codeCopier.CopyExpr(ens.Condition);
- return new AssertEnsuresCmd(ensCopy);
- }
- }
-
- private List<Cmd> RemoveAsserts(List<Cmd> cmds) {
- List<Cmd> newCmdSeq = new List<Cmd>();
- for (int i = 0; i < cmds.Count; i++) {
- Cmd cmd = cmds[i];
- if (cmd is AssertCmd) continue;
- newCmdSeq.Add(cmd);
- }
- return newCmdSeq;
- }
-
- // result[0] is the entry block
- protected List<Block/*!*/>/*!*/ CreateInlinedBlocks(CallCmd callCmd, Implementation impl, string nextBlockLabel) {
- Contract.Requires(nextBlockLabel != null);
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
- Contract.Requires(callCmd != null);
- Contract.Requires(codeCopier.Subst != null);
-
- Contract.Requires(codeCopier.OldSubst != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
- List<Block/*!*/>/*!*/ implBlocks = cce.NonNull(impl.OriginalBlocks);
- Contract.Assert(implBlocks.Count > 0);
-
- Procedure proc = impl.Proc;
- string startLabel = implBlocks[0].Label;
-
- List<Block/*!*/>/*!*/ inlinedBlocks = new List<Block/*!*/>();
-
- // create in block
- List<Cmd> inCmds = new List<Cmd>();
-
- // assign in parameters
- for (int i = 0; i < impl.InParams.Count; ++i) {
- Cmd cmd = Cmd.SimpleAssign(impl.tok,
- (IdentifierExpr)cce.NonNull(codeCopier.Subst)(cce.NonNull(impl.InParams[i])),
- cce.NonNull(callCmd.Ins[i]));
- inCmds.Add(cmd);
- }
-
- // inject requires
- for (int i = 0; i < proc.Requires.Count; i++) {
- Requires/*!*/ req = cce.NonNull(proc.Requires[i]);
- inCmds.Add(InlinedRequires(callCmd, req));
- }
-
- List<Variable> locVars = cce.NonNull(impl.OriginalLocVars);
-
- // havoc locals and out parameters in case procedure is invoked in a loop
- List<IdentifierExpr> havocVars = new List<IdentifierExpr>();
- foreach (Variable v in locVars)
- {
- havocVars.Add((IdentifierExpr)codeCopier.Subst(v));
- }
- foreach (Variable v in impl.OutParams)
- {
- havocVars.Add((IdentifierExpr)codeCopier.Subst(v));
- }
- if (havocVars.Count > 0)
- {
- inCmds.Add(new HavocCmd(Token.NoToken, havocVars));
- }
-
- // add where clauses of local vars as assume
- for (int i = 0; i < locVars.Count; ++i) {
- Expr whereExpr = (cce.NonNull(locVars[i])).TypedIdent.WhereExpr;
- if (whereExpr != null) {
- whereExpr = Substituter.Apply(codeCopier.Subst, whereExpr);
- // FIXME we cannot overwrite it, can we?!
- (cce.NonNull(locVars[i])).TypedIdent.WhereExpr = whereExpr;
- AssumeCmd/*!*/ a = new AssumeCmd(Token.NoToken, whereExpr);
- Contract.Assert(a != null);
- inCmds.Add(a);
- }
- }
-
- // add where clauses of output params as assume
- for (int i = 0; i < impl.OutParams.Count; ++i) {
- Expr whereExpr = (cce.NonNull(impl.OutParams[i])).TypedIdent.WhereExpr;
- if (whereExpr != null) {
- whereExpr = Substituter.Apply(codeCopier.Subst, whereExpr);
- // FIXME likewise
- (cce.NonNull(impl.OutParams[i])).TypedIdent.WhereExpr = whereExpr;
- AssumeCmd/*!*/ a = new AssumeCmd(Token.NoToken, whereExpr);
- Contract.Assert(a != null);
- inCmds.Add(a);
- }
- }
-
- // assign modifies old values
- foreach (IdentifierExpr/*!*/ mie in proc.Modifies) {
- Contract.Assert(mie != null);
- Variable/*!*/ mvar = cce.NonNull(mie.Decl);
- AssignCmd assign = Cmd.SimpleAssign(impl.tok, (IdentifierExpr)cce.NonNull(codeCopier.OldSubst(mvar)), mie);
- inCmds.Add(assign);
- }
-
- GotoCmd inGotoCmd = new GotoCmd(callCmd.tok, new List<String> { GetInlinedProcLabel(proc.Name) + "$" + startLabel });
- Block inBlock = new Block(impl.tok, GetInlinedProcLabel(proc.Name) + "$Entry", inCmds, inGotoCmd);
- inlinedBlocks.Add(inBlock);
-
- // inject the blocks of the implementation
- Block intBlock;
- foreach (Block block in implBlocks) {
- List<Cmd> copyCmds = codeCopier.CopyCmdSeq(block.Cmds);
- if (0 <= inlineDepth) {
- copyCmds = RemoveAsserts(copyCmds);
- }
- TransferCmd transferCmd = CreateInlinedTransferCmd(cce.NonNull(block.TransferCmd), GetInlinedProcLabel(proc.Name));
- intBlock = new Block(block.tok, GetInlinedProcLabel(proc.Name) + "$" + block.Label, copyCmds, transferCmd);
- inlinedBlocks.Add(intBlock);
- }
-
- // create out block
- List<Cmd> outCmds = new List<Cmd>();
-
- // inject ensures
- for (int i = 0; i < proc.Ensures.Count; i++) {
- Ensures/*!*/ ens = cce.NonNull(proc.Ensures[i]);
- outCmds.Add(InlinedEnsures(callCmd, ens));
- }
-
- // assign out params
- for (int i = 0; i < impl.OutParams.Count; ++i) {
- Expr/*!*/ cout_exp = (IdentifierExpr)cce.NonNull(codeCopier.Subst(cce.NonNull(impl.OutParams[i])));
- Cmd cmd = Cmd.SimpleAssign(impl.tok, cce.NonNull(callCmd.Outs[i]), cout_exp);
- outCmds.Add(cmd);
- }
-
- // create out block
- GotoCmd outGotoCmd = new GotoCmd(Token.NoToken, new List<String> { nextBlockLabel });
- Block outBlock = new Block(impl.tok, GetInlinedProcLabel(proc.Name) + "$Return", outCmds, outGotoCmd);
- inlinedBlocks.Add(outBlock);
-
- return inlinedBlocks;
- }
-
- protected TransferCmd CreateInlinedTransferCmd(TransferCmd transferCmd, string procLabel) {
- Contract.Requires(procLabel != null);
- Contract.Requires(transferCmd != null);
- TransferCmd newTransferCmd;
-
- GotoCmd gotoCmd = transferCmd as GotoCmd;
- if (gotoCmd != null) {
- List<String> gotoSeq = gotoCmd.labelNames;
- List<String> newGotoSeq = new List<String>();
- foreach (string/*!*/ blockLabel in cce.NonNull(gotoSeq)) {
- Contract.Assert(blockLabel != null);
- newGotoSeq.Add(procLabel + "$" + blockLabel);
- }
- newTransferCmd = new GotoCmd(transferCmd.tok, newGotoSeq);
- } else {
- newTransferCmd = new GotoCmd(transferCmd.tok, new List<String> { procLabel + "$Return" });
- }
-
- return newTransferCmd;
- }
-
- protected static Implementation FindProcImpl(Program program, Procedure proc) {
- Contract.Requires(program != null);
- foreach (var impl in program.Implementations) {
- if (impl.Proc == proc) {
- return impl;
- }
- }
- return null;
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- public class CodeCopier {
- public Substitution Subst;
- public Substitution OldSubst;
-
- public CodeCopier(Dictionary<Variable, Expr> substMap) {
- Contract.Requires(substMap != null);
- Subst = Substituter.SubstitutionFromHashtable(substMap);
- }
-
- public CodeCopier(Dictionary<Variable, Expr> substMap, Dictionary<Variable, Expr> oldSubstMap) {
- Contract.Requires(oldSubstMap != null);
- Contract.Requires(substMap != null);
- Subst = Substituter.SubstitutionFromHashtable(substMap);
- OldSubst = Substituter.SubstitutionFromHashtable(oldSubstMap);
- }
-
- public CodeCopier() {
- }
-
- public List<Cmd> CopyCmdSeq(List<Cmd> cmds) {
- Contract.Requires(cmds != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- List<Cmd> newCmds = new List<Cmd>();
- foreach (Cmd/*!*/ cmd in cmds) {
- Contract.Assert(cmd != null);
- newCmds.Add(CopyCmd(cmd));
- }
- return newCmds;
- }
-
- public TransferCmd CopyTransferCmd(TransferCmd cmd) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<TransferCmd>() != null);
- TransferCmd transferCmd;
- GotoCmd gotocmd = cmd as GotoCmd;
- if (gotocmd != null) {
- Contract.Assert(gotocmd.labelNames != null);
- List<String> labels = new List<String>();
- labels.AddRange(gotocmd.labelNames);
- transferCmd = new GotoCmd(cmd.tok, labels);
- } else {
- ReturnExprCmd returnExprCmd = cmd as ReturnExprCmd;
- if (returnExprCmd != null)
- {
- transferCmd = new ReturnExprCmd(cmd.tok, CopyExpr(returnExprCmd.Expr));
- }
- else
- {
- transferCmd = new ReturnCmd(cmd.tok);
- }
- }
- return transferCmd;
- }
-
- public Cmd CopyCmd(Cmd cmd) {
- Contract.Requires(cmd != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- if (Subst == null) {
- return cmd;
- } else if (OldSubst == null) {
- return Substituter.Apply(Subst, cmd);
- } else {
- return Substituter.ApplyReplacingOldExprs(Subst, OldSubst, cmd);
- }
- }
-
- public Expr CopyExpr(Expr expr) {
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- if (Subst == null) {
- return expr;
- } else if (OldSubst == null) {
- return Substituter.Apply(Subst, expr);
- } else {
- return Substituter.ApplyReplacingOldExprs(Subst, OldSubst, expr);
- }
- }
- } // end class CodeCopier
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.Boogie {
+
+ using System;
+ using System.IO;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics.Contracts;
+ using BoogiePL=Microsoft.Boogie;
+ using System.Diagnostics;
+ using System.Text.RegularExpressions; // for procedure inlining
+
+ public delegate void InlineCallback(Implementation/*!*/ impl);
+
+ public class Inliner : Duplicator {
+ protected bool inlinedSomething;
+
+ protected Program program;
+
+ private InlineCallback inlineCallback;
+
+ protected CodeCopier/*!*/ codeCopier;
+
+ protected Dictionary<string/*!*/, int>/*!*/ /* Procedure.Name -> int */ recursiveProcUnrollMap;
+
+ protected Dictionary<string/*!*/, int>/*!*/ /* Procedure.Name -> int */ inlinedProcLblMap;
+
+ protected int inlineDepth;
+
+ protected List<Variable>/*!*/ newLocalVars;
+
+ protected List<IdentifierExpr>/*!*/ newModifies;
+
+ protected string prefix;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(program != null);
+ Contract.Invariant(newLocalVars != null);
+ Contract.Invariant(newModifies != null);
+ Contract.Invariant(codeCopier != null);
+ Contract.Invariant(recursiveProcUnrollMap != null);
+ Contract.Invariant(inlinedProcLblMap != null);
+ }
+
+ public override Expr VisitCodeExpr(CodeExpr node)
+ {
+ Inliner codeExprInliner = new Inliner(program, inlineCallback, CommandLineOptions.Clo.InlineDepth);
+ codeExprInliner.newLocalVars.AddRange(node.LocVars);
+ codeExprInliner.inlinedProcLblMap = this.inlinedProcLblMap;
+ List<Block> newCodeExprBlocks = codeExprInliner.DoInlineBlocks(node.Blocks, ref inlinedSomething);
+ return new CodeExpr(codeExprInliner.newLocalVars, newCodeExprBlocks);
+ }
+
+ protected void NextInlinedProcLabel(string procName) {
+ Contract.Requires(procName != null);
+ int currentId;
+ if (inlinedProcLblMap.TryGetValue(procName, out currentId)) {
+ inlinedProcLblMap[procName] = currentId + 1;
+ } else {
+ inlinedProcLblMap.Add(procName, 0);
+ }
+ }
+
+ protected string GetInlinedProcLabel(string procName) {
+ Contract.Requires(procName != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ return prefix + procName + "$" + inlinedProcLblMap[procName];
+ }
+
+ protected string GetProcVarName(string procName, string formalName) {
+ Contract.Requires(formalName != null);
+ Contract.Requires(procName != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ return GetInlinedProcLabel(procName) + "$" + formalName;
+ }
+
+ public Inliner(Program program, InlineCallback cb, int inlineDepth) {
+ this.program = program;
+ this.inlinedProcLblMap = new Dictionary<string/*!*/, int>();
+ this.recursiveProcUnrollMap = new Dictionary<string/*!*/, int>();
+ this.inlineDepth = inlineDepth;
+ this.codeCopier = new CodeCopier();
+ this.inlineCallback = cb;
+ this.newLocalVars = new List<Variable>();
+ this.newModifies = new List<IdentifierExpr>();
+ this.prefix = null;
+ }
+
+ // This method calculates a prefix (storing it in the prefix field) so that prepending it to any string
+ // is guaranteed not to create a conflict with the names of variables and blocks in scope inside impl.
+ protected void ComputePrefix(Program program, Implementation impl)
+ {
+ this.prefix = "inline$";
+ foreach (var v in impl.InParams)
+ {
+ DistinguishPrefix(v.Name);
+ }
+ foreach (var v in impl.OutParams)
+ {
+ DistinguishPrefix(v.Name);
+ }
+ foreach (var v in impl.LocVars)
+ {
+ DistinguishPrefix(v.Name);
+ }
+ foreach (var v in program.GlobalVariables)
+ {
+ DistinguishPrefix(v.Name);
+ }
+ foreach (Block b in impl.Blocks)
+ {
+ DistinguishPrefix(b.Label);
+ }
+ }
+
+ private void DistinguishPrefix(string s)
+ {
+ if (!s.StartsWith(prefix)) return;
+ for (int i = prefix.Length; i < s.Length; i++)
+ {
+ prefix = prefix + "$";
+ if (s[i] != '$') break;
+ }
+ if (prefix == s)
+ {
+ prefix = prefix + "$";
+ }
+ }
+
+ protected static void ProcessImplementation(Program program, Implementation impl, Inliner inliner) {
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+
+ inliner.ComputePrefix(program, impl);
+
+ inliner.newLocalVars.AddRange(impl.LocVars);
+ inliner.newModifies.AddRange(impl.Proc.Modifies);
+
+ bool inlined = false;
+ List<Block> newBlocks = inliner.DoInlineBlocks(impl.Blocks, ref inlined);
+ Contract.Assert(cce.NonNullElements(newBlocks));
+
+ if (!inlined)
+ return;
+
+ impl.InParams = new List<Variable>(impl.InParams);
+ impl.OutParams = new List<Variable>(impl.OutParams);
+ impl.LocVars = inliner.newLocalVars;
+ impl.Proc.Modifies = inliner.newModifies;
+ impl.Blocks = newBlocks;
+
+ impl.ResetImplFormalMap();
+
+ // we need to resolve the new code
+ inliner.ResolveImpl(impl);
+
+ if (CommandLineOptions.Clo.PrintInlined) {
+ inliner.EmitImpl(impl);
+ }
+ }
+
+ public static void ProcessImplementationForHoudini(Program program, Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Requires(program != null);
+ Contract.Requires(impl.Proc != null);
+ ProcessImplementation(program, impl, new Inliner(program, null, CommandLineOptions.Clo.InlineDepth));
+ }
+
+ public static void ProcessImplementation(Program program, Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Requires(program != null);
+ Contract.Requires(impl.Proc != null);
+ ProcessImplementation(program, impl, new Inliner(program, null, -1));
+ }
+
+ protected void EmitImpl(Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+ Console.WriteLine("after inlining procedure calls");
+ impl.Proc.Emit(new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false), 0);
+ impl.Emit(new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false), 0);
+ }
+
+ private sealed class DummyErrorSink : IErrorSink {
+ public void Error(IToken tok, string msg) {
+ //Contract.Requires(msg != null);
+ //Contract.Requires(tok != null);
+ // FIXME
+ // noop.
+ // This is required because during the resolution, some resolution errors happen
+ // (such as the ones caused addion of loop invariants J_(block.Label) by the AI package
+ }
+ }
+
+ protected void ResolveImpl(Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Ensures(impl.Proc != null);
+ ResolutionContext rc = new ResolutionContext(new DummyErrorSink());
+
+ foreach (var decl in program.TopLevelDeclarations) {
+ decl.Register(rc);
+ }
+
+ impl.Proc = null; // to force Resolve() redo the operation
+ impl.Resolve(rc);
+
+ TypecheckingContext tc = new TypecheckingContext(new DummyErrorSink());
+
+ impl.Typecheck(tc);
+ }
+
+ // Redundant for this class; but gives a chance for other classes to
+ // override this and implement their own inlining policy
+ protected virtual int GetInlineCount(CallCmd callCmd, Implementation impl)
+ {
+ return GetInlineCount(impl);
+ }
+
+ // returns true if it is ok to further unroll the procedure
+ // otherwise, the procedure is not inlined at the call site
+ protected int GetInlineCount(Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+
+ string/*!*/ procName = impl.Name;
+ Contract.Assert(procName != null);
+ int c;
+ if (recursiveProcUnrollMap.TryGetValue(procName, out c)) {
+ return c;
+ }
+
+ c = -1; // TryGetValue above always overwrites c
+ impl.CheckIntAttribute("inline", ref c);
+ // procedure attribute overrides implementation
+ impl.Proc.CheckIntAttribute("inline", ref c);
+
+ recursiveProcUnrollMap[procName] = c;
+ return c;
+ }
+
+ void CheckRecursion(Implementation impl, Stack<Procedure/*!*/>/*!*/ callStack) {
+ Contract.Requires(impl != null);
+ Contract.Requires(cce.NonNullElements(callStack));
+ foreach (Procedure/*!*/ p in callStack) {
+ Contract.Assert(p != null);
+ if (p == impl.Proc) {
+ string msg = "";
+ foreach (Procedure/*!*/ q in callStack) {
+ Contract.Assert(q != null);
+ msg = q.Name + " -> " + msg;
+ }
+ msg += p.Name;
+ //checkingCtx.Error(impl, "inlined procedure is recursive, call stack: {0}", msg);
+ }
+ }
+ }
+
+ private int InlineCallCmd(Block block, CallCmd callCmd, Implementation impl, List<Cmd> newCmds, List<Block> newBlocks, int lblCount)
+ {
+ Contract.Assume(impl != null);
+ Contract.Assert(cce.NonNull(impl.OriginalBlocks).Count > 0);
+
+ // do inline now
+ int nextlblCount = lblCount + 1;
+ string nextBlockLabel = block.Label + "$" + nextlblCount;
+
+ // run the callback before each inline
+ if (inlineCallback != null)
+ {
+ inlineCallback(impl);
+ }
+
+ // increment the counter for the procedure to be used in constructing the locals and formals
+ NextInlinedProcLabel(impl.Proc.Name);
+
+ BeginInline(impl);
+
+ List<Block/*!*/>/*!*/ inlinedBlocks = CreateInlinedBlocks(callCmd, impl, nextBlockLabel);
+ Contract.Assert(cce.NonNullElements(inlinedBlocks));
+
+ EndInline();
+
+ if (inlineDepth >= 0)
+ {
+ Debug.Assert(inlineDepth > 0);
+ inlineDepth = inlineDepth - 1;
+ }
+ else
+ {
+ recursiveProcUnrollMap[impl.Name] = recursiveProcUnrollMap[impl.Name] - 1;
+ }
+
+ bool inlinedSomething = true;
+ inlinedBlocks = DoInlineBlocks(inlinedBlocks, ref inlinedSomething);
+
+ if (inlineDepth >= 0)
+ {
+ inlineDepth = inlineDepth + 1;
+ }
+ else
+ {
+ recursiveProcUnrollMap[impl.Name] = recursiveProcUnrollMap[impl.Name] + 1;
+ }
+
+ Block/*!*/ startBlock = inlinedBlocks[0];
+ Contract.Assert(startBlock != null);
+
+ GotoCmd gotoCmd = new GotoCmd(Token.NoToken, new List<String> { startBlock.Label });
+ Block newBlock = new Block(block.tok, ((lblCount == 0) ? (block.Label) : (block.Label + "$" + lblCount)), newCmds, gotoCmd);
+
+ newBlocks.Add(newBlock);
+ newBlocks.AddRange(inlinedBlocks);
+
+ return nextlblCount;
+ }
+
+ public virtual List<Block/*!*/>/*!*/ DoInlineBlocks(List<Block/*!*/>/*!*/ blocks, ref bool inlinedSomething) {
+ Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+ List<Block/*!*/>/*!*/ newBlocks = new List<Block/*!*/>();
+
+ foreach (Block block in blocks) {
+ TransferCmd/*!*/ transferCmd = cce.NonNull(block.TransferCmd);
+ List<Cmd> cmds = block.Cmds;
+ List<Cmd> newCmds = new List<Cmd>();
+ int lblCount = 0;
+
+ for (int i = 0; i < cmds.Count; ++i)
+ {
+ Cmd cmd = cmds[i];
+
+ if (cmd is CallCmd)
+ {
+ CallCmd callCmd = (CallCmd)cmd;
+ Implementation impl = FindProcImpl(program, callCmd.Proc);
+ if (impl == null)
+ {
+ newCmds.Add(codeCopier.CopyCmd(callCmd));
+ continue;
+ }
+ int inline = inlineDepth >= 0 ? inlineDepth : GetInlineCount(callCmd, impl);
+ if (inline > 0)
+ {
+ inlinedSomething = true;
+ lblCount = InlineCallCmd(block, callCmd, impl, newCmds, newBlocks, lblCount);
+ newCmds = new List<Cmd>();
+ }
+ else if (inline == 0)
+ {
+ inlinedSomething = true;
+ if (CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assert)
+ {
+ // add assert
+ newCmds.Add(new AssertCmd(callCmd.tok, Expr.False));
+ }
+ else if (CommandLineOptions.Clo.ProcedureInlining == CommandLineOptions.Inlining.Assume)
+ {
+ // add assume
+ newCmds.Add(new AssumeCmd(callCmd.tok, Expr.False));
+ }
+ else
+ {
+ // add call
+ newCmds.Add(codeCopier.CopyCmd(callCmd));
+ }
+ }
+ else
+ {
+ newCmds.Add(codeCopier.CopyCmd(callCmd));
+ }
+ }
+ else if (cmd is PredicateCmd)
+ {
+ PredicateCmd predCmd = (PredicateCmd)cmd;
+ this.inlinedSomething = false;
+ Expr newExpr = this.VisitExpr(predCmd.Expr);
+ if (this.inlinedSomething)
+ {
+ inlinedSomething = true;
+ PredicateCmd newPredCmd = (PredicateCmd)codeCopier.CopyCmd(predCmd);
+ newPredCmd.Expr = newExpr;
+ newCmds.Add(newPredCmd);
+ }
+ else
+ {
+ newCmds.Add(codeCopier.CopyCmd(predCmd));
+ }
+ }
+ else if (cmd is AssignCmd)
+ {
+ AssignCmd assignCmd = (AssignCmd)cmd;
+ this.inlinedSomething = false;
+ List<Expr> newRhss = new List<Expr>();
+ foreach (Expr rhsExpr in assignCmd.Rhss)
+ {
+ newRhss.Add(this.VisitExpr(rhsExpr));
+ }
+ if (this.inlinedSomething)
+ {
+ inlinedSomething = true;
+ AssignCmd newAssignCmd = (AssignCmd)codeCopier.CopyCmd(assignCmd);
+ newAssignCmd.Rhss = newRhss;
+ newCmds.Add(newAssignCmd);
+ }
+ else
+ {
+ newCmds.Add(codeCopier.CopyCmd(assignCmd));
+ }
+ }
+ else
+ {
+ newCmds.Add(codeCopier.CopyCmd(cmd));
+ }
+ }
+
+ Block newBlock = new Block(block.tok, ((lblCount == 0) ? (block.Label) : (block.Label + "$" + lblCount)), newCmds, codeCopier.CopyTransferCmd(transferCmd));
+ newBlocks.Add(newBlock);
+ }
+
+ return newBlocks;
+ }
+
+ protected void BeginInline(Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+ Contract.Requires(newModifies != null);
+ Contract.Requires(newLocalVars != null);
+
+ Dictionary<Variable, Expr> substMap = new Dictionary<Variable, Expr>();
+ Procedure proc = impl.Proc;
+
+ foreach (Variable/*!*/ locVar in cce.NonNull(impl.OriginalLocVars)) {
+ Contract.Assert(locVar != null);
+ LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, locVar.Name), locVar.TypedIdent.Type, locVar.TypedIdent.WhereExpr));
+ localVar.Attributes = locVar.Attributes; // copy attributes
+ newLocalVars.Add(localVar);
+ IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
+ substMap.Add(locVar, ie);
+ }
+
+ for (int i = 0; i < impl.InParams.Count; i++) {
+ Variable inVar = cce.NonNull(impl.InParams[i]);
+ LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, inVar.Name), inVar.TypedIdent.Type, inVar.TypedIdent.WhereExpr));
+ newLocalVars.Add(localVar);
+ if (impl.Proc != null) localVar.Attributes = impl.Proc.InParams[i].Attributes; // copy attributes
+ IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
+ substMap.Add(inVar, ie);
+ // also add a substitution from the corresponding formal occurring in the PROCEDURE declaration
+ Variable procInVar = cce.NonNull(proc.InParams[i]);
+ if (procInVar != inVar) {
+ substMap.Add(procInVar, ie);
+ }
+ }
+
+ for (int i = 0; i < impl.OutParams.Count; i++) {
+ Variable outVar = cce.NonNull(impl.OutParams[i]);
+ LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, outVar.Name), outVar.TypedIdent.Type, outVar.TypedIdent.WhereExpr));
+ if (impl.Proc != null) localVar.Attributes = impl.Proc.OutParams[i].Attributes; // copy attributes
+ newLocalVars.Add(localVar);
+ IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
+ substMap.Add(outVar, ie);
+ // also add a substitution from the corresponding formal occurring in the PROCEDURE declaration
+ Variable procOutVar = cce.NonNull(proc.OutParams[i]);
+ if (procOutVar != outVar) {
+ substMap.Add(procOutVar, ie);
+ }
+ }
+
+ Dictionary<Variable, Expr> substMapOld = new Dictionary<Variable, Expr>();
+
+ foreach (IdentifierExpr/*!*/ mie in proc.Modifies) {
+ Contract.Assert(mie != null);
+ Variable/*!*/ mVar = cce.NonNull(mie.Decl);
+ LocalVariable localVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, GetProcVarName(proc.Name, mVar.Name), mVar.TypedIdent.Type));
+ newLocalVars.Add(localVar);
+ IdentifierExpr ie = new IdentifierExpr(Token.NoToken, localVar);
+ substMapOld.Add(mVar, ie);
+ // FIXME why are we doing this? the modifies list should already include them.
+ // add the modified variable to the modifies list of the procedure
+ if (!newModifies.Contains(mie)) {
+ newModifies.Add(mie);
+ }
+ }
+
+ codeCopier.Subst = Substituter.SubstitutionFromHashtable(substMap);
+ codeCopier.OldSubst = Substituter.SubstitutionFromHashtable(substMapOld);
+ }
+
+ protected void EndInline() {
+ codeCopier.Subst = null;
+ codeCopier.OldSubst = null;
+ }
+
+ private Cmd InlinedRequires(CallCmd callCmd, Requires req) {
+ Requires/*!*/ reqCopy = (Requires/*!*/)cce.NonNull(req.Clone());
+ if (req.Free)
+ reqCopy.Condition = Expr.True;
+ else
+ reqCopy.Condition = codeCopier.CopyExpr(req.Condition);
+ AssertCmd/*!*/ a = new AssertRequiresCmd(callCmd, reqCopy);
+ a.ErrorDataEnhanced = reqCopy.ErrorDataEnhanced;
+ return a;
+ }
+
+ private Cmd InlinedEnsures(CallCmd callCmd, Ensures ens) {
+ if (QKeyValue.FindBoolAttribute(ens.Attributes, "InlineAssume")) {
+ return new AssumeCmd(ens.tok, codeCopier.CopyExpr(ens.Condition));
+ } else if (ens.Free) {
+ return new AssumeCmd(ens.tok, Expr.True);
+ } else {
+ Ensures/*!*/ ensCopy = (Ensures/*!*/)cce.NonNull(ens.Clone());
+ ensCopy.Condition = codeCopier.CopyExpr(ens.Condition);
+ return new AssertEnsuresCmd(ensCopy);
+ }
+ }
+
+ private List<Cmd> RemoveAsserts(List<Cmd> cmds) {
+ List<Cmd> newCmdSeq = new List<Cmd>();
+ for (int i = 0; i < cmds.Count; i++) {
+ Cmd cmd = cmds[i];
+ if (cmd is AssertCmd) continue;
+ newCmdSeq.Add(cmd);
+ }
+ return newCmdSeq;
+ }
+
+ // result[0] is the entry block
+ protected List<Block/*!*/>/*!*/ CreateInlinedBlocks(CallCmd callCmd, Implementation impl, string nextBlockLabel) {
+ Contract.Requires(nextBlockLabel != null);
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+ Contract.Requires(callCmd != null);
+ Contract.Requires(codeCopier.Subst != null);
+
+ Contract.Requires(codeCopier.OldSubst != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+ List<Block/*!*/>/*!*/ implBlocks = cce.NonNull(impl.OriginalBlocks);
+ Contract.Assert(implBlocks.Count > 0);
+
+ Procedure proc = impl.Proc;
+ string startLabel = implBlocks[0].Label;
+
+ List<Block/*!*/>/*!*/ inlinedBlocks = new List<Block/*!*/>();
+
+ // create in block
+ List<Cmd> inCmds = new List<Cmd>();
+
+ // assign in parameters
+ for (int i = 0; i < impl.InParams.Count; ++i) {
+ Cmd cmd = Cmd.SimpleAssign(impl.tok,
+ (IdentifierExpr)cce.NonNull(codeCopier.Subst)(cce.NonNull(impl.InParams[i])),
+ cce.NonNull(callCmd.Ins[i]));
+ inCmds.Add(cmd);
+ }
+
+ // inject requires
+ for (int i = 0; i < proc.Requires.Count; i++) {
+ Requires/*!*/ req = cce.NonNull(proc.Requires[i]);
+ inCmds.Add(InlinedRequires(callCmd, req));
+ }
+
+ List<Variable> locVars = cce.NonNull(impl.OriginalLocVars);
+
+ // havoc locals and out parameters in case procedure is invoked in a loop
+ List<IdentifierExpr> havocVars = new List<IdentifierExpr>();
+ foreach (Variable v in locVars)
+ {
+ havocVars.Add((IdentifierExpr)codeCopier.Subst(v));
+ }
+ foreach (Variable v in impl.OutParams)
+ {
+ havocVars.Add((IdentifierExpr)codeCopier.Subst(v));
+ }
+ if (havocVars.Count > 0)
+ {
+ inCmds.Add(new HavocCmd(Token.NoToken, havocVars));
+ }
+
+ // add where clauses of local vars as assume
+ for (int i = 0; i < locVars.Count; ++i) {
+ Expr whereExpr = (cce.NonNull(locVars[i])).TypedIdent.WhereExpr;
+ if (whereExpr != null) {
+ whereExpr = Substituter.Apply(codeCopier.Subst, whereExpr);
+ // FIXME we cannot overwrite it, can we?!
+ (cce.NonNull(locVars[i])).TypedIdent.WhereExpr = whereExpr;
+ AssumeCmd/*!*/ a = new AssumeCmd(Token.NoToken, whereExpr);
+ Contract.Assert(a != null);
+ inCmds.Add(a);
+ }
+ }
+
+ // add where clauses of output params as assume
+ for (int i = 0; i < impl.OutParams.Count; ++i) {
+ Expr whereExpr = (cce.NonNull(impl.OutParams[i])).TypedIdent.WhereExpr;
+ if (whereExpr != null) {
+ whereExpr = Substituter.Apply(codeCopier.Subst, whereExpr);
+ // FIXME likewise
+ (cce.NonNull(impl.OutParams[i])).TypedIdent.WhereExpr = whereExpr;
+ AssumeCmd/*!*/ a = new AssumeCmd(Token.NoToken, whereExpr);
+ Contract.Assert(a != null);
+ inCmds.Add(a);
+ }
+ }
+
+ // assign modifies old values
+ foreach (IdentifierExpr/*!*/ mie in proc.Modifies) {
+ Contract.Assert(mie != null);
+ Variable/*!*/ mvar = cce.NonNull(mie.Decl);
+ AssignCmd assign = Cmd.SimpleAssign(impl.tok, (IdentifierExpr)cce.NonNull(codeCopier.OldSubst(mvar)), mie);
+ inCmds.Add(assign);
+ }
+
+ GotoCmd inGotoCmd = new GotoCmd(callCmd.tok, new List<String> { GetInlinedProcLabel(proc.Name) + "$" + startLabel });
+ Block inBlock = new Block(impl.tok, GetInlinedProcLabel(proc.Name) + "$Entry", inCmds, inGotoCmd);
+ inlinedBlocks.Add(inBlock);
+
+ // inject the blocks of the implementation
+ Block intBlock;
+ foreach (Block block in implBlocks) {
+ List<Cmd> copyCmds = codeCopier.CopyCmdSeq(block.Cmds);
+ if (0 <= inlineDepth) {
+ copyCmds = RemoveAsserts(copyCmds);
+ }
+ TransferCmd transferCmd = CreateInlinedTransferCmd(cce.NonNull(block.TransferCmd), GetInlinedProcLabel(proc.Name));
+ intBlock = new Block(block.tok, GetInlinedProcLabel(proc.Name) + "$" + block.Label, copyCmds, transferCmd);
+ inlinedBlocks.Add(intBlock);
+ }
+
+ // create out block
+ List<Cmd> outCmds = new List<Cmd>();
+
+ // inject ensures
+ for (int i = 0; i < proc.Ensures.Count; i++) {
+ Ensures/*!*/ ens = cce.NonNull(proc.Ensures[i]);
+ outCmds.Add(InlinedEnsures(callCmd, ens));
+ }
+
+ // assign out params
+ for (int i = 0; i < impl.OutParams.Count; ++i) {
+ Expr/*!*/ cout_exp = (IdentifierExpr)cce.NonNull(codeCopier.Subst(cce.NonNull(impl.OutParams[i])));
+ Cmd cmd = Cmd.SimpleAssign(impl.tok, cce.NonNull(callCmd.Outs[i]), cout_exp);
+ outCmds.Add(cmd);
+ }
+
+ // create out block
+ GotoCmd outGotoCmd = new GotoCmd(Token.NoToken, new List<String> { nextBlockLabel });
+ Block outBlock = new Block(impl.tok, GetInlinedProcLabel(proc.Name) + "$Return", outCmds, outGotoCmd);
+ inlinedBlocks.Add(outBlock);
+
+ return inlinedBlocks;
+ }
+
+ protected TransferCmd CreateInlinedTransferCmd(TransferCmd transferCmd, string procLabel) {
+ Contract.Requires(procLabel != null);
+ Contract.Requires(transferCmd != null);
+ TransferCmd newTransferCmd;
+
+ GotoCmd gotoCmd = transferCmd as GotoCmd;
+ if (gotoCmd != null) {
+ List<String> gotoSeq = gotoCmd.labelNames;
+ List<String> newGotoSeq = new List<String>();
+ foreach (string/*!*/ blockLabel in cce.NonNull(gotoSeq)) {
+ Contract.Assert(blockLabel != null);
+ newGotoSeq.Add(procLabel + "$" + blockLabel);
+ }
+ newTransferCmd = new GotoCmd(transferCmd.tok, newGotoSeq);
+ } else {
+ newTransferCmd = new GotoCmd(transferCmd.tok, new List<String> { procLabel + "$Return" });
+ }
+
+ return newTransferCmd;
+ }
+
+ protected static Implementation FindProcImpl(Program program, Procedure proc) {
+ Contract.Requires(program != null);
+ foreach (var impl in program.Implementations) {
+ if (impl.Proc == proc) {
+ return impl;
+ }
+ }
+ return null;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ public class CodeCopier {
+ public Substitution Subst;
+ public Substitution OldSubst;
+
+ public CodeCopier(Dictionary<Variable, Expr> substMap) {
+ Contract.Requires(substMap != null);
+ Subst = Substituter.SubstitutionFromHashtable(substMap);
+ }
+
+ public CodeCopier(Dictionary<Variable, Expr> substMap, Dictionary<Variable, Expr> oldSubstMap) {
+ Contract.Requires(oldSubstMap != null);
+ Contract.Requires(substMap != null);
+ Subst = Substituter.SubstitutionFromHashtable(substMap);
+ OldSubst = Substituter.SubstitutionFromHashtable(oldSubstMap);
+ }
+
+ public CodeCopier() {
+ }
+
+ public List<Cmd> CopyCmdSeq(List<Cmd> cmds) {
+ Contract.Requires(cmds != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ List<Cmd> newCmds = new List<Cmd>();
+ foreach (Cmd/*!*/ cmd in cmds) {
+ Contract.Assert(cmd != null);
+ newCmds.Add(CopyCmd(cmd));
+ }
+ return newCmds;
+ }
+
+ public TransferCmd CopyTransferCmd(TransferCmd cmd) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<TransferCmd>() != null);
+ TransferCmd transferCmd;
+ GotoCmd gotocmd = cmd as GotoCmd;
+ if (gotocmd != null) {
+ Contract.Assert(gotocmd.labelNames != null);
+ List<String> labels = new List<String>();
+ labels.AddRange(gotocmd.labelNames);
+ transferCmd = new GotoCmd(cmd.tok, labels);
+ } else {
+ ReturnExprCmd returnExprCmd = cmd as ReturnExprCmd;
+ if (returnExprCmd != null)
+ {
+ transferCmd = new ReturnExprCmd(cmd.tok, CopyExpr(returnExprCmd.Expr));
+ }
+ else
+ {
+ transferCmd = new ReturnCmd(cmd.tok);
+ }
+ }
+ return transferCmd;
+ }
+
+ public Cmd CopyCmd(Cmd cmd) {
+ Contract.Requires(cmd != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ if (Subst == null) {
+ return cmd;
+ } else if (OldSubst == null) {
+ return Substituter.Apply(Subst, cmd);
+ } else {
+ return Substituter.ApplyReplacingOldExprs(Subst, OldSubst, cmd);
+ }
+ }
+
+ public Expr CopyExpr(Expr expr) {
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ if (Subst == null) {
+ return expr;
+ } else if (OldSubst == null) {
+ return Substituter.Apply(Subst, expr);
+ } else {
+ return Substituter.ApplyReplacingOldExprs(Subst, OldSubst, expr);
+ }
+ }
+ } // end class CodeCopier
} // end namespace \ No newline at end of file
diff --git a/Source/Core/InterProceduralReachabilityGraph.cs b/Source/Core/InterProceduralReachabilityGraph.cs
index d75a4b7d..73c88bca 100644
--- a/Source/Core/InterProceduralReachabilityGraph.cs
+++ b/Source/Core/InterProceduralReachabilityGraph.cs
@@ -1,306 +1,306 @@
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics;
-using Microsoft.Boogie.GraphUtil;
-
-namespace Microsoft.Boogie
-{
-
- public interface IInterproceduralReachabilityGraph {
-
- bool MayReach(Block src, Block dst);
-
- void dump();
-
- Block GetNewEntryBlock(string p);
-
- Block GetNewExitBlock(string p);
-
- Block GetNewBlock(Block block);
- }
-
- public class InterproceduralReachabilityGraph : IInterproceduralReachabilityGraph
- {
-
- private Program prog;
- private HashSet<Block> nodes;
- private Dictionary<Block, Block> originalToNew;
- private Dictionary<string, Block> newProcedureEntryNodes;
- private Dictionary<string, Block> newProcedureExitNodes;
-
- private Graph<Block> reachabilityGraph;
-
- public InterproceduralReachabilityGraph(Program prog) {
- this.prog = prog;
- originalToNew = new Dictionary<Block,Block>();
- newProcedureEntryNodes = new Dictionary<string,Block>();
- newProcedureExitNodes = new Dictionary<string,Block>();
- nodes = new HashSet<Block>();
-
- ProcessImplementations();
-
- ProcessBodilessProcedures();
-
- PatchUpGotoTargets();
-
- AddCallAndReturnEdges();
-
- reachabilityGraph = new Graph<Block>();
-
- foreach(var n in nodes) {
- GotoCmd gotoCmd = n.TransferCmd as GotoCmd;
- if(gotoCmd != null) {
- foreach(Block b in gotoCmd.labelTargets) {
- reachabilityGraph.AddEdge(n, b);
- }
- }
- }
-
- foreach(var n in nodes) {
- // If there are disconnected nodes, put them into the
- // graph as self-loops so that every node is represented in
- // the graph
- if(!reachabilityGraph.Nodes.Contains(n)) {
- reachabilityGraph.AddEdge(n, n);
- }
- }
- }
-
- private IEnumerable<Block> OriginalProgramBlocks()
- {
- return prog.Implementations.Select(Item => Item.Blocks).SelectMany(Item => Item);
- }
-
- private void AddCallAndReturnEdges()
- {
- #region Add call and return edges
- foreach (var n in nodes)
- {
- if (n.Cmds.Count == 1 && n.Cmds[0] is CallCmd)
- {
- string proc = ((CallCmd)n.Cmds[0]).callee;
- GotoCmd gotoCmd = n.TransferCmd as GotoCmd;
- Debug.Assert(gotoCmd != null);
-
- for (int i = 0; i < gotoCmd.labelTargets.Count; i++)
- {
- (newProcedureExitNodes[proc].TransferCmd as GotoCmd).labelTargets.Add(gotoCmd.labelTargets[i]);
- (newProcedureExitNodes[proc].TransferCmd as GotoCmd).labelNames.Add(gotoCmd.labelNames[i]);
- }
- gotoCmd.labelTargets = new List<Block> { newProcedureEntryNodes[proc] };
- gotoCmd.labelNames = new List<String> { newProcedureEntryNodes[proc].Label };
- }
- }
- #endregion
- }
-
- private void PatchUpGotoTargets()
- {
- #region Patch up goto targets
- foreach (var n in nodes)
- {
- var gotoCmd = n.TransferCmd as GotoCmd;
- if (gotoCmd != null)
- {
- List<Block> newTargets = new List<Block>();
- foreach (Block t in gotoCmd.labelTargets)
- {
- if (originalToNew.ContainsKey(t))
- {
- newTargets.Add(originalToNew[t]);
- }
- else
- {
- newTargets.Add(t);
- }
- }
- gotoCmd.labelTargets = newTargets;
- }
- }
- #endregion
- }
-
- private void ProcessBodilessProcedures()
- {
- #region Add single node CFG for procedures with no body
- foreach (var proc in prog.Procedures)
- {
- if (!newProcedureEntryNodes.ContainsKey(proc.Name))
- {
- Block newBlock = new Block(Token.NoToken, proc + "__dummy_node", new List<Cmd>(), new GotoCmd(Token.NoToken, new List<Block>()));
- nodes.Add(newBlock);
- newProcedureEntryNodes[proc.Name] = newBlock;
- newProcedureExitNodes[proc.Name] = newBlock;
- }
- }
- #endregion
- }
-
- private void ProcessImplementations()
- {
- #region Transform implementation CFGs so that every call is in its own basic block
- foreach (var impl in prog.Implementations)
- {
- string exitLabel = "__" + impl.Name + "_newExit";
- Block newExit = new Block(Token.NoToken, exitLabel, new List<Cmd>(), new GotoCmd(Token.NoToken, new List<Block>()));
- nodes.Add(newExit);
- newProcedureExitNodes[impl.Name] = newExit;
- foreach (Block b in impl.Blocks)
- {
- Block prev = null;
- int i = 0;
- foreach (List<Cmd> cmds in SeparateCallCmds(b.Cmds))
- {
- Block newBlock;
- if (prev == null)
- {
- newBlock = new Block(b.tok, "__" + impl.Name + "_" + b.Label, new List<Cmd>(cmds.ToArray()), null);
- nodes.Add(newBlock);
- originalToNew[b] = newBlock;
- if (impl.Blocks[0] == b)
- {
- newProcedureEntryNodes[impl.Name] = newBlock;
- }
- }
- else
- {
- string label = "__" + impl.Name + "_" + b.Label + "_call_" + i;
- newBlock = new Block(b.tok, label, new List<Cmd>(cmds.ToArray()), null);
- nodes.Add(newBlock);
- originalToNew[newBlock] = newBlock;
- prev.TransferCmd = new GotoCmd(Token.NoToken, new List<String> { label }, new List<Block> { newBlock });
- }
- prev = newBlock;
- i++;
- }
- Debug.Assert(prev != null);
- if (b.TransferCmd is ReturnCmd || (b.TransferCmd is GotoCmd &&
- ((GotoCmd)b.TransferCmd).labelTargets.Count == 0))
- {
- prev.TransferCmd = new GotoCmd(Token.NoToken, new List<String> { exitLabel }, new List<Block> { newExit });
- }
- else
- {
- if(b.TransferCmd is ReturnCmd) {
- prev.TransferCmd = new ReturnCmd(b.TransferCmd.tok);
- } else {
- var gotoCmd = b.TransferCmd as GotoCmd;
- Debug.Assert(gotoCmd != null);
- prev.TransferCmd = new GotoCmd(gotoCmd.tok, gotoCmd.labelNames, gotoCmd.labelTargets);
- }
- }
- }
- }
- #endregion
- }
-
- private static List<List<Cmd>> SeparateCallCmds(List<Cmd> Cmds) {
- List<List<Cmd>> result = new List<List<Cmd>>();
- int currentIndex = 0;
- while(currentIndex < Cmds.Count) {
- if(Cmds[currentIndex] is CallCmd) {
- result.Add(new List<Cmd> { Cmds[currentIndex] });
- currentIndex++;
- } else {
- List<Cmd> nonCallCmds = new List<Cmd>();
- while(currentIndex < Cmds.Count && !(Cmds[currentIndex] is CallCmd)) {
- nonCallCmds.Add(Cmds[currentIndex]);
- currentIndex++;
- }
- result.Add(nonCallCmds);
- }
- }
- if(result.Count == 0) {
- result.Add(new List<Cmd>());
- }
- return result;
- }
-
- private Graph<SCC<Block>> ReachabilityGraphSCCsDAG;
- private Dictionary<Block, SCC<Block>> BlockToSCC;
-
- private Dictionary<SCC<Block>, HashSet<Block>> MayReachCache = new Dictionary<SCC<Block>, HashSet<Block>>();
-
- public bool MayReach(Block src, Block dst) {
- if (ReachabilityGraphSCCsDAG == null) {
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Interprocedural reachability: computing SCCs");
- }
- Adjacency<Block> next = new Adjacency<Block>(reachabilityGraph.Successors);
- Adjacency<Block> prev = new Adjacency<Block>(reachabilityGraph.Predecessors);
- StronglyConnectedComponents<Block> ReachabilitySCCs = new StronglyConnectedComponents<Block>(
- reachabilityGraph.Nodes, next, prev);
- ReachabilitySCCs.Compute();
-
- BlockToSCC = new Dictionary<Block, SCC<Block>>();
- foreach (var scc in ReachabilitySCCs) {
- foreach (var s in scc) {
- BlockToSCC[s] = scc;
- }
- }
-
- ReachabilityGraphSCCsDAG = new Graph<SCC<Block>>();
- foreach (var edge in reachabilityGraph.Edges) {
- if (BlockToSCC[edge.Item1] != BlockToSCC[edge.Item2]) {
- ReachabilityGraphSCCsDAG.AddEdge(BlockToSCC[edge.Item1], BlockToSCC[edge.Item2]);
- }
- }
-
- SCC<Block> dummy = new SCC<Block>();
- foreach (var n in reachabilityGraph.Nodes) {
- ReachabilityGraphSCCsDAG.AddEdge(BlockToSCC[n], dummy);
- }
-
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Interprocedural reachability: SCCs computed!");
- }
- }
- return ReachableFrom(BlockToSCC[src]).Contains(dst);
- }
-
- private HashSet<Block> ReachableFrom(SCC<Block> scc) {
- if (!MayReachCache.ContainsKey(scc)) {
- HashSet<Block> result = new HashSet<Block>();
- if (scc.Count() > 0) {
- result.UnionWith(scc);
- foreach (var nextSCC in ReachabilityGraphSCCsDAG.Successors(scc)) {
- result.UnionWith(ReachableFrom(nextSCC));
- }
- }
- MayReachCache[scc] = result;
- }
- return MayReachCache[scc];
- }
-
- public void dump() {
- foreach(var n in nodes) {
- Console.WriteLine(n.Label + " -> {");
- GotoCmd gotoCmd = n.TransferCmd as GotoCmd;
- if(n != null) {
- foreach(Block m in gotoCmd.labelTargets) {
- Console.WriteLine(" " + m.Label);
- }
- }
- Console.WriteLine("}");
- }
- }
-
- public Block GetNewEntryBlock(string proc) {
- return newProcedureEntryNodes[proc];
- }
-
- public Block GetNewExitBlock(string proc) {
- return newProcedureExitNodes[proc];
- }
-
- public Block GetNewBlock(Block b) {
- return originalToNew[b];
- }
-
- }
-
-
-}
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics;
+using Microsoft.Boogie.GraphUtil;
+
+namespace Microsoft.Boogie
+{
+
+ public interface IInterproceduralReachabilityGraph {
+
+ bool MayReach(Block src, Block dst);
+
+ void dump();
+
+ Block GetNewEntryBlock(string p);
+
+ Block GetNewExitBlock(string p);
+
+ Block GetNewBlock(Block block);
+ }
+
+ public class InterproceduralReachabilityGraph : IInterproceduralReachabilityGraph
+ {
+
+ private Program prog;
+ private HashSet<Block> nodes;
+ private Dictionary<Block, Block> originalToNew;
+ private Dictionary<string, Block> newProcedureEntryNodes;
+ private Dictionary<string, Block> newProcedureExitNodes;
+
+ private Graph<Block> reachabilityGraph;
+
+ public InterproceduralReachabilityGraph(Program prog) {
+ this.prog = prog;
+ originalToNew = new Dictionary<Block,Block>();
+ newProcedureEntryNodes = new Dictionary<string,Block>();
+ newProcedureExitNodes = new Dictionary<string,Block>();
+ nodes = new HashSet<Block>();
+
+ ProcessImplementations();
+
+ ProcessBodilessProcedures();
+
+ PatchUpGotoTargets();
+
+ AddCallAndReturnEdges();
+
+ reachabilityGraph = new Graph<Block>();
+
+ foreach(var n in nodes) {
+ GotoCmd gotoCmd = n.TransferCmd as GotoCmd;
+ if(gotoCmd != null) {
+ foreach(Block b in gotoCmd.labelTargets) {
+ reachabilityGraph.AddEdge(n, b);
+ }
+ }
+ }
+
+ foreach(var n in nodes) {
+ // If there are disconnected nodes, put them into the
+ // graph as self-loops so that every node is represented in
+ // the graph
+ if(!reachabilityGraph.Nodes.Contains(n)) {
+ reachabilityGraph.AddEdge(n, n);
+ }
+ }
+ }
+
+ private IEnumerable<Block> OriginalProgramBlocks()
+ {
+ return prog.Implementations.Select(Item => Item.Blocks).SelectMany(Item => Item);
+ }
+
+ private void AddCallAndReturnEdges()
+ {
+ #region Add call and return edges
+ foreach (var n in nodes)
+ {
+ if (n.Cmds.Count == 1 && n.Cmds[0] is CallCmd)
+ {
+ string proc = ((CallCmd)n.Cmds[0]).callee;
+ GotoCmd gotoCmd = n.TransferCmd as GotoCmd;
+ Debug.Assert(gotoCmd != null);
+
+ for (int i = 0; i < gotoCmd.labelTargets.Count; i++)
+ {
+ (newProcedureExitNodes[proc].TransferCmd as GotoCmd).labelTargets.Add(gotoCmd.labelTargets[i]);
+ (newProcedureExitNodes[proc].TransferCmd as GotoCmd).labelNames.Add(gotoCmd.labelNames[i]);
+ }
+ gotoCmd.labelTargets = new List<Block> { newProcedureEntryNodes[proc] };
+ gotoCmd.labelNames = new List<String> { newProcedureEntryNodes[proc].Label };
+ }
+ }
+ #endregion
+ }
+
+ private void PatchUpGotoTargets()
+ {
+ #region Patch up goto targets
+ foreach (var n in nodes)
+ {
+ var gotoCmd = n.TransferCmd as GotoCmd;
+ if (gotoCmd != null)
+ {
+ List<Block> newTargets = new List<Block>();
+ foreach (Block t in gotoCmd.labelTargets)
+ {
+ if (originalToNew.ContainsKey(t))
+ {
+ newTargets.Add(originalToNew[t]);
+ }
+ else
+ {
+ newTargets.Add(t);
+ }
+ }
+ gotoCmd.labelTargets = newTargets;
+ }
+ }
+ #endregion
+ }
+
+ private void ProcessBodilessProcedures()
+ {
+ #region Add single node CFG for procedures with no body
+ foreach (var proc in prog.Procedures)
+ {
+ if (!newProcedureEntryNodes.ContainsKey(proc.Name))
+ {
+ Block newBlock = new Block(Token.NoToken, proc + "__dummy_node", new List<Cmd>(), new GotoCmd(Token.NoToken, new List<Block>()));
+ nodes.Add(newBlock);
+ newProcedureEntryNodes[proc.Name] = newBlock;
+ newProcedureExitNodes[proc.Name] = newBlock;
+ }
+ }
+ #endregion
+ }
+
+ private void ProcessImplementations()
+ {
+ #region Transform implementation CFGs so that every call is in its own basic block
+ foreach (var impl in prog.Implementations)
+ {
+ string exitLabel = "__" + impl.Name + "_newExit";
+ Block newExit = new Block(Token.NoToken, exitLabel, new List<Cmd>(), new GotoCmd(Token.NoToken, new List<Block>()));
+ nodes.Add(newExit);
+ newProcedureExitNodes[impl.Name] = newExit;
+ foreach (Block b in impl.Blocks)
+ {
+ Block prev = null;
+ int i = 0;
+ foreach (List<Cmd> cmds in SeparateCallCmds(b.Cmds))
+ {
+ Block newBlock;
+ if (prev == null)
+ {
+ newBlock = new Block(b.tok, "__" + impl.Name + "_" + b.Label, new List<Cmd>(cmds.ToArray()), null);
+ nodes.Add(newBlock);
+ originalToNew[b] = newBlock;
+ if (impl.Blocks[0] == b)
+ {
+ newProcedureEntryNodes[impl.Name] = newBlock;
+ }
+ }
+ else
+ {
+ string label = "__" + impl.Name + "_" + b.Label + "_call_" + i;
+ newBlock = new Block(b.tok, label, new List<Cmd>(cmds.ToArray()), null);
+ nodes.Add(newBlock);
+ originalToNew[newBlock] = newBlock;
+ prev.TransferCmd = new GotoCmd(Token.NoToken, new List<String> { label }, new List<Block> { newBlock });
+ }
+ prev = newBlock;
+ i++;
+ }
+ Debug.Assert(prev != null);
+ if (b.TransferCmd is ReturnCmd || (b.TransferCmd is GotoCmd &&
+ ((GotoCmd)b.TransferCmd).labelTargets.Count == 0))
+ {
+ prev.TransferCmd = new GotoCmd(Token.NoToken, new List<String> { exitLabel }, new List<Block> { newExit });
+ }
+ else
+ {
+ if(b.TransferCmd is ReturnCmd) {
+ prev.TransferCmd = new ReturnCmd(b.TransferCmd.tok);
+ } else {
+ var gotoCmd = b.TransferCmd as GotoCmd;
+ Debug.Assert(gotoCmd != null);
+ prev.TransferCmd = new GotoCmd(gotoCmd.tok, gotoCmd.labelNames, gotoCmd.labelTargets);
+ }
+ }
+ }
+ }
+ #endregion
+ }
+
+ private static List<List<Cmd>> SeparateCallCmds(List<Cmd> Cmds) {
+ List<List<Cmd>> result = new List<List<Cmd>>();
+ int currentIndex = 0;
+ while(currentIndex < Cmds.Count) {
+ if(Cmds[currentIndex] is CallCmd) {
+ result.Add(new List<Cmd> { Cmds[currentIndex] });
+ currentIndex++;
+ } else {
+ List<Cmd> nonCallCmds = new List<Cmd>();
+ while(currentIndex < Cmds.Count && !(Cmds[currentIndex] is CallCmd)) {
+ nonCallCmds.Add(Cmds[currentIndex]);
+ currentIndex++;
+ }
+ result.Add(nonCallCmds);
+ }
+ }
+ if(result.Count == 0) {
+ result.Add(new List<Cmd>());
+ }
+ return result;
+ }
+
+ private Graph<SCC<Block>> ReachabilityGraphSCCsDAG;
+ private Dictionary<Block, SCC<Block>> BlockToSCC;
+
+ private Dictionary<SCC<Block>, HashSet<Block>> MayReachCache = new Dictionary<SCC<Block>, HashSet<Block>>();
+
+ public bool MayReach(Block src, Block dst) {
+ if (ReachabilityGraphSCCsDAG == null) {
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Interprocedural reachability: computing SCCs");
+ }
+ Adjacency<Block> next = new Adjacency<Block>(reachabilityGraph.Successors);
+ Adjacency<Block> prev = new Adjacency<Block>(reachabilityGraph.Predecessors);
+ StronglyConnectedComponents<Block> ReachabilitySCCs = new StronglyConnectedComponents<Block>(
+ reachabilityGraph.Nodes, next, prev);
+ ReachabilitySCCs.Compute();
+
+ BlockToSCC = new Dictionary<Block, SCC<Block>>();
+ foreach (var scc in ReachabilitySCCs) {
+ foreach (var s in scc) {
+ BlockToSCC[s] = scc;
+ }
+ }
+
+ ReachabilityGraphSCCsDAG = new Graph<SCC<Block>>();
+ foreach (var edge in reachabilityGraph.Edges) {
+ if (BlockToSCC[edge.Item1] != BlockToSCC[edge.Item2]) {
+ ReachabilityGraphSCCsDAG.AddEdge(BlockToSCC[edge.Item1], BlockToSCC[edge.Item2]);
+ }
+ }
+
+ SCC<Block> dummy = new SCC<Block>();
+ foreach (var n in reachabilityGraph.Nodes) {
+ ReachabilityGraphSCCsDAG.AddEdge(BlockToSCC[n], dummy);
+ }
+
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Interprocedural reachability: SCCs computed!");
+ }
+ }
+ return ReachableFrom(BlockToSCC[src]).Contains(dst);
+ }
+
+ private HashSet<Block> ReachableFrom(SCC<Block> scc) {
+ if (!MayReachCache.ContainsKey(scc)) {
+ HashSet<Block> result = new HashSet<Block>();
+ if (scc.Count() > 0) {
+ result.UnionWith(scc);
+ foreach (var nextSCC in ReachabilityGraphSCCsDAG.Successors(scc)) {
+ result.UnionWith(ReachableFrom(nextSCC));
+ }
+ }
+ MayReachCache[scc] = result;
+ }
+ return MayReachCache[scc];
+ }
+
+ public void dump() {
+ foreach(var n in nodes) {
+ Console.WriteLine(n.Label + " -> {");
+ GotoCmd gotoCmd = n.TransferCmd as GotoCmd;
+ if(n != null) {
+ foreach(Block m in gotoCmd.labelTargets) {
+ Console.WriteLine(" " + m.Label);
+ }
+ }
+ Console.WriteLine("}");
+ }
+ }
+
+ public Block GetNewEntryBlock(string proc) {
+ return newProcedureEntryNodes[proc];
+ }
+
+ public Block GetNewExitBlock(string proc) {
+ return newProcedureExitNodes[proc];
+ }
+
+ public Block GetNewBlock(Block b) {
+ return originalToNew[b];
+ }
+
+ }
+
+
+}
diff --git a/Source/Core/LambdaHelper.cs b/Source/Core/LambdaHelper.cs
index d07eaac6..a566daaf 100644
--- a/Source/Core/LambdaHelper.cs
+++ b/Source/Core/LambdaHelper.cs
@@ -1,259 +1,259 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.Boogie {
-
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Diagnostics.Contracts;
- using Set = GSet<object>; // for the purposes here, "object" really means "either Variable or TypeVariable"
-
- public static class LambdaHelper {
- public static Program Desugar(Program program, out List<Expr/*!*/>/*!*/ axioms, out List<Function/*!*/>/*!*/ functions) {
- Contract.Requires(program != null);
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out functions)));
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out axioms)));
- Contract.Ensures(Contract.Result<Program>() != null);
- LambdaVisitor v = new LambdaVisitor();
- program = v.VisitProgram(program);
- axioms = v.lambdaAxioms;
- functions = v.lambdaFunctions;
- if (CommandLineOptions.Clo.TraceVerify) {
- Console.WriteLine("Desugaring of lambda expressions produced {0} functions and {1} axioms:", functions.Count, axioms.Count);
- TokenTextWriter wr = new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false);
- foreach (Function f in functions) {
- f.Emit(wr, 0);
- }
- foreach (Expr ax in axioms) {
- ax.Emit(wr);
- Console.WriteLine();
- }
- }
- return program;
- }
-
- public static void ExpandLambdas(Program prog) {
- Contract.Requires(prog != null);
- List<Expr/*!*/>/*!*/ axioms;
- List<Function/*!*/>/*!*/ functions;
-
- Desugar(prog, out axioms, out functions);
- foreach (var f in functions) {
- prog.AddTopLevelDeclaration(f);
- }
- foreach (var a in axioms) {
- prog.AddTopLevelDeclaration(new Axiom(a.tok, a));
- }
- }
-
- private class LambdaVisitor : StandardVisitor {
- private readonly Dictionary<Expr, FunctionCall> liftedLambdas =
- new Dictionary<Expr, FunctionCall>(new AlphaEquality());
-
- internal List<Expr/*!*/>/*!*/ lambdaAxioms = new List<Expr/*!*/>();
- internal List<Function/*!*/>/*!*/ lambdaFunctions = new List<Function/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(lambdaAxioms));
- Contract.Invariant(cce.NonNullElements(lambdaFunctions));
- }
-
- int lambdaid = 0;
-
- string FreshLambdaFunctionName()
- {
- // TODO(wuestholz): Should we use a counter per top-level declaration?
- return string.Format("lambda#{0}", lambdaid++);
- }
-
- public override Expr VisitLambdaExpr(LambdaExpr lambda) {
- var baseResult = base.VisitLambdaExpr(lambda);
- lambda = baseResult as LambdaExpr;
- if (lambda == null) {
- return baseResult; // apparently, the base visitor already turned the lambda into something else
- }
-
- // We start by getting rid of any use of "old" inside the lambda. This is done as follows.
- // For each variable "g" occurring inside lambda as "old(... g ...)", create a new name "og".
- // Replace each old occurrence of "g" with "og", removing the enclosing "old" wrappers.
- var oldFinder = new OldFinder();
- oldFinder.Visit(lambda);
- var oldSubst = new Dictionary<Variable, Expr>(); // g -> g0
- var callOldMapping = new Dictionary<Variable, Expr>(); // g0 -> old(g)
- foreach (var v in oldFinder.FreeOldVars) {
- var g = v as GlobalVariable;
- if (g != null) {
- var g0 = new GlobalVariable(g.tok, new TypedIdent(g.tok, g.TypedIdent.Name + "@old", g.TypedIdent.Type));
- oldSubst.Add(g, new IdentifierExpr(g0.tok, g0));
- callOldMapping.Add(g0, new OldExpr(g0.tok, new IdentifierExpr(g.tok, g)));
- }
- }
- var lambdaBody = Substituter.ApplyReplacingOldExprs(
- Substituter.SubstitutionFromHashtable(new Dictionary<Variable,Expr>()),
- Substituter.SubstitutionFromHashtable(oldSubst),
- lambda.Body);
- var lambdaAttrs = Substituter.ApplyReplacingOldExprs(
- Substituter.SubstitutionFromHashtable(new Dictionary<Variable, Expr>()),
- Substituter.SubstitutionFromHashtable(oldSubst),
- lambda.Attributes);
-
- if (0 < CommandLineOptions.Clo.VerifySnapshots && QKeyValue.FindStringAttribute(lambdaAttrs, "checksum") == null)
- {
- // Attach a dummy checksum to avoid issues in the dependency analysis.
- var checksumAttr = new QKeyValue(lambda.tok, "checksum", new List<object> { "stable" }, null);
- if (lambdaAttrs == null)
- {
- lambdaAttrs = checksumAttr;
- }
- else
- {
- lambdaAttrs.AddLast(checksumAttr);
- }
- }
-
- // this is ugly, the output will depend on hashing order
- var subst = new Dictionary<Variable, Expr>();
- var substFnAttrs = new Dictionary<Variable, Expr>();
- var formals = new List<Variable>();
- var callArgs = new List<Expr>();
- var axCallArgs = new List<Expr>();
- var dummies = new List<Variable>(lambda.Dummies);
- var freeTypeVars = new List<TypeVariable>();
- var fnTypeVarActuals = new List<Type/*!*/>();
- var freshTypeVars = new List<TypeVariable>(); // these are only used in the lambda@n function's definition
-
- // compute the free variables of the lambda expression, but with lambdaBody instead of lambda.Body
- Set freeVars = new Set();
- BinderExpr.ComputeBinderFreeVariables(lambda.TypeParameters, lambda.Dummies, lambdaBody, lambdaAttrs, freeVars);
-
- foreach (object o in freeVars) {
- // 'o' is either a Variable or a TypeVariable.
- if (o is Variable) {
- var v = o as Variable;
- var ti = new TypedIdent(v.TypedIdent.tok, v.TypedIdent.Name, v.TypedIdent.Type);
- var f = new Formal(v.tok, ti, true);
- formals.Add(f);
- substFnAttrs.Add(v, new IdentifierExpr(f.tok, f));
- var b = new BoundVariable(v.tok, ti);
- dummies.Add(b);
- if (callOldMapping.ContainsKey(v)) {
- callArgs.Add(callOldMapping[v]);
- } else {
- callArgs.Add(new IdentifierExpr(v.tok, v));
- }
- Expr id = new IdentifierExpr(b.tok, b);
- subst.Add(v, id);
- axCallArgs.Add(id);
- } else {
- var tv = (TypeVariable)o;
- freeTypeVars.Add(tv);
- fnTypeVarActuals.Add(tv);
- freshTypeVars.Add(new TypeVariable(tv.tok, tv.Name));
- }
- }
-
- var sw = new System.IO.StringWriter();
- var wr = new TokenTextWriter(sw, true);
- lambda.Emit(wr);
- string lam_str = sw.ToString();
-
- FunctionCall fcall;
- IToken tok = lambda.tok;
- Formal res = new Formal(tok, new TypedIdent(tok, TypedIdent.NoName, cce.NonNull(lambda.Type)), false);
-
- if (liftedLambdas.TryGetValue(lambda, out fcall)) {
- if (CommandLineOptions.Clo.TraceVerify) {
- Console.WriteLine("Old lambda: {0}", lam_str);
- }
- } else {
- if (CommandLineOptions.Clo.TraceVerify) {
- Console.WriteLine("New lambda: {0}", lam_str);
- }
- Function fn = new Function(tok, FreshLambdaFunctionName(), freshTypeVars, formals, res, "auto-generated lambda function",
- Substituter.Apply(Substituter.SubstitutionFromHashtable(substFnAttrs), lambdaAttrs));
-
- fcall = new FunctionCall(new IdentifierExpr(tok, fn.Name));
- fcall.Func = fn; // resolve here
- liftedLambdas[lambda] = fcall;
-
- List<Expr/*!*/> selectArgs = new List<Expr/*!*/>();
- foreach (Variable/*!*/ v in lambda.Dummies) {
- Contract.Assert(v != null);
- selectArgs.Add(new IdentifierExpr(v.tok, v));
- }
- NAryExpr axcall = new NAryExpr(tok, fcall, axCallArgs);
- axcall.Type = res.TypedIdent.Type;
- axcall.TypeParameters = SimpleTypeParamInstantiation.From(freeTypeVars, fnTypeVarActuals);
- NAryExpr select = Expr.Select(axcall, selectArgs);
- select.Type = lambdaBody.Type;
- List<Type/*!*/> selectTypeParamActuals = new List<Type/*!*/>();
- List<TypeVariable> forallTypeVariables = new List<TypeVariable>();
- foreach (TypeVariable/*!*/ tp in lambda.TypeParameters) {
- Contract.Assert(tp != null);
- selectTypeParamActuals.Add(tp);
- forallTypeVariables.Add(tp);
- }
- forallTypeVariables.AddRange(freeTypeVars);
- select.TypeParameters = SimpleTypeParamInstantiation.From(lambda.TypeParameters, selectTypeParamActuals);
-
- Expr bb = Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), lambdaBody);
- NAryExpr body = Expr.Eq(select, bb);
- body.Type = Type.Bool;
- body.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- Trigger trig = new Trigger(select.tok, true, new List<Expr> { select });
-
- lambdaFunctions.Add(fn);
- lambdaAxioms.Add(new ForallExpr(tok, forallTypeVariables, dummies,
- Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), lambdaAttrs),
- trig, body));
- }
-
- NAryExpr call = new NAryExpr(tok, fcall, callArgs);
- call.Type = res.TypedIdent.Type;
- call.TypeParameters = SimpleTypeParamInstantiation.From(freeTypeVars, fnTypeVarActuals);
-
- return call;
- }
- public override Cmd VisitCallCmd(CallCmd node) {
- var baseResult = base.VisitCallCmd(node);
- node = baseResult as CallCmd;
- if (node == null) {
- return baseResult; // apparently, the base visitor already turned the lambda into something else
- }
- // also visit the desugaring (which the StandardVisitor does not do)
- node.VisitDesugaring(this);
- return node;
- }
- }
- }
-
- class OldFinder : ReadOnlyVisitor
- {
- public readonly GSet<Variable> FreeOldVars = new GSet<Variable>();
- public override Expr VisitOldExpr(OldExpr node) {
- Set freeVars = new Set();
- node.Expr.ComputeFreeVariables(freeVars);
- foreach (var v in freeVars) {
- // Note, "v" is either a Variable or a TypeVariable
- if (v is Variable) {
- FreeOldVars.Add((Variable)v);
- }
- }
- return node; // don't visit subexpressions, since ComputeFreeVariables has already gone through those
- }
- public override BinderExpr VisitBinderExpr(BinderExpr node) {
- base.VisitBinderExpr(node);
- // visit attributes, even though StandardVisitor does not do that (but maybe it should?)
- if (node.Attributes != null) {
- this.Visit(node.Attributes);
- }
- return node;
- }
- }
-
-} // end namespace \ No newline at end of file
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.Boogie {
+
+ using System;
+ using System.IO;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Diagnostics;
+ using System.Diagnostics.Contracts;
+ using Set = GSet<object>; // for the purposes here, "object" really means "either Variable or TypeVariable"
+
+ public static class LambdaHelper {
+ public static Program Desugar(Program program, out List<Expr/*!*/>/*!*/ axioms, out List<Function/*!*/>/*!*/ functions) {
+ Contract.Requires(program != null);
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out functions)));
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out axioms)));
+ Contract.Ensures(Contract.Result<Program>() != null);
+ LambdaVisitor v = new LambdaVisitor();
+ program = v.VisitProgram(program);
+ axioms = v.lambdaAxioms;
+ functions = v.lambdaFunctions;
+ if (CommandLineOptions.Clo.TraceVerify) {
+ Console.WriteLine("Desugaring of lambda expressions produced {0} functions and {1} axioms:", functions.Count, axioms.Count);
+ TokenTextWriter wr = new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false);
+ foreach (Function f in functions) {
+ f.Emit(wr, 0);
+ }
+ foreach (Expr ax in axioms) {
+ ax.Emit(wr);
+ Console.WriteLine();
+ }
+ }
+ return program;
+ }
+
+ public static void ExpandLambdas(Program prog) {
+ Contract.Requires(prog != null);
+ List<Expr/*!*/>/*!*/ axioms;
+ List<Function/*!*/>/*!*/ functions;
+
+ Desugar(prog, out axioms, out functions);
+ foreach (var f in functions) {
+ prog.AddTopLevelDeclaration(f);
+ }
+ foreach (var a in axioms) {
+ prog.AddTopLevelDeclaration(new Axiom(a.tok, a));
+ }
+ }
+
+ private class LambdaVisitor : StandardVisitor {
+ private readonly Dictionary<Expr, FunctionCall> liftedLambdas =
+ new Dictionary<Expr, FunctionCall>(new AlphaEquality());
+
+ internal List<Expr/*!*/>/*!*/ lambdaAxioms = new List<Expr/*!*/>();
+ internal List<Function/*!*/>/*!*/ lambdaFunctions = new List<Function/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(lambdaAxioms));
+ Contract.Invariant(cce.NonNullElements(lambdaFunctions));
+ }
+
+ int lambdaid = 0;
+
+ string FreshLambdaFunctionName()
+ {
+ return string.Format("lambda#{0}", lambdaid++);
+ }
+
+ public override Expr VisitLambdaExpr(LambdaExpr lambda) {
+ var baseResult = base.VisitLambdaExpr(lambda);
+ lambda = baseResult as LambdaExpr;
+ if (lambda == null) {
+ return baseResult; // apparently, the base visitor already turned the lambda into something else
+ }
+
+ // We start by getting rid of any use of "old" inside the lambda. This is done as follows.
+ // For each variable "g" occurring inside lambda as "old(... g ...)", create a new name "og".
+ // Replace each old occurrence of "g" with "og", removing the enclosing "old" wrappers.
+ var oldFinder = new OldFinder();
+ oldFinder.Visit(lambda);
+ var oldSubst = new Dictionary<Variable, Expr>(); // g -> g0
+ var callOldMapping = new Dictionary<Variable, Expr>(); // g0 -> old(g)
+ foreach (var v in oldFinder.FreeOldVars) {
+ var g = v as GlobalVariable;
+ if (g != null) {
+ var g0 = new GlobalVariable(g.tok, new TypedIdent(g.tok, g.TypedIdent.Name + "@old", g.TypedIdent.Type));
+ oldSubst.Add(g, new IdentifierExpr(g0.tok, g0));
+ callOldMapping.Add(g0, new OldExpr(g0.tok, new IdentifierExpr(g.tok, g)));
+ }
+ }
+ var lambdaBody = Substituter.ApplyReplacingOldExprs(
+ Substituter.SubstitutionFromHashtable(new Dictionary<Variable,Expr>()),
+ Substituter.SubstitutionFromHashtable(oldSubst),
+ lambda.Body);
+ var lambdaAttrs = Substituter.ApplyReplacingOldExprs(
+ Substituter.SubstitutionFromHashtable(new Dictionary<Variable, Expr>()),
+ Substituter.SubstitutionFromHashtable(oldSubst),
+ lambda.Attributes);
+
+ if (0 < CommandLineOptions.Clo.VerifySnapshots && QKeyValue.FindStringAttribute(lambdaAttrs, "checksum") == null)
+ {
+ // Attach a dummy checksum to avoid issues in the dependency analysis.
+ var checksumAttr = new QKeyValue(lambda.tok, "checksum", new List<object> { "lambda expression" }, null);
+ if (lambdaAttrs == null)
+ {
+ lambdaAttrs = checksumAttr;
+ }
+ else
+ {
+ lambdaAttrs.AddLast(checksumAttr);
+ }
+ }
+
+ // this is ugly, the output will depend on hashing order
+ var subst = new Dictionary<Variable, Expr>();
+ var substFnAttrs = new Dictionary<Variable, Expr>();
+ var formals = new List<Variable>();
+ var callArgs = new List<Expr>();
+ var axCallArgs = new List<Expr>();
+ var dummies = new List<Variable>(lambda.Dummies);
+ var freeTypeVars = new List<TypeVariable>();
+ var fnTypeVarActuals = new List<Type/*!*/>();
+ var freshTypeVars = new List<TypeVariable>(); // these are only used in the lambda@n function's definition
+
+ // compute the free variables of the lambda expression, but with lambdaBody instead of lambda.Body
+ Set freeVars = new Set();
+ BinderExpr.ComputeBinderFreeVariables(lambda.TypeParameters, lambda.Dummies, lambdaBody, lambdaAttrs, freeVars);
+
+ foreach (object o in freeVars) {
+ // 'o' is either a Variable or a TypeVariable.
+ if (o is Variable) {
+ var v = o as Variable;
+ var ti = new TypedIdent(v.TypedIdent.tok, v.TypedIdent.Name, v.TypedIdent.Type);
+ var f = new Formal(v.tok, ti, true);
+ formals.Add(f);
+ substFnAttrs.Add(v, new IdentifierExpr(f.tok, f));
+ var b = new BoundVariable(v.tok, ti);
+ dummies.Add(b);
+ if (callOldMapping.ContainsKey(v)) {
+ callArgs.Add(callOldMapping[v]);
+ } else {
+ callArgs.Add(new IdentifierExpr(v.tok, v));
+ }
+ Expr id = new IdentifierExpr(b.tok, b);
+ subst.Add(v, id);
+ axCallArgs.Add(id);
+ } else {
+ var tv = (TypeVariable)o;
+ freeTypeVars.Add(tv);
+ fnTypeVarActuals.Add(tv);
+ freshTypeVars.Add(new TypeVariable(tv.tok, tv.Name));
+ }
+ }
+
+ var sw = new System.IO.StringWriter();
+ var wr = new TokenTextWriter(sw, true);
+ lambda.Emit(wr);
+ string lam_str = sw.ToString();
+
+ FunctionCall fcall;
+ IToken tok = lambda.tok;
+ Formal res = new Formal(tok, new TypedIdent(tok, TypedIdent.NoName, cce.NonNull(lambda.Type)), false);
+
+ if (liftedLambdas.TryGetValue(lambda, out fcall)) {
+ if (CommandLineOptions.Clo.TraceVerify) {
+ Console.WriteLine("Old lambda: {0}", lam_str);
+ }
+ } else {
+ if (CommandLineOptions.Clo.TraceVerify) {
+ Console.WriteLine("New lambda: {0}", lam_str);
+ }
+ Function fn = new Function(tok, FreshLambdaFunctionName(), freshTypeVars, formals, res, "auto-generated lambda function",
+ Substituter.Apply(Substituter.SubstitutionFromHashtable(substFnAttrs), lambdaAttrs));
+ fn.OriginalLambdaExprAsString = lam_str;
+
+ fcall = new FunctionCall(new IdentifierExpr(tok, fn.Name));
+ fcall.Func = fn; // resolve here
+ liftedLambdas[lambda] = fcall;
+
+ List<Expr/*!*/> selectArgs = new List<Expr/*!*/>();
+ foreach (Variable/*!*/ v in lambda.Dummies) {
+ Contract.Assert(v != null);
+ selectArgs.Add(new IdentifierExpr(v.tok, v));
+ }
+ NAryExpr axcall = new NAryExpr(tok, fcall, axCallArgs);
+ axcall.Type = res.TypedIdent.Type;
+ axcall.TypeParameters = SimpleTypeParamInstantiation.From(freeTypeVars, fnTypeVarActuals);
+ NAryExpr select = Expr.Select(axcall, selectArgs);
+ select.Type = lambdaBody.Type;
+ List<Type/*!*/> selectTypeParamActuals = new List<Type/*!*/>();
+ List<TypeVariable> forallTypeVariables = new List<TypeVariable>();
+ foreach (TypeVariable/*!*/ tp in lambda.TypeParameters) {
+ Contract.Assert(tp != null);
+ selectTypeParamActuals.Add(tp);
+ forallTypeVariables.Add(tp);
+ }
+ forallTypeVariables.AddRange(freeTypeVars);
+ select.TypeParameters = SimpleTypeParamInstantiation.From(lambda.TypeParameters, selectTypeParamActuals);
+
+ Expr bb = Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), lambdaBody);
+ NAryExpr body = Expr.Eq(select, bb);
+ body.Type = Type.Bool;
+ body.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ Trigger trig = new Trigger(select.tok, true, new List<Expr> { select });
+
+ lambdaFunctions.Add(fn);
+ lambdaAxioms.Add(new ForallExpr(tok, forallTypeVariables, dummies,
+ Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), lambdaAttrs),
+ trig, body));
+ }
+
+ NAryExpr call = new NAryExpr(tok, fcall, callArgs);
+ call.Type = res.TypedIdent.Type;
+ call.TypeParameters = SimpleTypeParamInstantiation.From(freeTypeVars, fnTypeVarActuals);
+
+ return call;
+ }
+ public override Cmd VisitCallCmd(CallCmd node) {
+ var baseResult = base.VisitCallCmd(node);
+ node = baseResult as CallCmd;
+ if (node == null) {
+ return baseResult; // apparently, the base visitor already turned the lambda into something else
+ }
+ // also visit the desugaring (which the StandardVisitor does not do)
+ node.VisitDesugaring(this);
+ return node;
+ }
+ }
+ }
+
+ class OldFinder : ReadOnlyVisitor
+ {
+ public readonly GSet<Variable> FreeOldVars = new GSet<Variable>();
+ public override Expr VisitOldExpr(OldExpr node) {
+ Set freeVars = new Set();
+ node.Expr.ComputeFreeVariables(freeVars);
+ foreach (var v in freeVars) {
+ // Note, "v" is either a Variable or a TypeVariable
+ if (v is Variable) {
+ FreeOldVars.Add((Variable)v);
+ }
+ }
+ return node; // don't visit subexpressions, since ComputeFreeVariables has already gone through those
+ }
+ public override BinderExpr VisitBinderExpr(BinderExpr node) {
+ base.VisitBinderExpr(node);
+ // visit attributes, even though StandardVisitor does not do that (but maybe it should?)
+ if (node.Attributes != null) {
+ this.Visit(node.Attributes);
+ }
+ return node;
+ }
+ }
+
+} // end namespace
diff --git a/Source/Core/LoopUnroll.cs b/Source/Core/LoopUnroll.cs
index df1be84c..036d5f73 100644
--- a/Source/Core/LoopUnroll.cs
+++ b/Source/Core/LoopUnroll.cs
@@ -1,286 +1,286 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System.Diagnostics.Contracts;
-using System.Collections.Generic;
-using Bpl = Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-
-namespace Microsoft.Boogie {
- public class LoopUnroll {
- public static List<Block/*!*/>/*!*/ UnrollLoops(Block start, int unrollMaxDepth, bool soundLoopUnrolling) {
- Contract.Requires(start != null);
-
- Contract.Requires(0 <= unrollMaxDepth);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
- Dictionary<Block, GraphNode/*!*/> gd = new Dictionary<Block, GraphNode/*!*/>();
- HashSet<Block> beingVisited = new HashSet<Block>();
- GraphNode gStart = GraphNode.ComputeGraphInfo(null, start, gd, beingVisited);
-
- // Compute SCCs
- StronglyConnectedComponents<GraphNode/*!*/> sccs =
- new StronglyConnectedComponents<GraphNode/*!*/>(gd.Values, Preds, Succs);
- Contract.Assert(sccs != null);
- sccs.Compute();
- Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>> containingSCC = new Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>>();
- foreach (SCC<GraphNode/*!*/> scc in sccs) {
- foreach (GraphNode/*!*/ n in scc) {
- Contract.Assert(n != null);
- containingSCC[n] = scc;
- }
- }
-
- LoopUnroll lu = new LoopUnroll(unrollMaxDepth, soundLoopUnrolling, containingSCC, new List<Block/*!*/>());
- lu.Visit(gStart);
- lu.newBlockSeqGlobal.Reverse();
- return lu.newBlockSeqGlobal;
- }
-
- // This is supposed to "undo" to effect of loop unrolling
- // on block labels. It essentially removes the "#num" from the end
- // of lab, if there is something like this
- public static string sanitizeLabel(string lab)
- {
- if (!lab.Contains("#"))
- return lab;
-
- // Find the last occurrance of "#"
- int pos = lab.LastIndexOf('#');
-
- return lab.Substring(0, pos);
- }
-
- private static System.Collections.IEnumerable/*<GraphNode/*!>/*!*/ Succs(GraphNode n) {
- Contract.Requires(n != null);
- Contract.Ensures(Contract.Result<System.Collections.IEnumerable>() != null);
-
- List<GraphNode/*!*/>/*!*/ AllEdges = new List<GraphNode/*!*/>();
- AllEdges.AddRange(n.ForwardEdges);
- AllEdges.AddRange(n.BackEdges);
- return AllEdges;
- }
- private static System.Collections.IEnumerable/*<GraphNode!>*//*!*/ Preds(GraphNode n) {
- Contract.Requires(n != null);
- Contract.Ensures(Contract.Result<System.Collections.IEnumerable>() != null);
-
- return n.Predecessors;
- }
-
- class GraphNode {
- public readonly Block/*!*/ Block;
- public readonly List<Cmd>/*!*/ Body;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Block != null);
- Contract.Invariant(Body != null);
- Contract.Invariant(cce.NonNullElements(ForwardEdges));
- Contract.Invariant(cce.NonNullElements(BackEdges));
- Contract.Invariant(cce.NonNullElements(Predecessors));
- Contract.Invariant(isCutPoint == (BackEdges.Count != 0));
- }
-
- bool isCutPoint; // is set during ComputeGraphInfo
- public bool IsCutPoint {
- get {
- return isCutPoint;
- }
- }
- [Rep]
- public readonly List<GraphNode/*!*/>/*!*/ ForwardEdges = new List<GraphNode/*!*/>();
- [Rep]
- public readonly List<GraphNode/*!*/>/*!*/ BackEdges = new List<GraphNode/*!*/>();
- [Rep]
- public readonly List<GraphNode/*!*/>/*!*/ Predecessors = new List<GraphNode/*!*/>();
-
- GraphNode(Block b, List<Cmd> body) {
- Contract.Requires(body != null);
- Contract.Requires(b != null);
- this.Block = b;
- this.Body = body;
- }
-
- static List<Cmd> GetOptimizedBody(List<Cmd> cmds) {
- Contract.Requires(cmds != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- int n = 0;
- foreach (Cmd c in cmds) {
- n++;
- PredicateCmd pc = c as PredicateCmd;
- if (pc != null && pc.Expr is LiteralExpr && ((LiteralExpr)pc.Expr).IsFalse) {
- // return a sequence consisting of the commands seen so far
- Cmd[] s = new Cmd[n];
- for (int i = 0; i < n; i++) {
- s[i] = cmds[i];
- }
- return new List<Cmd>(s);
- }
- }
- return cmds;
- }
-
- public static GraphNode ComputeGraphInfo(GraphNode from, Block b, Dictionary<Block/*!*/, GraphNode/*!*/>/*!*/ gd, HashSet<Block> beingVisited) {
- Contract.Requires(beingVisited != null);
- Contract.Requires(b != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(gd));
- Contract.Ensures(Contract.Result<GraphNode>() != null);
- GraphNode g;
- if (gd.TryGetValue(b, out g)) {
- Contract.Assume(from != null);
- Contract.Assert(g != null);
- if (beingVisited.Contains(b)) {
- // it's a cut point
- g.isCutPoint = true;
- from.BackEdges.Add(g);
- g.Predecessors.Add(from);
- } else {
- from.ForwardEdges.Add(g);
- g.Predecessors.Add(from);
- }
-
- } else {
- List<Cmd> body = GetOptimizedBody(b.Cmds);
- g = new GraphNode(b, body);
- gd.Add(b, g);
- if (from != null) {
- from.ForwardEdges.Add(g);
- g.Predecessors.Add(from);
- }
-
- if (body != b.Cmds) {
- // the body was optimized -- there is no way through this block
- } else {
- beingVisited.Add(b);
-
- GotoCmd gcmd = b.TransferCmd as GotoCmd;
- if (gcmd != null) {
- Contract.Assume(gcmd.labelTargets != null);
- foreach (Block/*!*/ succ in gcmd.labelTargets) {
- Contract.Assert(succ != null);
- ComputeGraphInfo(g, succ, gd, beingVisited);
- }
- }
-
- beingVisited.Remove(b);
- }
- }
- return g;
- }
- }
-
- readonly List<Block/*!*/>/*!*/ newBlockSeqGlobal;
- readonly Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>>/*!*/ containingSCC;
- readonly int c;
- readonly bool soundLoopUnrolling;
- readonly LoopUnroll next;
- readonly LoopUnroll/*!*/ head;
-
- Dictionary<Block, Block/*!*/>/*!*/ newBlocks = new Dictionary<Block, Block/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(head != null);
- Contract.Invariant(cce.NonNullElements(newBlockSeqGlobal));
- Contract.Invariant(newBlocks != null && cce.NonNullElements(newBlocks.Values));
- }
-
-
- [NotDelayed]
- private LoopUnroll(int unrollMaxDepth, bool soundLoopUnrolling, Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>>/*!*/ scc, List<Block/*!*/>/*!*/ newBlockSeqGlobal)
- : base() {
- Contract.Requires(cce.NonNullElements(newBlockSeqGlobal));
- Contract.Requires(cce.NonNullDictionaryAndValues(scc) && Contract.ForAll(scc.Values, v => cce.NonNullElements(v)));
- Contract.Requires(0 <= unrollMaxDepth);
- this.newBlockSeqGlobal = newBlockSeqGlobal;
- this.c = unrollMaxDepth;
- this.containingSCC = scc;
- this.head = this;
- if (unrollMaxDepth != 0) {
- next = new LoopUnroll(unrollMaxDepth - 1, soundLoopUnrolling, scc, newBlockSeqGlobal, this);
- }
- }
-
- private LoopUnroll(int unrollMaxDepth, bool soundLoopUnrolling, Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>> scc, List<Block/*!*/>/*!*/ newBlockSeqGlobal, LoopUnroll head) {
- Contract.Requires(head != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(scc));
- Contract.Requires(cce.NonNullElements(newBlockSeqGlobal));
- Contract.Requires(0 <= unrollMaxDepth);
- this.newBlockSeqGlobal = newBlockSeqGlobal;
- this.c = unrollMaxDepth;
- this.soundLoopUnrolling = soundLoopUnrolling;
- this.containingSCC = scc;
- this.head = head;
- if (unrollMaxDepth != 0) {
- next = new LoopUnroll(unrollMaxDepth - 1, soundLoopUnrolling, scc, newBlockSeqGlobal, head);
- }
- }
-
- Block Visit(GraphNode node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Block>() != null);
- Block orig = node.Block;
- Block nw;
- if (newBlocks.TryGetValue(orig, out nw)) {
- Contract.Assert(nw != null);
-
- } else {
- List<Cmd> body;
- TransferCmd tcmd;
- Contract.Assert(orig.TransferCmd != null);
-
- if (next == null && node.IsCutPoint) {
- // as the body, use the assert/assume commands that make up the loop invariant
- body = new List<Cmd>();
- foreach (Cmd/*!*/ c in node.Body) {
- Contract.Assert(c != null);
- if (c is PredicateCmd || c is CommentCmd) {
- body.Add(c);
- } else {
- break;
- }
- }
- if (soundLoopUnrolling) {
- body.Add(new AssertCmd(orig.tok, Bpl.Expr.False));
- } else {
- body.Add(new AssumeCmd(orig.tok, Bpl.Expr.False));
- }
- tcmd = new ReturnCmd(orig.TransferCmd.tok);
-
- } else {
- body = node.Body;
- List<Block> newSuccs = new List<Block>();
-
- foreach (GraphNode succ in node.ForwardEdges) {
- Block s;
- if (containingSCC[node] == containingSCC[succ]) {
- s = Visit(succ);
- } else {
- Contract.Assert(head != null); // follows from object invariant
- s = head.Visit(succ);
- }
- newSuccs.Add(s);
- }
-
- Contract.Assert(next != null || node.BackEdges.Count == 0); // follows from if-else test above and the GraphNode invariant
- foreach (GraphNode succ in node.BackEdges) {
- Contract.Assert(next != null); // since if we get here, node.BackEdges.Count != 0
- Block s = next.Visit(succ);
- newSuccs.Add(s);
- }
-
- if (newSuccs.Count == 0) {
- tcmd = new ReturnCmd(orig.TransferCmd.tok);
- } else {
- tcmd = new GotoCmd(orig.TransferCmd.tok, newSuccs);
- }
- }
-
- nw = new Block(orig.tok, orig.Label + "#" + this.c, body, tcmd);
- newBlocks.Add(orig, nw);
- newBlockSeqGlobal.Add(nw);
- }
-
- return nw;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System.Diagnostics.Contracts;
+using System.Collections.Generic;
+using Bpl = Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+
+namespace Microsoft.Boogie {
+ public class LoopUnroll {
+ public static List<Block/*!*/>/*!*/ UnrollLoops(Block start, int unrollMaxDepth, bool soundLoopUnrolling) {
+ Contract.Requires(start != null);
+
+ Contract.Requires(0 <= unrollMaxDepth);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+ Dictionary<Block, GraphNode/*!*/> gd = new Dictionary<Block, GraphNode/*!*/>();
+ HashSet<Block> beingVisited = new HashSet<Block>();
+ GraphNode gStart = GraphNode.ComputeGraphInfo(null, start, gd, beingVisited);
+
+ // Compute SCCs
+ StronglyConnectedComponents<GraphNode/*!*/> sccs =
+ new StronglyConnectedComponents<GraphNode/*!*/>(gd.Values, Preds, Succs);
+ Contract.Assert(sccs != null);
+ sccs.Compute();
+ Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>> containingSCC = new Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>>();
+ foreach (SCC<GraphNode/*!*/> scc in sccs) {
+ foreach (GraphNode/*!*/ n in scc) {
+ Contract.Assert(n != null);
+ containingSCC[n] = scc;
+ }
+ }
+
+ LoopUnroll lu = new LoopUnroll(unrollMaxDepth, soundLoopUnrolling, containingSCC, new List<Block/*!*/>());
+ lu.Visit(gStart);
+ lu.newBlockSeqGlobal.Reverse();
+ return lu.newBlockSeqGlobal;
+ }
+
+ // This is supposed to "undo" to effect of loop unrolling
+ // on block labels. It essentially removes the "#num" from the end
+ // of lab, if there is something like this
+ public static string sanitizeLabel(string lab)
+ {
+ if (!lab.Contains("#"))
+ return lab;
+
+ // Find the last occurrance of "#"
+ int pos = lab.LastIndexOf('#');
+
+ return lab.Substring(0, pos);
+ }
+
+ private static System.Collections.IEnumerable/*<GraphNode/*!>/*!*/ Succs(GraphNode n) {
+ Contract.Requires(n != null);
+ Contract.Ensures(Contract.Result<System.Collections.IEnumerable>() != null);
+
+ List<GraphNode/*!*/>/*!*/ AllEdges = new List<GraphNode/*!*/>();
+ AllEdges.AddRange(n.ForwardEdges);
+ AllEdges.AddRange(n.BackEdges);
+ return AllEdges;
+ }
+ private static System.Collections.IEnumerable/*<GraphNode!>*//*!*/ Preds(GraphNode n) {
+ Contract.Requires(n != null);
+ Contract.Ensures(Contract.Result<System.Collections.IEnumerable>() != null);
+
+ return n.Predecessors;
+ }
+
+ class GraphNode {
+ public readonly Block/*!*/ Block;
+ public readonly List<Cmd>/*!*/ Body;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Block != null);
+ Contract.Invariant(Body != null);
+ Contract.Invariant(cce.NonNullElements(ForwardEdges));
+ Contract.Invariant(cce.NonNullElements(BackEdges));
+ Contract.Invariant(cce.NonNullElements(Predecessors));
+ Contract.Invariant(isCutPoint == (BackEdges.Count != 0));
+ }
+
+ bool isCutPoint; // is set during ComputeGraphInfo
+ public bool IsCutPoint {
+ get {
+ return isCutPoint;
+ }
+ }
+ [Rep]
+ public readonly List<GraphNode/*!*/>/*!*/ ForwardEdges = new List<GraphNode/*!*/>();
+ [Rep]
+ public readonly List<GraphNode/*!*/>/*!*/ BackEdges = new List<GraphNode/*!*/>();
+ [Rep]
+ public readonly List<GraphNode/*!*/>/*!*/ Predecessors = new List<GraphNode/*!*/>();
+
+ GraphNode(Block b, List<Cmd> body) {
+ Contract.Requires(body != null);
+ Contract.Requires(b != null);
+ this.Block = b;
+ this.Body = body;
+ }
+
+ static List<Cmd> GetOptimizedBody(List<Cmd> cmds) {
+ Contract.Requires(cmds != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ int n = 0;
+ foreach (Cmd c in cmds) {
+ n++;
+ PredicateCmd pc = c as PredicateCmd;
+ if (pc != null && pc.Expr is LiteralExpr && ((LiteralExpr)pc.Expr).IsFalse) {
+ // return a sequence consisting of the commands seen so far
+ Cmd[] s = new Cmd[n];
+ for (int i = 0; i < n; i++) {
+ s[i] = cmds[i];
+ }
+ return new List<Cmd>(s);
+ }
+ }
+ return cmds;
+ }
+
+ public static GraphNode ComputeGraphInfo(GraphNode from, Block b, Dictionary<Block/*!*/, GraphNode/*!*/>/*!*/ gd, HashSet<Block> beingVisited) {
+ Contract.Requires(beingVisited != null);
+ Contract.Requires(b != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(gd));
+ Contract.Ensures(Contract.Result<GraphNode>() != null);
+ GraphNode g;
+ if (gd.TryGetValue(b, out g)) {
+ Contract.Assume(from != null);
+ Contract.Assert(g != null);
+ if (beingVisited.Contains(b)) {
+ // it's a cut point
+ g.isCutPoint = true;
+ from.BackEdges.Add(g);
+ g.Predecessors.Add(from);
+ } else {
+ from.ForwardEdges.Add(g);
+ g.Predecessors.Add(from);
+ }
+
+ } else {
+ List<Cmd> body = GetOptimizedBody(b.Cmds);
+ g = new GraphNode(b, body);
+ gd.Add(b, g);
+ if (from != null) {
+ from.ForwardEdges.Add(g);
+ g.Predecessors.Add(from);
+ }
+
+ if (body != b.Cmds) {
+ // the body was optimized -- there is no way through this block
+ } else {
+ beingVisited.Add(b);
+
+ GotoCmd gcmd = b.TransferCmd as GotoCmd;
+ if (gcmd != null) {
+ Contract.Assume(gcmd.labelTargets != null);
+ foreach (Block/*!*/ succ in gcmd.labelTargets) {
+ Contract.Assert(succ != null);
+ ComputeGraphInfo(g, succ, gd, beingVisited);
+ }
+ }
+
+ beingVisited.Remove(b);
+ }
+ }
+ return g;
+ }
+ }
+
+ readonly List<Block/*!*/>/*!*/ newBlockSeqGlobal;
+ readonly Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>>/*!*/ containingSCC;
+ readonly int c;
+ readonly bool soundLoopUnrolling;
+ readonly LoopUnroll next;
+ readonly LoopUnroll/*!*/ head;
+
+ Dictionary<Block, Block/*!*/>/*!*/ newBlocks = new Dictionary<Block, Block/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(head != null);
+ Contract.Invariant(cce.NonNullElements(newBlockSeqGlobal));
+ Contract.Invariant(newBlocks != null && cce.NonNullElements(newBlocks.Values));
+ }
+
+
+ [NotDelayed]
+ private LoopUnroll(int unrollMaxDepth, bool soundLoopUnrolling, Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>>/*!*/ scc, List<Block/*!*/>/*!*/ newBlockSeqGlobal)
+ : base() {
+ Contract.Requires(cce.NonNullElements(newBlockSeqGlobal));
+ Contract.Requires(cce.NonNullDictionaryAndValues(scc) && Contract.ForAll(scc.Values, v => cce.NonNullElements(v)));
+ Contract.Requires(0 <= unrollMaxDepth);
+ this.newBlockSeqGlobal = newBlockSeqGlobal;
+ this.c = unrollMaxDepth;
+ this.containingSCC = scc;
+ this.head = this;
+ if (unrollMaxDepth != 0) {
+ next = new LoopUnroll(unrollMaxDepth - 1, soundLoopUnrolling, scc, newBlockSeqGlobal, this);
+ }
+ }
+
+ private LoopUnroll(int unrollMaxDepth, bool soundLoopUnrolling, Dictionary<GraphNode/*!*/, SCC<GraphNode/*!*/>> scc, List<Block/*!*/>/*!*/ newBlockSeqGlobal, LoopUnroll head) {
+ Contract.Requires(head != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(scc));
+ Contract.Requires(cce.NonNullElements(newBlockSeqGlobal));
+ Contract.Requires(0 <= unrollMaxDepth);
+ this.newBlockSeqGlobal = newBlockSeqGlobal;
+ this.c = unrollMaxDepth;
+ this.soundLoopUnrolling = soundLoopUnrolling;
+ this.containingSCC = scc;
+ this.head = head;
+ if (unrollMaxDepth != 0) {
+ next = new LoopUnroll(unrollMaxDepth - 1, soundLoopUnrolling, scc, newBlockSeqGlobal, head);
+ }
+ }
+
+ Block Visit(GraphNode node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+ Block orig = node.Block;
+ Block nw;
+ if (newBlocks.TryGetValue(orig, out nw)) {
+ Contract.Assert(nw != null);
+
+ } else {
+ List<Cmd> body;
+ TransferCmd tcmd;
+ Contract.Assert(orig.TransferCmd != null);
+
+ if (next == null && node.IsCutPoint) {
+ // as the body, use the assert/assume commands that make up the loop invariant
+ body = new List<Cmd>();
+ foreach (Cmd/*!*/ c in node.Body) {
+ Contract.Assert(c != null);
+ if (c is PredicateCmd || c is CommentCmd) {
+ body.Add(c);
+ } else {
+ break;
+ }
+ }
+ if (soundLoopUnrolling) {
+ body.Add(new AssertCmd(orig.tok, Bpl.Expr.False));
+ } else {
+ body.Add(new AssumeCmd(orig.tok, Bpl.Expr.False));
+ }
+ tcmd = new ReturnCmd(orig.TransferCmd.tok);
+
+ } else {
+ body = node.Body;
+ List<Block> newSuccs = new List<Block>();
+
+ foreach (GraphNode succ in node.ForwardEdges) {
+ Block s;
+ if (containingSCC[node] == containingSCC[succ]) {
+ s = Visit(succ);
+ } else {
+ Contract.Assert(head != null); // follows from object invariant
+ s = head.Visit(succ);
+ }
+ newSuccs.Add(s);
+ }
+
+ Contract.Assert(next != null || node.BackEdges.Count == 0); // follows from if-else test above and the GraphNode invariant
+ foreach (GraphNode succ in node.BackEdges) {
+ Contract.Assert(next != null); // since if we get here, node.BackEdges.Count != 0
+ Block s = next.Visit(succ);
+ newSuccs.Add(s);
+ }
+
+ if (newSuccs.Count == 0) {
+ tcmd = new ReturnCmd(orig.TransferCmd.tok);
+ } else {
+ tcmd = new GotoCmd(orig.TransferCmd.tok, newSuccs);
+ }
+ }
+
+ nw = new Block(orig.tok, orig.Label + "#" + this.c, body, tcmd);
+ newBlocks.Add(orig, nw);
+ newBlockSeqGlobal.Add(nw);
+ }
+
+ return nw;
+ }
+ }
+}
diff --git a/Source/Core/Makefile b/Source/Core/Makefile
index 4d3f433a..2b0cf4e6 100644
--- a/Source/Core/Makefile
+++ b/Source/Core/Makefile
@@ -1,20 +1,20 @@
-COCO = Coco.exe
-
-# ###############################################################################
-# The frame files are no longer in this directory. They must be downloaded
-# from http://boogiepartners.codeplex.com/. Update the FRAME_DIR variable to
-# point to whatever directory you install that into.
-# ###############################################################################
-FRAME_DIR = ..\..\..\boogiepartners\CocoR\Modified
-
-# "all" depends on 2 files, really (Parser.cs and Scanner.cs), but they
-# are both generated in one go and I don't know a better way to tell
-# nmake that. --KRML
-all: Parser.cs
-
-Parser.cs: $(FRAME_DIR)\Scanner.frame $(FRAME_DIR)\Parser.frame BoogiePL.atg
- $(COCO) BoogiePL.atg -namespace Microsoft.Boogie -frames $(FRAME_DIR)
-
-clean:
- if exist Scanner.cs del Scanner.cs
- if exist Parser.cs del Parser.cs
+COCO = Coco.exe
+
+# ###############################################################################
+# The frame files are no longer in this directory. They must be downloaded
+# from https://github.com/boogie-org/boogie-partners . Update the FRAME_DIR variable to
+# point to whatever directory you install that into.
+# ###############################################################################
+FRAME_DIR = ..\..\..\boogiepartners\CocoR\Modified
+
+# "all" depends on 2 files, really (Parser.cs and Scanner.cs), but they
+# are both generated in one go and I don't know a better way to tell
+# nmake that. --KRML
+all: Parser.cs
+
+Parser.cs: $(FRAME_DIR)\Scanner.frame $(FRAME_DIR)\Parser.frame BoogiePL.atg
+ $(COCO) BoogiePL.atg -namespace Microsoft.Boogie -frames $(FRAME_DIR)
+
+clean:
+ if exist Scanner.cs del Scanner.cs
+ if exist Parser.cs del Parser.cs
diff --git a/Source/Core/OOLongUtil.cs b/Source/Core/OOLongUtil.cs
index 0d7bfc35..767b64a1 100644
--- a/Source/Core/OOLongUtil.cs
+++ b/Source/Core/OOLongUtil.cs
@@ -1,210 +1,210 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Diagnostics.Contracts;
-
-namespace Boogie.Util {
- public class TeeWriter : TextWriter {
- readonly TextWriter/*!*/ a;
- readonly TextWriter/*!*/ b;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(a != null);
- Contract.Invariant(b != null);
- }
-
-
- public TeeWriter(TextWriter a, TextWriter b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- this.a = a;
- this.b = b;
- }
-
- public override System.Text.Encoding Encoding {
- get {
- return a.Encoding;
- }
- }
-
- public override void Close() {
- a.Close();
- b.Close();
- }
-
- public override void Flush() {
- a.Flush();
- b.Flush();
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return "<TeeWriter: " + a.ToString() + ", " + b.ToString() + ">";
- }
-
- public override void Write(char ch) {
- a.Write(ch);
- b.Write(ch);
- }
-
- public override void Write(string s) {
- a.Write(s);
- b.Write(s);
- }
- }
-
- /// <summary>
- /// A LineReader is a class that allows further subclasses to just override the ReadLine() method.
- /// It simply reads from the given "reader".
- /// </summary>
- public class LineReader : TextReader {
- [Rep]
- readonly TextReader/*!*/ reader;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(reader != null);
- Contract.Invariant(readAhead == null || (0 <= readAheadConsumed && readAheadConsumed < readAhead.Length));
- }
-
- string readAhead;
- int readAheadConsumed;
-
-
- public LineReader([Captured] TextReader reader) {
- Contract.Requires(reader != null);
- this.reader = reader;
- }
- public override void Close() {
- cce.BeginExpose(this);
- {
- reader.Close();
- }
- cce.EndExpose();
- }
- public override int Read() {
- cce.BeginExpose(this);
- try {
- while (readAhead == null) {
- readAhead = reader.ReadLine();
- if (readAhead == null) {
- // we're at EOF
- return -1;
- } else if (readAhead.Length > 0) {
- readAheadConsumed = 0;
- break;
- }
- }
- int res = readAhead[readAheadConsumed++];
- if (readAheadConsumed == readAhead.Length) {
- readAhead = null;
- }
- return res;
- } finally {
- cce.EndExpose();
- }
- }
- public override int Read(char[] buffer, int index, int count) {
-
- int n = 0;
- for (; n < count; n++) {
- int ch = Read();
- if (ch == -1) {
- break;
- }
- buffer[index + n] = (char)ch;
- }
- return n;
- }
- public override string ReadLine() {
- string res;
- if (readAhead != null) {
- cce.BeginExpose(this);
- {
- res = readAhead.Substring(readAheadConsumed);
- readAhead = null;
- }
- cce.EndExpose();
- } else {
- res = reader.ReadLine();
- }
- return res;
- }
- }
-
- public class IfdefReader : LineReader {
- [Rep]
- readonly List<string/*!*/>/*!*/ defines;
- [Rep]
- readonly List<bool>/*!*/ readState = new List<bool>();
- int ignoreCutoff = 0; // 0 means we're not ignoring
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(readState != null);
- Contract.Invariant(cce.NonNullElements(defines));
- Contract.Invariant(0 <= ignoreCutoff && ignoreCutoff <= readState.Count);
- }
-
-
-
- public IfdefReader([Captured] TextReader reader, [Captured] List<string/*!*/>/*!*/ defines)
- : base(reader) {
- Contract.Requires(reader != null);
- Contract.Requires(cce.NonNullElements(defines));
- this.defines = defines;
- }
-
- public override string ReadLine() {
- while (true) {
- string s = base.ReadLine();
- if (s == null) {
- return s;
- }
- string t = s.Trim();
- if (t.StartsWith("#if")) {
- string arg = t.Substring(3).TrimStart();
- bool sense = true;
- while (t.StartsWith("!")) {
- sense = !sense;
- t = t.Substring(1).TrimStart();
- }
- // push "true", since we're in a "then" branch
- readState.Add(true);
- if (ignoreCutoff == 0 && defines.Contains(arg) != sense) {
- ignoreCutoff = readState.Count; // start ignoring
- }
- } else if (t == "#else") {
- if (readState.Count == 0 || !readState[readState.Count - 1]) {
- return s; // malformed input; return the read line as if it were not special
- }
- // change the "true" to a "false" on top of the state, since we're now going into the "else" branch
- readState[readState.Count - 1] = false;
- if (ignoreCutoff == 0) {
- // the "then" branch had been included, so we'll ignore the "else" branch
- ignoreCutoff = readState.Count;
- } else if (ignoreCutoff == readState.Count) {
- // we had ignored the "then" branch, so we'll include the "else" branch
- ignoreCutoff = 0;
- }
- } else if (t == "#endif") {
- if (readState.Count == 0) {
- return s; // malformed input; return the read line as if it were not special
- }
- if (ignoreCutoff == readState.Count) {
- // we had ignored the branch that ends here; so, now we start including again
- ignoreCutoff = 0;
- }
- // pop
- readState.RemoveAt(readState.Count - 1);
- } else if (ignoreCutoff == 0) {
- return s;
- }
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Diagnostics.Contracts;
+
+namespace Boogie.Util {
+ public class TeeWriter : TextWriter {
+ readonly TextWriter/*!*/ a;
+ readonly TextWriter/*!*/ b;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(a != null);
+ Contract.Invariant(b != null);
+ }
+
+
+ public TeeWriter(TextWriter a, TextWriter b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ this.a = a;
+ this.b = b;
+ }
+
+ public override System.Text.Encoding Encoding {
+ get {
+ return a.Encoding;
+ }
+ }
+
+ public override void Close() {
+ a.Close();
+ b.Close();
+ }
+
+ public override void Flush() {
+ a.Flush();
+ b.Flush();
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "<TeeWriter: " + a.ToString() + ", " + b.ToString() + ">";
+ }
+
+ public override void Write(char ch) {
+ a.Write(ch);
+ b.Write(ch);
+ }
+
+ public override void Write(string s) {
+ a.Write(s);
+ b.Write(s);
+ }
+ }
+
+ /// <summary>
+ /// A LineReader is a class that allows further subclasses to just override the ReadLine() method.
+ /// It simply reads from the given "reader".
+ /// </summary>
+ public class LineReader : TextReader {
+ [Rep]
+ readonly TextReader/*!*/ reader;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(reader != null);
+ Contract.Invariant(readAhead == null || (0 <= readAheadConsumed && readAheadConsumed < readAhead.Length));
+ }
+
+ string readAhead;
+ int readAheadConsumed;
+
+
+ public LineReader([Captured] TextReader reader) {
+ Contract.Requires(reader != null);
+ this.reader = reader;
+ }
+ public override void Close() {
+ cce.BeginExpose(this);
+ {
+ reader.Close();
+ }
+ cce.EndExpose();
+ }
+ public override int Read() {
+ cce.BeginExpose(this);
+ try {
+ while (readAhead == null) {
+ readAhead = reader.ReadLine();
+ if (readAhead == null) {
+ // we're at EOF
+ return -1;
+ } else if (readAhead.Length > 0) {
+ readAheadConsumed = 0;
+ break;
+ }
+ }
+ int res = readAhead[readAheadConsumed++];
+ if (readAheadConsumed == readAhead.Length) {
+ readAhead = null;
+ }
+ return res;
+ } finally {
+ cce.EndExpose();
+ }
+ }
+ public override int Read(char[] buffer, int index, int count) {
+
+ int n = 0;
+ for (; n < count; n++) {
+ int ch = Read();
+ if (ch == -1) {
+ break;
+ }
+ buffer[index + n] = (char)ch;
+ }
+ return n;
+ }
+ public override string ReadLine() {
+ string res;
+ if (readAhead != null) {
+ cce.BeginExpose(this);
+ {
+ res = readAhead.Substring(readAheadConsumed);
+ readAhead = null;
+ }
+ cce.EndExpose();
+ } else {
+ res = reader.ReadLine();
+ }
+ return res;
+ }
+ }
+
+ public class IfdefReader : LineReader {
+ [Rep]
+ readonly List<string/*!*/>/*!*/ defines;
+ [Rep]
+ readonly List<bool>/*!*/ readState = new List<bool>();
+ int ignoreCutoff = 0; // 0 means we're not ignoring
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(readState != null);
+ Contract.Invariant(cce.NonNullElements(defines));
+ Contract.Invariant(0 <= ignoreCutoff && ignoreCutoff <= readState.Count);
+ }
+
+
+
+ public IfdefReader([Captured] TextReader reader, [Captured] List<string/*!*/>/*!*/ defines)
+ : base(reader) {
+ Contract.Requires(reader != null);
+ Contract.Requires(cce.NonNullElements(defines));
+ this.defines = defines;
+ }
+
+ public override string ReadLine() {
+ while (true) {
+ string s = base.ReadLine();
+ if (s == null) {
+ return s;
+ }
+ string t = s.Trim();
+ if (t.StartsWith("#if")) {
+ string arg = t.Substring(3).TrimStart();
+ bool sense = true;
+ while (t.StartsWith("!")) {
+ sense = !sense;
+ t = t.Substring(1).TrimStart();
+ }
+ // push "true", since we're in a "then" branch
+ readState.Add(true);
+ if (ignoreCutoff == 0 && defines.Contains(arg) != sense) {
+ ignoreCutoff = readState.Count; // start ignoring
+ }
+ } else if (t == "#else") {
+ if (readState.Count == 0 || !readState[readState.Count - 1]) {
+ return s; // malformed input; return the read line as if it were not special
+ }
+ // change the "true" to a "false" on top of the state, since we're now going into the "else" branch
+ readState[readState.Count - 1] = false;
+ if (ignoreCutoff == 0) {
+ // the "then" branch had been included, so we'll ignore the "else" branch
+ ignoreCutoff = readState.Count;
+ } else if (ignoreCutoff == readState.Count) {
+ // we had ignored the "then" branch, so we'll include the "else" branch
+ ignoreCutoff = 0;
+ }
+ } else if (t == "#endif") {
+ if (readState.Count == 0) {
+ return s; // malformed input; return the read line as if it were not special
+ }
+ if (ignoreCutoff == readState.Count) {
+ // we had ignored the branch that ends here; so, now we start including again
+ ignoreCutoff = 0;
+ }
+ // pop
+ readState.RemoveAt(readState.Count - 1);
+ } else if (ignoreCutoff == 0) {
+ return s;
+ }
+ }
+ }
+ }
+}
diff --git a/Source/Core/Parser.cs b/Source/Core/Parser.cs
index 7982f594..1f8d17d6 100644
--- a/Source/Core/Parser.cs
+++ b/Source/Core/Parser.cs
@@ -1,2425 +1,2425 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using Microsoft.Boogie;
-using Microsoft.Basetypes;
-using Bpl = Microsoft.Boogie;
-
-
-
-
-using System;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie {
-
-
-
-public class Parser {
- public const int _EOF = 0;
- public const int _ident = 1;
- public const int _bvlit = 2;
- public const int _digits = 3;
- public const int _string = 4;
- public const int _decimal = 5;
- public const int _float = 6;
- public const int _fp = 97;
- public const int maxT = 98;
-
- const bool T = true;
- const bool x = false;
- const int minErrDist = 2;
-
- public Scanner/*!*/ scanner;
- public Errors/*!*/ errors;
-
- public Token/*!*/ t; // last recognized token
- public Token/*!*/ la; // lookahead token
- int errDist = minErrDist;
-
-readonly Program/*!*/ Pgm;
-
-readonly Expr/*!*/ dummyExpr;
-readonly Cmd/*!*/ dummyCmd;
-readonly Block/*!*/ dummyBlock;
-readonly Bpl.Type/*!*/ dummyType;
-readonly List<Expr>/*!*/ dummyExprSeq;
-readonly TransferCmd/*!*/ dummyTransferCmd;
-readonly StructuredCmd/*!*/ dummyStructuredCmd;
-
-///<summary>
-///Returns the number of parsing errors encountered. If 0, "program" returns as
-///the parsed program.
-///</summary>
-public static int Parse (string/*!*/ filename, /*maybe null*/ List<string/*!*/> defines, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
- Contract.Requires(filename != null);
- Contract.Requires(cce.NonNullElements(defines,true));
-
- if (defines == null) {
- defines = new List<string/*!*/>();
- }
-
- if (filename == "stdin.bpl") {
- var s = ParserHelper.Fill(Console.In, defines);
- return Parse(s, filename, out program, useBaseName);
- } else {
- FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
- var s = ParserHelper.Fill(stream, defines);
- var ret = Parse(s, filename, out program, useBaseName);
- stream.Close();
- return ret;
- }
-}
-
-
-public static int Parse (string s, string/*!*/ filename, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
- Contract.Requires(s != null);
- Contract.Requires(filename != null);
-
- byte[]/*!*/ buffer = cce.NonNull(UTF8Encoding.Default.GetBytes(s));
- MemoryStream ms = new MemoryStream(buffer,false);
- Errors errors = new Errors();
- Scanner scanner = new Scanner(ms, errors, filename, useBaseName);
-
- Parser parser = new Parser(scanner, errors, false);
- parser.Parse();
- if (parser.errors.count == 0)
- {
- program = parser.Pgm;
- program.ProcessDatatypeConstructors();
- return 0;
- }
- else
- {
- program = null;
- return parser.errors.count;
- }
-}
-
-public Parser(Scanner/*!*/ scanner, Errors/*!*/ errors, bool disambiguation)
- : this(scanner, errors)
-{
- // initialize readonly fields
- Pgm = new Program();
- dummyExpr = new LiteralExpr(Token.NoToken, false);
- dummyCmd = new AssumeCmd(Token.NoToken, dummyExpr);
- dummyBlock = new Block(Token.NoToken, "dummyBlock", new List<Cmd>(), new ReturnCmd(Token.NoToken));
- dummyType = new BasicType(Token.NoToken, SimpleType.Bool);
- dummyExprSeq = new List<Expr> ();
- dummyTransferCmd = new ReturnCmd(Token.NoToken);
- dummyStructuredCmd = new BreakCmd(Token.NoToken, null);
-}
-
-// Class to represent the bounds of a bitvector expression t[a:b].
-// Objects of this class only exist during parsing and are directly
-// turned into BvExtract before they get anywhere else
-private class BvBounds : Expr {
- public BigNum Lower;
- public BigNum Upper;
- public BvBounds(IToken/*!*/ tok, BigNum lower, BigNum upper)
- : base(tok, /*immutable=*/ false) {
- Contract.Requires(tok != null);
- this.Lower = lower;
- this.Upper = upper;
- }
- public override Bpl.Type/*!*/ ShallowType { get {Contract.Ensures(Contract.Result<Bpl.Type>() != null); return Bpl.Type.Int; } }
- public override void Resolve(ResolutionContext/*!*/ rc) {
- // Contract.Requires(rc != null);
- rc.Error(this, "bitvector bounds in illegal position");
- }
- public override void Emit(TokenTextWriter/*!*/ stream,
- int contextBindingStrength, bool fragileContext) {
- Contract.Assert(false);throw new cce.UnreachableException();
- }
- public override void ComputeFreeVariables(GSet<object>/*!*/ freeVars) { Contract.Assert(false);throw new cce.UnreachableException(); }
- public override int ComputeHashCode() {
- return base.GetHashCode();
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-
- public Parser(Scanner/*!*/ scanner, Errors/*!*/ errors) {
- this.scanner = scanner;
- this.errors = errors;
- Token/*!*/ tok = new Token();
- tok.val = "";
- this.la = tok;
- this.t = new Token(); // just to satisfy its non-null constraint
- }
-
- void SynErr (int n) {
- if (errDist >= minErrDist) errors.SynErr(la.filename, la.line, la.col, n);
- errDist = 0;
- }
-
- public void SemErr (string/*!*/ msg) {
- Contract.Requires(msg != null);
- if (errDist >= minErrDist) errors.SemErr(t, msg);
- errDist = 0;
- }
-
- public void SemErr(IToken/*!*/ tok, string/*!*/ msg) {
- Contract.Requires(tok != null);
- Contract.Requires(msg != null);
- errors.SemErr(tok, msg);
- }
-
- void Get () {
- for (;;) {
- t = la;
- la = scanner.Scan();
- if (la.kind <= maxT) { ++errDist; break; }
-
- la = t;
- }
- }
-
- void Expect (int n) {
- if (la.kind==n) Get(); else { SynErr(n); }
- }
-
- bool StartOf (int s) {
- return set[s, la.kind];
- }
-
- void ExpectWeak (int n, int follow) {
- if (la.kind == n) Get();
- else {
- SynErr(n);
- while (!StartOf(follow)) Get();
- }
- }
-
-
- bool WeakSeparator(int n, int syFol, int repFol) {
- int kind = la.kind;
- if (kind == n) {Get(); return true;}
- else if (StartOf(repFol)) {return false;}
- else {
- SynErr(n);
- while (!(set[syFol, kind] || set[repFol, kind] || set[0, kind])) {
- Get();
- kind = la.kind;
- }
- return StartOf(syFol);
- }
- }
-
-
- void BoogiePL() {
- List<Variable>/*!*/ vs;
- List<Declaration>/*!*/ ds;
- Axiom/*!*/ ax;
- List<Declaration/*!*/>/*!*/ ts;
- Procedure/*!*/ pr;
- Implementation im;
- Implementation/*!*/ nnim;
-
- while (StartOf(1)) {
- switch (la.kind) {
- case 21: {
- Consts(out vs);
- foreach(Bpl.Variable/*!*/ v in vs){
- Contract.Assert(v != null);
- Pgm.AddTopLevelDeclaration(v);
- }
-
- break;
- }
- case 25: {
- Function(out ds);
- foreach(Bpl.Declaration/*!*/ d in ds){
- Contract.Assert(d != null);
- Pgm.AddTopLevelDeclaration(d);
- }
-
- break;
- }
- case 29: {
- Axiom(out ax);
- Pgm.AddTopLevelDeclaration(ax);
- break;
- }
- case 30: {
- UserDefinedTypes(out ts);
- foreach(Declaration/*!*/ td in ts){
- Contract.Assert(td != null);
- Pgm.AddTopLevelDeclaration(td);
- }
-
- break;
- }
- case 7: {
- GlobalVars(out vs);
- foreach(Bpl.Variable/*!*/ v in vs){
- Contract.Assert(v != null);
- Pgm.AddTopLevelDeclaration(v);
- }
-
- break;
- }
- case 32: {
- Procedure(out pr, out im);
- Pgm.AddTopLevelDeclaration(pr);
- if (im != null) {
- Pgm.AddTopLevelDeclaration(im);
- }
-
- break;
- }
- case 33: {
- Implementation(out nnim);
- Pgm.AddTopLevelDeclaration(nnim);
- break;
- }
- }
- }
- Expect(0);
- }
-
- void Consts(out List<Variable>/*!*/ ds) {
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null); IToken/*!*/ y; List<TypedIdent>/*!*/ xs;
- ds = new List<Variable>();
- bool u = false; QKeyValue kv = null;
- bool ChildrenComplete = false;
- List<ConstantParent/*!*/> Parents = null;
- Expect(21);
- y = t;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- if (la.kind == 22) {
- Get();
- u = true;
- }
- IdsType(out xs);
- if (la.kind == 23) {
- OrderSpec(out ChildrenComplete, out Parents);
- }
- bool makeClone = false;
- foreach(TypedIdent/*!*/ x in xs){
- Contract.Assert(x != null);
-
- // ensure that no sharing is introduced
- List<ConstantParent/*!*/> ParentsClone;
- if (makeClone && Parents != null) {
- ParentsClone = new List<ConstantParent/*!*/> ();
- foreach (ConstantParent/*!*/ p in Parents){
- Contract.Assert(p != null);
- ParentsClone.Add(new ConstantParent (
- new IdentifierExpr (p.Parent.tok, p.Parent.Name),
- p.Unique));}
- } else {
- ParentsClone = Parents;
- }
- makeClone = true;
-
- ds.Add(new Constant(y, x, u, ParentsClone, ChildrenComplete, kv));
- }
-
- Expect(8);
- }
-
- void Function(out List<Declaration>/*!*/ ds) {
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- ds = new List<Declaration>(); IToken/*!*/ z;
- IToken/*!*/ typeParamTok;
- var typeParams = new List<TypeVariable>();
- var arguments = new List<Variable>();
- TypedIdent/*!*/ tyd;
- TypedIdent retTyd = null;
- Bpl.Type/*!*/ retTy;
- QKeyValue argKv = null;
- QKeyValue kv = null;
- Expr definition = null;
- Expr/*!*/ tmp;
-
- Expect(25);
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Ident(out z);
- if (la.kind == 19) {
- TypeParams(out typeParamTok, out typeParams);
- }
- Expect(9);
- if (StartOf(2)) {
- VarOrType(out tyd, out argKv);
- arguments.Add(new Formal(tyd.tok, tyd, true, argKv));
- while (la.kind == 12) {
- Get();
- VarOrType(out tyd, out argKv);
- arguments.Add(new Formal(tyd.tok, tyd, true, argKv));
- }
- }
- Expect(10);
- argKv = null;
- if (la.kind == 26) {
- Get();
- Expect(9);
- VarOrType(out retTyd, out argKv);
- Expect(10);
- } else if (la.kind == 11) {
- Get();
- Type(out retTy);
- retTyd = new TypedIdent(retTy.tok, TypedIdent.NoName, retTy);
- } else SynErr(99);
- if (la.kind == 27) {
- Get();
- Expression(out tmp);
- definition = tmp;
- Expect(28);
- } else if (la.kind == 8) {
- Get();
- } else SynErr(100);
- if (retTyd == null) {
- // construct a dummy type for the case of syntax error
- retTyd = new TypedIdent(t, TypedIdent.NoName, new BasicType(t, SimpleType.Int));
- }
- Function/*!*/ func = new Function(z, z.val, typeParams, arguments,
- new Formal(retTyd.tok, retTyd, false, argKv), null, kv);
- Contract.Assert(func != null);
- ds.Add(func);
- bool allUnnamed = true;
- foreach(Formal/*!*/ f in arguments){
- Contract.Assert(f != null);
- if (f.TypedIdent.HasName) {
- allUnnamed = false;
- break;
- }
- }
- if (!allUnnamed) {
- Bpl.Type prevType = null;
- for (int i = arguments.Count; 0 <= --i; ) {
- TypedIdent/*!*/ curr = cce.NonNull(arguments[i]).TypedIdent;
- if (curr.HasName) {
- // the argument was given as both an identifier and a type
- prevType = curr.Type;
- } else {
- // the argument was given as just one "thing", which syntactically parsed as a type
- if (prevType == null) {
- this.errors.SemErr(curr.tok, "the type of the last parameter is unspecified");
- break;
- }
- Bpl.Type ty = curr.Type;
- var uti = ty as UnresolvedTypeIdentifier;
- if (uti != null && uti.Arguments.Count == 0) {
- // the given "thing" was just an identifier, so let's use it as the name of the parameter
- curr.Name = uti.Name;
- curr.Type = prevType;
- } else {
- this.errors.SemErr(curr.tok, "expecting an identifier as parameter name");
- }
- }
- }
- }
- if (definition != null) {
- // generate either an axiom or a function body
- if (QKeyValue.FindBoolAttribute(kv, "inline")) {
- func.Body = definition;
- } else {
- ds.Add(func.CreateDefinitionAxiom(definition, kv));
- }
- }
-
- }
-
- void Axiom(out Axiom/*!*/ m) {
- Contract.Ensures(Contract.ValueAtReturn(out m) != null); Expr/*!*/ e; QKeyValue kv = null;
- Expect(29);
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- IToken/*!*/ x = t;
- Proposition(out e);
- Expect(8);
- m = new Axiom(x,e, null, kv);
- }
-
- void UserDefinedTypes(out List<Declaration/*!*/>/*!*/ ts) {
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out ts))); Declaration/*!*/ decl; QKeyValue kv = null; ts = new List<Declaration/*!*/> ();
- Expect(30);
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- UserDefinedType(out decl, kv);
- ts.Add(decl);
- while (la.kind == 12) {
- Get();
- UserDefinedType(out decl, kv);
- ts.Add(decl);
- }
- Expect(8);
- }
-
- void GlobalVars(out List<Variable>/*!*/ ds) {
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- QKeyValue kv = null;
- ds = new List<Variable>();
- var dsx = ds;
-
- Expect(7);
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- IdsTypeWheres(true, "global variables", delegate(TypedIdent tyd) { dsx.Add(new GlobalVariable(tyd.tok, tyd, kv)); } );
- Expect(8);
- }
-
- void Procedure(out Procedure/*!*/ proc, out /*maybe null*/ Implementation impl) {
- Contract.Ensures(Contract.ValueAtReturn(out proc) != null); IToken/*!*/ x;
- List<TypeVariable>/*!*/ typeParams;
- List<Variable>/*!*/ ins, outs;
- List<Requires>/*!*/ pre = new List<Requires>();
- List<IdentifierExpr>/*!*/ mods = new List<IdentifierExpr>();
- List<Ensures>/*!*/ post = new List<Ensures>();
-
- List<Variable>/*!*/ locals = new List<Variable>();
- StmtList/*!*/ stmtList;
- QKeyValue kv = null;
- impl = null;
-
- Expect(32);
- ProcSignature(true, out x, out typeParams, out ins, out outs, out kv);
- if (la.kind == 8) {
- Get();
- while (StartOf(3)) {
- Spec(pre, mods, post);
- }
- } else if (StartOf(4)) {
- while (StartOf(3)) {
- Spec(pre, mods, post);
- }
- ImplBody(out locals, out stmtList);
- impl = new Implementation(x, x.val, typeParams,
- Formal.StripWhereClauses(ins), Formal.StripWhereClauses(outs), locals, stmtList, kv == null ? null : (QKeyValue)kv.Clone(), this.errors);
-
- } else SynErr(99);
- proc = new Procedure(x, x.val, typeParams, ins, outs, pre, mods, post, kv);
- }
-
- void Implementation(out Implementation/*!*/ impl) {
- Contract.Ensures(Contract.ValueAtReturn(out impl) != null); IToken/*!*/ x;
- List<TypeVariable>/*!*/ typeParams;
- List<Variable>/*!*/ ins, outs;
- List<Variable>/*!*/ locals;
- StmtList/*!*/ stmtList;
- QKeyValue kv;
-
- Expect(33);
- ProcSignature(false, out x, out typeParams, out ins, out outs, out kv);
- ImplBody(out locals, out stmtList);
- impl = new Implementation(x, x.val, typeParams, ins, outs, locals, stmtList, kv, this.errors);
- }
-
- void Attribute(ref QKeyValue kv) {
- Trigger trig = null;
- AttributeOrTrigger(ref kv, ref trig);
- if (trig != null) this.SemErr("only attributes, not triggers, allowed here");
- }
-
- void IdsTypeWheres(bool allowWhereClauses, string context, System.Action<TypedIdent> action ) {
- IdsTypeWhere(allowWhereClauses, context, action);
- while (la.kind == 12) {
- Get();
- IdsTypeWhere(allowWhereClauses, context, action);
- }
- }
-
- void LocalVars(List<Variable>/*!*/ ds) {
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- QKeyValue kv = null;
-
- Expect(7);
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- IdsTypeWheres(true, "local variables", delegate(TypedIdent tyd) { ds.Add(new LocalVariable(tyd.tok, tyd, kv)); } );
- Expect(8);
- }
-
- void ProcFormals(bool incoming, bool allowWhereClauses, out List<Variable>/*!*/ ds) {
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- ds = new List<Variable>();
- var dsx = ds;
- var context = allowWhereClauses ? "procedure formals" : "the 'implementation' copies of formals";
-
- Expect(9);
- if (la.kind == 1 || la.kind == 27) {
- AttrsIdsTypeWheres(allowWhereClauses, allowWhereClauses, context, delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new Formal(tyd.tok, tyd, incoming, kv)); });
- }
- Expect(10);
- }
-
- void AttrsIdsTypeWheres(bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action ) {
- AttributesIdsTypeWhere(allowAttributes, allowWhereClauses, context, action);
- while (la.kind == 12) {
- Get();
- AttributesIdsTypeWhere(allowAttributes, allowWhereClauses, context, action);
- }
- }
-
- void BoundVars(IToken/*!*/ x, out List<Variable>/*!*/ ds) {
- Contract.Requires(x != null);
- Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
- List<TypedIdent>/*!*/ tyds = new List<TypedIdent>();
- ds = new List<Variable>();
- var dsx = ds;
-
- AttrsIdsTypeWheres(true, false, "bound variables", delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new BoundVariable(tyd.tok, tyd, kv)); } );
- }
-
- void IdsType(out List<TypedIdent>/*!*/ tyds) {
- Contract.Ensures(Contract.ValueAtReturn(out tyds) != null); List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty;
- Idents(out ids);
- Expect(11);
- Type(out ty);
- tyds = new List<TypedIdent>();
- foreach(Token/*!*/ id in ids){
- Contract.Assert(id != null);
- tyds.Add(new TypedIdent(id, id.val, ty, null));
- }
-
- }
-
- void Idents(out List<IToken>/*!*/ xs) {
- Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>();
- Ident(out id);
- xs.Add(id);
- while (la.kind == 12) {
- Get();
- Ident(out id);
- xs.Add(id);
- }
- }
-
- void Type(out Bpl.Type/*!*/ ty) {
- Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken/*!*/ tok; ty = dummyType;
- if (StartOf(5)) {
- TypeAtom(out ty);
- } else if (la.kind == 1) {
- Ident(out tok);
- List<Bpl.Type>/*!*/ args = new List<Bpl.Type> ();
- if (StartOf(6)) {
- TypeArgs(args);
- }
- ty = new UnresolvedTypeIdentifier (tok, tok.val, args);
- } else if (la.kind == 17 || la.kind == 19) {
- MapType(out ty);
- } else SynErr(100);
- }
-
- void AttributesIdsTypeWhere(bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action ) {
- QKeyValue kv = null;
- while (la.kind == 27) {
- Attribute(ref kv);
- if (!allowAttributes) {
- kv = null;
- this.SemErr("attributes are not allowed on " + context);
- }
-
- }
- IdsTypeWhere(allowWhereClauses, context, delegate(TypedIdent tyd) { action(tyd, kv); });
- }
-
- void IdsTypeWhere(bool allowWhereClauses, string context, System.Action<TypedIdent> action ) {
- List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty; Expr wh = null; Expr/*!*/ nne;
- Idents(out ids);
- Expect(11);
- Type(out ty);
- if (la.kind == 13) {
- Get();
- Expression(out nne);
- if (!allowWhereClauses) {
- this.SemErr("where clause not allowed on " + context);
- } else {
- wh = nne;
- }
-
- }
- foreach(Token/*!*/ id in ids){
- Contract.Assert(id != null);
- action(new TypedIdent(id, id.val, ty, wh));
- }
-
- }
-
- void Expression(out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
- ImpliesExpression(false, out e0);
- while (la.kind == 55 || la.kind == 56) {
- EquivOp();
- x = t;
- ImpliesExpression(false, out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.Iff, e0, e1);
- }
- }
-
- void TypeAtom(out Bpl.Type/*!*/ ty) {
- Contract.Ensures(Contract.ValueAtReturn(out ty) != null); ty = dummyType;
- if (la.kind == 14) {
- Get();
- ty = new BasicType(t, SimpleType.Int);
- } else if (la.kind == 15) {
- Get();
- ty = new BasicType(t, SimpleType.Real);
- } else if (la.kind == 98) {
- Get();
- ty = FType();
- } else if (la.kind == 16) {
- Get();
- ty = new BasicType(t, SimpleType.Bool);
- } else if (la.kind == 9) {
- Get();
- Type(out ty);
- Expect(10);
- } else SynErr(101);
- }
-
- FloatType FType() {
- if (t.val.Length > 5) {
- switch (Int32.Parse(t.val.Substring(5))) {
- case 16:
- return new FloatType(t, 5, 11);
- case 32:
- return new FloatType(t, 8, 24);
- case 64:
- return new FloatType(t, 11, 53);
- case 128:
- return new FloatType(t, 15, 113);
- default:
- SynErr(3);
- return new FloatType(t, 0, 0);
- }
- }
- else {
- try {
- Expect(19); //<
- Expect(3); //int
- int exp = Int32.Parse(t.val);
- Expect(12); //,
- Expect(3); //int
- int man = Int32.Parse(t.val);
- Expect(20); //>
- return new FloatType(t, exp, man);
- }
- catch (Exception) {
- return new FloatType(t, 0, 0);
- }
- }
- }
-
- void Ident(out IToken/*!*/ x) {
- Contract.Ensures(Contract.ValueAtReturn(out x) != null);
- Expect(1);
- x = t;
- if (x.val.StartsWith("\\"))
- x.val = x.val.Substring(1);
-
- }
-
- void TypeArgs(List<Bpl.Type>/*!*/ ts) {
- Contract.Requires(ts != null); IToken/*!*/ tok; Bpl.Type/*!*/ ty;
- if (StartOf(5)) {
- TypeAtom(out ty);
- ts.Add(ty);
- if (StartOf(6)) {
- TypeArgs(ts);
- }
- } else if (la.kind == 1) {
- Ident(out tok);
- List<Bpl.Type>/*!*/ args = new List<Bpl.Type> ();
- ts.Add(new UnresolvedTypeIdentifier (tok, tok.val, args));
- if (StartOf(6)) {
- TypeArgs(ts);
- }
- } else if (la.kind == 17 || la.kind == 19) {
- MapType(out ty);
- ts.Add(ty);
- } else SynErr(102);
- }
-
- void MapType(out Bpl.Type/*!*/ ty) {
- Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken tok = null;
- IToken/*!*/ nnTok;
- List<Bpl.Type>/*!*/ arguments = new List<Bpl.Type>();
- Bpl.Type/*!*/ result;
- List<TypeVariable>/*!*/ typeParameters = new List<TypeVariable>();
-
- if (la.kind == 19) {
- TypeParams(out nnTok, out typeParameters);
- tok = nnTok;
- }
- Expect(17);
- if (tok == null) tok = t;
- if (StartOf(6)) {
- Types(arguments);
- }
- Expect(18);
- Type(out result);
- ty = new MapType(tok, typeParameters, arguments, result);
-
- }
-
- void TypeParams(out IToken/*!*/ tok, out List<TypeVariable>/*!*/ typeParams) {
- Contract.Ensures(Contract.ValueAtReturn(out tok) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); List<IToken>/*!*/ typeParamToks;
- Expect(19);
- tok = t;
- Idents(out typeParamToks);
- Expect(20);
- typeParams = new List<TypeVariable> ();
- foreach(Token/*!*/ id in typeParamToks){
- Contract.Assert(id != null);
- typeParams.Add(new TypeVariable(id, id.val));}
-
- }
-
- void Types(List<Bpl.Type>/*!*/ ts) {
- Contract.Requires(ts != null); Bpl.Type/*!*/ ty;
- Type(out ty);
- ts.Add(ty);
- while (la.kind == 12) {
- Get();
- Type(out ty);
- ts.Add(ty);
- }
- }
-
- void OrderSpec(out bool ChildrenComplete, out List<ConstantParent/*!*/> Parents) {
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out Parents),true)); ChildrenComplete = false;
- Parents = null;
- bool u;
- IToken/*!*/ parent;
- Expect(23);
- Parents = new List<ConstantParent/*!*/> ();
- u = false;
- if (la.kind == 1 || la.kind == 22) {
- if (la.kind == 22) {
- Get();
- u = true;
- }
- Ident(out parent);
- Parents.Add(new ConstantParent (
- new IdentifierExpr(parent, parent.val), u));
- while (la.kind == 12) {
- Get();
- u = false;
- if (la.kind == 22) {
- Get();
- u = true;
- }
- Ident(out parent);
- Parents.Add(new ConstantParent (
- new IdentifierExpr(parent, parent.val), u));
- }
- }
- if (la.kind == 24) {
- Get();
- ChildrenComplete = true;
- }
- }
-
- void VarOrType(out TypedIdent/*!*/ tyd, out QKeyValue kv) {
- Contract.Ensures(Contract.ValueAtReturn(out tyd) != null);
- string/*!*/ varName = TypedIdent.NoName;
- Bpl.Type/*!*/ ty;
- IToken/*!*/ tok;
- kv = null;
-
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Type(out ty);
- tok = ty.tok;
- if (la.kind == 11) {
- Get();
- var uti = ty as UnresolvedTypeIdentifier;
- if (uti != null && uti.Arguments.Count == 0) {
- varName = uti.Name;
- } else {
- this.SemErr("expected identifier before ':'");
- }
-
- Type(out ty);
- }
- tyd = new TypedIdent(tok, varName, ty);
- }
-
- void Proposition(out Expr/*!*/ e) {
- Contract.Ensures(Contract.ValueAtReturn(out e) != null);
- Expression(out e);
- }
-
- void UserDefinedType(out Declaration/*!*/ decl, QKeyValue kv) {
- Contract.Ensures(Contract.ValueAtReturn(out decl) != null); IToken/*!*/ id; List<IToken>/*!*/ paramTokens = new List<IToken> ();
- Bpl.Type/*!*/ body = dummyType; bool synonym = false;
- Ident(out id);
- if (la.kind == 1) {
- WhiteSpaceIdents(out paramTokens);
- }
- if (la.kind == 31) {
- Get();
- Type(out body);
- synonym = true;
- }
- if (synonym) {
- List<TypeVariable>/*!*/ typeParams = new List<TypeVariable>();
- foreach(Token/*!*/ t in paramTokens){
- Contract.Assert(t != null);
- typeParams.Add(new TypeVariable(t, t.val));}
- decl = new TypeSynonymDecl(id, id.val, typeParams, body, kv);
- } else {
- decl = new TypeCtorDecl(id, id.val, paramTokens.Count, kv);
- }
-
- }
-
- void WhiteSpaceIdents(out List<IToken>/*!*/ xs) {
- Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>();
- Ident(out id);
- xs.Add(id);
- while (la.kind == 1) {
- Ident(out id);
- xs.Add(id);
- }
- }
-
- void ProcSignature(bool allowWhereClausesOnFormals, out IToken/*!*/ name, out List<TypeVariable>/*!*/ typeParams,
-out List<Variable>/*!*/ ins, out List<Variable>/*!*/ outs, out QKeyValue kv) {
- Contract.Ensures(Contract.ValueAtReturn(out name) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ins) != null); Contract.Ensures(Contract.ValueAtReturn(out outs) != null);
- IToken/*!*/ typeParamTok; typeParams = new List<TypeVariable>();
- outs = new List<Variable>(); kv = null;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Ident(out name);
- if (la.kind == 19) {
- TypeParams(out typeParamTok, out typeParams);
- }
- ProcFormals(true, allowWhereClausesOnFormals, out ins);
- if (la.kind == 26) {
- Get();
- ProcFormals(false, allowWhereClausesOnFormals, out outs);
- }
- }
-
- void Spec(List<Requires>/*!*/ pre, List<IdentifierExpr>/*!*/ mods, List<Ensures>/*!*/ post) {
- Contract.Requires(pre != null); Contract.Requires(mods != null); Contract.Requires(post != null); List<IToken>/*!*/ ms;
- if (la.kind == 34) {
- Get();
- if (la.kind == 1) {
- Idents(out ms);
- foreach(IToken/*!*/ m in ms){
- Contract.Assert(m != null);
- mods.Add(new IdentifierExpr(m, m.val));
- }
-
- }
- Expect(8);
- } else if (la.kind == 35) {
- Get();
- SpecPrePost(true, pre, post);
- } else if (la.kind == 36 || la.kind == 37) {
- SpecPrePost(false, pre, post);
- } else SynErr(103);
- }
-
- void ImplBody(out List<Variable>/*!*/ locals, out StmtList/*!*/ stmtList) {
- Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); locals = new List<Variable>();
- Expect(27);
- while (la.kind == 7) {
- LocalVars(locals);
- }
- StmtList(out stmtList);
- }
-
- void SpecPrePost(bool free, List<Requires>/*!*/ pre, List<Ensures>/*!*/ post) {
- Contract.Requires(pre != null); Contract.Requires(post != null); Expr/*!*/ e; Token tok = null; QKeyValue kv = null;
- if (la.kind == 36) {
- Get();
- tok = t;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Proposition(out e);
- Expect(8);
- pre.Add(new Requires(tok, free, e, null, kv));
- } else if (la.kind == 37) {
- Get();
- tok = t;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Proposition(out e);
- Expect(8);
- post.Add(new Ensures(tok, free, e, null, kv));
- } else SynErr(104);
- }
-
- void StmtList(out StmtList/*!*/ stmtList) {
- Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); List<BigBlock/*!*/> bigblocks = new List<BigBlock/*!*/>();
- /* built-up state for the current BigBlock: */
- IToken startToken = null; string currentLabel = null;
- List<Cmd> cs = null; /* invariant: startToken != null ==> cs != null */
- /* temporary variables: */
- IToken label; Cmd c; BigBlock b;
- StructuredCmd ec = null; StructuredCmd/*!*/ ecn;
- TransferCmd tc = null; TransferCmd/*!*/ tcn;
-
- while (StartOf(7)) {
- if (StartOf(8)) {
- LabelOrCmd(out c, out label);
- if (c != null) {
- // LabelOrCmd read a Cmd
- Contract.Assert(label == null);
- if (startToken == null) { startToken = c.tok; cs = new List<Cmd>(); }
- Contract.Assert(cs != null);
- cs.Add(c);
- } else {
- // LabelOrCmd read a label
- Contract.Assert(label != null);
- if (startToken != null) {
- Contract.Assert(cs != null);
- // dump the built-up state into a BigBlock
- b = new BigBlock(startToken, currentLabel, cs, null, null);
- bigblocks.Add(b);
- cs = null;
- }
- startToken = label;
- currentLabel = label.val;
- cs = new List<Cmd>();
- }
-
- } else if (la.kind == 40 || la.kind == 42 || la.kind == 45) {
- StructuredCmd(out ecn);
- ec = ecn;
- if (startToken == null) { startToken = ec.tok; cs = new List<Cmd>(); }
- Contract.Assert(cs != null);
- b = new BigBlock(startToken, currentLabel, cs, ec, null);
- bigblocks.Add(b);
- startToken = null; currentLabel = null; cs = null;
-
- } else {
- TransferCmd(out tcn);
- tc = tcn;
- if (startToken == null) { startToken = tc.tok; cs = new List<Cmd>(); }
- Contract.Assert(cs != null);
- b = new BigBlock(startToken, currentLabel, cs, null, tc);
- bigblocks.Add(b);
- startToken = null; currentLabel = null; cs = null;
-
- }
- }
- Expect(28);
- IToken/*!*/ endCurly = t;
- if (startToken == null && bigblocks.Count == 0) {
- startToken = t; cs = new List<Cmd>();
- }
- if (startToken != null) {
- Contract.Assert(cs != null);
- b = new BigBlock(startToken, currentLabel, cs, null, null);
- bigblocks.Add(b);
- }
-
- stmtList = new StmtList(bigblocks, endCurly);
-
- }
-
- void LabelOrCmd(out Cmd c, out IToken label) {
- IToken/*!*/ x; Expr/*!*/ e;
- List<IToken>/*!*/ xs;
- List<IdentifierExpr> ids;
- c = dummyCmd; label = null;
- Cmd/*!*/ cn;
- QKeyValue kv = null;
-
- switch (la.kind) {
- case 1: {
- LabelOrAssign(out c, out label);
- break;
- }
- case 46: {
- Get();
- x = t;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Proposition(out e);
- c = new AssertCmd(x, e, kv);
- Expect(8);
- break;
- }
- case 47: {
- Get();
- x = t;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Proposition(out e);
- c = new AssumeCmd(x, e, kv);
- Expect(8);
- break;
- }
- case 48: {
- Get();
- x = t;
- Idents(out xs);
- Expect(8);
- ids = new List<IdentifierExpr>();
- foreach(IToken/*!*/ y in xs){
- Contract.Assert(y != null);
- ids.Add(new IdentifierExpr(y, y.val));
- }
- c = new HavocCmd(x,ids);
-
- break;
- }
- case 35: case 51: case 52: {
- CallCmd(out cn);
- Expect(8);
- c = cn;
- break;
- }
- case 53: {
- ParCallCmd(out cn);
- c = cn;
- break;
- }
- case 49: {
- Get();
- x = t;
- Expect(8);
- c = new YieldCmd(x);
- break;
- }
- default: SynErr(105); break;
- }
- }
-
- void StructuredCmd(out StructuredCmd/*!*/ ec) {
- Contract.Ensures(Contract.ValueAtReturn(out ec) != null); ec = dummyStructuredCmd; Contract.Assume(cce.IsPeerConsistent(ec));
- IfCmd/*!*/ ifcmd; WhileCmd/*!*/ wcmd; BreakCmd/*!*/ bcmd;
-
- if (la.kind == 40) {
- IfCmd(out ifcmd);
- ec = ifcmd;
- } else if (la.kind == 42) {
- WhileCmd(out wcmd);
- ec = wcmd;
- } else if (la.kind == 45) {
- BreakCmd(out bcmd);
- ec = bcmd;
- } else SynErr(106);
- }
-
- void TransferCmd(out TransferCmd/*!*/ tc) {
- Contract.Ensures(Contract.ValueAtReturn(out tc) != null); tc = dummyTransferCmd;
- Token y; List<IToken>/*!*/ xs;
- List<String> ss = new List<String>();
-
- if (la.kind == 38) {
- Get();
- y = t;
- Idents(out xs);
- foreach(IToken/*!*/ s in xs){
- Contract.Assert(s != null);
- ss.Add(s.val); }
- tc = new GotoCmd(y, ss);
-
- } else if (la.kind == 39) {
- Get();
- tc = new ReturnCmd(t);
- } else SynErr(107);
- Expect(8);
- }
-
- void IfCmd(out IfCmd/*!*/ ifcmd) {
- Contract.Ensures(Contract.ValueAtReturn(out ifcmd) != null); IToken/*!*/ x;
- Expr guard;
- StmtList/*!*/ thn;
- IfCmd/*!*/ elseIf; IfCmd elseIfOption = null;
- StmtList/*!*/ els; StmtList elseOption = null;
-
- Expect(40);
- x = t;
- Guard(out guard);
- Expect(27);
- StmtList(out thn);
- if (la.kind == 41) {
- Get();
- if (la.kind == 40) {
- IfCmd(out elseIf);
- elseIfOption = elseIf;
- } else if (la.kind == 27) {
- Get();
- StmtList(out els);
- elseOption = els;
- } else SynErr(108);
- }
- ifcmd = new IfCmd(x, guard, thn, elseIfOption, elseOption);
- }
-
- void WhileCmd(out WhileCmd/*!*/ wcmd) {
- Contract.Ensures(Contract.ValueAtReturn(out wcmd) != null); IToken/*!*/ x; Token z;
- Expr guard; Expr/*!*/ e; bool isFree;
- List<PredicateCmd/*!*/> invariants = new List<PredicateCmd/*!*/>();
- StmtList/*!*/ body;
- QKeyValue kv = null;
-
- Expect(42);
- x = t;
- Guard(out guard);
- Contract.Assume(guard == null || cce.Owner.None(guard));
- while (la.kind == 35 || la.kind == 43) {
- isFree = false; z = la/*lookahead token*/;
- if (la.kind == 35) {
- Get();
- isFree = true;
- }
- Expect(43);
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- Expression(out e);
- if (isFree) {
- invariants.Add(new AssumeCmd(z, e, kv));
- } else {
- invariants.Add(new AssertCmd(z, e, kv));
- }
- kv = null;
-
- Expect(8);
- }
- Expect(27);
- StmtList(out body);
- wcmd = new WhileCmd(x, guard, invariants, body);
- }
-
- void BreakCmd(out BreakCmd/*!*/ bcmd) {
- Contract.Ensures(Contract.ValueAtReturn(out bcmd) != null); IToken/*!*/ x; IToken/*!*/ y;
- string breakLabel = null;
-
- Expect(45);
- x = t;
- if (la.kind == 1) {
- Ident(out y);
- breakLabel = y.val;
- }
- Expect(8);
- bcmd = new BreakCmd(x, breakLabel);
- }
-
- void Guard(out Expr e) {
- Expr/*!*/ ee; e = null;
- Expect(9);
- if (la.kind == 44) {
- Get();
- e = null;
- } else if (StartOf(9)) {
- Expression(out ee);
- e = ee;
- } else SynErr(109);
- Expect(10);
- }
-
- void LabelOrAssign(out Cmd c, out IToken label) {
- IToken/*!*/ id; IToken/*!*/ x, y; Expr/*!*/ e0;
- c = dummyCmd; label = null;
- AssignLhs/*!*/ lhs;
- List<AssignLhs/*!*/>/*!*/ lhss;
- List<Expr/*!*/>/*!*/ rhss;
- List<Expr/*!*/>/*!*/ indexes;
-
- Ident(out id);
- x = t;
- if (la.kind == 11) {
- Get();
- c = null; label = x;
- } else if (la.kind == 12 || la.kind == 17 || la.kind == 50) {
- lhss = new List<AssignLhs/*!*/>();
- lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val));
- while (la.kind == 17) {
- MapAssignIndex(out y, out indexes);
- lhs = new MapAssignLhs(y, lhs, indexes);
- }
- lhss.Add(lhs);
- while (la.kind == 12) {
- Get();
- Ident(out id);
- lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val));
- while (la.kind == 17) {
- MapAssignIndex(out y, out indexes);
- lhs = new MapAssignLhs(y, lhs, indexes);
- }
- lhss.Add(lhs);
- }
- Expect(50);
- x = t; /* use location of := */
- Expression(out e0);
- rhss = new List<Expr/*!*/> ();
- rhss.Add(e0);
- while (la.kind == 12) {
- Get();
- Expression(out e0);
- rhss.Add(e0);
- }
- Expect(8);
- c = new AssignCmd(x, lhss, rhss);
- } else SynErr(110);
- }
-
- void CallCmd(out Cmd c) {
- Contract.Ensures(Contract.ValueAtReturn(out c) != null);
- IToken x;
- bool isAsync = false;
- bool isFree = false;
- QKeyValue kv = null;
- c = null;
-
- if (la.kind == 51) {
- Get();
- isAsync = true;
- }
- if (la.kind == 35) {
- Get();
- isFree = true;
- }
- Expect(52);
- x = t;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- CallParams(isAsync, isFree, kv, x, out c);
-
- }
-
- void ParCallCmd(out Cmd d) {
- Contract.Ensures(Contract.ValueAtReturn(out d) != null);
- IToken x;
- QKeyValue kv = null;
- Cmd c = null;
- List<CallCmd> callCmds = new List<CallCmd>();
-
- Expect(53);
- x = t;
- while (la.kind == 27) {
- Attribute(ref kv);
- }
- CallParams(false, false, kv, x, out c);
- callCmds.Add((CallCmd)c);
- while (la.kind == 54) {
- Get();
- CallParams(false, false, kv, x, out c);
- callCmds.Add((CallCmd)c);
- }
- Expect(8);
- d = new ParCallCmd(x, callCmds, kv);
- }
-
- void MapAssignIndex(out IToken/*!*/ x, out List<Expr/*!*/>/*!*/ indexes) {
- Contract.Ensures(Contract.ValueAtReturn(out x) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out indexes))); indexes = new List<Expr/*!*/> ();
- Expr/*!*/ e;
-
- Expect(17);
- x = t;
- if (StartOf(9)) {
- Expression(out e);
- indexes.Add(e);
- while (la.kind == 12) {
- Get();
- Expression(out e);
- indexes.Add(e);
- }
- }
- Expect(18);
- }
-
- void CallParams(bool isAsync, bool isFree, QKeyValue kv, IToken x, out Cmd c) {
- List<IdentifierExpr> ids = new List<IdentifierExpr>();
- List<Expr> es = new List<Expr>();
- Expr en;
- IToken first;
- IToken p;
- c = null;
-
- Ident(out first);
- if (la.kind == 9) {
- Get();
- if (StartOf(9)) {
- Expression(out en);
- es.Add(en);
- while (la.kind == 12) {
- Get();
- Expression(out en);
- es.Add(en);
- }
- }
- Expect(10);
- c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync;
- } else if (la.kind == 12 || la.kind == 50) {
- ids.Add(new IdentifierExpr(first, first.val));
- if (la.kind == 12) {
- Get();
- Ident(out p);
- ids.Add(new IdentifierExpr(p, p.val));
- while (la.kind == 12) {
- Get();
- Ident(out p);
- ids.Add(new IdentifierExpr(p, p.val));
- }
- }
- Expect(50);
- Ident(out first);
- Expect(9);
- if (StartOf(9)) {
- Expression(out en);
- es.Add(en);
- while (la.kind == 12) {
- Get();
- Expression(out en);
- es.Add(en);
- }
- }
- Expect(10);
- c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync;
- } else SynErr(111);
- }
-
- void Expressions(out List<Expr>/*!*/ es) {
- Contract.Ensures(Contract.ValueAtReturn(out es) != null); Expr/*!*/ e; es = new List<Expr>();
- Expression(out e);
- es.Add(e);
- while (la.kind == 12) {
- Get();
- Expression(out e);
- es.Add(e);
- }
- }
-
- void ImpliesExpression(bool noExplies, out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
- LogicalExpression(out e0);
- if (StartOf(10)) {
- if (la.kind == 57 || la.kind == 58) {
- ImpliesOp();
- x = t;
- ImpliesExpression(true, out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e0, e1);
- } else {
- ExpliesOp();
- if (noExplies)
- this.SemErr("illegal mixture of ==> and <==, use parentheses to disambiguate");
- x = t;
- LogicalExpression(out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0);
- while (la.kind == 59 || la.kind == 60) {
- ExpliesOp();
- x = t;
- LogicalExpression(out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0);
- }
- }
- }
- }
-
- void EquivOp() {
- if (la.kind == 55) {
- Get();
- } else if (la.kind == 56) {
- Get();
- } else SynErr(112);
- }
-
- void LogicalExpression(out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
- RelationalExpression(out e0);
- if (StartOf(11)) {
- if (la.kind == 61 || la.kind == 62) {
- AndOp();
- x = t;
- RelationalExpression(out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1);
- while (la.kind == 61 || la.kind == 62) {
- AndOp();
- x = t;
- RelationalExpression(out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1);
- }
- } else {
- OrOp();
- x = t;
- RelationalExpression(out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1);
- while (la.kind == 63 || la.kind == 64) {
- OrOp();
- x = t;
- RelationalExpression(out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1);
- }
- }
- }
- }
-
- void ImpliesOp() {
- if (la.kind == 57) {
- Get();
- } else if (la.kind == 58) {
- Get();
- } else SynErr(113);
- }
-
- void ExpliesOp() {
- if (la.kind == 59) {
- Get();
- } else if (la.kind == 60) {
- Get();
- } else SynErr(114);
- }
-
- void RelationalExpression(out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op;
- BvTerm(out e0);
- if (StartOf(12)) {
- RelOp(out x, out op);
- BvTerm(out e1);
- e0 = Expr.Binary(x, op, e0, e1);
- }
- }
-
- void AndOp() {
- if (la.kind == 61) {
- Get();
- } else if (la.kind == 62) {
- Get();
- } else SynErr(115);
- }
-
- void OrOp() {
- if (la.kind == 63) {
- Get();
- } else if (la.kind == 64) {
- Get();
- } else SynErr(116);
- }
-
- void BvTerm(out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
- Term(out e0);
- while (la.kind == 73) {
- Get();
- x = t;
- Term(out e1);
- e0 = new BvConcatExpr(x, e0, e1);
- }
- }
-
- void RelOp(out IToken/*!*/ x, out BinaryOperator.Opcode op) {
- Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/;
- switch (la.kind) {
- case 65: {
- Get();
- x = t; op=BinaryOperator.Opcode.Eq;
- break;
- }
- case 19: {
- Get();
- x = t; op=BinaryOperator.Opcode.Lt;
- break;
- }
- case 20: {
- Get();
- x = t; op=BinaryOperator.Opcode.Gt;
- break;
- }
- case 66: {
- Get();
- x = t; op=BinaryOperator.Opcode.Le;
- break;
- }
- case 67: {
- Get();
- x = t; op=BinaryOperator.Opcode.Ge;
- break;
- }
- case 68: {
- Get();
- x = t; op=BinaryOperator.Opcode.Neq;
- break;
- }
- case 69: {
- Get();
- x = t; op=BinaryOperator.Opcode.Subtype;
- break;
- }
- case 70: {
- Get();
- x = t; op=BinaryOperator.Opcode.Neq;
- break;
- }
- case 71: {
- Get();
- x = t; op=BinaryOperator.Opcode.Le;
- break;
- }
- case 72: {
- Get();
- x = t; op=BinaryOperator.Opcode.Ge;
- break;
- }
- default: SynErr(117); break;
- }
- }
-
- void Term(out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op;
- Factor(out e0);
- while (la.kind == 74 || la.kind == 75) {
- AddOp(out x, out op);
- Factor(out e1);
- e0 = Expr.Binary(x, op, e0, e1);
- }
- }
-
- void Factor(out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op;
- Power(out e0);
- while (StartOf(13)) {
- MulOp(out x, out op);
- Power(out e1);
- e0 = Expr.Binary(x, op, e0, e1);
- }
- }
-
- void AddOp(out IToken/*!*/ x, out BinaryOperator.Opcode op) {
- Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/;
- if (la.kind == 74) {
- Get();
- x = t; op=BinaryOperator.Opcode.Add;
- } else if (la.kind == 75) {
- Get();
- x = t; op=BinaryOperator.Opcode.Sub;
- } else SynErr(118);
- }
-
- void Power(out Expr/*!*/ e0) {
- Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
- UnaryExpression(out e0);
- if (la.kind == 79) {
- Get();
- x = t;
- Power(out e1);
- e0 = Expr.Binary(x, BinaryOperator.Opcode.Pow, e0, e1);
- }
- }
-
- void MulOp(out IToken/*!*/ x, out BinaryOperator.Opcode op) {
- Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/;
- if (la.kind == 44) {
- Get();
- x = t; op=BinaryOperator.Opcode.Mul;
- } else if (la.kind == 76) {
- Get();
- x = t; op=BinaryOperator.Opcode.Div;
- } else if (la.kind == 77) {
- Get();
- x = t; op=BinaryOperator.Opcode.Mod;
- } else if (la.kind == 78) {
- Get();
- x = t; op=BinaryOperator.Opcode.RealDiv;
- } else SynErr(119);
- }
-
- void UnaryExpression(out Expr/*!*/ e) {
- Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
- e = dummyExpr;
-
- if (la.kind == 75) {
- Get();
- x = t;
- UnaryExpression(out e);
- e = Expr.Unary(x, UnaryOperator.Opcode.Neg, e);
- } else if (la.kind == 80 || la.kind == 81) {
- NegOp();
- x = t;
- UnaryExpression(out e);
- e = Expr.Unary(x, UnaryOperator.Opcode.Not, e);
- } else if (StartOf(14)) {
- CoercionExpression(out e);
- } else SynErr(120);
- }
-
- void NegOp() {
- if (la.kind == 80) {
- Get();
- } else if (la.kind == 81) {
- Get();
- } else SynErr(123);
- }
-
- void CoercionExpression(out Expr/*!*/ e) {
- Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
- Bpl.Type/*!*/ coercedTo;
- BigNum bn;
-
- ArrayExpression(out e);
- while (la.kind == 11) {
- Get();
- x = t;
- if (StartOf(6)) {
- Type(out coercedTo);
- e = Expr.CoerceType(x, e, coercedTo);
- } else if (la.kind == 3) {
- Nat(out bn);
- if (!(e is LiteralExpr) || !((LiteralExpr)e).isBigNum) {
- this.SemErr("arguments of extract need to be integer literals");
- e = new BvBounds(x, bn, BigNum.ZERO);
- } else {
- e = new BvBounds(x, bn, ((LiteralExpr)e).asBigNum);
- }
-
- } else SynErr(124);
- }
- }
-
- void ArrayExpression(out Expr/*!*/ e) {
- Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
- Expr/*!*/ index0 = dummyExpr; Expr/*!*/ e1;
- bool store; bool bvExtract;
- List<Expr>/*!*/ allArgs = dummyExprSeq;
-
- AtomExpression(out e);
- while (la.kind == 17) {
- Get();
- x = t; allArgs = new List<Expr> ();
- allArgs.Add(e);
- store = false; bvExtract = false;
- if (StartOf(15)) {
- if (StartOf(9)) {
- Expression(out index0);
- if (index0 is BvBounds)
- bvExtract = true;
- else
- allArgs.Add(index0);
-
- while (la.kind == 12) {
- Get();
- Expression(out e1);
- if (bvExtract || e1 is BvBounds)
- this.SemErr("bitvectors only have one dimension");
- allArgs.Add(e1);
-
- }
- if (la.kind == 50) {
- Get();
- Expression(out e1);
- if (bvExtract || e1 is BvBounds)
- this.SemErr("assignment to bitvectors is not possible");
- allArgs.Add(e1); store = true;
-
- }
- } else {
- Get();
- Expression(out e1);
- allArgs.Add(e1); store = true;
- }
- }
- Expect(18);
- if (store)
- e = new NAryExpr(x, new MapStore(x, allArgs.Count - 2), allArgs);
- else if (bvExtract)
- e = new BvExtractExpr(x, e,
- ((BvBounds)index0).Upper.ToIntSafe,
- ((BvBounds)index0).Lower.ToIntSafe);
- else
- e = new NAryExpr(x, new MapSelect(x, allArgs.Count - 1), allArgs);
-
- }
- }
-
- void Nat(out BigNum n) {
- Expect(3);
- try {
- n = BigNum.FromString(t.val);
- } catch (FormatException) {
- this.SemErr("incorrectly formatted number");
- n = BigNum.ZERO;
- }
-
- }
-
- void AtomExpression(out Expr/*!*/ e) {
- Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x; int n; BigNum bn; BigDec bd; BigFloat fp;
- List<Expr>/*!*/ es; List<Variable>/*!*/ ds; Trigger trig;
- List<TypeVariable>/*!*/ typeParams;
- IdentifierExpr/*!*/ id;
- QKeyValue kv;
- e = dummyExpr;
- List<Variable>/*!*/ locals;
- List<Block/*!*/>/*!*/ blocks;
-
- switch (la.kind) {
- case 82: {
- Get();
- e = new LiteralExpr(t, false);
- break;
- }
- case 83: {
- Get();
- e = new LiteralExpr(t, true);
- break;
- }
- case 3: {
- Nat(out bn);
- e = new LiteralExpr(t, bn);
- break;
- }
- case 5: case 6: {
- Dec(out bd);
- e = new LiteralExpr(t, bd);
- break;
- }
- case 97: {
- Float(out fp);
- e = new LiteralExpr(t, fp);
- break;
- }
- case 2: {
- BvLit(out bn, out n);
- e = new LiteralExpr(t, bn, n);
- break;
- }
- case 1: {
- Ident(out x);
- id = new IdentifierExpr(x, x.val); e = id;
- if (la.kind == 9) {
- Get();
- if (StartOf(9)) {
- Expressions(out es);
- e = new NAryExpr(x, new FunctionCall(id), es);
- } else if (la.kind == 10) {
- e = new NAryExpr(x, new FunctionCall(id), new List<Expr>());
- } else SynErr(125);
- Expect(10);
- }
- break;
- }
- case 84: {
- Get();
- x = t;
- Expect(9);
- Expression(out e);
- Expect(10);
- e = new OldExpr(x, e);
- break;
- }
- case 14: {
- Get();
- x = t;
- Expect(9);
- Expression(out e);
- Expect(10);
- e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToInt), new List<Expr>{ e });
- break;
- }
- case 15: {
- Get();
- x = t;
- Expect(9);
- Expression(out e);
- Expect(10);
- e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToReal), new List<Expr>{ e });
- break;
- }
- case 98: {
- Get();
- x = t;
- Expect(19);
- Expression(out e);
- Expect(20);
- e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToFloat), new List<Expr> { e });
- break;
- }
- case 9: {
- Get();
- if (StartOf(9)) {
- Expression(out e);
- if (e is BvBounds)
- this.SemErr("parentheses around bitvector bounds " +
- "are not allowed");
- } else if (la.kind == 88 || la.kind == 89) {
- Forall();
- x = t;
- QuantifierBody(x, out typeParams, out ds, out kv, out trig, out e);
- if (typeParams.Count + ds.Count > 0)
- e = new ForallExpr(x, typeParams, ds, kv, trig, e);
- } else if (la.kind == 90 || la.kind == 91) {
- Exists();
- x = t;
- QuantifierBody(x, out typeParams, out ds, out kv, out trig, out e);
- if (typeParams.Count + ds.Count > 0)
- e = new ExistsExpr(x, typeParams, ds, kv, trig, e);
- } else if (la.kind == 92 || la.kind == 93) {
- Lambda();
- x = t;
- QuantifierBody(x, out typeParams, out ds, out kv, out trig, out e);
- if (trig != null)
- SemErr("triggers not allowed in lambda expressions");
- if (typeParams.Count + ds.Count > 0)
- e = new LambdaExpr(x, typeParams, ds, kv, e);
- } else SynErr(126);
- Expect(10);
- break;
- }
- case 40: {
- IfThenElseExpression(out e);
- break;
- }
- case 85: {
- CodeExpression(out locals, out blocks);
- e = new CodeExpr(locals, blocks);
- break;
- }
- default: SynErr(127); break;
- }
- }
-
- void Dec(out BigDec n) {
- string s = "";
- if (la.kind == 5) {
- Get();
- s = t.val;
- } else if (la.kind == 6) {
- Get();
- s = t.val;
- } else SynErr(128);
- try {
- n = BigDec.FromString(s);
- } catch (FormatException) {
- this.SemErr("incorrectly formatted number");
- n = BigDec.ZERO;
- }
-
- }
-
- /// <summary>
- /// Creates a floating point from the current token value
- /// </summary>
- /// <param name="n"></param>
- void Float(out BigFloat n)
- {
- try
- {
- if (la.kind == 97) {
- bool negative = false;
- int exp, sig, size;
- BigNum exp_val, sig_val, value;
- //Expected format = float(sign exp_val sig_val) || float<exp sig>(value)
- Get(); //Skip the float token
- if (la.val == "(") {
- Get();
- if (la.val == "false")
- negative = false;
- else if (la.val == "true")
- negative = true;
- else
- throw new FormatException();
- Get();
- Expect(12); //,
- BvLit(out exp_val, out exp);
- Expect(12);
- BvLit(out sig_val, out sig);
- n = new BigFloat(negative, exp_val, sig_val, exp, sig);
- Expect(10); //)
- }
- else if (la.val == "<") {
- Get();
- Expect(3);
- exp = Int32.Parse(t.val);
- Expect(12);
- Expect(3);
- sig = Int32.Parse(t.val);
- Expect(20); //>
- Expect(9); //(
- if (la.kind == 1) { //NaN
- Get();
- n = new BigFloat(t.val, exp, sig);
- }
- else if (la.kind == 74 || la.kind == 75) { //+ or -
- Get();
- String s = t.val;
- Get();
- n = new BigFloat(s + t.val, exp, sig);
- }
- else {
- BvLit(out value, out size);
- n = new BigFloat(value.ToString(), exp, sig);
- }
- Expect(10); //)
- }
- else {
- throw new FormatException();
- }
- }
- else {
- n = BigFloat.ZERO(8, 24);
- SynErr(137);
- }
- }
- catch (FormatException)
- {
- this.SemErr("incorrectly formatted floating point");
- n = BigFloat.ZERO(8, 24);
- }
- }
-
- void BvLit(out BigNum n, out int m) {
- Expect(2);
- int pos = t.val.IndexOf("bv");
- string a = t.val.Substring(0, pos);
- string b = t.val.Substring(pos + 2);
- try {
- n = BigNum.FromString(a);
- m = Convert.ToInt32(b);
- } catch (FormatException) {
- this.SemErr("incorrectly formatted bitvector");
- n = BigNum.ZERO;
- m = 0;
- }
-
- }
-
- void Forall() {
- if (la.kind == 88) {
- Get();
- } else if (la.kind == 89) {
- Get();
- } else SynErr(129);
- }
-
- void QuantifierBody(IToken/*!*/ q, out List<TypeVariable>/*!*/ typeParams, out List<Variable>/*!*/ ds,
-out QKeyValue kv, out Trigger trig, out Expr/*!*/ body) {
- Contract.Requires(q != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ds) != null); Contract.Ensures(Contract.ValueAtReturn(out body) != null);
- trig = null; typeParams = new List<TypeVariable> ();
- IToken/*!*/ tok;
- kv = null;
- ds = new List<Variable> ();
-
- if (la.kind == 19) {
- TypeParams(out tok, out typeParams);
- if (la.kind == 1 || la.kind == 27) {
- BoundVars(q, out ds);
- }
- } else if (la.kind == 1 || la.kind == 27) {
- BoundVars(q, out ds);
- } else SynErr(130);
- QSep();
- while (la.kind == 27) {
- AttributeOrTrigger(ref kv, ref trig);
- }
- Expression(out body);
- }
-
- void Exists() {
- if (la.kind == 90) {
- Get();
- } else if (la.kind == 91) {
- Get();
- } else SynErr(131);
- }
-
- void Lambda() {
- if (la.kind == 92) {
- Get();
- } else if (la.kind == 93) {
- Get();
- } else SynErr(132);
- }
-
- void IfThenElseExpression(out Expr/*!*/ e) {
- Contract.Ensures(Contract.ValueAtReturn(out e) != null);
- IToken/*!*/ tok;
- Expr/*!*/ e0, e1, e2;
- e = dummyExpr;
- Expect(40);
- tok = t;
- Expression(out e0);
- Expect(87);
- Expression(out e1);
- Expect(41);
- Expression(out e2);
- e = new NAryExpr(tok, new IfThenElse(tok), new List<Expr>{ e0, e1, e2 });
- }
-
- void CodeExpression(out List<Variable>/*!*/ locals, out List<Block/*!*/>/*!*/ blocks) {
- Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out blocks))); locals = new List<Variable>(); Block/*!*/ b;
- blocks = new List<Block/*!*/>();
-
- Expect(85);
- while (la.kind == 7) {
- LocalVars(locals);
- }
- SpecBlock(out b);
- blocks.Add(b);
- while (la.kind == 1) {
- SpecBlock(out b);
- blocks.Add(b);
- }
- Expect(86);
- }
-
- void SpecBlock(out Block/*!*/ b) {
- Contract.Ensures(Contract.ValueAtReturn(out b) != null); IToken/*!*/ x; IToken/*!*/ y;
- Cmd c; IToken label;
- List<Cmd> cs = new List<Cmd>();
- List<IToken>/*!*/ xs;
- List<String> ss = new List<String>();
- b = dummyBlock;
- Expr/*!*/ e;
-
- Ident(out x);
- Expect(11);
- while (StartOf(8)) {
- LabelOrCmd(out c, out label);
- if (c != null) {
- Contract.Assert(label == null);
- cs.Add(c);
- } else {
- Contract.Assert(label != null);
- SemErr("SpecBlock's can only have one label");
- }
-
- }
- if (la.kind == 38) {
- Get();
- y = t;
- Idents(out xs);
- foreach(IToken/*!*/ s in xs){
- Contract.Assert(s != null);
- ss.Add(s.val); }
- b = new Block(x,x.val,cs,new GotoCmd(y,ss));
-
- } else if (la.kind == 39) {
- Get();
- Expression(out e);
- b = new Block(x,x.val,cs,new ReturnExprCmd(t,e));
- } else SynErr(133);
- Expect(8);
- }
-
- void AttributeOrTrigger(ref QKeyValue kv, ref Trigger trig) {
- IToken/*!*/ tok; Expr/*!*/ e; List<Expr>/*!*/ es;
- string key;
- List<object/*!*/> parameters; object/*!*/ param;
-
- Expect(27);
- tok = t;
- if (la.kind == 11) {
- Get();
- Expect(1);
- key = t.val; parameters = new List<object/*!*/>();
- if (StartOf(16)) {
- AttributeParameter(out param);
- parameters.Add(param);
- while (la.kind == 12) {
- Get();
- AttributeParameter(out param);
- parameters.Add(param);
- }
- }
- if (key == "nopats") {
- if (parameters.Count == 1 && parameters[0] is Expr) {
- e = (Expr)parameters[0];
- if(trig==null){
- trig = new Trigger(tok, false, new List<Expr> { e }, null);
- } else {
- trig.AddLast(new Trigger(tok, false, new List<Expr> { e }, null));
- }
- } else {
- this.SemErr("the 'nopats' quantifier attribute expects a string-literal parameter");
- }
- } else {
- if (kv==null) {
- kv = new QKeyValue(tok, key, parameters, null);
- } else {
- kv.AddLast(new QKeyValue(tok, key, parameters, null));
- }
- }
-
- } else if (StartOf(9)) {
- Expression(out e);
- es = new List<Expr> { e };
- while (la.kind == 12) {
- Get();
- Expression(out e);
- es.Add(e);
- }
- if (trig==null) {
- trig = new Trigger(tok, true, es, null);
- } else {
- trig.AddLast(new Trigger(tok, true, es, null));
- }
-
- } else SynErr(134);
- Expect(28);
- }
-
- void AttributeParameter(out object/*!*/ o) {
- Contract.Ensures(Contract.ValueAtReturn(out o) != null);
- o = "error";
- Expr/*!*/ e;
-
- if (la.kind == 4) {
- Get();
- o = t.val.Substring(1, t.val.Length-2);
- } else if (StartOf(9)) {
- Expression(out e);
- o = e;
- } else SynErr(135);
- }
-
- void QSep() {
- if (la.kind == 94) {
- Get();
- } else if (la.kind == 95) {
- Get();
- } else SynErr(136);
- }
-
-
-
- public void Parse() {
- la = new Token();
- la.val = "";
- Get();
- BoogiePL();
- Expect(0);
-
- Expect(0);
- }
-
- static readonly bool[,]/*!*/ set = { //grid is 17 x 100
- {T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,T,x,x, x,T,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,T,x,x, x,x,x,x, x,T,x,x, x,x,T,T, T,T,x,T, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x},
- {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,x,x,x, x,x,x,x, x,T,x,x, x,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x},
- {x,T,x,x, x,x,x,x, x,T,x,x, x,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x},
- {x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,T, T,x,T,x, x,T,T,T, T,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,T,T,T, x,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
- {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,T,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,T,T,T, x,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
- {x,T,T,T, x,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
- {x,T,T,T, T,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x}
-
- };
-} // end Parser
-
-
-public class Errors {
- public int count = 0; // number of errors detected
- public System.IO.TextWriter/*!*/ errorStream = Console.Out; // error messages go to this stream
- public string errMsgFormat = "{0}({1},{2}): error: {3}"; // 0=filename, 1=line, 2=column, 3=text
- public string warningMsgFormat = "{0}({1},{2}): warning: {3}"; // 0=filename, 1=line, 2=column, 3=text
-
- public void SynErr(string filename, int line, int col, int n) {
- SynErr(filename, line, col, GetSyntaxErrorString(n));
- }
-
- public virtual void SynErr(string filename, int line, int col, string/*!*/ msg) {
- Contract.Requires(msg != null);
- errorStream.WriteLine(errMsgFormat, filename, line, col, msg);
- count++;
- }
-
- /// <summary>
- /// Returns a string corresponding to the syntax error of the given type
- /// Note that many of these errors (0-98) correspond to token types (e.g. the la token)
- /// </summary>
- /// <param name="n"></param>
- /// <returns></returns>
- string GetSyntaxErrorString(int n) {
- string s;
- switch (n) {
- case 0: s = "EOF expected"; break;
- case 1: s = "ident expected"; break;
- case 2: s = "bvlit expected"; break;
- case 3: s = "digits expected"; break;
- case 4: s = "string expected"; break;
- case 5: s = "decimal expected"; break;
- case 6: s = "float expected"; break;
- case 7: s = "\"var\" expected"; break;
- case 8: s = "\";\" expected"; break;
- case 9: s = "\"(\" expected"; break;
- case 10: s = "\")\" expected"; break;
- case 11: s = "\":\" expected"; break;
- case 12: s = "\",\" expected"; break;
- case 13: s = "\"where\" expected"; break;
- case 14: s = "\"int\" expected"; break;
- case 15: s = "\"real\" expected"; break;
- case 16: s = "\"bool\" expected"; break;
- case 17: s = "\"[\" expected"; break;
- case 18: s = "\"]\" expected"; break;
- case 19: s = "\"<\" expected"; break;
- case 20: s = "\">\" expected"; break;
- case 21: s = "\"const\" expected"; break;
- case 22: s = "\"unique\" expected"; break;
- case 23: s = "\"extends\" expected"; break;
- case 24: s = "\"complete\" expected"; break;
- case 25: s = "\"function\" expected"; break;
- case 26: s = "\"returns\" expected"; break;
- case 27: s = "\"{\" expected"; break;
- case 28: s = "\"}\" expected"; break;
- case 29: s = "\"axiom\" expected"; break;
- case 30: s = "\"type\" expected"; break;
- case 31: s = "\"=\" expected"; break;
- case 32: s = "\"procedure\" expected"; break;
- case 33: s = "\"implementation\" expected"; break;
- case 34: s = "\"modifies\" expected"; break;
- case 35: s = "\"free\" expected"; break;
- case 36: s = "\"requires\" expected"; break;
- case 37: s = "\"ensures\" expected"; break;
- case 38: s = "\"goto\" expected"; break;
- case 39: s = "\"return\" expected"; break;
- case 40: s = "\"if\" expected"; break;
- case 41: s = "\"else\" expected"; break;
- case 42: s = "\"while\" expected"; break;
- case 43: s = "\"invariant\" expected"; break;
- case 44: s = "\"*\" expected"; break;
- case 45: s = "\"break\" expected"; break;
- case 46: s = "\"assert\" expected"; break;
- case 47: s = "\"assume\" expected"; break;
- case 48: s = "\"havoc\" expected"; break;
- case 49: s = "\"yield\" expected"; break;
- case 50: s = "\":=\" expected"; break;
- case 51: s = "\"async\" expected"; break;
- case 52: s = "\"call\" expected"; break;
- case 53: s = "\"par\" expected"; break;
- case 54: s = "\"|\" expected"; break;
- case 55: s = "\"<==>\" expected"; break;
- case 56: s = "\"\\u21d4\" expected"; break;
- case 57: s = "\"==>\" expected"; break;
- case 58: s = "\"\\u21d2\" expected"; break;
- case 59: s = "\"<==\" expected"; break;
- case 60: s = "\"\\u21d0\" expected"; break;
- case 61: s = "\"&&\" expected"; break;
- case 62: s = "\"\\u2227\" expected"; break;
- case 63: s = "\"||\" expected"; break;
- case 64: s = "\"\\u2228\" expected"; break;
- case 65: s = "\"==\" expected"; break;
- case 66: s = "\"<=\" expected"; break;
- case 67: s = "\">=\" expected"; break;
- case 68: s = "\"!=\" expected"; break;
- case 69: s = "\"<:\" expected"; break;
- case 70: s = "\"\\u2260\" expected"; break;
- case 71: s = "\"\\u2264\" expected"; break;
- case 72: s = "\"\\u2265\" expected"; break;
- case 73: s = "\"++\" expected"; break;
- case 74: s = "\"+\" expected"; break;
- case 75: s = "\"-\" expected"; break;
- case 76: s = "\"div\" expected"; break;
- case 77: s = "\"mod\" expected"; break;
- case 78: s = "\"/\" expected"; break;
- case 79: s = "\"**\" expected"; break;
- case 80: s = "\"!\" expected"; break;
- case 81: s = "\"\\u00ac\" expected"; break;
- case 82: s = "\"false\" expected"; break;
- case 83: s = "\"true\" expected"; break;
- case 84: s = "\"old\" expected"; break;
- case 85: s = "\"|{\" expected"; break;
- case 86: s = "\"}|\" expected"; break;
- case 87: s = "\"then\" expected"; break;
- case 88: s = "\"forall\" expected"; break;
- case 89: s = "\"\\u2200\" expected"; break;
- case 90: s = "\"exists\" expected"; break;
- case 91: s = "\"\\u2203\" expected"; break;
- case 92: s = "\"lambda\" expected"; break;
- case 93: s = "\"\\u03bb\" expected"; break;
- case 94: s = "\"::\" expected"; break;
- case 95: s = "\"\\u2022\" expected"; break;
- case 96: s = "??? expected"; break;
- case 97: s = "fp expected"; break;
- case 98: s = "\"float\" expected"; break;
- case 99: s = "invalid Function"; break;
- case 100: s = "invalid Function"; break;
- case 101: s = "invalid Procedure"; break;
- case 102: s = "invalid Type"; break;
- case 103: s = "invalid TypeAtom"; break;
- case 104: s = "invalid TypeArgs"; break;
- case 105: s = "invalid Spec"; break;
- case 106: s = "invalid SpecPrePost"; break;
- case 107: s = "invalid LabelOrCmd"; break;
- case 108: s = "invalid StructuredCmd"; break;
- case 109: s = "invalid TransferCmd"; break;
- case 110: s = "invalid IfCmd"; break;
- case 111: s = "invalid Guard"; break;
- case 112: s = "invalid LabelOrAssign"; break;
- case 113: s = "invalid CallParams"; break;
- case 114: s = "invalid EquivOp"; break;
- case 115: s = "invalid ImpliesOp"; break;
- case 116: s = "invalid ExpliesOp"; break;
- case 117: s = "invalid AndOp"; break;
- case 118: s = "invalid OrOp"; break;
- case 119: s = "invalid RelOp"; break;
- case 120: s = "invalid AddOp"; break;
- case 121: s = "invalid MulOp"; break;
- case 122: s = "invalid UnaryExpression"; break;
- case 123: s = "invalid NegOp"; break;
- case 124: s = "invalid CoercionExpression"; break;
- case 125: s = "invalid AtomExpression"; break;
- case 126: s = "invalid AtomExpression"; break;
- case 127: s = "invalid AtomExpression"; break;
- case 128: s = "invalid Dec"; break;
- case 129: s = "invalid Forall"; break;
- case 130: s = "invalid QuantifierBody"; break;
- case 131: s = "invalid Exists"; break;
- case 132: s = "invalid Lambda"; break;
- case 133: s = "invalid SpecBlock"; break;
- case 134: s = "invalid AttributeOrTrigger"; break;
- case 135: s = "invalid AttributeParameter"; break;
- case 136: s = "invalid QSep"; break;
- case 137: s = "invalid Float"; break;
-
- default: s = "error " + n; break;
- }
- return s;
- }
-
- public void SemErr(IToken/*!*/ tok, string/*!*/ msg) { // semantic errors
- Contract.Requires(tok != null);
- Contract.Requires(msg != null);
- SemErr(tok.filename, tok.line, tok.col, msg);
- }
-
- public virtual void SemErr(string filename, int line, int col, string/*!*/ msg) {
- Contract.Requires(msg != null);
- errorStream.WriteLine(errMsgFormat, filename, line, col, msg);
- count++;
- }
-
- public void Warning(IToken/*!*/ tok, string/*!*/ msg) { // warnings
- Contract.Requires(tok != null);
- Contract.Requires(msg != null);
- Warning(tok.filename, tok.line, tok.col, msg);
- }
-
- public virtual void Warning(string filename, int line, int col, string msg) {
- Contract.Requires(msg != null);
- errorStream.WriteLine(warningMsgFormat, filename, line, col, msg);
- }
-} // Errors
-
-
-public class FatalError: Exception {
- public FatalError(string m): base(m) {}
-}
-
-
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using Microsoft.Boogie;
+using Microsoft.Basetypes;
+using Bpl = Microsoft.Boogie;
+
+
+
+
+using System;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Boogie {
+
+
+
+public class Parser {
+ public const int _EOF = 0;
+ public const int _ident = 1;
+ public const int _bvlit = 2;
+ public const int _digits = 3;
+ public const int _string = 4;
+ public const int _decimal = 5;
+ public const int _float = 6;
+ public const int _fp = 97;
+ public const int maxT = 98;
+
+ const bool T = true;
+ const bool x = false;
+ const int minErrDist = 2;
+
+ public Scanner/*!*/ scanner;
+ public Errors/*!*/ errors;
+
+ public Token/*!*/ t; // last recognized token
+ public Token/*!*/ la; // lookahead token
+ int errDist = minErrDist;
+
+readonly Program/*!*/ Pgm;
+
+readonly Expr/*!*/ dummyExpr;
+readonly Cmd/*!*/ dummyCmd;
+readonly Block/*!*/ dummyBlock;
+readonly Bpl.Type/*!*/ dummyType;
+readonly List<Expr>/*!*/ dummyExprSeq;
+readonly TransferCmd/*!*/ dummyTransferCmd;
+readonly StructuredCmd/*!*/ dummyStructuredCmd;
+
+///<summary>
+///Returns the number of parsing errors encountered. If 0, "program" returns as
+///the parsed program.
+///</summary>
+public static int Parse (string/*!*/ filename, /*maybe null*/ List<string/*!*/> defines, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
+ Contract.Requires(filename != null);
+ Contract.Requires(cce.NonNullElements(defines,true));
+
+ if (defines == null) {
+ defines = new List<string/*!*/>();
+ }
+
+ if (filename == "stdin.bpl") {
+ var s = ParserHelper.Fill(Console.In, defines);
+ return Parse(s, filename, out program, useBaseName);
+ } else {
+ FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
+ var s = ParserHelper.Fill(stream, defines);
+ var ret = Parse(s, filename, out program, useBaseName);
+ stream.Close();
+ return ret;
+ }
+}
+
+
+public static int Parse (string s, string/*!*/ filename, out /*maybe null*/ Program program, bool useBaseName=false) /* throws System.IO.IOException */ {
+ Contract.Requires(s != null);
+ Contract.Requires(filename != null);
+
+ byte[]/*!*/ buffer = cce.NonNull(UTF8Encoding.Default.GetBytes(s));
+ MemoryStream ms = new MemoryStream(buffer,false);
+ Errors errors = new Errors();
+ Scanner scanner = new Scanner(ms, errors, filename, useBaseName);
+
+ Parser parser = new Parser(scanner, errors, false);
+ parser.Parse();
+ if (parser.errors.count == 0)
+ {
+ program = parser.Pgm;
+ program.ProcessDatatypeConstructors();
+ return 0;
+ }
+ else
+ {
+ program = null;
+ return parser.errors.count;
+ }
+}
+
+public Parser(Scanner/*!*/ scanner, Errors/*!*/ errors, bool disambiguation)
+ : this(scanner, errors)
+{
+ // initialize readonly fields
+ Pgm = new Program();
+ dummyExpr = new LiteralExpr(Token.NoToken, false);
+ dummyCmd = new AssumeCmd(Token.NoToken, dummyExpr);
+ dummyBlock = new Block(Token.NoToken, "dummyBlock", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+ dummyType = new BasicType(Token.NoToken, SimpleType.Bool);
+ dummyExprSeq = new List<Expr> ();
+ dummyTransferCmd = new ReturnCmd(Token.NoToken);
+ dummyStructuredCmd = new BreakCmd(Token.NoToken, null);
+}
+
+// Class to represent the bounds of a bitvector expression t[a:b].
+// Objects of this class only exist during parsing and are directly
+// turned into BvExtract before they get anywhere else
+private class BvBounds : Expr {
+ public BigNum Lower;
+ public BigNum Upper;
+ public BvBounds(IToken/*!*/ tok, BigNum lower, BigNum upper)
+ : base(tok, /*immutable=*/ false) {
+ Contract.Requires(tok != null);
+ this.Lower = lower;
+ this.Upper = upper;
+ }
+ public override Bpl.Type/*!*/ ShallowType { get {Contract.Ensures(Contract.Result<Bpl.Type>() != null); return Bpl.Type.Int; } }
+ public override void Resolve(ResolutionContext/*!*/ rc) {
+ // Contract.Requires(rc != null);
+ rc.Error(this, "bitvector bounds in illegal position");
+ }
+ public override void Emit(TokenTextWriter/*!*/ stream,
+ int contextBindingStrength, bool fragileContext) {
+ Contract.Assert(false);throw new cce.UnreachableException();
+ }
+ public override void ComputeFreeVariables(GSet<object>/*!*/ freeVars) { Contract.Assert(false);throw new cce.UnreachableException(); }
+ public override int ComputeHashCode() {
+ return base.GetHashCode();
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+
+ public Parser(Scanner/*!*/ scanner, Errors/*!*/ errors) {
+ this.scanner = scanner;
+ this.errors = errors;
+ Token/*!*/ tok = new Token();
+ tok.val = "";
+ this.la = tok;
+ this.t = new Token(); // just to satisfy its non-null constraint
+ }
+
+ void SynErr (int n) {
+ if (errDist >= minErrDist) errors.SynErr(la.filename, la.line, la.col, n);
+ errDist = 0;
+ }
+
+ public void SemErr (string/*!*/ msg) {
+ Contract.Requires(msg != null);
+ if (errDist >= minErrDist) errors.SemErr(t, msg);
+ errDist = 0;
+ }
+
+ public void SemErr(IToken/*!*/ tok, string/*!*/ msg) {
+ Contract.Requires(tok != null);
+ Contract.Requires(msg != null);
+ errors.SemErr(tok, msg);
+ }
+
+ void Get () {
+ for (;;) {
+ t = la;
+ la = scanner.Scan();
+ if (la.kind <= maxT) { ++errDist; break; }
+
+ la = t;
+ }
+ }
+
+ void Expect (int n) {
+ if (la.kind==n) Get(); else { SynErr(n); }
+ }
+
+ bool StartOf (int s) {
+ return set[s, la.kind];
+ }
+
+ void ExpectWeak (int n, int follow) {
+ if (la.kind == n) Get();
+ else {
+ SynErr(n);
+ while (!StartOf(follow)) Get();
+ }
+ }
+
+
+ bool WeakSeparator(int n, int syFol, int repFol) {
+ int kind = la.kind;
+ if (kind == n) {Get(); return true;}
+ else if (StartOf(repFol)) {return false;}
+ else {
+ SynErr(n);
+ while (!(set[syFol, kind] || set[repFol, kind] || set[0, kind])) {
+ Get();
+ kind = la.kind;
+ }
+ return StartOf(syFol);
+ }
+ }
+
+
+ void BoogiePL() {
+ List<Variable>/*!*/ vs;
+ List<Declaration>/*!*/ ds;
+ Axiom/*!*/ ax;
+ List<Declaration/*!*/>/*!*/ ts;
+ Procedure/*!*/ pr;
+ Implementation im;
+ Implementation/*!*/ nnim;
+
+ while (StartOf(1)) {
+ switch (la.kind) {
+ case 21: {
+ Consts(out vs);
+ foreach(Bpl.Variable/*!*/ v in vs){
+ Contract.Assert(v != null);
+ Pgm.AddTopLevelDeclaration(v);
+ }
+
+ break;
+ }
+ case 25: {
+ Function(out ds);
+ foreach(Bpl.Declaration/*!*/ d in ds){
+ Contract.Assert(d != null);
+ Pgm.AddTopLevelDeclaration(d);
+ }
+
+ break;
+ }
+ case 29: {
+ Axiom(out ax);
+ Pgm.AddTopLevelDeclaration(ax);
+ break;
+ }
+ case 30: {
+ UserDefinedTypes(out ts);
+ foreach(Declaration/*!*/ td in ts){
+ Contract.Assert(td != null);
+ Pgm.AddTopLevelDeclaration(td);
+ }
+
+ break;
+ }
+ case 7: {
+ GlobalVars(out vs);
+ foreach(Bpl.Variable/*!*/ v in vs){
+ Contract.Assert(v != null);
+ Pgm.AddTopLevelDeclaration(v);
+ }
+
+ break;
+ }
+ case 32: {
+ Procedure(out pr, out im);
+ Pgm.AddTopLevelDeclaration(pr);
+ if (im != null) {
+ Pgm.AddTopLevelDeclaration(im);
+ }
+
+ break;
+ }
+ case 33: {
+ Implementation(out nnim);
+ Pgm.AddTopLevelDeclaration(nnim);
+ break;
+ }
+ }
+ }
+ Expect(0);
+ }
+
+ void Consts(out List<Variable>/*!*/ ds) {
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null); IToken/*!*/ y; List<TypedIdent>/*!*/ xs;
+ ds = new List<Variable>();
+ bool u = false; QKeyValue kv = null;
+ bool ChildrenComplete = false;
+ List<ConstantParent/*!*/> Parents = null;
+ Expect(21);
+ y = t;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ if (la.kind == 22) {
+ Get();
+ u = true;
+ }
+ IdsType(out xs);
+ if (la.kind == 23) {
+ OrderSpec(out ChildrenComplete, out Parents);
+ }
+ bool makeClone = false;
+ foreach(TypedIdent/*!*/ x in xs){
+ Contract.Assert(x != null);
+
+ // ensure that no sharing is introduced
+ List<ConstantParent/*!*/> ParentsClone;
+ if (makeClone && Parents != null) {
+ ParentsClone = new List<ConstantParent/*!*/> ();
+ foreach (ConstantParent/*!*/ p in Parents){
+ Contract.Assert(p != null);
+ ParentsClone.Add(new ConstantParent (
+ new IdentifierExpr (p.Parent.tok, p.Parent.Name),
+ p.Unique));}
+ } else {
+ ParentsClone = Parents;
+ }
+ makeClone = true;
+
+ ds.Add(new Constant(y, x, u, ParentsClone, ChildrenComplete, kv));
+ }
+
+ Expect(8);
+ }
+
+ void Function(out List<Declaration>/*!*/ ds) {
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ ds = new List<Declaration>(); IToken/*!*/ z;
+ IToken/*!*/ typeParamTok;
+ var typeParams = new List<TypeVariable>();
+ var arguments = new List<Variable>();
+ TypedIdent/*!*/ tyd;
+ TypedIdent retTyd = null;
+ Bpl.Type/*!*/ retTy;
+ QKeyValue argKv = null;
+ QKeyValue kv = null;
+ Expr definition = null;
+ Expr/*!*/ tmp;
+
+ Expect(25);
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Ident(out z);
+ if (la.kind == 19) {
+ TypeParams(out typeParamTok, out typeParams);
+ }
+ Expect(9);
+ if (StartOf(2)) {
+ VarOrType(out tyd, out argKv);
+ arguments.Add(new Formal(tyd.tok, tyd, true, argKv));
+ while (la.kind == 12) {
+ Get();
+ VarOrType(out tyd, out argKv);
+ arguments.Add(new Formal(tyd.tok, tyd, true, argKv));
+ }
+ }
+ Expect(10);
+ argKv = null;
+ if (la.kind == 26) {
+ Get();
+ Expect(9);
+ VarOrType(out retTyd, out argKv);
+ Expect(10);
+ } else if (la.kind == 11) {
+ Get();
+ Type(out retTy);
+ retTyd = new TypedIdent(retTy.tok, TypedIdent.NoName, retTy);
+ } else SynErr(99);
+ if (la.kind == 27) {
+ Get();
+ Expression(out tmp);
+ definition = tmp;
+ Expect(28);
+ } else if (la.kind == 8) {
+ Get();
+ } else SynErr(100);
+ if (retTyd == null) {
+ // construct a dummy type for the case of syntax error
+ retTyd = new TypedIdent(t, TypedIdent.NoName, new BasicType(t, SimpleType.Int));
+ }
+ Function/*!*/ func = new Function(z, z.val, typeParams, arguments,
+ new Formal(retTyd.tok, retTyd, false, argKv), null, kv);
+ Contract.Assert(func != null);
+ ds.Add(func);
+ bool allUnnamed = true;
+ foreach(Formal/*!*/ f in arguments){
+ Contract.Assert(f != null);
+ if (f.TypedIdent.HasName) {
+ allUnnamed = false;
+ break;
+ }
+ }
+ if (!allUnnamed) {
+ Bpl.Type prevType = null;
+ for (int i = arguments.Count; 0 <= --i; ) {
+ TypedIdent/*!*/ curr = cce.NonNull(arguments[i]).TypedIdent;
+ if (curr.HasName) {
+ // the argument was given as both an identifier and a type
+ prevType = curr.Type;
+ } else {
+ // the argument was given as just one "thing", which syntactically parsed as a type
+ if (prevType == null) {
+ this.errors.SemErr(curr.tok, "the type of the last parameter is unspecified");
+ break;
+ }
+ Bpl.Type ty = curr.Type;
+ var uti = ty as UnresolvedTypeIdentifier;
+ if (uti != null && uti.Arguments.Count == 0) {
+ // the given "thing" was just an identifier, so let's use it as the name of the parameter
+ curr.Name = uti.Name;
+ curr.Type = prevType;
+ } else {
+ this.errors.SemErr(curr.tok, "expecting an identifier as parameter name");
+ }
+ }
+ }
+ }
+ if (definition != null) {
+ // generate either an axiom or a function body
+ if (QKeyValue.FindBoolAttribute(kv, "inline")) {
+ func.Body = definition;
+ } else {
+ ds.Add(func.CreateDefinitionAxiom(definition, kv));
+ }
+ }
+
+ }
+
+ void Axiom(out Axiom/*!*/ m) {
+ Contract.Ensures(Contract.ValueAtReturn(out m) != null); Expr/*!*/ e; QKeyValue kv = null;
+ Expect(29);
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ IToken/*!*/ x = t;
+ Proposition(out e);
+ Expect(8);
+ m = new Axiom(x,e, null, kv);
+ }
+
+ void UserDefinedTypes(out List<Declaration/*!*/>/*!*/ ts) {
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out ts))); Declaration/*!*/ decl; QKeyValue kv = null; ts = new List<Declaration/*!*/> ();
+ Expect(30);
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ UserDefinedType(out decl, kv);
+ ts.Add(decl);
+ while (la.kind == 12) {
+ Get();
+ UserDefinedType(out decl, kv);
+ ts.Add(decl);
+ }
+ Expect(8);
+ }
+
+ void GlobalVars(out List<Variable>/*!*/ ds) {
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ QKeyValue kv = null;
+ ds = new List<Variable>();
+ var dsx = ds;
+
+ Expect(7);
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ IdsTypeWheres(true, "global variables", delegate(TypedIdent tyd) { dsx.Add(new GlobalVariable(tyd.tok, tyd, kv)); } );
+ Expect(8);
+ }
+
+ void Procedure(out Procedure/*!*/ proc, out /*maybe null*/ Implementation impl) {
+ Contract.Ensures(Contract.ValueAtReturn(out proc) != null); IToken/*!*/ x;
+ List<TypeVariable>/*!*/ typeParams;
+ List<Variable>/*!*/ ins, outs;
+ List<Requires>/*!*/ pre = new List<Requires>();
+ List<IdentifierExpr>/*!*/ mods = new List<IdentifierExpr>();
+ List<Ensures>/*!*/ post = new List<Ensures>();
+
+ List<Variable>/*!*/ locals = new List<Variable>();
+ StmtList/*!*/ stmtList;
+ QKeyValue kv = null;
+ impl = null;
+
+ Expect(32);
+ ProcSignature(true, out x, out typeParams, out ins, out outs, out kv);
+ if (la.kind == 8) {
+ Get();
+ while (StartOf(3)) {
+ Spec(pre, mods, post);
+ }
+ } else if (StartOf(4)) {
+ while (StartOf(3)) {
+ Spec(pre, mods, post);
+ }
+ ImplBody(out locals, out stmtList);
+ impl = new Implementation(x, x.val, typeParams,
+ Formal.StripWhereClauses(ins), Formal.StripWhereClauses(outs), locals, stmtList, kv == null ? null : (QKeyValue)kv.Clone(), this.errors);
+
+ } else SynErr(99);
+ proc = new Procedure(x, x.val, typeParams, ins, outs, pre, mods, post, kv);
+ }
+
+ void Implementation(out Implementation/*!*/ impl) {
+ Contract.Ensures(Contract.ValueAtReturn(out impl) != null); IToken/*!*/ x;
+ List<TypeVariable>/*!*/ typeParams;
+ List<Variable>/*!*/ ins, outs;
+ List<Variable>/*!*/ locals;
+ StmtList/*!*/ stmtList;
+ QKeyValue kv;
+
+ Expect(33);
+ ProcSignature(false, out x, out typeParams, out ins, out outs, out kv);
+ ImplBody(out locals, out stmtList);
+ impl = new Implementation(x, x.val, typeParams, ins, outs, locals, stmtList, kv, this.errors);
+ }
+
+ void Attribute(ref QKeyValue kv) {
+ Trigger trig = null;
+ AttributeOrTrigger(ref kv, ref trig);
+ if (trig != null) this.SemErr("only attributes, not triggers, allowed here");
+ }
+
+ void IdsTypeWheres(bool allowWhereClauses, string context, System.Action<TypedIdent> action ) {
+ IdsTypeWhere(allowWhereClauses, context, action);
+ while (la.kind == 12) {
+ Get();
+ IdsTypeWhere(allowWhereClauses, context, action);
+ }
+ }
+
+ void LocalVars(List<Variable>/*!*/ ds) {
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ QKeyValue kv = null;
+
+ Expect(7);
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ IdsTypeWheres(true, "local variables", delegate(TypedIdent tyd) { ds.Add(new LocalVariable(tyd.tok, tyd, kv)); } );
+ Expect(8);
+ }
+
+ void ProcFormals(bool incoming, bool allowWhereClauses, out List<Variable>/*!*/ ds) {
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ ds = new List<Variable>();
+ var dsx = ds;
+ var context = allowWhereClauses ? "procedure formals" : "the 'implementation' copies of formals";
+
+ Expect(9);
+ if (la.kind == 1 || la.kind == 27) {
+ AttrsIdsTypeWheres(allowWhereClauses, allowWhereClauses, context, delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new Formal(tyd.tok, tyd, incoming, kv)); });
+ }
+ Expect(10);
+ }
+
+ void AttrsIdsTypeWheres(bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action ) {
+ AttributesIdsTypeWhere(allowAttributes, allowWhereClauses, context, action);
+ while (la.kind == 12) {
+ Get();
+ AttributesIdsTypeWhere(allowAttributes, allowWhereClauses, context, action);
+ }
+ }
+
+ void BoundVars(IToken/*!*/ x, out List<Variable>/*!*/ ds) {
+ Contract.Requires(x != null);
+ Contract.Ensures(Contract.ValueAtReturn(out ds) != null);
+ List<TypedIdent>/*!*/ tyds = new List<TypedIdent>();
+ ds = new List<Variable>();
+ var dsx = ds;
+
+ AttrsIdsTypeWheres(true, false, "bound variables", delegate(TypedIdent tyd, QKeyValue kv) { dsx.Add(new BoundVariable(tyd.tok, tyd, kv)); } );
+ }
+
+ void IdsType(out List<TypedIdent>/*!*/ tyds) {
+ Contract.Ensures(Contract.ValueAtReturn(out tyds) != null); List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty;
+ Idents(out ids);
+ Expect(11);
+ Type(out ty);
+ tyds = new List<TypedIdent>();
+ foreach(Token/*!*/ id in ids){
+ Contract.Assert(id != null);
+ tyds.Add(new TypedIdent(id, id.val, ty, null));
+ }
+
+ }
+
+ void Idents(out List<IToken>/*!*/ xs) {
+ Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>();
+ Ident(out id);
+ xs.Add(id);
+ while (la.kind == 12) {
+ Get();
+ Ident(out id);
+ xs.Add(id);
+ }
+ }
+
+ void Type(out Bpl.Type/*!*/ ty) {
+ Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken/*!*/ tok; ty = dummyType;
+ if (StartOf(5)) {
+ TypeAtom(out ty);
+ } else if (la.kind == 1) {
+ Ident(out tok);
+ List<Bpl.Type>/*!*/ args = new List<Bpl.Type> ();
+ if (StartOf(6)) {
+ TypeArgs(args);
+ }
+ ty = new UnresolvedTypeIdentifier (tok, tok.val, args);
+ } else if (la.kind == 17 || la.kind == 19) {
+ MapType(out ty);
+ } else SynErr(100);
+ }
+
+ void AttributesIdsTypeWhere(bool allowAttributes, bool allowWhereClauses, string context, System.Action<TypedIdent, QKeyValue> action ) {
+ QKeyValue kv = null;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ if (!allowAttributes) {
+ kv = null;
+ this.SemErr("attributes are not allowed on " + context);
+ }
+
+ }
+ IdsTypeWhere(allowWhereClauses, context, delegate(TypedIdent tyd) { action(tyd, kv); });
+ }
+
+ void IdsTypeWhere(bool allowWhereClauses, string context, System.Action<TypedIdent> action ) {
+ List<IToken>/*!*/ ids; Bpl.Type/*!*/ ty; Expr wh = null; Expr/*!*/ nne;
+ Idents(out ids);
+ Expect(11);
+ Type(out ty);
+ if (la.kind == 13) {
+ Get();
+ Expression(out nne);
+ if (!allowWhereClauses) {
+ this.SemErr("where clause not allowed on " + context);
+ } else {
+ wh = nne;
+ }
+
+ }
+ foreach(Token/*!*/ id in ids){
+ Contract.Assert(id != null);
+ action(new TypedIdent(id, id.val, ty, wh));
+ }
+
+ }
+
+ void Expression(out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
+ ImpliesExpression(false, out e0);
+ while (la.kind == 55 || la.kind == 56) {
+ EquivOp();
+ x = t;
+ ImpliesExpression(false, out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.Iff, e0, e1);
+ }
+ }
+
+ void TypeAtom(out Bpl.Type/*!*/ ty) {
+ Contract.Ensures(Contract.ValueAtReturn(out ty) != null); ty = dummyType;
+ if (la.kind == 14) {
+ Get();
+ ty = new BasicType(t, SimpleType.Int);
+ } else if (la.kind == 15) {
+ Get();
+ ty = new BasicType(t, SimpleType.Real);
+ } else if (la.kind == 98) {
+ Get();
+ ty = FType();
+ } else if (la.kind == 16) {
+ Get();
+ ty = new BasicType(t, SimpleType.Bool);
+ } else if (la.kind == 9) {
+ Get();
+ Type(out ty);
+ Expect(10);
+ } else SynErr(101);
+ }
+
+ FloatType FType() {
+ if (t.val.Length > 5) {
+ switch (Int32.Parse(t.val.Substring(5))) {
+ case 16:
+ return new FloatType(t, 5, 11);
+ case 32:
+ return new FloatType(t, 8, 24);
+ case 64:
+ return new FloatType(t, 11, 53);
+ case 128:
+ return new FloatType(t, 15, 113);
+ default:
+ SynErr(3);
+ return new FloatType(t, 0, 0);
+ }
+ }
+ else {
+ try {
+ Expect(19); //<
+ Expect(3); //int
+ int exp = Int32.Parse(t.val);
+ Expect(12); //,
+ Expect(3); //int
+ int man = Int32.Parse(t.val);
+ Expect(20); //>
+ return new FloatType(t, exp, man);
+ }
+ catch (Exception) {
+ return new FloatType(t, 0, 0);
+ }
+ }
+ }
+
+ void Ident(out IToken/*!*/ x) {
+ Contract.Ensures(Contract.ValueAtReturn(out x) != null);
+ Expect(1);
+ x = t;
+ if (x.val.StartsWith("\\"))
+ x.val = x.val.Substring(1);
+
+ }
+
+ void TypeArgs(List<Bpl.Type>/*!*/ ts) {
+ Contract.Requires(ts != null); IToken/*!*/ tok; Bpl.Type/*!*/ ty;
+ if (StartOf(5)) {
+ TypeAtom(out ty);
+ ts.Add(ty);
+ if (StartOf(6)) {
+ TypeArgs(ts);
+ }
+ } else if (la.kind == 1) {
+ Ident(out tok);
+ List<Bpl.Type>/*!*/ args = new List<Bpl.Type> ();
+ ts.Add(new UnresolvedTypeIdentifier (tok, tok.val, args));
+ if (StartOf(6)) {
+ TypeArgs(ts);
+ }
+ } else if (la.kind == 17 || la.kind == 19) {
+ MapType(out ty);
+ ts.Add(ty);
+ } else SynErr(102);
+ }
+
+ void MapType(out Bpl.Type/*!*/ ty) {
+ Contract.Ensures(Contract.ValueAtReturn(out ty) != null); IToken tok = null;
+ IToken/*!*/ nnTok;
+ List<Bpl.Type>/*!*/ arguments = new List<Bpl.Type>();
+ Bpl.Type/*!*/ result;
+ List<TypeVariable>/*!*/ typeParameters = new List<TypeVariable>();
+
+ if (la.kind == 19) {
+ TypeParams(out nnTok, out typeParameters);
+ tok = nnTok;
+ }
+ Expect(17);
+ if (tok == null) tok = t;
+ if (StartOf(6)) {
+ Types(arguments);
+ }
+ Expect(18);
+ Type(out result);
+ ty = new MapType(tok, typeParameters, arguments, result);
+
+ }
+
+ void TypeParams(out IToken/*!*/ tok, out List<TypeVariable>/*!*/ typeParams) {
+ Contract.Ensures(Contract.ValueAtReturn(out tok) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); List<IToken>/*!*/ typeParamToks;
+ Expect(19);
+ tok = t;
+ Idents(out typeParamToks);
+ Expect(20);
+ typeParams = new List<TypeVariable> ();
+ foreach(Token/*!*/ id in typeParamToks){
+ Contract.Assert(id != null);
+ typeParams.Add(new TypeVariable(id, id.val));}
+
+ }
+
+ void Types(List<Bpl.Type>/*!*/ ts) {
+ Contract.Requires(ts != null); Bpl.Type/*!*/ ty;
+ Type(out ty);
+ ts.Add(ty);
+ while (la.kind == 12) {
+ Get();
+ Type(out ty);
+ ts.Add(ty);
+ }
+ }
+
+ void OrderSpec(out bool ChildrenComplete, out List<ConstantParent/*!*/> Parents) {
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out Parents),true)); ChildrenComplete = false;
+ Parents = null;
+ bool u;
+ IToken/*!*/ parent;
+ Expect(23);
+ Parents = new List<ConstantParent/*!*/> ();
+ u = false;
+ if (la.kind == 1 || la.kind == 22) {
+ if (la.kind == 22) {
+ Get();
+ u = true;
+ }
+ Ident(out parent);
+ Parents.Add(new ConstantParent (
+ new IdentifierExpr(parent, parent.val), u));
+ while (la.kind == 12) {
+ Get();
+ u = false;
+ if (la.kind == 22) {
+ Get();
+ u = true;
+ }
+ Ident(out parent);
+ Parents.Add(new ConstantParent (
+ new IdentifierExpr(parent, parent.val), u));
+ }
+ }
+ if (la.kind == 24) {
+ Get();
+ ChildrenComplete = true;
+ }
+ }
+
+ void VarOrType(out TypedIdent/*!*/ tyd, out QKeyValue kv) {
+ Contract.Ensures(Contract.ValueAtReturn(out tyd) != null);
+ string/*!*/ varName = TypedIdent.NoName;
+ Bpl.Type/*!*/ ty;
+ IToken/*!*/ tok;
+ kv = null;
+
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Type(out ty);
+ tok = ty.tok;
+ if (la.kind == 11) {
+ Get();
+ var uti = ty as UnresolvedTypeIdentifier;
+ if (uti != null && uti.Arguments.Count == 0) {
+ varName = uti.Name;
+ } else {
+ this.SemErr("expected identifier before ':'");
+ }
+
+ Type(out ty);
+ }
+ tyd = new TypedIdent(tok, varName, ty);
+ }
+
+ void Proposition(out Expr/*!*/ e) {
+ Contract.Ensures(Contract.ValueAtReturn(out e) != null);
+ Expression(out e);
+ }
+
+ void UserDefinedType(out Declaration/*!*/ decl, QKeyValue kv) {
+ Contract.Ensures(Contract.ValueAtReturn(out decl) != null); IToken/*!*/ id; List<IToken>/*!*/ paramTokens = new List<IToken> ();
+ Bpl.Type/*!*/ body = dummyType; bool synonym = false;
+ Ident(out id);
+ if (la.kind == 1) {
+ WhiteSpaceIdents(out paramTokens);
+ }
+ if (la.kind == 31) {
+ Get();
+ Type(out body);
+ synonym = true;
+ }
+ if (synonym) {
+ List<TypeVariable>/*!*/ typeParams = new List<TypeVariable>();
+ foreach(Token/*!*/ t in paramTokens){
+ Contract.Assert(t != null);
+ typeParams.Add(new TypeVariable(t, t.val));}
+ decl = new TypeSynonymDecl(id, id.val, typeParams, body, kv);
+ } else {
+ decl = new TypeCtorDecl(id, id.val, paramTokens.Count, kv);
+ }
+
+ }
+
+ void WhiteSpaceIdents(out List<IToken>/*!*/ xs) {
+ Contract.Ensures(Contract.ValueAtReturn(out xs) != null); IToken/*!*/ id; xs = new List<IToken>();
+ Ident(out id);
+ xs.Add(id);
+ while (la.kind == 1) {
+ Ident(out id);
+ xs.Add(id);
+ }
+ }
+
+ void ProcSignature(bool allowWhereClausesOnFormals, out IToken/*!*/ name, out List<TypeVariable>/*!*/ typeParams,
+out List<Variable>/*!*/ ins, out List<Variable>/*!*/ outs, out QKeyValue kv) {
+ Contract.Ensures(Contract.ValueAtReturn(out name) != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ins) != null); Contract.Ensures(Contract.ValueAtReturn(out outs) != null);
+ IToken/*!*/ typeParamTok; typeParams = new List<TypeVariable>();
+ outs = new List<Variable>(); kv = null;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Ident(out name);
+ if (la.kind == 19) {
+ TypeParams(out typeParamTok, out typeParams);
+ }
+ ProcFormals(true, allowWhereClausesOnFormals, out ins);
+ if (la.kind == 26) {
+ Get();
+ ProcFormals(false, allowWhereClausesOnFormals, out outs);
+ }
+ }
+
+ void Spec(List<Requires>/*!*/ pre, List<IdentifierExpr>/*!*/ mods, List<Ensures>/*!*/ post) {
+ Contract.Requires(pre != null); Contract.Requires(mods != null); Contract.Requires(post != null); List<IToken>/*!*/ ms;
+ if (la.kind == 34) {
+ Get();
+ if (la.kind == 1) {
+ Idents(out ms);
+ foreach(IToken/*!*/ m in ms){
+ Contract.Assert(m != null);
+ mods.Add(new IdentifierExpr(m, m.val));
+ }
+
+ }
+ Expect(8);
+ } else if (la.kind == 35) {
+ Get();
+ SpecPrePost(true, pre, post);
+ } else if (la.kind == 36 || la.kind == 37) {
+ SpecPrePost(false, pre, post);
+ } else SynErr(103);
+ }
+
+ void ImplBody(out List<Variable>/*!*/ locals, out StmtList/*!*/ stmtList) {
+ Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); locals = new List<Variable>();
+ Expect(27);
+ while (la.kind == 7) {
+ LocalVars(locals);
+ }
+ StmtList(out stmtList);
+ }
+
+ void SpecPrePost(bool free, List<Requires>/*!*/ pre, List<Ensures>/*!*/ post) {
+ Contract.Requires(pre != null); Contract.Requires(post != null); Expr/*!*/ e; Token tok = null; QKeyValue kv = null;
+ if (la.kind == 36) {
+ Get();
+ tok = t;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Proposition(out e);
+ Expect(8);
+ pre.Add(new Requires(tok, free, e, null, kv));
+ } else if (la.kind == 37) {
+ Get();
+ tok = t;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Proposition(out e);
+ Expect(8);
+ post.Add(new Ensures(tok, free, e, null, kv));
+ } else SynErr(104);
+ }
+
+ void StmtList(out StmtList/*!*/ stmtList) {
+ Contract.Ensures(Contract.ValueAtReturn(out stmtList) != null); List<BigBlock/*!*/> bigblocks = new List<BigBlock/*!*/>();
+ /* built-up state for the current BigBlock: */
+ IToken startToken = null; string currentLabel = null;
+ List<Cmd> cs = null; /* invariant: startToken != null ==> cs != null */
+ /* temporary variables: */
+ IToken label; Cmd c; BigBlock b;
+ StructuredCmd ec = null; StructuredCmd/*!*/ ecn;
+ TransferCmd tc = null; TransferCmd/*!*/ tcn;
+
+ while (StartOf(7)) {
+ if (StartOf(8)) {
+ LabelOrCmd(out c, out label);
+ if (c != null) {
+ // LabelOrCmd read a Cmd
+ Contract.Assert(label == null);
+ if (startToken == null) { startToken = c.tok; cs = new List<Cmd>(); }
+ Contract.Assert(cs != null);
+ cs.Add(c);
+ } else {
+ // LabelOrCmd read a label
+ Contract.Assert(label != null);
+ if (startToken != null) {
+ Contract.Assert(cs != null);
+ // dump the built-up state into a BigBlock
+ b = new BigBlock(startToken, currentLabel, cs, null, null);
+ bigblocks.Add(b);
+ cs = null;
+ }
+ startToken = label;
+ currentLabel = label.val;
+ cs = new List<Cmd>();
+ }
+
+ } else if (la.kind == 40 || la.kind == 42 || la.kind == 45) {
+ StructuredCmd(out ecn);
+ ec = ecn;
+ if (startToken == null) { startToken = ec.tok; cs = new List<Cmd>(); }
+ Contract.Assert(cs != null);
+ b = new BigBlock(startToken, currentLabel, cs, ec, null);
+ bigblocks.Add(b);
+ startToken = null; currentLabel = null; cs = null;
+
+ } else {
+ TransferCmd(out tcn);
+ tc = tcn;
+ if (startToken == null) { startToken = tc.tok; cs = new List<Cmd>(); }
+ Contract.Assert(cs != null);
+ b = new BigBlock(startToken, currentLabel, cs, null, tc);
+ bigblocks.Add(b);
+ startToken = null; currentLabel = null; cs = null;
+
+ }
+ }
+ Expect(28);
+ IToken/*!*/ endCurly = t;
+ if (startToken == null && bigblocks.Count == 0) {
+ startToken = t; cs = new List<Cmd>();
+ }
+ if (startToken != null) {
+ Contract.Assert(cs != null);
+ b = new BigBlock(startToken, currentLabel, cs, null, null);
+ bigblocks.Add(b);
+ }
+
+ stmtList = new StmtList(bigblocks, endCurly);
+
+ }
+
+ void LabelOrCmd(out Cmd c, out IToken label) {
+ IToken/*!*/ x; Expr/*!*/ e;
+ List<IToken>/*!*/ xs;
+ List<IdentifierExpr> ids;
+ c = dummyCmd; label = null;
+ Cmd/*!*/ cn;
+ QKeyValue kv = null;
+
+ switch (la.kind) {
+ case 1: {
+ LabelOrAssign(out c, out label);
+ break;
+ }
+ case 46: {
+ Get();
+ x = t;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Proposition(out e);
+ c = new AssertCmd(x, e, kv);
+ Expect(8);
+ break;
+ }
+ case 47: {
+ Get();
+ x = t;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Proposition(out e);
+ c = new AssumeCmd(x, e, kv);
+ Expect(8);
+ break;
+ }
+ case 48: {
+ Get();
+ x = t;
+ Idents(out xs);
+ Expect(8);
+ ids = new List<IdentifierExpr>();
+ foreach(IToken/*!*/ y in xs){
+ Contract.Assert(y != null);
+ ids.Add(new IdentifierExpr(y, y.val));
+ }
+ c = new HavocCmd(x,ids);
+
+ break;
+ }
+ case 35: case 51: case 52: {
+ CallCmd(out cn);
+ Expect(8);
+ c = cn;
+ break;
+ }
+ case 53: {
+ ParCallCmd(out cn);
+ c = cn;
+ break;
+ }
+ case 49: {
+ Get();
+ x = t;
+ Expect(8);
+ c = new YieldCmd(x);
+ break;
+ }
+ default: SynErr(105); break;
+ }
+ }
+
+ void StructuredCmd(out StructuredCmd/*!*/ ec) {
+ Contract.Ensures(Contract.ValueAtReturn(out ec) != null); ec = dummyStructuredCmd; Contract.Assume(cce.IsPeerConsistent(ec));
+ IfCmd/*!*/ ifcmd; WhileCmd/*!*/ wcmd; BreakCmd/*!*/ bcmd;
+
+ if (la.kind == 40) {
+ IfCmd(out ifcmd);
+ ec = ifcmd;
+ } else if (la.kind == 42) {
+ WhileCmd(out wcmd);
+ ec = wcmd;
+ } else if (la.kind == 45) {
+ BreakCmd(out bcmd);
+ ec = bcmd;
+ } else SynErr(106);
+ }
+
+ void TransferCmd(out TransferCmd/*!*/ tc) {
+ Contract.Ensures(Contract.ValueAtReturn(out tc) != null); tc = dummyTransferCmd;
+ Token y; List<IToken>/*!*/ xs;
+ List<String> ss = new List<String>();
+
+ if (la.kind == 38) {
+ Get();
+ y = t;
+ Idents(out xs);
+ foreach(IToken/*!*/ s in xs){
+ Contract.Assert(s != null);
+ ss.Add(s.val); }
+ tc = new GotoCmd(y, ss);
+
+ } else if (la.kind == 39) {
+ Get();
+ tc = new ReturnCmd(t);
+ } else SynErr(107);
+ Expect(8);
+ }
+
+ void IfCmd(out IfCmd/*!*/ ifcmd) {
+ Contract.Ensures(Contract.ValueAtReturn(out ifcmd) != null); IToken/*!*/ x;
+ Expr guard;
+ StmtList/*!*/ thn;
+ IfCmd/*!*/ elseIf; IfCmd elseIfOption = null;
+ StmtList/*!*/ els; StmtList elseOption = null;
+
+ Expect(40);
+ x = t;
+ Guard(out guard);
+ Expect(27);
+ StmtList(out thn);
+ if (la.kind == 41) {
+ Get();
+ if (la.kind == 40) {
+ IfCmd(out elseIf);
+ elseIfOption = elseIf;
+ } else if (la.kind == 27) {
+ Get();
+ StmtList(out els);
+ elseOption = els;
+ } else SynErr(108);
+ }
+ ifcmd = new IfCmd(x, guard, thn, elseIfOption, elseOption);
+ }
+
+ void WhileCmd(out WhileCmd/*!*/ wcmd) {
+ Contract.Ensures(Contract.ValueAtReturn(out wcmd) != null); IToken/*!*/ x; Token z;
+ Expr guard; Expr/*!*/ e; bool isFree;
+ List<PredicateCmd/*!*/> invariants = new List<PredicateCmd/*!*/>();
+ StmtList/*!*/ body;
+ QKeyValue kv = null;
+
+ Expect(42);
+ x = t;
+ Guard(out guard);
+ Contract.Assume(guard == null || cce.Owner.None(guard));
+ while (la.kind == 35 || la.kind == 43) {
+ isFree = false; z = la/*lookahead token*/;
+ if (la.kind == 35) {
+ Get();
+ isFree = true;
+ }
+ Expect(43);
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ Expression(out e);
+ if (isFree) {
+ invariants.Add(new AssumeCmd(z, e, kv));
+ } else {
+ invariants.Add(new AssertCmd(z, e, kv));
+ }
+ kv = null;
+
+ Expect(8);
+ }
+ Expect(27);
+ StmtList(out body);
+ wcmd = new WhileCmd(x, guard, invariants, body);
+ }
+
+ void BreakCmd(out BreakCmd/*!*/ bcmd) {
+ Contract.Ensures(Contract.ValueAtReturn(out bcmd) != null); IToken/*!*/ x; IToken/*!*/ y;
+ string breakLabel = null;
+
+ Expect(45);
+ x = t;
+ if (la.kind == 1) {
+ Ident(out y);
+ breakLabel = y.val;
+ }
+ Expect(8);
+ bcmd = new BreakCmd(x, breakLabel);
+ }
+
+ void Guard(out Expr e) {
+ Expr/*!*/ ee; e = null;
+ Expect(9);
+ if (la.kind == 44) {
+ Get();
+ e = null;
+ } else if (StartOf(9)) {
+ Expression(out ee);
+ e = ee;
+ } else SynErr(109);
+ Expect(10);
+ }
+
+ void LabelOrAssign(out Cmd c, out IToken label) {
+ IToken/*!*/ id; IToken/*!*/ x, y; Expr/*!*/ e0;
+ c = dummyCmd; label = null;
+ AssignLhs/*!*/ lhs;
+ List<AssignLhs/*!*/>/*!*/ lhss;
+ List<Expr/*!*/>/*!*/ rhss;
+ List<Expr/*!*/>/*!*/ indexes;
+
+ Ident(out id);
+ x = t;
+ if (la.kind == 11) {
+ Get();
+ c = null; label = x;
+ } else if (la.kind == 12 || la.kind == 17 || la.kind == 50) {
+ lhss = new List<AssignLhs/*!*/>();
+ lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val));
+ while (la.kind == 17) {
+ MapAssignIndex(out y, out indexes);
+ lhs = new MapAssignLhs(y, lhs, indexes);
+ }
+ lhss.Add(lhs);
+ while (la.kind == 12) {
+ Get();
+ Ident(out id);
+ lhs = new SimpleAssignLhs(id, new IdentifierExpr(id, id.val));
+ while (la.kind == 17) {
+ MapAssignIndex(out y, out indexes);
+ lhs = new MapAssignLhs(y, lhs, indexes);
+ }
+ lhss.Add(lhs);
+ }
+ Expect(50);
+ x = t; /* use location of := */
+ Expression(out e0);
+ rhss = new List<Expr/*!*/> ();
+ rhss.Add(e0);
+ while (la.kind == 12) {
+ Get();
+ Expression(out e0);
+ rhss.Add(e0);
+ }
+ Expect(8);
+ c = new AssignCmd(x, lhss, rhss);
+ } else SynErr(110);
+ }
+
+ void CallCmd(out Cmd c) {
+ Contract.Ensures(Contract.ValueAtReturn(out c) != null);
+ IToken x;
+ bool isAsync = false;
+ bool isFree = false;
+ QKeyValue kv = null;
+ c = null;
+
+ if (la.kind == 51) {
+ Get();
+ isAsync = true;
+ }
+ if (la.kind == 35) {
+ Get();
+ isFree = true;
+ }
+ Expect(52);
+ x = t;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ CallParams(isAsync, isFree, kv, x, out c);
+
+ }
+
+ void ParCallCmd(out Cmd d) {
+ Contract.Ensures(Contract.ValueAtReturn(out d) != null);
+ IToken x;
+ QKeyValue kv = null;
+ Cmd c = null;
+ List<CallCmd> callCmds = new List<CallCmd>();
+
+ Expect(53);
+ x = t;
+ while (la.kind == 27) {
+ Attribute(ref kv);
+ }
+ CallParams(false, false, kv, x, out c);
+ callCmds.Add((CallCmd)c);
+ while (la.kind == 54) {
+ Get();
+ CallParams(false, false, kv, x, out c);
+ callCmds.Add((CallCmd)c);
+ }
+ Expect(8);
+ d = new ParCallCmd(x, callCmds, kv);
+ }
+
+ void MapAssignIndex(out IToken/*!*/ x, out List<Expr/*!*/>/*!*/ indexes) {
+ Contract.Ensures(Contract.ValueAtReturn(out x) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out indexes))); indexes = new List<Expr/*!*/> ();
+ Expr/*!*/ e;
+
+ Expect(17);
+ x = t;
+ if (StartOf(9)) {
+ Expression(out e);
+ indexes.Add(e);
+ while (la.kind == 12) {
+ Get();
+ Expression(out e);
+ indexes.Add(e);
+ }
+ }
+ Expect(18);
+ }
+
+ void CallParams(bool isAsync, bool isFree, QKeyValue kv, IToken x, out Cmd c) {
+ List<IdentifierExpr> ids = new List<IdentifierExpr>();
+ List<Expr> es = new List<Expr>();
+ Expr en;
+ IToken first;
+ IToken p;
+ c = null;
+
+ Ident(out first);
+ if (la.kind == 9) {
+ Get();
+ if (StartOf(9)) {
+ Expression(out en);
+ es.Add(en);
+ while (la.kind == 12) {
+ Get();
+ Expression(out en);
+ es.Add(en);
+ }
+ }
+ Expect(10);
+ c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync;
+ } else if (la.kind == 12 || la.kind == 50) {
+ ids.Add(new IdentifierExpr(first, first.val));
+ if (la.kind == 12) {
+ Get();
+ Ident(out p);
+ ids.Add(new IdentifierExpr(p, p.val));
+ while (la.kind == 12) {
+ Get();
+ Ident(out p);
+ ids.Add(new IdentifierExpr(p, p.val));
+ }
+ }
+ Expect(50);
+ Ident(out first);
+ Expect(9);
+ if (StartOf(9)) {
+ Expression(out en);
+ es.Add(en);
+ while (la.kind == 12) {
+ Get();
+ Expression(out en);
+ es.Add(en);
+ }
+ }
+ Expect(10);
+ c = new CallCmd(x, first.val, es, ids, kv); ((CallCmd) c).IsFree = isFree; ((CallCmd) c).IsAsync = isAsync;
+ } else SynErr(111);
+ }
+
+ void Expressions(out List<Expr>/*!*/ es) {
+ Contract.Ensures(Contract.ValueAtReturn(out es) != null); Expr/*!*/ e; es = new List<Expr>();
+ Expression(out e);
+ es.Add(e);
+ while (la.kind == 12) {
+ Get();
+ Expression(out e);
+ es.Add(e);
+ }
+ }
+
+ void ImpliesExpression(bool noExplies, out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
+ LogicalExpression(out e0);
+ if (StartOf(10)) {
+ if (la.kind == 57 || la.kind == 58) {
+ ImpliesOp();
+ x = t;
+ ImpliesExpression(true, out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e0, e1);
+ } else {
+ ExpliesOp();
+ if (noExplies)
+ this.SemErr("illegal mixture of ==> and <==, use parentheses to disambiguate");
+ x = t;
+ LogicalExpression(out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0);
+ while (la.kind == 59 || la.kind == 60) {
+ ExpliesOp();
+ x = t;
+ LogicalExpression(out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.Imp, e1, e0);
+ }
+ }
+ }
+ }
+
+ void EquivOp() {
+ if (la.kind == 55) {
+ Get();
+ } else if (la.kind == 56) {
+ Get();
+ } else SynErr(112);
+ }
+
+ void LogicalExpression(out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
+ RelationalExpression(out e0);
+ if (StartOf(11)) {
+ if (la.kind == 61 || la.kind == 62) {
+ AndOp();
+ x = t;
+ RelationalExpression(out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1);
+ while (la.kind == 61 || la.kind == 62) {
+ AndOp();
+ x = t;
+ RelationalExpression(out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.And, e0, e1);
+ }
+ } else {
+ OrOp();
+ x = t;
+ RelationalExpression(out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1);
+ while (la.kind == 63 || la.kind == 64) {
+ OrOp();
+ x = t;
+ RelationalExpression(out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.Or, e0, e1);
+ }
+ }
+ }
+ }
+
+ void ImpliesOp() {
+ if (la.kind == 57) {
+ Get();
+ } else if (la.kind == 58) {
+ Get();
+ } else SynErr(113);
+ }
+
+ void ExpliesOp() {
+ if (la.kind == 59) {
+ Get();
+ } else if (la.kind == 60) {
+ Get();
+ } else SynErr(114);
+ }
+
+ void RelationalExpression(out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op;
+ BvTerm(out e0);
+ if (StartOf(12)) {
+ RelOp(out x, out op);
+ BvTerm(out e1);
+ e0 = Expr.Binary(x, op, e0, e1);
+ }
+ }
+
+ void AndOp() {
+ if (la.kind == 61) {
+ Get();
+ } else if (la.kind == 62) {
+ Get();
+ } else SynErr(115);
+ }
+
+ void OrOp() {
+ if (la.kind == 63) {
+ Get();
+ } else if (la.kind == 64) {
+ Get();
+ } else SynErr(116);
+ }
+
+ void BvTerm(out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
+ Term(out e0);
+ while (la.kind == 73) {
+ Get();
+ x = t;
+ Term(out e1);
+ e0 = new BvConcatExpr(x, e0, e1);
+ }
+ }
+
+ void RelOp(out IToken/*!*/ x, out BinaryOperator.Opcode op) {
+ Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/;
+ switch (la.kind) {
+ case 65: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Eq;
+ break;
+ }
+ case 19: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Lt;
+ break;
+ }
+ case 20: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Gt;
+ break;
+ }
+ case 66: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Le;
+ break;
+ }
+ case 67: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Ge;
+ break;
+ }
+ case 68: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Neq;
+ break;
+ }
+ case 69: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Subtype;
+ break;
+ }
+ case 70: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Neq;
+ break;
+ }
+ case 71: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Le;
+ break;
+ }
+ case 72: {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Ge;
+ break;
+ }
+ default: SynErr(117); break;
+ }
+ }
+
+ void Term(out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op;
+ Factor(out e0);
+ while (la.kind == 74 || la.kind == 75) {
+ AddOp(out x, out op);
+ Factor(out e1);
+ e0 = Expr.Binary(x, op, e0, e1);
+ }
+ }
+
+ void Factor(out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1; BinaryOperator.Opcode op;
+ Power(out e0);
+ while (StartOf(13)) {
+ MulOp(out x, out op);
+ Power(out e1);
+ e0 = Expr.Binary(x, op, e0, e1);
+ }
+ }
+
+ void AddOp(out IToken/*!*/ x, out BinaryOperator.Opcode op) {
+ Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/;
+ if (la.kind == 74) {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Add;
+ } else if (la.kind == 75) {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Sub;
+ } else SynErr(118);
+ }
+
+ void Power(out Expr/*!*/ e0) {
+ Contract.Ensures(Contract.ValueAtReturn(out e0) != null); IToken/*!*/ x; Expr/*!*/ e1;
+ UnaryExpression(out e0);
+ if (la.kind == 79) {
+ Get();
+ x = t;
+ Power(out e1);
+ e0 = Expr.Binary(x, BinaryOperator.Opcode.Pow, e0, e1);
+ }
+ }
+
+ void MulOp(out IToken/*!*/ x, out BinaryOperator.Opcode op) {
+ Contract.Ensures(Contract.ValueAtReturn(out x) != null); x = Token.NoToken; op=BinaryOperator.Opcode.Add/*(dummy)*/;
+ if (la.kind == 44) {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Mul;
+ } else if (la.kind == 76) {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Div;
+ } else if (la.kind == 77) {
+ Get();
+ x = t; op=BinaryOperator.Opcode.Mod;
+ } else if (la.kind == 78) {
+ Get();
+ x = t; op=BinaryOperator.Opcode.RealDiv;
+ } else SynErr(119);
+ }
+
+ void UnaryExpression(out Expr/*!*/ e) {
+ Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
+ e = dummyExpr;
+
+ if (la.kind == 75) {
+ Get();
+ x = t;
+ UnaryExpression(out e);
+ e = Expr.Unary(x, UnaryOperator.Opcode.Neg, e);
+ } else if (la.kind == 80 || la.kind == 81) {
+ NegOp();
+ x = t;
+ UnaryExpression(out e);
+ e = Expr.Unary(x, UnaryOperator.Opcode.Not, e);
+ } else if (StartOf(14)) {
+ CoercionExpression(out e);
+ } else SynErr(120);
+ }
+
+ void NegOp() {
+ if (la.kind == 80) {
+ Get();
+ } else if (la.kind == 81) {
+ Get();
+ } else SynErr(123);
+ }
+
+ void CoercionExpression(out Expr/*!*/ e) {
+ Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
+ Bpl.Type/*!*/ coercedTo;
+ BigNum bn;
+
+ ArrayExpression(out e);
+ while (la.kind == 11) {
+ Get();
+ x = t;
+ if (StartOf(6)) {
+ Type(out coercedTo);
+ e = Expr.CoerceType(x, e, coercedTo);
+ } else if (la.kind == 3) {
+ Nat(out bn);
+ if (!(e is LiteralExpr) || !((LiteralExpr)e).isBigNum) {
+ this.SemErr("arguments of extract need to be integer literals");
+ e = new BvBounds(x, bn, BigNum.ZERO);
+ } else {
+ e = new BvBounds(x, bn, ((LiteralExpr)e).asBigNum);
+ }
+
+ } else SynErr(124);
+ }
+ }
+
+ void ArrayExpression(out Expr/*!*/ e) {
+ Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x;
+ Expr/*!*/ index0 = dummyExpr; Expr/*!*/ e1;
+ bool store; bool bvExtract;
+ List<Expr>/*!*/ allArgs = dummyExprSeq;
+
+ AtomExpression(out e);
+ while (la.kind == 17) {
+ Get();
+ x = t; allArgs = new List<Expr> ();
+ allArgs.Add(e);
+ store = false; bvExtract = false;
+ if (StartOf(15)) {
+ if (StartOf(9)) {
+ Expression(out index0);
+ if (index0 is BvBounds)
+ bvExtract = true;
+ else
+ allArgs.Add(index0);
+
+ while (la.kind == 12) {
+ Get();
+ Expression(out e1);
+ if (bvExtract || e1 is BvBounds)
+ this.SemErr("bitvectors only have one dimension");
+ allArgs.Add(e1);
+
+ }
+ if (la.kind == 50) {
+ Get();
+ Expression(out e1);
+ if (bvExtract || e1 is BvBounds)
+ this.SemErr("assignment to bitvectors is not possible");
+ allArgs.Add(e1); store = true;
+
+ }
+ } else {
+ Get();
+ Expression(out e1);
+ allArgs.Add(e1); store = true;
+ }
+ }
+ Expect(18);
+ if (store)
+ e = new NAryExpr(x, new MapStore(x, allArgs.Count - 2), allArgs);
+ else if (bvExtract)
+ e = new BvExtractExpr(x, e,
+ ((BvBounds)index0).Upper.ToIntSafe,
+ ((BvBounds)index0).Lower.ToIntSafe);
+ else
+ e = new NAryExpr(x, new MapSelect(x, allArgs.Count - 1), allArgs);
+
+ }
+ }
+
+ void Nat(out BigNum n) {
+ Expect(3);
+ try {
+ n = BigNum.FromString(t.val);
+ } catch (FormatException) {
+ this.SemErr("incorrectly formatted number");
+ n = BigNum.ZERO;
+ }
+
+ }
+
+ void AtomExpression(out Expr/*!*/ e) {
+ Contract.Ensures(Contract.ValueAtReturn(out e) != null); IToken/*!*/ x; int n; BigNum bn; BigDec bd; BigFloat fp;
+ List<Expr>/*!*/ es; List<Variable>/*!*/ ds; Trigger trig;
+ List<TypeVariable>/*!*/ typeParams;
+ IdentifierExpr/*!*/ id;
+ QKeyValue kv;
+ e = dummyExpr;
+ List<Variable>/*!*/ locals;
+ List<Block/*!*/>/*!*/ blocks;
+
+ switch (la.kind) {
+ case 82: {
+ Get();
+ e = new LiteralExpr(t, false);
+ break;
+ }
+ case 83: {
+ Get();
+ e = new LiteralExpr(t, true);
+ break;
+ }
+ case 3: {
+ Nat(out bn);
+ e = new LiteralExpr(t, bn);
+ break;
+ }
+ case 5: case 6: {
+ Dec(out bd);
+ e = new LiteralExpr(t, bd);
+ break;
+ }
+ case 97: {
+ Float(out fp);
+ e = new LiteralExpr(t, fp);
+ break;
+ }
+ case 2: {
+ BvLit(out bn, out n);
+ e = new LiteralExpr(t, bn, n);
+ break;
+ }
+ case 1: {
+ Ident(out x);
+ id = new IdentifierExpr(x, x.val); e = id;
+ if (la.kind == 9) {
+ Get();
+ if (StartOf(9)) {
+ Expressions(out es);
+ e = new NAryExpr(x, new FunctionCall(id), es);
+ } else if (la.kind == 10) {
+ e = new NAryExpr(x, new FunctionCall(id), new List<Expr>());
+ } else SynErr(125);
+ Expect(10);
+ }
+ break;
+ }
+ case 84: {
+ Get();
+ x = t;
+ Expect(9);
+ Expression(out e);
+ Expect(10);
+ e = new OldExpr(x, e);
+ break;
+ }
+ case 14: {
+ Get();
+ x = t;
+ Expect(9);
+ Expression(out e);
+ Expect(10);
+ e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToInt), new List<Expr>{ e });
+ break;
+ }
+ case 15: {
+ Get();
+ x = t;
+ Expect(9);
+ Expression(out e);
+ Expect(10);
+ e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToReal), new List<Expr>{ e });
+ break;
+ }
+ case 98: {
+ Get();
+ x = t;
+ Expect(19);
+ Expression(out e);
+ Expect(20);
+ e = new NAryExpr(x, new ArithmeticCoercion(x, ArithmeticCoercion.CoercionType.ToFloat), new List<Expr> { e });
+ break;
+ }
+ case 9: {
+ Get();
+ if (StartOf(9)) {
+ Expression(out e);
+ if (e is BvBounds)
+ this.SemErr("parentheses around bitvector bounds " +
+ "are not allowed");
+ } else if (la.kind == 88 || la.kind == 89) {
+ Forall();
+ x = t;
+ QuantifierBody(x, out typeParams, out ds, out kv, out trig, out e);
+ if (typeParams.Count + ds.Count > 0)
+ e = new ForallExpr(x, typeParams, ds, kv, trig, e);
+ } else if (la.kind == 90 || la.kind == 91) {
+ Exists();
+ x = t;
+ QuantifierBody(x, out typeParams, out ds, out kv, out trig, out e);
+ if (typeParams.Count + ds.Count > 0)
+ e = new ExistsExpr(x, typeParams, ds, kv, trig, e);
+ } else if (la.kind == 92 || la.kind == 93) {
+ Lambda();
+ x = t;
+ QuantifierBody(x, out typeParams, out ds, out kv, out trig, out e);
+ if (trig != null)
+ SemErr("triggers not allowed in lambda expressions");
+ if (typeParams.Count + ds.Count > 0)
+ e = new LambdaExpr(x, typeParams, ds, kv, e);
+ } else SynErr(126);
+ Expect(10);
+ break;
+ }
+ case 40: {
+ IfThenElseExpression(out e);
+ break;
+ }
+ case 85: {
+ CodeExpression(out locals, out blocks);
+ e = new CodeExpr(locals, blocks);
+ break;
+ }
+ default: SynErr(127); break;
+ }
+ }
+
+ void Dec(out BigDec n) {
+ string s = "";
+ if (la.kind == 5) {
+ Get();
+ s = t.val;
+ } else if (la.kind == 6) {
+ Get();
+ s = t.val;
+ } else SynErr(128);
+ try {
+ n = BigDec.FromString(s);
+ } catch (FormatException) {
+ this.SemErr("incorrectly formatted number");
+ n = BigDec.ZERO;
+ }
+
+ }
+
+ /// <summary>
+ /// Creates a floating point from the current token value
+ /// </summary>
+ /// <param name="n"></param>
+ void Float(out BigFloat n)
+ {
+ try
+ {
+ if (la.kind == 97) {
+ bool negative = false;
+ int exp, sig, size;
+ BigNum exp_val, sig_val, value;
+ //Expected format = float(sign exp_val sig_val) || float<exp sig>(value)
+ Get(); //Skip the float token
+ if (la.val == "(") {
+ Get();
+ if (la.val == "false")
+ negative = false;
+ else if (la.val == "true")
+ negative = true;
+ else
+ throw new FormatException();
+ Get();
+ Expect(12); //,
+ BvLit(out exp_val, out exp);
+ Expect(12);
+ BvLit(out sig_val, out sig);
+ n = new BigFloat(negative, exp_val, sig_val, exp, sig);
+ Expect(10); //)
+ }
+ else if (la.val == "<") {
+ Get();
+ Expect(3);
+ exp = Int32.Parse(t.val);
+ Expect(12);
+ Expect(3);
+ sig = Int32.Parse(t.val);
+ Expect(20); //>
+ Expect(9); //(
+ if (la.kind == 1) { //NaN
+ Get();
+ n = new BigFloat(t.val, exp, sig);
+ }
+ else if (la.kind == 74 || la.kind == 75) { //+ or -
+ Get();
+ String s = t.val;
+ Get();
+ n = new BigFloat(s + t.val, exp, sig);
+ }
+ else {
+ BvLit(out value, out size);
+ n = new BigFloat(value.ToString(), exp, sig);
+ }
+ Expect(10); //)
+ }
+ else {
+ throw new FormatException();
+ }
+ }
+ else {
+ n = BigFloat.ZERO(8, 24);
+ SynErr(137);
+ }
+ }
+ catch (FormatException)
+ {
+ this.SemErr("incorrectly formatted floating point");
+ n = BigFloat.ZERO(8, 24);
+ }
+ }
+
+ void BvLit(out BigNum n, out int m) {
+ Expect(2);
+ int pos = t.val.IndexOf("bv");
+ string a = t.val.Substring(0, pos);
+ string b = t.val.Substring(pos + 2);
+ try {
+ n = BigNum.FromString(a);
+ m = Convert.ToInt32(b);
+ } catch (FormatException) {
+ this.SemErr("incorrectly formatted bitvector");
+ n = BigNum.ZERO;
+ m = 0;
+ }
+
+ }
+
+ void Forall() {
+ if (la.kind == 88) {
+ Get();
+ } else if (la.kind == 89) {
+ Get();
+ } else SynErr(129);
+ }
+
+ void QuantifierBody(IToken/*!*/ q, out List<TypeVariable>/*!*/ typeParams, out List<Variable>/*!*/ ds,
+out QKeyValue kv, out Trigger trig, out Expr/*!*/ body) {
+ Contract.Requires(q != null); Contract.Ensures(Contract.ValueAtReturn(out typeParams) != null); Contract.Ensures(Contract.ValueAtReturn(out ds) != null); Contract.Ensures(Contract.ValueAtReturn(out body) != null);
+ trig = null; typeParams = new List<TypeVariable> ();
+ IToken/*!*/ tok;
+ kv = null;
+ ds = new List<Variable> ();
+
+ if (la.kind == 19) {
+ TypeParams(out tok, out typeParams);
+ if (la.kind == 1 || la.kind == 27) {
+ BoundVars(q, out ds);
+ }
+ } else if (la.kind == 1 || la.kind == 27) {
+ BoundVars(q, out ds);
+ } else SynErr(130);
+ QSep();
+ while (la.kind == 27) {
+ AttributeOrTrigger(ref kv, ref trig);
+ }
+ Expression(out body);
+ }
+
+ void Exists() {
+ if (la.kind == 90) {
+ Get();
+ } else if (la.kind == 91) {
+ Get();
+ } else SynErr(131);
+ }
+
+ void Lambda() {
+ if (la.kind == 92) {
+ Get();
+ } else if (la.kind == 93) {
+ Get();
+ } else SynErr(132);
+ }
+
+ void IfThenElseExpression(out Expr/*!*/ e) {
+ Contract.Ensures(Contract.ValueAtReturn(out e) != null);
+ IToken/*!*/ tok;
+ Expr/*!*/ e0, e1, e2;
+ e = dummyExpr;
+ Expect(40);
+ tok = t;
+ Expression(out e0);
+ Expect(87);
+ Expression(out e1);
+ Expect(41);
+ Expression(out e2);
+ e = new NAryExpr(tok, new IfThenElse(tok), new List<Expr>{ e0, e1, e2 });
+ }
+
+ void CodeExpression(out List<Variable>/*!*/ locals, out List<Block/*!*/>/*!*/ blocks) {
+ Contract.Ensures(Contract.ValueAtReturn(out locals) != null); Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out blocks))); locals = new List<Variable>(); Block/*!*/ b;
+ blocks = new List<Block/*!*/>();
+
+ Expect(85);
+ while (la.kind == 7) {
+ LocalVars(locals);
+ }
+ SpecBlock(out b);
+ blocks.Add(b);
+ while (la.kind == 1) {
+ SpecBlock(out b);
+ blocks.Add(b);
+ }
+ Expect(86);
+ }
+
+ void SpecBlock(out Block/*!*/ b) {
+ Contract.Ensures(Contract.ValueAtReturn(out b) != null); IToken/*!*/ x; IToken/*!*/ y;
+ Cmd c; IToken label;
+ List<Cmd> cs = new List<Cmd>();
+ List<IToken>/*!*/ xs;
+ List<String> ss = new List<String>();
+ b = dummyBlock;
+ Expr/*!*/ e;
+
+ Ident(out x);
+ Expect(11);
+ while (StartOf(8)) {
+ LabelOrCmd(out c, out label);
+ if (c != null) {
+ Contract.Assert(label == null);
+ cs.Add(c);
+ } else {
+ Contract.Assert(label != null);
+ SemErr("SpecBlock's can only have one label");
+ }
+
+ }
+ if (la.kind == 38) {
+ Get();
+ y = t;
+ Idents(out xs);
+ foreach(IToken/*!*/ s in xs){
+ Contract.Assert(s != null);
+ ss.Add(s.val); }
+ b = new Block(x,x.val,cs,new GotoCmd(y,ss));
+
+ } else if (la.kind == 39) {
+ Get();
+ Expression(out e);
+ b = new Block(x,x.val,cs,new ReturnExprCmd(t,e));
+ } else SynErr(133);
+ Expect(8);
+ }
+
+ void AttributeOrTrigger(ref QKeyValue kv, ref Trigger trig) {
+ IToken/*!*/ tok; Expr/*!*/ e; List<Expr>/*!*/ es;
+ string key;
+ List<object/*!*/> parameters; object/*!*/ param;
+
+ Expect(27);
+ tok = t;
+ if (la.kind == 11) {
+ Get();
+ Expect(1);
+ key = t.val; parameters = new List<object/*!*/>();
+ if (StartOf(16)) {
+ AttributeParameter(out param);
+ parameters.Add(param);
+ while (la.kind == 12) {
+ Get();
+ AttributeParameter(out param);
+ parameters.Add(param);
+ }
+ }
+ if (key == "nopats") {
+ if (parameters.Count == 1 && parameters[0] is Expr) {
+ e = (Expr)parameters[0];
+ if(trig==null){
+ trig = new Trigger(tok, false, new List<Expr> { e }, null);
+ } else {
+ trig.AddLast(new Trigger(tok, false, new List<Expr> { e }, null));
+ }
+ } else {
+ this.SemErr("the 'nopats' quantifier attribute expects a string-literal parameter");
+ }
+ } else {
+ if (kv==null) {
+ kv = new QKeyValue(tok, key, parameters, null);
+ } else {
+ kv.AddLast(new QKeyValue(tok, key, parameters, null));
+ }
+ }
+
+ } else if (StartOf(9)) {
+ Expression(out e);
+ es = new List<Expr> { e };
+ while (la.kind == 12) {
+ Get();
+ Expression(out e);
+ es.Add(e);
+ }
+ if (trig==null) {
+ trig = new Trigger(tok, true, es, null);
+ } else {
+ trig.AddLast(new Trigger(tok, true, es, null));
+ }
+
+ } else SynErr(134);
+ Expect(28);
+ }
+
+ void AttributeParameter(out object/*!*/ o) {
+ Contract.Ensures(Contract.ValueAtReturn(out o) != null);
+ o = "error";
+ Expr/*!*/ e;
+
+ if (la.kind == 4) {
+ Get();
+ o = t.val.Substring(1, t.val.Length-2);
+ } else if (StartOf(9)) {
+ Expression(out e);
+ o = e;
+ } else SynErr(135);
+ }
+
+ void QSep() {
+ if (la.kind == 94) {
+ Get();
+ } else if (la.kind == 95) {
+ Get();
+ } else SynErr(136);
+ }
+
+
+
+ public void Parse() {
+ la = new Token();
+ la.val = "";
+ Get();
+ BoogiePL();
+ Expect(0);
+
+ Expect(0);
+ }
+
+ static readonly bool[,]/*!*/ set = { //grid is 17 x 100
+ {T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,T,x,x, x,T,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,T,x,x, x,x,x,x, x,T,x,x, x,x,T,T, T,T,x,T, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x},
+ {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,x,x,x, x,x,x,x, x,T,x,x, x,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x},
+ {x,T,x,x, x,x,x,x, x,T,x,x, x,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x},
+ {x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,T, T,x,T,x, x,T,T,T, T,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,T,T,T, x,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
+ {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,T,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,T,T,T, x,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x},
+ {x,T,T,T, x,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x},
+ {x,T,T,T, T,T,T,x, x,T,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x}
+
+ };
+} // end Parser
+
+
+public class Errors {
+ public int count = 0; // number of errors detected
+ public System.IO.TextWriter/*!*/ errorStream = Console.Out; // error messages go to this stream
+ public string errMsgFormat = "{0}({1},{2}): error: {3}"; // 0=filename, 1=line, 2=column, 3=text
+ public string warningMsgFormat = "{0}({1},{2}): warning: {3}"; // 0=filename, 1=line, 2=column, 3=text
+
+ public void SynErr(string filename, int line, int col, int n) {
+ SynErr(filename, line, col, GetSyntaxErrorString(n));
+ }
+
+ public virtual void SynErr(string filename, int line, int col, string/*!*/ msg) {
+ Contract.Requires(msg != null);
+ errorStream.WriteLine(errMsgFormat, filename, line, col, msg);
+ count++;
+ }
+
+ /// <summary>
+ /// Returns a string corresponding to the syntax error of the given type
+ /// Note that many of these errors (0-98) correspond to token types (e.g. the la token)
+ /// </summary>
+ /// <param name="n"></param>
+ /// <returns></returns>
+ string GetSyntaxErrorString(int n) {
+ string s;
+ switch (n) {
+ case 0: s = "EOF expected"; break;
+ case 1: s = "ident expected"; break;
+ case 2: s = "bvlit expected"; break;
+ case 3: s = "digits expected"; break;
+ case 4: s = "string expected"; break;
+ case 5: s = "decimal expected"; break;
+ case 6: s = "float expected"; break;
+ case 7: s = "\"var\" expected"; break;
+ case 8: s = "\";\" expected"; break;
+ case 9: s = "\"(\" expected"; break;
+ case 10: s = "\")\" expected"; break;
+ case 11: s = "\":\" expected"; break;
+ case 12: s = "\",\" expected"; break;
+ case 13: s = "\"where\" expected"; break;
+ case 14: s = "\"int\" expected"; break;
+ case 15: s = "\"real\" expected"; break;
+ case 16: s = "\"bool\" expected"; break;
+ case 17: s = "\"[\" expected"; break;
+ case 18: s = "\"]\" expected"; break;
+ case 19: s = "\"<\" expected"; break;
+ case 20: s = "\">\" expected"; break;
+ case 21: s = "\"const\" expected"; break;
+ case 22: s = "\"unique\" expected"; break;
+ case 23: s = "\"extends\" expected"; break;
+ case 24: s = "\"complete\" expected"; break;
+ case 25: s = "\"function\" expected"; break;
+ case 26: s = "\"returns\" expected"; break;
+ case 27: s = "\"{\" expected"; break;
+ case 28: s = "\"}\" expected"; break;
+ case 29: s = "\"axiom\" expected"; break;
+ case 30: s = "\"type\" expected"; break;
+ case 31: s = "\"=\" expected"; break;
+ case 32: s = "\"procedure\" expected"; break;
+ case 33: s = "\"implementation\" expected"; break;
+ case 34: s = "\"modifies\" expected"; break;
+ case 35: s = "\"free\" expected"; break;
+ case 36: s = "\"requires\" expected"; break;
+ case 37: s = "\"ensures\" expected"; break;
+ case 38: s = "\"goto\" expected"; break;
+ case 39: s = "\"return\" expected"; break;
+ case 40: s = "\"if\" expected"; break;
+ case 41: s = "\"else\" expected"; break;
+ case 42: s = "\"while\" expected"; break;
+ case 43: s = "\"invariant\" expected"; break;
+ case 44: s = "\"*\" expected"; break;
+ case 45: s = "\"break\" expected"; break;
+ case 46: s = "\"assert\" expected"; break;
+ case 47: s = "\"assume\" expected"; break;
+ case 48: s = "\"havoc\" expected"; break;
+ case 49: s = "\"yield\" expected"; break;
+ case 50: s = "\":=\" expected"; break;
+ case 51: s = "\"async\" expected"; break;
+ case 52: s = "\"call\" expected"; break;
+ case 53: s = "\"par\" expected"; break;
+ case 54: s = "\"|\" expected"; break;
+ case 55: s = "\"<==>\" expected"; break;
+ case 56: s = "\"\\u21d4\" expected"; break;
+ case 57: s = "\"==>\" expected"; break;
+ case 58: s = "\"\\u21d2\" expected"; break;
+ case 59: s = "\"<==\" expected"; break;
+ case 60: s = "\"\\u21d0\" expected"; break;
+ case 61: s = "\"&&\" expected"; break;
+ case 62: s = "\"\\u2227\" expected"; break;
+ case 63: s = "\"||\" expected"; break;
+ case 64: s = "\"\\u2228\" expected"; break;
+ case 65: s = "\"==\" expected"; break;
+ case 66: s = "\"<=\" expected"; break;
+ case 67: s = "\">=\" expected"; break;
+ case 68: s = "\"!=\" expected"; break;
+ case 69: s = "\"<:\" expected"; break;
+ case 70: s = "\"\\u2260\" expected"; break;
+ case 71: s = "\"\\u2264\" expected"; break;
+ case 72: s = "\"\\u2265\" expected"; break;
+ case 73: s = "\"++\" expected"; break;
+ case 74: s = "\"+\" expected"; break;
+ case 75: s = "\"-\" expected"; break;
+ case 76: s = "\"div\" expected"; break;
+ case 77: s = "\"mod\" expected"; break;
+ case 78: s = "\"/\" expected"; break;
+ case 79: s = "\"**\" expected"; break;
+ case 80: s = "\"!\" expected"; break;
+ case 81: s = "\"\\u00ac\" expected"; break;
+ case 82: s = "\"false\" expected"; break;
+ case 83: s = "\"true\" expected"; break;
+ case 84: s = "\"old\" expected"; break;
+ case 85: s = "\"|{\" expected"; break;
+ case 86: s = "\"}|\" expected"; break;
+ case 87: s = "\"then\" expected"; break;
+ case 88: s = "\"forall\" expected"; break;
+ case 89: s = "\"\\u2200\" expected"; break;
+ case 90: s = "\"exists\" expected"; break;
+ case 91: s = "\"\\u2203\" expected"; break;
+ case 92: s = "\"lambda\" expected"; break;
+ case 93: s = "\"\\u03bb\" expected"; break;
+ case 94: s = "\"::\" expected"; break;
+ case 95: s = "\"\\u2022\" expected"; break;
+ case 96: s = "??? expected"; break;
+ case 97: s = "fp expected"; break;
+ case 98: s = "\"float\" expected"; break;
+ case 99: s = "invalid Function"; break;
+ case 100: s = "invalid Function"; break;
+ case 101: s = "invalid Procedure"; break;
+ case 102: s = "invalid Type"; break;
+ case 103: s = "invalid TypeAtom"; break;
+ case 104: s = "invalid TypeArgs"; break;
+ case 105: s = "invalid Spec"; break;
+ case 106: s = "invalid SpecPrePost"; break;
+ case 107: s = "invalid LabelOrCmd"; break;
+ case 108: s = "invalid StructuredCmd"; break;
+ case 109: s = "invalid TransferCmd"; break;
+ case 110: s = "invalid IfCmd"; break;
+ case 111: s = "invalid Guard"; break;
+ case 112: s = "invalid LabelOrAssign"; break;
+ case 113: s = "invalid CallParams"; break;
+ case 114: s = "invalid EquivOp"; break;
+ case 115: s = "invalid ImpliesOp"; break;
+ case 116: s = "invalid ExpliesOp"; break;
+ case 117: s = "invalid AndOp"; break;
+ case 118: s = "invalid OrOp"; break;
+ case 119: s = "invalid RelOp"; break;
+ case 120: s = "invalid AddOp"; break;
+ case 121: s = "invalid MulOp"; break;
+ case 122: s = "invalid UnaryExpression"; break;
+ case 123: s = "invalid NegOp"; break;
+ case 124: s = "invalid CoercionExpression"; break;
+ case 125: s = "invalid AtomExpression"; break;
+ case 126: s = "invalid AtomExpression"; break;
+ case 127: s = "invalid AtomExpression"; break;
+ case 128: s = "invalid Dec"; break;
+ case 129: s = "invalid Forall"; break;
+ case 130: s = "invalid QuantifierBody"; break;
+ case 131: s = "invalid Exists"; break;
+ case 132: s = "invalid Lambda"; break;
+ case 133: s = "invalid SpecBlock"; break;
+ case 134: s = "invalid AttributeOrTrigger"; break;
+ case 135: s = "invalid AttributeParameter"; break;
+ case 136: s = "invalid QSep"; break;
+ case 137: s = "invalid Float"; break;
+
+ default: s = "error " + n; break;
+ }
+ return s;
+ }
+
+ public void SemErr(IToken/*!*/ tok, string/*!*/ msg) { // semantic errors
+ Contract.Requires(tok != null);
+ Contract.Requires(msg != null);
+ SemErr(tok.filename, tok.line, tok.col, msg);
+ }
+
+ public virtual void SemErr(string filename, int line, int col, string/*!*/ msg) {
+ Contract.Requires(msg != null);
+ errorStream.WriteLine(errMsgFormat, filename, line, col, msg);
+ count++;
+ }
+
+ public void Warning(IToken/*!*/ tok, string/*!*/ msg) { // warnings
+ Contract.Requires(tok != null);
+ Contract.Requires(msg != null);
+ Warning(tok.filename, tok.line, tok.col, msg);
+ }
+
+ public virtual void Warning(string filename, int line, int col, string msg) {
+ Contract.Requires(msg != null);
+ errorStream.WriteLine(warningMsgFormat, filename, line, col, msg);
+ }
+} // Errors
+
+
+public class FatalError: Exception {
+ public FatalError(string m): base(m) {}
+}
+
+
} \ No newline at end of file
diff --git a/Source/Core/Readme.txt b/Source/Core/Readme.txt
index 1b0606a6..dfdd8050 100644
--- a/Source/Core/Readme.txt
+++ b/Source/Core/Readme.txt
@@ -1,61 +1,61 @@
-// ----------------------------------------------------------------------------
-// Boogie-PL
-//
-// Readme
-// ws 5/9/03
-// ----------------------------------------------------------------------------
-
-
-This directory cointains the Boogie Procedural Language (BoogiePL)
-implementataion and "1" sample program.
-
-
-Scanner and parser are generated with Coco (ann LL1 parser generator for EBNFs)
-(see http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/CSharp/)
-
- The input file is
- BoogiePL.atg
- then simply call
- ..\Coco\bin\Debug\Coco.exe BoogiePL.atg
- it then uses (as input)
- Scanner.frame
- Parser.frame
- as templates to generate an LL1 parser into
- Scanner.cs
- Parser.cs
- as output
-
-The Csharp excutable then contains
-
- BoogiePL.cs -- main program
- Absy -- abstract syntax for BoogiePL
- Error.cs -- error handling (contains still some oldstuff)
- Parser.cs -- generated parser
- Scanner.cs -- generated scanner
- PureCollections.cs -- sets/maps/tuples/ (contains still some oldstuff)
-
-The directory Samples contains one parsing example
- Parsing1.pl
-Please check it for the syntax, alternatively consult BoogiePL.atg
-
-Here is its output:
- C:\Boogie> bin\debug\Boogiepl.exe samples\Parsing1.pl
-
- Boogie Procedural Language Version 0.1 Copyright (c) Microsoft 2003
- Parsing samples\Parsing1.pl <<<=== here is what is does
- 0 errors detected
-
-Things left to do:
-
- BoogiePL needs a tiny context analysis
- checking names, updates, arities, OLD, etc.
- (ws will do until 5/8)
-
- BoogiePL Absy might be too flexible
- simplify (if one things so..) (Mike/Rustan will do)
-
- BoogiePL needs more examples/experiences
- (all of us..)
-
-
-
+// ----------------------------------------------------------------------------
+// Boogie-PL
+//
+// Readme
+// ws 5/9/03
+// ----------------------------------------------------------------------------
+
+
+This directory cointains the Boogie Procedural Language (BoogiePL)
+implementataion and "1" sample program.
+
+
+Scanner and parser are generated with Coco (ann LL1 parser generator for EBNFs)
+(see http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/CSharp/)
+
+ The input file is
+ BoogiePL.atg
+ then simply call
+ ..\Coco\bin\Debug\Coco.exe BoogiePL.atg
+ it then uses (as input)
+ Scanner.frame
+ Parser.frame
+ as templates to generate an LL1 parser into
+ Scanner.cs
+ Parser.cs
+ as output
+
+The Csharp excutable then contains
+
+ BoogiePL.cs -- main program
+ Absy -- abstract syntax for BoogiePL
+ Error.cs -- error handling (contains still some oldstuff)
+ Parser.cs -- generated parser
+ Scanner.cs -- generated scanner
+ PureCollections.cs -- sets/maps/tuples/ (contains still some oldstuff)
+
+The directory Samples contains one parsing example
+ Parsing1.pl
+Please check it for the syntax, alternatively consult BoogiePL.atg
+
+Here is its output:
+ C:\Boogie> bin\debug\Boogiepl.exe samples\Parsing1.pl
+
+ Boogie Procedural Language Version 0.1 Copyright (c) Microsoft 2003
+ Parsing samples\Parsing1.pl <<<=== here is what is does
+ 0 errors detected
+
+Things left to do:
+
+ BoogiePL needs a tiny context analysis
+ checking names, updates, arities, OLD, etc.
+ (ws will do until 5/8)
+
+ BoogiePL Absy might be too flexible
+ simplify (if one things so..) (Mike/Rustan will do)
+
+ BoogiePL needs more examples/experiences
+ (all of us..)
+
+
+
diff --git a/Source/Core/ResolutionContext.cs b/Source/Core/ResolutionContext.cs
index bf1a5629..279e00bf 100644
--- a/Source/Core/ResolutionContext.cs
+++ b/Source/Core/ResolutionContext.cs
@@ -1,629 +1,641 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.Boogie {
- using System.Collections;
- using System.Collections.Generic;
- using System;
- using System.Linq;
- using System.Diagnostics.Contracts;
-
- [ContractClass(typeof(IErrorSinkContracts))]
- public interface IErrorSink {
- void Error(IToken/*!*/ tok, string/*!*/ msg);
- }
- [ContractClassFor(typeof(IErrorSink))]
- public abstract class IErrorSinkContracts : IErrorSink {
- #region IErrorSink Members
- public void Error(IToken tok, string msg) {
- Contract.Requires(tok != null);
- Contract.Requires(msg != null);
- throw new NotImplementedException();
- }
- #endregion
- }
-
- public class CheckingContext {
- // ------------------------------ Error counting ------------------------------
-
- IErrorSink errorSink;
- int errors;
-
- public CheckingContext(IErrorSink errorSink) {
- this.errorSink = errorSink;
- }
-
- public int ErrorCount {
- get {
- return errors;
- }
- set {
- errors = value;
- }
- }
-
- public void Error(Absy subject, string msg, params object[] args) {
- Contract.Requires(args != null);
- Contract.Requires(msg != null);
- Contract.Requires(subject != null);
- Error(subject.tok, msg, args);
- }
-
- public virtual void Error(IToken tok, string msg) {
- Contract.Requires(msg != null);
- Contract.Requires(tok != null);
- errors++;
- if (errorSink == null) {
- ConsoleColor col = Console.ForegroundColor;
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("{0}({1},{2}): Error: {3}",
- tok.filename, tok.line, tok.col - 1,
- msg);
- Console.ForegroundColor = col;
- } else {
- errorSink.Error(tok, msg);
- }
- }
-
- private string Format(string msg, params object[] args) {
- Contract.Requires(msg != null);
- Contract.Ensures(Contract.Result<string>() != null);
- if (System.Type.GetType("Mono.Runtime") != null) { // MONO
- // something in mono seems to be broken so that calling
- // NamedDeclarations.ToString (and similar ToString methods)
- // causes a stack overflow. We therefore convert those to
- // strings by hand
- object[] fixedArgs = new object[cce.NonNull(args).Length];
- for (int i = 0; i < args.Length; ++i) {
- if (args[i] is NamedDeclaration) {
- fixedArgs[i] = cce.NonNull((NamedDeclaration)args[i]).Name;
- } else if (args[i] is Type) {
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
- cce.NonNull((Type)args[i]).Emit(stream);
- }
- fixedArgs[i] = buffer.ToString();
- } else if (args[i] is Expr) {
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
- cce.NonNull((Expr/*!*/)args[i]).Emit(stream, 0, false);
- }
- fixedArgs[i] = buffer.ToString();
- } else {
- fixedArgs[i] = args[i];
- }
- }
- args = fixedArgs;
- }
- return string.Format(msg, args);
- }
-
- public void Error(IToken tok, string msg, params object[] args) {
- Contract.Requires(msg != null);
- Contract.Requires(tok != null);
- Error(tok, Format(msg, args));
- }
-
- public void Warning(Absy subject, string msg, params object[] args) {
- Contract.Requires(args != null);
- Contract.Requires(msg != null);
- Contract.Requires(subject != null);
- Warning(subject.tok, msg, args);
- }
-
- public virtual void Warning(IToken tok, string msg) {
- Contract.Requires(msg != null);
- Contract.Requires(tok != null);
- // warnings are currently always written to the console
- ConsoleColor col = Console.ForegroundColor;
- Console.ForegroundColor = ConsoleColor.DarkYellow;
- Console.WriteLine("{0}({1},{2}): Warning: {3}",
- tok.filename, tok.line, tok.col - 1,
- msg);
- Console.ForegroundColor = col;
- }
-
- public void Warning(IToken tok, string msg, params object[] args) {
- Contract.Requires(msg != null);
- Contract.Requires(tok != null);
- Warning(tok, Format(msg, args));
- }
- }
-
- public class ResolutionContext : CheckingContext {
- public ResolutionContext(IErrorSink errorSink)
- : base(errorSink) {
- }
-
- // ------------------------------ Boogie 2 Types -------------------------
-
- // user-defined types, which can be either TypeCtorDecl or TypeSynonymDecl
- Hashtable /*string->NamedDeclaration*//*!*/ types = new Hashtable /*string->NamedDeclaration*/ ();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(types != null);
- Contract.Invariant(cce.NonNullElements(typeBinders));
- Contract.Invariant(varContext != null);
- Contract.Invariant(funcdures != null);
- }
-
-
- /// <summary>
- /// Checks if name coincides with the name of a bitvector type. If so, reports an error and
- /// returns true; otherwise, returns false.
- /// </summary>
- private bool CheckBvNameClashes(Absy absy, string name) {
- Contract.Requires(name != null);
- Contract.Requires(absy != null);
- if (name.StartsWith("bv") && name.Length > 2) {
- for (int i = 2; i < name.Length; ++i)
- if (!char.IsDigit(name[i]))
- return false;
- Error(absy, "type name: {0} is registered for bitvectors", name);
- return true;
- }
- return false;
- }
-
- public void AddType(NamedDeclaration td) {
- Contract.Requires(td != null);
- Contract.Requires((td is TypeCtorDecl) || (td is TypeSynonymDecl));
- Contract.Requires(td.Name != null);
-
- string name = td.Name;
- if (CheckBvNameClashes(td, name))
- return; // error has already been reported
-
- var previous = (NamedDeclaration)types[name];
- if (previous == null) {
- types.Add(name, td);
- } else {
- var r = (NamedDeclaration)SelectNonExtern(td, previous);
- if (r == null) {
- Error(td, "more than one declaration of type name: {0}", name);
- } else {
- types[name] = r;
- }
- }
- }
-
- /// <summary>
- /// Returns the declaration of the named type, or null if
- /// no such type is declared. Also return null if the type
- /// declared with the given name is not a constructor but a
- /// type synonym
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public TypeCtorDecl LookUpType(string name) {
- Contract.Requires(name != null);
- return types[name] as TypeCtorDecl;
- }
-
- public TypeSynonymDecl LookUpTypeSynonym(string name) {
- Contract.Requires(name != null);
- return types[name] as TypeSynonymDecl;
- }
-
- // ------------------------------ Boogie 2 Type Binders ------------------------------
-
- List<TypeVariable/*!*/>/*!*/ typeBinders = new List<TypeVariable/*!*/>(5);
-
- public void AddTypeBinder(TypeVariable td) {
- Contract.Requires(td != null);
- if (CheckBvNameClashes(td, td.Name)) {
- return;
- }
- if (types.ContainsKey(td.Name)) {
- Error(td, "name is already reserved for type constructor: {0}", td.Name);
- return;
- }
- for (int i = 0; i < typeBinders.Count; i++) {
- if (typeBinders[i].Name == td.Name) {
- Error(td, "more than one declaration of type variable: {0}", td.Name);
- return;
- }
- }
- typeBinders.Add(td);
- }
-
- public int TypeBinderState {
- get {
- return typeBinders.Count;
- }
- set {
- typeBinders.RemoveRange(value, typeBinders.Count - value);
- }
- }
-
- /// <summary>
- /// Returns the declaration of the named type binder, or null if
- /// no such binder is declared.
- /// </summary>
- public TypeVariable LookUpTypeBinder(string name) {
- Contract.Requires(name != null);
- for (int i = typeBinders.Count; 0 <= --i; ) {
- TypeVariable/*!*/ td = typeBinders[i];
- Contract.Assert(td != null);
- if (td.Name == name) {
- return td;
- }
- }
- return null; // not present
- }
-
- // ------------------------------ Variables ------------------------------
-
- class VarContextNode {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(VarSymbols != null);
- }
-
- public readonly Hashtable /*string->Variable*//*!*/ VarSymbols = new Hashtable /*string->Variable*/();
- public /*maybe null*/ VarContextNode ParentContext;
- public readonly bool Opaque;
- readonly ISet<string> assignedAssumptionVariables = new HashSet<string>();
-
- public bool HasVariableBeenAssigned(string name)
- {
- Contract.Requires(name != null);
-
- if (assignedAssumptionVariables.Contains(name))
- {
- return true;
- }
- else if (ParentContext != null)
- {
- return ParentContext.HasVariableBeenAssigned(name);
- }
- else
- {
- return false;
- }
- }
-
- public bool MarkVariableAsAssigned(string name)
- {
- Contract.Requires(name != null);
-
- if (VarSymbols.Contains(name))
- {
- if (assignedAssumptionVariables.Contains(name))
- {
- return false;
- }
- assignedAssumptionVariables.Add(name);
- return true;
- }
- else if (ParentContext != null)
- {
- return ParentContext.MarkVariableAsAssigned(name);
- }
- else
- {
- return false;
- }
- }
-
- public VarContextNode(/*maybe null*/ VarContextNode parentContext, bool opaque) {
- ParentContext = parentContext;
- Opaque = opaque;
- }
- }
-
- // symbolic constants, global variables, local variables, formals, expression-bound variables
- VarContextNode/*!*/ varContext = new VarContextNode(null, false);
-
- /// <summary>
- /// Adds a variable context.
- /// </summary>
- public void PushVarContext() {
- varContext = new VarContextNode(varContext, false);
- }
-
- /// <summary>
- /// Adds an opaque variable context, that is, one that blocks all previously pushed contexts.
- /// </summary>
- public void PushOpaqueVarContext() {
- varContext = new VarContextNode(varContext, true);
- }
-
- /// <summary>
- /// Requires there to be more than one variable context.
- /// </summary>
- public void PopVarContext() {
- Contract.Assert(varContext.ParentContext != null);
- varContext = varContext.ParentContext;
- }
-
- public void AddVariable(Variable var, bool global) {
- Contract.Requires(var != null);
- var previous = FindVariable(cce.NonNull(var.Name), !global);
- if (previous == null) {
- varContext.VarSymbols.Add(var.Name, var);
- } else {
- var r = (Variable)SelectNonExtern(var, previous);
- if (r == null) {
- Error(var, "more than one declaration of variable name: {0}", var.Name);
- } else {
- varContext.VarSymbols[var.Name] = r;
- }
- }
- }
-
- /// <summary>
- /// Returns the declaration of the named variable, or null if
- /// no such variable is declared.
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public Variable LookUpVariable(string name) {
- Contract.Requires(name != null);
- return FindVariable(name, false);
- }
-
- Variable FindVariable(string name, bool ignoreTopLevelVars) {
- Contract.Requires(name != null);
- VarContextNode c = varContext;
- bool lookOnlyForConstants = false;
- do {
- if (ignoreTopLevelVars && c.ParentContext == null) {
- // this is the top level and we're asked to ignore the top level; hence, we're done
- break;
- }
-
- Variable var = (Variable)c.VarSymbols[name];
- if (var != null && (!lookOnlyForConstants || var is Constant)) {
- return var;
- }
- // not at this level
-
- if (c.Opaque) {
- // from here on, only constants can be looked up
- lookOnlyForConstants = true;
- }
- c = c.ParentContext;
- } while (c != null);
-
- // not present in the relevant levels
- return null;
- }
-
- public bool HasVariableBeenAssigned(string name)
- {
- Contract.Requires(name != null);
-
- return varContext.HasVariableBeenAssigned(name);
- }
-
- public void MarkVariableAsAssigned(string name)
- {
- Contract.Requires(name != null);
-
- var success = varContext.MarkVariableAsAssigned(name);
- Contract.Assume(success);
- }
-
- Hashtable axioms = new Hashtable();
-
- public void AddAxiom(Axiom axiom) {
- string axiomName = QKeyValue.FindStringAttribute(axiom.Attributes, "name");
- if (axiomName == null)
- return;
- var previous = (Axiom)axioms[axiomName];
- if (previous == null) {
- axioms.Add(axiomName, axiom);
- }
- else {
- var r = (Axiom)SelectNonExtern(axiom, previous);
- if (r == null) {
- Error(axiom, "more than one declaration of axiom name: {0}", axiomName);
- }
- else {
- axioms[axiomName] = r;
- }
- }
- }
-
- // ------------------------------ Functions/Procedures ------------------------------
-
- // uninterpreted function symbols, procedures
- Hashtable /*string->DeclWithFormals*//*!*/ funcdures = new Hashtable /*string->DeclWithFormals*/ ();
-
- public void AddProcedure(DeclWithFormals proc) {
- Contract.Requires(proc != null);
- Contract.Requires(proc.Name != null);
-
- string name = proc.Name;
- var previous = (DeclWithFormals)funcdures[name];
- if (previous == null) {
- funcdures.Add(name, proc);
- } else {
- var r = (DeclWithFormals)SelectNonExtern(proc, previous);
- if (r == null) {
- Error(proc, "more than one declaration of function/procedure name: {0}", name);
- } else {
- funcdures[name] = r;
- }
- }
- }
-
- /// <summary>
- /// If both "a" and "b" have an ":extern" attribute, returns either one.
- /// If one of "a" and "b" has an ":extern" attribute, returns that one.
- /// If neither of "a" and "b" has an ":extern" attribute, returns null.
- /// If a non-value value is returned, this method also adds the ":ignore"
- /// attribute to the declaration NOT returned.
- /// </summary>
- Declaration SelectNonExtern(Declaration a, Declaration b) {
- Contract.Requires(a != null);
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<Declaration>() == null || Contract.Result<Declaration>() == a || Contract.Result<Declaration>() == b);
-
- Declaration ignore, keep;
- if (QKeyValue.FindBoolAttribute(a.Attributes, "extern")) {
- ignore = a;
- keep = b;
- } else if (QKeyValue.FindBoolAttribute(b.Attributes, "extern")) {
- ignore = b;
- keep = a;
- } else {
- return null;
- }
- // prepend :ignore attribute
- ignore.Attributes = new QKeyValue(ignore.tok, "ignore", new List<object/*!*/>(), ignore.Attributes);
- return keep;
- }
-
- /// <summary>
- /// Returns the declaration of the named function/procedure, or null if
- /// no such function or procedure is declared.
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public DeclWithFormals LookUpProcedure(string name) {
- Contract.Requires(name != null);
- return (DeclWithFormals)funcdures[name];
- }
-
- // ------------------------------ Blocks ------------------------------
-
- class ProcedureContext {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Blocks != null);
- }
-
- public readonly Hashtable/*!*/ /*string->Block!*/ Blocks;
- public readonly ProcedureContext Next;
- public ProcedureContext(ProcedureContext next) {
- Blocks = new Hashtable /*string->Block!*/ ();
- Next = next;
- }
- }
- /*maybe null*/
- ProcedureContext procedureContext; // stack of procedure contexts
- public bool HasProcedureContext {
- get {
- return procedureContext != null;
- }
- }
-
- /// <summary>
- /// Pushes a new procedure context.
- /// </summary>
- public void PushProcedureContext() {
- Contract.Ensures(HasProcedureContext);
- procedureContext = new ProcedureContext(procedureContext);
- }
-
- /// <summary>
- /// Requires there to be a procedure context. Pops it.
- /// </summary>
- public void PopProcedureContext() {
- Contract.Requires(HasProcedureContext);
- Contract.Assert(procedureContext != null); // follows from precondition
- procedureContext = procedureContext.Next;
- }
-
- /// <summary>
- /// Requires there to be a procedure context.
- /// </summary>
- /// <param name="block"></param>
- public void AddBlock(Block block) {
- Contract.Requires(block != null);
- Contract.Requires(HasProcedureContext);
- Contract.Assert(procedureContext != null); // follows from precondition
- Hashtable/*!*/ /*string->Block!*/ blocks = procedureContext.Blocks;
- Contract.Assert(blocks != null);
- if (blocks[block.Label] != null) {
- Error(block, "more than one declaration of block name: {0}", block.Label);
- } else {
- blocks.Add(block.Label, block);
- }
- }
-
- /// <summary>
- /// Requires there to be a procedure context.
- /// Returns the declaration of the named block, or null if
- /// no such block is declared.
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public Block LookUpBlock(string name) {
- Contract.Requires(name != null);
- Contract.Requires(HasProcedureContext);
- Contract.Assert(procedureContext != null); // follows from precondition
- Hashtable/*!*/ /*string->Block!*/ blocks = procedureContext.Blocks;
- Contract.Assert(blocks != null);
- return (Block)blocks[name];
- }
-
- // ------------------------------ Flags ------------------------------
-
- public enum State {
- StateLess,
- Single,
- Two
- }
- State stateMode = State.Single;
-
- /// <summary>
- /// To increase our confidence in that the caller knows what it's doing, we only allow
- /// the state mode to be changed in and out of the State.Single mode.
- /// </summary>
- public State StateMode {
- get {
- return stateMode;
- }
- set {
- Contract.Assert(value != stateMode);
- Contract.Assert(stateMode == State.Single || value == State.Single);
- cce.BeginExpose(this);
- {
- stateMode = value;
- }
- cce.EndExpose();
- }
- }
-
- bool triggerMode = false;
-
- /// <summary>
- /// Setting TriggerMode is allowed only if the setting has the effect of toggling the
- /// boolean. That is, TriggerMode can be set to true only if it previously was false,
- /// and TriggerMode can be set to false only if it previously was true.
- /// </summary>
- public bool TriggerMode {
- get {
- return triggerMode;
- }
- set {
- Contract.Assert(triggerMode != value);
- cce.BeginExpose(this);
- {
- triggerMode = value;
- }
- cce.EndExpose();
- }
- }
- }
-
- public class TypecheckingContext : CheckingContext {
- public List<IdentifierExpr> Frame; // used in checking the assignment targets of implementation bodies
- public bool Yields;
-
- public TypecheckingContext(IErrorSink errorSink)
- : base(errorSink) {
- }
-
- public bool InFrame(Variable v) {
- Contract.Requires(v != null);
- Contract.Requires(Frame != null);
- return Frame.Any(f => f.Decl == v);
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.Boogie {
+ using System.Collections;
+ using System.Collections.Generic;
+ using System;
+ using System.Linq;
+ using System.Diagnostics.Contracts;
+
+ [ContractClass(typeof(IErrorSinkContracts))]
+ public interface IErrorSink {
+ void Error(IToken/*!*/ tok, string/*!*/ msg);
+ }
+ [ContractClassFor(typeof(IErrorSink))]
+ public abstract class IErrorSinkContracts : IErrorSink {
+ #region IErrorSink Members
+ public void Error(IToken tok, string msg) {
+ Contract.Requires(tok != null);
+ Contract.Requires(msg != null);
+ throw new NotImplementedException();
+ }
+ #endregion
+ }
+
+ public class CheckingContext {
+ // ------------------------------ Error counting ------------------------------
+
+ IErrorSink errorSink;
+ int errors;
+
+ public CheckingContext(IErrorSink errorSink) {
+ this.errorSink = errorSink;
+ }
+
+ public int ErrorCount {
+ get {
+ return errors;
+ }
+ set {
+ errors = value;
+ }
+ }
+
+ public void Error(Absy subject, string msg, params object[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(msg != null);
+ Contract.Requires(subject != null);
+ Error(subject.tok, msg, args);
+ }
+
+ public virtual void Error(IToken tok, string msg) {
+ Contract.Requires(msg != null);
+ Contract.Requires(tok != null);
+ errors++;
+ if (errorSink == null) {
+ ConsoleColor col = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("{0}({1},{2}): Error: {3}",
+ tok.filename, tok.line, tok.col - 1,
+ msg);
+ Console.ForegroundColor = col;
+ } else {
+ errorSink.Error(tok, msg);
+ }
+ }
+
+ private string Format(string msg, params object[] args) {
+ Contract.Requires(msg != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ if (System.Type.GetType("Mono.Runtime") != null) { // MONO
+ // something in mono seems to be broken so that calling
+ // NamedDeclarations.ToString (and similar ToString methods)
+ // causes a stack overflow. We therefore convert those to
+ // strings by hand
+ object[] fixedArgs = new object[cce.NonNull(args).Length];
+ for (int i = 0; i < args.Length; ++i) {
+ if (args[i] is NamedDeclaration) {
+ fixedArgs[i] = cce.NonNull((NamedDeclaration)args[i]).Name;
+ } else if (args[i] is Type) {
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
+ cce.NonNull((Type)args[i]).Emit(stream);
+ }
+ fixedArgs[i] = buffer.ToString();
+ } else if (args[i] is Expr) {
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
+ cce.NonNull((Expr/*!*/)args[i]).Emit(stream, 0, false);
+ }
+ fixedArgs[i] = buffer.ToString();
+ } else {
+ fixedArgs[i] = args[i];
+ }
+ }
+ args = fixedArgs;
+ }
+ return string.Format(msg, args);
+ }
+
+ public void Error(IToken tok, string msg, params object[] args) {
+ Contract.Requires(msg != null);
+ Contract.Requires(tok != null);
+ Error(tok, Format(msg, args));
+ }
+
+ public void Warning(Absy subject, string msg, params object[] args) {
+ Contract.Requires(args != null);
+ Contract.Requires(msg != null);
+ Contract.Requires(subject != null);
+ Warning(subject.tok, msg, args);
+ }
+
+ public virtual void Warning(IToken tok, string msg) {
+ Contract.Requires(msg != null);
+ Contract.Requires(tok != null);
+ // warnings are currently always written to the console
+ ConsoleColor col = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.DarkYellow;
+ Console.WriteLine("{0}({1},{2}): Warning: {3}",
+ tok.filename, tok.line, tok.col - 1,
+ msg);
+ Console.ForegroundColor = col;
+ }
+
+ public void Warning(IToken tok, string msg, params object[] args) {
+ Contract.Requires(msg != null);
+ Contract.Requires(tok != null);
+ Warning(tok, Format(msg, args));
+ }
+ }
+
+ public class ResolutionContext : CheckingContext {
+ public ResolutionContext(IErrorSink errorSink)
+ : base(errorSink) {
+ }
+
+ // ------------------------------ Boogie 2 Types -------------------------
+
+ // user-defined types, which can be either TypeCtorDecl or TypeSynonymDecl
+ Hashtable /*string->NamedDeclaration*//*!*/ types = new Hashtable /*string->NamedDeclaration*/ ();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(types != null);
+ Contract.Invariant(cce.NonNullElements(typeBinders));
+ Contract.Invariant(varContext != null);
+ Contract.Invariant(funcdures != null);
+ }
+
+
+ /// <summary>
+ /// Checks if name coincides with the name of a bitvector type. If so, reports an error and
+ /// returns true; otherwise, returns false.
+ /// </summary>
+ private bool CheckBvNameClashes(Absy absy, string name) {
+ Contract.Requires(name != null);
+ Contract.Requires(absy != null);
+ if (name.StartsWith("bv") && name.Length > 2) {
+ for (int i = 2; i < name.Length; ++i)
+ if (!char.IsDigit(name[i]))
+ return false;
+ Error(absy, "type name: {0} is registered for bitvectors", name);
+ return true;
+ }
+ return false;
+ }
+
+ public void AddType(NamedDeclaration td) {
+ Contract.Requires(td != null);
+ Contract.Requires((td is TypeCtorDecl) || (td is TypeSynonymDecl));
+ Contract.Requires(td.Name != null);
+
+ string name = td.Name;
+ if (CheckBvNameClashes(td, name))
+ return; // error has already been reported
+
+ var previous = (NamedDeclaration)types[name];
+ if (previous == null) {
+ types.Add(name, td);
+ } else {
+ var r = (NamedDeclaration)SelectNonExtern(td, previous);
+ if (r == null) {
+ Error(td, "more than one declaration of type name: {0}", name);
+ } else {
+ types[name] = r;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Returns the declaration of the named type, or null if
+ /// no such type is declared. Also return null if the type
+ /// declared with the given name is not a constructor but a
+ /// type synonym
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public TypeCtorDecl LookUpType(string name) {
+ Contract.Requires(name != null);
+ return types[name] as TypeCtorDecl;
+ }
+
+ public TypeSynonymDecl LookUpTypeSynonym(string name) {
+ Contract.Requires(name != null);
+ return types[name] as TypeSynonymDecl;
+ }
+
+ // ------------------------------ Boogie 2 Type Binders ------------------------------
+
+ List<TypeVariable/*!*/>/*!*/ typeBinders = new List<TypeVariable/*!*/>(5);
+
+ public void AddTypeBinder(TypeVariable td) {
+ Contract.Requires(td != null);
+ if (CheckBvNameClashes(td, td.Name)) {
+ return;
+ }
+ if (types.ContainsKey(td.Name)) {
+ Error(td, "name is already reserved for type constructor: {0}", td.Name);
+ return;
+ }
+ for (int i = 0; i < typeBinders.Count; i++) {
+ if (typeBinders[i].Name == td.Name) {
+ Error(td, "more than one declaration of type variable: {0}", td.Name);
+ return;
+ }
+ }
+ typeBinders.Add(td);
+ }
+
+ public int TypeBinderState {
+ get {
+ return typeBinders.Count;
+ }
+ set {
+ typeBinders.RemoveRange(value, typeBinders.Count - value);
+ }
+ }
+
+ /// <summary>
+ /// Returns the declaration of the named type binder, or null if
+ /// no such binder is declared.
+ /// </summary>
+ public TypeVariable LookUpTypeBinder(string name) {
+ Contract.Requires(name != null);
+ for (int i = typeBinders.Count; 0 <= --i; ) {
+ TypeVariable/*!*/ td = typeBinders[i];
+ Contract.Assert(td != null);
+ if (td.Name == name) {
+ return td;
+ }
+ }
+ return null; // not present
+ }
+
+ // ------------------------------ Variables ------------------------------
+
+ class VarContextNode {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(VarSymbols != null);
+ }
+
+ public readonly Hashtable /*string->Variable*//*!*/ VarSymbols = new Hashtable /*string->Variable*/();
+ public /*maybe null*/ VarContextNode ParentContext;
+ public readonly bool Opaque;
+ readonly ISet<string> assignedAssumptionVariables = new HashSet<string>();
+
+ public bool HasVariableBeenAssigned(string name)
+ {
+ Contract.Requires(name != null);
+
+ if (assignedAssumptionVariables.Contains(name))
+ {
+ return true;
+ }
+ else if (ParentContext != null)
+ {
+ return ParentContext.HasVariableBeenAssigned(name);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public bool MarkVariableAsAssigned(string name)
+ {
+ Contract.Requires(name != null);
+
+ if (VarSymbols.Contains(name))
+ {
+ if (assignedAssumptionVariables.Contains(name))
+ {
+ return false;
+ }
+ assignedAssumptionVariables.Add(name);
+ return true;
+ }
+ else if (ParentContext != null)
+ {
+ return ParentContext.MarkVariableAsAssigned(name);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public VarContextNode(/*maybe null*/ VarContextNode parentContext, bool opaque) {
+ ParentContext = parentContext;
+ Opaque = opaque;
+ }
+ }
+
+ // symbolic constants, global variables, local variables, formals, expression-bound variables
+ VarContextNode/*!*/ varContext = new VarContextNode(null, false);
+
+ /// <summary>
+ /// Adds a variable context.
+ /// </summary>
+ public void PushVarContext() {
+ varContext = new VarContextNode(varContext, false);
+ }
+
+ /// <summary>
+ /// Adds an opaque variable context, that is, one that blocks all previously pushed contexts.
+ /// </summary>
+ public void PushOpaqueVarContext() {
+ varContext = new VarContextNode(varContext, true);
+ }
+
+ /// <summary>
+ /// Requires there to be more than one variable context.
+ /// </summary>
+ public void PopVarContext() {
+ Contract.Assert(varContext.ParentContext != null);
+ varContext = varContext.ParentContext;
+ }
+
+ public readonly ISet<string> StatementIds = new HashSet<string>();
+
+ public void AddStatementId(IToken tok, string name)
+ {
+ if (StatementIds.Contains(name))
+ {
+ Error(tok, "more than one statement with same id: " + name);
+ return;
+ }
+ StatementIds.Add(name);
+ }
+
+ public void AddVariable(Variable var, bool global) {
+ Contract.Requires(var != null);
+ var previous = FindVariable(cce.NonNull(var.Name), !global);
+ if (previous == null) {
+ varContext.VarSymbols.Add(var.Name, var);
+ } else {
+ var r = (Variable)SelectNonExtern(var, previous);
+ if (r == null) {
+ Error(var, "more than one declaration of variable name: {0}", var.Name);
+ } else {
+ varContext.VarSymbols[var.Name] = r;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Returns the declaration of the named variable, or null if
+ /// no such variable is declared.
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public Variable LookUpVariable(string name) {
+ Contract.Requires(name != null);
+ return FindVariable(name, false);
+ }
+
+ Variable FindVariable(string name, bool ignoreTopLevelVars) {
+ Contract.Requires(name != null);
+ VarContextNode c = varContext;
+ bool lookOnlyForConstants = false;
+ do {
+ if (ignoreTopLevelVars && c.ParentContext == null) {
+ // this is the top level and we're asked to ignore the top level; hence, we're done
+ break;
+ }
+
+ Variable var = (Variable)c.VarSymbols[name];
+ if (var != null && (!lookOnlyForConstants || var is Constant)) {
+ return var;
+ }
+ // not at this level
+
+ if (c.Opaque) {
+ // from here on, only constants can be looked up
+ lookOnlyForConstants = true;
+ }
+ c = c.ParentContext;
+ } while (c != null);
+
+ // not present in the relevant levels
+ return null;
+ }
+
+ public bool HasVariableBeenAssigned(string name)
+ {
+ Contract.Requires(name != null);
+
+ return varContext.HasVariableBeenAssigned(name);
+ }
+
+ public void MarkVariableAsAssigned(string name)
+ {
+ Contract.Requires(name != null);
+
+ var success = varContext.MarkVariableAsAssigned(name);
+ Contract.Assume(success);
+ }
+
+ Hashtable axioms = new Hashtable();
+
+ public void AddAxiom(Axiom axiom) {
+ string axiomName = QKeyValue.FindStringAttribute(axiom.Attributes, "name");
+ if (axiomName == null)
+ return;
+ var previous = (Axiom)axioms[axiomName];
+ if (previous == null) {
+ axioms.Add(axiomName, axiom);
+ }
+ else {
+ var r = (Axiom)SelectNonExtern(axiom, previous);
+ if (r == null) {
+ Error(axiom, "more than one declaration of axiom name: {0}", axiomName);
+ }
+ else {
+ axioms[axiomName] = r;
+ }
+ }
+ }
+
+ // ------------------------------ Functions/Procedures ------------------------------
+
+ // uninterpreted function symbols, procedures
+ Hashtable /*string->DeclWithFormals*//*!*/ funcdures = new Hashtable /*string->DeclWithFormals*/ ();
+
+ public void AddProcedure(DeclWithFormals proc) {
+ Contract.Requires(proc != null);
+ Contract.Requires(proc.Name != null);
+
+ string name = proc.Name;
+ var previous = (DeclWithFormals)funcdures[name];
+ if (previous == null) {
+ funcdures.Add(name, proc);
+ } else {
+ var r = (DeclWithFormals)SelectNonExtern(proc, previous);
+ if (r == null) {
+ Error(proc, "more than one declaration of function/procedure name: {0}", name);
+ } else {
+ funcdures[name] = r;
+ }
+ }
+ }
+
+ /// <summary>
+ /// If both "a" and "b" have an ":extern" attribute, returns either one.
+ /// If one of "a" and "b" has an ":extern" attribute, returns that one.
+ /// If neither of "a" and "b" has an ":extern" attribute, returns null.
+ /// If a non-value value is returned, this method also adds the ":ignore"
+ /// attribute to the declaration NOT returned.
+ /// </summary>
+ Declaration SelectNonExtern(Declaration a, Declaration b) {
+ Contract.Requires(a != null);
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<Declaration>() == null || Contract.Result<Declaration>() == a || Contract.Result<Declaration>() == b);
+
+ Declaration ignore, keep;
+ if (QKeyValue.FindBoolAttribute(a.Attributes, "extern")) {
+ ignore = a;
+ keep = b;
+ } else if (QKeyValue.FindBoolAttribute(b.Attributes, "extern")) {
+ ignore = b;
+ keep = a;
+ } else {
+ return null;
+ }
+ // prepend :ignore attribute
+ ignore.Attributes = new QKeyValue(ignore.tok, "ignore", new List<object/*!*/>(), ignore.Attributes);
+ return keep;
+ }
+
+ /// <summary>
+ /// Returns the declaration of the named function/procedure, or null if
+ /// no such function or procedure is declared.
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public DeclWithFormals LookUpProcedure(string name) {
+ Contract.Requires(name != null);
+ return (DeclWithFormals)funcdures[name];
+ }
+
+ // ------------------------------ Blocks ------------------------------
+
+ class ProcedureContext {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Blocks != null);
+ }
+
+ public readonly Hashtable/*!*/ /*string->Block!*/ Blocks;
+ public readonly ProcedureContext Next;
+ public ProcedureContext(ProcedureContext next) {
+ Blocks = new Hashtable /*string->Block!*/ ();
+ Next = next;
+ }
+ }
+ /*maybe null*/
+ ProcedureContext procedureContext; // stack of procedure contexts
+ public bool HasProcedureContext {
+ get {
+ return procedureContext != null;
+ }
+ }
+
+ /// <summary>
+ /// Pushes a new procedure context.
+ /// </summary>
+ public void PushProcedureContext() {
+ Contract.Ensures(HasProcedureContext);
+ procedureContext = new ProcedureContext(procedureContext);
+ }
+
+ /// <summary>
+ /// Requires there to be a procedure context. Pops it.
+ /// </summary>
+ public void PopProcedureContext() {
+ Contract.Requires(HasProcedureContext);
+ Contract.Assert(procedureContext != null); // follows from precondition
+ procedureContext = procedureContext.Next;
+ }
+
+ /// <summary>
+ /// Requires there to be a procedure context.
+ /// </summary>
+ /// <param name="block"></param>
+ public void AddBlock(Block block) {
+ Contract.Requires(block != null);
+ Contract.Requires(HasProcedureContext);
+ Contract.Assert(procedureContext != null); // follows from precondition
+ Hashtable/*!*/ /*string->Block!*/ blocks = procedureContext.Blocks;
+ Contract.Assert(blocks != null);
+ if (blocks[block.Label] != null) {
+ Error(block, "more than one declaration of block name: {0}", block.Label);
+ } else {
+ blocks.Add(block.Label, block);
+ }
+ }
+
+ /// <summary>
+ /// Requires there to be a procedure context.
+ /// Returns the declaration of the named block, or null if
+ /// no such block is declared.
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public Block LookUpBlock(string name) {
+ Contract.Requires(name != null);
+ Contract.Requires(HasProcedureContext);
+ Contract.Assert(procedureContext != null); // follows from precondition
+ Hashtable/*!*/ /*string->Block!*/ blocks = procedureContext.Blocks;
+ Contract.Assert(blocks != null);
+ return (Block)blocks[name];
+ }
+
+ // ------------------------------ Flags ------------------------------
+
+ public enum State {
+ StateLess,
+ Single,
+ Two
+ }
+ State stateMode = State.Single;
+
+ /// <summary>
+ /// To increase our confidence in that the caller knows what it's doing, we only allow
+ /// the state mode to be changed in and out of the State.Single mode.
+ /// </summary>
+ public State StateMode {
+ get {
+ return stateMode;
+ }
+ set {
+ Contract.Assert(value != stateMode);
+ Contract.Assert(stateMode == State.Single || value == State.Single);
+ cce.BeginExpose(this);
+ {
+ stateMode = value;
+ }
+ cce.EndExpose();
+ }
+ }
+
+ bool triggerMode = false;
+
+ /// <summary>
+ /// Setting TriggerMode is allowed only if the setting has the effect of toggling the
+ /// boolean. That is, TriggerMode can be set to true only if it previously was false,
+ /// and TriggerMode can be set to false only if it previously was true.
+ /// </summary>
+ public bool TriggerMode {
+ get {
+ return triggerMode;
+ }
+ set {
+ Contract.Assert(triggerMode != value);
+ cce.BeginExpose(this);
+ {
+ triggerMode = value;
+ }
+ cce.EndExpose();
+ }
+ }
+ }
+
+ public class TypecheckingContext : CheckingContext {
+ public List<IdentifierExpr> Frame; // used in checking the assignment targets of implementation bodies
+ public bool Yields;
+
+ public TypecheckingContext(IErrorSink errorSink)
+ : base(errorSink) {
+ }
+
+ public bool InFrame(Variable v) {
+ Contract.Requires(v != null);
+ Contract.Requires(Frame != null);
+ return Frame.Any(f => f.Decl == v);
+ }
+ }
+}
diff --git a/Source/Core/Scanner.cs b/Source/Core/Scanner.cs
index ca7db1e1..69023555 100644
--- a/Source/Core/Scanner.cs
+++ b/Source/Core/Scanner.cs
@@ -1,823 +1,823 @@
-
-using System;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Text;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie;
-
-
-namespace Microsoft.Boogie {
-
-//-----------------------------------------------------------------------------------
-// Buffer
-//-----------------------------------------------------------------------------------
-public class Buffer {
- // This Buffer supports the following cases:
- // 1) seekable stream (file)
- // a) whole stream in buffer
- // b) part of stream in buffer
- // 2) non seekable stream (network, console)
-
- public const int EOF = 65535 + 1; // char.MaxValue + 1;
- const int MIN_BUFFER_LENGTH = 1024; // 1KB
- const int MAX_BUFFER_LENGTH = MIN_BUFFER_LENGTH * 64; // 64KB
- byte[]/*!*/ buf; // input buffer
- int bufStart; // position of first byte in buffer relative to input stream
- int bufLen; // length of buffer
- int fileLen; // length of input stream (may change if the stream is no file)
- int bufPos; // current position in buffer
- Stream/*!*/ stream; // input stream (seekable)
- bool isUserStream; // was the stream opened by the user?
-
- [ContractInvariantMethod]
- void ObjectInvariant(){
- Contract.Invariant(buf != null);
- Contract.Invariant(stream != null);
- }
-
-// [NotDelayed]
- public Buffer (Stream/*!*/ s, bool isUserStream) : base() {
- Contract.Requires(s != null);
- stream = s; this.isUserStream = isUserStream;
-
- int fl, bl;
- if (s.CanSeek) {
- fl = (int) s.Length;
- bl = fl < MAX_BUFFER_LENGTH ? fl : MAX_BUFFER_LENGTH; // Math.Min(fileLen, MAX_BUFFER_LENGTH);
- bufStart = Int32.MaxValue; // nothing in the buffer so far
- } else {
- fl = bl = bufStart = 0;
- }
-
- buf = new byte[(bl>0) ? bl : MIN_BUFFER_LENGTH];
- fileLen = fl; bufLen = bl;
-
- if (fileLen > 0) Pos = 0; // setup buffer to position 0 (start)
- else bufPos = 0; // index 0 is already after the file, thus Pos = 0 is invalid
- if (bufLen == fileLen && s.CanSeek) Close();
- }
-
- protected Buffer(Buffer/*!*/ b) { // called in UTF8Buffer constructor
- Contract.Requires(b != null);
- buf = b.buf;
- bufStart = b.bufStart;
- bufLen = b.bufLen;
- fileLen = b.fileLen;
- bufPos = b.bufPos;
- stream = b.stream;
- // keep destructor from closing the stream
- //b.stream = null;
- isUserStream = b.isUserStream;
- // keep destructor from closing the stream
- b.isUserStream = true;
- }
-
- ~Buffer() { Close(); }
-
- protected void Close() {
- if (!isUserStream && stream != null) {
- stream.Close();
- //stream = null;
- }
- }
-
- public virtual int Read () {
- if (bufPos < bufLen) {
- return buf[bufPos++];
- } else if (Pos < fileLen) {
- Pos = Pos; // shift buffer start to Pos
- return buf[bufPos++];
- } else if (stream != null && !stream.CanSeek && ReadNextStreamChunk() > 0) {
- return buf[bufPos++];
- } else {
- return EOF;
- }
- }
-
- public int Peek () {
- int curPos = Pos;
- int ch = Read();
- Pos = curPos;
- return ch;
- }
-
- public string/*!*/ GetString (int beg, int end) {
- Contract.Ensures(Contract.Result<string>() != null);
- int len = 0;
- char[] buf = new char[end - beg];
- int oldPos = Pos;
- Pos = beg;
- while (Pos < end) buf[len++] = (char) Read();
- Pos = oldPos;
- return new String(buf, 0, len);
- }
-
- public int Pos {
- get { return bufPos + bufStart; }
- set {
- if (value >= fileLen && stream != null && !stream.CanSeek) {
- // Wanted position is after buffer and the stream
- // is not seek-able e.g. network or console,
- // thus we have to read the stream manually till
- // the wanted position is in sight.
- while (value >= fileLen && ReadNextStreamChunk() > 0);
- }
-
- if (value < 0 || value > fileLen) {
- throw new FatalError("buffer out of bounds access, position: " + value);
- }
-
- if (value >= bufStart && value < bufStart + bufLen) { // already in buffer
- bufPos = value - bufStart;
- } else if (stream != null) { // must be swapped in
- stream.Seek(value, SeekOrigin.Begin);
- bufLen = stream.Read(buf, 0, buf.Length);
- bufStart = value; bufPos = 0;
- } else {
- // set the position to the end of the file, Pos will return fileLen.
- bufPos = fileLen - bufStart;
- }
- }
- }
-
- // Read the next chunk of bytes from the stream, increases the buffer
- // if needed and updates the fields fileLen and bufLen.
- // Returns the number of bytes read.
- private int ReadNextStreamChunk() {
- int free = buf.Length - bufLen;
- if (free == 0) {
- // in the case of a growing input stream
- // we can neither seek in the stream, nor can we
- // foresee the maximum length, thus we must adapt
- // the buffer size on demand.
- byte[] newBuf = new byte[bufLen * 2];
- Array.Copy(buf, newBuf, bufLen);
- buf = newBuf;
- free = bufLen;
- }
- int read = stream.Read(buf, bufLen, free);
- if (read > 0) {
- fileLen = bufLen = (bufLen + read);
- return read;
- }
- // end of stream reached
- return 0;
- }
-}
-
-//-----------------------------------------------------------------------------------
-// UTF8Buffer
-//-----------------------------------------------------------------------------------
-public class UTF8Buffer: Buffer {
- public UTF8Buffer(Buffer/*!*/ b): base(b) {Contract.Requires(b != null);}
-
- public override int Read() {
- int ch;
- do {
- ch = base.Read();
- // until we find a utf8 start (0xxxxxxx or 11xxxxxx)
- } while ((ch >= 128) && ((ch & 0xC0) != 0xC0) && (ch != EOF));
- if (ch < 128 || ch == EOF) {
- // nothing to do, first 127 chars are the same in ascii and utf8
- // 0xxxxxxx or end of file character
- } else if ((ch & 0xF0) == 0xF0) {
- // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- int c1 = ch & 0x07; ch = base.Read();
- int c2 = ch & 0x3F; ch = base.Read();
- int c3 = ch & 0x3F; ch = base.Read();
- int c4 = ch & 0x3F;
- ch = (((((c1 << 6) | c2) << 6) | c3) << 6) | c4;
- } else if ((ch & 0xE0) == 0xE0) {
- // 1110xxxx 10xxxxxx 10xxxxxx
- int c1 = ch & 0x0F; ch = base.Read();
- int c2 = ch & 0x3F; ch = base.Read();
- int c3 = ch & 0x3F;
- ch = (((c1 << 6) | c2) << 6) | c3;
- } else if ((ch & 0xC0) == 0xC0) {
- // 110xxxxx 10xxxxxx
- int c1 = ch & 0x1F; ch = base.Read();
- int c2 = ch & 0x3F;
- ch = (c1 << 6) | c2;
- }
- return ch;
- }
-}
-
-//-----------------------------------------------------------------------------------
-// Scanner
-//-----------------------------------------------------------------------------------
-public class Scanner {
- const char EOL = '\n';
- const int eofSym = 0; /* pdt */
- const int maxT = 96;
- const int noSym = 96;
-
-
- [ContractInvariantMethod]
- void objectInvariant(){
- Contract.Invariant(this._buffer != null);
- Contract.Invariant(t != null);
- Contract.Invariant(start != null);
- Contract.Invariant(tokens != null);
- Contract.Invariant(pt != null);
- Contract.Invariant(tval != null);
- Contract.Invariant(Filename != null);
- Contract.Invariant(errorHandler != null);
- }
-
- private Buffer/*!*/ _buffer; // scanner buffer
-
- public Buffer/*!*/ buffer {
- get {
- Contract.Ensures(Contract.Result<Buffer>() != null);
- return this._buffer;
- }
- set {
- Contract.Requires(value != null);
- this._buffer = value;
- }
- }
-
- Token/*!*/ t; // current token
- int ch; // current input character
- int pos; // byte position of current character
- int charPos;
- int col; // column number of current character
- int line; // line number of current character
- int oldEols; // EOLs that appeared in a comment;
- static readonly Hashtable/*!*/ start; // maps first token character to start state
-
- Token/*!*/ tokens; // list of tokens already peeked (first token is a dummy)
- Token/*!*/ pt; // current peek token
-
- char[]/*!*/ tval = new char[128]; // text of current token
- int tlen; // length of current token
-
- private string/*!*/ Filename;
- private Errors/*!*/ errorHandler;
-
- static Scanner() {
- start = new Hashtable(128);
- for (int i = 35; i <= 36; ++i) start[i] = 2;
- for (int i = 39; i <= 39; ++i) start[i] = 2;
- for (int i = 46; i <= 46; ++i) start[i] = 2;
- for (int i = 63; i <= 63; ++i) start[i] = 2;
- for (int i = 65; i <= 90; ++i) start[i] = 2;
- for (int i = 94; i <= 122; ++i) start[i] = 2;
- for (int i = 126; i <= 126; ++i) start[i] = 2;
- for (int i = 48; i <= 57; ++i) start[i] = 16;
- for (int i = 34; i <= 34; ++i) start[i] = 6;
- start[92] = 1;
- start[59] = 19;
- start[40] = 20;
- start[41] = 21;
- start[58] = 55;
- start[44] = 22;
- start[91] = 23;
- start[93] = 24;
- start[60] = 56;
- start[62] = 57;
- start[123] = 25;
- start[125] = 58;
- start[61] = 59;
- start[42] = 60;
- start[124] = 61;
- start[8660] = 28;
- start[8658] = 30;
- start[8656] = 31;
- start[38] = 32;
- start[8743] = 34;
- start[8744] = 36;
- start[33] = 62;
- start[8800] = 40;
- start[8804] = 41;
- start[8805] = 42;
- start[43] = 63;
- start[45] = 44;
- start[47] = 45;
- start[172] = 47;
- start[8704] = 50;
- start[8707] = 51;
- start[955] = 52;
- start[8226] = 54;
- start[Buffer.EOF] = -1;
-
- }
-
-// [NotDelayed]
- public Scanner (string/*!*/ fileName, Errors/*!*/ errorHandler, bool useBaseName = false) : base() {
- Contract.Requires(fileName != null);
- Contract.Requires(errorHandler != null);
- this.errorHandler = errorHandler;
- pt = tokens = new Token(); // first token is a dummy
- t = new Token(); // dummy because t is a non-null field
- try {
- Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
- this._buffer = new Buffer(stream, false);
- Filename = useBaseName? GetBaseName(fileName): fileName;
- Init();
- } catch (IOException) {
- throw new FatalError("Cannot open file " + fileName);
- }
- }
-
-// [NotDelayed]
- public Scanner (Stream/*!*/ s, Errors/*!*/ errorHandler, string/*!*/ fileName, bool useBaseName = false) : base() {
- Contract.Requires(s != null);
- Contract.Requires(errorHandler != null);
- Contract.Requires(fileName != null);
- pt = tokens = new Token(); // first token is a dummy
- t = new Token(); // dummy because t is a non-null field
- this._buffer = new Buffer(s, true);
- this.errorHandler = errorHandler;
- this.Filename = useBaseName? GetBaseName(fileName) : fileName;
- Init();
- }
-
- string GetBaseName(string fileName) {
- return System.IO.Path.GetFileName(fileName); // Return basename
- }
-
- void Init() {
- pos = -1; line = 1; col = 0;
- oldEols = 0;
- NextCh();
- if (ch == 0xEF) { // check optional byte order mark for UTF-8
- NextCh(); int ch1 = ch;
- NextCh(); int ch2 = ch;
- if (ch1 != 0xBB || ch2 != 0xBF) {
- throw new FatalError(String.Format("illegal byte order mark: EF {0,2:X} {1,2:X}", ch1, ch2));
- }
- buffer = new UTF8Buffer(buffer); col = 0;
- NextCh();
- }
- pt = tokens = new Token(); // first token is a dummy
- }
-
- string/*!*/ ReadToEOL(){
- Contract.Ensures(Contract.Result<string>() != null);
- int p = buffer.Pos;
- int ch = buffer.Read();
- // replace isolated '\r' by '\n' in order to make
- // eol handling uniform across Windows, Unix and Mac
- if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
- while (ch != EOL && ch != Buffer.EOF){
- ch = buffer.Read();
- // replace isolated '\r' by '\n' in order to make
- // eol handling uniform across Windows, Unix and Mac
- if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
- }
- string/*!*/ s = buffer.GetString(p, buffer.Pos);
- Contract.Assert(s!=null);
- return s;
- }
-
- void NextCh() {
- if (oldEols > 0) { ch = EOL; oldEols--; }
- else {
-// pos = buffer.Pos;
-// ch = buffer.Read(); col++;
-// // replace isolated '\r' by '\n' in order to make
-// // eol handling uniform across Windows, Unix and Mac
-// if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
-// if (ch == EOL) { line++; col = 0; }
-
- while (true) {
- pos = buffer.Pos;
- ch = buffer.Read(); col++;
- // replace isolated '\r' by '\n' in order to make
- // eol handling uniform across Windows, Unix and Mac
- if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
- if (ch == EOL) {
- line++; col = 0;
- } else if (ch == '#' && col == 1) {
- int prLine = line;
- int prColumn = 0;
-
- string/*!*/ hashLine = ReadToEOL();
- Contract.Assert(hashLine!=null);
- col = 0;
- line++;
-
- hashLine = hashLine.TrimEnd(null);
- if (hashLine.StartsWith("line ") || hashLine == "line") {
- // parse #line pragma: #line num [filename]
- string h = hashLine.Substring(4).TrimStart(null);
- int x = h.IndexOf(' ');
- if (x == -1) {
- x = h.Length; // this will be convenient below when we look for a filename
- }
- try {
- int li = int.Parse(h.Substring(0, x));
-
- h = h.Substring(x).Trim();
-
- // act on #line
- line = li;
- if (h.Length != 0) {
- // a filename was specified
- Filename = h;
- }
- continue; // successfully parsed and acted on the #line pragma
-
- } catch (FormatException) {
- // just fall down through to produce an error message
- }
- this.errorHandler.SemErr(Filename, prLine, prColumn, "Malformed (#line num [filename]) pragma: #" + hashLine);
- continue;
- }
-
- this.errorHandler.SemErr(Filename, prLine, prColumn, "Unrecognized pragma: #" + hashLine);
- continue;
- }
- return;
- }
-
-
- }
-
- }
-
- void AddCh() {
- if (tlen >= tval.Length) {
- char[] newBuf = new char[2 * tval.Length];
- Array.Copy(tval, 0, newBuf, 0, tval.Length);
- tval = newBuf;
- }
- if (ch != Buffer.EOF) {
- tval[tlen++] = (char) ch;
- NextCh();
- }
- }
-
-
-
- bool Comment0() {
- int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos;
- NextCh();
- if (ch == '/') {
- NextCh();
- for(;;) {
- if (ch == 10) {
- level--;
- if (level == 0) { oldEols = line - line0; NextCh(); return true; }
- NextCh();
- } else if (ch == Buffer.EOF) return false;
- else NextCh();
- }
- } else {
- buffer.Pos = pos0; NextCh(); line = line0; col = col0; charPos = charPos0;
- }
- return false;
- }
-
- bool Comment1() {
- int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos;
- NextCh();
- if (ch == '*') {
- NextCh();
- for(;;) {
- if (ch == '*') {
- NextCh();
- if (ch == '/') {
- level--;
- if (level == 0) { oldEols = line - line0; NextCh(); return true; }
- NextCh();
- }
- } else if (ch == '/') {
- NextCh();
- if (ch == '*') {
- level++; NextCh();
- }
- } else if (ch == Buffer.EOF) return false;
- else NextCh();
- }
- } else {
- buffer.Pos = pos0; NextCh(); line = line0; col = col0; charPos = charPos0;
- }
- return false;
- }
-
-
- void CheckLiteral() {
- switch (t.val) {
- case "var": t.kind = 7; break;
- case "where": t.kind = 13; break;
- case "int": t.kind = 14; break;
- case "real": t.kind = 15; break;
- case "bool": t.kind = 16; break;
- case "fp": t.kind = 97; break;
- case "float": case "float16": case "float32": case "float64": case "float128": t.kind = 98; break;
- case "const": t.kind = 21; break;
- case "unique": t.kind = 22; break;
- case "extends": t.kind = 23; break;
- case "complete": t.kind = 24; break;
- case "function": t.kind = 25; break;
- case "returns": t.kind = 26; break;
- case "axiom": t.kind = 29; break;
- case "type": t.kind = 30; break;
- case "procedure": t.kind = 32; break;
- case "implementation": t.kind = 33; break;
- case "modifies": t.kind = 34; break;
- case "free": t.kind = 35; break;
- case "requires": t.kind = 36; break;
- case "ensures": t.kind = 37; break;
- case "goto": t.kind = 38; break;
- case "return": t.kind = 39; break;
- case "if": t.kind = 40; break;
- case "else": t.kind = 41; break;
- case "while": t.kind = 42; break;
- case "invariant": t.kind = 43; break;
- case "break": t.kind = 45; break;
- case "assert": t.kind = 46; break;
- case "assume": t.kind = 47; break;
- case "havoc": t.kind = 48; break;
- case "yield": t.kind = 49; break;
- case "async": t.kind = 51; break;
- case "call": t.kind = 52; break;
- case "par": t.kind = 53; break;
- case "div": t.kind = 76; break;
- case "mod": t.kind = 77; break;
- case "false": t.kind = 82; break;
- case "true": t.kind = 83; break;
- case "old": t.kind = 84; break;
- case "then": t.kind = 87; break;
- case "forall": t.kind = 88; break;
- case "exists": t.kind = 90; break;
- case "lambda": t.kind = 92; break;
- default: break;
- }
- }
-
- Token/*!*/ NextToken() {
- Contract.Ensures(Contract.Result<Token>() != null);
- while (ch == ' ' ||
- ch >= 9 && ch <= 10 || ch == 13
- ) NextCh();
- if (ch == '/' && Comment0() ||ch == '/' && Comment1()) return NextToken();
- int recKind = noSym;
- int recEnd = pos;
- t = new Token();
- t.pos = pos; t.col = col; t.line = line;
- t.filename = this.Filename;
- int state;
- if (start.ContainsKey(ch)) {
- Contract.Assert(start[ch] != null);
- state = (int) start[ch];
- }
- else { state = 0; }
- tlen = 0; AddCh();
-
- switch (state) {
- case -1: { t.kind = eofSym; break; } // NextCh already done
- case 0: {
- if (recKind != noSym) {
- tlen = recEnd - t.pos;
- SetScannerBehindT();
- }
- t.kind = recKind; break;
- } // NextCh already done
- case 1:
- if (ch >= '#' && ch <= '$' || ch == 39 || ch == '.' || ch == '?' || ch >= 'A' && ch <= 'Z' || ch >= '^' && ch <= 'z' || ch == '~') {AddCh(); goto case 2;}
- else {goto case 0;}
- case 2:
- recEnd = pos; recKind = 1;
- if (ch >= '#' && ch <= '$' || ch == 39 || ch == '.' || ch >= '0' && ch <= '9' || ch == '?' || ch >= 'A' && ch <= 'Z' || ch >= '^' && ch <= 'z' || ch == '~') {AddCh(); goto case 2;}
- else {t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t;}
- case 3:
- if (ch == 'v') {AddCh(); goto case 4;}
- else {goto case 0;}
- case 4:
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 5;}
- else {goto case 0;}
- case 5:
- recEnd = pos; recKind = 2;
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 5;}
- else {t.kind = 2; break;}
- case 6:
- if (ch == '"') {AddCh(); goto case 7;}
- else if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 6;}
- else if (ch == 92) {AddCh(); goto case 17;}
- else {goto case 0;}
- case 7:
- {t.kind = 4; break;}
- case 8:
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
- else if (ch == '-') {AddCh(); goto case 9;}
- else {goto case 0;}
- case 9:
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
- else {goto case 0;}
- case 10:
- recEnd = pos; recKind = 5;
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
- else {t.kind = 5; break;}
- case 11:
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 12;}
- else {goto case 0;}
- case 12:
- recEnd = pos; recKind = 6;
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 12;}
- else if (ch == 'e') {AddCh(); goto case 13;}
- else {t.kind = 6; break;}
- case 13:
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 15;}
- else if (ch == '-') {AddCh(); goto case 14;}
- else {goto case 0;}
- case 14:
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 15;}
- else {goto case 0;}
- case 15:
- recEnd = pos; recKind = 6;
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 15;}
- else {t.kind = 6; break;}
- case 16:
- recEnd = pos; recKind = 3;
- if (ch >= '0' && ch <= '9') {AddCh(); goto case 16;}
- else if (ch == 'b') {AddCh(); goto case 3;}
- else if (ch == 'e') {AddCh(); goto case 8;}
- else if (ch == '.') {AddCh(); goto case 11;}
- else {t.kind = 3; break;}
- case 17:
- if (ch == '"') {AddCh(); goto case 18;}
- else if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 6;}
- else if (ch == 92) {AddCh(); goto case 17;}
- else {goto case 0;}
- case 18:
- recEnd = pos; recKind = 4;
- if (ch == '"') {AddCh(); goto case 7;}
- else if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 6;}
- else if (ch == 92) {AddCh(); goto case 17;}
- else {t.kind = 4; break;}
- case 19:
- {t.kind = 8; break;}
- case 20:
- {t.kind = 9; break;}
- case 21:
- {t.kind = 10; break;}
- case 22:
- {t.kind = 12; break;}
- case 23:
- {t.kind = 17; break;}
- case 24:
- {t.kind = 18; break;}
- case 25:
- {t.kind = 27; break;}
- case 26:
- {t.kind = 50; break;}
- case 27:
- {t.kind = 55; break;}
- case 28:
- {t.kind = 56; break;}
- case 29:
- {t.kind = 57; break;}
- case 30:
- {t.kind = 58; break;}
- case 31:
- {t.kind = 60; break;}
- case 32:
- if (ch == '&') {AddCh(); goto case 33;}
- else {goto case 0;}
- case 33:
- {t.kind = 61; break;}
- case 34:
- {t.kind = 62; break;}
- case 35:
- {t.kind = 63; break;}
- case 36:
- {t.kind = 64; break;}
- case 37:
- {t.kind = 67; break;}
- case 38:
- {t.kind = 68; break;}
- case 39:
- {t.kind = 69; break;}
- case 40:
- {t.kind = 70; break;}
- case 41:
- {t.kind = 71; break;}
- case 42:
- {t.kind = 72; break;}
- case 43:
- {t.kind = 73; break;}
- case 44:
- {t.kind = 75; break;}
- case 45:
- {t.kind = 78; break;}
- case 46:
- {t.kind = 79; break;}
- case 47:
- {t.kind = 81; break;}
- case 48:
- {t.kind = 85; break;}
- case 49:
- {t.kind = 86; break;}
- case 50:
- {t.kind = 89; break;}
- case 51:
- {t.kind = 91; break;}
- case 52:
- {t.kind = 93; break;}
- case 53:
- {t.kind = 94; break;}
- case 54:
- {t.kind = 95; break;}
- case 55:
- recEnd = pos; recKind = 11;
- if (ch == '=') {AddCh(); goto case 26;}
- else if (ch == ':') {AddCh(); goto case 53;}
- else {t.kind = 11; break;}
- case 56:
- recEnd = pos; recKind = 19;
- if (ch == '=') {AddCh(); goto case 64;}
- else if (ch == ':') {AddCh(); goto case 39;}
- else {t.kind = 19; break;}
- case 57:
- recEnd = pos; recKind = 20;
- if (ch == '=') {AddCh(); goto case 37;}
- else {t.kind = 20; break;}
- case 58:
- recEnd = pos; recKind = 28;
- if (ch == '|') {AddCh(); goto case 49;}
- else {t.kind = 28; break;}
- case 59:
- recEnd = pos; recKind = 31;
- if (ch == '=') {AddCh(); goto case 65;}
- else {t.kind = 31; break;}
- case 60:
- recEnd = pos; recKind = 44;
- if (ch == '*') {AddCh(); goto case 46;}
- else {t.kind = 44; break;}
- case 61:
- recEnd = pos; recKind = 54;
- if (ch == '|') {AddCh(); goto case 35;}
- else if (ch == '{') {AddCh(); goto case 48;}
- else {t.kind = 54; break;}
- case 62:
- recEnd = pos; recKind = 80;
- if (ch == '=') {AddCh(); goto case 38;}
- else {t.kind = 80; break;}
- case 63:
- recEnd = pos; recKind = 74;
- if (ch == '+') {AddCh(); goto case 43;}
- else {t.kind = 74; break;}
- case 64:
- recEnd = pos; recKind = 66;
- if (ch == '=') {AddCh(); goto case 66;}
- else {t.kind = 66; break;}
- case 65:
- recEnd = pos; recKind = 65;
- if (ch == '>') {AddCh(); goto case 29;}
- else {t.kind = 65; break;}
- case 66:
- recEnd = pos; recKind = 59;
- if (ch == '>') {AddCh(); goto case 27;}
- else {t.kind = 59; break;}
-
- }
- t.val = new String(tval, 0, tlen);
- return t;
- }
-
- private void SetScannerBehindT() {
- buffer.Pos = t.pos;
- NextCh();
- line = t.line; col = t.col;
- for (int i = 0; i < tlen; i++) NextCh();
- }
-
- // get the next token (possibly a token already seen during peeking)
- public Token/*!*/ Scan () {
- Contract.Ensures(Contract.Result<Token>() != null);
- if (tokens.next == null) {
- return NextToken();
- } else {
- pt = tokens = tokens.next;
- return tokens;
- }
- }
-
- // peek for the next token, ignore pragmas
- public Token/*!*/ Peek () {
- Contract.Ensures(Contract.Result<Token>() != null);
- do {
- if (pt.next == null) {
- pt.next = NextToken();
- }
- pt = pt.next;
- } while (pt.kind > maxT); // skip pragmas
-
- return pt;
- }
-
- // make sure that peeking starts at the current scan position
- public void ResetPeek () { pt = tokens; }
-
-} // end Scanner
-
-public delegate void ErrorProc(int n, string filename, int line, int col);
-
-
+
+using System;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie;
+
+
+namespace Microsoft.Boogie {
+
+//-----------------------------------------------------------------------------------
+// Buffer
+//-----------------------------------------------------------------------------------
+public class Buffer {
+ // This Buffer supports the following cases:
+ // 1) seekable stream (file)
+ // a) whole stream in buffer
+ // b) part of stream in buffer
+ // 2) non seekable stream (network, console)
+
+ public const int EOF = 65535 + 1; // char.MaxValue + 1;
+ const int MIN_BUFFER_LENGTH = 1024; // 1KB
+ const int MAX_BUFFER_LENGTH = MIN_BUFFER_LENGTH * 64; // 64KB
+ byte[]/*!*/ buf; // input buffer
+ int bufStart; // position of first byte in buffer relative to input stream
+ int bufLen; // length of buffer
+ int fileLen; // length of input stream (may change if the stream is no file)
+ int bufPos; // current position in buffer
+ Stream/*!*/ stream; // input stream (seekable)
+ bool isUserStream; // was the stream opened by the user?
+
+ [ContractInvariantMethod]
+ void ObjectInvariant(){
+ Contract.Invariant(buf != null);
+ Contract.Invariant(stream != null);
+ }
+
+// [NotDelayed]
+ public Buffer (Stream/*!*/ s, bool isUserStream) : base() {
+ Contract.Requires(s != null);
+ stream = s; this.isUserStream = isUserStream;
+
+ int fl, bl;
+ if (s.CanSeek) {
+ fl = (int) s.Length;
+ bl = fl < MAX_BUFFER_LENGTH ? fl : MAX_BUFFER_LENGTH; // Math.Min(fileLen, MAX_BUFFER_LENGTH);
+ bufStart = Int32.MaxValue; // nothing in the buffer so far
+ } else {
+ fl = bl = bufStart = 0;
+ }
+
+ buf = new byte[(bl>0) ? bl : MIN_BUFFER_LENGTH];
+ fileLen = fl; bufLen = bl;
+
+ if (fileLen > 0) Pos = 0; // setup buffer to position 0 (start)
+ else bufPos = 0; // index 0 is already after the file, thus Pos = 0 is invalid
+ if (bufLen == fileLen && s.CanSeek) Close();
+ }
+
+ protected Buffer(Buffer/*!*/ b) { // called in UTF8Buffer constructor
+ Contract.Requires(b != null);
+ buf = b.buf;
+ bufStart = b.bufStart;
+ bufLen = b.bufLen;
+ fileLen = b.fileLen;
+ bufPos = b.bufPos;
+ stream = b.stream;
+ // keep destructor from closing the stream
+ //b.stream = null;
+ isUserStream = b.isUserStream;
+ // keep destructor from closing the stream
+ b.isUserStream = true;
+ }
+
+ ~Buffer() { Close(); }
+
+ protected void Close() {
+ if (!isUserStream && stream != null) {
+ stream.Close();
+ //stream = null;
+ }
+ }
+
+ public virtual int Read () {
+ if (bufPos < bufLen) {
+ return buf[bufPos++];
+ } else if (Pos < fileLen) {
+ Pos = Pos; // shift buffer start to Pos
+ return buf[bufPos++];
+ } else if (stream != null && !stream.CanSeek && ReadNextStreamChunk() > 0) {
+ return buf[bufPos++];
+ } else {
+ return EOF;
+ }
+ }
+
+ public int Peek () {
+ int curPos = Pos;
+ int ch = Read();
+ Pos = curPos;
+ return ch;
+ }
+
+ public string/*!*/ GetString (int beg, int end) {
+ Contract.Ensures(Contract.Result<string>() != null);
+ int len = 0;
+ char[] buf = new char[end - beg];
+ int oldPos = Pos;
+ Pos = beg;
+ while (Pos < end) buf[len++] = (char) Read();
+ Pos = oldPos;
+ return new String(buf, 0, len);
+ }
+
+ public int Pos {
+ get { return bufPos + bufStart; }
+ set {
+ if (value >= fileLen && stream != null && !stream.CanSeek) {
+ // Wanted position is after buffer and the stream
+ // is not seek-able e.g. network or console,
+ // thus we have to read the stream manually till
+ // the wanted position is in sight.
+ while (value >= fileLen && ReadNextStreamChunk() > 0);
+ }
+
+ if (value < 0 || value > fileLen) {
+ throw new FatalError("buffer out of bounds access, position: " + value);
+ }
+
+ if (value >= bufStart && value < bufStart + bufLen) { // already in buffer
+ bufPos = value - bufStart;
+ } else if (stream != null) { // must be swapped in
+ stream.Seek(value, SeekOrigin.Begin);
+ bufLen = stream.Read(buf, 0, buf.Length);
+ bufStart = value; bufPos = 0;
+ } else {
+ // set the position to the end of the file, Pos will return fileLen.
+ bufPos = fileLen - bufStart;
+ }
+ }
+ }
+
+ // Read the next chunk of bytes from the stream, increases the buffer
+ // if needed and updates the fields fileLen and bufLen.
+ // Returns the number of bytes read.
+ private int ReadNextStreamChunk() {
+ int free = buf.Length - bufLen;
+ if (free == 0) {
+ // in the case of a growing input stream
+ // we can neither seek in the stream, nor can we
+ // foresee the maximum length, thus we must adapt
+ // the buffer size on demand.
+ byte[] newBuf = new byte[bufLen * 2];
+ Array.Copy(buf, newBuf, bufLen);
+ buf = newBuf;
+ free = bufLen;
+ }
+ int read = stream.Read(buf, bufLen, free);
+ if (read > 0) {
+ fileLen = bufLen = (bufLen + read);
+ return read;
+ }
+ // end of stream reached
+ return 0;
+ }
+}
+
+//-----------------------------------------------------------------------------------
+// UTF8Buffer
+//-----------------------------------------------------------------------------------
+public class UTF8Buffer: Buffer {
+ public UTF8Buffer(Buffer/*!*/ b): base(b) {Contract.Requires(b != null);}
+
+ public override int Read() {
+ int ch;
+ do {
+ ch = base.Read();
+ // until we find a utf8 start (0xxxxxxx or 11xxxxxx)
+ } while ((ch >= 128) && ((ch & 0xC0) != 0xC0) && (ch != EOF));
+ if (ch < 128 || ch == EOF) {
+ // nothing to do, first 127 chars are the same in ascii and utf8
+ // 0xxxxxxx or end of file character
+ } else if ((ch & 0xF0) == 0xF0) {
+ // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ int c1 = ch & 0x07; ch = base.Read();
+ int c2 = ch & 0x3F; ch = base.Read();
+ int c3 = ch & 0x3F; ch = base.Read();
+ int c4 = ch & 0x3F;
+ ch = (((((c1 << 6) | c2) << 6) | c3) << 6) | c4;
+ } else if ((ch & 0xE0) == 0xE0) {
+ // 1110xxxx 10xxxxxx 10xxxxxx
+ int c1 = ch & 0x0F; ch = base.Read();
+ int c2 = ch & 0x3F; ch = base.Read();
+ int c3 = ch & 0x3F;
+ ch = (((c1 << 6) | c2) << 6) | c3;
+ } else if ((ch & 0xC0) == 0xC0) {
+ // 110xxxxx 10xxxxxx
+ int c1 = ch & 0x1F; ch = base.Read();
+ int c2 = ch & 0x3F;
+ ch = (c1 << 6) | c2;
+ }
+ return ch;
+ }
+}
+
+//-----------------------------------------------------------------------------------
+// Scanner
+//-----------------------------------------------------------------------------------
+public class Scanner {
+ const char EOL = '\n';
+ const int eofSym = 0; /* pdt */
+ const int maxT = 96;
+ const int noSym = 96;
+
+
+ [ContractInvariantMethod]
+ void objectInvariant(){
+ Contract.Invariant(this._buffer != null);
+ Contract.Invariant(t != null);
+ Contract.Invariant(start != null);
+ Contract.Invariant(tokens != null);
+ Contract.Invariant(pt != null);
+ Contract.Invariant(tval != null);
+ Contract.Invariant(Filename != null);
+ Contract.Invariant(errorHandler != null);
+ }
+
+ private Buffer/*!*/ _buffer; // scanner buffer
+
+ public Buffer/*!*/ buffer {
+ get {
+ Contract.Ensures(Contract.Result<Buffer>() != null);
+ return this._buffer;
+ }
+ set {
+ Contract.Requires(value != null);
+ this._buffer = value;
+ }
+ }
+
+ Token/*!*/ t; // current token
+ int ch; // current input character
+ int pos; // byte position of current character
+ int charPos;
+ int col; // column number of current character
+ int line; // line number of current character
+ int oldEols; // EOLs that appeared in a comment;
+ static readonly Hashtable/*!*/ start; // maps first token character to start state
+
+ Token/*!*/ tokens; // list of tokens already peeked (first token is a dummy)
+ Token/*!*/ pt; // current peek token
+
+ char[]/*!*/ tval = new char[128]; // text of current token
+ int tlen; // length of current token
+
+ private string/*!*/ Filename;
+ private Errors/*!*/ errorHandler;
+
+ static Scanner() {
+ start = new Hashtable(128);
+ for (int i = 35; i <= 36; ++i) start[i] = 2;
+ for (int i = 39; i <= 39; ++i) start[i] = 2;
+ for (int i = 46; i <= 46; ++i) start[i] = 2;
+ for (int i = 63; i <= 63; ++i) start[i] = 2;
+ for (int i = 65; i <= 90; ++i) start[i] = 2;
+ for (int i = 94; i <= 122; ++i) start[i] = 2;
+ for (int i = 126; i <= 126; ++i) start[i] = 2;
+ for (int i = 48; i <= 57; ++i) start[i] = 16;
+ for (int i = 34; i <= 34; ++i) start[i] = 6;
+ start[92] = 1;
+ start[59] = 19;
+ start[40] = 20;
+ start[41] = 21;
+ start[58] = 55;
+ start[44] = 22;
+ start[91] = 23;
+ start[93] = 24;
+ start[60] = 56;
+ start[62] = 57;
+ start[123] = 25;
+ start[125] = 58;
+ start[61] = 59;
+ start[42] = 60;
+ start[124] = 61;
+ start[8660] = 28;
+ start[8658] = 30;
+ start[8656] = 31;
+ start[38] = 32;
+ start[8743] = 34;
+ start[8744] = 36;
+ start[33] = 62;
+ start[8800] = 40;
+ start[8804] = 41;
+ start[8805] = 42;
+ start[43] = 63;
+ start[45] = 44;
+ start[47] = 45;
+ start[172] = 47;
+ start[8704] = 50;
+ start[8707] = 51;
+ start[955] = 52;
+ start[8226] = 54;
+ start[Buffer.EOF] = -1;
+
+ }
+
+// [NotDelayed]
+ public Scanner (string/*!*/ fileName, Errors/*!*/ errorHandler, bool useBaseName = false) : base() {
+ Contract.Requires(fileName != null);
+ Contract.Requires(errorHandler != null);
+ this.errorHandler = errorHandler;
+ pt = tokens = new Token(); // first token is a dummy
+ t = new Token(); // dummy because t is a non-null field
+ try {
+ Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
+ this._buffer = new Buffer(stream, false);
+ Filename = useBaseName? GetBaseName(fileName): fileName;
+ Init();
+ } catch (IOException) {
+ throw new FatalError("Cannot open file " + fileName);
+ }
+ }
+
+// [NotDelayed]
+ public Scanner (Stream/*!*/ s, Errors/*!*/ errorHandler, string/*!*/ fileName, bool useBaseName = false) : base() {
+ Contract.Requires(s != null);
+ Contract.Requires(errorHandler != null);
+ Contract.Requires(fileName != null);
+ pt = tokens = new Token(); // first token is a dummy
+ t = new Token(); // dummy because t is a non-null field
+ this._buffer = new Buffer(s, true);
+ this.errorHandler = errorHandler;
+ this.Filename = useBaseName? GetBaseName(fileName) : fileName;
+ Init();
+ }
+
+ string GetBaseName(string fileName) {
+ return System.IO.Path.GetFileName(fileName); // Return basename
+ }
+
+ void Init() {
+ pos = -1; line = 1; col = 0;
+ oldEols = 0;
+ NextCh();
+ if (ch == 0xEF) { // check optional byte order mark for UTF-8
+ NextCh(); int ch1 = ch;
+ NextCh(); int ch2 = ch;
+ if (ch1 != 0xBB || ch2 != 0xBF) {
+ throw new FatalError(String.Format("illegal byte order mark: EF {0,2:X} {1,2:X}", ch1, ch2));
+ }
+ buffer = new UTF8Buffer(buffer); col = 0;
+ NextCh();
+ }
+ pt = tokens = new Token(); // first token is a dummy
+ }
+
+ string/*!*/ ReadToEOL(){
+ Contract.Ensures(Contract.Result<string>() != null);
+ int p = buffer.Pos;
+ int ch = buffer.Read();
+ // replace isolated '\r' by '\n' in order to make
+ // eol handling uniform across Windows, Unix and Mac
+ if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
+ while (ch != EOL && ch != Buffer.EOF){
+ ch = buffer.Read();
+ // replace isolated '\r' by '\n' in order to make
+ // eol handling uniform across Windows, Unix and Mac
+ if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
+ }
+ string/*!*/ s = buffer.GetString(p, buffer.Pos);
+ Contract.Assert(s!=null);
+ return s;
+ }
+
+ void NextCh() {
+ if (oldEols > 0) { ch = EOL; oldEols--; }
+ else {
+// pos = buffer.Pos;
+// ch = buffer.Read(); col++;
+// // replace isolated '\r' by '\n' in order to make
+// // eol handling uniform across Windows, Unix and Mac
+// if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
+// if (ch == EOL) { line++; col = 0; }
+
+ while (true) {
+ pos = buffer.Pos;
+ ch = buffer.Read(); col++;
+ // replace isolated '\r' by '\n' in order to make
+ // eol handling uniform across Windows, Unix and Mac
+ if (ch == '\r' && buffer.Peek() != '\n') ch = EOL;
+ if (ch == EOL) {
+ line++; col = 0;
+ } else if (ch == '#' && col == 1) {
+ int prLine = line;
+ int prColumn = 0;
+
+ string/*!*/ hashLine = ReadToEOL();
+ Contract.Assert(hashLine!=null);
+ col = 0;
+ line++;
+
+ hashLine = hashLine.TrimEnd(null);
+ if (hashLine.StartsWith("line ") || hashLine == "line") {
+ // parse #line pragma: #line num [filename]
+ string h = hashLine.Substring(4).TrimStart(null);
+ int x = h.IndexOf(' ');
+ if (x == -1) {
+ x = h.Length; // this will be convenient below when we look for a filename
+ }
+ try {
+ int li = int.Parse(h.Substring(0, x));
+
+ h = h.Substring(x).Trim();
+
+ // act on #line
+ line = li;
+ if (h.Length != 0) {
+ // a filename was specified
+ Filename = h;
+ }
+ continue; // successfully parsed and acted on the #line pragma
+
+ } catch (FormatException) {
+ // just fall down through to produce an error message
+ }
+ this.errorHandler.SemErr(Filename, prLine, prColumn, "Malformed (#line num [filename]) pragma: #" + hashLine);
+ continue;
+ }
+
+ this.errorHandler.SemErr(Filename, prLine, prColumn, "Unrecognized pragma: #" + hashLine);
+ continue;
+ }
+ return;
+ }
+
+
+ }
+
+ }
+
+ void AddCh() {
+ if (tlen >= tval.Length) {
+ char[] newBuf = new char[2 * tval.Length];
+ Array.Copy(tval, 0, newBuf, 0, tval.Length);
+ tval = newBuf;
+ }
+ if (ch != Buffer.EOF) {
+ tval[tlen++] = (char) ch;
+ NextCh();
+ }
+ }
+
+
+
+ bool Comment0() {
+ int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos;
+ NextCh();
+ if (ch == '/') {
+ NextCh();
+ for(;;) {
+ if (ch == 10) {
+ level--;
+ if (level == 0) { oldEols = line - line0; NextCh(); return true; }
+ NextCh();
+ } else if (ch == Buffer.EOF) return false;
+ else NextCh();
+ }
+ } else {
+ buffer.Pos = pos0; NextCh(); line = line0; col = col0; charPos = charPos0;
+ }
+ return false;
+ }
+
+ bool Comment1() {
+ int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos;
+ NextCh();
+ if (ch == '*') {
+ NextCh();
+ for(;;) {
+ if (ch == '*') {
+ NextCh();
+ if (ch == '/') {
+ level--;
+ if (level == 0) { oldEols = line - line0; NextCh(); return true; }
+ NextCh();
+ }
+ } else if (ch == '/') {
+ NextCh();
+ if (ch == '*') {
+ level++; NextCh();
+ }
+ } else if (ch == Buffer.EOF) return false;
+ else NextCh();
+ }
+ } else {
+ buffer.Pos = pos0; NextCh(); line = line0; col = col0; charPos = charPos0;
+ }
+ return false;
+ }
+
+
+ void CheckLiteral() {
+ switch (t.val) {
+ case "var": t.kind = 7; break;
+ case "where": t.kind = 13; break;
+ case "int": t.kind = 14; break;
+ case "real": t.kind = 15; break;
+ case "bool": t.kind = 16; break;
+ case "fp": t.kind = 97; break;
+ case "float": case "float16": case "float32": case "float64": case "float128": t.kind = 98; break;
+ case "const": t.kind = 21; break;
+ case "unique": t.kind = 22; break;
+ case "extends": t.kind = 23; break;
+ case "complete": t.kind = 24; break;
+ case "function": t.kind = 25; break;
+ case "returns": t.kind = 26; break;
+ case "axiom": t.kind = 29; break;
+ case "type": t.kind = 30; break;
+ case "procedure": t.kind = 32; break;
+ case "implementation": t.kind = 33; break;
+ case "modifies": t.kind = 34; break;
+ case "free": t.kind = 35; break;
+ case "requires": t.kind = 36; break;
+ case "ensures": t.kind = 37; break;
+ case "goto": t.kind = 38; break;
+ case "return": t.kind = 39; break;
+ case "if": t.kind = 40; break;
+ case "else": t.kind = 41; break;
+ case "while": t.kind = 42; break;
+ case "invariant": t.kind = 43; break;
+ case "break": t.kind = 45; break;
+ case "assert": t.kind = 46; break;
+ case "assume": t.kind = 47; break;
+ case "havoc": t.kind = 48; break;
+ case "yield": t.kind = 49; break;
+ case "async": t.kind = 51; break;
+ case "call": t.kind = 52; break;
+ case "par": t.kind = 53; break;
+ case "div": t.kind = 76; break;
+ case "mod": t.kind = 77; break;
+ case "false": t.kind = 82; break;
+ case "true": t.kind = 83; break;
+ case "old": t.kind = 84; break;
+ case "then": t.kind = 87; break;
+ case "forall": t.kind = 88; break;
+ case "exists": t.kind = 90; break;
+ case "lambda": t.kind = 92; break;
+ default: break;
+ }
+ }
+
+ Token/*!*/ NextToken() {
+ Contract.Ensures(Contract.Result<Token>() != null);
+ while (ch == ' ' ||
+ ch >= 9 && ch <= 10 || ch == 13
+ ) NextCh();
+ if (ch == '/' && Comment0() ||ch == '/' && Comment1()) return NextToken();
+ int recKind = noSym;
+ int recEnd = pos;
+ t = new Token();
+ t.pos = pos; t.col = col; t.line = line;
+ t.filename = this.Filename;
+ int state;
+ if (start.ContainsKey(ch)) {
+ Contract.Assert(start[ch] != null);
+ state = (int) start[ch];
+ }
+ else { state = 0; }
+ tlen = 0; AddCh();
+
+ switch (state) {
+ case -1: { t.kind = eofSym; break; } // NextCh already done
+ case 0: {
+ if (recKind != noSym) {
+ tlen = recEnd - t.pos;
+ SetScannerBehindT();
+ }
+ t.kind = recKind; break;
+ } // NextCh already done
+ case 1:
+ if (ch >= '#' && ch <= '$' || ch == 39 || ch == '.' || ch == '?' || ch >= 'A' && ch <= 'Z' || ch >= '^' && ch <= 'z' || ch == '~') {AddCh(); goto case 2;}
+ else {goto case 0;}
+ case 2:
+ recEnd = pos; recKind = 1;
+ if (ch >= '#' && ch <= '$' || ch == 39 || ch == '.' || ch >= '0' && ch <= '9' || ch == '?' || ch >= 'A' && ch <= 'Z' || ch >= '^' && ch <= 'z' || ch == '~') {AddCh(); goto case 2;}
+ else {t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t;}
+ case 3:
+ if (ch == 'v') {AddCh(); goto case 4;}
+ else {goto case 0;}
+ case 4:
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 5;}
+ else {goto case 0;}
+ case 5:
+ recEnd = pos; recKind = 2;
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 5;}
+ else {t.kind = 2; break;}
+ case 6:
+ if (ch == '"') {AddCh(); goto case 7;}
+ else if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 6;}
+ else if (ch == 92) {AddCh(); goto case 17;}
+ else {goto case 0;}
+ case 7:
+ {t.kind = 4; break;}
+ case 8:
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
+ else if (ch == '-') {AddCh(); goto case 9;}
+ else {goto case 0;}
+ case 9:
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
+ else {goto case 0;}
+ case 10:
+ recEnd = pos; recKind = 5;
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 10;}
+ else {t.kind = 5; break;}
+ case 11:
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 12;}
+ else {goto case 0;}
+ case 12:
+ recEnd = pos; recKind = 6;
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 12;}
+ else if (ch == 'e') {AddCh(); goto case 13;}
+ else {t.kind = 6; break;}
+ case 13:
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 15;}
+ else if (ch == '-') {AddCh(); goto case 14;}
+ else {goto case 0;}
+ case 14:
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 15;}
+ else {goto case 0;}
+ case 15:
+ recEnd = pos; recKind = 6;
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 15;}
+ else {t.kind = 6; break;}
+ case 16:
+ recEnd = pos; recKind = 3;
+ if (ch >= '0' && ch <= '9') {AddCh(); goto case 16;}
+ else if (ch == 'b') {AddCh(); goto case 3;}
+ else if (ch == 'e') {AddCh(); goto case 8;}
+ else if (ch == '.') {AddCh(); goto case 11;}
+ else {t.kind = 3; break;}
+ case 17:
+ if (ch == '"') {AddCh(); goto case 18;}
+ else if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 6;}
+ else if (ch == 92) {AddCh(); goto case 17;}
+ else {goto case 0;}
+ case 18:
+ recEnd = pos; recKind = 4;
+ if (ch == '"') {AddCh(); goto case 7;}
+ else if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); goto case 6;}
+ else if (ch == 92) {AddCh(); goto case 17;}
+ else {t.kind = 4; break;}
+ case 19:
+ {t.kind = 8; break;}
+ case 20:
+ {t.kind = 9; break;}
+ case 21:
+ {t.kind = 10; break;}
+ case 22:
+ {t.kind = 12; break;}
+ case 23:
+ {t.kind = 17; break;}
+ case 24:
+ {t.kind = 18; break;}
+ case 25:
+ {t.kind = 27; break;}
+ case 26:
+ {t.kind = 50; break;}
+ case 27:
+ {t.kind = 55; break;}
+ case 28:
+ {t.kind = 56; break;}
+ case 29:
+ {t.kind = 57; break;}
+ case 30:
+ {t.kind = 58; break;}
+ case 31:
+ {t.kind = 60; break;}
+ case 32:
+ if (ch == '&') {AddCh(); goto case 33;}
+ else {goto case 0;}
+ case 33:
+ {t.kind = 61; break;}
+ case 34:
+ {t.kind = 62; break;}
+ case 35:
+ {t.kind = 63; break;}
+ case 36:
+ {t.kind = 64; break;}
+ case 37:
+ {t.kind = 67; break;}
+ case 38:
+ {t.kind = 68; break;}
+ case 39:
+ {t.kind = 69; break;}
+ case 40:
+ {t.kind = 70; break;}
+ case 41:
+ {t.kind = 71; break;}
+ case 42:
+ {t.kind = 72; break;}
+ case 43:
+ {t.kind = 73; break;}
+ case 44:
+ {t.kind = 75; break;}
+ case 45:
+ {t.kind = 78; break;}
+ case 46:
+ {t.kind = 79; break;}
+ case 47:
+ {t.kind = 81; break;}
+ case 48:
+ {t.kind = 85; break;}
+ case 49:
+ {t.kind = 86; break;}
+ case 50:
+ {t.kind = 89; break;}
+ case 51:
+ {t.kind = 91; break;}
+ case 52:
+ {t.kind = 93; break;}
+ case 53:
+ {t.kind = 94; break;}
+ case 54:
+ {t.kind = 95; break;}
+ case 55:
+ recEnd = pos; recKind = 11;
+ if (ch == '=') {AddCh(); goto case 26;}
+ else if (ch == ':') {AddCh(); goto case 53;}
+ else {t.kind = 11; break;}
+ case 56:
+ recEnd = pos; recKind = 19;
+ if (ch == '=') {AddCh(); goto case 64;}
+ else if (ch == ':') {AddCh(); goto case 39;}
+ else {t.kind = 19; break;}
+ case 57:
+ recEnd = pos; recKind = 20;
+ if (ch == '=') {AddCh(); goto case 37;}
+ else {t.kind = 20; break;}
+ case 58:
+ recEnd = pos; recKind = 28;
+ if (ch == '|') {AddCh(); goto case 49;}
+ else {t.kind = 28; break;}
+ case 59:
+ recEnd = pos; recKind = 31;
+ if (ch == '=') {AddCh(); goto case 65;}
+ else {t.kind = 31; break;}
+ case 60:
+ recEnd = pos; recKind = 44;
+ if (ch == '*') {AddCh(); goto case 46;}
+ else {t.kind = 44; break;}
+ case 61:
+ recEnd = pos; recKind = 54;
+ if (ch == '|') {AddCh(); goto case 35;}
+ else if (ch == '{') {AddCh(); goto case 48;}
+ else {t.kind = 54; break;}
+ case 62:
+ recEnd = pos; recKind = 80;
+ if (ch == '=') {AddCh(); goto case 38;}
+ else {t.kind = 80; break;}
+ case 63:
+ recEnd = pos; recKind = 74;
+ if (ch == '+') {AddCh(); goto case 43;}
+ else {t.kind = 74; break;}
+ case 64:
+ recEnd = pos; recKind = 66;
+ if (ch == '=') {AddCh(); goto case 66;}
+ else {t.kind = 66; break;}
+ case 65:
+ recEnd = pos; recKind = 65;
+ if (ch == '>') {AddCh(); goto case 29;}
+ else {t.kind = 65; break;}
+ case 66:
+ recEnd = pos; recKind = 59;
+ if (ch == '>') {AddCh(); goto case 27;}
+ else {t.kind = 59; break;}
+
+ }
+ t.val = new String(tval, 0, tlen);
+ return t;
+ }
+
+ private void SetScannerBehindT() {
+ buffer.Pos = t.pos;
+ NextCh();
+ line = t.line; col = t.col;
+ for (int i = 0; i < tlen; i++) NextCh();
+ }
+
+ // get the next token (possibly a token already seen during peeking)
+ public Token/*!*/ Scan () {
+ Contract.Ensures(Contract.Result<Token>() != null);
+ if (tokens.next == null) {
+ return NextToken();
+ } else {
+ pt = tokens = tokens.next;
+ return tokens;
+ }
+ }
+
+ // peek for the next token, ignore pragmas
+ public Token/*!*/ Peek () {
+ Contract.Ensures(Contract.Result<Token>() != null);
+ do {
+ if (pt.next == null) {
+ pt.next = NextToken();
+ }
+ pt = pt.next;
+ } while (pt.kind > maxT); // skip pragmas
+
+ return pt;
+ }
+
+ // make sure that peeking starts at the current scan position
+ public void ResetPeek () { pt = tokens; }
+
+} // end Scanner
+
+public delegate void ErrorProc(int n, string filename, int line, int col);
+
+
} \ No newline at end of file
diff --git a/Source/Core/StandardVisitor.cs b/Source/Core/StandardVisitor.cs
index 97215cfb..c3d8a672 100644
--- a/Source/Core/StandardVisitor.cs
+++ b/Source/Core/StandardVisitor.cs
@@ -1,1167 +1,1167 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------
-// BoogiePL - StandardVisitor.cs
-//---------------------------------------------------------------------------------------------
-
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Linq;
-
-namespace Microsoft.Boogie {
- [ContractClass(typeof(VisitorContracts))]
- /// <summary>
- /// Base for all classes that process the Absy using the visitor pattern.
- /// </summary>
- public abstract class Visitor {
- /// <summary>
- /// Switches on node.NodeType to call a visitor method that has been specialized for node.
- /// </summary>
- /// <param name="a">The Absy node to be visited.</param>
- /// <returns> Returns null if node is null. Otherwise returns an updated node (possibly a different object).</returns>
- public abstract Absy/*!*/ Visit(Absy/*!*/ node);
-
- /// <summary>
- /// Transfers the state from one visitor to another. This enables separate visitor instances to cooperative process a single IR.
- /// </summary>
- public virtual void TransferStateTo(Visitor targetVisitor) {
- }
-
- public virtual IList<Expr> VisitExprSeq(IList<Expr> list) {
- Contract.Requires(list != null);
- Contract.Ensures(Contract.Result<IList<Expr>>() != null);
- lock (list)
- {
- for (int i = 0, n = list.Count; i < n; i++)
- list[i] = (Expr)this.Visit(cce.NonNull(list[i]));
- }
- return list;
- }
- }
- [ContractClassFor(typeof(Visitor))]
- abstract class VisitorContracts : Visitor {
- public override Absy Visit(Absy node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
-
- throw new System.NotImplementedException();
- }
- }
-
- /// <summary>
- /// Walks an IR, mutating it into a new form. (For a subclass that does not mutate the IR, see ReadOnlyVisitor.)
- /// </summary>
- public abstract class StandardVisitor : Visitor {
- public Visitor callingVisitor;
-
- public StandardVisitor() {
- }
- public StandardVisitor(Visitor callingVisitor) {
- this.callingVisitor = callingVisitor;
- }
- public override Absy Visit(Absy node) {
- return node.StdDispatch(this);
- }
- public virtual Cmd VisitAssertCmd(AssertCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- node.Expr = this.VisitExpr(node.Expr);
- return node;
- }
- public virtual Cmd VisitAssignCmd(AssignCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- for (int i = 0; i < node.Lhss.Count; ++i) {
- node.SetLhs(i, cce.NonNull((AssignLhs)this.Visit(node.Lhss[i])));
- node.SetRhs(i, cce.NonNull((Expr/*!*/)this.Visit(node.Rhss[i])));
- }
- return node;
- }
- public virtual Cmd VisitAssumeCmd(AssumeCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- node.Expr = this.VisitExpr(node.Expr);
- return node;
- }
- public virtual AtomicRE VisitAtomicRE(AtomicRE node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AtomicRE>() != null);
- node.b = this.VisitBlock(node.b);
- return node;
- }
- public virtual Axiom VisitAxiom(Axiom node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Axiom>() != null);
- node.Expr = this.VisitExpr(node.Expr);
- return node;
- }
- public virtual Type VisitBasicType(BasicType node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.VisitType(node);
- }
- public virtual Type VisitFloatType(FloatType node)
- {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.VisitType(node);
- }
- public virtual Expr VisitBvConcatExpr(BvConcatExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node.E0 = this.VisitExpr(node.E0);
- node.E1 = this.VisitExpr(node.E1);
- return node;
- }
- public virtual Type VisitBvType(BvType node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.VisitType(node);
- }
- public virtual Type VisitBvTypeProxy(BvTypeProxy node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // if the type proxy is instantiated with some more
- // specific type, we visit the instantiation
- if (node.ProxyFor != null)
- return (Type)this.Visit(node.ProxyFor);
- return this.VisitType(node);
- }
- public virtual Block VisitBlock(Block node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Block>() != null);
- node.Cmds = this.VisitCmdSeq(node.Cmds);
- node.TransferCmd = (TransferCmd)this.Visit(cce.NonNull(node.TransferCmd));
- return node;
- }
- public virtual Expr VisitCodeExpr(CodeExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node.LocVars = this.VisitVariableSeq(node.LocVars);
- node.Blocks = this.VisitBlockList(node.Blocks);
- return node;
- }
- public virtual List<Block> VisitBlockSeq(List<Block> blockSeq) {
- Contract.Requires(blockSeq != null);
- Contract.Ensures(Contract.Result<List<Block>>() != null);
- lock (blockSeq)
- {
- for (int i = 0, n = blockSeq.Count; i < n; i++)
- blockSeq[i] = this.VisitBlock(cce.NonNull(blockSeq[i]));
- }
- return blockSeq;
- }
- public virtual List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks) {
- Contract.Requires(blocks != null);
- Contract.Ensures(Contract.Result<List<Block>>() != null);
- for (int i = 0, n = blocks.Count; i < n; i++) {
- blocks[i] = this.VisitBlock(blocks[i]);
- }
- return blocks;
- }
- public virtual BoundVariable VisitBoundVariable(BoundVariable node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<BoundVariable>() != null);
- node = (BoundVariable)this.VisitVariable(node);
- return node;
- }
- public virtual Cmd VisitCallCmd(CallCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- for (int i = 0; i < node.Ins.Count; ++i)
- if (node.Ins[i] != null)
- node.Ins[i] = this.VisitExpr(cce.NonNull(node.Ins[i]));
- for (int i = 0; i < node.Outs.Count; ++i)
- if (node.Outs[i] != null)
- node.Outs[i] = (IdentifierExpr)this.VisitIdentifierExpr(cce.NonNull(node.Outs[i]));
- return node;
- }
- public virtual Cmd VisitParCallCmd(ParCallCmd node)
- {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- for (int i = 0; i < node.CallCmds.Count; i++)
- {
- if (node.CallCmds[i] != null)
- node.CallCmds[i] = (CallCmd)this.VisitCallCmd(node.CallCmds[i]);
- }
- return node;
- }
- public virtual List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq) {
- Contract.Requires(cmdSeq != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- lock (cmdSeq)
- {
- for (int i = 0, n = cmdSeq.Count; i < n; i++)
- cmdSeq[i] = (Cmd)this.Visit(cce.NonNull(cmdSeq[i])); // call general Visit so subtypes of Cmd get visited by their particular visitor
- }
- return cmdSeq;
- }
- public virtual Choice VisitChoice(Choice node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Choice>() != null);
- node.rs = this.VisitRESeq(node.rs);
- return node;
- }
- public virtual Cmd VisitCommentCmd(CommentCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return node;
- }
- public virtual Constant VisitConstant(Constant node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Constant>() != null);
- return node;
- }
- public virtual CtorType VisitCtorType(CtorType node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<CtorType>() != null);
- lock (node)
- {
- for (int i = 0; i < node.Arguments.Count; ++i)
- node.Arguments[i] = cce.NonNull((Type/*!*/)this.Visit(node.Arguments[i]));
- }
- return node;
- }
- public virtual Declaration VisitDeclaration(Declaration node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Declaration>() != null);
- return node;
- }
- public virtual List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList) {
- Contract.Requires(declarationList != null);
- Contract.Ensures(Contract.Result<List<Declaration>>() != null);
- for (int i = 0, n = declarationList.Count; i < n; i++)
- declarationList[i] = cce.NonNull((Declaration/*!*/)this.Visit(declarationList[i]));
- return declarationList;
- }
- public virtual DeclWithFormals VisitDeclWithFormals(DeclWithFormals node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<DeclWithFormals>() != null);
- node.InParams = this.VisitVariableSeq(node.InParams);
- node.OutParams = this.VisitVariableSeq(node.OutParams);
- return node;
- }
- public virtual Expr VisitExistsExpr(ExistsExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node = (ExistsExpr)this.VisitQuantifierExpr(node);
- return node;
- }
- public virtual Expr VisitBvExtractExpr(BvExtractExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node.Bitvector = this.VisitExpr(node.Bitvector);
- return node;
- }
- public virtual Expr VisitExpr(Expr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Expr e = (Expr)this.Visit(node);
- return e;
- }
- public override IList<Expr> VisitExprSeq(IList<Expr> exprSeq) {
- //Contract.Requires(exprSeq != null);
- Contract.Ensures(Contract.Result<IList<Expr>>() != null);
- for (int i = 0, n = exprSeq.Count; i < n; i++)
- exprSeq[i] = this.VisitExpr(cce.NonNull(exprSeq[i]));
- return exprSeq;
- }
- public virtual Requires VisitRequires(Requires @requires) {
- Contract.Requires(@requires != null);
- Contract.Ensures(Contract.Result<Requires>() != null);
- @requires.Condition = this.VisitExpr(@requires.Condition);
- return @requires;
- }
- public virtual List<Requires> VisitRequiresSeq(List<Requires> requiresSeq) {
- Contract.Requires(requiresSeq != null);
- Contract.Ensures(Contract.Result<List<Requires>>() != null);
- for (int i = 0, n = requiresSeq.Count; i < n; i++)
- requiresSeq[i] = this.VisitRequires(requiresSeq[i]);
- return requiresSeq;
- }
- public virtual Ensures VisitEnsures(Ensures @ensures) {
- Contract.Requires(@ensures != null);
- Contract.Ensures(Contract.Result<Ensures>() != null);
- @ensures.Condition = this.VisitExpr(@ensures.Condition);
- return @ensures;
- }
- public virtual List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq) {
- Contract.Requires(ensuresSeq != null);
- Contract.Ensures(Contract.Result<List<Ensures>>() != null);
- for (int i = 0, n = ensuresSeq.Count; i < n; i++)
- ensuresSeq[i] = this.VisitEnsures(ensuresSeq[i]);
- return ensuresSeq;
- }
- public virtual Expr VisitForallExpr(ForallExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node = (ForallExpr)this.VisitQuantifierExpr(node);
- return node;
- }
- public virtual Expr VisitLambdaExpr(LambdaExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node = (LambdaExpr)this.VisitBinderExpr(node);
- return node;
- }
- public virtual Formal VisitFormal(Formal node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Formal>() != null);
- return node;
- }
- public virtual Function VisitFunction(Function node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- node = (Function)this.VisitDeclWithFormals(node);
- if (node.Body != null)
- node.Body = this.VisitExpr(node.Body);
- return node;
- }
- public virtual GlobalVariable VisitGlobalVariable(GlobalVariable node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<GlobalVariable>() != null);
- node = (GlobalVariable)this.VisitVariable(node);
- return node;
- }
- public virtual GotoCmd VisitGotoCmd(GotoCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<GotoCmd>() != null);
- // do not visit the labelTargets, or control-flow loops will lead to a looping visitor
- return node;
- }
- public virtual Cmd VisitHavocCmd(HavocCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- node.Vars = this.VisitIdentifierExprSeq(node.Vars);
- return node;
- }
- public virtual Expr VisitIdentifierExpr(IdentifierExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- if (node.Decl != null)
- node.Decl = this.VisitVariable(node.Decl);
- return node;
- }
- public virtual List<IdentifierExpr> VisitIdentifierExprSeq(List<IdentifierExpr> identifierExprSeq) {
- Contract.Requires(identifierExprSeq != null);
- Contract.Ensures(Contract.Result<List<IdentifierExpr>>() != null);
- lock (identifierExprSeq)
- {
- for (int i = 0, n = identifierExprSeq.Count; i < n; i++)
- identifierExprSeq[i] = (IdentifierExpr)this.VisitIdentifierExpr(cce.NonNull(identifierExprSeq[i]));
- }
- return identifierExprSeq;
- }
- public virtual Implementation VisitImplementation(Implementation node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Implementation>() != null);
- node.LocVars = this.VisitVariableSeq(node.LocVars);
- node.Blocks = this.VisitBlockList(node.Blocks);
- node.Proc = this.VisitProcedure(cce.NonNull(node.Proc));
- node = (Implementation)this.VisitDeclWithFormals(node); // do this first or last?
- return node;
- }
- public virtual Expr VisitLiteralExpr(LiteralExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- return node;
- }
-
- public virtual LocalVariable VisitLocalVariable(LocalVariable node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<LocalVariable>() != null);
- return node;
- }
-
- public virtual AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AssignLhs>() != null);
- node.Map = cce.NonNull((AssignLhs)this.Visit(node.Map));
- for (int i = 0; i < node.Indexes.Count; ++i)
- node.Indexes[i] = cce.NonNull((Expr)this.Visit(node.Indexes[i]));
- return node;
- }
- public virtual MapType VisitMapType(MapType node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<MapType>() != null);
- // not doing anything about the bound variables ... maybe
- // these should be visited as well ...
- //
- // NOTE: when overriding this method, you have to make sure that
- // the bound variables of the map type are updated correctly
- lock (node.Arguments)
- {
- for (int i = 0; i < node.Arguments.Count; ++i)
- node.Arguments[i] = cce.NonNull((Type/*!*/)this.Visit(node.Arguments[i]));
- }
- node.Result = cce.NonNull((Type/*!*/)this.Visit(node.Result));
- return node;
- }
- public virtual Type VisitMapTypeProxy(MapTypeProxy node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // if the type proxy is instantiated with some more
- // specific type, we visit the instantiation
- if (node.ProxyFor != null)
- return (Type)this.Visit(node.ProxyFor);
- return this.VisitType(node);
- }
-
- public virtual Expr VisitNAryExpr(NAryExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node.Args = this.VisitExprSeq(node.Args);
- return node;
- }
- public virtual Expr VisitOldExpr(OldExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node.Expr = this.VisitExpr(node.Expr);
- return node;
- }
- public virtual Procedure VisitProcedure(Procedure node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Procedure>() != null);
- node.Ensures = this.VisitEnsuresSeq(node.Ensures);
- node.InParams = this.VisitVariableSeq(node.InParams);
- node.Modifies = this.VisitIdentifierExprSeq(node.Modifies);
- node.OutParams = this.VisitVariableSeq(node.OutParams);
- node.Requires = this.VisitRequiresSeq(node.Requires);
- return node;
- }
- public virtual Program VisitProgram(Program node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Program>() != null);
- var decls = node.TopLevelDeclarations.ToList();
- node.ClearTopLevelDeclarations();
- node.AddTopLevelDeclarations(this.VisitDeclarationList(decls));
- return node;
- }
- public virtual QKeyValue VisitQKeyValue(QKeyValue node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<QKeyValue>() != null);
- var newParams = new List<object>();
- for (int i = 0, n = node.Params.Count; i < n; i++) {
- var e = node.Params[i] as Expr;
- newParams.Add(e != null ? this.Visit(e) : node.Params[i]);
- }
- node.ClearParams();
- node.AddParams(newParams);
- if (node.Next != null) {
- node.Next = (QKeyValue)this.Visit(node.Next);
- }
- return node;
- }
- public virtual BinderExpr VisitBinderExpr(BinderExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<BinderExpr>() != null);
- node.Body = this.VisitExpr(node.Body);
- node.Dummies = this.VisitVariableSeq(node.Dummies);
- //node.Type = this.VisitType(node.Type);
- return node;
- }
- public virtual QuantifierExpr VisitQuantifierExpr(QuantifierExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<QuantifierExpr>() != null);
- node = cce.NonNull((QuantifierExpr)this.VisitBinderExpr(node));
- if (node.Triggers != null) {
- node.Triggers = this.VisitTrigger(node.Triggers);
- }
- return node;
- }
- public virtual Cmd VisitRE(RE node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- return (Cmd)this.Visit(node); // Call general visit so subtypes get visited by their particular visitor
- }
- public virtual List<RE> VisitRESeq(List<RE> reSeq) {
- Contract.Requires(reSeq != null);
- Contract.Ensures(Contract.Result<List<RE>>() != null);
- for (int i = 0, n = reSeq.Count; i < n; i++)
- reSeq[i] = (RE)this.VisitRE(cce.NonNull(reSeq[i]));
- return reSeq;
- }
- public virtual ReturnCmd VisitReturnCmd(ReturnCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<ReturnCmd>() != null);
- return (ReturnCmd)this.VisitTransferCmd(node);
- }
- public virtual ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<ReturnExprCmd>() != null);
- node.Expr = this.VisitExpr(node.Expr);
- return node;
- }
- public virtual Sequential VisitSequential(Sequential node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Sequential>() != null);
- node.first = (RE)this.VisitRE(node.first);
- node.second = (RE)this.VisitRE(node.second);
- return node;
- }
- public virtual AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AssignLhs>() != null);
- node.AssignedVariable =
- (IdentifierExpr)this.VisitIdentifierExpr(node.AssignedVariable);
- return node;
- }
- public virtual Cmd VisitStateCmd(StateCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- node.Locals = this.VisitVariableSeq(node.Locals);
- node.Cmds = this.VisitCmdSeq(node.Cmds);
- return node;
- }
- public virtual TransferCmd VisitTransferCmd(TransferCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<TransferCmd>() != null);
- return node;
- }
- public virtual Trigger VisitTrigger(Trigger node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Trigger>() != null);
- Trigger origNext = node.Next;
- if (origNext != null) {
- Trigger newNext = this.VisitTrigger(origNext);
- if (newNext != origNext) {
- node = new Trigger(node.tok, node.Pos, node.Tr.ToList());
- node.Next = newNext;
- }
- }
- node.Tr = this.VisitExprSeq(node.Tr.ToList());
- return node;
- }
- // called by default for all nullary type constructors and type variables
- public virtual Type VisitType(Type node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return node;
- }
- public virtual TypedIdent VisitTypedIdent(TypedIdent node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<TypedIdent>() != null);
- node.Type = (Type)this.Visit(node.Type);
- return node;
- }
- public virtual Declaration VisitTypeCtorDecl(TypeCtorDecl node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Declaration>() != null);
- return this.VisitDeclaration(node);
- }
- public virtual Type VisitTypeSynonymAnnotation(TypeSynonymAnnotation node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- node.ExpandedType = cce.NonNull((Type/*!*/)this.Visit(node.ExpandedType));
- lock (node.Arguments)
- {
- for (int i = 0; i < node.Arguments.Count; ++i)
- node.Arguments[i] = cce.NonNull((Type/*!*/)this.Visit(node.Arguments[i]));
- }
- return node;
- }
- public virtual Declaration VisitTypeSynonymDecl(TypeSynonymDecl node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Declaration>() != null);
- return this.VisitDeclaration(node);
- }
- public virtual Type VisitTypeVariable(TypeVariable node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.VisitType(node);
- }
- public virtual Type VisitTypeProxy(TypeProxy node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- // if the type proxy is instantiated with some more
- // specific type, we visit the instantiation
- if (node.ProxyFor != null)
- return cce.NonNull((Type/*!*/)this.Visit(node.ProxyFor));
- return this.VisitType(node);
- }
- public virtual Type VisitUnresolvedTypeIdentifier(UnresolvedTypeIdentifier node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- return this.VisitType(node);
- }
- public virtual Variable VisitVariable(Variable node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Variable>() != null);
- node.TypedIdent = this.VisitTypedIdent(node.TypedIdent);
- return node;
- }
- public virtual List<Variable> VisitVariableSeq(List<Variable> variableSeq) {
- Contract.Requires(variableSeq != null);
- Contract.Ensures(Contract.Result<List<Variable>>() != null);
- lock (variableSeq)
- {
- for (int i = 0, n = variableSeq.Count; i < n; i++)
- variableSeq[i] = this.VisitVariable(cce.NonNull(variableSeq[i]));
- }
- return variableSeq;
- }
- public virtual YieldCmd VisitYieldCmd(YieldCmd node)
- {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<YieldCmd>() != null);
- return node;
- }
- public virtual Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- node.Ensures = this.VisitEnsures(node.Ensures);
- node.Expr = this.VisitExpr(node.Expr);
- return node;
- }
- public virtual Cmd VisitAssertRequiresCmd(AssertRequiresCmd node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- node.Requires = this.VisitRequires(node.Requires);
- node.Expr = this.VisitExpr(node.Expr);
- return node;
- }
- }
-
- /// <summary>
- /// A ReadOnlyVisitor visits all the nodes of a given Absy. The visitor may collect information from
- /// the nodes, may change fields contained in the data structure, but may not replace any nodes in the
- /// data structure. To enforce this, all Visit...(node) methods have a postcondition that says that
- /// the return value is equal to the given "node".
- /// </summary>
- public abstract class ReadOnlyVisitor : StandardVisitor
- {
- public ReadOnlyVisitor()
- {
- }
- public ReadOnlyVisitor(Visitor callingVisitor)
- {
- this.callingVisitor = callingVisitor;
- }
- public override Absy Visit(Absy node)
- {
- Contract.Ensures(Contract.Result<Absy>() == node);
- return node.StdDispatch(this);
- }
- public override Cmd VisitAssertCmd(AssertCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- this.VisitExpr(node.Expr);
- return node;
- }
- public override Cmd VisitAssignCmd(AssignCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- for (int i = 0; i < node.Lhss.Count; ++i)
- {
- this.Visit(node.Lhss[i]);
- this.Visit(node.Rhss[i]);
- }
- return node;
- }
- public override Cmd VisitAssumeCmd(AssumeCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- this.VisitExpr(node.Expr);
- return node;
- }
- public override AtomicRE VisitAtomicRE(AtomicRE node)
- {
- Contract.Ensures(Contract.Result<AtomicRE>() == node);
- this.VisitBlock(node.b);
- return node;
- }
- public override Axiom VisitAxiom(Axiom node)
- {
- Contract.Ensures(Contract.Result<Axiom>() == node);
- this.VisitExpr(node.Expr);
- return node;
- }
- public override Type VisitBasicType(BasicType node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- return this.VisitType(node);
- }
- public override Expr VisitBvConcatExpr(BvConcatExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- this.VisitExpr(node.E0);
- this.VisitExpr(node.E1);
- return node;
- }
- public override Type VisitBvType(BvType node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- return this.VisitType(node);
- }
- public override Type VisitBvTypeProxy(BvTypeProxy node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- // if the type proxy is instantiated with some more
- // specific type, we visit the instantiation
- if (node.ProxyFor != null)
- this.Visit(node.ProxyFor);
- return this.VisitType(node);
- }
- public override Block VisitBlock(Block node)
- {
- Contract.Ensures(Contract.Result<Block>() == node);
- this.VisitCmdSeq(node.Cmds);
- this.Visit(cce.NonNull(node.TransferCmd));
- return node;
- }
- public override Expr VisitCodeExpr(CodeExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- this.VisitVariableSeq(node.LocVars);
- this.VisitBlockList(node.Blocks);
- return node;
- }
- public override List<Block> VisitBlockSeq(List<Block> blockSeq)
- {
- Contract.Ensures(Contract.Result<List<Block>>() == blockSeq);
- for (int i = 0, n = blockSeq.Count; i < n; i++)
- this.VisitBlock(cce.NonNull(blockSeq[i]));
- return blockSeq;
- }
- public override List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks)
- {
- Contract.Ensures(Contract.Result<List<Block>>() == blocks);
- for (int i = 0, n = blocks.Count; i < n; i++)
- {
- this.VisitBlock(blocks[i]);
- }
- return blocks;
- }
- public override BoundVariable VisitBoundVariable(BoundVariable node)
- {
- Contract.Ensures(Contract.Result<BoundVariable>() == node);
- return (BoundVariable)this.VisitVariable(node);
- }
- public override Cmd VisitCallCmd(CallCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- for (int i = 0; i < node.Ins.Count; ++i)
- if (node.Ins[i] != null)
- this.VisitExpr(node.Ins[i]);
- for (int i = 0; i < node.Outs.Count; ++i)
- if (node.Outs[i] != null)
- this.VisitIdentifierExpr(node.Outs[i]);
- return node;
- }
- public override Cmd VisitParCallCmd(ParCallCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- for (int i = 0; i < node.CallCmds.Count; i++)
- {
- if (node.CallCmds[i] != null)
- this.VisitCallCmd(node.CallCmds[i]);
- }
- return node;
- }
- public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq)
- {
- Contract.Ensures(Contract.Result<List<Cmd>>() == cmdSeq);
- for (int i = 0, n = cmdSeq.Count; i < n; i++)
- this.Visit(cce.NonNull(cmdSeq[i])); // call general Visit so subtypes of Cmd get visited by their particular visitor
- return cmdSeq;
- }
- public override Choice VisitChoice(Choice node)
- {
- Contract.Ensures(Contract.Result<Choice>() == node);
- this.VisitRESeq(node.rs);
- return node;
- }
- public override Cmd VisitCommentCmd(CommentCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- return node;
- }
- public override Constant VisitConstant(Constant node)
- {
- Contract.Ensures(Contract.Result<Constant>() == node);
- return node;
- }
- public override CtorType VisitCtorType(CtorType node)
- {
- Contract.Ensures(Contract.Result<CtorType>() == node);
- for (int i = 0; i < node.Arguments.Count; ++i)
- this.Visit(node.Arguments[i]);
- return node;
- }
- public override Declaration VisitDeclaration(Declaration node)
- {
- Contract.Ensures(Contract.Result<Declaration>() == node);
- return node;
- }
- public override List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList)
- {
- Contract.Ensures(Contract.Result<List<Declaration>>() == declarationList);
- for (int i = 0, n = declarationList.Count; i < n; i++)
- this.Visit(declarationList[i]);
- return declarationList;
- }
- public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node)
- {
- Contract.Ensures(Contract.Result<DeclWithFormals>() == node);
- this.VisitVariableSeq(node.InParams);
- this.VisitVariableSeq(node.OutParams);
- return node;
- }
- public override Expr VisitExistsExpr(ExistsExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- return (ExistsExpr)this.VisitQuantifierExpr(node);
- }
- public override Expr VisitBvExtractExpr(BvExtractExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- this.VisitExpr(node.Bitvector);
- return node;
- }
- public override Expr VisitExpr(Expr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- return (Expr)this.Visit(node);
- }
- public override IList<Expr> VisitExprSeq(IList<Expr> exprSeq)
- {
- Contract.Ensures(Contract.Result<IList<Expr>>() == exprSeq);
- for (int i = 0, n = exprSeq.Count; i < n; i++)
- this.VisitExpr(cce.NonNull(exprSeq[i]));
- return exprSeq;
- }
- public override Requires VisitRequires(Requires requires)
- {
- Contract.Ensures(Contract.Result<Requires>() == requires);
- this.VisitExpr(requires.Condition);
- return requires;
- }
- public override List<Requires> VisitRequiresSeq(List<Requires> requiresSeq)
- {
- Contract.Ensures(Contract.Result<List<Requires>>() == requiresSeq);
- for (int i = 0, n = requiresSeq.Count; i < n; i++)
- this.VisitRequires(requiresSeq[i]);
- return requiresSeq;
- }
- public override Ensures VisitEnsures(Ensures ensures)
- {
- Contract.Ensures(Contract.Result<Ensures>() == ensures);
- this.VisitExpr(ensures.Condition);
- return ensures;
- }
- public override List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq)
- {
- Contract.Ensures(Contract.Result<List<Ensures>>() == ensuresSeq);
- for (int i = 0, n = ensuresSeq.Count; i < n; i++)
- this.VisitEnsures(ensuresSeq[i]);
- return ensuresSeq;
- }
- public override Expr VisitForallExpr(ForallExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- return (ForallExpr)this.VisitQuantifierExpr(node);
- }
- public override Expr VisitLambdaExpr(LambdaExpr node) {
- Contract.Ensures(Contract.Result<Expr>() == node);
- return this.VisitBinderExpr(node);
- }
- public override Formal VisitFormal(Formal node)
- {
- Contract.Ensures(Contract.Result<Formal>() == node);
- return node;
- }
- public override Function VisitFunction(Function node)
- {
- Contract.Ensures(Contract.Result<Function>() == node);
- node = (Function)this.VisitDeclWithFormals(node);
- if (node.Body != null)
- this.VisitExpr(node.Body);
- return node;
- }
- public override GlobalVariable VisitGlobalVariable(GlobalVariable node)
- {
- Contract.Ensures(Contract.Result<GlobalVariable>() == node);
- return (GlobalVariable)this.VisitVariable(node);
- }
- public override GotoCmd VisitGotoCmd(GotoCmd node)
- {
- Contract.Ensures(Contract.Result<GotoCmd>() == node);
- // do not visit the labelTargets, or control-flow loops will lead to a looping visitor
- return node;
- }
- public override Cmd VisitHavocCmd(HavocCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- this.VisitIdentifierExprSeq(node.Vars);
- return node;
- }
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- if (node.Decl != null)
- this.VisitVariable(node.Decl);
- return node;
- }
- public override List<IdentifierExpr> VisitIdentifierExprSeq(List<IdentifierExpr> identifierExprSeq)
- {
- Contract.Ensures(Contract.Result<List<IdentifierExpr>>() == identifierExprSeq);
- for (int i = 0, n = identifierExprSeq.Count; i < n; i++)
- this.VisitIdentifierExpr(cce.NonNull(identifierExprSeq[i]));
- return identifierExprSeq;
- }
- public override Implementation VisitImplementation(Implementation node)
- {
- Contract.Ensures(Contract.Result<Implementation>() == node);
- this.VisitVariableSeq(node.LocVars);
- this.VisitBlockList(node.Blocks);
- this.VisitProcedure(cce.NonNull(node.Proc));
- return (Implementation)this.VisitDeclWithFormals(node); // do this first or last?
- }
- public override Expr VisitLiteralExpr(LiteralExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- return node;
- }
-
- public override LocalVariable VisitLocalVariable(LocalVariable node)
- {
- Contract.Ensures(Contract.Result<LocalVariable>() == node);
- return node;
- }
-
- public override AssignLhs VisitMapAssignLhs(MapAssignLhs node)
- {
- Contract.Ensures(Contract.Result<AssignLhs>() == node);
- this.Visit(node.Map);
- for (int i = 0; i < node.Indexes.Count; ++i)
- this.Visit(node.Indexes[i]);
- return node;
- }
- public override MapType VisitMapType(MapType node)
- {
- Contract.Ensures(Contract.Result<MapType>() == node);
- // not doing anything about the bound variables ... maybe
- // these should be visited as well ...
- //
- // NOTE: when overriding this method, you have to make sure that
- // the bound variables of the map type are updated correctly
- for (int i = 0; i < node.Arguments.Count; ++i)
- this.Visit(node.Arguments[i]);
- this.Visit(node.Result);
- return node;
- }
- public override Type VisitMapTypeProxy(MapTypeProxy node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- // if the type proxy is instantiated with some more
- // specific type, we visit the instantiation
- if (node.ProxyFor != null)
- this.Visit(node.ProxyFor);
- return this.VisitType(node);
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- this.VisitExprSeq(node.Args);
- return node;
- }
- public override Expr VisitOldExpr(OldExpr node)
- {
- Contract.Ensures(Contract.Result<Expr>() == node);
- this.VisitExpr(node.Expr);
- return node;
- }
- public override Procedure VisitProcedure(Procedure node)
- {
- Contract.Ensures(Contract.Result<Procedure>() == node);
- this.VisitEnsuresSeq(node.Ensures);
- this.VisitVariableSeq(node.InParams);
- this.VisitIdentifierExprSeq(node.Modifies);
- this.VisitVariableSeq(node.OutParams);
- this.VisitRequiresSeq(node.Requires);
- return node;
- }
- public override Program VisitProgram(Program node)
- {
- Contract.Ensures(Contract.Result<Program>() == node);
- this.VisitDeclarationList(node.TopLevelDeclarations.ToList());
- return node;
- }
- public override QKeyValue VisitQKeyValue(QKeyValue node) {
- Contract.Ensures(Contract.Result<QKeyValue>() == node);
- for (int i = 0, n = node.Params.Count; i < n; i++) {
- var e = node.Params[i] as Expr;
- if (e != null) {
- this.Visit(e);
- }
- }
- if (node.Next != null) {
- this.Visit(node.Next);
- }
- return node;
- }
- public override BinderExpr VisitBinderExpr(BinderExpr node)
- {
- Contract.Ensures(Contract.Result<BinderExpr>() == node);
- this.VisitExpr(node.Body);
- this.VisitVariableSeq(node.Dummies);
- // this.VisitType(node.Type);
- return node;
- }
- public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
- {
- Contract.Ensures(Contract.Result<QuantifierExpr>() == node);
- this.VisitBinderExpr(node);
- if (node.Triggers != null)
- {
- this.VisitTrigger(node.Triggers);
- }
- return node;
- }
- public override Cmd VisitRE(RE node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- return (Cmd)this.Visit(node); // Call general visit so subtypes get visited by their particular visitor
- }
- public override List<RE> VisitRESeq(List<RE> reSeq)
- {
- Contract.Ensures(Contract.Result<List<RE>>() == reSeq);
- for (int i = 0, n = reSeq.Count; i < n; i++)
- this.VisitRE(cce.NonNull(reSeq[i]));
- return reSeq;
- }
- public override ReturnCmd VisitReturnCmd(ReturnCmd node)
- {
- Contract.Ensures(Contract.Result<ReturnCmd>() == node);
- return (ReturnCmd)this.VisitTransferCmd(node);
- }
- public override ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node)
- {
- Contract.Ensures(Contract.Result<ReturnExprCmd>() == node);
- this.VisitExpr(node.Expr);
- return node;
- }
- public override Sequential VisitSequential(Sequential node)
- {
- Contract.Ensures(Contract.Result<Sequential>() == node);
- this.VisitRE(node.first);
- this.VisitRE(node.second);
- return node;
- }
- public override AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node)
- {
- Contract.Ensures(Contract.Result<AssignLhs>() == node);
- this.VisitIdentifierExpr(node.AssignedVariable);
- return node;
- }
- public override Cmd VisitStateCmd(StateCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- this.VisitVariableSeq(node.Locals);
- this.VisitCmdSeq(node.Cmds);
- return node;
- }
- public override TransferCmd VisitTransferCmd(TransferCmd node)
- {
- Contract.Ensures(Contract.Result<TransferCmd>() == node);
- return node;
- }
- public override Trigger VisitTrigger(Trigger node)
- {
- Contract.Ensures(Contract.Result<Trigger>() == node);
- Trigger origNext = node.Next;
- if (origNext != null)
- {
- this.VisitTrigger(origNext);
- }
- this.VisitExprSeq(node.Tr.ToList());
- return node;
- }
- // called by default for all nullary type constructors and type variables
- public override Type VisitType(Type node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- return node;
- }
- public override TypedIdent VisitTypedIdent(TypedIdent node)
- {
- Contract.Ensures(Contract.Result<TypedIdent>() == node);
- this.Visit(node.Type);
- return node;
- }
- public override Declaration VisitTypeCtorDecl(TypeCtorDecl node)
- {
- Contract.Ensures(Contract.Result<Declaration>() == node);
- return this.VisitDeclaration(node);
- }
- public override Type VisitTypeSynonymAnnotation(TypeSynonymAnnotation node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- node.ExpandedType = cce.NonNull((Type/*!*/)this.Visit(node.ExpandedType));
- for (int i = 0; i < node.Arguments.Count; ++i)
- this.Visit(node.Arguments[i]);
- return node;
- }
- public override Declaration VisitTypeSynonymDecl(TypeSynonymDecl node)
- {
- Contract.Ensures(Contract.Result<Declaration>() == node);
- return this.VisitDeclaration(node);
- }
- public override Type VisitTypeVariable(TypeVariable node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- return this.VisitType(node);
- }
- public override Type VisitTypeProxy(TypeProxy node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- // if the type proxy is instantiated with some more
- // specific type, we visit the instantiation
- if (node.ProxyFor != null)
- this.Visit(node.ProxyFor);
- return this.VisitType(node);
- }
- public override Type VisitUnresolvedTypeIdentifier(UnresolvedTypeIdentifier node)
- {
- Contract.Ensures(Contract.Result<Type>() == node);
- return this.VisitType(node);
- }
- public override Variable VisitVariable(Variable node)
- {
- Contract.Ensures(Contract.Result<Variable>() == node);
- this.VisitTypedIdent(node.TypedIdent);
- return node;
- }
- public override List<Variable> VisitVariableSeq(List<Variable> variableSeq)
- {
- Contract.Ensures(Contract.Result<List<Variable>>() == variableSeq);
- for (int i = 0, n = variableSeq.Count; i < n; i++)
- this.VisitVariable(cce.NonNull(variableSeq[i]));
- return variableSeq;
- }
- public override YieldCmd VisitYieldCmd(YieldCmd node)
- {
- Contract.Ensures(Contract.Result<YieldCmd>() == node);
- return node;
- }
- public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- this.VisitEnsures(node.Ensures);
- this.VisitExpr(node.Expr);
- return node;
- }
- public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node)
- {
- Contract.Ensures(Contract.Result<Cmd>() == node);
- this.VisitRequires(node.Requires);
- this.VisitExpr(node.Expr);
- return node;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+// BoogiePL - StandardVisitor.cs
+//---------------------------------------------------------------------------------------------
+
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Linq;
+
+namespace Microsoft.Boogie {
+ [ContractClass(typeof(VisitorContracts))]
+ /// <summary>
+ /// Base for all classes that process the Absy using the visitor pattern.
+ /// </summary>
+ public abstract class Visitor {
+ /// <summary>
+ /// Switches on node.NodeType to call a visitor method that has been specialized for node.
+ /// </summary>
+ /// <param name="a">The Absy node to be visited.</param>
+ /// <returns> Returns null if node is null. Otherwise returns an updated node (possibly a different object).</returns>
+ public abstract Absy/*!*/ Visit(Absy/*!*/ node);
+
+ /// <summary>
+ /// Transfers the state from one visitor to another. This enables separate visitor instances to cooperative process a single IR.
+ /// </summary>
+ public virtual void TransferStateTo(Visitor targetVisitor) {
+ }
+
+ public virtual IList<Expr> VisitExprSeq(IList<Expr> list) {
+ Contract.Requires(list != null);
+ Contract.Ensures(Contract.Result<IList<Expr>>() != null);
+ lock (list)
+ {
+ for (int i = 0, n = list.Count; i < n; i++)
+ list[i] = (Expr)this.Visit(cce.NonNull(list[i]));
+ }
+ return list;
+ }
+ }
+ [ContractClassFor(typeof(Visitor))]
+ abstract class VisitorContracts : Visitor {
+ public override Absy Visit(Absy node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+
+ throw new System.NotImplementedException();
+ }
+ }
+
+ /// <summary>
+ /// Walks an IR, mutating it into a new form. (For a subclass that does not mutate the IR, see ReadOnlyVisitor.)
+ /// </summary>
+ public abstract class StandardVisitor : Visitor {
+ public Visitor callingVisitor;
+
+ public StandardVisitor() {
+ }
+ public StandardVisitor(Visitor callingVisitor) {
+ this.callingVisitor = callingVisitor;
+ }
+ public override Absy Visit(Absy node) {
+ return node.StdDispatch(this);
+ }
+ public virtual Cmd VisitAssertCmd(AssertCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ node.Expr = this.VisitExpr(node.Expr);
+ return node;
+ }
+ public virtual Cmd VisitAssignCmd(AssignCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ for (int i = 0; i < node.Lhss.Count; ++i) {
+ node.SetLhs(i, cce.NonNull((AssignLhs)this.Visit(node.Lhss[i])));
+ node.SetRhs(i, cce.NonNull((Expr/*!*/)this.Visit(node.Rhss[i])));
+ }
+ return node;
+ }
+ public virtual Cmd VisitAssumeCmd(AssumeCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ node.Expr = this.VisitExpr(node.Expr);
+ return node;
+ }
+ public virtual AtomicRE VisitAtomicRE(AtomicRE node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AtomicRE>() != null);
+ node.b = this.VisitBlock(node.b);
+ return node;
+ }
+ public virtual Axiom VisitAxiom(Axiom node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Axiom>() != null);
+ node.Expr = this.VisitExpr(node.Expr);
+ return node;
+ }
+ public virtual Type VisitBasicType(BasicType node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.VisitType(node);
+ }
+ public virtual Type VisitFloatType(FloatType node)
+ {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.VisitType(node);
+ }
+ public virtual Expr VisitBvConcatExpr(BvConcatExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node.E0 = this.VisitExpr(node.E0);
+ node.E1 = this.VisitExpr(node.E1);
+ return node;
+ }
+ public virtual Type VisitBvType(BvType node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.VisitType(node);
+ }
+ public virtual Type VisitBvTypeProxy(BvTypeProxy node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // if the type proxy is instantiated with some more
+ // specific type, we visit the instantiation
+ if (node.ProxyFor != null)
+ return (Type)this.Visit(node.ProxyFor);
+ return this.VisitType(node);
+ }
+ public virtual Block VisitBlock(Block node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+ node.Cmds = this.VisitCmdSeq(node.Cmds);
+ node.TransferCmd = (TransferCmd)this.Visit(cce.NonNull(node.TransferCmd));
+ return node;
+ }
+ public virtual Expr VisitCodeExpr(CodeExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node.LocVars = this.VisitVariableSeq(node.LocVars);
+ node.Blocks = this.VisitBlockList(node.Blocks);
+ return node;
+ }
+ public virtual List<Block> VisitBlockSeq(List<Block> blockSeq) {
+ Contract.Requires(blockSeq != null);
+ Contract.Ensures(Contract.Result<List<Block>>() != null);
+ lock (blockSeq)
+ {
+ for (int i = 0, n = blockSeq.Count; i < n; i++)
+ blockSeq[i] = this.VisitBlock(cce.NonNull(blockSeq[i]));
+ }
+ return blockSeq;
+ }
+ public virtual List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks) {
+ Contract.Requires(blocks != null);
+ Contract.Ensures(Contract.Result<List<Block>>() != null);
+ for (int i = 0, n = blocks.Count; i < n; i++) {
+ blocks[i] = this.VisitBlock(blocks[i]);
+ }
+ return blocks;
+ }
+ public virtual BoundVariable VisitBoundVariable(BoundVariable node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<BoundVariable>() != null);
+ node = (BoundVariable)this.VisitVariable(node);
+ return node;
+ }
+ public virtual Cmd VisitCallCmd(CallCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ for (int i = 0; i < node.Ins.Count; ++i)
+ if (node.Ins[i] != null)
+ node.Ins[i] = this.VisitExpr(cce.NonNull(node.Ins[i]));
+ for (int i = 0; i < node.Outs.Count; ++i)
+ if (node.Outs[i] != null)
+ node.Outs[i] = (IdentifierExpr)this.VisitIdentifierExpr(cce.NonNull(node.Outs[i]));
+ return node;
+ }
+ public virtual Cmd VisitParCallCmd(ParCallCmd node)
+ {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ for (int i = 0; i < node.CallCmds.Count; i++)
+ {
+ if (node.CallCmds[i] != null)
+ node.CallCmds[i] = (CallCmd)this.VisitCallCmd(node.CallCmds[i]);
+ }
+ return node;
+ }
+ public virtual List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq) {
+ Contract.Requires(cmdSeq != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ lock (cmdSeq)
+ {
+ for (int i = 0, n = cmdSeq.Count; i < n; i++)
+ cmdSeq[i] = (Cmd)this.Visit(cce.NonNull(cmdSeq[i])); // call general Visit so subtypes of Cmd get visited by their particular visitor
+ }
+ return cmdSeq;
+ }
+ public virtual Choice VisitChoice(Choice node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Choice>() != null);
+ node.rs = this.VisitRESeq(node.rs);
+ return node;
+ }
+ public virtual Cmd VisitCommentCmd(CommentCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return node;
+ }
+ public virtual Constant VisitConstant(Constant node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Constant>() != null);
+ return node;
+ }
+ public virtual CtorType VisitCtorType(CtorType node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<CtorType>() != null);
+ lock (node)
+ {
+ for (int i = 0; i < node.Arguments.Count; ++i)
+ node.Arguments[i] = cce.NonNull((Type/*!*/)this.Visit(node.Arguments[i]));
+ }
+ return node;
+ }
+ public virtual Declaration VisitDeclaration(Declaration node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Declaration>() != null);
+ return node;
+ }
+ public virtual List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList) {
+ Contract.Requires(declarationList != null);
+ Contract.Ensures(Contract.Result<List<Declaration>>() != null);
+ for (int i = 0, n = declarationList.Count; i < n; i++)
+ declarationList[i] = cce.NonNull((Declaration/*!*/)this.Visit(declarationList[i]));
+ return declarationList;
+ }
+ public virtual DeclWithFormals VisitDeclWithFormals(DeclWithFormals node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<DeclWithFormals>() != null);
+ node.InParams = this.VisitVariableSeq(node.InParams);
+ node.OutParams = this.VisitVariableSeq(node.OutParams);
+ return node;
+ }
+ public virtual Expr VisitExistsExpr(ExistsExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node = (ExistsExpr)this.VisitQuantifierExpr(node);
+ return node;
+ }
+ public virtual Expr VisitBvExtractExpr(BvExtractExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node.Bitvector = this.VisitExpr(node.Bitvector);
+ return node;
+ }
+ public virtual Expr VisitExpr(Expr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Expr e = (Expr)this.Visit(node);
+ return e;
+ }
+ public override IList<Expr> VisitExprSeq(IList<Expr> exprSeq) {
+ //Contract.Requires(exprSeq != null);
+ Contract.Ensures(Contract.Result<IList<Expr>>() != null);
+ for (int i = 0, n = exprSeq.Count; i < n; i++)
+ exprSeq[i] = this.VisitExpr(cce.NonNull(exprSeq[i]));
+ return exprSeq;
+ }
+ public virtual Requires VisitRequires(Requires @requires) {
+ Contract.Requires(@requires != null);
+ Contract.Ensures(Contract.Result<Requires>() != null);
+ @requires.Condition = this.VisitExpr(@requires.Condition);
+ return @requires;
+ }
+ public virtual List<Requires> VisitRequiresSeq(List<Requires> requiresSeq) {
+ Contract.Requires(requiresSeq != null);
+ Contract.Ensures(Contract.Result<List<Requires>>() != null);
+ for (int i = 0, n = requiresSeq.Count; i < n; i++)
+ requiresSeq[i] = this.VisitRequires(requiresSeq[i]);
+ return requiresSeq;
+ }
+ public virtual Ensures VisitEnsures(Ensures @ensures) {
+ Contract.Requires(@ensures != null);
+ Contract.Ensures(Contract.Result<Ensures>() != null);
+ @ensures.Condition = this.VisitExpr(@ensures.Condition);
+ return @ensures;
+ }
+ public virtual List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq) {
+ Contract.Requires(ensuresSeq != null);
+ Contract.Ensures(Contract.Result<List<Ensures>>() != null);
+ for (int i = 0, n = ensuresSeq.Count; i < n; i++)
+ ensuresSeq[i] = this.VisitEnsures(ensuresSeq[i]);
+ return ensuresSeq;
+ }
+ public virtual Expr VisitForallExpr(ForallExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node = (ForallExpr)this.VisitQuantifierExpr(node);
+ return node;
+ }
+ public virtual Expr VisitLambdaExpr(LambdaExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node = (LambdaExpr)this.VisitBinderExpr(node);
+ return node;
+ }
+ public virtual Formal VisitFormal(Formal node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Formal>() != null);
+ return node;
+ }
+ public virtual Function VisitFunction(Function node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ node = (Function)this.VisitDeclWithFormals(node);
+ if (node.Body != null)
+ node.Body = this.VisitExpr(node.Body);
+ return node;
+ }
+ public virtual GlobalVariable VisitGlobalVariable(GlobalVariable node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<GlobalVariable>() != null);
+ node = (GlobalVariable)this.VisitVariable(node);
+ return node;
+ }
+ public virtual GotoCmd VisitGotoCmd(GotoCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<GotoCmd>() != null);
+ // do not visit the labelTargets, or control-flow loops will lead to a looping visitor
+ return node;
+ }
+ public virtual Cmd VisitHavocCmd(HavocCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ node.Vars = this.VisitIdentifierExprSeq(node.Vars);
+ return node;
+ }
+ public virtual Expr VisitIdentifierExpr(IdentifierExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ if (node.Decl != null)
+ node.Decl = this.VisitVariable(node.Decl);
+ return node;
+ }
+ public virtual List<IdentifierExpr> VisitIdentifierExprSeq(List<IdentifierExpr> identifierExprSeq) {
+ Contract.Requires(identifierExprSeq != null);
+ Contract.Ensures(Contract.Result<List<IdentifierExpr>>() != null);
+ lock (identifierExprSeq)
+ {
+ for (int i = 0, n = identifierExprSeq.Count; i < n; i++)
+ identifierExprSeq[i] = (IdentifierExpr)this.VisitIdentifierExpr(cce.NonNull(identifierExprSeq[i]));
+ }
+ return identifierExprSeq;
+ }
+ public virtual Implementation VisitImplementation(Implementation node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Implementation>() != null);
+ node.LocVars = this.VisitVariableSeq(node.LocVars);
+ node.Blocks = this.VisitBlockList(node.Blocks);
+ node.Proc = this.VisitProcedure(cce.NonNull(node.Proc));
+ node = (Implementation)this.VisitDeclWithFormals(node); // do this first or last?
+ return node;
+ }
+ public virtual Expr VisitLiteralExpr(LiteralExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ return node;
+ }
+
+ public virtual LocalVariable VisitLocalVariable(LocalVariable node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<LocalVariable>() != null);
+ return node;
+ }
+
+ public virtual AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AssignLhs>() != null);
+ node.Map = cce.NonNull((AssignLhs)this.Visit(node.Map));
+ for (int i = 0; i < node.Indexes.Count; ++i)
+ node.Indexes[i] = cce.NonNull((Expr)this.Visit(node.Indexes[i]));
+ return node;
+ }
+ public virtual MapType VisitMapType(MapType node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<MapType>() != null);
+ // not doing anything about the bound variables ... maybe
+ // these should be visited as well ...
+ //
+ // NOTE: when overriding this method, you have to make sure that
+ // the bound variables of the map type are updated correctly
+ lock (node.Arguments)
+ {
+ for (int i = 0; i < node.Arguments.Count; ++i)
+ node.Arguments[i] = cce.NonNull((Type/*!*/)this.Visit(node.Arguments[i]));
+ }
+ node.Result = cce.NonNull((Type/*!*/)this.Visit(node.Result));
+ return node;
+ }
+ public virtual Type VisitMapTypeProxy(MapTypeProxy node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // if the type proxy is instantiated with some more
+ // specific type, we visit the instantiation
+ if (node.ProxyFor != null)
+ return (Type)this.Visit(node.ProxyFor);
+ return this.VisitType(node);
+ }
+
+ public virtual Expr VisitNAryExpr(NAryExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node.Args = this.VisitExprSeq(node.Args);
+ return node;
+ }
+ public virtual Expr VisitOldExpr(OldExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node.Expr = this.VisitExpr(node.Expr);
+ return node;
+ }
+ public virtual Procedure VisitProcedure(Procedure node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Procedure>() != null);
+ node.Ensures = this.VisitEnsuresSeq(node.Ensures);
+ node.InParams = this.VisitVariableSeq(node.InParams);
+ node.Modifies = this.VisitIdentifierExprSeq(node.Modifies);
+ node.OutParams = this.VisitVariableSeq(node.OutParams);
+ node.Requires = this.VisitRequiresSeq(node.Requires);
+ return node;
+ }
+ public virtual Program VisitProgram(Program node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Program>() != null);
+ var decls = node.TopLevelDeclarations.ToList();
+ node.ClearTopLevelDeclarations();
+ node.AddTopLevelDeclarations(this.VisitDeclarationList(decls));
+ return node;
+ }
+ public virtual QKeyValue VisitQKeyValue(QKeyValue node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<QKeyValue>() != null);
+ var newParams = new List<object>();
+ for (int i = 0, n = node.Params.Count; i < n; i++) {
+ var e = node.Params[i] as Expr;
+ newParams.Add(e != null ? this.Visit(e) : node.Params[i]);
+ }
+ node.ClearParams();
+ node.AddParams(newParams);
+ if (node.Next != null) {
+ node.Next = (QKeyValue)this.Visit(node.Next);
+ }
+ return node;
+ }
+ public virtual BinderExpr VisitBinderExpr(BinderExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<BinderExpr>() != null);
+ node.Body = this.VisitExpr(node.Body);
+ node.Dummies = this.VisitVariableSeq(node.Dummies);
+ //node.Type = this.VisitType(node.Type);
+ return node;
+ }
+ public virtual QuantifierExpr VisitQuantifierExpr(QuantifierExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<QuantifierExpr>() != null);
+ node = cce.NonNull((QuantifierExpr)this.VisitBinderExpr(node));
+ if (node.Triggers != null) {
+ node.Triggers = this.VisitTrigger(node.Triggers);
+ }
+ return node;
+ }
+ public virtual Cmd VisitRE(RE node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ return (Cmd)this.Visit(node); // Call general visit so subtypes get visited by their particular visitor
+ }
+ public virtual List<RE> VisitRESeq(List<RE> reSeq) {
+ Contract.Requires(reSeq != null);
+ Contract.Ensures(Contract.Result<List<RE>>() != null);
+ for (int i = 0, n = reSeq.Count; i < n; i++)
+ reSeq[i] = (RE)this.VisitRE(cce.NonNull(reSeq[i]));
+ return reSeq;
+ }
+ public virtual ReturnCmd VisitReturnCmd(ReturnCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<ReturnCmd>() != null);
+ return (ReturnCmd)this.VisitTransferCmd(node);
+ }
+ public virtual ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<ReturnExprCmd>() != null);
+ node.Expr = this.VisitExpr(node.Expr);
+ return node;
+ }
+ public virtual Sequential VisitSequential(Sequential node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Sequential>() != null);
+ node.first = (RE)this.VisitRE(node.first);
+ node.second = (RE)this.VisitRE(node.second);
+ return node;
+ }
+ public virtual AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AssignLhs>() != null);
+ node.AssignedVariable =
+ (IdentifierExpr)this.VisitIdentifierExpr(node.AssignedVariable);
+ return node;
+ }
+ public virtual Cmd VisitStateCmd(StateCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ node.Locals = this.VisitVariableSeq(node.Locals);
+ node.Cmds = this.VisitCmdSeq(node.Cmds);
+ return node;
+ }
+ public virtual TransferCmd VisitTransferCmd(TransferCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<TransferCmd>() != null);
+ return node;
+ }
+ public virtual Trigger VisitTrigger(Trigger node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Trigger>() != null);
+ Trigger origNext = node.Next;
+ if (origNext != null) {
+ Trigger newNext = this.VisitTrigger(origNext);
+ if (newNext != origNext) {
+ node = new Trigger(node.tok, node.Pos, node.Tr.ToList());
+ node.Next = newNext;
+ }
+ }
+ node.Tr = this.VisitExprSeq(node.Tr.ToList());
+ return node;
+ }
+ // called by default for all nullary type constructors and type variables
+ public virtual Type VisitType(Type node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return node;
+ }
+ public virtual TypedIdent VisitTypedIdent(TypedIdent node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<TypedIdent>() != null);
+ node.Type = (Type)this.Visit(node.Type);
+ return node;
+ }
+ public virtual Declaration VisitTypeCtorDecl(TypeCtorDecl node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Declaration>() != null);
+ return this.VisitDeclaration(node);
+ }
+ public virtual Type VisitTypeSynonymAnnotation(TypeSynonymAnnotation node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ node.ExpandedType = cce.NonNull((Type/*!*/)this.Visit(node.ExpandedType));
+ lock (node.Arguments)
+ {
+ for (int i = 0; i < node.Arguments.Count; ++i)
+ node.Arguments[i] = cce.NonNull((Type/*!*/)this.Visit(node.Arguments[i]));
+ }
+ return node;
+ }
+ public virtual Declaration VisitTypeSynonymDecl(TypeSynonymDecl node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Declaration>() != null);
+ return this.VisitDeclaration(node);
+ }
+ public virtual Type VisitTypeVariable(TypeVariable node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.VisitType(node);
+ }
+ public virtual Type VisitTypeProxy(TypeProxy node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ // if the type proxy is instantiated with some more
+ // specific type, we visit the instantiation
+ if (node.ProxyFor != null)
+ return cce.NonNull((Type/*!*/)this.Visit(node.ProxyFor));
+ return this.VisitType(node);
+ }
+ public virtual Type VisitUnresolvedTypeIdentifier(UnresolvedTypeIdentifier node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return this.VisitType(node);
+ }
+ public virtual Variable VisitVariable(Variable node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Variable>() != null);
+ node.TypedIdent = this.VisitTypedIdent(node.TypedIdent);
+ return node;
+ }
+ public virtual List<Variable> VisitVariableSeq(List<Variable> variableSeq) {
+ Contract.Requires(variableSeq != null);
+ Contract.Ensures(Contract.Result<List<Variable>>() != null);
+ lock (variableSeq)
+ {
+ for (int i = 0, n = variableSeq.Count; i < n; i++)
+ variableSeq[i] = this.VisitVariable(cce.NonNull(variableSeq[i]));
+ }
+ return variableSeq;
+ }
+ public virtual YieldCmd VisitYieldCmd(YieldCmd node)
+ {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<YieldCmd>() != null);
+ return node;
+ }
+ public virtual Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ node.Ensures = this.VisitEnsures(node.Ensures);
+ node.Expr = this.VisitExpr(node.Expr);
+ return node;
+ }
+ public virtual Cmd VisitAssertRequiresCmd(AssertRequiresCmd node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ node.Requires = this.VisitRequires(node.Requires);
+ node.Expr = this.VisitExpr(node.Expr);
+ return node;
+ }
+ }
+
+ /// <summary>
+ /// A ReadOnlyVisitor visits all the nodes of a given Absy. The visitor may collect information from
+ /// the nodes, may change fields contained in the data structure, but may not replace any nodes in the
+ /// data structure. To enforce this, all Visit...(node) methods have a postcondition that says that
+ /// the return value is equal to the given "node".
+ /// </summary>
+ public abstract class ReadOnlyVisitor : StandardVisitor
+ {
+ public ReadOnlyVisitor()
+ {
+ }
+ public ReadOnlyVisitor(Visitor callingVisitor)
+ {
+ this.callingVisitor = callingVisitor;
+ }
+ public override Absy Visit(Absy node)
+ {
+ Contract.Ensures(Contract.Result<Absy>() == node);
+ return node.StdDispatch(this);
+ }
+ public override Cmd VisitAssertCmd(AssertCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ this.VisitExpr(node.Expr);
+ return node;
+ }
+ public override Cmd VisitAssignCmd(AssignCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ for (int i = 0; i < node.Lhss.Count; ++i)
+ {
+ this.Visit(node.Lhss[i]);
+ this.Visit(node.Rhss[i]);
+ }
+ return node;
+ }
+ public override Cmd VisitAssumeCmd(AssumeCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ this.VisitExpr(node.Expr);
+ return node;
+ }
+ public override AtomicRE VisitAtomicRE(AtomicRE node)
+ {
+ Contract.Ensures(Contract.Result<AtomicRE>() == node);
+ this.VisitBlock(node.b);
+ return node;
+ }
+ public override Axiom VisitAxiom(Axiom node)
+ {
+ Contract.Ensures(Contract.Result<Axiom>() == node);
+ this.VisitExpr(node.Expr);
+ return node;
+ }
+ public override Type VisitBasicType(BasicType node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ return this.VisitType(node);
+ }
+ public override Expr VisitBvConcatExpr(BvConcatExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ this.VisitExpr(node.E0);
+ this.VisitExpr(node.E1);
+ return node;
+ }
+ public override Type VisitBvType(BvType node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ return this.VisitType(node);
+ }
+ public override Type VisitBvTypeProxy(BvTypeProxy node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ // if the type proxy is instantiated with some more
+ // specific type, we visit the instantiation
+ if (node.ProxyFor != null)
+ this.Visit(node.ProxyFor);
+ return this.VisitType(node);
+ }
+ public override Block VisitBlock(Block node)
+ {
+ Contract.Ensures(Contract.Result<Block>() == node);
+ this.VisitCmdSeq(node.Cmds);
+ this.Visit(cce.NonNull(node.TransferCmd));
+ return node;
+ }
+ public override Expr VisitCodeExpr(CodeExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ this.VisitVariableSeq(node.LocVars);
+ this.VisitBlockList(node.Blocks);
+ return node;
+ }
+ public override List<Block> VisitBlockSeq(List<Block> blockSeq)
+ {
+ Contract.Ensures(Contract.Result<List<Block>>() == blockSeq);
+ for (int i = 0, n = blockSeq.Count; i < n; i++)
+ this.VisitBlock(cce.NonNull(blockSeq[i]));
+ return blockSeq;
+ }
+ public override List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks)
+ {
+ Contract.Ensures(Contract.Result<List<Block>>() == blocks);
+ for (int i = 0, n = blocks.Count; i < n; i++)
+ {
+ this.VisitBlock(blocks[i]);
+ }
+ return blocks;
+ }
+ public override BoundVariable VisitBoundVariable(BoundVariable node)
+ {
+ Contract.Ensures(Contract.Result<BoundVariable>() == node);
+ return (BoundVariable)this.VisitVariable(node);
+ }
+ public override Cmd VisitCallCmd(CallCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ for (int i = 0; i < node.Ins.Count; ++i)
+ if (node.Ins[i] != null)
+ this.VisitExpr(node.Ins[i]);
+ for (int i = 0; i < node.Outs.Count; ++i)
+ if (node.Outs[i] != null)
+ this.VisitIdentifierExpr(node.Outs[i]);
+ return node;
+ }
+ public override Cmd VisitParCallCmd(ParCallCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ for (int i = 0; i < node.CallCmds.Count; i++)
+ {
+ if (node.CallCmds[i] != null)
+ this.VisitCallCmd(node.CallCmds[i]);
+ }
+ return node;
+ }
+ public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq)
+ {
+ Contract.Ensures(Contract.Result<List<Cmd>>() == cmdSeq);
+ for (int i = 0, n = cmdSeq.Count; i < n; i++)
+ this.Visit(cce.NonNull(cmdSeq[i])); // call general Visit so subtypes of Cmd get visited by their particular visitor
+ return cmdSeq;
+ }
+ public override Choice VisitChoice(Choice node)
+ {
+ Contract.Ensures(Contract.Result<Choice>() == node);
+ this.VisitRESeq(node.rs);
+ return node;
+ }
+ public override Cmd VisitCommentCmd(CommentCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ return node;
+ }
+ public override Constant VisitConstant(Constant node)
+ {
+ Contract.Ensures(Contract.Result<Constant>() == node);
+ return node;
+ }
+ public override CtorType VisitCtorType(CtorType node)
+ {
+ Contract.Ensures(Contract.Result<CtorType>() == node);
+ for (int i = 0; i < node.Arguments.Count; ++i)
+ this.Visit(node.Arguments[i]);
+ return node;
+ }
+ public override Declaration VisitDeclaration(Declaration node)
+ {
+ Contract.Ensures(Contract.Result<Declaration>() == node);
+ return node;
+ }
+ public override List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList)
+ {
+ Contract.Ensures(Contract.Result<List<Declaration>>() == declarationList);
+ for (int i = 0, n = declarationList.Count; i < n; i++)
+ this.Visit(declarationList[i]);
+ return declarationList;
+ }
+ public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node)
+ {
+ Contract.Ensures(Contract.Result<DeclWithFormals>() == node);
+ this.VisitVariableSeq(node.InParams);
+ this.VisitVariableSeq(node.OutParams);
+ return node;
+ }
+ public override Expr VisitExistsExpr(ExistsExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ return (ExistsExpr)this.VisitQuantifierExpr(node);
+ }
+ public override Expr VisitBvExtractExpr(BvExtractExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ this.VisitExpr(node.Bitvector);
+ return node;
+ }
+ public override Expr VisitExpr(Expr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ return (Expr)this.Visit(node);
+ }
+ public override IList<Expr> VisitExprSeq(IList<Expr> exprSeq)
+ {
+ Contract.Ensures(Contract.Result<IList<Expr>>() == exprSeq);
+ for (int i = 0, n = exprSeq.Count; i < n; i++)
+ this.VisitExpr(cce.NonNull(exprSeq[i]));
+ return exprSeq;
+ }
+ public override Requires VisitRequires(Requires requires)
+ {
+ Contract.Ensures(Contract.Result<Requires>() == requires);
+ this.VisitExpr(requires.Condition);
+ return requires;
+ }
+ public override List<Requires> VisitRequiresSeq(List<Requires> requiresSeq)
+ {
+ Contract.Ensures(Contract.Result<List<Requires>>() == requiresSeq);
+ for (int i = 0, n = requiresSeq.Count; i < n; i++)
+ this.VisitRequires(requiresSeq[i]);
+ return requiresSeq;
+ }
+ public override Ensures VisitEnsures(Ensures ensures)
+ {
+ Contract.Ensures(Contract.Result<Ensures>() == ensures);
+ this.VisitExpr(ensures.Condition);
+ return ensures;
+ }
+ public override List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq)
+ {
+ Contract.Ensures(Contract.Result<List<Ensures>>() == ensuresSeq);
+ for (int i = 0, n = ensuresSeq.Count; i < n; i++)
+ this.VisitEnsures(ensuresSeq[i]);
+ return ensuresSeq;
+ }
+ public override Expr VisitForallExpr(ForallExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ return (ForallExpr)this.VisitQuantifierExpr(node);
+ }
+ public override Expr VisitLambdaExpr(LambdaExpr node) {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ return this.VisitBinderExpr(node);
+ }
+ public override Formal VisitFormal(Formal node)
+ {
+ Contract.Ensures(Contract.Result<Formal>() == node);
+ return node;
+ }
+ public override Function VisitFunction(Function node)
+ {
+ Contract.Ensures(Contract.Result<Function>() == node);
+ node = (Function)this.VisitDeclWithFormals(node);
+ if (node.Body != null)
+ this.VisitExpr(node.Body);
+ return node;
+ }
+ public override GlobalVariable VisitGlobalVariable(GlobalVariable node)
+ {
+ Contract.Ensures(Contract.Result<GlobalVariable>() == node);
+ return (GlobalVariable)this.VisitVariable(node);
+ }
+ public override GotoCmd VisitGotoCmd(GotoCmd node)
+ {
+ Contract.Ensures(Contract.Result<GotoCmd>() == node);
+ // do not visit the labelTargets, or control-flow loops will lead to a looping visitor
+ return node;
+ }
+ public override Cmd VisitHavocCmd(HavocCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ this.VisitIdentifierExprSeq(node.Vars);
+ return node;
+ }
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ if (node.Decl != null)
+ this.VisitVariable(node.Decl);
+ return node;
+ }
+ public override List<IdentifierExpr> VisitIdentifierExprSeq(List<IdentifierExpr> identifierExprSeq)
+ {
+ Contract.Ensures(Contract.Result<List<IdentifierExpr>>() == identifierExprSeq);
+ for (int i = 0, n = identifierExprSeq.Count; i < n; i++)
+ this.VisitIdentifierExpr(cce.NonNull(identifierExprSeq[i]));
+ return identifierExprSeq;
+ }
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ Contract.Ensures(Contract.Result<Implementation>() == node);
+ this.VisitVariableSeq(node.LocVars);
+ this.VisitBlockList(node.Blocks);
+ this.VisitProcedure(cce.NonNull(node.Proc));
+ return (Implementation)this.VisitDeclWithFormals(node); // do this first or last?
+ }
+ public override Expr VisitLiteralExpr(LiteralExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ return node;
+ }
+
+ public override LocalVariable VisitLocalVariable(LocalVariable node)
+ {
+ Contract.Ensures(Contract.Result<LocalVariable>() == node);
+ return node;
+ }
+
+ public override AssignLhs VisitMapAssignLhs(MapAssignLhs node)
+ {
+ Contract.Ensures(Contract.Result<AssignLhs>() == node);
+ this.Visit(node.Map);
+ for (int i = 0; i < node.Indexes.Count; ++i)
+ this.Visit(node.Indexes[i]);
+ return node;
+ }
+ public override MapType VisitMapType(MapType node)
+ {
+ Contract.Ensures(Contract.Result<MapType>() == node);
+ // not doing anything about the bound variables ... maybe
+ // these should be visited as well ...
+ //
+ // NOTE: when overriding this method, you have to make sure that
+ // the bound variables of the map type are updated correctly
+ for (int i = 0; i < node.Arguments.Count; ++i)
+ this.Visit(node.Arguments[i]);
+ this.Visit(node.Result);
+ return node;
+ }
+ public override Type VisitMapTypeProxy(MapTypeProxy node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ // if the type proxy is instantiated with some more
+ // specific type, we visit the instantiation
+ if (node.ProxyFor != null)
+ this.Visit(node.ProxyFor);
+ return this.VisitType(node);
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ this.VisitExprSeq(node.Args);
+ return node;
+ }
+ public override Expr VisitOldExpr(OldExpr node)
+ {
+ Contract.Ensures(Contract.Result<Expr>() == node);
+ this.VisitExpr(node.Expr);
+ return node;
+ }
+ public override Procedure VisitProcedure(Procedure node)
+ {
+ Contract.Ensures(Contract.Result<Procedure>() == node);
+ this.VisitEnsuresSeq(node.Ensures);
+ this.VisitVariableSeq(node.InParams);
+ this.VisitIdentifierExprSeq(node.Modifies);
+ this.VisitVariableSeq(node.OutParams);
+ this.VisitRequiresSeq(node.Requires);
+ return node;
+ }
+ public override Program VisitProgram(Program node)
+ {
+ Contract.Ensures(Contract.Result<Program>() == node);
+ this.VisitDeclarationList(node.TopLevelDeclarations.ToList());
+ return node;
+ }
+ public override QKeyValue VisitQKeyValue(QKeyValue node) {
+ Contract.Ensures(Contract.Result<QKeyValue>() == node);
+ for (int i = 0, n = node.Params.Count; i < n; i++) {
+ var e = node.Params[i] as Expr;
+ if (e != null) {
+ this.Visit(e);
+ }
+ }
+ if (node.Next != null) {
+ this.Visit(node.Next);
+ }
+ return node;
+ }
+ public override BinderExpr VisitBinderExpr(BinderExpr node)
+ {
+ Contract.Ensures(Contract.Result<BinderExpr>() == node);
+ this.VisitExpr(node.Body);
+ this.VisitVariableSeq(node.Dummies);
+ // this.VisitType(node.Type);
+ return node;
+ }
+ public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
+ {
+ Contract.Ensures(Contract.Result<QuantifierExpr>() == node);
+ this.VisitBinderExpr(node);
+ if (node.Triggers != null)
+ {
+ this.VisitTrigger(node.Triggers);
+ }
+ return node;
+ }
+ public override Cmd VisitRE(RE node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ return (Cmd)this.Visit(node); // Call general visit so subtypes get visited by their particular visitor
+ }
+ public override List<RE> VisitRESeq(List<RE> reSeq)
+ {
+ Contract.Ensures(Contract.Result<List<RE>>() == reSeq);
+ for (int i = 0, n = reSeq.Count; i < n; i++)
+ this.VisitRE(cce.NonNull(reSeq[i]));
+ return reSeq;
+ }
+ public override ReturnCmd VisitReturnCmd(ReturnCmd node)
+ {
+ Contract.Ensures(Contract.Result<ReturnCmd>() == node);
+ return (ReturnCmd)this.VisitTransferCmd(node);
+ }
+ public override ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node)
+ {
+ Contract.Ensures(Contract.Result<ReturnExprCmd>() == node);
+ this.VisitExpr(node.Expr);
+ return node;
+ }
+ public override Sequential VisitSequential(Sequential node)
+ {
+ Contract.Ensures(Contract.Result<Sequential>() == node);
+ this.VisitRE(node.first);
+ this.VisitRE(node.second);
+ return node;
+ }
+ public override AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node)
+ {
+ Contract.Ensures(Contract.Result<AssignLhs>() == node);
+ this.VisitIdentifierExpr(node.AssignedVariable);
+ return node;
+ }
+ public override Cmd VisitStateCmd(StateCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ this.VisitVariableSeq(node.Locals);
+ this.VisitCmdSeq(node.Cmds);
+ return node;
+ }
+ public override TransferCmd VisitTransferCmd(TransferCmd node)
+ {
+ Contract.Ensures(Contract.Result<TransferCmd>() == node);
+ return node;
+ }
+ public override Trigger VisitTrigger(Trigger node)
+ {
+ Contract.Ensures(Contract.Result<Trigger>() == node);
+ Trigger origNext = node.Next;
+ if (origNext != null)
+ {
+ this.VisitTrigger(origNext);
+ }
+ this.VisitExprSeq(node.Tr.ToList());
+ return node;
+ }
+ // called by default for all nullary type constructors and type variables
+ public override Type VisitType(Type node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ return node;
+ }
+ public override TypedIdent VisitTypedIdent(TypedIdent node)
+ {
+ Contract.Ensures(Contract.Result<TypedIdent>() == node);
+ this.Visit(node.Type);
+ return node;
+ }
+ public override Declaration VisitTypeCtorDecl(TypeCtorDecl node)
+ {
+ Contract.Ensures(Contract.Result<Declaration>() == node);
+ return this.VisitDeclaration(node);
+ }
+ public override Type VisitTypeSynonymAnnotation(TypeSynonymAnnotation node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ node.ExpandedType = cce.NonNull((Type/*!*/)this.Visit(node.ExpandedType));
+ for (int i = 0; i < node.Arguments.Count; ++i)
+ this.Visit(node.Arguments[i]);
+ return node;
+ }
+ public override Declaration VisitTypeSynonymDecl(TypeSynonymDecl node)
+ {
+ Contract.Ensures(Contract.Result<Declaration>() == node);
+ return this.VisitDeclaration(node);
+ }
+ public override Type VisitTypeVariable(TypeVariable node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ return this.VisitType(node);
+ }
+ public override Type VisitTypeProxy(TypeProxy node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ // if the type proxy is instantiated with some more
+ // specific type, we visit the instantiation
+ if (node.ProxyFor != null)
+ this.Visit(node.ProxyFor);
+ return this.VisitType(node);
+ }
+ public override Type VisitUnresolvedTypeIdentifier(UnresolvedTypeIdentifier node)
+ {
+ Contract.Ensures(Contract.Result<Type>() == node);
+ return this.VisitType(node);
+ }
+ public override Variable VisitVariable(Variable node)
+ {
+ Contract.Ensures(Contract.Result<Variable>() == node);
+ this.VisitTypedIdent(node.TypedIdent);
+ return node;
+ }
+ public override List<Variable> VisitVariableSeq(List<Variable> variableSeq)
+ {
+ Contract.Ensures(Contract.Result<List<Variable>>() == variableSeq);
+ for (int i = 0, n = variableSeq.Count; i < n; i++)
+ this.VisitVariable(cce.NonNull(variableSeq[i]));
+ return variableSeq;
+ }
+ public override YieldCmd VisitYieldCmd(YieldCmd node)
+ {
+ Contract.Ensures(Contract.Result<YieldCmd>() == node);
+ return node;
+ }
+ public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ this.VisitEnsures(node.Ensures);
+ this.VisitExpr(node.Expr);
+ return node;
+ }
+ public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node)
+ {
+ Contract.Ensures(Contract.Result<Cmd>() == node);
+ this.VisitRequires(node.Requires);
+ this.VisitExpr(node.Expr);
+ return node;
+ }
+ }
+}
diff --git a/Source/Core/TypeAmbiguitySeeker.cs b/Source/Core/TypeAmbiguitySeeker.cs
index 753385a1..6f57ad43 100644
--- a/Source/Core/TypeAmbiguitySeeker.cs
+++ b/Source/Core/TypeAmbiguitySeeker.cs
@@ -1,123 +1,123 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Diagnostics.Contracts;
-using System.Collections.Generic;
-
-// Visitor to search for types proxies that could not completely be
-// determined by type inference. If this happens, a warning is
-// generated and the proxies are instantiated in a more or less arbitrary
-// fashion.
-
-namespace Microsoft.Boogie {
-
- public class TypeAmbiguitySeeker : ReadOnlyVisitor {
-
- private readonly InTypeSeeker/*!*/ inTypeSeeker = new InTypeSeeker();
- private readonly TypecheckingContext/*!*/ TC;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(inTypeSeeker != null);
- Contract.Invariant(TC != null);
- }
-
-
- public TypeAmbiguitySeeker(TypecheckingContext tc) {
- Contract.Requires(tc != null);
- TC = tc;
- }
-
- private void CheckTypeParams(Absy node, TypeParamInstantiation insts) {
- Contract.Requires(insts != null);
- Contract.Requires(node != null);
- foreach (TypeVariable/*!*/ var in insts.FormalTypeParams) {
- Contract.Assert(var != null);
- Type/*!*/ inst = insts[var];
- Contract.Assert(inst != null);
-
- inTypeSeeker.FoundAmbiguity = false;
- inTypeSeeker.Visit(inst);
- if (inTypeSeeker.FoundAmbiguity)
- TC.Warning(node,
- "type parameter {0} is ambiguous, instantiating to {1}",
- var, inst);
- }
- }
-
- public override Expr VisitNAryExpr(NAryExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- CheckTypeParams(node, cce.NonNull(node.TypeParameters));
- return base.VisitNAryExpr(node);
- }
-
- public override AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AssignLhs>() != null);
- CheckTypeParams(node, cce.NonNull(node.TypeParameters));
- return base.VisitMapAssignLhs(node);
- }
- }
-
- internal class InTypeSeeker : ReadOnlyVisitor {
-
- internal bool FoundAmbiguity = false;
-
- // called when an uninstantiated proxy was found
- private Type Instantiate(Type node, Type inst) {
- Contract.Requires(inst != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() == node);
- FoundAmbiguity = true;
- bool success = node.Unify(inst);
- Contract.Assert(success);
- return node;
- }
-
- public override Type VisitTypeProxy(TypeProxy node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- if (node.ProxyFor != null)
- return base.VisitTypeProxy(node);
-
- return Instantiate(node, Type.Int);
- }
-
- public override Type VisitMapTypeProxy(MapTypeProxy node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- if (node.ProxyFor != null)
- return base.VisitMapTypeProxy(node);
-
- List<TypeVariable>/*!*/ typeParams = new List<TypeVariable>();
- List<Type>/*!*/ arguments = new List<Type>();
- for (int i = 0; i < node.Arity; ++i) {
- TypeVariable/*!*/ param = new TypeVariable(Token.NoToken, "arg" + i);
- Contract.Assert(param != null);
- typeParams.Add(param);
- arguments.Add(param);
- }
- TypeVariable/*!*/ result = new TypeVariable(Token.NoToken, "res");
- Contract.Assert(result != null);
- typeParams.Add(result);
-
- Type/*!*/ instantiation = new MapType(Token.NoToken, typeParams, arguments, result);
- Contract.Assert(instantiation != null);
-
- return Instantiate(node, instantiation);
- }
-
- public override Type VisitBvTypeProxy(BvTypeProxy node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- if (node.ProxyFor != null)
- return base.VisitBvTypeProxy(node);
-
- return Instantiate(node, new BvType(node.MinBits));
- }
- }
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Diagnostics.Contracts;
+using System.Collections.Generic;
+
+// Visitor to search for types proxies that could not completely be
+// determined by type inference. If this happens, a warning is
+// generated and the proxies are instantiated in a more or less arbitrary
+// fashion.
+
+namespace Microsoft.Boogie {
+
+ public class TypeAmbiguitySeeker : ReadOnlyVisitor {
+
+ private readonly InTypeSeeker/*!*/ inTypeSeeker = new InTypeSeeker();
+ private readonly TypecheckingContext/*!*/ TC;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(inTypeSeeker != null);
+ Contract.Invariant(TC != null);
+ }
+
+
+ public TypeAmbiguitySeeker(TypecheckingContext tc) {
+ Contract.Requires(tc != null);
+ TC = tc;
+ }
+
+ private void CheckTypeParams(Absy node, TypeParamInstantiation insts) {
+ Contract.Requires(insts != null);
+ Contract.Requires(node != null);
+ foreach (TypeVariable/*!*/ var in insts.FormalTypeParams) {
+ Contract.Assert(var != null);
+ Type/*!*/ inst = insts[var];
+ Contract.Assert(inst != null);
+
+ inTypeSeeker.FoundAmbiguity = false;
+ inTypeSeeker.Visit(inst);
+ if (inTypeSeeker.FoundAmbiguity)
+ TC.Warning(node,
+ "type parameter {0} is ambiguous, instantiating to {1}",
+ var, inst);
+ }
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ CheckTypeParams(node, cce.NonNull(node.TypeParameters));
+ return base.VisitNAryExpr(node);
+ }
+
+ public override AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AssignLhs>() != null);
+ CheckTypeParams(node, cce.NonNull(node.TypeParameters));
+ return base.VisitMapAssignLhs(node);
+ }
+ }
+
+ internal class InTypeSeeker : ReadOnlyVisitor {
+
+ internal bool FoundAmbiguity = false;
+
+ // called when an uninstantiated proxy was found
+ private Type Instantiate(Type node, Type inst) {
+ Contract.Requires(inst != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() == node);
+ FoundAmbiguity = true;
+ bool success = node.Unify(inst);
+ Contract.Assert(success);
+ return node;
+ }
+
+ public override Type VisitTypeProxy(TypeProxy node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (node.ProxyFor != null)
+ return base.VisitTypeProxy(node);
+
+ return Instantiate(node, Type.Int);
+ }
+
+ public override Type VisitMapTypeProxy(MapTypeProxy node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (node.ProxyFor != null)
+ return base.VisitMapTypeProxy(node);
+
+ List<TypeVariable>/*!*/ typeParams = new List<TypeVariable>();
+ List<Type>/*!*/ arguments = new List<Type>();
+ for (int i = 0; i < node.Arity; ++i) {
+ TypeVariable/*!*/ param = new TypeVariable(Token.NoToken, "arg" + i);
+ Contract.Assert(param != null);
+ typeParams.Add(param);
+ arguments.Add(param);
+ }
+ TypeVariable/*!*/ result = new TypeVariable(Token.NoToken, "res");
+ Contract.Assert(result != null);
+ typeParams.Add(result);
+
+ Type/*!*/ instantiation = new MapType(Token.NoToken, typeParams, arguments, result);
+ Contract.Assert(instantiation != null);
+
+ return Instantiate(node, instantiation);
+ }
+
+ public override Type VisitBvTypeProxy(BvTypeProxy node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (node.ProxyFor != null)
+ return base.VisitBvTypeProxy(node);
+
+ return Instantiate(node, new BvType(node.MinBits));
+ }
+ }
+
} \ No newline at end of file
diff --git a/Source/Core/Util.cs b/Source/Core/Util.cs
index 3b8412b9..f201aef8 100644
--- a/Source/Core/Util.cs
+++ b/Source/Core/Util.cs
@@ -1,688 +1,688 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-namespace Microsoft.Boogie {
- using System;
- using System.IO;
- using System.Collections;
- using System.Diagnostics.Contracts;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- public static class LinqExtender
- {
- public static string Concat(this IEnumerable<string> strings, string separator)
- {
- var sb = new StringBuilder();
- var first = true;
- foreach (var s in strings) {
- if (!first)
- sb.Append(separator);
- first = false;
- sb.Append(s);
- }
- return sb.ToString();
- }
-
- public static IEnumerable<T> Concat1<T>(this IEnumerable<T> objects, T final)
- {
- foreach (var s in objects) {
- yield return s;
- }
- yield return final;
- }
-
- public static string MapConcat<T>(this IEnumerable<T> objects, Func<T,string> toString, string separator)
- {
- var sb = new StringBuilder();
- var first = true;
- foreach (var s in objects) {
- if (!first)
- sb.Append(separator);
- first = false;
- sb.Append(toString(s));
- }
- return sb.ToString();
- }
-
- public static IEnumerable<T> SkipEnd<T>(this IEnumerable<T> source, int count)
- {
- var l = source.ToList();
- if (count >= l.Count)
- return Enumerable.Empty<T>();
- l.RemoveRange(l.Count - count, count);
- return l;
- }
-
- public static void Iter<T>(this IEnumerable<T> coll, Action<T> fn)
- {
- foreach (var e in coll) fn(e);
- }
-
- public static IEnumerable<Tuple<TSource1, TSource2>> Zip<TSource1, TSource2>(this IEnumerable<TSource1> source1, IEnumerable<TSource2> source2)
- {
- return source1.Zip(source2, (e1, e2) => new Tuple<TSource1, TSource2>(e1, e2));
- }
- }
-
- public class TokenTextWriter : IDisposable {
- string/*!*/ filename;
- TextWriter/*!*/ writer;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(filename != null);
- Contract.Invariant(writer != null);
- }
-
- bool setTokens = true;
- int line = 1;
- int col;
- public bool UseForComputingChecksums;
-
- private const int indent_size = 2;
- protected static string Indent(int level) {
- Contract.Ensures(Contract.Result<string>() != null);
- return new string(' ', (indent_size * level));
- }
-
-
- // Keywords, this array *must* be sorted
- public static readonly string[]/*!*/ BplKeywords =
- {
- "assert",
- "assume",
- "axiom",
- "bool",
- "break",
- "call",
- "cast",
- "const",
- "else",
- "ensures",
- "exists",
- "false",
- "forall",
- "free",
- "function",
- "goto",
- "havoc",
- "if",
- "implementation",
- "int",
- "invariant",
- "modifies",
- "old",
- "procedure",
- "public",
- "requires",
- "return",
- "returns",
- "true",
- "type",
- "unique",
- "var",
- "where",
- "while",
- };
-
- // "Pretty" printing: not very efficient, and not necessarily very pretty, but helps a bit
- private readonly bool pretty;
-
- // The stack of writers in a current separator-block.
- // The string is an optional identifier that allows you
- // to not start a new indentation for e.g. "&&" in "a && b && c".
- // When the pretty printing is finished, this should be empty.
- Stack<KeyValuePair<string, List<TextWriter>>> wstk;
-
- // The original writer: where everything should finally end up.
- TextWriter actual_writer;
-
- public bool push(string type = null) {
- if (pretty) {
- if (wstk == null) {
- wstk = new Stack<KeyValuePair<string, List<TextWriter>>>();
- actual_writer = writer;
- }
- if (wstk.Count > 0 && wstk.Peek().Key == type && type != null) {
- sep();
- return false; // don't actually pop this thing (send this bool to pop)
- } else {
- wstk.Push(new KeyValuePair<string, List<TextWriter>>(type, new List<TextWriter> { }));
- sep();
- return true; // this needs to be popped
- }
- } else {
- return false;
- }
- }
-
- public void pop(bool do_it = true) {
- if (pretty) {
- if (do_it) {
- List<TextWriter> ws = wstk.Pop().Value;
- // try to figure out if you should insert line breaks between
- // them or print them on one single line
- // this breaks down when there are newlines inserted
- List<String> ss = new List<String>();
- int len = 0;
- foreach (TextWriter w in ws) {
- foreach (String s in w.ToString().Split(new String[] { "\r\n", "\n" }, StringSplitOptions.None)) {
- if (s.Length > 0) {
- ss.Add(s);
- len += s.Length;
- // len = Math.Max(len, s.Length);
- }
- }
- }
- // figure out which is the next writer to use
- List<TextWriter> tw = wstk.Count > 0 ? wstk.Peek().Value : null;
- if (tw == null) {
- writer = actual_writer;
- } else {
- writer = tw.Last();
- }
- // write the strings (we would like to know WHERE we are in the document here)
- if (len > 80 /* - wstk.Count * 2 */) {
- for (int i = 0; i < ss.Count; i++) {
- if (i != ss.Count - 1) {
- writer.WriteLine(ss[i]);
- writer.Write(" ");
- } else {
- writer.Write(ss[i]);
- }
- }
- } else {
- foreach (String s in ss) {
- writer.Write(s);
- }
- }
- }
- }
- }
-
- public void sep() {
- if (pretty) {
- List<TextWriter> ws = wstk.Peek().Value;
-
- writer = new StringWriter();
- wstk.Peek().Value.Add(writer);
- }
- }
-
- private IToken/*!*/ CurrentToken {
- get {
- Contract.Ensures(Contract.Result<IToken>() != null);
-
- Token token = new Token();
- token.filename = filename;
- token.line = line;
- token.col = col;
- return token;
- }
- }
-
- public void SetToken(Absy absy) {
- Contract.Requires(absy != null);
- this.SetToken(t => absy.tok = t);
- }
-
- public void SetToken(IfThenElse expr)
- {
- Contract.Requires(expr != null);
- this.SetToken(t => expr.tok = t);
- }
-
- public void SetToken(Action<IToken> setter) {
- Contract.Requires(setter != null);
- if (this.setTokens) {
- setter(this.CurrentToken);
- }
- }
-
- public void SetToken(ref IToken tok) {
- Contract.Requires(tok != null);
- if (this.setTokens) {
- tok = this.CurrentToken;
- }
- }
-
- public static string SanitizeIdentifier(string name) {
- Contract.Requires(name != null);
- Contract.Ensures(Contract.Result<string>() != null);
- int index = Array.BinarySearch(TokenTextWriter.BplKeywords, name);
- if (index >= 0) {
- return "\\" + name;
- } else if (name.Length > 2 && name[0] == 'b' && name[1] == 'v') {
- int dummy;
- return int.TryParse(name.Substring(2), out dummy) ? "\\" + name : name;
- } else if (name.Contains('@')) {
- return SanitizeIdentifier(name.Replace("@", "#AT#"));
- } else {
- return name;
- }
- }
-
- public TokenTextWriter(string filename)
- : this(filename, false)
- {
- }
-
- public TokenTextWriter(string filename, bool pretty)
- : base() {
- Contract.Requires(filename != null);
- this.pretty = pretty;
- this.filename = filename;
- this.writer = new StreamWriter(filename);
- }
-
- public TokenTextWriter(string filename, bool setTokens, bool pretty)
- : base() {
- Contract.Requires(filename != null);
- this.pretty = pretty;
- this.filename = filename;
- this.writer = new StreamWriter(filename);
- this.setTokens = setTokens;
- }
-
- public TokenTextWriter(string filename, TextWriter writer, bool setTokens, bool pretty)
- : base() {
- Contract.Requires(writer != null);
- Contract.Requires(filename != null);
- this.pretty = pretty;
- this.filename = filename;
- this.writer = writer;
- this.setTokens = setTokens;
- }
-
- public TokenTextWriter(string filename, TextWriter writer, bool pretty)
- : base() {
- Contract.Requires(writer != null);
- Contract.Requires(filename != null);
- this.pretty = pretty;
- this.filename = filename;
- this.writer = writer;
- }
-
- public TokenTextWriter(TextWriter writer)
- : this(writer, false)
- {
- }
-
- public TokenTextWriter(TextWriter writer, bool pretty)
- : base() {
- Contract.Requires(writer != null);
- this.pretty = pretty;
- this.filename = "<no file>";
- this.writer = writer;
- }
-
- public void Write(string text) {
- Contract.Requires(text != null);
- this.writer.Write(text);
- this.col += text.Length;
- }
-
- public void WriteIndent(int level) {
- if (!UseForComputingChecksums)
- {
- this.Write(Indent(level));
- }
- }
-
- public void Write(string text, params object[] args) {
- Contract.Requires(text != null);
- this.Write(string.Format(text, args));
- }
-
- public void Write(int level, string text) {
- Contract.Requires(text != null);
- this.WriteIndent(level);
- this.Write(text);
- }
-
- public void Write(int level, string text, params object[] args) {
- Contract.Requires(text != null);
- this.WriteIndent(level);
- this.Write(text, args);
- }
-
- public void Write(Absy node, string text) {
- Contract.Requires(text != null);
- Contract.Requires(node != null);
- this.SetToken(node);
- this.Write(text);
- }
-
- public void Write(Absy node, string text, params string[] args) {
- Contract.Requires(text != null);
- Contract.Requires(node != null);
- this.SetToken(node);
- this.Write(text, args);
- }
-
- public void Write(Absy node, int level, string text) {
- Contract.Requires(text != null);
- Contract.Requires(node != null);
- this.WriteIndent(level);
- this.SetToken(node);
- this.Write(text);
- }
-
- public void Write(Absy node, int level, string text, params object[] args) {
- Contract.Requires(text != null);
- Contract.Requires(node != null);
- this.WriteIndent(level);
- this.SetToken(node);
- this.Write(text, args);
- }
-
- public void WriteLine() {
- this.writer.WriteLine();
- this.line++;
- this.col = 0;
- }
-
- public void WriteLine(string text) {
- Contract.Requires(text != null);
- this.writer.WriteLine(text);
- this.line++;
- this.col = 0;
- }
-
- public void WriteText(string text) {
- Contract.Requires(text != null);
- int processed = 0;
- while (true) {
- int n = text.IndexOf('\n', processed);
- if (n == -1) {
- this.writer.Write(text);
- this.col += text.Length - processed;
- return;
- }
- processed = n + 1;
- this.line++;
- this.col = 0;
- }
- }
-
- public void WriteLine(string text, params object[] args) {
- Contract.Requires(text != null);
- this.WriteLine(string.Format(text, args));
- }
-
- public void WriteLine(int level, string text) {
- Contract.Requires(text != null);
- this.WriteIndent(level);
- this.WriteLine(text);
- }
-
- public void WriteLine(int level, string text, params object[] args) {
- Contract.Requires(text != null);
- this.WriteIndent(level);
- this.WriteLine(text, args);
- }
-
- public void WriteLine(Absy node, string text) {
- Contract.Requires(text != null);
- Contract.Requires(node != null);
- this.SetToken(node);
- this.WriteLine(text);
- }
-
- public void WriteLine(Absy node, int level, string text) {
- Contract.Requires(text != null);
- Contract.Requires(node != null);
- this.SetToken(node);
- this.WriteLine(level, text);
- }
-
- public void WriteLine(Absy node, int level, string text, params object[] args) {
- Contract.Requires(text != null);
- Contract.Requires(node != null);
- this.SetToken(node);
- this.WriteLine(level, text, args);
- }
-
- public void Close() {
- this.writer.Close();
- }
-
- public void Dispose() {
- this.Close();
- }
- }
-
- public class Helpers {
- public static string BeautifyBplString(string s) {
- Contract.Requires(s != null);
- Contract.Ensures(Contract.Result<string>() != null);
- // strip "^" if it is the first character, change "$result" to "result"
- if (s.StartsWith("^") || s == "$result") {
- s = s.Substring(1);
- } else if (s.StartsWith("call")) {
- s = s.Substring(s.IndexOf('@') + 1);
- if (s.StartsWith("formal@")) {
- s = "(value of formal parameter: " + s.Substring(7) + ")";
- }
- }
- // strip "$in" from the end of identifier names
- if (s.EndsWith("$in")) {
- return "(initial value of: " + s.Substring(0, s.Length - 3) + ")";
- } else {
- return s;
- }
- }
- public static string PrettyPrintBplExpr(Expr e) {
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<string>() != null);
- // anything that is unknown will just be printed via ToString
- // OldExpr and QuantifierExpr, BvExtractExpr, BvConcatExpr are ignored for now
- // LiteralExpr is printed as itself by ToString
- if (e is IdentifierExpr) {
- string s = e.ToString();
- return Helpers.BeautifyBplString(s);
- } else if (e is NAryExpr) {
- NAryExpr ne = (NAryExpr)e;
- IAppliable fun = ne.Fun;
- var eSeq = ne.Args;
- if (fun != null) {
- if ((fun.FunctionName == "$Length" || fun.FunctionName == "$StringLength") && eSeq.Count == 1) {
- Expr e0 = eSeq[0];
- if (e0 != null) {
- string s0 = PrettyPrintBplExpr(e0);
- return s0 + ".Length";
- }
- //unexpected, just fall outside to the default
- } else if (fun.FunctionName == "$typeof" && eSeq.Count == 1) {
- Expr e0 = eSeq[0];
- if (e0 != null) {
- string s0 = PrettyPrintBplExpr(e0);
- return "(the dynamic type of: " + s0 + ")";
- }
- //unexpected, just fall outside to the default
- } else if (fun.FunctionName == "IntArrayGet" && eSeq.Count == 2) {
- Expr e0 = eSeq[0];
- Expr e1 = eSeq[1];
- if (e0 != null && e1 != null) {
- string s0 = PrettyPrintBplExpr(e0);
- string s1 = PrettyPrintBplExpr(e1);
- return s0 + "[" + s1 + "]";
- }
- //unexpected, just fall outside to the default
- } else if (fun.FunctionName == "$Is" && eSeq.Count == 2) {
- Expr e0 = eSeq[0];
- Expr e1 = eSeq[1];
- if (e0 != null && e1 != null) {
- string s0 = PrettyPrintBplExpr(e0);
- string s1 = PrettyPrintBplExpr(e1);
- return "(" + s0 + " == null || (" + s0 + " is " + s1 + "))";
- }
- //unexpected, just fall outside to the default
- } else if (fun.FunctionName == "$IsNotNull" && eSeq.Count == 2) {
- Expr e0 = eSeq[0];
- Expr e1 = eSeq[1];
- if (e0 != null && e1 != null) {
- string s0 = PrettyPrintBplExpr(e0);
- string s1 = PrettyPrintBplExpr(e1);
- return "(" + s0 + " is " + s1 + ")";
- }
- //unexpected, just fall outside to the default
- } else if (fun is MapSelect && eSeq.Count <= 3) {
- // only maps with up to two arguments are supported right now (here)
- if (cce.NonNull(eSeq[0]).ToString() == "$Heap") {
- //print Index0.Index1, unless Index1 is "$elements", then just print Index0
- string s0 = PrettyPrintBplExpr(cce.NonNull(eSeq[1]));
- if (eSeq.Count > 2) {
- string s1 = PrettyPrintBplExpr(cce.NonNull(eSeq[2]));
- if (s1 == "$elements") {
- return s0;
- } else {
- if (eSeq[2] is IdentifierExpr) {
- // strip the class name out of a fieldname
- s1 = s1.Substring(s1.LastIndexOf('.') + 1);
- }
- return s0 + "." + s1;
- }
- }
- }
- //unexpected, just fall outside to the default
- } else if (fun is Microsoft.Boogie.BinaryOperator && eSeq.Count == 2) {
- Microsoft.Boogie.BinaryOperator f = (Microsoft.Boogie.BinaryOperator)fun;
- Expr e0 = eSeq[0];
- Expr e1 = eSeq[1];
- if (e0 != null && e1 != null) {
- string s0 = PrettyPrintBplExpr(e0);
- string s1 = PrettyPrintBplExpr(e1);
- string op = "";
- switch (f.Op) {
- case Microsoft.Boogie.BinaryOperator.Opcode.Add:
- op = " + ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.And:
- op = " && ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Div:
- op = " div ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Eq:
- op = " == ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Ge:
- op = " >= ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Gt:
- op = " > ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Iff:
- op = " <==> ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Imp:
- op = " ==> ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Le:
- op = " <= ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Lt:
- op = " < ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Mod:
- op = " mod ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Mul:
- op = " * ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Neq:
- op = " != ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Or:
- op = " || ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Pow:
- op = " ** ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.RealDiv:
- op = " / ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Sub:
- op = " - ";
- break;
- case Microsoft.Boogie.BinaryOperator.Opcode.Subtype:
- op = " <: ";
- break;
- default:
- op = " ";
- break;
- }
- return "(" + s0 + op + s1 + ")";
- }
- //unexpected, just fall outside to the default
- } else {
- string s = fun.FunctionName + "(";
- for (int i = 0; i < eSeq.Count; i++) {
- Expr ex = eSeq[i];
- Contract.Assume(ex != null);
- if (i > 0) {
- s += ", ";
- }
- string t = PrettyPrintBplExpr(ex);
- if (t.StartsWith("(") && t.EndsWith(")")) {
- t = t.Substring(1, t.Length - 2);
- }
- s += t;
- }
- s += ")";
- return s;
- //unexpected, just fall outside to the default
- }
- }
- }
-
- return e.ToString();
- }
-
- private static readonly DateTime StartUp = DateTime.UtcNow;
-
- public static void ExtraTraceInformation(string point) {
- Contract.Requires(point != null);
- if (CommandLineOptions.Clo.TraceTimes) {
- DateTime now = DateTime.UtcNow;
- TimeSpan timeSinceStartUp = now - StartUp;
- Console.WriteLine(">>> {0} [{1} s]", point, timeSinceStartUp.TotalSeconds);
- }
- }
-
- // Substitute @PROC@ in a filename with the given descName
- public static string SubstituteAtPROC(string descName, string fileName) {
- Contract.Requires(fileName != null);
- Contract.Requires(descName != null);
- Contract.Ensures(Contract.Result<string>() != null);
- System.Text.StringBuilder/*!*/ sb =
- new System.Text.StringBuilder(descName.Length);
- // quote the name, characters like ^ cause trouble in CMD
- // while $ could cause trouble in SH
- foreach (char c in descName) {
- if (Char.IsLetterOrDigit(c) || c == '.') {
- sb.Append(c);
- } else {
- sb.Append('_');
- }
- }
- string pn = sb.ToString();
- // We attempt to avoid filenames that are too long, but we only
- // do it by truncating the @PROC@ replacement, which leaves unchanged
- // any filename extension specified by the user. We base our
- // calculations on that there is at most one occurrence of @PROC@.
- if (180 <= fileName.Length - 6 + pn.Length) {
- pn = pn.Substring(0, Math.Max(180 - (fileName.Length - 6), 0)) + "-n" + System.Threading.Interlocked.Increment(ref sequenceId);
- }
-
- return fileName.Replace("@PROC@", pn);
- }
-
- private static int sequenceId = -1;
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+namespace Microsoft.Boogie {
+ using System;
+ using System.IO;
+ using System.Collections;
+ using System.Diagnostics.Contracts;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Text;
+
+ public static class LinqExtender
+ {
+ public static string Concat(this IEnumerable<string> strings, string separator)
+ {
+ var sb = new StringBuilder();
+ var first = true;
+ foreach (var s in strings) {
+ if (!first)
+ sb.Append(separator);
+ first = false;
+ sb.Append(s);
+ }
+ return sb.ToString();
+ }
+
+ public static IEnumerable<T> Concat1<T>(this IEnumerable<T> objects, T final)
+ {
+ foreach (var s in objects) {
+ yield return s;
+ }
+ yield return final;
+ }
+
+ public static string MapConcat<T>(this IEnumerable<T> objects, Func<T,string> toString, string separator)
+ {
+ var sb = new StringBuilder();
+ var first = true;
+ foreach (var s in objects) {
+ if (!first)
+ sb.Append(separator);
+ first = false;
+ sb.Append(toString(s));
+ }
+ return sb.ToString();
+ }
+
+ public static IEnumerable<T> SkipEnd<T>(this IEnumerable<T> source, int count)
+ {
+ var l = source.ToList();
+ if (count >= l.Count)
+ return Enumerable.Empty<T>();
+ l.RemoveRange(l.Count - count, count);
+ return l;
+ }
+
+ public static void Iter<T>(this IEnumerable<T> coll, Action<T> fn)
+ {
+ foreach (var e in coll) fn(e);
+ }
+
+ public static IEnumerable<Tuple<TSource1, TSource2>> Zip<TSource1, TSource2>(this IEnumerable<TSource1> source1, IEnumerable<TSource2> source2)
+ {
+ return source1.Zip(source2, (e1, e2) => new Tuple<TSource1, TSource2>(e1, e2));
+ }
+ }
+
+ public class TokenTextWriter : IDisposable {
+ string/*!*/ filename;
+ TextWriter/*!*/ writer;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(filename != null);
+ Contract.Invariant(writer != null);
+ }
+
+ bool setTokens = true;
+ int line = 1;
+ int col;
+ public bool UseForComputingChecksums;
+
+ private const int indent_size = 2;
+ protected static string Indent(int level) {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return new string(' ', (indent_size * level));
+ }
+
+
+ // Keywords, this array *must* be sorted
+ public static readonly string[]/*!*/ BplKeywords =
+ {
+ "assert",
+ "assume",
+ "axiom",
+ "bool",
+ "break",
+ "call",
+ "cast",
+ "const",
+ "else",
+ "ensures",
+ "exists",
+ "false",
+ "forall",
+ "free",
+ "function",
+ "goto",
+ "havoc",
+ "if",
+ "implementation",
+ "int",
+ "invariant",
+ "modifies",
+ "old",
+ "procedure",
+ "public",
+ "requires",
+ "return",
+ "returns",
+ "true",
+ "type",
+ "unique",
+ "var",
+ "where",
+ "while",
+ };
+
+ // "Pretty" printing: not very efficient, and not necessarily very pretty, but helps a bit
+ private readonly bool pretty;
+
+ // The stack of writers in a current separator-block.
+ // The string is an optional identifier that allows you
+ // to not start a new indentation for e.g. "&&" in "a && b && c".
+ // When the pretty printing is finished, this should be empty.
+ Stack<KeyValuePair<string, List<TextWriter>>> wstk;
+
+ // The original writer: where everything should finally end up.
+ TextWriter actual_writer;
+
+ public bool push(string type = null) {
+ if (pretty) {
+ if (wstk == null) {
+ wstk = new Stack<KeyValuePair<string, List<TextWriter>>>();
+ actual_writer = writer;
+ }
+ if (wstk.Count > 0 && wstk.Peek().Key == type && type != null) {
+ sep();
+ return false; // don't actually pop this thing (send this bool to pop)
+ } else {
+ wstk.Push(new KeyValuePair<string, List<TextWriter>>(type, new List<TextWriter> { }));
+ sep();
+ return true; // this needs to be popped
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public void pop(bool do_it = true) {
+ if (pretty) {
+ if (do_it) {
+ List<TextWriter> ws = wstk.Pop().Value;
+ // try to figure out if you should insert line breaks between
+ // them or print them on one single line
+ // this breaks down when there are newlines inserted
+ List<String> ss = new List<String>();
+ int len = 0;
+ foreach (TextWriter w in ws) {
+ foreach (String s in w.ToString().Split(new String[] { "\r\n", "\n" }, StringSplitOptions.None)) {
+ if (s.Length > 0) {
+ ss.Add(s);
+ len += s.Length;
+ // len = Math.Max(len, s.Length);
+ }
+ }
+ }
+ // figure out which is the next writer to use
+ List<TextWriter> tw = wstk.Count > 0 ? wstk.Peek().Value : null;
+ if (tw == null) {
+ writer = actual_writer;
+ } else {
+ writer = tw.Last();
+ }
+ // write the strings (we would like to know WHERE we are in the document here)
+ if (len > 80 /* - wstk.Count * 2 */) {
+ for (int i = 0; i < ss.Count; i++) {
+ if (i != ss.Count - 1) {
+ writer.WriteLine(ss[i]);
+ writer.Write(" ");
+ } else {
+ writer.Write(ss[i]);
+ }
+ }
+ } else {
+ foreach (String s in ss) {
+ writer.Write(s);
+ }
+ }
+ }
+ }
+ }
+
+ public void sep() {
+ if (pretty) {
+ List<TextWriter> ws = wstk.Peek().Value;
+
+ writer = new StringWriter();
+ wstk.Peek().Value.Add(writer);
+ }
+ }
+
+ private IToken/*!*/ CurrentToken {
+ get {
+ Contract.Ensures(Contract.Result<IToken>() != null);
+
+ Token token = new Token();
+ token.filename = filename;
+ token.line = line;
+ token.col = col;
+ return token;
+ }
+ }
+
+ public void SetToken(Absy absy) {
+ Contract.Requires(absy != null);
+ this.SetToken(t => absy.tok = t);
+ }
+
+ public void SetToken(IfThenElse expr)
+ {
+ Contract.Requires(expr != null);
+ this.SetToken(t => expr.tok = t);
+ }
+
+ public void SetToken(Action<IToken> setter) {
+ Contract.Requires(setter != null);
+ if (this.setTokens) {
+ setter(this.CurrentToken);
+ }
+ }
+
+ public void SetToken(ref IToken tok) {
+ Contract.Requires(tok != null);
+ if (this.setTokens) {
+ tok = this.CurrentToken;
+ }
+ }
+
+ public static string SanitizeIdentifier(string name) {
+ Contract.Requires(name != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ int index = Array.BinarySearch(TokenTextWriter.BplKeywords, name);
+ if (index >= 0) {
+ return "\\" + name;
+ } else if (name.Length > 2 && name[0] == 'b' && name[1] == 'v') {
+ int dummy;
+ return int.TryParse(name.Substring(2), out dummy) ? "\\" + name : name;
+ } else if (name.Contains('@')) {
+ return SanitizeIdentifier(name.Replace("@", "#AT#"));
+ } else {
+ return name;
+ }
+ }
+
+ public TokenTextWriter(string filename)
+ : this(filename, false)
+ {
+ }
+
+ public TokenTextWriter(string filename, bool pretty)
+ : base() {
+ Contract.Requires(filename != null);
+ this.pretty = pretty;
+ this.filename = filename;
+ this.writer = new StreamWriter(filename);
+ }
+
+ public TokenTextWriter(string filename, bool setTokens, bool pretty)
+ : base() {
+ Contract.Requires(filename != null);
+ this.pretty = pretty;
+ this.filename = filename;
+ this.writer = new StreamWriter(filename);
+ this.setTokens = setTokens;
+ }
+
+ public TokenTextWriter(string filename, TextWriter writer, bool setTokens, bool pretty)
+ : base() {
+ Contract.Requires(writer != null);
+ Contract.Requires(filename != null);
+ this.pretty = pretty;
+ this.filename = filename;
+ this.writer = writer;
+ this.setTokens = setTokens;
+ }
+
+ public TokenTextWriter(string filename, TextWriter writer, bool pretty)
+ : base() {
+ Contract.Requires(writer != null);
+ Contract.Requires(filename != null);
+ this.pretty = pretty;
+ this.filename = filename;
+ this.writer = writer;
+ }
+
+ public TokenTextWriter(TextWriter writer)
+ : this(writer, false)
+ {
+ }
+
+ public TokenTextWriter(TextWriter writer, bool pretty)
+ : base() {
+ Contract.Requires(writer != null);
+ this.pretty = pretty;
+ this.filename = "<no file>";
+ this.writer = writer;
+ }
+
+ public void Write(string text) {
+ Contract.Requires(text != null);
+ this.writer.Write(text);
+ this.col += text.Length;
+ }
+
+ public void WriteIndent(int level) {
+ if (!UseForComputingChecksums)
+ {
+ this.Write(Indent(level));
+ }
+ }
+
+ public void Write(string text, params object[] args) {
+ Contract.Requires(text != null);
+ this.Write(string.Format(text, args));
+ }
+
+ public void Write(int level, string text) {
+ Contract.Requires(text != null);
+ this.WriteIndent(level);
+ this.Write(text);
+ }
+
+ public void Write(int level, string text, params object[] args) {
+ Contract.Requires(text != null);
+ this.WriteIndent(level);
+ this.Write(text, args);
+ }
+
+ public void Write(Absy node, string text) {
+ Contract.Requires(text != null);
+ Contract.Requires(node != null);
+ this.SetToken(node);
+ this.Write(text);
+ }
+
+ public void Write(Absy node, string text, params string[] args) {
+ Contract.Requires(text != null);
+ Contract.Requires(node != null);
+ this.SetToken(node);
+ this.Write(text, args);
+ }
+
+ public void Write(Absy node, int level, string text) {
+ Contract.Requires(text != null);
+ Contract.Requires(node != null);
+ this.WriteIndent(level);
+ this.SetToken(node);
+ this.Write(text);
+ }
+
+ public void Write(Absy node, int level, string text, params object[] args) {
+ Contract.Requires(text != null);
+ Contract.Requires(node != null);
+ this.WriteIndent(level);
+ this.SetToken(node);
+ this.Write(text, args);
+ }
+
+ public void WriteLine() {
+ this.writer.WriteLine();
+ this.line++;
+ this.col = 0;
+ }
+
+ public void WriteLine(string text) {
+ Contract.Requires(text != null);
+ this.writer.WriteLine(text);
+ this.line++;
+ this.col = 0;
+ }
+
+ public void WriteText(string text) {
+ Contract.Requires(text != null);
+ int processed = 0;
+ while (true) {
+ int n = text.IndexOf('\n', processed);
+ if (n == -1) {
+ this.writer.Write(text);
+ this.col += text.Length - processed;
+ return;
+ }
+ processed = n + 1;
+ this.line++;
+ this.col = 0;
+ }
+ }
+
+ public void WriteLine(string text, params object[] args) {
+ Contract.Requires(text != null);
+ this.WriteLine(string.Format(text, args));
+ }
+
+ public void WriteLine(int level, string text) {
+ Contract.Requires(text != null);
+ this.WriteIndent(level);
+ this.WriteLine(text);
+ }
+
+ public void WriteLine(int level, string text, params object[] args) {
+ Contract.Requires(text != null);
+ this.WriteIndent(level);
+ this.WriteLine(text, args);
+ }
+
+ public void WriteLine(Absy node, string text) {
+ Contract.Requires(text != null);
+ Contract.Requires(node != null);
+ this.SetToken(node);
+ this.WriteLine(text);
+ }
+
+ public void WriteLine(Absy node, int level, string text) {
+ Contract.Requires(text != null);
+ Contract.Requires(node != null);
+ this.SetToken(node);
+ this.WriteLine(level, text);
+ }
+
+ public void WriteLine(Absy node, int level, string text, params object[] args) {
+ Contract.Requires(text != null);
+ Contract.Requires(node != null);
+ this.SetToken(node);
+ this.WriteLine(level, text, args);
+ }
+
+ public void Close() {
+ this.writer.Close();
+ }
+
+ public void Dispose() {
+ this.Close();
+ }
+ }
+
+ public class Helpers {
+ public static string BeautifyBplString(string s) {
+ Contract.Requires(s != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ // strip "^" if it is the first character, change "$result" to "result"
+ if (s.StartsWith("^") || s == "$result") {
+ s = s.Substring(1);
+ } else if (s.StartsWith("call")) {
+ s = s.Substring(s.IndexOf('@') + 1);
+ if (s.StartsWith("formal@")) {
+ s = "(value of formal parameter: " + s.Substring(7) + ")";
+ }
+ }
+ // strip "$in" from the end of identifier names
+ if (s.EndsWith("$in")) {
+ return "(initial value of: " + s.Substring(0, s.Length - 3) + ")";
+ } else {
+ return s;
+ }
+ }
+ public static string PrettyPrintBplExpr(Expr e) {
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ // anything that is unknown will just be printed via ToString
+ // OldExpr and QuantifierExpr, BvExtractExpr, BvConcatExpr are ignored for now
+ // LiteralExpr is printed as itself by ToString
+ if (e is IdentifierExpr) {
+ string s = e.ToString();
+ return Helpers.BeautifyBplString(s);
+ } else if (e is NAryExpr) {
+ NAryExpr ne = (NAryExpr)e;
+ IAppliable fun = ne.Fun;
+ var eSeq = ne.Args;
+ if (fun != null) {
+ if ((fun.FunctionName == "$Length" || fun.FunctionName == "$StringLength") && eSeq.Count == 1) {
+ Expr e0 = eSeq[0];
+ if (e0 != null) {
+ string s0 = PrettyPrintBplExpr(e0);
+ return s0 + ".Length";
+ }
+ //unexpected, just fall outside to the default
+ } else if (fun.FunctionName == "$typeof" && eSeq.Count == 1) {
+ Expr e0 = eSeq[0];
+ if (e0 != null) {
+ string s0 = PrettyPrintBplExpr(e0);
+ return "(the dynamic type of: " + s0 + ")";
+ }
+ //unexpected, just fall outside to the default
+ } else if (fun.FunctionName == "IntArrayGet" && eSeq.Count == 2) {
+ Expr e0 = eSeq[0];
+ Expr e1 = eSeq[1];
+ if (e0 != null && e1 != null) {
+ string s0 = PrettyPrintBplExpr(e0);
+ string s1 = PrettyPrintBplExpr(e1);
+ return s0 + "[" + s1 + "]";
+ }
+ //unexpected, just fall outside to the default
+ } else if (fun.FunctionName == "$Is" && eSeq.Count == 2) {
+ Expr e0 = eSeq[0];
+ Expr e1 = eSeq[1];
+ if (e0 != null && e1 != null) {
+ string s0 = PrettyPrintBplExpr(e0);
+ string s1 = PrettyPrintBplExpr(e1);
+ return "(" + s0 + " == null || (" + s0 + " is " + s1 + "))";
+ }
+ //unexpected, just fall outside to the default
+ } else if (fun.FunctionName == "$IsNotNull" && eSeq.Count == 2) {
+ Expr e0 = eSeq[0];
+ Expr e1 = eSeq[1];
+ if (e0 != null && e1 != null) {
+ string s0 = PrettyPrintBplExpr(e0);
+ string s1 = PrettyPrintBplExpr(e1);
+ return "(" + s0 + " is " + s1 + ")";
+ }
+ //unexpected, just fall outside to the default
+ } else if (fun is MapSelect && eSeq.Count <= 3) {
+ // only maps with up to two arguments are supported right now (here)
+ if (cce.NonNull(eSeq[0]).ToString() == "$Heap") {
+ //print Index0.Index1, unless Index1 is "$elements", then just print Index0
+ string s0 = PrettyPrintBplExpr(cce.NonNull(eSeq[1]));
+ if (eSeq.Count > 2) {
+ string s1 = PrettyPrintBplExpr(cce.NonNull(eSeq[2]));
+ if (s1 == "$elements") {
+ return s0;
+ } else {
+ if (eSeq[2] is IdentifierExpr) {
+ // strip the class name out of a fieldname
+ s1 = s1.Substring(s1.LastIndexOf('.') + 1);
+ }
+ return s0 + "." + s1;
+ }
+ }
+ }
+ //unexpected, just fall outside to the default
+ } else if (fun is Microsoft.Boogie.BinaryOperator && eSeq.Count == 2) {
+ Microsoft.Boogie.BinaryOperator f = (Microsoft.Boogie.BinaryOperator)fun;
+ Expr e0 = eSeq[0];
+ Expr e1 = eSeq[1];
+ if (e0 != null && e1 != null) {
+ string s0 = PrettyPrintBplExpr(e0);
+ string s1 = PrettyPrintBplExpr(e1);
+ string op = "";
+ switch (f.Op) {
+ case Microsoft.Boogie.BinaryOperator.Opcode.Add:
+ op = " + ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.And:
+ op = " && ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Div:
+ op = " div ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Eq:
+ op = " == ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Ge:
+ op = " >= ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Gt:
+ op = " > ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Iff:
+ op = " <==> ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Imp:
+ op = " ==> ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Le:
+ op = " <= ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Lt:
+ op = " < ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Mod:
+ op = " mod ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Mul:
+ op = " * ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Neq:
+ op = " != ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Or:
+ op = " || ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Pow:
+ op = " ** ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.RealDiv:
+ op = " / ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Sub:
+ op = " - ";
+ break;
+ case Microsoft.Boogie.BinaryOperator.Opcode.Subtype:
+ op = " <: ";
+ break;
+ default:
+ op = " ";
+ break;
+ }
+ return "(" + s0 + op + s1 + ")";
+ }
+ //unexpected, just fall outside to the default
+ } else {
+ string s = fun.FunctionName + "(";
+ for (int i = 0; i < eSeq.Count; i++) {
+ Expr ex = eSeq[i];
+ Contract.Assume(ex != null);
+ if (i > 0) {
+ s += ", ";
+ }
+ string t = PrettyPrintBplExpr(ex);
+ if (t.StartsWith("(") && t.EndsWith(")")) {
+ t = t.Substring(1, t.Length - 2);
+ }
+ s += t;
+ }
+ s += ")";
+ return s;
+ //unexpected, just fall outside to the default
+ }
+ }
+ }
+
+ return e.ToString();
+ }
+
+ private static readonly DateTime StartUp = DateTime.UtcNow;
+
+ public static void ExtraTraceInformation(string point) {
+ Contract.Requires(point != null);
+ if (CommandLineOptions.Clo.TraceTimes) {
+ DateTime now = DateTime.UtcNow;
+ TimeSpan timeSinceStartUp = now - StartUp;
+ Console.WriteLine(">>> {0} [{1} s]", point, timeSinceStartUp.TotalSeconds);
+ }
+ }
+
+ // Substitute @PROC@ in a filename with the given descName
+ public static string SubstituteAtPROC(string descName, string fileName) {
+ Contract.Requires(fileName != null);
+ Contract.Requires(descName != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ System.Text.StringBuilder/*!*/ sb =
+ new System.Text.StringBuilder(descName.Length);
+ // quote the name, characters like ^ cause trouble in CMD
+ // while $ could cause trouble in SH
+ foreach (char c in descName) {
+ if (Char.IsLetterOrDigit(c) || c == '.') {
+ sb.Append(c);
+ } else {
+ sb.Append('_');
+ }
+ }
+ string pn = sb.ToString();
+ // We attempt to avoid filenames that are too long, but we only
+ // do it by truncating the @PROC@ replacement, which leaves unchanged
+ // any filename extension specified by the user. We base our
+ // calculations on that there is at most one occurrence of @PROC@.
+ if (180 <= fileName.Length - 6 + pn.Length) {
+ pn = pn.Substring(0, Math.Max(180 - (fileName.Length - 6), 0)) + "-n" + System.Threading.Interlocked.Increment(ref sequenceId);
+ }
+
+ return fileName.Replace("@PROC@", pn);
+ }
+
+ private static int sequenceId = -1;
+
+ }
+}
diff --git a/Source/Core/VCExp.cs b/Source/Core/VCExp.cs
index 87b8f3e6..63dca024 100644
--- a/Source/Core/VCExp.cs
+++ b/Source/Core/VCExp.cs
@@ -1,238 +1,238 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Text;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-namespace Microsoft.Boogie {
-
- public class ProverOptions {
- public class OptionException : Exception {
- public OptionException(string msg)
- : base(msg) {
- Contract.Requires(msg != null);
- }
- }
-
- public string/*?*/ LogFilename = null;
- public bool AppendLogFile = false;
- public bool SeparateLogFiles = false;
- // Say (DBG_WAS_VALID) or (DBG_WAS_INVALID) after query
- public bool ForceLogStatus = false;
- public int TimeLimit = 0;
- public int MemoryLimit = 0;
- public int Verbosity = 0;
- public string ProverPath;
-
- private string/*!*/ stringRepr = "";
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(stringRepr != null);
- }
-
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return stringRepr;
- }
-
- // The usual thing to override.
- protected virtual bool Parse(string opt) {
- Contract.Requires(opt != null);
- return ParseString(opt, "LOG_FILE", ref LogFilename) ||
- ParseBool(opt, "APPEND_LOG_FILE", ref AppendLogFile) ||
- ParseBool(opt, "FORCE_LOG_STATUS", ref ForceLogStatus) ||
- ParseInt(opt, "MEMORY_LIMIT", ref MemoryLimit) ||
- ParseInt(opt, "VERBOSITY", ref Verbosity) ||
- ParseInt(opt, "TIME_LIMIT", ref TimeLimit) ||
- ParseString(opt, "PROVER_PATH", ref ProverPath);
- // || base.Parse(opt)
- }
-
- public virtual string Help
- {
- get
- {
- return
-@"
-Generic prover options :
-~~~~~~~~~~~~~~~~~~~~~~~
-LOG_FILE=<string> Log input for the theorem prover. The string @PROC@ in the filename
- causes there to be one prover log file per verification condition,
- and is expanded to the name of the procedure that the verification
- condition is for.
-APPEND_LOG_FILE=<bool> Append, rather than overwrite the log file.
-MEMORY_LIMIT=<int> Memory limit of the prover in megabytes.
-VERBOSITY=<int> The higher, the more verbose.
-TIME_LIMIT=<int> Time limit per verification condition in miliseconds.
-PROVER_PATH=<string> Path to the prover to use.
-
-The generic options may or may not be used by the prover plugin.
-";
-
- }
- }
-
- public virtual void Parse(IEnumerable<string/*!*/>/*!*/ opts) {
- Contract.Requires(cce.NonNullElements(opts));
- StringBuilder sb = new StringBuilder(stringRepr);
- Contract.Assert(sb != null);
- foreach (string/*!*/ opt in opts) {
- Contract.Assert(opt != null);
- if (!Parse(opt)) {
- ReportError("Unrecognised prover option: " + opt);
- }
- sb.Append(opt).Append(" ");
- }
- stringRepr = sb.ToString();
- PostParse();
- }
-
- public virtual void PostParse() {
- if (LogFilename != null && LogFilename.Contains("@PROC@")) {
- SeparateLogFiles = true;
- }
- }
-
- protected void ReportError(string msg) {
- Contract.Requires(msg != null);
- throw new OptionException(msg + "\n\n" + Help);
- }
-
- protected virtual bool ParseString(string opt, string name, ref string field) {
- Contract.Requires(name != null);
- Contract.Requires(opt != null);
- if (opt.Length >= name.Length && opt.StartsWith(name)) {
- if (opt.Length == name.Length) {
- field = "";
- return true;
- } else if (opt[name.Length] == '=' || opt[name.Length] == ':') {
- field = opt.Substring(name.Length + 1);
- return true;
- }
- }
- return false;
- }
-
- protected virtual bool ParseBool(string opt, string name, ref bool field) {
- Contract.Requires(name != null);
- Contract.Requires(opt != null);
- string tmp = null;
- if (ParseString(opt, name, ref tmp))
- switch (cce.NonNull(tmp).ToLower()) {
- case "1":
- case "true":
- case "":
- field = true;
- return true;
- case "0":
- case "false":
- field = false;
- return true;
- default:
- ReportError("Invalid Boolean option \"" + opt + "\"");
- return false;
- }
- return false;
- }
-
- protected virtual bool ParseInt(string opt, string name, ref int field) {
- Contract.Requires(name != null);
- Contract.Requires(opt != null);
- string tmp = null;
- int t2;
- if (ParseString(opt, name, ref tmp)) {
- if (int.TryParse(cce.NonNull(tmp), out t2)) {
- field = t2;
- return true;
- } else {
- ReportError("Invalid integer option \"" + opt + "\"");
- }
- }
- return false;
- }
-
- public virtual TextWriter OpenLog(string/*?*/ descName) {
- if (LogFilename != null) {
- string filename = LogFilename;
- Contract.Assert(filename != null);
- if (descName != null)
- filename = Helpers.SubstituteAtPROC(descName, filename);
- return new StreamWriter(filename, AppendLogFile);
- } else {
- return null;
- }
- }
- }
-
- [ContractClass(typeof(ProverFactoryContracts))]
- public abstract class ProverFactory {
- // Really returns ProverInterface.
- //public abstract object! SpawnProver(ProverOptions! options, object! ctxt);
- public abstract object SpawnProver(ProverOptions options, object ctxt);
-
- // Really returns ProverContext
- public abstract object/*!*/ NewProverContext(ProverOptions/*!*/ options);
-
- public virtual ProverOptions BlankProverOptions() {
- Contract.Ensures(Contract.Result<ProverOptions>() != null);
- return new ProverOptions();
- }
-
- // return true if the prover supports DAG AST as opposed to LET AST
- public virtual bool SupportsDags {
- get {
- return false;
- }
- }
-
- public virtual CommandLineOptions.VCVariety DefaultVCVariety {
- get {
- Contract.Ensures(Contract.Result<CommandLineOptions.VCVariety>() != CommandLineOptions.VCVariety.Unspecified);
- return CommandLineOptions.VCVariety.DagIterative;
- }
- }
-
- public virtual bool SupportsLabels(ProverOptions options) {
- return true;
- }
-
- public virtual void Close() {
- }
-
- public static ProverFactory Load(string proverName) {
- Contract.Requires(proverName != null);
- Contract.Ensures(Contract.Result<ProverFactory>() != null);
- Contract.Ensures(cce.IsNew(Contract.Result<ProverFactory>()) && cce.Owner.New(Contract.Result<ProverFactory>()));
- string/*!*/ path;
- if (proverName.IndexOf("/") > 0 || proverName.IndexOf("\\") > 0) {
- path = proverName;
- } else {
- string codebase = cce.NonNull(System.IO.Path.GetDirectoryName(
- cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location)));
- path = System.IO.Path.Combine(codebase, "Provers." + proverName + ".dll");
- }
- Assembly asm = cce.NonNull(Assembly.LoadFrom(path));
- string name = cce.NonNull(asm.GetName().Name);
- System.Type factoryType = cce.NonNull(asm.GetType("Microsoft.Boogie." + name.Replace("Provers.", "") + ".Factory"));
- return cce.NonNull((ProverFactory/*!*/)Activator.CreateInstance(factoryType));
- }
- }
- [ContractClassFor(typeof(ProverFactory))]
- public abstract class ProverFactoryContracts : ProverFactory {
- public override object NewProverContext(ProverOptions options) {
- Contract.Requires(options != null);
- Contract.Ensures(Contract.Result<object>() != null);
-
- throw new NotImplementedException();
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Text;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+namespace Microsoft.Boogie {
+
+ public class ProverOptions {
+ public class OptionException : Exception {
+ public OptionException(string msg)
+ : base(msg) {
+ Contract.Requires(msg != null);
+ }
+ }
+
+ public string/*?*/ LogFilename = null;
+ public bool AppendLogFile = false;
+ public bool SeparateLogFiles = false;
+ // Say (DBG_WAS_VALID) or (DBG_WAS_INVALID) after query
+ public bool ForceLogStatus = false;
+ public int TimeLimit = 0;
+ public int MemoryLimit = 0;
+ public int Verbosity = 0;
+ public string ProverPath;
+
+ private string/*!*/ stringRepr = "";
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(stringRepr != null);
+ }
+
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return stringRepr;
+ }
+
+ // The usual thing to override.
+ protected virtual bool Parse(string opt) {
+ Contract.Requires(opt != null);
+ return ParseString(opt, "LOG_FILE", ref LogFilename) ||
+ ParseBool(opt, "APPEND_LOG_FILE", ref AppendLogFile) ||
+ ParseBool(opt, "FORCE_LOG_STATUS", ref ForceLogStatus) ||
+ ParseInt(opt, "MEMORY_LIMIT", ref MemoryLimit) ||
+ ParseInt(opt, "VERBOSITY", ref Verbosity) ||
+ ParseInt(opt, "TIME_LIMIT", ref TimeLimit) ||
+ ParseString(opt, "PROVER_PATH", ref ProverPath);
+ // || base.Parse(opt)
+ }
+
+ public virtual string Help
+ {
+ get
+ {
+ return
+@"
+Generic prover options :
+~~~~~~~~~~~~~~~~~~~~~~~
+LOG_FILE=<string> Log input for the theorem prover. The string @PROC@ in the filename
+ causes there to be one prover log file per verification condition,
+ and is expanded to the name of the procedure that the verification
+ condition is for.
+APPEND_LOG_FILE=<bool> Append, rather than overwrite the log file.
+MEMORY_LIMIT=<int> Memory limit of the prover in megabytes.
+VERBOSITY=<int> The higher, the more verbose.
+TIME_LIMIT=<int> Time limit per verification condition in miliseconds.
+PROVER_PATH=<string> Path to the prover to use.
+
+The generic options may or may not be used by the prover plugin.
+";
+
+ }
+ }
+
+ public virtual void Parse(IEnumerable<string/*!*/>/*!*/ opts) {
+ Contract.Requires(cce.NonNullElements(opts));
+ StringBuilder sb = new StringBuilder(stringRepr);
+ Contract.Assert(sb != null);
+ foreach (string/*!*/ opt in opts) {
+ Contract.Assert(opt != null);
+ if (!Parse(opt)) {
+ ReportError("Unrecognised prover option: " + opt);
+ }
+ sb.Append(opt).Append(" ");
+ }
+ stringRepr = sb.ToString();
+ PostParse();
+ }
+
+ public virtual void PostParse() {
+ if (LogFilename != null && LogFilename.Contains("@PROC@")) {
+ SeparateLogFiles = true;
+ }
+ }
+
+ protected void ReportError(string msg) {
+ Contract.Requires(msg != null);
+ throw new OptionException(msg + "\n\n" + Help);
+ }
+
+ protected virtual bool ParseString(string opt, string name, ref string field) {
+ Contract.Requires(name != null);
+ Contract.Requires(opt != null);
+ if (opt.Length >= name.Length && opt.StartsWith(name)) {
+ if (opt.Length == name.Length) {
+ field = "";
+ return true;
+ } else if (opt[name.Length] == '=' || opt[name.Length] == ':') {
+ field = opt.Substring(name.Length + 1);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected virtual bool ParseBool(string opt, string name, ref bool field) {
+ Contract.Requires(name != null);
+ Contract.Requires(opt != null);
+ string tmp = null;
+ if (ParseString(opt, name, ref tmp))
+ switch (cce.NonNull(tmp).ToLower()) {
+ case "1":
+ case "true":
+ case "":
+ field = true;
+ return true;
+ case "0":
+ case "false":
+ field = false;
+ return true;
+ default:
+ ReportError("Invalid Boolean option \"" + opt + "\"");
+ return false;
+ }
+ return false;
+ }
+
+ protected virtual bool ParseInt(string opt, string name, ref int field) {
+ Contract.Requires(name != null);
+ Contract.Requires(opt != null);
+ string tmp = null;
+ int t2;
+ if (ParseString(opt, name, ref tmp)) {
+ if (int.TryParse(cce.NonNull(tmp), out t2)) {
+ field = t2;
+ return true;
+ } else {
+ ReportError("Invalid integer option \"" + opt + "\"");
+ }
+ }
+ return false;
+ }
+
+ public virtual TextWriter OpenLog(string/*?*/ descName) {
+ if (LogFilename != null) {
+ string filename = LogFilename;
+ Contract.Assert(filename != null);
+ if (descName != null)
+ filename = Helpers.SubstituteAtPROC(descName, filename);
+ return new StreamWriter(filename, AppendLogFile);
+ } else {
+ return null;
+ }
+ }
+ }
+
+ [ContractClass(typeof(ProverFactoryContracts))]
+ public abstract class ProverFactory {
+ // Really returns ProverInterface.
+ //public abstract object! SpawnProver(ProverOptions! options, object! ctxt);
+ public abstract object SpawnProver(ProverOptions options, object ctxt);
+
+ // Really returns ProverContext
+ public abstract object/*!*/ NewProverContext(ProverOptions/*!*/ options);
+
+ public virtual ProverOptions BlankProverOptions() {
+ Contract.Ensures(Contract.Result<ProverOptions>() != null);
+ return new ProverOptions();
+ }
+
+ // return true if the prover supports DAG AST as opposed to LET AST
+ public virtual bool SupportsDags {
+ get {
+ return false;
+ }
+ }
+
+ public virtual CommandLineOptions.VCVariety DefaultVCVariety {
+ get {
+ Contract.Ensures(Contract.Result<CommandLineOptions.VCVariety>() != CommandLineOptions.VCVariety.Unspecified);
+ return CommandLineOptions.VCVariety.DagIterative;
+ }
+ }
+
+ public virtual bool SupportsLabels(ProverOptions options) {
+ return true;
+ }
+
+ public virtual void Close() {
+ }
+
+ public static ProverFactory Load(string proverName) {
+ Contract.Requires(proverName != null);
+ Contract.Ensures(Contract.Result<ProverFactory>() != null);
+ Contract.Ensures(cce.IsNew(Contract.Result<ProverFactory>()) && cce.Owner.New(Contract.Result<ProverFactory>()));
+ string/*!*/ path;
+ if (proverName.IndexOf("/") > 0 || proverName.IndexOf("\\") > 0) {
+ path = proverName;
+ } else {
+ string codebase = cce.NonNull(System.IO.Path.GetDirectoryName(
+ cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location)));
+ path = System.IO.Path.Combine(codebase, "Provers." + proverName + ".dll");
+ }
+ Assembly asm = cce.NonNull(Assembly.LoadFrom(path));
+ string name = cce.NonNull(asm.GetName().Name);
+ System.Type factoryType = cce.NonNull(asm.GetType("Microsoft.Boogie." + name.Replace("Provers.", "") + ".Factory"));
+ return cce.NonNull((ProverFactory/*!*/)Activator.CreateInstance(factoryType));
+ }
+ }
+ [ContractClassFor(typeof(ProverFactory))]
+ public abstract class ProverFactoryContracts : ProverFactory {
+ public override object NewProverContext(ProverOptions options) {
+ Contract.Requires(options != null);
+ Contract.Ensures(Contract.Result<object>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Source/Core/VariableDependenceAnalyser.cs b/Source/Core/VariableDependenceAnalyser.cs
index ab12a47e..30e1dbf3 100644
--- a/Source/Core/VariableDependenceAnalyser.cs
+++ b/Source/Core/VariableDependenceAnalyser.cs
@@ -1,646 +1,646 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-
-
-namespace Microsoft.Boogie {
-
- public interface IVariableDependenceAnalyser {
-
- void Analyse();
- VariableDescriptor MakeDescriptor(string proc, Variable v);
- HashSet<VariableDescriptor> DependsOn(VariableDescriptor v);
- void dump();
- void ShowDependencyChain(VariableDescriptor source, VariableDescriptor target);
- bool VariableRelevantToAnalysis(Variable v, string proc);
- bool Ignoring(Variable v, string proc);
-
- }
-
- public abstract class VariableDescriptor : IComparable {
- internal readonly string Name;
- internal VariableDescriptor(string Name) {
- this.Name = Name;
- }
-
- public override string ToString() {
- return Name;
- }
-
- public override bool Equals(object that) {
-
- if (object.ReferenceEquals(this, that)) {
- return true;
- }
-
- VariableDescriptor thatDescriptor = that as VariableDescriptor;
-
- if (thatDescriptor == null) {
- return false;
- }
-
- return this.Name.Equals(thatDescriptor.Name);
- }
-
- public override int GetHashCode() {
- return Name.GetHashCode();
- }
-
- public int CompareTo(object that) {
- return this.ToString().CompareTo(that.ToString());
- }
-
- }
-
- public class LocalDescriptor : VariableDescriptor {
- internal readonly string Proc;
- public LocalDescriptor(string Proc, string Name)
- : base(Name) {
- this.Proc = Proc;
- }
-
- public override string ToString() {
- return Proc + "." + base.ToString();
- }
-
- public override bool Equals(object that) {
-
- if (object.ReferenceEquals(this, that)) {
- return true;
- }
-
- LocalDescriptor thatDescriptor = that as LocalDescriptor;
-
- if (thatDescriptor == null) {
- return false;
- }
-
- return base.Equals(thatDescriptor) &&
- this.Proc.Equals(thatDescriptor.Proc);
-
- }
-
- public override int GetHashCode() {
- return (33 * base.GetHashCode())
- + this.Proc.GetHashCode();
- }
-
- }
-
- public class GlobalDescriptor : VariableDescriptor {
- public GlobalDescriptor(string name) : base(name) { }
-
- public override bool Equals(object that) {
-
- if (object.ReferenceEquals(this, that)) {
- return true;
- }
-
- GlobalDescriptor thatDescriptor = that as GlobalDescriptor;
-
- if (thatDescriptor == null) {
- return false;
- }
-
- return base.Equals(thatDescriptor);
-
- }
-
- public override int GetHashCode() {
- return base.GetHashCode();
- }
-
- }
-
- /// <summary>
- /// Given a Boogie program, computes a graph that over-approximates dependences
- /// between program variables.
- /// </summary>
- public class VariableDependenceAnalyser : IVariableDependenceAnalyser {
-
- private Graph<VariableDescriptor> dependsOnNonTransitive;
- private Program prog;
- private Dictionary<Block, HashSet<Block>> BlockToControllingBlocks;
- private Dictionary<Block, HashSet<VariableDescriptor>> ControllingBlockToVariables;
-
- public VariableDependenceAnalyser(Program prog) {
- this.prog = prog;
- dependsOnNonTransitive = new Graph<VariableDescriptor>();
- }
-
-
- private void Initialise() {
- foreach (var descriptor in
- prog.Variables.Where(Item => VariableRelevantToAnalysis(Item, null)).
- Select(Variable => Variable.Name).
- Select(Name => new GlobalDescriptor(Name))) {
- dependsOnNonTransitive.AddEdge(descriptor, descriptor);
- }
-
- foreach (var Proc in prog.NonInlinedProcedures()) {
-
- List<Variable> parameters = new List<Variable>();
- parameters.AddRange(Proc.InParams);
- parameters.AddRange(Proc.OutParams);
- foreach (var descriptor in
- parameters.Select(Variable => Variable.Name).Select(Name => new LocalDescriptor(Proc.Name, Name))) {
- dependsOnNonTransitive.AddEdge(descriptor, descriptor);
- }
- }
-
- foreach (var Impl in prog.NonInlinedImplementations()) {
-
- List<Variable> locals = new List<Variable>();
- locals.AddRange(Impl.LocVars);
- foreach (var descriptor in
- locals.Select(Variable => Variable.Name).Select(Name => new LocalDescriptor(Impl.Name, Name))) {
- dependsOnNonTransitive.AddEdge(descriptor, descriptor);
- }
- }
- }
-
- private List<VariableDescriptor> ComputeDependencyChain(VariableDescriptor source, VariableDescriptor target, HashSet<VariableDescriptor> visited) {
- if(source.Equals(target)) {
- return new List<VariableDescriptor> { target };
- }
-
- visited.Add(source);
-
- foreach(var w in dependsOnNonTransitive.Successors(source)) {
- if(visited.Contains(w)) {
- continue;
- }
- var result = ComputeDependencyChain(w, target, visited);
- if(result != null) {
- result.Insert(0, source);
- return result;
- }
- }
-
- return null;
-
- }
-
- public void ShowDependencyChain(VariableDescriptor source, VariableDescriptor target) {
- var chain = ComputeDependencyChain(source, target, new HashSet<VariableDescriptor>());
- if(chain == null) {
- Console.WriteLine("No chain between " + source + " and " + target);
- } else {
- bool first = true;
- foreach(var v in chain) {
- if(first) {
- first = false;
- } else {
- Console.Write(" -> ");
- }
- Console.Write(v);
- }
- }
- Console.WriteLine(); Console.WriteLine();
- }
-
- public void Analyse() {
-
- /* The algorithm is as follows:
- *
- * 1. Build global control dependence graph. First build control dependence graph for each procedure,
- * and union them. Then examine each procedure. If block B is control-dependent on block C, make
- * every block that can be indirectly reached via a call from B control-dependent on C.
- *
- * 2. Take transitive closure of global control dependence graph.
- *
- * 3. For every block B such that some other block is control-dependent on B, determine those variables
- * which B tests. If B tests v, and C is control-depdendent on B, we say that v "controls" the
- * statements appearing in C.
- *
- * 4. Consider each statement to work out variable dependences. v may depend on u if:
- * - there is a statement v := e where u appears in e
- * - there is a statement call ... := foo(..., e, ...) where v is formal in parameter of foo
- * corresponding to e and u appears in e
- * - there is a statement call ..., v, ... := foo(...) where u is formal out parameter of foo
- * correspondnig to v
- * - there is a statement v := ... controlled by u
- * - there is a statement call ... := foo(...) controlled by u where v is a formal in parameter
- * of foo
- * - there is a statement call ..., v, ... := foo(...) controlled by u
- *
- * 5. Finialise variable dependence graph by taking its transitive closure.
- *
- */
-
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Variable dependence analysis: Initialising");
- }
-
- Initialise();
-
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Variable dependence analysis: Computing control dependence info");
- }
-
- BlockToControllingBlocks = ComputeGlobalControlDependences();
-
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Variable dependence analysis: Computing control dependence variables");
- }
-
- ControllingBlockToVariables = ComputeControllingVariables(BlockToControllingBlocks);
- foreach (var Impl in prog.NonInlinedImplementations()) {
-
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Variable dependence analysis: Analysing " + Impl.Name);
- }
-
- Analyse(Impl);
- }
- }
-
- private void Analyse(Implementation Impl) {
- string proc = Impl.Name;
- foreach (Block b in Impl.Blocks) {
- Analyse(proc, b);
- }
- }
-
- private void Analyse(string proc, Block b) {
- foreach (Cmd cmd in b.Cmds) {
- AssignCmd assign = cmd as AssignCmd;
- if (assign != null) {
- HandleAssign(proc, b, assign);
- }
- CallCmd call = cmd as CallCmd;
- if (call != null) {
- HandleCall(proc, b, call);
- }
- }
- }
-
- private void HandleCall(string proc, Block b, CallCmd call) {
- foreach (var formalActualPair in call.Proc.InParams.Zip(call.Ins)) {
- var formalIn = MakeDescriptor(call.callee, formalActualPair.Item1);
- AddDependences(formalIn, GetReferencedVariables(formalActualPair.Item2, proc),
- "referenced in in-param in call to " + proc, call.tok);
- AddControlDependences(b, formalIn, " in param assigned under control dependence in call to " + proc, call.tok);
- }
-
- foreach (var formalActualPair in call.Proc.OutParams.Zip(call.Outs)) {
- var actualOut = MakeDescriptor(proc, formalActualPair.Item2.Decl);
- AddDependences(actualOut, GetReferencedVariables(new IdentifierExpr(Token.NoToken, formalActualPair.Item1), call.callee),
- "receiving variable for out-param in call to " + proc, call.tok);
- AddControlDependences(b, actualOut, " receiving variable assigned under control dependence in call to " + proc, call.tok);
- }
-
- }
-
- private void HandleAssign(string proc, Block b, AssignCmd assign) {
- foreach (var assignPair in assign.Lhss.Zip(assign.Rhss).Where
- (Item => VariableRelevantToAnalysis(Item.Item1.DeepAssignedVariable, proc))) {
- VariableDescriptor assignedVariable = MakeDescriptor(proc, assignPair.Item1.DeepAssignedVariable);
- AddDependences(assignedVariable, GetReferencedVariables(assignPair.Item1, proc),
- "LHS of assignment", assign.tok);
- AddDependences(assignedVariable, GetReferencedVariables(assignPair.Item2, proc),
- "RHS of assignment", assign.tok);
- AddControlDependences(b, assignedVariable, "Variable assigned under control dependence", assign.tok);
- }
- }
-
- private void AddControlDependences(Block b, VariableDescriptor v, string reason, IToken tok) {
- if (!BlockToControllingBlocks.ContainsKey(b)) {
- return;
- }
- foreach (var controller in BlockToControllingBlocks[b]) {
- AddDependences(v, ControllingBlockToVariables[controller], reason + " controlling block at (" + controller.tok.line + ":" + controller.tok.col + ")", tok);
- }
- }
-
- private IEnumerable<VariableDescriptor> GetReferencedVariables(Absy node, string proc) {
- var VarCollector = new VariableCollector();
- VarCollector.Visit(node);
- return VarCollector.usedVars.Where(Item => VariableRelevantToAnalysis(Item, proc)).
- Select(Item => MakeDescriptor(proc, Item));
- }
-
- void AddDependences(VariableDescriptor v, IEnumerable<VariableDescriptor> vs, string reason, IToken tok) {
- foreach (var n in vs) {
- if(CommandLineOptions.Clo.DebugStagedHoudini) {
- Console.WriteLine("Adding dependence " + v + " -> " + n + ", reason: " + reason + "(" + tok.line + ":" + tok.col + ")");
- }
- dependsOnNonTransitive.AddEdge(v, n);
- }
- }
-
- private Dictionary<Block, HashSet<VariableDescriptor>> ComputeControllingVariables(Dictionary<Block, HashSet<Block>> GlobalCtrlDep) {
- Dictionary<Block, HashSet<VariableDescriptor>> result = new Dictionary<Block, HashSet<VariableDescriptor>>();
- foreach (var Impl in prog.NonInlinedImplementations()) {
- foreach (var b in Impl.Blocks) {
- result[b] = GetControlDependencyVariables(Impl.Name, b);
- }
- }
- return result;
- }
-
- private HashSet<VariableDescriptor> GetControlDependencyVariables(string proc, Block b) {
-
- // This method works under the assumption that assume statements
- // relevant to control flow between basic blocks have the "partition" attribute
-
- HashSet<VariableDescriptor> result = new HashSet<VariableDescriptor>();
- var gotoCmd = b.TransferCmd as GotoCmd;
- if (gotoCmd != null && gotoCmd.labelTargets.Count >= 2) {
- foreach (Block succ in gotoCmd.labelTargets) {
- foreach (Cmd c in succ.Cmds) {
- AssumeCmd a = c as AssumeCmd;
- if (a != null && QKeyValue.FindBoolAttribute(a.Attributes, "partition")) {
- var VarCollector = new VariableCollector();
- VarCollector.VisitExpr(a.Expr);
- result.UnionWith(VarCollector.usedVars.Where(Item => VariableRelevantToAnalysis(Item, proc)).
- Select(Item => MakeDescriptor(proc, Item)));
- }
- else {
- break;
- }
- }
- }
- }
- return result;
- }
-
- private HashSet<VariableDescriptor> IgnoredVariables = null;
-
- public bool Ignoring(Variable v, string proc) {
-
- if (IgnoredVariables == null) {
- MakeIgnoreList();
- }
-
- if(proc != null && IgnoredVariables.Contains(new LocalDescriptor(proc, v.Name))) {
- return true;
- }
-
- if(IgnoredVariables.Contains(new GlobalDescriptor(v.Name))) {
- return true;
- }
-
- return false;
-
- }
-
- public bool VariableRelevantToAnalysis(Variable v, string proc) {
- return !(v is Constant || Ignoring(v, proc));
- }
-
- private void MakeIgnoreList()
- {
- IgnoredVariables = new HashSet<VariableDescriptor>();
- if(CommandLineOptions.Clo.VariableDependenceIgnore == null) {
- return;
- }
- try {
- var file = System.IO.File.OpenText(CommandLineOptions.Clo.VariableDependenceIgnore);
- while(!file.EndOfStream) {
- string line = file.ReadLine();
- string[] tokens = line.Split(' ');
- if(tokens.Count() == 0) {
- continue;
- }
- if(tokens.Count() > 2) {
- Console.Error.WriteLine("Ignoring malformed line of ignored variables file: " + line);
- continue;
- }
- if(tokens.Count() == 1) {
- IgnoredVariables.Add(new GlobalDescriptor(tokens[0]));
- continue;
- }
- Debug.Assert(tokens.Count() == 2);
- IgnoredVariables.Add(new LocalDescriptor(tokens[0], tokens[1]));
- }
- } catch(System.IO.IOException e) {
- Console.Error.WriteLine("Error reading from ignored variables file " + CommandLineOptions.Clo.VariableDependenceIgnore + ": " + e);
- }
- }
-
- private Dictionary<Block, HashSet<Block>> ComputeGlobalControlDependences() {
-
- Dictionary<Block, HashSet<Block>> GlobalCtrlDep = new Dictionary<Block, HashSet<Block>>();
- Dictionary<Implementation, Dictionary<Block, HashSet<Block>>> LocalCtrlDeps = new Dictionary<Implementation, Dictionary<Block, HashSet<Block>>>();
-
- // Work out and union together local control dependences
- foreach (var Impl in prog.NonInlinedImplementations()) {
- Graph<Block> blockGraph = prog.ProcessLoops(Impl);
- LocalCtrlDeps[Impl] = blockGraph.ControlDependence();
- foreach (var KeyValue in LocalCtrlDeps[Impl]) {
- GlobalCtrlDep.Add(KeyValue.Key, KeyValue.Value);
- }
- }
-
- Graph<Implementation> callGraph = Program.BuildCallGraph(prog);
-
- // Add inter-procedural control dependence nodes based on calls
- foreach (var Impl in prog.NonInlinedImplementations()) {
- foreach (var b in Impl.Blocks) {
- foreach (var cmd in b.Cmds.OfType<CallCmd>()) {
- var DirectCallee = GetImplementation(cmd.callee);
- if (DirectCallee != null) {
- HashSet<Implementation> IndirectCallees = ComputeIndirectCallees(callGraph, DirectCallee);
- foreach (var control in GetControllingBlocks(b, LocalCtrlDeps[Impl])) {
- foreach (var c in IndirectCallees.Select(Item => Item.Blocks).SelectMany(Item => Item)) {
- GlobalCtrlDep[control].Add(c);
- }
- }
- }
- }
- }
- }
-
- // Compute transitive closure
- GlobalCtrlDep.TransitiveClosure();
-
- // Finally reverse the dependences
-
- Dictionary<Block, HashSet<Block>> result = new Dictionary<Block, HashSet<Block>>();
-
- foreach (var KeyValue in GlobalCtrlDep) {
- foreach (var v in KeyValue.Value) {
- if (!result.ContainsKey(v)) {
- result[v] = new HashSet<Block>();
- }
- result[v].Add(KeyValue.Key);
- }
- }
-
- return result;
- }
-
- private HashSet<Implementation> ComputeIndirectCallees(Graph<Implementation> callGraph, Implementation DirectCallee) {
- return ComputeIndirectCallees(callGraph, DirectCallee, new HashSet<Implementation>());
- }
-
- private HashSet<Implementation> ComputeIndirectCallees(Graph<Implementation> callGraph, Implementation DirectCallee, HashSet<Implementation> seen) {
- if (seen.Contains(DirectCallee)) {
- return new HashSet<Implementation>();
- }
- HashSet<Implementation> result = new HashSet<Implementation>();
- result.Add(DirectCallee);
- seen.Add(DirectCallee);
- foreach (var succ in callGraph.Successors(DirectCallee)) {
- result.UnionWith(ComputeIndirectCallees(callGraph, succ, seen));
- }
- return result;
- }
-
- private HashSet<Block> GetControllingBlocks(Block b, Dictionary<Block, HashSet<Block>> ctrlDep) {
- HashSet<Block> result = new HashSet<Block>();
- foreach (var KeyValue in ctrlDep) {
- if (KeyValue.Value.Contains(b)) {
- result.Add(KeyValue.Key);
- }
- }
- return result;
- }
-
- private Implementation GetImplementation(string proc) {
- foreach (var Impl in prog.Implementations) {
- if (Impl.Name.Equals(proc)) {
- return Impl;
- }
- }
- return null;
- }
-
- public VariableDescriptor MakeDescriptor(string proc, Variable v) {
-
- // Check whether there is an (Impl, v) match
- var MatchingLocals = dependsOnNonTransitive.Nodes.Where(Item => Item is LocalDescriptor).Select(
- Item => (LocalDescriptor)Item).Where(Item => Item.Proc.Equals(proc) &&
- Item.Name.Equals(v.Name));
- if (MatchingLocals.Count() > 0) {
- Debug.Assert(MatchingLocals.Count() == 1);
- return MatchingLocals.ToArray()[0];
- }
-
- // It must be a global with same name as v
- return dependsOnNonTransitive.Nodes.Where(Item => Item is GlobalDescriptor &&
- Item.Name.Equals(v.Name)).ToArray()[0];
- }
-
- private Dictionary<SCC<VariableDescriptor>, HashSet<VariableDescriptor>> DependsOnCache = new Dictionary<SCC<VariableDescriptor>, HashSet<VariableDescriptor>>();
-
- private Graph<SCC<VariableDescriptor>> DependsOnSCCsDAG;
- private Dictionary<VariableDescriptor, SCC<VariableDescriptor>> VariableDescriptorToSCC;
-
- public HashSet<VariableDescriptor> DependsOn(VariableDescriptor v) {
- if (DependsOnSCCsDAG == null) {
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Variable dependence: computing SCCs");
- }
- Adjacency<VariableDescriptor> next = new Adjacency<VariableDescriptor>(dependsOnNonTransitive.Successors);
- Adjacency<VariableDescriptor> prev = new Adjacency<VariableDescriptor>(dependsOnNonTransitive.Predecessors);
- StronglyConnectedComponents<VariableDescriptor> DependsOnSCCs = new StronglyConnectedComponents<VariableDescriptor>(
- dependsOnNonTransitive.Nodes, next, prev);
- DependsOnSCCs.Compute();
-
- VariableDescriptorToSCC = new Dictionary<VariableDescriptor, SCC<VariableDescriptor>>();
- foreach (var scc in DependsOnSCCs) {
- foreach (var s in scc) {
- VariableDescriptorToSCC[s] = scc;
- }
- }
-
- DependsOnSCCsDAG = new Graph<SCC<VariableDescriptor>>();
- foreach (var edge in dependsOnNonTransitive.Edges) {
- if (VariableDescriptorToSCC[edge.Item1] != VariableDescriptorToSCC[edge.Item2]) {
- DependsOnSCCsDAG.AddEdge(VariableDescriptorToSCC[edge.Item1], VariableDescriptorToSCC[edge.Item2]);
- }
- }
-
- SCC<VariableDescriptor> dummy = new SCC<VariableDescriptor>();
- foreach (var n in dependsOnNonTransitive.Nodes) {
- DependsOnSCCsDAG.AddEdge(VariableDescriptorToSCC[n], dummy);
- }
-
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Variable dependence: SCCs computed!");
- }
- }
- return DependsOn(VariableDescriptorToSCC[v]);
- }
-
- public HashSet<VariableDescriptor> DependsOn(SCC<VariableDescriptor> vSCC) {
-
- if (!DependsOnCache.ContainsKey(vSCC)) {
- HashSet<VariableDescriptor> result = new HashSet<VariableDescriptor>();
- if (vSCC.Count() > 0) {
- result.UnionWith(vSCC);
- foreach (var wSCC in DependsOnSCCsDAG.Successors(vSCC)) {
- result.UnionWith(DependsOn(wSCC));
- }
- }
- DependsOnCache[vSCC] = result;
- }
- return DependsOnCache[vSCC];
- }
-
- public void dump() {
-
- Console.WriteLine("Variable dependence information");
- Console.WriteLine("===============================");
-
- Console.WriteLine("Global variables");
- Console.WriteLine("================");
-
- foreach (var GlobalEntry in dependsOnNonTransitive.Nodes.Where(Item => Item is GlobalDescriptor)) {
- dump(GlobalEntry);
- }
-
- foreach (var proc in Procedures()) {
- Console.WriteLine("Variables of " + proc);
- Console.WriteLine("=====================");
- foreach (var LocalEntry in dependsOnNonTransitive.Nodes.Where(Item => Item is LocalDescriptor
- && ((LocalDescriptor)Item).Proc.Equals(proc))) {
- dump(LocalEntry);
- }
- }
- }
-
- private void dump(VariableDescriptor vd) {
- Console.Write(vd + " <- {");
- bool first = true;
-
- var SortedDependents = DependsOn(vd).ToList();
- SortedDependents.Sort();
- foreach (var Descriptor in SortedDependents) {
- Console.Write((first ? "" : ",") + "\n " + Descriptor);
- if (first) {
- first = false;
- }
- }
- Debug.Assert(!first);
- Console.WriteLine("\n}\n");
- }
-
- private HashSet<string> Procedures() {
- return new HashSet<string>(dependsOnNonTransitive.Nodes.Where(Item =>
- Item is LocalDescriptor).Select(Item => ((LocalDescriptor)Item).Proc));
- }
-
- }
-
- public static class Helper {
-
- public static IEnumerable<Procedure> NonInlinedProcedures(this Program prog) {
- return prog.Procedures.
- Where(Item => QKeyValue.FindIntAttribute(Item.Attributes, "inline", -1) == -1);
- }
-
- public static IEnumerable<Implementation> NonInlinedImplementations(this Program prog) {
- return prog.Implementations.
- Where(Item => QKeyValue.FindIntAttribute(Item.Proc.Attributes, "inline", -1) == -1);
- }
-
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+
+
+namespace Microsoft.Boogie {
+
+ public interface IVariableDependenceAnalyser {
+
+ void Analyse();
+ VariableDescriptor MakeDescriptor(string proc, Variable v);
+ HashSet<VariableDescriptor> DependsOn(VariableDescriptor v);
+ void dump();
+ void ShowDependencyChain(VariableDescriptor source, VariableDescriptor target);
+ bool VariableRelevantToAnalysis(Variable v, string proc);
+ bool Ignoring(Variable v, string proc);
+
+ }
+
+ public abstract class VariableDescriptor : IComparable {
+ internal readonly string Name;
+ internal VariableDescriptor(string Name) {
+ this.Name = Name;
+ }
+
+ public override string ToString() {
+ return Name;
+ }
+
+ public override bool Equals(object that) {
+
+ if (object.ReferenceEquals(this, that)) {
+ return true;
+ }
+
+ VariableDescriptor thatDescriptor = that as VariableDescriptor;
+
+ if (thatDescriptor == null) {
+ return false;
+ }
+
+ return this.Name.Equals(thatDescriptor.Name);
+ }
+
+ public override int GetHashCode() {
+ return Name.GetHashCode();
+ }
+
+ public int CompareTo(object that) {
+ return this.ToString().CompareTo(that.ToString());
+ }
+
+ }
+
+ public class LocalDescriptor : VariableDescriptor {
+ internal readonly string Proc;
+ public LocalDescriptor(string Proc, string Name)
+ : base(Name) {
+ this.Proc = Proc;
+ }
+
+ public override string ToString() {
+ return Proc + "." + base.ToString();
+ }
+
+ public override bool Equals(object that) {
+
+ if (object.ReferenceEquals(this, that)) {
+ return true;
+ }
+
+ LocalDescriptor thatDescriptor = that as LocalDescriptor;
+
+ if (thatDescriptor == null) {
+ return false;
+ }
+
+ return base.Equals(thatDescriptor) &&
+ this.Proc.Equals(thatDescriptor.Proc);
+
+ }
+
+ public override int GetHashCode() {
+ return (33 * base.GetHashCode())
+ + this.Proc.GetHashCode();
+ }
+
+ }
+
+ public class GlobalDescriptor : VariableDescriptor {
+ public GlobalDescriptor(string name) : base(name) { }
+
+ public override bool Equals(object that) {
+
+ if (object.ReferenceEquals(this, that)) {
+ return true;
+ }
+
+ GlobalDescriptor thatDescriptor = that as GlobalDescriptor;
+
+ if (thatDescriptor == null) {
+ return false;
+ }
+
+ return base.Equals(thatDescriptor);
+
+ }
+
+ public override int GetHashCode() {
+ return base.GetHashCode();
+ }
+
+ }
+
+ /// <summary>
+ /// Given a Boogie program, computes a graph that over-approximates dependences
+ /// between program variables.
+ /// </summary>
+ public class VariableDependenceAnalyser : IVariableDependenceAnalyser {
+
+ private Graph<VariableDescriptor> dependsOnNonTransitive;
+ private Program prog;
+ private Dictionary<Block, HashSet<Block>> BlockToControllingBlocks;
+ private Dictionary<Block, HashSet<VariableDescriptor>> ControllingBlockToVariables;
+
+ public VariableDependenceAnalyser(Program prog) {
+ this.prog = prog;
+ dependsOnNonTransitive = new Graph<VariableDescriptor>();
+ }
+
+
+ private void Initialise() {
+ foreach (var descriptor in
+ prog.Variables.Where(Item => VariableRelevantToAnalysis(Item, null)).
+ Select(Variable => Variable.Name).
+ Select(Name => new GlobalDescriptor(Name))) {
+ dependsOnNonTransitive.AddEdge(descriptor, descriptor);
+ }
+
+ foreach (var Proc in prog.NonInlinedProcedures()) {
+
+ List<Variable> parameters = new List<Variable>();
+ parameters.AddRange(Proc.InParams);
+ parameters.AddRange(Proc.OutParams);
+ foreach (var descriptor in
+ parameters.Select(Variable => Variable.Name).Select(Name => new LocalDescriptor(Proc.Name, Name))) {
+ dependsOnNonTransitive.AddEdge(descriptor, descriptor);
+ }
+ }
+
+ foreach (var Impl in prog.NonInlinedImplementations()) {
+
+ List<Variable> locals = new List<Variable>();
+ locals.AddRange(Impl.LocVars);
+ foreach (var descriptor in
+ locals.Select(Variable => Variable.Name).Select(Name => new LocalDescriptor(Impl.Name, Name))) {
+ dependsOnNonTransitive.AddEdge(descriptor, descriptor);
+ }
+ }
+ }
+
+ private List<VariableDescriptor> ComputeDependencyChain(VariableDescriptor source, VariableDescriptor target, HashSet<VariableDescriptor> visited) {
+ if(source.Equals(target)) {
+ return new List<VariableDescriptor> { target };
+ }
+
+ visited.Add(source);
+
+ foreach(var w in dependsOnNonTransitive.Successors(source)) {
+ if(visited.Contains(w)) {
+ continue;
+ }
+ var result = ComputeDependencyChain(w, target, visited);
+ if(result != null) {
+ result.Insert(0, source);
+ return result;
+ }
+ }
+
+ return null;
+
+ }
+
+ public void ShowDependencyChain(VariableDescriptor source, VariableDescriptor target) {
+ var chain = ComputeDependencyChain(source, target, new HashSet<VariableDescriptor>());
+ if(chain == null) {
+ Console.WriteLine("No chain between " + source + " and " + target);
+ } else {
+ bool first = true;
+ foreach(var v in chain) {
+ if(first) {
+ first = false;
+ } else {
+ Console.Write(" -> ");
+ }
+ Console.Write(v);
+ }
+ }
+ Console.WriteLine(); Console.WriteLine();
+ }
+
+ public void Analyse() {
+
+ /* The algorithm is as follows:
+ *
+ * 1. Build global control dependence graph. First build control dependence graph for each procedure,
+ * and union them. Then examine each procedure. If block B is control-dependent on block C, make
+ * every block that can be indirectly reached via a call from B control-dependent on C.
+ *
+ * 2. Take transitive closure of global control dependence graph.
+ *
+ * 3. For every block B such that some other block is control-dependent on B, determine those variables
+ * which B tests. If B tests v, and C is control-depdendent on B, we say that v "controls" the
+ * statements appearing in C.
+ *
+ * 4. Consider each statement to work out variable dependences. v may depend on u if:
+ * - there is a statement v := e where u appears in e
+ * - there is a statement call ... := foo(..., e, ...) where v is formal in parameter of foo
+ * corresponding to e and u appears in e
+ * - there is a statement call ..., v, ... := foo(...) where u is formal out parameter of foo
+ * correspondnig to v
+ * - there is a statement v := ... controlled by u
+ * - there is a statement call ... := foo(...) controlled by u where v is a formal in parameter
+ * of foo
+ * - there is a statement call ..., v, ... := foo(...) controlled by u
+ *
+ * 5. Finialise variable dependence graph by taking its transitive closure.
+ *
+ */
+
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Variable dependence analysis: Initialising");
+ }
+
+ Initialise();
+
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Variable dependence analysis: Computing control dependence info");
+ }
+
+ BlockToControllingBlocks = ComputeGlobalControlDependences();
+
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Variable dependence analysis: Computing control dependence variables");
+ }
+
+ ControllingBlockToVariables = ComputeControllingVariables(BlockToControllingBlocks);
+ foreach (var Impl in prog.NonInlinedImplementations()) {
+
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Variable dependence analysis: Analysing " + Impl.Name);
+ }
+
+ Analyse(Impl);
+ }
+ }
+
+ private void Analyse(Implementation Impl) {
+ string proc = Impl.Name;
+ foreach (Block b in Impl.Blocks) {
+ Analyse(proc, b);
+ }
+ }
+
+ private void Analyse(string proc, Block b) {
+ foreach (Cmd cmd in b.Cmds) {
+ AssignCmd assign = cmd as AssignCmd;
+ if (assign != null) {
+ HandleAssign(proc, b, assign);
+ }
+ CallCmd call = cmd as CallCmd;
+ if (call != null) {
+ HandleCall(proc, b, call);
+ }
+ }
+ }
+
+ private void HandleCall(string proc, Block b, CallCmd call) {
+ foreach (var formalActualPair in call.Proc.InParams.Zip(call.Ins)) {
+ var formalIn = MakeDescriptor(call.callee, formalActualPair.Item1);
+ AddDependences(formalIn, GetReferencedVariables(formalActualPair.Item2, proc),
+ "referenced in in-param in call to " + proc, call.tok);
+ AddControlDependences(b, formalIn, " in param assigned under control dependence in call to " + proc, call.tok);
+ }
+
+ foreach (var formalActualPair in call.Proc.OutParams.Zip(call.Outs)) {
+ var actualOut = MakeDescriptor(proc, formalActualPair.Item2.Decl);
+ AddDependences(actualOut, GetReferencedVariables(new IdentifierExpr(Token.NoToken, formalActualPair.Item1), call.callee),
+ "receiving variable for out-param in call to " + proc, call.tok);
+ AddControlDependences(b, actualOut, " receiving variable assigned under control dependence in call to " + proc, call.tok);
+ }
+
+ }
+
+ private void HandleAssign(string proc, Block b, AssignCmd assign) {
+ foreach (var assignPair in assign.Lhss.Zip(assign.Rhss).Where
+ (Item => VariableRelevantToAnalysis(Item.Item1.DeepAssignedVariable, proc))) {
+ VariableDescriptor assignedVariable = MakeDescriptor(proc, assignPair.Item1.DeepAssignedVariable);
+ AddDependences(assignedVariable, GetReferencedVariables(assignPair.Item1, proc),
+ "LHS of assignment", assign.tok);
+ AddDependences(assignedVariable, GetReferencedVariables(assignPair.Item2, proc),
+ "RHS of assignment", assign.tok);
+ AddControlDependences(b, assignedVariable, "Variable assigned under control dependence", assign.tok);
+ }
+ }
+
+ private void AddControlDependences(Block b, VariableDescriptor v, string reason, IToken tok) {
+ if (!BlockToControllingBlocks.ContainsKey(b)) {
+ return;
+ }
+ foreach (var controller in BlockToControllingBlocks[b]) {
+ AddDependences(v, ControllingBlockToVariables[controller], reason + " controlling block at (" + controller.tok.line + ":" + controller.tok.col + ")", tok);
+ }
+ }
+
+ private IEnumerable<VariableDescriptor> GetReferencedVariables(Absy node, string proc) {
+ var VarCollector = new VariableCollector();
+ VarCollector.Visit(node);
+ return VarCollector.usedVars.Where(Item => VariableRelevantToAnalysis(Item, proc)).
+ Select(Item => MakeDescriptor(proc, Item));
+ }
+
+ void AddDependences(VariableDescriptor v, IEnumerable<VariableDescriptor> vs, string reason, IToken tok) {
+ foreach (var n in vs) {
+ if(CommandLineOptions.Clo.DebugStagedHoudini) {
+ Console.WriteLine("Adding dependence " + v + " -> " + n + ", reason: " + reason + "(" + tok.line + ":" + tok.col + ")");
+ }
+ dependsOnNonTransitive.AddEdge(v, n);
+ }
+ }
+
+ private Dictionary<Block, HashSet<VariableDescriptor>> ComputeControllingVariables(Dictionary<Block, HashSet<Block>> GlobalCtrlDep) {
+ Dictionary<Block, HashSet<VariableDescriptor>> result = new Dictionary<Block, HashSet<VariableDescriptor>>();
+ foreach (var Impl in prog.NonInlinedImplementations()) {
+ foreach (var b in Impl.Blocks) {
+ result[b] = GetControlDependencyVariables(Impl.Name, b);
+ }
+ }
+ return result;
+ }
+
+ private HashSet<VariableDescriptor> GetControlDependencyVariables(string proc, Block b) {
+
+ // This method works under the assumption that assume statements
+ // relevant to control flow between basic blocks have the "partition" attribute
+
+ HashSet<VariableDescriptor> result = new HashSet<VariableDescriptor>();
+ var gotoCmd = b.TransferCmd as GotoCmd;
+ if (gotoCmd != null && gotoCmd.labelTargets.Count >= 2) {
+ foreach (Block succ in gotoCmd.labelTargets) {
+ foreach (Cmd c in succ.Cmds) {
+ AssumeCmd a = c as AssumeCmd;
+ if (a != null && QKeyValue.FindBoolAttribute(a.Attributes, "partition")) {
+ var VarCollector = new VariableCollector();
+ VarCollector.VisitExpr(a.Expr);
+ result.UnionWith(VarCollector.usedVars.Where(Item => VariableRelevantToAnalysis(Item, proc)).
+ Select(Item => MakeDescriptor(proc, Item)));
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ private HashSet<VariableDescriptor> IgnoredVariables = null;
+
+ public bool Ignoring(Variable v, string proc) {
+
+ if (IgnoredVariables == null) {
+ MakeIgnoreList();
+ }
+
+ if(proc != null && IgnoredVariables.Contains(new LocalDescriptor(proc, v.Name))) {
+ return true;
+ }
+
+ if(IgnoredVariables.Contains(new GlobalDescriptor(v.Name))) {
+ return true;
+ }
+
+ return false;
+
+ }
+
+ public bool VariableRelevantToAnalysis(Variable v, string proc) {
+ return !(v is Constant || Ignoring(v, proc));
+ }
+
+ private void MakeIgnoreList()
+ {
+ IgnoredVariables = new HashSet<VariableDescriptor>();
+ if(CommandLineOptions.Clo.VariableDependenceIgnore == null) {
+ return;
+ }
+ try {
+ var file = System.IO.File.OpenText(CommandLineOptions.Clo.VariableDependenceIgnore);
+ while(!file.EndOfStream) {
+ string line = file.ReadLine();
+ string[] tokens = line.Split(' ');
+ if(tokens.Count() == 0) {
+ continue;
+ }
+ if(tokens.Count() > 2) {
+ Console.Error.WriteLine("Ignoring malformed line of ignored variables file: " + line);
+ continue;
+ }
+ if(tokens.Count() == 1) {
+ IgnoredVariables.Add(new GlobalDescriptor(tokens[0]));
+ continue;
+ }
+ Debug.Assert(tokens.Count() == 2);
+ IgnoredVariables.Add(new LocalDescriptor(tokens[0], tokens[1]));
+ }
+ } catch(System.IO.IOException e) {
+ Console.Error.WriteLine("Error reading from ignored variables file " + CommandLineOptions.Clo.VariableDependenceIgnore + ": " + e);
+ }
+ }
+
+ private Dictionary<Block, HashSet<Block>> ComputeGlobalControlDependences() {
+
+ Dictionary<Block, HashSet<Block>> GlobalCtrlDep = new Dictionary<Block, HashSet<Block>>();
+ Dictionary<Implementation, Dictionary<Block, HashSet<Block>>> LocalCtrlDeps = new Dictionary<Implementation, Dictionary<Block, HashSet<Block>>>();
+
+ // Work out and union together local control dependences
+ foreach (var Impl in prog.NonInlinedImplementations()) {
+ Graph<Block> blockGraph = prog.ProcessLoops(Impl);
+ LocalCtrlDeps[Impl] = blockGraph.ControlDependence();
+ foreach (var KeyValue in LocalCtrlDeps[Impl]) {
+ GlobalCtrlDep.Add(KeyValue.Key, KeyValue.Value);
+ }
+ }
+
+ Graph<Implementation> callGraph = Program.BuildCallGraph(prog);
+
+ // Add inter-procedural control dependence nodes based on calls
+ foreach (var Impl in prog.NonInlinedImplementations()) {
+ foreach (var b in Impl.Blocks) {
+ foreach (var cmd in b.Cmds.OfType<CallCmd>()) {
+ var DirectCallee = GetImplementation(cmd.callee);
+ if (DirectCallee != null) {
+ HashSet<Implementation> IndirectCallees = ComputeIndirectCallees(callGraph, DirectCallee);
+ foreach (var control in GetControllingBlocks(b, LocalCtrlDeps[Impl])) {
+ foreach (var c in IndirectCallees.Select(Item => Item.Blocks).SelectMany(Item => Item)) {
+ GlobalCtrlDep[control].Add(c);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Compute transitive closure
+ GlobalCtrlDep.TransitiveClosure();
+
+ // Finally reverse the dependences
+
+ Dictionary<Block, HashSet<Block>> result = new Dictionary<Block, HashSet<Block>>();
+
+ foreach (var KeyValue in GlobalCtrlDep) {
+ foreach (var v in KeyValue.Value) {
+ if (!result.ContainsKey(v)) {
+ result[v] = new HashSet<Block>();
+ }
+ result[v].Add(KeyValue.Key);
+ }
+ }
+
+ return result;
+ }
+
+ private HashSet<Implementation> ComputeIndirectCallees(Graph<Implementation> callGraph, Implementation DirectCallee) {
+ return ComputeIndirectCallees(callGraph, DirectCallee, new HashSet<Implementation>());
+ }
+
+ private HashSet<Implementation> ComputeIndirectCallees(Graph<Implementation> callGraph, Implementation DirectCallee, HashSet<Implementation> seen) {
+ if (seen.Contains(DirectCallee)) {
+ return new HashSet<Implementation>();
+ }
+ HashSet<Implementation> result = new HashSet<Implementation>();
+ result.Add(DirectCallee);
+ seen.Add(DirectCallee);
+ foreach (var succ in callGraph.Successors(DirectCallee)) {
+ result.UnionWith(ComputeIndirectCallees(callGraph, succ, seen));
+ }
+ return result;
+ }
+
+ private HashSet<Block> GetControllingBlocks(Block b, Dictionary<Block, HashSet<Block>> ctrlDep) {
+ HashSet<Block> result = new HashSet<Block>();
+ foreach (var KeyValue in ctrlDep) {
+ if (KeyValue.Value.Contains(b)) {
+ result.Add(KeyValue.Key);
+ }
+ }
+ return result;
+ }
+
+ private Implementation GetImplementation(string proc) {
+ foreach (var Impl in prog.Implementations) {
+ if (Impl.Name.Equals(proc)) {
+ return Impl;
+ }
+ }
+ return null;
+ }
+
+ public VariableDescriptor MakeDescriptor(string proc, Variable v) {
+
+ // Check whether there is an (Impl, v) match
+ var MatchingLocals = dependsOnNonTransitive.Nodes.Where(Item => Item is LocalDescriptor).Select(
+ Item => (LocalDescriptor)Item).Where(Item => Item.Proc.Equals(proc) &&
+ Item.Name.Equals(v.Name));
+ if (MatchingLocals.Count() > 0) {
+ Debug.Assert(MatchingLocals.Count() == 1);
+ return MatchingLocals.ToArray()[0];
+ }
+
+ // It must be a global with same name as v
+ return dependsOnNonTransitive.Nodes.Where(Item => Item is GlobalDescriptor &&
+ Item.Name.Equals(v.Name)).ToArray()[0];
+ }
+
+ private Dictionary<SCC<VariableDescriptor>, HashSet<VariableDescriptor>> DependsOnCache = new Dictionary<SCC<VariableDescriptor>, HashSet<VariableDescriptor>>();
+
+ private Graph<SCC<VariableDescriptor>> DependsOnSCCsDAG;
+ private Dictionary<VariableDescriptor, SCC<VariableDescriptor>> VariableDescriptorToSCC;
+
+ public HashSet<VariableDescriptor> DependsOn(VariableDescriptor v) {
+ if (DependsOnSCCsDAG == null) {
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Variable dependence: computing SCCs");
+ }
+ Adjacency<VariableDescriptor> next = new Adjacency<VariableDescriptor>(dependsOnNonTransitive.Successors);
+ Adjacency<VariableDescriptor> prev = new Adjacency<VariableDescriptor>(dependsOnNonTransitive.Predecessors);
+ StronglyConnectedComponents<VariableDescriptor> DependsOnSCCs = new StronglyConnectedComponents<VariableDescriptor>(
+ dependsOnNonTransitive.Nodes, next, prev);
+ DependsOnSCCs.Compute();
+
+ VariableDescriptorToSCC = new Dictionary<VariableDescriptor, SCC<VariableDescriptor>>();
+ foreach (var scc in DependsOnSCCs) {
+ foreach (var s in scc) {
+ VariableDescriptorToSCC[s] = scc;
+ }
+ }
+
+ DependsOnSCCsDAG = new Graph<SCC<VariableDescriptor>>();
+ foreach (var edge in dependsOnNonTransitive.Edges) {
+ if (VariableDescriptorToSCC[edge.Item1] != VariableDescriptorToSCC[edge.Item2]) {
+ DependsOnSCCsDAG.AddEdge(VariableDescriptorToSCC[edge.Item1], VariableDescriptorToSCC[edge.Item2]);
+ }
+ }
+
+ SCC<VariableDescriptor> dummy = new SCC<VariableDescriptor>();
+ foreach (var n in dependsOnNonTransitive.Nodes) {
+ DependsOnSCCsDAG.AddEdge(VariableDescriptorToSCC[n], dummy);
+ }
+
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Variable dependence: SCCs computed!");
+ }
+ }
+ return DependsOn(VariableDescriptorToSCC[v]);
+ }
+
+ public HashSet<VariableDescriptor> DependsOn(SCC<VariableDescriptor> vSCC) {
+
+ if (!DependsOnCache.ContainsKey(vSCC)) {
+ HashSet<VariableDescriptor> result = new HashSet<VariableDescriptor>();
+ if (vSCC.Count() > 0) {
+ result.UnionWith(vSCC);
+ foreach (var wSCC in DependsOnSCCsDAG.Successors(vSCC)) {
+ result.UnionWith(DependsOn(wSCC));
+ }
+ }
+ DependsOnCache[vSCC] = result;
+ }
+ return DependsOnCache[vSCC];
+ }
+
+ public void dump() {
+
+ Console.WriteLine("Variable dependence information");
+ Console.WriteLine("===============================");
+
+ Console.WriteLine("Global variables");
+ Console.WriteLine("================");
+
+ foreach (var GlobalEntry in dependsOnNonTransitive.Nodes.Where(Item => Item is GlobalDescriptor)) {
+ dump(GlobalEntry);
+ }
+
+ foreach (var proc in Procedures()) {
+ Console.WriteLine("Variables of " + proc);
+ Console.WriteLine("=====================");
+ foreach (var LocalEntry in dependsOnNonTransitive.Nodes.Where(Item => Item is LocalDescriptor
+ && ((LocalDescriptor)Item).Proc.Equals(proc))) {
+ dump(LocalEntry);
+ }
+ }
+ }
+
+ private void dump(VariableDescriptor vd) {
+ Console.Write(vd + " <- {");
+ bool first = true;
+
+ var SortedDependents = DependsOn(vd).ToList();
+ SortedDependents.Sort();
+ foreach (var Descriptor in SortedDependents) {
+ Console.Write((first ? "" : ",") + "\n " + Descriptor);
+ if (first) {
+ first = false;
+ }
+ }
+ Debug.Assert(!first);
+ Console.WriteLine("\n}\n");
+ }
+
+ private HashSet<string> Procedures() {
+ return new HashSet<string>(dependsOnNonTransitive.Nodes.Where(Item =>
+ Item is LocalDescriptor).Select(Item => ((LocalDescriptor)Item).Proc));
+ }
+
+ }
+
+ public static class Helper {
+
+ public static IEnumerable<Procedure> NonInlinedProcedures(this Program prog) {
+ return prog.Procedures.
+ Where(Item => QKeyValue.FindIntAttribute(Item.Attributes, "inline", -1) == -1);
+ }
+
+ public static IEnumerable<Implementation> NonInlinedImplementations(this Program prog) {
+ return prog.Implementations.
+ Where(Item => QKeyValue.FindIntAttribute(Item.Proc.Attributes, "inline", -1) == -1);
+ }
+
+ }
+
+}
diff --git a/Source/Core/Xml.cs b/Source/Core/Xml.cs
index dcc19b34..58a2c5b0 100644
--- a/Source/Core/Xml.cs
+++ b/Source/Core/Xml.cs
@@ -1,316 +1,316 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.IO;
-using System.Xml;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-namespace Microsoft.Boogie {
-
- public class XmlSink {
- string/*!*/ filename;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(filename != null);
- }
-
- [Rep]
- XmlWriter wr;
- public bool IsOpen {
- get {
- return wr != null;
- }
- }
-
- public XmlSink(string filename) {
- Contract.Requires(filename != null);
- this.filename = filename;
- }
-
- /// <summary>
- /// Returns null on success, in which case the caller should eventually invoke Close.
- /// Returns an error string on failure.
- /// </summary>
- public string Open() {
- //modifies this.*;
- Contract.Ensures(IsOpen);
- if (wr != null) {
- Close();
- }
- cce.BeginExpose(this);
- {
- XmlWriterSettings settings = new XmlWriterSettings();
- settings.Indent = true;
- wr = XmlWriter.Create(filename, settings);
- wr.WriteStartDocument();
- wr.WriteStartElement("boogie");
- wr.WriteAttributeString("version", CommandLineOptions.Clo.VersionNumber);
- wr.WriteAttributeString("commandLine", Environment.CommandLine);
- }
- cce.EndExpose();
- return null; // success
- }
-
- public void Close() {
- //modifies this.*;
- if (wr != null) {
- cce.BeginExpose(this);
- {
- wr.WriteEndDocument();
- wr.Close();
- wr = null;
- }
- cce.EndExpose();
- }
- }
-
- const string DateTimeFormatString = "u";
-
- public void WriteStartMethod(string methodName, DateTime startTime) {
- Contract.Requires(methodName != null);
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("method");
- wr.WriteAttributeString("name", methodName);
- wr.WriteAttributeString("startTime", startTime.ToString(DateTimeFormatString));
- }
- cce.EndExpose();
- }
-
- public void WriteEndMethod(string outcome, DateTime endTime, TimeSpan elapsed) {
- Contract.Requires(outcome != null);
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("conclusion");
- wr.WriteAttributeString("endTime", endTime.ToString(DateTimeFormatString));
- wr.WriteAttributeString("duration", elapsed.TotalSeconds.ToString());
- wr.WriteAttributeString("outcome", outcome);
-
- wr.WriteEndElement(); // outcome
- wr.WriteEndElement(); // method
- }
- cce.EndExpose();
- }
-
- public void WriteError(string message, IToken errorToken, IToken relatedToken, List<Block> trace) {
- Contract.Requires(errorToken != null);
- Contract.Requires(message != null);
- Contract.Requires(IsOpen && (trace == null || cce.Owner.Different(this, trace)));
- //modifies this.*, errorToken.*, relatedToken.*, trace.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("error");
- wr.WriteAttributeString("message", message);
- WriteTokenAttributes(errorToken);
- if (relatedToken != null) {
- wr.WriteStartElement("related");
- WriteTokenAttributes(relatedToken);
- wr.WriteEndElement();
- }
- if (trace != null) {
- wr.WriteStartElement("trace");
- {
- foreach (object bo in trace) {
- cce.LoopInvariant(wr != null);
- Contract.Assume(bo is Block);
- Block b = (Block)bo;
- wr.WriteStartElement("traceNode");
- {
- WriteTokenAttributes(b.tok);
- wr.WriteAttributeString("label", b.Label);
- }
- wr.WriteEndElement();
- }
- wr.WriteEndElement();
- }
- }
- wr.WriteEndElement();
- }
- cce.EndExpose();
- }
-
-#if CCI
- public void WriteError(string message, Cci.Node offendingNode, List<Block> trace) {
- Contract.Requires(offendingNode != null);
- Contract.Requires(message != null);
- Contract.Requires(IsOpen && cce.Owner.Different(this, offendingNode));
- Contract.Requires(trace == null || cce.Owner.Different(this, trace));
- //modifies this.*, offendingNode.*, trace.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("error");
- wr.WriteAttributeString("message", message);
- WriteTokenAttributes(offendingNode);
- if (trace != null) {
- wr.WriteStartElement("trace");
- {
- foreach (object bo in trace) {
- cce.LoopInvariant(wr != null);
- Contract.Assume(bo is Block);
- Block b = (Block)bo;
- wr.WriteStartElement("traceNode");
- {
- this.WriteTokenAttributes(b.tok);
- wr.WriteAttributeString("label", b.Label);
- }
- wr.WriteEndElement();
- }
- wr.WriteEndElement();
- }
- }
- wr.WriteEndElement();
- }
- cce.EndExpose();
- }
-#endif
-
- [Inside]
- private void WriteTokenAttributes(IToken tok) {
- Contract.Requires(wr != null && cce.IsPeerConsistent(wr));
- //modifies this.0, wr.*;
- if (tok != null && tok.filename != null) {
- wr.WriteAttributeString("file", tok.filename);
- wr.WriteAttributeString("line", tok.line.ToString());
- wr.WriteAttributeString("column", tok.col.ToString());
- }
- }
-
-#if CCI
- [Inside]
- private void WriteTokenAttributes(Cci.Node node) {
- Contract.Requires(node != null);
- Contract.Requires(wr != null && cce.IsPeerConsistent(wr));
- //modifies this.0, wr.*;
- Contract.Assert(wr != null);
- if (node.SourceContext.Document != null) {
- wr.WriteAttributeString("file", node.SourceContext.Document.Name);
- wr.WriteAttributeString("line", node.SourceContext.StartLine.ToString());
- wr.WriteAttributeString("column", node.SourceContext.StartColumn.ToString());
- }
- }
-#endif
-
- public void WriteStartInference(string inferenceName) {
- Contract.Requires(inferenceName != null);
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("inference");
- wr.WriteAttributeString("name", inferenceName);
- }
- cce.EndExpose();
- }
-
- public void WriteEndInference() {
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteEndElement(); // inference
- }
- cce.EndExpose();
- }
-
- public void WriteContractParaAssignment(string varName, string val) {
- Contract.Requires(varName != null);
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("assignment");
- wr.WriteAttributeString("name", varName);
- wr.WriteAttributeString("value", val);
- wr.WriteEndElement();
- }
- cce.EndExpose();
- }
-
- public void WriteStartFile(string filename) {
- Contract.Requires(filename != null);
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("file");
- wr.WriteAttributeString("name", filename);
- }
- cce.EndExpose();
- }
-
- public void WriteEndFile() {
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteEndElement();
- }
- cce.EndExpose();
- }
-
- public void WriteFileFragment(string fragment) {
- Contract.Requires(fragment != null);
- Contract.Requires(IsOpen);
- //modifies this.*;
- Contract.Ensures(IsOpen);
- Contract.Assert(wr != null);
- cce.BeginExpose(this);
- {
- wr.WriteStartElement("fileFragment");
- wr.WriteAttributeString("name", fragment);
- wr.WriteEndElement();
- }
- cce.EndExpose();
- }
- }
-
- public class XmlFileScope : IDisposable {
- [Peer]
- [SpecPublic]
- XmlSink sink;
-
- [Captured]
- public XmlFileScope(XmlSink sink, string filename) {
- Contract.Requires(filename != null);
- Contract.Requires(sink == null || sink.IsOpen);
- //modifies sink.*;
- if (sink != null) {
- sink.WriteStartFile(filename); // invoke this method while "sink" is still peer consistent
- cce.Owner.AssignSame(this, sink);
- this.sink = sink;
- }
- }
-
- public void Dispose() {
- if (sink != null) {
- Contract.Assume(sink.IsOpen);
- sink.WriteEndFile();
- }
- }
- }
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.IO;
+using System.Xml;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+namespace Microsoft.Boogie {
+
+ public class XmlSink {
+ string/*!*/ filename;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(filename != null);
+ }
+
+ [Rep]
+ XmlWriter wr;
+ public bool IsOpen {
+ get {
+ return wr != null;
+ }
+ }
+
+ public XmlSink(string filename) {
+ Contract.Requires(filename != null);
+ this.filename = filename;
+ }
+
+ /// <summary>
+ /// Returns null on success, in which case the caller should eventually invoke Close.
+ /// Returns an error string on failure.
+ /// </summary>
+ public string Open() {
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ if (wr != null) {
+ Close();
+ }
+ cce.BeginExpose(this);
+ {
+ XmlWriterSettings settings = new XmlWriterSettings();
+ settings.Indent = true;
+ wr = XmlWriter.Create(filename, settings);
+ wr.WriteStartDocument();
+ wr.WriteStartElement("boogie");
+ wr.WriteAttributeString("version", CommandLineOptions.Clo.VersionNumber);
+ wr.WriteAttributeString("commandLine", Environment.CommandLine);
+ }
+ cce.EndExpose();
+ return null; // success
+ }
+
+ public void Close() {
+ //modifies this.*;
+ if (wr != null) {
+ cce.BeginExpose(this);
+ {
+ wr.WriteEndDocument();
+ wr.Close();
+ wr = null;
+ }
+ cce.EndExpose();
+ }
+ }
+
+ const string DateTimeFormatString = "u";
+
+ public void WriteStartMethod(string methodName, DateTime startTime) {
+ Contract.Requires(methodName != null);
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("method");
+ wr.WriteAttributeString("name", methodName);
+ wr.WriteAttributeString("startTime", startTime.ToString(DateTimeFormatString));
+ }
+ cce.EndExpose();
+ }
+
+ public void WriteEndMethod(string outcome, DateTime endTime, TimeSpan elapsed) {
+ Contract.Requires(outcome != null);
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("conclusion");
+ wr.WriteAttributeString("endTime", endTime.ToString(DateTimeFormatString));
+ wr.WriteAttributeString("duration", elapsed.TotalSeconds.ToString());
+ wr.WriteAttributeString("outcome", outcome);
+
+ wr.WriteEndElement(); // outcome
+ wr.WriteEndElement(); // method
+ }
+ cce.EndExpose();
+ }
+
+ public void WriteError(string message, IToken errorToken, IToken relatedToken, List<Block> trace) {
+ Contract.Requires(errorToken != null);
+ Contract.Requires(message != null);
+ Contract.Requires(IsOpen && (trace == null || cce.Owner.Different(this, trace)));
+ //modifies this.*, errorToken.*, relatedToken.*, trace.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("error");
+ wr.WriteAttributeString("message", message);
+ WriteTokenAttributes(errorToken);
+ if (relatedToken != null) {
+ wr.WriteStartElement("related");
+ WriteTokenAttributes(relatedToken);
+ wr.WriteEndElement();
+ }
+ if (trace != null) {
+ wr.WriteStartElement("trace");
+ {
+ foreach (object bo in trace) {
+ cce.LoopInvariant(wr != null);
+ Contract.Assume(bo is Block);
+ Block b = (Block)bo;
+ wr.WriteStartElement("traceNode");
+ {
+ WriteTokenAttributes(b.tok);
+ wr.WriteAttributeString("label", b.Label);
+ }
+ wr.WriteEndElement();
+ }
+ wr.WriteEndElement();
+ }
+ }
+ wr.WriteEndElement();
+ }
+ cce.EndExpose();
+ }
+
+#if CCI
+ public void WriteError(string message, Cci.Node offendingNode, List<Block> trace) {
+ Contract.Requires(offendingNode != null);
+ Contract.Requires(message != null);
+ Contract.Requires(IsOpen && cce.Owner.Different(this, offendingNode));
+ Contract.Requires(trace == null || cce.Owner.Different(this, trace));
+ //modifies this.*, offendingNode.*, trace.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("error");
+ wr.WriteAttributeString("message", message);
+ WriteTokenAttributes(offendingNode);
+ if (trace != null) {
+ wr.WriteStartElement("trace");
+ {
+ foreach (object bo in trace) {
+ cce.LoopInvariant(wr != null);
+ Contract.Assume(bo is Block);
+ Block b = (Block)bo;
+ wr.WriteStartElement("traceNode");
+ {
+ this.WriteTokenAttributes(b.tok);
+ wr.WriteAttributeString("label", b.Label);
+ }
+ wr.WriteEndElement();
+ }
+ wr.WriteEndElement();
+ }
+ }
+ wr.WriteEndElement();
+ }
+ cce.EndExpose();
+ }
+#endif
+
+ [Inside]
+ private void WriteTokenAttributes(IToken tok) {
+ Contract.Requires(wr != null && cce.IsPeerConsistent(wr));
+ //modifies this.0, wr.*;
+ if (tok != null && tok.filename != null) {
+ wr.WriteAttributeString("file", tok.filename);
+ wr.WriteAttributeString("line", tok.line.ToString());
+ wr.WriteAttributeString("column", tok.col.ToString());
+ }
+ }
+
+#if CCI
+ [Inside]
+ private void WriteTokenAttributes(Cci.Node node) {
+ Contract.Requires(node != null);
+ Contract.Requires(wr != null && cce.IsPeerConsistent(wr));
+ //modifies this.0, wr.*;
+ Contract.Assert(wr != null);
+ if (node.SourceContext.Document != null) {
+ wr.WriteAttributeString("file", node.SourceContext.Document.Name);
+ wr.WriteAttributeString("line", node.SourceContext.StartLine.ToString());
+ wr.WriteAttributeString("column", node.SourceContext.StartColumn.ToString());
+ }
+ }
+#endif
+
+ public void WriteStartInference(string inferenceName) {
+ Contract.Requires(inferenceName != null);
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("inference");
+ wr.WriteAttributeString("name", inferenceName);
+ }
+ cce.EndExpose();
+ }
+
+ public void WriteEndInference() {
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteEndElement(); // inference
+ }
+ cce.EndExpose();
+ }
+
+ public void WriteContractParaAssignment(string varName, string val) {
+ Contract.Requires(varName != null);
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("assignment");
+ wr.WriteAttributeString("name", varName);
+ wr.WriteAttributeString("value", val);
+ wr.WriteEndElement();
+ }
+ cce.EndExpose();
+ }
+
+ public void WriteStartFile(string filename) {
+ Contract.Requires(filename != null);
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("file");
+ wr.WriteAttributeString("name", filename);
+ }
+ cce.EndExpose();
+ }
+
+ public void WriteEndFile() {
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteEndElement();
+ }
+ cce.EndExpose();
+ }
+
+ public void WriteFileFragment(string fragment) {
+ Contract.Requires(fragment != null);
+ Contract.Requires(IsOpen);
+ //modifies this.*;
+ Contract.Ensures(IsOpen);
+ Contract.Assert(wr != null);
+ cce.BeginExpose(this);
+ {
+ wr.WriteStartElement("fileFragment");
+ wr.WriteAttributeString("name", fragment);
+ wr.WriteEndElement();
+ }
+ cce.EndExpose();
+ }
+ }
+
+ public class XmlFileScope : IDisposable {
+ [Peer]
+ [SpecPublic]
+ XmlSink sink;
+
+ [Captured]
+ public XmlFileScope(XmlSink sink, string filename) {
+ Contract.Requires(filename != null);
+ Contract.Requires(sink == null || sink.IsOpen);
+ //modifies sink.*;
+ if (sink != null) {
+ sink.WriteStartFile(filename); // invoke this method while "sink" is still peer consistent
+ cce.Owner.AssignSame(this, sink);
+ this.sink = sink;
+ }
+ }
+
+ public void Dispose() {
+ if (sink != null) {
+ Contract.Assume(sink.IsOpen);
+ sink.WriteEndFile();
+ }
+ }
+ }
} \ No newline at end of file
diff --git a/Source/Core/cce.cs b/Source/Core/cce.cs
index ef594484..1e0b12a5 100644
--- a/Source/Core/cce.cs
+++ b/Source/Core/cce.cs
@@ -1,193 +1,193 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
- }
- //[Pure]
- //public static bool NonNullElements(VariableSeq collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
- return iEnumerator != null;
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
- //[Pure]
- //public static bool IsValid(Microsoft.Dafny.Expression expression) {
- // return true;
- //}
- //public static List<T> toList<T>(PureCollections.Sequence s) {
- // List<T> toRet = new List<T>();
- // foreach (T t in s.elems)
- // if(t!=null)
- // toRet.Add(t);
- // return toRet;
- //}
-
- //internal static bool NonNullElements(Set set) {
- // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
- //}
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
+ }
+ //[Pure]
+ //public static bool NonNullElements(VariableSeq collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
+ return iEnumerator != null;
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+ //[Pure]
+ //public static bool IsValid(Microsoft.Dafny.Expression expression) {
+ // return true;
+ //}
+ //public static List<T> toList<T>(PureCollections.Sequence s) {
+ // List<T> toRet = new List<T>();
+ // foreach (T t in s.elems)
+ // if(t!=null)
+ // toRet.Add(t);
+ // return toRet;
+ //}
+
+ //internal static bool NonNullElements(Set set) {
+ // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
+ //}
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/Doomed/DoomCheck.cs b/Source/Doomed/DoomCheck.cs
index 83de03ff..c1d6736f 100644
--- a/Source/Doomed/DoomCheck.cs
+++ b/Source/Doomed/DoomCheck.cs
@@ -1,407 +1,407 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC
-{
- internal class Evc {
-
- public DoomErrorHandler ErrorHandler {
- set {
- m_ErrorHandler = value;
- }
- }
-
- [ContractInvariantMethod]
-void ObjectInvariant()
-{
- Contract.Invariant(m_Checker!=null);
-}
-
- private Checker m_Checker;
- private DoomErrorHandler m_ErrorHandler;
-
- [NotDelayed]
- public Evc(Checker check) {
- Contract.Requires(check != null);
- m_Checker = check;
-
- }
-
- public void Initialize(VCExpr evc) {
- Contract.Requires(evc != null);
- m_Checker.PushVCExpr(evc);
- }
-
-
- public bool CheckReachvar(List<Variable> lv,Dictionary<Expr, int> finalreachvars,
- int k, int l, bool usenew , out ProverInterface.Outcome outcome) {
- Contract.Requires(lv != null);
-
- VCExpr vc = VCExpressionGenerator.False;
- if (usenew )
- {
- foreach (Variable v in lv)
- {
-
- vc = m_Checker.VCExprGen.Or(
- m_Checker.VCExprGen.Neq(
- m_Checker.VCExprGen.Integer(BigNum.ZERO),
- m_Checker.TheoremProver.Context.BoogieExprTranslator.LookupVariable(v)),
- vc);
- }
- //Console.WriteLine("TPQuery k={0}, l={1}, |Sp|={2}", k, l, finalreachvars.Count);
-
- VCExpr vc21 = m_Checker.VCExprGen.Integer(BigNum.ZERO); // Ask: is the necessary or can we use the same instance term in two inequalities?
- VCExpr vc22 = m_Checker.VCExprGen.Integer(BigNum.ZERO);
-
- foreach (KeyValuePair<Expr, int> kvp in finalreachvars)
- {
-
- vc21 = m_Checker.VCExprGen.Add(vc21, m_Checker.TheoremProver.Context.BoogieExprTranslator.Translate(kvp.Key));
- vc22 = m_Checker.VCExprGen.Add(vc22, m_Checker.TheoremProver.Context.BoogieExprTranslator.Translate(kvp.Key));
- }
-
- VCExpr post = m_Checker.VCExprGen.Gt(m_Checker.VCExprGen.Integer(BigNum.FromInt(l)), vc21);
-
- if (k != -1)
- {
- post = m_Checker.VCExprGen.Or(
- post, m_Checker.VCExprGen.Gt(vc22, m_Checker.VCExprGen.Integer(BigNum.FromInt(k)))
- );
- }
- vc = (m_Checker.VCExprGen.Or(vc, (post) ));
-
- }
- else
- {
-
- foreach (Variable v in lv)
- {
-
- vc = m_Checker.VCExprGen.Or(
- m_Checker.VCExprGen.Eq(
- m_Checker.VCExprGen.Integer(BigNum.ONE),
- m_Checker.TheoremProver.Context.BoogieExprTranslator.LookupVariable(v)),
- vc);
- }
- Contract.Assert(vc != null);
-
- // Add the desired outcome of the reachability variables
- foreach (KeyValuePair<Expr, int> kvp in finalreachvars)
- {
- vc = m_Checker.VCExprGen.Or(
- m_Checker.VCExprGen.Neq(
- m_Checker.VCExprGen.Integer(BigNum.FromInt(kvp.Value)),
- m_Checker.TheoremProver.Context.BoogieExprTranslator.Translate(kvp.Key)),
- vc);
- }
-
- }
-
- // Todo: Check if vc is trivial true or false
- outcome = ProverInterface.Outcome.Undetermined;
- Contract.Assert(m_ErrorHandler != null);
- try
- {
- m_Checker.BeginCheck(lv[0].Name, vc, m_ErrorHandler);
- m_Checker.ProverTask.Wait();
- outcome = m_Checker.ReadOutcome();
- }
- catch (UnexpectedProverOutputException e)
- {
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("Prover is unable to check {0}! Reason:", lv[0].Name);
- Console.WriteLine(e.ToString());
- }
- return false;
- }
- finally
- {
- m_Checker.GoBackToIdle();
- }
- return true;
- }
- }
-
- internal class DoomCheck {
-
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(Label2Absy!=null);
- Contract.Invariant(m_Check != null);
- Contract.Invariant(m_Evc != null);
- Contract.Invariant(m_Order != null);
- }
-
- #region Attributes
- public Dictionary<int, Absy> Label2Absy;
- public DoomErrorHandler ErrorHandler {
- set {
- m_ErrHandler = value;
- m_Evc.ErrorHandler = value;
- }
-
- get {
- return m_ErrHandler;
- }
- }
-
- private DoomErrorHandler m_ErrHandler;
- private Checker m_Check;
- private DoomDetectionStrategy m_Order;
- private Evc m_Evc;
- #endregion
-
- public void __DEBUG_PrintStatistics()
- {
- Console.WriteLine("Checked/Total: Bl {0} / {1} EQ {2} / {3} {4} Tr {5} {6} / {7}", m_Order.__DEBUG_BlocksChecked, m_Order.__DEBUG_BlocksTotal, m_Order.__DEBUG_EQCChecked, m_Order.__DEBUG_EQCTotal, m_Order.__DEBUG_EQCLeaf, m_Order.__DEBUG_TracesChecked, m_Order.__DEBUG_InfeasibleTraces, m_Order.__DEBUG_TracesTotal);
- }
-
- [NotDelayed]
- public DoomCheck (Implementation passive_impl, Block unifiedExit, Checker check, List<Block> uncheckable, out int assertionCount) {
- Contract.Requires(passive_impl != null);
- Contract.Requires(check != null);
- Contract.Requires(uncheckable != null);
- m_Check = check;
-
- int replaceThisByCmdLineOption = CommandLineOptions.Clo.DoomStrategy ;
- if (CommandLineOptions.Clo.DoomStrategy!=-1) Console.Write("Running experiments using {0} /", replaceThisByCmdLineOption);
- switch (replaceThisByCmdLineOption)
- {
- default:
- {
- if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("Path Cover specialK Strategy");
- m_Order = new PathCoverStrategyK(passive_impl, unifiedExit, uncheckable);
- break;
- }
- case 1:
- {
- if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("Path Cover L Strategy");
- m_Order = new PathCoverStrategy(passive_impl, unifiedExit, uncheckable);
- break;
- }
- case 2:
- {
- if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("hasse strategy");
- m_Order = new HierachyStrategy(passive_impl, unifiedExit, uncheckable);
-
- break;
- }
- case 3:
- {
- if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("hasse+ce strategy");
- m_Order = new HierachyCEStrategy(passive_impl, unifiedExit, uncheckable);
- break;
- }
- case 4:
- {
- if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("no strategy");
- m_Order = new NoStrategy(passive_impl, unifiedExit, uncheckable);
- break;
- }
-
- }
-
- Label2Absy = new Dictionary<int, Absy>(); // This is only a dummy
- m_Evc = new Evc(check);
- Dictionary<int, Absy> l2a = null;
- VCExpr vce = this.GenerateEVC(passive_impl, out l2a, check, out assertionCount);
- Contract.Assert(vce != null);
- Contract.Assert( l2a!=null);
- Label2Absy = l2a;
-
- m_Evc.Initialize(vce);
- }
-
-
- public void RespawnChecker(Implementation passive_impl, Checker check)
- {
- Contract.Requires(check != null);
- m_Check = check;
- Label2Absy = new Dictionary<int, Absy>(); // This is only a dummy
- m_Evc = new Evc(check);
- Dictionary<int, Absy> l2a = null;
- int assertionCount; // compute and then ignore
- VCExpr vce = this.GenerateEVC(passive_impl, out l2a, check, out assertionCount);
- Contract.Assert(vce != null);
- Contract.Assert(l2a != null);
- Label2Absy = l2a;
-
- m_Evc.Initialize(vce);
- }
-
- /* - Set b to the next block that needs to be checked.
- - Returns false and set b to null if all blocks are checked.
- - Has to be alternated with CheckLabel; might crash otherwise
- */
- public bool GetNextBlock(out List<Block> lb)
- {
- return m_Order.GetNextBlock(out lb);
- }
-
- public Stopwatch DEBUG_ProverTime = new Stopwatch();
-
- /* - Checking a label means to ask the prover if |= ( rvar=false -> vc ) holds.
- - outcome is set to Outcome.Invalid if the Block denoted by reachvar is doomed.
- - returns false if the theorem prover throws an exception, otherwise true.
- */
- public bool CheckLabel(List<Variable> lv,Dictionary<Expr, int> finalreachvars, out ProverInterface.Outcome outcome) {
- Contract.Requires(lv != null);
- outcome = ProverInterface.Outcome.Undetermined;
- DEBUG_ProverTime.Reset();
- DEBUG_ProverTime.Start();
- if (m_Evc.CheckReachvar(lv,finalreachvars,m_Order.MaxBlocks,m_Order.MinBlocks,m_Order.HACK_NewCheck, out outcome) ) {
- DEBUG_ProverTime.Stop();
- if (!m_Order.SetCurrentResult(lv, outcome, m_ErrHandler)) {
- outcome = ProverInterface.Outcome.Undetermined;
- }
- return true;
- } else {
- DEBUG_ProverTime.Stop();
- Console.WriteLine(outcome);
- m_Order.SetCurrentResult(lv, ProverInterface.Outcome.Undetermined, m_ErrHandler);
- return false;
- }
- }
-
- public List<List<Block/*!>!>!*/>> DoomedSequences {
- get {
- Contract.Ensures(Contract.ForAll(Contract.Result<List<List<Block>>>(), i=> cce.NonNullElements(i)));
-
- return m_Order.DetectedBlock;
- }
- }
-
-
- #region Error Verification Condition Generation
- /*
- #region _TESTING_NEW_STUFF_
- CommandLineOptions.Clo.vcVariety = CommandLineOptions.VCVariety.Block;
- //VCExpr wp = Wlp.Block(block, SuccCorrect, context); // Computes wp.S.true
-
- CommandLineOptions.Clo.vcVariety = CommandLineOptions.VCVariety.Doomed;
- #endregion
-
- */
-
- VCExpr GenerateEVC(Implementation impl, out Dictionary<int, Absy> label2absy, Checker ch, out int assertionCount) {
- Contract.Requires(impl != null);
- Contract.Requires(ch != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- TypecheckingContext tc = new TypecheckingContext(null);
- impl.Typecheck(tc);
- label2absy = new Dictionary<int, Absy>();
- VCExpr vc;
- switch (CommandLineOptions.Clo.vcVariety) {
- case CommandLineOptions.VCVariety.Doomed:
- vc = LetVC(cce.NonNull(impl.Blocks[0]), label2absy, ch.TheoremProver.Context, out assertionCount);
- break;
-
- default:
- Contract.Assert(false); throw new cce.UnreachableException(); // unexpected enumeration value
- }
- return vc;
- }
-
- public VCExpr LetVC(Block startBlock,
- Dictionary<int, Absy> label2absy,
- ProverContext proverCtxt,
- out int assertionCount)
- {
- Contract.Requires(startBlock != null);
- Contract.Requires(label2absy != null);
- Contract.Requires(proverCtxt != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
- List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
- VCExpr startCorrect = LetVC(startBlock, label2absy, blockVariables, bindings, proverCtxt, out assertionCount);
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) {
- return proverCtxt.ExprGen.Let(bindings, proverCtxt.ExprGen.Not(startCorrect) );
- } else {
- return proverCtxt.ExprGen.Let(bindings, startCorrect );
- }
- }
-
- VCExpr LetVC(Block block,
- Dictionary<int, Absy> label2absy,
- Hashtable/*<Block, VCExprVar!>*/ blockVariables,
- List<VCExprLetBinding> bindings,
- ProverContext proverCtxt,
- out int assertionCount)
- {
- Contract.Requires(label2absy != null);
- Contract.Requires(blockVariables != null);
- Contract.Requires(proverCtxt != null);
- Contract.Requires(cce.NonNullElements(bindings));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- assertionCount = 0;
- VCExpressionGenerator gen = proverCtxt.ExprGen;
- Contract.Assert(gen != null);
- VCExprVar v = (VCExprVar)blockVariables[block];
- if (v == null) {
- /*
- * For block A (= block), generate:
- * LET_binding A_correct = wp(A_body, (/\ S \in Successors(A) :: S_correct))
- * with the side effect of adding the let bindings to "bindings" for any
- * successor not yet visited.
- */
- VCExpr SuccCorrect;
- GotoCmd gotocmd = block.TransferCmd as GotoCmd;
- if (gotocmd == null) {
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) {
- SuccCorrect = VCExpressionGenerator.False;
- } else {
- SuccCorrect = VCExpressionGenerator.True;
- }
- } else {
- Contract.Assert( gotocmd.labelTargets != null);
- List<VCExpr> SuccCorrectVars = new List<VCExpr>(gotocmd.labelTargets.Count);
- foreach (Block successor in gotocmd.labelTargets) {
- Contract.Assert(successor != null);
- int ac;
- VCExpr s = LetVC(successor, label2absy, blockVariables, bindings, proverCtxt, out ac);
- assertionCount += ac;
- SuccCorrectVars.Add(s);
- }
- SuccCorrect = gen.NAry(VCExpressionGenerator.AndOp, SuccCorrectVars);
- }
-
- VCContext context = new VCContext(label2absy, proverCtxt);
- // m_Context = context;
-
- VCExpr vc = Wlp.Block(block, SuccCorrect, context);
- assertionCount += context.AssertionCount;
- v = gen.Variable(block.Label + "_correct", Microsoft.Boogie.Type.Bool);
-
- bindings.Add(gen.LetBinding(v, vc));
- blockVariables.Add(block, v);
- }
- return v;
- }
-
-
- #endregion
-
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC
+{
+ internal class Evc {
+
+ public DoomErrorHandler ErrorHandler {
+ set {
+ m_ErrorHandler = value;
+ }
+ }
+
+ [ContractInvariantMethod]
+void ObjectInvariant()
+{
+ Contract.Invariant(m_Checker!=null);
+}
+
+ private Checker m_Checker;
+ private DoomErrorHandler m_ErrorHandler;
+
+ [NotDelayed]
+ public Evc(Checker check) {
+ Contract.Requires(check != null);
+ m_Checker = check;
+
+ }
+
+ public void Initialize(VCExpr evc) {
+ Contract.Requires(evc != null);
+ m_Checker.PushVCExpr(evc);
+ }
+
+
+ public bool CheckReachvar(List<Variable> lv,Dictionary<Expr, int> finalreachvars,
+ int k, int l, bool usenew , out ProverInterface.Outcome outcome) {
+ Contract.Requires(lv != null);
+
+ VCExpr vc = VCExpressionGenerator.False;
+ if (usenew )
+ {
+ foreach (Variable v in lv)
+ {
+
+ vc = m_Checker.VCExprGen.Or(
+ m_Checker.VCExprGen.Neq(
+ m_Checker.VCExprGen.Integer(BigNum.ZERO),
+ m_Checker.TheoremProver.Context.BoogieExprTranslator.LookupVariable(v)),
+ vc);
+ }
+ //Console.WriteLine("TPQuery k={0}, l={1}, |Sp|={2}", k, l, finalreachvars.Count);
+
+ VCExpr vc21 = m_Checker.VCExprGen.Integer(BigNum.ZERO); // Ask: is the necessary or can we use the same instance term in two inequalities?
+ VCExpr vc22 = m_Checker.VCExprGen.Integer(BigNum.ZERO);
+
+ foreach (KeyValuePair<Expr, int> kvp in finalreachvars)
+ {
+
+ vc21 = m_Checker.VCExprGen.Add(vc21, m_Checker.TheoremProver.Context.BoogieExprTranslator.Translate(kvp.Key));
+ vc22 = m_Checker.VCExprGen.Add(vc22, m_Checker.TheoremProver.Context.BoogieExprTranslator.Translate(kvp.Key));
+ }
+
+ VCExpr post = m_Checker.VCExprGen.Gt(m_Checker.VCExprGen.Integer(BigNum.FromInt(l)), vc21);
+
+ if (k != -1)
+ {
+ post = m_Checker.VCExprGen.Or(
+ post, m_Checker.VCExprGen.Gt(vc22, m_Checker.VCExprGen.Integer(BigNum.FromInt(k)))
+ );
+ }
+ vc = (m_Checker.VCExprGen.Or(vc, (post) ));
+
+ }
+ else
+ {
+
+ foreach (Variable v in lv)
+ {
+
+ vc = m_Checker.VCExprGen.Or(
+ m_Checker.VCExprGen.Eq(
+ m_Checker.VCExprGen.Integer(BigNum.ONE),
+ m_Checker.TheoremProver.Context.BoogieExprTranslator.LookupVariable(v)),
+ vc);
+ }
+ Contract.Assert(vc != null);
+
+ // Add the desired outcome of the reachability variables
+ foreach (KeyValuePair<Expr, int> kvp in finalreachvars)
+ {
+ vc = m_Checker.VCExprGen.Or(
+ m_Checker.VCExprGen.Neq(
+ m_Checker.VCExprGen.Integer(BigNum.FromInt(kvp.Value)),
+ m_Checker.TheoremProver.Context.BoogieExprTranslator.Translate(kvp.Key)),
+ vc);
+ }
+
+ }
+
+ // Todo: Check if vc is trivial true or false
+ outcome = ProverInterface.Outcome.Undetermined;
+ Contract.Assert(m_ErrorHandler != null);
+ try
+ {
+ m_Checker.BeginCheck(lv[0].Name, vc, m_ErrorHandler);
+ m_Checker.ProverTask.Wait();
+ outcome = m_Checker.ReadOutcome();
+ }
+ catch (UnexpectedProverOutputException e)
+ {
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("Prover is unable to check {0}! Reason:", lv[0].Name);
+ Console.WriteLine(e.ToString());
+ }
+ return false;
+ }
+ finally
+ {
+ m_Checker.GoBackToIdle();
+ }
+ return true;
+ }
+ }
+
+ internal class DoomCheck {
+
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(Label2Absy!=null);
+ Contract.Invariant(m_Check != null);
+ Contract.Invariant(m_Evc != null);
+ Contract.Invariant(m_Order != null);
+ }
+
+ #region Attributes
+ public Dictionary<int, Absy> Label2Absy;
+ public DoomErrorHandler ErrorHandler {
+ set {
+ m_ErrHandler = value;
+ m_Evc.ErrorHandler = value;
+ }
+
+ get {
+ return m_ErrHandler;
+ }
+ }
+
+ private DoomErrorHandler m_ErrHandler;
+ private Checker m_Check;
+ private DoomDetectionStrategy m_Order;
+ private Evc m_Evc;
+ #endregion
+
+ public void __DEBUG_PrintStatistics()
+ {
+ Console.WriteLine("Checked/Total: Bl {0} / {1} EQ {2} / {3} {4} Tr {5} {6} / {7}", m_Order.__DEBUG_BlocksChecked, m_Order.__DEBUG_BlocksTotal, m_Order.__DEBUG_EQCChecked, m_Order.__DEBUG_EQCTotal, m_Order.__DEBUG_EQCLeaf, m_Order.__DEBUG_TracesChecked, m_Order.__DEBUG_InfeasibleTraces, m_Order.__DEBUG_TracesTotal);
+ }
+
+ [NotDelayed]
+ public DoomCheck (Implementation passive_impl, Block unifiedExit, Checker check, List<Block> uncheckable, out int assertionCount) {
+ Contract.Requires(passive_impl != null);
+ Contract.Requires(check != null);
+ Contract.Requires(uncheckable != null);
+ m_Check = check;
+
+ int replaceThisByCmdLineOption = CommandLineOptions.Clo.DoomStrategy ;
+ if (CommandLineOptions.Clo.DoomStrategy!=-1) Console.Write("Running experiments using {0} /", replaceThisByCmdLineOption);
+ switch (replaceThisByCmdLineOption)
+ {
+ default:
+ {
+ if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("Path Cover specialK Strategy");
+ m_Order = new PathCoverStrategyK(passive_impl, unifiedExit, uncheckable);
+ break;
+ }
+ case 1:
+ {
+ if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("Path Cover L Strategy");
+ m_Order = new PathCoverStrategy(passive_impl, unifiedExit, uncheckable);
+ break;
+ }
+ case 2:
+ {
+ if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("hasse strategy");
+ m_Order = new HierachyStrategy(passive_impl, unifiedExit, uncheckable);
+
+ break;
+ }
+ case 3:
+ {
+ if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("hasse+ce strategy");
+ m_Order = new HierachyCEStrategy(passive_impl, unifiedExit, uncheckable);
+ break;
+ }
+ case 4:
+ {
+ if (CommandLineOptions.Clo.DoomStrategy != -1) Console.WriteLine("no strategy");
+ m_Order = new NoStrategy(passive_impl, unifiedExit, uncheckable);
+ break;
+ }
+
+ }
+
+ Label2Absy = new Dictionary<int, Absy>(); // This is only a dummy
+ m_Evc = new Evc(check);
+ Dictionary<int, Absy> l2a = null;
+ VCExpr vce = this.GenerateEVC(passive_impl, out l2a, check, out assertionCount);
+ Contract.Assert(vce != null);
+ Contract.Assert( l2a!=null);
+ Label2Absy = l2a;
+
+ m_Evc.Initialize(vce);
+ }
+
+
+ public void RespawnChecker(Implementation passive_impl, Checker check)
+ {
+ Contract.Requires(check != null);
+ m_Check = check;
+ Label2Absy = new Dictionary<int, Absy>(); // This is only a dummy
+ m_Evc = new Evc(check);
+ Dictionary<int, Absy> l2a = null;
+ int assertionCount; // compute and then ignore
+ VCExpr vce = this.GenerateEVC(passive_impl, out l2a, check, out assertionCount);
+ Contract.Assert(vce != null);
+ Contract.Assert(l2a != null);
+ Label2Absy = l2a;
+
+ m_Evc.Initialize(vce);
+ }
+
+ /* - Set b to the next block that needs to be checked.
+ - Returns false and set b to null if all blocks are checked.
+ - Has to be alternated with CheckLabel; might crash otherwise
+ */
+ public bool GetNextBlock(out List<Block> lb)
+ {
+ return m_Order.GetNextBlock(out lb);
+ }
+
+ public Stopwatch DEBUG_ProverTime = new Stopwatch();
+
+ /* - Checking a label means to ask the prover if |= ( rvar=false -> vc ) holds.
+ - outcome is set to Outcome.Invalid if the Block denoted by reachvar is doomed.
+ - returns false if the theorem prover throws an exception, otherwise true.
+ */
+ public bool CheckLabel(List<Variable> lv,Dictionary<Expr, int> finalreachvars, out ProverInterface.Outcome outcome) {
+ Contract.Requires(lv != null);
+ outcome = ProverInterface.Outcome.Undetermined;
+ DEBUG_ProverTime.Reset();
+ DEBUG_ProverTime.Start();
+ if (m_Evc.CheckReachvar(lv,finalreachvars,m_Order.MaxBlocks,m_Order.MinBlocks,m_Order.HACK_NewCheck, out outcome) ) {
+ DEBUG_ProverTime.Stop();
+ if (!m_Order.SetCurrentResult(lv, outcome, m_ErrHandler)) {
+ outcome = ProverInterface.Outcome.Undetermined;
+ }
+ return true;
+ } else {
+ DEBUG_ProverTime.Stop();
+ Console.WriteLine(outcome);
+ m_Order.SetCurrentResult(lv, ProverInterface.Outcome.Undetermined, m_ErrHandler);
+ return false;
+ }
+ }
+
+ public List<List<Block/*!>!>!*/>> DoomedSequences {
+ get {
+ Contract.Ensures(Contract.ForAll(Contract.Result<List<List<Block>>>(), i=> cce.NonNullElements(i)));
+
+ return m_Order.DetectedBlock;
+ }
+ }
+
+
+ #region Error Verification Condition Generation
+ /*
+ #region _TESTING_NEW_STUFF_
+ CommandLineOptions.Clo.vcVariety = CommandLineOptions.VCVariety.Block;
+ //VCExpr wp = Wlp.Block(block, SuccCorrect, context); // Computes wp.S.true
+
+ CommandLineOptions.Clo.vcVariety = CommandLineOptions.VCVariety.Doomed;
+ #endregion
+
+ */
+
+ VCExpr GenerateEVC(Implementation impl, out Dictionary<int, Absy> label2absy, Checker ch, out int assertionCount) {
+ Contract.Requires(impl != null);
+ Contract.Requires(ch != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ TypecheckingContext tc = new TypecheckingContext(null);
+ impl.Typecheck(tc);
+ label2absy = new Dictionary<int, Absy>();
+ VCExpr vc;
+ switch (CommandLineOptions.Clo.vcVariety) {
+ case CommandLineOptions.VCVariety.Doomed:
+ vc = LetVC(cce.NonNull(impl.Blocks[0]), label2absy, ch.TheoremProver.Context, out assertionCount);
+ break;
+
+ default:
+ Contract.Assert(false); throw new cce.UnreachableException(); // unexpected enumeration value
+ }
+ return vc;
+ }
+
+ public VCExpr LetVC(Block startBlock,
+ Dictionary<int, Absy> label2absy,
+ ProverContext proverCtxt,
+ out int assertionCount)
+ {
+ Contract.Requires(startBlock != null);
+ Contract.Requires(label2absy != null);
+ Contract.Requires(proverCtxt != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
+ List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
+ VCExpr startCorrect = LetVC(startBlock, label2absy, blockVariables, bindings, proverCtxt, out assertionCount);
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) {
+ return proverCtxt.ExprGen.Let(bindings, proverCtxt.ExprGen.Not(startCorrect) );
+ } else {
+ return proverCtxt.ExprGen.Let(bindings, startCorrect );
+ }
+ }
+
+ VCExpr LetVC(Block block,
+ Dictionary<int, Absy> label2absy,
+ Hashtable/*<Block, VCExprVar!>*/ blockVariables,
+ List<VCExprLetBinding> bindings,
+ ProverContext proverCtxt,
+ out int assertionCount)
+ {
+ Contract.Requires(label2absy != null);
+ Contract.Requires(blockVariables != null);
+ Contract.Requires(proverCtxt != null);
+ Contract.Requires(cce.NonNullElements(bindings));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ assertionCount = 0;
+ VCExpressionGenerator gen = proverCtxt.ExprGen;
+ Contract.Assert(gen != null);
+ VCExprVar v = (VCExprVar)blockVariables[block];
+ if (v == null) {
+ /*
+ * For block A (= block), generate:
+ * LET_binding A_correct = wp(A_body, (/\ S \in Successors(A) :: S_correct))
+ * with the side effect of adding the let bindings to "bindings" for any
+ * successor not yet visited.
+ */
+ VCExpr SuccCorrect;
+ GotoCmd gotocmd = block.TransferCmd as GotoCmd;
+ if (gotocmd == null) {
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) {
+ SuccCorrect = VCExpressionGenerator.False;
+ } else {
+ SuccCorrect = VCExpressionGenerator.True;
+ }
+ } else {
+ Contract.Assert( gotocmd.labelTargets != null);
+ List<VCExpr> SuccCorrectVars = new List<VCExpr>(gotocmd.labelTargets.Count);
+ foreach (Block successor in gotocmd.labelTargets) {
+ Contract.Assert(successor != null);
+ int ac;
+ VCExpr s = LetVC(successor, label2absy, blockVariables, bindings, proverCtxt, out ac);
+ assertionCount += ac;
+ SuccCorrectVars.Add(s);
+ }
+ SuccCorrect = gen.NAry(VCExpressionGenerator.AndOp, SuccCorrectVars);
+ }
+
+ VCContext context = new VCContext(label2absy, proverCtxt);
+ // m_Context = context;
+
+ VCExpr vc = Wlp.Block(block, SuccCorrect, context);
+ assertionCount += context.AssertionCount;
+ v = gen.Variable(block.Label + "_correct", Microsoft.Boogie.Type.Bool);
+
+ bindings.Add(gen.LetBinding(v, vc));
+ blockVariables.Add(block, v);
+ }
+ return v;
+ }
+
+
+ #endregion
+
+ }
+
+}
diff --git a/Source/Doomed/DoomErrorHandler.cs b/Source/Doomed/DoomErrorHandler.cs
index 8d89bae3..ce14ff73 100644
--- a/Source/Doomed/DoomErrorHandler.cs
+++ b/Source/Doomed/DoomErrorHandler.cs
@@ -1,86 +1,86 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC
-{
- internal class DoomErrorHandler : ProverInterface.ErrorHandler
- {
-
- protected Dictionary<int, Absy> label2Absy;
- protected VerifierCallback callback;
- private List<Block> m_CurrentTrace = new List<Block>();
-
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(label2Absy != null);
- Contract.Invariant(callback != null);
- Contract.Invariant(cce.NonNullElements(m_CurrentTrace));
- }
-
-
- public DoomErrorHandler(Dictionary<int, Absy> label2Absy, VerifierCallback callback)
- {
- Contract.Requires(label2Absy != null);
- Contract.Requires(callback != null);
- this.label2Absy = label2Absy;
- this.callback = callback;
- }
-
- public override Absy Label2Absy(string label)
- {
- //Contract.Requires(label != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
-
- int id = int.Parse(label);
- return cce.NonNull((Absy)label2Absy[id]);
- }
-
- public override void OnProverWarning(string msg)
- {
- //Contract.Requires(msg != null);
- this.callback.OnWarning(msg);
- }
-
-
- public List<Block>/*!>!*/ TraceNodes
- {
- get
- {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
-
- return m_CurrentTrace;
- }
- }
-
- public override void OnModel(IList<string>/*!>!*/ labels, Model model, ProverInterface.Outcome proverOutcome)
- {
- // TODO: it would be better to check which reachability variables are actually set to one!
- List<Block> traceNodes = new List<Block>();
- List<AssertCmd> assertNodes = new List<AssertCmd>();
- foreach (string s in labels)
- {
- Contract.Assert(s != null);
- Absy node = Label2Absy(s);
- if (node is Block)
- {
- Block b = (Block)node;
- traceNodes.Add(b);
- //Console.Write("{0}, ", b.Label);
- }
- }
- m_CurrentTrace.AddRange(traceNodes);
- }
-
- }
-
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC
+{
+ internal class DoomErrorHandler : ProverInterface.ErrorHandler
+ {
+
+ protected Dictionary<int, Absy> label2Absy;
+ protected VerifierCallback callback;
+ private List<Block> m_CurrentTrace = new List<Block>();
+
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(label2Absy != null);
+ Contract.Invariant(callback != null);
+ Contract.Invariant(cce.NonNullElements(m_CurrentTrace));
+ }
+
+
+ public DoomErrorHandler(Dictionary<int, Absy> label2Absy, VerifierCallback callback)
+ {
+ Contract.Requires(label2Absy != null);
+ Contract.Requires(callback != null);
+ this.label2Absy = label2Absy;
+ this.callback = callback;
+ }
+
+ public override Absy Label2Absy(string label)
+ {
+ //Contract.Requires(label != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+
+ int id = int.Parse(label);
+ return cce.NonNull((Absy)label2Absy[id]);
+ }
+
+ public override void OnProverWarning(string msg)
+ {
+ //Contract.Requires(msg != null);
+ this.callback.OnWarning(msg);
+ }
+
+
+ public List<Block>/*!>!*/ TraceNodes
+ {
+ get
+ {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+
+ return m_CurrentTrace;
+ }
+ }
+
+ public override void OnModel(IList<string>/*!>!*/ labels, Model model, ProverInterface.Outcome proverOutcome)
+ {
+ // TODO: it would be better to check which reachability variables are actually set to one!
+ List<Block> traceNodes = new List<Block>();
+ List<AssertCmd> assertNodes = new List<AssertCmd>();
+ foreach (string s in labels)
+ {
+ Contract.Assert(s != null);
+ Absy node = Label2Absy(s);
+ if (node is Block)
+ {
+ Block b = (Block)node;
+ traceNodes.Add(b);
+ //Console.Write("{0}, ", b.Label);
+ }
+ }
+ m_CurrentTrace.AddRange(traceNodes);
+ }
+
+ }
+
} \ No newline at end of file
diff --git a/Source/Doomed/Doomed.csproj b/Source/Doomed/Doomed.csproj
index 77713080..f055d2c9 100644
--- a/Source/Doomed/Doomed.csproj
+++ b/Source/Doomed/Doomed.csproj
@@ -1,190 +1,190 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{884386A3-58E9-40BB-A273-B24976775553}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Doomed</RootNamespace>
- <AssemblyName>Doomed</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
- <ProductVersion>12.0.0</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
- <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
- <CodeContractsAssertsToContractsCheckBox>True</CodeContractsAssertsToContractsCheckBox>
- <CodeContractsRedundantTests>True</CodeContractsRedundantTests>
- <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
- <CodeContractsMissingPublicEnsuresAsWarnings>False</CodeContractsMissingPublicEnsuresAsWarnings>
- <CodeContractsInferRequires>True</CodeContractsInferRequires>
- <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
- <CodeContractsInferEnsuresAutoProperties>True</CodeContractsInferEnsuresAutoProperties>
- <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
- <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
- <CodeContractsSuggestAssumptionsForCallees>False</CodeContractsSuggestAssumptionsForCallees>
- <CodeContractsSuggestRequires>False</CodeContractsSuggestRequires>
- <CodeContractsNecessaryEnsures>True</CodeContractsNecessaryEnsures>
- <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
- <CodeContractsSuggestReadonly>True</CodeContractsSuggestReadonly>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsSQLServerOption />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
- <CodeContractsSkipAnalysisIfCannotConnectToCache>False</CodeContractsSkipAnalysisIfCannotConnectToCache>
- <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
- <CodeContractsBeingOptimisticOnExternal>True</CodeContractsBeingOptimisticOnExternal>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
- <CodeContractsInferRequires>True</CodeContractsInferRequires>
- <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
- <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
- <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
- <CodeContractsSuggestRequires>True</CodeContractsSuggestRequires>
- <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsSQLServerOption />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
- <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="DoomCheck.cs" />
- <Compile Include="DoomedLoopUnrolling.cs" />
- <Compile Include="DoomedStrategy.cs" />
- <Compile Include="DoomErrorHandler.cs" />
- <Compile Include="HasseDiagram.cs" />
- <Compile Include="VCDoomed.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\Model\Model.csproj">
- <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCExpr\VCExpr.csproj">
- <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
- <Name>VCExpr</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{884386A3-58E9-40BB-A273-B24976775553}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Doomed</RootNamespace>
+ <AssemblyName>BoogieDoomed</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ <ProductVersion>12.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
+ <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
+ <CodeContractsAssertsToContractsCheckBox>True</CodeContractsAssertsToContractsCheckBox>
+ <CodeContractsRedundantTests>True</CodeContractsRedundantTests>
+ <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
+ <CodeContractsMissingPublicEnsuresAsWarnings>False</CodeContractsMissingPublicEnsuresAsWarnings>
+ <CodeContractsInferRequires>True</CodeContractsInferRequires>
+ <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
+ <CodeContractsInferEnsuresAutoProperties>True</CodeContractsInferEnsuresAutoProperties>
+ <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
+ <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
+ <CodeContractsSuggestAssumptionsForCallees>False</CodeContractsSuggestAssumptionsForCallees>
+ <CodeContractsSuggestRequires>False</CodeContractsSuggestRequires>
+ <CodeContractsNecessaryEnsures>True</CodeContractsNecessaryEnsures>
+ <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
+ <CodeContractsSuggestReadonly>True</CodeContractsSuggestReadonly>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsSQLServerOption />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
+ <CodeContractsSkipAnalysisIfCannotConnectToCache>False</CodeContractsSkipAnalysisIfCannotConnectToCache>
+ <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
+ <CodeContractsBeingOptimisticOnExternal>True</CodeContractsBeingOptimisticOnExternal>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
+ <CodeContractsInferRequires>True</CodeContractsInferRequires>
+ <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
+ <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
+ <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
+ <CodeContractsSuggestRequires>True</CodeContractsSuggestRequires>
+ <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsSQLServerOption />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
+ <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="DoomCheck.cs" />
+ <Compile Include="DoomedLoopUnrolling.cs" />
+ <Compile Include="DoomedStrategy.cs" />
+ <Compile Include="DoomErrorHandler.cs" />
+ <Compile Include="HasseDiagram.cs" />
+ <Compile Include="VCDoomed.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Model\Model.csproj">
+ <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
+ <Name>Model</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCExpr\VCExpr.csproj">
+ <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
+ <Name>VCExpr</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/Doomed/DoomedLoopUnrolling.cs b/Source/Doomed/DoomedLoopUnrolling.cs
index 38fa99ac..0905deed 100644
--- a/Source/Doomed/DoomedLoopUnrolling.cs
+++ b/Source/Doomed/DoomedLoopUnrolling.cs
@@ -1,650 +1,650 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC
-{
- #region Loop handeling for doomed code detection
-
- #region Loop Remover
- internal class LoopRemover
- {
- GraphAnalyzer m_GraphAnalyzer;
-
- public LoopRemover(GraphAnalyzer ga)
- {
- m_GraphAnalyzer = ga;
- }
-
- private void m_RemoveBackEdge(Loop l)
- {
- // first remove the backedges of the nested loops
- foreach (Loop c in l.NestedLoops) m_RemoveBackEdge(c);
- //Debugger.Break();
- GraphNode loopSkip = null;
- foreach (GraphNode gn in l.Cutpoint.Suc)
- {
- if (l.LoopExitNodes.Contains(gn))
- {
- loopSkip = gn; break;
- }
- }
- if (loopSkip == null)
- { // We didn't find a loop exit node. There must be a bug
- Debugger.Break();
- }
- foreach (GraphNode gn in l.Cutpoint.LoopingPred)
- {
- List<GraphNode> newsuc = new List<GraphNode>();
- foreach (GraphNode s in gn.Suc)
- {
- if (s == l.Cutpoint) newsuc.Add(loopSkip);
- else newsuc.Add(s);
- }
- gn.Suc = newsuc;
- }
- }
-
- private void m_AbstractLoop(Loop l)
- {
- foreach (Loop c in l.NestedLoops) m_AbstractLoop(c);
- m_HavocLoopBody(l);
- m_RemoveBackEdge(l);
- }
-
- public void AbstractLoopUnrolling()
- {
- foreach (Loop l in m_GraphAnalyzer.Graphloops)
- {
- m_MarkLoopExitUncheckable(l);
- m_AbstractLoopUnrolling(l,null, "",true);
- }
- }
-
- private void m_HavocLoopBody(Loop l)
- {
- List<Block> loopblocks = new List<Block>();
- foreach (GraphNode g in l.LoopNodes) loopblocks.Add(g.Label);
- HavocCmd hcmd = m_ComputHavocCmd(loopblocks, l.Cutpoint.Label.tok);
-
- //Add Havoc before and after the loop body
- foreach (GraphNode g in l.Cutpoint.Suc) // before
- {
- if (l.LoopNodes.Contains(g)) m_AddHavocCmdToFront(g.Label, hcmd);
- }
- foreach (GraphNode g in l.Cutpoint.Pre) // and after
- {
- if (l.LoopNodes.Contains(g)) m_AddHavocCmdToFront(g.Label, hcmd);
- }
- }
-
- private void m_AddHavocCmdToFront(Block b, HavocCmd hcmd)
- {
- List<Cmd> cs = new List<Cmd>();
- cs.Add(hcmd); cs.AddRange(b.Cmds);
- b.Cmds = cs;
- }
-
- private HavocCmd m_ComputHavocCmd(List<Block> bl, IToken tok)
- {
- Contract.Requires(bl != null);
- Contract.Requires(tok != null);
- Contract.Ensures(Contract.Result<HavocCmd>() != null);
-
- List<Variable> varsToHavoc = new List<Variable>();
- foreach (Block b in bl)
- {
- Contract.Assert(b != null);
- foreach (Cmd c in b.Cmds)
- {
- Contract.Assert(c != null);
- c.AddAssignedVariables(varsToHavoc);
- }
- }
- List<IdentifierExpr> havocExprs = new List<IdentifierExpr>();
- foreach (Variable v in varsToHavoc)
- {
- Contract.Assert(v != null);
- IdentifierExpr ie = new IdentifierExpr(Token.NoToken, v);
- if (!havocExprs.Contains(ie))
- havocExprs.Add(ie);
- }
- // pass the token of the enclosing loop header to the HavocCmd so we can reconstruct
- // the source location for this later on
- return new HavocCmd(tok, havocExprs);
- }
-
- private void m_AbstractLoopUnrolling(Loop l, Loop parent, string prefix, bool unfold)
- {
- //Debugger.Break();
- if (unfold)
- {
-
- Loop first = new Loop(l, m_GraphAnalyzer,prefix+"FI_");
- Loop last = new Loop(l, m_GraphAnalyzer,prefix+"LA_");
- Loop abs = new Loop(l, m_GraphAnalyzer, prefix + "AB_");
- foreach (Loop c in first.NestedLoops) m_AbstractLoopUnrolling(c, first, prefix + "FI_", false);
- foreach (Loop c in last.NestedLoops) m_AbstractLoopUnrolling(c, last, prefix + "LA_", false);
- foreach (Loop c in abs.NestedLoops) m_AbstractLoopUnrolling(c, abs, prefix + "AB_", true);
-
- //Debugger.Break();
-
- if (parent != null)
- {
- foreach (GraphNode gn in l.LoopNodes)
- {
- if (parent.LoopNodes.Contains(gn)) parent.LoopNodes.Remove(gn);
- }
- foreach (GraphNode gn in abs.LoopNodes)
- {
- if (!parent.LoopNodes.Contains(gn)) parent.LoopNodes.Add(gn);
- }
- foreach (GraphNode gn in first.LoopNodes)
- {
- if (!parent.LoopNodes.Contains(gn)) parent.LoopNodes.Add(gn);
- }
- foreach (GraphNode gn in last.LoopNodes)
- {
- if (!parent.LoopNodes.Contains(gn)) parent.LoopNodes.Add(gn);
- }
- }
-
- m_HavocLoopBody(abs);
- List<GraphNode> backupPre = new List<GraphNode>();
- backupPre.AddRange(l.Cutpoint.Pre);
- foreach (GraphNode pre in backupPre)
- {
- if (!l.Cutpoint.LoopingPred.Contains(pre))
- {
- pre.RemoveEdgeTo(l.Cutpoint);
- pre.RemoveEdgeTo(abs.Cutpoint);
- pre.AddEdgeTo(first.Cutpoint);
- }
- }
-
- m_RemoveRegularLoopExit(last);
- m_RemoveRegularLoopExit(abs);
-
- m_ReplaceBackEdge(first, abs.Cutpoint);
- m_ReplaceBackEdge(abs, last.Cutpoint);
- foreach (GraphNode gn in first.Cutpoint.Suc)
- {
- if (!first.LoopNodes.Contains(gn))
- {
- m_ReplaceBackEdge(last, gn);
- break;
- }
- }
-
- // Remove all remaining connections to the original loop
- foreach (GraphNode gn in l.LoopExitNodes)
- {
- List<GraphNode> tmp = new List<GraphNode>();
- tmp.AddRange(gn.Pre);
- foreach (GraphNode g in tmp)
- {
- if (l.LoopNodes.Contains(g))
- {
- //Debugger.Break();
- g.RemoveEdgeTo(gn);
- }
- }
- }
- foreach (GraphNode gn in l.LoopNodes)
- {
- m_GraphAnalyzer.DeleteGraphNode(gn);
- }
- foreach (GraphNode gn in first.LoopNodes)
- {
- if (gn != first.Cutpoint && !m_GraphAnalyzer.UncheckableNodes.Contains(gn) )
- m_GraphAnalyzer.UncheckableNodes.Add(gn);
- }
- foreach (GraphNode gn in last.LoopNodes)
- {
- if (gn != last.Cutpoint && !m_GraphAnalyzer.UncheckableNodes.Contains(gn))
- m_GraphAnalyzer.UncheckableNodes.Add(gn);
- }
- MakeLoopExitUncheckable(last.LoopExitNodes);
- }
- else
- {
- foreach (Loop c in l.NestedLoops) m_AbstractLoopUnrolling(c, l, prefix, false);
- m_AbstractLoop(l);
- //MakeLoopExitUncheckable(l.LoopExitNodes);
- }
- }
-
- // the loop exit has to be marked uncheckable because otherwise
- // while(true) would report unreachable code.
- private void m_MarkLoopExitUncheckable(Loop l)
- {
-
- foreach (GraphNode g in l.Cutpoint.Suc)
- {
- if (!l.LoopNodes.Contains(g))
- {
- foreach (GraphNode g_ in m_MarkLoopExitUncheckable(g, l))
- {
- if (!m_GraphAnalyzer.UncheckableNodes.Contains(g_))
- m_GraphAnalyzer.UncheckableNodes.Add(g_);
- }
- }
- }
- }
-
- private List<GraphNode> m_MarkLoopExitUncheckable(GraphNode g, Loop l)
- {
- List<GraphNode> ret = new List<GraphNode>();
-
- if (g.Pre.Count > 1) return ret;
- ret.Add(g);
- foreach (GraphNode gn in g.Suc)
- {
- ret.AddRange(m_MarkLoopExitUncheckable(gn, l));
- }
-
- return ret;
- }
-
- // to avoid problems with unreachable code after while(true) {}, try to make the loopexit nodes uncheckable.
- private void MakeLoopExitUncheckable(List<GraphNode> le)
- {
- foreach (GraphNode gn in le)
- {
- if (gn.Suc.Count==1) m_GraphAnalyzer.UncheckableNodes.Add(gn);
- }
- }
-
- private void m_RemoveRegularLoopExit(Loop l)
- {
- List<GraphNode> lg = new List<GraphNode>();
- lg.AddRange( l.Cutpoint.Suc );
- foreach (GraphNode gn in lg)
- {
- if (l.LoopExitNodes.Contains(gn))
- {
- l.Cutpoint.RemoveEdgeTo(gn);
- l.LoopExitNodes.Remove(gn);
- }
- }
- }
-
- private void m_ReplaceBackEdge(Loop l, GraphNode loopSkip)
- {
-
- foreach (GraphNode gn in l.Cutpoint.LoopingPred)
- {
- List<GraphNode> newsuc = new List<GraphNode>();
- foreach (GraphNode s in gn.Suc)
- {
- if (s == l.Cutpoint) newsuc.Add(loopSkip);
- else newsuc.Add(s);
- }
- gn.Suc = newsuc;
- }
- }
-
-
- }
- #endregion
-
- #region Graph Analyzer
- internal class GraphAnalyzer
- {
- public List<GraphNode> UncheckableNodes = new List<GraphNode>();
-
- public Dictionary<Block, GraphNode> GraphMap = new Dictionary<Block, GraphNode>();
-
- public List<Loop> Graphloops = null;
-
- public GraphAnalyzer(List<Block> blocks)
- {
- //ExitBlock = dedicatedExitBlock;
- if (blocks.Count < 1) return;
- foreach (Block b in blocks) GraphMap[b] = new GraphNode(b);
- foreach (Block b in blocks)
- {
- foreach (Block pre in b.Predecessors) GraphMap[b].Pre.Add(GraphMap[pre]);
- GotoCmd gc = b.TransferCmd as GotoCmd;
- if (gc != null)
- {
- foreach (Block suc in gc.labelTargets) GraphMap[b].Suc.Add(GraphMap[suc]);
- }
- }
-
-
- m_DetectCutPoints(GraphMap[blocks[0]]);
-
- //m_DetectCutPoints(GraphMap[blocks[0]], null, new List<GraphNode>());
- Graphloops = m_CollectLoops(GraphMap[blocks[0]], null);
-
- }
-
- public List<Block> ToImplementation(out List<Block> uncheckables)
- {
- List<Block> blocks = new List<Block>();
- uncheckables = new List<Block>();
-
- foreach (KeyValuePair<Block, GraphNode> kvp in GraphMap)
- {
- Block b = kvp.Key;
- if (UncheckableNodes.Contains(GraphMap[b])) uncheckables.Add(b);
- blocks.Add(b);
- b.Predecessors = new List<Block>();
- foreach (GraphNode p in kvp.Value.Pre) b.Predecessors.Add(p.Label);
- if (kvp.Value.Suc.Count > 0)
- {
- List<Block> bs = new List<Block>();
- foreach (GraphNode s in kvp.Value.Suc) bs.Add(s.Label);
- b.TransferCmd = new GotoCmd(b.tok, bs);
- }
- else
- {
- b.TransferCmd = new ReturnCmd(b.tok);
- }
- }
-
- return blocks;
- }
-
- public GraphNode CloneGraphNode(GraphNode gn, string prefix)
- {
- List<Cmd> cmds = new List<Cmd>(gn.Label.Cmds);
-
- Block b = new Block(gn.Label.tok, prefix+gn.Label.Label, cmds, gn.Label.TransferCmd);
- GraphNode clone = new GraphNode(b);
- clone.IsCutpoint = gn.IsCutpoint;
- clone.Suc.AddRange(gn.Suc);
- clone.Pre.AddRange(gn.Pre);
- clone.LoopingPred.AddRange(gn.LoopingPred);
- GraphMap[b] = clone;
- //if (gn.Label == ExitBlock) ExitBlock = b;
- return clone;
- }
-
- public void DeleteGraphNode(GraphNode gn)
- {
- List<Block> affected = new List<Block>();
-
- foreach (KeyValuePair<Block, GraphNode> kvp in GraphMap)
- {
- if (kvp.Value == gn && !affected.Contains(kvp.Key)) affected.Add(kvp.Key);
- }
- foreach (Block b in affected)
- {
- GraphMap.Remove(b);
- }
- }
-/*
- private void m_DetectCutPoints(GraphNode gn, GraphNode pred, List<GraphNode> visited )
- {
- if (visited.Contains(gn) )
- {
- if (pred != null && !gn.LoopingPred.Contains(pred)) gn.LoopingPred.Add(pred);
- gn.IsCutpoint = true;
- Console.WriteLine("Normal RootNode {0}", gn.Label.Label);
- return;
- }
- else
- {
- List<GraphNode> visited_ = new List<GraphNode>();
- visited_.AddRange(visited);
- visited_.Add(gn);
- foreach (GraphNode next in gn.Suc)
- {
- m_DetectCutPoints(next,gn,visited_);
- }
- }
-
- }
-*/
-
-
- private void m_DetectCutPoints(GraphNode gn)
- {
- List<GraphNode> todo = new List<GraphNode>();
- List<GraphNode> done = new List<GraphNode>();
- todo.Add(gn);
-
- GraphNode current = null;
- todo[0].Index = 0;
-
- while (todo.Count > 0)
- {
- current = todo[0];
- todo.Remove(current);
-
- bool ready = true;
- foreach (GraphNode p in current.Pre)
- {
- if (!done.Contains(p) )
- {
- _loopbacktracking.Clear();
- if (!m_isLoop(current, p, todo, done))
- {
- todo.Add(current);
- ready = false;
- break;
- }
- else
- {
- if (!current.LoopingPred.Contains(p)) current.LoopingPred.Add(p);
- current.IsCutpoint = true;
- }
- }
- }
- if (!ready) continue;
- done.Add(current);
- foreach (GraphNode s in current.Suc)
- {
- if (!todo.Contains(s) && !done.Contains(s)) todo.Add(s);
- }
- }
-
- }
-
- List<GraphNode> _loopbacktracking = new List<GraphNode>();
- private bool m_isLoop(GraphNode loophead, GraphNode gn, List<GraphNode> l1, List<GraphNode> l2)
- {
- if (loophead == gn) return true;
- if (l1.Contains(gn) || l2.Contains(gn) || _loopbacktracking.Contains(gn)) return false;
- _loopbacktracking.Add(gn);
- foreach (GraphNode p in gn.Pre)
- {
- if (m_isLoop(loophead, p, l1, l2)) return true;
- }
- return false;
- }
-
- private List<Loop> m_CollectLoops(GraphNode gn, Loop lastLoop)
- {
- List<Loop> ret = new List<Loop>();
- if (gn.Visited) return ret;
- gn.Visited = true;
- List<GraphNode> loopingSucs = new List<GraphNode>();
- if (gn.IsCutpoint)
- {
- Loop l = new Loop(gn);
- if (lastLoop != null)
- {
- lastLoop.SucLoops.Add(l);
- l.PreLoops.Add(lastLoop);
- }
- loopingSucs = l.LoopNodes;
- lastLoop = l;
- ret.Add(lastLoop);
- }
- foreach (GraphNode suc in gn.Suc)
- {
- if (!loopingSucs.Contains(suc)) ret.AddRange(m_CollectLoops(suc, lastLoop));
- }
- //Debugger.Break();
- return ret;
- }
- }
- #endregion
-
- #region GraphNodeStructure
- internal class GraphNode
- {
- public int Index = -1; // Used for scc detection
- public int LowLink = -1; // Used for scc detection
-
- public GraphNode(Block b)
- {
- Label = b; IsCutpoint = false;
- }
- public Block Label;
- public List<GraphNode> Pre = new List<GraphNode>();
- public List<GraphNode> Suc = new List<GraphNode>();
- public bool IsCutpoint;
- public bool Visited = false;
- public List<GraphNode> LoopingPred = new List<GraphNode>();
-
- public void AddEdgeTo(GraphNode other)
- {
- if (!this.Suc.Contains(other)) this.Suc.Add(other);
- if (!other.Pre.Contains(this)) other.Pre.Add(this);
- }
-
- public void RemoveEdgeTo(GraphNode other)
- {
- if (this.Suc.Contains(other)) this.Suc.Remove(other);
- if (other.Pre.Contains(this)) other.Pre.Remove(this);
- }
-
- }
- #endregion
-
- #region LoopStructure
- internal class Loop
- {
- public Loop(GraphNode cutpoint)
- {
- if (!cutpoint.IsCutpoint)
- {
- Debugger.Break();
- }
- Cutpoint = cutpoint;
- LoopNodes.Add(Cutpoint);
- foreach (GraphNode gn in Cutpoint.LoopingPred)
- {
- CollectLoopBody(gn);
- }
- CollectLoopExitNodes();
- }
-
- // Copy Constructor
- public Loop(Loop l, GraphAnalyzer ga, string prefix)
- {
-
- Dictionary<GraphNode, GraphNode> clonemap = new Dictionary<GraphNode, GraphNode>();
- GraphNode clonecutpoint = null;
- foreach (GraphNode gn in l.LoopNodes)
- {
- clonemap[gn] = ga.CloneGraphNode(gn, prefix);
- if (gn == l.Cutpoint) clonecutpoint = clonemap[gn];
- }
-
- if (clonecutpoint == null)
- {
- Debugger.Break();
- return;
- }
- // Replace the pre and post nodes by the corresponding clone
- foreach (GraphNode gn in l.LoopNodes)
- {
- List<GraphNode> newl = new List<GraphNode>();
- foreach (GraphNode g in clonemap[gn].Pre)
- {
- if (clonemap.ContainsKey(g)) newl.Add(clonemap[g]);
- else newl.Add(g);
- }
- clonemap[gn].Pre = newl;
- newl = new List<GraphNode>();
- foreach (GraphNode g in clonemap[gn].Suc)
- {
- if (clonemap.ContainsKey(g)) newl.Add(clonemap[g]);
- else newl.Add(g);
- }
- clonemap[gn].Suc = newl;
- newl = new List<GraphNode>();
- foreach (GraphNode g in clonemap[gn].LoopingPred)
- {
- if (clonemap.ContainsKey(g)) newl.Add(clonemap[g]);
- else newl.Add(g);
- }
- clonemap[gn].LoopingPred = newl;
- }
-
- foreach (GraphNode gn in l.Cutpoint.LoopingPred)
- {
- clonecutpoint.LoopingPred.Remove(gn);
- clonecutpoint.LoopingPred.Add(clonemap[gn]);
- }
-
-
-
- SucLoops.AddRange(l.SucLoops);
- PreLoops.AddRange(l.PreLoops);
- Cutpoint = clonecutpoint;
- LoopNodes.Add(Cutpoint);
- foreach (GraphNode gn in Cutpoint.LoopingPred)
- {
- CollectLoopBody(gn);
- }
- CollectLoopExitNodes();
- }
-
- private void CollectLoopBody(GraphNode gn)
- {
- if (gn == Cutpoint) return;
- if (!LoopNodes.Contains(gn))
- {
- if (gn.IsCutpoint) // nested loop found
- {
- Loop lo = new Loop(gn);
- foreach (GraphNode lgn in lo.LoopNodes)
- {
- if (!LoopNodes.Contains(lgn)) LoopNodes.Add(lgn);
- }
- NestedLoops.Add(lo);
- }
- else
- {
- LoopNodes.Add(gn);
- }
- foreach (GraphNode pre in gn.Pre) if (!gn.LoopingPred.Contains(pre)) CollectLoopBody(pre);
- }
- }
-
- private void CollectLoopExitNodes()
- {
- foreach (GraphNode gn in LoopNodes)
- {
- foreach (GraphNode gn_ in gn.Suc)
- {
- if (!LoopNodes.Contains(gn_) && !LoopExitNodes.Contains(gn_)) LoopExitNodes.Add(gn_);
- }
- }
- }
-
- public GraphNode Cutpoint;
- public List<GraphNode> LoopExitNodes = new List<GraphNode>();
- public List<Loop> NestedLoops = new List<Loop>();
- public List<Loop> SucLoops = new List<Loop>();
- public List<Loop> PreLoops = new List<Loop>();
- public List<GraphNode> LoopNodes = new List<GraphNode>();
- }
- #endregion
-
- #endregion
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC
+{
+ #region Loop handeling for doomed code detection
+
+ #region Loop Remover
+ internal class LoopRemover
+ {
+ GraphAnalyzer m_GraphAnalyzer;
+
+ public LoopRemover(GraphAnalyzer ga)
+ {
+ m_GraphAnalyzer = ga;
+ }
+
+ private void m_RemoveBackEdge(Loop l)
+ {
+ // first remove the backedges of the nested loops
+ foreach (Loop c in l.NestedLoops) m_RemoveBackEdge(c);
+ //Debugger.Break();
+ GraphNode loopSkip = null;
+ foreach (GraphNode gn in l.Cutpoint.Suc)
+ {
+ if (l.LoopExitNodes.Contains(gn))
+ {
+ loopSkip = gn; break;
+ }
+ }
+ if (loopSkip == null)
+ { // We didn't find a loop exit node. There must be a bug
+ Debugger.Break();
+ }
+ foreach (GraphNode gn in l.Cutpoint.LoopingPred)
+ {
+ List<GraphNode> newsuc = new List<GraphNode>();
+ foreach (GraphNode s in gn.Suc)
+ {
+ if (s == l.Cutpoint) newsuc.Add(loopSkip);
+ else newsuc.Add(s);
+ }
+ gn.Suc = newsuc;
+ }
+ }
+
+ private void m_AbstractLoop(Loop l)
+ {
+ foreach (Loop c in l.NestedLoops) m_AbstractLoop(c);
+ m_HavocLoopBody(l);
+ m_RemoveBackEdge(l);
+ }
+
+ public void AbstractLoopUnrolling()
+ {
+ foreach (Loop l in m_GraphAnalyzer.Graphloops)
+ {
+ m_MarkLoopExitUncheckable(l);
+ m_AbstractLoopUnrolling(l,null, "",true);
+ }
+ }
+
+ private void m_HavocLoopBody(Loop l)
+ {
+ List<Block> loopblocks = new List<Block>();
+ foreach (GraphNode g in l.LoopNodes) loopblocks.Add(g.Label);
+ HavocCmd hcmd = m_ComputHavocCmd(loopblocks, l.Cutpoint.Label.tok);
+
+ //Add Havoc before and after the loop body
+ foreach (GraphNode g in l.Cutpoint.Suc) // before
+ {
+ if (l.LoopNodes.Contains(g)) m_AddHavocCmdToFront(g.Label, hcmd);
+ }
+ foreach (GraphNode g in l.Cutpoint.Pre) // and after
+ {
+ if (l.LoopNodes.Contains(g)) m_AddHavocCmdToFront(g.Label, hcmd);
+ }
+ }
+
+ private void m_AddHavocCmdToFront(Block b, HavocCmd hcmd)
+ {
+ List<Cmd> cs = new List<Cmd>();
+ cs.Add(hcmd); cs.AddRange(b.Cmds);
+ b.Cmds = cs;
+ }
+
+ private HavocCmd m_ComputHavocCmd(List<Block> bl, IToken tok)
+ {
+ Contract.Requires(bl != null);
+ Contract.Requires(tok != null);
+ Contract.Ensures(Contract.Result<HavocCmd>() != null);
+
+ List<Variable> varsToHavoc = new List<Variable>();
+ foreach (Block b in bl)
+ {
+ Contract.Assert(b != null);
+ foreach (Cmd c in b.Cmds)
+ {
+ Contract.Assert(c != null);
+ c.AddAssignedVariables(varsToHavoc);
+ }
+ }
+ List<IdentifierExpr> havocExprs = new List<IdentifierExpr>();
+ foreach (Variable v in varsToHavoc)
+ {
+ Contract.Assert(v != null);
+ IdentifierExpr ie = new IdentifierExpr(Token.NoToken, v);
+ if (!havocExprs.Contains(ie))
+ havocExprs.Add(ie);
+ }
+ // pass the token of the enclosing loop header to the HavocCmd so we can reconstruct
+ // the source location for this later on
+ return new HavocCmd(tok, havocExprs);
+ }
+
+ private void m_AbstractLoopUnrolling(Loop l, Loop parent, string prefix, bool unfold)
+ {
+ //Debugger.Break();
+ if (unfold)
+ {
+
+ Loop first = new Loop(l, m_GraphAnalyzer,prefix+"FI_");
+ Loop last = new Loop(l, m_GraphAnalyzer,prefix+"LA_");
+ Loop abs = new Loop(l, m_GraphAnalyzer, prefix + "AB_");
+ foreach (Loop c in first.NestedLoops) m_AbstractLoopUnrolling(c, first, prefix + "FI_", false);
+ foreach (Loop c in last.NestedLoops) m_AbstractLoopUnrolling(c, last, prefix + "LA_", false);
+ foreach (Loop c in abs.NestedLoops) m_AbstractLoopUnrolling(c, abs, prefix + "AB_", true);
+
+ //Debugger.Break();
+
+ if (parent != null)
+ {
+ foreach (GraphNode gn in l.LoopNodes)
+ {
+ if (parent.LoopNodes.Contains(gn)) parent.LoopNodes.Remove(gn);
+ }
+ foreach (GraphNode gn in abs.LoopNodes)
+ {
+ if (!parent.LoopNodes.Contains(gn)) parent.LoopNodes.Add(gn);
+ }
+ foreach (GraphNode gn in first.LoopNodes)
+ {
+ if (!parent.LoopNodes.Contains(gn)) parent.LoopNodes.Add(gn);
+ }
+ foreach (GraphNode gn in last.LoopNodes)
+ {
+ if (!parent.LoopNodes.Contains(gn)) parent.LoopNodes.Add(gn);
+ }
+ }
+
+ m_HavocLoopBody(abs);
+ List<GraphNode> backupPre = new List<GraphNode>();
+ backupPre.AddRange(l.Cutpoint.Pre);
+ foreach (GraphNode pre in backupPre)
+ {
+ if (!l.Cutpoint.LoopingPred.Contains(pre))
+ {
+ pre.RemoveEdgeTo(l.Cutpoint);
+ pre.RemoveEdgeTo(abs.Cutpoint);
+ pre.AddEdgeTo(first.Cutpoint);
+ }
+ }
+
+ m_RemoveRegularLoopExit(last);
+ m_RemoveRegularLoopExit(abs);
+
+ m_ReplaceBackEdge(first, abs.Cutpoint);
+ m_ReplaceBackEdge(abs, last.Cutpoint);
+ foreach (GraphNode gn in first.Cutpoint.Suc)
+ {
+ if (!first.LoopNodes.Contains(gn))
+ {
+ m_ReplaceBackEdge(last, gn);
+ break;
+ }
+ }
+
+ // Remove all remaining connections to the original loop
+ foreach (GraphNode gn in l.LoopExitNodes)
+ {
+ List<GraphNode> tmp = new List<GraphNode>();
+ tmp.AddRange(gn.Pre);
+ foreach (GraphNode g in tmp)
+ {
+ if (l.LoopNodes.Contains(g))
+ {
+ //Debugger.Break();
+ g.RemoveEdgeTo(gn);
+ }
+ }
+ }
+ foreach (GraphNode gn in l.LoopNodes)
+ {
+ m_GraphAnalyzer.DeleteGraphNode(gn);
+ }
+ foreach (GraphNode gn in first.LoopNodes)
+ {
+ if (gn != first.Cutpoint && !m_GraphAnalyzer.UncheckableNodes.Contains(gn) )
+ m_GraphAnalyzer.UncheckableNodes.Add(gn);
+ }
+ foreach (GraphNode gn in last.LoopNodes)
+ {
+ if (gn != last.Cutpoint && !m_GraphAnalyzer.UncheckableNodes.Contains(gn))
+ m_GraphAnalyzer.UncheckableNodes.Add(gn);
+ }
+ MakeLoopExitUncheckable(last.LoopExitNodes);
+ }
+ else
+ {
+ foreach (Loop c in l.NestedLoops) m_AbstractLoopUnrolling(c, l, prefix, false);
+ m_AbstractLoop(l);
+ //MakeLoopExitUncheckable(l.LoopExitNodes);
+ }
+ }
+
+ // the loop exit has to be marked uncheckable because otherwise
+ // while(true) would report unreachable code.
+ private void m_MarkLoopExitUncheckable(Loop l)
+ {
+
+ foreach (GraphNode g in l.Cutpoint.Suc)
+ {
+ if (!l.LoopNodes.Contains(g))
+ {
+ foreach (GraphNode g_ in m_MarkLoopExitUncheckable(g, l))
+ {
+ if (!m_GraphAnalyzer.UncheckableNodes.Contains(g_))
+ m_GraphAnalyzer.UncheckableNodes.Add(g_);
+ }
+ }
+ }
+ }
+
+ private List<GraphNode> m_MarkLoopExitUncheckable(GraphNode g, Loop l)
+ {
+ List<GraphNode> ret = new List<GraphNode>();
+
+ if (g.Pre.Count > 1) return ret;
+ ret.Add(g);
+ foreach (GraphNode gn in g.Suc)
+ {
+ ret.AddRange(m_MarkLoopExitUncheckable(gn, l));
+ }
+
+ return ret;
+ }
+
+ // to avoid problems with unreachable code after while(true) {}, try to make the loopexit nodes uncheckable.
+ private void MakeLoopExitUncheckable(List<GraphNode> le)
+ {
+ foreach (GraphNode gn in le)
+ {
+ if (gn.Suc.Count==1) m_GraphAnalyzer.UncheckableNodes.Add(gn);
+ }
+ }
+
+ private void m_RemoveRegularLoopExit(Loop l)
+ {
+ List<GraphNode> lg = new List<GraphNode>();
+ lg.AddRange( l.Cutpoint.Suc );
+ foreach (GraphNode gn in lg)
+ {
+ if (l.LoopExitNodes.Contains(gn))
+ {
+ l.Cutpoint.RemoveEdgeTo(gn);
+ l.LoopExitNodes.Remove(gn);
+ }
+ }
+ }
+
+ private void m_ReplaceBackEdge(Loop l, GraphNode loopSkip)
+ {
+
+ foreach (GraphNode gn in l.Cutpoint.LoopingPred)
+ {
+ List<GraphNode> newsuc = new List<GraphNode>();
+ foreach (GraphNode s in gn.Suc)
+ {
+ if (s == l.Cutpoint) newsuc.Add(loopSkip);
+ else newsuc.Add(s);
+ }
+ gn.Suc = newsuc;
+ }
+ }
+
+
+ }
+ #endregion
+
+ #region Graph Analyzer
+ internal class GraphAnalyzer
+ {
+ public List<GraphNode> UncheckableNodes = new List<GraphNode>();
+
+ public Dictionary<Block, GraphNode> GraphMap = new Dictionary<Block, GraphNode>();
+
+ public List<Loop> Graphloops = null;
+
+ public GraphAnalyzer(List<Block> blocks)
+ {
+ //ExitBlock = dedicatedExitBlock;
+ if (blocks.Count < 1) return;
+ foreach (Block b in blocks) GraphMap[b] = new GraphNode(b);
+ foreach (Block b in blocks)
+ {
+ foreach (Block pre in b.Predecessors) GraphMap[b].Pre.Add(GraphMap[pre]);
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ if (gc != null)
+ {
+ foreach (Block suc in gc.labelTargets) GraphMap[b].Suc.Add(GraphMap[suc]);
+ }
+ }
+
+
+ m_DetectCutPoints(GraphMap[blocks[0]]);
+
+ //m_DetectCutPoints(GraphMap[blocks[0]], null, new List<GraphNode>());
+ Graphloops = m_CollectLoops(GraphMap[blocks[0]], null);
+
+ }
+
+ public List<Block> ToImplementation(out List<Block> uncheckables)
+ {
+ List<Block> blocks = new List<Block>();
+ uncheckables = new List<Block>();
+
+ foreach (KeyValuePair<Block, GraphNode> kvp in GraphMap)
+ {
+ Block b = kvp.Key;
+ if (UncheckableNodes.Contains(GraphMap[b])) uncheckables.Add(b);
+ blocks.Add(b);
+ b.Predecessors = new List<Block>();
+ foreach (GraphNode p in kvp.Value.Pre) b.Predecessors.Add(p.Label);
+ if (kvp.Value.Suc.Count > 0)
+ {
+ List<Block> bs = new List<Block>();
+ foreach (GraphNode s in kvp.Value.Suc) bs.Add(s.Label);
+ b.TransferCmd = new GotoCmd(b.tok, bs);
+ }
+ else
+ {
+ b.TransferCmd = new ReturnCmd(b.tok);
+ }
+ }
+
+ return blocks;
+ }
+
+ public GraphNode CloneGraphNode(GraphNode gn, string prefix)
+ {
+ List<Cmd> cmds = new List<Cmd>(gn.Label.Cmds);
+
+ Block b = new Block(gn.Label.tok, prefix+gn.Label.Label, cmds, gn.Label.TransferCmd);
+ GraphNode clone = new GraphNode(b);
+ clone.IsCutpoint = gn.IsCutpoint;
+ clone.Suc.AddRange(gn.Suc);
+ clone.Pre.AddRange(gn.Pre);
+ clone.LoopingPred.AddRange(gn.LoopingPred);
+ GraphMap[b] = clone;
+ //if (gn.Label == ExitBlock) ExitBlock = b;
+ return clone;
+ }
+
+ public void DeleteGraphNode(GraphNode gn)
+ {
+ List<Block> affected = new List<Block>();
+
+ foreach (KeyValuePair<Block, GraphNode> kvp in GraphMap)
+ {
+ if (kvp.Value == gn && !affected.Contains(kvp.Key)) affected.Add(kvp.Key);
+ }
+ foreach (Block b in affected)
+ {
+ GraphMap.Remove(b);
+ }
+ }
+/*
+ private void m_DetectCutPoints(GraphNode gn, GraphNode pred, List<GraphNode> visited )
+ {
+ if (visited.Contains(gn) )
+ {
+ if (pred != null && !gn.LoopingPred.Contains(pred)) gn.LoopingPred.Add(pred);
+ gn.IsCutpoint = true;
+ Console.WriteLine("Normal RootNode {0}", gn.Label.Label);
+ return;
+ }
+ else
+ {
+ List<GraphNode> visited_ = new List<GraphNode>();
+ visited_.AddRange(visited);
+ visited_.Add(gn);
+ foreach (GraphNode next in gn.Suc)
+ {
+ m_DetectCutPoints(next,gn,visited_);
+ }
+ }
+
+ }
+*/
+
+
+ private void m_DetectCutPoints(GraphNode gn)
+ {
+ List<GraphNode> todo = new List<GraphNode>();
+ List<GraphNode> done = new List<GraphNode>();
+ todo.Add(gn);
+
+ GraphNode current = null;
+ todo[0].Index = 0;
+
+ while (todo.Count > 0)
+ {
+ current = todo[0];
+ todo.Remove(current);
+
+ bool ready = true;
+ foreach (GraphNode p in current.Pre)
+ {
+ if (!done.Contains(p) )
+ {
+ _loopbacktracking.Clear();
+ if (!m_isLoop(current, p, todo, done))
+ {
+ todo.Add(current);
+ ready = false;
+ break;
+ }
+ else
+ {
+ if (!current.LoopingPred.Contains(p)) current.LoopingPred.Add(p);
+ current.IsCutpoint = true;
+ }
+ }
+ }
+ if (!ready) continue;
+ done.Add(current);
+ foreach (GraphNode s in current.Suc)
+ {
+ if (!todo.Contains(s) && !done.Contains(s)) todo.Add(s);
+ }
+ }
+
+ }
+
+ List<GraphNode> _loopbacktracking = new List<GraphNode>();
+ private bool m_isLoop(GraphNode loophead, GraphNode gn, List<GraphNode> l1, List<GraphNode> l2)
+ {
+ if (loophead == gn) return true;
+ if (l1.Contains(gn) || l2.Contains(gn) || _loopbacktracking.Contains(gn)) return false;
+ _loopbacktracking.Add(gn);
+ foreach (GraphNode p in gn.Pre)
+ {
+ if (m_isLoop(loophead, p, l1, l2)) return true;
+ }
+ return false;
+ }
+
+ private List<Loop> m_CollectLoops(GraphNode gn, Loop lastLoop)
+ {
+ List<Loop> ret = new List<Loop>();
+ if (gn.Visited) return ret;
+ gn.Visited = true;
+ List<GraphNode> loopingSucs = new List<GraphNode>();
+ if (gn.IsCutpoint)
+ {
+ Loop l = new Loop(gn);
+ if (lastLoop != null)
+ {
+ lastLoop.SucLoops.Add(l);
+ l.PreLoops.Add(lastLoop);
+ }
+ loopingSucs = l.LoopNodes;
+ lastLoop = l;
+ ret.Add(lastLoop);
+ }
+ foreach (GraphNode suc in gn.Suc)
+ {
+ if (!loopingSucs.Contains(suc)) ret.AddRange(m_CollectLoops(suc, lastLoop));
+ }
+ //Debugger.Break();
+ return ret;
+ }
+ }
+ #endregion
+
+ #region GraphNodeStructure
+ internal class GraphNode
+ {
+ public int Index = -1; // Used for scc detection
+ public int LowLink = -1; // Used for scc detection
+
+ public GraphNode(Block b)
+ {
+ Label = b; IsCutpoint = false;
+ }
+ public Block Label;
+ public List<GraphNode> Pre = new List<GraphNode>();
+ public List<GraphNode> Suc = new List<GraphNode>();
+ public bool IsCutpoint;
+ public bool Visited = false;
+ public List<GraphNode> LoopingPred = new List<GraphNode>();
+
+ public void AddEdgeTo(GraphNode other)
+ {
+ if (!this.Suc.Contains(other)) this.Suc.Add(other);
+ if (!other.Pre.Contains(this)) other.Pre.Add(this);
+ }
+
+ public void RemoveEdgeTo(GraphNode other)
+ {
+ if (this.Suc.Contains(other)) this.Suc.Remove(other);
+ if (other.Pre.Contains(this)) other.Pre.Remove(this);
+ }
+
+ }
+ #endregion
+
+ #region LoopStructure
+ internal class Loop
+ {
+ public Loop(GraphNode cutpoint)
+ {
+ if (!cutpoint.IsCutpoint)
+ {
+ Debugger.Break();
+ }
+ Cutpoint = cutpoint;
+ LoopNodes.Add(Cutpoint);
+ foreach (GraphNode gn in Cutpoint.LoopingPred)
+ {
+ CollectLoopBody(gn);
+ }
+ CollectLoopExitNodes();
+ }
+
+ // Copy Constructor
+ public Loop(Loop l, GraphAnalyzer ga, string prefix)
+ {
+
+ Dictionary<GraphNode, GraphNode> clonemap = new Dictionary<GraphNode, GraphNode>();
+ GraphNode clonecutpoint = null;
+ foreach (GraphNode gn in l.LoopNodes)
+ {
+ clonemap[gn] = ga.CloneGraphNode(gn, prefix);
+ if (gn == l.Cutpoint) clonecutpoint = clonemap[gn];
+ }
+
+ if (clonecutpoint == null)
+ {
+ Debugger.Break();
+ return;
+ }
+ // Replace the pre and post nodes by the corresponding clone
+ foreach (GraphNode gn in l.LoopNodes)
+ {
+ List<GraphNode> newl = new List<GraphNode>();
+ foreach (GraphNode g in clonemap[gn].Pre)
+ {
+ if (clonemap.ContainsKey(g)) newl.Add(clonemap[g]);
+ else newl.Add(g);
+ }
+ clonemap[gn].Pre = newl;
+ newl = new List<GraphNode>();
+ foreach (GraphNode g in clonemap[gn].Suc)
+ {
+ if (clonemap.ContainsKey(g)) newl.Add(clonemap[g]);
+ else newl.Add(g);
+ }
+ clonemap[gn].Suc = newl;
+ newl = new List<GraphNode>();
+ foreach (GraphNode g in clonemap[gn].LoopingPred)
+ {
+ if (clonemap.ContainsKey(g)) newl.Add(clonemap[g]);
+ else newl.Add(g);
+ }
+ clonemap[gn].LoopingPred = newl;
+ }
+
+ foreach (GraphNode gn in l.Cutpoint.LoopingPred)
+ {
+ clonecutpoint.LoopingPred.Remove(gn);
+ clonecutpoint.LoopingPred.Add(clonemap[gn]);
+ }
+
+
+
+ SucLoops.AddRange(l.SucLoops);
+ PreLoops.AddRange(l.PreLoops);
+ Cutpoint = clonecutpoint;
+ LoopNodes.Add(Cutpoint);
+ foreach (GraphNode gn in Cutpoint.LoopingPred)
+ {
+ CollectLoopBody(gn);
+ }
+ CollectLoopExitNodes();
+ }
+
+ private void CollectLoopBody(GraphNode gn)
+ {
+ if (gn == Cutpoint) return;
+ if (!LoopNodes.Contains(gn))
+ {
+ if (gn.IsCutpoint) // nested loop found
+ {
+ Loop lo = new Loop(gn);
+ foreach (GraphNode lgn in lo.LoopNodes)
+ {
+ if (!LoopNodes.Contains(lgn)) LoopNodes.Add(lgn);
+ }
+ NestedLoops.Add(lo);
+ }
+ else
+ {
+ LoopNodes.Add(gn);
+ }
+ foreach (GraphNode pre in gn.Pre) if (!gn.LoopingPred.Contains(pre)) CollectLoopBody(pre);
+ }
+ }
+
+ private void CollectLoopExitNodes()
+ {
+ foreach (GraphNode gn in LoopNodes)
+ {
+ foreach (GraphNode gn_ in gn.Suc)
+ {
+ if (!LoopNodes.Contains(gn_) && !LoopExitNodes.Contains(gn_)) LoopExitNodes.Add(gn_);
+ }
+ }
+ }
+
+ public GraphNode Cutpoint;
+ public List<GraphNode> LoopExitNodes = new List<GraphNode>();
+ public List<Loop> NestedLoops = new List<Loop>();
+ public List<Loop> SucLoops = new List<Loop>();
+ public List<Loop> PreLoops = new List<Loop>();
+ public List<GraphNode> LoopNodes = new List<GraphNode>();
+ }
+ #endregion
+
+ #endregion
} \ No newline at end of file
diff --git a/Source/Doomed/DoomedStrategy.cs b/Source/Doomed/DoomedStrategy.cs
index 9e280873..76261827 100644
--- a/Source/Doomed/DoomedStrategy.cs
+++ b/Source/Doomed/DoomedStrategy.cs
@@ -1,528 +1,528 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC
-{
- #region SuperClass for different doomed code detection strategies
- abstract internal class DoomDetectionStrategy
- {
- public int __DEBUG_BlocksChecked = 0;
- public int __DEBUG_BlocksTotal = 0;
- public int __DEBUG_InfeasibleTraces = 0;
- public int __DEBUG_TracesChecked = 0;
- public int __DEBUG_TracesTotal = 0;
- public int __DEBUG_EQCTotal = 0;
- public int __DEBUG_EQCLeaf = 0;
- public int __DEBUG_EQCChecked = 0;
-
- //Please use this one to toggle your Debug output
- protected bool __DEBUGOUT = CommandLineOptions.Clo.DoomStrategy != -1;
-
- protected Implementation impl;
- protected BlockHierachy m_BlockH = null;
-
- protected int m_MaxBranchingDepth = 0;
- protected int m_MaxK = 0;
-
- protected Stopwatch sw = new Stopwatch();
-
-
- // This is the List with all detected doomed program points. This List is used by VCDoomed.cs to
- // create an error message
- public List<List<Block/*!*/>/*!*/>/*!*/ DetectedBlock = new List<List<Block/*!*/>/*!*/>();
-
- private List<Block> __DEBUG_minelements = new List<Block>();
-
- // There is no default constructor, because these parameters are needed for most subclasses
- public DoomDetectionStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
- {
- m_BlockH = new BlockHierachy(imp, unifiedexit);
- __DEBUG_EQCLeaf = m_BlockH.Leaves.Count;
-
- //foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
- //{
- // if (bhn.Content.Count > 0) __DEBUG_minelements.Add(bhn.Content[0]);
- //}
- //if (imp.Blocks.Count>0) m_GatherInfo(imp.Blocks[0], 0, 0,0);
-
-
- if (__DEBUGOUT)
- {
- Console.WriteLine("MaBranchingDepth {0} MaxMinPP {1} ", m_MaxBranchingDepth, m_MaxK);
-
- Console.WriteLine("AvgLeaverPerPath {0} AvgPLen {1}", 0, 0);
- }
-
- MaxBlocks = imp.Blocks.Count;
- MinBlocks = imp.Blocks.Count;
- HACK_NewCheck = false;
- __DEBUG_BlocksTotal = imp.Blocks.Count;
- }
-
- public int MaxBlocks, MinBlocks;
- public bool HACK_NewCheck;
-
- // This method is called by the prover while it returns true. The prover checks for each
- // List lb if
- // |= !lb_1 /\ ... /\ !lb_n => wlp(Program, false)
- // and passes the result to SetCurrentResult
- abstract public bool GetNextBlock(out List<Block> passBlock);
-
- // This method is called to inform about the prover outcome for the previous GetNextBlock call.
- abstract public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb);
-
- protected List<Block> m_GetErrorTraceFromCE(DoomErrorHandler cb)
- {
- BlockHierachyNode tn=null;
- List<Block> errortrace = new List<Block>();
- foreach (Block b in cb.TraceNodes)
- {
- if (errortrace.Contains(b)) continue;
- if (m_BlockH.BlockToHierachyMap.TryGetValue(b, out tn))
- {
- foreach (Block b_ in tn.Unavoidable)
- {
- if (!errortrace.Contains(b_)) errortrace.Add(b_);
- }
- foreach (Block b_ in tn.Content)
- {
- if (!errortrace.Contains(b_)) errortrace.Add(b_);
- }
- }
- }
- return errortrace;
- }
-
- private List<int> __pathLength = new List<int>();
- private List<int> __leavespp = new List<int>();
- protected void m_GatherInfo(Block b, int branchingdepth, int leavespp, int plen)
- {
- if (b.Predecessors.Count > 1) branchingdepth--;
-
- GotoCmd gc = b.TransferCmd as GotoCmd;
- if (__DEBUG_minelements.Contains(b)) leavespp++;
- plen++;
- if (gc != null && gc.labelTargets.Count>0)
- {
- if (gc.labelTargets.Count > 1) branchingdepth++;
- m_MaxBranchingDepth = (branchingdepth > m_MaxBranchingDepth) ? branchingdepth : m_MaxBranchingDepth;
- foreach (Block s in gc.labelTargets)
- {
- m_GatherInfo(s, branchingdepth, leavespp,plen);
- }
- }
- else
- {
- __pathLength.Add(plen);
- __leavespp.Add(leavespp);
- m_MaxK = (m_MaxK > leavespp) ? m_MaxK : leavespp;
- }
- }
-
-
-
- }
- #endregion
-
- #region BruteForce Strategy
- internal class NoStrategy : DoomDetectionStrategy
- {
- private List<Block> m_Blocks = new List<Block>();
- private int m_Current = 0;
-
- public NoStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
- : base(imp, unifiedexit, unreach)
- {
- m_Blocks = imp.Blocks;
- }
-
- override public bool GetNextBlock(out List<Block> lb)
- {
- if (m_Current < m_Blocks.Count)
- {
- lb = new List<Block>();
- lb.Add(m_Blocks[m_Current]);
- m_Current++;
- return true;
- }
- lb = null;
- return false;
- }
-
- // This method is called to inform about the prover outcome for the previous GetNextBlock call.
- override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
- {
- this.__DEBUG_BlocksChecked++;
- // outcome==Valid means that there is no feasible execution for the current block/path (i.e., might be doomed)
- if (outcome == ProverInterface.Outcome.Valid && m_Current <= m_Blocks.Count)
- {
- List<Block> lb = new List<Block>();
- lb.Add(m_Blocks[m_Current - 1]);
- DetectedBlock.Add(lb);
- }
- return true;
- }
- }
- #endregion
-
- #region Only check the minimal elements of the Hasse diagram
- internal class HierachyStrategy : DoomDetectionStrategy
- {
- private List<Block> m_Blocks = new List<Block>();
- private List<Block> m_doomedBlocks = new List<Block>();
- private int m_Current = 0;
-
- public HierachyStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
- : base(imp, unifiedexit, unreach)
- {
- foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
- {
- if (bhn.Content.Count > 0)
- {
- m_Blocks.Add(bhn.Content[0]);
- }
- }
- }
-
- override public bool GetNextBlock(out List<Block> lb)
- {
- sw.Start();
- if (m_Current < m_Blocks.Count)
- {
- lb = new List<Block>();
- lb.Add(m_Blocks[m_Current]);
- m_Current++;
- return true;
- }
- else
- {
- DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_doomedBlocks));
- }
- lb = null;
- return false;
- }
-
- // This method is called to inform about the prover outcome for the previous GetNextBlock call.
- override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
- {
- this.__DEBUG_BlocksChecked++;
- // outcome==Valid means that there is no feasible execution for the current block/path (i.e., might be doomed)
- if (outcome == ProverInterface.Outcome.Valid && m_Current <= m_Blocks.Count)
- {
- m_doomedBlocks.Add(m_Blocks[m_Current - 1]);
- }
- if (__DEBUGOUT) Console.WriteLine("K := {0,3} , out {1,8}, time {2,12}", MaxBlocks, outcome, sw.ElapsedTicks);
- sw.Stop();
- sw.Reset();
-
- return true;
- }
- }
- #endregion
-
- #region Only check the minimal elements of the Hasse diagram and use CEs
- internal class HierachyCEStrategy : DoomDetectionStrategy
- {
- private List<Block> m_Blocks = new List<Block>();
- private List<Block> m_doomedBlocks = new List<Block>();
- private Block m_Current = null;
-
- public HierachyCEStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
- : base(imp, unifiedexit, unreach)
- {
- foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
- {
- if (bhn.Content.Count > 0)
- {
- m_Blocks.Add(bhn.Content[0]);
- }
- }
- }
-
- override public bool GetNextBlock(out List<Block> lb)
- {
- m_Current = null;
- if (m_Blocks.Count > 0)
- {
- m_Current = m_Blocks[0];
- m_Blocks.Remove(m_Current);
- lb = new List<Block>();
- lb.Add(m_Current);
- return true;
- }
- else
- {
- DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_doomedBlocks));
- }
- lb = null;
- return false;
- }
-
- // This method is called to inform about the prover outcome for the previous GetNextBlock call.
- override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
- {
- this.__DEBUG_BlocksChecked++;
- // outcome==Valid means that there is no feasible execution for the current block/path (i.e., might be doomed)
- if (outcome == ProverInterface.Outcome.Valid && m_Current != null)
- {
- m_doomedBlocks.Add(m_Current);
- }
- else if (outcome == ProverInterface.Outcome.Invalid)
- {
- List<Block> errortrace = m_GetErrorTraceFromCE(cb);
- foreach (Block b in errortrace)
- {
- if (m_Blocks.Contains(b))
- {
- m_Blocks.Remove(b);
- }
- }
- cb.TraceNodes.Clear();
- }
- return true;
- }
- }
- #endregion
-
- #region Path Cover Optimization with L
- internal class PathCoverStrategy : DoomDetectionStrategy
- {
- List<Block> m_Uncheckedlocks = new List<Block>();
- List<Block> m_Ignore = new List<Block>();
-
- Random m_Random = new Random();
- bool m_NoMoreMoves = false;
-
- private List<Block> m_foundBlock = new List<Block>();
-
- public PathCoverStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
- : base(imp, unifiedexit, unreach)
- {
- m_Ignore = unreach;
- HACK_NewCheck = true;
- impl = imp;
- foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
- {
- if (bhn.Content.Count > 0)
- {
- m_Uncheckedlocks.Add(bhn.Content[0]);
- }
-
- }
- m_MaxK = m_BlockH.GetMaxK(m_Uncheckedlocks);
- MinBlocks = m_MaxK / 2 + (m_MaxK % 2 > 0 ? 1 : 0);
- MaxBlocks = -1;
- }
-
- override public bool GetNextBlock(out List<Block> lb)
- {
- sw.Start();
-
- lb = new List<Block>();
-
- if (m_Uncheckedlocks.Count == 0 || m_NoMoreMoves)
- {
- if (m_Uncheckedlocks.Count > 0)
- {
- DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_Uncheckedlocks));
- }
-
- return false;
- }
-
- lb.AddRange(m_Uncheckedlocks);
-
- return true;
- }
-
- override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
- {
- this.__DEBUG_BlocksChecked++;
- // Valid means infeasible...
- int oldl = MinBlocks;
- int oldsize = m_Uncheckedlocks.Count;
-
-
- if (outcome == ProverInterface.Outcome.Valid)
- {
- this.__DEBUG_InfeasibleTraces++;
- if (MinBlocks == 1)
- {
- m_NoMoreMoves = true;
- }
- else
- {
- MinBlocks = 1;
- }
- }
- else if (outcome == ProverInterface.Outcome.Invalid)
- {
- this.__DEBUG_TracesChecked++;
-
- List<Block> errortrace = m_GetErrorTraceFromCE(cb);
- foreach (Block b in errortrace)
- {
- if (m_Uncheckedlocks.Contains(b))
- {
- m_Uncheckedlocks.Remove(b);
- }
- }
- cb.TraceNodes.Clear();
- m_MaxK = m_BlockH.GetMaxK(m_Uncheckedlocks);
- if (m_MaxK < 1)
- {
- m_NoMoreMoves = true; m_Uncheckedlocks.Clear();
- }
- MinBlocks = m_MaxK / 2 + (m_MaxK % 2 > 0 ? 1 : 0);
- //if (MinBlocks > m_MaxK) MinBlocks = m_MaxK;
-
- }
- else
- {
- m_NoMoreMoves = true; m_Uncheckedlocks.Clear();
- }
- if (__DEBUGOUT)
- Console.WriteLine("K := {0,3}, L := {1,3}, deltaSp {2,3}, out {3,8}, time {4,8}", MaxBlocks, oldl, (oldsize - m_Uncheckedlocks.Count), outcome, sw.ElapsedTicks);
- sw.Stop();
- sw.Reset();
- return true;
- }
-
-
- }
- #endregion
-
- #region Path Cover Optimization with K
- internal class PathCoverStrategyK : DoomDetectionStrategy
- {
- List<Block> m_Uncheckedlocks = new List<Block>();
- List<Block> m_Ignore = new List<Block>();
-
- Random m_Random = new Random();
- bool m_NoMoreMoves = false;
-
- private List<Block> m_foundBlock = new List<Block>();
-
- public PathCoverStrategyK(Implementation imp, Block unifiedexit, List<Block> unreach)
- : base(imp, unifiedexit, unreach)
- {
- m_Ignore = unreach;
- HACK_NewCheck = true;
- impl = imp;
- foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
- {
- if (bhn.Content.Count > 0)
- {
- m_Uncheckedlocks.Add(bhn.Content[0]);
- }
-
- }
-
- m_MaxK = m_BlockH.GetMaxK(m_Uncheckedlocks);
-
- MaxBlocks = m_Uncheckedlocks.Count;
- if (m_MaxK < m_Uncheckedlocks.Count && m_MaxK > 0)
- {
- MaxBlocks = m_MaxK;
- }
- else if (m_MaxK >= m_Uncheckedlocks.Count)
- {
- MaxBlocks = m_Uncheckedlocks.Count;
- }
- else
- {
- MaxBlocks = 1;
- }
- //Console.WriteLine("InitK {0}, Max {1}", m_MaxK, MaxBlocks);
- }
-
- override public bool GetNextBlock(out List<Block> lb)
- {
- sw.Start();
-
- lb = new List<Block>();
-
- if (m_Uncheckedlocks.Count == 0 || m_NoMoreMoves)
- {
- if (m_Uncheckedlocks.Count > 0)
- {
- DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_Uncheckedlocks));
- }
-
- return false;
- }
-
- lb.AddRange(m_Uncheckedlocks);
-
- MaxBlocks = MaxBlocks > m_Uncheckedlocks.Count ? m_Uncheckedlocks.Count : MaxBlocks;
- MinBlocks = MaxBlocks / 2 + (MaxBlocks % 2 > 0 ? 1 : 0);
- return true;
- }
-
- override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
- {
- this.__DEBUG_BlocksChecked++;
- // Valid means infeasible...
- int oldk = MaxBlocks;
- int oldl = MinBlocks;
- int oldsize = m_Uncheckedlocks.Count;
-
- if (outcome == ProverInterface.Outcome.Valid)
- {
- this.__DEBUG_InfeasibleTraces++;
- if (MaxBlocks == 1)
- {
- m_NoMoreMoves = true;
- }
- else
- {
- MaxBlocks /= 2;
- }
- }
- else if (outcome == ProverInterface.Outcome.Invalid)
- {
- this.__DEBUG_TracesChecked++;
-
- List<Block> errortrace = m_GetErrorTraceFromCE(cb);
- foreach (Block b in errortrace)
- {
- if (m_Uncheckedlocks.Contains(b))
- {
- m_Uncheckedlocks.Remove(b);
- }
- }
- cb.TraceNodes.Clear();
-
- int k = m_BlockH.GetMaxK(m_Uncheckedlocks);
- MaxBlocks = (k > MaxBlocks) ? MaxBlocks : k;
- }
- else
- {
- m_NoMoreMoves = true; m_Uncheckedlocks.Clear();
- }
- if (__DEBUGOUT)
- Console.WriteLine("K := {0,3}, L := {1,3}, deltaSp {2,3}, out {3,8}, time {4,8}", oldk, oldl, (oldsize - m_Uncheckedlocks.Count), outcome, sw.ElapsedTicks);
- sw.Stop();
- sw.Reset();
- return true;
- }
-
-
- }
- #endregion
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC
+{
+ #region SuperClass for different doomed code detection strategies
+ abstract internal class DoomDetectionStrategy
+ {
+ public int __DEBUG_BlocksChecked = 0;
+ public int __DEBUG_BlocksTotal = 0;
+ public int __DEBUG_InfeasibleTraces = 0;
+ public int __DEBUG_TracesChecked = 0;
+ public int __DEBUG_TracesTotal = 0;
+ public int __DEBUG_EQCTotal = 0;
+ public int __DEBUG_EQCLeaf = 0;
+ public int __DEBUG_EQCChecked = 0;
+
+ //Please use this one to toggle your Debug output
+ protected bool __DEBUGOUT = CommandLineOptions.Clo.DoomStrategy != -1;
+
+ protected Implementation impl;
+ protected BlockHierachy m_BlockH = null;
+
+ protected int m_MaxBranchingDepth = 0;
+ protected int m_MaxK = 0;
+
+ protected Stopwatch sw = new Stopwatch();
+
+
+ // This is the List with all detected doomed program points. This List is used by VCDoomed.cs to
+ // create an error message
+ public List<List<Block/*!*/>/*!*/>/*!*/ DetectedBlock = new List<List<Block/*!*/>/*!*/>();
+
+ private List<Block> __DEBUG_minelements = new List<Block>();
+
+ // There is no default constructor, because these parameters are needed for most subclasses
+ public DoomDetectionStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
+ {
+ m_BlockH = new BlockHierachy(imp, unifiedexit);
+ __DEBUG_EQCLeaf = m_BlockH.Leaves.Count;
+
+ //foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
+ //{
+ // if (bhn.Content.Count > 0) __DEBUG_minelements.Add(bhn.Content[0]);
+ //}
+ //if (imp.Blocks.Count>0) m_GatherInfo(imp.Blocks[0], 0, 0,0);
+
+
+ if (__DEBUGOUT)
+ {
+ Console.WriteLine("MaBranchingDepth {0} MaxMinPP {1} ", m_MaxBranchingDepth, m_MaxK);
+
+ Console.WriteLine("AvgLeaverPerPath {0} AvgPLen {1}", 0, 0);
+ }
+
+ MaxBlocks = imp.Blocks.Count;
+ MinBlocks = imp.Blocks.Count;
+ HACK_NewCheck = false;
+ __DEBUG_BlocksTotal = imp.Blocks.Count;
+ }
+
+ public int MaxBlocks, MinBlocks;
+ public bool HACK_NewCheck;
+
+ // This method is called by the prover while it returns true. The prover checks for each
+ // List lb if
+ // |= !lb_1 /\ ... /\ !lb_n => wlp(Program, false)
+ // and passes the result to SetCurrentResult
+ abstract public bool GetNextBlock(out List<Block> passBlock);
+
+ // This method is called to inform about the prover outcome for the previous GetNextBlock call.
+ abstract public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb);
+
+ protected List<Block> m_GetErrorTraceFromCE(DoomErrorHandler cb)
+ {
+ BlockHierachyNode tn=null;
+ List<Block> errortrace = new List<Block>();
+ foreach (Block b in cb.TraceNodes)
+ {
+ if (errortrace.Contains(b)) continue;
+ if (m_BlockH.BlockToHierachyMap.TryGetValue(b, out tn))
+ {
+ foreach (Block b_ in tn.Unavoidable)
+ {
+ if (!errortrace.Contains(b_)) errortrace.Add(b_);
+ }
+ foreach (Block b_ in tn.Content)
+ {
+ if (!errortrace.Contains(b_)) errortrace.Add(b_);
+ }
+ }
+ }
+ return errortrace;
+ }
+
+ private List<int> __pathLength = new List<int>();
+ private List<int> __leavespp = new List<int>();
+ protected void m_GatherInfo(Block b, int branchingdepth, int leavespp, int plen)
+ {
+ if (b.Predecessors.Count > 1) branchingdepth--;
+
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ if (__DEBUG_minelements.Contains(b)) leavespp++;
+ plen++;
+ if (gc != null && gc.labelTargets.Count>0)
+ {
+ if (gc.labelTargets.Count > 1) branchingdepth++;
+ m_MaxBranchingDepth = (branchingdepth > m_MaxBranchingDepth) ? branchingdepth : m_MaxBranchingDepth;
+ foreach (Block s in gc.labelTargets)
+ {
+ m_GatherInfo(s, branchingdepth, leavespp,plen);
+ }
+ }
+ else
+ {
+ __pathLength.Add(plen);
+ __leavespp.Add(leavespp);
+ m_MaxK = (m_MaxK > leavespp) ? m_MaxK : leavespp;
+ }
+ }
+
+
+
+ }
+ #endregion
+
+ #region BruteForce Strategy
+ internal class NoStrategy : DoomDetectionStrategy
+ {
+ private List<Block> m_Blocks = new List<Block>();
+ private int m_Current = 0;
+
+ public NoStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
+ : base(imp, unifiedexit, unreach)
+ {
+ m_Blocks = imp.Blocks;
+ }
+
+ override public bool GetNextBlock(out List<Block> lb)
+ {
+ if (m_Current < m_Blocks.Count)
+ {
+ lb = new List<Block>();
+ lb.Add(m_Blocks[m_Current]);
+ m_Current++;
+ return true;
+ }
+ lb = null;
+ return false;
+ }
+
+ // This method is called to inform about the prover outcome for the previous GetNextBlock call.
+ override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
+ {
+ this.__DEBUG_BlocksChecked++;
+ // outcome==Valid means that there is no feasible execution for the current block/path (i.e., might be doomed)
+ if (outcome == ProverInterface.Outcome.Valid && m_Current <= m_Blocks.Count)
+ {
+ List<Block> lb = new List<Block>();
+ lb.Add(m_Blocks[m_Current - 1]);
+ DetectedBlock.Add(lb);
+ }
+ return true;
+ }
+ }
+ #endregion
+
+ #region Only check the minimal elements of the Hasse diagram
+ internal class HierachyStrategy : DoomDetectionStrategy
+ {
+ private List<Block> m_Blocks = new List<Block>();
+ private List<Block> m_doomedBlocks = new List<Block>();
+ private int m_Current = 0;
+
+ public HierachyStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
+ : base(imp, unifiedexit, unreach)
+ {
+ foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
+ {
+ if (bhn.Content.Count > 0)
+ {
+ m_Blocks.Add(bhn.Content[0]);
+ }
+ }
+ }
+
+ override public bool GetNextBlock(out List<Block> lb)
+ {
+ sw.Start();
+ if (m_Current < m_Blocks.Count)
+ {
+ lb = new List<Block>();
+ lb.Add(m_Blocks[m_Current]);
+ m_Current++;
+ return true;
+ }
+ else
+ {
+ DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_doomedBlocks));
+ }
+ lb = null;
+ return false;
+ }
+
+ // This method is called to inform about the prover outcome for the previous GetNextBlock call.
+ override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
+ {
+ this.__DEBUG_BlocksChecked++;
+ // outcome==Valid means that there is no feasible execution for the current block/path (i.e., might be doomed)
+ if (outcome == ProverInterface.Outcome.Valid && m_Current <= m_Blocks.Count)
+ {
+ m_doomedBlocks.Add(m_Blocks[m_Current - 1]);
+ }
+ if (__DEBUGOUT) Console.WriteLine("K := {0,3} , out {1,8}, time {2,12}", MaxBlocks, outcome, sw.ElapsedTicks);
+ sw.Stop();
+ sw.Reset();
+
+ return true;
+ }
+ }
+ #endregion
+
+ #region Only check the minimal elements of the Hasse diagram and use CEs
+ internal class HierachyCEStrategy : DoomDetectionStrategy
+ {
+ private List<Block> m_Blocks = new List<Block>();
+ private List<Block> m_doomedBlocks = new List<Block>();
+ private Block m_Current = null;
+
+ public HierachyCEStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
+ : base(imp, unifiedexit, unreach)
+ {
+ foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
+ {
+ if (bhn.Content.Count > 0)
+ {
+ m_Blocks.Add(bhn.Content[0]);
+ }
+ }
+ }
+
+ override public bool GetNextBlock(out List<Block> lb)
+ {
+ m_Current = null;
+ if (m_Blocks.Count > 0)
+ {
+ m_Current = m_Blocks[0];
+ m_Blocks.Remove(m_Current);
+ lb = new List<Block>();
+ lb.Add(m_Current);
+ return true;
+ }
+ else
+ {
+ DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_doomedBlocks));
+ }
+ lb = null;
+ return false;
+ }
+
+ // This method is called to inform about the prover outcome for the previous GetNextBlock call.
+ override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
+ {
+ this.__DEBUG_BlocksChecked++;
+ // outcome==Valid means that there is no feasible execution for the current block/path (i.e., might be doomed)
+ if (outcome == ProverInterface.Outcome.Valid && m_Current != null)
+ {
+ m_doomedBlocks.Add(m_Current);
+ }
+ else if (outcome == ProverInterface.Outcome.Invalid)
+ {
+ List<Block> errortrace = m_GetErrorTraceFromCE(cb);
+ foreach (Block b in errortrace)
+ {
+ if (m_Blocks.Contains(b))
+ {
+ m_Blocks.Remove(b);
+ }
+ }
+ cb.TraceNodes.Clear();
+ }
+ return true;
+ }
+ }
+ #endregion
+
+ #region Path Cover Optimization with L
+ internal class PathCoverStrategy : DoomDetectionStrategy
+ {
+ List<Block> m_Uncheckedlocks = new List<Block>();
+ List<Block> m_Ignore = new List<Block>();
+
+ Random m_Random = new Random();
+ bool m_NoMoreMoves = false;
+
+ private List<Block> m_foundBlock = new List<Block>();
+
+ public PathCoverStrategy(Implementation imp, Block unifiedexit, List<Block> unreach)
+ : base(imp, unifiedexit, unreach)
+ {
+ m_Ignore = unreach;
+ HACK_NewCheck = true;
+ impl = imp;
+ foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
+ {
+ if (bhn.Content.Count > 0)
+ {
+ m_Uncheckedlocks.Add(bhn.Content[0]);
+ }
+
+ }
+ m_MaxK = m_BlockH.GetMaxK(m_Uncheckedlocks);
+ MinBlocks = m_MaxK / 2 + (m_MaxK % 2 > 0 ? 1 : 0);
+ MaxBlocks = -1;
+ }
+
+ override public bool GetNextBlock(out List<Block> lb)
+ {
+ sw.Start();
+
+ lb = new List<Block>();
+
+ if (m_Uncheckedlocks.Count == 0 || m_NoMoreMoves)
+ {
+ if (m_Uncheckedlocks.Count > 0)
+ {
+ DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_Uncheckedlocks));
+ }
+
+ return false;
+ }
+
+ lb.AddRange(m_Uncheckedlocks);
+
+ return true;
+ }
+
+ override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
+ {
+ this.__DEBUG_BlocksChecked++;
+ // Valid means infeasible...
+ int oldl = MinBlocks;
+ int oldsize = m_Uncheckedlocks.Count;
+
+
+ if (outcome == ProverInterface.Outcome.Valid)
+ {
+ this.__DEBUG_InfeasibleTraces++;
+ if (MinBlocks == 1)
+ {
+ m_NoMoreMoves = true;
+ }
+ else
+ {
+ MinBlocks = 1;
+ }
+ }
+ else if (outcome == ProverInterface.Outcome.Invalid)
+ {
+ this.__DEBUG_TracesChecked++;
+
+ List<Block> errortrace = m_GetErrorTraceFromCE(cb);
+ foreach (Block b in errortrace)
+ {
+ if (m_Uncheckedlocks.Contains(b))
+ {
+ m_Uncheckedlocks.Remove(b);
+ }
+ }
+ cb.TraceNodes.Clear();
+ m_MaxK = m_BlockH.GetMaxK(m_Uncheckedlocks);
+ if (m_MaxK < 1)
+ {
+ m_NoMoreMoves = true; m_Uncheckedlocks.Clear();
+ }
+ MinBlocks = m_MaxK / 2 + (m_MaxK % 2 > 0 ? 1 : 0);
+ //if (MinBlocks > m_MaxK) MinBlocks = m_MaxK;
+
+ }
+ else
+ {
+ m_NoMoreMoves = true; m_Uncheckedlocks.Clear();
+ }
+ if (__DEBUGOUT)
+ Console.WriteLine("K := {0,3}, L := {1,3}, deltaSp {2,3}, out {3,8}, time {4,8}", MaxBlocks, oldl, (oldsize - m_Uncheckedlocks.Count), outcome, sw.ElapsedTicks);
+ sw.Stop();
+ sw.Reset();
+ return true;
+ }
+
+
+ }
+ #endregion
+
+ #region Path Cover Optimization with K
+ internal class PathCoverStrategyK : DoomDetectionStrategy
+ {
+ List<Block> m_Uncheckedlocks = new List<Block>();
+ List<Block> m_Ignore = new List<Block>();
+
+ Random m_Random = new Random();
+ bool m_NoMoreMoves = false;
+
+ private List<Block> m_foundBlock = new List<Block>();
+
+ public PathCoverStrategyK(Implementation imp, Block unifiedexit, List<Block> unreach)
+ : base(imp, unifiedexit, unreach)
+ {
+ m_Ignore = unreach;
+ HACK_NewCheck = true;
+ impl = imp;
+ foreach (BlockHierachyNode bhn in m_BlockH.Leaves)
+ {
+ if (bhn.Content.Count > 0)
+ {
+ m_Uncheckedlocks.Add(bhn.Content[0]);
+ }
+
+ }
+
+ m_MaxK = m_BlockH.GetMaxK(m_Uncheckedlocks);
+
+ MaxBlocks = m_Uncheckedlocks.Count;
+ if (m_MaxK < m_Uncheckedlocks.Count && m_MaxK > 0)
+ {
+ MaxBlocks = m_MaxK;
+ }
+ else if (m_MaxK >= m_Uncheckedlocks.Count)
+ {
+ MaxBlocks = m_Uncheckedlocks.Count;
+ }
+ else
+ {
+ MaxBlocks = 1;
+ }
+ //Console.WriteLine("InitK {0}, Max {1}", m_MaxK, MaxBlocks);
+ }
+
+ override public bool GetNextBlock(out List<Block> lb)
+ {
+ sw.Start();
+
+ lb = new List<Block>();
+
+ if (m_Uncheckedlocks.Count == 0 || m_NoMoreMoves)
+ {
+ if (m_Uncheckedlocks.Count > 0)
+ {
+ DetectedBlock.Add(m_BlockH.GetOtherDoomedBlocks(m_Uncheckedlocks));
+ }
+
+ return false;
+ }
+
+ lb.AddRange(m_Uncheckedlocks);
+
+ MaxBlocks = MaxBlocks > m_Uncheckedlocks.Count ? m_Uncheckedlocks.Count : MaxBlocks;
+ MinBlocks = MaxBlocks / 2 + (MaxBlocks % 2 > 0 ? 1 : 0);
+ return true;
+ }
+
+ override public bool SetCurrentResult(List<Variable> reachvar, ProverInterface.Outcome outcome, DoomErrorHandler cb)
+ {
+ this.__DEBUG_BlocksChecked++;
+ // Valid means infeasible...
+ int oldk = MaxBlocks;
+ int oldl = MinBlocks;
+ int oldsize = m_Uncheckedlocks.Count;
+
+ if (outcome == ProverInterface.Outcome.Valid)
+ {
+ this.__DEBUG_InfeasibleTraces++;
+ if (MaxBlocks == 1)
+ {
+ m_NoMoreMoves = true;
+ }
+ else
+ {
+ MaxBlocks /= 2;
+ }
+ }
+ else if (outcome == ProverInterface.Outcome.Invalid)
+ {
+ this.__DEBUG_TracesChecked++;
+
+ List<Block> errortrace = m_GetErrorTraceFromCE(cb);
+ foreach (Block b in errortrace)
+ {
+ if (m_Uncheckedlocks.Contains(b))
+ {
+ m_Uncheckedlocks.Remove(b);
+ }
+ }
+ cb.TraceNodes.Clear();
+
+ int k = m_BlockH.GetMaxK(m_Uncheckedlocks);
+ MaxBlocks = (k > MaxBlocks) ? MaxBlocks : k;
+ }
+ else
+ {
+ m_NoMoreMoves = true; m_Uncheckedlocks.Clear();
+ }
+ if (__DEBUGOUT)
+ Console.WriteLine("K := {0,3}, L := {1,3}, deltaSp {2,3}, out {3,8}, time {4,8}", oldk, oldl, (oldsize - m_Uncheckedlocks.Count), outcome, sw.ElapsedTicks);
+ sw.Stop();
+ sw.Reset();
+ return true;
+ }
+
+
+ }
+ #endregion
+
} \ No newline at end of file
diff --git a/Source/Doomed/HasseDiagram.cs b/Source/Doomed/HasseDiagram.cs
index ad3d487e..c866662e 100644
--- a/Source/Doomed/HasseDiagram.cs
+++ b/Source/Doomed/HasseDiagram.cs
@@ -1,424 +1,424 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC
-{
- internal class BlockHierachyNode
- {
- public List<Block> Unavoidable;
- public List<Block> Content = new List<Block>();
- public List<BlockHierachyNode> Parents = new List<BlockHierachyNode>();
- public List<BlockHierachyNode> Children = new List<BlockHierachyNode>();
-
- public bool Checked, Doomed, DoubleChecked;
-
- public BlockHierachyNode(Block current, List<Block> unavoidable)
- {
- Checked = false; Doomed = false; DoubleChecked = false;
- Unavoidable = unavoidable;
- Content.Add(current);
- }
-
- public static bool operator <(BlockHierachyNode left, BlockHierachyNode right)
- {
- return Compare(left,right)>0;
- }
-
- public static bool operator >(BlockHierachyNode left, BlockHierachyNode right)
- {
- return Compare(left, right) < 0;
- }
-
- // Compare the unavoidable blocks of two BlockHierachyNodes.
- // returns 0 if sets have the same size, -1 if l2 has an element
- // that is not in l1, otherwise the size of the intersection.
- public static int Compare(BlockHierachyNode l1, BlockHierachyNode l2)
- {
- List<Block> tmp = new List<Block>();
- tmp.AddRange(l2.Unavoidable);
- foreach (Block b in l1.Unavoidable)
- {
- if (tmp.Contains(b)) tmp.Remove(b);
- else return -1;
- }
- return tmp.Count;
- }
- }
-
- internal class HasseDiagram
- {
- public readonly List<BlockHierachyNode> Leaves = new List<BlockHierachyNode>();
- public readonly List<BlockHierachyNode> Roots = new List<BlockHierachyNode>();
-
- public HasseDiagram(List<BlockHierachyNode> nodes)
- {
- Dictionary<BlockHierachyNode, List<BlockHierachyNode>> largerElements = new Dictionary<BlockHierachyNode, List<BlockHierachyNode>>();
- foreach (BlockHierachyNode left in nodes)
- {
- largerElements[left] = new List<BlockHierachyNode>();
- foreach (BlockHierachyNode right in nodes)
- {
- if (left != right)
- {
- if (left < right)
- {
- largerElements[left].Add(right);
- }
- }
- }
- if (largerElements[left].Count == 0) Leaves.Add(left);
- }
-
- List<BlockHierachyNode> done = new List<BlockHierachyNode>();
- List<BlockHierachyNode> lastround = null;
-
- //Debugger.Break();
-
- // Now that we have the leaves, build the Hasse diagram
- while (done.Count < nodes.Count)
- {
- List<BlockHierachyNode> maxelements = new List<BlockHierachyNode>();
- maxelements.AddRange(nodes);
- foreach (BlockHierachyNode bhn in nodes)
- {
- if (!done.Contains(bhn))
- {
- foreach (BlockHierachyNode tmp in largerElements[bhn])
- {
- if (maxelements.Contains(tmp)) maxelements.Remove(tmp);
- }
- }
- else
- {
- maxelements.Remove(bhn);
- }
- }
-
- done.AddRange(maxelements);
-
- if (lastround != null)
- {
- foreach (BlockHierachyNode tmp in lastround)
- {
- foreach (BlockHierachyNode tmp2 in maxelements)
- {
- if (largerElements[tmp].Contains(tmp2))
- {
- if (!tmp.Children.Contains(tmp2)) tmp.Children.Add(tmp2);
- if (!tmp2.Parents.Contains(tmp)) tmp2.Parents.Add(tmp);
- }
- }
- }
- }
- else
- {
- Roots.AddRange(maxelements);
- }
- lastround = maxelements;
- }
- }
-
-
- }
-
- internal class BlockHierachy
- {
- public BlockHierachyNode RootNode = null;
- readonly public Dictionary<Block, BlockHierachyNode> BlockToHierachyMap = new Dictionary<Block, BlockHierachyNode>();
- readonly public Dictionary<Block, List<Block>> Dominators = new Dictionary<Block, List<Block>>();
- readonly public Dictionary<Block, List<Block>> PostDominators = new Dictionary<Block, List<Block>>();
- readonly public List<BlockHierachyNode> Leaves = new List<BlockHierachyNode>();
-
- private Implementation m_Impl;
-
- public BlockHierachy(Implementation impl, Block unifiedExit)
- {
- m_Impl = impl;
- List<Block> blocks = impl.Blocks;
- List<BlockHierachyNode> tmp_hnodes = new List<BlockHierachyNode>();
- Dictionary<Block, List<Block>> unavoidable = new Dictionary<Block, List<Block>>();
-
- BfsTraverser(blocks[0], true, Dominators);
- BfsTraverser(unifiedExit, false, PostDominators);
-
- foreach (Block b in blocks)
- {
- List<Block> l1 = Dominators[b];
- List<Block> l2 = PostDominators[b];
- unavoidable[b] = m_MergeLists(l1, l2);
-
- BlockHierachyNode bhn = new BlockHierachyNode(b, unavoidable[b]);
- bool found = false;
- foreach (KeyValuePair<Block, BlockHierachyNode> kvp in BlockToHierachyMap)
- {
- if (BlockHierachyNode.Compare(kvp.Value, bhn) == 0) // using the overloaded compare operator
- {
- kvp.Value.Content.AddRange(bhn.Content);
- BlockToHierachyMap[b] = kvp.Value;
- found = true;
- break;
- }
- }
- if (!found)
- {
- BlockToHierachyMap[b] = bhn;
- tmp_hnodes.Add(bhn);
- }
- }
-
- HasseDiagram hd = new HasseDiagram(tmp_hnodes);
- Leaves = hd.Leaves;
- }
-
- public int GetMaxK(List<Block> blocks)
- {
- m_GetMaxK(blocks);
- return (m_MaxK>0) ? m_MaxK : 1;
- }
-
- private int m_MaxK = 0;
- private void m_GetMaxK(List<Block> blocks)
- {
- m_MaxK = 0;
- Dictionary<Block, int> kstore = new Dictionary<Block, int>();
- List<Block> todo = new List<Block>();
- List<Block> done = new List<Block>();
- todo.Add(m_Impl.Blocks[0]);
- kstore[m_Impl.Blocks[0]] = 0;
- int localmax;
- Block current = null;
- while (todo.Count > 0)
- {
- current = todo[0];
- todo.Remove(current);
- bool ready = true;
- localmax = 0;
- if (current.Predecessors!=null) {
- foreach (Block p in current.Predecessors)
- {
- if (!done.Contains(p))
- {
- ready = false; break;
- }
- else localmax = (localmax > kstore[p]) ? localmax : kstore[p];
- }
- }
- if (!ready)
- {
- todo.Add(current); continue;
- }
- done.Add(current);
- kstore[current] = (blocks.Contains(current)) ? localmax +1 : localmax;
-
- m_MaxK = (kstore[current] > m_MaxK) ? kstore[current] : m_MaxK;
-
- GotoCmd gc = current.TransferCmd as GotoCmd;
- if (gc != null)
- {
- foreach (Block s in gc.labelTargets)
- {
- if (!todo.Contains(s)) todo.Add(s);
- }
- }
- }
-
- }
-
- public List<Block> GetOtherDoomedBlocks(List<Block> doomedblocks)
- {
- List<Block> alsoDoomed = new List<Block>();
- List<BlockHierachyNode> todo = new List<BlockHierachyNode>();
- foreach (Block b in doomedblocks)
- {
- BlockToHierachyMap[b].Doomed = true;
- todo.Add(BlockToHierachyMap[b]);
- }
-
- while (todo.Count > 0)
- {
- BlockHierachyNode current = todo[0];
- todo.Remove(current);
- if (!current.Doomed && current.Children.Count > 0)
- {
- bool childrenDoomed = true;
- foreach (BlockHierachyNode c in current.Children)
- {
- if (!c.Doomed) { childrenDoomed = false; break; }
- }
- if (childrenDoomed) current.Doomed = true;
- }
-
- if (current.Doomed)
- {
- foreach (BlockHierachyNode p in current.Parents)
- {
- if (!todo.Contains(p)) todo.Add(p);
- }
- foreach (Block b in current.Content)
- {
- if (!alsoDoomed.Contains(b)) alsoDoomed.Add(b);
- }
- }
- }
-
- return alsoDoomed;
- }
-
- public void Impl2Dot(string filename)
- {
-
- Contract.Requires(filename != null);
- List<string> nodes = new List<string>();
- List<string> edges = new List<string>();
-
- string nodestyle = "[shape=box];";
-
- List<BlockHierachyNode> nl = new List<BlockHierachyNode>();
- foreach (BlockHierachyNode h in BlockToHierachyMap.Values) if (!nl.Contains(h)) nl.Add(h);
-
-
- foreach (BlockHierachyNode b in nl)
- {
- String l1 = "";
- foreach (Block bl in b.Content) l1 = String.Format("{0}_{1}", l1, bl.Label);
-
- Contract.Assert(b != null);
- nodes.Add(string.Format("\"{0}\" {1}", l1, nodestyle));
- foreach (BlockHierachyNode b_ in b.Children)
- {
-
- String l2 = "";
- foreach (Block bl in b_.Content) l2 = String.Format("{0}_{1}", l2, bl.Label);
- edges.Add(String.Format("\"{0}\" -> \"{1}\";", l1, l2));
- }
-
- }
-
- using (StreamWriter sw = new StreamWriter(filename))
- {
- sw.WriteLine(String.Format("digraph {0} {{", "DISCO"));
- // foreach (string! s in nodes) {
- // sw.WriteLine(s);
- // }
- foreach (string s in edges)
- {
- Contract.Assert(s != null);
- sw.WriteLine(s);
- }
- sw.WriteLine("}}");
- sw.Close();
- }
- }
-
- private void BfsTraverser(Block current, bool forward, Dictionary<Block, List<Block>> unavoidableBlocks)
- {
- List<Block> todo = new List<Block>();
- List<Block> done = new List<Block>();
- unavoidableBlocks[current] = new List<Block>();
- //Debugger.Break();
- todo.Add(current);
- while (todo.Count > 0)
- {
- current = todo[0];
- todo.Remove(current);
- List<Block> pre = m_Predecessors(current, forward);
- bool ready = true;
- if (pre != null)
- {
- foreach (Block bpre in pre)
- {
- if (!done.Contains(bpre))
- {
- ready = false;
- break;
- }
- }
- }
- if (!ready)
- {
- todo.Add(current);
- continue;
- }
- done.Add(current);
- unavoidableBlocks[current].Add(current);
-
- List<Block> suc = m_Succecessors(current, forward);
- if (suc == null) continue;
- foreach (Block bsuc in suc)
- {
- if (unavoidableBlocks.ContainsKey(bsuc))
- {
- unavoidableBlocks[bsuc] = m_IntersectLists(unavoidableBlocks[bsuc], unavoidableBlocks[current]);
- }
- else
- {
- todo.Add(bsuc);
- unavoidableBlocks[bsuc] = new List<Block>();
- unavoidableBlocks[bsuc].AddRange(unavoidableBlocks[current]);
- }
-
- }
- }
-
- }
-
- private List<Block> m_MergeLists(List<Block> lb1, List<Block> lb2)
- {
- List<Block> ret = new List<Block>();
- ret.AddRange(lb1);
- foreach (Block b in lb2)
- {
- if (!ret.Contains(b)) ret.Add(b);
- }
- return ret;
- }
-
- private List<Block> m_IntersectLists(List<Block> lb1, List<Block> lb2)
- {
- List<Block> ret = new List<Block>();
- ret.AddRange(lb1);
- foreach (Block b in lb2)
- {
- if (!lb1.Contains(b)) ret.Remove(b);
- }
- foreach (Block b in lb1)
- {
- if (ret.Contains(b) && !lb2.Contains(b)) ret.Remove(b);
- }
- return ret;
- }
-
- private List<Block> m_Predecessors(Block b, bool forward)
- {
- if (forward) return b.Predecessors;
- GotoCmd gc = b.TransferCmd as GotoCmd;
- if (gc != null)
- {
- return gc.labelTargets;
- }
- return null;
- }
-
- private List<Block> m_Succecessors(Block b, bool forward)
- {
- return m_Predecessors(b, !forward);
- }
-
-
- }
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC
+{
+ internal class BlockHierachyNode
+ {
+ public List<Block> Unavoidable;
+ public List<Block> Content = new List<Block>();
+ public List<BlockHierachyNode> Parents = new List<BlockHierachyNode>();
+ public List<BlockHierachyNode> Children = new List<BlockHierachyNode>();
+
+ public bool Checked, Doomed, DoubleChecked;
+
+ public BlockHierachyNode(Block current, List<Block> unavoidable)
+ {
+ Checked = false; Doomed = false; DoubleChecked = false;
+ Unavoidable = unavoidable;
+ Content.Add(current);
+ }
+
+ public static bool operator <(BlockHierachyNode left, BlockHierachyNode right)
+ {
+ return Compare(left,right)>0;
+ }
+
+ public static bool operator >(BlockHierachyNode left, BlockHierachyNode right)
+ {
+ return Compare(left, right) < 0;
+ }
+
+ // Compare the unavoidable blocks of two BlockHierachyNodes.
+ // returns 0 if sets have the same size, -1 if l2 has an element
+ // that is not in l1, otherwise the size of the intersection.
+ public static int Compare(BlockHierachyNode l1, BlockHierachyNode l2)
+ {
+ List<Block> tmp = new List<Block>();
+ tmp.AddRange(l2.Unavoidable);
+ foreach (Block b in l1.Unavoidable)
+ {
+ if (tmp.Contains(b)) tmp.Remove(b);
+ else return -1;
+ }
+ return tmp.Count;
+ }
+ }
+
+ internal class HasseDiagram
+ {
+ public readonly List<BlockHierachyNode> Leaves = new List<BlockHierachyNode>();
+ public readonly List<BlockHierachyNode> Roots = new List<BlockHierachyNode>();
+
+ public HasseDiagram(List<BlockHierachyNode> nodes)
+ {
+ Dictionary<BlockHierachyNode, List<BlockHierachyNode>> largerElements = new Dictionary<BlockHierachyNode, List<BlockHierachyNode>>();
+ foreach (BlockHierachyNode left in nodes)
+ {
+ largerElements[left] = new List<BlockHierachyNode>();
+ foreach (BlockHierachyNode right in nodes)
+ {
+ if (left != right)
+ {
+ if (left < right)
+ {
+ largerElements[left].Add(right);
+ }
+ }
+ }
+ if (largerElements[left].Count == 0) Leaves.Add(left);
+ }
+
+ List<BlockHierachyNode> done = new List<BlockHierachyNode>();
+ List<BlockHierachyNode> lastround = null;
+
+ //Debugger.Break();
+
+ // Now that we have the leaves, build the Hasse diagram
+ while (done.Count < nodes.Count)
+ {
+ List<BlockHierachyNode> maxelements = new List<BlockHierachyNode>();
+ maxelements.AddRange(nodes);
+ foreach (BlockHierachyNode bhn in nodes)
+ {
+ if (!done.Contains(bhn))
+ {
+ foreach (BlockHierachyNode tmp in largerElements[bhn])
+ {
+ if (maxelements.Contains(tmp)) maxelements.Remove(tmp);
+ }
+ }
+ else
+ {
+ maxelements.Remove(bhn);
+ }
+ }
+
+ done.AddRange(maxelements);
+
+ if (lastround != null)
+ {
+ foreach (BlockHierachyNode tmp in lastround)
+ {
+ foreach (BlockHierachyNode tmp2 in maxelements)
+ {
+ if (largerElements[tmp].Contains(tmp2))
+ {
+ if (!tmp.Children.Contains(tmp2)) tmp.Children.Add(tmp2);
+ if (!tmp2.Parents.Contains(tmp)) tmp2.Parents.Add(tmp);
+ }
+ }
+ }
+ }
+ else
+ {
+ Roots.AddRange(maxelements);
+ }
+ lastround = maxelements;
+ }
+ }
+
+
+ }
+
+ internal class BlockHierachy
+ {
+ public BlockHierachyNode RootNode = null;
+ readonly public Dictionary<Block, BlockHierachyNode> BlockToHierachyMap = new Dictionary<Block, BlockHierachyNode>();
+ readonly public Dictionary<Block, List<Block>> Dominators = new Dictionary<Block, List<Block>>();
+ readonly public Dictionary<Block, List<Block>> PostDominators = new Dictionary<Block, List<Block>>();
+ readonly public List<BlockHierachyNode> Leaves = new List<BlockHierachyNode>();
+
+ private Implementation m_Impl;
+
+ public BlockHierachy(Implementation impl, Block unifiedExit)
+ {
+ m_Impl = impl;
+ List<Block> blocks = impl.Blocks;
+ List<BlockHierachyNode> tmp_hnodes = new List<BlockHierachyNode>();
+ Dictionary<Block, List<Block>> unavoidable = new Dictionary<Block, List<Block>>();
+
+ BfsTraverser(blocks[0], true, Dominators);
+ BfsTraverser(unifiedExit, false, PostDominators);
+
+ foreach (Block b in blocks)
+ {
+ List<Block> l1 = Dominators[b];
+ List<Block> l2 = PostDominators[b];
+ unavoidable[b] = m_MergeLists(l1, l2);
+
+ BlockHierachyNode bhn = new BlockHierachyNode(b, unavoidable[b]);
+ bool found = false;
+ foreach (KeyValuePair<Block, BlockHierachyNode> kvp in BlockToHierachyMap)
+ {
+ if (BlockHierachyNode.Compare(kvp.Value, bhn) == 0) // using the overloaded compare operator
+ {
+ kvp.Value.Content.AddRange(bhn.Content);
+ BlockToHierachyMap[b] = kvp.Value;
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ {
+ BlockToHierachyMap[b] = bhn;
+ tmp_hnodes.Add(bhn);
+ }
+ }
+
+ HasseDiagram hd = new HasseDiagram(tmp_hnodes);
+ Leaves = hd.Leaves;
+ }
+
+ public int GetMaxK(List<Block> blocks)
+ {
+ m_GetMaxK(blocks);
+ return (m_MaxK>0) ? m_MaxK : 1;
+ }
+
+ private int m_MaxK = 0;
+ private void m_GetMaxK(List<Block> blocks)
+ {
+ m_MaxK = 0;
+ Dictionary<Block, int> kstore = new Dictionary<Block, int>();
+ List<Block> todo = new List<Block>();
+ List<Block> done = new List<Block>();
+ todo.Add(m_Impl.Blocks[0]);
+ kstore[m_Impl.Blocks[0]] = 0;
+ int localmax;
+ Block current = null;
+ while (todo.Count > 0)
+ {
+ current = todo[0];
+ todo.Remove(current);
+ bool ready = true;
+ localmax = 0;
+ if (current.Predecessors!=null) {
+ foreach (Block p in current.Predecessors)
+ {
+ if (!done.Contains(p))
+ {
+ ready = false; break;
+ }
+ else localmax = (localmax > kstore[p]) ? localmax : kstore[p];
+ }
+ }
+ if (!ready)
+ {
+ todo.Add(current); continue;
+ }
+ done.Add(current);
+ kstore[current] = (blocks.Contains(current)) ? localmax +1 : localmax;
+
+ m_MaxK = (kstore[current] > m_MaxK) ? kstore[current] : m_MaxK;
+
+ GotoCmd gc = current.TransferCmd as GotoCmd;
+ if (gc != null)
+ {
+ foreach (Block s in gc.labelTargets)
+ {
+ if (!todo.Contains(s)) todo.Add(s);
+ }
+ }
+ }
+
+ }
+
+ public List<Block> GetOtherDoomedBlocks(List<Block> doomedblocks)
+ {
+ List<Block> alsoDoomed = new List<Block>();
+ List<BlockHierachyNode> todo = new List<BlockHierachyNode>();
+ foreach (Block b in doomedblocks)
+ {
+ BlockToHierachyMap[b].Doomed = true;
+ todo.Add(BlockToHierachyMap[b]);
+ }
+
+ while (todo.Count > 0)
+ {
+ BlockHierachyNode current = todo[0];
+ todo.Remove(current);
+ if (!current.Doomed && current.Children.Count > 0)
+ {
+ bool childrenDoomed = true;
+ foreach (BlockHierachyNode c in current.Children)
+ {
+ if (!c.Doomed) { childrenDoomed = false; break; }
+ }
+ if (childrenDoomed) current.Doomed = true;
+ }
+
+ if (current.Doomed)
+ {
+ foreach (BlockHierachyNode p in current.Parents)
+ {
+ if (!todo.Contains(p)) todo.Add(p);
+ }
+ foreach (Block b in current.Content)
+ {
+ if (!alsoDoomed.Contains(b)) alsoDoomed.Add(b);
+ }
+ }
+ }
+
+ return alsoDoomed;
+ }
+
+ public void Impl2Dot(string filename)
+ {
+
+ Contract.Requires(filename != null);
+ List<string> nodes = new List<string>();
+ List<string> edges = new List<string>();
+
+ string nodestyle = "[shape=box];";
+
+ List<BlockHierachyNode> nl = new List<BlockHierachyNode>();
+ foreach (BlockHierachyNode h in BlockToHierachyMap.Values) if (!nl.Contains(h)) nl.Add(h);
+
+
+ foreach (BlockHierachyNode b in nl)
+ {
+ String l1 = "";
+ foreach (Block bl in b.Content) l1 = String.Format("{0}_{1}", l1, bl.Label);
+
+ Contract.Assert(b != null);
+ nodes.Add(string.Format("\"{0}\" {1}", l1, nodestyle));
+ foreach (BlockHierachyNode b_ in b.Children)
+ {
+
+ String l2 = "";
+ foreach (Block bl in b_.Content) l2 = String.Format("{0}_{1}", l2, bl.Label);
+ edges.Add(String.Format("\"{0}\" -> \"{1}\";", l1, l2));
+ }
+
+ }
+
+ using (StreamWriter sw = new StreamWriter(filename))
+ {
+ sw.WriteLine(String.Format("digraph {0} {{", "DISCO"));
+ // foreach (string! s in nodes) {
+ // sw.WriteLine(s);
+ // }
+ foreach (string s in edges)
+ {
+ Contract.Assert(s != null);
+ sw.WriteLine(s);
+ }
+ sw.WriteLine("}}");
+ sw.Close();
+ }
+ }
+
+ private void BfsTraverser(Block current, bool forward, Dictionary<Block, List<Block>> unavoidableBlocks)
+ {
+ List<Block> todo = new List<Block>();
+ List<Block> done = new List<Block>();
+ unavoidableBlocks[current] = new List<Block>();
+ //Debugger.Break();
+ todo.Add(current);
+ while (todo.Count > 0)
+ {
+ current = todo[0];
+ todo.Remove(current);
+ List<Block> pre = m_Predecessors(current, forward);
+ bool ready = true;
+ if (pre != null)
+ {
+ foreach (Block bpre in pre)
+ {
+ if (!done.Contains(bpre))
+ {
+ ready = false;
+ break;
+ }
+ }
+ }
+ if (!ready)
+ {
+ todo.Add(current);
+ continue;
+ }
+ done.Add(current);
+ unavoidableBlocks[current].Add(current);
+
+ List<Block> suc = m_Succecessors(current, forward);
+ if (suc == null) continue;
+ foreach (Block bsuc in suc)
+ {
+ if (unavoidableBlocks.ContainsKey(bsuc))
+ {
+ unavoidableBlocks[bsuc] = m_IntersectLists(unavoidableBlocks[bsuc], unavoidableBlocks[current]);
+ }
+ else
+ {
+ todo.Add(bsuc);
+ unavoidableBlocks[bsuc] = new List<Block>();
+ unavoidableBlocks[bsuc].AddRange(unavoidableBlocks[current]);
+ }
+
+ }
+ }
+
+ }
+
+ private List<Block> m_MergeLists(List<Block> lb1, List<Block> lb2)
+ {
+ List<Block> ret = new List<Block>();
+ ret.AddRange(lb1);
+ foreach (Block b in lb2)
+ {
+ if (!ret.Contains(b)) ret.Add(b);
+ }
+ return ret;
+ }
+
+ private List<Block> m_IntersectLists(List<Block> lb1, List<Block> lb2)
+ {
+ List<Block> ret = new List<Block>();
+ ret.AddRange(lb1);
+ foreach (Block b in lb2)
+ {
+ if (!lb1.Contains(b)) ret.Remove(b);
+ }
+ foreach (Block b in lb1)
+ {
+ if (ret.Contains(b) && !lb2.Contains(b)) ret.Remove(b);
+ }
+ return ret;
+ }
+
+ private List<Block> m_Predecessors(Block b, bool forward)
+ {
+ if (forward) return b.Predecessors;
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ if (gc != null)
+ {
+ return gc.labelTargets;
+ }
+ return null;
+ }
+
+ private List<Block> m_Succecessors(Block b, bool forward)
+ {
+ return m_Predecessors(b, !forward);
+ }
+
+
+ }
+
} \ No newline at end of file
diff --git a/Source/Doomed/VCDoomed.cs b/Source/Doomed/VCDoomed.cs
index d4d4db21..822fb9c0 100644
--- a/Source/Doomed/VCDoomed.cs
+++ b/Source/Doomed/VCDoomed.cs
@@ -1,826 +1,826 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC {
- public partial class DCGen : ConditionGeneration {
- private bool _print_time = CommandLineOptions.Clo.DoomStrategy!=-1;
- #region Attributes
- static private Dictionary<Block, Variable/*!*/>/*!*/ m_BlockReachabilityMap;
- Dictionary<Block/*!*/, Block/*!*/>/*!*/ m_copiedBlocks = new Dictionary<Block/*!*/, Block/*!*/>();
- const string reachvarsuffix = "__ivebeenthere";
- List<Cmd/*!*/>/*!*/ m_doomedCmds = new List<Cmd/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
-
- }
-
- #endregion
-
-
- /// <summary>
- /// Constructor. Initializes the theorem prover.
- /// </summary>
- public DCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
- : base(program, checkers) {
- Contract.Requires(program != null);
-
- this.appendLogFile = appendLogFile;
- this.logFilePath = logFilePath;
- m_BlockReachabilityMap = new Dictionary<Block, Variable>();
- }
-
- /// <summary>
- /// Debug method that prints a dot file of the
- /// current set of blocks in impl to filename.
- /// </summary>
- private void Impl2Dot(Implementation impl, string filename) {
- Contract.Requires(impl != null);
- Contract.Requires(filename != null);
- List<string> nodes = new List<string>();
- List<string> edges = new List<string>();
-
- string nodestyle = "[shape=box];";
-
- foreach (Block b in impl.Blocks) {
- Contract.Assert(b != null);
- nodes.Add(string.Format("\"{0}\" {1}", b.Label, nodestyle));
- GotoCmd gc = b.TransferCmd as GotoCmd;
- if (gc != null)
- {
- Contract.Assert(gc.labelTargets != null);
- foreach (Block b_ in gc.labelTargets)
- {
- Contract.Assert(b_ != null);
- edges.Add(String.Format("\"{0}\" -> \"{1}\";", b.Label, b_.Label));
- }
- }
-
- //foreach (Block b_ in b.Predecessors)
- //{
- // edges.Add(String.Format("\"{0}\" -> \"{1}\";", b.Label, b_.Label));
- //}
- }
-
- using (StreamWriter sw = new StreamWriter(filename)) {
- sw.WriteLine(String.Format("digraph {0} {{", impl.Name));
- // foreach (string! s in nodes) {
- // sw.WriteLine(s);
- // }
- foreach (string s in edges) {
- Contract.Assert(s != null);
- sw.WriteLine(s);
- }
- sw.WriteLine("}}");
- sw.Close();
- }
- }
- private const string _copyPrefix = "CPY__";
-
- private List<Block> m_UncheckableBlocks = null;
-
- /// <summary>
- /// MSchaef:
- /// - remove loops and add reach variables
- /// - make it a passive program
- /// - compute the wlp for each block
- /// - check if |= (reach=false) => wlp.S.false holds for each reach
- ///
- /// </summary>
- public override Outcome VerifyImplementation(Implementation impl, VerifierCallback callback) {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- Console.WriteLine();
- Console.WriteLine("Checking function {0}", impl.Name);
- callback.OnProgress("doomdetector", 0, 0, 0);
-
- bool restartTP = CommandLineOptions.Clo.DoomRestartTP ;
-
- //Impl2Dot(impl, String.Format("c:/dot/{0}_orig.dot", impl.Name));
-
- Transform4DoomedCheck(impl);
-
- //Impl2Dot(impl, String.Format("c:/dot/{0}_fin.dot", impl.Name));
-
- Checker checker = FindCheckerFor(1000);
- Contract.Assert(checker != null);
- int assertionCount;
- DoomCheck dc = new DoomCheck(impl, this.exitBlock, checker, m_UncheckableBlocks, out assertionCount);
- CumulativeAssertionCount += assertionCount;
-
- //EmitImpl(impl, false);
-
- int _totalchecks = 0;
-
- ProverInterface.Outcome outcome;
- dc.ErrorHandler = new DoomErrorHandler(dc.Label2Absy, callback);
-
- System.TimeSpan ts = new TimeSpan();
-
- if (_print_time) Console.WriteLine("Total number of blocks {0}", impl.Blocks.Count);
-
- List<Block> lb;
- List<Variable> lv = new List<Variable>();
-
- while (dc.GetNextBlock(out lb))
- {
- Contract.Assert(lb != null);
- outcome = ProverInterface.Outcome.Undetermined;
-
- Variable v = null;
- lv.Clear();
-
- foreach (Block b_ in lb)
- {
- if (!m_BlockReachabilityMap.TryGetValue(b_, out v))
- {
- // This should cause an error
- continue;
- }
- //Console.Write("{0}, ",b_.Label);
- lv.Add(v);
- }
- //Console.WriteLine();
- Dictionary<Expr, int> finalreachvars = m_GetPostconditionVariables(impl.Blocks,lb);
- if (lv.Count < 1)
- {
-
- continue;
- }
-
- Contract.Assert(lv != null);
- _totalchecks++;
-
-
- if (!dc.CheckLabel(lv,finalreachvars, out outcome)) {
- return Outcome.Inconclusive;
- }
- ts += dc.DEBUG_ProverTime.Elapsed;
-
- if (restartTP)
- {
- checker.Close();
- checker = FindCheckerFor(1000);
- dc.RespawnChecker(impl, checker);
- dc.ErrorHandler = new DoomErrorHandler(dc.Label2Absy, callback);
- }
-
- }
- checker.Close();
-
- if (_print_time)
- {
- Console.WriteLine("Number of Checkes / #Blocks: {0} of {1}", _totalchecks, impl.Blocks.Count);
- dc.__DEBUG_PrintStatistics();
- Console.WriteLine("Total time for this method: {0}", ts.ToString());
- }
- #region Try to produce a counter example (brute force)
- if (dc.DoomedSequences.Count > 0) {
- int counter = 0;
- List<Block> _all = new List<Block>();
- foreach (List<Block> lb_ in dc.DoomedSequences)
- {
- foreach (Block b_ in lb_)
- {
- if (!_all.Contains(b_) && !m_UncheckableBlocks.Contains(b_))
- {
- _all.Add(b_); counter++;
- if (!_print_time) Console.WriteLine(b_.Label);
- }
- }
- }
- if (_all.Count > 0)
- {
- Console.WriteLine("#Dead Blocks found: {0}: ", counter);
- return Outcome.Errors;
- }
- }
- #endregion
-
-
- return Outcome.Correct;
- }
-
- private Dictionary<Expr, int> m_GetPostconditionVariables(List<Block> allblock, List<Block> passBlock)
- {
- Dictionary<Expr, int> r = new Dictionary<Expr, int>();
- foreach (Block b in allblock)
- {
- Variable v;
- if (m_BlockReachabilityMap.TryGetValue(b, out v))
- {
- if (passBlock.Contains(b)) r[m_LastReachVarIncarnation[v]] = 1;
- }
- else
- {
- Console.WriteLine("there is no reachability variable for {0}", b.Label);
- }
- }
- return r;
- }
-
-#if false
- #region Error message construction
- private void SearchCounterexample(Implementation impl, DoomErrorHandler errh, VerifierCallback callback) {
- Contract.Requires(impl != null);
- Contract.Requires(errh != null);
- Contract.Requires(callback != null);
- Contract.Requires(errh.m_Reachvar != null);
- //if (errh.m_Reachvar==null) {
- // Contract.Assert(false);throw new cce.UnreachableException();
- //}
- m_doomedCmds.Clear();
-
- Dictionary<Block, List<Cmd>> cmdbackup = new Dictionary<Block, List<Cmd>>();
-
- BruteForceCESearch(errh.m_Reachvar, impl, callback, cmdbackup, 0, impl.Blocks.Count / 2 - 1);
- BruteForceCESearch(errh.m_Reachvar, impl, callback, cmdbackup, impl.Blocks.Count / 2, impl.Blocks.Count - 1);
-
- List<Cmd> causals = CollectCausalStatements(impl.Blocks[0]);
- foreach (Cmd c in causals) {
- Contract.Assert(c != null);
- GenerateErrorMessage(c, causals);
- }
-
- #region Undo all modifications
- foreach (KeyValuePair<Block, List<Cmd>> kvp in cmdbackup) {
- Contract.Assert(kvp.Key != null);
- Contract.Assert(kvp.Value != null);
- kvp.Key.Cmds = kvp.Value;
- }
- #endregion
- }
-
- #region Causal Statement Tree
-
- private void GenerateErrorMessage(Cmd causalStatement, List<Cmd> causals) {
- Contract.Requires(causalStatement != null);
- Contract.Requires(cce.NonNullElements(causals));
- AssumeCmd uc = causalStatement as AssumeCmd;
- AssertCmd ac = causalStatement as AssertCmd;
- ConsoleColor col = Console.ForegroundColor;
-
- // Trivial case. Must be either assume or assert false
- if (m_doomedCmds.Count == 1) {
- Console.WriteLine("Found a trivial error:");
- if (uc != null) {
- Console.Write("Trivial false assumption: ");
- Console.Write("({0};{1}):", uc.tok.line, uc.tok.col);
- }
- if (ac != null) {
- Console.Write("Trivial false assertion: ");
- Console.Write("({0};{1}):", ac.tok.line, ac.tok.col);
- }
- causalStatement.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
- } else {
- // Safety error
- if (ac != null) {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Safety error:");
- Console.ForegroundColor = col;
- Console.Write("This assertion is violated: ");
- Console.Write("({0};{1}):", ac.tok.line, ac.tok.col);
- ac.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
- }
- if (uc != null) {
- bool containsAssert = false;
- foreach (Cmd c in m_doomedCmds) {
- Contract.Assert(c != null);
- if (causals.Contains(c)) {
- continue;
- }
- AssertCmd asrt = c as AssertCmd;
- if (asrt != null) {
- containsAssert = true;
- break;
- }
- }
- // Plausibility error
- if (containsAssert) {
- Console.ForegroundColor = ConsoleColor.Yellow;
- Console.WriteLine("Plausibility error:");
- Console.ForegroundColor = col;
- Console.Write("There is no legal exeuction passing: ");
- Console.Write("({0};{1})", uc.tok.line, uc.tok.col);
- uc.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
- } else { // Reachability error
- Console.ForegroundColor = ConsoleColor.DarkRed;
- Console.WriteLine("Reachability error:");
- Console.ForegroundColor = col;
- Console.Write("No execution can reach: ");
- Console.Write("({0};{1})", uc.tok.line, uc.tok.col);
- uc.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
- }
-
- }
-
- Console.ForegroundColor = ConsoleColor.White;
- Console.WriteLine("...on any execution passing through:");
- foreach (Cmd c in m_doomedCmds) {
- Contract.Assert(c != null);
- if (causals.Contains(c)) {
- continue;
- }
- Console.ForegroundColor = col;
- Console.Write("In ({0};{1}): ", c.tok.line, c.tok.col);
- Console.ForegroundColor = ConsoleColor.DarkYellow;
- c.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
- }
- Console.ForegroundColor = col;
- Console.WriteLine("--");
-
- }
- }
-
- private List<Cmd> CollectCausalStatements(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Cmd>>()));
-
- Cmd lastCausal = null;
- foreach (Cmd c in b.Cmds) {
- Contract.Assert(c != null);
- AssertCmd ac = c as AssertCmd;
- AssumeCmd uc = c as AssumeCmd;
- if (ac != null && !ContainsReachVariable(ac)) {
- if (ac.Expr != Expr.True) {
- lastCausal = c;
- }
- } else if (uc != null && !ContainsReachVariable(uc)) {
- lastCausal = c;
- }
- }
-
- List<Cmd> causals = new List<Cmd>();
- GotoCmd gc = b.TransferCmd as GotoCmd;
- if (gc != null && gc.labelTargets != null) {
- List<Cmd> tmp;
- //bool allcausal = true;
- foreach (Block b_ in gc.labelTargets) {
- Contract.Assert(b_ != null);
- tmp = CollectCausalStatements(b_);
-
- foreach (Cmd cau in tmp) {
- if (!causals.Contains(cau))
- causals.Add(cau);
- }
- }
- //if (allcausal)
- if (causals.Count > 0)
- return causals;
- }
- if (lastCausal != null)
- causals.Add(lastCausal);
- return causals;
- }
-
- #endregion
-
- bool BruteForceCESearch(Variable reachvar, Implementation impl, VerifierCallback callback,
- Dictionary<Block, List<Cmd>> cmdbackup, int startidx, int endidx) {
- Contract.Requires(reachvar != null);
- Contract.Requires(impl != null);
- Contract.Requires(callback != null);
- Contract.Requires(cce.NonNullElements(cmdbackup));
- #region Modify implementation
- for (int i = startidx; i <= endidx; i++) {
- if (_copiedBlock.Contains(impl.Blocks[i]))
- continue;
- List<Cmd> cs = new List<Cmd>();
- cmdbackup.Add(impl.Blocks[i], impl.Blocks[i].Cmds);
- foreach (Cmd c in impl.Blocks[i].Cmds) {
- Contract.Assert(c != null);
- if (ContainsReachVariable(c)) {
- cs.Add(c);
- continue;
- }
- AssertCmd ac = c as AssertCmd;
- AssumeCmd uc = c as AssumeCmd;
- if (ac != null) {
- cs.Add(new AssertCmd(ac.tok, Expr.True));
- } else if (uc != null) {
- cs.Add(new AssertCmd(uc.tok, Expr.True));
- } else {
- cs.Add(c);
- }
- }
- impl.Blocks[i].Cmds = cs;
- }
- #endregion
-
- ProverInterface.Outcome outcome = ProverInterface.Outcome.Undetermined;
- if (!ReCheckImpl(reachvar, impl, callback, out outcome)) {
- UndoBlockModifications(impl, cmdbackup, startidx, endidx);
- return false;
- }
- if (outcome == ProverInterface.Outcome.Valid) {
- return true;
- } else if (outcome == ProverInterface.Outcome.Invalid) {
- UndoBlockModifications(impl, cmdbackup, startidx, endidx);
- int mid = startidx + (endidx - startidx) / 2;
- if (startidx >= endidx) {
- // Now we found an interesting Block and we have to
- // search for the interesting statements.
- int cmdcount = impl.Blocks[endidx].Cmds.Length;
- BruteForceCmd(impl.Blocks[endidx], 0, cmdcount / 2 - 1, reachvar, impl, callback);
- BruteForceCmd(impl.Blocks[endidx], cmdcount / 2, cmdcount - 1, reachvar, impl, callback);
- return true;
- } else {
- BruteForceCESearch(reachvar, impl, callback, cmdbackup, startidx, mid);
- BruteForceCESearch(reachvar, impl, callback, cmdbackup, mid + 1, endidx);
- return true;
- }
- } else {
- UndoBlockModifications(impl, cmdbackup, startidx, endidx);
- return false;
- }
- }
-
- bool BruteForceCmd(Block b, int startidx, int endidx, Variable reachvar,
- Implementation impl, VerifierCallback callback) {
- Contract.Requires(b != null);
- Contract.Requires(reachvar != null);
- Contract.Requires(impl != null);
- Contract.Requires(callback != null);
- #region Modify Cmds
- List<Cmd> backup = b.Cmds;
- Contract.Assert(backup != null);
- List<Cmd> cs = new List<Cmd>();
- for (int i = 0; i < startidx; i++) {
- cs.Add(b.Cmds[i]);
- }
- for (int i = startidx; i <= endidx; i++) {
- Cmd c = b.Cmds[i];
- if (ContainsReachVariable(c)) {
- cs.Add(c);
- continue;
- }
- cs.Add(new AssertCmd(c.tok, Expr.True));
- }
- for (int i = endidx + 1; i < b.Cmds.Length; i++) {
- cs.Add(b.Cmds[i]);
- }
-
- b.Cmds = cs;
- #endregion
-
- #region Recheck
- ProverInterface.Outcome outcome = ProverInterface.Outcome.Undetermined;
- if (!ReCheckImpl(reachvar, impl, callback, out outcome)) {
- b.Cmds = backup;
- return false;
- }
- #endregion
-
- if (outcome == ProverInterface.Outcome.Valid) {
- return true;
- } else if (outcome == ProverInterface.Outcome.Invalid) {
- b.Cmds = backup;
- if (startidx >= endidx) {
- if (!ContainsReachVariable(b.Cmds[endidx])) {
- // Console.Write(" Witness (");
- //
- // ConsoleColor col = Console.ForegroundColor;
- // Console.ForegroundColor = ConsoleColor.White;
- // Console.Write("{0};{1}", b.Cmds[endidx].tok.line, b.Cmds[endidx].tok.col );
- // Console.ForegroundColor = col;
- // Console.Write("): ");
- // Console.ForegroundColor = ConsoleColor.Yellow;
- // b.Cmds[endidx].Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
- // Console.ForegroundColor = col;
-
- m_doomedCmds.Add(b.Cmds[endidx]);
- return true;
- } else {
- return false;
- }
- } else {
- int mid = startidx + (endidx - startidx) / 2;
- BruteForceCmd(b, startidx, mid, reachvar, impl, callback);
- BruteForceCmd(b, mid + 1, endidx, reachvar, impl, callback);
- return false; // This is pure random
- }
- } else {
- b.Cmds = backup;
- return false;
- }
- }
-
- void UndoBlockModifications(Implementation impl, Dictionary<Block/*!*/, List<Cmd>/*!*/>/*!*/ cmdbackup,
- int startidx, int endidx) {
- Contract.Requires(cce.NonNullElements(cmdbackup));
- Contract.Requires(impl != null);
- for (int i = startidx; i <= endidx; i++) {
- List<Cmd> cs = null;
- if (cmdbackup.TryGetValue(impl.Blocks[i], out cs)) {
- Contract.Assert(cs != null);
- impl.Blocks[i].Cmds = cs;
- cmdbackup.Remove(impl.Blocks[i]);
- }
- }
- }
-
- bool ReCheckImpl(Variable reachvar, Implementation impl, VerifierCallback callback,
- out ProverInterface.Outcome outcome) {
- Contract.Requires(reachvar != null);
- Contract.Requires(impl != null);
- Contract.Requires(callback != null);
- Checker checker = FindCheckerFor(impl, 1000);
- Contract.Assert(checker != null);
- DoomCheck dc = new DoomCheck(impl, this.exitBlock, checker, m_UncheckableBlocks);
- dc.ErrorHandler = new DoomErrorHandler(dc.Label2Absy, callback);
- outcome = ProverInterface.Outcome.Undetermined;
- List<Variable> rv = new List<Variable>();
- rv.Add(reachvar);
- if (!dc.CheckLabel(rv,null, out outcome)) {
- checker.Close();
- return false;
- }
- checker.Close();
- return true;
- }
-
-
-
- bool ContainsReachVariable(Cmd c) {
- Contract.Requires(c != null);
- AssertCmd artc = c as AssertCmd;
- AssumeCmd amec = c as AssumeCmd;
- Expr e;
- if (artc != null) {
- e = artc.Expr;
- } else if (amec != null) {
- e = amec.Expr;
- } else {
- return false;
- }
- Set freevars = new Set();
- e.ComputeFreeVariables(freevars);
- foreach (Variable v in freevars) {
- Contract.Assert(v != null);
- if (v.Name.Contains(reachvarsuffix))
- return true;
- }
- return false;
- }
-#endregion
-#endif
-
-
- Block exitBlock;
-
- #region Program Passification
- private void GenerateHelperBlocks(Implementation impl) {
- Contract.Requires(impl != null);
- Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins = new Dictionary<TransferCmd, ReturnCmd>();
- exitBlock = GenerateUnifiedExit(impl, gotoCmdOrigins);
- Contract.Assert(exitBlock != null);
-
- AddBlocksBetween(impl.Blocks);
-
- #region Insert pre- and post-conditions and where clauses as assume and assert statements
- {
- List<Cmd> cc = new List<Cmd>();
- // where clauses of global variables
- foreach (var gvar in program.GlobalVariables) {
- if (gvar.TypedIdent.WhereExpr != null) {
- Cmd c = new AssumeCmd(gvar.tok, gvar.TypedIdent.WhereExpr);
- cc.Add(c);
- }
- }
- // where clauses of in- and out-parameters
- cc.AddRange(GetParamWhereClauses(impl));
- // where clauses of local variables
- foreach (Variable lvar in impl.LocVars) {
- Contract.Assert(lvar != null);
- if (lvar.TypedIdent.WhereExpr != null) {
- Cmd c = new AssumeCmd(lvar.tok, lvar.TypedIdent.WhereExpr);
- cc.Add(c);
- }
- }
-
- // add cc and the preconditions to new blocks preceding impl.Blocks[0]
- InjectPreconditions(impl, cc);
-
- // append postconditions, starting in exitBlock and continuing into other blocks, if needed
- InjectPostConditions(impl, exitBlock, gotoCmdOrigins);
- }
- #endregion
- }
-
-
- private Dictionary<Variable, Expr> PassifyProgram(Implementation impl, ModelViewInfo mvInfo) {
- Contract.Requires(impl != null);
- Contract.Requires(mvInfo != null);
- Contract.Requires(this.exitBlock != null);
- Contract.Ensures(Contract.Result<Hashtable>() != null);
-
- CurrentLocalVariables = impl.LocVars;
- return Convert2PassiveCmd(impl, mvInfo);
- //return new Hashtable();
- }
-
- /// <summary>
- /// Add additional variable to allow checking as described in the paper
- /// "It's doomed; we can prove it"
- /// </summary>
- private List<Cmd> GenerateReachabilityPredicates(Implementation impl)
- {
- Contract.Requires(impl != null);
-
- foreach (Block b in impl.Blocks)
- {
- Contract.Assert(b != null);
- //if (b.Predecessors.Length==0) continue;
- //if (b.Cmds.Length == 0 ) continue;
-
- Variable v_ = new LocalVariable(Token.NoToken,
- new TypedIdent(b.tok, b.Label + reachvarsuffix, new BasicType(SimpleType.Int )));
-
- impl.LocVars.Add(v_);
-
- m_BlockReachabilityMap[b] = v_;
-
- IdentifierExpr lhs = new IdentifierExpr(b.tok, v_);
- Contract.Assert(lhs != null);
-
- impl.Proc.Modifies.Add(lhs);
-
- List<AssignLhs> lhsl = new List<AssignLhs>();
- lhsl.Add(new SimpleAssignLhs(Token.NoToken, lhs));
- List<Expr> rhsl = new List<Expr>();
- rhsl.Add(Expr.Literal(1) );
-
-
- List<Cmd> cs = new List<Cmd> { new AssignCmd(Token.NoToken, lhsl, rhsl) };
- cs.AddRange(b.Cmds);
- b.Cmds = cs;
-
- //checkBlocks.Add(new CheckableBlock(v_,b));
- }
-
- List<Cmd> incReachVars = new List<Cmd>();
- foreach (KeyValuePair<Block, Variable> kvp in m_BlockReachabilityMap)
- {
- IdentifierExpr lhs = new IdentifierExpr(Token.NoToken, kvp.Value);
- impl.Proc.Modifies.Add(lhs);
- incReachVars.Add(new AssumeCmd(Token.NoToken, Expr.Le(lhs, Expr.Literal(1))));
- }
-
- return incReachVars;
- }
-
- #endregion
-
- #region Compute loop-free approximation
-
- // this might be redundant, but I didn't find a better place to get this information.
- private Dictionary<Variable, Expr> m_LastReachVarIncarnation = new Dictionary<Variable, Expr>();
-
- private void Transform4DoomedCheck(Implementation impl)
- {
- variable2SequenceNumber = new Dictionary<Variable, int>();
- incarnationOriginMap = new Dictionary<Incarnation, Absy>();
- if (impl.Blocks.Count < 1) return;
-
- impl.PruneUnreachableBlocks();
- AddBlocksBetween(impl.Blocks);
- ResetPredecessors(impl.Blocks);
-
- GraphAnalyzer ga = new GraphAnalyzer(impl.Blocks);
- LoopRemover lr = new LoopRemover(ga);
- lr.AbstractLoopUnrolling();
-
- impl.Blocks = ga.ToImplementation(out m_UncheckableBlocks);
- ResetPredecessors(impl.Blocks);
-
- // Check for the "BlocksBetween" if all their successors are in m_UncheckableBlocks
- List<Block> oldblocks = new List<Block>();
- oldblocks.AddRange(impl.Blocks);
- GenerateHelperBlocks(impl);
- #region Check for the "BlocksBetween" if all their successors are in m_UncheckableBlocks
- foreach (Block b in impl.Blocks)
- {
- if (oldblocks.Contains(b)) continue;
- GotoCmd gc = b.TransferCmd as GotoCmd;
- if (gc != null)
- {
- bool allsuccUncheckable = true;
- foreach (Block _b in gc.labelTargets)
- {
- if (!m_UncheckableBlocks.Contains(_b))
- {
- allsuccUncheckable = false; break;
- }
- }
- if (allsuccUncheckable && !m_UncheckableBlocks.Contains(b)) m_UncheckableBlocks.Add(b);
- }
- }
- #endregion
-
- impl.Blocks = DeepCopyBlocks(impl.Blocks, m_UncheckableBlocks);
-
- m_BlockReachabilityMap = new Dictionary<Block, Variable>();
- List<Cmd> cs = GenerateReachabilityPredicates(impl);
-
- //foreach (Block test in getTheFFinalBlock(impl.Blocks[0]))
- //{
- // test.Cmds.AddRange(cs);
- //}
-
- ResetPredecessors(impl.Blocks);
- //EmitImpl(impl,false);
-
- Dictionary<Variable, Expr> var2Expr = PassifyProgram(impl, new ModelViewInfo(program, impl));
-
- // Collect the last incarnation of each reachability variable in the passive program
- foreach (KeyValuePair<Block, Variable> kvp in m_BlockReachabilityMap)
- {
- if (var2Expr.ContainsKey(kvp.Value))
- {
- m_LastReachVarIncarnation[kvp.Value] = (Expr)var2Expr[kvp.Value];
- }
- }
- }
-
-
- List<Block> getTheFFinalBlock(Block b)
- {
- List<Block> lb = new List<Block>();
- GotoCmd gc = b.TransferCmd as GotoCmd;
- if (gc == null) lb.Add(b);
- else
- {
- foreach (Block s in gc.labelTargets)
- {
- foreach (Block r in getTheFFinalBlock(s)) if (!lb.Contains(r)) lb.Add(r);
- }
- }
- return lb;
- }
-
-
- private List<Block> DeepCopyBlocks(List<Block> lb, List<Block> uncheckables)
- {
- List<Block> clones = new List<Block>();
- List<Block> uncheck_ = new List<Block>();
- Dictionary<Block, Block> clonemap = new Dictionary<Block, Block>();
-
- foreach (Block b in lb)
- {
- Block clone = CloneBlock(b);
- clones.Add(clone);
- clonemap[b] = clone;
- if (uncheckables.Contains(b)) uncheck_.Add(clone);
- }
- uncheckables.Clear();
- uncheckables.AddRange(uncheck_);
- // update the successors and predecessors
- foreach (Block b in lb)
- {
- List<Block> newpreds = new List<Block>();
- foreach (Block b_ in b.Predecessors)
- {
- newpreds.Add(clonemap[b_]);
- }
- clonemap[b].Predecessors = newpreds;
- GotoCmd gc = b.TransferCmd as GotoCmd;
- ReturnCmd rc = b.TransferCmd as ReturnCmd;
- if (gc != null)
- {
- List<String> lseq = new List<String>();
- List<Block> bseq = new List<Block>();
- foreach (string s in gc.labelNames) lseq.Add(s);
- foreach (Block b_ in gc.labelTargets) bseq.Add(clonemap[b_]);
- GotoCmd tcmd = new GotoCmd(gc.tok, lseq, bseq);
- clonemap[b].TransferCmd = tcmd;
- }
- else if (rc != null)
- {
- clonemap[b].TransferCmd = new ReturnCmd(rc.tok);
- }
- }
- return clones;
- }
-
- private Block CloneBlock(Block b)
- {
- Block clone = new Block(b.tok, b.Label, b.Cmds, b.TransferCmd);
- if (this.exitBlock == b) this.exitBlock = clone;
- return clone;
- }
- #endregion
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC {
+ public partial class DCGen : ConditionGeneration {
+ private bool _print_time = CommandLineOptions.Clo.DoomStrategy!=-1;
+ #region Attributes
+ static private Dictionary<Block, Variable/*!*/>/*!*/ m_BlockReachabilityMap;
+ Dictionary<Block/*!*/, Block/*!*/>/*!*/ m_copiedBlocks = new Dictionary<Block/*!*/, Block/*!*/>();
+ const string reachvarsuffix = "__ivebeenthere";
+ List<Cmd/*!*/>/*!*/ m_doomedCmds = new List<Cmd/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+
+ }
+
+ #endregion
+
+
+ /// <summary>
+ /// Constructor. Initializes the theorem prover.
+ /// </summary>
+ public DCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
+ : base(program, checkers) {
+ Contract.Requires(program != null);
+
+ this.appendLogFile = appendLogFile;
+ this.logFilePath = logFilePath;
+ m_BlockReachabilityMap = new Dictionary<Block, Variable>();
+ }
+
+ /// <summary>
+ /// Debug method that prints a dot file of the
+ /// current set of blocks in impl to filename.
+ /// </summary>
+ private void Impl2Dot(Implementation impl, string filename) {
+ Contract.Requires(impl != null);
+ Contract.Requires(filename != null);
+ List<string> nodes = new List<string>();
+ List<string> edges = new List<string>();
+
+ string nodestyle = "[shape=box];";
+
+ foreach (Block b in impl.Blocks) {
+ Contract.Assert(b != null);
+ nodes.Add(string.Format("\"{0}\" {1}", b.Label, nodestyle));
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ if (gc != null)
+ {
+ Contract.Assert(gc.labelTargets != null);
+ foreach (Block b_ in gc.labelTargets)
+ {
+ Contract.Assert(b_ != null);
+ edges.Add(String.Format("\"{0}\" -> \"{1}\";", b.Label, b_.Label));
+ }
+ }
+
+ //foreach (Block b_ in b.Predecessors)
+ //{
+ // edges.Add(String.Format("\"{0}\" -> \"{1}\";", b.Label, b_.Label));
+ //}
+ }
+
+ using (StreamWriter sw = new StreamWriter(filename)) {
+ sw.WriteLine(String.Format("digraph {0} {{", impl.Name));
+ // foreach (string! s in nodes) {
+ // sw.WriteLine(s);
+ // }
+ foreach (string s in edges) {
+ Contract.Assert(s != null);
+ sw.WriteLine(s);
+ }
+ sw.WriteLine("}}");
+ sw.Close();
+ }
+ }
+ private const string _copyPrefix = "CPY__";
+
+ private List<Block> m_UncheckableBlocks = null;
+
+ /// <summary>
+ /// MSchaef:
+ /// - remove loops and add reach variables
+ /// - make it a passive program
+ /// - compute the wlp for each block
+ /// - check if |= (reach=false) => wlp.S.false holds for each reach
+ ///
+ /// </summary>
+ public override Outcome VerifyImplementation(Implementation impl, VerifierCallback callback) {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ Console.WriteLine();
+ Console.WriteLine("Checking function {0}", impl.Name);
+ callback.OnProgress("doomdetector", 0, 0, 0);
+
+ bool restartTP = CommandLineOptions.Clo.DoomRestartTP ;
+
+ //Impl2Dot(impl, String.Format("c:/dot/{0}_orig.dot", impl.Name));
+
+ Transform4DoomedCheck(impl);
+
+ //Impl2Dot(impl, String.Format("c:/dot/{0}_fin.dot", impl.Name));
+
+ Checker checker = FindCheckerFor(1000);
+ Contract.Assert(checker != null);
+ int assertionCount;
+ DoomCheck dc = new DoomCheck(impl, this.exitBlock, checker, m_UncheckableBlocks, out assertionCount);
+ CumulativeAssertionCount += assertionCount;
+
+ //EmitImpl(impl, false);
+
+ int _totalchecks = 0;
+
+ ProverInterface.Outcome outcome;
+ dc.ErrorHandler = new DoomErrorHandler(dc.Label2Absy, callback);
+
+ System.TimeSpan ts = new TimeSpan();
+
+ if (_print_time) Console.WriteLine("Total number of blocks {0}", impl.Blocks.Count);
+
+ List<Block> lb;
+ List<Variable> lv = new List<Variable>();
+
+ while (dc.GetNextBlock(out lb))
+ {
+ Contract.Assert(lb != null);
+ outcome = ProverInterface.Outcome.Undetermined;
+
+ Variable v = null;
+ lv.Clear();
+
+ foreach (Block b_ in lb)
+ {
+ if (!m_BlockReachabilityMap.TryGetValue(b_, out v))
+ {
+ // This should cause an error
+ continue;
+ }
+ //Console.Write("{0}, ",b_.Label);
+ lv.Add(v);
+ }
+ //Console.WriteLine();
+ Dictionary<Expr, int> finalreachvars = m_GetPostconditionVariables(impl.Blocks,lb);
+ if (lv.Count < 1)
+ {
+
+ continue;
+ }
+
+ Contract.Assert(lv != null);
+ _totalchecks++;
+
+
+ if (!dc.CheckLabel(lv,finalreachvars, out outcome)) {
+ return Outcome.Inconclusive;
+ }
+ ts += dc.DEBUG_ProverTime.Elapsed;
+
+ if (restartTP)
+ {
+ checker.Close();
+ checker = FindCheckerFor(1000);
+ dc.RespawnChecker(impl, checker);
+ dc.ErrorHandler = new DoomErrorHandler(dc.Label2Absy, callback);
+ }
+
+ }
+ checker.Close();
+
+ if (_print_time)
+ {
+ Console.WriteLine("Number of Checkes / #Blocks: {0} of {1}", _totalchecks, impl.Blocks.Count);
+ dc.__DEBUG_PrintStatistics();
+ Console.WriteLine("Total time for this method: {0}", ts.ToString());
+ }
+ #region Try to produce a counter example (brute force)
+ if (dc.DoomedSequences.Count > 0) {
+ int counter = 0;
+ List<Block> _all = new List<Block>();
+ foreach (List<Block> lb_ in dc.DoomedSequences)
+ {
+ foreach (Block b_ in lb_)
+ {
+ if (!_all.Contains(b_) && !m_UncheckableBlocks.Contains(b_))
+ {
+ _all.Add(b_); counter++;
+ if (!_print_time) Console.WriteLine(b_.Label);
+ }
+ }
+ }
+ if (_all.Count > 0)
+ {
+ Console.WriteLine("#Dead Blocks found: {0}: ", counter);
+ return Outcome.Errors;
+ }
+ }
+ #endregion
+
+
+ return Outcome.Correct;
+ }
+
+ private Dictionary<Expr, int> m_GetPostconditionVariables(List<Block> allblock, List<Block> passBlock)
+ {
+ Dictionary<Expr, int> r = new Dictionary<Expr, int>();
+ foreach (Block b in allblock)
+ {
+ Variable v;
+ if (m_BlockReachabilityMap.TryGetValue(b, out v))
+ {
+ if (passBlock.Contains(b)) r[m_LastReachVarIncarnation[v]] = 1;
+ }
+ else
+ {
+ Console.WriteLine("there is no reachability variable for {0}", b.Label);
+ }
+ }
+ return r;
+ }
+
+#if false
+ #region Error message construction
+ private void SearchCounterexample(Implementation impl, DoomErrorHandler errh, VerifierCallback callback) {
+ Contract.Requires(impl != null);
+ Contract.Requires(errh != null);
+ Contract.Requires(callback != null);
+ Contract.Requires(errh.m_Reachvar != null);
+ //if (errh.m_Reachvar==null) {
+ // Contract.Assert(false);throw new cce.UnreachableException();
+ //}
+ m_doomedCmds.Clear();
+
+ Dictionary<Block, List<Cmd>> cmdbackup = new Dictionary<Block, List<Cmd>>();
+
+ BruteForceCESearch(errh.m_Reachvar, impl, callback, cmdbackup, 0, impl.Blocks.Count / 2 - 1);
+ BruteForceCESearch(errh.m_Reachvar, impl, callback, cmdbackup, impl.Blocks.Count / 2, impl.Blocks.Count - 1);
+
+ List<Cmd> causals = CollectCausalStatements(impl.Blocks[0]);
+ foreach (Cmd c in causals) {
+ Contract.Assert(c != null);
+ GenerateErrorMessage(c, causals);
+ }
+
+ #region Undo all modifications
+ foreach (KeyValuePair<Block, List<Cmd>> kvp in cmdbackup) {
+ Contract.Assert(kvp.Key != null);
+ Contract.Assert(kvp.Value != null);
+ kvp.Key.Cmds = kvp.Value;
+ }
+ #endregion
+ }
+
+ #region Causal Statement Tree
+
+ private void GenerateErrorMessage(Cmd causalStatement, List<Cmd> causals) {
+ Contract.Requires(causalStatement != null);
+ Contract.Requires(cce.NonNullElements(causals));
+ AssumeCmd uc = causalStatement as AssumeCmd;
+ AssertCmd ac = causalStatement as AssertCmd;
+ ConsoleColor col = Console.ForegroundColor;
+
+ // Trivial case. Must be either assume or assert false
+ if (m_doomedCmds.Count == 1) {
+ Console.WriteLine("Found a trivial error:");
+ if (uc != null) {
+ Console.Write("Trivial false assumption: ");
+ Console.Write("({0};{1}):", uc.tok.line, uc.tok.col);
+ }
+ if (ac != null) {
+ Console.Write("Trivial false assertion: ");
+ Console.Write("({0};{1}):", ac.tok.line, ac.tok.col);
+ }
+ causalStatement.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
+ } else {
+ // Safety error
+ if (ac != null) {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("Safety error:");
+ Console.ForegroundColor = col;
+ Console.Write("This assertion is violated: ");
+ Console.Write("({0};{1}):", ac.tok.line, ac.tok.col);
+ ac.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
+ }
+ if (uc != null) {
+ bool containsAssert = false;
+ foreach (Cmd c in m_doomedCmds) {
+ Contract.Assert(c != null);
+ if (causals.Contains(c)) {
+ continue;
+ }
+ AssertCmd asrt = c as AssertCmd;
+ if (asrt != null) {
+ containsAssert = true;
+ break;
+ }
+ }
+ // Plausibility error
+ if (containsAssert) {
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Console.WriteLine("Plausibility error:");
+ Console.ForegroundColor = col;
+ Console.Write("There is no legal exeuction passing: ");
+ Console.Write("({0};{1})", uc.tok.line, uc.tok.col);
+ uc.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
+ } else { // Reachability error
+ Console.ForegroundColor = ConsoleColor.DarkRed;
+ Console.WriteLine("Reachability error:");
+ Console.ForegroundColor = col;
+ Console.Write("No execution can reach: ");
+ Console.Write("({0};{1})", uc.tok.line, uc.tok.col);
+ uc.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
+ }
+
+ }
+
+ Console.ForegroundColor = ConsoleColor.White;
+ Console.WriteLine("...on any execution passing through:");
+ foreach (Cmd c in m_doomedCmds) {
+ Contract.Assert(c != null);
+ if (causals.Contains(c)) {
+ continue;
+ }
+ Console.ForegroundColor = col;
+ Console.Write("In ({0};{1}): ", c.tok.line, c.tok.col);
+ Console.ForegroundColor = ConsoleColor.DarkYellow;
+ c.Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
+ }
+ Console.ForegroundColor = col;
+ Console.WriteLine("--");
+
+ }
+ }
+
+ private List<Cmd> CollectCausalStatements(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Cmd>>()));
+
+ Cmd lastCausal = null;
+ foreach (Cmd c in b.Cmds) {
+ Contract.Assert(c != null);
+ AssertCmd ac = c as AssertCmd;
+ AssumeCmd uc = c as AssumeCmd;
+ if (ac != null && !ContainsReachVariable(ac)) {
+ if (ac.Expr != Expr.True) {
+ lastCausal = c;
+ }
+ } else if (uc != null && !ContainsReachVariable(uc)) {
+ lastCausal = c;
+ }
+ }
+
+ List<Cmd> causals = new List<Cmd>();
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ if (gc != null && gc.labelTargets != null) {
+ List<Cmd> tmp;
+ //bool allcausal = true;
+ foreach (Block b_ in gc.labelTargets) {
+ Contract.Assert(b_ != null);
+ tmp = CollectCausalStatements(b_);
+
+ foreach (Cmd cau in tmp) {
+ if (!causals.Contains(cau))
+ causals.Add(cau);
+ }
+ }
+ //if (allcausal)
+ if (causals.Count > 0)
+ return causals;
+ }
+ if (lastCausal != null)
+ causals.Add(lastCausal);
+ return causals;
+ }
+
+ #endregion
+
+ bool BruteForceCESearch(Variable reachvar, Implementation impl, VerifierCallback callback,
+ Dictionary<Block, List<Cmd>> cmdbackup, int startidx, int endidx) {
+ Contract.Requires(reachvar != null);
+ Contract.Requires(impl != null);
+ Contract.Requires(callback != null);
+ Contract.Requires(cce.NonNullElements(cmdbackup));
+ #region Modify implementation
+ for (int i = startidx; i <= endidx; i++) {
+ if (_copiedBlock.Contains(impl.Blocks[i]))
+ continue;
+ List<Cmd> cs = new List<Cmd>();
+ cmdbackup.Add(impl.Blocks[i], impl.Blocks[i].Cmds);
+ foreach (Cmd c in impl.Blocks[i].Cmds) {
+ Contract.Assert(c != null);
+ if (ContainsReachVariable(c)) {
+ cs.Add(c);
+ continue;
+ }
+ AssertCmd ac = c as AssertCmd;
+ AssumeCmd uc = c as AssumeCmd;
+ if (ac != null) {
+ cs.Add(new AssertCmd(ac.tok, Expr.True));
+ } else if (uc != null) {
+ cs.Add(new AssertCmd(uc.tok, Expr.True));
+ } else {
+ cs.Add(c);
+ }
+ }
+ impl.Blocks[i].Cmds = cs;
+ }
+ #endregion
+
+ ProverInterface.Outcome outcome = ProverInterface.Outcome.Undetermined;
+ if (!ReCheckImpl(reachvar, impl, callback, out outcome)) {
+ UndoBlockModifications(impl, cmdbackup, startidx, endidx);
+ return false;
+ }
+ if (outcome == ProverInterface.Outcome.Valid) {
+ return true;
+ } else if (outcome == ProverInterface.Outcome.Invalid) {
+ UndoBlockModifications(impl, cmdbackup, startidx, endidx);
+ int mid = startidx + (endidx - startidx) / 2;
+ if (startidx >= endidx) {
+ // Now we found an interesting Block and we have to
+ // search for the interesting statements.
+ int cmdcount = impl.Blocks[endidx].Cmds.Length;
+ BruteForceCmd(impl.Blocks[endidx], 0, cmdcount / 2 - 1, reachvar, impl, callback);
+ BruteForceCmd(impl.Blocks[endidx], cmdcount / 2, cmdcount - 1, reachvar, impl, callback);
+ return true;
+ } else {
+ BruteForceCESearch(reachvar, impl, callback, cmdbackup, startidx, mid);
+ BruteForceCESearch(reachvar, impl, callback, cmdbackup, mid + 1, endidx);
+ return true;
+ }
+ } else {
+ UndoBlockModifications(impl, cmdbackup, startidx, endidx);
+ return false;
+ }
+ }
+
+ bool BruteForceCmd(Block b, int startidx, int endidx, Variable reachvar,
+ Implementation impl, VerifierCallback callback) {
+ Contract.Requires(b != null);
+ Contract.Requires(reachvar != null);
+ Contract.Requires(impl != null);
+ Contract.Requires(callback != null);
+ #region Modify Cmds
+ List<Cmd> backup = b.Cmds;
+ Contract.Assert(backup != null);
+ List<Cmd> cs = new List<Cmd>();
+ for (int i = 0; i < startidx; i++) {
+ cs.Add(b.Cmds[i]);
+ }
+ for (int i = startidx; i <= endidx; i++) {
+ Cmd c = b.Cmds[i];
+ if (ContainsReachVariable(c)) {
+ cs.Add(c);
+ continue;
+ }
+ cs.Add(new AssertCmd(c.tok, Expr.True));
+ }
+ for (int i = endidx + 1; i < b.Cmds.Length; i++) {
+ cs.Add(b.Cmds[i]);
+ }
+
+ b.Cmds = cs;
+ #endregion
+
+ #region Recheck
+ ProverInterface.Outcome outcome = ProverInterface.Outcome.Undetermined;
+ if (!ReCheckImpl(reachvar, impl, callback, out outcome)) {
+ b.Cmds = backup;
+ return false;
+ }
+ #endregion
+
+ if (outcome == ProverInterface.Outcome.Valid) {
+ return true;
+ } else if (outcome == ProverInterface.Outcome.Invalid) {
+ b.Cmds = backup;
+ if (startidx >= endidx) {
+ if (!ContainsReachVariable(b.Cmds[endidx])) {
+ // Console.Write(" Witness (");
+ //
+ // ConsoleColor col = Console.ForegroundColor;
+ // Console.ForegroundColor = ConsoleColor.White;
+ // Console.Write("{0};{1}", b.Cmds[endidx].tok.line, b.Cmds[endidx].tok.col );
+ // Console.ForegroundColor = col;
+ // Console.Write("): ");
+ // Console.ForegroundColor = ConsoleColor.Yellow;
+ // b.Cmds[endidx].Emit(new TokenTextWriter("<console>", Console.Out, false), 0);
+ // Console.ForegroundColor = col;
+
+ m_doomedCmds.Add(b.Cmds[endidx]);
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ int mid = startidx + (endidx - startidx) / 2;
+ BruteForceCmd(b, startidx, mid, reachvar, impl, callback);
+ BruteForceCmd(b, mid + 1, endidx, reachvar, impl, callback);
+ return false; // This is pure random
+ }
+ } else {
+ b.Cmds = backup;
+ return false;
+ }
+ }
+
+ void UndoBlockModifications(Implementation impl, Dictionary<Block/*!*/, List<Cmd>/*!*/>/*!*/ cmdbackup,
+ int startidx, int endidx) {
+ Contract.Requires(cce.NonNullElements(cmdbackup));
+ Contract.Requires(impl != null);
+ for (int i = startidx; i <= endidx; i++) {
+ List<Cmd> cs = null;
+ if (cmdbackup.TryGetValue(impl.Blocks[i], out cs)) {
+ Contract.Assert(cs != null);
+ impl.Blocks[i].Cmds = cs;
+ cmdbackup.Remove(impl.Blocks[i]);
+ }
+ }
+ }
+
+ bool ReCheckImpl(Variable reachvar, Implementation impl, VerifierCallback callback,
+ out ProverInterface.Outcome outcome) {
+ Contract.Requires(reachvar != null);
+ Contract.Requires(impl != null);
+ Contract.Requires(callback != null);
+ Checker checker = FindCheckerFor(impl, 1000);
+ Contract.Assert(checker != null);
+ DoomCheck dc = new DoomCheck(impl, this.exitBlock, checker, m_UncheckableBlocks);
+ dc.ErrorHandler = new DoomErrorHandler(dc.Label2Absy, callback);
+ outcome = ProverInterface.Outcome.Undetermined;
+ List<Variable> rv = new List<Variable>();
+ rv.Add(reachvar);
+ if (!dc.CheckLabel(rv,null, out outcome)) {
+ checker.Close();
+ return false;
+ }
+ checker.Close();
+ return true;
+ }
+
+
+
+ bool ContainsReachVariable(Cmd c) {
+ Contract.Requires(c != null);
+ AssertCmd artc = c as AssertCmd;
+ AssumeCmd amec = c as AssumeCmd;
+ Expr e;
+ if (artc != null) {
+ e = artc.Expr;
+ } else if (amec != null) {
+ e = amec.Expr;
+ } else {
+ return false;
+ }
+ Set freevars = new Set();
+ e.ComputeFreeVariables(freevars);
+ foreach (Variable v in freevars) {
+ Contract.Assert(v != null);
+ if (v.Name.Contains(reachvarsuffix))
+ return true;
+ }
+ return false;
+ }
+#endregion
+#endif
+
+
+ Block exitBlock;
+
+ #region Program Passification
+ private void GenerateHelperBlocks(Implementation impl) {
+ Contract.Requires(impl != null);
+ Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins = new Dictionary<TransferCmd, ReturnCmd>();
+ exitBlock = GenerateUnifiedExit(impl, gotoCmdOrigins);
+ Contract.Assert(exitBlock != null);
+
+ AddBlocksBetween(impl.Blocks);
+
+ #region Insert pre- and post-conditions and where clauses as assume and assert statements
+ {
+ List<Cmd> cc = new List<Cmd>();
+ // where clauses of global variables
+ foreach (var gvar in program.GlobalVariables) {
+ if (gvar.TypedIdent.WhereExpr != null) {
+ Cmd c = new AssumeCmd(gvar.tok, gvar.TypedIdent.WhereExpr);
+ cc.Add(c);
+ }
+ }
+ // where clauses of in- and out-parameters
+ cc.AddRange(GetParamWhereClauses(impl));
+ // where clauses of local variables
+ foreach (Variable lvar in impl.LocVars) {
+ Contract.Assert(lvar != null);
+ if (lvar.TypedIdent.WhereExpr != null) {
+ Cmd c = new AssumeCmd(lvar.tok, lvar.TypedIdent.WhereExpr);
+ cc.Add(c);
+ }
+ }
+
+ // add cc and the preconditions to new blocks preceding impl.Blocks[0]
+ InjectPreconditions(impl, cc);
+
+ // append postconditions, starting in exitBlock and continuing into other blocks, if needed
+ InjectPostConditions(impl, exitBlock, gotoCmdOrigins);
+ }
+ #endregion
+ }
+
+
+ private Dictionary<Variable, Expr> PassifyProgram(Implementation impl, ModelViewInfo mvInfo) {
+ Contract.Requires(impl != null);
+ Contract.Requires(mvInfo != null);
+ Contract.Requires(this.exitBlock != null);
+ Contract.Ensures(Contract.Result<Hashtable>() != null);
+
+ CurrentLocalVariables = impl.LocVars;
+ return Convert2PassiveCmd(impl, mvInfo);
+ //return new Hashtable();
+ }
+
+ /// <summary>
+ /// Add additional variable to allow checking as described in the paper
+ /// "It's doomed; we can prove it"
+ /// </summary>
+ private List<Cmd> GenerateReachabilityPredicates(Implementation impl)
+ {
+ Contract.Requires(impl != null);
+
+ foreach (Block b in impl.Blocks)
+ {
+ Contract.Assert(b != null);
+ //if (b.Predecessors.Length==0) continue;
+ //if (b.Cmds.Length == 0 ) continue;
+
+ Variable v_ = new LocalVariable(Token.NoToken,
+ new TypedIdent(b.tok, b.Label + reachvarsuffix, new BasicType(SimpleType.Int )));
+
+ impl.LocVars.Add(v_);
+
+ m_BlockReachabilityMap[b] = v_;
+
+ IdentifierExpr lhs = new IdentifierExpr(b.tok, v_);
+ Contract.Assert(lhs != null);
+
+ impl.Proc.Modifies.Add(lhs);
+
+ List<AssignLhs> lhsl = new List<AssignLhs>();
+ lhsl.Add(new SimpleAssignLhs(Token.NoToken, lhs));
+ List<Expr> rhsl = new List<Expr>();
+ rhsl.Add(Expr.Literal(1) );
+
+
+ List<Cmd> cs = new List<Cmd> { new AssignCmd(Token.NoToken, lhsl, rhsl) };
+ cs.AddRange(b.Cmds);
+ b.Cmds = cs;
+
+ //checkBlocks.Add(new CheckableBlock(v_,b));
+ }
+
+ List<Cmd> incReachVars = new List<Cmd>();
+ foreach (KeyValuePair<Block, Variable> kvp in m_BlockReachabilityMap)
+ {
+ IdentifierExpr lhs = new IdentifierExpr(Token.NoToken, kvp.Value);
+ impl.Proc.Modifies.Add(lhs);
+ incReachVars.Add(new AssumeCmd(Token.NoToken, Expr.Le(lhs, Expr.Literal(1))));
+ }
+
+ return incReachVars;
+ }
+
+ #endregion
+
+ #region Compute loop-free approximation
+
+ // this might be redundant, but I didn't find a better place to get this information.
+ private Dictionary<Variable, Expr> m_LastReachVarIncarnation = new Dictionary<Variable, Expr>();
+
+ private void Transform4DoomedCheck(Implementation impl)
+ {
+ variable2SequenceNumber = new Dictionary<Variable, int>();
+ incarnationOriginMap = new Dictionary<Incarnation, Absy>();
+ if (impl.Blocks.Count < 1) return;
+
+ impl.PruneUnreachableBlocks();
+ AddBlocksBetween(impl.Blocks);
+ ResetPredecessors(impl.Blocks);
+
+ GraphAnalyzer ga = new GraphAnalyzer(impl.Blocks);
+ LoopRemover lr = new LoopRemover(ga);
+ lr.AbstractLoopUnrolling();
+
+ impl.Blocks = ga.ToImplementation(out m_UncheckableBlocks);
+ ResetPredecessors(impl.Blocks);
+
+ // Check for the "BlocksBetween" if all their successors are in m_UncheckableBlocks
+ List<Block> oldblocks = new List<Block>();
+ oldblocks.AddRange(impl.Blocks);
+ GenerateHelperBlocks(impl);
+ #region Check for the "BlocksBetween" if all their successors are in m_UncheckableBlocks
+ foreach (Block b in impl.Blocks)
+ {
+ if (oldblocks.Contains(b)) continue;
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ if (gc != null)
+ {
+ bool allsuccUncheckable = true;
+ foreach (Block _b in gc.labelTargets)
+ {
+ if (!m_UncheckableBlocks.Contains(_b))
+ {
+ allsuccUncheckable = false; break;
+ }
+ }
+ if (allsuccUncheckable && !m_UncheckableBlocks.Contains(b)) m_UncheckableBlocks.Add(b);
+ }
+ }
+ #endregion
+
+ impl.Blocks = DeepCopyBlocks(impl.Blocks, m_UncheckableBlocks);
+
+ m_BlockReachabilityMap = new Dictionary<Block, Variable>();
+ List<Cmd> cs = GenerateReachabilityPredicates(impl);
+
+ //foreach (Block test in getTheFFinalBlock(impl.Blocks[0]))
+ //{
+ // test.Cmds.AddRange(cs);
+ //}
+
+ ResetPredecessors(impl.Blocks);
+ //EmitImpl(impl,false);
+
+ Dictionary<Variable, Expr> var2Expr = PassifyProgram(impl, new ModelViewInfo(program, impl));
+
+ // Collect the last incarnation of each reachability variable in the passive program
+ foreach (KeyValuePair<Block, Variable> kvp in m_BlockReachabilityMap)
+ {
+ if (var2Expr.ContainsKey(kvp.Value))
+ {
+ m_LastReachVarIncarnation[kvp.Value] = (Expr)var2Expr[kvp.Value];
+ }
+ }
+ }
+
+
+ List<Block> getTheFFinalBlock(Block b)
+ {
+ List<Block> lb = new List<Block>();
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ if (gc == null) lb.Add(b);
+ else
+ {
+ foreach (Block s in gc.labelTargets)
+ {
+ foreach (Block r in getTheFFinalBlock(s)) if (!lb.Contains(r)) lb.Add(r);
+ }
+ }
+ return lb;
+ }
+
+
+ private List<Block> DeepCopyBlocks(List<Block> lb, List<Block> uncheckables)
+ {
+ List<Block> clones = new List<Block>();
+ List<Block> uncheck_ = new List<Block>();
+ Dictionary<Block, Block> clonemap = new Dictionary<Block, Block>();
+
+ foreach (Block b in lb)
+ {
+ Block clone = CloneBlock(b);
+ clones.Add(clone);
+ clonemap[b] = clone;
+ if (uncheckables.Contains(b)) uncheck_.Add(clone);
+ }
+ uncheckables.Clear();
+ uncheckables.AddRange(uncheck_);
+ // update the successors and predecessors
+ foreach (Block b in lb)
+ {
+ List<Block> newpreds = new List<Block>();
+ foreach (Block b_ in b.Predecessors)
+ {
+ newpreds.Add(clonemap[b_]);
+ }
+ clonemap[b].Predecessors = newpreds;
+ GotoCmd gc = b.TransferCmd as GotoCmd;
+ ReturnCmd rc = b.TransferCmd as ReturnCmd;
+ if (gc != null)
+ {
+ List<String> lseq = new List<String>();
+ List<Block> bseq = new List<Block>();
+ foreach (string s in gc.labelNames) lseq.Add(s);
+ foreach (Block b_ in gc.labelTargets) bseq.Add(clonemap[b_]);
+ GotoCmd tcmd = new GotoCmd(gc.tok, lseq, bseq);
+ clonemap[b].TransferCmd = tcmd;
+ }
+ else if (rc != null)
+ {
+ clonemap[b].TransferCmd = new ReturnCmd(rc.tok);
+ }
+ }
+ return clones;
+ }
+
+ private Block CloneBlock(Block b)
+ {
+ Block clone = new Block(b.tok, b.Label, b.Cmds, b.TransferCmd);
+ if (this.exitBlock == b) this.exitBlock = clone;
+ return clone;
+ }
+ #endregion
+ }
+}
diff --git a/Source/ExecutionEngine/ExecutionEngine.cs b/Source/ExecutionEngine/ExecutionEngine.cs
index 31a69c6e..9bc855be 100644
--- a/Source/ExecutionEngine/ExecutionEngine.cs
+++ b/Source/ExecutionEngine/ExecutionEngine.cs
@@ -1,1760 +1,1826 @@
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.IO;
-using System.Linq;
-using System.Text.RegularExpressions;
-using System.Threading;
-using System.Threading.Tasks;
-using VC;
-using BoogiePL = Microsoft.Boogie;
-using System.Diagnostics;
-using System.Runtime.Caching;
-
-namespace Microsoft.Boogie
-{
-
- #region Output printing
-
- public interface OutputPrinter
- {
- void ErrorWriteLine(TextWriter tw, string s);
- void ErrorWriteLine(TextWriter tw, string format, params object[] args);
- void AdvisoryWriteLine(string format, params object[] args);
- void Inform(string s, TextWriter tw);
- void WriteTrailer(PipelineStatistics stats);
- void WriteErrorInformation(ErrorInformation errorInfo, TextWriter tw, bool skipExecutionTrace = true);
- void ReportBplError(IToken tok, string message, bool error, TextWriter tw, string category = null);
- }
-
-
- public class ConsolePrinter : OutputPrinter
- {
- public void ErrorWriteLine(TextWriter tw, string s)
- {
- Contract.Requires(s != null);
- if (!s.Contains("Error: ") && !s.Contains("Error BP"))
- {
- tw.WriteLine(s);
- return;
- }
-
- // split the string up into its first line and the remaining lines
- string remaining = null;
- int i = s.IndexOf('\r');
- if (0 <= i)
- {
- remaining = s.Substring(i + 1);
- if (remaining.StartsWith("\n"))
- {
- remaining = remaining.Substring(1);
- }
- s = s.Substring(0, i);
- }
-
- ConsoleColor col = Console.ForegroundColor;
- Console.ForegroundColor = ConsoleColor.Red;
- tw.WriteLine(s);
- Console.ForegroundColor = col;
-
- if (remaining != null)
- {
- tw.WriteLine(remaining);
- }
- }
-
-
- public void ErrorWriteLine(TextWriter tw, string format, params object[] args)
- {
- Contract.Requires(format != null);
- string s = string.Format(format, args);
- ErrorWriteLine(tw, s);
- }
-
-
- public void AdvisoryWriteLine(string format, params object[] args)
- {
- Contract.Requires(format != null);
- ConsoleColor col = Console.ForegroundColor;
- Console.ForegroundColor = ConsoleColor.Yellow;
- Console.WriteLine(format, args);
- Console.ForegroundColor = col;
- }
-
-
- /// <summary>
- /// Inform the user about something and proceed with translation normally.
- /// Print newline after the message.
- /// </summary>
- public void Inform(string s, TextWriter tw)
- {
- if (CommandLineOptions.Clo.Trace || CommandLineOptions.Clo.TraceProofObligations)
- {
- tw.WriteLine(s);
- }
- }
-
-
- public void WriteTrailer(PipelineStatistics stats)
- {
- Contract.Requires(stats != null);
- Contract.Requires(0 <= stats.VerifiedCount && 0 <= stats.ErrorCount && 0 <= stats.InconclusiveCount && 0 <= stats.TimeoutCount && 0 <= stats.OutOfMemoryCount);
-
- Console.WriteLine();
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed)
- {
- Console.Write("{0} finished with {1} credible, {2} doomed{3}", CommandLineOptions.Clo.DescriptiveToolName, stats.VerifiedCount, stats.ErrorCount, stats.ErrorCount == 1 ? "" : "s");
- }
- else
- {
- Console.Write("{0} finished with {1} verified, {2} error{3}", CommandLineOptions.Clo.DescriptiveToolName, stats.VerifiedCount, stats.ErrorCount, stats.ErrorCount == 1 ? "" : "s");
- }
- if (stats.InconclusiveCount != 0)
- {
- Console.Write(", {0} inconclusive{1}", stats.InconclusiveCount, stats.InconclusiveCount == 1 ? "" : "s");
- }
- if (stats.TimeoutCount != 0)
- {
- Console.Write(", {0} time out{1}", stats.TimeoutCount, stats.TimeoutCount == 1 ? "" : "s");
- }
- if (stats.OutOfMemoryCount != 0)
- {
- Console.Write(", {0} out of memory", stats.OutOfMemoryCount);
- }
- Console.WriteLine();
- Console.Out.Flush();
- }
-
-
- public void WriteErrorInformation(ErrorInformation errorInfo, TextWriter tw, bool skipExecutionTrace = true)
- {
- Contract.Requires(errorInfo != null);
-
- ReportBplError(errorInfo.Tok, errorInfo.FullMsg, true, tw);
-
- foreach (var e in errorInfo.Aux)
- {
- if (!(skipExecutionTrace && e.Category.Contains("Execution trace")))
- {
- ReportBplError(e.Tok, e.FullMsg, false, tw);
- }
- }
-
- tw.Write(errorInfo.Out.ToString());
- tw.Write(errorInfo.Model.ToString());
- tw.Flush();
- }
-
-
- public virtual void ReportBplError(IToken tok, string message, bool error, TextWriter tw, string category = null)
- {
- Contract.Requires(message != null);
-
- if (category != null)
- {
- message = string.Format("{0}: {1}", category, message);
- }
- string s;
- if (tok != null)
- {
- s = string.Format("{0}({1},{2}): {3}", ExecutionEngine.GetFileNameForConsole(tok.filename), tok.line, tok.col, message);
- }
- else
- {
- s = message;
- }
- if (error)
- {
- ErrorWriteLine(tw, s);
- }
- else
- {
- tw.WriteLine(s);
- }
- }
- }
-
- #endregion
-
-
- public enum PipelineOutcome
- {
- Done,
- ResolutionError,
- TypeCheckingError,
- ResolvedAndTypeChecked,
- FatalError,
- VerificationCompleted
- }
-
-
- public class PipelineStatistics
- {
- public int ErrorCount;
- public int VerifiedCount;
- public int InconclusiveCount;
- public int TimeoutCount;
- public int OutOfMemoryCount;
- public long[] CachingActionCounts;
- public int CachedErrorCount;
- public int CachedVerifiedCount;
- public int CachedInconclusiveCount;
- public int CachedTimeoutCount;
- public int CachedOutOfMemoryCount;
- }
-
-
- #region Error reporting
-
- public delegate void ErrorReporterDelegate(ErrorInformation errInfo);
-
-
- public enum ErrorKind
- {
- Assertion,
- Precondition,
- Postcondition,
- InvariantEntry,
- InvariantMaintainance
- }
-
-
- public class ErrorInformationFactory
- {
- public virtual ErrorInformation CreateErrorInformation(IToken tok, string msg, string requestId = null, string originalRequestId = null, string category = null)
- {
- Contract.Requires(1 <= tok.line && 1 <= tok.col);
- Contract.Requires(msg != null);
-
- return ErrorInformation.CreateErrorInformation(tok, msg, requestId, originalRequestId, category);
- }
- }
-
-
- public class ErrorInformation
- {
- public readonly IToken Tok;
- public string Msg;
- public string Category { get; set; }
- public string BoogieErrorCode { get; set; }
- public readonly List<AuxErrorInfo> Aux = new List<AuxErrorInfo>();
- public string OriginalRequestId { get; set; }
- public string RequestId { get; set; }
- public ErrorKind Kind { get; set; }
- public string ImplementationName { get; set; }
- public TextWriter Out = new StringWriter();
- public TextWriter Model = new StringWriter();
-
- public string FullMsg
- {
- get
- {
- var prefix = Category;
- if (BoogieErrorCode != null)
- {
- prefix = prefix == null ? BoogieErrorCode : prefix + " " + BoogieErrorCode;
- }
- return prefix != null ? string.Format("{0}: {1}", prefix, Msg) : Msg;
- }
- }
-
- public struct AuxErrorInfo
- {
- public readonly IToken Tok;
- public readonly string Msg;
- public readonly string Category;
-
- public string FullMsg
- {
- get
- {
- return Category != null ? string.Format("{0}: {1}", Category, Msg) : Msg;
- }
- }
-
- public AuxErrorInfo(IToken tok, string msg, string category = null)
- {
- Tok = tok;
- Msg = CleanUp(msg);
- Category = category;
- }
- }
-
- protected ErrorInformation(IToken tok, string msg)
- {
- Contract.Requires(tok != null);
- Contract.Requires(1 <= tok.line && 1 <= tok.col);
- Contract.Requires(msg != null);
-
- Tok = tok;
- Msg = CleanUp(msg);
- }
-
- internal static ErrorInformation CreateErrorInformation(IToken tok, string msg, string requestId = null, string originalRequestId = null, string category = null)
- {
- var result = new ErrorInformation(tok, msg);
- result.RequestId = requestId;
- result.OriginalRequestId = originalRequestId;
- result.Category = category;
- return result;
- }
-
- public virtual void AddAuxInfo(IToken tok, string msg, string category = null)
- {
- Contract.Requires(tok != null);
- Contract.Requires(1 <= tok.line && 1 <= tok.col);
- Contract.Requires(msg != null);
- Aux.Add(new AuxErrorInfo(tok, msg, category));
- }
-
- protected static string CleanUp(string msg)
- {
- if (msg.ToLower().StartsWith("error: "))
- {
- return msg.Substring(7);
- }
- else
- {
- return msg;
- }
- }
- }
-
- #endregion
-
-
- public sealed class VerificationResult
- {
- public readonly string RequestId;
- public readonly string Checksum;
- public readonly string DependeciesChecksum;
- public readonly string ImplementationName;
- public readonly IToken ImplementationToken;
- public readonly string ProgramId;
-
- public DateTime Start { get; set; }
- public DateTime End { get; set; }
-
- public int ProofObligationCount { get { return ProofObligationCountAfter - ProofObligationCountBefore; } }
- public int ProofObligationCountBefore { get; set; }
- public int ProofObligationCountAfter { get; set; }
-
- public ConditionGeneration.Outcome Outcome { get; set; }
- public List<Counterexample> Errors;
-
- public ISet<byte[]> AssertionChecksums { get; private set; }
-
- public VerificationResult(string requestId, Implementation implementation, string programId = null)
- {
- Checksum = implementation.Checksum;
- DependeciesChecksum = implementation.DependencyChecksum;
- RequestId = requestId;
- ImplementationName = implementation.Name;
- ImplementationToken = implementation.tok;
- ProgramId = programId;
- AssertionChecksums = implementation.AssertionChecksums;
- }
- }
-
-
- public class PolymorphismChecker : ReadOnlyVisitor
- {
- bool isMonomorphic = true;
-
- public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node)
- {
- if (node.TypeParameters.Count > 0)
- isMonomorphic = false;
- return base.VisitDeclWithFormals(node);
- }
-
- public override BinderExpr VisitBinderExpr(BinderExpr node)
- {
- if (node.TypeParameters.Count > 0)
- isMonomorphic = false;
- return base.VisitBinderExpr(node);
- }
-
- public override MapType VisitMapType(MapType node)
- {
- if (node.TypeParameters.Count > 0)
- isMonomorphic = false;
- return base.VisitMapType(node);
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- BinaryOperator op = node.Fun as BinaryOperator;
- if (op != null && op.Op == BinaryOperator.Opcode.Subtype)
- isMonomorphic = false;
- return base.VisitNAryExpr(node);
- }
-
- public static bool IsMonomorphic(Program program)
- {
- var checker = new PolymorphismChecker();
- checker.VisitProgram(program);
- return checker.isMonomorphic;
- }
- }
-
- public class ExecutionEngine
- {
- public static OutputPrinter printer;
-
- public static ErrorInformationFactory errorInformationFactory = new ErrorInformationFactory();
-
- static int autoRequestIdCount;
-
- static readonly string AutoRequestIdPrefix = "auto_request_id_";
-
- public static string FreshRequestId()
- {
- var id = Interlocked.Increment(ref autoRequestIdCount);
- return AutoRequestIdPrefix + id;
- }
-
- public static int AutoRequestId(string id)
- {
- if (id.StartsWith(AutoRequestIdPrefix))
- {
- int result;
- if (int.TryParse(id.Substring(AutoRequestIdPrefix.Length), out result))
- {
- return result;
- }
- }
- return -1;
- }
-
- public readonly static VerificationResultCache Cache = new VerificationResultCache();
-
- static readonly MemoryCache programCache = new MemoryCache("ProgramCache");
- static readonly CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(0, 10, 0), Priority = CacheItemPriority.Default };
-
- public static Program CachedProgram(string programId)
- {
- var result = programCache.Get(programId) as Program;
- return result;
- }
-
- static List<Checker> Checkers = new List<Checker>();
-
- static DateTime FirstRequestStart;
-
- static readonly ConcurrentDictionary<string, TimeSpan> TimePerRequest = new ConcurrentDictionary<string, TimeSpan>();
- static readonly ConcurrentDictionary<string, PipelineStatistics> StatisticsPerRequest = new ConcurrentDictionary<string, PipelineStatistics>();
-
- static readonly ConcurrentDictionary<string, CancellationTokenSource> ImplIdToCancellationTokenSource = new ConcurrentDictionary<string, CancellationTokenSource>();
-
- static readonly ConcurrentDictionary<string, CancellationTokenSource> RequestIdToCancellationTokenSource = new ConcurrentDictionary<string, CancellationTokenSource>();
-
- public static void ProcessFiles(List<string> fileNames, bool lookForSnapshots = true, string programId = null)
- {
- Contract.Requires(cce.NonNullElements(fileNames));
-
- if (programId == null)
- {
- programId = "main_program_id";
- }
-
- if (CommandLineOptions.Clo.VerifySeparately && 1 < fileNames.Count)
- {
- foreach (var f in fileNames)
- {
- ProcessFiles(new List<string> { f }, lookForSnapshots, f);
- }
- return;
- }
-
- if (0 <= CommandLineOptions.Clo.VerifySnapshots && lookForSnapshots)
- {
- var snapshotsByVersion = LookForSnapshots(fileNames);
- foreach (var s in snapshotsByVersion)
- {
- ProcessFiles(new List<string>(s), false, programId);
- }
- return;
- }
-
- using (XmlFileScope xf = new XmlFileScope(CommandLineOptions.Clo.XmlSink, fileNames[fileNames.Count - 1]))
- {
- Program program = ParseBoogieProgram(fileNames, false);
- if (program == null)
- return;
- if (CommandLineOptions.Clo.PrintFile != null)
- {
- PrintBplFile(CommandLineOptions.Clo.PrintFile, program, false, true, CommandLineOptions.Clo.PrettyPrint);
- }
-
- LinearTypeChecker linearTypeChecker;
- MoverTypeChecker moverTypeChecker;
- PipelineOutcome oc = ResolveAndTypecheck(program, fileNames[fileNames.Count - 1], out linearTypeChecker, out moverTypeChecker);
- if (oc != PipelineOutcome.ResolvedAndTypeChecked)
- return;
-
- if (CommandLineOptions.Clo.PrintCFGPrefix != null)
- {
- foreach (var impl in program.Implementations)
- {
- using (StreamWriter sw = new StreamWriter(CommandLineOptions.Clo.PrintCFGPrefix + "." + impl.Name + ".dot"))
- {
- sw.Write(program.ProcessLoops(impl).ToDot());
- }
- }
- }
-
- if (CommandLineOptions.Clo.StratifiedInlining == 0)
- {
- Concurrency.Transform(linearTypeChecker, moverTypeChecker);
- (new LinearEraser()).VisitProgram(program);
- if (CommandLineOptions.Clo.OwickiGriesDesugaredOutputFile != null)
- {
- int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
- CommandLineOptions.Clo.PrintUnstructured = 1;
- PrintBplFile(CommandLineOptions.Clo.OwickiGriesDesugaredOutputFile, program, false, false, CommandLineOptions.Clo.PrettyPrint);
- CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
- }
- }
-
- EliminateDeadVariables(program);
-
- CoalesceBlocks(program);
-
- Inline(program);
-
- var stats = new PipelineStatistics();
- oc = InferAndVerify(program, stats, 1 < CommandLineOptions.Clo.VerifySnapshots ? programId : null);
- switch (oc)
- {
- case PipelineOutcome.Done:
- case PipelineOutcome.VerificationCompleted:
- printer.WriteTrailer(stats);
- break;
- default:
- break;
- }
- }
- }
-
- public static IList<IList<string>> LookForSnapshots(IList<string> fileNames)
- {
- Contract.Requires(fileNames != null);
-
- var result = new List<IList<string>>();
- for (int version = 0; true; version++)
- {
- var nextSnapshot = new List<string>();
- foreach (var name in fileNames)
- {
- var versionedName = name.Replace(Path.GetExtension(name), ".v" + version + Path.GetExtension(name));
- if (File.Exists(versionedName))
- {
- nextSnapshot.Add(versionedName);
- }
- }
- if (nextSnapshot.Any())
- {
- result.Add(nextSnapshot);
- }
- else
- {
- break;
- }
- }
- return result;
- }
-
-
- public static void CoalesceBlocks(Program program)
- {
- if (CommandLineOptions.Clo.CoalesceBlocks)
- {
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Coalescing blocks...");
- Microsoft.Boogie.BlockCoalescer.CoalesceBlocks(program);
- }
- }
-
-
- public static void CollectModSets(Program program)
- {
- if (CommandLineOptions.Clo.DoModSetAnalysis)
- {
- new ModSetCollector().DoModSetAnalysis(program);
- }
- }
-
-
- public static void EliminateDeadVariables(Program program)
- {
- Microsoft.Boogie.UnusedVarEliminator.Eliminate(program);
- }
-
-
- public static void PrintBplFile(string filename, Program program, bool allowPrintDesugaring, bool setTokens = true, bool pretty = false)
- {
- Contract.Requires(program != null);
- Contract.Requires(filename != null);
- bool oldPrintDesugaring = CommandLineOptions.Clo.PrintDesugarings;
- if (!allowPrintDesugaring)
- {
- CommandLineOptions.Clo.PrintDesugarings = false;
- }
- using (TokenTextWriter writer = filename == "-" ?
- new TokenTextWriter("<console>", Console.Out, setTokens, pretty) :
- new TokenTextWriter(filename, setTokens, pretty))
- {
- if (CommandLineOptions.Clo.ShowEnv != CommandLineOptions.ShowEnvironment.Never)
- {
- writer.WriteLine("// " + CommandLineOptions.Clo.Version);
- writer.WriteLine("// " + CommandLineOptions.Clo.Environment);
- }
- writer.WriteLine();
- program.Emit(writer);
- }
- CommandLineOptions.Clo.PrintDesugarings = oldPrintDesugaring;
- }
-
-
- /// <summary>
- /// Parse the given files into one Boogie program. If an I/O or parse error occurs, an error will be printed
- /// and null will be returned. On success, a non-null program is returned.
- /// </summary>
- public static Program ParseBoogieProgram(List<string> fileNames, bool suppressTraceOutput)
- {
- Contract.Requires(cce.NonNullElements(fileNames));
-
- Program program = null;
- bool okay = true;
- for (int fileId = 0; fileId < fileNames.Count; fileId++)
- {
- string bplFileName = fileNames[fileId];
- if (!suppressTraceOutput)
- {
- if (CommandLineOptions.Clo.XmlSink != null)
- {
- CommandLineOptions.Clo.XmlSink.WriteFileFragment(bplFileName);
- }
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Parsing " + GetFileNameForConsole(bplFileName));
- }
- }
-
- Program programSnippet;
- int errorCount;
- try
- {
- var defines = new List<string>() { "FILE_" + fileId };
- errorCount = Parser.Parse(bplFileName, defines, out programSnippet, CommandLineOptions.Clo.UseBaseNameForFileName);
- if (programSnippet == null || errorCount != 0)
- {
- Console.WriteLine("{0} parse errors detected in {1}", errorCount, GetFileNameForConsole(bplFileName));
- okay = false;
- continue;
- }
- }
- catch (IOException e)
- {
- printer.ErrorWriteLine(Console.Out, "Error opening file \"{0}\": {1}", GetFileNameForConsole(bplFileName), e.Message);
- okay = false;
- continue;
- }
- if (program == null)
- {
- program = programSnippet;
- }
- else if (programSnippet != null)
- {
- program.AddTopLevelDeclarations(programSnippet.TopLevelDeclarations);
- }
- }
- if (!okay)
- {
- return null;
- }
- else if (program == null)
- {
- return new Program();
- }
- else
- {
- return program;
- }
- }
-
- internal static string GetFileNameForConsole(string filename)
- {
- return (CommandLineOptions.Clo.UseBaseNameForFileName && !string.IsNullOrEmpty(filename) && filename != "<console>") ? System.IO.Path.GetFileName(filename) : filename;
- }
-
-
- /// <summary>
- /// Resolves and type checks the given Boogie program. Any errors are reported to the
- /// console. Returns:
- /// - Done if no errors occurred, and command line specified no resolution or no type checking.
- /// - ResolutionError if a resolution error occurred
- /// - TypeCheckingError if a type checking error occurred
- /// - ResolvedAndTypeChecked if both resolution and type checking succeeded
- /// </summary>
- public static PipelineOutcome ResolveAndTypecheck(Program program, string bplFileName, out LinearTypeChecker linearTypeChecker, out MoverTypeChecker moverTypeChecker)
- {
- Contract.Requires(program != null);
- Contract.Requires(bplFileName != null);
-
- linearTypeChecker = null;
- moverTypeChecker = null;
-
- // ---------- Resolve ------------------------------------------------------------
-
- if (CommandLineOptions.Clo.NoResolve)
- {
- return PipelineOutcome.Done;
- }
-
- int errorCount = program.Resolve();
- if (errorCount != 0)
- {
- Console.WriteLine("{0} name resolution errors detected in {1}", errorCount, GetFileNameForConsole(bplFileName));
- return PipelineOutcome.ResolutionError;
- }
-
- // ---------- Type check ------------------------------------------------------------
-
- if (CommandLineOptions.Clo.NoTypecheck)
- {
- return PipelineOutcome.Done;
- }
-
- errorCount = program.Typecheck();
- if (errorCount != 0)
- {
- Console.WriteLine("{0} type checking errors detected in {1}", errorCount, GetFileNameForConsole(bplFileName));
- return PipelineOutcome.TypeCheckingError;
- }
-
- if (PolymorphismChecker.IsMonomorphic(program))
- {
- CommandLineOptions.Clo.TypeEncodingMethod = CommandLineOptions.TypeEncoding.Monomorphic;
- }
-
- CollectModSets(program);
-
- moverTypeChecker = new MoverTypeChecker(program);
- moverTypeChecker.TypeCheck();
- if (moverTypeChecker.errorCount != 0)
- {
- Console.WriteLine("{0} type checking errors detected in {1}", moverTypeChecker.errorCount, GetFileNameForConsole(bplFileName));
- return PipelineOutcome.TypeCheckingError;
- }
-
- linearTypeChecker = new LinearTypeChecker(program);
- linearTypeChecker.TypeCheck();
- if (linearTypeChecker.errorCount == 0)
- {
- linearTypeChecker.Transform();
- }
- else
- {
- Console.WriteLine("{0} type checking errors detected in {1}", linearTypeChecker.errorCount, GetFileNameForConsole(bplFileName));
- return PipelineOutcome.TypeCheckingError;
- }
-
- if (CommandLineOptions.Clo.PrintFile != null && CommandLineOptions.Clo.PrintDesugarings)
- {
- // if PrintDesugaring option is engaged, print the file here, after resolution and type checking
- PrintBplFile(CommandLineOptions.Clo.PrintFile, program, true, true, CommandLineOptions.Clo.PrettyPrint);
- }
-
- return PipelineOutcome.ResolvedAndTypeChecked;
- }
-
-
- public static void Inline(Program program)
- {
- Contract.Requires(program != null);
-
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Inlining...");
-
- // Inline
- var TopLevelDeclarations = cce.NonNull(program.TopLevelDeclarations);
-
- if (CommandLineOptions.Clo.ProcedureInlining != CommandLineOptions.Inlining.None)
- {
- bool inline = false;
- foreach (var d in TopLevelDeclarations)
- {
- if ((d is Procedure || d is Implementation) && d.FindExprAttribute("inline") != null)
- {
- inline = true;
- }
- }
- if (inline)
- {
- foreach (var impl in TopLevelDeclarations.OfType<Implementation>())
- {
- impl.OriginalBlocks = impl.Blocks;
- impl.OriginalLocVars = impl.LocVars;
- }
- foreach (var impl in TopLevelDeclarations.OfType<Implementation>())
- {
- if (CommandLineOptions.Clo.UserWantsToCheckRoutine(impl.Name) && !impl.SkipVerification)
- {
- Inliner.ProcessImplementation(program, impl);
- }
- }
- foreach (var impl in TopLevelDeclarations.OfType<Implementation>())
- {
- impl.OriginalBlocks = null;
- impl.OriginalLocVars = null;
- }
- }
- }
- }
-
-
- /// <summary>
- /// Given a resolved and type checked Boogie program, infers invariants for the program
- /// and then attempts to verify it. Returns:
- /// - Done if command line specified no verification
- /// - FatalError if a fatal error occurred, in which case an error has been printed to console
- /// - VerificationCompleted if inference and verification completed, in which the out
- /// parameters contain meaningful values
- /// </summary>
- public static PipelineOutcome InferAndVerify(Program program,
- PipelineStatistics stats,
- string programId = null,
- ErrorReporterDelegate er = null, string requestId = null)
- {
- Contract.Requires(program != null);
- Contract.Requires(stats != null);
- Contract.Ensures(0 <= Contract.ValueAtReturn(out stats.InconclusiveCount) && 0 <= Contract.ValueAtReturn(out stats.TimeoutCount));
-
- if (requestId == null)
- {
- requestId = FreshRequestId();
- }
-
- var start = DateTime.UtcNow;
-
- #region Do some pre-abstract-interpretation preprocessing on the program
- // Doing lambda expansion before abstract interpretation means that the abstract interpreter
- // never needs to see any lambda expressions. (On the other hand, if it were useful for it
- // to see lambdas, then it would be better to more lambda expansion until after infererence.)
- if (CommandLineOptions.Clo.ExpandLambdas) {
- LambdaHelper.ExpandLambdas(program);
- //PrintBplFile ("-", program, true);
- }
- #endregion
-
- #region Infer invariants using Abstract Interpretation
-
- // Always use (at least) intervals, if not specified otherwise (e.g. with the "/noinfer" switch)
- if (CommandLineOptions.Clo.UseAbstractInterpretation)
- {
- if (!CommandLineOptions.Clo.Ai.J_Intervals && !CommandLineOptions.Clo.Ai.J_Trivial)
- {
- // use /infer:j as the default
- CommandLineOptions.Clo.Ai.J_Intervals = true;
- }
- }
- Microsoft.Boogie.AbstractInterpretation.NativeAbstractInterpretation.RunAbstractInterpretation(program);
-
- #endregion
-
- #region Do some post-abstract-interpretation preprocessing on the program (e.g., loop unrolling)
-
- if (CommandLineOptions.Clo.LoopUnrollCount != -1)
- {
- program.UnrollLoops(CommandLineOptions.Clo.LoopUnrollCount, CommandLineOptions.Clo.SoundLoopUnrolling);
- }
-
- Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo = null;
- if (CommandLineOptions.Clo.ExtractLoops)
- {
- extractLoopMappingInfo = program.ExtractLoops();
- }
-
- if (CommandLineOptions.Clo.PrintInstrumented)
- {
- program.Emit(new TokenTextWriter(Console.Out, CommandLineOptions.Clo.PrettyPrint));
- }
- #endregion
-
- if (!CommandLineOptions.Clo.Verify)
- {
- return PipelineOutcome.Done;
- }
-
- #region Run Houdini and verify
- if (CommandLineOptions.Clo.ContractInfer)
- {
- return RunHoudini(program, stats, er);
- }
- #endregion
-
- #region Select and prioritize implementations that should be verified
-
- var impls = program.Implementations.Where(
- impl => impl != null && CommandLineOptions.Clo.UserWantsToCheckRoutine(cce.NonNull(impl.Name)) && !impl.SkipVerification);
-
- // operate on a stable copy, in case it gets updated while we're running
- Implementation[] stablePrioritizedImpls = null;
- if (0 < CommandLineOptions.Clo.VerifySnapshots)
- {
- OtherDefinitionAxiomsCollector.Collect(program.Axioms);
- DependencyCollector.Collect(program);
- stablePrioritizedImpls = impls.OrderByDescending(
- impl => impl.Priority != 1 ? impl.Priority : Cache.VerificationPriority(impl)).ToArray();
- }
- else
- {
- stablePrioritizedImpls = impls.OrderByDescending(impl => impl.Priority).ToArray();
- }
-
- #endregion
-
- if (1 < CommandLineOptions.Clo.VerifySnapshots)
- {
- CachedVerificationResultInjector.Inject(program, stablePrioritizedImpls, requestId, programId, out stats.CachingActionCounts);
- }
-
- #region Verify each implementation
-
- var outputCollector = new OutputCollector(stablePrioritizedImpls);
- var outcome = PipelineOutcome.VerificationCompleted;
-
- try
- {
- var cts = new CancellationTokenSource();
- RequestIdToCancellationTokenSource.AddOrUpdate(requestId, cts, (k, ov) => cts);
-
- var tasks = new Task[stablePrioritizedImpls.Length];
- // We use this semaphore to limit the number of tasks that are currently executing.
- var semaphore = new SemaphoreSlim(CommandLineOptions.Clo.VcsCores);
-
- // Create a task per implementation.
- for (int i = 0; i < stablePrioritizedImpls.Length; i++)
- {
- var taskIndex = i;
- var id = stablePrioritizedImpls[taskIndex].Id;
-
- CancellationTokenSource old;
- if (ImplIdToCancellationTokenSource.TryGetValue(id, out old))
- {
- old.Cancel();
- }
- ImplIdToCancellationTokenSource.AddOrUpdate(id, cts, (k, ov) => cts);
-
- var t = new Task((dummy) =>
- {
- try
- {
- if (outcome == PipelineOutcome.FatalError)
- {
- return;
- }
- if (cts.Token.IsCancellationRequested)
- {
- cts.Token.ThrowIfCancellationRequested();
- }
- VerifyImplementation(program, stats, er, requestId, extractLoopMappingInfo, stablePrioritizedImpls, taskIndex, outputCollector, Checkers, programId);
- ImplIdToCancellationTokenSource.TryRemove(id, out old);
- }
- finally
- {
- semaphore.Release();
- }
- }, cts.Token, TaskCreationOptions.LongRunning);
- tasks[taskIndex] = t;
- }
-
- // Execute the tasks.
- int j = 0;
- for (; j < stablePrioritizedImpls.Length && outcome != PipelineOutcome.FatalError; j++)
- {
- try
- {
- semaphore.Wait(cts.Token);
- }
- catch (OperationCanceledException)
- {
- break;
- }
- tasks[j].Start(TaskScheduler.Default);
- }
-
- // Don't wait for tasks that haven't been started yet.
- tasks = tasks.Take(j).ToArray();
- Task.WaitAll(tasks);
- }
- catch (AggregateException ae)
- {
- ae.Handle(e =>
- {
- var pe = e as ProverException;
- if (pe != null)
- {
- printer.ErrorWriteLine(Console.Out, "Fatal Error: ProverException: {0}", e);
- outcome = PipelineOutcome.FatalError;
- return true;
- }
- var oce = e as OperationCanceledException;
- if (oce != null)
- {
- return true;
- }
- return false;
- });
- }
- finally
- {
- CleanupCheckers(requestId);
- }
-
- cce.NonNull(CommandLineOptions.Clo.TheProverFactory).Close();
-
- outputCollector.WriteMoreOutput();
-
- if (1 < CommandLineOptions.Clo.VerifySnapshots && programId != null)
- {
- program.FreezeTopLevelDeclarations();
- programCache.Set(programId, program, policy);
- }
-
- if (0 <= CommandLineOptions.Clo.VerifySnapshots && CommandLineOptions.Clo.TraceCachingForBenchmarking)
- {
- var end = DateTime.UtcNow;
- if (TimePerRequest.Count == 0)
- {
- FirstRequestStart = start;
- }
- TimePerRequest[requestId] = end.Subtract(start);
- StatisticsPerRequest[requestId] = stats;
-
- var printTimes = true;
-
- Console.Out.WriteLine(CachedVerificationResultInjector.Statistics.Output(printTimes));
-
- Console.Out.WriteLine("Statistics per request as CSV:");
- var actions = string.Join(", ", Enum.GetNames(typeof(VC.ConditionGeneration.CachingAction)));
- Console.Out.WriteLine("Request ID{0}, Error, E (C), Inconclusive, I (C), Out of Memory, OoM (C), Timeout, T (C), Verified, V (C), {1}", printTimes ? ", Time (ms)" : "", actions);
- foreach (var kv in TimePerRequest.OrderBy(kv => ExecutionEngine.AutoRequestId(kv.Key)))
- {
- var s = StatisticsPerRequest[kv.Key];
- var cacs = s.CachingActionCounts;
- var c = cacs != null ? ", " + cacs.Select(ac => string.Format("{0,3}", ac)).Concat(", ") : "";
- var t = printTimes ? string.Format(", {0,8:F0}", kv.Value.TotalMilliseconds) : "";
- Console.Out.WriteLine("{0,-19}{1}, {2,2}, {3,2}, {4,2}, {5,2}, {6,2}, {7,2}, {8,2}, {9,2}, {10,2}, {11,2}{12}", kv.Key, t, s.ErrorCount, s.CachedErrorCount, s.InconclusiveCount, s.CachedInconclusiveCount, s.OutOfMemoryCount, s.CachedOutOfMemoryCount, s.TimeoutCount, s.CachedTimeoutCount, s.VerifiedCount, s.CachedVerifiedCount, c);
- }
-
- if (printTimes)
- {
- Console.Out.WriteLine();
- Console.Out.WriteLine("Total time (ms) since first request: {0:F0}", end.Subtract(FirstRequestStart).TotalMilliseconds);
- }
- }
-
- #endregion
-
- if (SecureVCGen.outfile != null)
- SecureVCGen.outfile.Close();
-
- return outcome;
- }
-
- public static void CancelRequest(string requestId)
- {
- Contract.Requires(requestId != null);
-
- CancellationTokenSource cts;
- if (RequestIdToCancellationTokenSource.TryGetValue(requestId, out cts))
- {
- cts.Cancel();
-
- CleanupCheckers(requestId);
- }
- }
-
-
- private static void CleanupCheckers(string requestId)
- {
- if (requestId != null)
- {
- CancellationTokenSource old;
- RequestIdToCancellationTokenSource.TryRemove(requestId, out old);
- }
- lock (RequestIdToCancellationTokenSource)
- {
- if (RequestIdToCancellationTokenSource.IsEmpty)
- {
- lock (Checkers)
- {
- foreach (Checker checker in Checkers)
- {
- Contract.Assert(checker != null);
- checker.Close();
- }
- }
- }
- }
- }
-
-
- private static void VerifyImplementation(Program program, PipelineStatistics stats, ErrorReporterDelegate er, string requestId, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo, Implementation[] stablePrioritizedImpls, int index, OutputCollector outputCollector, List<Checker> checkers, string programId)
- {
- Implementation impl = stablePrioritizedImpls[index];
- VerificationResult verificationResult = null;
- var output = new StringWriter();
-
- printer.Inform("", output); // newline
- printer.Inform(string.Format("Verifying {0} ...", impl.Name), output);
-
- int priority = 0;
- if (0 < CommandLineOptions.Clo.VerifySnapshots)
- {
- verificationResult = Cache.Lookup(impl, out priority);
- }
-
- var wasCached = false;
- if (verificationResult != null && priority == Priority.SKIP)
- {
- if (CommandLineOptions.Clo.XmlSink != null)
- {
- CommandLineOptions.Clo.XmlSink.WriteStartMethod(impl.Name, verificationResult.Start);
- }
-
- printer.Inform(string.Format("Retrieving cached verification result for implementation {0}...", impl.Name), output);
- wasCached = true;
- }
- else
- {
- #region Verify the implementation
-
- verificationResult = new VerificationResult(requestId, impl, programId);
-
- using (var vcgen = CreateVCGen(program, checkers))
- {
- vcgen.CachingActionCounts = stats.CachingActionCounts;
- verificationResult.ProofObligationCountBefore = vcgen.CumulativeAssertionCount;
- verificationResult.Start = DateTime.UtcNow;
-
- if (CommandLineOptions.Clo.XmlSink != null)
- {
- CommandLineOptions.Clo.XmlSink.WriteStartMethod(impl.Name, verificationResult.Start);
- }
- try
- {
- if (CommandLineOptions.Clo.inferLeastForUnsat != null)
- {
- var svcgen = vcgen as VC.StratifiedVCGen;
- Contract.Assert(svcgen != null);
- var ss = new HashSet<string>();
- foreach (var c in program.Constants)
- {
- if (!c.Name.StartsWith(CommandLineOptions.Clo.inferLeastForUnsat)) continue;
- ss.Add(c.Name);
- }
- verificationResult.Outcome = svcgen.FindLeastToVerify(impl, ref ss);
- verificationResult.Errors = new List<Counterexample>();
- output.WriteLine("Result: {0}", string.Join(" ", ss));
- }
- else
- {
- verificationResult.Outcome = vcgen.VerifyImplementation(impl, out verificationResult.Errors, requestId);
- if (CommandLineOptions.Clo.ExtractLoops && verificationResult.Errors != null)
- {
- var vcg = vcgen as VCGen;
- if (vcg != null)
- {
- for (int i = 0; i < verificationResult.Errors.Count; i++)
- {
- verificationResult.Errors[i] = vcg.extractLoopTrace(verificationResult.Errors[i], impl.Name, program, extractLoopMappingInfo);
- }
- }
- }
- }
- }
- catch (VCGenException e)
- {
- var errorInfo = errorInformationFactory.CreateErrorInformation(impl.tok, String.Format("{0} (encountered in implementation {1}).", e.Message, impl.Name), requestId, "Error");
- errorInfo.BoogieErrorCode = "BP5010";
- errorInfo.ImplementationName = impl.Name;
- printer.WriteErrorInformation(errorInfo, output);
- if (er != null)
- {
- lock (er)
- {
- er(errorInfo);
- }
- }
- verificationResult.Errors = null;
- verificationResult.Outcome = VCGen.Outcome.Inconclusive;
- }
- catch (UnexpectedProverOutputException upo)
- {
- printer.AdvisoryWriteLine("Advisory: {0} SKIPPED because of internal error: unexpected prover output: {1}", impl.Name, upo.Message);
- verificationResult.Errors = null;
- verificationResult.Outcome = VCGen.Outcome.Inconclusive;
- }
-
- verificationResult.ProofObligationCountAfter = vcgen.CumulativeAssertionCount;
- verificationResult.End = DateTime.UtcNow;
- }
-
- #endregion
-
- #region Cache the verification result
-
- if (0 < CommandLineOptions.Clo.VerifySnapshots && !string.IsNullOrEmpty(impl.Checksum))
- {
- Cache.Insert(impl, verificationResult);
- }
-
- #endregion
- }
-
- #region Process the verification results and statistics
-
- ProcessOutcome(verificationResult.Outcome, verificationResult.Errors, TimeIndication(verificationResult), stats, output, impl.TimeLimit, er, verificationResult.ImplementationName, verificationResult.ImplementationToken, verificationResult.RequestId, wasCached);
-
- ProcessErrors(verificationResult.Errors, verificationResult.Outcome, output, er, impl);
-
- if (CommandLineOptions.Clo.XmlSink != null)
- {
- CommandLineOptions.Clo.XmlSink.WriteEndMethod(verificationResult.Outcome.ToString().ToLowerInvariant(), verificationResult.End, verificationResult.End - verificationResult.Start);
- }
-
- outputCollector.Add(index, output);
-
- outputCollector.WriteMoreOutput();
-
- if (verificationResult.Outcome == VCGen.Outcome.Errors || CommandLineOptions.Clo.Trace)
- {
- Console.Out.Flush();
- }
-
- #endregion
- }
-
-
- class OutputCollector
- {
- StringWriter[] outputs;
-
- int nextPrintableIndex = 0;
-
- public OutputCollector(Implementation[] implementations)
- {
- outputs = new StringWriter[implementations.Length];
- }
-
- public void WriteMoreOutput()
- {
- lock (outputs)
- {
- for (; nextPrintableIndex < outputs.Length && outputs[nextPrintableIndex] != null; nextPrintableIndex++)
- {
- Console.Write(outputs[nextPrintableIndex].ToString());
- outputs[nextPrintableIndex] = null;
- Console.Out.Flush();
- }
- }
- }
-
- public void Add(int index, StringWriter output)
- {
- Contract.Requires(0 <= index && index < outputs.Length);
- Contract.Requires(output != null);
-
- lock (this)
- {
- outputs[index] = output;
- }
- }
- }
-
-
- private static ConditionGeneration CreateVCGen(Program program, List<Checker> checkers)
- {
- ConditionGeneration vcgen = null;
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed)
- {
- vcgen = new DCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
- }
- else if (CommandLineOptions.Clo.FixedPointEngine != null)
- {
- vcgen = new FixedpointVC(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
- }
- else if (CommandLineOptions.Clo.StratifiedInlining > 0)
- {
- vcgen = new StratifiedVCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
- }
- else if (CommandLineOptions.Clo.SecureVcGen != null)
- {
- vcgen = new SecureVCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
- }
- else
- {
- vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
- }
- return vcgen;
- }
-
-
- #region Houdini
-
- private static PipelineOutcome RunHoudini(Program program, PipelineStatistics stats, ErrorReporterDelegate er)
- {
- Contract.Requires(stats != null);
-
- if (CommandLineOptions.Clo.AbstractHoudini != null)
- {
- return RunAbstractHoudini(program, stats, er);
- }
-
- if (CommandLineOptions.Clo.StagedHoudini != null)
- {
- return RunStagedHoudini(program, stats, er);
- }
-
- Houdini.HoudiniSession.HoudiniStatistics houdiniStats = new Houdini.HoudiniSession.HoudiniStatistics();
- Houdini.Houdini houdini = new Houdini.Houdini(program, houdiniStats);
- Houdini.HoudiniOutcome outcome = houdini.PerformHoudiniInference();
- houdini.Close();
-
- if (CommandLineOptions.Clo.PrintAssignment)
- {
- Console.WriteLine("Assignment computed by Houdini:");
- foreach (var x in outcome.assignment)
- {
- Console.WriteLine(x.Key + " = " + x.Value);
- }
- }
-
- if (CommandLineOptions.Clo.Trace)
- {
- int numTrueAssigns = 0;
- foreach (var x in outcome.assignment)
- {
- if (x.Value)
- numTrueAssigns++;
- }
- Console.WriteLine("Number of true assignments = " + numTrueAssigns);
- Console.WriteLine("Number of false assignments = " + (outcome.assignment.Count - numTrueAssigns));
- Console.WriteLine("Prover time = " + houdiniStats.proverTime.ToString("F2"));
- Console.WriteLine("Unsat core prover time = " + houdiniStats.unsatCoreProverTime.ToString("F2"));
- Console.WriteLine("Number of prover queries = " + houdiniStats.numProverQueries);
- Console.WriteLine("Number of unsat core prover queries = " + houdiniStats.numUnsatCoreProverQueries);
- Console.WriteLine("Number of unsat core prunings = " + houdiniStats.numUnsatCorePrunings);
- }
-
- foreach (Houdini.VCGenOutcome x in outcome.implementationOutcomes.Values)
- {
- ProcessOutcome(x.outcome, x.errors, "", stats, Console.Out, CommandLineOptions.Clo.ProverKillTime, er);
- ProcessErrors(x.errors, x.outcome, Console.Out, er);
- }
-
- return PipelineOutcome.Done;
- }
-
- public static Program ProgramFromFile(string filename) {
- Program p = ParseBoogieProgram(new List<string> { filename }, false);
- System.Diagnostics.Debug.Assert(p != null);
- LinearTypeChecker linearTypeChecker;
- MoverTypeChecker moverTypeChecker;
- PipelineOutcome oc = ExecutionEngine.ResolveAndTypecheck(p, filename, out linearTypeChecker, out moverTypeChecker);
- System.Diagnostics.Debug.Assert(oc == PipelineOutcome.ResolvedAndTypeChecked);
- return p;
- }
-
- private static PipelineOutcome RunStagedHoudini(Program program, PipelineStatistics stats, ErrorReporterDelegate er)
- {
- Houdini.HoudiniSession.HoudiniStatistics houdiniStats = new Houdini.HoudiniSession.HoudiniStatistics();
- Houdini.StagedHoudini stagedHoudini = new Houdini.StagedHoudini(program, houdiniStats, ProgramFromFile);
- Houdini.HoudiniOutcome outcome = stagedHoudini.PerformStagedHoudiniInference();
-
- if (CommandLineOptions.Clo.PrintAssignment)
- {
- Console.WriteLine("Assignment computed by Houdini:");
- foreach (var x in outcome.assignment)
- {
- Console.WriteLine(x.Key + " = " + x.Value);
- }
- }
-
- if (CommandLineOptions.Clo.Trace)
- {
- int numTrueAssigns = 0;
- foreach (var x in outcome.assignment)
- {
- if (x.Value)
- numTrueAssigns++;
- }
- Console.WriteLine("Number of true assignments = " + numTrueAssigns);
- Console.WriteLine("Number of false assignments = " + (outcome.assignment.Count - numTrueAssigns));
- Console.WriteLine("Prover time = " + houdiniStats.proverTime.ToString("F2"));
- Console.WriteLine("Unsat core prover time = " + houdiniStats.unsatCoreProverTime.ToString("F2"));
- Console.WriteLine("Number of prover queries = " + houdiniStats.numProverQueries);
- Console.WriteLine("Number of unsat core prover queries = " + houdiniStats.numUnsatCoreProverQueries);
- Console.WriteLine("Number of unsat core prunings = " + houdiniStats.numUnsatCorePrunings);
- }
-
- foreach (Houdini.VCGenOutcome x in outcome.implementationOutcomes.Values)
- {
- ProcessOutcome(x.outcome, x.errors, "", stats, Console.Out, CommandLineOptions.Clo.ProverKillTime, er);
- ProcessErrors(x.errors, x.outcome, Console.Out, er);
- }
-
- return PipelineOutcome.Done;
-
- }
-
-
- private static PipelineOutcome RunAbstractHoudini(Program program, PipelineStatistics stats, ErrorReporterDelegate er)
- {
- Contract.Requires(stats != null);
-
- //CommandLineOptions.Clo.PrintErrorModel = 1;
- CommandLineOptions.Clo.UseProverEvaluate = true;
- CommandLineOptions.Clo.ModelViewFile = "z3model";
- CommandLineOptions.Clo.UseArrayTheory = true;
- CommandLineOptions.Clo.TypeEncodingMethod = CommandLineOptions.TypeEncoding.Monomorphic;
- Houdini.AbstractDomainFactory.Initialize(program);
- var domain = Houdini.AbstractDomainFactory.GetInstance(CommandLineOptions.Clo.AbstractHoudini);
-
- // Run Abstract Houdini
- var abs = new Houdini.AbsHoudini(program, domain);
- var absout = abs.ComputeSummaries();
- ProcessOutcome(absout.outcome, absout.errors, "", stats, Console.Out, CommandLineOptions.Clo.ProverKillTime, er);
- ProcessErrors(absout.errors, absout.outcome, Console.Out, er);
-
- //Houdini.PredicateAbs.Initialize(program);
- //var abs = new Houdini.AbstractHoudini(program);
- //abs.computeSummaries(new Houdini.PredicateAbs(program.TopLevelDeclarations.OfType<Implementation>().First().Name));
-
- return PipelineOutcome.Done;
- }
-
- #endregion
-
-
- private static string TimeIndication(VerificationResult verificationResult)
- {
- var result = "";
- if (CommandLineOptions.Clo.Trace)
- {
- result = string.Format(" [{0:F3} s, {1} proof obligation{2}] ", (verificationResult.End - verificationResult.Start).TotalSeconds, verificationResult.ProofObligationCount, verificationResult.ProofObligationCount == 1 ? "" : "s");
- }
- else if (CommandLineOptions.Clo.TraceProofObligations)
- {
- result = string.Format(" [{0} proof obligation{1}] ", verificationResult.ProofObligationCount, verificationResult.ProofObligationCount == 1 ? "" : "s");
- }
- return result;
- }
-
-
- private static void ProcessOutcome(VC.VCGen.Outcome outcome, List<Counterexample> errors, string timeIndication,
- PipelineStatistics stats, TextWriter tw, int timeLimit, ErrorReporterDelegate er = null, string implName = null, IToken implTok = null, string requestId = null, bool wasCached = false)
- {
- Contract.Requires(stats != null);
-
- UpdateStatistics(stats, outcome, errors, wasCached);
-
- printer.Inform(timeIndication + OutcomeIndication(outcome, errors), tw);
-
- ReportOutcome(outcome, er, implName, implTok, requestId, tw, timeLimit);
- }
-
-
- private static void ReportOutcome(VC.VCGen.Outcome outcome, ErrorReporterDelegate er, string implName, IToken implTok, string requestId, TextWriter tw, int timeLimit)
- {
- ErrorInformation errorInfo = null;
-
- switch (outcome)
- {
- case VCGen.Outcome.ReachedBound:
- tw.WriteLine(string.Format("Stratified Inlining: Reached recursion bound of {0}", CommandLineOptions.Clo.RecursionBound));
- break;
- case VCGen.Outcome.TimedOut:
- if (implName != null && implTok != null)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(implTok, string.Format("Verification timed out after {0} seconds ({1})", timeLimit, implName), requestId);
- }
- break;
- case VCGen.Outcome.OutOfMemory:
- if (implName != null && implTok != null)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(implTok, "Verification out of memory (" + implName + ")", requestId);
- }
- break;
- case VCGen.Outcome.Inconclusive:
- if (implName != null && implTok != null)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(implTok, "Verification inconclusive (" + implName + ")", requestId);
- }
- break;
- }
-
- if (errorInfo != null)
- {
- errorInfo.ImplementationName = implName;
- if (er != null)
- {
- lock (er)
- {
- er(errorInfo);
- }
- }
- }
- }
-
-
- private static string OutcomeIndication(VC.VCGen.Outcome outcome, List<Counterexample> errors)
- {
- string traceOutput = "";
- switch (outcome)
- {
- default:
- Contract.Assert(false); // unexpected outcome
- throw new cce.UnreachableException();
- case VCGen.Outcome.ReachedBound:
- traceOutput = "verified";
- break;
- case VCGen.Outcome.Correct:
- traceOutput = (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed ? "credible" : "verified");
- break;
- case VCGen.Outcome.TimedOut:
- traceOutput = "timed out";
- break;
- case VCGen.Outcome.OutOfMemory:
- traceOutput = "out of memory";
- break;
- case VCGen.Outcome.Inconclusive:
- traceOutput = "inconclusive";
- break;
- case VCGen.Outcome.Errors:
- Contract.Assert(errors != null);
- traceOutput = (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed ? "doomed" : string.Format("error{0}", errors.Count == 1 ? "" : "s"));
- break;
- }
- return traceOutput;
- }
-
-
- private static void UpdateStatistics(PipelineStatistics stats, VC.VCGen.Outcome outcome, List<Counterexample> errors, bool wasCached)
- {
- Contract.Requires(stats != null);
-
- switch (outcome)
- {
- default:
- Contract.Assert(false); // unexpected outcome
- throw new cce.UnreachableException();
- case VCGen.Outcome.ReachedBound:
- Interlocked.Increment(ref stats.VerifiedCount);
- if (wasCached) { Interlocked.Increment(ref stats.CachedVerifiedCount); }
- break;
- case VCGen.Outcome.Correct:
- Interlocked.Increment(ref stats.VerifiedCount);
- if (wasCached) { Interlocked.Increment(ref stats.CachedVerifiedCount); }
- break;
- case VCGen.Outcome.TimedOut:
- Interlocked.Increment(ref stats.TimeoutCount);
- if (wasCached) { Interlocked.Increment(ref stats.CachedTimeoutCount); }
- break;
- case VCGen.Outcome.OutOfMemory:
- Interlocked.Increment(ref stats.OutOfMemoryCount);
- if (wasCached) { Interlocked.Increment(ref stats.CachedOutOfMemoryCount); }
- break;
- case VCGen.Outcome.Inconclusive:
- Interlocked.Increment(ref stats.InconclusiveCount);
- if (wasCached) { Interlocked.Increment(ref stats.CachedInconclusiveCount); }
- break;
- case VCGen.Outcome.Errors:
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed)
- {
- Interlocked.Increment(ref stats.ErrorCount);
- if (wasCached) { Interlocked.Increment(ref stats.CachedErrorCount); }
- }
- else
- {
- Interlocked.Add(ref stats.ErrorCount, errors.Count);
- if (wasCached) { Interlocked.Add(ref stats.CachedErrorCount, errors.Count); }
- }
- break;
- }
- }
-
-
- private static void ProcessErrors(List<Counterexample> errors, VC.VCGen.Outcome outcome, TextWriter tw, ErrorReporterDelegate er, Implementation impl = null)
- {
- var implName = impl != null ? impl.Name : null;
-
- if (errors != null)
- {
- errors.Sort(new CounterexampleComparer());
- foreach (Counterexample error in errors)
- {
- var errorInfo = CreateErrorInformation(error, outcome);
- errorInfo.ImplementationName = implName;
-
- if (CommandLineOptions.Clo.XmlSink != null)
- {
- WriteErrorInformationToXmlSink(errorInfo, error.Trace);
- }
-
- if (CommandLineOptions.Clo.EnhancedErrorMessages == 1)
- {
- foreach (string info in error.relatedInformation)
- {
- Contract.Assert(info != null);
- errorInfo.Out.WriteLine(" " + info);
- }
- }
- if (CommandLineOptions.Clo.ErrorTrace > 0)
- {
- errorInfo.Out.WriteLine("Execution trace:");
- error.Print(4, errorInfo.Out, b => { errorInfo.AddAuxInfo(b.tok, b.Label, "Execution trace"); });
- }
- if (CommandLineOptions.Clo.ModelViewFile != null)
- {
- error.PrintModel(errorInfo.Model);
- }
-
- printer.WriteErrorInformation(errorInfo, tw);
-
- if (er != null)
- {
- lock (er)
- {
- er(errorInfo);
- }
- }
- }
- }
- }
-
-
- private static ErrorInformation CreateErrorInformation(Counterexample error, VC.VCGen.Outcome outcome)
- {
- // BP1xxx: Parsing errors
- // BP2xxx: Name resolution errors
- // BP3xxx: Typechecking errors
- // BP4xxx: Abstract interpretation errors (Is there such a thing?)
- // BP5xxx: Verification errors
-
- ErrorInformation errorInfo;
- var cause = "Error";
- if (outcome == VCGen.Outcome.TimedOut)
- {
- cause = "Timed out on";
- }
- else if (outcome == VCGen.Outcome.OutOfMemory)
- {
- cause = "Out of memory on";
- }
-
- var callError = error as CallCounterexample;
- var returnError = error as ReturnCounterexample;
- var assertError = error as AssertCounterexample;
- if (callError != null)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(callError.FailingCall.tok, callError.FailingCall.ErrorData as string ?? "A precondition for this call might not hold.", callError.RequestId, callError.OriginalRequestId, cause);
- errorInfo.BoogieErrorCode = "BP5002";
- errorInfo.Kind = ErrorKind.Precondition;
- errorInfo.AddAuxInfo(callError.FailingRequires.tok, callError.FailingRequires.ErrorData as string ?? "This is the precondition that might not hold.", "Related location");
-
- if (!CommandLineOptions.Clo.ForceBplErrors && callError.FailingRequires.ErrorMessage != null)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(null, callError.FailingRequires.ErrorMessage, callError.RequestId, callError.OriginalRequestId, cause);
- }
- }
- else if (returnError != null)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(returnError.FailingReturn.tok, "A postcondition might not hold on this return path.", returnError.RequestId, returnError.OriginalRequestId, cause);
- errorInfo.BoogieErrorCode = "BP5003";
- errorInfo.Kind = ErrorKind.Postcondition;
- errorInfo.AddAuxInfo(returnError.FailingEnsures.tok, returnError.FailingEnsures.ErrorData as string ?? "This is the postcondition that might not hold.", "Related location");
-
- if (!CommandLineOptions.Clo.ForceBplErrors && returnError.FailingEnsures.ErrorMessage != null)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(null, returnError.FailingEnsures.ErrorMessage, returnError.RequestId, returnError.OriginalRequestId, cause);
- }
- }
- else // error is AssertCounterexample
- {
- if (assertError.FailingAssert is LoopInitAssertCmd)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(assertError.FailingAssert.tok, "This loop invariant might not hold on entry.", assertError.RequestId, assertError.OriginalRequestId, cause);
- errorInfo.BoogieErrorCode = "BP5004";
- errorInfo.Kind = ErrorKind.InvariantEntry;
- }
- else if (assertError.FailingAssert is LoopInvMaintainedAssertCmd)
- {
- errorInfo = errorInformationFactory.CreateErrorInformation(assertError.FailingAssert.tok, "This loop invariant might not be maintained by the loop.", assertError.RequestId, assertError.OriginalRequestId, cause);
- errorInfo.BoogieErrorCode = "BP5005";
- errorInfo.Kind = ErrorKind.InvariantMaintainance;
- }
- else
- {
- var msg = assertError.FailingAssert.ErrorData as string;
- var tok = assertError.FailingAssert.tok;
- if (!CommandLineOptions.Clo.ForceBplErrors && assertError.FailingAssert.ErrorMessage != null)
- {
- msg = assertError.FailingAssert.ErrorMessage;
- tok = null;
- if (cause == "Error")
- {
- cause = null;
- }
- }
- string bec = null;
- if (msg == null)
- {
- msg = "This assertion might not hold.";
- bec = "BP5001";
- }
-
- errorInfo = errorInformationFactory.CreateErrorInformation(tok, msg, assertError.RequestId, assertError.OriginalRequestId, cause);
- errorInfo.BoogieErrorCode = bec;
- errorInfo.Kind = ErrorKind.Assertion;
- }
- }
-
- return errorInfo;
- }
-
-
- private static void WriteErrorInformationToXmlSink(ErrorInformation errorInfo, List<Block> trace)
- {
- var msg = "assertion violation";
- switch (errorInfo.Kind)
- {
- case ErrorKind.Precondition:
- msg = "precondition violation";
- break;
-
- case ErrorKind.Postcondition:
- msg = "postcondition violation";
- break;
-
- case ErrorKind.InvariantEntry:
- msg = "loop invariant entry violation";
- break;
-
- case ErrorKind.InvariantMaintainance:
- msg = "loop invariant maintenance violation";
- break;
- }
-
- var relatedError = errorInfo.Aux.FirstOrDefault();
- CommandLineOptions.Clo.XmlSink.WriteError(msg, errorInfo.Tok, relatedError.Tok, trace);
- }
-
- }
-
-}
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+using VC;
+using BoogiePL = Microsoft.Boogie;
+using System.Diagnostics;
+using System.Runtime.Caching;
+
+namespace Microsoft.Boogie
+{
+
+ #region Output printing
+
+ public interface OutputPrinter
+ {
+ void ErrorWriteLine(TextWriter tw, string s);
+ void ErrorWriteLine(TextWriter tw, string format, params object[] args);
+ void AdvisoryWriteLine(string format, params object[] args);
+ void Inform(string s, TextWriter tw);
+ void WriteTrailer(PipelineStatistics stats);
+ void WriteErrorInformation(ErrorInformation errorInfo, TextWriter tw, bool skipExecutionTrace = true);
+ void ReportBplError(IToken tok, string message, bool error, TextWriter tw, string category = null);
+ }
+
+
+ public class ConsolePrinter : OutputPrinter
+ {
+ public void ErrorWriteLine(TextWriter tw, string s)
+ {
+ Contract.Requires(s != null);
+ if (!s.Contains("Error: ") && !s.Contains("Error BP"))
+ {
+ tw.WriteLine(s);
+ return;
+ }
+
+ // split the string up into its first line and the remaining lines
+ string remaining = null;
+ int i = s.IndexOf('\r');
+ if (0 <= i)
+ {
+ remaining = s.Substring(i + 1);
+ if (remaining.StartsWith("\n"))
+ {
+ remaining = remaining.Substring(1);
+ }
+ s = s.Substring(0, i);
+ }
+
+ ConsoleColor col = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Red;
+ tw.WriteLine(s);
+ Console.ForegroundColor = col;
+
+ if (remaining != null)
+ {
+ tw.WriteLine(remaining);
+ }
+ }
+
+
+ public void ErrorWriteLine(TextWriter tw, string format, params object[] args)
+ {
+ Contract.Requires(format != null);
+ string s = string.Format(format, args);
+ ErrorWriteLine(tw, s);
+ }
+
+
+ public void AdvisoryWriteLine(string format, params object[] args)
+ {
+ Contract.Requires(format != null);
+ ConsoleColor col = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Console.WriteLine(format, args);
+ Console.ForegroundColor = col;
+ }
+
+
+ /// <summary>
+ /// Inform the user about something and proceed with translation normally.
+ /// Print newline after the message.
+ /// </summary>
+ public void Inform(string s, TextWriter tw)
+ {
+ if (CommandLineOptions.Clo.Trace || CommandLineOptions.Clo.TraceProofObligations)
+ {
+ tw.WriteLine(s);
+ }
+ }
+
+
+ public void WriteTrailer(PipelineStatistics stats)
+ {
+ Contract.Requires(stats != null);
+ Contract.Requires(0 <= stats.VerifiedCount && 0 <= stats.ErrorCount && 0 <= stats.InconclusiveCount && 0 <= stats.TimeoutCount && 0 <= stats.OutOfMemoryCount);
+
+ Console.WriteLine();
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed)
+ {
+ Console.Write("{0} finished with {1} credible, {2} doomed{3}", CommandLineOptions.Clo.DescriptiveToolName, stats.VerifiedCount, stats.ErrorCount, stats.ErrorCount == 1 ? "" : "s");
+ }
+ else
+ {
+ Console.Write("{0} finished with {1} verified, {2} error{3}", CommandLineOptions.Clo.DescriptiveToolName, stats.VerifiedCount, stats.ErrorCount, stats.ErrorCount == 1 ? "" : "s");
+ }
+ if (stats.InconclusiveCount != 0)
+ {
+ Console.Write(", {0} inconclusive{1}", stats.InconclusiveCount, stats.InconclusiveCount == 1 ? "" : "s");
+ }
+ if (stats.TimeoutCount != 0)
+ {
+ Console.Write(", {0} time out{1}", stats.TimeoutCount, stats.TimeoutCount == 1 ? "" : "s");
+ }
+ if (stats.OutOfMemoryCount != 0)
+ {
+ Console.Write(", {0} out of memory", stats.OutOfMemoryCount);
+ }
+ Console.WriteLine();
+ Console.Out.Flush();
+ }
+
+
+ public void WriteErrorInformation(ErrorInformation errorInfo, TextWriter tw, bool skipExecutionTrace = true)
+ {
+ Contract.Requires(errorInfo != null);
+
+ ReportBplError(errorInfo.Tok, errorInfo.FullMsg, true, tw);
+
+ foreach (var e in errorInfo.Aux)
+ {
+ if (!(skipExecutionTrace && e.Category != null && e.Category.Contains("Execution trace")))
+ {
+ ReportBplError(e.Tok, e.FullMsg, false, tw);
+ }
+ }
+
+ tw.Write(errorInfo.Out.ToString());
+ tw.Write(errorInfo.Model.ToString());
+ tw.Flush();
+ }
+
+
+ public virtual void ReportBplError(IToken tok, string message, bool error, TextWriter tw, string category = null)
+ {
+ Contract.Requires(message != null);
+
+ if (category != null) {
+ message = string.Format("{0}: {1}", category, message);
+ }
+ string s;
+ if (tok != null) {
+ s = string.Format("{0}({1},{2}): {3}", ExecutionEngine.GetFileNameForConsole(tok.filename), tok.line, tok.col, message);
+ } else {
+ s = message;
+ }
+ if (error) {
+ ErrorWriteLine(tw, s);
+ } else {
+ tw.WriteLine(s);
+ }
+ }
+ }
+
+ #endregion
+
+
+ public enum PipelineOutcome
+ {
+ Done,
+ ResolutionError,
+ TypeCheckingError,
+ ResolvedAndTypeChecked,
+ FatalError,
+ VerificationCompleted
+ }
+
+
+ public class PipelineStatistics
+ {
+ public int ErrorCount;
+ public int VerifiedCount;
+ public int InconclusiveCount;
+ public int TimeoutCount;
+ public int OutOfMemoryCount;
+ public long[] CachingActionCounts;
+ public int CachedErrorCount;
+ public int CachedVerifiedCount;
+ public int CachedInconclusiveCount;
+ public int CachedTimeoutCount;
+ public int CachedOutOfMemoryCount;
+ }
+
+
+ #region Error reporting
+
+ public delegate void ErrorReporterDelegate(ErrorInformation errInfo);
+
+
+ public enum ErrorKind
+ {
+ Assertion,
+ Precondition,
+ Postcondition,
+ InvariantEntry,
+ InvariantMaintainance
+ }
+
+
+ public class ErrorInformationFactory
+ {
+ public virtual ErrorInformation CreateErrorInformation(IToken tok, string msg, string requestId = null, string originalRequestId = null, string category = null)
+ {
+ Contract.Requires(1 <= tok.line && 1 <= tok.col);
+ Contract.Requires(msg != null);
+
+ return ErrorInformation.CreateErrorInformation(tok, msg, requestId, originalRequestId, category);
+ }
+ }
+
+
+ public class ErrorInformation
+ {
+ public readonly IToken Tok;
+ public string Msg;
+ public string Category { get; set; }
+ public string BoogieErrorCode { get; set; }
+ public readonly List<AuxErrorInfo> Aux = new List<AuxErrorInfo>();
+ public string OriginalRequestId { get; set; }
+ public string RequestId { get; set; }
+ public ErrorKind Kind { get; set; }
+ public string ImplementationName { get; set; }
+ public TextWriter Out = new StringWriter();
+ public TextWriter Model = new StringWriter();
+
+ public string FullMsg
+ {
+ get
+ {
+ var prefix = Category;
+ if (BoogieErrorCode != null)
+ {
+ prefix = prefix == null ? BoogieErrorCode : prefix + " " + BoogieErrorCode;
+ }
+ return prefix != null ? string.Format("{0}: {1}", prefix, Msg) : Msg;
+ }
+ }
+
+ public struct AuxErrorInfo
+ {
+ public readonly IToken Tok;
+ public readonly string Msg;
+ public readonly string Category;
+
+ public string FullMsg
+ {
+ get
+ {
+ return Category != null ? string.Format("{0}: {1}", Category, Msg) : Msg;
+ }
+ }
+
+ public AuxErrorInfo(IToken tok, string msg, string category = null)
+ {
+ Tok = tok;
+ Msg = CleanUp(msg);
+ Category = category;
+ }
+ }
+
+ protected ErrorInformation(IToken tok, string msg)
+ {
+ Contract.Requires(tok != null);
+ Contract.Requires(1 <= tok.line && 1 <= tok.col);
+ Contract.Requires(msg != null);
+
+ Tok = tok;
+ Msg = CleanUp(msg);
+ }
+
+ internal static ErrorInformation CreateErrorInformation(IToken tok, string msg, string requestId = null, string originalRequestId = null, string category = null)
+ {
+ var result = new ErrorInformation(tok, msg);
+ result.RequestId = requestId;
+ result.OriginalRequestId = originalRequestId;
+ result.Category = category;
+ return result;
+ }
+
+ public virtual void AddAuxInfo(IToken tok, string msg, string category = null)
+ {
+ Contract.Requires(tok != null);
+ Contract.Requires(1 <= tok.line && 1 <= tok.col);
+ Contract.Requires(msg != null);
+ Aux.Add(new AuxErrorInfo(tok, msg, category));
+ }
+
+ protected static string CleanUp(string msg)
+ {
+ if (msg.ToLower().StartsWith("error: "))
+ {
+ return msg.Substring(7);
+ }
+ else
+ {
+ return msg;
+ }
+ }
+ }
+
+ #endregion
+
+
+ public sealed class VerificationResult
+ {
+ public readonly string RequestId;
+ public readonly string Checksum;
+ public readonly string DependeciesChecksum;
+ public readonly string ImplementationName;
+ public readonly IToken ImplementationToken;
+ public readonly string ProgramId;
+
+ public DateTime Start { get; set; }
+ public DateTime End { get; set; }
+
+ public int ProofObligationCount { get { return ProofObligationCountAfter - ProofObligationCountBefore; } }
+ public int ProofObligationCountBefore { get; set; }
+ public int ProofObligationCountAfter { get; set; }
+
+ public ConditionGeneration.Outcome Outcome { get; set; }
+ public List<Counterexample> Errors;
+
+ public ISet<byte[]> AssertionChecksums { get; private set; }
+
+ public VerificationResult(string requestId, Implementation implementation, string programId = null)
+ {
+ Checksum = implementation.Checksum;
+ DependeciesChecksum = implementation.DependencyChecksum;
+ RequestId = requestId;
+ ImplementationName = implementation.Name;
+ ImplementationToken = implementation.tok;
+ ProgramId = programId;
+ AssertionChecksums = implementation.AssertionChecksums;
+ }
+ }
+
+
+ public class PolymorphismChecker : ReadOnlyVisitor
+ {
+ bool isMonomorphic = true;
+
+ public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node)
+ {
+ if (node.TypeParameters.Count > 0)
+ isMonomorphic = false;
+ return base.VisitDeclWithFormals(node);
+ }
+
+ public override BinderExpr VisitBinderExpr(BinderExpr node)
+ {
+ if (node.TypeParameters.Count > 0)
+ isMonomorphic = false;
+ return base.VisitBinderExpr(node);
+ }
+
+ public override MapType VisitMapType(MapType node)
+ {
+ if (node.TypeParameters.Count > 0)
+ isMonomorphic = false;
+ return base.VisitMapType(node);
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ BinaryOperator op = node.Fun as BinaryOperator;
+ if (op != null && op.Op == BinaryOperator.Opcode.Subtype)
+ isMonomorphic = false;
+ return base.VisitNAryExpr(node);
+ }
+
+ public static bool IsMonomorphic(Program program)
+ {
+ var checker = new PolymorphismChecker();
+ checker.VisitProgram(program);
+ return checker.isMonomorphic;
+ }
+ }
+
+ public class ExecutionEngine
+ {
+ public static OutputPrinter printer;
+
+ public static ErrorInformationFactory errorInformationFactory = new ErrorInformationFactory();
+
+ static int autoRequestIdCount;
+
+ static readonly string AutoRequestIdPrefix = "auto_request_id_";
+
+ public static string FreshRequestId()
+ {
+ var id = Interlocked.Increment(ref autoRequestIdCount);
+ return AutoRequestIdPrefix + id;
+ }
+
+ public static int AutoRequestId(string id)
+ {
+ if (id.StartsWith(AutoRequestIdPrefix))
+ {
+ int result;
+ if (int.TryParse(id.Substring(AutoRequestIdPrefix.Length), out result))
+ {
+ return result;
+ }
+ }
+ return -1;
+ }
+
+ public readonly static VerificationResultCache Cache = new VerificationResultCache();
+
+ static readonly MemoryCache programCache = new MemoryCache("ProgramCache");
+ static readonly CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(0, 10, 0), Priority = CacheItemPriority.Default };
+
+ public static Program CachedProgram(string programId)
+ {
+ var result = programCache.Get(programId) as Program;
+ return result;
+ }
+
+ static List<Checker> Checkers = new List<Checker>();
+
+ static DateTime FirstRequestStart;
+
+ static readonly ConcurrentDictionary<string, TimeSpan> TimePerRequest = new ConcurrentDictionary<string, TimeSpan>();
+ static readonly ConcurrentDictionary<string, PipelineStatistics> StatisticsPerRequest = new ConcurrentDictionary<string, PipelineStatistics>();
+
+ static readonly ConcurrentDictionary<string, CancellationTokenSource> ImplIdToCancellationTokenSource = new ConcurrentDictionary<string, CancellationTokenSource>();
+
+ static readonly ConcurrentDictionary<string, CancellationTokenSource> RequestIdToCancellationTokenSource = new ConcurrentDictionary<string, CancellationTokenSource>();
+
+ public static void ProcessFiles(List<string> fileNames, bool lookForSnapshots = true, string programId = null)
+ {
+ Contract.Requires(cce.NonNullElements(fileNames));
+
+ if (programId == null)
+ {
+ programId = "main_program_id";
+ }
+
+ if (CommandLineOptions.Clo.VerifySeparately && 1 < fileNames.Count)
+ {
+ foreach (var f in fileNames)
+ {
+ ProcessFiles(new List<string> { f }, lookForSnapshots, f);
+ }
+ return;
+ }
+
+ if (0 <= CommandLineOptions.Clo.VerifySnapshots && lookForSnapshots)
+ {
+ var snapshotsByVersion = LookForSnapshots(fileNames);
+ foreach (var s in snapshotsByVersion)
+ {
+ ProcessFiles(new List<string>(s), false, programId);
+ }
+ return;
+ }
+
+ using (XmlFileScope xf = new XmlFileScope(CommandLineOptions.Clo.XmlSink, fileNames[fileNames.Count - 1]))
+ {
+ Program program = ParseBoogieProgram(fileNames, false);
+ if (program == null)
+ return;
+ if (CommandLineOptions.Clo.PrintFile != null)
+ {
+ PrintBplFile(CommandLineOptions.Clo.PrintFile, program, false, true, CommandLineOptions.Clo.PrettyPrint);
+ }
+
+ LinearTypeChecker linearTypeChecker;
+ CivlTypeChecker civlTypeChecker;
+ PipelineOutcome oc = ResolveAndTypecheck(program, fileNames[fileNames.Count - 1], out linearTypeChecker, out civlTypeChecker);
+ if (oc != PipelineOutcome.ResolvedAndTypeChecked)
+ return;
+
+ if (CommandLineOptions.Clo.PrintCFGPrefix != null)
+ {
+ foreach (var impl in program.Implementations)
+ {
+ using (StreamWriter sw = new StreamWriter(CommandLineOptions.Clo.PrintCFGPrefix + "." + impl.Name + ".dot"))
+ {
+ sw.Write(program.ProcessLoops(impl).ToDot());
+ }
+ }
+ }
+
+ if (CommandLineOptions.Clo.StratifiedInlining == 0)
+ {
+ Concurrency.Transform(linearTypeChecker, civlTypeChecker);
+ (new LinearEraser()).VisitProgram(program);
+ if (CommandLineOptions.Clo.CivlDesugaredFile != null)
+ {
+ int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
+ CommandLineOptions.Clo.PrintUnstructured = 1;
+ PrintBplFile(CommandLineOptions.Clo.CivlDesugaredFile, program, false, false, CommandLineOptions.Clo.PrettyPrint);
+ CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
+ }
+ }
+
+ EliminateDeadVariables(program);
+
+ CoalesceBlocks(program);
+
+ Inline(program);
+
+ var stats = new PipelineStatistics();
+ oc = InferAndVerify(program, stats, 1 < CommandLineOptions.Clo.VerifySnapshots ? programId : null);
+ switch (oc)
+ {
+ case PipelineOutcome.Done:
+ case PipelineOutcome.VerificationCompleted:
+ printer.WriteTrailer(stats);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ public static IList<IList<string>> LookForSnapshots(IList<string> fileNames)
+ {
+ Contract.Requires(fileNames != null);
+
+ var result = new List<IList<string>>();
+ for (int version = 0; true; version++)
+ {
+ var nextSnapshot = new List<string>();
+ foreach (var name in fileNames)
+ {
+ var versionedName = name.Replace(Path.GetExtension(name), ".v" + version + Path.GetExtension(name));
+ if (File.Exists(versionedName))
+ {
+ nextSnapshot.Add(versionedName);
+ }
+ }
+ if (nextSnapshot.Any())
+ {
+ result.Add(nextSnapshot);
+ }
+ else
+ {
+ break;
+ }
+ }
+ return result;
+ }
+
+
+ public static void CoalesceBlocks(Program program)
+ {
+ if (CommandLineOptions.Clo.CoalesceBlocks)
+ {
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Coalescing blocks...");
+ Microsoft.Boogie.BlockCoalescer.CoalesceBlocks(program);
+ }
+ }
+
+
+ public static void CollectModSets(Program program)
+ {
+ if (CommandLineOptions.Clo.DoModSetAnalysis)
+ {
+ new ModSetCollector().DoModSetAnalysis(program);
+ }
+ }
+
+
+ public static void EliminateDeadVariables(Program program)
+ {
+ Microsoft.Boogie.UnusedVarEliminator.Eliminate(program);
+ }
+
+
+ public static void PrintBplFile(string filename, Program program, bool allowPrintDesugaring, bool setTokens = true, bool pretty = false)
+ {
+ Contract.Requires(program != null);
+ Contract.Requires(filename != null);
+ bool oldPrintDesugaring = CommandLineOptions.Clo.PrintDesugarings;
+ if (!allowPrintDesugaring)
+ {
+ CommandLineOptions.Clo.PrintDesugarings = false;
+ }
+ using (TokenTextWriter writer = filename == "-" ?
+ new TokenTextWriter("<console>", Console.Out, setTokens, pretty) :
+ new TokenTextWriter(filename, setTokens, pretty))
+ {
+ if (CommandLineOptions.Clo.ShowEnv != CommandLineOptions.ShowEnvironment.Never)
+ {
+ writer.WriteLine("// " + CommandLineOptions.Clo.Version);
+ writer.WriteLine("// " + CommandLineOptions.Clo.Environment);
+ }
+ writer.WriteLine();
+ program.Emit(writer);
+ }
+ CommandLineOptions.Clo.PrintDesugarings = oldPrintDesugaring;
+ }
+
+
+ /// <summary>
+ /// Parse the given files into one Boogie program. If an I/O or parse error occurs, an error will be printed
+ /// and null will be returned. On success, a non-null program is returned.
+ /// </summary>
+ public static Program ParseBoogieProgram(List<string> fileNames, bool suppressTraceOutput)
+ {
+ Contract.Requires(cce.NonNullElements(fileNames));
+
+ Program program = null;
+ bool okay = true;
+ for (int fileId = 0; fileId < fileNames.Count; fileId++)
+ {
+ string bplFileName = fileNames[fileId];
+ if (!suppressTraceOutput)
+ {
+ if (CommandLineOptions.Clo.XmlSink != null)
+ {
+ CommandLineOptions.Clo.XmlSink.WriteFileFragment(bplFileName);
+ }
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Parsing " + GetFileNameForConsole(bplFileName));
+ }
+ }
+
+ Program programSnippet;
+ int errorCount;
+ try
+ {
+ var defines = new List<string>() { "FILE_" + fileId };
+ errorCount = Parser.Parse(bplFileName, defines, out programSnippet, CommandLineOptions.Clo.UseBaseNameForFileName);
+ if (programSnippet == null || errorCount != 0)
+ {
+ Console.WriteLine("{0} parse errors detected in {1}", errorCount, GetFileNameForConsole(bplFileName));
+ okay = false;
+ continue;
+ }
+ }
+ catch (IOException e)
+ {
+ printer.ErrorWriteLine(Console.Out, "Error opening file \"{0}\": {1}", GetFileNameForConsole(bplFileName), e.Message);
+ okay = false;
+ continue;
+ }
+ if (program == null)
+ {
+ program = programSnippet;
+ }
+ else if (programSnippet != null)
+ {
+ program.AddTopLevelDeclarations(programSnippet.TopLevelDeclarations);
+ }
+ }
+ if (!okay)
+ {
+ return null;
+ }
+ else if (program == null)
+ {
+ return new Program();
+ }
+ else
+ {
+ return program;
+ }
+ }
+
+ internal static string GetFileNameForConsole(string filename)
+ {
+ return (CommandLineOptions.Clo.UseBaseNameForFileName && !string.IsNullOrEmpty(filename) && filename != "<console>") ? System.IO.Path.GetFileName(filename) : filename;
+ }
+
+
+ /// <summary>
+ /// Resolves and type checks the given Boogie program. Any errors are reported to the
+ /// console. Returns:
+ /// - Done if no errors occurred, and command line specified no resolution or no type checking.
+ /// - ResolutionError if a resolution error occurred
+ /// - TypeCheckingError if a type checking error occurred
+ /// - ResolvedAndTypeChecked if both resolution and type checking succeeded
+ /// </summary>
+ public static PipelineOutcome ResolveAndTypecheck(Program program, string bplFileName, out LinearTypeChecker linearTypeChecker, out CivlTypeChecker civlTypeChecker)
+ {
+ Contract.Requires(program != null);
+ Contract.Requires(bplFileName != null);
+
+ linearTypeChecker = null;
+ civlTypeChecker = null;
+
+ // ---------- Resolve ------------------------------------------------------------
+
+ if (CommandLineOptions.Clo.NoResolve)
+ {
+ return PipelineOutcome.Done;
+ }
+
+ int errorCount = program.Resolve();
+ if (errorCount != 0)
+ {
+ Console.WriteLine("{0} name resolution errors detected in {1}", errorCount, GetFileNameForConsole(bplFileName));
+ return PipelineOutcome.ResolutionError;
+ }
+
+ // ---------- Type check ------------------------------------------------------------
+
+ if (CommandLineOptions.Clo.NoTypecheck)
+ {
+ return PipelineOutcome.Done;
+ }
+
+ errorCount = program.Typecheck();
+ if (errorCount != 0)
+ {
+ Console.WriteLine("{0} type checking errors detected in {1}", errorCount, GetFileNameForConsole(bplFileName));
+ return PipelineOutcome.TypeCheckingError;
+ }
+
+ if (PolymorphismChecker.IsMonomorphic(program))
+ {
+ CommandLineOptions.Clo.TypeEncodingMethod = CommandLineOptions.TypeEncoding.Monomorphic;
+ }
+
+ CollectModSets(program);
+
+ civlTypeChecker = new CivlTypeChecker(program);
+ civlTypeChecker.TypeCheck();
+ if (civlTypeChecker.errorCount != 0)
+ {
+ Console.WriteLine("{0} type checking errors detected in {1}", civlTypeChecker.errorCount, GetFileNameForConsole(bplFileName));
+ return PipelineOutcome.TypeCheckingError;
+ }
+
+ linearTypeChecker = new LinearTypeChecker(program);
+ linearTypeChecker.TypeCheck();
+ if (linearTypeChecker.errorCount == 0)
+ {
+ linearTypeChecker.Transform();
+ }
+ else
+ {
+ Console.WriteLine("{0} type checking errors detected in {1}", linearTypeChecker.errorCount, GetFileNameForConsole(bplFileName));
+ return PipelineOutcome.TypeCheckingError;
+ }
+
+ if (CommandLineOptions.Clo.PrintFile != null && CommandLineOptions.Clo.PrintDesugarings)
+ {
+ // if PrintDesugaring option is engaged, print the file here, after resolution and type checking
+ PrintBplFile(CommandLineOptions.Clo.PrintFile, program, true, true, CommandLineOptions.Clo.PrettyPrint);
+ }
+
+ return PipelineOutcome.ResolvedAndTypeChecked;
+ }
+
+
+ public static void Inline(Program program)
+ {
+ Contract.Requires(program != null);
+
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Inlining...");
+
+ // Inline
+ var TopLevelDeclarations = cce.NonNull(program.TopLevelDeclarations);
+
+ if (CommandLineOptions.Clo.ProcedureInlining != CommandLineOptions.Inlining.None)
+ {
+ bool inline = false;
+ foreach (var d in TopLevelDeclarations)
+ {
+ if ((d is Procedure || d is Implementation) && d.FindExprAttribute("inline") != null)
+ {
+ inline = true;
+ }
+ }
+ if (inline)
+ {
+ foreach (var impl in TopLevelDeclarations.OfType<Implementation>())
+ {
+ impl.OriginalBlocks = impl.Blocks;
+ impl.OriginalLocVars = impl.LocVars;
+ }
+ foreach (var impl in TopLevelDeclarations.OfType<Implementation>())
+ {
+ if (CommandLineOptions.Clo.UserWantsToCheckRoutine(impl.Name) && !impl.SkipVerification)
+ {
+ Inliner.ProcessImplementation(program, impl);
+ }
+ }
+ foreach (var impl in TopLevelDeclarations.OfType<Implementation>())
+ {
+ impl.OriginalBlocks = null;
+ impl.OriginalLocVars = null;
+ }
+ }
+ }
+ }
+
+
+ /// <summary>
+ /// Given a resolved and type checked Boogie program, infers invariants for the program
+ /// and then attempts to verify it. Returns:
+ /// - Done if command line specified no verification
+ /// - FatalError if a fatal error occurred, in which case an error has been printed to console
+ /// - VerificationCompleted if inference and verification completed, in which the out
+ /// parameters contain meaningful values
+ /// </summary>
+ public static PipelineOutcome InferAndVerify(Program program,
+ PipelineStatistics stats,
+ string programId = null,
+ ErrorReporterDelegate er = null, string requestId = null)
+ {
+ Contract.Requires(program != null);
+ Contract.Requires(stats != null);
+ Contract.Ensures(0 <= Contract.ValueAtReturn(out stats.InconclusiveCount) && 0 <= Contract.ValueAtReturn(out stats.TimeoutCount));
+
+ if (requestId == null)
+ {
+ requestId = FreshRequestId();
+ }
+
+ var start = DateTime.UtcNow;
+
+ #region Do some pre-abstract-interpretation preprocessing on the program
+ // Doing lambda expansion before abstract interpretation means that the abstract interpreter
+ // never needs to see any lambda expressions. (On the other hand, if it were useful for it
+ // to see lambdas, then it would be better to more lambda expansion until after infererence.)
+ if (CommandLineOptions.Clo.ExpandLambdas) {
+ LambdaHelper.ExpandLambdas(program);
+ //PrintBplFile ("-", program, true);
+ }
+ #endregion
+
+ #region Infer invariants using Abstract Interpretation
+
+ // Always use (at least) intervals, if not specified otherwise (e.g. with the "/noinfer" switch)
+ if (CommandLineOptions.Clo.UseAbstractInterpretation)
+ {
+ if (!CommandLineOptions.Clo.Ai.J_Intervals && !CommandLineOptions.Clo.Ai.J_Trivial)
+ {
+ // use /infer:j as the default
+ CommandLineOptions.Clo.Ai.J_Intervals = true;
+ }
+ }
+ Microsoft.Boogie.AbstractInterpretation.NativeAbstractInterpretation.RunAbstractInterpretation(program);
+
+ #endregion
+
+ #region Do some post-abstract-interpretation preprocessing on the program (e.g., loop unrolling)
+
+ if (CommandLineOptions.Clo.LoopUnrollCount != -1)
+ {
+ program.UnrollLoops(CommandLineOptions.Clo.LoopUnrollCount, CommandLineOptions.Clo.SoundLoopUnrolling);
+ }
+
+ Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo = null;
+ if (CommandLineOptions.Clo.ExtractLoops)
+ {
+ extractLoopMappingInfo = program.ExtractLoops();
+ }
+
+ if (CommandLineOptions.Clo.PrintInstrumented)
+ {
+ program.Emit(new TokenTextWriter(Console.Out, CommandLineOptions.Clo.PrettyPrint));
+ }
+ #endregion
+
+ if (!CommandLineOptions.Clo.Verify)
+ {
+ return PipelineOutcome.Done;
+ }
+
+ #region Run Houdini and verify
+ if (CommandLineOptions.Clo.ContractInfer)
+ {
+ return RunHoudini(program, stats, er);
+ }
+ #endregion
+
+ #region Select and prioritize implementations that should be verified
+
+ var impls = program.Implementations.Where(
+ impl => impl != null && CommandLineOptions.Clo.UserWantsToCheckRoutine(cce.NonNull(impl.Name)) && !impl.SkipVerification);
+
+ // operate on a stable copy, in case it gets updated while we're running
+ Implementation[] stablePrioritizedImpls = null;
+ if (0 < CommandLineOptions.Clo.VerifySnapshots)
+ {
+ OtherDefinitionAxiomsCollector.Collect(program.Axioms);
+ DependencyCollector.Collect(program);
+ stablePrioritizedImpls = impls.OrderByDescending(
+ impl => impl.Priority != 1 ? impl.Priority : Cache.VerificationPriority(impl)).ToArray();
+ }
+ else
+ {
+ stablePrioritizedImpls = impls.OrderByDescending(impl => impl.Priority).ToArray();
+ }
+
+ #endregion
+
+ if (1 < CommandLineOptions.Clo.VerifySnapshots)
+ {
+ CachedVerificationResultInjector.Inject(program, stablePrioritizedImpls, requestId, programId, out stats.CachingActionCounts);
+ }
+
+ #region Verify each implementation
+
+ var outputCollector = new OutputCollector(stablePrioritizedImpls);
+ var outcome = PipelineOutcome.VerificationCompleted;
+
+ try
+ {
+ var cts = new CancellationTokenSource();
+ RequestIdToCancellationTokenSource.AddOrUpdate(requestId, cts, (k, ov) => cts);
+
+ var tasks = new Task[stablePrioritizedImpls.Length];
+ // We use this semaphore to limit the number of tasks that are currently executing.
+ var semaphore = new SemaphoreSlim(CommandLineOptions.Clo.VcsCores);
+
+ // Create a task per implementation.
+ for (int i = 0; i < stablePrioritizedImpls.Length; i++)
+ {
+ var taskIndex = i;
+ var id = stablePrioritizedImpls[taskIndex].Id;
+
+ CancellationTokenSource old;
+ if (ImplIdToCancellationTokenSource.TryGetValue(id, out old))
+ {
+ old.Cancel();
+ }
+ ImplIdToCancellationTokenSource.AddOrUpdate(id, cts, (k, ov) => cts);
+
+ var t = new Task((dummy) =>
+ {
+ try
+ {
+ if (outcome == PipelineOutcome.FatalError)
+ {
+ return;
+ }
+ if (cts.Token.IsCancellationRequested)
+ {
+ cts.Token.ThrowIfCancellationRequested();
+ }
+ VerifyImplementation(program, stats, er, requestId, extractLoopMappingInfo, stablePrioritizedImpls, taskIndex, outputCollector, Checkers, programId);
+ ImplIdToCancellationTokenSource.TryRemove(id, out old);
+ }
+ finally
+ {
+ semaphore.Release();
+ }
+ }, cts.Token, TaskCreationOptions.None);
+ tasks[taskIndex] = t;
+ }
+
+ // Execute the tasks.
+ int j = 0;
+ for (; j < stablePrioritizedImpls.Length && outcome != PipelineOutcome.FatalError; j++)
+ {
+ try
+ {
+ semaphore.Wait(cts.Token);
+ }
+ catch (OperationCanceledException)
+ {
+ break;
+ }
+ tasks[j].Start(TaskScheduler.Default);
+ }
+
+ // Don't wait for tasks that haven't been started yet.
+ tasks = tasks.Take(j).ToArray();
+ Task.WaitAll(tasks);
+ }
+ catch (AggregateException ae)
+ {
+ ae.Handle(e =>
+ {
+ var pe = e as ProverException;
+ if (pe != null)
+ {
+ printer.ErrorWriteLine(Console.Out, "Fatal Error: ProverException: {0}", e);
+ outcome = PipelineOutcome.FatalError;
+ return true;
+ }
+ var oce = e as OperationCanceledException;
+ if (oce != null)
+ {
+ return true;
+ }
+ return false;
+ });
+ }
+ finally
+ {
+ CleanupCheckers(requestId);
+ }
+
+ if (CommandLineOptions.Clo.PrintNecessaryAssumes && program.NecessaryAssumes.Any())
+ {
+ Console.WriteLine("Necessary assume command(s): {0}", string.Join(", ", program.NecessaryAssumes));
+ }
+
+ cce.NonNull(CommandLineOptions.Clo.TheProverFactory).Close();
+
+ outputCollector.WriteMoreOutput();
+
+ if (1 < CommandLineOptions.Clo.VerifySnapshots && programId != null)
+ {
+ program.FreezeTopLevelDeclarations();
+ programCache.Set(programId, program, policy);
+ }
+
+ if (0 <= CommandLineOptions.Clo.VerifySnapshots && CommandLineOptions.Clo.TraceCachingForBenchmarking)
+ {
+ var end = DateTime.UtcNow;
+ if (TimePerRequest.Count == 0)
+ {
+ FirstRequestStart = start;
+ }
+ TimePerRequest[requestId] = end.Subtract(start);
+ StatisticsPerRequest[requestId] = stats;
+
+ var printTimes = true;
+
+ Console.Out.WriteLine(CachedVerificationResultInjector.Statistics.Output(printTimes));
+
+ Console.Out.WriteLine("Statistics per request as CSV:");
+ var actions = string.Join(", ", Enum.GetNames(typeof(VC.ConditionGeneration.CachingAction)));
+ Console.Out.WriteLine("Request ID{0}, Error, E (C), Inconclusive, I (C), Out of Memory, OoM (C), Timeout, T (C), Verified, V (C), {1}", printTimes ? ", Time (ms)" : "", actions);
+ foreach (var kv in TimePerRequest.OrderBy(kv => ExecutionEngine.AutoRequestId(kv.Key)))
+ {
+ var s = StatisticsPerRequest[kv.Key];
+ var cacs = s.CachingActionCounts;
+ var c = cacs != null ? ", " + cacs.Select(ac => string.Format("{0,3}", ac)).Concat(", ") : "";
+ var t = printTimes ? string.Format(", {0,8:F0}", kv.Value.TotalMilliseconds) : "";
+ Console.Out.WriteLine("{0,-19}{1}, {2,2}, {3,2}, {4,2}, {5,2}, {6,2}, {7,2}, {8,2}, {9,2}, {10,2}, {11,2}{12}", kv.Key, t, s.ErrorCount, s.CachedErrorCount, s.InconclusiveCount, s.CachedInconclusiveCount, s.OutOfMemoryCount, s.CachedOutOfMemoryCount, s.TimeoutCount, s.CachedTimeoutCount, s.VerifiedCount, s.CachedVerifiedCount, c);
+ }
+
+ if (printTimes)
+ {
+ Console.Out.WriteLine();
+ Console.Out.WriteLine("Total time (ms) since first request: {0:F0}", end.Subtract(FirstRequestStart).TotalMilliseconds);
+ }
+ }
+
+ #endregion
+
+ if (SecureVCGen.outfile != null)
+ SecureVCGen.outfile.Close();
+
+ return outcome;
+ }
+
+ public static void CancelRequest(string requestId)
+ {
+ Contract.Requires(requestId != null);
+
+ CancellationTokenSource cts;
+ if (RequestIdToCancellationTokenSource.TryGetValue(requestId, out cts))
+ {
+ cts.Cancel();
+
+ CleanupCheckers(requestId);
+ }
+ }
+
+
+ private static void CleanupCheckers(string requestId)
+ {
+ if (requestId != null)
+ {
+ CancellationTokenSource old;
+ RequestIdToCancellationTokenSource.TryRemove(requestId, out old);
+ }
+ lock (RequestIdToCancellationTokenSource)
+ {
+ if (RequestIdToCancellationTokenSource.IsEmpty)
+ {
+ lock (Checkers)
+ {
+ foreach (Checker checker in Checkers)
+ {
+ Contract.Assert(checker != null);
+ checker.Close();
+ }
+ }
+ }
+ }
+ }
+
+
+ private static void VerifyImplementation(Program program, PipelineStatistics stats, ErrorReporterDelegate er, string requestId, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo, Implementation[] stablePrioritizedImpls, int index, OutputCollector outputCollector, List<Checker> checkers, string programId)
+ {
+ Implementation impl = stablePrioritizedImpls[index];
+ VerificationResult verificationResult = null;
+ var output = new StringWriter();
+
+ printer.Inform("", output); // newline
+ printer.Inform(string.Format("Verifying {0} ...", impl.Name), output);
+
+ int priority = 0;
+ var wasCached = false;
+ if (0 < CommandLineOptions.Clo.VerifySnapshots) {
+ var cachedResults = Cache.Lookup(impl, out priority);
+ if (cachedResults != null && priority == Priority.SKIP) {
+ if (CommandLineOptions.Clo.XmlSink != null) {
+ CommandLineOptions.Clo.XmlSink.WriteStartMethod(impl.Name, cachedResults.Start);
+ }
+
+ printer.Inform(string.Format("Retrieving cached verification result for implementation {0}...", impl.Name), output);
+ if (CommandLineOptions.Clo.VerifySnapshots < 3 || cachedResults.Outcome == ConditionGeneration.Outcome.Correct) {
+ verificationResult = cachedResults;
+ wasCached = true;
+ }
+ }
+ }
+
+ if (!wasCached)
+ {
+ #region Verify the implementation
+
+ verificationResult = new VerificationResult(requestId, impl, programId);
+
+ using (var vcgen = CreateVCGen(program, checkers))
+ {
+ vcgen.CachingActionCounts = stats.CachingActionCounts;
+ verificationResult.ProofObligationCountBefore = vcgen.CumulativeAssertionCount;
+ verificationResult.Start = DateTime.UtcNow;
+
+ if (CommandLineOptions.Clo.XmlSink != null)
+ {
+ CommandLineOptions.Clo.XmlSink.WriteStartMethod(impl.Name, verificationResult.Start);
+ }
+ try
+ {
+ if (CommandLineOptions.Clo.inferLeastForUnsat != null)
+ {
+ var svcgen = vcgen as VC.StratifiedVCGen;
+ Contract.Assert(svcgen != null);
+ var ss = new HashSet<string>();
+ foreach (var c in program.Constants)
+ {
+ if (!c.Name.StartsWith(CommandLineOptions.Clo.inferLeastForUnsat)) continue;
+ ss.Add(c.Name);
+ }
+ verificationResult.Outcome = svcgen.FindLeastToVerify(impl, ref ss);
+ verificationResult.Errors = new List<Counterexample>();
+ output.WriteLine("Result: {0}", string.Join(" ", ss));
+ }
+ else
+ {
+ verificationResult.Outcome = vcgen.VerifyImplementation(impl, out verificationResult.Errors, requestId);
+ if (CommandLineOptions.Clo.ExtractLoops && verificationResult.Errors != null)
+ {
+ var vcg = vcgen as VCGen;
+ if (vcg != null)
+ {
+ for (int i = 0; i < verificationResult.Errors.Count; i++)
+ {
+ verificationResult.Errors[i] = vcg.extractLoopTrace(verificationResult.Errors[i], impl.Name, program, extractLoopMappingInfo);
+ }
+ }
+ }
+ }
+ }
+ catch (VCGenException e)
+ {
+ var errorInfo = errorInformationFactory.CreateErrorInformation(impl.tok, String.Format("{0} (encountered in implementation {1}).", e.Message, impl.Name), requestId, "Error");
+ errorInfo.BoogieErrorCode = "BP5010";
+ errorInfo.ImplementationName = impl.Name;
+ printer.WriteErrorInformation(errorInfo, output);
+ if (er != null)
+ {
+ lock (er)
+ {
+ er(errorInfo);
+ }
+ }
+ verificationResult.Errors = null;
+ verificationResult.Outcome = VCGen.Outcome.Inconclusive;
+ }
+ catch (UnexpectedProverOutputException upo)
+ {
+ printer.AdvisoryWriteLine("Advisory: {0} SKIPPED because of internal error: unexpected prover output: {1}", impl.Name, upo.Message);
+ verificationResult.Errors = null;
+ verificationResult.Outcome = VCGen.Outcome.Inconclusive;
+ }
+
+ verificationResult.ProofObligationCountAfter = vcgen.CumulativeAssertionCount;
+ verificationResult.End = DateTime.UtcNow;
+ }
+
+ #endregion
+
+ #region Cache the verification result
+
+ if (0 < CommandLineOptions.Clo.VerifySnapshots && !string.IsNullOrEmpty(impl.Checksum))
+ {
+ Cache.Insert(impl, verificationResult);
+ }
+
+ #endregion
+ }
+
+ #region Process the verification results and statistics
+
+ ProcessOutcome(verificationResult.Outcome, verificationResult.Errors, TimeIndication(verificationResult), stats, output, impl.TimeLimit, er, verificationResult.ImplementationName, verificationResult.ImplementationToken, verificationResult.RequestId, wasCached);
+
+ ProcessErrors(verificationResult.Errors, verificationResult.Outcome, output, er, impl);
+
+ if (CommandLineOptions.Clo.XmlSink != null)
+ {
+ CommandLineOptions.Clo.XmlSink.WriteEndMethod(verificationResult.Outcome.ToString().ToLowerInvariant(), verificationResult.End, verificationResult.End - verificationResult.Start);
+ }
+
+ outputCollector.Add(index, output);
+
+ outputCollector.WriteMoreOutput();
+
+ if (verificationResult.Outcome == VCGen.Outcome.Errors || CommandLineOptions.Clo.Trace)
+ {
+ Console.Out.Flush();
+ }
+
+ #endregion
+ }
+
+
+ class OutputCollector
+ {
+ StringWriter[] outputs;
+
+ int nextPrintableIndex = 0;
+
+ public OutputCollector(Implementation[] implementations)
+ {
+ outputs = new StringWriter[implementations.Length];
+ }
+
+ public void WriteMoreOutput()
+ {
+ lock (outputs)
+ {
+ for (; nextPrintableIndex < outputs.Length && outputs[nextPrintableIndex] != null; nextPrintableIndex++)
+ {
+ Console.Write(outputs[nextPrintableIndex].ToString());
+ outputs[nextPrintableIndex] = null;
+ Console.Out.Flush();
+ }
+ }
+ }
+
+ public void Add(int index, StringWriter output)
+ {
+ Contract.Requires(0 <= index && index < outputs.Length);
+ Contract.Requires(output != null);
+
+ lock (this)
+ {
+ outputs[index] = output;
+ }
+ }
+ }
+
+
+ private static ConditionGeneration CreateVCGen(Program program, List<Checker> checkers)
+ {
+ ConditionGeneration vcgen = null;
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed)
+ {
+ vcgen = new DCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
+ }
+ else if (CommandLineOptions.Clo.FixedPointEngine != null)
+ {
+ vcgen = new FixedpointVC(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
+ }
+ else if (CommandLineOptions.Clo.StratifiedInlining > 0)
+ {
+ vcgen = new StratifiedVCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
+ }
+ else if (CommandLineOptions.Clo.SecureVcGen != null)
+ {
+ vcgen = new SecureVCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
+ }
+ else
+ {
+ vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, checkers);
+ }
+ return vcgen;
+ }
+
+
+ #region Houdini
+
+ private static PipelineOutcome RunHoudini(Program program, PipelineStatistics stats, ErrorReporterDelegate er)
+ {
+ Contract.Requires(stats != null);
+
+ if (CommandLineOptions.Clo.AbstractHoudini != null)
+ {
+ return RunAbstractHoudini(program, stats, er);
+ }
+
+ if (CommandLineOptions.Clo.StagedHoudini != null)
+ {
+ return RunStagedHoudini(program, stats, er);
+ }
+
+ Houdini.HoudiniSession.HoudiniStatistics houdiniStats = new Houdini.HoudiniSession.HoudiniStatistics();
+ Houdini.Houdini houdini = new Houdini.Houdini(program, houdiniStats);
+ Houdini.HoudiniOutcome outcome = houdini.PerformHoudiniInference();
+ houdini.Close();
+
+ if (CommandLineOptions.Clo.PrintAssignment)
+ {
+ Console.WriteLine("Assignment computed by Houdini:");
+ foreach (var x in outcome.assignment)
+ {
+ Console.WriteLine(x.Key + " = " + x.Value);
+ }
+ }
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ int numTrueAssigns = 0;
+ foreach (var x in outcome.assignment)
+ {
+ if (x.Value)
+ numTrueAssigns++;
+ }
+ Console.WriteLine("Number of true assignments = " + numTrueAssigns);
+ Console.WriteLine("Number of false assignments = " + (outcome.assignment.Count - numTrueAssigns));
+ Console.WriteLine("Prover time = " + houdiniStats.proverTime.ToString("F2"));
+ Console.WriteLine("Unsat core prover time = " + houdiniStats.unsatCoreProverTime.ToString("F2"));
+ Console.WriteLine("Number of prover queries = " + houdiniStats.numProverQueries);
+ Console.WriteLine("Number of unsat core prover queries = " + houdiniStats.numUnsatCoreProverQueries);
+ Console.WriteLine("Number of unsat core prunings = " + houdiniStats.numUnsatCorePrunings);
+ }
+
+ foreach (Houdini.VCGenOutcome x in outcome.implementationOutcomes.Values)
+ {
+ ProcessOutcome(x.outcome, x.errors, "", stats, Console.Out, CommandLineOptions.Clo.ProverKillTime, er);
+ ProcessErrors(x.errors, x.outcome, Console.Out, er);
+ }
+
+ return PipelineOutcome.Done;
+ }
+
+ public static Program ProgramFromFile(string filename) {
+ Program p = ParseBoogieProgram(new List<string> { filename }, false);
+ System.Diagnostics.Debug.Assert(p != null);
+ LinearTypeChecker linearTypeChecker;
+ CivlTypeChecker civlTypeChecker;
+ PipelineOutcome oc = ExecutionEngine.ResolveAndTypecheck(p, filename, out linearTypeChecker, out civlTypeChecker);
+ System.Diagnostics.Debug.Assert(oc == PipelineOutcome.ResolvedAndTypeChecked);
+ return p;
+ }
+
+ private static PipelineOutcome RunStagedHoudini(Program program, PipelineStatistics stats, ErrorReporterDelegate er)
+ {
+ Houdini.HoudiniSession.HoudiniStatistics houdiniStats = new Houdini.HoudiniSession.HoudiniStatistics();
+ Houdini.StagedHoudini stagedHoudini = new Houdini.StagedHoudini(program, houdiniStats, ProgramFromFile);
+ Houdini.HoudiniOutcome outcome = stagedHoudini.PerformStagedHoudiniInference();
+
+ if (CommandLineOptions.Clo.PrintAssignment)
+ {
+ Console.WriteLine("Assignment computed by Houdini:");
+ foreach (var x in outcome.assignment)
+ {
+ Console.WriteLine(x.Key + " = " + x.Value);
+ }
+ }
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ int numTrueAssigns = 0;
+ foreach (var x in outcome.assignment)
+ {
+ if (x.Value)
+ numTrueAssigns++;
+ }
+ Console.WriteLine("Number of true assignments = " + numTrueAssigns);
+ Console.WriteLine("Number of false assignments = " + (outcome.assignment.Count - numTrueAssigns));
+ Console.WriteLine("Prover time = " + houdiniStats.proverTime.ToString("F2"));
+ Console.WriteLine("Unsat core prover time = " + houdiniStats.unsatCoreProverTime.ToString("F2"));
+ Console.WriteLine("Number of prover queries = " + houdiniStats.numProverQueries);
+ Console.WriteLine("Number of unsat core prover queries = " + houdiniStats.numUnsatCoreProverQueries);
+ Console.WriteLine("Number of unsat core prunings = " + houdiniStats.numUnsatCorePrunings);
+ }
+
+ foreach (Houdini.VCGenOutcome x in outcome.implementationOutcomes.Values)
+ {
+ ProcessOutcome(x.outcome, x.errors, "", stats, Console.Out, CommandLineOptions.Clo.ProverKillTime, er);
+ ProcessErrors(x.errors, x.outcome, Console.Out, er);
+ }
+
+ return PipelineOutcome.Done;
+
+ }
+
+
+ private static PipelineOutcome RunAbstractHoudini(Program program, PipelineStatistics stats, ErrorReporterDelegate er)
+ {
+ Contract.Requires(stats != null);
+
+ //CommandLineOptions.Clo.PrintErrorModel = 1;
+ CommandLineOptions.Clo.UseProverEvaluate = true;
+ CommandLineOptions.Clo.ModelViewFile = "z3model";
+ CommandLineOptions.Clo.UseArrayTheory = true;
+ CommandLineOptions.Clo.TypeEncodingMethod = CommandLineOptions.TypeEncoding.Monomorphic;
+ Houdini.AbstractDomainFactory.Initialize(program);
+ var domain = Houdini.AbstractDomainFactory.GetInstance(CommandLineOptions.Clo.AbstractHoudini);
+
+ // Run Abstract Houdini
+ var abs = new Houdini.AbsHoudini(program, domain);
+ var absout = abs.ComputeSummaries();
+ ProcessOutcome(absout.outcome, absout.errors, "", stats, Console.Out, CommandLineOptions.Clo.ProverKillTime, er);
+ ProcessErrors(absout.errors, absout.outcome, Console.Out, er);
+
+ //Houdini.PredicateAbs.Initialize(program);
+ //var abs = new Houdini.AbstractHoudini(program);
+ //abs.computeSummaries(new Houdini.PredicateAbs(program.TopLevelDeclarations.OfType<Implementation>().First().Name));
+
+ return PipelineOutcome.Done;
+ }
+
+ #endregion
+
+
+ private static string TimeIndication(VerificationResult verificationResult)
+ {
+ var result = "";
+ if (CommandLineOptions.Clo.Trace)
+ {
+ result = string.Format(" [{0:F3} s, {1} proof obligation{2}] ", (verificationResult.End - verificationResult.Start).TotalSeconds, verificationResult.ProofObligationCount, verificationResult.ProofObligationCount == 1 ? "" : "s");
+ }
+ else if (CommandLineOptions.Clo.TraceProofObligations)
+ {
+ result = string.Format(" [{0} proof obligation{1}] ", verificationResult.ProofObligationCount, verificationResult.ProofObligationCount == 1 ? "" : "s");
+ }
+ return result;
+ }
+
+
+ private static void ProcessOutcome(VC.VCGen.Outcome outcome, List<Counterexample> errors, string timeIndication,
+ PipelineStatistics stats, TextWriter tw, int timeLimit, ErrorReporterDelegate er = null, string implName = null, IToken implTok = null, string requestId = null, bool wasCached = false)
+ {
+ Contract.Requires(stats != null);
+
+ UpdateStatistics(stats, outcome, errors, wasCached);
+
+ printer.Inform(timeIndication + OutcomeIndication(outcome, errors), tw);
+
+ ReportOutcome(outcome, er, implName, implTok, requestId, tw, timeLimit, errors);
+ }
+
+
+ private static void ReportOutcome(VC.VCGen.Outcome outcome, ErrorReporterDelegate er, string implName, IToken implTok, string requestId, TextWriter tw, int timeLimit, List<Counterexample> errors)
+ {
+ ErrorInformation errorInfo = null;
+
+ switch (outcome)
+ {
+ case VCGen.Outcome.ReachedBound:
+ tw.WriteLine(string.Format("Stratified Inlining: Reached recursion bound of {0}", CommandLineOptions.Clo.RecursionBound));
+ break;
+ case VCGen.Outcome.Errors:
+ case VCGen.Outcome.TimedOut:
+ if (implName != null && implTok != null)
+ {
+ if (outcome == ConditionGeneration.Outcome.TimedOut || (errors != null && errors.Any(e => e.IsAuxiliaryCexForDiagnosingTimeouts)))
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(implTok, string.Format("Verification of '{1}' timed out after {0} seconds", timeLimit, implName), requestId);
+ }
+
+ // Report timed out assertions as auxiliary info.
+ if (errors != null)
+ {
+ var cmpr = new CounterexampleComparer();
+ var timedOutAssertions = errors.Where(e => e.IsAuxiliaryCexForDiagnosingTimeouts).Distinct(cmpr).ToList();
+ timedOutAssertions.Sort(cmpr);
+ if (0 < timedOutAssertions.Count)
+ {
+ errorInfo.Msg += string.Format(" with {0} check(s) that timed out individually", timedOutAssertions.Count);
+ }
+ foreach (Counterexample error in timedOutAssertions)
+ {
+ var callError = error as CallCounterexample;
+ var returnError = error as ReturnCounterexample;
+ var assertError = error as AssertCounterexample;
+ IToken tok = null;
+ string msg = null;
+ if (callError != null)
+ {
+ tok = callError.FailingCall.tok;
+ msg = callError.FailingCall.ErrorData as string ?? "A precondition for this call might not hold.";
+ }
+ else if (returnError != null)
+ {
+ tok = returnError.FailingReturn.tok;
+ msg = "A postcondition might not hold on this return path.";
+ }
+ else
+ {
+ tok = assertError.FailingAssert.tok;
+ if (assertError.FailingAssert is LoopInitAssertCmd)
+ {
+ msg = "This loop invariant might not hold on entry.";
+ }
+ else if (assertError.FailingAssert is LoopInvMaintainedAssertCmd)
+ {
+ msg = "This loop invariant might not be maintained by the loop.";
+ }
+ else
+ {
+ msg = assertError.FailingAssert.ErrorData as string;
+ if (!CommandLineOptions.Clo.ForceBplErrors && assertError.FailingAssert.ErrorMessage != null)
+ {
+ msg = assertError.FailingAssert.ErrorMessage;
+ }
+ if (msg == null)
+ {
+ msg = "This assertion might not hold.";
+ }
+ }
+ }
+ errorInfo.AddAuxInfo(tok, msg, "Unverified check due to timeout");
+ }
+ }
+ }
+ break;
+ case VCGen.Outcome.OutOfMemory:
+ if (implName != null && implTok != null)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(implTok, "Verification out of memory (" + implName + ")", requestId);
+ }
+ break;
+ case VCGen.Outcome.Inconclusive:
+ if (implName != null && implTok != null)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(implTok, "Verification inconclusive (" + implName + ")", requestId);
+ }
+ break;
+ }
+
+ if (errorInfo != null)
+ {
+ errorInfo.ImplementationName = implName;
+ if (er != null)
+ {
+ lock (er)
+ {
+ er(errorInfo);
+ }
+ }
+ else
+ {
+ printer.WriteErrorInformation(errorInfo, tw);
+ }
+ }
+ }
+
+
+ private static string OutcomeIndication(VC.VCGen.Outcome outcome, List<Counterexample> errors)
+ {
+ string traceOutput = "";
+ switch (outcome)
+ {
+ default:
+ Contract.Assert(false); // unexpected outcome
+ throw new cce.UnreachableException();
+ case VCGen.Outcome.ReachedBound:
+ traceOutput = "verified";
+ break;
+ case VCGen.Outcome.Correct:
+ traceOutput = (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed ? "credible" : "verified");
+ break;
+ case VCGen.Outcome.TimedOut:
+ traceOutput = "timed out";
+ break;
+ case VCGen.Outcome.OutOfMemory:
+ traceOutput = "out of memory";
+ break;
+ case VCGen.Outcome.Inconclusive:
+ traceOutput = "inconclusive";
+ break;
+ case VCGen.Outcome.Errors:
+ Contract.Assert(errors != null);
+ traceOutput = (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed ? "doomed" : string.Format("error{0}", errors.Count == 1 ? "" : "s"));
+ break;
+ }
+ return traceOutput;
+ }
+
+
+ private static void UpdateStatistics(PipelineStatistics stats, VC.VCGen.Outcome outcome, List<Counterexample> errors, bool wasCached)
+ {
+ Contract.Requires(stats != null);
+
+ switch (outcome)
+ {
+ default:
+ Contract.Assert(false); // unexpected outcome
+ throw new cce.UnreachableException();
+ case VCGen.Outcome.ReachedBound:
+ Interlocked.Increment(ref stats.VerifiedCount);
+ if (wasCached) { Interlocked.Increment(ref stats.CachedVerifiedCount); }
+ break;
+ case VCGen.Outcome.Correct:
+ Interlocked.Increment(ref stats.VerifiedCount);
+ if (wasCached) { Interlocked.Increment(ref stats.CachedVerifiedCount); }
+ break;
+ case VCGen.Outcome.TimedOut:
+ Interlocked.Increment(ref stats.TimeoutCount);
+ if (wasCached) { Interlocked.Increment(ref stats.CachedTimeoutCount); }
+ break;
+ case VCGen.Outcome.OutOfMemory:
+ Interlocked.Increment(ref stats.OutOfMemoryCount);
+ if (wasCached) { Interlocked.Increment(ref stats.CachedOutOfMemoryCount); }
+ break;
+ case VCGen.Outcome.Inconclusive:
+ Interlocked.Increment(ref stats.InconclusiveCount);
+ if (wasCached) { Interlocked.Increment(ref stats.CachedInconclusiveCount); }
+ break;
+ case VCGen.Outcome.Errors:
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed)
+ {
+ Interlocked.Increment(ref stats.ErrorCount);
+ if (wasCached) { Interlocked.Increment(ref stats.CachedErrorCount); }
+ }
+ else
+ {
+ int cnt = errors.Where(e => !e.IsAuxiliaryCexForDiagnosingTimeouts).Count();
+ Interlocked.Add(ref stats.ErrorCount, cnt);
+ if (wasCached) { Interlocked.Add(ref stats.CachedErrorCount, cnt); }
+ }
+ break;
+ }
+ }
+
+
+ private static void ProcessErrors(List<Counterexample> errors, VC.VCGen.Outcome outcome, TextWriter tw, ErrorReporterDelegate er, Implementation impl = null)
+ {
+ var implName = impl != null ? impl.Name : null;
+
+ if (errors != null)
+ {
+ errors.Sort(new CounterexampleComparer());
+ foreach (Counterexample error in errors)
+ {
+ if (error.IsAuxiliaryCexForDiagnosingTimeouts)
+ {
+ continue;
+ }
+ var errorInfo = CreateErrorInformation(error, outcome);
+ errorInfo.ImplementationName = implName;
+
+ if (CommandLineOptions.Clo.XmlSink != null)
+ {
+ WriteErrorInformationToXmlSink(errorInfo, error.Trace);
+ }
+
+ if (CommandLineOptions.Clo.EnhancedErrorMessages == 1)
+ {
+ foreach (string info in error.relatedInformation)
+ {
+ Contract.Assert(info != null);
+ errorInfo.Out.WriteLine(" " + info);
+ }
+ }
+ if (CommandLineOptions.Clo.ErrorTrace > 0)
+ {
+ errorInfo.Out.WriteLine("Execution trace:");
+ error.Print(4, errorInfo.Out, b => { errorInfo.AddAuxInfo(b.tok, b.Label, "Execution trace"); });
+ }
+ if (CommandLineOptions.Clo.ModelViewFile != null)
+ {
+ error.PrintModel(errorInfo.Model);
+ }
+
+ printer.WriteErrorInformation(errorInfo, tw);
+
+ if (er != null)
+ {
+ lock (er)
+ {
+ er(errorInfo);
+ }
+ }
+ }
+ }
+ }
+
+
+ private static ErrorInformation CreateErrorInformation(Counterexample error, VC.VCGen.Outcome outcome)
+ {
+ // BP1xxx: Parsing errors
+ // BP2xxx: Name resolution errors
+ // BP3xxx: Typechecking errors
+ // BP4xxx: Abstract interpretation errors (Is there such a thing?)
+ // BP5xxx: Verification errors
+
+ ErrorInformation errorInfo;
+ var cause = "Error";
+ if (outcome == VCGen.Outcome.TimedOut)
+ {
+ cause = "Timed out on";
+ }
+ else if (outcome == VCGen.Outcome.OutOfMemory)
+ {
+ cause = "Out of memory on";
+ }
+
+ var callError = error as CallCounterexample;
+ var returnError = error as ReturnCounterexample;
+ var assertError = error as AssertCounterexample;
+ if (callError != null)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(callError.FailingCall.tok, callError.FailingCall.ErrorData as string ?? "A precondition for this call might not hold.", callError.RequestId, callError.OriginalRequestId, cause);
+ errorInfo.BoogieErrorCode = "BP5002";
+ errorInfo.Kind = ErrorKind.Precondition;
+ errorInfo.AddAuxInfo(callError.FailingRequires.tok, callError.FailingRequires.ErrorData as string ?? "This is the precondition that might not hold.", "Related location");
+
+ if (!CommandLineOptions.Clo.ForceBplErrors && callError.FailingRequires.ErrorMessage != null)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(null, callError.FailingRequires.ErrorMessage, callError.RequestId, callError.OriginalRequestId, cause);
+ }
+ }
+ else if (returnError != null)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(returnError.FailingReturn.tok, "A postcondition might not hold on this return path.", returnError.RequestId, returnError.OriginalRequestId, cause);
+ errorInfo.BoogieErrorCode = "BP5003";
+ errorInfo.Kind = ErrorKind.Postcondition;
+ errorInfo.AddAuxInfo(returnError.FailingEnsures.tok, returnError.FailingEnsures.ErrorData as string ?? "This is the postcondition that might not hold.", "Related location");
+
+ if (!CommandLineOptions.Clo.ForceBplErrors && returnError.FailingEnsures.ErrorMessage != null)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(null, returnError.FailingEnsures.ErrorMessage, returnError.RequestId, returnError.OriginalRequestId, cause);
+ }
+ }
+ else // error is AssertCounterexample
+ {
+ if (assertError.FailingAssert is LoopInitAssertCmd)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(assertError.FailingAssert.tok, "This loop invariant might not hold on entry.", assertError.RequestId, assertError.OriginalRequestId, cause);
+ errorInfo.BoogieErrorCode = "BP5004";
+ errorInfo.Kind = ErrorKind.InvariantEntry;
+ }
+ else if (assertError.FailingAssert is LoopInvMaintainedAssertCmd)
+ {
+ errorInfo = errorInformationFactory.CreateErrorInformation(assertError.FailingAssert.tok, "This loop invariant might not be maintained by the loop.", assertError.RequestId, assertError.OriginalRequestId, cause);
+ errorInfo.BoogieErrorCode = "BP5005";
+ errorInfo.Kind = ErrorKind.InvariantMaintainance;
+ }
+ else
+ {
+ var msg = assertError.FailingAssert.ErrorData as string;
+ var tok = assertError.FailingAssert.tok;
+ if (!CommandLineOptions.Clo.ForceBplErrors && assertError.FailingAssert.ErrorMessage != null)
+ {
+ msg = assertError.FailingAssert.ErrorMessage;
+ tok = null;
+ if (cause == "Error")
+ {
+ cause = null;
+ }
+ }
+ string bec = null;
+ if (msg == null)
+ {
+ msg = "This assertion might not hold.";
+ bec = "BP5001";
+ }
+
+ errorInfo = errorInformationFactory.CreateErrorInformation(tok, msg, assertError.RequestId, assertError.OriginalRequestId, cause);
+ errorInfo.BoogieErrorCode = bec;
+ errorInfo.Kind = ErrorKind.Assertion;
+ }
+ }
+
+ return errorInfo;
+ }
+
+
+ private static void WriteErrorInformationToXmlSink(ErrorInformation errorInfo, List<Block> trace)
+ {
+ var msg = "assertion violation";
+ switch (errorInfo.Kind)
+ {
+ case ErrorKind.Precondition:
+ msg = "precondition violation";
+ break;
+
+ case ErrorKind.Postcondition:
+ msg = "postcondition violation";
+ break;
+
+ case ErrorKind.InvariantEntry:
+ msg = "loop invariant entry violation";
+ break;
+
+ case ErrorKind.InvariantMaintainance:
+ msg = "loop invariant maintenance violation";
+ break;
+ }
+
+ var relatedError = errorInfo.Aux.FirstOrDefault();
+ CommandLineOptions.Clo.XmlSink.WriteError(msg, errorInfo.Tok, relatedError.Tok, trace);
+ }
+
+ }
+
+}
diff --git a/Source/ExecutionEngine/ExecutionEngine.csproj b/Source/ExecutionEngine/ExecutionEngine.csproj
index 09393f09..b17b1139 100644
--- a/Source/ExecutionEngine/ExecutionEngine.csproj
+++ b/Source/ExecutionEngine/ExecutionEngine.csproj
@@ -1,194 +1,194 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{EAA5EB79-D475-4601-A59B-825C191CD25F}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>ExecutionEngine</RootNamespace>
- <AssemblyName>ExecutionEngine</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">
- </TargetFrameworkProfile>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <ProductVersion>12.0.0</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
- <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
- <CodeContractsAssertsToContractsCheckBox>True</CodeContractsAssertsToContractsCheckBox>
- <CodeContractsRedundantTests>True</CodeContractsRedundantTests>
- <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
- <CodeContractsMissingPublicEnsuresAsWarnings>False</CodeContractsMissingPublicEnsuresAsWarnings>
- <CodeContractsInferRequires>True</CodeContractsInferRequires>
- <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
- <CodeContractsInferEnsuresAutoProperties>True</CodeContractsInferEnsuresAutoProperties>
- <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
- <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
- <CodeContractsSuggestAssumptionsForCallees>False</CodeContractsSuggestAssumptionsForCallees>
- <CodeContractsSuggestRequires>False</CodeContractsSuggestRequires>
- <CodeContractsNecessaryEnsures>True</CodeContractsNecessaryEnsures>
- <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
- <CodeContractsSuggestReadonly>True</CodeContractsSuggestReadonly>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsSQLServerOption />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
- <CodeContractsSkipAnalysisIfCannotConnectToCache>False</CodeContractsSkipAnalysisIfCannotConnectToCache>
- <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
- <CodeContractsBeingOptimisticOnExternal>True</CodeContractsBeingOptimisticOnExternal>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
- <CodeContractsInferRequires>True</CodeContractsInferRequires>
- <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
- <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
- <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
- <CodeContractsSuggestRequires>True</CodeContractsSuggestRequires>
- <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsSQLServerOption />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
- <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>TRACE;DEBUG;QED</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Runtime.Caching" />
- <Reference Include="System.Xml.Linq" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="ExecutionEngine.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="VerificationResultCache.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\AbsInt\AbsInt.csproj">
- <Project>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</Project>
- <Name>AbsInt</Name>
- </ProjectReference>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Concurrency\Concurrency.csproj">
- <Project>{d07b8e38-e172-47f4-ad02-0373014a46d3}</Project>
- <Name>Concurrency</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\Doomed\Doomed.csproj">
- <Project>{884386A3-58E9-40BB-A273-B24976775553}</Project>
- <Name>Doomed</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\Houdini\Houdini.csproj">
- <Project>{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}</Project>
- <Name>Houdini</Name>
- </ProjectReference>
- <ProjectReference Include="..\Model\Model.csproj">
- <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\Predication\Predication.csproj">
- <Project>{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}</Project>
- <Name>Predication</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{EAA5EB79-D475-4601-A59B-825C191CD25F}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>ExecutionEngine</RootNamespace>
+ <AssemblyName>BoogieExecutionEngine</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">
+ </TargetFrameworkProfile>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <ProductVersion>12.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
+ <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
+ <CodeContractsAssertsToContractsCheckBox>True</CodeContractsAssertsToContractsCheckBox>
+ <CodeContractsRedundantTests>True</CodeContractsRedundantTests>
+ <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
+ <CodeContractsMissingPublicEnsuresAsWarnings>False</CodeContractsMissingPublicEnsuresAsWarnings>
+ <CodeContractsInferRequires>True</CodeContractsInferRequires>
+ <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
+ <CodeContractsInferEnsuresAutoProperties>True</CodeContractsInferEnsuresAutoProperties>
+ <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
+ <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
+ <CodeContractsSuggestAssumptionsForCallees>False</CodeContractsSuggestAssumptionsForCallees>
+ <CodeContractsSuggestRequires>False</CodeContractsSuggestRequires>
+ <CodeContractsNecessaryEnsures>True</CodeContractsNecessaryEnsures>
+ <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
+ <CodeContractsSuggestReadonly>True</CodeContractsSuggestReadonly>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsSQLServerOption />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
+ <CodeContractsSkipAnalysisIfCannotConnectToCache>False</CodeContractsSkipAnalysisIfCannotConnectToCache>
+ <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
+ <CodeContractsBeingOptimisticOnExternal>True</CodeContractsBeingOptimisticOnExternal>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
+ <CodeContractsInferRequires>True</CodeContractsInferRequires>
+ <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
+ <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
+ <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
+ <CodeContractsSuggestRequires>True</CodeContractsSuggestRequires>
+ <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsSQLServerOption />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
+ <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>TRACE;DEBUG;QED</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Runtime.Caching" />
+ <Reference Include="System.Xml.Linq" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ExecutionEngine.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="VerificationResultCache.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\AbsInt\AbsInt.csproj">
+ <Project>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</Project>
+ <Name>AbsInt</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Concurrency\Concurrency.csproj">
+ <Project>{d07b8e38-e172-47f4-ad02-0373014a46d3}</Project>
+ <Name>Concurrency</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Doomed\Doomed.csproj">
+ <Project>{884386A3-58E9-40BB-A273-B24976775553}</Project>
+ <Name>Doomed</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Houdini\Houdini.csproj">
+ <Project>{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}</Project>
+ <Name>Houdini</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Model\Model.csproj">
+ <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
+ <Name>Model</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Predication\Predication.csproj">
+ <Project>{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}</Project>
+ <Name>Predication</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/ExecutionEngine/Properties/AssemblyInfo.cs b/Source/ExecutionEngine/Properties/AssemblyInfo.cs
index 5977e799..ea288b03 100644
--- a/Source/ExecutionEngine/Properties/AssemblyInfo.cs
+++ b/Source/ExecutionEngine/Properties/AssemblyInfo.cs
@@ -1,36 +1,36 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ExecutionEngine")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("ExecutionEngine")]
-[assembly: AssemblyCopyright("Copyright © 2013")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("03fff764-c3f0-4e42-a897-a1c151b3fe6d")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ExecutionEngine")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ExecutionEngine")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("03fff764-c3f0-4e42-a897-a1c151b3fe6d")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Source/ExecutionEngine/VerificationResultCache.cs b/Source/ExecutionEngine/VerificationResultCache.cs
index 5d20e6e8..3159238c 100644
--- a/Source/ExecutionEngine/VerificationResultCache.cs
+++ b/Source/ExecutionEngine/VerificationResultCache.cs
@@ -1,640 +1,692 @@
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.IO;
-using System.Linq;
-using System.Runtime.Caching;
-using System.Text;
-using System.Text.RegularExpressions;
-using VC;
-
-namespace Microsoft.Boogie
-{
-
- struct CachedVerificationResultInjectorRun
- {
- public DateTime Start { get; internal set; }
- public DateTime End { get; internal set; }
- public int TransformedImplementationCount { get; internal set; }
- public int ImplementationCount { get; internal set; }
- public int SkippedImplementationCount { get; set; }
- public int LowPriorityImplementationCount { get; set; }
- public int MediumPriorityImplementationCount { get; set; }
- public int HighPriorityImplementationCount { get; set; }
- public long[] CachingActionCounts { get; set; }
- }
-
-
- sealed class CachedVerificationResultInjectorStatistics
- {
- ConcurrentDictionary<string, CachedVerificationResultInjectorRun> runs = new ConcurrentDictionary<string, CachedVerificationResultInjectorRun>();
-
- public bool AddRun(string requestId, CachedVerificationResultInjectorRun run)
- {
- return runs.TryAdd(requestId, run);
- }
-
- public string Output(bool printTime = false)
- {
- var wr = new StringWriter();
- if (runs.Any())
- {
- wr.WriteLine("Cached verification result injector statistics as CSV:");
- wr.WriteLine("Request ID, Transformed, Low, Medium, High, Skipped{0}", printTime ? ", Time (ms)" : "");
- foreach (var kv in runs.OrderBy(kv => ExecutionEngine.AutoRequestId(kv.Key)))
- {
- var t = printTime ? string.Format(", {0,8:F0}", kv.Value.End.Subtract(kv.Value.Start).TotalMilliseconds) : "";
- wr.WriteLine("{0,-19}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}{6}", kv.Key, kv.Value.TransformedImplementationCount, kv.Value.LowPriorityImplementationCount, kv.Value.MediumPriorityImplementationCount, kv.Value.HighPriorityImplementationCount, kv.Value.SkippedImplementationCount, t);
- }
- }
- return wr.ToString();
- }
- }
-
-
- sealed class CachedVerificationResultInjector : StandardVisitor
- {
- readonly IEnumerable<Implementation> Implementations;
- readonly Program Program;
- // TODO(wuestholz): We should probably increase the threshold to something like 2 seconds.
- static readonly double TimeThreshold = -1.0d;
- Program programInCachedSnapshot;
- Implementation currentImplementation;
- int assumptionVariableCount;
- int temporaryVariableCount;
-
- public static readonly CachedVerificationResultInjectorStatistics Statistics = new CachedVerificationResultInjectorStatistics();
-
- int FreshAssumptionVariableName
- {
- get
- {
- return assumptionVariableCount++;
- }
- }
-
- int FreshTemporaryVariableName
- {
- get
- {
- return temporaryVariableCount++;
- }
- }
-
- CachedVerificationResultInjector(Program program, IEnumerable<Implementation> implementations)
- {
- Implementations = implementations;
- Program = program;
- }
-
- public Implementation Inject(Implementation implementation, Program programInCachedSnapshot)
- {
- Contract.Requires(implementation != null && programInCachedSnapshot != null);
-
- this.programInCachedSnapshot = programInCachedSnapshot;
- assumptionVariableCount = 0;
- temporaryVariableCount = 0;
- currentImplementation = implementation;
- var result = VisitImplementation(implementation);
- currentImplementation = null;
- this.programInCachedSnapshot = null;
- return result;
- }
-
- public static void Inject(Program program, IEnumerable<Implementation> implementations, string requestId, string programId, out long[] cachingActionCounts)
- {
- var eai = new CachedVerificationResultInjector(program, implementations);
-
- cachingActionCounts = new long[Enum.GetNames(typeof(VC.ConditionGeneration.CachingAction)).Length];
- var run = new CachedVerificationResultInjectorRun { Start = DateTime.UtcNow, ImplementationCount = implementations.Count(), CachingActionCounts = cachingActionCounts };
- foreach (var impl in implementations)
- {
- int priority;
- var vr = ExecutionEngine.Cache.Lookup(impl, out priority);
- if (vr != null && vr.ProgramId == programId)
- {
- if (priority == Priority.LOW)
- {
- run.LowPriorityImplementationCount++;
- if (TimeThreshold < vr.End.Subtract(vr.Start).TotalMilliseconds)
- {
- SetErrorAndAssertionChecksumsInCachedSnapshot(impl, vr);
- if (vr.ProgramId != null)
- {
- var p = ExecutionEngine.CachedProgram(vr.ProgramId);
- if (p != null)
- {
- eai.Inject(impl, p);
- run.TransformedImplementationCount++;
- }
- }
- }
- }
- else if (priority == Priority.MEDIUM)
- {
- run.MediumPriorityImplementationCount++;
- if (TimeThreshold < vr.End.Subtract(vr.Start).TotalMilliseconds)
- {
- SetErrorAndAssertionChecksumsInCachedSnapshot(impl, vr);
- if (vr.ProgramId != null)
- {
- var p = ExecutionEngine.CachedProgram(vr.ProgramId);
- if (p != null)
- {
- eai.Inject(impl, p);
- run.TransformedImplementationCount++;
- }
- }
- }
- }
- else if (priority == Priority.HIGH)
- {
- run.HighPriorityImplementationCount++;
- }
- else if (priority == Priority.SKIP)
- {
- run.SkippedImplementationCount++;
- }
- }
- }
- run.End = DateTime.UtcNow;
- Statistics.AddRun(requestId, run);
- }
-
- private static void SetErrorAndAssertionChecksumsInCachedSnapshot(Implementation implementation, VerificationResult result)
- {
- if (result.Outcome == ConditionGeneration.Outcome.Errors && result.Errors != null && result.Errors.Count < CommandLineOptions.Clo.ProverCCLimit)
- {
- implementation.SetErrorChecksumToCachedError(result.Errors.Select(cex => new Tuple<byte[], byte[], object>(cex.Checksum, cex.SugaredCmdChecksum, cex)));
- implementation.AssertionChecksumsInCachedSnapshot = result.AssertionChecksums;
- }
- else if (result.Outcome == ConditionGeneration.Outcome.Correct)
- {
- implementation.SetErrorChecksumToCachedError(new List<Tuple<byte[], byte[], object>>());
- implementation.AssertionChecksumsInCachedSnapshot = result.AssertionChecksums;
- }
- }
-
- public override Cmd VisitCallCmd(CallCmd node)
- {
- var result = base.VisitCallCmd(node);
-
- var oldProc = programInCachedSnapshot.FindProcedure(node.Proc.Name);
- if (oldProc != null
- && oldProc.DependencyChecksum != node.Proc.DependencyChecksum
- && node.AssignedAssumptionVariable == null)
- {
- var before = new List<Cmd>();
- var beforePrecondtionCheck = new List<Cmd>();
- var after = new List<Cmd>();
- var axioms = new List<Axiom>();
- Expr assumedExpr = new LiteralExpr(Token.NoToken, false);
- // TODO(wuestholz): Try out two alternatives: only do this for low priority implementations or not at all.
- var canUseSpecs = DependencyCollector.CanExpressOldSpecs(oldProc, Program);
- if (canUseSpecs)
- {
- var desugaring = node.Desugaring;
- Contract.Assert(desugaring != null);
- var precond = node.CheckedPrecondition(oldProc, Program, e => FunctionExtractor.Extract(e, Program, axioms));
- if (precond != null)
- {
- var assume = new AssumeCmd(node.tok, precond, new QKeyValue(Token.NoToken, "precondition_previous_snapshot", new List<object>(), null));
- beforePrecondtionCheck.Add(assume);
- }
-
- var unmods = node.UnmodifiedBefore(oldProc);
- var eqs = new List<Expr>();
- foreach (var unmod in unmods)
- {
- var oldUnmod = new LocalVariable(Token.NoToken,
- new TypedIdent(Token.NoToken, string.Format("{0}##old##{1}", unmod.Name, FreshTemporaryVariableName), unmod.Type));
- var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, oldUnmod));
- var rhs = new IdentifierExpr(Token.NoToken, unmod.Decl);
- before.Add(new AssignCmd(Token.NoToken, new List<AssignLhs> { lhs }, new List<Expr> { rhs }));
- var eq = LiteralExpr.Eq(new IdentifierExpr(Token.NoToken, oldUnmod), new IdentifierExpr(Token.NoToken, unmod.Decl));
- eq.Type = Type.Bool;
- eq.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- eqs.Add(eq);
- }
-
- var mods = node.ModifiedBefore(oldProc);
- var oldSubst = new Dictionary<Variable, Expr>();
- foreach (var mod in mods)
- {
- var oldMod = new LocalVariable(Token.NoToken,
- new TypedIdent(Token.NoToken, string.Format("{0}##old##{1}", mod.Name, FreshTemporaryVariableName), mod.Type));
- oldSubst[mod.Decl] = new IdentifierExpr(Token.NoToken, oldMod);
- var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, oldMod));
- var rhs = new IdentifierExpr(Token.NoToken, mod.Decl);
- before.Add(new AssignCmd(Token.NoToken, new List<AssignLhs> { lhs }, new List<Expr> { rhs }));
- }
-
- assumedExpr = node.Postcondition(oldProc, eqs, oldSubst, Program, e => FunctionExtractor.Extract(e, Program, axioms));
- }
-
- if (assumedExpr != null)
- {
- var lv = new LocalVariable(Token.NoToken,
- new TypedIdent(Token.NoToken, string.Format("a##post##{0}", FreshAssumptionVariableName), Type.Bool),
- new QKeyValue(Token.NoToken, "assumption", new List<object>(), null));
- node.AssignedAssumptionVariable = lv;
- currentImplementation.InjectAssumptionVariable(lv, !canUseSpecs);
- var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, lv));
- var rhs = LiteralExpr.And(new IdentifierExpr(Token.NoToken, lv), assumedExpr);
- var assumed = new AssignCmd(node.tok, new List<AssignLhs> { lhs }, new List<Expr> { rhs });
- after.Add(assumed);
- }
-
- node.ExtendDesugaring(before, beforePrecondtionCheck, after);
- if (CommandLineOptions.Clo.TraceCachingForTesting || CommandLineOptions.Clo.TraceCachingForBenchmarking)
- {
- using (var tokTxtWr = new TokenTextWriter("<console>", Console.Out, false, false))
- {
- var loc = node.tok != null && node.tok != Token.NoToken ? string.Format("{0}({1},{2})", node.tok.filename, node.tok.line, node.tok.col) : "<unknown location>";
- Console.Out.WriteLine("Processing call to procedure {0} in implementation {1} (at {2}):", node.Proc.Name, currentImplementation.Name, loc);
- foreach (var a in axioms)
- {
- Console.Out.Write(" >>> added axiom: ");
- a.Expr.Emit(tokTxtWr);
- Console.Out.WriteLine();
- }
- foreach (var b in before)
- {
- Console.Out.Write(" >>> added before: ");
- b.Emit(tokTxtWr, 0);
- }
- foreach (var b in beforePrecondtionCheck)
- {
- Console.Out.Write(" >>> added before precondition check: ");
- b.Emit(tokTxtWr, 0);
- }
- foreach (var a in after)
- {
- Console.Out.Write(" >>> added after: ");
- a.Emit(tokTxtWr, 0);
- }
- }
- }
- }
-
- return result;
- }
- }
-
-
- sealed class FunctionExtractor : StandardVisitor
- {
- readonly Dictionary<Variable, BoundVariable> Substitutions = new Dictionary<Variable, BoundVariable>();
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- if (node.Decl == null || !(node.Decl is LocalVariable || node.Decl is Formal || node.Decl is GlobalVariable))
- {
- return node;
- }
- else
- {
- BoundVariable boundVar;
- if (!Substitutions.TryGetValue(node.Decl, out boundVar))
- {
- boundVar = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, node.Name, node.Type));
- Substitutions[node.Decl] = boundVar;
- }
- return new IdentifierExpr(node.tok, boundVar);
- }
- }
-
- public static Expr Extract(Expr expr, Program program, List<Axiom> axioms)
- {
- Contract.Requires(expr != null && program != null && !program.TopLevelDeclarationsAreFrozen && axioms != null);
-
- if (expr is LiteralExpr)
- {
- return expr;
- }
-
- var extractor = new FunctionExtractor();
-
- var body = extractor.VisitExpr(expr);
-
- var name = program.FreshExtractedFunctionName();
- var originalVars = extractor.Substitutions.Keys.ToList();
- var formalInArgs = originalVars.Select(v => new Formal(Token.NoToken, new TypedIdent(Token.NoToken, extractor.Substitutions[v].Name, extractor.Substitutions[v].TypedIdent.Type), true)).ToList<Variable>();
- var formalOutArg = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, name + "$result$", expr.Type), false);
- var func = new Function(Token.NoToken, name, formalInArgs, formalOutArg);
- func.AddAttribute("never_pattern");
-
- var boundVars = originalVars.Select(k => extractor.Substitutions[k]);
- var axiomCall = new NAryExpr(Token.NoToken, new FunctionCall(func), boundVars.Select(b => new IdentifierExpr(Token.NoToken, b)).ToList<Expr>());
- axiomCall.Type = expr.Type;
- axiomCall.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- var eq = LiteralExpr.Eq(axiomCall, body);
- eq.Type = body.Type;
- eq.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- if (0 < formalInArgs.Count)
- {
- var forallExpr = new ForallExpr(Token.NoToken, boundVars.ToList<Variable>(), new Trigger(Token.NoToken, true, new List<Expr> { axiomCall }), eq);
- body = forallExpr;
- forallExpr.Attributes = new QKeyValue(Token.NoToken, "weight", new List<object> { new LiteralExpr(Token.NoToken, Basetypes.BigNum.FromInt(30)) }, null);
- body.Type = Type.Bool;
- }
- else
- {
- body = eq;
- }
-
- var axiom = new Axiom(Token.NoToken, body);
- func.DefinitionAxiom = axiom;
- program.AddTopLevelDeclaration(func);
- program.AddTopLevelDeclaration(axiom);
- axioms.Add(axiom);
-
- var call = new NAryExpr(Token.NoToken, new FunctionCall(func), originalVars.Select(v => new IdentifierExpr(Token.NoToken, v)).ToList<Expr>());
- call.Type = expr.Type;
- call.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- return call;
- }
- }
-
-
- sealed class OtherDefinitionAxiomsCollector : ReadOnlyVisitor
- {
- Axiom currentAxiom;
- Trigger currentTrigger;
-
- public static void Collect(IEnumerable<Axiom> axioms)
- {
- var start = DateTime.UtcNow;
-
- var v = new OtherDefinitionAxiomsCollector();
- foreach (var a in axioms)
- {
- v.currentAxiom = a;
- v.VisitExpr(a.Expr);
- v.currentAxiom = null;
- }
-
- var end = DateTime.UtcNow;
- if (CommandLineOptions.Clo.TraceCachingForDebugging)
- {
- Console.Out.WriteLine("Collected other definition axioms within {0:F0} ms.", end.Subtract(start).TotalMilliseconds);
- }
- }
-
- public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
- {
- currentTrigger = node.Triggers;
- while (currentTrigger != null)
- {
- foreach (var e in currentTrigger.Tr)
- {
- VisitExpr(e);
- }
- currentTrigger = currentTrigger.Next;
- }
- return base.VisitQuantifierExpr(node);
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- if (currentTrigger != null)
- {
- // We found a function call within a trigger of a quantifier expression.
- var funCall = node.Fun as FunctionCall;
- if (funCall != null && funCall.Func != null && funCall.Func.Checksum != null && funCall.Func.Checksum != "stable")
- {
- funCall.Func.AddOtherDefinitionAxiom(currentAxiom);
- }
- }
- return base.VisitNAryExpr(node);
- }
- }
-
-
- sealed class DependencyCollector : ReadOnlyVisitor
- {
- private DeclWithFormals currentDeclaration;
- private Axiom currentAxiom;
-
- public static void Collect(Program program)
- {
- var start = DateTime.UtcNow;
-
- var dc = new DependencyCollector();
- dc.VisitProgram(program);
-
- var end = DateTime.UtcNow;
- if (CommandLineOptions.Clo.TraceCachingForDebugging)
- {
- Console.Out.WriteLine("Collected dependencies within {0:F0} ms.", end.Subtract(start).TotalMilliseconds);
- }
- }
-
- public static bool CanExpressOldSpecs(Procedure oldProc, Program newProg)
- {
- Contract.Requires(oldProc != null && newProg != null);
-
- var funcs = newProg.Functions;
- var globals = newProg.GlobalVariables;
- return oldProc.DependenciesCollected
- && (oldProc.FunctionDependencies == null || oldProc.FunctionDependencies.All(dep => funcs.Any(f => f.Name == dep.Name && f.DependencyChecksum == dep.DependencyChecksum)))
- && oldProc.Modifies.All(m => globals.Any(g => g.Name == m.Name));
- }
-
- public override Procedure VisitProcedure(Procedure node)
- {
- currentDeclaration = node;
-
- foreach (var param in node.InParams)
- {
- if (param.TypedIdent != null && param.TypedIdent.WhereExpr != null)
- {
- VisitExpr(param.TypedIdent.WhereExpr);
- }
- }
-
- var result = base.VisitProcedure(node);
- node.DependenciesCollected = true;
- currentDeclaration = null;
- return result;
- }
-
- public override Implementation VisitImplementation(Implementation node)
- {
- currentDeclaration = node;
-
- foreach (var param in node.InParams)
- {
- if (param.TypedIdent != null && param.TypedIdent.WhereExpr != null)
- {
- VisitExpr(param.TypedIdent.WhereExpr);
- }
- }
-
- if (node.Proc != null)
- {
- node.AddProcedureDependency(node.Proc);
- }
-
- var result = base.VisitImplementation(node);
- node.DependenciesCollected = true;
- currentDeclaration = null;
- return result;
- }
-
- public override Axiom VisitAxiom(Axiom node)
- {
- if (node.DependenciesCollected)
- {
- if (currentDeclaration != null && node.FunctionDependencies != null)
- {
- foreach (var f in node.FunctionDependencies)
- {
- currentDeclaration.AddFunctionDependency(f);
- }
- }
- return node;
- }
- currentAxiom = node;
- var result = base.VisitAxiom(node);
- node.DependenciesCollected = true;
- currentAxiom = null;
- return result;
- }
-
- public override Function VisitFunction(Function node)
- {
- currentDeclaration = node;
-
- if (node.DefinitionAxiom != null)
- {
- VisitAxiom(node.DefinitionAxiom);
- }
- if (node.OtherDefinitionAxioms != null)
- {
- foreach (var a in node.OtherDefinitionAxioms)
- {
- if (a != node.DefinitionAxiom)
- {
- VisitAxiom(a);
- }
- }
- }
-
- var result = base.VisitFunction(node);
- node.DependenciesCollected = true;
- currentDeclaration = null;
- return result;
- }
-
- public override Cmd VisitCallCmd(CallCmd node)
- {
- if (currentDeclaration != null)
- {
- currentDeclaration.AddProcedureDependency(node.Proc);
- }
-
- return base.VisitCallCmd(node);
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- var funCall = node.Fun as FunctionCall;
- if (funCall != null)
- {
- if (currentDeclaration != null)
- {
- currentDeclaration.AddFunctionDependency(funCall.Func);
- }
- if (currentAxiom != null)
- {
- currentAxiom.AddFunctionDependency(funCall.Func);
- }
- }
-
- return base.VisitNAryExpr(node);
- }
- }
-
-
- static internal class Priority
- {
- public static readonly int LOW = 1; // the same snapshot has been verified before, but a callee has changed
- public static readonly int MEDIUM = 2; // old snapshot has been verified before
- public static readonly int HIGH = 3; // has been never verified before
- public static readonly int SKIP = int.MaxValue; // highest priority to get them done as soon as possible
- }
-
-
- public sealed class VerificationResultCache
- {
- private readonly MemoryCache Cache = new MemoryCache("VerificationResultCache");
- private readonly CacheItemPolicy Policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(0, 10, 0), Priority = CacheItemPriority.Default };
-
-
- public void Insert(Implementation impl, VerificationResult result)
- {
- Contract.Requires(impl != null);
- Contract.Requires(result != null);
-
- Cache.Set(impl.Id, result, Policy);
- }
-
-
- public VerificationResult Lookup(Implementation impl, out int priority)
- {
- Contract.Requires(impl != null);
-
- var result = Cache.Get(impl.Id) as VerificationResult;
- if (result == null)
- {
- priority = Priority.HIGH;
- }
- else if (result.Checksum != impl.Checksum)
- {
- priority = Priority.MEDIUM;
- }
- else if (impl.DependencyChecksum == null || result.DependeciesChecksum != impl.DependencyChecksum)
- {
- priority = Priority.LOW;
- }
- else
- {
- priority = Priority.SKIP;
- }
- return result;
- }
-
-
- public void Clear()
- {
- Cache.Trim(100);
- }
-
-
- public void RemoveMatchingKeys(Regex keyRegexp)
- {
- Contract.Requires(keyRegexp != null);
-
- foreach (var kv in Cache)
- {
- if (keyRegexp.IsMatch(kv.Key))
- {
- Cache.Remove(kv.Key);
- }
- }
- }
-
-
- public int VerificationPriority(Implementation impl)
- {
- Contract.Requires(impl != null);
-
- int priority;
- Lookup(impl, out priority);
- return priority;
- }
- }
-
-}
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Linq;
+using System.Runtime.Caching;
+using System.Text;
+using System.Text.RegularExpressions;
+using VC;
+
+namespace Microsoft.Boogie
+{
+
+ struct CachedVerificationResultInjectorRun
+ {
+ public DateTime Start { get; internal set; }
+ public DateTime End { get; internal set; }
+ public int TransformedImplementationCount { get; internal set; }
+ public int ImplementationCount { get; internal set; }
+ public int SkippedImplementationCount { get; set; }
+ public int LowPriorityImplementationCount { get; set; }
+ public int MediumPriorityImplementationCount { get; set; }
+ public int HighPriorityImplementationCount { get; set; }
+ public long[] CachingActionCounts { get; set; }
+ }
+
+
+ sealed class CachedVerificationResultInjectorStatistics
+ {
+ ConcurrentDictionary<string, CachedVerificationResultInjectorRun> runs = new ConcurrentDictionary<string, CachedVerificationResultInjectorRun>();
+
+ public bool AddRun(string requestId, CachedVerificationResultInjectorRun run)
+ {
+ return runs.TryAdd(requestId, run);
+ }
+
+ public string Output(bool printTime = false)
+ {
+ var wr = new StringWriter();
+ if (runs.Any())
+ {
+ wr.WriteLine("Cached verification result injector statistics as CSV:");
+ wr.WriteLine("Request ID, Transformed, Low, Medium, High, Skipped{0}", printTime ? ", Time (ms)" : "");
+ foreach (var kv in runs.OrderBy(kv => ExecutionEngine.AutoRequestId(kv.Key)))
+ {
+ var t = printTime ? string.Format(", {0,8:F0}", kv.Value.End.Subtract(kv.Value.Start).TotalMilliseconds) : "";
+ wr.WriteLine("{0,-19}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}{6}", kv.Key, kv.Value.TransformedImplementationCount, kv.Value.LowPriorityImplementationCount, kv.Value.MediumPriorityImplementationCount, kv.Value.HighPriorityImplementationCount, kv.Value.SkippedImplementationCount, t);
+ }
+ }
+ return wr.ToString();
+ }
+ }
+
+
+ sealed class CachedVerificationResultInjector : StandardVisitor
+ {
+ readonly IEnumerable<Implementation> Implementations;
+ readonly Program Program;
+ // TODO(wuestholz): We should probably increase the threshold to something like 2 seconds.
+ static readonly double TimeThreshold = -1.0d;
+ Program programInCachedSnapshot;
+ Implementation currentImplementation;
+ int assumptionVariableCount;
+ int temporaryVariableCount;
+
+ public static readonly CachedVerificationResultInjectorStatistics Statistics = new CachedVerificationResultInjectorStatistics();
+
+ int FreshAssumptionVariableName
+ {
+ get
+ {
+ return assumptionVariableCount++;
+ }
+ }
+
+ int FreshTemporaryVariableName
+ {
+ get
+ {
+ return temporaryVariableCount++;
+ }
+ }
+
+ CachedVerificationResultInjector(Program program, IEnumerable<Implementation> implementations)
+ {
+ Implementations = implementations;
+ Program = program;
+ }
+
+ public Implementation Inject(Implementation implementation, Program programInCachedSnapshot)
+ {
+ Contract.Requires(implementation != null && programInCachedSnapshot != null);
+
+ this.programInCachedSnapshot = programInCachedSnapshot;
+ assumptionVariableCount = 0;
+ temporaryVariableCount = 0;
+ currentImplementation = implementation;
+
+ #region Introduce explict assumption about the precondition.
+
+ var oldProc = programInCachedSnapshot.FindProcedure(currentImplementation.Proc.Name);
+ if (oldProc != null
+ && oldProc.DependencyChecksum != currentImplementation.Proc.DependencyChecksum
+ && currentImplementation.ExplicitAssumptionAboutCachedPrecondition == null)
+ {
+ var axioms = new List<Axiom>();
+ var after = new List<Cmd>();
+ Expr assumedExpr = new LiteralExpr(Token.NoToken, false);
+ var canUseSpecs = DependencyCollector.CanExpressOldSpecs(oldProc, Program, true);
+ if (canUseSpecs && oldProc.SignatureEquals(currentImplementation.Proc))
+ {
+ var always = Substituter.SubstitutionFromHashtable(currentImplementation.GetImplFormalMap(), true, currentImplementation.Proc);
+ var forOld = Substituter.SubstitutionFromHashtable(new Dictionary<Variable, Expr>());
+ var clauses = oldProc.Requires.Select(r => Substituter.FunctionCallReresolvingApply(always, forOld, r.Condition, Program));
+ var conj = Expr.And(clauses, true);
+ assumedExpr = conj != null ? FunctionExtractor.Extract(conj, Program, axioms) : new LiteralExpr(Token.NoToken, true);
+ }
+
+ if (assumedExpr != null)
+ {
+ var lv = new LocalVariable(Token.NoToken,
+ new TypedIdent(Token.NoToken, string.Format("a##cached##{0}", FreshAssumptionVariableName), Type.Bool),
+ new QKeyValue(Token.NoToken, "assumption", new List<object>(), null));
+ currentImplementation.InjectAssumptionVariable(lv, !canUseSpecs);
+ var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, lv));
+ var rhs = LiteralExpr.And(new IdentifierExpr(Token.NoToken, lv), assumedExpr);
+ var assumed = new AssignCmd(currentImplementation.tok, new List<AssignLhs> { lhs }, new List<Expr> { rhs });
+ assumed.IrrelevantForChecksumComputation = true;
+ currentImplementation.ExplicitAssumptionAboutCachedPrecondition = assumed;
+ after.Add(assumed);
+ }
+
+ if (CommandLineOptions.Clo.TraceCachingForTesting || CommandLineOptions.Clo.TraceCachingForBenchmarking)
+ {
+ using (var tokTxtWr = new TokenTextWriter("<console>", Console.Out, false, false))
+ {
+ var loc = currentImplementation.tok != null && currentImplementation.tok != Token.NoToken ? string.Format("{0}({1},{2})", currentImplementation.tok.filename, currentImplementation.tok.line, currentImplementation.tok.col) : "<unknown location>";
+ Console.Out.WriteLine("Processing implementation {0} (at {1}):", currentImplementation.Name, loc);
+ foreach (var a in axioms)
+ {
+ Console.Out.Write(" >>> added axiom: ");
+ a.Expr.Emit(tokTxtWr);
+ Console.Out.WriteLine();
+ }
+ foreach (var b in after)
+ {
+ Console.Out.Write(" >>> added after assuming the current precondition: ");
+ b.Emit(tokTxtWr, 0);
+ }
+ }
+ }
+ }
+
+ #endregion
+
+ var result = VisitImplementation(currentImplementation);
+ currentImplementation = null;
+ this.programInCachedSnapshot = null;
+ return result;
+ }
+
+ public static void Inject(Program program, IEnumerable<Implementation> implementations, string requestId, string programId, out long[] cachingActionCounts)
+ {
+ var eai = new CachedVerificationResultInjector(program, implementations);
+
+ cachingActionCounts = new long[Enum.GetNames(typeof(VC.ConditionGeneration.CachingAction)).Length];
+ var run = new CachedVerificationResultInjectorRun { Start = DateTime.UtcNow, ImplementationCount = implementations.Count(), CachingActionCounts = cachingActionCounts };
+ foreach (var impl in implementations)
+ {
+ int priority;
+ var vr = ExecutionEngine.Cache.Lookup(impl, out priority);
+ if (vr != null && vr.ProgramId == programId)
+ {
+ if (priority == Priority.LOW) {
+ run.LowPriorityImplementationCount++;
+ } else if (priority == Priority.MEDIUM) {
+ run.MediumPriorityImplementationCount++;
+ } else if (priority == Priority.HIGH) {
+ run.HighPriorityImplementationCount++;
+ } else if (priority == Priority.SKIP) {
+ run.SkippedImplementationCount++;
+ }
+
+ if (priority == Priority.LOW || priority == Priority.MEDIUM || 3 <= CommandLineOptions.Clo.VerifySnapshots) {
+ if (TimeThreshold < vr.End.Subtract(vr.Start).TotalMilliseconds) {
+ SetErrorAndAssertionChecksumsInCachedSnapshot(impl, vr);
+ if (vr.ProgramId != null) {
+ var p = ExecutionEngine.CachedProgram(vr.ProgramId);
+ if (p != null) {
+ eai.Inject(impl, p);
+ run.TransformedImplementationCount++;
+ }
+ }
+ }
+ }
+ }
+ }
+ run.End = DateTime.UtcNow;
+ Statistics.AddRun(requestId, run);
+ }
+
+ private static void SetErrorAndAssertionChecksumsInCachedSnapshot(Implementation implementation, VerificationResult result)
+ {
+ if (result.Outcome == ConditionGeneration.Outcome.Errors && result.Errors != null && result.Errors.Count < CommandLineOptions.Clo.ProverCCLimit)
+ {
+ implementation.SetErrorChecksumToCachedError(result.Errors.Select(cex => new Tuple<byte[], byte[], object>(cex.Checksum, cex.SugaredCmdChecksum, cex)));
+ implementation.AssertionChecksumsInCachedSnapshot = result.AssertionChecksums;
+ }
+ else if (result.Outcome == ConditionGeneration.Outcome.Correct)
+ {
+ implementation.SetErrorChecksumToCachedError(new List<Tuple<byte[], byte[], object>>());
+ implementation.AssertionChecksumsInCachedSnapshot = result.AssertionChecksums;
+ }
+ }
+
+ public override Cmd VisitCallCmd(CallCmd node)
+ {
+ var result = base.VisitCallCmd(node);
+
+ var oldProc = programInCachedSnapshot.FindProcedure(node.Proc.Name);
+ if (oldProc != null
+ && oldProc.DependencyChecksum != node.Proc.DependencyChecksum
+ && node.AssignedAssumptionVariable == null)
+ {
+ var before = new List<Cmd>();
+ var beforePrecondtionCheck = new List<Cmd>();
+ var after = new List<Cmd>();
+ var axioms = new List<Axiom>();
+ Expr assumedExpr = new LiteralExpr(Token.NoToken, false);
+ // TODO(wuestholz): Try out two alternatives: only do this for low priority implementations or not at all.
+ var canUseSpecs = DependencyCollector.CanExpressOldSpecs(oldProc, Program);
+ if (canUseSpecs && oldProc.SignatureEquals(node.Proc))
+ {
+ var desugaring = node.Desugaring;
+ Contract.Assert(desugaring != null);
+ var precond = node.CheckedPrecondition(oldProc, Program, e => FunctionExtractor.Extract(e, Program, axioms));
+ if (precond != null)
+ {
+ var assume = new AssumeCmd(node.tok, precond, new QKeyValue(Token.NoToken, "precondition_previous_snapshot", new List<object>(), null));
+ assume.IrrelevantForChecksumComputation = true;
+ beforePrecondtionCheck.Add(assume);
+ }
+
+ var unmods = node.UnmodifiedBefore(oldProc);
+ var eqs = new List<Expr>();
+ foreach (var unmod in unmods)
+ {
+ var oldUnmod = new LocalVariable(Token.NoToken,
+ new TypedIdent(Token.NoToken, string.Format("{0}##old##{1}", unmod.Name, FreshTemporaryVariableName), unmod.Type));
+ var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, oldUnmod));
+ var rhs = new IdentifierExpr(Token.NoToken, unmod.Decl);
+ var cmd = new AssignCmd(Token.NoToken, new List<AssignLhs> { lhs }, new List<Expr> { rhs });
+ cmd.IrrelevantForChecksumComputation = true;
+ before.Add(cmd);
+ var eq = LiteralExpr.Eq(new IdentifierExpr(Token.NoToken, oldUnmod), new IdentifierExpr(Token.NoToken, unmod.Decl));
+ eq.Type = Type.Bool;
+ eq.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ eqs.Add(eq);
+ }
+
+ var mods = node.ModifiedBefore(oldProc);
+ var oldSubst = new Dictionary<Variable, Expr>();
+ foreach (var mod in mods)
+ {
+ var oldMod = new LocalVariable(Token.NoToken,
+ new TypedIdent(Token.NoToken, string.Format("{0}##old##{1}", mod.Name, FreshTemporaryVariableName), mod.Type));
+ oldSubst[mod.Decl] = new IdentifierExpr(Token.NoToken, oldMod);
+ var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, oldMod));
+ var rhs = new IdentifierExpr(Token.NoToken, mod.Decl);
+ var cmd = new AssignCmd(Token.NoToken, new List<AssignLhs> { lhs }, new List<Expr> { rhs });
+ cmd.IrrelevantForChecksumComputation = true;
+ before.Add(cmd);
+ }
+
+ assumedExpr = node.Postcondition(oldProc, eqs, oldSubst, Program, e => FunctionExtractor.Extract(e, Program, axioms));
+ if (assumedExpr == null)
+ {
+ assumedExpr = new LiteralExpr(Token.NoToken, true);
+ }
+ }
+
+ if (assumedExpr != null)
+ {
+ var lv = new LocalVariable(Token.NoToken,
+ new TypedIdent(Token.NoToken, string.Format("a##cached##{0}", FreshAssumptionVariableName), Type.Bool),
+ new QKeyValue(Token.NoToken, "assumption", new List<object>(), null));
+ node.AssignedAssumptionVariable = lv;
+ currentImplementation.InjectAssumptionVariable(lv, !canUseSpecs);
+ var lhs = new SimpleAssignLhs(Token.NoToken, new IdentifierExpr(Token.NoToken, lv));
+ var rhs = LiteralExpr.And(new IdentifierExpr(Token.NoToken, lv), assumedExpr);
+ var assumed = new AssignCmd(node.tok, new List<AssignLhs> { lhs }, new List<Expr> { rhs });
+ assumed.IrrelevantForChecksumComputation = true;
+ after.Add(assumed);
+ }
+
+ node.ExtendDesugaring(before, beforePrecondtionCheck, after);
+ if (CommandLineOptions.Clo.TraceCachingForTesting || CommandLineOptions.Clo.TraceCachingForBenchmarking)
+ {
+ using (var tokTxtWr = new TokenTextWriter("<console>", Console.Out, false, false))
+ {
+ var loc = node.tok != null && node.tok != Token.NoToken ? string.Format("{0}({1},{2})", node.tok.filename, node.tok.line, node.tok.col) : "<unknown location>";
+ Console.Out.WriteLine("Processing call to procedure {0} in implementation {1} (at {2}):", node.Proc.Name, currentImplementation.Name, loc);
+ foreach (var a in axioms)
+ {
+ Console.Out.Write(" >>> added axiom: ");
+ a.Expr.Emit(tokTxtWr);
+ Console.Out.WriteLine();
+ }
+ foreach (var b in before)
+ {
+ Console.Out.Write(" >>> added before: ");
+ b.Emit(tokTxtWr, 0);
+ }
+ foreach (var b in beforePrecondtionCheck)
+ {
+ Console.Out.Write(" >>> added before precondition check: ");
+ b.Emit(tokTxtWr, 0);
+ }
+ foreach (var a in after)
+ {
+ Console.Out.Write(" >>> added after: ");
+ a.Emit(tokTxtWr, 0);
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+ }
+
+
+ sealed class FunctionExtractor : StandardVisitor
+ {
+ readonly Dictionary<Variable, BoundVariable> Substitutions = new Dictionary<Variable, BoundVariable>();
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ if (node.Decl == null || !(node.Decl is LocalVariable || node.Decl is Formal || node.Decl is GlobalVariable))
+ {
+ return node;
+ }
+ else
+ {
+ BoundVariable boundVar;
+ if (!Substitutions.TryGetValue(node.Decl, out boundVar))
+ {
+ boundVar = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken, node.Name, node.Type));
+ Substitutions[node.Decl] = boundVar;
+ }
+ return new IdentifierExpr(node.tok, boundVar);
+ }
+ }
+
+ public static Expr Extract(Expr expr, Program program, List<Axiom> axioms)
+ {
+ Contract.Requires(expr != null && program != null && !program.TopLevelDeclarationsAreFrozen && axioms != null);
+
+ if (expr is LiteralExpr)
+ {
+ return expr;
+ }
+
+ var extractor = new FunctionExtractor();
+
+ var body = extractor.VisitExpr(expr);
+
+ var name = program.FreshExtractedFunctionName();
+ var originalVars = extractor.Substitutions.Keys.ToList();
+ var formalInArgs = originalVars.Select(v => new Formal(Token.NoToken, new TypedIdent(Token.NoToken, extractor.Substitutions[v].Name, extractor.Substitutions[v].TypedIdent.Type), true)).ToList<Variable>();
+ var formalOutArg = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, name + "$result$", expr.Type), false);
+ var func = new Function(Token.NoToken, name, formalInArgs, formalOutArg);
+ func.AddAttribute("never_pattern");
+
+ var boundVars = originalVars.Select(k => extractor.Substitutions[k]);
+ var axiomCall = new NAryExpr(Token.NoToken, new FunctionCall(func), boundVars.Select(b => new IdentifierExpr(Token.NoToken, b)).ToList<Expr>());
+ axiomCall.Type = expr.Type;
+ axiomCall.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ var eq = LiteralExpr.Eq(axiomCall, body);
+ eq.Type = body.Type;
+ eq.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ if (0 < formalInArgs.Count)
+ {
+ var forallExpr = new ForallExpr(Token.NoToken, boundVars.ToList<Variable>(), new Trigger(Token.NoToken, true, new List<Expr> { axiomCall }), eq);
+ body = forallExpr;
+ forallExpr.Attributes = new QKeyValue(Token.NoToken, "weight", new List<object> { new LiteralExpr(Token.NoToken, Basetypes.BigNum.FromInt(30)) }, null);
+ body.Type = Type.Bool;
+ }
+ else
+ {
+ body = eq;
+ }
+
+ var axiom = new Axiom(Token.NoToken, body);
+ func.DefinitionAxiom = axiom;
+ program.AddTopLevelDeclaration(func);
+ program.AddTopLevelDeclaration(axiom);
+ axioms.Add(axiom);
+
+ var call = new NAryExpr(Token.NoToken, new FunctionCall(func), originalVars.Select(v => new IdentifierExpr(Token.NoToken, v)).ToList<Expr>());
+ call.Type = expr.Type;
+ call.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ return call;
+ }
+ }
+
+
+ sealed class OtherDefinitionAxiomsCollector : ReadOnlyVisitor
+ {
+ Axiom currentAxiom;
+ Trigger currentTrigger;
+
+ public static void Collect(IEnumerable<Axiom> axioms)
+ {
+ var start = DateTime.UtcNow;
+
+ var v = new OtherDefinitionAxiomsCollector();
+ foreach (var a in axioms)
+ {
+ v.currentAxiom = a;
+ v.VisitExpr(a.Expr);
+ v.currentAxiom = null;
+ }
+
+ var end = DateTime.UtcNow;
+ if (CommandLineOptions.Clo.TraceCachingForDebugging)
+ {
+ Console.Out.WriteLine("Collected other definition axioms within {0:F0} ms.", end.Subtract(start).TotalMilliseconds);
+ }
+ }
+
+ public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
+ {
+ currentTrigger = node.Triggers;
+ while (currentTrigger != null)
+ {
+ foreach (var e in currentTrigger.Tr)
+ {
+ VisitExpr(e);
+ }
+ currentTrigger = currentTrigger.Next;
+ }
+ return base.VisitQuantifierExpr(node);
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ if (currentTrigger != null)
+ {
+ // We found a function call within a trigger of a quantifier expression.
+ var funCall = node.Fun as FunctionCall;
+ if (funCall != null && funCall.Func != null && funCall.Func.Checksum != null && funCall.Func.Checksum != "stable")
+ {
+ funCall.Func.AddOtherDefinitionAxiom(currentAxiom);
+ }
+ }
+ return base.VisitNAryExpr(node);
+ }
+ }
+
+
+ sealed class DependencyCollector : ReadOnlyVisitor
+ {
+ private DeclWithFormals currentDeclaration;
+ private Axiom currentAxiom;
+
+ public static void Collect(Program program)
+ {
+ var start = DateTime.UtcNow;
+
+ var dc = new DependencyCollector();
+ dc.VisitProgram(program);
+
+ var end = DateTime.UtcNow;
+ if (CommandLineOptions.Clo.TraceCachingForDebugging)
+ {
+ Console.Out.WriteLine("Collected dependencies within {0:F0} ms.", end.Subtract(start).TotalMilliseconds);
+ }
+ }
+
+ public static bool CanExpressOldSpecs(Procedure oldProc, Program newProg, bool ignoreModifiesClauses = false)
+ {
+ Contract.Requires(oldProc != null && newProg != null);
+
+ var funcs = newProg.Functions;
+ var globals = newProg.GlobalVariables;
+ return oldProc.DependenciesCollected
+ && (oldProc.FunctionDependencies == null || oldProc.FunctionDependencies.All(dep => funcs.Any(f => f.Name == dep.Name && f.DependencyChecksum == dep.DependencyChecksum)))
+ && (ignoreModifiesClauses || oldProc.Modifies.All(m => globals.Any(g => g.Name == m.Name)));
+ }
+
+ public override Procedure VisitProcedure(Procedure node)
+ {
+ currentDeclaration = node;
+
+ foreach (var param in node.InParams)
+ {
+ if (param.TypedIdent != null && param.TypedIdent.WhereExpr != null)
+ {
+ VisitExpr(param.TypedIdent.WhereExpr);
+ }
+ }
+
+ var result = base.VisitProcedure(node);
+ node.DependenciesCollected = true;
+ currentDeclaration = null;
+ return result;
+ }
+
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ currentDeclaration = node;
+
+ foreach (var param in node.InParams)
+ {
+ if (param.TypedIdent != null && param.TypedIdent.WhereExpr != null)
+ {
+ VisitExpr(param.TypedIdent.WhereExpr);
+ }
+ }
+
+ if (node.Proc != null)
+ {
+ node.AddProcedureDependency(node.Proc);
+ }
+
+ var result = base.VisitImplementation(node);
+ node.DependenciesCollected = true;
+ currentDeclaration = null;
+ return result;
+ }
+
+ public override Axiom VisitAxiom(Axiom node)
+ {
+ if (node.DependenciesCollected)
+ {
+ if (currentDeclaration != null && node.FunctionDependencies != null)
+ {
+ foreach (var f in node.FunctionDependencies)
+ {
+ currentDeclaration.AddFunctionDependency(f);
+ }
+ }
+ return node;
+ }
+ currentAxiom = node;
+ var result = base.VisitAxiom(node);
+ node.DependenciesCollected = true;
+ currentAxiom = null;
+ return result;
+ }
+
+ public override Function VisitFunction(Function node)
+ {
+ currentDeclaration = node;
+
+ if (node.DefinitionAxiom != null)
+ {
+ VisitAxiom(node.DefinitionAxiom);
+ }
+ if (node.OtherDefinitionAxioms != null)
+ {
+ foreach (var a in node.OtherDefinitionAxioms)
+ {
+ if (a != node.DefinitionAxiom)
+ {
+ VisitAxiom(a);
+ }
+ }
+ }
+
+ var result = base.VisitFunction(node);
+ node.DependenciesCollected = true;
+ currentDeclaration = null;
+ return result;
+ }
+
+ public override Cmd VisitCallCmd(CallCmd node)
+ {
+ if (currentDeclaration != null)
+ {
+ currentDeclaration.AddProcedureDependency(node.Proc);
+ }
+
+ return base.VisitCallCmd(node);
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ var funCall = node.Fun as FunctionCall;
+ if (funCall != null)
+ {
+ if (currentDeclaration != null)
+ {
+ currentDeclaration.AddFunctionDependency(funCall.Func);
+ }
+ if (currentAxiom != null)
+ {
+ currentAxiom.AddFunctionDependency(funCall.Func);
+ }
+ }
+
+ return base.VisitNAryExpr(node);
+ }
+ }
+
+
+ static internal class Priority
+ {
+ public static readonly int LOW = 1; // the same snapshot has been verified before, but a callee has changed
+ public static readonly int MEDIUM = 2; // old snapshot has been verified before
+ public static readonly int HIGH = 3; // has been never verified before
+ public static readonly int SKIP = int.MaxValue; // highest priority to get them done as soon as possible
+ }
+
+
+ public sealed class VerificationResultCache
+ {
+ private readonly MemoryCache Cache = new MemoryCache("VerificationResultCache");
+ private readonly CacheItemPolicy Policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(0, 10, 0), Priority = CacheItemPriority.Default };
+
+
+ public void Insert(Implementation impl, VerificationResult result)
+ {
+ Contract.Requires(impl != null);
+ Contract.Requires(result != null);
+
+ Cache.Set(impl.Id, result, Policy);
+ }
+
+
+ public VerificationResult Lookup(Implementation impl, out int priority)
+ {
+ Contract.Requires(impl != null);
+
+ var result = Cache.Get(impl.Id) as VerificationResult;
+ if (result == null)
+ {
+ priority = Priority.HIGH;
+ }
+ else if (result.Checksum != impl.Checksum)
+ {
+ priority = Priority.MEDIUM;
+ }
+ else if (impl.DependencyChecksum == null || result.DependeciesChecksum != impl.DependencyChecksum)
+ {
+ priority = Priority.LOW;
+ }
+ else if (result.Outcome == ConditionGeneration.Outcome.TimedOut && CommandLineOptions.Clo.RunDiagnosticsOnTimeout)
+ {
+ priority = Priority.MEDIUM;
+ }
+ else
+ {
+ priority = Priority.SKIP;
+ }
+ return result;
+ }
+
+
+ public void Clear()
+ {
+ Cache.Trim(100);
+ }
+
+
+ public void RemoveMatchingKeys(Regex keyRegexp)
+ {
+ Contract.Requires(keyRegexp != null);
+
+ foreach (var kv in Cache)
+ {
+ if (keyRegexp.IsMatch(kv.Key))
+ {
+ Cache.Remove(kv.Key);
+ }
+ }
+ }
+
+
+ public int VerificationPriority(Implementation impl)
+ {
+ Contract.Requires(impl != null);
+
+ int priority;
+ Lookup(impl, out priority);
+ return priority;
+ }
+ }
+
+}
diff --git a/Source/Forro.sln b/Source/Forro.sln
index 39e50152..daaf8ecc 100644
--- a/Source/Forro.sln
+++ b/Source/Forro.sln
@@ -1,20 +1,20 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Forro", "Forro\Forro.fsproj", "{C75E47A0-E88D-4035-9EBF-F6647AF92B79}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x86 = Debug|x86
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Debug|x86.ActiveCfg = Debug|x86
- {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Debug|x86.Build.0 = Debug|x86
- {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Release|x86.ActiveCfg = Release|x86
- {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Forro", "Forro\Forro.fsproj", "{C75E47A0-E88D-4035-9EBF-F6647AF92B79}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x86 = Debug|x86
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Debug|x86.ActiveCfg = Debug|x86
+ {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Debug|x86.Build.0 = Debug|x86
+ {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Release|x86.ActiveCfg = Release|x86
+ {C75E47A0-E88D-4035-9EBF-F6647AF92B79}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Forro/Ast.fs b/Source/Forro/Ast.fs
index 6c7ba65c..779beefb 100644
--- a/Source/Forro/Ast.fs
+++ b/Source/Forro/Ast.fs
@@ -1,38 +1,38 @@
-module Forro
-
-type Field = Head | Tail | Valid
-
-type Variable = Var of string
-
-let VarName v =
- match v with Var(x) -> x
-
-type Operator = Eq | Neq | Plus | Minus | Times
- | Less | AtMost | And | Or
-
-type Expression =
- | Constant of int
- | Null
- | Identifier of Variable
- | Not of Expression
- | Binary of Operator * Expression * Expression
- | Select of Expression * Field
- | Old of Expression
-
-type Statement =
- | Assign of Variable * Expression
- | Update of Expression * Field * Expression
- | Alloc of Variable * Expression * Expression
- | IfStmt of Expression * StmtList * StmtList
- | WhileStmt of Expression * Expression list * StmtList
- | CallStmt of Variable list * string * Expression list
- | Assert of Expression
-
-and StmtList =
- Block of Statement list
-
-type Procedure =
- Proc of string * Variable list * Variable list * Expression * Expression * StmtList
-
-type Program =
- Prog of Procedure list
+module Forro
+
+type Field = Head | Tail | Valid
+
+type Variable = Var of string
+
+let VarName v =
+ match v with Var(x) -> x
+
+type Operator = Eq | Neq | Plus | Minus | Times
+ | Less | AtMost | And | Or
+
+type Expression =
+ | Constant of int
+ | Null
+ | Identifier of Variable
+ | Not of Expression
+ | Binary of Operator * Expression * Expression
+ | Select of Expression * Field
+ | Old of Expression
+
+type Statement =
+ | Assign of Variable * Expression
+ | Update of Expression * Field * Expression
+ | Alloc of Variable * Expression * Expression
+ | IfStmt of Expression * StmtList * StmtList
+ | WhileStmt of Expression * Expression list * StmtList
+ | CallStmt of Variable list * string * Expression list
+ | Assert of Expression
+
+and StmtList =
+ Block of Statement list
+
+type Procedure =
+ Proc of string * Variable list * Variable list * Expression * Expression * StmtList
+
+type Program =
+ Prog of Procedure list
diff --git a/Source/Forro/BoogieAst.fs b/Source/Forro/BoogieAst.fs
index 964f6667..7c1819da 100644
--- a/Source/Forro/BoogieAst.fs
+++ b/Source/Forro/BoogieAst.fs
@@ -1,40 +1,40 @@
-namespace BoogieAst
-
-type BType = BInt | BBool
-
-type BOperator = BEq | BNeq | BPlus | BMinus | BTimes | BLess | BAtMost | BAnd | BOr
-
-type BExpression =
- | BConstant of int
- | BFalse
- | BTrue
- | BNull
- | BIdentifier of string
- | BNot of BExpression
- | BBinary of BOperator * BExpression * BExpression
- | BSelect of string * BExpression
- | BToPred of BExpression // BToPred(e) == (e != 0)
- | BToTerm of BExpression // BToTerm(e) == (if e then 1 else 0)
- | BOld of BExpression
- | BFunc of string * BExpression list
-
-type BStmtList =
- BBlock of Statement list
-
-and Statement =
- | BAssign of string * BExpression
- | BUpdate of string * BExpression * BExpression
- | BHavoc of string list
- | BAssert of BExpression
- | BAssume of BExpression
- | BIfStmt of BExpression * BStmtList * BStmtList
- | BWhileStmt of BExpression * BExpression list * BStmtList
- | BCallStmt of string list * string * BExpression list
-
-type BVarDecl = BVar of string * BType
-
-type BProcedure =
- BProc of string * BVarDecl list * BVarDecl list * BExpression * string list * BExpression * BVarDecl list * BStmtList
-
-type BProgram =
- BProg of string * BProcedure list
+namespace BoogieAst
+
+type BType = BInt | BBool
+
+type BOperator = BEq | BNeq | BPlus | BMinus | BTimes | BLess | BAtMost | BAnd | BOr
+
+type BExpression =
+ | BConstant of int
+ | BFalse
+ | BTrue
+ | BNull
+ | BIdentifier of string
+ | BNot of BExpression
+ | BBinary of BOperator * BExpression * BExpression
+ | BSelect of string * BExpression
+ | BToPred of BExpression // BToPred(e) == (e != 0)
+ | BToTerm of BExpression // BToTerm(e) == (if e then 1 else 0)
+ | BOld of BExpression
+ | BFunc of string * BExpression list
+
+type BStmtList =
+ BBlock of Statement list
+
+and Statement =
+ | BAssign of string * BExpression
+ | BUpdate of string * BExpression * BExpression
+ | BHavoc of string list
+ | BAssert of BExpression
+ | BAssume of BExpression
+ | BIfStmt of BExpression * BStmtList * BStmtList
+ | BWhileStmt of BExpression * BExpression list * BStmtList
+ | BCallStmt of string list * string * BExpression list
+
+type BVarDecl = BVar of string * BType
+
+type BProcedure =
+ BProc of string * BVarDecl list * BVarDecl list * BExpression * string list * BExpression * BVarDecl list * BStmtList
+
+type BProgram =
+ BProg of string * BProcedure list
diff --git a/Source/Forro/BoogiePrinter.fs b/Source/Forro/BoogiePrinter.fs
index 8f2b37ee..e9497ab5 100644
--- a/Source/Forro/BoogiePrinter.fs
+++ b/Source/Forro/BoogiePrinter.fs
@@ -1,112 +1,112 @@
-module BoogiePrinter
-
-open ForroPrinter // to get Indent
-open BoogieAst
-
-let PrintWithSep Pr sep list =
- ignore (List.fold (fun sp e -> printf "%s" sp ; Pr e ; sep) "" list)
-
-let TypeName t =
- match t with
- | BInt -> "int"
- | BBool -> "bool"
-
-let PrVarType v =
- match v with
- | BVar(name,t) ->
- printf "%s: %s" name (TypeName t)
-
-let PrintOp op =
- printf " "
- match op with
- | BEq -> printf "=="
- | BNeq -> printf "!="
- | BPlus -> printf "+"
- | BMinus -> printf "-"
- | BTimes -> printf "*"
- | BLess -> printf "<"
- | BAtMost -> printf "<="
- | BAnd -> printf "&&"
- | BOr -> printf "||"
- printf " "
-
-let rec PrintExpr e =
- match e with
- | BConstant(x) -> printf "%d" x
- | BFalse -> printf "false"
- | BTrue -> printf "true"
- | BNull -> printf "null"
- | BIdentifier(id) -> printf "%s" id
- | BNot(e) -> printf "!(" ; PrintExpr e ; printf ")"
- | BBinary(op,e0,e1) -> printf "(" ; PrintExpr e0 ; PrintOp op ; PrintExpr e1 ; printf ")"
- | BSelect(var,e) -> printf "%s[" var ; PrintExpr e ; printf "]"
- | BToPred(e) -> printf "(" ; PrintExpr e ; printf " != 0)"
- | BToTerm(e) -> printf "(if " ; PrintExpr e ; printf " then 1 else 0)"
- | BOld(e) -> printf "old(" ; PrintExpr e ; printf ")"
- | BFunc(id,args) -> printf "%s(" id ; PrintWithSep PrintExpr ", " args ; printf ")"
-
-let rec PrintStmt indent stmt =
- Indent indent
- let ind = indent + 2
- match stmt with
- | BAssign(id,e) -> printf "%s := " id ; PrintExpr e ; printfn ";"
- | BUpdate(id,obj,rhs) -> printf "%s[" id ; PrintExpr obj ; printf "] := " ; PrintExpr rhs ; printfn ";"
- | BHavoc(ids) -> printf "havoc " ; PrintWithSep (printf "%s") ", " ids ; printfn ";"
- | BAssert(e) -> printf "assert " ; PrintExpr e ; printfn ";"
- | BAssume(e) -> printf "assume " ; PrintExpr e ; printfn ";"
- | BIfStmt(e,thn,els) ->
- printf "if (" ; PrintExpr e ; printfn ") {"
- PrintStmtList ind thn
- Indent indent
- printfn "} else {"
- PrintStmtList ind els
- Indent indent
- printfn "}"
- | BWhileStmt(e, invs, body) ->
- printf "while (" ; PrintExpr e ; printfn ")"
- List.iter (fun inv -> Indent ind ; printf "invariant " ; PrintExpr inv ; printfn ";") invs
- Indent indent
- printfn "{"
- PrintStmtList ind body
- Indent indent
- printfn "}"
- | BCallStmt(outs, id, ins) ->
- printf "call "
- if outs.IsEmpty then () else PrintWithSep (fun p -> printf "%s" p) ", " outs ; printf " := "
- printf "%s(" id
- PrintWithSep PrintExpr ", " ins
- printfn ");"
-
-and PrintStmtList indent stmts =
- match stmts with
- | BBlock(slist) -> List.iter (fun s -> PrintStmt indent s) slist
-
-let BPrintProc proc =
- match proc with
- | BProc(name, ins, outs, req, frame, ens, locals, body) ->
- printfn ""
- printf "procedure %s(" name
- PrintWithSep PrVarType ", " ins
- printf ") returns ("
- PrintWithSep PrVarType ", " outs
- printfn ")"
- printf " requires "
- PrintExpr req
- printfn ";"
- printf " modifies "
- PrintWithSep (printf "%s") ", " frame
- printfn ";"
- printf " ensures "
- PrintExpr ens
- printfn ";"
- printfn "{"
- List.iter (fun local -> printf " var " ; PrVarType local ; printfn ";") locals
- if locals.IsEmpty then () else printfn ""
- PrintStmtList 2 body
- printfn "}"
-
-let BPrint (prog: BProgram) =
- match prog with
- | BProg(prelude, procs) ->
- printfn "%s" prelude
- List.iter BPrintProc procs
+module BoogiePrinter
+
+open ForroPrinter // to get Indent
+open BoogieAst
+
+let PrintWithSep Pr sep list =
+ ignore (List.fold (fun sp e -> printf "%s" sp ; Pr e ; sep) "" list)
+
+let TypeName t =
+ match t with
+ | BInt -> "int"
+ | BBool -> "bool"
+
+let PrVarType v =
+ match v with
+ | BVar(name,t) ->
+ printf "%s: %s" name (TypeName t)
+
+let PrintOp op =
+ printf " "
+ match op with
+ | BEq -> printf "=="
+ | BNeq -> printf "!="
+ | BPlus -> printf "+"
+ | BMinus -> printf "-"
+ | BTimes -> printf "*"
+ | BLess -> printf "<"
+ | BAtMost -> printf "<="
+ | BAnd -> printf "&&"
+ | BOr -> printf "||"
+ printf " "
+
+let rec PrintExpr e =
+ match e with
+ | BConstant(x) -> printf "%d" x
+ | BFalse -> printf "false"
+ | BTrue -> printf "true"
+ | BNull -> printf "null"
+ | BIdentifier(id) -> printf "%s" id
+ | BNot(e) -> printf "!(" ; PrintExpr e ; printf ")"
+ | BBinary(op,e0,e1) -> printf "(" ; PrintExpr e0 ; PrintOp op ; PrintExpr e1 ; printf ")"
+ | BSelect(var,e) -> printf "%s[" var ; PrintExpr e ; printf "]"
+ | BToPred(e) -> printf "(" ; PrintExpr e ; printf " != 0)"
+ | BToTerm(e) -> printf "(if " ; PrintExpr e ; printf " then 1 else 0)"
+ | BOld(e) -> printf "old(" ; PrintExpr e ; printf ")"
+ | BFunc(id,args) -> printf "%s(" id ; PrintWithSep PrintExpr ", " args ; printf ")"
+
+let rec PrintStmt indent stmt =
+ Indent indent
+ let ind = indent + 2
+ match stmt with
+ | BAssign(id,e) -> printf "%s := " id ; PrintExpr e ; printfn ";"
+ | BUpdate(id,obj,rhs) -> printf "%s[" id ; PrintExpr obj ; printf "] := " ; PrintExpr rhs ; printfn ";"
+ | BHavoc(ids) -> printf "havoc " ; PrintWithSep (printf "%s") ", " ids ; printfn ";"
+ | BAssert(e) -> printf "assert " ; PrintExpr e ; printfn ";"
+ | BAssume(e) -> printf "assume " ; PrintExpr e ; printfn ";"
+ | BIfStmt(e,thn,els) ->
+ printf "if (" ; PrintExpr e ; printfn ") {"
+ PrintStmtList ind thn
+ Indent indent
+ printfn "} else {"
+ PrintStmtList ind els
+ Indent indent
+ printfn "}"
+ | BWhileStmt(e, invs, body) ->
+ printf "while (" ; PrintExpr e ; printfn ")"
+ List.iter (fun inv -> Indent ind ; printf "invariant " ; PrintExpr inv ; printfn ";") invs
+ Indent indent
+ printfn "{"
+ PrintStmtList ind body
+ Indent indent
+ printfn "}"
+ | BCallStmt(outs, id, ins) ->
+ printf "call "
+ if outs.IsEmpty then () else PrintWithSep (fun p -> printf "%s" p) ", " outs ; printf " := "
+ printf "%s(" id
+ PrintWithSep PrintExpr ", " ins
+ printfn ");"
+
+and PrintStmtList indent stmts =
+ match stmts with
+ | BBlock(slist) -> List.iter (fun s -> PrintStmt indent s) slist
+
+let BPrintProc proc =
+ match proc with
+ | BProc(name, ins, outs, req, frame, ens, locals, body) ->
+ printfn ""
+ printf "procedure %s(" name
+ PrintWithSep PrVarType ", " ins
+ printf ") returns ("
+ PrintWithSep PrVarType ", " outs
+ printfn ")"
+ printf " requires "
+ PrintExpr req
+ printfn ";"
+ printf " modifies "
+ PrintWithSep (printf "%s") ", " frame
+ printfn ";"
+ printf " ensures "
+ PrintExpr ens
+ printfn ";"
+ printfn "{"
+ List.iter (fun local -> printf " var " ; PrVarType local ; printfn ";") locals
+ if locals.IsEmpty then () else printfn ""
+ PrintStmtList 2 body
+ printfn "}"
+
+let BPrint (prog: BProgram) =
+ match prog with
+ | BProg(prelude, procs) ->
+ printfn "%s" prelude
+ List.iter BPrintProc procs
diff --git a/Source/Forro/Forro.fsproj b/Source/Forro/Forro.fsproj
index 8f6fc223..161d79db 100644
--- a/Source/Forro/Forro.fsproj
+++ b/Source/Forro/Forro.fsproj
@@ -1,83 +1,83 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{c75e47a0-e88d-4035-9ebf-f6647af92b79}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <RootNamespace>Language</RootNamespace>
- <AssemblyName>Forro</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <TargetFrameworkProfile>Client</TargetFrameworkProfile>
- <Name>Language</Name>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <Tailcalls>false</Tailcalls>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <WarningLevel>3</WarningLevel>
- <PlatformTarget>x86</PlatformTarget>
- <DocumentationFile>bin\Debug\Language.XML</DocumentationFile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <Tailcalls>true</Tailcalls>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <WarningLevel>3</WarningLevel>
- <PlatformTarget>x86</PlatformTarget>
- <DocumentationFile>bin\Release\Language.XML</DocumentationFile>
- </PropertyGroup>
- <Import Project="$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets" />
- <Import Project="$(MSBuildExtensionsPath32)\..\FSharpPowerPack-2.0.0.0\bin\FSharp.PowerPack.targets" />
- <PropertyGroup>
- <FsLexOutputFolder>$(IntermediateOutputPath)</FsLexOutputFolder>
- <FsYaccOutputFolder>$(IntermediateOutputPath)</FsYaccOutputFolder>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="Ast.fs" />
- <Compile Include="$(IntermediateOutputPath)\Parser.fs">
- <Visible>false</Visible>
- <Link>Parser.fs</Link>
- </Compile>
- <Compile Include="$(IntermediateOutputPath)\Lexer.fs">
- <Visible>false</Visible>
- <Link>Lexer.fs</Link>
- </Compile>
- <FsYacc Include="Parser.fsy">
- <OtherFlags>--module Parser</OtherFlags>
- </FsYacc>
- <FsLex Include="Lexer.fsl">
- <OtherFlags>--unicode</OtherFlags>
- </FsLex>
- <Compile Include="Printer.fs" />
- <Compile Include="Resolver.fs" />
- <Compile Include="BoogieAst.fs" />
- <Compile Include="BoogiePrinter.fs" />
- <Compile Include="Translator.fs" />
- <Compile Include="Main.fs" />
- </ItemGroup>
- <ItemGroup>
- <Reference Include="FSharp.PowerPack">
- <HintPath>C:\Program Files\FSharpPowerPack-1.9.9.9\bin\FSharp.PowerPack.dll</HintPath>
- </Reference>
- <Reference Include="mscorlib" />
- <Reference Include="FSharp.Core" />
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Numerics" />
- </ItemGroup>
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{c75e47a0-e88d-4035-9ebf-f6647af92b79}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>Language</RootNamespace>
+ <AssemblyName>Forro</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+ <Name>Language</Name>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <Tailcalls>false</Tailcalls>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <WarningLevel>3</WarningLevel>
+ <PlatformTarget>x86</PlatformTarget>
+ <DocumentationFile>bin\Debug\Language.XML</DocumentationFile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <Tailcalls>true</Tailcalls>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <WarningLevel>3</WarningLevel>
+ <PlatformTarget>x86</PlatformTarget>
+ <DocumentationFile>bin\Release\Language.XML</DocumentationFile>
+ </PropertyGroup>
+ <Import Project="$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets" />
+ <Import Project="$(MSBuildExtensionsPath32)\..\FSharpPowerPack-2.0.0.0\bin\FSharp.PowerPack.targets" />
+ <PropertyGroup>
+ <FsLexOutputFolder>$(IntermediateOutputPath)</FsLexOutputFolder>
+ <FsYaccOutputFolder>$(IntermediateOutputPath)</FsYaccOutputFolder>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="Ast.fs" />
+ <Compile Include="$(IntermediateOutputPath)\Parser.fs">
+ <Visible>false</Visible>
+ <Link>Parser.fs</Link>
+ </Compile>
+ <Compile Include="$(IntermediateOutputPath)\Lexer.fs">
+ <Visible>false</Visible>
+ <Link>Lexer.fs</Link>
+ </Compile>
+ <FsYacc Include="Parser.fsy">
+ <OtherFlags>--module Parser</OtherFlags>
+ </FsYacc>
+ <FsLex Include="Lexer.fsl">
+ <OtherFlags>--unicode</OtherFlags>
+ </FsLex>
+ <Compile Include="Printer.fs" />
+ <Compile Include="Resolver.fs" />
+ <Compile Include="BoogieAst.fs" />
+ <Compile Include="BoogiePrinter.fs" />
+ <Compile Include="Translator.fs" />
+ <Compile Include="Main.fs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Reference Include="FSharp.PowerPack">
+ <HintPath>C:\Program Files\FSharpPowerPack-1.9.9.9\bin\FSharp.PowerPack.dll</HintPath>
+ </Reference>
+ <Reference Include="mscorlib" />
+ <Reference Include="FSharp.Core" />
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Numerics" />
+ </ItemGroup>
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/Forro/Lexer.fsl b/Source/Forro/Lexer.fsl
index 4252af23..5f69df7c 100644
--- a/Source/Forro/Lexer.fsl
+++ b/Source/Forro/Lexer.fsl
@@ -1,60 +1,60 @@
-{
-module Lexer
-open System
-open Parser
-open Microsoft.FSharp.Text.Lexing
-}
-
-// These are some regular expression definitions
-let digit = ['0'-'9']
-let nondigit = [ 'a'-'z' 'A'-'Z' '_' ]
-let idchar = (nondigit | digit)
-let whitespace = [' ' '\t' ]
-let newline = ('\n' | '\r' '\n')
-
-rule tokenize = parse
-| whitespace { tokenize lexbuf }
-| newline { // lexbuf.EndPos <- lexbuf.EndPos.AsNewLinePos() ;
- tokenize lexbuf }
-// operators
-| "==" { EQ }
-| "!=" { NEQ }
-| "+" { PLUS }
-| "-" { MINUS }
-| "*" { STAR }
-| "<" { LESS }
-| "<=" { ATMOST }
-| "and" { AND }
-| "or" { OR }
-| "not" { NOT }
-| "old" { OLD }
-| "." { DOT }
-// misc
-| "(" { LPAREN }
-| ")" { RPAREN }
-| "{" { LCURLY }
-| "}" { RCURLY }
-| ";" { SEMI }
-| "," { COMMA }
-| ":=" { ASSIGN }
-// keywords
-| "procedure" { PROCEDURE }
-| "requires" { REQUIRES }
-| "ensures" { ENSURES }
-| "do" { DO }
-| "end" { END }
-| "new" { NEW }
-| "if" { IF }
-| "then" { THEN }
-| "else" { ELSE }
-| "while" { WHILE }
-| "invariant" { INVARIANT }
-| "call" { CALL }
-| "assert" { ASSERT }
-// literals
-| ['-']?digit+ { INT32 (Int32.Parse(LexBuffer<char>.LexemeString lexbuf)) }
-| "null" { NULL }
-// identifiers
-| idchar+ { ID (LexBuffer<char>.LexemeString lexbuf) }
-// EOF
-| eof { EOF }
+{
+module Lexer
+open System
+open Parser
+open Microsoft.FSharp.Text.Lexing
+}
+
+// These are some regular expression definitions
+let digit = ['0'-'9']
+let nondigit = [ 'a'-'z' 'A'-'Z' '_' ]
+let idchar = (nondigit | digit)
+let whitespace = [' ' '\t' ]
+let newline = ('\n' | '\r' '\n')
+
+rule tokenize = parse
+| whitespace { tokenize lexbuf }
+| newline { // lexbuf.EndPos <- lexbuf.EndPos.AsNewLinePos() ;
+ tokenize lexbuf }
+// operators
+| "==" { EQ }
+| "!=" { NEQ }
+| "+" { PLUS }
+| "-" { MINUS }
+| "*" { STAR }
+| "<" { LESS }
+| "<=" { ATMOST }
+| "and" { AND }
+| "or" { OR }
+| "not" { NOT }
+| "old" { OLD }
+| "." { DOT }
+// misc
+| "(" { LPAREN }
+| ")" { RPAREN }
+| "{" { LCURLY }
+| "}" { RCURLY }
+| ";" { SEMI }
+| "," { COMMA }
+| ":=" { ASSIGN }
+// keywords
+| "procedure" { PROCEDURE }
+| "requires" { REQUIRES }
+| "ensures" { ENSURES }
+| "do" { DO }
+| "end" { END }
+| "new" { NEW }
+| "if" { IF }
+| "then" { THEN }
+| "else" { ELSE }
+| "while" { WHILE }
+| "invariant" { INVARIANT }
+| "call" { CALL }
+| "assert" { ASSERT }
+// literals
+| ['-']?digit+ { INT32 (Int32.Parse(LexBuffer<char>.LexemeString lexbuf)) }
+| "null" { NULL }
+// identifiers
+| idchar+ { ID (LexBuffer<char>.LexemeString lexbuf) }
+// EOF
+| eof { EOF }
diff --git a/Source/Forro/Main.fs b/Source/Forro/Main.fs
index 3b0f550f..07d1a12e 100644
--- a/Source/Forro/Main.fs
+++ b/Source/Forro/Main.fs
@@ -1,57 +1,57 @@
-open System
-open Microsoft.FSharp.Text.Lexing
-
-open System.IO
-
-open ForroPrinter
-open Resolver
-open Lexer
-open Parser
-open BoogiePrinter
-
-open Translator
-
-let readAndProcess tracing (filename: string) =
- try
- if tracing then printfn "Forró: version 1.0" else ()
- // lex
- let f = if filename = null then Console.In else new StreamReader(filename) :> TextReader
- let lexbuf = LexBuffer<char>.FromTextReader(f)
- lexbuf.EndPos <- { pos_bol = 0;
- pos_fname=if filename = null then "stdin" else filename;
- pos_cnum=0;
- pos_lnum=1 }
- // parse
- let prog = Parser.start Lexer.tokenize lexbuf
- // print the given Forró program
- if tracing then
- printfn "---------- Given Forró program ----------"
- Print prog
- else ()
- // make sure the program is legal
- let rprog = Resolve prog
- // translate into Boogie
- let bprog = Translate rprog
- // print the Boogie program
- if tracing then printfn "---------- Resulting Boogie program ----------" else ()
- BPrint bprog
- // that's it
- if tracing then printfn "----------" ; printfn "Done" else ()
-
- with
- | ResolutionError(msg) ->
- printfn "Resolution error: %s" msg
- | ex ->
- printfn "Unhandled Exception: %s" ex.Message
-
-let rec start n (args: string []) tracing filename =
- if n < args.Length then
- let arg = args.[n]
- if arg = "/break" then ignore (System.Diagnostics.Debugger.Launch()) else ()
- let filename = if arg.StartsWith "/" then filename else arg
- start (n+1) args (tracing || arg = "/trace") filename
- else
- readAndProcess tracing filename
-
-let args = Environment.GetCommandLineArgs()
-start 1 args false null
+open System
+open Microsoft.FSharp.Text.Lexing
+
+open System.IO
+
+open ForroPrinter
+open Resolver
+open Lexer
+open Parser
+open BoogiePrinter
+
+open Translator
+
+let readAndProcess tracing (filename: string) =
+ try
+ if tracing then printfn "Forró: version 1.0" else ()
+ // lex
+ let f = if filename = null then Console.In else new StreamReader(filename) :> TextReader
+ let lexbuf = LexBuffer<char>.FromTextReader(f)
+ lexbuf.EndPos <- { pos_bol = 0;
+ pos_fname=if filename = null then "stdin" else filename;
+ pos_cnum=0;
+ pos_lnum=1 }
+ // parse
+ let prog = Parser.start Lexer.tokenize lexbuf
+ // print the given Forró program
+ if tracing then
+ printfn "---------- Given Forró program ----------"
+ Print prog
+ else ()
+ // make sure the program is legal
+ let rprog = Resolve prog
+ // translate into Boogie
+ let bprog = Translate rprog
+ // print the Boogie program
+ if tracing then printfn "---------- Resulting Boogie program ----------" else ()
+ BPrint bprog
+ // that's it
+ if tracing then printfn "----------" ; printfn "Done" else ()
+
+ with
+ | ResolutionError(msg) ->
+ printfn "Resolution error: %s" msg
+ | ex ->
+ printfn "Unhandled Exception: %s" ex.Message
+
+let rec start n (args: string []) tracing filename =
+ if n < args.Length then
+ let arg = args.[n]
+ if arg = "/break" then ignore (System.Diagnostics.Debugger.Launch()) else ()
+ let filename = if arg.StartsWith "/" then filename else arg
+ start (n+1) args (tracing || arg = "/trace") filename
+ else
+ readAndProcess tracing filename
+
+let args = Environment.GetCommandLineArgs()
+start 1 args false null
diff --git a/Source/Forro/Parser.fsy b/Source/Forro/Parser.fsy
index 5dbb8a4c..af64d267 100644
--- a/Source/Forro/Parser.fsy
+++ b/Source/Forro/Parser.fsy
@@ -1,122 +1,122 @@
-%{
-
-open Forro
-
-exception ParseError of string
-
-let StringsToVariables ss = [ for s in ss -> Var(s) ]
-
-let IdToField id =
- match id with
- | "head" -> Field.Head
- | "tail" -> Field.Tail
- | "valid" -> Field.Valid
- | _ -> raise (ParseError ("illegal field selector: '" + id + "' (legal selectors are 'head', 'tail', and 'valid')"))
-
-%}
-
-// The start token becomes a parser function in the compiled code:
-%start start
-
-// These are the terminal tokens of the grammar along with the types of
-// the data carried by each token:
-%token <string> ID
-%token <System.Int32> INT32
-%token NULL
-%token DOT
-%token NOT
-%token STAR
-%token PLUS MINUS
-%token EQ NEQ LESS ATMOST
-%token AND OR
-%token OLD LPAREN RPAREN LCURLY RCURLY SEMI COMMA ASSIGN
-%token PROCEDURE REQUIRES ENSURES DO END
-%token NEW IF THEN ELSE WHILE INVARIANT CALL ASSERT
-%token EOF
-
-// This is the type of the data produced by a successful reduction of the 'start'
-// symbol:
-%type < Forro.Program > start
-
-%%
-
-// These are the rules of the grammar along with the F# code of the
-// actions executed as rules are reduced. In this case the actions
-// produce data using F# data construction terms.
-start: Prog EOF { Prog(List.rev($1)) }
-
-Prog: Proc { [$1] }
- | Prog Proc { $2 :: $1 }
-
-Proc:
- PROCEDURE Signature ProcedureSpec
- DO StmtList END SEMI
- { match $2, $3 with (outs,id,ins), (req,ens) -> Proc(id, StringsToVariables ins, StringsToVariables outs, req, ens, $5) }
-
-ProcedureSpec:
- REQUIRES Expression ENSURES Expression { $2, $4 }
-
-Signature:
- ID LPAREN IdList RPAREN { [], $1, $3 }
- | ID LPAREN RPAREN { [], $1, [] }
- | IdList ASSIGN ID LPAREN IdList RPAREN { $1, $3, $5 }
- | IdList ASSIGN ID LPAREN RPAREN { $1, $3, [] }
-
-IdList: ID { [$1] }
- | ID COMMA IdList { $1 :: $3 }
-
-Expression:
- AtomicExpr { $1 }
- | NOT Expression { Not($2) }
- | Expression PLUS Expression { Binary(Operator.Plus, $1, $3) }
- | Expression MINUS Expression { Binary(Operator.Minus, $1, $3) }
- | Expression STAR Expression { Binary(Operator.Times, $1, $3) }
- | Expression EQ Expression { Binary(Operator.Eq, $1, $3) }
- | Expression NEQ Expression { Binary(Operator.Neq, $1, $3) }
- | Expression LESS Expression { Binary(Operator.Less, $1, $3) }
- | Expression ATMOST Expression { Binary(Operator.AtMost, $1, $3) }
- | Expression AND Expression { Binary(Operator.And, $1, $3) }
- | Expression OR Expression { Binary(Operator.Or, $1, $3) }
-
-AtomicExpr:
- INT32 { Constant($1) }
- | NULL { Null }
- | ID { Identifier(Var($1)) }
- | OLD LPAREN Expression RPAREN { Old($3) }
- | LPAREN Expression RPAREN { $2 }
- | FieldSelect { match $1 with e,f -> Select(e,f) }
-
-FieldSelect:
- AtomicExpr DOT ID { $1, IdToField $3 }
-
-ExprList:
- | Expression { [$1] }
- | Expression COMMA ExprList { $1::$3 }
-
-VarList:
- | ID ASSIGN { [Var($1)] }
- | ID COMMA VarList { Var($1)::$3 }
-
-StmtList:
- StmtListX { Block($1) }
-
-StmtListX:
- { [] }
- | Stmt StmtListX { $1::$2 }
-
-Stmt:
- ID ASSIGN Expression SEMI { Assign(Var($1), $3) }
- | ID ASSIGN NEW LPAREN Expression COMMA
- Expression RPAREN SEMI { Alloc(Var($1), $5, $7) }
- | FieldSelect ASSIGN Expression SEMI { match $1 with e,f -> Update(e, f, $3) }
- | IF Expression THEN StmtList ELSE StmtList END SEMI { IfStmt($2,$4,$6) }
- | WHILE Expression Invariants DO StmtList END SEMI { WhileStmt($2,$3,$5) }
- | CALL ID LPAREN RPAREN SEMI { CallStmt([],$2,[]) }
- | CALL ID LPAREN ExprList RPAREN SEMI { CallStmt([],$2,$4) }
- | CALL VarList ID LPAREN RPAREN SEMI { CallStmt($2,$3,[]) }
- | CALL VarList ID LPAREN ExprList RPAREN SEMI { CallStmt($2,$3,$5) }
- | ASSERT Expression SEMI { Assert($2) }
-
-Invariants:
- { [] }
- | INVARIANT Expression Invariants { $2::$3 }
+%{
+
+open Forro
+
+exception ParseError of string
+
+let StringsToVariables ss = [ for s in ss -> Var(s) ]
+
+let IdToField id =
+ match id with
+ | "head" -> Field.Head
+ | "tail" -> Field.Tail
+ | "valid" -> Field.Valid
+ | _ -> raise (ParseError ("illegal field selector: '" + id + "' (legal selectors are 'head', 'tail', and 'valid')"))
+
+%}
+
+// The start token becomes a parser function in the compiled code:
+%start start
+
+// These are the terminal tokens of the grammar along with the types of
+// the data carried by each token:
+%token <string> ID
+%token <System.Int32> INT32
+%token NULL
+%token DOT
+%token NOT
+%token STAR
+%token PLUS MINUS
+%token EQ NEQ LESS ATMOST
+%token AND OR
+%token OLD LPAREN RPAREN LCURLY RCURLY SEMI COMMA ASSIGN
+%token PROCEDURE REQUIRES ENSURES DO END
+%token NEW IF THEN ELSE WHILE INVARIANT CALL ASSERT
+%token EOF
+
+// This is the type of the data produced by a successful reduction of the 'start'
+// symbol:
+%type < Forro.Program > start
+
+%%
+
+// These are the rules of the grammar along with the F# code of the
+// actions executed as rules are reduced. In this case the actions
+// produce data using F# data construction terms.
+start: Prog EOF { Prog(List.rev($1)) }
+
+Prog: Proc { [$1] }
+ | Prog Proc { $2 :: $1 }
+
+Proc:
+ PROCEDURE Signature ProcedureSpec
+ DO StmtList END SEMI
+ { match $2, $3 with (outs,id,ins), (req,ens) -> Proc(id, StringsToVariables ins, StringsToVariables outs, req, ens, $5) }
+
+ProcedureSpec:
+ REQUIRES Expression ENSURES Expression { $2, $4 }
+
+Signature:
+ ID LPAREN IdList RPAREN { [], $1, $3 }
+ | ID LPAREN RPAREN { [], $1, [] }
+ | IdList ASSIGN ID LPAREN IdList RPAREN { $1, $3, $5 }
+ | IdList ASSIGN ID LPAREN RPAREN { $1, $3, [] }
+
+IdList: ID { [$1] }
+ | ID COMMA IdList { $1 :: $3 }
+
+Expression:
+ AtomicExpr { $1 }
+ | NOT Expression { Not($2) }
+ | Expression PLUS Expression { Binary(Operator.Plus, $1, $3) }
+ | Expression MINUS Expression { Binary(Operator.Minus, $1, $3) }
+ | Expression STAR Expression { Binary(Operator.Times, $1, $3) }
+ | Expression EQ Expression { Binary(Operator.Eq, $1, $3) }
+ | Expression NEQ Expression { Binary(Operator.Neq, $1, $3) }
+ | Expression LESS Expression { Binary(Operator.Less, $1, $3) }
+ | Expression ATMOST Expression { Binary(Operator.AtMost, $1, $3) }
+ | Expression AND Expression { Binary(Operator.And, $1, $3) }
+ | Expression OR Expression { Binary(Operator.Or, $1, $3) }
+
+AtomicExpr:
+ INT32 { Constant($1) }
+ | NULL { Null }
+ | ID { Identifier(Var($1)) }
+ | OLD LPAREN Expression RPAREN { Old($3) }
+ | LPAREN Expression RPAREN { $2 }
+ | FieldSelect { match $1 with e,f -> Select(e,f) }
+
+FieldSelect:
+ AtomicExpr DOT ID { $1, IdToField $3 }
+
+ExprList:
+ | Expression { [$1] }
+ | Expression COMMA ExprList { $1::$3 }
+
+VarList:
+ | ID ASSIGN { [Var($1)] }
+ | ID COMMA VarList { Var($1)::$3 }
+
+StmtList:
+ StmtListX { Block($1) }
+
+StmtListX:
+ { [] }
+ | Stmt StmtListX { $1::$2 }
+
+Stmt:
+ ID ASSIGN Expression SEMI { Assign(Var($1), $3) }
+ | ID ASSIGN NEW LPAREN Expression COMMA
+ Expression RPAREN SEMI { Alloc(Var($1), $5, $7) }
+ | FieldSelect ASSIGN Expression SEMI { match $1 with e,f -> Update(e, f, $3) }
+ | IF Expression THEN StmtList ELSE StmtList END SEMI { IfStmt($2,$4,$6) }
+ | WHILE Expression Invariants DO StmtList END SEMI { WhileStmt($2,$3,$5) }
+ | CALL ID LPAREN RPAREN SEMI { CallStmt([],$2,[]) }
+ | CALL ID LPAREN ExprList RPAREN SEMI { CallStmt([],$2,$4) }
+ | CALL VarList ID LPAREN RPAREN SEMI { CallStmt($2,$3,[]) }
+ | CALL VarList ID LPAREN ExprList RPAREN SEMI { CallStmt($2,$3,$5) }
+ | ASSERT Expression SEMI { Assert($2) }
+
+Invariants:
+ { [] }
+ | INVARIANT Expression Invariants { $2::$3 }
diff --git a/Source/Forro/Printer.fs b/Source/Forro/Printer.fs
index 2a9eac84..d168e094 100644
--- a/Source/Forro/Printer.fs
+++ b/Source/Forro/Printer.fs
@@ -1,107 +1,107 @@
-module ForroPrinter
-
-open System
-open Forro
-
-let PrintField f =
- printf "."
- match f with
- | Head -> printf "head"
- | Tail -> printf "tail"
- | Valid -> printf "valid"
-
-let PrintOp op =
- printf " "
- match op with
- | Eq -> printf "=="
- | Neq -> printf "!="
- | Plus -> printf "+"
- | Minus -> printf "-"
- | Times -> printf "*"
- | Less -> printf "<"
- | AtMost -> printf "<="
- | And -> printf "and"
- | Or -> printf "or"
- printf " "
-
-let rec PrintExpr e outermost =
- match e with
- | Constant(x) -> printf "%i" x
- | Null -> printf "null"
- | Identifier(Var(x)) -> printf "%s" x
- | Not(e) -> printf "not(" ; PrintExpr e true ; printf ")"
- | Binary(op,a,b) ->
- if outermost then () else printf "("
- PrintExpr a false ; PrintOp op ; PrintExpr b false
- if outermost then () else printf ")"
- | Select(e,f) -> PrintExpr e false ; PrintField f
- | Old(e) -> printf "old(" ; PrintExpr e true ; printf ")"
-
-let rec Indent n =
- if n = 0 then () else printf " " ; Indent (n-1)
-
-let rec PrintStmt indent s =
- Indent indent
- let ind = indent + 2
- match s with
- | Assign(Var(x), e) -> printf "%s" x ; printf " := " ; PrintExpr e true
- | Update(obj,f,rhs) -> PrintExpr obj false ; PrintField f ; printf " := " ; PrintExpr rhs true
- | Alloc(Var(x),hd,tl) -> printf "%s" x ; printf " := new (" ; PrintExpr hd false ; printf ", " ; PrintExpr tl false ; printf ")"
- | IfStmt(guard,thn,els) ->
- printf "if " ; PrintExpr guard true ; printfn " then"
- PrintStmtList ind thn
- Indent indent ; printfn "else"
- PrintStmtList ind els
- Indent indent ; printf "end"
- | WhileStmt(guard,invs,body) ->
- printf "while " ; PrintExpr guard true ; printfn ""
- List.iter (fun inv -> Indent ind ; printf "invariant " ; PrintExpr inv true ; printfn "") invs
- Indent indent ; printfn "do"
- PrintStmtList ind body
- Indent indent ; printf "end"
- | CallStmt(outs,id,ins) ->
- printf "call "
- if outs.IsEmpty then () else
- ignore (List.fold (fun sep v -> printf "%s%s" sep (VarName v) ; ", ") "" outs) ; printf " :="
- printf " %s" id
- printf "("
- ignore (List.fold (fun sep e -> printf "%s" sep ; PrintExpr e false ; ", ") "" ins)
- printf ")"
- | Assert(e) ->
- printf "assert " ; PrintExpr e true
- printfn ";"
-
-and PrintStmtList indent slist =
- match slist with
- | Block(ss) -> List.iter (fun s -> PrintStmt indent s) ss
-
-let PrintProc p =
- match p with
- | Proc(name, ins, outs, req, ens, body) ->
- // signature
- printf "procedure "
- if outs.IsEmpty then () else
- ignore (List.fold (fun sep v -> printf "%s%s" sep (VarName v) ; ", ") "" outs) ; printf " :="
- printf " %s(" name
- ignore (List.fold (fun sep v -> printf "%s%s" sep (VarName v) ; ", ") "" ins)
- printfn ")"
- // specification
- printf " requires "
- PrintExpr req true
- printfn ""
- printf " ensures "
- PrintExpr ens true
- printfn ""
- // body
- printfn "do"
- PrintStmtList 2 body
- printfn "end;"
-
-let rec PrintProcs ps =
- match ps with
- | [] -> ()
- | p::rest -> PrintProc p ; PrintProcs rest
-
-let Print prog =
- match prog with
- | Prog(procs) -> PrintProcs procs
+module ForroPrinter
+
+open System
+open Forro
+
+let PrintField f =
+ printf "."
+ match f with
+ | Head -> printf "head"
+ | Tail -> printf "tail"
+ | Valid -> printf "valid"
+
+let PrintOp op =
+ printf " "
+ match op with
+ | Eq -> printf "=="
+ | Neq -> printf "!="
+ | Plus -> printf "+"
+ | Minus -> printf "-"
+ | Times -> printf "*"
+ | Less -> printf "<"
+ | AtMost -> printf "<="
+ | And -> printf "and"
+ | Or -> printf "or"
+ printf " "
+
+let rec PrintExpr e outermost =
+ match e with
+ | Constant(x) -> printf "%i" x
+ | Null -> printf "null"
+ | Identifier(Var(x)) -> printf "%s" x
+ | Not(e) -> printf "not(" ; PrintExpr e true ; printf ")"
+ | Binary(op,a,b) ->
+ if outermost then () else printf "("
+ PrintExpr a false ; PrintOp op ; PrintExpr b false
+ if outermost then () else printf ")"
+ | Select(e,f) -> PrintExpr e false ; PrintField f
+ | Old(e) -> printf "old(" ; PrintExpr e true ; printf ")"
+
+let rec Indent n =
+ if n = 0 then () else printf " " ; Indent (n-1)
+
+let rec PrintStmt indent s =
+ Indent indent
+ let ind = indent + 2
+ match s with
+ | Assign(Var(x), e) -> printf "%s" x ; printf " := " ; PrintExpr e true
+ | Update(obj,f,rhs) -> PrintExpr obj false ; PrintField f ; printf " := " ; PrintExpr rhs true
+ | Alloc(Var(x),hd,tl) -> printf "%s" x ; printf " := new (" ; PrintExpr hd false ; printf ", " ; PrintExpr tl false ; printf ")"
+ | IfStmt(guard,thn,els) ->
+ printf "if " ; PrintExpr guard true ; printfn " then"
+ PrintStmtList ind thn
+ Indent indent ; printfn "else"
+ PrintStmtList ind els
+ Indent indent ; printf "end"
+ | WhileStmt(guard,invs,body) ->
+ printf "while " ; PrintExpr guard true ; printfn ""
+ List.iter (fun inv -> Indent ind ; printf "invariant " ; PrintExpr inv true ; printfn "") invs
+ Indent indent ; printfn "do"
+ PrintStmtList ind body
+ Indent indent ; printf "end"
+ | CallStmt(outs,id,ins) ->
+ printf "call "
+ if outs.IsEmpty then () else
+ ignore (List.fold (fun sep v -> printf "%s%s" sep (VarName v) ; ", ") "" outs) ; printf " :="
+ printf " %s" id
+ printf "("
+ ignore (List.fold (fun sep e -> printf "%s" sep ; PrintExpr e false ; ", ") "" ins)
+ printf ")"
+ | Assert(e) ->
+ printf "assert " ; PrintExpr e true
+ printfn ";"
+
+and PrintStmtList indent slist =
+ match slist with
+ | Block(ss) -> List.iter (fun s -> PrintStmt indent s) ss
+
+let PrintProc p =
+ match p with
+ | Proc(name, ins, outs, req, ens, body) ->
+ // signature
+ printf "procedure "
+ if outs.IsEmpty then () else
+ ignore (List.fold (fun sep v -> printf "%s%s" sep (VarName v) ; ", ") "" outs) ; printf " :="
+ printf " %s(" name
+ ignore (List.fold (fun sep v -> printf "%s%s" sep (VarName v) ; ", ") "" ins)
+ printfn ")"
+ // specification
+ printf " requires "
+ PrintExpr req true
+ printfn ""
+ printf " ensures "
+ PrintExpr ens true
+ printfn ""
+ // body
+ printfn "do"
+ PrintStmtList 2 body
+ printfn "end;"
+
+let rec PrintProcs ps =
+ match ps with
+ | [] -> ()
+ | p::rest -> PrintProc p ; PrintProcs rest
+
+let Print prog =
+ match prog with
+ | Prog(procs) -> PrintProcs procs
diff --git a/Source/Forro/Resolver.fs b/Source/Forro/Resolver.fs
index f227a5ca..9209f640 100644
--- a/Source/Forro/Resolver.fs
+++ b/Source/Forro/Resolver.fs
@@ -1,123 +1,123 @@
-module Resolver
-
-open System
-open Forro
-
-exception ResolutionError of string
-
-let ResolutionError(s: string) =
- raise (ResolutionError s)
-
-type VarKind = InParam | OutParam | Local
-
-type Context(procedures: Collections.Generic.IDictionary<string,Procedure>) =
- let mutable locals = null
- let mutable ProcName = ""
- member c.Procedures = procedures
- member c.StartNewProcedure procName =
- ProcName <- procName
- locals <- new Collections.Generic.Dictionary<string,VarKind>()
- member c.AddLocal v kind =
- let name = VarName v
- if locals.ContainsKey name then ResolutionError ("duplicate variable '" + name + "' in procedure '" + ProcName + "'") else ()
- locals.Add(name, kind)
- member c.HasLocal v =
- locals.ContainsKey (VarName v)
- member c.IncludeAssignmentTarget v =
- let name = VarName v
- if locals.ContainsKey name then
- let kind = locals.Item name
- if kind = VarKind.InParam then ResolutionError ("variable '"+ name + "' is an in-parameter, which cannot be used as an assignment target") else ()
- else
- locals.Add(name, VarKind.Local)
- member v.GetLocals = locals
-
-let rec ResolveExpr (ctx: Context) expr twoState specContext =
- match expr with
- | Constant(x) -> ()
- | Null -> ()
- | Identifier(v) ->
- if ctx.HasLocal v then () else ResolutionError ("undefined variable: " + VarName v)
- | Not(e) -> ResolveExpr ctx e twoState specContext
- | Binary(op,a,b) ->
- ResolveExpr ctx a twoState specContext
- ResolveExpr ctx b twoState specContext
- | Select(e,f) ->
- ResolveExpr ctx e twoState specContext
- match f with
- | Valid -> if specContext then () else ResolutionError "valid can only be used in specification contexts"
- | _ -> ()
- | Old(e) ->
- if twoState then () else ResolutionError "old expressions can only be used in two-state contexts"
- ResolveExpr ctx e twoState specContext
-
-let rec ResolveStmt ctx s =
- match s with
- | Assign(v, e) ->
- ResolveExpr ctx e false false
- ctx.IncludeAssignmentTarget v
- | Update(obj,f,rhs) ->
- ResolveExpr ctx obj false false
- match f with
- | Valid -> ResolutionError "valid can only be used in specification contexts (in particular, it cannot be assigned to)"
- | _ -> ()
- ResolveExpr ctx rhs false false
- | Alloc(v,hd,tl) ->
- ResolveExpr ctx hd false false
- ResolveExpr ctx tl false false
- ctx.IncludeAssignmentTarget v
- | IfStmt(guard,thn,els) ->
- ResolveExpr ctx guard false false
- ResolveStmtList ctx thn
- ResolveStmtList ctx els
- | WhileStmt(guard,invs,body) ->
- ResolveExpr ctx guard false false
- List.iter (fun inv -> ResolveExpr ctx inv true true) invs
- ResolveStmtList ctx body
- | CallStmt(outs,name,ins) ->
- if ctx.Procedures.ContainsKey name then () else ResolutionError ("call to undefined procedure: " + name)
- match ctx.Procedures.Item name with
- | Proc(_,fIns,fOuts,_,_,_) ->
- if fIns.Length = ins.Length then () else ResolutionError ("call to " + name + " has wrong number of in-parameters (got " + ins.Length.ToString() + ", expected " + fIns.Length.ToString() + ")")
- if fOuts.Length = outs.Length then () else ResolutionError ("call to " + name + " has wrong number of out-parameters (got " + outs.Length.ToString() + ", expected " + fOuts.Length.ToString() + ")")
- List.iter (fun e -> ResolveExpr ctx e false false) ins
- let outnames = new Collections.Generic.Dictionary<string,Variable>()
- List.iter (fun v ->
- ctx.IncludeAssignmentTarget v
- let name = VarName v
- if outnames.ContainsKey name then ResolutionError ("an actual out-parameter is allowed only once for a call: " + name) else ()
- outnames.Add(name, v)
- ) outs
- | Assert(e) ->
- ResolveExpr ctx e true true
-
-and ResolveStmtList ctx slist =
- match slist with
- | Block(ss) -> List.iter (fun s -> ResolveStmt ctx s) ss
-
-let ProcedureName p =
- match p with Proc(id,_,_,_,_,_) -> id
-
-let ResolveProc (ctx: Context) p =
- match p with
- | Proc(name, ins, outs, req, ens, body) ->
- // look up 'name' in ctx.Procedures, report an error if it is not 'p'
- let q = ctx.Procedures.Item name
- if p <> q then ResolutionError ("duplicate procedure: " + name) else ()
- ctx.StartNewProcedure name
- // look for duplicates in ins+outs
- List.iter (fun v -> ctx.AddLocal v VarKind.InParam) ins
- List.iter (fun v -> ctx.AddLocal v VarKind.OutParam) outs
- // resolve specification
- ResolveExpr ctx req false true
- ResolveExpr ctx ens true true
- // resolve body
- ResolveStmtList ctx body
- ctx.GetLocals
-
-let Resolve prog =
- match prog with
- | Prog(procs) ->
- let procedures = dict [ for p in procs -> ProcedureName p, p ]
- let ctx = Context(procedures)
- List.map (fun p -> p, ResolveProc ctx p) procs
+module Resolver
+
+open System
+open Forro
+
+exception ResolutionError of string
+
+let ResolutionError(s: string) =
+ raise (ResolutionError s)
+
+type VarKind = InParam | OutParam | Local
+
+type Context(procedures: Collections.Generic.IDictionary<string,Procedure>) =
+ let mutable locals = null
+ let mutable ProcName = ""
+ member c.Procedures = procedures
+ member c.StartNewProcedure procName =
+ ProcName <- procName
+ locals <- new Collections.Generic.Dictionary<string,VarKind>()
+ member c.AddLocal v kind =
+ let name = VarName v
+ if locals.ContainsKey name then ResolutionError ("duplicate variable '" + name + "' in procedure '" + ProcName + "'") else ()
+ locals.Add(name, kind)
+ member c.HasLocal v =
+ locals.ContainsKey (VarName v)
+ member c.IncludeAssignmentTarget v =
+ let name = VarName v
+ if locals.ContainsKey name then
+ let kind = locals.Item name
+ if kind = VarKind.InParam then ResolutionError ("variable '"+ name + "' is an in-parameter, which cannot be used as an assignment target") else ()
+ else
+ locals.Add(name, VarKind.Local)
+ member v.GetLocals = locals
+
+let rec ResolveExpr (ctx: Context) expr twoState specContext =
+ match expr with
+ | Constant(x) -> ()
+ | Null -> ()
+ | Identifier(v) ->
+ if ctx.HasLocal v then () else ResolutionError ("undefined variable: " + VarName v)
+ | Not(e) -> ResolveExpr ctx e twoState specContext
+ | Binary(op,a,b) ->
+ ResolveExpr ctx a twoState specContext
+ ResolveExpr ctx b twoState specContext
+ | Select(e,f) ->
+ ResolveExpr ctx e twoState specContext
+ match f with
+ | Valid -> if specContext then () else ResolutionError "valid can only be used in specification contexts"
+ | _ -> ()
+ | Old(e) ->
+ if twoState then () else ResolutionError "old expressions can only be used in two-state contexts"
+ ResolveExpr ctx e twoState specContext
+
+let rec ResolveStmt ctx s =
+ match s with
+ | Assign(v, e) ->
+ ResolveExpr ctx e false false
+ ctx.IncludeAssignmentTarget v
+ | Update(obj,f,rhs) ->
+ ResolveExpr ctx obj false false
+ match f with
+ | Valid -> ResolutionError "valid can only be used in specification contexts (in particular, it cannot be assigned to)"
+ | _ -> ()
+ ResolveExpr ctx rhs false false
+ | Alloc(v,hd,tl) ->
+ ResolveExpr ctx hd false false
+ ResolveExpr ctx tl false false
+ ctx.IncludeAssignmentTarget v
+ | IfStmt(guard,thn,els) ->
+ ResolveExpr ctx guard false false
+ ResolveStmtList ctx thn
+ ResolveStmtList ctx els
+ | WhileStmt(guard,invs,body) ->
+ ResolveExpr ctx guard false false
+ List.iter (fun inv -> ResolveExpr ctx inv true true) invs
+ ResolveStmtList ctx body
+ | CallStmt(outs,name,ins) ->
+ if ctx.Procedures.ContainsKey name then () else ResolutionError ("call to undefined procedure: " + name)
+ match ctx.Procedures.Item name with
+ | Proc(_,fIns,fOuts,_,_,_) ->
+ if fIns.Length = ins.Length then () else ResolutionError ("call to " + name + " has wrong number of in-parameters (got " + ins.Length.ToString() + ", expected " + fIns.Length.ToString() + ")")
+ if fOuts.Length = outs.Length then () else ResolutionError ("call to " + name + " has wrong number of out-parameters (got " + outs.Length.ToString() + ", expected " + fOuts.Length.ToString() + ")")
+ List.iter (fun e -> ResolveExpr ctx e false false) ins
+ let outnames = new Collections.Generic.Dictionary<string,Variable>()
+ List.iter (fun v ->
+ ctx.IncludeAssignmentTarget v
+ let name = VarName v
+ if outnames.ContainsKey name then ResolutionError ("an actual out-parameter is allowed only once for a call: " + name) else ()
+ outnames.Add(name, v)
+ ) outs
+ | Assert(e) ->
+ ResolveExpr ctx e true true
+
+and ResolveStmtList ctx slist =
+ match slist with
+ | Block(ss) -> List.iter (fun s -> ResolveStmt ctx s) ss
+
+let ProcedureName p =
+ match p with Proc(id,_,_,_,_,_) -> id
+
+let ResolveProc (ctx: Context) p =
+ match p with
+ | Proc(name, ins, outs, req, ens, body) ->
+ // look up 'name' in ctx.Procedures, report an error if it is not 'p'
+ let q = ctx.Procedures.Item name
+ if p <> q then ResolutionError ("duplicate procedure: " + name) else ()
+ ctx.StartNewProcedure name
+ // look for duplicates in ins+outs
+ List.iter (fun v -> ctx.AddLocal v VarKind.InParam) ins
+ List.iter (fun v -> ctx.AddLocal v VarKind.OutParam) outs
+ // resolve specification
+ ResolveExpr ctx req false true
+ ResolveExpr ctx ens true true
+ // resolve body
+ ResolveStmtList ctx body
+ ctx.GetLocals
+
+let Resolve prog =
+ match prog with
+ | Prog(procs) ->
+ let procedures = dict [ for p in procs -> ProcedureName p, p ]
+ let ctx = Context(procedures)
+ List.map (fun p -> p, ResolveProc ctx p) procs
diff --git a/Source/Forro/Translator.fs b/Source/Forro/Translator.fs
index 4e7be216..db771c96 100644
--- a/Source/Forro/Translator.fs
+++ b/Source/Forro/Translator.fs
@@ -1,217 +1,217 @@
-module Translator
-
-open Forro
-open BoogieAst
-open Resolver
-open System.Collections.Generic
-
-let rec Append a b =
- match a with
- | [] -> b
- | hd::tl -> hd::(Append tl b)
-
-let rec Flatten a =
- match a with
- | [] -> []
- | list::rest -> Append list (Flatten rest)
-
-// ---------- Prelude ----------
-
-let Prelude =
- @"// Forro
-
-var $head: [int]int; // int -> int
-var $tail: [int]int;
-var $valid: [int]bool; // array int of bool
-
-const null: int;
-
-function GoodState([int]int, [int]int, [int]bool): bool;
-
-axiom (forall hd, tl: [int]int, valid: [int]bool ::
- { GoodState(hd, tl, valid) }
- GoodState(hd, tl, valid) ==> !valid[null]);
-"
-
-// ---------- Translate Expressions ----------
-
-let TrField f =
- match f with
- | Head -> "$head"
- | Tail -> "$tail"
- | Valid -> "$valid"
-
-let AllFields = ["$head" ; "$tail" ; "$valid"]
-
-let MkPred term =
- match term with
- | BToTerm(p) -> p
- | _ -> BToPred(term)
-
-let MkTerm pred =
- match pred with
- | BToPred(e) -> e
- | _ -> BToTerm(pred)
-
-let rec TrExpr expr =
- match expr with
- | Constant(x) -> BConstant x
- | Null -> BNull
- | Identifier(Var(x)) -> BIdentifier(x)
- | Not(e) -> BNot(TrExpr e)
- | Binary(op,a,b) ->
- let a = TrExpr a
- let b = TrExpr b
- match op with
- | Eq -> MkTerm(BBinary(BEq,a,b))
- | Neq -> MkTerm(BBinary(BNeq,a,b))
- | Plus -> BBinary(BPlus,a,b)
- | Minus -> BBinary(BMinus,a,b)
- | Times -> BBinary(BTimes,a,b)
- | Less -> MkTerm(BBinary(BLess,a,b))
- | AtMost -> MkTerm(BBinary(BAtMost,a,b))
- | And -> MkTerm(BBinary(BAnd, MkPred a, MkPred b))
- | Or -> MkTerm(BBinary(BOr, MkPred a, MkPred b))
- | Select(e,f) ->
- let r = BSelect(TrField f, TrExpr e)
- if f = Field.Valid then MkTerm(r) else r
- | Old(e) -> BOld(TrExpr e)
-
-let rec ListToConjunction list =
- match list with
- | [] -> BTrue
- | [P] -> P
- | hd::tl -> BBinary(BAnd, hd, ListToConjunction tl)
-
-let rec DefL expr =
- match expr with
- | Constant(x) -> []
- | Null -> []
- | Identifier(Var(x)) -> []
- | Not(e) -> DefL e
- | Binary(op,a,b) ->
- match op with
- | And -> BBinary(BOr, BNot(MkPred (TrExpr a)), Def b) :: (DefL a) // (Def a) && ((TrExpr a) ==> (Def b))
- | Or -> BBinary(BOr, MkPred (TrExpr a), Def b) :: (DefL a) // (Def a) && (!(TrExpr a) ==> (Def b))
- | _ -> Append (DefL b) (DefL a)
- | Select(e,f) ->
- let def = DefL e
- if f = Field.Valid then def // it is always okay to ask about .valid
- else BSelect("$valid", TrExpr e) :: def
- | Old(e) -> List.map BOld (DefL e)
-
-and Def expr =
- ListToConjunction (List.rev (DefL expr))
-
-let AssumeGoodState =
- BAssume (BFunc("GoodState", List.map BIdentifier AllFields))
-
-// ---------- Translate Statements ----------
-
-type LocalBookkeeping = LB of int * BVarDecl list
-
-let FreshLocal locals =
- match locals with
- | LB(n, vars) ->
- let name = "nw$" + n.ToString()
- (BIdentifier(name), name, LB(n+1, BVar(name, BInt)::vars))
-
-let rec TrStmt stmt locals =
- match stmt with
- | Assign(v,e) ->
- let s = [ BAssert (Def e) ;
- BAssign(VarName v, TrExpr e) ]
- (s, locals)
- | Update(obj,f,rhs) ->
- let o = TrExpr obj
- let s = [ BAssert(Def obj) ; BAssert (Def rhs) ;
- BAssert(BSelect("$valid", o)) ;
- BUpdate(TrField f, o, if f = Field.Valid then MkPred(TrExpr rhs) else TrExpr rhs) ;
- AssumeGoodState ]
- (s, locals)
- | Alloc(v,hd,tl) ->
- let nw, name, locals = FreshLocal locals
- let s = [ BAssert (Def hd) ; BAssert (Def tl) ;
- BHavoc [name] ;
- BAssume(BNot(BSelect("$valid", nw))) ;
- BAssume(BBinary(BEq, BSelect("$head", nw), TrExpr hd)) ;
- BAssume(BBinary(BEq, BSelect("$tail", nw), TrExpr tl)) ;
- BUpdate("$valid", nw, BTrue) ;
- AssumeGoodState ;
- BAssign(VarName v, nw) ]
- (s, locals)
- | IfStmt(guard,thn,els) ->
- let check = BAssert(Def guard)
- let thn, locals = TrStmtList thn locals
- let els, locals = TrStmtList els locals
- let s = BIfStmt(MkPred (TrExpr guard), thn, els)
- ([check ; s], locals)
- | WhileStmt(guard,invs,body) ->
- let ii = [Def guard]
- let ii = List.fold (fun ii -> fun inv -> (MkPred (TrExpr inv))::(Def inv)::ii) ii invs
- let s, locals = TrStmtList body locals
- match s with
- | BBlock(slist) ->
- ([BWhileStmt(MkPred (TrExpr guard), List.rev ii, BBlock(AssumeGoodState::slist)) ; AssumeGoodState], locals)
- | CallStmt(outs,id,ins) ->
- let check = List.map (fun e -> BAssert (Def e)) ins
- let ins = List.map (fun e -> TrExpr e) ins
- let outs = List.map (fun p -> VarName p) outs
- let s = BCallStmt(outs, id + "#Proc", ins)
- (Append check [s ; AssumeGoodState ], locals)
- | Assert(e) ->
- ([ BAssert (Def e) ; BAssert (MkPred (TrExpr e)) ], locals)
-
-and TrStmtList slist locals =
- match slist with
- | Block([]) -> (BBlock [], locals)
- | Block(s::rest) ->
- let s,locals = TrStmt s locals
- let rest,locals = TrStmtList (Block rest) locals
- match rest with
- | BBlock(slist) -> (BBlock(Append s slist), locals)
-
-// ---------- Translate Procedure Body ----------
-
-let TrSignature ins outs =
- let bIns = List.map (fun v -> BVar(VarName v, BInt)) ins
- let bOuts = List.map (fun v -> BVar(VarName v, BInt)) outs
- (bIns, bOuts)
-
-let LocalDecls (vars: Dictionary<string,VarKind>) =
- Flatten [ for kv in vars -> if kv.Value = VarKind.Local then [BVar(kv.Key, BInt)] else [] ]
-
-let TrProc proc vars =
- match proc with
- | Proc(id, ins, outs, req, ens, body) ->
- let bIns, bOuts = TrSignature ins outs
- let pre = MkPred (TrExpr req)
- let post = MkPred (TrExpr ens)
- let locals = LocalDecls vars
- let b, locals = TrStmtList body (LB(0,locals))
- match b, locals with
- | BBlock(slist), LB(n, vars) ->
- BProc(id + "#Proc", bIns, bOuts, pre, AllFields, post,
- List.rev vars, BBlock(AssumeGoodState::slist))
-
-// --------------------
-
-let TrSpec proc vars =
- match proc with
- | Proc(id, ins, outs, req, ens, body) ->
- let bIns, bOuts = TrSignature ins outs
- let b = [ AssumeGoodState ;
- BAssert (Def req) ; BAssume (MkPred (TrExpr req)) ;
- BHavoc AllFields ; AssumeGoodState ;
- BAssert (Def ens) ]
- BProc(id + "#WellFormedSpec", bIns, bOuts, BTrue, AllFields, BTrue, [], BBlock(b))
-
-let TrProcedure rproc =
- match rproc with
- | proc, (vars: Dictionary<string,VarKind>) ->
- let name = ProcedureName proc
- (TrSpec proc vars, TrProc proc vars)
-
-let Translate (rprog: (Procedure * Dictionary<string,VarKind>) list) =
- let procs = List.fold (fun list -> fun (p,q) -> p::q::list) [] (List.map TrProcedure rprog)
- BProg(Prelude, procs)
+module Translator
+
+open Forro
+open BoogieAst
+open Resolver
+open System.Collections.Generic
+
+let rec Append a b =
+ match a with
+ | [] -> b
+ | hd::tl -> hd::(Append tl b)
+
+let rec Flatten a =
+ match a with
+ | [] -> []
+ | list::rest -> Append list (Flatten rest)
+
+// ---------- Prelude ----------
+
+let Prelude =
+ @"// Forro
+
+var $head: [int]int; // int -> int
+var $tail: [int]int;
+var $valid: [int]bool; // array int of bool
+
+const null: int;
+
+function GoodState([int]int, [int]int, [int]bool): bool;
+
+axiom (forall hd, tl: [int]int, valid: [int]bool ::
+ { GoodState(hd, tl, valid) }
+ GoodState(hd, tl, valid) ==> !valid[null]);
+"
+
+// ---------- Translate Expressions ----------
+
+let TrField f =
+ match f with
+ | Head -> "$head"
+ | Tail -> "$tail"
+ | Valid -> "$valid"
+
+let AllFields = ["$head" ; "$tail" ; "$valid"]
+
+let MkPred term =
+ match term with
+ | BToTerm(p) -> p
+ | _ -> BToPred(term)
+
+let MkTerm pred =
+ match pred with
+ | BToPred(e) -> e
+ | _ -> BToTerm(pred)
+
+let rec TrExpr expr =
+ match expr with
+ | Constant(x) -> BConstant x
+ | Null -> BNull
+ | Identifier(Var(x)) -> BIdentifier(x)
+ | Not(e) -> BNot(TrExpr e)
+ | Binary(op,a,b) ->
+ let a = TrExpr a
+ let b = TrExpr b
+ match op with
+ | Eq -> MkTerm(BBinary(BEq,a,b))
+ | Neq -> MkTerm(BBinary(BNeq,a,b))
+ | Plus -> BBinary(BPlus,a,b)
+ | Minus -> BBinary(BMinus,a,b)
+ | Times -> BBinary(BTimes,a,b)
+ | Less -> MkTerm(BBinary(BLess,a,b))
+ | AtMost -> MkTerm(BBinary(BAtMost,a,b))
+ | And -> MkTerm(BBinary(BAnd, MkPred a, MkPred b))
+ | Or -> MkTerm(BBinary(BOr, MkPred a, MkPred b))
+ | Select(e,f) ->
+ let r = BSelect(TrField f, TrExpr e)
+ if f = Field.Valid then MkTerm(r) else r
+ | Old(e) -> BOld(TrExpr e)
+
+let rec ListToConjunction list =
+ match list with
+ | [] -> BTrue
+ | [P] -> P
+ | hd::tl -> BBinary(BAnd, hd, ListToConjunction tl)
+
+let rec DefL expr =
+ match expr with
+ | Constant(x) -> []
+ | Null -> []
+ | Identifier(Var(x)) -> []
+ | Not(e) -> DefL e
+ | Binary(op,a,b) ->
+ match op with
+ | And -> BBinary(BOr, BNot(MkPred (TrExpr a)), Def b) :: (DefL a) // (Def a) && ((TrExpr a) ==> (Def b))
+ | Or -> BBinary(BOr, MkPred (TrExpr a), Def b) :: (DefL a) // (Def a) && (!(TrExpr a) ==> (Def b))
+ | _ -> Append (DefL b) (DefL a)
+ | Select(e,f) ->
+ let def = DefL e
+ if f = Field.Valid then def // it is always okay to ask about .valid
+ else BSelect("$valid", TrExpr e) :: def
+ | Old(e) -> List.map BOld (DefL e)
+
+and Def expr =
+ ListToConjunction (List.rev (DefL expr))
+
+let AssumeGoodState =
+ BAssume (BFunc("GoodState", List.map BIdentifier AllFields))
+
+// ---------- Translate Statements ----------
+
+type LocalBookkeeping = LB of int * BVarDecl list
+
+let FreshLocal locals =
+ match locals with
+ | LB(n, vars) ->
+ let name = "nw$" + n.ToString()
+ (BIdentifier(name), name, LB(n+1, BVar(name, BInt)::vars))
+
+let rec TrStmt stmt locals =
+ match stmt with
+ | Assign(v,e) ->
+ let s = [ BAssert (Def e) ;
+ BAssign(VarName v, TrExpr e) ]
+ (s, locals)
+ | Update(obj,f,rhs) ->
+ let o = TrExpr obj
+ let s = [ BAssert(Def obj) ; BAssert (Def rhs) ;
+ BAssert(BSelect("$valid", o)) ;
+ BUpdate(TrField f, o, if f = Field.Valid then MkPred(TrExpr rhs) else TrExpr rhs) ;
+ AssumeGoodState ]
+ (s, locals)
+ | Alloc(v,hd,tl) ->
+ let nw, name, locals = FreshLocal locals
+ let s = [ BAssert (Def hd) ; BAssert (Def tl) ;
+ BHavoc [name] ;
+ BAssume(BNot(BSelect("$valid", nw))) ;
+ BAssume(BBinary(BEq, BSelect("$head", nw), TrExpr hd)) ;
+ BAssume(BBinary(BEq, BSelect("$tail", nw), TrExpr tl)) ;
+ BUpdate("$valid", nw, BTrue) ;
+ AssumeGoodState ;
+ BAssign(VarName v, nw) ]
+ (s, locals)
+ | IfStmt(guard,thn,els) ->
+ let check = BAssert(Def guard)
+ let thn, locals = TrStmtList thn locals
+ let els, locals = TrStmtList els locals
+ let s = BIfStmt(MkPred (TrExpr guard), thn, els)
+ ([check ; s], locals)
+ | WhileStmt(guard,invs,body) ->
+ let ii = [Def guard]
+ let ii = List.fold (fun ii -> fun inv -> (MkPred (TrExpr inv))::(Def inv)::ii) ii invs
+ let s, locals = TrStmtList body locals
+ match s with
+ | BBlock(slist) ->
+ ([BWhileStmt(MkPred (TrExpr guard), List.rev ii, BBlock(AssumeGoodState::slist)) ; AssumeGoodState], locals)
+ | CallStmt(outs,id,ins) ->
+ let check = List.map (fun e -> BAssert (Def e)) ins
+ let ins = List.map (fun e -> TrExpr e) ins
+ let outs = List.map (fun p -> VarName p) outs
+ let s = BCallStmt(outs, id + "#Proc", ins)
+ (Append check [s ; AssumeGoodState ], locals)
+ | Assert(e) ->
+ ([ BAssert (Def e) ; BAssert (MkPred (TrExpr e)) ], locals)
+
+and TrStmtList slist locals =
+ match slist with
+ | Block([]) -> (BBlock [], locals)
+ | Block(s::rest) ->
+ let s,locals = TrStmt s locals
+ let rest,locals = TrStmtList (Block rest) locals
+ match rest with
+ | BBlock(slist) -> (BBlock(Append s slist), locals)
+
+// ---------- Translate Procedure Body ----------
+
+let TrSignature ins outs =
+ let bIns = List.map (fun v -> BVar(VarName v, BInt)) ins
+ let bOuts = List.map (fun v -> BVar(VarName v, BInt)) outs
+ (bIns, bOuts)
+
+let LocalDecls (vars: Dictionary<string,VarKind>) =
+ Flatten [ for kv in vars -> if kv.Value = VarKind.Local then [BVar(kv.Key, BInt)] else [] ]
+
+let TrProc proc vars =
+ match proc with
+ | Proc(id, ins, outs, req, ens, body) ->
+ let bIns, bOuts = TrSignature ins outs
+ let pre = MkPred (TrExpr req)
+ let post = MkPred (TrExpr ens)
+ let locals = LocalDecls vars
+ let b, locals = TrStmtList body (LB(0,locals))
+ match b, locals with
+ | BBlock(slist), LB(n, vars) ->
+ BProc(id + "#Proc", bIns, bOuts, pre, AllFields, post,
+ List.rev vars, BBlock(AssumeGoodState::slist))
+
+// --------------------
+
+let TrSpec proc vars =
+ match proc with
+ | Proc(id, ins, outs, req, ens, body) ->
+ let bIns, bOuts = TrSignature ins outs
+ let b = [ AssumeGoodState ;
+ BAssert (Def req) ; BAssume (MkPred (TrExpr req)) ;
+ BHavoc AllFields ; AssumeGoodState ;
+ BAssert (Def ens) ]
+ BProc(id + "#WellFormedSpec", bIns, bOuts, BTrue, AllFields, BTrue, [], BBlock(b))
+
+let TrProcedure rproc =
+ match rproc with
+ | proc, (vars: Dictionary<string,VarKind>) ->
+ let name = ProcedureName proc
+ (TrSpec proc vars, TrProc proc vars)
+
+let Translate (rprog: (Procedure * Dictionary<string,VarKind>) list) =
+ let procs = List.fold (fun list -> fun (p,q) -> p::q::list) [] (List.map TrProcedure rprog)
+ BProg(Prelude, procs)
diff --git a/Source/Graph/Graph.cs b/Source/Graph/Graph.cs
index 8e5479e3..7f636200 100644
--- a/Source/Graph/Graph.cs
+++ b/Source/Graph/Graph.cs
@@ -1,1447 +1,1447 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Linq;
-using System.Collections.Generic;
-using System.Text; // for StringBuilder
-using System.Diagnostics.Contracts;
-namespace Microsoft.Boogie.GraphUtil {
-
- internal static class Util {
- private static string/*!*/ ListToString<T>(IEnumerable<T> xs) {
- Contract.Ensures(Contract.Result<string>() != null);
- StringBuilder sb = new StringBuilder();
- sb.Append("[");
- bool first = true;
- foreach (T/*!*/ x in xs) {
- Contract.Assert(x != null);
- if (!first)
- sb.Append(", ");
- sb.Append(x.ToString());
- first = false;
- }
- sb.Append("]");
- return sb.ToString();
- }
- public static string/*!*/ MapToString<Node>(Dictionary<Node, List<Node>> d) {
- Contract.Ensures(Contract.Result<string>() != null);
- StringBuilder sb = new StringBuilder();
- sb.Append("{");
- bool first = true;
- foreach (KeyValuePair<Node, List<Node>> de in d) {
- if (!first)
- sb.Append(", ");
- Contract.Assert(!object.Equals(de.Key,default(Node)));
- sb.Append(de.Key.ToString());
- sb.Append("~>");
- sb.Append(ListToString(de.Value));
- first = false;
- }
- sb.Append("}");
- return sb.ToString();
- }
- }
-
- // own struct to represent possibly undefined values, because Mono does
- // not like arrays with element type T! or T?
- public struct Maybe<T> {
- private T Value;
- public bool IsSet; // initialised with false by the default ctor
- public T Val {
- get {
- Contract.Assume(IsSet);
- return Value;
- }
- set {
- Value = value;
- IsSet = true;
- }
- }
- public void UnSet() {
- IsSet = false;
- }
- }
-
- public class DomRelation<Node> {
- // doms maps (unique) node numbers to the node numbers of the immediate dominator
- // to use it on Nodes, one needs the two way mapping between nodes and their numbers.
- private int[] doms; // 0 is unused: means undefined
- // here are the two mappings
- private Maybe<Node>[] postOrderNumberToNode;
- private Dictionary<Node, int> nodeToPostOrderNumber;
- private int sourceNum; // (number for) root of the graph
- private Node source; // root of the graph
- private Graph<Node> graph;
- private Dictionary<Node, List<Node>> immediateDominatorMap;
-
- [NotDelayed]
- internal DomRelation(Graph<Node> g, Node source) {
- this.graph = g;
- // slot 0 not used: nodes are numbered from 1 to n so zero
- // can represent undefined.
- this.source = source;
- //:base();
- this.NewComputeDominators();
- }
- public Dictionary<Node, List<Node>> ImmediateDominatorMap {
- get {
- Contract.Assume(this.immediateDominatorMap != null);
- return this.immediateDominatorMap;
- }
- }
- public bool DominatedBy(Node dominee, Node dominator, List<Node> path = null) {
- Contract.Assume(this.nodeToPostOrderNumber != null);
- Contract.Assume(this.doms != null);
- int domineeNum = this.nodeToPostOrderNumber[dominee];
- int dominatorNum = this.nodeToPostOrderNumber[dominator];
- if (domineeNum == dominatorNum)
- return true;
- int currentNodeNum = this.doms[domineeNum];
- while (true) {
- if (currentNodeNum == dominatorNum)
- return true;
- if (currentNodeNum == this.sourceNum)
- return false;
- if (path != null)
- path.Add(postOrderNumberToNode[currentNodeNum].Val);
- currentNodeNum = this.doms[currentNodeNum];
- }
- }
- private Dictionary<Node, List<Node>> domMap = null;
- [Pure]
- public override string ToString() {
- Contract.Assume(this.doms != null);
- int[] localDoms = this.doms;
- Contract.Assume(this.postOrderNumberToNode != null);
- if (domMap == null) {
- domMap = new Dictionary<Node, List<Node>>();
- for (int i = 1; i < localDoms.Length; i++) { // 0 slot is not used
- int domineeNum = i;
- int currentNodeNum = domineeNum;
- List<Node> dominators = new List<Node>();
- while (currentNodeNum != this.sourceNum) {
- dominators.Add(this.postOrderNumberToNode[currentNodeNum].Val);
- currentNodeNum = this.doms[currentNodeNum];
- }
- dominators.Add(this.postOrderNumberToNode[this.sourceNum].Val);
- domMap.Add(this.postOrderNumberToNode[i].Val, dominators);
- }
- }
- StringBuilder sb = new StringBuilder();
- sb.Append("{");
- bool first = true;
- foreach (KeyValuePair<Node, List<Node>> de in domMap) {
- if (!first)
- sb.Append(", ");
- Contract.Assert(!object.Equals(de.Key, default(Node)));
- sb.Append(de.Key.ToString());
- sb.Append("~>");
- sb.Append(ListToString(de.Value));
- first = false;
- }
- sb.Append("}");
- return sb.ToString();
- }
- private void PrintIntArray(int[] xs) {
- Console.Write("[");
- for (int i = 0; i < xs.Length; i++) {
- if (0 < i)
- Console.Write(", ");
- Console.Write(xs[i]);
- }
- Console.WriteLine("]");
- }
- public void PrintList<T>(IEnumerable<T> xs) {
- Console.Write("[");
- int i = 0;
- foreach (T/*!*/ x in xs) {
- Contract.Assert(x != null);
- if (0 < i)
- Console.Write(", ");
- Console.Write(x.ToString());
- i++;
- }
- Console.WriteLine("]");
- }
- public string/*!*/ ListToString<T>(IEnumerable<T> xs) {
- Contract.Ensures(Contract.Result<string>() != null);
- StringBuilder sb = new StringBuilder();
- sb.Append("[");
- bool first = true;
- foreach (T/*!*/ x in xs) {
- Contract.Assert(x != null);
- if (!first)
- sb.Append(", ");
- sb.Append(x.ToString());
- first = false;
- }
- sb.Append("]");
- return sb.ToString();
- }
-
- // Keith D. Cooper, Timothy J. Harvey, Ken Kennedy, "A Simple, Fast Dominance Algorithm ", Software Practice and Experience, 2001.
- // http://citeseer.ist.psu.edu/cooper01simple.html
- private void NewComputeDominators() {
- int n = this.graph.Nodes.Count;
- this.postOrderNumberToNode = new Maybe<Node>[n + 1];
- this.nodeToPostOrderNumber = new Dictionary<Node, int>();
- //HashSet<Node> visited = new HashSet<Node>();
- //int currentNumber = 1;
- Contract.Assume(this.source != null);
- //this.PostOrderVisit(this.source, visited, ref currentNumber);
- this.PostOrderVisitIterative(this.source);
- this.sourceNum = this.nodeToPostOrderNumber[source];
- // for (int i = 1; i <= n; i++){ Console.WriteLine(postOrderNumberToNode[i]); }
- this.doms = new int[n + 1]; // 0 is unused: means undefined
- Node start_node = this.source;
- this.doms[this.nodeToPostOrderNumber[start_node]] = this.nodeToPostOrderNumber[start_node];
- bool changed = true;
- // PrintIntArray(doms);
- while (changed) {
- changed = false;
- // for all nodes, b, in reverse postorder (except start_node)
- for (int nodeNum = n - 1; 1 <= nodeNum; nodeNum--) {
- Node b = this.postOrderNumberToNode[nodeNum].Val;
- IEnumerable<Node> predecessors = this.graph.Predecessors(b);
- // find a predecessor (i.e., a higher number) for which
- // the doms array has been set
- int new_idom = 0;
- int first_processed_predecessor = 0;
- #region new_idom <- number of first (processed) predecessor of b (pick one)
- foreach (Node p in predecessors) {
- if (this.doms[this.nodeToPostOrderNumber[p]] != 0) {
- int x = this.nodeToPostOrderNumber[p];
- new_idom = x;
- first_processed_predecessor = x;
- break;
- }
- }
- #endregion
- #region for all other predecessors, p, of b
- foreach (Node p in predecessors) {
- if (this.nodeToPostOrderNumber[p] == first_processed_predecessor) {
- continue;
- }
- if (this.doms[this.nodeToPostOrderNumber[p]] != 0)
- new_idom = intersect(this.nodeToPostOrderNumber[p], new_idom, this.doms);
- }
- #endregion
- if (this.doms[this.nodeToPostOrderNumber[b]] != new_idom) {
- this.doms[this.nodeToPostOrderNumber[b]] = new_idom;
- changed = true;
- }
- }
- }
- #region Populate the Immediate Dominator Map
- int sourceNum = this.nodeToPostOrderNumber[this.source];
- immediateDominatorMap = new Dictionary<Node, List<Node>>();
- for (int i = 1; i <= n; i++) {
- Node node = this.postOrderNumberToNode[i].Val;
- Node idomNode = this.postOrderNumberToNode[this.doms[i]].Val;
- if (i == sourceNum && this.doms[i] == sourceNum) {
- continue;
- }
- if (immediateDominatorMap.ContainsKey(idomNode)) {
- immediateDominatorMap[idomNode].Add(node);
- } else {
- List<Node> l = new List<Node>();
- l.Add(node);
- immediateDominatorMap.Add(idomNode, l);
- }
- }
- #endregion
- }
- private int intersect(int b1, int b2, int[] doms) {
- int finger1 = b1;
- int finger2 = b2;
- while (finger1 != finger2) {
- while (finger1 < finger2) {
- finger1 = doms[finger1];
- }
- while (finger2 < finger1) {
- finger2 = doms[finger2];
- }
- }
- return finger1;
- }
- private void PostOrderVisit(Node/*!*/ n, HashSet<Node> visited, ref int currentNumber) {
- Contract.Requires(n != null);
- if (visited.Contains(n))
- return;
- visited.Add(n);
- foreach (Node/*!*/ child in this.graph.Successors(n)) {
- Contract.Assert(child != null);
- PostOrderVisit(child, visited, ref currentNumber);
- }
- Contract.Assume(this.postOrderNumberToNode != null);
- Contract.Assume(this.nodeToPostOrderNumber != null);
- this.postOrderNumberToNode[currentNumber].Val = n;
- this.nodeToPostOrderNumber[n] = currentNumber;
- currentNumber++;
- return;
- }
- // Iterative version: mimics the above recursive procedure
- private void PostOrderVisitIterative(Node n)
- {
- Contract.Requires(n != null);
- var visited = new HashSet<Node>();
- var grey = new HashSet<Node>();
- var stack = new Stack<Node>();
-
- int currentNumber = 1;
-
- stack.Push(n);
- visited.Add(n);
-
- while (stack.Count != 0)
- {
- var curr = stack.Pop();
-
- if (grey.Contains(curr))
- {
- Contract.Assume(this.postOrderNumberToNode != null);
- Contract.Assume(this.nodeToPostOrderNumber != null);
- this.postOrderNumberToNode[currentNumber].Val = curr;
- this.nodeToPostOrderNumber[curr] = currentNumber;
- currentNumber++;
- }
- else
- {
- grey.Add(curr);
- stack.Push(curr);
- foreach (Node/*!*/ child in this.graph.Successors(curr))
- {
- Contract.Assert(child != null);
- if (!visited.Contains(child))
- {
- visited.Add(child);
- stack.Push(child);
- }
- }
- }
-
- }
-
-
- }
-
- public Node LeastCommonAncestor(Node n1, Node n2)
- {
- int num1 = nodeToPostOrderNumber[n1], num2 = nodeToPostOrderNumber[n2];
- int lca = intersect(num1, num2, this.doms);
- return postOrderNumberToNode[lca].Val;
- }
- }
-
- public class Graph<Node> {
- private HashSet<Tuple<Node/*!*/, Node/*!*/>> es;
- private HashSet<Node> ns;
- private Node source;
- private bool reducible;
- private HashSet<Node> headers;
- private Dictionary<Node, HashSet<Node>> backEdgeNodes;
- private Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops;
- private HashSet<Node> splitCandidates;
-
- private DomRelation<Node> dominatorMap = null;
- private Dictionary<Node, HashSet<Node>> predCache = new Dictionary<Node, HashSet<Node>>();
- private Dictionary<Node, HashSet<Node>> succCache = new Dictionary<Node, HashSet<Node>>();
- private bool predComputed;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(es == null || Contract.ForAll(es, p => p.Item1 != null && p.Item2 != null));
- Contract.Invariant(naturalLoops == null || Contract.ForAll(naturalLoops.Keys, p => p.Item2 != null && p.Item1 != null));
- }
-
- private class PreHeader {
- Node/*!*/ myHeader;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(myHeader != null);
- }
-
- internal PreHeader(Node/*!*/ h) {
- Contract.Requires(h != null);
- myHeader = h;
- }
-
- [Pure]
- public override string/*!*/ ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- return "#" + myHeader.ToString();
- }
- }
-
- public Graph(HashSet<Tuple<Node/*!*/, Node/*!*/>> edges) {
-
- Contract.Requires(cce.NonNullElements(edges) && Contract.ForAll(edges, p => p.Item1 != null && p.Item2 != null));
- es = edges;
-
- // original A#
- //ns = Set<Node>{ x : <x,y> in es } + Set<Node>{ y : <x,y> in es };
-
- // closest Spec#
- //ns = new Set<Node>{ Tuple<Node,Node> p in edges; p.Item1 } + new Set<Node>{ Tuple<Node,Node> p in edges; p.Item2 };
-
- //
- HashSet<Node> temp = new HashSet<Node>();
- foreach (Tuple<Node/*!*/, Node/*!*/> p in edges) {
- Contract.Assert(p.Item1 != null);
- temp.Add(p.Item1);
- Contract.Assert(p.Item2 != null);
- temp.Add(p.Item2);
- }
- ns = temp;
- }
- public Graph() {
- es = new HashSet<Tuple<Node/*!*/, Node/*!*/>>();
- ns = new HashSet<Node>();
- }
-
- // BUGBUG: Set<T>.ToString() should return a non-null string
- [Pure]
- public override string/*!*/ ToString() {
- return "" + es.ToString();
- }
-
- public void AddSource(Node/*!*/ x) {
- Contract.Requires(x != null);
- // BUGBUG: This generates bad code in the compiler
- //ns += new Set<Node>{x};
- ns.Add(x);
- source = x;
- }
-
- public void AddEdge(Node/*!*/ source, Node/*!*/ dest) {
- Contract.Requires(source != null);
- Contract.Requires(dest != null);
- //es += Set<Edge>{<source,dest>};
- //ns += Set<Node>{source, dest};
- es.Add(new Tuple<Node/*!*/, Node/*!*/>(source, dest));
- ns.Add(source);
- ns.Add(dest);
- predComputed = false;
- }
-
- public HashSet<Node> Nodes {
- get {
- return ns;
- }
- }
- public IEnumerable<Tuple<Node/*!*/, Node/*!*/>> Edges {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Tuple<Node, Node>>>())
- && Contract.ForAll(Contract.Result<IEnumerable<Tuple<Node, Node>>>(), n =>
- n.Item1 != null && n.Item2 != null));
- return es;
- }
- }
-
- public bool Edge(Node/*!*/ x, Node/*!*/ y) {
- Contract.Requires(x != null);
- Contract.Requires(y != null);
- // original A#
- // return <x,y> in es;
- return es.Contains(new Tuple<Node/*!*/, Node/*!*/>(x, y));
- }
-
- private void ComputePredSuccCaches() {
- if (predComputed)
- return;
- predComputed = true;
- predCache = new Dictionary<Node, HashSet<Node>>();
- succCache = new Dictionary<Node, HashSet<Node>>();
-
- foreach (Node n in Nodes) {
- predCache[n] = new HashSet<Node>();
- succCache[n] = new HashSet<Node>();
- }
-
- foreach (Tuple<Node/*!*/, Node/*!*/> p in Edges) {
- Contract.Assert(p.Item1 != null);
- Contract.Assert(p.Item2 != null);
- HashSet<Node> tmp;
-
- tmp = predCache[p.Item2];
- tmp.Add(p.Item1);
- predCache[p.Item2] = tmp;
-
- tmp = succCache[p.Item1];
- tmp.Add(p.Item2);
- succCache[p.Item1] = tmp;
- }
- }
-
- public IEnumerable<Node> Predecessors(Node n) {
- // original A#
- //Set<Node> result = Set{ x : x in Nodes, Edge(x,n) };
-
- ComputePredSuccCaches();
- return predCache[n];
- }
-
- public IEnumerable<Node> Successors(Node n) {
- ComputePredSuccCaches();
- return succCache[n];
- }
-
- public List<Node> SuccessorsAsList(Node n) {
- ComputePredSuccCaches();
- List<Node> ret = new List<Node>();
- foreach (Node s in succCache[n])
- ret.Add(s);
- return ret;
- }
-
- public DomRelation<Node> /*Map<Node,Set<Node>>*/ DominatorMap {
- get {
- Contract.Assert(source != null);
- if (this.dominatorMap == null) {
- this.dominatorMap = new DomRelation<Node>(this, this.source);
- }
- return this.dominatorMap;
- }
- }
-
- public Dictionary<Node, List<Node>> ImmediateDominatorMap {
- get {
- Contract.Assert(source != null);
- if (this.dominatorMap == null) {
- this.dominatorMap = new DomRelation<Node>(this, this.source);
- }
- return this.dominatorMap.ImmediateDominatorMap;
- }
- }
- public List<Node> ImmediatelyDominatedBy(Node/*!*/ n) {
- Contract.Requires(n != null);
- List<Node> dominees;
- this.ImmediateDominatorMap.TryGetValue(n, out dominees);
- return dominees == null ? new List<Node>() : dominees;
- }
-
- public IEnumerable<Node/*?*/> TopologicalSort(bool reversed = false) {
- bool acyclic;
- List<Node> sortedList;
- this.TarjanTopSort(out acyclic, out sortedList, reversed);
- return acyclic ? sortedList : new List<Node>();
- }
- // From Tarjan 1972
- public void TarjanTopSort(out bool acyclic, out List<Node> sortedNodes, bool reversed = false) {
- int n = this.Nodes.Count;
- if (n == 0) {
- acyclic = true;
- sortedNodes = new List<Node>();
- return;
- }
- int[] incomingEdges = new int[n];
- // need an arbitrary numbering for the nodes to use as indices into
- // the arrays used within this algorithm
- Dictionary<Node, int> nodeToNumber = new Dictionary<Node, int>(n);
- Maybe<Node>[] numberToNode = new Maybe<Node>[n];
- int counter = 0;
- foreach (Node node in this.Nodes) {
- numberToNode[counter].Val = node;
- nodeToNumber[node] = counter;
- counter++;
- }
- foreach (Tuple<Node/*!*/, Node/*!*/> e in this.Edges) {
- Contract.Assert(e.Item1 != null);
- Contract.Assert(e.Item2 != null);
- Node/*!*/ target = e.Item2;
- incomingEdges[nodeToNumber[target]]++;
- }
- List<Node> sorted = new List<Node>();
- int sortedIndex = 0;
- while (sortedIndex < n) {
- // find a root (i.e., its index)
- int rootIndex = -1;
- if (reversed) {
- for (int i = n-1; i >= 0; i--) {
- if (incomingEdges[i] == 0) {
- rootIndex = i;
- break;
- }
- }
- } else {
- for (int i = 0; i < n; i++) {
- if (incomingEdges[i] == 0) {
- rootIndex = i;
- break;
- }
- }
- }
- if (rootIndex == -1) {
- acyclic = false;
- sortedNodes = new List<Node>();
- return;
- }
- // mark root so it won't be used again
- incomingEdges[rootIndex] = -1;
- Node root = numberToNode[rootIndex].Val;
- sorted.Add(root);
- ++sortedIndex;
- foreach (Node s in this.Successors(root)) {
- incomingEdges[nodeToNumber[s]]--;
- }
- }
- acyclic = true;
- sortedNodes = sorted;
- return;
- }
- private IEnumerable<Node> OldTopologicalSort() {
- Tuple<bool, List<Node>> result = this.TopSort();
- return result.Item1 ? result.Item2 : (IEnumerable<Node>)new List<Node>();
- }
- // From AsmL distribution example
- private Tuple<bool, List<Node>> TopSort()
- {
- List<Node> S = new List<Node>();
- HashSet<Node> V = this.Nodes;
- HashSet<Node> X = new HashSet<Node>();
- foreach (Node/*!*/ n in V) {
- Contract.Assert(n != null);
- X.Add(n);
- }
- bool change = true;
- while (change)
- // invariant: X = V - S
- {
- change = false;
- if (X.Count > 0) {
- foreach (Node/*!*/ n in X) {
- Contract.Assert(n != null);
- // see if n has any incoming edges from any other node in X
- bool inDegreeZero = true;
- foreach (Node/*!*/ u in X) {
- Contract.Assert(u != null);
- if (this.Edge(u, n)) {
- inDegreeZero = false;
- break; // no point looking further
- }
- }
- if (inDegreeZero) {
- S.Add(n);
- X.Remove(n);
- change = true;
- break; // might as well go back and start looking through X from the beginning
- }
- }
- // Then we made it all the way through X without finding a source node
- if (!change) {
- return new Tuple<bool, List<Node>>(false, new List<Node>());
- }
- }
- }
- return new Tuple<bool, List<Node>>(true, S);
- }
-
- public static bool Acyclic(Graph<Node> g, Node source) {
- bool acyclic;
- List<Node> sortedList;
- g.TarjanTopSort(out acyclic, out sortedList);
- return acyclic;
- }
-
- // [Dragon, Fig. 10.15, p. 604. Algorithm for constructing the natural loop.]
- static HashSet<Node> NaturalLoop(Graph<Node> g, Tuple<Node/*!*/, Node/*!*/> backEdge)
- {
- Contract.Requires(backEdge.Item1 != null && backEdge.Item2 != null);
- Node/*!*/ n = backEdge.Item1;
- Node/*!*/ d = backEdge.Item2;
- Stack<Node> stack = new Stack<Node>();
- HashSet<Node> loop = new HashSet<Node>();
- loop.Add(d);
- if (!n.Equals(d)) // then n is not in loop
- {
- loop.Add(n);
- stack.Push(n); // push n onto stack
- }
- while (stack.Count > 0) // not empty
- {
- Node m = stack.Peek();
- stack.Pop(); // pop stack
- foreach (Node/*!*/ p in g.Predecessors(m)) {
- Contract.Assert(p != null);
- if (!(loop.Contains(p))) {
- loop.Add(p);
- stack.Push(p); // push p onto stack
- }
- }
- }
- return loop;
- }
-
- internal struct ReducibleResult {
- internal bool reducible;
- internal HashSet<Node> headers;
- internal Dictionary<Node, HashSet<Node>> backEdgeNodes;
- internal Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops;
- internal HashSet<Node> splitCandidates;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Contract.ForAll(naturalLoops.Keys, p => p.Item1 != null && p.Item2 != null));
- }
-
- internal ReducibleResult(bool b, HashSet<Node> headers, Dictionary<Node, HashSet<Node>> backEdgeNodes, Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops, HashSet<Node> splitCandidates)
- {
- Contract.Requires(naturalLoops == null || Contract.ForAll(naturalLoops.Keys, Key => Key.Item1 != null && Key.Item2 != null));
- this.reducible = b;
- this.headers = headers;
- this.backEdgeNodes = backEdgeNodes;
- this.naturalLoops = naturalLoops;
- this.splitCandidates = splitCandidates;
- }
-
- }
-
- // [Dragon, p. 606]
- static ReducibleResult ComputeReducible(Graph<Node> g, Node source) {
- // first, compute the dom relation
- DomRelation<Node> /*Map<Node,Set<Node>>*/ D = g.DominatorMap;
- return ComputeReducible(g, source, D);
- }
-
- static HashSet<Node> FindCycle(Graph<Node> g, Node source) {
- Stack<Tuple<Node, List<Node>>> stack = new Stack<Tuple<Node, List<Node>>>();
- HashSet<Node> stackAsSet = new HashSet<Node>();
- HashSet<Node> visited = new HashSet<Node>();
- stack.Push(new Tuple<Node, List<Node>>(source, g.SuccessorsAsList(source)));
- stackAsSet.Add(source);
- while (stack.Count > 0) {
- Tuple<Node, List<Node>> tuple = stack.Peek();
- List<Node> children = tuple.Item2;
- if (children.Count == 0) {
- stack.Pop();
- stackAsSet.Remove(tuple.Item1);
- continue;
- }
- Node n = children[0];
- children.RemoveAt(0);
- if (stackAsSet.Contains(n)) {
- HashSet<Node> ret = new HashSet<Node>();
- ret.Add(n);
- while (true) {
- Node x = stack.Pop().Item1;
- if (x.Equals(n))
- return ret;
- }
- }
- if (visited.Contains(n))
- continue;
- stack.Push(new Tuple<Node, List<Node>>(n, g.SuccessorsAsList(n)));
- visited.Add(n);
- stackAsSet.Add(n);
- System.Diagnostics.Debug.Assert(stack.Count == stackAsSet.Count);
- }
- return new HashSet<Node>();
- }
-
- // [Dragon, p. 606]
- static ReducibleResult ComputeReducible(Graph<Node> g,
- Node source,
- DomRelation<Node>/*!*/ DomRelation) {
- Contract.Requires(DomRelation != null);
-
- //Console.WriteLine("[" + DateTime.Now +"]: begin ComputeReducible");
- IEnumerable<Tuple<Node/*!*/, Node/*!*/>> edges = g.Edges;
- Contract.Assert(Contract.ForAll(edges, n => n.Item1 != null && n.Item2 != null));
- HashSet<Tuple<Node/*!*/, Node/*!*/>> backEdges = new HashSet<Tuple<Node/*!*/, Node/*!*/>>();
- HashSet<Tuple<Node/*!*/, Node/*!*/>> nonBackEdges = new HashSet<Tuple<Node/*!*/, Node/*!*/>>();
- foreach (Tuple<Node/*!*/, Node/*!*/> e in edges) {
- Contract.Assert(e.Item1 != null);
- Contract.Assert(e.Item2 != null);
- Node x = e.Item1;
- Node y = e.Item2; // so there is an edge from x to y
- if (DomRelation.DominatedBy(x, y)) { // y dom x: which means y dominates x
- backEdges.Add(e);
- } else {
- nonBackEdges.Add(e);
- }
- }
- Graph<Node> withoutBackEdges = new Graph<Node>(nonBackEdges);
- if (!Acyclic(withoutBackEdges, source)) {
- return new ReducibleResult(false,
- new HashSet<Node>(),
- new Dictionary<Node, HashSet<Node>>(),
- new Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>>(),
- FindCycle(withoutBackEdges, source));
- } else {
- // original A#:
- //Set<Node> headers = Set{ d : <n,d> in backEdges };
- HashSet<Node> headers = new HashSet<Node>();
- foreach (Tuple<Node/*!*/, Node/*!*/> e in backEdges) {
-
- Contract.Assert(e.Item1 != null);
- Contract.Assert(e.Item2 != null);
- headers.Add(e.Item2);
- }
- // original A#:
- //Map<Node,Set<Node>> backEdgeNodes = Map{ h -> bs : h in headers, bs = Set<Node>{ b : <b,x> in backEdges, x == h } };
- Dictionary<Node, HashSet<Node>> backEdgeNodes = new Dictionary<Node, HashSet<Node>>();
- foreach (Node/*!*/ h in headers) {
- Contract.Assert(h != null);
- HashSet<Node> bs = new HashSet<Node>();
- foreach (Tuple<Node, Node> backedge in backEdges) {
- Contract.Assert(backedge.Item1 != null);
- Contract.Assert(backedge.Item2 != null);
- if (backedge.Item2.Equals(h)) {
- bs.Add(backedge.Item1);
- }
- }
- backEdgeNodes.Add(h, bs);
- }
-
- // original A#:
- //Map<Tuple<Node,Node>,Set<Node>> naturalLoops = Map{ e -> NaturalLoop(g,e) : e in backEdges };
- Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops = new Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>>();
- foreach (Tuple<Node/*!*/, Node/*!*/> e in backEdges) {
- Contract.Assert(e.Item1 != null && e.Item2 != null);
- naturalLoops.Add(e, NaturalLoop(g, e));
- }
-
- //Console.WriteLine("[" + DateTime.Now +"]: end ComputeReducible");
- return new ReducibleResult(true, headers, backEdgeNodes, naturalLoops, new HashSet<Node>());
- }
- }
-
- public bool Reducible {
- get {
- return reducible;
- }
- }
- public IEnumerable<Node> Headers {
- get {
- return headers;
- }
- }
- public IEnumerable<Node> BackEdgeNodes(Node/*!*/ h) {
- Contract.Requires(h != null);
- // original A#:
- //return h in backEdgeNodes ? backEdgeNodes[h] : null;
- return (backEdgeNodes.ContainsKey(h) ? backEdgeNodes[h] : (IEnumerable<Node>)new List<Node>());
- }
- public IEnumerable<Node> NaturalLoops(Node/*!*/ header, Node/*!*/ backEdgeNode) {
- Contract.Requires(header != null);
- Contract.Requires(backEdgeNode != null);
- Tuple<Node/*!*/, Node/*!*/> e = new Tuple<Node/*!*/, Node/*!*/>(backEdgeNode, header);
- return naturalLoops.ContainsKey(e) ? naturalLoops[e] : (IEnumerable<Node>)new List<Node>();
- }
- public HashSet<Node> SplitCandidates {
- get {
- return splitCandidates;
- }
- }
- public void ComputeLoops() {
- ReducibleResult r = ComputeReducible(this, this.source);
- this.reducible = r.reducible;
- this.headers = r.headers;
- this.backEdgeNodes = r.backEdgeNodes;
- this.naturalLoops = r.naturalLoops;
- this.splitCandidates = r.splitCandidates;
- return;
- }
-
- public IEnumerable<Node> SortHeadersByDominance()
- {
- Graph<Node> dag = new Graph<Node>();
- foreach (Node b in headers)
- {
- dag.AddSource(b);
- foreach (Node c in headers)
- {
- if (b.Equals(c)) continue;
- if (DominatorMap.DominatedBy(b, c))
- {
- System.Diagnostics.Debug.Assert(!DominatorMap.DominatedBy(c, b));
- dag.AddEdge(b, c);
- }
- }
- }
- return dag.TopologicalSort();
- }
-
- public string ToDot(Func<Node, string> NodeLabel = null, Func<Node, string> NodeStyle = null) {
- NodeLabel = NodeLabel ?? (n => n.ToString());
- NodeStyle = NodeStyle ?? (n => "[shape=box]");
- var s = new StringBuilder();
- s.AppendLine("digraph G {");
- foreach (var n in Nodes)
- s.AppendLine(" \"" + NodeLabel(n) + "\" " + NodeStyle(n) + ";");
- foreach (var e in Edges)
- s.AppendLine(" \"" + NodeLabel(e.Item1) + "\" -> \"" + NodeLabel(e.Item2) + "\";");
- s.AppendLine("}");
- return s.ToString();
- }
-
- public ICollection<Node> ComputeReachable() {
- ICollection<Node> result = new HashSet<Node>();
- Stack<Node> stack = new Stack<Node>();
- stack.Push(source);
- while(!(stack.Count() == 0)) {
- Node n = stack.Pop();
- result.Add(n);
- foreach(var m in Successors(n)) {
- if(!result.Contains(m)) {
- stack.Push(m);
- }
- }
- }
- return result;
- }
-
- } // end: class Graph
-
- public static class GraphAlgorithms
- {
-
-
- public static Graph<Node> Dual<Node>(this Graph<Node> g, Node dummySource)
- {
- var exits = g.Nodes.Where(n => g.Successors(n).Count() == 0).ToList();
- Node source;
- if (exits.Count == 0)
- exits.Add(dummySource);
- var dual = new Graph<Node>(new HashSet<Tuple<Node, Node>>(g.Edges.Select(e => new Tuple<Node, Node>(e.Item2, e.Item1))));
- if (exits.Count == 1)
- {
- dual.AddSource(exits[0]);
- source = exits[0];
- }
- else
- {
- dual.AddSource(dummySource);
- source = dummySource;
- foreach (var exit in exits)
- dual.AddEdge(dummySource, exit);
- }
-
- #region Dual graph may not be connected, so add an edge from the dual graph's soure node to any unreachable node
- foreach (var n in dual.Nodes.Where(Item => !dual.ComputeReachable().Contains(Item)))
- {
- dual.AddEdge(source, n);
- }
- #endregion
-
- return dual;
- }
-
- public static List<Tuple<Node, bool>> LoopyTopSort<Node>(this Graph<Node> g)
- {
- Contract.Assert(g.Reducible);
-
- int n = g.Nodes.Count;
- var nodeToNumber = new Dictionary<Node, int>(n);
- var numberToNode = new Node[n];
- var allNodes = new List<int>();
- int counter = 0;
- foreach (Node node in g.Nodes)
- {
- numberToNode[counter] = node;
- nodeToNumber[node] = counter;
- allNodes.Add(counter);
- counter++;
- }
-
- var loops = new List<int>[n];
- foreach (var h in g.Headers)
- {
- var loopNodes = new HashSet<Node>();
- foreach (var b in g.BackEdgeNodes(h))
- loopNodes.UnionWith(g.NaturalLoops(h, b));
- loops[nodeToNumber[h]] =
- new List<int>(loopNodes.Select(node => nodeToNumber[node]));
- }
-
- var successors = new List<int>[n];
- var predecessors = new List<int>[n];
- int[] incomingEdges = new int[n];
-
- for (int i = 0; i < n; i++)
- predecessors[i] = new List<int>();
-
- foreach (var e in g.Edges)
- {
- Contract.Assert(e.Item1 != null);
- Contract.Assert(e.Item2 != null);
- int source = nodeToNumber[e.Item1], target = nodeToNumber[e.Item2];
- if (loops[target] == null || !loops[target].Contains(source))
- {
- if (successors[source] == null)
- successors[source] = new List<int>();
- successors[source].Add(target);
- incomingEdges[target]++;
- }
- predecessors[target].Add(source);
- }
-
- var sortedNodes = new List<Tuple<Node, bool>>();
- var sortedNodesInternal = new List<int>();
-
- var regionStack = new Stack<Tuple<Node, List<int>>>();
- regionStack.Push(new Tuple<Node, List<int>>(default(Node), allNodes));
-
- while (regionStack.Count != 0)
- {
- var rootIndexes = new List<int>();
- foreach (var i in regionStack.Peek().Item2)
- {
- if (incomingEdges[i] == 0)
- rootIndexes.Add(i);
- }
- if (rootIndexes.Count() == 0)
- {
- var region = regionStack.Pop();
- if (regionStack.Count != 0) {
- sortedNodes.Add(new Tuple<Node, bool>(region.Item1, true));
- sortedNodesInternal.Add(nodeToNumber[region.Item1]);
- }
- continue;
- }
- int rootIndex = rootIndexes[0];
- int maxPredIndex = -1;
- foreach (var i in rootIndexes) {
- foreach (var p in predecessors[i]) {
- int predIndex =
- sortedNodesInternal.FindLastIndex(x => x == p);
- if (predIndex > maxPredIndex) {
- rootIndex = i;
- maxPredIndex = predIndex;
- }
- }
- }
- incomingEdges[rootIndex] = -1;
- sortedNodes.Add(new Tuple<Node, bool>(numberToNode[rootIndex], false));
- sortedNodesInternal.Add(rootIndex);
- if (successors[rootIndex] != null)
- foreach (int s in successors[rootIndex])
- incomingEdges[s]--;
- if (loops[rootIndex] != null)
- regionStack.Push(new Tuple<Node, List<int>>(numberToNode[rootIndex],
- loops[rootIndex]));
- }
-
- return sortedNodes;
- }
-
- // Algorithm from Jeanne Ferrante, Karl J. Ottenstein, Joe D. Warren,
- // "The Program Dependence Graph and Its Use in Optimization"
- public static Dictionary<Node, HashSet<Node>> ControlDependence<Node>(this Graph<Node> g) where Node : class, new()
- {
- Graph<Node> dual = g.Dual(new Node());
- DomRelation<Node> pdom = dual.DominatorMap;
-
- var result = new Dictionary<Node, HashSet<Node>>();
-
- var S = g.Edges.Where(e => !pdom.DominatedBy(e.Item1, e.Item2));
- foreach (var edge in S)
- {
- var L = pdom.LeastCommonAncestor(edge.Item1, edge.Item2);
- var deps = new List<Node>();
- if (L == edge.Item1)
- {
- pdom.DominatedBy(edge.Item2, edge.Item1, deps);
- deps.Add(edge.Item2);
- deps.Add(edge.Item1);
- }
- else
- {
- pdom.DominatedBy(edge.Item2, L, deps);
- deps.Add(edge.Item2);
- }
- if (result.ContainsKey(edge.Item1))
- {
- result[edge.Item1].UnionWith(deps);
- }
- else
- {
- result[edge.Item1] = new HashSet<Node>(deps);
- }
- }
-
- return result;
- }
-
- public static void TransitiveClosure<Node>(this Dictionary<Node, HashSet<Node>> graph) where Node : class {
- bool changed;
- do {
- changed = false;
- foreach (var entry in graph) {
- var newSuccessors = new HashSet<Node>(entry.Value);
- foreach (var successor in entry.Value) {
- if (graph.ContainsKey(successor))
- newSuccessors.UnionWith(graph[successor]);
- }
- if (newSuccessors.Count != entry.Value.Count) {
- entry.Value.UnionWith(newSuccessors);
- changed = true;
- }
- }
- } while (changed);
- }
-
- }
-
- public delegate System.Collections.IEnumerable/*<Node!>*//*!*/ Adjacency<T>(T/*!*/ node);
-
-
- // An SCC is a set of nodes
- public sealed class SCC<Node> : ICollection<Node>
- {
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(nodesMap != null);
- }
-
- private IDictionary<Node, object>/*!*/ nodesMap = new Dictionary<Node, object>();
- private ICollection<Node>/*!*/ nodes
- {
- get
- {
- return cce.NonNull(nodesMap.Keys);
- }
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- System.Collections.IEnumerator/*!*/ System.Collections.IEnumerable.GetEnumerator()
- {
- Contract.Ensures(Contract.Result<System.Collections.IEnumerator>() != null);
-
- return ((System.Collections.IEnumerable)nodes).GetEnumerator();
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- IEnumerator<Node>/*!*/ IEnumerable<Node>.GetEnumerator()
- {
- Contract.Ensures(Contract.Result<IEnumerator<Node>>() != null);
-
- return ((IEnumerable<Node>)nodes).GetEnumerator();
- }
-
- public int Count
- {
- get
- {
- return nodes.Count;
- }
- }
- public bool IsReadOnly
- {
- get
- {
- return nodesMap.IsReadOnly;
- }
- }
- public void Add(Node item)
- {
- nodesMap.Add(item, null);
- }
- public void Clear()
- {
- nodesMap.Clear();
- }
- [Pure]
- public bool Contains(Node item)
- {
- return nodesMap.ContainsKey(item);
- }
- public void CopyTo(Node[] array, int arrayIndex)
- {
- //Contract.Requires(array != null);
- nodes.CopyTo(array, arrayIndex);
- }
- public bool Remove(Node item)
- {
- return nodesMap.Remove(item);
- }
- }
-
- public sealed class StronglyConnectedComponents<Node> : IEnumerable<SCC<Node>/*!*/> where Node : class
- {
- private readonly IDictionary<Node/*!*/, object>/*!*/ graph;
- [ContractInvariantMethod]
- void graphInvariantMethod()
- {
- Contract.Invariant(Contract.ForAll(graph, entry => entry.Key != null));
- Contract.Invariant(preds != null);
- Contract.Invariant(succs != null);
- }
- private readonly Adjacency<Node>/*!*/ preds;
- private readonly Adjacency<Node>/*!*/ succs;
-
- private bool computed = false;
- public bool Computed
- {
- get
- {
- return computed;
- }
- }
-
- [NotDelayed]
- public StronglyConnectedComponents(System.Collections.IEnumerable/*<Node!>*/ graph, Adjacency<Node> preds, Adjacency<Node> succs)
- : base()
- {
- Contract.Requires(succs != null);
- Contract.Requires(preds != null);
- Contract.Requires(graph != null);
- Contract.Ensures(!Computed);
- IDictionary<Node/*!*/, object>/*!*/ dict = new Dictionary<Node/*!*/, object>();
- foreach (Node/*!*/ n in graph)
- {
- Contract.Assert(n != null);
- dict.Add(n, null);
- }
-
- this.graph = dict;
- this.preds = preds;
- this.succs = succs;
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- System.Collections.IEnumerator/*!*/ System.Collections.IEnumerable.GetEnumerator()
- {
- Contract.Ensures(Contract.Result<System.Collections.IEnumerator>() != null);
-
- return ((System.Collections.IEnumerable)sccs).GetEnumerator();
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- IEnumerator<SCC<Node>/*!*/>/*!*/ IEnumerable<SCC<Node>/*!*/>.GetEnumerator()
- {
- Contract.Ensures(Contract.Result<IEnumerator<SCC<Node>>>() != null);
-
- Contract.Assume(Computed);
- Contract.Assert(cce.NonNullElements((IEnumerable<SCC<Node>/*!*/>)sccs));//REVIEW
- return ((IEnumerable<SCC<Node>/*!*/>)sccs).GetEnumerator();
- }
-
- private readonly IList<SCC<Node>/*!*/>/*!*/ sccs = new List<SCC<Node>/*!*/>();
- [ContractInvariantMethod]
- void sccsInvariant()
- {
- Contract.Invariant(cce.NonNullElements(sccs));
- }
-
-
- public void Compute()
- {
- Contract.Requires(!Computed);
- Contract.Ensures(Computed);
- // Compute post times on graph with edges reversed
- this.dfsNext = this.preds;
- foreach (Node/*!*/ n in cce.NonNull(graph.Keys))
- {
- Contract.Assert(n != null);
- if (!seen.ContainsKey(n))
- {
- OrderNodes(n);
- }
- }
-
- // Clear seen
- seen.Clear();
-
- // Compute SCCs
- this.dfsNext = this.succs;
- while (postOrder.Count > 0)
- {
- Node/*!*/ n = postOrder.Pop();
- Contract.Assert(n != null);
-
- if (!seen.ContainsKey(n))
- {
- SCC<Node>/*!*/ curr = new SCC<Node>();
- FindSCCs(n, curr);
- sccs.Add(curr);
- }
- }
-
- // Clear seen
- seen.Clear();
-
- this.computed = true;
- }
-
- private Adjacency<Node>/*?*/ dfsNext = null;
-
- private readonly IDictionary<Node/*!*/, object>/*!*/ seen = new Dictionary<Node/*!*/, object>();
- private readonly Stack<Node/*!*/>/*!*/ postOrder = new Stack<Node/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(seen != null);
- Contract.Invariant(cce.NonNullElements(postOrder));
- }
-
-
- // DFS to order nodes by post times
- private void OrderNodes(Node node)
- {
- Contract.Requires(node != null);
- seen.Add(node, null);
-
- Contract.Assert(dfsNext != null);
- System.Collections.IEnumerable/*!*/ nexts = dfsNext(node);
- Contract.Assert(nexts != null);
- foreach (Node/*!*/ n in nexts)
- {
- Contract.Assert(n != null);
- if (graph.ContainsKey(n) && !seen.ContainsKey(n))
- {
- OrderNodes(n);
- }
- }
-
- postOrder.Push(node);
- }
-
- // DFS to compute SCCs
- private void FindSCCs(Node node, SCC<Node> currSCC)
- {
- Contract.Requires(currSCC != null);
- Contract.Requires(node != null);
- //modifies currSCC.*;
- seen.Add(node, null);
- currSCC.Add(node);
-
- Contract.Assert(dfsNext != null);
- System.Collections.IEnumerable/*!*/ nexts = dfsNext(node);
- Contract.Assert(nexts != null);
- foreach (Node/*!*/ n in nexts)
- {
- Contract.Assert(n != null);
- if (graph.ContainsKey(n) && !seen.ContainsKey(n))
- {
- FindSCCs(n, currSCC);
- }
- }
- }
-
- [Pure]
- public override string ToString()
- {
- Contract.Ensures(Contract.Result<string>() != null);
- string outStr = "";
- int i = 0;
-
- foreach (ICollection<Node> component in this)
- {
- string/*!*/ tmp = System.String.Format("\nComponent #{0} = ", i++);
- Contract.Assert(tmp != null);
- outStr += tmp;
-
- bool firstInRow = true;
-
- foreach (Node b in component)
- {
- string/*!*/ tmpComponent = System.String.Format("{0}{1}", firstInRow ? "" : ", ", b);
- Contract.Assert(tmpComponent != null);
- outStr += tmpComponent;
- firstInRow = false;
- }
- }
- return outStr;
- }
-
- }
-
- public class GraphProgram {
- static void TestGraph<T>(T/*!*/ source, params Tuple<T/*!*/, T/*!*/>[] edges) {
- Contract.Requires(source != null);
- Contract.Requires(Contract.ForAll(edges, pair => pair.Item1 != null && pair.Item2 != null));
- HashSet<Tuple<T/*!*/, T/*!*/>> es = new HashSet<Tuple<T/*!*/, T/*!*/>>();
- foreach (Tuple<T/*!*/, T/*!*/> e in edges) {
- Contract.Assert(e.Item1 != null && e.Item2 != null);
- es.Add(e);
- }
- Graph<T> g = new Graph<T>(es);
- g.AddSource(source);
- Console.WriteLine("G = " + g);
- g.ComputeLoops();
- Console.WriteLine("G's Dominator Map = " + g.DominatorMap);
- Console.WriteLine("G's Immediate Dominator Map = " + Util.MapToString(g.ImmediateDominatorMap));
- Console.WriteLine("G is reducible: " + (g.Reducible ? "yes" : "no"));
- }
-
- static void Main(string[] args)
- //requires forall{string s in args; s != null};
- {
- Console.WriteLine("Spec# says hello!");
- // This generates bad IL -- need to fix a bug in the compiler
- //Graph<int> g = new Graph<int>(new Set<Tuple<int,int>>{ new Tuple<int,int>(1,2), new Tuple<int,int>(1,3), new Tuple<int,int>(2,3) });
-
- Console.WriteLine("");
- TestGraph<char>('a',
- new Tuple<char, char>('a', 'b'),
- new Tuple<char, char>('a', 'c'),
- new Tuple<char, char>('b', 'c')
- );
-
- Console.WriteLine("");
- TestGraph<char>('a',
- new Tuple<char, char>('a', 'b'),
- new Tuple<char, char>('a', 'c'),
- new Tuple<char, char>('b', 'd'),
- new Tuple<char, char>('c', 'e'),
- new Tuple<char, char>('c', 'f'),
- new Tuple<char, char>('d', 'e'),
- new Tuple<char, char>('e', 'd'),
- new Tuple<char, char>('e', 'f'),
- new Tuple<char, char>('f', 'e')
- );
-
- Console.WriteLine("");
- TestGraph<char>('a',
- new Tuple<char, char>('a', 'b'),
- new Tuple<char, char>('a', 'c'),
- new Tuple<char, char>('b', 'c'),
- new Tuple<char, char>('c', 'b')
- );
-
- Console.WriteLine("");
- TestGraph<int>(1,
- new Tuple<int, int>(1, 2),
- new Tuple<int, int>(1, 3),
- new Tuple<int, int>(2, 3)
- );
-
- Console.WriteLine("");
- TestGraph<int>(1,
- new Tuple<int, int>(1, 2),
- new Tuple<int, int>(1, 3),
- new Tuple<int, int>(2, 3),
- new Tuple<int, int>(3, 2)
- );
-
- Console.WriteLine("");
- TestGraph<int>(2,
- new Tuple<int, int>(2, 3),
- new Tuple<int, int>(2, 4),
- new Tuple<int, int>(3, 2)
- );
-
- Console.WriteLine("");
- TestGraph<char>('a',
- new Tuple<char, char>('a', 'b'),
- new Tuple<char, char>('a', 'c'),
- new Tuple<char, char>('b', 'c'),
- new Tuple<char, char>('b', 'b')
- );
-
-
- }
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Text; // for StringBuilder
+using System.Diagnostics.Contracts;
+namespace Microsoft.Boogie.GraphUtil {
+
+ internal static class Util {
+ private static string/*!*/ ListToString<T>(IEnumerable<T> xs) {
+ Contract.Ensures(Contract.Result<string>() != null);
+ StringBuilder sb = new StringBuilder();
+ sb.Append("[");
+ bool first = true;
+ foreach (T/*!*/ x in xs) {
+ Contract.Assert(x != null);
+ if (!first)
+ sb.Append(", ");
+ sb.Append(x.ToString());
+ first = false;
+ }
+ sb.Append("]");
+ return sb.ToString();
+ }
+ public static string/*!*/ MapToString<Node>(Dictionary<Node, List<Node>> d) {
+ Contract.Ensures(Contract.Result<string>() != null);
+ StringBuilder sb = new StringBuilder();
+ sb.Append("{");
+ bool first = true;
+ foreach (KeyValuePair<Node, List<Node>> de in d) {
+ if (!first)
+ sb.Append(", ");
+ Contract.Assert(!object.Equals(de.Key,default(Node)));
+ sb.Append(de.Key.ToString());
+ sb.Append("~>");
+ sb.Append(ListToString(de.Value));
+ first = false;
+ }
+ sb.Append("}");
+ return sb.ToString();
+ }
+ }
+
+ // own struct to represent possibly undefined values, because Mono does
+ // not like arrays with element type T! or T?
+ public struct Maybe<T> {
+ private T Value;
+ public bool IsSet; // initialised with false by the default ctor
+ public T Val {
+ get {
+ Contract.Assume(IsSet);
+ return Value;
+ }
+ set {
+ Value = value;
+ IsSet = true;
+ }
+ }
+ public void UnSet() {
+ IsSet = false;
+ }
+ }
+
+ public class DomRelation<Node> {
+ // doms maps (unique) node numbers to the node numbers of the immediate dominator
+ // to use it on Nodes, one needs the two way mapping between nodes and their numbers.
+ private int[] doms; // 0 is unused: means undefined
+ // here are the two mappings
+ private Maybe<Node>[] postOrderNumberToNode;
+ private Dictionary<Node, int> nodeToPostOrderNumber;
+ private int sourceNum; // (number for) root of the graph
+ private Node source; // root of the graph
+ private Graph<Node> graph;
+ private Dictionary<Node, List<Node>> immediateDominatorMap;
+
+ [NotDelayed]
+ internal DomRelation(Graph<Node> g, Node source) {
+ this.graph = g;
+ // slot 0 not used: nodes are numbered from 1 to n so zero
+ // can represent undefined.
+ this.source = source;
+ //:base();
+ this.NewComputeDominators();
+ }
+ public Dictionary<Node, List<Node>> ImmediateDominatorMap {
+ get {
+ Contract.Assume(this.immediateDominatorMap != null);
+ return this.immediateDominatorMap;
+ }
+ }
+ public bool DominatedBy(Node dominee, Node dominator, List<Node> path = null) {
+ Contract.Assume(this.nodeToPostOrderNumber != null);
+ Contract.Assume(this.doms != null);
+ int domineeNum = this.nodeToPostOrderNumber[dominee];
+ int dominatorNum = this.nodeToPostOrderNumber[dominator];
+ if (domineeNum == dominatorNum)
+ return true;
+ int currentNodeNum = this.doms[domineeNum];
+ while (true) {
+ if (currentNodeNum == dominatorNum)
+ return true;
+ if (currentNodeNum == this.sourceNum)
+ return false;
+ if (path != null)
+ path.Add(postOrderNumberToNode[currentNodeNum].Val);
+ currentNodeNum = this.doms[currentNodeNum];
+ }
+ }
+ private Dictionary<Node, List<Node>> domMap = null;
+ [Pure]
+ public override string ToString() {
+ Contract.Assume(this.doms != null);
+ int[] localDoms = this.doms;
+ Contract.Assume(this.postOrderNumberToNode != null);
+ if (domMap == null) {
+ domMap = new Dictionary<Node, List<Node>>();
+ for (int i = 1; i < localDoms.Length; i++) { // 0 slot is not used
+ int domineeNum = i;
+ int currentNodeNum = domineeNum;
+ List<Node> dominators = new List<Node>();
+ while (currentNodeNum != this.sourceNum) {
+ dominators.Add(this.postOrderNumberToNode[currentNodeNum].Val);
+ currentNodeNum = this.doms[currentNodeNum];
+ }
+ dominators.Add(this.postOrderNumberToNode[this.sourceNum].Val);
+ domMap.Add(this.postOrderNumberToNode[i].Val, dominators);
+ }
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.Append("{");
+ bool first = true;
+ foreach (KeyValuePair<Node, List<Node>> de in domMap) {
+ if (!first)
+ sb.Append(", ");
+ Contract.Assert(!object.Equals(de.Key, default(Node)));
+ sb.Append(de.Key.ToString());
+ sb.Append("~>");
+ sb.Append(ListToString(de.Value));
+ first = false;
+ }
+ sb.Append("}");
+ return sb.ToString();
+ }
+ private void PrintIntArray(int[] xs) {
+ Console.Write("[");
+ for (int i = 0; i < xs.Length; i++) {
+ if (0 < i)
+ Console.Write(", ");
+ Console.Write(xs[i]);
+ }
+ Console.WriteLine("]");
+ }
+ public void PrintList<T>(IEnumerable<T> xs) {
+ Console.Write("[");
+ int i = 0;
+ foreach (T/*!*/ x in xs) {
+ Contract.Assert(x != null);
+ if (0 < i)
+ Console.Write(", ");
+ Console.Write(x.ToString());
+ i++;
+ }
+ Console.WriteLine("]");
+ }
+ public string/*!*/ ListToString<T>(IEnumerable<T> xs) {
+ Contract.Ensures(Contract.Result<string>() != null);
+ StringBuilder sb = new StringBuilder();
+ sb.Append("[");
+ bool first = true;
+ foreach (T/*!*/ x in xs) {
+ Contract.Assert(x != null);
+ if (!first)
+ sb.Append(", ");
+ sb.Append(x.ToString());
+ first = false;
+ }
+ sb.Append("]");
+ return sb.ToString();
+ }
+
+ // Keith D. Cooper, Timothy J. Harvey, Ken Kennedy, "A Simple, Fast Dominance Algorithm ", Software Practice and Experience, 2001.
+ // http://citeseer.ist.psu.edu/cooper01simple.html
+ private void NewComputeDominators() {
+ int n = this.graph.Nodes.Count;
+ this.postOrderNumberToNode = new Maybe<Node>[n + 1];
+ this.nodeToPostOrderNumber = new Dictionary<Node, int>();
+ //HashSet<Node> visited = new HashSet<Node>();
+ //int currentNumber = 1;
+ Contract.Assume(this.source != null);
+ //this.PostOrderVisit(this.source, visited, ref currentNumber);
+ this.PostOrderVisitIterative(this.source);
+ this.sourceNum = this.nodeToPostOrderNumber[source];
+ // for (int i = 1; i <= n; i++){ Console.WriteLine(postOrderNumberToNode[i]); }
+ this.doms = new int[n + 1]; // 0 is unused: means undefined
+ Node start_node = this.source;
+ this.doms[this.nodeToPostOrderNumber[start_node]] = this.nodeToPostOrderNumber[start_node];
+ bool changed = true;
+ // PrintIntArray(doms);
+ while (changed) {
+ changed = false;
+ // for all nodes, b, in reverse postorder (except start_node)
+ for (int nodeNum = n - 1; 1 <= nodeNum; nodeNum--) {
+ Node b = this.postOrderNumberToNode[nodeNum].Val;
+ IEnumerable<Node> predecessors = this.graph.Predecessors(b);
+ // find a predecessor (i.e., a higher number) for which
+ // the doms array has been set
+ int new_idom = 0;
+ int first_processed_predecessor = 0;
+ #region new_idom <- number of first (processed) predecessor of b (pick one)
+ foreach (Node p in predecessors) {
+ if (this.doms[this.nodeToPostOrderNumber[p]] != 0) {
+ int x = this.nodeToPostOrderNumber[p];
+ new_idom = x;
+ first_processed_predecessor = x;
+ break;
+ }
+ }
+ #endregion
+ #region for all other predecessors, p, of b
+ foreach (Node p in predecessors) {
+ if (this.nodeToPostOrderNumber[p] == first_processed_predecessor) {
+ continue;
+ }
+ if (this.doms[this.nodeToPostOrderNumber[p]] != 0)
+ new_idom = intersect(this.nodeToPostOrderNumber[p], new_idom, this.doms);
+ }
+ #endregion
+ if (this.doms[this.nodeToPostOrderNumber[b]] != new_idom) {
+ this.doms[this.nodeToPostOrderNumber[b]] = new_idom;
+ changed = true;
+ }
+ }
+ }
+ #region Populate the Immediate Dominator Map
+ int sourceNum = this.nodeToPostOrderNumber[this.source];
+ immediateDominatorMap = new Dictionary<Node, List<Node>>();
+ for (int i = 1; i <= n; i++) {
+ Node node = this.postOrderNumberToNode[i].Val;
+ Node idomNode = this.postOrderNumberToNode[this.doms[i]].Val;
+ if (i == sourceNum && this.doms[i] == sourceNum) {
+ continue;
+ }
+ if (immediateDominatorMap.ContainsKey(idomNode)) {
+ immediateDominatorMap[idomNode].Add(node);
+ } else {
+ List<Node> l = new List<Node>();
+ l.Add(node);
+ immediateDominatorMap.Add(idomNode, l);
+ }
+ }
+ #endregion
+ }
+ private int intersect(int b1, int b2, int[] doms) {
+ int finger1 = b1;
+ int finger2 = b2;
+ while (finger1 != finger2) {
+ while (finger1 < finger2) {
+ finger1 = doms[finger1];
+ }
+ while (finger2 < finger1) {
+ finger2 = doms[finger2];
+ }
+ }
+ return finger1;
+ }
+ private void PostOrderVisit(Node/*!*/ n, HashSet<Node> visited, ref int currentNumber) {
+ Contract.Requires(n != null);
+ if (visited.Contains(n))
+ return;
+ visited.Add(n);
+ foreach (Node/*!*/ child in this.graph.Successors(n)) {
+ Contract.Assert(child != null);
+ PostOrderVisit(child, visited, ref currentNumber);
+ }
+ Contract.Assume(this.postOrderNumberToNode != null);
+ Contract.Assume(this.nodeToPostOrderNumber != null);
+ this.postOrderNumberToNode[currentNumber].Val = n;
+ this.nodeToPostOrderNumber[n] = currentNumber;
+ currentNumber++;
+ return;
+ }
+ // Iterative version: mimics the above recursive procedure
+ private void PostOrderVisitIterative(Node n)
+ {
+ Contract.Requires(n != null);
+ var visited = new HashSet<Node>();
+ var grey = new HashSet<Node>();
+ var stack = new Stack<Node>();
+
+ int currentNumber = 1;
+
+ stack.Push(n);
+ visited.Add(n);
+
+ while (stack.Count != 0)
+ {
+ var curr = stack.Pop();
+
+ if (grey.Contains(curr))
+ {
+ Contract.Assume(this.postOrderNumberToNode != null);
+ Contract.Assume(this.nodeToPostOrderNumber != null);
+ this.postOrderNumberToNode[currentNumber].Val = curr;
+ this.nodeToPostOrderNumber[curr] = currentNumber;
+ currentNumber++;
+ }
+ else
+ {
+ grey.Add(curr);
+ stack.Push(curr);
+ foreach (Node/*!*/ child in this.graph.Successors(curr))
+ {
+ Contract.Assert(child != null);
+ if (!visited.Contains(child))
+ {
+ visited.Add(child);
+ stack.Push(child);
+ }
+ }
+ }
+
+ }
+
+
+ }
+
+ public Node LeastCommonAncestor(Node n1, Node n2)
+ {
+ int num1 = nodeToPostOrderNumber[n1], num2 = nodeToPostOrderNumber[n2];
+ int lca = intersect(num1, num2, this.doms);
+ return postOrderNumberToNode[lca].Val;
+ }
+ }
+
+ public class Graph<Node> {
+ private HashSet<Tuple<Node/*!*/, Node/*!*/>> es;
+ private HashSet<Node> ns;
+ private Node source;
+ private bool reducible;
+ private HashSet<Node> headers;
+ private Dictionary<Node, HashSet<Node>> backEdgeNodes;
+ private Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops;
+ private HashSet<Node> splitCandidates;
+
+ private DomRelation<Node> dominatorMap = null;
+ private Dictionary<Node, HashSet<Node>> predCache = new Dictionary<Node, HashSet<Node>>();
+ private Dictionary<Node, HashSet<Node>> succCache = new Dictionary<Node, HashSet<Node>>();
+ private bool predComputed;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(es == null || Contract.ForAll(es, p => p.Item1 != null && p.Item2 != null));
+ Contract.Invariant(naturalLoops == null || Contract.ForAll(naturalLoops.Keys, p => p.Item2 != null && p.Item1 != null));
+ }
+
+ private class PreHeader {
+ Node/*!*/ myHeader;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(myHeader != null);
+ }
+
+ internal PreHeader(Node/*!*/ h) {
+ Contract.Requires(h != null);
+ myHeader = h;
+ }
+
+ [Pure]
+ public override string/*!*/ ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "#" + myHeader.ToString();
+ }
+ }
+
+ public Graph(HashSet<Tuple<Node/*!*/, Node/*!*/>> edges) {
+
+ Contract.Requires(cce.NonNullElements(edges) && Contract.ForAll(edges, p => p.Item1 != null && p.Item2 != null));
+ es = edges;
+
+ // original A#
+ //ns = Set<Node>{ x : <x,y> in es } + Set<Node>{ y : <x,y> in es };
+
+ // closest Spec#
+ //ns = new Set<Node>{ Tuple<Node,Node> p in edges; p.Item1 } + new Set<Node>{ Tuple<Node,Node> p in edges; p.Item2 };
+
+ //
+ HashSet<Node> temp = new HashSet<Node>();
+ foreach (Tuple<Node/*!*/, Node/*!*/> p in edges) {
+ Contract.Assert(p.Item1 != null);
+ temp.Add(p.Item1);
+ Contract.Assert(p.Item2 != null);
+ temp.Add(p.Item2);
+ }
+ ns = temp;
+ }
+ public Graph() {
+ es = new HashSet<Tuple<Node/*!*/, Node/*!*/>>();
+ ns = new HashSet<Node>();
+ }
+
+ // BUGBUG: Set<T>.ToString() should return a non-null string
+ [Pure]
+ public override string/*!*/ ToString() {
+ return "" + es.ToString();
+ }
+
+ public void AddSource(Node/*!*/ x) {
+ Contract.Requires(x != null);
+ // BUGBUG: This generates bad code in the compiler
+ //ns += new Set<Node>{x};
+ ns.Add(x);
+ source = x;
+ }
+
+ public void AddEdge(Node/*!*/ source, Node/*!*/ dest) {
+ Contract.Requires(source != null);
+ Contract.Requires(dest != null);
+ //es += Set<Edge>{<source,dest>};
+ //ns += Set<Node>{source, dest};
+ es.Add(new Tuple<Node/*!*/, Node/*!*/>(source, dest));
+ ns.Add(source);
+ ns.Add(dest);
+ predComputed = false;
+ }
+
+ public HashSet<Node> Nodes {
+ get {
+ return ns;
+ }
+ }
+ public IEnumerable<Tuple<Node/*!*/, Node/*!*/>> Edges {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<Tuple<Node, Node>>>())
+ && Contract.ForAll(Contract.Result<IEnumerable<Tuple<Node, Node>>>(), n =>
+ n.Item1 != null && n.Item2 != null));
+ return es;
+ }
+ }
+
+ public bool Edge(Node/*!*/ x, Node/*!*/ y) {
+ Contract.Requires(x != null);
+ Contract.Requires(y != null);
+ // original A#
+ // return <x,y> in es;
+ return es.Contains(new Tuple<Node/*!*/, Node/*!*/>(x, y));
+ }
+
+ private void ComputePredSuccCaches() {
+ if (predComputed)
+ return;
+ predComputed = true;
+ predCache = new Dictionary<Node, HashSet<Node>>();
+ succCache = new Dictionary<Node, HashSet<Node>>();
+
+ foreach (Node n in Nodes) {
+ predCache[n] = new HashSet<Node>();
+ succCache[n] = new HashSet<Node>();
+ }
+
+ foreach (Tuple<Node/*!*/, Node/*!*/> p in Edges) {
+ Contract.Assert(p.Item1 != null);
+ Contract.Assert(p.Item2 != null);
+ HashSet<Node> tmp;
+
+ tmp = predCache[p.Item2];
+ tmp.Add(p.Item1);
+ predCache[p.Item2] = tmp;
+
+ tmp = succCache[p.Item1];
+ tmp.Add(p.Item2);
+ succCache[p.Item1] = tmp;
+ }
+ }
+
+ public IEnumerable<Node> Predecessors(Node n) {
+ // original A#
+ //Set<Node> result = Set{ x : x in Nodes, Edge(x,n) };
+
+ ComputePredSuccCaches();
+ return predCache[n];
+ }
+
+ public IEnumerable<Node> Successors(Node n) {
+ ComputePredSuccCaches();
+ return succCache[n];
+ }
+
+ public List<Node> SuccessorsAsList(Node n) {
+ ComputePredSuccCaches();
+ List<Node> ret = new List<Node>();
+ foreach (Node s in succCache[n])
+ ret.Add(s);
+ return ret;
+ }
+
+ public DomRelation<Node> /*Map<Node,Set<Node>>*/ DominatorMap {
+ get {
+ Contract.Assert(source != null);
+ if (this.dominatorMap == null) {
+ this.dominatorMap = new DomRelation<Node>(this, this.source);
+ }
+ return this.dominatorMap;
+ }
+ }
+
+ public Dictionary<Node, List<Node>> ImmediateDominatorMap {
+ get {
+ Contract.Assert(source != null);
+ if (this.dominatorMap == null) {
+ this.dominatorMap = new DomRelation<Node>(this, this.source);
+ }
+ return this.dominatorMap.ImmediateDominatorMap;
+ }
+ }
+ public List<Node> ImmediatelyDominatedBy(Node/*!*/ n) {
+ Contract.Requires(n != null);
+ List<Node> dominees;
+ this.ImmediateDominatorMap.TryGetValue(n, out dominees);
+ return dominees == null ? new List<Node>() : dominees;
+ }
+
+ public IEnumerable<Node/*?*/> TopologicalSort(bool reversed = false) {
+ bool acyclic;
+ List<Node> sortedList;
+ this.TarjanTopSort(out acyclic, out sortedList, reversed);
+ return acyclic ? sortedList : new List<Node>();
+ }
+ // From Tarjan 1972
+ public void TarjanTopSort(out bool acyclic, out List<Node> sortedNodes, bool reversed = false) {
+ int n = this.Nodes.Count;
+ if (n == 0) {
+ acyclic = true;
+ sortedNodes = new List<Node>();
+ return;
+ }
+ int[] incomingEdges = new int[n];
+ // need an arbitrary numbering for the nodes to use as indices into
+ // the arrays used within this algorithm
+ Dictionary<Node, int> nodeToNumber = new Dictionary<Node, int>(n);
+ Maybe<Node>[] numberToNode = new Maybe<Node>[n];
+ int counter = 0;
+ foreach (Node node in this.Nodes) {
+ numberToNode[counter].Val = node;
+ nodeToNumber[node] = counter;
+ counter++;
+ }
+ foreach (Tuple<Node/*!*/, Node/*!*/> e in this.Edges) {
+ Contract.Assert(e.Item1 != null);
+ Contract.Assert(e.Item2 != null);
+ Node/*!*/ target = e.Item2;
+ incomingEdges[nodeToNumber[target]]++;
+ }
+ List<Node> sorted = new List<Node>();
+ int sortedIndex = 0;
+ while (sortedIndex < n) {
+ // find a root (i.e., its index)
+ int rootIndex = -1;
+ if (reversed) {
+ for (int i = n-1; i >= 0; i--) {
+ if (incomingEdges[i] == 0) {
+ rootIndex = i;
+ break;
+ }
+ }
+ } else {
+ for (int i = 0; i < n; i++) {
+ if (incomingEdges[i] == 0) {
+ rootIndex = i;
+ break;
+ }
+ }
+ }
+ if (rootIndex == -1) {
+ acyclic = false;
+ sortedNodes = new List<Node>();
+ return;
+ }
+ // mark root so it won't be used again
+ incomingEdges[rootIndex] = -1;
+ Node root = numberToNode[rootIndex].Val;
+ sorted.Add(root);
+ ++sortedIndex;
+ foreach (Node s in this.Successors(root)) {
+ incomingEdges[nodeToNumber[s]]--;
+ }
+ }
+ acyclic = true;
+ sortedNodes = sorted;
+ return;
+ }
+ private IEnumerable<Node> OldTopologicalSort() {
+ Tuple<bool, List<Node>> result = this.TopSort();
+ return result.Item1 ? result.Item2 : (IEnumerable<Node>)new List<Node>();
+ }
+ // From AsmL distribution example
+ private Tuple<bool, List<Node>> TopSort()
+ {
+ List<Node> S = new List<Node>();
+ HashSet<Node> V = this.Nodes;
+ HashSet<Node> X = new HashSet<Node>();
+ foreach (Node/*!*/ n in V) {
+ Contract.Assert(n != null);
+ X.Add(n);
+ }
+ bool change = true;
+ while (change)
+ // invariant: X = V - S
+ {
+ change = false;
+ if (X.Count > 0) {
+ foreach (Node/*!*/ n in X) {
+ Contract.Assert(n != null);
+ // see if n has any incoming edges from any other node in X
+ bool inDegreeZero = true;
+ foreach (Node/*!*/ u in X) {
+ Contract.Assert(u != null);
+ if (this.Edge(u, n)) {
+ inDegreeZero = false;
+ break; // no point looking further
+ }
+ }
+ if (inDegreeZero) {
+ S.Add(n);
+ X.Remove(n);
+ change = true;
+ break; // might as well go back and start looking through X from the beginning
+ }
+ }
+ // Then we made it all the way through X without finding a source node
+ if (!change) {
+ return new Tuple<bool, List<Node>>(false, new List<Node>());
+ }
+ }
+ }
+ return new Tuple<bool, List<Node>>(true, S);
+ }
+
+ public static bool Acyclic(Graph<Node> g, Node source) {
+ bool acyclic;
+ List<Node> sortedList;
+ g.TarjanTopSort(out acyclic, out sortedList);
+ return acyclic;
+ }
+
+ // [Dragon, Fig. 10.15, p. 604. Algorithm for constructing the natural loop.]
+ static HashSet<Node> NaturalLoop(Graph<Node> g, Tuple<Node/*!*/, Node/*!*/> backEdge)
+ {
+ Contract.Requires(backEdge.Item1 != null && backEdge.Item2 != null);
+ Node/*!*/ n = backEdge.Item1;
+ Node/*!*/ d = backEdge.Item2;
+ Stack<Node> stack = new Stack<Node>();
+ HashSet<Node> loop = new HashSet<Node>();
+ loop.Add(d);
+ if (!n.Equals(d)) // then n is not in loop
+ {
+ loop.Add(n);
+ stack.Push(n); // push n onto stack
+ }
+ while (stack.Count > 0) // not empty
+ {
+ Node m = stack.Peek();
+ stack.Pop(); // pop stack
+ foreach (Node/*!*/ p in g.Predecessors(m)) {
+ Contract.Assert(p != null);
+ if (!(loop.Contains(p))) {
+ loop.Add(p);
+ stack.Push(p); // push p onto stack
+ }
+ }
+ }
+ return loop;
+ }
+
+ internal struct ReducibleResult {
+ internal bool reducible;
+ internal HashSet<Node> headers;
+ internal Dictionary<Node, HashSet<Node>> backEdgeNodes;
+ internal Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops;
+ internal HashSet<Node> splitCandidates;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Contract.ForAll(naturalLoops.Keys, p => p.Item1 != null && p.Item2 != null));
+ }
+
+ internal ReducibleResult(bool b, HashSet<Node> headers, Dictionary<Node, HashSet<Node>> backEdgeNodes, Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops, HashSet<Node> splitCandidates)
+ {
+ Contract.Requires(naturalLoops == null || Contract.ForAll(naturalLoops.Keys, Key => Key.Item1 != null && Key.Item2 != null));
+ this.reducible = b;
+ this.headers = headers;
+ this.backEdgeNodes = backEdgeNodes;
+ this.naturalLoops = naturalLoops;
+ this.splitCandidates = splitCandidates;
+ }
+
+ }
+
+ // [Dragon, p. 606]
+ static ReducibleResult ComputeReducible(Graph<Node> g, Node source) {
+ // first, compute the dom relation
+ DomRelation<Node> /*Map<Node,Set<Node>>*/ D = g.DominatorMap;
+ return ComputeReducible(g, source, D);
+ }
+
+ static HashSet<Node> FindCycle(Graph<Node> g, Node source) {
+ Stack<Tuple<Node, List<Node>>> stack = new Stack<Tuple<Node, List<Node>>>();
+ HashSet<Node> stackAsSet = new HashSet<Node>();
+ HashSet<Node> visited = new HashSet<Node>();
+ stack.Push(new Tuple<Node, List<Node>>(source, g.SuccessorsAsList(source)));
+ stackAsSet.Add(source);
+ while (stack.Count > 0) {
+ Tuple<Node, List<Node>> tuple = stack.Peek();
+ List<Node> children = tuple.Item2;
+ if (children.Count == 0) {
+ stack.Pop();
+ stackAsSet.Remove(tuple.Item1);
+ continue;
+ }
+ Node n = children[0];
+ children.RemoveAt(0);
+ if (stackAsSet.Contains(n)) {
+ HashSet<Node> ret = new HashSet<Node>();
+ ret.Add(n);
+ while (true) {
+ Node x = stack.Pop().Item1;
+ if (x.Equals(n))
+ return ret;
+ }
+ }
+ if (visited.Contains(n))
+ continue;
+ stack.Push(new Tuple<Node, List<Node>>(n, g.SuccessorsAsList(n)));
+ visited.Add(n);
+ stackAsSet.Add(n);
+ System.Diagnostics.Debug.Assert(stack.Count == stackAsSet.Count);
+ }
+ return new HashSet<Node>();
+ }
+
+ // [Dragon, p. 606]
+ static ReducibleResult ComputeReducible(Graph<Node> g,
+ Node source,
+ DomRelation<Node>/*!*/ DomRelation) {
+ Contract.Requires(DomRelation != null);
+
+ //Console.WriteLine("[" + DateTime.Now +"]: begin ComputeReducible");
+ IEnumerable<Tuple<Node/*!*/, Node/*!*/>> edges = g.Edges;
+ Contract.Assert(Contract.ForAll(edges, n => n.Item1 != null && n.Item2 != null));
+ HashSet<Tuple<Node/*!*/, Node/*!*/>> backEdges = new HashSet<Tuple<Node/*!*/, Node/*!*/>>();
+ HashSet<Tuple<Node/*!*/, Node/*!*/>> nonBackEdges = new HashSet<Tuple<Node/*!*/, Node/*!*/>>();
+ foreach (Tuple<Node/*!*/, Node/*!*/> e in edges) {
+ Contract.Assert(e.Item1 != null);
+ Contract.Assert(e.Item2 != null);
+ Node x = e.Item1;
+ Node y = e.Item2; // so there is an edge from x to y
+ if (DomRelation.DominatedBy(x, y)) { // y dom x: which means y dominates x
+ backEdges.Add(e);
+ } else {
+ nonBackEdges.Add(e);
+ }
+ }
+ Graph<Node> withoutBackEdges = new Graph<Node>(nonBackEdges);
+ if (!Acyclic(withoutBackEdges, source)) {
+ return new ReducibleResult(false,
+ new HashSet<Node>(),
+ new Dictionary<Node, HashSet<Node>>(),
+ new Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>>(),
+ FindCycle(withoutBackEdges, source));
+ } else {
+ // original A#:
+ //Set<Node> headers = Set{ d : <n,d> in backEdges };
+ HashSet<Node> headers = new HashSet<Node>();
+ foreach (Tuple<Node/*!*/, Node/*!*/> e in backEdges) {
+
+ Contract.Assert(e.Item1 != null);
+ Contract.Assert(e.Item2 != null);
+ headers.Add(e.Item2);
+ }
+ // original A#:
+ //Map<Node,Set<Node>> backEdgeNodes = Map{ h -> bs : h in headers, bs = Set<Node>{ b : <b,x> in backEdges, x == h } };
+ Dictionary<Node, HashSet<Node>> backEdgeNodes = new Dictionary<Node, HashSet<Node>>();
+ foreach (Node/*!*/ h in headers) {
+ Contract.Assert(h != null);
+ HashSet<Node> bs = new HashSet<Node>();
+ foreach (Tuple<Node, Node> backedge in backEdges) {
+ Contract.Assert(backedge.Item1 != null);
+ Contract.Assert(backedge.Item2 != null);
+ if (backedge.Item2.Equals(h)) {
+ bs.Add(backedge.Item1);
+ }
+ }
+ backEdgeNodes.Add(h, bs);
+ }
+
+ // original A#:
+ //Map<Tuple<Node,Node>,Set<Node>> naturalLoops = Map{ e -> NaturalLoop(g,e) : e in backEdges };
+ Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>> naturalLoops = new Dictionary<Tuple<Node/*!*/, Node/*!*/>, HashSet<Node>>();
+ foreach (Tuple<Node/*!*/, Node/*!*/> e in backEdges) {
+ Contract.Assert(e.Item1 != null && e.Item2 != null);
+ naturalLoops.Add(e, NaturalLoop(g, e));
+ }
+
+ //Console.WriteLine("[" + DateTime.Now +"]: end ComputeReducible");
+ return new ReducibleResult(true, headers, backEdgeNodes, naturalLoops, new HashSet<Node>());
+ }
+ }
+
+ public bool Reducible {
+ get {
+ return reducible;
+ }
+ }
+ public IEnumerable<Node> Headers {
+ get {
+ return headers;
+ }
+ }
+ public IEnumerable<Node> BackEdgeNodes(Node/*!*/ h) {
+ Contract.Requires(h != null);
+ // original A#:
+ //return h in backEdgeNodes ? backEdgeNodes[h] : null;
+ return (backEdgeNodes.ContainsKey(h) ? backEdgeNodes[h] : (IEnumerable<Node>)new List<Node>());
+ }
+ public IEnumerable<Node> NaturalLoops(Node/*!*/ header, Node/*!*/ backEdgeNode) {
+ Contract.Requires(header != null);
+ Contract.Requires(backEdgeNode != null);
+ Tuple<Node/*!*/, Node/*!*/> e = new Tuple<Node/*!*/, Node/*!*/>(backEdgeNode, header);
+ return naturalLoops.ContainsKey(e) ? naturalLoops[e] : (IEnumerable<Node>)new List<Node>();
+ }
+ public HashSet<Node> SplitCandidates {
+ get {
+ return splitCandidates;
+ }
+ }
+ public void ComputeLoops() {
+ ReducibleResult r = ComputeReducible(this, this.source);
+ this.reducible = r.reducible;
+ this.headers = r.headers;
+ this.backEdgeNodes = r.backEdgeNodes;
+ this.naturalLoops = r.naturalLoops;
+ this.splitCandidates = r.splitCandidates;
+ return;
+ }
+
+ public IEnumerable<Node> SortHeadersByDominance()
+ {
+ Graph<Node> dag = new Graph<Node>();
+ foreach (Node b in headers)
+ {
+ dag.AddSource(b);
+ foreach (Node c in headers)
+ {
+ if (b.Equals(c)) continue;
+ if (DominatorMap.DominatedBy(b, c))
+ {
+ System.Diagnostics.Debug.Assert(!DominatorMap.DominatedBy(c, b));
+ dag.AddEdge(b, c);
+ }
+ }
+ }
+ return dag.TopologicalSort();
+ }
+
+ public string ToDot(Func<Node, string> NodeLabel = null, Func<Node, string> NodeStyle = null) {
+ NodeLabel = NodeLabel ?? (n => n.ToString());
+ NodeStyle = NodeStyle ?? (n => "[shape=box]");
+ var s = new StringBuilder();
+ s.AppendLine("digraph G {");
+ foreach (var n in Nodes)
+ s.AppendLine(" \"" + NodeLabel(n) + "\" " + NodeStyle(n) + ";");
+ foreach (var e in Edges)
+ s.AppendLine(" \"" + NodeLabel(e.Item1) + "\" -> \"" + NodeLabel(e.Item2) + "\";");
+ s.AppendLine("}");
+ return s.ToString();
+ }
+
+ public ICollection<Node> ComputeReachable() {
+ ICollection<Node> result = new HashSet<Node>();
+ Stack<Node> stack = new Stack<Node>();
+ stack.Push(source);
+ while(!(stack.Count() == 0)) {
+ Node n = stack.Pop();
+ result.Add(n);
+ foreach(var m in Successors(n)) {
+ if(!result.Contains(m)) {
+ stack.Push(m);
+ }
+ }
+ }
+ return result;
+ }
+
+ } // end: class Graph
+
+ public static class GraphAlgorithms
+ {
+
+
+ public static Graph<Node> Dual<Node>(this Graph<Node> g, Node dummySource)
+ {
+ var exits = g.Nodes.Where(n => g.Successors(n).Count() == 0).ToList();
+ Node source;
+ if (exits.Count == 0)
+ exits.Add(dummySource);
+ var dual = new Graph<Node>(new HashSet<Tuple<Node, Node>>(g.Edges.Select(e => new Tuple<Node, Node>(e.Item2, e.Item1))));
+ if (exits.Count == 1)
+ {
+ dual.AddSource(exits[0]);
+ source = exits[0];
+ }
+ else
+ {
+ dual.AddSource(dummySource);
+ source = dummySource;
+ foreach (var exit in exits)
+ dual.AddEdge(dummySource, exit);
+ }
+
+ #region Dual graph may not be connected, so add an edge from the dual graph's soure node to any unreachable node
+ foreach (var n in dual.Nodes.Where(Item => !dual.ComputeReachable().Contains(Item)))
+ {
+ dual.AddEdge(source, n);
+ }
+ #endregion
+
+ return dual;
+ }
+
+ public static List<Tuple<Node, bool>> LoopyTopSort<Node>(this Graph<Node> g)
+ {
+ Contract.Assert(g.Reducible);
+
+ int n = g.Nodes.Count;
+ var nodeToNumber = new Dictionary<Node, int>(n);
+ var numberToNode = new Node[n];
+ var allNodes = new List<int>();
+ int counter = 0;
+ foreach (Node node in g.Nodes)
+ {
+ numberToNode[counter] = node;
+ nodeToNumber[node] = counter;
+ allNodes.Add(counter);
+ counter++;
+ }
+
+ var loops = new List<int>[n];
+ foreach (var h in g.Headers)
+ {
+ var loopNodes = new HashSet<Node>();
+ foreach (var b in g.BackEdgeNodes(h))
+ loopNodes.UnionWith(g.NaturalLoops(h, b));
+ loops[nodeToNumber[h]] =
+ new List<int>(loopNodes.Select(node => nodeToNumber[node]));
+ }
+
+ var successors = new List<int>[n];
+ var predecessors = new List<int>[n];
+ int[] incomingEdges = new int[n];
+
+ for (int i = 0; i < n; i++)
+ predecessors[i] = new List<int>();
+
+ foreach (var e in g.Edges)
+ {
+ Contract.Assert(e.Item1 != null);
+ Contract.Assert(e.Item2 != null);
+ int source = nodeToNumber[e.Item1], target = nodeToNumber[e.Item2];
+ if (loops[target] == null || !loops[target].Contains(source))
+ {
+ if (successors[source] == null)
+ successors[source] = new List<int>();
+ successors[source].Add(target);
+ incomingEdges[target]++;
+ }
+ predecessors[target].Add(source);
+ }
+
+ var sortedNodes = new List<Tuple<Node, bool>>();
+ var sortedNodesInternal = new List<int>();
+
+ var regionStack = new Stack<Tuple<Node, List<int>>>();
+ regionStack.Push(new Tuple<Node, List<int>>(default(Node), allNodes));
+
+ while (regionStack.Count != 0)
+ {
+ var rootIndexes = new List<int>();
+ foreach (var i in regionStack.Peek().Item2)
+ {
+ if (incomingEdges[i] == 0)
+ rootIndexes.Add(i);
+ }
+ if (rootIndexes.Count() == 0)
+ {
+ var region = regionStack.Pop();
+ if (regionStack.Count != 0) {
+ sortedNodes.Add(new Tuple<Node, bool>(region.Item1, true));
+ sortedNodesInternal.Add(nodeToNumber[region.Item1]);
+ }
+ continue;
+ }
+ int rootIndex = rootIndexes[0];
+ int maxPredIndex = -1;
+ foreach (var i in rootIndexes) {
+ foreach (var p in predecessors[i]) {
+ int predIndex =
+ sortedNodesInternal.FindLastIndex(x => x == p);
+ if (predIndex > maxPredIndex) {
+ rootIndex = i;
+ maxPredIndex = predIndex;
+ }
+ }
+ }
+ incomingEdges[rootIndex] = -1;
+ sortedNodes.Add(new Tuple<Node, bool>(numberToNode[rootIndex], false));
+ sortedNodesInternal.Add(rootIndex);
+ if (successors[rootIndex] != null)
+ foreach (int s in successors[rootIndex])
+ incomingEdges[s]--;
+ if (loops[rootIndex] != null)
+ regionStack.Push(new Tuple<Node, List<int>>(numberToNode[rootIndex],
+ loops[rootIndex]));
+ }
+
+ return sortedNodes;
+ }
+
+ // Algorithm from Jeanne Ferrante, Karl J. Ottenstein, Joe D. Warren,
+ // "The Program Dependence Graph and Its Use in Optimization"
+ public static Dictionary<Node, HashSet<Node>> ControlDependence<Node>(this Graph<Node> g) where Node : class, new()
+ {
+ Graph<Node> dual = g.Dual(new Node());
+ DomRelation<Node> pdom = dual.DominatorMap;
+
+ var result = new Dictionary<Node, HashSet<Node>>();
+
+ var S = g.Edges.Where(e => !pdom.DominatedBy(e.Item1, e.Item2));
+ foreach (var edge in S)
+ {
+ var L = pdom.LeastCommonAncestor(edge.Item1, edge.Item2);
+ var deps = new List<Node>();
+ if (L == edge.Item1)
+ {
+ pdom.DominatedBy(edge.Item2, edge.Item1, deps);
+ deps.Add(edge.Item2);
+ deps.Add(edge.Item1);
+ }
+ else
+ {
+ pdom.DominatedBy(edge.Item2, L, deps);
+ deps.Add(edge.Item2);
+ }
+ if (result.ContainsKey(edge.Item1))
+ {
+ result[edge.Item1].UnionWith(deps);
+ }
+ else
+ {
+ result[edge.Item1] = new HashSet<Node>(deps);
+ }
+ }
+
+ return result;
+ }
+
+ public static void TransitiveClosure<Node>(this Dictionary<Node, HashSet<Node>> graph) where Node : class {
+ bool changed;
+ do {
+ changed = false;
+ foreach (var entry in graph) {
+ var newSuccessors = new HashSet<Node>(entry.Value);
+ foreach (var successor in entry.Value) {
+ if (graph.ContainsKey(successor))
+ newSuccessors.UnionWith(graph[successor]);
+ }
+ if (newSuccessors.Count != entry.Value.Count) {
+ entry.Value.UnionWith(newSuccessors);
+ changed = true;
+ }
+ }
+ } while (changed);
+ }
+
+ }
+
+ public delegate System.Collections.IEnumerable/*<Node!>*//*!*/ Adjacency<T>(T/*!*/ node);
+
+
+ // An SCC is a set of nodes
+ public sealed class SCC<Node> : ICollection<Node>
+ {
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(nodesMap != null);
+ }
+
+ private IDictionary<Node, object>/*!*/ nodesMap = new Dictionary<Node, object>();
+ private ICollection<Node>/*!*/ nodes
+ {
+ get
+ {
+ return cce.NonNull(nodesMap.Keys);
+ }
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ System.Collections.IEnumerator/*!*/ System.Collections.IEnumerable.GetEnumerator()
+ {
+ Contract.Ensures(Contract.Result<System.Collections.IEnumerator>() != null);
+
+ return ((System.Collections.IEnumerable)nodes).GetEnumerator();
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ IEnumerator<Node>/*!*/ IEnumerable<Node>.GetEnumerator()
+ {
+ Contract.Ensures(Contract.Result<IEnumerator<Node>>() != null);
+
+ return ((IEnumerable<Node>)nodes).GetEnumerator();
+ }
+
+ public int Count
+ {
+ get
+ {
+ return nodes.Count;
+ }
+ }
+ public bool IsReadOnly
+ {
+ get
+ {
+ return nodesMap.IsReadOnly;
+ }
+ }
+ public void Add(Node item)
+ {
+ nodesMap.Add(item, null);
+ }
+ public void Clear()
+ {
+ nodesMap.Clear();
+ }
+ [Pure]
+ public bool Contains(Node item)
+ {
+ return nodesMap.ContainsKey(item);
+ }
+ public void CopyTo(Node[] array, int arrayIndex)
+ {
+ //Contract.Requires(array != null);
+ nodes.CopyTo(array, arrayIndex);
+ }
+ public bool Remove(Node item)
+ {
+ return nodesMap.Remove(item);
+ }
+ }
+
+ public sealed class StronglyConnectedComponents<Node> : IEnumerable<SCC<Node>/*!*/> where Node : class
+ {
+ private readonly IDictionary<Node/*!*/, object>/*!*/ graph;
+ [ContractInvariantMethod]
+ void graphInvariantMethod()
+ {
+ Contract.Invariant(Contract.ForAll(graph, entry => entry.Key != null));
+ Contract.Invariant(preds != null);
+ Contract.Invariant(succs != null);
+ }
+ private readonly Adjacency<Node>/*!*/ preds;
+ private readonly Adjacency<Node>/*!*/ succs;
+
+ private bool computed = false;
+ public bool Computed
+ {
+ get
+ {
+ return computed;
+ }
+ }
+
+ [NotDelayed]
+ public StronglyConnectedComponents(System.Collections.IEnumerable/*<Node!>*/ graph, Adjacency<Node> preds, Adjacency<Node> succs)
+ : base()
+ {
+ Contract.Requires(succs != null);
+ Contract.Requires(preds != null);
+ Contract.Requires(graph != null);
+ Contract.Ensures(!Computed);
+ IDictionary<Node/*!*/, object>/*!*/ dict = new Dictionary<Node/*!*/, object>();
+ foreach (Node/*!*/ n in graph)
+ {
+ Contract.Assert(n != null);
+ dict.Add(n, null);
+ }
+
+ this.graph = dict;
+ this.preds = preds;
+ this.succs = succs;
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ System.Collections.IEnumerator/*!*/ System.Collections.IEnumerable.GetEnumerator()
+ {
+ Contract.Ensures(Contract.Result<System.Collections.IEnumerator>() != null);
+
+ return ((System.Collections.IEnumerable)sccs).GetEnumerator();
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ IEnumerator<SCC<Node>/*!*/>/*!*/ IEnumerable<SCC<Node>/*!*/>.GetEnumerator()
+ {
+ Contract.Ensures(Contract.Result<IEnumerator<SCC<Node>>>() != null);
+
+ Contract.Assume(Computed);
+ Contract.Assert(cce.NonNullElements((IEnumerable<SCC<Node>/*!*/>)sccs));//REVIEW
+ return ((IEnumerable<SCC<Node>/*!*/>)sccs).GetEnumerator();
+ }
+
+ private readonly IList<SCC<Node>/*!*/>/*!*/ sccs = new List<SCC<Node>/*!*/>();
+ [ContractInvariantMethod]
+ void sccsInvariant()
+ {
+ Contract.Invariant(cce.NonNullElements(sccs));
+ }
+
+
+ public void Compute()
+ {
+ Contract.Requires(!Computed);
+ Contract.Ensures(Computed);
+ // Compute post times on graph with edges reversed
+ this.dfsNext = this.preds;
+ foreach (Node/*!*/ n in cce.NonNull(graph.Keys))
+ {
+ Contract.Assert(n != null);
+ if (!seen.ContainsKey(n))
+ {
+ OrderNodes(n);
+ }
+ }
+
+ // Clear seen
+ seen.Clear();
+
+ // Compute SCCs
+ this.dfsNext = this.succs;
+ while (postOrder.Count > 0)
+ {
+ Node/*!*/ n = postOrder.Pop();
+ Contract.Assert(n != null);
+
+ if (!seen.ContainsKey(n))
+ {
+ SCC<Node>/*!*/ curr = new SCC<Node>();
+ FindSCCs(n, curr);
+ sccs.Add(curr);
+ }
+ }
+
+ // Clear seen
+ seen.Clear();
+
+ this.computed = true;
+ }
+
+ private Adjacency<Node>/*?*/ dfsNext = null;
+
+ private readonly IDictionary<Node/*!*/, object>/*!*/ seen = new Dictionary<Node/*!*/, object>();
+ private readonly Stack<Node/*!*/>/*!*/ postOrder = new Stack<Node/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(seen != null);
+ Contract.Invariant(cce.NonNullElements(postOrder));
+ }
+
+
+ // DFS to order nodes by post times
+ private void OrderNodes(Node node)
+ {
+ Contract.Requires(node != null);
+ seen.Add(node, null);
+
+ Contract.Assert(dfsNext != null);
+ System.Collections.IEnumerable/*!*/ nexts = dfsNext(node);
+ Contract.Assert(nexts != null);
+ foreach (Node/*!*/ n in nexts)
+ {
+ Contract.Assert(n != null);
+ if (graph.ContainsKey(n) && !seen.ContainsKey(n))
+ {
+ OrderNodes(n);
+ }
+ }
+
+ postOrder.Push(node);
+ }
+
+ // DFS to compute SCCs
+ private void FindSCCs(Node node, SCC<Node> currSCC)
+ {
+ Contract.Requires(currSCC != null);
+ Contract.Requires(node != null);
+ //modifies currSCC.*;
+ seen.Add(node, null);
+ currSCC.Add(node);
+
+ Contract.Assert(dfsNext != null);
+ System.Collections.IEnumerable/*!*/ nexts = dfsNext(node);
+ Contract.Assert(nexts != null);
+ foreach (Node/*!*/ n in nexts)
+ {
+ Contract.Assert(n != null);
+ if (graph.ContainsKey(n) && !seen.ContainsKey(n))
+ {
+ FindSCCs(n, currSCC);
+ }
+ }
+ }
+
+ [Pure]
+ public override string ToString()
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ string outStr = "";
+ int i = 0;
+
+ foreach (ICollection<Node> component in this)
+ {
+ string/*!*/ tmp = System.String.Format("\nComponent #{0} = ", i++);
+ Contract.Assert(tmp != null);
+ outStr += tmp;
+
+ bool firstInRow = true;
+
+ foreach (Node b in component)
+ {
+ string/*!*/ tmpComponent = System.String.Format("{0}{1}", firstInRow ? "" : ", ", b);
+ Contract.Assert(tmpComponent != null);
+ outStr += tmpComponent;
+ firstInRow = false;
+ }
+ }
+ return outStr;
+ }
+
+ }
+
+ public class GraphProgram {
+ static void TestGraph<T>(T/*!*/ source, params Tuple<T/*!*/, T/*!*/>[] edges) {
+ Contract.Requires(source != null);
+ Contract.Requires(Contract.ForAll(edges, pair => pair.Item1 != null && pair.Item2 != null));
+ HashSet<Tuple<T/*!*/, T/*!*/>> es = new HashSet<Tuple<T/*!*/, T/*!*/>>();
+ foreach (Tuple<T/*!*/, T/*!*/> e in edges) {
+ Contract.Assert(e.Item1 != null && e.Item2 != null);
+ es.Add(e);
+ }
+ Graph<T> g = new Graph<T>(es);
+ g.AddSource(source);
+ Console.WriteLine("G = " + g);
+ g.ComputeLoops();
+ Console.WriteLine("G's Dominator Map = " + g.DominatorMap);
+ Console.WriteLine("G's Immediate Dominator Map = " + Util.MapToString(g.ImmediateDominatorMap));
+ Console.WriteLine("G is reducible: " + (g.Reducible ? "yes" : "no"));
+ }
+
+ static void Main(string[] args)
+ //requires forall{string s in args; s != null};
+ {
+ Console.WriteLine("Spec# says hello!");
+ // This generates bad IL -- need to fix a bug in the compiler
+ //Graph<int> g = new Graph<int>(new Set<Tuple<int,int>>{ new Tuple<int,int>(1,2), new Tuple<int,int>(1,3), new Tuple<int,int>(2,3) });
+
+ Console.WriteLine("");
+ TestGraph<char>('a',
+ new Tuple<char, char>('a', 'b'),
+ new Tuple<char, char>('a', 'c'),
+ new Tuple<char, char>('b', 'c')
+ );
+
+ Console.WriteLine("");
+ TestGraph<char>('a',
+ new Tuple<char, char>('a', 'b'),
+ new Tuple<char, char>('a', 'c'),
+ new Tuple<char, char>('b', 'd'),
+ new Tuple<char, char>('c', 'e'),
+ new Tuple<char, char>('c', 'f'),
+ new Tuple<char, char>('d', 'e'),
+ new Tuple<char, char>('e', 'd'),
+ new Tuple<char, char>('e', 'f'),
+ new Tuple<char, char>('f', 'e')
+ );
+
+ Console.WriteLine("");
+ TestGraph<char>('a',
+ new Tuple<char, char>('a', 'b'),
+ new Tuple<char, char>('a', 'c'),
+ new Tuple<char, char>('b', 'c'),
+ new Tuple<char, char>('c', 'b')
+ );
+
+ Console.WriteLine("");
+ TestGraph<int>(1,
+ new Tuple<int, int>(1, 2),
+ new Tuple<int, int>(1, 3),
+ new Tuple<int, int>(2, 3)
+ );
+
+ Console.WriteLine("");
+ TestGraph<int>(1,
+ new Tuple<int, int>(1, 2),
+ new Tuple<int, int>(1, 3),
+ new Tuple<int, int>(2, 3),
+ new Tuple<int, int>(3, 2)
+ );
+
+ Console.WriteLine("");
+ TestGraph<int>(2,
+ new Tuple<int, int>(2, 3),
+ new Tuple<int, int>(2, 4),
+ new Tuple<int, int>(3, 2)
+ );
+
+ Console.WriteLine("");
+ TestGraph<char>('a',
+ new Tuple<char, char>('a', 'b'),
+ new Tuple<char, char>('a', 'c'),
+ new Tuple<char, char>('b', 'c'),
+ new Tuple<char, char>('b', 'b')
+ );
+
+
+ }
+ }
+
+}
diff --git a/Source/Graph/Graph.csproj b/Source/Graph/Graph.csproj
index b4adf6e4..7e610d46 100644
--- a/Source/Graph/Graph.csproj
+++ b/Source/Graph/Graph.csproj
@@ -1,199 +1,199 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Graph</RootNamespace>
- <AssemblyName>Graph</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for Graph.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\Graph.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="Graph.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Graph</RootNamespace>
+ <AssemblyName>BoogieGraph</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for Graph.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\Graph.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="Graph.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Source/Graph/cce.cs b/Source/Graph/cce.cs
index ef594484..1e0b12a5 100644
--- a/Source/Graph/cce.cs
+++ b/Source/Graph/cce.cs
@@ -1,193 +1,193 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
- }
- //[Pure]
- //public static bool NonNullElements(VariableSeq collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
- return iEnumerator != null;
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
- //[Pure]
- //public static bool IsValid(Microsoft.Dafny.Expression expression) {
- // return true;
- //}
- //public static List<T> toList<T>(PureCollections.Sequence s) {
- // List<T> toRet = new List<T>();
- // foreach (T t in s.elems)
- // if(t!=null)
- // toRet.Add(t);
- // return toRet;
- //}
-
- //internal static bool NonNullElements(Set set) {
- // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
- //}
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
+ }
+ //[Pure]
+ //public static bool NonNullElements(VariableSeq collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
+ return iEnumerator != null;
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+ //[Pure]
+ //public static bool IsValid(Microsoft.Dafny.Expression expression) {
+ // return true;
+ //}
+ //public static List<T> toList<T>(PureCollections.Sequence s) {
+ // List<T> toRet = new List<T>();
+ // foreach (T t in s.elems)
+ // if(t!=null)
+ // toRet.Add(t);
+ // return toRet;
+ //}
+
+ //internal static bool NonNullElements(Set set) {
+ // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
+ //}
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/Houdini/AbstractHoudini.cs b/Source/Houdini/AbstractHoudini.cs
index de3d3779..e3625dcc 100644
--- a/Source/Houdini/AbstractHoudini.cs
+++ b/Source/Houdini/AbstractHoudini.cs
@@ -1,4609 +1,4714 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Boogie;
-using Microsoft.Boogie.VCExprAST;
-using VC;
-using Outcome = VC.VCGen.Outcome;
-using Bpl = Microsoft.Boogie;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.GraphUtil;
-
-namespace Microsoft.Boogie.Houdini {
-
- public class AbsHoudini
- {
- Dictionary<string, Function> existentialFunctions;
- Program program;
- Dictionary<string, Implementation> name2Impl;
- Dictionary<string, VCExpr> impl2VC;
- Dictionary<string, List<Tuple<string, Function, NAryExpr>>> impl2FuncCalls;
- // constant -> the naryexpr that it replaced
- Dictionary<string, NAryExpr> constant2FuncCall;
-
- // function -> its abstract value
- Dictionary<string, IAbstractDomain> function2Value;
-
- // impl -> functions assumed/asserted
- Dictionary<string, HashSet<string>> impl2functionsAsserted, impl2functionsAssumed;
-
- // funtions -> impls where assumed/asserted
- Dictionary<string, HashSet<string>> function2implAssumed, function2implAsserted;
-
- // impl -> handler, collector
- Dictionary<string, Tuple<ProverInterface.ErrorHandler, AbsHoudiniCounterexampleCollector>> impl2ErrorHandler;
-
- // Essentials: VCGen, Prover
- VCGen vcgen;
- ProverInterface prover;
-
- // Stats
- TimeSpan proverTime;
- int numProverQueries;
-
- public AbsHoudini(Program program, IAbstractDomain defaultElem)
- {
- this.program = program;
- this.impl2VC = new Dictionary<string, VCExpr>();
- this.impl2FuncCalls = new Dictionary<string, List<Tuple<string, Function, NAryExpr>>>();
- this.existentialFunctions = new Dictionary<string, Function>();
- this.name2Impl = new Dictionary<string, Implementation>();
- this.impl2functionsAsserted = new Dictionary<string, HashSet<string>>();
- this.impl2functionsAssumed = new Dictionary<string, HashSet<string>>();
- this.function2implAsserted = new Dictionary<string, HashSet<string>>();
- this.function2implAssumed = new Dictionary<string, HashSet<string>>();
- this.impl2ErrorHandler = new Dictionary<string, Tuple<ProverInterface.ErrorHandler, AbsHoudiniCounterexampleCollector>>();
- this.constant2FuncCall = new Dictionary<string, NAryExpr>();
-
- // Find the existential functions
- foreach (var func in program.Functions
- .Where(f => QKeyValue.FindBoolAttribute(f.Attributes, "existential")))
- existentialFunctions.Add(func.Name, func);
-
- this.function2Value = new Dictionary<string, IAbstractDomain>();
- foreach (var func in existentialFunctions.Values)
- {
- // Find if the function wishes to use a specific abstract domain
- var domain = QKeyValue.FindStringAttribute(func.Attributes, "absdomain");
- if (domain == null)
- {
- function2Value[func.Name] = defaultElem.Bottom();
- }
- else
- {
- function2Value[func.Name] = AbstractDomainFactory.GetInstance(domain);
- }
- }
- existentialFunctions.Keys.Iter(f => function2implAssumed.Add(f, new HashSet<string>()));
- existentialFunctions.Keys.Iter(f => function2implAsserted.Add(f, new HashSet<string>()));
-
- // type check
- existentialFunctions.Values.Iter(func =>
- {
- if (func.OutParams.Count != 1 || !func.OutParams[0].TypedIdent.Type.IsBool)
- throw new AbsHoudiniInternalError(string.Format("Existential function {0} must return bool", func.Name));
- if(func.Body != null)
- throw new AbsHoudiniInternalError(string.Format("Existential function {0} should not have a body", func.Name));
- var args = new List<Type>();
- func.InParams.Iter(v => args.Add(v.TypedIdent.Type));
- string msg = "";
- if (!function2Value[func.Name].TypeCheck(args, out msg))
- throw new AbsHoudiniInternalError("TypeError: " + msg);
- });
-
- //if (CommandLineOptions.Clo.ProverKillTime > 0)
- // CommandLineOptions.Clo.ProverOptions.Add(string.Format("TIME_LIMIT={0}", CommandLineOptions.Clo.ProverKillTime));
-
- Inline();
-
- this.vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List<Checker>());
- this.prover = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, CommandLineOptions.Clo.ProverKillTime);
-
- this.proverTime = TimeSpan.Zero;
- this.numProverQueries = 0;
-
- program.Implementations
- .Where(impl => !impl.SkipVerification)
- .Iter(impl => name2Impl.Add(impl.Name, impl));
-
- // Let's do VC Gen (and also build dependencies)
- name2Impl.Values.Iter(GenVC);
- }
-
- public VCGenOutcome ComputeSummaries()
- {
- var overallOutcome = new VCGenOutcome(ProverInterface.Outcome.Valid, new List<Counterexample>());
-
- // Compute SCCs and determine a priority order for impls
- var Succ = new Dictionary<string, HashSet<string>>();
- var Pred = new Dictionary<string, HashSet<string>>();
- name2Impl.Keys.Iter(s => Succ[s] = new HashSet<string>());
- name2Impl.Keys.Iter(s => Pred[s] = new HashSet<string>());
-
- foreach(var impl in name2Impl.Keys) {
- Succ[impl] = new HashSet<string>();
- impl2functionsAsserted[impl].Iter(f =>
- function2implAssumed[f].Iter(succ =>
- {
- Succ[impl].Add(succ);
- Pred[succ].Add(impl);
- }));
- }
-
- var sccs = new StronglyConnectedComponents<string>(name2Impl.Keys,
- new Adjacency<string>(n => Pred[n]),
- new Adjacency<string>(n => Succ[n]));
- sccs.Compute();
-
- // impl -> priority
- var impl2Priority = new Dictionary<string, int>();
- int p = 0;
- foreach (var scc in sccs)
- {
- foreach (var impl in scc)
- {
- impl2Priority.Add(impl, p);
- p++;
- }
- }
-
- var worklist = new SortedSet<Tuple<int, string>>();
- name2Impl.Keys.Iter(k => worklist.Add(Tuple.Create(impl2Priority[k], k)));
-
- while (worklist.Any())
- {
- var impl = worklist.First().Item2;
- worklist.Remove(worklist.First());
-
- var gen = prover.VCExprGen;
- var terms = new List<Expr>();
- foreach (var tup in impl2FuncCalls[impl])
- {
- var controlVar = tup.Item2;
- var exprVars = tup.Item3;
- var varList = new List<Expr>();
- exprVars.Args.OfType<Expr>().Iter(v => varList.Add(v));
-
- var args = new List<Expr>();
- controlVar.InParams.Iter(v => args.Add(Expr.Ident(v)));
- Expr term = Expr.Eq(new NAryExpr(Token.NoToken, new FunctionCall(controlVar), args),
- function2Value[tup.Item1].Gamma(varList));
-
- if (controlVar.InParams.Count != 0)
- {
- term = new ForallExpr(Token.NoToken, new List<Variable>(controlVar.InParams.ToArray()),
- new Trigger(Token.NoToken, true, new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(controlVar), args) }),
- term);
- }
- terms.Add(term);
- }
- var env = Expr.BinaryTreeAnd(terms);
-
- env.Typecheck(new TypecheckingContext((IErrorSink)null));
- var envVC = prover.Context.BoogieExprTranslator.Translate(env);
-
- var vc = gen.Implies(envVC, impl2VC[impl]);
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Verifying {0}: ", impl);
- //Console.WriteLine("env: {0}", envVC);
- var envFuncs = new HashSet<string>();
- impl2FuncCalls[impl].Iter(tup => envFuncs.Add(tup.Item1));
- envFuncs.Iter(f => PrintFunction(existentialFunctions[f]));
- }
-
- var handler = impl2ErrorHandler[impl].Item1;
- var collector = impl2ErrorHandler[impl].Item2;
- collector.Reset(impl);
-
- var start = DateTime.Now;
-
- prover.Push();
- prover.Assert(gen.Not(vc), true);
- prover.FlushAxiomsToTheoremProver();
- prover.Check();
- ProverInterface.Outcome proverOutcome = prover.CheckOutcomeCore(handler);
-
- //prover.BeginCheck(impl, vc, handler);
- //ProverInterface.Outcome proverOutcome = prover.CheckOutcomeCore(handler);
-
- var inc = (DateTime.Now - start);
- proverTime += inc;
- numProverQueries++;
-
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Time taken = " + inc.TotalSeconds.ToString());
-
- if (proverOutcome == ProverInterface.Outcome.TimeOut || proverOutcome == ProverInterface.Outcome.OutOfMemory)
- {
- // pick some function; make it true and keep going
- bool changed = false;
- foreach (var f in impl2functionsAsserted[impl])
- {
- function2Value[f] = function2Value[f].MakeTop(out changed);
- if (changed) break;
- }
- if(!changed)
- return new VCGenOutcome(proverOutcome, new List<Counterexample>());
- }
-
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine(collector.numErrors > 0 ? "SAT" : "UNSAT");
-
- if (collector.numErrors > 0)
- {
- var funcsChanged = collector.funcsChanged;
- if (funcsChanged.Count == 0)
- {
- overallOutcome = new VCGenOutcome(ProverInterface.Outcome.Invalid, collector.errors);
- break;
- }
-
- // propagate dependent guys back into the worklist, including self
- var deps = new HashSet<string>();
- deps.Add(impl);
- funcsChanged.Iter(f => deps.UnionWith(function2implAssumed[f]));
-
- deps.Iter(s => worklist.Add(Tuple.Create(impl2Priority[s], s)));
- }
-
- prover.Pop();
- }
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Prover time = {0}", proverTime.TotalSeconds.ToString("F2"));
- Console.WriteLine("Number of prover queries = " + numProverQueries);
- }
-
- if (CommandLineOptions.Clo.PrintAssignment)
- {
- // Print the answer
- existentialFunctions.Values.Iter(PrintFunction);
- }
-
- return overallOutcome;
- }
-
-
- public IEnumerable<Function> GetAssignment()
- {
- var ret = new List<Function>();
- foreach (var func in existentialFunctions.Values)
- {
- var invars = new List<Expr>(func.InParams.OfType<Variable>().Select(v => Expr.Ident(v)));
- func.Body = function2Value[func.Name].Gamma(invars);
- ret.Add(func);
- }
- return ret;
- }
-
- private void PrintFunction(Function function)
- {
- var tt = new TokenTextWriter(Console.Out, /*pretty=*/ false);
- var invars = new List<Expr>(function.InParams.OfType<Variable>().Select(v => Expr.Ident(v)));
- function.Body = function2Value[function.Name].Gamma(invars);
- function.Emit(tt, 0);
- tt.Close();
- }
-
- public HashSet<string> HandleCounterExample(string impl, Counterexample error)
- {
- var funcsChanged = new HashSet<string>();
- // Find the failing assert -- need to do a join there
- // return the set of functions whose definition has changed
- var cex = ExtractState(impl, error);
- foreach (var tup in cex)
- {
- function2Value[tup.Item1] = function2Value[tup.Item1].Join(tup.Item2);
- funcsChanged.Add(tup.Item1);
- }
- return funcsChanged;
- }
-
- private List<Tuple<string, List<Model.Element>>> ExtractState(string impl, Counterexample error)
- {
- var lastBlock = error.Trace.Last() as Block;
- AssertCmd failingAssert = null;
-
- CallCounterexample callCounterexample = error as CallCounterexample;
- if (callCounterexample != null)
- {
- Procedure failingProcedure = callCounterexample.FailingCall.Proc;
- Requires failingRequires = callCounterexample.FailingRequires;
- failingAssert = lastBlock.Cmds.OfType<AssertRequiresCmd>().FirstOrDefault(ac => ac.Requires == failingRequires);
- }
- ReturnCounterexample returnCounterexample = error as ReturnCounterexample;
- if (returnCounterexample != null)
- {
- Ensures failingEnsures = returnCounterexample.FailingEnsures;
- failingAssert = lastBlock.Cmds.OfType<AssertEnsuresCmd>().FirstOrDefault(ac => ac.Ensures == failingEnsures);
- }
- AssertCounterexample assertCounterexample = error as AssertCounterexample;
- if (assertCounterexample != null)
- {
- failingAssert = lastBlock.Cmds.OfType<AssertCmd>().FirstOrDefault(ac => ac == assertCounterexample.FailingAssert);
- }
-
- Debug.Assert(failingAssert != null);
- return ExtractState(impl, failingAssert.Expr, error.Model);
- }
-
- private static int existentialConstCounter = 0;
-
- private List<Tuple<string, List<Model.Element>>> ExtractState(string impl, Expr expr, Model model)
- {
- var funcsUsed = FunctionCollector.Collect(expr);
-
- var ret = new List<Tuple<string, List<Model.Element>>>();
-
- foreach (var tup in funcsUsed.Where(t => t.Item2 == null))
- {
- var constant = tup.Item1;
- if (!constant2FuncCall.ContainsKey(constant.Name))
- continue;
-
- var func = constant2FuncCall[constant.Name];
- var funcName = (func.Fun as FunctionCall).FunctionName;
- var vals = new List<Model.Element>();
- prover.Context.BoogieExprTranslator.Translate(func.Args).Iter(ve => vals.Add(getValue(ve, model)));
- ret.Add(Tuple.Create(funcName, vals));
- }
-
- foreach (var tup in funcsUsed.Where(t => t.Item2 != null))
- {
- var constant = tup.Item1;
- var boundExpr = tup.Item2;
-
- if (!constant2FuncCall.ContainsKey(constant.Name))
- continue;
-
- // There are some bound variables (because the existential function was inside an \exists).
- // We must find an assignment for bound varibles
-
- // First, peice apart the existential functions
- var cd = new Duplicator();
- var tup2 = ExistentialExprModelMassage.Massage(cd.VisitExpr(boundExpr.Body));
- var be = tup2.Item1;
- Expr env = Expr.True;
- foreach (var ahFunc in tup2.Item2)
- {
- var tup3 = impl2FuncCalls[impl].First(t => t.Item2.Name == ahFunc.Name);
- var varList = new List<Expr>();
- tup3.Item3.Args.OfType<Expr>().Iter(v => varList.Add(v));
-
- env = Expr.And(env, function2Value[tup3.Item1].Gamma(varList));
- }
- be = Expr.And(be, Expr.Not(env));
-
- // map formals to constants
- var formalToConstant = new Dictionary<string, Constant>();
- foreach (var f in boundExpr.Dummies.OfType<Variable>())
- formalToConstant.Add(f.Name, new Constant(Token.NoToken, new TypedIdent(Token.NoToken, f.Name + "@subst@" + (existentialConstCounter++), f.TypedIdent.Type), false));
- be = Substituter.Apply(new Substitution(v => formalToConstant.ContainsKey(v.Name) ? Expr.Ident(formalToConstant[v.Name]) : Expr.Ident(v)), be);
- formalToConstant.Values.Iter(v => prover.Context.DeclareConstant(v, false, null));
-
- var reporter = new AbstractHoudiniErrorReporter();
- var ve = prover.Context.BoogieExprTranslator.Translate(be);
- prover.Assert(ve, true);
- prover.Check();
- var proverOutcome = prover.CheckOutcomeCore(reporter);
- if (proverOutcome != ProverInterface.Outcome.Invalid)
- continue;
- model = reporter.model;
-
- var func = constant2FuncCall[constant.Name];
- var funcName = (func.Fun as FunctionCall).FunctionName;
- var vals = new List<Model.Element>();
- foreach (var funcArg in func.Args.OfType<Expr>())
- {
- var arg = Substituter.Apply(new Substitution(v => formalToConstant.ContainsKey(v.Name) ? Expr.Ident(formalToConstant[v.Name]) : Expr.Ident(v)), funcArg);
- vals.Add(getValue(prover.Context.BoogieExprTranslator.Translate(arg), model));
- }
- ret.Add(Tuple.Create(funcName, vals));
-
- }
-
- return ret;
- }
-
- private Model.Element getValue(VCExpr arg, Model model)
- {
-
-
- if (arg is VCExprLiteral)
- {
- //return model.GetElement(arg.ToString());
- return model.MkElement(arg.ToString());
- }
-
- else if (arg is VCExprVar)
- {
- var el = model.TryGetFunc(prover.Context.Lookup(arg as VCExprVar));
- if (el != null)
- {
- Debug.Assert(el.Arity == 0 && el.AppCount == 1);
- return el.Apps.First().Result;
- }
- else
- {
- // Variable not defined; assign arbitrary value
- if (arg.Type.IsBool)
- return model.MkElement("false");
- else if (arg.Type.IsInt)
- return model.MkIntElement(0);
- else
- return null;
- }
- }
- else if (arg is VCExprNAry && (arg as VCExprNAry).Op is VCExprBvOp)
- {
- // support for BV constants
- var bvc = (arg as VCExprNAry)[0] as VCExprLiteral;
- if (bvc != null)
- {
- var ret = model.TryMkElement(bvc.ToString() + arg.Type.ToString());
- if (ret != null && (ret is Model.BitVector)) return ret;
- }
- }
-
- var val = prover.Evaluate(arg);
- if (val is int || val is bool || val is Microsoft.Basetypes.BigNum)
- {
- return model.MkElement(val.ToString());
- }
- else
- {
- Debug.Assert(false);
- }
- return null;
- }
-
- // Remove functions AbsHoudiniConstant from the expressions and substitute them with "true"
- class ExistentialExprModelMassage : StandardVisitor
- {
- List<Function> ahFuncs;
-
- public ExistentialExprModelMassage()
- {
- ahFuncs = new List<Function>();
- }
-
- public static Tuple<Expr, List<Function>> Massage(Expr expr)
- {
- var ee = new ExistentialExprModelMassage();
- expr = ee.VisitExpr(expr);
- return Tuple.Create(expr, ee.ahFuncs);
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- if (node.Fun is FunctionCall && (node.Fun as FunctionCall).FunctionName.StartsWith("AbsHoudiniConstant"))
- {
- ahFuncs.Add((node.Fun as FunctionCall).Func);
- return Expr.True;
- }
-
- return base.VisitNAryExpr(node);
- }
- }
-
- class FunctionCollector : ReadOnlyVisitor
- {
- public List<Tuple<Function, ExistsExpr>> functionsUsed;
- ExistsExpr existentialExpr;
-
- public FunctionCollector()
- {
- functionsUsed = new List<Tuple<Function, ExistsExpr>>();
- existentialExpr = null;
- }
-
- public static List<Tuple<Function, ExistsExpr>> Collect(Expr expr)
- {
- var fv = new FunctionCollector();
- fv.VisitExpr(expr);
- return fv.functionsUsed;
- }
-
- public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
- {
- var oldE = existentialExpr;
-
- if (node is ExistsExpr)
- existentialExpr = (node as ExistsExpr);
-
- node = base.VisitQuantifierExpr(node);
-
- existentialExpr = oldE;
- return node;
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- if (node.Fun is FunctionCall)
- {
- var collector = new VariableCollector();
- collector.Visit(node);
-
- if(existentialExpr != null && existentialExpr.Dummies.Intersect(collector.usedVars).Any())
- functionsUsed.Add(Tuple.Create((node.Fun as FunctionCall).Func, existentialExpr));
- else
- functionsUsed.Add(Tuple.Create<Function, ExistsExpr>((node.Fun as FunctionCall).Func, null));
- }
-
- return base.VisitNAryExpr(node);
- }
- }
-
- class AbsHoudiniCounterexampleCollector : VerifierCallback
- {
- public HashSet<string> funcsChanged;
- public string currImpl;
- public int numErrors;
- public List<Counterexample> errors;
-
- AbsHoudini container;
-
- public AbsHoudiniCounterexampleCollector(AbsHoudini container)
- {
- this.container = container;
- Reset(null);
- }
-
- public void Reset(string impl)
- {
- funcsChanged = new HashSet<string>();
- currImpl = impl;
- numErrors = 0;
- errors = new List<Counterexample>();
- }
-
- public override void OnCounterexample(Counterexample ce, string reason)
- {
- numErrors++;
- errors.Add(ce);
-
- funcsChanged.UnionWith(
- container.HandleCounterExample(currImpl, ce));
- }
- }
-
- private void GenVC(Implementation impl)
- {
- ModelViewInfo mvInfo;
- Dictionary<int, Absy> label2absy;
- var collector = new AbsHoudiniCounterexampleCollector(this);
- collector.OnProgress("HdnVCGen", 0, 0, 0.0);
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Generating VC of {0}", impl.Name);
- }
-
- vcgen.ConvertCFG2DAG(impl);
- var gotoCmdOrigins = vcgen.PassifyImpl(impl, out mvInfo);
-
- // Inline functions
- (new InlineFunctionCalls()).VisitBlockList(impl.Blocks);
-
- ExtractQuantifiedExprs(impl);
- StripOutermostForall(impl);
-
- //CommandLineOptions.Clo.PrintInstrumented = true;
- //var tt = new TokenTextWriter(Console.Out);
- //impl.Emit(tt, 0);
- //tt.Close();
-
- // Intercept the FunctionCalls of the existential functions, and replace them with Boolean constants
- var existentialFunctionNames = new HashSet<string>(existentialFunctions.Keys);
- var fv = new ReplaceFunctionCalls(existentialFunctionNames);
- fv.VisitBlockList(impl.Blocks);
-
- impl2functionsAsserted.Add(impl.Name, fv.functionsAsserted);
- impl2functionsAssumed.Add(impl.Name, fv.functionsAssumed);
-
- fv.functionsAssumed.Iter(f => function2implAssumed[f].Add(impl.Name));
- fv.functionsAsserted.Iter(f => function2implAsserted[f].Add(impl.Name));
-
- impl2FuncCalls.Add(impl.Name, fv.functionsUsed);
- fv.functionsUsed.Iter(tup => constant2FuncCall.Add(tup.Item2.Name, tup.Item3));
-
- var gen = prover.VCExprGen;
- VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : gen.Integer(Microsoft.Basetypes.BigNum.ZERO);
-
- var vcexpr = vcgen.GenerateVC(impl, controlFlowVariableExpr, out label2absy, prover.Context);
- if (!CommandLineOptions.Clo.UseLabels)
- {
- VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(gen.Integer(Microsoft.Basetypes.BigNum.ZERO), gen.Integer(Microsoft.Basetypes.BigNum.ZERO));
- VCExpr eqExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(Microsoft.Basetypes.BigNum.FromInt(impl.Blocks[0].UniqueId)));
- vcexpr = gen.Implies(eqExpr, vcexpr);
- }
-
- ProverInterface.ErrorHandler handler = null;
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Local)
- handler = new VCGen.ErrorReporterLocal(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, prover.Context, program);
- else
- handler = new VCGen.ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, prover.Context, program);
-
- impl2ErrorHandler.Add(impl.Name, Tuple.Create(handler, collector));
-
- //Console.WriteLine("VC of {0}: {1}", impl.Name, vcexpr);
-
- // Create a macro so that the VC can sit with the theorem prover
- Macro macro = new Macro(Token.NoToken, impl.Name + "Macro", new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false));
- prover.DefineMacro(macro, vcexpr);
-
- // Store VC
- impl2VC.Add(impl.Name, gen.Function(macro));
-
- // HACK: push the definitions of constants involved in function calls
- // It is possible that some constants only appear in function calls. Thus, when
- // they are replaced by Boolean constants, it is possible that (get-value) will
- // fail if the expression involves such constants. All we need to do is make sure
- // these constants are declared, because otherwise, semantically we are doing
- // the right thing.
- foreach (var tup in fv.functionsUsed)
- {
- // Ignore ones with bound varibles
- if (tup.Item2.InParams.Count > 0) continue;
- var tt = prover.Context.BoogieExprTranslator.Translate(tup.Item3);
- tt = prover.VCExprGen.Or(VCExpressionGenerator.True, tt);
- prover.Assert(tt, true);
- }
- }
-
- // convert "foo(... forall e ...) to:
- // (p iff forall e) ==> foo(... p ...)
- // where p is a fresh boolean variable and foo is an existential constant
- private void ExtractQuantifiedExprs(Implementation impl)
- {
- var funcs = new HashSet<string>(existentialFunctions.Keys);
- foreach (var blk in impl.Blocks)
- {
- foreach (var acmd in blk.Cmds.OfType<AssertCmd>())
- {
- var ret = ExtractQuantifiers.Extract(acmd.Expr, funcs);
- acmd.Expr = ret.Item1;
- impl.LocVars.AddRange(ret.Item2);
- }
- }
- }
-
- // convert "assert e1 && forall x: e2" to
- // assert e1 && e2[x <- x@bound]
- private void StripOutermostForall(Implementation impl)
- {
- var funcs = new HashSet<string>(existentialFunctions.Keys);
- foreach (var blk in impl.Blocks)
- {
- foreach (var acmd in blk.Cmds.OfType<AssertCmd>())
- {
- var ret = StripQuantifiers.Run(acmd.Expr, funcs);
- acmd.Expr = ret.Item1;
- impl.LocVars.AddRange(ret.Item2);
- }
- }
- }
-
- private void Inline()
- {
- if (CommandLineOptions.Clo.InlineDepth < 0)
- return;
-
- var callGraph = BuildCallGraph();
-
- foreach (Implementation impl in callGraph.Nodes)
- {
- InlineEnsuresVisitor inlineEnsuresVisitor = new InlineEnsuresVisitor();
- inlineEnsuresVisitor.Visit(impl);
- }
-
- foreach (Implementation impl in callGraph.Nodes)
- {
- impl.OriginalBlocks = impl.Blocks;
- impl.OriginalLocVars = impl.LocVars;
- }
- foreach (Implementation impl in callGraph.Nodes)
- {
- CommandLineOptions.Inlining savedOption = CommandLineOptions.Clo.ProcedureInlining;
- CommandLineOptions.Clo.ProcedureInlining = CommandLineOptions.Inlining.Spec;
- Inliner.ProcessImplementationForHoudini(program, impl);
- CommandLineOptions.Clo.ProcedureInlining = savedOption;
- }
- foreach (Implementation impl in callGraph.Nodes)
- {
- impl.OriginalBlocks = null;
- impl.OriginalLocVars = null;
- }
-
- Graph<Implementation> oldCallGraph = callGraph;
- callGraph = new Graph<Implementation>();
- foreach (Implementation impl in oldCallGraph.Nodes)
- {
- callGraph.AddSource(impl);
- }
- foreach (Tuple<Implementation, Implementation> edge in oldCallGraph.Edges)
- {
- callGraph.AddEdge(edge.Item1, edge.Item2);
- }
- int count = CommandLineOptions.Clo.InlineDepth;
- while (count > 0)
- {
- foreach (Implementation impl in oldCallGraph.Nodes)
- {
- List<Implementation> newNodes = new List<Implementation>();
- foreach (Implementation succ in callGraph.Successors(impl))
- {
- newNodes.AddRange(oldCallGraph.Successors(succ));
- }
- foreach (Implementation newNode in newNodes)
- {
- callGraph.AddEdge(impl, newNode);
- }
- }
- count--;
- }
- }
-
- private Graph<Implementation> BuildCallGraph()
- {
- Graph<Implementation> callGraph = new Graph<Implementation>();
- Dictionary<Procedure, HashSet<Implementation>> procToImpls = new Dictionary<Procedure, HashSet<Implementation>>();
- foreach (var proc in program.Procedures)
- {
- procToImpls[proc] = new HashSet<Implementation>();
- }
- foreach (var impl in program.Implementations)
- {
- if (impl.SkipVerification) continue;
- callGraph.AddSource(impl);
- procToImpls[impl.Proc].Add(impl);
- }
- foreach (var impl in program.Implementations)
- {
- if (impl.SkipVerification) continue;
- foreach (Block b in impl.Blocks)
- {
- foreach (Cmd c in b.Cmds)
- {
- CallCmd cc = c as CallCmd;
- if (cc == null) continue;
- foreach (Implementation callee in procToImpls[cc.Proc])
- {
- callGraph.AddEdge(impl, callee);
- }
- }
- }
- }
- return callGraph;
- }
-
- }
-
- class InlineFunctionCalls : StandardVisitor
- {
- public Stack<string> inlinedFunctionsStack;
-
- public InlineFunctionCalls()
- {
- inlinedFunctionsStack = new Stack<string>();
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- var fc = node.Fun as FunctionCall;
- if (fc != null && fc.Func.Body != null && QKeyValue.FindBoolAttribute(fc.Func.Attributes, "inline"))
- {
- if (inlinedFunctionsStack.Contains(fc.Func.Name))
- {
- // recursion detected
- throw new AbsHoudiniInternalError("Recursion detected in function declarations");
- }
-
- // create a substitution
- var subst = new Dictionary<Variable, Expr>();
- for (int i = 0; i < node.Args.Count; i++)
- {
- subst.Add(fc.Func.InParams[i], node.Args[i]);
- }
-
- var e =
- Substituter.Apply(new Substitution(v => subst.ContainsKey(v) ? subst[v] : Expr.Ident(v)), fc.Func.Body);
-
- inlinedFunctionsStack.Push(fc.Func.Name);
-
- e = base.VisitExpr(e);
-
- inlinedFunctionsStack.Pop();
-
- return e;
- }
- return base.VisitNAryExpr(node);
- }
- }
-
- class ReplaceFunctionCalls : StandardVisitor
- {
- public List<Tuple<string, Function, NAryExpr>> functionsUsed;
- public List<Function> boolConstants;
-
- public HashSet<string> functionsAssumed;
- public HashSet<string> functionsAsserted;
- HashSet<string> functionsToReplace;
-
- private bool inAssume;
- private bool inAssert;
- private bool inFunction;
- private List<Dictionary<string, Variable>> boundVars;
- private static int IdCounter = 0;
-
- public ReplaceFunctionCalls(HashSet<string> functionsToReplace)
- {
- this.functionsUsed = new List<Tuple<string, Function, NAryExpr>>();
- this.functionsToReplace = functionsToReplace;
- this.functionsAsserted = new HashSet<string>();
- this.functionsAssumed = new HashSet<string>();
- this.boolConstants = new List<Function>();
- this.boundVars = new List<Dictionary<string, Variable>>();
-
- inAssume = false;
- inAssert = false;
- inFunction = false;
- }
-
- public override Cmd VisitAssertCmd(AssertCmd node)
- {
- inAssert = true;
- var ret = base.VisitAssertCmd(node);
- inAssert = false;
- return ret;
- }
-
- public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node)
- {
- return this.VisitAssertCmd(node);
- }
-
- public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node)
- {
- return this.VisitAssertCmd(node);
- }
-
- public override Cmd VisitAssumeCmd(AssumeCmd node)
- {
- inAssume = true;
- var ret = base.VisitAssumeCmd(node);
- inAssume = false;
- return ret;
- }
-
- public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
- {
- // gather the quantified variables
- var dummies = new Dictionary<string, Variable>();
- node.Dummies.Iter(v => dummies.Add(v.Name, v));
-
- boundVars.Add(dummies);
-
- node = base.VisitQuantifierExpr(node);
-
- boundVars.RemoveAt(boundVars.Count - 1);
-
- return node;
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- var inF = inFunction;
-
- if (node.Fun is FunctionCall && functionsToReplace.Contains((node.Fun as FunctionCall).FunctionName))
- {
- found((node.Fun as FunctionCall).FunctionName);
- inFunction = true;
-
- // collect all the variables used by this function
- var collector = new VariableCollector();
- collector.VisitExpr(node);
-
- // Find the outermost bound variables
- var bound = new List<Variable>();
- if(boundVars.Count > 0)
- bound.AddRange(collector.usedVars.Intersect(boundVars[0].Values));
-
- // create boolean function to replace this guy
- var constant = new Function(Token.NoToken, "AbsHoudiniConstant" + IdCounter, bound,
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "r", Microsoft.Boogie.Type.Bool), false));
- IdCounter++;
-
- functionsUsed.Add(Tuple.Create((node.Fun as FunctionCall).FunctionName, constant, node));
- boolConstants.Add(constant);
-
- var args = new List<Expr>();
- bound.OfType<Variable>().Select(v => Expr.Ident(v)).Iter(v => args.Add(v));
- return new NAryExpr(Token.NoToken, new FunctionCall(constant), args);
- }
- var ret = base.VisitNAryExpr(node);
-
- inFunction = inF;
-
- return ret;
- }
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- if (inFunction)
- {
- // Inside functions we can only refer to the outermost bound variables
- for (int i = boundVars.Count - 1; i >= 1; i--)
- {
- if (boundVars[i].ContainsKey(node.Name))
- throw new AbsHoudiniInternalError("Existential functions can only refer to outermost bound variables in an expression");
- }
- }
-
- return base.VisitIdentifierExpr(node);
- }
-
- private void found(string func)
- {
- if (inAssume) functionsAssumed.Add(func);
- if (inAssert) functionsAsserted.Add(func);
- }
-
- }
-
- // convert "foo(... forall e ...) to:
- // (p iff forall e) ==> foo(... p ...)
- // where p is a fresh boolean variable and foo is an existential constant
- class ExtractQuantifiers : StandardVisitor
- {
- static int freshConstCounter = 0;
- HashSet<string> existentialFunctions;
- bool insideExistential;
- Dictionary<Constant, Expr> newConstants;
-
- private ExtractQuantifiers(HashSet<string> existentialFunctions)
- {
- this.existentialFunctions = existentialFunctions;
- insideExistential = false;
- newConstants = new Dictionary<Constant, Expr>();
- }
-
- public static Tuple<Expr, IEnumerable<Constant>> Extract(Expr expr, HashSet<string> existentialFunctions)
- {
- var eq = new ExtractQuantifiers(existentialFunctions);
- expr = eq.VisitExpr(expr);
- Expr ret = Expr.True;
- foreach (var tup in eq.newConstants)
- {
- ret = Expr.And(ret, Expr.Eq(Expr.Ident(tup.Key), tup.Value));
- }
- ret = Expr.Imp(ret, expr);
- return Tuple.Create(ret, eq.newConstants.Keys.AsEnumerable());
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- var oldIE = insideExistential;
-
- if (node.Fun is FunctionCall && existentialFunctions.Contains((node.Fun as FunctionCall).FunctionName))
- insideExistential = true;
-
- var ret = base.VisitNAryExpr(node);
-
- insideExistential = oldIE;
- return ret;
- }
-
- public override Expr VisitExpr(Expr node)
- {
- if (node is QuantifierExpr)
- {
- return MyVisitQuantifierExpr(node as QuantifierExpr);
- }
- return base.VisitExpr(node);
- }
-
- public Expr MyVisitQuantifierExpr(QuantifierExpr node)
- {
- node = base.VisitQuantifierExpr(node);
-
- if (insideExistential)
- {
- var constant = new Constant(Token.NoToken, new TypedIdent(Token.NoToken,
- "quant@const" + freshConstCounter, Microsoft.Boogie.Type.Bool), false);
- freshConstCounter++;
-
- newConstants.Add(constant, node);
-
- return Expr.Ident(constant);
- }
-
- return node;
- }
- }
-
- // convert "assert e1 && forall x: e2" to
- // assert e1 && e2[x <- x@bound]
- // only if e2 has an existential function
- class StripQuantifiers : StandardVisitor
- {
- static int boundVarCounter = 0;
-
- // 0 -> None, 1 -> Forall, 2 -> Exists, 3 -> Nested
- int insideQuantifier;
-
- bool searchExistentialFunction;
- bool foundExistentialFunction;
-
- HashSet<string> existentialFunctions;
- Dictionary<string, LocalVariable> subst;
- List<LocalVariable> LocalsToAdd;
-
- private StripQuantifiers(HashSet<string> existentialFunctions)
- {
- this.existentialFunctions = existentialFunctions;
- insideQuantifier = 0;
- searchExistentialFunction = false;
- foundExistentialFunction = false;
- LocalsToAdd = new List<LocalVariable>();
- subst = null;
- }
-
- public static Tuple<Expr,List<LocalVariable>> Run(Expr expr, HashSet<string> existentialFunctions)
- {
- // check for type errors first
- var sq = new StripQuantifiers(existentialFunctions);
- var ret = sq.VisitExpr(expr);
-
- return Tuple.Create(ret, sq.LocalsToAdd);
- }
-
- public override Expr VisitExpr(Expr node)
- {
- if (node is QuantifierExpr)
- {
- return MyVisitQuantifierExpr(node as QuantifierExpr);
- }
-
- return base.VisitExpr(node);
- }
-
- private Expr MyVisitQuantifierExpr(QuantifierExpr node)
- {
- var oldIQ = insideQuantifier;
- Expr ret = node;
-
- // update "insideQuantifier"
- if (insideQuantifier == 0)
- {
- if (node is ForallExpr) insideQuantifier = 1;
- else insideQuantifier = 2;
- }
- else if (insideQuantifier > 0)
- {
- insideQuantifier = 3;
- }
-
- // Going inside Forall?
- if (insideQuantifier == 1)
- {
- // see if there is any existential function inside
- searchExistentialFunction = true;
- foundExistentialFunction = false;
- base.VisitQuantifierExpr(node);
-
- if (foundExistentialFunction)
- {
- // create substitution to apply
- subst = new Dictionary<string, LocalVariable>();
- foreach (var bv in node.Dummies.OfType<Variable>())
- {
- var lv = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken,
- bv + "@bound" + boundVarCounter, bv.TypedIdent.Type));
- boundVarCounter++;
- subst.Add(bv.Name, lv);
- LocalsToAdd.Add(lv);
- }
-
- // apply the subst
- var body = base.VisitExpr(node.Body);
- ret = body;
-
- subst = null;
- }
- else
- {
- ret = base.VisitQuantifierExpr(node);
- }
-
- searchExistentialFunction = false;
- foundExistentialFunction = false;
- }
- else
- {
- ret = base.VisitQuantifierExpr(node);
- }
-
- insideQuantifier = oldIQ;
- return ret;
- }
-
- public override Expr VisitNAryExpr(NAryExpr node)
- {
- if (node.Fun is FunctionCall && existentialFunctions.Contains((node.Fun as FunctionCall).FunctionName))
- {
- if (insideQuantifier == 3)
- throw new AbsHoudiniInternalError("Existential function found inside exists, or nested foralls");
-
- if (searchExistentialFunction)
- foundExistentialFunction = true;
-
- }
-
- return base.VisitNAryExpr(node);
- }
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- if (subst != null && subst.ContainsKey(node.Name))
- return Expr.Ident(subst[node.Name]);
- return base.VisitIdentifierExpr(node);
- }
-
- }
-
- public class Intervals : IAbstractDomain
- {
- // [lower, upper]
- int upper;
- int lower;
- // or: \bot
- bool isBottom;
- // number of times join has been performed
- int nJoin;
- // number of times before we widen
- readonly static int maxJoin = 5;
-
- public Intervals()
- {
- this.upper = 0;
- this.lower = 0;
- this.nJoin = 0;
- this.isBottom = true;
- }
-
- private Intervals(int lower, int upper, int nJoin)
- {
- this.upper = upper;
- this.lower = lower;
- this.nJoin = nJoin;
- }
-
- public IAbstractDomain Bottom()
- {
- return new Intervals();
- }
-
- public IAbstractDomain MakeTop(out bool changed)
- {
- if (lower == Int32.MinValue && upper == Int32.MaxValue)
- {
- changed = false;
- return this;
- }
- changed = true;
- return new Intervals(Int32.MinValue, Int32.MaxValue, 0);
- }
-
- public IAbstractDomain Join(List<Model.Element> states)
- {
- Debug.Assert(states.Count == 1);
- var state = states[0] as Model.Integer;
- if (state == null)
- throw new AbsHoudiniInternalError("Incorrect type, expected int");
- var intval = state.AsInt();
-
- if (isBottom)
- {
- return new Intervals(intval, intval, 1);
- }
-
- if(intval >= lower && intval <= upper)
- return this;
-
- if (nJoin > maxJoin)
- {
- // widen
- if (intval > upper)
- return new Intervals(lower, Int32.MaxValue, 1);
- if(intval < lower)
- return new Intervals(Int32.MinValue, upper, 1);
-
- Debug.Assert(false);
- }
-
- if (intval > upper)
- return new Intervals(lower, intval, nJoin + 1);
- if (intval < lower)
- return new Intervals(intval, upper, nJoin + 1);
-
- Debug.Assert(false);
- return null;
- }
-
- public Expr Gamma(List<Expr> vars)
- {
- Debug.Assert(vars.Count == 1);
- var v = vars[0];
- if (isBottom) return Expr.False;
- Expr ret = Expr.True;
- if (lower != Int32.MinValue)
- ret = Expr.And(ret, Expr.Ge(v, Expr.Literal(lower)));
- if (upper != Int32.MaxValue)
- ret = Expr.And(ret, Expr.Le(v, Expr.Literal(upper)));
- return ret;
- }
-
- public bool TypeCheck(List<Type> argTypes, out string msg)
- {
- msg = "";
- if (argTypes.Count != 1)
- {
- msg = "Illegal number of arguments";
- return false;
- }
- if (!argTypes[0].IsInt)
- {
- msg = "Illegal type, expecting int";
- return false;
- }
- return true;
- }
- }
-
- public class PredicateAbsElem : IAbstractDomain
- {
- public static class ExprExt
- {
- public static Expr AndSimp(Expr e1, Expr e2)
- {
- if (e1 == Expr.True) return e2;
- if (e2 == Expr.True) return e1;
- if (e1 == Expr.False || e2 == Expr.False) return Expr.False;
- return Expr.And(e1, e2);
- }
-
- public static Expr OrSimp(Expr e1, Expr e2)
- {
- if (e1 == Expr.False) return e2;
- if (e2 == Expr.False) return e1;
- if (e1 == Expr.True || e2 == Expr.True) return Expr.True;
- return Expr.Or(e1, e2);
- }
- }
-
- class Disjunct
- {
- public static int DisjunctBound = 3;
- HashSet<int> pos;
- HashSet<int> neg;
- bool isTrue;
-
- public Disjunct()
- {
- isTrue = true;
- pos = new HashSet<int>();
- neg = new HashSet<int>();
- }
-
- public Disjunct(IEnumerable<int> pos, IEnumerable<int> neg)
- {
- this.isTrue = false;
- this.pos = new HashSet<int>(pos);
- this.neg = new HashSet<int>(neg);
- if (this.pos.Overlaps(this.neg))
- {
- this.isTrue = true;
- this.pos = new HashSet<int>();
- this.neg = new HashSet<int>();
- }
- if (this.pos.Count + this.neg.Count > DisjunctBound)
- {
- // Set to true
- this.isTrue = true;
- this.pos = new HashSet<int>();
- this.neg = new HashSet<int>();
- }
-
- }
-
- public Disjunct OR(Disjunct that)
- {
- if (isTrue)
- return this;
- if (that.isTrue)
- return that;
-
- return new Disjunct(this.pos.Concat(that.pos), this.neg.Concat(that.neg));
- }
-
- public bool Implies(Disjunct that)
- {
- if (isTrue) return that.isTrue;
- if (that.isTrue) return true;
-
- return pos.IsSubsetOf(that.pos) && neg.IsSubsetOf(that.neg);
- }
-
- public Expr Gamma(List<Expr> vars)
- {
- if (isTrue) return Expr.True;
- Expr ret = Expr.False;
- pos.Iter(i => ret = ExprExt.OrSimp(ret, vars[i]));
- neg.Iter(i => ret = ExprExt.OrSimp(ret, Expr.Not(vars[i])));
- return ret;
- }
- }
-
- // Conjunction of Disjuncts
- List<Disjunct> conjuncts;
- bool isFalse;
-
- public PredicateAbsElem()
- {
- this.conjuncts = new List<Disjunct>();
- this.isFalse = true;
- }
-
- public IAbstractDomain Bottom()
- {
- return new PredicateAbsElem();
- }
-
- public IAbstractDomain MakeTop(out bool changed)
- {
- if (conjuncts.Count == 0)
- {
- changed = false;
- return this;
- }
- changed = true;
- var ret = new PredicateAbsElem();
- ret.isFalse = false;
- return ret;
- }
-
- public IAbstractDomain Join(List<Model.Element> state)
- {
- if (state.Any(me => !(me is Model.Boolean)))
- throw new AbsHoudiniInternalError("Predicate Abstraction requires that each argument be of type bool");
-
- // quick return if this == true
- if (!this.isFalse && conjuncts.Count == 0)
- return this;
-
- var ret = new PredicateAbsElem();
- ret.isFalse = false;
-
- for (int i = 0; i < state.Count; i++)
- {
- var b = (state[i] as Model.Boolean).Value;
- Disjunct d = null;
- if (b) d = new Disjunct(new int[] { i }, new int[] { });
- else d = new Disjunct(new int[] { }, new int[] { i });
-
- if (isFalse)
- ret.AddDisjunct(d);
- else
- {
- conjuncts.Iter(c => ret.AddDisjunct(c.OR(d)));
- }
- }
-
- return ret;
-
- }
-
- public Expr Gamma(List<Expr> vars)
- {
- if (isFalse) return Expr.False;
- Expr ret = Expr.True;
-
- foreach (var c in conjuncts)
- {
- ret = ExprExt.AndSimp(ret, c.Gamma(vars));
- }
-
- return ret;
- }
-
- public bool TypeCheck(List<Type> argTypes, out string msg)
- {
- msg = "";
- if (argTypes.Any(t => !t.IsBool))
- {
- msg = "Illegal type, expecting bool";
- return false;
- }
- return true;
- }
-
- private void AddDisjunct(Disjunct d)
- {
- if (conjuncts.Any(c => c.Implies(d)))
- return;
-
- conjuncts.RemoveAll(c => d.Implies(c));
- conjuncts.Add(d);
- }
- }
-
- // [false -- (x == true) -- true]
- public class HoudiniConst : IAbstractDomain
- {
- bool isBottom;
- bool isTop;
-
- private HoudiniConst(bool isTop, bool isBottom)
- {
- this.isBottom = isBottom;
- this.isTop = isTop;
- Debug.Assert(!(isTop && isBottom));
- }
-
- public static HoudiniConst GetExtObj()
- {
- return new HoudiniConst(false, false);
- }
-
- public static HoudiniConst GetTop()
- {
- return new HoudiniConst(true, false);
- }
-
- public static HoudiniConst GetBottom()
- {
- return new HoudiniConst(false, true);
- }
-
- public IAbstractDomain Bottom()
- {
- return GetBottom();
- }
-
- public IAbstractDomain MakeTop(out bool changed)
- {
- changed = false;
- if (isTop) return this;
- changed = true;
- return GetTop();
- }
-
- public IAbstractDomain Join(List<Model.Element> states)
- {
- Debug.Assert(states.Count == 1);
- var state = states[0];
-
- if (isTop) return this;
-
- if (state is Model.Boolean)
- {
- if ((state as Model.Boolean).Value)
- return GetExtObj();
- }
-
- return GetTop();
- }
-
- public Expr Gamma(List<Expr> vars)
- {
- Debug.Assert(vars.Count == 1);
- var v = vars[0];
- if (isBottom) return Expr.False;
- if (isTop) return Expr.True;
- return v;
- }
-
- public bool TypeCheck(List<Type> argTypes, out string msg)
- {
- msg = "";
- if (argTypes.Count != 1)
- {
- msg = "Illegal number of arguments, expecting 1";
- return false;
- }
- if (!argTypes[0].IsBool)
- {
- msg = "Illegal type, expecting bool";
- return false;
- }
- return true;
- }
- }
-
- // foo(x) = x < 2^j for some j <= 16
- public class PowDomain : IAbstractDomain
- {
- enum Val { FALSE, NEITHER, TRUE };
- Val tlevel;
- bool isBottom { get { return tlevel == Val.FALSE; } }
- bool isTop { get { return tlevel == Val.TRUE; } }
-
- readonly int Max = 16;
-
- int upper; // <= Max
-
- private PowDomain(Val tlevel) :
- this(tlevel, 0) { }
-
- private PowDomain(Val tlevel, int upper)
- {
- this.tlevel = tlevel;
- this.upper = upper;
- }
-
- public static IAbstractDomain GetBottom()
- {
- return new PowDomain(Val.FALSE) as IAbstractDomain;
- }
-
- public IAbstractDomain MakeTop(out bool changed)
- {
- if (isTop)
- {
- changed = false;
- return this;
- }
- changed = true;
- return new PowDomain(Val.TRUE);
- }
-
- IAbstractDomain IAbstractDomain.Bottom()
- {
- return GetBottom();
- }
-
- IAbstractDomain IAbstractDomain.Join(List<Model.Element> state)
- {
- if (isTop) return this;
-
- int v = 0;
- if (state[0] is Model.BitVector)
- v = (state[0] as Model.BitVector).AsInt();
- else if (state[0] is Model.Integer)
- v = (state[0] as Model.Integer).AsInt();
- else Debug.Assert(false);
-
- var nupper = upper;
- while ((1 << nupper) < v) nupper++;
- var ntlevel = Val.NEITHER;
- if (nupper > Max) ntlevel = Val.TRUE;
- return new PowDomain(ntlevel, nupper);
- }
-
- Expr IAbstractDomain.Gamma(List<Expr> vars)
- {
- if (isBottom) return Expr.False;
- if (isTop) return Expr.True;
- var v = vars[0];
- if (v.Type.IsBv)
- {
- var bits = v.Type.BvBits;
- if (!AbstractDomainFactory.bvslt.ContainsKey(bits))
- throw new AbsHoudiniInternalError("No builtin function found for bv" + bits.ToString());
- var bvslt = AbstractDomainFactory.bvslt[bits];
- return new NAryExpr(Token.NoToken, new FunctionCall(bvslt), new List<Expr> { v,
- new LiteralExpr(Token.NoToken, Basetypes.BigNum.FromInt(1 << (upper+1)), 32) });
- }
- else
- {
- return Expr.Lt(v, Expr.Literal(1 << (upper+1)));
- }
- }
-
- bool IAbstractDomain.TypeCheck(List<Type> argTypes, out string msg)
- {
- msg = "";
- if (argTypes.Count != 1)
- {
- msg = "Illegal number of arguments, expecting 1";
- return false;
- }
- if (argTypes.Any(tt => !tt.IsInt && !tt.IsBv))
- {
- msg = "Illegal type, expecting int or bv";
- return false;
- }
- return true;
- }
- }
-
- // foo(x_i) = all equalities that hold
- public class EqualitiesDomain : IAbstractDomain
- {
- bool isBottom;
- List<HashSet<int>> equalities;
-
- public EqualitiesDomain(bool isBottom, List<HashSet<int>> eq)
- {
- this.isBottom = isBottom;
- this.equalities = eq;
- }
-
- public static IAbstractDomain GetBottom()
- {
- return new EqualitiesDomain(true, new List<HashSet<int>>());
- }
-
- IAbstractDomain IAbstractDomain.Bottom()
- {
- return GetBottom();
- }
-
- public IAbstractDomain MakeTop(out bool changed)
- {
- if (equalities.Count == 0)
- {
- changed = false;
- return this;
- }
- changed = true;
- return new EqualitiesDomain(false, new List<HashSet<int>>());
- }
-
- IAbstractDomain IAbstractDomain.Join(List<Model.Element> state)
- {
- // find the guys that are equal
- var eq = new List<HashSet<int>>();
- for (int i = 0; i < state.Count; i++)
- {
- var added = false;
- foreach (var s in eq)
- {
- var sv = s.First();
- if (state[i].ToString() == state[sv].ToString())
- {
- s.Add(i);
- added = true;
- break;
- }
- }
- if (!added) eq.Add(new HashSet<int>(new int[] { i }));
- }
-
- if (isBottom)
- {
- return new EqualitiesDomain(false, eq);
- }
-
- // intersect two partitions equalities and eq
- var m1 = GetMap(equalities, state.Count);
- var m2 = GetMap(eq, state.Count);
-
- for (int i = 0; i < state.Count; i++)
- m2[i] = new HashSet<int>(m2[i].Intersect(m1[i]));
-
-
- // map from representative to set
- var repToSet = new Dictionary<int, HashSet<int>>();
-
- for (int i = 0; i < state.Count; i++)
- {
- var rep = m2[i].Min();
- if (!repToSet.ContainsKey(rep))
- repToSet[rep] = m2[i];
- }
-
- var ret = new List<HashSet<int>>();
- repToSet.Values.Iter(s => ret.Add(s));
-
- return new EqualitiesDomain(false, ret);
- }
-
- Expr IAbstractDomain.Gamma(List<Expr> vars)
- {
- if (isBottom) return Expr.False;
- Expr ret = Expr.True;
- foreach (var eq in equalities.Select(hs => hs.ToList()))
- {
- if (eq.Count == 1) continue;
- var prev = eq[0];
- for (int i = 1; i < eq.Count; i++)
- {
- ret = Expr.And(ret, Expr.Eq(vars[prev], vars[eq[i]]));
- prev = eq[i];
- }
- }
- return ret;
- }
-
- bool IAbstractDomain.TypeCheck(List<Type> argTypes, out string msg)
- {
- msg = "";
- if (argTypes.Count == 0) return true;
- var ot = argTypes[0];
-
- if (argTypes.Any(tt => !tt.Equals(ot)))
- {
- msg = string.Format("Illegal type, expecting type {0}, got {1}", ot, argTypes.First(tt => !tt.Equals(ot)));
- return false;
- }
- return true;
- }
-
- private HashSet<int>[] GetMap(List<HashSet<int>> eq, int n)
- {
- var ret = new HashSet<int>[n];
- foreach (var s in eq)
- {
- foreach (var i in s)
- ret[i] = s;
- }
- return ret;
- }
- }
-
- // foo(a,b) \in {false, \not a, a ==> b, true}
- public class ImplicationDomain : IAbstractDomain
- {
- enum Val {FALSE, NOT_A, A_IMP_B, TRUE};
- Val val;
-
- private ImplicationDomain(Val val)
- {
- this.val = val;
- }
-
- public static ImplicationDomain GetBottom()
- {
- return new ImplicationDomain(Val.FALSE);
- }
-
- public IAbstractDomain Bottom()
- {
- return GetBottom();
- }
-
- public IAbstractDomain MakeTop(out bool changed)
- {
- if(val == Val.TRUE) {
- changed = false;
- return this;
- }
- changed = true;
- return new ImplicationDomain(Val.TRUE);
- }
-
- public IAbstractDomain Join(List<Model.Element> states)
- {
- Debug.Assert(states.Count == 2);
- var v1 = (states[0] as Model.Boolean).Value;
- var v2 = (states[1] as Model.Boolean).Value;
-
- if (val == Val.TRUE) return this;
-
- var that = Val.TRUE;
- if (!v1) that = Val.NOT_A;
- else if (!v1 || v2) that = Val.A_IMP_B;
-
- if (that == Val.TRUE || val == Val.FALSE)
- return new ImplicationDomain(that);
-
- // Now, neither this or that is FALSE or TRUE
- if (val == that)
- return this;
-
- Debug.Assert(val == Val.A_IMP_B || that == Val.A_IMP_B);
- return new ImplicationDomain(Val.A_IMP_B);
- }
-
- public Expr Gamma(List<Expr> vars)
- {
- Debug.Assert(vars.Count == 2);
-
- var v1 = vars[0];
- var v2 = vars[1];
-
- if (val == Val.FALSE) return Expr.False;
- if (val == Val.TRUE) return Expr.True;
- if (val == Val.NOT_A) return Expr.Not(v1);
- return Expr.Imp(v1, v2);
- }
-
- public bool TypeCheck(List<Type> argTypes, out string msg)
- {
- msg = "";
- if (argTypes.Count != 2)
- {
- msg = "Illegal number of arguments, expecting 2";
- return false;
- }
- if (argTypes.Any(tt => !tt.IsBool))
- {
- msg = "Illegal type, expecting bool";
- return false;
- }
- return true;
- }
- }
-
- public class ConstantProp : IAbstractDomain
- {
- object val;
- bool isBottom;
- bool isTop;
-
- private ConstantProp(object val, bool isTop, bool isBottom)
- {
- this.val = val;
- this.isBottom = isBottom;
- this.isTop = isTop;
- Debug.Assert(!(isTop && isBottom));
- Debug.Assert(val == null || (val is int) || (val is bool));
- }
-
- public static ConstantProp GetExtObj(object val)
- {
- Debug.Assert(val != null);
- return new ConstantProp(val, false, false);
- }
-
- public static ConstantProp GetTop()
- {
- return new ConstantProp(null, true, false);
- }
-
- public static ConstantProp GetBottom()
- {
- return new ConstantProp(null, false, true);
- }
-
- public IAbstractDomain MakeTop(out bool changed) {
- if (isTop)
- {
- changed = false;
- return this;
- }
- changed = true;
- return GetTop();
- }
-
- private ConstantProp Join(ConstantProp that)
- {
- if (isBottom) return that;
- if (isTop) return this;
- if (that.isBottom) return this;
- if (that.isTop) return that;
-
- if ((val is int) && !(that.val is int))
- throw new AbsHoudiniInternalError("Type mismatch in ExtObj");
-
- if ((val is bool) && !(that.val is bool))
- throw new AbsHoudiniInternalError("Type mismatch in ExtObj");
-
- if (val is int)
- {
- var v1 = (int)val;
- var v2 = (int)that.val;
- if (v1 != v2) return GetTop();
- return this;
- }
- else if (val is bool)
- {
- var v1 = (bool)val;
- var v2 = (bool)that.val;
- if (v1 != v2) return GetTop();
- return this;
- }
- throw new AbsHoudiniInternalError("Illegal val type in ExtObj");
- }
-
- public IAbstractDomain Bottom()
- {
- return GetBottom();
- }
-
- public IAbstractDomain Join(List<Model.Element> states)
- {
- Debug.Assert(states.Count == 1);
- var state = states[0];
- ConstantProp that = null;
-
- if (state is Model.Integer)
- {
- that = GetExtObj((state as Model.Integer).AsInt());
- }
- else if (state is Model.Boolean)
- {
- that = GetExtObj((state as Model.Boolean).Value);
- }
- else
- {
- throw new AbsHoudiniInternalError("Illegal type " + state.GetType().ToString());
- }
-
- return Join(that);
- }
-
- public Expr Gamma(List<Expr> vars)
- {
- Debug.Assert(vars.Count == 1);
- var v = vars[0];
- if (isBottom) return Expr.False;
- if (isTop) return Expr.True;
- if (val is int)
- return Expr.Eq(v, Expr.Literal((int)val));
- if (val is bool && (bool)val)
- return v;
- if (val is bool && !(bool)val)
- return Expr.Not(v);
-
- return null;
- }
-
- public bool TypeCheck(List<Type> argTypes, out string msg)
- {
- msg = "";
- if (argTypes.Count != 1)
- {
- msg = "Illegal number of arguments, expecting 1";
- return false;
- }
- if (!argTypes[0].IsInt && ! argTypes[0].IsBool)
- {
- msg = "Illegal type, expecting int or bool";
- return false;
- }
- return true;
- }
- }
-
-
- public class IndependentAttribute<T> : IAbstractDomain where T : class, IAbstractDomain
- {
- bool isBottom;
- int numVars;
- List<T> varVal;
- T underlyingInstance;
-
- public IndependentAttribute()
- {
- isBottom = true;
- numVars = 0;
- varVal = new List<T>();
- underlyingInstance = null;
- }
-
- public IAbstractDomain Bottom()
- {
- return new IndependentAttribute<T>();
- }
-
- public IAbstractDomain MakeTop(out bool changed)
- {
- var mt = new Func<IAbstractDomain>(() =>
- {
- var ret = new IndependentAttribute<T>();
- ret.isBottom = true;
- ret.numVars = numVars;
- ret.underlyingInstance = underlyingInstance;
- ret.varVal = new List<T>();
- bool tmp;
- for (int i = 0; i < varVal.Count; i++)
- ret.varVal.Add(varVal[i].MakeTop(out tmp) as T);
- return ret;
- });
-
- if (!isBottom)
- {
- foreach (var t in varVal)
- {
- var top = t.MakeTop(out changed);
- if (changed)
- {
- return mt();
- }
- }
- }
- else
- {
- changed = true;
- return mt();
- }
-
- changed = false;
- return this;
- }
- public IAbstractDomain Join(List<Model.Element> state)
- {
- SetUnderlyingInstance();
-
- if (!isBottom && numVars != state.Count)
- {
- throw new AbsHoudiniInternalError(
- string.Format("Got illegal number of arguments ({0}), expected {1}", state.Count, numVars));
- }
-
- var ret = new IndependentAttribute<T>();
- ret.isBottom = false;
- ret.numVars = state.Count;
- for(int i = 0; i < state.Count; i++)
- {
- var sl = new List<Model.Element>();
- sl.Add(state[i]);
- T prev = isBottom ? underlyingInstance.Bottom() as T : varVal[i];
- ret.varVal.Add(prev.Join(sl) as T);
- }
-
- return ret;
- }
-
- public Expr Gamma(List<Expr> vars)
- {
- if (isBottom) return Expr.False;
- if (numVars != vars.Count)
- throw new AbsHoudiniInternalError(
- string.Format("Got illegal number of arguments ({0}), expected {1}", vars.Count, numVars));
-
- Expr ret = Expr.True;
- for (int i = 0; i < numVars; i++)
- {
- var sl = new List<Expr>(); sl.Add(vars[i]);
- ret = Expr.And(ret, varVal[i].Gamma(sl));
- }
-
- return ret;
- }
-
- private void SetUnderlyingInstance()
- {
- if (underlyingInstance != null) return;
- var tt = typeof(T);
- underlyingInstance = AbstractDomainFactory.GetInstance(tt) as T;
- }
-
- public bool TypeCheck(List<Type> argTypes, out string msg)
- {
- SetUnderlyingInstance();
-
- msg = "";
- foreach(var t in argTypes)
- {
- if(!underlyingInstance.TypeCheck(new List<Type>(new Type[] { t }), out msg))
- return false;
- }
- return true;
- }
- }
-
- public class AbstractDomainFactory
- {
- // Type name -> Instance
- private static Dictionary<string, IAbstractDomain> abstractDomainInstances = new Dictionary<string, IAbstractDomain>();
- private static Dictionary<string, IAbstractDomain> abstractDomainInstancesFriendly = new Dictionary<string, IAbstractDomain>();
-
- // bitvector operations
- public static Dictionary<int, Function> bvslt = new Dictionary<int, Function>();
-
- public static void Register(string friendlyName, IAbstractDomain instance)
- {
- var Name = instance.GetType().FullName;
- Debug.Assert(!abstractDomainInstances.ContainsKey(Name));
- abstractDomainInstances.Add(Name, instance);
- abstractDomainInstancesFriendly.Add(friendlyName, instance);
- }
-
- public static IAbstractDomain GetInstance(System.Type type)
- {
- var Name = type.FullName;
- Debug.Assert(abstractDomainInstances.ContainsKey(Name));
- return abstractDomainInstances[Name] as IAbstractDomain;
- }
-
- public static IAbstractDomain GetInstance(string friendlyName)
- {
- if (!abstractDomainInstancesFriendly.ContainsKey(friendlyName))
- {
- Console.WriteLine("Domain {0} not found", friendlyName);
- Console.WriteLine("Supported domains are:");
- abstractDomainInstancesFriendly.Keys.Iter(tup => Console.WriteLine(" {0}", tup));
- throw new AbsHoudiniInternalError("Domain not found");
- }
- return abstractDomainInstancesFriendly[friendlyName] as IAbstractDomain;
- }
-
- public static void Initialize(Program program)
- {
- // Declare abstract domains
- var domains = new List<System.Tuple<string, IAbstractDomain>>(new System.Tuple<string, IAbstractDomain>[] {
- System.Tuple.Create("HoudiniConst", HoudiniConst.GetBottom() as IAbstractDomain),
- System.Tuple.Create("Intervals", new Intervals() as IAbstractDomain),
- System.Tuple.Create("ConstantProp", ConstantProp.GetBottom() as IAbstractDomain),
- System.Tuple.Create("PredicateAbs", new PredicateAbsElem() as IAbstractDomain),
- System.Tuple.Create("ImplicationDomain", ImplicationDomain.GetBottom() as IAbstractDomain),
- System.Tuple.Create("PowDomain", PowDomain.GetBottom() as IAbstractDomain),
- System.Tuple.Create("EqualitiesDomain", EqualitiesDomain.GetBottom() as IAbstractDomain),
- System.Tuple.Create("IA[HoudiniConst]", new IndependentAttribute<HoudiniConst>() as IAbstractDomain),
- System.Tuple.Create("IA[ConstantProp]", new IndependentAttribute<ConstantProp>() as IAbstractDomain),
- System.Tuple.Create("IA[Intervals]", new IndependentAttribute<Intervals>() as IAbstractDomain),
- System.Tuple.Create("IA[PowDomain]", new IndependentAttribute<PowDomain>() as IAbstractDomain),
- });
-
- domains.Iter(tup => AbstractDomainFactory.Register(tup.Item1, tup.Item2));
- program.Functions.Iter(RegisterFunction);
- }
-
- private static void RegisterFunction(Function func)
- {
- var attr = QKeyValue.FindStringAttribute(func.Attributes, "bvbuiltin");
- if (attr != null && attr == "bvslt" && func.InParams.Count == 2 && func.InParams[0].TypedIdent.Type.IsBv)
- bvslt.Add(func.InParams[0].TypedIdent.Type.BvBits, func);
- }
- }
-
- public interface IAbstractDomain
- {
- IAbstractDomain Bottom();
- IAbstractDomain MakeTop(out bool changed);
- IAbstractDomain Join(List<Model.Element> state);
- Expr Gamma(List<Expr> vars);
- bool TypeCheck(List<Type> argTypes, out string msg);
- }
-
- public class AbstractHoudini
- {
- // Input Program
- Program program;
- // Impl -> VC
- Dictionary<string, VCExpr> impl2VC;
- // Impl -> Vars at end of the impl
- Dictionary<string, List<VCExpr>> impl2EndStateVars;
- // Impl -> (callee,summary pred)
- Dictionary<string, List<Tuple<string, bool, VCExprVar, VCExprNAry>>> impl2CalleeSummaries;
- // pointer to summary class
- ISummaryElement summaryClass;
- // impl -> summary
- Dictionary<string, ISummaryElement> impl2Summary;
- // name -> impl
- Dictionary<string, Implementation> name2Impl;
- // Use Bilateral algorithm
- public static bool UseBilateralAlgo = true;
- public static int iterTimeLimit = -1; // ms
-
- public static readonly string summaryPredSuffix = "SummaryPred";
-
- // Essentials: VCGen, Prover, and reporter
- VCGen vcgen;
- ProverInterface prover;
- AbstractHoudiniErrorReporter reporter;
-
- // Stats
- TimeSpan proverTime;
- int numProverQueries;
-
- // Produce witness for correctness: can be set programmatically
- public static string WitnessFile = "absHoudiniWitness.bpl";
-
- public AbstractHoudini(Program program)
- {
- this.program = program;
- this.impl2VC = new Dictionary<string, VCExpr>();
- this.impl2EndStateVars = new Dictionary<string, List<VCExpr>>();
- this.impl2CalleeSummaries = new Dictionary<string, List<Tuple<string, bool, VCExprVar, VCExprNAry>>>();
- this.impl2Summary = new Dictionary<string, ISummaryElement>();
- this.name2Impl = SimpleUtil.nameImplMapping(program);
-
- if (CommandLineOptions.Clo.ProverKillTime > 0)
- CommandLineOptions.Clo.ProverOptions = CommandLineOptions.Clo.ProverOptions.Concat1(string.Format("TIME_LIMIT={0}", CommandLineOptions.Clo.ProverKillTime));
-
- this.vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List<Checker>());
- this.prover = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, -1);
-
- this.reporter = new AbstractHoudiniErrorReporter();
-
- this.proverTime = TimeSpan.Zero;
- this.numProverQueries = 0;
-
- if (CommandLineOptions.Clo.AbstractHoudini == "0")
- UseBilateralAlgo = false;
- }
-
- public void computeSummaries(ISummaryElement summaryClass)
- {
- // TODO: move this some place else
- PredicateAbs.FindUnsatPairs(prover.VCExprGen, prover);
-
- this.summaryClass = summaryClass;
-
- name2Impl.Values.Iter(attachEnsures);
-
- program.Implementations
- .Iter(impl => impl2Summary.Add(impl.Name, summaryClass.GetFlaseSummary(program, impl)));
-
- // Build call graph
- var Succ = new Dictionary<Implementation, HashSet<Implementation>>();
- var Pred = new Dictionary<Implementation, HashSet<Implementation>>();
- name2Impl.Values.Iter(impl => Succ.Add(impl, new HashSet<Implementation>()));
- name2Impl.Values.Iter(impl => Pred.Add(impl, new HashSet<Implementation>()));
-
- foreach (var impl in program.Implementations)
- {
- foreach (var blk in impl.Blocks)
- {
- foreach (var cmd in blk.Cmds.OfType<CallCmd>())
- {
- if (!name2Impl.ContainsKey(cmd.callee)) continue;
- Succ[impl].Add(name2Impl[cmd.callee]);
- Pred[name2Impl[cmd.callee]].Add(impl);
- }
- }
- }
-
- // Build SCC
- var sccs = new StronglyConnectedComponents<Implementation>(name2Impl.Values,
- new Adjacency<Implementation>(n => Pred[n]),
- new Adjacency<Implementation>(n => Succ[n]));
- sccs.Compute();
-
- // impl -> priority
- var impl2Priority = new Dictionary<string, int>();
- int p = 0;
- foreach (var scc in sccs)
- {
- foreach (var impl in scc)
- {
- impl2Priority.Add(impl.Name, p);
- p++;
- }
- }
-
-
- Inline();
-
- #region Witness generation setup
- // Create a copy of the program
- var copy = new Dictionary<string, Implementation>();
- if (WitnessFile != null)
- {
- foreach (var impl in program.Implementations)
- {
- var nimpl = new Implementation(Token.NoToken, impl.Name, impl.TypeParameters,
- impl.InParams, impl.OutParams, new List<Variable>(impl.LocVars), new List<Block>());
- foreach (var blk in impl.Blocks)
- {
- var cd = new CodeCopier();
- nimpl.Blocks.Add(new Block(Token.NoToken, blk.Label,
- cd.CopyCmdSeq(blk.Cmds), cd.CopyTransferCmd(blk.TransferCmd)));
- }
-
- copy.Add(impl.Name, nimpl);
- }
- }
- #endregion
-
- // Turn off subsumption. Why? Because then I see multiple occurences of the
- // attached ensures in the VC
- CommandLineOptions.Clo.UseSubsumption = CommandLineOptions.SubsumptionOption.Never;
-
- // Create all VCs
- name2Impl.Values
- .Iter(GenVC);
-
- // Start the iteration
- var worklist = new SortedSet<Tuple<int, Implementation>>();
- name2Impl.Values
- .Iter(impl => worklist.Add(Tuple.Create(impl2Priority[impl.Name], impl)));
-
- while (worklist.Any())
- {
- var impl = worklist.First().Item2;
- worklist.Remove(worklist.First());
-
- var changed = ProcessImpl(impl);
-
- if (changed)
- {
- Pred[impl].Where(pred => UseBilateralAlgo || pred != impl).Iter(pred => worklist.Add(Tuple.Create(impl2Priority[pred.Name], pred)));
- }
- }
-
- var allImpls = new SortedSet<Tuple<int, string>>();
- name2Impl.Values.Iter(impl => allImpls.Add(Tuple.Create(impl2Priority[impl.Name], impl.Name)));
- if (CommandLineOptions.Clo.Trace)
- {
- foreach (var tup in allImpls)
- {
- Console.WriteLine("Summary of {0}:", tup.Item2);
- Console.WriteLine("{0}", impl2Summary[tup.Item2]);
- }
- Console.WriteLine("Prover time = {0}", proverTime.TotalSeconds.ToString("F2"));
- Console.WriteLine("Number of prover queries = " + numProverQueries);
- }
-
- ProduceWitness(copy);
-
- prover.Close();
- CommandLineOptions.Clo.TheProverFactory.Close();
- }
-
- public HashSet<string> GetPredicates()
- {
- var ret = new HashSet<string>();
- prover = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, -1);
-
- foreach (var tup in impl2Summary)
- {
- var s = tup.Value as PredicateAbs;
- if (s == null) continue;
- ret.UnionWith(s.GetPredicates(program, prover.VCExprGen, prover));
- // debug output
- //Console.WriteLine("Summary of {0}:", tup.Key);
- //Console.WriteLine("{0}", tup.Value);
- }
-
- prover.Close();
- CommandLineOptions.Clo.TheProverFactory.Close();
- return ret;
- }
-
- // Obtain the summary expression for a procedure: used programmatically by clients
- // of AbstractHoudini
- public Expr GetSummary(Program program, Procedure proc)
- {
- if (!impl2Summary.ContainsKey(proc.Name))
- return Expr.True;
-
- var vars = new Dictionary<string, Expr>();
- foreach (var g in program.GlobalVariables)
- vars.Add(g.Name, Expr.Ident(g));
- foreach (var v in proc.InParams.OfType<Variable>())
- vars.Add(v.Name, Expr.Ident(v));
- foreach (var v in proc.OutParams.OfType<Variable>())
- vars.Add(v.Name, Expr.Ident(v));
-
- return impl2Summary[proc.Name].GetSummaryExpr(
- v => { if (vars.ContainsKey(v)) return vars[v]; else return null; },
- v => { if (vars.ContainsKey(v)) return new OldExpr(Token.NoToken, vars[v]); else return null; });
- }
-
- public ISummaryElement GetSummaryLowLevel(Procedure proc)
- {
- if (!impl2Summary.ContainsKey(proc.Name)) return null;
- return impl2Summary[proc.Name];
- }
-
- // Produce a witness that proves that the inferred annotations are correct
- private void ProduceWitness(Dictionary<string, Implementation> copy)
- {
- if (WitnessFile == null)
- return;
-
- foreach (var proc in program.Procedures)
- {
- var nensures = new List<Ensures>();
- proc.Ensures.OfType<Ensures>()
- .Where(ens => !QKeyValue.FindBoolAttribute(ens.Attributes, "ah") &&
- !QKeyValue.FindBoolAttribute(ens.Attributes, "pre") &&
- !QKeyValue.FindBoolAttribute(ens.Attributes, "post") &&
- QKeyValue.FindStringAttribute(ens.Attributes, "pre") == null &&
- QKeyValue.FindStringAttribute(ens.Attributes, "post") == null)
- .Iter(ens => nensures.Add(ens));
- foreach (Ensures en in nensures)
- en.Attributes = removeAttr("InlineAssume", en.Attributes);
-
- proc.Ensures = nensures;
- }
-
- var decls = new List<Declaration>(copy.Values);
- decls.AddRange(program.TopLevelDeclarations.Where(decl => !(decl is Implementation)));
- program.TopLevelDeclarations = decls;
- var name2Proc = new Dictionary<string, Procedure>();
- foreach (var proc in program.Procedures)
- {
- name2Proc.Add(proc.Name, proc);
- if (impl2Summary.ContainsKey(proc.Name))
- {
- var ens = new Ensures(false,
- impl2Summary[proc.Name].GetSummaryExpr(
- new Func<string, Expr>(s => null), new Func<string, Expr>(s => null)));
- ens.Attributes = new QKeyValue(Token.NoToken, "inferred", new List<object>(), ens.Attributes);
- proc.Ensures.Add(ens);
- }
- }
-
- using (var wt = new TokenTextWriter(WitnessFile, /*pretty=*/ false))
- {
- program.Emit(wt);
- }
-
- // Replace SummaryPreds with their definition
- foreach (var impl in program.Implementations)
- {
- foreach (var blk in impl.Blocks)
- {
- foreach (var cmd in blk.Cmds.OfType<AssumeCmd>())
- {
- var expr = cmd.Expr as NAryExpr;
- if (expr == null) continue;
- var op = expr.Fun as FunctionCall;
- if (op == null || !op.FunctionName.EndsWith(summaryPredSuffix)) continue;
- var calleeName = op.FunctionName.Substring(0, op.FunctionName.Length - summaryPredSuffix.Length);
- if (!impl2Summary.ContainsKey(calleeName)) continue;
- var callee = name2Impl[calleeName];
-
- // variable order: globals, ins, outs, modifies
- var forold = new Dictionary<string, Expr>();
- var always = new Dictionary<string, Expr>();
- int i = 0;
- foreach (var g in program.GlobalVariables)
- {
- forold.Add(g.Name, expr.Args[i]);
- always.Add(g.Name, expr.Args[i]);
- i++;
- }
- foreach (var v in callee.InParams.OfType<Variable>())
- {
- always.Add(v.Name, expr.Args[i]);
- i++;
- }
- foreach (var v in callee.OutParams.OfType<Variable>())
- {
- always.Add(v.Name, expr.Args[i]);
- i++;
- }
- foreach (var ie in name2Proc[calleeName].Modifies.OfType<IdentifierExpr>())
- {
- always[ie.Name] = expr.Args[i];
- i++;
- }
-
- cmd.Expr = impl2Summary[calleeName].GetSummaryExpr(
- v => { if (always.ContainsKey(v)) return always[v]; else return null; },
- v => { if (forold.ContainsKey(v)) return forold[v]; else return null; });
- }
- }
- }
-
- using (var wt = new TokenTextWriter(WitnessFile, /*pretty=*/ false))
- {
- program.Emit(wt);
- }
- if (CommandLineOptions.Clo.Trace) Console.WriteLine("Witness written to {0}", WitnessFile);
- }
-
- private QKeyValue removeAttr(string key, QKeyValue attr)
- {
- if (attr == null) return attr;
- if (attr.Key == key) return removeAttr(key, attr.Next);
- attr.Next = removeAttr(key, attr.Next);
- return attr;
- }
-
- private void Inline()
- {
- if (CommandLineOptions.Clo.InlineDepth < 0)
- return;
-
- var callGraph = BuildCallGraph();
-
- foreach (Implementation impl in callGraph.Nodes)
- {
- InlineEnsuresVisitor inlineEnsuresVisitor = new InlineEnsuresVisitor();
- inlineEnsuresVisitor.Visit(impl);
- }
-
- foreach (Implementation impl in callGraph.Nodes)
- {
- impl.OriginalBlocks = impl.Blocks;
- impl.OriginalLocVars = impl.LocVars;
- }
- foreach (Implementation impl in callGraph.Nodes)
- {
- CommandLineOptions.Inlining savedOption = CommandLineOptions.Clo.ProcedureInlining;
- CommandLineOptions.Clo.ProcedureInlining = CommandLineOptions.Inlining.Spec;
- Inliner.ProcessImplementationForHoudini(program, impl);
- CommandLineOptions.Clo.ProcedureInlining = savedOption;
- }
- foreach (Implementation impl in callGraph.Nodes)
- {
- impl.OriginalBlocks = null;
- impl.OriginalLocVars = null;
- }
-
- Graph<Implementation> oldCallGraph = callGraph;
- callGraph = new Graph<Implementation>();
- foreach (Implementation impl in oldCallGraph.Nodes)
- {
- callGraph.AddSource(impl);
- }
- foreach (Tuple<Implementation, Implementation> edge in oldCallGraph.Edges)
- {
- callGraph.AddEdge(edge.Item1, edge.Item2);
- }
- int count = CommandLineOptions.Clo.InlineDepth;
- while (count > 0)
- {
- foreach (Implementation impl in oldCallGraph.Nodes)
- {
- List<Implementation> newNodes = new List<Implementation>();
- foreach (Implementation succ in callGraph.Successors(impl))
- {
- newNodes.AddRange(oldCallGraph.Successors(succ));
- }
- foreach (Implementation newNode in newNodes)
- {
- callGraph.AddEdge(impl, newNode);
- }
- }
- count--;
- }
- }
-
- private Graph<Implementation> BuildCallGraph()
- {
- Graph<Implementation> callGraph = new Graph<Implementation>();
- Dictionary<Procedure, HashSet<Implementation>> procToImpls = new Dictionary<Procedure, HashSet<Implementation>>();
- foreach (var proc in program.Procedures)
- {
- procToImpls[proc] = new HashSet<Implementation>();
- }
- foreach (var impl in program.Implementations)
- {
- if (impl.SkipVerification) continue;
- callGraph.AddSource(impl);
- procToImpls[impl.Proc].Add(impl);
- }
- foreach (var impl in program.Implementations)
- {
- if (impl.SkipVerification) continue;
- foreach (Block b in impl.Blocks)
- {
- foreach (Cmd c in b.Cmds)
- {
- CallCmd cc = c as CallCmd;
- if (cc == null) continue;
- foreach (Implementation callee in procToImpls[cc.Proc])
- {
- callGraph.AddEdge(impl, callee);
- }
- }
- }
- }
- return callGraph;
- }
-
-
- private bool ProcessImpl(Implementation impl)
- {
- var ret = false;
- var gen = prover.VCExprGen;
-
- // construct summaries
- var env = VCExpressionGenerator.True;
- foreach (var tup in impl2CalleeSummaries[impl.Name])
- {
- // Not Bilateral: then reject self predicates
- if (UseBilateralAlgo == false && tup.Item1 == impl.Name)
- continue;
-
- // Bilateral: only reject self summary
- if (UseBilateralAlgo == true && tup.Item1 == impl.Name && tup.Item2)
- continue;
-
- var calleeSummary =
- impl2Summary[tup.Item1].GetSummaryExpr(
- GetVarMapping(name2Impl[tup.Item1], tup.Item4), prover.VCExprGen);
- env = gen.AndSimp(env, gen.Eq(tup.Item3, calleeSummary));
- }
-
- var prev = impl2Summary[impl.Name].Copy();
- var upper = impl2Summary[impl.Name].GetTrueSummary(program, impl);
- var sw = new Stopwatch();
- sw.Start();
- var lowerTime = TimeSpan.Zero;
-
- while(true)
- {
- var usedLower = true;
- var query = impl2Summary[impl.Name];
- sw.Restart();
-
- // construct self summaries
- var summaryExpr = VCExpressionGenerator.True;
- foreach (var tup in impl2CalleeSummaries[impl.Name])
- {
- if (UseBilateralAlgo == false && tup.Item1 != impl.Name)
- continue;
- if (UseBilateralAlgo == true && (tup.Item1 != impl.Name || !tup.Item2))
- continue;
-
- if (UseBilateralAlgo)
- {
- query = query.AbstractConsequence(upper);
- if (query == null) query = impl2Summary[tup.Item1];
- else usedLower = false;
- }
-
- var ts =
- query.GetSummaryExpr(
- GetVarMapping(name2Impl[tup.Item1], tup.Item4), prover.VCExprGen);
- summaryExpr = gen.AndSimp(summaryExpr, gen.Eq(tup.Item3, ts));
- }
- //Console.WriteLine("Trying summary for {0}: {1}", impl.Name, summaryExpr);
-
- reporter.model = null;
- var vc = gen.AndSimp(env, summaryExpr);
- vc = gen.Implies(vc, impl2VC[impl.Name]);
-
- //Console.WriteLine("Checking: {0}", vc);
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Verifying {0} ({1}): {2}", impl.Name, usedLower ? "lower" : "ac", query);
-
- if (usedLower && lowerTime.TotalMilliseconds >= iterTimeLimit && iterTimeLimit >= 0)
- {
- if (UseBilateralAlgo)
- {
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
- ret = prev.IsEqual(upper) ? false : true;
- impl2Summary[impl.Name] = upper;
- break;
- }
- else
- {
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
- var tt = impl2Summary[impl.Name].GetTrueSummary(program, impl);
- ret = prev.IsEqual(tt) ? false : true; ;
- impl2Summary[impl.Name] = tt;
- break;
- }
- }
-
- var start = DateTime.Now;
-
- //prover.Push();
- //prover.Assert(gen.Not(vc), true);
- //prover.FlushAxiomsToTheoremProver();
- //prover.Check();
- //ProverInterface.Outcome proverOutcome = prover.CheckOutcome(reporter);
- //prover.Pop();
-
- prover.BeginCheck(impl.Name, vc, reporter);
- ProverInterface.Outcome proverOutcome = prover.CheckOutcome(reporter);
-
- var inc = (DateTime.Now - start);
- proverTime += inc;
- numProverQueries++;
-
- sw.Stop();
- if (usedLower) lowerTime += sw.Elapsed;
-
- if(CommandLineOptions.Clo.Trace)
- Console.WriteLine("Time taken = " + inc.TotalSeconds.ToString());
-
- if (UseBilateralAlgo)
- {
- if (proverOutcome == ProverInterface.Outcome.TimeOut || proverOutcome == ProverInterface.Outcome.OutOfMemory)
- {
- if(CommandLineOptions.Clo.Trace)
- Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
- ret = prev.IsEqual(upper) ? false : true;
- impl2Summary[impl.Name] = upper;
- break;
- }
-
- if (reporter.model == null && usedLower)
- break;
-
- if (reporter.model == null)
- {
- upper.Meet(query);
- }
- else
- {
- var state = CollectState(impl);
- impl2Summary[impl.Name].Join(state, reporter.model);
- ret = true;
- }
- }
- else
- {
- if (proverOutcome == ProverInterface.Outcome.TimeOut || proverOutcome == ProverInterface.Outcome.OutOfMemory)
- {
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
- var tt = impl2Summary[impl.Name].GetTrueSummary(program, impl);
- ret = prev.IsEqual(tt) ? false : true; ;
- impl2Summary[impl.Name] = tt;
- break;
- }
-
- if (reporter.model == null)
- break;
- //reporter.model.Write(Console.Out);
-
- var state = CollectState(impl);
- impl2Summary[impl.Name].Join(state, reporter.model);
- ret = true;
- }
- }
- return ret;
- }
-
- private Dictionary<string, VCExpr> GetVarMapping(Implementation impl, VCExprNAry summaryPred)
- {
- var ret = new Dictionary<string, VCExpr>();
-
- var cnt = 0;
- foreach (var g in program.GlobalVariables)
- {
- ret.Add(string.Format("old({0})", g.Name), summaryPred[cnt]);
- cnt++;
- }
- foreach (var v in impl.InParams.OfType<Variable>().Concat(
- impl.OutParams.OfType<Variable>().Concat(
- impl.Proc.Modifies.OfType<IdentifierExpr>().Select(ie => ie.Decl))))
- {
- ret.Add(v.Name, summaryPred[cnt]);
- cnt++;
- }
-
- // Fill up values of globals that are not modified
- cnt = 0;
- foreach (var g in program.GlobalVariables)
- {
- if (ret.ContainsKey(g.Name)) { cnt++; continue; }
-
- ret.Add(string.Format("{0}", g.Name), summaryPred[cnt]);
- cnt++;
- }
-
- // Constants
- foreach (var c in program.Constants)
- {
- var value = prover.Context.BoogieExprTranslator.Translate(Expr.Ident(c));
- ret.Add(string.Format("{0}", c.Name), value);
- ret.Add(string.Format("old({0})", c.Name), value);
- }
-
- return ret;
- }
-
- private Dictionary<string, Model.Element> CollectState(Implementation impl)
- {
- var ret = new Dictionary<string, Model.Element>();
-
- var model = reporter.model;
- var implVars = impl2EndStateVars[impl.Name];
-
- var cnt = 0;
- foreach (var g in program.GlobalVariables)
- {
- ret.Add(string.Format("old({0})", g.Name), getValue(implVars[cnt], model));
- cnt++;
- }
- foreach (var v in impl.InParams.OfType<Variable>().Concat(
- impl.OutParams.OfType<Variable>().Concat(
- impl.Proc.Modifies.OfType<IdentifierExpr>().Select(ie => ie.Decl))))
- {
- ret.Add(v.Name, getValue(implVars[cnt], model));
- cnt++;
- }
-
- // Fill up values of globals that are not modified
- cnt = 0;
- foreach (var g in program.GlobalVariables)
- {
- if (ret.ContainsKey(g.Name)) { cnt++; continue; }
-
- ret.Add(string.Format("{0}", g.Name), getValue(implVars[cnt], model));
- cnt++;
- }
-
- // Constants
- foreach (var c in program.Constants)
- {
- try
- {
- var value = getValue(prover.Context.BoogieExprTranslator.Translate(Expr.Ident(c)), model);
- ret.Add(string.Format("{0}", c.Name), value);
- ret.Add(string.Format("old({0})", c.Name), value);
- }
- catch (Exception)
- {
- // constant not assigned a value: add a default value
- Model.Element value = null;
- if (c.TypedIdent.Type.IsInt)
- value = model.MkIntElement(0);
- else if (c.TypedIdent.Type.IsBool)
- value = model.MkElement("false");
-
- ret.Add(string.Format("{0}", c.Name), value);
- ret.Add(string.Format("old({0})", c.Name), value);
- }
- }
-
- return ret;
- }
-
- private Model.Element getValue(VCExpr arg, Model model)
- {
- if (arg is VCExprLiteral)
- {
- //return model.GetElement(arg.ToString());
- return model.MkElement(arg.ToString());
- }
- else if (arg is VCExprVar)
- {
- var el = model.TryGetFunc(prover.Context.Lookup(arg as VCExprVar));
- if (el != null)
- {
- Debug.Assert(el.Arity == 0 && el.AppCount == 1);
- return el.Apps.First().Result;
- }
- else
- {
- // Variable not defined; assign arbitrary value
- if (arg.Type.IsBool)
- return model.MkElement("false");
- else if (arg.Type.IsInt)
- return model.MkIntElement(0);
- else
- return null;
- }
- }
- else
- {
- Debug.Assert(false);
- return null;
- }
- }
-
- private void attachEnsures(Implementation impl)
- {
- List<Variable> functionInterfaceVars = new List<Variable>();
- foreach (Variable v in vcgen.program.GlobalVariables)
- {
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
- }
- foreach (Variable v in impl.InParams)
- {
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
- }
- foreach (Variable v in impl.OutParams)
- {
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
- }
- foreach (IdentifierExpr e in impl.Proc.Modifies)
- {
- if (e.Decl == null) continue;
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", e.Decl.TypedIdent.Type), true));
- }
- Formal returnVar = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false);
- var function = new Function(Token.NoToken, impl.Name + summaryPredSuffix, functionInterfaceVars, returnVar);
- prover.Context.DeclareFunction(function, "");
-
- List<Expr> exprs = new List<Expr>();
- foreach (Variable v in vcgen.program.GlobalVariables)
- {
- Contract.Assert(v != null);
- exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
- }
- foreach (Variable v in impl.Proc.InParams)
- {
- Contract.Assert(v != null);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- foreach (Variable v in impl.Proc.OutParams)
- {
- Contract.Assert(v != null);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- foreach (IdentifierExpr ie in impl.Proc.Modifies)
- {
- Contract.Assert(ie != null);
- if (ie.Decl == null)
- continue;
- exprs.Add(ie);
- }
- Expr postExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
- impl.Proc.Ensures.Add(
- new Ensures(Token.NoToken, false, postExpr, "",
- new QKeyValue(Token.NoToken, "ah", new List<object>(), null)));
- }
-
- private void GenVC(Implementation impl)
- {
- ModelViewInfo mvInfo;
- Dictionary<int, Absy> label2absy;
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Generating VC of {0}", impl.Name);
- }
-
- vcgen.ConvertCFG2DAG(impl);
- vcgen.PassifyImpl(impl, out mvInfo);
-
- var gen = prover.VCExprGen;
- var vcexpr = vcgen.GenerateVC(impl, null, out label2absy, prover.Context);
-
-
- // Find the assert
- impl2EndStateVars.Add(impl.Name, new List<VCExpr>());
- var found = false;
- var assertId = -1;
- foreach (var blk in impl.Blocks)
- {
- foreach (var cmd in blk.Cmds.OfType<AssertCmd>())
- {
- if (SimpleUtil.isAssertTrue(cmd)) continue;
- var nary = cmd.Expr as NAryExpr;
- if (nary == null) continue;
- var pred = nary.Fun as FunctionCall;
- if (pred == null || pred.FunctionName != (impl.Name + (AbstractHoudini.summaryPredSuffix)))
- continue;
-
- Debug.Assert(!found);
- found = true;
- assertId = cmd.UniqueId;
- //Console.WriteLine("assert cmd id: {0}", cmd.UniqueId);
- nary.Args.OfType<Expr>()
- .Iter(expr => impl2EndStateVars[impl.Name].Add(prover.Context.BoogieExprTranslator.Translate(expr)));
- }
- }
-
- // It is possible that no assert is found in the procedure. It happens when the
- // procedure doesn't return.
- //Debug.Assert(found);
-
- // Grab summary predicates
- var visitor = new FindSummaryPred(prover.VCExprGen, assertId);
- vcexpr = visitor.Mutate(vcexpr, true);
-
- // Create a macro so that the VC can sit with the theorem prover
- Macro macro = new Macro(Token.NoToken, impl.Name + "Macro", new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false));
- prover.DefineMacro(macro, vcexpr);
-
- // Store VC
- impl2VC.Add(impl.Name, gen.Function(macro));
-
- //Console.WriteLine("VC of {0}: {1}", impl.Name, vcexpr);
-
- // check sanity: only one predicate for self-summary
- // (There may be none when the procedure doesn't return)
- Debug.Assert(visitor.summaryPreds.Count(tup => tup.Item2) <= 1);
-
- impl2CalleeSummaries.Add(impl.Name, new List<Tuple<string, bool, VCExprVar, VCExprNAry>>());
- visitor.summaryPreds.Iter(tup => impl2CalleeSummaries[impl.Name].Add(tup));
- }
- }
-
- public interface ISummaryElement
- {
- ISummaryElement Copy();
- ISummaryElement GetFlaseSummary(Program program, Implementation impl);
- void Join(Dictionary<string, Model.Element> state, Model model);
- VCExpr GetSummaryExpr(Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen);
- Expr GetSummaryExpr(Func<string, Expr> always, Func<string, Expr> forold);
-
- // For Bilateral
- ISummaryElement GetTrueSummary(Program program, Implementation impl);
- void Meet(ISummaryElement other);
- bool IsEqual(ISummaryElement other);
- ISummaryElement AbstractConsequence(ISummaryElement upper);
- }
-
- public class ConstantVal : ISummaryElement
- {
- Program program;
- Implementation impl;
- // var -> const set
- Dictionary<string, HashSet<int>> val;
- // set of vars
- HashSet<Variable> vars;
-
- public static readonly int MAX = 3;
-
- public ConstantVal()
- {
- // this is just a place holder
- val = new Dictionary<string, HashSet<int>>();
- vars = new HashSet<Variable>();
- }
-
- private ConstantVal(Program program, Implementation impl)
- {
- this.program = program;
- this.impl = impl;
- this.val = new Dictionary<string, HashSet<int>>();
-
- vars = new HashSet<Variable>();
- impl.Proc.Modifies
- .OfType<IdentifierExpr>()
- .Select(ie => ie.Decl)
- .Where(v => v.TypedIdent.Type.IsInt)
- .Iter(v => vars.Add(v));
- impl.OutParams.OfType<Variable>()
- .Where(v => v.TypedIdent.Type.IsInt)
- .Iter(v => vars.Add(v));
-
- vars.Iter(v => val.Add(v.Name, null));
- }
-
-
- public void Join(Dictionary<string, Model.Element> state, Model model)
- {
- foreach (var vv in vars)
- {
- var v = vv.Name;
- var newv = state[v].AsInt();
- var oldv = val[v];
-
- if (oldv == null)
- {
- val[v] = new HashSet<int>();
- val[v].Add(newv);
- }
- else if(oldv.Count > 0)
- {
- val[v].Add(newv);
- if (val[v].Count > MAX)
- val[v] = new HashSet<int>();
- }
-
- }
- }
-
- public VCExpr GetSummaryExpr(Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen)
- {
- VCExpr ret = VCExpressionGenerator.True;
- if (val.Values.Any(v => v == null))
- return VCExpressionGenerator.False;
-
- foreach (var v in vars)
- {
- var consts = val[v.Name];
- Debug.Assert(consts != null);
-
- if (consts.Count == 0)
- continue;
-
- var vexpr = VCExpressionGenerator.False;
- consts.Iter(c => vexpr = gen.OrSimp(vexpr, gen.Eq(incarnations[v.Name], gen.Integer(Microsoft.Basetypes.BigNum.FromInt(c)))));
- ret = gen.AndSimp(ret, vexpr);
- }
-
- return ret;
- }
-
- public override string ToString()
- {
- var ret = "true";
- if (val.Values.Any(v => v == null))
- return "false";
-
- foreach (var v in vars)
- {
- var consts = val[v.Name];
- Debug.Assert(consts != null);
-
- if (consts.Count == 0)
- continue;
-
- var vexpr = "false";
- consts.Iter(c => vexpr =
- string.Format("{0} OR ({1} == {2})", vexpr, v.Name, c));
-
- ret = string.Format("{0} AND ({1})", ret, vexpr);
- }
-
- return ret;
- }
-
-
- public ISummaryElement GetFlaseSummary(Program program, Implementation impl)
- {
- return new ConstantVal(program, impl);
- }
-
- #region ISummaryElement (Bilateral) Members
-
-
- public ISummaryElement GetTrueSummary(Program program, Implementation impl)
- {
- throw new NotImplementedException();
- }
-
- public void Meet(ISummaryElement other)
- {
- throw new NotImplementedException();
- }
-
- public bool IsEqual(ISummaryElement other)
- {
- throw new NotImplementedException();
- }
-
- public ISummaryElement AbstractConsequence(ISummaryElement upper)
- {
- throw new NotImplementedException();
- }
-
- #endregion
-
- #region ISummaryElement Members
-
-
- public Expr GetSummaryExpr(Func<string, Expr> always, Func<string, Expr> forold)
- {
- throw new NotImplementedException();
- }
-
- #endregion
-
- #region ISummaryElement Members
-
- public ISummaryElement Copy()
- {
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
- public class NamedExpr
- {
- public string name;
- public Expr expr;
-
- public NamedExpr(string name, Expr expr)
- {
- this.name = name;
- this.expr = expr;
- }
-
- public NamedExpr(Expr expr)
- {
- this.name = null;
- this.expr = expr;
- }
-
- public override string ToString()
- {
- if (name != null)
- return name;
-
- return expr.ToString();
- }
- }
-
- public class PredicateAbs : ISummaryElement
- {
- public static Dictionary<string, List<NamedExpr>> PrePreds { get; private set; }
- public static Dictionary<string, HashSet<int>> PosPrePreds { get; private set; }
- public static Dictionary<string, List<NamedExpr>> PostPreds { get; private set; }
- public static Dictionary<Tuple<string, int>, List<PredicateAbsDisjunct>> UpperCandidates;
- private static HashSet<string> boolConstants;
- // {proc, pred-pair} -> polariry
- public static HashSet<Tuple<string, int, int, bool, bool>> unsatPrePredPairs;
- public static HashSet<Tuple<string, int, int, bool, bool>> unsatPostPredPairs;
-
- // Temporary: used during eval
- private static Model model = null;
-
- string procName;
- PredicateAbsDisjunct[] value;
- bool isFalse;
-
- public PredicateAbs(string procName)
- {
- this.procName = procName;
- isFalse = true;
- value = new PredicateAbsDisjunct[PostPreds[this.procName].Count];
- for (int i = 0; i < PostPreds[this.procName].Count; i++) value[i] = null;
- }
-
- public static void Initialize(Program program)
- {
- PrePreds = new Dictionary<string, List<NamedExpr>>();
- PostPreds = new Dictionary<string, List<NamedExpr>>();
- PosPrePreds = new Dictionary<string, HashSet<int>>();
-
- boolConstants = new HashSet<string>();
- UpperCandidates = new Dictionary<Tuple<string, int>, List<PredicateAbsDisjunct>>();
-
- program.Constants
- .Where(c => c.TypedIdent.Type.IsBool)
- .Iter(c => boolConstants.Add(c.Name));
-
- // Add template pre-post to all procedures
- var preT = new List<NamedExpr>();
- var postT = new List<NamedExpr>();
- var posPreT = new HashSet<int>();
- var tempP = new HashSet<Procedure>();
- foreach (var proc in
- program.Procedures
- .Where(proc => QKeyValue.FindBoolAttribute(proc.Attributes, "template")))
- {
- tempP.Add(proc);
- foreach (var ens in proc.Ensures.OfType<Ensures>())
- {
- var pos = QKeyValue.FindBoolAttribute(ens.Attributes, "positive");
-
- if (QKeyValue.FindBoolAttribute(ens.Attributes, "pre"))
- {
- preT.Add(new NamedExpr(null, ens.Condition));
- if (pos) posPreT.Add(preT.Count - 1);
- }
-
- if (QKeyValue.FindBoolAttribute(ens.Attributes, "post"))
- postT.Add(new NamedExpr(null, ens.Condition));
-
- var s = QKeyValue.FindStringAttribute(ens.Attributes, "pre");
- if (s != null)
- {
- preT.Add(new NamedExpr(s, ens.Condition));
- if (pos) posPreT.Add(preT.Count - 1);
- }
-
- s = QKeyValue.FindStringAttribute(ens.Attributes, "post");
- if (s != null)
- postT.Add(new NamedExpr(s, ens.Condition));
- }
- }
-
- program.RemoveTopLevelDeclarations(decl => tempP.Contains(decl));
- var upperPreds = new Dictionary<string, List<Expr>>();
-
- foreach (var impl in program.Implementations)
- {
- PrePreds.Add(impl.Name, new List<NamedExpr>());
- PostPreds.Add(impl.Name, new List<NamedExpr>());
- PosPrePreds.Add(impl.Name, new HashSet<int>());
-
- // Add "false" as the first post predicate
- //PostPreds[impl.Name].Add(new NamedExpr(Expr.False));
-
- preT.Iter(e => PrePreds[impl.Name].Add(e));
- postT.Iter(e => PostPreds[impl.Name].Add(e));
- PosPrePreds[impl.Name].UnionWith(posPreT);
-
- // Pick up per-procedure pre-post
- var nens = new List<Ensures>();
- foreach (var ens in impl.Proc.Ensures.OfType<Ensures>())
- {
- string s = null;
- var pos = QKeyValue.FindBoolAttribute(ens.Attributes, "positive");
-
- if (QKeyValue.FindBoolAttribute(ens.Attributes, "pre"))
- {
- PrePreds[impl.Name].Add(new NamedExpr(ens.Condition));
- PosPrePreds[impl.Name].Add(PrePreds[impl.Name].Count - 1);
- }
- else if (QKeyValue.FindBoolAttribute(ens.Attributes, "post"))
- {
- PostPreds[impl.Name].Add(new NamedExpr(ens.Condition));
- }
- else if ((s = QKeyValue.FindStringAttribute(ens.Attributes, "pre")) != null)
- {
- PrePreds[impl.Name].Add(new NamedExpr(s, ens.Condition));
- PosPrePreds[impl.Name].Add(PrePreds[impl.Name].Count - 1);
- }
- else if ((s = QKeyValue.FindStringAttribute(ens.Attributes, "post")) != null)
- {
- PostPreds[impl.Name].Add(new NamedExpr(s, ens.Condition));
- }
- else if (QKeyValue.FindBoolAttribute(ens.Attributes, "upper"))
- {
- var key = impl.Name;
- if (!upperPreds.ContainsKey(key))
- upperPreds.Add(key, new List<Expr>());
- upperPreds[key].Add(ens.Condition);
- }
- else
- {
- nens.Add(ens);
- }
- }
- impl.Proc.Ensures = nens;
- }
-
- foreach (var tup in upperPreds)
- {
- var procName = tup.Key;
- var candidates = tup.Value;
- if (!candidates.Any()) continue;
-
- var strToPost = new Dictionary<string, int>();
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- strToPost.Add(PostPreds[procName][i].expr.ToString(), i);
- }
-
- foreach (var expr in candidates)
- {
- if (strToPost.ContainsKey(expr.ToString()))
- {
- var key = Tuple.Create(procName, strToPost[expr.ToString()]);
- if (!UpperCandidates.ContainsKey(key))
- UpperCandidates.Add(key, new List<PredicateAbsDisjunct>());
- UpperCandidates[key].Add(new PredicateAbsDisjunct(true, procName));
- }
- else
- {
- // Try parsing the expression as (pre-conjunct ==> post-pred)
- var parsed = ParseExpr(expr, procName);
- if (parsed != null && strToPost.ContainsKey(parsed.Item2.ToString()))
- {
- var key = Tuple.Create(procName, strToPost[parsed.Item2.ToString()]);
- if (!UpperCandidates.ContainsKey(key))
- UpperCandidates.Add(key, new List<PredicateAbsDisjunct>());
- UpperCandidates[key].Add(parsed.Item1);
- }
- }
- }
-
- }
- //Console.WriteLine("Running Abstract Houdini");
- //PostPreds.Iter(expr => Console.WriteLine("\tPost: {0}", expr));
- //PrePreds.Iter(expr => Console.WriteLine("\tPre: {0}", expr));
- }
-
- // Try parsing the expression as (pre-conjunct ==> post-pred)
- private static Tuple<PredicateAbsDisjunct, Expr> ParseExpr(Expr expr, string procName)
- {
- Expr postExpr = null;
- Expr preExpr = null;
-
- // Decompose outer Implies
- var nexpr = expr as NAryExpr;
- if (nexpr != null && (nexpr.Fun is BinaryOperator)
- && (nexpr.Fun as BinaryOperator).Op == BinaryOperator.Opcode.Imp
- && (nexpr.Args.Count == 2))
- {
- postExpr = nexpr.Args[1];
- preExpr = nexpr.Args[0];
- }
- else
- {
- if(CommandLineOptions.Clo.Trace) Console.WriteLine("Failed to parse {0} (ignoring)", expr);
- return null;
- }
-
-
- var atoms = DecomposeOuterAnd(preExpr);
- var pos = new HashSet<int>();
- var neg = new HashSet<int>();
-
- foreach (var atom in atoms)
- {
- var index = PrePreds[procName].FindIndex(ne => ne.expr.ToString() == atom.ToString());
- if (index == -1)
- {
- index = PrePreds[procName].FindIndex(ne => Expr.Not(ne.expr).ToString() == atom.ToString());
- if (index == -1)
- {
- if(CommandLineOptions.Clo.Trace) Console.WriteLine("Failed to parse {0} (ignoring)", atom);
- return null;
- }
- else
- {
- neg.Add(index);
- }
- }
- else
- {
- pos.Add(index);
- }
- }
-
- var conj = new PredicateAbsConjunct(pos, neg, procName);
- var conjls = new List<PredicateAbsConjunct>();
- conjls.Add(conj);
-
- return Tuple.Create(new PredicateAbsDisjunct(conjls, procName), postExpr);
- }
-
- // blah && blah ==> {blah, blah}
- static IEnumerable<Expr> DecomposeOuterAnd(Expr expr)
- {
- var ret = new List<Expr>();
-
- var nexpr = expr as NAryExpr;
- if (nexpr == null
- || !(nexpr.Fun is BinaryOperator)
- || (nexpr.Fun as BinaryOperator).Op != BinaryOperator.Opcode.And)
- {
- ret.Add(expr);
- }
- else
- {
- foreach (Expr a in nexpr.Args)
- ret.AddRange(DecomposeOuterAnd(a));
- }
-
- return ret;
- }
-
-
- private Model.Element Eval(Expr expr, Dictionary<string, Model.Element> state)
- {
- if (expr is LiteralExpr)
- {
- return ToElem((expr as LiteralExpr).Val);
- }
-
- if (expr is IdentifierExpr)
- {
- return LookupVariable((expr as IdentifierExpr).Name, state, false);
- }
-
- if (expr is OldExpr)
- {
- var ide = (expr as OldExpr).Expr as IdentifierExpr;
- Debug.Assert(ide != null);
-
- return LookupVariable(ide.Name, state, true);
- }
-
- if (expr is NAryExpr)
- {
- var nary = expr as NAryExpr;
- if (nary.Fun is UnaryOperator)
- {
- return ToElem((nary.Fun as UnaryOperator).Evaluate(ToValue(Eval(nary.Args[0], state))));
- }
- if (nary.Fun is BinaryOperator)
- {
- return ToElem((nary.Fun as BinaryOperator).Evaluate(ToValue(Eval(nary.Args[0], state)), ToValue(Eval(nary.Args[1], state))));
- }
- if (nary.Fun is MapSelect && nary.Args.Count == 2)
- {
- var index = Eval(nary.Args[1], state);
- var map = Eval(nary.Args[0], state) as Model.Array;
- Debug.Assert(map != null, "Variable of map type must have an Array-typed value");
- var ret = map.Value.TryEval(index as Model.Element);
- if (ret == null) ret = map.Value.Else;
- Debug.Assert(ret != null);
- return ret;
- }
- Debug.Assert(false, "No other op is handled");
- }
- throw new NotImplementedException(string.Format("Expr of type {0} is not handled", expr.GetType().ToString()));
- }
-
- private Model.Element LookupVariable(string v, Dictionary<string, Model.Element> state, bool tryOld)
- {
- if (tryOld)
- {
- var oldv = string.Format("old({0})", v);
- if (state.ContainsKey(oldv))
- {
- return state[oldv];
- }
- throw new AbsHoudiniInternalError("Cannot handle this case");
- }
-
- if (state.ContainsKey(v))
- {
- return state[v];
- }
-
- /*
- if (boolConstants.Contains(v))
- {
- // value of this constant is immaterial, return true
- return model.MkElement("true");
- }
- */
-
- throw new AbsHoudiniInternalError("Cannot handle this case");
- }
-
- private static VCExpr ToVcVar(string v, Dictionary<string, VCExpr> incarnations, bool tryOld)
- {
- if (tryOld)
- {
- var oldv = string.Format("old({0})", v);
- if (incarnations.ContainsKey(oldv))
- {
- return incarnations[oldv];
- }
- throw new AbsHoudiniInternalError("Cannot handle this case");
- }
-
- if (incarnations.ContainsKey(v))
- {
- return incarnations[v];
- }
-
- throw new AbsHoudiniInternalError("Cannot handle this case");
- }
-
- public static void FindUnsatPairs(VCExpressionGenerator gen, ProverInterface prover)
- {
- unsatPrePredPairs = new HashSet<Tuple<string, int, int, bool, bool>>();
- unsatPostPredPairs = new HashSet<Tuple<string, int, int, bool, bool>>();
-
- var cachePos = new HashSet<Tuple<string, string>>();
- var cacheNeg = new HashSet<Tuple<string, string>>();
- var record = new Action<object, string, int, int, bool, bool>(
- (map, proc, e1, e2, p1, p2) => {
- var key = Tuple.Create(proc, e1, e2, p1, p2);
- if (map == PrePreds)
- unsatPrePredPairs.Add(key);
- else
- unsatPostPredPairs.Add(key);
- }
- );
-
- var predMaps = new List<Dictionary<string, List<NamedExpr>>>();
- predMaps.Add(PrePreds); predMaps.Add(PostPreds);
-
- foreach (var map in predMaps)
- {
- foreach (var proc in map.Keys)
- {
- for (int i = 0; i < 2 * map[proc].Count(); i++)
- {
- var p1 = (i % 2); // polarity
- var e1 = map[proc][i / 2].expr;
- if (p1 == 0) e1 = Expr.Not(e1);
-
- for (int j = 2 * ((i / 2) + 1); j < 2 * map[proc].Count(); j++)
- {
- var p2 = (j % 2); // polarity
- var e2 = map[proc][j / 2].expr;
- if (p2 == 0) e2 = Expr.Not(e2);
-
- var key = Tuple.Create(e1.ToString(), e2.ToString());
- if (cachePos.Contains(key))
- {
- record(map, proc, i / 2, j / 2, p1 == 1, p2 == 1);
- continue;
- }
- else if (cacheNeg.Contains(key))
- {
- continue;
- }
-
- if (!CheckIfUnsat(e1, e2, gen, prover))
- {
- cacheNeg.Add(key);
- continue;
- }
- cachePos.Add(key);
- record(map, proc, i / 2, j / 2, p1 == 1, p2 == 1);
-
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Proved UNSAT: {0} {1}", e1, e2);
- }
- }
- }
- }
- }
-
- // Is a ^ b UNSAT?
- private static bool CheckIfUnsat(Expr a, Expr b, VCExpressionGenerator gen, ProverInterface prover)
- {
- var gatherLitA = new GatherLiterals();
- var gatherLitB = new GatherLiterals();
-
- gatherLitA.Visit(a);
- gatherLitB.Visit(b);
-
- var seta = new HashSet<Variable>();
- var setb = new HashSet<Variable>();
- gatherLitA.literals.Iter(tup => seta.Add(tup.Item1));
- gatherLitB.literals.Iter(tup => setb.Add(tup.Item1));
- seta.IntersectWith(setb);
- if (!seta.Any()) return false;
-
- // Create fresh variables
- return CheckIfUnsat(Expr.And(a, b), gen, prover);
- }
-
- // Is a UNSAT?
- private static bool CheckIfUnsat(Expr a, VCExpressionGenerator gen, ProverInterface prover)
- {
- var gatherLitA = new GatherLiterals();
- gatherLitA.Visit(a);
-
- // Create fresh variables
- var counter = 0;
- var incarnations = new Dictionary<string, VCExpr>();
- foreach (var literal in gatherLitA.literals)
- {
- if (incarnations.ContainsKey(literal.Item2.ToString()))
- continue;
-
- //if(!literal.Item1.TypedIdent.Type.IsInt && !literal.Item1.TypedIdent.Type.IsBool)
- var v = gen.Variable("UNSATCheck" + counter, literal.Item1.TypedIdent.Type);
- incarnations.Add(literal.Item2.ToString(), v);
- counter++;
- }
-
- var vc1 = ToVcExpr(a, incarnations, gen);
- var vc = gen.LabelPos("Temp", vc1);
-
- // check
- prover.AssertAxioms();
- prover.Push();
- prover.Assert(vc, true);
- prover.Check();
- var outcome = prover.CheckOutcomeCore(new AbstractHoudiniErrorReporter());
- prover.Pop();
-
- if (outcome == ProverInterface.Outcome.Valid)
- return true;
- return false;
- }
-
-
- class GatherLiterals : ReadOnlyVisitor
- {
- public List<Tuple<Variable, Expr>> literals;
- bool inOld;
-
- public GatherLiterals()
- {
- literals = new List<Tuple<Variable, Expr>>();
- inOld = false;
- }
-
- public override Expr VisitOldExpr(OldExpr node)
- {
- var prev = inOld;
- inOld = true;
- var ret = base.VisitOldExpr(node);
- inOld = prev;
- return ret;
- }
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node)
- {
- if (inOld)
- literals.Add(Tuple.Create(node.Decl, new OldExpr(Token.NoToken, node) as Expr));
- else
- literals.Add(Tuple.Create(node.Decl, node as Expr));
-
- return node;
- }
- }
-
- private object ToValue(Model.Element elem)
- {
- if (elem is Model.Integer)
- {
- return Microsoft.Basetypes.BigNum.FromInt((elem as Model.Integer).AsInt());
- }
- if (elem is Model.Boolean)
- {
- return (elem as Model.Boolean).Value;
- }
- if (elem is Model.DatatypeValue && (elem as Model.DatatypeValue).Arguments.Length == 1 &&
- (elem as Model.DatatypeValue).ConstructorName == "-" &&
- (elem as Model.DatatypeValue).Arguments[0] is Model.Integer)
- {
- // negative number as "-" @ int
- return Microsoft.Basetypes.BigNum.FromInt(-1 * ((elem as Model.DatatypeValue).Arguments[0] as Model.Integer).AsInt());
- }
- throw new NotImplementedException("Cannot yet handle this Model.Element type");
- }
-
- private Model.Element ToElem(object val)
- {
- if (val is bool || val is int || val is Basetypes.BigNum)
- return model.MkElement(val.ToString());
- throw new NotImplementedException("Cannot yet handle this value type");
- }
-
- // replace v by old(v)
- private static Expr MakeOld(Expr expr)
- {
- var substalways = new Substitution(v => new OldExpr(Token.NoToken, Expr.Ident(v)));
- var substold = new Substitution(v => Expr.Ident(v));
-
- return Substituter.ApplyReplacingOldExprs(substalways, substold, expr);
- }
-
- private static Expr ToExpr(Expr expr, Func<string, Expr> always, Func<string, Expr> forold)
- {
- var substalways = new Substitution(v =>
- {
- var ret = always(v.Name);
- if (ret != null) return ret;
- else return Expr.Ident(v);
- });
- var substold = new Substitution(v =>
- {
- var ret = forold(v.Name);
- if (ret != null) return ret;
- else return new OldExpr(Token.NoToken, Expr.Ident(v));
- });
-
- return Substituter.ApplyReplacingOldExprs(substalways, substold, expr);
- }
-
- private static VCExpr ToVcExpr(Expr expr, Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen)
- {
- if (expr is LiteralExpr)
- {
- var val = (expr as LiteralExpr).Val;
- if (val is bool)
- {
- if ((bool)val)
- {
- return VCExpressionGenerator.True;
- }
- else
- {
- return VCExpressionGenerator.False;
- }
- }
- else if (val is Microsoft.Basetypes.BigNum)
- {
- return gen.Integer((Microsoft.Basetypes.BigNum)val);
- }
-
- throw new NotImplementedException("Cannot handle literals of this type");
- }
-
- if (expr is IdentifierExpr)
- {
- return ToVcVar((expr as IdentifierExpr).Name, incarnations, false);
- }
-
- if (expr is OldExpr)
- {
- var ide = (expr as OldExpr).Expr as IdentifierExpr;
- Debug.Assert(ide != null);
-
- return ToVcVar(ide.Name, incarnations, true);
- }
-
- if (expr is NAryExpr)
- {
- var nary = expr as NAryExpr;
- if (nary.Fun is UnaryOperator)
- {
- if ((nary.Fun as UnaryOperator).Op == UnaryOperator.Opcode.Not)
- return gen.Not(ToVcExpr(nary.Args[0], incarnations, gen));
- else if ((nary.Fun as UnaryOperator).Op == UnaryOperator.Opcode.Neg)
- return gen.Function(VCExpressionGenerator.SubIOp, gen.Integer(Basetypes.BigNum.FromInt(0)), ToVcExpr(nary.Args[0], incarnations, gen));
- else
- Debug.Assert(false, "No other unary op is handled");
- }
- if (nary.Fun is BinaryOperator)
- {
- return gen.Function(Translate(nary.Fun as BinaryOperator), ToVcExpr(nary.Args[0], incarnations, gen), ToVcExpr(nary.Args[1], incarnations, gen));
- }
- if (nary.Fun is MapSelect && nary.Args.Count == 2)
- {
- return gen.Select(ToVcExpr(nary.Args[0], incarnations, gen), ToVcExpr(nary.Args[1], incarnations, gen));
- }
- Debug.Assert(false, "No other op is handled");
- }
- throw new NotImplementedException(string.Format("Expr of type {0} is not handled", expr.GetType().ToString()));
- }
-
- private static VCExprOp Translate(BinaryOperator op)
- {
- switch (op.Op)
- {
- case BinaryOperator.Opcode.Add:
- return VCExpressionGenerator.AddIOp;
- case BinaryOperator.Opcode.Sub:
- return VCExpressionGenerator.SubIOp;
- case BinaryOperator.Opcode.Mul:
- return VCExpressionGenerator.MulIOp;
- case BinaryOperator.Opcode.Div:
- return VCExpressionGenerator.DivIOp;
- case BinaryOperator.Opcode.Mod:
- return VCExpressionGenerator.ModOp;
- case BinaryOperator.Opcode.Eq:
- case BinaryOperator.Opcode.Iff:
- // we don't distinguish between equality and equivalence at this point
- return VCExpressionGenerator.EqOp;
- case BinaryOperator.Opcode.Neq:
- return VCExpressionGenerator.NeqOp;
- case BinaryOperator.Opcode.Lt:
- return VCExpressionGenerator.LtOp;
- case BinaryOperator.Opcode.Le:
- return VCExpressionGenerator.LeOp;
- case BinaryOperator.Opcode.Ge:
- return VCExpressionGenerator.GeOp;
- case BinaryOperator.Opcode.Gt:
- return VCExpressionGenerator.GtOp;
- case BinaryOperator.Opcode.Imp:
- return VCExpressionGenerator.ImpliesOp;
- case BinaryOperator.Opcode.And:
- return VCExpressionGenerator.AndOp;
- case BinaryOperator.Opcode.Or:
- return VCExpressionGenerator.OrOp;
- case BinaryOperator.Opcode.Subtype:
- return VCExpressionGenerator.SubtypeOp;
- default:
- Contract.Assert(false);
- throw new NotImplementedException();
- }
-
- }
-
- // If "false" is a post-predicate, then remove its "pre" constraint from all others, whenever possible
- public void Simplify()
- {
- // find "false"
- var findex = PostPreds[procName].FindIndex(ne => (ne.expr is LiteralExpr) && (ne.expr as LiteralExpr).IsFalse);
- if (findex < 0) return;
- if (value[findex].isTrue)
- {
- // procedure doesn't return
- for (int i = 0; i < value.Length; i++)
- if (i != findex) value[i] = new PredicateAbsDisjunct(false, procName);
- return;
- }
- if (value[findex].isFalse)
- return;
-
- for (int i = 0; i < value.Length; i++)
- if (i != findex) value[i].Subtract(value[findex]);
- }
-
- public HashSet<string> GetPredicates(Program program, VCExpressionGenerator gen, ProverInterface prover)
- {
- var ret = new HashSet<string>();
- if (isFalse) return ret;
- Simplify();
-
- // Find the free expressions
- var proc = program.Procedures.FirstOrDefault(p => p.Name == procName);
- Contract.Assert(proc != null);
- Expr freeSummary = Expr.True;
- foreach (var req in proc.Requires.OfType<Requires>().Where(req => req.Free))
- {
- freeSummary = Expr.And(freeSummary, MakeOld(req.Condition));
- }
- foreach (var ens in proc.Ensures.OfType<Ensures>().Where(ens => ens.Free))
- {
- freeSummary = Expr.And(freeSummary, ens.Condition);
- }
-
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- if (value[i].isFalse) continue;
- if (PostPreds[procName][i].expr is LiteralExpr && (PostPreds[procName][i].expr as LiteralExpr).IsFalse)
- continue;
-
- if (value[i].isTrue)
- ret.Add(PostPreds[procName][i].expr.ToString());
- else
- {
- foreach (var c in value[i].GetConjuncts())
- {
- var s = Expr.Imp(c.ToExpr(j => PrePreds[procName][j].expr), PostPreds[procName][i].expr);
- if (CheckIfUnsat(Expr.And(freeSummary, Expr.Not(s)), gen, prover))
- continue;
- ret.Add(s.ToString());
- }
- }
- }
- return ret;
- }
-
- public override string ToString()
- {
- var ret = "";
- if (isFalse) return "false";
- var first = true;
-
- for(int i = 0; i < PostPreds[procName].Count; i++)
- {
- if(value[i].isFalse) continue;
-
- if(value[i].isTrue)
- ret += string.Format("{0}{1}", first ? "" : " && ", PostPreds[procName][i]);
- else
- ret += string.Format("{0}({1} ==> {2})", first ? "" : " && ", value[i], PostPreds[procName][i]);
-
- first = false;
- }
- if (ret == "") ret = "true";
- return ret;
- }
-
-
- #region ISummaryElement Members
-
- public ISummaryElement Copy()
- {
- var ret = new PredicateAbs(procName);
- ret.isFalse = isFalse;
- ret.value = new PredicateAbsDisjunct[value.Length];
- for (int i = 0; i < value.Length; i++)
- ret.value[i] = value[i];
- return ret;
- }
-
- public ISummaryElement GetFlaseSummary(Program program, Implementation impl)
- {
- return new PredicateAbs(impl.Name);
- }
-
- public ISummaryElement GetTrueSummary(Program program, Implementation impl)
- {
- var ret = new PredicateAbs(impl.Name);
- ret.isFalse = false;
- for (int i = 0; i < PostPreds[this.procName].Count; i++) ret.value[i] = new PredicateAbsDisjunct(false, impl.Name);
-
- return ret;
- }
-
- public void Join(Dictionary<string, Model.Element> state, Model model)
- {
- PredicateAbs.model = model;
-
- // Evaluate each predicate on the state
- var prePredsVal = new bool[PrePreds[procName].Count];
- var postPredsVal = new bool[PostPreds[procName].Count];
-
- var indexSeq = new List<int>();
- for (int i = 0; i < PrePreds[procName].Count; i++) indexSeq.Add(i);
-
- for (int i = 0; i < PrePreds[procName].Count; i++)
- {
- var v = ToValue(Eval(PrePreds[procName][i].expr, state));
- Debug.Assert(v is bool);
- prePredsVal[i] = (bool)v;
- }
-
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- var v = ToValue(Eval(PostPreds[procName][i].expr, state));
- Debug.Assert(v is bool);
- postPredsVal[i] = (bool)v;
- }
-
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- // No hope for this post pred?
- if (!isFalse && value[i].isFalse) continue;
-
- var newDisj = new PredicateAbsDisjunct(true, procName);
- if (!postPredsVal[i])
- {
- newDisj = new PredicateAbsDisjunct(indexSeq.Where(j => !prePredsVal[j]), indexSeq.Where(j => prePredsVal[j] && !PosPrePreds[procName].Contains(j)), procName);
- }
-
- if (isFalse)
- value[i] = newDisj;
- else
- value[i] = PredicateAbsDisjunct.And(value[i], newDisj);
- }
-
- /*
- // do beta(model)
- var that = new PredicateAbsDisjunct[PostPreds[procName].Count];
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- if (postPredsVal[i])
- that[i] = new PredicateAbsDisjunct(true, procName);
- else if (i == 0)
- {
- Debug.Assert(PostPreds[procName][0].ToString() == "false");
- var newDisj = new PredicateAbsDisjunct(true, procName);
- newDisj = new PredicateAbsDisjunct(indexSeq.Where(j => !prePredsVal[j]), indexSeq.Where(j => prePredsVal[j]), procName);
- that[i] = newDisj;
- }
- else
- {
- // false
- that[i] = new PredicateAbsDisjunct(false, procName);
- }
- }
-
- // Do join
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- if (isFalse)
- value[i] = that[i];
- else
- {
- if (i == 0)
- value[i] = PredicateAbsDisjunct.And(value[i], that[i]);
- else
- {
- var c1 = PredicateAbsDisjunct.And(value[i], that[i]);
- var c2 = PredicateAbsDisjunct.And(value[i], that[0]);
- var c3 = PredicateAbsDisjunct.And(value[0], that[i]);
- value[i] = PredicateAbsDisjunct.Or(c1, c2);
- value[i] = PredicateAbsDisjunct.Or(value[i], c3);
- }
- }
- }
- */
- isFalse = false;
-
- //Console.WriteLine("Result of Join: {0}", this.ToString());
- }
-
- // Precondition: the upper guys are just {true/false/upper-candidate} ==> post-pred
- public void Meet(ISummaryElement iother)
- {
- var other = iother as PredicateAbs;
- if (isFalse) return;
- if (other.isFalse)
- {
- isFalse = true;
- for (int i = 0; i < PostPreds[this.procName].Count; i++) value[i] = null;
- return;
- }
- Debug.Assert(this.procName == other.procName);
-
- for (int i = 0; i < PostPreds[this.procName].Count; i++)
- {
- value[i] = PredicateAbsDisjunct.Or(value[i], other.value[i]);
- }
- }
-
- public bool IsEqual(ISummaryElement other)
- {
- var that = other as PredicateAbs;
- if (isFalse && that.isFalse) return true;
- if (isFalse || that.isFalse) return false;
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- if (!PredicateAbsDisjunct.syntacticLessThan(value[i], that.value[i]) ||
- !PredicateAbsDisjunct.syntacticLessThan(that.value[i], value[i]))
- return false;
- }
- return true;
- }
-
- // Precondition: the upper guys are just {true/false/upper-candidate} ==> post-pred
- // Postcondition: the returned value is also of this form (for just one post-pred)
- public ISummaryElement AbstractConsequence(ISummaryElement iupper)
- {
- var upper = iupper as PredicateAbs;
-
- for (int i = 0; i < PostPreds[this.procName].Count; i++)
- {
- if (upper.value[i].isTrue) continue;
- if (!UpperCandidates.ContainsKey(Tuple.Create(procName, i))) continue;
-
- foreach (var candidate in UpperCandidates[Tuple.Create(procName, i)])
- {
- if (PredicateAbsDisjunct.syntacticLessThan(candidate, upper.value[i]))
- continue;
- if (!this.isFalse && !PredicateAbsDisjunct.syntacticLessThan(candidate, this.value[i]))
- continue;
-
- var ret = new PredicateAbs(this.procName);
- ret.isFalse = false;
- for (int j = 0; j < PostPreds[this.procName].Count; j++)
- ret.value[j] = new PredicateAbsDisjunct(false, this.procName);
-
- ret.value[i] = candidate;
-
- return ret;
- }
- }
-
- // Giveup: the abstract consequence is too difficult to compute
- return null;
- }
-
- public VCExpr GetSummaryExpr(Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen)
- {
- if (isFalse)
- return VCExpressionGenerator.False;
-
- var ret = VCExpressionGenerator.True;
-
- for(int i = 0; i < PostPreds[procName].Count; i++)
- {
- ret = gen.AndSimp(ret, gen.ImpliesSimp(value[i].ToVcExpr(j => ToVcExpr(PrePreds[procName][j].expr, incarnations, gen), gen), ToVcExpr(PostPreds[procName][i].expr, incarnations, gen)));
- }
-
- return ret;
- }
-
- public Expr GetSummaryExpr(Func<string, Expr> always, Func<string, Expr> forold)
- {
- if (isFalse)
- return Expr.False;
-
- Expr ret = Expr.True;
-
- for (int i = 0; i < PostPreds[procName].Count; i++)
- {
- ret = Expr.And(ret, Expr.Imp(value[i].ToExpr(j => ToExpr(PrePreds[procName][j].expr, always, forold)), ToExpr(PostPreds[procName][i].expr, always, forold)));
- }
-
- return ret;
- }
-
- #endregion
- }
-
- public class PredicateAbsDisjunct
- {
- List<PredicateAbsConjunct> conjuncts;
- string ProcName;
- public bool isTrue {get; private set;}
- public bool isFalse
- {
- get
- {
- if (isTrue) return false;
- return conjuncts.Count == 0;
- }
- }
-
- public PredicateAbsDisjunct(bool isTrue, string ProcName)
- {
- this.isTrue = isTrue;
- this.ProcName = ProcName;
- conjuncts = new List<PredicateAbsConjunct>();
- }
-
- public PredicateAbsDisjunct(List<PredicateAbsConjunct> conjuncts, string ProcName)
- {
- isTrue = false;
- this.conjuncts = conjuncts;
- this.ProcName = ProcName;
- }
-
- // Disjunct of singleton conjuncts
- public PredicateAbsDisjunct(IEnumerable<int> pos, IEnumerable<int> neg, string ProcName)
- {
- this.ProcName = ProcName;
- conjuncts = new List<PredicateAbsConjunct>();
- isTrue = false;
- pos.Iter(p => conjuncts.Add(PredicateAbsConjunct.Singleton(p, true, ProcName)));
- neg.Iter(p => conjuncts.Add(PredicateAbsConjunct.Singleton(p, false, ProcName)));
- }
-
- // Does d1 describe a smaller set of states than d2? This is true when every conjunct of d1
- // is smaller than some conjunct of d2
- public static bool syntacticLessThan(PredicateAbsDisjunct d1, PredicateAbsDisjunct d2)
- {
- if (d2.isTrue) return true;
- if (d1.isTrue) return false;
- if (d1.isFalse) return true;
- if (d2.isFalse) return false;
-
- foreach (var c1 in d1.conjuncts)
- {
- if (d2.conjuncts.Any(c2 => PredicateAbsConjunct.syntacticLessThan(c1, c2)))
- continue;
- else
- return false;
- }
- return true;
- }
-
- public static PredicateAbsDisjunct And(PredicateAbsDisjunct v1, PredicateAbsDisjunct v2)
- {
- if (v1.isTrue) return v2;
- if (v2.isTrue) return v1;
-
- var result = new List<PredicateAbsConjunct>();
-
- foreach (var c1 in v1.conjuncts)
- {
- foreach (var c2 in v2.conjuncts)
- {
- var c = PredicateAbsConjunct.And(c1, c2);
- if (c.isFalse) continue;
- if (result.Any(cprime => c.implies(cprime))) continue;
- var tmp = new List<PredicateAbsConjunct>();
- tmp.Add(c);
- result.Where(cprime => !cprime.implies(c)).Iter(cprime => tmp.Add(cprime));
- result = tmp;
- }
- }
-
- return new PredicateAbsDisjunct(result, v1.ProcName);
- }
-
- public static PredicateAbsDisjunct Or(PredicateAbsDisjunct v1, PredicateAbsDisjunct v2)
- {
- if (v1.isTrue) return v1;
- if (v2.isTrue) return v2;
- if (v1.isFalse) return v2;
- if (v2.isFalse) return v1;
-
- var result = new List<PredicateAbsConjunct>();
- v1.conjuncts.Iter(c => result.Add(c));
-
- foreach (var c in v2.conjuncts)
- {
- if (result.Any(cprime => c.implies(cprime))) continue;
- var tmp = new List<PredicateAbsConjunct>();
- tmp.Add(c);
- result.Where(cprime => !cprime.implies(c)).Iter(cprime => tmp.Add(cprime));
- result = tmp;
- }
-
- return new PredicateAbsDisjunct(result, v1.ProcName);
- }
-
- public VCExpr ToVcExpr(Func<int, VCExpr> predToExpr, VCExpressionGenerator gen)
- {
- if (isTrue) return VCExpressionGenerator.True;
- var ret = VCExpressionGenerator.False;
- conjuncts.Iter(c => ret = gen.OrSimp(ret, c.ToVcExpr(predToExpr, gen)));
- return ret;
- }
-
- public Expr ToExpr(Func<int, Expr> predToExpr)
- {
- if (isTrue) return Expr.True;
- Expr ret = Expr.False;
- conjuncts.Iter(c => ret = Expr.Or(ret, c.ToExpr(predToExpr)));
- return ret;
- }
-
- public override string ToString()
- {
- if(isTrue)
- return "true";
- var ret = "";
- var first = true;
- foreach (var c in conjuncts)
- {
- if (c.isFalse) continue;
- ret += string.Format("{0}{1}", first ? "" : " || ", c);
- first = false;
- }
- return ret;
- }
-
- public void Subtract(PredicateAbsDisjunct that)
- {
- var ncon = new List<PredicateAbsConjunct>();
- foreach (var c1 in conjuncts)
- {
- if (that.conjuncts.Any(c2 => c1.implies(c2)))
- continue;
- ncon.Add(c1);
- }
- conjuncts = ncon;
- }
-
- public IEnumerable<PredicateAbsConjunct> GetConjuncts()
- {
- return conjuncts;
- }
-
- }
-
- public class PredicateAbsConjunct
- {
- static int ConjunctBound = 3;
-
- public bool isFalse { get; private set; }
- HashSet<int> posPreds;
- HashSet<int> negPreds;
- string ProcName;
-
- public static void Initialize(int bound)
- {
- ConjunctBound = bound;
- }
-
- private void Normalize()
- {
- if (posPreds.Intersect(negPreds).Any() || negPreds.Intersect(posPreds).Any() || (posPreds.Count + negPreds.Count > ConjunctBound))
- {
- isFalse = true;
- posPreds = new HashSet<int>();
- negPreds = new HashSet<int>();
- }
- }
-
- // Do this step only once in a while?
- private void StrongNormalize()
- {
- if (isFalse) return;
-
- var candidates = new List<Tuple<int, bool>>();
- posPreds.Iter(p => candidates.Add(Tuple.Create(p, true)));
- negPreds.Iter(p => candidates.Add(Tuple.Create(p, false)));
- var drop = new HashSet<int>();
- for (int i = 0; i < candidates.Count; i++)
- {
- for (int j = 0; j < candidates.Count; j++)
- {
- if (i == j) continue;
-
- var key = Tuple.Create(ProcName, candidates[i].Item1, candidates[j].Item1,
- candidates[i].Item2, candidates[j].Item2);
- if (PredicateAbs.unsatPrePredPairs.Contains(key))
- {
- isFalse = true;
- posPreds = new HashSet<int>();
- negPreds = new HashSet<int>();
- return;
- }
-
- key = Tuple.Create(ProcName, candidates[i].Item1, candidates[j].Item1,
- candidates[i].Item2, !candidates[j].Item2);
-
- if (PredicateAbs.unsatPrePredPairs.Contains(key))
- drop.Add(candidates[j].Item1);
- }
- }
-
- posPreds.ExceptWith(drop);
- negPreds.ExceptWith(drop);
- }
-
- public PredicateAbsConjunct(bool isFalse, string ProcName)
- {
- posPreds = new HashSet<int>();
- negPreds = new HashSet<int>();
- this.isFalse = isFalse;
- this.ProcName = ProcName;
- }
-
- // do we know that c1 is surely less than or equal to c2? That is, c1 describes a smaller
- // concretization. We check that c2 is a sub-conjunct of c1
- public static bool syntacticLessThan(PredicateAbsConjunct c1, PredicateAbsConjunct c2)
- {
- if (c1.isFalse) return true;
- if (c2.isFalse) return false;
- return (c2.posPreds.IsSubsetOf(c1.posPreds) && c2.negPreds.IsSubsetOf(c1.negPreds));
- }
-
- public static PredicateAbsConjunct Singleton(int v, bool isPositive, string ProcName)
- {
- if (isPositive)
- return new PredicateAbsConjunct(new int[] { v }, new HashSet<int>(), ProcName);
- else
- return new PredicateAbsConjunct(new HashSet<int>(), new int[] { v }, ProcName);
- }
-
- public PredicateAbsConjunct(IEnumerable<int> pos, IEnumerable<int> neg, string ProcName)
- {
- isFalse = false;
- posPreds = new HashSet<int>(pos);
- negPreds = new HashSet<int>(neg);
- this.ProcName = ProcName;
- Normalize();
- }
-
- public static PredicateAbsConjunct And(PredicateAbsConjunct v1, PredicateAbsConjunct v2)
- {
- if (v1.isFalse || v2.isFalse) return new PredicateAbsConjunct(true, v1.ProcName);
- var ret = new PredicateAbsConjunct(v1.posPreds.Union(v2.posPreds), v1.negPreds.Union(v2.negPreds), v1.ProcName);
- ret.StrongNormalize();
- return ret;
- }
-
- public bool implies(PredicateAbsConjunct v)
- {
- if (isFalse) return true;
- if (v.isFalse) return false;
- return (posPreds.IsSupersetOf(v.posPreds) && negPreds.IsSupersetOf(v.negPreds));
- }
-
- public VCExpr ToVcExpr(Func<int, VCExpr> predToExpr, VCExpressionGenerator gen)
- {
- if (isFalse) return VCExpressionGenerator.False;
- var ret = VCExpressionGenerator.True;
- posPreds.Iter(p => ret = gen.AndSimp(ret, predToExpr(p)));
- negPreds.Iter(p => ret = gen.AndSimp(ret, gen.Not(predToExpr(p))));
- return ret;
- }
-
- public Expr ToExpr(Func<int, Expr> predToExpr)
- {
- if (isFalse) return Expr.False;
- Expr ret = Expr.True;
- var pp = posPreds.ToList(); pp.Sort();
- var np = negPreds.ToList(); np.Sort();
- pp.Iter(p => ret = Expr.And(ret, predToExpr(p)));
- np.Iter(p => ret = Expr.And(ret, Expr.Not(predToExpr(p))));
- return ret;
- }
-
- public override string ToString()
- {
- if (isFalse)
- return "false";
-
- var ret = "";
- var first = true;
- foreach (var p in posPreds)
- {
- ret += string.Format("{0}{1}", first ? "" : " && ", PredicateAbs.PrePreds[ProcName][p]);
- first = false;
- }
- foreach (var p in negPreds)
- {
- ret += string.Format("{0}!{1}", first ? "" : " && ", PredicateAbs.PrePreds[ProcName][p]);
- first = false;
- }
- return ret;
- }
- }
-
- class FindSummaryPred : MutatingVCExprVisitor<bool>
- {
- public List<Tuple<string, bool, VCExprVar, VCExprNAry>> summaryPreds;
- int assertId;
- private static int CounterId = 0;
-
- public FindSummaryPred(VCExpressionGenerator gen, int assertId)
- : base(gen)
- {
- summaryPreds = new List<Tuple<string, bool, VCExprVar, VCExprNAry>>();
- this.assertId = assertId;
- }
-
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
- List<VCExpr/*!*/>/*!*/ newSubExprs,
- // has any of the subexpressions changed?
- bool changed,
- bool arg)
- {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr ret;
- if (changed)
- ret = Gen.Function(originalNode.Op,
- newSubExprs, originalNode.TypeArguments);
- else
- ret = originalNode;
-
- VCExprNAry retnary = ret as VCExprNAry;
- if (retnary == null) return ret;
- var op = retnary.Op as VCExprBoogieFunctionOp;
-
- if (op == null)
- {
- var lop = retnary.Op as VCExprLabelOp;
- if (lop == null) return ret;
- if (lop.pos) return ret;
- if (!lop.label.Equals("@" + assertId.ToString())) return ret;
-
- //var subexpr = retnary[0] as VCExprNAry;
- //if (subexpr == null) return ret;
- //op = subexpr.Op as VCExprBoogieFunctionOp;
- //if (op == null) return ret;
-
- var subexpr = retnary[0] as VCExprVar;
- if (subexpr == null) return ret;
- if (!subexpr.Name.StartsWith("AbstractHoudiniControl")) return ret;
-
- for (int i = 0; i < summaryPreds.Count; i++)
- {
- if (summaryPreds[i].Item3 == subexpr)
- summaryPreds[i] = Tuple.Create(summaryPreds[i].Item1, true, summaryPreds[i].Item3, summaryPreds[i].Item4);
- }
- return ret;
- }
-
- string calleeName = op.Func.Name;
-
- if (!calleeName.EndsWith(AbstractHoudini.summaryPredSuffix))
- return ret;
-
- var controlConst = Gen.Variable("AbstractHoudiniControl" + CounterId, Microsoft.Boogie.Type.Bool);
- CounterId++;
-
- summaryPreds.Add(Tuple.Create(calleeName.Substring(0, calleeName.Length - AbstractHoudini.summaryPredSuffix.Length), false, controlConst, retnary));
-
- return controlConst;
- //return ret;
- }
-
- }
-
- class FindExistentialFunctions : MutatingVCExprVisitor<bool>
- {
- public List<Tuple<string, VCExprVar, VCExprNAry>> funcCalls;
- private HashSet<string> existentialFunctions;
- private static int CounterId = 0;
-
- public FindExistentialFunctions(VCExpressionGenerator gen, HashSet<string> existentialFunctions)
- : base(gen)
- {
- funcCalls = new List<Tuple<string, VCExprVar, VCExprNAry>>();
- this.existentialFunctions = existentialFunctions;
- }
-
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
- List<VCExpr/*!*/>/*!*/ newSubExprs,
- // has any of the subexpressions changed?
- bool changed,
- bool arg)
- {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr ret;
- if (changed)
- ret = Gen.Function(originalNode.Op,
- newSubExprs, originalNode.TypeArguments);
- else
- ret = originalNode;
-
- VCExprNAry retnary = ret as VCExprNAry;
- if (retnary == null) return ret;
- var op = retnary.Op as VCExprBoogieFunctionOp;
- if (op == null) return ret;
-
- string calleeName = op.Func.Name;
-
- if (!existentialFunctions.Contains(calleeName))
- return ret;
-
- var controlConst = Gen.Variable("AbsHoudiniControl" + CounterId, Microsoft.Boogie.Type.Bool);
- CounterId++;
-
- funcCalls.Add(Tuple.Create(calleeName, controlConst, retnary));
-
- return controlConst;
- }
-
- }
-
- class AbstractHoudiniErrorReporter : ProverInterface.ErrorHandler
- {
- public Model model;
-
- public AbstractHoudiniErrorReporter()
- {
- model = null;
- }
-
- public override void OnModel(IList<string> labels, Model model, ProverInterface.Outcome proverOutcome)
- {
- Debug.Assert(model != null);
- if(CommandLineOptions.Clo.PrintErrorModel >= 1) model.Write(Console.Out);
- this.model = model;
- }
- }
-
- public class AbsHoudiniInternalError : System.ApplicationException
- {
- public AbsHoudiniInternalError(string msg) : base(msg) { }
-
- };
-
- public class SimpleUtil
- {
- // Constructs a mapping from procedure names to the implementation
- public static Dictionary<string, Implementation> nameImplMapping(Program p)
- {
- var m = new Dictionary<string, Implementation>();
- foreach (var impl in p.Implementations)
- {
- m.Add(impl.Name, impl);
- }
-
- return m;
- }
-
- // is "assert true"?
- public static bool isAssertTrue(Cmd cmd)
- {
- var acmd = cmd as AssertCmd;
- if (acmd == null) return false;
- var le = acmd.Expr as LiteralExpr;
- if (le == null) return false;
- if (le.IsTrue) return true;
- return false;
- }
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Boogie;
+using Microsoft.Boogie.VCExprAST;
+using VC;
+using Outcome = VC.VCGen.Outcome;
+using Bpl = Microsoft.Boogie;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.GraphUtil;
+
+namespace Microsoft.Boogie.Houdini {
+
+ public class AbsHoudini
+ {
+ Dictionary<string, Function> existentialFunctions;
+ Program program;
+ Dictionary<string, Implementation> name2Impl;
+ Dictionary<string, VCExpr> impl2VC;
+ Dictionary<string, List<Tuple<string, Function, NAryExpr>>> impl2FuncCalls;
+ // constant -> the naryexpr that it replaced
+ Dictionary<string, NAryExpr> constant2FuncCall;
+
+ // function -> its abstract value
+ Dictionary<string, IAbstractDomain> function2Value;
+
+ // impl -> functions assumed/asserted
+ Dictionary<string, HashSet<string>> impl2functionsAsserted, impl2functionsAssumed;
+
+ // funtions -> impls where assumed/asserted
+ Dictionary<string, HashSet<string>> function2implAssumed, function2implAsserted;
+
+ // impl -> handler, collector
+ Dictionary<string, Tuple<ProverInterface.ErrorHandler, AbsHoudiniCounterexampleCollector>> impl2ErrorHandler;
+
+ // Essentials: VCGen, Prover
+ VCGen vcgen;
+ ProverInterface prover;
+
+ // Stats
+ TimeSpan proverTime;
+ int numProverQueries;
+
+ public AbsHoudini(Program program, IAbstractDomain defaultElem)
+ {
+ this.program = program;
+ this.impl2VC = new Dictionary<string, VCExpr>();
+ this.impl2FuncCalls = new Dictionary<string, List<Tuple<string, Function, NAryExpr>>>();
+ this.existentialFunctions = new Dictionary<string, Function>();
+ this.name2Impl = new Dictionary<string, Implementation>();
+ this.impl2functionsAsserted = new Dictionary<string, HashSet<string>>();
+ this.impl2functionsAssumed = new Dictionary<string, HashSet<string>>();
+ this.function2implAsserted = new Dictionary<string, HashSet<string>>();
+ this.function2implAssumed = new Dictionary<string, HashSet<string>>();
+ this.impl2ErrorHandler = new Dictionary<string, Tuple<ProverInterface.ErrorHandler, AbsHoudiniCounterexampleCollector>>();
+ this.constant2FuncCall = new Dictionary<string, NAryExpr>();
+
+ // Find the existential functions
+ foreach (var func in program.Functions
+ .Where(f => QKeyValue.FindBoolAttribute(f.Attributes, "existential")))
+ existentialFunctions.Add(func.Name, func);
+
+ this.function2Value = new Dictionary<string, IAbstractDomain>();
+ foreach (var func in existentialFunctions.Values)
+ {
+ // Find if the function wishes to use a specific abstract domain
+ var domain = QKeyValue.FindStringAttribute(func.Attributes, "absdomain");
+ if (domain == null)
+ {
+ function2Value[func.Name] = defaultElem.Bottom();
+ }
+ else
+ {
+ function2Value[func.Name] = AbstractDomainFactory.GetInstance(domain);
+ }
+ }
+ existentialFunctions.Keys.Iter(f => function2implAssumed.Add(f, new HashSet<string>()));
+ existentialFunctions.Keys.Iter(f => function2implAsserted.Add(f, new HashSet<string>()));
+
+ // type check
+ existentialFunctions.Values.Iter(func =>
+ {
+ if (func.OutParams.Count != 1 || !func.OutParams[0].TypedIdent.Type.IsBool)
+ throw new AbsHoudiniInternalError(string.Format("Existential function {0} must return bool", func.Name));
+ if(func.Body != null)
+ throw new AbsHoudiniInternalError(string.Format("Existential function {0} should not have a body", func.Name));
+ var args = new List<Type>();
+ func.InParams.Iter(v => args.Add(v.TypedIdent.Type));
+ string msg = "";
+ if (!function2Value[func.Name].TypeCheck(args, out msg))
+ throw new AbsHoudiniInternalError("TypeError: " + msg);
+ });
+
+ //if (CommandLineOptions.Clo.ProverKillTime > 0)
+ // CommandLineOptions.Clo.ProverOptions.Add(string.Format("TIME_LIMIT={0}", CommandLineOptions.Clo.ProverKillTime));
+
+ Inline();
+
+ this.vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List<Checker>());
+ this.prover = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, CommandLineOptions.Clo.ProverKillTime);
+
+ this.proverTime = TimeSpan.Zero;
+ this.numProverQueries = 0;
+
+ program.Implementations
+ .Where(impl => !impl.SkipVerification)
+ .Iter(impl => name2Impl.Add(impl.Name, impl));
+
+ // Let's do VC Gen (and also build dependencies)
+ name2Impl.Values.Iter(GenVC);
+ }
+
+ public VCGenOutcome ComputeSummaries()
+ {
+ var overallOutcome = new VCGenOutcome(ProverInterface.Outcome.Valid, new List<Counterexample>());
+
+ // Compute SCCs and determine a priority order for impls
+ var Succ = new Dictionary<string, HashSet<string>>();
+ var Pred = new Dictionary<string, HashSet<string>>();
+ name2Impl.Keys.Iter(s => Succ[s] = new HashSet<string>());
+ name2Impl.Keys.Iter(s => Pred[s] = new HashSet<string>());
+
+ foreach(var impl in name2Impl.Keys) {
+ Succ[impl] = new HashSet<string>();
+ impl2functionsAsserted[impl].Iter(f =>
+ function2implAssumed[f].Iter(succ =>
+ {
+ Succ[impl].Add(succ);
+ Pred[succ].Add(impl);
+ }));
+ }
+
+ var sccs = new StronglyConnectedComponents<string>(name2Impl.Keys,
+ new Adjacency<string>(n => Pred[n]),
+ new Adjacency<string>(n => Succ[n]));
+ sccs.Compute();
+
+ // impl -> priority
+ var impl2Priority = new Dictionary<string, int>();
+ int p = 0;
+ foreach (var scc in sccs)
+ {
+ foreach (var impl in scc)
+ {
+ impl2Priority.Add(impl, p);
+ p++;
+ }
+ }
+
+ var worklist = new SortedSet<Tuple<int, string>>();
+ name2Impl.Keys.Iter(k => worklist.Add(Tuple.Create(impl2Priority[k], k)));
+
+ while (worklist.Any())
+ {
+ var impl = worklist.First().Item2;
+ worklist.Remove(worklist.First());
+
+ var gen = prover.VCExprGen;
+ var terms = new List<Expr>();
+ foreach (var tup in impl2FuncCalls[impl])
+ {
+ var controlVar = tup.Item2;
+ var exprVars = tup.Item3;
+ var varList = new List<Expr>();
+ exprVars.Args.OfType<Expr>().Iter(v => varList.Add(v));
+
+ var args = new List<Expr>();
+ controlVar.InParams.Iter(v => args.Add(Expr.Ident(v)));
+ Expr term = Expr.Eq(new NAryExpr(Token.NoToken, new FunctionCall(controlVar), args),
+ function2Value[tup.Item1].Gamma(varList));
+
+ if (controlVar.InParams.Count != 0)
+ {
+ term = new ForallExpr(Token.NoToken, new List<Variable>(controlVar.InParams.ToArray()),
+ new Trigger(Token.NoToken, true, new List<Expr> { new NAryExpr(Token.NoToken, new FunctionCall(controlVar), args) }),
+ term);
+ }
+ terms.Add(term);
+ }
+ var env = Expr.BinaryTreeAnd(terms);
+
+ env.Typecheck(new TypecheckingContext((IErrorSink)null));
+ var envVC = prover.Context.BoogieExprTranslator.Translate(env);
+
+ var vc = gen.Implies(envVC, impl2VC[impl]);
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Verifying {0}: ", impl);
+ //Console.WriteLine("env: {0}", envVC);
+ var envFuncs = new HashSet<string>();
+ impl2FuncCalls[impl].Iter(tup => envFuncs.Add(tup.Item1));
+ envFuncs.Iter(f => PrintFunction(existentialFunctions[f]));
+ }
+
+ var handler = impl2ErrorHandler[impl].Item1;
+ var collector = impl2ErrorHandler[impl].Item2;
+ collector.Reset(impl);
+
+ var start = DateTime.Now;
+
+ prover.Push();
+ prover.Assert(gen.Not(vc), true);
+ prover.FlushAxiomsToTheoremProver();
+ prover.Check();
+ ProverInterface.Outcome proverOutcome = prover.CheckOutcomeCore(handler);
+
+ //prover.BeginCheck(impl, vc, handler);
+ //ProverInterface.Outcome proverOutcome = prover.CheckOutcomeCore(handler);
+
+ var inc = (DateTime.Now - start);
+ proverTime += inc;
+ numProverQueries++;
+
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Time taken = " + inc.TotalSeconds.ToString());
+
+ if (proverOutcome == ProverInterface.Outcome.TimeOut || proverOutcome == ProverInterface.Outcome.OutOfMemory)
+ {
+ // pick some function; make it true and keep going
+ bool changed = false;
+ foreach (var f in impl2functionsAsserted[impl])
+ {
+ function2Value[f] = function2Value[f].MakeTop(out changed);
+ if (changed) break;
+ }
+ if(!changed)
+ return new VCGenOutcome(proverOutcome, new List<Counterexample>());
+ }
+
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine(collector.numErrors > 0 ? "SAT" : "UNSAT");
+
+ if (collector.numErrors > 0)
+ {
+ var funcsChanged = collector.funcsChanged;
+ if (funcsChanged.Count == 0)
+ {
+ overallOutcome = new VCGenOutcome(ProverInterface.Outcome.Invalid, collector.errors);
+ break;
+ }
+
+ // propagate dependent guys back into the worklist, including self
+ var deps = new HashSet<string>();
+ deps.Add(impl);
+ funcsChanged.Iter(f => deps.UnionWith(function2implAssumed[f]));
+
+ deps.Iter(s => worklist.Add(Tuple.Create(impl2Priority[s], s)));
+ }
+
+ prover.Pop();
+ }
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Prover time = {0}", proverTime.TotalSeconds.ToString("F2"));
+ Console.WriteLine("Number of prover queries = " + numProverQueries);
+ }
+
+ if (CommandLineOptions.Clo.PrintAssignment)
+ {
+ // Print the answer
+ existentialFunctions.Values.Iter(PrintFunction);
+ }
+
+ return overallOutcome;
+ }
+
+
+ public IEnumerable<Function> GetAssignment()
+ {
+ var ret = new List<Function>();
+ foreach (var func in existentialFunctions.Values)
+ {
+ var invars = new List<Expr>(func.InParams.OfType<Variable>().Select(v => Expr.Ident(v)));
+ func.Body = function2Value[func.Name].Gamma(invars);
+ ret.Add(func);
+ }
+ return ret;
+ }
+
+ private void PrintFunction(Function function)
+ {
+ var tt = new TokenTextWriter(Console.Out, /*pretty=*/ false);
+ var invars = new List<Expr>(function.InParams.OfType<Variable>().Select(v => Expr.Ident(v)));
+ function.Body = function2Value[function.Name].Gamma(invars);
+ function.Emit(tt, 0);
+ tt.Close();
+ }
+
+ public HashSet<string> HandleCounterExample(string impl, Counterexample error)
+ {
+ var funcsChanged = new HashSet<string>();
+ // Find the failing assert -- need to do a join there
+ // return the set of functions whose definition has changed
+ var cex = ExtractState(impl, error);
+ foreach (var tup in cex)
+ {
+ function2Value[tup.Item1] = function2Value[tup.Item1].Join(tup.Item2);
+ funcsChanged.Add(tup.Item1);
+ }
+ return funcsChanged;
+ }
+
+ private List<Tuple<string, List<Model.Element>>> ExtractState(string impl, Counterexample error)
+ {
+ var lastBlock = error.Trace.Last() as Block;
+ AssertCmd failingAssert = null;
+
+ CallCounterexample callCounterexample = error as CallCounterexample;
+ if (callCounterexample != null)
+ {
+ Procedure failingProcedure = callCounterexample.FailingCall.Proc;
+ Requires failingRequires = callCounterexample.FailingRequires;
+ failingAssert = lastBlock.Cmds.OfType<AssertRequiresCmd>().FirstOrDefault(ac => ac.Requires == failingRequires);
+ }
+ ReturnCounterexample returnCounterexample = error as ReturnCounterexample;
+ if (returnCounterexample != null)
+ {
+ Ensures failingEnsures = returnCounterexample.FailingEnsures;
+ failingAssert = lastBlock.Cmds.OfType<AssertEnsuresCmd>().FirstOrDefault(ac => ac.Ensures == failingEnsures);
+ }
+ AssertCounterexample assertCounterexample = error as AssertCounterexample;
+ if (assertCounterexample != null)
+ {
+ failingAssert = lastBlock.Cmds.OfType<AssertCmd>().FirstOrDefault(ac => ac == assertCounterexample.FailingAssert);
+ }
+
+ Debug.Assert(failingAssert != null);
+ return ExtractState(impl, failingAssert.Expr, error.Model);
+ }
+
+ private static int existentialConstCounter = 0;
+
+ private List<Tuple<string, List<Model.Element>>> ExtractState(string impl, Expr expr, Model model)
+ {
+ var funcsUsed = FunctionCollector.Collect(expr);
+
+ var ret = new List<Tuple<string, List<Model.Element>>>();
+
+ foreach (var tup in funcsUsed.Where(t => t.Item2 == null))
+ {
+ var constant = tup.Item1;
+ if (!constant2FuncCall.ContainsKey(constant.Name))
+ continue;
+
+ var func = constant2FuncCall[constant.Name];
+ var funcName = (func.Fun as FunctionCall).FunctionName;
+ var vals = new List<Model.Element>();
+ prover.Context.BoogieExprTranslator.Translate(func.Args).Iter(ve => vals.Add(getValue(ve, model)));
+ ret.Add(Tuple.Create(funcName, vals));
+ }
+
+ foreach (var tup in funcsUsed.Where(t => t.Item2 != null))
+ {
+ var constant = tup.Item1;
+ var boundExpr = tup.Item2;
+
+ if (!constant2FuncCall.ContainsKey(constant.Name))
+ continue;
+
+ // There are some bound variables (because the existential function was inside an \exists).
+ // We must find an assignment for bound varibles
+
+ // First, peice apart the existential functions
+ var cd = new Duplicator();
+ var tup2 = ExistentialExprModelMassage.Massage(cd.VisitExpr(boundExpr.Body));
+ var be = tup2.Item1;
+ Expr env = Expr.True;
+ foreach (var ahFunc in tup2.Item2)
+ {
+ var tup3 = impl2FuncCalls[impl].First(t => t.Item2.Name == ahFunc.Name);
+ var varList = new List<Expr>();
+ tup3.Item3.Args.OfType<Expr>().Iter(v => varList.Add(v));
+
+ env = Expr.And(env, function2Value[tup3.Item1].Gamma(varList));
+ }
+ be = Expr.And(be, Expr.Not(env));
+
+ // map formals to constants
+ var formalToConstant = new Dictionary<string, Constant>();
+ foreach (var f in boundExpr.Dummies.OfType<Variable>())
+ formalToConstant.Add(f.Name, new Constant(Token.NoToken, new TypedIdent(Token.NoToken, f.Name + "@subst@" + (existentialConstCounter++), f.TypedIdent.Type), false));
+ be = Substituter.Apply(new Substitution(v => formalToConstant.ContainsKey(v.Name) ? Expr.Ident(formalToConstant[v.Name]) : Expr.Ident(v)), be);
+ formalToConstant.Values.Iter(v => prover.Context.DeclareConstant(v, false, null));
+
+ var reporter = new AbstractHoudiniErrorReporter();
+ var ve = prover.Context.BoogieExprTranslator.Translate(be);
+ prover.Assert(ve, true);
+ prover.Check();
+ var proverOutcome = prover.CheckOutcomeCore(reporter);
+ if (proverOutcome != ProverInterface.Outcome.Invalid)
+ continue;
+ model = reporter.model;
+
+ var func = constant2FuncCall[constant.Name];
+ var funcName = (func.Fun as FunctionCall).FunctionName;
+ var vals = new List<Model.Element>();
+ foreach (var funcArg in func.Args.OfType<Expr>())
+ {
+ var arg = Substituter.Apply(new Substitution(v => formalToConstant.ContainsKey(v.Name) ? Expr.Ident(formalToConstant[v.Name]) : Expr.Ident(v)), funcArg);
+ vals.Add(getValue(prover.Context.BoogieExprTranslator.Translate(arg), model));
+ }
+ ret.Add(Tuple.Create(funcName, vals));
+
+ }
+
+ return ret;
+ }
+
+ private Model.Element getValue(VCExpr arg, Model model)
+ {
+
+
+ if (arg is VCExprLiteral)
+ {
+ //return model.GetElement(arg.ToString());
+ return model.MkElement(arg.ToString());
+ }
+
+ else if (arg is VCExprVar)
+ {
+ var el = model.TryGetFunc(prover.Context.Lookup(arg as VCExprVar));
+ if (el != null)
+ {
+ Debug.Assert(el.Arity == 0 && el.AppCount == 1);
+ return el.Apps.First().Result;
+ }
+ else
+ {
+ // Variable not defined; assign arbitrary value
+ if (arg.Type.IsBool)
+ return model.MkElement("false");
+ else if (arg.Type.IsInt)
+ return model.MkIntElement(0);
+ else
+ return null;
+ }
+ }
+ else if (arg is VCExprNAry && (arg as VCExprNAry).Op is VCExprBvOp)
+ {
+ // support for BV constants
+ var bvc = (arg as VCExprNAry)[0] as VCExprLiteral;
+ if (bvc != null)
+ {
+ var ret = model.TryMkElement(bvc.ToString() + arg.Type.ToString());
+ if (ret != null && (ret is Model.BitVector)) return ret;
+ }
+ }
+
+ object val;
+
+ try
+ {
+ val = prover.Evaluate(arg);
+ }
+ catch (ProverInterface.VCExprEvaluationException)
+ {
+ Console.WriteLine("AbsHoudni: Error evaluating expression {0}", arg);
+ throw;
+ }
+
+ if (val is int || val is bool || val is Microsoft.Basetypes.BigNum)
+ {
+ return model.MkElement(val.ToString());
+ }
+ else
+ {
+ Debug.Assert(false);
+ }
+ return null;
+ }
+
+ // Remove functions AbsHoudiniConstant from the expressions and substitute them with "true"
+ class ExistentialExprModelMassage : StandardVisitor
+ {
+ List<Function> ahFuncs;
+
+ public ExistentialExprModelMassage()
+ {
+ ahFuncs = new List<Function>();
+ }
+
+ public static Tuple<Expr, List<Function>> Massage(Expr expr)
+ {
+ var ee = new ExistentialExprModelMassage();
+ expr = ee.VisitExpr(expr);
+ return Tuple.Create(expr, ee.ahFuncs);
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ if (node.Fun is FunctionCall && (node.Fun as FunctionCall).FunctionName.StartsWith("AbsHoudiniConstant"))
+ {
+ ahFuncs.Add((node.Fun as FunctionCall).Func);
+ return Expr.True;
+ }
+
+ return base.VisitNAryExpr(node);
+ }
+ }
+
+ class FunctionCollector : ReadOnlyVisitor
+ {
+ public List<Tuple<Function, ExistsExpr>> functionsUsed;
+ ExistsExpr existentialExpr;
+
+ public FunctionCollector()
+ {
+ functionsUsed = new List<Tuple<Function, ExistsExpr>>();
+ existentialExpr = null;
+ }
+
+ public static List<Tuple<Function, ExistsExpr>> Collect(Expr expr)
+ {
+ var fv = new FunctionCollector();
+ fv.VisitExpr(expr);
+ return fv.functionsUsed;
+ }
+
+ public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
+ {
+ var oldE = existentialExpr;
+
+ if (node is ExistsExpr)
+ existentialExpr = (node as ExistsExpr);
+
+ node = base.VisitQuantifierExpr(node);
+
+ existentialExpr = oldE;
+ return node;
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ if (node.Fun is FunctionCall)
+ {
+ var collector = new VariableCollector();
+ collector.Visit(node);
+
+ if(existentialExpr != null && existentialExpr.Dummies.Intersect(collector.usedVars).Any())
+ functionsUsed.Add(Tuple.Create((node.Fun as FunctionCall).Func, existentialExpr));
+ else
+ functionsUsed.Add(Tuple.Create<Function, ExistsExpr>((node.Fun as FunctionCall).Func, null));
+ }
+
+ return base.VisitNAryExpr(node);
+ }
+ }
+
+ class AbsHoudiniCounterexampleCollector : VerifierCallback
+ {
+ public HashSet<string> funcsChanged;
+ public string currImpl;
+ public int numErrors;
+ public List<Counterexample> errors;
+
+ AbsHoudini container;
+
+ public AbsHoudiniCounterexampleCollector(AbsHoudini container)
+ {
+ this.container = container;
+ Reset(null);
+ }
+
+ public void Reset(string impl)
+ {
+ funcsChanged = new HashSet<string>();
+ currImpl = impl;
+ numErrors = 0;
+ errors = new List<Counterexample>();
+ }
+
+ public override void OnCounterexample(Counterexample ce, string reason)
+ {
+ numErrors++;
+ errors.Add(ce);
+
+ funcsChanged.UnionWith(
+ container.HandleCounterExample(currImpl, ce));
+ }
+ }
+
+ private void GenVC(Implementation impl)
+ {
+ ModelViewInfo mvInfo;
+ Dictionary<int, Absy> label2absy;
+ var collector = new AbsHoudiniCounterexampleCollector(this);
+ collector.OnProgress("HdnVCGen", 0, 0, 0.0);
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Generating VC of {0}", impl.Name);
+ }
+
+ vcgen.ConvertCFG2DAG(impl);
+ var gotoCmdOrigins = vcgen.PassifyImpl(impl, out mvInfo);
+
+ // Inline functions
+ (new InlineFunctionCalls()).VisitBlockList(impl.Blocks);
+
+
+ StripOutermostForall(impl);
+ //ExtractQuantifiedExprs(impl);
+ ExtractBoolExprs(impl);
+
+ //CommandLineOptions.Clo.PrintInstrumented = true;
+ //using (var tt = new TokenTextWriter(Console.Out))
+ // impl.Emit(tt, 0);
+
+ // Intercept the FunctionCalls of the existential functions, and replace them with Boolean constants
+ var existentialFunctionNames = new HashSet<string>(existentialFunctions.Keys);
+ var fv = new ReplaceFunctionCalls(existentialFunctionNames);
+ fv.VisitBlockList(impl.Blocks);
+
+ //using (var tt = new TokenTextWriter(Console.Out))
+ // impl.Emit(tt, 0);
+
+
+ impl2functionsAsserted.Add(impl.Name, fv.functionsAsserted);
+ impl2functionsAssumed.Add(impl.Name, fv.functionsAssumed);
+
+ fv.functionsAssumed.Iter(f => function2implAssumed[f].Add(impl.Name));
+ fv.functionsAsserted.Iter(f => function2implAsserted[f].Add(impl.Name));
+
+ impl2FuncCalls.Add(impl.Name, fv.functionsUsed);
+ fv.functionsUsed.Iter(tup => constant2FuncCall.Add(tup.Item2.Name, tup.Item3));
+
+ var gen = prover.VCExprGen;
+ VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : gen.Integer(Microsoft.Basetypes.BigNum.ZERO);
+
+ var vcexpr = vcgen.GenerateVC(impl, controlFlowVariableExpr, out label2absy, prover.Context);
+ if (!CommandLineOptions.Clo.UseLabels)
+ {
+ VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(gen.Integer(Microsoft.Basetypes.BigNum.ZERO), gen.Integer(Microsoft.Basetypes.BigNum.ZERO));
+ VCExpr eqExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(Microsoft.Basetypes.BigNum.FromInt(impl.Blocks[0].UniqueId)));
+ vcexpr = gen.Implies(eqExpr, vcexpr);
+ }
+
+ ProverInterface.ErrorHandler handler = null;
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Local)
+ handler = new VCGen.ErrorReporterLocal(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, prover.Context, program);
+ else
+ handler = new VCGen.ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, prover.Context, program);
+
+ impl2ErrorHandler.Add(impl.Name, Tuple.Create(handler, collector));
+
+ //Console.WriteLine("VC of {0}: {1}", impl.Name, vcexpr);
+
+ // Create a macro so that the VC can sit with the theorem prover
+ Macro macro = new Macro(Token.NoToken, impl.Name + "Macro", new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false));
+ prover.DefineMacro(macro, vcexpr);
+
+ // Store VC
+ impl2VC.Add(impl.Name, gen.Function(macro));
+
+ // HACK: push the definitions of constants involved in function calls
+ // It is possible that some constants only appear in function calls. Thus, when
+ // they are replaced by Boolean constants, it is possible that (get-value) will
+ // fail if the expression involves such constants. All we need to do is make sure
+ // these constants are declared, because otherwise, semantically we are doing
+ // the right thing.
+ foreach (var tup in fv.functionsUsed)
+ {
+ // Ignore ones with bound varibles
+ if (tup.Item2.InParams.Count > 0) continue;
+ var tt = prover.Context.BoogieExprTranslator.Translate(tup.Item3);
+ tt = prover.VCExprGen.Or(VCExpressionGenerator.True, tt);
+ prover.Assert(tt, true);
+ }
+ }
+
+ // convert "foo(... forall e ...) to:
+ // (p iff forall e) ==> foo(... p ...)
+ // where p is a fresh boolean variable and foo is an existential constant
+ private void ExtractQuantifiedExprs(Implementation impl)
+ {
+ var funcs = new HashSet<string>(existentialFunctions.Keys);
+ foreach (var blk in impl.Blocks)
+ {
+ foreach (var acmd in blk.Cmds.OfType<AssertCmd>())
+ {
+ var ret = ExtractQuantifiers.Extract(acmd.Expr, funcs);
+ acmd.Expr = ret.Item1;
+ impl.LocVars.AddRange(ret.Item2);
+ }
+ }
+ }
+
+ // convert "foo(... e ...) to:
+ // (p iff e) ==> foo(... p ...)
+ // where p is a fresh boolean variable, foo is an existential constant
+ // and e is a Boolean-typed argument of foo
+ private void ExtractBoolExprs(Implementation impl)
+ {
+ var funcs = new HashSet<string>(existentialFunctions.Keys);
+ foreach (var blk in impl.Blocks)
+ {
+ foreach (var acmd in blk.Cmds.OfType<AssertCmd>())
+ {
+ var ret = ExtractBoolArgs.Extract(acmd.Expr, funcs);
+ acmd.Expr = ret.Item1;
+ impl.LocVars.AddRange(ret.Item2);
+ }
+ }
+ }
+
+ // convert "assert e1 && forall x: e2" to
+ // assert e1 && e2[x <- x@bound]
+ private void StripOutermostForall(Implementation impl)
+ {
+ var funcs = new HashSet<string>(existentialFunctions.Keys);
+ foreach (var blk in impl.Blocks)
+ {
+ foreach (var acmd in blk.Cmds.OfType<AssertCmd>())
+ {
+ var ret = StripQuantifiers.Run(acmd.Expr, funcs);
+ acmd.Expr = ret.Item1;
+ impl.LocVars.AddRange(ret.Item2);
+ }
+ }
+ }
+
+ private void Inline()
+ {
+ if (CommandLineOptions.Clo.InlineDepth < 0)
+ return;
+
+ var callGraph = BuildCallGraph();
+
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ InlineEnsuresVisitor inlineEnsuresVisitor = new InlineEnsuresVisitor();
+ inlineEnsuresVisitor.Visit(impl);
+ }
+
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ impl.OriginalBlocks = impl.Blocks;
+ impl.OriginalLocVars = impl.LocVars;
+ }
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ CommandLineOptions.Inlining savedOption = CommandLineOptions.Clo.ProcedureInlining;
+ CommandLineOptions.Clo.ProcedureInlining = CommandLineOptions.Inlining.Spec;
+ Inliner.ProcessImplementationForHoudini(program, impl);
+ CommandLineOptions.Clo.ProcedureInlining = savedOption;
+ }
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ impl.OriginalBlocks = null;
+ impl.OriginalLocVars = null;
+ }
+
+ Graph<Implementation> oldCallGraph = callGraph;
+ callGraph = new Graph<Implementation>();
+ foreach (Implementation impl in oldCallGraph.Nodes)
+ {
+ callGraph.AddSource(impl);
+ }
+ foreach (Tuple<Implementation, Implementation> edge in oldCallGraph.Edges)
+ {
+ callGraph.AddEdge(edge.Item1, edge.Item2);
+ }
+ int count = CommandLineOptions.Clo.InlineDepth;
+ while (count > 0)
+ {
+ foreach (Implementation impl in oldCallGraph.Nodes)
+ {
+ List<Implementation> newNodes = new List<Implementation>();
+ foreach (Implementation succ in callGraph.Successors(impl))
+ {
+ newNodes.AddRange(oldCallGraph.Successors(succ));
+ }
+ foreach (Implementation newNode in newNodes)
+ {
+ callGraph.AddEdge(impl, newNode);
+ }
+ }
+ count--;
+ }
+ }
+
+ private Graph<Implementation> BuildCallGraph()
+ {
+ Graph<Implementation> callGraph = new Graph<Implementation>();
+ Dictionary<Procedure, HashSet<Implementation>> procToImpls = new Dictionary<Procedure, HashSet<Implementation>>();
+ foreach (var proc in program.Procedures)
+ {
+ procToImpls[proc] = new HashSet<Implementation>();
+ }
+ foreach (var impl in program.Implementations)
+ {
+ if (impl.SkipVerification) continue;
+ callGraph.AddSource(impl);
+ procToImpls[impl.Proc].Add(impl);
+ }
+ foreach (var impl in program.Implementations)
+ {
+ if (impl.SkipVerification) continue;
+ foreach (Block b in impl.Blocks)
+ {
+ foreach (Cmd c in b.Cmds)
+ {
+ CallCmd cc = c as CallCmd;
+ if (cc == null) continue;
+ foreach (Implementation callee in procToImpls[cc.Proc])
+ {
+ callGraph.AddEdge(impl, callee);
+ }
+ }
+ }
+ }
+ return callGraph;
+ }
+
+ }
+
+ class InlineFunctionCalls : StandardVisitor
+ {
+ public Stack<string> inlinedFunctionsStack;
+
+ public InlineFunctionCalls()
+ {
+ inlinedFunctionsStack = new Stack<string>();
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ var fc = node.Fun as FunctionCall;
+ if (fc != null && fc.Func.Body != null && QKeyValue.FindBoolAttribute(fc.Func.Attributes, "inline"))
+ {
+ if (inlinedFunctionsStack.Contains(fc.Func.Name))
+ {
+ // recursion detected
+ throw new AbsHoudiniInternalError("Recursion detected in function declarations");
+ }
+
+ // create a substitution
+ var subst = new Dictionary<Variable, Expr>();
+ for (int i = 0; i < node.Args.Count; i++)
+ {
+ subst.Add(fc.Func.InParams[i], node.Args[i]);
+ }
+
+ var e =
+ Substituter.Apply(new Substitution(v => subst.ContainsKey(v) ? subst[v] : Expr.Ident(v)), fc.Func.Body);
+
+ inlinedFunctionsStack.Push(fc.Func.Name);
+
+ e = base.VisitExpr(e);
+
+ inlinedFunctionsStack.Pop();
+
+ return e;
+ }
+ return base.VisitNAryExpr(node);
+ }
+ }
+
+ class ReplaceFunctionCalls : StandardVisitor
+ {
+ public List<Tuple<string, Function, NAryExpr>> functionsUsed;
+ public List<Function> boolConstants;
+
+ public HashSet<string> functionsAssumed;
+ public HashSet<string> functionsAsserted;
+ HashSet<string> functionsToReplace;
+
+ private bool inAssume;
+ private bool inAssert;
+ private bool inFunction;
+ private List<Dictionary<string, Variable>> boundVars;
+ private static int IdCounter = 0;
+
+ public ReplaceFunctionCalls(HashSet<string> functionsToReplace)
+ {
+ this.functionsUsed = new List<Tuple<string, Function, NAryExpr>>();
+ this.functionsToReplace = functionsToReplace;
+ this.functionsAsserted = new HashSet<string>();
+ this.functionsAssumed = new HashSet<string>();
+ this.boolConstants = new List<Function>();
+ this.boundVars = new List<Dictionary<string, Variable>>();
+
+ inAssume = false;
+ inAssert = false;
+ inFunction = false;
+ }
+
+ public override Cmd VisitAssertCmd(AssertCmd node)
+ {
+ inAssert = true;
+ var ret = base.VisitAssertCmd(node);
+ inAssert = false;
+ return ret;
+ }
+
+ public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node)
+ {
+ return this.VisitAssertCmd(node);
+ }
+
+ public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node)
+ {
+ return this.VisitAssertCmd(node);
+ }
+
+ public override Cmd VisitAssumeCmd(AssumeCmd node)
+ {
+ inAssume = true;
+ var ret = base.VisitAssumeCmd(node);
+ inAssume = false;
+ return ret;
+ }
+
+ public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node)
+ {
+ // gather the quantified variables
+ var dummies = new Dictionary<string, Variable>();
+ node.Dummies.Iter(v => dummies.Add(v.Name, v));
+
+ boundVars.Add(dummies);
+
+ node = base.VisitQuantifierExpr(node);
+
+ boundVars.RemoveAt(boundVars.Count - 1);
+
+ return node;
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ var inF = inFunction;
+
+ if (node.Fun is FunctionCall && functionsToReplace.Contains((node.Fun as FunctionCall).FunctionName))
+ {
+ found((node.Fun as FunctionCall).FunctionName);
+ inFunction = true;
+
+ // collect all the variables used by this function
+ var collector = new VariableCollector();
+ collector.VisitExpr(node);
+
+ // Find the outermost bound variables
+ var bound = new List<Variable>();
+ if(boundVars.Count > 0)
+ bound.AddRange(collector.usedVars.Intersect(boundVars[0].Values));
+
+ // create boolean function to replace this guy
+ var constant = new Function(Token.NoToken, "AbsHoudiniConstant" + IdCounter, bound,
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "r", Microsoft.Boogie.Type.Bool), false));
+ IdCounter++;
+
+ functionsUsed.Add(Tuple.Create((node.Fun as FunctionCall).FunctionName, constant, node));
+ boolConstants.Add(constant);
+
+ var args = new List<Expr>();
+ bound.OfType<Variable>().Select(v => Expr.Ident(v)).Iter(v => args.Add(v));
+ return new NAryExpr(Token.NoToken, new FunctionCall(constant), args);
+ }
+ var ret = base.VisitNAryExpr(node);
+
+ inFunction = inF;
+
+ return ret;
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ if (inFunction)
+ {
+ // Inside functions we can only refer to the outermost bound variables
+ for (int i = boundVars.Count - 1; i >= 1; i--)
+ {
+ if (boundVars[i].ContainsKey(node.Name))
+ throw new AbsHoudiniInternalError("Existential functions can only refer to outermost bound variables in an expression");
+ }
+ }
+
+ return base.VisitIdentifierExpr(node);
+ }
+
+ private void found(string func)
+ {
+ if (inAssume) functionsAssumed.Add(func);
+ if (inAssert) functionsAsserted.Add(func);
+ }
+
+ }
+
+ // convert "foo(... e ...) to:
+ // (p iff e) ==> foo(... p ...)
+ // where p is a fresh boolean variable, foo is an existential constant
+ // and e is a Boolean-typed argument of foo
+ class ExtractBoolArgs : StandardVisitor
+ {
+ static int freshConstCounter = 0;
+ HashSet<string> existentialFunctions;
+ HashSet<Constant> newConstants;
+
+ private ExtractBoolArgs(HashSet<string> existentialFunctions)
+ {
+ this.existentialFunctions = existentialFunctions;
+ this.newConstants = new HashSet<Constant>();
+ }
+
+ public static Tuple<Expr, IEnumerable<Constant>> Extract(Expr expr, HashSet<string> existentialFunctions)
+ {
+ var eq = new ExtractBoolArgs(existentialFunctions);
+ expr = eq.VisitExpr(expr);
+ return Tuple.Create(expr, eq.newConstants.AsEnumerable());
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ if (node.Fun is FunctionCall && existentialFunctions.Contains((node.Fun as FunctionCall).FunctionName))
+ {
+ var constants = new Dictionary<Constant, Expr>();
+ for (int i = 0; i < node.Args.Count; i++)
+ {
+ if (node.Args[i].Type == Type.Bool)
+ {
+ var constant = new Constant(Token.NoToken, new TypedIdent(Token.NoToken,
+ "boolArg@const" + freshConstCounter, Microsoft.Boogie.Type.Bool), false);
+ freshConstCounter++;
+ constants.Add(constant, node.Args[i]);
+ node.Args[i] = Expr.Ident(constant);
+ }
+ }
+
+ newConstants.UnionWith(constants.Keys);
+
+ Expr ret = Expr.True;
+ foreach (var tup in constants)
+ {
+ ret = Expr.And(ret, Expr.Eq(Expr.Ident(tup.Key), tup.Value));
+ }
+ return Expr.Imp(ret, node);
+ }
+
+ return base.VisitNAryExpr(node);
+ }
+ }
+
+
+ // convert "foo(... forall e ...) to:
+ // (p iff forall e) ==> foo(... p ...)
+ // where p is a fresh boolean variable and foo is an existential constant
+ class ExtractQuantifiers : StandardVisitor
+ {
+ static int freshConstCounter = 0;
+ HashSet<string> existentialFunctions;
+ bool insideExistential;
+ Dictionary<Constant, Expr> newConstants;
+
+ private ExtractQuantifiers(HashSet<string> existentialFunctions)
+ {
+ this.existentialFunctions = existentialFunctions;
+ insideExistential = false;
+ newConstants = new Dictionary<Constant, Expr>();
+ }
+
+ public static Tuple<Expr, IEnumerable<Constant>> Extract(Expr expr, HashSet<string> existentialFunctions)
+ {
+ var eq = new ExtractQuantifiers(existentialFunctions);
+ expr = eq.VisitExpr(expr);
+ Expr ret = Expr.True;
+ foreach (var tup in eq.newConstants)
+ {
+ ret = Expr.And(ret, Expr.Eq(Expr.Ident(tup.Key), tup.Value));
+ }
+ ret = Expr.Imp(ret, expr);
+ return Tuple.Create(ret, eq.newConstants.Keys.AsEnumerable());
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ var oldIE = insideExistential;
+
+ if (node.Fun is FunctionCall && existentialFunctions.Contains((node.Fun as FunctionCall).FunctionName))
+ insideExistential = true;
+
+ var ret = base.VisitNAryExpr(node);
+
+ insideExistential = oldIE;
+ return ret;
+ }
+
+ public override Expr VisitExpr(Expr node)
+ {
+ if (node is QuantifierExpr)
+ {
+ return MyVisitQuantifierExpr(node as QuantifierExpr);
+ }
+ return base.VisitExpr(node);
+ }
+
+ public Expr MyVisitQuantifierExpr(QuantifierExpr node)
+ {
+ node = base.VisitQuantifierExpr(node);
+
+ if (insideExistential)
+ {
+ var constant = new Constant(Token.NoToken, new TypedIdent(Token.NoToken,
+ "quant@const" + freshConstCounter, Microsoft.Boogie.Type.Bool), false);
+ freshConstCounter++;
+
+ newConstants.Add(constant, node);
+
+ return Expr.Ident(constant);
+ }
+
+ return node;
+ }
+ }
+
+ // convert "assert e1 && forall x: e2" to
+ // assert e1 && e2[x <- x@bound]
+ // only if e2 has an existential function
+ class StripQuantifiers : StandardVisitor
+ {
+ static int boundVarCounter = 0;
+
+ // 0 -> None, 1 -> Forall, 2 -> Exists, 3 -> Nested
+ int insideQuantifier;
+
+ bool searchExistentialFunction;
+ bool foundExistentialFunction;
+
+ HashSet<string> existentialFunctions;
+ Dictionary<string, LocalVariable> subst;
+ List<LocalVariable> LocalsToAdd;
+
+ private StripQuantifiers(HashSet<string> existentialFunctions)
+ {
+ this.existentialFunctions = existentialFunctions;
+ insideQuantifier = 0;
+ searchExistentialFunction = false;
+ foundExistentialFunction = false;
+ LocalsToAdd = new List<LocalVariable>();
+ subst = null;
+ }
+
+ public static Tuple<Expr,List<LocalVariable>> Run(Expr expr, HashSet<string> existentialFunctions)
+ {
+ // check for type errors first
+ var sq = new StripQuantifiers(existentialFunctions);
+ var ret = sq.VisitExpr(expr);
+
+ return Tuple.Create(ret, sq.LocalsToAdd);
+ }
+
+ public override Expr VisitExpr(Expr node)
+ {
+ if (node is QuantifierExpr)
+ {
+ return MyVisitQuantifierExpr(node as QuantifierExpr);
+ }
+
+ return base.VisitExpr(node);
+ }
+
+ private Expr MyVisitQuantifierExpr(QuantifierExpr node)
+ {
+ var oldIQ = insideQuantifier;
+ Expr ret = node;
+
+ // update "insideQuantifier"
+ if (insideQuantifier == 0)
+ {
+ if (node is ForallExpr) insideQuantifier = 1;
+ else insideQuantifier = 2;
+ }
+ else if (insideQuantifier > 0)
+ {
+ insideQuantifier = 3;
+ }
+
+ // Going inside Forall?
+ if (insideQuantifier == 1)
+ {
+ // see if there is any existential function inside
+ searchExistentialFunction = true;
+ foundExistentialFunction = false;
+ base.VisitQuantifierExpr(node);
+
+ if (foundExistentialFunction)
+ {
+ // create substitution to apply
+ subst = new Dictionary<string, LocalVariable>();
+ foreach (var bv in node.Dummies.OfType<Variable>())
+ {
+ var lv = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken,
+ bv + "@bound" + boundVarCounter, bv.TypedIdent.Type));
+ boundVarCounter++;
+ subst.Add(bv.Name, lv);
+ LocalsToAdd.Add(lv);
+ }
+
+ // apply the subst
+ var body = base.VisitExpr(node.Body);
+ ret = body;
+
+ subst = null;
+ }
+ else
+ {
+ ret = base.VisitQuantifierExpr(node);
+ }
+
+ searchExistentialFunction = false;
+ foundExistentialFunction = false;
+ }
+ else
+ {
+ ret = base.VisitQuantifierExpr(node);
+ }
+
+ insideQuantifier = oldIQ;
+ return ret;
+ }
+
+ public override Expr VisitNAryExpr(NAryExpr node)
+ {
+ if (node.Fun is FunctionCall && existentialFunctions.Contains((node.Fun as FunctionCall).FunctionName))
+ {
+ if (insideQuantifier == 3)
+ throw new AbsHoudiniInternalError("Existential function found inside exists, or nested foralls");
+
+ if (searchExistentialFunction)
+ foundExistentialFunction = true;
+
+ }
+
+ return base.VisitNAryExpr(node);
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ if (subst != null && subst.ContainsKey(node.Name))
+ return Expr.Ident(subst[node.Name]);
+ return base.VisitIdentifierExpr(node);
+ }
+
+ }
+
+ public class Intervals : IAbstractDomain
+ {
+ // [lower, upper]
+ int upper;
+ int lower;
+ // or: \bot
+ bool isBottom;
+ // number of times join has been performed
+ int nJoin;
+ // number of times before we widen
+ readonly static int maxJoin = 5;
+
+ public Intervals()
+ {
+ this.upper = 0;
+ this.lower = 0;
+ this.nJoin = 0;
+ this.isBottom = true;
+ }
+
+ private Intervals(int lower, int upper, int nJoin)
+ {
+ this.upper = upper;
+ this.lower = lower;
+ this.nJoin = nJoin;
+ }
+
+ public IAbstractDomain Bottom()
+ {
+ return new Intervals();
+ }
+
+ public IAbstractDomain MakeTop(out bool changed)
+ {
+ if (lower == Int32.MinValue && upper == Int32.MaxValue)
+ {
+ changed = false;
+ return this;
+ }
+ changed = true;
+ return new Intervals(Int32.MinValue, Int32.MaxValue, 0);
+ }
+
+ public IAbstractDomain Join(List<Model.Element> states)
+ {
+ Debug.Assert(states.Count == 1);
+ var state = states[0] as Model.Integer;
+ if (state == null)
+ throw new AbsHoudiniInternalError("Incorrect type, expected int");
+ var intval = state.AsInt();
+
+ if (isBottom)
+ {
+ return new Intervals(intval, intval, 1);
+ }
+
+ if(intval >= lower && intval <= upper)
+ return this;
+
+ if (nJoin > maxJoin)
+ {
+ // widen
+ if (intval > upper)
+ return new Intervals(lower, Int32.MaxValue, 1);
+ if(intval < lower)
+ return new Intervals(Int32.MinValue, upper, 1);
+
+ Debug.Assert(false);
+ }
+
+ if (intval > upper)
+ return new Intervals(lower, intval, nJoin + 1);
+ if (intval < lower)
+ return new Intervals(intval, upper, nJoin + 1);
+
+ Debug.Assert(false);
+ return null;
+ }
+
+ public Expr Gamma(List<Expr> vars)
+ {
+ Debug.Assert(vars.Count == 1);
+ var v = vars[0];
+ if (isBottom) return Expr.False;
+ Expr ret = Expr.True;
+ if (lower != Int32.MinValue)
+ ret = Expr.And(ret, Expr.Ge(v, Expr.Literal(lower)));
+ if (upper != Int32.MaxValue)
+ ret = Expr.And(ret, Expr.Le(v, Expr.Literal(upper)));
+ return ret;
+ }
+
+ public bool TypeCheck(List<Type> argTypes, out string msg)
+ {
+ msg = "";
+ if (argTypes.Count != 1)
+ {
+ msg = "Illegal number of arguments";
+ return false;
+ }
+ if (!argTypes[0].IsInt)
+ {
+ msg = "Illegal type, expecting int";
+ return false;
+ }
+ return true;
+ }
+ }
+
+ public class PredicateAbsFullElem : PredicateAbsElem
+ {
+ public PredicateAbsFullElem()
+ : base(1000)
+ { }
+ }
+
+ public class PredicateAbsElem : IAbstractDomain
+ {
+ public static class ExprExt
+ {
+ public static Expr AndSimp(Expr e1, Expr e2)
+ {
+ if (e1 == Expr.True) return e2;
+ if (e2 == Expr.True) return e1;
+ if (e1 == Expr.False || e2 == Expr.False) return Expr.False;
+ return Expr.And(e1, e2);
+ }
+
+ public static Expr OrSimp(Expr e1, Expr e2)
+ {
+ if (e1 == Expr.False) return e2;
+ if (e2 == Expr.False) return e1;
+ if (e1 == Expr.True || e2 == Expr.True) return Expr.True;
+ return Expr.Or(e1, e2);
+ }
+ }
+
+ class Disjunct
+ {
+ HashSet<int> pos;
+ HashSet<int> neg;
+ bool isTrue;
+
+ public Disjunct()
+ {
+ isTrue = true;
+ pos = new HashSet<int>();
+ neg = new HashSet<int>();
+ }
+
+ public Disjunct(IEnumerable<int> pos, IEnumerable<int> neg, int bound)
+ {
+ this.isTrue = false;
+ this.pos = new HashSet<int>(pos);
+ this.neg = new HashSet<int>(neg);
+ if (this.pos.Overlaps(this.neg))
+ {
+ this.isTrue = true;
+ this.pos = new HashSet<int>();
+ this.neg = new HashSet<int>();
+ }
+ if (this.pos.Count + this.neg.Count > bound)
+ {
+ // Set to true
+ this.isTrue = true;
+ this.pos = new HashSet<int>();
+ this.neg = new HashSet<int>();
+ }
+
+ }
+
+ public Disjunct OR(Disjunct that, int bound)
+ {
+ if (isTrue)
+ return this;
+ if (that.isTrue)
+ return that;
+
+ return new Disjunct(this.pos.Concat(that.pos), this.neg.Concat(that.neg), bound);
+ }
+
+ public bool Implies(Disjunct that)
+ {
+ if (isTrue) return that.isTrue;
+ if (that.isTrue) return true;
+
+ return pos.IsSubsetOf(that.pos) && neg.IsSubsetOf(that.neg);
+ }
+
+ public Expr Gamma(List<Expr> vars)
+ {
+ if (isTrue) return Expr.True;
+ Expr ret = Expr.False;
+ pos.Iter(i => ret = ExprExt.OrSimp(ret, vars[i]));
+ neg.Iter(i => ret = ExprExt.OrSimp(ret, Expr.Not(vars[i])));
+ return ret;
+ }
+ }
+
+ // Conjunction of Disjuncts
+ List<Disjunct> conjuncts;
+ int DisjunctBound;
+ bool isFalse;
+
+ public PredicateAbsElem()
+ {
+ this.conjuncts = new List<Disjunct>();
+ this.isFalse = true;
+ this.DisjunctBound = 3;
+ }
+
+ public PredicateAbsElem(int bound)
+ {
+ this.conjuncts = new List<Disjunct>();
+ this.isFalse = true;
+ this.DisjunctBound = bound;
+ }
+
+ public IAbstractDomain Bottom()
+ {
+ return new PredicateAbsElem(DisjunctBound);
+ }
+
+ public IAbstractDomain MakeTop(out bool changed)
+ {
+ if (conjuncts.Count == 0)
+ {
+ changed = false;
+ return this;
+ }
+ changed = true;
+ var ret = new PredicateAbsElem(DisjunctBound);
+ ret.isFalse = false;
+ return ret;
+ }
+
+ public IAbstractDomain Join(List<Model.Element> state)
+ {
+ if (state.Any(me => !(me is Model.Boolean)))
+ throw new AbsHoudiniInternalError("Predicate Abstraction requires that each argument be of type bool");
+
+ // quick return if this == true
+ if (!this.isFalse && conjuncts.Count == 0)
+ return this;
+
+ var ret = new PredicateAbsElem(DisjunctBound);
+ ret.isFalse = false;
+
+ for (int i = 0; i < state.Count; i++)
+ {
+ var b = (state[i] as Model.Boolean).Value;
+ Disjunct d = null;
+ if (b) d = new Disjunct(new int[] { i }, new int[] { }, DisjunctBound);
+ else d = new Disjunct(new int[] { }, new int[] { i }, DisjunctBound);
+
+ if (isFalse)
+ ret.AddDisjunct(d);
+ else
+ {
+ conjuncts.Iter(c => ret.AddDisjunct(c.OR(d, DisjunctBound)));
+ }
+ }
+
+ return ret;
+
+ }
+
+ public Expr Gamma(List<Expr> vars)
+ {
+ if (isFalse) return Expr.False;
+ Expr ret = Expr.True;
+
+ foreach (var c in conjuncts)
+ {
+ ret = ExprExt.AndSimp(ret, c.Gamma(vars));
+ }
+
+ return ret;
+ }
+
+ public bool TypeCheck(List<Type> argTypes, out string msg)
+ {
+ msg = "";
+ if (argTypes.Any(t => !t.IsBool))
+ {
+ msg = "Illegal type, expecting bool";
+ return false;
+ }
+ return true;
+ }
+
+ private void AddDisjunct(Disjunct d)
+ {
+ if (conjuncts.Any(c => c.Implies(d)))
+ return;
+
+ conjuncts.RemoveAll(c => d.Implies(c));
+ conjuncts.Add(d);
+ }
+ }
+
+ // [false -- (x == true) -- true]
+ public class HoudiniConst : IAbstractDomain
+ {
+ bool isBottom;
+ bool isTop;
+
+ private HoudiniConst(bool isTop, bool isBottom)
+ {
+ this.isBottom = isBottom;
+ this.isTop = isTop;
+ Debug.Assert(!(isTop && isBottom));
+ }
+
+ public static HoudiniConst GetExtObj()
+ {
+ return new HoudiniConst(false, false);
+ }
+
+ public static HoudiniConst GetTop()
+ {
+ return new HoudiniConst(true, false);
+ }
+
+ public static HoudiniConst GetBottom()
+ {
+ return new HoudiniConst(false, true);
+ }
+
+ public IAbstractDomain Bottom()
+ {
+ return GetBottom();
+ }
+
+ public IAbstractDomain MakeTop(out bool changed)
+ {
+ changed = false;
+ if (isTop) return this;
+ changed = true;
+ return GetTop();
+ }
+
+ public IAbstractDomain Join(List<Model.Element> states)
+ {
+ Debug.Assert(states.Count == 1);
+ var state = states[0];
+
+ if (isTop) return this;
+
+ if (state is Model.Boolean)
+ {
+ if ((state as Model.Boolean).Value)
+ return GetExtObj();
+ }
+
+ return GetTop();
+ }
+
+ public Expr Gamma(List<Expr> vars)
+ {
+ Debug.Assert(vars.Count == 1);
+ var v = vars[0];
+ if (isBottom) return Expr.False;
+ if (isTop) return Expr.True;
+ return v;
+ }
+
+ public bool TypeCheck(List<Type> argTypes, out string msg)
+ {
+ msg = "";
+ if (argTypes.Count != 1)
+ {
+ msg = "Illegal number of arguments, expecting 1";
+ return false;
+ }
+ if (!argTypes[0].IsBool)
+ {
+ msg = "Illegal type, expecting bool";
+ return false;
+ }
+ return true;
+ }
+ }
+
+ // foo(x) = x < 2^j for some j <= 16
+ public class PowDomain : IAbstractDomain
+ {
+ enum Val { FALSE, NEITHER, TRUE };
+ Val tlevel;
+ bool isBottom { get { return tlevel == Val.FALSE; } }
+ bool isTop { get { return tlevel == Val.TRUE; } }
+
+ readonly int Max = 16;
+
+ int upper; // <= Max
+
+ private PowDomain(Val tlevel) :
+ this(tlevel, 0) { }
+
+ private PowDomain(Val tlevel, int upper)
+ {
+ this.tlevel = tlevel;
+ this.upper = upper;
+ }
+
+ public static IAbstractDomain GetBottom()
+ {
+ return new PowDomain(Val.FALSE) as IAbstractDomain;
+ }
+
+ public IAbstractDomain MakeTop(out bool changed)
+ {
+ if (isTop)
+ {
+ changed = false;
+ return this;
+ }
+ changed = true;
+ return new PowDomain(Val.TRUE);
+ }
+
+ IAbstractDomain IAbstractDomain.Bottom()
+ {
+ return GetBottom();
+ }
+
+ IAbstractDomain IAbstractDomain.Join(List<Model.Element> state)
+ {
+ if (isTop) return this;
+
+ int v = 0;
+ if (state[0] is Model.BitVector)
+ v = (state[0] as Model.BitVector).AsInt();
+ else if (state[0] is Model.Integer)
+ v = (state[0] as Model.Integer).AsInt();
+ else Debug.Assert(false);
+
+ var nupper = upper;
+ while ((1 << nupper) < v) nupper++;
+ var ntlevel = Val.NEITHER;
+ if (nupper > Max) ntlevel = Val.TRUE;
+ return new PowDomain(ntlevel, nupper);
+ }
+
+ Expr IAbstractDomain.Gamma(List<Expr> vars)
+ {
+ if (isBottom) return Expr.False;
+ if (isTop) return Expr.True;
+ var v = vars[0];
+ if (v.Type.IsBv)
+ {
+ var bits = v.Type.BvBits;
+ if (!AbstractDomainFactory.bvslt.ContainsKey(bits))
+ throw new AbsHoudiniInternalError("No builtin function found for bv" + bits.ToString());
+ var bvslt = AbstractDomainFactory.bvslt[bits];
+ return new NAryExpr(Token.NoToken, new FunctionCall(bvslt), new List<Expr> { v,
+ new LiteralExpr(Token.NoToken, Basetypes.BigNum.FromInt(1 << (upper+1)), 32) });
+ }
+ else
+ {
+ return Expr.Lt(v, Expr.Literal(1 << (upper+1)));
+ }
+ }
+
+ bool IAbstractDomain.TypeCheck(List<Type> argTypes, out string msg)
+ {
+ msg = "";
+ if (argTypes.Count != 1)
+ {
+ msg = "Illegal number of arguments, expecting 1";
+ return false;
+ }
+ if (argTypes.Any(tt => !tt.IsInt && !tt.IsBv))
+ {
+ msg = "Illegal type, expecting int or bv";
+ return false;
+ }
+ return true;
+ }
+ }
+
+ // foo(x_i) = all equalities that hold
+ public class EqualitiesDomain : IAbstractDomain
+ {
+ bool isBottom;
+ List<HashSet<int>> equalities;
+
+ public EqualitiesDomain(bool isBottom, List<HashSet<int>> eq)
+ {
+ this.isBottom = isBottom;
+ this.equalities = eq;
+ }
+
+ public static IAbstractDomain GetBottom()
+ {
+ return new EqualitiesDomain(true, new List<HashSet<int>>());
+ }
+
+ IAbstractDomain IAbstractDomain.Bottom()
+ {
+ return GetBottom();
+ }
+
+ public IAbstractDomain MakeTop(out bool changed)
+ {
+ if (equalities.Count == 0)
+ {
+ changed = false;
+ return this;
+ }
+ changed = true;
+ return new EqualitiesDomain(false, new List<HashSet<int>>());
+ }
+
+ IAbstractDomain IAbstractDomain.Join(List<Model.Element> state)
+ {
+ // find the guys that are equal
+ var eq = new List<HashSet<int>>();
+ for (int i = 0; i < state.Count; i++)
+ {
+ var added = false;
+ foreach (var s in eq)
+ {
+ var sv = s.First();
+ if (state[i].ToString() == state[sv].ToString())
+ {
+ s.Add(i);
+ added = true;
+ break;
+ }
+ }
+ if (!added) eq.Add(new HashSet<int>(new int[] { i }));
+ }
+
+ if (isBottom)
+ {
+ return new EqualitiesDomain(false, eq);
+ }
+
+ // intersect two partitions equalities and eq
+ var m1 = GetMap(equalities, state.Count);
+ var m2 = GetMap(eq, state.Count);
+
+ for (int i = 0; i < state.Count; i++)
+ m2[i] = new HashSet<int>(m2[i].Intersect(m1[i]));
+
+
+ // map from representative to set
+ var repToSet = new Dictionary<int, HashSet<int>>();
+
+ for (int i = 0; i < state.Count; i++)
+ {
+ var rep = m2[i].Min();
+ if (!repToSet.ContainsKey(rep))
+ repToSet[rep] = m2[i];
+ }
+
+ var ret = new List<HashSet<int>>();
+ repToSet.Values.Iter(s => ret.Add(s));
+
+ return new EqualitiesDomain(false, ret);
+ }
+
+ Expr IAbstractDomain.Gamma(List<Expr> vars)
+ {
+ if (isBottom) return Expr.False;
+ Expr ret = Expr.True;
+ foreach (var eq in equalities.Select(hs => hs.ToList()))
+ {
+ if (eq.Count == 1) continue;
+ var prev = eq[0];
+ for (int i = 1; i < eq.Count; i++)
+ {
+ ret = Expr.And(ret, Expr.Eq(vars[prev], vars[eq[i]]));
+ prev = eq[i];
+ }
+ }
+ return ret;
+ }
+
+ bool IAbstractDomain.TypeCheck(List<Type> argTypes, out string msg)
+ {
+ msg = "";
+ if (argTypes.Count == 0) return true;
+ var ot = argTypes[0];
+
+ if (argTypes.Any(tt => !tt.Equals(ot)))
+ {
+ msg = string.Format("Illegal type, expecting type {0}, got {1}", ot, argTypes.First(tt => !tt.Equals(ot)));
+ return false;
+ }
+ return true;
+ }
+
+ private HashSet<int>[] GetMap(List<HashSet<int>> eq, int n)
+ {
+ var ret = new HashSet<int>[n];
+ foreach (var s in eq)
+ {
+ foreach (var i in s)
+ ret[i] = s;
+ }
+ return ret;
+ }
+ }
+
+ // foo(a,b) \in {false, \not a, a ==> b, true}
+ public class ImplicationDomain : IAbstractDomain
+ {
+ enum Val {FALSE, NOT_A, A_IMP_B, TRUE};
+ Val val;
+
+ private ImplicationDomain(Val val)
+ {
+ this.val = val;
+ }
+
+ public static ImplicationDomain GetBottom()
+ {
+ return new ImplicationDomain(Val.FALSE);
+ }
+
+ public IAbstractDomain Bottom()
+ {
+ return GetBottom();
+ }
+
+ public IAbstractDomain MakeTop(out bool changed)
+ {
+ if(val == Val.TRUE) {
+ changed = false;
+ return this;
+ }
+ changed = true;
+ return new ImplicationDomain(Val.TRUE);
+ }
+
+ public IAbstractDomain Join(List<Model.Element> states)
+ {
+ Debug.Assert(states.Count == 2);
+ var v1 = (states[0] as Model.Boolean).Value;
+ var v2 = (states[1] as Model.Boolean).Value;
+
+ if (val == Val.TRUE) return this;
+
+ var that = Val.TRUE;
+ if (!v1) that = Val.NOT_A;
+ else if (!v1 || v2) that = Val.A_IMP_B;
+
+ if (that == Val.TRUE || val == Val.FALSE)
+ return new ImplicationDomain(that);
+
+ // Now, neither this or that is FALSE or TRUE
+ if (val == that)
+ return this;
+
+ Debug.Assert(val == Val.A_IMP_B || that == Val.A_IMP_B);
+ return new ImplicationDomain(Val.A_IMP_B);
+ }
+
+ public Expr Gamma(List<Expr> vars)
+ {
+ Debug.Assert(vars.Count == 2);
+
+ var v1 = vars[0];
+ var v2 = vars[1];
+
+ if (val == Val.FALSE) return Expr.False;
+ if (val == Val.TRUE) return Expr.True;
+ if (val == Val.NOT_A) return Expr.Not(v1);
+ return Expr.Imp(v1, v2);
+ }
+
+ public bool TypeCheck(List<Type> argTypes, out string msg)
+ {
+ msg = "";
+ if (argTypes.Count != 2)
+ {
+ msg = "Illegal number of arguments, expecting 2";
+ return false;
+ }
+ if (argTypes.Any(tt => !tt.IsBool))
+ {
+ msg = "Illegal type, expecting bool";
+ return false;
+ }
+ return true;
+ }
+ }
+
+ public class ConstantProp : IAbstractDomain
+ {
+ object val;
+ bool isBottom;
+ bool isTop;
+
+ private ConstantProp(object val, bool isTop, bool isBottom)
+ {
+ this.val = val;
+ this.isBottom = isBottom;
+ this.isTop = isTop;
+ Debug.Assert(!(isTop && isBottom));
+ Debug.Assert(val == null || (val is int) || (val is bool));
+ }
+
+ public static ConstantProp GetExtObj(object val)
+ {
+ Debug.Assert(val != null);
+ return new ConstantProp(val, false, false);
+ }
+
+ public static ConstantProp GetTop()
+ {
+ return new ConstantProp(null, true, false);
+ }
+
+ public static ConstantProp GetBottom()
+ {
+ return new ConstantProp(null, false, true);
+ }
+
+ public IAbstractDomain MakeTop(out bool changed) {
+ if (isTop)
+ {
+ changed = false;
+ return this;
+ }
+ changed = true;
+ return GetTop();
+ }
+
+ private ConstantProp Join(ConstantProp that)
+ {
+ if (isBottom) return that;
+ if (isTop) return this;
+ if (that.isBottom) return this;
+ if (that.isTop) return that;
+
+ if ((val is int) && !(that.val is int))
+ throw new AbsHoudiniInternalError("Type mismatch in ExtObj");
+
+ if ((val is bool) && !(that.val is bool))
+ throw new AbsHoudiniInternalError("Type mismatch in ExtObj");
+
+ if (val is int)
+ {
+ var v1 = (int)val;
+ var v2 = (int)that.val;
+ if (v1 != v2) return GetTop();
+ return this;
+ }
+ else if (val is bool)
+ {
+ var v1 = (bool)val;
+ var v2 = (bool)that.val;
+ if (v1 != v2) return GetTop();
+ return this;
+ }
+ throw new AbsHoudiniInternalError("Illegal val type in ExtObj");
+ }
+
+ public IAbstractDomain Bottom()
+ {
+ return GetBottom();
+ }
+
+ public IAbstractDomain Join(List<Model.Element> states)
+ {
+ Debug.Assert(states.Count == 1);
+ var state = states[0];
+ ConstantProp that = null;
+
+ if (state is Model.Integer)
+ {
+ that = GetExtObj((state as Model.Integer).AsInt());
+ }
+ else if (state is Model.Boolean)
+ {
+ that = GetExtObj((state as Model.Boolean).Value);
+ }
+ else
+ {
+ throw new AbsHoudiniInternalError("Illegal type " + state.GetType().ToString());
+ }
+
+ return Join(that);
+ }
+
+ public Expr Gamma(List<Expr> vars)
+ {
+ Debug.Assert(vars.Count == 1);
+ var v = vars[0];
+ if (isBottom) return Expr.False;
+ if (isTop) return Expr.True;
+ if (val is int)
+ return Expr.Eq(v, Expr.Literal((int)val));
+ if (val is bool && (bool)val)
+ return v;
+ if (val is bool && !(bool)val)
+ return Expr.Not(v);
+
+ return null;
+ }
+
+ public bool TypeCheck(List<Type> argTypes, out string msg)
+ {
+ msg = "";
+ if (argTypes.Count != 1)
+ {
+ msg = "Illegal number of arguments, expecting 1";
+ return false;
+ }
+ if (!argTypes[0].IsInt && ! argTypes[0].IsBool)
+ {
+ msg = "Illegal type, expecting int or bool";
+ return false;
+ }
+ return true;
+ }
+ }
+
+
+ public class IndependentAttribute<T> : IAbstractDomain where T : class, IAbstractDomain
+ {
+ bool isBottom;
+ int numVars;
+ List<T> varVal;
+ T underlyingInstance;
+
+ public IndependentAttribute()
+ {
+ isBottom = true;
+ numVars = 0;
+ varVal = new List<T>();
+ underlyingInstance = null;
+ }
+
+ public IAbstractDomain Bottom()
+ {
+ return new IndependentAttribute<T>();
+ }
+
+ public IAbstractDomain MakeTop(out bool changed)
+ {
+ var mt = new Func<IAbstractDomain>(() =>
+ {
+ var ret = new IndependentAttribute<T>();
+ ret.isBottom = true;
+ ret.numVars = numVars;
+ ret.underlyingInstance = underlyingInstance;
+ ret.varVal = new List<T>();
+ bool tmp;
+ for (int i = 0; i < varVal.Count; i++)
+ ret.varVal.Add(varVal[i].MakeTop(out tmp) as T);
+ return ret;
+ });
+
+ if (!isBottom)
+ {
+ foreach (var t in varVal)
+ {
+ var top = t.MakeTop(out changed);
+ if (changed)
+ {
+ return mt();
+ }
+ }
+ }
+ else
+ {
+ changed = true;
+ return mt();
+ }
+
+ changed = false;
+ return this;
+ }
+ public IAbstractDomain Join(List<Model.Element> state)
+ {
+ SetUnderlyingInstance();
+
+ if (!isBottom && numVars != state.Count)
+ {
+ throw new AbsHoudiniInternalError(
+ string.Format("Got illegal number of arguments ({0}), expected {1}", state.Count, numVars));
+ }
+
+ var ret = new IndependentAttribute<T>();
+ ret.isBottom = false;
+ ret.numVars = state.Count;
+ for(int i = 0; i < state.Count; i++)
+ {
+ var sl = new List<Model.Element>();
+ sl.Add(state[i]);
+ T prev = isBottom ? underlyingInstance.Bottom() as T : varVal[i];
+ ret.varVal.Add(prev.Join(sl) as T);
+ }
+
+ return ret;
+ }
+
+ public Expr Gamma(List<Expr> vars)
+ {
+ if (isBottom) return Expr.False;
+ if (numVars != vars.Count)
+ throw new AbsHoudiniInternalError(
+ string.Format("Got illegal number of arguments ({0}), expected {1}", vars.Count, numVars));
+
+ Expr ret = Expr.True;
+ for (int i = 0; i < numVars; i++)
+ {
+ var sl = new List<Expr>(); sl.Add(vars[i]);
+ ret = Expr.And(ret, varVal[i].Gamma(sl));
+ }
+
+ return ret;
+ }
+
+ private void SetUnderlyingInstance()
+ {
+ if (underlyingInstance != null) return;
+ var tt = typeof(T);
+ underlyingInstance = AbstractDomainFactory.GetInstance(tt) as T;
+ }
+
+ public bool TypeCheck(List<Type> argTypes, out string msg)
+ {
+ SetUnderlyingInstance();
+
+ msg = "";
+ foreach(var t in argTypes)
+ {
+ if(!underlyingInstance.TypeCheck(new List<Type>(new Type[] { t }), out msg))
+ return false;
+ }
+ return true;
+ }
+ }
+
+ public class AbstractDomainFactory
+ {
+ // Type name -> Instance
+ private static Dictionary<string, IAbstractDomain> abstractDomainInstances = new Dictionary<string, IAbstractDomain>();
+ private static Dictionary<string, IAbstractDomain> abstractDomainInstancesFriendly = new Dictionary<string, IAbstractDomain>();
+
+ // bitvector operations
+ public static Dictionary<int, Function> bvslt = new Dictionary<int, Function>();
+
+ public static void Register(string friendlyName, IAbstractDomain instance)
+ {
+ var Name = instance.GetType().FullName;
+ Debug.Assert(!abstractDomainInstances.ContainsKey(Name));
+ abstractDomainInstances.Add(Name, instance);
+ abstractDomainInstancesFriendly.Add(friendlyName, instance);
+ }
+
+ public static IAbstractDomain GetInstance(System.Type type)
+ {
+ var Name = type.FullName;
+ Debug.Assert(abstractDomainInstances.ContainsKey(Name));
+ return abstractDomainInstances[Name] as IAbstractDomain;
+ }
+
+ public static IAbstractDomain GetInstance(string friendlyName)
+ {
+ if (!abstractDomainInstancesFriendly.ContainsKey(friendlyName))
+ {
+ Console.WriteLine("Domain {0} not found", friendlyName);
+ Console.WriteLine("Supported domains are:");
+ abstractDomainInstancesFriendly.Keys.Iter(tup => Console.WriteLine(" {0}", tup));
+ throw new AbsHoudiniInternalError("Domain not found");
+ }
+ return abstractDomainInstancesFriendly[friendlyName] as IAbstractDomain;
+ }
+
+ public static void Initialize(Program program)
+ {
+ // Declare abstract domains
+ var domains = new List<System.Tuple<string, IAbstractDomain>>(new System.Tuple<string, IAbstractDomain>[] {
+ System.Tuple.Create("HoudiniConst", HoudiniConst.GetBottom() as IAbstractDomain),
+ System.Tuple.Create("Intervals", new Intervals() as IAbstractDomain),
+ System.Tuple.Create("ConstantProp", ConstantProp.GetBottom() as IAbstractDomain),
+ System.Tuple.Create("PredicateAbs", new PredicateAbsElem() as IAbstractDomain),
+ System.Tuple.Create("PredicateAbsFull", new PredicateAbsFullElem() as IAbstractDomain),
+ System.Tuple.Create("ImplicationDomain", ImplicationDomain.GetBottom() as IAbstractDomain),
+ System.Tuple.Create("PowDomain", PowDomain.GetBottom() as IAbstractDomain),
+ System.Tuple.Create("EqualitiesDomain", EqualitiesDomain.GetBottom() as IAbstractDomain),
+ System.Tuple.Create("IA[HoudiniConst]", new IndependentAttribute<HoudiniConst>() as IAbstractDomain),
+ System.Tuple.Create("IA[ConstantProp]", new IndependentAttribute<ConstantProp>() as IAbstractDomain),
+ System.Tuple.Create("IA[Intervals]", new IndependentAttribute<Intervals>() as IAbstractDomain),
+ System.Tuple.Create("IA[PowDomain]", new IndependentAttribute<PowDomain>() as IAbstractDomain),
+ });
+
+ domains.Iter(tup => AbstractDomainFactory.Register(tup.Item1, tup.Item2));
+ program.Functions.Iter(RegisterFunction);
+ }
+
+ private static void RegisterFunction(Function func)
+ {
+ var attr = QKeyValue.FindStringAttribute(func.Attributes, "bvbuiltin");
+ if (attr != null && attr == "bvslt" && func.InParams.Count == 2 && func.InParams[0].TypedIdent.Type.IsBv)
+ bvslt.Add(func.InParams[0].TypedIdent.Type.BvBits, func);
+ }
+ }
+
+ public interface IAbstractDomain
+ {
+ IAbstractDomain Bottom();
+ IAbstractDomain MakeTop(out bool changed);
+ IAbstractDomain Join(List<Model.Element> state);
+ Expr Gamma(List<Expr> vars);
+ bool TypeCheck(List<Type> argTypes, out string msg);
+ }
+
+ public class AbstractHoudini
+ {
+ // Input Program
+ Program program;
+ // Impl -> VC
+ Dictionary<string, VCExpr> impl2VC;
+ // Impl -> Vars at end of the impl
+ Dictionary<string, List<VCExpr>> impl2EndStateVars;
+ // Impl -> (callee,summary pred)
+ Dictionary<string, List<Tuple<string, bool, VCExprVar, VCExprNAry>>> impl2CalleeSummaries;
+ // pointer to summary class
+ ISummaryElement summaryClass;
+ // impl -> summary
+ Dictionary<string, ISummaryElement> impl2Summary;
+ // name -> impl
+ Dictionary<string, Implementation> name2Impl;
+ // Use Bilateral algorithm
+ public static bool UseBilateralAlgo = true;
+ public static int iterTimeLimit = -1; // ms
+
+ public static readonly string summaryPredSuffix = "SummaryPred";
+
+ // Essentials: VCGen, Prover, and reporter
+ VCGen vcgen;
+ ProverInterface prover;
+ AbstractHoudiniErrorReporter reporter;
+
+ // Stats
+ TimeSpan proverTime;
+ int numProverQueries;
+
+ // Produce witness for correctness: can be set programmatically
+ public static string WitnessFile = "absHoudiniWitness.bpl";
+
+ public AbstractHoudini(Program program)
+ {
+ this.program = program;
+ this.impl2VC = new Dictionary<string, VCExpr>();
+ this.impl2EndStateVars = new Dictionary<string, List<VCExpr>>();
+ this.impl2CalleeSummaries = new Dictionary<string, List<Tuple<string, bool, VCExprVar, VCExprNAry>>>();
+ this.impl2Summary = new Dictionary<string, ISummaryElement>();
+ this.name2Impl = SimpleUtil.nameImplMapping(program);
+
+ if (CommandLineOptions.Clo.ProverKillTime > 0)
+ CommandLineOptions.Clo.ProverOptions = CommandLineOptions.Clo.ProverOptions.Concat1(string.Format("TIME_LIMIT={0}", CommandLineOptions.Clo.ProverKillTime));
+
+ this.vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List<Checker>());
+ this.prover = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, -1);
+
+ this.reporter = new AbstractHoudiniErrorReporter();
+
+ this.proverTime = TimeSpan.Zero;
+ this.numProverQueries = 0;
+
+ if (CommandLineOptions.Clo.AbstractHoudini == "0")
+ UseBilateralAlgo = false;
+ }
+
+ public void computeSummaries(ISummaryElement summaryClass)
+ {
+ // TODO: move this some place else
+ PredicateAbs.FindUnsatPairs(prover.VCExprGen, prover);
+
+ this.summaryClass = summaryClass;
+
+ name2Impl.Values.Iter(attachEnsures);
+
+ program.Implementations
+ .Iter(impl => impl2Summary.Add(impl.Name, summaryClass.GetFlaseSummary(program, impl)));
+
+ // Build call graph
+ var Succ = new Dictionary<Implementation, HashSet<Implementation>>();
+ var Pred = new Dictionary<Implementation, HashSet<Implementation>>();
+ name2Impl.Values.Iter(impl => Succ.Add(impl, new HashSet<Implementation>()));
+ name2Impl.Values.Iter(impl => Pred.Add(impl, new HashSet<Implementation>()));
+
+ foreach (var impl in program.Implementations)
+ {
+ foreach (var blk in impl.Blocks)
+ {
+ foreach (var cmd in blk.Cmds.OfType<CallCmd>())
+ {
+ if (!name2Impl.ContainsKey(cmd.callee)) continue;
+ Succ[impl].Add(name2Impl[cmd.callee]);
+ Pred[name2Impl[cmd.callee]].Add(impl);
+ }
+ }
+ }
+
+ // Build SCC
+ var sccs = new StronglyConnectedComponents<Implementation>(name2Impl.Values,
+ new Adjacency<Implementation>(n => Pred[n]),
+ new Adjacency<Implementation>(n => Succ[n]));
+ sccs.Compute();
+
+ // impl -> priority
+ var impl2Priority = new Dictionary<string, int>();
+ int p = 0;
+ foreach (var scc in sccs)
+ {
+ foreach (var impl in scc)
+ {
+ impl2Priority.Add(impl.Name, p);
+ p++;
+ }
+ }
+
+
+ Inline();
+
+ #region Witness generation setup
+ // Create a copy of the program
+ var copy = new Dictionary<string, Implementation>();
+ if (WitnessFile != null)
+ {
+ foreach (var impl in program.Implementations)
+ {
+ var nimpl = new Implementation(Token.NoToken, impl.Name, impl.TypeParameters,
+ impl.InParams, impl.OutParams, new List<Variable>(impl.LocVars), new List<Block>());
+ foreach (var blk in impl.Blocks)
+ {
+ var cd = new CodeCopier();
+ nimpl.Blocks.Add(new Block(Token.NoToken, blk.Label,
+ cd.CopyCmdSeq(blk.Cmds), cd.CopyTransferCmd(blk.TransferCmd)));
+ }
+
+ copy.Add(impl.Name, nimpl);
+ }
+ }
+ #endregion
+
+ // Turn off subsumption. Why? Because then I see multiple occurences of the
+ // attached ensures in the VC
+ CommandLineOptions.Clo.UseSubsumption = CommandLineOptions.SubsumptionOption.Never;
+
+ // Create all VCs
+ name2Impl.Values
+ .Iter(GenVC);
+
+ // Start the iteration
+ var worklist = new SortedSet<Tuple<int, Implementation>>();
+ name2Impl.Values
+ .Iter(impl => worklist.Add(Tuple.Create(impl2Priority[impl.Name], impl)));
+
+ while (worklist.Any())
+ {
+ var impl = worklist.First().Item2;
+ worklist.Remove(worklist.First());
+
+ var changed = ProcessImpl(impl);
+
+ if (changed)
+ {
+ Pred[impl].Where(pred => UseBilateralAlgo || pred != impl).Iter(pred => worklist.Add(Tuple.Create(impl2Priority[pred.Name], pred)));
+ }
+ }
+
+ var allImpls = new SortedSet<Tuple<int, string>>();
+ name2Impl.Values.Iter(impl => allImpls.Add(Tuple.Create(impl2Priority[impl.Name], impl.Name)));
+ if (CommandLineOptions.Clo.Trace)
+ {
+ foreach (var tup in allImpls)
+ {
+ Console.WriteLine("Summary of {0}:", tup.Item2);
+ Console.WriteLine("{0}", impl2Summary[tup.Item2]);
+ }
+ Console.WriteLine("Prover time = {0}", proverTime.TotalSeconds.ToString("F2"));
+ Console.WriteLine("Number of prover queries = " + numProverQueries);
+ }
+
+ ProduceWitness(copy);
+
+ prover.Close();
+ CommandLineOptions.Clo.TheProverFactory.Close();
+ }
+
+ public HashSet<string> GetPredicates()
+ {
+ var ret = new HashSet<string>();
+ prover = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, -1);
+
+ foreach (var tup in impl2Summary)
+ {
+ var s = tup.Value as PredicateAbs;
+ if (s == null) continue;
+ ret.UnionWith(s.GetPredicates(program, prover.VCExprGen, prover));
+ // debug output
+ //Console.WriteLine("Summary of {0}:", tup.Key);
+ //Console.WriteLine("{0}", tup.Value);
+ }
+
+ prover.Close();
+ CommandLineOptions.Clo.TheProverFactory.Close();
+ return ret;
+ }
+
+ // Obtain the summary expression for a procedure: used programmatically by clients
+ // of AbstractHoudini
+ public Expr GetSummary(Program program, Procedure proc)
+ {
+ if (!impl2Summary.ContainsKey(proc.Name))
+ return Expr.True;
+
+ var vars = new Dictionary<string, Expr>();
+ foreach (var g in program.GlobalVariables)
+ vars.Add(g.Name, Expr.Ident(g));
+ foreach (var v in proc.InParams.OfType<Variable>())
+ vars.Add(v.Name, Expr.Ident(v));
+ foreach (var v in proc.OutParams.OfType<Variable>())
+ vars.Add(v.Name, Expr.Ident(v));
+
+ return impl2Summary[proc.Name].GetSummaryExpr(
+ v => { if (vars.ContainsKey(v)) return vars[v]; else return null; },
+ v => { if (vars.ContainsKey(v)) return new OldExpr(Token.NoToken, vars[v]); else return null; });
+ }
+
+ public ISummaryElement GetSummaryLowLevel(Procedure proc)
+ {
+ if (!impl2Summary.ContainsKey(proc.Name)) return null;
+ return impl2Summary[proc.Name];
+ }
+
+ // Produce a witness that proves that the inferred annotations are correct
+ private void ProduceWitness(Dictionary<string, Implementation> copy)
+ {
+ if (WitnessFile == null)
+ return;
+
+ foreach (var proc in program.Procedures)
+ {
+ var nensures = new List<Ensures>();
+ proc.Ensures.OfType<Ensures>()
+ .Where(ens => !QKeyValue.FindBoolAttribute(ens.Attributes, "ah") &&
+ !QKeyValue.FindBoolAttribute(ens.Attributes, "pre") &&
+ !QKeyValue.FindBoolAttribute(ens.Attributes, "post") &&
+ QKeyValue.FindStringAttribute(ens.Attributes, "pre") == null &&
+ QKeyValue.FindStringAttribute(ens.Attributes, "post") == null)
+ .Iter(ens => nensures.Add(ens));
+ foreach (Ensures en in nensures)
+ en.Attributes = removeAttr("InlineAssume", en.Attributes);
+
+ proc.Ensures = nensures;
+ }
+
+ var decls = new List<Declaration>(copy.Values);
+ decls.AddRange(program.TopLevelDeclarations.Where(decl => !(decl is Implementation)));
+ program.TopLevelDeclarations = decls;
+ var name2Proc = new Dictionary<string, Procedure>();
+ foreach (var proc in program.Procedures)
+ {
+ name2Proc.Add(proc.Name, proc);
+ if (impl2Summary.ContainsKey(proc.Name))
+ {
+ var ens = new Ensures(false,
+ impl2Summary[proc.Name].GetSummaryExpr(
+ new Func<string, Expr>(s => null), new Func<string, Expr>(s => null)));
+ ens.Attributes = new QKeyValue(Token.NoToken, "inferred", new List<object>(), ens.Attributes);
+ proc.Ensures.Add(ens);
+ }
+ }
+
+ using (var wt = new TokenTextWriter(WitnessFile, /*pretty=*/ false))
+ {
+ program.Emit(wt);
+ }
+
+ // Replace SummaryPreds with their definition
+ foreach (var impl in program.Implementations)
+ {
+ foreach (var blk in impl.Blocks)
+ {
+ foreach (var cmd in blk.Cmds.OfType<AssumeCmd>())
+ {
+ var expr = cmd.Expr as NAryExpr;
+ if (expr == null) continue;
+ var op = expr.Fun as FunctionCall;
+ if (op == null || !op.FunctionName.EndsWith(summaryPredSuffix)) continue;
+ var calleeName = op.FunctionName.Substring(0, op.FunctionName.Length - summaryPredSuffix.Length);
+ if (!impl2Summary.ContainsKey(calleeName)) continue;
+ var callee = name2Impl[calleeName];
+
+ // variable order: globals, ins, outs, modifies
+ var forold = new Dictionary<string, Expr>();
+ var always = new Dictionary<string, Expr>();
+ int i = 0;
+ foreach (var g in program.GlobalVariables)
+ {
+ forold.Add(g.Name, expr.Args[i]);
+ always.Add(g.Name, expr.Args[i]);
+ i++;
+ }
+ foreach (var v in callee.InParams.OfType<Variable>())
+ {
+ always.Add(v.Name, expr.Args[i]);
+ i++;
+ }
+ foreach (var v in callee.OutParams.OfType<Variable>())
+ {
+ always.Add(v.Name, expr.Args[i]);
+ i++;
+ }
+ foreach (var ie in name2Proc[calleeName].Modifies.OfType<IdentifierExpr>())
+ {
+ always[ie.Name] = expr.Args[i];
+ i++;
+ }
+
+ cmd.Expr = impl2Summary[calleeName].GetSummaryExpr(
+ v => { if (always.ContainsKey(v)) return always[v]; else return null; },
+ v => { if (forold.ContainsKey(v)) return forold[v]; else return null; });
+ }
+ }
+ }
+
+ using (var wt = new TokenTextWriter(WitnessFile, /*pretty=*/ false))
+ {
+ program.Emit(wt);
+ }
+ if (CommandLineOptions.Clo.Trace) Console.WriteLine("Witness written to {0}", WitnessFile);
+ }
+
+ private QKeyValue removeAttr(string key, QKeyValue attr)
+ {
+ if (attr == null) return attr;
+ if (attr.Key == key) return removeAttr(key, attr.Next);
+ attr.Next = removeAttr(key, attr.Next);
+ return attr;
+ }
+
+ private void Inline()
+ {
+ if (CommandLineOptions.Clo.InlineDepth < 0)
+ return;
+
+ var callGraph = BuildCallGraph();
+
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ InlineEnsuresVisitor inlineEnsuresVisitor = new InlineEnsuresVisitor();
+ inlineEnsuresVisitor.Visit(impl);
+ }
+
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ impl.OriginalBlocks = impl.Blocks;
+ impl.OriginalLocVars = impl.LocVars;
+ }
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ CommandLineOptions.Inlining savedOption = CommandLineOptions.Clo.ProcedureInlining;
+ CommandLineOptions.Clo.ProcedureInlining = CommandLineOptions.Inlining.Spec;
+ Inliner.ProcessImplementationForHoudini(program, impl);
+ CommandLineOptions.Clo.ProcedureInlining = savedOption;
+ }
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ impl.OriginalBlocks = null;
+ impl.OriginalLocVars = null;
+ }
+
+ Graph<Implementation> oldCallGraph = callGraph;
+ callGraph = new Graph<Implementation>();
+ foreach (Implementation impl in oldCallGraph.Nodes)
+ {
+ callGraph.AddSource(impl);
+ }
+ foreach (Tuple<Implementation, Implementation> edge in oldCallGraph.Edges)
+ {
+ callGraph.AddEdge(edge.Item1, edge.Item2);
+ }
+ int count = CommandLineOptions.Clo.InlineDepth;
+ while (count > 0)
+ {
+ foreach (Implementation impl in oldCallGraph.Nodes)
+ {
+ List<Implementation> newNodes = new List<Implementation>();
+ foreach (Implementation succ in callGraph.Successors(impl))
+ {
+ newNodes.AddRange(oldCallGraph.Successors(succ));
+ }
+ foreach (Implementation newNode in newNodes)
+ {
+ callGraph.AddEdge(impl, newNode);
+ }
+ }
+ count--;
+ }
+ }
+
+ private Graph<Implementation> BuildCallGraph()
+ {
+ Graph<Implementation> callGraph = new Graph<Implementation>();
+ Dictionary<Procedure, HashSet<Implementation>> procToImpls = new Dictionary<Procedure, HashSet<Implementation>>();
+ foreach (var proc in program.Procedures)
+ {
+ procToImpls[proc] = new HashSet<Implementation>();
+ }
+ foreach (var impl in program.Implementations)
+ {
+ if (impl.SkipVerification) continue;
+ callGraph.AddSource(impl);
+ procToImpls[impl.Proc].Add(impl);
+ }
+ foreach (var impl in program.Implementations)
+ {
+ if (impl.SkipVerification) continue;
+ foreach (Block b in impl.Blocks)
+ {
+ foreach (Cmd c in b.Cmds)
+ {
+ CallCmd cc = c as CallCmd;
+ if (cc == null) continue;
+ foreach (Implementation callee in procToImpls[cc.Proc])
+ {
+ callGraph.AddEdge(impl, callee);
+ }
+ }
+ }
+ }
+ return callGraph;
+ }
+
+
+ private bool ProcessImpl(Implementation impl)
+ {
+ var ret = false;
+ var gen = prover.VCExprGen;
+
+ // construct summaries
+ var env = VCExpressionGenerator.True;
+ foreach (var tup in impl2CalleeSummaries[impl.Name])
+ {
+ // Not Bilateral: then reject self predicates
+ if (UseBilateralAlgo == false && tup.Item1 == impl.Name)
+ continue;
+
+ // Bilateral: only reject self summary
+ if (UseBilateralAlgo == true && tup.Item1 == impl.Name && tup.Item2)
+ continue;
+
+ var calleeSummary =
+ impl2Summary[tup.Item1].GetSummaryExpr(
+ GetVarMapping(name2Impl[tup.Item1], tup.Item4), prover.VCExprGen);
+ env = gen.AndSimp(env, gen.Eq(tup.Item3, calleeSummary));
+ }
+
+ var prev = impl2Summary[impl.Name].Copy();
+ var upper = impl2Summary[impl.Name].GetTrueSummary(program, impl);
+ var sw = new Stopwatch();
+ sw.Start();
+ var lowerTime = TimeSpan.Zero;
+
+ while(true)
+ {
+ var usedLower = true;
+ var query = impl2Summary[impl.Name];
+ sw.Restart();
+
+ // construct self summaries
+ var summaryExpr = VCExpressionGenerator.True;
+ foreach (var tup in impl2CalleeSummaries[impl.Name])
+ {
+ if (UseBilateralAlgo == false && tup.Item1 != impl.Name)
+ continue;
+ if (UseBilateralAlgo == true && (tup.Item1 != impl.Name || !tup.Item2))
+ continue;
+
+ if (UseBilateralAlgo)
+ {
+ query = query.AbstractConsequence(upper);
+ if (query == null) query = impl2Summary[tup.Item1];
+ else usedLower = false;
+ }
+
+ var ts =
+ query.GetSummaryExpr(
+ GetVarMapping(name2Impl[tup.Item1], tup.Item4), prover.VCExprGen);
+ summaryExpr = gen.AndSimp(summaryExpr, gen.Eq(tup.Item3, ts));
+ }
+ //Console.WriteLine("Trying summary for {0}: {1}", impl.Name, summaryExpr);
+
+ reporter.model = null;
+ var vc = gen.AndSimp(env, summaryExpr);
+ vc = gen.Implies(vc, impl2VC[impl.Name]);
+
+ //Console.WriteLine("Checking: {0}", vc);
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Verifying {0} ({1}): {2}", impl.Name, usedLower ? "lower" : "ac", query);
+
+ if (usedLower && lowerTime.TotalMilliseconds >= iterTimeLimit && iterTimeLimit >= 0)
+ {
+ if (UseBilateralAlgo)
+ {
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
+ ret = prev.IsEqual(upper) ? false : true;
+ impl2Summary[impl.Name] = upper;
+ break;
+ }
+ else
+ {
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
+ var tt = impl2Summary[impl.Name].GetTrueSummary(program, impl);
+ ret = prev.IsEqual(tt) ? false : true; ;
+ impl2Summary[impl.Name] = tt;
+ break;
+ }
+ }
+
+ var start = DateTime.Now;
+
+ //prover.Push();
+ //prover.Assert(gen.Not(vc), true);
+ //prover.FlushAxiomsToTheoremProver();
+ //prover.Check();
+ //ProverInterface.Outcome proverOutcome = prover.CheckOutcome(reporter);
+ //prover.Pop();
+
+ prover.BeginCheck(impl.Name, vc, reporter);
+ ProverInterface.Outcome proverOutcome = prover.CheckOutcome(reporter);
+
+ var inc = (DateTime.Now - start);
+ proverTime += inc;
+ numProverQueries++;
+
+ sw.Stop();
+ if (usedLower) lowerTime += sw.Elapsed;
+
+ if(CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Time taken = " + inc.TotalSeconds.ToString());
+
+ if (UseBilateralAlgo)
+ {
+ if (proverOutcome == ProverInterface.Outcome.TimeOut || proverOutcome == ProverInterface.Outcome.OutOfMemory)
+ {
+ if(CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
+ ret = prev.IsEqual(upper) ? false : true;
+ impl2Summary[impl.Name] = upper;
+ break;
+ }
+
+ if (reporter.model == null && usedLower)
+ break;
+
+ if (reporter.model == null)
+ {
+ upper.Meet(query);
+ }
+ else
+ {
+ var state = CollectState(impl);
+ impl2Summary[impl.Name].Join(state, reporter.model);
+ ret = true;
+ }
+ }
+ else
+ {
+ if (proverOutcome == ProverInterface.Outcome.TimeOut || proverOutcome == ProverInterface.Outcome.OutOfMemory)
+ {
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Timeout/Spaceout while verifying " + impl.Name);
+ var tt = impl2Summary[impl.Name].GetTrueSummary(program, impl);
+ ret = prev.IsEqual(tt) ? false : true; ;
+ impl2Summary[impl.Name] = tt;
+ break;
+ }
+
+ if (reporter.model == null)
+ break;
+ //reporter.model.Write(Console.Out);
+
+ var state = CollectState(impl);
+ impl2Summary[impl.Name].Join(state, reporter.model);
+ ret = true;
+ }
+ }
+ return ret;
+ }
+
+ private Dictionary<string, VCExpr> GetVarMapping(Implementation impl, VCExprNAry summaryPred)
+ {
+ var ret = new Dictionary<string, VCExpr>();
+
+ var cnt = 0;
+ foreach (var g in program.GlobalVariables)
+ {
+ ret.Add(string.Format("old({0})", g.Name), summaryPred[cnt]);
+ cnt++;
+ }
+ foreach (var v in impl.InParams.OfType<Variable>().Concat(
+ impl.OutParams.OfType<Variable>().Concat(
+ impl.Proc.Modifies.OfType<IdentifierExpr>().Select(ie => ie.Decl))))
+ {
+ ret.Add(v.Name, summaryPred[cnt]);
+ cnt++;
+ }
+
+ // Fill up values of globals that are not modified
+ cnt = 0;
+ foreach (var g in program.GlobalVariables)
+ {
+ if (ret.ContainsKey(g.Name)) { cnt++; continue; }
+
+ ret.Add(string.Format("{0}", g.Name), summaryPred[cnt]);
+ cnt++;
+ }
+
+ // Constants
+ foreach (var c in program.Constants)
+ {
+ var value = prover.Context.BoogieExprTranslator.Translate(Expr.Ident(c));
+ ret.Add(string.Format("{0}", c.Name), value);
+ ret.Add(string.Format("old({0})", c.Name), value);
+ }
+
+ return ret;
+ }
+
+ private Dictionary<string, Model.Element> CollectState(Implementation impl)
+ {
+ var ret = new Dictionary<string, Model.Element>();
+
+ var model = reporter.model;
+ var implVars = impl2EndStateVars[impl.Name];
+
+ var cnt = 0;
+ foreach (var g in program.GlobalVariables)
+ {
+ ret.Add(string.Format("old({0})", g.Name), getValue(implVars[cnt], model));
+ cnt++;
+ }
+ foreach (var v in impl.InParams.OfType<Variable>().Concat(
+ impl.OutParams.OfType<Variable>().Concat(
+ impl.Proc.Modifies.OfType<IdentifierExpr>().Select(ie => ie.Decl))))
+ {
+ ret.Add(v.Name, getValue(implVars[cnt], model));
+ cnt++;
+ }
+
+ // Fill up values of globals that are not modified
+ cnt = 0;
+ foreach (var g in program.GlobalVariables)
+ {
+ if (ret.ContainsKey(g.Name)) { cnt++; continue; }
+
+ ret.Add(string.Format("{0}", g.Name), getValue(implVars[cnt], model));
+ cnt++;
+ }
+
+ // Constants
+ foreach (var c in program.Constants)
+ {
+ try
+ {
+ var value = getValue(prover.Context.BoogieExprTranslator.Translate(Expr.Ident(c)), model);
+ ret.Add(string.Format("{0}", c.Name), value);
+ ret.Add(string.Format("old({0})", c.Name), value);
+ }
+ catch (Exception)
+ {
+ // constant not assigned a value: add a default value
+ Model.Element value = null;
+ if (c.TypedIdent.Type.IsInt)
+ value = model.MkIntElement(0);
+ else if (c.TypedIdent.Type.IsBool)
+ value = model.MkElement("false");
+
+ ret.Add(string.Format("{0}", c.Name), value);
+ ret.Add(string.Format("old({0})", c.Name), value);
+ }
+ }
+
+ return ret;
+ }
+
+ private Model.Element getValue(VCExpr arg, Model model)
+ {
+ if (arg is VCExprLiteral)
+ {
+ //return model.GetElement(arg.ToString());
+ return model.MkElement(arg.ToString());
+ }
+ else if (arg is VCExprVar)
+ {
+ var el = model.TryGetFunc(prover.Context.Lookup(arg as VCExprVar));
+ if (el != null)
+ {
+ Debug.Assert(el.Arity == 0 && el.AppCount == 1);
+ return el.Apps.First().Result;
+ }
+ else
+ {
+ // Variable not defined; assign arbitrary value
+ if (arg.Type.IsBool)
+ return model.MkElement("false");
+ else if (arg.Type.IsInt)
+ return model.MkIntElement(0);
+ else
+ return null;
+ }
+ }
+ else
+ {
+ Debug.Assert(false);
+ return null;
+ }
+ }
+
+ private void attachEnsures(Implementation impl)
+ {
+ List<Variable> functionInterfaceVars = new List<Variable>();
+ foreach (Variable v in vcgen.program.GlobalVariables)
+ {
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
+ }
+ foreach (Variable v in impl.InParams)
+ {
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
+ }
+ foreach (Variable v in impl.OutParams)
+ {
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
+ }
+ foreach (IdentifierExpr e in impl.Proc.Modifies)
+ {
+ if (e.Decl == null) continue;
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", e.Decl.TypedIdent.Type), true));
+ }
+ Formal returnVar = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false);
+ var function = new Function(Token.NoToken, impl.Name + summaryPredSuffix, functionInterfaceVars, returnVar);
+ prover.Context.DeclareFunction(function, "");
+
+ List<Expr> exprs = new List<Expr>();
+ foreach (Variable v in vcgen.program.GlobalVariables)
+ {
+ Contract.Assert(v != null);
+ exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
+ }
+ foreach (Variable v in impl.Proc.InParams)
+ {
+ Contract.Assert(v != null);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ foreach (Variable v in impl.Proc.OutParams)
+ {
+ Contract.Assert(v != null);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ foreach (IdentifierExpr ie in impl.Proc.Modifies)
+ {
+ Contract.Assert(ie != null);
+ if (ie.Decl == null)
+ continue;
+ exprs.Add(ie);
+ }
+ Expr postExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
+ impl.Proc.Ensures.Add(
+ new Ensures(Token.NoToken, false, postExpr, "",
+ new QKeyValue(Token.NoToken, "ah", new List<object>(), null)));
+ }
+
+ private void GenVC(Implementation impl)
+ {
+ ModelViewInfo mvInfo;
+ Dictionary<int, Absy> label2absy;
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Generating VC of {0}", impl.Name);
+ }
+
+ vcgen.ConvertCFG2DAG(impl);
+ vcgen.PassifyImpl(impl, out mvInfo);
+
+ var gen = prover.VCExprGen;
+ var vcexpr = vcgen.GenerateVC(impl, null, out label2absy, prover.Context);
+
+
+ // Find the assert
+ impl2EndStateVars.Add(impl.Name, new List<VCExpr>());
+ var found = false;
+ var assertId = -1;
+ foreach (var blk in impl.Blocks)
+ {
+ foreach (var cmd in blk.Cmds.OfType<AssertCmd>())
+ {
+ if (SimpleUtil.isAssertTrue(cmd)) continue;
+ var nary = cmd.Expr as NAryExpr;
+ if (nary == null) continue;
+ var pred = nary.Fun as FunctionCall;
+ if (pred == null || pred.FunctionName != (impl.Name + (AbstractHoudini.summaryPredSuffix)))
+ continue;
+
+ Debug.Assert(!found);
+ found = true;
+ assertId = cmd.UniqueId;
+ //Console.WriteLine("assert cmd id: {0}", cmd.UniqueId);
+ nary.Args.OfType<Expr>()
+ .Iter(expr => impl2EndStateVars[impl.Name].Add(prover.Context.BoogieExprTranslator.Translate(expr)));
+ }
+ }
+
+ // It is possible that no assert is found in the procedure. It happens when the
+ // procedure doesn't return.
+ //Debug.Assert(found);
+
+ // Grab summary predicates
+ var visitor = new FindSummaryPred(prover.VCExprGen, assertId);
+ vcexpr = visitor.Mutate(vcexpr, true);
+
+ // Create a macro so that the VC can sit with the theorem prover
+ Macro macro = new Macro(Token.NoToken, impl.Name + "Macro", new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false));
+ prover.DefineMacro(macro, vcexpr);
+
+ // Store VC
+ impl2VC.Add(impl.Name, gen.Function(macro));
+
+ //Console.WriteLine("VC of {0}: {1}", impl.Name, vcexpr);
+
+ // check sanity: only one predicate for self-summary
+ // (There may be none when the procedure doesn't return)
+ Debug.Assert(visitor.summaryPreds.Count(tup => tup.Item2) <= 1);
+
+ impl2CalleeSummaries.Add(impl.Name, new List<Tuple<string, bool, VCExprVar, VCExprNAry>>());
+ visitor.summaryPreds.Iter(tup => impl2CalleeSummaries[impl.Name].Add(tup));
+ }
+ }
+
+ public interface ISummaryElement
+ {
+ ISummaryElement Copy();
+ ISummaryElement GetFlaseSummary(Program program, Implementation impl);
+ void Join(Dictionary<string, Model.Element> state, Model model);
+ VCExpr GetSummaryExpr(Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen);
+ Expr GetSummaryExpr(Func<string, Expr> always, Func<string, Expr> forold);
+
+ // For Bilateral
+ ISummaryElement GetTrueSummary(Program program, Implementation impl);
+ void Meet(ISummaryElement other);
+ bool IsEqual(ISummaryElement other);
+ ISummaryElement AbstractConsequence(ISummaryElement upper);
+ }
+
+ public class ConstantVal : ISummaryElement
+ {
+ Program program;
+ Implementation impl;
+ // var -> const set
+ Dictionary<string, HashSet<int>> val;
+ // set of vars
+ HashSet<Variable> vars;
+
+ public static readonly int MAX = 3;
+
+ public ConstantVal()
+ {
+ // this is just a place holder
+ val = new Dictionary<string, HashSet<int>>();
+ vars = new HashSet<Variable>();
+ }
+
+ private ConstantVal(Program program, Implementation impl)
+ {
+ this.program = program;
+ this.impl = impl;
+ this.val = new Dictionary<string, HashSet<int>>();
+
+ vars = new HashSet<Variable>();
+ impl.Proc.Modifies
+ .OfType<IdentifierExpr>()
+ .Select(ie => ie.Decl)
+ .Where(v => v.TypedIdent.Type.IsInt)
+ .Iter(v => vars.Add(v));
+ impl.OutParams.OfType<Variable>()
+ .Where(v => v.TypedIdent.Type.IsInt)
+ .Iter(v => vars.Add(v));
+
+ vars.Iter(v => val.Add(v.Name, null));
+ }
+
+
+ public void Join(Dictionary<string, Model.Element> state, Model model)
+ {
+ foreach (var vv in vars)
+ {
+ var v = vv.Name;
+ var newv = state[v].AsInt();
+ var oldv = val[v];
+
+ if (oldv == null)
+ {
+ val[v] = new HashSet<int>();
+ val[v].Add(newv);
+ }
+ else if(oldv.Count > 0)
+ {
+ val[v].Add(newv);
+ if (val[v].Count > MAX)
+ val[v] = new HashSet<int>();
+ }
+
+ }
+ }
+
+ public VCExpr GetSummaryExpr(Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen)
+ {
+ VCExpr ret = VCExpressionGenerator.True;
+ if (val.Values.Any(v => v == null))
+ return VCExpressionGenerator.False;
+
+ foreach (var v in vars)
+ {
+ var consts = val[v.Name];
+ Debug.Assert(consts != null);
+
+ if (consts.Count == 0)
+ continue;
+
+ var vexpr = VCExpressionGenerator.False;
+ consts.Iter(c => vexpr = gen.OrSimp(vexpr, gen.Eq(incarnations[v.Name], gen.Integer(Microsoft.Basetypes.BigNum.FromInt(c)))));
+ ret = gen.AndSimp(ret, vexpr);
+ }
+
+ return ret;
+ }
+
+ public override string ToString()
+ {
+ var ret = "true";
+ if (val.Values.Any(v => v == null))
+ return "false";
+
+ foreach (var v in vars)
+ {
+ var consts = val[v.Name];
+ Debug.Assert(consts != null);
+
+ if (consts.Count == 0)
+ continue;
+
+ var vexpr = "false";
+ consts.Iter(c => vexpr =
+ string.Format("{0} OR ({1} == {2})", vexpr, v.Name, c));
+
+ ret = string.Format("{0} AND ({1})", ret, vexpr);
+ }
+
+ return ret;
+ }
+
+
+ public ISummaryElement GetFlaseSummary(Program program, Implementation impl)
+ {
+ return new ConstantVal(program, impl);
+ }
+
+ #region ISummaryElement (Bilateral) Members
+
+
+ public ISummaryElement GetTrueSummary(Program program, Implementation impl)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Meet(ISummaryElement other)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool IsEqual(ISummaryElement other)
+ {
+ throw new NotImplementedException();
+ }
+
+ public ISummaryElement AbstractConsequence(ISummaryElement upper)
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+
+ #region ISummaryElement Members
+
+
+ public Expr GetSummaryExpr(Func<string, Expr> always, Func<string, Expr> forold)
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+
+ #region ISummaryElement Members
+
+ public ISummaryElement Copy()
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ public class NamedExpr
+ {
+ public string name;
+ public Expr expr;
+
+ public NamedExpr(string name, Expr expr)
+ {
+ this.name = name;
+ this.expr = expr;
+ }
+
+ public NamedExpr(Expr expr)
+ {
+ this.name = null;
+ this.expr = expr;
+ }
+
+ public override string ToString()
+ {
+ if (name != null)
+ return name;
+
+ return expr.ToString();
+ }
+ }
+
+ public class PredicateAbs : ISummaryElement
+ {
+ public static Dictionary<string, List<NamedExpr>> PrePreds { get; private set; }
+ public static Dictionary<string, HashSet<int>> PosPrePreds { get; private set; }
+ public static Dictionary<string, List<NamedExpr>> PostPreds { get; private set; }
+ public static Dictionary<Tuple<string, int>, List<PredicateAbsDisjunct>> UpperCandidates;
+ private static HashSet<string> boolConstants;
+ // {proc, pred-pair} -> polariry
+ public static HashSet<Tuple<string, int, int, bool, bool>> unsatPrePredPairs;
+ public static HashSet<Tuple<string, int, int, bool, bool>> unsatPostPredPairs;
+
+ // Temporary: used during eval
+ private static Model model = null;
+
+ string procName;
+ PredicateAbsDisjunct[] value;
+ bool isFalse;
+
+ public PredicateAbs(string procName)
+ {
+ this.procName = procName;
+ isFalse = true;
+ value = new PredicateAbsDisjunct[PostPreds[this.procName].Count];
+ for (int i = 0; i < PostPreds[this.procName].Count; i++) value[i] = null;
+ }
+
+ public static void Initialize(Program program)
+ {
+ PrePreds = new Dictionary<string, List<NamedExpr>>();
+ PostPreds = new Dictionary<string, List<NamedExpr>>();
+ PosPrePreds = new Dictionary<string, HashSet<int>>();
+
+ boolConstants = new HashSet<string>();
+ UpperCandidates = new Dictionary<Tuple<string, int>, List<PredicateAbsDisjunct>>();
+
+ program.Constants
+ .Where(c => c.TypedIdent.Type.IsBool)
+ .Iter(c => boolConstants.Add(c.Name));
+
+ // Add template pre-post to all procedures
+ var preT = new List<NamedExpr>();
+ var postT = new List<NamedExpr>();
+ var posPreT = new HashSet<int>();
+ var tempP = new HashSet<Procedure>();
+ foreach (var proc in
+ program.Procedures
+ .Where(proc => QKeyValue.FindBoolAttribute(proc.Attributes, "template")))
+ {
+ tempP.Add(proc);
+ foreach (var ens in proc.Ensures.OfType<Ensures>())
+ {
+ var pos = QKeyValue.FindBoolAttribute(ens.Attributes, "positive");
+
+ if (QKeyValue.FindBoolAttribute(ens.Attributes, "pre"))
+ {
+ preT.Add(new NamedExpr(null, ens.Condition));
+ if (pos) posPreT.Add(preT.Count - 1);
+ }
+
+ if (QKeyValue.FindBoolAttribute(ens.Attributes, "post"))
+ postT.Add(new NamedExpr(null, ens.Condition));
+
+ var s = QKeyValue.FindStringAttribute(ens.Attributes, "pre");
+ if (s != null)
+ {
+ preT.Add(new NamedExpr(s, ens.Condition));
+ if (pos) posPreT.Add(preT.Count - 1);
+ }
+
+ s = QKeyValue.FindStringAttribute(ens.Attributes, "post");
+ if (s != null)
+ postT.Add(new NamedExpr(s, ens.Condition));
+ }
+ }
+
+ program.RemoveTopLevelDeclarations(decl => tempP.Contains(decl));
+ var upperPreds = new Dictionary<string, List<Expr>>();
+
+ foreach (var impl in program.Implementations)
+ {
+ PrePreds.Add(impl.Name, new List<NamedExpr>());
+ PostPreds.Add(impl.Name, new List<NamedExpr>());
+ PosPrePreds.Add(impl.Name, new HashSet<int>());
+
+ // Add "false" as the first post predicate
+ //PostPreds[impl.Name].Add(new NamedExpr(Expr.False));
+
+ preT.Iter(e => PrePreds[impl.Name].Add(e));
+ postT.Iter(e => PostPreds[impl.Name].Add(e));
+ PosPrePreds[impl.Name].UnionWith(posPreT);
+
+ // Pick up per-procedure pre-post
+ var nens = new List<Ensures>();
+ foreach (var ens in impl.Proc.Ensures.OfType<Ensures>())
+ {
+ string s = null;
+ var pos = QKeyValue.FindBoolAttribute(ens.Attributes, "positive");
+
+ if (QKeyValue.FindBoolAttribute(ens.Attributes, "pre"))
+ {
+ PrePreds[impl.Name].Add(new NamedExpr(ens.Condition));
+ PosPrePreds[impl.Name].Add(PrePreds[impl.Name].Count - 1);
+ }
+ else if (QKeyValue.FindBoolAttribute(ens.Attributes, "post"))
+ {
+ PostPreds[impl.Name].Add(new NamedExpr(ens.Condition));
+ }
+ else if ((s = QKeyValue.FindStringAttribute(ens.Attributes, "pre")) != null)
+ {
+ PrePreds[impl.Name].Add(new NamedExpr(s, ens.Condition));
+ PosPrePreds[impl.Name].Add(PrePreds[impl.Name].Count - 1);
+ }
+ else if ((s = QKeyValue.FindStringAttribute(ens.Attributes, "post")) != null)
+ {
+ PostPreds[impl.Name].Add(new NamedExpr(s, ens.Condition));
+ }
+ else if (QKeyValue.FindBoolAttribute(ens.Attributes, "upper"))
+ {
+ var key = impl.Name;
+ if (!upperPreds.ContainsKey(key))
+ upperPreds.Add(key, new List<Expr>());
+ upperPreds[key].Add(ens.Condition);
+ }
+ else
+ {
+ nens.Add(ens);
+ }
+ }
+ impl.Proc.Ensures = nens;
+ }
+
+ foreach (var tup in upperPreds)
+ {
+ var procName = tup.Key;
+ var candidates = tup.Value;
+ if (!candidates.Any()) continue;
+
+ var strToPost = new Dictionary<string, int>();
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ strToPost.Add(PostPreds[procName][i].expr.ToString(), i);
+ }
+
+ foreach (var expr in candidates)
+ {
+ if (strToPost.ContainsKey(expr.ToString()))
+ {
+ var key = Tuple.Create(procName, strToPost[expr.ToString()]);
+ if (!UpperCandidates.ContainsKey(key))
+ UpperCandidates.Add(key, new List<PredicateAbsDisjunct>());
+ UpperCandidates[key].Add(new PredicateAbsDisjunct(true, procName));
+ }
+ else
+ {
+ // Try parsing the expression as (pre-conjunct ==> post-pred)
+ var parsed = ParseExpr(expr, procName);
+ if (parsed != null && strToPost.ContainsKey(parsed.Item2.ToString()))
+ {
+ var key = Tuple.Create(procName, strToPost[parsed.Item2.ToString()]);
+ if (!UpperCandidates.ContainsKey(key))
+ UpperCandidates.Add(key, new List<PredicateAbsDisjunct>());
+ UpperCandidates[key].Add(parsed.Item1);
+ }
+ }
+ }
+
+ }
+ //Console.WriteLine("Running Abstract Houdini");
+ //PostPreds.Iter(expr => Console.WriteLine("\tPost: {0}", expr));
+ //PrePreds.Iter(expr => Console.WriteLine("\tPre: {0}", expr));
+ }
+
+ // Try parsing the expression as (pre-conjunct ==> post-pred)
+ private static Tuple<PredicateAbsDisjunct, Expr> ParseExpr(Expr expr, string procName)
+ {
+ Expr postExpr = null;
+ Expr preExpr = null;
+
+ // Decompose outer Implies
+ var nexpr = expr as NAryExpr;
+ if (nexpr != null && (nexpr.Fun is BinaryOperator)
+ && (nexpr.Fun as BinaryOperator).Op == BinaryOperator.Opcode.Imp
+ && (nexpr.Args.Count == 2))
+ {
+ postExpr = nexpr.Args[1];
+ preExpr = nexpr.Args[0];
+ }
+ else
+ {
+ if(CommandLineOptions.Clo.Trace) Console.WriteLine("Failed to parse {0} (ignoring)", expr);
+ return null;
+ }
+
+
+ var atoms = DecomposeOuterAnd(preExpr);
+ var pos = new HashSet<int>();
+ var neg = new HashSet<int>();
+
+ foreach (var atom in atoms)
+ {
+ var index = PrePreds[procName].FindIndex(ne => ne.expr.ToString() == atom.ToString());
+ if (index == -1)
+ {
+ index = PrePreds[procName].FindIndex(ne => Expr.Not(ne.expr).ToString() == atom.ToString());
+ if (index == -1)
+ {
+ if(CommandLineOptions.Clo.Trace) Console.WriteLine("Failed to parse {0} (ignoring)", atom);
+ return null;
+ }
+ else
+ {
+ neg.Add(index);
+ }
+ }
+ else
+ {
+ pos.Add(index);
+ }
+ }
+
+ var conj = new PredicateAbsConjunct(pos, neg, procName);
+ var conjls = new List<PredicateAbsConjunct>();
+ conjls.Add(conj);
+
+ return Tuple.Create(new PredicateAbsDisjunct(conjls, procName), postExpr);
+ }
+
+ // blah && blah ==> {blah, blah}
+ static IEnumerable<Expr> DecomposeOuterAnd(Expr expr)
+ {
+ var ret = new List<Expr>();
+
+ var nexpr = expr as NAryExpr;
+ if (nexpr == null
+ || !(nexpr.Fun is BinaryOperator)
+ || (nexpr.Fun as BinaryOperator).Op != BinaryOperator.Opcode.And)
+ {
+ ret.Add(expr);
+ }
+ else
+ {
+ foreach (Expr a in nexpr.Args)
+ ret.AddRange(DecomposeOuterAnd(a));
+ }
+
+ return ret;
+ }
+
+
+ private Model.Element Eval(Expr expr, Dictionary<string, Model.Element> state)
+ {
+ if (expr is LiteralExpr)
+ {
+ return ToElem((expr as LiteralExpr).Val);
+ }
+
+ if (expr is IdentifierExpr)
+ {
+ return LookupVariable((expr as IdentifierExpr).Name, state, false);
+ }
+
+ if (expr is OldExpr)
+ {
+ var ide = (expr as OldExpr).Expr as IdentifierExpr;
+ Debug.Assert(ide != null);
+
+ return LookupVariable(ide.Name, state, true);
+ }
+
+ if (expr is NAryExpr)
+ {
+ var nary = expr as NAryExpr;
+ if (nary.Fun is UnaryOperator)
+ {
+ return ToElem((nary.Fun as UnaryOperator).Evaluate(ToValue(Eval(nary.Args[0], state))));
+ }
+ if (nary.Fun is BinaryOperator)
+ {
+ return ToElem((nary.Fun as BinaryOperator).Evaluate(ToValue(Eval(nary.Args[0], state)), ToValue(Eval(nary.Args[1], state))));
+ }
+ if (nary.Fun is MapSelect && nary.Args.Count == 2)
+ {
+ var index = Eval(nary.Args[1], state);
+ var map = Eval(nary.Args[0], state) as Model.Array;
+ Debug.Assert(map != null, "Variable of map type must have an Array-typed value");
+ var ret = map.Value.TryEval(index as Model.Element);
+ if (ret == null) ret = map.Value.Else;
+ Debug.Assert(ret != null);
+ return ret;
+ }
+ Debug.Assert(false, "No other op is handled");
+ }
+ throw new NotImplementedException(string.Format("Expr of type {0} is not handled", expr.GetType().ToString()));
+ }
+
+ private Model.Element LookupVariable(string v, Dictionary<string, Model.Element> state, bool tryOld)
+ {
+ if (tryOld)
+ {
+ var oldv = string.Format("old({0})", v);
+ if (state.ContainsKey(oldv))
+ {
+ return state[oldv];
+ }
+ throw new AbsHoudiniInternalError("Cannot handle this case");
+ }
+
+ if (state.ContainsKey(v))
+ {
+ return state[v];
+ }
+
+ /*
+ if (boolConstants.Contains(v))
+ {
+ // value of this constant is immaterial, return true
+ return model.MkElement("true");
+ }
+ */
+
+ throw new AbsHoudiniInternalError("Cannot handle this case");
+ }
+
+ private static VCExpr ToVcVar(string v, Dictionary<string, VCExpr> incarnations, bool tryOld)
+ {
+ if (tryOld)
+ {
+ var oldv = string.Format("old({0})", v);
+ if (incarnations.ContainsKey(oldv))
+ {
+ return incarnations[oldv];
+ }
+ throw new AbsHoudiniInternalError("Cannot handle this case");
+ }
+
+ if (incarnations.ContainsKey(v))
+ {
+ return incarnations[v];
+ }
+
+ throw new AbsHoudiniInternalError("Cannot handle this case");
+ }
+
+ public static void FindUnsatPairs(VCExpressionGenerator gen, ProverInterface prover)
+ {
+ unsatPrePredPairs = new HashSet<Tuple<string, int, int, bool, bool>>();
+ unsatPostPredPairs = new HashSet<Tuple<string, int, int, bool, bool>>();
+
+ var cachePos = new HashSet<Tuple<string, string>>();
+ var cacheNeg = new HashSet<Tuple<string, string>>();
+ var record = new Action<object, string, int, int, bool, bool>(
+ (map, proc, e1, e2, p1, p2) => {
+ var key = Tuple.Create(proc, e1, e2, p1, p2);
+ if (map == PrePreds)
+ unsatPrePredPairs.Add(key);
+ else
+ unsatPostPredPairs.Add(key);
+ }
+ );
+
+ var predMaps = new List<Dictionary<string, List<NamedExpr>>>();
+ predMaps.Add(PrePreds); predMaps.Add(PostPreds);
+
+ foreach (var map in predMaps)
+ {
+ foreach (var proc in map.Keys)
+ {
+ for (int i = 0; i < 2 * map[proc].Count(); i++)
+ {
+ var p1 = (i % 2); // polarity
+ var e1 = map[proc][i / 2].expr;
+ if (p1 == 0) e1 = Expr.Not(e1);
+
+ for (int j = 2 * ((i / 2) + 1); j < 2 * map[proc].Count(); j++)
+ {
+ var p2 = (j % 2); // polarity
+ var e2 = map[proc][j / 2].expr;
+ if (p2 == 0) e2 = Expr.Not(e2);
+
+ var key = Tuple.Create(e1.ToString(), e2.ToString());
+ if (cachePos.Contains(key))
+ {
+ record(map, proc, i / 2, j / 2, p1 == 1, p2 == 1);
+ continue;
+ }
+ else if (cacheNeg.Contains(key))
+ {
+ continue;
+ }
+
+ if (!CheckIfUnsat(e1, e2, gen, prover))
+ {
+ cacheNeg.Add(key);
+ continue;
+ }
+ cachePos.Add(key);
+ record(map, proc, i / 2, j / 2, p1 == 1, p2 == 1);
+
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Proved UNSAT: {0} {1}", e1, e2);
+ }
+ }
+ }
+ }
+ }
+
+ // Is a ^ b UNSAT?
+ private static bool CheckIfUnsat(Expr a, Expr b, VCExpressionGenerator gen, ProverInterface prover)
+ {
+ var gatherLitA = new GatherLiterals();
+ var gatherLitB = new GatherLiterals();
+
+ gatherLitA.Visit(a);
+ gatherLitB.Visit(b);
+
+ var seta = new HashSet<Variable>();
+ var setb = new HashSet<Variable>();
+ gatherLitA.literals.Iter(tup => seta.Add(tup.Item1));
+ gatherLitB.literals.Iter(tup => setb.Add(tup.Item1));
+ seta.IntersectWith(setb);
+ if (!seta.Any()) return false;
+
+ // Create fresh variables
+ return CheckIfUnsat(Expr.And(a, b), gen, prover);
+ }
+
+ // Is a UNSAT?
+ private static bool CheckIfUnsat(Expr a, VCExpressionGenerator gen, ProverInterface prover)
+ {
+ var gatherLitA = new GatherLiterals();
+ gatherLitA.Visit(a);
+
+ // Create fresh variables
+ var counter = 0;
+ var incarnations = new Dictionary<string, VCExpr>();
+ foreach (var literal in gatherLitA.literals)
+ {
+ if (incarnations.ContainsKey(literal.Item2.ToString()))
+ continue;
+
+ //if(!literal.Item1.TypedIdent.Type.IsInt && !literal.Item1.TypedIdent.Type.IsBool)
+ var v = gen.Variable("UNSATCheck" + counter, literal.Item1.TypedIdent.Type);
+ incarnations.Add(literal.Item2.ToString(), v);
+ counter++;
+ }
+
+ var vc1 = ToVcExpr(a, incarnations, gen);
+ var vc = gen.LabelPos("Temp", vc1);
+
+ // check
+ prover.AssertAxioms();
+ prover.Push();
+ prover.Assert(vc, true);
+ prover.Check();
+ var outcome = prover.CheckOutcomeCore(new AbstractHoudiniErrorReporter());
+ prover.Pop();
+
+ if (outcome == ProverInterface.Outcome.Valid)
+ return true;
+ return false;
+ }
+
+
+ class GatherLiterals : ReadOnlyVisitor
+ {
+ public List<Tuple<Variable, Expr>> literals;
+ bool inOld;
+
+ public GatherLiterals()
+ {
+ literals = new List<Tuple<Variable, Expr>>();
+ inOld = false;
+ }
+
+ public override Expr VisitOldExpr(OldExpr node)
+ {
+ var prev = inOld;
+ inOld = true;
+ var ret = base.VisitOldExpr(node);
+ inOld = prev;
+ return ret;
+ }
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node)
+ {
+ if (inOld)
+ literals.Add(Tuple.Create(node.Decl, new OldExpr(Token.NoToken, node) as Expr));
+ else
+ literals.Add(Tuple.Create(node.Decl, node as Expr));
+
+ return node;
+ }
+ }
+
+ private object ToValue(Model.Element elem)
+ {
+ if (elem is Model.Integer)
+ {
+ return Microsoft.Basetypes.BigNum.FromInt((elem as Model.Integer).AsInt());
+ }
+ if (elem is Model.Boolean)
+ {
+ return (elem as Model.Boolean).Value;
+ }
+ if (elem is Model.DatatypeValue && (elem as Model.DatatypeValue).Arguments.Length == 1 &&
+ (elem as Model.DatatypeValue).ConstructorName == "-" &&
+ (elem as Model.DatatypeValue).Arguments[0] is Model.Integer)
+ {
+ // negative number as "-" @ int
+ return Microsoft.Basetypes.BigNum.FromInt(-1 * ((elem as Model.DatatypeValue).Arguments[0] as Model.Integer).AsInt());
+ }
+ throw new NotImplementedException("Cannot yet handle this Model.Element type");
+ }
+
+ private Model.Element ToElem(object val)
+ {
+ if (val is bool || val is int || val is Basetypes.BigNum)
+ return model.MkElement(val.ToString());
+ throw new NotImplementedException("Cannot yet handle this value type");
+ }
+
+ // replace v by old(v)
+ private static Expr MakeOld(Expr expr)
+ {
+ var substalways = new Substitution(v => new OldExpr(Token.NoToken, Expr.Ident(v)));
+ var substold = new Substitution(v => Expr.Ident(v));
+
+ return Substituter.ApplyReplacingOldExprs(substalways, substold, expr);
+ }
+
+ private static Expr ToExpr(Expr expr, Func<string, Expr> always, Func<string, Expr> forold)
+ {
+ var substalways = new Substitution(v =>
+ {
+ var ret = always(v.Name);
+ if (ret != null) return ret;
+ else return Expr.Ident(v);
+ });
+ var substold = new Substitution(v =>
+ {
+ var ret = forold(v.Name);
+ if (ret != null) return ret;
+ else return new OldExpr(Token.NoToken, Expr.Ident(v));
+ });
+
+ return Substituter.ApplyReplacingOldExprs(substalways, substold, expr);
+ }
+
+ private static VCExpr ToVcExpr(Expr expr, Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen)
+ {
+ if (expr is LiteralExpr)
+ {
+ var val = (expr as LiteralExpr).Val;
+ if (val is bool)
+ {
+ if ((bool)val)
+ {
+ return VCExpressionGenerator.True;
+ }
+ else
+ {
+ return VCExpressionGenerator.False;
+ }
+ }
+ else if (val is Microsoft.Basetypes.BigNum)
+ {
+ return gen.Integer((Microsoft.Basetypes.BigNum)val);
+ }
+
+ throw new NotImplementedException("Cannot handle literals of this type");
+ }
+
+ if (expr is IdentifierExpr)
+ {
+ return ToVcVar((expr as IdentifierExpr).Name, incarnations, false);
+ }
+
+ if (expr is OldExpr)
+ {
+ var ide = (expr as OldExpr).Expr as IdentifierExpr;
+ Debug.Assert(ide != null);
+
+ return ToVcVar(ide.Name, incarnations, true);
+ }
+
+ if (expr is NAryExpr)
+ {
+ var nary = expr as NAryExpr;
+ if (nary.Fun is UnaryOperator)
+ {
+ if ((nary.Fun as UnaryOperator).Op == UnaryOperator.Opcode.Not)
+ return gen.Not(ToVcExpr(nary.Args[0], incarnations, gen));
+ else if ((nary.Fun as UnaryOperator).Op == UnaryOperator.Opcode.Neg)
+ return gen.Function(VCExpressionGenerator.SubIOp, gen.Integer(Basetypes.BigNum.FromInt(0)), ToVcExpr(nary.Args[0], incarnations, gen));
+ else
+ Debug.Assert(false, "No other unary op is handled");
+ }
+ if (nary.Fun is BinaryOperator)
+ {
+ return gen.Function(Translate(nary.Fun as BinaryOperator), ToVcExpr(nary.Args[0], incarnations, gen), ToVcExpr(nary.Args[1], incarnations, gen));
+ }
+ if (nary.Fun is MapSelect && nary.Args.Count == 2)
+ {
+ return gen.Select(ToVcExpr(nary.Args[0], incarnations, gen), ToVcExpr(nary.Args[1], incarnations, gen));
+ }
+ Debug.Assert(false, "No other op is handled");
+ }
+ throw new NotImplementedException(string.Format("Expr of type {0} is not handled", expr.GetType().ToString()));
+ }
+
+ private static VCExprOp Translate(BinaryOperator op)
+ {
+ switch (op.Op)
+ {
+ case BinaryOperator.Opcode.Add:
+ return VCExpressionGenerator.AddIOp;
+ case BinaryOperator.Opcode.Sub:
+ return VCExpressionGenerator.SubIOp;
+ case BinaryOperator.Opcode.Mul:
+ return VCExpressionGenerator.MulIOp;
+ case BinaryOperator.Opcode.Div:
+ return VCExpressionGenerator.DivIOp;
+ case BinaryOperator.Opcode.Mod:
+ return VCExpressionGenerator.ModOp;
+ case BinaryOperator.Opcode.Eq:
+ case BinaryOperator.Opcode.Iff:
+ // we don't distinguish between equality and equivalence at this point
+ return VCExpressionGenerator.EqOp;
+ case BinaryOperator.Opcode.Neq:
+ return VCExpressionGenerator.NeqOp;
+ case BinaryOperator.Opcode.Lt:
+ return VCExpressionGenerator.LtOp;
+ case BinaryOperator.Opcode.Le:
+ return VCExpressionGenerator.LeOp;
+ case BinaryOperator.Opcode.Ge:
+ return VCExpressionGenerator.GeOp;
+ case BinaryOperator.Opcode.Gt:
+ return VCExpressionGenerator.GtOp;
+ case BinaryOperator.Opcode.Imp:
+ return VCExpressionGenerator.ImpliesOp;
+ case BinaryOperator.Opcode.And:
+ return VCExpressionGenerator.AndOp;
+ case BinaryOperator.Opcode.Or:
+ return VCExpressionGenerator.OrOp;
+ case BinaryOperator.Opcode.Subtype:
+ return VCExpressionGenerator.SubtypeOp;
+ default:
+ Contract.Assert(false);
+ throw new NotImplementedException();
+ }
+
+ }
+
+ // If "false" is a post-predicate, then remove its "pre" constraint from all others, whenever possible
+ public void Simplify()
+ {
+ // find "false"
+ var findex = PostPreds[procName].FindIndex(ne => (ne.expr is LiteralExpr) && (ne.expr as LiteralExpr).IsFalse);
+ if (findex < 0) return;
+ if (value[findex].isTrue)
+ {
+ // procedure doesn't return
+ for (int i = 0; i < value.Length; i++)
+ if (i != findex) value[i] = new PredicateAbsDisjunct(false, procName);
+ return;
+ }
+ if (value[findex].isFalse)
+ return;
+
+ for (int i = 0; i < value.Length; i++)
+ if (i != findex) value[i].Subtract(value[findex]);
+ }
+
+ public HashSet<string> GetPredicates(Program program, VCExpressionGenerator gen, ProverInterface prover)
+ {
+ var ret = new HashSet<string>();
+ if (isFalse) return ret;
+ Simplify();
+
+ // Find the free expressions
+ var proc = program.Procedures.FirstOrDefault(p => p.Name == procName);
+ Contract.Assert(proc != null);
+ Expr freeSummary = Expr.True;
+ foreach (var req in proc.Requires.OfType<Requires>().Where(req => req.Free))
+ {
+ freeSummary = Expr.And(freeSummary, MakeOld(req.Condition));
+ }
+ foreach (var ens in proc.Ensures.OfType<Ensures>().Where(ens => ens.Free))
+ {
+ freeSummary = Expr.And(freeSummary, ens.Condition);
+ }
+
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ if (value[i].isFalse) continue;
+ if (PostPreds[procName][i].expr is LiteralExpr && (PostPreds[procName][i].expr as LiteralExpr).IsFalse)
+ continue;
+
+ if (value[i].isTrue)
+ ret.Add(PostPreds[procName][i].expr.ToString());
+ else
+ {
+ foreach (var c in value[i].GetConjuncts())
+ {
+ var s = Expr.Imp(c.ToExpr(j => PrePreds[procName][j].expr), PostPreds[procName][i].expr);
+ if (CheckIfUnsat(Expr.And(freeSummary, Expr.Not(s)), gen, prover))
+ continue;
+ ret.Add(s.ToString());
+ }
+ }
+ }
+ return ret;
+ }
+
+ public override string ToString()
+ {
+ var ret = "";
+ if (isFalse) return "false";
+ var first = true;
+
+ for(int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ if(value[i].isFalse) continue;
+
+ if(value[i].isTrue)
+ ret += string.Format("{0}{1}", first ? "" : " && ", PostPreds[procName][i]);
+ else
+ ret += string.Format("{0}({1} ==> {2})", first ? "" : " && ", value[i], PostPreds[procName][i]);
+
+ first = false;
+ }
+ if (ret == "") ret = "true";
+ return ret;
+ }
+
+
+ #region ISummaryElement Members
+
+ public ISummaryElement Copy()
+ {
+ var ret = new PredicateAbs(procName);
+ ret.isFalse = isFalse;
+ ret.value = new PredicateAbsDisjunct[value.Length];
+ for (int i = 0; i < value.Length; i++)
+ ret.value[i] = value[i];
+ return ret;
+ }
+
+ public ISummaryElement GetFlaseSummary(Program program, Implementation impl)
+ {
+ return new PredicateAbs(impl.Name);
+ }
+
+ public ISummaryElement GetTrueSummary(Program program, Implementation impl)
+ {
+ var ret = new PredicateAbs(impl.Name);
+ ret.isFalse = false;
+ for (int i = 0; i < PostPreds[this.procName].Count; i++) ret.value[i] = new PredicateAbsDisjunct(false, impl.Name);
+
+ return ret;
+ }
+
+ public void Join(Dictionary<string, Model.Element> state, Model model)
+ {
+ PredicateAbs.model = model;
+
+ // Evaluate each predicate on the state
+ var prePredsVal = new bool[PrePreds[procName].Count];
+ var postPredsVal = new bool[PostPreds[procName].Count];
+
+ var indexSeq = new List<int>();
+ for (int i = 0; i < PrePreds[procName].Count; i++) indexSeq.Add(i);
+
+ for (int i = 0; i < PrePreds[procName].Count; i++)
+ {
+ var v = ToValue(Eval(PrePreds[procName][i].expr, state));
+ Debug.Assert(v is bool);
+ prePredsVal[i] = (bool)v;
+ }
+
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ var v = ToValue(Eval(PostPreds[procName][i].expr, state));
+ Debug.Assert(v is bool);
+ postPredsVal[i] = (bool)v;
+ }
+
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ // No hope for this post pred?
+ if (!isFalse && value[i].isFalse) continue;
+
+ var newDisj = new PredicateAbsDisjunct(true, procName);
+ if (!postPredsVal[i])
+ {
+ newDisj = new PredicateAbsDisjunct(indexSeq.Where(j => !prePredsVal[j]), indexSeq.Where(j => prePredsVal[j] && !PosPrePreds[procName].Contains(j)), procName);
+ }
+
+ if (isFalse)
+ value[i] = newDisj;
+ else
+ value[i] = PredicateAbsDisjunct.And(value[i], newDisj);
+ }
+
+ /*
+ // do beta(model)
+ var that = new PredicateAbsDisjunct[PostPreds[procName].Count];
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ if (postPredsVal[i])
+ that[i] = new PredicateAbsDisjunct(true, procName);
+ else if (i == 0)
+ {
+ Debug.Assert(PostPreds[procName][0].ToString() == "false");
+ var newDisj = new PredicateAbsDisjunct(true, procName);
+ newDisj = new PredicateAbsDisjunct(indexSeq.Where(j => !prePredsVal[j]), indexSeq.Where(j => prePredsVal[j]), procName);
+ that[i] = newDisj;
+ }
+ else
+ {
+ // false
+ that[i] = new PredicateAbsDisjunct(false, procName);
+ }
+ }
+
+ // Do join
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ if (isFalse)
+ value[i] = that[i];
+ else
+ {
+ if (i == 0)
+ value[i] = PredicateAbsDisjunct.And(value[i], that[i]);
+ else
+ {
+ var c1 = PredicateAbsDisjunct.And(value[i], that[i]);
+ var c2 = PredicateAbsDisjunct.And(value[i], that[0]);
+ var c3 = PredicateAbsDisjunct.And(value[0], that[i]);
+ value[i] = PredicateAbsDisjunct.Or(c1, c2);
+ value[i] = PredicateAbsDisjunct.Or(value[i], c3);
+ }
+ }
+ }
+ */
+ isFalse = false;
+
+ //Console.WriteLine("Result of Join: {0}", this.ToString());
+ }
+
+ // Precondition: the upper guys are just {true/false/upper-candidate} ==> post-pred
+ public void Meet(ISummaryElement iother)
+ {
+ var other = iother as PredicateAbs;
+ if (isFalse) return;
+ if (other.isFalse)
+ {
+ isFalse = true;
+ for (int i = 0; i < PostPreds[this.procName].Count; i++) value[i] = null;
+ return;
+ }
+ Debug.Assert(this.procName == other.procName);
+
+ for (int i = 0; i < PostPreds[this.procName].Count; i++)
+ {
+ value[i] = PredicateAbsDisjunct.Or(value[i], other.value[i]);
+ }
+ }
+
+ public bool IsEqual(ISummaryElement other)
+ {
+ var that = other as PredicateAbs;
+ if (isFalse && that.isFalse) return true;
+ if (isFalse || that.isFalse) return false;
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ if (!PredicateAbsDisjunct.syntacticLessThan(value[i], that.value[i]) ||
+ !PredicateAbsDisjunct.syntacticLessThan(that.value[i], value[i]))
+ return false;
+ }
+ return true;
+ }
+
+ // Precondition: the upper guys are just {true/false/upper-candidate} ==> post-pred
+ // Postcondition: the returned value is also of this form (for just one post-pred)
+ public ISummaryElement AbstractConsequence(ISummaryElement iupper)
+ {
+ var upper = iupper as PredicateAbs;
+
+ for (int i = 0; i < PostPreds[this.procName].Count; i++)
+ {
+ if (upper.value[i].isTrue) continue;
+ if (!UpperCandidates.ContainsKey(Tuple.Create(procName, i))) continue;
+
+ foreach (var candidate in UpperCandidates[Tuple.Create(procName, i)])
+ {
+ if (PredicateAbsDisjunct.syntacticLessThan(candidate, upper.value[i]))
+ continue;
+ if (!this.isFalse && !PredicateAbsDisjunct.syntacticLessThan(candidate, this.value[i]))
+ continue;
+
+ var ret = new PredicateAbs(this.procName);
+ ret.isFalse = false;
+ for (int j = 0; j < PostPreds[this.procName].Count; j++)
+ ret.value[j] = new PredicateAbsDisjunct(false, this.procName);
+
+ ret.value[i] = candidate;
+
+ return ret;
+ }
+ }
+
+ // Giveup: the abstract consequence is too difficult to compute
+ return null;
+ }
+
+ public VCExpr GetSummaryExpr(Dictionary<string, VCExpr> incarnations, VCExpressionGenerator gen)
+ {
+ if (isFalse)
+ return VCExpressionGenerator.False;
+
+ var ret = VCExpressionGenerator.True;
+
+ for(int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ ret = gen.AndSimp(ret, gen.ImpliesSimp(value[i].ToVcExpr(j => ToVcExpr(PrePreds[procName][j].expr, incarnations, gen), gen), ToVcExpr(PostPreds[procName][i].expr, incarnations, gen)));
+ }
+
+ return ret;
+ }
+
+ public Expr GetSummaryExpr(Func<string, Expr> always, Func<string, Expr> forold)
+ {
+ if (isFalse)
+ return Expr.False;
+
+ Expr ret = Expr.True;
+
+ for (int i = 0; i < PostPreds[procName].Count; i++)
+ {
+ ret = Expr.And(ret, Expr.Imp(value[i].ToExpr(j => ToExpr(PrePreds[procName][j].expr, always, forold)), ToExpr(PostPreds[procName][i].expr, always, forold)));
+ }
+
+ return ret;
+ }
+
+ #endregion
+ }
+
+ public class PredicateAbsDisjunct
+ {
+ List<PredicateAbsConjunct> conjuncts;
+ string ProcName;
+ public bool isTrue {get; private set;}
+ public bool isFalse
+ {
+ get
+ {
+ if (isTrue) return false;
+ return conjuncts.Count == 0;
+ }
+ }
+
+ public PredicateAbsDisjunct(bool isTrue, string ProcName)
+ {
+ this.isTrue = isTrue;
+ this.ProcName = ProcName;
+ conjuncts = new List<PredicateAbsConjunct>();
+ }
+
+ public PredicateAbsDisjunct(List<PredicateAbsConjunct> conjuncts, string ProcName)
+ {
+ isTrue = false;
+ this.conjuncts = conjuncts;
+ this.ProcName = ProcName;
+ }
+
+ // Disjunct of singleton conjuncts
+ public PredicateAbsDisjunct(IEnumerable<int> pos, IEnumerable<int> neg, string ProcName)
+ {
+ this.ProcName = ProcName;
+ conjuncts = new List<PredicateAbsConjunct>();
+ isTrue = false;
+ pos.Iter(p => conjuncts.Add(PredicateAbsConjunct.Singleton(p, true, ProcName)));
+ neg.Iter(p => conjuncts.Add(PredicateAbsConjunct.Singleton(p, false, ProcName)));
+ }
+
+ // Does d1 describe a smaller set of states than d2? This is true when every conjunct of d1
+ // is smaller than some conjunct of d2
+ public static bool syntacticLessThan(PredicateAbsDisjunct d1, PredicateAbsDisjunct d2)
+ {
+ if (d2.isTrue) return true;
+ if (d1.isTrue) return false;
+ if (d1.isFalse) return true;
+ if (d2.isFalse) return false;
+
+ foreach (var c1 in d1.conjuncts)
+ {
+ if (d2.conjuncts.Any(c2 => PredicateAbsConjunct.syntacticLessThan(c1, c2)))
+ continue;
+ else
+ return false;
+ }
+ return true;
+ }
+
+ public static PredicateAbsDisjunct And(PredicateAbsDisjunct v1, PredicateAbsDisjunct v2)
+ {
+ if (v1.isTrue) return v2;
+ if (v2.isTrue) return v1;
+
+ var result = new List<PredicateAbsConjunct>();
+
+ foreach (var c1 in v1.conjuncts)
+ {
+ foreach (var c2 in v2.conjuncts)
+ {
+ var c = PredicateAbsConjunct.And(c1, c2);
+ if (c.isFalse) continue;
+ if (result.Any(cprime => c.implies(cprime))) continue;
+ var tmp = new List<PredicateAbsConjunct>();
+ tmp.Add(c);
+ result.Where(cprime => !cprime.implies(c)).Iter(cprime => tmp.Add(cprime));
+ result = tmp;
+ }
+ }
+
+ return new PredicateAbsDisjunct(result, v1.ProcName);
+ }
+
+ public static PredicateAbsDisjunct Or(PredicateAbsDisjunct v1, PredicateAbsDisjunct v2)
+ {
+ if (v1.isTrue) return v1;
+ if (v2.isTrue) return v2;
+ if (v1.isFalse) return v2;
+ if (v2.isFalse) return v1;
+
+ var result = new List<PredicateAbsConjunct>();
+ v1.conjuncts.Iter(c => result.Add(c));
+
+ foreach (var c in v2.conjuncts)
+ {
+ if (result.Any(cprime => c.implies(cprime))) continue;
+ var tmp = new List<PredicateAbsConjunct>();
+ tmp.Add(c);
+ result.Where(cprime => !cprime.implies(c)).Iter(cprime => tmp.Add(cprime));
+ result = tmp;
+ }
+
+ return new PredicateAbsDisjunct(result, v1.ProcName);
+ }
+
+ public VCExpr ToVcExpr(Func<int, VCExpr> predToExpr, VCExpressionGenerator gen)
+ {
+ if (isTrue) return VCExpressionGenerator.True;
+ var ret = VCExpressionGenerator.False;
+ conjuncts.Iter(c => ret = gen.OrSimp(ret, c.ToVcExpr(predToExpr, gen)));
+ return ret;
+ }
+
+ public Expr ToExpr(Func<int, Expr> predToExpr)
+ {
+ if (isTrue) return Expr.True;
+ Expr ret = Expr.False;
+ conjuncts.Iter(c => ret = Expr.Or(ret, c.ToExpr(predToExpr)));
+ return ret;
+ }
+
+ public override string ToString()
+ {
+ if(isTrue)
+ return "true";
+ var ret = "";
+ var first = true;
+ foreach (var c in conjuncts)
+ {
+ if (c.isFalse) continue;
+ ret += string.Format("{0}{1}", first ? "" : " || ", c);
+ first = false;
+ }
+ return ret;
+ }
+
+ public void Subtract(PredicateAbsDisjunct that)
+ {
+ var ncon = new List<PredicateAbsConjunct>();
+ foreach (var c1 in conjuncts)
+ {
+ if (that.conjuncts.Any(c2 => c1.implies(c2)))
+ continue;
+ ncon.Add(c1);
+ }
+ conjuncts = ncon;
+ }
+
+ public IEnumerable<PredicateAbsConjunct> GetConjuncts()
+ {
+ return conjuncts;
+ }
+
+ }
+
+ public class PredicateAbsConjunct
+ {
+ static int ConjunctBound = 3;
+
+ public bool isFalse { get; private set; }
+ HashSet<int> posPreds;
+ HashSet<int> negPreds;
+ string ProcName;
+
+ public static void Initialize(int bound)
+ {
+ ConjunctBound = bound;
+ }
+
+ private void Normalize()
+ {
+ if (posPreds.Intersect(negPreds).Any() || negPreds.Intersect(posPreds).Any() || (posPreds.Count + negPreds.Count > ConjunctBound))
+ {
+ isFalse = true;
+ posPreds = new HashSet<int>();
+ negPreds = new HashSet<int>();
+ }
+ }
+
+ // Do this step only once in a while?
+ private void StrongNormalize()
+ {
+ if (isFalse) return;
+
+ var candidates = new List<Tuple<int, bool>>();
+ posPreds.Iter(p => candidates.Add(Tuple.Create(p, true)));
+ negPreds.Iter(p => candidates.Add(Tuple.Create(p, false)));
+ var drop = new HashSet<int>();
+ for (int i = 0; i < candidates.Count; i++)
+ {
+ for (int j = 0; j < candidates.Count; j++)
+ {
+ if (i == j) continue;
+
+ var key = Tuple.Create(ProcName, candidates[i].Item1, candidates[j].Item1,
+ candidates[i].Item2, candidates[j].Item2);
+ if (PredicateAbs.unsatPrePredPairs.Contains(key))
+ {
+ isFalse = true;
+ posPreds = new HashSet<int>();
+ negPreds = new HashSet<int>();
+ return;
+ }
+
+ key = Tuple.Create(ProcName, candidates[i].Item1, candidates[j].Item1,
+ candidates[i].Item2, !candidates[j].Item2);
+
+ if (PredicateAbs.unsatPrePredPairs.Contains(key))
+ drop.Add(candidates[j].Item1);
+ }
+ }
+
+ posPreds.ExceptWith(drop);
+ negPreds.ExceptWith(drop);
+ }
+
+ public PredicateAbsConjunct(bool isFalse, string ProcName)
+ {
+ posPreds = new HashSet<int>();
+ negPreds = new HashSet<int>();
+ this.isFalse = isFalse;
+ this.ProcName = ProcName;
+ }
+
+ // do we know that c1 is surely less than or equal to c2? That is, c1 describes a smaller
+ // concretization. We check that c2 is a sub-conjunct of c1
+ public static bool syntacticLessThan(PredicateAbsConjunct c1, PredicateAbsConjunct c2)
+ {
+ if (c1.isFalse) return true;
+ if (c2.isFalse) return false;
+ return (c2.posPreds.IsSubsetOf(c1.posPreds) && c2.negPreds.IsSubsetOf(c1.negPreds));
+ }
+
+ public static PredicateAbsConjunct Singleton(int v, bool isPositive, string ProcName)
+ {
+ if (isPositive)
+ return new PredicateAbsConjunct(new int[] { v }, new HashSet<int>(), ProcName);
+ else
+ return new PredicateAbsConjunct(new HashSet<int>(), new int[] { v }, ProcName);
+ }
+
+ public PredicateAbsConjunct(IEnumerable<int> pos, IEnumerable<int> neg, string ProcName)
+ {
+ isFalse = false;
+ posPreds = new HashSet<int>(pos);
+ negPreds = new HashSet<int>(neg);
+ this.ProcName = ProcName;
+ Normalize();
+ }
+
+ public static PredicateAbsConjunct And(PredicateAbsConjunct v1, PredicateAbsConjunct v2)
+ {
+ if (v1.isFalse || v2.isFalse) return new PredicateAbsConjunct(true, v1.ProcName);
+ var ret = new PredicateAbsConjunct(v1.posPreds.Union(v2.posPreds), v1.negPreds.Union(v2.negPreds), v1.ProcName);
+ ret.StrongNormalize();
+ return ret;
+ }
+
+ public bool implies(PredicateAbsConjunct v)
+ {
+ if (isFalse) return true;
+ if (v.isFalse) return false;
+ return (posPreds.IsSupersetOf(v.posPreds) && negPreds.IsSupersetOf(v.negPreds));
+ }
+
+ public VCExpr ToVcExpr(Func<int, VCExpr> predToExpr, VCExpressionGenerator gen)
+ {
+ if (isFalse) return VCExpressionGenerator.False;
+ var ret = VCExpressionGenerator.True;
+ posPreds.Iter(p => ret = gen.AndSimp(ret, predToExpr(p)));
+ negPreds.Iter(p => ret = gen.AndSimp(ret, gen.Not(predToExpr(p))));
+ return ret;
+ }
+
+ public Expr ToExpr(Func<int, Expr> predToExpr)
+ {
+ if (isFalse) return Expr.False;
+ Expr ret = Expr.True;
+ var pp = posPreds.ToList(); pp.Sort();
+ var np = negPreds.ToList(); np.Sort();
+ pp.Iter(p => ret = Expr.And(ret, predToExpr(p)));
+ np.Iter(p => ret = Expr.And(ret, Expr.Not(predToExpr(p))));
+ return ret;
+ }
+
+ public override string ToString()
+ {
+ if (isFalse)
+ return "false";
+
+ var ret = "";
+ var first = true;
+ foreach (var p in posPreds)
+ {
+ ret += string.Format("{0}{1}", first ? "" : " && ", PredicateAbs.PrePreds[ProcName][p]);
+ first = false;
+ }
+ foreach (var p in negPreds)
+ {
+ ret += string.Format("{0}!{1}", first ? "" : " && ", PredicateAbs.PrePreds[ProcName][p]);
+ first = false;
+ }
+ return ret;
+ }
+ }
+
+ class FindSummaryPred : MutatingVCExprVisitor<bool>
+ {
+ public List<Tuple<string, bool, VCExprVar, VCExprNAry>> summaryPreds;
+ int assertId;
+ private static int CounterId = 0;
+
+ public FindSummaryPred(VCExpressionGenerator gen, int assertId)
+ : base(gen)
+ {
+ summaryPreds = new List<Tuple<string, bool, VCExprVar, VCExprNAry>>();
+ this.assertId = assertId;
+ }
+
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
+ List<VCExpr/*!*/>/*!*/ newSubExprs,
+ // has any of the subexpressions changed?
+ bool changed,
+ bool arg)
+ {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr ret;
+ if (changed)
+ ret = Gen.Function(originalNode.Op,
+ newSubExprs, originalNode.TypeArguments);
+ else
+ ret = originalNode;
+
+ VCExprNAry retnary = ret as VCExprNAry;
+ if (retnary == null) return ret;
+ var op = retnary.Op as VCExprBoogieFunctionOp;
+
+ if (op == null)
+ {
+ var lop = retnary.Op as VCExprLabelOp;
+ if (lop == null) return ret;
+ if (lop.pos) return ret;
+ if (!lop.label.Equals("@" + assertId.ToString())) return ret;
+
+ //var subexpr = retnary[0] as VCExprNAry;
+ //if (subexpr == null) return ret;
+ //op = subexpr.Op as VCExprBoogieFunctionOp;
+ //if (op == null) return ret;
+
+ var subexpr = retnary[0] as VCExprVar;
+ if (subexpr == null) return ret;
+ if (!subexpr.Name.StartsWith("AbstractHoudiniControl")) return ret;
+
+ for (int i = 0; i < summaryPreds.Count; i++)
+ {
+ if (summaryPreds[i].Item3 == subexpr)
+ summaryPreds[i] = Tuple.Create(summaryPreds[i].Item1, true, summaryPreds[i].Item3, summaryPreds[i].Item4);
+ }
+ return ret;
+ }
+
+ string calleeName = op.Func.Name;
+
+ if (!calleeName.EndsWith(AbstractHoudini.summaryPredSuffix))
+ return ret;
+
+ var controlConst = Gen.Variable("AbstractHoudiniControl" + CounterId, Microsoft.Boogie.Type.Bool);
+ CounterId++;
+
+ summaryPreds.Add(Tuple.Create(calleeName.Substring(0, calleeName.Length - AbstractHoudini.summaryPredSuffix.Length), false, controlConst, retnary));
+
+ return controlConst;
+ //return ret;
+ }
+
+ }
+
+ class FindExistentialFunctions : MutatingVCExprVisitor<bool>
+ {
+ public List<Tuple<string, VCExprVar, VCExprNAry>> funcCalls;
+ private HashSet<string> existentialFunctions;
+ private static int CounterId = 0;
+
+ public FindExistentialFunctions(VCExpressionGenerator gen, HashSet<string> existentialFunctions)
+ : base(gen)
+ {
+ funcCalls = new List<Tuple<string, VCExprVar, VCExprNAry>>();
+ this.existentialFunctions = existentialFunctions;
+ }
+
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
+ List<VCExpr/*!*/>/*!*/ newSubExprs,
+ // has any of the subexpressions changed?
+ bool changed,
+ bool arg)
+ {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr ret;
+ if (changed)
+ ret = Gen.Function(originalNode.Op,
+ newSubExprs, originalNode.TypeArguments);
+ else
+ ret = originalNode;
+
+ VCExprNAry retnary = ret as VCExprNAry;
+ if (retnary == null) return ret;
+ var op = retnary.Op as VCExprBoogieFunctionOp;
+ if (op == null) return ret;
+
+ string calleeName = op.Func.Name;
+
+ if (!existentialFunctions.Contains(calleeName))
+ return ret;
+
+ var controlConst = Gen.Variable("AbsHoudiniControl" + CounterId, Microsoft.Boogie.Type.Bool);
+ CounterId++;
+
+ funcCalls.Add(Tuple.Create(calleeName, controlConst, retnary));
+
+ return controlConst;
+ }
+
+ }
+
+ class AbstractHoudiniErrorReporter : ProverInterface.ErrorHandler
+ {
+ public Model model;
+
+ public AbstractHoudiniErrorReporter()
+ {
+ model = null;
+ }
+
+ public override void OnModel(IList<string> labels, Model model, ProverInterface.Outcome proverOutcome)
+ {
+ Debug.Assert(model != null);
+ if(CommandLineOptions.Clo.PrintErrorModel >= 1) model.Write(Console.Out);
+ this.model = model;
+ }
+ }
+
+ public class AbsHoudiniInternalError : System.ApplicationException
+ {
+ public AbsHoudiniInternalError(string msg) : base(msg) { }
+
+ };
+
+ public class SimpleUtil
+ {
+ // Constructs a mapping from procedure names to the implementation
+ public static Dictionary<string, Implementation> nameImplMapping(Program p)
+ {
+ var m = new Dictionary<string, Implementation>();
+ foreach (var impl in p.Implementations)
+ {
+ m.Add(impl.Name, impl);
+ }
+
+ return m;
+ }
+
+ // is "assert true"?
+ public static bool isAssertTrue(Cmd cmd)
+ {
+ var acmd = cmd as AssertCmd;
+ if (acmd == null) return false;
+ var le = acmd.Expr as LiteralExpr;
+ if (le == null) return false;
+ if (le.IsTrue) return true;
+ return false;
+ }
+ }
+
+}
diff --git a/Source/Houdini/AnnotationDependenceAnalyser.cs b/Source/Houdini/AnnotationDependenceAnalyser.cs
index e925d413..dacac233 100644
--- a/Source/Houdini/AnnotationDependenceAnalyser.cs
+++ b/Source/Houdini/AnnotationDependenceAnalyser.cs
@@ -1,878 +1,878 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Boogie.GraphUtil;
-using Microsoft.Basetypes;
-using System.Diagnostics;
-
-namespace Microsoft.Boogie.Houdini {
-
- public class AnnotationDependenceAnalyser {
-
- private const string COARSE_STAGES = "COARSE";
- private const string FINE_STAGES = "FINE";
- private const string BALANCED_STAGES = "BALANCED";
-
- private Program prog;
- private IVariableDependenceAnalyser varDepAnalyser;
- private IEnumerable<string> CandidateIdentifiers; // Candidate Boolean names
- private IEnumerable<string> NonCandidateIdentifiers; // Additional names introduced for non-candidate annotations
- private Dictionary<string, HashSet<VariableDescriptor>> annotationDependsOn;
- private Dictionary<VariableDescriptor, HashSet<string>> variableDirectlyReferredToByAnnotations;
- private Graph<string> AnnotationDependences;
- private StronglyConnectedComponents<string> SCCs;
- private Graph<SCC<string>> StagesDAG;
- private StagedHoudiniPlan Plan;
-
- public AnnotationDependenceAnalyser(Program prog) {
- this.prog = prog;
- this.varDepAnalyser = new VariableDependenceAnalyser(prog);
- varDepAnalyser.Analyse();
- }
-
- public void Analyse() {
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Annotation dependence analysis: Getting annotations");
- }
-
- CandidateIdentifiers = GetCandidates();
- NonCandidateIdentifiers = GetNonCandidateAnnotations();
-
- DetermineAnnotationVariableDependences();
-
- ConstructAnnotationDependenceGraph();
-
- ConstructStagesDAG();
-
- }
-
- private IEnumerable<string> AllAnnotationIdentifiers() {
- HashSet<string> Result = new HashSet<string>();
- foreach (var c in CandidateIdentifiers) {
- Result.Add(c);
- }
- foreach (var a in NonCandidateIdentifiers) {
- Result.Add(a);
- }
- return Result;
- }
-
- private void ConstructStagesDAG()
- {
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Annotation dependence analysis: Computing SCCs");
- }
-
- Adjacency<string> next = new Adjacency<string>(AnnotationDependences.Successors);
- Adjacency<string> prev = new Adjacency<string>(AnnotationDependences.Predecessors);
- SCCs = new StronglyConnectedComponents<string>(
- AnnotationDependences.Nodes, next, prev);
- SCCs.Compute();
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Annotation dependence analysis: Building stages DAG");
- }
-
- Dictionary<string, SCC<string>> rep = new Dictionary<string, SCC<string>>();
- foreach (var scc in SCCs)
- {
- foreach (var s in scc)
- {
- rep[s] = scc;
- }
- }
-
- StagesDAG = new Graph<SCC<string>>();
-
- foreach (var edge in AnnotationDependences.Edges)
- {
- if (rep[edge.Item1] != rep[edge.Item2])
- {
- StagesDAG.AddEdge(rep[edge.Item1], rep[edge.Item2]);
- }
- }
-
- SCC<string> dummy = new SCC<string>();
- foreach (var scc in SCCs)
- {
- StagesDAG.AddEdge(scc, dummy);
- }
- }
-
- private void ConstructAnnotationDependenceGraph()
- {
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Annotation dependence analysis: Building dependence graph");
- }
-
- IAnnotationReachabilityChecker reachabilityChecker;
-
- if(CommandLineOptions.Clo.StagedHoudiniReachabilityAnalysis) {
- reachabilityChecker = new AnnotationReachabilityChecker(prog, AllAnnotationIdentifiers());
- } else {
- reachabilityChecker = new DummyAnnotationReachabilityChecker();
- }
-
- AnnotationDependences = new Graph<string>();
- foreach (var c in AllAnnotationIdentifiers())
- {
- AnnotationDependences.AddEdge(c, c);
- foreach (var vd in annotationDependsOn[c])
- {
- if (variableDirectlyReferredToByAnnotations.ContainsKey(vd))
- {
- foreach (var d in variableDirectlyReferredToByAnnotations[vd])
- {
- if(reachabilityChecker.MayReach(d, c))
- {
- AnnotationDependences.AddEdge(c, d);
- }
- }
- }
- }
- }
-
- if(CommandLineOptions.Clo.StagedHoudiniMergeIgnoredAnnotations) {
- MergeIgnoredAnnotations();
- }
-
- }
-
- private void MergeIgnoredAnnotations()
- {
- var IgnoredAnnotationsToVariables = new Dictionary<string, HashSet<Variable>>();
- foreach(var c in AllAnnotationIdentifiers()) {
- IgnoredAnnotationsToVariables[c] = new HashSet<Variable>();
- }
- foreach(var ci in AnnotationInstances()) {
- if(!IgnoredAnnotationsToVariables.ContainsKey(ci.AnnotationIdentifier)) {
- continue;
- }
- VariableCollector vc = new VariableCollector();
- vc.Visit(ci.Expr);
- if(vc.usedVars.Select(Item => varDepAnalyser.VariableRelevantToAnalysis(Item, ci.Proc)).Count() != 0) {
- continue;
- }
- foreach(var v in vc.usedVars) {
- if(varDepAnalyser.Ignoring(v, ci.Proc)) {
- IgnoredAnnotationsToVariables[ci.AnnotationIdentifier].Add(v);
- }
- }
- }
- foreach(var c in IgnoredAnnotationsToVariables.Keys) {
- foreach(var d in IgnoredAnnotationsToVariables.Keys) {
- if(c == d) {
- continue;
- }
- if(IgnoredAnnotationsToVariables[c].Equals(IgnoredAnnotationsToVariables[d])) {
- AnnotationDependences.AddEdge(c, d);
- }
- }
- }
- }
-
-
-
- private void DetermineAnnotationVariableDependences()
- {
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Annotation dependence analysis: Working out what annotations depend on");
- }
- annotationDependsOn = new Dictionary<string, HashSet<VariableDescriptor>>();
- variableDirectlyReferredToByAnnotations = new Dictionary<VariableDescriptor, HashSet<string>>();
- foreach (var c in AllAnnotationIdentifiers())
- {
- annotationDependsOn[c] = new HashSet<VariableDescriptor>();
- }
-
- foreach(var annotationInstance in AnnotationInstances()) {
- AddDependences(annotationInstance);
- }
-
- }
-
- private IEnumerable<AnnotationInstance> AnnotationInstances()
- {
- foreach (var impl in prog.Implementations)
- {
- foreach (PredicateCmd p in impl.Blocks.SelectMany(Item => Item.Cmds).OfType<PredicateCmd>())
- {
- string c;
- if(Houdini.MatchCandidate(p.Expr, CandidateIdentifiers, out c)) {
- yield return new AnnotationInstance(c, impl.Name, p.Expr);
- } else if((p is AssertCmd) && QKeyValue.FindBoolAttribute(p.Attributes, "originated_from_invariant")) {
- var tag = GetTagFromNonCandidateAttributes(p.Attributes);
- if (tag != null) {
- yield return new AnnotationInstance(tag, impl.Name, p.Expr);
- }
- }
- }
- }
-
- foreach (var proc in prog.NonInlinedProcedures())
- {
- foreach (Requires r in proc.Requires)
- {
- string c;
- if(Houdini.MatchCandidate(r.Condition, CandidateIdentifiers, out c)) {
- yield return new AnnotationInstance(c, proc.Name, r.Condition);
- } else {
- var tag = GetTagFromNonCandidateAttributes(r.Attributes);
- if (tag != null) {
- yield return new AnnotationInstance(tag, proc.Name, r.Condition);
- }
- }
- }
- foreach (Ensures e in proc.Ensures)
- {
- string c;
- if(Houdini.MatchCandidate(e.Condition, CandidateIdentifiers, out c)) {
- yield return new AnnotationInstance(c, proc.Name, e.Condition);
- } else {
- var tag = GetTagFromNonCandidateAttributes(e.Attributes);
- if (tag != null) {
- yield return new AnnotationInstance(tag, proc.Name, e.Condition);
- }
- }
- }
- }
- }
-
- internal static string GetTagFromNonCandidateAttributes(QKeyValue Attributes)
- {
- string tag = QKeyValue.FindStringAttribute(Attributes, "staged_houdini_tag");
- return tag;
- }
-
- private bool FindInDAG(Graph<SCC<string>> DAG, SCC<string> toFind, SCC<string> start) {
- if (toFind == start) {
- return true;
- }
- foreach (var n in DAG.Successors(start)) {
- if (FindInDAG(DAG, toFind, n)) {
- return true;
- }
- }
- return false;
- }
-
- private void AddDependences(AnnotationInstance ci) {
- VariableCollector vc = new VariableCollector();
- vc.VisitExpr(ci.Expr);
-
- foreach (var v in vc.usedVars.Where(Item => varDepAnalyser.VariableRelevantToAnalysis(Item, ci.Proc))) {
- VariableDescriptor vd =
- varDepAnalyser.MakeDescriptor(ci.Proc, v);
- if (!variableDirectlyReferredToByAnnotations.ContainsKey(vd)) {
- variableDirectlyReferredToByAnnotations[vd] = new HashSet<string>();
- }
- variableDirectlyReferredToByAnnotations[vd].Add(ci.AnnotationIdentifier);
-
- foreach (var w in varDepAnalyser.DependsOn(vd)) {
- annotationDependsOn[ci.AnnotationIdentifier].Add(w);
- }
- }
- }
-
- private bool IsStageDependence(SCC<string> Src, SCC<string> Dst) {
- foreach (var c in Src) {
- foreach (var d in AnnotationDependences.Successors(c)) {
- if (Dst.Contains(d)) {
- return true;
- }
- }
- }
- return false;
- }
-
-
- public void dump() {
-
- if(CommandLineOptions.Clo.DebugStagedHoudini) {
- varDepAnalyser.dump();
-
- Console.WriteLine("Annotations and the variables they depend on");
- Console.WriteLine("============================================");
- foreach (var entry in annotationDependsOn) {
- Console.WriteLine(entry.Key + " <- ");
- foreach (var vd in entry.Value) {
- Console.WriteLine(" " + vd + ", ");
- }
- }
-
- Console.WriteLine("");
-
- Console.WriteLine("Variables and the annotations that directly refer to them");
- Console.WriteLine("========================================================");
- foreach (var entry in variableDirectlyReferredToByAnnotations) {
- Console.WriteLine(entry.Key + " <- ");
- foreach (var annotation in entry.Value) {
- Console.WriteLine(" " + annotation + ", ");
- }
- }
-
- Console.WriteLine("");
-
- Console.WriteLine("Annotation dependence graph");
- Console.WriteLine("==========================");
- foreach (var c in AnnotationDependences.Nodes) {
- Console.WriteLine(c + " <- ");
- foreach (var d in AnnotationDependences.Successors(c)) {
- Console.WriteLine(" " + d);
- }
- }
- }
-
- Console.WriteLine("");
-
- Console.WriteLine("Strongly connected components");
- Console.WriteLine("=============================");
-
- List<SCC<string>> Components = StagesDAG.TopologicalSort().ToList();
-
- for (int i = 0; i < Components.Count(); i++) {
- Console.Write(i + ": ");
- DumpSCC(Components[i]);
- Console.WriteLine(); Console.WriteLine();
- }
-
- Console.WriteLine("Stages DAG");
- Console.WriteLine("==========");
- for (int i = 0; i < Components.Count(); i++) {
- Console.Write(i + " -> { ");
- bool first = true;
- foreach (var d in StagesDAG.Successors(Components[i])) {
- if (first) {
- first = false;
- }
- else {
- Console.Write(", ");
- }
- Console.Write(Components.IndexOf(d));
- }
- Console.WriteLine(" }");
- }
-
- }
-
- private static void DumpSCC(SCC<string> component) {
- var sortedComponent = component.ToList();
- sortedComponent.Sort();
- Console.Write("{ ");
- bool first = true;
- foreach (var s in sortedComponent) {
- if (first) {
- first = false;
- }
- else {
- Console.Write(", ");
- }
- Console.Write(s);
- }
- Console.Write(" }");
- }
-
- private bool OnlyRefersToConstants(Expr e) {
- VariableCollector vc = new VariableCollector();
- vc.Visit(e);
- return vc.usedVars.OfType<Constant>().Count() == vc.usedVars.Count();
- }
-
- private IEnumerable<string> GetNonCandidateAnnotations() {
- var Result = new HashSet<string>();
- int Counter = 0;
- foreach(var Assertion in prog.Blocks().SelectMany(Item => Item.Cmds).
- OfType<AssertCmd>()) {
-
- string unused;
- if (Houdini.MatchCandidate(Assertion.Expr, CandidateIdentifiers, out unused)) {
- continue;
- }
-
- if (!QKeyValue.FindBoolAttribute(Assertion.Attributes, "originated_from_invariant")) {
- continue;
- }
-
- if (OnlyRefersToConstants(Assertion.Expr)) {
- continue;
- }
-
- string Tag = "staged_houdini_tag_" + Counter;
- Result.Add(Tag);
- Assertion.Attributes = new QKeyValue(Token.NoToken, "staged_houdini_tag",
- new List<object> { Tag }, Assertion.Attributes);
- Counter++;
- }
-
- foreach(var Req in prog.NonInlinedProcedures().SelectMany(Item => Item.Requires)) {
-
- string unused;
- if (Houdini.MatchCandidate(Req.Condition, CandidateIdentifiers, out unused)) {
- continue;
- }
-
- if (OnlyRefersToConstants(Req.Condition)) {
- continue;
- }
-
- string Tag = "staged_houdini_tag_" + Counter;
- Result.Add(Tag);
- Req.Attributes = new QKeyValue(Token.NoToken, "staged_houdini_tag",
- new List<object> { Tag }, Req.Attributes);
- Counter++;
-
- }
-
- foreach(var Ens in prog.NonInlinedProcedures().SelectMany(Item => Item.Ensures)) {
-
- string unused;
- if (Houdini.MatchCandidate(Ens.Condition, CandidateIdentifiers, out unused)) {
- continue;
- }
-
- if (OnlyRefersToConstants(Ens.Condition)) {
- continue;
- }
-
- string Tag = "staged_houdini_tag_" + Counter;
- Result.Add(Tag);
- Ens.Attributes = new QKeyValue(Token.NoToken, "staged_houdini_tag",
- new List<object> { Tag }, Ens.Attributes);
- Counter++;
-
- }
-
- return Result;
- }
-
- private IEnumerable<string> GetCandidates() {
- return prog.Variables.Where(Item =>
- QKeyValue.FindBoolAttribute(Item.Attributes, "existential")).Select(Item => Item.Name);
- }
-
-
- public StagedHoudiniPlan ApplyStages() {
-
- if (NoStages())
- {
- Debug.Assert(false);
- var TrivialGraph = new Graph<ScheduledStage>();
- TrivialGraph.AddSource(new ScheduledStage(0, new HashSet<string>()));
- return new StagedHoudiniPlan(TrivialGraph);
- }
-
- #region Assign annotations to stages at a given level of granularity
-
- switch(CommandLineOptions.Clo.StagedHoudini) {
- case COARSE_STAGES:
- Plan = ComputeCoarseStages();
- break;
- case FINE_STAGES:
- Plan = ComputeFineStages();
- break;
- case BALANCED_STAGES:
- Plan = ComputeBalancedStages();
- break;
- default:
- Debug.Assert(false);
- Plan = null;
- break;
- }
-
- foreach(var c in AllAnnotationIdentifiers()) {
- Debug.Assert(Plan.StageForAnnotation(c) != null);
- }
- #endregion
-
- #region Generate boolean variables to control stages
- var stageToActiveBoolean = new Dictionary<int, Constant>();
- var stageToCompleteBoolean = new Dictionary<int, Constant>();
-
- foreach (var stage in Plan)
- {
- var stageActive = new Constant(Token.NoToken,
- new TypedIdent(Token.NoToken, "_stage_" + stage.GetId() + "_active", Type.Bool),
- false);
- stageActive.AddAttribute("stage_active", new object[] { new LiteralExpr(Token.NoToken, BigNum.FromInt(stage.GetId())) });
- prog.AddTopLevelDeclaration(stageActive);
- stageToActiveBoolean[stage.GetId()] = stageActive;
-
- var stageComplete = new Constant(Token.NoToken,
- new TypedIdent(Token.NoToken, "_stage_" + stage.GetId() + "_complete", Type.Bool),
- false);
- stageComplete.AddAttribute("stage_complete", new object[] { new LiteralExpr(Token.NoToken, BigNum.FromInt(stage.GetId())) });
- prog.AddTopLevelDeclaration(stageComplete);
- stageToCompleteBoolean[stage.GetId()] = stageComplete;
- }
- #endregion
-
- #region Adapt annotation assertions to take account of stages
- foreach (var b in prog.Implementations.Select(Item => Item.Blocks).SelectMany(Item => Item))
- {
- List<Cmd> newCmds = new List<Cmd>();
- foreach (var cmd in b.Cmds)
- {
- var a = cmd as AssertCmd;
- string c;
- if (a != null) {
- if (Houdini.MatchCandidate(a.Expr, CandidateIdentifiers, out c))
- {
- newCmds.Add(new AssertCmd(a.tok, Houdini.AddConditionToCandidate(a.Expr,
- Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(c).GetId()]), c), a.Attributes));
- newCmds.Add(new AssumeCmd(a.tok, Houdini.AddConditionToCandidate(a.Expr,
- Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(c).GetId()]), c), a.Attributes));
- } else if (QKeyValue.FindBoolAttribute(a.Attributes, "originated_from_invariant")) {
- string tag = GetTagFromNonCandidateAttributes(a.Attributes);
- if (tag == null) {
- newCmds.Add(a);
- } else {
- newCmds.Add(new AssertCmd(a.tok, Expr.Imp(
- Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(tag).GetId()]), a.Expr),
- a.Attributes));
- newCmds.Add(new AssumeCmd(a.tok, Expr.Imp(
- Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(tag).GetId()]), a.Expr),
- a.Attributes));
- }
- }
- }
- else
- {
- newCmds.Add(cmd);
- }
- }
- b.Cmds = newCmds;
- }
- #endregion
-
- #region Adapt pre/postconditions to take account of stages
- foreach (var p in prog.NonInlinedProcedures())
- {
-
- #region Handle the preconditions
- {
- List<Requires> newRequires = new List<Requires>();
- foreach(Requires r in p.Requires) {
- string c;
- if (Houdini.MatchCandidate(r.Condition, CandidateIdentifiers, out c)) {
- newRequires.Add(new Requires(r.tok, false,
- Houdini.AddConditionToCandidate(r.Condition,
- Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(c).GetId()]), c),
- r.Comment, r.Attributes));
- newRequires.Add(new Requires(r.tok, true,
- Houdini.AddConditionToCandidate(r.Condition,
- Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(c).GetId()]), c),
- r.Comment, r.Attributes));
- } else {
- string tag = GetTagFromNonCandidateAttributes(r.Attributes);
- if (tag == null) {
- newRequires.Add(r);
- } else {
- newRequires.Add(new Requires(r.tok, false,
- Expr.Imp(Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(tag).GetId()]), r.Condition),
- r.Comment, r.Attributes));
- newRequires.Add(new Requires(r.tok, true,
- Expr.Imp(Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(tag).GetId()]), r.Condition),
- r.Comment, r.Attributes));
- }
- }
- }
- p.Requires = newRequires;
- }
- #endregion
-
- #region Handle the postconditions
- {
- List<Ensures> newEnsures = new List<Ensures>();
- foreach(Ensures e in p.Ensures) {
- string c;
- if (Houdini.MatchCandidate(e.Condition, CandidateIdentifiers, out c)) {
- int stage = Plan.StageForAnnotation(c).GetId();
- newEnsures.Add(new Ensures(e.tok, false,
- Houdini.AddConditionToCandidate(e.Condition,
- Expr.Ident(stageToActiveBoolean[stage]), c),
- e.Comment, e.Attributes));
- newEnsures.Add(new Ensures(e.tok, true,
- Houdini.AddConditionToCandidate(e.Condition,
- Expr.Ident(stageToCompleteBoolean[stage]), c),
- e.Comment, e.Attributes));
- } else {
- string tag = GetTagFromNonCandidateAttributes(e.Attributes);
- if (tag == null) {
- newEnsures.Add(e);
- } else {
- newEnsures.Add(new Ensures(e.tok, false,
- Expr.Imp(Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(tag).GetId()]), e.Condition),
- e.Comment, e.Attributes));
- newEnsures.Add(new Ensures(e.tok, true,
- Expr.Imp(Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(tag).GetId()]), e.Condition),
- e.Comment, e.Attributes));
- }
- }
- }
- p.Ensures = newEnsures;
- }
- #endregion
-
- }
- #endregion
-
- return Plan;
-
- }
-
- private int FindLargestStage() {
- return StagesDAG.Nodes.Select(Item => Item.Count()).Max();
- }
-
-
- private StagedHoudiniPlan ComputeCoarseStages()
- {
- foreach(var n in StagesDAG.Nodes) {
- Debug.Assert(!StagesDAG.Successors(n).Contains(n));
- }
-
- Graph<ScheduledStage> Dependences = new Graph<ScheduledStage>();
-
- var done = new Dictionary<SCC<string>, ScheduledStage>();
- done[GetStartNodeOfStagesDAG()] = new ScheduledStage(0, new HashSet<string>());
-
- for(int stageId = 1; done.Count() != StagesDAG.Nodes.Count(); stageId++)
- {
- var Stage = new ScheduledStage(stageId, new HashSet<string>());
- HashSet<SCC<string>> AssignedToThisStage = new HashSet<SCC<string>>();
-
- foreach (var n in StagesDAG.Nodes.Where(Item => !done.ContainsKey(Item)))
- {
- if(StagesDAG.Successors(n).Where(Item => !done.ContainsKey(Item)).Count() == 0) {
- foreach(var s in StagesDAG.Successors(n)) {
- Debug.Assert(s != n);
- Debug.Assert(Stage != done[s]);
- Dependences.AddEdge(Stage, done[s]);
- }
- foreach (var a in n)
- {
- Stage.AddAnnotation(a);
- }
- AssignedToThisStage.Add(n);
- }
- }
-
- foreach(var n in AssignedToThisStage) {
- done[n] = Stage;
- }
- }
- return new StagedHoudiniPlan(Dependences);
- }
-
- private StagedHoudiniPlan ComputeBalancedStages()
- {
- Graph<ScheduledStage> Dependences = new Graph<ScheduledStage>();
- var done = new Dictionary<SCC<string>, ScheduledStage>();
- done[GetStartNodeOfStagesDAG()] = new ScheduledStage(0, new HashSet<string>());
-
- int maxStageSize = 200;
-
- for(int stageId = 1; done.Count() != StagesDAG.Nodes.Count(); stageId++)
- {
- int stageSize = 0;
- ScheduledStage Stage = new ScheduledStage(stageId, new HashSet<string>());
- HashSet<SCC<string>> AddedToThisStage = new HashSet<SCC<string>>();
-
- foreach (var n in StagesDAG.Nodes.Where(Item => !done.ContainsKey(Item)))
- {
- if(stageSize + n.Count() > maxStageSize) {
- continue;
- }
- if(StagesDAG.Successors(n).Where(Item => !done.ContainsKey(Item)).Count() == 0) {
- foreach (var c in n)
- {
- Stage.AddAnnotation(c);
- stageSize++;
- }
- foreach(var s in StagesDAG.Successors(n)) {
- Dependences.AddEdge(Stage, done[s]);
- }
- AddedToThisStage.Add(n);
- }
- }
- foreach(var n in AddedToThisStage) {
- done[n] = Stage;
- }
- if(stageSize == 0) {
- maxStageSize *= 2;
- }
- }
- return new StagedHoudiniPlan(Dependences);
- }
-
- private StagedHoudiniPlan ComputeFineStages()
- {
- Graph<ScheduledStage> Dependences = new Graph<ScheduledStage>();
- var done = new Dictionary<SCC<string>, ScheduledStage>();
-
- List<SCC<string>> components = StagesDAG.TopologicalSort().ToList();
- components.Reverse();
-
- for (int i = 0; i < components.Count(); i++)
- {
- ScheduledStage Stage = new ScheduledStage(i, new HashSet<string>());
- done[components[i]] = Stage;
- foreach (var c in components[i])
- {
- Stage.AddAnnotation(c);
- }
- foreach(var s in StagesDAG.Successors(components[i])) {
- Dependences.AddEdge(Stage, done[s]);
- }
- }
- return new StagedHoudiniPlan(Dependences);
- }
-
- private SCC<string> GetStartNodeOfStagesDAG()
- {
- return StagesDAG.Nodes.Where(Item => StagesDAG.Successors(Item).Count() == 0).
- ToList()[0];
- }
-
- private bool NoStages()
- {
- return AllAnnotationIdentifiers().Count() == 0 || StagesDAG.Nodes.Count() == 0;
- }
- }
-
- interface IAnnotationReachabilityChecker {
- bool MayReach(string c, string d);
- }
-
- class DummyAnnotationReachabilityChecker : IAnnotationReachabilityChecker {
- public bool MayReach(string c, string d) {
- return true;
- }
- }
-
- class AnnotationReachabilityChecker : IAnnotationReachabilityChecker {
-
- private enum PrePost {
- PRE, POST
- }
-
- private Program prog;
- private IEnumerable<string> AnnotationIdentifiers;
- private IInterproceduralReachabilityGraph reachabilityGraph;
- private Dictionary<string, HashSet<object>> annotationToOccurences;
-
- internal AnnotationReachabilityChecker(Program prog, IEnumerable<string> AnnotationIdentifiers) {
- this.prog = prog;
- this.AnnotationIdentifiers = AnnotationIdentifiers;
- this.reachabilityGraph = new InterproceduralReachabilityGraph(prog);
- this.annotationToOccurences = new Dictionary<string,HashSet<object>>();
-
- // Add all annotation occurrences in blocks
- foreach(Block b in prog.Blocks()) {
- foreach(var assertCmd in b.Cmds.OfType<AssertCmd>()) {
- string c;
- if(Houdini.MatchCandidate(assertCmd.Expr, AnnotationIdentifiers, out c)) {
- AddAnnotationOccurrence(c, b);
- } else {
- var tag = AnnotationDependenceAnalyser.GetTagFromNonCandidateAttributes(assertCmd.Attributes);
- if (tag != null) {
- AddAnnotationOccurrence(tag, b);
- }
- }
- }
- }
-
- // Add all annotation occurrences in pre and post conditions
- foreach(var proc in prog.NonInlinedProcedures()) {
- foreach(Requires r in proc.Requires) {
- string c;
- if(Houdini.MatchCandidate(r.Condition, AnnotationIdentifiers, out c)) {
- AddAnnotationOccurrence(c, new Tuple<string, PrePost>(proc.Name, PrePost.PRE));
- } else {
- string tag = AnnotationDependenceAnalyser.GetTagFromNonCandidateAttributes(r.Attributes);
- if(tag != null) {
- AddAnnotationOccurrence(tag, new Tuple<string, PrePost>(proc.Name, PrePost.PRE));
- }
- }
- }
- foreach(Ensures e in proc.Ensures) {
- string c;
- if(Houdini.MatchCandidate(e.Condition, AnnotationIdentifiers, out c)) {
- AddAnnotationOccurrence(c, new Tuple<string, PrePost>(proc.Name, PrePost.POST));
- } else {
- string tag = AnnotationDependenceAnalyser.GetTagFromNonCandidateAttributes(e.Attributes);
- if(tag != null) {
- AddAnnotationOccurrence(tag, new Tuple<string, PrePost>(proc.Name, PrePost.PRE));
- }
- }
- }
- }
-
- }
-
- private void AddAnnotationOccurrence(string c, object o) {
- Debug.Assert(o is Block || o is Tuple<string, PrePost>);
- if(!annotationToOccurences.ContainsKey(c)) {
- annotationToOccurences[c] = new HashSet<object>();
- }
- annotationToOccurences[c].Add(o);
- }
-
- public bool MayReach(string c, string d) {
- foreach(object cOccurrence in annotationToOccurences[c]) {
- foreach(object dOccurrence in annotationToOccurences[d]) {
- if(OccurrencesMayReach(cOccurrence, dOccurrence)) {
- return true;
- }
- }
- }
- return false;
- }
-
- private bool OccurrencesMayReach(object cOccurrence, object dOccurrence) {
- Debug.Assert(cOccurrence is Block || cOccurrence is Tuple<string, PrePost>);
- Debug.Assert(dOccurrence is Block || dOccurrence is Tuple<string, PrePost>);
-
- Block cInterproceduralBlock = GetInterproceduralBlock(cOccurrence);
- Block dInterproceduralBlock = GetInterproceduralBlock(dOccurrence);
-
- return reachabilityGraph.MayReach(cInterproceduralBlock, dInterproceduralBlock);
-
- }
-
- private Block GetInterproceduralBlock(object cOccurrence)
- {
- Debug.Assert(cOccurrence is Block || cOccurrence is Tuple<string, PrePost>);
-
- var stringPrePostPair = cOccurrence as Tuple<string, PrePost>;
- if(stringPrePostPair != null) {
- if(stringPrePostPair.Item2 == PrePost.PRE) {
- return reachabilityGraph.GetNewEntryBlock(stringPrePostPair.Item1);
- } else {
- return reachabilityGraph.GetNewExitBlock(stringPrePostPair.Item1);
- }
- }
-
- return reachabilityGraph.GetNewBlock((Block)cOccurrence);
-
- }
- }
-
- class AnnotationInstance {
- public string AnnotationIdentifier;
- public string Proc;
- public Expr Expr;
-
- internal AnnotationInstance(string AnnotationIdentifier, string Proc, Expr Expr) {
- this.AnnotationIdentifier = AnnotationIdentifier;
- this.Proc = Proc;
- this.Expr = Expr;
- }
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Boogie.GraphUtil;
+using Microsoft.Basetypes;
+using System.Diagnostics;
+
+namespace Microsoft.Boogie.Houdini {
+
+ public class AnnotationDependenceAnalyser {
+
+ private const string COARSE_STAGES = "COARSE";
+ private const string FINE_STAGES = "FINE";
+ private const string BALANCED_STAGES = "BALANCED";
+
+ private Program prog;
+ private IVariableDependenceAnalyser varDepAnalyser;
+ private IEnumerable<string> CandidateIdentifiers; // Candidate Boolean names
+ private IEnumerable<string> NonCandidateIdentifiers; // Additional names introduced for non-candidate annotations
+ private Dictionary<string, HashSet<VariableDescriptor>> annotationDependsOn;
+ private Dictionary<VariableDescriptor, HashSet<string>> variableDirectlyReferredToByAnnotations;
+ private Graph<string> AnnotationDependences;
+ private StronglyConnectedComponents<string> SCCs;
+ private Graph<SCC<string>> StagesDAG;
+ private StagedHoudiniPlan Plan;
+
+ public AnnotationDependenceAnalyser(Program prog) {
+ this.prog = prog;
+ this.varDepAnalyser = new VariableDependenceAnalyser(prog);
+ varDepAnalyser.Analyse();
+ }
+
+ public void Analyse() {
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Annotation dependence analysis: Getting annotations");
+ }
+
+ CandidateIdentifiers = GetCandidates();
+ NonCandidateIdentifiers = GetNonCandidateAnnotations();
+
+ DetermineAnnotationVariableDependences();
+
+ ConstructAnnotationDependenceGraph();
+
+ ConstructStagesDAG();
+
+ }
+
+ private IEnumerable<string> AllAnnotationIdentifiers() {
+ HashSet<string> Result = new HashSet<string>();
+ foreach (var c in CandidateIdentifiers) {
+ Result.Add(c);
+ }
+ foreach (var a in NonCandidateIdentifiers) {
+ Result.Add(a);
+ }
+ return Result;
+ }
+
+ private void ConstructStagesDAG()
+ {
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Annotation dependence analysis: Computing SCCs");
+ }
+
+ Adjacency<string> next = new Adjacency<string>(AnnotationDependences.Successors);
+ Adjacency<string> prev = new Adjacency<string>(AnnotationDependences.Predecessors);
+ SCCs = new StronglyConnectedComponents<string>(
+ AnnotationDependences.Nodes, next, prev);
+ SCCs.Compute();
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Annotation dependence analysis: Building stages DAG");
+ }
+
+ Dictionary<string, SCC<string>> rep = new Dictionary<string, SCC<string>>();
+ foreach (var scc in SCCs)
+ {
+ foreach (var s in scc)
+ {
+ rep[s] = scc;
+ }
+ }
+
+ StagesDAG = new Graph<SCC<string>>();
+
+ foreach (var edge in AnnotationDependences.Edges)
+ {
+ if (rep[edge.Item1] != rep[edge.Item2])
+ {
+ StagesDAG.AddEdge(rep[edge.Item1], rep[edge.Item2]);
+ }
+ }
+
+ SCC<string> dummy = new SCC<string>();
+ foreach (var scc in SCCs)
+ {
+ StagesDAG.AddEdge(scc, dummy);
+ }
+ }
+
+ private void ConstructAnnotationDependenceGraph()
+ {
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Annotation dependence analysis: Building dependence graph");
+ }
+
+ IAnnotationReachabilityChecker reachabilityChecker;
+
+ if(CommandLineOptions.Clo.StagedHoudiniReachabilityAnalysis) {
+ reachabilityChecker = new AnnotationReachabilityChecker(prog, AllAnnotationIdentifiers());
+ } else {
+ reachabilityChecker = new DummyAnnotationReachabilityChecker();
+ }
+
+ AnnotationDependences = new Graph<string>();
+ foreach (var c in AllAnnotationIdentifiers())
+ {
+ AnnotationDependences.AddEdge(c, c);
+ foreach (var vd in annotationDependsOn[c])
+ {
+ if (variableDirectlyReferredToByAnnotations.ContainsKey(vd))
+ {
+ foreach (var d in variableDirectlyReferredToByAnnotations[vd])
+ {
+ if(reachabilityChecker.MayReach(d, c))
+ {
+ AnnotationDependences.AddEdge(c, d);
+ }
+ }
+ }
+ }
+ }
+
+ if(CommandLineOptions.Clo.StagedHoudiniMergeIgnoredAnnotations) {
+ MergeIgnoredAnnotations();
+ }
+
+ }
+
+ private void MergeIgnoredAnnotations()
+ {
+ var IgnoredAnnotationsToVariables = new Dictionary<string, HashSet<Variable>>();
+ foreach(var c in AllAnnotationIdentifiers()) {
+ IgnoredAnnotationsToVariables[c] = new HashSet<Variable>();
+ }
+ foreach(var ci in AnnotationInstances()) {
+ if(!IgnoredAnnotationsToVariables.ContainsKey(ci.AnnotationIdentifier)) {
+ continue;
+ }
+ VariableCollector vc = new VariableCollector();
+ vc.Visit(ci.Expr);
+ if(vc.usedVars.Select(Item => varDepAnalyser.VariableRelevantToAnalysis(Item, ci.Proc)).Count() != 0) {
+ continue;
+ }
+ foreach(var v in vc.usedVars) {
+ if(varDepAnalyser.Ignoring(v, ci.Proc)) {
+ IgnoredAnnotationsToVariables[ci.AnnotationIdentifier].Add(v);
+ }
+ }
+ }
+ foreach(var c in IgnoredAnnotationsToVariables.Keys) {
+ foreach(var d in IgnoredAnnotationsToVariables.Keys) {
+ if(c == d) {
+ continue;
+ }
+ if(IgnoredAnnotationsToVariables[c].Equals(IgnoredAnnotationsToVariables[d])) {
+ AnnotationDependences.AddEdge(c, d);
+ }
+ }
+ }
+ }
+
+
+
+ private void DetermineAnnotationVariableDependences()
+ {
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Annotation dependence analysis: Working out what annotations depend on");
+ }
+ annotationDependsOn = new Dictionary<string, HashSet<VariableDescriptor>>();
+ variableDirectlyReferredToByAnnotations = new Dictionary<VariableDescriptor, HashSet<string>>();
+ foreach (var c in AllAnnotationIdentifiers())
+ {
+ annotationDependsOn[c] = new HashSet<VariableDescriptor>();
+ }
+
+ foreach(var annotationInstance in AnnotationInstances()) {
+ AddDependences(annotationInstance);
+ }
+
+ }
+
+ private IEnumerable<AnnotationInstance> AnnotationInstances()
+ {
+ foreach (var impl in prog.Implementations)
+ {
+ foreach (PredicateCmd p in impl.Blocks.SelectMany(Item => Item.Cmds).OfType<PredicateCmd>())
+ {
+ string c;
+ if(Houdini.MatchCandidate(p.Expr, CandidateIdentifiers, out c)) {
+ yield return new AnnotationInstance(c, impl.Name, p.Expr);
+ } else if((p is AssertCmd) && QKeyValue.FindBoolAttribute(p.Attributes, "originated_from_invariant")) {
+ var tag = GetTagFromNonCandidateAttributes(p.Attributes);
+ if (tag != null) {
+ yield return new AnnotationInstance(tag, impl.Name, p.Expr);
+ }
+ }
+ }
+ }
+
+ foreach (var proc in prog.NonInlinedProcedures())
+ {
+ foreach (Requires r in proc.Requires)
+ {
+ string c;
+ if(Houdini.MatchCandidate(r.Condition, CandidateIdentifiers, out c)) {
+ yield return new AnnotationInstance(c, proc.Name, r.Condition);
+ } else {
+ var tag = GetTagFromNonCandidateAttributes(r.Attributes);
+ if (tag != null) {
+ yield return new AnnotationInstance(tag, proc.Name, r.Condition);
+ }
+ }
+ }
+ foreach (Ensures e in proc.Ensures)
+ {
+ string c;
+ if(Houdini.MatchCandidate(e.Condition, CandidateIdentifiers, out c)) {
+ yield return new AnnotationInstance(c, proc.Name, e.Condition);
+ } else {
+ var tag = GetTagFromNonCandidateAttributes(e.Attributes);
+ if (tag != null) {
+ yield return new AnnotationInstance(tag, proc.Name, e.Condition);
+ }
+ }
+ }
+ }
+ }
+
+ internal static string GetTagFromNonCandidateAttributes(QKeyValue Attributes)
+ {
+ string tag = QKeyValue.FindStringAttribute(Attributes, "staged_houdini_tag");
+ return tag;
+ }
+
+ private bool FindInDAG(Graph<SCC<string>> DAG, SCC<string> toFind, SCC<string> start) {
+ if (toFind == start) {
+ return true;
+ }
+ foreach (var n in DAG.Successors(start)) {
+ if (FindInDAG(DAG, toFind, n)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void AddDependences(AnnotationInstance ci) {
+ VariableCollector vc = new VariableCollector();
+ vc.VisitExpr(ci.Expr);
+
+ foreach (var v in vc.usedVars.Where(Item => varDepAnalyser.VariableRelevantToAnalysis(Item, ci.Proc))) {
+ VariableDescriptor vd =
+ varDepAnalyser.MakeDescriptor(ci.Proc, v);
+ if (!variableDirectlyReferredToByAnnotations.ContainsKey(vd)) {
+ variableDirectlyReferredToByAnnotations[vd] = new HashSet<string>();
+ }
+ variableDirectlyReferredToByAnnotations[vd].Add(ci.AnnotationIdentifier);
+
+ foreach (var w in varDepAnalyser.DependsOn(vd)) {
+ annotationDependsOn[ci.AnnotationIdentifier].Add(w);
+ }
+ }
+ }
+
+ private bool IsStageDependence(SCC<string> Src, SCC<string> Dst) {
+ foreach (var c in Src) {
+ foreach (var d in AnnotationDependences.Successors(c)) {
+ if (Dst.Contains(d)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+
+ public void dump() {
+
+ if(CommandLineOptions.Clo.DebugStagedHoudini) {
+ varDepAnalyser.dump();
+
+ Console.WriteLine("Annotations and the variables they depend on");
+ Console.WriteLine("============================================");
+ foreach (var entry in annotationDependsOn) {
+ Console.WriteLine(entry.Key + " <- ");
+ foreach (var vd in entry.Value) {
+ Console.WriteLine(" " + vd + ", ");
+ }
+ }
+
+ Console.WriteLine("");
+
+ Console.WriteLine("Variables and the annotations that directly refer to them");
+ Console.WriteLine("========================================================");
+ foreach (var entry in variableDirectlyReferredToByAnnotations) {
+ Console.WriteLine(entry.Key + " <- ");
+ foreach (var annotation in entry.Value) {
+ Console.WriteLine(" " + annotation + ", ");
+ }
+ }
+
+ Console.WriteLine("");
+
+ Console.WriteLine("Annotation dependence graph");
+ Console.WriteLine("==========================");
+ foreach (var c in AnnotationDependences.Nodes) {
+ Console.WriteLine(c + " <- ");
+ foreach (var d in AnnotationDependences.Successors(c)) {
+ Console.WriteLine(" " + d);
+ }
+ }
+ }
+
+ Console.WriteLine("");
+
+ Console.WriteLine("Strongly connected components");
+ Console.WriteLine("=============================");
+
+ List<SCC<string>> Components = StagesDAG.TopologicalSort().ToList();
+
+ for (int i = 0; i < Components.Count(); i++) {
+ Console.Write(i + ": ");
+ DumpSCC(Components[i]);
+ Console.WriteLine(); Console.WriteLine();
+ }
+
+ Console.WriteLine("Stages DAG");
+ Console.WriteLine("==========");
+ for (int i = 0; i < Components.Count(); i++) {
+ Console.Write(i + " -> { ");
+ bool first = true;
+ foreach (var d in StagesDAG.Successors(Components[i])) {
+ if (first) {
+ first = false;
+ }
+ else {
+ Console.Write(", ");
+ }
+ Console.Write(Components.IndexOf(d));
+ }
+ Console.WriteLine(" }");
+ }
+
+ }
+
+ private static void DumpSCC(SCC<string> component) {
+ var sortedComponent = component.ToList();
+ sortedComponent.Sort();
+ Console.Write("{ ");
+ bool first = true;
+ foreach (var s in sortedComponent) {
+ if (first) {
+ first = false;
+ }
+ else {
+ Console.Write(", ");
+ }
+ Console.Write(s);
+ }
+ Console.Write(" }");
+ }
+
+ private bool OnlyRefersToConstants(Expr e) {
+ VariableCollector vc = new VariableCollector();
+ vc.Visit(e);
+ return vc.usedVars.OfType<Constant>().Count() == vc.usedVars.Count();
+ }
+
+ private IEnumerable<string> GetNonCandidateAnnotations() {
+ var Result = new HashSet<string>();
+ int Counter = 0;
+ foreach(var Assertion in prog.Blocks().SelectMany(Item => Item.Cmds).
+ OfType<AssertCmd>()) {
+
+ string unused;
+ if (Houdini.MatchCandidate(Assertion.Expr, CandidateIdentifiers, out unused)) {
+ continue;
+ }
+
+ if (!QKeyValue.FindBoolAttribute(Assertion.Attributes, "originated_from_invariant")) {
+ continue;
+ }
+
+ if (OnlyRefersToConstants(Assertion.Expr)) {
+ continue;
+ }
+
+ string Tag = "staged_houdini_tag_" + Counter;
+ Result.Add(Tag);
+ Assertion.Attributes = new QKeyValue(Token.NoToken, "staged_houdini_tag",
+ new List<object> { Tag }, Assertion.Attributes);
+ Counter++;
+ }
+
+ foreach(var Req in prog.NonInlinedProcedures().SelectMany(Item => Item.Requires)) {
+
+ string unused;
+ if (Houdini.MatchCandidate(Req.Condition, CandidateIdentifiers, out unused)) {
+ continue;
+ }
+
+ if (OnlyRefersToConstants(Req.Condition)) {
+ continue;
+ }
+
+ string Tag = "staged_houdini_tag_" + Counter;
+ Result.Add(Tag);
+ Req.Attributes = new QKeyValue(Token.NoToken, "staged_houdini_tag",
+ new List<object> { Tag }, Req.Attributes);
+ Counter++;
+
+ }
+
+ foreach(var Ens in prog.NonInlinedProcedures().SelectMany(Item => Item.Ensures)) {
+
+ string unused;
+ if (Houdini.MatchCandidate(Ens.Condition, CandidateIdentifiers, out unused)) {
+ continue;
+ }
+
+ if (OnlyRefersToConstants(Ens.Condition)) {
+ continue;
+ }
+
+ string Tag = "staged_houdini_tag_" + Counter;
+ Result.Add(Tag);
+ Ens.Attributes = new QKeyValue(Token.NoToken, "staged_houdini_tag",
+ new List<object> { Tag }, Ens.Attributes);
+ Counter++;
+
+ }
+
+ return Result;
+ }
+
+ private IEnumerable<string> GetCandidates() {
+ return prog.Variables.Where(Item =>
+ QKeyValue.FindBoolAttribute(Item.Attributes, "existential")).Select(Item => Item.Name);
+ }
+
+
+ public StagedHoudiniPlan ApplyStages() {
+
+ if (NoStages())
+ {
+ Debug.Assert(false);
+ var TrivialGraph = new Graph<ScheduledStage>();
+ TrivialGraph.AddSource(new ScheduledStage(0, new HashSet<string>()));
+ return new StagedHoudiniPlan(TrivialGraph);
+ }
+
+ #region Assign annotations to stages at a given level of granularity
+
+ switch(CommandLineOptions.Clo.StagedHoudini) {
+ case COARSE_STAGES:
+ Plan = ComputeCoarseStages();
+ break;
+ case FINE_STAGES:
+ Plan = ComputeFineStages();
+ break;
+ case BALANCED_STAGES:
+ Plan = ComputeBalancedStages();
+ break;
+ default:
+ Debug.Assert(false);
+ Plan = null;
+ break;
+ }
+
+ foreach(var c in AllAnnotationIdentifiers()) {
+ Debug.Assert(Plan.StageForAnnotation(c) != null);
+ }
+ #endregion
+
+ #region Generate boolean variables to control stages
+ var stageToActiveBoolean = new Dictionary<int, Constant>();
+ var stageToCompleteBoolean = new Dictionary<int, Constant>();
+
+ foreach (var stage in Plan)
+ {
+ var stageActive = new Constant(Token.NoToken,
+ new TypedIdent(Token.NoToken, "_stage_" + stage.GetId() + "_active", Type.Bool),
+ false);
+ stageActive.AddAttribute("stage_active", new object[] { new LiteralExpr(Token.NoToken, BigNum.FromInt(stage.GetId())) });
+ prog.AddTopLevelDeclaration(stageActive);
+ stageToActiveBoolean[stage.GetId()] = stageActive;
+
+ var stageComplete = new Constant(Token.NoToken,
+ new TypedIdent(Token.NoToken, "_stage_" + stage.GetId() + "_complete", Type.Bool),
+ false);
+ stageComplete.AddAttribute("stage_complete", new object[] { new LiteralExpr(Token.NoToken, BigNum.FromInt(stage.GetId())) });
+ prog.AddTopLevelDeclaration(stageComplete);
+ stageToCompleteBoolean[stage.GetId()] = stageComplete;
+ }
+ #endregion
+
+ #region Adapt annotation assertions to take account of stages
+ foreach (var b in prog.Implementations.Select(Item => Item.Blocks).SelectMany(Item => Item))
+ {
+ List<Cmd> newCmds = new List<Cmd>();
+ foreach (var cmd in b.Cmds)
+ {
+ var a = cmd as AssertCmd;
+ string c;
+ if (a != null) {
+ if (Houdini.MatchCandidate(a.Expr, CandidateIdentifiers, out c))
+ {
+ newCmds.Add(new AssertCmd(a.tok, Houdini.AddConditionToCandidate(a.Expr,
+ Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(c).GetId()]), c), a.Attributes));
+ newCmds.Add(new AssumeCmd(a.tok, Houdini.AddConditionToCandidate(a.Expr,
+ Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(c).GetId()]), c), a.Attributes));
+ } else if (QKeyValue.FindBoolAttribute(a.Attributes, "originated_from_invariant")) {
+ string tag = GetTagFromNonCandidateAttributes(a.Attributes);
+ if (tag == null) {
+ newCmds.Add(a);
+ } else {
+ newCmds.Add(new AssertCmd(a.tok, Expr.Imp(
+ Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(tag).GetId()]), a.Expr),
+ a.Attributes));
+ newCmds.Add(new AssumeCmd(a.tok, Expr.Imp(
+ Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(tag).GetId()]), a.Expr),
+ a.Attributes));
+ }
+ }
+ }
+ else
+ {
+ newCmds.Add(cmd);
+ }
+ }
+ b.Cmds = newCmds;
+ }
+ #endregion
+
+ #region Adapt pre/postconditions to take account of stages
+ foreach (var p in prog.NonInlinedProcedures())
+ {
+
+ #region Handle the preconditions
+ {
+ List<Requires> newRequires = new List<Requires>();
+ foreach(Requires r in p.Requires) {
+ string c;
+ if (Houdini.MatchCandidate(r.Condition, CandidateIdentifiers, out c)) {
+ newRequires.Add(new Requires(r.tok, false,
+ Houdini.AddConditionToCandidate(r.Condition,
+ Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(c).GetId()]), c),
+ r.Comment, r.Attributes));
+ newRequires.Add(new Requires(r.tok, true,
+ Houdini.AddConditionToCandidate(r.Condition,
+ Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(c).GetId()]), c),
+ r.Comment, r.Attributes));
+ } else {
+ string tag = GetTagFromNonCandidateAttributes(r.Attributes);
+ if (tag == null) {
+ newRequires.Add(r);
+ } else {
+ newRequires.Add(new Requires(r.tok, false,
+ Expr.Imp(Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(tag).GetId()]), r.Condition),
+ r.Comment, r.Attributes));
+ newRequires.Add(new Requires(r.tok, true,
+ Expr.Imp(Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(tag).GetId()]), r.Condition),
+ r.Comment, r.Attributes));
+ }
+ }
+ }
+ p.Requires = newRequires;
+ }
+ #endregion
+
+ #region Handle the postconditions
+ {
+ List<Ensures> newEnsures = new List<Ensures>();
+ foreach(Ensures e in p.Ensures) {
+ string c;
+ if (Houdini.MatchCandidate(e.Condition, CandidateIdentifiers, out c)) {
+ int stage = Plan.StageForAnnotation(c).GetId();
+ newEnsures.Add(new Ensures(e.tok, false,
+ Houdini.AddConditionToCandidate(e.Condition,
+ Expr.Ident(stageToActiveBoolean[stage]), c),
+ e.Comment, e.Attributes));
+ newEnsures.Add(new Ensures(e.tok, true,
+ Houdini.AddConditionToCandidate(e.Condition,
+ Expr.Ident(stageToCompleteBoolean[stage]), c),
+ e.Comment, e.Attributes));
+ } else {
+ string tag = GetTagFromNonCandidateAttributes(e.Attributes);
+ if (tag == null) {
+ newEnsures.Add(e);
+ } else {
+ newEnsures.Add(new Ensures(e.tok, false,
+ Expr.Imp(Expr.Ident(stageToActiveBoolean[Plan.StageForAnnotation(tag).GetId()]), e.Condition),
+ e.Comment, e.Attributes));
+ newEnsures.Add(new Ensures(e.tok, true,
+ Expr.Imp(Expr.Ident(stageToCompleteBoolean[Plan.StageForAnnotation(tag).GetId()]), e.Condition),
+ e.Comment, e.Attributes));
+ }
+ }
+ }
+ p.Ensures = newEnsures;
+ }
+ #endregion
+
+ }
+ #endregion
+
+ return Plan;
+
+ }
+
+ private int FindLargestStage() {
+ return StagesDAG.Nodes.Select(Item => Item.Count()).Max();
+ }
+
+
+ private StagedHoudiniPlan ComputeCoarseStages()
+ {
+ foreach(var n in StagesDAG.Nodes) {
+ Debug.Assert(!StagesDAG.Successors(n).Contains(n));
+ }
+
+ Graph<ScheduledStage> Dependences = new Graph<ScheduledStage>();
+
+ var done = new Dictionary<SCC<string>, ScheduledStage>();
+ done[GetStartNodeOfStagesDAG()] = new ScheduledStage(0, new HashSet<string>());
+
+ for(int stageId = 1; done.Count() != StagesDAG.Nodes.Count(); stageId++)
+ {
+ var Stage = new ScheduledStage(stageId, new HashSet<string>());
+ HashSet<SCC<string>> AssignedToThisStage = new HashSet<SCC<string>>();
+
+ foreach (var n in StagesDAG.Nodes.Where(Item => !done.ContainsKey(Item)))
+ {
+ if(StagesDAG.Successors(n).Where(Item => !done.ContainsKey(Item)).Count() == 0) {
+ foreach(var s in StagesDAG.Successors(n)) {
+ Debug.Assert(s != n);
+ Debug.Assert(Stage != done[s]);
+ Dependences.AddEdge(Stage, done[s]);
+ }
+ foreach (var a in n)
+ {
+ Stage.AddAnnotation(a);
+ }
+ AssignedToThisStage.Add(n);
+ }
+ }
+
+ foreach(var n in AssignedToThisStage) {
+ done[n] = Stage;
+ }
+ }
+ return new StagedHoudiniPlan(Dependences);
+ }
+
+ private StagedHoudiniPlan ComputeBalancedStages()
+ {
+ Graph<ScheduledStage> Dependences = new Graph<ScheduledStage>();
+ var done = new Dictionary<SCC<string>, ScheduledStage>();
+ done[GetStartNodeOfStagesDAG()] = new ScheduledStage(0, new HashSet<string>());
+
+ int maxStageSize = 200;
+
+ for(int stageId = 1; done.Count() != StagesDAG.Nodes.Count(); stageId++)
+ {
+ int stageSize = 0;
+ ScheduledStage Stage = new ScheduledStage(stageId, new HashSet<string>());
+ HashSet<SCC<string>> AddedToThisStage = new HashSet<SCC<string>>();
+
+ foreach (var n in StagesDAG.Nodes.Where(Item => !done.ContainsKey(Item)))
+ {
+ if(stageSize + n.Count() > maxStageSize) {
+ continue;
+ }
+ if(StagesDAG.Successors(n).Where(Item => !done.ContainsKey(Item)).Count() == 0) {
+ foreach (var c in n)
+ {
+ Stage.AddAnnotation(c);
+ stageSize++;
+ }
+ foreach(var s in StagesDAG.Successors(n)) {
+ Dependences.AddEdge(Stage, done[s]);
+ }
+ AddedToThisStage.Add(n);
+ }
+ }
+ foreach(var n in AddedToThisStage) {
+ done[n] = Stage;
+ }
+ if(stageSize == 0) {
+ maxStageSize *= 2;
+ }
+ }
+ return new StagedHoudiniPlan(Dependences);
+ }
+
+ private StagedHoudiniPlan ComputeFineStages()
+ {
+ Graph<ScheduledStage> Dependences = new Graph<ScheduledStage>();
+ var done = new Dictionary<SCC<string>, ScheduledStage>();
+
+ List<SCC<string>> components = StagesDAG.TopologicalSort().ToList();
+ components.Reverse();
+
+ for (int i = 0; i < components.Count(); i++)
+ {
+ ScheduledStage Stage = new ScheduledStage(i, new HashSet<string>());
+ done[components[i]] = Stage;
+ foreach (var c in components[i])
+ {
+ Stage.AddAnnotation(c);
+ }
+ foreach(var s in StagesDAG.Successors(components[i])) {
+ Dependences.AddEdge(Stage, done[s]);
+ }
+ }
+ return new StagedHoudiniPlan(Dependences);
+ }
+
+ private SCC<string> GetStartNodeOfStagesDAG()
+ {
+ return StagesDAG.Nodes.Where(Item => StagesDAG.Successors(Item).Count() == 0).
+ ToList()[0];
+ }
+
+ private bool NoStages()
+ {
+ return AllAnnotationIdentifiers().Count() == 0 || StagesDAG.Nodes.Count() == 0;
+ }
+ }
+
+ interface IAnnotationReachabilityChecker {
+ bool MayReach(string c, string d);
+ }
+
+ class DummyAnnotationReachabilityChecker : IAnnotationReachabilityChecker {
+ public bool MayReach(string c, string d) {
+ return true;
+ }
+ }
+
+ class AnnotationReachabilityChecker : IAnnotationReachabilityChecker {
+
+ private enum PrePost {
+ PRE, POST
+ }
+
+ private Program prog;
+ private IEnumerable<string> AnnotationIdentifiers;
+ private IInterproceduralReachabilityGraph reachabilityGraph;
+ private Dictionary<string, HashSet<object>> annotationToOccurences;
+
+ internal AnnotationReachabilityChecker(Program prog, IEnumerable<string> AnnotationIdentifiers) {
+ this.prog = prog;
+ this.AnnotationIdentifiers = AnnotationIdentifiers;
+ this.reachabilityGraph = new InterproceduralReachabilityGraph(prog);
+ this.annotationToOccurences = new Dictionary<string,HashSet<object>>();
+
+ // Add all annotation occurrences in blocks
+ foreach(Block b in prog.Blocks()) {
+ foreach(var assertCmd in b.Cmds.OfType<AssertCmd>()) {
+ string c;
+ if(Houdini.MatchCandidate(assertCmd.Expr, AnnotationIdentifiers, out c)) {
+ AddAnnotationOccurrence(c, b);
+ } else {
+ var tag = AnnotationDependenceAnalyser.GetTagFromNonCandidateAttributes(assertCmd.Attributes);
+ if (tag != null) {
+ AddAnnotationOccurrence(tag, b);
+ }
+ }
+ }
+ }
+
+ // Add all annotation occurrences in pre and post conditions
+ foreach(var proc in prog.NonInlinedProcedures()) {
+ foreach(Requires r in proc.Requires) {
+ string c;
+ if(Houdini.MatchCandidate(r.Condition, AnnotationIdentifiers, out c)) {
+ AddAnnotationOccurrence(c, new Tuple<string, PrePost>(proc.Name, PrePost.PRE));
+ } else {
+ string tag = AnnotationDependenceAnalyser.GetTagFromNonCandidateAttributes(r.Attributes);
+ if(tag != null) {
+ AddAnnotationOccurrence(tag, new Tuple<string, PrePost>(proc.Name, PrePost.PRE));
+ }
+ }
+ }
+ foreach(Ensures e in proc.Ensures) {
+ string c;
+ if(Houdini.MatchCandidate(e.Condition, AnnotationIdentifiers, out c)) {
+ AddAnnotationOccurrence(c, new Tuple<string, PrePost>(proc.Name, PrePost.POST));
+ } else {
+ string tag = AnnotationDependenceAnalyser.GetTagFromNonCandidateAttributes(e.Attributes);
+ if(tag != null) {
+ AddAnnotationOccurrence(tag, new Tuple<string, PrePost>(proc.Name, PrePost.PRE));
+ }
+ }
+ }
+ }
+
+ }
+
+ private void AddAnnotationOccurrence(string c, object o) {
+ Debug.Assert(o is Block || o is Tuple<string, PrePost>);
+ if(!annotationToOccurences.ContainsKey(c)) {
+ annotationToOccurences[c] = new HashSet<object>();
+ }
+ annotationToOccurences[c].Add(o);
+ }
+
+ public bool MayReach(string c, string d) {
+ foreach(object cOccurrence in annotationToOccurences[c]) {
+ foreach(object dOccurrence in annotationToOccurences[d]) {
+ if(OccurrencesMayReach(cOccurrence, dOccurrence)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private bool OccurrencesMayReach(object cOccurrence, object dOccurrence) {
+ Debug.Assert(cOccurrence is Block || cOccurrence is Tuple<string, PrePost>);
+ Debug.Assert(dOccurrence is Block || dOccurrence is Tuple<string, PrePost>);
+
+ Block cInterproceduralBlock = GetInterproceduralBlock(cOccurrence);
+ Block dInterproceduralBlock = GetInterproceduralBlock(dOccurrence);
+
+ return reachabilityGraph.MayReach(cInterproceduralBlock, dInterproceduralBlock);
+
+ }
+
+ private Block GetInterproceduralBlock(object cOccurrence)
+ {
+ Debug.Assert(cOccurrence is Block || cOccurrence is Tuple<string, PrePost>);
+
+ var stringPrePostPair = cOccurrence as Tuple<string, PrePost>;
+ if(stringPrePostPair != null) {
+ if(stringPrePostPair.Item2 == PrePost.PRE) {
+ return reachabilityGraph.GetNewEntryBlock(stringPrePostPair.Item1);
+ } else {
+ return reachabilityGraph.GetNewExitBlock(stringPrePostPair.Item1);
+ }
+ }
+
+ return reachabilityGraph.GetNewBlock((Block)cOccurrence);
+
+ }
+ }
+
+ class AnnotationInstance {
+ public string AnnotationIdentifier;
+ public string Proc;
+ public Expr Expr;
+
+ internal AnnotationInstance(string AnnotationIdentifier, string Proc, Expr Expr) {
+ this.AnnotationIdentifier = AnnotationIdentifier;
+ this.Proc = Proc;
+ this.Expr = Expr;
+ }
+ }
+
+}
diff --git a/Source/Houdini/Checker.cs b/Source/Houdini/Checker.cs
index 30056d99..73842019 100644
--- a/Source/Houdini/Checker.cs
+++ b/Source/Houdini/Checker.cs
@@ -1,456 +1,457 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Diagnostics.Contracts;
-using System.Collections.Generic;
-using Microsoft.Boogie;
-using Microsoft.Boogie.VCExprAST;
-using Microsoft.Basetypes;
-using System.Collections;
-using System.IO;
-using System.Threading;
-using VC;
-using System.Linq;
-
-namespace Microsoft.Boogie.Houdini {
- public class ExistentialConstantCollector : ReadOnlyVisitor {
- public static void CollectHoudiniConstants(Houdini houdini, Implementation impl, out ExistentialConstantCollector collector)
- {
- collector = new ExistentialConstantCollector(houdini);
- collector.impl = impl;
- collector.VisitImplementation(impl);
- }
-
- private ExistentialConstantCollector(Houdini houdini) {
- this.houdini = houdini;
- this.houdiniAssertConstants = new HashSet<Variable>();
- this.houdiniAssumeConstants = new HashSet<Variable>();
-
- this.explainNegative = new HashSet<Variable>();
- this.explainPositive = new HashSet<Variable>();
- this.constToControl = new Dictionary<string, Tuple<Variable, Variable>>();
- }
- private Houdini houdini;
- public HashSet<Variable> houdiniAssertConstants;
- public HashSet<Variable> houdiniAssumeConstants;
-
- // Explain Houdini stuff
- public HashSet<Variable> explainPositive;
- public HashSet<Variable> explainNegative;
- public Dictionary<string, Tuple<Variable, Variable>> constToControl;
- Implementation impl;
-
- public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node) {
- AddHoudiniConstant(node);
- return base.VisitAssertRequiresCmd(node);
- }
- public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node) {
- AddHoudiniConstant(node);
- return base.VisitAssertEnsuresCmd(node);
- }
- public override Cmd VisitAssertCmd(AssertCmd node) {
- AddHoudiniConstant(node);
- return base.VisitAssertCmd(node);
- }
- public override Cmd VisitAssumeCmd(AssumeCmd node) {
- AddHoudiniConstant(node);
- return base.VisitAssumeCmd(node);
- }
- private void AddHoudiniConstant(AssertCmd assertCmd)
- {
- Variable houdiniConstant;
- if (houdini.MatchCandidate(assertCmd.Expr, out houdiniConstant))
- houdiniAssertConstants.Add(houdiniConstant);
-
- if (houdiniConstant != null && CommandLineOptions.Clo.ExplainHoudini && !constToControl.ContainsKey(houdiniConstant.Name))
- {
- // For each houdini constant c, create two more constants c_pos and c_neg.
- // Then change the asserted condition (c ==> \phi) to
- // (c ==> (c_pos && (\phi || \not c_neg))
- var control = createNewExplainConstants(houdiniConstant);
- assertCmd.Expr = houdini.InsertCandidateControl(assertCmd.Expr, control.Item1, control.Item2);
- explainPositive.Add(control.Item1);
- explainNegative.Add(control.Item2);
- constToControl.Add(houdiniConstant.Name, control);
- }
- }
- private void AddHoudiniConstant(AssumeCmd assumeCmd)
- {
- Variable houdiniConstant;
- if (houdini.MatchCandidate(assumeCmd.Expr, out houdiniConstant))
- houdiniAssumeConstants.Add(houdiniConstant);
- }
- private Tuple<Variable, Variable> createNewExplainConstants(Variable v)
- {
- Contract.Assert(impl != null);
- Contract.Assert(CommandLineOptions.Clo.ExplainHoudini);
- Variable v1 = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}_{2}", v.Name, impl.Name, "pos"), Microsoft.Boogie.BasicType.Bool));
- Variable v2 = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}_{2}", v.Name, impl.Name, "neg"), Microsoft.Boogie.BasicType.Bool));
-
- return Tuple.Create(v1, v2);
- }
- }
-
-
-
- public class HoudiniSession {
-
- public class HoudiniStatistics {
- public double proverTime = 0;
- public int numProverQueries = 0;
- public double unsatCoreProverTime = 0;
- public int numUnsatCoreProverQueries = 0;
- public int numUnsatCorePrunings = 0;
- }
-
- public string descriptiveName;
- public HoudiniStatistics stats;
- private VCExpr conjecture;
- private ProverInterface.ErrorHandler handler;
- ConditionGeneration.CounterexampleCollector collector;
- HashSet<Variable> unsatCoreSet;
- HashSet<Variable> houdiniConstants;
- public HashSet<Variable> houdiniAssertConstants;
- private HashSet<Variable> houdiniAssumeConstants;
-
- // Extra constants created for ExplainHoudini
- private HashSet<Variable> explainConstantsPositive;
- private HashSet<Variable> explainConstantsNegative;
- private Dictionary<string, Tuple<Variable, Variable>> constantToControl;
-
- public bool InUnsatCore(Variable constant) {
- if (unsatCoreSet == null)
- return true;
- if (unsatCoreSet.Contains(constant))
- return true;
- stats.numUnsatCorePrunings++;
- return false;
- }
-
- public HoudiniSession(Houdini houdini, VCGen vcgen, ProverInterface proverInterface, Program program, Implementation impl, HoudiniStatistics stats, int taskID = -1) {
- this.descriptiveName = impl.Name;
- this.stats = stats;
- collector = new ConditionGeneration.CounterexampleCollector();
- collector.OnProgress("HdnVCGen", 0, 0, 0.0);
-
- vcgen.ConvertCFG2DAG(impl, taskID: taskID);
- ModelViewInfo mvInfo;
- var gotoCmdOrigins = vcgen.PassifyImpl(impl, out mvInfo);
-
- ExistentialConstantCollector ecollector;
- ExistentialConstantCollector.CollectHoudiniConstants(houdini, impl, out ecollector);
- this.houdiniAssertConstants = ecollector.houdiniAssertConstants;
- this.houdiniAssumeConstants = ecollector.houdiniAssumeConstants;
- this.explainConstantsNegative = ecollector.explainNegative;
- this.explainConstantsPositive = ecollector.explainPositive;
- this.constantToControl = ecollector.constToControl;
-
- houdiniConstants = new HashSet<Variable>();
- houdiniConstants.UnionWith(houdiniAssertConstants);
- houdiniConstants.UnionWith(houdiniAssumeConstants);
-
- var exprGen = proverInterface.Context.ExprGen;
- VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : exprGen.Integer(BigNum.ZERO);
-
- Dictionary<int, Absy> label2absy;
- conjecture = vcgen.GenerateVC(impl, controlFlowVariableExpr, out label2absy, proverInterface.Context);
- if (!CommandLineOptions.Clo.UseLabels) {
- VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(exprGen.Integer(BigNum.ZERO), exprGen.Integer(BigNum.ZERO));
- VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
- conjecture = exprGen.Implies(eqExpr, conjecture);
- }
-
- Macro macro = new Macro(Token.NoToken, descriptiveName, new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Type.Bool), false));
- proverInterface.DefineMacro(macro, conjecture);
- conjecture = exprGen.Function(macro);
-
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Local) {
- handler = new VCGen.ErrorReporterLocal(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, proverInterface.Context, program);
- }
- else {
- handler = new VCGen.ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, proverInterface.Context, program);
- }
-
- }
-
- private VCExpr BuildAxiom(ProverInterface proverInterface, Dictionary<Variable, bool> currentAssignment) {
- ProverContext proverContext = proverInterface.Context;
- Boogie2VCExprTranslator exprTranslator = proverContext.BoogieExprTranslator;
- VCExpressionGenerator exprGen = proverInterface.VCExprGen;
-
- VCExpr expr = VCExpressionGenerator.True;
-
- foreach (KeyValuePair<Variable, bool> kv in currentAssignment) {
- Variable constant = kv.Key;
- VCExprVar exprVar = exprTranslator.LookupVariable(constant);
- if (kv.Value) {
- expr = exprGen.And(expr, exprVar);
- }
- else {
- expr = exprGen.And(expr, exprGen.Not(exprVar));
- }
- }
-
- if (CommandLineOptions.Clo.ExplainHoudini)
- {
- // default values for ExplainHoudini control variables
- foreach (var constant in explainConstantsNegative.Concat(explainConstantsPositive))
- {
- expr = exprGen.And(expr, exprTranslator.LookupVariable(constant));
- }
- }
-
- /*
- foreach (Variable constant in this.houdiniConstants) {
- VCExprVar exprVar = exprTranslator.LookupVariable(constant);
- if (currentAssignment[constant]) {
- expr = exprGen.And(expr, exprVar);
- }
- else {
- expr = exprGen.And(expr, exprGen.Not(exprVar));
- }
- }
- */
-
- if(CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Houdini assignment axiom: " + expr);
- }
-
- return expr;
- }
-
- public ProverInterface.Outcome Verify(ProverInterface proverInterface, Dictionary<Variable, bool> assignment, out List<Counterexample> errors, int taskID = -1) {
- collector.examples.Clear();
-
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Verifying " + descriptiveName);
- }
- DateTime now = DateTime.UtcNow;
-
- VCExpr vc = proverInterface.VCExprGen.Implies(BuildAxiom(proverInterface, assignment), conjecture);
- proverInterface.BeginCheck(descriptiveName, vc, handler);
- ProverInterface.Outcome proverOutcome = proverInterface.CheckOutcome(handler, taskID: taskID);
-
- double queryTime = (DateTime.UtcNow - now).TotalSeconds;
- stats.proverTime += queryTime;
- stats.numProverQueries++;
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Time taken = " + queryTime);
- }
-
- errors = collector.examples;
- return proverOutcome;
- }
-
- // MAXSAT
- public void Explain(ProverInterface proverInterface,
- Dictionary<Variable, bool> assignment, Variable refutedConstant)
- {
- Contract.Assert(CommandLineOptions.Clo.ExplainHoudini);
-
- collector.examples.Clear();
-
- // debugging
- houdiniAssertConstants.Iter(v => System.Diagnostics.Debug.Assert(assignment.ContainsKey(v)));
- houdiniAssumeConstants.Iter(v => System.Diagnostics.Debug.Assert(assignment.ContainsKey(v)));
- Contract.Assert(assignment.ContainsKey(refutedConstant));
- Contract.Assert(houdiniAssertConstants.Contains(refutedConstant));
-
- var hardAssumptions = new List<VCExpr>();
- var softAssumptions = new List<VCExpr>();
-
- Boogie2VCExprTranslator exprTranslator = proverInterface.Context.BoogieExprTranslator;
- VCExpressionGenerator exprGen = proverInterface.VCExprGen;
- var controlExpr = VCExpressionGenerator.True;
-
- foreach (var tup in assignment)
- {
- Variable constant = tup.Key;
- VCExprVar exprVar = exprTranslator.LookupVariable(constant);
- var val = tup.Value;
-
- if (houdiniAssumeConstants.Contains(constant))
- {
- if (tup.Value)
- hardAssumptions.Add(exprVar);
- else
- // Previously removed assumed candidates are the soft constraints
- softAssumptions.Add(exprVar);
- }
- else if (houdiniAssertConstants.Contains(constant))
- {
- if (constant == refutedConstant)
- hardAssumptions.Add(exprVar);
- else
- hardAssumptions.Add(exprGen.Not(exprVar));
- }
- else
- {
- if (tup.Value)
- hardAssumptions.Add(exprVar);
- else
- hardAssumptions.Add(exprGen.Not(exprVar));
- }
-
- // For an asserted condition (c ==> \phi),
- // ExplainHoudini's extra control constants (c_pos, c_neg) are used as follows:
- // (true, true): "assert \phi"
- // (false, _): "assert false"
- // (true, false): "assert true"
- if (constant != refutedConstant && constantToControl.ContainsKey(constant.Name))
- {
- var posControl = constantToControl[constant.Name].Item1;
- var negControl = constantToControl[constant.Name].Item2;
-
- // Handle self-recursion
- if (houdiniAssertConstants.Contains(constant) && houdiniAssumeConstants.Contains(constant))
- {
- // disable this assert
- controlExpr = exprGen.And(controlExpr, exprGen.And(exprTranslator.LookupVariable(posControl), exprGen.Not(exprTranslator.LookupVariable(negControl))));
- }
- else
- {
- // default values for control variables
- controlExpr = exprGen.And(controlExpr, exprGen.And(exprTranslator.LookupVariable(posControl), exprTranslator.LookupVariable(negControl)));
- }
- }
- }
-
- hardAssumptions.Add(exprGen.Not(conjecture));
-
- // default values for control variables
- Contract.Assert(constantToControl.ContainsKey(refutedConstant.Name));
- var pc = constantToControl[refutedConstant.Name].Item1;
- var nc = constantToControl[refutedConstant.Name].Item2;
-
- var controlExprNoop = exprGen.And(controlExpr,
- exprGen.And(exprTranslator.LookupVariable(pc), exprTranslator.LookupVariable(nc)));
-
- var controlExprFalse = exprGen.And(controlExpr,
- exprGen.And(exprGen.Not(exprTranslator.LookupVariable(pc)), exprGen.Not(exprTranslator.LookupVariable(nc))));
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Verifying (MaxSat) " + descriptiveName);
- }
- DateTime now = DateTime.UtcNow;
-
- var el = CommandLineOptions.Clo.ProverCCLimit;
- CommandLineOptions.Clo.ProverCCLimit = 1;
-
- var outcome = ProverInterface.Outcome.Undetermined;
-
- do
- {
- List<int> unsatisfiedSoftAssumptions;
-
- hardAssumptions.Add(controlExprNoop);
- outcome = proverInterface.CheckAssumptions(hardAssumptions, softAssumptions, out unsatisfiedSoftAssumptions, handler);
- hardAssumptions.RemoveAt(hardAssumptions.Count - 1);
-
- if (outcome == ProverInterface.Outcome.TimeOut || outcome == ProverInterface.Outcome.OutOfMemory || outcome == ProverInterface.Outcome.Undetermined)
- break;
-
- var reason = new HashSet<string>();
- unsatisfiedSoftAssumptions.Iter(i => reason.Add(softAssumptions[i].ToString()));
- if (CommandLineOptions.Clo.Trace)
- {
- Console.Write("Reason for removal of {0}: ", refutedConstant.Name);
- reason.Iter(r => Console.Write("{0} ", r));
- Console.WriteLine();
- }
-
- // Get rid of those constants from the "reason" that can even make
- // "assert false" pass
-
- hardAssumptions.Add(controlExprFalse);
- var softAssumptions2 = new List<VCExpr>();
- for (int i = 0; i < softAssumptions.Count; i++)
- {
- if (unsatisfiedSoftAssumptions.Contains(i))
- {
- softAssumptions2.Add(softAssumptions[i]);
- continue;
- }
- hardAssumptions.Add(softAssumptions[i]);
- }
-
- var unsatisfiedSoftAssumptions2 = new List<int>();
- outcome = proverInterface.CheckAssumptions(hardAssumptions, softAssumptions2, out unsatisfiedSoftAssumptions2, handler);
-
- if (outcome == ProverInterface.Outcome.TimeOut || outcome == ProverInterface.Outcome.OutOfMemory || outcome == ProverInterface.Outcome.Undetermined)
- break;
-
- unsatisfiedSoftAssumptions2.Iter(i => reason.Remove(softAssumptions2[i].ToString()));
- var reason1 = new HashSet<string>(); //these are the reasons for inconsistency
- unsatisfiedSoftAssumptions2.Iter(i => reason1.Add(softAssumptions2[i].ToString()));
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.Write("Revised reason for removal of {0}: ", refutedConstant.Name);
- reason.Iter(r => Console.Write("{0} ", r));
- Console.WriteLine();
- }
- foreach (var r in reason)
- {
- Houdini.explainHoudiniDottyFile.WriteLine("{0} -> {1} [ label = \"{2}\" color=red ];", refutedConstant.Name, r, descriptiveName);
- }
- //also add the removed reasons using dotted edges (requires- x != 0, requires- x == 0 ==> assert x != 0)
- foreach (var r in reason1)
- {
- Houdini.explainHoudiniDottyFile.WriteLine("{0} -> {1} [ label = \"{2}\" color=blue style=dotted ];", refutedConstant.Name, r, descriptiveName);
- }
- } while (false);
-
- if (outcome == ProverInterface.Outcome.TimeOut || outcome == ProverInterface.Outcome.OutOfMemory || outcome == ProverInterface.Outcome.Undetermined)
- {
- Houdini.explainHoudiniDottyFile.WriteLine("{0} -> {1} [ label = \"{2}\" color=red ];", refutedConstant.Name, "TimeOut", descriptiveName);
- }
-
- CommandLineOptions.Clo.ProverCCLimit = el;
-
- double queryTime = (DateTime.UtcNow - now).TotalSeconds;
- stats.proverTime += queryTime;
- stats.numProverQueries++;
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("Time taken = " + queryTime);
- }
- }
-
- public void UpdateUnsatCore(ProverInterface proverInterface, Dictionary<Variable, bool> assignment)
- {
- DateTime now = DateTime.UtcNow;
-
- Boogie2VCExprTranslator exprTranslator = proverInterface.Context.BoogieExprTranslator;
- proverInterface.Push();
- proverInterface.Assert(conjecture, false);
- foreach (var v in assignment.Keys) {
- if (assignment[v]) continue;
- proverInterface.Assert(exprTranslator.LookupVariable(v), false);
- }
- List<Variable> assumptionVars = new List<Variable>();
- List<VCExpr> assumptionExprs = new List<VCExpr>();
- foreach (var v in assignment.Keys) {
- if (!assignment[v]) continue;
- assumptionVars.Add(v);
- assumptionExprs.Add(exprTranslator.LookupVariable(v));
- }
- List<int> unsatCore;
- ProverInterface.Outcome tmp = proverInterface.CheckAssumptions(assumptionExprs, out unsatCore, handler);
- System.Diagnostics.Debug.Assert(tmp == ProverInterface.Outcome.Valid);
- unsatCoreSet = new HashSet<Variable>();
- foreach (int i in unsatCore)
- unsatCoreSet.Add(assumptionVars[i]);
- proverInterface.Pop();
-
- double unsatCoreQueryTime = (DateTime.UtcNow - now).TotalSeconds;
- stats.unsatCoreProverTime += unsatCoreQueryTime;
- stats.numUnsatCoreProverQueries++;
- }
-
- }
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Diagnostics.Contracts;
+using System.Collections.Generic;
+using Microsoft.Boogie;
+using Microsoft.Boogie.VCExprAST;
+using Microsoft.Basetypes;
+using System.Collections;
+using System.IO;
+using System.Threading;
+using VC;
+using System.Linq;
+
+namespace Microsoft.Boogie.Houdini {
+ public class ExistentialConstantCollector : ReadOnlyVisitor {
+ public static void CollectHoudiniConstants(Houdini houdini, Implementation impl, out ExistentialConstantCollector collector)
+ {
+ collector = new ExistentialConstantCollector(houdini);
+ collector.impl = impl;
+ collector.VisitImplementation(impl);
+ }
+
+ private ExistentialConstantCollector(Houdini houdini) {
+ this.houdini = houdini;
+ this.houdiniAssertConstants = new HashSet<Variable>();
+ this.houdiniAssumeConstants = new HashSet<Variable>();
+
+ this.explainNegative = new HashSet<Variable>();
+ this.explainPositive = new HashSet<Variable>();
+ this.constToControl = new Dictionary<string, Tuple<Variable, Variable>>();
+ }
+ private Houdini houdini;
+ public HashSet<Variable> houdiniAssertConstants;
+ public HashSet<Variable> houdiniAssumeConstants;
+
+ // Explain Houdini stuff
+ public HashSet<Variable> explainPositive;
+ public HashSet<Variable> explainNegative;
+ public Dictionary<string, Tuple<Variable, Variable>> constToControl;
+ Implementation impl;
+
+ public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node) {
+ AddHoudiniConstant(node);
+ return base.VisitAssertRequiresCmd(node);
+ }
+ public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node) {
+ AddHoudiniConstant(node);
+ return base.VisitAssertEnsuresCmd(node);
+ }
+ public override Cmd VisitAssertCmd(AssertCmd node) {
+ AddHoudiniConstant(node);
+ return base.VisitAssertCmd(node);
+ }
+ public override Cmd VisitAssumeCmd(AssumeCmd node) {
+ AddHoudiniConstant(node);
+ return base.VisitAssumeCmd(node);
+ }
+ private void AddHoudiniConstant(AssertCmd assertCmd)
+ {
+ Variable houdiniConstant;
+ if (houdini.MatchCandidate(assertCmd.Expr, out houdiniConstant))
+ houdiniAssertConstants.Add(houdiniConstant);
+
+ if (houdiniConstant != null && CommandLineOptions.Clo.ExplainHoudini && !constToControl.ContainsKey(houdiniConstant.Name))
+ {
+ // For each houdini constant c, create two more constants c_pos and c_neg.
+ // Then change the asserted condition (c ==> \phi) to
+ // (c ==> (c_pos && (\phi || \not c_neg))
+ var control = createNewExplainConstants(houdiniConstant);
+ assertCmd.Expr = houdini.InsertCandidateControl(assertCmd.Expr, control.Item1, control.Item2);
+ explainPositive.Add(control.Item1);
+ explainNegative.Add(control.Item2);
+ constToControl.Add(houdiniConstant.Name, control);
+ }
+ }
+ private void AddHoudiniConstant(AssumeCmd assumeCmd)
+ {
+ Variable houdiniConstant;
+ if (houdini.MatchCandidate(assumeCmd.Expr, out houdiniConstant))
+ houdiniAssumeConstants.Add(houdiniConstant);
+ }
+ private Tuple<Variable, Variable> createNewExplainConstants(Variable v)
+ {
+ Contract.Assert(impl != null);
+ Contract.Assert(CommandLineOptions.Clo.ExplainHoudini);
+ Variable v1 = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}_{2}", v.Name, impl.Name, "pos"), Microsoft.Boogie.BasicType.Bool));
+ Variable v2 = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, string.Format("{0}_{1}_{2}", v.Name, impl.Name, "neg"), Microsoft.Boogie.BasicType.Bool));
+
+ return Tuple.Create(v1, v2);
+ }
+ }
+
+
+
+ public class HoudiniSession {
+
+ public class HoudiniStatistics {
+ public double proverTime = 0;
+ public int numProverQueries = 0;
+ public double unsatCoreProverTime = 0;
+ public int numUnsatCoreProverQueries = 0;
+ public int numUnsatCorePrunings = 0;
+ }
+
+ public string descriptiveName;
+ public HoudiniStatistics stats;
+ private VCExpr conjecture;
+ private ProverInterface.ErrorHandler handler;
+ ConditionGeneration.CounterexampleCollector collector;
+ HashSet<Variable> unsatCoreSet;
+ HashSet<Variable> houdiniConstants;
+ public HashSet<Variable> houdiniAssertConstants;
+ private HashSet<Variable> houdiniAssumeConstants;
+
+ // Extra constants created for ExplainHoudini
+ private HashSet<Variable> explainConstantsPositive;
+ private HashSet<Variable> explainConstantsNegative;
+ private Dictionary<string, Tuple<Variable, Variable>> constantToControl;
+
+ public bool InUnsatCore(Variable constant) {
+ if (unsatCoreSet == null)
+ return true;
+ if (unsatCoreSet.Contains(constant))
+ return true;
+ stats.numUnsatCorePrunings++;
+ return false;
+ }
+
+ public HoudiniSession(Houdini houdini, VCGen vcgen, ProverInterface proverInterface, Program program, Implementation impl, HoudiniStatistics stats, int taskID = -1) {
+ this.descriptiveName = impl.Name;
+ this.stats = stats;
+ collector = new ConditionGeneration.CounterexampleCollector();
+ collector.OnProgress("HdnVCGen", 0, 0, 0.0);
+
+ vcgen.ConvertCFG2DAG(impl, taskID: taskID);
+ ModelViewInfo mvInfo;
+ var gotoCmdOrigins = vcgen.PassifyImpl(impl, out mvInfo);
+
+ ExistentialConstantCollector ecollector;
+ ExistentialConstantCollector.CollectHoudiniConstants(houdini, impl, out ecollector);
+ this.houdiniAssertConstants = ecollector.houdiniAssertConstants;
+ this.houdiniAssumeConstants = ecollector.houdiniAssumeConstants;
+ this.explainConstantsNegative = ecollector.explainNegative;
+ this.explainConstantsPositive = ecollector.explainPositive;
+ this.constantToControl = ecollector.constToControl;
+
+ houdiniConstants = new HashSet<Variable>();
+ houdiniConstants.UnionWith(houdiniAssertConstants);
+ houdiniConstants.UnionWith(houdiniAssumeConstants);
+
+ var exprGen = proverInterface.Context.ExprGen;
+ VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : exprGen.Integer(BigNum.ZERO);
+
+ Dictionary<int, Absy> label2absy;
+ conjecture = vcgen.GenerateVC(impl, controlFlowVariableExpr, out label2absy, proverInterface.Context);
+ if (!CommandLineOptions.Clo.UseLabels) {
+ VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(exprGen.Integer(BigNum.ZERO), exprGen.Integer(BigNum.ZERO));
+ VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
+ conjecture = exprGen.Implies(eqExpr, conjecture);
+ }
+
+ Macro macro = new Macro(Token.NoToken, descriptiveName, new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Type.Bool), false));
+ proverInterface.DefineMacro(macro, conjecture);
+ conjecture = exprGen.Function(macro);
+
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Local) {
+ handler = new VCGen.ErrorReporterLocal(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, proverInterface.Context, program);
+ }
+ else {
+ handler = new VCGen.ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, vcgen.incarnationOriginMap, collector, mvInfo, proverInterface.Context, program);
+ }
+
+ }
+
+ private VCExpr BuildAxiom(ProverInterface proverInterface, Dictionary<Variable, bool> currentAssignment) {
+ ProverContext proverContext = proverInterface.Context;
+ Boogie2VCExprTranslator exprTranslator = proverContext.BoogieExprTranslator;
+ VCExpressionGenerator exprGen = proverInterface.VCExprGen;
+
+ VCExpr expr = VCExpressionGenerator.True;
+
+ foreach (KeyValuePair<Variable, bool> kv in currentAssignment) {
+ Variable constant = kv.Key;
+ VCExprVar exprVar = exprTranslator.LookupVariable(constant);
+ if (kv.Value) {
+ expr = exprGen.And(expr, exprVar);
+ }
+ else {
+ expr = exprGen.And(expr, exprGen.Not(exprVar));
+ }
+ }
+
+ if (CommandLineOptions.Clo.ExplainHoudini)
+ {
+ // default values for ExplainHoudini control variables
+ foreach (var constant in explainConstantsNegative.Concat(explainConstantsPositive))
+ {
+ expr = exprGen.And(expr, exprTranslator.LookupVariable(constant));
+ }
+ }
+
+ /*
+ foreach (Variable constant in this.houdiniConstants) {
+ VCExprVar exprVar = exprTranslator.LookupVariable(constant);
+ if (currentAssignment[constant]) {
+ expr = exprGen.And(expr, exprVar);
+ }
+ else {
+ expr = exprGen.And(expr, exprGen.Not(exprVar));
+ }
+ }
+ */
+
+ if(CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Houdini assignment axiom: " + expr);
+ }
+
+ return expr;
+ }
+
+ public ProverInterface.Outcome Verify(ProverInterface proverInterface, Dictionary<Variable, bool> assignment, out List<Counterexample> errors, int taskID = -1) {
+ collector.examples.Clear();
+
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Verifying " + descriptiveName);
+ }
+ DateTime now = DateTime.UtcNow;
+
+ VCExpr vc = proverInterface.VCExprGen.Implies(BuildAxiom(proverInterface, assignment), conjecture);
+ proverInterface.BeginCheck(descriptiveName, vc, handler);
+ ProverInterface.Outcome proverOutcome = proverInterface.CheckOutcome(handler, taskID: taskID);
+
+ double queryTime = (DateTime.UtcNow - now).TotalSeconds;
+ stats.proverTime += queryTime;
+ stats.numProverQueries++;
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Outcome = " + proverOutcome);
+ Console.WriteLine("Time taken = " + queryTime);
+ }
+
+ errors = collector.examples;
+ return proverOutcome;
+ }
+
+ // MAXSAT
+ public void Explain(ProverInterface proverInterface,
+ Dictionary<Variable, bool> assignment, Variable refutedConstant)
+ {
+ Contract.Assert(CommandLineOptions.Clo.ExplainHoudini);
+
+ collector.examples.Clear();
+
+ // debugging
+ houdiniAssertConstants.Iter(v => System.Diagnostics.Debug.Assert(assignment.ContainsKey(v)));
+ houdiniAssumeConstants.Iter(v => System.Diagnostics.Debug.Assert(assignment.ContainsKey(v)));
+ Contract.Assert(assignment.ContainsKey(refutedConstant));
+ Contract.Assert(houdiniAssertConstants.Contains(refutedConstant));
+
+ var hardAssumptions = new List<VCExpr>();
+ var softAssumptions = new List<VCExpr>();
+
+ Boogie2VCExprTranslator exprTranslator = proverInterface.Context.BoogieExprTranslator;
+ VCExpressionGenerator exprGen = proverInterface.VCExprGen;
+ var controlExpr = VCExpressionGenerator.True;
+
+ foreach (var tup in assignment)
+ {
+ Variable constant = tup.Key;
+ VCExprVar exprVar = exprTranslator.LookupVariable(constant);
+ var val = tup.Value;
+
+ if (houdiniAssumeConstants.Contains(constant))
+ {
+ if (tup.Value)
+ hardAssumptions.Add(exprVar);
+ else
+ // Previously removed assumed candidates are the soft constraints
+ softAssumptions.Add(exprVar);
+ }
+ else if (houdiniAssertConstants.Contains(constant))
+ {
+ if (constant == refutedConstant)
+ hardAssumptions.Add(exprVar);
+ else
+ hardAssumptions.Add(exprGen.Not(exprVar));
+ }
+ else
+ {
+ if (tup.Value)
+ hardAssumptions.Add(exprVar);
+ else
+ hardAssumptions.Add(exprGen.Not(exprVar));
+ }
+
+ // For an asserted condition (c ==> \phi),
+ // ExplainHoudini's extra control constants (c_pos, c_neg) are used as follows:
+ // (true, true): "assert \phi"
+ // (false, _): "assert false"
+ // (true, false): "assert true"
+ if (constant != refutedConstant && constantToControl.ContainsKey(constant.Name))
+ {
+ var posControl = constantToControl[constant.Name].Item1;
+ var negControl = constantToControl[constant.Name].Item2;
+
+ // Handle self-recursion
+ if (houdiniAssertConstants.Contains(constant) && houdiniAssumeConstants.Contains(constant))
+ {
+ // disable this assert
+ controlExpr = exprGen.And(controlExpr, exprGen.And(exprTranslator.LookupVariable(posControl), exprGen.Not(exprTranslator.LookupVariable(negControl))));
+ }
+ else
+ {
+ // default values for control variables
+ controlExpr = exprGen.And(controlExpr, exprGen.And(exprTranslator.LookupVariable(posControl), exprTranslator.LookupVariable(negControl)));
+ }
+ }
+ }
+
+ hardAssumptions.Add(exprGen.Not(conjecture));
+
+ // default values for control variables
+ Contract.Assert(constantToControl.ContainsKey(refutedConstant.Name));
+ var pc = constantToControl[refutedConstant.Name].Item1;
+ var nc = constantToControl[refutedConstant.Name].Item2;
+
+ var controlExprNoop = exprGen.And(controlExpr,
+ exprGen.And(exprTranslator.LookupVariable(pc), exprTranslator.LookupVariable(nc)));
+
+ var controlExprFalse = exprGen.And(controlExpr,
+ exprGen.And(exprGen.Not(exprTranslator.LookupVariable(pc)), exprGen.Not(exprTranslator.LookupVariable(nc))));
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Verifying (MaxSat) " + descriptiveName);
+ }
+ DateTime now = DateTime.UtcNow;
+
+ var el = CommandLineOptions.Clo.ProverCCLimit;
+ CommandLineOptions.Clo.ProverCCLimit = 1;
+
+ var outcome = ProverInterface.Outcome.Undetermined;
+
+ do
+ {
+ List<int> unsatisfiedSoftAssumptions;
+
+ hardAssumptions.Add(controlExprNoop);
+ outcome = proverInterface.CheckAssumptions(hardAssumptions, softAssumptions, out unsatisfiedSoftAssumptions, handler);
+ hardAssumptions.RemoveAt(hardAssumptions.Count - 1);
+
+ if (outcome == ProverInterface.Outcome.TimeOut || outcome == ProverInterface.Outcome.OutOfMemory || outcome == ProverInterface.Outcome.Undetermined)
+ break;
+
+ var reason = new HashSet<string>();
+ unsatisfiedSoftAssumptions.Iter(i => reason.Add(softAssumptions[i].ToString()));
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.Write("Reason for removal of {0}: ", refutedConstant.Name);
+ reason.Iter(r => Console.Write("{0} ", r));
+ Console.WriteLine();
+ }
+
+ // Get rid of those constants from the "reason" that can even make
+ // "assert false" pass
+
+ hardAssumptions.Add(controlExprFalse);
+ var softAssumptions2 = new List<VCExpr>();
+ for (int i = 0; i < softAssumptions.Count; i++)
+ {
+ if (unsatisfiedSoftAssumptions.Contains(i))
+ {
+ softAssumptions2.Add(softAssumptions[i]);
+ continue;
+ }
+ hardAssumptions.Add(softAssumptions[i]);
+ }
+
+ var unsatisfiedSoftAssumptions2 = new List<int>();
+ outcome = proverInterface.CheckAssumptions(hardAssumptions, softAssumptions2, out unsatisfiedSoftAssumptions2, handler);
+
+ if (outcome == ProverInterface.Outcome.TimeOut || outcome == ProverInterface.Outcome.OutOfMemory || outcome == ProverInterface.Outcome.Undetermined)
+ break;
+
+ unsatisfiedSoftAssumptions2.Iter(i => reason.Remove(softAssumptions2[i].ToString()));
+ var reason1 = new HashSet<string>(); //these are the reasons for inconsistency
+ unsatisfiedSoftAssumptions2.Iter(i => reason1.Add(softAssumptions2[i].ToString()));
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.Write("Revised reason for removal of {0}: ", refutedConstant.Name);
+ reason.Iter(r => Console.Write("{0} ", r));
+ Console.WriteLine();
+ }
+ foreach (var r in reason)
+ {
+ Houdini.explainHoudiniDottyFile.WriteLine("{0} -> {1} [ label = \"{2}\" color=red ];", refutedConstant.Name, r, descriptiveName);
+ }
+ //also add the removed reasons using dotted edges (requires- x != 0, requires- x == 0 ==> assert x != 0)
+ foreach (var r in reason1)
+ {
+ Houdini.explainHoudiniDottyFile.WriteLine("{0} -> {1} [ label = \"{2}\" color=blue style=dotted ];", refutedConstant.Name, r, descriptiveName);
+ }
+ } while (false);
+
+ if (outcome == ProverInterface.Outcome.TimeOut || outcome == ProverInterface.Outcome.OutOfMemory || outcome == ProverInterface.Outcome.Undetermined)
+ {
+ Houdini.explainHoudiniDottyFile.WriteLine("{0} -> {1} [ label = \"{2}\" color=red ];", refutedConstant.Name, "TimeOut", descriptiveName);
+ }
+
+ CommandLineOptions.Clo.ProverCCLimit = el;
+
+ double queryTime = (DateTime.UtcNow - now).TotalSeconds;
+ stats.proverTime += queryTime;
+ stats.numProverQueries++;
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("Time taken = " + queryTime);
+ }
+ }
+
+ public void UpdateUnsatCore(ProverInterface proverInterface, Dictionary<Variable, bool> assignment)
+ {
+ DateTime now = DateTime.UtcNow;
+
+ Boogie2VCExprTranslator exprTranslator = proverInterface.Context.BoogieExprTranslator;
+ proverInterface.Push();
+ proverInterface.Assert(conjecture, false);
+ foreach (var v in assignment.Keys) {
+ if (assignment[v]) continue;
+ proverInterface.Assert(exprTranslator.LookupVariable(v), false);
+ }
+ List<Variable> assumptionVars = new List<Variable>();
+ List<VCExpr> assumptionExprs = new List<VCExpr>();
+ foreach (var v in assignment.Keys) {
+ if (!assignment[v]) continue;
+ assumptionVars.Add(v);
+ assumptionExprs.Add(exprTranslator.LookupVariable(v));
+ }
+ List<int> unsatCore;
+ ProverInterface.Outcome tmp = proverInterface.CheckAssumptions(assumptionExprs, out unsatCore, handler);
+ System.Diagnostics.Debug.Assert(tmp == ProverInterface.Outcome.Valid);
+ unsatCoreSet = new HashSet<Variable>();
+ foreach (int i in unsatCore)
+ unsatCoreSet.Add(assumptionVars[i]);
+ proverInterface.Pop();
+
+ double unsatCoreQueryTime = (DateTime.UtcNow - now).TotalSeconds;
+ stats.unsatCoreProverTime += unsatCoreQueryTime;
+ stats.numUnsatCoreProverQueries++;
+ }
+
+ }
} \ No newline at end of file
diff --git a/Source/Houdini/ConcurrentHoudini.cs b/Source/Houdini/ConcurrentHoudini.cs
index bfc7cbc1..e13fa802 100644
--- a/Source/Houdini/ConcurrentHoudini.cs
+++ b/Source/Houdini/ConcurrentHoudini.cs
@@ -1,104 +1,104 @@
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Collections.Concurrent;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Text.RegularExpressions;
-using System.Linq;
-using VC;
-
-namespace Microsoft.Boogie.Houdini
-{
- public class ConcurrentHoudini : Houdini
- {
-
- protected int taskID;
-
- private static ConcurrentDictionary<string, RefutedAnnotation> refutedSharedAnnotations;
-
- public static ConcurrentDictionary<string, RefutedAnnotation> RefutedSharedAnnotations { get { return refutedSharedAnnotations; } }
-
- public ConcurrentHoudini(int taskId, Program program, HoudiniSession.HoudiniStatistics stats, string cexTraceFile = "houdiniCexTrace.txt") {
- Contract.Assert(taskId >= 0);
- this.program = program;
- this.cexTraceFile = cexTraceFile;
- this.taskID = taskId;
- Initialize(program, stats);
- }
-
- static ConcurrentHoudini()
- {
- refutedSharedAnnotations = new ConcurrentDictionary<string, RefutedAnnotation>();
- }
-
- protected override bool ExchangeRefutedAnnotations()
- {
- int count = 0;
-
- if (CommandLineOptions.Clo.DebugConcurrentHoudini)
- Console.WriteLine("# number of shared refuted annotations: " + refutedSharedAnnotations.Count);
-
- foreach (string key in refutedSharedAnnotations.Keys) {
- KeyValuePair<Variable, bool> kv = currentHoudiniState.Assignment.FirstOrDefault(entry => entry.Key.Name.Equals(key) && entry.Value);
-
- if (kv.Key != null) {
- RefutedAnnotation ra = null;
- Implementation refutationSite = null;
-
- foreach (var r in program.Implementations) {
- if (r.Name.Equals(refutedSharedAnnotations[key].RefutationSite.Name)) {
- refutationSite = r;
- break;
- }
- }
- Debug.Assert(refutationSite != null);
-
- if (refutedSharedAnnotations[key].Kind == RefutedAnnotationKind.REQUIRES) {
- Procedure proc = null;
- foreach (var p in program.Procedures) {
- if (p.Name.Equals(refutedSharedAnnotations[key].CalleeProc.Name)) {
- proc = p;
- break;
- }
- }
- Debug.Assert(proc != null);
- ra = RefutedAnnotation.BuildRefutedRequires(kv.Key, proc, refutationSite);
- } else if (refutedSharedAnnotations[key].Kind == RefutedAnnotationKind.ENSURES)
- ra = RefutedAnnotation.BuildRefutedEnsures(kv.Key, refutationSite);
- else if (refutedSharedAnnotations[key].Kind == RefutedAnnotationKind.ASSERT)
- ra = RefutedAnnotation.BuildRefutedAssert(kv.Key, refutationSite);
- Debug.Assert(ra != null);
-
- if (CommandLineOptions.Clo.DebugConcurrentHoudini)
- Console.WriteLine("(+) " + ra.Constant + "," + ra.Kind + "," + ra.CalleeProc + "," + ra.RefutationSite);
-
- AddRelatedToWorkList(ra);
- UpdateAssignment(ra);
- count++;
- }
- }
-
- return count > 0 ? true : false;
- }
-
- protected override void ShareRefutedAnnotation(RefutedAnnotation refutedAnnotation) {
- refutedSharedAnnotations.TryAdd(refutedAnnotation.Constant.Name, refutedAnnotation);
- }
-
- protected override void ApplyRefutedSharedAnnotations() {
- if (refutedSharedAnnotations.Count > 0) {
- foreach (var v in currentHoudiniState.Assignment.Keys.ToList()) {
- if (refutedSharedAnnotations.ContainsKey(v.Name)) {
- currentHoudiniState.Assignment[v] = false;
- }
- }
- }
- }
-
- protected override int GetTaskID() {
- return taskID;
- }
-
- }
-}
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Collections.Concurrent;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using System.Text.RegularExpressions;
+using System.Linq;
+using VC;
+
+namespace Microsoft.Boogie.Houdini
+{
+ public class ConcurrentHoudini : Houdini
+ {
+
+ protected int taskID;
+
+ private static ConcurrentDictionary<string, RefutedAnnotation> refutedSharedAnnotations;
+
+ public static ConcurrentDictionary<string, RefutedAnnotation> RefutedSharedAnnotations { get { return refutedSharedAnnotations; } }
+
+ public ConcurrentHoudini(int taskId, Program program, HoudiniSession.HoudiniStatistics stats, string cexTraceFile = "houdiniCexTrace.txt") {
+ Contract.Assert(taskId >= 0);
+ this.program = program;
+ this.cexTraceFile = cexTraceFile;
+ this.taskID = taskId;
+ Initialize(program, stats);
+ }
+
+ static ConcurrentHoudini()
+ {
+ refutedSharedAnnotations = new ConcurrentDictionary<string, RefutedAnnotation>();
+ }
+
+ protected override bool ExchangeRefutedAnnotations()
+ {
+ int count = 0;
+
+ if (CommandLineOptions.Clo.DebugConcurrentHoudini)
+ Console.WriteLine("# number of shared refuted annotations: " + refutedSharedAnnotations.Count);
+
+ foreach (string key in refutedSharedAnnotations.Keys) {
+ KeyValuePair<Variable, bool> kv = currentHoudiniState.Assignment.FirstOrDefault(entry => entry.Key.Name.Equals(key) && entry.Value);
+
+ if (kv.Key != null) {
+ RefutedAnnotation ra = null;
+ Implementation refutationSite = null;
+
+ foreach (var r in program.Implementations) {
+ if (r.Name.Equals(refutedSharedAnnotations[key].RefutationSite.Name)) {
+ refutationSite = r;
+ break;
+ }
+ }
+ Debug.Assert(refutationSite != null);
+
+ if (refutedSharedAnnotations[key].Kind == RefutedAnnotationKind.REQUIRES) {
+ Procedure proc = null;
+ foreach (var p in program.Procedures) {
+ if (p.Name.Equals(refutedSharedAnnotations[key].CalleeProc.Name)) {
+ proc = p;
+ break;
+ }
+ }
+ Debug.Assert(proc != null);
+ ra = RefutedAnnotation.BuildRefutedRequires(kv.Key, proc, refutationSite);
+ } else if (refutedSharedAnnotations[key].Kind == RefutedAnnotationKind.ENSURES)
+ ra = RefutedAnnotation.BuildRefutedEnsures(kv.Key, refutationSite);
+ else if (refutedSharedAnnotations[key].Kind == RefutedAnnotationKind.ASSERT)
+ ra = RefutedAnnotation.BuildRefutedAssert(kv.Key, refutationSite);
+ Debug.Assert(ra != null);
+
+ if (CommandLineOptions.Clo.DebugConcurrentHoudini)
+ Console.WriteLine("(+) " + ra.Constant + "," + ra.Kind + "," + ra.CalleeProc + "," + ra.RefutationSite);
+
+ AddRelatedToWorkList(ra);
+ UpdateAssignment(ra);
+ count++;
+ }
+ }
+
+ return count > 0 ? true : false;
+ }
+
+ protected override void ShareRefutedAnnotation(RefutedAnnotation refutedAnnotation) {
+ refutedSharedAnnotations.TryAdd(refutedAnnotation.Constant.Name, refutedAnnotation);
+ }
+
+ protected override void ApplyRefutedSharedAnnotations() {
+ if (refutedSharedAnnotations.Count > 0) {
+ foreach (var v in currentHoudiniState.Assignment.Keys.ToList()) {
+ if (refutedSharedAnnotations.ContainsKey(v.Name)) {
+ currentHoudiniState.Assignment[v] = false;
+ }
+ }
+ }
+ }
+
+ protected override int GetTaskID() {
+ return taskID;
+ }
+
+ }
+}
diff --git a/Source/Houdini/Houdini.cs b/Source/Houdini/Houdini.cs
index 986d0fff..4c4ab5aa 100644
--- a/Source/Houdini/Houdini.cs
+++ b/Source/Houdini/Houdini.cs
@@ -1,1328 +1,1330 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Diagnostics.Contracts;
-using System.Collections.Generic;
-using Microsoft.Boogie;
-using Microsoft.Boogie.VCExprAST;
-using VC;
-using System.Collections;
-using System.IO;
-using Microsoft.Boogie.GraphUtil;
-using System.Linq;
-using System.Diagnostics;
-
-namespace Microsoft.Boogie.Houdini {
-
- internal class ReadOnlyDictionary<K, V> {
- private Dictionary<K, V> dictionary;
- public ReadOnlyDictionary(Dictionary<K, V> dictionary) {
- this.dictionary = dictionary;
- }
-
- public Dictionary<K, V>.KeyCollection Keys {
- get { return this.dictionary.Keys; }
- }
-
- public bool TryGetValue(K k, out V v) {
- return this.dictionary.TryGetValue(k, out v);
- }
-
- public bool ContainsKey(K k) {
- return this.dictionary.ContainsKey(k);
- }
- }
-
- public abstract class HoudiniObserver {
- public virtual void UpdateStart(Program program, int numConstants) { }
- public virtual void UpdateIteration() { }
- public virtual void UpdateImplementation(Implementation implementation) { }
- public virtual void UpdateAssignment(Dictionary<Variable, bool> assignment) { }
- public virtual void UpdateOutcome(ProverInterface.Outcome outcome) { }
- public virtual void UpdateEnqueue(Implementation implementation) { }
- public virtual void UpdateDequeue() { }
- public virtual void UpdateConstant(string constantName) { }
- public virtual void UpdateEnd(bool isNormalEnd) { }
- public virtual void UpdateFlushStart() { }
- public virtual void UpdateFlushFinish() { }
- public virtual void SeeException(string msg) { }
- }
-
- public class IterationTimer<K> {
- private Dictionary<K, List<double>> times;
-
- public IterationTimer() {
- times = new Dictionary<K, List<double>>();
- }
-
- public void AddTime(K key, double timeMS) {
- List<double> oldList;
- times.TryGetValue(key, out oldList);
- if (oldList == null) {
- oldList = new List<double>();
- }
- else {
- times.Remove(key);
- }
- oldList.Add(timeMS);
- times.Add(key, oldList);
- }
-
- public void PrintTimes(TextWriter wr) {
- wr.WriteLine("Total procedures: {0}", times.Count);
- double total = 0;
- int totalIters = 0;
- foreach (KeyValuePair<K, List<double>> kv in times) {
- int curIter = 0;
- wr.WriteLine("Times for {0}:", kv.Key);
- foreach (double v in kv.Value) {
- wr.WriteLine(" ({0})\t{1}ms", curIter, v);
- total += v;
- curIter++;
- }
- totalIters += curIter;
- }
- total = total / 1000.0;
- wr.WriteLine("Total time: {0} (s)", total);
- wr.WriteLine("Avg: {0} (s/iter)", total / totalIters);
- }
- }
-
- public class HoudiniTimer : HoudiniObserver {
- private DateTime startT;
- private Implementation curImp;
- private IterationTimer<string> times;
- private TextWriter wr;
-
- public HoudiniTimer(TextWriter wr) {
- this.wr = wr;
- times = new IterationTimer<string>();
- }
- public override void UpdateIteration() {
- startT = DateTime.UtcNow;
- }
- public override void UpdateImplementation(Implementation implementation) {
- curImp = implementation;
- }
- public override void UpdateOutcome(ProverInterface.Outcome o) {
- Contract.Assert(curImp != null);
- DateTime endT = DateTime.UtcNow;
- times.AddTime(curImp.Name, (endT - startT).TotalMilliseconds); // assuming names are unique
- }
- public void PrintTimes() {
- wr.WriteLine("-----------------------------------------");
- wr.WriteLine("Times for each iteration for each procedure");
- wr.WriteLine("-----------------------------------------");
- times.PrintTimes(wr);
- }
- }
-
- public class HoudiniTextReporter : HoudiniObserver {
- private TextWriter wr;
- private int currentIteration = -1;
-
- public HoudiniTextReporter(TextWriter wr) {
- this.wr = wr;
- }
- public override void UpdateStart(Program program, int numConstants) {
- wr.WriteLine("Houdini started:" + program.ToString() + " #constants: " + numConstants.ToString());
- currentIteration = -1;
- wr.Flush();
- }
- public override void UpdateIteration() {
- currentIteration++;
- wr.WriteLine("---------------------------------------");
- wr.WriteLine("Houdini iteration #" + currentIteration);
- wr.Flush();
- }
- public override void UpdateImplementation(Implementation implementation) {
- wr.WriteLine("implementation under analysis :" + implementation.Name);
- wr.Flush();
- }
- public override void UpdateAssignment(Dictionary<Variable, bool> assignment) {
- bool firstTime = true;
- wr.Write("assignment under analysis : axiom (");
- foreach (KeyValuePair<Variable, bool> kv in assignment) {
- if (!firstTime) wr.Write(" && "); else firstTime = false;
- string valString; // ugliness to get it lower cased
- if (kv.Value) valString = "true"; else valString = "false";
- wr.Write(kv.Key + " == " + valString);
- }
- wr.WriteLine(");");
- wr.Flush();
- }
- public override void UpdateOutcome(ProverInterface.Outcome outcome) {
- wr.WriteLine("analysis outcome :" + outcome);
- wr.Flush();
- }
- public override void UpdateEnqueue(Implementation implementation) {
- wr.WriteLine("worklist enqueue :" + implementation.Name);
- wr.Flush();
- }
- public override void UpdateDequeue() {
- wr.WriteLine("worklist dequeue");
- wr.Flush();
- }
- public override void UpdateConstant(string constantName) {
- wr.WriteLine("constant disabled : " + constantName);
- wr.Flush();
- }
- public override void UpdateEnd(bool isNormalEnd) {
- wr.WriteLine("Houdini ended: " + (isNormalEnd ? "Normal" : "Abnormal"));
- wr.WriteLine("Number of iterations: " + (this.currentIteration + 1));
- wr.Flush();
- }
- public override void UpdateFlushStart() {
- wr.WriteLine("***************************************");
- wr.WriteLine("Flushing remaining implementations");
- wr.Flush();
- }
- public override void UpdateFlushFinish() {
- wr.WriteLine("***************************************");
- wr.WriteLine("Flushing finished");
- wr.Flush();
- }
- public override void SeeException(string msg) {
- wr.WriteLine("Caught exception: " + msg);
- wr.Flush();
- }
-
- }
-
- public abstract class ObservableHoudini {
- private List<HoudiniObserver> observers = new List<HoudiniObserver>();
-
- public void AddObserver(HoudiniObserver observer) {
- if (!observers.Contains(observer))
- observers.Add(observer);
- }
- private delegate void NotifyDelegate(HoudiniObserver observer);
-
- private void Notify(NotifyDelegate notifyDelegate) {
- foreach (HoudiniObserver observer in observers) {
- notifyDelegate(observer);
- }
- }
- protected void NotifyStart(Program program, int numConstants) {
- NotifyDelegate notifyDelegate = (NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateStart(program, numConstants); };
- Notify(notifyDelegate);
- }
- protected void NotifyIteration() {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateIteration(); });
- }
- protected void NotifyImplementation(Implementation implementation) {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateImplementation(implementation); });
- }
- protected void NotifyAssignment(Dictionary<Variable, bool> assignment) {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateAssignment(assignment); });
- }
- protected void NotifyOutcome(ProverInterface.Outcome outcome) {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateOutcome(outcome); });
- }
- protected void NotifyEnqueue(Implementation implementation) {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateEnqueue(implementation); });
- }
- protected void NotifyDequeue() {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateDequeue(); });
- }
- protected void NotifyConstant(string constantName) {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateConstant(constantName); });
- }
- protected void NotifyEnd(bool isNormalEnd) {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateEnd(isNormalEnd); });
- }
- protected void NotifyFlushStart() {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateFlushStart(); });
- }
- protected void NotifyFlushFinish() {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateFlushFinish(); });
- }
-
- protected void NotifyException(string msg) {
- Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.SeeException(msg); });
- }
- }
-
- public class InlineEnsuresVisitor : ReadOnlyVisitor {
- public override Ensures VisitEnsures(Ensures ensures)
- {
- if (!ensures.Free)
- {
- ensures.Attributes = new QKeyValue(Token.NoToken, "InlineAssume", new List<object>(), ensures.Attributes);
- }
- return base.VisitEnsures(ensures);
- }
- }
-
- public class Houdini : ObservableHoudini {
- protected Program program;
- protected HashSet<Variable> houdiniConstants;
- protected VCGen vcgen;
- protected ProverInterface proverInterface;
- protected Graph<Implementation> callGraph;
- protected HashSet<Implementation> vcgenFailures;
- protected HoudiniState currentHoudiniState;
- protected CrossDependencies crossDependencies;
- internal ReadOnlyDictionary<Implementation, HoudiniSession> houdiniSessions;
-
- protected string cexTraceFile;
-
- public HoudiniState CurrentHoudiniState { get { return currentHoudiniState; } }
-
- public static TextWriter explainHoudiniDottyFile;
-
- protected Houdini() { }
-
- public Houdini(Program program, HoudiniSession.HoudiniStatistics stats, string cexTraceFile = "houdiniCexTrace.txt") {
- this.program = program;
- this.cexTraceFile = cexTraceFile;
- Initialize(program, stats);
- }
-
- protected void Initialize(Program program, HoudiniSession.HoudiniStatistics stats)
- {
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Collecting existential constants...");
- this.houdiniConstants = CollectExistentialConstants();
-
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Building call graph...");
- this.callGraph = Program.BuildCallGraph(program);
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Number of implementations = {0}", callGraph.Nodes.Count);
-
- if (CommandLineOptions.Clo.HoudiniUseCrossDependencies)
- {
- if (CommandLineOptions.Clo.Trace) Console.WriteLine("Computing procedure cross dependencies ...");
- this.crossDependencies = new CrossDependencies(this.houdiniConstants);
- this.crossDependencies.Visit(program);
- }
-
- Inline();
- /*
- {
- int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
- CommandLineOptions.Clo.PrintUnstructured = 1;
- using (TokenTextWriter stream = new TokenTextWriter("houdini_inline.bpl"))
- {
- program.Emit(stream);
- }
- CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
- }
- */
-
- this.vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List<Checker>());
- this.proverInterface = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, CommandLineOptions.Clo.ProverKillTime, taskID: GetTaskID());
-
- vcgenFailures = new HashSet<Implementation>();
- Dictionary<Implementation, HoudiniSession> houdiniSessions = new Dictionary<Implementation, HoudiniSession>();
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Beginning VC generation for Houdini...");
- foreach (Implementation impl in callGraph.Nodes)
- {
- try
- {
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("Generating VC for {0}", impl.Name);
- HoudiniSession session = new HoudiniSession(this, vcgen, proverInterface, program, impl, stats, taskID: GetTaskID());
- houdiniSessions.Add(impl, session);
- }
- catch (VCGenException)
- {
- if (CommandLineOptions.Clo.Trace)
- Console.WriteLine("VC generation failed");
- vcgenFailures.Add(impl);
- }
- }
- this.houdiniSessions = new ReadOnlyDictionary<Implementation, HoudiniSession>(houdiniSessions);
-
- if (CommandLineOptions.Clo.ExplainHoudini)
- {
- // Print results of ExplainHoudini to a dotty file
- explainHoudiniDottyFile = new StreamWriter("explainHoudini.dot");
- explainHoudiniDottyFile.WriteLine("digraph explainHoudini {");
- foreach (var constant in houdiniConstants)
- explainHoudiniDottyFile.WriteLine("{0} [ label = \"{0}\" color=black ];", constant.Name);
- explainHoudiniDottyFile.WriteLine("TimeOut [label = \"TimeOut\" color=red ];");
- }
- }
-
- protected void Inline() {
- if (CommandLineOptions.Clo.InlineDepth <= 0)
- return;
-
- foreach (Implementation impl in callGraph.Nodes) {
- InlineEnsuresVisitor inlineEnsuresVisitor = new InlineEnsuresVisitor();
- inlineEnsuresVisitor.Visit(impl);
- }
-
- foreach (Implementation impl in callGraph.Nodes) {
- impl.OriginalBlocks = impl.Blocks;
- impl.OriginalLocVars = impl.LocVars;
- }
- foreach (Implementation impl in callGraph.Nodes) {
- CommandLineOptions.Inlining savedOption = CommandLineOptions.Clo.ProcedureInlining;
- CommandLineOptions.Clo.ProcedureInlining = CommandLineOptions.Inlining.Spec;
- Inliner.ProcessImplementationForHoudini(program, impl);
- CommandLineOptions.Clo.ProcedureInlining = savedOption;
- }
- foreach (Implementation impl in callGraph.Nodes) {
- impl.OriginalBlocks = null;
- impl.OriginalLocVars = null;
- }
-
- Graph<Implementation> oldCallGraph = callGraph;
- callGraph = new Graph<Implementation>();
- foreach (Implementation impl in oldCallGraph.Nodes) {
- callGraph.AddSource(impl);
- }
- foreach (Tuple<Implementation, Implementation> edge in oldCallGraph.Edges) {
- callGraph.AddEdge(edge.Item1, edge.Item2);
- }
- int count = CommandLineOptions.Clo.InlineDepth;
- while (count > 0) {
- foreach (Implementation impl in oldCallGraph.Nodes) {
- List<Implementation> newNodes = new List<Implementation>();
- foreach (Implementation succ in callGraph.Successors(impl)) {
- newNodes.AddRange(oldCallGraph.Successors(succ));
- }
- foreach (Implementation newNode in newNodes) {
- callGraph.AddEdge(impl, newNode);
- }
- }
- count--;
- }
- }
-
- protected HashSet<Variable> CollectExistentialConstants() {
- HashSet<Variable> existentialConstants = new HashSet<Variable>();
- foreach (var constant in program.Constants) {
- bool result = false;
- if (constant.CheckBooleanAttribute("existential", ref result)) {
- if (result == true)
- existentialConstants.Add(constant);
- }
- }
- return existentialConstants;
- }
-
- // Compute dependencies between candidates
- public class CrossDependencies : ReadOnlyVisitor
- {
- public CrossDependencies(HashSet<Variable> constants)
- {
- this.constants = constants;
- }
-
- public override Program VisitProgram(Program node)
- {
- assumedInImpl = new Dictionary<string, HashSet<Implementation>>();
- return base.VisitProgram(node);
- }
-
- public override Implementation VisitImplementation(Implementation node)
- {
- curImpl = node;
- return base.VisitImplementation(node);
- }
-
- public override Cmd VisitAssumeCmd(AssumeCmd node)
- {
- return base.VisitAssumeCmd(node);
- }
-
- public override Variable VisitVariable(Variable node)
- {
- if (node is Constant)
- {
- var constant = node as Constant;
- if (constants.Contains(constant))
- {
- if (!assumedInImpl.ContainsKey(constant.Name))
- assumedInImpl[constant.Name] = new HashSet<Implementation>();
- assumedInImpl[constant.Name].Add(curImpl);
- }
- }
- return base.VisitVariable(node);
- }
-
- HashSet<Variable> constants;
- Implementation curImpl;
-
- // contant -> set of implementations that have an assume command with that constant
- public Dictionary<string, HashSet<Implementation>> assumedInImpl { get; private set; }
- }
-
- protected WorkQueue BuildWorkList(Program program) {
- // adding implementations to the workqueue from the bottom of the call graph upwards
- WorkQueue queue = new WorkQueue();
- StronglyConnectedComponents<Implementation> sccs =
- new StronglyConnectedComponents<Implementation>(callGraph.Nodes,
- new Adjacency<Implementation>(callGraph.Predecessors),
- new Adjacency<Implementation>(callGraph.Successors));
- sccs.Compute();
- foreach (SCC<Implementation> scc in sccs) {
- foreach (Implementation impl in scc) {
- if (vcgenFailures.Contains(impl)) continue;
- queue.Enqueue(impl);
- }
- }
- if (CommandLineOptions.Clo.ReverseHoudiniWorklist)
- queue = queue.Reverse();
- return queue;
- /*
- Queue<Implementation> queue = new Queue<Implementation>();
- foreach (Declaration decl in program.TopLevelDeclarations) {
- Implementation impl = decl as Implementation;
- if (impl == null || impl.SkipVerification) continue;
- queue.Enqueue(impl);
- }
- return queue;
- */
- }
-
- public static bool MatchCandidate(Expr boogieExpr, IEnumerable<string> candidates, out string candidateConstant) {
- candidateConstant = null;
- NAryExpr e = boogieExpr as NAryExpr;
- if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp) {
- Expr antecedent = e.Args[0];
- Expr consequent = e.Args[1];
-
- IdentifierExpr id = antecedent as IdentifierExpr;
- if (id != null && id.Decl is Constant && candidates.Contains(id.Decl.Name)) {
- candidateConstant = id.Decl.Name;
- return true;
- }
-
- if (MatchCandidate(consequent, candidates, out candidateConstant))
- return true;
- }
- return false;
- }
-
- public static bool GetCandidateWithoutConstant(Expr boogieExpr, IEnumerable<string> candidates, out string candidateConstant, out Expr exprWithoutConstant) {
- candidateConstant = null;
- exprWithoutConstant = null;
- NAryExpr e = boogieExpr as NAryExpr;
- if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp) {
- Expr antecedent = e.Args[0];
- Expr consequent = e.Args[1];
-
- IdentifierExpr id = antecedent as IdentifierExpr;
- if (id != null && id.Decl is Constant && candidates.Contains(id.Decl.Name)) {
- candidateConstant = id.Decl.Name;
- exprWithoutConstant = consequent;
- return true;
- }
-
- if (GetCandidateWithoutConstant(consequent, candidates, out candidateConstant, out exprWithoutConstant))
- exprWithoutConstant = Expr.Imp(antecedent, exprWithoutConstant);
- return true;
- }
- return false;
- }
-
- private static Expr AddConditionToCandidateRec(Expr boogieExpr, Expr condition, string candidateConstant, List<Expr> implicationStack)
- {
- NAryExpr e = boogieExpr as NAryExpr;
- if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp)
- {
- Expr antecedent = e.Args[0];
- Expr consequent = e.Args[1];
-
- IdentifierExpr id = antecedent as IdentifierExpr;
- if (id != null && id.Decl is Constant && id.Decl.Name.Equals(candidateConstant))
- {
- Expr result = Expr.Imp(antecedent, Expr.Imp(condition, consequent));
- implicationStack.Reverse();
- foreach (var expr in implicationStack)
- {
- result = Expr.Imp(expr, result);
- }
- return result;
- }
-
- implicationStack.Add(antecedent);
- return AddConditionToCandidateRec(consequent, condition, candidateConstant,
- implicationStack);
- }
- return boogieExpr;
- }
-
- public static Expr AddConditionToCandidate(Expr boogieExpr, Expr condition, string candidateConstant)
- {
- return AddConditionToCandidateRec(boogieExpr, condition, candidateConstant, new List<Expr>());
- }
-
- public bool MatchCandidate(Expr boogieExpr, out Variable candidateConstant) {
- candidateConstant = null;
- string candidateString;
- if(MatchCandidate(boogieExpr, houdiniConstants.Select(item => item.Name), out candidateString)) {
- candidateConstant = houdiniConstants.Where(item => item.Name.Equals(candidateString)).ToList()[0];
- return true;
- }
- return false;
- }
-
- public bool MatchCandidate(Expr boogieExpr, out string candidateConstant) {
- return MatchCandidate(boogieExpr, houdiniConstants.Select(item => item.Name), out candidateConstant);
- }
-
- // For Explain houdini: it decorates the condition \phi as (vpos && (\phi || \not vneg))
- // Precondition: MatchCandidate returns true
- public Expr InsertCandidateControl(Expr boogieExpr, Variable vpos, Variable vneg)
- {
- Contract.Assert(CommandLineOptions.Clo.ExplainHoudini);
-
- NAryExpr e = boogieExpr as NAryExpr;
- if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp)
- {
- Expr antecedent = e.Args[0];
- Expr consequent = e.Args[1];
-
- IdentifierExpr id = antecedent as IdentifierExpr;
- if (id != null && id.Decl is Constant && houdiniConstants.Contains((Constant)id.Decl))
- {
- return Expr.Imp(antecedent, Expr.And(Expr.Ident(vpos), Expr.Or(consequent, Expr.Not(Expr.Ident(vneg)))));
- }
-
- return Expr.Imp(antecedent, InsertCandidateControl(consequent, vpos, vneg));
- }
- Contract.Assert(false);
- return null;
- }
-
- protected Dictionary<Variable, bool> BuildAssignment(HashSet<Variable> constants) {
- Dictionary<Variable, bool> initial = new Dictionary<Variable, bool>();
- foreach (var constant in constants)
- initial.Add(constant, true);
- return initial;
- }
-
- private bool IsOutcomeNotHoudini(ProverInterface.Outcome outcome, List<Counterexample> errors) {
- switch (outcome) {
- case ProverInterface.Outcome.Valid:
- return false;
- case ProverInterface.Outcome.Invalid:
- Contract.Assume(errors != null);
- foreach (Counterexample error in errors) {
- if (ExtractRefutedAnnotation(error) == null)
- return true;
- }
- return false;
- default:
- return true;
- }
- }
-
- // Record most current non-candidate errors found
- // Return true if there was at least one non-candidate error
- protected bool UpdateHoudiniOutcome(HoudiniOutcome houdiniOutcome,
- Implementation implementation,
- ProverInterface.Outcome outcome,
- List<Counterexample> errors) {
- string implName = implementation.Name;
- houdiniOutcome.implementationOutcomes.Remove(implName);
- List<Counterexample> nonCandidateErrors = new List<Counterexample>();
-
- if (outcome == ProverInterface.Outcome.Invalid) {
- foreach (Counterexample error in errors) {
- if (ExtractRefutedAnnotation(error) == null)
- nonCandidateErrors.Add(error);
- }
- }
- houdiniOutcome.implementationOutcomes.Add(implName, new VCGenOutcome(outcome, nonCandidateErrors));
- return nonCandidateErrors.Count > 0;
- }
-
- protected void FlushWorkList(int stage, IEnumerable<int> completedStages) {
- this.NotifyFlushStart();
- while (currentHoudiniState.WorkQueue.Count > 0) {
- this.NotifyIteration();
-
- currentHoudiniState.Implementation = currentHoudiniState.WorkQueue.Peek();
- this.NotifyImplementation(currentHoudiniState.Implementation);
-
- HoudiniSession session;
- houdiniSessions.TryGetValue(currentHoudiniState.Implementation, out session);
- List<Counterexample> errors;
- ProverInterface.Outcome outcome = TryCatchVerify(session, stage, completedStages, out errors);
- UpdateHoudiniOutcome(currentHoudiniState.Outcome, currentHoudiniState.Implementation, outcome, errors);
- this.NotifyOutcome(outcome);
-
- currentHoudiniState.WorkQueue.Dequeue();
- this.NotifyDequeue();
- }
- this.NotifyFlushFinish();
- }
-
- protected void UpdateAssignment(RefutedAnnotation refAnnot) {
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Removing " + refAnnot.Constant);
- using (var cexWriter = new System.IO.StreamWriter(cexTraceFile, true))
- cexWriter.WriteLine("Removing " + refAnnot.Constant);
- }
- currentHoudiniState.Assignment.Remove(refAnnot.Constant);
- currentHoudiniState.Assignment.Add(refAnnot.Constant, false);
- this.NotifyConstant(refAnnot.Constant.Name);
- }
-
- protected void AddRelatedToWorkList(RefutedAnnotation refutedAnnotation) {
- Contract.Assume(currentHoudiniState.Implementation != null);
- foreach (Implementation implementation in FindImplementationsToEnqueue(refutedAnnotation, refutedAnnotation.RefutationSite)) {
- if (!currentHoudiniState.isBlackListed(implementation.Name)) {
- currentHoudiniState.WorkQueue.Enqueue(implementation);
- this.NotifyEnqueue(implementation);
- }
- }
- }
-
- // Updates the worklist and current assignment
- // @return true if the current function is dequeued
- protected bool UpdateAssignmentWorkList(ProverInterface.Outcome outcome,
- List<Counterexample> errors) {
- Contract.Assume(currentHoudiniState.Implementation != null);
- bool dequeue = true;
-
- switch (outcome) {
- case ProverInterface.Outcome.Valid:
- //yeah, dequeue
- break;
-
- case ProverInterface.Outcome.Invalid:
- Contract.Assume(errors != null);
-
- foreach (Counterexample error in errors) {
- RefutedAnnotation refutedAnnotation = ExtractRefutedAnnotation(error);
- if (refutedAnnotation != null) {
- // some candidate annotation removed
- ShareRefutedAnnotation(refutedAnnotation);
- AddRelatedToWorkList(refutedAnnotation);
- UpdateAssignment(refutedAnnotation);
- dequeue = false;
- #region Extra debugging output
- if (CommandLineOptions.Clo.Trace) {
- using (var cexWriter = new System.IO.StreamWriter(cexTraceFile, true)) {
- cexWriter.WriteLine("Counter example for " + refutedAnnotation.Constant);
- cexWriter.Write(error.ToString());
- cexWriter.WriteLine();
- using (var writer = new Microsoft.Boogie.TokenTextWriter(cexWriter, /*pretty=*/ false))
- foreach (Microsoft.Boogie.Block blk in error.Trace)
- blk.Emit(writer, 15);
- //cexWriter.WriteLine();
- }
- }
- #endregion
- }
- }
-
- if (ExchangeRefutedAnnotations()) dequeue = false;
-
- break;
- default:
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Timeout/Spaceout while verifying " + currentHoudiniState.Implementation.Name);
- }
- HoudiniSession houdiniSession;
- houdiniSessions.TryGetValue(currentHoudiniState.Implementation, out houdiniSession);
- foreach (Variable v in houdiniSession.houdiniAssertConstants) {
- if (CommandLineOptions.Clo.Trace) {
- Console.WriteLine("Removing " + v);
- }
- currentHoudiniState.Assignment.Remove(v);
- currentHoudiniState.Assignment.Add(v, false);
- this.NotifyConstant(v.Name);
- }
- currentHoudiniState.addToBlackList(currentHoudiniState.Implementation.Name);
- break;
- }
-
- return dequeue;
- }
-
- // This method is a hook used by ConcurrentHoudini to
- // exchange refuted annotations with other Houdini engines.
- // If the method returns true, this indicates that at least
- // one new refutation was received from some other engine.
- // In the base class we thus return false.
- protected virtual bool ExchangeRefutedAnnotations() {
- return false;
- }
-
- // This method is a hook used by ConcurrentHoudini to
- // apply a set of existing refuted annotations at the
- // start of inference.
- protected virtual void ApplyRefutedSharedAnnotations() {
- // Empty in base class; can be overridden.
- }
-
- // This method is a hook used by ConcurrentHoudini to
- // broadcast to other Houdini engines the fact that an
- // annotation was refuted.
- protected virtual void ShareRefutedAnnotation(RefutedAnnotation refutedAnnotation) {
- // Empty in base class; can be overridden.
- }
-
- // Hook for ConcurrentHoudini, which requires a task id.
- // Non-concurrent Houdini has -1 as a task id
- protected virtual int GetTaskID() {
- return -1;
- }
-
- public class WorkQueue {
- private Queue<Implementation> queue;
- private HashSet<Implementation> set;
- public WorkQueue() {
- queue = new Queue<Implementation>();
- set = new HashSet<Implementation>();
- }
- public void Enqueue(Implementation impl) {
- if (set.Contains(impl))
- return;
- queue.Enqueue(impl);
- set.Add(impl);
- }
- public Implementation Dequeue() {
- Implementation impl = queue.Dequeue();
- set.Remove(impl);
- return impl;
- }
- public Implementation Peek() {
- return queue.Peek();
- }
- public int Count {
- get { return queue.Count; }
- }
- public bool Contains(Implementation impl) {
- return set.Contains(impl);
- }
- public WorkQueue Reverse()
- {
- var ret = new WorkQueue();
- foreach (var impl in queue.Reverse())
- ret.Enqueue(impl);
- return ret;
- }
- }
-
- public class HoudiniState {
- public WorkQueue _workQueue;
- public HashSet<string> blackList;
- public Dictionary<Variable, bool> _assignment;
- public Implementation _implementation;
- public HoudiniOutcome _outcome;
-
- public HoudiniState(WorkQueue workQueue, Dictionary<Variable, bool> currentAssignment) {
- this._workQueue = workQueue;
- this._assignment = currentAssignment;
- this._implementation = null;
- this._outcome = new HoudiniOutcome();
- this.blackList = new HashSet<string>();
- }
-
- public WorkQueue WorkQueue {
- get { return this._workQueue; }
- }
- public Dictionary<Variable, bool> Assignment {
- get { return this._assignment; }
- }
- public Implementation Implementation {
- get { return this._implementation; }
- set { this._implementation = value; }
- }
- public HoudiniOutcome Outcome {
- get { return this._outcome; }
- }
- public bool isBlackListed(string funcName) {
- return blackList.Contains(funcName);
- }
- public void addToBlackList(string funcName) {
- blackList.Add(funcName);
- }
- }
-
- public HoudiniOutcome PerformHoudiniInference(int stage = 0,
- IEnumerable<int> completedStages = null,
- Dictionary<string, bool> initialAssignment = null) {
- this.NotifyStart(program, houdiniConstants.Count);
-
- currentHoudiniState = new HoudiniState(BuildWorkList(program), BuildAssignment(houdiniConstants));
-
- if(initialAssignment != null) {
- foreach(var v in CurrentHoudiniState.Assignment.Keys.ToList()) {
- CurrentHoudiniState.Assignment[v] = initialAssignment[v.Name];
- }
- }
-
- ApplyRefutedSharedAnnotations();
-
- foreach (Implementation impl in vcgenFailures) {
- currentHoudiniState.addToBlackList(impl.Name);
- }
-
- while (currentHoudiniState.WorkQueue.Count > 0) {
- this.NotifyIteration();
-
- currentHoudiniState.Implementation = currentHoudiniState.WorkQueue.Peek();
- this.NotifyImplementation(currentHoudiniState.Implementation);
-
- HoudiniSession session;
- this.houdiniSessions.TryGetValue(currentHoudiniState.Implementation, out session);
- HoudiniVerifyCurrent(session, stage, completedStages);
- }
-
- this.NotifyEnd(true);
- Dictionary<string, bool> assignment = new Dictionary<string, bool>();
- foreach (var x in currentHoudiniState.Assignment)
- assignment[x.Key.Name] = x.Value;
- currentHoudiniState.Outcome.assignment = assignment;
- return currentHoudiniState.Outcome;
- }
-
- public void Close() {
- vcgen.Close();
- proverInterface.Close();
- if (CommandLineOptions.Clo.ExplainHoudini)
- {
- explainHoudiniDottyFile.WriteLine("};");
- explainHoudiniDottyFile.Close();
- }
- }
-
- private int NumberOfStages()
- {
- int result = 1;
- foreach(var c in program.Constants) {
- result = Math.Max(result, 1 + QKeyValue.FindIntAttribute(c.Attributes, "stage_active", -1));
- }
- return result;
- }
-
- private List<Implementation> FindImplementationsToEnqueue(RefutedAnnotation refutedAnnotation, Implementation currentImplementation) {
- HoudiniSession session;
- List<Implementation> implementations = new List<Implementation>();
- switch (refutedAnnotation.Kind) {
- case RefutedAnnotationKind.REQUIRES:
- foreach (Implementation callee in callGraph.Successors(currentImplementation))
- {
- if (vcgenFailures.Contains(callee)) continue;
- houdiniSessions.TryGetValue(callee, out session);
- Contract.Assume(callee.Proc != null);
- if (callee.Proc.Equals(refutedAnnotation.CalleeProc) && session.InUnsatCore(refutedAnnotation.Constant))
- implementations.Add(callee);
- }
- break;
- case RefutedAnnotationKind.ENSURES:
- foreach (Implementation caller in callGraph.Predecessors(currentImplementation))
- {
- if (vcgenFailures.Contains(caller)) continue;
- houdiniSessions.TryGetValue(caller, out session);
- if (session.InUnsatCore(refutedAnnotation.Constant))
- implementations.Add(caller);
- }
- break;
- case RefutedAnnotationKind.ASSERT: //the implementation is already in queue
- if (CommandLineOptions.Clo.HoudiniUseCrossDependencies && crossDependencies.assumedInImpl.ContainsKey(refutedAnnotation.Constant.Name))
- {
- foreach (var impl in crossDependencies.assumedInImpl[refutedAnnotation.Constant.Name])
- {
- if (vcgenFailures.Contains(impl)) continue;
- houdiniSessions.TryGetValue(impl, out session);
- if (session.InUnsatCore(refutedAnnotation.Constant))
- implementations.Add(impl);
- }
- }
- break;
- default:
- throw new Exception("Unknown Refuted annotation kind:" + refutedAnnotation.Kind);
- }
- return implementations;
- }
-
- public enum RefutedAnnotationKind { REQUIRES, ENSURES, ASSERT };
-
- public class RefutedAnnotation {
- private Variable _constant;
- private RefutedAnnotationKind _kind;
- private Procedure _callee;
- private Implementation _refutationSite;
-
- private RefutedAnnotation(Variable constant, RefutedAnnotationKind kind, Procedure callee, Implementation refutationSite) {
- this._constant = constant;
- this._kind = kind;
- this._callee = callee;
- this._refutationSite = refutationSite;
- }
- public RefutedAnnotationKind Kind {
- get { return this._kind; }
- }
- public Variable Constant {
- get { return this._constant; }
- }
- public Procedure CalleeProc {
- get { return this._callee; }
- }
- public Implementation RefutationSite {
- get { return this._refutationSite; }
- }
- public static RefutedAnnotation BuildRefutedRequires(Variable constant, Procedure callee, Implementation refutationSite) {
- return new RefutedAnnotation(constant, RefutedAnnotationKind.REQUIRES, callee, refutationSite);
- }
- public static RefutedAnnotation BuildRefutedEnsures(Variable constant, Implementation refutationSite) {
- return new RefutedAnnotation(constant, RefutedAnnotationKind.ENSURES, null, refutationSite);
- }
- public static RefutedAnnotation BuildRefutedAssert(Variable constant, Implementation refutationSite) {
- return new RefutedAnnotation(constant, RefutedAnnotationKind.ASSERT, null, refutationSite);
- }
-
- public override int GetHashCode()
- {
- unchecked {
- int hash = 17;
- hash = hash * 23 + this.Constant.GetHashCode();
- hash = hash * 23 + this.Kind.GetHashCode();
- if (this.CalleeProc != null)
- hash = hash * 23 + this.CalleeProc.GetHashCode();
- hash = hash * 23 + this.RefutationSite.GetHashCode();
- return hash;
- }
- }
-
- public override bool Equals(object obj) {
- bool result = true;
- var other = obj as RefutedAnnotation;
-
- if (other == null) {
- result = false;
- } else {
- result = result && String.Equals(other.Constant, this.Constant);
- result = result && String.Equals(other.Kind, this.Kind);
- if (other.CalleeProc != null && this.CalleeProc != null)
- result = result && String.Equals(other.CalleeProc, this.CalleeProc);
- result = result && String.Equals(other.RefutationSite, this.RefutationSite);
- }
-
- return result;
- }
- }
-
- private void PrintRefutedCall(CallCounterexample err, XmlSink xmlOut) {
- Expr cond = err.FailingRequires.Condition;
- Variable houdiniConst;
- if (MatchCandidate(cond, out houdiniConst)) {
- xmlOut.WriteError("precondition violation", err.FailingCall.tok, err.FailingRequires.tok, err.Trace);
- }
- }
-
- private void PrintRefutedReturn(ReturnCounterexample err, XmlSink xmlOut) {
- Expr cond = err.FailingEnsures.Condition;
- Variable houdiniConst;
- if (MatchCandidate(cond, out houdiniConst)) {
- xmlOut.WriteError("postcondition violation", err.FailingReturn.tok, err.FailingEnsures.tok, err.Trace);
- }
- }
-
- private void PrintRefutedAssert(AssertCounterexample err, XmlSink xmlOut) {
- Expr cond = err.FailingAssert.OrigExpr;
- Variable houdiniConst;
- if (MatchCandidate(cond, out houdiniConst)) {
- xmlOut.WriteError("postcondition violation", err.FailingAssert.tok, err.FailingAssert.tok, err.Trace);
- }
- }
-
- protected void DebugRefutedCandidates(Implementation curFunc, List<Counterexample> errors) {
- XmlSink xmlRefuted = CommandLineOptions.Clo.XmlRefuted;
- if (xmlRefuted != null && errors != null) {
- DateTime start = DateTime.UtcNow;
- xmlRefuted.WriteStartMethod(curFunc.ToString(), start);
-
- foreach (Counterexample error in errors) {
- CallCounterexample ce = error as CallCounterexample;
- if (ce != null) PrintRefutedCall(ce, xmlRefuted);
- ReturnCounterexample re = error as ReturnCounterexample;
- if (re != null) PrintRefutedReturn(re, xmlRefuted);
- AssertCounterexample ae = error as AssertCounterexample;
- if (ae != null) PrintRefutedAssert(ae, xmlRefuted);
- }
-
- DateTime end = DateTime.UtcNow;
- xmlRefuted.WriteEndMethod("errors", end, end.Subtract(start));
- }
- }
-
- private RefutedAnnotation ExtractRefutedAnnotation(Counterexample error) {
- Variable houdiniConstant;
- CallCounterexample callCounterexample = error as CallCounterexample;
- if (callCounterexample != null) {
- Procedure failingProcedure = callCounterexample.FailingCall.Proc;
- Requires failingRequires = callCounterexample.FailingRequires;
- if (MatchCandidate(failingRequires.Condition, out houdiniConstant)) {
- Contract.Assert(houdiniConstant != null);
- return RefutedAnnotation.BuildRefutedRequires(houdiniConstant, failingProcedure, currentHoudiniState.Implementation);
- }
- }
- ReturnCounterexample returnCounterexample = error as ReturnCounterexample;
- if (returnCounterexample != null) {
- Ensures failingEnsures = returnCounterexample.FailingEnsures;
- if (MatchCandidate(failingEnsures.Condition, out houdiniConstant)) {
- Contract.Assert(houdiniConstant != null);
- return RefutedAnnotation.BuildRefutedEnsures(houdiniConstant, currentHoudiniState.Implementation);
- }
- }
- AssertCounterexample assertCounterexample = error as AssertCounterexample;
- if (assertCounterexample != null) {
- AssertCmd failingAssert = assertCounterexample.FailingAssert;
- if (MatchCandidate(failingAssert.OrigExpr, out houdiniConstant)) {
- Contract.Assert(houdiniConstant != null);
- return RefutedAnnotation.BuildRefutedAssert(houdiniConstant, currentHoudiniState.Implementation);
- }
- }
-
- return null;
- }
-
- private ProverInterface.Outcome TryCatchVerify(HoudiniSession session, int stage, IEnumerable<int> completedStages, out List<Counterexample> errors) {
- ProverInterface.Outcome outcome;
- try {
- outcome = session.Verify(proverInterface, GetAssignmentWithStages(stage, completedStages), out errors, taskID: GetTaskID());
- }
- catch (UnexpectedProverOutputException upo) {
- Contract.Assume(upo != null);
- errors = null;
- outcome = ProverInterface.Outcome.Undetermined;
- }
- return outcome;
- }
-
- protected Dictionary<Variable, bool> GetAssignmentWithStages(int currentStage, IEnumerable<int> completedStages)
- {
- Dictionary<Variable, bool> result = new Dictionary<Variable, bool>(currentHoudiniState.Assignment);
- foreach (var c in program.Constants)
- {
- int stageActive = QKeyValue.FindIntAttribute(c.Attributes, "stage_active", -1);
- if (stageActive != -1)
- {
- result[c] = (stageActive == currentStage);
- }
- int stageComplete = QKeyValue.FindIntAttribute(c.Attributes, "stage_complete", -1);
- if (stageComplete != -1)
- {
- result[c] = (completedStages.Contains(stageComplete));
- }
- }
- return result;
- }
-
- private void HoudiniVerifyCurrent(HoudiniSession session, int stage, IEnumerable<int> completedStages) {
- while (true) {
- this.NotifyAssignment(currentHoudiniState.Assignment);
-
- //check the VC with the current assignment
- List<Counterexample> errors;
- ProverInterface.Outcome outcome = TryCatchVerify(session, stage, completedStages, out errors);
- this.NotifyOutcome(outcome);
-
- DebugRefutedCandidates(currentHoudiniState.Implementation, errors);
-
- #region Explain Houdini
- if (CommandLineOptions.Clo.ExplainHoudini && outcome == ProverInterface.Outcome.Invalid)
- {
- Contract.Assume(errors != null);
- // make a copy of this variable
- errors = new List<Counterexample>(errors);
- var refutedAnnotations = new List<RefutedAnnotation>();
- foreach (Counterexample error in errors)
- {
- RefutedAnnotation refutedAnnotation = ExtractRefutedAnnotation(error);
- if (refutedAnnotation == null || refutedAnnotation.Kind == RefutedAnnotationKind.ASSERT) continue;
- refutedAnnotations.Add(refutedAnnotation);
- }
- foreach (var refutedAnnotation in refutedAnnotations)
- {
- session.Explain(proverInterface, currentHoudiniState.Assignment, refutedAnnotation.Constant);
- }
- }
- #endregion
-
- if (UpdateHoudiniOutcome(currentHoudiniState.Outcome, currentHoudiniState.Implementation, outcome, errors)) { // abort
- currentHoudiniState.WorkQueue.Dequeue();
- this.NotifyDequeue();
- FlushWorkList(stage, completedStages);
- return;
- }
- else if (UpdateAssignmentWorkList(outcome, errors)) {
- if (CommandLineOptions.Clo.UseUnsatCoreForContractInfer && outcome == ProverInterface.Outcome.Valid)
- session.UpdateUnsatCore(proverInterface, currentHoudiniState.Assignment);
- currentHoudiniState.WorkQueue.Dequeue();
- this.NotifyDequeue();
- return;
- }
- }
- }
-
- /// <summary>
- /// Transforms given program based on Houdini outcome. If a constant is assigned "true",
- /// any preconditions or postconditions guarded by the constant are made free, and any assertions
- /// guarded by the constant are replaced with assumptions.
- ///
- /// If a constant is assigned "false", any preconditions or postconditions
- /// guarded by the constant are replaced with "true", and assertions guarded by the constant
- /// are removed.
- ///
- /// In addition, all Houdini constants are removed from the program.
- /// </summary>
- public static void ApplyAssignment(Program prog, HoudiniOutcome outcome) {
-
- var Candidates = prog.TopLevelDeclarations.OfType<Constant>().Where
- (Item => QKeyValue.FindBoolAttribute(Item.Attributes, "existential")).Select(Item => Item.Name);
-
- // Treat all assertions
- // TODO: do we need to also consider assumptions?
- foreach (Block block in prog.Implementations.Select(item => item.Blocks).SelectMany(item => item)) {
- List<Cmd> newCmds = new List<Cmd>();
- foreach (Cmd cmd in block.Cmds) {
- string c;
- AssertCmd assertCmd = cmd as AssertCmd;
- if (assertCmd != null && MatchCandidate(assertCmd.Expr, Candidates, out c)) {
- var cVar = outcome.assignment.Keys.Where(item => item.Equals(c)).ToList()[0];
- if (outcome.assignment[cVar]) {
- Dictionary<Variable, Expr> cToTrue = new Dictionary<Variable, Expr>();
- Variable cVarProg = prog.Variables.Where(item => item.Name.Equals(c)).ToList()[0];
- cToTrue[cVarProg] = Expr.True;
- newCmds.Add(new AssumeCmd(assertCmd.tok,
- Substituter.Apply(Substituter.SubstitutionFromHashtable(cToTrue), assertCmd.Expr),
- assertCmd.Attributes));
- }
- }
- else {
- newCmds.Add(cmd);
- }
- }
- block.Cmds = newCmds;
- }
-
- foreach (var proc in prog.Procedures) {
- List<Requires> newRequires = new List<Requires>();
- foreach (Requires r in proc.Requires) {
- string c;
- if (MatchCandidate(r.Condition, Candidates, out c)) {
- var cVar = outcome.assignment.Keys.Where(item => item.Equals(c)).ToList()[0];
- if (outcome.assignment[cVar]) {
- Variable cVarProg = prog.Variables.Where(item => item.Name.Equals(c)).ToList()[0];
- Dictionary<Variable, Expr> subst = new Dictionary<Variable, Expr>();
- subst[cVarProg] = Expr.True;
- newRequires.Add(new Requires(Token.NoToken, true,
- Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), r.Condition),
- r.Comment, r.Attributes));
- }
- }
- else {
- newRequires.Add(r);
- }
- }
- proc.Requires = newRequires;
-
- List<Ensures> newEnsures = new List<Ensures>();
- foreach (Ensures e in proc.Ensures) {
- string c;
- if (MatchCandidate(e.Condition, Candidates, out c)) {
- var cVar = outcome.assignment.Keys.Where(item => item.Equals(c)).ToList()[0];
- if (outcome.assignment[cVar]) {
- Variable cVarProg = prog.Variables.Where(item => item.Name.Equals(c)).ToList()[0];
- Dictionary<Variable, Expr> subst = new Dictionary<Variable, Expr>();
- subst[cVarProg] = Expr.True;
- newEnsures.Add(new Ensures(Token.NoToken, true,
- Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), e.Condition),
- e.Comment, e.Attributes));
- }
- }
- else {
- newEnsures.Add(e);
- }
- }
- proc.Ensures = newEnsures;
- }
-
- // Remove the existential constants
- prog.RemoveTopLevelDeclarations(item => (item is Constant) &&
- (Candidates.Any(item2 => item2.Equals((item as Constant).Name))));
- }
-
- }
-
- public class VCGenOutcome {
- public VCGen.Outcome outcome;
- public List<Counterexample> errors;
- public VCGenOutcome(ProverInterface.Outcome outcome, List<Counterexample> errors) {
- this.outcome = ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
- this.errors = errors;
- }
- }
-
- public class HoudiniOutcome {
- // final assignment
- public Dictionary<string, bool> assignment = new Dictionary<string, bool>();
- // boogie errors
- public Dictionary<string, VCGenOutcome> implementationOutcomes = new Dictionary<string, VCGenOutcome>();
-
- // statistics
-
- private int CountResults(VCGen.Outcome outcome) {
- int outcomeCount = 0;
- foreach (VCGenOutcome verifyOutcome in implementationOutcomes.Values) {
- if (verifyOutcome.outcome == outcome)
- outcomeCount++;
- }
- return outcomeCount;
- }
-
- private List<string> ListOutcomeMatches(VCGen.Outcome outcome) {
- List<string> result = new List<string>();
- foreach (KeyValuePair<string, VCGenOutcome> kvpair in implementationOutcomes) {
- if (kvpair.Value.outcome == outcome)
- result.Add(kvpair.Key);
- }
- return result;
- }
-
- public int ErrorCount {
- get {
- return CountResults(VCGen.Outcome.Errors);
- }
- }
- public int Verified {
- get {
- return CountResults(VCGen.Outcome.Correct);
- }
- }
- public int Inconclusives {
- get {
- return CountResults(VCGen.Outcome.Inconclusive);
- }
- }
- public int TimeOuts {
- get {
- return CountResults(VCGen.Outcome.TimedOut);
- }
- }
- public List<string> ListOfTimeouts {
- get {
- return ListOutcomeMatches(VCGen.Outcome.TimedOut);
- }
- }
- public List<string> ListOfInconclusives {
- get {
- return ListOutcomeMatches(VCGen.Outcome.Inconclusive);
- }
- }
- public List<string> ListOfErrors {
- get {
- return ListOutcomeMatches(VCGen.Outcome.Errors);
- }
- }
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Diagnostics.Contracts;
+using System.Collections.Generic;
+using Microsoft.Boogie;
+using Microsoft.Boogie.VCExprAST;
+using VC;
+using System.Collections;
+using System.IO;
+using Microsoft.Boogie.GraphUtil;
+using System.Linq;
+using System.Diagnostics;
+
+namespace Microsoft.Boogie.Houdini {
+
+ internal class ReadOnlyDictionary<K, V> {
+ private Dictionary<K, V> dictionary;
+ public ReadOnlyDictionary(Dictionary<K, V> dictionary) {
+ this.dictionary = dictionary;
+ }
+
+ public Dictionary<K, V>.KeyCollection Keys {
+ get { return this.dictionary.Keys; }
+ }
+
+ public bool TryGetValue(K k, out V v) {
+ return this.dictionary.TryGetValue(k, out v);
+ }
+
+ public bool ContainsKey(K k) {
+ return this.dictionary.ContainsKey(k);
+ }
+ }
+
+ public abstract class HoudiniObserver {
+ public virtual void UpdateStart(Program program, int numConstants) { }
+ public virtual void UpdateIteration() { }
+ public virtual void UpdateImplementation(Implementation implementation) { }
+ public virtual void UpdateAssignment(Dictionary<Variable, bool> assignment) { }
+ public virtual void UpdateOutcome(ProverInterface.Outcome outcome) { }
+ public virtual void UpdateEnqueue(Implementation implementation) { }
+ public virtual void UpdateDequeue() { }
+ public virtual void UpdateConstant(string constantName) { }
+ public virtual void UpdateEnd(bool isNormalEnd) { }
+ public virtual void UpdateFlushStart() { }
+ public virtual void UpdateFlushFinish() { }
+ public virtual void SeeException(string msg) { }
+ }
+
+ public class IterationTimer<K> {
+ private Dictionary<K, List<double>> times;
+
+ public IterationTimer() {
+ times = new Dictionary<K, List<double>>();
+ }
+
+ public void AddTime(K key, double timeMS) {
+ List<double> oldList;
+ times.TryGetValue(key, out oldList);
+ if (oldList == null) {
+ oldList = new List<double>();
+ }
+ else {
+ times.Remove(key);
+ }
+ oldList.Add(timeMS);
+ times.Add(key, oldList);
+ }
+
+ public void PrintTimes(TextWriter wr) {
+ wr.WriteLine("Total procedures: {0}", times.Count);
+ double total = 0;
+ int totalIters = 0;
+ foreach (KeyValuePair<K, List<double>> kv in times) {
+ int curIter = 0;
+ wr.WriteLine("Times for {0}:", kv.Key);
+ foreach (double v in kv.Value) {
+ wr.WriteLine(" ({0})\t{1}ms", curIter, v);
+ total += v;
+ curIter++;
+ }
+ totalIters += curIter;
+ }
+ total = total / 1000.0;
+ wr.WriteLine("Total time: {0} (s)", total);
+ wr.WriteLine("Avg: {0} (s/iter)", total / totalIters);
+ }
+ }
+
+ public class HoudiniTimer : HoudiniObserver {
+ private DateTime startT;
+ private Implementation curImp;
+ private IterationTimer<string> times;
+ private TextWriter wr;
+
+ public HoudiniTimer(TextWriter wr) {
+ this.wr = wr;
+ times = new IterationTimer<string>();
+ }
+ public override void UpdateIteration() {
+ startT = DateTime.UtcNow;
+ }
+ public override void UpdateImplementation(Implementation implementation) {
+ curImp = implementation;
+ }
+ public override void UpdateOutcome(ProverInterface.Outcome o) {
+ Contract.Assert(curImp != null);
+ DateTime endT = DateTime.UtcNow;
+ times.AddTime(curImp.Name, (endT - startT).TotalMilliseconds); // assuming names are unique
+ }
+ public void PrintTimes() {
+ wr.WriteLine("-----------------------------------------");
+ wr.WriteLine("Times for each iteration for each procedure");
+ wr.WriteLine("-----------------------------------------");
+ times.PrintTimes(wr);
+ }
+ }
+
+ public class HoudiniTextReporter : HoudiniObserver {
+ private TextWriter wr;
+ private int currentIteration = -1;
+
+ public HoudiniTextReporter(TextWriter wr) {
+ this.wr = wr;
+ }
+ public override void UpdateStart(Program program, int numConstants) {
+ wr.WriteLine("Houdini started:" + program.ToString() + " #constants: " + numConstants.ToString());
+ currentIteration = -1;
+ wr.Flush();
+ }
+ public override void UpdateIteration() {
+ currentIteration++;
+ wr.WriteLine("---------------------------------------");
+ wr.WriteLine("Houdini iteration #" + currentIteration);
+ wr.Flush();
+ }
+ public override void UpdateImplementation(Implementation implementation) {
+ wr.WriteLine("implementation under analysis :" + implementation.Name);
+ wr.Flush();
+ }
+ public override void UpdateAssignment(Dictionary<Variable, bool> assignment) {
+ bool firstTime = true;
+ wr.Write("assignment under analysis : axiom (");
+ foreach (KeyValuePair<Variable, bool> kv in assignment) {
+ if (!firstTime) wr.Write(" && "); else firstTime = false;
+ string valString; // ugliness to get it lower cased
+ if (kv.Value) valString = "true"; else valString = "false";
+ wr.Write(kv.Key + " == " + valString);
+ }
+ wr.WriteLine(");");
+ wr.Flush();
+ }
+ public override void UpdateOutcome(ProverInterface.Outcome outcome) {
+ wr.WriteLine("analysis outcome :" + outcome);
+ wr.Flush();
+ }
+ public override void UpdateEnqueue(Implementation implementation) {
+ wr.WriteLine("worklist enqueue :" + implementation.Name);
+ wr.Flush();
+ }
+ public override void UpdateDequeue() {
+ wr.WriteLine("worklist dequeue");
+ wr.Flush();
+ }
+ public override void UpdateConstant(string constantName) {
+ wr.WriteLine("constant disabled : " + constantName);
+ wr.Flush();
+ }
+ public override void UpdateEnd(bool isNormalEnd) {
+ wr.WriteLine("Houdini ended: " + (isNormalEnd ? "Normal" : "Abnormal"));
+ wr.WriteLine("Number of iterations: " + (this.currentIteration + 1));
+ wr.Flush();
+ }
+ public override void UpdateFlushStart() {
+ wr.WriteLine("***************************************");
+ wr.WriteLine("Flushing remaining implementations");
+ wr.Flush();
+ }
+ public override void UpdateFlushFinish() {
+ wr.WriteLine("***************************************");
+ wr.WriteLine("Flushing finished");
+ wr.Flush();
+ }
+ public override void SeeException(string msg) {
+ wr.WriteLine("Caught exception: " + msg);
+ wr.Flush();
+ }
+
+ }
+
+ public abstract class ObservableHoudini {
+ private List<HoudiniObserver> observers = new List<HoudiniObserver>();
+
+ public void AddObserver(HoudiniObserver observer) {
+ if (!observers.Contains(observer))
+ observers.Add(observer);
+ }
+ private delegate void NotifyDelegate(HoudiniObserver observer);
+
+ private void Notify(NotifyDelegate notifyDelegate) {
+ foreach (HoudiniObserver observer in observers) {
+ notifyDelegate(observer);
+ }
+ }
+ protected void NotifyStart(Program program, int numConstants) {
+ NotifyDelegate notifyDelegate = (NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateStart(program, numConstants); };
+ Notify(notifyDelegate);
+ }
+ protected void NotifyIteration() {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateIteration(); });
+ }
+ protected void NotifyImplementation(Implementation implementation) {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateImplementation(implementation); });
+ }
+ protected void NotifyAssignment(Dictionary<Variable, bool> assignment) {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateAssignment(assignment); });
+ }
+ protected void NotifyOutcome(ProverInterface.Outcome outcome) {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateOutcome(outcome); });
+ }
+ protected void NotifyEnqueue(Implementation implementation) {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateEnqueue(implementation); });
+ }
+ protected void NotifyDequeue() {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateDequeue(); });
+ }
+ protected void NotifyConstant(string constantName) {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateConstant(constantName); });
+ }
+ protected void NotifyEnd(bool isNormalEnd) {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateEnd(isNormalEnd); });
+ }
+ protected void NotifyFlushStart() {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateFlushStart(); });
+ }
+ protected void NotifyFlushFinish() {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.UpdateFlushFinish(); });
+ }
+
+ protected void NotifyException(string msg) {
+ Notify((NotifyDelegate)delegate(HoudiniObserver r) { r.SeeException(msg); });
+ }
+ }
+
+ public class InlineEnsuresVisitor : ReadOnlyVisitor {
+ public override Ensures VisitEnsures(Ensures ensures)
+ {
+ if (!ensures.Free)
+ {
+ ensures.Attributes = new QKeyValue(Token.NoToken, "InlineAssume", new List<object>(), ensures.Attributes);
+ }
+ return base.VisitEnsures(ensures);
+ }
+ }
+
+ public class Houdini : ObservableHoudini {
+ protected Program program;
+ protected HashSet<Variable> houdiniConstants;
+ protected VCGen vcgen;
+ protected ProverInterface proverInterface;
+ protected Graph<Implementation> callGraph;
+ protected HashSet<Implementation> vcgenFailures;
+ protected HoudiniState currentHoudiniState;
+ protected CrossDependencies crossDependencies;
+ internal ReadOnlyDictionary<Implementation, HoudiniSession> houdiniSessions;
+
+ protected string cexTraceFile;
+
+ public HoudiniState CurrentHoudiniState { get { return currentHoudiniState; } }
+
+ public static TextWriter explainHoudiniDottyFile;
+
+ protected Houdini() { }
+
+ public Houdini(Program program, HoudiniSession.HoudiniStatistics stats, string cexTraceFile = "houdiniCexTrace.txt") {
+ this.program = program;
+ this.cexTraceFile = cexTraceFile;
+ Initialize(program, stats);
+ }
+
+ protected void Initialize(Program program, HoudiniSession.HoudiniStatistics stats)
+ {
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Collecting existential constants...");
+ this.houdiniConstants = CollectExistentialConstants();
+
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Building call graph...");
+ this.callGraph = Program.BuildCallGraph(program);
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Number of implementations = {0}", callGraph.Nodes.Count);
+
+ if (CommandLineOptions.Clo.HoudiniUseCrossDependencies)
+ {
+ if (CommandLineOptions.Clo.Trace) Console.WriteLine("Computing procedure cross dependencies ...");
+ this.crossDependencies = new CrossDependencies(this.houdiniConstants);
+ this.crossDependencies.Visit(program);
+ }
+
+ Inline();
+ /*
+ {
+ int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
+ CommandLineOptions.Clo.PrintUnstructured = 1;
+ using (TokenTextWriter stream = new TokenTextWriter("houdini_inline.bpl"))
+ {
+ program.Emit(stream);
+ }
+ CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
+ }
+ */
+
+ this.vcgen = new VCGen(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, new List<Checker>());
+ this.proverInterface = ProverInterface.CreateProver(program, CommandLineOptions.Clo.SimplifyLogFilePath, CommandLineOptions.Clo.SimplifyLogFileAppend, CommandLineOptions.Clo.ProverKillTime, taskID: GetTaskID());
+
+ vcgenFailures = new HashSet<Implementation>();
+ Dictionary<Implementation, HoudiniSession> houdiniSessions = new Dictionary<Implementation, HoudiniSession>();
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Beginning VC generation for Houdini...");
+ foreach (Implementation impl in callGraph.Nodes)
+ {
+ try
+ {
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("Generating VC for {0}", impl.Name);
+ HoudiniSession session = new HoudiniSession(this, vcgen, proverInterface, program, impl, stats, taskID: GetTaskID());
+ houdiniSessions.Add(impl, session);
+ }
+ catch (VCGenException)
+ {
+ if (CommandLineOptions.Clo.Trace)
+ Console.WriteLine("VC generation failed");
+ vcgenFailures.Add(impl);
+ }
+ }
+ this.houdiniSessions = new ReadOnlyDictionary<Implementation, HoudiniSession>(houdiniSessions);
+
+ if (CommandLineOptions.Clo.ExplainHoudini)
+ {
+ // Print results of ExplainHoudini to a dotty file
+ explainHoudiniDottyFile = new StreamWriter("explainHoudini.dot");
+ explainHoudiniDottyFile.WriteLine("digraph explainHoudini {");
+ foreach (var constant in houdiniConstants)
+ explainHoudiniDottyFile.WriteLine("{0} [ label = \"{0}\" color=black ];", constant.Name);
+ explainHoudiniDottyFile.WriteLine("TimeOut [label = \"TimeOut\" color=red ];");
+ }
+ }
+
+ protected void Inline() {
+ if (CommandLineOptions.Clo.InlineDepth <= 0)
+ return;
+
+ foreach (Implementation impl in callGraph.Nodes) {
+ InlineEnsuresVisitor inlineEnsuresVisitor = new InlineEnsuresVisitor();
+ inlineEnsuresVisitor.Visit(impl);
+ }
+
+ foreach (Implementation impl in callGraph.Nodes) {
+ impl.OriginalBlocks = impl.Blocks;
+ impl.OriginalLocVars = impl.LocVars;
+ }
+ foreach (Implementation impl in callGraph.Nodes) {
+ CommandLineOptions.Inlining savedOption = CommandLineOptions.Clo.ProcedureInlining;
+ CommandLineOptions.Clo.ProcedureInlining = CommandLineOptions.Inlining.Spec;
+ Inliner.ProcessImplementationForHoudini(program, impl);
+ CommandLineOptions.Clo.ProcedureInlining = savedOption;
+ }
+ foreach (Implementation impl in callGraph.Nodes) {
+ impl.OriginalBlocks = null;
+ impl.OriginalLocVars = null;
+ }
+
+ Graph<Implementation> oldCallGraph = callGraph;
+ callGraph = new Graph<Implementation>();
+ foreach (Implementation impl in oldCallGraph.Nodes) {
+ callGraph.AddSource(impl);
+ }
+ foreach (Tuple<Implementation, Implementation> edge in oldCallGraph.Edges) {
+ callGraph.AddEdge(edge.Item1, edge.Item2);
+ }
+ int count = CommandLineOptions.Clo.InlineDepth;
+ while (count > 0) {
+ foreach (Implementation impl in oldCallGraph.Nodes) {
+ List<Implementation> newNodes = new List<Implementation>();
+ foreach (Implementation succ in callGraph.Successors(impl)) {
+ newNodes.AddRange(oldCallGraph.Successors(succ));
+ }
+ foreach (Implementation newNode in newNodes) {
+ callGraph.AddEdge(impl, newNode);
+ }
+ }
+ count--;
+ }
+ }
+
+ protected HashSet<Variable> CollectExistentialConstants() {
+ HashSet<Variable> existentialConstants = new HashSet<Variable>();
+ foreach (var constant in program.Constants) {
+ bool result = false;
+ if (constant.CheckBooleanAttribute("existential", ref result)) {
+ if (result == true)
+ existentialConstants.Add(constant);
+ }
+ }
+ return existentialConstants;
+ }
+
+ // Compute dependencies between candidates
+ public class CrossDependencies : ReadOnlyVisitor
+ {
+ public CrossDependencies(HashSet<Variable> constants)
+ {
+ this.constants = constants;
+ }
+
+ public override Program VisitProgram(Program node)
+ {
+ assumedInImpl = new Dictionary<string, HashSet<Implementation>>();
+ return base.VisitProgram(node);
+ }
+
+ public override Implementation VisitImplementation(Implementation node)
+ {
+ curImpl = node;
+ return base.VisitImplementation(node);
+ }
+
+ public override Cmd VisitAssumeCmd(AssumeCmd node)
+ {
+ return base.VisitAssumeCmd(node);
+ }
+
+ public override Variable VisitVariable(Variable node)
+ {
+ if (node is Constant)
+ {
+ var constant = node as Constant;
+ if (constants.Contains(constant))
+ {
+ if (!assumedInImpl.ContainsKey(constant.Name))
+ assumedInImpl[constant.Name] = new HashSet<Implementation>();
+ assumedInImpl[constant.Name].Add(curImpl);
+ }
+ }
+ return base.VisitVariable(node);
+ }
+
+ HashSet<Variable> constants;
+ Implementation curImpl;
+
+ // contant -> set of implementations that have an assume command with that constant
+ public Dictionary<string, HashSet<Implementation>> assumedInImpl { get; private set; }
+ }
+
+ protected WorkQueue BuildWorkList(Program program) {
+ // adding implementations to the workqueue from the bottom of the call graph upwards
+ WorkQueue queue = new WorkQueue();
+ StronglyConnectedComponents<Implementation> sccs =
+ new StronglyConnectedComponents<Implementation>(callGraph.Nodes,
+ new Adjacency<Implementation>(callGraph.Predecessors),
+ new Adjacency<Implementation>(callGraph.Successors));
+ sccs.Compute();
+ foreach (SCC<Implementation> scc in sccs) {
+ foreach (Implementation impl in scc) {
+ if (vcgenFailures.Contains(impl)) continue;
+ queue.Enqueue(impl);
+ }
+ }
+ if (CommandLineOptions.Clo.ReverseHoudiniWorklist)
+ queue = queue.Reverse();
+ return queue;
+ /*
+ Queue<Implementation> queue = new Queue<Implementation>();
+ foreach (Declaration decl in program.TopLevelDeclarations) {
+ Implementation impl = decl as Implementation;
+ if (impl == null || impl.SkipVerification) continue;
+ queue.Enqueue(impl);
+ }
+ return queue;
+ */
+ }
+
+ public static bool MatchCandidate(Expr boogieExpr, IEnumerable<string> candidates, out string candidateConstant) {
+ candidateConstant = null;
+ NAryExpr e = boogieExpr as NAryExpr;
+ if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp) {
+ Expr antecedent = e.Args[0];
+ Expr consequent = e.Args[1];
+
+ IdentifierExpr id = antecedent as IdentifierExpr;
+ if (id != null && id.Decl is Constant && candidates.Contains(id.Decl.Name)) {
+ candidateConstant = id.Decl.Name;
+ return true;
+ }
+
+ if (MatchCandidate(consequent, candidates, out candidateConstant))
+ return true;
+ }
+ return false;
+ }
+
+ public static bool GetCandidateWithoutConstant(Expr boogieExpr, IEnumerable<string> candidates, out string candidateConstant, out Expr exprWithoutConstant) {
+ candidateConstant = null;
+ exprWithoutConstant = null;
+ NAryExpr e = boogieExpr as NAryExpr;
+ if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp) {
+ Expr antecedent = e.Args[0];
+ Expr consequent = e.Args[1];
+
+ IdentifierExpr id = antecedent as IdentifierExpr;
+ if (id != null && id.Decl is Constant && candidates.Contains(id.Decl.Name)) {
+ candidateConstant = id.Decl.Name;
+ exprWithoutConstant = consequent;
+ return true;
+ }
+
+ if (GetCandidateWithoutConstant(consequent, candidates, out candidateConstant, out exprWithoutConstant))
+ {
+ exprWithoutConstant = Expr.Imp(antecedent, exprWithoutConstant);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static Expr AddConditionToCandidateRec(Expr boogieExpr, Expr condition, string candidateConstant, List<Expr> implicationStack)
+ {
+ NAryExpr e = boogieExpr as NAryExpr;
+ if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp)
+ {
+ Expr antecedent = e.Args[0];
+ Expr consequent = e.Args[1];
+
+ IdentifierExpr id = antecedent as IdentifierExpr;
+ if (id != null && id.Decl is Constant && id.Decl.Name.Equals(candidateConstant))
+ {
+ Expr result = Expr.Imp(antecedent, Expr.Imp(condition, consequent));
+ implicationStack.Reverse();
+ foreach (var expr in implicationStack)
+ {
+ result = Expr.Imp(expr, result);
+ }
+ return result;
+ }
+
+ implicationStack.Add(antecedent);
+ return AddConditionToCandidateRec(consequent, condition, candidateConstant,
+ implicationStack);
+ }
+ return boogieExpr;
+ }
+
+ public static Expr AddConditionToCandidate(Expr boogieExpr, Expr condition, string candidateConstant)
+ {
+ return AddConditionToCandidateRec(boogieExpr, condition, candidateConstant, new List<Expr>());
+ }
+
+ public bool MatchCandidate(Expr boogieExpr, out Variable candidateConstant) {
+ candidateConstant = null;
+ string candidateString;
+ if(MatchCandidate(boogieExpr, houdiniConstants.Select(item => item.Name), out candidateString)) {
+ candidateConstant = houdiniConstants.Where(item => item.Name.Equals(candidateString)).ToList()[0];
+ return true;
+ }
+ return false;
+ }
+
+ public bool MatchCandidate(Expr boogieExpr, out string candidateConstant) {
+ return MatchCandidate(boogieExpr, houdiniConstants.Select(item => item.Name), out candidateConstant);
+ }
+
+ // For Explain houdini: it decorates the condition \phi as (vpos && (\phi || \not vneg))
+ // Precondition: MatchCandidate returns true
+ public Expr InsertCandidateControl(Expr boogieExpr, Variable vpos, Variable vneg)
+ {
+ Contract.Assert(CommandLineOptions.Clo.ExplainHoudini);
+
+ NAryExpr e = boogieExpr as NAryExpr;
+ if (e != null && e.Fun is BinaryOperator && ((BinaryOperator)e.Fun).Op == BinaryOperator.Opcode.Imp)
+ {
+ Expr antecedent = e.Args[0];
+ Expr consequent = e.Args[1];
+
+ IdentifierExpr id = antecedent as IdentifierExpr;
+ if (id != null && id.Decl is Constant && houdiniConstants.Contains((Constant)id.Decl))
+ {
+ return Expr.Imp(antecedent, Expr.And(Expr.Ident(vpos), Expr.Or(consequent, Expr.Not(Expr.Ident(vneg)))));
+ }
+
+ return Expr.Imp(antecedent, InsertCandidateControl(consequent, vpos, vneg));
+ }
+ Contract.Assert(false);
+ return null;
+ }
+
+ protected Dictionary<Variable, bool> BuildAssignment(HashSet<Variable> constants) {
+ Dictionary<Variable, bool> initial = new Dictionary<Variable, bool>();
+ foreach (var constant in constants)
+ initial.Add(constant, true);
+ return initial;
+ }
+
+ private bool IsOutcomeNotHoudini(ProverInterface.Outcome outcome, List<Counterexample> errors) {
+ switch (outcome) {
+ case ProverInterface.Outcome.Valid:
+ return false;
+ case ProverInterface.Outcome.Invalid:
+ Contract.Assume(errors != null);
+ foreach (Counterexample error in errors) {
+ if (ExtractRefutedAnnotation(error) == null)
+ return true;
+ }
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ // Record most current non-candidate errors found
+ // Return true if there was at least one non-candidate error
+ protected bool UpdateHoudiniOutcome(HoudiniOutcome houdiniOutcome,
+ Implementation implementation,
+ ProverInterface.Outcome outcome,
+ List<Counterexample> errors) {
+ string implName = implementation.Name;
+ houdiniOutcome.implementationOutcomes.Remove(implName);
+ List<Counterexample> nonCandidateErrors = new List<Counterexample>();
+
+ if (outcome == ProverInterface.Outcome.Invalid) {
+ foreach (Counterexample error in errors) {
+ if (ExtractRefutedAnnotation(error) == null)
+ nonCandidateErrors.Add(error);
+ }
+ }
+ houdiniOutcome.implementationOutcomes.Add(implName, new VCGenOutcome(outcome, nonCandidateErrors));
+ return nonCandidateErrors.Count > 0;
+ }
+
+ protected void FlushWorkList(int stage, IEnumerable<int> completedStages) {
+ this.NotifyFlushStart();
+ while (currentHoudiniState.WorkQueue.Count > 0) {
+ this.NotifyIteration();
+
+ currentHoudiniState.Implementation = currentHoudiniState.WorkQueue.Peek();
+ this.NotifyImplementation(currentHoudiniState.Implementation);
+
+ HoudiniSession session;
+ houdiniSessions.TryGetValue(currentHoudiniState.Implementation, out session);
+ List<Counterexample> errors;
+ ProverInterface.Outcome outcome = TryCatchVerify(session, stage, completedStages, out errors);
+ UpdateHoudiniOutcome(currentHoudiniState.Outcome, currentHoudiniState.Implementation, outcome, errors);
+ this.NotifyOutcome(outcome);
+
+ currentHoudiniState.WorkQueue.Dequeue();
+ this.NotifyDequeue();
+ }
+ this.NotifyFlushFinish();
+ }
+
+ protected void UpdateAssignment(RefutedAnnotation refAnnot) {
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Removing " + refAnnot.Constant);
+ using (var cexWriter = new System.IO.StreamWriter(cexTraceFile, true))
+ cexWriter.WriteLine("Removing " + refAnnot.Constant);
+ }
+ currentHoudiniState.Assignment.Remove(refAnnot.Constant);
+ currentHoudiniState.Assignment.Add(refAnnot.Constant, false);
+ this.NotifyConstant(refAnnot.Constant.Name);
+ }
+
+ protected void AddRelatedToWorkList(RefutedAnnotation refutedAnnotation) {
+ Contract.Assume(currentHoudiniState.Implementation != null);
+ foreach (Implementation implementation in FindImplementationsToEnqueue(refutedAnnotation, refutedAnnotation.RefutationSite)) {
+ if (!currentHoudiniState.isBlackListed(implementation.Name)) {
+ currentHoudiniState.WorkQueue.Enqueue(implementation);
+ this.NotifyEnqueue(implementation);
+ }
+ }
+ }
+
+ // Updates the worklist and current assignment
+ // @return true if the current function is dequeued
+ protected bool UpdateAssignmentWorkList(ProverInterface.Outcome outcome,
+ List<Counterexample> errors) {
+ Contract.Assume(currentHoudiniState.Implementation != null);
+ bool dequeue = true;
+
+ switch (outcome) {
+ case ProverInterface.Outcome.Valid:
+ //yeah, dequeue
+ break;
+
+ case ProverInterface.Outcome.Invalid:
+ Contract.Assume(errors != null);
+
+ foreach (Counterexample error in errors) {
+ RefutedAnnotation refutedAnnotation = ExtractRefutedAnnotation(error);
+ if (refutedAnnotation != null) {
+ // some candidate annotation removed
+ ShareRefutedAnnotation(refutedAnnotation);
+ AddRelatedToWorkList(refutedAnnotation);
+ UpdateAssignment(refutedAnnotation);
+ dequeue = false;
+ #region Extra debugging output
+ if (CommandLineOptions.Clo.Trace) {
+ using (var cexWriter = new System.IO.StreamWriter(cexTraceFile, true)) {
+ cexWriter.WriteLine("Counter example for " + refutedAnnotation.Constant);
+ cexWriter.Write(error.ToString());
+ cexWriter.WriteLine();
+ using (var writer = new Microsoft.Boogie.TokenTextWriter(cexWriter, /*pretty=*/ false))
+ foreach (Microsoft.Boogie.Block blk in error.Trace)
+ blk.Emit(writer, 15);
+ //cexWriter.WriteLine();
+ }
+ }
+ #endregion
+ }
+ }
+
+ if (ExchangeRefutedAnnotations()) dequeue = false;
+
+ break;
+ default:
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Timeout/Spaceout while verifying " + currentHoudiniState.Implementation.Name);
+ }
+ HoudiniSession houdiniSession;
+ houdiniSessions.TryGetValue(currentHoudiniState.Implementation, out houdiniSession);
+ foreach (Variable v in houdiniSession.houdiniAssertConstants) {
+ if (CommandLineOptions.Clo.Trace) {
+ Console.WriteLine("Removing " + v);
+ }
+ currentHoudiniState.Assignment.Remove(v);
+ currentHoudiniState.Assignment.Add(v, false);
+ this.NotifyConstant(v.Name);
+ }
+ currentHoudiniState.addToBlackList(currentHoudiniState.Implementation.Name);
+ break;
+ }
+
+ return dequeue;
+ }
+
+ // This method is a hook used by ConcurrentHoudini to
+ // exchange refuted annotations with other Houdini engines.
+ // If the method returns true, this indicates that at least
+ // one new refutation was received from some other engine.
+ // In the base class we thus return false.
+ protected virtual bool ExchangeRefutedAnnotations() {
+ return false;
+ }
+
+ // This method is a hook used by ConcurrentHoudini to
+ // apply a set of existing refuted annotations at the
+ // start of inference.
+ protected virtual void ApplyRefutedSharedAnnotations() {
+ // Empty in base class; can be overridden.
+ }
+
+ // This method is a hook used by ConcurrentHoudini to
+ // broadcast to other Houdini engines the fact that an
+ // annotation was refuted.
+ protected virtual void ShareRefutedAnnotation(RefutedAnnotation refutedAnnotation) {
+ // Empty in base class; can be overridden.
+ }
+
+ // Hook for ConcurrentHoudini, which requires a task id.
+ // Non-concurrent Houdini has -1 as a task id
+ protected virtual int GetTaskID() {
+ return -1;
+ }
+
+ public class WorkQueue {
+ private Queue<Implementation> queue;
+ private HashSet<Implementation> set;
+ public WorkQueue() {
+ queue = new Queue<Implementation>();
+ set = new HashSet<Implementation>();
+ }
+ public void Enqueue(Implementation impl) {
+ if (set.Contains(impl))
+ return;
+ queue.Enqueue(impl);
+ set.Add(impl);
+ }
+ public Implementation Dequeue() {
+ Implementation impl = queue.Dequeue();
+ set.Remove(impl);
+ return impl;
+ }
+ public Implementation Peek() {
+ return queue.Peek();
+ }
+ public int Count {
+ get { return queue.Count; }
+ }
+ public bool Contains(Implementation impl) {
+ return set.Contains(impl);
+ }
+ public WorkQueue Reverse()
+ {
+ var ret = new WorkQueue();
+ foreach (var impl in queue.Reverse())
+ ret.Enqueue(impl);
+ return ret;
+ }
+ }
+
+ public class HoudiniState {
+ public WorkQueue _workQueue;
+ public HashSet<string> blackList;
+ public Dictionary<Variable, bool> _assignment;
+ public Implementation _implementation;
+ public HoudiniOutcome _outcome;
+
+ public HoudiniState(WorkQueue workQueue, Dictionary<Variable, bool> currentAssignment) {
+ this._workQueue = workQueue;
+ this._assignment = currentAssignment;
+ this._implementation = null;
+ this._outcome = new HoudiniOutcome();
+ this.blackList = new HashSet<string>();
+ }
+
+ public WorkQueue WorkQueue {
+ get { return this._workQueue; }
+ }
+ public Dictionary<Variable, bool> Assignment {
+ get { return this._assignment; }
+ }
+ public Implementation Implementation {
+ get { return this._implementation; }
+ set { this._implementation = value; }
+ }
+ public HoudiniOutcome Outcome {
+ get { return this._outcome; }
+ }
+ public bool isBlackListed(string funcName) {
+ return blackList.Contains(funcName);
+ }
+ public void addToBlackList(string funcName) {
+ blackList.Add(funcName);
+ }
+ }
+
+ public HoudiniOutcome PerformHoudiniInference(int stage = 0,
+ IEnumerable<int> completedStages = null,
+ Dictionary<string, bool> initialAssignment = null) {
+ this.NotifyStart(program, houdiniConstants.Count);
+
+ currentHoudiniState = new HoudiniState(BuildWorkList(program), BuildAssignment(houdiniConstants));
+
+ if(initialAssignment != null) {
+ foreach(var v in CurrentHoudiniState.Assignment.Keys.ToList()) {
+ CurrentHoudiniState.Assignment[v] = initialAssignment[v.Name];
+ }
+ }
+
+ ApplyRefutedSharedAnnotations();
+
+ foreach (Implementation impl in vcgenFailures) {
+ currentHoudiniState.addToBlackList(impl.Name);
+ }
+
+ while (currentHoudiniState.WorkQueue.Count > 0) {
+ this.NotifyIteration();
+
+ currentHoudiniState.Implementation = currentHoudiniState.WorkQueue.Peek();
+ this.NotifyImplementation(currentHoudiniState.Implementation);
+
+ HoudiniSession session;
+ this.houdiniSessions.TryGetValue(currentHoudiniState.Implementation, out session);
+ HoudiniVerifyCurrent(session, stage, completedStages);
+ }
+
+ this.NotifyEnd(true);
+ Dictionary<string, bool> assignment = new Dictionary<string, bool>();
+ foreach (var x in currentHoudiniState.Assignment)
+ assignment[x.Key.Name] = x.Value;
+ currentHoudiniState.Outcome.assignment = assignment;
+ return currentHoudiniState.Outcome;
+ }
+
+ public void Close() {
+ vcgen.Close();
+ proverInterface.Close();
+ if (CommandLineOptions.Clo.ExplainHoudini)
+ {
+ explainHoudiniDottyFile.WriteLine("};");
+ explainHoudiniDottyFile.Close();
+ }
+ }
+
+ private int NumberOfStages()
+ {
+ int result = 1;
+ foreach(var c in program.Constants) {
+ result = Math.Max(result, 1 + QKeyValue.FindIntAttribute(c.Attributes, "stage_active", -1));
+ }
+ return result;
+ }
+
+ private List<Implementation> FindImplementationsToEnqueue(RefutedAnnotation refutedAnnotation, Implementation currentImplementation) {
+ HoudiniSession session;
+ List<Implementation> implementations = new List<Implementation>();
+ switch (refutedAnnotation.Kind) {
+ case RefutedAnnotationKind.REQUIRES:
+ foreach (Implementation callee in callGraph.Successors(currentImplementation))
+ {
+ if (vcgenFailures.Contains(callee)) continue;
+ houdiniSessions.TryGetValue(callee, out session);
+ Contract.Assume(callee.Proc != null);
+ if (callee.Proc.Equals(refutedAnnotation.CalleeProc) && session.InUnsatCore(refutedAnnotation.Constant))
+ implementations.Add(callee);
+ }
+ break;
+ case RefutedAnnotationKind.ENSURES:
+ foreach (Implementation caller in callGraph.Predecessors(currentImplementation))
+ {
+ if (vcgenFailures.Contains(caller)) continue;
+ houdiniSessions.TryGetValue(caller, out session);
+ if (session.InUnsatCore(refutedAnnotation.Constant))
+ implementations.Add(caller);
+ }
+ break;
+ case RefutedAnnotationKind.ASSERT: //the implementation is already in queue
+ if (CommandLineOptions.Clo.HoudiniUseCrossDependencies && crossDependencies.assumedInImpl.ContainsKey(refutedAnnotation.Constant.Name))
+ {
+ foreach (var impl in crossDependencies.assumedInImpl[refutedAnnotation.Constant.Name])
+ {
+ if (vcgenFailures.Contains(impl)) continue;
+ houdiniSessions.TryGetValue(impl, out session);
+ if (session.InUnsatCore(refutedAnnotation.Constant))
+ implementations.Add(impl);
+ }
+ }
+ break;
+ default:
+ throw new Exception("Unknown Refuted annotation kind:" + refutedAnnotation.Kind);
+ }
+ return implementations;
+ }
+
+ public enum RefutedAnnotationKind { REQUIRES, ENSURES, ASSERT };
+
+ public class RefutedAnnotation {
+ private Variable _constant;
+ private RefutedAnnotationKind _kind;
+ private Procedure _callee;
+ private Implementation _refutationSite;
+
+ private RefutedAnnotation(Variable constant, RefutedAnnotationKind kind, Procedure callee, Implementation refutationSite) {
+ this._constant = constant;
+ this._kind = kind;
+ this._callee = callee;
+ this._refutationSite = refutationSite;
+ }
+ public RefutedAnnotationKind Kind {
+ get { return this._kind; }
+ }
+ public Variable Constant {
+ get { return this._constant; }
+ }
+ public Procedure CalleeProc {
+ get { return this._callee; }
+ }
+ public Implementation RefutationSite {
+ get { return this._refutationSite; }
+ }
+ public static RefutedAnnotation BuildRefutedRequires(Variable constant, Procedure callee, Implementation refutationSite) {
+ return new RefutedAnnotation(constant, RefutedAnnotationKind.REQUIRES, callee, refutationSite);
+ }
+ public static RefutedAnnotation BuildRefutedEnsures(Variable constant, Implementation refutationSite) {
+ return new RefutedAnnotation(constant, RefutedAnnotationKind.ENSURES, null, refutationSite);
+ }
+ public static RefutedAnnotation BuildRefutedAssert(Variable constant, Implementation refutationSite) {
+ return new RefutedAnnotation(constant, RefutedAnnotationKind.ASSERT, null, refutationSite);
+ }
+
+ public override int GetHashCode()
+ {
+ unchecked {
+ int hash = 17;
+ hash = hash * 23 + this.Constant.GetHashCode();
+ hash = hash * 23 + this.Kind.GetHashCode();
+ if (this.CalleeProc != null)
+ hash = hash * 23 + this.CalleeProc.GetHashCode();
+ hash = hash * 23 + this.RefutationSite.GetHashCode();
+ return hash;
+ }
+ }
+
+ public override bool Equals(object obj) {
+ bool result = true;
+ var other = obj as RefutedAnnotation;
+
+ if (other == null) {
+ result = false;
+ } else {
+ result = result && String.Equals(other.Constant, this.Constant);
+ result = result && String.Equals(other.Kind, this.Kind);
+ if (other.CalleeProc != null && this.CalleeProc != null)
+ result = result && String.Equals(other.CalleeProc, this.CalleeProc);
+ result = result && String.Equals(other.RefutationSite, this.RefutationSite);
+ }
+
+ return result;
+ }
+ }
+
+ private void PrintRefutedCall(CallCounterexample err, XmlSink xmlOut) {
+ Expr cond = err.FailingRequires.Condition;
+ Variable houdiniConst;
+ if (MatchCandidate(cond, out houdiniConst)) {
+ xmlOut.WriteError("precondition violation", err.FailingCall.tok, err.FailingRequires.tok, err.Trace);
+ }
+ }
+
+ private void PrintRefutedReturn(ReturnCounterexample err, XmlSink xmlOut) {
+ Expr cond = err.FailingEnsures.Condition;
+ Variable houdiniConst;
+ if (MatchCandidate(cond, out houdiniConst)) {
+ xmlOut.WriteError("postcondition violation", err.FailingReturn.tok, err.FailingEnsures.tok, err.Trace);
+ }
+ }
+
+ private void PrintRefutedAssert(AssertCounterexample err, XmlSink xmlOut) {
+ Expr cond = err.FailingAssert.OrigExpr;
+ Variable houdiniConst;
+ if (MatchCandidate(cond, out houdiniConst)) {
+ xmlOut.WriteError("postcondition violation", err.FailingAssert.tok, err.FailingAssert.tok, err.Trace);
+ }
+ }
+
+ protected void DebugRefutedCandidates(Implementation curFunc, List<Counterexample> errors) {
+ XmlSink xmlRefuted = CommandLineOptions.Clo.XmlRefuted;
+ if (xmlRefuted != null && errors != null) {
+ DateTime start = DateTime.UtcNow;
+ xmlRefuted.WriteStartMethod(curFunc.ToString(), start);
+
+ foreach (Counterexample error in errors) {
+ CallCounterexample ce = error as CallCounterexample;
+ if (ce != null) PrintRefutedCall(ce, xmlRefuted);
+ ReturnCounterexample re = error as ReturnCounterexample;
+ if (re != null) PrintRefutedReturn(re, xmlRefuted);
+ AssertCounterexample ae = error as AssertCounterexample;
+ if (ae != null) PrintRefutedAssert(ae, xmlRefuted);
+ }
+
+ DateTime end = DateTime.UtcNow;
+ xmlRefuted.WriteEndMethod("errors", end, end.Subtract(start));
+ }
+ }
+
+ private RefutedAnnotation ExtractRefutedAnnotation(Counterexample error) {
+ Variable houdiniConstant;
+ CallCounterexample callCounterexample = error as CallCounterexample;
+ if (callCounterexample != null) {
+ Procedure failingProcedure = callCounterexample.FailingCall.Proc;
+ Requires failingRequires = callCounterexample.FailingRequires;
+ if (MatchCandidate(failingRequires.Condition, out houdiniConstant)) {
+ Contract.Assert(houdiniConstant != null);
+ return RefutedAnnotation.BuildRefutedRequires(houdiniConstant, failingProcedure, currentHoudiniState.Implementation);
+ }
+ }
+ ReturnCounterexample returnCounterexample = error as ReturnCounterexample;
+ if (returnCounterexample != null) {
+ Ensures failingEnsures = returnCounterexample.FailingEnsures;
+ if (MatchCandidate(failingEnsures.Condition, out houdiniConstant)) {
+ Contract.Assert(houdiniConstant != null);
+ return RefutedAnnotation.BuildRefutedEnsures(houdiniConstant, currentHoudiniState.Implementation);
+ }
+ }
+ AssertCounterexample assertCounterexample = error as AssertCounterexample;
+ if (assertCounterexample != null) {
+ AssertCmd failingAssert = assertCounterexample.FailingAssert;
+ if (MatchCandidate(failingAssert.OrigExpr, out houdiniConstant)) {
+ Contract.Assert(houdiniConstant != null);
+ return RefutedAnnotation.BuildRefutedAssert(houdiniConstant, currentHoudiniState.Implementation);
+ }
+ }
+
+ return null;
+ }
+
+ private ProverInterface.Outcome TryCatchVerify(HoudiniSession session, int stage, IEnumerable<int> completedStages, out List<Counterexample> errors) {
+ ProverInterface.Outcome outcome;
+ try {
+ outcome = session.Verify(proverInterface, GetAssignmentWithStages(stage, completedStages), out errors, taskID: GetTaskID());
+ }
+ catch (UnexpectedProverOutputException upo) {
+ Contract.Assume(upo != null);
+ errors = null;
+ outcome = ProverInterface.Outcome.Undetermined;
+ }
+ return outcome;
+ }
+
+ protected Dictionary<Variable, bool> GetAssignmentWithStages(int currentStage, IEnumerable<int> completedStages)
+ {
+ Dictionary<Variable, bool> result = new Dictionary<Variable, bool>(currentHoudiniState.Assignment);
+ foreach (var c in program.Constants)
+ {
+ int stageActive = QKeyValue.FindIntAttribute(c.Attributes, "stage_active", -1);
+ if (stageActive != -1)
+ {
+ result[c] = (stageActive == currentStage);
+ }
+ int stageComplete = QKeyValue.FindIntAttribute(c.Attributes, "stage_complete", -1);
+ if (stageComplete != -1)
+ {
+ result[c] = (completedStages.Contains(stageComplete));
+ }
+ }
+ return result;
+ }
+
+ private void HoudiniVerifyCurrent(HoudiniSession session, int stage, IEnumerable<int> completedStages) {
+ while (true) {
+ this.NotifyAssignment(currentHoudiniState.Assignment);
+
+ //check the VC with the current assignment
+ List<Counterexample> errors;
+ ProverInterface.Outcome outcome = TryCatchVerify(session, stage, completedStages, out errors);
+ this.NotifyOutcome(outcome);
+
+ DebugRefutedCandidates(currentHoudiniState.Implementation, errors);
+
+ #region Explain Houdini
+ if (CommandLineOptions.Clo.ExplainHoudini && outcome == ProverInterface.Outcome.Invalid)
+ {
+ Contract.Assume(errors != null);
+ // make a copy of this variable
+ errors = new List<Counterexample>(errors);
+ var refutedAnnotations = new List<RefutedAnnotation>();
+ foreach (Counterexample error in errors)
+ {
+ RefutedAnnotation refutedAnnotation = ExtractRefutedAnnotation(error);
+ if (refutedAnnotation == null || refutedAnnotation.Kind == RefutedAnnotationKind.ASSERT) continue;
+ refutedAnnotations.Add(refutedAnnotation);
+ }
+ foreach (var refutedAnnotation in refutedAnnotations)
+ {
+ session.Explain(proverInterface, currentHoudiniState.Assignment, refutedAnnotation.Constant);
+ }
+ }
+ #endregion
+
+ if (UpdateHoudiniOutcome(currentHoudiniState.Outcome, currentHoudiniState.Implementation, outcome, errors)) { // abort
+ currentHoudiniState.WorkQueue.Dequeue();
+ this.NotifyDequeue();
+ FlushWorkList(stage, completedStages);
+ return;
+ }
+ else if (UpdateAssignmentWorkList(outcome, errors)) {
+ if (CommandLineOptions.Clo.UseUnsatCoreForContractInfer && outcome == ProverInterface.Outcome.Valid)
+ session.UpdateUnsatCore(proverInterface, currentHoudiniState.Assignment);
+ currentHoudiniState.WorkQueue.Dequeue();
+ this.NotifyDequeue();
+ return;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Transforms given program based on Houdini outcome. If a constant is assigned "true",
+ /// any preconditions or postconditions guarded by the constant are made free, and any assertions
+ /// guarded by the constant are replaced with assumptions.
+ ///
+ /// If a constant is assigned "false", any preconditions or postconditions
+ /// guarded by the constant are replaced with "true", and assertions guarded by the constant
+ /// are removed.
+ ///
+ /// In addition, all Houdini constants are removed from the program.
+ /// </summary>
+ public static void ApplyAssignment(Program prog, HoudiniOutcome outcome) {
+
+ var Candidates = prog.TopLevelDeclarations.OfType<Constant>().Where
+ (Item => QKeyValue.FindBoolAttribute(Item.Attributes, "existential")).Select(Item => Item.Name);
+
+ // Treat all assertions
+ // TODO: do we need to also consider assumptions?
+ foreach (Block block in prog.Implementations.Select(item => item.Blocks).SelectMany(item => item)) {
+ List<Cmd> newCmds = new List<Cmd>();
+ foreach (Cmd cmd in block.Cmds) {
+ string c;
+ AssertCmd assertCmd = cmd as AssertCmd;
+ if (assertCmd != null && MatchCandidate(assertCmd.Expr, Candidates, out c)) {
+ var cVar = outcome.assignment.Keys.Where(item => item.Equals(c)).ToList()[0];
+ if (outcome.assignment[cVar]) {
+ Dictionary<Variable, Expr> cToTrue = new Dictionary<Variable, Expr>();
+ Variable cVarProg = prog.Variables.Where(item => item.Name.Equals(c)).ToList()[0];
+ cToTrue[cVarProg] = Expr.True;
+ newCmds.Add(new AssumeCmd(assertCmd.tok,
+ Substituter.Apply(Substituter.SubstitutionFromHashtable(cToTrue), assertCmd.Expr),
+ assertCmd.Attributes));
+ }
+ }
+ else {
+ newCmds.Add(cmd);
+ }
+ }
+ block.Cmds = newCmds;
+ }
+
+ foreach (var proc in prog.Procedures) {
+ List<Requires> newRequires = new List<Requires>();
+ foreach (Requires r in proc.Requires) {
+ string c;
+ if (MatchCandidate(r.Condition, Candidates, out c)) {
+ var cVar = outcome.assignment.Keys.Where(item => item.Equals(c)).ToList()[0];
+ if (outcome.assignment[cVar]) {
+ Variable cVarProg = prog.Variables.Where(item => item.Name.Equals(c)).ToList()[0];
+ Dictionary<Variable, Expr> subst = new Dictionary<Variable, Expr>();
+ subst[cVarProg] = Expr.True;
+ newRequires.Add(new Requires(Token.NoToken, true,
+ Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), r.Condition),
+ r.Comment, r.Attributes));
+ }
+ }
+ else {
+ newRequires.Add(r);
+ }
+ }
+ proc.Requires = newRequires;
+
+ List<Ensures> newEnsures = new List<Ensures>();
+ foreach (Ensures e in proc.Ensures) {
+ string c;
+ if (MatchCandidate(e.Condition, Candidates, out c)) {
+ var cVar = outcome.assignment.Keys.Where(item => item.Equals(c)).ToList()[0];
+ if (outcome.assignment[cVar]) {
+ Variable cVarProg = prog.Variables.Where(item => item.Name.Equals(c)).ToList()[0];
+ Dictionary<Variable, Expr> subst = new Dictionary<Variable, Expr>();
+ subst[cVarProg] = Expr.True;
+ newEnsures.Add(new Ensures(Token.NoToken, true,
+ Substituter.Apply(Substituter.SubstitutionFromHashtable(subst), e.Condition),
+ e.Comment, e.Attributes));
+ }
+ }
+ else {
+ newEnsures.Add(e);
+ }
+ }
+ proc.Ensures = newEnsures;
+ }
+
+ // Remove the existential constants
+ prog.RemoveTopLevelDeclarations(item => (item is Constant) &&
+ (Candidates.Any(item2 => item2.Equals((item as Constant).Name))));
+ }
+
+ }
+
+ public class VCGenOutcome {
+ public VCGen.Outcome outcome;
+ public List<Counterexample> errors;
+ public VCGenOutcome(ProverInterface.Outcome outcome, List<Counterexample> errors) {
+ this.outcome = ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
+ this.errors = errors;
+ }
+ }
+
+ public class HoudiniOutcome {
+ // final assignment
+ public Dictionary<string, bool> assignment = new Dictionary<string, bool>();
+ // boogie errors
+ public Dictionary<string, VCGenOutcome> implementationOutcomes = new Dictionary<string, VCGenOutcome>();
+
+ // statistics
+
+ private int CountResults(VCGen.Outcome outcome) {
+ int outcomeCount = 0;
+ foreach (VCGenOutcome verifyOutcome in implementationOutcomes.Values) {
+ if (verifyOutcome.outcome == outcome)
+ outcomeCount++;
+ }
+ return outcomeCount;
+ }
+
+ private List<string> ListOutcomeMatches(VCGen.Outcome outcome) {
+ List<string> result = new List<string>();
+ foreach (KeyValuePair<string, VCGenOutcome> kvpair in implementationOutcomes) {
+ if (kvpair.Value.outcome == outcome)
+ result.Add(kvpair.Key);
+ }
+ return result;
+ }
+
+ public int ErrorCount {
+ get {
+ return CountResults(VCGen.Outcome.Errors);
+ }
+ }
+ public int Verified {
+ get {
+ return CountResults(VCGen.Outcome.Correct);
+ }
+ }
+ public int Inconclusives {
+ get {
+ return CountResults(VCGen.Outcome.Inconclusive);
+ }
+ }
+ public int TimeOuts {
+ get {
+ return CountResults(VCGen.Outcome.TimedOut);
+ }
+ }
+ public List<string> ListOfTimeouts {
+ get {
+ return ListOutcomeMatches(VCGen.Outcome.TimedOut);
+ }
+ }
+ public List<string> ListOfInconclusives {
+ get {
+ return ListOutcomeMatches(VCGen.Outcome.Inconclusive);
+ }
+ }
+ public List<string> ListOfErrors {
+ get {
+ return ListOutcomeMatches(VCGen.Outcome.Errors);
+ }
+ }
+ }
+
+}
diff --git a/Source/Houdini/Houdini.csproj b/Source/Houdini/Houdini.csproj
index dcb42ef7..43612142 100644
--- a/Source/Houdini/Houdini.csproj
+++ b/Source/Houdini/Houdini.csproj
@@ -1,154 +1,154 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie.Houdini</RootNamespace>
- <AssemblyName>Houdini</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <OutputPath>bin\Checked\</OutputPath>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="AbstractHoudini.cs" />
- <Compile Include="Checker.cs" />
- <Compile Include="AnnotationDependenceAnalyser.cs" />
- <Compile Include="Houdini.cs" />
- <Compile Include="StagedHoudini.cs" />
- <Compile Include="ConcurrentHoudini.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\Model\Model.csproj">
- <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\Provers\SMTLib\SMTLib.csproj">
- <Project>{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}</Project>
- <Name>SMTLib</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCExpr\VCExpr.csproj">
- <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
- <Name>VCExpr</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{CF41E903-78EB-43BA-A355-E5FEB5ECECD4}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Microsoft.Boogie.Houdini</RootNamespace>
+ <AssemblyName>BoogieHoudini</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <OutputPath>bin\Checked\</OutputPath>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="AbstractHoudini.cs" />
+ <Compile Include="Checker.cs" />
+ <Compile Include="AnnotationDependenceAnalyser.cs" />
+ <Compile Include="Houdini.cs" />
+ <Compile Include="StagedHoudini.cs" />
+ <Compile Include="ConcurrentHoudini.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Model\Model.csproj">
+ <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
+ <Name>Model</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Provers\SMTLib\SMTLib.csproj">
+ <Project>{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}</Project>
+ <Name>SMTLib</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCExpr\VCExpr.csproj">
+ <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
+ <Name>VCExpr</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/Houdini/StagedHoudini.cs b/Source/Houdini/StagedHoudini.cs
index 27481e4f..964321c7 100644
--- a/Source/Houdini/StagedHoudini.cs
+++ b/Source/Houdini/StagedHoudini.cs
@@ -1,427 +1,427 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics.Contracts;
-using System.Diagnostics;
-using System.Threading.Tasks;
-using System.Threading;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-
-namespace Microsoft.Boogie.Houdini
-{
- public class StagedHoudini
- {
-
- private Program program;
- private HoudiniSession.HoudiniStatistics houdiniStats;
- private Func<string, Program> ProgramFromFile;
- private StagedHoudiniPlan plan;
- private List<Houdini>[] houdiniInstances;
- private List<StagedHoudiniTask> tasks = new List<StagedHoudiniTask>();
- private Dictionary<ScheduledStage, HoudiniOutcome> outcomes = new Dictionary<ScheduledStage,HoudiniOutcome>();
-
- private const string tempFilename = "__stagedHoudiniTemp.bpl";
-
- public StagedHoudini(Program program, HoudiniSession.HoudiniStatistics houdiniStats, Func<string, Program> ProgramFromFile) {
- this.program = program;
- this.houdiniStats = houdiniStats;
- this.ProgramFromFile = ProgramFromFile;
- this.houdiniInstances = new List<Houdini>[CommandLineOptions.Clo.StagedHoudiniThreads];
- for (int i = 0; i < CommandLineOptions.Clo.StagedHoudiniThreads; i++) {
- houdiniInstances[i] = new List<Houdini>();
- }
-
- BreakApartConjunctionsInAnnotations();
-
- var annotationDependenceAnalyser = new AnnotationDependenceAnalyser(program);
- annotationDependenceAnalyser.Analyse();
- this.plan = annotationDependenceAnalyser.ApplyStages();
- if (CommandLineOptions.Clo.Trace)
- {
- annotationDependenceAnalyser.dump();
-
- if(CommandLineOptions.Clo.DebugStagedHoudini) {
- Console.WriteLine("Plan\n====\n");
- if(plan == null) {
- Console.WriteLine("No plan, as there were no stages");
- } else {
- Console.WriteLine(this.plan);
- }
- }
-
- EmitProgram("staged.bpl");
- }
- }
-
- private void BreakApartConjunctionsInAnnotations()
- {
- // StagedHoudini works on a syntactic basis, so that
- // if x and y occur in the same annotation, any annotation
- // referring to either x or y will be in the same stage
- // as this annotation. It is thus desirable to separate
- // conjunctive annotations into multiple annotations,
- // to reduce these syntactic dependencies.
-
- foreach(var b in program.Blocks()) {
- List<Cmd> newCmds = new List<Cmd>();
- foreach(var c in b.Cmds) {
- var assertion = c as AssertCmd;
- if (assertion != null) {
- foreach(var e in BreakIntoConjuncts(assertion.Expr)) {
- newCmds.Add(new AssertCmd(assertion.tok, e, assertion.Attributes));
- }
- } else {
- newCmds.Add(c);
- }
- }
- b.Cmds = newCmds;
- }
-
- foreach(var proc in program.Procedures) {
- {
- var newRequires = new List<Requires>();
- foreach(var r in proc.Requires) {
- foreach(var c in BreakIntoConjuncts(r.Condition)) {
- newRequires.Add(new Requires(r.tok, r.Free, c, r.Comment, r.Attributes));
- }
- }
- proc.Requires = newRequires;
- }
- {
- var newEnsures = new List<Ensures>();
- foreach(var e in proc.Ensures) {
- foreach(var c in BreakIntoConjuncts(e.Condition)) {
- newEnsures.Add(new Ensures(e.tok, e.Free, c, e.Comment, e.Attributes));
- }
- }
- proc.Ensures = newEnsures;
- }
- }
- }
-
- private List<Expr> BreakIntoConjuncts(Expr expr)
- {
- var nary = expr as NAryExpr;
- if(nary == null) {
- return new List<Expr> { expr };
- }
- var fun = nary.Fun as BinaryOperator;
- if(fun == null || (fun.Op != BinaryOperator.Opcode.And)) {
- return new List<Expr> { expr };
- }
- var result = new List<Expr>();
- result.AddRange(BreakIntoConjuncts(nary.Args[0]));
- result.AddRange(BreakIntoConjuncts(nary.Args[1]));
- return result;
- }
-
- private bool NoStages() {
- return plan == null;
- }
-
- public HoudiniOutcome PerformStagedHoudiniInference()
- {
-
- if (NoStages()) {
- Houdini houdini = new Houdini(program, houdiniStats);
- return houdini.PerformHoudiniInference();
- }
-
- EmitProgram(tempFilename);
-
- #region Prepare the tasks, but do not launch them
- foreach (var s in plan) {
- Debug.Assert(!plan.GetDependences(s).Contains(s));
- tasks.Add(new StagedHoudiniTask(s, new Task(o => {
- ExecuteStage((ScheduledStage)o);
- }, s, TaskCreationOptions.LongRunning)));
- }
- #endregion
-
- #region Launch the tasks, and wait for them to finish
- foreach (var t in tasks) {
- t.parallelTask.Start();
- }
- Task.WaitAll(tasks.Select(Item => Item.parallelTask).ToArray());
- int count = 0;
- foreach(var h in houdiniInstances) {
- if(h.Count() > 0) {
- count++;
- System.Diagnostics.Debug.Assert(h.Count() == 1);
- h[0].Close();
- }
- }
- #endregion
-
- return UnifyOutcomes();
-
- }
-
- private HoudiniOutcome UnifyOutcomes()
- {
- HoudiniOutcome result = new HoudiniOutcome();
- var scheduledStages = outcomes.Keys.ToList();
-
- result.assignment = new Dictionary<string,bool>();
- foreach(var c in outcomes[scheduledStages[0]].assignment.Keys) {
- result.assignment[c] = outcomes.Select(Item => Item.Value).Select(Item => Item.assignment[c]).All(Item => Item);
- }
-
- result.implementationOutcomes = new Dictionary<string,VCGenOutcome>();
- foreach(var p in outcomes[scheduledStages[0]].implementationOutcomes.Keys) {
- var unifiedImplementationOutcome = outcomes[scheduledStages[0]].implementationOutcomes[p];
- for(int i = 1; i < scheduledStages.Count(); i++) {
- unifiedImplementationOutcome = ChooseOutcome(unifiedImplementationOutcome,
- outcomes[scheduledStages[i]].implementationOutcomes[p]);
- }
- result.implementationOutcomes[p] = unifiedImplementationOutcome;
- }
-
- return result;
- }
-
- private void ExecuteStage(ScheduledStage s)
- {
- Task.WaitAll(tasks.Where(
- Item => plan.GetDependences(s).Contains(Item.stage)).
- Select(Item => Item.parallelTask).ToArray());
-
- if(s.Count() == 0) {
- // This is the trivial first stage, so don't launch Houdini;
- // give this a null outcome
- return;
- }
-
- List<Houdini> h = AcquireHoudiniInstance();
-
- if (h.Count() == 0)
- {
- h.Add(new Houdini(ProgramFromFile(tempFilename), new HoudiniSession.HoudiniStatistics(), "houdiniCexTrace_" + s.GetId() + ".txt"));
- }
-
- System.Diagnostics.Debug.Assert(h.Count() == 1);
-
- Dictionary<string, bool> mergedAssignment = null;
-
- List<Dictionary<string, bool>> relevantAssignments;
- IEnumerable<int> completedStages;
- lock (outcomes)
- {
- relevantAssignments =
- outcomes.Where(Item => plan.Contains(Item.Key)).
- Select(Item => Item.Value).
- Select(Item => Item.assignment).ToList();
- completedStages = plan.GetDependences(s).Select(Item => Item.GetId());
- }
-
- if (relevantAssignments.Count() > 0)
- {
- mergedAssignment = new Dictionary<string, bool>();
- foreach (var v in relevantAssignments[0].Keys)
- {
- mergedAssignment[v] = relevantAssignments.Select(Item => Item[v]).ToList().All(Item => Item);
- }
- }
-
- HoudiniOutcome outcome = h[0].PerformHoudiniInference(
- s.GetId(),
- completedStages,
- mergedAssignment);
-
- lock (outcomes)
- {
- outcomes[s] = outcome;
- }
-
- ReleaseHoudiniInstance(h);
-
- }
-
- private static void ReleaseHoudiniInstance(List<Houdini> h)
- {
- Monitor.Exit(h);
- }
-
- private List<Houdini> AcquireHoudiniInstance()
- {
- while(true) {
- foreach (var houdini in houdiniInstances) {
- if (Monitor.TryEnter(houdini)) {
- return houdini;
- }
- Thread.Sleep(20);
- }
- }
- }
-
- private void EmitProgram(string filename)
- {
- using (TokenTextWriter writer = new TokenTextWriter(filename, true))
- {
- int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
- CommandLineOptions.Clo.PrintUnstructured = 2;
- program.Emit(writer);
- CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
- }
- }
-
-
- private static VCGenOutcome ChooseOutcome(VCGenOutcome o1, VCGenOutcome o2) {
- var vcOutcome1 = o1.outcome;
- var vcOutcome2 = o2.outcome;
-
- if(vcOutcome1 == vcOutcome2) {
- return o1;
- }
-
- // Errors trump everything else
- if(vcOutcome1 == VC.ConditionGeneration.Outcome.Errors) {
- return o1;
- }
- if(vcOutcome2 == VC.ConditionGeneration.Outcome.Errors) {
- return o2;
- }
-
- // If one outcome is Correct, return the other in case it is "worse"
- if(vcOutcome1 == VC.ConditionGeneration.Outcome.Correct) {
- return o2;
- }
- if(vcOutcome2 == VC.ConditionGeneration.Outcome.Correct) {
- return o1;
- }
-
- // Neither outcome is correct, so if one outcome is ReachedBound, return the other in case it is "worse"
- if(vcOutcome1 == VC.ConditionGeneration.Outcome.ReachedBound) {
- return o2;
- }
- if(vcOutcome2 == VC.ConditionGeneration.Outcome.ReachedBound) {
- return o1;
- }
-
- // Both outcomes must be timeout or memout; arbitrarily choose the first
- return o1;
- }
-
- internal class StagedHoudiniTask {
- internal ScheduledStage stage;
- internal Task parallelTask;
- internal StagedHoudiniTask(ScheduledStage stage, Task parallelTask) {
- this.stage = stage;
- this.parallelTask = parallelTask;
- }
- }
-
- }
-
- public class StagedHoudiniPlan : IEnumerable<ScheduledStage> {
-
- private Graph<ScheduledStage> ScheduledStages;
- private Dictionary<string, ScheduledStage> AnnotationToStage;
-
- internal StagedHoudiniPlan(Graph<ScheduledStage> ScheduledStages) {
- this.ScheduledStages = ScheduledStages;
- this.AnnotationToStage = new Dictionary<string, ScheduledStage>();
- foreach(var s in this) {
- Debug.Assert(!GetDependences(s).Contains(s));
- }
- }
-
- public IEnumerable<ScheduledStage> GetDependences(ScheduledStage s) {
- IEnumerable<ScheduledStage> result;
- lock(ScheduledStages) {
- result = ScheduledStages.Successors(s);
- }
- return result;
- }
-
-
- private static int CompareStages(ScheduledStage s1, ScheduledStage s2) {
- if(s1.GetId() < s2.GetId()) {
- return -1;
- }
- if(s2.GetId() < s1.GetId()) {
- return 1;
- }
- return 0;
- }
-
- public IEnumerator<ScheduledStage> GetEnumerator() {
- List<ScheduledStage> sortedStages = ScheduledStages.Nodes.ToList();
- sortedStages.Sort(CompareStages);
- return sortedStages.GetEnumerator();
- }
-
- System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
- {
- return this.GetEnumerator();
- }
-
- internal ScheduledStage StageForAnnotation(string c) {
- if(AnnotationToStage.ContainsKey(c)) {
- return AnnotationToStage[c];
- }
- foreach(var s in ScheduledStages.Nodes) {
- if(s.ContainsAnnotation(c)) {
- AnnotationToStage[c] = s;
- return s;
- }
- }
- return null;
- }
-
- public override string ToString()
- {
- string result = "";
- foreach(ScheduledStage s in this) {
- result += "Stage " + s;
-
- result += " depends on stages: ";
- foreach(var id in GetDependences(s).Select(Item => Item.GetId())) {
- result += id + " ";
- }
- result += "\n";
- }
- return result;
- }
- }
-
- public class ScheduledStage {
- private int Id;
- private HashSet<string> Annotations;
-
- public ScheduledStage(int Id, HashSet<string> Annotations) {
- this.Id = Id;
- this.Annotations = Annotations;
- }
-
- internal void AddAnnotation(string a) {
- Annotations.Add(a);
- }
-
- internal bool ContainsAnnotation(string a) {
- return Annotations.Contains(a);
- }
-
- public int GetId() {
- return Id;
- }
-
- public int Count() {
- return Annotations.Count();
- }
-
- public override string ToString()
- {
- string result = "ID: " + Id + "{ ";
- foreach(var c in Annotations) {
- result += c + " ";
- }
- result += "}\n";
- return result;
- }
- }
-
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics.Contracts;
+using System.Diagnostics;
+using System.Threading.Tasks;
+using System.Threading;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+
+namespace Microsoft.Boogie.Houdini
+{
+ public class StagedHoudini
+ {
+
+ private Program program;
+ private HoudiniSession.HoudiniStatistics houdiniStats;
+ private Func<string, Program> ProgramFromFile;
+ private StagedHoudiniPlan plan;
+ private List<Houdini>[] houdiniInstances;
+ private List<StagedHoudiniTask> tasks = new List<StagedHoudiniTask>();
+ private Dictionary<ScheduledStage, HoudiniOutcome> outcomes = new Dictionary<ScheduledStage,HoudiniOutcome>();
+
+ private const string tempFilename = "__stagedHoudiniTemp.bpl";
+
+ public StagedHoudini(Program program, HoudiniSession.HoudiniStatistics houdiniStats, Func<string, Program> ProgramFromFile) {
+ this.program = program;
+ this.houdiniStats = houdiniStats;
+ this.ProgramFromFile = ProgramFromFile;
+ this.houdiniInstances = new List<Houdini>[CommandLineOptions.Clo.StagedHoudiniThreads];
+ for (int i = 0; i < CommandLineOptions.Clo.StagedHoudiniThreads; i++) {
+ houdiniInstances[i] = new List<Houdini>();
+ }
+
+ BreakApartConjunctionsInAnnotations();
+
+ var annotationDependenceAnalyser = new AnnotationDependenceAnalyser(program);
+ annotationDependenceAnalyser.Analyse();
+ this.plan = annotationDependenceAnalyser.ApplyStages();
+ if (CommandLineOptions.Clo.Trace)
+ {
+ annotationDependenceAnalyser.dump();
+
+ if(CommandLineOptions.Clo.DebugStagedHoudini) {
+ Console.WriteLine("Plan\n====\n");
+ if(plan == null) {
+ Console.WriteLine("No plan, as there were no stages");
+ } else {
+ Console.WriteLine(this.plan);
+ }
+ }
+
+ EmitProgram("staged.bpl");
+ }
+ }
+
+ private void BreakApartConjunctionsInAnnotations()
+ {
+ // StagedHoudini works on a syntactic basis, so that
+ // if x and y occur in the same annotation, any annotation
+ // referring to either x or y will be in the same stage
+ // as this annotation. It is thus desirable to separate
+ // conjunctive annotations into multiple annotations,
+ // to reduce these syntactic dependencies.
+
+ foreach(var b in program.Blocks()) {
+ List<Cmd> newCmds = new List<Cmd>();
+ foreach(var c in b.Cmds) {
+ var assertion = c as AssertCmd;
+ if (assertion != null) {
+ foreach(var e in BreakIntoConjuncts(assertion.Expr)) {
+ newCmds.Add(new AssertCmd(assertion.tok, e, assertion.Attributes));
+ }
+ } else {
+ newCmds.Add(c);
+ }
+ }
+ b.Cmds = newCmds;
+ }
+
+ foreach(var proc in program.Procedures) {
+ {
+ var newRequires = new List<Requires>();
+ foreach(var r in proc.Requires) {
+ foreach(var c in BreakIntoConjuncts(r.Condition)) {
+ newRequires.Add(new Requires(r.tok, r.Free, c, r.Comment, r.Attributes));
+ }
+ }
+ proc.Requires = newRequires;
+ }
+ {
+ var newEnsures = new List<Ensures>();
+ foreach(var e in proc.Ensures) {
+ foreach(var c in BreakIntoConjuncts(e.Condition)) {
+ newEnsures.Add(new Ensures(e.tok, e.Free, c, e.Comment, e.Attributes));
+ }
+ }
+ proc.Ensures = newEnsures;
+ }
+ }
+ }
+
+ private List<Expr> BreakIntoConjuncts(Expr expr)
+ {
+ var nary = expr as NAryExpr;
+ if(nary == null) {
+ return new List<Expr> { expr };
+ }
+ var fun = nary.Fun as BinaryOperator;
+ if(fun == null || (fun.Op != BinaryOperator.Opcode.And)) {
+ return new List<Expr> { expr };
+ }
+ var result = new List<Expr>();
+ result.AddRange(BreakIntoConjuncts(nary.Args[0]));
+ result.AddRange(BreakIntoConjuncts(nary.Args[1]));
+ return result;
+ }
+
+ private bool NoStages() {
+ return plan == null;
+ }
+
+ public HoudiniOutcome PerformStagedHoudiniInference()
+ {
+
+ if (NoStages()) {
+ Houdini houdini = new Houdini(program, houdiniStats);
+ return houdini.PerformHoudiniInference();
+ }
+
+ EmitProgram(tempFilename);
+
+ #region Prepare the tasks, but do not launch them
+ foreach (var s in plan) {
+ Debug.Assert(!plan.GetDependences(s).Contains(s));
+ tasks.Add(new StagedHoudiniTask(s, new Task(o => {
+ ExecuteStage((ScheduledStage)o);
+ }, s, TaskCreationOptions.LongRunning)));
+ }
+ #endregion
+
+ #region Launch the tasks, and wait for them to finish
+ foreach (var t in tasks) {
+ t.parallelTask.Start();
+ }
+ Task.WaitAll(tasks.Select(Item => Item.parallelTask).ToArray());
+ int count = 0;
+ foreach(var h in houdiniInstances) {
+ if(h.Count() > 0) {
+ count++;
+ System.Diagnostics.Debug.Assert(h.Count() == 1);
+ h[0].Close();
+ }
+ }
+ #endregion
+
+ return UnifyOutcomes();
+
+ }
+
+ private HoudiniOutcome UnifyOutcomes()
+ {
+ HoudiniOutcome result = new HoudiniOutcome();
+ var scheduledStages = outcomes.Keys.ToList();
+
+ result.assignment = new Dictionary<string,bool>();
+ foreach(var c in outcomes[scheduledStages[0]].assignment.Keys) {
+ result.assignment[c] = outcomes.Select(Item => Item.Value).Select(Item => Item.assignment[c]).All(Item => Item);
+ }
+
+ result.implementationOutcomes = new Dictionary<string,VCGenOutcome>();
+ foreach(var p in outcomes[scheduledStages[0]].implementationOutcomes.Keys) {
+ var unifiedImplementationOutcome = outcomes[scheduledStages[0]].implementationOutcomes[p];
+ for(int i = 1; i < scheduledStages.Count(); i++) {
+ unifiedImplementationOutcome = ChooseOutcome(unifiedImplementationOutcome,
+ outcomes[scheduledStages[i]].implementationOutcomes[p]);
+ }
+ result.implementationOutcomes[p] = unifiedImplementationOutcome;
+ }
+
+ return result;
+ }
+
+ private void ExecuteStage(ScheduledStage s)
+ {
+ Task.WaitAll(tasks.Where(
+ Item => plan.GetDependences(s).Contains(Item.stage)).
+ Select(Item => Item.parallelTask).ToArray());
+
+ if(s.Count() == 0) {
+ // This is the trivial first stage, so don't launch Houdini;
+ // give this a null outcome
+ return;
+ }
+
+ List<Houdini> h = AcquireHoudiniInstance();
+
+ if (h.Count() == 0)
+ {
+ h.Add(new Houdini(ProgramFromFile(tempFilename), new HoudiniSession.HoudiniStatistics(), "houdiniCexTrace_" + s.GetId() + ".txt"));
+ }
+
+ System.Diagnostics.Debug.Assert(h.Count() == 1);
+
+ Dictionary<string, bool> mergedAssignment = null;
+
+ List<Dictionary<string, bool>> relevantAssignments;
+ IEnumerable<int> completedStages;
+ lock (outcomes)
+ {
+ relevantAssignments =
+ outcomes.Where(Item => plan.Contains(Item.Key)).
+ Select(Item => Item.Value).
+ Select(Item => Item.assignment).ToList();
+ completedStages = plan.GetDependences(s).Select(Item => Item.GetId());
+ }
+
+ if (relevantAssignments.Count() > 0)
+ {
+ mergedAssignment = new Dictionary<string, bool>();
+ foreach (var v in relevantAssignments[0].Keys)
+ {
+ mergedAssignment[v] = relevantAssignments.Select(Item => Item[v]).ToList().All(Item => Item);
+ }
+ }
+
+ HoudiniOutcome outcome = h[0].PerformHoudiniInference(
+ s.GetId(),
+ completedStages,
+ mergedAssignment);
+
+ lock (outcomes)
+ {
+ outcomes[s] = outcome;
+ }
+
+ ReleaseHoudiniInstance(h);
+
+ }
+
+ private static void ReleaseHoudiniInstance(List<Houdini> h)
+ {
+ Monitor.Exit(h);
+ }
+
+ private List<Houdini> AcquireHoudiniInstance()
+ {
+ while(true) {
+ foreach (var houdini in houdiniInstances) {
+ if (Monitor.TryEnter(houdini)) {
+ return houdini;
+ }
+ Thread.Sleep(20);
+ }
+ }
+ }
+
+ private void EmitProgram(string filename)
+ {
+ using (TokenTextWriter writer = new TokenTextWriter(filename, true))
+ {
+ int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
+ CommandLineOptions.Clo.PrintUnstructured = 2;
+ program.Emit(writer);
+ CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
+ }
+ }
+
+
+ private static VCGenOutcome ChooseOutcome(VCGenOutcome o1, VCGenOutcome o2) {
+ var vcOutcome1 = o1.outcome;
+ var vcOutcome2 = o2.outcome;
+
+ if(vcOutcome1 == vcOutcome2) {
+ return o1;
+ }
+
+ // Errors trump everything else
+ if(vcOutcome1 == VC.ConditionGeneration.Outcome.Errors) {
+ return o1;
+ }
+ if(vcOutcome2 == VC.ConditionGeneration.Outcome.Errors) {
+ return o2;
+ }
+
+ // If one outcome is Correct, return the other in case it is "worse"
+ if(vcOutcome1 == VC.ConditionGeneration.Outcome.Correct) {
+ return o2;
+ }
+ if(vcOutcome2 == VC.ConditionGeneration.Outcome.Correct) {
+ return o1;
+ }
+
+ // Neither outcome is correct, so if one outcome is ReachedBound, return the other in case it is "worse"
+ if(vcOutcome1 == VC.ConditionGeneration.Outcome.ReachedBound) {
+ return o2;
+ }
+ if(vcOutcome2 == VC.ConditionGeneration.Outcome.ReachedBound) {
+ return o1;
+ }
+
+ // Both outcomes must be timeout or memout; arbitrarily choose the first
+ return o1;
+ }
+
+ internal class StagedHoudiniTask {
+ internal ScheduledStage stage;
+ internal Task parallelTask;
+ internal StagedHoudiniTask(ScheduledStage stage, Task parallelTask) {
+ this.stage = stage;
+ this.parallelTask = parallelTask;
+ }
+ }
+
+ }
+
+ public class StagedHoudiniPlan : IEnumerable<ScheduledStage> {
+
+ private Graph<ScheduledStage> ScheduledStages;
+ private Dictionary<string, ScheduledStage> AnnotationToStage;
+
+ internal StagedHoudiniPlan(Graph<ScheduledStage> ScheduledStages) {
+ this.ScheduledStages = ScheduledStages;
+ this.AnnotationToStage = new Dictionary<string, ScheduledStage>();
+ foreach(var s in this) {
+ Debug.Assert(!GetDependences(s).Contains(s));
+ }
+ }
+
+ public IEnumerable<ScheduledStage> GetDependences(ScheduledStage s) {
+ IEnumerable<ScheduledStage> result;
+ lock(ScheduledStages) {
+ result = ScheduledStages.Successors(s);
+ }
+ return result;
+ }
+
+
+ private static int CompareStages(ScheduledStage s1, ScheduledStage s2) {
+ if(s1.GetId() < s2.GetId()) {
+ return -1;
+ }
+ if(s2.GetId() < s1.GetId()) {
+ return 1;
+ }
+ return 0;
+ }
+
+ public IEnumerator<ScheduledStage> GetEnumerator() {
+ List<ScheduledStage> sortedStages = ScheduledStages.Nodes.ToList();
+ sortedStages.Sort(CompareStages);
+ return sortedStages.GetEnumerator();
+ }
+
+ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+ {
+ return this.GetEnumerator();
+ }
+
+ internal ScheduledStage StageForAnnotation(string c) {
+ if(AnnotationToStage.ContainsKey(c)) {
+ return AnnotationToStage[c];
+ }
+ foreach(var s in ScheduledStages.Nodes) {
+ if(s.ContainsAnnotation(c)) {
+ AnnotationToStage[c] = s;
+ return s;
+ }
+ }
+ return null;
+ }
+
+ public override string ToString()
+ {
+ string result = "";
+ foreach(ScheduledStage s in this) {
+ result += "Stage " + s;
+
+ result += " depends on stages: ";
+ foreach(var id in GetDependences(s).Select(Item => Item.GetId())) {
+ result += id + " ";
+ }
+ result += "\n";
+ }
+ return result;
+ }
+ }
+
+ public class ScheduledStage {
+ private int Id;
+ private HashSet<string> Annotations;
+
+ public ScheduledStage(int Id, HashSet<string> Annotations) {
+ this.Id = Id;
+ this.Annotations = Annotations;
+ }
+
+ internal void AddAnnotation(string a) {
+ Annotations.Add(a);
+ }
+
+ internal bool ContainsAnnotation(string a) {
+ return Annotations.Contains(a);
+ }
+
+ public int GetId() {
+ return Id;
+ }
+
+ public int Count() {
+ return Annotations.Count();
+ }
+
+ public override string ToString()
+ {
+ string result = "ID: " + Id + "{ ";
+ foreach(var c in Annotations) {
+ result += c + " ";
+ }
+ result += "}\n";
+ return result;
+ }
+ }
+
+
+}
diff --git a/Source/Model/Model.cs b/Source/Model/Model.cs
index 76b7cb4a..1e71d6c2 100644
--- a/Source/Model/Model.cs
+++ b/Source/Model/Model.cs
@@ -1,706 +1,706 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-/*
-An instance of the Model class represents a single model returned from the SMT solver. This usually
-corresponds to a single verification error. The model consists of elements and function interpretations.
-Additionally the model may contain a number of captured states, each consisting of a user-supplied name
-a mapping from Boogie variable names to model elements.
-
-Model elements (which used to be called “partitions” in Z3) are represented by instances of the
-Model.Element class. Each element has an integer identity. The Element class has subclasses
-Uninterpreted, Boolean, Integer, BitVector, and Array. The classes correspond to different sorts of
-elements that the SMT solver may use. Each of these has properties for returning the actual
-value (true/false or a number; for bitvectors also size). For an array the interpretation is a
-particular function defined elsewhere in the model.
-
-A function interpretation is represented by Model.Func class. It consists of a name, arity, and
-a list of defining tuples. A defining tuple (Model.FuncTuple) for a function of arity N has
-N model elements as arguments and a single element as the result. A constant is a function
-of arity 0, with just one defining tuple. Given a constant function f, the result element of
-the defining tuple is retrieved with f.GetConstant().
-
-The Model.Element class exposes methods to look up all the functions that reference it in their
-defining tuples. Additionally Model.Func allows lookup of specific tuples, based on the elements.
-
-An instance of the Model class represents a single model returned from the SMT solver.
-
- */
-
-using System;
-using System.Linq;
-using System.Collections.Generic;
-using System.Text;
-using System.Diagnostics;
-using System.Text.RegularExpressions;
-
-namespace Microsoft.Boogie
-{
- public class Model
- {
- #region Elements and functions (inner classes)
- public enum ElementKind
- {
- Integer,
- BitVector,
- Boolean,
- Uninterpreted,
- Array,
- DataValue
- }
-
- abstract public class Element
- {
- public readonly Model Model;
- internal List<FuncTuple> references = new List<FuncTuple>();
- public readonly int Id;
-
- public IEnumerable<FuncTuple> References { get { return references; } }
-
- public IEnumerable<FuncTuple> Names {
- get {
- foreach (var f in references)
- if (f.Result == this) yield return f;
- }
- }
-
- protected Element(Model p)
- {
- Model = p;
- Id = Model.elements.Count;
- }
- public abstract ElementKind Kind { get; }
- public virtual int AsInt() { throw new NotImplementedException(); }
-
- public override int GetHashCode() {
- return Id;
- }
-
- public override bool Equals(object obj) {
- return obj == this;
- }
- }
-
- #region element kinds
- public class Uninterpreted : Element
- {
- public override ElementKind Kind { get { return ElementKind.Uninterpreted; } }
- public override string ToString() { return Name; }
-
- internal Uninterpreted(Model p, string n) : base(p) { Name = n; }
- public readonly string Name;
- }
-
- abstract public class Number : Element
- {
- protected Number(Model p, string n) : base(p) { Numeral = n; }
- public readonly string Numeral;
- public override int AsInt() { return int.Parse(Numeral); }
- }
-
- public class Integer : Number
- {
- internal Integer(Model p, string n) : base(p, n) { }
- public override ElementKind Kind { get { return ElementKind.Integer; } }
- public override string ToString() { return Numeral.ToString(); }
- }
-
- public class BitVector : Number
- {
- internal BitVector(Model p, string n, int sz) : base(p, n) { Size = sz; }
- public readonly int Size;
- public override ElementKind Kind { get { return ElementKind.BitVector; } }
- public override string ToString() { return string.Format("{0}bv{1}", Numeral, Size); }
- }
-
- public class Boolean : Element
- {
- public bool Value;
- internal Boolean(Model p, bool v) : base(p) { Value = v; }
- public override ElementKind Kind { get { return ElementKind.Boolean; } }
- public override string ToString() { return Value ? "true" : "false"; }
- }
-
- public class Array : Element
- {
- public Func Value;
- internal Array(Model p, Func v) : base(p) { Value = v; }
- public override ElementKind Kind { get { return ElementKind.Array; } }
- public override string ToString() { return string.Format("as-array[{0}]", Value.Name); }
- }
-
- public class DatatypeValue : Element
- {
- public readonly string ConstructorName;
- public readonly Element[] Arguments;
- internal DatatypeValue(Model p, string name, List<Element> args) : base(p) {
- ConstructorName = name;
- Arguments = args.ToArray();
- }
- public override ElementKind Kind { get { return ElementKind.DataValue; } }
- public override string ToString() {
- StringBuilder builder = new StringBuilder();
- builder.Append("(").Append(ConstructorName);
- foreach (Element arg in Arguments) {
- builder.Append(" ").Append(arg);
- }
- builder.Append(")");
- return builder.ToString();
- }
- }
- #endregion
-
- public class Func
- {
- public readonly Model Model;
- public readonly string Name;
- public readonly int Arity;
- internal readonly List<FuncTuple> apps = new List<FuncTuple>();
- public IEnumerable<FuncTuple> Apps { get { return apps; } }
- public int AppCount { get { return apps.Count; } }
- private Element @else;
-
- internal Func(Model p, string n, int a) { Model = p; Name = n; Arity = a; }
-
- public override string ToString()
- {
- return string.Format("{0}/{1}", Name, Arity);
- }
-
- internal void Substitute(Dictionary<Element, Element> mapping) {
- Element e;
- if (@else != null && mapping.TryGetValue(@else, out e))
- @else = e;
- foreach (var ft in apps) {
- if (mapping.TryGetValue(ft.Result, out e)) ft.Result = e;
- for (var i = 0; i < ft.Args.Length; ++i)
- if (mapping.TryGetValue(ft.Args[i], out e)) ft.Args[i] = e;
- }
- }
-
- public Element Else
- {
- get
- {
- return @else;
- }
- set
- {
- if (@else != null)
- throw new ArgumentException();
- @else = value;
- }
- }
-
- public void SetConstant(Element res)
- {
- if (Arity != 0 || apps.Count > 0)
- throw new ArgumentException();
- var t = new FuncTuple(this, res, null);
- apps.Add(t);
- res.references.Add(t);
- }
-
- /// <summary>
- /// Return the first application where the argument at position argIdx is elt.
- /// </summary>
- public FuncTuple AppWithArg(int argIdx, Element elt)
- {
- foreach (var a in AppsWithArg(argIdx, elt))
- return a;
- return null;
- }
-
- /// <summary>
- /// Return the first application with the result elt.
- /// </summary>
- public FuncTuple AppWithResult(Element elt)
- {
- foreach (var a in AppsWithResult(elt))
- return a;
- return null;
- }
-
- /// <summary>
- /// Return all applications where the argument at position argIdx is elt.
- /// </summary>
- public IEnumerable<FuncTuple> AppsWithArg(int argIdx, Element elt)
- {
- foreach (var r in elt.References) {
- if (r.Func == this && r.Args[argIdx] == elt)
- yield return r;
- }
- }
-
- /// <summary>
- /// Return all applications where the argument at position argIdx0 is elt0 and argument at argIdx1 is elt1.
- /// </summary>
- public IEnumerable<FuncTuple> AppsWithArgs(int argIdx0, Element elt0, int argIdx1, Element elt1)
- {
- foreach (var r in elt0.References) {
- if (r.Func == this && r.Args[argIdx0] == elt0 && r.Args[argIdx1] == elt1)
- yield return r;
- }
- }
-
- /// <summary>
- /// Return all the applications with the result elt.
- /// </summary>
- public IEnumerable<FuncTuple> AppsWithResult(Element elt)
- {
- foreach (var r in elt.References) {
- if (r.Func == this && r.Result == elt)
- yield return r;
- }
- }
-
- /// <summary>
- /// For a nullary function, return its value.
- /// </summary>
- public Element GetConstant()
- {
- if (Arity != 0)
- throw new ArgumentException();
- if (apps.Count == 0)
- SetConstant(Model.MkElement("**" + Name));
- return apps[0].Result;
- }
-
- /// <summary>
- /// If all arguments are non-null, and function application for them exists return the value, otherwise return null.
- /// </summary>
- public Element OptEval(params Element[] args)
- {
- if (args.Any(a => a == null)) return null;
- return TryEval(args);
- }
-
- /// <summary>
- /// Look for function application with given arguments and return its value or null if no such application exists.
- /// </summary>
- public Element TryEval(params Element[] args)
- {
- for (int i = 0; i < args.Length; ++i)
- if(args[i]==null)
- throw new ArgumentException();
-
- if (apps.Count > 10) {
- var best = apps;
- for (int i = 0; i < args.Length; ++i)
- if (args[i].references.Count < best.Count)
- best = args[i].references;
- if (best != apps) {
- foreach (var tpl in best) {
- bool same = true;
- if (tpl.Func != this)
- continue;
- for (int i = 0; i < args.Length; ++i)
- if (tpl.Args[i] != args[i]) {
- same = false;
- break;
- }
- if (same) return tpl.Result;
- }
- return null;
- }
- }
-
- foreach (var tpl in apps) {
- bool same = true;
- for (int i = 0; i < args.Length; ++i)
- if (tpl.Args[i] != args[i]) {
- same = false;
- break;
- }
- if (same) return tpl.Result;
- }
- return null;
- }
-
- /// <summary>
- /// Look for function application with a subsequence of given arguments and return its value or null if no such application exists.
- /// </summary>
- public Element TryPartialEval(params Element[] args)
- {
- foreach (var tpl in apps) {
- int j = 0;
- for (int i = 0; i < args.Length; ++i) {
- if (tpl.Args[j] == args[i]) {
- j++;
- if (j == tpl.Args.Length)
- return tpl.Result;
- }
- }
- }
- return null;
- }
-
- /// <summary>
- /// Short for TryEval(args) == (Element)true
- /// </summary>
- public bool IsTrue(params Element[] args)
- {
- var r = TryEval(args) as Boolean;
- return r != null && r.Value;
- }
-
- /// <summary>
- /// Short for TryEval(args) == (Element)false
- /// </summary>
- public bool IsFalse(params Element[] args)
- {
- var r = TryEval(args) as Boolean;
- return r != null && !r.Value;
- }
-
- public void AddApp(Element res, params Element[] args)
- {
- if (Arity == 0)
- SetConstant(res);
- else {
- if (args.Length != Arity)
- throw new ArgumentException();
- var t = new FuncTuple(this, res, (Element[])args.Clone());
- apps.Add(t);
- var u = new HashSet<Element>();
- res.references.Add(t);
- u.Add(res);
- foreach (var a in args)
- if (!u.Contains(a)) {
- u.Add(a);
- a.references.Add(t);
- }
- }
- }
- }
-
- public class FuncTuple
- {
- static readonly Element[] EmptyArgs = new Element[0];
-
- // These should be immutable, except when Substituting the entire model
- public readonly Func Func;
- public Element Result;
- public readonly Element[] Args;
-
- internal FuncTuple(Func func, Element res, Element[] args)
- {
- if (args == null) Args = EmptyArgs;
- else Args = args;
- Func = func;
- Result = res;
- }
-
- public override string ToString()
- {
- var res = new StringBuilder();
- res.Append("(").Append(Func.Name);
- for (int i = 0; i < Args.Length; ++i) {
- res.Append(" ").Append(Args[i]);
- }
- res.Append(") -> ").Append(Result);
- return res.ToString();
- }
- }
- #endregion
-
- private List<Func> functions = new List<Func>();
- private List<Element> elements = new List<Element>();
- private List<CapturedState> states = new List<CapturedState>();
- private Dictionary<string, Func> functionsByName = new Dictionary<string, Func>();
- private Dictionary<string, Element> elementsByName = new Dictionary<string, Element>();
-
- #region factory methods
- Element ConstructElement(string name)
- {
- if (name.ToLower() == "true") return True;
- if (name.ToLower() == "false") return False;
-
- if (name.StartsWith("bv") && name.Length > 4 && Char.IsDigit(name[2]))
- name = name.Substring(2);
-
- if (Char.IsDigit(name[0]) || name[0] == '-') {
- int col = name.IndexOf("bv");
- int szi = -1;
-
- if (name.EndsWith(":int"))
- name = name.Substring(0, name.Length - 4);
-
- if (col > 0) {
- if (int.TryParse(name.Substring(col + 2), out szi) && szi > 0) {
- name = name.Substring(0, col);
- } else {
- return null;
- }
- } else if (name.EndsWith("]")) {
- col = name.IndexOf("[");
- if (col > 0 && int.TryParse(name.Substring(col + 1, name.Length - col - 2), out szi) && szi > 0) {
- name = name.Substring(0, col);
- } else {
- return null;
- }
- }
-
- for (int i = 1; i < name.Length; ++i)
- if (!Char.IsDigit(name[i]))
- return null;
-
- if (szi > 0)
- return new BitVector(this, name, szi);
- else
- return new Integer(this, name);
- } else if (name[0] == '*' || name.StartsWith("val!") || name.Contains("!val!")) {
- return new Uninterpreted(this, name);
- } else if (name.StartsWith("as-array[") && name.EndsWith("]")) {
- var fnName = name.Substring(9, name.Length - 10);
- return new Array(this, MkFunc(fnName, 1));
- } else {
- return new DatatypeValue(this, name, new List<Element>());
- }
- }
-
- public Element TryMkElement(string name)
- {
- Element res;
-
- if (elementsByName.TryGetValue(name, out res))
- return res;
-
- var tmp = ConstructElement(name);
- if (tmp == null) return null;
-
- name = tmp.ToString();
- if (elementsByName.TryGetValue(name, out res))
- return res;
-
- elementsByName.Add(name, tmp);
- elements.Add(tmp);
- return tmp;
- }
-
- public Element MkElement(string name)
- {
- Element res = TryMkElement(name);
- if (res == null)
- throw new ArgumentException("invalid element name: '" + name + "'");
- return res;
- }
-
- public Func MkFunc(string name, int arity)
- {
- Func res;
- if (functionsByName.TryGetValue(name, out res)) {
- if (res.Arity != arity)
- throw new ArgumentException(string.Format("function '{0}' previously created with arity {1}, now trying to recreate with arity {2}", name, res.Arity, arity));
- return res;
- }
- res = new Func(this, name, arity);
- functionsByName.Add(name, res);
- functions.Add(res);
- return res;
- }
- #endregion
-
- #region state management
- public class CapturedState
- {
- List<string> vars = new List<string>();
- Dictionary<string, Element> valuations = new Dictionary<string, Element>();
- readonly CapturedState previous;
- // AL: Dropping "readonly" for corral
- public /* readonly */ string Name { get; private set; }
-
- public IEnumerable<string> Variables { get { return vars; } }
- public IEnumerable<string> AllVariables {
- get {
- if (previous != null)
- return previous.AllVariables.Concat(Variables).Distinct();
- else
- return Variables;
- }
- }
- public int VariableCount { get { return vars.Count; } }
- public bool HasBinding(string varname)
- {
- return valuations.ContainsKey(varname);
- }
- public Element TryGet(string varname)
- {
- CapturedState curr = this;
- while (curr != null) {
- Element res;
- if (curr.valuations.TryGetValue(varname, out res))
- return res;
- curr = curr.previous;
- }
- return null;
- }
-
- public void AddBinding(string varname, Element value)
- {
- vars.Add(varname);
- valuations.Add(varname, value);
- }
-
- // Change name of the state
- public void ChangeName(string newName)
- {
- Name = newName;
- }
-
- // Change names of variables in this state
- // (Used by corral)
- internal void ChangeVariableNames(Dictionary<string, string> varNameMap)
- {
- var oldVars = vars;
- var oldValuations = valuations;
-
- vars = new List<string>();
- valuations = new Dictionary<string, Element>();
-
- foreach (var v in oldVars)
- {
- if (varNameMap.ContainsKey(v)) vars.Add(varNameMap[v]);
- else vars.Add(v);
- }
-
- foreach (var kvp in oldValuations)
- {
- if (varNameMap.ContainsKey(kvp.Key)) valuations.Add(varNameMap[kvp.Key], kvp.Value);
- else valuations.Add(kvp.Key, kvp.Value);
- }
- }
-
- internal CapturedState(string name, CapturedState prev)
- {
- Name = name;
- previous = prev;
- }
- }
-
- public CapturedState MkState(string name)
- {
- var last = states[states.Count - 1];
- var s = new CapturedState(name, last);
- states.Add(s);
- return s;
- }
-
- // Change names of variables in all captured states
- // (Used by corral)
- public void ChangeVariableNames(Dictionary<string, string> varNameMap)
- {
- foreach (var s in states)
- {
- s.ChangeVariableNames(varNameMap);
- }
- }
-
- #endregion
-
- public Model()
- {
- InitialState = new CapturedState("<initial>", null);
- states.Add(InitialState);
- True = new Boolean(this, true);
- elements.Add(True);
- elementsByName.Add("true", True);
- False = new Boolean(this, false);
- elements.Add(False);
- elementsByName.Add("false", False);
- }
-
- public IEnumerable<Func> Functions { get { return functions; } }
- public IEnumerable<Element> Elements { get { return elements; } }
- public IEnumerable<CapturedState> States { get { return states; } }
- public readonly Element True, False;
- public readonly CapturedState InitialState;
-
- public bool HasFunc(string name)
- {
- return functionsByName.ContainsKey(name);
- }
-
- public Func TryGetFunc(string name)
- {
- Func res;
- if (functionsByName.TryGetValue(name, out res))
- return res;
- else
- return null;
- }
-
- public Func GetFunc(string name)
- {
- Func res = TryGetFunc(name);
- if (res == null)
- throw new KeyNotFoundException("function '" + name + "' undefined in the model");
- return res;
- }
-
- public Func TryGetSkolemFunc(string name)
- {
- return Functions.Where(f => f.Name.StartsWith(name + "!")).FirstOrDefault();
- }
-
- public Element GetElement(string name)
- {
- Element res;
- if (elementsByName.TryGetValue(name, out res))
- return res;
- else
- throw new KeyNotFoundException("element '" + name + "' undefined in the model");
- }
-
- public Element MkIntElement(int v)
- {
- return MkElement(v.ToString());
- }
-
- public void Write(System.IO.TextWriter wr)
- {
- wr.WriteLine("*** MODEL");
- foreach (var f in Functions.OrderBy(f => f.Name))
- if (f.Arity == 0) {
- wr.WriteLine("{0} -> {1}", f.Name, f.GetConstant());
- }
- foreach (var f in Functions)
- if (f.Arity != 0) {
- wr.WriteLine("{0} -> {1}", f.Name, "{");
- foreach (var app in f.Apps) {
- wr.Write(" ");
- foreach (var a in app.Args)
- wr.Write("{0} ", a);
- wr.WriteLine("-> {0}", app.Result);
- }
- if (f.Else != null)
- wr.WriteLine(" else -> {0}", f.Else);
- wr.WriteLine("}");
- }
- foreach (var s in States) {
- if (s == InitialState && s.VariableCount == 0)
- continue;
- wr.WriteLine("*** STATE {0}", s.Name);
- foreach (var v in s.Variables)
- wr.WriteLine(" {0} -> {1}", v, s.TryGet(v));
- wr.WriteLine("*** END_STATE", s.Name);
- }
- wr.WriteLine("*** END_MODEL");
- }
-
- public void Substitute(Dictionary<Element, Element> mapping) {
- foreach (var f in functions) f.Substitute(mapping);
- }
-
- public static List<Model> ParseModels(System.IO.TextReader rd)
- {
- ModelParser p = new ParserZ3();
- p.rd = rd;
- p.Run();
- return p.resModels;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+/*
+An instance of the Model class represents a single model returned from the SMT solver. This usually
+corresponds to a single verification error. The model consists of elements and function interpretations.
+Additionally the model may contain a number of captured states, each consisting of a user-supplied name
+a mapping from Boogie variable names to model elements.
+
+Model elements (which used to be called “partitions” in Z3) are represented by instances of the
+Model.Element class. Each element has an integer identity. The Element class has subclasses
+Uninterpreted, Boolean, Integer, BitVector, and Array. The classes correspond to different sorts of
+elements that the SMT solver may use. Each of these has properties for returning the actual
+value (true/false or a number; for bitvectors also size). For an array the interpretation is a
+particular function defined elsewhere in the model.
+
+A function interpretation is represented by Model.Func class. It consists of a name, arity, and
+a list of defining tuples. A defining tuple (Model.FuncTuple) for a function of arity N has
+N model elements as arguments and a single element as the result. A constant is a function
+of arity 0, with just one defining tuple. Given a constant function f, the result element of
+the defining tuple is retrieved with f.GetConstant().
+
+The Model.Element class exposes methods to look up all the functions that reference it in their
+defining tuples. Additionally Model.Func allows lookup of specific tuples, based on the elements.
+
+An instance of the Model class represents a single model returned from the SMT solver.
+
+ */
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Text;
+using System.Diagnostics;
+using System.Text.RegularExpressions;
+
+namespace Microsoft.Boogie
+{
+ public class Model
+ {
+ #region Elements and functions (inner classes)
+ public enum ElementKind
+ {
+ Integer,
+ BitVector,
+ Boolean,
+ Uninterpreted,
+ Array,
+ DataValue
+ }
+
+ abstract public class Element
+ {
+ public readonly Model Model;
+ internal List<FuncTuple> references = new List<FuncTuple>();
+ public readonly int Id;
+
+ public IEnumerable<FuncTuple> References { get { return references; } }
+
+ public IEnumerable<FuncTuple> Names {
+ get {
+ foreach (var f in references)
+ if (f.Result == this) yield return f;
+ }
+ }
+
+ protected Element(Model p)
+ {
+ Model = p;
+ Id = Model.elements.Count;
+ }
+ public abstract ElementKind Kind { get; }
+ public virtual int AsInt() { throw new NotImplementedException(); }
+
+ public override int GetHashCode() {
+ return Id;
+ }
+
+ public override bool Equals(object obj) {
+ return obj == this;
+ }
+ }
+
+ #region element kinds
+ public class Uninterpreted : Element
+ {
+ public override ElementKind Kind { get { return ElementKind.Uninterpreted; } }
+ public override string ToString() { return Name; }
+
+ internal Uninterpreted(Model p, string n) : base(p) { Name = n; }
+ public readonly string Name;
+ }
+
+ abstract public class Number : Element
+ {
+ protected Number(Model p, string n) : base(p) { Numeral = n; }
+ public readonly string Numeral;
+ public override int AsInt() { return int.Parse(Numeral); }
+ }
+
+ public class Integer : Number
+ {
+ internal Integer(Model p, string n) : base(p, n) { }
+ public override ElementKind Kind { get { return ElementKind.Integer; } }
+ public override string ToString() { return Numeral.ToString(); }
+ }
+
+ public class BitVector : Number
+ {
+ internal BitVector(Model p, string n, int sz) : base(p, n) { Size = sz; }
+ public readonly int Size;
+ public override ElementKind Kind { get { return ElementKind.BitVector; } }
+ public override string ToString() { return string.Format("{0}bv{1}", Numeral, Size); }
+ }
+
+ public class Boolean : Element
+ {
+ public bool Value;
+ internal Boolean(Model p, bool v) : base(p) { Value = v; }
+ public override ElementKind Kind { get { return ElementKind.Boolean; } }
+ public override string ToString() { return Value ? "true" : "false"; }
+ }
+
+ public class Array : Element
+ {
+ public Func Value;
+ internal Array(Model p, Func v) : base(p) { Value = v; }
+ public override ElementKind Kind { get { return ElementKind.Array; } }
+ public override string ToString() { return string.Format("as-array[{0}]", Value.Name); }
+ }
+
+ public class DatatypeValue : Element
+ {
+ public readonly string ConstructorName;
+ public readonly Element[] Arguments;
+ internal DatatypeValue(Model p, string name, List<Element> args) : base(p) {
+ ConstructorName = name;
+ Arguments = args.ToArray();
+ }
+ public override ElementKind Kind { get { return ElementKind.DataValue; } }
+ public override string ToString() {
+ StringBuilder builder = new StringBuilder();
+ builder.Append("(").Append(ConstructorName);
+ foreach (Element arg in Arguments) {
+ builder.Append(" ").Append(arg);
+ }
+ builder.Append(")");
+ return builder.ToString();
+ }
+ }
+ #endregion
+
+ public class Func
+ {
+ public readonly Model Model;
+ public readonly string Name;
+ public readonly int Arity;
+ internal readonly List<FuncTuple> apps = new List<FuncTuple>();
+ public IEnumerable<FuncTuple> Apps { get { return apps; } }
+ public int AppCount { get { return apps.Count; } }
+ private Element @else;
+
+ internal Func(Model p, string n, int a) { Model = p; Name = n; Arity = a; }
+
+ public override string ToString()
+ {
+ return string.Format("{0}/{1}", Name, Arity);
+ }
+
+ internal void Substitute(Dictionary<Element, Element> mapping) {
+ Element e;
+ if (@else != null && mapping.TryGetValue(@else, out e))
+ @else = e;
+ foreach (var ft in apps) {
+ if (mapping.TryGetValue(ft.Result, out e)) ft.Result = e;
+ for (var i = 0; i < ft.Args.Length; ++i)
+ if (mapping.TryGetValue(ft.Args[i], out e)) ft.Args[i] = e;
+ }
+ }
+
+ public Element Else
+ {
+ get
+ {
+ return @else;
+ }
+ set
+ {
+ if (@else != null)
+ throw new ArgumentException();
+ @else = value;
+ }
+ }
+
+ public void SetConstant(Element res)
+ {
+ if (Arity != 0 || apps.Count > 0)
+ throw new ArgumentException();
+ var t = new FuncTuple(this, res, null);
+ apps.Add(t);
+ res.references.Add(t);
+ }
+
+ /// <summary>
+ /// Return the first application where the argument at position argIdx is elt.
+ /// </summary>
+ public FuncTuple AppWithArg(int argIdx, Element elt)
+ {
+ foreach (var a in AppsWithArg(argIdx, elt))
+ return a;
+ return null;
+ }
+
+ /// <summary>
+ /// Return the first application with the result elt.
+ /// </summary>
+ public FuncTuple AppWithResult(Element elt)
+ {
+ foreach (var a in AppsWithResult(elt))
+ return a;
+ return null;
+ }
+
+ /// <summary>
+ /// Return all applications where the argument at position argIdx is elt.
+ /// </summary>
+ public IEnumerable<FuncTuple> AppsWithArg(int argIdx, Element elt)
+ {
+ foreach (var r in elt.References) {
+ if (r.Func == this && r.Args[argIdx] == elt)
+ yield return r;
+ }
+ }
+
+ /// <summary>
+ /// Return all applications where the argument at position argIdx0 is elt0 and argument at argIdx1 is elt1.
+ /// </summary>
+ public IEnumerable<FuncTuple> AppsWithArgs(int argIdx0, Element elt0, int argIdx1, Element elt1)
+ {
+ foreach (var r in elt0.References) {
+ if (r.Func == this && r.Args[argIdx0] == elt0 && r.Args[argIdx1] == elt1)
+ yield return r;
+ }
+ }
+
+ /// <summary>
+ /// Return all the applications with the result elt.
+ /// </summary>
+ public IEnumerable<FuncTuple> AppsWithResult(Element elt)
+ {
+ foreach (var r in elt.References) {
+ if (r.Func == this && r.Result == elt)
+ yield return r;
+ }
+ }
+
+ /// <summary>
+ /// For a nullary function, return its value.
+ /// </summary>
+ public Element GetConstant()
+ {
+ if (Arity != 0)
+ throw new ArgumentException();
+ if (apps.Count == 0)
+ SetConstant(Model.MkElement("**" + Name));
+ return apps[0].Result;
+ }
+
+ /// <summary>
+ /// If all arguments are non-null, and function application for them exists return the value, otherwise return null.
+ /// </summary>
+ public Element OptEval(params Element[] args)
+ {
+ if (args.Any(a => a == null)) return null;
+ return TryEval(args);
+ }
+
+ /// <summary>
+ /// Look for function application with given arguments and return its value or null if no such application exists.
+ /// </summary>
+ public Element TryEval(params Element[] args)
+ {
+ for (int i = 0; i < args.Length; ++i)
+ if(args[i]==null)
+ throw new ArgumentException();
+
+ if (apps.Count > 10) {
+ var best = apps;
+ for (int i = 0; i < args.Length; ++i)
+ if (args[i].references.Count < best.Count)
+ best = args[i].references;
+ if (best != apps) {
+ foreach (var tpl in best) {
+ bool same = true;
+ if (tpl.Func != this)
+ continue;
+ for (int i = 0; i < args.Length; ++i)
+ if (tpl.Args[i] != args[i]) {
+ same = false;
+ break;
+ }
+ if (same) return tpl.Result;
+ }
+ return null;
+ }
+ }
+
+ foreach (var tpl in apps) {
+ bool same = true;
+ for (int i = 0; i < args.Length; ++i)
+ if (tpl.Args[i] != args[i]) {
+ same = false;
+ break;
+ }
+ if (same) return tpl.Result;
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// Look for function application with a subsequence of given arguments and return its value or null if no such application exists.
+ /// </summary>
+ public Element TryPartialEval(params Element[] args)
+ {
+ foreach (var tpl in apps) {
+ int j = 0;
+ for (int i = 0; i < args.Length; ++i) {
+ if (tpl.Args[j] == args[i]) {
+ j++;
+ if (j == tpl.Args.Length)
+ return tpl.Result;
+ }
+ }
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// Short for TryEval(args) == (Element)true
+ /// </summary>
+ public bool IsTrue(params Element[] args)
+ {
+ var r = TryEval(args) as Boolean;
+ return r != null && r.Value;
+ }
+
+ /// <summary>
+ /// Short for TryEval(args) == (Element)false
+ /// </summary>
+ public bool IsFalse(params Element[] args)
+ {
+ var r = TryEval(args) as Boolean;
+ return r != null && !r.Value;
+ }
+
+ public void AddApp(Element res, params Element[] args)
+ {
+ if (Arity == 0)
+ SetConstant(res);
+ else {
+ if (args.Length != Arity)
+ throw new ArgumentException();
+ var t = new FuncTuple(this, res, (Element[])args.Clone());
+ apps.Add(t);
+ var u = new HashSet<Element>();
+ res.references.Add(t);
+ u.Add(res);
+ foreach (var a in args)
+ if (!u.Contains(a)) {
+ u.Add(a);
+ a.references.Add(t);
+ }
+ }
+ }
+ }
+
+ public class FuncTuple
+ {
+ static readonly Element[] EmptyArgs = new Element[0];
+
+ // These should be immutable, except when Substituting the entire model
+ public readonly Func Func;
+ public Element Result;
+ public readonly Element[] Args;
+
+ internal FuncTuple(Func func, Element res, Element[] args)
+ {
+ if (args == null) Args = EmptyArgs;
+ else Args = args;
+ Func = func;
+ Result = res;
+ }
+
+ public override string ToString()
+ {
+ var res = new StringBuilder();
+ res.Append("(").Append(Func.Name);
+ for (int i = 0; i < Args.Length; ++i) {
+ res.Append(" ").Append(Args[i]);
+ }
+ res.Append(") -> ").Append(Result);
+ return res.ToString();
+ }
+ }
+ #endregion
+
+ private List<Func> functions = new List<Func>();
+ private List<Element> elements = new List<Element>();
+ private List<CapturedState> states = new List<CapturedState>();
+ private Dictionary<string, Func> functionsByName = new Dictionary<string, Func>();
+ private Dictionary<string, Element> elementsByName = new Dictionary<string, Element>();
+
+ #region factory methods
+ Element ConstructElement(string name)
+ {
+ if (name.ToLower() == "true") return True;
+ if (name.ToLower() == "false") return False;
+
+ if (name.StartsWith("bv") && name.Length > 4 && Char.IsDigit(name[2]))
+ name = name.Substring(2);
+
+ if (Char.IsDigit(name[0]) || name[0] == '-') {
+ int col = name.IndexOf("bv");
+ int szi = -1;
+
+ if (name.EndsWith(":int"))
+ name = name.Substring(0, name.Length - 4);
+
+ if (col > 0) {
+ if (int.TryParse(name.Substring(col + 2), out szi) && szi > 0) {
+ name = name.Substring(0, col);
+ } else {
+ return null;
+ }
+ } else if (name.EndsWith("]")) {
+ col = name.IndexOf("[");
+ if (col > 0 && int.TryParse(name.Substring(col + 1, name.Length - col - 2), out szi) && szi > 0) {
+ name = name.Substring(0, col);
+ } else {
+ return null;
+ }
+ }
+
+ for (int i = 1; i < name.Length; ++i)
+ if (!Char.IsDigit(name[i]))
+ return null;
+
+ if (szi > 0)
+ return new BitVector(this, name, szi);
+ else
+ return new Integer(this, name);
+ } else if (name[0] == '*' || name.StartsWith("val!") || name.Contains("!val!")) {
+ return new Uninterpreted(this, name);
+ } else if (name.StartsWith("as-array[") && name.EndsWith("]")) {
+ var fnName = name.Substring(9, name.Length - 10);
+ return new Array(this, MkFunc(fnName, 1));
+ } else {
+ return new DatatypeValue(this, name, new List<Element>());
+ }
+ }
+
+ public Element TryMkElement(string name)
+ {
+ Element res;
+
+ if (elementsByName.TryGetValue(name, out res))
+ return res;
+
+ var tmp = ConstructElement(name);
+ if (tmp == null) return null;
+
+ name = tmp.ToString();
+ if (elementsByName.TryGetValue(name, out res))
+ return res;
+
+ elementsByName.Add(name, tmp);
+ elements.Add(tmp);
+ return tmp;
+ }
+
+ public Element MkElement(string name)
+ {
+ Element res = TryMkElement(name);
+ if (res == null)
+ throw new ArgumentException("invalid element name: '" + name + "'");
+ return res;
+ }
+
+ public Func MkFunc(string name, int arity)
+ {
+ Func res;
+ if (functionsByName.TryGetValue(name, out res)) {
+ if (res.Arity != arity)
+ throw new ArgumentException(string.Format("function '{0}' previously created with arity {1}, now trying to recreate with arity {2}", name, res.Arity, arity));
+ return res;
+ }
+ res = new Func(this, name, arity);
+ functionsByName.Add(name, res);
+ functions.Add(res);
+ return res;
+ }
+ #endregion
+
+ #region state management
+ public class CapturedState
+ {
+ List<string> vars = new List<string>();
+ Dictionary<string, Element> valuations = new Dictionary<string, Element>();
+ readonly CapturedState previous;
+ // AL: Dropping "readonly" for corral
+ public /* readonly */ string Name { get; private set; }
+
+ public IEnumerable<string> Variables { get { return vars; } }
+ public IEnumerable<string> AllVariables {
+ get {
+ if (previous != null)
+ return previous.AllVariables.Concat(Variables).Distinct();
+ else
+ return Variables;
+ }
+ }
+ public int VariableCount { get { return vars.Count; } }
+ public bool HasBinding(string varname)
+ {
+ return valuations.ContainsKey(varname);
+ }
+ public Element TryGet(string varname)
+ {
+ CapturedState curr = this;
+ while (curr != null) {
+ Element res;
+ if (curr.valuations.TryGetValue(varname, out res))
+ return res;
+ curr = curr.previous;
+ }
+ return null;
+ }
+
+ public void AddBinding(string varname, Element value)
+ {
+ vars.Add(varname);
+ valuations.Add(varname, value);
+ }
+
+ // Change name of the state
+ public void ChangeName(string newName)
+ {
+ Name = newName;
+ }
+
+ // Change names of variables in this state
+ // (Used by corral)
+ internal void ChangeVariableNames(Dictionary<string, string> varNameMap)
+ {
+ var oldVars = vars;
+ var oldValuations = valuations;
+
+ vars = new List<string>();
+ valuations = new Dictionary<string, Element>();
+
+ foreach (var v in oldVars)
+ {
+ if (varNameMap.ContainsKey(v)) vars.Add(varNameMap[v]);
+ else vars.Add(v);
+ }
+
+ foreach (var kvp in oldValuations)
+ {
+ if (varNameMap.ContainsKey(kvp.Key)) valuations.Add(varNameMap[kvp.Key], kvp.Value);
+ else valuations.Add(kvp.Key, kvp.Value);
+ }
+ }
+
+ internal CapturedState(string name, CapturedState prev)
+ {
+ Name = name;
+ previous = prev;
+ }
+ }
+
+ public CapturedState MkState(string name)
+ {
+ var last = states[states.Count - 1];
+ var s = new CapturedState(name, last);
+ states.Add(s);
+ return s;
+ }
+
+ // Change names of variables in all captured states
+ // (Used by corral)
+ public void ChangeVariableNames(Dictionary<string, string> varNameMap)
+ {
+ foreach (var s in states)
+ {
+ s.ChangeVariableNames(varNameMap);
+ }
+ }
+
+ #endregion
+
+ public Model()
+ {
+ InitialState = new CapturedState("<initial>", null);
+ states.Add(InitialState);
+ True = new Boolean(this, true);
+ elements.Add(True);
+ elementsByName.Add("true", True);
+ False = new Boolean(this, false);
+ elements.Add(False);
+ elementsByName.Add("false", False);
+ }
+
+ public IEnumerable<Func> Functions { get { return functions; } }
+ public IEnumerable<Element> Elements { get { return elements; } }
+ public IEnumerable<CapturedState> States { get { return states; } }
+ public readonly Element True, False;
+ public readonly CapturedState InitialState;
+
+ public bool HasFunc(string name)
+ {
+ return functionsByName.ContainsKey(name);
+ }
+
+ public Func TryGetFunc(string name)
+ {
+ Func res;
+ if (functionsByName.TryGetValue(name, out res))
+ return res;
+ else
+ return null;
+ }
+
+ public Func GetFunc(string name)
+ {
+ Func res = TryGetFunc(name);
+ if (res == null)
+ throw new KeyNotFoundException("function '" + name + "' undefined in the model");
+ return res;
+ }
+
+ public Func TryGetSkolemFunc(string name)
+ {
+ return Functions.Where(f => f.Name.StartsWith(name + "!")).FirstOrDefault();
+ }
+
+ public Element GetElement(string name)
+ {
+ Element res;
+ if (elementsByName.TryGetValue(name, out res))
+ return res;
+ else
+ throw new KeyNotFoundException("element '" + name + "' undefined in the model");
+ }
+
+ public Element MkIntElement(int v)
+ {
+ return MkElement(v.ToString());
+ }
+
+ public void Write(System.IO.TextWriter wr)
+ {
+ wr.WriteLine("*** MODEL");
+ foreach (var f in Functions.OrderBy(f => f.Name))
+ if (f.Arity == 0) {
+ wr.WriteLine("{0} -> {1}", f.Name, f.GetConstant());
+ }
+ foreach (var f in Functions)
+ if (f.Arity != 0) {
+ wr.WriteLine("{0} -> {1}", f.Name, "{");
+ foreach (var app in f.Apps) {
+ wr.Write(" ");
+ foreach (var a in app.Args)
+ wr.Write("{0} ", a);
+ wr.WriteLine("-> {0}", app.Result);
+ }
+ if (f.Else != null)
+ wr.WriteLine(" else -> {0}", f.Else);
+ wr.WriteLine("}");
+ }
+ foreach (var s in States) {
+ if (s == InitialState && s.VariableCount == 0)
+ continue;
+ wr.WriteLine("*** STATE {0}", s.Name);
+ foreach (var v in s.Variables)
+ wr.WriteLine(" {0} -> {1}", v, s.TryGet(v));
+ wr.WriteLine("*** END_STATE", s.Name);
+ }
+ wr.WriteLine("*** END_MODEL");
+ }
+
+ public void Substitute(Dictionary<Element, Element> mapping) {
+ foreach (var f in functions) f.Substitute(mapping);
+ }
+
+ public static List<Model> ParseModels(System.IO.TextReader rd)
+ {
+ ModelParser p = new ParserZ3();
+ p.rd = rd;
+ p.Run();
+ return p.resModels;
+ }
+ }
+}
diff --git a/Source/Model/Model.csproj b/Source/Model/Model.csproj
index c6a1d047..c024975f 100644
--- a/Source/Model/Model.csproj
+++ b/Source/Model/Model.csproj
@@ -1,109 +1,109 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie</RootNamespace>
- <AssemblyName>Model</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\Model.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Model.cs" />
- <Compile Include="ModelParser.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="..\version.cs" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Microsoft.Boogie</RootNamespace>
+ <AssemblyName>BoogieModel</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\Model.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Model.cs" />
+ <Compile Include="ModelParser.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="..\version.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Source/Model/ModelParser.cs b/Source/Model/ModelParser.cs
index 3b9fbb6f..b966d649 100644
--- a/Source/Model/ModelParser.cs
+++ b/Source/Model/ModelParser.cs
@@ -66,8 +66,8 @@ namespace Microsoft.Boogie
string s = o as string;
if (s != null)
return GetElt (s);
- List<object> os = (List<object>)o;
- if (!(os[0] is string))
+ List<object> os = (List<object>)o;
+ if (!(os[0] is string))
os.Insert(0, "_"); // KLM: fix crash on ((as const (Array Int Int)) 0)
List<Model.Element> args = new List<Model.Element> ();
for (int i = 1; i < os.Count; i++) {
diff --git a/Source/Model/Properties/AssemblyInfo.cs b/Source/Model/Properties/AssemblyInfo.cs
index 80c3907a..d69add5b 100644
--- a/Source/Model/Properties/AssemblyInfo.cs
+++ b/Source/Model/Properties/AssemblyInfo.cs
@@ -1,23 +1,23 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Model")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Microsoft")]
-[assembly: AssemblyProduct("Model")]
-[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("24299c94-99db-46c5-8671-5f91faac167e")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Model")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("Model")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("24299c94-99db-46c5-8671-5f91faac167e")]
diff --git a/Source/ModelViewer/BCTProvider.cs b/Source/ModelViewer/BCTProvider.cs
index 6b48c396..3126084f 100644
--- a/Source/ModelViewer/BCTProvider.cs
+++ b/Source/ModelViewer/BCTProvider.cs
@@ -1,147 +1,147 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer.BCT {
- public class Provider : ILanguageProvider {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m) {
- return m.TryGetFunc("$Alloc") != null;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) {
- var dm = new BCTModel(m, opts);
- foreach (var s in m.States) {
- var sn = new StateNode(dm.states.Count, dm, s);
- dm.states.Add(sn);
- }
- dm.FinishStates();
- return dm;
- }
- }
-
- class BCTModel : LanguageModel {
- public readonly Model.Func f_heap_select;
- public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>();
- Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
- public List<StateNode> states = new List<StateNode>();
-
- public BCTModel(Model m, ViewOptions opts)
- : base(m, opts) {
- f_heap_select = m.MkFunc("[3]", 3);
-
- foreach (Model.Func fn in m.Functions) {
-
- }
- }
-
- internal void FinishStates() {
- GenerateSourceLocations(states);
- }
-
- public override IEnumerable<IState> States {
- get { return states; }
- }
-
- public string GetUserVariableName(string name) {
- if (name == "$this")
- return "this";
- if (name.Contains("$"))
- return null;
- if (name == "isControlChecked" || name == "isControlEnabled")
- return null;
- return name;
- }
-
- public Model.Element Image(Model.Element elt, Model.Func f) {
- var r = f.AppWithResult(elt);
- if (r != null)
- return r.Args[0];
- return null;
- }
-
- public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt) {
- List<ElementNode> result = new List<ElementNode>();
- return result;
- }
- }
-
- class StateNode : NamedState {
- internal readonly BCTModel dm;
- internal readonly List<VariableNode> vars = new List<VariableNode>();
- internal readonly int index;
-
- public StateNode(int i, BCTModel parent, Model.CapturedState s)
- : base(s, parent) {
- dm = parent;
- state = s;
- index = i;
-
- SetupVars();
- }
-
- void SetupVars() {
- var names = Util.Empty<string>();
-
- if (dm.states.Count > 0) {
- var prev = dm.states.Last();
- names = prev.vars.Map(v => v.realName);
- }
-
- names = names.Concat(state.Variables).Distinct();
-
- var curVars = state.Variables.ToDictionary(x => x);
- foreach (var v in names) {
- if (dm.GetUserVariableName(v) != null) {
- var val = state.TryGet(v);
- var vn = new VariableNode(this, v, val);
- vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v);
- if (curVars.ContainsKey(v))
- dm.RegisterLocalValue(vn.Name, val);
- vars.Add(vn);
- }
- }
-
- dm.Flush(Nodes);
- }
-
- public override IEnumerable<IDisplayNode> Nodes {
- get {
- return vars;
- }
- }
- }
-
- class ElementNode : DisplayNode {
- protected StateNode stateNode;
- protected Model.Element elt;
- protected BCTModel vm { get { return stateNode.dm; } }
-
- public ElementNode(StateNode st, EdgeName name, Model.Element elt)
- : base(st.dm, name, elt) {
- this.stateNode = st;
- this.elt = elt;
- }
-
- public ElementNode(StateNode st, string name, Model.Element elt)
- : this(st, new EdgeName(name), elt) { }
-
- protected override void ComputeChildren() {
- children.AddRange(vm.GetExpansion(stateNode, elt));
- }
- }
-
- class VariableNode : ElementNode {
- public bool updatedHere;
- public string realName;
-
- public VariableNode(StateNode par, string realName, Model.Element elt)
- : base(par, realName, elt) {
- this.realName = realName;
- name = new EdgeName(vm.GetUserVariableName(realName));
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Microsoft.Boogie.ModelViewer.BCT {
+ public class Provider : ILanguageProvider {
+ public static Provider Instance = new Provider();
+ private Provider() { }
+
+ public bool IsMyModel(Model m) {
+ return m.TryGetFunc("$Alloc") != null;
+ }
+
+ public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts) {
+ var dm = new BCTModel(m, opts);
+ foreach (var s in m.States) {
+ var sn = new StateNode(dm.states.Count, dm, s);
+ dm.states.Add(sn);
+ }
+ dm.FinishStates();
+ return dm;
+ }
+ }
+
+ class BCTModel : LanguageModel {
+ public readonly Model.Func f_heap_select;
+ public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>();
+ Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
+ public List<StateNode> states = new List<StateNode>();
+
+ public BCTModel(Model m, ViewOptions opts)
+ : base(m, opts) {
+ f_heap_select = m.MkFunc("[3]", 3);
+
+ foreach (Model.Func fn in m.Functions) {
+
+ }
+ }
+
+ internal void FinishStates() {
+ GenerateSourceLocations(states);
+ }
+
+ public override IEnumerable<IState> States {
+ get { return states; }
+ }
+
+ public string GetUserVariableName(string name) {
+ if (name == "$this")
+ return "this";
+ if (name.Contains("$"))
+ return null;
+ if (name == "isControlChecked" || name == "isControlEnabled")
+ return null;
+ return name;
+ }
+
+ public Model.Element Image(Model.Element elt, Model.Func f) {
+ var r = f.AppWithResult(elt);
+ if (r != null)
+ return r.Args[0];
+ return null;
+ }
+
+ public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt) {
+ List<ElementNode> result = new List<ElementNode>();
+ return result;
+ }
+ }
+
+ class StateNode : NamedState {
+ internal readonly BCTModel dm;
+ internal readonly List<VariableNode> vars = new List<VariableNode>();
+ internal readonly int index;
+
+ public StateNode(int i, BCTModel parent, Model.CapturedState s)
+ : base(s, parent) {
+ dm = parent;
+ state = s;
+ index = i;
+
+ SetupVars();
+ }
+
+ void SetupVars() {
+ var names = Util.Empty<string>();
+
+ if (dm.states.Count > 0) {
+ var prev = dm.states.Last();
+ names = prev.vars.Map(v => v.realName);
+ }
+
+ names = names.Concat(state.Variables).Distinct();
+
+ var curVars = state.Variables.ToDictionary(x => x);
+ foreach (var v in names) {
+ if (dm.GetUserVariableName(v) != null) {
+ var val = state.TryGet(v);
+ var vn = new VariableNode(this, v, val);
+ vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v);
+ if (curVars.ContainsKey(v))
+ dm.RegisterLocalValue(vn.Name, val);
+ vars.Add(vn);
+ }
+ }
+
+ dm.Flush(Nodes);
+ }
+
+ public override IEnumerable<IDisplayNode> Nodes {
+ get {
+ return vars;
+ }
+ }
+ }
+
+ class ElementNode : DisplayNode {
+ protected StateNode stateNode;
+ protected Model.Element elt;
+ protected BCTModel vm { get { return stateNode.dm; } }
+
+ public ElementNode(StateNode st, EdgeName name, Model.Element elt)
+ : base(st.dm, name, elt) {
+ this.stateNode = st;
+ this.elt = elt;
+ }
+
+ public ElementNode(StateNode st, string name, Model.Element elt)
+ : this(st, new EdgeName(name), elt) { }
+
+ protected override void ComputeChildren() {
+ children.AddRange(vm.GetExpansion(stateNode, elt));
+ }
+ }
+
+ class VariableNode : ElementNode {
+ public bool updatedHere;
+ public string realName;
+
+ public VariableNode(StateNode par, string realName, Model.Element elt)
+ : base(par, realName, elt) {
+ this.realName = realName;
+ name = new EdgeName(vm.GetUserVariableName(realName));
+ }
+ }
+}
diff --git a/Source/ModelViewer/BaseProvider.cs b/Source/ModelViewer/BaseProvider.cs
index 1e9e9cf9..8797fe1f 100644
--- a/Source/ModelViewer/BaseProvider.cs
+++ b/Source/ModelViewer/BaseProvider.cs
@@ -1,136 +1,136 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer.Base
-{
- public class Provider : ILanguageProvider
- {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m)
- {
- return true;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
- {
- return new GenericModel(m, opts);
- }
- }
-
- public class GenericModel : LanguageModel
- {
- List<BaseState> states = new List<BaseState>();
-
- public GenericModel(Model m, ViewOptions opts)
- : base(m, opts)
- {
- foreach (var s in m.States)
- states.Add(new BaseState(this, s) { Name = s.Name });
- foreach (var s in states)
- this.Flush(s.nodes);
- }
-
- public override IEnumerable<IState> States
- {
- get { return states; }
- }
- }
-
- public class BaseState : IState
- {
- internal GenericModel m;
- Model.CapturedState st;
-
- internal List<IDisplayNode> nodes = new List<IDisplayNode>();
- internal Dictionary<Model.Element, string> niceName = new Dictionary<Model.Element, string>();
-
- public BaseState(GenericModel m, Model.CapturedState st)
- {
- this.st = st;
- this.m = m;
-
- foreach (var v in st.AllVariables) {
- var e = st.TryGet(v);
- m.RegisterLocalValue(v, e);
- nodes.Add(new ElementNode(this, v, e));
-
- niceName[e] = v;
- foreach (var r in e.References) {
- if (r.Args.Length == 1 && r.Args[0] == e) {
- if (!niceName.ContainsKey(e))
- niceName[e] = r.Func.Name + "(" + v + ")";
- }
- }
- }
-
- nodes.Add(new ContainerNode<Model.Func>("[Functions]", f => f.Arity == 0 ? null : Function(f), m.model.Functions));
- nodes.Add(new ContainerNode<Model.Func>("[Constants]", f => f.Arity != 0 ? null : new AppNode(this, f.Apps.First()), m.model.Functions));
- }
-
- public virtual SourceViewState ShowSource()
- {
- return null;
- }
-
- IDisplayNode Function(Model.Func f)
- {
- return new ContainerNode<Model.FuncTuple>(f.Name, a => new AppNode(this, a), f.Apps);
- }
-
- public virtual string Name { get; set; }
-
- public virtual IEnumerable<IDisplayNode> Nodes
- {
- get { return nodes; }
- }
- }
-
- public class ElementNode : DisplayNode
- {
- BaseState st;
-
- public ElementNode(BaseState st, string name, Model.Element elt) : base(st.m, name, elt) { this.st = st; }
-
- protected override void ComputeChildren()
- {
- children.Add(new ContainerNode<Model.FuncTuple>(" == ", e => new AppNode(st, e), Element.References.Where(t => t.Result == Element)));
- foreach (var e in Element.References) {
- if (e.Args.Contains(Element))
- children.Add(new AppNode(st, e, x => x == Element ? "*" : st.niceName.GetWithDefault(x, null)));
- }
- }
- }
-
- public class AppNode : ElementNode
- {
- protected Model.FuncTuple tupl;
-
- public AppNode(BaseState m, Model.FuncTuple t) : this(m, t, _ => null) { }
-
- public AppNode(BaseState m, Model.FuncTuple t, Func<Model.Element, string> nameElement)
- : base(m, t.Func.Name, t.Result)
- {
- tupl = t;
- var sb = new StringBuilder();
- sb.Append(t.Func.Name);
- if (t.Args.Length > 0) {
- sb.Append("(");
- for (int i = 0; i < t.Args.Length; ++i) {
- var n = nameElement(t.Args[i]);
- if (n == null)
- sb.AppendFormat("%{0}, ", i);
- else
- sb.AppendFormat("{0}, ", n);
- }
- sb.Length -= 2;
- sb.Append(")");
- }
- name = new EdgeName(m.m, sb.ToString(), t.Args);
- }
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Microsoft.Boogie.ModelViewer.Base
+{
+ public class Provider : ILanguageProvider
+ {
+ public static Provider Instance = new Provider();
+ private Provider() { }
+
+ public bool IsMyModel(Model m)
+ {
+ return true;
+ }
+
+ public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
+ {
+ return new GenericModel(m, opts);
+ }
+ }
+
+ public class GenericModel : LanguageModel
+ {
+ List<BaseState> states = new List<BaseState>();
+
+ public GenericModel(Model m, ViewOptions opts)
+ : base(m, opts)
+ {
+ foreach (var s in m.States)
+ states.Add(new BaseState(this, s) { Name = s.Name });
+ foreach (var s in states)
+ this.Flush(s.nodes);
+ }
+
+ public override IEnumerable<IState> States
+ {
+ get { return states; }
+ }
+ }
+
+ public class BaseState : IState
+ {
+ internal GenericModel m;
+ Model.CapturedState st;
+
+ internal List<IDisplayNode> nodes = new List<IDisplayNode>();
+ internal Dictionary<Model.Element, string> niceName = new Dictionary<Model.Element, string>();
+
+ public BaseState(GenericModel m, Model.CapturedState st)
+ {
+ this.st = st;
+ this.m = m;
+
+ foreach (var v in st.AllVariables) {
+ var e = st.TryGet(v);
+ m.RegisterLocalValue(v, e);
+ nodes.Add(new ElementNode(this, v, e));
+
+ niceName[e] = v;
+ foreach (var r in e.References) {
+ if (r.Args.Length == 1 && r.Args[0] == e) {
+ if (!niceName.ContainsKey(e))
+ niceName[e] = r.Func.Name + "(" + v + ")";
+ }
+ }
+ }
+
+ nodes.Add(new ContainerNode<Model.Func>("[Functions]", f => f.Arity == 0 ? null : Function(f), m.model.Functions));
+ nodes.Add(new ContainerNode<Model.Func>("[Constants]", f => f.Arity != 0 ? null : new AppNode(this, f.Apps.First()), m.model.Functions));
+ }
+
+ public virtual SourceViewState ShowSource()
+ {
+ return null;
+ }
+
+ IDisplayNode Function(Model.Func f)
+ {
+ return new ContainerNode<Model.FuncTuple>(f.Name, a => new AppNode(this, a), f.Apps);
+ }
+
+ public virtual string Name { get; set; }
+
+ public virtual IEnumerable<IDisplayNode> Nodes
+ {
+ get { return nodes; }
+ }
+ }
+
+ public class ElementNode : DisplayNode
+ {
+ BaseState st;
+
+ public ElementNode(BaseState st, string name, Model.Element elt) : base(st.m, name, elt) { this.st = st; }
+
+ protected override void ComputeChildren()
+ {
+ children.Add(new ContainerNode<Model.FuncTuple>(" == ", e => new AppNode(st, e), Element.References.Where(t => t.Result == Element)));
+ foreach (var e in Element.References) {
+ if (e.Args.Contains(Element))
+ children.Add(new AppNode(st, e, x => x == Element ? "*" : st.niceName.GetWithDefault(x, null)));
+ }
+ }
+ }
+
+ public class AppNode : ElementNode
+ {
+ protected Model.FuncTuple tupl;
+
+ public AppNode(BaseState m, Model.FuncTuple t) : this(m, t, _ => null) { }
+
+ public AppNode(BaseState m, Model.FuncTuple t, Func<Model.Element, string> nameElement)
+ : base(m, t.Func.Name, t.Result)
+ {
+ tupl = t;
+ var sb = new StringBuilder();
+ sb.Append(t.Func.Name);
+ if (t.Args.Length > 0) {
+ sb.Append("(");
+ for (int i = 0; i < t.Args.Length; ++i) {
+ var n = nameElement(t.Args[i]);
+ if (n == null)
+ sb.AppendFormat("%{0}, ", i);
+ else
+ sb.AppendFormat("{0}, ", n);
+ }
+ sb.Length -= 2;
+ sb.Append(")");
+ }
+ name = new EdgeName(m.m, sb.ToString(), t.Args);
+ }
+ }
+
+}
diff --git a/Source/ModelViewer/DafnyProvider.cs b/Source/ModelViewer/DafnyProvider.cs
index 602df7aa..45c7dada 100644
--- a/Source/ModelViewer/DafnyProvider.cs
+++ b/Source/ModelViewer/DafnyProvider.cs
@@ -1,388 +1,388 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie.ModelViewer.Dafny
-{
- public class Provider : ILanguageProvider
- {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m)
- {
- return m.TryGetFunc("$$Language$Dafny") != null;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
- {
- var dm = new DafnyModel(m, opts);
- foreach (var s in m.States) {
- var sn = new StateNode(dm.states.Count, dm, s);
- dm.states.Add(sn);
- }
- dm.FinishStates();
- return dm;
- }
- }
-
- public class DafnyModel : LanguageModel
- {
- public readonly Model.Func f_heap_select, f_set_select, f_seq_length, f_seq_index, f_box, f_dim, f_index_field, f_multi_index_field, f_dtype, f_null;
- public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>();
- public readonly Dictionary<Model.Element, Model.FuncTuple> DatatypeValues = new Dictionary<Model.Element, Model.FuncTuple>();
- Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
- public List<StateNode> states = new List<StateNode>();
-
- public DafnyModel(Model m, ViewOptions opts)
- : base(m, opts)
- {
- f_heap_select = m.MkFunc("[3]", 3);
- f_set_select = m.MkFunc("[2]", 2);
- f_seq_length = m.MkFunc("Seq#Length", 1);
- f_seq_index = m.MkFunc("Seq#Index", 2);
- f_box = m.MkFunc("$Box", 1);
- f_dim = m.MkFunc("FDim", 1);
- f_index_field = m.MkFunc("IndexField", 1);
- f_multi_index_field = m.MkFunc("MultiIndexField", 2);
- f_dtype = m.MkFunc("dtype", 1);
- f_null = m.MkFunc("null", 0);
-
- // collect the array dimensions from the various array.Length functions, and
- // collect all known datatype values
- foreach (var fn in m.Functions) {
- if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$")) {
- int j = fn.Name.IndexOf('.', 13);
- int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13));
- int idx = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7));
- foreach (var tpl in fn.Apps) {
- var elt = tpl.Args[0];
- var len = tpl.Result;
- Model.Element[] ar;
- if (!ArrayLengths.TryGetValue(elt, out ar)) {
- ar = new Model.Element[dims];
- ArrayLengths.Add(elt, ar);
- }
- Contract.Assert(ar[idx] == null);
- ar[idx] = len;
- }
- } else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#') {
- foreach (var tpl in fn.Apps) {
- var elt = tpl.Result;
- DatatypeValues.Add(elt, tpl);
- }
- }
- }
- }
-
- internal void FinishStates()
- {
- GenerateSourceLocations(states);
- }
-
- public override IEnumerable<IState> States
- {
- get { return states; }
- }
-
- public string GetUserVariableName(string name)
- {
- if (name.StartsWith("$")) // this covers $Heap and $_Frame and $nw...
- return null;
- if (name.Contains("##")) // a temporary variable of the translation
- return null;
-#if SOMETIME_AGAIN
- var hash = name.IndexOf('#');
- if (0 < hash)
- return name.Substring(0, hash);
-#endif
- return name;
- }
-
- public Model.Element Image(Model.Element elt, Model.Func f)
- {
- var r = f.AppWithResult(elt);
- if (r != null)
- return r.Args[0];
- return null;
- }
-
- protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
- {
- Model.FuncTuple fnTuple;
- suff = NameSeqSuffix.WhenNonZero;
- if (DatatypeValues.TryGetValue(elt, out fnTuple)) {
- // elt is s a datatype value, make its name be the name of the datatype constructor
- string nm = fnTuple.Func.Name;
- if (fnTuple.Func.Arity == 0)
- return nm;
- else
- return nm + "(...)";
- }
- var seqLen = f_seq_length.AppWithArg(0, elt);
- if (seqLen != null) {
- // elt is a sequence
- return string.Format("[Length {0}]", seqLen.Result.AsInt());
- }
-
- if (elt == f_null.GetConstant())
- return "null";
-
- var tp = f_dtype.TryEval(elt);
- if (tp != null) {
- foreach (var app in tp.References) {
- if (app.Args.Length == 0 && app.Func.Name.StartsWith("class.")) {
- suff = NameSeqSuffix.Always;
- return app.Func.Name.Substring(6);
- }
- }
- }
-
- return base.CanonicalBaseName(elt, out suff);
- }
-
- public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt)
- {
- List<ElementNode> result = new List<ElementNode>();
-
- if (elt.Kind != Model.ElementKind.Uninterpreted)
- return result;
-
- // Perhaps elt is a known datatype value
- Model.FuncTuple fnTuple;
- if (DatatypeValues.TryGetValue(elt, out fnTuple)) {
- // elt is a datatype value
- int i = 0;
- foreach (var arg in fnTuple.Args) {
- var edgname = new EdgeName(this, i.ToString());
- result.Add(new FieldNode(state, edgname, arg));
- i++;
- }
- return result;
- }
-
- // Perhaps elt is a sequence
- var seqLen = f_seq_length.AppWithArg(0, elt);
- if (seqLen != null) {
- // elt is a sequence
- foreach (var tpl in f_seq_index.AppsWithArg(0, elt)) {
- var edgname = new EdgeName(this, "[%0]", tpl.Args[1]);
- result.Add(new FieldNode(state, edgname, Unbox(tpl.Result)));
- }
- return result;
- }
-
- // Perhaps elt is a set
- foreach (var tpl in f_set_select.AppsWithArg(0, elt)) {
- var setElement = tpl.Args[1];
- var containment = tpl.Result;
- var edgname = new EdgeName(this, "[%0]", Unbox(setElement));
- result.Add(new FieldNode(state, edgname, containment));
- }
- if (result.Count != 0)
- return result; // elt is a set
-
- // It seems elt is an object or array
- Model.Element[] lengths;
- if (ArrayLengths.TryGetValue(elt, out lengths)) {
- int i = 0;
- foreach (var len in lengths) {
- var name = lengths.Length == 1 ? "Length" : "Length" + i;
- var edgname = new EdgeName(this, name);
- result.Add(new FieldNode(state, edgname, len));
- i++;
- }
- }
- var heap = state.State.TryGet("$Heap");
- if (heap != null) {
- foreach (var tpl in f_heap_select.AppsWithArgs(0, heap, 1, elt)) {
- var field = new FieldName(tpl.Args[2], this);
- if (field.NameFormat != "alloc") {
- var edgname = new EdgeName(this, field.NameFormat, field.NameArgs);
- result.Add(new FieldNode(state, edgname, Unbox(tpl.Result)));
- }
- }
- }
- return result;
- }
-
- class FieldName
- {
- public readonly Model.Element Field;
- public readonly int Dims;
- public readonly string NameFormat;
- public readonly Model.Element[] NameArgs;
-
- public FieldName(Model.Element elt, DafnyModel dm) {
- Field = elt;
- NameArgs = new Model.Element[Dims];
- var tpl = dm.f_dim.AppWithArg(0, elt);
- if (tpl != null) {
- Dims = tpl.Result.AsInt();
- NameArgs = new Model.Element[Dims];
- for (int i = Dims; 0 <= --i; ) {
- if (i == 0) {
- tpl = dm.f_index_field.AppWithResult(elt);
- NameArgs[i] = tpl.Args[0];
- } else {
- tpl = dm.f_multi_index_field.AppWithResult(elt);
- NameArgs[i] = tpl.Args[1];
- elt = tpl.Args[0];
- }
- }
- }
- // now for the name
- if (Dims == 0) {
- NameFormat = Field.ToString();
- foreach (var n in Field.Names) {
- NameFormat = n.Func.Name;
- int dot = NameFormat.LastIndexOf('.');
- if (0 <= dot)
- NameFormat = NameFormat.Substring(dot + 1);
- break;
- }
- } else {
- NameFormat = "[";
- string sep = "";
- for (int i = 0; i < Dims; i++) {
- NameFormat += sep + "%" + i;
- sep = ",";
- }
- NameFormat += "]";
- }
- }
- }
-
- Model.Element Unbox(Model.Element elt) {
- var unboxed = f_box.AppWithResult(elt);
- if (unboxed != null)
- return unboxed.Args[0];
- else
- return elt;
- }
- }
-
- public class StateNode : NamedState
- {
- internal readonly DafnyModel dm;
- public readonly List<VariableNode> Vars = new List<VariableNode>();
- internal readonly List<VariableNode> skolems;
- internal readonly int index;
-
- public StateNode(int i, DafnyModel parent, Model.CapturedState s)
- : base(s, parent)
- {
- dm = parent;
- state = s;
- index = i;
-
- skolems = new List<VariableNode>(SkolemVars());
- SetupVars();
- }
-
- void SetupVars()
- {
- var names = Util.Empty<string>();
-
- if (dm.states.Count > 0) {
- var prev = dm.states.Last();
- names = prev.Vars.Map(v => v.realName);
- }
-
- names = names.Concat(state.Variables).Distinct();
-
- var curVars = state.Variables.ToDictionary(x => x);
- foreach (var v in names) {
- if (dm.GetUserVariableName(v) != null) {
- var val = state.TryGet(v);
- var shortName = Regex.Replace(v, @"#\d+$", "");
- var vn = new VariableNode(this, v, val, names.Any(n => n != v && Regex.Replace(n, @"#\d+$", "") == shortName) ? v : shortName);
- vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v);
- if (curVars.ContainsKey(v))
- dm.RegisterLocalValue(vn.Name, val);
- Vars.Add(vn);
- }
- }
-
- dm.Flush(Nodes);
- }
-
- IEnumerable<VariableNode> SkolemVars() {
- foreach (var f in dm.model.Functions) {
- if (f.Arity != 0) continue;
- int n = f.Name.IndexOf('!');
- if (n == -1) continue;
- string name = f.Name.Substring(0, n);
- if (!name.Contains('#')) continue;
- yield return new VariableNode(this, name, f.GetConstant(), name);
- }
- }
-
- public override IEnumerable<IDisplayNode> Nodes
- {
- get {
- return Vars.Concat(skolems);
- }
- }
- }
-
- public class ElementNode : DisplayNode
- {
- protected StateNode stateNode;
- protected Model.Element elt;
- protected DafnyModel vm { get { return stateNode.dm; } }
-
- public ElementNode(StateNode st, EdgeName name, Model.Element elt)
- : base(st.dm, name, elt)
- {
- this.stateNode = st;
- this.elt = elt;
- }
-
- public ElementNode(StateNode st, string name, Model.Element elt)
- : this(st, new EdgeName(name), elt) { }
-
- protected override void ComputeChildren()
- {
- children.AddRange(vm.GetExpansion(stateNode, elt));
- }
- }
-
- class FieldNode : ElementNode
- {
- public FieldNode(StateNode par, EdgeName realName, Model.Element elt)
- : base(par, realName, elt)
- {
- /*
- var idx = realName.LastIndexOf('.');
- if (idx > 0)
- name = realName.Substring(idx + 1);
- */
- }
- }
-
- class MapletNode : ElementNode
- {
- public MapletNode(StateNode par, EdgeName realName, Model.Element elt)
- : base(par, realName, elt)
- {
- }
- }
-
- public class VariableNode : ElementNode
- {
- public bool updatedHere;
- public string realName;
-
- public VariableNode(StateNode par, string realName, Model.Element elt, string shortName)
- : base(par, realName, elt)
- {
- this.realName = realName;
- name = new EdgeName(vm.GetUserVariableName(realName));
- ShortName = shortName;
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Boogie.ModelViewer.Dafny
+{
+ public class Provider : ILanguageProvider
+ {
+ public static Provider Instance = new Provider();
+ private Provider() { }
+
+ public bool IsMyModel(Model m)
+ {
+ return m.TryGetFunc("$$Language$Dafny") != null;
+ }
+
+ public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
+ {
+ var dm = new DafnyModel(m, opts);
+ foreach (var s in m.States) {
+ var sn = new StateNode(dm.states.Count, dm, s);
+ dm.states.Add(sn);
+ }
+ dm.FinishStates();
+ return dm;
+ }
+ }
+
+ public class DafnyModel : LanguageModel
+ {
+ public readonly Model.Func f_heap_select, f_set_select, f_seq_length, f_seq_index, f_box, f_dim, f_index_field, f_multi_index_field, f_dtype, f_null;
+ public readonly Dictionary<Model.Element, Model.Element[]> ArrayLengths = new Dictionary<Model.Element, Model.Element[]>();
+ public readonly Dictionary<Model.Element, Model.FuncTuple> DatatypeValues = new Dictionary<Model.Element, Model.FuncTuple>();
+ Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
+ public List<StateNode> states = new List<StateNode>();
+
+ public DafnyModel(Model m, ViewOptions opts)
+ : base(m, opts)
+ {
+ f_heap_select = m.MkFunc("[3]", 3);
+ f_set_select = m.MkFunc("[2]", 2);
+ f_seq_length = m.MkFunc("Seq#Length", 1);
+ f_seq_index = m.MkFunc("Seq#Index", 2);
+ f_box = m.MkFunc("$Box", 1);
+ f_dim = m.MkFunc("FDim", 1);
+ f_index_field = m.MkFunc("IndexField", 1);
+ f_multi_index_field = m.MkFunc("MultiIndexField", 2);
+ f_dtype = m.MkFunc("dtype", 1);
+ f_null = m.MkFunc("null", 0);
+
+ // collect the array dimensions from the various array.Length functions, and
+ // collect all known datatype values
+ foreach (var fn in m.Functions) {
+ if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$")) {
+ int j = fn.Name.IndexOf('.', 13);
+ int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13));
+ int idx = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7));
+ foreach (var tpl in fn.Apps) {
+ var elt = tpl.Args[0];
+ var len = tpl.Result;
+ Model.Element[] ar;
+ if (!ArrayLengths.TryGetValue(elt, out ar)) {
+ ar = new Model.Element[dims];
+ ArrayLengths.Add(elt, ar);
+ }
+ Contract.Assert(ar[idx] == null);
+ ar[idx] = len;
+ }
+ } else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#') {
+ foreach (var tpl in fn.Apps) {
+ var elt = tpl.Result;
+ DatatypeValues.Add(elt, tpl);
+ }
+ }
+ }
+ }
+
+ internal void FinishStates()
+ {
+ GenerateSourceLocations(states);
+ }
+
+ public override IEnumerable<IState> States
+ {
+ get { return states; }
+ }
+
+ public string GetUserVariableName(string name)
+ {
+ if (name.StartsWith("$")) // this covers $Heap and $_Frame and $nw...
+ return null;
+ if (name.Contains("##")) // a temporary variable of the translation
+ return null;
+#if SOMETIME_AGAIN
+ var hash = name.IndexOf('#');
+ if (0 < hash)
+ return name.Substring(0, hash);
+#endif
+ return name;
+ }
+
+ public Model.Element Image(Model.Element elt, Model.Func f)
+ {
+ var r = f.AppWithResult(elt);
+ if (r != null)
+ return r.Args[0];
+ return null;
+ }
+
+ protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
+ {
+ Model.FuncTuple fnTuple;
+ suff = NameSeqSuffix.WhenNonZero;
+ if (DatatypeValues.TryGetValue(elt, out fnTuple)) {
+ // elt is s a datatype value, make its name be the name of the datatype constructor
+ string nm = fnTuple.Func.Name;
+ if (fnTuple.Func.Arity == 0)
+ return nm;
+ else
+ return nm + "(...)";
+ }
+ var seqLen = f_seq_length.AppWithArg(0, elt);
+ if (seqLen != null) {
+ // elt is a sequence
+ return string.Format("[Length {0}]", seqLen.Result.AsInt());
+ }
+
+ if (elt == f_null.GetConstant())
+ return "null";
+
+ var tp = f_dtype.TryEval(elt);
+ if (tp != null) {
+ foreach (var app in tp.References) {
+ if (app.Args.Length == 0 && app.Func.Name.StartsWith("class.")) {
+ suff = NameSeqSuffix.Always;
+ return app.Func.Name.Substring(6);
+ }
+ }
+ }
+
+ return base.CanonicalBaseName(elt, out suff);
+ }
+
+ public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt)
+ {
+ List<ElementNode> result = new List<ElementNode>();
+
+ if (elt.Kind != Model.ElementKind.Uninterpreted)
+ return result;
+
+ // Perhaps elt is a known datatype value
+ Model.FuncTuple fnTuple;
+ if (DatatypeValues.TryGetValue(elt, out fnTuple)) {
+ // elt is a datatype value
+ int i = 0;
+ foreach (var arg in fnTuple.Args) {
+ var edgname = new EdgeName(this, i.ToString());
+ result.Add(new FieldNode(state, edgname, arg));
+ i++;
+ }
+ return result;
+ }
+
+ // Perhaps elt is a sequence
+ var seqLen = f_seq_length.AppWithArg(0, elt);
+ if (seqLen != null) {
+ // elt is a sequence
+ foreach (var tpl in f_seq_index.AppsWithArg(0, elt)) {
+ var edgname = new EdgeName(this, "[%0]", tpl.Args[1]);
+ result.Add(new FieldNode(state, edgname, Unbox(tpl.Result)));
+ }
+ return result;
+ }
+
+ // Perhaps elt is a set
+ foreach (var tpl in f_set_select.AppsWithArg(0, elt)) {
+ var setElement = tpl.Args[1];
+ var containment = tpl.Result;
+ var edgname = new EdgeName(this, "[%0]", Unbox(setElement));
+ result.Add(new FieldNode(state, edgname, containment));
+ }
+ if (result.Count != 0)
+ return result; // elt is a set
+
+ // It seems elt is an object or array
+ Model.Element[] lengths;
+ if (ArrayLengths.TryGetValue(elt, out lengths)) {
+ int i = 0;
+ foreach (var len in lengths) {
+ var name = lengths.Length == 1 ? "Length" : "Length" + i;
+ var edgname = new EdgeName(this, name);
+ result.Add(new FieldNode(state, edgname, len));
+ i++;
+ }
+ }
+ var heap = state.State.TryGet("$Heap");
+ if (heap != null) {
+ foreach (var tpl in f_heap_select.AppsWithArgs(0, heap, 1, elt)) {
+ var field = new FieldName(tpl.Args[2], this);
+ if (field.NameFormat != "alloc") {
+ var edgname = new EdgeName(this, field.NameFormat, field.NameArgs);
+ result.Add(new FieldNode(state, edgname, Unbox(tpl.Result)));
+ }
+ }
+ }
+ return result;
+ }
+
+ class FieldName
+ {
+ public readonly Model.Element Field;
+ public readonly int Dims;
+ public readonly string NameFormat;
+ public readonly Model.Element[] NameArgs;
+
+ public FieldName(Model.Element elt, DafnyModel dm) {
+ Field = elt;
+ NameArgs = new Model.Element[Dims];
+ var tpl = dm.f_dim.AppWithArg(0, elt);
+ if (tpl != null) {
+ Dims = tpl.Result.AsInt();
+ NameArgs = new Model.Element[Dims];
+ for (int i = Dims; 0 <= --i; ) {
+ if (i == 0) {
+ tpl = dm.f_index_field.AppWithResult(elt);
+ NameArgs[i] = tpl.Args[0];
+ } else {
+ tpl = dm.f_multi_index_field.AppWithResult(elt);
+ NameArgs[i] = tpl.Args[1];
+ elt = tpl.Args[0];
+ }
+ }
+ }
+ // now for the name
+ if (Dims == 0) {
+ NameFormat = Field.ToString();
+ foreach (var n in Field.Names) {
+ NameFormat = n.Func.Name;
+ int dot = NameFormat.LastIndexOf('.');
+ if (0 <= dot)
+ NameFormat = NameFormat.Substring(dot + 1);
+ break;
+ }
+ } else {
+ NameFormat = "[";
+ string sep = "";
+ for (int i = 0; i < Dims; i++) {
+ NameFormat += sep + "%" + i;
+ sep = ",";
+ }
+ NameFormat += "]";
+ }
+ }
+ }
+
+ Model.Element Unbox(Model.Element elt) {
+ var unboxed = f_box.AppWithResult(elt);
+ if (unboxed != null)
+ return unboxed.Args[0];
+ else
+ return elt;
+ }
+ }
+
+ public class StateNode : NamedState
+ {
+ internal readonly DafnyModel dm;
+ public readonly List<VariableNode> Vars = new List<VariableNode>();
+ internal readonly List<VariableNode> skolems;
+ internal readonly int index;
+
+ public StateNode(int i, DafnyModel parent, Model.CapturedState s)
+ : base(s, parent)
+ {
+ dm = parent;
+ state = s;
+ index = i;
+
+ skolems = new List<VariableNode>(SkolemVars());
+ SetupVars();
+ }
+
+ void SetupVars()
+ {
+ var names = Util.Empty<string>();
+
+ if (dm.states.Count > 0) {
+ var prev = dm.states.Last();
+ names = prev.Vars.Map(v => v.realName);
+ }
+
+ names = names.Concat(state.Variables).Distinct();
+
+ var curVars = state.Variables.ToDictionary(x => x);
+ foreach (var v in names) {
+ if (dm.GetUserVariableName(v) != null) {
+ var val = state.TryGet(v);
+ var shortName = Regex.Replace(v, @"#\d+$", "");
+ var vn = new VariableNode(this, v, val, names.Any(n => n != v && Regex.Replace(n, @"#\d+$", "") == shortName) ? v : shortName);
+ vn.updatedHere = dm.states.Count > 0 && curVars.ContainsKey(v);
+ if (curVars.ContainsKey(v))
+ dm.RegisterLocalValue(vn.Name, val);
+ Vars.Add(vn);
+ }
+ }
+
+ dm.Flush(Nodes);
+ }
+
+ IEnumerable<VariableNode> SkolemVars() {
+ foreach (var f in dm.model.Functions) {
+ if (f.Arity != 0) continue;
+ int n = f.Name.IndexOf('!');
+ if (n == -1) continue;
+ string name = f.Name.Substring(0, n);
+ if (!name.Contains('#')) continue;
+ yield return new VariableNode(this, name, f.GetConstant(), name);
+ }
+ }
+
+ public override IEnumerable<IDisplayNode> Nodes
+ {
+ get {
+ return Vars.Concat(skolems);
+ }
+ }
+ }
+
+ public class ElementNode : DisplayNode
+ {
+ protected StateNode stateNode;
+ protected Model.Element elt;
+ protected DafnyModel vm { get { return stateNode.dm; } }
+
+ public ElementNode(StateNode st, EdgeName name, Model.Element elt)
+ : base(st.dm, name, elt)
+ {
+ this.stateNode = st;
+ this.elt = elt;
+ }
+
+ public ElementNode(StateNode st, string name, Model.Element elt)
+ : this(st, new EdgeName(name), elt) { }
+
+ protected override void ComputeChildren()
+ {
+ children.AddRange(vm.GetExpansion(stateNode, elt));
+ }
+ }
+
+ class FieldNode : ElementNode
+ {
+ public FieldNode(StateNode par, EdgeName realName, Model.Element elt)
+ : base(par, realName, elt)
+ {
+ /*
+ var idx = realName.LastIndexOf('.');
+ if (idx > 0)
+ name = realName.Substring(idx + 1);
+ */
+ }
+ }
+
+ class MapletNode : ElementNode
+ {
+ public MapletNode(StateNode par, EdgeName realName, Model.Element elt)
+ : base(par, realName, elt)
+ {
+ }
+ }
+
+ public class VariableNode : ElementNode
+ {
+ public bool updatedHere;
+ public string realName;
+
+ public VariableNode(StateNode par, string realName, Model.Element elt, string shortName)
+ : base(par, realName, elt)
+ {
+ this.realName = realName;
+ name = new EdgeName(vm.GetUserVariableName(realName));
+ ShortName = shortName;
+ }
+ }
+}
diff --git a/Source/ModelViewer/DataModel.cs b/Source/ModelViewer/DataModel.cs
index 0b54e689..3820a6ab 100644
--- a/Source/ModelViewer/DataModel.cs
+++ b/Source/ModelViewer/DataModel.cs
@@ -1,297 +1,297 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public class ViewOptions
- {
- // 0 - Normal
- // 1 - Expert
- // 2 - Everything
- // 3 - Include the kitchen sink
- public int ViewLevel = 1;
- public bool DebugMode;
- }
-
- // sync with Main.categoryBrushes!
- public enum NodeCategory
- {
- Local,
- PhysField,
- SpecField,
- MethodologyProperty,
- UserFunction,
- Maplet
- }
-
- public interface ILanguageProvider
- {
- bool IsMyModel(Model m);
- ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts);
- }
-
- public interface ILanguageSpecificModel
- {
- string CanonicalName(Model.Element elt);
-
- Model.Element FindElement(string canonicalName);
-
- string PathName(IEnumerable<IDisplayNode> path);
-
- IEnumerable<IState> States { get; }
-
- // This function is given IDisplayNode possibly from different states.
- IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields);
- }
-
- public class SourceViewState
- {
- public string Header;
- public string RichTextContent;
- public int Location;
- }
-
- public interface IState
- {
- string Name { get; }
- SourceViewState ShowSource();
- IEnumerable<IDisplayNode> Nodes { get; }
- }
-
- public interface IDisplayNode
- {
- /// <summary>
- /// Used for indexing the state tree.
- /// </summary>
- string Name { get; }
-
- string ShortName { get; }
-
- NodeCategory Category { get; }
- string Value { get; }
- string ToolTip { get; }
-
- int ViewLevel { get; }
-
- /// <summary>
- /// Used to determine aliasing. Can be null.
- /// </summary>
- Model.Element Element { get; }
-
- IEnumerable<Model.Element> References { get; }
-
- IEnumerable<IDisplayNode> Children { get; }
-
- object ViewSync { get; set; }
- }
-
-
- public class TopState : IState
- {
- protected IDisplayNode[] children;
- protected string name;
-
- public TopState(string name, IEnumerable<IDisplayNode> nodes)
- {
- this.name = name;
- children = nodes.ToArray();
- }
-
- public string Name
- {
- get { return name; }
- }
-
- public IEnumerable<IDisplayNode> Nodes
- {
- get { return children; }
- }
-
-
- public SourceViewState ShowSource()
- {
- return null;
- }
-
- }
-
- public abstract class DisplayNode : IDisplayNode
- {
- protected EdgeName name;
- protected Model.Element element;
- protected ILanguageSpecificModel langModel;
- protected List<IDisplayNode> children;
-
- public DisplayNode(ILanguageSpecificModel model, string n, Model.Element elt)
- : this(model, new EdgeName(n), elt) {}
-
- public DisplayNode(ILanguageSpecificModel model, EdgeName n, Model.Element elt)
- {
- langModel = model;
- name = n;
- element = elt;
- }
-
- public virtual string ToolTip
- {
- get { return null; }
- }
-
- public virtual int ViewLevel { get; set; }
- public virtual NodeCategory Category { get; set; }
-
- public virtual IEnumerable<IDisplayNode> Children
- {
- get
- {
- if (children == null) {
- children = new List<IDisplayNode>();
- ComputeChildren();
- }
- return children;
- }
- }
-
- protected virtual void ComputeChildren()
- {
- }
-
- public object ViewSync { get; set; }
-
- public virtual string Name
- {
- get { return name.ToString(); }
- }
-
- private string shortName;
-
- public virtual string ShortName
- {
- get
- {
- if (shortName != null)
- {
- return shortName;
- }
- else
- {
- return name.ToString();
- }
- }
- set
- {
- shortName = value;
- }
- }
-
- public virtual Model.Element Element
- {
- get { return element; }
- }
-
- public virtual string Value
- {
- get
- {
- if (element == null)
- return "";
- return langModel.CanonicalName(element);
- }
- }
-
- public virtual IEnumerable<Model.Element> References
- {
- get
- {
- foreach (var r in name.Dependencies)
- yield return r;
- if (element != null)
- yield return element;
- }
- }
- }
-
- public class ContainerNode<T> : DisplayNode
- {
- protected Func<T, IDisplayNode> convert;
- protected IEnumerable<T> data;
-
- public ContainerNode(EdgeName name, Func<T, IDisplayNode> convert, IEnumerable<T> data) : base(null, name, null)
- {
- this.convert = convert;
- this.data = data;
- }
-
- public ContainerNode(string name, Func<T, IDisplayNode> convert, IEnumerable<T> data)
- : this(new EdgeName(name), convert, data)
- {
- }
-
- protected override void ComputeChildren()
- {
- foreach (var f in data) {
- var res = convert(f);
- if (res != null)
- children.Add(res);
- }
- }
- }
-
-
- public static class Util
- {
- public static void Assert(bool cond)
- {
- if (!cond) throw new System.Exception("assertion violation");
- }
-
- public static string Concat(this IEnumerable<string> strs, string sep)
- {
- var res = new StringBuilder();
- foreach (var e in strs)
- res.Append(e).Append(sep);
- if (res.Length > 0)
- res.Length -= sep.Length;
- return res.ToString();
- }
-
- public static IEnumerable<T> Empty<T>() { yield break; }
-
- public static IEnumerable<T> Singleton<T>(T e) { yield return e; }
-
- public static IEnumerable<T> Concat1<T>(this IEnumerable<T> s, T e) { return s.Concat(Singleton(e)); }
-
- public static IEnumerable<T> Map<S, T>(this IEnumerable<S> inp, Func<S, T> conv)
- {
- foreach (var s in inp) yield return conv(s);
- }
-
- public static void Iter<T>(this IEnumerable<T> inp, Action<T> fn)
- {
- foreach (var s in inp) fn(s);
- }
-
- public static void AddRange<T>(this HashSet<T> st, IEnumerable<T> elts)
- {
- foreach (var e in elts) st.Add(e);
- }
-
- public static T OrElse<T>(T a, T b)
- where T : class
- {
- if (a != null) return a;
- return b;
- }
-
- public static S GetWithDefault<T, S>(this Dictionary<T, S> dict, T key, S defl)
- {
- S r;
- if (dict.TryGetValue(key, out r))
- return r;
- return defl;
- }
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Microsoft.Boogie.ModelViewer
+{
+ public class ViewOptions
+ {
+ // 0 - Normal
+ // 1 - Expert
+ // 2 - Everything
+ // 3 - Include the kitchen sink
+ public int ViewLevel = 1;
+ public bool DebugMode;
+ }
+
+ // sync with Main.categoryBrushes!
+ public enum NodeCategory
+ {
+ Local,
+ PhysField,
+ SpecField,
+ MethodologyProperty,
+ UserFunction,
+ Maplet
+ }
+
+ public interface ILanguageProvider
+ {
+ bool IsMyModel(Model m);
+ ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts);
+ }
+
+ public interface ILanguageSpecificModel
+ {
+ string CanonicalName(Model.Element elt);
+
+ Model.Element FindElement(string canonicalName);
+
+ string PathName(IEnumerable<IDisplayNode> path);
+
+ IEnumerable<IState> States { get; }
+
+ // This function is given IDisplayNode possibly from different states.
+ IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields);
+ }
+
+ public class SourceViewState
+ {
+ public string Header;
+ public string RichTextContent;
+ public int Location;
+ }
+
+ public interface IState
+ {
+ string Name { get; }
+ SourceViewState ShowSource();
+ IEnumerable<IDisplayNode> Nodes { get; }
+ }
+
+ public interface IDisplayNode
+ {
+ /// <summary>
+ /// Used for indexing the state tree.
+ /// </summary>
+ string Name { get; }
+
+ string ShortName { get; }
+
+ NodeCategory Category { get; }
+ string Value { get; }
+ string ToolTip { get; }
+
+ int ViewLevel { get; }
+
+ /// <summary>
+ /// Used to determine aliasing. Can be null.
+ /// </summary>
+ Model.Element Element { get; }
+
+ IEnumerable<Model.Element> References { get; }
+
+ IEnumerable<IDisplayNode> Children { get; }
+
+ object ViewSync { get; set; }
+ }
+
+
+ public class TopState : IState
+ {
+ protected IDisplayNode[] children;
+ protected string name;
+
+ public TopState(string name, IEnumerable<IDisplayNode> nodes)
+ {
+ this.name = name;
+ children = nodes.ToArray();
+ }
+
+ public string Name
+ {
+ get { return name; }
+ }
+
+ public IEnumerable<IDisplayNode> Nodes
+ {
+ get { return children; }
+ }
+
+
+ public SourceViewState ShowSource()
+ {
+ return null;
+ }
+
+ }
+
+ public abstract class DisplayNode : IDisplayNode
+ {
+ protected EdgeName name;
+ protected Model.Element element;
+ protected ILanguageSpecificModel langModel;
+ protected List<IDisplayNode> children;
+
+ public DisplayNode(ILanguageSpecificModel model, string n, Model.Element elt)
+ : this(model, new EdgeName(n), elt) {}
+
+ public DisplayNode(ILanguageSpecificModel model, EdgeName n, Model.Element elt)
+ {
+ langModel = model;
+ name = n;
+ element = elt;
+ }
+
+ public virtual string ToolTip
+ {
+ get { return null; }
+ }
+
+ public virtual int ViewLevel { get; set; }
+ public virtual NodeCategory Category { get; set; }
+
+ public virtual IEnumerable<IDisplayNode> Children
+ {
+ get
+ {
+ if (children == null) {
+ children = new List<IDisplayNode>();
+ ComputeChildren();
+ }
+ return children;
+ }
+ }
+
+ protected virtual void ComputeChildren()
+ {
+ }
+
+ public object ViewSync { get; set; }
+
+ public virtual string Name
+ {
+ get { return name.ToString(); }
+ }
+
+ private string shortName;
+
+ public virtual string ShortName
+ {
+ get
+ {
+ if (shortName != null)
+ {
+ return shortName;
+ }
+ else
+ {
+ return name.ToString();
+ }
+ }
+ set
+ {
+ shortName = value;
+ }
+ }
+
+ public virtual Model.Element Element
+ {
+ get { return element; }
+ }
+
+ public virtual string Value
+ {
+ get
+ {
+ if (element == null)
+ return "";
+ return langModel.CanonicalName(element);
+ }
+ }
+
+ public virtual IEnumerable<Model.Element> References
+ {
+ get
+ {
+ foreach (var r in name.Dependencies)
+ yield return r;
+ if (element != null)
+ yield return element;
+ }
+ }
+ }
+
+ public class ContainerNode<T> : DisplayNode
+ {
+ protected Func<T, IDisplayNode> convert;
+ protected IEnumerable<T> data;
+
+ public ContainerNode(EdgeName name, Func<T, IDisplayNode> convert, IEnumerable<T> data) : base(null, name, null)
+ {
+ this.convert = convert;
+ this.data = data;
+ }
+
+ public ContainerNode(string name, Func<T, IDisplayNode> convert, IEnumerable<T> data)
+ : this(new EdgeName(name), convert, data)
+ {
+ }
+
+ protected override void ComputeChildren()
+ {
+ foreach (var f in data) {
+ var res = convert(f);
+ if (res != null)
+ children.Add(res);
+ }
+ }
+ }
+
+
+ public static class Util
+ {
+ public static void Assert(bool cond)
+ {
+ if (!cond) throw new System.Exception("assertion violation");
+ }
+
+ public static string Concat(this IEnumerable<string> strs, string sep)
+ {
+ var res = new StringBuilder();
+ foreach (var e in strs)
+ res.Append(e).Append(sep);
+ if (res.Length > 0)
+ res.Length -= sep.Length;
+ return res.ToString();
+ }
+
+ public static IEnumerable<T> Empty<T>() { yield break; }
+
+ public static IEnumerable<T> Singleton<T>(T e) { yield return e; }
+
+ public static IEnumerable<T> Concat1<T>(this IEnumerable<T> s, T e) { return s.Concat(Singleton(e)); }
+
+ public static IEnumerable<T> Map<S, T>(this IEnumerable<S> inp, Func<S, T> conv)
+ {
+ foreach (var s in inp) yield return conv(s);
+ }
+
+ public static void Iter<T>(this IEnumerable<T> inp, Action<T> fn)
+ {
+ foreach (var s in inp) fn(s);
+ }
+
+ public static void AddRange<T>(this HashSet<T> st, IEnumerable<T> elts)
+ {
+ foreach (var e in elts) st.Add(e);
+ }
+
+ public static T OrElse<T>(T a, T b)
+ where T : class
+ {
+ if (a != null) return a;
+ return b;
+ }
+
+ public static S GetWithDefault<T, S>(this Dictionary<T, S> dict, T key, S defl)
+ {
+ S r;
+ if (dict.TryGetValue(key, out r))
+ return r;
+ return defl;
+ }
+ }
+
+}
diff --git a/Source/ModelViewer/Main.Designer.cs b/Source/ModelViewer/Main.Designer.cs
index a58e7354..be15f3c6 100644
--- a/Source/ModelViewer/Main.Designer.cs
+++ b/Source/ModelViewer/Main.Designer.cs
@@ -1,499 +1,499 @@
-namespace Microsoft.Boogie.ModelViewer
-{
- partial class Main
- {
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null)) {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- this.components = new System.ComponentModel.Container();
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
- this.currentStateView = new System.Windows.Forms.ListView();
- this.name = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.prevValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.stateViewMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.dummyItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.splitContainer1 = new System.Windows.Forms.SplitContainer();
- this.splitContainer2 = new System.Windows.Forms.SplitContainer();
- this.matchesList = new System.Windows.Forms.ListView();
- this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.linkLabel1 = new System.Windows.Forms.LinkLabel();
- this.label1 = new System.Windows.Forms.Label();
- this.textBox1 = new System.Windows.Forms.TextBox();
- this.stateList = new System.Windows.Forms.ListView();
- this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.showSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.menuStrip1 = new System.Windows.Forms.MenuStrip();
- this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.openModelMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
- this.reloadModelFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.normalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.expertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.everythingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.includeTheKitchenSinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
- this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.largeFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.modelsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.openModelFileDialog = new System.Windows.Forms.OpenFileDialog();
- this.stateViewMenu.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
- this.splitContainer1.Panel1.SuspendLayout();
- this.splitContainer1.Panel2.SuspendLayout();
- this.splitContainer1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
- this.splitContainer2.Panel1.SuspendLayout();
- this.splitContainer2.Panel2.SuspendLayout();
- this.splitContainer2.SuspendLayout();
- this.contextMenuStrip1.SuspendLayout();
- this.menuStrip1.SuspendLayout();
- this.SuspendLayout();
- //
- // currentStateView
- //
- this.currentStateView.BackColor = System.Drawing.SystemColors.Window;
- this.currentStateView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.name,
- this.value,
- this.prevValue});
- this.currentStateView.ContextMenuStrip = this.stateViewMenu;
- this.currentStateView.Dock = System.Windows.Forms.DockStyle.Fill;
- this.currentStateView.FullRowSelect = true;
- this.currentStateView.GridLines = true;
- this.currentStateView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
- this.currentStateView.Location = new System.Drawing.Point(0, 0);
- this.currentStateView.MultiSelect = false;
- this.currentStateView.Name = "currentStateView";
- this.currentStateView.OwnerDraw = true;
- this.currentStateView.ShowItemToolTips = true;
- this.currentStateView.Size = new System.Drawing.Size(596, 344);
- this.currentStateView.TabIndex = 0;
- this.currentStateView.UseCompatibleStateImageBehavior = false;
- this.currentStateView.View = System.Windows.Forms.View.Details;
- this.currentStateView.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged);
- this.currentStateView.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader);
- this.currentStateView.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem);
- this.currentStateView.SelectedIndexChanged += new System.EventHandler(this.currentStateView_SelectedIndexChanged);
- this.currentStateView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.currentStateView_KeyDown);
- this.currentStateView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
- this.currentStateView.Resize += new System.EventHandler(this.listView1_Resize);
- //
- // name
- //
- this.name.Text = "Name";
- this.name.Width = 298;
- //
- // value
- //
- this.value.Text = "Value";
- this.value.Width = 126;
- //
- // prevValue
- //
- this.prevValue.Text = "Previous";
- this.prevValue.Width = 100;
- //
- // stateViewMenu
- //
- this.stateViewMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.dummyItemToolStripMenuItem});
- this.stateViewMenu.Name = "stateViewMenu";
- this.stateViewMenu.Size = new System.Drawing.Size(145, 26);
- this.stateViewMenu.Opening += new System.ComponentModel.CancelEventHandler(this.stateViewMenu_Opening);
- //
- // dummyItemToolStripMenuItem
- //
- this.dummyItemToolStripMenuItem.Name = "dummyItemToolStripMenuItem";
- this.dummyItemToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
- this.dummyItemToolStripMenuItem.Text = "Dummy item";
- //
- // splitContainer1
- //
- this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.splitContainer1.Location = new System.Drawing.Point(0, 24);
- this.splitContainer1.Name = "splitContainer1";
- //
- // splitContainer1.Panel1
- //
- this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
- //
- // splitContainer1.Panel2
- //
- this.splitContainer1.Panel2.Controls.Add(this.stateList);
- this.splitContainer1.Size = new System.Drawing.Size(915, 449);
- this.splitContainer1.SplitterDistance = 596;
- this.splitContainer1.TabIndex = 1;
- //
- // splitContainer2
- //
- this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
- this.splitContainer2.Location = new System.Drawing.Point(0, 0);
- this.splitContainer2.Name = "splitContainer2";
- this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
- //
- // splitContainer2.Panel1
- //
- this.splitContainer2.Panel1.Controls.Add(this.currentStateView);
- //
- // splitContainer2.Panel2
- //
- this.splitContainer2.Panel2.Controls.Add(this.matchesList);
- this.splitContainer2.Panel2.Controls.Add(this.linkLabel1);
- this.splitContainer2.Panel2.Controls.Add(this.label1);
- this.splitContainer2.Panel2.Controls.Add(this.textBox1);
- this.splitContainer2.Size = new System.Drawing.Size(596, 449);
- this.splitContainer2.SplitterDistance = 344;
- this.splitContainer2.TabIndex = 1;
- //
- // matchesList
- //
- this.matchesList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.matchesList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.columnHeader4,
- this.columnHeader5});
- this.matchesList.FullRowSelect = true;
- this.matchesList.GridLines = true;
- this.matchesList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
- this.matchesList.Location = new System.Drawing.Point(0, 29);
- this.matchesList.MultiSelect = false;
- this.matchesList.Name = "matchesList";
- this.matchesList.OwnerDraw = true;
- this.matchesList.ShowItemToolTips = true;
- this.matchesList.Size = new System.Drawing.Size(596, 72);
- this.matchesList.TabIndex = 4;
- this.matchesList.UseCompatibleStateImageBehavior = false;
- this.matchesList.View = System.Windows.Forms.View.Details;
- this.matchesList.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged);
- this.matchesList.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader);
- this.matchesList.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem);
- this.matchesList.DoubleClick += new System.EventHandler(this.matchesList_DoubleClick);
- this.matchesList.Resize += new System.EventHandler(this.matchesList_Resize);
- //
- // columnHeader4
- //
- this.columnHeader4.Text = "Name";
- this.columnHeader4.Width = 300;
- //
- // columnHeader5
- //
- this.columnHeader5.Text = "Value";
- this.columnHeader5.Width = 250;
- //
- // linkLabel1
- //
- this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.linkLabel1.AutoSize = true;
- this.linkLabel1.Location = new System.Drawing.Point(536, 5);
- this.linkLabel1.Name = "linkLabel1";
- this.linkLabel1.Size = new System.Drawing.Size(57, 13);
- this.linkLabel1.TabIndex = 3;
- this.linkLabel1.TabStop = true;
- this.linkLabel1.Text = "Show All...";
- this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue;
- this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(3, 5);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(44, 13);
- this.label1.TabIndex = 2;
- this.label1.Text = "Search:";
- //
- // textBox1
- //
- this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.textBox1.Location = new System.Drawing.Point(53, 3);
- this.textBox1.Name = "textBox1";
- this.textBox1.Size = new System.Drawing.Size(477, 20);
- this.textBox1.TabIndex = 1;
- this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
- //
- // stateList
- //
- this.stateList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.columnHeader3,
- this.columnHeader1,
- this.columnHeader2});
- this.stateList.ContextMenuStrip = this.contextMenuStrip1;
- this.stateList.Dock = System.Windows.Forms.DockStyle.Fill;
- this.stateList.FullRowSelect = true;
- this.stateList.GridLines = true;
- this.stateList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
- this.stateList.Location = new System.Drawing.Point(0, 0);
- this.stateList.MultiSelect = false;
- this.stateList.Name = "stateList";
- this.stateList.ShowItemToolTips = true;
- this.stateList.Size = new System.Drawing.Size(315, 449);
- this.stateList.TabIndex = 0;
- this.stateList.UseCompatibleStateImageBehavior = false;
- this.stateList.View = System.Windows.Forms.View.Details;
- this.stateList.SelectedIndexChanged += new System.EventHandler(this.stateList_SelectedIndexChanged);
- this.stateList.DoubleClick += new System.EventHandler(this.stateList_DoubleClick);
- //
- // columnHeader3
- //
- this.columnHeader3.Text = "#";
- this.columnHeader3.Width = 22;
- //
- // columnHeader1
- //
- this.columnHeader1.Text = "State";
- this.columnHeader1.Width = 169;
- //
- // columnHeader2
- //
- this.columnHeader2.Text = "Value";
- this.columnHeader2.Width = 116;
- //
- // contextMenuStrip1
- //
- this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.showSourceToolStripMenuItem});
- this.contextMenuStrip1.Name = "contextMenuStrip1";
- this.contextMenuStrip1.Size = new System.Drawing.Size(142, 26);
- //
- // showSourceToolStripMenuItem
- //
- this.showSourceToolStripMenuItem.Name = "showSourceToolStripMenuItem";
- this.showSourceToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
- this.showSourceToolStripMenuItem.Text = "Show source";
- this.showSourceToolStripMenuItem.Click += new System.EventHandler(this.showSourceToolStripMenuItem_Click);
- //
- // menuStrip1
- //
- this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.fileToolStripMenuItem,
- this.viewToolStripMenuItem,
- this.modelsToolStripMenuItem});
- this.menuStrip1.Location = new System.Drawing.Point(0, 0);
- this.menuStrip1.Name = "menuStrip1";
- this.menuStrip1.Size = new System.Drawing.Size(915, 24);
- this.menuStrip1.TabIndex = 1;
- this.menuStrip1.Text = "menuStrip1";
- //
- // fileToolStripMenuItem
- //
- this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.openModelMenuItem,
- this.toolStripSeparator1,
- this.reloadModelFileToolStripMenuItem,
- this.exitToolStripMenuItem});
- this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
- this.fileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
- this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
- this.fileToolStripMenuItem.Text = "&File";
- //
- // openModelMenuItem
- //
- this.openModelMenuItem.Name = "openModelMenuItem";
- this.openModelMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
- this.openModelMenuItem.Size = new System.Drawing.Size(211, 22);
- this.openModelMenuItem.Text = "&Open model file...";
- this.openModelMenuItem.Click += new System.EventHandler(this.openModelMenuItem_Click);
- //
- // toolStripSeparator1
- //
- this.toolStripSeparator1.Name = "toolStripSeparator1";
- this.toolStripSeparator1.Size = new System.Drawing.Size(208, 6);
- //
- // reloadModelFileToolStripMenuItem
- //
- this.reloadModelFileToolStripMenuItem.Name = "reloadModelFileToolStripMenuItem";
- this.reloadModelFileToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5;
- this.reloadModelFileToolStripMenuItem.Size = new System.Drawing.Size(211, 22);
- this.reloadModelFileToolStripMenuItem.Text = "&Reload model file";
- this.reloadModelFileToolStripMenuItem.Click += new System.EventHandler(this.reloadModelFileToolStripMenuItem_Click);
- //
- // exitToolStripMenuItem
- //
- this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
- this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
- this.exitToolStripMenuItem.Size = new System.Drawing.Size(211, 22);
- this.exitToolStripMenuItem.Text = "&Exit";
- this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
- //
- // viewToolStripMenuItem
- //
- this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.normalToolStripMenuItem,
- this.expertToolStripMenuItem,
- this.everythingToolStripMenuItem,
- this.includeTheKitchenSinkToolStripMenuItem,
- this.toolStripMenuItem1,
- this.debugToolStripMenuItem,
- this.largeFontToolStripMenuItem});
- this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
- this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
- this.viewToolStripMenuItem.Text = "&View";
- //
- // normalToolStripMenuItem
- //
- this.normalToolStripMenuItem.Name = "normalToolStripMenuItem";
- this.normalToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
- this.normalToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.normalToolStripMenuItem.Text = "&Normal";
- this.normalToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // expertToolStripMenuItem
- //
- this.expertToolStripMenuItem.Checked = true;
- this.expertToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
- this.expertToolStripMenuItem.Name = "expertToolStripMenuItem";
- this.expertToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X)));
- this.expertToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.expertToolStripMenuItem.Text = "E&xpert";
- this.expertToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // everythingToolStripMenuItem
- //
- this.everythingToolStripMenuItem.Name = "everythingToolStripMenuItem";
- this.everythingToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E)));
- this.everythingToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.everythingToolStripMenuItem.Text = "&Everything";
- this.everythingToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // includeTheKitchenSinkToolStripMenuItem
- //
- this.includeTheKitchenSinkToolStripMenuItem.Name = "includeTheKitchenSinkToolStripMenuItem";
- this.includeTheKitchenSinkToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K)));
- this.includeTheKitchenSinkToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.includeTheKitchenSinkToolStripMenuItem.Text = "&Include the kitchen sink";
- this.includeTheKitchenSinkToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
- //
- // toolStripMenuItem1
- //
- this.toolStripMenuItem1.Name = "toolStripMenuItem1";
- this.toolStripMenuItem1.Size = new System.Drawing.Size(237, 6);
- //
- // debugToolStripMenuItem
- //
- this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
- this.debugToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.debugToolStripMenuItem.Text = "Debug";
- this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click);
- //
- // largeFontToolStripMenuItem
- //
- this.largeFontToolStripMenuItem.Name = "largeFontToolStripMenuItem";
- this.largeFontToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
- this.largeFontToolStripMenuItem.Text = "Large font";
- this.largeFontToolStripMenuItem.Click += new System.EventHandler(this.largeFontToolStripMenuItem_Click);
- //
- // modelsToolStripMenuItem
- //
- this.modelsToolStripMenuItem.Name = "modelsToolStripMenuItem";
- this.modelsToolStripMenuItem.Size = new System.Drawing.Size(58, 20);
- this.modelsToolStripMenuItem.Text = "&Models";
- //
- // openModelFileDialog
- //
- this.openModelFileDialog.Filter = "Model files (*.model)|*.model|All files (*.*)|*.*";
- this.openModelFileDialog.Title = "Open model file";
- //
- // Main
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(915, 473);
- this.Controls.Add(this.splitContainer1);
- this.Controls.Add(this.menuStrip1);
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.Name = "Main";
- this.Text = "Boogie Verification Debugger";
- this.Load += new System.EventHandler(this.Main_Load);
- this.stateViewMenu.ResumeLayout(false);
- this.splitContainer1.Panel1.ResumeLayout(false);
- this.splitContainer1.Panel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
- this.splitContainer1.ResumeLayout(false);
- this.splitContainer2.Panel1.ResumeLayout(false);
- this.splitContainer2.Panel2.ResumeLayout(false);
- this.splitContainer2.Panel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
- this.splitContainer2.ResumeLayout(false);
- this.contextMenuStrip1.ResumeLayout(false);
- this.menuStrip1.ResumeLayout(false);
- this.menuStrip1.PerformLayout();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.ListView currentStateView;
- private System.Windows.Forms.ColumnHeader name;
- private System.Windows.Forms.ColumnHeader value;
- private System.Windows.Forms.SplitContainer splitContainer1;
- private System.Windows.Forms.ListView stateList;
- private System.Windows.Forms.ColumnHeader columnHeader1;
- private System.Windows.Forms.ColumnHeader columnHeader2;
- private System.Windows.Forms.ColumnHeader columnHeader3;
- private System.Windows.Forms.ColumnHeader prevValue;
- private System.Windows.Forms.SplitContainer splitContainer2;
- private System.Windows.Forms.ListView matchesList;
- private System.Windows.Forms.ColumnHeader columnHeader4;
- private System.Windows.Forms.ColumnHeader columnHeader5;
- private System.Windows.Forms.LinkLabel linkLabel1;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.TextBox textBox1;
- private System.Windows.Forms.ContextMenuStrip stateViewMenu;
- private System.Windows.Forms.ToolStripMenuItem dummyItemToolStripMenuItem;
- private System.Windows.Forms.MenuStrip menuStrip1;
- private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem normalToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem expertToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem everythingToolStripMenuItem;
- private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
- private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem modelsToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem includeTheKitchenSinkToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem reloadModelFileToolStripMenuItem;
- private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
- private System.Windows.Forms.ToolStripMenuItem showSourceToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem openModelMenuItem;
- private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
- private System.Windows.Forms.OpenFileDialog openModelFileDialog;
- private System.Windows.Forms.ToolStripMenuItem largeFontToolStripMenuItem;
-
-
- }
-}
-
+namespace Microsoft.Boogie.ModelViewer
+{
+ partial class Main
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
+ this.currentStateView = new System.Windows.Forms.ListView();
+ this.name = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.prevValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.stateViewMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.dummyItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+ this.matchesList = new System.Windows.Forms.ListView();
+ this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+ this.label1 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.stateList = new System.Windows.Forms.ListView();
+ this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.showSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+ this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.openModelMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.reloadModelFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.normalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.expertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.everythingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.includeTheKitchenSinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+ this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.largeFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.modelsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.openModelFileDialog = new System.Windows.Forms.OpenFileDialog();
+ this.stateViewMenu.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+ this.splitContainer2.Panel1.SuspendLayout();
+ this.splitContainer2.Panel2.SuspendLayout();
+ this.splitContainer2.SuspendLayout();
+ this.contextMenuStrip1.SuspendLayout();
+ this.menuStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // currentStateView
+ //
+ this.currentStateView.BackColor = System.Drawing.SystemColors.Window;
+ this.currentStateView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.name,
+ this.value,
+ this.prevValue});
+ this.currentStateView.ContextMenuStrip = this.stateViewMenu;
+ this.currentStateView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.currentStateView.FullRowSelect = true;
+ this.currentStateView.GridLines = true;
+ this.currentStateView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.currentStateView.Location = new System.Drawing.Point(0, 0);
+ this.currentStateView.MultiSelect = false;
+ this.currentStateView.Name = "currentStateView";
+ this.currentStateView.OwnerDraw = true;
+ this.currentStateView.ShowItemToolTips = true;
+ this.currentStateView.Size = new System.Drawing.Size(596, 344);
+ this.currentStateView.TabIndex = 0;
+ this.currentStateView.UseCompatibleStateImageBehavior = false;
+ this.currentStateView.View = System.Windows.Forms.View.Details;
+ this.currentStateView.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged);
+ this.currentStateView.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader);
+ this.currentStateView.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem);
+ this.currentStateView.SelectedIndexChanged += new System.EventHandler(this.currentStateView_SelectedIndexChanged);
+ this.currentStateView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.currentStateView_KeyDown);
+ this.currentStateView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
+ this.currentStateView.Resize += new System.EventHandler(this.listView1_Resize);
+ //
+ // name
+ //
+ this.name.Text = "Name";
+ this.name.Width = 298;
+ //
+ // value
+ //
+ this.value.Text = "Value";
+ this.value.Width = 126;
+ //
+ // prevValue
+ //
+ this.prevValue.Text = "Previous";
+ this.prevValue.Width = 100;
+ //
+ // stateViewMenu
+ //
+ this.stateViewMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.dummyItemToolStripMenuItem});
+ this.stateViewMenu.Name = "stateViewMenu";
+ this.stateViewMenu.Size = new System.Drawing.Size(145, 26);
+ this.stateViewMenu.Opening += new System.ComponentModel.CancelEventHandler(this.stateViewMenu_Opening);
+ //
+ // dummyItemToolStripMenuItem
+ //
+ this.dummyItemToolStripMenuItem.Name = "dummyItemToolStripMenuItem";
+ this.dummyItemToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
+ this.dummyItemToolStripMenuItem.Text = "Dummy item";
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer1.Location = new System.Drawing.Point(0, 24);
+ this.splitContainer1.Name = "splitContainer1";
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.stateList);
+ this.splitContainer1.Size = new System.Drawing.Size(915, 449);
+ this.splitContainer1.SplitterDistance = 596;
+ this.splitContainer1.TabIndex = 1;
+ //
+ // splitContainer2
+ //
+ this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer2.Location = new System.Drawing.Point(0, 0);
+ this.splitContainer2.Name = "splitContainer2";
+ this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // splitContainer2.Panel1
+ //
+ this.splitContainer2.Panel1.Controls.Add(this.currentStateView);
+ //
+ // splitContainer2.Panel2
+ //
+ this.splitContainer2.Panel2.Controls.Add(this.matchesList);
+ this.splitContainer2.Panel2.Controls.Add(this.linkLabel1);
+ this.splitContainer2.Panel2.Controls.Add(this.label1);
+ this.splitContainer2.Panel2.Controls.Add(this.textBox1);
+ this.splitContainer2.Size = new System.Drawing.Size(596, 449);
+ this.splitContainer2.SplitterDistance = 344;
+ this.splitContainer2.TabIndex = 1;
+ //
+ // matchesList
+ //
+ this.matchesList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.matchesList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader4,
+ this.columnHeader5});
+ this.matchesList.FullRowSelect = true;
+ this.matchesList.GridLines = true;
+ this.matchesList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+ this.matchesList.Location = new System.Drawing.Point(0, 29);
+ this.matchesList.MultiSelect = false;
+ this.matchesList.Name = "matchesList";
+ this.matchesList.OwnerDraw = true;
+ this.matchesList.ShowItemToolTips = true;
+ this.matchesList.Size = new System.Drawing.Size(596, 72);
+ this.matchesList.TabIndex = 4;
+ this.matchesList.UseCompatibleStateImageBehavior = false;
+ this.matchesList.View = System.Windows.Forms.View.Details;
+ this.matchesList.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.listView1_ColumnWidthChanged);
+ this.matchesList.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader);
+ this.matchesList.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem);
+ this.matchesList.DoubleClick += new System.EventHandler(this.matchesList_DoubleClick);
+ this.matchesList.Resize += new System.EventHandler(this.matchesList_Resize);
+ //
+ // columnHeader4
+ //
+ this.columnHeader4.Text = "Name";
+ this.columnHeader4.Width = 300;
+ //
+ // columnHeader5
+ //
+ this.columnHeader5.Text = "Value";
+ this.columnHeader5.Width = 250;
+ //
+ // linkLabel1
+ //
+ this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.linkLabel1.AutoSize = true;
+ this.linkLabel1.Location = new System.Drawing.Point(536, 5);
+ this.linkLabel1.Name = "linkLabel1";
+ this.linkLabel1.Size = new System.Drawing.Size(57, 13);
+ this.linkLabel1.TabIndex = 3;
+ this.linkLabel1.TabStop = true;
+ this.linkLabel1.Text = "Show All...";
+ this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue;
+ this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(3, 5);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(44, 13);
+ this.label1.TabIndex = 2;
+ this.label1.Text = "Search:";
+ //
+ // textBox1
+ //
+ this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.textBox1.Location = new System.Drawing.Point(53, 3);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(477, 20);
+ this.textBox1.TabIndex = 1;
+ this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
+ //
+ // stateList
+ //
+ this.stateList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader3,
+ this.columnHeader1,
+ this.columnHeader2});
+ this.stateList.ContextMenuStrip = this.contextMenuStrip1;
+ this.stateList.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.stateList.FullRowSelect = true;
+ this.stateList.GridLines = true;
+ this.stateList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.stateList.Location = new System.Drawing.Point(0, 0);
+ this.stateList.MultiSelect = false;
+ this.stateList.Name = "stateList";
+ this.stateList.ShowItemToolTips = true;
+ this.stateList.Size = new System.Drawing.Size(315, 449);
+ this.stateList.TabIndex = 0;
+ this.stateList.UseCompatibleStateImageBehavior = false;
+ this.stateList.View = System.Windows.Forms.View.Details;
+ this.stateList.SelectedIndexChanged += new System.EventHandler(this.stateList_SelectedIndexChanged);
+ this.stateList.DoubleClick += new System.EventHandler(this.stateList_DoubleClick);
+ //
+ // columnHeader3
+ //
+ this.columnHeader3.Text = "#";
+ this.columnHeader3.Width = 22;
+ //
+ // columnHeader1
+ //
+ this.columnHeader1.Text = "State";
+ this.columnHeader1.Width = 169;
+ //
+ // columnHeader2
+ //
+ this.columnHeader2.Text = "Value";
+ this.columnHeader2.Width = 116;
+ //
+ // contextMenuStrip1
+ //
+ this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.showSourceToolStripMenuItem});
+ this.contextMenuStrip1.Name = "contextMenuStrip1";
+ this.contextMenuStrip1.Size = new System.Drawing.Size(142, 26);
+ //
+ // showSourceToolStripMenuItem
+ //
+ this.showSourceToolStripMenuItem.Name = "showSourceToolStripMenuItem";
+ this.showSourceToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
+ this.showSourceToolStripMenuItem.Text = "Show source";
+ this.showSourceToolStripMenuItem.Click += new System.EventHandler(this.showSourceToolStripMenuItem_Click);
+ //
+ // menuStrip1
+ //
+ this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.fileToolStripMenuItem,
+ this.viewToolStripMenuItem,
+ this.modelsToolStripMenuItem});
+ this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+ this.menuStrip1.Name = "menuStrip1";
+ this.menuStrip1.Size = new System.Drawing.Size(915, 24);
+ this.menuStrip1.TabIndex = 1;
+ this.menuStrip1.Text = "menuStrip1";
+ //
+ // fileToolStripMenuItem
+ //
+ this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.openModelMenuItem,
+ this.toolStripSeparator1,
+ this.reloadModelFileToolStripMenuItem,
+ this.exitToolStripMenuItem});
+ this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+ this.fileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
+ this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+ this.fileToolStripMenuItem.Text = "&File";
+ //
+ // openModelMenuItem
+ //
+ this.openModelMenuItem.Name = "openModelMenuItem";
+ this.openModelMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
+ this.openModelMenuItem.Size = new System.Drawing.Size(211, 22);
+ this.openModelMenuItem.Text = "&Open model file...";
+ this.openModelMenuItem.Click += new System.EventHandler(this.openModelMenuItem_Click);
+ //
+ // toolStripSeparator1
+ //
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
+ this.toolStripSeparator1.Size = new System.Drawing.Size(208, 6);
+ //
+ // reloadModelFileToolStripMenuItem
+ //
+ this.reloadModelFileToolStripMenuItem.Name = "reloadModelFileToolStripMenuItem";
+ this.reloadModelFileToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5;
+ this.reloadModelFileToolStripMenuItem.Size = new System.Drawing.Size(211, 22);
+ this.reloadModelFileToolStripMenuItem.Text = "&Reload model file";
+ this.reloadModelFileToolStripMenuItem.Click += new System.EventHandler(this.reloadModelFileToolStripMenuItem_Click);
+ //
+ // exitToolStripMenuItem
+ //
+ this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+ this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
+ this.exitToolStripMenuItem.Size = new System.Drawing.Size(211, 22);
+ this.exitToolStripMenuItem.Text = "&Exit";
+ this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
+ //
+ // viewToolStripMenuItem
+ //
+ this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.normalToolStripMenuItem,
+ this.expertToolStripMenuItem,
+ this.everythingToolStripMenuItem,
+ this.includeTheKitchenSinkToolStripMenuItem,
+ this.toolStripMenuItem1,
+ this.debugToolStripMenuItem,
+ this.largeFontToolStripMenuItem});
+ this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+ this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+ this.viewToolStripMenuItem.Text = "&View";
+ //
+ // normalToolStripMenuItem
+ //
+ this.normalToolStripMenuItem.Name = "normalToolStripMenuItem";
+ this.normalToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
+ this.normalToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
+ this.normalToolStripMenuItem.Text = "&Normal";
+ this.normalToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
+ //
+ // expertToolStripMenuItem
+ //
+ this.expertToolStripMenuItem.Checked = true;
+ this.expertToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.expertToolStripMenuItem.Name = "expertToolStripMenuItem";
+ this.expertToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X)));
+ this.expertToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
+ this.expertToolStripMenuItem.Text = "E&xpert";
+ this.expertToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
+ //
+ // everythingToolStripMenuItem
+ //
+ this.everythingToolStripMenuItem.Name = "everythingToolStripMenuItem";
+ this.everythingToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E)));
+ this.everythingToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
+ this.everythingToolStripMenuItem.Text = "&Everything";
+ this.everythingToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
+ //
+ // includeTheKitchenSinkToolStripMenuItem
+ //
+ this.includeTheKitchenSinkToolStripMenuItem.Name = "includeTheKitchenSinkToolStripMenuItem";
+ this.includeTheKitchenSinkToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K)));
+ this.includeTheKitchenSinkToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
+ this.includeTheKitchenSinkToolStripMenuItem.Text = "&Include the kitchen sink";
+ this.includeTheKitchenSinkToolStripMenuItem.Click += new System.EventHandler(this.normalToolStripMenuItem_Click);
+ //
+ // toolStripMenuItem1
+ //
+ this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+ this.toolStripMenuItem1.Size = new System.Drawing.Size(237, 6);
+ //
+ // debugToolStripMenuItem
+ //
+ this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
+ this.debugToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
+ this.debugToolStripMenuItem.Text = "Debug";
+ this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click);
+ //
+ // largeFontToolStripMenuItem
+ //
+ this.largeFontToolStripMenuItem.Name = "largeFontToolStripMenuItem";
+ this.largeFontToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
+ this.largeFontToolStripMenuItem.Text = "Large font";
+ this.largeFontToolStripMenuItem.Click += new System.EventHandler(this.largeFontToolStripMenuItem_Click);
+ //
+ // modelsToolStripMenuItem
+ //
+ this.modelsToolStripMenuItem.Name = "modelsToolStripMenuItem";
+ this.modelsToolStripMenuItem.Size = new System.Drawing.Size(58, 20);
+ this.modelsToolStripMenuItem.Text = "&Models";
+ //
+ // openModelFileDialog
+ //
+ this.openModelFileDialog.Filter = "Model files (*.model)|*.model|All files (*.*)|*.*";
+ this.openModelFileDialog.Title = "Open model file";
+ //
+ // Main
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(915, 473);
+ this.Controls.Add(this.splitContainer1);
+ this.Controls.Add(this.menuStrip1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "Main";
+ this.Text = "Boogie Verification Debugger";
+ this.Load += new System.EventHandler(this.Main_Load);
+ this.stateViewMenu.ResumeLayout(false);
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+ this.splitContainer1.ResumeLayout(false);
+ this.splitContainer2.Panel1.ResumeLayout(false);
+ this.splitContainer2.Panel2.ResumeLayout(false);
+ this.splitContainer2.Panel2.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+ this.splitContainer2.ResumeLayout(false);
+ this.contextMenuStrip1.ResumeLayout(false);
+ this.menuStrip1.ResumeLayout(false);
+ this.menuStrip1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListView currentStateView;
+ private System.Windows.Forms.ColumnHeader name;
+ private System.Windows.Forms.ColumnHeader value;
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.ListView stateList;
+ private System.Windows.Forms.ColumnHeader columnHeader1;
+ private System.Windows.Forms.ColumnHeader columnHeader2;
+ private System.Windows.Forms.ColumnHeader columnHeader3;
+ private System.Windows.Forms.ColumnHeader prevValue;
+ private System.Windows.Forms.SplitContainer splitContainer2;
+ private System.Windows.Forms.ListView matchesList;
+ private System.Windows.Forms.ColumnHeader columnHeader4;
+ private System.Windows.Forms.ColumnHeader columnHeader5;
+ private System.Windows.Forms.LinkLabel linkLabel1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.ContextMenuStrip stateViewMenu;
+ private System.Windows.Forms.ToolStripMenuItem dummyItemToolStripMenuItem;
+ private System.Windows.Forms.MenuStrip menuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem normalToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem expertToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem everythingToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem modelsToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem includeTheKitchenSinkToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem reloadModelFileToolStripMenuItem;
+ private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem showSourceToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem openModelMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+ private System.Windows.Forms.OpenFileDialog openModelFileDialog;
+ private System.Windows.Forms.ToolStripMenuItem largeFontToolStripMenuItem;
+
+
+ }
+}
+
diff --git a/Source/ModelViewer/Main.cs b/Source/ModelViewer/Main.cs
index 5fed89da..4697e454 100644
--- a/Source/ModelViewer/Main.cs
+++ b/Source/ModelViewer/Main.cs
@@ -1,870 +1,870 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-
-using System.IO;
-using Microsoft.Boogie;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public partial class Main : Form
- {
- SkeletonItem unfoldingRoot;
- SkeletonItem[] allItems;
- public int CurrentState, PreviousState = -1;
- IState[] states;
- internal ILanguageProvider langProvider;
- public ILanguageSpecificModel LangModel;
- ToolStripMenuItem[] viewItems;
- Model currentModel;
- Model[] allModels;
- int modelId;
- string lastModelFileName;
- internal ViewOptions viewOpts = new ViewOptions();
- Font smallFont, largeFont;
- int lineHeight;
-
- // TODO this should be dynamically loaded
- IEnumerable<ILanguageProvider> Providers()
- {
- yield return BCT.Provider.Instance;
- yield return Vcc.Provider.Instance;
- yield return Dafny.Provider.Instance;
- yield return Base.Provider.Instance;
- }
-
- public Main(string[] args, bool runAsHostedWindow = false)
- {
- InitializeComponent();
-
- smallFont = stateList.Font;
-
- if (runAsHostedWindow) {
- this.fileToolStripMenuItem.Enabled = false;
- this.fileToolStripMenuItem.Visible = false;
- }
-
- viewItems = new ToolStripMenuItem[] {
- normalToolStripMenuItem,
- expertToolStripMenuItem,
- everythingToolStripMenuItem,
- includeTheKitchenSinkToolStripMenuItem
- };
-
- var debugBreak = false;
- string filename = null;
-
- for (int i = 1; i < args.Length; i++) {
- var arg = args[i];
- if (arg == "/break" || arg == "-break")
- debugBreak = true;
- else
- filename = arg;
- }
-
- if (debugBreak) {
- System.Diagnostics.Debugger.Launch();
- }
-
- if (filename != null) {
- var idx = filename.IndexOf(':');
- if (idx > 0) {
- modelId = int.Parse(filename.Substring(idx + 1));
- filename = filename.Substring(0, idx);
- }
- }
-
- this.ReadModels(filename, this.modelId);
- }
-
- private void SetWindowTitle(string fileName)
- {
- if (fileName == null) {
- this.Text = "Boogie Verification Debugger";
- } else {
- this.Text = Path.GetFileName(fileName) + " - Boogie Verification Debugger";
- }
- }
-
- public void ReadModel(string model, int setModelIdTo = 0)
- {
- Contract.Requires(model != null);
-
- using (var rd = new StringReader(model))
- {
- allModels = Model.ParseModels(rd).ToArray();
- }
-
- AddAndLoadModel(setModelIdTo);
- }
-
- public void ReadModels(string modelFileName, int setModelIdTo)
- {
- this.lastModelFileName = modelFileName;
- this.langProvider = Base.Provider.Instance;
-
- if (!string.IsNullOrWhiteSpace(modelFileName) && File.Exists(modelFileName)) {
- using (var rd = File.OpenText(modelFileName)) {
- allModels = Model.ParseModels(rd).ToArray();
- }
-
- AddAndLoadModel(setModelIdTo);
- } else {
- currentModel = new Model();
- }
-
- this.SetWindowTitle(modelFileName);
- }
-
- private void AddAndLoadModel(int setModelIdTo)
- {
- modelId = setModelIdTo;
-
- if (modelId >= allModels.Length)
- modelId = 0;
-
- currentModel = allModels[modelId];
- AddModelMenu();
-
- foreach (var p in Providers())
- {
- if (p.IsMyModel(currentModel))
- {
- this.langProvider = p;
- break;
- }
- }
-
- LoadModel(modelId);
- }
-
- private void LoadModel(int idx)
- {
- var i = 0;
-
- //var stateIdx = stateList.SelectedIndices.Count == 0 ? 0 : stateList.SelectedIndices[0];
-
- modelId = idx;
- foreach (ToolStripMenuItem it in modelsToolStripMenuItem.DropDownItems) {
- it.Checked = i++ == idx;
- }
- currentModel = allModels[idx];
- BuildModel();
-
- /*
- if (stateList.Items.Count <= stateIdx)
- stateIdx = 0;
- stateList.Items[stateIdx].Selected = true;
- */
- }
-
- private void AddModelMenu()
- {
- modelsToolStripMenuItem.DropDownItems.Clear();
- var idx = 0;
- foreach (var m in allModels) {
- var currIdx = idx++; // this local needs to be in this block
- var menuItem = modelsToolStripMenuItem.DropDownItems.Add(string.Format("Model #&{0}", currIdx), null, (s, a) => LoadModel(currIdx)) as ToolStripMenuItem;
- if (currIdx <= 9) {
- menuItem.ShortcutKeys = Keys.Control | (Keys)(currIdx + Keys.D0);
- }
- }
- }
-
- private void BuildModel()
- {
- stateList.Items.Clear();
-
- var items = new List<ListViewItem>();
- LangModel = langProvider.GetLanguageSpecificModel(currentModel, viewOpts);
- states = LangModel.States.ToArray();
- var oldRoot = unfoldingRoot;
- SkeletonItem selectedSkel = null;
- if (oldRoot != null && SelectedNode() != null) {
- selectedSkel = SelectedNode().skel;
- }
- unfoldingRoot = new SkeletonItem(this, states.Length);
- allItems = unfoldingRoot.PopulateRoot(states);
-
- var idx = 0;
- foreach (var i in states) {
- var it = new ListViewItem(new string[] { idx.ToString(), i.Name, "" });
- it.Tag = i;
- items.Add(it);
- idx++;
- }
- stateList.Items.AddRange(items.ToArray());
- unfoldingRoot.Expanded = true;
-
- if (oldRoot == null) {
- SetState(0);
- stateList.Items[0].Selected = true;
- SetColumnSizes();
- } else {
- var mapping = new Dictionary<SkeletonItem, SkeletonItem>();
- unfoldingRoot.SyncWith(mapping, oldRoot);
- SkeletonItem newIt = null;
- while (selectedSkel != null) {
- if (mapping.TryGetValue(selectedSkel, out newIt)) break;
- selectedSkel = selectedSkel.parent;
- }
- if (CurrentState >= stateList.Items.Count)
- CurrentState = 0;
- if (PreviousState >= stateList.Items.Count)
- PreviousState = -1;
- if (newIt != null) GotoNode(newIt);
- SyncStateListValues();
- UpdateMatches(true);
- }
- }
-
- private void SetColumnSizes()
- {
- currentStateView.Columns[0].Width = currentStateView.Width - currentStateView.Columns[1].Width - currentStateView.Columns[2].Width - 25;
- stateList.Columns[1].Width = stateList.Width - stateList.Columns[0].Width - stateList.Columns[2].Width - 25;
- }
-
- public void SetState(int id, bool updateView = false)
- {
- if (updateView)
- {
- stateList.SelectedIndices.Clear();
- stateList.SelectedIndices.Add(id);
- }
- if (CurrentState != id) {
- PreviousState = CurrentState;
- CurrentState = id;
- }
- UpdateMatches(true);
- }
-
- public void HideStateList()
- {
- stateList.Hide();
- splitContainer1.Panel2.Hide();
- splitContainer1.Panel2Collapsed = true;
- splitContainer1.SplitterDistance = splitContainer1.Width;
- }
-
- public void HideMenuStrip()
- {
- menuStrip1.Hide();
- }
-
- internal void Activate(TreeNode treeNode)
- {
- throw new NotImplementedException();
- }
-
- private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
- {
-
- }
-
- static Color Col(int c)
- {
- return Color.FromArgb(c >> 16, (c >> 8) & 0xff, c & 0xff);
- }
-
- static StringFormat center = new StringFormat() { Alignment = StringAlignment.Center };
- static Pen plusPen = new Pen(Col(0xaaaaaa));
- static Brush grayedOut = new SolidBrush(Col(0xaaaaaa));
- static Brush nonPrimary = new SolidBrush(Col(0xeeeeee));
- static Brush matchBg = new SolidBrush(Col(0xFFFA6F));
-
- static SolidBrush currentStateBrush = new SolidBrush(Color.Red);
- static SolidBrush regularStateBrush = new SolidBrush(Color.Black);
- static SolidBrush previousStateBrush = new SolidBrush(Color.Blue);
-
- static SolidBrush[] categoryBrushes = new SolidBrush[] {
- new SolidBrush(Color.Black), // Local
- new SolidBrush(Color.Black), // PhysField
- new SolidBrush(Color.Green), // SpecField
- new SolidBrush(Color.Peru), // MethodologyProperty
- new SolidBrush(Color.Green), // UserFunction
- new SolidBrush(Color.Black), // Maplet
- };
-
- private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
- {
- var item = (DisplayItem)e.Item;
- var skel = item.skel;
- var rect = e.Bounds;
- var listView = (ListView)sender;
- lineHeight = rect.Height;
- rect.Y += 1;
- rect.Height -= 2;
-
- var textBrush = Brushes.Black;
- if (listView.SelectedIndices.Count > 0 && listView.SelectedIndices[0] == e.ItemIndex) {
- e.Graphics.FillRectangle(Brushes.Aquamarine, rect);
- textBrush = Brushes.White;
- } else {
- var bg = Brushes.White;
- if (item.active && !skel.isPrimary[CurrentState])
- bg = nonPrimary;
- if (item.skel.isMatch)
- bg = matchBg;
- e.Graphics.FillRectangle(bg, rect);
- }
-
- var off = lineHeight * item.skel.level;
- if (item.IsMatchListItem)
- off = 0;
-
- {
- var plusRect = rect;
- plusRect.Width = lineHeight;
- plusRect.X += off;
- var plusBorder = plusRect;
- plusBorder.Height = lineHeight / 2;
- plusBorder.Width = lineHeight / 2;
- plusBorder.X += lineHeight / 4;
- plusBorder.Y += lineHeight / 4;
- e.Graphics.DrawRectangle(plusPen, plusBorder);
- if (skel.Expandable) {
- float midX = plusBorder.X + plusBorder.Width / 2;
- float midY = plusBorder.Y + plusBorder.Height / 2;
- e.Graphics.DrawLine(plusPen, plusBorder.X + 2, midY, plusBorder.Right - 2, midY);
- if (!item.skel.expanded)
- e.Graphics.DrawLine(plusPen, midX, plusBorder.Y + 2, midX, plusBorder.Bottom - 2);
- }
- }
-
- off += lineHeight + 3;
- var nameRect = rect;
- var font = listView.Font;
-
- textBrush = categoryBrushes[(int)item.dispNode.Category];
-
- if (!item.active)
- textBrush = grayedOut;
-
- nameRect.Width = listView.Columns[0].Width - 1 - off;
- nameRect.X += off;
- var width = DrawString(e.Graphics, item.SubItems[0].Text, font, textBrush, nameRect);
-
- textBrush = item.active ? Brushes.Black : grayedOut;
- nameRect.X += width + 4;
- nameRect.Width = listView.Columns[0].Width + listView.Columns[1].Width - nameRect.X;
- width = DrawString(e.Graphics, item.SubItems[1].Text, font, textBrush, nameRect);
-
- nameRect.X += width + 4;
- nameRect.Width = listView.Width - nameRect.X;
- var t = item.SubItems[2].Text;
- width = DrawString(e.Graphics, t, font, t == item.SubItems[1].Text ? grayedOut : Brushes.Black, nameRect);
- }
-
- private int DrawString(Graphics g, string s, Font font, Brush textBrush, Rectangle minRect)
- {
- var sz = g.MeasureString(s, font).Width;
- if (sz > minRect.Width - 2) {
- minRect.Width = (int)(sz + 20);
- }
- g.DrawString(s, font, textBrush, minRect);
- return minRect.Width;
- }
-
- private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
- {
- e.DrawBackground();
- var brush = regularStateBrush;
- if (e.Header.Index == 1)
- brush = currentStateBrush;
- else if (e.Header.Index == 2)
- brush = previousStateBrush;
-
- Rectangle r = e.Bounds;
- r.X += 5;
- r.Y += 4;
- DrawString(e.Graphics, e.Header.Text, e.Header.ListView.Font, brush, r);
- }
-
- private void listView1_MouseUp(object sender, MouseEventArgs e)
- {
- var clickedItem = (DisplayItem)currentStateView.GetItemAt(5, e.Y);
- if (clickedItem != null) {
- clickedItem.Selected = true;
- clickedItem.Focused = true;
-
- var skel = clickedItem.skel;
- int plusLoc = skel.level * lineHeight;
- if (skel.Expandable && e.X >= plusLoc && e.X <= plusLoc + lineHeight) {
- skel.Expanded = !skel.Expanded;
- SyncCurrentStateView();
- }
- }
- }
-
- private void SyncCurrentStateView()
- {
- SyncListView(unfoldingRoot.RecChildren, currentStateView, (x, y) => { });
- }
-
- private void SyncListView(IEnumerable<SkeletonItem> items, ListView listView, Action<DisplayItem, SkeletonItem> cb)
- {
- var ch = items.ToArray();
- var missing = ch.Length - listView.Items.Count;
- listView.BeginUpdate();
- if (missing < 0) {
- missing = -missing;
- while (missing-- > 0) {
- listView.Items.RemoveAt(listView.Items.Count - 1);
- }
- } else {
- while (missing-- > 0) {
- listView.Items.Add(new DisplayItem());
- }
- }
- for (int i = 0; i < ch.Length; ++i) {
- var di = (DisplayItem)listView.Items[i];
- cb(di, ch[i]);
- di.Set(ch[i], CurrentState, PreviousState);
- }
- listView.EndUpdate();
- listView.Invalidate();
- }
-
- private void listView1_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
- {
- currentStateView.Invalidate();
- }
-
- private void listView1_Resize(object sender, EventArgs e)
- {
- SetColumnSizes();
- currentStateView.Invalidate();
- }
-
- private void stateList_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (stateList.SelectedItems.Count == 0) return;
- var sel = stateList.SelectedItems[0].Index;
-
- if (PreviousState >= 0)
- stateList.Items[PreviousState].ForeColor = regularStateBrush.Color;
-
- SetState(sel);
- }
-
- DisplayItem SelectedNode()
- {
- if (currentStateView.SelectedItems.Count == 0) return null;
- return (DisplayItem)currentStateView.SelectedItems[0];
- }
-
- private void currentStateView_SelectedIndexChanged(object sender, EventArgs e)
- {
- SyncStateListValues();
- }
-
- private void SyncStateListValues()
- {
- var sel = SelectedNode();
- if (sel == null) return;
-
- stateList.BeginUpdate();
- for (int i = 0; i < sel.skel.displayNodes.Length; ++i) {
- var dn = sel.skel.displayNodes[i];
- stateList.Items[i].SubItems[2].Text = dn == null ? "" : dn.Value;
- }
- stateList.EndUpdate();
- }
-
- private void ExpandParents(SkeletonItem item)
- {
- item = item.parent;
- while (item != null) {
- item.Expanded = true;
- item = item.parent;
- }
- }
-
- private void textBox1_TextChanged(object sender, EventArgs e)
- {
- UpdateMatches(false);
- }
-
- private void UpdateMatches(bool force)
- {
- var bad = false;
- Model.Element eltEq = null;
- var eltRef = new List<Model.Element>();
- var words = new List<string>();
-
- foreach (var w in textBox1.Text.Split(' ')) {
- if (w == "") continue;
- if (w.StartsWith("eq:")) {
- if (eltEq != null) bad = true;
- else {
- eltEq = LangModel.FindElement(w.Substring(3));
- if (eltEq == null) bad = true;
- }
- } else if (w.StartsWith("use:")) {
- var e = LangModel.FindElement(w.Substring(4));
- if (e == null) bad = true;
- else eltRef.Add(e);
- } else {
- words.Add(w.ToLower());
- }
- }
-
- textBox1.ForeColor = bad ? Color.Red : Color.Black;
-
- var wordsA = words.ToArray();
- var refsA = eltRef.ToArray();
-
- if (eltEq == null && wordsA.Length == 0 && refsA.Length == 0)
- bad = true;
-
- var changed = true; // force;
- var matches = new List<SkeletonItem>();
-
- foreach (var s in allItems) {
- var newMatch = false;
- if (s.isPrimary[CurrentState] && !bad) {
- newMatch = s.MatchesWords(wordsA, refsA, eltEq, CurrentState);
- }
- if (newMatch)
- matches.Add(s);
- if (s.isMatch != newMatch) {
- changed = true;
- s.isMatch = newMatch;
- }
- }
-
- if (PreviousState >= 0)
- stateList.Items[PreviousState].ForeColor = previousStateBrush.Color;
- stateList.Items[CurrentState].ForeColor = currentStateBrush.Color;
-
- if (changed) {
- SyncListView(matches, matchesList, (di, _) => { di.IsMatchListItem = true; });
- SyncCurrentStateView();
- }
- }
-
- private void matchesList_Resize(object sender, EventArgs e)
- {
- matchesList.Invalidate();
- }
-
- private void matchesList_DoubleClick(object sender, EventArgs e)
- {
- if (matchesList.SelectedItems.Count == 0) return;
- var sel = (DisplayItem)matchesList.SelectedItems[0];
- GotoNode(sel.skel);
- }
-
- private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- foreach (DisplayItem it in matchesList.Items) {
- ExpandParents(it.skel);
- }
- SyncCurrentStateView();
- }
-
- private void SetSearch(string text)
- {
- textBox1.Text = text;
- }
-
- private void GotoNode(SkeletonItem skel)
- {
- ExpandParents(skel);
- SyncCurrentStateView();
- foreach (DisplayItem it in currentStateView.Items) {
- if (it.skel == skel) {
- it.Selected = true;
- currentStateView.EnsureVisible(it.Index);
- break;
- }
- }
- }
-
- private IEnumerable<SkeletonItem> NamesFor(Model.Element elt)
- {
- var words = new string[0];
- var elts = new Model.Element[0];
-
- foreach (var s in allItems) {
- if (s.isPrimary[CurrentState] && s.MatchesWords(words, elts, elt, CurrentState)) {
- yield return s;
- }
- }
- }
-
- private void AddMenuItems(IEnumerable<SkeletonItem> skels, ToolStripItemCollection items, string pref, int max)
- {
- var skelsM = skels.Take(max).ToArray();
-
- foreach (var s in skelsM) {
- var tmp = s;
- items.Add(pref + s.LongName(CurrentState), null, (x, _) => GotoNode(tmp));
- }
-
- if (skelsM.Length == max)
- items.Add(new ToolStripMenuItem("...") { Enabled = false });
- }
-
- private void stateViewMenu_Opening(object sender, CancelEventArgs e)
- {
- IDisplayNode sel = null;
- SkeletonItem skel = null;
- if (SelectedNode() != null) {
- sel = SelectedNode().dispNode;
- skel = SelectedNode().skel;
- }
-
- var items = stateViewMenu.Items;
- items.Clear();
-
- if (sel == null) {
- items.Add(new ToolStripMenuItem("Unavailable") { Enabled = false });
- return;
- }
-
- foreach (var x in sel.References.Where(q => q != sel.Element)) {
- var t = new ToolStripMenuItem(LangModel.CanonicalName(x));
- items.Add(t);
- AddMenuItems(NamesFor(x), t.DropDownItems, "= ", 20);
- }
-
- if (sel.Element != null) {
- var selName = LangModel.CanonicalName(sel.Element);
- items.Add("Find uses...", null, (s, _) => SetSearch("use:" + selName));
-
- var aliases = NamesFor(sel.Element).Where(s => s != skel).ToArray();
- if (aliases.Length > 0) {
- items.Add("Aliases...", null, (s, _) => SetSearch("eq:" + selName));
- AddMenuItems(aliases, items, " = ", 10);
- }
- }
- }
-
- private void normalToolStripMenuItem_Click(object sender, EventArgs e)
- {
- int viewLev = -1;
- for (int i = 0; i < viewItems.Length; ++i) {
- if (viewItems[i] == sender) {
- viewLev = i;
- viewItems[i].Checked = true;
- } else {
- viewItems[i].Checked = false;
- }
- }
- if (viewLev != -1 && viewLev != viewOpts.ViewLevel) {
- viewOpts.ViewLevel = viewLev;
- BuildModel();
- }
- }
-
- private void debugToolStripMenuItem_Click(object sender, EventArgs e)
- {
- debugToolStripMenuItem.Checked = !debugToolStripMenuItem.Checked;
- viewOpts.DebugMode = debugToolStripMenuItem.Checked;
- BuildModel();
- }
-
- private void exitToolStripMenuItem_Click(object sender, EventArgs e)
- {
- this.Close();
- }
-
- private void reloadModelFileToolStripMenuItem_Click(object sender, EventArgs e)
- {
- ReadModels(this.lastModelFileName, this.modelId);
- }
-
- private SourceView sourceView;
- private void ShowSource()
- {
- if (stateList.SelectedItems.Count == 0) return;
- var li = stateList.SelectedItems[0] as ListViewItem;
- if (li != null) {
- var r = ((IState)li.Tag).ShowSource();
- if (r != null) {
- if (sourceView == null) {
- sourceView = new SourceView();
- }
- sourceView.largeFont = largeFontToolStripMenuItem.Checked;
- sourceView.SetSourceLocation(r);
- sourceView.BringToFront();
- }
- }
- }
-
- private void showSourceToolStripMenuItem_Click(object sender, EventArgs e)
- {
- ShowSource();
- }
-
- private void stateList_DoubleClick(object sender, EventArgs e)
- {
- ShowSource();
- }
-
- private void openModelMenuItem_Click(object sender, EventArgs e)
- {
- if (this.openModelFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
- this.ReadModels(this.openModelFileDialog.FileName, 0);
- }
- }
-
- private void largeFontToolStripMenuItem_Click(object sender, EventArgs e)
- {
- largeFontToolStripMenuItem.Checked = !largeFontToolStripMenuItem.Checked;
-
- if (largeFont == null) {
- largeFont = new Font(smallFont.FontFamily, smallFont.Size * 2, smallFont.Unit);
- }
-
- SetFont(largeFontToolStripMenuItem.Checked ? largeFont : smallFont);
- //textBox1.Font = font;
- //linkLabel1.Font = font;
- //label1.Font = font;
- }
-
- public void SetFont(System.Drawing.Font font)
- {
- stateList.Font = font;
- currentStateView.Font = font;
- matchesList.Font = font;
- }
-
- private void Main_Load(object sender, EventArgs e)
- {
-
- }
-
- private void currentStateView_KeyDown(object sender, KeyEventArgs e)
- {
- var node = SelectedNode();
- if (node == null) return;
-
- if (e.KeyCode == Keys.Right && !node.skel.Expanded && node.skel.Expandable) {
- node.skel.Expanded = true;
- SyncCurrentStateView();
- return;
- }
-
- if (e.KeyCode == Keys.Left) {
- if (node.skel.Expanded) {
- node.skel.Expanded = false;
- SyncCurrentStateView();
- return;
- } else {
- var par = node.skel.parent;
- if (par != null && par.parent != null) {
- // par.Expanded = false;
- foreach (DisplayItem it in currentStateView.Items) {
- it.Selected = it.skel == par;
- it.Focused = it.skel == par;
- if (it.Selected) {
- it.EnsureVisible();
- }
- }
- SyncCurrentStateView();
- }
- }
- }
- }
- }
-
- internal class DisplayItem : ListViewItem
- {
- internal SkeletonItem skel;
- internal int stateId;
- internal bool active;
- internal IDisplayNode dispNode;
-
- public bool IsMatchListItem { get; set; }
-
- internal void Set(SkeletonItem s, int id, int prevId)
- {
- if (skel == s && stateId == id)
- return;
- skel = s;
- stateId = id;
-
- dispNode = skel.displayNodes[stateId];
- active = dispNode != null;
-
- var closeStateId = stateId;
-
- if (dispNode == null) {
- while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null)
- closeStateId++;
- if (closeStateId >= skel.displayNodes.Length) {
- closeStateId = stateId;
- while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null)
- closeStateId--;
- }
- dispNode = skel.displayNodes[closeStateId];
- }
-
- var fullName = skel.LongName(closeStateId);
- var tooltip = dispNode.ToolTip;
- if (tooltip == null)
- tooltip = "";
- if(tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n')
- tooltip += "\n";
- tooltip += "Full name: " + fullName;
- if (tooltip != null) {
- this.ToolTipText = tooltip;
- }
-
- var name = dispNode.Name;
- if (name != dispNode.ShortName)
- {
- name = dispNode.ShortName;
- }
-
- if (IsMatchListItem) {
- Util.Assert(active);
- name = fullName;
- }
-
- this.SubItems[0].Text = name;
- this.SubItems[1].Text = active ? dispNode.Value : "";
-
- var prev = "";
-
- if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null) {
- prev = skel.displayNodes[prevId].Value;
- }
-
- this.SubItems[2].Text = prev;
- }
-
- internal DisplayItem()
- : base(new string[] { "", "", "" })
- {
- }
-
- /*
- static internal string AliasesAsString(IDisplayNode dn)
- {
- if (dn == null) return "";
-
- var sb = new StringBuilder();
- var canon = dn.CanonicalValue;
- foreach (var n in dn.Aliases) {
- if (n == canon)
- continue;
- sb.Append(n).Append(", ");
- if (sb.Length > 300)
- break;
- }
- if (sb.Length > 2) sb.Length -= 2;
- return sb.ToString();
- }
- */
- }
-}
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using System.IO;
+using Microsoft.Boogie;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Boogie.ModelViewer
+{
+ public partial class Main : Form
+ {
+ SkeletonItem unfoldingRoot;
+ SkeletonItem[] allItems;
+ public int CurrentState, PreviousState = -1;
+ IState[] states;
+ internal ILanguageProvider langProvider;
+ public ILanguageSpecificModel LangModel;
+ ToolStripMenuItem[] viewItems;
+ Model currentModel;
+ Model[] allModels;
+ int modelId;
+ string lastModelFileName;
+ internal ViewOptions viewOpts = new ViewOptions();
+ Font smallFont, largeFont;
+ int lineHeight;
+
+ // TODO this should be dynamically loaded
+ IEnumerable<ILanguageProvider> Providers()
+ {
+ yield return BCT.Provider.Instance;
+ yield return Vcc.Provider.Instance;
+ yield return Dafny.Provider.Instance;
+ yield return Base.Provider.Instance;
+ }
+
+ public Main(string[] args, bool runAsHostedWindow = false)
+ {
+ InitializeComponent();
+
+ smallFont = stateList.Font;
+
+ if (runAsHostedWindow) {
+ this.fileToolStripMenuItem.Enabled = false;
+ this.fileToolStripMenuItem.Visible = false;
+ }
+
+ viewItems = new ToolStripMenuItem[] {
+ normalToolStripMenuItem,
+ expertToolStripMenuItem,
+ everythingToolStripMenuItem,
+ includeTheKitchenSinkToolStripMenuItem
+ };
+
+ var debugBreak = false;
+ string filename = null;
+
+ for (int i = 1; i < args.Length; i++) {
+ var arg = args[i];
+ if (arg == "/break" || arg == "-break")
+ debugBreak = true;
+ else
+ filename = arg;
+ }
+
+ if (debugBreak) {
+ System.Diagnostics.Debugger.Launch();
+ }
+
+ if (filename != null) {
+ var idx = filename.IndexOf(':');
+ if (idx > 0) {
+ modelId = int.Parse(filename.Substring(idx + 1));
+ filename = filename.Substring(0, idx);
+ }
+ }
+
+ this.ReadModels(filename, this.modelId);
+ }
+
+ private void SetWindowTitle(string fileName)
+ {
+ if (fileName == null) {
+ this.Text = "Boogie Verification Debugger";
+ } else {
+ this.Text = Path.GetFileName(fileName) + " - Boogie Verification Debugger";
+ }
+ }
+
+ public void ReadModel(string model, int setModelIdTo = 0)
+ {
+ Contract.Requires(model != null);
+
+ using (var rd = new StringReader(model))
+ {
+ allModels = Model.ParseModels(rd).ToArray();
+ }
+
+ AddAndLoadModel(setModelIdTo);
+ }
+
+ public void ReadModels(string modelFileName, int setModelIdTo)
+ {
+ this.lastModelFileName = modelFileName;
+ this.langProvider = Base.Provider.Instance;
+
+ if (!string.IsNullOrWhiteSpace(modelFileName) && File.Exists(modelFileName)) {
+ using (var rd = File.OpenText(modelFileName)) {
+ allModels = Model.ParseModels(rd).ToArray();
+ }
+
+ AddAndLoadModel(setModelIdTo);
+ } else {
+ currentModel = new Model();
+ }
+
+ this.SetWindowTitle(modelFileName);
+ }
+
+ private void AddAndLoadModel(int setModelIdTo)
+ {
+ modelId = setModelIdTo;
+
+ if (modelId >= allModels.Length)
+ modelId = 0;
+
+ currentModel = allModels[modelId];
+ AddModelMenu();
+
+ foreach (var p in Providers())
+ {
+ if (p.IsMyModel(currentModel))
+ {
+ this.langProvider = p;
+ break;
+ }
+ }
+
+ LoadModel(modelId);
+ }
+
+ private void LoadModel(int idx)
+ {
+ var i = 0;
+
+ //var stateIdx = stateList.SelectedIndices.Count == 0 ? 0 : stateList.SelectedIndices[0];
+
+ modelId = idx;
+ foreach (ToolStripMenuItem it in modelsToolStripMenuItem.DropDownItems) {
+ it.Checked = i++ == idx;
+ }
+ currentModel = allModels[idx];
+ BuildModel();
+
+ /*
+ if (stateList.Items.Count <= stateIdx)
+ stateIdx = 0;
+ stateList.Items[stateIdx].Selected = true;
+ */
+ }
+
+ private void AddModelMenu()
+ {
+ modelsToolStripMenuItem.DropDownItems.Clear();
+ var idx = 0;
+ foreach (var m in allModels) {
+ var currIdx = idx++; // this local needs to be in this block
+ var menuItem = modelsToolStripMenuItem.DropDownItems.Add(string.Format("Model #&{0}", currIdx), null, (s, a) => LoadModel(currIdx)) as ToolStripMenuItem;
+ if (currIdx <= 9) {
+ menuItem.ShortcutKeys = Keys.Control | (Keys)(currIdx + Keys.D0);
+ }
+ }
+ }
+
+ private void BuildModel()
+ {
+ stateList.Items.Clear();
+
+ var items = new List<ListViewItem>();
+ LangModel = langProvider.GetLanguageSpecificModel(currentModel, viewOpts);
+ states = LangModel.States.ToArray();
+ var oldRoot = unfoldingRoot;
+ SkeletonItem selectedSkel = null;
+ if (oldRoot != null && SelectedNode() != null) {
+ selectedSkel = SelectedNode().skel;
+ }
+ unfoldingRoot = new SkeletonItem(this, states.Length);
+ allItems = unfoldingRoot.PopulateRoot(states);
+
+ var idx = 0;
+ foreach (var i in states) {
+ var it = new ListViewItem(new string[] { idx.ToString(), i.Name, "" });
+ it.Tag = i;
+ items.Add(it);
+ idx++;
+ }
+ stateList.Items.AddRange(items.ToArray());
+ unfoldingRoot.Expanded = true;
+
+ if (oldRoot == null) {
+ SetState(0);
+ stateList.Items[0].Selected = true;
+ SetColumnSizes();
+ } else {
+ var mapping = new Dictionary<SkeletonItem, SkeletonItem>();
+ unfoldingRoot.SyncWith(mapping, oldRoot);
+ SkeletonItem newIt = null;
+ while (selectedSkel != null) {
+ if (mapping.TryGetValue(selectedSkel, out newIt)) break;
+ selectedSkel = selectedSkel.parent;
+ }
+ if (CurrentState >= stateList.Items.Count)
+ CurrentState = 0;
+ if (PreviousState >= stateList.Items.Count)
+ PreviousState = -1;
+ if (newIt != null) GotoNode(newIt);
+ SyncStateListValues();
+ UpdateMatches(true);
+ }
+ }
+
+ private void SetColumnSizes()
+ {
+ currentStateView.Columns[0].Width = currentStateView.Width - currentStateView.Columns[1].Width - currentStateView.Columns[2].Width - 25;
+ stateList.Columns[1].Width = stateList.Width - stateList.Columns[0].Width - stateList.Columns[2].Width - 25;
+ }
+
+ public void SetState(int id, bool updateView = false)
+ {
+ if (updateView)
+ {
+ stateList.SelectedIndices.Clear();
+ stateList.SelectedIndices.Add(id);
+ }
+ if (CurrentState != id) {
+ PreviousState = CurrentState;
+ CurrentState = id;
+ }
+ UpdateMatches(true);
+ }
+
+ public void HideStateList()
+ {
+ stateList.Hide();
+ splitContainer1.Panel2.Hide();
+ splitContainer1.Panel2Collapsed = true;
+ splitContainer1.SplitterDistance = splitContainer1.Width;
+ }
+
+ public void HideMenuStrip()
+ {
+ menuStrip1.Hide();
+ }
+
+ internal void Activate(TreeNode treeNode)
+ {
+ throw new NotImplementedException();
+ }
+
+ private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ static Color Col(int c)
+ {
+ return Color.FromArgb(c >> 16, (c >> 8) & 0xff, c & 0xff);
+ }
+
+ static StringFormat center = new StringFormat() { Alignment = StringAlignment.Center };
+ static Pen plusPen = new Pen(Col(0xaaaaaa));
+ static Brush grayedOut = new SolidBrush(Col(0xaaaaaa));
+ static Brush nonPrimary = new SolidBrush(Col(0xeeeeee));
+ static Brush matchBg = new SolidBrush(Col(0xFFFA6F));
+
+ static SolidBrush currentStateBrush = new SolidBrush(Color.Red);
+ static SolidBrush regularStateBrush = new SolidBrush(Color.Black);
+ static SolidBrush previousStateBrush = new SolidBrush(Color.Blue);
+
+ static SolidBrush[] categoryBrushes = new SolidBrush[] {
+ new SolidBrush(Color.Black), // Local
+ new SolidBrush(Color.Black), // PhysField
+ new SolidBrush(Color.Green), // SpecField
+ new SolidBrush(Color.Peru), // MethodologyProperty
+ new SolidBrush(Color.Green), // UserFunction
+ new SolidBrush(Color.Black), // Maplet
+ };
+
+ private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
+ {
+ var item = (DisplayItem)e.Item;
+ var skel = item.skel;
+ var rect = e.Bounds;
+ var listView = (ListView)sender;
+ lineHeight = rect.Height;
+ rect.Y += 1;
+ rect.Height -= 2;
+
+ var textBrush = Brushes.Black;
+ if (listView.SelectedIndices.Count > 0 && listView.SelectedIndices[0] == e.ItemIndex) {
+ e.Graphics.FillRectangle(Brushes.Aquamarine, rect);
+ textBrush = Brushes.White;
+ } else {
+ var bg = Brushes.White;
+ if (item.active && !skel.isPrimary[CurrentState])
+ bg = nonPrimary;
+ if (item.skel.isMatch)
+ bg = matchBg;
+ e.Graphics.FillRectangle(bg, rect);
+ }
+
+ var off = lineHeight * item.skel.level;
+ if (item.IsMatchListItem)
+ off = 0;
+
+ {
+ var plusRect = rect;
+ plusRect.Width = lineHeight;
+ plusRect.X += off;
+ var plusBorder = plusRect;
+ plusBorder.Height = lineHeight / 2;
+ plusBorder.Width = lineHeight / 2;
+ plusBorder.X += lineHeight / 4;
+ plusBorder.Y += lineHeight / 4;
+ e.Graphics.DrawRectangle(plusPen, plusBorder);
+ if (skel.Expandable) {
+ float midX = plusBorder.X + plusBorder.Width / 2;
+ float midY = plusBorder.Y + plusBorder.Height / 2;
+ e.Graphics.DrawLine(plusPen, plusBorder.X + 2, midY, plusBorder.Right - 2, midY);
+ if (!item.skel.expanded)
+ e.Graphics.DrawLine(plusPen, midX, plusBorder.Y + 2, midX, plusBorder.Bottom - 2);
+ }
+ }
+
+ off += lineHeight + 3;
+ var nameRect = rect;
+ var font = listView.Font;
+
+ textBrush = categoryBrushes[(int)item.dispNode.Category];
+
+ if (!item.active)
+ textBrush = grayedOut;
+
+ nameRect.Width = listView.Columns[0].Width - 1 - off;
+ nameRect.X += off;
+ var width = DrawString(e.Graphics, item.SubItems[0].Text, font, textBrush, nameRect);
+
+ textBrush = item.active ? Brushes.Black : grayedOut;
+ nameRect.X += width + 4;
+ nameRect.Width = listView.Columns[0].Width + listView.Columns[1].Width - nameRect.X;
+ width = DrawString(e.Graphics, item.SubItems[1].Text, font, textBrush, nameRect);
+
+ nameRect.X += width + 4;
+ nameRect.Width = listView.Width - nameRect.X;
+ var t = item.SubItems[2].Text;
+ width = DrawString(e.Graphics, t, font, t == item.SubItems[1].Text ? grayedOut : Brushes.Black, nameRect);
+ }
+
+ private int DrawString(Graphics g, string s, Font font, Brush textBrush, Rectangle minRect)
+ {
+ var sz = g.MeasureString(s, font).Width;
+ if (sz > minRect.Width - 2) {
+ minRect.Width = (int)(sz + 20);
+ }
+ g.DrawString(s, font, textBrush, minRect);
+ return minRect.Width;
+ }
+
+ private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
+ {
+ e.DrawBackground();
+ var brush = regularStateBrush;
+ if (e.Header.Index == 1)
+ brush = currentStateBrush;
+ else if (e.Header.Index == 2)
+ brush = previousStateBrush;
+
+ Rectangle r = e.Bounds;
+ r.X += 5;
+ r.Y += 4;
+ DrawString(e.Graphics, e.Header.Text, e.Header.ListView.Font, brush, r);
+ }
+
+ private void listView1_MouseUp(object sender, MouseEventArgs e)
+ {
+ var clickedItem = (DisplayItem)currentStateView.GetItemAt(5, e.Y);
+ if (clickedItem != null) {
+ clickedItem.Selected = true;
+ clickedItem.Focused = true;
+
+ var skel = clickedItem.skel;
+ int plusLoc = skel.level * lineHeight;
+ if (skel.Expandable && e.X >= plusLoc && e.X <= plusLoc + lineHeight) {
+ skel.Expanded = !skel.Expanded;
+ SyncCurrentStateView();
+ }
+ }
+ }
+
+ private void SyncCurrentStateView()
+ {
+ SyncListView(unfoldingRoot.RecChildren, currentStateView, (x, y) => { });
+ }
+
+ private void SyncListView(IEnumerable<SkeletonItem> items, ListView listView, Action<DisplayItem, SkeletonItem> cb)
+ {
+ var ch = items.ToArray();
+ var missing = ch.Length - listView.Items.Count;
+ listView.BeginUpdate();
+ if (missing < 0) {
+ missing = -missing;
+ while (missing-- > 0) {
+ listView.Items.RemoveAt(listView.Items.Count - 1);
+ }
+ } else {
+ while (missing-- > 0) {
+ listView.Items.Add(new DisplayItem());
+ }
+ }
+ for (int i = 0; i < ch.Length; ++i) {
+ var di = (DisplayItem)listView.Items[i];
+ cb(di, ch[i]);
+ di.Set(ch[i], CurrentState, PreviousState);
+ }
+ listView.EndUpdate();
+ listView.Invalidate();
+ }
+
+ private void listView1_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
+ {
+ currentStateView.Invalidate();
+ }
+
+ private void listView1_Resize(object sender, EventArgs e)
+ {
+ SetColumnSizes();
+ currentStateView.Invalidate();
+ }
+
+ private void stateList_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (stateList.SelectedItems.Count == 0) return;
+ var sel = stateList.SelectedItems[0].Index;
+
+ if (PreviousState >= 0)
+ stateList.Items[PreviousState].ForeColor = regularStateBrush.Color;
+
+ SetState(sel);
+ }
+
+ DisplayItem SelectedNode()
+ {
+ if (currentStateView.SelectedItems.Count == 0) return null;
+ return (DisplayItem)currentStateView.SelectedItems[0];
+ }
+
+ private void currentStateView_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ SyncStateListValues();
+ }
+
+ private void SyncStateListValues()
+ {
+ var sel = SelectedNode();
+ if (sel == null) return;
+
+ stateList.BeginUpdate();
+ for (int i = 0; i < sel.skel.displayNodes.Length; ++i) {
+ var dn = sel.skel.displayNodes[i];
+ stateList.Items[i].SubItems[2].Text = dn == null ? "" : dn.Value;
+ }
+ stateList.EndUpdate();
+ }
+
+ private void ExpandParents(SkeletonItem item)
+ {
+ item = item.parent;
+ while (item != null) {
+ item.Expanded = true;
+ item = item.parent;
+ }
+ }
+
+ private void textBox1_TextChanged(object sender, EventArgs e)
+ {
+ UpdateMatches(false);
+ }
+
+ private void UpdateMatches(bool force)
+ {
+ var bad = false;
+ Model.Element eltEq = null;
+ var eltRef = new List<Model.Element>();
+ var words = new List<string>();
+
+ foreach (var w in textBox1.Text.Split(' ')) {
+ if (w == "") continue;
+ if (w.StartsWith("eq:")) {
+ if (eltEq != null) bad = true;
+ else {
+ eltEq = LangModel.FindElement(w.Substring(3));
+ if (eltEq == null) bad = true;
+ }
+ } else if (w.StartsWith("use:")) {
+ var e = LangModel.FindElement(w.Substring(4));
+ if (e == null) bad = true;
+ else eltRef.Add(e);
+ } else {
+ words.Add(w.ToLower());
+ }
+ }
+
+ textBox1.ForeColor = bad ? Color.Red : Color.Black;
+
+ var wordsA = words.ToArray();
+ var refsA = eltRef.ToArray();
+
+ if (eltEq == null && wordsA.Length == 0 && refsA.Length == 0)
+ bad = true;
+
+ var changed = true; // force;
+ var matches = new List<SkeletonItem>();
+
+ foreach (var s in allItems) {
+ var newMatch = false;
+ if (s.isPrimary[CurrentState] && !bad) {
+ newMatch = s.MatchesWords(wordsA, refsA, eltEq, CurrentState);
+ }
+ if (newMatch)
+ matches.Add(s);
+ if (s.isMatch != newMatch) {
+ changed = true;
+ s.isMatch = newMatch;
+ }
+ }
+
+ if (PreviousState >= 0)
+ stateList.Items[PreviousState].ForeColor = previousStateBrush.Color;
+ stateList.Items[CurrentState].ForeColor = currentStateBrush.Color;
+
+ if (changed) {
+ SyncListView(matches, matchesList, (di, _) => { di.IsMatchListItem = true; });
+ SyncCurrentStateView();
+ }
+ }
+
+ private void matchesList_Resize(object sender, EventArgs e)
+ {
+ matchesList.Invalidate();
+ }
+
+ private void matchesList_DoubleClick(object sender, EventArgs e)
+ {
+ if (matchesList.SelectedItems.Count == 0) return;
+ var sel = (DisplayItem)matchesList.SelectedItems[0];
+ GotoNode(sel.skel);
+ }
+
+ private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ foreach (DisplayItem it in matchesList.Items) {
+ ExpandParents(it.skel);
+ }
+ SyncCurrentStateView();
+ }
+
+ private void SetSearch(string text)
+ {
+ textBox1.Text = text;
+ }
+
+ private void GotoNode(SkeletonItem skel)
+ {
+ ExpandParents(skel);
+ SyncCurrentStateView();
+ foreach (DisplayItem it in currentStateView.Items) {
+ if (it.skel == skel) {
+ it.Selected = true;
+ currentStateView.EnsureVisible(it.Index);
+ break;
+ }
+ }
+ }
+
+ private IEnumerable<SkeletonItem> NamesFor(Model.Element elt)
+ {
+ var words = new string[0];
+ var elts = new Model.Element[0];
+
+ foreach (var s in allItems) {
+ if (s.isPrimary[CurrentState] && s.MatchesWords(words, elts, elt, CurrentState)) {
+ yield return s;
+ }
+ }
+ }
+
+ private void AddMenuItems(IEnumerable<SkeletonItem> skels, ToolStripItemCollection items, string pref, int max)
+ {
+ var skelsM = skels.Take(max).ToArray();
+
+ foreach (var s in skelsM) {
+ var tmp = s;
+ items.Add(pref + s.LongName(CurrentState), null, (x, _) => GotoNode(tmp));
+ }
+
+ if (skelsM.Length == max)
+ items.Add(new ToolStripMenuItem("...") { Enabled = false });
+ }
+
+ private void stateViewMenu_Opening(object sender, CancelEventArgs e)
+ {
+ IDisplayNode sel = null;
+ SkeletonItem skel = null;
+ if (SelectedNode() != null) {
+ sel = SelectedNode().dispNode;
+ skel = SelectedNode().skel;
+ }
+
+ var items = stateViewMenu.Items;
+ items.Clear();
+
+ if (sel == null) {
+ items.Add(new ToolStripMenuItem("Unavailable") { Enabled = false });
+ return;
+ }
+
+ foreach (var x in sel.References.Where(q => q != sel.Element)) {
+ var t = new ToolStripMenuItem(LangModel.CanonicalName(x));
+ items.Add(t);
+ AddMenuItems(NamesFor(x), t.DropDownItems, "= ", 20);
+ }
+
+ if (sel.Element != null) {
+ var selName = LangModel.CanonicalName(sel.Element);
+ items.Add("Find uses...", null, (s, _) => SetSearch("use:" + selName));
+
+ var aliases = NamesFor(sel.Element).Where(s => s != skel).ToArray();
+ if (aliases.Length > 0) {
+ items.Add("Aliases...", null, (s, _) => SetSearch("eq:" + selName));
+ AddMenuItems(aliases, items, " = ", 10);
+ }
+ }
+ }
+
+ private void normalToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ int viewLev = -1;
+ for (int i = 0; i < viewItems.Length; ++i) {
+ if (viewItems[i] == sender) {
+ viewLev = i;
+ viewItems[i].Checked = true;
+ } else {
+ viewItems[i].Checked = false;
+ }
+ }
+ if (viewLev != -1 && viewLev != viewOpts.ViewLevel) {
+ viewOpts.ViewLevel = viewLev;
+ BuildModel();
+ }
+ }
+
+ private void debugToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ debugToolStripMenuItem.Checked = !debugToolStripMenuItem.Checked;
+ viewOpts.DebugMode = debugToolStripMenuItem.Checked;
+ BuildModel();
+ }
+
+ private void exitToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+
+ private void reloadModelFileToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ ReadModels(this.lastModelFileName, this.modelId);
+ }
+
+ private SourceView sourceView;
+ private void ShowSource()
+ {
+ if (stateList.SelectedItems.Count == 0) return;
+ var li = stateList.SelectedItems[0] as ListViewItem;
+ if (li != null) {
+ var r = ((IState)li.Tag).ShowSource();
+ if (r != null) {
+ if (sourceView == null) {
+ sourceView = new SourceView();
+ }
+ sourceView.largeFont = largeFontToolStripMenuItem.Checked;
+ sourceView.SetSourceLocation(r);
+ sourceView.BringToFront();
+ }
+ }
+ }
+
+ private void showSourceToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ ShowSource();
+ }
+
+ private void stateList_DoubleClick(object sender, EventArgs e)
+ {
+ ShowSource();
+ }
+
+ private void openModelMenuItem_Click(object sender, EventArgs e)
+ {
+ if (this.openModelFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
+ this.ReadModels(this.openModelFileDialog.FileName, 0);
+ }
+ }
+
+ private void largeFontToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ largeFontToolStripMenuItem.Checked = !largeFontToolStripMenuItem.Checked;
+
+ if (largeFont == null) {
+ largeFont = new Font(smallFont.FontFamily, smallFont.Size * 2, smallFont.Unit);
+ }
+
+ SetFont(largeFontToolStripMenuItem.Checked ? largeFont : smallFont);
+ //textBox1.Font = font;
+ //linkLabel1.Font = font;
+ //label1.Font = font;
+ }
+
+ public void SetFont(System.Drawing.Font font)
+ {
+ stateList.Font = font;
+ currentStateView.Font = font;
+ matchesList.Font = font;
+ }
+
+ private void Main_Load(object sender, EventArgs e)
+ {
+
+ }
+
+ private void currentStateView_KeyDown(object sender, KeyEventArgs e)
+ {
+ var node = SelectedNode();
+ if (node == null) return;
+
+ if (e.KeyCode == Keys.Right && !node.skel.Expanded && node.skel.Expandable) {
+ node.skel.Expanded = true;
+ SyncCurrentStateView();
+ return;
+ }
+
+ if (e.KeyCode == Keys.Left) {
+ if (node.skel.Expanded) {
+ node.skel.Expanded = false;
+ SyncCurrentStateView();
+ return;
+ } else {
+ var par = node.skel.parent;
+ if (par != null && par.parent != null) {
+ // par.Expanded = false;
+ foreach (DisplayItem it in currentStateView.Items) {
+ it.Selected = it.skel == par;
+ it.Focused = it.skel == par;
+ if (it.Selected) {
+ it.EnsureVisible();
+ }
+ }
+ SyncCurrentStateView();
+ }
+ }
+ }
+ }
+ }
+
+ internal class DisplayItem : ListViewItem
+ {
+ internal SkeletonItem skel;
+ internal int stateId;
+ internal bool active;
+ internal IDisplayNode dispNode;
+
+ public bool IsMatchListItem { get; set; }
+
+ internal void Set(SkeletonItem s, int id, int prevId)
+ {
+ if (skel == s && stateId == id)
+ return;
+ skel = s;
+ stateId = id;
+
+ dispNode = skel.displayNodes[stateId];
+ active = dispNode != null;
+
+ var closeStateId = stateId;
+
+ if (dispNode == null) {
+ while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null)
+ closeStateId++;
+ if (closeStateId >= skel.displayNodes.Length) {
+ closeStateId = stateId;
+ while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null)
+ closeStateId--;
+ }
+ dispNode = skel.displayNodes[closeStateId];
+ }
+
+ var fullName = skel.LongName(closeStateId);
+ var tooltip = dispNode.ToolTip;
+ if (tooltip == null)
+ tooltip = "";
+ if(tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n')
+ tooltip += "\n";
+ tooltip += "Full name: " + fullName;
+ if (tooltip != null) {
+ this.ToolTipText = tooltip;
+ }
+
+ var name = dispNode.Name;
+ if (name != dispNode.ShortName)
+ {
+ name = dispNode.ShortName;
+ }
+
+ if (IsMatchListItem) {
+ Util.Assert(active);
+ name = fullName;
+ }
+
+ this.SubItems[0].Text = name;
+ this.SubItems[1].Text = active ? dispNode.Value : "";
+
+ var prev = "";
+
+ if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null) {
+ prev = skel.displayNodes[prevId].Value;
+ }
+
+ this.SubItems[2].Text = prev;
+ }
+
+ internal DisplayItem()
+ : base(new string[] { "", "", "" })
+ {
+ }
+
+ /*
+ static internal string AliasesAsString(IDisplayNode dn)
+ {
+ if (dn == null) return "";
+
+ var sb = new StringBuilder();
+ var canon = dn.CanonicalValue;
+ foreach (var n in dn.Aliases) {
+ if (n == canon)
+ continue;
+ sb.Append(n).Append(", ");
+ if (sb.Length > 300)
+ break;
+ }
+ if (sb.Length > 2) sb.Length -= 2;
+ return sb.ToString();
+ }
+ */
+ }
+}
diff --git a/Source/ModelViewer/Main.resx b/Source/ModelViewer/Main.resx
index 657b80c4..764a9fd9 100644
--- a/Source/ModelViewer/Main.resx
+++ b/Source/ModelViewer/Main.resx
@@ -1,2192 +1,2192 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <metadata name="stateViewMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>17, 17</value>
- </metadata>
- <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>267, 17</value>
- </metadata>
- <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>152, 17</value>
- </metadata>
- <metadata name="openModelFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>422, 17</value>
- </metadata>
- <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>
- AAABAAoAICAQAAEABADoAgAApgAAABAQEAABAAQAKAEAAI4DAAAwMAAAAQAIAKgOAAC2BAAAICAAAAEA
- CACoCAAAXhMAABAQAAABAAgAaAUAAAYcAAAAAAAAAQAgABx9AABuIQAAgIAAAAEAIAAoCAEAip4AADAw
- AAABACAAqCUAALKmAQAgIAAAAQAgAKgQAABazAEAEBAAAAEAIABoBAAAAt0BACgAAAAgAAAAQAAAAAEA
- BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA
- wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAB3AAAAAAAAAAAAAAAAAAB6KiAAAAAAAAAA
- AAAAAAAHKqKnAAAAAAAAAAAAAAAAeioqKllwAAAAAAAAAAAHcqKqKiopGQAAAAdwAAAAACqioqKqI5mQ
- AAB1AAAAAAoqKqJyoqIVlQAAkAAAAACqKiohEaKiOZmZmQAAAAAAOiqiB5EyqiEZcAAAAAAAAAcAAAWR
- kqKjmZAAAAkAAAAFcAABkZE6KlmQAACQAAAAAJcACZGVGioplwAJcAAAAAAJlxWZGZGioZmZlwAAAAAA
- AAAJkZGVOqKQAAAAAAAAAAAAAZWZGZIqMAAAcAAAAAB3AAmZkZkZKqAACQAAAAAACXAHWZWZWZKnAJcA
- AAAAAACXB5mZmZmTKhFwAAAAAAAACZlxmVmZk3ogAAAAAAAAAAAACZmZkVAHpwAAAAAAAAAAAAeZmZmQ
- AKoAAAAAAAAAAAAHl3mJcAACcAAAAAAAAAAAAAAAcAAAAKAAAAAAAAAAAAAJAHAAAAByAAAAAAAAAAAA
- dwAJAAAACnAAAAAAAAAAAJAAA3AAAACgAAAAAAAAAAdwAACQAAAABwAAAAAAAAB5AAAACQAAAAcAAAAA
- AABxkAAAAAeTcAAAcAAAAAAAAAAAAAAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CAB//vgAfv54AH3/OAA5/4AAA//4AH//+A
- B9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7fz//87+f//ef3//n3+//z+/v/x/h9///
- +f///////////ygAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
- AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAHAAAA
- AAAAB6IgAAAAAAAiqiOQAHAAAqozKhl5AAADd3EyOQAAAABweZKhcAAAAAdRmaKXAAAAAAkZGnAAAAAI
- CVmTKHAAAAAJmZdzAAAAAACZkAYAAAAAAAAAADAAAAAAcIAAAAAAAAcABwAAAAAAcAAAdwAAAAAAAAAA
- AAD7////4f///8B3//+AD///gD///9Af///gD///+B///+gH///4D////G/////3///9f///+7////fP
- ////////KAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZjkACGk/AAR1
- OQAJIm8ABjlkAAgvdgAJOX0ABFtIAAVBVgAKWlMABVBYAAR4QQAGYVwABnJWADN5XQAJSXwACFt3AFJn
- XwBFX3UATVt2AAGQHQABnxgAAK0NAAC9BQAAtwoABrQLAA22DQAAvgkAALgMAAC8DQAKugoACr0KAA29
- DQABphIAAasaAB6oHgABtRMAE7QTABSwFAATuhMAGrYaABm9GQACiCQAA4AtAAKdIwADmy4ABIo4ACyf
- LAA3jTcAOJk4AAKnJQAgpCAAKaEpACa1JgArsCsAKbspADGtMQA4rDgAPao9ADezNwA7ujsAAMICAADG
- AAAAwQQABcEFAAXFBQAKwgoAFcAVAAWGSQBGlUYAUZNRAFiTWABKpkoATKdMAE25TQBXpFcAU7tTAFu1
- WwBmk2YAapRqAGqeagB5mHkAVKFkAG6nbgBsu2wACBuAAAoAkwAKCZYAChSSAAsYlgAaEJ8ACCSAAAsm
- nAAoO4gAODKVAAwHowALAKYACwCpAAwBqAAMBqgADACtAAsOqQAXDaMADACwAAwAtAAMDLEADQC5AA0A
- vQARBbcAFAm1AA0XuwAfFLkAHBC9ACUdpAALM6EANC2hADcvpQA3L64APzilAD84qAAuJbYALyS9ADQq
- vAAmObYAOjKyAEI7sABFPbYAC0SeADxJowA2RawALkG/ADRGuwBHQo4ARUCWAEtGkgBNSZMASUSZAFNO
- nwBSWpQAVlKYAF5amgBhXpsAWXGGAF9mmwBkZZMAb22WAGVimwBta50Ab3OUAHNxmQB2dJsAcHWcAHt5
- mgB/fZwAR0GnAExGpABOSKEATEWsAEdTogBIVKYATFepAFdSogBOW7QASVe7AFpUtgBcVrQAW1W8AGJc
- uwBWYrYAbmugAGllqgBqcqcAfXuiAG5pvgBwbLEAcGu8AGpztQByerMAeHi3AHx5ugANAMEADgDFAA4A
- yQAOBcoADgDNABIFwwAXC8MAGQ3AABEEywAfE8MAHRHIAB8SzgAOANEADwDVAA8A2QAPANwADwvaABAD
- 0gAXCdIAEADeABcJ3gAdD9oAAx/WAAAd2gAfE9QAJxzDACIXyAAjF9sAKh3YAA0kxAAMJcwAFCvDABgu
- wwAdNMsABiLVAA8p0gAEINoALiPHAC0iygA5L8cAIzjHACE3yQA/NcwAMSXTADcs1AAPAOAADwHqABAA
- 4QAWB+EAEADmABMF5QAUBeQAFgjhABwN4gAYCeUAEADrABgI6gARAPEAIRPiAEY+xQBEO8sAMEPEAFZO
- xgBSScsAWFHEAGBY0QBzbsAAcmzLAG15ygB9eMIAdYOdAHuBrwB+hbQAeILHAP///wAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQ/P0JHAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUQj8/Pz8/UAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEo/Pz8/Pz8/IQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAOT8/Pz8/Pz8/PzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp
- Pz8/Pz8/Pz8/Pz8EurhwjAAAAAAAAAAAAAAAAAAApQAAAAAAAAAAAAAAAHQAACA/Pz8/Pz8/Pz8/Pz8V
- Y7fBwr4AAAAAAAAAAAAAAJnKAAAAAAAAAAAAAAAAAAAKPz8/Pz8/Pz8/Pz8/Pz8/C7W5wsTHAAAAAAAA
- AAAAluewAAAAAAAAAAAAAAAAAEw/Pz8/Pz8/Pz8gPz8/Pz8/F1i5wsPIwAAAAAAAAACa598AAAAAAAAA
- AAAAAAAAOz8/Pz8/Pz8/PyYUDD8/Pz8/PwJsxsPI5n4AAAAAAADJ0QAAAAAAAAAAAAAAAAA3Pz8/Pz8/
- Pz8/GhJbYC0/Pz8/Pz5WwcLI5ONyeXZ4eMDrAAAAAAAAAAAAAAAAAE4/Pz8/Pz8/Pz8dXFdoaFodPz8/
- Pz8rbcLI5ObGze3s7O8AAAAAAAAAAAAAAAAAAABCPz8/Pz8/PyGPjmdpaGgHPz8/Pz8/BcbE5OPrAAAA
- AAAAAAAAAAAAAAAAAAAAAAD7D0k8KkI/NgAAAG1raWlpDT8/Pz8/ImTE5ObsAAAAAAAAAAAAAKL6AAAA
- AAAAAAAAepMAAAAAAAAAAGxsa2trbS8/Pz8/PwjB5ObspgAAAAAAAAAAfeAAAAAAAAAAAAAAAMaNAAAA
- AAAAk7ZsbGtsbGojPz8/P0JZ4ubs3AAAAAAAAAB77QAAAAAAAAAAAAAAAK/BlAAAAAAAnba1tbVsbLVd
- HD8/Pz8suObu0AAAAAAAAH7uAAAAAAAAAAAAAAAAAAB/vQAAAAAAdbe2trW2tba2ED8/Pz8/Bufj6wAA
- AAAAou6uAAAAAAAAAAAAAAAAAAAAzruHiIZfbrm3t7a2tra3tw4/Pz8/Fmzs7uju7uvr7vEAAAAAAAAA
- AAAAAAAAAAAAAM/Gwca6usG5ube3t7e5ub0uPz8/Pwvm7bT49vT0+AAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAnsLBwbm5ubm5wcZvJT8/Px5m7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq8LCxsHBwcHG
- wsLDc0I/Pz8DewAAAAAAAACXpwAAAAAAAAAAAAAAAADbAAAAAAAAAMTDwsLCxsLCwsPEyBE/Pz9CEwAA
- AAAAAJzvAAAAAAAAAAAAAAAAAAAA56oAAAAAAMjExMPCwsLDw8TI5ORFPz8/JAAAAAAAfe4AAAAAAAAA
- AAAAAAAAAAAAqOOqAAAAANrkyMjExMPExMjk5ObFMz8/P1AAAAB97gAAAAAAAAAAAAAAAAAAAAAAAPDm
- rQAAAKvk5OTIyMjI5OTk5ubs0h4/PxsAAJvu9wAAAAAAAAAAAAAAAAAAAAAAAADg6Y2Sk4nm5ubk5OTk
- 5Obm5uzu7oA/Pz8Cx+7zAAAAAAAAAAAAAAAAAAAAAAAAAAAA0Ozs7Ozi5ubm5ubm5ubm7Ozu7uFTPz9A
- XvoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Ozm5uzm7Ozs7OPu7QAAPT8/MAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAALxit+zs7O7stWFsAAAAACo/P1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAIVst+Tu7u7kZWy/AAAAAABCPycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHG95Onu
- 7u7jvbnkAAAAAAAAPz9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKfm8QCzALQAAOr1AAAAAAAA
- TT8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAAAAAAAAAAADg/MgAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAACEAAAAAAAAAAAAAABDPwAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAmIMAAAD81AAAAAAAAAAAAAAAPyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1P0A
- AAAA16AAAAAAAAAAAAAAVT9PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ1wAAAAAAo8wAAAAAAAAA
- AAAAAD0bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTqQAAAAAAANnVAAAAAAAAAAAAAABERgAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAIHXAAAAAAAAALLMggAAAAAAAAAAAAAAQwAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAlcyxAAAAAAAAAACEzJ8AAAAAAAAAAAAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAACV190AAAAA
- AAAAAAAA3syBAAAAAAAAAAAAAEtSAAAAAAAAAAAAAAAAAAAAAACsy9LM2AAAAAAAAAAAAAAAAN7M1IuR
- kAAAAAAAAAA6AAAAAAAAAAAAAAAAAAAAAAAA1tnyAAAAAAAAAAAAAAAAAACkzMzMzAAAAAAAAAAAUQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP75AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAD///////8AAP/8H////wAA//AP////AAD/4A////8AAP/AB////wAA/4AAP/9/
- AAD7AAAf/P8AAPwAAA/4/wAA+AAAB/H/AADwAAAD8/8AAOAAAAAH/wAAwAAAAA//AADgAAAB//8AAOAc
- AAH/nwAA8/wAAP8/AAD5+AAA/n8AAPj4AAD8/wAA/PgAAPj/AAD+AAAAAf8AAP8AAAAD/wAA//gAAP//
- AAD/+AAA/n8AAP38AAD8/wAA/nwAAPn/AAD+PAAAc/8AAP8cAABj/wAA/4AAAAf/AAD/wAAAD/8AAP//
- AAYf/wAA//+ADw//AAD//4APj/8AAP//gA/H/wAA//+Kz8f/AAD///9/4/8AAP//93/z/wAA///nP/n/
- AAD//+ef+P8AAP//z5/8/wAA///Pz/5/AAD//5/H/38AAP//H+P/vwAA//4/8f+fAAD/8H/4H98AAP/4
- //wf7wAA/////z//AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1NAAZH3oACSZ/AAg9eAArMXwALTx9AARrQgAFd0kABmFVAAZI
- YAAHTG0ACF9uAC5UZQABmRsABrkGAAC/BAAAswsAAbcPAAC6CAAAvwkACbwJAAOlFwABrREAAa4VAAGj
- GwAdqR0AFr8WABm0GQActhwAApAmAAKeJwA1njUAAqogABaqJwAjpyMAJaYlACWzJQAjvCMANa01ADi8
- OAAAwwIAAMYAAADBBQAEwgQAAMgAAASKQwBEm0QAU5lTAE6/TgBUqVQAappqAHufewBesWQAZqJmAGin
- aABpvmkAdaB1AHquegAKH5cACiaKAAo1lgA1LpgADACuAAwKrwAMF60ADQCxAA0AtgANALoADQW4AA0A
- vAAiGqMAKB+pAA0jvwAvJ6QANCyjAC09qwA3MKEANSy+ACE1vQALR5oAPkqgADVFsgBUUJsAU12fAF9k
- lABlYZ8AaWacAGxpmwByd5oAU0yvAEpDsgBJQbQAUku9AFNMvwBJVrEAUl+3AGFppQBua6AAcm+mAGhw
- pgB2dKAAdXKkAHZ0pQB5d6EAf32jAHt4pQBkbrQAc269AHZysgB7d7YAfHm0AA0AwQAOAMYADgDKAA4A
- zQAOBswAEAPBABcJzgAYC8kAHRDNAA8A0QAPANUADwzTAA8A2AAPAN0AFAfRABAA1gATBdQAEADaABMF
- 2gAQAN0AAh7ZAB8S3AAmG8MAIhbPACYayQAmGs8AKR3JACAT1QAjFtQAJBjSACYZ2QAoHNsAByLPABUs
- wwARKs8ABSHVAAgk1gAxJ8IANizCADAlzAAnPMIAPTTAACwh0wAzKdIANivRABAA4QAUBeMAEADlABoM
- 4QAQAOkAFATpABEA7QAXCOgAEQDwAEE2zgBUTMYATl7JAFxWxQBaaMUAaGLDAHx3wgCAfbMAg3/EAHGB
- hgB7gKMAf4a5AFAAFwBwACEAkAArALAANgDPAEAA8ABJAP8RWgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R
- 3wD///8AAAAAAC8AIABQADYAcABMAJAAYgCwAHgAzwCOAPAApAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x
- 5QD/0fAA////AAAAAAAsAC8ASwBQAGkAcACHAJAApQCwAMQAzwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR
- /wD5sf8A+9H/AP///wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMAsAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx
- /wDPkf8A3LH/AOvR/wD///8AAAAAAAgALwAOAFAAFQBwABsAkAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR
- /wCMcf8AppH/AL+x/wDa0f8A////AAAAAAAAAAAAAAA2OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAA6Ki0tJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMi0tLS0tMwAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAACctLS0tLS0VBUpTAAAAAAAAAAAAAAAAAAAAAAAAZ68dLS0tLS0tLS0BcHl2AAAAAAAAAGVeAAAA
- AAAAAAAAEy0tLS0tLC0tLSoDeXyCAAAAAABojgAAAAAAAAAAACwtLS0qKhoGGC0tLQ5Gep2IAAAAAKAA
- AAAAAAAAAAAqKioqLS0ZAj88Ky0tLQp6g59+pKOkAAAAAAAAAAAAACIqKioqJQA+Q0ILLS0tEUCDn5kA
- AAAAAAAAAAAAAAAAAFUAAAAAAEhEQ0MILS0tB3yfogAAAAAAAJYAAAAAAAAAXFYAAAAAdXVGRkUfLS0p
- O5+lAAAAAACLAAAAAAAAAAAAhmkAAABycXB1cEESLS0efKNqAAAAiqwAAAAAAAAAAAAAd01LR3NycXFx
- cz0qLS0Eo56loqKnAAAAAAAAAAAAAAAAAAAAenlzc3NzeQwtLRd0AAAAAAAAAAAAAAAAAAAAAAAAAACA
- f3l5eXp6fC4tLQkAAAAAAFoAAAAAAAAAAABdZgAAAE6BfH9/f4GDeyEtEAAAAACJAAAAAAAAAAAAAACa
- YwAAbZ2Dg4ODg52fSRQtIAAAjK4AAAAAAAAAAAAAAACFYgBXn52dnZ2dn6OjUCoqDYerAAAAAAAAAAAA
- AAAAAACbj5yXoZ+fn5+ho6WmNS0WAAAAAAAAAAAAAAAAAAAAAAAAAACVcJ+jo59GeAAAKC0zAAAAAAAA
- AAAAAAAAAAAAAAAAAFhxgaWlekZbAAAAGxUAAAAAAAAAAAAAAAAAAAAAAAAAb4NuqamtjWwAAAAAKi8A
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAXwAAAAAA
- AAAxJAAAAAAAAAAAAAAAAAAAAAAAALBrAAAATwAAAAAAAAAmNAAAAAAAAAAAAAAAAAAAAAAAkQAAAACY
- YQAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAFRgAAAAAACTAAAAAAAAAAAwAAAAAAAAAAAAAAAAAABZkgAA
- AAAAAACTAAAAAAAAADgAAAAAAAAAAAAAAABfkJQAAAAAAAAAALGETFEAAAAAADcAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAACqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CA
- B//vgAfv54AH3/OAA5/4AAA//4AH//+AB9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7
- fz//87+f//ef3//n3+//z+/v/x/h9///+f///////////ygAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAABHw/AAZYXQAGY1sAEUJxAAC8BgANug0AAq0cAByvHAANiiwAAp4iAASN
- OQAjoS0AJbglADeoNwAAxgAAAMgAAADACAA4wjgAPZNSAEasRgBYtlgAX7hfAEWJZQBgl3cAZMdlAGzE
- bAALK54ADQC2AA0BvgAMErIADCWzAC8lvQAzKbgACkqUAFhTpwBXUa0AVE2/AEdVswBSYL8AamasAHp+
- oQB2dakAcnmsAH57rgBnYbsAcHizAHt4swAOAMAADQ3AAA4AygAPANUADwDdABAC0QAVB9oAEADeACke
- xQA2K80ANivVABAA4AAQAOUAEQDpAFZOxwBQR80AfHTkAIB9rwCCfc4AeoG1AHiBvAB2gckAAM9AAADw
- SgAR/1sAMf9xAFH/hwBx/50Akf+yALH/yQDR/98A////AAAAAAACLwAABFAAAAZwAAAIkAAACrAAAAvP
- AAAO8AAAIP8SAD3/MQBb/1EAef9xAJj/kQC1/7EA1P/RAP///wAAAAAAFC8AACJQAAAwcAAAPZAAAEyw
- AABZzwAAZ/AAAHj/EQCK/zEAnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQ
- AACOsAAAqc8AAMLwAADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBb
- AACQdAAAsI4AAM+pAADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAi
- AABwMAAAkD4AALBNAADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8D
- AABQBAAAcAYAAJAJAACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAA
- AAAvAA4AUAAXAHAAIQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP//
- /wAAAAAALwAgAFAANgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R
- 8AD///8AAAAAACwALwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx
- /wD70f8A////AAAAAAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R
- /wDcsf8A69H/AP///wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx
- /wCmkf8Av7H/ANrR/wD///8AAAAAAAAOAAAAAAAAAAAAAAAAABYPEAgAAAAAAAAAAAAAAAwPDw8QAjUA
- AABBAAAAAA0PDwkEDwUeNiMkAAAAAAAXFRoqHAMQATsAAAAAAAAAACwAKDAdCw8bJQAAAAAAAAAALSEy
- MjEHCjlAAAAAAAAAAAAAMzMzHxEYAAAAAAAAAAAvADs3NzwiBilCAAAAAAAAAAA+ND00PxkTAAAAAAAA
- AAAAADg6IAAAEgAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAALgBEAAAAAAAAAAAAAAAAKwAAACYAAAAA
- AAAAAAAARQAAAAAAJ0MAAAAAAAAAAAAAAAAAAAAAAAAAAPv/AADh/wAAwHcAAIAPAACAPwAA0B8AAOAP
- AAD4HwAA6AcAAPgPAAD8bwAA//cAAP1/AAD7vwAA988AAP//AACJUE5HDQoaCgAAAA1JSERSAAABAAAA
- AQAIBgAAAFxyqGYAAHzjSURBVHja7F0HgBPV1v4mfbPZvuwCIkXFhr377A1siGJBUECaIgpYAQEFUWkq
- IlhApAkWREFQsfvs79fnsyv6LA87vWxJT+Y/ZyY3mWTTN9nNLjl6SXaSzNy5c8936j1XQp7ylKfdlqTm
- 7kCe8pSn5qM8AOQpT7sx5QEgT3najSkPAHnK025MeQDIU552Y8oDQJ7y1LJJwmEw4id4UQdZc1xO7sd5
- ylOeWipJ6AIbzkAZluBPggDB9DLyAJCnPLVqklAEE8YR+z+MD/AXnHTMH2h5AMhTnlo1GaDHZPTGj9iK
- pfgYKsMz83sRAoGElAeAPOWp5ZEO5+EIXIL+uJ5goF5hdh81NzUP8hpAnvLUaomdfu0wE49jIibhE/wK
- VeIz87MZIDSAJE+WpzzlqaWQhGJYyOZfiN/wCybg0cBxlvp2qADAmkBS0l89YZ7ylKeWQnpMJ6X/MAwn
- 5f9SbFGYniV+faCxFpC09GfKA0Ce8tQySEcsfwZGY4Wi/C/B21CZnUGghpoDKhgkLf2Z8gCQpzzlPkk4
- FXuRxf8KNmEzBpMWYFdUfVb5d1GrpeZCitJfPXGe8pSnXCYJbWDDQ1iGPdEDYzAIH+BnqAzPzL8Tqvqf
- ku0fOnme8pTbJEW8j2yC5IiGKK8tjSRifQPuxV1k999CjP8cxmEusTqr+qz2b4cKAq507zEPAHnKNZI0
- r9x0gaY/x4IOexhx3IkmHLK/BfsagAr6QiE1Hem+Oz3A5u0+/L3Ojh93+fDRaw58t8UfDItpk2NaCiDo
- MAC9MZwsfhcp/UPp3c/YBlXib4UKAEL6N2qw85Sn5iYt4ysMb5FgOdWCrv1s6He0Bb0MErpIKcxZv4xa
- ux8fv2LHywtr8dzPXmyWVWYRtnIuA4EO3XEgbsc60gE64Ak8iHl4hXrMdj+DwGao0l8k/qRFeQBoSJES
- SDLRwyjSoYBmZQE4FKMOuI/+cezyw+FpmH+dyxMr10iMt5D0hrY6lFxuwxm9bRjUTo+TJAmmxl6k3o9v
- R21Gv3fd+C9Ub3laNnOTjUkXVOMRrEQZTsQGfEuyfzJZ++zs20FtI1QQYM9/yo6/8AvliamB9Kkkhj/A
- gE6nWXFUZwOOP8KM/Sw6dKYvKJORZo7bLePXjx34kiTL68vq8K8/fcrDEepm4Gt5ikMCZBlUDUUSrCTt
- zxhShJvLDTgaGZ6fP3uwrt8mDNrmVyRnSjnzTTomZbDgAczE/rieeunGDHr/Ij6FavdvggoAtUgj7Nfw
- Yrs3aZ1JerIpDWRY7tG7EGedYcVF7Q04lj4okhKMkixDrpfx+Zo6LF1MquavPmxBHgjikda+Z+Y3nkAA
- e2MpxhxqRm+Jl7pkgUhl29V3E875zI2voTrOGs1AGScd3fto9MdlpPCz5vMxPsA4PEqynpmf1f6/oEr/
- tMJ+kbQ7A4B2EhqMgHlUMS66shgTC3XYKxVbUxABgX+bD5/M2IlJrznwgUMOZmYlvTijlZNW01IYv1iC
- bUQxLu9bhFutOnTI9oS8ewcuWVKLf0JNoEk5cy7LpEMfHEcA8CK9K0cdaSq3kvz/HD9BZfo/oWoAdVDB
- q9G0uwMAMz+r9OajTOi6qAqrLRL2UD5sxMh4Zex4xY7779iOR+vk4MPa3f0DWlufJbxxXz3a31aGcScU
- oJ9OgrkpOjFhO/quqFMAgFVosYY+F0hCB7L7l+J1FOJgmiUyVuMl3IfnqIcc62fJzwDAnn8GrozMo90Z
- AHgikuBXJl7hxFIMGlCEe8SHjQEAJtIG3B86sHTcNkzcJIfZnMrHzX3zTUxh2hY18ykWHDSlDPeRmXUM
- jbWuKTpBwGy/cjP6ferCf6Am0LATLe0QWkbHp5rsfjXZ52LlyEb8jeuI/f+kV9Xm/x2q9Ldnss+7MwCw
- CqowP7Wie8sxo1chLhEfNhYAmAgEfN+4sGbcdoz6r1eJ2+6OIKB19BmJ+y1DbTjnmlJMt5HMy8Q4J0tf
- u/DvAZsxulZWpCk7bBsVQ88g6XEvbsaJmEojpace+fAInsKTeIc+Y38SMz/3mUGrUWG/SNqdAYAlEYf1
- iqmV3V+B+3pa0UN8mKmJSU9K/t2N14ZtwaBffMEHuLuAgJb5TTTgBXeWYdDFNkwySArwNhk5/agn9f/u
- NXa8ATWJJlcAQIfhOA/9ieH1sClHvsd/cS1BgENx+v0BFQAYCBod9ouk3RkAWP3nAS+lVjmzAndeaMU5
- 4sNMSibm8p9dWH3pJgypQ3AJZy6GoDJJgvkVe58QoHBuJW4+qwC3pKvyk0bFg+bf7kftejf+/t6DHbt8
- cPAgFupg7mKAra0eRXsYUF5Gr/rA/N7ow8YHduKJF+x4CyojsUONwZifRXP6AHQ4EvuQov8aGQCdld66
- SUDcSMbAf/AdVKnPBT/YDOAoQMZzF3ZnAGDnXxG1CmptBtlw4W1luEV8mA3V9J92PHLdVkzwqEieUumm
- FkZae99EKlbJA20w5WQLrqJxTXlk/TJkZvp19fjmLQfWf+zCH96GyTzatGGpXAfTPkYUkY3n/tSN7wkl
- mPFZ8gvmb24nICf7VGA2VpD9f7pyhO/kdfwLk/AMVHufmZ+l//ZAXzM+V3Z3AGD1nwGgqoMe+z/XFlNp
- 4lQqAxNlZGQ1j9THIUKaZbpUQYImsufpOoyasgNP+sPj0K0JBMKYv0xC+exKTP2HBX1TZX4e7x1+1K2u
- x6dP1OLjP31BDzg3H2IDgNAweHzFenl2xO4IvNYgFAZsjrHnyj5mzMI0dMNoiHGpRR0G4gGS+8z4v0EF
- ABH2y4qpsjsDAJsAQQ2AWvVlheg+vgwDrBKszNw+GX6egP/zYNv3pHJ+5cbWGj8cegn6NmSvHWdBhyNN
- 6ETvEyYLCSJbdNuYbbj8FQchvToBRTy3NYBAmKe/UELZgxWYckoBrkxV7Xf54XnPifVzd+Ht7zyKHSxK
- Xrk045YMAPBv2NZniV8XeLWjOROBjDQ+16Iv/cfJPlblGPdiPl7CErwJ1e7/H9SwH4NWRh1/WtqdAYAn
- qfABMAhU0oEqYupDzrfiGGJ0z79d+PtHDzZu8Coqo3ZFmZjkhk4GVFxhwxGX2HA4rxdI5sJbvfhi5FZc
- SarpL1Afbi7npSdLYZKfmX9aOcafY8UQYv6kM/tY6m/2YSfZ7K+tteMzd0haMxM7A00LAEKF1yHkcBQA
- wJ+7Ar/hczgCjY81lwmmwwU4FmOwikalbfDoBpL7QwkC6hTJz8zPr1uQZT/F7gwAPFGYYVkLKNM0BgT2
- UHOIUJRbjjbZlIlOzcLtBDP2nlSOc7sYFW0iLnHq8OcurBq2BdfXyGGRgZYKAlqHn5k0qOK7ynFTTyuu
- 16WwkIeZn8bl50k7sHq9R1F/hdTmJhhYqwEIUNamdGs1AH9gbD2a34m/m2O8JeyHdrgPz9MsOS541Etz
- azyW4z0lP2FDoLEDsAZZ1lJ2ZwDgScJMzioYg0BxoPF7BgZj4HtexAYAc+C7DBi2joTo91fgwsPM6Jzo
- 4n4Z7uW1uG3aTiz0htdza2kgoGV+Ew2IbVwZBvWz4Q4ylSzJnoTGw/9CPf5v6k6s2+lXwl88+WsDjaW/
- 1gQQWpOWibUAIOa12CxDC+KRv2u6caqiufIQqf17on8Y572HrzEBz9BdsdRnrZAdf9vQBE7K3RkAxKTl
- SWoNNGZkZmhz4LNEGoAAEDYlSqgVtdOj7b0EAsda0DVRB+x+/HXLNvR9w6Egv5BqLQkAwuL8NCiFQ224
- 4IZS3E9/FCd7ErcMz5ydeGVxLd5xharc1ASaVvoLCa4No2oBQNsnoGH6dWTFoKYbJ/aBTMZIdCf5Lynj
- pVId3dv1WIzv8S1U1X8D1My/jOX7x+/Y7ktCWrCkV9YDBJopcCy47h/hkkP8VqQRCzOCAYDNh5IOerSf
- 1wZX7GdS1xXEIlZ5//Di3cs3YcBmv2LvaRcP5TppJS6PmfUsC06YVYkFBbrEZpCgOj/sd+/AqtX1+Nin
- Orx2BprQAITdLhhf6y9pCeMEZYyG4h8YjFfonS3sk2fwAebgRXrqG6ACAEt/HocmiVDszgAg7l8faErC
- CkJOJG6x9lsLqrwImQAMAEFfwl4GdHq8CgMJDCriRQjYH7CyDpNu34G5/paVHxBM7+UxOMKEfRdX4flC
- Hdone4J6Yv7btuHJdQ58BnXSCwDQMn+kyo8WMDbh47QfCYLHiNHN6BT2yZ+k5o/AImxSipQI6c/mT0bz
- /eN3bvemyEIgWvtRkGB8f8TvIs0A1gJYAyiHGlUoP9aM/R+uxIASffy0V6+M7ddsRs/3XPgKubpOveG4
- Ce2poI0OlS+2xcpKAw5N9gQ1ftRP3Ibl61TzhxmfVX9mflb/Wf0VKn80db+lkIS2JCAex3M0I84Jm1k+
- uqd78RJeUPL9NyAU9tuJJnz+uzsApEuRS1tZE1AWFUHVADiZSAGBfjacMKEMF5kShMK+dOHlqzZjaF3u
- RwWE6s/Mb6EbLyaQm3KaFVcle4JdPtRN2oGnXrLjE6jML7LzBPOLUF9LlfrqOJlojO7AJJyBsWF2P9MX
- xPA34QmS9cz47PhjByBnKmY83z9+J/PUGNJWtRErC9n5xVqAAgL0YeW0clx6UaGy7DXmeHMxkQd2Ysij
- tViNUFQgV9aqa+9XqP7sPC28vgiXjirFLF2SsX5m/snE/C/alS2tWeprmb8eITNI2PotjfFV0tN/N+Bi
- +m8xzRBr2Gd20vJuwwoagX8jpPpnLd8/HuUBoPGkBQERURCmADvDKst0aPdUNYbvbcAe8fwBZBP/fMZf
- OGubGgZjUyDXEoQE8ytmz8kWHDG3EkvJ7q9O5sd2PxwTt2P5Wjv+Dyrjbw80nvha5m+pKr8gHU4hc2gy
- nicDoEvYJ3xHb5Cpdyeeoae7ASHHH49DRsp8pUJ5AMgMaX0CDALaDEMFBI4xo9vjbXB1gS5+5Zvn6jD1
- tu24D6ojKJccglq739pOh/ZLq/B4F5NSNzEheWX4pu3As0vrlFRXnuxiSa6Q/E60DuaX0I0s/5nE4BU4
- ucGn28nEuR5LSOn/BiHpn9V8//idzVOmSMsgDAJKnQEEFhtRqxxahDPHlKFXvEF3+bHtqs04m1ewIXcc
- gmF2v0VCCZk1Y863YrgUadtGIY50LKjBK/ftwmp/aEWeiPdHMn+umT2pjZOVZP4M+u8ojEDk+gc/Pcel
- eBfz8TJCjj/O+2cTqFkWJuUBILMUFhdHyB/AWkAbYpy2i9tg6FEW7BvrBMwsnzjx9JVbMAqhLZ+bWyJq
- /Ry23lZ0v7sCD5kkxemZkN4ge/+mbVjqkBVJJ3a0EXvatRbm56duINt+CM7GbETLgvwdW+jTBWTw8N5+
- zPyc7izCfs1y73kAyDyJcKJwCnJ+ADsEGQSqDjPhwCeqcC2ZAjHTZN0yaq/dgovecypOorS2fc4gaUGt
- cE89Oi2vxuI9DDg4mR+vd+N/gzbjoa3+4OIWwfzC2986mJ/H6EIch1uxlqCyosGnLP0nYiXexkcISX/O
- 9xf1Ipvl+eYBIPOkzY0X/gARGqwiTqq6sQTnDy8hORGDOEPwUxdW9tuM66AySnNlCGpV/wJCgJL7KpQV
- fsOSWdu/1Ysdw7ZgztcerEeoEs8OhOL8rYX5JRxOdv99eIUgP3ouxL/xE+l0S+kJstQX+f6sDTVrZeI8
- AGSHovkDhEOwqlSHDqwFHGBCx1gn8MioIS3g0nedSrisucKCwRV+1IrOKcCJD1RikUGKSGeNQg4/HGO2
- Y+ErdqXugajGw8xfg9bG/CYan2fxDKrRKypHueheh+Jx/KhsSLIBoXx/znZs1khPHgCyRwIEIk0Bdgi2
- 6VGAY2dV4iqyo42xTvCFC2sHbsZwuxx0EjWlFhCm+pdKqF5ehfn7m3FCoh9yIZWHd+GFuTVYI6vML1R/
- bSWe1sH8RlL4p+NmGpXpUb/BT2sFqf0PkmkgK2q/cPxltL5/+jeQp2ySNj+ApaZwCFaZJWXp8IDuBTgy
- Vm4AMVLdrdsw4EU7WY5NrwWIsGYBda94RBH63VCGaYl2TGIn5ntOfD5qK+bXy0pyi1D9Raxfm9/Q3NGN
- xo/RKJyLvngOsTY2+ZsYfTBJ/x0k/5sp3z8e5QEgu6S1oTkqwFpA0BTY34j9FrXBiDYGJWcgKn3sxOrB
- m3GdW3UWiUSRbDOOVnuxtdOj05q2eLpcj70T/fA3D/4evAUPbPAq21lpK/DWoXXVQdThJHTFXXhVqegb
- jTjffyZewpoG+f6N3tY7U5QHgOxTcL08IhyC1NrcWoKLhhajhy6GU81D6v/wLehLUpVtae1qwWz2Nwha
- 9KZkShlG9S3CjYl+6PTDPXYb5r/swAcIt/uF06+1lENXK/rOJcu/AqfF5KL/4BfcguV05+z0a7Z8//g3
- kqemIG2WoMgNUACApGuXZVUY2cmoqQ8XQe858NSILbjZFdICsilBtbn+RfsYsM/adlhjkhTgikms+r9k
- x/u3bMPjPjWzjQFA6/RrSbUO4o9PEWlGd2MajsFIxEqE4nz/W/AUPlOWOgvVn8N+ze74C7+ZPDUFRSYI
- KZuRIGAK9LfhzPFluMwQYzK5/Nh65Sb0+sKjVI0RG4tkYwIJ6R/s5/xK3HWGFf0S/fBPDzb224xpf/oU
- SSdUf5HpJ1b25cSkbxSZ6BndRlZ9D8xusMhHS2vwKan/qzT5/iz9Rb5/zoxDHgCajsIkKzQOwQIJ7VZW
- 48b9TBEFIzS0ohYzb9+B+2RVgmRrW2tt/kLRP8w4fGEVVhql+NWOvTK8123BrLfUkGWk6t+6nH7n4liM
- w/MEBO1ifmszAd9ILMWvwTJfHPvnsF8ubEUWRnkAaDqK5hAMagG9rDhpegWuiqUF1Pjxv7P/Qs8takad
- 2NU2kwyllf7KYqZHK3DnmST9E+15sKIOr03cjqWy6t3Wqv4i0681ML+EI9GeFP/VZMQdHfNbnPE3D2/i
- CbyGcMdfVuv7p39TeWpK0joERfEQBQDIPqh+vho3dTNh7xi7EskP7cKNc2qwHKpk1W4ymqm+Bf0UB5qw
- 79NVWFWoix2hYNrsw6aef2PytlCqr1D9tfH+nJr0aY2NjUB7Lh7D/mQOxeIavssfyc7nIp9qvr9w/GW9
- vn/6N5anpqZgai1CYUF2CFYdTyr34iqM1sfYRedXN97vuQn9HbLCZMKTnCnmEj4KRfpPL8etFxfGT/nl
- Ut43bcOcl+x4D6r0Z9Vfu8inNdj9HOHXYwqx9cmYhXgp0JzxNx7P4kPFFNqAJqzvn/7N5ampSesQFGFB
- RQvg9mglhpHafWS0H/LeggM3o8f/ufAFVCbLlEopNBNlu/ROBuy9ohpPVepjVzXm9QpvOvDR6K14xK3a
- tyLbTxTzbD3x/gHojuFY2aCib9iAUHuXbP7b8FQg3184/hism7zQR7KUB4DmIaFuKwwHjRZwiBHdniRT
- wBKjcMiL9XiEpO4UqFIlUxNLrFvglOWykcW4alQJxsfbz2+TF5sJjKb/5MUPCDn+IlN9WzrzSzgRnTAd
- /6Sn1TnuN2sI9K7FIlL8YxX6yMmxyANA81BYnj3CVwu2nVqOKy624aRoP3T48ceJf+LUGjloVzZ2com+
- sO1fUiSh7TPVWLCfCUfE+gF7/adsx6Kn6hVHl1D9o3n9WzJx5kMRluA5VOOsuN/kO+WNvR7GSwgv9NFk
- 9f3Tv8k8NReFOd2g2aV4XyP2JxX8Jpsuejnx8dvQd2U93kBmnIHCJ8HXKj3DglMfaoOHjFLsGPe7Dnw6
- civm2mXFvtUu9Gktqr9Eo2HA/bgHh+IWJFr6zPn+AzCfjJ9ohT5yKuzX8Ebz1FykDbspzAdNRGB8KS4d
- WBxd8nzgwPJBWzAWqrddONvS7YPQRIrpTcWcCkw6uxCXxfrBNh+2D9uC+75yK0tbeZKLXP/WpPrrcSv6
- 4kJian2cZB8E7nQKVuEVvI/wjL+cyfePR3kAaF7SJgdpU4SruxjQlVTxm8r1SqQgjOr8+PuMv3DKdn9Q
- yqTrYRbXV7L+6Jr70jUXVeixZ7Qvs9f/kRqsfHAXnpNDqj9L/8iFPi2ZdOiFw3ET1sKcxC5HXN9/JBkK
- nuBSX+H4y5l8/3iUB4DmJW1ykNAC2BdQLamVgy68tgTnR/6IGNE3dhuuesGu2OCNyQwUGoiSmdjPhgvu
- LMOMWM6/b9z4YeBmzNzlV+xbBgCt6t8aEn54G6/2eJDs/hIcl5A7OOx3PZaSLsRRGW19/5zK949/w3lq
- btLW2tdqAVVt9eiyvAqjIxcKcQjuQyeeIDNgPFT1O10zQGgfJQYCnkcqMe10K86N9kWu6T+CVP8PXEqd
- QuH1FzH/1qD6SzTyFjyAR7EvWfRJlDzDCzQWM7Ga7lxIf219/xYxFnkAaH6KTBEWWoACApcX4vTJ5eir
- j0gR3urD793/wum1ssKIzISpqt/CCcnXLO9kwH6rqrGwRN9Q7SWNQ15aizX37MRTaKj6O9O4du6Rhcbi
- HtyIf2AqktnlaAvZ+EPwOI0Gb+zJGX8bAmOTc/n+8SgPALlBWi0gbKGQTUL7BW0w/CgL9tf+wCvDMWor
- rnzDoTifWA1PNdwk1H8lAnGFDT0JaGZEVvxhbeNHD36+fBPuqQl5/UWFn1zbvCQ9YpPncpxJtjwn+xQn
- /D7n+8/GK3gWb6Hhxp457/gLv/U85QJpKwlrFwopNQNOs+CoBysxTFtKnGfYEzWYefdOslhVj3OqTieh
- /peS6lH1UCXuPiOK+u/ywzVkC6b/n0tZ1x5N9W8Rtm4cknAKuuJOrEEEyMakb0jVvxFPkKXPVY9E2I/H
- pkU4/sJvPk+5QmFluKBJESZUqJ5TicFnFuAo7UKh/7rx8QUb0denSuRUkoKExsGOx/IqPfZa1xaLSvXh
- VYpZ+i+Jrvqzk6s1qP4S2pHJ9SCepDs/J6lfOEnC306awvvK/oYboAIAO/4YhFscGOYBILdIu1AoLDmo
- mxH7L63CaLLRg/nodX5sGbAZF37tVtJxmSmTVT/D1P/uBTj54Uo8Gun9J4D5pe8mTNslK15/7Uq/yE08
- WyKxV8WAubgDh2NCUk4/vtO38DWmkPLvDm7r/XtgXJwtcSzyAJBbFLlQSOsQbHNHGS690oazxAo9vwz3
- mG24fo0dLyK8aGgi4msoqxHpRG0mleGGK2y4SqtdOP1wXLMF93/owqcIT/iJrOzbUkmHIeiNoaTKJyh4
- EiTe2PNGLCO4/QqhsB8vhGqWjT0zQXkAyD2KlSJcVaVD+9XtMI5U9krx5TftWHLtVpJioWy8RBNRm/xT
- Xihhj7VtMa+jAQcJAGDVfzGp/jN24pmI+n6Rqn9LBQAdzid7fxzeppFOamtzxfG3BO/iMaxDC8v3j0d5
- AMg9ipYiLCoHVQy04dQJZRgotICfPPj6so24tFbdeDOZcKAwMzjaUNHVgANfaodnSSUwCgBY78ZPgzbj
- vq3+oHOrdan+e6AE80lrqsCJSXPABtKCeLVfqL4/Z/y1iHz/+IORp1ykWPUDK4lzS9a0xbiuJuzDXyRV
- fdvAzej3mRufI7lwoHA0KpGG4cW48pZSjGWpzwDg8MM+fAtmBVR/rddf7FHYklV/ieDUiNmYhf2IneMs
- dw4jL93zVKwh2d8i8/3jD0iecpHibShSeooF+z/WBhN1EvTEuP5J2zH66XqsQigrMJ4fIJj7zxuVLm6D
- qScUoLusTmF5QQ1W3bsLK6PU92sNm3roMZos/8sxJ+ZOPpHEd/oZfsb1ZACEF/po9o09M0F5AMhd0q7T
- 124oUk4HrQ9UYtA5VnTnL71px7Jrt+J2qCG6eCqp8C8o25SRjdH2kw54zqZDWwaAr9z4dsgW3L/Tr0g3
- nuCtR/VnaX8VTsZQPE8wUJ7071wEelfjcfygrH7UOv7YH+Jt7ttq/LDkKZcpuD8fQg5BboWdDWjzbDWm
- lulR9ZMHX/bbhL47/EGPdCw/gPAtsEZRfqwZhzxZjRX8Qa0fNSO3YOYHLsXDLZi/9aj+h6Az7scLZFAd
- ktIvV+ETpb5/uOOvReX7xx+YPDUlSZpXRcITZxv2gK5Sp0plFsT1O+HfuiVkW0Y6BFl6FdNB09VFOPPm
- UoyiL+7oQwDwjVtZlRbPDyA0CuU8w4twxS1lGMfLfJfU4umpO7ESKtMz87cWr7+EjnS/s7AAHXBxSr/c
- TvffH/NoNCI39mxR+f7xBydPTUVBpqdmIH2+YCDMJ5wNU99jYTjeAIlX/Pn9kLf+Ct/nq+Fe/ghcb2+C
- XB/4nVgnwKYAS3BLiQ7WZVW4Y38Tjpy6HdctqSMJFyoSEs02Fdl/DABlz1RhxpFm9FjvwVcDNuMuUv2Z
- 6blpt/IWzK/0f09IlnLoyugPPV2gnvq6c1fDjT9yBSh4+24TJmEszsAdMbfxikYy/TcL6wgSeWdmwfwt
- Mt8//gDlqSlIMD5PQGM36KpnwXr70TBeRh9YZc2XxBfp1fUVPM+Pgn38f+DfjJD0ZlOAAYAdefoeBTh4
- ViVmvGHHyhu2KfkAoia/L0ofhP1fSipF2ccd8DJ1qOC6LRj3vkvJJmSw2YlQToHC/HRh/Ukw7H0tLJcd
- Cv2pbaFrT8cMBAA16+H972p4nn0CrnUEVtpS4M3PIHr671r0Rj8sRozyajHpG/ymOP6cSrafcPy1yHz/
- eJQHgOxTUOpTM3WGVPkkbA/uC8P5/sD4C/GKwBcFUlDz/wzfq5ehdvh/IW9HSIKzJsAAYCRG1hMAjDrA
- iK6Xb8IVW/xBFTXSD6At/lF8qgUHzW+D50j1f2TaTjwH1Wxge1+7n59EaodpAiz9hsEyzgKpQyyw+hbe
- Ndeg/rYv4f8ToV2AgeYDAh1OxQG4i6S4MXyNQ0Jyk4S/BU+T9c+hULHWXxT6aOnrH8IoDwDZJe0qPzP9
- Y1sA63hS+0cQd+gixaTKUJJgftF8r8H9yEDUT7arqieHBlmKs2OQGVp3kBHtHm6DKYM2Y/QvXqUwZbQy
- YcKMYACxXVOEvj0LcVafTRhbLysmAzu16hAq78VkWoiCWy+A+QaZsCBy1mvBil7lrfD/uw/qBvwbvl8D
- 128ux6GEvVGOOViLCvwj5V+/ii9xDyn/4WW+hOOv1Uh/daDylE0SzK/stnsq9Ic9gSK20608i/xRvhxi
- fLUqBTfioB19UdvrVXi/DnyVTQHWAMzE0eYTYdjjhkLdUNllcLX1GkxWSFVG1Vkors2M6KHrOe2QN22h
- VlnoOeRtj//lF9y+9z+Cj6U2gwBLfod6SRhHw3zuWBTMZ0XArxjF4X3VBTJpRJ/pYvLX8L5wEequ3gxZ
- W7G4KUFAHcZleAj74JqUZ/gOAsDrsJQUf67vz+q/2Nizxeb7x6M8AGSXxMIeJYw3G9Y7esE0mGdRJAAI
- dVowlMr8kiLu+f1yuGdfh/qZ9Na7J3RFvWA8+wIYTyFT4qhSSO3oOyZ2zCWzqE0lhaG9pOe7tpGl8X/w
- vv8KPC+9CM+XNZDltpBKX0PxmnJI+wox7tf0VevU0IIVHXNOhH3QXLheRih5qKmkptq1sWT1X0j2eypO
- PwRu8nG8jUWkA8iK048BQOT7txrHn5byAJBdCm61Ta30UxQ/XwTpAAEAwgSIZCiDhqGMARDYBP9n98Ix
- 91KYehwFYw86aamERPv2RqdoP2I4oBnu3w7/hlXwvLwT/trBMI/xQzJo+yp+H+GrCAOr7+B7pztq+tSF
- FyxtCubRoT+OwXBi4CjVlBPSzyTp2fEXyvfX1vdvVaq/oDwAZI/C6vzRH5XfoOQjmkVGLQAI0jKTMQAA
- RoQAgL7rJxtbshHTFyrHkn90UoLPVOkuK5xaT6+7Aj0z06c+eh9pyMeS/qKvdK6N56D2on/D9x3CNwvJ
- 7ngfiHZKqa7iFJN9mNzUx7uwGm/gQ4SSfkS+f6ty/GkpDwDZI23svrwDdB1fhu11b4CptACgGq1SUPVX
- JanKTCalqYr9n/Qr0iCUZk6qgkX8zmnJS71hTq2lV9ICSG1R+xPNXImw+4N9FQBAxx3nofbyj+BlZhL1
- A7LJQBIqle27H0VnXJny0HDPPsT3GI+nAoU+tPX9W3y+fzzKA0D2iMdWZN1Vct79ByheRzPJEGkUR6r+
- gplMgffM7Kyi/0athN5zs6QBAPG+76Fzs/TfCS4z7CchqhomkRqAcP4ZILSVkMYiwIree3uidsAH8L6D
- +IlJmRlnM11yHG7B2bgzgEGpUQ2p+DdhOb7Bl2iF+f7xKA8A2SNRdSe45dca2OaXQdeZGUq4k7Wef60U
- NQUAQDCVE1yXy49yZUWrjsRd7EeX7EPVfs9F51elP+86qmoaOoRrAFrbPxystP1lzUF29kTdENIAePms
- qCKUHQAw0OUGogcGEwPrlSzJ1IiRdSX+D7OULMoNgcZlvnagleT7x6M8AGSPBAAEi3uOgWVkDxjP02oA
- qvQPOdC0jCQAgDWAjfQLts0rlE1rVQBI5+HF+o0rYPtvo+tspVd1BZIUdOELZ6XIaNLa/OH9ldgHsJM0
- gGGfwseJNGLX4GyE0HT4Bw7A3XieBmS/tM6wkfo3FI/TTXN9f63jr9Xk+8ejPABkj7QagLLd16HQHz0V
- 1sl+NY02KP0F42uZyRxgKHPge+tpLrLaX0GnLVWK2CUHAIm+I5yAWgDYAjUzqExjAojvRjNTQn1WX3+E
- 99tzUTu8Rs2dF4uKMs1MEval4bgXy1BNyn86xJ7P+/EywQfn+29AqL5/iy/0kSzlASB7JHwAophHNTF7
- +9EwDz4BptN4ZgXzg6EykxkhiW/WMNff4HW+MqEI716lC/gAkn14UhJHQgCwPQAAWxVzQ6d814eIfGYN
- WJk1kj/Qf//9cD48E87lUCVpNjQAvpgZMzAVx2J00pV9Imk9WVW81t8TZP5Wme8fj/IAkD0K23gTqhnQ
- zgZ0vgUFV+8HfVetyq+V+Op7laF20Dz8kXinhOZ4pWL/q1EAU4omgBTjL6EBuAM+gB0BH8BmasyxJYoW
- IIWBVaR5IiQ/v/4G/08Xo3b835A5iUZUFMqsD4AX+UxAP5xDzKt2JXXyUX9G4Qn8h/4Lr+/f6vL941Ee
- ALJHIg2Yc+9ZC2AA4CW/7btAd+gNsAxuB53FEsFAWsm/RWF+1SNfoUh/SXlvzVAegBYGRBRANQNkBQC2
- BMKB1qCXP7yvWgDgVwIRx1DUzXgfvo+gVhPmwiLp7FoUj3TE+IfhdlLbdWkk+wh6HV9hEp4JlPkS9f05
- 379F1vdPl/IAkF2KLO/dbm/oDh8M8830vg3b022ptaGZrK7sUVVrZsTfiV9q6LU8oPYL5rcFGE4f49Gl
- 6xdgac8zX+QBbA2YAQwGnMlUCR0sGmaPBAI2mL+C1/8+PK8shnuOM7Rhhigqkgmm4so+VXiImN+EA9M+
- Sy3suAqPkbX/PUL5/gxYrTLfPx7lASB7pK3pp5TgPhT6I8fAMo2U9/Y7iblqA8k3cuBL/APWPfXKD1R1
- vzQQ9itRmB8KExoD6n8m8gDEMRbPbkULgAI8OwIOwW2B93pqbakfFUoEQgUBQ+D3HKH4kz4vUjUV3//B
- 8/T9cM6sDcXSRTpw48bTQv89Qf/tiUvSnrk82PPxFpbgNSC41l8U+mix9f3TpTwAZIfEuCrLgKkVHwF9
- t9koXGiAvCer2Vxup45e7WoOvuKQlgLqvyUg6YsD9j6rD4UBz7+aadf4CEDkZxwOZ/DhwLcwBXYFmH+H
- 0l8Gq1B4UE35VTmGb7AsoKmUqYlK3n/CvWAcHPfUqWp1Y9cDSMr23XfhVpyIKSkv8tHSLwRK12Ix3dxP
- CEl/9lW02nz/eJQHgOyQdouvgr0gdVwO2+PV0B3JDM96Zn3A5nYGcvBFWJAZiwGgMNhUhhNMZ0hT+ms7
- Fu1vWUlPVn0BzoAmUBcAgZqAg1DdC1wORgVEX22B7ETRipT+wr0Qrjsmw/GYO7xASTogoCOmPQ/98SS9
- K0r7qXio65zv/zo+wG6U7x+P8gCQedJGzCxku7d5EoUPHAnDeSTpJWcgxu4MSFSWuCENIBRbtwSYnk0D
- oW6ny/yJnYBMstIDX0ATcAYYXgBVXeCYO9BXBPrK/SsMML0tAFrCRKBBqL0Xjuumw/mCV/UDpFMujCv7
- HITb8TydfJ9GPZkP8QMm4OlAmS9uu0W+fzzKA0BmSVsByELSu/gRWMeeD9O1dFjvC6j7nsCrG6rdLdJt
- RWKQNsNO5NnrUmD+ZJJ/Gv6tAgBzpgABdwCsHEHQUhcN+RDKYGT136pKfOVVOAmNgdChC/LffVFzyWvw
- fYHUy4tLZO9X4CFi2iqc2ajZWku3cRNpEF8rOyiJfH8O+4ky6rsl5QEgcyT4k3lYKb01CubLJ6JgKklu
- qxB7fg3DqzWz5Aa59mJloC7YQjZ/plT/hsdClQm1/VSBKgRYkWAVmQUozBSdZkD+hu+T81Db53v4NyF5
- fwCrFRbcg5k4WtnGK327n6/0DD7CXKylK2+ACgC7Tb5/PMoDQOZIyxPW7jAc+TgKl9ig49h/g5rZapNj
- 6sNSlpg+2vEQ24c+EX3yBQFLvEphYCVME7E6UDgodZqzsV7xGbzLT0DtSITqA8QHASOdaiwGkOX/SMDS
- SJ/+IDWfC31sVCofC8ffbpPvH492ZwCIXhgn/XPxnFcKgFRBarsKtvkHQH9iNKaKdpFYF25Mh1I7JseM
- LQig0vZH0pgkWi1F2yLO75sFx5CJcPIuO4n2GdShO47HHXiBkKUSjSHO+HsA6/BcWL4/O/5aVX3/dKm1
- AkDk/OPaWToTb4FNbX/ozIdAX1oInZUkm/IdssudZOO6SCzJ/4G37nfIyuTgSjySKq189F6mN35PuMNI
- iE7F7qd/imeh4IYrYL6RLytHfBEp/J3oeKKbT3Q80gTQAoAU5XvRj0kNviPF+J0T8tbeqDnnHfjWQwWB
- aP4ACcehA6YT01pwUIq33nDgviKmH63U99cW+uAMxd0m3z8etTYA0M45xZwuJYl8AYwHHwPj+efCeEQh
- pG6kplYjwPhxyMEbX1DbQWrwTmL6GrKFa/+Cv+YT+LY6aDLTZztpFv+9E/7tr8OzbTtd81QYDpuHwnmk
- FgfDVZkAgUwNTLS/tSaAFPc7scBAivl5ODDI+Am+109GzYAdoRV34cWRSlCIpViOtujV6Jt2wI2b8STZ
- H58h3PHHaRgtea/DjFFrAoCw2ppkj5p6w3jUrbDcthf0pwOpOZESpdqEbGTVM14P2b0D8pZKSIUl0JVq
- v5PseyRxPNUBSXQ8lgmQPPMjqAMkAwJkTHgehnPMGDgWIXzfQXad6jEbt+FwTGn0zfMZX8HndKZngeC2
- 3iLfv9XV90+XWgsAaD3wRiup4jfD3HckCqbokMJW0GEnTAwA3LyBEFltIEuuivAnHcZPxPDJAEIqmX+R
- x6Q4GkAyYJAMCIj3O+D/tSdqL/oMPi7CIZhRwkCch+FkradT1iuCdNtgNw7CYt9mrPeqjr8NQNjuyckO
- a6um1gAAWuY3EcNb7oK5/zBYpxErpu09jgcAgvl9mkq6nOHXjphfrNKLxuzJMH2mZ2QyzsBoJkDyTJ8c
- CEQck1+E67GBqL/DKTzxZ6AbJuEFmMj+zwCdNNPgPGyVfksppNpi6LYUQ/qVtI8vVsH9r/Xw//A7/AwE
- 2nqnuyUYtHQACGN+agWDYDpvKqxzjOoKvEacOD4A8KzxBLL5apUVc2ouvPg82mvk+3jH4h1PZlCSOR7L
- CZhI5Y//GjpHPCBwQd5xPeqvqYHsOtVmPGz6fEffLXvJ+2diRlZ/K2HQcDM6efToTM9kT6WWgrrikk5f
- +yf83zwF1+OL4Fr1p7r7stYfsFsBQUsGANH3IPNfQDb/g7AuLIK0R+NPHiskFpL+6mZ6qvTvqEnXSUbi
- N4X0jxyoWMcyqwHEdgpGvt8G/8YaA0ruu95RsOQyF/zp1fUJIx2pZJeONuGozw3oRM+EG69iLFZyFUL9
- 4l2RfoZ33TWou+lj+Hn3H22t1t0GBFo6AIhiugUHQbfXU7AtbA9d6ptCRD15bAAQ0l+smitVnNe6hBK/
- qU2A5NV/9crRnICR6cfJ2PiJTAHxN/tP5lzgxJSbHXCbM3PPB76kx8VTTehMaMLSvwNNkXKE9lHQ3gtn
- N2yC/4uhqO3/Dvw/oXk3NG0WaqkAIJ6lsm6mQllwY5t1FPTnZeqeogGAVvqLTTS4lt6eCaR/Y0J/qczE
- VJyAqYQBkwGBZPwB2u/x1T7Z34s+99diS0Vm+K1gO9B/mBkH/qmq/h2J+auhLlCKtYRaVkoC+T85H7X9
- NoS2Nt9tQKAlAkDYghtCgKLZKLjpMphvABIXh3QCbnrgW7fAX7cdfmedGotmJNHTRDHQSSWy54303kSm
- hIXzCOhvM0kQpfacWj9PcfxJuwIVe4oVH3r8jL/GgUD8uZgoYpGY+dWrxNIAkn2NBwLhoUDgzwo/LiXm
- /3o/X2ZmIZ305DkGnPW0UVH7OxPL7xGooJyogAqNr/xf+F7phdphf0DmMGFz7GrcLNTSAEDr9DPTG9sQ
- mC6aCut9OnUPvpjEWXxr4f7qdjje/gsyJ4LE2rVWO1eCa1ro5MZq6ApoQjEgWAuAkmNh6DICloP0cTL+
- Uon/J2L01AdLivgbMf8WYUDt8cYzf3R/QL1JxnUT6vF8D3fG7rX6OwlXjjJjrzqV+dkno5Zak8LWJcQi
- nh8fwb2gD+rG7wyFCls9CLQkANA6/Zj5rX1gPO0BFM4zIuGOMPJb8H47DPXP16jMzzMvFsprtVWd5lU0
- xedAb2zLUdj7dJj2TsX2byj5G86vxsy46Ha/FPd78ZyAjWP+hqaARyfj4cucmDzKkRGnH5PeBVww0YTj
- 3jcEpL9OCckWaaR/MuSH7J4Jx63T4VzqDd/UtNWCQEsBAC3zKwtuToX+4KWwLSNVPWHceD18v1+BusW/
- QeY0UK5zwbk7DADRc9HDmT+YXRhonFtgOxr6fZ9G0WC6vpJrkBoIZJbpEw1a+DEpxueJw4CpgkCkKcD3
- /fqxHlw1vQ72ggzdJA1c5zd03p5TjN72Xp2/PfS+9pD85dDJZJrpzPTMyHwzFCg5Iom3U/dA3jkJ9iEP
- w/W6L3y9QqsEgZYEAIL5LQdD2ms5ipaQjZdwschmsukGoW7Bx/DxUlAuUMnqHaN7rHXpsTQAEW4spAMl
- s2AdcDnMp6bL+E2dAtxQ/Y8EgvR9AMkcY/phTz8uebAWv7fPYBbuDnisN2K94Xuu6ivtJCm+nR5WPZll
- nmLFlwMLaQKFZ8HUZTjMR5eSGZfolPWQfx2J2oEr4f1Ujr1oqVVQSwAAwYAK81dDavsCbAu6Kktt4xOJ
- esf1qF+0Fp5PoC7/5CYAQGgATNrF8FKUJnbw4slTtDd0+6xG0d2V0FWKH2tfG76PzfiZiACk6/1X/w7J
- 53R8AMkyfw2NXN/7avHRkRksvsNFCpbhF8zDt5CV0l68yo+fsSjwKUoWmOmNeQBMh85A4dmFAYduPNoM
- 37fno/by7+D/GbG1xRZPuQ4AgvkVj38FpPJlKLz3GBh6J+o7L9u9A/an58H9BtS6b+zdFQAgSvH5YlxT
- iri+KPDJK/xKb4Clz62wjCTm0cXP+ovO+M2RAhzfAaj65hujAcT73CPJGHuTHYsvzZzTT6FfSaMbgX/S
- 02XTTrsRiSvwDfHc2Eyz0iQqHIeCk2+G5XQjpISLwzbA994FpAn8kloloxZFuQwAYeE+4ryiR2AdfzZM
- 10hJrOxbBNer4+FY6VVLPvPEYABgByCnfmqrW0UzASJfhfQvKQHaPYuiuQfBcAQQnbGTZfxMA0FqiT/R
- brZxGkC0z3mAnzjfhbFj7fA0eomPhrx06hn4P7yo1Pj7O9D4OQsPfjBaBPXZcYHlIvqjdAas5wyG+YTE
- PgGZt2Vb1wt1Q3+Dn8uHtbrwYK4CgJb5zfQUC++B5frBsNyqQ+K94F6E56MRqF/mCE0KIf2Z+UV12mQf
- JPeDpy5PoLITYTj+SdgeE3X+gNQYP1OrAJN5cMnF/8NDdg2PJX6NBQTc94+7eXHFrDrsLMkwz3yJvzAS
- qwnKOY2XG1f5YSbV7kIktjPkEDHvq8JbiZUSGlQuga3PuTAenHjVpyx/Ae+TF6N29OZQefNWAwK5CABa
- u1t5eNfD3GciCqYbVCaMS2/D+/kQ1C2qVScEMz+r/6wWCts/1QfIaqSyuQe1ihkouPFKWIbGYv70cwAy
- N3iJjsXL6lPfJ68JxMv0+6vSj8sfqMP6fTKU7CPITQA+Cs/iC3wNda0/V/kRW3tpnQzBdSIImG9Ql4eX
- 0ZvqF1E0+HAYOyW6HD1b33twz++L+gk16c2hnKVcA4CwWD+1gj4wnTgL1oXmJNb1fwjvt/1Rt6AmxPzC
- KaSWtU/djhNAxBKktC2kTjRpHm8H/b7JMH5TrwNoHPNH5gEkBoF46j8n+1x7Zz1eOdWT+Vm2jlh/Cp5H
- qNAHawAM9NoKv2HOY4Q0AJ5H7Lyt6Aipw5soGd4euoRziwuZLIHrntGwP+APL2TSokEgFwEgGOs/FLr9
- yN5eUgGpa6Iffg7fTwNQ99jfkEXNN54QrBJy6E94/bXrv5PtD/dF2eK7O4wnP47CecQcrFo2YP5MLAaK
- dzxWB5P5LL7tr161IdOnBwKc7PNgfyfuu9oJf/rFvKNTHT3LvngYW8g8V5mfQSDaxp5aYRKpBVQGWsWR
- BOYrUDSgbaCKUzzyQ7Y/COeYO+FY5m0lIJBLAKBF7IL2kNqtgO2RA6A/JcHvyEbz/W8Y6hf+D36eEOz0
- Y5tfMD+HhLSSP7VdaVTpUUKdq7wX1lv7wNw/mq2fLgjEOtaYQYx3LHkNQLw2BIF4QMCRuXUneTCSpL89
- bnJ2GsRdfBRv4AllY88NSLyxZwONEqopx5mjvFuzAgInw9BtEWx9kgEBL+Sae+EYNQPOVY3Y7ShnKFcA
- QOv0K6B5U7oAhRN6wDQ0UfFOkvy/XIP6Rb+ozC8kP08I9vgL5k/nIWnV/7IySB1fRdGCdqSVAI1n/OaO
- ACSnAYjX0PF4zM/9/76zDwPvq8NvHbJQco839rwaC0nWc2xeSP9EG3s28ClBNQUECLShVn46DActgO2y
- augSFpJxQ95yO+yD5sH1ji/9+ZUTlAsAoGV+E72x3Qhzn9tQcK8OkjHeAhmS/L9cjfrFxPxc820bojN/
- umoa94knDNuOFSdAf+xTKFpEBw2JmL8p6gCmm/yTugaQvFNwa7Efw6bV4/8ymewjyEtMdjuewz/xL4Rq
- /LGvRyzsSjRcwagSVBBgRmfbX2gC5T1hPHwuCi+qhC7hBqQ18P88ALVXvAkfOyKFhtniCo3mCgAIFc3a
- E4Zj5sG2lP6okAL549Ho3/D+lyT/0t8gsxQQzK9V+xNtPpGIhPef1cKKcbAMHwHLddqTxXP85UIEIHMa
- QGIQcOtlZYEPV/bJyqx6H+uVjT3diuTXbuyZbIXfsLwShGsCiikgaUCgAjpbohP+Dt8nF6Ou/3fwcbXh
- Fpko1NwAIOx+xUnTDlL16yh6tl0gxz8WALwP77ck+Z/YApntP5Hlx8wvJH9jmZ+JQYnDjqXUubYrYbv/
- MBhOTEXqp1oSLN7xeAOY6HiyGkCiikDRTAEmtvuf7OnGxLF2eA3pDHUCqqFnOgrL8D2+AoIbfERW+E12
- uIRjV93YOMInQB+WnQfDYXNhu6hNEprAenhf6Inaazaqq0xbXKJQcwJA5MMoehrWKWfBdJXoVzQAeAme
- T26EfeUOyKz+bUdDh59g/sY8CCEpFO8/iYKOn6LkWQskniQJVf/mcgCKjsf6O54GEKsseDR/gPYY/+rf
- B3ox4MFa1CZklzSIL7AMH+JRevRy2O4+bOqls7Gn1tnMGh5Lei0IcCs7HYZunCxUnkAT4DoCr8A16zLU
- T0EoxbzF+AOaCwC0jhkFia+D+fw7UDBXj9BGkBEAIK+A+4MxsK+qVzd21Ob3Z5L5Rf94crCKWNEDxn/M
- R+GCVFT/XHIApqoBxA/7hb7Dfd5S4sfFj9Xif52yZP7+Ss95JJ6kJ/4t/cXOvw1Qnz8/73Q39ozMERCa
- QDlCfoGyf8Cw35Ow9W2TwDHIdQTuhWPQXXCuRQtbQtycABBcXrs/dHutQdGKCkidwr+kAgBBqmcWnOvm
- wPmWK+Tpj2R+4fDLhArGk4NDRkrM+EZYrh4FywggNYbPVEmwRAMZ71i6GkD8mL/6badBxtUz6vDOP7xZ
- mUkSVw2djrfll/BP+pOXc3PhThH2S+T4S2boooGA0AQUMDgY+s4rYLtiT+grYt0id8IFeWtf1J7/BrzC
- KdgiVg82BwCExft5ccYzKLz3JBgvjvblrZB33Qb7c6vh+RThKr9gfrG2P5Ppmaz+s5OonDpb9QqKZu8H
- /fHxmD9TPoBEn2fe+x87ChAPBLz05oEhTjw82Jmxyj6RA9DpA53PPUF+7m+3/AHY3FY1AJb+HH9vrMoh
- bkULAsIxqDh+EUgb7gRd+2WwXX449B3jrR34Db73z0VNvw2QWUC1CKdgUwNAWDiG3hSNhPniiSiYqUP4
- HvA0av7/wPvLzcT836prspnhBfOL3P7Ghvpi9ZEnhBL+o462/RIlqwogVWbC9s+U5I/scLxjiZlf7Uky
- 9fyZeFa/eLobY+6ww5n23kvxyUxPuM8NJvy1Xn71TXiepkPfQVX/hfTPBEUDAWXVIELrBhRzoApS1TwU
- 9j4Dxv31MVYRkrbqXwPX3MGwT3GrC4dy3h/QHAAgVH8bIeoBT8O2pBJSZ+2XSM13L4frw2lwvroTMid6
- 7EBI6rO3VVvVJ5WVfcn2MWj/HwF9t+dQ9GyyzJ/uYqB4x2N1MtHxVDWA+GHAUB+/3duLq++rx1/tsjSv
- 6Wke8aweF842cd3+Tx+Ba6qsagCc8x8v6ScdigQBfvaRIKBoAnSgcjKsZwyA+ZiCGEVFyGqpuwP2oXPg
- Wofwlac5SU0JAGGqPxlbbZahcMYJMF6o/dImyNsnw/HC83B/7lclvWB8fi/W84vc/mzkYov0X374bfrB
- dP5dsN4NxFf5Gyf9G+8CbJz6H98HoP395jI/rp1Wj88OS9f/lpiK/5Qw8Boz9tvK+y3glwlwjCZB8A3U
- nH/tct9MUTQQYHOAQUAsIOJWShphaR+YDp8Caw/SCoqjmQQb4f+uD2r7/Ac+zlfIaX9AUwFAZBJG0XUw
- 956Egvs06/vlj+H9jlT+Vd+rWzUxs4syXsz8wtkXWdAz0wMr0n+VVWO3wnL9cFiuisb86Uv/8C5nzgEo
- ZVwD0P7OYZJx92gHnuntTpCgnT5J9FTPmmHEaWvV+v5V0G0bjrqrf4Kfy7qxbZ0NANDedrCMGEJ1BEoR
- 0gb4teR46PeaDus5R8DAfoGw0eDQ4NtwL+2LunF2de7mbH5AUwJA0Ot/EPRdn0XhEnq4yio/Gh3X43C9
- MQvON3dAFst3BfOLQp7aMF82wyz88BX7n1qb52CbdhgMp2bGBIjG/uGU6IaSUf2TAYJUowA+Scayi12Y
- NtoJbyYr+0TcfLuvSPpfb0Znjx5dlK29dN7BqB9CwoEjAQIAsqlSC01VFBPhaFCwmAjUKIECAmS6lt+O
- gtPIJDjWGFghKsgP2TkTjlFT4VyRy8uHmwIAtAk/BTSiZQtQOOk8GAfyhxvg//VuOFa+BM/6QC12ZniW
- /kLqC5U/0tOfrYHkh64U/6DW5iMUL2sDXWcgeeZPlvGz7wBMZbPPcA1A+30Oxf77EB+G31uPmkxX9tH2
- i57u5deacMTXBnTW1Pe/H85bH4BzJVQnMM+HbNvUAgS0S4lFmFAAgQICNKltF8PUbRqs57eJWE1YA/9v
- l6Ku94fwfo8crS7cVAAgVKrCvjCe8SAKF9Io6FbD/co9cL78O/xis456qMwvHH1C5c+Gsy9WX4MOwDJI
- e76H4tUWSAXJqP7JMH6mkoCSX/0npawBRJ6HK/sMeKQOv3bMLt8duFaPS6ealF19uhDvkfQnFJawAq5H
- RsB+P1QAYKGQPQdE+FCJuasNEwq/gAACBgXrAdBXz4a11z9gOEA74t/Bu/Z01FxTp2qzOWcKZBsAwhx/
- nSBVvYXitTQKpkmwP7IKnu8D8RweGJbyzPTa2v3a6r1NoT5xf4MJQKfAcPR8FD6qrkpUKbnXxIyfSh5A
- ooeU2AGYDAhEDwO69DKunVmP90/Iwgo/DVmIPQb1N2PfLXqF+dn+5409bdTWwP1if9TfjFBhV09WOxM+
- VJEJQ8IkENpASeC9lZCh4GZYThiFgnNNkMzqqMr+x+G8+SY4Fss5uNtQNgFAnFuxpWgEC5agcDz9UTkG
- 9sV/QGamZhWLEZEZnaV/HRqq/DKabsD4QSvr/6m16Q3TedNQMJluRUl1SewIlKMca/g+2t+NHeRof8cD
- gmQ0AN4F+f7hTjw+MEsr/DSDcfKDBpz5jBG8rx+r/ryxJ2lgpH9L+Bm+/5yBmiFb1fUfbBpmuL54UkMs
- 9oYQZcZFqFCAAL9ncNCfDkOHmbD23Q/6fdhBSONYcx5qz/gAXg5l5pQpkG0AECqU6TQY2u0D6ZAF8HBC
- hzlwnElIf3vgVevlb2p1SawAZG9vm4EwDRiPgusFe8SW+skxfibXACSb/JM8CIRrALzC7+UzPBh7px2+
- bKzw01AVb+w50oy96lXHn9jY0wpJeSA74f/leNQM+C2UEObMbo+iUqRfQBslEFoAzx0GB105JP1EFHS/
- AuYL6EtFv8H37pGoudSpCrmcyRJsMgBASH0yBY5JgUHgweAHKqS+1k5q6gEKrgCk1uZ+WG86H6ZL02H+
- VJOAEn0mBjSZ44kdf9FSfkNOQO7H+r29GDanHtsqsvsIdPTEe4014ph/8caeKgCw4684IP25R27IO47G
- rj4/wc/Cg/NCHEkMVzYo0iQQICC0gaLA3+bA99xnwtB+GqxXkzZw+HI4x46A4zFkZrl6xm4o24MlAMAU
- GDRDYAD5xlnKuxGy9bVbdjfHwHD/RASgajlsdx4Fw+nxmD9Ti4HSHeBYfycLApEmABMn+1x3Xz2+6ZZ9
- X9u+r+lw8d0mdPao23rvqTj+dCQtVOkfgCTfsai55BsyBaACQKazAVMhrUkgtAFhEtgCjQUdz3MeVHcV
- JPlWWM69HOaeQ1E34DV4GchywiHYFAAgqvwaAu/F0hG+eR9CjK+1i5prUPhhsjrHFWKqXkTRg/tAf6i2
- QyHIluNoBSHKtAmQvPc/MQiEJ/6oAGA3y7jrFjvWnueBnI1FPhqybgUuG2VCt1/0CvOz468tNXb8Gahp
- t2cehNpBK+DhXAAGAFajmzu9VmsSCG1AhAuFFqBDSMt1nA3DnoNg3n8o6hfXhtKExeA3201k89zaQdI+
- T8FHws5PReWPN6/jUSwhLGvOESwBRq36LRQvbg9dx3ATIL7Kn82lwFIKf6cKAtwLH71d0teFOddmMdlH
- ED3x4xYa0GORER1lXdDxV07NpJH+oneTYb/lXjhXo2lDgYlIO8dFqNuCkLkrTF2h6TrbQfLVQa6rzZGK
- wk0BANqmJb7pZBlfew4d/aM7AvqyUuj2KoXU5RToK23Qlag7B6lpmT7ILjqpizcJraf/v4OvZgPkWvq7
- xk+vHJKh0a930fsf4K/ZoUYllBLg1MrpTbs3UfwkTciyaMyfaj2AeMcbM8Da11jH478K+S/j3eO9GD/Z
- ntVkH0GVP0i4fLQJ++xUvf7C8VdITSstRA9nwzFtAhyLoAIARwJyAQC0w6l1EAonoQkhjVdou65Ay4lq
- wk0RBox1jWT4IVKLMPSA8dhhMA/tBP3JNMJFJMHI5kpaWWVTwyOrzcev9AS8uyA77JB3ctsKueZnAotN
- 8PtvREFfskUtaicTq/yZWBGYysDGG+hUQIDdfz929mH0zHr8nuVkHyY9Tf3uU4w44U2Dwvgi468k4PjT
- RXFSzoPz4Zthn4PQVm/pJCakoymmcm5h8gogMCCkBQiNl/stQtytGgASnT8ZqR+0sdpDKpsK68TDYbhS
- l8QegakSd4Z1shp6t50UE05GIC1DsUXTYf5kTIFkByLWQDZO8odmZa1Vxqh76/GfIzK8h18M6vKeDpfd
- ZkJHn+r460AXZcefqjOHgpFatW8xnE9cD/s0hEq/ix2AY91amOZJ3Kg7GrqCdtDbTMpW4VJB+CIe2Ufi
- uX4jfDvfJwHgaaihJiuwmMS8FU07qsL31RRp7QmpqRYDpdOv4IKMDtC15Yw8khanZ6vP/ATYtcwAsIOe
- C4PBYfTs9IjP3MmYAI0FgWwxPxNv4zXrOiee7OduktlgIuP3shEmHPyjXpH+HPrjjL8iasZgZEJqwMHL
- 4HxhOOyTaFLsoL/r9qRjp8PcoRDSHjRJ2tBzars/dFzCq5Q0iRITdKV0rEQXaHo6ZiRBogucUopyt7yK
- j01GGoka4tA/auD/cj5czz8B5zs7Gi7rTVZz1WmOid8JcGnOiFdYp3KJwpwqJPmr58H2cBfozsrmRflJ
- cHB5F73bQc/DTe1Q6oJ4eqmsBWhMLkCyAxTtvfZvCYmZn5N9XjjXgykTHery3mzPBrrxI5fqce48kxLu
- 02b8mcO8/g0B4GW4330N7g/6w3J8V+i7WiG104WSybLZZdIG/V/PgmPcg3C9401+m7l4fth4U6VJKdcA
- IIz5Sc8vuRfWSSfBODjbfeUnaqfnsEsxAWTlb5ImwYSFVLSAZBk/laeebOaf9n08EGBav7cPw+bVoa4I
- IgqYVSr6ExgwyIy9a9SQ355Bx59Q/WMDwFYSzH/BbyBTQVcSAIymnLwElo4VcE+5DfXzd6jp6slmqmbT
- 79BoyiUA0CYOmUl9s10P88AhsEyR1DhrVomfZH0YAMgBAJCSZv5sO/8iByve+3ggwLStxI/rHqzHD/v7
- Qx3L5mygy3SfbMQJrxsCqr/q+CsNqP7aGHE0ANhGJ/iDWkXAWWhpYgBQh0j2PA/X7Otgn+ZULcZMFqJt
- Fso1AAhuEXYC9EfNgW2ZSY3JZ520ALAtAACHUHe06bHiNVVfQLz3qQ5QrL+TBQEml0HG5NsdeK27J9wy
- zeJsaP+phH6jzOjoV5m/A41tJV2wICLmHw0AmLYHAKA8ABrNAQBMXOhjIZyTJ8Axz5WDq/tSpVwBAKH6
- K8UX9oC0x3zYFnSG/li5icaVAaAuCQ0gGdU/05mA6ar/4jXcBS3jqcvcmDPKGb7IJ4sAoCdxefEIEw79
- TlX9O9K4tg04/gwNpH84CIh7YAD4XQMABc0EAEweyDtuRf3AxXC/jfBaFS2OcgEAxDNX1luzx3Y2Ciaf
- BtOgeJuDMpHEdrwFz/c/wb/xb/hqN9Pf7kCCiI1MCZokBpIuEk00UyE1Uh0LiqGzWuk6JEHMxZAs1Iz8
- mYU0D/qhiSDdSEDAuxJLAgCYUmX+5EEgNRMyEeNr30eq/3ylD47z4PYpdtRG7nWTRQDo9rwePe9TM/7Y
- 669m/Kl2fGTGn9YRqL2HbQEA4AIhpUrIsPkAgGkT/N/2Q22/T+HjzUpyuvBnPGpuAAiz+6kVkt1/+dWw
- zGS7Px4AkFBxjYd91dvw/OCLvTGIFKfp6KJ6uqiB67kR+phoMlrpg0JqtmNh6DgBBUeQhNJFY/70GV9u
- 8FmyA6V9XPGkvvbGtfRrBx9uus+O3zpHEVZZAoDCTUDfq83ouink+KtS8v2hGFiRGX+hv8PNgFwDAB6w
- n+B79TzUDN6ork/IicU9qVJzA4CIkyp2/6lk98+C7RmjuiIPsQCA47Wz4VyzGK4P5fDKQckAgC7Gq9gN
- SFnaeTz0ez+IwnMIHPSpMn8sxk8lByDWg9FCQLJmAFNNoYwJd9vx8XExtvHKBgDQOU++14BTVhkVxmcA
- aK/J+NNmyGgfjri7iCiA/Af8UrIA4IPsZyFhh+zmVkO2OzUXaXceJ31Gk8VP772c8MPnYW2RtcYO0Nn2
- gr6CzIzCRBDD1X5WwT1jKOpn+kOl6luUP6A5AUBr91u7QNdpCWwrSDXcJ/SF6ADwEjwfToCdq62KUuFi
- 8H0xrqNl9EjmF+/ZBGEAUEo9HQV914dQeBlNVCUCkQzzJ8P4mUoBlhr8G/vVTRD20AgnVvR1x06azgIA
- VH8l4dIbzehSr+b6c6sMZPwJ6a99QPEcga/A/dNKuH85Dob2ZL75a+B31tOtETO7yRR07oJcv4NMQAIK
- O6nnDnrv5qSeQMo3L/Tw+wPvA42lRXAhGF1Dx3kFJAVMxPzWuSjs0R3G/RKBAG8MOh32/jPUjUBa1Mag
- Yuyb67rBWoFtIbV5DIXzu0B/aviXGgLAL/D92g91s+rVTULFFmGimEi6GoDIPRDVXcoOhX7fR1F4NfsK
- ojF/fOkfn+nTmRnxpX1DINAm+6zr4cHUiQ744gVTMwwAemKF88YYceTHhqD057BffMdfbABYBtdn16L+
- JYQvI5cjWuTK0ljvIx+Ddj6yNmquhFTyAor6HQR9h0QgQLC67VLU9nwH3q8QXsou56k5AEDr9DPTPyXT
- UXBHd5iGRPYnEgBIZasdgvpZ38HHZZbF7sACABKZAEzRtABtfzglhusBlh8AXdcFsI0tiFIROL70j18k
- BAmOJXo4sVX9hiDAPfn6QB9ufsCO2kQr/DIJAHSurq/p0OtuEzp6VcnPYb9ojr9kAWABnO/cCPsaqM9Z
- WzwmGvPHek0EAKK4h2IK7gVdu3UoGtIO+lIkoG3wf3ERai/9Ej7evThnSn4loqYGgDCnn0FJ9rH0Hwwz
- J/uYG345BAA0oqRqOZ54Du5/yqEtwgUAxNt4IRIEYgEA90lsD92GHv7eZJJMtZItmBzzJ2b8bK4AjAQB
- vtamSj9uml2P/+2TRIQqgwBg3Qz0HmXCARv0Ssivo+L44wq/uuDSuFQBYC6ca26DnesBOBGqGxkp3bWv
- saR/LPVcuweAqPpbfBoMBz4JW/9C6OJug8pmxTfwvNQbtddsbkFOwaYEAPEsxUBbL4XxrLGwzjWrNfii
- /EAFAF6yuxDOtY/Atdan7g/HACBKRLMPIFbp8GRyZ7T94ofOfakiO7DD87A9Wgyd4pBMlfmzlQKcKOYv
- /uVtvO6cbMd7pye5ajZTAEBP4ejH9ThzMTv+VOZvH4jdh+f7pwYA98Kx6E44WAPQmnyR6n88tV+78Cba
- PBGVfRgARLXfMvqg7FqYT74L1gvIdNHHH0LZtxruudej/u56tZ857xRsagAIouzB0B8wF4WLKiB1jf0D
- iW1YeS3c790Fx5Mu3ncR4N2CxZpwzsnOVGEF7hsjvwIA1KpfRNG8tqQGpsv86ZoAiSMAsR1+TDzTFw5x
- YcnQFMp5ZwgAyn+UcNlIE7rsVBN+9gw4/gqBYF5lOgAwEfaZs+FkR5vw+0QWj40n7RNJfyBU9pslPc8D
- xRSkVkGoUDkD1l6DYTkx0RBxpuATcN0xDvbHHC0gU7CpACDM6VdNzEXMP/sAru+RgL4ie/9G1M/bDPk3
- hJhfqP6ZrK7K/RMA0IZa9TOwzdyLgCoR8zcmEzDZwYv3XnuMr/HOyR7cdZcDbnPCU4f/sJGzgSv8nnWn
- Ece8xY4/KZDxp4b9jClJ/4YAMAx1tzwN9zsIaX5aDUD7WKIxe+wgTWgItfko7AMQuwLzXKishNR+OZkC
- x8MYU2AJckPeOR32EQ/A9aI/xyMDTQEA2sG1EAKU3oWCsefBNByhsG9U+g3+P4n5H/0v/D8gZPeLopCZ
- jrtyX1hQKT4AatULYJ14KIzHR59J8Zk/EyZAKuq/oF86+3DTXDu2tUlxSBoLAPT7jh/ocPFtJuzpVRN+
- OgRq/BUog5s+APDZT8Cuq0gYfIqQ9icAIJ2hjTXcwhkstABRIFZpXaHbi0FgfxjaJzoZ7ws4BHVXvg4v
- VzIWTsvG9jHj1BQAIKqjMLLahsF08UgUzJJC24JHpa2QtxHzz/8Cvq8RkvzM/Bz718b9MzWgPBYCAPiB
- V09GwYhzYOrZUMSEZ/OlawKk0rFof4d7/GlwSvwYd78d67v5U3+yjQQAIxljvYeb0O1HVe0XGX8i7BfN
- 65osCHgg1x2DXYN+gv8bhMK/2dgeTKupKtvYQ50Pykax1CqPhH6/pbBduSf05YlOtokA6xLU9v2KBBly
- NDKQbQAIc/p1o8FbjMLnCyBVx/tRPWQ7q/3/gu8zqA+cGzO/cPplI/daTQjTAMBAmK+8Fpb+QHLM35wO
- QKWyzxgnXu7lSe+pNgYA6LeHPK3H2XOMitQPd/zpGiReRIvJxgOAncRAJ6DmGtIIf0TjagImO+TCISg2
- AxVzQmlnwHDwItiuKIXOmmBY5M/hWXU+akfUh/Y0zCkQyCYAaNHUWkyq/7MoemoP6I6N9yMaIfdE2Bet
- g+dfCEl+rcdf2P1MmQYARn1lY1Bq1efDeN4EFIxCYD1ANLW/qUyAeMzPyT4rL3Nj/ihX+tt4NQIAOOzX
- /3IzOtlV5t8jWOhDxPylpACg4TH1dz/A+3V31I7aDvkPqPOB50K2qgJrQYAFl9gWXAsCFVfAdOz9KLyY
- hFlcTVZWndh3Dkb9bG8OOgWzBQBh9hQ91KKpKBhDdv/IeD+ikfFOg33Zs/C8i4aSnz3+2dxSifvLD1MA
- QNWJMBw/A9YpkrIeoKHkT1b6x+potOOpJf+okPTZ4T7cMdOO+qJG3H26AEDy7LQpBhz/qiGo+outvUKO
- v3AAEP2PBISGZoL6uzVw//NK1N2GkEBgH1A2y4JrQ8PKIjWEgwCbA+XXwnzSnbCebw6ki8cZWs/NqOu7
- EO7XkGNOwWwBgNbuL7wQxjMnw/qYXlWpohJJfs/DcD6/EK43EC75RbhPLPjJ5sCJnYGUrcGqIXVZgaLH
- 6KApHsNnKwqQyPbn8/2xhw+3PWDHnx0bOSRpAkC7TyVccgM7/vRB6c8LdrRbe2kBAAhxV7IA8AScT14H
- +2yo86KpdgYKc14jBAJs+wtNoPxmWE67DQVnGxPkCLghb+qF2jM/gvcX5NDy4WwAgDatktMpO5G99BRN
- in1jDw7c8+BcQ8z/ul99yELyi5hvrNV+maawvQGpVb+EokfKIFWlyvyNAYFkbH+mugIZ0yc58NGpGTCH
- 0wAALvTR6zoTDvpWdfyFMv60FX4bhvQiAQCIDgrid1NhnzkNzmcQmhdNtTeg6JIWBER4UDEF6AvlE2Hp
- fgMKTo+XKMTD+1943zgTtQNrIOdMpmCmAUCr+heYlDx/66SzYLwq1rWIs92PEvMvhetNmsZkTYZJfpHm
- 21SDpd0dmAGgaiEKJ/HOrkB85s92DkDk4Hl1spLo88xV7szs4ZcGAHRboUePB43o4A85/hpW+G0cAFDH
- /D1RO/pdeN+DCgCcA9KUuwNHRgZEeFBJEuJGH1ZMIi1gJCyn6CHFfBqcKbgW7vuuRv10Z44sH84GAATR
- 8mwYT7sH1nmmwPr+SKIRcJLkf/EJuN7yhiR/NOZvqk0UGcEZ5YPJQDfAPOwSmC9oahMgltRXzyPjvVO8
- mDElxWSfeJQiANj+AnqPMGGfjaGwXxs6gVUT9ssEADgg7zwdNdd9C9+XCCWBOTN018lSWCIbwkFA0QTo
- MVQSCPS4BpYT42kCBNc1t6J+0BK4X0fIH9Bs5cQyCQBhqj9NhvaPo/CxvWGIWtePy3k9COeqZ+F+zxdK
- 8hEr/Njmj1zj3xQoyf1nP0UwFNgTxnPGKJGA+OllmYgCxHMAau3+DZ18GDvXju1VGRySVACApuuJ9xrw
- j9UNHX+mqAk/6QPAr/D93B011/8NeQPCk4CamiLXC0RqApV0sPI2FJw1gkCAq0zFOtHf8H1OWk2fH0P5
- Ac3mD8gUAGgdJgX0puRWWK7pD/NYrQdd0C5CwSmwP/MmvJ/61YcaTe0XA4MmHBwRChQAUHUAdN0eg212
- ssyfDQeglvnrye4f83A9fjwww0IjBQBgx98FY03oXK9K/z0gtvaKtdQ3fQB4gwTEJagbL4fMQ04Ey0YS
- UDKkzWsR5gBHjYLmAFexHg3Lybeg4AxLjOgAVxJaB8/DQ1E32a4Ku2YzBTIJAMLrX3QE9Ac/gsKlNuja
- BW44+MU/4N84AfanPoPvO6hMLzL8hLdfrPRqjr3TtaFAxRFIN9XuVRQtMCW9LDh7DkCfJGPWeCfeOD/N
- ZJ94lCQAGGjGnj3GiEM/NQTTfcXWXokq/KYDAIvhXDIa9nlQTcTm3hpcGx6MpQlU0Idlw2A+fjKs58TK
- E/CQELyRTIFlcHPUS7ucvclvKFODomT7kf5cOQeF04+F4aJQTX31vj6Fd/14Yn5S51j12R5oIs6fjuSP
- 5SNLFIKPdz5RF0ABADrQ9lFYJxwAw2HRtAAgNT9A6JisuWjDxxDthtb2dmP+Tc70k33iUZIAsN8aHc6e
- YVIcf3tqHH8WxMv1Tw8AqEu+K1E34SV43kQoBMhCojlLcMcCARYaIm24nO6jtDdMh82C9cKSGBmDG8kU
- 6EGmwIZmNAUyBQDB3Ol+MPa6DdY5ksYR4leKJ3revQv2NT71IXIT9r5I8onG/KH5wfPLqGzWZ1Su14Fs
- 9YNRRVcto0dRBC4b4IYdW2mifEL/OkmT8CnnE36EZKMIojRY0BF4LcyD+8DcK31HYOrPVAsK/PvPj/Dh
- 7pl22G0ZeGLRKAkA4Iy/i4ab0PUvvSL5OwQcf4VRHX+NB4CdkLeci9rR38L3LUIRAJ4nzV2DPxYIiGSh
- isBrGWnDXRbBdlln6NpEAj0/1xfgvn8Y6qd6mskUaCwAiGemJPxUQeq4EranK6APLpnkvP55cKxdCvf7
- flXNF8zP70VRz1CGXyHNJaMiUCzYi1Srg9GFju1LQ7oXjkRHGuI9SdfoqOSbxOq/h8D1c7yDt7GajMh/
- 0xXExBHhxHgTiB+qcAQqAHA6DCfdDus4aJ5Oco7A0HNMbwWg+tef7fyYMLcemzpkcV4kAACJIPSYhww4
- +WmDkuzD0l8s9TUh0Uq/+AAQPRFIIo3R8+XZqL3REyoCE2sVYHNQNBAQeQLCL8BzqJRrXs5GYc8eMHbT
- RYQJvZB3DUPdJSQgP0YzmAKNAYCwmD87/ibBcsMl1BC4g7/h23gPHM+8B+93ssrsqsQvoRu1EBNyhYgu
- hJwH05yyEVMbqR1OrQ39bSTtUq8woD7tHjKj/w8f4iE8SFoBWSDKBEqUV8APKGxNQKmSEWibbQzUBxT3
- F5v5k68LmOhB1BMUzZrowL+SreyTLiUAgMrvJPS+jpDXoQs4/tSlvoyUiQt9JAYAcWktACyF88lRsD8K
- 1QEo1oPkUsHNSBDQZgwKk4Abb01efDsKThsGy0lWSGHB2//B+z4B3ZUbSeNBE68abCwA6AM3bTsUum5L
- UPQ8qYIlrPJ/Ce+3U+FY8X2JfzsNhQnt6HvH0L+VpDnuS/Ongo5aaA4ZFCbTxbxCJobBTYy/FouxkObU
- TsKlUHZhNJtL+DOCKcH0xx5zUThxH+gPABJpAeFrBoD0HBFKtw0ylg11Y1V/N+TGwGAyFAcAdDRS3ccZ
- cfi/QtK/KuD4S67QR3IAoG3EAZ6BqLvzRXhEajgDAKvJWUbClEl7OzxvxNqBYFkxqGBQSl8o7AXjAffA
- 2msP6IN7XvKqwUfhGDcejsfk0KajTWIKpAsA2sQIKxnNJUthe/hg6M+pM8C1qovr88cPdf648yBi9q40
- X5jtC5TBSO16/9/elQBIUR3tb869YGGXFRZYIGA4PEC5ongiHngAiqABVERBEFBUQAFRicYjXKLgrySK
- 8UARNd6IUeNFIgbBIwYkRI6oKKAC7u7szt1/VXe/nTezc+5Oz/bg1Pic2WF6prv61VfHq1eVLgCA+j0B
- /BNvYBEWYDc4H5u1ibw7S/7VyIzA8quQN2YU8kbEDwRG3yoc+TqZm8E7/N49y48HbnbDm5/EwY3nT/S7
- Q+93ftuKIfOcaB8R+Gtohd9kAOAH0oaDUTl1h7YFWPj/mUoBTpUE54QlIKoKiRWClvrg1wW9YWt3Lwov
- 7A17V4vakkBNENp3PirP/hCBbYitnAw78VRJbPZRtf+FcJwxvnX+o+tO9NvWDPK6Nh8RQLBITQnXqDF5
- sOllAfdz2ojb6fEVOLDE8Qg5JVOQyAisiwP0ga3/fBTeapFahSUj/ImSgGLIHP7bPYC7FtTipzYZsnZj
- AICDbKWRlzvx691a4K+9Hvhrpgp/slV+UgeAD+Fffy6q5kIz/4X/74F5zP9IkkGAFUhkhWEBAqxYCipg
- aT4PhecOh5OThtR8gU3wrR6EqikIFbo13BVoCADI5k6hpTf6njbQvmzzwEC3vZyZFmtGN/TsjLj8b7EF
- s3EztoOrDbFpKRgufo2vj29e3dbgFrB0Xo6ieWWwtosn/A3V/jL9UBbEHffWYle3DCq7GADQZ7kNAx9z
- qIJfoWf8JRf4azgA8NncipplD8DzLEL+v0gAMisAQOKg2EAkBwdZ8IUVwKCQR9rTfgXyes9CwagSWFuR
- 1eebBdeYP2lpwiIgaOgkSBUAxOftZBy3wFWYjLMxjeyAsrjfZDYAYNpDNsBMzCEQ4G4uwr8UqCviAHzT
- RD5A2xnIn3QWnAOTFf5UQEBcqtehYNHtbnxkdNAvkqIAQPEuCy4a70RHl7VO+7dKOvBXHwCSBYxaKK5h
- qLpuIwJ8b+T1f1NsoU2C5OCgiAuI6kIMAMX63076kNIP9lbkEkwgF7oPuT5bzkDlef9DUAQEDb3mhgCA
- hcS9JXnSS3AExqhLwInIjABAZNuL70+eaH/DsQ/77LActOlpySTUBwl+D+5D0P0VgrZazRVofTLsJ96C
- wuv4zJIV/mRPX3zHqis9WD3Bm6BcqgEUCQAEg6fPsaPP+/a6Nf82eo0/Z0rCnzoAbIH/3yejakYwtPwn
- dgCa0f+PRbKhExkXaK4/a20S6boIEZT5KBo6Cs7xf4FnwQTULEL8hjdpO8nUPl9I938h7kIfTEeyHZpN
- CgBM7bZaMHF6PjocUCe3QmZZ0MZ7UGm4oSiV9PwTgtWEzJUHoXjPhKNLMayOWMLfGADYcIIP8xcYlOmX
- zAlId7PD+1YMucWBCp8m/O30ZT+exalp/9QAgE6EBMH9CI2VCM//N7P/H4siXQJmHwu9sAYK9ff4c376
- kHs4HN0JCK69CtVT3oWf0+UNjQWkCgBWjMCpZDq/pkJBsmRiAGDq9JkVV8zNQ8f9mobLg1bG2k8/XkOj
- kgYJP9mhipqBdDiJQEN3BsZiz+72Qcx7sCZzQb9oJ6HPBgeJ29Crnei+3Spl/FnVwJ89ZeFPDQC8UDzn
- omrKJ1r2n1wBSF6tiTdv5X+Lx8xMbjADQoFzsZFIAAG/dujnw8Lu7glr3jjkdZ+L2rXu0IqAIeecGgBw
- a7c/4F6cgmtTOs7kAMDUeZMVY3+Xh04/CjNXI+Y+A8DPBMIMAHwH+9P9EhZ6MkCQiAXVRQruWVCLLX2b
- ao8LQgBAzz2ftOG05XZ12U8E/lrSSC3w1zAA+BL+zSeiaiakDlAkIR4CHyupUIdV85tZYFij2umc7MfD
- VtAe1ub5sBQ5NKEKc2YIOar2I/jz2/D/REhS44NSRRadWwnXrEbPtMikIbFKkKe/Zvbw+TAI8LQTPRAN
- 3RiXGgC0JiXwGF4hW/C0lI7LAgBgOvxjKy67gywBHQT4LrHacelWAANAFY1j1E631pSsgFgs4WSfR6/3
- 4K0Lfemp7NNQ0gGAA3/DrnWg8w9aR1+x1beIRrw1/2hZfakDgMJdgNd8iMDGX5EWJKujiO5Ds46wFHeH
- rYhAoIWDBheZpc8X0nMzS0RWXYJLrCVJ2kdg/tWb8L62FJ5XdiD4rT+8SKeRM05ml1gqFEOwR4CAVxom
- AYBylOAJrEExBqR0XJYAAFOPdVaMuScPFQc0k5fviptOolp3A3hw0csjVTfAknBzUKzLF0HEt4f4sOJG
- D3zpquzTUOIVXJpmJ91jR/819rplP97qq1X4tcYV4FR3AkYb7HK9Q3O/VO0naFH7CkRWGEonkbvx9Svw
- PDgP7hV7oHCeQSaq9Ua6BMKasUn/FoSme3gYWhQnNZ46SBEsxAocj9+mdFwWAQBTz7dtGLXAiXZVWlsr
- tRAHoMcCguod6Uf3LE8HgIa4APz3tiMCWEim/4FU23gZQXQKbTdYcN5sJzrUhkz/UIXf+IKcDgDYSfN8
- F/GXE41K9QpD7CCL3zbmspXAJ/CvGgPXTT9C4eVgsfaeKZdAAIEMAGIa8XkEYBoAYH9lFD2uIxCwpLBJ
- J8sAgH/zmDdtGD3fida1VtU+41lRpcYCNCvgcGgmcrTNQYkEn8ePZUEsml+L7UeZY2WLA3+DZzpw5Oe2
- Ou0vMv60Qh/pB4Dwvf8KPiAuM6/L9FTjZghfcjSKGAT+Dv/T4+G68ScovOSYSRAA6m+MDJ1aCAjE34ac
- QLLkQAuaGwuwlBzhIUkflW0AAG2h/9g1NlwyPw8t/RraufUYAAMA37E+JBr2CCsgkfbn124n+bqz3Pjg
- XL+xMztZopPq9oIVZy52qIG/9nWBP7nCr7EAsIfm+L9I0bHpz6OF3lTUoTPIaDYRCPjfhG/pRLjurA5t
- OsrU3nxLxHOUOxT2nPYfTpZYDorRCUdhER5EB/RM6qgsBAARjjnuaZv/5AccB0thcXIHGDqdvGooVrYE
- jlZ9VVtM4Y8UfBXKCVleGePFM5O9CDbFen8UKtgHnD/RiS57Qmv+ZXrGnz0KADAl3+cvMQAwfUSOFbtW
- h+navxjh5cUzQX4orkWouWEhvKugBd+aAgRikSnyAPjzWtHMX+FY3EuPduie8KhsBQCmIBT7s9hquR8b
- rIrqi9kcxAOSXWcv2NpMQ8FxdrXwaXwXQAT9Ng3w47673fAWNNF1RRKBXP+ldpzwjBb446h/Gz3fX2z1
- TcYCSLQEGM9K+IFO4lOStRIp+FeE8OYimSKy8vZeDddFr8LHjWkztiuvqaghvGW9xcqhlGbLEVhMDkEn
- UobxvimbAYCJ9+auxCYsx3p6zVpBDdzQR5x3o+C8HrC1FysC8ZKBvm8bxLyHa/BzmUnmE51G6VYLhpP2
- bx+W8RcefDMSAPgkPiKWsqTJwT9eFLFnyPyPZAq5IxvPRNXF30HZg/S3oTcVNYS3fAyDgNZAoy264Q+4
- k/7fN6EH05BfMgMAMPlJ9FfgfTxO8zVYV5ba0R+2rjehYLhVr4EYCwRq8hTc8VANdqa7nHdjLpGuYvAN
- Dhy10aZrfy3w1zxC+xoJALsR8H2GgJVMfxtr/5K6pT8Eg6GhkHnOCT2Kl16Sg+6pglJzAMEafu2C4quk
- UUv/Rpek8Gufzn7SVHYCFGc5rIVksbXtCltre5zuPYI+hO+R0aieUx2+C/GQA4GGgisfJ/qnl9LjV5iP
- 35MdMCDqis2hAABMHpoID+F1PId/6gVH2QrIJytgXDfYO0dbDmSz30fQ8NgNHvxthAHlvBtBnd624txb
- HKrWb6/X+Its7SWX6GoMAEQT/gCUwHVwvbMNQTcJZ6sCWAJcQ9IDxUMWgbuaXru01z4SdvcBKO7K8Nz4
- WJ6XTCLpxk5WTf4s5J8whUYiEKAv8z8N963TUfuQGdt6p4saMx1lEChBK3TGdfQ4HeeS7Rge3jpUAIDJ
- TTCwEM9gLTbSNGTT0Hk0bN1uQ8HVFn1SCcHX1m8UvHWBD4/f6FV3GZmFeNnv/HFOHL5bE/52er4/m3XR
- C300ZBUg/jGkZXdcguqXXCFfW2TAiWU4IeiywEd7L1YcVpya2I2XTyBQtAyFQ4bDeayoxhOL6N7V3oya
- Kx6Gdw1M1tY7XdRYfSTcAQ0E8mguTcYEjMRoNU9G0KEEAExVqMZirMSb+FRfoS0kzTK2Lxx6E1GlbpZs
- PSqAexfVoqqkia4jBh37kA0nPW6v0/5t9GW/2Pn+6QUA1vITUf3UG/BvhSb48hBl3GVhjxT8aKAAhM8Y
- /qnIgp1F5GqU/QXNLj8KtopEKUbkVuyejOqRr8LPtQmaqmGNYZQOg1SAgFZBx4G2uAyjMBZXEcuL1E8c
- agDAVEmP27EC/wBPYFtHWDv+HoXTaJYVilm5r3UQixe68XV38/j9TC22WzBssgMdK236mr9FL/SRWmuv
- xgDAq/B+NAWup72ajy26QbHwR9P+qQh/JACI6lVyea4Wx8LW5Tk0G18Ka/N4vFKDtwh8OgJVo7ZB+QaH
- WFAwXR6pQFpmcjHBQTmG4jxcTS5BC5QekgDAtB8HcCuBwCbs4hWB0XCeMwzOM/mUqwkGHprnxienBEzl
- 93Pg75Tb7Dj2XXtYxl/8Cr+WJIQ9+eP2I3jwYlQv/kIrgMkAwIk3ojdEsgIf+RqIPlsEAKiNayCV674A
- jn7LUTQmXiNP7UsV5VMEXrkU1VP2aunCmWpXbzilc2oKEGDTn1dyDsNvcBJuwRy1FHhDv9HMAMB0AAcx
- HY/gS3zfApaWc1FwZVuLpf0LV3rx0pU+48t5p0gV71kx+DYHKryhjL8SfdktVr5/ojTgVACAG2M+APfz
- d9FA/Yawso8tzKZIXz+a7w9E983Fz4qW9aKFl9rDj/6hbCbyz7wJBeckzsJRAu/B99CVcN1WGV5DMqtB
- IN26STBcbRIKZvTh6IW7MQ8d0aNB32Z2AGDaix8xBQ9jN6p6w9ZjwIn20Svu8Dg8RU107jHISaI2eJoD
- 3f4TWvYr0wN/DsQ22RsLALLFsBn+/w5H1d2VvAIYKvcl92lgihfcS5RwGUlyIQ7RtENt5w2tpXfrpSgc
- eSHy+ifiXwCK+zHU3nozPH/0y92sshgEjDJOhdml1dZvQzBwJ27D0WQTpPKb2QIAfI7fYA+ux1OW5iiy
- LcFYf2kKFZMyQXSORz1hwynL7WinhJb9QhV+lThr9umJAXDgbzQJ/3oEOMuOC36Ict/sAoiOONG42xgS
- Py9Kcola/QIEDiMelD+OoktPgr17oqCgH0rVLagd/zA8axECgXScZ5OQkd6pWH7R6usX0ZybgxsxCOcg
- 2Z2E2QIAgr7GPtSSadidrtVkVLzDgvOucaDTfq3IR9u6Cr/azYgEgMYHAcOP4Vp/98H9zAK4X0Co1j+X
- ++IYgGz+G0HxXAHu+1BGPOmwCs3GHQl7+0S33g1l9wRUj1wbvjKQA4AoJJjO2rCl6nJOxeW4COMIGhKX
- wMg2ADApceDvhLvt6LvWrgp++yitvRoDAMlo/w/g3XQJXPcFNOEXrb5Y+8uNWYwuxCGUEgerRUCwTAxy
- 37r+GUWXdZDadsWib+H/+AK4LtmJ4LfI4pWBTEzz8GVCm7pCMASTcQ15YyUJj8wBQOOI+NduvQWD5zhR
- 4dESfsqlfH9rXeQ/PgCkXgsw9F27Efh+BKrmfwOFW7KJSr+y6Z8p4RGBarEsyCDAc1CAQKvTYe+5DEUX
- t4G1ZaIv+xf8z/0W1dftg8KWTFauDGRqmsvLhJxvUo5+OA2zcC2po4q4R+UAoFHkqATOnO5Aj3/bVOFv
- W6/QhxDYWADQuEKgZC7XTkL1A3+DfwNCpj8H/kSp70xvuZVBgC1TDgoyCAh3oPRs2I9ZiqKLWiXOEVD+
- Avcdk1G7JJil6cKZnObCEuCYAKNtxZGdrWNrpmPcrn5BS8wjcgDQcCLe9VhtxcD7HWirhLS/CPyFJ/3E
- CgImtwIQLWjoh+JbiNpnl8OzNqA1+RBlvuXkn0wLjAwCopOvAAFhCZQOg6MPgcBIcpPibtwOQqmZg5rR
- j8D7DrIwXTjTAFBnBXSCpdcU5P9fTUt0eulaL/51dqB+VdwcADSKinYDQyY60eknTfhFcw9R6CNceGNb
- AA0BAF7vXwHPG/eg9nlvSPjZ9OeuzLyO3pTBs8iVAQYB0cpbrA6UjoSj/xIUXViYoPJwJYI7hqHqnC+0
- eEBWBQUz6QLwUFcFiJutZiL/zl6wX1QNxfJDXhBrx/qw7nJ/+IaZHAA0nMgmHXCXHX3X2FSzvx1hLwf+
- ihGe8ZeMC5B84K+Obcor8H44GzUrq4HvEAr6sekvsv6aWlPKKwMyCHBL+Fb6KB0BRz+yBEbkw+KM9UW8
- 8+NzBJ4dgaqpB7WchqyJB2QqCCi0v5qOOQSOoZOQdz+X1+KZwHX399sUrDvbh1dn+uDPl47MAUCD6LDP
- LBg61YnygEVf87epGX/1C32kNwZApLwB3wYS/qcOQGGNyD4/a36R8GN4v7sUSF4ZiAoCFh0E7idLIB4I
- cGffZXDPuAPux012jQkZkInfqMvEItuq4gEUrSZN1FXkdbLN5NKLbb7Y27v73fn+UjQnVyEHAA07dZp6
- 50xwoNtWDvxZVO1fFjXwlygGkHwGoO69KW/B98l0uB6v5D009YVfLPmZSTvKICB2DIa5AzoI9E0EAlVQ
- dl+MqmEbEPgPsqScmNHTXDb9C+hFixnImzkIjmvkD/FsIMgMvkZm4xPw/j3YBS1xNy5AJ1JchypnDKSu
- z1kxaLFDDfjFD/wlcgGSBwBO9CHh33QDap5whbr6Rgq/Wf3jSBAQuwblmEDJUDiOvR+FF5LyKoxe90bB
- FgRevQDVV+3nwkSh7EazXW/YhRv9/cL0b3YMbL3vQgFNT4RlydfQf0/C89qr8K3Xl1MCaEMgcAsuRV/0
- 1JXWocUZg6iARG/YFU502B/a7NNKLbGt9XGP7ccnBwDRrAcO+P0Vvo0zyed3hZb6hM/PEX+xecbMabNi
- rgp3IBIEeJScBfvRS1A4vA1sLaNNEXIFvEvhvukuuB/LhqVBI6e5mC/qeiv9r3QJCh7pDNsp8of2Qtn7
- INzPf4zAF9CSQxg5PerxzckXm4GxOAOD61UZymbOGEWkW3+z0I5+L9nqov6tYY251TdZAIgXA/DQhH8U
- nreWwP26X9P4IsVXFn5Z85tSEBC645EFRGQQ4NhASX/Yfn0fgUB32MqjVRWqQvDrMai++EME/g2TuwJG
- TXN5mYUZWTwcjguvQt4S1LmLULYh8NVSeFbvQHAXtAnDE0dkiLHplEdHl+EqXIIRGE1/ZW6DTRYCQJuP
- LRh8owPt3da6pB8utZ0PS9zGnpqQRwJAYvN/D4I/LUTtyy/D97GiCT9rfSH8bPaz8Jsh4p8sJQKBUn20
- 7AhLu8UoGjoQ9h7WKCDwEXyrR6H6+iqNF2aLe9S7YCO+VwT+mpXD0pHMptXkh3aBxgluxbT+T/C8TL4S
- LxGx0IuJwxaAS2caf0czgpHWOBvnYRqmkjpLmKdtas4YRHYSt0EzHTjiM5ta4SdU4y924C++BRAbAGge
- Bz+B/6t5qH1xK4Lbod07Ifxif7/Q/KY2gaNQLBAQewdUK4AHoULpbBScNg55J3DTGPlLyBVwE38mPQjP
- SwitCpirNBSMmeZy4I81dvNZyJtzKhyT+H1yiqqeI8F/Cb51bm2isMAfREj4eeII34lJ1BYowwCciFn0
- aIOOWckZA6nr81acusSBdgGtxJcI/OXF6Opb/734ACA+T+atayW86/4Mz/sHyH1DyHLjwfdPDvhlm/AL
- igQBnoMibVisEKiWAH2g+Ug4e92JgiGlsBbLX0IW0paLUXXRZs3CNWUA1CgAqEuu6ANbv1tR8CT9UfI9
- gjsegOfRzxDYpWioyJPlZ30If5Hfl1siy7UFytAFR2Ee5qIbemUdZwyiwu+Bwdc60eVbYfrLNf6SXceX
- AaD+MYqu9e+D+6+bENgWCIE2DxG7YctNLPVlq/ALkkFAzGdVoUEDAVFajJ+LjoOt470oHNED9g7iC/jC
- X4HnvkmoudMXShAyFU/SPc3l5ZSCAmLUXSh4sAdsgzfAv/Z+uFcdCEWE+bkSIa0h/MXIfuhyMJEjs6XE
- /i4EAtPJIjgjazhjFJFR2WeZDcetsusZf9aIjL/kmnNGAoD8/k4Ev3sU7g/WwPdpTcjMlwffPxZ+GbxN
- NdEbQZEZg3JxUQECDAiF7WEpmY/CIYPh6G/VS8T7oVSPRfXQv8K/CeEJQqYgIwCAGaVG/ofAfs545P/h
- GXhWkMn/d4924QGEtL8YrDXkopCIwqTwAiMFqMBUXIHhuIT+Jf0rBFkCAKVbLDhnmgMV1ZFbfS1xavwl
- tgD4eScC362A54M34P2iJhTVF6AtrDYWfBm8Iwt1Hgokg4AoMMogIKyBEv11IU3OvMnIH3AD8ofn6xuJ
- diHw7vGoHO3T+Gaq3IB0TvOwDRatYCmbiby5L8L3+gYEvtXf54sW2t+FkNYQ/lEixtQlFUHUFhhGj+sw
- jbC5mWk5YxBZSeROvsWOXuu0fH95q28i7R8DABS6Eb5NZOo/Bc/69fBv94aEvCrKEPEaUc/fsD72JiB5
- fovgoOwStNBf59OHLANhq1iMogkdYe3M/FiM2kn3wLMaJksTNgIA1KBJBSyt6UqdP5LvCFFzUhNy1hQ8
- aSJN/mQZIi8vMtMPw4l6cPCwBlYfNpozRhBx6rD3LL7Bcx2WDkGrtQJWa7ne3CPU2isRACjqiowLinsb
- At+8Df+X78P35fdagQtxj1j4qyOG8PXl+3coC78geV+LHBcQdQaL9b/5fYVcMetCFI45G45zSeJ/PAuV
- p24mdwomCggaBgDSsOsME9rfow/RCKIhJqO4CaEVgh44BrNxE7qjZ1quy+wA8DPxbjI+bbYDlSz8nWB1
- 9oK9eRdYW3IhiyJYnMR4LnivVuPmBpvE7ABH8Q9AqeRU1S8Q2Pctgvs+h/+bytAuPdZQtagPAMLUr0XI
- ahMumym0WYZIxlCe66K6kMgXaKb/zfM+SMz3TIXzN9ej4PoN8L98OVyzvaFYSZPzzSgAEEMIPxNPFJ4w
- kR1g0EAmRAYHW5HzezjmkkNwPAbRvzSuIr+ZAYC59TD+g0exGeGBOLXABjHFWkL+J6kiB1kDdu6w6yb5
- /5k0vSvkg/r1Icx3AcwCAGqk52iC/0vR+rFIzD+R71LXekwfTv3fVau3N92SpSia8kd4lq2Edz1M4jIZ
- FQOw6xcv4k0C6cSkS2eUuC7dGLxCwNWHr8Z4DMfFdGsSFx7NBGfSTTtxEBPwJulkecMNC2kQoYkpeM8k
- N9XgwfyXAYCFWgYA2QpwI2SxiWMSdeT9pZDsEoi4QIE0RHCaeeZuC4syGs5Oy+FZX2OSPoNGAIA8+WJN
- wHRPHrn6cAu6HW1I/C/CREyiW9K8Qd9oVgDgdsOz8QY+wBaE19b36J+woT4AaEeGVmGiAYAMAvIQ1lpk
- kPaXLvyC5Hkv4gL5+rOwAoTFJYPsIQkAMkPk747Vvjnd1xIeHDyDXIHrMYOcg7ZNypl00npspyt6nqbU
- Hmh77hkE2D8PIKSNBAgkYwHIICA/i+CebK3lhD42ySAgYgP8LLZhCBAQ7lZkvkuTnXQmv8voC5WDgxyQ
- KUNP9MUczELnFFuTmREAakk4J+Jx/FfV/typlttrsQsQTfuLTVeyCxZEOAjwEBNRds9y2r5hFLlKIGJg
- YjZFgu8hBQBmITk4qPUnLEd3/A4zcQxOzGrOPI1/YBleo+myC1AHLymx+e9HaOLJ5f5kigYCYkJGc81y
- Qt8wki1g+X5EA+IcABh4XTxEQ0hOH+6k9iEYiCFIpsCI2TizFwcwASvI4OeW2txg43/Qim+w+S8mUCw3
- LFZzzUSNNXPUcKq/iTIEAkymsLDMNs3TTXJwsIRetcGVGItL1dZkceu9m4ozHPibj1fxMt6DpvkZANj8
- F9o/J7zmpGRnUQ4ADL7GUGsyDg6eh7MwDTNQHKe2gJk4s4kE/kasRI0q+DuhaX8O/nE02XR7zHOUPWSm
- aW70dYrahFpwsA+Ow624BeUxaguYhTMuEvIbsQqfgFtqs/Dvghb9540lpkgnzVH2klmmeaaulV0CkT7c
- Ch1wJG7HLByBvvV4YQbOsGi/gA24Fy+SqLPWZwDg6L+I/OeEP0eNIjNM80xfr9hWrNUW4BIj09Xg4GBY
- pPRhM3BmDw5gKh4jb38rQtqfq/CIdf8c5ahRZIZp3hQkQEALDhaRLXA5LsMojKkLDjY1ZwLk2z+It/AU
- 3gTqlv14WzUH/kRTzRzlqFHU1NO8KUls5GAQaAk7ynE+hmASpqjlyJuSMyzan5LGn4EnUVsX+PsaWtqv
- yPnPUY4aTb9kABDXLzoWF6vVtI7DSZiFmTGDg5mgn8nEvxZPYJu6209E/Tnwx0U4cst+OUob/dIBgEnE
- BdTGpeAVgk44Er/DbPRA74xziE3/xViDF/ABNMHfBW3Nn4t0cOAvp/1zlDbKAYBG9QuPtiQLYB7m4HgM
- hCVDfOKEn4fI71+J9+gVR/sZAESHXTb9c4G/HKWVcgAQTnJwsJTgoByTcSVG4lJ619nI745PLtLuj+Ad
- rMI6aOY++/xC+HOmf44MoRwA1CeRPhzKHDwdg8gnvwZtUJF2a4C1/nbswSKsxefqch8v87Hgi/baLPyi
- ik+OcpRWygFAdAoPDnJcoC1+jXG4BKeSS9BCrb3ZON5xL+n9qMZL2IjnsB4H1f39vLmHBZ9BgFttcZmv
- nN+fI8MoBwCxSQ4OanEBi5o21AODcRpOxgC0J1hwqEV4kycfmfLfkXC/j814HZ9hl+rrc4CPs/tEa20u
- 8cXJPjnNnyNDKQcA8UnOHBS94dTGkGQDlBMYdCUgOAadcTg6kqvQHEUEF/nkQGiNIgP08JAQu1BLHv0B
- bMP/8CEZ/DsJAn5SBZ7Ne9EYVTTX5PdEb8Sc8OfIUMoBQHIkkobk/nDFEGWgrTS4JnEB/e0kELDpteCC
- 9PDRw02PH0mw/XUFNkW5bbnTjmi0YZqa8Tk69CkHAMmTXPVY1IIvlAb/LQpBiqrIogCEXBJdAIA8RDdd
- udR2jnJkOOUAIHWSq8CK/geiCYpcCFLuSyAXhJSr7/5Sm2vkyCSUA4DGUWT9N1EDzobwUlCiBpwQ9lyl
- 3RyZgv4fwxUHs6QSBV4AAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAGgAA
- AB4AAAAeAAAAFwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABQAAABMAAAApAAAAQAAMAFgAEgBoABMAbAAOAGYAAQBYAAAASAAAADMAAAAcAAAACQAA
- AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAmACMAYABqAKwAowDfAL4A9QDG
- AP0AxgD+AL8A+ACkAOUAbAC/ACIAhgAAAFgAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAQABAAPQCCALgAwwD6AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwwD8AHcAygAL
- AHYAAABBAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFQApAFgAsADlAMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AKkA6wAXAIMAAABAAAAAEQAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
- ABwAQgB0AL0A8wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AKYA6AAJAHIAAAAxAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAkAGAAkwDDAPoAyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AG8AxQAAAFgAAAAdAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAcALgB/
- ALIAxgD+AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AwQD7ACQAjQAAAD8AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAADwASAD0AmADMAMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AkwDcAAIAZgAA
- ACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABQAJgBUAK0A4gDH
- AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAACAAAAAQAAAAIAAAADAAAAAwAA
- AAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAAAgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAUAAAAZADoAbAC7APAAxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCv
- AO8ACQB2AAAAOAAAABcAAAAWAAAAGwAAAB4AAAAeAAAAHAAAABgAAAATAAAADQAAAAcAAAADAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAMAAAADQAAAAgAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABgAAAAYAAAADAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIABXAIgAwgD5AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wBlAMYAAAByAAAATAAAAEEAAABFAAAASQAA
- AEkAAABHAAAAQgAAADoAAAAxAAAAJgAAABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAQAAAAOAAAAGwAAACAAAAAaAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAkAAAAQAAAAEwAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAACgAEACoAdACmAMYA/QDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AL8A+wAbALEAAACIAAAAdAAAAHIAAAx6AQARfQAACXcAAABvAAAAaAAAAF4AAABRAAAAQQAA
- AC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFAAAACgAAAA2AAAAMwQAQ08DADYmAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAADCAAAAAmAAAAJgAA
- ABkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA4ADgA4AJAAxADHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIoF7wQAQtwIAH/kDACw8w0A
- vvkOAML6DgDB+QwAtu8LAJ/fBwB2xAQAPZoAAAZwAAAAWwAAAEUAAAAuAAAAGQAAAAoAAAADAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA
- ABkAAAAyAAAASAAABU4IAH6YCwClogAAAQkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAJAwA5TAUAT3wAAAFAAAAANwAAACEAAAAOAAAABAAAAAAAAAAAAAAAAAAA
- AAIAAAASACAATQCnANwAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AxgD/BDlG/wkAi/8MALb/DgDF/w8AyP8PAMr/DwDM/w8Azv8PAND/DgDS/w4A
- xPMIAHS+AQAXfAAAAFgAAAA+AAAAIwAAABAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAgAAAAPAAAAFcCACBzDAC40w8A5O4BAB8lAAAAAwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIVCQCJuwcA
- ebsAAAxdAAAARAAAACgAAAASAAAABQAAAAEAAAAEAAAAGAA0AGYAuADuAMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8ApQ//Bwdr/wsA
- oP8NAMD/DwDH/w8Ayf8PAMv/DwDN/w8A0P8OANL/DwDU/xAA1v8PAND4BwB3vQAADm4AAABKAAAALAAA
- ABQAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPAAAAJQAA
- AEMAAABiBABFlg8A2vERAOz/BwB0dQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoCACNACwCy9goAm+QCACR+AAAATgAAAC4AAAAWAAAADQAB
- ACAATwCCAMEA+ADHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8DWDT/CQCD/wwAsf8OAMX/DwDI/w8Ayv8PAM3/DwDP/w4A
- 0f8PANP/EADV/xAA1/8QANr/DQC96gMAOI4AAABSAAAAMQAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAEAAAAEgAAACkAAABKAAADbAcAcbYQAOj8EQDt/w0AxcoAAAoSAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
- ABIGAGiUDAC2/wsArPYEAD2YAAAAVQAAADoAAwA7AG4AowDFAPwAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wC6
- Bf8GFl3/CgCY/w4Avf8PAMf/DwDK/w8AzP8PAM7/DgDR/w8A0/8PANX/EADX/xAA2f8QANv/DwDX+gcA
- Z6wAAAFWAAAAMgAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAABIAAAArAAAATgAA
- DXUKAJ7READs/xEA7f8QAOn4AwA/QAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADCQKAKXhDAC2/wwAs/wFAFe2AAgAegCG
- AMoAxgD+AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wJ/If8IAHr/DACr/w4AxP8PAMn/DwDL/w8A
- zv8OAND/DwDS/w8A1P8QANb/EADY/xAA2/8QAN3/DwDe/ggAhsAAAAJXAAAAMQAAABQAAAAFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAQAAAARAAAAKwAAAE4BABN6DAC54BEA7P8RAO3/EADs/wkAj4wAAAAIAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAADAQAQmMMALT9CwCq/wkThP8BnBH2AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMcA/wUwTP8JAI//DQC5/w4AyP8PAMv/DwDN/w4Az/8PANH/DwDU/xAA1v8QANj/EADa/xAA
- 3P8QAN7/EADg/wkAicAAAARUAAAALAAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACoAAABOAQAVfA0A
- wuYRAO3/EQDt/xEA7f8OAM3SAAANFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABGAcAc7QIJXT/Aa0Q/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AaER/wcEb/8LAKP/DgDD/w8A
- yv8PAM3/DgDP/w8A0f8PANP/EADV/xAA1/8QANn/EADc/xAA3v8QAOD/EADi/wgAgLgAAAFMAAAAJQAA
- AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAwAAAA4AAAAoAAAATAEAFXoNAMLmEQDt/xEA7f8RAO3/EADp9gMAPjsAAAAEAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAYAAAAiAEAKjgC6CP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AxwD/A1U3/wkAhv8NALX/DgDI/w8AzP8OAM7/DwDQ/w8A0/8QANX/EADX/xAA
- 2f8QANv/EADd/xAA4P8QAOL/EADi/gYAY6AAAABBAAAAHQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAJQAAAEkBABJ2DQC94hEA
- 7f8RAO3/EQDt/xEA7P8HAHp0AAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIQBgAJIAwwD7AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AuAb/BxRh/wsA
- m/8NAMH/DwDL/w4Azv8PAND/DwDS/w8A1P8QANf/EADZ/xAA2/8QAN3/EADf/xAA4f8RAOP/EADe+QMA
- MnkAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAACgAAACAAAABEAAAMcAwAtd0RAO3/EQDt/xEA7f8RAO3/CwCnpgAABQwAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAACgAFACoAfACuAMYA/gDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxwD/AI0A1wCRAdwAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8CeiT/CAB9/wwAr/8OAMn/DgDO/w8A0P8PANL/DwDU/xAA
- 1v8QANj/EADa/xAA3P8QAN//EADh/xAA4/8RAOX/DgDI5wAADlcAAAAnAAAACwAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAbAAAAPQAAA2YKAJ7QEQDs/xEA
- 7f8RAO3/EQDt/w4AyMoBABIVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwADgA2AJEAxADHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCWANkABgN9Bw9y4AGrFv8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDE
- Af8FLU//CgCU/w0Av/8OAM3/DwDP/w8A0f8PANT/EADW/xAA2P8QANr/EADc/xAA3v8QAOD/EADi/xEA
- 5P8RAOf/CQCLuAAAAEQAAAAkAAAAFgAAABMAAAARAAAADgAAAA0AAAALAAAACQAAAAgAAAAHAAAABgAA
- AAcAAAALAAAAGQAAADgAAABeCACBvREA7f8RAO3/EQDt/xEA7f8PANvhAQAnJgAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAPABoARQCkANgAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI
- AP8AnADbAAwAcQUARqoMAKj/CSqB/wC+B/8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wGcE/8IA3T/DACp/w4AyP8PAM//DwDR/w8A
- 0/8QANX/EADX/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA5v8QAOT7AwAzggAAAFAAAABCAAAAPAAA
- ADgAAAA1AAAAMgAAAC8AAAAtAAAAKgAAACkAAAAoAAAAKAAAAC4AAAA/AAAAXAUAVqQQAOv+EQDt/xEA
- 7f8RAO3/EADm8gMAPj4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAnAFQAsADkAMgA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AKMA4gATAHQAAAt2CwCd8gwAqv8MAKj/Bkxk/wDH
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wRNPf8JAIz/DQC7/w4Azv8PANH/DwDT/xAA1f8QANf/EADZ/xAA2/8QAN7/EADg/xAA
- 4v8RAOT/EQDm/xEA6P8MALHcAAACfgAAAHQAAABrAAAAZgAAAGMAAABgAAAAXQAAAFoAAABYAAAAVgAA
- AFUAAABVAAAAWgAAAGkCAC2RDwDh+BEA7f8RAO3/EQDt/xAA7P0GAGVgAAAABQAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- ABIAMwBeALwA8ADIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wCr
- AO0AFwCMAAAAfAYAWsENAKz/DQCr/w0Aqv8MAKf/BHhA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALUI/wcNaf8LAKL/DgDH/w8A
- 0P8PANP/EADV/xAA1/8QANn/EADb/xAA3f8QAN//EADh/xEA4/8RAOb/EQDo/xAA6f4IAH3YCgCQ4QoA
- m9oKAJfQCQCLxwcAeb4HAGe1BgBZqwUATaIEAEGdAwA5mgMAM5gDADueBQBYsA4Az+8RAO3/EQDt/xEA
- 7f8RAO3/CQCPiAAAAQgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANADoAYwC/APQAyAD/AMgA/wDIAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AsQH0ABsDpgAABJoAABOoCwCk+A0Arv8NAKz/DQCr/w0A
- qv8MBqP/Ap0i/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AxwD/A3Aq/wkAhP8MALb/DgDO/w8A0/8QANX/EADX/xAA2f8QANv/EADd/xAA
- 3/8QAOH/EQDj/xEA5v8RAOj/EQDq/w8A2P8MALL/DwDW/xAA6f8RAOz/EQDt/xEA7f8RAO3/EQDt/xEA
- 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/wwAvbwAAAYOAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAx
- AEgAwAD0AMgA/wDIAP8AyAD/AMgA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALMM/wgc
- dPkKAJL5CQCE/gkAjv8NALH/DQCv/w0Arf8NAKz/DQCs/w0Aq/8KGJT/AbQQ/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwgL/BSNY/woA
- m/8NAMX/DwDS/xAA1f8QANb/EADZ/xAA2v8QAN3/EADf/xAA4f8RAOP/EQDl/xEA5/8RAOr/EQDs/wwA
- t/8OAMj/EADk/xEA7P8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA
- 7f8PANrfAQAgIgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAJ0AwADIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wC1C/8IJXb/CwCk/woAl/8IAHv/DACq/w0Asv8NALD/DQCv/w0A
- rv8NAK3/DQCt/w0ArP8JNnv/AMIE/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8BkBr/CAJ7/wwAsP8OAM7/EADU/xAA1v8QANj/EADa/xAA
- 3f8QAN//EADh/xEA4/8RAOX/EQDn/xEA6f8RAOz/DgDU/wwAuv8PANz/EADr/xEA7f8RAO3/EQDt/xEA
- 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/DwDf5gMANTYAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACAAAAAYAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX
- AAcAwADgAMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AuQj/Byty/wsA
- qP8LAKf/CQCN/wkAh/8MALX/DQCz/w0Asv8NALD/DQCv/w0Arv8NAK7/DQCu/wwArf8GYVb/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDG
- AP8EQkb/CgCT/w0Awv8QANP/EADW/xAA2P8QANr/EADd/xAA3/8QAOH/EADj/xEA5f8RAOf/EQDp/xEA
- 6/8QAOz/CQCOzAsAp8YNAMTSDwDk3xAA6u0QAOz4EQDt/xEA7f8RAO3/EQDt/xEA7f8RAOz9EADn5gsA
- o5wCAC0lAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAEgAAABgAAAAVAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgCbALIAyAD/AMgA/wDIAP8AyAD/AMgA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/ALsH/wcub/8LAKn/DACx/wsAof8IAIL/CwCg/w0Atv8NALT/DQCz/w0A
- sv8NALH/DQCw/w0Ar/8NAK//DQCv/wwCrP8DijT/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wCtDP8HCXD/CwCq/w8Azv8QANb/EADY/xAA
- 2v8QANz/EADe/xAA4P8QAOL/EQDl/xEA5/8RAOn/EQDr/xEA7f8IAHeeAAAAKwAAAgwAAA4IAAARDQAA
- DRIBAB4XAwA8IgQAQCsEAEArBAA/JgIAJBcAAAwKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAABsAAAAqAAAALAAACyQCACUfAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAACwAKgC9AOYAyAD/AMgA/wDIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDBAPkEMUfJCAB3tggA
- f6MHAHOUBQBMlAQARaYNALX+DQC3/w0Atv8NALT/DQCz/w0Asv8NALH/DQCx/w0Asf8NALH/DQCx/wsO
- ov8BrRb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxwD/AMgA/wNkMv8JAIv/DQC+/w8A1P8QANj/EADa/xAA3P8QAN7/EADg/xAA4v8RAOX/EQDn/xEA
- 6f8RAOv/EQDt/w0AxtoAAAA3AAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
- ABAAAAAkAAAAOwAAAEUCAClTDACupwEAEBQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIAKwGKEMIAwgX/AMgA/wDI
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AwAD0AD0AaAAAABQAAAAEAAAAAgAAABEAAAA3BQBKmA4Auv8OALj/DQC3/w0A
- tv8NALT/DQCz/w0As/8NALL/DQCy/w0Asv8NALL/DQCy/wonjf8Avgj/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMAD/wYaYv8LAKL/DgDM/xAA
- 2P8QANr/EADc/xAA3v8QAOD/EADi/xEA5P8RAOf/EQDp/xEA6/8RAO3/EADs/AIAKFkAAAAaAAAAAwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAUAAAALAAAAEgAAAJaBgBfjxAA5PEGAFhVAAAABgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAHAQAVKgwZqewGXlrpAJgE2AC8APIAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALgA6wA4AFwAAAAQAAAAAgAA
- AAAAAAACAAAAGQAAAEMJAIPKDgC7/w4Auf8OALj/DQC3/w0Atv8NALX/DQC0/w0AtP8NALP/DQCz/w0A
- tP8NALT/DQC0/wdHcf8AxgH/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMcA/wDIAP8AyAD/Aogf/wkAgv8NALj/DwDV/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA
- 5v8RAOn/EQDr/xEA7f8RAO//BwBskgAAACQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAGQAA
- ADQAAABTAAAMbgoAmcIRAO/+DAC1sAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPBgBfeA8A
- 0/4KAJXNAQsQcwApAGoATgB4AGsAiACMAKQAngDCAL0A3wDGAPgAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/gCaAMEAIQA8AAAACwAAAAIAAAAAAAAAAAAAAAUAAAAiAAAFUQ0As/IOALz/DgC7/w4A
- uf8OALj/DQC3/w0Atv8NALX/DQC1/w0Atf8NALX/DQC1/w0Atf8NALX/DAG0/wVvTv8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AxgD/BThO/wsA
- mv8OAMn/DwDZ/xAA3P8QAN7/EADg/xAA4v8RAOT/EQDm/xEA6f8RAOv/EQDt/xEA7/8MAK/GAAAALgAA
- AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACgAAAB0AAAA6AAAAWwIAIoQNAL/gEgDx/xEA6PACACgrAAAAAwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAUcDACw0BAA1P8NALTmAgAhfAAAAEsAAAArAAAAEwAA
- AAcABgAIABYAEQAyAC8ATQBUAGUAdgCAAJMAkACkAI8ApAB1AIwAOABGAAIADwAAAAQAAAAAAAAAAAAA
- AAAAAAAAAAAACQAAACoCACp0DgC//w4Avf8OALz/DgC7/w4Auf8OALj/DQC3/w0At/8NALb/DQC2/w0A
- tv8NALb/DQC2/w0At/8NALf/DQaw/wKYKf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8BphD/CAZ4/wwAsf8PANT/EADc/xAA3v8QAOD/EADi/xEA
- 5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xAA4O4AAAw8AAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAsAAAAfAAAAPgAA
- AGEEAEadEADe8xIA8f8RAPD/CAB5dAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAoDADZMDwDQ+Q8A0/8OAMb1BABAlAAAAFAAAAAtAAAAEwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAMwUAVZwOAMD/DgC//w4A
- vf8OALz/DgC7/w4Auv8OALn/DgC4/w4AuP8OALj/DQC3/w0At/8OALj/DgC4/w4Auf8OALn/DBSk/wGz
- Ev8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDI
- AP8DWzn/CgCR/w4Axf8PANv/EADe/xAA4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/gMA
- N2AAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAALAAAAIAAAAEAAAABlBwBpsREA7fwSAPH/EgDx/w4AxMQAAAgQAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIJAIOeDwDT/w8A0/8OAM/8BgBapgAA
- AFIAAAAuAAAAEwAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAABMAAAA7CAB/wA4Awv8OAMD/DgC//w4Avf8OALz/DgC7/w4Auv8OALr/DgC5/w4A
- uf8OALn/DgC5/w4Auf8OALn/DgC6/w4Auv8OALv/CjGK/wDCBP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wC6Bv8HF2j/CwCp/w8A0/8QAN7/EADg/xAA
- 4v8RAOT/EQDm/xEA6f8RAOv/EQDs/xEA7/8RAPH/BwBmiAAAAB0AAAADAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAAAB8AAABAAAACZggA
- eroRAO/+EgDx/xIA8f8RAOryAwA1NQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABwEAEygNAMDjDwDT/w8A0/8PAND9BwBlrQAAAVIAAAAsAAAAEgAAAAQAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGAAAAEILAKXfDgDD/w4A
- wf8OAMD/DgC//w4Avf8OALz/DgC8/w4Au/8OALr/DgC6/w4Auv8OALr/DgC6/w4Auv8OALv/DgC7/w4A
- vP8NALz/B1pl/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wJ/Jf8JAIj/DQC//w8A2/8QAOD/EADi/xEA5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xEA
- 8f8KAJGsAAAAIwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAkAAAAdAAAAPgAAAGQIAH+9EQDw/hIA8f8SAPH/EQDw/ggAfXcAAAAGAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAUATGAPANL8DwDT/w8A
- 0/8PANH+BwBmrAAAAE4AAAAqAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAMAAAAeAAAFSw0Av/gOAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL3/DgC8/w4A
- vP8OALv/DgC7/w4Au/8OALv/DgC7/w4AvP8OALz/DgC9/w4Avv8NArv/BIU9/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMYA/wUwVf8LAKH/DgDQ/xAA
- 4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/w0AvcsAAAAoAAAACAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAGgAAADoAAABhCAB3uBEA
- 8P4SAPH/EgDx/xIA8f8NALezAAADDAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAADAAAAEQkAiJ8PANP/DwDT/w8A0/8PANL+BgBbowAAAEoAAAAmAAAADQAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACICACJkDgDG/g4A
- xf8OAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL7/DgC9/w4Avf8OALz/DgC8/w4AvP8OAL3/DgC9/w4A
- vf8OAL7/DgC//w4AwP8MDLP/Aace/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AaIS/wgCf/8MALn/DwDb/xAA4v8RAOX/EQDn/xEA6f8RAOv/EQDs/xEA
- 7/8RAPH/DwDV5AAABC8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAABQAAABcAAAA2AAAAXQcAa7ARAO/+EgDx/xIA8f8SAPH/EADc3gEAGR0AAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAKHQwA
- tdMPANP/DwDT/w8A0/8OAND8BQBKlgAAAEUAAAAhAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAGAAAAJgQAN3gPAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4A
- v/8OAL//DgC+/w4Avv8OAL7/DgC+/w4Avv8OAL7/DgC//w4Av/8OAMD/DgDB/w4Awv8LIp7/ALwK/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/BFRA/woA
- mP8OAMz/EADh/xEA5f8RAOf/EQDp/xEA6/8RAO3/EQDv/xEA8f8RAO31AQAQOwAAAAwAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAMAAAAFgFAFKhEQDt/BIA
- 8f8SAPH/EgDx/xEA6/IDAD48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAgApOw4AyO0PANP/DwDT/w8A0/8OAMv4AwA4hQAA
- AD4AAAAcAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAqBQBQjA8A
- yf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4AwP8OAL//DgC//w4Av/8OAL//DgC//w4A
- v/8OAMD/DgDA/w4Awf8OAML/DgDD/w4Aw/8IRH7/AMYB/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8Atwj/CBFw/wwAsf8PANr/EQDl/xEA5/8RAOn/EQDr/xEA
- 7f8RAO//EgDx/xIA8/8CACFMAAAAFQAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAA
- AAEAAAAEAAAAEAAAACoAAABQBAA8kREA5/gSAPH/EgDx/xIA8f8RAO/7BgBnYQAAAAYAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAALBQBQYQ8A0foPANP/DwDT/w8A0/8NAL7uAQAdcAAAADYAAAAWAAAABgAAAAEAAAAAAAAAAAAA
- AAAAAAABAAAAAQAAAAIAAAACAAAADAAAADAGAGCgDwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4A
- wv8OAML/DgDB/w4Awf8OAMD/DgDA/w4AwP8OAMD/DgDB/w4Awf8OAMH/DgDC/w4Aw/8OAMT/DgDF/w4A
- xf8GbVb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8Cdiv/CgCP/w4Ax/8QAOP/EQDn/xEA6f8RAOv/EQDt/xEA7/8SAPH/EgDz/wQAO20AAAA0AAAAKAAA
- ACYAAAAkAAAAIAAAAB4AAAAcAAAAGgAAABgAAAAYAAAAGAAAAB0AAAAuAAAATQEAHHwPANfvEgDx/xIA
- 8f8SAPH/EQDw/gkAioQAAAIIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAEPCAB1ig8A0/8PANP/DwDT/w8A
- 0/8MAK/hAAAKXgAAADQAAAAcAAAAEwAAABEAAAARAAAAEwAAABQAAAAWAAAAGgAAABwAAAAnAAAASQgA
- dLYPAMz/DwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMX/DgDE/w4Aw/8OAML/DgDC/w4Awv8OAML/DgDC/w4A
- wv8OAML/DgDC/w4Aw/8OAMP/DgDE/w4Axf8OAMb/DwDG/w4Fwf8DkzL/AMgA/wDIAP8AyAD/AMgA/wDH
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDCAv8GKV7/DACp/w8A2f8RAOf/EQDp/xEA
- 6/8RAO3/EQDv/xIA8f8SAPP/BQBFkAAAAF4AAABVAAAAUwAAAFAAAABMAAAASQAAAEYAAABEAAAAQgAA
- AEIAAABCAAAASAAAAFgAAAh0DQC84BIA8f8SAPH/EgDx/xIA8f8MALCpAAAFCwAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAQAAAYVCgCZsw8A0/8PANP/DwDT/w8A0/8JAIXEAAAAXAAAAEYAAAA7AAAAOQAA
- ADkAAAA7AAAAPgAAAEAAAABDAAAARwAAAFIAAABuCAB8yg8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w4A
- xv8OAMX/DgDF/w4AxP8OAMP/DgDD/w4Aw/8OAMP/DgDD/w4Aw/8OAMP/DgDE/w4AxP8OAMX/DgDG/w8A
- x/8PAMj/DwDJ/w0StP8Brxf/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wGWGv8JAob/DQDB/xAA4/8RAOn/EQDr/xEA7f8RAO//EgDx/xIA8/8HAGa4BQBJqAQA
- QZ4DADeXAgApjAEAFYAAAAZ6AAAFdgAAA3IAAAFwAAAAbwAAAHAAAAF0AAAHgQsAnNERAPD/EgDx/xIA
- 8f8SAPH/DgDQzgEAEBUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAABAhDQC31g8A
- 0/8PANP/DwDT/w8A0v8GAFywAAAAcgAAAGkAAABnAAAAaAAAAGoAAABsAAAAbgAAAXIAAAZ3AAALggAA
- DJgJAIjeDwDP/w8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w8Ax/8PAMb/DgDF/w4Axf8OAMX/DgDE/w4A
- xP8OAMT/DgDF/w4Axf8OAMX/DgDG/w8Axv8PAMf/DwDI/w8AyP8PAMr/DwDK/wstmv8Avwf/AMgA/wDI
- AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wVGSv8LAKH/DwDV/xAA
- 6f8RAOz/EQDt/xEA8P8SAPH/EgDz/w8A0v8QAN//EgDw/xIA8f8SAPH/EgDx/xEA7fwQAOT2DwDX7w4A
- y+oOAMToDgC+5g4AxukQAOD1EQDw/xIA8f8SAPH/EgDx/xAA5+wCAC4uAAAAAwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgCACs/DwDL8Q8A0/8PANP/DwDT/w4A0P0LAKPgCQCI0gkA
- f84JAIfRCQCO1AoAm9sMAKjkDACy7A0Av/INAMH4DACq/QwAuP8PAND/DwDP/w8Azf8PAMz/DwDL/w8A
- yv8PAMn/DwDI/w8Ax/8PAMf/DwDG/w8Axv8OAMb/DgDG/w4Axv8OAMb/DwDG/w8Axv8PAMf/DwDH/w8A
- yP8PAMn/DwDJ/w8Ayv8PAMz/DwDM/whSdv8AxwD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/ALEL/wgKev8NALr/EADj/xEA7P8RAO7/EQDw/xIA8v8SAPP/DwDT/xAA
- 3/8SAPD/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA
- 8f8RAO/7BgBbVgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AA0GAF5yDwDS/g8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w4A
- y/8MAK3/DAC5/w8A0f8PAND/DwDP/w8Azv8PAMz/DwDL/w8Ayv8PAMn/DwDJ/w8AyP8PAMf/DwDH/w8A
- x/8PAMf/DwDH/w8Ax/8PAMf/DwDH/w8AyP8PAMj/DwDJ/w8Ayv8PAMr/DwDL/w8Azf8PAM7/DgHM/wV9
- Sv8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/A2g1/woA
- mP8OAND/EADq/xEA7v8RAPD/EgDy/xIA9P8PANT/EADg/xIA8P8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA
- 8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EQDw/gkAiIIAAAEIAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAhAJAI2eDwDT/w8A0/8PANP/DwDT/w8A
- 0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DgDM/wwAr/8NALr/DwDS/w8A0f8PAND/DwDP/w8A
- zv8PAM3/DwDM/w8Ay/8PAMr/DwDJ/w8Ayf8PAMj/DwDI/w8AyP8PAMj/DwDI/w8AyP8PAMn/DwDJ/w8A
- yf8PAMr/DwDL/w8Ay/8PAM3/DwDO/w8Az/8PAND/DgjF/wKkI/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwQP/Bx1q/wwAsv8PAOH/EQDu/xEA8P8SAPL/EgD0/wwA
- rc4QANrnEgDw/hIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xEA
- 7fQIAH9wAAAEBwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABAAABxEKAJCcDwDS/A8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A
- 0/8PAM3/DQCy/w0AuP8PANT/DwDS/w8A0f8PAND/DwDP/w8Azv8PAM3/DwDM/w8Ay/8PAMv/DwDK/w8A
- yv8PAMr/DwDJ/w8Ayf8PAMn/DwDJ/w8Ayv8PAMr/DwDL/w8Ay/8PAMz/DwDN/w8Azv8PAM//DwDQ/w8A
- 0f8PANL/DB6v/wC6DP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8CjCD/CQCP/w4Ayv8QAOr/EQDx/xIA8v8SAPT/BQBLagAAARIBACAQBAA3KgQAREEGAGhSCABvYggA
- cnIJAIWCCwCjjgsAp5YMAKeWCwCmkgkAhn8IAG5dAgAgFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAUAAAAJAAAACgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAMAAAAEAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYEAD09CQCEigsA
- orINALnBDQC6xA0AuL8MALS6CgCVrAkAi5oJAIiLCAB1eQYAV2gEAEJnCAB9sxAA1f8PANT/DwDT/w8A
- 0f8PAND/DwDP/w8Az/8PAM7/DwDN/w8Azf8PAMz/DwDL/w8Ay/8PAMv/DwDL/w8Ay/8PAMv/DwDL/w8A
- y/8PAMz/DwDN/w8Azf8PAM7/DwDP/w8A0P8PANH/DwDS/w8A0/8PANP/CkCM/wDEA/8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDGAP8FPVP/CwCp/w8A3f8RAPD/EgDz/xIA
- 9P8EAERZAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAFgAAABwAAAAYAAAADQAAAAQAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAwAAAAPAAAADAAA
- AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA
- AAAAAAAAAAAABAAAACAGAFyMEADW/xAA1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8Az/8PAM7/DwDO/w8A
- zf8PAM3/DwDM/w8AzP8PAMz/DwDM/w8AzP8PAMz/DwDN/w8Azf8PAM7/DwDO/w8Az/8PAND/DwDR/w8A
- 0v8PANL/DwDU/xAA1f8PANT/B2dk/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wGpEP8ICIH/DQDC/xEA6v8SAPP/EgD1/wMAM0UAAAAJAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEQAA
- ACMAAAAxAAAAMAEAEisDADcoAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAJAAAAFgAAACAAAAAhAAAAFgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGwUATHcQANj/EADW/xAA
- 1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8A0P8PAM//DwDP/w8Azv8PAM7/DwDO/w8Azv8PAM7/DwDO/w8A
- zv8PAM7/DwDO/w8Az/8PAM//DwDQ/w8A0f8PANL/DwDS/w8A0/8QANT/EADW/w8A1/8PBNH/BI87/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wNgPP8LAJ//DwDZ/xEA
- 8f8RAPP6AQAUMwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABgAAAAvAAAARAAAAEkEAElrDAC9sgEAERMAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgFAFJGAwAwTwAA
- ADoAAAAzAAAAHwAAAA0AAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAWAwAsXg8A2f4QANj/EADX/xAA1f8PANT/DwDT/w8A0/8PANL/DwDR/w8A
- 0P8PAND/DwDQ/w8Az/8PAM//DwDP/w8Az/8PAM//DwDP/w8Az/8PAND/DwDQ/w8A0P8PANH/DwDS/w8A
- 0/8PANP/EADU/xAA1f8QANb/DwDX/xAA2f8OEMX/Aa4Z/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AL0F/wgYcf8NALv/EQDp/xAA5+oAAAwmAAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA4AAAAgAAAAOgAA
- AFQBABBmCgCXthEA8PgEAEZFAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABxcMAL3CBwB2mwAAB1QAAABCAAAAKAAAABMAAAAGAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEBABRADwDY/BAA
- 2f8QANj/EADX/xAA1v8QANX/DwDU/w8A0/8PANP/DwDS/w8A0v8PANH/DwDR/w8A0f8PANH/DwDQ/w8A
- 0P8PANH/DwDR/w8A0f8PANH/DwDS/w8A0v8PANP/DwDU/xAA1f8QANX/EADW/xAA1/8PANj/EADa/xAA
- 2/8MKav/AMAH/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AoMm/woA
- lv8PANP/DQDG0QAAABoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAYAAAASAAAAKQAAAEYAAABiBAA7jg8A1ekSAPT/CgCWjgAAAAgAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQMA
- NEQPAOb2DAC72AIAJncAAABPAAAAMgAAABkAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAOAMrnEADa/xAA2f8QANj/EADX/xAA1v8QANX/EADV/w8A
- 1P8PANP/DwDT/w8A0v8PANL/DwDS/w8A0v8PANL/DwDS/w8A0v8PANL/DwDS/w8A0/8PANP/DwDT/w8A
- 1P8QANX/EADW/xAA1v8QANf/EADY/w8A2f8QANr/EADc/w8A3P8JT4L/AMYB/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxgD/BjJd/wwAsf8KAJizAAAAFQAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAFgAAADAAAABQAAAFbwgA
- d7YRAO77EgD0/w4A0s8BAA8UAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEAgAhY8QAOz/DwDe9AUAVJwAAABaAAAAOgAA
- AB4AAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAJwsA
- osYQANz/EADb/xAA2f8QANn/EADX/xAA1/8QANb/EADV/xAA1f8PANT/DwDU/w8A0/8PANP/DwDT/w8A
- 0/8PANP/DwDT/w8A0/8PANP/DwDU/w8A1P8QANX/EADV/xAA1v8QANf/EADX/xAA2P8QANn/DwDa/xAA
- 2/8QANz/EADe/w8B3P8FeVX/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8BohX/CgWL/wYAYZoAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABkAAAA1AAAAVwEAF4AMALLaEQDz/xIA9P8RAO30AwA7OwAAAAQAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAGAAAMHw0Ax9AQAOz/EADq/gkAj8MAAApnAAAAQQAAACIAAAANAAAAAwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAeCAB6nxAA3f8QANz/EADb/xAA2v8QANn/EADY/xAA
- 1/8QANf/EADW/xAA1f8QANX/EADV/xAA1P8QANT/EADU/xAA1P8QANT/EADU/xAA1f8QANX/EADV/xAA
- 1v8QANb/EADX/xAA2P8QANj/EADZ/xAA2v8PANv/EADc/xAA3f8QAN//EADg/w8I1P8Cni3/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8EVEb/AwAsjAAAAB8AAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAkAAAAbAAAAOAAAAFwDADSSDwDX7hIA
- 9P8SAPT/EQDz/ggAgnsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAwA3Rg8A5/cQAOz/EADs/w0A
- v+ECAB93AAAARgAAACQAAAAOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- ABUFAEpwEADe/xAA3f8QANz/EADb/xAA2v8QANr/EADZ/xAA2P8QANf/EADX/xAA1v8QANb/EADW/xAA
- 1v8QANX/EADV/xAA1f8QANb/EADW/xAA1v8QANb/EADX/xAA1/8QANj/EADZ/xAA2f8QANr/EADb/w8A
- 3P8QAN3/EADe/xAA3/8QAOH/EADi/w4awf8BuBD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wC3CP4AFAaTAAAAOgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAJAAAAHAAAADoAAABeBQBInRAA5/gSAPT/EgD0/xIA8/8NAL65AAAIDQAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAPCAB+hRAA7P8QAOz/EADs/w4A1vADAC+CAAAASAAAACYAAAAPAAAABAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAFD0PAN36EADf/xAA3v8QAN3/EADc/xAA
- 2/8QANr/EADZ/xAA2f8QANj/EADY/xAA2P8QANf/EADX/xAA1/8QANf/EADX/xAA1/8QANf/EADX/xAA
- 2P8QANj/EADZ/xAA2f8QANr/EADb/xAA2/8QANz/DwDd/xAA3v8QAN//EADg/xAA4f8RAOP/EQDk/ws4
- oP8AxAP/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wB8ANAAAABeAAAAIAAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAABwAAAA7AAAAYAYAV6YRAO78EgD0/xIA
- 9P8SAPT/EADg4AIAHx8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAYXDAC8whAA
- 7P8QAOz/EADs/w8A3PQDADqJAAAASAAAACUAAAAOAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAHAAABJg0Au9UQAOD/EADf/xAA3v8QAN3/EADc/xAA2/8QANv/EADa/xAA2v8QANn/EADZ/xAA
- 2f8QANj/EADY/xAA2P8QANj/EADY/xAA2P8QANn/EADZ/xAA2f8QANr/EADa/xAA2/8QANz/EADc/xAA
- 3f8PAN7/EADf/xAA4P8QAOH/EADi/xEA4/8RAOX/EADl/whhc/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMQA/AAuAJUAAABCAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAcAAAAaAAAAOQAAAF8GAF+qEQDu/BIA9P8SAPT/EgD0/xEA7PIEAEM9AAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYBAB8tDwDa5BAA7P8QAOz/EADs/w8A4PYEAD+MAAAARwAA
- ACQAAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaCAB9mxAA4f8QAOD/EADf/xAA
- 3v8QAN3/EADd/xAA3P8QANv/EADb/xAA2v8QANr/EADa/xAA2v8QANn/EADZ/xAA2f8QANn/EADa/xAA
- 2v8QANr/EADa/xAA2/8QANv/EADc/xAA3f8QAN3/EADe/w8A3/8QAOD/EADh/xAA4v8RAOP/EQDk/xEA
- 5f8RAOf/EAPi/wWKRf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AJwA4gAD
- AGgAAAAoAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFwAAADYAAABdBgBbpxEA7/wSAPT/EgD0/xIA
- 9P8RAPL6BgBmWgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAoEAENODwDn9hAA7P8QAOz/EADs/w8A4PYEAD2JAAAARAAAACEAAAAKAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAA8DADRWEADi/hAA4v8QAOH/EADg/xAA3/8QAN7/EADd/xAA3f8QANz/EADc/xAA
- 2/8QANv/EADb/xAA2/8QANv/EADb/xAA2/8QANv/EADb/xAA2/8QANz/EADc/xAA3P8QAN3/EADe/xAA
- 3v8QAN//DwDg/xAA4f8QAOL/EQDj/xEA5P8RAOX/EQDm/xEA5/8RAOn/Dw/U/wKqIP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AEsArAAAAEwAAAAVAAAAAQAAAAAAAAABAAAABQAA
- ABQAAAAyAAAAWQUAU6ERAO77EgD0/xIA9P8SAPT/EQDz/AgAfHIAAAEGAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwHAGpwEADr/BAA7P8QAOz/EADs/w8A
- 3fQDADGAAAAAQAAAAB0AAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAABicOAMfcEQDj/xAA
- 4v8QAOH/EADg/xAA4P8QAN//EADe/xAA3v8QAN3/EADd/xAA3P8QANz/EADc/xAA3P8QANz/EADc/xAA
- 3P8QANz/EADc/xAA3f8QAN3/EADe/xAA3v8QAN//EADf/xAA4P8PAOH/EADi/xEA4/8RAOT/EQDl/xEA
- 5v8RAOf/EQDo/xEA6v8RAOv/DSi5/wC+Cv8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AtADyAAwAfgAAADwAAAAUAAAADQAAAA8AAAAaAAAAMgAAAFUDADyTEQDt+hIA9P8SAPT/EgD0/xEA
- 8/4JAJKIAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAwAAAA4IAIiLEADr/hAA7P8QAOz/EADs/w4A2PACACV0AAAAOgAAABoAAAAIAAAAAgAA
- AAEAAAABAAAAAgAAAAIAAAAFAAAAGggAeZYRAOT/EQDj/xAA4/8QAOL/EADh/xAA4P8QAOD/EADf/xAA
- 3/8QAN7/EADe/xAA3v8QAN7/EADd/xAA3f8QAN3/EADe/xAA3v8QAN7/EADe/xAA3v8QAN//EADf/xAA
- 4P8QAOH/EADh/xAA4v8RAOP/EQDk/xEA5f8RAOb/EQDn/xEA6P8RAOn/EQDr/xEA7P8RAO3/CkyP/wDG
- Af8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AbADPAAAAeQAAAEkAAAA0AAAANQAA
- AEIAAABaAgAoiBAA4PQSAPT/EgD0/xIA9P8RAPT/CwConAAABQkAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABBIKAKClEADs/xAA
- 7P8QAOz/EADs/w0AyOYBABNnAAAAPAAAACQAAAAaAAAAGAAAABgAAAAaAAAAGwAAAB4AAAAqAgAkXRAA
- 4PoRAOX/EQDk/xEA4/8QAOL/EADi/xAA4f8QAOD/EADg/xAA4P8QAN//EADf/xAA3/8QAN//EADf/xAA
- 3/8QAN//EADf/xAA3/8QAN//EADg/xAA4P8QAOH/EADh/xAA4v8QAOL/EADj/xEA5P8RAOX/EQDm/xEA
- 5/8RAOj/EQDp/xEA6v8RAOz/EQDt/xEA7v8QAO3/BnZf/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wC/APwAHwC2AAAAhgAAAGgAAABkAAAAbQEAGYgPANLsEgD0/xIA9P8SAPT/EgD0/wwA
- tLAAAAgOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAACxgMALe9EADs/xAA7P8QAOz/EADs/wsAr9YAAAdoAAAATwAA
- AEQAAABCAAAAQgAAAEMAAABGAAAASAAAAE8AAABhCwCh0hEA5v8RAOX/EQDk/xEA5P8RAOP/EADi/xAA
- 4v8QAOH/EADh/xAA4f8QAOD/EADg/xAA4P8QAOD/EADg/xAA4P8QAOD/EADg/xAA4P8QAOH/EADh/xAA
- 4v8QAOL/EQDj/xEA4/8QAOT/EQDl/xEA5v8RAOf/EQDo/xEA6f8RAOr/EQDr/xEA7P8RAO3/EQDv/xEA
- 8P8QB+b/A5s0/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCKCvEEAUTUBgBdwggA
- dr0JAIvIDwDR7RIA9P8SAPT/EgD0/xIA9P8OAM7IAQAWFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgEA
- FiQNAMjTEADs/xAA7P8QAOz/EADs/wkAj8gAAAZ7AAAAcAAAAG8AAABvAAAAcAAAAHIAAAB1AAAKfAEA
- G4sFAFm6EADn/xEA5v8RAOb/EQDl/xEA5P8RAOT/EQDj/xEA4/8QAOL/EADi/xAA4f8QAOH/EADh/xAA
- 4f8QAOH/EADh/xAA4f8QAOH/EADi/xAA4v8QAOL/EQDj/xEA4/8RAOT/EQDk/xAA5f8RAOb/EQDn/xEA
- 6P8RAOn/EQDq/xEA6/8RAOz/EQDt/xEA7v8RAO//EQDx/xIA8v8PGNL/AbUV/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMYA/wY5Wf8MAK7/EADi/xIA8v8SAPT/EgD0/xIA9P8SAPT/EADk5AIA
- JCYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAIAKzcPAN/rEADs/xAA7P8QAOz/EADs/w8A
- 4PcNAMnqDQC/5g0AxOgNAMzrDwDX8Q8A5foQAOv+EADn/g8A1P8PAN3/EQDo/xEA5/8RAOb/EQDm/xEA
- 5f8RAOX/EQDk/xEA5P8RAOP/EQDj/xEA4/8QAOL/EADi/xAA4v8QAOL/EADi/xEA4/8RAOP/EQDj/xEA
- 4/8RAOT/EQDk/xEA5f8RAOb/EADm/xEA5/8RAOj/EQDp/xEA6v8RAOv/EQDs/xEA7f8RAO7/EQDv/xEA
- 8P8SAPH/EgDz/xIA9P8MNq3/AMMF/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AacR/wkG
- hv8OAMf/EQDt/xIA8/8SAPT/EgD0/xAA6/EEAEI+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACgUAU1gPAOj4EADs/xAA7P8QAOz/EADs/xAA7P8QAOz/EADs/xAA7P8RAO3/EQDt/xEA
- 7f8RAOv/DwDi/w4A0f8QAOn/EQDp/xEA6P8RAOf/EQDn/xEA5v8RAOX/EQDl/xEA5f8RAOT/EQDk/xEA
- 5P8RAOT/EQDk/xEA5P8RAOT/EQDk/xEA5P8RAOT/EQDl/xEA5f8RAOb/EQDm/xEA5/8QAOf/EQDo/xEA
- 6f8RAOr/EQDr/xEA7P8RAO3/EQDu/xEA7/8RAPD/EgDx/xIA8v8SAPT/EgD1/xEA8PkIYHD9AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/BFxA/wsAo/8PANv/EQDx/xIA9P8QAOrqBABUSQAA
- AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAcAc3UQAOv9EADs/xAA
- 7P8QAOz/EADs/xAA7P8QAOz/EADs/xEA7f8RAO3/EQDt/xEA7P8QAOj/DwDZ/w8A3f8RAOr/EQDp/xEA
- 6f8RAOj/EQDn/xEA5/8RAOb/EQDm/xEA5v8RAOX/EQDl/xEA5f8RAOX/EQDl/xEA5f8RAOX/EQDl/xEA
- 5v8RAOb/EQDm/xEA5/8RAOf/EQDo/xAA6P8RAOn/EQDq/xEA6/8RAOz/EQDt/xEA7v8RAO//EQDw/xIA
- 8f8SAPL/EgDz/xIA9P8SAPb/CAB+fAMDNjgAnAW7AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AvQX/BxVu9gsApOUNAMLECQCLgAIAJh4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAACCgcAb2oPAOPtEADs/xAA7P8QAOz/EADs/xAA7P8QAOz/EQDt/xEA
- 7f8RAO3/EQDt/xEA6/8QAOX/DgDS9xAA6PsRAOv/EQDq/xEA6f8RAOn/EQDo/xEA6P8RAOf/EQDn/xEA
- 5/8RAOf/EQDm/xEA5v8RAOb/EQDm/xEA5v8RAOf/EQDn/xEA5/8RAOj/EQDo/xEA6P8RAOn/EADq/xEA
- 6/8RAOv/EQDs/xEA7f8RAO7/EQDv/xEA8P8RAPH/EgDy/xIA8/8SAPT/EgD1/w8A1tIAAAwUAAAAAgAZ
- ABYAuwDdAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AhALWAAABYQAAACMAAAAEAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAEA
- GxUGAF5VCACDggsAp5ULAKmYCgClkgkAlY0IAHl/BwB3bgcAcl0FAFNMBABAOAMAOCMAAAwaBwBzfhAA
- 7P8RAOv/EQDr/xEA6v8RAOr/EQDp/xEA6f8RAOj/EQDo/xEA6P8RAOj/EQDo/xEA6P8RAOj/EQDo/xEA
- 6P8RAOj/EQDo/xEA6f8RAOn/EQDq/xEA6v8QAOv/EQDs/xEA7P8RAO3/EQDu/xEA7/8RAPD/EQDw/xIA
- 8v8SAPP/EgD0/xIA9f8RAPT6BABJRAAAAAQAAAAAAAAAAAA9ADYAxgD0AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDFAP4ANACaAAAARAAAABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAUWDAC2vBEA7f8RAOz/EQDr/xAA6v8QAOn/EADo/xAA
- 6P8RAOn/EQDp/xEA6f8RAOn/EQDp/xEA6f8RAOn/EQDp/xEA6v8RAOr/EQDq/xEA6/8RAOv/EQDs/xAA
- 7P8RAO3/EQDs/xAA6v8PAOb/EADk/xAA5f8QAOr/EQDv/xIA8/8SAPX/EQD2/wkAj4QAAAAHAAAAAQAA
- AAAAAAAAAAAAAABiAGIAxwD9AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCjAOcABgBtAAAAKwAA
- AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAYBAB4sDgDZ4RAA7P8PAOX/DwDd/w4A1f8OANL/DwDX/w8A3/8QAOb/EQDp/xEA6/8RAOv/EQDr/xEA
- 6/8RAOv/EQDr/xEA6/8RAOz/EQDs/xEA7P8RAO3/EADt/xAA6/8PAOX/DwDY/w4Ay/8OAML/DgDE/w8A
- 0P8QAOD/EQDt/xIA9P8NAMK6AAAKDgAAAAEAAAAAAAAAAAAAAAAAAAAAAAQAAwCJAJgAxwD/AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wBWALMAAABQAAAAFgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgDADpGDwDc8g4A0/8NAL//DACw/wsA
- rP8MALX/DgDH/w8A2f8QAOb/EQDr/xEA7P8RAOz/EQDs/xEA7P8RAOz/EQDs/xEA7f8RAO3/EQDt/xEA
- 7v8QAO3/DwDl/w4A0/8NALr/CwCj/woAmP8KAJr/DACq/w4AxP8PAN7/DgDT2AIAISAAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAABUADACtAMYAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALgA9AAT
- AH4AAAA1AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAABIFAEhsDACy+AoAmf8JAIj/CQCK/wkAjv8LAKX/DQDC/w8A3P8QAOr/EQDt/xEA
- 7f8RAO3/EQDt/xEA7f8RAO7/EQDu/xEA7v8RAO//EQDv/xAA6/8PANn/DQC7/wsAmP8JAI3/CwCh/wwA
- rf8LAKb/CwCl/wwAtOYCACs9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAIgDA
- AOkAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AHcAygAAAFoAAAAeAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFQAAAD0DADKXCgCS/QwA
- sP8NAML/DgDK/wwAtP8LAKr/DgDN/w8A5v8RAO7/EQDu/xEA7v8RAO//EQDv/xEA7/8RAO//EQDv/xEA
- 8P8RAPD/EADn/w4Ay/8LAKP/CgCY/wwArf8NALr/DgDI/w8A1f8OAMz8AgArcAAAACIAAAAGAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4ASADHAPsAyAD/AMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxAD8ACcAkAAAAD8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAQAAAAfAAAASwcAasMMAKv/DQC0/w4AwP8OAM7/EADb/w0Ayf8NAL//EADh/xEA
- 8P8RAPD/EQDw/xEA8P8RAPD/EQDw/xEA8f8RAPH/EgDx/xIA8f8QAOT/DQDB/wsApf8MAK//DQCx/w0A
- uv8OAMb/DwDT/xAA4P8JAI+wAAAAKgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAQABAHcAewDHAP4AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AlwDgAAEAZgAAACcAAAAFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACYCAClvDQC3/g0A
- tP8NALj/DgDC/w4Azf8QANr/EADl/w4Axf8QAN7/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPL/EgDy/xIA
- 8v8SAPL/EgDy/xAA5P8NAL//DQC5/w0Au/8NALr/DgC//w4AyP8PANP/EADf/w8A3/AAABA0AAAACQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAGAJwArgDIAP8AyAD/AMgA/wDI
- AP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAGAAAAJAYAYJkOAMP/DgC//w4AwP8OAMf/DwDQ/xAA2/8QAOf/DwDX/xAA
- 4f8SAPL/EgDy/xIA8v8SAPL/EgDz/xIA8/8SAPP/EgDz/xIA8/8SAPT/EADo/w4Axv8OAMr/DgDG/w4A
- xP8OAMf/DwDN/w8A1/8QAOH/EADs/AIAHToAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAGwAVALQA2ADIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCuAO4ACwB0AAAAMAAA
- AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAbBwBwnA4A
- zv8OAMr/DgDK/w8Azv8PANb/EADf/xAA6f8QAOD+EADn/xIA8/8SAPT/EgD0/xIA9P8SAPT/EgD0/xIA
- 9P8SAPT/EgD1/xIA9f8RAO7/DwDW/w8A1P8PANL/DwDQ/w8A0P8PANX/DwDc/xAA5f8QAO33AQAbKgAA
- AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAyAMQA8wDI
- AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wBmAL4AAABVAAAAGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABAGAFdvDwDa/w8A1v8PANX/DwDX/w8A3P8QAOT/EQDt/wgA
- dHUHAHBzDQDDxBEA7vQRAPT+EgD1/xIA9f8SAPX/EgD1/xIA9f8RAPX+EQDt8QwAubYGAF5oCQCQoBAA
- 3v8QANv/EADb/xAA3v8QAOP/EQDr/w0AxcMAAAMMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAZgBiAMcA/gDIAP8AyAD/AMgA/wDIAP8AyAD/AL8A+QAd
- AIcAAAA7AAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA
- ESAOANLhEADh/xAA4P8QAOH/EADl/xEA6/8PAN/fAQAUGwAAABYAAAAoAQEdPAQLkpYHAGdlBwBscAcA
- bHMHAGxwBgBhZwMNnKYAABE5AAAAIwAAABABABslDgDV3hAA5v8QAOb/EADn/xEA7P8QAOzxBABEPAAA
- AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAkACcAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIgA1gABAGEAAAAiAAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwQAREAPAN7kEQDr/xEA6/8RAO7/DwDm5gQA
- Sj4AAAAOAAAAJAAAADcADm2PAAtYawAAAAkAAAAAAAAAAAAAAAQAAAAaABB7mAAMYokAAAA2AAAAGgAA
- AAoCACIjDACvpBAA6OgRAO/sDQDIvwQAQzcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAwArwDKAMgA/wDIAP8AyAD/AMgA/wDI
- AP8AxgD+ADYAnAAAAEUAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAABAEAIBkIAHVqCgCMjwgAf20CACYbAAAABwAAABkAAAA5AAMdWgAczuwABCM3AAAABQAA
- AAAAAAAAAAAAAQAAABQACERmABzQ8wAEImIAAAAvAAAAEQAAAAQAAAACAgAmCwMALw4AAAcCAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAApACYAwADqAMgA/wDIAP8AyAD/AMgA/wDIAP8ApgDpAAQAbAAAACwAAAAGAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAOAAAALAAAAE4AFJXBABrB3AAABBoAAAACAAAAAAAAAAAAAAAAAAAADQABDzcAHdn5ABWk0AAA
- BEwAAAAkAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAE0AxwD6AMgA/wDI
- AP8AyAD/AMgA/wDIAP8AVwC0AAAAUAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB0AAABEAAg+hgAd2v4AEo6nAAAAEAAA
- AAEAAAAAAAAAAAAAAAAAAAAHAAAAJQAXsNAAHdv/AAxhnwAAAD4AAAAZAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQB5AH4AxwD+AMgA/wDIAP8AyAD/AMgA/wC6APYAEgB+AAAANgAA
- AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAARAAAAMwAABV4AGLbiAB7b/wALVm0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaAA5xlgAd
- 2/8AHNH2AAQkbgAAADAAAAAQAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABQCi
- ALUAyAD/AMgA/wDIAP8AyAD/AMgA/wB5AMsAAABbAAAAHwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACIAAABKAAxdpQAd2v8AHdf4AAQfMgAA
- AAQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAABjFXAB3b/gAe3P8AFqjVAAADTQAAACQAAAAKAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAFwC7AN4AyAD/AMgA/wDIAP8AyAD/AMMA/AAs
- AJMAAABAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAMAAAAUAAAAOAACEWsAGsfwAB7b/wAZudQAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA
- BiwAGsflAB7c/wAd2/8ADGKgAAAAPQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAEAAPADGAPUAyAD/AMgA/wDIAP8AyAD/AJgA4AADAGgAAAAoAAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAACYAAABQAA94uQAe2/8AHtv/ABB8lAAA
- AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwASiKgAHtz/AB7c/wAc0fYABCJrAAAALwAA
- ABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AbADHAP4AyAD/AMgA/wDI
- AP8AxwD/AEcAqQAAAEsAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAQAAAAWAAAAPAAEInkAHNP5AB7b/wAd2v4ABztLAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAEAAAAQAAg+XwAd2/4AHtz/AB7c/wAWptQAAANLAAAAIgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAABgADAJEAoADHAP8AyAD/AMgA/wDIAP8AsgDwAAsAdgAAADEAAAAIAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAACgAAABUABOQygAe2/8AHtv/ABvJ4gAA
- BBYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAQgpABrF4gAe3P8AHtz/AB3b/gAM
- WpgAAAA6AAAAFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAOALAAzQDI
- AP8AyAD/AMgA/wDIAP8AawDCAAAAVgAAABsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAQAAAAYAAAAPgAFLIEAHdj8AB7b/wAe2/8AEYSXAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAwAAABYAD3eVAB7c/wAe3P8AHtz/ABvL8QADGWMAAAAsAAAADgAAAAIAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAoAMIA7gDIAP8AyAD/AMgA/wDBAPoAHgCIAAAAPAAA
- AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACsAAABWABSc0gAe2/8AHtv/AB3a/gAG
- MUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAEI0AAHdb4AB7c/wAe
- 3P8AHtz/ABOWyAAAAUcAAAAgAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAVwBSAMcA/ADIAP8AyAD/AMgA/wCLANcAAABhAAAAIwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAUAAAAbAAAAQgAHOowAHdr+AB7b/wAe2/8AGLfMAAACEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAUl7IAHtz/AB7c/wAe3P8AHdv+AAlJjAAAADgAAAAWAAAABAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAfgCIAMcA/wDIAP8AyAD/AMYA/gA6
- AJ4AAABGAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAADAAAAJbABet3gAe2/8AHtv/AB7b/wAL
- WWoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAY0TAAd
- 2v0AHtz/AB7c/wAe3P8AGsXsAAIRXgAAACwAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAARAAgAowC6AMgA/wDIAP8AyAD/AKcA6gAHAG8AAAAtAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAgAAAAgAAAASAAKTJoAHdr+AB7b/wAe2/8AG8nkAAENGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAWABSbtAAe3P8AHtz/AB7c/wAe3P8AE5HFAAAASgAA
- ACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABwAuQDgAMgA/wDI
- AP8AyAD/AFsAtgAAAFIAAAAYAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADcAAQpmABm76QAe2/8AHtv/AB7b/wAO
- b4AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAkABSc+AB3X9gAe3P8AHtz/AB7c/wAd2v4ACUqRAAAAPwAAABwAAAAHAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAD8AxQD3AMgA/wDIAP8AugD2ABYAgAAAADcAAAAKAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAwAAAAoAAAAUgAObbQAHdr/AB7b/wAe2/8AHM7oAAIVIAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIAEIKZAB7c/wAe3P8AHtz/AB7c/wAb
- y/IAAx5wAAAANgAAABYAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBx
- AHAAyAD/AMgA/wDIAP8AfQDOAAAAXQAAACAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAHQAAAEMABCF+ABzQ+AAe2/8AHtv/AB3a/wAO
- bn4AAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABgACEycAGsjiAB7c/wAe3P8AHtz/AB7c/wAXsN4AAQteAAAAMAAAABMAAAAFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgCZAKYAyAD/AMgA/wDGAP4ALgCWAAAAQgAA
- AA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA
- ABUAAAA2AAACYQAVodcAHtv/AB7b/wAe2/8AG8vlAAIPGwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAJTF8AHdr8AB7c/wAe
- 3P8AHtz/AB7c/wATjsYAAAJUAAAALQAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAABwAEAC0ANIAyAD/AMgA/wCeAOQAAwBpAAAAKQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALgAAAFUADFuqAB7a/wAe2/8AHtv/AB7b/wAN
- Y24AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAADAAACEgASj6EAHtv/AB7c/wAe3P8AHtz/AB3b/wAOa68AAABQAAAALAAA
- ABIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIALgDDAO8AyAD/AMcA/wBP
- AK4AAABNAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADgAA
- ACgAAABNAAUnhgAc0fgAHtv/AB7b/wAe2/8AGbvOAAAEEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIPIAAZ
- vNQAHtz/AB7c/wAe3P8AHtz/AB3Z/QALWqIAAABQAAAALAAAABMAAAAFAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAF0AWgDHAPwAyAD/ALMA8gAOAHgAAAAyAAAACAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA
- AAQAAAAEAAAAAgAAAAEAAAACAAAABAAAABAAAAAnAAAASQABDXQAGLXmAB7b/wAe2/8AHtv/AB3a+gAH
- PUQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAUtPAAd1/MAHtz/AB7c/wAe3P8AHtz/AB3Y/AAL
- WaIAAABSAAAAMQAAABYAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAIUAkADH
- AP8AyAD/AG0AwwAAAFgAAAAcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAATAAAAHAAAACAAAAAbAAAAFgAAABYAAAAeAAAAMAAA
- AE4AAAdxABWb1wAd2v8AHtv/AB7b/wAd2v8AEoyWAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAKAApSYAAd2foAHtz/AB7c/wAe3P8AHtz/AB3Z/AAMW6YAAABZAAAAOQAAAB4AAAAOAAAABAAA
- AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAIAKwAxADIAP8AwQD6ACIAigAAADwAAAAMAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFgAA
- AC4AAABDAAAASwAAAEYAAABAAAAAQAAAAEgAAABbAAEHdwATkNAAHtv/AB7b/wAe2/8AHtv/ABnA1AAC
- EhgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAA5wegAd2/0AHtz/AB7c/wAe
- 3P8AHtz/AB3a/gAPdLkAAARkAAAARgAAAC0AAAAbAAAADwAAAAoAAAAIAAAACQAAAAwAAAAMAAAACQAA
- AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAJgAgAMAA5wDIAP8AjQDWAAEAYgAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAmAAABSwAGMYQABi+OAAEIdgAAAG0AAABsAAAAdAAF
- JpIAFqfgAB7b/wAe2/8AHtv/AB7b/wAc1fMABzo+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAMAAAIPABGBjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB3b/wAUnNUAAhZ6AAAAWAAA
- AEQAAAA1AAAALQAAACoAAAAsAAAAMAAAADAAAAAlAAAAFgAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgBHAMcA+QDHAP4APACcAAAARgAA
- ABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA
- ADEACk6OABzX/AAd2v4AG8jzABWg3QASjdMAFqjiABzV/AAe2/8AHtv/AB7b/wAe2/8AHdr+AA1naQAA
- AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIQABGKmAAd
- 2/8AHtz/AB7c/wAe3P8AHtz/AB7c/wAayPIADFutAAAGcgAAAGIAAABaAAAAWAAAAFoAAABeAAAAXAAA
- AEsAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAACAAEAdwB6AMcA/wCqAOkABgBqAAAALQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALgAWp9AAHdr/AB7b/wAe2/8AHtv/AB7b/wAe
- 2/8AHtv/AB7b/wAe2/8AHtv/AB7a/wASjpUAAAEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAMOABGEjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB7c/wAd
- 2/8AGb/tAA93wgAJRaQABjOaAAhAogAMW7IAEH3EAA94tAACFFUAAAAiAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAYAmgCwAMcA/wBd
- AK8AAABPAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAgAAAAgABez2AAd2v8AHtv/AB7b/wAe2/8AHtv/AB7b/wAe2/8AHtv/AB7b/wAd2v4AFJqfAAAICgAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAEMAA5ydgAd2PgAHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe
- 3P8AHtz/ABarzQAAAyoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiABQAtwDZAL0A9QAZAHMAAAA2AAAACgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABAAE5ekAB3a/wAe2/8AHtv/AB7b/wAe
- 2/8AHtv/AB7b/wAe2/8AHdr7ABGEiAAABQkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAlJTQAbzOQAHtz/AB7c/wAe
- 3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHdv8AAQiNgAAAAcAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3
- ADQAxQD0AIIAwgAAAFIAAAAgAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAABAADHyAAE5OaABzT6wAd2v8AHtv/AB7b/wAe2/8AHdr/ABnBzgAJTUsAAAIEAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAFAAQhJgAWpLAAHtv+AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe
- 3P8AHtz/AB7c/wAd2/sABCQqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGMAxAD6ADIAewAAADsAAAAOAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAhQRAAlIQgAP
- dHMAD3eCAA90cwAIRjsAAAYIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAADCQAK
- UlAAGbrFAB3b/gAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/ABaprgAABAoAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAUAAwCQAJsAoADUAAQASwAAACQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgcABzo0ABB+gwAXr7oAHNPdABzU6AAc
- 0tsAGLbAABKJjAALVU0AAQkJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcADACrAMoAUwCEAAAANwAA
- ABIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAC4AJwCwANMADwBAAAAAIwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAUQB1
- AJMAAAAoAAAAEgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHwAfQAmADsAAAAYAAAABgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAEAAHAHYAbAACABMAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAYAD8AKQAAAAYAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAALQAMAAQAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////8AH//////////////////+AAf/////////////////+AA
- D//////////////////AAAf/////////////////gAAD/////////////////wAAA///////////////
- //4AAAH////////////////4AAAB////////////////8AAAAP///////////////+AAAAAA///////g
- ///////AAAAAAA//////wP///4H/gAAAAAAD/////wD///+A/gAAAAAAAP////4A////gHwAAAAAAAB/
- ///8AP///4A4AAAAAAAAH///+AH////AAAAAAAAAAA////AD////wAAAAAAAAAAH///AA////+AAAAAA
- AAAAA///gAf////wAAAAAAAAAAP//4AH////8AAAAAAAAAAB//8AD/////gAAAAAAAAAAP/+AB/////4
- AAAAAAAAAAB//AAf////8AAAAAAAAAAAf/gAP////+AAAAAAAAAAAD/wAH////+AAAAAAAAAAAAAAAD/
- ////AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAA
- AAAH////+AAAAAAAAAAAAAAAD/+H//gAAAAAAAAAAAAAAB/+B//4AAAAAAAAAAAAAAA//Af/+AAAAAAA
- AAAAAAAA//gH//wAAAAAAAAAAAAD///gB//8AAAAAAAAAAAAA///wA///AAAAEAAAAAAAAP//4AP//4A
- AADAAAAAAAAD//8AH///AAADwAAAAAAAAf/+AD///wAPH8AAAAAAAAH//AA///+AB/+AAAAAAAAB//gA
- f///wAf/gAAAAAAAAf/wAH///8AD/4AAAAAAAAH/4AD////gAf+AAAAAAAAB/8AB////8AD/gAAAAAAA
- Af/AA/////AAf4AAAAAAAAAAAAP////4ADgAAAAAAAAAAAAH/////AAAAAAAAAAAAAAAD/////4AAAAA
- AAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAH//////
- wAAAAAAAAAAAAADw/////+AAAAAAAAAAAAADwP///+DwAAAAAAAAAAH//4D////gPgGAAAAAAAAB//4A
- ////4B//gAAAAAAAAf/8AP///+AH/4AAAAAAAAH/+AH////wA//AAAAAAAAB/+AB////8AH/wAAAAAAA
- Af/AA/////gA/8AAAAAAAAP/gAf////8AH/AAAAAAAAB/wAH/////AA/wAAAAAAAAf4AD/////4AH+AA
- AAAAAAD8AB//////AA/gAAAAAAAA+AA//////wAH4AAAAAAAAHAAP/////+AA+AAAAAAAAAgAH//////
- wAHwAAAAAAAAAAD//////+AAAAAAAAAAAAAB///////wAAAAAAAAAAAAA///////+AAAAAAAAAAAAAf/
- //////gAAAAAAAAAAAAP///////8AAAAAAAAAAAAH////////gAAAAAAAAAAAD////////8AAAAAAAAA
- AAB/////////gAAAAAAAAAAB/////////8AAAAAAAADAAP///////////4AAAAAA4AD///////////+A
- AAAAAeAAf///////////wAAAAAPwAH///////////+AAAAAH+AA////////////gAAAAB/wAP///////
- ////4AAAAAf8AB///////////+AAAAAH/gAP///////////gAAAAB/8AD///////////4AAAAAf/gAf/
- /////////+AAAAAH/4AH///////////wAAAAD//AA///////////8AAYAB//4AH///////////gAGAA/
- //AB////////////4BwD///4AP///////////+AcA///+AD////////////APAH///wAf///////////
- wDwA///+AH///////////4A+AP///wA///////////8AfgB///+AH///////////AH4AP///gB//////
- /////gB/AD///8AP//////////4AfwAf///gD//////////8AP8AD///8Af//////////AD/gA////AD
- //////////gB/4AH///4A//////////wAf/AA////AH/////////8AP/wAH///4B/////////+AD/+AA
- ///+AP/////////AA//wAP///wB/////////wAf/8AB///+Af////////4AP//gAH///wD////////8A
- D//8AA///+A///////8AAB///AAH///gH//////+AAAf//4AAf//8B///////gAAP///AAAB//gP////
- //4AAH///4AAAP/8B//////+AAB////AAAD//Af//////gAA////4AAA//4D//////4AAf////AAAP//
- A//////+AAP////4AAD//4H//////gAH/////AAA///B//////+AH/////8AAP//wP//////////////
- wAH//+B///////////////gP///wf///////////////////+D////////////////////g/////////
- ///////////8H////////////////////h////////////////////8f////////////////////////
- ////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAA0AIAAuAF8ANQBwABEARgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAUARQBqALUA7ADHAP8AxwD/AMAA+gBhAK4AAQAhAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAEACQBlAJEAxQD8AMcA/wDHAP8AxwD/AMcA/wDHAP8ASQCVAAAACgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAXAIIAswDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8AswDxAA0ARgAAAAUAAAAHAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAMAAAABQAAAAAAAAAAAAAAAQAaACkAmgDOAMYA/wDGAP8AxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AxwD/AG4AyAAACmYBABtsAQATYAAAAT8AAAAbAAAABQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA4AAAcsAQAVGgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAC9QAAALPwAAAAwAAAACACgAQgCuAOUAxgD/AMYA/wDG
- AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMMA/gcgbvwOAMP+DgDI/QwAtOsHAGitAAALRwAA
- AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAIAH2QKAJOrAAATCwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEdCQCN0gIAH2gAPgBtALwA9ADG
- AP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wGQHf8MAaj/DgDK/w4A
- 0P8PANb/DQC/7AMALWwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAfBAA/hg8A
- 2PAEAENEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABDbQVX
- T/kAwwD9AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
- AP8FQVb/DgDC/w4Az/8PANT/DwDa/w4A0fUDADJpAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AB0FAEmOEADk+gkAjJQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAABwAQAHYAqADGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wC4APUAxwD/AMcA/wDH
- AP8AxwD/AMcA/wDHAP8ArQ3/CgmW/w4Azf8PANP/DwDZ/xAA3/8OAMvtAQAVQgAAAAIAAAAAAAAAAAAA
- AAAAAAAAAAAAFQQAPoIQAOT6DQC/ygAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAATABwAkADCAMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AK8A7AQY
- PbQEeEH/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/BGY5/w0Avv8PANL/DwDY/w8A3v8QAOP/CgCZxAAA
- AEAAAAAyAAAAKwAAACYAAAApAgAjbA8A3fYPANTiAgAmHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAABgAHwCgANQAxwD/AMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDG
- AP8Aswb5AR8UrQsAme8MB6P/Ap0j/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMED/wgbgP8OAND/DwDX/w8A
- 3f8QAOL/EADn/goAmeILAKraCwCc0AoAkMcJAIzHDgDM7RAA5fYEAEA7AAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwApADHAP8AxwD/AMYA/wDGAP8AxwD/AMYA/wDG
- AP8AxgD/AMYA/wC3C/8IJID/CgCT/wwAsf8MAK7/CxiW/wC4DP8AxwD/AMcA/wDHAP8AxwD/AMcA/wKI
- JP8MALb/DwDW/w8A3P8QAOL/EADn/w4A1PsOANHsEADr+RAA7P8QAOz/EADh7QYAXlsAAAABAAAAAAAA
- AAAAAAAAAAAAAgAAAAsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AaQDEAfwAxwD/AMYA/wDG
- AP8AxwD/AMYA/wDGAP8AxgD/ALoA8gQoSKgGAGKhCwCf8g0AtP8MALH/DACw/wk5ff8AxAL/AMcA/wDH
- AP8AxwD/AMcA/wDGAP8GOWT/DwDR/w8A3P8QAOH/EADn/xAA5PcBABMxAAAKBQMAMgwDAD4PAAARAwAA
- AAAAAAAAAAAAAAAAAAAAAAAFAAAAJgQAOl8BABUTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgUe
- TowEWjjPAIIAtQCfAMgAtgDlAMUA+wDGAP8AqQDZADAAQAAAAAEBABFADQC2+g0AuP8NALX/DAC0/wwA
- tP8GYVz/AMcA/wDHAP8AxwD/AMcA/wDHAP8BphL/DAao/w8A2/8QAOH/EADm/xAA7f8FAFJxAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAM7CAB2rQkAf4QAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAEADxUNALPbBgBanQAAACAACQAGAFMAEgBOABwAGgAHAAAAAAAAAAMEADpyDQC//w0A
- u/8NALn/DQC4/w0AuP8NArb/BIo4/wDHAP8AxwD/AMcA/wDHAP8AxwD/BFtI/w4A0P8QAOH/EADm/xAA
- 7P8KAI+pAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACUYLAKLPDwDP2AEAEg0AAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAEBTDgDQ/AcAZ6YAAAAeAAAAAQAAAAAAAAAAAAAAAAAA
- AAcGAGGcDgDC/w0Av/8NALz/DQC7/w0Au/8NALz/DAyx/wGrGv8AxwD/AMcA/wDHAP8AxwD/AL0F/woU
- kv8QAOD/EADn/xAA7P8NALvQAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAGAAAHQQwArdURAOr3BAA/OwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCAB4kw4A0f4GAFiWAAAAFQAA
- AAAAAAAAAAAAAAAAAAsJAH23DgDG/w0Awv8NAMD/DQC//w0Avv8NAL//DQDB/wsmnP8Avgn/AMcA/wDH
- AP8AxwD/AMcA/wOALf8OAMj/EADn/xAA7f8PANjoAAAFGAAAAAUAAAADAAAAAgAAAAUAAAIzCwCcyREA
- 8P4HAGtsAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICwsA
- oMIOAM77AwA4dwAAACAAAAAdAAAAIQAAADMKAJHQDgDJ/w4Axv8OAMT/DQDC/w0Awv8NAML/DgDD/w4A
- xv8JSXz/AMYB/wDHAP8AxwD/AMcA/wDFAf8IL3b/EADj/xAA7f8QAOX2AgAfcgEAD10AAAJQAAAASgAA
- AFAIAHWxEQDw/woAkZYAAAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAEAGB4NALzjDQDB9AcAarkHAGi2CAB0vwgAfM0MALP2DgDN/w4Ayv8OAMf/DgDG/w4A
- xf8OAMX/DgDH/w4AyP8OAMr/BnJW/wDHAP8AxwD/AMcA/wDHAP8Bnxj/DQO8/xEA7f8RAPD/EADg/xEA
- 8P8RAO39EADi9xAA4fcRAPD/DQC8xAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDADdADQDD6A8A0v8OANL/DgDS/Q4AxfgNAMH7DgDQ/w4A
- zf8OAMv/DgDJ/w4Ayf8OAMn/DgDK/w4Ay/8OAM7/DgXK/wObLv8AxwD/AMcA/wDHAP8AxwD/BVBY/xAA
- 4/8RAOr4CAB7hQwAqZYNALqnDQC1tQ0AurYLAKOQAgAoFQAAAAAAAAAFAAAABAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEQAAAAUAAAAAAgApDAcAaicHAGwnBQBPGwIA
- HhYKAI66DwDU/w4A0f8OAM//DgDN/w4Azf8OAMz/DgDN/w4Azv8OAND/DwDT/w0Xu/8BtRP/AMcA/wDH
- AP8AxwD/ALcJ/wsOqf8QAN7rAAAODwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABgBABM+AQAeIAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEBQBZbwEAEkgAAAAPAAAAAQAA
- AAAAAAAAAAAAAAAAAAQIAHSbDwDX/w8A1f8PANP/DwDR/w4A0P8OAND/DgDQ/w8A0f8PANP/DwDV/w8A
- 2P8LM6H/AMMF/wDHAP8AxwD/AMcA/wR1Of8MALHUAAABBwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAALAUA
- SYsLAKCrAAAKBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAhKg0A
- wt0DADh2AAAAGAAAAAEAAAAAAAAAAAAAAAEFAFFwDwDb/w8A2P8PANb/DwDV/w8A1P8PANP/DwDU/w8A
- 1P8PANb/DwDY/w8A2/8PAN3/CFt3/wDHAP8AxwD/AMcA/wDDAv8EJ0S8AAAABgAAAAAAAAAAAAAAAAAA
- AAcAAAQ8CQCCuRAA4usCACwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQYAYGwPAOX6BQBYkgAAABsAAAABAAAAAAAAAAACACM4DwDd/Q8A3P8PANr/DwDY/w8A
- 1/8PANf/DwDX/w8A2P8PANn/DwDb/w8A3f8QAOD/EAHh/wWGSf8AxwD/AMcA/wDHAP8AlwDfAAIAKQAA
- AAAAAAAAAAAABgAABkALAKDMEQDy/QYAWlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwUKAJajDwDq/gYAXZQAAAAYAAAAAQAAAAAAAAINDQC/3BAA
- 4P8PAN3/DwDc/w8A2/8PANr/DwDa/w8A2/8PANz/DwDe/w8A4P8QAOL/EADl/w8L2v8CpyX/AMcA/wDH
- AP8AxwD/AEcAlAAAAAsAAAAGAAADOAsAo80RAPP+CAB6eQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4PCwCzwQ8A5/wFAE2EAAAAGgAA
- ABAAAAAVCABymBAA4/8QAOH/EADg/xAA3/8QAN7/EADe/xAA3v8QAN//EADh/xAA4v8QAOX/EADn/xAA
- 6/8NIsP/ALwN/wDHAP8AxwD/ALEA8gAJAXQAAAVWCQCKvhEA8/8KAJGRAAAKAwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAXGQ0A
- ytoPAN/3BgBeowQASZIFAFObCAB0uxAA5f8RAOX/EADj/xAA4v8QAOH/EADh/xAA4f8QAOL/EADj/xAA
- 5f8QAOf/EADq/xAA7f8RAPD/C0Se/wDHAP8AxwD/AMcA/wRmPPoPANL2EQDz/wwArbEAAA8GAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAIALTAOANnoEADs/xAA7P8QAOz/EADq/w8A3/4RAOn/EQDn/xEA5v8RAOX/EQDl/xEA
- 5f8RAOb/EADn/xAA6P8QAOr/EADt/xEA7/8RAPL/DgDM0wF0GKsAxwD/AMcA/wDABP8IHXbdCgCNhwEA
- HAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACADMXCQCRUAkAmVcKAJtMCAB/OwMANzMOAMvbEADq/xAA
- 5/8QAOj/EQDo/xEA6P8RAOn/EADq/xAA6/8QAOr/EADn/xEA7v8RAPD4BABCPQAoAAgApQDCAMcA/wDH
- AP8AiwDTAAEAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAADADE7DQC98gsAqf8OAMn/EADp/xEA7P8RAOz/EADt/xAA6/8NAMH/CwCm/w0Avv4HAG1yAAACAQAA
- AAAASAAdALgA5gDHAP8AxgD+ADoAhQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAUBwBnvQ0Avv8OAMj/DwDh/xEA7/8RAPD/EQDw/xAA4v8MAKz/DQC9/w0A
- xe4AAA0iAAAAAAAAAAAAAAAAAGAAQADFAPkAxwD/AKoA6wAFADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVDQC57w4Ayv8QAOH+EADh+BIA8/8SAPP/EQD0/xAA
- 5/0OAMj6DgDN/xAA4f4CAC0xAAAAAAAAAAAAAAAAAAAAAAB6AHQAxwD/AMcA/wBbAKcAAAAOAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCgCYqRAA4/8NALvDAQAaNAUF
- eokJAIlqBgR8iQIBOFQGAGFuEADh8gsAqa4AAAwGAAAAAAAAAAAAAAAAAAAAAAAoAAMAmwCsAMcA/wC7
- APYAFQBSAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAlBAkA
- ii4AAA0SAAYyagAKTV4AAAAAAAENHwARhbMAAAAZAgArBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAARQAQAK8A1gDHAP8AfQDHAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAMwABeq2QADHCIAAAAAAAAACQAWpsoACEJ3AAAACQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAE4ALQDBAPMAxQD9AC0AdQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AClCPABiy0QAAAAUAAAAAAAAAAQANZYQAGsLrAAIPOQAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2AF0AxwD+AJ0A4QABACoAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABCDwAGr/rAA5rgQAAAAAAAAAAAAAAAAAD
- HS0AHdb5ABGEtwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAEAigCTAMcA/wBM
- AJkAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwANYqAAHdX4AAUnJgAA
- AAAAAAAAAAAAAAAAAAUAE5OxAB3a/gAHOG0AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAALgAJAKcAxQCzAPEADgBGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAIQTAAb
- yvMAE5GpAAACAgAAAAAAAAAAAAAAAAAAAAAABSg2AB3W+AAZvecAAQ08AAAAAwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAEgAHgC7AOoAbgC5AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAEAAAAnABKGwgAd1vgABSsvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAA92jQAd2/8AFJbJAAADKwAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAEYAvwD2ACIAZwAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAADAAAAAwAAAB0ACUiQAB3Z/gARgZUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJDQAX
- r8sAHdv/ABF/uAAAASsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgB8AI8A1gAA
- ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAzAAAQtUAAAASgAIPpAAHM/4ABm/3AACFhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAEICMAGsLgAB3b/wASicMAAQhGAAAAGgAAABQAAAATAAAABAAAAAAAAAAAAAAAAAAA
- AAAAJgAEAJwAsgA8AIYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAOaZUAHdb8ABrC8QAd2v8AHNDwAAYzNAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCYrABrB3gAd2/8AGbzrAA1irQAKT54ADF+gAAEJIwAA
- AAAAAAAAAAAAAAAAAAAAAAAAADkAEgCVAMcACAA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAJS1cAG8jjAB3a+wAYt88ABz03AAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMcGwAVoLYAHdv+AB3b/wAd
- 2/8AHdv/AAg/TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfADUAWgCVAAAADgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSsGAAxkEgAC
- GAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
- DQMAC1c/ABSXhwAWo5IAEYBnAAMdCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZABaABcAPgAA
- AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAFAABAEUASgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAC4ACAARAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4H/////////AP////
- ////4Af////////AAH//P///4wAAH/w////gAAAP+D////AAAAfwf///8AAAA+B////wAAAB4P///+AA
- AAAB////wAAAAAP////AAAAAA4///8AAAAAPD///wAAAAH4P///gEAAAfB///+BwAAB4P///8HAAAAA/
- ///4AAAAAH////wAAAAA/////AAAAAE////xAAAAfD////BwAAB4P///+DAAAHB////4GAAAYP////wI
- AAAA/////gAAAAH/////AAAAA/////+AAAAH/////8AAAA///////wACB///////AAcH//////8AB4P/
- /////wAHgf//////gh/B///////CH+D//////8IP8P//////hw/wf/////+HB/g//////weD/D/////+
- D4H+H/////APwP8f////4B/gDw/////gP/APj////+B/+A/H////+P/8D+P/////////4//////////z
- /////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEANgBHAGQAmQBRAIoACwAmAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAGUAhQDGAP0AyAD/AMgA/wCaANwAAwAaAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA0ADQCAAKsAxwD/AMgA/wDIAP8AyAD/AMgA/wBR
- AJQAAAAZAAAAGAAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgsBABY8AAAABQAdAB4AmADKAMcA/wDHAP8AyAD/AMgA/wDI
- AP8AyAD/ALgA+QcOZtkKAJTYBwBurwEAF0cAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMA
- LmIDADo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAW4sCICiPAK0A4wDHAP8AxwD/AMcA/wDI
- AP8AyAD/AMgA/wDIAP8AyAD/A3U0/w4Awv8PANH/DwDN9gQAQXQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
- AA8FAFGLCwCkswAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAD0IYQC6CP8AxwD/AMcA/wDH
- AP8AxwD/AMgA/wDAAPoAyAD/AMgA/wDIAP8AxQH/CSZ//w4Az/8PANj/DwDa+gMAM1oAAAABAAAAAAAA
- AAAAAAAKBQBQiA8A1eYDADAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBWAHAAwwD7AMcA/wDH
- AP8AxwD/AMcA/wDHAP8AngDiBxhl1wGuFf8AyAD/AMgA/wDIAP8BmRv/DQC8/w8A1v8QAN//DgDD5QIA
- JGkBABxVAQAPSQQAO3sPAODzBQBLOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQBWAMcA/gDH
- AP8AxwD/AMcA/wDHAP8AxwD/AaMb/wcOcOwMAK7/CiaK/wDBBf8AyAD/AMgA/wDHAP8GSGD/DwDU/xAA
- 3v8QAOb/DgDQ+BAA6fkRAO3/EADo9wcAbWEAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAABH
- ADABohPpAMYA/gDHAP8AxwD/AMcA/wCnANoEFEBwCQCC0Q0AtP8NALH/B0xt/wDHAP8AyAD/AMgA/wCz
- C/8MCq//EADd/xAA5f8MALHLAAAECQMANgkBACAFAAAAAAAAAAAAAAADAAAKMwQARlgAAAAAAAAAAAAA
- AAAAAAAAAAAAAAUAU2QGDlijAC0ARQCAAFkAgQBhACEAEgAAAA8LAJ7gDQC6/w0At/8NALf/BXdJ/wDI
- AP8AyAD/AMcA/wRrQv8PANj/EADl/xAA6PoBABEaAAAAAAAAAAAAAAAAAAAABAIAHVANALbTAwAtGwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAADBAsAm74HAGWeAAAADAAAAAAAAAAAAAAIHw4AwfwOAL//DgC8/w4A
- vP8NBbj/Ap4n/wDIAP8AxwD/AMMC/wofl/8QAOX/EQDu/wQAREIAAAAAAAAAAAAAAAIBABtKDwDS7AcA
- ZVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAfGw0AvOQFAEyCAAAAFQAAABUBABxLDgDJ/w4A
- xP8OAML/DgDB/w4Awv8MF63/AbcP/wDHAP8AyAD/ApAm/w8A1/8RAO7/BgBWhwAACD8AAAA0AAALSA4A
- w+IKAI6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA6PQ4Ax/QJAIzPCgCR0woA
- meUPAM7/DwDK/w4Ax/8OAMb/DgDH/w8Ayv8KNZb/AMUC/wDIAP8AxwD/CD14/xEA7v8QAOP6EQDw/xEA
- 6fsRAOr7DACvswAACQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAADBgBXNwsA
- nHAKAJBpBwBldA8A1P8PAND/DwDN/w8Ay/8PAMz/DwDO/w8A0v8IX27/AMgA/wDIAP8BrRH/DgbM/wYA
- XlcFAFQSBwBuIggAcyAAAAUCAAAAFwEAFiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA5QwMA
- MF8AAAAJAAAAAAAAAAAAAAcTDwDU+g8A1f8PANL/DwDR/w8A0f8PANP/DwDV/w8B2P8EikP/AMgA/wDI
- AP8GYVX/BABFNwAAAAAAAAAAAAAAAwAADToKAI6zAwAzHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAIDCwCitAYAXI0AAAANAAAAAAAAAAUMALHTEADb/xAA2P8QANb/EADW/xAA1/8QANr/DwDd/w8M
- 0/8CqiD/AMgA/wC/BP8AHANLAAAAAAAAAAMBABpLDgDK5QcAaFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAACAB8YDQDN3gYAYpAAAAAJAAAAAQgAdI0QAOD/EADd/xAA3P8QANv/EADc/xAA
- 3v8QAOH/EADl/w0jv/8Avwn/AMgA/wCFAMoAAAAbAQAURA8A0OkJAIqAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADMsDgDa7QYAXJQDADJuBgBbmRAA5f8QAOP/EADh/xAA
- 4P8QAOH/EADi/xAA5f8RAOn/EQDt/wtHmv8AxwD/AMcA/wQyRtQOAMvpCwCfnQAAAgEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAExFDQDK1g4A1+MOAMjUDQDE2hEA
- 6P8RAOb/EQDm/xEA5v8RAOf/EADp/xEA7f8RAPH/DgDCyQCEC6EAyAD/AaQV/AcDZHoBABUFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAABABgRDAC32A0Awf8QAOX/EQDr/xEA7P8QAOb/DQC8/w4Ayu8EAD4oADMABgCqAMcAyAD/AFYAlgAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEGAFWWDgDG/w8A2/8RAPD/EQDx/w8A1P8NALz/CgCXvAAAAAIAAAAAAFoAHAC5
- AOkAugD2ABQAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAcYYQAN/9CAB3iAoCpqkLAaqqBwBrgg4AzucJAIyRAAAAAAAA
- AAAAAAAAAG8AQwDGAPwAdwC7AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAgMAMxoABzZlAAg/NQABCREADmqXAAAECQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAIsAeQDFAP4AKgBbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHQAVnsoAAAUGAAAAAgAU
- lLYABi5VAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAABAKQAsQCYANoAAQAVAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACk+EABKFmwAA
- AAAAAAAAAApQXQAYtN4AAAUaAAAAAAAAAAAAAAAAAAAAAAAAAAAASgAQALIA3ABHAIQAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIKgAa
- vuoACD0yAAAAAAAAAAAAAAYIABm42AAObp4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAwAKwA5gAM
- ACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AA8AD3KsABSWrQAAAAEAAAAAAAAAAAAAAAAACEJFAB3X+gAIP3EAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAgQBgAGgArAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- BisAAAA0AApKjQAbzO4ABi8gAAAAAAAAAAAAAAAAAAAAAAAAAAEADm57ABzT+QAIQXoAAAAXAAAADgAA
- AAUAAAAAAAAAAAAAAAAAkQCWAB8ASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACABORtgAczvgAHdX3AApQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAD3SAAB3Z/QAU
- mdIAEYLBAAg/YAAAAAAAAAAAAAAAAAA5AAgAbACXAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAABzwcABWiWgAKUSYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAC1ZAABampQAYsrEAC1dEAAAAAAAAAAAAAAAAAAAAAABcACAALgBQAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ACUABgAIAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ
- AAEAAAAA/wf///4D///MAD/PwAAfj8AADw/AAAYfgAAAP4AAAGeAAADHwAADh8MAAw/gAAAf8AAAH+AA
- AA/jAAMP4QACH/AAAD/4AAA//AAAf//AAH//wAh//+AcP//gPj//8B4f/+MfD//jD4//w4fH/geA5/4P
- wOP/H/Dx////+f////0oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAEAAQB0AHMAkQDIAEYARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAwSABAACQCOAKAAxwD/AMgA/wCmAOMFBEx4AwAyQAAAAAEAAAAAAAAAAAAAAAMCACApAAAAAAAA
- AAAAAAAAAhgtOwCTDNwAxwD/AMcA/wDGAP4AyAD/Blhd/w8A0f0GAF90AAAAAAAAAAIHAGSCBwBrNAAA
- AAAAAAAAAFYAFgCsANoAxwD/AMcA/wKFIvMIO2z1AMYB/wC8Bv8MErL/DwDZ+AgAfqwJAIiuCQCNZAAA
- AAAAAAACAAAAAAA+AAwDXy+8AJEApwCZAJMHBWSMDQC2/wZjW/8AyAD/BHw//xAA4P8JAIV6AgAsAwAA
- AAEEAEJWAwA3HQAAAAAAAAAABgBYNwcAY4QAAAALCAB2mQ4AwP8NAb7/BI05/wDGAP8LK57/CwCksgAA
- BB0FAEddCgCScwAAAAAAAAAAAAAAAAAAAAMHAGlbCgCSngwAq9YOAMv/DgDJ/w0NwP8CrRz/Ap4i/w4B
- w9QPAM6LDACodAAACg8AAAAAAAAAAAAAAAACACcSBQBUagAAAAMJAIZ5DwDW/w8A1P8PANb/DCWz/wDA
- CP8CWiegAAAAAQUASFsHAGpLAAAAAAAAAAAAAAAAAAAAAAcAbkkHAHGHBQBPZRAA4f8QAN7/EADf/xAA
- 5f8KSpT/ALcA8gUNT4cLAJ+CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQCPRw4Aym4MAK+xDwDd/xEA
- 6f8PAN7/DQC6uACjA5sCcx3DAAALAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBTRw0A
- vuEOAc3UDACy2ggAelQAWgAHALIAxwA9AD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAACEdZAAMaEwALU2sAAAAAAAAAAAB9AB8AjQC5AAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAULABB5jwAAAAAAEYKHAAYvMAAAAAAAAAAAAJEARwBXAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAMYAA5qjQANZDMAAAAAAAc0EQAUlrgAAx0mAAAABQAAAAAAegBoABYAFAAAAAAAAAAAAAAAAAAA
- AAAAAAABABWciQASiFoAAAAAAAAAAAAAAAAAC1MhABairQAPc4UAAAAAADkAAgBBAEUAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAJAAkAAuH/
- rEGAM6xBgCOsQQAFrEEAAaxBgAOsQYADrEGAA6xBwAesQeAHrEH4B6xB/GOsQfkzrEHxCaxB44msQf/8
- rEE=
-</value>
- </data>
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="stateViewMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>267, 17</value>
+ </metadata>
+ <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>152, 17</value>
+ </metadata>
+ <metadata name="openModelFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>422, 17</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ AAABAAoAICAQAAEABADoAgAApgAAABAQEAABAAQAKAEAAI4DAAAwMAAAAQAIAKgOAAC2BAAAICAAAAEA
+ CACoCAAAXhMAABAQAAABAAgAaAUAAAYcAAAAAAAAAQAgABx9AABuIQAAgIAAAAEAIAAoCAEAip4AADAw
+ AAABACAAqCUAALKmAQAgIAAAAQAgAKgQAABazAEAEBAAAAEAIABoBAAAAt0BACgAAAAgAAAAQAAAAAEA
+ BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA
+ wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAB3AAAAAAAAAAAAAAAAAAB6KiAAAAAAAAAA
+ AAAAAAAHKqKnAAAAAAAAAAAAAAAAeioqKllwAAAAAAAAAAAHcqKqKiopGQAAAAdwAAAAACqioqKqI5mQ
+ AAB1AAAAAAoqKqJyoqIVlQAAkAAAAACqKiohEaKiOZmZmQAAAAAAOiqiB5EyqiEZcAAAAAAAAAcAAAWR
+ kqKjmZAAAAkAAAAFcAABkZE6KlmQAACQAAAAAJcACZGVGioplwAJcAAAAAAJlxWZGZGioZmZlwAAAAAA
+ AAAJkZGVOqKQAAAAAAAAAAAAAZWZGZIqMAAAcAAAAAB3AAmZkZkZKqAACQAAAAAACXAHWZWZWZKnAJcA
+ AAAAAACXB5mZmZmTKhFwAAAAAAAACZlxmVmZk3ogAAAAAAAAAAAACZmZkVAHpwAAAAAAAAAAAAeZmZmQ
+ AKoAAAAAAAAAAAAHl3mJcAACcAAAAAAAAAAAAAAAcAAAAKAAAAAAAAAAAAAJAHAAAAByAAAAAAAAAAAA
+ dwAJAAAACnAAAAAAAAAAAJAAA3AAAACgAAAAAAAAAAdwAACQAAAABwAAAAAAAAB5AAAACQAAAAcAAAAA
+ AABxkAAAAAeTcAAAcAAAAAAAAAAAAAAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CAB//vgAfv54AH3/OAA5/4AAA//4AH//+A
+ B9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7fz//87+f//ef3//n3+//z+/v/x/h9///
+ +f///////////ygAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
+ AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAHAAAA
+ AAAAB6IgAAAAAAAiqiOQAHAAAqozKhl5AAADd3EyOQAAAABweZKhcAAAAAdRmaKXAAAAAAkZGnAAAAAI
+ CVmTKHAAAAAJmZdzAAAAAACZkAYAAAAAAAAAADAAAAAAcIAAAAAAAAcABwAAAAAAcAAAdwAAAAAAAAAA
+ AAD7////4f///8B3//+AD///gD///9Af///gD///+B///+gH///4D////G/////3///9f///+7////fP
+ ////////KAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZjkACGk/AAR1
+ OQAJIm8ABjlkAAgvdgAJOX0ABFtIAAVBVgAKWlMABVBYAAR4QQAGYVwABnJWADN5XQAJSXwACFt3AFJn
+ XwBFX3UATVt2AAGQHQABnxgAAK0NAAC9BQAAtwoABrQLAA22DQAAvgkAALgMAAC8DQAKugoACr0KAA29
+ DQABphIAAasaAB6oHgABtRMAE7QTABSwFAATuhMAGrYaABm9GQACiCQAA4AtAAKdIwADmy4ABIo4ACyf
+ LAA3jTcAOJk4AAKnJQAgpCAAKaEpACa1JgArsCsAKbspADGtMQA4rDgAPao9ADezNwA7ujsAAMICAADG
+ AAAAwQQABcEFAAXFBQAKwgoAFcAVAAWGSQBGlUYAUZNRAFiTWABKpkoATKdMAE25TQBXpFcAU7tTAFu1
+ WwBmk2YAapRqAGqeagB5mHkAVKFkAG6nbgBsu2wACBuAAAoAkwAKCZYAChSSAAsYlgAaEJ8ACCSAAAsm
+ nAAoO4gAODKVAAwHowALAKYACwCpAAwBqAAMBqgADACtAAsOqQAXDaMADACwAAwAtAAMDLEADQC5AA0A
+ vQARBbcAFAm1AA0XuwAfFLkAHBC9ACUdpAALM6EANC2hADcvpQA3L64APzilAD84qAAuJbYALyS9ADQq
+ vAAmObYAOjKyAEI7sABFPbYAC0SeADxJowA2RawALkG/ADRGuwBHQo4ARUCWAEtGkgBNSZMASUSZAFNO
+ nwBSWpQAVlKYAF5amgBhXpsAWXGGAF9mmwBkZZMAb22WAGVimwBta50Ab3OUAHNxmQB2dJsAcHWcAHt5
+ mgB/fZwAR0GnAExGpABOSKEATEWsAEdTogBIVKYATFepAFdSogBOW7QASVe7AFpUtgBcVrQAW1W8AGJc
+ uwBWYrYAbmugAGllqgBqcqcAfXuiAG5pvgBwbLEAcGu8AGpztQByerMAeHi3AHx5ugANAMEADgDFAA4A
+ yQAOBcoADgDNABIFwwAXC8MAGQ3AABEEywAfE8MAHRHIAB8SzgAOANEADwDVAA8A2QAPANwADwvaABAD
+ 0gAXCdIAEADeABcJ3gAdD9oAAx/WAAAd2gAfE9QAJxzDACIXyAAjF9sAKh3YAA0kxAAMJcwAFCvDABgu
+ wwAdNMsABiLVAA8p0gAEINoALiPHAC0iygA5L8cAIzjHACE3yQA/NcwAMSXTADcs1AAPAOAADwHqABAA
+ 4QAWB+EAEADmABMF5QAUBeQAFgjhABwN4gAYCeUAEADrABgI6gARAPEAIRPiAEY+xQBEO8sAMEPEAFZO
+ xgBSScsAWFHEAGBY0QBzbsAAcmzLAG15ygB9eMIAdYOdAHuBrwB+hbQAeILHAP///wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQ/P0JHAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUQj8/Pz8/UAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEo/Pz8/Pz8/IQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAOT8/Pz8/Pz8/PzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp
+ Pz8/Pz8/Pz8/Pz8EurhwjAAAAAAAAAAAAAAAAAAApQAAAAAAAAAAAAAAAHQAACA/Pz8/Pz8/Pz8/Pz8V
+ Y7fBwr4AAAAAAAAAAAAAAJnKAAAAAAAAAAAAAAAAAAAKPz8/Pz8/Pz8/Pz8/Pz8/C7W5wsTHAAAAAAAA
+ AAAAluewAAAAAAAAAAAAAAAAAEw/Pz8/Pz8/Pz8gPz8/Pz8/F1i5wsPIwAAAAAAAAACa598AAAAAAAAA
+ AAAAAAAAOz8/Pz8/Pz8/PyYUDD8/Pz8/PwJsxsPI5n4AAAAAAADJ0QAAAAAAAAAAAAAAAAA3Pz8/Pz8/
+ Pz8/GhJbYC0/Pz8/Pz5WwcLI5ONyeXZ4eMDrAAAAAAAAAAAAAAAAAE4/Pz8/Pz8/Pz8dXFdoaFodPz8/
+ Pz8rbcLI5ObGze3s7O8AAAAAAAAAAAAAAAAAAABCPz8/Pz8/PyGPjmdpaGgHPz8/Pz8/BcbE5OPrAAAA
+ AAAAAAAAAAAAAAAAAAAAAAD7D0k8KkI/NgAAAG1raWlpDT8/Pz8/ImTE5ObsAAAAAAAAAAAAAKL6AAAA
+ AAAAAAAAepMAAAAAAAAAAGxsa2trbS8/Pz8/PwjB5ObspgAAAAAAAAAAfeAAAAAAAAAAAAAAAMaNAAAA
+ AAAAk7ZsbGtsbGojPz8/P0JZ4ubs3AAAAAAAAAB77QAAAAAAAAAAAAAAAK/BlAAAAAAAnba1tbVsbLVd
+ HD8/Pz8suObu0AAAAAAAAH7uAAAAAAAAAAAAAAAAAAB/vQAAAAAAdbe2trW2tba2ED8/Pz8/Bufj6wAA
+ AAAAou6uAAAAAAAAAAAAAAAAAAAAzruHiIZfbrm3t7a2tra3tw4/Pz8/Fmzs7uju7uvr7vEAAAAAAAAA
+ AAAAAAAAAAAAAM/Gwca6usG5ube3t7e5ub0uPz8/Pwvm7bT49vT0+AAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAnsLBwbm5ubm5wcZvJT8/Px5m7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq8LCxsHBwcHG
+ wsLDc0I/Pz8DewAAAAAAAACXpwAAAAAAAAAAAAAAAADbAAAAAAAAAMTDwsLCxsLCwsPEyBE/Pz9CEwAA
+ AAAAAJzvAAAAAAAAAAAAAAAAAAAA56oAAAAAAMjExMPCwsLDw8TI5ORFPz8/JAAAAAAAfe4AAAAAAAAA
+ AAAAAAAAAAAAqOOqAAAAANrkyMjExMPExMjk5ObFMz8/P1AAAAB97gAAAAAAAAAAAAAAAAAAAAAAAPDm
+ rQAAAKvk5OTIyMjI5OTk5ubs0h4/PxsAAJvu9wAAAAAAAAAAAAAAAAAAAAAAAADg6Y2Sk4nm5ubk5OTk
+ 5Obm5uzu7oA/Pz8Cx+7zAAAAAAAAAAAAAAAAAAAAAAAAAAAA0Ozs7Ozi5ubm5ubm5ubm7Ozu7uFTPz9A
+ XvoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Ozm5uzm7Ozs7OPu7QAAPT8/MAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAALxit+zs7O7stWFsAAAAACo/P1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAIVst+Tu7u7kZWy/AAAAAABCPycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHG95Onu
+ 7u7jvbnkAAAAAAAAPz9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKfm8QCzALQAAOr1AAAAAAAA
+ TT8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAAAAAAAAAAADg/MgAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAACEAAAAAAAAAAAAAABDPwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAmIMAAAD81AAAAAAAAAAAAAAAPyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1P0A
+ AAAA16AAAAAAAAAAAAAAVT9PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ1wAAAAAAo8wAAAAAAAAA
+ AAAAAD0bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTqQAAAAAAANnVAAAAAAAAAAAAAABERgAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAIHXAAAAAAAAALLMggAAAAAAAAAAAAAAQwAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAlcyxAAAAAAAAAACEzJ8AAAAAAAAAAAAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAACV190AAAAA
+ AAAAAAAA3syBAAAAAAAAAAAAAEtSAAAAAAAAAAAAAAAAAAAAAACsy9LM2AAAAAAAAAAAAAAAAN7M1IuR
+ kAAAAAAAAAA6AAAAAAAAAAAAAAAAAAAAAAAA1tnyAAAAAAAAAAAAAAAAAACkzMzMzAAAAAAAAAAAUQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP75AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD///////8AAP/8H////wAA//AP////AAD/4A////8AAP/AB////wAA/4AAP/9/
+ AAD7AAAf/P8AAPwAAA/4/wAA+AAAB/H/AADwAAAD8/8AAOAAAAAH/wAAwAAAAA//AADgAAAB//8AAOAc
+ AAH/nwAA8/wAAP8/AAD5+AAA/n8AAPj4AAD8/wAA/PgAAPj/AAD+AAAAAf8AAP8AAAAD/wAA//gAAP//
+ AAD/+AAA/n8AAP38AAD8/wAA/nwAAPn/AAD+PAAAc/8AAP8cAABj/wAA/4AAAAf/AAD/wAAAD/8AAP//
+ AAYf/wAA//+ADw//AAD//4APj/8AAP//gA/H/wAA//+Kz8f/AAD///9/4/8AAP//93/z/wAA///nP/n/
+ AAD//+ef+P8AAP//z5/8/wAA///Pz/5/AAD//5/H/38AAP//H+P/vwAA//4/8f+fAAD/8H/4H98AAP/4
+ //wf7wAA/////z//AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1NAAZH3oACSZ/AAg9eAArMXwALTx9AARrQgAFd0kABmFVAAZI
+ YAAHTG0ACF9uAC5UZQABmRsABrkGAAC/BAAAswsAAbcPAAC6CAAAvwkACbwJAAOlFwABrREAAa4VAAGj
+ GwAdqR0AFr8WABm0GQActhwAApAmAAKeJwA1njUAAqogABaqJwAjpyMAJaYlACWzJQAjvCMANa01ADi8
+ OAAAwwIAAMYAAADBBQAEwgQAAMgAAASKQwBEm0QAU5lTAE6/TgBUqVQAappqAHufewBesWQAZqJmAGin
+ aABpvmkAdaB1AHquegAKH5cACiaKAAo1lgA1LpgADACuAAwKrwAMF60ADQCxAA0AtgANALoADQW4AA0A
+ vAAiGqMAKB+pAA0jvwAvJ6QANCyjAC09qwA3MKEANSy+ACE1vQALR5oAPkqgADVFsgBUUJsAU12fAF9k
+ lABlYZ8AaWacAGxpmwByd5oAU0yvAEpDsgBJQbQAUku9AFNMvwBJVrEAUl+3AGFppQBua6AAcm+mAGhw
+ pgB2dKAAdXKkAHZ0pQB5d6EAf32jAHt4pQBkbrQAc269AHZysgB7d7YAfHm0AA0AwQAOAMYADgDKAA4A
+ zQAOBswAEAPBABcJzgAYC8kAHRDNAA8A0QAPANUADwzTAA8A2AAPAN0AFAfRABAA1gATBdQAEADaABMF
+ 2gAQAN0AAh7ZAB8S3AAmG8MAIhbPACYayQAmGs8AKR3JACAT1QAjFtQAJBjSACYZ2QAoHNsAByLPABUs
+ wwARKs8ABSHVAAgk1gAxJ8IANizCADAlzAAnPMIAPTTAACwh0wAzKdIANivRABAA4QAUBeMAEADlABoM
+ 4QAQAOkAFATpABEA7QAXCOgAEQDwAEE2zgBUTMYATl7JAFxWxQBaaMUAaGLDAHx3wgCAfbMAg3/EAHGB
+ hgB7gKMAf4a5AFAAFwBwACEAkAArALAANgDPAEAA8ABJAP8RWgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R
+ 3wD///8AAAAAAC8AIABQADYAcABMAJAAYgCwAHgAzwCOAPAApAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x
+ 5QD/0fAA////AAAAAAAsAC8ASwBQAGkAcACHAJAApQCwAMQAzwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR
+ /wD5sf8A+9H/AP///wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMAsAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx
+ /wDPkf8A3LH/AOvR/wD///8AAAAAAAgALwAOAFAAFQBwABsAkAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR
+ /wCMcf8AppH/AL+x/wDa0f8A////AAAAAAAAAAAAAAA2OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAA6Ki0tJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMi0tLS0tMwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAACctLS0tLS0VBUpTAAAAAAAAAAAAAAAAAAAAAAAAZ68dLS0tLS0tLS0BcHl2AAAAAAAAAGVeAAAA
+ AAAAAAAAEy0tLS0tLC0tLSoDeXyCAAAAAABojgAAAAAAAAAAACwtLS0qKhoGGC0tLQ5Gep2IAAAAAKAA
+ AAAAAAAAAAAqKioqLS0ZAj88Ky0tLQp6g59+pKOkAAAAAAAAAAAAACIqKioqJQA+Q0ILLS0tEUCDn5kA
+ AAAAAAAAAAAAAAAAAFUAAAAAAEhEQ0MILS0tB3yfogAAAAAAAJYAAAAAAAAAXFYAAAAAdXVGRkUfLS0p
+ O5+lAAAAAACLAAAAAAAAAAAAhmkAAABycXB1cEESLS0efKNqAAAAiqwAAAAAAAAAAAAAd01LR3NycXFx
+ cz0qLS0Eo56loqKnAAAAAAAAAAAAAAAAAAAAenlzc3NzeQwtLRd0AAAAAAAAAAAAAAAAAAAAAAAAAACA
+ f3l5eXp6fC4tLQkAAAAAAFoAAAAAAAAAAABdZgAAAE6BfH9/f4GDeyEtEAAAAACJAAAAAAAAAAAAAACa
+ YwAAbZ2Dg4ODg52fSRQtIAAAjK4AAAAAAAAAAAAAAACFYgBXn52dnZ2dn6OjUCoqDYerAAAAAAAAAAAA
+ AAAAAACbj5yXoZ+fn5+ho6WmNS0WAAAAAAAAAAAAAAAAAAAAAAAAAACVcJ+jo59GeAAAKC0zAAAAAAAA
+ AAAAAAAAAAAAAAAAAFhxgaWlekZbAAAAGxUAAAAAAAAAAAAAAAAAAAAAAAAAb4NuqamtjWwAAAAAKi8A
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAXwAAAAAA
+ AAAxJAAAAAAAAAAAAAAAAAAAAAAAALBrAAAATwAAAAAAAAAmNAAAAAAAAAAAAAAAAAAAAAAAkQAAAACY
+ YQAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAFRgAAAAAACTAAAAAAAAAAAwAAAAAAAAAAAAAAAAAABZkgAA
+ AAAAAACTAAAAAAAAADgAAAAAAAAAAAAAAABfkJQAAAAAAAAAALGETFEAAAAAADcAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/z////wf///4D///8AH//4AA/n/AAHz/gAA9/wAAA/8CA
+ B//vgAfv54AH3/OAA5/4AAA//4AH//+AB9/zgAe/+YADP/yAAH/+AAH//+AY///gHP//4B5///9/f//7
+ fz//87+f//ef3//n3+//z+/v/x/h9///+f///////////ygAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAABHw/AAZYXQAGY1sAEUJxAAC8BgANug0AAq0cAByvHAANiiwAAp4iAASN
+ OQAjoS0AJbglADeoNwAAxgAAAMgAAADACAA4wjgAPZNSAEasRgBYtlgAX7hfAEWJZQBgl3cAZMdlAGzE
+ bAALK54ADQC2AA0BvgAMErIADCWzAC8lvQAzKbgACkqUAFhTpwBXUa0AVE2/AEdVswBSYL8AamasAHp+
+ oQB2dakAcnmsAH57rgBnYbsAcHizAHt4swAOAMAADQ3AAA4AygAPANUADwDdABAC0QAVB9oAEADeACke
+ xQA2K80ANivVABAA4AAQAOUAEQDpAFZOxwBQR80AfHTkAIB9rwCCfc4AeoG1AHiBvAB2gckAAM9AAADw
+ SgAR/1sAMf9xAFH/hwBx/50Akf+yALH/yQDR/98A////AAAAAAACLwAABFAAAAZwAAAIkAAACrAAAAvP
+ AAAO8AAAIP8SAD3/MQBb/1EAef9xAJj/kQC1/7EA1P/RAP///wAAAAAAFC8AACJQAAAwcAAAPZAAAEyw
+ AABZzwAAZ/AAAHj/EQCK/zEAnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQ
+ AACOsAAAqc8AAMLwAADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBb
+ AACQdAAAsI4AAM+pAADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAi
+ AABwMAAAkD4AALBNAADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8D
+ AABQBAAAcAYAAJAJAACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAA
+ AAAvAA4AUAAXAHAAIQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP//
+ /wAAAAAALwAgAFAANgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R
+ 8AD///8AAAAAACwALwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx
+ /wD70f8A////AAAAAAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R
+ /wDcsf8A69H/AP///wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx
+ /wCmkf8Av7H/ANrR/wD///8AAAAAAAAOAAAAAAAAAAAAAAAAABYPEAgAAAAAAAAAAAAAAAwPDw8QAjUA
+ AABBAAAAAA0PDwkEDwUeNiMkAAAAAAAXFRoqHAMQATsAAAAAAAAAACwAKDAdCw8bJQAAAAAAAAAALSEy
+ MjEHCjlAAAAAAAAAAAAAMzMzHxEYAAAAAAAAAAAvADs3NzwiBilCAAAAAAAAAAA+ND00PxkTAAAAAAAA
+ AAAAADg6IAAAEgAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAALgBEAAAAAAAAAAAAAAAAKwAAACYAAAAA
+ AAAAAAAARQAAAAAAJ0MAAAAAAAAAAAAAAAAAAAAAAAAAAPv/AADh/wAAwHcAAIAPAACAPwAA0B8AAOAP
+ AAD4HwAA6AcAAPgPAAD8bwAA//cAAP1/AAD7vwAA988AAP//AACJUE5HDQoaCgAAAA1JSERSAAABAAAA
+ AQAIBgAAAFxyqGYAAHzjSURBVHja7F0HgBPV1v4mfbPZvuwCIkXFhr377A1siGJBUECaIgpYAQEFUWkq
+ IlhApAkWREFQsfvs79fnsyv6LA87vWxJT+Y/ZyY3mWTTN9nNLjl6SXaSzNy5c8936j1XQp7ylKfdlqTm
+ 7kCe8pSn5qM8AOQpT7sx5QEgT3najSkPAHnK025MeQDIU552Y8oDQJ7y1LJJwmEw4id4UQdZc1xO7sd5
+ ylOeWipJ6AIbzkAZluBPggDB9DLyAJCnPLVqklAEE8YR+z+MD/AXnHTMH2h5AMhTnlo1GaDHZPTGj9iK
+ pfgYKsMz83sRAoGElAeAPOWp5ZEO5+EIXIL+uJ5goF5hdh81NzUP8hpAnvLUaomdfu0wE49jIibhE/wK
+ VeIz87MZIDSAJE+WpzzlqaWQhGJYyOZfiN/wCybg0cBxlvp2qADAmkBS0l89YZ7ylKeWQnpMJ6X/MAwn
+ 5f9SbFGYniV+faCxFpC09GfKA0Ce8tQySEcsfwZGY4Wi/C/B21CZnUGghpoDKhgkLf2Z8gCQpzzlPkk4
+ FXuRxf8KNmEzBpMWYFdUfVb5d1GrpeZCitJfPXGe8pSnXCYJbWDDQ1iGPdEDYzAIH+BnqAzPzL8Tqvqf
+ ku0fOnme8pTbJEW8j2yC5IiGKK8tjSRifQPuxV1k999CjP8cxmEusTqr+qz2b4cKAq507zEPAHnKNZI0
+ r9x0gaY/x4IOexhx3IkmHLK/BfsagAr6QiE1Hem+Oz3A5u0+/L3Ojh93+fDRaw58t8UfDItpk2NaCiDo
+ MAC9MZwsfhcp/UPp3c/YBlXib4UKAEL6N2qw85Sn5iYt4ysMb5FgOdWCrv1s6He0Bb0MErpIKcxZv4xa
+ ux8fv2LHywtr8dzPXmyWVWYRtnIuA4EO3XEgbsc60gE64Ak8iHl4hXrMdj+DwGao0l8k/qRFeQBoSJES
+ SDLRwyjSoYBmZQE4FKMOuI/+cezyw+FpmH+dyxMr10iMt5D0hrY6lFxuwxm9bRjUTo+TJAmmxl6k3o9v
+ R21Gv3fd+C9Ub3laNnOTjUkXVOMRrEQZTsQGfEuyfzJZ++zs20FtI1QQYM9/yo6/8AvliamB9Kkkhj/A
+ gE6nWXFUZwOOP8KM/Sw6dKYvKJORZo7bLePXjx34kiTL68vq8K8/fcrDEepm4Gt5ikMCZBlUDUUSrCTt
+ zxhShJvLDTgaGZ6fP3uwrt8mDNrmVyRnSjnzTTomZbDgAczE/rieeunGDHr/Ij6FavdvggoAtUgj7Nfw
+ Yrs3aZ1JerIpDWRY7tG7EGedYcVF7Q04lj4okhKMkixDrpfx+Zo6LF1MquavPmxBHgjikda+Z+Y3nkAA
+ e2MpxhxqRm+Jl7pkgUhl29V3E875zI2voTrOGs1AGScd3fto9MdlpPCz5vMxPsA4PEqynpmf1f6/oEr/
+ tMJ+kbQ7A4B2EhqMgHlUMS66shgTC3XYKxVbUxABgX+bD5/M2IlJrznwgUMOZmYlvTijlZNW01IYv1iC
+ bUQxLu9bhFutOnTI9oS8ewcuWVKLf0JNoEk5cy7LpEMfHEcA8CK9K0cdaSq3kvz/HD9BZfo/oWoAdVDB
+ q9G0uwMAMz+r9OajTOi6qAqrLRL2UD5sxMh4Zex4xY7779iOR+vk4MPa3f0DWlufJbxxXz3a31aGcScU
+ oJ9OgrkpOjFhO/quqFMAgFVosYY+F0hCB7L7l+J1FOJgmiUyVuMl3IfnqIcc62fJzwDAnn8GrozMo90Z
+ AHgikuBXJl7hxFIMGlCEe8SHjQEAJtIG3B86sHTcNkzcJIfZnMrHzX3zTUxh2hY18ykWHDSlDPeRmXUM
+ jbWuKTpBwGy/cjP6ferCf6Am0LATLe0QWkbHp5rsfjXZ52LlyEb8jeuI/f+kV9Xm/x2q9Ldnss+7MwCw
+ CqowP7Wie8sxo1chLhEfNhYAmAgEfN+4sGbcdoz6r1eJ2+6OIKB19BmJ+y1DbTjnmlJMt5HMy8Q4J0tf
+ u/DvAZsxulZWpCk7bBsVQ88g6XEvbsaJmEojpace+fAInsKTeIc+Y38SMz/3mUGrUWG/SNqdAYAlEYf1
+ iqmV3V+B+3pa0UN8mKmJSU9K/t2N14ZtwaBffMEHuLuAgJb5TTTgBXeWYdDFNkwySArwNhk5/agn9f/u
+ NXa8ATWJJlcAQIfhOA/9ieH1sClHvsd/cS1BgENx+v0BFQAYCBod9ouk3RkAWP3nAS+lVjmzAndeaMU5
+ 4sNMSibm8p9dWH3pJgypQ3AJZy6GoDJJgvkVe58QoHBuJW4+qwC3pKvyk0bFg+bf7kftejf+/t6DHbt8
+ cPAgFupg7mKAra0eRXsYUF5Gr/rA/N7ow8YHduKJF+x4CyojsUONwZifRXP6AHQ4EvuQov8aGQCdld66
+ SUDcSMbAf/AdVKnPBT/YDOAoQMZzF3ZnAGDnXxG1CmptBtlw4W1luEV8mA3V9J92PHLdVkzwqEieUumm
+ FkZae99EKlbJA20w5WQLrqJxTXlk/TJkZvp19fjmLQfWf+zCH96GyTzatGGpXAfTPkYUkY3n/tSN7wkl
+ mPFZ8gvmb24nICf7VGA2VpD9f7pyhO/kdfwLk/AMVHufmZ+l//ZAXzM+V3Z3AGD1nwGgqoMe+z/XFlNp
+ 4lQqAxNlZGQ1j9THIUKaZbpUQYImsufpOoyasgNP+sPj0K0JBMKYv0xC+exKTP2HBX1TZX4e7x1+1K2u
+ x6dP1OLjP31BDzg3H2IDgNAweHzFenl2xO4IvNYgFAZsjrHnyj5mzMI0dMNoiHGpRR0G4gGS+8z4v0EF
+ ABH2y4qpsjsDAJsAQQ2AWvVlheg+vgwDrBKszNw+GX6egP/zYNv3pHJ+5cbWGj8cegn6NmSvHWdBhyNN
+ 6ETvEyYLCSJbdNuYbbj8FQchvToBRTy3NYBAmKe/UELZgxWYckoBrkxV7Xf54XnPifVzd+Ht7zyKHSxK
+ Xrk045YMAPBv2NZniV8XeLWjOROBjDQ+16Iv/cfJPlblGPdiPl7CErwJ1e7/H9SwH4NWRh1/WtqdAYAn
+ qfABMAhU0oEqYupDzrfiGGJ0z79d+PtHDzZu8Coqo3ZFmZjkhk4GVFxhwxGX2HA4rxdI5sJbvfhi5FZc
+ SarpL1Afbi7npSdLYZKfmX9aOcafY8UQYv6kM/tY6m/2YSfZ7K+tteMzd0haMxM7A00LAEKF1yHkcBQA
+ wJ+7Ar/hczgCjY81lwmmwwU4FmOwikalbfDoBpL7QwkC6hTJz8zPr1uQZT/F7gwAPFGYYVkLKNM0BgT2
+ UHOIUJRbjjbZlIlOzcLtBDP2nlSOc7sYFW0iLnHq8OcurBq2BdfXyGGRgZYKAlqHn5k0qOK7ynFTTyuu
+ 16WwkIeZn8bl50k7sHq9R1F/hdTmJhhYqwEIUNamdGs1AH9gbD2a34m/m2O8JeyHdrgPz9MsOS541Etz
+ azyW4z0lP2FDoLEDsAZZ1lJ2ZwDgScJMzioYg0BxoPF7BgZj4HtexAYAc+C7DBi2joTo91fgwsPM6Jzo
+ 4n4Z7uW1uG3aTiz0htdza2kgoGV+Ew2IbVwZBvWz4Q4ylSzJnoTGw/9CPf5v6k6s2+lXwl88+WsDjaW/
+ 1gQQWpOWibUAIOa12CxDC+KRv2u6caqiufIQqf17on8Y572HrzEBz9BdsdRnrZAdf9vQBE7K3RkAxKTl
+ SWoNNGZkZmhz4LNEGoAAEDYlSqgVtdOj7b0EAsda0DVRB+x+/HXLNvR9w6Egv5BqLQkAwuL8NCiFQ224
+ 4IZS3E9/FCd7ErcMz5ydeGVxLd5xharc1ASaVvoLCa4No2oBQNsnoGH6dWTFoKYbJ/aBTMZIdCf5Lynj
+ pVId3dv1WIzv8S1U1X8D1My/jOX7x+/Y7ktCWrCkV9YDBJopcCy47h/hkkP8VqQRCzOCAYDNh5IOerSf
+ 1wZX7GdS1xXEIlZ5//Di3cs3YcBmv2LvaRcP5TppJS6PmfUsC06YVYkFBbrEZpCgOj/sd+/AqtX1+Nin
+ Orx2BprQAITdLhhf6y9pCeMEZYyG4h8YjFfonS3sk2fwAebgRXrqG6ACAEt/HocmiVDszgAg7l8faErC
+ CkJOJG6x9lsLqrwImQAMAEFfwl4GdHq8CgMJDCriRQjYH7CyDpNu34G5/paVHxBM7+UxOMKEfRdX4flC
+ Hdone4J6Yv7btuHJdQ58BnXSCwDQMn+kyo8WMDbh47QfCYLHiNHN6BT2yZ+k5o/AImxSipQI6c/mT0bz
+ /eN3bvemyEIgWvtRkGB8f8TvIs0A1gJYAyiHGlUoP9aM/R+uxIASffy0V6+M7ddsRs/3XPgKubpOveG4
+ Ce2poI0OlS+2xcpKAw5N9gQ1ftRP3Ibl61TzhxmfVX9mflb/Wf0VKn80db+lkIS2JCAex3M0I84Jm1k+
+ uqd78RJeUPL9NyAU9tuJJnz+uzsApEuRS1tZE1AWFUHVADiZSAGBfjacMKEMF5kShMK+dOHlqzZjaF3u
+ RwWE6s/Mb6EbLyaQm3KaFVcle4JdPtRN2oGnXrLjE6jML7LzBPOLUF9LlfrqOJlojO7AJJyBsWF2P9MX
+ xPA34QmS9cz47PhjByBnKmY83z9+J/PUGNJWtRErC9n5xVqAAgL0YeW0clx6UaGy7DXmeHMxkQd2Ysij
+ tViNUFQgV9aqa+9XqP7sPC28vgiXjirFLF2SsX5m/snE/C/alS2tWeprmb8eITNI2PotjfFV0tN/N+Bi
+ +m8xzRBr2Gd20vJuwwoagX8jpPpnLd8/HuUBoPGkBQERURCmADvDKst0aPdUNYbvbcAe8fwBZBP/fMZf
+ OGubGgZjUyDXEoQE8ytmz8kWHDG3EkvJ7q9O5sd2PxwTt2P5Wjv+Dyrjbw80nvha5m+pKr8gHU4hc2gy
+ nicDoEvYJ3xHb5Cpdyeeoae7ASHHH49DRsp8pUJ5AMgMaX0CDALaDEMFBI4xo9vjbXB1gS5+5Zvn6jD1
+ tu24D6ojKJccglq739pOh/ZLq/B4F5NSNzEheWX4pu3As0vrlFRXnuxiSa6Q/E60DuaX0I0s/5nE4BU4
+ ucGn28nEuR5LSOn/BiHpn9V8//idzVOmSMsgDAJKnQEEFhtRqxxahDPHlKFXvEF3+bHtqs04m1ewIXcc
+ gmF2v0VCCZk1Y863YrgUadtGIY50LKjBK/ftwmp/aEWeiPdHMn+umT2pjZOVZP4M+u8ojEDk+gc/Pcel
+ eBfz8TJCjj/O+2cTqFkWJuUBILMUFhdHyB/AWkAbYpy2i9tg6FEW7BvrBMwsnzjx9JVbMAqhLZ+bWyJq
+ /Ry23lZ0v7sCD5kkxemZkN4ge/+mbVjqkBVJJ3a0EXvatRbm56duINt+CM7GbETLgvwdW+jTBWTw8N5+
+ zPyc7izCfs1y73kAyDyJcKJwCnJ+ADsEGQSqDjPhwCeqcC2ZAjHTZN0yaq/dgovecypOorS2fc4gaUGt
+ cE89Oi2vxuI9DDg4mR+vd+N/gzbjoa3+4OIWwfzC2986mJ/H6EIch1uxlqCyosGnLP0nYiXexkcISX/O
+ 9xf1Ipvl+eYBIPOkzY0X/gARGqwiTqq6sQTnDy8hORGDOEPwUxdW9tuM66AySnNlCGpV/wJCgJL7KpQV
+ fsOSWdu/1Ysdw7ZgztcerEeoEs8OhOL8rYX5JRxOdv99eIUgP3ouxL/xE+l0S+kJstQX+f6sDTVrZeI8
+ AGSHovkDhEOwqlSHDqwFHGBCx1gn8MioIS3g0nedSrisucKCwRV+1IrOKcCJD1RikUGKSGeNQg4/HGO2
+ Y+ErdqXugajGw8xfg9bG/CYan2fxDKrRKypHueheh+Jx/KhsSLIBoXx/znZs1khPHgCyRwIEIk0Bdgi2
+ 6VGAY2dV4iqyo42xTvCFC2sHbsZwuxx0EjWlFhCm+pdKqF5ehfn7m3FCoh9yIZWHd+GFuTVYI6vML1R/
+ bSWe1sH8RlL4p+NmGpXpUb/BT2sFqf0PkmkgK2q/cPxltL5/+jeQp2ySNj+ApaZwCFaZJWXp8IDuBTgy
+ Vm4AMVLdrdsw4EU7WY5NrwWIsGYBda94RBH63VCGaYl2TGIn5ntOfD5qK+bXy0pyi1D9Raxfm9/Q3NGN
+ xo/RKJyLvngOsTY2+ZsYfTBJ/x0k/5sp3z8e5QEgu6S1oTkqwFpA0BTY34j9FrXBiDYGJWcgKn3sxOrB
+ m3GdW3UWiUSRbDOOVnuxtdOj05q2eLpcj70T/fA3D/4evAUPbPAq21lpK/DWoXXVQdThJHTFXXhVqegb
+ jTjffyZewpoG+f6N3tY7U5QHgOxTcL08IhyC1NrcWoKLhhajhy6GU81D6v/wLehLUpVtae1qwWz2Nwha
+ 9KZkShlG9S3CjYl+6PTDPXYb5r/swAcIt/uF06+1lENXK/rOJcu/AqfF5KL/4BfcguV05+z0a7Z8//g3
+ kqemIG2WoMgNUACApGuXZVUY2cmoqQ8XQe858NSILbjZFdICsilBtbn+RfsYsM/adlhjkhTgikms+r9k
+ x/u3bMPjPjWzjQFA6/RrSbUO4o9PEWlGd2MajsFIxEqE4nz/W/AUPlOWOgvVn8N+ze74C7+ZPDUFRSYI
+ KZuRIGAK9LfhzPFluMwQYzK5/Nh65Sb0+sKjVI0RG4tkYwIJ6R/s5/xK3HWGFf0S/fBPDzb224xpf/oU
+ SSdUf5HpJ1b25cSkbxSZ6BndRlZ9D8xusMhHS2vwKan/qzT5/iz9Rb5/zoxDHgCajsIkKzQOwQIJ7VZW
+ 48b9TBEFIzS0ohYzb9+B+2RVgmRrW2tt/kLRP8w4fGEVVhql+NWOvTK8123BrLfUkGWk6t+6nH7n4liM
+ w/MEBO1ifmszAd9ILMWvwTJfHPvnsF8ubEUWRnkAaDqK5hAMagG9rDhpegWuiqUF1Pjxv7P/Qs8takad
+ 2NU2kwyllf7KYqZHK3DnmST9E+15sKIOr03cjqWy6t3Wqv4i0681ML+EI9GeFP/VZMQdHfNbnPE3D2/i
+ CbyGcMdfVuv7p39TeWpK0joERfEQBQDIPqh+vho3dTNh7xi7EskP7cKNc2qwHKpk1W4ymqm+Bf0UB5qw
+ 79NVWFWoix2hYNrsw6aef2PytlCqr1D9tfH+nJr0aY2NjUB7Lh7D/mQOxeIavssfyc7nIp9qvr9w/GW9
+ vn/6N5anpqZgai1CYUF2CFYdTyr34iqM1sfYRedXN97vuQn9HbLCZMKTnCnmEj4KRfpPL8etFxfGT/nl
+ Ut43bcOcl+x4D6r0Z9Vfu8inNdj9HOHXYwqx9cmYhXgp0JzxNx7P4kPFFNqAJqzvn/7N5ampSesQFGFB
+ RQvg9mglhpHafWS0H/LeggM3o8f/ufAFVCbLlEopNBNlu/ROBuy9ohpPVepjVzXm9QpvOvDR6K14xK3a
+ tyLbTxTzbD3x/gHojuFY2aCib9iAUHuXbP7b8FQg3184/hism7zQR7KUB4DmIaFuKwwHjRZwiBHdniRT
+ wBKjcMiL9XiEpO4UqFIlUxNLrFvglOWykcW4alQJxsfbz2+TF5sJjKb/5MUPCDn+IlN9WzrzSzgRnTAd
+ /6Sn1TnuN2sI9K7FIlL8YxX6yMmxyANA81BYnj3CVwu2nVqOKy624aRoP3T48ceJf+LUGjloVzZ2com+
+ sO1fUiSh7TPVWLCfCUfE+gF7/adsx6Kn6hVHl1D9o3n9WzJx5kMRluA5VOOsuN/kO+WNvR7GSwgv9NFk
+ 9f3Tv8k8NReFOd2g2aV4XyP2JxX8Jpsuejnx8dvQd2U93kBmnIHCJ8HXKj3DglMfaoOHjFLsGPe7Dnw6
+ civm2mXFvtUu9Gktqr9Eo2HA/bgHh+IWJFr6zPn+AzCfjJ9ohT5yKuzX8Ebz1FykDbspzAdNRGB8KS4d
+ WBxd8nzgwPJBWzAWqrddONvS7YPQRIrpTcWcCkw6uxCXxfrBNh+2D9uC+75yK0tbeZKLXP/WpPrrcSv6
+ 4kJian2cZB8E7nQKVuEVvI/wjL+cyfePR3kAaF7SJgdpU4SruxjQlVTxm8r1SqQgjOr8+PuMv3DKdn9Q
+ yqTrYRbXV7L+6Jr70jUXVeixZ7Qvs9f/kRqsfHAXnpNDqj9L/8iFPi2ZdOiFw3ET1sKcxC5HXN9/JBkK
+ nuBSX+H4y5l8/3iUB4DmJW1ykNAC2BdQLamVgy68tgTnR/6IGNE3dhuuesGu2OCNyQwUGoiSmdjPhgvu
+ LMOMWM6/b9z4YeBmzNzlV+xbBgCt6t8aEn54G6/2eJDs/hIcl5A7OOx3PZaSLsRRGW19/5zK949/w3lq
+ btLW2tdqAVVt9eiyvAqjIxcKcQjuQyeeIDNgPFT1O10zQGgfJQYCnkcqMe10K86N9kWu6T+CVP8PXEqd
+ QuH1FzH/1qD6SzTyFjyAR7EvWfRJlDzDCzQWM7Ga7lxIf219/xYxFnkAaH6KTBEWWoACApcX4vTJ5eir
+ j0gR3urD793/wum1ssKIzISpqt/CCcnXLO9kwH6rqrGwRN9Q7SWNQ15aizX37MRTaKj6O9O4du6Rhcbi
+ HtyIf2AqktnlaAvZ+EPwOI0Gb+zJGX8bAmOTc/n+8SgPALlBWi0gbKGQTUL7BW0w/CgL9tf+wCvDMWor
+ rnzDoTifWA1PNdwk1H8lAnGFDT0JaGZEVvxhbeNHD36+fBPuqQl5/UWFn1zbvCQ9YpPncpxJtjwn+xQn
+ /D7n+8/GK3gWb6Hhxp457/gLv/U85QJpKwlrFwopNQNOs+CoBysxTFtKnGfYEzWYefdOslhVj3OqTieh
+ /peS6lH1UCXuPiOK+u/ywzVkC6b/n0tZ1x5N9W8Rtm4cknAKuuJOrEEEyMakb0jVvxFPkKXPVY9E2I/H
+ pkU4/sJvPk+5QmFluKBJESZUqJ5TicFnFuAo7UKh/7rx8QUb0denSuRUkoKExsGOx/IqPfZa1xaLSvXh
+ VYpZ+i+Jrvqzk6s1qP4S2pHJ9SCepDs/J6lfOEnC306awvvK/oYboAIAO/4YhFscGOYBILdIu1AoLDmo
+ mxH7L63CaLLRg/nodX5sGbAZF37tVtJxmSmTVT/D1P/uBTj54Uo8Gun9J4D5pe8mTNslK15/7Uq/yE08
+ WyKxV8WAubgDh2NCUk4/vtO38DWmkPLvDm7r/XtgXJwtcSzyAJBbFLlQSOsQbHNHGS690oazxAo9vwz3
+ mG24fo0dLyK8aGgi4msoqxHpRG0mleGGK2y4SqtdOP1wXLMF93/owqcIT/iJrOzbUkmHIeiNoaTKJyh4
+ EiTe2PNGLCO4/QqhsB8vhGqWjT0zQXkAyD2KlSJcVaVD+9XtMI5U9krx5TftWHLtVpJioWy8RBNRm/xT
+ Xihhj7VtMa+jAQcJAGDVfzGp/jN24pmI+n6Rqn9LBQAdzid7fxzeppFOamtzxfG3BO/iMaxDC8v3j0d5
+ AMg9ipYiLCoHVQy04dQJZRgotICfPPj6so24tFbdeDOZcKAwMzjaUNHVgANfaodnSSUwCgBY78ZPgzbj
+ vq3+oHOrdan+e6AE80lrqsCJSXPABtKCeLVfqL4/Z/y1iHz/+IORp1ykWPUDK4lzS9a0xbiuJuzDXyRV
+ fdvAzej3mRufI7lwoHA0KpGG4cW48pZSjGWpzwDg8MM+fAtmBVR/rddf7FHYklV/ieDUiNmYhf2IneMs
+ dw4jL93zVKwh2d8i8/3jD0iecpHibShSeooF+z/WBhN1EvTEuP5J2zH66XqsQigrMJ4fIJj7zxuVLm6D
+ qScUoLusTmF5QQ1W3bsLK6PU92sNm3roMZos/8sxJ+ZOPpHEd/oZfsb1ZACEF/po9o09M0F5AMhd0q7T
+ 124oUk4HrQ9UYtA5VnTnL71px7Jrt+J2qCG6eCqp8C8o25SRjdH2kw54zqZDWwaAr9z4dsgW3L/Tr0g3
+ nuCtR/VnaX8VTsZQPE8wUJ7071wEelfjcfygrH7UOv7YH+Jt7ttq/LDkKZcpuD8fQg5BboWdDWjzbDWm
+ lulR9ZMHX/bbhL47/EGPdCw/gPAtsEZRfqwZhzxZjRX8Qa0fNSO3YOYHLsXDLZi/9aj+h6Az7scLZFAd
+ ktIvV+ETpb5/uOOvReX7xx+YPDUlSZpXRcITZxv2gK5Sp0plFsT1O+HfuiVkW0Y6BFl6FdNB09VFOPPm
+ UoyiL+7oQwDwjVtZlRbPDyA0CuU8w4twxS1lGMfLfJfU4umpO7ESKtMz87cWr7+EjnS/s7AAHXBxSr/c
+ TvffH/NoNCI39mxR+f7xBydPTUVBpqdmIH2+YCDMJ5wNU99jYTjeAIlX/Pn9kLf+Ct/nq+Fe/ghcb2+C
+ XB/4nVgnwKYAS3BLiQ7WZVW4Y38Tjpy6HdctqSMJFyoSEs02Fdl/DABlz1RhxpFm9FjvwVcDNuMuUv2Z
+ 6blpt/IWzK/0f09IlnLoyugPPV2gnvq6c1fDjT9yBSh4+24TJmEszsAdMbfxikYy/TcL6wgSeWdmwfwt
+ Mt8//gDlqSlIMD5PQGM36KpnwXr70TBeRh9YZc2XxBfp1fUVPM+Pgn38f+DfjJD0ZlOAAYAdefoeBTh4
+ ViVmvGHHyhu2KfkAoia/L0ofhP1fSipF2ccd8DJ1qOC6LRj3vkvJJmSw2YlQToHC/HRh/Ukw7H0tLJcd
+ Cv2pbaFrT8cMBAA16+H972p4nn0CrnUEVtpS4M3PIHr671r0Rj8sRozyajHpG/ymOP6cSrafcPy1yHz/
+ eJQHgOxTUOpTM3WGVPkkbA/uC8P5/sD4C/GKwBcFUlDz/wzfq5ehdvh/IW9HSIKzJsAAYCRG1hMAjDrA
+ iK6Xb8IVW/xBFTXSD6At/lF8qgUHzW+D50j1f2TaTjwH1Wxge1+7n59EaodpAiz9hsEyzgKpQyyw+hbe
+ Ndeg/rYv4f8ToV2AgeYDAh1OxQG4i6S4MXyNQ0Jyk4S/BU+T9c+hULHWXxT6aOnrH8IoDwDZJe0qPzP9
+ Y1sA63hS+0cQd+gixaTKUJJgftF8r8H9yEDUT7arqieHBlmKs2OQGVp3kBHtHm6DKYM2Y/QvXqUwZbQy
+ YcKMYACxXVOEvj0LcVafTRhbLysmAzu16hAq78VkWoiCWy+A+QaZsCBy1mvBil7lrfD/uw/qBvwbvl8D
+ 128ux6GEvVGOOViLCvwj5V+/ii9xDyn/4WW+hOOv1Uh/daDylE0SzK/stnsq9Ic9gSK20608i/xRvhxi
+ fLUqBTfioB19UdvrVXi/DnyVTQHWAMzE0eYTYdjjhkLdUNllcLX1GkxWSFVG1Vkors2M6KHrOe2QN22h
+ VlnoOeRtj//lF9y+9z+Cj6U2gwBLfod6SRhHw3zuWBTMZ0XArxjF4X3VBTJpRJ/pYvLX8L5wEequ3gxZ
+ W7G4KUFAHcZleAj74JqUZ/gOAsDrsJQUf67vz+q/2Nizxeb7x6M8AGSXxMIeJYw3G9Y7esE0mGdRJAAI
+ dVowlMr8kiLu+f1yuGdfh/qZ9Na7J3RFvWA8+wIYTyFT4qhSSO3oOyZ2zCWzqE0lhaG9pOe7tpGl8X/w
+ vv8KPC+9CM+XNZDltpBKX0PxmnJI+wox7tf0VevU0IIVHXNOhH3QXLheRih5qKmkptq1sWT1X0j2eypO
+ PwRu8nG8jUWkA8iK048BQOT7txrHn5byAJBdCm61Ta30UxQ/XwTpAAEAwgSIZCiDhqGMARDYBP9n98Ix
+ 91KYehwFYw86aamERPv2RqdoP2I4oBnu3w7/hlXwvLwT/trBMI/xQzJo+yp+H+GrCAOr7+B7pztq+tSF
+ FyxtCubRoT+OwXBi4CjVlBPSzyTp2fEXyvfX1vdvVaq/oDwAZI/C6vzRH5XfoOQjmkVGLQAI0jKTMQAA
+ RoQAgL7rJxtbshHTFyrHkn90UoLPVOkuK5xaT6+7Aj0z06c+eh9pyMeS/qKvdK6N56D2on/D9x3CNwvJ
+ 7ngfiHZKqa7iFJN9mNzUx7uwGm/gQ4SSfkS+f6ty/GkpDwDZI23svrwDdB1fhu11b4CptACgGq1SUPVX
+ JanKTCalqYr9n/Qr0iCUZk6qgkX8zmnJS71hTq2lV9ICSG1R+xPNXImw+4N9FQBAxx3nofbyj+BlZhL1
+ A7LJQBIqle27H0VnXJny0HDPPsT3GI+nAoU+tPX9W3y+fzzKA0D2iMdWZN1Vct79ByheRzPJEGkUR6r+
+ gplMgffM7Kyi/0athN5zs6QBAPG+76Fzs/TfCS4z7CchqhomkRqAcP4ZILSVkMYiwIree3uidsAH8L6D
+ +IlJmRlnM11yHG7B2bgzgEGpUQ2p+DdhOb7Bl2iF+f7xKA8A2SNRdSe45dca2OaXQdeZGUq4k7Wef60U
+ NQUAQDCVE1yXy49yZUWrjsRd7EeX7EPVfs9F51elP+86qmoaOoRrAFrbPxystP1lzUF29kTdENIAePms
+ qCKUHQAw0OUGogcGEwPrlSzJ1IiRdSX+D7OULMoNgcZlvnagleT7x6M8AGSPBAAEi3uOgWVkDxjP02oA
+ qvQPOdC0jCQAgDWAjfQLts0rlE1rVQBI5+HF+o0rYPtvo+tspVd1BZIUdOELZ6XIaNLa/OH9ldgHsJM0
+ gGGfwseJNGLX4GyE0HT4Bw7A3XieBmS/tM6wkfo3FI/TTXN9f63jr9Xk+8ejPABkj7QagLLd16HQHz0V
+ 1sl+NY02KP0F42uZyRxgKHPge+tpLrLaX0GnLVWK2CUHAIm+I5yAWgDYAjUzqExjAojvRjNTQn1WX3+E
+ 99tzUTu8Rs2dF4uKMs1MEval4bgXy1BNyn86xJ7P+/EywQfn+29AqL5/iy/0kSzlASB7JHwAophHNTF7
+ +9EwDz4BptN4ZgXzg6EykxkhiW/WMNff4HW+MqEI716lC/gAkn14UhJHQgCwPQAAWxVzQ6d814eIfGYN
+ WJk1kj/Qf//9cD48E87lUCVpNjQAvpgZMzAVx2J00pV9Imk9WVW81t8TZP5Wme8fj/IAkD0K23gTqhnQ
+ zgZ0vgUFV+8HfVetyq+V+Op7laF20Dz8kXinhOZ4pWL/q1EAU4omgBTjL6EBuAM+gB0BH8BmasyxJYoW
+ IIWBVaR5IiQ/v/4G/08Xo3b835A5iUZUFMqsD4AX+UxAP5xDzKt2JXXyUX9G4Qn8h/4Lr+/f6vL941Ee
+ ALJHIg2Yc+9ZC2AA4CW/7btAd+gNsAxuB53FEsFAWsm/RWF+1SNfoUh/SXlvzVAegBYGRBRANQNkBQC2
+ BMKB1qCXP7yvWgDgVwIRx1DUzXgfvo+gVhPmwiLp7FoUj3TE+IfhdlLbdWkk+wh6HV9hEp4JlPkS9f05
+ 379F1vdPl/IAkF2KLO/dbm/oDh8M8830vg3b022ptaGZrK7sUVVrZsTfiV9q6LU8oPYL5rcFGE4f49Gl
+ 6xdgac8zX+QBbA2YAQwGnMlUCR0sGmaPBAI2mL+C1/8+PK8shnuOM7Rhhigqkgmm4so+VXiImN+EA9M+
+ Sy3suAqPkbX/PUL5/gxYrTLfPx7lASB7pK3pp5TgPhT6I8fAMo2U9/Y7iblqA8k3cuBL/APWPfXKD1R1
+ vzQQ9itRmB8KExoD6n8m8gDEMRbPbkULgAI8OwIOwW2B93pqbakfFUoEQgUBQ+D3HKH4kz4vUjUV3//B
+ 8/T9cM6sDcXSRTpw48bTQv89Qf/tiUvSnrk82PPxFpbgNSC41l8U+mix9f3TpTwAZIfEuCrLgKkVHwF9
+ t9koXGiAvCer2Vxup45e7WoOvuKQlgLqvyUg6YsD9j6rD4UBz7+aadf4CEDkZxwOZ/DhwLcwBXYFmH+H
+ 0l8Gq1B4UE35VTmGb7AsoKmUqYlK3n/CvWAcHPfUqWp1Y9cDSMr23XfhVpyIKSkv8tHSLwRK12Ix3dxP
+ CEl/9lW02nz/eJQHgOyQdouvgr0gdVwO2+PV0B3JDM96Zn3A5nYGcvBFWJAZiwGgMNhUhhNMZ0hT+ms7
+ Fu1vWUlPVn0BzoAmUBcAgZqAg1DdC1wORgVEX22B7ETRipT+wr0Qrjsmw/GYO7xASTogoCOmPQ/98SS9
+ K0r7qXio65zv/zo+wG6U7x+P8gCQedJGzCxku7d5EoUPHAnDeSTpJWcgxu4MSFSWuCENIBRbtwSYnk0D
+ oW6ny/yJnYBMstIDX0ATcAYYXgBVXeCYO9BXBPrK/SsMML0tAFrCRKBBqL0Xjuumw/mCV/UDpFMujCv7
+ HITb8TydfJ9GPZkP8QMm4OlAmS9uu0W+fzzKA0BmSVsByELSu/gRWMeeD9O1dFjvC6j7nsCrG6rdLdJt
+ RWKQNsNO5NnrUmD+ZJJ/Gv6tAgBzpgABdwCsHEHQUhcN+RDKYGT136pKfOVVOAmNgdChC/LffVFzyWvw
+ fYHUy4tLZO9X4CFi2iqc2ajZWku3cRNpEF8rOyiJfH8O+4ky6rsl5QEgcyT4k3lYKb01CubLJ6JgKklu
+ qxB7fg3DqzWz5Aa59mJloC7YQjZ/plT/hsdClQm1/VSBKgRYkWAVmQUozBSdZkD+hu+T81Db53v4NyF5
+ fwCrFRbcg5k4WtnGK327n6/0DD7CXKylK2+ACgC7Tb5/PMoDQOZIyxPW7jAc+TgKl9ig49h/g5rZapNj
+ 6sNSlpg+2vEQ24c+EX3yBQFLvEphYCVME7E6UDgodZqzsV7xGbzLT0DtSITqA8QHASOdaiwGkOX/SMDS
+ SJ/+IDWfC31sVCofC8ffbpPvH492ZwCIXhgn/XPxnFcKgFRBarsKtvkHQH9iNKaKdpFYF25Mh1I7JseM
+ LQig0vZH0pgkWi1F2yLO75sFx5CJcPIuO4n2GdShO47HHXiBkKUSjSHO+HsA6/BcWL4/O/5aVX3/dKm1
+ AkDk/OPaWToTb4FNbX/ozIdAX1oInZUkm/IdssudZOO6SCzJ/4G37nfIyuTgSjySKq189F6mN35PuMNI
+ iE7F7qd/imeh4IYrYL6RLytHfBEp/J3oeKKbT3Q80gTQAoAU5XvRj0kNviPF+J0T8tbeqDnnHfjWQwWB
+ aP4ACcehA6YT01pwUIq33nDgviKmH63U99cW+uAMxd0m3z8etTYA0M45xZwuJYl8AYwHHwPj+efCeEQh
+ pG6kplYjwPhxyMEbX1DbQWrwTmL6GrKFa/+Cv+YT+LY6aDLTZztpFv+9E/7tr8OzbTtd81QYDpuHwnmk
+ FgfDVZkAgUwNTLS/tSaAFPc7scBAivl5ODDI+Am+109GzYAdoRV34cWRSlCIpViOtujV6Jt2wI2b8STZ
+ H58h3PHHaRgtea/DjFFrAoCw2ppkj5p6w3jUrbDcthf0pwOpOZESpdqEbGTVM14P2b0D8pZKSIUl0JVq
+ v5PseyRxPNUBSXQ8lgmQPPMjqAMkAwJkTHgehnPMGDgWIXzfQXad6jEbt+FwTGn0zfMZX8HndKZngeC2
+ 3iLfv9XV90+XWgsAaD3wRiup4jfD3HckCqbokMJW0GEnTAwA3LyBEFltIEuuivAnHcZPxPDJAEIqmX+R
+ x6Q4GkAyYJAMCIj3O+D/tSdqL/oMPi7CIZhRwkCch+FkradT1iuCdNtgNw7CYt9mrPeqjr8NQNjuyckO
+ a6um1gAAWuY3EcNb7oK5/zBYpxErpu09jgcAgvl9mkq6nOHXjphfrNKLxuzJMH2mZ2QyzsBoJkDyTJ8c
+ CEQck1+E67GBqL/DKTzxZ6AbJuEFmMj+zwCdNNPgPGyVfksppNpi6LYUQ/qVtI8vVsH9r/Xw//A7/AwE
+ 2nqnuyUYtHQACGN+agWDYDpvKqxzjOoKvEacOD4A8KzxBLL5apUVc2ouvPg82mvk+3jH4h1PZlCSOR7L
+ CZhI5Y//GjpHPCBwQd5xPeqvqYHsOtVmPGz6fEffLXvJ+2diRlZ/K2HQcDM6efToTM9kT6WWgrrikk5f
+ +yf83zwF1+OL4Fr1p7r7stYfsFsBQUsGANH3IPNfQDb/g7AuLIK0R+NPHiskFpL+6mZ6qvTvqEnXSUbi
+ N4X0jxyoWMcyqwHEdgpGvt8G/8YaA0ruu95RsOQyF/zp1fUJIx2pZJeONuGozw3oRM+EG69iLFZyFUL9
+ 4l2RfoZ33TWou+lj+Hn3H22t1t0GBFo6AIhiugUHQbfXU7AtbA9d6ptCRD15bAAQ0l+smitVnNe6hBK/
+ qU2A5NV/9crRnICR6cfJ2PiJTAHxN/tP5lzgxJSbHXCbM3PPB76kx8VTTehMaMLSvwNNkXKE9lHQ3gtn
+ N2yC/4uhqO3/Dvw/oXk3NG0WaqkAIJ6lsm6mQllwY5t1FPTnZeqeogGAVvqLTTS4lt6eCaR/Y0J/qczE
+ VJyAqYQBkwGBZPwB2u/x1T7Z34s+99diS0Vm+K1gO9B/mBkH/qmq/h2J+auhLlCKtYRaVkoC+T85H7X9
+ NoS2Nt9tQKAlAkDYghtCgKLZKLjpMphvABIXh3QCbnrgW7fAX7cdfmedGotmJNHTRDHQSSWy54303kSm
+ hIXzCOhvM0kQpfacWj9PcfxJuwIVe4oVH3r8jL/GgUD8uZgoYpGY+dWrxNIAkn2NBwLhoUDgzwo/LiXm
+ /3o/X2ZmIZ305DkGnPW0UVH7OxPL7xGooJyogAqNr/xf+F7phdphf0DmMGFz7GrcLNTSAEDr9DPTG9sQ
+ mC6aCut9OnUPvpjEWXxr4f7qdjje/gsyJ4LE2rVWO1eCa1ro5MZq6ApoQjEgWAuAkmNh6DICloP0cTL+
+ Uon/J2L01AdLivgbMf8WYUDt8cYzf3R/QL1JxnUT6vF8D3fG7rX6OwlXjjJjrzqV+dkno5Zak8LWJcQi
+ nh8fwb2gD+rG7wyFCls9CLQkANA6/Zj5rX1gPO0BFM4zIuGOMPJb8H47DPXP16jMzzMvFsprtVWd5lU0
+ xedAb2zLUdj7dJj2TsX2byj5G86vxsy46Ha/FPd78ZyAjWP+hqaARyfj4cucmDzKkRGnH5PeBVww0YTj
+ 3jcEpL9OCckWaaR/MuSH7J4Jx63T4VzqDd/UtNWCQEsBAC3zKwtuToX+4KWwLSNVPWHceD18v1+BusW/
+ QeY0UK5zwbk7DADRc9HDmT+YXRhonFtgOxr6fZ9G0WC6vpJrkBoIZJbpEw1a+DEpxueJw4CpgkCkKcD3
+ /fqxHlw1vQ72ggzdJA1c5zd03p5TjN72Xp2/PfS+9pD85dDJZJrpzPTMyHwzFCg5Iom3U/dA3jkJ9iEP
+ w/W6L3y9QqsEgZYEAIL5LQdD2ms5ipaQjZdwschmsukGoW7Bx/DxUlAuUMnqHaN7rHXpsTQAEW4spAMl
+ s2AdcDnMp6bL+E2dAtxQ/Y8EgvR9AMkcY/phTz8uebAWv7fPYBbuDnisN2K94Xuu6ivtJCm+nR5WPZll
+ nmLFlwMLaQKFZ8HUZTjMR5eSGZfolPWQfx2J2oEr4f1Ujr1oqVVQSwAAwYAK81dDavsCbAu6Kktt4xOJ
+ esf1qF+0Fp5PoC7/5CYAQGgATNrF8FKUJnbw4slTtDd0+6xG0d2V0FWKH2tfG76PzfiZiACk6/1X/w7J
+ 53R8AMkyfw2NXN/7avHRkRksvsNFCpbhF8zDt5CV0l68yo+fsSjwKUoWmOmNeQBMh85A4dmFAYduPNoM
+ 37fno/by7+D/GbG1xRZPuQ4AgvkVj38FpPJlKLz3GBh6J+o7L9u9A/an58H9BtS6b+zdFQAgSvH5YlxT
+ iri+KPDJK/xKb4Clz62wjCTm0cXP+ovO+M2RAhzfAaj65hujAcT73CPJGHuTHYsvzZzTT6FfSaMbgX/S
+ 02XTTrsRiSvwDfHc2Eyz0iQqHIeCk2+G5XQjpISLwzbA994FpAn8kloloxZFuQwAYeE+4ryiR2AdfzZM
+ 10hJrOxbBNer4+FY6VVLPvPEYABgByCnfmqrW0UzASJfhfQvKQHaPYuiuQfBcAQQnbGTZfxMA0FqiT/R
+ brZxGkC0z3mAnzjfhbFj7fA0eomPhrx06hn4P7yo1Pj7O9D4OQsPfjBaBPXZcYHlIvqjdAas5wyG+YTE
+ PgGZt2Vb1wt1Q3+Dn8uHtbrwYK4CgJb5zfQUC++B5frBsNyqQ+K94F6E56MRqF/mCE0KIf2Z+UV12mQf
+ JPeDpy5PoLITYTj+SdgeE3X+gNQYP1OrAJN5cMnF/8NDdg2PJX6NBQTc94+7eXHFrDrsLMkwz3yJvzAS
+ qwnKOY2XG1f5YSbV7kIktjPkEDHvq8JbiZUSGlQuga3PuTAenHjVpyx/Ae+TF6N29OZQefNWAwK5CABa
+ u1t5eNfD3GciCqYbVCaMS2/D+/kQ1C2qVScEMz+r/6wWCts/1QfIaqSyuQe1ihkouPFKWIbGYv70cwAy
+ N3iJjsXL6lPfJ68JxMv0+6vSj8sfqMP6fTKU7CPITQA+Cs/iC3wNda0/V/kRW3tpnQzBdSIImG9Ql4eX
+ 0ZvqF1E0+HAYOyW6HD1b33twz++L+gk16c2hnKVcA4CwWD+1gj4wnTgL1oXmJNb1fwjvt/1Rt6AmxPzC
+ KaSWtU/djhNAxBKktC2kTjRpHm8H/b7JMH5TrwNoHPNH5gEkBoF46j8n+1x7Zz1eOdWT+Vm2jlh/Cp5H
+ qNAHawAM9NoKv2HOY4Q0AJ5H7Lyt6Aipw5soGd4euoRziwuZLIHrntGwP+APL2TSokEgFwEgGOs/FLr9
+ yN5eUgGpa6Iffg7fTwNQ99jfkEXNN54QrBJy6E94/bXrv5PtD/dF2eK7O4wnP47CecQcrFo2YP5MLAaK
+ dzxWB5P5LL7tr161IdOnBwKc7PNgfyfuu9oJf/rFvKNTHT3LvngYW8g8V5mfQSDaxp5aYRKpBVQGWsWR
+ BOYrUDSgbaCKUzzyQ7Y/COeYO+FY5m0lIJBLAKBF7IL2kNqtgO2RA6A/JcHvyEbz/W8Y6hf+D36eEOz0
+ Y5tfMD+HhLSSP7VdaVTpUUKdq7wX1lv7wNw/mq2fLgjEOtaYQYx3LHkNQLw2BIF4QMCRuXUneTCSpL89
+ bnJ2GsRdfBRv4AllY88NSLyxZwONEqopx5mjvFuzAgInw9BtEWx9kgEBL+Sae+EYNQPOVY3Y7ShnKFcA
+ QOv0K6B5U7oAhRN6wDQ0UfFOkvy/XIP6Rb+ozC8kP08I9vgL5k/nIWnV/7IySB1fRdGCdqSVAI1n/OaO
+ ACSnAYjX0PF4zM/9/76zDwPvq8NvHbJQco839rwaC0nWc2xeSP9EG3s28ClBNQUECLShVn46DActgO2y
+ augSFpJxQ95yO+yD5sH1ji/9+ZUTlAsAoGV+E72x3Qhzn9tQcK8OkjHeAhmS/L9cjfrFxPxc820bojN/
+ umoa94knDNuOFSdAf+xTKFpEBw2JmL8p6gCmm/yTugaQvFNwa7Efw6bV4/8ymewjyEtMdjuewz/xL4Rq
+ /LGvRyzsSjRcwagSVBBgRmfbX2gC5T1hPHwuCi+qhC7hBqQ18P88ALVXvAkfOyKFhtniCo3mCgAIFc3a
+ E4Zj5sG2lP6okAL549Ho3/D+lyT/0t8gsxQQzK9V+xNtPpGIhPef1cKKcbAMHwHLddqTxXP85UIEIHMa
+ QGIQcOtlZYEPV/bJyqx6H+uVjT3diuTXbuyZbIXfsLwShGsCiikgaUCgAjpbohP+Dt8nF6Ou/3fwcbXh
+ Fpko1NwAIOx+xUnTDlL16yh6tl0gxz8WALwP77ck+Z/YApntP5Hlx8wvJH9jmZ+JQYnDjqXUubYrYbv/
+ MBhOTEXqp1oSLN7xeAOY6HiyGkCiikDRTAEmtvuf7OnGxLF2eA3pDHUCqqFnOgrL8D2+AoIbfERW+E12
+ uIRjV93YOMInQB+WnQfDYXNhu6hNEprAenhf6Inaazaqq0xbXKJQcwJA5MMoehrWKWfBdJXoVzQAeAme
+ T26EfeUOyKz+bUdDh59g/sY8CCEpFO8/iYKOn6LkWQskniQJVf/mcgCKjsf6O54GEKsseDR/gPYY/+rf
+ B3ox4MFa1CZklzSIL7AMH+JRevRy2O4+bOqls7Gn1tnMGh5Lei0IcCs7HYZunCxUnkAT4DoCr8A16zLU
+ T0EoxbzF+AOaCwC0jhkFia+D+fw7UDBXj9BGkBEAIK+A+4MxsK+qVzd21Ob3Z5L5Rf94crCKWNEDxn/M
+ R+GCVFT/XHIApqoBxA/7hb7Dfd5S4sfFj9Xif52yZP7+Ss95JJ6kJ/4t/cXOvw1Qnz8/73Q39ozMERCa
+ QDlCfoGyf8Cw35Ow9W2TwDHIdQTuhWPQXXCuRQtbQtycABBcXrs/dHutQdGKCkidwr+kAgBBqmcWnOvm
+ wPmWK+Tpj2R+4fDLhArGk4NDRkrM+EZYrh4FywggNYbPVEmwRAMZ71i6GkD8mL/6badBxtUz6vDOP7xZ
+ mUkSVw2djrfll/BP+pOXc3PhThH2S+T4S2boooGA0AQUMDgY+s4rYLtiT+grYt0id8IFeWtf1J7/BrzC
+ KdgiVg82BwCExft5ccYzKLz3JBgvjvblrZB33Qb7c6vh+RThKr9gfrG2P5Ppmaz+s5OonDpb9QqKZu8H
+ /fHxmD9TPoBEn2fe+x87ChAPBLz05oEhTjw82Jmxyj6RA9DpA53PPUF+7m+3/AHY3FY1AJb+HH9vrMoh
+ bkULAsIxqDh+EUgb7gRd+2WwXX449B3jrR34Db73z0VNvw2QWUC1CKdgUwNAWDiG3hSNhPniiSiYqUP4
+ HvA0av7/wPvLzcT836prspnhBfOL3P7Ghvpi9ZEnhBL+o462/RIlqwogVWbC9s+U5I/scLxjiZlf7Uky
+ 9fyZeFa/eLobY+6ww5n23kvxyUxPuM8NJvy1Xn71TXiepkPfQVX/hfTPBEUDAWXVIELrBhRzoApS1TwU
+ 9j4Dxv31MVYRkrbqXwPX3MGwT3GrC4dy3h/QHAAgVH8bIeoBT8O2pBJSZ+2XSM13L4frw2lwvroTMid6
+ 7EBI6rO3VVvVJ5WVfcn2MWj/HwF9t+dQ9GyyzJ/uYqB4x2N1MtHxVDWA+GHAUB+/3duLq++rx1/tsjSv
+ 6Wke8aweF842cd3+Tx+Ba6qsagCc8x8v6ScdigQBfvaRIKBoAnSgcjKsZwyA+ZiCGEVFyGqpuwP2oXPg
+ Wofwlac5SU0JAGGqPxlbbZahcMYJMF6o/dImyNsnw/HC83B/7lclvWB8fi/W84vc/mzkYov0X374bfrB
+ dP5dsN4NxFf5Gyf9G+8CbJz6H98HoP395jI/rp1Wj88OS9f/lpiK/5Qw8Boz9tvK+y3glwlwjCZB8A3U
+ nH/tct9MUTQQYHOAQUAsIOJWShphaR+YDp8Caw/SCoqjmQQb4f+uD2r7/Ac+zlfIaX9AUwFAZBJG0XUw
+ 956Egvs06/vlj+H9jlT+Vd+rWzUxs4syXsz8wtkXWdAz0wMr0n+VVWO3wnL9cFiuisb86Uv/8C5nzgEo
+ ZVwD0P7OYZJx92gHnuntTpCgnT5J9FTPmmHEaWvV+v5V0G0bjrqrf4Kfy7qxbZ0NANDedrCMGEJ1BEoR
+ 0gb4teR46PeaDus5R8DAfoGw0eDQ4NtwL+2LunF2de7mbH5AUwJA0Ot/EPRdn0XhEnq4yio/Gh3X43C9
+ MQvON3dAFst3BfOLQp7aMF82wyz88BX7n1qb52CbdhgMp2bGBIjG/uGU6IaSUf2TAYJUowA+Scayi12Y
+ NtoJbyYr+0TcfLuvSPpfb0Znjx5dlK29dN7BqB9CwoEjAQIAsqlSC01VFBPhaFCwmAjUKIECAmS6lt+O
+ gtPIJDjWGFghKsgP2TkTjlFT4VyRy8uHmwIAtAk/BTSiZQtQOOk8GAfyhxvg//VuOFa+BM/6QC12ZniW
+ /kLqC5U/0tOfrYHkh64U/6DW5iMUL2sDXWcgeeZPlvGz7wBMZbPPcA1A+30Oxf77EB+G31uPmkxX9tH2
+ i57u5deacMTXBnTW1Pe/H85bH4BzJVQnMM+HbNvUAgS0S4lFmFAAgQICNKltF8PUbRqs57eJWE1YA/9v
+ l6Ku94fwfo8crS7cVAAgVKrCvjCe8SAKF9Io6FbD/co9cL78O/xis456qMwvHH1C5c+Gsy9WX4MOwDJI
+ e76H4tUWSAXJqP7JMH6mkoCSX/0npawBRJ6HK/sMeKQOv3bMLt8duFaPS6ealF19uhDvkfQnFJawAq5H
+ RsB+P1QAYKGQPQdE+FCJuasNEwq/gAACBgXrAdBXz4a11z9gOEA74t/Bu/Z01FxTp2qzOWcKZBsAwhx/
+ nSBVvYXitTQKpkmwP7IKnu8D8RweGJbyzPTa2v3a6r1NoT5xf4MJQKfAcPR8FD6qrkpUKbnXxIyfSh5A
+ ooeU2AGYDAhEDwO69DKunVmP90/Iwgo/DVmIPQb1N2PfLXqF+dn+5409bdTWwP1if9TfjFBhV09WOxM+
+ VJEJQ8IkENpASeC9lZCh4GZYThiFgnNNkMzqqMr+x+G8+SY4Fss5uNtQNgFAnFuxpWgEC5agcDz9UTkG
+ 9sV/QGamZhWLEZEZnaV/HRqq/DKabsD4QSvr/6m16Q3TedNQMJluRUl1SewIlKMca/g+2t+NHeRof8cD
+ gmQ0AN4F+f7hTjw+MEsr/DSDcfKDBpz5jBG8rx+r/ryxJ2lgpH9L+Bm+/5yBmiFb1fUfbBpmuL54UkMs
+ 9oYQZcZFqFCAAL9ncNCfDkOHmbD23Q/6fdhBSONYcx5qz/gAXg5l5pQpkG0AECqU6TQY2u0D6ZAF8HBC
+ hzlwnElIf3vgVevlb2p1SawAZG9vm4EwDRiPgusFe8SW+skxfibXACSb/JM8CIRrALzC7+UzPBh7px2+
+ bKzw01AVb+w50oy96lXHn9jY0wpJeSA74f/leNQM+C2UEObMbo+iUqRfQBslEFoAzx0GB105JP1EFHS/
+ AuYL6EtFv8H37pGoudSpCrmcyRJsMgBASH0yBY5JgUHgweAHKqS+1k5q6gEKrgCk1uZ+WG86H6ZL02H+
+ VJOAEn0mBjSZ44kdf9FSfkNOQO7H+r29GDanHtsqsvsIdPTEe4014ph/8caeKgCw4684IP25R27IO47G
+ rj4/wc/Cg/NCHEkMVzYo0iQQICC0gaLA3+bA99xnwtB+GqxXkzZw+HI4x46A4zFkZrl6xm4o24MlAMAU
+ GDRDYAD5xlnKuxGy9bVbdjfHwHD/RASgajlsdx4Fw+nxmD9Ti4HSHeBYfycLApEmABMn+1x3Xz2+6ZZ9
+ X9u+r+lw8d0mdPao23rvqTj+dCQtVOkfgCTfsai55BsyBaACQKazAVMhrUkgtAFhEtgCjQUdz3MeVHcV
+ JPlWWM69HOaeQ1E34DV4GchywiHYFAAgqvwaAu/F0hG+eR9CjK+1i5prUPhhsjrHFWKqXkTRg/tAf6i2
+ QyHIluNoBSHKtAmQvPc/MQiEJ/6oAGA3y7jrFjvWnueBnI1FPhqybgUuG2VCt1/0CvOz468tNXb8Gahp
+ t2cehNpBK+DhXAAGAFajmzu9VmsSCG1AhAuFFqBDSMt1nA3DnoNg3n8o6hfXhtKExeA3201k89zaQdI+
+ T8FHws5PReWPN6/jUSwhLGvOESwBRq36LRQvbg9dx3ATIL7Kn82lwFIKf6cKAtwLH71d0teFOddmMdlH
+ ED3x4xYa0GORER1lXdDxV07NpJH+oneTYb/lXjhXo2lDgYlIO8dFqNuCkLkrTF2h6TrbQfLVQa6rzZGK
+ wk0BANqmJb7pZBlfew4d/aM7AvqyUuj2KoXU5RToK23Qlag7B6lpmT7ILjqpizcJraf/v4OvZgPkWvq7
+ xk+vHJKh0a930fsf4K/ZoUYllBLg1MrpTbs3UfwkTciyaMyfaj2AeMcbM8Da11jH478K+S/j3eO9GD/Z
+ ntVkH0GVP0i4fLQJ++xUvf7C8VdITSstRA9nwzFtAhyLoAIARwJyAQC0w6l1EAonoQkhjVdou65Ay4lq
+ wk0RBox1jWT4IVKLMPSA8dhhMA/tBP3JNMJFJMHI5kpaWWVTwyOrzcev9AS8uyA77JB3ctsKueZnAotN
+ 8PtvREFfskUtaicTq/yZWBGYysDGG+hUQIDdfz929mH0zHr8nuVkHyY9Tf3uU4w44U2Dwvgi468k4PjT
+ RXFSzoPz4Zthn4PQVm/pJCakoymmcm5h8gogMCCkBQiNl/stQtytGgASnT8ZqR+0sdpDKpsK68TDYbhS
+ l8QegakSd4Z1shp6t50UE05GIC1DsUXTYf5kTIFkByLWQDZO8odmZa1Vxqh76/GfIzK8h18M6vKeDpfd
+ ZkJHn+r460AXZcefqjOHgpFatW8xnE9cD/s0hEq/ix2AY91amOZJ3Kg7GrqCdtDbTMpW4VJB+CIe2Ufi
+ uX4jfDvfJwHgaaihJiuwmMS8FU07qsL31RRp7QmpqRYDpdOv4IKMDtC15Yw8khanZ6vP/ATYtcwAsIOe
+ C4PBYfTs9IjP3MmYAI0FgWwxPxNv4zXrOiee7OduktlgIuP3shEmHPyjXpH+HPrjjL8iasZgZEJqwMHL
+ 4HxhOOyTaFLsoL/r9qRjp8PcoRDSHjRJ2tBzars/dFzCq5Q0iRITdKV0rEQXaHo6ZiRBogucUopyt7yK
+ j01GGoka4tA/auD/cj5czz8B5zs7Gi7rTVZz1WmOid8JcGnOiFdYp3KJwpwqJPmr58H2cBfozsrmRflJ
+ cHB5F73bQc/DTe1Q6oJ4eqmsBWhMLkCyAxTtvfZvCYmZn5N9XjjXgykTHery3mzPBrrxI5fqce48kxLu
+ 02b8mcO8/g0B4GW4330N7g/6w3J8V+i7WiG104WSybLZZdIG/V/PgmPcg3C9401+m7l4fth4U6VJKdcA
+ IIz5Sc8vuRfWSSfBODjbfeUnaqfnsEsxAWTlb5ImwYSFVLSAZBk/laeebOaf9n08EGBav7cPw+bVoa4I
+ IgqYVSr6ExgwyIy9a9SQ355Bx59Q/WMDwFYSzH/BbyBTQVcSAIymnLwElo4VcE+5DfXzd6jp6slmqmbT
+ 79BoyiUA0CYOmUl9s10P88AhsEyR1DhrVomfZH0YAMgBAJCSZv5sO/8iByve+3ggwLStxI/rHqzHD/v7
+ Qx3L5mygy3SfbMQJrxsCqr/q+CsNqP7aGHE0ANhGJ/iDWkXAWWhpYgBQh0j2PA/X7Otgn+ZULcZMFqJt
+ Fso1AAhuEXYC9EfNgW2ZSY3JZ520ALAtAACHUHe06bHiNVVfQLz3qQ5QrL+TBQEml0HG5NsdeK27J9wy
+ zeJsaP+phH6jzOjoV5m/A41tJV2wICLmHw0AmLYHAKA8ABrNAQBMXOhjIZyTJ8Axz5WDq/tSpVwBAKH6
+ K8UX9oC0x3zYFnSG/li5icaVAaAuCQ0gGdU/05mA6ar/4jXcBS3jqcvcmDPKGb7IJ4sAoCdxefEIEw79
+ TlX9O9K4tg04/gwNpH84CIh7YAD4XQMABc0EAEweyDtuRf3AxXC/jfBaFS2OcgEAxDNX1luzx3Y2Ciaf
+ BtOgeJuDMpHEdrwFz/c/wb/xb/hqN9Pf7kCCiI1MCZokBpIuEk00UyE1Uh0LiqGzWuk6JEHMxZAs1Iz8
+ mYU0D/qhiSDdSEDAuxJLAgCYUmX+5EEgNRMyEeNr30eq/3ylD47z4PYpdtRG7nWTRQDo9rwePe9TM/7Y
+ 669m/Kl2fGTGn9YRqL2HbQEA4AIhpUrIsPkAgGkT/N/2Q22/T+HjzUpyuvBnPGpuAAiz+6kVkt1/+dWw
+ zGS7Px4AkFBxjYd91dvw/OCLvTGIFKfp6KJ6uqiB67kR+phoMlrpg0JqtmNh6DgBBUeQhNJFY/70GV9u
+ 8FmyA6V9XPGkvvbGtfRrBx9uus+O3zpHEVZZAoDCTUDfq83ouink+KtS8v2hGFiRGX+hv8PNgFwDAB6w
+ n+B79TzUDN6ork/IicU9qVJzA4CIkyp2/6lk98+C7RmjuiIPsQCA47Wz4VyzGK4P5fDKQckAgC7Gq9gN
+ SFnaeTz0ez+IwnMIHPSpMn8sxk8lByDWg9FCQLJmAFNNoYwJd9vx8XExtvHKBgDQOU++14BTVhkVxmcA
+ aK/J+NNmyGgfjri7iCiA/Af8UrIA4IPsZyFhh+zmVkO2OzUXaXceJ31Gk8VP772c8MPnYW2RtcYO0Nn2
+ gr6CzIzCRBDD1X5WwT1jKOpn+kOl6luUP6A5AUBr91u7QNdpCWwrSDXcJ/SF6ADwEjwfToCdq62KUuFi
+ 8H0xrqNl9EjmF+/ZBGEAUEo9HQV914dQeBlNVCUCkQzzJ8P4mUoBlhr8G/vVTRD20AgnVvR1x06azgIA
+ VH8l4dIbzehSr+b6c6sMZPwJ6a99QPEcga/A/dNKuH85Dob2ZL75a+B31tOtETO7yRR07oJcv4NMQAIK
+ O6nnDnrv5qSeQMo3L/Tw+wPvA42lRXAhGF1Dx3kFJAVMxPzWuSjs0R3G/RKBAG8MOh32/jPUjUBa1Mag
+ Yuyb67rBWoFtIbV5DIXzu0B/aviXGgLAL/D92g91s+rVTULFFmGimEi6GoDIPRDVXcoOhX7fR1F4NfsK
+ ojF/fOkfn+nTmRnxpX1DINAm+6zr4cHUiQ744gVTMwwAemKF88YYceTHhqD057BffMdfbABYBtdn16L+
+ JYQvI5cjWuTK0ljvIx+Ddj6yNmquhFTyAor6HQR9h0QgQLC67VLU9nwH3q8QXsou56k5AEDr9DPTPyXT
+ UXBHd5iGRPYnEgBIZasdgvpZ38HHZZbF7sACABKZAEzRtABtfzglhusBlh8AXdcFsI0tiFIROL70j18k
+ BAmOJXo4sVX9hiDAPfn6QB9ufsCO2kQr/DIJAHSurq/p0OtuEzp6VcnPYb9ojr9kAWABnO/cCPsaqM9Z
+ WzwmGvPHek0EAKK4h2IK7gVdu3UoGtIO+lIkoG3wf3ERai/9Ej7evThnSn4loqYGgDCnn0FJ9rH0Hwwz
+ J/uYG345BAA0oqRqOZ54Du5/yqEtwgUAxNt4IRIEYgEA90lsD92GHv7eZJJMtZItmBzzJ2b8bK4AjAQB
+ vtamSj9uml2P/+2TRIQqgwBg3Qz0HmXCARv0Ssivo+L44wq/uuDSuFQBYC6ca26DnesBOBGqGxkp3bWv
+ saR/LPVcuweAqPpbfBoMBz4JW/9C6OJug8pmxTfwvNQbtddsbkFOwaYEAPEsxUBbL4XxrLGwzjWrNfii
+ /EAFAF6yuxDOtY/Atdan7g/HACBKRLMPIFbp8GRyZ7T94ofOfakiO7DD87A9Wgyd4pBMlfmzlQKcKOYv
+ /uVtvO6cbMd7pye5ajZTAEBP4ejH9ThzMTv+VOZvH4jdh+f7pwYA98Kx6E44WAPQmnyR6n88tV+78Cba
+ PBGVfRgARLXfMvqg7FqYT74L1gvIdNHHH0LZtxruudej/u56tZ857xRsagAIouzB0B8wF4WLKiB1jf0D
+ iW1YeS3c790Fx5Mu3ncR4N2CxZpwzsnOVGEF7hsjvwIA1KpfRNG8tqQGpsv86ZoAiSMAsR1+TDzTFw5x
+ YcnQFMp5ZwgAyn+UcNlIE7rsVBN+9gw4/gqBYF5lOgAwEfaZs+FkR5vw+0QWj40n7RNJfyBU9pslPc8D
+ xRSkVkGoUDkD1l6DYTkx0RBxpuATcN0xDvbHHC0gU7CpACDM6VdNzEXMP/sAru+RgL4ie/9G1M/bDPk3
+ hJhfqP6ZrK7K/RMA0IZa9TOwzdyLgCoR8zcmEzDZwYv3XnuMr/HOyR7cdZcDbnPCU4f/sJGzgSv8nnWn
+ Ece8xY4/KZDxp4b9jClJ/4YAMAx1tzwN9zsIaX5aDUD7WKIxe+wgTWgItfko7AMQuwLzXKishNR+OZkC
+ x8MYU2AJckPeOR32EQ/A9aI/xyMDTQEA2sG1EAKU3oWCsefBNByhsG9U+g3+P4n5H/0v/D8gZPeLopCZ
+ jrtyX1hQKT4AatULYJ14KIzHR59J8Zk/EyZAKuq/oF86+3DTXDu2tUlxSBoLAPT7jh/ocPFtJuzpVRN+
+ OgRq/BUog5s+APDZT8Cuq0gYfIqQ9icAIJ2hjTXcwhkstABRIFZpXaHbi0FgfxjaJzoZ7ws4BHVXvg4v
+ VzIWTsvG9jHj1BQAIKqjMLLahsF08UgUzJJC24JHpa2QtxHzz/8Cvq8RkvzM/Bz718b9MzWgPBYCAPiB
+ V09GwYhzYOrZUMSEZ/OlawKk0rFof4d7/GlwSvwYd78d67v5U3+yjQQAIxljvYeb0O1HVe0XGX8i7BfN
+ 65osCHgg1x2DXYN+gv8bhMK/2dgeTKupKtvYQ50Pykax1CqPhH6/pbBduSf05YlOtokA6xLU9v2KBBly
+ NDKQbQAIc/p1o8FbjMLnCyBVx/tRPWQ7q/3/gu8zqA+cGzO/cPplI/daTQjTAMBAmK+8Fpb+QHLM35wO
+ QKWyzxgnXu7lSe+pNgYA6LeHPK3H2XOMitQPd/zpGiReRIvJxgOAncRAJ6DmGtIIf0TjagImO+TCISg2
+ AxVzQmlnwHDwItiuKIXOmmBY5M/hWXU+akfUh/Y0zCkQyCYAaNHUWkyq/7MoemoP6I6N9yMaIfdE2Bet
+ g+dfCEl+rcdf2P1MmQYARn1lY1Bq1efDeN4EFIxCYD1ANLW/qUyAeMzPyT4rL3Nj/ihX+tt4NQIAOOzX
+ /3IzOtlV5t8jWOhDxPylpACg4TH1dz/A+3V31I7aDvkPqPOB50K2qgJrQYAFl9gWXAsCFVfAdOz9KLyY
+ hFlcTVZWndh3Dkb9bG8OOgWzBQBh9hQ91KKpKBhDdv/IeD+ikfFOg33Zs/C8i4aSnz3+2dxSifvLD1MA
+ QNWJMBw/A9YpkrIeoKHkT1b6x+potOOpJf+okPTZ4T7cMdOO+qJG3H26AEDy7LQpBhz/qiGo+outvUKO
+ v3AAEP2PBISGZoL6uzVw//NK1N2GkEBgH1A2y4JrQ8PKIjWEgwCbA+XXwnzSnbCebw6ki8cZWs/NqOu7
+ EO7XkGNOwWwBgNbuL7wQxjMnw/qYXlWpohJJfs/DcD6/EK43EC75RbhPLPjJ5sCJnYGUrcGqIXVZgaLH
+ 6KApHsNnKwqQyPbn8/2xhw+3PWDHnx0bOSRpAkC7TyVccgM7/vRB6c8LdrRbe2kBAAhxV7IA8AScT14H
+ +2yo86KpdgYKc14jBAJs+wtNoPxmWE67DQVnGxPkCLghb+qF2jM/gvcX5NDy4WwAgDatktMpO5G99BRN
+ in1jDw7c8+BcQ8z/ul99yELyi5hvrNV+maawvQGpVb+EokfKIFWlyvyNAYFkbH+mugIZ0yc58NGpGTCH
+ 0wAALvTR6zoTDvpWdfyFMv60FX4bhvQiAQCIDgrid1NhnzkNzmcQmhdNtTeg6JIWBER4UDEF6AvlE2Hp
+ fgMKTo+XKMTD+1943zgTtQNrIOdMpmCmAUCr+heYlDx/66SzYLwq1rWIs92PEvMvhetNmsZkTYZJfpHm
+ 21SDpd0dmAGgaiEKJ/HOrkB85s92DkDk4Hl1spLo88xV7szs4ZcGAHRboUePB43o4A85/hpW+G0cAFDH
+ /D1RO/pdeN+DCgCcA9KUuwNHRgZEeFBJEuJGH1ZMIi1gJCyn6CHFfBqcKbgW7vuuRv10Z44sH84GAATR
+ 8mwYT7sH1nmmwPr+SKIRcJLkf/EJuN7yhiR/NOZvqk0UGcEZ5YPJQDfAPOwSmC9oahMgltRXzyPjvVO8
+ mDElxWSfeJQiANj+AnqPMGGfjaGwXxs6gVUT9ssEADgg7zwdNdd9C9+XCCWBOTN018lSWCIbwkFA0QTo
+ MVQSCPS4BpYT42kCBNc1t6J+0BK4X0fIH9Bs5cQyCQBhqj9NhvaPo/CxvWGIWtePy3k9COeqZ+F+zxdK
+ 8hEr/Njmj1zj3xQoyf1nP0UwFNgTxnPGKJGA+OllmYgCxHMAau3+DZ18GDvXju1VGRySVACApuuJ9xrw
+ j9UNHX+mqAk/6QPAr/D93B011/8NeQPCk4CamiLXC0RqApV0sPI2FJw1gkCAq0zFOtHf8H1OWk2fH0P5
+ Ac3mD8gUAGgdJgX0puRWWK7pD/NYrQdd0C5CwSmwP/MmvJ/61YcaTe0XA4MmHBwRChQAUHUAdN0eg212
+ ssyfDQeglvnrye4f83A9fjwww0IjBQBgx98FY03oXK9K/z0gtvaKtdQ3fQB4gwTEJagbL4fMQ04Ey0YS
+ UDKkzWsR5gBHjYLmAFexHg3Lybeg4AxLjOgAVxJaB8/DQ1E32a4Ku2YzBTIJAMLrX3QE9Ac/gsKlNuja
+ BW44+MU/4N84AfanPoPvO6hMLzL8hLdfrPRqjr3TtaFAxRFIN9XuVRQtMCW9LDh7DkCfJGPWeCfeOD/N
+ ZJ94lCQAGGjGnj3GiEM/NQTTfcXWXokq/KYDAIvhXDIa9nlQTcTm3hpcGx6MpQlU0Idlw2A+fjKs58TK
+ E/CQELyRTIFlcHPUS7ucvclvKFODomT7kf5cOQeF04+F4aJQTX31vj6Fd/14Yn5S51j12R5oIs6fjuSP
+ 5SNLFIKPdz5RF0ABADrQ9lFYJxwAw2HRtAAgNT9A6JisuWjDxxDthtb2dmP+Tc70k33iUZIAsN8aHc6e
+ YVIcf3tqHH8WxMv1Tw8AqEu+K1E34SV43kQoBMhCojlLcMcCARYaIm24nO6jtDdMh82C9cKSGBmDG8kU
+ 6EGmwIZmNAUyBQDB3Ol+MPa6DdY5ksYR4leKJ3revQv2NT71IXIT9r5I8onG/KH5wfPLqGzWZ1Su14Fs
+ 9YNRRVcto0dRBC4b4IYdW2mifEL/OkmT8CnnE36EZKMIojRY0BF4LcyD+8DcK31HYOrPVAsK/PvPj/Dh
+ 7pl22G0ZeGLRKAkA4Iy/i4ab0PUvvSL5OwQcf4VRHX+NB4CdkLeci9rR38L3LUIRAJ4nzV2DPxYIiGSh
+ isBrGWnDXRbBdlln6NpEAj0/1xfgvn8Y6qd6mskUaCwAiGemJPxUQeq4EranK6APLpnkvP55cKxdCvf7
+ flXNF8zP70VRz1CGXyHNJaMiUCzYi1Srg9GFju1LQ7oXjkRHGuI9SdfoqOSbxOq/h8D1c7yDt7GajMh/
+ 0xXExBHhxHgTiB+qcAQqAHA6DCfdDus4aJ5Oco7A0HNMbwWg+tef7fyYMLcemzpkcV4kAACJIPSYhww4
+ +WmDkuzD0l8s9TUh0Uq/+AAQPRFIIo3R8+XZqL3REyoCE2sVYHNQNBAQeQLCL8BzqJRrXs5GYc8eMHbT
+ RYQJvZB3DUPdJSQgP0YzmAKNAYCwmD87/ibBcsMl1BC4g7/h23gPHM+8B+93ssrsqsQvoRu1EBNyhYgu
+ hJwH05yyEVMbqR1OrQ39bSTtUq8woD7tHjKj/w8f4iE8SFoBWSDKBEqUV8APKGxNQKmSEWibbQzUBxT3
+ F5v5k68LmOhB1BMUzZrowL+SreyTLiUAgMrvJPS+jpDXoQs4/tSlvoyUiQt9JAYAcWktACyF88lRsD8K
+ 1QEo1oPkUsHNSBDQZgwKk4Abb01efDsKThsGy0lWSGHB2//B+z4B3ZUbSeNBE68abCwA6AM3bTsUum5L
+ UPQ8qYIlrPJ/Ce+3U+FY8X2JfzsNhQnt6HvH0L+VpDnuS/Ongo5aaA4ZFCbTxbxCJobBTYy/FouxkObU
+ TsKlUHZhNJtL+DOCKcH0xx5zUThxH+gPABJpAeFrBoD0HBFKtw0ylg11Y1V/N+TGwGAyFAcAdDRS3ccZ
+ cfi/QtK/KuD4S67QR3IAoG3EAZ6BqLvzRXhEajgDAKvJWUbClEl7OzxvxNqBYFkxqGBQSl8o7AXjAffA
+ 2msP6IN7XvKqwUfhGDcejsfk0KajTWIKpAsA2sQIKxnNJUthe/hg6M+pM8C1qovr88cPdf648yBi9q40
+ X5jtC5TBSO16/9/elQBIUR3tb869YGGXFRZYIGA4PEC5ongiHngAiqABVERBEFBUQAFRicYjXKLgrySK
+ 8UARNd6IUeNFIgbBIwYkRI6oKKAC7u7szt1/VXe/nTezc+5Oz/bg1Pic2WF6prv61VfHq1eVLgCA+j0B
+ /BNvYBEWYDc4H5u1ibw7S/7VyIzA8quQN2YU8kbEDwRG3yoc+TqZm8E7/N49y48HbnbDm5/EwY3nT/S7
+ Q+93ftuKIfOcaB8R+Gtohd9kAOAH0oaDUTl1h7YFWPj/mUoBTpUE54QlIKoKiRWClvrg1wW9YWt3Lwov
+ 7A17V4vakkBNENp3PirP/hCBbYitnAw78VRJbPZRtf+FcJwxvnX+o+tO9NvWDPK6Nh8RQLBITQnXqDF5
+ sOllAfdz2ojb6fEVOLDE8Qg5JVOQyAisiwP0ga3/fBTeapFahSUj/ImSgGLIHP7bPYC7FtTipzYZsnZj
+ AICDbKWRlzvx691a4K+9Hvhrpgp/slV+UgeAD+Fffy6q5kIz/4X/74F5zP9IkkGAFUhkhWEBAqxYCipg
+ aT4PhecOh5OThtR8gU3wrR6EqikIFbo13BVoCADI5k6hpTf6njbQvmzzwEC3vZyZFmtGN/TsjLj8b7EF
+ s3EztoOrDbFpKRgufo2vj29e3dbgFrB0Xo6ieWWwtosn/A3V/jL9UBbEHffWYle3DCq7GADQZ7kNAx9z
+ qIJfoWf8JRf4azgA8NncipplD8DzLEL+v0gAMisAQOKg2EAkBwdZ8IUVwKCQR9rTfgXyes9CwagSWFuR
+ 1eebBdeYP2lpwiIgaOgkSBUAxOftZBy3wFWYjLMxjeyAsrjfZDYAYNpDNsBMzCEQ4G4uwr8UqCviAHzT
+ RD5A2xnIn3QWnAOTFf5UQEBcqtehYNHtbnxkdNAvkqIAQPEuCy4a70RHl7VO+7dKOvBXHwCSBYxaKK5h
+ qLpuIwJ8b+T1f1NsoU2C5OCgiAuI6kIMAMX63076kNIP9lbkEkwgF7oPuT5bzkDlef9DUAQEDb3mhgCA
+ hcS9JXnSS3AExqhLwInIjABAZNuL70+eaH/DsQ/77LActOlpySTUBwl+D+5D0P0VgrZazRVofTLsJ96C
+ wuv4zJIV/mRPX3zHqis9WD3Bm6BcqgEUCQAEg6fPsaPP+/a6Nf82eo0/Z0rCnzoAbIH/3yejakYwtPwn
+ dgCa0f+PRbKhExkXaK4/a20S6boIEZT5KBo6Cs7xf4FnwQTULEL8hjdpO8nUPl9I938h7kIfTEeyHZpN
+ CgBM7bZaMHF6PjocUCe3QmZZ0MZ7UGm4oSiV9PwTgtWEzJUHoXjPhKNLMayOWMLfGADYcIIP8xcYlOmX
+ zAlId7PD+1YMucWBCp8m/O30ZT+exalp/9QAgE6EBMH9CI2VCM//N7P/H4siXQJmHwu9sAYK9ff4c376
+ kHs4HN0JCK69CtVT3oWf0+UNjQWkCgBWjMCpZDq/pkJBsmRiAGDq9JkVV8zNQ8f9mobLg1bG2k8/XkOj
+ kgYJP9mhipqBdDiJQEN3BsZiz+72Qcx7sCZzQb9oJ6HPBgeJ29Crnei+3Spl/FnVwJ89ZeFPDQC8UDzn
+ omrKJ1r2n1wBSF6tiTdv5X+Lx8xMbjADQoFzsZFIAAG/dujnw8Lu7glr3jjkdZ+L2rXu0IqAIeecGgBw
+ a7c/4F6cgmtTOs7kAMDUeZMVY3+Xh04/CjNXI+Y+A8DPBMIMAHwH+9P9EhZ6MkCQiAXVRQruWVCLLX2b
+ ao8LQgBAzz2ftOG05XZ12U8E/lrSSC3w1zAA+BL+zSeiaiakDlAkIR4CHyupUIdV85tZYFij2umc7MfD
+ VtAe1ub5sBQ5NKEKc2YIOar2I/jz2/D/REhS44NSRRadWwnXrEbPtMikIbFKkKe/Zvbw+TAI8LQTPRAN
+ 3RiXGgC0JiXwGF4hW/C0lI7LAgBgOvxjKy67gywBHQT4LrHacelWAANAFY1j1E631pSsgFgs4WSfR6/3
+ 4K0Lfemp7NNQ0gGAA3/DrnWg8w9aR1+x1beIRrw1/2hZfakDgMJdgNd8iMDGX5EWJKujiO5Ds46wFHeH
+ rYhAoIWDBheZpc8X0nMzS0RWXYJLrCVJ2kdg/tWb8L62FJ5XdiD4rT+8SKeRM05ml1gqFEOwR4CAVxom
+ AYBylOAJrEExBqR0XJYAAFOPdVaMuScPFQc0k5fviptOolp3A3hw0csjVTfAknBzUKzLF0HEt4f4sOJG
+ D3zpquzTUOIVXJpmJ91jR/819rplP97qq1X4tcYV4FR3AkYb7HK9Q3O/VO0naFH7CkRWGEonkbvx9Svw
+ PDgP7hV7oHCeQSaq9Ua6BMKasUn/FoSme3gYWhQnNZ46SBEsxAocj9+mdFwWAQBTz7dtGLXAiXZVWlsr
+ tRAHoMcCguod6Uf3LE8HgIa4APz3tiMCWEim/4FU23gZQXQKbTdYcN5sJzrUhkz/UIXf+IKcDgDYSfN8
+ F/GXE41K9QpD7CCL3zbmspXAJ/CvGgPXTT9C4eVgsfaeKZdAAIEMAGIa8XkEYBoAYH9lFD2uIxCwpLBJ
+ J8sAgH/zmDdtGD3fida1VtU+41lRpcYCNCvgcGgmcrTNQYkEn8ePZUEsml+L7UeZY2WLA3+DZzpw5Oe2
+ Ou0vMv60Qh/pB4Dwvf8KPiAuM6/L9FTjZghfcjSKGAT+Dv/T4+G68ScovOSYSRAA6m+MDJ1aCAjE34ac
+ QLLkQAuaGwuwlBzhIUkflW0AAG2h/9g1NlwyPw8t/RraufUYAAMA37E+JBr2CCsgkfbn124n+bqz3Pjg
+ XL+xMztZopPq9oIVZy52qIG/9nWBP7nCr7EAsIfm+L9I0bHpz6OF3lTUoTPIaDYRCPjfhG/pRLjurA5t
+ OsrU3nxLxHOUOxT2nPYfTpZYDorRCUdhER5EB/RM6qgsBAARjjnuaZv/5AccB0thcXIHGDqdvGooVrYE
+ jlZ9VVtM4Y8UfBXKCVleGePFM5O9CDbFen8UKtgHnD/RiS57Qmv+ZXrGnz0KADAl3+cvMQAwfUSOFbtW
+ h+navxjh5cUzQX4orkWouWEhvKugBd+aAgRikSnyAPjzWtHMX+FY3EuPduie8KhsBQCmIBT7s9hquR8b
+ rIrqi9kcxAOSXWcv2NpMQ8FxdrXwaXwXQAT9Ng3w47673fAWNNF1RRKBXP+ldpzwjBb446h/Gz3fX2z1
+ TcYCSLQEGM9K+IFO4lOStRIp+FeE8OYimSKy8vZeDddFr8LHjWkztiuvqaghvGW9xcqhlGbLEVhMDkEn
+ UobxvimbAYCJ9+auxCYsx3p6zVpBDdzQR5x3o+C8HrC1FysC8ZKBvm8bxLyHa/BzmUnmE51G6VYLhpP2
+ bx+W8RcefDMSAPgkPiKWsqTJwT9eFLFnyPyPZAq5IxvPRNXF30HZg/S3oTcVNYS3fAyDgNZAoy264Q+4
+ k/7fN6EH05BfMgMAMPlJ9FfgfTxO8zVYV5ba0R+2rjehYLhVr4EYCwRq8hTc8VANdqa7nHdjLpGuYvAN
+ Dhy10aZrfy3w1zxC+xoJALsR8H2GgJVMfxtr/5K6pT8Eg6GhkHnOCT2Kl16Sg+6pglJzAMEafu2C4quk
+ UUv/Rpek8Gufzn7SVHYCFGc5rIVksbXtCltre5zuPYI+hO+R0aieUx2+C/GQA4GGgisfJ/qnl9LjV5iP
+ 35MdMCDqis2hAABMHpoID+F1PId/6gVH2QrIJytgXDfYO0dbDmSz30fQ8NgNHvxthAHlvBtBnd624txb
+ HKrWb6/X+Its7SWX6GoMAEQT/gCUwHVwvbMNQTcJZ6sCWAJcQ9IDxUMWgbuaXru01z4SdvcBKO7K8Nz4
+ WJ6XTCLpxk5WTf4s5J8whUYiEKAv8z8N963TUfuQGdt6p4saMx1lEChBK3TGdfQ4HeeS7Rge3jpUAIDJ
+ TTCwEM9gLTbSNGTT0Hk0bN1uQ8HVFn1SCcHX1m8UvHWBD4/f6FV3GZmFeNnv/HFOHL5bE/52er4/m3XR
+ C300ZBUg/jGkZXdcguqXXCFfW2TAiWU4IeiywEd7L1YcVpya2I2XTyBQtAyFQ4bDeayoxhOL6N7V3oya
+ Kx6Gdw1M1tY7XdRYfSTcAQ0E8mguTcYEjMRoNU9G0KEEAExVqMZirMSb+FRfoS0kzTK2Lxx6E1GlbpZs
+ PSqAexfVoqqkia4jBh37kA0nPW6v0/5t9GW/2Pn+6QUA1vITUf3UG/BvhSb48hBl3GVhjxT8aKAAhM8Y
+ /qnIgp1F5GqU/QXNLj8KtopEKUbkVuyejOqRr8LPtQmaqmGNYZQOg1SAgFZBx4G2uAyjMBZXEcuL1E8c
+ agDAVEmP27EC/wBPYFtHWDv+HoXTaJYVilm5r3UQixe68XV38/j9TC22WzBssgMdK236mr9FL/SRWmuv
+ xgDAq/B+NAWup72ajy26QbHwR9P+qQh/JACI6lVyea4Wx8LW5Tk0G18Ka/N4vFKDtwh8OgJVo7ZB+QaH
+ WFAwXR6pQFpmcjHBQTmG4jxcTS5BC5QekgDAtB8HcCuBwCbs4hWB0XCeMwzOM/mUqwkGHprnxienBEzl
+ 93Pg75Tb7Dj2XXtYxl/8Cr+WJIQ9+eP2I3jwYlQv/kIrgMkAwIk3ojdEsgIf+RqIPlsEAKiNayCV674A
+ jn7LUTQmXiNP7UsV5VMEXrkU1VP2aunCmWpXbzilc2oKEGDTn1dyDsNvcBJuwRy1FHhDv9HMAMB0AAcx
+ HY/gS3zfApaWc1FwZVuLpf0LV3rx0pU+48t5p0gV71kx+DYHKryhjL8SfdktVr5/ojTgVACAG2M+APfz
+ d9FA/Yawso8tzKZIXz+a7w9E983Fz4qW9aKFl9rDj/6hbCbyz7wJBeckzsJRAu/B99CVcN1WGV5DMqtB
+ IN26STBcbRIKZvTh6IW7MQ8d0aNB32Z2AGDaix8xBQ9jN6p6w9ZjwIn20Svu8Dg8RU107jHISaI2eJoD
+ 3f4TWvYr0wN/DsQ22RsLALLFsBn+/w5H1d2VvAIYKvcl92lgihfcS5RwGUlyIQ7RtENt5w2tpXfrpSgc
+ eSHy+ifiXwCK+zHU3nozPH/0y92sshgEjDJOhdml1dZvQzBwJ27D0WQTpPKb2QIAfI7fYA+ux1OW5iiy
+ LcFYf2kKFZMyQXSORz1hwynL7WinhJb9QhV+lThr9umJAXDgbzQJ/3oEOMuOC36Ict/sAoiOONG42xgS
+ Py9Kcola/QIEDiMelD+OoktPgr17oqCgH0rVLagd/zA8axECgXScZ5OQkd6pWH7R6usX0ZybgxsxCOcg
+ 2Z2E2QIAgr7GPtSSadidrtVkVLzDgvOucaDTfq3IR9u6Cr/azYgEgMYHAcOP4Vp/98H9zAK4X0Co1j+X
+ ++IYgGz+G0HxXAHu+1BGPOmwCs3GHQl7+0S33g1l9wRUj1wbvjKQA4AoJJjO2rCl6nJOxeW4COMIGhKX
+ wMg2ADApceDvhLvt6LvWrgp++yitvRoDAMlo/w/g3XQJXPcFNOEXrb5Y+8uNWYwuxCGUEgerRUCwTAxy
+ 37r+GUWXdZDadsWib+H/+AK4LtmJ4LfI4pWBTEzz8GVCm7pCMASTcQ15YyUJj8wBQOOI+NduvQWD5zhR
+ 4dESfsqlfH9rXeQ/PgCkXgsw9F27Efh+BKrmfwOFW7KJSr+y6Z8p4RGBarEsyCDAc1CAQKvTYe+5DEUX
+ t4G1ZaIv+xf8z/0W1dftg8KWTFauDGRqmsvLhJxvUo5+OA2zcC2po4q4R+UAoFHkqATOnO5Aj3/bVOFv
+ W6/QhxDYWADQuEKgZC7XTkL1A3+DfwNCpj8H/kSp70xvuZVBgC1TDgoyCAh3oPRs2I9ZiqKLWiXOEVD+
+ Avcdk1G7JJil6cKZnObCEuCYAKNtxZGdrWNrpmPcrn5BS8wjcgDQcCLe9VhtxcD7HWirhLS/CPyFJ/3E
+ CgImtwIQLWjoh+JbiNpnl8OzNqA1+RBlvuXkn0wLjAwCopOvAAFhCZQOg6MPgcBIcpPibtwOQqmZg5rR
+ j8D7DrIwXTjTAFBnBXSCpdcU5P9fTUt0eulaL/51dqB+VdwcADSKinYDQyY60eknTfhFcw9R6CNceGNb
+ AA0BAF7vXwHPG/eg9nlvSPjZ9OeuzLyO3pTBs8iVAQYB0cpbrA6UjoSj/xIUXViYoPJwJYI7hqHqnC+0
+ eEBWBQUz6QLwUFcFiJutZiL/zl6wX1QNxfJDXhBrx/qw7nJ/+IaZHAA0nMgmHXCXHX3X2FSzvx1hLwf+
+ ihGe8ZeMC5B84K+Obcor8H44GzUrq4HvEAr6sekvsv6aWlPKKwMyCHBL+Fb6KB0BRz+yBEbkw+KM9UW8
+ 8+NzBJ4dgaqpB7WchqyJB2QqCCi0v5qOOQSOoZOQdz+X1+KZwHX399sUrDvbh1dn+uDPl47MAUCD6LDP
+ LBg61YnygEVf87epGX/1C32kNwZApLwB3wYS/qcOQGGNyD4/a36R8GN4v7sUSF4ZiAoCFh0E7idLIB4I
+ cGffZXDPuAPux012jQkZkInfqMvEItuq4gEUrSZN1FXkdbLN5NKLbb7Y27v73fn+UjQnVyEHAA07dZp6
+ 50xwoNtWDvxZVO1fFjXwlygGkHwGoO69KW/B98l0uB6v5D009YVfLPmZSTvKICB2DIa5AzoI9E0EAlVQ
+ dl+MqmEbEPgPsqScmNHTXDb9C+hFixnImzkIjmvkD/FsIMgMvkZm4xPw/j3YBS1xNy5AJ1JchypnDKSu
+ z1kxaLFDDfjFD/wlcgGSBwBO9CHh33QDap5whbr6Rgq/Wf3jSBAQuwblmEDJUDiOvR+FF5LyKoxe90bB
+ FgRevQDVV+3nwkSh7EazXW/YhRv9/cL0b3YMbL3vQgFNT4RlydfQf0/C89qr8K3Xl1MCaEMgcAsuRV/0
+ 1JXWocUZg6iARG/YFU502B/a7NNKLbGt9XGP7ccnBwDRrAcO+P0Vvo0zyed3hZb6hM/PEX+xecbMabNi
+ rgp3IBIEeJScBfvRS1A4vA1sLaNNEXIFvEvhvukuuB/LhqVBI6e5mC/qeiv9r3QJCh7pDNsp8of2Qtn7
+ INzPf4zAF9CSQxg5PerxzckXm4GxOAOD61UZymbOGEWkW3+z0I5+L9nqov6tYY251TdZAIgXA/DQhH8U
+ nreWwP26X9P4IsVXFn5Z85tSEBC645EFRGQQ4NhASX/Yfn0fgUB32MqjVRWqQvDrMai++EME/g2TuwJG
+ TXN5mYUZWTwcjguvQt4S1LmLULYh8NVSeFbvQHAXtAnDE0dkiLHplEdHl+EqXIIRGE1/ZW6DTRYCQJuP
+ LRh8owPt3da6pB8utZ0PS9zGnpqQRwJAYvN/D4I/LUTtyy/D97GiCT9rfSH8bPaz8Jsh4p8sJQKBUn20
+ 7AhLu8UoGjoQ9h7WKCDwEXyrR6H6+iqNF2aLe9S7YCO+VwT+mpXD0pHMptXkh3aBxgluxbT+T/C8TL4S
+ LxGx0IuJwxaAS2caf0czgpHWOBvnYRqmkjpLmKdtas4YRHYSt0EzHTjiM5ta4SdU4y924C++BRAbAGge
+ Bz+B/6t5qH1xK4Lbod07Ifxif7/Q/KY2gaNQLBAQewdUK4AHoULpbBScNg55J3DTGPlLyBVwE38mPQjP
+ SwitCpirNBSMmeZy4I81dvNZyJtzKhyT+H1yiqqeI8F/Cb51bm2isMAfREj4eeII34lJ1BYowwCciFn0
+ aIOOWckZA6nr81acusSBdgGtxJcI/OXF6Opb/734ACA+T+atayW86/4Mz/sHyH1DyHLjwfdPDvhlm/AL
+ igQBnoMibVisEKiWAH2g+Ug4e92JgiGlsBbLX0IW0paLUXXRZs3CNWUA1CgAqEuu6ANbv1tR8CT9UfI9
+ gjsegOfRzxDYpWioyJPlZ30If5Hfl1siy7UFytAFR2Ee5qIbemUdZwyiwu+Bwdc60eVbYfrLNf6SXceX
+ AaD+MYqu9e+D+6+bENgWCIE2DxG7YctNLPVlq/ALkkFAzGdVoUEDAVFajJ+LjoOt470oHNED9g7iC/jC
+ X4HnvkmoudMXShAyFU/SPc3l5ZSCAmLUXSh4sAdsgzfAv/Z+uFcdCEWE+bkSIa0h/MXIfuhyMJEjs6XE
+ /i4EAtPJIjgjazhjFJFR2WeZDcetsusZf9aIjL/kmnNGAoD8/k4Ev3sU7g/WwPdpTcjMlwffPxZ+GbxN
+ NdEbQZEZg3JxUQECDAiF7WEpmY/CIYPh6G/VS8T7oVSPRfXQv8K/CeEJQqYgIwCAGaVG/ofAfs545P/h
+ GXhWkMn/d4924QGEtL8YrDXkopCIwqTwAiMFqMBUXIHhuIT+Jf0rBFkCAKVbLDhnmgMV1ZFbfS1xavwl
+ tgD4eScC362A54M34P2iJhTVF6AtrDYWfBm8Iwt1Hgokg4AoMMogIKyBEv11IU3OvMnIH3AD8ofn6xuJ
+ diHw7vGoHO3T+Gaq3IB0TvOwDRatYCmbiby5L8L3+gYEvtXf54sW2t+FkNYQ/lEixtQlFUHUFhhGj+sw
+ jbC5mWk5YxBZSeROvsWOXuu0fH95q28i7R8DABS6Eb5NZOo/Bc/69fBv94aEvCrKEPEaUc/fsD72JiB5
+ fovgoOwStNBf59OHLANhq1iMogkdYe3M/FiM2kn3wLMaJksTNgIA1KBJBSyt6UqdP5LvCFFzUhNy1hQ8
+ aSJN/mQZIi8vMtMPw4l6cPCwBlYfNpozRhBx6rD3LL7Bcx2WDkGrtQJWa7ne3CPU2isRACjqiowLinsb
+ At+8Df+X78P35fdagQtxj1j4qyOG8PXl+3coC78geV+LHBcQdQaL9b/5fYVcMetCFI45G45zSeJ/PAuV
+ p24mdwomCggaBgDSsOsME9rfow/RCKIhJqO4CaEVgh44BrNxE7qjZ1quy+wA8DPxbjI+bbYDlSz8nWB1
+ 9oK9eRdYW3IhiyJYnMR4LnivVuPmBpvE7ABH8Q9AqeRU1S8Q2Pctgvs+h/+bytAuPdZQtagPAMLUr0XI
+ ahMumym0WYZIxlCe66K6kMgXaKb/zfM+SMz3TIXzN9ej4PoN8L98OVyzvaFYSZPzzSgAEEMIPxNPFJ4w
+ kR1g0EAmRAYHW5HzezjmkkNwPAbRvzSuIr+ZAYC59TD+g0exGeGBOLXABjHFWkL+J6kiB1kDdu6w6yb5
+ /5k0vSvkg/r1Icx3AcwCAGqk52iC/0vR+rFIzD+R71LXekwfTv3fVau3N92SpSia8kd4lq2Edz1M4jIZ
+ FQOw6xcv4k0C6cSkS2eUuC7dGLxCwNWHr8Z4DMfFdGsSFx7NBGfSTTtxEBPwJulkecMNC2kQoYkpeM8k
+ N9XgwfyXAYCFWgYA2QpwI2SxiWMSdeT9pZDsEoi4QIE0RHCaeeZuC4syGs5Oy+FZX2OSPoNGAIA8+WJN
+ wHRPHrn6cAu6HW1I/C/CREyiW9K8Qd9oVgDgdsOz8QY+wBaE19b36J+woT4AaEeGVmGiAYAMAvIQ1lpk
+ kPaXLvyC5Hkv4gL5+rOwAoTFJYPsIQkAMkPk747Vvjnd1xIeHDyDXIHrMYOcg7ZNypl00npspyt6nqbU
+ Hmh77hkE2D8PIKSNBAgkYwHIICA/i+CebK3lhD42ySAgYgP8LLZhCBAQ7lZkvkuTnXQmv8voC5WDgxyQ
+ KUNP9MUczELnFFuTmREAakk4J+Jx/FfV/typlttrsQsQTfuLTVeyCxZEOAjwEBNRds9y2r5hFLlKIGJg
+ YjZFgu8hBQBmITk4qPUnLEd3/A4zcQxOzGrOPI1/YBleo+myC1AHLymx+e9HaOLJ5f5kigYCYkJGc81y
+ Qt8wki1g+X5EA+IcABh4XTxEQ0hOH+6k9iEYiCFIpsCI2TizFwcwASvI4OeW2txg43/Qim+w+S8mUCw3
+ LFZzzUSNNXPUcKq/iTIEAkymsLDMNs3TTXJwsIRetcGVGItL1dZkceu9m4ozHPibj1fxMt6DpvkZANj8
+ F9o/J7zmpGRnUQ4ADL7GUGsyDg6eh7MwDTNQHKe2gJk4s4kE/kasRI0q+DuhaX8O/nE02XR7zHOUPWSm
+ aW70dYrahFpwsA+Ow624BeUxaguYhTMuEvIbsQqfgFtqs/Dvghb9540lpkgnzVH2klmmeaaulV0CkT7c
+ Ch1wJG7HLByBvvV4YQbOsGi/gA24Fy+SqLPWZwDg6L+I/OeEP0eNIjNM80xfr9hWrNUW4BIj09Xg4GBY
+ pPRhM3BmDw5gKh4jb38rQtqfq/CIdf8c5ahRZIZp3hQkQEALDhaRLXA5LsMojKkLDjY1ZwLk2z+It/AU
+ 3gTqlv14WzUH/kRTzRzlqFHU1NO8KUls5GAQaAk7ynE+hmASpqjlyJuSMyzan5LGn4EnUVsX+PsaWtqv
+ yPnPUY4aTb9kABDXLzoWF6vVtI7DSZiFmTGDg5mgn8nEvxZPYJu6209E/Tnwx0U4cst+OUob/dIBgEnE
+ BdTGpeAVgk44Er/DbPRA74xziE3/xViDF/ABNMHfBW3Nn4t0cOAvp/1zlDbKAYBG9QuPtiQLYB7m4HgM
+ hCVDfOKEn4fI71+J9+gVR/sZAESHXTb9c4G/HKWVcgAQTnJwsJTgoByTcSVG4lJ619nI745PLtLuj+Ad
+ rMI6aOY++/xC+HOmf44MoRwA1CeRPhzKHDwdg8gnvwZtUJF2a4C1/nbswSKsxefqch8v87Hgi/baLPyi
+ ik+OcpRWygFAdAoPDnJcoC1+jXG4BKeSS9BCrb3ZON5xL+n9qMZL2IjnsB4H1f39vLmHBZ9BgFttcZmv
+ nN+fI8MoBwCxSQ4OanEBi5o21AODcRpOxgC0J1hwqEV4kycfmfLfkXC/j814HZ9hl+rrc4CPs/tEa20u
+ 8cXJPjnNnyNDKQcA8UnOHBS94dTGkGQDlBMYdCUgOAadcTg6kqvQHEUEF/nkQGiNIgP08JAQu1BLHv0B
+ bMP/8CEZ/DsJAn5SBZ7Ne9EYVTTX5PdEb8Sc8OfIUMoBQHIkkobk/nDFEGWgrTS4JnEB/e0kELDpteCC
+ 9PDRw02PH0mw/XUFNkW5bbnTjmi0YZqa8Tk69CkHAMmTXPVY1IIvlAb/LQpBiqrIogCEXBJdAIA8RDdd
+ udR2jnJkOOUAIHWSq8CK/geiCYpcCFLuSyAXhJSr7/5Sm2vkyCSUA4DGUWT9N1EDzobwUlCiBpwQ9lyl
+ 3RyZgv4fwxUHs6QSBV4AAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAGgAA
+ AB4AAAAeAAAAFwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABQAAABMAAAApAAAAQAAMAFgAEgBoABMAbAAOAGYAAQBYAAAASAAAADMAAAAcAAAACQAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAmACMAYABqAKwAowDfAL4A9QDG
+ AP0AxgD+AL8A+ACkAOUAbAC/ACIAhgAAAFgAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAQABAAPQCCALgAwwD6AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwwD8AHcAygAL
+ AHYAAABBAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFQApAFgAsADlAMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AKkA6wAXAIMAAABAAAAAEQAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
+ ABwAQgB0AL0A8wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AKYA6AAJAHIAAAAxAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAkAGAAkwDDAPoAyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AG8AxQAAAFgAAAAdAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAcALgB/
+ ALIAxgD+AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AwQD7ACQAjQAAAD8AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAAADwASAD0AmADMAMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AkwDcAAIAZgAA
+ ACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABQAJgBUAK0A4gDH
+ AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAACAAAAAQAAAAIAAAADAAAAAwAA
+ AAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAAAgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUAAAAZADoAbAC7APAAxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCv
+ AO8ACQB2AAAAOAAAABcAAAAWAAAAGwAAAB4AAAAeAAAAHAAAABgAAAATAAAADQAAAAcAAAADAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAMAAAADQAAAAgAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABgAAAAYAAAADAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIABXAIgAwgD5AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wBlAMYAAAByAAAATAAAAEEAAABFAAAASQAA
+ AEkAAABHAAAAQgAAADoAAAAxAAAAJgAAABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAQAAAAOAAAAGwAAACAAAAAaAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAkAAAAQAAAAEwAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAACgAEACoAdACmAMYA/QDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AL8A+wAbALEAAACIAAAAdAAAAHIAAAx6AQARfQAACXcAAABvAAAAaAAAAF4AAABRAAAAQQAA
+ AC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFAAAACgAAAA2AAAAMwQAQ08DADYmAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAADCAAAAAmAAAAJgAA
+ ABkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA4ADgA4AJAAxADHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIoF7wQAQtwIAH/kDACw8w0A
+ vvkOAML6DgDB+QwAtu8LAJ/fBwB2xAQAPZoAAAZwAAAAWwAAAEUAAAAuAAAAGQAAAAoAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA
+ ABkAAAAyAAAASAAABU4IAH6YCwClogAAAQkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAJAwA5TAUAT3wAAAFAAAAANwAAACEAAAAOAAAABAAAAAAAAAAAAAAAAAAA
+ AAIAAAASACAATQCnANwAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AxgD/BDlG/wkAi/8MALb/DgDF/w8AyP8PAMr/DwDM/w8Azv8PAND/DgDS/w4A
+ xPMIAHS+AQAXfAAAAFgAAAA+AAAAIwAAABAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAgAAAAPAAAAFcCACBzDAC40w8A5O4BAB8lAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIVCQCJuwcA
+ ebsAAAxdAAAARAAAACgAAAASAAAABQAAAAEAAAAEAAAAGAA0AGYAuADuAMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8ApQ//Bwdr/wsA
+ oP8NAMD/DwDH/w8Ayf8PAMv/DwDN/w8A0P8OANL/DwDU/xAA1v8PAND4BwB3vQAADm4AAABKAAAALAAA
+ ABQAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAPAAAAJQAA
+ AEMAAABiBABFlg8A2vERAOz/BwB0dQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoCACNACwCy9goAm+QCACR+AAAATgAAAC4AAAAWAAAADQAB
+ ACAATwCCAMEA+ADHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8DWDT/CQCD/wwAsf8OAMX/DwDI/w8Ayv8PAM3/DwDP/w4A
+ 0f8PANP/EADV/xAA1/8QANr/DQC96gMAOI4AAABSAAAAMQAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAEAAAAEgAAACkAAABKAAADbAcAcbYQAOj8EQDt/w0AxcoAAAoSAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
+ ABIGAGiUDAC2/wsArPYEAD2YAAAAVQAAADoAAwA7AG4AowDFAPwAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wC6
+ Bf8GFl3/CgCY/w4Avf8PAMf/DwDK/w8AzP8PAM7/DgDR/w8A0/8PANX/EADX/xAA2f8QANv/DwDX+gcA
+ Z6wAAAFWAAAAMgAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAABIAAAArAAAATgAA
+ DXUKAJ7READs/xEA7f8QAOn4AwA/QAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADCQKAKXhDAC2/wwAs/wFAFe2AAgAegCG
+ AMoAxgD+AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wJ/If8IAHr/DACr/w4AxP8PAMn/DwDL/w8A
+ zv8OAND/DwDS/w8A1P8QANb/EADY/xAA2/8QAN3/DwDe/ggAhsAAAAJXAAAAMQAAABQAAAAFAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAARAAAAKwAAAE4BABN6DAC54BEA7P8RAO3/EADs/wkAj4wAAAAIAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAADAQAQmMMALT9CwCq/wkThP8BnBH2AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMcA/wUwTP8JAI//DQC5/w4AyP8PAMv/DwDN/w4Az/8PANH/DwDU/xAA1v8QANj/EADa/xAA
+ 3P8QAN7/EADg/wkAicAAAARUAAAALAAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACoAAABOAQAVfA0A
+ wuYRAO3/EQDt/xEA7f8OAM3SAAANFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABGAcAc7QIJXT/Aa0Q/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AaER/wcEb/8LAKP/DgDD/w8A
+ yv8PAM3/DgDP/w8A0f8PANP/EADV/xAA1/8QANn/EADc/xAA3v8QAOD/EADi/wgAgLgAAAFMAAAAJQAA
+ AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAwAAAA4AAAAoAAAATAEAFXoNAMLmEQDt/xEA7f8RAO3/EADp9gMAPjsAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAYAAAAiAEAKjgC6CP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AxwD/A1U3/wkAhv8NALX/DgDI/w8AzP8OAM7/DwDQ/w8A0/8QANX/EADX/xAA
+ 2f8QANv/EADd/xAA4P8QAOL/EADi/gYAY6AAAABBAAAAHQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAJQAAAEkBABJ2DQC94hEA
+ 7f8RAO3/EQDt/xEA7P8HAHp0AAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIQBgAJIAwwD7AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AuAb/BxRh/wsA
+ m/8NAMH/DwDL/w4Azv8PAND/DwDS/w8A1P8QANf/EADZ/xAA2/8QAN3/EADf/xAA4f8RAOP/EADe+QMA
+ MnkAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAACgAAACAAAABEAAAMcAwAtd0RAO3/EQDt/xEA7f8RAO3/CwCnpgAABQwAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAACgAFACoAfACuAMYA/gDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AxwD/AI0A1wCRAdwAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8CeiT/CAB9/wwAr/8OAMn/DgDO/w8A0P8PANL/DwDU/xAA
+ 1v8QANj/EADa/xAA3P8QAN//EADh/xAA4/8RAOX/DgDI5wAADlcAAAAnAAAACwAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAbAAAAPQAAA2YKAJ7QEQDs/xEA
+ 7f8RAO3/EQDt/w4AyMoBABIVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwADgA2AJEAxADHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCWANkABgN9Bw9y4AGrFv8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDE
+ Af8FLU//CgCU/w0Av/8OAM3/DwDP/w8A0f8PANT/EADW/xAA2P8QANr/EADc/xAA3v8QAOD/EADi/xEA
+ 5P8RAOf/CQCLuAAAAEQAAAAkAAAAFgAAABMAAAARAAAADgAAAA0AAAALAAAACQAAAAgAAAAHAAAABgAA
+ AAcAAAALAAAAGQAAADgAAABeCACBvREA7f8RAO3/EQDt/xEA7f8PANvhAQAnJgAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAPABoARQCkANgAxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AyAD/AMgA/wDI
+ AP8AnADbAAwAcQUARqoMAKj/CSqB/wC+B/8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wGcE/8IA3T/DACp/w4AyP8PAM//DwDR/w8A
+ 0/8QANX/EADX/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA5v8QAOT7AwAzggAAAFAAAABCAAAAPAAA
+ ADgAAAA1AAAAMgAAAC8AAAAtAAAAKgAAACkAAAAoAAAAKAAAAC4AAAA/AAAAXAUAVqQQAOv+EQDt/xEA
+ 7f8RAO3/EADm8gMAPj4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAnAFQAsADkAMgA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMgA/wDIAP8AyAD/AKMA4gATAHQAAAt2CwCd8gwAqv8MAKj/Bkxk/wDH
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wRNPf8JAIz/DQC7/w4Azv8PANH/DwDT/xAA1f8QANf/EADZ/xAA2/8QAN7/EADg/xAA
+ 4v8RAOT/EQDm/xEA6P8MALHcAAACfgAAAHQAAABrAAAAZgAAAGMAAABgAAAAXQAAAFoAAABYAAAAVgAA
+ AFUAAABVAAAAWgAAAGkCAC2RDwDh+BEA7f8RAO3/EQDt/xAA7P0GAGVgAAAABQAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ ABIAMwBeALwA8ADIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AyAD/AMgA/wCr
+ AO0AFwCMAAAAfAYAWsENAKz/DQCr/w0Aqv8MAKf/BHhA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALUI/wcNaf8LAKL/DgDH/w8A
+ 0P8PANP/EADV/xAA1/8QANn/EADb/xAA3f8QAN//EADh/xEA4/8RAOb/EQDo/xAA6f4IAH3YCgCQ4QoA
+ m9oKAJfQCQCLxwcAeb4HAGe1BgBZqwUATaIEAEGdAwA5mgMAM5gDADueBQBYsA4Az+8RAO3/EQDt/xEA
+ 7f8RAO3/CQCPiAAAAQgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANADoAYwC/APQAyAD/AMgA/wDIAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDIAP8AsQH0ABsDpgAABJoAABOoCwCk+A0Arv8NAKz/DQCr/w0A
+ qv8MBqP/Ap0i/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AxwD/A3Aq/wkAhP8MALb/DgDO/w8A0/8QANX/EADX/xAA2f8QANv/EADd/xAA
+ 3/8QAOH/EQDj/xEA5v8RAOj/EQDq/w8A2P8MALL/DwDW/xAA6f8RAOz/EQDt/xEA7f8RAO3/EQDt/xEA
+ 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/wwAvbwAAAYOAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAx
+ AEgAwAD0AMgA/wDIAP8AyAD/AMgA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALMM/wgc
+ dPkKAJL5CQCE/gkAjv8NALH/DQCv/w0Arf8NAKz/DQCs/w0Aq/8KGJT/AbQQ/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwgL/BSNY/woA
+ m/8NAMX/DwDS/xAA1f8QANb/EADZ/xAA2v8QAN3/EADf/xAA4f8RAOP/EQDl/xEA5/8RAOr/EQDs/wwA
+ t/8OAMj/EADk/xEA7P8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA
+ 7f8PANrfAQAgIgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAJ0AwADIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wC1C/8IJXb/CwCk/woAl/8IAHv/DACq/w0Asv8NALD/DQCv/w0A
+ rv8NAK3/DQCt/w0ArP8JNnv/AMIE/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8BkBr/CAJ7/wwAsP8OAM7/EADU/xAA1v8QANj/EADa/xAA
+ 3f8QAN//EADh/xEA4/8RAOX/EQDn/xEA6f8RAOz/DgDU/wwAuv8PANz/EADr/xEA7f8RAO3/EQDt/xEA
+ 7f8RAO3/EQDt/xEA7f8RAO3/EQDt/xEA7f8RAO3/DwDf5gMANTYAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACAAAAAYAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX
+ AAcAwADgAMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AuQj/Byty/wsA
+ qP8LAKf/CQCN/wkAh/8MALX/DQCz/w0Asv8NALD/DQCv/w0Arv8NAK7/DQCu/wwArf8GYVb/AMcA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDG
+ AP8EQkb/CgCT/w0Awv8QANP/EADW/xAA2P8QANr/EADd/xAA3/8QAOH/EADj/xEA5f8RAOf/EQDp/xEA
+ 6/8QAOz/CQCOzAsAp8YNAMTSDwDk3xAA6u0QAOz4EQDt/xEA7f8RAO3/EQDt/xEA7f8RAOz9EADn5gsA
+ o5wCAC0lAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAIAAAAEgAAABgAAAAVAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgCbALIAyAD/AMgA/wDIAP8AyAD/AMgA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/ALsH/wcub/8LAKn/DACx/wsAof8IAIL/CwCg/w0Atv8NALT/DQCz/w0A
+ sv8NALH/DQCw/w0Ar/8NAK//DQCv/wwCrP8DijT/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wCtDP8HCXD/CwCq/w8Azv8QANb/EADY/xAA
+ 2v8QANz/EADe/xAA4P8QAOL/EQDl/xEA5/8RAOn/EQDr/xEA7f8IAHeeAAAAKwAAAgwAAA4IAAARDQAA
+ DRIBAB4XAwA8IgQAQCsEAEArBAA/JgIAJBcAAAwKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAABsAAAAqAAAALAAACyQCACUfAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAACwAKgC9AOYAyAD/AMgA/wDIAP8AyAD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDBAPkEMUfJCAB3tggA
+ f6MHAHOUBQBMlAQARaYNALX+DQC3/w0Atv8NALT/DQCz/w0Asv8NALH/DQCx/w0Asf8NALH/DQCx/wsO
+ ov8BrRb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AxwD/AMgA/wNkMv8JAIv/DQC+/w8A1P8QANj/EADa/xAA3P8QAN7/EADg/xAA4v8RAOX/EQDn/xEA
+ 6f8RAOv/EQDt/w0AxtoAAAA3AAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
+ ABAAAAAkAAAAOwAAAEUCAClTDACupwEAEBQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIAKwGKEMIAwgX/AMgA/wDI
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AwAD0AD0AaAAAABQAAAAEAAAAAgAAABEAAAA3BQBKmA4Auv8OALj/DQC3/w0A
+ tv8NALT/DQCz/w0As/8NALL/DQCy/w0Asv8NALL/DQCy/wonjf8Avgj/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMAD/wYaYv8LAKL/DgDM/xAA
+ 2P8QANr/EADc/xAA3v8QAOD/EADi/xEA5P8RAOf/EQDp/xEA6/8RAO3/EADs/AIAKFkAAAAaAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAUAAAALAAAAEgAAAJaBgBfjxAA5PEGAFhVAAAABgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAHAQAVKgwZqewGXlrpAJgE2AC8APIAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/ALgA6wA4AFwAAAAQAAAAAgAA
+ AAAAAAACAAAAGQAAAEMJAIPKDgC7/w4Auf8OALj/DQC3/w0Atv8NALX/DQC0/w0AtP8NALP/DQCz/w0A
+ tP8NALT/DQC0/wdHcf8AxgH/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMcA/wDIAP8AyAD/Aogf/wkAgv8NALj/DwDV/xAA2v8QANz/EADe/xAA4P8QAOL/EQDk/xEA
+ 5v8RAOn/EQDr/xEA7f8RAO//BwBskgAAACQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAGQAA
+ ADQAAABTAAAMbgoAmcIRAO/+DAC1sAAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPBgBfeA8A
+ 0/4KAJXNAQsQcwApAGoATgB4AGsAiACMAKQAngDCAL0A3wDGAPgAxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/gCaAMEAIQA8AAAACwAAAAIAAAAAAAAAAAAAAAUAAAAiAAAFUQ0As/IOALz/DgC7/w4A
+ uf8OALj/DQC3/w0Atv8NALX/DQC1/w0Atf8NALX/DQC1/w0Atf8NALX/DAG0/wVvTv8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AxgD/BThO/wsA
+ mv8OAMn/DwDZ/xAA3P8QAN7/EADg/xAA4v8RAOT/EQDm/xEA6f8RAOv/EQDt/xEA7/8MAK/GAAAALgAA
+ AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAAACgAAAB0AAAA6AAAAWwIAIoQNAL/gEgDx/xEA6PACACgrAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAUcDACw0BAA1P8NALTmAgAhfAAAAEsAAAArAAAAEwAA
+ AAcABgAIABYAEQAyAC8ATQBUAGUAdgCAAJMAkACkAI8ApAB1AIwAOABGAAIADwAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAACQAAACoCACp0DgC//w4Avf8OALz/DgC7/w4Auf8OALj/DQC3/w0At/8NALb/DQC2/w0A
+ tv8NALb/DQC2/w0At/8NALf/DQaw/wKYKf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8BphD/CAZ4/wwAsf8PANT/EADc/xAA3v8QAOD/EADi/xEA
+ 5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xAA4O4AAAw8AAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAsAAAAfAAAAPgAA
+ AGEEAEadEADe8xIA8f8RAPD/CAB5dAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAoDADZMDwDQ+Q8A0/8OAMb1BABAlAAAAFAAAAAtAAAAEwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAMwUAVZwOAMD/DgC//w4A
+ vf8OALz/DgC7/w4Auv8OALn/DgC4/w4AuP8OALj/DQC3/w0At/8OALj/DgC4/w4Auf8OALn/DBSk/wGz
+ Ev8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDI
+ AP8DWzn/CgCR/w4Axf8PANv/EADe/xAA4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/gMA
+ N2AAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAALAAAAIAAAAEAAAABlBwBpsREA7fwSAPH/EgDx/w4AxMQAAAgQAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIJAIOeDwDT/w8A0/8OAM/8BgBapgAA
+ AFIAAAAuAAAAEwAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAABMAAAA7CAB/wA4Awv8OAMD/DgC//w4Avf8OALz/DgC7/w4Auv8OALr/DgC5/w4A
+ uf8OALn/DgC5/w4Auf8OALn/DgC6/w4Auv8OALv/CjGK/wDCBP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wC6Bv8HF2j/CwCp/w8A0/8QAN7/EADg/xAA
+ 4v8RAOT/EQDm/xEA6f8RAOv/EQDs/xEA7/8RAPH/BwBmiAAAAB0AAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAAAB8AAABAAAACZggA
+ eroRAO/+EgDx/xIA8f8RAOryAwA1NQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABwEAEygNAMDjDwDT/w8A0/8PAND9BwBlrQAAAVIAAAAsAAAAEgAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGAAAAEILAKXfDgDD/w4A
+ wf8OAMD/DgC//w4Avf8OALz/DgC8/w4Au/8OALr/DgC6/w4Auv8OALr/DgC6/w4Auv8OALv/DgC7/w4A
+ vP8NALz/B1pl/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wJ/Jf8JAIj/DQC//w8A2/8QAOD/EADi/xEA5P8RAOb/EQDp/xEA6/8RAOz/EQDv/xEA
+ 8f8KAJGsAAAAIwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAkAAAAdAAAAPgAAAGQIAH+9EQDw/hIA8f8SAPH/EQDw/ggAfXcAAAAGAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAUATGAPANL8DwDT/w8A
+ 0/8PANH+BwBmrAAAAE4AAAAqAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAMAAAAeAAAFSw0Av/gOAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL3/DgC8/w4A
+ vP8OALv/DgC7/w4Au/8OALv/DgC7/w4AvP8OALz/DgC9/w4Avv8NArv/BIU9/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMYA/wUwVf8LAKH/DgDQ/xAA
+ 4P8QAOL/EQDk/xEA5v8RAOn/EQDr/xEA7P8RAO//EQDx/w0AvcsAAAAoAAAACAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAGgAAADoAAABhCAB3uBEA
+ 8P4SAPH/EgDx/xIA8f8NALezAAADDAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAAAEQkAiJ8PANP/DwDT/w8A0/8PANL+BgBbowAAAEoAAAAmAAAADQAA
+ AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACICACJkDgDG/g4A
+ xf8OAMT/DgDD/w4Awf8OAMD/DgC//w4Avv8OAL7/DgC9/w4Avf8OALz/DgC8/w4AvP8OAL3/DgC9/w4A
+ vf8OAL7/DgC//w4AwP8MDLP/Aace/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AaIS/wgCf/8MALn/DwDb/xAA4v8RAOX/EQDn/xEA6f8RAOv/EQDs/xEA
+ 7/8RAPH/DwDV5AAABC8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAABQAAABcAAAA2AAAAXQcAa7ARAO/+EgDx/xIA8f8SAPH/EADc3gEAGR0AAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAKHQwA
+ tdMPANP/DwDT/w8A0/8OAND8BQBKlgAAAEUAAAAhAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAGAAAAJgQAN3gPAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4A
+ v/8OAL//DgC+/w4Avv8OAL7/DgC+/w4Avv8OAL7/DgC//w4Av/8OAMD/DgDB/w4Awv8LIp7/ALwK/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/BFRA/woA
+ mP8OAMz/EADh/xEA5f8RAOf/EQDp/xEA6/8RAO3/EQDv/xEA8f8RAO31AQAQOwAAAAwAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAMAAAAFgFAFKhEQDt/BIA
+ 8f8SAPH/EgDx/xEA6/IDAD48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAgApOw4AyO0PANP/DwDT/w8A0/8OAMv4AwA4hQAA
+ AD4AAAAcAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAqBQBQjA8A
+ yf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4Awv8OAMH/DgDA/w4AwP8OAL//DgC//w4Av/8OAL//DgC//w4A
+ v/8OAMD/DgDA/w4Awf8OAML/DgDD/w4Aw/8IRH7/AMYB/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8Atwj/CBFw/wwAsf8PANr/EQDl/xEA5/8RAOn/EQDr/xEA
+ 7f8RAO//EgDx/xIA8/8CACFMAAAAFQAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAA
+ AAEAAAAEAAAAEAAAACoAAABQBAA8kREA5/gSAPH/EgDx/xIA8f8RAO/7BgBnYQAAAAYAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAALBQBQYQ8A0foPANP/DwDT/w8A0/8NAL7uAQAdcAAAADYAAAAWAAAABgAAAAEAAAAAAAAAAAAA
+ AAAAAAABAAAAAQAAAAIAAAACAAAADAAAADAGAGCgDwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMT/DgDD/w4A
+ wv8OAML/DgDB/w4Awf8OAMD/DgDA/w4AwP8OAMD/DgDB/w4Awf8OAMH/DgDC/w4Aw/8OAMT/DgDF/w4A
+ xf8GbVb/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8Cdiv/CgCP/w4Ax/8QAOP/EQDn/xEA6f8RAOv/EQDt/xEA7/8SAPH/EgDz/wQAO20AAAA0AAAAKAAA
+ ACYAAAAkAAAAIAAAAB4AAAAcAAAAGgAAABgAAAAYAAAAGAAAAB0AAAAuAAAATQEAHHwPANfvEgDx/xIA
+ 8f8SAPH/EQDw/gkAioQAAAIIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAEPCAB1ig8A0/8PANP/DwDT/w8A
+ 0/8MAK/hAAAKXgAAADQAAAAcAAAAEwAAABEAAAARAAAAEwAAABQAAAAWAAAAGgAAABwAAAAnAAAASQgA
+ dLYPAMz/DwDK/w8Ayf8PAMj/DwDH/w4Axf8OAMX/DgDE/w4Aw/8OAML/DgDC/w4Awv8OAML/DgDC/w4A
+ wv8OAML/DgDC/w4Aw/8OAMP/DgDE/w4Axf8OAMb/DwDG/w4Fwf8DkzL/AMgA/wDIAP8AyAD/AMgA/wDH
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDCAv8GKV7/DACp/w8A2f8RAOf/EQDp/xEA
+ 6/8RAO3/EQDv/xIA8f8SAPP/BQBFkAAAAF4AAABVAAAAUwAAAFAAAABMAAAASQAAAEYAAABEAAAAQgAA
+ AEIAAABCAAAASAAAAFgAAAh0DQC84BIA8f8SAPH/EgDx/xIA8f8MALCpAAAFCwAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAYVCgCZsw8A0/8PANP/DwDT/w8A0/8JAIXEAAAAXAAAAEYAAAA7AAAAOQAA
+ ADkAAAA7AAAAPgAAAEAAAABDAAAARwAAAFIAAABuCAB8yg8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w4A
+ xv8OAMX/DgDF/w4AxP8OAMP/DgDD/w4Aw/8OAMP/DgDD/w4Aw/8OAMP/DgDE/w4AxP8OAMX/DgDG/w8A
+ x/8PAMj/DwDJ/w0StP8Brxf/AMgA/wDIAP8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wGWGv8JAob/DQDB/xAA4/8RAOn/EQDr/xEA7f8RAO//EgDx/xIA8/8HAGa4BQBJqAQA
+ QZ4DADeXAgApjAEAFYAAAAZ6AAAFdgAAA3IAAAFwAAAAbwAAAHAAAAF0AAAHgQsAnNERAPD/EgDx/xIA
+ 8f8SAPH/DgDQzgEAEBUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAABAhDQC31g8A
+ 0/8PANP/DwDT/w8A0v8GAFywAAAAcgAAAGkAAABnAAAAaAAAAGoAAABsAAAAbgAAAXIAAAZ3AAALggAA
+ DJgJAIjeDwDP/w8Azf8PAMz/DwDK/w8Ayf8PAMj/DwDH/w8Ax/8PAMb/DgDF/w4Axf8OAMX/DgDE/w4A
+ xP8OAMT/DgDF/w4Axf8OAMX/DgDG/w8Axv8PAMf/DwDI/w8AyP8PAMr/DwDK/wstmv8Avwf/AMgA/wDI
+ AP8AxwD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMcA/wVGSv8LAKH/DwDV/xAA
+ 6f8RAOz/EQDt/xEA8P8SAPH/EgDz/w8A0v8QAN//EgDw/xIA8f8SAPH/EgDx/xEA7fwQAOT2DwDX7w4A
+ y+oOAMToDgC+5g4AxukQAOD1EQDw/xIA8f8SAPH/EgDx/xAA5+wCAC4uAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgCACs/DwDL8Q8A0/8PANP/DwDT/w4A0P0LAKPgCQCI0gkA
+ f84JAIfRCQCO1AoAm9sMAKjkDACy7A0Av/INAMH4DACq/QwAuP8PAND/DwDP/w8Azf8PAMz/DwDL/w8A
+ yv8PAMn/DwDI/w8Ax/8PAMf/DwDG/w8Axv8OAMb/DgDG/w4Axv8OAMb/DwDG/w8Axv8PAMf/DwDH/w8A
+ yP8PAMn/DwDJ/w8Ayv8PAMz/DwDM/whSdv8AxwD/AMgA/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/ALEL/wgKev8NALr/EADj/xEA7P8RAO7/EQDw/xIA8v8SAPP/DwDT/xAA
+ 3/8SAPD/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA
+ 8f8RAO/7BgBbVgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AA0GAF5yDwDS/g8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w4A
+ y/8MAK3/DAC5/w8A0f8PAND/DwDP/w8Azv8PAMz/DwDL/w8Ayv8PAMn/DwDJ/w8AyP8PAMf/DwDH/w8A
+ x/8PAMf/DwDH/w8Ax/8PAMf/DwDH/w8AyP8PAMj/DwDJ/w8Ayv8PAMr/DwDL/w8Azf8PAM7/DgHM/wV9
+ Sv8AyAD/AMcA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/A2g1/woA
+ mP8OAND/EADq/xEA7v8RAPD/EgDy/xIA9P8PANT/EADg/xIA8P8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA
+ 8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EQDw/gkAiIIAAAEIAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAhAJAI2eDwDT/w8A0/8PANP/DwDT/w8A
+ 0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DgDM/wwAr/8NALr/DwDS/w8A0f8PAND/DwDP/w8A
+ zv8PAM3/DwDM/w8Ay/8PAMr/DwDJ/w8Ayf8PAMj/DwDI/w8AyP8PAMj/DwDI/w8AyP8PAMn/DwDJ/w8A
+ yf8PAMr/DwDL/w8Ay/8PAM3/DwDO/w8Az/8PAND/DgjF/wKkI/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AwQP/Bx1q/wwAsv8PAOH/EQDu/xEA8P8SAPL/EgD0/wwA
+ rc4QANrnEgDw/hIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPH/EgDx/xEA
+ 7fQIAH9wAAAEBwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABAAABxEKAJCcDwDS/A8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A0/8PANP/DwDT/w8A
+ 0/8PAM3/DQCy/w0AuP8PANT/DwDS/w8A0f8PAND/DwDP/w8Azv8PAM3/DwDM/w8Ay/8PAMv/DwDK/w8A
+ yv8PAMr/DwDJ/w8Ayf8PAMn/DwDJ/w8Ayv8PAMr/DwDL/w8Ay/8PAMz/DwDN/w8Azv8PAM//DwDQ/w8A
+ 0f8PANL/DB6v/wC6DP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8CjCD/CQCP/w4Ayv8QAOr/EQDx/xIA8v8SAPT/BQBLagAAARIBACAQBAA3KgQAREEGAGhSCABvYggA
+ cnIJAIWCCwCjjgsAp5YMAKeWCwCmkgkAhn8IAG5dAgAgFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAUAAAAJAAAACgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAMAAAAEAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYEAD09CQCEigsA
+ orINALnBDQC6xA0AuL8MALS6CgCVrAkAi5oJAIiLCAB1eQYAV2gEAEJnCAB9sxAA1f8PANT/DwDT/w8A
+ 0f8PAND/DwDP/w8Az/8PAM7/DwDN/w8Azf8PAMz/DwDL/w8Ay/8PAMv/DwDL/w8Ay/8PAMv/DwDL/w8A
+ y/8PAMz/DwDN/w8Azf8PAM7/DwDP/w8A0P8PANH/DwDS/w8A0/8PANP/CkCM/wDEA/8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDGAP8FPVP/CwCp/w8A3f8RAPD/EgDz/xIA
+ 9P8EAERZAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAFgAAABwAAAAYAAAADQAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAwAAAAPAAAADAAA
+ AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA
+ AAAAAAAAAAAABAAAACAGAFyMEADW/xAA1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8Az/8PAM7/DwDO/w8A
+ zf8PAM3/DwDM/w8AzP8PAMz/DwDM/w8AzP8PAMz/DwDN/w8Azf8PAM7/DwDO/w8Az/8PAND/DwDR/w8A
+ 0v8PANL/DwDU/xAA1f8PANT/B2dk/wDHAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wGpEP8ICIH/DQDC/xEA6v8SAPP/EgD1/wMAM0UAAAAJAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEQAA
+ ACMAAAAxAAAAMAEAEisDADcoAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAJAAAAFgAAACAAAAAhAAAAFgAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGwUATHcQANj/EADW/xAA
+ 1f8PANT/DwDT/w8A0v8PANH/DwDQ/w8A0P8PAM//DwDP/w8Azv8PAM7/DwDO/w8Azv8PAM7/DwDO/w8A
+ zv8PAM7/DwDO/w8Az/8PAM//DwDQ/w8A0f8PANL/DwDS/w8A0/8QANT/EADW/w8A1/8PBNH/BI87/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wNgPP8LAJ//DwDZ/xEA
+ 8f8RAPP6AQAUMwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABgAAAAvAAAARAAAAEkEAElrDAC9sgEAERMAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgFAFJGAwAwTwAA
+ ADoAAAAzAAAAHwAAAA0AAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAWAwAsXg8A2f4QANj/EADX/xAA1f8PANT/DwDT/w8A0/8PANL/DwDR/w8A
+ 0P8PAND/DwDQ/w8Az/8PAM//DwDP/w8Az/8PAM//DwDP/w8Az/8PAND/DwDQ/w8A0P8PANH/DwDS/w8A
+ 0/8PANP/EADU/xAA1f8QANb/DwDX/xAA2f8OEMX/Aa4Z/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AL0F/wgYcf8NALv/EQDp/xAA5+oAAAwmAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA4AAAAgAAAAOgAA
+ AFQBABBmCgCXthEA8PgEAEZFAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABxcMAL3CBwB2mwAAB1QAAABCAAAAKAAAABMAAAAGAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEBABRADwDY/BAA
+ 2f8QANj/EADX/xAA1v8QANX/DwDU/w8A0/8PANP/DwDS/w8A0v8PANH/DwDR/w8A0f8PANH/DwDQ/w8A
+ 0P8PANH/DwDR/w8A0f8PANH/DwDS/w8A0v8PANP/DwDU/xAA1f8QANX/EADW/xAA1/8PANj/EADa/xAA
+ 2/8MKav/AMAH/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AoMm/woA
+ lv8PANP/DQDG0QAAABoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAYAAAASAAAAKQAAAEYAAABiBAA7jg8A1ekSAPT/CgCWjgAAAAgAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQMA
+ NEQPAOb2DAC72AIAJncAAABPAAAAMgAAABkAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAOAMrnEADa/xAA2f8QANj/EADX/xAA1v8QANX/EADV/w8A
+ 1P8PANP/DwDT/w8A0v8PANL/DwDS/w8A0v8PANL/DwDS/w8A0v8PANL/DwDS/w8A0/8PANP/DwDT/w8A
+ 1P8QANX/EADW/xAA1v8QANf/EADY/w8A2f8QANr/EADc/w8A3P8JT4L/AMYB/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxgD/BjJd/wwAsf8KAJizAAAAFQAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAFgAAADAAAABQAAAFbwgA
+ d7YRAO77EgD0/w4A0s8BAA8UAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEAgAhY8QAOz/DwDe9AUAVJwAAABaAAAAOgAA
+ AB4AAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAJwsA
+ osYQANz/EADb/xAA2f8QANn/EADX/xAA1/8QANb/EADV/xAA1f8PANT/DwDU/w8A0/8PANP/DwDT/w8A
+ 0/8PANP/DwDT/w8A0/8PANP/DwDU/w8A1P8QANX/EADV/xAA1v8QANf/EADX/xAA2P8QANn/DwDa/xAA
+ 2/8QANz/EADe/w8B3P8FeVX/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8BohX/CgWL/wYAYZoAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAACAAAABkAAAA1AAAAVwEAF4AMALLaEQDz/xIA9P8RAO30AwA7OwAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAGAAAMHw0Ax9AQAOz/EADq/gkAj8MAAApnAAAAQQAAACIAAAANAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAeCAB6nxAA3f8QANz/EADb/xAA2v8QANn/EADY/xAA
+ 1/8QANf/EADW/xAA1f8QANX/EADV/xAA1P8QANT/EADU/xAA1P8QANT/EADU/xAA1f8QANX/EADV/xAA
+ 1v8QANb/EADX/xAA2P8QANj/EADZ/xAA2v8PANv/EADc/xAA3f8QAN//EADg/w8I1P8Cni3/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDHAP8EVEb/AwAsjAAAAB8AAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAkAAAAbAAAAOAAAAFwDADSSDwDX7hIA
+ 9P8SAPT/EQDz/ggAgnsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAwA3Rg8A5/cQAOz/EADs/w0A
+ v+ECAB93AAAARgAAACQAAAAOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ ABUFAEpwEADe/xAA3f8QANz/EADb/xAA2v8QANr/EADZ/xAA2P8QANf/EADX/xAA1v8QANb/EADW/xAA
+ 1v8QANX/EADV/xAA1f8QANb/EADW/xAA1v8QANb/EADX/xAA1/8QANj/EADZ/xAA2f8QANr/EADb/w8A
+ 3P8QAN3/EADe/xAA3/8QAOH/EADi/w4awf8BuBD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wC3CP4AFAaTAAAAOgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAJAAAAHAAAADoAAABeBQBInRAA5/gSAPT/EgD0/xIA8/8NAL65AAAIDQAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAPCAB+hRAA7P8QAOz/EADs/w4A1vADAC+CAAAASAAAACYAAAAPAAAABAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAFD0PAN36EADf/xAA3v8QAN3/EADc/xAA
+ 2/8QANr/EADZ/xAA2f8QANj/EADY/xAA2P8QANf/EADX/xAA1/8QANf/EADX/xAA1/8QANf/EADX/xAA
+ 2P8QANj/EADZ/xAA2f8QANr/EADb/xAA2/8QANz/DwDd/xAA3v8QAN//EADg/xAA4f8RAOP/EQDk/ws4
+ oP8AxAP/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wB8ANAAAABeAAAAIAAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAABwAAAA7AAAAYAYAV6YRAO78EgD0/xIA
+ 9P8SAPT/EADg4AIAHx8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAYXDAC8whAA
+ 7P8QAOz/EADs/w8A3PQDADqJAAAASAAAACUAAAAOAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAHAAABJg0Au9UQAOD/EADf/xAA3v8QAN3/EADc/xAA2/8QANv/EADa/xAA2v8QANn/EADZ/xAA
+ 2f8QANj/EADY/xAA2P8QANj/EADY/xAA2P8QANn/EADZ/xAA2f8QANr/EADa/xAA2/8QANz/EADc/xAA
+ 3f8PAN7/EADf/xAA4P8QAOH/EADi/xEA4/8RAOX/EADl/whhc/8AxwD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMQA/AAuAJUAAABCAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAcAAAAaAAAAOQAAAF8GAF+qEQDu/BIA9P8SAPT/EgD0/xEA7PIEAEM9AAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYBAB8tDwDa5BAA7P8QAOz/EADs/w8A4PYEAD+MAAAARwAA
+ ACQAAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaCAB9mxAA4f8QAOD/EADf/xAA
+ 3v8QAN3/EADd/xAA3P8QANv/EADb/xAA2v8QANr/EADa/xAA2v8QANn/EADZ/xAA2f8QANn/EADa/xAA
+ 2v8QANr/EADa/xAA2/8QANv/EADc/xAA3f8QAN3/EADe/w8A3/8QAOD/EADh/xAA4v8RAOP/EQDk/xEA
+ 5f8RAOf/EAPi/wWKRf8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AJwA4gAD
+ AGgAAAAoAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAFwAAADYAAABdBgBbpxEA7/wSAPT/EgD0/xIA
+ 9P8RAPL6BgBmWgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAoEAENODwDn9hAA7P8QAOz/EADs/w8A4PYEAD2JAAAARAAAACEAAAAKAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAA8DADRWEADi/hAA4v8QAOH/EADg/xAA3/8QAN7/EADd/xAA3f8QANz/EADc/xAA
+ 2/8QANv/EADb/xAA2/8QANv/EADb/xAA2/8QANv/EADb/xAA2/8QANz/EADc/xAA3P8QAN3/EADe/xAA
+ 3v8QAN//DwDg/xAA4f8QAOL/EQDj/xEA5P8RAOX/EQDm/xEA5/8RAOn/Dw/U/wKqIP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AxwD/AEsArAAAAEwAAAAVAAAAAQAAAAAAAAABAAAABQAA
+ ABQAAAAyAAAAWQUAU6ERAO77EgD0/xIA9P8SAPT/EQDz/AgAfHIAAAEGAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwHAGpwEADr/BAA7P8QAOz/EADs/w8A
+ 3fQDADGAAAAAQAAAAB0AAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAABicOAMfcEQDj/xAA
+ 4v8QAOH/EADg/xAA4P8QAN//EADe/xAA3v8QAN3/EADd/xAA3P8QANz/EADc/xAA3P8QANz/EADc/xAA
+ 3P8QANz/EADc/xAA3f8QAN3/EADe/xAA3v8QAN//EADf/xAA4P8PAOH/EADi/xEA4/8RAOT/EQDl/xEA
+ 5v8RAOf/EQDo/xEA6v8RAOv/DSi5/wC+Cv8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AtADyAAwAfgAAADwAAAAUAAAADQAAAA8AAAAaAAAAMgAAAFUDADyTEQDt+hIA9P8SAPT/EgD0/xEA
+ 8/4JAJKIAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAwAAAA4IAIiLEADr/hAA7P8QAOz/EADs/w4A2PACACV0AAAAOgAAABoAAAAIAAAAAgAA
+ AAEAAAABAAAAAgAAAAIAAAAFAAAAGggAeZYRAOT/EQDj/xAA4/8QAOL/EADh/xAA4P8QAOD/EADf/xAA
+ 3/8QAN7/EADe/xAA3v8QAN7/EADd/xAA3f8QAN3/EADe/xAA3v8QAN7/EADe/xAA3v8QAN//EADf/xAA
+ 4P8QAOH/EADh/xAA4v8RAOP/EQDk/xEA5f8RAOb/EQDn/xEA6P8RAOn/EQDr/xEA7P8RAO3/CkyP/wDG
+ Af8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AbADPAAAAeQAAAEkAAAA0AAAANQAA
+ AEIAAABaAgAoiBAA4PQSAPT/EgD0/xIA9P8RAPT/CwConAAABQkAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABBIKAKClEADs/xAA
+ 7P8QAOz/EADs/w0AyOYBABNnAAAAPAAAACQAAAAaAAAAGAAAABgAAAAaAAAAGwAAAB4AAAAqAgAkXRAA
+ 4PoRAOX/EQDk/xEA4/8QAOL/EADi/xAA4f8QAOD/EADg/xAA4P8QAN//EADf/xAA3/8QAN//EADf/xAA
+ 3/8QAN//EADf/xAA3/8QAN//EADg/xAA4P8QAOH/EADh/xAA4v8QAOL/EADj/xEA5P8RAOX/EQDm/xEA
+ 5/8RAOj/EQDp/xEA6v8RAOz/EQDt/xEA7v8QAO3/BnZf/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wC/APwAHwC2AAAAhgAAAGgAAABkAAAAbQEAGYgPANLsEgD0/xIA9P8SAPT/EgD0/wwA
+ tLAAAAgOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAACxgMALe9EADs/xAA7P8QAOz/EADs/wsAr9YAAAdoAAAATwAA
+ AEQAAABCAAAAQgAAAEMAAABGAAAASAAAAE8AAABhCwCh0hEA5v8RAOX/EQDk/xEA5P8RAOP/EADi/xAA
+ 4v8QAOH/EADh/xAA4f8QAOD/EADg/xAA4P8QAOD/EADg/xAA4P8QAOD/EADg/xAA4P8QAOH/EADh/xAA
+ 4v8QAOL/EQDj/xEA4/8QAOT/EQDl/xEA5v8RAOf/EQDo/xEA6f8RAOr/EQDr/xEA7P8RAO3/EQDv/xEA
+ 8P8QB+b/A5s0/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCKCvEEAUTUBgBdwggA
+ dr0JAIvIDwDR7RIA9P8SAPT/EgD0/xIA9P8OAM7IAQAWFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgEA
+ FiQNAMjTEADs/xAA7P8QAOz/EADs/wkAj8gAAAZ7AAAAcAAAAG8AAABvAAAAcAAAAHIAAAB1AAAKfAEA
+ G4sFAFm6EADn/xEA5v8RAOb/EQDl/xEA5P8RAOT/EQDj/xEA4/8QAOL/EADi/xAA4f8QAOH/EADh/xAA
+ 4f8QAOH/EADh/xAA4f8QAOH/EADi/xAA4v8QAOL/EQDj/xEA4/8RAOT/EQDk/xAA5f8RAOb/EQDn/xEA
+ 6P8RAOn/EQDq/xEA6/8RAOz/EQDt/xEA7v8RAO//EQDx/xIA8v8PGNL/AbUV/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMYA/wY5Wf8MAK7/EADi/xIA8v8SAPT/EgD0/xIA9P8SAPT/EADk5AIA
+ JCYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAIAKzcPAN/rEADs/xAA7P8QAOz/EADs/w8A
+ 4PcNAMnqDQC/5g0AxOgNAMzrDwDX8Q8A5foQAOv+EADn/g8A1P8PAN3/EQDo/xEA5/8RAOb/EQDm/xEA
+ 5f8RAOX/EQDk/xEA5P8RAOP/EQDj/xEA4/8QAOL/EADi/xAA4v8QAOL/EADi/xEA4/8RAOP/EQDj/xEA
+ 4/8RAOT/EQDk/xEA5f8RAOb/EADm/xEA5/8RAOj/EQDp/xEA6v8RAOv/EQDs/xEA7f8RAO7/EQDv/xEA
+ 8P8SAPH/EgDz/xIA9P8MNq3/AMMF/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AacR/wkG
+ hv8OAMf/EQDt/xIA8/8SAPT/EgD0/xAA6/EEAEI+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAACgUAU1gPAOj4EADs/xAA7P8QAOz/EADs/xAA7P8QAOz/EADs/xAA7P8RAO3/EQDt/xEA
+ 7f8RAOv/DwDi/w4A0f8QAOn/EQDp/xEA6P8RAOf/EQDn/xEA5v8RAOX/EQDl/xEA5f8RAOT/EQDk/xEA
+ 5P8RAOT/EQDk/xEA5P8RAOT/EQDk/xEA5P8RAOT/EQDl/xEA5f8RAOb/EQDm/xEA5/8QAOf/EQDo/xEA
+ 6f8RAOr/EQDr/xEA7P8RAO3/EQDu/xEA7/8RAPD/EgDx/xIA8v8SAPT/EgD1/xEA8PkIYHD9AMcA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/BFxA/wsAo/8PANv/EQDx/xIA9P8QAOrqBABUSQAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAcAc3UQAOv9EADs/xAA
+ 7P8QAOz/EADs/xAA7P8QAOz/EADs/xEA7f8RAO3/EQDt/xEA7P8QAOj/DwDZ/w8A3f8RAOr/EQDp/xEA
+ 6f8RAOj/EQDn/xEA5/8RAOb/EQDm/xEA5v8RAOX/EQDl/xEA5f8RAOX/EQDl/xEA5f8RAOX/EQDl/xEA
+ 5v8RAOb/EQDm/xEA5/8RAOf/EQDo/xAA6P8RAOn/EQDq/xEA6/8RAOz/EQDt/xEA7v8RAO//EQDw/xIA
+ 8f8SAPL/EgDz/xIA9P8SAPb/CAB+fAMDNjgAnAW7AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AvQX/BxVu9gsApOUNAMLECQCLgAIAJh4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAACCgcAb2oPAOPtEADs/xAA7P8QAOz/EADs/xAA7P8QAOz/EQDt/xEA
+ 7f8RAO3/EQDt/xEA6/8QAOX/DgDS9xAA6PsRAOv/EQDq/xEA6f8RAOn/EQDo/xEA6P8RAOf/EQDn/xEA
+ 5/8RAOf/EQDm/xEA5v8RAOb/EQDm/xEA5v8RAOf/EQDn/xEA5/8RAOj/EQDo/xEA6P8RAOn/EADq/xEA
+ 6/8RAOv/EQDs/xEA7f8RAO7/EQDv/xEA8P8RAPH/EgDy/xIA8/8SAPT/EgD1/w8A1tIAAAwUAAAAAgAZ
+ ABYAuwDdAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AhALWAAABYQAAACMAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAEA
+ GxUGAF5VCACDggsAp5ULAKmYCgClkgkAlY0IAHl/BwB3bgcAcl0FAFNMBABAOAMAOCMAAAwaBwBzfhAA
+ 7P8RAOv/EQDr/xEA6v8RAOr/EQDp/xEA6f8RAOj/EQDo/xEA6P8RAOj/EQDo/xEA6P8RAOj/EQDo/xEA
+ 6P8RAOj/EQDo/xEA6f8RAOn/EQDq/xEA6v8QAOv/EQDs/xEA7P8RAO3/EQDu/xEA7/8RAPD/EQDw/xIA
+ 8v8SAPP/EgD0/xIA9f8RAPT6BABJRAAAAAQAAAAAAAAAAAA9ADYAxgD0AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDFAP4ANACaAAAARAAAABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAUWDAC2vBEA7f8RAOz/EQDr/xAA6v8QAOn/EADo/xAA
+ 6P8RAOn/EQDp/xEA6f8RAOn/EQDp/xEA6f8RAOn/EQDp/xEA6v8RAOr/EQDq/xEA6/8RAOv/EQDs/xAA
+ 7P8RAO3/EQDs/xAA6v8PAOb/EADk/xAA5f8QAOr/EQDv/xIA8/8SAPX/EQD2/wkAj4QAAAAHAAAAAQAA
+ AAAAAAAAAAAAAABiAGIAxwD9AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCjAOcABgBtAAAAKwAA
+ AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAYBAB4sDgDZ4RAA7P8PAOX/DwDd/w4A1f8OANL/DwDX/w8A3/8QAOb/EQDp/xEA6/8RAOv/EQDr/xEA
+ 6/8RAOv/EQDr/xEA6/8RAOz/EQDs/xEA7P8RAO3/EADt/xAA6/8PAOX/DwDY/w4Ay/8OAML/DgDE/w8A
+ 0P8QAOD/EQDt/xIA9P8NAMK6AAAKDgAAAAEAAAAAAAAAAAAAAAAAAAAAAAQAAwCJAJgAxwD/AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wBWALMAAABQAAAAFgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgDADpGDwDc8g4A0/8NAL//DACw/wsA
+ rP8MALX/DgDH/w8A2f8QAOb/EQDr/xEA7P8RAOz/EQDs/xEA7P8RAOz/EQDs/xEA7f8RAO3/EQDt/xEA
+ 7v8QAO3/DwDl/w4A0/8NALr/CwCj/woAmP8KAJr/DACq/w4AxP8PAN7/DgDT2AIAISAAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAABUADACtAMYAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/ALgA9AAT
+ AH4AAAA1AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAABIFAEhsDACy+AoAmf8JAIj/CQCK/wkAjv8LAKX/DQDC/w8A3P8QAOr/EQDt/xEA
+ 7f8RAO3/EQDt/xEA7f8RAO7/EQDu/xEA7v8RAO//EQDv/xAA6/8PANn/DQC7/wsAmP8JAI3/CwCh/wwA
+ rf8LAKb/CwCl/wwAtOYCACs9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAIgDA
+ AOkAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AHcAygAAAFoAAAAeAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFQAAAD0DADKXCgCS/QwA
+ sP8NAML/DgDK/wwAtP8LAKr/DgDN/w8A5v8RAO7/EQDu/xEA7v8RAO//EQDv/xEA7/8RAO//EQDv/xEA
+ 8P8RAPD/EADn/w4Ay/8LAKP/CgCY/wwArf8NALr/DgDI/w8A1f8OAMz8AgArcAAAACIAAAAGAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4ASADHAPsAyAD/AMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AxAD8ACcAkAAAAD8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAAfAAAASwcAasMMAKv/DQC0/w4AwP8OAM7/EADb/w0Ayf8NAL//EADh/xEA
+ 8P8RAPD/EQDw/xEA8P8RAPD/EQDw/xEA8f8RAPH/EgDx/xIA8f8QAOT/DQDB/wsApf8MAK//DQCx/w0A
+ uv8OAMb/DwDT/xAA4P8JAI+wAAAAKgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAQABAHcAewDHAP4AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AlwDgAAEAZgAAACcAAAAFAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACYCAClvDQC3/g0A
+ tP8NALj/DgDC/w4Azf8QANr/EADl/w4Axf8QAN7/EgDx/xIA8f8SAPH/EgDx/xIA8f8SAPL/EgDy/xIA
+ 8v8SAPL/EgDy/xAA5P8NAL//DQC5/w0Au/8NALr/DgC//w4AyP8PANP/EADf/w8A3/AAABA0AAAACQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAGAJwArgDIAP8AyAD/AMgA/wDI
+ AP8AyAD/AMgA/wDHAP8ARQCnAAAASgAAABMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAGAAAAJAYAYJkOAMP/DgC//w4AwP8OAMf/DwDQ/xAA2/8QAOf/DwDX/xAA
+ 4f8SAPL/EgDy/xIA8v8SAPL/EgDz/xIA8/8SAPP/EgDz/xIA8/8SAPT/EADo/w4Axv8OAMr/DgDG/w4A
+ xP8OAMf/DwDN/w8A1/8QAOH/EADs/AIAHToAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAGwAVALQA2ADIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wCuAO4ACwB0AAAAMAAA
+ AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAbBwBwnA4A
+ zv8OAMr/DgDK/w8Azv8PANb/EADf/xAA6f8QAOD+EADn/xIA8/8SAPT/EgD0/xIA9P8SAPT/EgD0/xIA
+ 9P8SAPT/EgD1/xIA9f8RAO7/DwDW/w8A1P8PANL/DwDQ/w8A0P8PANX/DwDc/xAA5f8QAO33AQAbKgAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAyAMQA8wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/AMcA/wBmAL4AAABVAAAAGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABAGAFdvDwDa/w8A1v8PANX/DwDX/w8A3P8QAOT/EQDt/wgA
+ dHUHAHBzDQDDxBEA7vQRAPT+EgD1/xIA9f8SAPX/EgD1/xIA9f8RAPX+EQDt8QwAubYGAF5oCQCQoBAA
+ 3v8QANv/EADb/xAA3v8QAOP/EQDr/w0AxcMAAAMMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAZgBiAMcA/gDIAP8AyAD/AMgA/wDIAP8AyAD/AL8A+QAd
+ AIcAAAA7AAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA
+ ESAOANLhEADh/xAA4P8QAOH/EADl/xEA6/8PAN/fAQAUGwAAABYAAAAoAQEdPAQLkpYHAGdlBwBscAcA
+ bHMHAGxwBgBhZwMNnKYAABE5AAAAIwAAABABABslDgDV3hAA5v8QAOb/EADn/xEA7P8QAOzxBABEPAAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAkACcAMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AIgA1gABAGEAAAAiAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwQAREAPAN7kEQDr/xEA6/8RAO7/DwDm5gQA
+ Sj4AAAAOAAAAJAAAADcADm2PAAtYawAAAAkAAAAAAAAAAAAAAAQAAAAaABB7mAAMYokAAAA2AAAAGgAA
+ AAoCACIjDACvpBAA6OgRAO/sDQDIvwQAQzcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAwArwDKAMgA/wDIAP8AyAD/AMgA/wDI
+ AP8AxgD+ADYAnAAAAEUAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAABAEAIBkIAHVqCgCMjwgAf20CACYbAAAABwAAABkAAAA5AAMdWgAczuwABCM3AAAABQAA
+ AAAAAAAAAAAAAQAAABQACERmABzQ8wAEImIAAAAvAAAAEQAAAAQAAAACAgAmCwMALw4AAAcCAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAApACYAwADqAMgA/wDIAP8AyAD/AMgA/wDIAP8ApgDpAAQAbAAAACwAAAAGAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAOAAAALAAAAE4AFJXBABrB3AAABBoAAAACAAAAAAAAAAAAAAAAAAAADQABDzcAHdn5ABWk0AAA
+ BEwAAAAkAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAE0AxwD6AMgA/wDI
+ AP8AyAD/AMgA/wDIAP8AVwC0AAAAUAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB0AAABEAAg+hgAd2v4AEo6nAAAAEAAA
+ AAEAAAAAAAAAAAAAAAAAAAAHAAAAJQAXsNAAHdv/AAxhnwAAAD4AAAAZAAAABgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQB5AH4AxwD+AMgA/wDIAP8AyAD/AMgA/wC6APYAEgB+AAAANgAA
+ AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAARAAAAMwAABV4AGLbiAB7b/wALVm0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAaAA5xlgAd
+ 2/8AHNH2AAQkbgAAADAAAAAQAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABQCi
+ ALUAyAD/AMgA/wDIAP8AyAD/AMgA/wB5AMsAAABbAAAAHwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACIAAABKAAxdpQAd2v8AHdf4AAQfMgAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAABjFXAB3b/gAe3P8AFqjVAAADTQAAACQAAAAKAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAFwC7AN4AyAD/AMgA/wDIAP8AyAD/AMMA/AAs
+ AJMAAABAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAMAAAAUAAAAOAACEWsAGsfwAB7b/wAZudQAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA
+ BiwAGsflAB7c/wAd2/8ADGKgAAAAPQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAEAAPADGAPUAyAD/AMgA/wDIAP8AyAD/AJgA4AADAGgAAAAoAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAACYAAABQAA94uQAe2/8AHtv/ABB8lAAA
+ AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwASiKgAHtz/AB7c/wAc0fYABCJrAAAALwAA
+ ABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AbADHAP4AyAD/AMgA/wDI
+ AP8AxwD/AEcAqQAAAEsAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAQAAAAWAAAAPAAEInkAHNP5AB7b/wAd2v4ABztLAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEAAAAQAAg+XwAd2/4AHtz/AB7c/wAWptQAAANLAAAAIgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAABgADAJEAoADHAP8AyAD/AMgA/wDIAP8AsgDwAAsAdgAAADEAAAAIAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAACgAAABUABOQygAe2/8AHtv/ABvJ4gAA
+ BBYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAQgpABrF4gAe3P8AHtz/AB3b/gAM
+ WpgAAAA6AAAAFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAOALAAzQDI
+ AP8AyAD/AMgA/wDIAP8AawDCAAAAVgAAABsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAQAAAAYAAAAPgAFLIEAHdj8AB7b/wAe2/8AEYSXAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAwAAABYAD3eVAB7c/wAe3P8AHtz/ABvL8QADGWMAAAAsAAAADgAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAoAMIA7gDIAP8AyAD/AMgA/wDBAPoAHgCIAAAAPAAA
+ AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACsAAABWABSc0gAe2/8AHtv/AB3a/gAG
+ MUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAEI0AAHdb4AB7c/wAe
+ 3P8AHtz/ABOWyAAAAUcAAAAgAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAVwBSAMcA/ADIAP8AyAD/AMgA/wCLANcAAABhAAAAIwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAUAAAAbAAAAQgAHOowAHdr+AB7b/wAe2/8AGLfMAAACEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAUl7IAHtz/AB7c/wAe3P8AHdv+AAlJjAAAADgAAAAWAAAABAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAfgCIAMcA/wDIAP8AyAD/AMYA/gA6
+ AJ4AAABGAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAADAAAAJbABet3gAe2/8AHtv/AB7b/wAL
+ WWoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAY0TAAd
+ 2v0AHtz/AB7c/wAe3P8AGsXsAAIRXgAAACwAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAARAAgAowC6AMgA/wDIAP8AyAD/AKcA6gAHAG8AAAAtAAAABgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAgAAAAgAAAASAAKTJoAHdr+AB7b/wAe2/8AG8nkAAENGgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAWABSbtAAe3P8AHtz/AB7c/wAe3P8AE5HFAAAASgAA
+ ACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkABwAuQDgAMgA/wDI
+ AP8AyAD/AFsAtgAAAFIAAAAYAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADcAAQpmABm76QAe2/8AHtv/AB7b/wAO
+ b4AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAkABSc+AB3X9gAe3P8AHtz/AB7c/wAd2v4ACUqRAAAAPwAAABwAAAAHAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAD8AxQD3AMgA/wDIAP8AugD2ABYAgAAAADcAAAAKAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AAwAAAAoAAAAUgAObbQAHdr/AB7b/wAe2/8AHM7oAAIVIAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABIAEIKZAB7c/wAe3P8AHtz/AB7c/wAb
+ y/IAAx5wAAAANgAAABYAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBx
+ AHAAyAD/AMgA/wDIAP8AfQDOAAAAXQAAACAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAHQAAAEMABCF+ABzQ+AAe2/8AHtv/AB3a/wAO
+ bn4AAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABgACEycAGsjiAB7c/wAe3P8AHtz/AB7c/wAXsN4AAQteAAAAMAAAABMAAAAFAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgCZAKYAyAD/AMgA/wDGAP4ALgCWAAAAQgAA
+ AA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA
+ ABUAAAA2AAACYQAVodcAHtv/AB7b/wAe2/8AG8vlAAIPGwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAJTF8AHdr8AB7c/wAe
+ 3P8AHtz/AB7c/wATjsYAAAJUAAAALQAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAABwAEAC0ANIAyAD/AMgA/wCeAOQAAwBpAAAAKQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALgAAAFUADFuqAB7a/wAe2/8AHtv/AB7b/wAN
+ Y24AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAACEgASj6EAHtv/AB7c/wAe3P8AHtz/AB3b/wAOa68AAABQAAAALAAA
+ ABIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIALgDDAO8AyAD/AMcA/wBP
+ AK4AAABNAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADgAA
+ ACgAAABNAAUnhgAc0fgAHtv/AB7b/wAe2/8AGbvOAAAEEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIPIAAZ
+ vNQAHtz/AB7c/wAe3P8AHtz/AB3Z/QALWqIAAABQAAAALAAAABMAAAAFAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAF0AWgDHAPwAyAD/ALMA8gAOAHgAAAAyAAAACAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA
+ AAQAAAAEAAAAAgAAAAEAAAACAAAABAAAABAAAAAnAAAASQABDXQAGLXmAB7b/wAe2/8AHtv/AB3a+gAH
+ PUQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAUtPAAd1/MAHtz/AB7c/wAe3P8AHtz/AB3Y/AAL
+ WaIAAABSAAAAMQAAABYAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAIUAkADH
+ AP8AyAD/AG0AwwAAAFgAAAAcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAATAAAAHAAAACAAAAAbAAAAFgAAABYAAAAeAAAAMAAA
+ AE4AAAdxABWb1wAd2v8AHtv/AB7b/wAd2v8AEoyWAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAKAApSYAAd2foAHtz/AB7c/wAe3P8AHtz/AB3Z/AAMW6YAAABZAAAAOQAAAB4AAAAOAAAABAAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAIAKwAxADIAP8AwQD6ACIAigAAADwAAAAMAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFgAA
+ AC4AAABDAAAASwAAAEYAAABAAAAAQAAAAEgAAABbAAEHdwATkNAAHtv/AB7b/wAe2/8AHtv/ABnA1AAC
+ EhgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAA5wegAd2/0AHtz/AB7c/wAe
+ 3P8AHtz/AB3a/gAPdLkAAARkAAAARgAAAC0AAAAbAAAADwAAAAoAAAAIAAAACQAAAAwAAAAMAAAACQAA
+ AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAJgAgAMAA5wDIAP8AjQDWAAEAYgAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAmAAABSwAGMYQABi+OAAEIdgAAAG0AAABsAAAAdAAF
+ JpIAFqfgAB7b/wAe2/8AHtv/AB7b/wAc1fMABzo+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAMAAAIPABGBjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB3b/wAUnNUAAhZ6AAAAWAAA
+ AEQAAAA1AAAALQAAACoAAAAsAAAAMAAAADAAAAAlAAAAFgAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgBHAMcA+QDHAP4APACcAAAARgAA
+ ABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA
+ ADEACk6OABzX/AAd2v4AG8jzABWg3QASjdMAFqjiABzV/AAe2/8AHtv/AB7b/wAe2/8AHdr+AA1naQAA
+ AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIQABGKmAAd
+ 2/8AHtz/AB7c/wAe3P8AHtz/AB7c/wAayPIADFutAAAGcgAAAGIAAABaAAAAWAAAAFoAAABeAAAAXAAA
+ AEsAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAACAAEAdwB6AMcA/wCqAOkABgBqAAAALQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALgAWp9AAHdr/AB7b/wAe2/8AHtv/AB7b/wAe
+ 2/8AHtv/AB7b/wAe2/8AHtv/AB7a/wASjpUAAAEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAMOABGEjwAd2/4AHtz/AB7c/wAe3P8AHtz/AB7c/wAd
+ 2/8AGb/tAA93wgAJRaQABjOaAAhAogAMW7IAEH3EAA94tAACFFUAAAAiAAAABgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAYAmgCwAMcA/wBd
+ AK8AAABPAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAgAAAAgABez2AAd2v8AHtv/AB7b/wAe2/8AHtv/AB7b/wAe2/8AHtv/AB7b/wAd2v4AFJqfAAAICgAA
+ AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAEMAA5ydgAd2PgAHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe
+ 3P8AHtz/ABarzQAAAyoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiABQAtwDZAL0A9QAZAHMAAAA2AAAACgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABAAE5ekAB3a/wAe2/8AHtv/AB7b/wAe
+ 2/8AHtv/AB7b/wAe2/8AHdr7ABGEiAAABQkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAlJTQAbzOQAHtz/AB7c/wAe
+ 3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHdv8AAQiNgAAAAcAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3
+ ADQAxQD0AIIAwgAAAFIAAAAgAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAABAADHyAAE5OaABzT6wAd2v8AHtv/AB7b/wAe2/8AHdr/ABnBzgAJTUsAAAIEAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAFAAQhJgAWpLAAHtv+AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe
+ 3P8AHtz/AB7c/wAd2/sABCQqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGMAxAD6ADIAewAAADsAAAAOAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAhQRAAlIQgAP
+ dHMAD3eCAA90cwAIRjsAAAYIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAADCQAK
+ UlAAGbrFAB3b/gAe3P8AHtz/AB7c/wAe3P8AHtz/AB7c/wAe3P8AHtz/ABaprgAABAoAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAUAAwCQAJsAoADUAAQASwAAACQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgcABzo0ABB+gwAXr7oAHNPdABzU6AAc
+ 0tsAGLbAABKJjAALVU0AAQkJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcADACrAMoAUwCEAAAANwAA
+ ABIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAC4AJwCwANMADwBAAAAAIwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAUQB1
+ AJMAAAAoAAAAEgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHwAfQAmADsAAAAYAAAABgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAEAAHAHYAbAACABMAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAYAD8AKQAAAAYAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAALQAMAAQAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////8AH//////////////////+AAf/////////////////+AA
+ D//////////////////AAAf/////////////////gAAD/////////////////wAAA///////////////
+ //4AAAH////////////////4AAAB////////////////8AAAAP///////////////+AAAAAA///////g
+ ///////AAAAAAA//////wP///4H/gAAAAAAD/////wD///+A/gAAAAAAAP////4A////gHwAAAAAAAB/
+ ///8AP///4A4AAAAAAAAH///+AH////AAAAAAAAAAA////AD////wAAAAAAAAAAH///AA////+AAAAAA
+ AAAAA///gAf////wAAAAAAAAAAP//4AH////8AAAAAAAAAAB//8AD/////gAAAAAAAAAAP/+AB/////4
+ AAAAAAAAAAB//AAf////8AAAAAAAAAAAf/gAP////+AAAAAAAAAAAD/wAH////+AAAAAAAAAAAAAAAD/
+ ////AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAA
+ AAAH////+AAAAAAAAAAAAAAAD/+H//gAAAAAAAAAAAAAAB/+B//4AAAAAAAAAAAAAAA//Af/+AAAAAAA
+ AAAAAAAA//gH//wAAAAAAAAAAAAD///gB//8AAAAAAAAAAAAA///wA///AAAAEAAAAAAAAP//4AP//4A
+ AADAAAAAAAAD//8AH///AAADwAAAAAAAAf/+AD///wAPH8AAAAAAAAH//AA///+AB/+AAAAAAAAB//gA
+ f///wAf/gAAAAAAAAf/wAH///8AD/4AAAAAAAAH/4AD////gAf+AAAAAAAAB/8AB////8AD/gAAAAAAA
+ Af/AA/////AAf4AAAAAAAAAAAAP////4ADgAAAAAAAAAAAAH/////AAAAAAAAAAAAAAAD/////4AAAAA
+ AAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAH//////
+ wAAAAAAAAAAAAADw/////+AAAAAAAAAAAAADwP///+DwAAAAAAAAAAH//4D////gPgGAAAAAAAAB//4A
+ ////4B//gAAAAAAAAf/8AP///+AH/4AAAAAAAAH/+AH////wA//AAAAAAAAB/+AB////8AH/wAAAAAAA
+ Af/AA/////gA/8AAAAAAAAP/gAf////8AH/AAAAAAAAB/wAH/////AA/wAAAAAAAAf4AD/////4AH+AA
+ AAAAAAD8AB//////AA/gAAAAAAAA+AA//////wAH4AAAAAAAAHAAP/////+AA+AAAAAAAAAgAH//////
+ wAHwAAAAAAAAAAD//////+AAAAAAAAAAAAAB///////wAAAAAAAAAAAAA///////+AAAAAAAAAAAAAf/
+ //////gAAAAAAAAAAAAP///////8AAAAAAAAAAAAH////////gAAAAAAAAAAAD////////8AAAAAAAAA
+ AAB/////////gAAAAAAAAAAB/////////8AAAAAAAADAAP///////////4AAAAAA4AD///////////+A
+ AAAAAeAAf///////////wAAAAAPwAH///////////+AAAAAH+AA////////////gAAAAB/wAP///////
+ ////4AAAAAf8AB///////////+AAAAAH/gAP///////////gAAAAB/8AD///////////4AAAAAf/gAf/
+ /////////+AAAAAH/4AH///////////wAAAAD//AA///////////8AAYAB//4AH///////////gAGAA/
+ //AB////////////4BwD///4AP///////////+AcA///+AD////////////APAH///wAf///////////
+ wDwA///+AH///////////4A+AP///wA///////////8AfgB///+AH///////////AH4AP///gB//////
+ /////gB/AD///8AP//////////4AfwAf///gD//////////8AP8AD///8Af//////////AD/gA////AD
+ //////////gB/4AH///4A//////////wAf/AA////AH/////////8AP/wAH///4B/////////+AD/+AA
+ ///+AP/////////AA//wAP///wB/////////wAf/8AB///+Af////////4AP//gAH///wD////////8A
+ D//8AA///+A///////8AAB///AAH///gH//////+AAAf//4AAf//8B///////gAAP///AAAB//gP////
+ //4AAH///4AAAP/8B//////+AAB////AAAD//Af//////gAA////4AAA//4D//////4AAf////AAAP//
+ A//////+AAP////4AAD//4H//////gAH/////AAA///B//////+AH/////8AAP//wP//////////////
+ wAH//+B///////////////gP///wf///////////////////+D////////////////////g/////////
+ ///////////8H////////////////////h////////////////////8f////////////////////////
+ ////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAA0AIAAuAF8ANQBwABEARgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUARQBqALUA7ADHAP8AxwD/AMAA+gBhAK4AAQAhAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAEACQBlAJEAxQD8AMcA/wDHAP8AxwD/AMcA/wDHAP8ASQCVAAAACgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAXAIIAswDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8AswDxAA0ARgAAAAUAAAAHAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAMAAAABQAAAAAAAAAAAAAAAQAaACkAmgDOAMYA/wDGAP8AxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AG4AyAAACmYBABtsAQATYAAAAT8AAAAbAAAABQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA4AAAcsAQAVGgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAC9QAAALPwAAAAwAAAACACgAQgCuAOUAxgD/AMYA/wDG
+ AP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMMA/gcgbvwOAMP+DgDI/QwAtOsHAGitAAALRwAA
+ AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAIAH2QKAJOrAAATCwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEdCQCN0gIAH2gAPgBtALwA9ADG
+ AP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wGQHf8MAaj/DgDK/w4A
+ 0P8PANb/DQC/7AMALWwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAfBAA/hg8A
+ 2PAEAENEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABDbQVX
+ T/kAwwD9AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMcA/wDH
+ AP8FQVb/DgDC/w4Az/8PANT/DwDa/w4A0fUDADJpAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AB0FAEmOEADk+gkAjJQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAABwAQAHYAqADGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AMcA/wC4APUAxwD/AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8ArQ3/CgmW/w4Azf8PANP/DwDZ/xAA3/8OAMvtAQAVQgAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAFQQAPoIQAOT6DQC/ygAAEgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAATABwAkADCAMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDGAP8AxwD/AK8A7AQY
+ PbQEeEH/AMcA/wDHAP8AxwD/AMcA/wDHAP8AxwD/BGY5/w0Avv8PANL/DwDY/w8A3v8QAOP/CgCZxAAA
+ AEAAAAAyAAAAKwAAACYAAAApAgAjbA8A3fYPANTiAgAmHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAABgAHwCgANQAxwD/AMYA/wDGAP8AxwD/AMYA/wDGAP8AxgD/AMYA/wDG
+ AP8Aswb5AR8UrQsAme8MB6P/Ap0j/wDHAP8AxwD/AMcA/wDHAP8AxwD/AMED/wgbgP8OAND/DwDX/w8A
+ 3f8QAOL/EADn/goAmeILAKraCwCc0AoAkMcJAIzHDgDM7RAA5fYEAEA7AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwApADHAP8AxwD/AMYA/wDGAP8AxwD/AMYA/wDG
+ AP8AxgD/AMYA/wC3C/8IJID/CgCT/wwAsf8MAK7/CxiW/wC4DP8AxwD/AMcA/wDHAP8AxwD/AMcA/wKI
+ JP8MALb/DwDW/w8A3P8QAOL/EADn/w4A1PsOANHsEADr+RAA7P8QAOz/EADh7QYAXlsAAAABAAAAAAAA
+ AAAAAAAAAAAAAgAAAAsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AaQDEAfwAxwD/AMYA/wDG
+ AP8AxwD/AMYA/wDGAP8AxgD/ALoA8gQoSKgGAGKhCwCf8g0AtP8MALH/DACw/wk5ff8AxAL/AMcA/wDH
+ AP8AxwD/AMcA/wDGAP8GOWT/DwDR/w8A3P8QAOH/EADn/xAA5PcBABMxAAAKBQMAMgwDAD4PAAARAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAFAAAAJgQAOl8BABUTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgUe
+ TowEWjjPAIIAtQCfAMgAtgDlAMUA+wDGAP8AqQDZADAAQAAAAAEBABFADQC2+g0AuP8NALX/DAC0/wwA
+ tP8GYVz/AMcA/wDHAP8AxwD/AMcA/wDHAP8BphL/DAao/w8A2/8QAOH/EADm/xAA7f8FAFJxAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAM7CAB2rQkAf4QAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAEADxUNALPbBgBanQAAACAACQAGAFMAEgBOABwAGgAHAAAAAAAAAAMEADpyDQC//w0A
+ u/8NALn/DQC4/w0AuP8NArb/BIo4/wDHAP8AxwD/AMcA/wDHAP8AxwD/BFtI/w4A0P8QAOH/EADm/xAA
+ 7P8KAI+pAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACUYLAKLPDwDP2AEAEg0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAEBTDgDQ/AcAZ6YAAAAeAAAAAQAAAAAAAAAAAAAAAAAA
+ AAcGAGGcDgDC/w0Av/8NALz/DQC7/w0Au/8NALz/DAyx/wGrGv8AxwD/AMcA/wDHAP8AxwD/AL0F/woU
+ kv8QAOD/EADn/xAA7P8NALvQAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAGAAAHQQwArdURAOr3BAA/OwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCAB4kw4A0f4GAFiWAAAAFQAA
+ AAAAAAAAAAAAAAAAAAsJAH23DgDG/w0Awv8NAMD/DQC//w0Avv8NAL//DQDB/wsmnP8Avgn/AMcA/wDH
+ AP8AxwD/AMcA/wOALf8OAMj/EADn/xAA7f8PANjoAAAFGAAAAAUAAAADAAAAAgAAAAUAAAIzCwCcyREA
+ 8P4HAGtsAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICwsA
+ oMIOAM77AwA4dwAAACAAAAAdAAAAIQAAADMKAJHQDgDJ/w4Axv8OAMT/DQDC/w0Awv8NAML/DgDD/w4A
+ xv8JSXz/AMYB/wDHAP8AxwD/AMcA/wDFAf8IL3b/EADj/xAA7f8QAOX2AgAfcgEAD10AAAJQAAAASgAA
+ AFAIAHWxEQDw/woAkZYAAAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAEAGB4NALzjDQDB9AcAarkHAGi2CAB0vwgAfM0MALP2DgDN/w4Ayv8OAMf/DgDG/w4A
+ xf8OAMX/DgDH/w4AyP8OAMr/BnJW/wDHAP8AxwD/AMcA/wDHAP8Bnxj/DQO8/xEA7f8RAPD/EADg/xEA
+ 8P8RAO39EADi9xAA4fcRAPD/DQC8xAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDADdADQDD6A8A0v8OANL/DgDS/Q4AxfgNAMH7DgDQ/w4A
+ zf8OAMv/DgDJ/w4Ayf8OAMn/DgDK/w4Ay/8OAM7/DgXK/wObLv8AxwD/AMcA/wDHAP8AxwD/BVBY/xAA
+ 4/8RAOr4CAB7hQwAqZYNALqnDQC1tQ0AurYLAKOQAgAoFQAAAAAAAAAFAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEQAAAAUAAAAAAgApDAcAaicHAGwnBQBPGwIA
+ HhYKAI66DwDU/w4A0f8OAM//DgDN/w4Azf8OAMz/DgDN/w4Azv8OAND/DwDT/w0Xu/8BtRP/AMcA/wDH
+ AP8AxwD/ALcJ/wsOqf8QAN7rAAAODwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABgBABM+AQAeIAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEBQBZbwEAEkgAAAAPAAAAAQAA
+ AAAAAAAAAAAAAAAAAAQIAHSbDwDX/w8A1f8PANP/DwDR/w4A0P8OAND/DgDQ/w8A0f8PANP/DwDV/w8A
+ 2P8LM6H/AMMF/wDHAP8AxwD/AMcA/wR1Of8MALHUAAABBwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAALAUA
+ SYsLAKCrAAAKBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAhKg0A
+ wt0DADh2AAAAGAAAAAEAAAAAAAAAAAAAAAEFAFFwDwDb/w8A2P8PANb/DwDV/w8A1P8PANP/DwDU/w8A
+ 1P8PANb/DwDY/w8A2/8PAN3/CFt3/wDHAP8AxwD/AMcA/wDDAv8EJ0S8AAAABgAAAAAAAAAAAAAAAAAA
+ AAcAAAQ8CQCCuRAA4usCACwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQYAYGwPAOX6BQBYkgAAABsAAAABAAAAAAAAAAACACM4DwDd/Q8A3P8PANr/DwDY/w8A
+ 1/8PANf/DwDX/w8A2P8PANn/DwDb/w8A3f8QAOD/EAHh/wWGSf8AxwD/AMcA/wDHAP8AlwDfAAIAKQAA
+ AAAAAAAAAAAABgAABkALAKDMEQDy/QYAWlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwUKAJajDwDq/gYAXZQAAAAYAAAAAQAAAAAAAAINDQC/3BAA
+ 4P8PAN3/DwDc/w8A2/8PANr/DwDa/w8A2/8PANz/DwDe/w8A4P8QAOL/EADl/w8L2v8CpyX/AMcA/wDH
+ AP8AxwD/AEcAlAAAAAsAAAAGAAADOAsAo80RAPP+CAB6eQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4PCwCzwQ8A5/wFAE2EAAAAGgAA
+ ABAAAAAVCABymBAA4/8QAOH/EADg/xAA3/8QAN7/EADe/xAA3v8QAN//EADh/xAA4v8QAOX/EADn/xAA
+ 6/8NIsP/ALwN/wDHAP8AxwD/ALEA8gAJAXQAAAVWCQCKvhEA8/8KAJGRAAAKAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAXGQ0A
+ ytoPAN/3BgBeowQASZIFAFObCAB0uxAA5f8RAOX/EADj/xAA4v8QAOH/EADh/xAA4f8QAOL/EADj/xAA
+ 5f8QAOf/EADq/xAA7f8RAPD/C0Se/wDHAP8AxwD/AMcA/wRmPPoPANL2EQDz/wwArbEAAA8GAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAIALTAOANnoEADs/xAA7P8QAOz/EADq/w8A3/4RAOn/EQDn/xEA5v8RAOX/EQDl/xEA
+ 5f8RAOb/EADn/xAA6P8QAOr/EADt/xEA7/8RAPL/DgDM0wF0GKsAxwD/AMcA/wDABP8IHXbdCgCNhwEA
+ HAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACADMXCQCRUAkAmVcKAJtMCAB/OwMANzMOAMvbEADq/xAA
+ 5/8QAOj/EQDo/xEA6P8RAOn/EADq/xAA6/8QAOr/EADn/xEA7v8RAPD4BABCPQAoAAgApQDCAMcA/wDH
+ AP8AiwDTAAEAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAADADE7DQC98gsAqf8OAMn/EADp/xEA7P8RAOz/EADt/xAA6/8NAMH/CwCm/w0Avv4HAG1yAAACAQAA
+ AAAASAAdALgA5gDHAP8AxgD+ADoAhQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAUBwBnvQ0Avv8OAMj/DwDh/xEA7/8RAPD/EQDw/xAA4v8MAKz/DQC9/w0A
+ xe4AAA0iAAAAAAAAAAAAAAAAAGAAQADFAPkAxwD/AKoA6wAFADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVDQC57w4Ayv8QAOH+EADh+BIA8/8SAPP/EQD0/xAA
+ 5/0OAMj6DgDN/xAA4f4CAC0xAAAAAAAAAAAAAAAAAAAAAAB6AHQAxwD/AMcA/wBbAKcAAAAOAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCgCYqRAA4/8NALvDAQAaNAUF
+ eokJAIlqBgR8iQIBOFQGAGFuEADh8gsAqa4AAAwGAAAAAAAAAAAAAAAAAAAAAAAoAAMAmwCsAMcA/wC7
+ APYAFQBSAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAlBAkA
+ ii4AAA0SAAYyagAKTV4AAAAAAAENHwARhbMAAAAZAgArBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAARQAQAK8A1gDHAP8AfQDHAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAMwABeq2QADHCIAAAAAAAAACQAWpsoACEJ3AAAACQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAE4ALQDBAPMAxQD9AC0AdQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AClCPABiy0QAAAAUAAAAAAAAAAQANZYQAGsLrAAIPOQAA
+ AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2AF0AxwD+AJ0A4QABACoAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABCDwAGr/rAA5rgQAAAAAAAAAAAAAAAAAD
+ HS0AHdb5ABGEtwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAEAigCTAMcA/wBM
+ AJkAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwANYqAAHdX4AAUnJgAA
+ AAAAAAAAAAAAAAAAAAUAE5OxAB3a/gAHOG0AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAALgAJAKcAxQCzAPEADgBGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAIQTAAb
+ yvMAE5GpAAACAgAAAAAAAAAAAAAAAAAAAAAABSg2AB3W+AAZvecAAQ08AAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAEgAHgC7AOoAbgC5AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEAAAAnABKGwgAd1vgABSsvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAA92jQAd2/8AFJbJAAADKwAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAEYAvwD2ACIAZwAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAADAAAAAwAAAB0ACUiQAB3Z/gARgZUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJDQAX
+ r8sAHdv/ABF/uAAAASsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgB8AI8A1gAA
+ ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAzAAAQtUAAAASgAIPpAAHM/4ABm/3AACFhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAEICMAGsLgAB3b/wASicMAAQhGAAAAGgAAABQAAAATAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAJgAEAJwAsgA8AIYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAOaZUAHdb8ABrC8QAd2v8AHNDwAAYzNAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCYrABrB3gAd2/8AGbzrAA1irQAKT54ADF+gAAEJIwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAADkAEgCVAMcACAA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAJS1cAG8jjAB3a+wAYt88ABz03AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMcGwAVoLYAHdv+AB3b/wAd
+ 2/8AHdv/AAg/TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfADUAWgCVAAAADgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSsGAAxkEgAC
+ GAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+ DQMAC1c/ABSXhwAWo5IAEYBnAAMdCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZABaABcAPgAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAFAABAEUASgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAC4ACAARAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4H/////////AP////
+ ////4Af////////AAH//P///4wAAH/w////gAAAP+D////AAAAfwf///8AAAA+B////wAAAB4P///+AA
+ AAAB////wAAAAAP////AAAAAA4///8AAAAAPD///wAAAAH4P///gEAAAfB///+BwAAB4P///8HAAAAA/
+ ///4AAAAAH////wAAAAA/////AAAAAE////xAAAAfD////BwAAB4P///+DAAAHB////4GAAAYP////wI
+ AAAA/////gAAAAH/////AAAAA/////+AAAAH/////8AAAA///////wACB///////AAcH//////8AB4P/
+ /////wAHgf//////gh/B///////CH+D//////8IP8P//////hw/wf/////+HB/g//////weD/D/////+
+ D4H+H/////APwP8f////4B/gDw/////gP/APj////+B/+A/H////+P/8D+P/////////4//////////z
+ /////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEANgBHAGQAmQBRAIoACwAmAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAGUAhQDGAP0AyAD/AMgA/wCaANwAAwAaAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA0ADQCAAKsAxwD/AMgA/wDIAP8AyAD/AMgA/wBR
+ AJQAAAAZAAAAGAAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgsBABY8AAAABQAdAB4AmADKAMcA/wDHAP8AyAD/AMgA/wDI
+ AP8AyAD/ALgA+QcOZtkKAJTYBwBurwEAF0cAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMA
+ LmIDADo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAW4sCICiPAK0A4wDHAP8AxwD/AMcA/wDI
+ AP8AyAD/AMgA/wDIAP8AyAD/A3U0/w4Awv8PANH/DwDN9gQAQXQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AA8FAFGLCwCkswAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAD0IYQC6CP8AxwD/AMcA/wDH
+ AP8AxwD/AMgA/wDAAPoAyAD/AMgA/wDIAP8AxQH/CSZ//w4Az/8PANj/DwDa+gMAM1oAAAABAAAAAAAA
+ AAAAAAAKBQBQiA8A1eYDADAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBWAHAAwwD7AMcA/wDH
+ AP8AxwD/AMcA/wDHAP8AngDiBxhl1wGuFf8AyAD/AMgA/wDIAP8BmRv/DQC8/w8A1v8QAN//DgDD5QIA
+ JGkBABxVAQAPSQQAO3sPAODzBQBLOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQBWAMcA/gDH
+ AP8AxwD/AMcA/wDHAP8AxwD/AaMb/wcOcOwMAK7/CiaK/wDBBf8AyAD/AMgA/wDHAP8GSGD/DwDU/xAA
+ 3v8QAOb/DgDQ+BAA6fkRAO3/EADo9wcAbWEAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAABH
+ ADABohPpAMYA/gDHAP8AxwD/AMcA/wCnANoEFEBwCQCC0Q0AtP8NALH/B0xt/wDHAP8AyAD/AMgA/wCz
+ C/8MCq//EADd/xAA5f8MALHLAAAECQMANgkBACAFAAAAAAAAAAAAAAADAAAKMwQARlgAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAUAU2QGDlijAC0ARQCAAFkAgQBhACEAEgAAAA8LAJ7gDQC6/w0At/8NALf/BXdJ/wDI
+ AP8AyAD/AMcA/wRrQv8PANj/EADl/xAA6PoBABEaAAAAAAAAAAAAAAAAAAAABAIAHVANALbTAwAtGwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAADBAsAm74HAGWeAAAADAAAAAAAAAAAAAAIHw4AwfwOAL//DgC8/w4A
+ vP8NBbj/Ap4n/wDIAP8AxwD/AMMC/wofl/8QAOX/EQDu/wQAREIAAAAAAAAAAAAAAAIBABtKDwDS7AcA
+ ZVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAfGw0AvOQFAEyCAAAAFQAAABUBABxLDgDJ/w4A
+ xP8OAML/DgDB/w4Awv8MF63/AbcP/wDHAP8AyAD/ApAm/w8A1/8RAO7/BgBWhwAACD8AAAA0AAALSA4A
+ w+IKAI6IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA6PQ4Ax/QJAIzPCgCR0woA
+ meUPAM7/DwDK/w4Ax/8OAMb/DgDH/w8Ayv8KNZb/AMUC/wDIAP8AxwD/CD14/xEA7v8QAOP6EQDw/xEA
+ 6fsRAOr7DACvswAACQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAADBgBXNwsA
+ nHAKAJBpBwBldA8A1P8PAND/DwDN/w8Ay/8PAMz/DwDO/w8A0v8IX27/AMgA/wDIAP8BrRH/DgbM/wYA
+ XlcFAFQSBwBuIggAcyAAAAUCAAAAFwEAFiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA5QwMA
+ MF8AAAAJAAAAAAAAAAAAAAcTDwDU+g8A1f8PANL/DwDR/w8A0f8PANP/DwDV/w8B2P8EikP/AMgA/wDI
+ AP8GYVX/BABFNwAAAAAAAAAAAAAAAwAADToKAI6zAwAzHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAIDCwCitAYAXI0AAAANAAAAAAAAAAUMALHTEADb/xAA2P8QANb/EADW/xAA1/8QANr/DwDd/w8M
+ 0/8CqiD/AMgA/wC/BP8AHANLAAAAAAAAAAMBABpLDgDK5QcAaFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAACAB8YDQDN3gYAYpAAAAAJAAAAAQgAdI0QAOD/EADd/xAA3P8QANv/EADc/xAA
+ 3v8QAOH/EADl/w0jv/8Avwn/AMgA/wCFAMoAAAAbAQAURA8A0OkJAIqAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADMsDgDa7QYAXJQDADJuBgBbmRAA5f8QAOP/EADh/xAA
+ 4P8QAOH/EADi/xAA5f8RAOn/EQDt/wtHmv8AxwD/AMcA/wQyRtQOAMvpCwCfnQAAAgEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAExFDQDK1g4A1+MOAMjUDQDE2hEA
+ 6P8RAOb/EQDm/xEA5v8RAOf/EADp/xEA7f8RAPH/DgDCyQCEC6EAyAD/AaQV/AcDZHoBABUFAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAABABgRDAC32A0Awf8QAOX/EQDr/xEA7P8QAOb/DQC8/w4Ayu8EAD4oADMABgCqAMcAyAD/AFYAlgAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEGAFWWDgDG/w8A2/8RAPD/EQDx/w8A1P8NALz/CgCXvAAAAAIAAAAAAFoAHAC5
+ AOkAugD2ABQAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAcYYQAN/9CAB3iAoCpqkLAaqqBwBrgg4AzucJAIyRAAAAAAAA
+ AAAAAAAAAG8AQwDGAPwAdwC7AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAgMAMxoABzZlAAg/NQABCREADmqXAAAECQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAIsAeQDFAP4AKgBbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHQAVnsoAAAUGAAAAAgAU
+ lLYABi5VAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAABAKQAsQCYANoAAQAVAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACk+EABKFmwAA
+ AAAAAAAAAApQXQAYtN4AAAUaAAAAAAAAAAAAAAAAAAAAAAAAAAAASgAQALIA3ABHAIQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIKgAa
+ vuoACD0yAAAAAAAAAAAAAAYIABm42AAObp4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAwAKwA5gAM
+ ACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AA8AD3KsABSWrQAAAAEAAAAAAAAAAAAAAAAACEJFAB3X+gAIP3EAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAgQBgAGgArAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ BisAAAA0AApKjQAbzO4ABi8gAAAAAAAAAAAAAAAAAAAAAAAAAAEADm57ABzT+QAIQXoAAAAXAAAADgAA
+ AAUAAAAAAAAAAAAAAAAAkQCWAB8ASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACABORtgAczvgAHdX3AApQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAD3SAAB3Z/QAU
+ mdIAEYLBAAg/YAAAAAAAAAAAAAAAAAA5AAgAbACXAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAABzwcABWiWgAKUSYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAC1ZAABampQAYsrEAC1dEAAAAAAAAAAAAAAAAAAAAAABcACAALgBQAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ACUABgAIAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ
+ AAEAAAAA/wf///4D///MAD/PwAAfj8AADw/AAAYfgAAAP4AAAGeAAADHwAADh8MAAw/gAAAf8AAAH+AA
+ AA/jAAMP4QACH/AAAD/4AAA//AAAf//AAH//wAh//+AcP//gPj//8B4f/+MfD//jD4//w4fH/geA5/4P
+ wOP/H/Dx////+f////0oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAEAAQB0AHMAkQDIAEYARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAwSABAACQCOAKAAxwD/AMgA/wCmAOMFBEx4AwAyQAAAAAEAAAAAAAAAAAAAAAMCACApAAAAAAAA
+ AAAAAAAAAhgtOwCTDNwAxwD/AMcA/wDGAP4AyAD/Blhd/w8A0f0GAF90AAAAAAAAAAIHAGSCBwBrNAAA
+ AAAAAAAAAFYAFgCsANoAxwD/AMcA/wKFIvMIO2z1AMYB/wC8Bv8MErL/DwDZ+AgAfqwJAIiuCQCNZAAA
+ AAAAAAACAAAAAAA+AAwDXy+8AJEApwCZAJMHBWSMDQC2/wZjW/8AyAD/BHw//xAA4P8JAIV6AgAsAwAA
+ AAEEAEJWAwA3HQAAAAAAAAAABgBYNwcAY4QAAAALCAB2mQ4AwP8NAb7/BI05/wDGAP8LK57/CwCksgAA
+ BB0FAEddCgCScwAAAAAAAAAAAAAAAAAAAAMHAGlbCgCSngwAq9YOAMv/DgDJ/w0NwP8CrRz/Ap4i/w4B
+ w9QPAM6LDACodAAACg8AAAAAAAAAAAAAAAACACcSBQBUagAAAAMJAIZ5DwDW/w8A1P8PANb/DCWz/wDA
+ CP8CWiegAAAAAQUASFsHAGpLAAAAAAAAAAAAAAAAAAAAAAcAbkkHAHGHBQBPZRAA4f8QAN7/EADf/xAA
+ 5f8KSpT/ALcA8gUNT4cLAJ+CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQCPRw4Aym4MAK+xDwDd/xEA
+ 6f8PAN7/DQC6uACjA5sCcx3DAAALAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBTRw0A
+ vuEOAc3UDACy2ggAelQAWgAHALIAxwA9AD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAACEdZAAMaEwALU2sAAAAAAAAAAAB9AB8AjQC5AAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAULABB5jwAAAAAAEYKHAAYvMAAAAAAAAAAAAJEARwBXAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAMYAA5qjQANZDMAAAAAAAc0EQAUlrgAAx0mAAAABQAAAAAAegBoABYAFAAAAAAAAAAAAAAAAAAA
+ AAAAAAABABWciQASiFoAAAAAAAAAAAAAAAAAC1MhABairQAPc4UAAAAAADkAAgBBAEUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAJAAkAAuH/
+ rEGAM6xBgCOsQQAFrEEAAaxBgAOsQYADrEGAA6xBwAesQeAHrEH4B6xB/GOsQfkzrEHxCaxB44msQf/8
+ rEE=
+</value>
+ </data>
</root> \ No newline at end of file
diff --git a/Source/ModelViewer/ModelViewer.csproj b/Source/ModelViewer/ModelViewer.csproj
index 50ca7c1c..78601afd 100644
--- a/Source/ModelViewer/ModelViewer.csproj
+++ b/Source/ModelViewer/ModelViewer.csproj
@@ -1,212 +1,212 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie.ModelViewer</RootNamespace>
- <AssemblyName>ModelViewer</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- <FileAlignment>512</FileAlignment>
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
- <PlatformTarget>AnyCPU</PlatformTarget>
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup>
- <ApplicationIcon>bvdicon.ico</ApplicationIcon>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>..\..\Binaries\BVD.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup>
- <StartupObject />
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Data" />
- <Reference Include="System.Numerics" />
- <Reference Include="System.Deployment" />
- <Reference Include="System.Drawing" />
- <Reference Include="System.Windows.Forms" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="BaseProvider.cs" />
- <Compile Include="BCTProvider.cs" />
- <Compile Include="DafnyProvider.cs" />
- <Compile Include="DataModel.cs" />
- <Compile Include="Main.cs">
- <SubType>Form</SubType>
- </Compile>
- <Compile Include="Main.Designer.cs">
- <DependentUpon>Main.cs</DependentUpon>
- </Compile>
- <Compile Include="Namer.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="SourceView.cs">
- <SubType>Form</SubType>
- </Compile>
- <Compile Include="SourceView.Designer.cs">
- <DependentUpon>SourceView.cs</DependentUpon>
- </Compile>
- <Compile Include="TreeSkeleton.cs" />
- <Compile Include="VccProvider.cs" />
- <EmbeddedResource Include="Main.resx">
- <DependentUpon>Main.cs</DependentUpon>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="Properties\Resources.resx">
- <Generator>ResXFileCodeGenerator</Generator>
- <LastGenOutput>Resources.Designer.cs</LastGenOutput>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <Compile Include="Properties\Resources.Designer.cs">
- <AutoGen>True</AutoGen>
- <DependentUpon>Resources.resx</DependentUpon>
- <DesignTime>True</DesignTime>
- </Compile>
- <EmbeddedResource Include="SourceView.resx">
- <DependentUpon>SourceView.cs</DependentUpon>
- </EmbeddedResource>
- <None Include="Properties\Settings.settings">
- <Generator>SettingsSingleFileGenerator</Generator>
- <LastGenOutput>Settings.Designer.cs</LastGenOutput>
- </None>
- <Compile Include="Properties\Settings.Designer.cs">
- <AutoGen>True</AutoGen>
- <DependentUpon>Settings.settings</DependentUpon>
- <DesignTimeSharedInput>True</DesignTimeSharedInput>
- </Compile>
- <Compile Include="..\version.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
- <Visible>False</Visible>
- <ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <Content Include="bvdicon.ico" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Model\Model.csproj">
- <Project>{acef88d5-dadd-46da-bae1-2144d63f4c83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{A678C6EB-B329-46A9-BBFC-7585F01ACD7C}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Microsoft.Boogie.ModelViewer</RootNamespace>
+ <AssemblyName>BoogieModelViewer</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ <FileAlignment>512</FileAlignment>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup>
+ <ApplicationIcon>bvdicon.ico</ApplicationIcon>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>..\..\Binaries\BVD.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup>
+ <StartupObject />
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Deployment" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="BaseProvider.cs" />
+ <Compile Include="BCTProvider.cs" />
+ <Compile Include="DafnyProvider.cs" />
+ <Compile Include="DataModel.cs" />
+ <Compile Include="Main.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Main.Designer.cs">
+ <DependentUpon>Main.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Namer.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="SourceView.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="SourceView.Designer.cs">
+ <DependentUpon>SourceView.cs</DependentUpon>
+ </Compile>
+ <Compile Include="TreeSkeleton.cs" />
+ <Compile Include="VccProvider.cs" />
+ <EmbeddedResource Include="Main.resx">
+ <DependentUpon>Main.cs</DependentUpon>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Resources.resx</DependentUpon>
+ <DesignTime>True</DesignTime>
+ </Compile>
+ <EmbeddedResource Include="SourceView.resx">
+ <DependentUpon>SourceView.cs</DependentUpon>
+ </EmbeddedResource>
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <Compile Include="..\version.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
+ <Visible>False</Visible>
+ <ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="bvdicon.ico" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Model\Model.csproj">
+ <Project>{acef88d5-dadd-46da-bae1-2144d63f4c83}</Project>
+ <Name>Model</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/ModelViewer/Namer.cs b/Source/ModelViewer/Namer.cs
index 0eb2418e..3adf0a11 100644
--- a/Source/ModelViewer/Namer.cs
+++ b/Source/ModelViewer/Namer.cs
@@ -1,580 +1,580 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Numerics;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public enum NameSeqSuffix
- {
- None,
- WhenNonZero,
- Always
- }
-
- public abstract class LanguageModel : ILanguageSpecificModel
- {
- protected Dictionary<string, int> baseNameUse = new Dictionary<string, int>();
- protected Dictionary<Model.Element, string> canonicalName = new Dictionary<Model.Element, string>();
- protected Dictionary<string, Model.Element> invCanonicalName = new Dictionary<string, Model.Element>();
- protected Dictionary<Model.Element, string> localValue = new Dictionary<Model.Element, string>();
- protected Dictionary<string, SourceViewState> sourceLocations = new Dictionary<string, SourceViewState>();
- public readonly Model model;
-
- protected virtual bool UseLocalsForCanonicalNames
- {
- get { return false; }
- }
-
- public readonly ViewOptions viewOpts;
- public LanguageModel(Model model, ViewOptions opts)
- {
- this.model = model;
- viewOpts = opts;
- }
-
- public string AsPow2(Model.Integer elt)
- {
- var n = BigInteger.Parse(elt.Numeral);
- var pow = new BigInteger(4096*4);
- var k = 14;
- var neg = false;
-
- if (n < 0) {
- n = -n;
- neg = true;
- }
-
- while (k < 150) {
- var diff = pow / 1000;
- if (pow - diff < n && n < pow + diff) {
- diff = n - pow;
- var res = string.Format("2^{0}{1}{2}", k, diff >= 0 ? "+" : "", diff);
- if (neg) res = "-(" + res + ")";
- return res;
- }
- if (n < pow) break;
- k++;
- pow *= 2;
- }
-
- return elt.ToString();
- }
-
- // Elements (other than integers and Booleans) get canonical names of the form
- // "<base>'<idx>", where <base> is returned by this function, and <idx> is given
- // starting with 0, and incrementing when there are conflicts between bases.
- //
- // This function needs to return an appropriate base name for the element. It is given
- // the element.
- //
- // A reasonable strategy is to check if it's a name of the local, and if so return it,
- // and otherwise use the type of element (e.g., return "seq" for elements representing
- // sequences). It is also possible to return "" in such cases.
- //
- // The suff output parameter specifies whether the number sequence suffix should be
- // always added, only when it's non-zero, or never.
- protected virtual string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
- {
- string res;
- if (elt is Model.Integer || elt is Model.Boolean) {
- suff = NameSeqSuffix.None;
- return elt.ToString();
- }
- suff = NameSeqSuffix.Always;
- if (UseLocalsForCanonicalNames) {
- if (localValue.TryGetValue(elt, out res))
- return res;
- }
- return "";
- }
-
- public virtual void RegisterLocalValue(string name, Model.Element elt)
- {
- string curr;
- if (localValue.TryGetValue(elt, out curr) && CompareFieldNames(name, curr) >= 0)
- return;
- localValue[elt] = name;
- }
-
- protected virtual string AppendSuffix(string baseName, int id)
- {
- return baseName + "'" + id.ToString();
- }
-
- public virtual string CanonicalName(Model.Element elt)
- {
- string res;
- if (elt == null) return "?";
- if (canonicalName.TryGetValue(elt, out res)) return res;
- NameSeqSuffix suff;
- var baseName = CanonicalBaseName(elt, out suff);
- if (baseName == "")
- suff = NameSeqSuffix.Always;
-
- if (viewOpts.DebugMode && !(elt is Model.Boolean) && !(elt is Model.Number)) {
- baseName += string.Format("({0})", elt);
- suff = NameSeqSuffix.WhenNonZero;
- }
-
- int cnt;
- if (!baseNameUse.TryGetValue(baseName, out cnt))
- cnt = -1;
- cnt++;
-
- if (suff == NameSeqSuffix.Always || (cnt > 0 && suff == NameSeqSuffix.WhenNonZero))
- res = AppendSuffix(baseName, cnt);
- else
- res = baseName;
-
- baseNameUse[baseName] = cnt;
- canonicalName.Add(elt, res);
- invCanonicalName[res.Replace(" ", "")] = elt;
- return res;
- }
-
- public virtual Model.Element FindElement(string canonicalName)
- {
- Model.Element res;
- if (invCanonicalName.TryGetValue(canonicalName.Replace(" ", ""), out res))
- return res;
- return null;
- }
-
- public virtual string PathName(IEnumerable<IDisplayNode> path)
- {
- return path.Select(n => n.Name).Concat(".");
- }
-
- public abstract IEnumerable<IState> States { get; }
-
- /// <summary>
- /// Walks each input tree in BFS order, and force evaluation of Name and Value properties
- /// (to get reasonable numbering of canonical values).
- /// </summary>
- public void Flush(IEnumerable<IDisplayNode> roots)
- {
- var workList = new Queue<IDisplayNode>();
-
- Action<IEnumerable<IDisplayNode>> addList = (IEnumerable<IDisplayNode> nodes) =>
- {
- var ch = new Dictionary<string, IDisplayNode>();
- foreach (var x in nodes) {
- if (ch.ContainsKey(x.Name)) {
- // throw new System.InvalidOperationException("duplicated model entry: " + x.Name);
- }
- ch[x.Name] = x;
- }
- foreach (var k in SortFields(nodes))
- workList.Enqueue(ch[k]);
- };
-
- addList(roots);
-
- var visited = new HashSet<Model.Element>();
- while (workList.Count > 0) {
- var n = workList.Dequeue();
-
- var dummy1 = n.Name;
- var dummy2 = n.Value;
-
- if (n.Element != null) {
- if (visited.Contains(n.Element))
- continue;
- visited.Add(n.Element);
- }
-
- addList(n.Children);
- }
- }
-
- #region field name sorting
- /*
- static bool HasSpecialChars(string s)
- {
- for (int i = 0; i < s.Length; ++i)
- switch (s[i]) {
- case '[':
- case '<':
- case '>':
- case ']':
- case '#':
- case '\\':
- case '(':
- case ')':
- return true;
- }
- return false;
- }
- */
-
- static ulong GetNumber(string s, int beg)
- {
- ulong res = 0;
- while (beg < s.Length) {
- var c = s[beg];
- if ('0' <= c && c <= '9') {
- res *= 10;
- res += (uint)c - (uint)'0';
- }
- beg++;
- }
- return res;
- }
-
- public virtual int CompareFieldNames(string f1, string f2)
- {
- /*
- bool s1 = HasSpecialChars(f1);
- bool s2 = HasSpecialChars(f2);
- if (s1 && !s2)
- return 1;
- if (!s1 && s2)
- return -1; */
- var len = Math.Min(f1.Length, f2.Length);
- var numberPos = -1;
- for (int i = 0; i < len; ++i) {
- var c1 = f1[i];
- var c2 = f2[i];
- if ('0' <= c1 && c1 <= '9' && '0' <= c2 && c2 <= '9') {
- numberPos = i;
- break;
- }
- if (c1 != c2)
- break;
- }
-
- if (numberPos >= 0) {
- var v1 = GetNumber(f1, numberPos);
- var v2 = GetNumber(f2, numberPos);
-
- if (v1 < v2) return -1;
- else if (v1 > v2) return 1;
- }
-
- return string.CompareOrdinal(f1, f2);
- }
-
- public virtual int CompareFields(IDisplayNode n1, IDisplayNode n2)
- {
- var diff = (int)n1.Category - (int)n2.Category;
- if (diff != 0) return diff;
- else return CompareFieldNames(n1.Name, n2.Name);
- }
-
- public virtual IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields_)
- {
- var fields = new List<IDisplayNode>(fields_);
- fields.Sort(CompareFields);
- return fields.Select(f => f.Name);
- }
- #endregion
-
- #region Displaying source code
- class Position : IComparable<Position>
- {
- public int Line, Column, Index;
- public int CharPos;
- public string Name;
-
- public int CompareTo(Position other)
- {
- if (this.Line == other.Line)
- return this.Column - other.Column;
- return this.Line - other.Line;
- }
- }
-
- public class SourceLocation
- {
- public string Filename;
- public string AddInfo;
- public int Line;
- public int Column;
- }
-
- public SourceViewState GetSourceLocation(string name)
- {
- SourceViewState res;
- sourceLocations.TryGetValue(name, out res);
- return res;
- }
-
- // example parsed token: @"c:\users\foo\bar.c(12,10) : random string"
- // the ": random string" part is optional
- public virtual SourceLocation TryParseSourceLocation(string name)
- {
- var par = name.LastIndexOf('(');
- if (par <= 0) return null;
-
- var res = new SourceLocation() { Filename = name.Substring(0, par) };
-
- var words = name.Substring(par + 1).Split(',', ')', ':').Where(x => x != "").ToArray();
- if (words.Length < 2) return null;
-
- if (!int.TryParse(words[0], out res.Line) || !int.TryParse(words[1], out res.Column)) return null;
-
- var colon = name.IndexOf(':', par);
- if (colon > 0)
- res.AddInfo = name.Substring(colon + 1).Trim();
- else
- res.AddInfo = "";
-
- return res;
- }
-
- static char[] dirSeps = new char[] { '\\', '/' };
- public virtual string ShortenToken(string tok, int fnLimit, bool addAddInfo)
- {
- var loc = TryParseSourceLocation(tok);
-
- if (loc != null) {
- var fn = loc.Filename;
- var idx = fn.LastIndexOfAny(dirSeps);
- if (idx > 0)
- fn = fn.Substring(idx + 1);
- if (fn.Length > fnLimit) {
- fn = fn.Substring(0, fnLimit) + "..";
- }
- var addInfo = addAddInfo ? loc.AddInfo : "";
- if (addInfo != "")
- addInfo = ":" + addInfo;
- return string.Format("{0}({1},{2}){3}", fn, loc.Line, loc.Column, addInfo);
- } else {
- return tok;
- }
- }
-
- protected virtual void RtfAppend(StringBuilder sb, char c, ref int pos)
- {
- pos++;
- switch (c) {
- case '\r': pos--; break;
- case '\\': sb.Append("\\\\"); break;
- case '\n': sb.Append("\\par\n"); break;
- case '{': sb.Append("\\{"); break;
- case '}': sb.Append("\\}"); break;
- default: sb.Append(c); break;
- }
- }
-
- protected virtual void RtfAppendStateIdx(StringBuilder sb, string label, ref int pos)
- {
- label += ".";
- pos += label.Length;
- sb.Append(@"{\sub\cf5\highlight4 ").Append(label).Append("}");
- }
-
- protected virtual void RtfAppendLineNo(StringBuilder sb, int num, ref int pos)
- {
- string n = string.Format("{0:0000}: ", num);
- pos += n.Length;
- sb.Append(@"{\cf6 ").Append(n).Append("}");
- }
-
- protected virtual void GenerateSourceLocations(IEnumerable<NamedState> states)
- {
- sourceLocations = new Dictionary<string, SourceViewState>();
-
- var files = new Dictionary<string, List<Position>>();
- var sIdx = -1;
-
- foreach (var s in states) {
- var sn = s.CapturedStateName;
- sIdx++;
- var loc = TryParseSourceLocation(sn);
- if (loc == null) continue;
-
- List<Position> positions;
- if (!files.TryGetValue(loc.Filename, out positions)) {
- positions = new List<Position>();
- files[loc.Filename] = positions;
- }
- positions.Add(new Position() { Name = sn, Line = loc.Line, Column = loc.Column, Index = sIdx });
- }
-
- foreach (var kv in files) {
- var positions = kv.Value;
- positions.Sort();
-
- string content = "";
- if (System.IO.File.Exists(kv.Key)) {
- try {
- content = System.IO.File.ReadAllText(kv.Key);
- } catch {
- continue;
- }
- } else {
- continue;
- }
-
- var pos = new Position() { Line = 1, Column = 1 };
- var currPosIdx = 0;
- var output = new StringBuilder();
- RtfAppendLineNo(output, pos.Line, ref pos.CharPos);
-
- foreach (var c in content) {
- if (c == '\n') {
- pos.Column = int.MaxValue; // flush remaining positions in this line
- }
-
- while (currPosIdx < positions.Count && pos.CompareTo(positions[currPosIdx]) >= 0) {
- positions[currPosIdx].CharPos = pos.CharPos;
- RtfAppendStateIdx(output, positions[currPosIdx].Index.ToString(), ref pos.CharPos);
- currPosIdx++;
- }
-
- RtfAppend(output, c, ref pos.CharPos);
-
- if (c == '\n') {
- pos.Line++;
- pos.Column = 1;
- RtfAppendLineNo(output, pos.Line, ref pos.CharPos);
- } else {
- pos.Column++;
- }
- }
-
- var resStr = output.ToString();
- foreach (var p in positions) {
- sourceLocations[p.Name] = new SourceViewState() { Header = p.Name, Location = p.CharPos, RichTextContent = resStr };
- }
- }
- }
- #endregion
- }
-
- public abstract class NamedState : IState
- {
- protected Model.CapturedState state;
- private LanguageModel langModel; // no point making it protected - they will need VccModel, DafnyModel
-
- public NamedState(Model.CapturedState s, LanguageModel lm)
- {
- this.state = s;
- this.langModel = lm;
- }
-
- public Model.CapturedState State
- {
- get { return state; }
- }
-
- public virtual string Name
- {
- get
- {
- return langModel.ShortenToken(state.Name, 20, true);
- }
- }
-
- // by overriding this, one state can masqureade another
- public virtual string CapturedStateName
- {
- get { return State.Name; }
- }
-
- public virtual SourceViewState ShowSource()
- {
- return langModel.GetSourceLocation(CapturedStateName);
- }
-
- public abstract IEnumerable<IDisplayNode> Nodes { get; }
- }
-
- public class EdgeName
- {
- ILanguageSpecificModel langModel;
- string format;
- string cachedName;
- Model.Element[] args;
-
- public EdgeName(ILanguageSpecificModel n, string format, params Model.Element[] args)
- {
- this.langModel = n;
- this.format = format;
- this.args = args.ToArray();
- }
-
- public EdgeName(string name) : this(null, name)
- {
- Util.Assert(name != null);
- }
-
- public override string ToString()
- {
- if (cachedName != null)
- return cachedName;
- cachedName = Format();
- return cachedName;
- }
-
- public override int GetHashCode()
- {
- int res = format.GetHashCode();
- foreach (var c in args) {
- res += c.GetHashCode();
- res *= 13;
- }
- return res;
- }
-
- public override bool Equals(object obj)
- {
- EdgeName e = obj as EdgeName;
- if (e == null) return false;
- if (e == this) return true;
- if (e.format != this.format || e.args.Length != this.args.Length)
- return false;
- for (int i = 0; i < this.args.Length; ++i)
- if (this.args[i] != e.args[i])
- return false;
- return true;
- }
-
- protected virtual string Format()
- {
- if (args == null || args.Length == 0)
- return format;
-
- var res = new StringBuilder(format.Length);
- for (int i = 0; i < format.Length; ++i) {
- var c = format[i];
-
- /*
- var canonical = false;
- if (c == '%' && i < format.Length - 1) {
- if (format[i + 1] == 'c') {
- ++i;
- canonical = true;
- }
- }
- */
-
- if (c == '%' && i < format.Length - 1) {
- var j = i + 1;
- while (j < format.Length && char.IsDigit(format[j]))
- j++;
- var len = j - i - 1;
- if (len > 0) {
- var idx = int.Parse(format.Substring(i + 1, len));
- res.Append(langModel.CanonicalName(args[idx]));
- i = j - 1;
- continue;
- }
- }
-
- res.Append(c);
- }
-
- return res.ToString();
- }
-
- public virtual IEnumerable<Model.Element> Dependencies
- {
- get { return args; }
- }
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Numerics;
+
+namespace Microsoft.Boogie.ModelViewer
+{
+ public enum NameSeqSuffix
+ {
+ None,
+ WhenNonZero,
+ Always
+ }
+
+ public abstract class LanguageModel : ILanguageSpecificModel
+ {
+ protected Dictionary<string, int> baseNameUse = new Dictionary<string, int>();
+ protected Dictionary<Model.Element, string> canonicalName = new Dictionary<Model.Element, string>();
+ protected Dictionary<string, Model.Element> invCanonicalName = new Dictionary<string, Model.Element>();
+ protected Dictionary<Model.Element, string> localValue = new Dictionary<Model.Element, string>();
+ protected Dictionary<string, SourceViewState> sourceLocations = new Dictionary<string, SourceViewState>();
+ public readonly Model model;
+
+ protected virtual bool UseLocalsForCanonicalNames
+ {
+ get { return false; }
+ }
+
+ public readonly ViewOptions viewOpts;
+ public LanguageModel(Model model, ViewOptions opts)
+ {
+ this.model = model;
+ viewOpts = opts;
+ }
+
+ public string AsPow2(Model.Integer elt)
+ {
+ var n = BigInteger.Parse(elt.Numeral);
+ var pow = new BigInteger(4096*4);
+ var k = 14;
+ var neg = false;
+
+ if (n < 0) {
+ n = -n;
+ neg = true;
+ }
+
+ while (k < 150) {
+ var diff = pow / 1000;
+ if (pow - diff < n && n < pow + diff) {
+ diff = n - pow;
+ var res = string.Format("2^{0}{1}{2}", k, diff >= 0 ? "+" : "", diff);
+ if (neg) res = "-(" + res + ")";
+ return res;
+ }
+ if (n < pow) break;
+ k++;
+ pow *= 2;
+ }
+
+ return elt.ToString();
+ }
+
+ // Elements (other than integers and Booleans) get canonical names of the form
+ // "<base>'<idx>", where <base> is returned by this function, and <idx> is given
+ // starting with 0, and incrementing when there are conflicts between bases.
+ //
+ // This function needs to return an appropriate base name for the element. It is given
+ // the element.
+ //
+ // A reasonable strategy is to check if it's a name of the local, and if so return it,
+ // and otherwise use the type of element (e.g., return "seq" for elements representing
+ // sequences). It is also possible to return "" in such cases.
+ //
+ // The suff output parameter specifies whether the number sequence suffix should be
+ // always added, only when it's non-zero, or never.
+ protected virtual string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
+ {
+ string res;
+ if (elt is Model.Integer || elt is Model.Boolean) {
+ suff = NameSeqSuffix.None;
+ return elt.ToString();
+ }
+ suff = NameSeqSuffix.Always;
+ if (UseLocalsForCanonicalNames) {
+ if (localValue.TryGetValue(elt, out res))
+ return res;
+ }
+ return "";
+ }
+
+ public virtual void RegisterLocalValue(string name, Model.Element elt)
+ {
+ string curr;
+ if (localValue.TryGetValue(elt, out curr) && CompareFieldNames(name, curr) >= 0)
+ return;
+ localValue[elt] = name;
+ }
+
+ protected virtual string AppendSuffix(string baseName, int id)
+ {
+ return baseName + "'" + id.ToString();
+ }
+
+ public virtual string CanonicalName(Model.Element elt)
+ {
+ string res;
+ if (elt == null) return "?";
+ if (canonicalName.TryGetValue(elt, out res)) return res;
+ NameSeqSuffix suff;
+ var baseName = CanonicalBaseName(elt, out suff);
+ if (baseName == "")
+ suff = NameSeqSuffix.Always;
+
+ if (viewOpts.DebugMode && !(elt is Model.Boolean) && !(elt is Model.Number)) {
+ baseName += string.Format("({0})", elt);
+ suff = NameSeqSuffix.WhenNonZero;
+ }
+
+ int cnt;
+ if (!baseNameUse.TryGetValue(baseName, out cnt))
+ cnt = -1;
+ cnt++;
+
+ if (suff == NameSeqSuffix.Always || (cnt > 0 && suff == NameSeqSuffix.WhenNonZero))
+ res = AppendSuffix(baseName, cnt);
+ else
+ res = baseName;
+
+ baseNameUse[baseName] = cnt;
+ canonicalName.Add(elt, res);
+ invCanonicalName[res.Replace(" ", "")] = elt;
+ return res;
+ }
+
+ public virtual Model.Element FindElement(string canonicalName)
+ {
+ Model.Element res;
+ if (invCanonicalName.TryGetValue(canonicalName.Replace(" ", ""), out res))
+ return res;
+ return null;
+ }
+
+ public virtual string PathName(IEnumerable<IDisplayNode> path)
+ {
+ return path.Select(n => n.Name).Concat(".");
+ }
+
+ public abstract IEnumerable<IState> States { get; }
+
+ /// <summary>
+ /// Walks each input tree in BFS order, and force evaluation of Name and Value properties
+ /// (to get reasonable numbering of canonical values).
+ /// </summary>
+ public void Flush(IEnumerable<IDisplayNode> roots)
+ {
+ var workList = new Queue<IDisplayNode>();
+
+ Action<IEnumerable<IDisplayNode>> addList = (IEnumerable<IDisplayNode> nodes) =>
+ {
+ var ch = new Dictionary<string, IDisplayNode>();
+ foreach (var x in nodes) {
+ if (ch.ContainsKey(x.Name)) {
+ // throw new System.InvalidOperationException("duplicated model entry: " + x.Name);
+ }
+ ch[x.Name] = x;
+ }
+ foreach (var k in SortFields(nodes))
+ workList.Enqueue(ch[k]);
+ };
+
+ addList(roots);
+
+ var visited = new HashSet<Model.Element>();
+ while (workList.Count > 0) {
+ var n = workList.Dequeue();
+
+ var dummy1 = n.Name;
+ var dummy2 = n.Value;
+
+ if (n.Element != null) {
+ if (visited.Contains(n.Element))
+ continue;
+ visited.Add(n.Element);
+ }
+
+ addList(n.Children);
+ }
+ }
+
+ #region field name sorting
+ /*
+ static bool HasSpecialChars(string s)
+ {
+ for (int i = 0; i < s.Length; ++i)
+ switch (s[i]) {
+ case '[':
+ case '<':
+ case '>':
+ case ']':
+ case '#':
+ case '\\':
+ case '(':
+ case ')':
+ return true;
+ }
+ return false;
+ }
+ */
+
+ static ulong GetNumber(string s, int beg)
+ {
+ ulong res = 0;
+ while (beg < s.Length) {
+ var c = s[beg];
+ if ('0' <= c && c <= '9') {
+ res *= 10;
+ res += (uint)c - (uint)'0';
+ }
+ beg++;
+ }
+ return res;
+ }
+
+ public virtual int CompareFieldNames(string f1, string f2)
+ {
+ /*
+ bool s1 = HasSpecialChars(f1);
+ bool s2 = HasSpecialChars(f2);
+ if (s1 && !s2)
+ return 1;
+ if (!s1 && s2)
+ return -1; */
+ var len = Math.Min(f1.Length, f2.Length);
+ var numberPos = -1;
+ for (int i = 0; i < len; ++i) {
+ var c1 = f1[i];
+ var c2 = f2[i];
+ if ('0' <= c1 && c1 <= '9' && '0' <= c2 && c2 <= '9') {
+ numberPos = i;
+ break;
+ }
+ if (c1 != c2)
+ break;
+ }
+
+ if (numberPos >= 0) {
+ var v1 = GetNumber(f1, numberPos);
+ var v2 = GetNumber(f2, numberPos);
+
+ if (v1 < v2) return -1;
+ else if (v1 > v2) return 1;
+ }
+
+ return string.CompareOrdinal(f1, f2);
+ }
+
+ public virtual int CompareFields(IDisplayNode n1, IDisplayNode n2)
+ {
+ var diff = (int)n1.Category - (int)n2.Category;
+ if (diff != 0) return diff;
+ else return CompareFieldNames(n1.Name, n2.Name);
+ }
+
+ public virtual IEnumerable<string> SortFields(IEnumerable<IDisplayNode> fields_)
+ {
+ var fields = new List<IDisplayNode>(fields_);
+ fields.Sort(CompareFields);
+ return fields.Select(f => f.Name);
+ }
+ #endregion
+
+ #region Displaying source code
+ class Position : IComparable<Position>
+ {
+ public int Line, Column, Index;
+ public int CharPos;
+ public string Name;
+
+ public int CompareTo(Position other)
+ {
+ if (this.Line == other.Line)
+ return this.Column - other.Column;
+ return this.Line - other.Line;
+ }
+ }
+
+ public class SourceLocation
+ {
+ public string Filename;
+ public string AddInfo;
+ public int Line;
+ public int Column;
+ }
+
+ public SourceViewState GetSourceLocation(string name)
+ {
+ SourceViewState res;
+ sourceLocations.TryGetValue(name, out res);
+ return res;
+ }
+
+ // example parsed token: @"c:\users\foo\bar.c(12,10) : random string"
+ // the ": random string" part is optional
+ public virtual SourceLocation TryParseSourceLocation(string name)
+ {
+ var par = name.LastIndexOf('(');
+ if (par <= 0) return null;
+
+ var res = new SourceLocation() { Filename = name.Substring(0, par) };
+
+ var words = name.Substring(par + 1).Split(',', ')', ':').Where(x => x != "").ToArray();
+ if (words.Length < 2) return null;
+
+ if (!int.TryParse(words[0], out res.Line) || !int.TryParse(words[1], out res.Column)) return null;
+
+ var colon = name.IndexOf(':', par);
+ if (colon > 0)
+ res.AddInfo = name.Substring(colon + 1).Trim();
+ else
+ res.AddInfo = "";
+
+ return res;
+ }
+
+ static char[] dirSeps = new char[] { '\\', '/' };
+ public virtual string ShortenToken(string tok, int fnLimit, bool addAddInfo)
+ {
+ var loc = TryParseSourceLocation(tok);
+
+ if (loc != null) {
+ var fn = loc.Filename;
+ var idx = fn.LastIndexOfAny(dirSeps);
+ if (idx > 0)
+ fn = fn.Substring(idx + 1);
+ if (fn.Length > fnLimit) {
+ fn = fn.Substring(0, fnLimit) + "..";
+ }
+ var addInfo = addAddInfo ? loc.AddInfo : "";
+ if (addInfo != "")
+ addInfo = ":" + addInfo;
+ return string.Format("{0}({1},{2}){3}", fn, loc.Line, loc.Column, addInfo);
+ } else {
+ return tok;
+ }
+ }
+
+ protected virtual void RtfAppend(StringBuilder sb, char c, ref int pos)
+ {
+ pos++;
+ switch (c) {
+ case '\r': pos--; break;
+ case '\\': sb.Append("\\\\"); break;
+ case '\n': sb.Append("\\par\n"); break;
+ case '{': sb.Append("\\{"); break;
+ case '}': sb.Append("\\}"); break;
+ default: sb.Append(c); break;
+ }
+ }
+
+ protected virtual void RtfAppendStateIdx(StringBuilder sb, string label, ref int pos)
+ {
+ label += ".";
+ pos += label.Length;
+ sb.Append(@"{\sub\cf5\highlight4 ").Append(label).Append("}");
+ }
+
+ protected virtual void RtfAppendLineNo(StringBuilder sb, int num, ref int pos)
+ {
+ string n = string.Format("{0:0000}: ", num);
+ pos += n.Length;
+ sb.Append(@"{\cf6 ").Append(n).Append("}");
+ }
+
+ protected virtual void GenerateSourceLocations(IEnumerable<NamedState> states)
+ {
+ sourceLocations = new Dictionary<string, SourceViewState>();
+
+ var files = new Dictionary<string, List<Position>>();
+ var sIdx = -1;
+
+ foreach (var s in states) {
+ var sn = s.CapturedStateName;
+ sIdx++;
+ var loc = TryParseSourceLocation(sn);
+ if (loc == null) continue;
+
+ List<Position> positions;
+ if (!files.TryGetValue(loc.Filename, out positions)) {
+ positions = new List<Position>();
+ files[loc.Filename] = positions;
+ }
+ positions.Add(new Position() { Name = sn, Line = loc.Line, Column = loc.Column, Index = sIdx });
+ }
+
+ foreach (var kv in files) {
+ var positions = kv.Value;
+ positions.Sort();
+
+ string content = "";
+ if (System.IO.File.Exists(kv.Key)) {
+ try {
+ content = System.IO.File.ReadAllText(kv.Key);
+ } catch {
+ continue;
+ }
+ } else {
+ continue;
+ }
+
+ var pos = new Position() { Line = 1, Column = 1 };
+ var currPosIdx = 0;
+ var output = new StringBuilder();
+ RtfAppendLineNo(output, pos.Line, ref pos.CharPos);
+
+ foreach (var c in content) {
+ if (c == '\n') {
+ pos.Column = int.MaxValue; // flush remaining positions in this line
+ }
+
+ while (currPosIdx < positions.Count && pos.CompareTo(positions[currPosIdx]) >= 0) {
+ positions[currPosIdx].CharPos = pos.CharPos;
+ RtfAppendStateIdx(output, positions[currPosIdx].Index.ToString(), ref pos.CharPos);
+ currPosIdx++;
+ }
+
+ RtfAppend(output, c, ref pos.CharPos);
+
+ if (c == '\n') {
+ pos.Line++;
+ pos.Column = 1;
+ RtfAppendLineNo(output, pos.Line, ref pos.CharPos);
+ } else {
+ pos.Column++;
+ }
+ }
+
+ var resStr = output.ToString();
+ foreach (var p in positions) {
+ sourceLocations[p.Name] = new SourceViewState() { Header = p.Name, Location = p.CharPos, RichTextContent = resStr };
+ }
+ }
+ }
+ #endregion
+ }
+
+ public abstract class NamedState : IState
+ {
+ protected Model.CapturedState state;
+ private LanguageModel langModel; // no point making it protected - they will need VccModel, DafnyModel
+
+ public NamedState(Model.CapturedState s, LanguageModel lm)
+ {
+ this.state = s;
+ this.langModel = lm;
+ }
+
+ public Model.CapturedState State
+ {
+ get { return state; }
+ }
+
+ public virtual string Name
+ {
+ get
+ {
+ return langModel.ShortenToken(state.Name, 20, true);
+ }
+ }
+
+ // by overriding this, one state can masqureade another
+ public virtual string CapturedStateName
+ {
+ get { return State.Name; }
+ }
+
+ public virtual SourceViewState ShowSource()
+ {
+ return langModel.GetSourceLocation(CapturedStateName);
+ }
+
+ public abstract IEnumerable<IDisplayNode> Nodes { get; }
+ }
+
+ public class EdgeName
+ {
+ ILanguageSpecificModel langModel;
+ string format;
+ string cachedName;
+ Model.Element[] args;
+
+ public EdgeName(ILanguageSpecificModel n, string format, params Model.Element[] args)
+ {
+ this.langModel = n;
+ this.format = format;
+ this.args = args.ToArray();
+ }
+
+ public EdgeName(string name) : this(null, name)
+ {
+ Util.Assert(name != null);
+ }
+
+ public override string ToString()
+ {
+ if (cachedName != null)
+ return cachedName;
+ cachedName = Format();
+ return cachedName;
+ }
+
+ public override int GetHashCode()
+ {
+ int res = format.GetHashCode();
+ foreach (var c in args) {
+ res += c.GetHashCode();
+ res *= 13;
+ }
+ return res;
+ }
+
+ public override bool Equals(object obj)
+ {
+ EdgeName e = obj as EdgeName;
+ if (e == null) return false;
+ if (e == this) return true;
+ if (e.format != this.format || e.args.Length != this.args.Length)
+ return false;
+ for (int i = 0; i < this.args.Length; ++i)
+ if (this.args[i] != e.args[i])
+ return false;
+ return true;
+ }
+
+ protected virtual string Format()
+ {
+ if (args == null || args.Length == 0)
+ return format;
+
+ var res = new StringBuilder(format.Length);
+ for (int i = 0; i < format.Length; ++i) {
+ var c = format[i];
+
+ /*
+ var canonical = false;
+ if (c == '%' && i < format.Length - 1) {
+ if (format[i + 1] == 'c') {
+ ++i;
+ canonical = true;
+ }
+ }
+ */
+
+ if (c == '%' && i < format.Length - 1) {
+ var j = i + 1;
+ while (j < format.Length && char.IsDigit(format[j]))
+ j++;
+ var len = j - i - 1;
+ if (len > 0) {
+ var idx = int.Parse(format.Substring(i + 1, len));
+ res.Append(langModel.CanonicalName(args[idx]));
+ i = j - 1;
+ continue;
+ }
+ }
+
+ res.Append(c);
+ }
+
+ return res.ToString();
+ }
+
+ public virtual IEnumerable<Model.Element> Dependencies
+ {
+ get { return args; }
+ }
+ }
+
+}
diff --git a/Source/ModelViewer/Properties/AssemblyInfo.cs b/Source/ModelViewer/Properties/AssemblyInfo.cs
index 0cb39b63..033d856d 100644
--- a/Source/ModelViewer/Properties/AssemblyInfo.cs
+++ b/Source/ModelViewer/Properties/AssemblyInfo.cs
@@ -1,25 +1,25 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ModelViewer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Microsoft")]
-[assembly: AssemblyProduct("ModelViewer")]
-[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("fb95289d-cd57-47f2-aafa-d9e39f46555e")]
-
-
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ModelViewer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("ModelViewer")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010-2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("fb95289d-cd57-47f2-aafa-d9e39f46555e")]
+
+
diff --git a/Source/ModelViewer/Properties/Resources.Designer.cs b/Source/ModelViewer/Properties/Resources.Designer.cs
index 2a56d355..933cc4bf 100644
--- a/Source/ModelViewer/Properties/Resources.Designer.cs
+++ b/Source/ModelViewer/Properties/Resources.Designer.cs
@@ -1,63 +1,63 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.1
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie.ModelViewer.Properties {
- using System;
-
-
- /// <summary>
- /// A strongly-typed resource class, for looking up localized strings, etc.
- /// </summary>
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- /// <summary>
- /// Returns the cached ResourceManager instance used by this class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Boogie.ModelViewer.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- /// <summary>
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.1
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Microsoft.Boogie.ModelViewer.Properties {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.Boogie.ModelViewer.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Source/ModelViewer/Properties/Resources.resx b/Source/ModelViewer/Properties/Resources.resx
index ffecec85..af7dbebb 100644
--- a/Source/ModelViewer/Properties/Resources.resx
+++ b/Source/ModelViewer/Properties/Resources.resx
@@ -1,117 +1,117 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
</root> \ No newline at end of file
diff --git a/Source/ModelViewer/Properties/Settings.Designer.cs b/Source/ModelViewer/Properties/Settings.Designer.cs
index d210a94e..4b60c7cc 100644
--- a/Source/ModelViewer/Properties/Settings.Designer.cs
+++ b/Source/ModelViewer/Properties/Settings.Designer.cs
@@ -1,26 +1,26 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.1
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace Microsoft.Boogie.ModelViewer.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.1
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Microsoft.Boogie.ModelViewer.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Source/ModelViewer/Properties/Settings.settings b/Source/ModelViewer/Properties/Settings.settings
index abf36c5d..39645652 100644
--- a/Source/ModelViewer/Properties/Settings.settings
+++ b/Source/ModelViewer/Properties/Settings.settings
@@ -1,7 +1,7 @@
-<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
- <Profiles>
- <Profile Name="(Default)" />
- </Profiles>
- <Settings />
-</SettingsFile>
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile>
diff --git a/Source/ModelViewer/SourceView.Designer.cs b/Source/ModelViewer/SourceView.Designer.cs
index 55ca2e37..30bc5408 100644
--- a/Source/ModelViewer/SourceView.Designer.cs
+++ b/Source/ModelViewer/SourceView.Designer.cs
@@ -1,63 +1,63 @@
-namespace Microsoft.Boogie.ModelViewer
-{
- partial class SourceView
- {
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null)) {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- this.richTextBox1 = new System.Windows.Forms.RichTextBox();
- this.SuspendLayout();
- //
- // richTextBox1
- //
- this.richTextBox1.DetectUrls = false;
- this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.richTextBox1.Font = new System.Drawing.Font("Lucida Sans Typewriter", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.richTextBox1.HideSelection = false;
- this.richTextBox1.Location = new System.Drawing.Point(0, 0);
- this.richTextBox1.Name = "richTextBox1";
- this.richTextBox1.ReadOnly = true;
- this.richTextBox1.Size = new System.Drawing.Size(715, 582);
- this.richTextBox1.TabIndex = 0;
- this.richTextBox1.Text = "#include <vcc.h>\n\nint main()\n{\n\\foo\n}";
- this.richTextBox1.WordWrap = false;
- //
- // SourceView
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(715, 582);
- this.Controls.Add(this.richTextBox1);
- this.Name = "SourceView";
- this.Text = "SourceView";
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.RichTextBox richTextBox1;
- }
+namespace Microsoft.Boogie.ModelViewer
+{
+ partial class SourceView
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.richTextBox1 = new System.Windows.Forms.RichTextBox();
+ this.SuspendLayout();
+ //
+ // richTextBox1
+ //
+ this.richTextBox1.DetectUrls = false;
+ this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.richTextBox1.Font = new System.Drawing.Font("Lucida Sans Typewriter", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.richTextBox1.HideSelection = false;
+ this.richTextBox1.Location = new System.Drawing.Point(0, 0);
+ this.richTextBox1.Name = "richTextBox1";
+ this.richTextBox1.ReadOnly = true;
+ this.richTextBox1.Size = new System.Drawing.Size(715, 582);
+ this.richTextBox1.TabIndex = 0;
+ this.richTextBox1.Text = "#include <vcc.h>\n\nint main()\n{\n\\foo\n}";
+ this.richTextBox1.WordWrap = false;
+ //
+ // SourceView
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(715, 582);
+ this.Controls.Add(this.richTextBox1);
+ this.Name = "SourceView";
+ this.Text = "SourceView";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.RichTextBox richTextBox1;
+ }
} \ No newline at end of file
diff --git a/Source/ModelViewer/SourceView.cs b/Source/ModelViewer/SourceView.cs
index d520ede5..a40950b6 100644
--- a/Source/ModelViewer/SourceView.cs
+++ b/Source/ModelViewer/SourceView.cs
@@ -1,52 +1,52 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- public partial class SourceView : Form
- {
- public bool largeFont;
- bool prevLarge;
-
- public SourceView()
- {
- InitializeComponent();
- //richTextBox1.Font = new Font(richTextBox1.Font.FontFamily, fontSize, richTextBox1.Font.Unit);
- richTextBox1.BackColor = Color.White;
- }
-
- string prevRtf;
-
- string prefix =
- @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Lucida Sans Typewriter;}}\r\n" +
- @"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;\red0\green0\blue0;\red160\green160\blue160;}" +
- @"\viewkind4\uc1\pard\f0";
-
- internal void SetSourceLocation(SourceViewState r)
- {
- if (r.RichTextContent != prevRtf || prevLarge != largeFont) {
- richTextBox1.Rtf = prefix + (largeFont ? "\\fs30 " : "\\fs17 ") + r.RichTextContent + "\r\n}\r\n";
- prevRtf = r.RichTextContent;
- prevLarge = largeFont;
- }
-
- richTextBox1.Select(r.Location, 9);
-
- this.Text = r.Header;
- this.Show();
- }
-
- protected override void OnClosing(CancelEventArgs e)
- {
- base.OnClosing(e);
- e.Cancel = true;
- Hide();
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Microsoft.Boogie.ModelViewer
+{
+ public partial class SourceView : Form
+ {
+ public bool largeFont;
+ bool prevLarge;
+
+ public SourceView()
+ {
+ InitializeComponent();
+ //richTextBox1.Font = new Font(richTextBox1.Font.FontFamily, fontSize, richTextBox1.Font.Unit);
+ richTextBox1.BackColor = Color.White;
+ }
+
+ string prevRtf;
+
+ string prefix =
+ @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Lucida Sans Typewriter;}}\r\n" +
+ @"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;\red255\green255\blue0;\red0\green0\blue0;\red160\green160\blue160;}" +
+ @"\viewkind4\uc1\pard\f0";
+
+ internal void SetSourceLocation(SourceViewState r)
+ {
+ if (r.RichTextContent != prevRtf || prevLarge != largeFont) {
+ richTextBox1.Rtf = prefix + (largeFont ? "\\fs30 " : "\\fs17 ") + r.RichTextContent + "\r\n}\r\n";
+ prevRtf = r.RichTextContent;
+ prevLarge = largeFont;
+ }
+
+ richTextBox1.Select(r.Location, 9);
+
+ this.Text = r.Header;
+ this.Show();
+ }
+
+ protected override void OnClosing(CancelEventArgs e)
+ {
+ base.OnClosing(e);
+ e.Cancel = true;
+ Hide();
+ }
+ }
+}
diff --git a/Source/ModelViewer/SourceView.resx b/Source/ModelViewer/SourceView.resx
index 29dcb1b3..1af7de15 100644
--- a/Source/ModelViewer/SourceView.resx
+++ b/Source/ModelViewer/SourceView.resx
@@ -1,120 +1,120 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
</root> \ No newline at end of file
diff --git a/Source/ModelViewer/TreeSkeleton.cs b/Source/ModelViewer/TreeSkeleton.cs
index 543788a8..c3dee44f 100644
--- a/Source/ModelViewer/TreeSkeleton.cs
+++ b/Source/ModelViewer/TreeSkeleton.cs
@@ -1,205 +1,205 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer
-{
- internal class SkeletonItem
- {
- readonly string name;
- readonly List<SkeletonItem> children = new List<SkeletonItem>();
- internal readonly IDisplayNode[] displayNodes;
- internal bool[] isPrimary;
- internal readonly SkeletonItem parent;
- internal readonly Main main;
- internal readonly int level;
- internal bool expanded, wasExpanded;
- internal bool isMatch;
-
- public void Iter(Action<SkeletonItem> handler)
- {
- handler(this);
- children.ForEach(u => u.Iter(handler));
- }
-
- public IEnumerable<SkeletonItem> RecChildren
- {
- get
- {
- if (expanded) {
- foreach (var c in children) {
- yield return c;
- foreach (var ch in c.RecChildren)
- yield return ch;
- }
- }
- }
- }
-
- public SkeletonItem[] PopulateRoot(IEnumerable<IState> states)
- {
- var i = 0;
- foreach (var s in states) {
- displayNodes[i++] = new ContainerNode<IDisplayNode>(this.name, x => x, s.Nodes);
- }
-
- return BfsExpand(this);
- }
-
- public SkeletonItem(Main m, int stateCount)
- {
- name = "";
- main = m;
- displayNodes = new IDisplayNode[stateCount];
- isPrimary = new bool[stateCount];
- }
-
- internal SkeletonItem(string n, SkeletonItem par)
- : this(par.main, par.displayNodes.Length)
- {
- parent = par;
- name = n;
- level = par.level + 1;
- }
-
- public bool Expandable
- {
- get {
- if (wasExpanded)
- return children.Count > 0;
- return displayNodes.Any(d => d != null && d.Children.Count() > 0);
- }
- }
-
- public bool Expanded
- {
- get { return expanded; }
- set
- {
- expanded = value;
- if (expanded)
- ComputeChildren();
- }
- }
-
- static SkeletonItem[] BfsExpand(SkeletonItem skel)
- {
- for (int i = 0; i < skel.displayNodes.Length; ++i)
- BfsExpandCore(skel, i);
-
- var workItems = new Stack<SkeletonItem>();
- var allNodes = new List<SkeletonItem>();
- workItems.Push(skel);
-
- while (workItems.Count > 0) {
- var s = workItems.Pop();
- if (!s.isPrimary.Any())
- continue;
- allNodes.Add(s);
- s.children.Iter(workItems.Push);
- }
-
- return allNodes.ToArray();
- }
-
- static void BfsExpandCore(SkeletonItem skel, int idx)
- {
- var visited = new HashSet<Model.Element>();
- var workItems = new Queue<SkeletonItem>();
-
- workItems.Enqueue(skel);
- while (workItems.Count > 0) {
- var s = workItems.Dequeue();
- if (s.displayNodes[idx] == null)
- continue;
- var e = s.displayNodes[idx].Element;
- s.isPrimary[idx] = true;
- if (e != null) {
- if (visited.Contains(e))
- continue;
- visited.Add(e);
- }
- s.ComputeChildren();
- s.children.Iter(workItems.Enqueue);
- }
- }
-
- private void ComputeChildren()
- {
- if (wasExpanded) return;
- wasExpanded = true;
-
- var created = new Dictionary<string, SkeletonItem>();
- var names = new List<IDisplayNode>();
- for (int i = 0; i < displayNodes.Length; ++i) {
- var dn = displayNodes[i];
- if (dn == null) continue;
- foreach (var child in dn.Children) {
- if (child.ViewLevel > main.viewOpts.ViewLevel)
- continue;
- SkeletonItem skelChild;
- var name = child.Name;
- if (!created.TryGetValue(name, out skelChild)) {
- skelChild = new SkeletonItem(child.Name, this);
- created.Add(name, skelChild);
- names.Add(child);
- }
- skelChild.displayNodes[i] = child;
- }
- }
-
- foreach (var name in main.LangModel.SortFields(names)) {
- children.Add(created[name]);
- }
- }
-
- public bool MatchesWords(string[] words, Model.Element[] elts, Model.Element eq, int stateId)
- {
- var node = displayNodes[stateId];
- if (node == null)
- return false;
- var s1 = LongName(stateId).ToLower();
- var s2 = node.Value.ToLower();
-
- if (eq != null && node.Element != eq)
- return false;
-
- foreach (var w in words) {
- if (!s1.Contains(w) && !s2.Contains(w))
- return false;
- }
-
- foreach (var e in elts) {
- if (!node.References.Contains(e))
- return false;
- }
-
- return true;
- }
-
- public string LongName(int stateId)
- {
- var parents = new List<IDisplayNode>();
- for (var curr = this; curr != null; curr = curr.parent) {
- if (curr.parent != null) // skip the root
- parents.Add(curr.displayNodes[stateId]);
- }
- parents.Reverse();
- return main.LangModel.PathName(parents);
- }
-
- public void SyncWith(Dictionary<SkeletonItem, SkeletonItem> mapping, SkeletonItem old)
- {
- mapping[old] = this;
- Expanded = old.Expanded;
- var oldCh = old.children.ToDictionary(c => c.name);
- foreach (var c in children) {
- SkeletonItem oc;
- if (oldCh.TryGetValue(c.name, out oc))
- c.SyncWith(mapping, oc);
- }
- }
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Microsoft.Boogie.ModelViewer
+{
+ internal class SkeletonItem
+ {
+ readonly string name;
+ readonly List<SkeletonItem> children = new List<SkeletonItem>();
+ internal readonly IDisplayNode[] displayNodes;
+ internal bool[] isPrimary;
+ internal readonly SkeletonItem parent;
+ internal readonly Main main;
+ internal readonly int level;
+ internal bool expanded, wasExpanded;
+ internal bool isMatch;
+
+ public void Iter(Action<SkeletonItem> handler)
+ {
+ handler(this);
+ children.ForEach(u => u.Iter(handler));
+ }
+
+ public IEnumerable<SkeletonItem> RecChildren
+ {
+ get
+ {
+ if (expanded) {
+ foreach (var c in children) {
+ yield return c;
+ foreach (var ch in c.RecChildren)
+ yield return ch;
+ }
+ }
+ }
+ }
+
+ public SkeletonItem[] PopulateRoot(IEnumerable<IState> states)
+ {
+ var i = 0;
+ foreach (var s in states) {
+ displayNodes[i++] = new ContainerNode<IDisplayNode>(this.name, x => x, s.Nodes);
+ }
+
+ return BfsExpand(this);
+ }
+
+ public SkeletonItem(Main m, int stateCount)
+ {
+ name = "";
+ main = m;
+ displayNodes = new IDisplayNode[stateCount];
+ isPrimary = new bool[stateCount];
+ }
+
+ internal SkeletonItem(string n, SkeletonItem par)
+ : this(par.main, par.displayNodes.Length)
+ {
+ parent = par;
+ name = n;
+ level = par.level + 1;
+ }
+
+ public bool Expandable
+ {
+ get {
+ if (wasExpanded)
+ return children.Count > 0;
+ return displayNodes.Any(d => d != null && d.Children.Count() > 0);
+ }
+ }
+
+ public bool Expanded
+ {
+ get { return expanded; }
+ set
+ {
+ expanded = value;
+ if (expanded)
+ ComputeChildren();
+ }
+ }
+
+ static SkeletonItem[] BfsExpand(SkeletonItem skel)
+ {
+ for (int i = 0; i < skel.displayNodes.Length; ++i)
+ BfsExpandCore(skel, i);
+
+ var workItems = new Stack<SkeletonItem>();
+ var allNodes = new List<SkeletonItem>();
+ workItems.Push(skel);
+
+ while (workItems.Count > 0) {
+ var s = workItems.Pop();
+ if (!s.isPrimary.Any())
+ continue;
+ allNodes.Add(s);
+ s.children.Iter(workItems.Push);
+ }
+
+ return allNodes.ToArray();
+ }
+
+ static void BfsExpandCore(SkeletonItem skel, int idx)
+ {
+ var visited = new HashSet<Model.Element>();
+ var workItems = new Queue<SkeletonItem>();
+
+ workItems.Enqueue(skel);
+ while (workItems.Count > 0) {
+ var s = workItems.Dequeue();
+ if (s.displayNodes[idx] == null)
+ continue;
+ var e = s.displayNodes[idx].Element;
+ s.isPrimary[idx] = true;
+ if (e != null) {
+ if (visited.Contains(e))
+ continue;
+ visited.Add(e);
+ }
+ s.ComputeChildren();
+ s.children.Iter(workItems.Enqueue);
+ }
+ }
+
+ private void ComputeChildren()
+ {
+ if (wasExpanded) return;
+ wasExpanded = true;
+
+ var created = new Dictionary<string, SkeletonItem>();
+ var names = new List<IDisplayNode>();
+ for (int i = 0; i < displayNodes.Length; ++i) {
+ var dn = displayNodes[i];
+ if (dn == null) continue;
+ foreach (var child in dn.Children) {
+ if (child.ViewLevel > main.viewOpts.ViewLevel)
+ continue;
+ SkeletonItem skelChild;
+ var name = child.Name;
+ if (!created.TryGetValue(name, out skelChild)) {
+ skelChild = new SkeletonItem(child.Name, this);
+ created.Add(name, skelChild);
+ names.Add(child);
+ }
+ skelChild.displayNodes[i] = child;
+ }
+ }
+
+ foreach (var name in main.LangModel.SortFields(names)) {
+ children.Add(created[name]);
+ }
+ }
+
+ public bool MatchesWords(string[] words, Model.Element[] elts, Model.Element eq, int stateId)
+ {
+ var node = displayNodes[stateId];
+ if (node == null)
+ return false;
+ var s1 = LongName(stateId).ToLower();
+ var s2 = node.Value.ToLower();
+
+ if (eq != null && node.Element != eq)
+ return false;
+
+ foreach (var w in words) {
+ if (!s1.Contains(w) && !s2.Contains(w))
+ return false;
+ }
+
+ foreach (var e in elts) {
+ if (!node.References.Contains(e))
+ return false;
+ }
+
+ return true;
+ }
+
+ public string LongName(int stateId)
+ {
+ var parents = new List<IDisplayNode>();
+ for (var curr = this; curr != null; curr = curr.parent) {
+ if (curr.parent != null) // skip the root
+ parents.Add(curr.displayNodes[stateId]);
+ }
+ parents.Reverse();
+ return main.LangModel.PathName(parents);
+ }
+
+ public void SyncWith(Dictionary<SkeletonItem, SkeletonItem> mapping, SkeletonItem old)
+ {
+ mapping[old] = this;
+ Expanded = old.Expanded;
+ var oldCh = old.children.ToDictionary(c => c.name);
+ foreach (var c in children) {
+ SkeletonItem oc;
+ if (oldCh.TryGetValue(c.name, out oc))
+ c.SyncWith(mapping, oc);
+ }
+ }
+ }
+
+}
diff --git a/Source/ModelViewer/VccProvider.cs b/Source/ModelViewer/VccProvider.cs
index ae062c93..345dfda5 100644
--- a/Source/ModelViewer/VccProvider.cs
+++ b/Source/ModelViewer/VccProvider.cs
@@ -1,1526 +1,1526 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Microsoft.Boogie.ModelViewer.Vcc
-{
- public class Provider : ILanguageProvider
- {
- public static Provider Instance = new Provider();
- private Provider() { }
-
- public bool IsMyModel(Model m)
- {
- return m.TryGetFunc("$is_ghost_field") != null && m.TryGetFunc("$fk_vol_version") != null;
- }
-
- public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
- {
- var vm = new VccModel(m, opts);
- return vm;
- }
- }
-
- enum DataKind
- {
- Flat,
- PhysPtr,
- SpecPtr,
- Object,
- Ptrset,
- Map
- }
-
- class VccModel : LanguageModel
- {
- public readonly Model.Func f_ptr_to, f_phys_ptr_cast, f_spec_ptr_cast, f_mathint, f_local_value_is, f_spec_ptr_to, f_heap, f_select_field,
- f_select_value, f_field, f_field_type, f_int_to_ptr, f_ptr_to_int, f_ptr, f_map_t, f_select_ptr,
- f_owners, f_closed, f_roots, f_timestamps, f_select_bool, f_select_int, f_is_null, f_good_state,
- f_int_to_version, f_int_to_ptrset, f_set_in0, f_is_ghost_field, f_is_phys_field, f_idx,
- f_is_sequential_field, f_is_volatile_field, f_type_project_0, f_array, f_active_option, f_int_to_field,
- f_blob_type, f_array_emb, f_addr, f_address_root, f_base, f_field_arr_size, f_field_arr_root, f_field_arr_index,
- f_dot, f_prim_emb;
- public readonly Model.Element tp_object, tp_mathint, tp_bool, tp_state, tp_ptrset, tp_heaptp;
- public readonly Model.Element elt_me, elt_null;
- Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
- Dictionary<Model.Element, string> literalName = new Dictionary<Model.Element, string>();
- Dictionary<Model.Element, Model.Element> guessedType = new Dictionary<Model.Element,Model.Element>();
- public List<StateNode> states = new List<StateNode>();
- public Dictionary<string, string> localVariableNames = new Dictionary<string, string>();
-
- Dictionary<Model.Element, string> datatypeLongName = new Dictionary<Model.Element, string>();
-
- Dictionary<int, string> fileNameMapping = new Dictionary<int, string>();
-
- public const string selfMarker = "\\self";
- public const int maxDatatypeNameLength = 5;
-
- public VccModel(Model m, ViewOptions opts)
- : base(m, opts)
- {
- f_ptr_to = m.MkFunc("$ptr_to", 1);
- f_spec_ptr_to = m.MkFunc("$spec_ptr_to", 1);
- f_phys_ptr_cast = m.MkFunc("$phys_ptr_cast", 2);
- f_spec_ptr_cast = m.MkFunc("$spec_ptr_cast", 2);
- f_mathint = m.MkFunc("^^mathint", 0);
- f_local_value_is = m.MkFunc("$local_value_is", 5);
- f_heap = m.MkFunc("$heap", 1);
- f_select_field = m.MkFunc("Select_[$field][$ptr]$int", 2);
- f_select_value = m.MkFunc("Select_[$ptr]$int", 2);
- f_select_ptr = m.MkFunc("Select_[$ptr]$ptr", 2);
- f_select_int = m.MkFunc("Select_[$ptr]$int", 2);
- f_select_bool = m.MkFunc("Select_[$ptr]$bool", 2);
- f_owners = m.MkFunc("$f_owner", 1);
- f_closed = m.MkFunc("$f_closed", 1);
- f_roots = m.MkFunc("$roots", 1);
- f_timestamps = m.MkFunc("$f_timestamp", 1);
- f_active_option = m.MkFunc("$f_active_option", 1);
- f_field = m.MkFunc("$field", 1);
- f_field_type = m.MkFunc("$field_type", 1);
- f_int_to_ptr = m.MkFunc("$int_to_ptr", 1);
- f_ptr_to_int = m.MkFunc("$ptr_to_int", 1);
- f_ptr = m.MkFunc("$ptr", 2);
- f_dot = m.MkFunc("$dot", 2);
- f_map_t = m.MkFunc("$map_t", 2);
- f_is_null = m.MkFunc("$is_null", 1);
- f_good_state = m.MkFunc("$good_state", 1);
- f_int_to_version = m.MkFunc("$int_to_version", 1);
- f_int_to_ptrset = m.MkFunc("$int_to_ptrset", 1);
- f_int_to_field = m.MkFunc("$int_to_field", 1);
- f_set_in0 = m.MkFunc("$set_in0", 2);
- f_is_ghost_field = m.MkFunc("$is_ghost_field", 1);
- f_is_phys_field = m.MkFunc("$is_phys_field", 1);
- f_idx = m.MkFunc("$idx", 2);
- f_is_sequential_field = m.MkFunc("$is_sequential_field", 1);
- f_is_volatile_field = m.MkFunc("$is_volatile_field", 1);
- f_type_project_0 = m.MkFunc("$type_project_0", 1);
- f_array = m.MkFunc("$array", 2);
- f_blob_type = m.MkFunc("$blob_type", 1);
- f_array_emb = m.MkFunc("$array_emb", 2);
- f_addr = m.MkFunc("$addr", 1);
- f_base = m.MkFunc("$base", 1);
- f_prim_emb = m.MkFunc("$prim_emb", 1);
- f_address_root = m.MkFunc("$address_root", 2);
- f_field_arr_index = m.MkFunc("$field_arr_index", 1);
- f_field_arr_size = m.MkFunc("$field_arr_size", 1);
- f_field_arr_root = m.MkFunc("$field_arr_root", 1);
-
- tp_bool = m.GetFunc("^^bool").GetConstant();
- tp_mathint = m.GetFunc("^^mathint").GetConstant();
- tp_object = m.GetFunc("^^object").GetConstant();
- tp_state = m.GetFunc("^$#state_t").GetConstant();
- tp_ptrset = m.GetFunc("^$#ptrset").GetConstant();
-
- tp_heaptp = m.MkFunc("$heap_type", 0).GetConstant();
-
- elt_me = m.GetFunc("$me").GetConstant();
- elt_null = m.GetFunc("$null").GetConstant();
-
- literalName[elt_me] = "\\me";
- literalName[elt_null] = "NULL";
- foreach (var tpl in f_phys_ptr_cast.Apps) {
- if (tpl.Args[0] == elt_null)
- literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "*)NULL";
- }
- foreach (var tpl in f_spec_ptr_cast.Apps) {
- if (tpl.Args[0] == elt_null)
- literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "^)NULL";
- }
- foreach (var fn in model.Functions) {
- if (fn.Arity == 0 && fn.Name.StartsWith("l#"))
- literalName[fn.GetConstant()] = ":" + fn.Name.Substring(2);
- }
-
- DecodeFileNames();
- ComputeLocalVariableNames();
-
- foreach (var s in m.States) {
- var sn = new StateNode(this, s);
- sn.SetupVars();
- states.Add(sn);
- }
-
- var allStates = states.ToArray();
- if (allStates.Length == 1 && allStates[0].vars.Count == 0) {
- throw new Exception("This VCC model doesn't contain any variables. Was it saved with the -bvd option?");
- }
- states.Clear();
- var i = 0;
- while (i < allStates.Length) {
- var lastGoodName = allStates[i].State.Name;
-
- var userVars = new HashSet<string>(allStates[i].State.Variables.Where(localVariableNames.ContainsKey));
- i++;
- while (i < allStates.Length) {
- foreach (var v in allStates[i].State.Variables) {
- if (v == "$s" || userVars.Contains(v)) goto stop;
- if (localVariableNames.ContainsKey(v))
- userVars.Add(v);
- }
-
- var curName = TryParseSourceLocation(allStates[i].State.Name);
- if (!IsBadName(curName))
- lastGoodName = allStates[i].State.Name;
- i++;
- }
-
- stop:
-
- var lastState = allStates[i - 1];
- lastState.capturedStateName = lastGoodName;
- lastState.index = states.Count;
- states.Add(lastState);
- lastState.SetupVars();
- }
-
- foreach (var s in states) {
- var elt = s.State.TryGet("$s");
- if (elt != null)
- literalName[elt] = "\\state'" + s.index;
- }
-
- GenerateSourceLocations(states);
- }
-
-
- bool IsBadName(SourceLocation l)
- {
- return l == null || l.Filename.StartsWith("<");
- }
-
- private void ComputeLocalVariableNames()
- {
- var vars = model.States.SelectMany(s => s.Variables).Where(v => v != null).Distinct();
- Func<string, string> simpleName = s => { string dummy; return GetUserVariableNameCore(s, out dummy); };
- var userVars = vars.Where(s => simpleName(s) != null);
- var conflictsName = Conflicts(userVars, simpleName).ToArray();
- Func<string, string> qName = s => { string kind, n = GetUserVariableNameCore(s, out kind); return n + " (" + kind + ")"; };
- var conflictsKind = Conflicts(conflictsName, qName).ToArray();
-
- var conflictsNameH = new HashSet<string>(conflictsName);
- var conflictsKindH = new HashSet<string>(conflictsKind);
-
- foreach (var v in userVars) {
- if (conflictsKindH.Contains(v)) continue;
- if (conflictsNameH.Contains(v))
- localVariableNames[v] = qName(v);
- else
- localVariableNames[v] = simpleName(v);
- }
-
- var idx = 0;
- foreach (var v in conflictsKind) {
- localVariableNames[v] = string.Format("{0} #{1}", qName(v), idx++);
- }
- }
-
- static IEnumerable<A> Conflicts<A, B>(IEnumerable<A> input, Func<A, B> f)
- {
- var revMap = new Dictionary<B, A>();
- var reported = new HashSet<A>();
-
- foreach (var k in input) {
- if (reported.Contains(k)) continue;
- var v = f(k);
- A tmp;
- if (revMap.TryGetValue(v, out tmp) && !tmp.Equals(k)) {
- if (!reported.Contains(tmp)) {
- yield return tmp;
- reported.Add(tmp);
- }
- yield return k;
- reported.Add(k);
- } else {
- revMap[v] = k;
- }
- }
- }
-
- #region Function name scoring
- static string[][] prefixes = new string[][] {
- new string[] { "F#", "$eq.$map", "Q#", },
- new string[] { "F#lambda", },
- new string[] { "$int_to_", "lambda@", "distinct-aux-f", "Select_","Store_", "$select.", "$store.", },
- };
-
- static string[][] totals = new string[][] {
- new string[] {
- "$current_timestamp",
- "$full_stop", "$function_entry", "$ptr_to_i4",
- "$ptr_to_i8", "$ptr_to_u4", "$ptr_to_u8",
- "$span", "$sizeof", "$in_domain",
- "$inv2",
- "$is_claimable",
- "$set_cardinality", "$set_difference", "$set_union",
- "$thread_local", "$unchecked", "$writes_at",
- "$array_range", "$arrays_disjoint",
- "$byte_ptr_subtraction",
- },
-
- new string[] {
- "$addr", "$dot", "$emb0", "$fetch_from_domain", "$in_range_phys_ptr",
- "$in_range_spec_ptr", "$is_sequential_field", "$is_volatile_field",
- "$is_ghost_field", "$is_phys_field", "$is_math_type", "$invok_state",
- "$is_primitive",
- "$spec_ptr_cast",
- "$phys_ptr_cast",
- "$is_null",
- "$in_domain_lab",
- "$inv_lab",
- "$set_in0",
- },
-
- new string[] {
- "$_pow2", "$as_composite_field", "$as_field_with_type", "$as_in_range_t",
- "$as_primitive_field", "$base", "$call_transition", "tickleBool", "Ctor",
- "$mv_state", "$field", "$field_arr_root", "$field_kind", "$field_offset",
- "$field_parent_type", "$field_type", "$file_name_is", "$good_state",
- "$good_state_ext", "$function_arg_type", "$has_field_at0", "$map_domain",
- "$map_range", "$map_t", "$ptr_to", "$ptr_to_i1", "$ptr_to_i2",
- "$ptr_to_u1", "$ptr_to_u2", "$is_unwrapped", "$is_unwrapped_dynamic",
- "$heap", "$closed", "$owner", "$owns", "$modifies", "$post_unwrap",
- "$pow2", "$pre_unwrap", "$ptr", "$is", "$in_range_t", "$roots",
- "$timestamp", "$type_branch", "$type_code_is", "$type_project_0",
- "$typemap", "$set_in_pos", "$updated_owns", "$ver_domain", "$vs_state",
- "$set_singleton",
- "$f_owner", "$f_closed", "$f_timestamps",
- "$local_value_is",
- "$field_arr_ctor",
- "$idx",
- },
- };
-
- string[] state_props = new string[] { };
-
- Dictionary<string, int> functionScores = new Dictionary<string, int>();
-
- int FunctionScore(string name)
- {
- if (functionScores.Count == 0) {
- for (int i = 0; i < totals.Length; ++i)
- foreach (var s in totals[i])
- functionScores[s] = i;
- }
-
- int res;
- if (functionScores.TryGetValue(name, out res))
- return res;
-
- res = -1;
- if (name[0] == '$' && name.EndsWith("_to_int"))
- res = 1;
- else if (name.EndsWith("#frame"))
- res = 2;
- else if (name.Contains("#limited#"))
- res = 2;
- else {
- for (int i = 0; i < prefixes.Length; ++i)
- foreach (var p in prefixes[i])
- if (name.StartsWith(p)) {
- res = i;
- //goto stop;
- }
- //stop: ;
- }
-
- if (res == -1)
- res = 1; // default
-
- functionScores[name] = res;
- return res;
- }
- #endregion
-
- private void DecodeFileNames()
- {
- var fis = model.GetFunc("$file_name_is");
- foreach (var f in model.Functions) {
- if (f.Arity == 0 && f.Name.StartsWith("#file^")) {
- var sb = new StringBuilder();
- var idx = 6;
- var name = f.Name;
- while (idx < name.Length) {
- if (name[idx] == '?') {
- var c = (char)Int32.Parse(name.Substring(idx + 1, 2), System.Globalization.NumberStyles.HexNumber);
- sb.Append(c);
- idx += 3;
- } else {
- sb.Append(name[idx++]);
- }
- }
- name = sb.ToString();
-
- foreach (var app in fis.AppsWithArg(1, f.GetConstant()))
- fileNameMapping[app.Args[0].AsInt()] = name;
- }
- }
- }
-
- private Model.Element DecodeDT(string dt)
- {
- if (dt.StartsWith("dt")) {
- var tpName = dt.Replace("dt", "#distTp");
- var f = model.TryGetFunc(tpName);
- if (f != null) {
- return f.GetConstant();
- //var res = f_type_project_0.TryEval(ptr);
- //if (res != null)
- // tp = res;
- }
- }
- return null;
- }
-
- private string DecodeToken(string name, ref Model.Element tp)
- {
- var idx = name.LastIndexOf("$");
- if (idx < 0) return null;
- var words = name.Substring(idx + 1).Split('.', '^', '!', '#', '@');
- if (words.Length > 3)
- tp = DecodeDT(words[3]);
- return string.Format("{0}({1},{2})", fileNameMapping[int.Parse(words[0])], words[1], words[2]);
- }
-
- public string GetUserVariableName(string name)
- {
- string res;
- localVariableNames.TryGetValue(name, out res);
- return res;
- }
-
-
- string GetUserVariableNameCore(string name, out string kind)
- {
- if (name.StartsWith("L#")) {
- kind = "local";
- return name.Substring(2);
- }
-
- if (name.StartsWith("P#")) {
- kind = "in-param";
- return name.Substring(2);
- }
-
- if (name.StartsWith("OP#")) {
- kind = "out-param";
- return name.Substring(3);
- }
-
- if (name.StartsWith("SL#")) {
- kind = "spec local";
- return name.Substring(3);
- }
-
- if (name.StartsWith("SP#")) {
- kind = "spec in-param";
- return name.Substring(3);
- }
-
- if (name.StartsWith("local.")) {
- kind = "param copied to local";
- return name.Substring(6);
- }
-
- if (name.StartsWith("addr.")) {
- kind = "stack-allocated struct";
- return name.Substring(5);
- }
-
- if (name == "$result") {
- kind = "function return value";
- return "\\result";
- }
-
- if (name.StartsWith("res__") && viewOpts.ViewLevel >= 1) {
- kind = "call result";
- return name;
- }
-
- if (name == "$s" && viewOpts.ViewLevel >= 1) {
- kind = "current state";
- return "\\now";
- }
-
- kind = null;
- return null;
- }
-
-
- private string LiteralName(Model.Element elt)
- {
- string r;
-
- if (literalName.TryGetValue(elt, out r))
- return r;
-
- r = TryTypeName(elt);
- if (r != null) {
- literalName[elt] = r;
- return r;
- }
-
- var i = elt as Model.Integer;
- if (i != null)
- return AsPow2(i);
-
- var bv = elt as Model.BitVector;
- if (bv != null)
- return bv.Numeral + "bv" + bv.Size.ToString();
-
- return null;
- }
-
- public Model.Element LocalType(string localName)
- {
- string dummy;
- var v = GetUserVariableNameCore(localName, out dummy);
- if (v == null) v = localName;
- var c = model.TryGetFunc("#loc." + v);
- if (c != null) {
- var localIs = f_local_value_is.AppWithArg(2, c.GetConstant());
- if (localIs != null)
- return localIs.Args[4];
- }
- foreach (var s in model.States.Reverse()) {
- var val = s.TryGet(localName);
- var tp = GuessType(val);
- if (tp != tp_mathint)
- return tp;
- }
- return tp_mathint;
- }
-
- public Model.Element Image(Model.Element elt, Model.Func f)
- {
- var r = f.AppWithResult(elt);
- if (r != null)
- return r.Args[0];
- return null;
- }
-
- string TypeNameCore(Model.Element elt)
- {
- var deref = Image(elt, f_ptr_to);
- if (deref != null)
- return TypeName(deref) + "*";
- deref = Image(elt, f_spec_ptr_to);
- if (deref != null)
- return TypeName(deref) + "^";
- deref = Image(elt, f_blob_type);
- if (deref != null)
- return "_(blob " + CanonicalName(deref) + ")";
- var mapt = f_map_t.AppWithResult(elt);
- if (mapt != null)
- return string.Format("{1}[{0}]", TypeName(mapt.Args[0]), TypeName(mapt.Args[1]));
-
- var arr = f_array.AppWithResult(elt);
- if (arr != null) {
- return string.Format("{0}[{1}]", TypeName(arr.Args[0]), arr.Args[1].ToString());
- }
-
- foreach (var app in elt.Names)
- if (app.Func.Arity == 0 && app.Func.Name.StartsWith("^")) {
- var n = app.Func.Name.Substring(1);
- switch (n) {
- case "^i1": return "int8_t";
- case "^u1": return "uint8_t";
- case "^i2": return "int16_t";
- case "^u2": return "uint16_t";
- case "^i4": return "int32_t";
- case "^u4": return "uint32_t";
- case "^i8": return "int64_t";
- case "^u8": return "uint64_t";
- case "^bool": return "bool";
- default:
- var pref = "_vcc_math_type_";
- if (n.StartsWith(pref)) n = n.Substring(pref.Length);
- return n;
- }
- }
-
- return null;
- }
-
- public string TypeName(Model.Element elt)
- {
- var r = TryTypeName(elt);
- if (r == null)
- return elt.ToString();
- else return r;
- }
-
- public string TryTypeName(Model.Element elt)
- {
- string res;
- if (!typeName.TryGetValue(elt, out res)) {
- typeName[elt] = elt.ToString(); // avoid infinite recursion
- res = TypeNameCore(elt);
- typeName[elt] = res;
- }
- return res;
- }
-
- public static readonly string[] synthethic_fields = new string[] { "$f_owns", "$f_ref_cnt", "$f_vol_version", "$f_root", "$f_group_root", "$f_active_option" };
-
- public string ConstantFieldName(Model.Element elt)
- {
- string res;
- IsConstantField(elt, out res);
- return res;
- }
-
- public bool IsConstantField(Model.Element elt)
- {
- string dummy;
- return IsConstantField(elt, out dummy);
- }
-
- public bool IsConstantField(Model.Element elt, out string theName)
- {
- var bestScore = int.MinValue;
- string bestName = null;
-
- foreach (var t in elt.Names) {
- var score = int.MinValue;
- string name = null;
- if (t.Args.Length == 0) {
- name = t.Func.Name;
- score = 0;
- var dotIdx = name.IndexOf('.');
- if (dotIdx > 0) {
- score += 10;
- name = name.Substring(dotIdx + 1);
- }
- if (name.Contains('#')) score -= 1;
- } else if (t.Func.Name.StartsWith("$f_") && synthethic_fields.Contains(t.Func.Name)) {
- name = string.Format("{0}<{1}>", t.Func.Name.Substring(3).Replace("root", "alloc_root"), TypeName(t.Args[0]));
- score = 6;
- } else if (t.Func == f_array_emb) {
- name = string.Format("[0] (of {0}[{1}])", TypeName(t.Args[0]), t.Args[1].ToString());
- score = 5;
- }
- if (score > bestScore) {
- bestScore = score;
- bestName = name;
- }
- }
-
- theName = bestName;
- return bestScore >= 5;
- }
-
- bool IsSomeState(Model.Element elt)
- {
- var tp = GuessType(elt);
- return tp == tp_state || tp == tp_heaptp;
- }
-
- bool IsThisState(Model.Element st, Model.Element elt)
- {
- return elt == st || elt == f_heap.TryEval(st);
- }
-
- Model.Element GuessType(Model.Element element)
- {
- Model.Element res;
- if (!guessedType.TryGetValue(element, out res)) {
- res = GuessTypeCore(element);
- guessedType[element] = res;
- }
- return res;
- }
-
- Model.Element GuessTypeCore(Model.Element element)
- {
- if (element is Model.Boolean)
- return tp_bool;
-
- var fld = f_field.TryEval(element);
- if (fld != null) {
- var tp = f_field_type.TryEval(fld);
- if (tp != null) {
- var ptp = f_ptr_to.TryEval(tp);
- if (ptp != null)
- return ptp;
- ptp = f_spec_ptr_to.TryEval(tp);
- if (ptp != null)
- return ptp;
- }
- return tp_object;
- }
-
- foreach (var tpl in element.References) {
- if (element == tpl.Result) {
- if (tpl.Func == f_ptr)
- return tp_object;
- if (tpl.Func == f_heap)
- return tp_heaptp;
- }
-
- if (tpl.Args.Length >= 1 && tpl.Args[0] == element) {
- if (tpl.Func == f_heap || tpl.Func == f_closed || tpl.Func == f_good_state)
- return tp_state;
- }
-
- if (tpl.Func == f_select_bool)
- if (tpl.Args[0] == element)
- return tp_ptrset;
- else if (tpl.Args[1] == element)
- return tp_object;
-
- var fname = tpl.Func.Name;
-
- if (tpl.Args.Length == 2 && tpl.Args[0] == element && fname.StartsWith("$select.$map_t")) {
- var mt = model.TryGetFunc("MT#" + fname);
- if (mt != null && mt.Arity == 0)
- return mt.GetConstant();
- var t1 = GuessType(tpl.Args[1]);
- var t2 = GuessType(tpl.Result);
- var t = f_map_t.TryEval(t1, t2);
- if (t != null)
- return t;
- }
-
- var tpName = DataTypeName(element, tpl);
- if (tpName != null) {
- var tp = model.TryGetFunc("^$#" + tpName);
- if (tp != null)
- return tp.GetConstant();
- }
- }
-
- return tp_mathint;
- }
-
- string DataTypeName(Model.Element elt, Model.FuncTuple tpl)
- {
- var fname = tpl.Func.Name;
- if (tpl.Args.Length == 1 && tpl.Args[0] == elt && fname.StartsWith("RF#")) {
- var fldName = tpl.Func.Name.Substring(3);
- var idx = fldName.LastIndexOf('.');
- if (idx > 0) {
- return fldName.Substring(0, idx).Replace("_vcc_math_type_", "");
- }
- }
-
- if (tpl.Args.Length == 1 && tpl.Args[0] == elt && (fname.StartsWith("DSZ#") || fname.StartsWith("RSZ#") || fname.StartsWith("DGH#"))) {
- return fname.Substring(4).Replace("_vcc_math_type_", "");
- }
- return null;
- }
-
- public DataKind GetKind(Model.Element tp, out Model.FuncTuple tpl)
- {
- tpl = null;
-
- if (tp == tp_object)
- return DataKind.Object;
- else if (tp == tp_ptrset)
- return DataKind.Ptrset;
-
- tpl = f_ptr_to.AppWithResult(tp);
- if (tpl != null) return DataKind.PhysPtr;
- tpl = f_spec_ptr_to.AppWithResult(tp);
- if (tpl != null) return DataKind.SpecPtr;
- tpl = f_map_t.AppWithResult(tp);
- if (tpl != null) return DataKind.Map;
-
- return DataKind.Flat;
- }
-
- public DataKind GetKind(Model.Element tp)
- {
- Model.FuncTuple dummy;
- return GetKind(tp, out dummy);
- }
-
-
- public Model.Element WrapForUse(Model.Element elt, Model.Element tp)
- {
- Model.FuncTuple tpl;
- var kind = GetKind(tp, out tpl);
-
- if (kind == DataKind.Flat) {
- if (elt.Kind == Model.ElementKind.Integer) {
- var tpname = TypeName(tp);
- if(tpname.StartsWith("$")) tpname = tpname.Substring(1);
- if (tpname.StartsWith("#")) {
- foreach (var tupl in elt.References) {
- if (tupl.Args.Length == 1 && tupl.Args[0] == elt && tupl.Func.Name.StartsWith("$int_to_") && tupl.Func.Name.EndsWith(tpname)) {
- return tupl.Result;
- }
- }
- }
- }
- return elt;
- }
-
- if (kind == DataKind.Map) {
- if (elt.Kind == Model.ElementKind.Integer) {
- Model.Element theMap = null;
- foreach (var conv in model.Functions)
- // really, we should reconstruct the name of this function, but this is painful
- if (conv.Arity == 1 && conv.Name.StartsWith("$int_to_map_t")) {
- var app = conv.AppWithArg(0, elt);
- if (app != null) {
- theMap = app.Result;
- break;
- }
- }
- if (theMap == null) return elt;
- return theMap;
- }
- return elt;
- } else if (kind == DataKind.Ptrset) {
- var tmp = f_int_to_ptrset.TryEval(elt);
- if (tmp != null)
- return tmp;
- return elt;
- }
-
- if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) {
- if (elt.Kind == Model.ElementKind.Integer) {
- var tmp = f_int_to_ptr.TryEval(elt);
- if (tmp != null)
- elt = tmp;
- }
- }
-
- if (kind == DataKind.Object)
- return elt;
-
- if (kind == DataKind.PhysPtr)
- return Util.OrElse(f_phys_ptr_cast.TryEval(elt, tpl.Args[0]), elt);
-
- if (kind == DataKind.SpecPtr)
- return Util.OrElse(f_spec_ptr_cast.TryEval(elt, tpl.Args[0]), elt);
-
- Util.Assert(false);
- return elt;
- }
-
- void AddSpecialField(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func select_map)
- {
- if (elt == null) return;
-
- var map = state.State.TryGet("$s");
- if (map != null)
- map = select_map.TryEval(map);
- if (map != null) {
- var model = elt.Model;
- Model.Element val = f_select_bool.TryEval(map, elt);
- Model.Element tp = tp_bool;
- if (val == null) {
- val = f_select_ptr.TryEval(map, elt);
- tp = tp_object;
- }
- if (val == null) {
- val = f_select_int.TryEval(map, elt);
- tp = tp_mathint;
- }
- if (val != null) {
- res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty });
- }
- }
- }
-
- void AddPointerFunction(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func fn, Model.Element tp)
- {
- if (elt == null) return;
-
- var val = fn.TryEval(elt);
- if (val != null) {
- res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty });
- }
- }
-
- void AddPtrType(StateNode state, Model.Element elt, List<ElementNode> res)
- {
- var f = f_field.TryEval(elt);
- if (f == null) return;
-
- var tp = f_field_type.TryEval(f);
-
- var seq = "";
-
- var is_seq = f_is_sequential_field.TryEval(f) as Model.Boolean;
- var is_vol = f_is_volatile_field.TryEval(f) as Model.Boolean;
-
- if (is_seq != null && is_vol != null && is_seq.Value == is_vol.Value) {
- seq = " (volatile/sequential mismatch)";
- } else if ((is_seq != null && is_seq.Value) || (is_vol != null && !is_vol.Value)) {
- seq = " (sequential)";
- } else if ((is_seq != null && !is_seq.Value) || (is_vol != null && is_vol.Value)) {
- seq = " (volatile)";
- }
-
- if (tp != null || seq != "") {
- res.Add(new FieldNode(state, new EdgeName("\\typeof" + seq), tp, tp_mathint) { Category = NodeCategory.MethodologyProperty });
- }
- }
-
- string SkolemName(Model.Func f, ref Model.Element tp)
- {
- if (f.Name.IndexOf('!') > 0) {
- var tok = DecodeToken(f.Name, ref tp);
- if (tok != null) {
- var baseName = f.Name.Substring(0, f.Name.LastIndexOf('$'));
- if (baseName.StartsWith("Q#"))
- baseName = baseName.Substring(2);
- return string.Format("{0}@{1}", baseName, ShortenToken(tok, 10, false));
- }
- }
- return null;
- }
-
- string GlobalName(Model.Func f, ref Model.Element tp)
- {
- if (f.Name.StartsWith("G#")) {
- var idx = f.Name.LastIndexOf("#dt");
- if (idx < 0) return null;
- var name = f.Name.Substring(2, idx - 2);
- tp = DecodeDT(f.Name.Substring(idx + 1));
- return string.Format("::{0}", name);
- }
- return null;
- }
-
-
- public IEnumerable<ElementNode> CommonNodes(StateNode state)
- {
- var skolems = new List<ElementNode>();
-
- Model.Element tp = null;
-
- foreach (var f in model.Functions) {
- if (f.Arity != 0) continue;
- var s = SkolemName(f, ref tp);
- if (s == null)
- s = GlobalName(f, ref tp);
- if (s != null) {
- if (tp == null)
- tp = GuessType(f.GetConstant());
- var val = WrapForUse(f.GetConstant(), tp);
- skolems.Add(new VariableNode(state, s, val, tp));
- }
- }
-
- return skolems;
- }
-
- private Model.Element GuessPtrTo(Model.Element tp)
- {
- var p = f_ptr_to.TryEval(tp);
- if (p != null) return p;
- p = f_spec_ptr_to.TryEval(tp);
- if (p != null) return p;
- var nm = model.MkFunc("*ptrto_" + TypeName(tp), 0).GetConstant();
- f_ptr_to.AddApp(nm, tp);
- return f_ptr_to.TryEval(tp);
- }
-
- private Model.Element PtrTo(Model.Element tp, Model.Func f_ptr_to)
- {
- var p = f_ptr_to.TryEval(tp);
- if (p != null) return p;
- var nm = model.MkFunc("*" + f_ptr_to.Name + "_" + TypeName(tp), 0).GetConstant();
- f_ptr_to.AddApp(nm, tp);
- return f_ptr_to.TryEval(tp);
- }
-
- private bool IsArrayField(Model.Element ptr)
- {
- return ptr != null && f_idx.TryEval(ptr, model.TryMkElement("0")) != null;
- }
-
- public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt, Model.Element tp)
- {
- List<ElementNode> result = new List<ElementNode>();
- Model.FuncTuple tpl;
-
- if (elt == null) return result;
-
- var kind = GetKind(tp, out tpl);
- if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) {
- var heap = state.State.TryGet("$s");
- if (heap != null)
- heap = f_heap.TryEval(heap);
- var addresses = new HashSet<Model.Element>();
-
- if (heap != null) {
- var basePtr = f_base.TryEval(elt);
- foreach (var fld in f_select_field.AppsWithArg(0, heap)) {
- var val = f_select_value.TryEval(fld.Result, elt);
- if (val != null) {
- var field = fld.Args[1];
- if (!IsConstantField(field) && viewOpts.ViewLevel <= 2)
- continue;
- var addr = f_dot.TryEval(elt, field);
- if (addr != null) addresses.Add(addr);
- var node = ComputeUnionActiveOption(state, elt, val, field);
- if (node != null)
- result.Add(node);
- else
- BuildFieldNode(result, state, addr, field, val, addr);
- }
- }
- //result.Sort(CompareFields);
- }
-
- {
- foreach (var app in f_idx.AppsWithArg(0, elt)) {
- var addr = app.Result;
- Model.Element val = null, atp = tp;
-
- addresses.Add(addr);
-
- foreach (var papp in f_dot.AppsWithResult(addr)) {
- var tmp = f_select_value.OptEval(f_select_field.OptEval(heap, papp.Args[1]), papp.Args[0]);
- if (tmp != null) {
- val = tmp;
- var tt = f_field_type.TryEval(papp.Args[1]);
- if (tt != null) atp = tt;
- }
- }
-
- if (val != null)
- val = WrapForUse(val, atp);
- result.Add(new MapletNode(state, new EdgeName(this, "[%0]", app.Args[1]), val, atp) { Category = NodeCategory.Maplet });
- if (addr != null)
- result.Add(new MapletNode(state, new EdgeName(this, "&[%0]", app.Args[1]), addr, GuessPtrTo(atp)) { Category = NodeCategory.Maplet });
- }
- }
-
- foreach (var ptr in f_dot.AppsWithArg(0, elt)) {
- if (addresses.Contains(ptr.Result)) continue;
- var fld = ptr.Args[1];
- var idx = f_field_arr_index.TryEval(fld);
- if (idx != null) {
- var xtp = f_field_type.TryEval(fld);
- result.Add(new MapletNode(state, new EdgeName(this, "&[%0] of %1", idx, f_field_arr_size.TryEval(fld)), ptr.Result, GuessPtrTo(xtp)) { Category = NodeCategory.Maplet });
- }
- if (!IsConstantField(ptr.Args[1])) continue;
- BuildFieldNode(result, state, ptr.Result, ptr.Args[1], null, ptr.Result);
- }
-
- AddSpecialField(state, elt, result, "\\closed", f_closed);
- AddSpecialField(state, elt, result, "\\owner", f_owners);
- AddSpecialField(state, elt, result, "\\root", f_roots);
- AddSpecialField(state, elt, result, "\\timestamp", f_timestamps);
- AddPointerFunction(state, elt, result, "\\embedding", f_prim_emb, tp_object);
- AddPointerFunction(state, elt, result, "\\addr", f_addr, tp_mathint);
-
- if (viewOpts.ViewLevel >= 1) {
- AddPtrType(state, elt, result);
- AddCasts(state, elt, result);
- var sets = new SetsNode(state, elt);
- if (!sets.IsEmpty)
- result.Add(sets);
- }
-
- } else if (kind == DataKind.Map) {
- var elTp = tpl.Args[1];
- foreach (var sel in model.Functions)
- if (sel.Arity == 2 && sel.Name.StartsWith("$select.$map_t")) {
- foreach (var app in sel.AppsWithArg(0, elt)) {
- var val = WrapForUse(app.Result, elTp);
- var edgname = new EdgeName(this, "[%0]", app.Args[1]);
- result.Add(new MapletNode(state, edgname, val, elTp) { Category = NodeCategory.Maplet });
- }
- }
- } else if (kind == DataKind.Ptrset) {
- foreach (var sel in f_select_bool.AppsWithArg(0, elt)) {
- var edgname = new EdgeName(this, "[%0]", sel.Args[1]);
- result.Add(new MapletNode(state, edgname, sel.Result, tp_bool) { Category = NodeCategory.Maplet });
- }
- } else if (kind == DataKind.Flat) {
- foreach (var tupl in elt.References) {
- if (tupl.Args.Length == 1 && tupl.Args[0] == elt) {
- var fname = tupl.Func.Name;
- var idx = fname.LastIndexOf('.');
- if (fname.StartsWith("RF#") && idx > 0) {
- fname = fname.Substring(idx + 1);
- } else if (fname.StartsWith("DP#p")) {
- fname = fname.Substring(4);
- idx = fname.IndexOf('#');
- if (idx > 0)
- fname = fname.Substring(idx + 1) + "#" + fname.Substring(0, idx);
- } else {
- fname = null;
- }
-
- if (fname != null)
- result.Add(new FieldNode(state, new EdgeName(fname), tupl.Result, GuessType(tupl.Result)) { Category = NodeCategory.SpecField });
- }
- }
- }
-
- if (!(elt is Model.Boolean)) {
- var curState = state.State.TryGet("$s");
-
- foreach (var tupl in elt.References) {
- {
- var seenSelf = false;
- var seenState = false;
- var seenThisState = false;
- var args = tupl.Args;
- for (int i = 0; i < args.Length; ++i) {
- if (args[i] == elt) seenSelf = true;
- if (IsThisState(curState, args[i])) seenThisState = true;
- else if (IsSomeState(args[i])) seenState = true;
- }
- if (!seenSelf) continue; // not looking for aliases (maybe we should?)
- if (seenState && !seenThisState) continue;
- }
-
- var argsFmt = new StringBuilder();
- var name = tupl.Func.Name;
-
- var score = FunctionScore(name);
- if (score >= viewOpts.ViewLevel)
- continue;
-
- var retTp = GuessType(tupl.Result);
- var retVal = tupl.Result;
-
- var cat = NodeCategory.MethodologyProperty;
- if (name.StartsWith("F#")) {
- name = name.Substring(2);
- cat = NodeCategory.UserFunction;
- }
-
- if (name.StartsWith("DF#")) {
- name = name.Substring(3);
- cat = NodeCategory.UserFunction;
- }
-
- if (name.StartsWith("$eq.$"))
- name = "EQ";
-
- {
- Model.Element sktp = null;
- var sk = SkolemName(tupl.Func, ref sktp);
- if (sk != null) {
- name = sk;
- if (sktp != null)
- retVal = WrapForUse(tupl.Result, sktp);
- cat = NodeCategory.Maplet;
- }
- }
-
- {
- argsFmt.Append(name).Append("(");
- var args = new List<Model.Element>();
- foreach (var a in tupl.Args) {
- if (IsThisState(curState, a))
- argsFmt.Append("\\now, ");
- else if (a == elt)
- argsFmt.Append(selfMarker + ", ");
- else {
- argsFmt.AppendFormat("%{0}, ", args.Count);
- args.Add(a);
- }
- }
- argsFmt.Length -= 2;
- argsFmt.Append(")");
- var edgeName = new EdgeName(this, argsFmt.ToString(), args.ToArray());
- result.Add(new MapletNode(state, edgeName, retVal, retTp) { ViewLevel = score, Category = cat });
- }
-
- }
- }
-
- return result;
- }
-
- private FieldNode ComputeUnionActiveOption(StateNode state, Model.Element elt, Model.Element val, Model.Element field)
- {
- if (f_active_option.AppsWithResult(field).FirstOrDefault() != null) {
- var activeOpt = f_dot.OptEval(elt, f_int_to_field.OptEval(val));
- if (activeOpt != null) {
- var nm = ConstantFieldName(field);
- var fieldNode = new FieldNode(state, new EdgeName(nm), activeOpt, GuessType(activeOpt)) { Category = NodeCategory.MethodologyProperty };
- return fieldNode;
- }
- }
- return null;
- }
-
- private void AddCasts(StateNode state, Model.Element elt, List<ElementNode> result)
- {
- foreach (var app in f_phys_ptr_cast.AppsWithArg(0, elt)) {
- if (app.Result != elt)
- result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "*)..."), app.Result, PtrTo(app.Args[1], f_ptr_to)));
- }
- foreach (var app in f_spec_ptr_cast.AppsWithArg(0, elt)) {
- if (app.Result != elt)
- result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "^)..."), app.Result, PtrTo(app.Args[1], f_spec_ptr_to)));
- }
- var addr = f_addr.TryEval(elt);
- if (addr != null) {
- foreach (var app in f_blob_type.Apps) {
- var blob = f_address_root.TryEval(addr, app.Result);
- if (blob != null) {
- result.Add(new MapletNode(state, new EdgeName(this, TypeName(app.Result) + "..."), blob, app.Result));
- }
- }
- }
- }
-
- private void BuildFieldNode(List<ElementNode> result, StateNode state, Model.Element ptr, Model.Element field, Model.Element val, Model.Element addr)
- {
- var ftp = f_field_type.TryEval(field);
- if (val != null)
- val = WrapForUse(val, ftp);
-
- if (IsArrayField(ptr)) {
- val = addr;
- addr = null;
- ftp = GuessPtrTo(ftp);
- }
-
- var nm = ConstantFieldName(field);
- var edgname = nm == null ? field.ToString() : nm;
-
- var cat = NodeCategory.PhysField;
- if (f_is_ghost_field.IsTrue(field))
- cat = NodeCategory.SpecField;
- if (nm != null && nm.Contains("<"))
- cat = NodeCategory.MethodologyProperty;
-
- var fieldNode = new FieldNode(state, new EdgeName(edgname), val, ftp) { Category = cat};
- result.Add(fieldNode);
-
- if (addr != null) {
- result.Add(new FieldNode(state, new EdgeName("&" + edgname), addr, GuessPtrTo(ftp)) { Category = cat });
- }
- }
-
- public override IEnumerable<IState> States
- {
- get
- {
- return states;
- }
- }
-
- private int DataTypeToString(StringBuilder sb, int level, Model.Element elt)
- {
- Model.FuncTuple ctor = null;
- int len = 1;
- string dataTypeType = null;
- foreach (var app in elt.References) {
- var n = app.Func.Name;
- if (app.Result == elt && n.StartsWith("DF#")) {
- ctor = app;
- }
- var tmp = DataTypeName(elt, app);
- if (tmp != null) dataTypeType = tmp;
- }
-
- if (dataTypeType != null) {
- if (ctor != null)
- sb.Append(ctor.Func.Name.Substring(3));
- else
- sb.Append(DataTypeShortName(elt, dataTypeType));
- if (ctor != null && ctor.Args.Length > 0) {
- if (level <= 0) sb.Append("(...)");
- else {
- sb.Append("(");
- for (int i = 0; i < ctor.Args.Length; ++i) {
- if (i != 0) sb.Append(", ");
- len += DataTypeToString(sb, level - 1, ctor.Args[i]);
- }
- sb.Append(")");
- }
- }
- } else {
- sb.Append(CanonicalName(elt));
- }
- return len;
- }
-
- private string DataTypeShortName(Model.Element elt, string tp)
- {
- var baseName = tp;
-
- var hd = model.MkFunc("DGH#" + tp, 1).TryEval(elt);
- if (hd != null) {
- foreach (var nm in hd.References) {
- if (nm.Func.Arity == 0 && nm.Func.Name.StartsWith("DH#"))
- baseName = nm.Func.Name.Substring(3);
- }
- }
-
- return baseName;
- }
-
- private string CanonicalBaseNameCore(string name, Model.Element elt, bool doDatatypes, ref NameSeqSuffix suff)
- {
- var vm = this;
-
- if (name.Contains("[") || name.Contains("'"))
- name = "";
-
- if (name != "")
- return name;
-
- var isNull = false;
- foreach (var tpl in elt.References) {
- var fn = tpl.Func;
- if (fn.Name.StartsWith("$select.$map_t") && fn.Arity == 2 && tpl.Args[0] == elt)
- return "map";
- if (fn.Name.StartsWith("$int_to_map_t") && tpl.Result == elt)
- return "map";
-
- if (fn.Arity >= 1 && tpl.Args[0] == elt) {
- if (fn == f_select_bool)
- return "ptrset";
- }
-
- if (tpl.Result == elt)
- if (fn == f_int_to_version)
- return "version";
-
- if (fn == f_is_null && tpl.Result == model.True)
- isNull = true;
-
- var dtpName = DataTypeName(elt, tpl);
- if (dtpName != null) {
- var sb = new StringBuilder();
- string prev = null;
- datatypeLongName[elt] = "*SELF*"; // in case we recurse (but this shouldn't happen)
- for (int lev = 0; lev < 10; lev++) {
- sb.Length = 0;
- var len = DataTypeToString(sb, lev, elt);
- if (prev == null || len <= maxDatatypeNameLength)
- prev = sb.ToString();
- }
-
- datatypeLongName[elt] = prev;
- suff = NameSeqSuffix.WhenNonZero;
- return prev;
- }
- }
-
- var fld = vm.f_field.TryEval(elt);
- if (fld != null) {
- var tp = vm.f_field_type.TryEval(fld);
- if (tp != null) {
- var n = vm.TryTypeName(tp);
- if (n != null) {
- if (isNull)
- return "(" + n + "*)NULL";
- return n;
- }
- }
- }
-
- return "";
- }
-
- protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
- {
- var lit = this.LiteralName(elt);
- if (lit != null) {
- suff = NameSeqSuffix.None;
- return lit;
- }
- if (datatypeLongName.TryGetValue(elt, out lit)) {
- suff = NameSeqSuffix.WhenNonZero;
- return lit;
- }
-
- var name = base.CanonicalBaseName(elt, out suff);
- name = CanonicalBaseNameCore(name, elt, true, ref suff);
-
- return name;
- }
-
- public override string PathName(IEnumerable<IDisplayNode> path)
- {
- var sb = new StringBuilder();
- foreach (var d in path) {
- var name = d.Name;
- if (name == "") continue; // can that happen?
- if (name.Contains("(") && name.Contains(selfMarker)) {
- var repl = name.Replace(selfMarker, sb.ToString());
- sb.Length = 0;
- sb.Append(repl);
- } else {
- if (sb.Length > 0 && name[0] != '[')
- sb.Append("->");
- sb.Append(d.Name);
- }
- }
-
- return sb.ToString();
- }
- }
-
- class StateNode : NamedState
- {
- internal VccModel vm;
- internal List<VariableNode> vars;
- internal List<ElementNode> commons;
- internal int index;
- internal string capturedStateName;
-
- public StateNode(VccModel parent, Model.CapturedState s)
- : base(s, parent)
- {
- this.capturedStateName = s.Name;
- this.vm = parent;
- }
-
- internal void SetupVars()
- {
- if (vars != null) return;
- vars = new List<VariableNode>();
-
- var names = Util.Empty<string>();
-
- if (vm.states.Count > 0) {
- var prev = vm.states.Last();
- names = prev.vars.Map(v => v.realName);
- }
-
- names = names.Concat(state.Variables).Distinct();
-
- var curVars = state.Variables.ToDictionary(x => x);
- foreach (var v in names) {
- var localName = vm.GetUserVariableName(v);
- if (localName != null) {
- var tp = vm.LocalType(v);
- var val = state.TryGet(v);
- val = vm.WrapForUse(val, tp);
- var vn = new VariableNode(this, v, val, tp) { ShortName = localName };
- vn.updatedHere = vm.states.Count > 0 && curVars.ContainsKey(v);
- if (curVars.ContainsKey(v))
- vm.RegisterLocalValue(vn.Name, val);
- vars.Add(vn);
- }
- }
-
- vm.Flush(vars);
-
- commons = new List<ElementNode>();
- commons.AddRange(vm.CommonNodes(this));
- }
-
- public override IEnumerable<IDisplayNode> Nodes
- {
- get {
- return vars.Concat(commons);
- }
- }
-
- public override string CapturedStateName
- {
- get
- {
- return this.capturedStateName;
- }
- }
- }
-
- class ElementNode : DisplayNode
- {
- protected StateNode stateNode;
- protected Model.Element tp;
- protected VccModel vm { get { return stateNode.vm; } }
-
- public ElementNode(StateNode st, EdgeName name, Model.Element elt, Model.Element tp)
- : base(st.vm, name, elt)
- {
- this.stateNode = st;
- this.tp = tp;
- }
-
- protected override void ComputeChildren()
- {
- children.AddRange(vm.GetExpansion(stateNode, element, tp));
- }
-
- public override string ToolTip
- {
- get
- {
- var sb = new StringBuilder();
- if (tp != null)
- sb.AppendFormat("Type: {0}\n", vm.TypeName(tp));
- var i = element as Model.Integer;
- if (i != null) {
- var n = System.Numerics.BigInteger.Parse(i.Numeral);
- sb.AppendFormat("Value: {0} (0x{1:x})\n", n, n);
- } else if (element != null) {
- sb.AppendFormat("Value: {0}\n", element);
- }
- return sb.ToString();
- }
- }
- }
-
- class SetsNode : ElementNode
- {
- List<Model.Element> refs = new List<Model.Element>();
-
- public SetsNode(StateNode par, Model.Element elt)
- : base(par, new EdgeName("\\in ..."), null, null)
- {
- children = new List<IDisplayNode>();
- foreach (var app in vm.f_select_bool.AppsWithArg(1, elt)) {
- children.Add(
- new MapletNode(par, new EdgeName(vm, VccModel.selfMarker + " \\in %0", app.Args[0]), app.Result, vm.tp_bool) { Category = NodeCategory.MethodologyProperty });
- refs.Add(app.Args[0]);
- }
- Category = NodeCategory.MethodologyProperty;
- }
-
- public override IEnumerable<Model.Element> References
- {
- get
- {
- return refs;
- }
- }
-
- public bool IsEmpty { get { return children.Count == 0; } }
- }
-
-
- class FieldNode : ElementNode
- {
- public FieldNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp)
- : base(par, realName, elt, tp)
- {
- }
- }
-
- class MapletNode : ElementNode
- {
- public MapletNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp)
- : base(par, realName, elt, tp)
- {
- }
- }
-
- class VariableNode : ElementNode
- {
- public bool updatedHere;
- public string realName;
-
- public VariableNode(StateNode par, string realName, Model.Element elt, Model.Element tp)
- : base(par, new EdgeName(realName), elt, tp)
- {
- this.realName = realName;
- }
-
- public override string ShortName
- {
- set { this.name = new EdgeName(value); }
- get { return this.name.ToString(); }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Microsoft.Boogie.ModelViewer.Vcc
+{
+ public class Provider : ILanguageProvider
+ {
+ public static Provider Instance = new Provider();
+ private Provider() { }
+
+ public bool IsMyModel(Model m)
+ {
+ return m.TryGetFunc("$is_ghost_field") != null && m.TryGetFunc("$fk_vol_version") != null;
+ }
+
+ public ILanguageSpecificModel GetLanguageSpecificModel(Model m, ViewOptions opts)
+ {
+ var vm = new VccModel(m, opts);
+ return vm;
+ }
+ }
+
+ enum DataKind
+ {
+ Flat,
+ PhysPtr,
+ SpecPtr,
+ Object,
+ Ptrset,
+ Map
+ }
+
+ class VccModel : LanguageModel
+ {
+ public readonly Model.Func f_ptr_to, f_phys_ptr_cast, f_spec_ptr_cast, f_mathint, f_local_value_is, f_spec_ptr_to, f_heap, f_select_field,
+ f_select_value, f_field, f_field_type, f_int_to_ptr, f_ptr_to_int, f_ptr, f_map_t, f_select_ptr,
+ f_owners, f_closed, f_roots, f_timestamps, f_select_bool, f_select_int, f_is_null, f_good_state,
+ f_int_to_version, f_int_to_ptrset, f_set_in0, f_is_ghost_field, f_is_phys_field, f_idx,
+ f_is_sequential_field, f_is_volatile_field, f_type_project_0, f_array, f_active_option, f_int_to_field,
+ f_blob_type, f_array_emb, f_addr, f_address_root, f_base, f_field_arr_size, f_field_arr_root, f_field_arr_index,
+ f_dot, f_prim_emb;
+ public readonly Model.Element tp_object, tp_mathint, tp_bool, tp_state, tp_ptrset, tp_heaptp;
+ public readonly Model.Element elt_me, elt_null;
+ Dictionary<Model.Element, string> typeName = new Dictionary<Model.Element, string>();
+ Dictionary<Model.Element, string> literalName = new Dictionary<Model.Element, string>();
+ Dictionary<Model.Element, Model.Element> guessedType = new Dictionary<Model.Element,Model.Element>();
+ public List<StateNode> states = new List<StateNode>();
+ public Dictionary<string, string> localVariableNames = new Dictionary<string, string>();
+
+ Dictionary<Model.Element, string> datatypeLongName = new Dictionary<Model.Element, string>();
+
+ Dictionary<int, string> fileNameMapping = new Dictionary<int, string>();
+
+ public const string selfMarker = "\\self";
+ public const int maxDatatypeNameLength = 5;
+
+ public VccModel(Model m, ViewOptions opts)
+ : base(m, opts)
+ {
+ f_ptr_to = m.MkFunc("$ptr_to", 1);
+ f_spec_ptr_to = m.MkFunc("$spec_ptr_to", 1);
+ f_phys_ptr_cast = m.MkFunc("$phys_ptr_cast", 2);
+ f_spec_ptr_cast = m.MkFunc("$spec_ptr_cast", 2);
+ f_mathint = m.MkFunc("^^mathint", 0);
+ f_local_value_is = m.MkFunc("$local_value_is", 5);
+ f_heap = m.MkFunc("$heap", 1);
+ f_select_field = m.MkFunc("Select_[$field][$ptr]$int", 2);
+ f_select_value = m.MkFunc("Select_[$ptr]$int", 2);
+ f_select_ptr = m.MkFunc("Select_[$ptr]$ptr", 2);
+ f_select_int = m.MkFunc("Select_[$ptr]$int", 2);
+ f_select_bool = m.MkFunc("Select_[$ptr]$bool", 2);
+ f_owners = m.MkFunc("$f_owner", 1);
+ f_closed = m.MkFunc("$f_closed", 1);
+ f_roots = m.MkFunc("$roots", 1);
+ f_timestamps = m.MkFunc("$f_timestamp", 1);
+ f_active_option = m.MkFunc("$f_active_option", 1);
+ f_field = m.MkFunc("$field", 1);
+ f_field_type = m.MkFunc("$field_type", 1);
+ f_int_to_ptr = m.MkFunc("$int_to_ptr", 1);
+ f_ptr_to_int = m.MkFunc("$ptr_to_int", 1);
+ f_ptr = m.MkFunc("$ptr", 2);
+ f_dot = m.MkFunc("$dot", 2);
+ f_map_t = m.MkFunc("$map_t", 2);
+ f_is_null = m.MkFunc("$is_null", 1);
+ f_good_state = m.MkFunc("$good_state", 1);
+ f_int_to_version = m.MkFunc("$int_to_version", 1);
+ f_int_to_ptrset = m.MkFunc("$int_to_ptrset", 1);
+ f_int_to_field = m.MkFunc("$int_to_field", 1);
+ f_set_in0 = m.MkFunc("$set_in0", 2);
+ f_is_ghost_field = m.MkFunc("$is_ghost_field", 1);
+ f_is_phys_field = m.MkFunc("$is_phys_field", 1);
+ f_idx = m.MkFunc("$idx", 2);
+ f_is_sequential_field = m.MkFunc("$is_sequential_field", 1);
+ f_is_volatile_field = m.MkFunc("$is_volatile_field", 1);
+ f_type_project_0 = m.MkFunc("$type_project_0", 1);
+ f_array = m.MkFunc("$array", 2);
+ f_blob_type = m.MkFunc("$blob_type", 1);
+ f_array_emb = m.MkFunc("$array_emb", 2);
+ f_addr = m.MkFunc("$addr", 1);
+ f_base = m.MkFunc("$base", 1);
+ f_prim_emb = m.MkFunc("$prim_emb", 1);
+ f_address_root = m.MkFunc("$address_root", 2);
+ f_field_arr_index = m.MkFunc("$field_arr_index", 1);
+ f_field_arr_size = m.MkFunc("$field_arr_size", 1);
+ f_field_arr_root = m.MkFunc("$field_arr_root", 1);
+
+ tp_bool = m.GetFunc("^^bool").GetConstant();
+ tp_mathint = m.GetFunc("^^mathint").GetConstant();
+ tp_object = m.GetFunc("^^object").GetConstant();
+ tp_state = m.GetFunc("^$#state_t").GetConstant();
+ tp_ptrset = m.GetFunc("^$#ptrset").GetConstant();
+
+ tp_heaptp = m.MkFunc("$heap_type", 0).GetConstant();
+
+ elt_me = m.GetFunc("$me").GetConstant();
+ elt_null = m.GetFunc("$null").GetConstant();
+
+ literalName[elt_me] = "\\me";
+ literalName[elt_null] = "NULL";
+ foreach (var tpl in f_phys_ptr_cast.Apps) {
+ if (tpl.Args[0] == elt_null)
+ literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "*)NULL";
+ }
+ foreach (var tpl in f_spec_ptr_cast.Apps) {
+ if (tpl.Args[0] == elt_null)
+ literalName[tpl.Result] = "(" + TypeName(tpl.Args[1]) + "^)NULL";
+ }
+ foreach (var fn in model.Functions) {
+ if (fn.Arity == 0 && fn.Name.StartsWith("l#"))
+ literalName[fn.GetConstant()] = ":" + fn.Name.Substring(2);
+ }
+
+ DecodeFileNames();
+ ComputeLocalVariableNames();
+
+ foreach (var s in m.States) {
+ var sn = new StateNode(this, s);
+ sn.SetupVars();
+ states.Add(sn);
+ }
+
+ var allStates = states.ToArray();
+ if (allStates.Length == 1 && allStates[0].vars.Count == 0) {
+ throw new Exception("This VCC model doesn't contain any variables. Was it saved with the -bvd option?");
+ }
+ states.Clear();
+ var i = 0;
+ while (i < allStates.Length) {
+ var lastGoodName = allStates[i].State.Name;
+
+ var userVars = new HashSet<string>(allStates[i].State.Variables.Where(localVariableNames.ContainsKey));
+ i++;
+ while (i < allStates.Length) {
+ foreach (var v in allStates[i].State.Variables) {
+ if (v == "$s" || userVars.Contains(v)) goto stop;
+ if (localVariableNames.ContainsKey(v))
+ userVars.Add(v);
+ }
+
+ var curName = TryParseSourceLocation(allStates[i].State.Name);
+ if (!IsBadName(curName))
+ lastGoodName = allStates[i].State.Name;
+ i++;
+ }
+
+ stop:
+
+ var lastState = allStates[i - 1];
+ lastState.capturedStateName = lastGoodName;
+ lastState.index = states.Count;
+ states.Add(lastState);
+ lastState.SetupVars();
+ }
+
+ foreach (var s in states) {
+ var elt = s.State.TryGet("$s");
+ if (elt != null)
+ literalName[elt] = "\\state'" + s.index;
+ }
+
+ GenerateSourceLocations(states);
+ }
+
+
+ bool IsBadName(SourceLocation l)
+ {
+ return l == null || l.Filename.StartsWith("<");
+ }
+
+ private void ComputeLocalVariableNames()
+ {
+ var vars = model.States.SelectMany(s => s.Variables).Where(v => v != null).Distinct();
+ Func<string, string> simpleName = s => { string dummy; return GetUserVariableNameCore(s, out dummy); };
+ var userVars = vars.Where(s => simpleName(s) != null);
+ var conflictsName = Conflicts(userVars, simpleName).ToArray();
+ Func<string, string> qName = s => { string kind, n = GetUserVariableNameCore(s, out kind); return n + " (" + kind + ")"; };
+ var conflictsKind = Conflicts(conflictsName, qName).ToArray();
+
+ var conflictsNameH = new HashSet<string>(conflictsName);
+ var conflictsKindH = new HashSet<string>(conflictsKind);
+
+ foreach (var v in userVars) {
+ if (conflictsKindH.Contains(v)) continue;
+ if (conflictsNameH.Contains(v))
+ localVariableNames[v] = qName(v);
+ else
+ localVariableNames[v] = simpleName(v);
+ }
+
+ var idx = 0;
+ foreach (var v in conflictsKind) {
+ localVariableNames[v] = string.Format("{0} #{1}", qName(v), idx++);
+ }
+ }
+
+ static IEnumerable<A> Conflicts<A, B>(IEnumerable<A> input, Func<A, B> f)
+ {
+ var revMap = new Dictionary<B, A>();
+ var reported = new HashSet<A>();
+
+ foreach (var k in input) {
+ if (reported.Contains(k)) continue;
+ var v = f(k);
+ A tmp;
+ if (revMap.TryGetValue(v, out tmp) && !tmp.Equals(k)) {
+ if (!reported.Contains(tmp)) {
+ yield return tmp;
+ reported.Add(tmp);
+ }
+ yield return k;
+ reported.Add(k);
+ } else {
+ revMap[v] = k;
+ }
+ }
+ }
+
+ #region Function name scoring
+ static string[][] prefixes = new string[][] {
+ new string[] { "F#", "$eq.$map", "Q#", },
+ new string[] { "F#lambda", },
+ new string[] { "$int_to_", "lambda@", "distinct-aux-f", "Select_","Store_", "$select.", "$store.", },
+ };
+
+ static string[][] totals = new string[][] {
+ new string[] {
+ "$current_timestamp",
+ "$full_stop", "$function_entry", "$ptr_to_i4",
+ "$ptr_to_i8", "$ptr_to_u4", "$ptr_to_u8",
+ "$span", "$sizeof", "$in_domain",
+ "$inv2",
+ "$is_claimable",
+ "$set_cardinality", "$set_difference", "$set_union",
+ "$thread_local", "$unchecked", "$writes_at",
+ "$array_range", "$arrays_disjoint",
+ "$byte_ptr_subtraction",
+ },
+
+ new string[] {
+ "$addr", "$dot", "$emb0", "$fetch_from_domain", "$in_range_phys_ptr",
+ "$in_range_spec_ptr", "$is_sequential_field", "$is_volatile_field",
+ "$is_ghost_field", "$is_phys_field", "$is_math_type", "$invok_state",
+ "$is_primitive",
+ "$spec_ptr_cast",
+ "$phys_ptr_cast",
+ "$is_null",
+ "$in_domain_lab",
+ "$inv_lab",
+ "$set_in0",
+ },
+
+ new string[] {
+ "$_pow2", "$as_composite_field", "$as_field_with_type", "$as_in_range_t",
+ "$as_primitive_field", "$base", "$call_transition", "tickleBool", "Ctor",
+ "$mv_state", "$field", "$field_arr_root", "$field_kind", "$field_offset",
+ "$field_parent_type", "$field_type", "$file_name_is", "$good_state",
+ "$good_state_ext", "$function_arg_type", "$has_field_at0", "$map_domain",
+ "$map_range", "$map_t", "$ptr_to", "$ptr_to_i1", "$ptr_to_i2",
+ "$ptr_to_u1", "$ptr_to_u2", "$is_unwrapped", "$is_unwrapped_dynamic",
+ "$heap", "$closed", "$owner", "$owns", "$modifies", "$post_unwrap",
+ "$pow2", "$pre_unwrap", "$ptr", "$is", "$in_range_t", "$roots",
+ "$timestamp", "$type_branch", "$type_code_is", "$type_project_0",
+ "$typemap", "$set_in_pos", "$updated_owns", "$ver_domain", "$vs_state",
+ "$set_singleton",
+ "$f_owner", "$f_closed", "$f_timestamps",
+ "$local_value_is",
+ "$field_arr_ctor",
+ "$idx",
+ },
+ };
+
+ string[] state_props = new string[] { };
+
+ Dictionary<string, int> functionScores = new Dictionary<string, int>();
+
+ int FunctionScore(string name)
+ {
+ if (functionScores.Count == 0) {
+ for (int i = 0; i < totals.Length; ++i)
+ foreach (var s in totals[i])
+ functionScores[s] = i;
+ }
+
+ int res;
+ if (functionScores.TryGetValue(name, out res))
+ return res;
+
+ res = -1;
+ if (name[0] == '$' && name.EndsWith("_to_int"))
+ res = 1;
+ else if (name.EndsWith("#frame"))
+ res = 2;
+ else if (name.Contains("#limited#"))
+ res = 2;
+ else {
+ for (int i = 0; i < prefixes.Length; ++i)
+ foreach (var p in prefixes[i])
+ if (name.StartsWith(p)) {
+ res = i;
+ //goto stop;
+ }
+ //stop: ;
+ }
+
+ if (res == -1)
+ res = 1; // default
+
+ functionScores[name] = res;
+ return res;
+ }
+ #endregion
+
+ private void DecodeFileNames()
+ {
+ var fis = model.GetFunc("$file_name_is");
+ foreach (var f in model.Functions) {
+ if (f.Arity == 0 && f.Name.StartsWith("#file^")) {
+ var sb = new StringBuilder();
+ var idx = 6;
+ var name = f.Name;
+ while (idx < name.Length) {
+ if (name[idx] == '?') {
+ var c = (char)Int32.Parse(name.Substring(idx + 1, 2), System.Globalization.NumberStyles.HexNumber);
+ sb.Append(c);
+ idx += 3;
+ } else {
+ sb.Append(name[idx++]);
+ }
+ }
+ name = sb.ToString();
+
+ foreach (var app in fis.AppsWithArg(1, f.GetConstant()))
+ fileNameMapping[app.Args[0].AsInt()] = name;
+ }
+ }
+ }
+
+ private Model.Element DecodeDT(string dt)
+ {
+ if (dt.StartsWith("dt")) {
+ var tpName = dt.Replace("dt", "#distTp");
+ var f = model.TryGetFunc(tpName);
+ if (f != null) {
+ return f.GetConstant();
+ //var res = f_type_project_0.TryEval(ptr);
+ //if (res != null)
+ // tp = res;
+ }
+ }
+ return null;
+ }
+
+ private string DecodeToken(string name, ref Model.Element tp)
+ {
+ var idx = name.LastIndexOf("$");
+ if (idx < 0) return null;
+ var words = name.Substring(idx + 1).Split('.', '^', '!', '#', '@');
+ if (words.Length > 3)
+ tp = DecodeDT(words[3]);
+ return string.Format("{0}({1},{2})", fileNameMapping[int.Parse(words[0])], words[1], words[2]);
+ }
+
+ public string GetUserVariableName(string name)
+ {
+ string res;
+ localVariableNames.TryGetValue(name, out res);
+ return res;
+ }
+
+
+ string GetUserVariableNameCore(string name, out string kind)
+ {
+ if (name.StartsWith("L#")) {
+ kind = "local";
+ return name.Substring(2);
+ }
+
+ if (name.StartsWith("P#")) {
+ kind = "in-param";
+ return name.Substring(2);
+ }
+
+ if (name.StartsWith("OP#")) {
+ kind = "out-param";
+ return name.Substring(3);
+ }
+
+ if (name.StartsWith("SL#")) {
+ kind = "spec local";
+ return name.Substring(3);
+ }
+
+ if (name.StartsWith("SP#")) {
+ kind = "spec in-param";
+ return name.Substring(3);
+ }
+
+ if (name.StartsWith("local.")) {
+ kind = "param copied to local";
+ return name.Substring(6);
+ }
+
+ if (name.StartsWith("addr.")) {
+ kind = "stack-allocated struct";
+ return name.Substring(5);
+ }
+
+ if (name == "$result") {
+ kind = "function return value";
+ return "\\result";
+ }
+
+ if (name.StartsWith("res__") && viewOpts.ViewLevel >= 1) {
+ kind = "call result";
+ return name;
+ }
+
+ if (name == "$s" && viewOpts.ViewLevel >= 1) {
+ kind = "current state";
+ return "\\now";
+ }
+
+ kind = null;
+ return null;
+ }
+
+
+ private string LiteralName(Model.Element elt)
+ {
+ string r;
+
+ if (literalName.TryGetValue(elt, out r))
+ return r;
+
+ r = TryTypeName(elt);
+ if (r != null) {
+ literalName[elt] = r;
+ return r;
+ }
+
+ var i = elt as Model.Integer;
+ if (i != null)
+ return AsPow2(i);
+
+ var bv = elt as Model.BitVector;
+ if (bv != null)
+ return bv.Numeral + "bv" + bv.Size.ToString();
+
+ return null;
+ }
+
+ public Model.Element LocalType(string localName)
+ {
+ string dummy;
+ var v = GetUserVariableNameCore(localName, out dummy);
+ if (v == null) v = localName;
+ var c = model.TryGetFunc("#loc." + v);
+ if (c != null) {
+ var localIs = f_local_value_is.AppWithArg(2, c.GetConstant());
+ if (localIs != null)
+ return localIs.Args[4];
+ }
+ foreach (var s in model.States.Reverse()) {
+ var val = s.TryGet(localName);
+ var tp = GuessType(val);
+ if (tp != tp_mathint)
+ return tp;
+ }
+ return tp_mathint;
+ }
+
+ public Model.Element Image(Model.Element elt, Model.Func f)
+ {
+ var r = f.AppWithResult(elt);
+ if (r != null)
+ return r.Args[0];
+ return null;
+ }
+
+ string TypeNameCore(Model.Element elt)
+ {
+ var deref = Image(elt, f_ptr_to);
+ if (deref != null)
+ return TypeName(deref) + "*";
+ deref = Image(elt, f_spec_ptr_to);
+ if (deref != null)
+ return TypeName(deref) + "^";
+ deref = Image(elt, f_blob_type);
+ if (deref != null)
+ return "_(blob " + CanonicalName(deref) + ")";
+ var mapt = f_map_t.AppWithResult(elt);
+ if (mapt != null)
+ return string.Format("{1}[{0}]", TypeName(mapt.Args[0]), TypeName(mapt.Args[1]));
+
+ var arr = f_array.AppWithResult(elt);
+ if (arr != null) {
+ return string.Format("{0}[{1}]", TypeName(arr.Args[0]), arr.Args[1].ToString());
+ }
+
+ foreach (var app in elt.Names)
+ if (app.Func.Arity == 0 && app.Func.Name.StartsWith("^")) {
+ var n = app.Func.Name.Substring(1);
+ switch (n) {
+ case "^i1": return "int8_t";
+ case "^u1": return "uint8_t";
+ case "^i2": return "int16_t";
+ case "^u2": return "uint16_t";
+ case "^i4": return "int32_t";
+ case "^u4": return "uint32_t";
+ case "^i8": return "int64_t";
+ case "^u8": return "uint64_t";
+ case "^bool": return "bool";
+ default:
+ var pref = "_vcc_math_type_";
+ if (n.StartsWith(pref)) n = n.Substring(pref.Length);
+ return n;
+ }
+ }
+
+ return null;
+ }
+
+ public string TypeName(Model.Element elt)
+ {
+ var r = TryTypeName(elt);
+ if (r == null)
+ return elt.ToString();
+ else return r;
+ }
+
+ public string TryTypeName(Model.Element elt)
+ {
+ string res;
+ if (!typeName.TryGetValue(elt, out res)) {
+ typeName[elt] = elt.ToString(); // avoid infinite recursion
+ res = TypeNameCore(elt);
+ typeName[elt] = res;
+ }
+ return res;
+ }
+
+ public static readonly string[] synthethic_fields = new string[] { "$f_owns", "$f_ref_cnt", "$f_vol_version", "$f_root", "$f_group_root", "$f_active_option" };
+
+ public string ConstantFieldName(Model.Element elt)
+ {
+ string res;
+ IsConstantField(elt, out res);
+ return res;
+ }
+
+ public bool IsConstantField(Model.Element elt)
+ {
+ string dummy;
+ return IsConstantField(elt, out dummy);
+ }
+
+ public bool IsConstantField(Model.Element elt, out string theName)
+ {
+ var bestScore = int.MinValue;
+ string bestName = null;
+
+ foreach (var t in elt.Names) {
+ var score = int.MinValue;
+ string name = null;
+ if (t.Args.Length == 0) {
+ name = t.Func.Name;
+ score = 0;
+ var dotIdx = name.IndexOf('.');
+ if (dotIdx > 0) {
+ score += 10;
+ name = name.Substring(dotIdx + 1);
+ }
+ if (name.Contains('#')) score -= 1;
+ } else if (t.Func.Name.StartsWith("$f_") && synthethic_fields.Contains(t.Func.Name)) {
+ name = string.Format("{0}<{1}>", t.Func.Name.Substring(3).Replace("root", "alloc_root"), TypeName(t.Args[0]));
+ score = 6;
+ } else if (t.Func == f_array_emb) {
+ name = string.Format("[0] (of {0}[{1}])", TypeName(t.Args[0]), t.Args[1].ToString());
+ score = 5;
+ }
+ if (score > bestScore) {
+ bestScore = score;
+ bestName = name;
+ }
+ }
+
+ theName = bestName;
+ return bestScore >= 5;
+ }
+
+ bool IsSomeState(Model.Element elt)
+ {
+ var tp = GuessType(elt);
+ return tp == tp_state || tp == tp_heaptp;
+ }
+
+ bool IsThisState(Model.Element st, Model.Element elt)
+ {
+ return elt == st || elt == f_heap.TryEval(st);
+ }
+
+ Model.Element GuessType(Model.Element element)
+ {
+ Model.Element res;
+ if (!guessedType.TryGetValue(element, out res)) {
+ res = GuessTypeCore(element);
+ guessedType[element] = res;
+ }
+ return res;
+ }
+
+ Model.Element GuessTypeCore(Model.Element element)
+ {
+ if (element is Model.Boolean)
+ return tp_bool;
+
+ var fld = f_field.TryEval(element);
+ if (fld != null) {
+ var tp = f_field_type.TryEval(fld);
+ if (tp != null) {
+ var ptp = f_ptr_to.TryEval(tp);
+ if (ptp != null)
+ return ptp;
+ ptp = f_spec_ptr_to.TryEval(tp);
+ if (ptp != null)
+ return ptp;
+ }
+ return tp_object;
+ }
+
+ foreach (var tpl in element.References) {
+ if (element == tpl.Result) {
+ if (tpl.Func == f_ptr)
+ return tp_object;
+ if (tpl.Func == f_heap)
+ return tp_heaptp;
+ }
+
+ if (tpl.Args.Length >= 1 && tpl.Args[0] == element) {
+ if (tpl.Func == f_heap || tpl.Func == f_closed || tpl.Func == f_good_state)
+ return tp_state;
+ }
+
+ if (tpl.Func == f_select_bool)
+ if (tpl.Args[0] == element)
+ return tp_ptrset;
+ else if (tpl.Args[1] == element)
+ return tp_object;
+
+ var fname = tpl.Func.Name;
+
+ if (tpl.Args.Length == 2 && tpl.Args[0] == element && fname.StartsWith("$select.$map_t")) {
+ var mt = model.TryGetFunc("MT#" + fname);
+ if (mt != null && mt.Arity == 0)
+ return mt.GetConstant();
+ var t1 = GuessType(tpl.Args[1]);
+ var t2 = GuessType(tpl.Result);
+ var t = f_map_t.TryEval(t1, t2);
+ if (t != null)
+ return t;
+ }
+
+ var tpName = DataTypeName(element, tpl);
+ if (tpName != null) {
+ var tp = model.TryGetFunc("^$#" + tpName);
+ if (tp != null)
+ return tp.GetConstant();
+ }
+ }
+
+ return tp_mathint;
+ }
+
+ string DataTypeName(Model.Element elt, Model.FuncTuple tpl)
+ {
+ var fname = tpl.Func.Name;
+ if (tpl.Args.Length == 1 && tpl.Args[0] == elt && fname.StartsWith("RF#")) {
+ var fldName = tpl.Func.Name.Substring(3);
+ var idx = fldName.LastIndexOf('.');
+ if (idx > 0) {
+ return fldName.Substring(0, idx).Replace("_vcc_math_type_", "");
+ }
+ }
+
+ if (tpl.Args.Length == 1 && tpl.Args[0] == elt && (fname.StartsWith("DSZ#") || fname.StartsWith("RSZ#") || fname.StartsWith("DGH#"))) {
+ return fname.Substring(4).Replace("_vcc_math_type_", "");
+ }
+ return null;
+ }
+
+ public DataKind GetKind(Model.Element tp, out Model.FuncTuple tpl)
+ {
+ tpl = null;
+
+ if (tp == tp_object)
+ return DataKind.Object;
+ else if (tp == tp_ptrset)
+ return DataKind.Ptrset;
+
+ tpl = f_ptr_to.AppWithResult(tp);
+ if (tpl != null) return DataKind.PhysPtr;
+ tpl = f_spec_ptr_to.AppWithResult(tp);
+ if (tpl != null) return DataKind.SpecPtr;
+ tpl = f_map_t.AppWithResult(tp);
+ if (tpl != null) return DataKind.Map;
+
+ return DataKind.Flat;
+ }
+
+ public DataKind GetKind(Model.Element tp)
+ {
+ Model.FuncTuple dummy;
+ return GetKind(tp, out dummy);
+ }
+
+
+ public Model.Element WrapForUse(Model.Element elt, Model.Element tp)
+ {
+ Model.FuncTuple tpl;
+ var kind = GetKind(tp, out tpl);
+
+ if (kind == DataKind.Flat) {
+ if (elt.Kind == Model.ElementKind.Integer) {
+ var tpname = TypeName(tp);
+ if(tpname.StartsWith("$")) tpname = tpname.Substring(1);
+ if (tpname.StartsWith("#")) {
+ foreach (var tupl in elt.References) {
+ if (tupl.Args.Length == 1 && tupl.Args[0] == elt && tupl.Func.Name.StartsWith("$int_to_") && tupl.Func.Name.EndsWith(tpname)) {
+ return tupl.Result;
+ }
+ }
+ }
+ }
+ return elt;
+ }
+
+ if (kind == DataKind.Map) {
+ if (elt.Kind == Model.ElementKind.Integer) {
+ Model.Element theMap = null;
+ foreach (var conv in model.Functions)
+ // really, we should reconstruct the name of this function, but this is painful
+ if (conv.Arity == 1 && conv.Name.StartsWith("$int_to_map_t")) {
+ var app = conv.AppWithArg(0, elt);
+ if (app != null) {
+ theMap = app.Result;
+ break;
+ }
+ }
+ if (theMap == null) return elt;
+ return theMap;
+ }
+ return elt;
+ } else if (kind == DataKind.Ptrset) {
+ var tmp = f_int_to_ptrset.TryEval(elt);
+ if (tmp != null)
+ return tmp;
+ return elt;
+ }
+
+ if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) {
+ if (elt.Kind == Model.ElementKind.Integer) {
+ var tmp = f_int_to_ptr.TryEval(elt);
+ if (tmp != null)
+ elt = tmp;
+ }
+ }
+
+ if (kind == DataKind.Object)
+ return elt;
+
+ if (kind == DataKind.PhysPtr)
+ return Util.OrElse(f_phys_ptr_cast.TryEval(elt, tpl.Args[0]), elt);
+
+ if (kind == DataKind.SpecPtr)
+ return Util.OrElse(f_spec_ptr_cast.TryEval(elt, tpl.Args[0]), elt);
+
+ Util.Assert(false);
+ return elt;
+ }
+
+ void AddSpecialField(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func select_map)
+ {
+ if (elt == null) return;
+
+ var map = state.State.TryGet("$s");
+ if (map != null)
+ map = select_map.TryEval(map);
+ if (map != null) {
+ var model = elt.Model;
+ Model.Element val = f_select_bool.TryEval(map, elt);
+ Model.Element tp = tp_bool;
+ if (val == null) {
+ val = f_select_ptr.TryEval(map, elt);
+ tp = tp_object;
+ }
+ if (val == null) {
+ val = f_select_int.TryEval(map, elt);
+ tp = tp_mathint;
+ }
+ if (val != null) {
+ res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty });
+ }
+ }
+ }
+
+ void AddPointerFunction(StateNode state, Model.Element elt, List<ElementNode> res, string name, Model.Func fn, Model.Element tp)
+ {
+ if (elt == null) return;
+
+ var val = fn.TryEval(elt);
+ if (val != null) {
+ res.Add(new FieldNode(state, new EdgeName(name), val, tp) { Category = NodeCategory.MethodologyProperty });
+ }
+ }
+
+ void AddPtrType(StateNode state, Model.Element elt, List<ElementNode> res)
+ {
+ var f = f_field.TryEval(elt);
+ if (f == null) return;
+
+ var tp = f_field_type.TryEval(f);
+
+ var seq = "";
+
+ var is_seq = f_is_sequential_field.TryEval(f) as Model.Boolean;
+ var is_vol = f_is_volatile_field.TryEval(f) as Model.Boolean;
+
+ if (is_seq != null && is_vol != null && is_seq.Value == is_vol.Value) {
+ seq = " (volatile/sequential mismatch)";
+ } else if ((is_seq != null && is_seq.Value) || (is_vol != null && !is_vol.Value)) {
+ seq = " (sequential)";
+ } else if ((is_seq != null && !is_seq.Value) || (is_vol != null && is_vol.Value)) {
+ seq = " (volatile)";
+ }
+
+ if (tp != null || seq != "") {
+ res.Add(new FieldNode(state, new EdgeName("\\typeof" + seq), tp, tp_mathint) { Category = NodeCategory.MethodologyProperty });
+ }
+ }
+
+ string SkolemName(Model.Func f, ref Model.Element tp)
+ {
+ if (f.Name.IndexOf('!') > 0) {
+ var tok = DecodeToken(f.Name, ref tp);
+ if (tok != null) {
+ var baseName = f.Name.Substring(0, f.Name.LastIndexOf('$'));
+ if (baseName.StartsWith("Q#"))
+ baseName = baseName.Substring(2);
+ return string.Format("{0}@{1}", baseName, ShortenToken(tok, 10, false));
+ }
+ }
+ return null;
+ }
+
+ string GlobalName(Model.Func f, ref Model.Element tp)
+ {
+ if (f.Name.StartsWith("G#")) {
+ var idx = f.Name.LastIndexOf("#dt");
+ if (idx < 0) return null;
+ var name = f.Name.Substring(2, idx - 2);
+ tp = DecodeDT(f.Name.Substring(idx + 1));
+ return string.Format("::{0}", name);
+ }
+ return null;
+ }
+
+
+ public IEnumerable<ElementNode> CommonNodes(StateNode state)
+ {
+ var skolems = new List<ElementNode>();
+
+ Model.Element tp = null;
+
+ foreach (var f in model.Functions) {
+ if (f.Arity != 0) continue;
+ var s = SkolemName(f, ref tp);
+ if (s == null)
+ s = GlobalName(f, ref tp);
+ if (s != null) {
+ if (tp == null)
+ tp = GuessType(f.GetConstant());
+ var val = WrapForUse(f.GetConstant(), tp);
+ skolems.Add(new VariableNode(state, s, val, tp));
+ }
+ }
+
+ return skolems;
+ }
+
+ private Model.Element GuessPtrTo(Model.Element tp)
+ {
+ var p = f_ptr_to.TryEval(tp);
+ if (p != null) return p;
+ p = f_spec_ptr_to.TryEval(tp);
+ if (p != null) return p;
+ var nm = model.MkFunc("*ptrto_" + TypeName(tp), 0).GetConstant();
+ f_ptr_to.AddApp(nm, tp);
+ return f_ptr_to.TryEval(tp);
+ }
+
+ private Model.Element PtrTo(Model.Element tp, Model.Func f_ptr_to)
+ {
+ var p = f_ptr_to.TryEval(tp);
+ if (p != null) return p;
+ var nm = model.MkFunc("*" + f_ptr_to.Name + "_" + TypeName(tp), 0).GetConstant();
+ f_ptr_to.AddApp(nm, tp);
+ return f_ptr_to.TryEval(tp);
+ }
+
+ private bool IsArrayField(Model.Element ptr)
+ {
+ return ptr != null && f_idx.TryEval(ptr, model.TryMkElement("0")) != null;
+ }
+
+ public IEnumerable<ElementNode> GetExpansion(StateNode state, Model.Element elt, Model.Element tp)
+ {
+ List<ElementNode> result = new List<ElementNode>();
+ Model.FuncTuple tpl;
+
+ if (elt == null) return result;
+
+ var kind = GetKind(tp, out tpl);
+ if (kind == DataKind.PhysPtr || kind == DataKind.SpecPtr || kind == DataKind.Object) {
+ var heap = state.State.TryGet("$s");
+ if (heap != null)
+ heap = f_heap.TryEval(heap);
+ var addresses = new HashSet<Model.Element>();
+
+ if (heap != null) {
+ var basePtr = f_base.TryEval(elt);
+ foreach (var fld in f_select_field.AppsWithArg(0, heap)) {
+ var val = f_select_value.TryEval(fld.Result, elt);
+ if (val != null) {
+ var field = fld.Args[1];
+ if (!IsConstantField(field) && viewOpts.ViewLevel <= 2)
+ continue;
+ var addr = f_dot.TryEval(elt, field);
+ if (addr != null) addresses.Add(addr);
+ var node = ComputeUnionActiveOption(state, elt, val, field);
+ if (node != null)
+ result.Add(node);
+ else
+ BuildFieldNode(result, state, addr, field, val, addr);
+ }
+ }
+ //result.Sort(CompareFields);
+ }
+
+ {
+ foreach (var app in f_idx.AppsWithArg(0, elt)) {
+ var addr = app.Result;
+ Model.Element val = null, atp = tp;
+
+ addresses.Add(addr);
+
+ foreach (var papp in f_dot.AppsWithResult(addr)) {
+ var tmp = f_select_value.OptEval(f_select_field.OptEval(heap, papp.Args[1]), papp.Args[0]);
+ if (tmp != null) {
+ val = tmp;
+ var tt = f_field_type.TryEval(papp.Args[1]);
+ if (tt != null) atp = tt;
+ }
+ }
+
+ if (val != null)
+ val = WrapForUse(val, atp);
+ result.Add(new MapletNode(state, new EdgeName(this, "[%0]", app.Args[1]), val, atp) { Category = NodeCategory.Maplet });
+ if (addr != null)
+ result.Add(new MapletNode(state, new EdgeName(this, "&[%0]", app.Args[1]), addr, GuessPtrTo(atp)) { Category = NodeCategory.Maplet });
+ }
+ }
+
+ foreach (var ptr in f_dot.AppsWithArg(0, elt)) {
+ if (addresses.Contains(ptr.Result)) continue;
+ var fld = ptr.Args[1];
+ var idx = f_field_arr_index.TryEval(fld);
+ if (idx != null) {
+ var xtp = f_field_type.TryEval(fld);
+ result.Add(new MapletNode(state, new EdgeName(this, "&[%0] of %1", idx, f_field_arr_size.TryEval(fld)), ptr.Result, GuessPtrTo(xtp)) { Category = NodeCategory.Maplet });
+ }
+ if (!IsConstantField(ptr.Args[1])) continue;
+ BuildFieldNode(result, state, ptr.Result, ptr.Args[1], null, ptr.Result);
+ }
+
+ AddSpecialField(state, elt, result, "\\closed", f_closed);
+ AddSpecialField(state, elt, result, "\\owner", f_owners);
+ AddSpecialField(state, elt, result, "\\root", f_roots);
+ AddSpecialField(state, elt, result, "\\timestamp", f_timestamps);
+ AddPointerFunction(state, elt, result, "\\embedding", f_prim_emb, tp_object);
+ AddPointerFunction(state, elt, result, "\\addr", f_addr, tp_mathint);
+
+ if (viewOpts.ViewLevel >= 1) {
+ AddPtrType(state, elt, result);
+ AddCasts(state, elt, result);
+ var sets = new SetsNode(state, elt);
+ if (!sets.IsEmpty)
+ result.Add(sets);
+ }
+
+ } else if (kind == DataKind.Map) {
+ var elTp = tpl.Args[1];
+ foreach (var sel in model.Functions)
+ if (sel.Arity == 2 && sel.Name.StartsWith("$select.$map_t")) {
+ foreach (var app in sel.AppsWithArg(0, elt)) {
+ var val = WrapForUse(app.Result, elTp);
+ var edgname = new EdgeName(this, "[%0]", app.Args[1]);
+ result.Add(new MapletNode(state, edgname, val, elTp) { Category = NodeCategory.Maplet });
+ }
+ }
+ } else if (kind == DataKind.Ptrset) {
+ foreach (var sel in f_select_bool.AppsWithArg(0, elt)) {
+ var edgname = new EdgeName(this, "[%0]", sel.Args[1]);
+ result.Add(new MapletNode(state, edgname, sel.Result, tp_bool) { Category = NodeCategory.Maplet });
+ }
+ } else if (kind == DataKind.Flat) {
+ foreach (var tupl in elt.References) {
+ if (tupl.Args.Length == 1 && tupl.Args[0] == elt) {
+ var fname = tupl.Func.Name;
+ var idx = fname.LastIndexOf('.');
+ if (fname.StartsWith("RF#") && idx > 0) {
+ fname = fname.Substring(idx + 1);
+ } else if (fname.StartsWith("DP#p")) {
+ fname = fname.Substring(4);
+ idx = fname.IndexOf('#');
+ if (idx > 0)
+ fname = fname.Substring(idx + 1) + "#" + fname.Substring(0, idx);
+ } else {
+ fname = null;
+ }
+
+ if (fname != null)
+ result.Add(new FieldNode(state, new EdgeName(fname), tupl.Result, GuessType(tupl.Result)) { Category = NodeCategory.SpecField });
+ }
+ }
+ }
+
+ if (!(elt is Model.Boolean)) {
+ var curState = state.State.TryGet("$s");
+
+ foreach (var tupl in elt.References) {
+ {
+ var seenSelf = false;
+ var seenState = false;
+ var seenThisState = false;
+ var args = tupl.Args;
+ for (int i = 0; i < args.Length; ++i) {
+ if (args[i] == elt) seenSelf = true;
+ if (IsThisState(curState, args[i])) seenThisState = true;
+ else if (IsSomeState(args[i])) seenState = true;
+ }
+ if (!seenSelf) continue; // not looking for aliases (maybe we should?)
+ if (seenState && !seenThisState) continue;
+ }
+
+ var argsFmt = new StringBuilder();
+ var name = tupl.Func.Name;
+
+ var score = FunctionScore(name);
+ if (score >= viewOpts.ViewLevel)
+ continue;
+
+ var retTp = GuessType(tupl.Result);
+ var retVal = tupl.Result;
+
+ var cat = NodeCategory.MethodologyProperty;
+ if (name.StartsWith("F#")) {
+ name = name.Substring(2);
+ cat = NodeCategory.UserFunction;
+ }
+
+ if (name.StartsWith("DF#")) {
+ name = name.Substring(3);
+ cat = NodeCategory.UserFunction;
+ }
+
+ if (name.StartsWith("$eq.$"))
+ name = "EQ";
+
+ {
+ Model.Element sktp = null;
+ var sk = SkolemName(tupl.Func, ref sktp);
+ if (sk != null) {
+ name = sk;
+ if (sktp != null)
+ retVal = WrapForUse(tupl.Result, sktp);
+ cat = NodeCategory.Maplet;
+ }
+ }
+
+ {
+ argsFmt.Append(name).Append("(");
+ var args = new List<Model.Element>();
+ foreach (var a in tupl.Args) {
+ if (IsThisState(curState, a))
+ argsFmt.Append("\\now, ");
+ else if (a == elt)
+ argsFmt.Append(selfMarker + ", ");
+ else {
+ argsFmt.AppendFormat("%{0}, ", args.Count);
+ args.Add(a);
+ }
+ }
+ argsFmt.Length -= 2;
+ argsFmt.Append(")");
+ var edgeName = new EdgeName(this, argsFmt.ToString(), args.ToArray());
+ result.Add(new MapletNode(state, edgeName, retVal, retTp) { ViewLevel = score, Category = cat });
+ }
+
+ }
+ }
+
+ return result;
+ }
+
+ private FieldNode ComputeUnionActiveOption(StateNode state, Model.Element elt, Model.Element val, Model.Element field)
+ {
+ if (f_active_option.AppsWithResult(field).FirstOrDefault() != null) {
+ var activeOpt = f_dot.OptEval(elt, f_int_to_field.OptEval(val));
+ if (activeOpt != null) {
+ var nm = ConstantFieldName(field);
+ var fieldNode = new FieldNode(state, new EdgeName(nm), activeOpt, GuessType(activeOpt)) { Category = NodeCategory.MethodologyProperty };
+ return fieldNode;
+ }
+ }
+ return null;
+ }
+
+ private void AddCasts(StateNode state, Model.Element elt, List<ElementNode> result)
+ {
+ foreach (var app in f_phys_ptr_cast.AppsWithArg(0, elt)) {
+ if (app.Result != elt)
+ result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "*)..."), app.Result, PtrTo(app.Args[1], f_ptr_to)));
+ }
+ foreach (var app in f_spec_ptr_cast.AppsWithArg(0, elt)) {
+ if (app.Result != elt)
+ result.Add(new MapletNode(state, new EdgeName(this, "(" + TypeName(app.Args[1]) + "^)..."), app.Result, PtrTo(app.Args[1], f_spec_ptr_to)));
+ }
+ var addr = f_addr.TryEval(elt);
+ if (addr != null) {
+ foreach (var app in f_blob_type.Apps) {
+ var blob = f_address_root.TryEval(addr, app.Result);
+ if (blob != null) {
+ result.Add(new MapletNode(state, new EdgeName(this, TypeName(app.Result) + "..."), blob, app.Result));
+ }
+ }
+ }
+ }
+
+ private void BuildFieldNode(List<ElementNode> result, StateNode state, Model.Element ptr, Model.Element field, Model.Element val, Model.Element addr)
+ {
+ var ftp = f_field_type.TryEval(field);
+ if (val != null)
+ val = WrapForUse(val, ftp);
+
+ if (IsArrayField(ptr)) {
+ val = addr;
+ addr = null;
+ ftp = GuessPtrTo(ftp);
+ }
+
+ var nm = ConstantFieldName(field);
+ var edgname = nm == null ? field.ToString() : nm;
+
+ var cat = NodeCategory.PhysField;
+ if (f_is_ghost_field.IsTrue(field))
+ cat = NodeCategory.SpecField;
+ if (nm != null && nm.Contains("<"))
+ cat = NodeCategory.MethodologyProperty;
+
+ var fieldNode = new FieldNode(state, new EdgeName(edgname), val, ftp) { Category = cat};
+ result.Add(fieldNode);
+
+ if (addr != null) {
+ result.Add(new FieldNode(state, new EdgeName("&" + edgname), addr, GuessPtrTo(ftp)) { Category = cat });
+ }
+ }
+
+ public override IEnumerable<IState> States
+ {
+ get
+ {
+ return states;
+ }
+ }
+
+ private int DataTypeToString(StringBuilder sb, int level, Model.Element elt)
+ {
+ Model.FuncTuple ctor = null;
+ int len = 1;
+ string dataTypeType = null;
+ foreach (var app in elt.References) {
+ var n = app.Func.Name;
+ if (app.Result == elt && n.StartsWith("DF#")) {
+ ctor = app;
+ }
+ var tmp = DataTypeName(elt, app);
+ if (tmp != null) dataTypeType = tmp;
+ }
+
+ if (dataTypeType != null) {
+ if (ctor != null)
+ sb.Append(ctor.Func.Name.Substring(3));
+ else
+ sb.Append(DataTypeShortName(elt, dataTypeType));
+ if (ctor != null && ctor.Args.Length > 0) {
+ if (level <= 0) sb.Append("(...)");
+ else {
+ sb.Append("(");
+ for (int i = 0; i < ctor.Args.Length; ++i) {
+ if (i != 0) sb.Append(", ");
+ len += DataTypeToString(sb, level - 1, ctor.Args[i]);
+ }
+ sb.Append(")");
+ }
+ }
+ } else {
+ sb.Append(CanonicalName(elt));
+ }
+ return len;
+ }
+
+ private string DataTypeShortName(Model.Element elt, string tp)
+ {
+ var baseName = tp;
+
+ var hd = model.MkFunc("DGH#" + tp, 1).TryEval(elt);
+ if (hd != null) {
+ foreach (var nm in hd.References) {
+ if (nm.Func.Arity == 0 && nm.Func.Name.StartsWith("DH#"))
+ baseName = nm.Func.Name.Substring(3);
+ }
+ }
+
+ return baseName;
+ }
+
+ private string CanonicalBaseNameCore(string name, Model.Element elt, bool doDatatypes, ref NameSeqSuffix suff)
+ {
+ var vm = this;
+
+ if (name.Contains("[") || name.Contains("'"))
+ name = "";
+
+ if (name != "")
+ return name;
+
+ var isNull = false;
+ foreach (var tpl in elt.References) {
+ var fn = tpl.Func;
+ if (fn.Name.StartsWith("$select.$map_t") && fn.Arity == 2 && tpl.Args[0] == elt)
+ return "map";
+ if (fn.Name.StartsWith("$int_to_map_t") && tpl.Result == elt)
+ return "map";
+
+ if (fn.Arity >= 1 && tpl.Args[0] == elt) {
+ if (fn == f_select_bool)
+ return "ptrset";
+ }
+
+ if (tpl.Result == elt)
+ if (fn == f_int_to_version)
+ return "version";
+
+ if (fn == f_is_null && tpl.Result == model.True)
+ isNull = true;
+
+ var dtpName = DataTypeName(elt, tpl);
+ if (dtpName != null) {
+ var sb = new StringBuilder();
+ string prev = null;
+ datatypeLongName[elt] = "*SELF*"; // in case we recurse (but this shouldn't happen)
+ for (int lev = 0; lev < 10; lev++) {
+ sb.Length = 0;
+ var len = DataTypeToString(sb, lev, elt);
+ if (prev == null || len <= maxDatatypeNameLength)
+ prev = sb.ToString();
+ }
+
+ datatypeLongName[elt] = prev;
+ suff = NameSeqSuffix.WhenNonZero;
+ return prev;
+ }
+ }
+
+ var fld = vm.f_field.TryEval(elt);
+ if (fld != null) {
+ var tp = vm.f_field_type.TryEval(fld);
+ if (tp != null) {
+ var n = vm.TryTypeName(tp);
+ if (n != null) {
+ if (isNull)
+ return "(" + n + "*)NULL";
+ return n;
+ }
+ }
+ }
+
+ return "";
+ }
+
+ protected override string CanonicalBaseName(Model.Element elt, out NameSeqSuffix suff)
+ {
+ var lit = this.LiteralName(elt);
+ if (lit != null) {
+ suff = NameSeqSuffix.None;
+ return lit;
+ }
+ if (datatypeLongName.TryGetValue(elt, out lit)) {
+ suff = NameSeqSuffix.WhenNonZero;
+ return lit;
+ }
+
+ var name = base.CanonicalBaseName(elt, out suff);
+ name = CanonicalBaseNameCore(name, elt, true, ref suff);
+
+ return name;
+ }
+
+ public override string PathName(IEnumerable<IDisplayNode> path)
+ {
+ var sb = new StringBuilder();
+ foreach (var d in path) {
+ var name = d.Name;
+ if (name == "") continue; // can that happen?
+ if (name.Contains("(") && name.Contains(selfMarker)) {
+ var repl = name.Replace(selfMarker, sb.ToString());
+ sb.Length = 0;
+ sb.Append(repl);
+ } else {
+ if (sb.Length > 0 && name[0] != '[')
+ sb.Append("->");
+ sb.Append(d.Name);
+ }
+ }
+
+ return sb.ToString();
+ }
+ }
+
+ class StateNode : NamedState
+ {
+ internal VccModel vm;
+ internal List<VariableNode> vars;
+ internal List<ElementNode> commons;
+ internal int index;
+ internal string capturedStateName;
+
+ public StateNode(VccModel parent, Model.CapturedState s)
+ : base(s, parent)
+ {
+ this.capturedStateName = s.Name;
+ this.vm = parent;
+ }
+
+ internal void SetupVars()
+ {
+ if (vars != null) return;
+ vars = new List<VariableNode>();
+
+ var names = Util.Empty<string>();
+
+ if (vm.states.Count > 0) {
+ var prev = vm.states.Last();
+ names = prev.vars.Map(v => v.realName);
+ }
+
+ names = names.Concat(state.Variables).Distinct();
+
+ var curVars = state.Variables.ToDictionary(x => x);
+ foreach (var v in names) {
+ var localName = vm.GetUserVariableName(v);
+ if (localName != null) {
+ var tp = vm.LocalType(v);
+ var val = state.TryGet(v);
+ val = vm.WrapForUse(val, tp);
+ var vn = new VariableNode(this, v, val, tp) { ShortName = localName };
+ vn.updatedHere = vm.states.Count > 0 && curVars.ContainsKey(v);
+ if (curVars.ContainsKey(v))
+ vm.RegisterLocalValue(vn.Name, val);
+ vars.Add(vn);
+ }
+ }
+
+ vm.Flush(vars);
+
+ commons = new List<ElementNode>();
+ commons.AddRange(vm.CommonNodes(this));
+ }
+
+ public override IEnumerable<IDisplayNode> Nodes
+ {
+ get {
+ return vars.Concat(commons);
+ }
+ }
+
+ public override string CapturedStateName
+ {
+ get
+ {
+ return this.capturedStateName;
+ }
+ }
+ }
+
+ class ElementNode : DisplayNode
+ {
+ protected StateNode stateNode;
+ protected Model.Element tp;
+ protected VccModel vm { get { return stateNode.vm; } }
+
+ public ElementNode(StateNode st, EdgeName name, Model.Element elt, Model.Element tp)
+ : base(st.vm, name, elt)
+ {
+ this.stateNode = st;
+ this.tp = tp;
+ }
+
+ protected override void ComputeChildren()
+ {
+ children.AddRange(vm.GetExpansion(stateNode, element, tp));
+ }
+
+ public override string ToolTip
+ {
+ get
+ {
+ var sb = new StringBuilder();
+ if (tp != null)
+ sb.AppendFormat("Type: {0}\n", vm.TypeName(tp));
+ var i = element as Model.Integer;
+ if (i != null) {
+ var n = System.Numerics.BigInteger.Parse(i.Numeral);
+ sb.AppendFormat("Value: {0} (0x{1:x})\n", n, n);
+ } else if (element != null) {
+ sb.AppendFormat("Value: {0}\n", element);
+ }
+ return sb.ToString();
+ }
+ }
+ }
+
+ class SetsNode : ElementNode
+ {
+ List<Model.Element> refs = new List<Model.Element>();
+
+ public SetsNode(StateNode par, Model.Element elt)
+ : base(par, new EdgeName("\\in ..."), null, null)
+ {
+ children = new List<IDisplayNode>();
+ foreach (var app in vm.f_select_bool.AppsWithArg(1, elt)) {
+ children.Add(
+ new MapletNode(par, new EdgeName(vm, VccModel.selfMarker + " \\in %0", app.Args[0]), app.Result, vm.tp_bool) { Category = NodeCategory.MethodologyProperty });
+ refs.Add(app.Args[0]);
+ }
+ Category = NodeCategory.MethodologyProperty;
+ }
+
+ public override IEnumerable<Model.Element> References
+ {
+ get
+ {
+ return refs;
+ }
+ }
+
+ public bool IsEmpty { get { return children.Count == 0; } }
+ }
+
+
+ class FieldNode : ElementNode
+ {
+ public FieldNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp)
+ : base(par, realName, elt, tp)
+ {
+ }
+ }
+
+ class MapletNode : ElementNode
+ {
+ public MapletNode(StateNode par, EdgeName realName, Model.Element elt, Model.Element tp)
+ : base(par, realName, elt, tp)
+ {
+ }
+ }
+
+ class VariableNode : ElementNode
+ {
+ public bool updatedHere;
+ public string realName;
+
+ public VariableNode(StateNode par, string realName, Model.Element elt, Model.Element tp)
+ : base(par, new EdgeName(realName), elt, tp)
+ {
+ this.realName = realName;
+ }
+
+ public override string ShortName
+ {
+ set { this.name = new EdgeName(value); }
+ get { return this.name.ToString(); }
+ }
+ }
+}
diff --git a/Source/ParserHelper/ParserHelper.cs b/Source/ParserHelper/ParserHelper.cs
index 111b836b..81644b7f 100644
--- a/Source/ParserHelper/ParserHelper.cs
+++ b/Source/ParserHelper/ParserHelper.cs
@@ -1,244 +1,244 @@
-using System.Text;
-using System.Collections.Generic;
-using System.IO;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie {
-
- [Immutable]
- public interface IToken {
- int kind {
- get;
- set;
- } // token kind
- string filename {
- get;
- set;
- } // token file
- int pos {
- get;
- set;
- } // token position in the source text (starting at 0)
- int col {
- get;
- set;
- } // token column (starting at 0)
- int line {
- get;
- set;
- } // token line (starting at 1)
- string/*!*/ val {
- get;
- set;
- } // token value
-
- bool IsValid {
- get;
- }
- }
-
- [Immutable]
- public class Token : IToken {
- public int _kind; // token kind
- string _filename; // token file
- public int _pos; // token position in the source text (starting at 0)
- public int _col; // token column (starting at 1)
- public int _line; // token line (starting at 1)
- public string/*!*/ _val; // token value
- public Token next; // ML 2005-03-11 Tokens are kept in linked list
-
- public static readonly IToken/*!*/ NoToken = new Token();
-
- public Token() {
- this._val = "anything so that it is nonnull";
- }
- public Token(int linenum, int colnum)
- : base() {
- this._line = linenum;
- this._col = colnum;
- this._val = "anything so that it is nonnull";
- }
-
- public int kind {
- get {
- return this._kind;
- }
- set {
- this._kind = value;
- }
- }
-
- public string filename {
- get {
- return this._filename;
- }
- set {
- this._filename = value;
- }
- }
-
- public int pos {
- get {
- return this._pos;
- }
- set {
- this._pos = value;
- }
- }
-
- public int col {
- get {
- return this._col;
- }
- set {
- this._col = value;
- }
- }
-
- public int line {
- get {
- return this._line;
- }
- set {
- this._line = value;
- }
- }
-
- public string/*!*/ val {
- get {
- return this._val;
- }
- set {
- this._val = value;
- }
- }
-
- public bool IsValid {
- get {
- return this._filename != null;
- }
- }
-
-
- }
-
- public static class ParserHelper {
- struct ReadState {
- public bool hasSeenElse;
- public bool mayStillIncludeAnotherAlternative;
- public ReadState(bool hasSeenElse, bool mayStillIncludeAnotherAlternative) {
- this.hasSeenElse = hasSeenElse;
- this.mayStillIncludeAnotherAlternative = mayStillIncludeAnotherAlternative;
- }
- }
- // "arg" is assumed to be trimmed
- private static bool IfdefConditionSaysToInclude(string arg, List<string/*!*/>/*!*/ defines) {
- Contract.Requires(arg != null);
- Contract.Requires(cce.NonNullElements(defines));
- bool sense = true;
- while (arg.StartsWith("!")) {
- sense = !sense;
- arg = arg.Substring(1).TrimStart();
- }
- return defines.Contains(arg) == sense;
- }
-
- public static string Fill(Stream stream, List<string/*!*/>/*!*/ defines) {
- Contract.Requires(stream != null);
- Contract.Requires(cce.NonNullElements(defines));
- Contract.Ensures(Contract.Result<string>() != null);
- StreamReader/*!*/ reader = new StreamReader(stream);
- return Fill(reader, defines);
- }
- public static string Fill(TextReader reader, List<string/*!*/>/*!*/ defines) {
- Contract.Requires(reader != null);
- Contract.Requires(cce.NonNullElements(defines));
- Contract.Ensures(Contract.Result<string>() != null);
- StringBuilder sb = new StringBuilder();
- List<ReadState>/*!*/ readState = new List<ReadState>(); // readState.Count is the current nesting level of #if's
- int ignoreCutoff = -1; // -1 means we're not ignoring; for 0<=n, n means we're ignoring because of something at nesting level n
- while (true)
- //invariant -1 <= ignoreCutoff && ignoreCutoff < readState.Count;
- {
- string s = reader.ReadLine();
- if (s == null) {
- if (readState.Count != 0) {
- sb.AppendLine("#MalformedInput: missing #endif");
- }
- break;
- }
- string t = s.Trim();
- if (t.StartsWith("#if")) {
- ReadState rs = new ReadState(false, false);
- if (ignoreCutoff != -1) {
- // we're already in a state of ignoring, so continue to ignore
- } else if (IfdefConditionSaysToInclude(t.Substring(3).TrimStart(), defines)) {
- // include this branch
- } else {
- ignoreCutoff = readState.Count; // start ignoring
- rs.mayStillIncludeAnotherAlternative = true; // allow some later "elsif" or "else" branch to be included
- }
- readState.Add(rs);
- sb.AppendLine(); // ignore the #if line
-
- } else if (t.StartsWith("#elsif")) {
- ReadState rs;
- if (readState.Count == 0 || (rs = readState[readState.Count - 1]).hasSeenElse) {
- sb.AppendLine("#MalformedInput: misplaced #elsif"); // malformed input
- break;
- }
- if (ignoreCutoff == -1) {
- // we had included the previous branch
- //Contract.Assert(!rs.mayStillIncludeAnotherAlternative);
- ignoreCutoff = readState.Count - 1; // start ignoring
- } else if (rs.mayStillIncludeAnotherAlternative && IfdefConditionSaysToInclude(t.Substring(6).TrimStart(), defines)) {
- // include this branch, but no subsequent branch at this level
- ignoreCutoff = -1;
- rs.mayStillIncludeAnotherAlternative = false;
- readState[readState.Count - 1] = rs;
- }
- sb.AppendLine(); // ignore the #elsif line
-
- } else if (t == "#else") {
- ReadState rs;
- if (readState.Count == 0 || (rs = readState[readState.Count - 1]).hasSeenElse) {
- sb.AppendLine("#MalformedInput: misplaced #else"); // malformed input
- break;
- }
- rs.hasSeenElse = true;
- if (ignoreCutoff == -1) {
- // we had included the previous branch
- //Contract.Assert(!rs.mayStillIncludeAnotherAlternative);
- ignoreCutoff = readState.Count - 1; // start ignoring
- } else if (rs.mayStillIncludeAnotherAlternative) {
- // include this branch
- ignoreCutoff = -1;
- rs.mayStillIncludeAnotherAlternative = false;
- }
- readState[readState.Count - 1] = rs;
- sb.AppendLine(); // ignore the #else line
-
- } else if (t == "#endif") {
- if (readState.Count == 0) {
- sb.AppendLine("#MalformedInput: misplaced #endif"); // malformed input
- break;
- }
- readState.RemoveAt(readState.Count - 1); // pop
- if (ignoreCutoff == readState.Count) {
- // we had ignored the branch that ends here; so, now we start including again
- ignoreCutoff = -1;
- }
- sb.AppendLine(); // ignore the #endif line
-
- } else if (ignoreCutoff == -1) {
- sb.AppendLine(s); // included line
-
- } else {
- sb.AppendLine(); // ignore the line
- }
- }
-
- return sb.ToString();
- }
- }
+using System.Text;
+using System.Collections.Generic;
+using System.IO;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Boogie {
+
+ [Immutable]
+ public interface IToken {
+ int kind {
+ get;
+ set;
+ } // token kind
+ string filename {
+ get;
+ set;
+ } // token file
+ int pos {
+ get;
+ set;
+ } // token position in the source text (starting at 0)
+ int col {
+ get;
+ set;
+ } // token column (starting at 0)
+ int line {
+ get;
+ set;
+ } // token line (starting at 1)
+ string/*!*/ val {
+ get;
+ set;
+ } // token value
+
+ bool IsValid {
+ get;
+ }
+ }
+
+ [Immutable]
+ public class Token : IToken {
+ public int _kind; // token kind
+ string _filename; // token file
+ public int _pos; // token position in the source text (starting at 0)
+ public int _col; // token column (starting at 1)
+ public int _line; // token line (starting at 1)
+ public string/*!*/ _val; // token value
+ public Token next; // ML 2005-03-11 Tokens are kept in linked list
+
+ public static readonly IToken/*!*/ NoToken = new Token();
+
+ public Token() {
+ this._val = "anything so that it is nonnull";
+ }
+ public Token(int linenum, int colnum)
+ : base() {
+ this._line = linenum;
+ this._col = colnum;
+ this._val = "anything so that it is nonnull";
+ }
+
+ public int kind {
+ get {
+ return this._kind;
+ }
+ set {
+ this._kind = value;
+ }
+ }
+
+ public string filename {
+ get {
+ return this._filename;
+ }
+ set {
+ this._filename = value;
+ }
+ }
+
+ public int pos {
+ get {
+ return this._pos;
+ }
+ set {
+ this._pos = value;
+ }
+ }
+
+ public int col {
+ get {
+ return this._col;
+ }
+ set {
+ this._col = value;
+ }
+ }
+
+ public int line {
+ get {
+ return this._line;
+ }
+ set {
+ this._line = value;
+ }
+ }
+
+ public string/*!*/ val {
+ get {
+ return this._val;
+ }
+ set {
+ this._val = value;
+ }
+ }
+
+ public bool IsValid {
+ get {
+ return this._filename != null;
+ }
+ }
+
+
+ }
+
+ public static class ParserHelper {
+ struct ReadState {
+ public bool hasSeenElse;
+ public bool mayStillIncludeAnotherAlternative;
+ public ReadState(bool hasSeenElse, bool mayStillIncludeAnotherAlternative) {
+ this.hasSeenElse = hasSeenElse;
+ this.mayStillIncludeAnotherAlternative = mayStillIncludeAnotherAlternative;
+ }
+ }
+ // "arg" is assumed to be trimmed
+ private static bool IfdefConditionSaysToInclude(string arg, List<string/*!*/>/*!*/ defines) {
+ Contract.Requires(arg != null);
+ Contract.Requires(cce.NonNullElements(defines));
+ bool sense = true;
+ while (arg.StartsWith("!")) {
+ sense = !sense;
+ arg = arg.Substring(1).TrimStart();
+ }
+ return defines.Contains(arg) == sense;
+ }
+
+ public static string Fill(Stream stream, List<string/*!*/>/*!*/ defines) {
+ Contract.Requires(stream != null);
+ Contract.Requires(cce.NonNullElements(defines));
+ Contract.Ensures(Contract.Result<string>() != null);
+ StreamReader/*!*/ reader = new StreamReader(stream);
+ return Fill(reader, defines);
+ }
+ public static string Fill(TextReader reader, List<string/*!*/>/*!*/ defines) {
+ Contract.Requires(reader != null);
+ Contract.Requires(cce.NonNullElements(defines));
+ Contract.Ensures(Contract.Result<string>() != null);
+ StringBuilder sb = new StringBuilder();
+ List<ReadState>/*!*/ readState = new List<ReadState>(); // readState.Count is the current nesting level of #if's
+ int ignoreCutoff = -1; // -1 means we're not ignoring; for 0<=n, n means we're ignoring because of something at nesting level n
+ while (true)
+ //invariant -1 <= ignoreCutoff && ignoreCutoff < readState.Count;
+ {
+ string s = reader.ReadLine();
+ if (s == null) {
+ if (readState.Count != 0) {
+ sb.AppendLine("#MalformedInput: missing #endif");
+ }
+ break;
+ }
+ string t = s.Trim();
+ if (t.StartsWith("#if")) {
+ ReadState rs = new ReadState(false, false);
+ if (ignoreCutoff != -1) {
+ // we're already in a state of ignoring, so continue to ignore
+ } else if (IfdefConditionSaysToInclude(t.Substring(3).TrimStart(), defines)) {
+ // include this branch
+ } else {
+ ignoreCutoff = readState.Count; // start ignoring
+ rs.mayStillIncludeAnotherAlternative = true; // allow some later "elsif" or "else" branch to be included
+ }
+ readState.Add(rs);
+ sb.AppendLine(); // ignore the #if line
+
+ } else if (t.StartsWith("#elsif")) {
+ ReadState rs;
+ if (readState.Count == 0 || (rs = readState[readState.Count - 1]).hasSeenElse) {
+ sb.AppendLine("#MalformedInput: misplaced #elsif"); // malformed input
+ break;
+ }
+ if (ignoreCutoff == -1) {
+ // we had included the previous branch
+ //Contract.Assert(!rs.mayStillIncludeAnotherAlternative);
+ ignoreCutoff = readState.Count - 1; // start ignoring
+ } else if (rs.mayStillIncludeAnotherAlternative && IfdefConditionSaysToInclude(t.Substring(6).TrimStart(), defines)) {
+ // include this branch, but no subsequent branch at this level
+ ignoreCutoff = -1;
+ rs.mayStillIncludeAnotherAlternative = false;
+ readState[readState.Count - 1] = rs;
+ }
+ sb.AppendLine(); // ignore the #elsif line
+
+ } else if (t == "#else") {
+ ReadState rs;
+ if (readState.Count == 0 || (rs = readState[readState.Count - 1]).hasSeenElse) {
+ sb.AppendLine("#MalformedInput: misplaced #else"); // malformed input
+ break;
+ }
+ rs.hasSeenElse = true;
+ if (ignoreCutoff == -1) {
+ // we had included the previous branch
+ //Contract.Assert(!rs.mayStillIncludeAnotherAlternative);
+ ignoreCutoff = readState.Count - 1; // start ignoring
+ } else if (rs.mayStillIncludeAnotherAlternative) {
+ // include this branch
+ ignoreCutoff = -1;
+ rs.mayStillIncludeAnotherAlternative = false;
+ }
+ readState[readState.Count - 1] = rs;
+ sb.AppendLine(); // ignore the #else line
+
+ } else if (t == "#endif") {
+ if (readState.Count == 0) {
+ sb.AppendLine("#MalformedInput: misplaced #endif"); // malformed input
+ break;
+ }
+ readState.RemoveAt(readState.Count - 1); // pop
+ if (ignoreCutoff == readState.Count) {
+ // we had ignored the branch that ends here; so, now we start including again
+ ignoreCutoff = -1;
+ }
+ sb.AppendLine(); // ignore the #endif line
+
+ } else if (ignoreCutoff == -1) {
+ sb.AppendLine(s); // included line
+
+ } else {
+ sb.AppendLine(); // ignore the line
+ }
+ }
+
+ return sb.ToString();
+ }
+ }
} \ No newline at end of file
diff --git a/Source/ParserHelper/ParserHelper.csproj b/Source/ParserHelper/ParserHelper.csproj
index f3424531..b5ed2744 100644
--- a/Source/ParserHelper/ParserHelper.csproj
+++ b/Source/ParserHelper/ParserHelper.csproj
@@ -1,142 +1,142 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>ParserHelper</RootNamespace>
- <AssemblyName>ParserHelper</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>..\..\Binaries\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>True</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>False</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>True</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
- <CodeContractsContainerAnalysis>True</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile>..\..\baseline.xml</CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>..\..\Binaries\ParserHelper.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="ParserHelper.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>ParserHelper</RootNamespace>
+ <AssemblyName>BoogieParserHelper</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Binaries\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>True</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>False</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>True</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
+ <CodeContractsContainerAnalysis>True</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile>..\..\baseline.xml</CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>..\..\Binaries\ParserHelper.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>TRACE;DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="ParserHelper.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Source/Predication/Predication.csproj b/Source/Predication/Predication.csproj
index 382a8aca..1319d7f7 100644
--- a/Source/Predication/Predication.csproj
+++ b/Source/Predication/Predication.csproj
@@ -1,174 +1,174 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Predication</RootNamespace>
- <AssemblyName>Predication</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
- <ProductVersion>12.0.0</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
- <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
- <CodeContractsAssertsToContractsCheckBox>True</CodeContractsAssertsToContractsCheckBox>
- <CodeContractsRedundantTests>True</CodeContractsRedundantTests>
- <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
- <CodeContractsMissingPublicEnsuresAsWarnings>False</CodeContractsMissingPublicEnsuresAsWarnings>
- <CodeContractsInferRequires>True</CodeContractsInferRequires>
- <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
- <CodeContractsInferEnsuresAutoProperties>True</CodeContractsInferEnsuresAutoProperties>
- <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
- <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
- <CodeContractsSuggestAssumptionsForCallees>False</CodeContractsSuggestAssumptionsForCallees>
- <CodeContractsSuggestRequires>False</CodeContractsSuggestRequires>
- <CodeContractsNecessaryEnsures>True</CodeContractsNecessaryEnsures>
- <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
- <CodeContractsSuggestReadonly>True</CodeContractsSuggestReadonly>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsSQLServerOption />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
- <CodeContractsSkipAnalysisIfCannotConnectToCache>False</CodeContractsSkipAnalysisIfCannotConnectToCache>
- <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
- <CodeContractsBeingOptimisticOnExternal>True</CodeContractsBeingOptimisticOnExternal>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
- <CodeContractsInferRequires>True</CodeContractsInferRequires>
- <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
- <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
- <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
- <CodeContractsSuggestRequires>True</CodeContractsSuggestRequires>
- <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsSQLServerOption />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
- <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="SmartBlockPredicator.cs" />
- <Compile Include="UniformityAnalyser.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{AFAA5CE1-C41B-44F0-88F8-FD8A43826D44}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Predication</RootNamespace>
+ <AssemblyName>BoogiePredication</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ <ProductVersion>12.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
+ <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions>
+ <CodeContractsAssertsToContractsCheckBox>True</CodeContractsAssertsToContractsCheckBox>
+ <CodeContractsRedundantTests>True</CodeContractsRedundantTests>
+ <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
+ <CodeContractsMissingPublicEnsuresAsWarnings>False</CodeContractsMissingPublicEnsuresAsWarnings>
+ <CodeContractsInferRequires>True</CodeContractsInferRequires>
+ <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
+ <CodeContractsInferEnsuresAutoProperties>True</CodeContractsInferEnsuresAutoProperties>
+ <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
+ <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
+ <CodeContractsSuggestAssumptionsForCallees>False</CodeContractsSuggestAssumptionsForCallees>
+ <CodeContractsSuggestRequires>False</CodeContractsSuggestRequires>
+ <CodeContractsNecessaryEnsures>True</CodeContractsNecessaryEnsures>
+ <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
+ <CodeContractsSuggestReadonly>True</CodeContractsSuggestReadonly>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsSQLServerOption />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
+ <CodeContractsSkipAnalysisIfCannotConnectToCache>False</CodeContractsSkipAnalysisIfCannotConnectToCache>
+ <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
+ <CodeContractsBeingOptimisticOnExternal>True</CodeContractsBeingOptimisticOnExternal>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings>
+ <CodeContractsInferRequires>True</CodeContractsInferRequires>
+ <CodeContractsInferEnsures>False</CodeContractsInferEnsures>
+ <CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
+ <CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
+ <CodeContractsSuggestRequires>True</CodeContractsSuggestRequires>
+ <CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsSQLServerOption />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
+ <CodeContractsFailBuildOnWarnings>False</CodeContractsFailBuildOnWarnings>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="SmartBlockPredicator.cs" />
+ <Compile Include="UniformityAnalyser.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Source/Predication/SmartBlockPredicator.cs b/Source/Predication/SmartBlockPredicator.cs
index 739f0e2b..0f848152 100644
--- a/Source/Predication/SmartBlockPredicator.cs
+++ b/Source/Predication/SmartBlockPredicator.cs
@@ -1,637 +1,637 @@
-using Microsoft.Boogie.GraphUtil;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using System.Linq;
-
-namespace Microsoft.Boogie {
-
-public class SmartBlockPredicator {
-
- Program prog;
- Implementation impl;
- Graph<Block> blockGraph;
- List<Tuple<Block, bool>> sortedBlocks;
-
- Func<Procedure, bool> useProcedurePredicates;
-
- Dictionary<Block, Variable> predMap, defMap;
- Dictionary<Block, HashSet<Variable>> ownedMap;
- Dictionary<Block, Block> parentMap;
- Dictionary<Block, PartInfo> partInfo;
-
- IdentifierExpr fp;
- Dictionary<Microsoft.Boogie.Type, IdentifierExpr> havocVars =
- new Dictionary<Microsoft.Boogie.Type, IdentifierExpr>();
- HashSet<Block> doneBlocks = new HashSet<Block>();
- bool myUseProcedurePredicates;
- UniformityAnalyser uni;
-
- SmartBlockPredicator(Program p, Implementation i, Func<Procedure, bool> upp, UniformityAnalyser u) {
- prog = p;
- impl = i;
- useProcedurePredicates = upp;
- myUseProcedurePredicates = useProcedurePredicates(i.Proc);
- uni = u;
- }
-
- void PredicateCmd(Expr p, Expr pDom, List<Block> blocks, Block block, Cmd cmd, out Block nextBlock) {
- var cCmd = cmd as CallCmd;
- if (cCmd != null && !useProcedurePredicates(cCmd.Proc)) {
- if (p == null) {
- block.Cmds.Add(cmd);
- nextBlock = block;
- return;
- }
-
- var trueBlock = new Block();
- blocks.Add(trueBlock);
- trueBlock.Label = block.Label + ".call.true";
- trueBlock.Cmds.Add(new AssumeCmd(Token.NoToken, p));
- trueBlock.Cmds.Add(cmd);
-
- var falseBlock = new Block();
- blocks.Add(falseBlock);
- falseBlock.Label = block.Label + ".call.false";
- falseBlock.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.Not(p)));
-
- var contBlock = new Block();
- blocks.Add(contBlock);
- contBlock.Label = block.Label + ".call.cont";
-
- block.TransferCmd =
- new GotoCmd(Token.NoToken, new List<Block> { trueBlock, falseBlock });
- trueBlock.TransferCmd = falseBlock.TransferCmd =
- new GotoCmd(Token.NoToken, new List<Block> { contBlock });
- nextBlock = contBlock;
- } else {
- PredicateCmd(p, pDom, block.Cmds, cmd);
- nextBlock = block;
- }
- }
-
- void PredicateCmd(Expr p, Expr pDom, List<Cmd> cmdSeq, Cmd cmd) {
- if (cmd is CallCmd) {
- var cCmd = (CallCmd)cmd;
- Debug.Assert(useProcedurePredicates(cCmd.Proc));
- cCmd.Ins.Insert(0, p != null ? p : Expr.True);
- cmdSeq.Add(cCmd);
- } else if (p == null) {
- new EnabledReplacementVisitor(Expr.True, pDom).Visit(cmd);
- cmdSeq.Add(cmd);
- } else if (cmd is AssignCmd) {
- var aCmd = (AssignCmd)cmd;
- cmdSeq.Add(new AssignCmd(Token.NoToken, aCmd.Lhss,
- new List<Expr>(aCmd.Lhss.Zip(aCmd.Rhss, (lhs, rhs) =>
- new NAryExpr(Token.NoToken,
- new IfThenElse(Token.NoToken),
- new List<Expr> { p, rhs, lhs.AsExpr })))));
- } else if (cmd is AssertCmd) {
- var aCmd = (AssertCmd)cmd;
- Expr newExpr = new EnabledReplacementVisitor(p, pDom).VisitExpr(aCmd.Expr);
- aCmd.Expr = QKeyValue.FindBoolAttribute(aCmd.Attributes, "do_not_predicate") ? newExpr : Expr.Imp(p, newExpr);
- cmdSeq.Add(aCmd);
- } else if (cmd is AssumeCmd) {
- var aCmd = (AssumeCmd)cmd;
- Expr newExpr = new EnabledReplacementVisitor(p, pDom).VisitExpr(aCmd.Expr);
- aCmd.Expr = QKeyValue.FindBoolAttribute(aCmd.Attributes, "do_not_predicate") ? newExpr : Expr.Imp(p, newExpr);
- cmdSeq.Add(aCmd);
- } else if (cmd is HavocCmd) {
- var hCmd = (HavocCmd)cmd;
- foreach (IdentifierExpr v in hCmd.Vars) {
- Microsoft.Boogie.Type type = v.Decl.TypedIdent.Type;
- Contract.Assert(type != null);
-
- IdentifierExpr havocTempExpr;
- if (havocVars.ContainsKey(type)) {
- havocTempExpr = havocVars[type];
- } else {
- var havocVar = new LocalVariable(Token.NoToken,
- new TypedIdent(Token.NoToken,
- "_HAVOC_" + type.ToString(), type));
- impl.LocVars.Add(havocVar);
- havocVars[type] = havocTempExpr =
- new IdentifierExpr(Token.NoToken, havocVar);
- }
- cmdSeq.Add(new HavocCmd(Token.NoToken,
- new List<IdentifierExpr> { havocTempExpr }));
- cmdSeq.Add(Cmd.SimpleAssign(Token.NoToken, v,
- new NAryExpr(Token.NoToken,
- new IfThenElse(Token.NoToken),
- new List<Expr> { p, havocTempExpr, v })));
- }
- } else if (cmd is CommentCmd) {
- // skip
- } else if (cmd is StateCmd) {
- var sCmd = (StateCmd)cmd;
- var newCmdSeq = new List<Cmd>();
- foreach (Cmd c in sCmd.Cmds)
- PredicateCmd(p, pDom, newCmdSeq, c);
- sCmd.Cmds = newCmdSeq;
- cmdSeq.Add(sCmd);
- } else {
- Console.WriteLine("Unsupported cmd: " + cmd.GetType().ToString());
- }
- }
-
- // hasPredicatedRegion is true iff the block or its targets are predicated
- // (i.e. we enter, stay within or exit a predicated region).
- void PredicateTransferCmd(Expr p, Block src, List<Cmd> cmdSeq, TransferCmd cmd, out bool hasPredicatedRegion) {
- hasPredicatedRegion = predMap.ContainsKey(src);
-
- if (cmd is GotoCmd) {
- var gCmd = (GotoCmd)cmd;
-
- hasPredicatedRegion = hasPredicatedRegion ||
- gCmd.labelTargets.Cast<Block>().Any(b => predMap.ContainsKey(b));
-
- if (gCmd.labelTargets.Count == 1) {
- if (defMap.ContainsKey(gCmd.labelTargets[0])) {
- PredicateCmd(p, Expr.True, cmdSeq,
- Cmd.SimpleAssign(Token.NoToken,
- Expr.Ident(predMap[gCmd.labelTargets[0]]), Expr.True));
- }
- } else {
- Debug.Assert(gCmd.labelTargets.Count > 1);
- Debug.Assert(gCmd.labelTargets.Cast<Block>().All(t => uni.IsUniform(impl.Name, t) ||
- partInfo.ContainsKey(t)));
- foreach (Block target in gCmd.labelTargets) {
- if (!partInfo.ContainsKey(target))
- continue;
-
- // In this case we not only predicate with the current predicate p,
- // but also with the "part predicate"; this ensures that we do not
- // update a predicate twice when it occurs in both parts.
- var part = partInfo[target];
- if (defMap.ContainsKey(part.realDest)) {
- PredicateCmd(p == null ? part.pred : Expr.And(p, part.pred), Expr.True, cmdSeq,
- Cmd.SimpleAssign(Token.NoToken,
- Expr.Ident(predMap[part.realDest]), part.pred));
- }
- var predsExitingLoop = new Dictionary<Block, List<Expr>>();
- foreach (Block exit in LoopsExited(src, target)) {
- List<Expr> predList;
- if (!predsExitingLoop.ContainsKey(exit))
- predList = predsExitingLoop[exit] = new List<Expr>();
- else
- predList = predsExitingLoop[exit];
- predList.Add(part.pred);
- }
- foreach (var pred in predsExitingLoop) {
- PredicateCmd(p == null ? part.pred : Expr.And(p, part.pred), Expr.True, cmdSeq,
- Cmd.SimpleAssign(Token.NoToken,
- Expr.Ident(predMap[pred.Key]),
- Expr.Not(pred.Value.Aggregate(Expr.Or))));
- }
- }
- }
- } else if (cmd is ReturnCmd) {
- // Blocks which end in a return will never share a predicate with a block
- // which appears after it. Furthermore, such a block cannot be part of a
- // loop. So it is safe to do nothing here.
- } else {
- Console.WriteLine("Unsupported cmd: " + cmd.GetType().ToString());
- }
- }
-
- Variable FreshPredicate(ref int predCount) {
- var pVar = new LocalVariable(Token.NoToken,
- new TypedIdent(Token.NoToken,
- "p" + predCount++,
- Microsoft.Boogie.Type.Bool));
- impl.LocVars.Add(pVar);
- return pVar;
- }
-
- void AssignPredicates(Graph<Block> blockGraph,
- DomRelation<Block> dom,
- DomRelation<Block> pdom,
- IEnumerable<Block> headerDominance,
- IEnumerator<Tuple<Block, bool>> i,
- Variable headPredicate,
- ref int predCount) {
- var header = i.Current.Item1;
- var regionPreds = new List<Tuple<Block, Variable>>();
- var ownedPreds = new HashSet<Variable>();
- ownedMap[header] = ownedPreds;
-
- if (headPredicate != null) {
- predMap[header] = headPredicate;
- defMap[header] = headPredicate;
- regionPreds.Add(new Tuple<Block, Variable>(header, headPredicate));
- }
-
- while (i.MoveNext()) {
- var block = i.Current;
-
- if (block.Item2) {
- if (block.Item1 == header) {
- return;
- }
- }
-
- if (uni != null && uni.IsUniform(impl.Name, block.Item1)) {
- if (blockGraph.Headers.Contains(block.Item1)) {
- parentMap[block.Item1] = header;
- AssignPredicates(blockGraph, dom, pdom, headerDominance, i, headPredicate, ref predCount);
- }
- continue;
- }
-
- if (!block.Item2) {
- if (blockGraph.Headers.Contains(block.Item1)) {
- parentMap[block.Item1] = header;
- var loopPred = FreshPredicate(ref predCount);
- ownedPreds.Add(loopPred);
- AssignPredicates(blockGraph, dom, pdom, headerDominance, i, loopPred, ref predCount);
- } else {
- bool foundExisting = false;
- foreach (var regionPred in regionPreds) {
- if (dom.DominatedBy(block.Item1, regionPred.Item1) &&
- pdom.DominatedBy(regionPred.Item1, block.Item1)) {
- predMap[block.Item1] = regionPred.Item2;
- foundExisting = true;
- break;
- }
- }
- if (!foundExisting) {
- var condPred = FreshPredicate(ref predCount);
- predMap[block.Item1] = condPred;
- defMap[block.Item1] = condPred;
- var headerIterator = headerDominance.GetEnumerator();
- // Add the predicate to the loop header H that dominates the node (if one
- // exists) such that H does not dominate another header which also dominates
- // the node. Since predicates are owned by loop headers (or the program entry
- // node), this is the block 'closest' to block to which we are assigning a
- // that can be made to own the predicate.
- Block node = null;
- while (headerIterator.MoveNext()) {
- var current = headerIterator.Current;
- if (dom.DominatedBy(block.Item1, current)) {
- node = current;
- break;
- }
- }
- if (node != null) {
- ownedMap[node].Add(condPred);
- } else {
- // In this case the header is the program entry node.
- ownedPreds.Add(condPred);
- }
- regionPreds.Add(new Tuple<Block, Variable>(block.Item1, condPred));
- }
- }
- }
- }
- }
-
- void AssignPredicates() {
- DomRelation<Block> dom = blockGraph.DominatorMap;
-
- Graph<Block> dualGraph = blockGraph.Dual(new Block());
- DomRelation<Block> pdom = dualGraph.DominatorMap;
- IEnumerable<Block> headerDominance = blockGraph.SortHeadersByDominance();
-
- var iter = sortedBlocks.GetEnumerator();
- if (!iter.MoveNext()) {
- predMap = defMap = null;
- ownedMap = null;
- return;
- }
-
- int predCount = 0;
- predMap = new Dictionary<Block, Variable>();
- defMap = new Dictionary<Block, Variable>();
- ownedMap = new Dictionary<Block, HashSet<Variable>>();
- parentMap = new Dictionary<Block, Block>();
- AssignPredicates(blockGraph, dom, pdom, headerDominance, iter,
- myUseProcedurePredicates ? impl.InParams[0] : null,
- ref predCount);
- }
-
- IEnumerable<Block> LoopsExited(Block src, Block dest) {
- var i = sortedBlocks.GetEnumerator();
- while (i.MoveNext()) {
- var b = i.Current;
- if (b.Item1 == src) {
- return LoopsExitedForwardEdge(dest, i);
- } else if (b.Item1 == dest) {
- return LoopsExitedBackEdge(src, i);
- }
- }
- Debug.Assert(false);
- return null;
- }
-
- private IEnumerable<Block> LoopsExitedBackEdge(Block src, IEnumerator<Tuple<Block, bool>> i) {
- var headsSeen = new HashSet<Block>();
- while (i.MoveNext()) {
- var b = i.Current;
- if (!b.Item2 && blockGraph.Headers.Contains(b.Item1))
- headsSeen.Add(b.Item1);
- else if (b.Item2)
- headsSeen.Remove(b.Item1);
- if (b.Item1 == src)
- return headsSeen;
- }
- Debug.Assert(false);
- return null;
- }
-
- private IEnumerable<Block> LoopsExitedForwardEdge(Block dest, IEnumerator<Tuple<Block, bool>> i) {
- var headsSeen = new HashSet<Block>();
- while (i.MoveNext()) {
- var b = i.Current;
- if (b.Item1 == dest)
- yield break;
- else if (!b.Item2 && blockGraph.Headers.Contains(b.Item1))
- headsSeen.Add(b.Item1);
- else if (b.Item2 && !headsSeen.Contains(b.Item1))
- yield return b.Item1;
- }
- Debug.Assert(false);
- }
-
- class PartInfo {
- public PartInfo(Expr p, Block r) { pred = p; realDest = r; }
- public Expr pred;
- public Block realDest;
- }
-
- Dictionary<Block, PartInfo> BuildPartitionInfo() {
- var partInfo = new Dictionary<Block, PartInfo>();
- foreach (var block in blockGraph.Nodes) {
- if (uni.IsUniform(impl.Name, block))
- continue;
-
- var parts = block.Cmds.Cast<Cmd>().TakeWhile(
- c => c is AssumeCmd &&
- QKeyValue.FindBoolAttribute(((AssumeCmd)c).Attributes, "partition"));
-
- Expr pred = null;
- if (parts.Count() > 0) {
- pred = parts.Select(a => ((AssumeCmd)a).Expr).Aggregate(Expr.And);
- block.Cmds =
- new List<Cmd>(block.Cmds.Cast<Cmd>().Skip(parts.Count()).ToArray());
- } else {
- continue;
- }
-
- Block realDest = block;
- if (block.Cmds.Count == 0) {
- var gc = block.TransferCmd as GotoCmd;
- if (gc != null && gc.labelTargets.Count == 1)
- realDest = gc.labelTargets[0];
- }
- partInfo[block] = new PartInfo(pred, realDest);
- }
-
- return partInfo;
- }
-
- Block FindImmediateDominator(Block block) {
- Block predecessor = null;
- foreach(var pred in blockGraph.Predecessors(block)) {
- if (!blockGraph.DominatorMap.DominatedBy(pred, block)) {
- if (predecessor == null)
- predecessor = pred;
- else
- predecessor = blockGraph.DominatorMap.LeastCommonAncestor(pred, predecessor);
- }
- }
- return predecessor;
- }
-
- void PredicateImplementation() {
- blockGraph = prog.ProcessLoops(impl);
- sortedBlocks = blockGraph.LoopyTopSort();
-
- AssignPredicates();
- partInfo = BuildPartitionInfo();
-
- if (myUseProcedurePredicates)
- fp = Expr.Ident(impl.InParams[0]);
-
- var newBlocks = new List<Block>();
- Block prevBlock = null;
- foreach (var n in sortedBlocks) {
- if (predMap.ContainsKey(n.Item1)) {
- var p = predMap[n.Item1];
- var pExpr = Expr.Ident(p);
-
- if (n.Item2) {
- var dominator = FindImmediateDominator(n.Item1);
- if (dominator != null && predMap.ContainsKey(dominator)) {
- AssumeCmd aCmd = new AssumeCmd(Token.NoToken, Expr.True);
- aCmd.Attributes = new QKeyValue(Token.NoToken, "dominator_predicate", new List<object>() { predMap[dominator].ToString() }, aCmd.Attributes);
- aCmd.Attributes = new QKeyValue(Token.NoToken, "predicate", new List<object>() { predMap[n.Item1].ToString() }, aCmd.Attributes);
- n.Item1.Cmds.Insert(0, aCmd);
- }
-
- var backedgeBlock = new Block();
- newBlocks.Add(backedgeBlock);
-
- backedgeBlock.Label = n.Item1.Label + ".backedge";
- backedgeBlock.Cmds = new List<Cmd> { new AssumeCmd(Token.NoToken, pExpr,
- new QKeyValue(Token.NoToken, "backedge", new List<object>(), null)) };
- backedgeBlock.TransferCmd = new GotoCmd(Token.NoToken,
- new List<Block> { n.Item1 });
-
- var tailBlock = new Block();
- newBlocks.Add(tailBlock);
-
- tailBlock.Label = n.Item1.Label + ".tail";
- tailBlock.Cmds = new List<Cmd> { new AssumeCmd(Token.NoToken,
- Expr.Not(pExpr)) };
-
- if (uni != null && !uni.IsUniform(impl.Name, n.Item1)) {
- uni.AddNonUniform(impl.Name, backedgeBlock);
- uni.AddNonUniform(impl.Name, tailBlock);
- }
-
- if (prevBlock != null)
- prevBlock.TransferCmd = new GotoCmd(Token.NoToken,
- new List<Block> { backedgeBlock, tailBlock });
- prevBlock = tailBlock;
- } else {
- PredicateBlock(pExpr, n.Item1, newBlocks, ref prevBlock);
- }
- } else {
- if (!n.Item2) {
- PredicateBlock(null, n.Item1, newBlocks, ref prevBlock);
- }
- }
- }
-
- if (prevBlock != null)
- prevBlock.TransferCmd = new ReturnCmd(Token.NoToken);
-
- impl.Blocks = newBlocks;
- }
-
- private void PredicateBlock(Expr pExpr, Block block, List<Block> newBlocks, ref Block prevBlock) {
- var firstBlock = block;
-
- var oldCmdSeq = block.Cmds;
- block.Cmds = new List<Cmd>();
- newBlocks.Add(block);
- if (prevBlock != null && !((prevBlock.TransferCmd is ReturnCmd) && uni != null && uni.IsUniform(impl.Name, block))) {
- prevBlock.TransferCmd = new GotoCmd(Token.NoToken, new List<Block> { block });
- }
-
- Block currentBlock = block;
- Expr pCurrentExpr = pExpr;
- while (parentMap.ContainsKey(currentBlock)) {
- Block parent = parentMap[currentBlock];
- Expr pParentExpr = null;
- if (predMap.ContainsKey(parent)) {
- var parentPred = predMap[parent];
- if (parentPred != null) {
- pParentExpr = Expr.Ident(parentPred);
- block.Cmds.Add(new AssertCmd(Token.NoToken,
- pCurrentExpr != null ? (Expr)Expr.Imp(pCurrentExpr, pParentExpr)
- : pParentExpr));
- }
- }
- currentBlock = parent;
- pCurrentExpr = pParentExpr;
- }
-
- Block dominator = FindImmediateDominator(block);
- Expr pDomExpr = Expr.True;
- if (dominator != null && predMap.ContainsKey(dominator))
- pDomExpr = new IdentifierExpr(Token.NoToken, predMap[dominator]);
- var transferCmd = block.TransferCmd;
- foreach (Cmd cmd in oldCmdSeq)
- PredicateCmd(pExpr, pDomExpr, newBlocks, block, cmd, out block);
-
- if (ownedMap.ContainsKey(firstBlock)) {
- var owned = ownedMap[firstBlock];
- foreach (var v in owned)
- block.Cmds.Add(Cmd.SimpleAssign(Token.NoToken, Expr.Ident(v), Expr.False));
- }
-
- bool hasPredicatedRegion;
- PredicateTransferCmd(pExpr, block, block.Cmds, transferCmd, out hasPredicatedRegion);
-
- if (hasPredicatedRegion)
- prevBlock = block;
- else
- prevBlock = null;
-
- doneBlocks.Add(block);
- }
-
- private Expr CreateIfFPThenElse(Expr then, Expr eElse) {
- if (myUseProcedurePredicates) {
- return new NAryExpr(Token.NoToken,
- new IfThenElse(Token.NoToken),
- new List<Expr> { fp, then, eElse });
- } else {
- return then;
- }
- }
-
- public static void Predicate(Program p,
- Func<Procedure, bool> useProcedurePredicates = null,
- UniformityAnalyser uni = null) {
- useProcedurePredicates = useProcedurePredicates ?? (proc => false);
- if (uni != null) {
- var oldUPP = useProcedurePredicates;
- useProcedurePredicates = proc => oldUPP(proc) && !uni.IsUniform(proc.Name);
- }
-
- foreach (var decl in p.TopLevelDeclarations.ToList()) {
- if (decl is Procedure || decl is Implementation) {
- var proc = decl as Procedure;
- Implementation impl = null;
- if (proc == null) {
- impl = (Implementation)decl;
- proc = impl.Proc;
- }
-
- bool upp = useProcedurePredicates(proc);
- if (upp) {
- var dwf = (DeclWithFormals)decl;
- var fpVar = new Formal(Token.NoToken,
- new TypedIdent(Token.NoToken, "_P",
- Microsoft.Boogie.Type.Bool),
- /*incoming=*/true);
- dwf.InParams = new List<Variable>(
- (new Variable[] {fpVar}.Concat(dwf.InParams.Cast<Variable>()))
- .ToArray());
-
- if (impl == null) {
- var fpIdentifierExpr = new IdentifierExpr(Token.NoToken, fpVar);
- foreach (Requires r in proc.Requires) {
- new EnabledReplacementVisitor(fpIdentifierExpr, Expr.True).VisitExpr(r.Condition);
- if (!QKeyValue.FindBoolAttribute(r.Attributes, "do_not_predicate")) {
- r.Condition = Expr.Imp(fpIdentifierExpr, r.Condition);
- }
- }
- foreach (Ensures e in proc.Ensures) {
- new EnabledReplacementVisitor(new IdentifierExpr(Token.NoToken, fpVar), Expr.True).VisitExpr(e.Condition);
- if (!QKeyValue.FindBoolAttribute(e.Attributes, "do_not_predicate")) {
- e.Condition = Expr.Imp(fpIdentifierExpr, e.Condition);
- }
- }
- }
- } else {
- if (impl == null) {
- foreach (Requires r in proc.Requires) {
- new EnabledReplacementVisitor(Expr.True, Expr.True).VisitExpr(r.Condition);
- }
- foreach (Ensures e in proc.Ensures) {
- new EnabledReplacementVisitor(Expr.True, Expr.True).VisitExpr(e.Condition);
- }
- }
- }
-
- if (impl != null) {
- try {
- new SmartBlockPredicator(p, impl, useProcedurePredicates, uni).PredicateImplementation();
- } catch (Program.IrreducibleLoopException) { }
- }
- }
- }
- }
-
- public static void Predicate(Program p, Implementation impl) {
- try {
- new SmartBlockPredicator(p, impl, proc => false, null).PredicateImplementation();
- }
- catch (Program.IrreducibleLoopException) { }
- }
-
-}
-
-class EnabledReplacementVisitor : StandardVisitor
-{
- private Expr pExpr;
- private Expr pDomExpr;
-
- internal EnabledReplacementVisitor(Expr pExpr, Expr pDomExpr)
- {
- this.pExpr = pExpr;
- this.pDomExpr = pDomExpr;
- }
-
- public override Expr VisitExpr(Expr node)
- {
- if (node is IdentifierExpr)
- {
- IdentifierExpr iExpr = node as IdentifierExpr;
- if (iExpr.Decl is Constant && QKeyValue.FindBoolAttribute(iExpr.Decl.Attributes, "__enabled"))
- {
- return pExpr;
- } else if (iExpr.Decl is Constant && QKeyValue.FindBoolAttribute(iExpr.Decl.Attributes, "__dominator_enabled"))
- {
- return pDomExpr;
- }
- }
- return base.VisitExpr(node);
- }
-}
-
-}
+using Microsoft.Boogie.GraphUtil;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using System.Linq;
+
+namespace Microsoft.Boogie {
+
+public class SmartBlockPredicator {
+
+ Program prog;
+ Implementation impl;
+ Graph<Block> blockGraph;
+ List<Tuple<Block, bool>> sortedBlocks;
+
+ Func<Procedure, bool> useProcedurePredicates;
+
+ Dictionary<Block, Variable> predMap, defMap;
+ Dictionary<Block, HashSet<Variable>> ownedMap;
+ Dictionary<Block, Block> parentMap;
+ Dictionary<Block, PartInfo> partInfo;
+
+ IdentifierExpr fp;
+ Dictionary<Microsoft.Boogie.Type, IdentifierExpr> havocVars =
+ new Dictionary<Microsoft.Boogie.Type, IdentifierExpr>();
+ HashSet<Block> doneBlocks = new HashSet<Block>();
+ bool myUseProcedurePredicates;
+ UniformityAnalyser uni;
+
+ SmartBlockPredicator(Program p, Implementation i, Func<Procedure, bool> upp, UniformityAnalyser u) {
+ prog = p;
+ impl = i;
+ useProcedurePredicates = upp;
+ myUseProcedurePredicates = useProcedurePredicates(i.Proc);
+ uni = u;
+ }
+
+ void PredicateCmd(Expr p, Expr pDom, List<Block> blocks, Block block, Cmd cmd, out Block nextBlock) {
+ var cCmd = cmd as CallCmd;
+ if (cCmd != null && !useProcedurePredicates(cCmd.Proc)) {
+ if (p == null) {
+ block.Cmds.Add(cmd);
+ nextBlock = block;
+ return;
+ }
+
+ var trueBlock = new Block();
+ blocks.Add(trueBlock);
+ trueBlock.Label = block.Label + ".call.true";
+ trueBlock.Cmds.Add(new AssumeCmd(Token.NoToken, p));
+ trueBlock.Cmds.Add(cmd);
+
+ var falseBlock = new Block();
+ blocks.Add(falseBlock);
+ falseBlock.Label = block.Label + ".call.false";
+ falseBlock.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.Not(p)));
+
+ var contBlock = new Block();
+ blocks.Add(contBlock);
+ contBlock.Label = block.Label + ".call.cont";
+
+ block.TransferCmd =
+ new GotoCmd(Token.NoToken, new List<Block> { trueBlock, falseBlock });
+ trueBlock.TransferCmd = falseBlock.TransferCmd =
+ new GotoCmd(Token.NoToken, new List<Block> { contBlock });
+ nextBlock = contBlock;
+ } else {
+ PredicateCmd(p, pDom, block.Cmds, cmd);
+ nextBlock = block;
+ }
+ }
+
+ void PredicateCmd(Expr p, Expr pDom, List<Cmd> cmdSeq, Cmd cmd) {
+ if (cmd is CallCmd) {
+ var cCmd = (CallCmd)cmd;
+ Debug.Assert(useProcedurePredicates(cCmd.Proc));
+ cCmd.Ins.Insert(0, p != null ? p : Expr.True);
+ cmdSeq.Add(cCmd);
+ } else if (p == null) {
+ new EnabledReplacementVisitor(Expr.True, pDom).Visit(cmd);
+ cmdSeq.Add(cmd);
+ } else if (cmd is AssignCmd) {
+ var aCmd = (AssignCmd)cmd;
+ cmdSeq.Add(new AssignCmd(Token.NoToken, aCmd.Lhss,
+ new List<Expr>(aCmd.Lhss.Zip(aCmd.Rhss, (lhs, rhs) =>
+ new NAryExpr(Token.NoToken,
+ new IfThenElse(Token.NoToken),
+ new List<Expr> { p, rhs, lhs.AsExpr })))));
+ } else if (cmd is AssertCmd) {
+ var aCmd = (AssertCmd)cmd;
+ Expr newExpr = new EnabledReplacementVisitor(p, pDom).VisitExpr(aCmd.Expr);
+ aCmd.Expr = QKeyValue.FindBoolAttribute(aCmd.Attributes, "do_not_predicate") ? newExpr : Expr.Imp(p, newExpr);
+ cmdSeq.Add(aCmd);
+ } else if (cmd is AssumeCmd) {
+ var aCmd = (AssumeCmd)cmd;
+ Expr newExpr = new EnabledReplacementVisitor(p, pDom).VisitExpr(aCmd.Expr);
+ aCmd.Expr = QKeyValue.FindBoolAttribute(aCmd.Attributes, "do_not_predicate") ? newExpr : Expr.Imp(p, newExpr);
+ cmdSeq.Add(aCmd);
+ } else if (cmd is HavocCmd) {
+ var hCmd = (HavocCmd)cmd;
+ foreach (IdentifierExpr v in hCmd.Vars) {
+ Microsoft.Boogie.Type type = v.Decl.TypedIdent.Type;
+ Contract.Assert(type != null);
+
+ IdentifierExpr havocTempExpr;
+ if (havocVars.ContainsKey(type)) {
+ havocTempExpr = havocVars[type];
+ } else {
+ var havocVar = new LocalVariable(Token.NoToken,
+ new TypedIdent(Token.NoToken,
+ "_HAVOC_" + type.ToString(), type));
+ impl.LocVars.Add(havocVar);
+ havocVars[type] = havocTempExpr =
+ new IdentifierExpr(Token.NoToken, havocVar);
+ }
+ cmdSeq.Add(new HavocCmd(Token.NoToken,
+ new List<IdentifierExpr> { havocTempExpr }));
+ cmdSeq.Add(Cmd.SimpleAssign(Token.NoToken, v,
+ new NAryExpr(Token.NoToken,
+ new IfThenElse(Token.NoToken),
+ new List<Expr> { p, havocTempExpr, v })));
+ }
+ } else if (cmd is CommentCmd) {
+ // skip
+ } else if (cmd is StateCmd) {
+ var sCmd = (StateCmd)cmd;
+ var newCmdSeq = new List<Cmd>();
+ foreach (Cmd c in sCmd.Cmds)
+ PredicateCmd(p, pDom, newCmdSeq, c);
+ sCmd.Cmds = newCmdSeq;
+ cmdSeq.Add(sCmd);
+ } else {
+ Console.WriteLine("Unsupported cmd: " + cmd.GetType().ToString());
+ }
+ }
+
+ // hasPredicatedRegion is true iff the block or its targets are predicated
+ // (i.e. we enter, stay within or exit a predicated region).
+ void PredicateTransferCmd(Expr p, Block src, List<Cmd> cmdSeq, TransferCmd cmd, out bool hasPredicatedRegion) {
+ hasPredicatedRegion = predMap.ContainsKey(src);
+
+ if (cmd is GotoCmd) {
+ var gCmd = (GotoCmd)cmd;
+
+ hasPredicatedRegion = hasPredicatedRegion ||
+ gCmd.labelTargets.Cast<Block>().Any(b => predMap.ContainsKey(b));
+
+ if (gCmd.labelTargets.Count == 1) {
+ if (defMap.ContainsKey(gCmd.labelTargets[0])) {
+ PredicateCmd(p, Expr.True, cmdSeq,
+ Cmd.SimpleAssign(Token.NoToken,
+ Expr.Ident(predMap[gCmd.labelTargets[0]]), Expr.True));
+ }
+ } else {
+ Debug.Assert(gCmd.labelTargets.Count > 1);
+ Debug.Assert(gCmd.labelTargets.Cast<Block>().All(t => uni.IsUniform(impl.Name, t) ||
+ partInfo.ContainsKey(t)));
+ foreach (Block target in gCmd.labelTargets) {
+ if (!partInfo.ContainsKey(target))
+ continue;
+
+ // In this case we not only predicate with the current predicate p,
+ // but also with the "part predicate"; this ensures that we do not
+ // update a predicate twice when it occurs in both parts.
+ var part = partInfo[target];
+ if (defMap.ContainsKey(part.realDest)) {
+ PredicateCmd(p == null ? part.pred : Expr.And(p, part.pred), Expr.True, cmdSeq,
+ Cmd.SimpleAssign(Token.NoToken,
+ Expr.Ident(predMap[part.realDest]), part.pred));
+ }
+ var predsExitingLoop = new Dictionary<Block, List<Expr>>();
+ foreach (Block exit in LoopsExited(src, target)) {
+ List<Expr> predList;
+ if (!predsExitingLoop.ContainsKey(exit))
+ predList = predsExitingLoop[exit] = new List<Expr>();
+ else
+ predList = predsExitingLoop[exit];
+ predList.Add(part.pred);
+ }
+ foreach (var pred in predsExitingLoop) {
+ PredicateCmd(p == null ? part.pred : Expr.And(p, part.pred), Expr.True, cmdSeq,
+ Cmd.SimpleAssign(Token.NoToken,
+ Expr.Ident(predMap[pred.Key]),
+ Expr.Not(pred.Value.Aggregate(Expr.Or))));
+ }
+ }
+ }
+ } else if (cmd is ReturnCmd) {
+ // Blocks which end in a return will never share a predicate with a block
+ // which appears after it. Furthermore, such a block cannot be part of a
+ // loop. So it is safe to do nothing here.
+ } else {
+ Console.WriteLine("Unsupported cmd: " + cmd.GetType().ToString());
+ }
+ }
+
+ Variable FreshPredicate(ref int predCount) {
+ var pVar = new LocalVariable(Token.NoToken,
+ new TypedIdent(Token.NoToken,
+ "p" + predCount++,
+ Microsoft.Boogie.Type.Bool));
+ impl.LocVars.Add(pVar);
+ return pVar;
+ }
+
+ void AssignPredicates(Graph<Block> blockGraph,
+ DomRelation<Block> dom,
+ DomRelation<Block> pdom,
+ IEnumerable<Block> headerDominance,
+ IEnumerator<Tuple<Block, bool>> i,
+ Variable headPredicate,
+ ref int predCount) {
+ var header = i.Current.Item1;
+ var regionPreds = new List<Tuple<Block, Variable>>();
+ var ownedPreds = new HashSet<Variable>();
+ ownedMap[header] = ownedPreds;
+
+ if (headPredicate != null) {
+ predMap[header] = headPredicate;
+ defMap[header] = headPredicate;
+ regionPreds.Add(new Tuple<Block, Variable>(header, headPredicate));
+ }
+
+ while (i.MoveNext()) {
+ var block = i.Current;
+
+ if (block.Item2) {
+ if (block.Item1 == header) {
+ return;
+ }
+ }
+
+ if (uni != null && uni.IsUniform(impl.Name, block.Item1)) {
+ if (blockGraph.Headers.Contains(block.Item1)) {
+ parentMap[block.Item1] = header;
+ AssignPredicates(blockGraph, dom, pdom, headerDominance, i, headPredicate, ref predCount);
+ }
+ continue;
+ }
+
+ if (!block.Item2) {
+ if (blockGraph.Headers.Contains(block.Item1)) {
+ parentMap[block.Item1] = header;
+ var loopPred = FreshPredicate(ref predCount);
+ ownedPreds.Add(loopPred);
+ AssignPredicates(blockGraph, dom, pdom, headerDominance, i, loopPred, ref predCount);
+ } else {
+ bool foundExisting = false;
+ foreach (var regionPred in regionPreds) {
+ if (dom.DominatedBy(block.Item1, regionPred.Item1) &&
+ pdom.DominatedBy(regionPred.Item1, block.Item1)) {
+ predMap[block.Item1] = regionPred.Item2;
+ foundExisting = true;
+ break;
+ }
+ }
+ if (!foundExisting) {
+ var condPred = FreshPredicate(ref predCount);
+ predMap[block.Item1] = condPred;
+ defMap[block.Item1] = condPred;
+ var headerIterator = headerDominance.GetEnumerator();
+ // Add the predicate to the loop header H that dominates the node (if one
+ // exists) such that H does not dominate another header which also dominates
+ // the node. Since predicates are owned by loop headers (or the program entry
+ // node), this is the block 'closest' to block to which we are assigning a
+ // that can be made to own the predicate.
+ Block node = null;
+ while (headerIterator.MoveNext()) {
+ var current = headerIterator.Current;
+ if (dom.DominatedBy(block.Item1, current)) {
+ node = current;
+ break;
+ }
+ }
+ if (node != null) {
+ ownedMap[node].Add(condPred);
+ } else {
+ // In this case the header is the program entry node.
+ ownedPreds.Add(condPred);
+ }
+ regionPreds.Add(new Tuple<Block, Variable>(block.Item1, condPred));
+ }
+ }
+ }
+ }
+ }
+
+ void AssignPredicates() {
+ DomRelation<Block> dom = blockGraph.DominatorMap;
+
+ Graph<Block> dualGraph = blockGraph.Dual(new Block());
+ DomRelation<Block> pdom = dualGraph.DominatorMap;
+ IEnumerable<Block> headerDominance = blockGraph.SortHeadersByDominance();
+
+ var iter = sortedBlocks.GetEnumerator();
+ if (!iter.MoveNext()) {
+ predMap = defMap = null;
+ ownedMap = null;
+ return;
+ }
+
+ int predCount = 0;
+ predMap = new Dictionary<Block, Variable>();
+ defMap = new Dictionary<Block, Variable>();
+ ownedMap = new Dictionary<Block, HashSet<Variable>>();
+ parentMap = new Dictionary<Block, Block>();
+ AssignPredicates(blockGraph, dom, pdom, headerDominance, iter,
+ myUseProcedurePredicates ? impl.InParams[0] : null,
+ ref predCount);
+ }
+
+ IEnumerable<Block> LoopsExited(Block src, Block dest) {
+ var i = sortedBlocks.GetEnumerator();
+ while (i.MoveNext()) {
+ var b = i.Current;
+ if (b.Item1 == src) {
+ return LoopsExitedForwardEdge(dest, i);
+ } else if (b.Item1 == dest) {
+ return LoopsExitedBackEdge(src, i);
+ }
+ }
+ Debug.Assert(false);
+ return null;
+ }
+
+ private IEnumerable<Block> LoopsExitedBackEdge(Block src, IEnumerator<Tuple<Block, bool>> i) {
+ var headsSeen = new HashSet<Block>();
+ while (i.MoveNext()) {
+ var b = i.Current;
+ if (!b.Item2 && blockGraph.Headers.Contains(b.Item1))
+ headsSeen.Add(b.Item1);
+ else if (b.Item2)
+ headsSeen.Remove(b.Item1);
+ if (b.Item1 == src)
+ return headsSeen;
+ }
+ Debug.Assert(false);
+ return null;
+ }
+
+ private IEnumerable<Block> LoopsExitedForwardEdge(Block dest, IEnumerator<Tuple<Block, bool>> i) {
+ var headsSeen = new HashSet<Block>();
+ while (i.MoveNext()) {
+ var b = i.Current;
+ if (b.Item1 == dest)
+ yield break;
+ else if (!b.Item2 && blockGraph.Headers.Contains(b.Item1))
+ headsSeen.Add(b.Item1);
+ else if (b.Item2 && !headsSeen.Contains(b.Item1))
+ yield return b.Item1;
+ }
+ Debug.Assert(false);
+ }
+
+ class PartInfo {
+ public PartInfo(Expr p, Block r) { pred = p; realDest = r; }
+ public Expr pred;
+ public Block realDest;
+ }
+
+ Dictionary<Block, PartInfo> BuildPartitionInfo() {
+ var partInfo = new Dictionary<Block, PartInfo>();
+ foreach (var block in blockGraph.Nodes) {
+ if (uni.IsUniform(impl.Name, block))
+ continue;
+
+ var parts = block.Cmds.Cast<Cmd>().TakeWhile(
+ c => c is AssumeCmd &&
+ QKeyValue.FindBoolAttribute(((AssumeCmd)c).Attributes, "partition"));
+
+ Expr pred = null;
+ if (parts.Count() > 0) {
+ pred = parts.Select(a => ((AssumeCmd)a).Expr).Aggregate(Expr.And);
+ block.Cmds =
+ new List<Cmd>(block.Cmds.Cast<Cmd>().Skip(parts.Count()).ToArray());
+ } else {
+ continue;
+ }
+
+ Block realDest = block;
+ if (block.Cmds.Count == 0) {
+ var gc = block.TransferCmd as GotoCmd;
+ if (gc != null && gc.labelTargets.Count == 1)
+ realDest = gc.labelTargets[0];
+ }
+ partInfo[block] = new PartInfo(pred, realDest);
+ }
+
+ return partInfo;
+ }
+
+ Block FindImmediateDominator(Block block) {
+ Block predecessor = null;
+ foreach(var pred in blockGraph.Predecessors(block)) {
+ if (!blockGraph.DominatorMap.DominatedBy(pred, block)) {
+ if (predecessor == null)
+ predecessor = pred;
+ else
+ predecessor = blockGraph.DominatorMap.LeastCommonAncestor(pred, predecessor);
+ }
+ }
+ return predecessor;
+ }
+
+ void PredicateImplementation() {
+ blockGraph = prog.ProcessLoops(impl);
+ sortedBlocks = blockGraph.LoopyTopSort();
+
+ AssignPredicates();
+ partInfo = BuildPartitionInfo();
+
+ if (myUseProcedurePredicates)
+ fp = Expr.Ident(impl.InParams[0]);
+
+ var newBlocks = new List<Block>();
+ Block prevBlock = null;
+ foreach (var n in sortedBlocks) {
+ if (predMap.ContainsKey(n.Item1)) {
+ var p = predMap[n.Item1];
+ var pExpr = Expr.Ident(p);
+
+ if (n.Item2) {
+ var dominator = FindImmediateDominator(n.Item1);
+ if (dominator != null && predMap.ContainsKey(dominator)) {
+ AssumeCmd aCmd = new AssumeCmd(Token.NoToken, Expr.True);
+ aCmd.Attributes = new QKeyValue(Token.NoToken, "dominator_predicate", new List<object>() { predMap[dominator].ToString() }, aCmd.Attributes);
+ aCmd.Attributes = new QKeyValue(Token.NoToken, "predicate", new List<object>() { predMap[n.Item1].ToString() }, aCmd.Attributes);
+ n.Item1.Cmds.Insert(0, aCmd);
+ }
+
+ var backedgeBlock = new Block();
+ newBlocks.Add(backedgeBlock);
+
+ backedgeBlock.Label = n.Item1.Label + ".backedge";
+ backedgeBlock.Cmds = new List<Cmd> { new AssumeCmd(Token.NoToken, pExpr,
+ new QKeyValue(Token.NoToken, "backedge", new List<object>(), null)) };
+ backedgeBlock.TransferCmd = new GotoCmd(Token.NoToken,
+ new List<Block> { n.Item1 });
+
+ var tailBlock = new Block();
+ newBlocks.Add(tailBlock);
+
+ tailBlock.Label = n.Item1.Label + ".tail";
+ tailBlock.Cmds = new List<Cmd> { new AssumeCmd(Token.NoToken,
+ Expr.Not(pExpr)) };
+
+ if (uni != null && !uni.IsUniform(impl.Name, n.Item1)) {
+ uni.AddNonUniform(impl.Name, backedgeBlock);
+ uni.AddNonUniform(impl.Name, tailBlock);
+ }
+
+ if (prevBlock != null)
+ prevBlock.TransferCmd = new GotoCmd(Token.NoToken,
+ new List<Block> { backedgeBlock, tailBlock });
+ prevBlock = tailBlock;
+ } else {
+ PredicateBlock(pExpr, n.Item1, newBlocks, ref prevBlock);
+ }
+ } else {
+ if (!n.Item2) {
+ PredicateBlock(null, n.Item1, newBlocks, ref prevBlock);
+ }
+ }
+ }
+
+ if (prevBlock != null)
+ prevBlock.TransferCmd = new ReturnCmd(Token.NoToken);
+
+ impl.Blocks = newBlocks;
+ }
+
+ private void PredicateBlock(Expr pExpr, Block block, List<Block> newBlocks, ref Block prevBlock) {
+ var firstBlock = block;
+
+ var oldCmdSeq = block.Cmds;
+ block.Cmds = new List<Cmd>();
+ newBlocks.Add(block);
+ if (prevBlock != null && !((prevBlock.TransferCmd is ReturnCmd) && uni != null && uni.IsUniform(impl.Name, block))) {
+ prevBlock.TransferCmd = new GotoCmd(Token.NoToken, new List<Block> { block });
+ }
+
+ Block currentBlock = block;
+ Expr pCurrentExpr = pExpr;
+ while (parentMap.ContainsKey(currentBlock)) {
+ Block parent = parentMap[currentBlock];
+ Expr pParentExpr = null;
+ if (predMap.ContainsKey(parent)) {
+ var parentPred = predMap[parent];
+ if (parentPred != null) {
+ pParentExpr = Expr.Ident(parentPred);
+ block.Cmds.Add(new AssertCmd(Token.NoToken,
+ pCurrentExpr != null ? (Expr)Expr.Imp(pCurrentExpr, pParentExpr)
+ : pParentExpr));
+ }
+ }
+ currentBlock = parent;
+ pCurrentExpr = pParentExpr;
+ }
+
+ Block dominator = FindImmediateDominator(block);
+ Expr pDomExpr = Expr.True;
+ if (dominator != null && predMap.ContainsKey(dominator))
+ pDomExpr = new IdentifierExpr(Token.NoToken, predMap[dominator]);
+ var transferCmd = block.TransferCmd;
+ foreach (Cmd cmd in oldCmdSeq)
+ PredicateCmd(pExpr, pDomExpr, newBlocks, block, cmd, out block);
+
+ if (ownedMap.ContainsKey(firstBlock)) {
+ var owned = ownedMap[firstBlock];
+ foreach (var v in owned)
+ block.Cmds.Add(Cmd.SimpleAssign(Token.NoToken, Expr.Ident(v), Expr.False));
+ }
+
+ bool hasPredicatedRegion;
+ PredicateTransferCmd(pExpr, block, block.Cmds, transferCmd, out hasPredicatedRegion);
+
+ if (hasPredicatedRegion)
+ prevBlock = block;
+ else
+ prevBlock = null;
+
+ doneBlocks.Add(block);
+ }
+
+ private Expr CreateIfFPThenElse(Expr then, Expr eElse) {
+ if (myUseProcedurePredicates) {
+ return new NAryExpr(Token.NoToken,
+ new IfThenElse(Token.NoToken),
+ new List<Expr> { fp, then, eElse });
+ } else {
+ return then;
+ }
+ }
+
+ public static void Predicate(Program p,
+ Func<Procedure, bool> useProcedurePredicates = null,
+ UniformityAnalyser uni = null) {
+ useProcedurePredicates = useProcedurePredicates ?? (proc => false);
+ if (uni != null) {
+ var oldUPP = useProcedurePredicates;
+ useProcedurePredicates = proc => oldUPP(proc) && !uni.IsUniform(proc.Name);
+ }
+
+ foreach (var decl in p.TopLevelDeclarations.ToList()) {
+ if (decl is Procedure || decl is Implementation) {
+ var proc = decl as Procedure;
+ Implementation impl = null;
+ if (proc == null) {
+ impl = (Implementation)decl;
+ proc = impl.Proc;
+ }
+
+ bool upp = useProcedurePredicates(proc);
+ if (upp) {
+ var dwf = (DeclWithFormals)decl;
+ var fpVar = new Formal(Token.NoToken,
+ new TypedIdent(Token.NoToken, "_P",
+ Microsoft.Boogie.Type.Bool),
+ /*incoming=*/true);
+ dwf.InParams = new List<Variable>(
+ (new Variable[] {fpVar}.Concat(dwf.InParams.Cast<Variable>()))
+ .ToArray());
+
+ if (impl == null) {
+ var fpIdentifierExpr = new IdentifierExpr(Token.NoToken, fpVar);
+ foreach (Requires r in proc.Requires) {
+ new EnabledReplacementVisitor(fpIdentifierExpr, Expr.True).VisitExpr(r.Condition);
+ if (!QKeyValue.FindBoolAttribute(r.Attributes, "do_not_predicate")) {
+ r.Condition = Expr.Imp(fpIdentifierExpr, r.Condition);
+ }
+ }
+ foreach (Ensures e in proc.Ensures) {
+ new EnabledReplacementVisitor(new IdentifierExpr(Token.NoToken, fpVar), Expr.True).VisitExpr(e.Condition);
+ if (!QKeyValue.FindBoolAttribute(e.Attributes, "do_not_predicate")) {
+ e.Condition = Expr.Imp(fpIdentifierExpr, e.Condition);
+ }
+ }
+ }
+ } else {
+ if (impl == null) {
+ foreach (Requires r in proc.Requires) {
+ new EnabledReplacementVisitor(Expr.True, Expr.True).VisitExpr(r.Condition);
+ }
+ foreach (Ensures e in proc.Ensures) {
+ new EnabledReplacementVisitor(Expr.True, Expr.True).VisitExpr(e.Condition);
+ }
+ }
+ }
+
+ if (impl != null) {
+ try {
+ new SmartBlockPredicator(p, impl, useProcedurePredicates, uni).PredicateImplementation();
+ } catch (Program.IrreducibleLoopException) { }
+ }
+ }
+ }
+ }
+
+ public static void Predicate(Program p, Implementation impl) {
+ try {
+ new SmartBlockPredicator(p, impl, proc => false, null).PredicateImplementation();
+ }
+ catch (Program.IrreducibleLoopException) { }
+ }
+
+}
+
+class EnabledReplacementVisitor : StandardVisitor
+{
+ private Expr pExpr;
+ private Expr pDomExpr;
+
+ internal EnabledReplacementVisitor(Expr pExpr, Expr pDomExpr)
+ {
+ this.pExpr = pExpr;
+ this.pDomExpr = pDomExpr;
+ }
+
+ public override Expr VisitExpr(Expr node)
+ {
+ if (node is IdentifierExpr)
+ {
+ IdentifierExpr iExpr = node as IdentifierExpr;
+ if (iExpr.Decl is Constant && QKeyValue.FindBoolAttribute(iExpr.Decl.Attributes, "__enabled"))
+ {
+ return pExpr;
+ } else if (iExpr.Decl is Constant && QKeyValue.FindBoolAttribute(iExpr.Decl.Attributes, "__dominator_enabled"))
+ {
+ return pDomExpr;
+ }
+ }
+ return base.VisitExpr(node);
+ }
+}
+
+}
diff --git a/Source/Predication/UniformityAnalyser.cs b/Source/Predication/UniformityAnalyser.cs
index ff298942..5ab2589f 100644
--- a/Source/Predication/UniformityAnalyser.cs
+++ b/Source/Predication/UniformityAnalyser.cs
@@ -1,541 +1,541 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Boogie;
-using System.Diagnostics;
-using Microsoft.Boogie.GraphUtil;
-
-namespace Microsoft.Boogie
-{
-
- public class UniformityAnalyser
- {
- private Program prog;
-
- private bool doAnalysis;
-
- private ISet<Implementation> entryPoints;
-
- private IEnumerable<Variable> nonUniformVars;
-
- private bool ProcedureChanged;
-
- private Dictionary<string, KeyValuePair<bool, Dictionary<string, bool>>> uniformityInfo;
-
- private Dictionary<string, HashSet<int>> nonUniformLoops;
-
- private Dictionary<string, HashSet<Block>> nonUniformBlocks;
-
- private Dictionary<string, HashSet<int>> loopsWithNonuniformReturn;
-
- private Dictionary<string, List<string>> inParameters;
-
- private Dictionary<string, List<string>> outParameters;
-
- /// <summary>
- /// Simplifies the CFG of the given implementation impl by merging each
- /// basic block with a single predecessor into that predecessor if the
- /// predecessor has a single successor. If a uniformity analyser is
- /// being used then blocks will only be merged if they are both uniform
- /// or both non-uniform
- /// </summary>
- public static void MergeBlocksIntoPredecessors(Program prog, Implementation impl, UniformityAnalyser uni)
- {
- var blockGraph = prog.ProcessLoops(impl);
- var predMap = new Dictionary<Block, Block>();
- foreach (var block in blockGraph.Nodes)
- {
- try
- {
- var pred = blockGraph.Predecessors(block).Single();
- if (blockGraph.Successors(pred).Single() == block &&
- (uni == null ||
- (uni.IsUniform(impl.Name, pred) && uni.IsUniform(impl.Name, block)) ||
- (!uni.IsUniform(impl.Name, pred) && !uni.IsUniform(impl.Name, block))))
- {
- Block predMapping;
- while (predMap.TryGetValue(pred, out predMapping))
- pred = predMapping;
- pred.Cmds.AddRange(block.Cmds);
- pred.TransferCmd = block.TransferCmd;
- impl.Blocks.Remove(block);
- predMap[block] = pred;
- }
- // If Single throws an exception above (i.e. not exactly one pred/succ), skip this block.
- }
- catch (InvalidOperationException) { }
- }
- }
-
- public UniformityAnalyser(Program prog, bool doAnalysis, ISet<Implementation> entryPoints, IEnumerable<Variable> nonUniformVars)
- {
- this.prog = prog;
- this.doAnalysis = doAnalysis;
- this.entryPoints = entryPoints;
- this.nonUniformVars = nonUniformVars;
- uniformityInfo = new Dictionary<string, KeyValuePair<bool, Dictionary<string, bool>>>();
- nonUniformLoops = new Dictionary<string, HashSet<int>>();
- nonUniformBlocks = new Dictionary<string, HashSet<Block>>();
- loopsWithNonuniformReturn = new Dictionary<string, HashSet<int>>();
- inParameters = new Dictionary<string, List<string>>();
- outParameters = new Dictionary<string, List<string>>();
- }
-
- public void Analyse()
- {
- var impls = prog.Implementations;
-
- foreach (var Impl in impls)
- {
- bool uniformProcedure = doAnalysis || entryPoints.Contains(Impl);
-
- uniformityInfo.Add(Impl.Name, new KeyValuePair<bool, Dictionary<string, bool>>
- (uniformProcedure, new Dictionary<string, bool> ()));
-
- nonUniformLoops.Add(Impl.Name, new HashSet<int>());
- loopsWithNonuniformReturn.Add(Impl.Name, new HashSet<int>());
-
- foreach (var v in nonUniformVars)
- SetNonUniform(Impl.Name, v.Name);
-
- foreach (Variable v in Impl.LocVars)
- {
- if (doAnalysis)
- {
- SetUniform(Impl.Name, v.Name);
- }
- else
- {
- SetNonUniform(Impl.Name, v.Name);
- }
- }
-
- inParameters[Impl.Name] = new List<string>();
-
- foreach (Variable v in Impl.InParams)
- {
- inParameters[Impl.Name].Add(v.Name);
- if (doAnalysis)
- {
- SetUniform(Impl.Name, v.Name);
- }
- else
- {
- SetNonUniform(Impl.Name, v.Name);
- }
- }
-
- outParameters[Impl.Name] = new List<string>();
- foreach (Variable v in Impl.OutParams)
- {
- outParameters[Impl.Name].Add(v.Name);
- if (doAnalysis)
- {
- SetUniform(Impl.Name, v.Name);
- }
- else
- {
- SetNonUniform(Impl.Name, v.Name);
- }
- }
-
- ProcedureChanged = true;
- }
-
- var procs = prog.Procedures;
-
- foreach (var Proc in procs) {
-
- if (uniformityInfo.ContainsKey(Proc.Name)) {
- continue;
- }
-
- bool uniformProcedure = doAnalysis;
-
- uniformityInfo.Add(Proc.Name, new KeyValuePair<bool, Dictionary<string, bool>>
- (uniformProcedure, new Dictionary<string, bool>()));
-
- inParameters[Proc.Name] = new List<string>();
-
- foreach (Variable v in Proc.InParams) {
- inParameters[Proc.Name].Add(v.Name);
- if (doAnalysis) {
- SetUniform(Proc.Name, v.Name);
- }
- else {
- SetNonUniform(Proc.Name, v.Name);
- }
- }
-
- outParameters[Proc.Name] = new List<string>();
- foreach (Variable v in Proc.OutParams) {
- outParameters[Proc.Name].Add(v.Name);
- // We do not have a body for the procedure,
- // so we must assume it produces non-uniform
- // results
- SetNonUniform(Proc.Name, v.Name);
- }
-
- ProcedureChanged = true;
- }
-
-
- if (doAnalysis)
- {
- while (ProcedureChanged)
- {
- ProcedureChanged = false;
-
- foreach (var Impl in impls)
- {
- Analyse(Impl, uniformityInfo[Impl.Name].Key);
- }
- }
- }
-
- foreach (var Proc in procs)
- {
- if (!IsUniform (Proc.Name))
- {
- List<string> newIns = new List<String>();
- newIns.Add("_P");
- foreach (string s in inParameters[Proc.Name])
- {
- newIns.Add(s);
- }
- inParameters[Proc.Name] = newIns;
- }
- }
- }
-
- private void Analyse(Implementation Impl, bool ControlFlowIsUniform)
- {
- if (!ControlFlowIsUniform)
- {
- nonUniformBlocks[Impl.Name] = new HashSet<Block>(Impl.Blocks);
-
- foreach (Variable v in Impl.LocVars) {
- if (IsUniform(Impl.Name, v.Name)) {
- SetNonUniform(Impl.Name, v.Name);
- }
- }
-
- foreach (Variable v in Impl.InParams) {
- if (IsUniform(Impl.Name, v.Name)) {
- SetNonUniform(Impl.Name, v.Name);
- }
- }
-
- foreach (Variable v in Impl.OutParams) {
- if (IsUniform(Impl.Name, v.Name)) {
- SetNonUniform(Impl.Name, v.Name);
- }
- }
-
- foreach (Block b in Impl.Blocks) {
- Analyse(Impl, b.Cmds, false);
- }
-
- return;
- }
-
- Graph<Block> blockGraph = prog.ProcessLoops(Impl);
- var ctrlDep = blockGraph.ControlDependence();
-
- // Compute transitive closure of control dependence info.
- ctrlDep.TransitiveClosure();
-
- var nonUniformBlockSet = new HashSet<Block>();
- nonUniformBlocks[Impl.Name] = nonUniformBlockSet;
-
- bool changed;
- do {
- changed = false;
- foreach (var block in Impl.Blocks) {
- bool uniform = !nonUniformBlockSet.Contains(block);
- bool newUniform = Analyse(Impl, block.Cmds, uniform);
- if (uniform && !newUniform) {
- changed = true;
- nonUniformBlockSet.Add(block);
- Block pred = blockGraph.Predecessors(block).Single();
- if (ctrlDep.ContainsKey(pred))
- nonUniformBlockSet.UnionWith(ctrlDep[pred]);
- }
- }
- } while (changed);
- }
-
- private Procedure GetProcedure(string procedureName)
- {
- foreach (var p in prog.Procedures)
- {
- if (p.Name == procedureName)
- {
- return p;
- }
- }
- Debug.Assert(false);
- return null;
- }
-
- private bool Analyse(Implementation impl, List<Cmd> cmdSeq, bool ControlFlowIsUniform)
- {
- foreach (Cmd c in cmdSeq)
- {
- if (c is AssignCmd)
- {
- AssignCmd assignCmd = c as AssignCmd;
- foreach (var a in assignCmd.Lhss.Zip(assignCmd.Rhss))
- {
-
- if (a.Item1 is SimpleAssignLhs)
- {
- SimpleAssignLhs lhs = a.Item1 as SimpleAssignLhs;
- Expr rhs = a.Item2;
- if (IsUniform(impl.Name, lhs.AssignedVariable.Name) &&
- (!ControlFlowIsUniform || !IsUniform(impl.Name, rhs)))
- {
- SetNonUniform(impl.Name, lhs.AssignedVariable.Name);
- }
-
- }
- }
- }
- else if (c is HavocCmd)
- {
- HavocCmd havocCmd = c as HavocCmd;
- foreach(IdentifierExpr ie in havocCmd.Vars)
- {
- if(IsUniform(impl.Name, ie.Decl.Name)) {
- SetNonUniform(impl.Name, ie.Decl.Name);
- }
- }
- }
- else if (c is CallCmd)
- {
- CallCmd callCmd = c as CallCmd;
- DeclWithFormals Callee = GetProcedure(callCmd.callee);
- Debug.Assert(Callee != null);
-
- if (!ControlFlowIsUniform)
- {
- if (IsUniform(callCmd.callee))
- {
- SetNonUniform(callCmd.callee);
- }
- }
- for (int i = 0; i < Callee.InParams.Count; i++)
- {
- if (IsUniform(callCmd.callee, Callee.InParams[i].Name)
- && !IsUniform(impl.Name, callCmd.Ins[i]))
- {
- SetNonUniform(callCmd.callee, Callee.InParams[i].Name);
- }
- }
-
- for (int i = 0; i < Callee.OutParams.Count; i++)
- {
- if (IsUniform(impl.Name, callCmd.Outs[i].Name)
- && !IsUniform(callCmd.callee, Callee.OutParams[i].Name))
- {
- SetNonUniform(impl.Name, callCmd.Outs[i].Name);
- }
- }
-
- }
- else if (c is AssumeCmd)
- {
- var ac = (AssumeCmd)c;
- if (ControlFlowIsUniform && QKeyValue.FindBoolAttribute(ac.Attributes, "partition") &&
- !IsUniform(impl.Name, ac.Expr))
- {
- ControlFlowIsUniform = false;
- }
- }
- }
-
- return ControlFlowIsUniform;
- }
-
- private int GetLoopId(WhileCmd wc)
- {
- AssertCmd inv = wc.Invariants[0] as AssertCmd;
- Debug.Assert(inv.Attributes.Key.Contains("loophead_"));
- return Convert.ToInt32(inv.Attributes.Key.Substring("loophead_".Length));
- }
-
- private void SetNonUniform(string procedureName)
- {
- uniformityInfo[procedureName] = new KeyValuePair<bool,Dictionary<string,bool>>
- (false, uniformityInfo[procedureName].Value);
- RecordProcedureChanged();
- }
-
- private void SetNonUniform(string procedureName, WhileCmd wc)
- {
- nonUniformLoops[procedureName].Add(GetLoopId(wc));
- RecordProcedureChanged();
- }
-
- public bool IsUniform(string procedureName)
- {
- if (!uniformityInfo.ContainsKey(procedureName))
- {
- return false;
- }
- return uniformityInfo[procedureName].Key;
- }
-
- public bool IsUniform(string procedureName, Block b)
- {
- if (!nonUniformBlocks.ContainsKey(procedureName))
- {
- return false;
- }
- return !nonUniformBlocks[procedureName].Contains(b);
- }
-
- class UniformExpressionAnalysisVisitor : ReadOnlyVisitor {
-
- private bool isUniform = true;
- private Dictionary<string, bool> uniformityInfo;
-
- public UniformExpressionAnalysisVisitor(Dictionary<string, bool> uniformityInfo) {
- this.uniformityInfo = uniformityInfo;
- }
-
- public override Variable VisitVariable(Variable v) {
- if (!uniformityInfo.ContainsKey(v.Name)) {
- isUniform = isUniform && (v is Constant);
- } else if (!uniformityInfo[v.Name]) {
- isUniform = false;
- }
-
- return v;
- }
-
- internal bool IsUniform() {
- return isUniform;
- }
- }
-
- public bool IsUniform(string procedureName, Expr expr)
- {
- if (!uniformityInfo.ContainsKey(procedureName))
- {
- return false;
- }
-
- UniformExpressionAnalysisVisitor visitor = new UniformExpressionAnalysisVisitor(uniformityInfo[procedureName].Value);
- visitor.VisitExpr(expr);
- return visitor.IsUniform();
- }
-
- public bool IsUniform(string procedureName, string v)
- {
- if (!uniformityInfo.ContainsKey(procedureName))
- {
- return false;
- }
-
- if (!uniformityInfo[procedureName].Value.ContainsKey(v))
- {
- return false;
- }
- return uniformityInfo[procedureName].Value[v];
- }
-
- private void SetUniform(string procedureName, string v)
- {
- uniformityInfo[procedureName].Value[v] = true;
- RecordProcedureChanged();
- }
-
- private void RecordProcedureChanged()
- {
- ProcedureChanged = true;
- }
-
- private void SetNonUniform(string procedureName, string v)
- {
- uniformityInfo[procedureName].Value[v] = false;
- RecordProcedureChanged();
- }
-
- public void dump()
- {
- foreach (string p in uniformityInfo.Keys)
- {
- Console.WriteLine("Procedure " + p + ": "
- + (uniformityInfo[p].Key ? "uniform" : "nonuniform"));
- foreach (string v in uniformityInfo[p].Value.Keys)
- {
- Console.WriteLine(" " + v + ": " +
- (uniformityInfo[p].Value[v] ? "uniform" : "nonuniform"));
- }
- Console.Write("Ins [");
- for (int i = 0; i < inParameters[p].Count; i++)
- {
- Console.Write((i == 0 ? "" : ", ") + inParameters[p][i]);
- }
- Console.WriteLine("]");
- Console.Write("Outs [");
- for (int i = 0; i < outParameters[p].Count; i++)
- {
- Console.Write((i == 0 ? "" : ", ") + outParameters[p][i]);
- }
- Console.WriteLine("]");
- if (nonUniformLoops.ContainsKey(p)) {
- Console.Write("Non-uniform loops:");
- foreach (int l in nonUniformLoops[p]) {
- Console.Write(" " + l);
- }
- Console.WriteLine();
- }
- if (nonUniformBlocks.ContainsKey(p)) {
- Console.Write("Non-uniform blocks:");
- foreach (Block b in nonUniformBlocks[p]) {
- Console.Write(" " + b.Label);
- }
- Console.WriteLine();
- }
- }
- }
-
-
- public string GetInParameter(string procName, int i)
- {
- return inParameters[procName][i];
- }
-
- public string GetOutParameter(string procName, int i)
- {
- return outParameters[procName][i];
- }
-
-
- public bool knowsOf(string p)
- {
- return uniformityInfo.ContainsKey(p);
- }
-
- public void AddNonUniform(string proc, string v)
- {
- if (uniformityInfo.ContainsKey(proc))
- {
- Debug.Assert(!uniformityInfo[proc].Value.ContainsKey(v));
- uniformityInfo[proc].Value[v] = false;
- }
- }
-
- public void AddNonUniform(string proc, Block b) {
- if (nonUniformBlocks.ContainsKey(proc)) {
- Debug.Assert(!nonUniformBlocks[proc].Contains(b));
- nonUniformBlocks[proc].Add(b);
- }
- }
-
- }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Boogie;
+using System.Diagnostics;
+using Microsoft.Boogie.GraphUtil;
+
+namespace Microsoft.Boogie
+{
+
+ public class UniformityAnalyser
+ {
+ private Program prog;
+
+ private bool doAnalysis;
+
+ private ISet<Implementation> entryPoints;
+
+ private IEnumerable<Variable> nonUniformVars;
+
+ private bool ProcedureChanged;
+
+ private Dictionary<string, KeyValuePair<bool, Dictionary<string, bool>>> uniformityInfo;
+
+ private Dictionary<string, HashSet<int>> nonUniformLoops;
+
+ private Dictionary<string, HashSet<Block>> nonUniformBlocks;
+
+ private Dictionary<string, HashSet<int>> loopsWithNonuniformReturn;
+
+ private Dictionary<string, List<string>> inParameters;
+
+ private Dictionary<string, List<string>> outParameters;
+
+ /// <summary>
+ /// Simplifies the CFG of the given implementation impl by merging each
+ /// basic block with a single predecessor into that predecessor if the
+ /// predecessor has a single successor. If a uniformity analyser is
+ /// being used then blocks will only be merged if they are both uniform
+ /// or both non-uniform
+ /// </summary>
+ public static void MergeBlocksIntoPredecessors(Program prog, Implementation impl, UniformityAnalyser uni)
+ {
+ var blockGraph = prog.ProcessLoops(impl);
+ var predMap = new Dictionary<Block, Block>();
+ foreach (var block in blockGraph.Nodes)
+ {
+ try
+ {
+ var pred = blockGraph.Predecessors(block).Single();
+ if (blockGraph.Successors(pred).Single() == block &&
+ (uni == null ||
+ (uni.IsUniform(impl.Name, pred) && uni.IsUniform(impl.Name, block)) ||
+ (!uni.IsUniform(impl.Name, pred) && !uni.IsUniform(impl.Name, block))))
+ {
+ Block predMapping;
+ while (predMap.TryGetValue(pred, out predMapping))
+ pred = predMapping;
+ pred.Cmds.AddRange(block.Cmds);
+ pred.TransferCmd = block.TransferCmd;
+ impl.Blocks.Remove(block);
+ predMap[block] = pred;
+ }
+ // If Single throws an exception above (i.e. not exactly one pred/succ), skip this block.
+ }
+ catch (InvalidOperationException) { }
+ }
+ }
+
+ public UniformityAnalyser(Program prog, bool doAnalysis, ISet<Implementation> entryPoints, IEnumerable<Variable> nonUniformVars)
+ {
+ this.prog = prog;
+ this.doAnalysis = doAnalysis;
+ this.entryPoints = entryPoints;
+ this.nonUniformVars = nonUniformVars;
+ uniformityInfo = new Dictionary<string, KeyValuePair<bool, Dictionary<string, bool>>>();
+ nonUniformLoops = new Dictionary<string, HashSet<int>>();
+ nonUniformBlocks = new Dictionary<string, HashSet<Block>>();
+ loopsWithNonuniformReturn = new Dictionary<string, HashSet<int>>();
+ inParameters = new Dictionary<string, List<string>>();
+ outParameters = new Dictionary<string, List<string>>();
+ }
+
+ public void Analyse()
+ {
+ var impls = prog.Implementations;
+
+ foreach (var Impl in impls)
+ {
+ bool uniformProcedure = doAnalysis || entryPoints.Contains(Impl);
+
+ uniformityInfo.Add(Impl.Name, new KeyValuePair<bool, Dictionary<string, bool>>
+ (uniformProcedure, new Dictionary<string, bool> ()));
+
+ nonUniformLoops.Add(Impl.Name, new HashSet<int>());
+ loopsWithNonuniformReturn.Add(Impl.Name, new HashSet<int>());
+
+ foreach (var v in nonUniformVars)
+ SetNonUniform(Impl.Name, v.Name);
+
+ foreach (Variable v in Impl.LocVars)
+ {
+ if (doAnalysis)
+ {
+ SetUniform(Impl.Name, v.Name);
+ }
+ else
+ {
+ SetNonUniform(Impl.Name, v.Name);
+ }
+ }
+
+ inParameters[Impl.Name] = new List<string>();
+
+ foreach (Variable v in Impl.InParams)
+ {
+ inParameters[Impl.Name].Add(v.Name);
+ if (doAnalysis)
+ {
+ SetUniform(Impl.Name, v.Name);
+ }
+ else
+ {
+ SetNonUniform(Impl.Name, v.Name);
+ }
+ }
+
+ outParameters[Impl.Name] = new List<string>();
+ foreach (Variable v in Impl.OutParams)
+ {
+ outParameters[Impl.Name].Add(v.Name);
+ if (doAnalysis)
+ {
+ SetUniform(Impl.Name, v.Name);
+ }
+ else
+ {
+ SetNonUniform(Impl.Name, v.Name);
+ }
+ }
+
+ ProcedureChanged = true;
+ }
+
+ var procs = prog.Procedures;
+
+ foreach (var Proc in procs) {
+
+ if (uniformityInfo.ContainsKey(Proc.Name)) {
+ continue;
+ }
+
+ bool uniformProcedure = doAnalysis;
+
+ uniformityInfo.Add(Proc.Name, new KeyValuePair<bool, Dictionary<string, bool>>
+ (uniformProcedure, new Dictionary<string, bool>()));
+
+ inParameters[Proc.Name] = new List<string>();
+
+ foreach (Variable v in Proc.InParams) {
+ inParameters[Proc.Name].Add(v.Name);
+ if (doAnalysis) {
+ SetUniform(Proc.Name, v.Name);
+ }
+ else {
+ SetNonUniform(Proc.Name, v.Name);
+ }
+ }
+
+ outParameters[Proc.Name] = new List<string>();
+ foreach (Variable v in Proc.OutParams) {
+ outParameters[Proc.Name].Add(v.Name);
+ // We do not have a body for the procedure,
+ // so we must assume it produces non-uniform
+ // results
+ SetNonUniform(Proc.Name, v.Name);
+ }
+
+ ProcedureChanged = true;
+ }
+
+
+ if (doAnalysis)
+ {
+ while (ProcedureChanged)
+ {
+ ProcedureChanged = false;
+
+ foreach (var Impl in impls)
+ {
+ Analyse(Impl, uniformityInfo[Impl.Name].Key);
+ }
+ }
+ }
+
+ foreach (var Proc in procs)
+ {
+ if (!IsUniform (Proc.Name))
+ {
+ List<string> newIns = new List<String>();
+ newIns.Add("_P");
+ foreach (string s in inParameters[Proc.Name])
+ {
+ newIns.Add(s);
+ }
+ inParameters[Proc.Name] = newIns;
+ }
+ }
+ }
+
+ private void Analyse(Implementation Impl, bool ControlFlowIsUniform)
+ {
+ if (!ControlFlowIsUniform)
+ {
+ nonUniformBlocks[Impl.Name] = new HashSet<Block>(Impl.Blocks);
+
+ foreach (Variable v in Impl.LocVars) {
+ if (IsUniform(Impl.Name, v.Name)) {
+ SetNonUniform(Impl.Name, v.Name);
+ }
+ }
+
+ foreach (Variable v in Impl.InParams) {
+ if (IsUniform(Impl.Name, v.Name)) {
+ SetNonUniform(Impl.Name, v.Name);
+ }
+ }
+
+ foreach (Variable v in Impl.OutParams) {
+ if (IsUniform(Impl.Name, v.Name)) {
+ SetNonUniform(Impl.Name, v.Name);
+ }
+ }
+
+ foreach (Block b in Impl.Blocks) {
+ Analyse(Impl, b.Cmds, false);
+ }
+
+ return;
+ }
+
+ Graph<Block> blockGraph = prog.ProcessLoops(Impl);
+ var ctrlDep = blockGraph.ControlDependence();
+
+ // Compute transitive closure of control dependence info.
+ ctrlDep.TransitiveClosure();
+
+ var nonUniformBlockSet = new HashSet<Block>();
+ nonUniformBlocks[Impl.Name] = nonUniformBlockSet;
+
+ bool changed;
+ do {
+ changed = false;
+ foreach (var block in Impl.Blocks) {
+ bool uniform = !nonUniformBlockSet.Contains(block);
+ bool newUniform = Analyse(Impl, block.Cmds, uniform);
+ if (uniform && !newUniform) {
+ changed = true;
+ nonUniformBlockSet.Add(block);
+ Block pred = blockGraph.Predecessors(block).Single();
+ if (ctrlDep.ContainsKey(pred))
+ nonUniformBlockSet.UnionWith(ctrlDep[pred]);
+ }
+ }
+ } while (changed);
+ }
+
+ private Procedure GetProcedure(string procedureName)
+ {
+ foreach (var p in prog.Procedures)
+ {
+ if (p.Name == procedureName)
+ {
+ return p;
+ }
+ }
+ Debug.Assert(false);
+ return null;
+ }
+
+ private bool Analyse(Implementation impl, List<Cmd> cmdSeq, bool ControlFlowIsUniform)
+ {
+ foreach (Cmd c in cmdSeq)
+ {
+ if (c is AssignCmd)
+ {
+ AssignCmd assignCmd = c as AssignCmd;
+ foreach (var a in assignCmd.Lhss.Zip(assignCmd.Rhss))
+ {
+
+ if (a.Item1 is SimpleAssignLhs)
+ {
+ SimpleAssignLhs lhs = a.Item1 as SimpleAssignLhs;
+ Expr rhs = a.Item2;
+ if (IsUniform(impl.Name, lhs.AssignedVariable.Name) &&
+ (!ControlFlowIsUniform || !IsUniform(impl.Name, rhs)))
+ {
+ SetNonUniform(impl.Name, lhs.AssignedVariable.Name);
+ }
+
+ }
+ }
+ }
+ else if (c is HavocCmd)
+ {
+ HavocCmd havocCmd = c as HavocCmd;
+ foreach(IdentifierExpr ie in havocCmd.Vars)
+ {
+ if(IsUniform(impl.Name, ie.Decl.Name)) {
+ SetNonUniform(impl.Name, ie.Decl.Name);
+ }
+ }
+ }
+ else if (c is CallCmd)
+ {
+ CallCmd callCmd = c as CallCmd;
+ DeclWithFormals Callee = GetProcedure(callCmd.callee);
+ Debug.Assert(Callee != null);
+
+ if (!ControlFlowIsUniform)
+ {
+ if (IsUniform(callCmd.callee))
+ {
+ SetNonUniform(callCmd.callee);
+ }
+ }
+ for (int i = 0; i < Callee.InParams.Count; i++)
+ {
+ if (IsUniform(callCmd.callee, Callee.InParams[i].Name)
+ && !IsUniform(impl.Name, callCmd.Ins[i]))
+ {
+ SetNonUniform(callCmd.callee, Callee.InParams[i].Name);
+ }
+ }
+
+ for (int i = 0; i < Callee.OutParams.Count; i++)
+ {
+ if (IsUniform(impl.Name, callCmd.Outs[i].Name)
+ && !IsUniform(callCmd.callee, Callee.OutParams[i].Name))
+ {
+ SetNonUniform(impl.Name, callCmd.Outs[i].Name);
+ }
+ }
+
+ }
+ else if (c is AssumeCmd)
+ {
+ var ac = (AssumeCmd)c;
+ if (ControlFlowIsUniform && QKeyValue.FindBoolAttribute(ac.Attributes, "partition") &&
+ !IsUniform(impl.Name, ac.Expr))
+ {
+ ControlFlowIsUniform = false;
+ }
+ }
+ }
+
+ return ControlFlowIsUniform;
+ }
+
+ private int GetLoopId(WhileCmd wc)
+ {
+ AssertCmd inv = wc.Invariants[0] as AssertCmd;
+ Debug.Assert(inv.Attributes.Key.Contains("loophead_"));
+ return Convert.ToInt32(inv.Attributes.Key.Substring("loophead_".Length));
+ }
+
+ private void SetNonUniform(string procedureName)
+ {
+ uniformityInfo[procedureName] = new KeyValuePair<bool,Dictionary<string,bool>>
+ (false, uniformityInfo[procedureName].Value);
+ RecordProcedureChanged();
+ }
+
+ private void SetNonUniform(string procedureName, WhileCmd wc)
+ {
+ nonUniformLoops[procedureName].Add(GetLoopId(wc));
+ RecordProcedureChanged();
+ }
+
+ public bool IsUniform(string procedureName)
+ {
+ if (!uniformityInfo.ContainsKey(procedureName))
+ {
+ return false;
+ }
+ return uniformityInfo[procedureName].Key;
+ }
+
+ public bool IsUniform(string procedureName, Block b)
+ {
+ if (!nonUniformBlocks.ContainsKey(procedureName))
+ {
+ return false;
+ }
+ return !nonUniformBlocks[procedureName].Contains(b);
+ }
+
+ class UniformExpressionAnalysisVisitor : ReadOnlyVisitor {
+
+ private bool isUniform = true;
+ private Dictionary<string, bool> uniformityInfo;
+
+ public UniformExpressionAnalysisVisitor(Dictionary<string, bool> uniformityInfo) {
+ this.uniformityInfo = uniformityInfo;
+ }
+
+ public override Variable VisitVariable(Variable v) {
+ if (!uniformityInfo.ContainsKey(v.Name)) {
+ isUniform = isUniform && (v is Constant);
+ } else if (!uniformityInfo[v.Name]) {
+ isUniform = false;
+ }
+
+ return v;
+ }
+
+ internal bool IsUniform() {
+ return isUniform;
+ }
+ }
+
+ public bool IsUniform(string procedureName, Expr expr)
+ {
+ if (!uniformityInfo.ContainsKey(procedureName))
+ {
+ return false;
+ }
+
+ UniformExpressionAnalysisVisitor visitor = new UniformExpressionAnalysisVisitor(uniformityInfo[procedureName].Value);
+ visitor.VisitExpr(expr);
+ return visitor.IsUniform();
+ }
+
+ public bool IsUniform(string procedureName, string v)
+ {
+ if (!uniformityInfo.ContainsKey(procedureName))
+ {
+ return false;
+ }
+
+ if (!uniformityInfo[procedureName].Value.ContainsKey(v))
+ {
+ return false;
+ }
+ return uniformityInfo[procedureName].Value[v];
+ }
+
+ private void SetUniform(string procedureName, string v)
+ {
+ uniformityInfo[procedureName].Value[v] = true;
+ RecordProcedureChanged();
+ }
+
+ private void RecordProcedureChanged()
+ {
+ ProcedureChanged = true;
+ }
+
+ private void SetNonUniform(string procedureName, string v)
+ {
+ uniformityInfo[procedureName].Value[v] = false;
+ RecordProcedureChanged();
+ }
+
+ public void dump()
+ {
+ foreach (string p in uniformityInfo.Keys)
+ {
+ Console.WriteLine("Procedure " + p + ": "
+ + (uniformityInfo[p].Key ? "uniform" : "nonuniform"));
+ foreach (string v in uniformityInfo[p].Value.Keys)
+ {
+ Console.WriteLine(" " + v + ": " +
+ (uniformityInfo[p].Value[v] ? "uniform" : "nonuniform"));
+ }
+ Console.Write("Ins [");
+ for (int i = 0; i < inParameters[p].Count; i++)
+ {
+ Console.Write((i == 0 ? "" : ", ") + inParameters[p][i]);
+ }
+ Console.WriteLine("]");
+ Console.Write("Outs [");
+ for (int i = 0; i < outParameters[p].Count; i++)
+ {
+ Console.Write((i == 0 ? "" : ", ") + outParameters[p][i]);
+ }
+ Console.WriteLine("]");
+ if (nonUniformLoops.ContainsKey(p)) {
+ Console.Write("Non-uniform loops:");
+ foreach (int l in nonUniformLoops[p]) {
+ Console.Write(" " + l);
+ }
+ Console.WriteLine();
+ }
+ if (nonUniformBlocks.ContainsKey(p)) {
+ Console.Write("Non-uniform blocks:");
+ foreach (Block b in nonUniformBlocks[p]) {
+ Console.Write(" " + b.Label);
+ }
+ Console.WriteLine();
+ }
+ }
+ }
+
+
+ public string GetInParameter(string procName, int i)
+ {
+ return inParameters[procName][i];
+ }
+
+ public string GetOutParameter(string procName, int i)
+ {
+ return outParameters[procName][i];
+ }
+
+
+ public bool knowsOf(string p)
+ {
+ return uniformityInfo.ContainsKey(p);
+ }
+
+ public void AddNonUniform(string proc, string v)
+ {
+ if (uniformityInfo.ContainsKey(proc))
+ {
+ Debug.Assert(!uniformityInfo[proc].Value.ContainsKey(v));
+ uniformityInfo[proc].Value[v] = false;
+ }
+ }
+
+ public void AddNonUniform(string proc, Block b) {
+ if (nonUniformBlocks.ContainsKey(proc)) {
+ Debug.Assert(!nonUniformBlocks[proc].Contains(b));
+ nonUniformBlocks[proc].Add(b);
+ }
+ }
+
+ }
+
+}
diff --git a/Source/Provers/SMTLib/CVC4.cs b/Source/Provers/SMTLib/CVC4.cs
index 0ac2ec20..999ac7b5 100644
--- a/Source/Provers/SMTLib/CVC4.cs
+++ b/Source/Provers/SMTLib/CVC4.cs
@@ -1,71 +1,71 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics.Contracts;
-using System.IO;
-using System.Text.RegularExpressions;
-
-namespace Microsoft.Boogie.SMTLib
-{
- class CVC4
- {
- static string _proverPath;
-
- static string CodebaseString()
- {
- Contract.Ensures(Contract.Result<string>() != null);
- return Path.GetDirectoryName(cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location));
- }
-
- public static string ExecutablePath()
- {
- if (_proverPath == null)
- FindExecutable();
- return _proverPath;
- }
-
- static void FindExecutable()
- // throws ProverException, System.IO.FileNotFoundException;
- {
- Contract.Ensures(_proverPath != null);
-
- // Command line option 'cvc4exe' always has priority if set
- if (CommandLineOptions.Clo.CVC4ExecutablePath != null)
- {
- _proverPath = CommandLineOptions.Clo.CVC4ExecutablePath;
- if (!File.Exists(_proverPath))
- {
- throw new ProverException("Cannot find prover specified with cvc4exe: " + _proverPath);
- }
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("[TRACE] Using prover: " + _proverPath);
- }
- return;
- }
-
- var proverExe = "cvc4.exe";
-
- if (_proverPath == null)
- {
- // Initialize '_proverPath'
- _proverPath = Path.Combine(CodebaseString(), proverExe);
- string firstTry = _proverPath;
-
- if (File.Exists(firstTry))
- {
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("[TRACE] Using prover: " + _proverPath);
- }
- return;
- }
- else
- {
- throw new ProverException("Cannot find executable: " + firstTry);
- }
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace Microsoft.Boogie.SMTLib
+{
+ class CVC4
+ {
+ static string _proverPath;
+
+ static string CodebaseString()
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return Path.GetDirectoryName(cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location));
+ }
+
+ public static string ExecutablePath()
+ {
+ if (_proverPath == null)
+ FindExecutable();
+ return _proverPath;
+ }
+
+ static void FindExecutable()
+ // throws ProverException, System.IO.FileNotFoundException;
+ {
+ Contract.Ensures(_proverPath != null);
+
+ // Command line option 'cvc4exe' always has priority if set
+ if (CommandLineOptions.Clo.CVC4ExecutablePath != null)
+ {
+ _proverPath = CommandLineOptions.Clo.CVC4ExecutablePath;
+ if (!File.Exists(_proverPath))
+ {
+ throw new ProverException("Cannot find prover specified with cvc4exe: " + _proverPath);
+ }
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("[TRACE] Using prover: " + _proverPath);
+ }
+ return;
+ }
+
+ var proverExe = "cvc4.exe";
+
+ if (_proverPath == null)
+ {
+ // Initialize '_proverPath'
+ _proverPath = Path.Combine(CodebaseString(), proverExe);
+ string firstTry = _proverPath;
+
+ if (File.Exists(firstTry))
+ {
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("[TRACE] Using prover: " + _proverPath);
+ }
+ return;
+ }
+ else
+ {
+ throw new ProverException("Cannot find executable: " + firstTry);
+ }
+ }
+ }
+ }
+}
diff --git a/Source/Provers/SMTLib/Inspector.cs b/Source/Provers/SMTLib/Inspector.cs
index 362502f3..13a2076e 100644
--- a/Source/Provers/SMTLib/Inspector.cs
+++ b/Source/Provers/SMTLib/Inspector.cs
@@ -1,157 +1,157 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.IO;
-using System.Diagnostics;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-//using util;
-using Microsoft.Boogie;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie.SMTLib
-{
- internal class FindLabelsVisitor : TraversingVCExprVisitor<bool, bool> {
- public HashSet<string/*!*/>/*!*/ Labels = new HashSet<string/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNull(Labels));
- }
-
-
- public static HashSet<string/*!*/>/*!*/ FindLabels(VCExpr/*!*/ expr) {
- Contract.Requires(expr != null);
- Contract.Ensures(cce.NonNull(Contract.Result<HashSet<string/*!*/>/*!*/>()));
-
- FindLabelsVisitor visitor = new FindLabelsVisitor();
- visitor.Traverse(expr, true);
- return visitor.Labels;
- }
-
- protected override bool StandardResult(VCExpr node, bool arg) {
- //Contract.Requires(node!=null);
- VCExprNAry nary = node as VCExprNAry;
- if (nary != null) {
- VCExprLabelOp lab = nary.Op as VCExprLabelOp;
- if (lab != null) {
- Labels.Add(lab.label);
- }
- }
- return true;
- }
- }
-
- internal class Inspector {
- [Rep] protected readonly Process inspector;
- [Rep] readonly TextReader fromInspector;
- [Rep] readonly TextWriter toInspector;
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(inspector!=null);
- Contract.Invariant(fromInspector!=null);
- Contract.Invariant(toInspector != null);
- }
-
-
- public Inspector(SMTLibProverOptions opts)
- {
- Contract.Requires(opts != null);
- ProcessStartInfo psi = new ProcessStartInfo(opts.Inspector);
- Contract.Assert(psi!=null);
- psi.CreateNoWindow = true;
- psi.UseShellExecute = false;
- psi.RedirectStandardInput = true;
- psi.RedirectStandardOutput = true;
- psi.RedirectStandardError = false;
-
- try
- {
- Process inspector = Process.Start(psi);
- this.inspector = inspector;
- fromInspector = inspector.StandardOutput;
- toInspector = inspector.StandardInput;
- }
- catch (System.ComponentModel.Win32Exception e)
- {
- throw new Exception(string.Format("Unable to start the inspector process {0}: {1}", opts.Inspector, e.Message));
- }
- }
-
- public void NewProblem(string descriptiveName, VCExpr vc, ProverInterface.ErrorHandler handler)
- {
- Contract.Requires(descriptiveName != null);
- Contract.Requires(vc != null);
- Contract.Requires(handler != null);
- HashSet<string/*!*/>/*!*/ labels = FindLabelsVisitor.FindLabels(vc);
- Contract.Assert(labels!=null);
- toInspector.WriteLine("PROBLEM " + descriptiveName);
- toInspector.WriteLine("TOKEN BEGIN");
- foreach (string lab in labels) {
- Contract.Assert(lab!=null);
- string no = lab.Substring(1);
- Absy absy = handler.Label2Absy(no);
-
- IToken tok = absy.tok;
- AssertCmd assrt = absy as AssertCmd;
- Block blk = absy as Block;
- string val = tok.val; // might require computation, so cache it
- if (val == "foo" || tok.filename == null) continue; // no token
-
- toInspector.Write("TOKEN ");
- toInspector.Write(lab);
- toInspector.Write(" ");
-
- if (assrt != null) {
- toInspector.Write("ASSERT");
- string errData = assrt.ErrorData as string;
- if (errData != null) {
- val = errData;
- } else if (assrt.ErrorMessage != null) {
- val = assrt.ErrorMessage;
- }
- } else if (blk != null) {
- toInspector.Write("BLOCK ");
- toInspector.Write(blk.Label);
- } else {
- Contract.Assume( false);
- }
- if (val == null || val == "assert" || val == "ensures") { val = ""; }
-
- if (absy is LoopInitAssertCmd) {
- val += " (loop entry)";
- } else if (absy is LoopInvMaintainedAssertCmd) {
- val += " (loop body)";
- } else if (val.IndexOf("#VCCERR") >= 0) {
- // skip further transformations
- } else if (absy is AssertRequiresCmd) {
- AssertRequiresCmd req = (AssertRequiresCmd)absy;
- IToken t2 = req.Requires.tok;
- string tval = t2.val;
- if (tval == "requires")
- tval = string.Format("{0}({1},{2}))", t2.filename, t2.line, t2.col);
- string call = "";
- if (val != "call") call = " in call to " + val;
- val = string.Format("precondition {0}{1}", tval, call);
- }
-
- val = val.Replace("\r", "").Replace("\n", " ");
-
- toInspector.WriteLine(string.Format(" {0} {1} :@:{2}:@:{3}", tok.line, tok.col, tok.filename, val));
- }
- toInspector.WriteLine("TOKEN END");
- }
-
- public void StatsLine(string line)
- {
- Contract.Requires(line != null);
- toInspector.WriteLine(line);
- toInspector.Flush();
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+//using util;
+using Microsoft.Boogie;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie.SMTLib
+{
+ internal class FindLabelsVisitor : TraversingVCExprVisitor<bool, bool> {
+ public HashSet<string/*!*/>/*!*/ Labels = new HashSet<string/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNull(Labels));
+ }
+
+
+ public static HashSet<string/*!*/>/*!*/ FindLabels(VCExpr/*!*/ expr) {
+ Contract.Requires(expr != null);
+ Contract.Ensures(cce.NonNull(Contract.Result<HashSet<string/*!*/>/*!*/>()));
+
+ FindLabelsVisitor visitor = new FindLabelsVisitor();
+ visitor.Traverse(expr, true);
+ return visitor.Labels;
+ }
+
+ protected override bool StandardResult(VCExpr node, bool arg) {
+ //Contract.Requires(node!=null);
+ VCExprNAry nary = node as VCExprNAry;
+ if (nary != null) {
+ VCExprLabelOp lab = nary.Op as VCExprLabelOp;
+ if (lab != null) {
+ Labels.Add(lab.label);
+ }
+ }
+ return true;
+ }
+ }
+
+ internal class Inspector {
+ [Rep] protected readonly Process inspector;
+ [Rep] readonly TextReader fromInspector;
+ [Rep] readonly TextWriter toInspector;
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(inspector!=null);
+ Contract.Invariant(fromInspector!=null);
+ Contract.Invariant(toInspector != null);
+ }
+
+
+ public Inspector(SMTLibProverOptions opts)
+ {
+ Contract.Requires(opts != null);
+ ProcessStartInfo psi = new ProcessStartInfo(opts.Inspector);
+ Contract.Assert(psi!=null);
+ psi.CreateNoWindow = true;
+ psi.UseShellExecute = false;
+ psi.RedirectStandardInput = true;
+ psi.RedirectStandardOutput = true;
+ psi.RedirectStandardError = false;
+
+ try
+ {
+ Process inspector = Process.Start(psi);
+ this.inspector = inspector;
+ fromInspector = inspector.StandardOutput;
+ toInspector = inspector.StandardInput;
+ }
+ catch (System.ComponentModel.Win32Exception e)
+ {
+ throw new Exception(string.Format("Unable to start the inspector process {0}: {1}", opts.Inspector, e.Message));
+ }
+ }
+
+ public void NewProblem(string descriptiveName, VCExpr vc, ProverInterface.ErrorHandler handler)
+ {
+ Contract.Requires(descriptiveName != null);
+ Contract.Requires(vc != null);
+ Contract.Requires(handler != null);
+ HashSet<string/*!*/>/*!*/ labels = FindLabelsVisitor.FindLabels(vc);
+ Contract.Assert(labels!=null);
+ toInspector.WriteLine("PROBLEM " + descriptiveName);
+ toInspector.WriteLine("TOKEN BEGIN");
+ foreach (string lab in labels) {
+ Contract.Assert(lab!=null);
+ string no = lab.Substring(1);
+ Absy absy = handler.Label2Absy(no);
+
+ IToken tok = absy.tok;
+ AssertCmd assrt = absy as AssertCmd;
+ Block blk = absy as Block;
+ string val = tok.val; // might require computation, so cache it
+ if (val == "foo" || tok.filename == null) continue; // no token
+
+ toInspector.Write("TOKEN ");
+ toInspector.Write(lab);
+ toInspector.Write(" ");
+
+ if (assrt != null) {
+ toInspector.Write("ASSERT");
+ string errData = assrt.ErrorData as string;
+ if (errData != null) {
+ val = errData;
+ } else if (assrt.ErrorMessage != null) {
+ val = assrt.ErrorMessage;
+ }
+ } else if (blk != null) {
+ toInspector.Write("BLOCK ");
+ toInspector.Write(blk.Label);
+ } else {
+ Contract.Assume( false);
+ }
+ if (val == null || val == "assert" || val == "ensures") { val = ""; }
+
+ if (absy is LoopInitAssertCmd) {
+ val += " (loop entry)";
+ } else if (absy is LoopInvMaintainedAssertCmd) {
+ val += " (loop body)";
+ } else if (val.IndexOf("#VCCERR") >= 0) {
+ // skip further transformations
+ } else if (absy is AssertRequiresCmd) {
+ AssertRequiresCmd req = (AssertRequiresCmd)absy;
+ IToken t2 = req.Requires.tok;
+ string tval = t2.val;
+ if (tval == "requires")
+ tval = string.Format("{0}({1},{2}))", t2.filename, t2.line, t2.col);
+ string call = "";
+ if (val != "call") call = " in call to " + val;
+ val = string.Format("precondition {0}{1}", tval, call);
+ }
+
+ val = val.Replace("\r", "").Replace("\n", " ");
+
+ toInspector.WriteLine(string.Format(" {0} {1} :@:{2}:@:{3}", tok.line, tok.col, tok.filename, val));
+ }
+ toInspector.WriteLine("TOKEN END");
+ }
+
+ public void StatsLine(string line)
+ {
+ Contract.Requires(line != null);
+ toInspector.WriteLine(line);
+ toInspector.Flush();
+ }
+ }
+}
diff --git a/Source/Provers/SMTLib/ProverInterface.cs b/Source/Provers/SMTLib/ProverInterface.cs
index 868b9ee3..300fbc10 100644
--- a/Source/Provers/SMTLib/ProverInterface.cs
+++ b/Source/Provers/SMTLib/ProverInterface.cs
@@ -1,2424 +1,2651 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.IO;
-//using ExternalProver;
-using System.Linq;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie;
-using Microsoft.Boogie.VCExprAST;
-using Microsoft.Boogie.Clustering;
-using Microsoft.Boogie.TypeErasure;
-using System.Text;
-
-using RPFP = Microsoft.Boogie.RPFP;
-
-namespace Microsoft.Boogie.SMTLib
-{
- public class SMTLibProcessTheoremProver : ProverInterface
- {
- private readonly SMTLibProverContext ctx;
- private VCExpressionGenerator gen;
- private readonly SMTLibProverOptions options;
- private bool usingUnsatCore;
- private RPFP rpfp = null;
-
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(ctx != null);
- Contract.Invariant(AxBuilder != null);
- Contract.Invariant(Namer != null);
- Contract.Invariant(DeclCollector != null);
- Contract.Invariant(cce.NonNullElements(Axioms));
- Contract.Invariant(cce.NonNullElements(TypeDecls));
- Contract.Invariant(_backgroundPredicates != null);
-
- }
-
-
- [NotDelayed]
- public SMTLibProcessTheoremProver(ProverOptions options, VCExpressionGenerator gen,
- SMTLibProverContext ctx)
- {
- Contract.Requires(options != null);
- Contract.Requires(gen != null);
- Contract.Requires(ctx != null);
-
- InitializeGlobalInformation();
-
- this.options = (SMTLibProverOptions)options;
- this.ctx = ctx;
- this.gen = gen;
- this.usingUnsatCore = false;
-
- SetupAxiomBuilder(gen);
-
- Namer = new SMTLibNamer();
- ctx.parent = this;
- this.DeclCollector = new TypeDeclCollector((SMTLibProverOptions)options, Namer);
-
- if (CommandLineOptions.Clo.PrintFixedPoint != null || CommandLineOptions.Clo.PrintConjectures != null)
- {
- declHandler = new MyDeclHandler();
- DeclCollector.SetDeclHandler(declHandler);
- }
-
- SetupProcess();
-
- if (CommandLineOptions.Clo.StratifiedInlining > 0 || CommandLineOptions.Clo.ContractInfer
- || CommandLineOptions.Clo.SecureVcGen != null)
- {
- // Prepare for ApiChecker usage
- if (options.LogFilename != null && currentLogFile == null)
- {
- currentLogFile = OpenOutputFile("");
- }
- PrepareCommon();
- }
- }
-
- private void SetupAxiomBuilder(VCExpressionGenerator gen)
- {
- switch (CommandLineOptions.Clo.TypeEncodingMethod)
- {
- case CommandLineOptions.TypeEncoding.Arguments:
- AxBuilder = new TypeAxiomBuilderArguments(gen);
- AxBuilder.Setup();
- break;
- case CommandLineOptions.TypeEncoding.Monomorphic:
- AxBuilder = new TypeAxiomBuilderPremisses(gen);
- break;
- default:
- AxBuilder = new TypeAxiomBuilderPremisses(gen);
- AxBuilder.Setup();
- break;
- }
- }
-
- ProcessStartInfo ComputeProcessStartInfo()
- {
- var path = this.options.ProverPath;
- switch (options.Solver) {
- case SolverKind.Z3:
- if (path == null)
- path = Z3.ExecutablePath();
- return SMTLibProcess.ComputerProcessStartInfo(path, "AUTO_CONFIG=false -smt2 -in");
- case SolverKind.CVC4:
- if (path == null)
- path = CVC4.ExecutablePath();
- return SMTLibProcess.ComputerProcessStartInfo(path, "--lang=smt --no-strict-parsing --no-condense-function-values --incremental");
- default:
- Debug.Assert(false);
- return null;
- }
- }
-
- void SetupProcess()
- {
- if (Process != null) return;
-
- var psi = ComputeProcessStartInfo();
- Process = new SMTLibProcess(psi, this.options);
- Process.ErrorHandler += this.HandleProverError;
- }
-
-
- void PossiblyRestart()
- {
- if (Process != null && Process.NeedsRestart) {
- Process.Close();
- Process = null;
- SetupProcess();
- Process.Send(common.ToString());
- }
- }
-
- public override ProverContext Context
- {
- get
- {
- Contract.Ensures(Contract.Result<ProverContext>() != null);
-
- return ctx;
- }
- }
-
- internal TypeAxiomBuilder AxBuilder { get; private set; }
- internal readonly UniqueNamer Namer;
- readonly TypeDeclCollector DeclCollector;
- protected SMTLibProcess Process;
- readonly List<string> proverErrors = new List<string>();
- readonly List<string> proverWarnings = new List<string>();
- readonly StringBuilder common = new StringBuilder();
- protected TextWriter currentLogFile;
- protected volatile ErrorHandler currentErrorHandler;
-
- private void FeedTypeDeclsToProver()
- {
- foreach (string s in DeclCollector.GetNewDeclarations()) {
- Contract.Assert(s != null);
- AddTypeDecl(s);
- }
- }
-
- private string Sanitize(string msg)
- {
- var idx = msg.IndexOf('\n');
- if (idx > 0)
- msg = msg.Replace("\r", "").Replace("\n", "\r\n");
- return msg;
- }
-
- public override void LogComment(string comment)
- {
- SendCommon("; " + comment);
- }
-
- private void SendCommon(string s)
- {
- Send(s, true);
- }
-
- protected void SendThisVC(string s)
- {
- Send(s, false);
- }
-
- private void Send(string s, bool isCommon)
- {
- s = Sanitize(s);
-
- if (isCommon)
- common.Append(s).Append("\r\n");
-
- if (Process != null)
- Process.Send(s);
- if (currentLogFile != null) {
- currentLogFile.WriteLine(s);
- currentLogFile.Flush();
- }
- }
-
- private void FindDependentTypes(Type type, List<CtorType> dependentTypes)
- {
- MapType mapType = type as MapType;
- if (mapType != null)
- {
- foreach (Type t in mapType.Arguments)
- {
- FindDependentTypes(t, dependentTypes);
- }
- FindDependentTypes(mapType.Result, dependentTypes);
- }
- CtorType ctorType = type as CtorType;
- if (ctorType != null && ctx.KnownDatatypeConstructors.ContainsKey(ctorType))
- {
- dependentTypes.Add(ctorType);
- }
- }
-
- private void PrepareCommon()
- {
- if (common.Length == 0)
- {
- SendCommon("(set-option :print-success false)");
- SendCommon("(set-info :smt-lib-version 2.0)");
- if (options.ProduceModel())
- SendCommon("(set-option :produce-models true)");
- foreach (var opt in options.SmtOptions)
- {
- SendCommon("(set-option :" + opt.Option + " " + opt.Value + ")");
- }
-
- if (!string.IsNullOrEmpty(options.Logic))
- {
- SendCommon("(set-logic " + options.Logic + ")");
- }
-
- // Set produce-unsat-cores last. It seems there's a bug in Z3 where if we set it earlier its value
- // gets reset by other set-option commands ( https://z3.codeplex.com/workitem/188 )
- if (CommandLineOptions.Clo.ContractInfer && (CommandLineOptions.Clo.UseUnsatCoreForContractInfer || CommandLineOptions.Clo.ExplainHoudini))
- {
- SendThisVC("(set-option :produce-unsat-cores true)");
- this.usingUnsatCore = true;
- }
-
- SendCommon("; done setting options\n");
- SendCommon(_backgroundPredicates);
-
- if (options.UseTickleBool)
- {
- SendCommon("(declare-fun tickleBool (Bool) Bool)");
- SendCommon("(assert (and (tickleBool true) (tickleBool false)))");
- }
-
- if (ctx.KnownDatatypeConstructors.Count > 0)
- {
- GraphUtil.Graph<CtorType> dependencyGraph = new GraphUtil.Graph<CtorType>();
- foreach (CtorType datatype in ctx.KnownDatatypeConstructors.Keys)
- {
- dependencyGraph.AddSource(datatype);
- foreach (Function f in ctx.KnownDatatypeConstructors[datatype])
- {
- List<CtorType> dependentTypes = new List<CtorType>();
- foreach (Variable v in f.InParams)
- {
- FindDependentTypes(v.TypedIdent.Type, dependentTypes);
- }
- foreach (CtorType result in dependentTypes)
- {
- dependencyGraph.AddEdge(datatype, result);
- }
- }
- }
- GraphUtil.StronglyConnectedComponents<CtorType> sccs = new GraphUtil.StronglyConnectedComponents<CtorType>(dependencyGraph.Nodes, dependencyGraph.Predecessors, dependencyGraph.Successors);
- sccs.Compute();
- foreach (GraphUtil.SCC<CtorType> scc in sccs)
- {
- string datatypeString = "";
- foreach (CtorType datatype in scc)
- {
- datatypeString += "(" + SMTLibExprLineariser.TypeToString(datatype) + " ";
- foreach (Function f in ctx.KnownDatatypeConstructors[datatype])
- {
- string quotedConstructorName = Namer.GetQuotedName(f, f.Name);
- if (f.InParams.Count == 0)
- {
- datatypeString += quotedConstructorName + " ";
- }
- else
- {
- datatypeString += "(" + quotedConstructorName + " ";
- foreach (Variable v in f.InParams)
- {
- string quotedSelectorName = Namer.GetQuotedName(v, v.Name + "#" + f.Name);
- datatypeString += "(" + quotedSelectorName + " " + DeclCollector.TypeToStringReg(v.TypedIdent.Type) + ") ";
- }
- datatypeString += ") ";
- }
- }
- datatypeString += ") ";
- }
- List<string> decls = DeclCollector.GetNewDeclarations();
- foreach (string decl in decls)
- {
- SendCommon(decl);
- }
- SendCommon("(declare-datatypes () (" + datatypeString + "))");
- }
- }
- }
-
- if (!AxiomsAreSetup)
- {
- var axioms = ctx.Axioms;
- var nary = axioms as VCExprNAry;
- if (nary != null && nary.Op == VCExpressionGenerator.AndOp)
- foreach (var expr in nary.UniformArguments)
- {
- var str = VCExpr2String(expr, -1);
- if (str != "true")
- AddAxiom(str);
- }
- else
- AddAxiom(VCExpr2String(axioms, -1));
- AxiomsAreSetup = true;
- }
- }
-
- public override int FlushAxiomsToTheoremProver()
- {
- // we feed the axioms when begincheck is called.
- return 0;
- }
-
- private void FlushAxioms()
- {
- TypeDecls.Iter(SendCommon);
- TypeDecls.Clear();
- foreach (string s in Axioms) {
- Contract.Assert(s != null);
- if (s != "true")
- SendCommon("(assert " + s + ")");
- }
- Axioms.Clear();
- //FlushPushedAssertions();
- }
-
- private void CloseLogFile()
- {
- if (currentLogFile != null) {
- currentLogFile.Close();
- currentLogFile = null;
- }
- }
-
- private void FlushLogFile()
- {
- if (currentLogFile != null) {
- currentLogFile.Flush();
- }
- }
-
- public override void Close()
- {
- base.Close();
- CloseLogFile();
- if (Process != null)
- Process.Close();
- }
-
- public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler)
- {
- //Contract.Requires(descriptiveName != null);
- //Contract.Requires(vc != null);
- //Contract.Requires(handler != null);
- rpfp = null;
-
- if (options.SeparateLogFiles) CloseLogFile(); // shouldn't really happen
-
- if (options.LogFilename != null && currentLogFile == null)
- {
- currentLogFile = OpenOutputFile(descriptiveName);
- currentLogFile.Write(common.ToString());
- }
-
- PrepareCommon();
- string vcString = "(assert (not\n" + VCExpr2String(vc, 1) + "\n))";
- FlushAxioms();
-
- PossiblyRestart();
-
- SendThisVC("(push 1)");
- SendThisVC("(set-info :boogie-vc-id " + SMTLibNamer.QuoteId(descriptiveName) + ")");
- SendThisVC(vcString);
- FlushLogFile();
-
- if (Process != null) {
- Process.PingPong(); // flush any errors
-
- if (Process.Inspector != null)
- Process.Inspector.NewProblem(descriptiveName, vc, handler);
- }
-
- SendThisVC("(check-sat)");
- FlushLogFile();
- }
-
- public override void Reset(VCExpressionGenerator gen)
- {
- if (options.Solver == SolverKind.Z3)
- {
- this.gen = gen;
- SendThisVC("(reset)");
-
- if (0 < common.Length)
- {
- var c = common.ToString();
- Process.Send(c);
- if (currentLogFile != null)
- {
- currentLogFile.WriteLine(c);
- }
- }
- }
- }
-
- public override void FullReset(VCExpressionGenerator gen)
- {
- if (options.Solver == SolverKind.Z3)
- {
- this.gen = gen;
- Namer.Reset();
- common.Clear();
- SetupAxiomBuilder(gen);
- Axioms.Clear();
- TypeDecls.Clear();
- AxiomsAreSetup = false;
- ctx.Reset();
- ctx.KnownDatatypeConstructors.Clear();
- ctx.parent = this;
- DeclCollector.Reset();
- SendThisVC("; doing a full reset...");
- }
- }
-
-
-
- private string StripCruft(string name){
- if(name.Contains("@@"))
- return name.Remove(name.LastIndexOf ("@@"));
- return name;
- }
-
- private class BadExprFromProver : Exception
- {
- };
-
- private delegate VCExpr ArgGetter (int pos);
-
- private delegate VCExpr[] ArgsGetter ();
-
- private delegate VCExprVar[] VarsGetter ();
-
- private VCExprOp VCStringToVCOp (string op)
- {
- switch (op) {
- case "+" :
- return VCExpressionGenerator.AddIOp;
- case "-" :
- return VCExpressionGenerator.SubIOp;
- case "*" :
- return VCExpressionGenerator.MulIOp;
- case "div" :
- return VCExpressionGenerator.DivIOp;
- case "=" :
- return VCExpressionGenerator.EqOp;
- case "<=" :
- return VCExpressionGenerator.LeOp;
- case "<" :
- return VCExpressionGenerator.LtOp;
- case ">=" :
- return VCExpressionGenerator.GeOp;
- case ">" :
- return VCExpressionGenerator.GtOp;
- case "and" :
- return VCExpressionGenerator.AndOp;
- case "or" :
- return VCExpressionGenerator.OrOp;
- case "not" :
- return VCExpressionGenerator.NotOp;
- case "ite" :
- return VCExpressionGenerator.IfThenElseOp;
- default:
- return null;
- }
- }
-
- private class MyDeclHandler : TypeDeclCollector.DeclHandler {
- public Dictionary<string,VCExprVar> var_map = new Dictionary<string, VCExprVar>();
- public Dictionary<string,Function> func_map = new Dictionary<string, Function>();
- public override void VarDecl(VCExprVar v){
- var_map[v.Name] = v;
- }
- public override void FuncDecl(Function f){
- func_map[f.Name] = f;
- }
- public MyDeclHandler() {
- }
- }
-
- private MyDeclHandler declHandler = null;
-
- private VCExprVar SExprToVar (SExpr e)
- {
- if(e.Arguments.Count() != 1){
- HandleProverError ("Prover error: bad quantifier syntax");
- throw new BadExprFromProver ();
- }
- string vname = StripCruft(e.Name);
- SExpr vtype = e[0];
- switch(vtype.Name){
- case "Int":
- return gen.Variable(vname,Type.Int);
- case "Bool":
- return gen.Variable (vname,Type.Bool);
- case "Array":{
- // TODO: handle more general array types
- var idxType = Type.Int; // well, could be something else
- var valueType =
- (vtype.Arguments[1].Name == "Int") ? Type.Int : Type.Bool;
- var types = new List<Type>();
- types.Add(idxType);
- return gen.Variable (vname, new MapType(Token.NoToken,new List<TypeVariable>(),types,valueType));
- }
- default: {
- HandleProverError ("Prover error: bad type: " + vtype.Name);
- throw new BadExprFromProver ();
- }
- }
- }
-
- private VCExpr MakeBinary(VCExprOp op, VCExpr [] args)
- {
- if (args.Count() == 0)
- {
- // with zero args we need the identity of the op
- if (op == VCExpressionGenerator.AndOp)
- return VCExpressionGenerator.True;
- if (op == VCExpressionGenerator.OrOp)
- return VCExpressionGenerator.False;
- if (op == VCExpressionGenerator.AddIOp)
- {
- Microsoft.Basetypes.BigNum x = Microsoft.Basetypes.BigNum.ZERO;
- return gen.Integer(x);
- }
- HandleProverError("Prover error: bad expression ");
- throw new BadExprFromProver();
- }
- var temp = args[0];
- for (int i = 1; i < args.Count(); i++)
- temp = gen.Function(op, temp, args[i]);
- return temp;
- }
-
- protected VCExpr SExprToVCExpr (SExpr e, Dictionary<string,VCExpr> bound)
- {
- if (e.Arguments.Count() == 0) {
- var name = StripCruft(e.Name);
- if (name [0] >= '0' && name [0] <= '9') {
- Microsoft.Basetypes.BigNum x = Microsoft.Basetypes.BigNum.FromString(name);
- return gen.Integer (x);
- }
- if (bound.ContainsKey (name)) {
- return bound [name];
- }
- if(name == "true")
- return VCExpressionGenerator.True;
- if(name == "false")
- return VCExpressionGenerator.False;
- if(declHandler.var_map.ContainsKey(name))
- return declHandler.var_map[name];
- HandleProverError ("Prover error: unknown symbol:" + name);
- throw new BadExprFromProver ();
- }
- ArgGetter g = i => SExprToVCExpr (e [i], bound);
- ArgsGetter ga = () => e.Arguments.Select (x => SExprToVCExpr (x, bound)).ToArray ();
- VarsGetter gb = () => e [0].Arguments.Select (x => SExprToVar (x)).ToArray ();
- switch (e.Name) {
- case "select" :
- return gen.Select (ga ());
- case "store" :
- return gen.Store (ga ());
- case "forall":
- case "exists":
- {
- var binds = e.Arguments[0];
- var vcbinds = new List<VCExprVar>();
- for (int i = 0; i < binds.Arguments.Count(); i++)
- {
- var bind = binds.Arguments[i];
- var symb = bind.Name;
- var vcv = SExprToVar(bind);
- vcbinds.Add(vcv);
- bound[symb] = vcv;
- }
- var body = g(1);
- if (e.Name == "forall")
- body = gen.Forall(vcbinds, new List<VCTrigger>(), body);
- else
- body = gen.Exists(vcbinds, new List<VCTrigger>(), body);
- for (int i = 0; i < binds.Arguments.Count(); i++)
- {
- var bind = binds.Arguments[i];
- var symb = bind.Name;
- bound.Remove(symb);
- }
- return body;
- }
- case "-" : // have to deal with unary case
- {
- if(e.ArgCount == 1){
- var args = new VCExpr[2];
- args[0] = gen.Integer (Microsoft.Basetypes.BigNum.ZERO);
- args[1] = g(0);
- return gen.Function(VCStringToVCOp("-"),args);
- }
- return gen.Function(VCStringToVCOp("-"),ga());
- }
- case "!" : // this is commentary
- return g(0);
- case "let" : {
- // we expand lets exponentially since there is no let binding in Boogie surface syntax
- bool expand_lets = true;
- var binds = e.Arguments[0];
- var vcbinds = new List<VCExprLetBinding>();
- for(int i = 0; i < binds.Arguments.Count(); i++){
- var bind = binds.Arguments[i];
- var symb = bind.Name;
- var def = bind.Arguments[0];
- var vce = SExprToVCExpr(def, bound);
- var vcv = gen.Variable(symb,vce.Type);
- var vcb = gen.LetBinding(vcv,vce);
- vcbinds.Add (vcb);
- bound[symb] = expand_lets ? vce : vcv;
- }
- var body = g(1);
- if(!expand_lets)
- body = gen.Let(vcbinds,body);
- for(int i = 0; i < binds.Arguments.Count(); i++){
- var bind = binds.Arguments[i];
- var symb = bind.Name;
- bound.Remove (symb);
- }
- return body;
- }
-
- default: {
- var op = VCStringToVCOp (e.Name);
- if (op == null) {
- var name = StripCruft(e.Name);
- if(declHandler.func_map.ContainsKey(name)){
- Function f = declHandler.func_map[name];
- return gen.Function (f, ga());
- }
- HandleProverError ("Prover error: unknown operator:" + e.Name);
- throw new BadExprFromProver ();
- }
- if(op.Arity == 2)
- return MakeBinary (op, ga ());
- return gen.Function(op, ga());
- }
- }
- }
-
- private void SExprToSoln (SExpr resp,
- Dictionary<int,Dictionary<string,string>> varSubst)
- {
- Dictionary<string, RPFP.Node> pmap = new Dictionary<string,RPFP.Node> ();
-
- foreach (var node in rpfp.nodes)
- pmap.Add ((node.Name as VCExprBoogieFunctionOp).Func.Name, node);
-
- var lines = resp.Arguments;
-
- // get all the predicate definitions
- for (int i = 0; i < lines.Length; i++) {
- var line = lines [i];
- string pname;
- RPFP.Transformer annot;
- GetDefun(line, out pname, out annot);
-
- if(pmap.ContainsKey(pname)){
- var node = pmap[pname];
- node.Annotation = annot;
- }
- else if(pname[0] != '@'){ // if not an internal symbol
- HandleProverError ("Prover error: got unknown predicate:" + pname);
- throw new BadExprFromProver ();
- }
- }
-
- }
-
- private void GetDefun(SExpr line, out string pname, out RPFP.Transformer annot)
- {
- if (line.Name != "define-fun")
- {
- HandleProverError("Prover error: expected define-fun but got:" + line.Name);
- throw new BadExprFromProver();
- }
- if (line.ArgCount != 4)
- {
- HandleProverError("Prover error: define-fun has wrong number of arguments");
- throw new BadExprFromProver();
- }
- pname = StripCruft(line.Arguments[0].Name);
- var pvars = line.Arguments[1];
- var pbody = line.Arguments[3]; // range has to be Bool
- var binding = new Dictionary<string, VCExpr>();
- var pvs = new List<VCExpr>();
- foreach (var b in pvars.Arguments)
- {
- var e = SExprToVar(b);
- pvs.Add(e);
- binding.Add(StripCruft(b.Name), e);
- }
- VCExpr bexpr = SExprToVCExpr(pbody, binding);
-
- annot = rpfp.CreateRelation(pvs.ToArray(), bexpr);
- }
-
- private RPFP.Node SExprToCex(SExpr resp, ErrorHandler handler,
- Dictionary<int,Dictionary<string,string>> varSubst)
- {
- Dictionary<string, RPFP.Node> nmap = new Dictionary<string,RPFP.Node>();
- Dictionary<string, RPFP.Node> pmap = new Dictionary<string,RPFP.Node>();
-
- foreach(var node in rpfp.nodes)
- pmap.Add((node.Name as VCExprBoogieFunctionOp).Func.Name,node);
-
- RPFP.Node topnode = null;
- var lines = resp.Arguments;
-
- // last line of derivation is from query, skip it
- for (int i = 0; i < lines.Length-1; i++)
- {
- var line = lines[i];
- if (line.ArgCount != 6)
- {
- HandleProverError("bad derivation line from prover: " + line.ToString());
- return null;
- }
- var name = line[0];
- var conseq = line[1];
- var rule = line[2];
- var subst = line[3];
- var labs = line[4];
- var refs = line[5];
- var predName = conseq.Name;
- {
- string spacer = "@@"; // Hack! UniqueNamer is adding these and I can't stop it!
- int pos = predName.LastIndexOf(spacer);
- if (pos >= 0)
- predName = predName.Substring(0, pos);
- }
- RPFP.Node node = null;
- if (!pmap.TryGetValue(predName, out node))
- {
- HandleProverError("unknown predicate from prover: " + predName.ToString());
- return null;
- }
- RPFP.Node cexnode = rpfp.CloneNode(node);
- cexnode.map = node;
- nmap.Add(name.Name, cexnode);
- List<RPFP.Node> Chs = new List<RPFP.Node>();
-
- if (refs.Name != "ref")
- {
- HandleProverError("bad references from prover: " + refs.ToString());
- return null;
- }
- foreach (var c in refs.Arguments)
- {
- if (c.Name == "true")
- Chs.Add(null);
- else
- {
- RPFP.Node ch = null;
- if (!nmap.TryGetValue(c.Name, out ch))
- {
- HandleProverError("unknown reference from prover: " + c.ToString());
- return null;
- }
- Chs.Add(ch);
- }
- }
-
- if (!rule.Name.StartsWith("rule!"))
- {
- HandleProverError("bad rule name from prover: " + refs.ToString());
- return null;
- }
- int ruleNum = Convert.ToInt32(rule.Name.Substring(5)) - 1;
- if (ruleNum < 0 || ruleNum > rpfp.edges.Count)
- {
- HandleProverError("bad rule name from prover: " + refs.ToString());
- return null;
- }
- RPFP.Edge orig_edge = rpfp.edges[ruleNum];
- RPFP.Edge e = rpfp.CreateEdge(cexnode, orig_edge.F, Chs.ToArray());
- e.map = orig_edge;
- topnode = cexnode;
-
- if (labs.Name != "labels")
- {
- HandleProverError("bad labels from prover: " + labs.ToString());
- return null;
- }
- e.labels = new HashSet<string>();
- foreach (var l in labs.Arguments)
- e.labels.Add(l.Name);
-
- if (subst.Name != "subst")
- {
- HandleProverError("bad subst from prover: " + subst.ToString());
- return null;
- }
- Dictionary<string, string> dict = new Dictionary<string, string>();
- varSubst[e.number] = dict;
- foreach (var s in subst.Arguments)
- {
- if (s.Name != "=" || s.Arguments.Length != 2)
- {
- HandleProverError("bad equation from prover: " + s.ToString());
- return null;
- }
- string uniqueName = s.Arguments[0].Name;
- string spacer = "@@"; // Hack! UniqueNamer is adding these and I can't stop it!
- int pos = uniqueName.LastIndexOf(spacer);
- if (pos >= 0)
- uniqueName = uniqueName.Substring(0, pos);
- dict.Add(uniqueName, s.Arguments[1].ToString());
- }
-
- }
- if (topnode == null)
- {
- HandleProverError("empty derivation from prover: " + resp.ToString());
- }
- return topnode;
- }
-
- private Model SExprToModel(SExpr resp, ErrorHandler handler)
- {
- // Concatenate all the arguments
- string modelString = resp[0].Name;
- // modelString = modelString.Substring(7, modelString.Length - 8); // remove "(model " and final ")"
- var models = Model.ParseModels(new StringReader("Error model: \n" + modelString));
- if (models == null || models.Count == 0)
- {
- HandleProverError("no model from prover: " + resp.ToString());
- }
- return models[0];
- }
-
- private string QuantifiedVCExpr2String(VCExpr x)
- {
- return VCExpr2String(x, 1);
-#if false
- if (!(x is VCExprQuantifier))
- return VCExpr2String(x, 1);
- VCExprQuantifier node = (x as VCExprQuantifier);
- if(node.BoundVars.Count == 0)
- return VCExpr2String(x, 1);
-
- StringWriter wr = new StringWriter();
-
- string kind = node.Quan == Quantifier.ALL ? "forall" : "exists";
- wr.Write("({0} (", kind);
-
- for (int i = 0; i < node.BoundVars.Count; i++)
- {
- VCExprVar var = node.BoundVars[i];
- Contract.Assert(var != null);
- string printedName = Namer.GetQuotedName(var, var.Name);
- Contract.Assert(printedName != null);
- wr.Write("({0} {1}) ", printedName, SMTLibExprLineariser.TypeToString(var.Type));
- }
-
- wr.Write(") ");
- wr.Write(VCExpr2String(node.Body, 1));
- wr.Write(")");
- string res = wr.ToString();
- return res;
-#endif
- }
-
- public override Outcome CheckRPFP(string descriptiveName, RPFP _rpfp, ErrorHandler handler,
- out RPFP.Node cex,
- Dictionary<int, Dictionary<string, string>> varSubst,
- Dictionary<string, int> extra_bound)
- {
- //Contract.Requires(descriptiveName != null);
- //Contract.Requires(vc != null);
- //Contract.Requires(handler != null);
- rpfp = _rpfp;
- cex = null;
-
-
- if (options.SeparateLogFiles) CloseLogFile(); // shouldn't really happen
-
- if (options.LogFilename != null && currentLogFile == null)
- {
- currentLogFile = OpenOutputFile(descriptiveName);
- currentLogFile.Write(common.ToString());
- }
-
- PrepareCommon();
-
- Push();
- SendThisVC("(fixedpoint-push)");
- foreach (var node in rpfp.nodes)
- {
- DeclCollector.RegisterRelation((node.Name as VCExprBoogieFunctionOp).Func);
- }
-
- LineariserOptions.Default.LabelsBelowQuantifiers = true;
- List<string> ruleStrings = new List<string>();
- var recursion_bound = CommandLineOptions.Clo.RecursionBound;
- foreach (var edge in rpfp.edges)
- {
- string node_name = (edge.Parent.Name as VCExprBoogieFunctionOp).Func.Name;
- string rule_name = "rule_" + edge.number.ToString();
- string rec_bound = "";
- if(extra_bound != null && extra_bound.ContainsKey(node_name))
- rec_bound = (recursion_bound + extra_bound[node_name]).ToString();
- string ruleString = "(rule " + QuantifiedVCExpr2String(rpfp.GetRule(edge)) + " " + rule_name + " " + rec_bound + "\n)";
- ruleStrings.Add(ruleString);
- }
- string queryString = "(query " + QuantifiedVCExpr2String(rpfp.GetQuery()) + "\n :engine duality\n :print-certificate true\n";
-
-#if true
- if (CommandLineOptions.Clo.StratifiedInlining != 0)
- queryString += " :stratified-inlining true\n";
- if (CommandLineOptions.Clo.RecursionBound > 0)
- queryString += " :recursion-bound " + Convert.ToString(CommandLineOptions.Clo.RecursionBound) + "\n";
-#endif
- queryString += ")";
- LineariserOptions.Default.LabelsBelowQuantifiers = false;
- FlushAxioms();
-
- PossiblyRestart();
-
- SendThisVC("(set-info :boogie-vc-id " + SMTLibNamer.QuoteId(descriptiveName) + ")");
- foreach(var rs in ruleStrings)
- SendThisVC(rs);
- FlushLogFile();
-
- if (Process != null)
- {
- Process.PingPong(); // flush any errors
-
-#if false
- // TODO: this is not going to work
- if (Process.Inspector != null)
- Process.Inspector.NewProblem(descriptiveName, vc, handler);
-#endif
- }
-
- SendThisVC(queryString);
- FlushLogFile();
-
- var result = Outcome.Undetermined;
-
- if (Process != null)
- {
-
- var resp = Process.GetProverResponse();
-
- if (proverErrors.Count > 0)
- {
- result = Outcome.Undetermined;
- foreach (var err in proverErrors)
- {
- if (err.Contains("canceled"))
- {
- result = Outcome.TimeOut;
- }
- }
- }
- else if(resp == null)
- HandleProverError("Prover did not respond");
- else switch (resp.Name)
- {
- case "unsat":
- result = Outcome.Valid;
- break;
- case "sat":
- result = Outcome.Invalid;
- break;
- case "unknown":
- result = Outcome.Invalid;
- break;
- case "error":
- if (resp.ArgCount > 0 && resp.Arguments[0].Name.Contains("canceled"))
- {
- result = Outcome.TimeOut;
- }
- else
- {
- HandleProverError("Prover error: " + resp.Arguments[0]);
- result = Outcome.Undetermined;
- }
- break;
- default:
- HandleProverError("Unexpected prover response: " + resp.ToString());
- break;
- }
-
- switch (result)
- {
- case Outcome.Invalid:
- {
- resp = Process.GetProverResponse();
- if (resp.Name == "derivation")
- {
- cex = SExprToCex(resp, handler,varSubst);
- }
- else
- HandleProverError("Unexpected prover response: " + resp.ToString());
- resp = Process.GetProverResponse();
- if (resp.Name == "model")
- {
- var model = SExprToModel(resp, handler);
- cex.owner.SetBackgroundModel(model);
- }
- else
- HandleProverError("Unexpected prover response: " + resp.ToString());
- break;
- }
- case Outcome.Valid:
- {
- resp = Process.GetProverResponse();
- if (resp.Name == "fixedpoint")
- {
- // only get the response if we need it
- if(CommandLineOptions.Clo.PrintFixedPoint != null)
- SExprToSoln(resp, varSubst);
- }
- else
- HandleProverError("Unexpected prover response: " + resp.ToString());
- break;
- }
- default:
- break;
- }
-
-#if false
- while (true)
- {
- resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
- HandleProverError("Unexpected prover response: " + resp.ToString());
- }
-#endif
- }
- SendThisVC("(fixedpoint-pop)");
- Pop();
- AxiomsAreSetup = false;
-
- if (CommandLineOptions.Clo.PrintConjectures != null)
- {
- ReadConjectures(CommandLineOptions.Clo.PrintConjectures);
- }
-
- return result;
- }
-
- class MyFileParser : SExpr.Parser
- {
- SMTLibProcessTheoremProver parent;
-
- public MyFileParser(System.IO.StreamReader _sr, SMTLibProcessTheoremProver _parent)
- : base(_sr)
- {
- parent = _parent;
- }
- public override void ParseError(string msg)
- {
- parent.HandleProverError("Error in conjecture file from prover: " + msg);
- }
- }
-
- void ReadConjectures(string filename)
- {
- try
- {
- System.IO.StreamReader sr = new StreamReader(filename + ".tmp");
- SExpr.Parser p = new MyFileParser(sr, this);
- var sexps = p.ParseSExprs(false);
- Dictionary<string, RPFP.Node> pmap = GetNodeMap();
- foreach (var e in sexps)
- {
- string pname;
- RPFP.Transformer annot;
- GetDefun(e, out pname, out annot);
-
- if (pmap.ContainsKey(pname))
- {
- var c = new RPFP.Conjecture();
- c.node = pmap[pname];
- c.bound = annot;
- rpfp.conjectures.Add(c);
- }
- else if (pname[0] != '@')
- { // if not an internal symbol
- HandleProverError("Prover error: got unknown predicate:" + pname);
- throw new BadExprFromProver();
- }
- }
- sr.Close();
- }
- catch (Exception)
- {
- HandleProverError("No conjecture file from prover");
- throw new BadExprFromProver();
- }
- }
-
- private Dictionary<string, RPFP.Node> GetNodeMap()
- {
- Dictionary<string, RPFP.Node> pmap = new Dictionary<string, RPFP.Node>();
- foreach (var node in rpfp.nodes)
- pmap.Add((node.Name as VCExprBoogieFunctionOp).Func.Name, node);
- return pmap;
- }
-
- private static HashSet<string> usedLogNames = new HashSet<string>();
-
- private TextWriter OpenOutputFile(string descriptiveName)
- {
- Contract.Requires(descriptiveName != null);
- Contract.Ensures(Contract.Result<TextWriter>() != null);
-
- string filename = options.LogFilename;
- filename = Helpers.SubstituteAtPROC(descriptiveName, cce.NonNull(filename));
- var curFilename = filename;
-
- lock (usedLogNames) {
- int n = 1;
- while (usedLogNames.Contains(curFilename)) {
- curFilename = filename + "." + n++;
- }
- usedLogNames.Add(curFilename);
- }
-
- return new StreamWriter(curFilename, false);
- }
-
- private void FlushProverWarnings()
- {
- var handler = currentErrorHandler;
- if (handler != null) {
- lock (proverWarnings) {
- proverWarnings.Iter(handler.OnProverWarning);
- proverWarnings.Clear();
- }
- }
- }
-
- protected void HandleProverError(string s)
- {
- s = s.Replace("\r", "");
- lock (proverWarnings) {
- while (s.StartsWith("WARNING: ")) {
- var idx = s.IndexOf('\n');
- var warn = s;
- if (idx > 0) {
- warn = s.Substring(0, idx);
- s = s.Substring(idx + 1);
- } else {
- s = "";
- }
- warn = warn.Substring(9);
- proverWarnings.Add(warn);
- }
- }
-
- FlushProverWarnings();
-
- if (s == "") return;
-
- lock (proverErrors) {
- proverErrors.Add(s);
- Console.WriteLine("Prover error: " + s);
- }
- }
-
- [NoDefaultContract]
- public override Outcome CheckOutcome(ErrorHandler handler, int taskID = -1)
- {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- var result = CheckOutcomeCore(handler, taskID: taskID);
- SendThisVC("(pop 1)");
- FlushLogFile();
-
- return result;
- }
-
- [NoDefaultContract]
- public override Outcome CheckOutcomeCore(ErrorHandler handler, int taskID = -1)
- {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- var result = Outcome.Undetermined;
-
- if (Process == null)
- return result;
-
- try {
- currentErrorHandler = handler;
- FlushProverWarnings();
-
- int errorsLeft;
- if (CommandLineOptions.Clo.ConcurrentHoudini) {
- Contract.Assert(taskID >= 0);
- errorsLeft = CommandLineOptions.Clo.Cho[taskID].ProverCCLimit;
- } else {
- errorsLeft = CommandLineOptions.Clo.ProverCCLimit;
- }
-
- if (errorsLeft < 1)
- errorsLeft = 1;
-
- var globalResult = Outcome.Undetermined;
-
- while (true) {
- errorsLeft--;
- string[] labels = null;
-
- result = GetResponse();
- if (globalResult == Outcome.Undetermined)
- globalResult = result;
-
- if (result == Outcome.Invalid || result == Outcome.TimeOut || result == Outcome.OutOfMemory) {
- IList<string> xlabels;
- if (CommandLineOptions.Clo.UseLabels) {
- labels = GetLabelsInfo();
- if (labels == null)
- {
- xlabels = new string[] { };
- }
- else
- {
- xlabels = labels.Select(a => a.Replace("@", "").Replace("+", "")).ToList();
- }
- }
- else if(CommandLineOptions.Clo.SIBoolControlVC) {
- labels = new string[0];
- xlabels = labels;
- } else {
- labels = CalculatePath(handler.StartingProcId());
- xlabels = labels;
- }
- Model model = (result == Outcome.TimeOut || result == Outcome.OutOfMemory) ? null :
- GetErrorModel();
- handler.OnModel(xlabels, model, result);
- }
-
- if (labels == null || !labels.Any() || errorsLeft == 0) break;
-
- if (CommandLineOptions.Clo.UseLabels) {
- var negLabels = labels.Where(l => l.StartsWith("@")).ToArray();
- var posLabels = labels.Where(l => !l.StartsWith("@"));
- Func<string, string> lbl = (s) => SMTLibNamer.QuoteId(SMTLibNamer.LabelVar(s));
- if (!options.MultiTraces)
- posLabels = Enumerable.Empty<string>();
- var conjuncts = posLabels.Select(s => "(not " + lbl(s) + ")").Concat(negLabels.Select(lbl)).ToArray();
- string expr = conjuncts.Length == 1 ? conjuncts[0] : ("(or " + conjuncts.Concat(" ") + ")"); ;
- if (!conjuncts.Any())
- {
- expr = "false";
- }
- SendThisVC("(assert " + expr + ")");
- SendThisVC("(check-sat)");
- }
- else {
- string source = labels[labels.Length - 2];
- string target = labels[labels.Length - 1];
- SendThisVC("(assert (not (= (ControlFlow 0 " + source + ") (- " + target + "))))");
- SendThisVC("(check-sat)");
- }
- }
-
- FlushLogFile();
-
- if (CommandLineOptions.Clo.RestartProverPerVC && Process != null)
- Process.NeedsRestart = true;
-
- return globalResult;
-
- } finally {
- currentErrorHandler = null;
- }
- }
-
- public override string[] CalculatePath(int controlFlowConstant) {
- SendThisVC("(get-value ((ControlFlow " + controlFlowConstant + " 0)))");
- var path = new List<string>();
- while (true) {
- var resp = Process.GetProverResponse();
- if (resp == null) break;
- if (!(resp.Name == "" && resp.ArgCount == 1)) break;
- resp = resp.Arguments[0];
- if (!(resp.Name == "" && resp.ArgCount == 2)) break;
- resp = resp.Arguments[1];
- var v = resp.Name;
- if (v == "-" && resp.ArgCount == 1) {
- v = resp.Arguments[0].Name;
- path.Add(v);
- break;
- }
- else if (resp.ArgCount != 0)
- break;
- path.Add(v);
- SendThisVC("(get-value ((ControlFlow " + controlFlowConstant + " " + v + ")))");
- }
- return path.ToArray();
- }
-
-
- private class SMTErrorModelConverter {
- private struct SMTDataType {
- public string Constructor;
- public List<SExpr> Types;
- }
-
- private List<SExpr> ErrorModelTodo;
- private SMTLibProcessTheoremProver Parent;
- private StringBuilder ErrorModel = new StringBuilder();
- private HashSet<SExpr> TopLevelProcessed = new HashSet<SExpr>();
- private int NumNewArrays = 0;
- private Dictionary<string, int> SortSet = new Dictionary<string, int>();
- private Dictionary<string, SMTDataType> DataTypes = new Dictionary<string, SMTDataType>();
- private Dictionary<string, SExpr> Functions = new Dictionary<string, SExpr>();
-
- public SMTErrorModelConverter(SExpr _ErrorModel, SMTLibProcessTheoremProver _Parent) {
- ErrorModelTodo = _ErrorModel.Arguments.ToList();;
- Parent = _Parent;
- }
-
- public string Convert() {
- ConvertErrorModel(ErrorModel);
- return ErrorModel.ToString();
- }
-
- bool isConstArray(SExpr element, SExpr type) {
- if (type.Name != "Array")
- return false;
-
- if (element.Name == "__array_store_all__") // CVC4 1.4
- return true;
- else if (element.Name == "" && element[0].Name == "as" &&
- element[0][0].Name == "const") // CVC4 > 1.4
- return true;
-
- return false;
- }
-
- SExpr getConstArrayElement(SExpr element) {
- if (element.Name == "__array_store_all__") // CVC4 1.4
- return element[1];
- else if (element.Name == "" && element[0].Name == "as" &&
- element[0][0].Name == "const") // CVC4 > 1.4
- return element[1];
-
- Parent.HandleProverError("Unexpected value: " + element);
- throw new BadExprFromProver ();
- }
-
- void ConstructComplexValue(SExpr element, SExpr type, StringBuilder m) {
- if (type.Name == "Array") {
- if (element.Name == "store" || isConstArray(element, type)) {
- NumNewArrays++;
- m.Append("as-array[k!" + NumNewArrays + ']');
- SExpr[] args = {new SExpr("k!" + NumNewArrays), new SExpr(""), type, element};
- var newElement = new SExpr("define-fun", args);
- TopLevelProcessed.Add(newElement);
- ErrorModelTodo.Add(newElement);
- return;
- }
- }
-
- ConstructSimpleValue(element, type, m);
- }
-
- void ConstructSimpleValue(SExpr element, SExpr type, StringBuilder m) {
- if (type.Name == "Bool" && element.ArgCount == 0) {
- m.Append(element.ToString());
- return;
- }
-
- if (type.Name == "Int") {
- if (element.ArgCount == 0) {
- m.Append(element.ToString());
- return;
- } else if (element.Name == "-" && element.ArgCount == 1) {
- m.Append(element.ToString());
- return;
- }
- }
-
- if (type.Name == "_" && type.ArgCount == 2 && type[0].Name == "BitVec") {
- if (element.Name == "_" && element.ArgCount == 2 &&
- element[0].Name.StartsWith("bv") && element[0].ArgCount == 0 &&
- element[1].Name == type.Arguments[1].Name && element[1].ArgCount == 0) {
- m.Append(element[0].Name + '[' + element[1].Name + ']');
- return;
- }
- }
-
- if (type.Name == "Array") {
- while (element.Name == "store") {
- ConstructComplexValue(element[1], type[0], m);
- m.Append(" -> ");
- ConstructComplexValue(element[2], type[1], m);
- m.Append("\n ");
- if (element[0].Name != "store") {
- m.Append("else -> ");
- }
- element = element[0];
- }
-
- if (isConstArray(element, type)) {
- ConstructComplexValue(getConstArrayElement(element), type[1], m);
- return;
- } else if (element.Name == "_" && element.ArgCount == 2 &&
- element[0].Name == "as-array") {
- m.Append("as-array[" + element[1].Name + ']');
- return;
- }
- }
-
- if (SortSet.ContainsKey(type.Name) && SortSet[type.Name] == 0) {
- var prefix = "@uc_T_" + type.Name.Substring(2) + "_";
- if (element.Name.StartsWith(prefix)) {
- m.Append(type.Name + "!val!" + element.Name.Substring(prefix.Length));
- return;
- }
- }
-
- if (Functions.ContainsKey(element.Name) &&
- type.Name == Functions[element.Name].Name) {
- m.Append(element.Name);
- return;
- }
-
- if (DataTypes.ContainsKey(type.Name) &&
- DataTypes[type.Name].Constructor == element.Name &&
- element.ArgCount == DataTypes[type.Name].Types.Count) {
- m.Append("(" + element.Name);
- for (int i = 0; i < element.ArgCount; ++i) {
- m.Append(" ");
- ConstructComplexValue(element[i], DataTypes[type.Name].Types[i], m);
- }
- m.Append(")");
- return;
- }
-
- Parent.HandleProverError("Unexpected value: " + element);
- throw new BadExprFromProver ();
- }
-
- void ConstructFunctionArguments(SExpr arguments, List<SExpr> argTypes, StringBuilder[] argValues) {
- if (arguments.Name == "and") {
- ConstructFunctionArguments(arguments[0], argTypes, argValues);
- ConstructFunctionArguments(arguments[1], argTypes, argValues);
- } else if (arguments.Name == "=" &&
- (arguments[0].Name.StartsWith("_ufmt_") || arguments[0].Name.StartsWith("x!"))) {
- int argNum;
- if (arguments[0].Name.StartsWith("_ufmt_"))
- argNum = System.Convert.ToInt32(arguments[0].Name.Substring("_uftm_".Length)) - 1;
- else /* if (arguments[0].Name.StartsWith("x!")) */
- argNum = System.Convert.ToInt32(arguments[0].Name.Substring("x!".Length)) - 1;
- if (argNum < 0 || argNum >= argTypes.Count) {
- Parent.HandleProverError("Unexpected function argument: " + arguments[0]);
- throw new BadExprFromProver ();
- }
- if (argValues[argNum] != null) {
- Parent.HandleProverError("Function argument defined multiple times: " + arguments[0]);
- throw new BadExprFromProver ();
- }
- argValues[argNum] = new StringBuilder();
- ConstructComplexValue(arguments[1], argTypes[argNum], argValues[argNum]);
- } else {
- Parent.HandleProverError("Unexpected function argument: " + arguments);
- throw new BadExprFromProver ();
- }
- }
-
- void ConstructFunctionElements(SExpr element, List<SExpr> argTypes, SExpr outType, StringBuilder m) {
- while (element.Name == "ite") {
- StringBuilder[] argValues = new StringBuilder[argTypes.Count];
- ConstructFunctionArguments(element[0], argTypes, argValues);
- foreach (var s in argValues)
- m.Append(s + " ");
- m.Append("-> ");
- ConstructComplexValue(element[1], outType, m);
- m.Append("\n ");
- if (element[2].Name != "ite")
- m.Append("else -> ");
- element = element[2];
- }
-
- ConstructComplexValue(element, outType, m);
- }
-
- void ConstructFunction(SExpr element, SExpr inType, SExpr outType, StringBuilder m) {
- List<SExpr> argTypes = new List<SExpr>();
-
- for (int i = 0; i < inType.ArgCount; ++i) {
- if (inType[i].Name != "_ufmt_" + (i + 1) && inType[i].Name != "x!" + (i + 1) &&
- !inType[i].Name.StartsWith("BOUND_VARIABLE_")) {
- Parent.HandleProverError("Unexpected function argument: " + inType[i].Name);
- throw new BadExprFromProver ();
- }
- argTypes.Add(inType[i][0]);
- }
-
- ConstructFunctionElements(element, argTypes, outType, m);
- }
-
- void ConstructDefine(SExpr element, StringBuilder m) {
- Debug.Assert(element.Name == "define-fun");
-
- if (element[1].ArgCount != 0)
- TopLevelProcessed.Add(element);
-
- m.Append(element[0] + " -> ");
- if (TopLevelProcessed.Contains(element))
- m.Append("{\n ");
-
- if (element[1].ArgCount == 0 && element[2].Name == "Array" && !TopLevelProcessed.Contains(element)) {
- ConstructComplexValue(element[3], element[2], m);
- } else if (element[1].ArgCount == 0) {
- ConstructSimpleValue(element[3], element[2], m);
- } else {
- ConstructFunction(element[3], element[1], element[2], m);
- }
-
- if (TopLevelProcessed.Contains(element))
- m.Append("\n}");
- m.Append("\n");
- }
-
- void ExtractDataType(SExpr datatypes) {
- Debug.Assert(datatypes.Name == "declare-datatypes");
-
- if (datatypes[0].Name != "" || datatypes[1].Name != "" || datatypes[1].ArgCount != 1) {
- Parent.HandleProverError("Unexpected datatype: " + datatypes);
- throw new BadExprFromProver ();
- }
-
- SMTDataType dt = new SMTDataType();
- SExpr typeDef = datatypes[1][0];
-
- if (typeDef.ArgCount != 1) {
- Parent.HandleProverError("Unexpected datatype: " + datatypes);
- throw new BadExprFromProver ();
- }
-
- dt.Constructor = typeDef[0].Name;
- dt.Types = new List<SExpr>();
-
- for (int i = 0; i < typeDef[0].ArgCount; ++i) {
- if (typeDef[0][i].ArgCount != 1) {
- Parent.HandleProverError("Unexpected datatype constructor: " + typeDef[0]);
- throw new BadExprFromProver ();
- }
- dt.Types.Add(typeDef[0][i][0]);
- }
-
- DataTypes[typeDef.Name] = dt;
- }
-
- private void ConvertErrorModel(StringBuilder m) {
- if (Parent.options.Solver == SolverKind.Z3) {
- // Datatype declarations are not returned by Z3, so parse common
- // instead. This is not very efficient, but currently not an issue,
- // as this not the normal way of interfacing with Z3.
- var ms = new MemoryStream(Encoding.ASCII.GetBytes(Parent.common.ToString()));
- var sr = new StreamReader(ms);
- SExpr.Parser p = new MyFileParser(sr, null);
- var sexprs = p.ParseSExprs(false);
- foreach (var e in sexprs) {
- switch (e.Name) {
- case "declare-datatypes":
- ExtractDataType(e);
- break;
- }
- }
- }
-
- while (ErrorModelTodo.Count > 0) {
- var e = ErrorModelTodo[0];
- ErrorModelTodo.RemoveAt(0);
-
- switch (e.Name) {
- case "define-fun":
- ConstructDefine(e, m);
- break;
- case "declare-sort":
- SortSet[e[0].Name] = System.Convert.ToInt32(e[1].Name);
- break;
- case "declare-datatypes":
- ExtractDataType(e);
- break;
- case "declare-fun":
- if (e[1].Name != "" || e[1].ArgCount > 0 || e[2].ArgCount > 0 ||
- e[2].Name == "Bool" || e[2].Name == "Int") {
- Parent.HandleProverError("Unexpected top level model element: " + e.Name);
- throw new BadExprFromProver ();
- }
- Functions[e[0].Name] = e[2];
- break;
- case "forall":
- // ignore
- break;
- default:
- Parent.HandleProverError("Unexpected top level model element: " + e.Name);
- throw new BadExprFromProver ();
- }
- }
- }
- }
-
- private Model GetErrorModel() {
- if (!options.ExpectingModel())
- return null;
- SendThisVC("(get-model)");
- Process.Ping();
- Model theModel = null;
- while (true) {
- var resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
- if (theModel != null)
- HandleProverError("Expecting only one model but got many");
-
- string modelStr = null;
- if (resp.Name == "model" && resp.ArgCount >= 1) {
- var converter = new SMTErrorModelConverter(resp, this);
- modelStr = converter.Convert();
- }
- else if (resp.ArgCount == 0 && resp.Name.Contains("->")) {
- modelStr = resp.Name;
- }
- else {
- HandleProverError("Unexpected prover response getting model: " + resp.ToString());
- }
-
- List<Model> models = null;
- try {
- switch (options.Solver) {
- case SolverKind.Z3:
- case SolverKind.CVC4:
- models = Model.ParseModels(new StringReader("Error model: \n" + modelStr));
- break;
- default:
- Debug.Assert(false);
- return null;
- }
- }
- catch (ArgumentException exn) {
- HandleProverError("Model parsing error: " + exn.Message);
- }
- if (models == null)
- HandleProverError("Could not parse any models");
- else if (models.Count == 0)
- HandleProverError("Could not parse any models");
- else if (models.Count > 1)
- HandleProverError("Expecting only one model but got many");
- else
- theModel = models[0];
- }
- return theModel;
- }
-
- private string[] GetLabelsInfo()
- {
- SendThisVC("(labels)");
- Process.Ping();
-
- string[] res = null;
- while (true) {
- var resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
- if (res != null)
- HandleProverError("Expecting only one sequence of labels but got many");
- if (resp.Name == "labels" && resp.ArgCount >= 1) {
- res = resp.Arguments.Select(a => a.Name.Replace("|", "")).ToArray();
- }
- else {
- HandleProverError("Unexpected prover response getting labels: " + resp.ToString());
- }
- }
- return res;
- }
-
- private Outcome GetResponse()
- {
- var result = Outcome.Undetermined;
- var wasUnknown = false;
-
- Process.Ping();
-
- while (true) {
- var resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
-
- switch (resp.Name) {
- case "unsat":
- result = Outcome.Valid;
- break;
- case "sat":
- result = Outcome.Invalid;
- break;
- case "unknown":
- result = Outcome.Invalid;
- wasUnknown = true;
- break;
- default:
- HandleProverError("Unexpected prover response: " + resp.ToString());
- break;
- }
- }
-
- if (wasUnknown) {
- SendThisVC("(get-info :reason-unknown)");
- Process.Ping();
- while (true) {
- var resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
-
- if (resp.ArgCount == 1 && resp.Name == ":reason-unknown") {
- switch (resp[0].Name) {
- case "memout":
- currentErrorHandler.OnResourceExceeded("memory");
- result = Outcome.OutOfMemory;
- Process.NeedsRestart = true;
- break;
- case "timeout": case "canceled":
- currentErrorHandler.OnResourceExceeded("timeout");
- result = Outcome.TimeOut;
- break;
- default:
- break;
- }
- } else {
- HandleProverError("Unexpected prover response (getting info about 'unknown' response): " + resp.ToString());
- }
- }
-
- }
-
- return result;
- }
-
- protected string VCExpr2String(VCExpr expr, int polarity)
- {
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- lock (gen)
- {
- DateTime start = DateTime.UtcNow;
- //if (CommandLineOptions.Clo.Trace)
- // Console.Write("Linearising ... ");
-
- // handle the types in the VCExpr
- TypeEraser eraser;
- switch (CommandLineOptions.Clo.TypeEncodingMethod)
- {
- case CommandLineOptions.TypeEncoding.Arguments:
- eraser = new TypeEraserArguments((TypeAxiomBuilderArguments)AxBuilder, gen);
- break;
- case CommandLineOptions.TypeEncoding.Monomorphic:
- eraser = null;
- break;
- default:
- eraser = new TypeEraserPremisses((TypeAxiomBuilderPremisses)AxBuilder, gen);
- break;
- }
- VCExpr exprWithoutTypes = eraser == null ? expr : eraser.Erase(expr, polarity);
- Contract.Assert(exprWithoutTypes != null);
-
- LetBindingSorter letSorter = new LetBindingSorter(gen);
- Contract.Assert(letSorter != null);
- VCExpr sortedExpr = letSorter.Mutate(exprWithoutTypes, true);
- Contract.Assert(sortedExpr != null);
- VCExpr sortedAxioms = letSorter.Mutate(AxBuilder.GetNewAxioms(), true);
- Contract.Assert(sortedAxioms != null);
-
- DeclCollector.Collect(sortedAxioms);
- DeclCollector.Collect(sortedExpr);
- FeedTypeDeclsToProver();
-
-
-
- AddAxiom(SMTLibExprLineariser.ToString(sortedAxioms, Namer, options));
- string res = SMTLibExprLineariser.ToString(sortedExpr, Namer, options);
- Contract.Assert(res != null);
-
- if (CommandLineOptions.Clo.Trace)
- {
- DateTime end = DateTime.UtcNow;
- TimeSpan elapsed = end - start;
- if (elapsed.TotalSeconds > 0.5)
- Console.WriteLine("Linearising [{0} s]", elapsed.TotalSeconds);
- }
- return res;
- }
- }
-
- // the list of all known axioms, where have to be included in each
- // verification condition
- private readonly List<string/*!>!*/> Axioms = new List<string/*!*/>();
- private bool AxiomsAreSetup = false;
-
-
-
-
- // similarly, a list of function/predicate declarations
- private readonly List<string/*!>!*/> TypeDecls = new List<string/*!*/>();
-
- protected void AddAxiom(string axiom)
- {
- Contract.Requires(axiom != null);
- Axioms.Add(axiom);
- // if (thmProver != null) {
- // LogActivity(":assume " + axiom);
- // thmProver.AddAxioms(axiom);
- // }
- }
-
- protected void AddTypeDecl(string decl)
- {
- Contract.Requires(decl != null);
- TypeDecls.Add(decl);
- // if (thmProver != null) {
- // LogActivity(decl);
- // thmProver.Feed(decl, 0);
- // }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private static string _backgroundPredicates;
-
- static void InitializeGlobalInformation()
- {
- Contract.Ensures(_backgroundPredicates != null);
- //throws ProverException, System.IO.FileNotFoundException;
- if (_backgroundPredicates == null) {
- if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.Monomorphic)
- {
- _backgroundPredicates = "";
- }
- else
- {
- _backgroundPredicates = @"
-(set-info :category ""industrial"")
-(declare-sort |T@U| 0)
-(declare-sort |T@T| 0)
-(declare-fun real_pow (Real Real) Real)
-(declare-fun UOrdering2 (|T@U| |T@U|) Bool)
-(declare-fun UOrdering3 (|T@T| |T@U| |T@U|) Bool)";
- }
- }
- }
-
- public override VCExpressionGenerator VCExprGen
- {
- get { return this.gen; }
- }
-
- //// Push/pop interface
-
- //List<string> pushedAssertions = new List<string>();
- //int numRealPushes;
- public override string VCExpressionToString(VCExpr vc)
- {
- return VCExpr2String(vc, 1);
- }
-
- public override void PushVCExpression(VCExpr vc)
- {
- throw new NotImplementedException();
-
- }
-
- public override void Pop()
- {
- SendThisVC("(pop 1)");
- DeclCollector.Pop();
- }
-
- public override int NumAxiomsPushed()
- {
- throw new NotImplementedException();
- //return numRealPushes + pushedAssertions.Count;
- }
-
- private void FlushPushedAssertions()
- {
- throw new NotImplementedException();
- }
-
- public override void Assert(VCExpr vc, bool polarity)
- {
- string a = "";
- if (polarity)
- {
- a = "(assert " + VCExpr2String(vc, 1) + ")";
- }
- else
- {
- a = "(assert (not\n" + VCExpr2String(vc, 1) + "\n))";
- }
- AssertAxioms();
- SendThisVC(a);
- }
-
- public override void DefineMacro(Macro f, VCExpr vc) {
- DeclCollector.AddFunction(f);
- string printedName = Namer.GetQuotedName(f, f.Name);
- var argTypes = f.InParams.Cast<Variable>().MapConcat(p => DeclCollector.TypeToStringReg(p.TypedIdent.Type), " ");
- string decl = "(define-fun " + printedName + " (" + argTypes + ") " + DeclCollector.TypeToStringReg(f.OutParams[0].TypedIdent.Type) + " " + VCExpr2String(vc, 1) + ")";
- AssertAxioms();
- SendThisVC(decl);
- }
-
- public override void AssertAxioms()
- {
- FlushAxioms();
- }
-
- public override void Check()
- {
- PrepareCommon();
- SendThisVC("(check-sat)");
- FlushLogFile();
- }
-
- public override void SetTimeOut(int ms)
- {
- if (options.Solver == SolverKind.Z3) {
- var name = Z3.SetTimeoutOption();
- var value = ms.ToString();
- options.TimeLimit = ms;
- options.SmtOptions.RemoveAll(ov => ov.Option == name);
- options.AddSmtOption(name, value);
- SendThisVC(string.Format("(set-option :{0} {1})", name, value));
- }
- }
-
- public override object Evaluate(VCExpr expr)
- {
- string vcString = VCExpr2String(expr, 1);
- SendThisVC("(get-value (" + vcString + "))");
- var resp = Process.GetProverResponse();
- if (resp == null) throw new VCExprEvaluationException();
- if (!(resp.Name == "" && resp.ArgCount == 1)) throw new VCExprEvaluationException();
- resp = resp.Arguments[0];
- if (resp.Name == "")
- {
- // evaluating an expression
- if (resp.ArgCount == 2)
- resp = resp.Arguments[1];
- else
- throw new VCExprEvaluationException();
- }
- else
- {
- // evaluating a variable
- if (resp.ArgCount == 1)
- resp = resp.Arguments[0];
- else
- throw new VCExprEvaluationException();
- }
- if (resp.Name == "-" && resp.ArgCount == 1) // negative int
- return Microsoft.Basetypes.BigNum.FromString("-" + resp.Arguments[0].Name);
- if (resp.Name == "_" && resp.ArgCount == 2 && resp.Arguments[0].Name.StartsWith("bv")) // bitvector
- return new BvConst(Microsoft.Basetypes.BigNum.FromString(resp.Arguments[0].Name.Substring("bv".Length)),
- int.Parse(resp.Arguments[1].Name));
- if (resp.ArgCount != 0)
- throw new VCExprEvaluationException();
- if (expr.Type.Equals(Boogie.Type.Bool))
- return bool.Parse(resp.Name);
- else if (expr.Type.Equals(Boogie.Type.Int))
- return Microsoft.Basetypes.BigNum.FromString(resp.Name);
- else
- return resp.Name;
- }
-
- /// <summary>
- /// Extra state for ApiChecker (used by stratifiedInlining)
- /// </summary>
- static int nameCounter = 0;
-
- public override Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore, ErrorHandler handler)
- {
- unsatCore = new List<int>();
-
- Push();
- // Name the assumptions
- var nameToAssumption = new Dictionary<string, int>();
- int i = 0;
- foreach (var vc in assumptions)
- {
- var name = "a" + nameCounter.ToString();
- nameCounter++;
- nameToAssumption.Add(name, i);
-
- string vcString = VCExpr2String(vc, 1);
- AssertAxioms();
- SendThisVC(string.Format("(assert (! {0} :named {1}))", vcString, name));
- i++;
- }
- Check();
-
- var outcome = CheckOutcomeCore(handler);
-
- if (outcome != Outcome.Valid) {
- Pop();
- return outcome;
- }
-
- Contract.Assert(usingUnsatCore, "SMTLib prover not setup for computing unsat cores");
- SendThisVC("(get-unsat-core)");
- var resp = Process.GetProverResponse();
- unsatCore = new List<int>();
- if (resp.Name != "") unsatCore.Add(nameToAssumption[resp.Name]);
- foreach (var s in resp.Arguments) unsatCore.Add(nameToAssumption[s.Name]);
-
- FlushLogFile();
- Pop();
- return outcome;
- }
-
- public override void Push()
- {
- SendThisVC("(push 1)");
- DeclCollector.Push();
- }
-
- public override Outcome CheckAssumptions(List<VCExpr> hardAssumptions, List<VCExpr> softAssumptions, out List<int> unsatisfiedSoftAssumptions, ErrorHandler handler) {
- unsatisfiedSoftAssumptions = new List<int>();
-
- // First, convert both hard and soft assumptions to SMTLIB strings
- List<string> hardAssumptionStrings = new List<string>();
- foreach (var a in hardAssumptions) {
- hardAssumptionStrings.Add(VCExpr2String(a, 1));
- }
- List<string> currAssumptionStrings = new List<string>();
- foreach (var a in softAssumptions) {
- currAssumptionStrings.Add(VCExpr2String(a, 1));
- }
-
- Push();
- AssertAxioms();
- foreach (var a in hardAssumptionStrings) {
- SendThisVC("(assert " + a + ")");
- }
- Check();
- Outcome outcome = GetResponse();
- if (outcome != Outcome.Invalid) {
- Pop();
- return outcome;
- }
-
- int k = 0;
- List<string> relaxVars = new List<string>();
- while (true) {
- Push();
- foreach (var a in currAssumptionStrings) {
- SendThisVC("(assert " + a + ")");
- }
- Check();
- outcome = CheckOutcomeCore(handler);
- if (outcome != Outcome.Valid)
- break;
- Pop();
- string relaxVar = "relax_" + k;
- relaxVars.Add(relaxVar);
- SendThisVC("(declare-fun " + relaxVar + " () Int)");
- List<string> nextAssumptionStrings = new List<string>();
- for (int i = 0; i < currAssumptionStrings.Count; i++) {
- string constraint = "(= " + relaxVar + " " + i + ")";
- nextAssumptionStrings.Add("(or " + currAssumptionStrings[i] + " " + constraint + ")");
- }
- currAssumptionStrings = nextAssumptionStrings;
- k++;
- }
-
- if (outcome == Outcome.Invalid) {
- foreach (var relaxVar in relaxVars) {
- SendThisVC("(get-value (" + relaxVar + "))");
- FlushLogFile();
- var resp = Process.GetProverResponse();
- if (resp == null) break;
- if (!(resp.Name == "" && resp.ArgCount == 1)) break;
- resp = resp.Arguments[0];
- if (!(resp.Name != "" && resp.ArgCount == 1)) break;
- resp = resp.Arguments[0];
- if (resp.ArgCount != 0)
- break;
- int v;
- if (int.TryParse(resp.Name, out v))
- unsatisfiedSoftAssumptions.Add(v);
- else
- break;
- }
- Pop();
- }
-
- Pop();
- return outcome;
- }
- }
-
- public class SMTLibInterpolatingProcessTheoremProver : SMTLibProcessTheoremProver
- {
- public SMTLibInterpolatingProcessTheoremProver(ProverOptions options, VCExpressionGenerator gen,
- SMTLibProverContext ctx)
- : base(AddInterpOption(options), gen, ctx)
- {
-
- }
-
- private static ProverOptions AddInterpOption(ProverOptions options)
- {
- var opts = (SMTLibProverOptions)options;
- opts.AddSmtOption("produce-interpolants", "true");
- if (CommandLineOptions.Clo.PrintFixedPoint == null)
- CommandLineOptions.Clo.PrintFixedPoint = "itp.fixedpoint.bpl";
- return opts;
- }
-
- public override void AssertNamed(VCExpr vc, bool polarity, string name)
- {
- string vcString;
- if (polarity)
- {
- vcString = VCExpr2String(vc, 1);
- }
- else
- {
- vcString = "(not " + VCExpr2String(vc, 1) + ")";
- }
- AssertAxioms();
- SendThisVC(string.Format("(assert (! {0} :named {1}))", vcString, name));
- }
-
- public override VCExpr ComputeInterpolant(VCExpr A, VCExpr B)
- {
- string A_str = VCExpr2String(A, 1);
- string B_str = VCExpr2String(B, 1);
-
- AssertAxioms();
- SendThisVC("(compute-interpolant " + A_str + " " + B_str + ")");
-
- SExpr interpolant;
- Outcome result = GetInterpolantResponse(out interpolant);
-
- if (result != Outcome.Valid)
- return null;
-
- VCExpr interpolantVC = SExprToVCExpr(interpolant, new Dictionary<string, VCExpr>());
- return interpolantVC;
- }
-
- private Outcome GetInterpolantResponse(out SExpr interpolant)
- {
- var result = Outcome.Undetermined;
- var wasUnknown = false;
- interpolant = null;
-
- Process.Ping();
- bool onlyOnce = false;
-
- while (true)
- {
- var resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
-
- switch (resp.Name)
- {
- case "unsat":
- result = Outcome.Valid;
- break;
- case "sat":
- result = Outcome.Invalid;
- break;
- case "unknown":
- result = Outcome.Invalid;
- wasUnknown = true;
- break;
- default:
- if (result == Outcome.Valid)
- {
- interpolant = resp as SExpr;
-
- Contract.Assert(onlyOnce == false);
- onlyOnce = true;
- continue;
- }
- HandleProverError("Unexpected prover response: " + resp.ToString());
- break;
- }
- }
-
- if (wasUnknown)
- {
- SendThisVC("(get-info :reason-unknown)");
- Process.Ping();
-
- while (true)
- {
- var resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
-
- if (resp.ArgCount == 1 && resp.Name == ":reason-unknown")
- {
- switch (resp[0].Name)
- {
- case "memout":
- currentErrorHandler.OnResourceExceeded("memory");
- result = Outcome.OutOfMemory;
- Process.NeedsRestart = true;
- break;
- case "timeout":
- case "canceled":
- currentErrorHandler.OnResourceExceeded("timeout");
- result = Outcome.TimeOut;
- break;
- default:
- break;
- }
- }
- else
- {
- HandleProverError("Unexpected prover response (getting info about 'unknown' response): " + resp.ToString());
- }
- }
- }
-
- return result;
- }
-
- public override List<VCExpr> GetTreeInterpolant(List<string> root, List<string> leaves)
- {
- List<VCExpr> result = new List<VCExpr>();
-
- string vcStr = "true";
- foreach (string str in root)
- vcStr = vcStr + " " + str;
- foreach (string str in leaves)
- vcStr = vcStr + "\r\n (interp " + str + ")";
-
- vcStr = "(get-interpolant (and\r\n" + vcStr + "\r\n))";
- SendThisVC(vcStr);
- if(currentLogFile != null) currentLogFile.Flush();
-
- List<SExpr> interpolantList;
- GetTreeInterpolantResponse(out interpolantList);
-
- Dictionary<string, VCExpr> bound = new Dictionary<string, VCExpr>();
- foreach (SExpr sexpr in interpolantList)
- {
- VCExpr interpolantVC = SExprToVCExpr(sexpr, bound);
- result.Add(interpolantVC);
- }
-
- return result;
- }
-
- private void GetTreeInterpolantResponse(out List<SExpr> interpolantList)
- {
- interpolantList = new List<SExpr>();
-
- Process.Ping();
-
- while (true)
- {
- var resp = Process.GetProverResponse();
- if (resp == null || Process.IsPong(resp))
- break;
-
- SExpr interpolant = resp as SExpr;
- if(interpolant == null)
- HandleProverError("Unexpected prover response: got null for interpolant!");
- interpolantList.Add(interpolant);
- }
- }
- }
-
- public class SMTLibProverContext : DeclFreeProverContext
- {
- internal SMTLibProcessTheoremProver parent;
-
- public readonly Dictionary<CtorType, List<Function>> KnownDatatypeConstructors = new Dictionary<CtorType, List<Function>>();
-
- public SMTLibProverContext(VCExpressionGenerator gen,
- VCGenerationOptions genOptions)
- : base(gen, genOptions)
- {
- }
-
- protected SMTLibProverContext(SMTLibProverContext par)
- : base(par)
- {
- }
-
- public override object Clone()
- {
- return new SMTLibProverContext(this);
- }
-
- public override string Lookup(VCExprVar var)
- {
- VCExprVar v = parent.AxBuilder.TryTyped2Untyped(var);
- if (v != null) {
- var = v;
- }
- return parent.Namer.Lookup(var);
- }
-
- public override void DeclareFunction(Function f, string attributes) {
- if (f is DatatypeConstructor) {
- CtorType datatype = (CtorType) f.OutParams[0].TypedIdent.Type;
- if (!KnownDatatypeConstructors.ContainsKey(datatype))
- KnownDatatypeConstructors[datatype] = new List<Function>();
- KnownDatatypeConstructors[datatype].Add(f);
- }
- base.DeclareFunction(f, attributes);
- }
- }
-
- public class Factory : ProverFactory
- {
- // Set programmatically
- public static bool UseInterpolation = false;
-
- public override object SpawnProver(ProverOptions options, object ctxt)
- {
- //Contract.Requires(ctxt != null);
- //Contract.Requires(options != null);
- Contract.Ensures(Contract.Result<object>() != null);
-
- return this.SpawnProver(options,
- cce.NonNull((SMTLibProverContext)ctxt).ExprGen,
- cce.NonNull((SMTLibProverContext)ctxt));
- }
-
- public override object NewProverContext(ProverOptions options)
- {
- //Contract.Requires(options != null);
- Contract.Ensures(Contract.Result<object>() != null);
-
- VCExpressionGenerator gen = new VCExpressionGenerator();
- List<string>/*!>!*/ proverCommands = new List<string/*!*/>();
- proverCommands.Add("smtlib");
- var opts = (SMTLibProverOptions)options ;
- if (opts.Solver == SolverKind.Z3)
- proverCommands.Add("z3");
- else
- proverCommands.Add("external");
- VCGenerationOptions genOptions = new VCGenerationOptions(proverCommands);
- return new SMTLibProverContext(gen, genOptions);
- }
-
- public override ProverOptions BlankProverOptions()
- {
- return new SMTLibProverOptions();
- }
-
- protected virtual SMTLibProcessTheoremProver SpawnProver(ProverOptions options,
- VCExpressionGenerator gen,
- SMTLibProverContext ctx)
- {
- Contract.Requires(options != null);
- Contract.Requires(gen != null);
- Contract.Requires(ctx != null);
- Contract.Ensures(Contract.Result<SMTLibProcessTheoremProver>() != null);
-
- if (UseInterpolation)
- return new SMTLibInterpolatingProcessTheoremProver(options, gen, ctx);
-
- return new SMTLibProcessTheoremProver(options, gen, ctx);
- }
-
- public override bool SupportsLabels(ProverOptions options)
- {
- return ((SMTLibProverOptions)options).SupportsLabels;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.IO;
+//using ExternalProver;
+using System.Linq;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie;
+using Microsoft.Boogie.VCExprAST;
+using Microsoft.Boogie.Clustering;
+using Microsoft.Boogie.TypeErasure;
+using System.Text;
+
+using RPFP = Microsoft.Boogie.RPFP;
+
+namespace Microsoft.Boogie.SMTLib
+{
+ public class SMTLibProcessTheoremProver : ProverInterface
+ {
+ private readonly SMTLibProverContext ctx;
+ private VCExpressionGenerator gen;
+ private readonly SMTLibProverOptions options;
+ private bool usingUnsatCore;
+ private RPFP rpfp = null;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(ctx != null);
+ Contract.Invariant(AxBuilder != null);
+ Contract.Invariant(Namer != null);
+ Contract.Invariant(DeclCollector != null);
+ Contract.Invariant(cce.NonNullElements(Axioms));
+ Contract.Invariant(cce.NonNullElements(TypeDecls));
+ Contract.Invariant(_backgroundPredicates != null);
+
+ }
+
+
+ [NotDelayed]
+ public SMTLibProcessTheoremProver(ProverOptions options, VCExpressionGenerator gen,
+ SMTLibProverContext ctx)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(gen != null);
+ Contract.Requires(ctx != null);
+
+ InitializeGlobalInformation();
+
+ this.options = (SMTLibProverOptions)options;
+ this.ctx = ctx;
+ this.gen = gen;
+ this.usingUnsatCore = false;
+
+ SetupAxiomBuilder(gen);
+
+ Namer = new SMTLibNamer();
+ ctx.parent = this;
+ this.DeclCollector = new TypeDeclCollector((SMTLibProverOptions)options, Namer);
+
+ if (CommandLineOptions.Clo.PrintFixedPoint != null || CommandLineOptions.Clo.PrintConjectures != null)
+ {
+ declHandler = new MyDeclHandler();
+ DeclCollector.SetDeclHandler(declHandler);
+ }
+
+ SetupProcess();
+
+ if (CommandLineOptions.Clo.StratifiedInlining > 0 || CommandLineOptions.Clo.ContractInfer
+ || CommandLineOptions.Clo.SecureVcGen != null)
+ {
+ // Prepare for ApiChecker usage
+ if (options.LogFilename != null && currentLogFile == null)
+ {
+ currentLogFile = OpenOutputFile("");
+ }
+ PrepareCommon();
+ }
+ }
+
+ public override void AssertNamed(VCExpr vc, bool polarity, string name)
+ {
+ string vcString;
+ if (polarity)
+ {
+ vcString = VCExpr2String(vc, 1);
+ }
+ else
+ {
+ vcString = "(not " + VCExpr2String(vc, 1) + ")";
+ }
+ AssertAxioms();
+ SendThisVC(string.Format("(assert (! {0} :named {1}))", vcString, name));
+ }
+
+ private void SetupAxiomBuilder(VCExpressionGenerator gen)
+ {
+ switch (CommandLineOptions.Clo.TypeEncodingMethod)
+ {
+ case CommandLineOptions.TypeEncoding.Arguments:
+ AxBuilder = new TypeAxiomBuilderArguments(gen);
+ AxBuilder.Setup();
+ break;
+ case CommandLineOptions.TypeEncoding.Monomorphic:
+ AxBuilder = new TypeAxiomBuilderPremisses(gen);
+ break;
+ default:
+ AxBuilder = new TypeAxiomBuilderPremisses(gen);
+ AxBuilder.Setup();
+ break;
+ }
+ }
+
+ ProcessStartInfo ComputeProcessStartInfo()
+ {
+ var path = this.options.ProverPath;
+ switch (options.Solver) {
+ case SolverKind.Z3:
+ if (path == null)
+ path = Z3.ExecutablePath();
+ return SMTLibProcess.ComputerProcessStartInfo(path, "AUTO_CONFIG=false -smt2 -in");
+ case SolverKind.CVC4:
+ if (path == null)
+ path = CVC4.ExecutablePath();
+ return SMTLibProcess.ComputerProcessStartInfo(path, "--lang=smt --no-strict-parsing --no-condense-function-values --incremental");
+ default:
+ Debug.Assert(false);
+ return null;
+ }
+ }
+
+ void SetupProcess()
+ {
+ if (Process != null) return;
+
+ var psi = ComputeProcessStartInfo();
+ Process = new SMTLibProcess(psi, this.options);
+ Process.ErrorHandler += this.HandleProverError;
+ }
+
+
+ void PossiblyRestart()
+ {
+ if (Process != null && Process.NeedsRestart) {
+ Process.Close();
+ Process = null;
+ SetupProcess();
+ Process.Send(common.ToString());
+ }
+ }
+
+ public override ProverContext Context
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<ProverContext>() != null);
+
+ return ctx;
+ }
+ }
+
+ internal TypeAxiomBuilder AxBuilder { get; private set; }
+ internal readonly UniqueNamer Namer;
+ readonly TypeDeclCollector DeclCollector;
+ protected SMTLibProcess Process;
+ readonly List<string> proverErrors = new List<string>();
+ readonly List<string> proverWarnings = new List<string>();
+ readonly StringBuilder common = new StringBuilder();
+ protected TextWriter currentLogFile;
+ protected volatile ErrorHandler currentErrorHandler;
+
+ private void FeedTypeDeclsToProver()
+ {
+ foreach (string s in DeclCollector.GetNewDeclarations()) {
+ Contract.Assert(s != null);
+ AddTypeDecl(s);
+ }
+ }
+
+ private string Sanitize(string msg)
+ {
+ var idx = msg.IndexOf('\n');
+ if (idx > 0)
+ msg = msg.Replace("\r", "").Replace("\n", "\r\n");
+ return msg;
+ }
+
+ public override void LogComment(string comment)
+ {
+ SendCommon("; " + comment);
+ }
+
+ private void SendCommon(string s)
+ {
+ Send(s, true);
+ }
+
+ protected void SendThisVC(string s)
+ {
+ Send(s, false);
+ }
+
+ private void Send(string s, bool isCommon)
+ {
+ s = Sanitize(s);
+
+ if (isCommon)
+ common.Append(s).Append("\r\n");
+
+ if (Process != null)
+ Process.Send(s);
+ if (currentLogFile != null) {
+ currentLogFile.WriteLine(s);
+ currentLogFile.Flush();
+ }
+ }
+
+ private void FindDependentTypes(Type type, List<CtorType> dependentTypes)
+ {
+ MapType mapType = type as MapType;
+ if (mapType != null)
+ {
+ foreach (Type t in mapType.Arguments)
+ {
+ FindDependentTypes(t, dependentTypes);
+ }
+ FindDependentTypes(mapType.Result, dependentTypes);
+ }
+ CtorType ctorType = type as CtorType;
+ if (ctorType != null && ctx.KnownDatatypeConstructors.ContainsKey(ctorType))
+ {
+ dependentTypes.Add(ctorType);
+ }
+ }
+
+ private void PrepareCommon()
+ {
+ if (common.Length == 0)
+ {
+ SendCommon("(set-option :print-success false)");
+ SendCommon("(set-info :smt-lib-version 2.0)");
+ if (options.ProduceModel())
+ SendCommon("(set-option :produce-models true)");
+ foreach (var opt in options.SmtOptions)
+ {
+ SendCommon("(set-option :" + opt.Option + " " + opt.Value + ")");
+ }
+
+ if (!string.IsNullOrEmpty(options.Logic))
+ {
+ SendCommon("(set-logic " + options.Logic + ")");
+ }
+
+ // Set produce-unsat-cores last. It seems there's a bug in Z3 where if we set it earlier its value
+ // gets reset by other set-option commands ( https://z3.codeplex.com/workitem/188 )
+ if (CommandLineOptions.Clo.PrintNecessaryAssumes || (CommandLineOptions.Clo.ContractInfer && (CommandLineOptions.Clo.UseUnsatCoreForContractInfer || CommandLineOptions.Clo.ExplainHoudini)))
+ {
+ SendCommon("(set-option :produce-unsat-cores true)");
+ this.usingUnsatCore = true;
+ }
+
+ SendCommon("; done setting options\n");
+ SendCommon(_backgroundPredicates);
+
+ if (options.UseTickleBool)
+ {
+ SendCommon("(declare-fun tickleBool (Bool) Bool)");
+ SendCommon("(assert (and (tickleBool true) (tickleBool false)))");
+ }
+
+ if (CommandLineOptions.Clo.RunDiagnosticsOnTimeout)
+ {
+ SendCommon("(declare-fun timeoutDiagnostics (Int) Bool)");
+ }
+
+ if (ctx.KnownDatatypeConstructors.Count > 0)
+ {
+ GraphUtil.Graph<CtorType> dependencyGraph = new GraphUtil.Graph<CtorType>();
+ foreach (CtorType datatype in ctx.KnownDatatypeConstructors.Keys)
+ {
+ dependencyGraph.AddSource(datatype);
+ foreach (Function f in ctx.KnownDatatypeConstructors[datatype])
+ {
+ List<CtorType> dependentTypes = new List<CtorType>();
+ foreach (Variable v in f.InParams)
+ {
+ FindDependentTypes(v.TypedIdent.Type, dependentTypes);
+ }
+ foreach (CtorType result in dependentTypes)
+ {
+ dependencyGraph.AddEdge(datatype, result);
+ }
+ }
+ }
+ GraphUtil.StronglyConnectedComponents<CtorType> sccs = new GraphUtil.StronglyConnectedComponents<CtorType>(dependencyGraph.Nodes, dependencyGraph.Predecessors, dependencyGraph.Successors);
+ sccs.Compute();
+ foreach (GraphUtil.SCC<CtorType> scc in sccs)
+ {
+ string datatypeString = "";
+ foreach (CtorType datatype in scc)
+ {
+ datatypeString += "(" + SMTLibExprLineariser.TypeToString(datatype) + " ";
+ foreach (Function f in ctx.KnownDatatypeConstructors[datatype])
+ {
+ string quotedConstructorName = Namer.GetQuotedName(f, f.Name);
+ if (f.InParams.Count == 0)
+ {
+ datatypeString += quotedConstructorName + " ";
+ }
+ else
+ {
+ datatypeString += "(" + quotedConstructorName + " ";
+ foreach (Variable v in f.InParams)
+ {
+ string quotedSelectorName = Namer.GetQuotedName(v, v.Name + "#" + f.Name);
+ datatypeString += "(" + quotedSelectorName + " " + DeclCollector.TypeToStringReg(v.TypedIdent.Type) + ") ";
+ }
+ datatypeString += ") ";
+ }
+ }
+ datatypeString += ") ";
+ }
+ List<string> decls = DeclCollector.GetNewDeclarations();
+ foreach (string decl in decls)
+ {
+ SendCommon(decl);
+ }
+ SendCommon("(declare-datatypes () (" + datatypeString + "))");
+ }
+ }
+ if (CommandLineOptions.Clo.ProverPreamble != null)
+ SendCommon("(include \"" + CommandLineOptions.Clo.ProverPreamble + "\")");
+ }
+
+ if (!AxiomsAreSetup)
+ {
+ var axioms = ctx.Axioms;
+ var nary = axioms as VCExprNAry;
+ if (nary != null && nary.Op == VCExpressionGenerator.AndOp)
+ foreach (var expr in nary.UniformArguments)
+ {
+ var str = VCExpr2String(expr, -1);
+ if (str != "true")
+ AddAxiom(str);
+ }
+ else
+ AddAxiom(VCExpr2String(axioms, -1));
+ AxiomsAreSetup = true;
+ }
+ }
+
+ public override int FlushAxiomsToTheoremProver()
+ {
+ // we feed the axioms when begincheck is called.
+ return 0;
+ }
+
+ private void FlushAxioms()
+ {
+ TypeDecls.Iter(SendCommon);
+ TypeDecls.Clear();
+ foreach (string s in Axioms) {
+ Contract.Assert(s != null);
+ if (s != "true")
+ SendCommon("(assert " + s + ")");
+ }
+ Axioms.Clear();
+ //FlushPushedAssertions();
+ }
+
+ private void CloseLogFile()
+ {
+ if (currentLogFile != null) {
+ currentLogFile.Close();
+ currentLogFile = null;
+ }
+ }
+
+ private void FlushLogFile()
+ {
+ if (currentLogFile != null) {
+ currentLogFile.Flush();
+ }
+ }
+
+ public override void Close()
+ {
+ base.Close();
+ CloseLogFile();
+ if (Process != null)
+ Process.Close();
+ }
+
+ public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler)
+ {
+ //Contract.Requires(descriptiveName != null);
+ //Contract.Requires(vc != null);
+ //Contract.Requires(handler != null);
+ rpfp = null;
+
+ if (options.SeparateLogFiles) CloseLogFile(); // shouldn't really happen
+
+ if (options.LogFilename != null && currentLogFile == null)
+ {
+ currentLogFile = OpenOutputFile(descriptiveName);
+ currentLogFile.Write(common.ToString());
+ }
+
+ PrepareCommon();
+
+ OptimizationRequests.Clear();
+
+ string vcString = "(assert (not\n" + VCExpr2String(vc, 1) + "\n))";
+ FlushAxioms();
+
+ PossiblyRestart();
+
+ SendThisVC("(push 1)");
+ SendThisVC("(set-info :boogie-vc-id " + SMTLibNamer.QuoteId(descriptiveName) + ")");
+
+ SendThisVC(vcString);
+
+ SendOptimizationRequests();
+
+ FlushLogFile();
+
+ if (Process != null) {
+ Process.PingPong(); // flush any errors
+
+ if (Process.Inspector != null)
+ Process.Inspector.NewProblem(descriptiveName, vc, handler);
+ }
+
+ SendCheckSat();
+ FlushLogFile();
+ }
+
+ private void SendOptimizationRequests()
+ {
+ if (options.Solver == SolverKind.Z3 && 0 < OptimizationRequests.Count)
+ {
+ foreach (var r in OptimizationRequests)
+ {
+ SendThisVC(r);
+ }
+ }
+ }
+
+ public override void Reset(VCExpressionGenerator gen)
+ {
+ if (options.Solver == SolverKind.Z3)
+ {
+ this.gen = gen;
+ SendThisVC("(reset)");
+
+ if (0 < common.Length)
+ {
+ var c = common.ToString();
+ Process.Send(c);
+ if (currentLogFile != null)
+ {
+ currentLogFile.WriteLine(c);
+ }
+ }
+ }
+ }
+
+ public override void FullReset(VCExpressionGenerator gen)
+ {
+ if (options.Solver == SolverKind.Z3)
+ {
+ this.gen = gen;
+ SendThisVC("(reset)");
+ Namer.Reset();
+ common.Clear();
+ SetupAxiomBuilder(gen);
+ Axioms.Clear();
+ TypeDecls.Clear();
+ AxiomsAreSetup = false;
+ ctx.Reset();
+ ctx.KnownDatatypeConstructors.Clear();
+ ctx.parent = this;
+ DeclCollector.Reset();
+ NamedAssumes.Clear();
+ UsedNamedAssumes = null;
+ SendThisVC("; did a full reset");
+ }
+ }
+
+
+
+ private string StripCruft(string name){
+ if(name.Contains("@@"))
+ return name.Remove(name.LastIndexOf ("@@"));
+ return name;
+ }
+
+ private class BadExprFromProver : Exception
+ {
+ };
+
+ private delegate VCExpr ArgGetter (int pos);
+
+ private delegate VCExpr[] ArgsGetter ();
+
+ private delegate VCExprVar[] VarsGetter ();
+
+ private VCExprOp VCStringToVCOp (string op)
+ {
+ switch (op) {
+ case "+" :
+ return VCExpressionGenerator.AddIOp;
+ case "-" :
+ return VCExpressionGenerator.SubIOp;
+ case "*" :
+ return VCExpressionGenerator.MulIOp;
+ case "div" :
+ return VCExpressionGenerator.DivIOp;
+ case "=" :
+ return VCExpressionGenerator.EqOp;
+ case "<=" :
+ return VCExpressionGenerator.LeOp;
+ case "<" :
+ return VCExpressionGenerator.LtOp;
+ case ">=" :
+ return VCExpressionGenerator.GeOp;
+ case ">" :
+ return VCExpressionGenerator.GtOp;
+ case "and" :
+ return VCExpressionGenerator.AndOp;
+ case "or" :
+ return VCExpressionGenerator.OrOp;
+ case "not" :
+ return VCExpressionGenerator.NotOp;
+ case "ite" :
+ return VCExpressionGenerator.IfThenElseOp;
+ default:
+ return null;
+ }
+ }
+
+ private class MyDeclHandler : TypeDeclCollector.DeclHandler {
+ public Dictionary<string,VCExprVar> var_map = new Dictionary<string, VCExprVar>();
+ public Dictionary<string,Function> func_map = new Dictionary<string, Function>();
+ public override void VarDecl(VCExprVar v){
+ var_map[v.Name] = v;
+ }
+ public override void FuncDecl(Function f){
+ func_map[f.Name] = f;
+ }
+ public MyDeclHandler() {
+ }
+ }
+
+ private MyDeclHandler declHandler = null;
+
+ private VCExprVar SExprToVar (SExpr e)
+ {
+ if(e.Arguments.Count() != 1){
+ HandleProverError ("Prover error: bad quantifier syntax");
+ throw new BadExprFromProver ();
+ }
+ string vname = StripCruft(e.Name);
+ SExpr vtype = e[0];
+ switch(vtype.Name){
+ case "Int":
+ return gen.Variable(vname,Type.Int);
+ case "Bool":
+ return gen.Variable (vname,Type.Bool);
+ case "Array":{
+ // TODO: handle more general array types
+ var idxType = Type.Int; // well, could be something else
+ var valueType =
+ (vtype.Arguments[1].Name == "Int") ? Type.Int : Type.Bool;
+ var types = new List<Type>();
+ types.Add(idxType);
+ return gen.Variable (vname, new MapType(Token.NoToken,new List<TypeVariable>(),types,valueType));
+ }
+ default: {
+ HandleProverError ("Prover error: bad type: " + vtype.Name);
+ throw new BadExprFromProver ();
+ }
+ }
+ }
+
+ private VCExpr MakeBinary(VCExprOp op, VCExpr [] args)
+ {
+ if (args.Count() == 0)
+ {
+ // with zero args we need the identity of the op
+ if (op == VCExpressionGenerator.AndOp)
+ return VCExpressionGenerator.True;
+ if (op == VCExpressionGenerator.OrOp)
+ return VCExpressionGenerator.False;
+ if (op == VCExpressionGenerator.AddIOp)
+ {
+ Microsoft.Basetypes.BigNum x = Microsoft.Basetypes.BigNum.ZERO;
+ return gen.Integer(x);
+ }
+ HandleProverError("Prover error: bad expression ");
+ throw new BadExprFromProver();
+ }
+ var temp = args[0];
+ for (int i = 1; i < args.Count(); i++)
+ temp = gen.Function(op, temp, args[i]);
+ return temp;
+ }
+
+ protected VCExpr SExprToVCExpr (SExpr e, Dictionary<string,VCExpr> bound)
+ {
+ if (e.Arguments.Count() == 0) {
+ var name = StripCruft(e.Name);
+ if (name [0] >= '0' && name [0] <= '9') {
+ Microsoft.Basetypes.BigNum x = Microsoft.Basetypes.BigNum.FromString(name);
+ return gen.Integer (x);
+ }
+ if (bound.ContainsKey (name)) {
+ return bound [name];
+ }
+ if(name == "true")
+ return VCExpressionGenerator.True;
+ if(name == "false")
+ return VCExpressionGenerator.False;
+ if(declHandler.var_map.ContainsKey(name))
+ return declHandler.var_map[name];
+ HandleProverError ("Prover error: unknown symbol:" + name);
+ //throw new BadExprFromProver ();
+ var v = gen.Variable(name, Type.Int);
+ bound.Add(name, v);
+ return v;
+ }
+ ArgGetter g = i => SExprToVCExpr (e [i], bound);
+ ArgsGetter ga = () => e.Arguments.Select (x => SExprToVCExpr (x, bound)).ToArray ();
+ VarsGetter gb = () => e [0].Arguments.Select (x => SExprToVar (x)).ToArray ();
+ switch (e.Name) {
+ case "select" :
+ return gen.Select (ga ());
+ case "store" :
+ return gen.Store (ga ());
+ case "forall":
+ case "exists":
+ {
+ var binds = e.Arguments[0];
+ var vcbinds = new List<VCExprVar>();
+ var bound_copy = new Dictionary<string, VCExpr>(bound);
+ for (int i = 0; i < binds.Arguments.Count(); i++)
+ {
+ var bind = binds.Arguments[i];
+ var symb = StripCruft(bind.Name);
+ var vcv = SExprToVar(bind);
+ vcbinds.Add(vcv);
+ bound[symb] = vcv;
+ }
+ var body = g(1);
+ if (e.Name == "forall")
+ body = gen.Forall(vcbinds, new List<VCTrigger>(), body);
+ else
+ body = gen.Exists(vcbinds, new List<VCTrigger>(), body);
+ bound = bound_copy;
+ return body;
+ }
+ case "-" : // have to deal with unary case
+ {
+ if(e.ArgCount == 1){
+ var args = new VCExpr[2];
+ args[0] = gen.Integer (Microsoft.Basetypes.BigNum.ZERO);
+ args[1] = g(0);
+ return gen.Function(VCStringToVCOp("-"),args);
+ }
+ return gen.Function(VCStringToVCOp("-"),ga());
+ }
+ case "!" : // this is commentary
+ return g(0);
+ case "let" : {
+ // we expand lets exponentially since there is no let binding in Boogie surface syntax
+ bool expand_lets = true;
+ var binds = e.Arguments[0];
+ var vcbinds = new List<VCExprLetBinding>();
+ var bound_copy = new Dictionary<string, VCExpr>(bound);
+ for(int i = 0; i < binds.Arguments.Count(); i++){
+ var bind = binds.Arguments[i];
+ var symb = bind.Name;
+ var def = bind.Arguments[0];
+ var vce = SExprToVCExpr(def, bound);
+ var vcv = gen.Variable(symb,vce.Type);
+ var vcb = gen.LetBinding(vcv,vce);
+ vcbinds.Add (vcb);
+ bound[symb] = expand_lets ? vce : vcv;
+ }
+ var body = g(1);
+ if(!expand_lets)
+ body = gen.Let(vcbinds,body);
+ bound = bound_copy;
+ return body;
+ }
+
+ default: {
+ var op = VCStringToVCOp (e.Name);
+ if (op == null) {
+ var name = StripCruft(e.Name);
+ if(declHandler.func_map.ContainsKey(name)){
+ Function f = declHandler.func_map[name];
+ return gen.Function (f, ga());
+ }
+ HandleProverError ("Prover error: unknown operator:" + e.Name);
+ throw new BadExprFromProver ();
+ }
+ if(op.Arity == 2)
+ return MakeBinary (op, ga ());
+ return gen.Function(op, ga());
+ }
+ }
+ }
+
+ private void SExprToSoln (SExpr resp,
+ Dictionary<int,Dictionary<string,string>> varSubst)
+ {
+ Dictionary<string, RPFP.Node> pmap = new Dictionary<string,RPFP.Node> ();
+
+ foreach (var node in rpfp.nodes)
+ pmap.Add ((node.Name as VCExprBoogieFunctionOp).Func.Name, node);
+
+ var lines = resp.Arguments;
+
+ // get all the predicate definitions
+ for (int i = 0; i < lines.Length; i++) {
+ var line = lines [i];
+ string pname;
+ RPFP.Transformer annot;
+ GetDefun(line, out pname, out annot);
+
+ if(pmap.ContainsKey(pname)){
+ var node = pmap[pname];
+ node.Annotation = annot;
+ }
+ else if(pname[0] != '@'){ // if not an internal symbol
+ HandleProverError ("Prover error: got unknown predicate:" + pname);
+ throw new BadExprFromProver ();
+ }
+ }
+
+ }
+
+ private void GetDefun(SExpr line, out string pname, out RPFP.Transformer annot)
+ {
+ if (line.Name != "define-fun")
+ {
+ HandleProverError("Prover error: expected define-fun but got:" + line.Name);
+ throw new BadExprFromProver();
+ }
+ if (line.ArgCount != 4)
+ {
+ HandleProverError("Prover error: define-fun has wrong number of arguments");
+ throw new BadExprFromProver();
+ }
+ pname = StripCruft(line.Arguments[0].Name);
+ var pvars = line.Arguments[1];
+ var pbody = line.Arguments[3]; // range has to be Bool
+ var binding = new Dictionary<string, VCExpr>();
+ var pvs = new List<VCExpr>();
+ foreach (var b in pvars.Arguments)
+ {
+ var e = SExprToVar(b);
+ pvs.Add(e);
+ binding.Add(StripCruft(b.Name), e);
+ }
+ VCExpr bexpr = SExprToVCExpr(pbody, binding);
+
+ annot = rpfp.CreateRelation(pvs.ToArray(), bexpr);
+ }
+
+ private RPFP.Node SExprToCex(SExpr resp, ErrorHandler handler,
+ Dictionary<int,Dictionary<string,string>> varSubst)
+ {
+ Dictionary<string, RPFP.Node> nmap = new Dictionary<string,RPFP.Node>();
+ Dictionary<string, RPFP.Node> pmap = new Dictionary<string,RPFP.Node>();
+
+ foreach(var node in rpfp.nodes)
+ pmap.Add((node.Name as VCExprBoogieFunctionOp).Func.Name,node);
+
+ RPFP.Node topnode = null;
+ var lines = resp.Arguments;
+
+ // last line of derivation is from query, skip it
+ for (int i = 0; i < lines.Length-1; i++)
+ {
+ var line = lines[i];
+ if (line.ArgCount != 6)
+ {
+ HandleProverError("bad derivation line from prover: " + line.ToString());
+ return null;
+ }
+ var name = line[0];
+ var conseq = line[1];
+ var rule = line[2];
+ var subst = line[3];
+ var labs = line[4];
+ var refs = line[5];
+ var predName = conseq.Name;
+ {
+ string spacer = "@@"; // Hack! UniqueNamer is adding these and I can't stop it!
+ int pos = predName.LastIndexOf(spacer);
+ if (pos >= 0)
+ predName = predName.Substring(0, pos);
+ }
+ RPFP.Node node = null;
+ if (!pmap.TryGetValue(predName, out node))
+ {
+ HandleProverError("unknown predicate from prover: " + predName.ToString());
+ return null;
+ }
+ RPFP.Node cexnode = rpfp.CloneNode(node);
+ cexnode.map = node;
+ nmap.Add(name.Name, cexnode);
+ List<RPFP.Node> Chs = new List<RPFP.Node>();
+
+ if (refs.Name != "ref")
+ {
+ HandleProverError("bad references from prover: " + refs.ToString());
+ return null;
+ }
+ foreach (var c in refs.Arguments)
+ {
+ if (c.Name == "true")
+ Chs.Add(null);
+ else
+ {
+ RPFP.Node ch = null;
+ if (!nmap.TryGetValue(c.Name, out ch))
+ {
+ HandleProverError("unknown reference from prover: " + c.ToString());
+ return null;
+ }
+ Chs.Add(ch);
+ }
+ }
+
+ if (!rule.Name.StartsWith("rule!"))
+ {
+ HandleProverError("bad rule name from prover: " + refs.ToString());
+ return null;
+ }
+ int ruleNum = Convert.ToInt32(rule.Name.Substring(5)) - 1;
+ if (ruleNum < 0 || ruleNum > rpfp.edges.Count)
+ {
+ HandleProverError("bad rule name from prover: " + refs.ToString());
+ return null;
+ }
+ RPFP.Edge orig_edge = rpfp.edges[ruleNum];
+ RPFP.Edge e = rpfp.CreateEdge(cexnode, orig_edge.F, Chs.ToArray());
+ e.map = orig_edge;
+ topnode = cexnode;
+
+ if (labs.Name != "labels")
+ {
+ HandleProverError("bad labels from prover: " + labs.ToString());
+ return null;
+ }
+ e.labels = new HashSet<string>();
+ foreach (var l in labs.Arguments)
+ e.labels.Add(l.Name);
+
+ if (subst.Name != "subst")
+ {
+ HandleProverError("bad subst from prover: " + subst.ToString());
+ return null;
+ }
+ Dictionary<string, string> dict = new Dictionary<string, string>();
+ varSubst[e.number] = dict;
+ foreach (var s in subst.Arguments)
+ {
+ if (s.Name != "=" || s.Arguments.Length != 2)
+ {
+ HandleProverError("bad equation from prover: " + s.ToString());
+ return null;
+ }
+ string uniqueName = s.Arguments[0].Name;
+ string spacer = "@@"; // Hack! UniqueNamer is adding these and I can't stop it!
+ int pos = uniqueName.LastIndexOf(spacer);
+ if (pos >= 0)
+ uniqueName = uniqueName.Substring(0, pos);
+ dict.Add(uniqueName, s.Arguments[1].ToString());
+ }
+
+ }
+ if (topnode == null)
+ {
+ HandleProverError("empty derivation from prover: " + resp.ToString());
+ }
+ return topnode;
+ }
+
+ private Model SExprToModel(SExpr resp, ErrorHandler handler)
+ {
+ // Concatenate all the arguments
+ string modelString = resp[0].Name;
+ // modelString = modelString.Substring(7, modelString.Length - 8); // remove "(model " and final ")"
+ var models = Model.ParseModels(new StringReader("Error model: \n" + modelString));
+ if (models == null || models.Count == 0)
+ {
+ HandleProverError("no model from prover: " + resp.ToString());
+ }
+ return models[0];
+ }
+
+ private string QuantifiedVCExpr2String(VCExpr x)
+ {
+ return VCExpr2String(x, 1);
+#if false
+ if (!(x is VCExprQuantifier))
+ return VCExpr2String(x, 1);
+ VCExprQuantifier node = (x as VCExprQuantifier);
+ if(node.BoundVars.Count == 0)
+ return VCExpr2String(x, 1);
+
+ StringWriter wr = new StringWriter();
+
+ string kind = node.Quan == Quantifier.ALL ? "forall" : "exists";
+ wr.Write("({0} (", kind);
+
+ for (int i = 0; i < node.BoundVars.Count; i++)
+ {
+ VCExprVar var = node.BoundVars[i];
+ Contract.Assert(var != null);
+ string printedName = Namer.GetQuotedName(var, var.Name);
+ Contract.Assert(printedName != null);
+ wr.Write("({0} {1}) ", printedName, SMTLibExprLineariser.TypeToString(var.Type));
+ }
+
+ wr.Write(") ");
+ wr.Write(VCExpr2String(node.Body, 1));
+ wr.Write(")");
+ string res = wr.ToString();
+ return res;
+#endif
+ }
+
+ public override Outcome CheckRPFP(string descriptiveName, RPFP _rpfp, ErrorHandler handler,
+ out RPFP.Node cex,
+ Dictionary<int, Dictionary<string, string>> varSubst,
+ Dictionary<string, int> extra_bound)
+ {
+ //Contract.Requires(descriptiveName != null);
+ //Contract.Requires(vc != null);
+ //Contract.Requires(handler != null);
+ rpfp = _rpfp;
+ cex = null;
+
+
+ if (options.SeparateLogFiles) CloseLogFile(); // shouldn't really happen
+
+ if (options.LogFilename != null && currentLogFile == null)
+ {
+ currentLogFile = OpenOutputFile(descriptiveName);
+ currentLogFile.Write(common.ToString());
+ }
+
+ PrepareCommon();
+
+ Push();
+ SendThisVC("(fixedpoint-push)");
+ foreach (var node in rpfp.nodes)
+ {
+ DeclCollector.RegisterRelation((node.Name as VCExprBoogieFunctionOp).Func);
+ }
+
+ LineariserOptions.Default.LabelsBelowQuantifiers = true;
+ List<string> ruleStrings = new List<string>();
+ var recursion_bound = CommandLineOptions.Clo.RecursionBound;
+ foreach (var edge in rpfp.edges)
+ {
+ string node_name = (edge.Parent.Name as VCExprBoogieFunctionOp).Func.Name;
+ string rule_name = "rule_" + edge.number.ToString();
+ string rec_bound = "";
+ if(extra_bound != null && extra_bound.ContainsKey(node_name))
+ rec_bound = (recursion_bound + extra_bound[node_name]).ToString();
+ string ruleString = "(rule " + QuantifiedVCExpr2String(rpfp.GetRule(edge)) + " " + rule_name + " " + rec_bound + "\n)";
+ ruleStrings.Add(ruleString);
+ }
+ string queryString = "(query " + QuantifiedVCExpr2String(rpfp.GetQuery()) + "\n :engine duality\n :print-certificate true\n";
+
+#if true
+ if (CommandLineOptions.Clo.StratifiedInlining != 0)
+ queryString += " :stratified-inlining true\n";
+ if (CommandLineOptions.Clo.RecursionBound > 0)
+ queryString += " :recursion-bound " + Convert.ToString(CommandLineOptions.Clo.RecursionBound) + "\n";
+#endif
+ queryString += ")";
+ LineariserOptions.Default.LabelsBelowQuantifiers = false;
+ FlushAxioms();
+
+ PossiblyRestart();
+
+ SendThisVC("(set-info :boogie-vc-id " + SMTLibNamer.QuoteId(descriptiveName) + ")");
+ foreach(var rs in ruleStrings)
+ SendThisVC(rs);
+ FlushLogFile();
+
+ if (Process != null)
+ {
+ Process.PingPong(); // flush any errors
+
+#if false
+ // TODO: this is not going to work
+ if (Process.Inspector != null)
+ Process.Inspector.NewProblem(descriptiveName, vc, handler);
+#endif
+ }
+
+ SendThisVC(queryString);
+ FlushLogFile();
+
+ var result = Outcome.Undetermined;
+
+ if (Process != null)
+ {
+
+ var resp = Process.GetProverResponse();
+
+ if (proverErrors.Count > 0)
+ {
+ result = Outcome.Undetermined;
+ foreach (var err in proverErrors)
+ {
+ if (err.Contains("canceled"))
+ {
+ result = Outcome.TimeOut;
+ }
+ }
+ }
+ else if(resp == null)
+ HandleProverError("Prover did not respond");
+ else switch (resp.Name)
+ {
+ case "unsat":
+ result = Outcome.Valid;
+ break;
+ case "sat":
+ result = Outcome.Invalid;
+ break;
+ case "unknown":
+ result = Outcome.Invalid;
+ break;
+ case "bounded":
+ result = Outcome.Bounded;
+ break;
+ case "error":
+ if (resp.ArgCount > 0 && resp.Arguments[0].Name.Contains("canceled"))
+ {
+ result = Outcome.TimeOut;
+ }
+ else
+ {
+ HandleProverError("Prover error: " + resp.Arguments[0]);
+ result = Outcome.Undetermined;
+ }
+ break;
+ default:
+ HandleProverError("Unexpected prover response: " + resp.ToString());
+ break;
+ }
+
+ switch (result)
+ {
+ case Outcome.Invalid:
+ {
+ resp = Process.GetProverResponse();
+ if (resp.Name == "derivation")
+ {
+ cex = SExprToCex(resp, handler,varSubst);
+ }
+ else
+ HandleProverError("Unexpected prover response: " + resp.ToString());
+ resp = Process.GetProverResponse();
+ if (resp.Name == "model")
+ {
+ var model = SExprToModel(resp, handler);
+ cex.owner.SetBackgroundModel(model);
+ }
+ else
+ HandleProverError("Unexpected prover response: " + resp.ToString());
+ break;
+ }
+ case Outcome.Valid:
+ case Outcome.Bounded:
+ {
+ resp = Process.GetProverResponse();
+ if (resp.Name == "fixedpoint")
+ {
+ // only get the response if we need it
+ if(CommandLineOptions.Clo.PrintFixedPoint != null)
+ SExprToSoln(resp, varSubst);
+ }
+ else
+ HandleProverError("Unexpected prover response: " + resp.ToString());
+ break;
+ }
+ default:
+ break;
+ }
+
+#if false
+ while (true)
+ {
+ resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+ HandleProverError("Unexpected prover response: " + resp.ToString());
+ }
+#endif
+ }
+ SendThisVC("(fixedpoint-pop)");
+ Pop();
+ AxiomsAreSetup = false;
+
+ if (CommandLineOptions.Clo.PrintConjectures != null)
+ {
+ ReadConjectures(CommandLineOptions.Clo.PrintConjectures);
+ }
+
+ return result;
+ }
+
+ class MyFileParser : SExpr.Parser
+ {
+ SMTLibProcessTheoremProver parent;
+
+ public MyFileParser(System.IO.StreamReader _sr, SMTLibProcessTheoremProver _parent)
+ : base(_sr)
+ {
+ parent = _parent;
+ }
+ public override void ParseError(string msg)
+ {
+ parent.HandleProverError("Error in conjecture file from prover: " + msg);
+ }
+ }
+
+ void ReadConjectures(string filename)
+ {
+ try
+ {
+ System.IO.StreamReader sr = new StreamReader(filename + ".tmp");
+ SExpr.Parser p = new MyFileParser(sr, this);
+ var sexps = p.ParseSExprs(false);
+ Dictionary<string, RPFP.Node> pmap = GetNodeMap();
+ foreach (var e in sexps)
+ {
+ string pname;
+ RPFP.Transformer annot;
+ GetDefun(e, out pname, out annot);
+
+ if (pmap.ContainsKey(pname))
+ {
+ var c = new RPFP.Conjecture();
+ c.node = pmap[pname];
+ c.bound = annot;
+ rpfp.conjectures.Add(c);
+ }
+ else if (pname[0] != '@')
+ { // if not an internal symbol
+ HandleProverError("Prover error: got unknown predicate:" + pname);
+ throw new BadExprFromProver();
+ }
+ }
+ sr.Close();
+ }
+ catch (Exception)
+ {
+ HandleProverError("No conjecture file from prover");
+ throw new BadExprFromProver();
+ }
+ }
+
+ private Dictionary<string, RPFP.Node> GetNodeMap()
+ {
+ Dictionary<string, RPFP.Node> pmap = new Dictionary<string, RPFP.Node>();
+ foreach (var node in rpfp.nodes)
+ pmap.Add((node.Name as VCExprBoogieFunctionOp).Func.Name, node);
+ return pmap;
+ }
+
+ private static HashSet<string> usedLogNames = new HashSet<string>();
+
+ private TextWriter OpenOutputFile(string descriptiveName)
+ {
+ Contract.Requires(descriptiveName != null);
+ Contract.Ensures(Contract.Result<TextWriter>() != null);
+
+ string filename = options.LogFilename;
+ filename = Helpers.SubstituteAtPROC(descriptiveName, cce.NonNull(filename));
+ var curFilename = filename;
+
+ lock (usedLogNames) {
+ int n = 1;
+ while (usedLogNames.Contains(curFilename)) {
+ curFilename = filename + "." + n++;
+ }
+ usedLogNames.Add(curFilename);
+ }
+
+ return new StreamWriter(curFilename, false);
+ }
+
+ private void FlushProverWarnings()
+ {
+ var handler = currentErrorHandler;
+ if (handler != null) {
+ lock (proverWarnings) {
+ proverWarnings.Iter(handler.OnProverWarning);
+ proverWarnings.Clear();
+ }
+ }
+ }
+
+ protected void HandleProverError(string s)
+ {
+ s = s.Replace("\r", "");
+ lock (proverWarnings) {
+ while (s.StartsWith("WARNING: ")) {
+ var idx = s.IndexOf('\n');
+ var warn = s;
+ if (idx > 0) {
+ warn = s.Substring(0, idx);
+ s = s.Substring(idx + 1);
+ } else {
+ s = "";
+ }
+ warn = warn.Substring(9);
+ proverWarnings.Add(warn);
+ }
+ }
+
+ FlushProverWarnings();
+
+ if (s == "") return;
+
+ lock (proverErrors) {
+ proverErrors.Add(s);
+ Console.WriteLine("Prover error: " + s);
+ }
+ }
+
+ [NoDefaultContract]
+ public override Outcome CheckOutcome(ErrorHandler handler, int taskID = -1)
+ {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ var result = CheckOutcomeCore(handler, taskID: taskID);
+ SendThisVC("(pop 1)");
+ FlushLogFile();
+
+ return result;
+ }
+
+ [NoDefaultContract]
+ public override Outcome CheckOutcomeCore(ErrorHandler handler, int taskID = -1)
+ {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ var result = Outcome.Undetermined;
+
+ if (Process == null)
+ return result;
+
+ try {
+ currentErrorHandler = handler;
+ FlushProverWarnings();
+
+ int errorLimit;
+ if (CommandLineOptions.Clo.ConcurrentHoudini) {
+ Contract.Assert(taskID >= 0);
+ errorLimit = CommandLineOptions.Clo.Cho[taskID].ProverCCLimit;
+ } else {
+ errorLimit = CommandLineOptions.Clo.ProverCCLimit;
+ }
+
+ if (errorLimit < 1)
+ errorLimit = 1;
+
+ int errorsLeft = errorLimit;
+
+ var globalResult = Outcome.Undetermined;
+
+ while (true) {
+ string[] labels = null;
+ bool popLater = false;
+
+ try {
+ errorsLeft--;
+
+ result = GetResponse();
+
+ var reporter = handler as VC.VCGen.ErrorReporter;
+ // TODO(wuestholz): Is the reporter ever null?
+ if (usingUnsatCore && result == Outcome.Valid && reporter != null && 0 < NamedAssumes.Count)
+ {
+ if (usingUnsatCore)
+ {
+ UsedNamedAssumes = new HashSet<string>();
+ SendThisVC("(get-unsat-core)");
+ var resp = Process.GetProverResponse();
+ if (resp.Name != "")
+ {
+ UsedNamedAssumes.Add(resp.Name);
+ if (CommandLineOptions.Clo.PrintNecessaryAssumes)
+ {
+ reporter.AddNecessaryAssume(resp.Name.Substring("aux$$assume$$".Length));
+ }
+ }
+ foreach (var arg in resp.Arguments)
+ {
+ UsedNamedAssumes.Add(arg.Name);
+ if (CommandLineOptions.Clo.PrintNecessaryAssumes)
+ {
+ reporter.AddNecessaryAssume(arg.Name.Substring("aux$$assume$$".Length));
+ }
+ }
+ }
+ else
+ {
+ UsedNamedAssumes = null;
+ }
+ }
+
+ if (CommandLineOptions.Clo.RunDiagnosticsOnTimeout && result == Outcome.TimeOut)
+ {
+ #region Run timeout diagnostics
+
+ if (CommandLineOptions.Clo.TraceDiagnosticsOnTimeout)
+ {
+ Console.Out.WriteLine("Starting timeout diagnostics with initial time limit {0}.", options.TimeLimit);
+ }
+
+ SendThisVC("; begin timeout diagnostics");
+
+ var start = DateTime.UtcNow;
+ var unverified = new SortedSet<int>(ctx.TimeoutDiagnosticIDToAssertion.Keys);
+ var timedOut = new SortedSet<int>();
+ int frac = 2;
+ int queries = 0;
+ int timeLimitPerAssertion = 0 < options.TimeLimit ? (options.TimeLimit / 100) * CommandLineOptions.Clo.TimeLimitPerAssertionInPercent : 1000;
+ while (true)
+ {
+ int rem = unverified.Count;
+ if (rem == 0)
+ {
+ if (0 < timedOut.Count)
+ {
+ result = CheckSplit(timedOut, ref popLater, options.TimeLimit, timeLimitPerAssertion, ref queries);
+ if (result == Outcome.Valid)
+ {
+ timedOut.Clear();
+ }
+ else if (result == Outcome.TimeOut)
+ {
+ // Give up and report which assertions were not verified.
+ var cmds = timedOut.Select(id => ctx.TimeoutDiagnosticIDToAssertion[id]);
+
+ if (cmds.Any())
+ {
+ handler.OnResourceExceeded("timeout after running diagnostics", cmds);
+ }
+ }
+ }
+ else
+ {
+ result = Outcome.Valid;
+ }
+ break;
+ }
+
+ // TODO(wuestholz): Try out different ways for splitting up the work (e.g., randomly).
+ var cnt = Math.Max(1, rem / frac);
+ // It seems like assertions later in the control flow have smaller indexes.
+ var split = new SortedSet<int>(unverified.Where((val, idx) => (rem - idx - 1) < cnt));
+ Contract.Assert(0 < split.Count);
+ var splitRes = CheckSplit(split, ref popLater, timeLimitPerAssertion, timeLimitPerAssertion, ref queries);
+ if (splitRes == Outcome.Valid)
+ {
+ unverified.ExceptWith(split);
+ frac = 1;
+ }
+ else if (splitRes == Outcome.Invalid)
+ {
+ result = splitRes;
+ break;
+ }
+ else if (splitRes == Outcome.TimeOut)
+ {
+ if (2 <= frac && (4 <= (rem / frac)))
+ {
+ frac *= 4;
+ }
+ else if (2 <= (rem / frac))
+ {
+ frac *= 2;
+ }
+ else
+ {
+ timedOut.UnionWith(split);
+ unverified.ExceptWith(split);
+ frac = 1;
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ unverified.UnionWith(timedOut);
+
+ var end = DateTime.UtcNow;
+
+ SendThisVC("; end timeout diagnostics");
+
+ if (CommandLineOptions.Clo.TraceDiagnosticsOnTimeout)
+ {
+ Console.Out.WriteLine("Terminated timeout diagnostics after {0:F0} ms and {1} prover queries.", end.Subtract(start).TotalMilliseconds, queries);
+ Console.Out.WriteLine("Outcome: {0}", result);
+ Console.Out.WriteLine("Unverified assertions: {0} (of {1})", unverified.Count, ctx.TimeoutDiagnosticIDToAssertion.Keys.Count);
+
+ string filename = "unknown";
+ var assertion = ctx.TimeoutDiagnosticIDToAssertion.Values.Select(t => t.Item1).FirstOrDefault(a => a.tok != null && a.tok != Token.NoToken && a.tok.filename != null);
+ if (assertion != null)
+ {
+ filename = assertion.tok.filename;
+ }
+ File.AppendAllText("timeouts.csv", string.Format(";{0};{1};{2:F0};{3};{4};{5};{6}\n", filename, options.TimeLimit, end.Subtract(start).TotalMilliseconds, queries, result, unverified.Count, ctx.TimeoutDiagnosticIDToAssertion.Keys.Count));
+ }
+
+ #endregion
+ }
+
+ if (globalResult == Outcome.Undetermined)
+ globalResult = result;
+
+ if (result == Outcome.Invalid || result == Outcome.TimeOut || result == Outcome.OutOfMemory) {
+ IList<string> xlabels;
+ if (CommandLineOptions.Clo.UseLabels) {
+ labels = GetLabelsInfo();
+ if (labels == null)
+ {
+ xlabels = new string[] { };
+ }
+ else
+ {
+ xlabels = labels.Select(a => a.Replace("@", "").Replace("+", "")).ToList();
+ }
+ }
+ else if(CommandLineOptions.Clo.SIBoolControlVC) {
+ labels = new string[0];
+ xlabels = labels;
+ } else {
+ labels = CalculatePath(handler.StartingProcId());
+ xlabels = labels;
+ }
+ Model model = (result == Outcome.TimeOut || result == Outcome.OutOfMemory) ? null :
+ GetErrorModel();
+ handler.OnModel(xlabels, model, result);
+ }
+
+ if (labels == null || !labels.Any() || errorsLeft == 0) break;
+ } finally {
+ if (popLater)
+ {
+ SendThisVC("(pop 1)");
+ }
+ }
+
+ if (CommandLineOptions.Clo.UseLabels) {
+ var negLabels = labels.Where(l => l.StartsWith("@")).ToArray();
+ var posLabels = labels.Where(l => !l.StartsWith("@"));
+ Func<string, string> lbl = (s) => SMTLibNamer.QuoteId(SMTLibNamer.LabelVar(s));
+ if (!options.MultiTraces)
+ posLabels = Enumerable.Empty<string>();
+ var conjuncts = posLabels.Select(s => "(not " + lbl(s) + ")").Concat(negLabels.Select(lbl)).ToArray();
+ string expr = conjuncts.Length == 1 ? conjuncts[0] : ("(or " + conjuncts.Concat(" ") + ")"); ;
+ if (!conjuncts.Any())
+ {
+ expr = "false";
+ }
+ SendThisVC("(assert " + expr + ")");
+ SendCheckSat();
+ }
+ else {
+ string source = labels[labels.Length - 2];
+ string target = labels[labels.Length - 1];
+ SendThisVC("(assert (not (= (ControlFlow 0 " + source + ") (- " + target + "))))");
+ SendCheckSat();
+ }
+ }
+
+ FlushLogFile();
+
+ if (CommandLineOptions.Clo.RestartProverPerVC && Process != null)
+ Process.NeedsRestart = true;
+
+ return globalResult;
+
+ } finally {
+ currentErrorHandler = null;
+ }
+ }
+
+ private Outcome CheckSplit(SortedSet<int> split, ref bool popLater, int timeLimit, int timeLimitPerAssertion, ref int queries)
+ {
+ var tla = timeLimitPerAssertion * split.Count;
+
+ if (popLater)
+ {
+ SendThisVC("(pop 1)");
+ }
+
+ SendThisVC("(push 1)");
+ SendThisVC(string.Format("(set-option :{0} {1})", Z3.SetTimeoutOption(), (0 < tla && tla < timeLimit) ? tla : timeLimit));
+ popLater = true;
+
+ SendThisVC(string.Format("; checking split VC with {0} unverified assertions", split.Count));
+ var expr = VCExpressionGenerator.True;
+ foreach (var i in ctx.TimeoutDiagnosticIDToAssertion.Keys)
+ {
+ var lit = VCExprGen.Function(VCExpressionGenerator.TimeoutDiagnosticsOp, VCExprGen.Integer(Microsoft.Basetypes.BigNum.FromInt(i)));
+ if (split.Contains(i)) {
+ lit = VCExprGen.Not(lit);
+ }
+ expr = VCExprGen.AndSimp(expr, lit);
+ }
+ SendThisVC("(assert " + VCExpr2String(expr, 1) + ")");
+ if (options.Solver == SolverKind.Z3)
+ {
+ SendThisVC("(apply (then (using-params propagate-values :max_rounds 1) simplify) :print false)");
+ }
+ FlushLogFile();
+ SendCheckSat();
+ queries++;
+ return GetResponse();
+ }
+
+ public override string[] CalculatePath(int controlFlowConstant) {
+ SendThisVC("(get-value ((ControlFlow " + controlFlowConstant + " 0)))");
+ var path = new List<string>();
+ while (true) {
+ var resp = Process.GetProverResponse();
+ if (resp == null) break;
+ if (!(resp.Name == "" && resp.ArgCount == 1)) break;
+ resp = resp.Arguments[0];
+ if (!(resp.Name == "" && resp.ArgCount == 2)) break;
+ resp = resp.Arguments[1];
+ var v = resp.Name;
+ if (v == "-" && resp.ArgCount == 1) {
+ v = resp.Arguments[0].Name;
+ path.Add(v);
+ break;
+ }
+ else if (resp.ArgCount != 0)
+ break;
+ path.Add(v);
+ SendThisVC("(get-value ((ControlFlow " + controlFlowConstant + " " + v + ")))");
+ }
+ return path.ToArray();
+ }
+
+
+ private class SMTErrorModelConverter {
+ private struct SMTDataType {
+ public string Constructor;
+ public List<SExpr> Types;
+ }
+
+ private List<SExpr> ErrorModelTodo;
+ private SMTLibProcessTheoremProver Parent;
+ private StringBuilder ErrorModel = new StringBuilder();
+ private HashSet<SExpr> TopLevelProcessed = new HashSet<SExpr>();
+ private int NumNewArrays = 0;
+ private Dictionary<string, int> SortSet = new Dictionary<string, int>();
+ private Dictionary<string, SMTDataType> DataTypes = new Dictionary<string, SMTDataType>();
+ private Dictionary<string, SExpr> Functions = new Dictionary<string, SExpr>();
+
+ public SMTErrorModelConverter(SExpr _ErrorModel, SMTLibProcessTheoremProver _Parent) {
+ ErrorModelTodo = _ErrorModel.Arguments.ToList();;
+ Parent = _Parent;
+ }
+
+ public string Convert() {
+ ConvertErrorModel(ErrorModel);
+ return ErrorModel.ToString();
+ }
+
+ bool isConstArray(SExpr element, SExpr type) {
+ if (type.Name != "Array")
+ return false;
+
+ if (element.Name == "__array_store_all__") // CVC4 1.4
+ return true;
+ else if (element.Name == "" && element[0].Name == "as" &&
+ element[0][0].Name == "const") // CVC4 > 1.4
+ return true;
+
+ return false;
+ }
+
+ SExpr getConstArrayElement(SExpr element) {
+ if (element.Name == "__array_store_all__") // CVC4 1.4
+ return element[1];
+ else if (element.Name == "" && element[0].Name == "as" &&
+ element[0][0].Name == "const") // CVC4 > 1.4
+ return element[1];
+
+ Parent.HandleProverError("Unexpected value: " + element);
+ throw new BadExprFromProver ();
+ }
+
+ void ConstructComplexValue(SExpr element, SExpr type, StringBuilder m) {
+ if (type.Name == "Array") {
+ if (element.Name == "store" || isConstArray(element, type)) {
+ NumNewArrays++;
+ m.Append("as-array[k!" + NumNewArrays + ']');
+ SExpr[] args = {new SExpr("k!" + NumNewArrays), new SExpr(""), type, element};
+ var newElement = new SExpr("define-fun", args);
+ TopLevelProcessed.Add(newElement);
+ ErrorModelTodo.Add(newElement);
+ return;
+ }
+ }
+
+ ConstructSimpleValue(element, type, m);
+ }
+
+ void ConstructSimpleValue(SExpr element, SExpr type, StringBuilder m) {
+ if (type.Name == "Bool" && element.ArgCount == 0) {
+ m.Append(element.ToString());
+ return;
+ }
+
+ if (type.Name == "Int") {
+ if (element.ArgCount == 0) {
+ m.Append(element.ToString());
+ return;
+ } else if (element.Name == "-" && element.ArgCount == 1) {
+ m.Append(element.ToString());
+ return;
+ }
+ }
+
+ if (type.Name == "_" && type.ArgCount == 2 && type[0].Name == "BitVec") {
+ if (element.Name == "_" && element.ArgCount == 2 &&
+ element[0].Name.StartsWith("bv") && element[0].ArgCount == 0 &&
+ element[1].Name == type.Arguments[1].Name && element[1].ArgCount == 0) {
+ m.Append(element[0].Name + '[' + element[1].Name + ']');
+ return;
+ }
+ }
+
+ if (type.Name == "Array") {
+ while (element.Name == "store") {
+ ConstructComplexValue(element[1], type[0], m);
+ m.Append(" -> ");
+ ConstructComplexValue(element[2], type[1], m);
+ m.Append("\n ");
+ if (element[0].Name != "store") {
+ m.Append("else -> ");
+ }
+ element = element[0];
+ }
+
+ if (isConstArray(element, type)) {
+ ConstructComplexValue(getConstArrayElement(element), type[1], m);
+ return;
+ } else if (element.Name == "_" && element.ArgCount == 2 &&
+ element[0].Name == "as-array") {
+ m.Append("as-array[" + element[1].Name + ']');
+ return;
+ }
+ }
+
+ if (SortSet.ContainsKey(type.Name) && SortSet[type.Name] == 0) {
+ var prefix = "@uc_T_" + type.Name.Substring(2) + "_";
+ if (element.Name.StartsWith(prefix)) {
+ m.Append(type.Name + "!val!" + element.Name.Substring(prefix.Length));
+ return;
+ }
+ }
+
+ if (Functions.ContainsKey(element.Name) &&
+ type.Name == Functions[element.Name].Name) {
+ m.Append(element.Name);
+ return;
+ }
+
+ if (DataTypes.ContainsKey(type.Name) &&
+ DataTypes[type.Name].Constructor == element.Name &&
+ element.ArgCount == DataTypes[type.Name].Types.Count) {
+ m.Append("(" + element.Name);
+ for (int i = 0; i < element.ArgCount; ++i) {
+ m.Append(" ");
+ ConstructComplexValue(element[i], DataTypes[type.Name].Types[i], m);
+ }
+ m.Append(")");
+ return;
+ }
+
+ Parent.HandleProverError("Unexpected value: " + element);
+ throw new BadExprFromProver ();
+ }
+
+ void ConstructFunctionArguments(SExpr arguments, List<SExpr> argTypes, StringBuilder[] argValues) {
+ if (arguments.Name == "and") {
+ ConstructFunctionArguments(arguments[0], argTypes, argValues);
+ ConstructFunctionArguments(arguments[1], argTypes, argValues);
+ } else if (arguments.Name == "=" &&
+ (arguments[0].Name.StartsWith("_ufmt_") || arguments[0].Name.StartsWith("x!"))) {
+ int argNum;
+ if (arguments[0].Name.StartsWith("_ufmt_"))
+ argNum = System.Convert.ToInt32(arguments[0].Name.Substring("_uftm_".Length)) - 1;
+ else /* if (arguments[0].Name.StartsWith("x!")) */
+ argNum = System.Convert.ToInt32(arguments[0].Name.Substring("x!".Length)) - 1;
+ if (argNum < 0 || argNum >= argTypes.Count) {
+ Parent.HandleProverError("Unexpected function argument: " + arguments[0]);
+ throw new BadExprFromProver ();
+ }
+ if (argValues[argNum] != null) {
+ Parent.HandleProverError("Function argument defined multiple times: " + arguments[0]);
+ throw new BadExprFromProver ();
+ }
+ argValues[argNum] = new StringBuilder();
+ ConstructComplexValue(arguments[1], argTypes[argNum], argValues[argNum]);
+ } else {
+ Parent.HandleProverError("Unexpected function argument: " + arguments);
+ throw new BadExprFromProver ();
+ }
+ }
+
+ void ConstructFunctionElements(SExpr element, List<SExpr> argTypes, SExpr outType, StringBuilder m) {
+ while (element.Name == "ite") {
+ StringBuilder[] argValues = new StringBuilder[argTypes.Count];
+ ConstructFunctionArguments(element[0], argTypes, argValues);
+ foreach (var s in argValues)
+ m.Append(s + " ");
+ m.Append("-> ");
+ ConstructComplexValue(element[1], outType, m);
+ m.Append("\n ");
+ if (element[2].Name != "ite")
+ m.Append("else -> ");
+ element = element[2];
+ }
+
+ ConstructComplexValue(element, outType, m);
+ }
+
+ void ConstructFunction(SExpr element, SExpr inType, SExpr outType, StringBuilder m) {
+ List<SExpr> argTypes = new List<SExpr>();
+
+ for (int i = 0; i < inType.ArgCount; ++i) {
+ if (inType[i].Name != "_ufmt_" + (i + 1) && inType[i].Name != "x!" + (i + 1) &&
+ !inType[i].Name.StartsWith("BOUND_VARIABLE_")) {
+ Parent.HandleProverError("Unexpected function argument: " + inType[i].Name);
+ throw new BadExprFromProver ();
+ }
+ argTypes.Add(inType[i][0]);
+ }
+
+ ConstructFunctionElements(element, argTypes, outType, m);
+ }
+
+ void ConstructDefine(SExpr element, StringBuilder m) {
+ Debug.Assert(element.Name == "define-fun");
+
+ if (element[1].ArgCount != 0)
+ TopLevelProcessed.Add(element);
+
+ m.Append(element[0] + " -> ");
+ if (TopLevelProcessed.Contains(element))
+ m.Append("{\n ");
+
+ if (element[1].ArgCount == 0 && element[2].Name == "Array" && !TopLevelProcessed.Contains(element)) {
+ ConstructComplexValue(element[3], element[2], m);
+ } else if (element[1].ArgCount == 0) {
+ ConstructSimpleValue(element[3], element[2], m);
+ } else {
+ ConstructFunction(element[3], element[1], element[2], m);
+ }
+
+ if (TopLevelProcessed.Contains(element))
+ m.Append("\n}");
+ m.Append("\n");
+ }
+
+ void ExtractDataType(SExpr datatypes) {
+ Debug.Assert(datatypes.Name == "declare-datatypes");
+
+ if (datatypes[0].Name != "" || datatypes[1].Name != "" || datatypes[1].ArgCount != 1) {
+ Parent.HandleProverError("Unexpected datatype: " + datatypes);
+ throw new BadExprFromProver ();
+ }
+
+ SMTDataType dt = new SMTDataType();
+ SExpr typeDef = datatypes[1][0];
+
+ if (typeDef.ArgCount != 1) {
+ Parent.HandleProverError("Unexpected datatype: " + datatypes);
+ throw new BadExprFromProver ();
+ }
+
+ dt.Constructor = typeDef[0].Name;
+ dt.Types = new List<SExpr>();
+
+ for (int i = 0; i < typeDef[0].ArgCount; ++i) {
+ if (typeDef[0][i].ArgCount != 1) {
+ Parent.HandleProverError("Unexpected datatype constructor: " + typeDef[0]);
+ throw new BadExprFromProver ();
+ }
+ dt.Types.Add(typeDef[0][i][0]);
+ }
+
+ DataTypes[typeDef.Name] = dt;
+ }
+
+ private void ConvertErrorModel(StringBuilder m) {
+ if (Parent.options.Solver == SolverKind.Z3) {
+ // Datatype declarations are not returned by Z3, so parse common
+ // instead. This is not very efficient, but currently not an issue,
+ // as this not the normal way of interfacing with Z3.
+ var ms = new MemoryStream(Encoding.ASCII.GetBytes(Parent.common.ToString()));
+ var sr = new StreamReader(ms);
+ SExpr.Parser p = new MyFileParser(sr, null);
+ var sexprs = p.ParseSExprs(false);
+ foreach (var e in sexprs) {
+ switch (e.Name) {
+ case "declare-datatypes":
+ ExtractDataType(e);
+ break;
+ }
+ }
+ }
+
+ while (ErrorModelTodo.Count > 0) {
+ var e = ErrorModelTodo[0];
+ ErrorModelTodo.RemoveAt(0);
+
+ switch (e.Name) {
+ case "define-fun":
+ ConstructDefine(e, m);
+ break;
+ case "declare-sort":
+ SortSet[e[0].Name] = System.Convert.ToInt32(e[1].Name);
+ break;
+ case "declare-datatypes":
+ ExtractDataType(e);
+ break;
+ case "declare-fun":
+ if (e[1].Name != "" || e[1].ArgCount > 0 || e[2].ArgCount > 0 ||
+ e[2].Name == "Bool" || e[2].Name == "Int") {
+ Parent.HandleProverError("Unexpected top level model element: " + e.Name);
+ throw new BadExprFromProver ();
+ }
+ Functions[e[0].Name] = e[2];
+ break;
+ case "forall":
+ // ignore
+ break;
+ default:
+ Parent.HandleProverError("Unexpected top level model element: " + e.Name);
+ throw new BadExprFromProver ();
+ }
+ }
+ }
+ }
+
+ private Model GetErrorModel() {
+ if (!options.ExpectingModel())
+ return null;
+
+ SendThisVC("(get-model)");
+ Process.Ping();
+ Model theModel = null;
+ while (true) {
+ var resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+ if (theModel != null)
+ HandleProverError("Expecting only one model but got many");
+
+ string modelStr = null;
+ if (resp.Name == "model" && resp.ArgCount >= 1) {
+ var converter = new SMTErrorModelConverter(resp, this);
+ modelStr = converter.Convert();
+ }
+ else if (resp.ArgCount == 0 && resp.Name.Contains("->")) {
+ modelStr = resp.Name;
+ }
+ else {
+ HandleProverError("Unexpected prover response getting model: " + resp.ToString());
+ }
+
+ List<Model> models = null;
+ try {
+ switch (options.Solver) {
+ case SolverKind.Z3:
+ case SolverKind.CVC4:
+ models = Model.ParseModels(new StringReader("Error model: \n" + modelStr));
+ break;
+ default:
+ Debug.Assert(false);
+ return null;
+ }
+ }
+ catch (ArgumentException exn) {
+ HandleProverError("Model parsing error: " + exn.Message);
+ }
+ if (models == null)
+ HandleProverError("Could not parse any models");
+ else if (models.Count == 0)
+ HandleProverError("Could not parse any models");
+ else if (models.Count > 1)
+ HandleProverError("Expecting only one model but got many");
+ else
+ theModel = models[0];
+ }
+ return theModel;
+ }
+
+ private string[] GetLabelsInfo()
+ {
+ SendThisVC("(labels)");
+ Process.Ping();
+
+ string[] res = null;
+ while (true) {
+ var resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+ if (res != null)
+ HandleProverError("Expecting only one sequence of labels but got many");
+ if (resp.Name == "labels" && resp.ArgCount >= 1) {
+ res = resp.Arguments.Select(a => a.Name.Replace("|", "")).ToArray();
+ }
+ else {
+ HandleProverError("Unexpected prover response getting labels: " + resp.ToString());
+ }
+ }
+ return res;
+ }
+
+ private Outcome GetResponse()
+ {
+ var result = Outcome.Undetermined;
+ var wasUnknown = false;
+
+ Process.Ping();
+
+ while (true) {
+ var resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+
+ switch (resp.Name) {
+ case "unsat":
+ result = Outcome.Valid;
+ break;
+ case "sat":
+ result = Outcome.Invalid;
+ break;
+ case "unknown":
+ result = Outcome.Invalid;
+ wasUnknown = true;
+ break;
+ case "objectives":
+ // We ignore this.
+ break;
+ default:
+ HandleProverError("Unexpected prover response: " + resp.ToString());
+ break;
+ }
+ }
+
+ if (wasUnknown) {
+ SendThisVC("(get-info :reason-unknown)");
+ Process.Ping();
+ while (true) {
+ var resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+
+ if (resp.ArgCount == 1 && resp.Name == ":reason-unknown") {
+ switch (resp[0].Name) {
+ case "memout":
+ currentErrorHandler.OnResourceExceeded("memory");
+ result = Outcome.OutOfMemory;
+ Process.NeedsRestart = true;
+ break;
+ case "timeout": case "canceled":
+ currentErrorHandler.OnResourceExceeded("timeout");
+ result = Outcome.TimeOut;
+ break;
+ default:
+ break;
+ }
+ } else {
+ HandleProverError("Unexpected prover response (getting info about 'unknown' response): " + resp.ToString());
+ }
+ }
+
+ }
+
+ return result;
+ }
+
+ readonly IList<string> OptimizationRequests = new List<string>();
+
+ protected string VCExpr2String(VCExpr expr, int polarity)
+ {
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ lock (gen)
+ {
+ DateTime start = DateTime.UtcNow;
+ //if (CommandLineOptions.Clo.Trace)
+ // Console.Write("Linearising ... ");
+
+ // handle the types in the VCExpr
+ TypeEraser eraser;
+ switch (CommandLineOptions.Clo.TypeEncodingMethod)
+ {
+ case CommandLineOptions.TypeEncoding.Arguments:
+ eraser = new TypeEraserArguments((TypeAxiomBuilderArguments)AxBuilder, gen);
+ break;
+ case CommandLineOptions.TypeEncoding.Monomorphic:
+ eraser = null;
+ break;
+ default:
+ eraser = new TypeEraserPremisses((TypeAxiomBuilderPremisses)AxBuilder, gen);
+ break;
+ }
+ VCExpr exprWithoutTypes = eraser == null ? expr : eraser.Erase(expr, polarity);
+ Contract.Assert(exprWithoutTypes != null);
+
+ LetBindingSorter letSorter = new LetBindingSorter(gen);
+ Contract.Assert(letSorter != null);
+ VCExpr sortedExpr = letSorter.Mutate(exprWithoutTypes, true);
+ Contract.Assert(sortedExpr != null);
+ VCExpr sortedAxioms = letSorter.Mutate(AxBuilder.GetNewAxioms(), true);
+ Contract.Assert(sortedAxioms != null);
+
+ DeclCollector.Collect(sortedAxioms);
+ DeclCollector.Collect(sortedExpr);
+ FeedTypeDeclsToProver();
+
+ AddAxiom(SMTLibExprLineariser.ToString(sortedAxioms, Namer, options, namedAssumes: NamedAssumes));
+ string res = SMTLibExprLineariser.ToString(sortedExpr, Namer, options, NamedAssumes, OptimizationRequests);
+ Contract.Assert(res != null);
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ DateTime end = DateTime.UtcNow;
+ TimeSpan elapsed = end - start;
+ if (elapsed.TotalSeconds > 0.5)
+ Console.WriteLine("Linearising [{0} s]", elapsed.TotalSeconds);
+ }
+ return res;
+ }
+ }
+
+ // the list of all known axioms, where have to be included in each
+ // verification condition
+ private readonly List<string/*!>!*/> Axioms = new List<string/*!*/>();
+ private bool AxiomsAreSetup = false;
+
+
+
+
+ // similarly, a list of function/predicate declarations
+ private readonly List<string/*!>!*/> TypeDecls = new List<string/*!*/>();
+
+ protected void AddAxiom(string axiom)
+ {
+ Contract.Requires(axiom != null);
+ Axioms.Add(axiom);
+ // if (thmProver != null) {
+ // LogActivity(":assume " + axiom);
+ // thmProver.AddAxioms(axiom);
+ // }
+ }
+
+ protected void AddTypeDecl(string decl)
+ {
+ Contract.Requires(decl != null);
+ TypeDecls.Add(decl);
+ // if (thmProver != null) {
+ // LogActivity(decl);
+ // thmProver.Feed(decl, 0);
+ // }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ private static string _backgroundPredicates;
+
+ static void InitializeGlobalInformation()
+ {
+ Contract.Ensures(_backgroundPredicates != null);
+ //throws ProverException, System.IO.FileNotFoundException;
+ if (_backgroundPredicates == null) {
+ if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.Monomorphic)
+ {
+ _backgroundPredicates = "";
+ }
+ else
+ {
+ _backgroundPredicates = @"
+(set-info :category ""industrial"")
+(declare-sort |T@U| 0)
+(declare-sort |T@T| 0)
+(declare-fun real_pow (Real Real) Real)
+(declare-fun UOrdering2 (|T@U| |T@U|) Bool)
+(declare-fun UOrdering3 (|T@T| |T@U| |T@U|) Bool)";
+ }
+ }
+ }
+
+ public override VCExpressionGenerator VCExprGen
+ {
+ get { return this.gen; }
+ }
+
+ //// Push/pop interface
+
+ //List<string> pushedAssertions = new List<string>();
+ //int numRealPushes;
+ public override string VCExpressionToString(VCExpr vc)
+ {
+ return VCExpr2String(vc, 1);
+ }
+
+ public override void PushVCExpression(VCExpr vc)
+ {
+ throw new NotImplementedException();
+
+ }
+
+ public override void Pop()
+ {
+ SendThisVC("(pop 1)");
+ DeclCollector.Pop();
+ }
+
+ public override int NumAxiomsPushed()
+ {
+ throw new NotImplementedException();
+ //return numRealPushes + pushedAssertions.Count;
+ }
+
+ private void FlushPushedAssertions()
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void Assert(VCExpr vc, bool polarity, bool isSoft = false, int weight = 1)
+ {
+ OptimizationRequests.Clear();
+ string assert = "assert";
+ if (options.Solver == SolverKind.Z3 && isSoft) {
+ assert += "-soft";
+ }
+ var expr = polarity ? VCExpr2String(vc, 1) : "(not\n" + VCExpr2String(vc, 1) + "\n)";
+ if (options.Solver == SolverKind.Z3 && isSoft) {
+ expr += " :weight " + weight;
+ }
+ AssertAxioms();
+ SendThisVC("(" + assert + " " + expr + ")");
+ SendOptimizationRequests();
+ }
+
+ public override void DefineMacro(Macro f, VCExpr vc) {
+ DeclCollector.AddFunction(f);
+ string printedName = Namer.GetQuotedName(f, f.Name);
+ var argTypes = f.InParams.Cast<Variable>().MapConcat(p => DeclCollector.TypeToStringReg(p.TypedIdent.Type), " ");
+ string decl = "(define-fun " + printedName + " (" + argTypes + ") " + DeclCollector.TypeToStringReg(f.OutParams[0].TypedIdent.Type) + " " + VCExpr2String(vc, 1) + ")";
+ AssertAxioms();
+ SendThisVC(decl);
+ }
+
+ public override void AssertAxioms()
+ {
+ FlushAxioms();
+ }
+
+ public override void Check()
+ {
+ PrepareCommon();
+ SendCheckSat();
+ FlushLogFile();
+ }
+
+ public void SendCheckSat()
+ {
+ UsedNamedAssumes = null;
+ SendThisVC("(check-sat)");
+ }
+
+ public override void SetTimeOut(int ms)
+ {
+ if (options.Solver == SolverKind.Z3) {
+ var name = Z3.SetTimeoutOption();
+ var value = ms.ToString();
+ options.TimeLimit = ms;
+ options.SmtOptions.RemoveAll(ov => ov.Option == name);
+ options.AddSmtOption(name, value);
+ SendThisVC(string.Format("(set-option :{0} {1})", name, value));
+ }
+ }
+
+ public override object Evaluate(VCExpr expr)
+ {
+ string vcString = VCExpr2String(expr, 1);
+ SendThisVC("(get-value (" + vcString + "))");
+ var resp = Process.GetProverResponse();
+ if (resp == null) throw new VCExprEvaluationException();
+ if (!(resp.Name == "" && resp.ArgCount == 1)) throw new VCExprEvaluationException();
+ resp = resp.Arguments[0];
+ if (resp.Name == "")
+ {
+ // evaluating an expression
+ if (resp.ArgCount == 2)
+ resp = resp.Arguments[1];
+ else
+ throw new VCExprEvaluationException();
+ }
+ else
+ {
+ // evaluating a variable
+ if (resp.ArgCount == 1)
+ resp = resp.Arguments[0];
+ else
+ throw new VCExprEvaluationException();
+ }
+ if (resp.Name == "-" && resp.ArgCount == 1) // negative int
+ return Microsoft.Basetypes.BigNum.FromString("-" + resp.Arguments[0].Name);
+ if (resp.Name == "_" && resp.ArgCount == 2 && resp.Arguments[0].Name.StartsWith("bv")) // bitvector
+ return new BvConst(Microsoft.Basetypes.BigNum.FromString(resp.Arguments[0].Name.Substring("bv".Length)),
+ int.Parse(resp.Arguments[1].Name));
+ if (resp.ArgCount != 0)
+ throw new VCExprEvaluationException();
+ if (expr.Type.Equals(Boogie.Type.Bool))
+ return bool.Parse(resp.Name);
+ else if (expr.Type.Equals(Boogie.Type.Int))
+ return Microsoft.Basetypes.BigNum.FromString(resp.Name);
+ else
+ return resp.Name;
+ }
+
+ /// <summary>
+ /// Extra state for ApiChecker (used by stratifiedInlining)
+ /// </summary>
+ static int nameCounter = 0;
+
+ public override Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore, ErrorHandler handler)
+ {
+ unsatCore = new List<int>();
+
+ Push();
+ // Name the assumptions
+ var nameToAssumption = new Dictionary<string, int>();
+ int i = 0;
+ foreach (var vc in assumptions)
+ {
+ var name = "a" + nameCounter.ToString();
+ nameCounter++;
+ nameToAssumption.Add(name, i);
+
+ string vcString = VCExpr2String(vc, 1);
+ AssertAxioms();
+ SendThisVC(string.Format("(assert (! {0} :named {1}))", vcString, name));
+ i++;
+ }
+ Check();
+
+ var outcome = CheckOutcomeCore(handler);
+
+ if (outcome != Outcome.Valid) {
+ Pop();
+ return outcome;
+ }
+
+ Contract.Assert(usingUnsatCore, "SMTLib prover not setup for computing unsat cores");
+ SendThisVC("(get-unsat-core)");
+ var resp = Process.GetProverResponse();
+ unsatCore = new List<int>();
+ if (resp.Name != "") unsatCore.Add(nameToAssumption[resp.Name]);
+ foreach (var s in resp.Arguments) unsatCore.Add(nameToAssumption[s.Name]);
+
+ FlushLogFile();
+ Pop();
+ return outcome;
+ }
+
+ public override void Push()
+ {
+ SendThisVC("(push 1)");
+ DeclCollector.Push();
+ }
+
+ public override Outcome CheckAssumptions(List<VCExpr> hardAssumptions, List<VCExpr> softAssumptions, out List<int> unsatisfiedSoftAssumptions, ErrorHandler handler) {
+ unsatisfiedSoftAssumptions = new List<int>();
+
+ // First, convert both hard and soft assumptions to SMTLIB strings
+ List<string> hardAssumptionStrings = new List<string>();
+ foreach (var a in hardAssumptions) {
+ hardAssumptionStrings.Add(VCExpr2String(a, 1));
+ }
+ List<string> currAssumptionStrings = new List<string>();
+ foreach (var a in softAssumptions) {
+ currAssumptionStrings.Add(VCExpr2String(a, 1));
+ }
+
+ Push();
+ AssertAxioms();
+ foreach (var a in hardAssumptionStrings) {
+ SendThisVC("(assert " + a + ")");
+ }
+ Check();
+ Outcome outcome = GetResponse();
+ if (outcome != Outcome.Invalid) {
+ Pop();
+ return outcome;
+ }
+
+ int k = 0;
+ List<string> relaxVars = new List<string>();
+ while (true) {
+ Push();
+ foreach (var a in currAssumptionStrings) {
+ SendThisVC("(assert " + a + ")");
+ }
+ Check();
+ outcome = CheckOutcomeCore(handler);
+ if (outcome != Outcome.Valid)
+ break;
+ Pop();
+ string relaxVar = "relax_" + k;
+ relaxVars.Add(relaxVar);
+ SendThisVC("(declare-fun " + relaxVar + " () Int)");
+ List<string> nextAssumptionStrings = new List<string>();
+ for (int i = 0; i < currAssumptionStrings.Count; i++) {
+ string constraint = "(= " + relaxVar + " " + i + ")";
+ nextAssumptionStrings.Add("(or " + currAssumptionStrings[i] + " " + constraint + ")");
+ }
+ currAssumptionStrings = nextAssumptionStrings;
+ k++;
+ }
+
+ if (outcome == Outcome.Invalid) {
+ foreach (var relaxVar in relaxVars) {
+ SendThisVC("(get-value (" + relaxVar + "))");
+ FlushLogFile();
+ var resp = Process.GetProverResponse();
+ if (resp == null) break;
+ if (!(resp.Name == "" && resp.ArgCount == 1)) break;
+ resp = resp.Arguments[0];
+ if (!(resp.Name != "" && resp.ArgCount == 1)) break;
+ resp = resp.Arguments[0];
+ if (resp.ArgCount != 0)
+ break;
+ int v;
+ if (int.TryParse(resp.Name, out v))
+ unsatisfiedSoftAssumptions.Add(v);
+ else
+ break;
+ }
+ Pop();
+ }
+
+ Pop();
+ return outcome;
+ }
+ }
+
+ public class SMTLibInterpolatingProcessTheoremProver : SMTLibProcessTheoremProver
+ {
+ public SMTLibInterpolatingProcessTheoremProver(ProverOptions options, VCExpressionGenerator gen,
+ SMTLibProverContext ctx)
+ : base(AddInterpOption(options), gen, ctx)
+ {
+
+ }
+
+ private static ProverOptions AddInterpOption(ProverOptions options)
+ {
+ var opts = (SMTLibProverOptions)options;
+ opts.AddSmtOption("produce-interpolants", "true");
+ if (CommandLineOptions.Clo.PrintFixedPoint == null)
+ CommandLineOptions.Clo.PrintFixedPoint = "itp.fixedpoint.bpl";
+ return opts;
+ }
+
+ public override VCExpr ComputeInterpolant(VCExpr A, VCExpr B)
+ {
+ string A_str = VCExpr2String(A, 1);
+ string B_str = VCExpr2String(B, 1);
+
+ AssertAxioms();
+ SendThisVC("(compute-interpolant " + A_str + " " + B_str + ")");
+
+ SExpr interpolant;
+ Outcome result = GetInterpolantResponse(out interpolant);
+
+ if (result != Outcome.Valid)
+ return null;
+
+ VCExpr interpolantVC = SExprToVCExpr(interpolant, new Dictionary<string, VCExpr>());
+ return interpolantVC;
+ }
+
+ private Outcome GetInterpolantResponse(out SExpr interpolant)
+ {
+ var result = Outcome.Undetermined;
+ var wasUnknown = false;
+ interpolant = null;
+
+ Process.Ping();
+ bool onlyOnce = false;
+
+ while (true)
+ {
+ var resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+
+ switch (resp.Name)
+ {
+ case "unsat":
+ result = Outcome.Valid;
+ break;
+ case "sat":
+ result = Outcome.Invalid;
+ break;
+ case "unknown":
+ result = Outcome.Invalid;
+ wasUnknown = true;
+ break;
+ default:
+ if (result == Outcome.Valid)
+ {
+ interpolant = resp as SExpr;
+
+ Contract.Assert(onlyOnce == false);
+ onlyOnce = true;
+ continue;
+ }
+ HandleProverError("Unexpected prover response: " + resp.ToString());
+ break;
+ }
+ }
+
+ if (wasUnknown)
+ {
+ SendThisVC("(get-info :reason-unknown)");
+ Process.Ping();
+
+ while (true)
+ {
+ var resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+
+ if (resp.ArgCount == 1 && resp.Name == ":reason-unknown")
+ {
+ switch (resp[0].Name)
+ {
+ case "memout":
+ currentErrorHandler.OnResourceExceeded("memory");
+ result = Outcome.OutOfMemory;
+ Process.NeedsRestart = true;
+ break;
+ case "timeout":
+ case "canceled":
+ currentErrorHandler.OnResourceExceeded("timeout");
+ result = Outcome.TimeOut;
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ HandleProverError("Unexpected prover response (getting info about 'unknown' response): " + resp.ToString());
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public override List<VCExpr> GetTreeInterpolant(List<string> root, List<string> leaves)
+ {
+ List<VCExpr> result = new List<VCExpr>();
+
+ string vcStr = "true";
+ foreach (string str in root)
+ vcStr = vcStr + " " + str;
+ foreach (string str in leaves)
+ vcStr = vcStr + "\r\n (interp " + str + ")";
+
+ vcStr = "(get-interpolant (and\r\n" + vcStr + "\r\n))";
+ SendThisVC(vcStr);
+ if(currentLogFile != null) currentLogFile.Flush();
+
+ List<SExpr> interpolantList;
+ GetTreeInterpolantResponse(out interpolantList);
+
+ Dictionary<string, VCExpr> bound = new Dictionary<string, VCExpr>();
+ foreach (SExpr sexpr in interpolantList)
+ {
+ VCExpr interpolantVC = SExprToVCExpr(sexpr, bound);
+ result.Add(interpolantVC);
+ }
+
+ return result;
+ }
+
+ private void GetTreeInterpolantResponse(out List<SExpr> interpolantList)
+ {
+ interpolantList = new List<SExpr>();
+
+ Process.Ping();
+
+ while (true)
+ {
+ var resp = Process.GetProverResponse();
+ if (resp == null || Process.IsPong(resp))
+ break;
+
+ SExpr interpolant = resp as SExpr;
+ if(interpolant == null)
+ HandleProverError("Unexpected prover response: got null for interpolant!");
+ interpolantList.Add(interpolant);
+ }
+ }
+ }
+
+ public class SMTLibProverContext : DeclFreeProverContext
+ {
+ internal SMTLibProcessTheoremProver parent;
+
+ public readonly Dictionary<CtorType, List<Function>> KnownDatatypeConstructors = new Dictionary<CtorType, List<Function>>();
+
+ public SMTLibProverContext(VCExpressionGenerator gen,
+ VCGenerationOptions genOptions)
+ : base(gen, genOptions)
+ {
+ }
+
+ protected SMTLibProverContext(SMTLibProverContext par)
+ : base(par)
+ {
+ }
+
+ public override object Clone()
+ {
+ return new SMTLibProverContext(this);
+ }
+
+ public override string Lookup(VCExprVar var)
+ {
+ VCExprVar v = parent.AxBuilder.TryTyped2Untyped(var);
+ if (v != null) {
+ var = v;
+ }
+ return parent.Namer.Lookup(var);
+ }
+
+ public override void DeclareFunction(Function f, string attributes) {
+ if (f is DatatypeConstructor) {
+ CtorType datatype = (CtorType) f.OutParams[0].TypedIdent.Type;
+ if (!KnownDatatypeConstructors.ContainsKey(datatype))
+ KnownDatatypeConstructors[datatype] = new List<Function>();
+ KnownDatatypeConstructors[datatype].Add(f);
+ }
+ base.DeclareFunction(f, attributes);
+ }
+ }
+
+ public class Factory : ProverFactory
+ {
+ // Set programmatically
+ public static bool UseInterpolation = false;
+
+ public override object SpawnProver(ProverOptions options, object ctxt)
+ {
+ //Contract.Requires(ctxt != null);
+ //Contract.Requires(options != null);
+ Contract.Ensures(Contract.Result<object>() != null);
+
+ return this.SpawnProver(options,
+ cce.NonNull((SMTLibProverContext)ctxt).ExprGen,
+ cce.NonNull((SMTLibProverContext)ctxt));
+ }
+
+ public override object NewProverContext(ProverOptions options)
+ {
+ //Contract.Requires(options != null);
+ Contract.Ensures(Contract.Result<object>() != null);
+
+ VCExpressionGenerator gen = new VCExpressionGenerator();
+ List<string>/*!>!*/ proverCommands = new List<string/*!*/>();
+ proverCommands.Add("smtlib");
+ var opts = (SMTLibProverOptions)options ;
+ if (opts.Solver == SolverKind.Z3)
+ proverCommands.Add("z3");
+ else
+ proverCommands.Add("external");
+ VCGenerationOptions genOptions = new VCGenerationOptions(proverCommands);
+ return new SMTLibProverContext(gen, genOptions);
+ }
+
+ public override ProverOptions BlankProverOptions()
+ {
+ return new SMTLibProverOptions();
+ }
+
+ protected virtual SMTLibProcessTheoremProver SpawnProver(ProverOptions options,
+ VCExpressionGenerator gen,
+ SMTLibProverContext ctx)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(gen != null);
+ Contract.Requires(ctx != null);
+ Contract.Ensures(Contract.Result<SMTLibProcessTheoremProver>() != null);
+
+ if (UseInterpolation)
+ return new SMTLibInterpolatingProcessTheoremProver(options, gen, ctx);
+
+ return new SMTLibProcessTheoremProver(options, gen, ctx);
+ }
+
+ public override bool SupportsLabels(ProverOptions options)
+ {
+ return ((SMTLibProverOptions)options).SupportsLabels;
+ }
+ }
+}
diff --git a/Source/Provers/SMTLib/SExpr.cs b/Source/Provers/SMTLib/SExpr.cs
index ac681b8a..3e9687e1 100644
--- a/Source/Provers/SMTLib/SExpr.cs
+++ b/Source/Provers/SMTLib/SExpr.cs
@@ -1,263 +1,263 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System;
-using System.Linq;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Text;
-using System.Diagnostics.Contracts;
-using System.Globalization;
-
-namespace Microsoft.Boogie
-{
- public class SExpr
- {
- static readonly SExpr[] EmptyArgs = new SExpr[0];
- public readonly string Name;
- public SExpr[] Arguments
- {
- get
- {
- Contract.Ensures(Contract.Result<SExpr[]>() != null);
- Contract.Ensures(Contract.ForAll(Contract.Result<SExpr[]>(), expr => expr != null));
-
- return this.arguments;
- }
- }
-
- public SExpr this[int idx]
- {
- get
- {
- return Arguments[idx];
- }
- }
-
- public int ArgCount
- {
- get { return arguments.Length; }
- }
-
- public bool IsId
- {
- get { return Arguments.Length == 0; }
- }
-
- private readonly SExpr[] arguments;
-
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(this.Name != null);
- Contract.Invariant(this.arguments != null);
- Contract.Invariant(Contract.ForAll(this.arguments, arg => arg != null));
- }
-
- public SExpr(string name, params SExpr[] args)
- : this(name, (IEnumerable<SExpr>)args)
- {
- Contract.Requires(name != null);
- Contract.Requires(args != null);
- Contract.Requires(Contract.ForAll(args, x => x != null));
- }
-
- public SExpr(string name, IEnumerable<SExpr> args)
- {
- Contract.Requires(name != null);
- Contract.Requires(args != null);
- // We don't want to evaluate args twice!
- // Contract.Requires(Contract.ForAll(args, x => x != null));
- Name = name;
- arguments = args.ToArray();
- }
-
- public SExpr(string name)
- : this(name, EmptyArgs)
- {
- Contract.Requires(name != null);
- }
-
- #region pretty-printing
- void WriteTo(StringBuilder sb)
- {
- Contract.Requires(sb != null);
-
- if (Arguments.Length > 0) sb.Append('(');
- if (Name.Any(Char.IsWhiteSpace))
- sb.Append("\"").Append(Name).Append("\"");
- else if (Name.Length == 0)
- sb.Append("()");
- else
- sb.Append(Name);
- foreach (var a in Arguments) {
- sb.Append(' ');
- a.WriteTo(sb);
- }
- if (Arguments.Length > 0) sb.Append(')');
- }
-
- public override string ToString()
- {
- var sb = new StringBuilder();
- this.WriteTo(sb);
- return sb.ToString();
- }
- #endregion
-
- #region parsing
-
- public abstract class Parser
- {
- System.IO.StreamReader sr;
- int linePos = 0;
- string currLine = null;
-
- public Parser(System.IO.StreamReader _sr)
- {
- sr = _sr;
- }
- string Read()
- {
- return sr.ReadLine();
- }
- char SkipWs()
- {
- while (true)
- {
- if (currLine == null)
- {
- currLine = Read();
- if (currLine == null)
- return '\0';
- }
-
- while (linePos < currLine.Length && char.IsWhiteSpace(currLine[linePos]))
- linePos++;
-
- if (linePos < currLine.Length)
- return currLine[linePos];
- else
- {
- currLine = null;
- linePos = 0;
- }
- }
- }
-
- void Shift()
- {
- linePos++;
- }
-
- string ParseId()
- {
- var sb = new StringBuilder();
-
- var beg = SkipWs();
-
- var quoted = beg == '"' || beg == '|';
- if (quoted)
- Shift();
- while (true)
- {
- if (linePos >= currLine.Length)
- {
- if (quoted)
- {
- sb.Append("\n");
- currLine = Read();
- linePos = 0;
- if (currLine == null)
- break;
- }
- else break;
- }
-
- var c = currLine[linePos++];
- if (quoted && c == beg)
- break;
- if (!quoted && (char.IsWhiteSpace(c) || c == '(' || c == ')'))
- {
- linePos--;
- break;
- }
- if (quoted && c == '\\' && linePos < currLine.Length && currLine[linePos] == '"')
- {
- sb.Append('"');
- linePos++;
- continue;
- }
- sb.Append(c);
- }
-
- return sb.ToString();
- }
-
- public abstract void ParseError(string msg);
-
- public IEnumerable<SExpr> ParseSExprs(bool top)
- {
- while (true)
- {
- var c = SkipWs();
- if (c == '\0')
- break;
-
- if (c == ')')
- {
- if (top)
- ParseError("stray ')'");
- break;
- }
-
- string id;
-
- if (c == '(')
- {
- Shift();
- c = SkipWs();
- if (c == '\0')
- {
- ParseError("expecting something after '('");
- break;
- }
- else if (c == '(')
- {
- id = "";
- }
- else
- {
- id = ParseId();
- }
-
- var args = ParseSExprs(false).ToArray();
-
- c = SkipWs();
- if (c == ')')
- {
- Shift();
- }
- else
- {
- ParseError("unclosed '(" + id + "'");
- }
- yield return new SExpr(id, args);
- }
- else
- {
- id = ParseId();
- yield return new SExpr(id);
- }
-
- if (top) break;
- }
- }
- }
- #endregion
- }
-}
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Text;
+using System.Diagnostics.Contracts;
+using System.Globalization;
+
+namespace Microsoft.Boogie
+{
+ public class SExpr
+ {
+ static readonly SExpr[] EmptyArgs = new SExpr[0];
+ public readonly string Name;
+ public SExpr[] Arguments
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<SExpr[]>() != null);
+ Contract.Ensures(Contract.ForAll(Contract.Result<SExpr[]>(), expr => expr != null));
+
+ return this.arguments;
+ }
+ }
+
+ public SExpr this[int idx]
+ {
+ get
+ {
+ return Arguments[idx];
+ }
+ }
+
+ public int ArgCount
+ {
+ get { return arguments.Length; }
+ }
+
+ public bool IsId
+ {
+ get { return Arguments.Length == 0; }
+ }
+
+ private readonly SExpr[] arguments;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(this.Name != null);
+ Contract.Invariant(this.arguments != null);
+ Contract.Invariant(Contract.ForAll(this.arguments, arg => arg != null));
+ }
+
+ public SExpr(string name, params SExpr[] args)
+ : this(name, (IEnumerable<SExpr>)args)
+ {
+ Contract.Requires(name != null);
+ Contract.Requires(args != null);
+ Contract.Requires(Contract.ForAll(args, x => x != null));
+ }
+
+ public SExpr(string name, IEnumerable<SExpr> args)
+ {
+ Contract.Requires(name != null);
+ Contract.Requires(args != null);
+ // We don't want to evaluate args twice!
+ // Contract.Requires(Contract.ForAll(args, x => x != null));
+ Name = name;
+ arguments = args.ToArray();
+ }
+
+ public SExpr(string name)
+ : this(name, EmptyArgs)
+ {
+ Contract.Requires(name != null);
+ }
+
+ #region pretty-printing
+ void WriteTo(StringBuilder sb)
+ {
+ Contract.Requires(sb != null);
+
+ if (Arguments.Length > 0) sb.Append('(');
+ if (Name.Any(Char.IsWhiteSpace))
+ sb.Append("\"").Append(Name).Append("\"");
+ else if (Name.Length == 0)
+ sb.Append("()");
+ else
+ sb.Append(Name);
+ foreach (var a in Arguments) {
+ sb.Append(' ');
+ a.WriteTo(sb);
+ }
+ if (Arguments.Length > 0) sb.Append(')');
+ }
+
+ public override string ToString()
+ {
+ var sb = new StringBuilder();
+ this.WriteTo(sb);
+ return sb.ToString();
+ }
+ #endregion
+
+ #region parsing
+
+ public abstract class Parser
+ {
+ System.IO.StreamReader sr;
+ int linePos = 0;
+ string currLine = null;
+
+ public Parser(System.IO.StreamReader _sr)
+ {
+ sr = _sr;
+ }
+ string Read()
+ {
+ return sr.ReadLine();
+ }
+ char SkipWs()
+ {
+ while (true)
+ {
+ if (currLine == null)
+ {
+ currLine = Read();
+ if (currLine == null)
+ return '\0';
+ }
+
+ while (linePos < currLine.Length && char.IsWhiteSpace(currLine[linePos]))
+ linePos++;
+
+ if (linePos < currLine.Length)
+ return currLine[linePos];
+ else
+ {
+ currLine = null;
+ linePos = 0;
+ }
+ }
+ }
+
+ void Shift()
+ {
+ linePos++;
+ }
+
+ string ParseId()
+ {
+ var sb = new StringBuilder();
+
+ var beg = SkipWs();
+
+ var quoted = beg == '"' || beg == '|';
+ if (quoted)
+ Shift();
+ while (true)
+ {
+ if (linePos >= currLine.Length)
+ {
+ if (quoted)
+ {
+ sb.Append("\n");
+ currLine = Read();
+ linePos = 0;
+ if (currLine == null)
+ break;
+ }
+ else break;
+ }
+
+ var c = currLine[linePos++];
+ if (quoted && c == beg)
+ break;
+ if (!quoted && (char.IsWhiteSpace(c) || c == '(' || c == ')'))
+ {
+ linePos--;
+ break;
+ }
+ if (quoted && c == '\\' && linePos < currLine.Length && currLine[linePos] == '"')
+ {
+ sb.Append('"');
+ linePos++;
+ continue;
+ }
+ sb.Append(c);
+ }
+
+ return sb.ToString();
+ }
+
+ public abstract void ParseError(string msg);
+
+ public IEnumerable<SExpr> ParseSExprs(bool top)
+ {
+ while (true)
+ {
+ var c = SkipWs();
+ if (c == '\0')
+ break;
+
+ if (c == ')')
+ {
+ if (top)
+ ParseError("stray ')'");
+ break;
+ }
+
+ string id;
+
+ if (c == '(')
+ {
+ Shift();
+ c = SkipWs();
+ if (c == '\0')
+ {
+ ParseError("expecting something after '('");
+ break;
+ }
+ else if (c == '(')
+ {
+ id = "";
+ }
+ else
+ {
+ id = ParseId();
+ }
+
+ var args = ParseSExprs(false).ToArray();
+
+ c = SkipWs();
+ if (c == ')')
+ {
+ Shift();
+ }
+ else
+ {
+ ParseError("unclosed '(" + id + "'");
+ }
+ yield return new SExpr(id, args);
+ }
+ else
+ {
+ id = ParseId();
+ yield return new SExpr(id);
+ }
+
+ if (top) break;
+ }
+ }
+ }
+ #endregion
+ }
+}
+
diff --git a/Source/Provers/SMTLib/SMTLib.csproj b/Source/Provers/SMTLib/SMTLib.csproj
index 5e80f4c1..00febc0a 100644
--- a/Source/Provers/SMTLib/SMTLib.csproj
+++ b/Source/Provers/SMTLib/SMTLib.csproj
@@ -1,237 +1,237 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie.SMTLib</RootNamespace>
- <AssemblyName>Provers.SMTLib</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for SMTLib.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\Provers.SMTLib.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Inspector.cs" />
- <Compile Include="SMTLibProverOptions.cs" />
- <Compile Include="ProverInterface.cs" />
- <Compile Include="SExpr.cs" />
- <Compile Include="SMTLibLineariser.cs" />
- <Compile Include="SMTLibNamer.cs" />
- <Compile Include="SMTLibProcess.cs" />
- <Compile Include="TypeDeclCollector.cs" />
- <Compile Include="..\..\version.cs" />
- <Compile Include="Z3.cs" />
- <Compile Include="CVC4.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Model\Model.csproj">
- <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\VCExpr\VCExpr.csproj">
- <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
- <Name>VCExpr</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{9B163AA3-36BC-4AFB-88AB-79BC9E97E401}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Microsoft.Boogie.SMTLib</RootNamespace>
+ <AssemblyName>Provers.SMTLib</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for SMTLib.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\Provers.SMTLib.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Inspector.cs" />
+ <Compile Include="SMTLibProverOptions.cs" />
+ <Compile Include="ProverInterface.cs" />
+ <Compile Include="SExpr.cs" />
+ <Compile Include="SMTLibLineariser.cs" />
+ <Compile Include="SMTLibNamer.cs" />
+ <Compile Include="SMTLibProcess.cs" />
+ <Compile Include="TypeDeclCollector.cs" />
+ <Compile Include="..\..\version.cs" />
+ <Compile Include="Z3.cs" />
+ <Compile Include="CVC4.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Model\Model.csproj">
+ <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
+ <Name>Model</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\VCExpr\VCExpr.csproj">
+ <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
+ <Name>VCExpr</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
diff --git a/Source/Provers/SMTLib/SMTLibLineariser.cs b/Source/Provers/SMTLib/SMTLibLineariser.cs
index 96d5b290..99dd849d 100644
--- a/Source/Provers/SMTLib/SMTLibLineariser.cs
+++ b/Source/Provers/SMTLib/SMTLibLineariser.cs
@@ -1,930 +1,955 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Linq;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// Method to turn VCExprs into strings that can be fed into SMT
-// solvers. This is currently quite similar to the
-// SimplifyLikeLineariser (but the code is independent)
-
-namespace Microsoft.Boogie.SMTLib
-{
-
- // Options for the linearisation
- public class LineariserOptions
- {
- public static LineariserOptions Default = new LineariserOptions();
- public bool LabelsBelowQuantifiers = false;
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- // Lineariser for expressions. The result (bool) is currently not used for anything
- public class SMTLibExprLineariser : IVCExprVisitor<bool, LineariserOptions/*!*/>
- {
-
- public static string ToString(VCExpr e, UniqueNamer namer, SMTLibProverOptions opts)
- {
- Contract.Requires(e != null);
- Contract.Requires(namer != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- StringWriter sw = new StringWriter();
- SMTLibExprLineariser lin = new SMTLibExprLineariser(sw, namer, opts);
- Contract.Assert(lin != null);
- lin.Linearise(e, LineariserOptions.Default);
- return cce.NonNull(sw.ToString());
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- private readonly TextWriter wr;
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(wr != null);
- Contract.Invariant(Namer != null);
- }
-
- private SMTLibOpLineariser OpLinObject = null;
- private IVCExprOpVisitor<bool, LineariserOptions>/*!>!*/ OpLineariser
- {
- get
- {
- Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool, LineariserOptions>>() != null);
-
- if (OpLinObject == null)
- OpLinObject = new SMTLibOpLineariser(this, wr);
- return OpLinObject;
- }
- }
-
- internal readonly UniqueNamer Namer;
- internal int UnderQuantifier = 0;
- internal readonly SMTLibProverOptions ProverOptions;
-
- public SMTLibExprLineariser(TextWriter wr, UniqueNamer namer, SMTLibProverOptions opts)
- {
- Contract.Requires(wr != null); Contract.Requires(namer != null);
- this.wr = wr;
- this.Namer = namer;
- this.ProverOptions = opts;
- }
-
- public void Linearise(VCExpr expr, LineariserOptions options)
- {
- Contract.Requires(expr != null);
- Contract.Requires(options != null);
- expr.Accept<bool, LineariserOptions>(this, options);
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- private static void TypeToStringHelper(Type t, StringBuilder sb)
- {
- Contract.Requires(t != null);
-
- TypeSynonymAnnotation syn = t as TypeSynonymAnnotation;
- if (syn != null) {
- TypeToStringHelper(syn.ExpandedType, sb);
- } else {
- if (t.IsMap && CommandLineOptions.Clo.UseArrayTheory) {
- MapType m = t.AsMap;
- // Contract.Assert(m.MapArity == 1);
- sb.Append("(Array ");
- foreach (Type tp in m.Arguments)
- sb.Append(TypeToString(tp)).Append(" ");
- sb.Append(TypeToString(m.Result)).Append(")");
- } else if (t.IsMap) {
- MapType m = t.AsMap;
- sb.Append('[');
- for (int i = 0; i < m.MapArity; ++i) {
- if (i != 0)
- sb.Append(',');
- TypeToStringHelper(m.Arguments[i], sb);
- }
- sb.Append(']');
- TypeToStringHelper(m.Result, sb);
- } else if (t.IsBool || t.IsInt || t.IsReal || t.IsFloat || t.IsBv) {
- sb.Append(TypeToString(t));
- } else {
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/false, /*pretty=*/false)) {
- t.Emit(stream);
- }
- sb.Append(buffer.ToString());
- }
- }
-
- }
-
- public static string TypeToString(Type t)
- {
- Contract.Requires(t != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- if (t.IsBool)
- return "Bool";
- else if (t.IsInt)
- return "Int";
- else if (t.IsReal)
- return "Real";
- else if (t.IsFloat)
- return "(_ FloatingPoint " + t.FloatExponent + " " + t.FloatMantissa + ")";
- else if (t.IsBv) {
- return "(_ BitVec " + t.BvBits + ")";
- } else {
- StringBuilder sb = new StringBuilder();
- TypeToStringHelper(t, sb);
- var s = sb.ToString();
- if (s[0] == '(')
- return s;
- else
- return SMTLibNamer.QuoteId("T@" + s);
- }
- }
-
- public static string ExtractBuiltin(Function f)
- {
- Contract.Requires(f != null);
- string retVal = null;
- retVal = f.FindStringAttribute("bvbuiltin");
-
- // It used to be "sign_extend 12" in Simplify, and is "(_ sign_extend 12)" with SMT
- if (retVal != null && (retVal.StartsWith("sign_extend ") || retVal.StartsWith("zero_extend ")))
- return "(_ " + retVal + ")";
-
- if (retVal == null) {
- retVal = f.FindStringAttribute("builtin");
- }
-
- if (retVal != null && !CommandLineOptions.Clo.UseArrayTheory && SMTLibOpLineariser.ArrayOps.Contains(retVal))
- {
- retVal = null;
- }
-
- return retVal;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprLiteral node, LineariserOptions options)
- {
- if (node == VCExpressionGenerator.True)
- wr.Write("true");
- else if (node == VCExpressionGenerator.False)
- wr.Write("false");
- else if (node is VCExprIntLit) {
- BigNum lit = ((VCExprIntLit)node).Val;
- if (lit.IsNegative)
- // In SMT2 "-42" is an identifier (SMT2, Sect. 3.2 "Symbols")
- wr.Write("(- 0 {0})", lit.Abs);
- else
- wr.Write(lit);
- }
- else if (node is VCExprRealLit) {
- BigDec lit = ((VCExprRealLit)node).Val;
- if (lit.IsNegative)
- // In SMT2 "-42" is an identifier (SMT2, Sect. 3.2 "Symbols")
- wr.Write("(- 0.0 {0})", lit.Abs.ToDecimalString());
- else
- wr.Write(lit.ToDecimalString());
- }
- else if (node is VCExprFloatLit)
- {
- BigFloat lit = ((VCExprFloatLit)node).Val;
- wr.Write("(" + lit.ToBVString() + ")");
- }
- else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- return true;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprNAry node, LineariserOptions options)
- {
- VCExprOp op = node.Op;
- Contract.Assert(op != null);
-
- var booleanOps = new HashSet<VCExprOp>();
- booleanOps.Add(VCExpressionGenerator.NotOp);
- booleanOps.Add(VCExpressionGenerator.ImpliesOp);
- booleanOps.Add(VCExpressionGenerator.AndOp);
- booleanOps.Add(VCExpressionGenerator.OrOp);
- if (booleanOps.Contains(op))
- {
- Stack<VCExpr> exprs = new Stack<VCExpr>();
- exprs.Push(node);
- while (exprs.Count > 0)
- {
- VCExpr expr = exprs.Pop();
- if (expr == null)
- {
- wr.Write(")");
- continue;
- }
- wr.Write(" ");
- VCExprNAry naryExpr = expr as VCExprNAry;
- if (naryExpr == null || !booleanOps.Contains(naryExpr.Op))
- {
- Linearise(expr, options);
- continue;
- }
- else if (naryExpr.Op.Equals(VCExpressionGenerator.NotOp))
- {
- wr.Write("(not");
- }
- else if (naryExpr.Op.Equals(VCExpressionGenerator.ImpliesOp))
- {
- wr.Write("(=>");
- }
- else if (naryExpr.Op.Equals(VCExpressionGenerator.AndOp))
- {
- wr.Write("(and");
- }
- else
- {
- System.Diagnostics.Debug.Assert(naryExpr.Op.Equals(VCExpressionGenerator.OrOp));
- wr.Write("(or");
- }
- exprs.Push(null);
- for (int i = naryExpr.Arity - 1; i >= 0; i--)
- {
- exprs.Push(naryExpr[i]);
- }
- }
- return true;
- }
- return node.Accept<bool, LineariserOptions/*!*/>(OpLineariser, options);
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprVar node, LineariserOptions options)
- {
- wr.Write(Namer.GetQuotedName(node, node.Name));
- return true;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprQuantifier node, LineariserOptions options)
- {
- Contract.Assert(node.TypeParameters.Count == 0);
-
- UnderQuantifier++;
- Namer.PushScope(); try {
-
- string kind = node.Quan == Quantifier.ALL ? "forall" : "exists";
- wr.Write("({0} (", kind);
-
- for (int i = 0; i < node.BoundVars.Count; i++) {
- VCExprVar var = node.BoundVars[i];
- Contract.Assert(var != null);
- string printedName = Namer.GetQuotedLocalName(var, var.Name);
- Contract.Assert(printedName != null);
- wr.Write("({0} {1}) ", printedName, TypeToString(var.Type));
- }
-
- wr.Write(") ");
-
- VCQuantifierInfos infos = node.Infos;
- var weight = QKeyValue.FindIntAttribute(infos.attributes, "weight", 1);
- if (!ProverOptions.UseWeights)
- weight = 1;
- var hasAttrs = node.Triggers.Count > 0 || infos.qid != null || weight != 1 || infos.uniqueId != -1;
-
- if (hasAttrs)
- wr.Write("(! ");
-
- Linearise(node.Body, options);
-
- if (hasAttrs) {
- wr.Write("\n");
- if (infos.qid != null)
- wr.Write(" :qid {0}\n", SMTLibNamer.QuoteId(infos.qid));
- if (weight != 1)
- wr.Write(" :weight {0}\n", weight);
- if (infos.uniqueId != -1)
- wr.Write(" :skolemid |{0}|\n", infos.uniqueId);
- WriteTriggers(node.Triggers, options);
-
- wr.Write(")");
- }
-
- wr.Write(")");
-
- return true;
-
- } finally {
- UnderQuantifier--;
- Namer.PopScope();
- }
- }
-
- private void WriteTriggers(List<VCTrigger/*!>!*/> triggers, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(triggers != null);
- // first, count how many neg/pos triggers there are
- int negTriggers = 0;
- int posTriggers = 0;
- foreach (VCTrigger vcTrig in triggers) {
- Contract.Assert(vcTrig != null);
- if (vcTrig.Pos) {
- posTriggers++;
- } else {
- negTriggers++;
- }
- }
-
- if (posTriggers > 0) {
- foreach (VCTrigger vcTrig in triggers) {
- Contract.Assert(vcTrig != null);
- if (vcTrig.Pos) {
- wr.Write(" :pattern (");
- foreach (VCExpr e in vcTrig.Exprs) {
- Contract.Assert(e != null);
- wr.Write(" ");
- var subPat = e;
- var nary = e as VCExprNAry;
- if (nary != null && (nary.Op == VCExpressionGenerator.NeqOp || nary.Op == VCExpressionGenerator.EqOp)) {
- if (nary[0] is VCExprLiteral)
- subPat = nary[1];
- else if (nary[1] is VCExprLiteral)
- subPat = nary[0];
- }
- Linearise(subPat, options);
- }
- wr.Write(")\n");
- }
- }
- } else if (negTriggers > 0) {
- // if also positive triggers are given, the SMT solver (at least Z3)
- // will ignore the negative patterns and output a warning. Therefore
- // we never specify both negative and positive triggers
- foreach (VCTrigger vcTrig in triggers) {
- Contract.Assert(vcTrig != null);
- if (!vcTrig.Pos) {
- wr.Write(" :no-pattern ");
- Contract.Assert(vcTrig.Exprs.Count == 1);
- Linearise(vcTrig.Exprs[0], options);
- wr.Write("\n");
- }
- }
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprLet node, LineariserOptions options)
- {
- Namer.PushScope();
- try {
-
- foreach (VCExprLetBinding b in node) {
- wr.Write("(let (");
- Contract.Assert(b != null);
- wr.Write("({0} ", Namer.GetQuotedName(b.V, b.V.Name));
- Linearise(b.E, options);
- wr.Write("))\n");
- }
- Linearise(node.Body, options);
- foreach (VCExprLetBinding b in node)
- wr.Write(")");
- return true;
- } finally {
- Namer.PopScope();
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- // Lineariser for operator terms. The result (bool) is currently not used for anything
- internal class SMTLibOpLineariser : IVCExprOpVisitor<bool, LineariserOptions/*!*/>
- {
- private readonly SMTLibExprLineariser ExprLineariser;
- private readonly TextWriter wr;
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(wr != null);
- Contract.Invariant(ExprLineariser != null);
- }
-
-
- public SMTLibOpLineariser(SMTLibExprLineariser ExprLineariser, TextWriter wr)
- {
- Contract.Requires(ExprLineariser != null);
- Contract.Requires(wr != null);
- this.ExprLineariser = ExprLineariser;
- this.wr = wr;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
- private void WriteApplication(string opName, IEnumerable<VCExpr>/*!>!*/ args, LineariserOptions options)
- {
- Contract.Requires(cce.NonNullElements(args));
- Contract.Requires(options != null);
- Contract.Assert(opName != null);
-
- bool hasArgs = false;
- foreach (VCExpr e in args) {
- Contract.Assert(e != null);
- if (!hasArgs)
- wr.Write("({0}", opName);
- wr.Write(" ");
- ExprLineariser.Linearise(e, options);
- hasArgs = true;
- }
-
- if (hasArgs)
- wr.Write(")");
- else
- wr.Write("{0}", opName);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public bool VisitNotOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("not", node, options); // arguments can be both terms and formulas
- return true;
- }
-
- private bool PrintEq(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(node != null);
- Contract.Requires(options != null);
-
- WriteApplication("=", node, options);
-
- return true;
- }
-
- public bool VisitEqOp(VCExprNAry node, LineariserOptions options)
- {
- return PrintEq(node, options);
- }
-
- public bool VisitNeqOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- wr.Write("(not ");
- PrintEq(node, options);
- wr.Write(")");
- return true;
- }
-
- public bool VisitAndOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("and", node, options);
- return true;
- }
-
- public bool VisitOrOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("or", node, options);
- return true;
- }
-
- public bool VisitImpliesOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("=>", node, options);
- return true;
- }
-
- public bool VisitIfThenElseOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("ite", node, options);
- return true;
- }
-
- public bool VisitCustomOp(VCExprNAry node, LineariserOptions options)
- {
- VCExprCustomOp op = (VCExprCustomOp)node.Op;
- if (!ExprLineariser.ProverOptions.UseTickleBool && op.Name == "tickleBool")
- ExprLineariser.Linearise(VCExpressionGenerator.True, options);
- else
- WriteApplication(op.Name, node, options);
- return true;
- }
-
- public bool VisitDistinctOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- if (node.Length < 2) {
- ExprLineariser.Linearise(VCExpressionGenerator.True, options);
- } else {
- var groupings = node.GroupBy(e => e.Type).Where(g => g.Count() > 1).ToArray();
- if (groupings.Length == 0) {
- ExprLineariser.Linearise(VCExpressionGenerator.True, options);
- } else {
- if (groupings.Length > 1)
- wr.Write("(and ");
-
- foreach (var g in groupings) {
- wr.Write("(distinct");
- foreach (VCExpr e in g) {
- Contract.Assert(e != null);
- wr.Write(" ");
- ExprLineariser.Linearise(e, options);
- }
- wr.Write(")");
- }
-
- if (groupings.Length > 1)
- wr.Write(")");
-
- wr.Write("\n");
- }
- }
-
- return true;
- }
-
- public bool VisitLabelOp(VCExprNAry node, LineariserOptions options)
- {
- if (ExprLineariser.UnderQuantifier > 0 && !options.LabelsBelowQuantifiers) {
- ExprLineariser.Linearise(node[0], options);
- return true;
- }
-
- var op = (VCExprLabelOp)node.Op;
-
- if (CommandLineOptions.Clo.UseLabels)
- {
- // Z3 extension
- //wr.Write("({0} {1} ", op.pos ? "lblpos" : "lblneg", SMTLibNamer.QuoteId(op.label));
- wr.Write("(! ");
- }
-
- if(!options.LabelsBelowQuantifiers)
- wr.Write("({0} {1} ", op.pos ? "and" : "or", SMTLibNamer.QuoteId(SMTLibNamer.LabelVar(op.label)));
-
- ExprLineariser.Linearise(node[0], options);
-
-
- if (!options.LabelsBelowQuantifiers)
- wr.Write(")");
-
- if (CommandLineOptions.Clo.UseLabels)
- wr.Write(" :{0} {1})", op.pos ? "lblpos" : "lblneg", SMTLibNamer.QuoteId(op.label));
-
- return true;
- }
-
- public bool VisitSelectOp(VCExprNAry node, LineariserOptions options)
- {
- var name = SimplifyLikeExprLineariser.SelectOpName(node);
- name = ExprLineariser.Namer.GetQuotedName(name, name);
- if (CommandLineOptions.Clo.UseArrayTheory)
- name = "select";
- WriteApplication(name, node, options);
- return true;
- }
-
- public bool VisitStoreOp(VCExprNAry node, LineariserOptions options)
- {
- var name = SimplifyLikeExprLineariser.StoreOpName(node);
- name = ExprLineariser.Namer.GetQuotedName(name, name);
- if (CommandLineOptions.Clo.UseArrayTheory)
- name = "store";
- WriteApplication(name, node, options);
- return true;
- }
-
- public bool VisitFloatAddOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.add RNE", node, options);
- return true;
- }
-
- public bool VisitFloatSubOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.sub RNE", node, options);
- return true;
- }
-
- public bool VisitFloatMulOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.mul RNE", node, options);
- return true;
- }
-
- public bool VisitFloatDivOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.div RNE", node, options);
- return true;
- }
-
- public bool VisitFloatRemOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.rem RNE", node, options);
- return true;
- }
-
- public bool VisitFloatMinOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.min", node, options);
- return true;
- }
-
- public bool VisitFloatMaxOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.max", node, options);
- return true;
- }
-
- public bool VisitFloatLeqOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.leq", node, options);
- return true;
- }
-
- public bool VisitFloatLtOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.lt", node, options);
- return true;
- }
-
- public bool VisitFloatGeqOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.geq", node, options);
- return true;
- }
-
- public bool VisitFloatGtOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.gt", node, options);
- return true;
- }
-
- public bool VisitFloatEqOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("fp.eq", node, options);
- return true;
- }
-
- static char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
- public bool VisitBvOp(VCExprNAry node, LineariserOptions options)
- {
- var lit = (VCExprIntLit)node[0];
- var bytes = lit.Val.ToByteArray();
- if (node.Type.BvBits % 8 == 0) {
- wr.Write("#x");
- for (var pos = node.Type.BvBits / 8 - 1; pos >= 0; pos--) {
- var k = pos < bytes.Length ? bytes[pos] : (byte)0;
- wr.Write(hex[k >> 4]);
- wr.Write(hex[k & 0xf]);
- }
- } else {
- wr.Write("#b");
- for (var pos = node.Type.BvBits - 1; pos >= 0; pos--) {
- var i = pos >> 3;
- var k = i < bytes.Length ? bytes[i] : (byte)0;
- wr.Write((k & (1 << (pos & 7))) == 0 ? '0' : '1');
- }
- }
- return true;
- }
-
- public bool VisitBvExtractOp(VCExprNAry node, LineariserOptions options)
- {
- var op = (VCExprBvExtractOp)node.Op;
- wr.Write("((_ extract {0} {1}) ", op.End - 1, op.Start);
- ExprLineariser.Linearise(node[0], options);
- wr.Write(")");
- return true;
- }
-
- public bool VisitBvConcatOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("concat", node, options);
- return true;
- }
-
- public bool VisitAddOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("+", node, options);
- return true;
- }
-
- public bool VisitSubOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("-", node, options);
- return true;
- }
-
- public bool VisitMulOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("*", node, options);
- return true;
- }
-
- public bool VisitDivOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("div", node, options);
- return true;
- }
-
- public bool VisitModOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("mod", node, options);
- return true;
- }
-
- public bool VisitRealDivOp(VCExprNAry node, LineariserOptions options) {
- WriteApplication("/", node, options);
- return true;
- }
-
- public bool VisitPowOp(VCExprNAry node, LineariserOptions options) {
- WriteApplication("real_pow", node, options);
- return true;
- }
-
- public bool VisitLtOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("<", node, options);
- return true;
- }
-
- public bool VisitLeOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("<=", node, options);
- return true;
- }
-
- public bool VisitGtOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication(">", node, options);
- return true;
- }
-
- public bool VisitGeOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication(">=", node, options);
- return true;
- }
-
- public bool VisitSubtypeOp(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("UOrdering2", node, options);
- return true;
- }
-
- public bool VisitSubtype3Op(VCExprNAry node, LineariserOptions options)
- {
- WriteApplication("UOrdering3", node, options);
- return true;
- }
-
- public bool VisitToIntOp(VCExprNAry node, LineariserOptions options) {
- WriteApplication("to_int", node, options);
- return true;
- }
-
- public bool VisitToRealOp(VCExprNAry node, LineariserOptions options) {
- WriteApplication("to_real", node, options);
- return true;
- }
-
- private string ExtractDatatype(Function func) {
- if (func is DatatypeSelector) {
- DatatypeSelector selector = (DatatypeSelector) func;
- Variable v = selector.constructor.InParams[selector.index];
- return ExprLineariser.Namer.GetQuotedName(v, v.Name + "#" + selector.constructor.Name);
- }
- else if (func is DatatypeMembership) {
- DatatypeMembership membership = (DatatypeMembership)func;
- return ExprLineariser.Namer.GetQuotedName(membership, "is-" + membership.constructor.Name);
- }
- else {
- return null;
- }
- }
-
- public bool VisitBoogieFunctionOp(VCExprNAry node, LineariserOptions options) {
- VCExprBoogieFunctionOp op = (VCExprBoogieFunctionOp)node.Op;
- Contract.Assert(op != null);
- string printedName;
-
- var builtin = ExtractBuiltin(op.Func);
- var datatype = ExtractDatatype(op.Func);
- if (builtin != null)
- {
- printedName = CheckMapApply(builtin, node);
- }
- else if (datatype != null)
- {
- printedName = datatype;
- }
- else
- {
- printedName = ExprLineariser.Namer.GetQuotedName(op.Func, op.Func.Name);
- }
- Contract.Assert(printedName != null);
-
- WriteApplication(printedName, node, options);
-
- return true;
- }
-
- private static Type ResultType(Type type) {
- MapType mapType = type as MapType;
- if (mapType != null) {
- return ResultType(mapType.Result);
- }
- else {
- return type;
- }
- }
-
- public static HashSet<string> ArrayOps = new HashSet<string>(new string[] {
- "MapConst", "MapAdd", "MapSub", "MapMul", "MapDiv", "MapMod", "MapEq", "MapIff", "MapGt", "MapGe", "MapLt", "MapLe", "MapOr", "MapAnd", "MapNot", "MapImp", "MapIte" });
-
- private static string CheckMapApply(string name, VCExprNAry node) {
- if (name == "MapConst") {
- Type type = node.Type;
- string s = TypeToString(type);
- return "(as const " + s + ")";
- }
- else if (name == "MapAdd") {
- return "(_ map (+ (Int Int) Int))";
- }
- else if (name == "MapSub") {
- return "(_ map (- (Int Int) Int))";
- }
- else if (name == "MapMul") {
- return "(_ map (* (Int Int) Int))";
- }
- else if (name == "MapDiv") {
- return "(_ map (div (Int Int) Int))";
- }
- else if (name == "MapMod") {
- return "(_ map (mod (Int Int) Int))";
- }
- else if (name == "MapEq") {
- Type type = ResultType(node[0].Type);
- string s = TypeToString(type);
- return "(_ map (= (" + s + " " + s + ") Bool))";
- }
- else if (name == "MapIff") {
- return "(_ map (= (Bool Bool) Bool))";
- }
- else if (name == "MapGt") {
- return "(_ map (> (Int Int) Int))";
- }
- else if (name == "MapGe") {
- return "(_ map (>= (Int Int) Int))";
- }
- else if (name == "MapLt") {
- return "(_ map (< (Int Int) Int))";
- }
- else if (name == "MapLe") {
- return "(_ map (<= (Int Int) Int))";
- }
- else if (name == "MapOr") {
- return "(_ map or)";
- }
- else if (name == "MapAnd") {
- return "(_ map and)";
- }
- else if (name == "MapNot") {
- return "(_ map not)";
- }
- else if (name == "MapImp") {
- return "(_ map =>)";
- }
- else if (name == "MapIte") {
- Type type = ResultType(node.Type);
- string s = TypeToString(type);
- return "(_ map (ite (Bool " + s + " " + s + ") " + s + "))";
- }
- else {
- return name;
- }
- }
- }
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// Method to turn VCExprs into strings that can be fed into SMT
+// solvers. This is currently quite similar to the
+// SimplifyLikeLineariser (but the code is independent)
+
+namespace Microsoft.Boogie.SMTLib
+{
+
+ // Options for the linearisation
+ public class LineariserOptions
+ {
+ public static LineariserOptions Default = new LineariserOptions();
+ public bool LabelsBelowQuantifiers = false;
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ // Lineariser for expressions. The result (bool) is currently not used for anything
+ public class SMTLibExprLineariser : IVCExprVisitor<bool, LineariserOptions/*!*/>
+ {
+
+ public static string ToString(VCExpr e, UniqueNamer namer, SMTLibProverOptions opts, ISet<VCExprVar> namedAssumes = null, IList<string> optReqs = null, ISet<VCExprVar> tryAssumes = null)
+ {
+ Contract.Requires(e != null);
+ Contract.Requires(namer != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ StringWriter sw = new StringWriter();
+ SMTLibExprLineariser lin = new SMTLibExprLineariser(sw, namer, opts, namedAssumes, optReqs);
+ Contract.Assert(lin != null);
+ lin.Linearise(e, LineariserOptions.Default);
+ return cce.NonNull(sw.ToString());
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ private readonly TextWriter wr;
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(wr != null);
+ Contract.Invariant(Namer != null);
+ }
+
+ private SMTLibOpLineariser OpLinObject = null;
+ private IVCExprOpVisitor<bool, LineariserOptions>/*!>!*/ OpLineariser
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool, LineariserOptions>>() != null);
+
+ if (OpLinObject == null)
+ OpLinObject = new SMTLibOpLineariser(this, wr);
+ return OpLinObject;
+ }
+ }
+
+ internal readonly UniqueNamer Namer;
+ internal int UnderQuantifier = 0;
+ internal readonly SMTLibProverOptions ProverOptions;
+
+ readonly IList<string> OptimizationRequests;
+ readonly ISet<VCExprVar> NamedAssumes;
+
+ public SMTLibExprLineariser(TextWriter wr, UniqueNamer namer, SMTLibProverOptions opts, ISet<VCExprVar> namedAssumes = null, IList<string> optReqs = null)
+ {
+ Contract.Requires(wr != null); Contract.Requires(namer != null);
+ this.wr = wr;
+ this.Namer = namer;
+ this.ProverOptions = opts;
+ this.OptimizationRequests = optReqs;
+ this.NamedAssumes = namedAssumes;
+ }
+
+ public void Linearise(VCExpr expr, LineariserOptions options)
+ {
+ Contract.Requires(expr != null);
+ Contract.Requires(options != null);
+ expr.Accept<bool, LineariserOptions>(this, options);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ private static void TypeToStringHelper(Type t, StringBuilder sb)
+ {
+ Contract.Requires(t != null);
+
+ TypeSynonymAnnotation syn = t as TypeSynonymAnnotation;
+ if (syn != null) {
+ TypeToStringHelper(syn.ExpandedType, sb);
+ } else {
+ if (t.IsMap && CommandLineOptions.Clo.UseArrayTheory) {
+ MapType m = t.AsMap;
+ // Contract.Assert(m.MapArity == 1);
+ sb.Append("(Array ");
+ foreach (Type tp in m.Arguments)
+ sb.Append(TypeToString(tp)).Append(" ");
+ sb.Append(TypeToString(m.Result)).Append(")");
+ } else if (t.IsMap) {
+ MapType m = t.AsMap;
+ sb.Append('[');
+ for (int i = 0; i < m.MapArity; ++i) {
+ if (i != 0)
+ sb.Append(',');
+ TypeToStringHelper(m.Arguments[i], sb);
+ }
+ sb.Append(']');
+ TypeToStringHelper(m.Result, sb);
+ } else if (t.IsBool || t.IsInt || t.IsReal || t.IsFloat || t.IsBv) {
+ sb.Append(TypeToString(t));
+ } else {
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/false, /*pretty=*/false)) {
+ t.Emit(stream);
+ }
+ sb.Append(buffer.ToString());
+ }
+ }
+
+ }
+
+ public static string TypeToString(Type t)
+ {
+ Contract.Requires(t != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ if (t.IsBool)
+ return "Bool";
+ else if (t.IsInt)
+ return "Int";
+ else if (t.IsReal)
+ return "Real";
+ else if (t.IsFloat)
+ return "(_ FloatingPoint " + t.FloatExponent + " " + t.FloatMantissa + ")";
+ else if (t.IsBv) {
+ return "(_ BitVec " + t.BvBits + ")";
+ } else {
+ StringBuilder sb = new StringBuilder();
+ TypeToStringHelper(t, sb);
+ var s = sb.ToString();
+ if (s[0] == '(')
+ return s;
+ else
+ return SMTLibNamer.QuoteId("T@" + s);
+ }
+ }
+
+ public static string ExtractBuiltin(Function f)
+ {
+ Contract.Requires(f != null);
+ string retVal = null;
+ retVal = f.FindStringAttribute("bvbuiltin");
+
+ // It used to be "sign_extend 12" in Simplify, and is "(_ sign_extend 12)" with SMT
+ if (retVal != null && (retVal.StartsWith("sign_extend ") || retVal.StartsWith("zero_extend ")))
+ return "(_ " + retVal + ")";
+
+ if (retVal == null) {
+ retVal = f.FindStringAttribute("builtin");
+ }
+
+ if (retVal != null && !CommandLineOptions.Clo.UseArrayTheory && SMTLibOpLineariser.ArrayOps.Contains(retVal))
+ {
+ retVal = null;
+ }
+
+ return retVal;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprLiteral node, LineariserOptions options)
+ {
+ if (node == VCExpressionGenerator.True)
+ wr.Write("true");
+ else if (node == VCExpressionGenerator.False)
+ wr.Write("false");
+ else if (node is VCExprIntLit) {
+ BigNum lit = ((VCExprIntLit)node).Val;
+ if (lit.IsNegative)
+ // In SMT2 "-42" is an identifier (SMT2, Sect. 3.2 "Symbols")
+ wr.Write("(- 0 {0})", lit.Abs);
+ else
+ wr.Write(lit);
+ }
+ else if (node is VCExprRealLit) {
+ BigDec lit = ((VCExprRealLit)node).Val;
+ if (lit.IsNegative)
+ // In SMT2 "-42" is an identifier (SMT2, Sect. 3.2 "Symbols")
+ wr.Write("(- 0.0 {0})", lit.Abs.ToDecimalString());
+ else
+ wr.Write(lit.ToDecimalString());
+ }
+ else if (node is VCExprFloatLit)
+ {
+ BigFloat lit = ((VCExprFloatLit)node).Val;
+ wr.Write("(" + lit.ToBVString() + ")");
+ }
+ else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ return true;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprNAry node, LineariserOptions options)
+ {
+ VCExprOp op = node.Op;
+ Contract.Assert(op != null);
+
+ var booleanOps = new HashSet<VCExprOp>();
+ booleanOps.Add(VCExpressionGenerator.NotOp);
+ booleanOps.Add(VCExpressionGenerator.ImpliesOp);
+ booleanOps.Add(VCExpressionGenerator.AndOp);
+ booleanOps.Add(VCExpressionGenerator.OrOp);
+ if (booleanOps.Contains(op))
+ {
+ Stack<VCExpr> exprs = new Stack<VCExpr>();
+ exprs.Push(node);
+ while (exprs.Count > 0)
+ {
+ VCExpr expr = exprs.Pop();
+ if (expr == null)
+ {
+ wr.Write(")");
+ continue;
+ }
+ wr.Write(" ");
+ VCExprNAry naryExpr = expr as VCExprNAry;
+ if (naryExpr == null || !booleanOps.Contains(naryExpr.Op))
+ {
+ Linearise(expr, options);
+ continue;
+ }
+ else if (naryExpr.Op.Equals(VCExpressionGenerator.NotOp))
+ {
+ wr.Write("(not");
+ }
+ else if (naryExpr.Op.Equals(VCExpressionGenerator.ImpliesOp))
+ {
+ wr.Write("(=>");
+ }
+ else if (naryExpr.Op.Equals(VCExpressionGenerator.AndOp))
+ {
+ wr.Write("(and");
+ }
+ else
+ {
+ System.Diagnostics.Debug.Assert(naryExpr.Op.Equals(VCExpressionGenerator.OrOp));
+ wr.Write("(or");
+ }
+ exprs.Push(null);
+ for (int i = naryExpr.Arity - 1; i >= 0; i--)
+ {
+ exprs.Push(naryExpr[i]);
+ }
+ }
+ return true;
+ }
+ if (OptimizationRequests != null
+ && (node.Op.Equals(VCExpressionGenerator.MinimizeOp) || node.Op.Equals(VCExpressionGenerator.MaximizeOp)))
+ {
+ string optOp = node.Op.Equals(VCExpressionGenerator.MinimizeOp) ? "minimize" : "maximize";
+ OptimizationRequests.Add(string.Format("({0} {1})", optOp, ToString(node[0], Namer, ProverOptions, NamedAssumes)));
+ Linearise(node[1], options);
+ return true;
+ }
+ if (node.Op is VCExprSoftOp)
+ {
+ Linearise(node[1], options);
+ return true;
+ }
+ if (node.Op.Equals(VCExpressionGenerator.NamedAssumeOp))
+ {
+ var exprVar = node[0] as VCExprVar;
+ NamedAssumes.Add(exprVar);
+ Linearise(node[1], options);
+ return true;
+ }
+ return node.Accept<bool, LineariserOptions/*!*/>(OpLineariser, options);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprVar node, LineariserOptions options)
+ {
+ wr.Write(Namer.GetQuotedName(node, node.Name));
+ return true;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprQuantifier node, LineariserOptions options)
+ {
+ Contract.Assert(node.TypeParameters.Count == 0);
+
+ UnderQuantifier++;
+ Namer.PushScope(); try {
+
+ string kind = node.Quan == Quantifier.ALL ? "forall" : "exists";
+ wr.Write("({0} (", kind);
+
+ for (int i = 0; i < node.BoundVars.Count; i++) {
+ VCExprVar var = node.BoundVars[i];
+ Contract.Assert(var != null);
+ string printedName = Namer.GetQuotedLocalName(var, var.Name);
+ Contract.Assert(printedName != null);
+ wr.Write("({0} {1}) ", printedName, TypeToString(var.Type));
+ }
+
+ wr.Write(") ");
+
+ VCQuantifierInfos infos = node.Infos;
+ var weight = QKeyValue.FindIntAttribute(infos.attributes, "weight", 1);
+ if (!ProverOptions.UseWeights)
+ weight = 1;
+ var hasAttrs = node.Triggers.Count > 0 || infos.qid != null || weight != 1 || infos.uniqueId != -1;
+
+ if (hasAttrs)
+ wr.Write("(! ");
+
+ Linearise(node.Body, options);
+
+ if (hasAttrs) {
+ wr.Write("\n");
+ if (infos.qid != null)
+ wr.Write(" :qid {0}\n", SMTLibNamer.QuoteId(infos.qid));
+ if (weight != 1)
+ wr.Write(" :weight {0}\n", weight);
+ if (infos.uniqueId != -1)
+ wr.Write(" :skolemid |{0}|\n", infos.uniqueId);
+ WriteTriggers(node.Triggers, options);
+
+ wr.Write(")");
+ }
+
+ wr.Write(")");
+
+ return true;
+
+ } finally {
+ UnderQuantifier--;
+ Namer.PopScope();
+ }
+ }
+
+ private void WriteTriggers(List<VCTrigger/*!>!*/> triggers, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(triggers != null);
+ // first, count how many neg/pos triggers there are
+ int negTriggers = 0;
+ int posTriggers = 0;
+ foreach (VCTrigger vcTrig in triggers) {
+ Contract.Assert(vcTrig != null);
+ if (vcTrig.Pos) {
+ posTriggers++;
+ } else {
+ negTriggers++;
+ }
+ }
+
+ if (posTriggers > 0) {
+ foreach (VCTrigger vcTrig in triggers) {
+ Contract.Assert(vcTrig != null);
+ if (vcTrig.Pos) {
+ wr.Write(" :pattern (");
+ foreach (VCExpr e in vcTrig.Exprs) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ var subPat = e;
+ var nary = e as VCExprNAry;
+ if (nary != null && (nary.Op == VCExpressionGenerator.NeqOp || nary.Op == VCExpressionGenerator.EqOp)) {
+ if (nary[0] is VCExprLiteral)
+ subPat = nary[1];
+ else if (nary[1] is VCExprLiteral)
+ subPat = nary[0];
+ }
+ Linearise(subPat, options);
+ }
+ wr.Write(")\n");
+ }
+ }
+ } else if (negTriggers > 0) {
+ // if also positive triggers are given, the SMT solver (at least Z3)
+ // will ignore the negative patterns and output a warning. Therefore
+ // we never specify both negative and positive triggers
+ foreach (VCTrigger vcTrig in triggers) {
+ Contract.Assert(vcTrig != null);
+ if (!vcTrig.Pos) {
+ wr.Write(" :no-pattern ");
+ Contract.Assert(vcTrig.Exprs.Count == 1);
+ Linearise(vcTrig.Exprs[0], options);
+ wr.Write("\n");
+ }
+ }
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprLet node, LineariserOptions options)
+ {
+ Namer.PushScope();
+ try {
+
+ foreach (VCExprLetBinding b in node) {
+ wr.Write("(let (");
+ Contract.Assert(b != null);
+ wr.Write("({0} ", Namer.GetQuotedName(b.V, b.V.Name));
+ Linearise(b.E, options);
+ wr.Write("))\n");
+ }
+ Linearise(node.Body, options);
+ foreach (VCExprLetBinding b in node)
+ wr.Write(")");
+ return true;
+ } finally {
+ Namer.PopScope();
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ // Lineariser for operator terms. The result (bool) is currently not used for anything
+ internal class SMTLibOpLineariser : IVCExprOpVisitor<bool, LineariserOptions/*!*/>
+ {
+ private readonly SMTLibExprLineariser ExprLineariser;
+ private readonly TextWriter wr;
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(wr != null);
+ Contract.Invariant(ExprLineariser != null);
+ }
+
+
+ public SMTLibOpLineariser(SMTLibExprLineariser ExprLineariser, TextWriter wr)
+ {
+ Contract.Requires(ExprLineariser != null);
+ Contract.Requires(wr != null);
+ this.ExprLineariser = ExprLineariser;
+ this.wr = wr;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+ private void WriteApplication(string opName, IEnumerable<VCExpr>/*!>!*/ args, LineariserOptions options)
+ {
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Requires(options != null);
+ Contract.Assert(opName != null);
+
+ bool hasArgs = false;
+ foreach (VCExpr e in args) {
+ Contract.Assert(e != null);
+ if (!hasArgs)
+ wr.Write("({0}", opName);
+ wr.Write(" ");
+ ExprLineariser.Linearise(e, options);
+ hasArgs = true;
+ }
+
+ if (hasArgs)
+ wr.Write(")");
+ else
+ wr.Write("{0}", opName);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public bool VisitNotOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("not", node, options); // arguments can be both terms and formulas
+ return true;
+ }
+
+ private bool PrintEq(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(node != null);
+ Contract.Requires(options != null);
+
+ WriteApplication("=", node, options);
+
+ return true;
+ }
+
+ public bool VisitEqOp(VCExprNAry node, LineariserOptions options)
+ {
+ return PrintEq(node, options);
+ }
+
+ public bool VisitNeqOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ wr.Write("(not ");
+ PrintEq(node, options);
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitAndOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("and", node, options);
+ return true;
+ }
+
+ public bool VisitOrOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("or", node, options);
+ return true;
+ }
+
+ public bool VisitImpliesOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("=>", node, options);
+ return true;
+ }
+
+ public bool VisitIfThenElseOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("ite", node, options);
+ return true;
+ }
+
+ public bool VisitCustomOp(VCExprNAry node, LineariserOptions options)
+ {
+ VCExprCustomOp op = (VCExprCustomOp)node.Op;
+ if (!ExprLineariser.ProverOptions.UseTickleBool && op.Name == "tickleBool")
+ ExprLineariser.Linearise(VCExpressionGenerator.True, options);
+ else
+ WriteApplication(op.Name, node, options);
+ return true;
+ }
+
+ public bool VisitDistinctOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ if (node.Length < 2) {
+ ExprLineariser.Linearise(VCExpressionGenerator.True, options);
+ } else {
+ var groupings = node.GroupBy(e => e.Type).Where(g => g.Count() > 1).ToArray();
+ if (groupings.Length == 0) {
+ ExprLineariser.Linearise(VCExpressionGenerator.True, options);
+ } else {
+ if (groupings.Length > 1)
+ wr.Write("(and ");
+
+ foreach (var g in groupings) {
+ wr.Write("(distinct");
+ foreach (VCExpr e in g) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ ExprLineariser.Linearise(e, options);
+ }
+ wr.Write(")");
+ }
+
+ if (groupings.Length > 1)
+ wr.Write(")");
+
+ wr.Write("\n");
+ }
+ }
+
+ return true;
+ }
+
+ public bool VisitLabelOp(VCExprNAry node, LineariserOptions options)
+ {
+ if (ExprLineariser.UnderQuantifier > 0 && !options.LabelsBelowQuantifiers) {
+ ExprLineariser.Linearise(node[0], options);
+ return true;
+ }
+
+ var op = (VCExprLabelOp)node.Op;
+
+ if (CommandLineOptions.Clo.UseLabels)
+ {
+ // Z3 extension
+ //wr.Write("({0} {1} ", op.pos ? "lblpos" : "lblneg", SMTLibNamer.QuoteId(op.label));
+ wr.Write("(! ");
+ }
+
+ if(!options.LabelsBelowQuantifiers)
+ wr.Write("({0} {1} ", op.pos ? "and" : "or", SMTLibNamer.QuoteId(SMTLibNamer.LabelVar(op.label)));
+
+ ExprLineariser.Linearise(node[0], options);
+
+
+ if (!options.LabelsBelowQuantifiers)
+ wr.Write(")");
+
+ if (CommandLineOptions.Clo.UseLabels)
+ wr.Write(" :{0} {1})", op.pos ? "lblpos" : "lblneg", SMTLibNamer.QuoteId(op.label));
+
+ return true;
+ }
+
+ public bool VisitSelectOp(VCExprNAry node, LineariserOptions options)
+ {
+ var name = SimplifyLikeExprLineariser.SelectOpName(node);
+ name = ExprLineariser.Namer.GetQuotedName(name, name);
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ name = "select";
+ WriteApplication(name, node, options);
+ return true;
+ }
+
+ public bool VisitStoreOp(VCExprNAry node, LineariserOptions options)
+ {
+ var name = SimplifyLikeExprLineariser.StoreOpName(node);
+ name = ExprLineariser.Namer.GetQuotedName(name, name);
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ name = "store";
+ WriteApplication(name, node, options);
+ return true;
+ }
+
+ public bool VisitFloatAddOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.add RNE", node, options);
+ return true;
+ }
+
+ public bool VisitFloatSubOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.sub RNE", node, options);
+ return true;
+ }
+
+ public bool VisitFloatMulOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.mul RNE", node, options);
+ return true;
+ }
+
+ public bool VisitFloatDivOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.div RNE", node, options);
+ return true;
+ }
+
+ public bool VisitFloatRemOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.rem RNE", node, options);
+ return true;
+ }
+
+ public bool VisitFloatMinOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.min", node, options);
+ return true;
+ }
+
+ public bool VisitFloatMaxOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.max", node, options);
+ return true;
+ }
+
+ public bool VisitFloatLeqOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.leq", node, options);
+ return true;
+ }
+
+ public bool VisitFloatLtOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.lt", node, options);
+ return true;
+ }
+
+ public bool VisitFloatGeqOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.geq", node, options);
+ return true;
+ }
+
+ public bool VisitFloatGtOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.gt", node, options);
+ return true;
+ }
+
+ public bool VisitFloatEqOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("fp.eq", node, options);
+ return true;
+ }
+
+ static char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+ public bool VisitBvOp(VCExprNAry node, LineariserOptions options)
+ {
+ var lit = (VCExprIntLit)node[0];
+ var bytes = lit.Val.ToByteArray();
+ if (node.Type.BvBits % 8 == 0) {
+ wr.Write("#x");
+ for (var pos = node.Type.BvBits / 8 - 1; pos >= 0; pos--) {
+ var k = pos < bytes.Length ? bytes[pos] : (byte)0;
+ wr.Write(hex[k >> 4]);
+ wr.Write(hex[k & 0xf]);
+ }
+ } else {
+ wr.Write("#b");
+ for (var pos = node.Type.BvBits - 1; pos >= 0; pos--) {
+ var i = pos >> 3;
+ var k = i < bytes.Length ? bytes[i] : (byte)0;
+ wr.Write((k & (1 << (pos & 7))) == 0 ? '0' : '1');
+ }
+ }
+ return true;
+ }
+
+ public bool VisitBvExtractOp(VCExprNAry node, LineariserOptions options)
+ {
+ var op = (VCExprBvExtractOp)node.Op;
+ wr.Write("((_ extract {0} {1}) ", op.End - 1, op.Start);
+ ExprLineariser.Linearise(node[0], options);
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitBvConcatOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("concat", node, options);
+ return true;
+ }
+
+ public bool VisitAddOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("+", node, options);
+ return true;
+ }
+
+ public bool VisitSubOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("-", node, options);
+ return true;
+ }
+
+ public bool VisitMulOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("*", node, options);
+ return true;
+ }
+
+ public bool VisitDivOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("div", node, options);
+ return true;
+ }
+
+ public bool VisitModOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("mod", node, options);
+ return true;
+ }
+
+ public bool VisitRealDivOp(VCExprNAry node, LineariserOptions options) {
+ WriteApplication("/", node, options);
+ return true;
+ }
+
+ public bool VisitPowOp(VCExprNAry node, LineariserOptions options) {
+ WriteApplication("real_pow", node, options);
+ return true;
+ }
+
+ public bool VisitLtOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("<", node, options);
+ return true;
+ }
+
+ public bool VisitLeOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("<=", node, options);
+ return true;
+ }
+
+ public bool VisitGtOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication(">", node, options);
+ return true;
+ }
+
+ public bool VisitGeOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication(">=", node, options);
+ return true;
+ }
+
+ public bool VisitSubtypeOp(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("UOrdering2", node, options);
+ return true;
+ }
+
+ public bool VisitSubtype3Op(VCExprNAry node, LineariserOptions options)
+ {
+ WriteApplication("UOrdering3", node, options);
+ return true;
+ }
+
+ public bool VisitToIntOp(VCExprNAry node, LineariserOptions options) {
+ WriteApplication("to_int", node, options);
+ return true;
+ }
+
+ public bool VisitToRealOp(VCExprNAry node, LineariserOptions options) {
+ WriteApplication("to_real", node, options);
+ return true;
+ }
+
+ private string ExtractDatatype(Function func) {
+ if (func is DatatypeSelector) {
+ DatatypeSelector selector = (DatatypeSelector) func;
+ Variable v = selector.constructor.InParams[selector.index];
+ return ExprLineariser.Namer.GetQuotedName(v, v.Name + "#" + selector.constructor.Name);
+ }
+ else if (func is DatatypeMembership) {
+ DatatypeMembership membership = (DatatypeMembership)func;
+ return ExprLineariser.Namer.GetQuotedName(membership, "is-" + membership.constructor.Name);
+ }
+ else {
+ return null;
+ }
+ }
+
+ public bool VisitBoogieFunctionOp(VCExprNAry node, LineariserOptions options) {
+ VCExprBoogieFunctionOp op = (VCExprBoogieFunctionOp)node.Op;
+ Contract.Assert(op != null);
+ string printedName;
+
+ var builtin = ExtractBuiltin(op.Func);
+ var datatype = ExtractDatatype(op.Func);
+ if (builtin != null)
+ {
+ printedName = CheckMapApply(builtin, node);
+ }
+ else if (datatype != null)
+ {
+ printedName = datatype;
+ }
+ else
+ {
+ printedName = ExprLineariser.Namer.GetQuotedName(op.Func, op.Func.Name);
+ }
+ Contract.Assert(printedName != null);
+
+ WriteApplication(printedName, node, options);
+
+ return true;
+ }
+
+ private static Type ResultType(Type type) {
+ MapType mapType = type as MapType;
+ if (mapType != null) {
+ return ResultType(mapType.Result);
+ }
+ else {
+ return type;
+ }
+ }
+
+ public static HashSet<string> ArrayOps = new HashSet<string>(new string[] {
+ "MapConst", "MapAdd", "MapSub", "MapMul", "MapDiv", "MapMod", "MapEq", "MapIff", "MapGt", "MapGe", "MapLt", "MapLe", "MapOr", "MapAnd", "MapNot", "MapImp", "MapIte" });
+
+ private static string CheckMapApply(string name, VCExprNAry node) {
+ if (name == "MapConst") {
+ Type type = node.Type;
+ string s = TypeToString(type);
+ return "(as const " + s + ")";
+ }
+ else if (name == "MapAdd") {
+ return "(_ map (+ (Int Int) Int))";
+ }
+ else if (name == "MapSub") {
+ return "(_ map (- (Int Int) Int))";
+ }
+ else if (name == "MapMul") {
+ return "(_ map (* (Int Int) Int))";
+ }
+ else if (name == "MapDiv") {
+ return "(_ map (div (Int Int) Int))";
+ }
+ else if (name == "MapMod") {
+ return "(_ map (mod (Int Int) Int))";
+ }
+ else if (name == "MapEq") {
+ Type type = ResultType(node[0].Type);
+ string s = TypeToString(type);
+ return "(_ map (= (" + s + " " + s + ") Bool))";
+ }
+ else if (name == "MapIff") {
+ return "(_ map (= (Bool Bool) Bool))";
+ }
+ else if (name == "MapGt") {
+ return "(_ map (> (Int Int) Int))";
+ }
+ else if (name == "MapGe") {
+ return "(_ map (>= (Int Int) Int))";
+ }
+ else if (name == "MapLt") {
+ return "(_ map (< (Int Int) Int))";
+ }
+ else if (name == "MapLe") {
+ return "(_ map (<= (Int Int) Int))";
+ }
+ else if (name == "MapOr") {
+ return "(_ map or)";
+ }
+ else if (name == "MapAnd") {
+ return "(_ map and)";
+ }
+ else if (name == "MapNot") {
+ return "(_ map not)";
+ }
+ else if (name == "MapImp") {
+ return "(_ map =>)";
+ }
+ else if (name == "MapIte") {
+ Type type = ResultType(node.Type);
+ string s = TypeToString(type);
+ return "(_ map (ite (Bool " + s + " " + s + ") " + s + "))";
+ }
+ else {
+ return name;
+ }
+ }
+ }
+ }
+
+}
diff --git a/Source/Provers/SMTLib/SMTLibNamer.cs b/Source/Provers/SMTLib/SMTLibNamer.cs
index 3ef2039b..f1179159 100644
--- a/Source/Provers/SMTLib/SMTLibNamer.cs
+++ b/Source/Provers/SMTLib/SMTLibNamer.cs
@@ -1,142 +1,147 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie.SMTLib
-{
- public class SMTLibNamer : UniqueNamer
- {
- // The following Boogie ID characters are not SMT ID characters: `'\#
- const string idCharacters = "~!@$%^&*_-+=<>.?/";
-
-
- static string[] reservedSmtWordsList =
- { // Basic symbols:
- "", "!", "_", "as", "DECIMAL", "exists", "forall", "let", "NUMERAL", "par", "STRING",
- // Commands:
- "assert", "check-sat", "declare-sort", "declare-fun", "define-sort,", "define-fun", "exit",
- "get-assertions", "get-assignment", "get-info", "get-option,", "get-proof", "get-unsat-core",
- "get-value", "pop", "push", "set-logic", "set-info", "set-option",
- // Core theory:
- "and", "or", "not", "iff", "true", "false", "xor", "distinct", "ite", "=", "Bool",
- "=>", // implies (sic!)
- // Integers and reals
- "Int", "Real", "*", "/", "-", "~", "+", "<", "<=", ">", ">=", "div", "mod", "rem",
- "^", "sin", "cos", "tan", "asin", "acos", "atan", "sinh", "cosh", "tanh", "asinh", "acosh", "atanh", "pi", "euler",
- "to_real", "to_int", "is_int",
- // Bitvectors
- "extract", "concat",
- "bvnot", "bvneg", "bvand", "bvor", "bvadd", "bvmul", "bvudiv", "bvurem", "bvshl", "bvlshr", "bvult",
- // arrays
- "store", "select", "const", "default", "map", "union", "intersect", "difference", "complement",
- "subset", "array-ext", "as-array", "Array",
- // Z3 (and not only?) extensions to bitvectors
- "bit1", "bit0", "bvsub", "bvsdiv", "bvsrem", "bvsmod", "bvsdiv0", "bvudiv0", "bvsrem0", "bvurem0",
- "bvsmod0", "bvsdiv_i", "bvudiv_i", "bvsrem_i", "bvurem_i", "bvumod_i", "bvule", "bvsle", "bvuge",
- "bvsge", "bvslt", "bvugt", "bvsgt", "bvxor", "bvnand", "bvnor", "bvxnor", "sign_extend", "zero_extend",
- "repeat", "bvredor", "bvredand", "bvcomp", "bvumul_noovfl", "bvsmul_noovfl", "bvsmul_noudfl", "bvashr",
- "rotate_left", "rotate_right", "ext_rotate_left", "ext_rotate_right", "int2bv", "bv2int", "mkbv",
- // floating point (FIXME: Legacy, remove this)
- "plusInfinity", "minusInfinity",
- "+", "-", "/", "*", "==", "<", ">", "<=", ">=",
- "abs", "remainder", "fusedMA", "squareRoot", "roundToIntegral",
- "isZero", "isNZero", "isPZero", "isSignMinus", "min", "max", "asFloat",
- // SMT v1 stuff (FIXME: Legacy, remove this)
- "flet", "implies", "!=", "if_then_else",
- // Z3 extensions
- "lblneg", "lblpos", "lbl-lit",
- "if", "&&", "||", "equals", "equiv", "bool",
- // Boogie-defined
- "real_pow", "UOrdering2", "UOrdering3",
- // Floating point (final draft SMTLIB-v2.5)
- "NaN",
- "roundNearestTiesToEven", "roundNearestTiesToAway", "roundTowardPositive", "roundTowardNegative", "roundTowardZero",
- "RNE", "RNA", "RTP", "RTN", "RTZ",
- "fp.abs", "fp.neg", "fp.add", "fp.sub", "fp.mul", "fp.div", "fp.fma", "fp.sqrt", "fp.rem", "fp.roundToIntegral",
- "fp.min", "fp.max", "fp.leq", "fp.lt", "fp.geq", "fp.gt", "fp.eq",
- "fp.isNormal", "fp.isSubnormal", "fp.isZero", "fp.isInfinite", "fp.isNaN", "fp.isNegative", "fp.isPositive",
- "fp", "fp.to_ubv", "fp.to_sbv", "to_fp",
- };
-
- static HashSet<string> reservedSmtWords;
- static bool[] validIdChar;
- static bool symbolListsInitilized;
-
- static void InitSymbolLists()
- {
- lock (reservedSmtWordsList) {
- // don't move out, c.f. http://en.wikipedia.org/wiki/Double-checked_locking
- if (symbolListsInitilized)
- return;
- reservedSmtWords = new HashSet<string>();
- foreach (var w in reservedSmtWordsList)
- reservedSmtWords.Add(w);
- validIdChar = new bool[255];
- for (int i = 0; i < validIdChar.Length; ++i)
- validIdChar[i] = char.IsLetterOrDigit((char)i) || idCharacters.IndexOf((char)i) >= 0;
- symbolListsInitilized = true;
- }
- }
-
- static string AddQuotes(string s)
- {
- var allGood = true;
-
- foreach (char ch in s) {
- var c = (int)ch;
- if (c >= validIdChar.Length || !validIdChar[c]) {
- allGood = false;
- break;
- }
- }
-
- if (allGood)
- return s;
-
- return "|" + s + "|";
- }
-
- static string NonKeyword(string s)
- {
- if (reservedSmtWords.Contains(s) || char.IsDigit(s[0]))
- s = "q@" + s;
-
- // | and \ are illegal even in quoted identifiers
- if (s.IndexOf('|') >= 0)
- s = s.Replace("|", "_");
-
- if (s.IndexOf('\\') >= 0)
- s = s.Replace("\\", "_");
-
- return s;
- }
-
- public static string LabelVar(string s)
- {
- return "%lbl%" + s;
- }
-
- public static string QuoteId(string s)
- {
- return AddQuotes(NonKeyword(s));
- }
-
- public override string GetQuotedLocalName(object thingie, string inherentName)
- {
- return AddQuotes(base.GetLocalName(thingie, NonKeyword(inherentName)));
- }
-
- public override string GetQuotedName(object thingie, string inherentName)
- {
- return AddQuotes(base.GetName(thingie, NonKeyword(inherentName)));
- }
-
- public SMTLibNamer()
- {
- this.Spacer = "@@";
- InitSymbolLists();
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie.SMTLib
+{
+ public class SMTLibNamer : UniqueNamer
+ {
+ // The following Boogie ID characters are not SMT ID characters: `'\#
+ const string idCharacters = "~!@$%^&*_-+=<>.?/";
+
+
+ static string[] reservedSmtWordsList =
+ { // Basic symbols:
+ "", "!", "_", "as", "DECIMAL", "exists", "forall", "let", "NUMERAL", "par", "STRING",
+ // Commands:
+ "assert", "check-sat", "declare-sort", "declare-fun", "define-sort,", "define-fun", "exit",
+ "get-assertions", "get-assignment", "get-info", "get-option,", "get-proof", "get-unsat-core",
+ "get-value", "pop", "push", "set-logic", "set-info", "set-option",
+ // Core theory:
+ "and", "or", "not", "iff", "true", "false", "xor", "distinct", "ite", "=", "Bool",
+ "=>", // implies (sic!)
+ // Integers and reals
+ "Int", "Real", "*", "/", "-", "~", "+", "<", "<=", ">", ">=", "div", "mod", "rem",
+ "^", "sin", "cos", "tan", "asin", "acos", "atan", "sinh", "cosh", "tanh", "asinh", "acosh", "atanh", "pi", "euler",
+ "to_real", "to_int", "is_int",
+ // Bitvectors
+ "extract", "concat",
+ "bvnot", "bvneg", "bvand", "bvor", "bvadd", "bvmul", "bvudiv", "bvurem", "bvshl", "bvlshr", "bvult",
+ // arrays
+ "store", "select", "const", "default", "map", "union", "intersect", "difference", "complement",
+ "subset", "array-ext", "as-array", "Array",
+ // Z3 (and not only?) extensions to bitvectors
+ "bit1", "bit0", "bvsub", "bvsdiv", "bvsrem", "bvsmod", "bvsdiv0", "bvudiv0", "bvsrem0", "bvurem0",
+ "bvsmod0", "bvsdiv_i", "bvudiv_i", "bvsrem_i", "bvurem_i", "bvumod_i", "bvule", "bvsle", "bvuge",
+ "bvsge", "bvslt", "bvugt", "bvsgt", "bvxor", "bvnand", "bvnor", "bvxnor", "sign_extend", "zero_extend",
+ "repeat", "bvredor", "bvredand", "bvcomp", "bvumul_noovfl", "bvsmul_noovfl", "bvsmul_noudfl", "bvashr",
+ "rotate_left", "rotate_right", "ext_rotate_left", "ext_rotate_right", "int2bv", "bv2int", "mkbv",
+ // floating point (FIXME: Legacy, remove this)
+ "plusInfinity", "minusInfinity",
+ "+", "-", "/", "*", "==", "<", ">", "<=", ">=",
+ "abs", "remainder", "fusedMA", "squareRoot", "roundToIntegral",
+ "isZero", "isNZero", "isPZero", "isSignMinus", "min", "max", "asFloat",
+ // SMT v1 stuff (FIXME: Legacy, remove this)
+ "flet", "implies", "!=", "if_then_else",
+ // Z3 extensions
+ "lblneg", "lblpos", "lbl-lit",
+ "if", "&&", "||", "equals", "equiv", "bool", "minimize", "maximize",
+ // Boogie-defined
+ "real_pow", "UOrdering2", "UOrdering3",
+ // Floating point (final draft SMTLIB-v2.5)
+ "NaN",
+ "roundNearestTiesToEven", "roundNearestTiesToAway", "roundTowardPositive", "roundTowardNegative", "roundTowardZero",
+ "RNE", "RNA", "RTP", "RTN", "RTZ",
+ "fp.abs", "fp.neg", "fp.add", "fp.sub", "fp.mul", "fp.div", "fp.fma", "fp.sqrt", "fp.rem", "fp.roundToIntegral",
+ "fp.min", "fp.max", "fp.leq", "fp.lt", "fp.geq", "fp.gt", "fp.eq",
+ "fp.isNormal", "fp.isSubnormal", "fp.isZero", "fp.isInfinite", "fp.isNaN", "fp.isNegative", "fp.isPositive",
+ "fp", "fp.to_ubv", "fp.to_sbv", "to_fp",
+ };
+
+ static HashSet<string> reservedSmtWords;
+ static bool[] validIdChar;
+ static bool symbolListsInitilized;
+
+ static void InitSymbolLists()
+ {
+ lock (reservedSmtWordsList) {
+ // don't move out, c.f. http://en.wikipedia.org/wiki/Double-checked_locking
+ if (symbolListsInitilized)
+ return;
+ reservedSmtWords = new HashSet<string>();
+ foreach (var w in reservedSmtWordsList)
+ reservedSmtWords.Add(w);
+ validIdChar = new bool[255];
+ for (int i = 0; i < validIdChar.Length; ++i)
+ validIdChar[i] = char.IsLetterOrDigit((char)i) || idCharacters.IndexOf((char)i) >= 0;
+ symbolListsInitilized = true;
+ }
+ }
+
+ static string AddQuotes(string s)
+ {
+ var allGood = true;
+
+ foreach (char ch in s) {
+ var c = (int)ch;
+ if (c >= validIdChar.Length || !validIdChar[c]) {
+ allGood = false;
+ break;
+ }
+ }
+
+ if (allGood)
+ return s;
+
+ return "|" + s + "|";
+ }
+
+ static string FilterReserved(string s)
+ {
+ // Note symbols starting with ``.`` and ``@`` are reserved for internal
+ // solver use in SMT-LIBv2 however if we check for the first character
+ // being ``@`` then Boogie's tests fail spectacularly because they are
+ // used for labels so we don't check for it here. It hopefully won't matter
+ // in practice because ``@`` cannot be legally used in Boogie identifiers.
+ if (reservedSmtWords.Contains(s) || char.IsDigit(s[0]) || s[0] == '.')
+ s = "q@" + s;
+
+ // | and \ are illegal even in quoted identifiers
+ if (s.IndexOf('|') >= 0)
+ s = s.Replace("|", "_");
+
+ if (s.IndexOf('\\') >= 0)
+ s = s.Replace("\\", "_");
+
+ return s;
+ }
+
+ public static string LabelVar(string s)
+ {
+ return "%lbl%" + s;
+ }
+
+ public static string QuoteId(string s)
+ {
+ return AddQuotes(FilterReserved(s));
+ }
+
+ public override string GetQuotedLocalName(object thingie, string inherentName)
+ {
+ return AddQuotes(base.GetLocalName(thingie, FilterReserved(inherentName)));
+ }
+
+ public override string GetQuotedName(object thingie, string inherentName)
+ {
+ return AddQuotes(base.GetName(thingie, FilterReserved(inherentName)));
+ }
+
+ public SMTLibNamer()
+ {
+ this.Spacer = "@@";
+ InitSymbolLists();
+ }
+ }
+}
diff --git a/Source/Provers/SMTLib/SMTLibProcess.cs b/Source/Provers/SMTLib/SMTLibProcess.cs
index bc94e253..a2fe4d4e 100644
--- a/Source/Provers/SMTLib/SMTLibProcess.cs
+++ b/Source/Provers/SMTLib/SMTLibProcess.cs
@@ -1,389 +1,398 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics;
-using System.IO;
-using System.Threading;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie.SMTLib
-{
- public class SMTLibProcess
- {
- readonly Process prover;
- readonly Inspector inspector;
- readonly SMTLibProverOptions options;
- readonly Queue<string> proverOutput = new Queue<string>();
- readonly Queue<string> proverErrors = new Queue<string>();
- readonly TextWriter toProver;
- readonly int smtProcessId;
- static int smtProcessIdSeq = 0;
- ConsoleCancelEventHandler cancelEvent;
- public bool NeedsRestart;
-
- public static ProcessStartInfo ComputerProcessStartInfo(string executable, string options)
- {
- return new ProcessStartInfo(executable, options)
- {
- CreateNoWindow = true,
- UseShellExecute = false,
- RedirectStandardInput = true,
- RedirectStandardOutput = true,
- RedirectStandardError = true
- };
- }
-
- public SMTLibProcess(ProcessStartInfo psi, SMTLibProverOptions options)
- {
- this.options = options;
- this.smtProcessId = smtProcessIdSeq++;
-
- if (options.Inspector != null) {
- this.inspector = new Inspector(options);
- }
-
- foreach (var arg in options.SolverArguments)
- psi.Arguments += " " + arg;
-
- if (cancelEvent == null && CommandLineOptions.Clo.RunningBoogieFromCommandLine) {
- cancelEvent = new ConsoleCancelEventHandler(ControlCHandler);
- Console.CancelKeyPress += cancelEvent;
- }
-
- if (options.Verbosity >= 1) {
- Console.WriteLine("[SMT-{0}] Starting {1} {2}", smtProcessId, psi.FileName, psi.Arguments);
- }
-
-
- try {
- prover = new Process();
- prover.StartInfo = psi;
- prover.ErrorDataReceived += prover_ErrorDataReceived;
- prover.OutputDataReceived += prover_OutputDataReceived;
- prover.Start();
- toProver = prover.StandardInput;
- prover.BeginErrorReadLine();
- prover.BeginOutputReadLine();
- } catch (System.ComponentModel.Win32Exception e) {
- throw new ProverException(string.Format("Unable to start the process {0}: {1}", psi.FileName, e.Message));
- }
- }
-
- [NoDefaultContract] // important, since we have no idea what state the object might be in when this handler is invoked
- void ControlCHandler(object o, ConsoleCancelEventArgs a)
- {
- if (prover != null) {
- prover.Kill();
- }
- }
-
- public void Send(string cmd)
- {
- if (options.Verbosity >= 2) {
- var log = cmd;
- if (log.Length > 50)
- log = log.Substring(0, 50) + "...";
- log = log.Replace("\r", "").Replace("\n", " ");
- Console.WriteLine("[SMT-INP-{0}] {1}", smtProcessId, log);
- }
- //Console.WriteLine(cmd);
- toProver.WriteLine(cmd);
- }
-
- // this is less than perfect; (echo ...) would be better
- public void Ping()
- {
- Send("(get-info :name)");
- }
-
- public bool IsPong(SExpr sx)
- {
- return sx != null && sx.Name == ":name";
- }
-
- public void PingPong()
- {
- Ping();
- while (true) {
- var sx = GetProverResponse();
- if (sx == null) {
- this.NeedsRestart = true;
- HandleError("Prover died");
- return;
- }
-
- if (IsPong(sx))
- return;
- else
- HandleError("Invalid PING response from the prover: " + sx.ToString());
- }
- }
-
- internal Inspector Inspector
- {
- get { return inspector; }
- }
-
- public SExpr GetProverResponse()
- {
- toProver.Flush();
-
- while (true) {
- var exprs = ParseSExprs(true).ToArray();
- Contract.Assert(exprs.Length <= 1);
- if (exprs.Length == 0)
- return null;
- var resp = exprs[0];
- if (resp.Name == "error") {
- if (resp.Arguments.Length == 1 && resp.Arguments[0].IsId)
- HandleError(resp.Arguments[0].Name);
- else
- HandleError(resp.ToString());
- } else if (resp.Name == "progress") {
- if (inspector != null) {
- var sb = new StringBuilder();
- foreach (var a in resp.Arguments) {
- if (a.Name == "labels") {
- sb.Append("STATS LABELS");
- foreach (var x in a.Arguments)
- sb.Append(" ").Append(x.Name);
- } else if (a.Name.StartsWith(":")) {
- sb.Append("STATS NAMED_VALUES ").Append(a.Name);
- foreach (var x in a.Arguments)
- sb.Append(" ").Append(x.Name);
- } else {
- continue;
- }
- inspector.StatsLine(sb.ToString());
- sb.Clear();
- }
- }
- } else if (resp.Name == "unsupported") {
- // Skip -- this may be a benign "unsupported" from a previous command.
- // Of course, this is suboptimal. We should really be using
- // print-success to identify the errant command and determine whether
- // the response is benign.
- } else {
- return resp;
- }
- }
- }
-
- public static System.TimeSpan TotalUserTime = System.TimeSpan.Zero;
-
- public void Close()
- {
- TotalUserTime += prover.UserProcessorTime;
- try {
- prover.Kill();
- } catch {
- }
- DisposeProver();
- }
-
- public event Action<string> ErrorHandler;
- int errorCnt;
-
- private void HandleError(string msg)
- {
- if (options.Verbosity >= 2)
- Console.WriteLine("[SMT-ERR-{0}] Handling error: {1}", smtProcessId, msg);
- if (ErrorHandler != null)
- ErrorHandler(msg);
- }
-
- #region SExpr parsing
- int linePos;
- string currLine;
- char SkipWs()
- {
- while (true) {
- if (currLine == null) {
- currLine = ReadProver();
- if (currLine == null)
- return '\0';
- }
-
-
- while (linePos < currLine.Length && char.IsWhiteSpace(currLine[linePos]))
- linePos++;
-
- if (linePos < currLine.Length && currLine[linePos] != ';')
- return currLine[linePos];
- else {
- currLine = null;
- linePos = 0;
- }
- }
- }
-
- void Shift()
- {
- linePos++;
- }
-
- string ParseId()
- {
- var sb = new StringBuilder();
-
- var beg = SkipWs();
-
- var quoted = beg == '"' || beg == '|';
- if (quoted)
- Shift();
- while (true) {
- if (linePos >= currLine.Length) {
- if (quoted) {
- sb.Append("\n");
- currLine = ReadProver();
- linePos = 0;
- if (currLine == null)
- break;
- } else break;
- }
-
- var c = currLine[linePos++];
- if (quoted && c == beg)
- break;
- if (!quoted && (char.IsWhiteSpace(c) || c == '(' || c == ')')) {
- linePos--;
- break;
- }
- if (quoted && c == '\\' && linePos < currLine.Length && currLine[linePos] == '"') {
- sb.Append('"');
- linePos++;
- continue;
- }
- sb.Append(c);
- }
-
- return sb.ToString();
- }
-
- void ParseError(string msg)
- {
- HandleError("Error parsing prover output: " + msg);
- }
-
- IEnumerable<SExpr> ParseSExprs(bool top)
- {
- while (true) {
- var c = SkipWs();
- if (c == '\0')
- break;
-
- if (c == ')') {
- if (top)
- ParseError("stray ')'");
- break;
- }
-
- string id;
-
- if (c == '(') {
- Shift();
- c = SkipWs();
- if (c == '\0') {
- ParseError("expecting something after '('");
- break;
- } else if (c == '(') {
- id = "";
- } else {
- id = ParseId();
- }
-
- var args = ParseSExprs(false).ToArray();
-
- c = SkipWs();
- if (c == ')') {
- Shift();
- } else {
- ParseError("unclosed '(" + id + "'");
- }
- yield return new SExpr(id, args);
- } else {
- id = ParseId();
- yield return new SExpr(id);
- }
-
- if (top) break;
- }
- }
- #endregion
-
- #region handling input from the prover
- string ReadProver()
- {
- string error = null;
- while (true) {
- if (error != null) {
- HandleError(error);
- errorCnt++;
- error = null;
- }
-
- lock (this) {
- while (proverOutput.Count == 0 && proverErrors.Count == 0 && !prover.HasExited) {
- Monitor.Wait(this, 100);
- }
-
- if (proverErrors.Count > 0) {
- error = proverErrors.Dequeue();
- continue;
- }
-
- if (proverOutput.Count > 0) {
- return proverOutput.Dequeue();
- }
-
- if (prover.HasExited) {
- DisposeProver();
- return null;
- }
- }
- }
- }
-
- void DisposeProver()
- {
- if (cancelEvent != null) {
- Console.CancelKeyPress -= cancelEvent;
- cancelEvent = null;
- }
- }
-
- void prover_OutputDataReceived(object sender, DataReceivedEventArgs e)
- {
- lock (this) {
- if (e.Data != null) {
- if (options.Verbosity >= 2 || (options.Verbosity >= 1 && !e.Data.StartsWith("(:name "))) {
- Console.WriteLine("[SMT-OUT-{0}] {1}", smtProcessId, e.Data);
- }
- proverOutput.Enqueue(e.Data);
- Monitor.Pulse(this);
- }
- }
- }
-
- void prover_ErrorDataReceived(object sender, DataReceivedEventArgs e)
- {
- lock (this) {
- if (e.Data != null) {
- if (options.Verbosity >= 1)
- Console.WriteLine("[SMT-ERR-{0}] {1}", smtProcessId, e.Data);
- proverErrors.Enqueue(e.Data);
- Monitor.Pulse(this);
- }
- }
- }
- #endregion
- }
-}
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics;
+using System.IO;
+using System.Threading;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Boogie.SMTLib
+{
+ public class SMTLibProcess
+ {
+ readonly Process prover;
+ readonly Inspector inspector;
+ readonly SMTLibProverOptions options;
+ readonly Queue<string> proverOutput = new Queue<string>();
+ readonly Queue<string> proverErrors = new Queue<string>();
+ readonly TextWriter toProver;
+ readonly int smtProcessId;
+ static int smtProcessIdSeq = 0;
+ ConsoleCancelEventHandler cancelEvent;
+ public bool NeedsRestart;
+
+ public static ProcessStartInfo ComputerProcessStartInfo(string executable, string options)
+ {
+ return new ProcessStartInfo(executable, options)
+ {
+ CreateNoWindow = true,
+ UseShellExecute = false,
+ RedirectStandardInput = true,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true
+ };
+ }
+
+ public SMTLibProcess(ProcessStartInfo psi, SMTLibProverOptions options)
+ {
+ this.options = options;
+ this.smtProcessId = smtProcessIdSeq++;
+
+ if (options.Inspector != null) {
+ this.inspector = new Inspector(options);
+ }
+
+ foreach (var arg in options.SolverArguments)
+ psi.Arguments += " " + arg;
+
+ if (cancelEvent == null && CommandLineOptions.Clo.RunningBoogieFromCommandLine) {
+ cancelEvent = new ConsoleCancelEventHandler(ControlCHandler);
+ Console.CancelKeyPress += cancelEvent;
+ }
+
+ if (options.Verbosity >= 1) {
+ Console.WriteLine("[SMT-{0}] Starting {1} {2}", smtProcessId, psi.FileName, psi.Arguments);
+ }
+
+
+ try {
+ prover = new Process();
+ prover.StartInfo = psi;
+ prover.ErrorDataReceived += prover_ErrorDataReceived;
+ prover.OutputDataReceived += prover_OutputDataReceived;
+ prover.Start();
+ toProver = prover.StandardInput;
+ prover.BeginErrorReadLine();
+ prover.BeginOutputReadLine();
+ } catch (System.ComponentModel.Win32Exception e) {
+ throw new ProverException(string.Format("Unable to start the process {0}: {1}", psi.FileName, e.Message));
+ }
+ }
+
+ [NoDefaultContract] // important, since we have no idea what state the object might be in when this handler is invoked
+ void ControlCHandler(object o, ConsoleCancelEventArgs a)
+ {
+ if (prover != null) {
+ TerminateProver();
+ }
+ }
+
+ private void TerminateProver(Int32 timeout = 2000) {
+ try {
+ // Let the prover know that we're done sending input.
+ prover.StandardInput.Close();
+
+ // Give it a chance to exit cleanly (e.g. to flush buffers)
+ if (!prover.WaitForExit(timeout)) {
+ prover.Kill();
+ }
+ } catch { /* Swallow errors */ }
+ }
+
+ public void Send(string cmd)
+ {
+ if (options.Verbosity >= 2) {
+ var log = cmd;
+ if (log.Length > 50)
+ log = log.Substring(0, 50) + "...";
+ log = log.Replace("\r", "").Replace("\n", " ");
+ Console.WriteLine("[SMT-INP-{0}] {1}", smtProcessId, log);
+ }
+ //Console.WriteLine(cmd);
+ toProver.WriteLine(cmd);
+ }
+
+ // this is less than perfect; (echo ...) would be better
+ public void Ping()
+ {
+ Send("(get-info :name)");
+ }
+
+ public bool IsPong(SExpr sx)
+ {
+ return sx != null && sx.Name == ":name";
+ }
+
+ public void PingPong()
+ {
+ Ping();
+ while (true) {
+ var sx = GetProverResponse();
+ if (sx == null) {
+ this.NeedsRestart = true;
+ HandleError("Prover died");
+ return;
+ }
+
+ if (IsPong(sx))
+ return;
+ else
+ HandleError("Invalid PING response from the prover: " + sx.ToString());
+ }
+ }
+
+ internal Inspector Inspector
+ {
+ get { return inspector; }
+ }
+
+ public SExpr GetProverResponse()
+ {
+ toProver.Flush();
+
+ while (true) {
+ var exprs = ParseSExprs(true).ToArray();
+ Contract.Assert(exprs.Length <= 1);
+ if (exprs.Length == 0)
+ return null;
+ var resp = exprs[0];
+ if (resp.Name == "error") {
+ if (resp.Arguments.Length == 1 && resp.Arguments[0].IsId)
+ HandleError(resp.Arguments[0].Name);
+ else
+ HandleError(resp.ToString());
+ } else if (resp.Name == "progress") {
+ if (inspector != null) {
+ var sb = new StringBuilder();
+ foreach (var a in resp.Arguments) {
+ if (a.Name == "labels") {
+ sb.Append("STATS LABELS");
+ foreach (var x in a.Arguments)
+ sb.Append(" ").Append(x.Name);
+ } else if (a.Name.StartsWith(":")) {
+ sb.Append("STATS NAMED_VALUES ").Append(a.Name);
+ foreach (var x in a.Arguments)
+ sb.Append(" ").Append(x.Name);
+ } else {
+ continue;
+ }
+ inspector.StatsLine(sb.ToString());
+ sb.Clear();
+ }
+ }
+ } else if (resp.Name == "unsupported") {
+ // Skip -- this may be a benign "unsupported" from a previous command.
+ // Of course, this is suboptimal. We should really be using
+ // print-success to identify the errant command and determine whether
+ // the response is benign.
+ } else {
+ return resp;
+ }
+ }
+ }
+
+ public static System.TimeSpan TotalUserTime = System.TimeSpan.Zero;
+
+ public void Close()
+ {
+ TotalUserTime += prover.UserProcessorTime;
+ TerminateProver();
+ DisposeProver();
+ }
+
+ public event Action<string> ErrorHandler;
+ int errorCnt;
+
+ private void HandleError(string msg)
+ {
+ if (options.Verbosity >= 2)
+ Console.WriteLine("[SMT-ERR-{0}] Handling error: {1}", smtProcessId, msg);
+ if (ErrorHandler != null)
+ ErrorHandler(msg);
+ }
+
+ #region SExpr parsing
+ int linePos;
+ string currLine;
+ char SkipWs()
+ {
+ while (true) {
+ if (currLine == null) {
+ currLine = ReadProver();
+ if (currLine == null)
+ return '\0';
+ }
+
+
+ while (linePos < currLine.Length && char.IsWhiteSpace(currLine[linePos]))
+ linePos++;
+
+ if (linePos < currLine.Length && currLine[linePos] != ';')
+ return currLine[linePos];
+ else {
+ currLine = null;
+ linePos = 0;
+ }
+ }
+ }
+
+ void Shift()
+ {
+ linePos++;
+ }
+
+ string ParseId()
+ {
+ var sb = new StringBuilder();
+
+ var beg = SkipWs();
+
+ var quoted = beg == '"' || beg == '|';
+ if (quoted)
+ Shift();
+ while (true) {
+ if (linePos >= currLine.Length) {
+ if (quoted) {
+ sb.Append("\n");
+ currLine = ReadProver();
+ linePos = 0;
+ if (currLine == null)
+ break;
+ } else break;
+ }
+
+ var c = currLine[linePos++];
+ if (quoted && c == beg)
+ break;
+ if (!quoted && (char.IsWhiteSpace(c) || c == '(' || c == ')')) {
+ linePos--;
+ break;
+ }
+ if (quoted && c == '\\' && linePos < currLine.Length && currLine[linePos] == '"') {
+ sb.Append('"');
+ linePos++;
+ continue;
+ }
+ sb.Append(c);
+ }
+
+ return sb.ToString();
+ }
+
+ void ParseError(string msg)
+ {
+ HandleError("Error parsing prover output: " + msg);
+ }
+
+ IEnumerable<SExpr> ParseSExprs(bool top)
+ {
+ while (true) {
+ var c = SkipWs();
+ if (c == '\0')
+ break;
+
+ if (c == ')') {
+ if (top)
+ ParseError("stray ')'");
+ break;
+ }
+
+ string id;
+
+ if (c == '(') {
+ Shift();
+ c = SkipWs();
+ if (c == '\0') {
+ ParseError("expecting something after '('");
+ break;
+ } else if (c == '(') {
+ id = "";
+ } else {
+ id = ParseId();
+ }
+
+ var args = ParseSExprs(false).ToArray();
+
+ c = SkipWs();
+ if (c == ')') {
+ Shift();
+ } else {
+ ParseError("unclosed '(" + id + "'");
+ }
+ yield return new SExpr(id, args);
+ } else {
+ id = ParseId();
+ yield return new SExpr(id);
+ }
+
+ if (top) break;
+ }
+ }
+ #endregion
+
+ #region handling input from the prover
+ string ReadProver()
+ {
+ string error = null;
+ while (true) {
+ if (error != null) {
+ HandleError(error);
+ errorCnt++;
+ error = null;
+ }
+
+ lock (this) {
+ while (proverOutput.Count == 0 && proverErrors.Count == 0 && !prover.HasExited) {
+ Monitor.Wait(this, 100);
+ }
+
+ if (proverErrors.Count > 0) {
+ error = proverErrors.Dequeue();
+ continue;
+ }
+
+ if (proverOutput.Count > 0) {
+ return proverOutput.Dequeue();
+ }
+
+ if (prover.HasExited) {
+ DisposeProver();
+ return null;
+ }
+ }
+ }
+ }
+
+ void DisposeProver()
+ {
+ if (cancelEvent != null) {
+ Console.CancelKeyPress -= cancelEvent;
+ cancelEvent = null;
+ }
+ }
+
+ void prover_OutputDataReceived(object sender, DataReceivedEventArgs e)
+ {
+ lock (this) {
+ if (e.Data != null) {
+ if (options.Verbosity >= 2 || (options.Verbosity >= 1 && !e.Data.StartsWith("(:name "))) {
+ Console.WriteLine("[SMT-OUT-{0}] {1}", smtProcessId, e.Data);
+ }
+ proverOutput.Enqueue(e.Data);
+ Monitor.Pulse(this);
+ }
+ }
+ }
+
+ void prover_ErrorDataReceived(object sender, DataReceivedEventArgs e)
+ {
+ lock (this) {
+ if (e.Data != null) {
+ if (options.Verbosity >= 1)
+ Console.WriteLine("[SMT-ERR-{0}] {1}", smtProcessId, e.Data);
+ proverErrors.Enqueue(e.Data);
+ Monitor.Pulse(this);
+ }
+ }
+ }
+ #endregion
+ }
+}
+
diff --git a/Source/Provers/SMTLib/SMTLibProverOptions.cs b/Source/Provers/SMTLib/SMTLibProverOptions.cs
index 0cfa65d8..5c3bed3e 100644
--- a/Source/Provers/SMTLib/SMTLibProverOptions.cs
+++ b/Source/Provers/SMTLib/SMTLibProverOptions.cs
@@ -1,158 +1,158 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics.Contracts;
-
-namespace Microsoft.Boogie.SMTLib
-{
-
- public class OptionValue
- {
- public readonly string Option;
- public readonly string Value;
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(Option != null);
- Contract.Invariant(Value != null);
- }
-
- public OptionValue(string option, string value)
- {
- Contract.Requires(option != null);
- Contract.Requires(value != null);
- Option = option;
- Value = value;
- }
- }
-
- public enum SolverKind { Z3, CVC4 };
-
- public class SMTLibProverOptions : ProverOptions
- {
- public bool UseWeights = true;
- public bool SupportsLabels { get { return Solver == SolverKind.Z3; } }
- public bool UseTickleBool { get { return Solver == SolverKind.Z3; } }
- public SolverKind Solver = SolverKind.Z3;
- public List<OptionValue> SmtOptions = new List<OptionValue>();
- public List<string> SolverArguments = new List<string>();
- public bool MultiTraces = false;
- public string Logic = "";
-
- // Z3 specific (at the moment; some of them make sense also for other provers)
- public string Inspector = null;
- public bool OptimizeForBv = false;
- public bool SMTLib2Model = false;
-
- public bool ProduceModel() {
- return !CommandLineOptions.Clo.UseLabels || CommandLineOptions.Clo.ExplainHoudini || CommandLineOptions.Clo.UseProverEvaluate ||
- ExpectingModel();
- }
-
- public bool ExpectingModel()
- {
- return CommandLineOptions.Clo.PrintErrorModel >= 1 ||
- CommandLineOptions.Clo.EnhancedErrorMessages == 1 ||
- CommandLineOptions.Clo.ModelViewFile != null ||
- (CommandLineOptions.Clo.StratifiedInlining > 0 && !CommandLineOptions.Clo.StratifiedInliningWithoutModels);
- }
-
- public void AddSolverArgument(string s)
- {
- SolverArguments.Add(s);
- }
-
- public void AddSmtOption(string name, string val)
- {
- SmtOptions.Add(new OptionValue(name, val));
- }
-
- public void AddWeakSmtOption(string name, string val)
- {
- if (!SmtOptions.Any(o => o.Option == name))
- SmtOptions.Add(new OptionValue(name, val));
- }
-
- public void AddSmtOption(string opt)
- {
- var idx = opt.IndexOf('=');
- if (idx <= 0 || idx == opt.Length - 1)
- ReportError("Options to be passed to the prover should have the format: O:<name>=<value>, got '" + opt + "'");
- AddSmtOption(opt.Substring(0, idx), opt.Substring(idx + 1));
- }
-
- protected override bool Parse(string opt)
- {
- string SolverStr = null;
- if (ParseString(opt, "SOLVER", ref SolverStr)) {
- switch (SolverStr) {
- case "Z3":
- case "z3":
- Solver = SolverKind.Z3;
- break;
- case "CVC4":
- case "cvc4":
- Solver = SolverKind.CVC4;
- if (Logic.Equals("")) Logic = "ALL_SUPPORTED";
- break;
- default:
- ReportError("Invalid SOLVER value; must be 'Z3' or 'CVC4'");
- return false;
- }
- return true;
- }
-
- if (opt.StartsWith("O:")) {
- AddSmtOption(opt.Substring(2));
- return true;
- }
-
- if (opt.StartsWith("C:")) {
- AddSolverArgument(opt.Substring(2));
- return true;
- }
-
- return
- ParseBool(opt, "MULTI_TRACES", ref MultiTraces) ||
- ParseBool(opt, "USE_WEIGHTS", ref UseWeights) ||
- ParseString(opt, "INSPECTOR", ref Inspector) ||
- ParseBool(opt, "OPTIMIZE_FOR_BV", ref OptimizeForBv) ||
- ParseBool(opt, "SMTLIB2_MODEL", ref SMTLib2Model) ||
- ParseString(opt, "LOGIC", ref Logic) ||
- base.Parse(opt);
- }
-
- public override void PostParse()
- {
- base.PostParse();
- if (Solver == SolverKind.Z3)
- Z3.SetupOptions(this);
- }
-
- public override string Help
- {
- get
- {
- return
-@"
-SMT-specific options:
-~~~~~~~~~~~~~~~~~~~~~
-SOLVER=<string> Use the given SMT solver (z3 or cvc4; default: z3)
-USE_WEIGHTS=<bool> Pass :weight annotations on quantified formulas (default: true)
-VERBOSITY=<int> 1 - print prover output (default: 0)
-O:<name>=<value> Pass (set-option :<name> <value>) to the SMT solver.
-C:<string> Pass <string> to the SMT on the command line.
-LOGIC=<string> Pass (set-logic <string>) to the prover (default: empty, 'ALL_SUPPORTED' for CVC4)
-
-Z3-specific options:
-~~~~~~~~~~~~~~~~~~~~
-MULTI_TRACES=<bool> Report errors with multiple paths leading to the same assertion.
-INSPECTOR=<string> Use the specified Z3Inspector binary.
-OPTIMIZE_FOR_BV=<bool> Optimize Z3 options for bitvector reasoning, and not quantifier instantiation. Defaults to false.
-SMTLIB2_MODEL=<bool> Use the SMTLIB2 output model. Defaults to false.
-" + base.Help;
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics.Contracts;
+
+namespace Microsoft.Boogie.SMTLib
+{
+
+ public class OptionValue
+ {
+ public readonly string Option;
+ public readonly string Value;
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(Option != null);
+ Contract.Invariant(Value != null);
+ }
+
+ public OptionValue(string option, string value)
+ {
+ Contract.Requires(option != null);
+ Contract.Requires(value != null);
+ Option = option;
+ Value = value;
+ }
+ }
+
+ public enum SolverKind { Z3, CVC4 };
+
+ public class SMTLibProverOptions : ProverOptions
+ {
+ public bool UseWeights = true;
+ public bool SupportsLabels { get { return Solver == SolverKind.Z3; } }
+ public bool UseTickleBool { get { return Solver == SolverKind.Z3; } }
+ public SolverKind Solver = SolverKind.Z3;
+ public List<OptionValue> SmtOptions = new List<OptionValue>();
+ public List<string> SolverArguments = new List<string>();
+ public bool MultiTraces = false;
+ public string Logic = "";
+
+ // Z3 specific (at the moment; some of them make sense also for other provers)
+ public string Inspector = null;
+ public bool OptimizeForBv = false;
+ public bool SMTLib2Model = false;
+
+ public bool ProduceModel() {
+ return !CommandLineOptions.Clo.UseLabels || CommandLineOptions.Clo.ExplainHoudini || CommandLineOptions.Clo.UseProverEvaluate ||
+ ExpectingModel();
+ }
+
+ public bool ExpectingModel()
+ {
+ return CommandLineOptions.Clo.PrintErrorModel >= 1 ||
+ CommandLineOptions.Clo.EnhancedErrorMessages == 1 ||
+ CommandLineOptions.Clo.ModelViewFile != null ||
+ (CommandLineOptions.Clo.StratifiedInlining > 0 && !CommandLineOptions.Clo.StratifiedInliningWithoutModels);
+ }
+
+ public void AddSolverArgument(string s)
+ {
+ SolverArguments.Add(s);
+ }
+
+ public void AddSmtOption(string name, string val)
+ {
+ SmtOptions.Add(new OptionValue(name, val));
+ }
+
+ public void AddWeakSmtOption(string name, string val)
+ {
+ if (!SmtOptions.Any(o => o.Option == name))
+ SmtOptions.Add(new OptionValue(name, val));
+ }
+
+ public void AddSmtOption(string opt)
+ {
+ var idx = opt.IndexOf('=');
+ if (idx <= 0 || idx == opt.Length - 1)
+ ReportError("Options to be passed to the prover should have the format: O:<name>=<value>, got '" + opt + "'");
+ AddSmtOption(opt.Substring(0, idx), opt.Substring(idx + 1));
+ }
+
+ protected override bool Parse(string opt)
+ {
+ string SolverStr = null;
+ if (ParseString(opt, "SOLVER", ref SolverStr)) {
+ switch (SolverStr) {
+ case "Z3":
+ case "z3":
+ Solver = SolverKind.Z3;
+ break;
+ case "CVC4":
+ case "cvc4":
+ Solver = SolverKind.CVC4;
+ if (Logic.Equals("")) Logic = "ALL_SUPPORTED";
+ break;
+ default:
+ ReportError("Invalid SOLVER value; must be 'Z3' or 'CVC4'");
+ return false;
+ }
+ return true;
+ }
+
+ if (opt.StartsWith("O:")) {
+ AddSmtOption(opt.Substring(2));
+ return true;
+ }
+
+ if (opt.StartsWith("C:")) {
+ AddSolverArgument(opt.Substring(2));
+ return true;
+ }
+
+ return
+ ParseBool(opt, "MULTI_TRACES", ref MultiTraces) ||
+ ParseBool(opt, "USE_WEIGHTS", ref UseWeights) ||
+ ParseString(opt, "INSPECTOR", ref Inspector) ||
+ ParseBool(opt, "OPTIMIZE_FOR_BV", ref OptimizeForBv) ||
+ ParseBool(opt, "SMTLIB2_MODEL", ref SMTLib2Model) ||
+ ParseString(opt, "LOGIC", ref Logic) ||
+ base.Parse(opt);
+ }
+
+ public override void PostParse()
+ {
+ base.PostParse();
+ if (Solver == SolverKind.Z3)
+ Z3.SetupOptions(this);
+ }
+
+ public override string Help
+ {
+ get
+ {
+ return
+@"
+SMT-specific options:
+~~~~~~~~~~~~~~~~~~~~~
+SOLVER=<string> Use the given SMT solver (z3 or cvc4; default: z3)
+USE_WEIGHTS=<bool> Pass :weight annotations on quantified formulas (default: true)
+VERBOSITY=<int> 1 - print prover output (default: 0)
+O:<name>=<value> Pass (set-option :<name> <value>) to the SMT solver.
+C:<string> Pass <string> to the SMT on the command line.
+LOGIC=<string> Pass (set-logic <string>) to the prover (default: empty, 'ALL_SUPPORTED' for CVC4)
+
+Z3-specific options:
+~~~~~~~~~~~~~~~~~~~~
+MULTI_TRACES=<bool> Report errors with multiple paths leading to the same assertion.
+INSPECTOR=<string> Use the specified Z3Inspector binary.
+OPTIMIZE_FOR_BV=<bool> Optimize Z3 options for bitvector reasoning, and not quantifier instantiation. Defaults to false.
+SMTLIB2_MODEL=<bool> Use the SMTLIB2 output model. Defaults to false.
+" + base.Help;
+ }
+ }
+ }
+}
diff --git a/Source/Provers/SMTLib/TypeDeclCollector.cs b/Source/Provers/SMTLib/TypeDeclCollector.cs
index 2b053410..d7c56d90 100644
--- a/Source/Provers/SMTLib/TypeDeclCollector.cs
+++ b/Source/Provers/SMTLib/TypeDeclCollector.cs
@@ -1,395 +1,410 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie.SMTLib
-{
- // Visitor for collecting the occurring function symbols in a VCExpr,
- // and for creating the corresponding declarations
-
- public class TypeDeclCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
-
- private readonly UniqueNamer Namer;
- private readonly SMTLibProverOptions Options;
- private HashSet<Function/*!*/>/*!*/ RegisteredRelations = new HashSet<Function>();
-
- [ContractInvariantMethod]
-void ObjectInvariant()
-{
- Contract.Invariant(Namer!=null);
- Contract.Invariant(AllDecls != null);
- Contract.Invariant(IncDecls != null);
- Contract.Invariant(KnownFunctions != null);
- Contract.Invariant(KnownVariables != null);
-}
-
-
- public TypeDeclCollector(SMTLibProverOptions opts, UniqueNamer namer) {
- Contract.Requires(namer != null);
- this.Namer = namer;
- this.Options = opts;
- InitializeKnownDecls();
- }
-
- // not used
- protected override bool StandardResult(VCExpr node, bool arg) {
- //Contract.Requires(node != null);
- return true;
- }
-
- private readonly List<string/*!>!*/> AllDecls = new List<string/*!*/> ();
- private readonly List<string/*!>!*/> IncDecls = new List<string/*!*/> ();
-
- // In order to support push/pop interface of the theorem prover, the "known" declarations
- // must be kept in a stack
-
- private HashSet<Function/*!*/>/*!*/ KnownFunctions
- {
- get { return _KnownFunctions.Peek(); }
- }
-
- private HashSet<VCExprVar/*!*/>/*!*/ KnownVariables
- {
- get { return _KnownVariables.Peek(); }
- }
-
- private HashSet<Type/*!*/>/*!*/ KnownTypes
- {
- get { return _KnownTypes.Peek(); }
- }
-
- private HashSet<string/*!*/>/*!*/ KnownStoreFunctions
- {
- get { return _KnownStoreFunctions.Peek(); }
- }
-
- private HashSet<string/*!*/>/*!*/ KnownSelectFunctions
- {
- get { return _KnownSelectFunctions.Peek(); }
- }
-
- private HashSet<string> KnownLBL
- {
- get { return _KnownLBL.Peek(); }
- }
-
- // ------
- private readonly Stack<HashSet<Function/*!*/>/*!*/> _KnownFunctions = new Stack<HashSet<Function/*!*/>>();
- private readonly Stack<HashSet<VCExprVar/*!*/>/*!*/> _KnownVariables = new Stack<HashSet<VCExprVar/*!*/>>();
-
- private readonly Stack<HashSet<Type/*!*/>/*!*/> _KnownTypes = new Stack<HashSet<Type>>();
- private readonly Stack<HashSet<string/*!*/>/*!*/> _KnownStoreFunctions = new Stack<HashSet<string>>();
- private readonly Stack<HashSet<string/*!*/>/*!*/> _KnownSelectFunctions = new Stack<HashSet<string>>();
- private readonly Stack<HashSet<string>> _KnownLBL = new Stack<HashSet<string>>();
-
- // lets RPFP checker capture decls
- public abstract class DeclHandler {
- public abstract void VarDecl(VCExprVar v);
- public abstract void FuncDecl(Function f);
- }
-
- private DeclHandler declHandler = null;
-
- public void SetDeclHandler(DeclHandler _d){
- declHandler = _d;
- }
-
- private void InitializeKnownDecls()
- {
- _KnownFunctions.Push(new HashSet<Function>());
- _KnownVariables.Push(new HashSet<VCExprVar>());
- _KnownTypes.Push(new HashSet<Type>());
- _KnownStoreFunctions.Push(new HashSet<string>());
- _KnownSelectFunctions.Push(new HashSet<string>());
- _KnownLBL.Push(new HashSet<string>());
- }
-
- public void Reset()
- {
- _KnownFunctions.Clear();
- _KnownVariables.Clear();
- _KnownTypes.Clear();
- _KnownStoreFunctions.Clear();
- _KnownSelectFunctions.Clear();
- _KnownLBL.Clear();
- AllDecls.Clear();
- IncDecls.Clear();
- InitializeKnownDecls();
- }
-
- public void Push()
- {
- Contract.Assert(_KnownFunctions.Count > 0);
- _KnownFunctions.Push(new HashSet<Function>(_KnownFunctions.Peek()));
- _KnownVariables.Push(new HashSet<VCExprVar>(_KnownVariables.Peek()));
- _KnownTypes.Push(new HashSet<Type>(_KnownTypes.Peek()));
- _KnownStoreFunctions.Push(new HashSet<string>(_KnownStoreFunctions.Peek()));
- _KnownSelectFunctions.Push(new HashSet<string>(_KnownSelectFunctions.Peek()));
- _KnownLBL.Push(new HashSet<string>(_KnownLBL.Peek()));
- }
-
- public void Pop()
- {
- Contract.Assert(_KnownFunctions.Count > 1);
- _KnownFunctions.Pop();
- _KnownVariables.Pop();
- _KnownTypes.Pop();
- _KnownStoreFunctions.Pop();
- _KnownSelectFunctions.Pop();
- _KnownLBL.Pop();
- }
-
- public List<string/*!>!*/> AllDeclarations { get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
-
- List<string>/*!>!*/ res = new List<string/*!*/> ();
- res.AddRange(AllDecls);
- return res;
- } }
-
- public List<string/*!>!*/> GetNewDeclarations() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
- List<string>/*!>!*/ res = new List<string/*!*/>();
- res.AddRange(IncDecls);
- IncDecls.Clear();
- return res;
- }
-
- private void AddDeclaration(string decl) {
- Contract.Requires(decl != null);
- AllDecls.Add(decl);
- IncDecls.Add(decl);
- }
-
- public void Collect(VCExpr expr) {
- Contract.Requires(expr != null);
- Traverse(expr, true);
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
- private static string TypeToString(Type t) {
- Contract.Requires(t != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- return SMTLibExprLineariser.TypeToString(t);
- }
-
- public string TypeToStringReg(Type t)
- {
- RegisterType(t);
- return TypeToString(t);
- }
-
- public void AddFunction(Function func) {
- if (KnownFunctions.Contains(func))
- return;
- KnownFunctions.Add(func);
- if(declHandler != null)
- declHandler.FuncDecl(func);
- }
-
- public void RegisterRelation(Function func)
- {
- if (RegisteredRelations.Contains(func))
- return;
- RegisteredRelations.Add(func);
- }
-
- public override bool Visit(VCExprNAry node, bool arg) {
- Contract.Requires(node != null);
-
- if (node.Op is VCExprStoreOp) RegisterStore(node);
- else if (node.Op is VCExprSelectOp) RegisterSelect(node);
- else {
- VCExprBoogieFunctionOp op = node.Op as VCExprBoogieFunctionOp;
- if (op != null &&
- !(op.Func is DatatypeConstructor) && !(op.Func is DatatypeMembership) && !(op.Func is DatatypeSelector) &&
- !KnownFunctions.Contains(op.Func)) {
- Function f = op.Func;
- Contract.Assert(f != null);
-
- var builtin = SMTLibExprLineariser.ExtractBuiltin(f);
- if (builtin == null) {
- string printedName = Namer.GetQuotedName(f, f.Name);
- Contract.Assert(printedName != null);
-
- Contract.Assert(f.OutParams.Count == 1);
- var argTypes = f.InParams.Cast<Variable>().MapConcat(p => TypeToStringReg(p.TypedIdent.Type), " ");
- string decl;
- if(RegisteredRelations.Contains(op.Func))
- decl = "(declare-rel " + printedName + " (" + argTypes + ") " + ")";
- else
- decl = "(declare-fun " + printedName + " (" + argTypes + ") " + TypeToStringReg(f.OutParams[0].TypedIdent.Type) + ")";
- AddDeclaration(decl);
- }
- KnownFunctions.Add(f);
- } else {
- var lab = node.Op as VCExprLabelOp;
- if (lab != null && !KnownLBL.Contains(lab.label)) {
- KnownLBL.Add(lab.label);
- var name = SMTLibNamer.QuoteId(SMTLibNamer.LabelVar(lab.label));
- AddDeclaration("(declare-fun " + name + " () Bool)");
- }
- }
- }
-
- return base.Visit(node, arg);
- }
-
- public override bool Visit(VCExprVar node, bool arg) {
- Contract.Requires(node != null);
- if (!BoundTermVars.Contains(node) && !KnownVariables.Contains(node)) {
- string printedName = Namer.GetQuotedName(node, node.Name);
- Contract.Assert(printedName!=null);
- RegisterType(node.Type);
- string decl =
- "(declare-fun " + printedName + " () " + TypeToString(node.Type) + ")";
- AddDeclaration(decl);
- KnownVariables.Add(node);
- if(declHandler != null)
- declHandler.VarDecl(node);
- }
-
- return base.Visit(node, arg);
- }
-
- public override bool Visit(VCExprQuantifier node, bool arg)
- {
- Contract.Requires(node != null);
- foreach (VCExprVar v in node.BoundVars) {
- Contract.Assert(v != null);
- RegisterType(v.Type);
- }
-
- return base.Visit(node, arg);
- }
-
- private void RegisterType(Type type)
- {
- Contract.Requires(type != null);
- if (KnownTypes.Contains(type)) return;
-
- if (type.IsMap && CommandLineOptions.Clo.MonomorphicArrays) {
- KnownTypes.Add(type);
- MapType mapType = type.AsMap;
- Contract.Assert(mapType != null);
-
- foreach (Type t in mapType.Arguments) {
- Contract.Assert(t != null);
- RegisterType(t);
- }
- RegisterType(mapType.Result);
-
- if (!CommandLineOptions.Clo.UseArrayTheory)
- AddDeclaration("(declare-sort " + TypeToString(type) + " 0)");
-
- return;
- }
-
- if (type.IsBool || type.IsInt || type.IsReal || type.IsFloat || type.IsBv)
- return;
-
- CtorType ctorType = type as CtorType;
- if (ctorType != null && ctorType.IsDatatype())
- return;
-
- if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.Monomorphic) {
- AddDeclaration("(declare-sort " + TypeToString(type) + " 0)");
- KnownTypes.Add(type);
- return;
- }
- }
-
- private void RegisterSelect(VCExprNAry node)
- {
- RegisterType(node[0].Type);
-
- if (CommandLineOptions.Clo.UseArrayTheory)
- return;
-
- string name = SimplifyLikeExprLineariser.SelectOpName(node);
- name = Namer.GetQuotedName(name, name);
-
- if (!KnownSelectFunctions.Contains(name)) {
- string decl = "(declare-fun " + name + " (" + node.MapConcat(n => TypeToString(n.Type), " ") + ") " + TypeToString(node.Type) + ")";
- AddDeclaration(decl);
- KnownSelectFunctions.Add(name);
- }
- }
-
- private void RegisterStore(VCExprNAry node)
- {
- RegisterType(node.Type); // this is the map type, registering it should register also the index and value types
-
- if (CommandLineOptions.Clo.UseArrayTheory)
- return;
-
- string name = SimplifyLikeExprLineariser.StoreOpName(node);
- name = Namer.GetQuotedName(name, name);
-
- if (!KnownStoreFunctions.Contains(name)) {
- string decl = "(declare-fun " + name + " (" + node.MapConcat(n => TypeToString(n.Type), " ") + ") " + TypeToString(node.Type) + ")";
- AddDeclaration(decl);
-
- if (CommandLineOptions.Clo.MonomorphicArrays) {
- var sel = SimplifyLikeExprLineariser.SelectOpName(node);
- sel = Namer.GetQuotedName(sel, sel);
-
- if (!KnownSelectFunctions.Contains(sel)) {
- // need to declare it before reference
- var args = node.SkipEnd(1);
- var ret = node.Last();
- string seldecl = "(declare-fun " + sel + " (" + args.MapConcat(n => TypeToString(n.Type), " ") + ") " + TypeToString(ret.Type) + ")";
- AddDeclaration(seldecl);
- KnownSelectFunctions.Add(sel);
- }
-
- string ax1 = "(assert (forall (";
- string ax2 = "(assert (forall (";
-
- string argX = "", argY = "";
- string dist = "";
- for (int i = 0; i < node.Arity; i++) {
- var t = " " + TypeToString(node[i].Type);
- var x = " ?x" + i;
- var y = " ?y" + i;
- ax1 += " (" + x + t + ")";
- ax2 += " (" + x + t + ")";
- if (i != 0 && i != node.Arity - 1) {
- argX += x;
- argY += y;
- ax2 += " (" + y + t + ")";
- dist += " (not (=" + x + y + "))";
- }
- }
- string v = " ?x" + (node.Arity - 1);
- ax1 += ") (= (" + sel + " (" + name + " ?x0" + argX + v + ")" + argX + ") " + v + ")";
- ax1 += "))";
-
- if (node.Arity > 3)
- dist = "(or " + dist + ")";
- ax2 += ") (=> " + dist + " (= (" + sel + " (" + name + " ?x0" + argX + v + ")" + argY + ") (" + sel + " ?x0" + argY + ")))";
- ax2 += "))";
-
- AddDeclaration(ax1);
- AddDeclaration(ax2);
- }
-
- KnownStoreFunctions.Add(name);
- }
- //
- }
-
- }
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie.SMTLib
+{
+ // Visitor for collecting the occurring function symbols in a VCExpr,
+ // and for creating the corresponding declarations
+
+ public class TypeDeclCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
+
+ private readonly UniqueNamer Namer;
+ private readonly SMTLibProverOptions Options;
+ private HashSet<Function/*!*/>/*!*/ RegisteredRelations = new HashSet<Function>();
+
+ [ContractInvariantMethod]
+void ObjectInvariant()
+{
+ Contract.Invariant(Namer!=null);
+ Contract.Invariant(AllDecls != null);
+ Contract.Invariant(IncDecls != null);
+ Contract.Invariant(KnownFunctions != null);
+ Contract.Invariant(KnownVariables != null);
+}
+
+
+ public TypeDeclCollector(SMTLibProverOptions opts, UniqueNamer namer) {
+ Contract.Requires(namer != null);
+ this.Namer = namer;
+ this.Options = opts;
+ InitializeKnownDecls();
+ }
+
+ // not used
+ protected override bool StandardResult(VCExpr node, bool arg) {
+ //Contract.Requires(node != null);
+ return true;
+ }
+
+ private readonly List<string/*!>!*/> AllDecls = new List<string/*!*/> ();
+ private readonly List<string/*!>!*/> IncDecls = new List<string/*!*/> ();
+
+ // In order to support push/pop interface of the theorem prover, the "known" declarations
+ // must be kept in a stack
+
+ private HashSet<Function/*!*/>/*!*/ KnownFunctions
+ {
+ get { return _KnownFunctions.Peek(); }
+ }
+
+ private HashSet<VCExprVar/*!*/>/*!*/ KnownVariables
+ {
+ get { return _KnownVariables.Peek(); }
+ }
+
+ private HashSet<Type/*!*/>/*!*/ KnownTypes
+ {
+ get { return _KnownTypes.Peek(); }
+ }
+
+ private HashSet<string/*!*/>/*!*/ KnownStoreFunctions
+ {
+ get { return _KnownStoreFunctions.Peek(); }
+ }
+
+ private HashSet<string/*!*/>/*!*/ KnownSelectFunctions
+ {
+ get { return _KnownSelectFunctions.Peek(); }
+ }
+
+ private HashSet<string> KnownLBL
+ {
+ get { return _KnownLBL.Peek(); }
+ }
+
+ // ------
+ private readonly Stack<HashSet<Function/*!*/>/*!*/> _KnownFunctions = new Stack<HashSet<Function/*!*/>>();
+ private readonly Stack<HashSet<VCExprVar/*!*/>/*!*/> _KnownVariables = new Stack<HashSet<VCExprVar/*!*/>>();
+
+ private readonly Stack<HashSet<Type/*!*/>/*!*/> _KnownTypes = new Stack<HashSet<Type>>();
+ private readonly Stack<HashSet<string/*!*/>/*!*/> _KnownStoreFunctions = new Stack<HashSet<string>>();
+ private readonly Stack<HashSet<string/*!*/>/*!*/> _KnownSelectFunctions = new Stack<HashSet<string>>();
+ private readonly Stack<HashSet<string>> _KnownLBL = new Stack<HashSet<string>>();
+
+ // lets RPFP checker capture decls
+ public abstract class DeclHandler {
+ public abstract void VarDecl(VCExprVar v);
+ public abstract void FuncDecl(Function f);
+ }
+
+ private DeclHandler declHandler = null;
+
+ public void SetDeclHandler(DeclHandler _d){
+ declHandler = _d;
+ }
+
+ private void InitializeKnownDecls()
+ {
+ _KnownFunctions.Push(new HashSet<Function>());
+ _KnownVariables.Push(new HashSet<VCExprVar>());
+ _KnownTypes.Push(new HashSet<Type>());
+ _KnownStoreFunctions.Push(new HashSet<string>());
+ _KnownSelectFunctions.Push(new HashSet<string>());
+ _KnownLBL.Push(new HashSet<string>());
+ }
+
+ public void Reset()
+ {
+ _KnownFunctions.Clear();
+ _KnownVariables.Clear();
+ _KnownTypes.Clear();
+ _KnownStoreFunctions.Clear();
+ _KnownSelectFunctions.Clear();
+ _KnownLBL.Clear();
+ AllDecls.Clear();
+ IncDecls.Clear();
+ InitializeKnownDecls();
+ }
+
+ public void Push()
+ {
+ Contract.Assert(_KnownFunctions.Count > 0);
+ _KnownFunctions.Push(new HashSet<Function>(_KnownFunctions.Peek()));
+ _KnownVariables.Push(new HashSet<VCExprVar>(_KnownVariables.Peek()));
+ _KnownTypes.Push(new HashSet<Type>(_KnownTypes.Peek()));
+ _KnownStoreFunctions.Push(new HashSet<string>(_KnownStoreFunctions.Peek()));
+ _KnownSelectFunctions.Push(new HashSet<string>(_KnownSelectFunctions.Peek()));
+ _KnownLBL.Push(new HashSet<string>(_KnownLBL.Peek()));
+ }
+
+ public void Pop()
+ {
+ Contract.Assert(_KnownFunctions.Count > 1);
+ _KnownFunctions.Pop();
+ _KnownVariables.Pop();
+ _KnownTypes.Pop();
+ _KnownStoreFunctions.Pop();
+ _KnownSelectFunctions.Pop();
+ _KnownLBL.Pop();
+ }
+
+ public List<string/*!>!*/> AllDeclarations { get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
+
+ List<string>/*!>!*/ res = new List<string/*!*/> ();
+ res.AddRange(AllDecls);
+ return res;
+ } }
+
+ public List<string/*!>!*/> GetNewDeclarations() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
+ List<string>/*!>!*/ res = new List<string/*!*/>();
+ res.AddRange(IncDecls);
+ IncDecls.Clear();
+ return res;
+ }
+
+ private void AddDeclaration(string decl) {
+ Contract.Requires(decl != null);
+ AllDecls.Add(decl);
+ IncDecls.Add(decl);
+ }
+
+ public void Collect(VCExpr expr) {
+ Contract.Requires(expr != null);
+ Traverse(expr, true);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ private static string TypeToString(Type t) {
+ Contract.Requires(t != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ return SMTLibExprLineariser.TypeToString(t);
+ }
+
+ public string TypeToStringReg(Type t)
+ {
+ RegisterType(t);
+ return TypeToString(t);
+ }
+
+ public void AddFunction(Function func) {
+ if (KnownFunctions.Contains(func))
+ return;
+ KnownFunctions.Add(func);
+ if(declHandler != null)
+ declHandler.FuncDecl(func);
+ }
+
+ public void RegisterRelation(Function func)
+ {
+ if (RegisteredRelations.Contains(func))
+ return;
+ RegisteredRelations.Add(func);
+ }
+
+ public override bool Visit(VCExprNAry node, bool arg) {
+ Contract.Requires(node != null);
+
+ if (node.Op is VCExprStoreOp) RegisterStore(node);
+ else if (node.Op is VCExprSelectOp) RegisterSelect(node);
+ else if (node.Op is VCExprSoftOp) {
+ var exprVar = node[0] as VCExprVar;
+ AddDeclaration(string.Format("(declare-fun {0} () Bool)", exprVar.Name));
+ AddDeclaration(string.Format("(assert-soft {0} :weight {1})", exprVar.Name, ((VCExprSoftOp)node.Op).Weight));
+ } else if (node.Op.Equals(VCExpressionGenerator.NamedAssumeOp)) {
+ var exprVar = node[0] as VCExprVar;
+ AddDeclaration(string.Format("(declare-fun {0} () Bool)", exprVar.Name));
+ if (CommandLineOptions.Clo.PrintNecessaryAssumes)
+ {
+ AddDeclaration(string.Format("(assert (! {0} :named {1}))", exprVar.Name, "aux$$" + exprVar.Name));
+ }
+ } else {
+ VCExprBoogieFunctionOp op = node.Op as VCExprBoogieFunctionOp;
+ if (op != null &&
+ !(op.Func is DatatypeConstructor) && !(op.Func is DatatypeMembership) && !(op.Func is DatatypeSelector) &&
+ !KnownFunctions.Contains(op.Func)) {
+ Function f = op.Func;
+ Contract.Assert(f != null);
+
+ var builtin = SMTLibExprLineariser.ExtractBuiltin(f);
+ if (builtin == null) {
+ string printedName = Namer.GetQuotedName(f, f.Name);
+ Contract.Assert(printedName != null);
+
+ Contract.Assert(f.OutParams.Count == 1);
+ var argTypes = f.InParams.Cast<Variable>().MapConcat(p => TypeToStringReg(p.TypedIdent.Type), " ");
+ string decl;
+ if(RegisteredRelations.Contains(op.Func))
+ decl = "(declare-rel " + printedName + " (" + argTypes + ") " + ")";
+ else
+ decl = "(declare-fun " + printedName + " (" + argTypes + ") " + TypeToStringReg(f.OutParams[0].TypedIdent.Type) + ")";
+ AddDeclaration(decl);
+ if (declHandler != null) declHandler.FuncDecl(f);
+ }
+ KnownFunctions.Add(f);
+ } else {
+ var lab = node.Op as VCExprLabelOp;
+ if (lab != null && !KnownLBL.Contains(lab.label)) {
+ KnownLBL.Add(lab.label);
+ var name = SMTLibNamer.QuoteId(SMTLibNamer.LabelVar(lab.label));
+ AddDeclaration("(declare-fun " + name + " () Bool)");
+ }
+ }
+ }
+
+ return base.Visit(node, arg);
+ }
+
+ public override bool Visit(VCExprVar node, bool arg) {
+ Contract.Requires(node != null);
+ if (!BoundTermVars.Contains(node) && !KnownVariables.Contains(node)) {
+ string printedName = Namer.GetQuotedName(node, node.Name);
+ Contract.Assert(printedName!=null);
+ RegisterType(node.Type);
+ string decl =
+ "(declare-fun " + printedName + " () " + TypeToString(node.Type) + ")";
+ if (!(printedName.StartsWith("assume$$") || printedName.StartsWith("soft$$") || printedName.StartsWith("try$$")))
+ {
+ AddDeclaration(decl);
+ }
+ KnownVariables.Add(node);
+ if(declHandler != null)
+ declHandler.VarDecl(node);
+ }
+
+ return base.Visit(node, arg);
+ }
+
+ public override bool Visit(VCExprQuantifier node, bool arg)
+ {
+ Contract.Requires(node != null);
+ foreach (VCExprVar v in node.BoundVars) {
+ Contract.Assert(v != null);
+ RegisterType(v.Type);
+ }
+
+ return base.Visit(node, arg);
+ }
+
+ private void RegisterType(Type type)
+ {
+ Contract.Requires(type != null);
+ if (KnownTypes.Contains(type)) return;
+
+ if (type.IsMap && CommandLineOptions.Clo.MonomorphicArrays) {
+ KnownTypes.Add(type);
+ MapType mapType = type.AsMap;
+ Contract.Assert(mapType != null);
+
+ foreach (Type t in mapType.Arguments) {
+ Contract.Assert(t != null);
+ RegisterType(t);
+ }
+ RegisterType(mapType.Result);
+
+ if (!CommandLineOptions.Clo.UseArrayTheory)
+ AddDeclaration("(declare-sort " + TypeToString(type) + " 0)");
+
+ return;
+ }
+
+ if (type.IsBool || type.IsInt || type.IsReal || type.IsFloat || type.IsBv)
+ return;
+
+ CtorType ctorType = type as CtorType;
+ if (ctorType != null && ctorType.IsDatatype())
+ return;
+
+ if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.Monomorphic) {
+ AddDeclaration("(declare-sort " + TypeToString(type) + " 0)");
+ KnownTypes.Add(type);
+ return;
+ }
+ }
+
+ private void RegisterSelect(VCExprNAry node)
+ {
+ RegisterType(node[0].Type);
+
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ return;
+
+ string name = SimplifyLikeExprLineariser.SelectOpName(node);
+ name = Namer.GetQuotedName(name, name);
+
+ if (!KnownSelectFunctions.Contains(name)) {
+ string decl = "(declare-fun " + name + " (" + node.MapConcat(n => TypeToString(n.Type), " ") + ") " + TypeToString(node.Type) + ")";
+ AddDeclaration(decl);
+ KnownSelectFunctions.Add(name);
+ }
+ }
+
+ private void RegisterStore(VCExprNAry node)
+ {
+ RegisterType(node.Type); // this is the map type, registering it should register also the index and value types
+
+ if (CommandLineOptions.Clo.UseArrayTheory)
+ return;
+
+ string name = SimplifyLikeExprLineariser.StoreOpName(node);
+ name = Namer.GetQuotedName(name, name);
+
+ if (!KnownStoreFunctions.Contains(name)) {
+ string decl = "(declare-fun " + name + " (" + node.MapConcat(n => TypeToString(n.Type), " ") + ") " + TypeToString(node.Type) + ")";
+ AddDeclaration(decl);
+
+ if (CommandLineOptions.Clo.MonomorphicArrays) {
+ var sel = SimplifyLikeExprLineariser.SelectOpName(node);
+ sel = Namer.GetQuotedName(sel, sel);
+
+ if (!KnownSelectFunctions.Contains(sel)) {
+ // need to declare it before reference
+ var args = node.SkipEnd(1);
+ var ret = node.Last();
+ string seldecl = "(declare-fun " + sel + " (" + args.MapConcat(n => TypeToString(n.Type), " ") + ") " + TypeToString(ret.Type) + ")";
+ AddDeclaration(seldecl);
+ KnownSelectFunctions.Add(sel);
+ }
+
+ string ax1 = "(assert (forall (";
+ string ax2 = "(assert (forall (";
+
+ string argX = "", argY = "";
+ string dist = "";
+ for (int i = 0; i < node.Arity; i++) {
+ var t = " " + TypeToString(node[i].Type);
+ var x = " ?x" + i;
+ var y = " ?y" + i;
+ ax1 += " (" + x + t + ")";
+ ax2 += " (" + x + t + ")";
+ if (i != 0 && i != node.Arity - 1) {
+ argX += x;
+ argY += y;
+ ax2 += " (" + y + t + ")";
+ dist += " (not (=" + x + y + "))";
+ }
+ }
+ string v = " ?x" + (node.Arity - 1);
+ ax1 += ") (= (" + sel + " (" + name + " ?x0" + argX + v + ")" + argX + ") " + v + ")";
+ ax1 += "))";
+
+ if (node.Arity > 3)
+ dist = "(or " + dist + ")";
+ ax2 += ") (=> " + dist + " (= (" + sel + " (" + name + " ?x0" + argX + v + ")" + argY + ") (" + sel + " ?x0" + argY + ")))";
+ ax2 += "))";
+
+ AddDeclaration(ax1);
+ AddDeclaration(ax2);
+ }
+
+ KnownStoreFunctions.Add(name);
+ }
+ //
+ }
+
+ }
+
} \ No newline at end of file
diff --git a/Source/Provers/SMTLib/Z3.cs b/Source/Provers/SMTLib/Z3.cs
index 250e04c9..f4bbbd6d 100644
--- a/Source/Provers/SMTLib/Z3.cs
+++ b/Source/Provers/SMTLib/Z3.cs
@@ -1,385 +1,387 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics.Contracts;
-using System.IO;
-using System.Text.RegularExpressions;
-
-namespace Microsoft.Boogie.SMTLib
-{
- class Z3
- {
- static string _proverPath;
-
- static string CodebaseString()
- {
- Contract.Ensures(Contract.Result<string>() != null);
- return Path.GetDirectoryName(cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location));
- }
-
- public static string ExecutablePath()
- {
- if (_proverPath == null)
- FindExecutable();
- return _proverPath;
- }
-
- static void FindExecutable()
- // throws ProverException, System.IO.FileNotFoundException;
- {
- Contract.Ensures(_proverPath != null);
-
- // Command line option 'z3exe' always has priority if set
- if (CommandLineOptions.Clo.Z3ExecutablePath != null)
- {
- _proverPath = CommandLineOptions.Clo.Z3ExecutablePath;
- if (!File.Exists(_proverPath))
- {
- throw new ProverException("Cannot find prover specified with z3exe: " + _proverPath);
- }
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("[TRACE] Using prover: " + _proverPath);
- }
- return;
- }
-
- var proverExe = "z3.exe";
-
- if (_proverPath == null)
- {
- // Initialize '_proverPath'
- _proverPath = Path.Combine(CodebaseString(), proverExe);
- string firstTry = _proverPath;
-
- if (File.Exists(firstTry))
- {
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("[TRACE] Using prover: " + _proverPath);
- }
- return;
- }
-
- List<string> z3Dirs = new List<string>();
- var msrDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Microsoft Research\");
- if (Directory.Exists(msrDir))
- {
- z3Dirs.AddRange(Directory.GetDirectories(msrDir, "Z3-*"));
- }
- var msrDirX86 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft Research\");
- if (Directory.Exists(msrDirX86))
- {
- z3Dirs.AddRange(Directory.GetDirectories(msrDirX86, "Z3-*"));
- }
-
- int minMajor = 3, minMinor = 2;
-
- // Look for the most recent version of Z3.
- int minor = 0, major = 0;
- string winner = null;
- Regex r = new Regex(@"^Z3-(\d+)\.(\d+)$");
- foreach (string d in z3Dirs)
- {
- string name = new DirectoryInfo(d).Name;
- foreach (Match m in r.Matches(name))
- {
- int ma, mi;
- ma = int.Parse(m.Groups[1].ToString());
- mi = int.Parse(m.Groups[2].ToString());
- if (major < ma || (major == ma && minor < mi))
- {
- major = ma;
- minor = mi;
- winner = d;
- }
- }
- }
-
- if (major == 0 && minor == 0)
- {
- throw new ProverException("Cannot find executable: " + firstTry);
- }
-
- Contract.Assert(winner != null);
-
- _proverPath = Path.Combine(Path.Combine(winner, "bin"), proverExe);
- if (!File.Exists(_proverPath))
- {
- throw new ProverException("Cannot find prover: " + _proverPath);
- }
-
- if (CommandLineOptions.Clo.Trace)
- {
- Console.WriteLine("[TRACE] Using prover: " + _proverPath);
- }
-
- if (major < minMajor || (major == minMajor && minor < minMinor))
- {
- throw new ProverException(string.Format("Found version {0}.{1} of Z3. Please install version {2}.{3} or later. " +
- "(More conservative users might opt to supply -prover:Z3 option instead to get the historic Simplify back-end)",
- major, minor, minMajor, minMinor));
- }
- }
- }
-
-
- static int Z3MajorVersion = 0;
- static int Z3MinorVersion = 0;
- static bool Z3VersionObtained = false;
-
- public static void GetVersion(out int major, out int minor)
- {
- if (!Z3VersionObtained)
- {
- var proc = new System.Diagnostics.Process();
- proc.StartInfo.FileName = _proverPath;
- proc.StartInfo.Arguments = "--version";
- proc.StartInfo.RedirectStandardOutput = true;
- proc.StartInfo.RedirectStandardError = true;
- proc.StartInfo.UseShellExecute = false;
- proc.StartInfo.CreateNoWindow = true;
- proc.Start();
- string answer = proc.StandardOutput.ReadToEnd();
- proc.WaitForExit();
- if (proc.ExitCode == 0)
- {
- var firstdot = answer.IndexOf('.');
- if (firstdot >= 0)
- {
- var seconddot = answer.IndexOf('.', firstdot + 1);
- if (seconddot >= firstdot + 1)
- {
- var spacebeforefirstdot = answer.LastIndexOf(' ', firstdot);
- if (spacebeforefirstdot >= 0)
- {
- var majorstr = answer.Substring(spacebeforefirstdot, firstdot - spacebeforefirstdot);
- var minorstr = answer.Substring(firstdot + 1, seconddot - firstdot - 1);
- Z3MajorVersion = Convert.ToInt32(majorstr);
- Z3MinorVersion = Convert.ToInt32(minorstr);
- }
- }
- }
- }
- Z3VersionObtained = true;
- }
- major = Z3MajorVersion;
- minor = Z3MinorVersion;
- }
-
- public static string SetTimeoutOption()
- {
- int major, minor;
- GetVersion(out major, out minor);
- if (major > 4 || major == 4 && minor >= 3)
- return "TIMEOUT";
- else
- return "SOFT_TIMEOUT";
- }
-
- // options that work only on the command line
- static string[] commandLineOnly = { "TRACE", "PROOF_MODE" };
-
-
- public static void SetupOptions(SMTLibProverOptions options)
- {
- FindExecutable();
- int major, minor;
- GetVersion(out major, out minor);
- if (major > 4 || major == 4 && minor >= 3)
- {
-
- bool fp = false; // CommandLineOptions.Clo.FixedPointEngine != null;
-
- // don't bother with auto-config - it would disable explicit settings for eager threshold and so on
- if(!fp) options.AddWeakSmtOption("AUTO_CONFIG", "false");
-
- //options.AddWeakSmtOption("MODEL_PARTIAL", "true");
- //options.WeakAddSmtOption("MODEL_VALUE_COMPLETION", "false");
-
- // options.AddWeakSmtOption("MODEL_HIDE_UNUSED_PARTITIONS", "false"); TODO: what does this do?
-
- // Make sure we get something that is parsable as a bitvector
- options.AddWeakSmtOption("pp.bv_literals", "false");
- if (!CommandLineOptions.Clo.UseSmtOutputFormat)
- {
- options.AddWeakSmtOption("MODEL.V2", "true");
- }
- //options.AddWeakSmtOption("ASYNC_COMMANDS", "false"); TODO: is this needed?
-
- if (!options.OptimizeForBv)
- {
- // Phase selection means to always try the negative literal polarity first, seems to be good for Boogie.
- // The restart parameters change the restart behavior to match Z3 v1, which also seems to be good.
- options.AddWeakSmtOption("smt.PHASE_SELECTION", "0");
- options.AddWeakSmtOption("smt.RESTART_STRATEGY", "0");
- options.AddWeakSmtOption("smt.RESTART_FACTOR", "|1.5|");
-
- // Make the integer model more diverse by default, speeds up some benchmarks a lot.
- options.AddWeakSmtOption("smt.ARITH.RANDOM_INITIAL_VALUE", "true");
-
- // The left-to-right structural case-splitting strategy.
- //options.AddWeakSmtOption("SORT_AND_OR", "false"); // always false now
-
- if (!fp) options.AddWeakSmtOption("smt.CASE_SPLIT", "3");
-
- // In addition delay adding unit conflicts.
- options.AddWeakSmtOption("smt.DELAY_UNITS", "true");
- //options.AddWeakSmtOption("DELAY_UNITS_THRESHOLD", "16"); TODO: what?
- }
-
- // This is used by VCC, but could be also useful for others, if sk_hack(foo(x)) is included as trigger,
- // the foo(x0) will be activated for e-matching when x is skolemized to x0.
- options.AddWeakSmtOption("NNF.SK_HACK", "true");
-
- // don't use model-based quantifier instantiation; it never finishes on non-trivial Boogie problems
- options.AddWeakSmtOption("smt.MBQI", "false");
-
- // More or less like MAM=0.
- options.AddWeakSmtOption("smt.QI.EAGER_THRESHOLD", "100");
- // Complex proof attempts in VCC (and likely elsewhere) require matching depth of 20 or more.
-
- // the following will make the :weight option more usable
- if (!fp) options.AddWeakSmtOption("smt.QI.COST", "|(+ weight generation)|"); // TODO: this doesn't seem to work
-
- //if (options.Inspector != null)
- // options.WeakAddSmtOption("PROGRESS_SAMPLING_FREQ", "100");
-
- options.AddWeakSmtOption("TYPE_CHECK", "true");
- options.AddWeakSmtOption("smt.BV.REFLECT", "true");
-
- if (options.TimeLimit > 0)
- {
- options.AddWeakSmtOption("TIMEOUT", options.TimeLimit.ToString());
- options.AddWeakSmtOption("fixedpoint.TIMEOUT", options.TimeLimit.ToString());
- // This kills the Z3 *instance* after the specified time, not a particular query, so we cannot use it.
- // options.AddSolverArgument("/T:" + (options.TimeLimit + 1000) / 1000);
- }
-
- if (options.Inspector != null)
- options.AddWeakSmtOption("PROGRESS_SAMPLING_FREQ", "200");
-
- if (CommandLineOptions.Clo.WeakArrayTheory)
- {
- options.AddWeakSmtOption("smt.array.weak", "true");
- options.AddWeakSmtOption("smt.array.extensional", "false");
- }
-
- if (CommandLineOptions.Clo.PrintConjectures != null)
- {
- options.AddWeakSmtOption("fixedpoint.conjecture_file", CommandLineOptions.Clo.PrintConjectures + ".tmp");
- }
- }
- else
- {
- // don't bother with auto-config - it would disable explicit settings for eager threshold and so on
- options.AddWeakSmtOption("AUTO_CONFIG", "false");
-
- //options.AddWeakSmtOption("MODEL_PARTIAL", "true");
- //options.WeakAddSmtOption("MODEL_VALUE_COMPLETION", "false");
- options.AddWeakSmtOption("MODEL_HIDE_UNUSED_PARTITIONS", "false");
- options.AddWeakSmtOption("ASYNC_COMMANDS", "false");
-
- if (CommandLineOptions.Clo.UseSmtOutputFormat)
- {
- options.AddWeakSmtOption("pp-bv-literals", "false"); ;
- }
- else
- {
- options.AddWeakSmtOption("MODEL_V2", "true");
- }
-
- if (!options.OptimizeForBv)
- {
- // Phase selection means to always try the negative literal polarity first, seems to be good for Boogie.
- // The restart parameters change the restart behavior to match Z3 v1, which also seems to be good.
- options.AddWeakSmtOption("PHASE_SELECTION", "0");
- options.AddWeakSmtOption("RESTART_STRATEGY", "0");
- options.AddWeakSmtOption("RESTART_FACTOR", "|1.5|");
-
- // Make the integer model more diverse by default, speeds up some benchmarks a lot.
- options.AddWeakSmtOption("ARITH_RANDOM_INITIAL_VALUE", "true");
-
- // The left-to-right structural case-splitting strategy.
- //options.AddWeakSmtOption("SORT_AND_OR", "false"); // always false now
- options.AddWeakSmtOption("CASE_SPLIT", "3");
-
- // In addition delay adding unit conflicts.
- options.AddWeakSmtOption("DELAY_UNITS", "true");
- options.AddWeakSmtOption("DELAY_UNITS_THRESHOLD", "16");
- }
-
- // This is used by VCC, but could be also useful for others, if sk_hack(foo(x)) is included as trigger,
- // the foo(x0) will be activated for e-matching when x is skolemized to x0.
- options.AddWeakSmtOption("NNF_SK_HACK", "true");
-
- // don't use model-based quantifier instantiation; it never finishes on non-trivial Boogie problems
- options.AddWeakSmtOption("MBQI", "false");
-
- // More or less like MAM=0.
- options.AddWeakSmtOption("QI_EAGER_THRESHOLD", "100");
- // Complex proof attempts in VCC (and likely elsewhere) require matching depth of 20 or more.
-
- // the following will make the :weight option more usable
- options.AddWeakSmtOption("QI_COST", "|\"(+ weight generation)\"|");
-
- //if (options.Inspector != null)
- // options.WeakAddSmtOption("PROGRESS_SAMPLING_FREQ", "100");
-
- options.AddWeakSmtOption("TYPE_CHECK", "true");
- options.AddWeakSmtOption("BV_REFLECT", "true");
-
- if (options.TimeLimit > 0)
- {
- options.AddWeakSmtOption("SOFT_TIMEOUT", options.TimeLimit.ToString());
- // This kills the Z3 *instance* after the specified time, not a particular query, so we cannot use it.
- // options.AddSolverArgument("/T:" + (options.TimeLimit + 1000) / 1000);
- }
-
- if (options.Inspector != null)
- options.AddWeakSmtOption("PROGRESS_SAMPLING_FREQ", "200");
-
- if (CommandLineOptions.Clo.WeakArrayTheory)
- {
- options.AddWeakSmtOption("ARRAY_WEAK", "true");
- options.AddWeakSmtOption("ARRAY_EXTENSIONAL", "false");
- }
-
- options.AddWeakSmtOption("MODEL_ON_TIMEOUT", "true");
-
- }
-
- // KLM: don't add Z3 options here. The options are different in different Z3 versions.
- // Add options in the above condition for the appropriate version.
-
- // legacy option handling
- if (!CommandLineOptions.Clo.z3AtFlag)
- options.MultiTraces = true;
-
-
- foreach (string opt in CommandLineOptions.Clo.Z3Options)
- {
- Contract.Assert(opt != null);
- int eq = opt.IndexOf("=");
- if (eq > 0 && 'A' <= opt[0] && opt[0] <= 'Z' && !commandLineOnly.Contains(opt.Substring(0, eq)))
- {
- options.AddSmtOption(opt.Substring(0, eq), opt.Substring(eq + 1));
- }
- else
- {
- options.AddSolverArgument(opt);
- }
- }
- }
-
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace Microsoft.Boogie.SMTLib
+{
+ class Z3
+ {
+ static string _proverPath;
+
+ static string CodebaseString()
+ {
+ Contract.Ensures(Contract.Result<string>() != null);
+ return Path.GetDirectoryName(cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location));
+ }
+
+ public static string ExecutablePath()
+ {
+ if (_proverPath == null)
+ FindExecutable();
+ return _proverPath;
+ }
+
+ static void FindExecutable()
+ // throws ProverException, System.IO.FileNotFoundException;
+ {
+ Contract.Ensures(_proverPath != null);
+
+ // Command line option 'z3exe' always has priority if set
+ if (CommandLineOptions.Clo.Z3ExecutablePath != null)
+ {
+ _proverPath = CommandLineOptions.Clo.Z3ExecutablePath;
+ if (!File.Exists(_proverPath))
+ {
+ throw new ProverException("Cannot find prover specified with z3exe: " + _proverPath);
+ }
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("[TRACE] Using prover: " + _proverPath);
+ }
+ return;
+ }
+
+ var proverExe = CommandLineOptions.Clo.Z3ExecutableName;
+ proverExe = proverExe == null ? "z3.exe" : proverExe;
+
+ if (_proverPath == null)
+ {
+ // Initialize '_proverPath'
+ _proverPath = Path.Combine(CodebaseString(), proverExe);
+ string firstTry = _proverPath;
+
+ if (File.Exists(firstTry))
+ {
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("[TRACE] Using prover: " + _proverPath);
+ }
+ return;
+ }
+
+ List<string> z3Dirs = new List<string>();
+ var msrDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Microsoft Research\");
+ if (Directory.Exists(msrDir))
+ {
+ z3Dirs.AddRange(Directory.GetDirectories(msrDir, "Z3-*"));
+ }
+ var msrDirX86 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft Research\");
+ if (Directory.Exists(msrDirX86))
+ {
+ z3Dirs.AddRange(Directory.GetDirectories(msrDirX86, "Z3-*"));
+ }
+
+ int minMajor = 3, minMinor = 2;
+
+ // Look for the most recent version of Z3.
+ int minor = 0, major = 0;
+ string winner = null;
+ Regex r = new Regex(@"^Z3-(\d+)\.(\d+)$");
+ foreach (string d in z3Dirs)
+ {
+ string name = new DirectoryInfo(d).Name;
+ foreach (Match m in r.Matches(name))
+ {
+ int ma, mi;
+ ma = int.Parse(m.Groups[1].ToString());
+ mi = int.Parse(m.Groups[2].ToString());
+ if (major < ma || (major == ma && minor < mi))
+ {
+ major = ma;
+ minor = mi;
+ winner = d;
+ }
+ }
+ }
+
+ if (major == 0 && minor == 0)
+ {
+ throw new ProverException("Cannot find executable: " + firstTry);
+ }
+
+ Contract.Assert(winner != null);
+
+ _proverPath = Path.Combine(Path.Combine(winner, "bin"), proverExe);
+ if (!File.Exists(_proverPath))
+ {
+ throw new ProverException("Cannot find prover: " + _proverPath);
+ }
+
+ if (CommandLineOptions.Clo.Trace)
+ {
+ Console.WriteLine("[TRACE] Using prover: " + _proverPath);
+ }
+
+ if (major < minMajor || (major == minMajor && minor < minMinor))
+ {
+ throw new ProverException(string.Format("Found version {0}.{1} of Z3. Please install version {2}.{3} or later. " +
+ "(More conservative users might opt to supply -prover:Z3 option instead to get the historic Simplify back-end)",
+ major, minor, minMajor, minMinor));
+ }
+ }
+ }
+
+
+ static int Z3MajorVersion = 0;
+ static int Z3MinorVersion = 0;
+ static bool Z3VersionObtained = false;
+
+ public static void GetVersion(out int major, out int minor)
+ {
+ if (!Z3VersionObtained)
+ {
+ var proc = new System.Diagnostics.Process();
+ proc.StartInfo.FileName = _proverPath;
+ proc.StartInfo.Arguments = "--version";
+ proc.StartInfo.RedirectStandardOutput = true;
+ proc.StartInfo.RedirectStandardError = true;
+ proc.StartInfo.UseShellExecute = false;
+ proc.StartInfo.CreateNoWindow = true;
+ proc.Start();
+ string answer = proc.StandardOutput.ReadToEnd();
+ proc.WaitForExit();
+ if (proc.ExitCode == 0)
+ {
+ var firstdot = answer.IndexOf('.');
+ if (firstdot >= 0)
+ {
+ var seconddot = answer.IndexOf('.', firstdot + 1);
+ if (seconddot >= firstdot + 1)
+ {
+ var spacebeforefirstdot = answer.LastIndexOf(' ', firstdot);
+ if (spacebeforefirstdot >= 0)
+ {
+ var majorstr = answer.Substring(spacebeforefirstdot, firstdot - spacebeforefirstdot);
+ var minorstr = answer.Substring(firstdot + 1, seconddot - firstdot - 1);
+ Z3MajorVersion = Convert.ToInt32(majorstr);
+ Z3MinorVersion = Convert.ToInt32(minorstr);
+ }
+ }
+ }
+ }
+ Z3VersionObtained = true;
+ }
+ major = Z3MajorVersion;
+ minor = Z3MinorVersion;
+ }
+
+ public static string SetTimeoutOption()
+ {
+ int major, minor;
+ GetVersion(out major, out minor);
+ if (major > 4 || major == 4 && minor >= 3)
+ return "TIMEOUT";
+ else
+ return "SOFT_TIMEOUT";
+ }
+
+ // options that work only on the command line
+ static string[] commandLineOnly = { "TRACE", "PROOF_MODE" };
+
+
+ public static void SetupOptions(SMTLibProverOptions options)
+ {
+ FindExecutable();
+ int major, minor;
+ GetVersion(out major, out minor);
+ if (major > 4 || major == 4 && minor >= 3)
+ {
+
+ bool fp = false; // CommandLineOptions.Clo.FixedPointEngine != null;
+
+ // don't bother with auto-config - it would disable explicit settings for eager threshold and so on
+ if(!fp) options.AddWeakSmtOption("AUTO_CONFIG", "false");
+
+ //options.AddWeakSmtOption("MODEL_PARTIAL", "true");
+ //options.WeakAddSmtOption("MODEL_VALUE_COMPLETION", "false");
+
+ // options.AddWeakSmtOption("MODEL_HIDE_UNUSED_PARTITIONS", "false"); TODO: what does this do?
+
+ // Make sure we get something that is parsable as a bitvector
+ options.AddWeakSmtOption("pp.bv_literals", "false");
+ if (!CommandLineOptions.Clo.UseSmtOutputFormat)
+ {
+ options.AddWeakSmtOption("MODEL.V2", "true");
+ }
+ //options.AddWeakSmtOption("ASYNC_COMMANDS", "false"); TODO: is this needed?
+
+ if (!options.OptimizeForBv)
+ {
+ // Phase selection means to always try the negative literal polarity first, seems to be good for Boogie.
+ // The restart parameters change the restart behavior to match Z3 v1, which also seems to be good.
+ options.AddWeakSmtOption("smt.PHASE_SELECTION", "0");
+ options.AddWeakSmtOption("smt.RESTART_STRATEGY", "0");
+ options.AddWeakSmtOption("smt.RESTART_FACTOR", "|1.5|");
+
+ // Make the integer model more diverse by default, speeds up some benchmarks a lot.
+ options.AddWeakSmtOption("smt.ARITH.RANDOM_INITIAL_VALUE", "true");
+
+ // The left-to-right structural case-splitting strategy.
+ //options.AddWeakSmtOption("SORT_AND_OR", "false"); // always false now
+
+ if (!fp) options.AddWeakSmtOption("smt.CASE_SPLIT", "3");
+
+ // In addition delay adding unit conflicts.
+ options.AddWeakSmtOption("smt.DELAY_UNITS", "true");
+ //options.AddWeakSmtOption("DELAY_UNITS_THRESHOLD", "16"); TODO: what?
+ }
+
+ // This is used by VCC, but could be also useful for others, if sk_hack(foo(x)) is included as trigger,
+ // the foo(x0) will be activated for e-matching when x is skolemized to x0.
+ options.AddWeakSmtOption("NNF.SK_HACK", "true");
+
+ // don't use model-based quantifier instantiation; it never finishes on non-trivial Boogie problems
+ options.AddWeakSmtOption("smt.MBQI", "false");
+
+ // More or less like MAM=0.
+ options.AddWeakSmtOption("smt.QI.EAGER_THRESHOLD", "100");
+ // Complex proof attempts in VCC (and likely elsewhere) require matching depth of 20 or more.
+
+ // the following will make the :weight option more usable
+ // KLM: this QI cost function is the default
+ // if (!fp) options.AddWeakSmtOption("smt.QI.COST", "|(+ weight generation)|"); // TODO: this doesn't seem to work
+
+ //if (options.Inspector != null)
+ // options.WeakAddSmtOption("PROGRESS_SAMPLING_FREQ", "100");
+
+ options.AddWeakSmtOption("TYPE_CHECK", "true");
+ options.AddWeakSmtOption("smt.BV.REFLECT", "true");
+
+ if (options.TimeLimit > 0)
+ {
+ options.AddWeakSmtOption("TIMEOUT", options.TimeLimit.ToString());
+ options.AddWeakSmtOption("fixedpoint.TIMEOUT", options.TimeLimit.ToString());
+ // This kills the Z3 *instance* after the specified time, not a particular query, so we cannot use it.
+ // options.AddSolverArgument("/T:" + (options.TimeLimit + 1000) / 1000);
+ }
+
+ if (options.Inspector != null)
+ options.AddWeakSmtOption("PROGRESS_SAMPLING_FREQ", "200");
+
+ if (CommandLineOptions.Clo.WeakArrayTheory)
+ {
+ options.AddWeakSmtOption("smt.array.weak", "true");
+ options.AddWeakSmtOption("smt.array.extensional", "false");
+ }
+
+ if (CommandLineOptions.Clo.PrintConjectures != null)
+ {
+ options.AddWeakSmtOption("fixedpoint.conjecture_file", CommandLineOptions.Clo.PrintConjectures + ".tmp");
+ }
+ }
+ else
+ {
+ // don't bother with auto-config - it would disable explicit settings for eager threshold and so on
+ options.AddWeakSmtOption("AUTO_CONFIG", "false");
+
+ //options.AddWeakSmtOption("MODEL_PARTIAL", "true");
+ //options.WeakAddSmtOption("MODEL_VALUE_COMPLETION", "false");
+ options.AddWeakSmtOption("MODEL_HIDE_UNUSED_PARTITIONS", "false");
+ options.AddWeakSmtOption("ASYNC_COMMANDS", "false");
+
+ if (CommandLineOptions.Clo.UseSmtOutputFormat)
+ {
+ options.AddWeakSmtOption("pp-bv-literals", "false"); ;
+ }
+ else
+ {
+ options.AddWeakSmtOption("MODEL_V2", "true");
+ }
+
+ if (!options.OptimizeForBv)
+ {
+ // Phase selection means to always try the negative literal polarity first, seems to be good for Boogie.
+ // The restart parameters change the restart behavior to match Z3 v1, which also seems to be good.
+ options.AddWeakSmtOption("PHASE_SELECTION", "0");
+ options.AddWeakSmtOption("RESTART_STRATEGY", "0");
+ options.AddWeakSmtOption("RESTART_FACTOR", "|1.5|");
+
+ // Make the integer model more diverse by default, speeds up some benchmarks a lot.
+ options.AddWeakSmtOption("ARITH_RANDOM_INITIAL_VALUE", "true");
+
+ // The left-to-right structural case-splitting strategy.
+ //options.AddWeakSmtOption("SORT_AND_OR", "false"); // always false now
+ options.AddWeakSmtOption("CASE_SPLIT", "3");
+
+ // In addition delay adding unit conflicts.
+ options.AddWeakSmtOption("DELAY_UNITS", "true");
+ options.AddWeakSmtOption("DELAY_UNITS_THRESHOLD", "16");
+ }
+
+ // This is used by VCC, but could be also useful for others, if sk_hack(foo(x)) is included as trigger,
+ // the foo(x0) will be activated for e-matching when x is skolemized to x0.
+ options.AddWeakSmtOption("NNF_SK_HACK", "true");
+
+ // don't use model-based quantifier instantiation; it never finishes on non-trivial Boogie problems
+ options.AddWeakSmtOption("MBQI", "false");
+
+ // More or less like MAM=0.
+ options.AddWeakSmtOption("QI_EAGER_THRESHOLD", "100");
+ // Complex proof attempts in VCC (and likely elsewhere) require matching depth of 20 or more.
+
+ // the following will make the :weight option more usable
+ options.AddWeakSmtOption("QI_COST", "|\"(+ weight generation)\"|");
+
+ //if (options.Inspector != null)
+ // options.WeakAddSmtOption("PROGRESS_SAMPLING_FREQ", "100");
+
+ options.AddWeakSmtOption("TYPE_CHECK", "true");
+ options.AddWeakSmtOption("BV_REFLECT", "true");
+
+ if (options.TimeLimit > 0)
+ {
+ options.AddWeakSmtOption("SOFT_TIMEOUT", options.TimeLimit.ToString());
+ // This kills the Z3 *instance* after the specified time, not a particular query, so we cannot use it.
+ // options.AddSolverArgument("/T:" + (options.TimeLimit + 1000) / 1000);
+ }
+
+ if (options.Inspector != null)
+ options.AddWeakSmtOption("PROGRESS_SAMPLING_FREQ", "200");
+
+ if (CommandLineOptions.Clo.WeakArrayTheory)
+ {
+ options.AddWeakSmtOption("ARRAY_WEAK", "true");
+ options.AddWeakSmtOption("ARRAY_EXTENSIONAL", "false");
+ }
+
+ options.AddWeakSmtOption("MODEL_ON_TIMEOUT", "true");
+
+ }
+
+ // KLM: don't add Z3 options here. The options are different in different Z3 versions.
+ // Add options in the above condition for the appropriate version.
+
+ // legacy option handling
+ if (!CommandLineOptions.Clo.z3AtFlag)
+ options.MultiTraces = true;
+
+
+ foreach (string opt in CommandLineOptions.Clo.Z3Options)
+ {
+ Contract.Assert(opt != null);
+ int eq = opt.IndexOf("=");
+ if (eq > 0 && 'A' <= opt[0] && opt[0] <= 'Z' && !commandLineOnly.Contains(opt.Substring(0, eq)))
+ {
+ options.AddSmtOption(opt.Substring(0, eq), opt.Substring(eq + 1));
+ }
+ else
+ {
+ options.AddSolverArgument(opt);
+ }
+ }
+ }
+
+
+ }
+}
diff --git a/Source/Provers/SMTLib/cce.cs b/Source/Provers/SMTLib/cce.cs
index ef594484..1e0b12a5 100644
--- a/Source/Provers/SMTLib/cce.cs
+++ b/Source/Provers/SMTLib/cce.cs
@@ -1,193 +1,193 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
- }
- //[Pure]
- //public static bool NonNullElements(VariableSeq collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
- return iEnumerator != null;
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
- //[Pure]
- //public static bool IsValid(Microsoft.Dafny.Expression expression) {
- // return true;
- //}
- //public static List<T> toList<T>(PureCollections.Sequence s) {
- // List<T> toRet = new List<T>();
- // foreach (T t in s.elems)
- // if(t!=null)
- // toRet.Add(t);
- // return toRet;
- //}
-
- //internal static bool NonNullElements(Set set) {
- // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
- //}
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
+ }
+ //[Pure]
+ //public static bool NonNullElements(VariableSeq collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
+ return iEnumerator != null;
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+ //[Pure]
+ //public static bool IsValid(Microsoft.Dafny.Expression expression) {
+ // return true;
+ //}
+ //public static List<T> toList<T>(PureCollections.Sequence s) {
+ // List<T> toRet = new List<T>();
+ // foreach (T t in s.elems)
+ // if(t!=null)
+ // toRet.Add(t);
+ // return toRet;
+ //}
+
+ //internal static bool NonNullElements(Set set) {
+ // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
+ //}
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/Provers/TPTP/ProverInterface.cs b/Source/Provers/TPTP/ProverInterface.cs
index b714ed67..669c459f 100644
--- a/Source/Provers/TPTP/ProverInterface.cs
+++ b/Source/Provers/TPTP/ProverInterface.cs
@@ -1,351 +1,351 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.IO;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie;
-using Microsoft.Boogie.VCExprAST;
-using Microsoft.Boogie.Clustering;
-using Microsoft.Boogie.TypeErasure;
-using Microsoft.Boogie.Simplify;
-
-namespace Microsoft.Boogie.TPTP
-{
- public class TPTPProverOptions : ProverOptions
- {
- public string Output = "boogie-vc-@PROC@.tptp";
- public bool UsePredicates = false;
-
- protected override bool Parse(string opt)
- {
- return
- ParseString(opt, "OUTPUT", ref Output) ||
- ParseBool(opt, "USE_PREDICATES", ref UsePredicates) ||
- base.Parse(opt);
- }
-
- public override string Help
- {
- get
- {
- return
-@"
-TPTP-specific options:
-~~~~~~~~~~~~~~~~~~~~~~
-OUTPUT=<string> Store VC in named file. Defaults to boogie-vc-@PROC@.tptp.
-USE_PREDICATES=<bool> Try to use SMT predicates for functions returning bool.
-
-" + base.Help;
- // DIST requires non-public binaries
- }
- }
- }
-
- public class TPTPProcessTheoremProver : LogProverInterface
- {
- private readonly DeclFreeProverContext ctx;
- private readonly VCExpressionGenerator Gen;
-
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(ctx != null);
- Contract.Invariant(AxBuilder != null);
- Contract.Invariant(Namer != null);
- Contract.Invariant(DeclCollector != null);
- Contract.Invariant(cce.NonNullElements(Axioms));
- Contract.Invariant(cce.NonNullElements(TypeDecls));
- Contract.Invariant(_backgroundPredicates != null);
-
- }
-
-
- [NotDelayed]
- public TPTPProcessTheoremProver(ProverOptions options, VCExpressionGenerator gen,
- DeclFreeProverContext ctx)
- : base(options, "", "", "", "", gen)
- {
- Contract.Requires(options != null);
- Contract.Requires(gen != null);
- Contract.Requires(ctx != null);
-
- // No bg predicate at the moment
- // InitializeGlobalInformation("UnivBackPred.tptp");
-
- this.ctx = ctx;
- this.Gen = gen;
-
- TypeAxiomBuilder axBuilder;
- switch (CommandLineOptions.Clo.TypeEncodingMethod) {
- case CommandLineOptions.TypeEncoding.Arguments:
- axBuilder = new TypeAxiomBuilderArguments(gen);
- axBuilder.Setup();
- break;
- case CommandLineOptions.TypeEncoding.Monomorphic:
- axBuilder = new TypeAxiomBuilderPremisses(gen);
- break;
- default:
- axBuilder = new TypeAxiomBuilderPremisses(gen);
- axBuilder.Setup();
- break;
- }
- AxBuilder = axBuilder;
- UniqueNamer namer = new UniqueNamer();
- Namer = namer;
- Namer.Spacer = "__";
- this.DeclCollector = new TypeDeclCollector(namer);
-
- }
-
- public override ProverContext Context
- {
- get
- {
- Contract.Ensures(Contract.Result<ProverContext>() != null);
-
- return ctx;
- }
- }
-
- private readonly TypeAxiomBuilder AxBuilder;
- private readonly UniqueNamer Namer;
- private readonly TypeDeclCollector DeclCollector;
-
- private void FeedTypeDeclsToProver()
- {
- foreach (string s in DeclCollector.GetNewDeclarations()) {
- Contract.Assert(s != null);
- AddTypeDecl(s);
- }
- }
-
- public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler)
- {
- //Contract.Requires(descriptiveName != null);
- //Contract.Requires(vc != null);
- //Contract.Requires(handler != null);
- TextWriter output = OpenOutputFile(descriptiveName);
- Contract.Assert(output != null);
-
- WriteLineAndLog(output, "%------------------------------------------------------------------------------");
- WriteLineAndLog(output, "% Boogie benchmark: " + descriptiveName);
- WriteLineAndLog(output, "%------------------------------------------------------------------------------");
-
- WriteLineAndLog(output, _backgroundPredicates);
-
- if (!AxiomsAreSetup) {
- AddAxiom(VCExpr2String(ctx.Axioms, -1));
- AxiomsAreSetup = true;
- }
-
- string vcString = "fof(vc, conjecture, " + VCExpr2String(vc, 1) + ").";
-
- foreach (string s in TypeDecls) {
- Contract.Assert(s != null);
- WriteLineAndLog(output, s);
- }
- int id = 0;
- foreach (string s in Axioms) {
- Contract.Assert(s != null);
- WriteLineAndLog(output, "fof(ax" + id++ + ", axiom,");
- WriteLineAndLog(output, s);
- WriteLineAndLog(output, ").");
- }
-
- WriteLineAndLog(output, vcString);
-
- output.Close();
- }
-
- public TPTPProverOptions Options
- {
- get { return (TPTPProverOptions)this.options; }
- }
-
- private TextWriter OpenOutputFile(string descriptiveName)
- {
- Contract.Requires(descriptiveName != null);
- Contract.Ensures(Contract.Result<TextWriter>() != null);
-
- string filename = Options.Output;
- filename = Helpers.SubstituteAtPROC(descriptiveName, cce.NonNull(filename));
- return new StreamWriter(filename, false);
- }
-
- private void WriteLineAndLog(TextWriter output, string msg)
- {
- Contract.Requires(output != null);
- Contract.Requires(msg != null);
- LogActivity(msg);
- output.WriteLine(msg);
- }
-
- [NoDefaultContract]
- public override Outcome CheckOutcome(ErrorHandler handler)
- { //Contract.Requires(handler != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- return Outcome.Undetermined;
- }
-
- protected string VCExpr2String(VCExpr expr, int polarity)
- {
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- DateTime start = DateTime.UtcNow;
- if (CommandLineOptions.Clo.Trace)
- Console.Write("Linearising ... ");
-
- // handle the types in the VCExpr
- TypeEraser eraser;
- switch (CommandLineOptions.Clo.TypeEncodingMethod) {
- case CommandLineOptions.TypeEncoding.Arguments:
- eraser = new TypeEraserArguments((TypeAxiomBuilderArguments)AxBuilder, gen);
- break;
- case CommandLineOptions.TypeEncoding.Monomorphic:
- eraser = null;
- break;
- default:
- eraser = new TypeEraserPremisses((TypeAxiomBuilderPremisses)AxBuilder, gen);
- break;
- }
- VCExpr exprWithoutTypes = eraser == null ? expr : eraser.Erase(expr, polarity);
- Contract.Assert(exprWithoutTypes != null);
-
- var letImplier = new Let2ImpliesMutator(Gen);
- var flattener = new TermFormulaFlattener(Gen);
- var exprWithLet = flattener.Flatten(exprWithoutTypes);
- var exprWithoutLet = letImplier.Mutate(exprWithLet);
-
- var axiomsWithLet = flattener.Flatten(AxBuilder.GetNewAxioms());
- var axiomsWithoutLet = letImplier.Mutate(axiomsWithLet);
-
- DeclCollector.Collect(axiomsWithoutLet);
- DeclCollector.Collect(exprWithoutLet);
- FeedTypeDeclsToProver();
-
- AddAxiom(TPTPExprLineariser.ToString(axiomsWithoutLet, Namer, Options));
- string res = TPTPExprLineariser.ToString(exprWithoutLet, Namer, Options);
- Contract.Assert(res != null);
-
- if (CommandLineOptions.Clo.Trace) {
- DateTime end = DateTime.UtcNow;
- TimeSpan elapsed = end - start;
- Console.WriteLine("finished [{0} s]", elapsed.TotalSeconds);
- }
- return res;
- }
-
- // the list of all known axioms, where have to be included in each
- // verification condition
- private readonly List<string/*!>!*/> Axioms = new List<string/*!*/>();
- private bool AxiomsAreSetup = false;
-
-
-
-
- // similarly, a list of function/predicate declarations
- private readonly List<string/*!>!*/> TypeDecls = new List<string/*!*/>();
-
- protected void AddAxiom(string axiom)
- {
- Contract.Requires(axiom != null);
- Axioms.Add(axiom);
- // if (thmProver != null) {
- // LogActivity(":assume " + axiom);
- // thmProver.AddAxioms(axiom);
- // }
- }
-
- protected void AddTypeDecl(string decl)
- {
- Contract.Requires(decl != null);
- TypeDecls.Add(decl);
- // if (thmProver != null) {
- // LogActivity(decl);
- // thmProver.Feed(decl, 0);
- // }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private static string _backgroundPredicates = "";
-
- static void InitializeGlobalInformation(string backgroundPred)
- {
- Contract.Requires(backgroundPred != null);
- Contract.Ensures(_backgroundPredicates != null);
- //throws ProverException, System.IO.FileNotFoundException;
- if (_backgroundPredicates == null) {
- string codebaseString =
- cce.NonNull(Path.GetDirectoryName(cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location)));
-
- // Initialize '_backgroundPredicates'
- string univBackPredPath = Path.Combine(codebaseString, backgroundPred);
- using (StreamReader reader = new System.IO.StreamReader(univBackPredPath)) {
- _backgroundPredicates = reader.ReadToEnd();
- }
- }
- }
- }
-
- public class Factory : ProverFactory
- {
-
- public override object SpawnProver(ProverOptions options, object ctxt)
- {
- //Contract.Requires(ctxt != null);
- //Contract.Requires(options != null);
- Contract.Ensures(Contract.Result<object>() != null);
-
- return this.SpawnProver(options,
- cce.NonNull((DeclFreeProverContext)ctxt).ExprGen,
- cce.NonNull((DeclFreeProverContext)ctxt));
- }
-
- public override object NewProverContext(ProverOptions options)
- {
- //Contract.Requires(options != null);
- Contract.Ensures(Contract.Result<object>() != null);
-
- if (CommandLineOptions.Clo.BracketIdsInVC < 0) {
- CommandLineOptions.Clo.BracketIdsInVC = 0;
- }
-
- VCExpressionGenerator gen = new VCExpressionGenerator();
- List<string>/*!>!*/ proverCommands = new List<string/*!*/>();
- proverCommands.Add("tptp");
- proverCommands.Add("external");
- VCGenerationOptions genOptions = new VCGenerationOptions(proverCommands);
- Contract.Assert(genOptions != null);
-
- return new DeclFreeProverContext(gen, genOptions);
- }
-
- public override ProverOptions BlankProverOptions()
- {
- return new TPTPProverOptions();
- }
-
- protected virtual TPTPProcessTheoremProver SpawnProver(ProverOptions options,
- VCExpressionGenerator gen,
- DeclFreeProverContext ctx)
- {
- Contract.Requires(options != null);
- Contract.Requires(gen != null);
- Contract.Requires(ctx != null);
- Contract.Ensures(Contract.Result<TPTPProcessTheoremProver>() != null);
-
- return new TPTPProcessTheoremProver(options, gen, ctx);
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.IO;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie;
+using Microsoft.Boogie.VCExprAST;
+using Microsoft.Boogie.Clustering;
+using Microsoft.Boogie.TypeErasure;
+using Microsoft.Boogie.Simplify;
+
+namespace Microsoft.Boogie.TPTP
+{
+ public class TPTPProverOptions : ProverOptions
+ {
+ public string Output = "boogie-vc-@PROC@.tptp";
+ public bool UsePredicates = false;
+
+ protected override bool Parse(string opt)
+ {
+ return
+ ParseString(opt, "OUTPUT", ref Output) ||
+ ParseBool(opt, "USE_PREDICATES", ref UsePredicates) ||
+ base.Parse(opt);
+ }
+
+ public override string Help
+ {
+ get
+ {
+ return
+@"
+TPTP-specific options:
+~~~~~~~~~~~~~~~~~~~~~~
+OUTPUT=<string> Store VC in named file. Defaults to boogie-vc-@PROC@.tptp.
+USE_PREDICATES=<bool> Try to use SMT predicates for functions returning bool.
+
+" + base.Help;
+ // DIST requires non-public binaries
+ }
+ }
+ }
+
+ public class TPTPProcessTheoremProver : LogProverInterface
+ {
+ private readonly DeclFreeProverContext ctx;
+ private readonly VCExpressionGenerator Gen;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(ctx != null);
+ Contract.Invariant(AxBuilder != null);
+ Contract.Invariant(Namer != null);
+ Contract.Invariant(DeclCollector != null);
+ Contract.Invariant(cce.NonNullElements(Axioms));
+ Contract.Invariant(cce.NonNullElements(TypeDecls));
+ Contract.Invariant(_backgroundPredicates != null);
+
+ }
+
+
+ [NotDelayed]
+ public TPTPProcessTheoremProver(ProverOptions options, VCExpressionGenerator gen,
+ DeclFreeProverContext ctx)
+ : base(options, "", "", "", "", gen)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(gen != null);
+ Contract.Requires(ctx != null);
+
+ // No bg predicate at the moment
+ // InitializeGlobalInformation("UnivBackPred.tptp");
+
+ this.ctx = ctx;
+ this.Gen = gen;
+
+ TypeAxiomBuilder axBuilder;
+ switch (CommandLineOptions.Clo.TypeEncodingMethod) {
+ case CommandLineOptions.TypeEncoding.Arguments:
+ axBuilder = new TypeAxiomBuilderArguments(gen);
+ axBuilder.Setup();
+ break;
+ case CommandLineOptions.TypeEncoding.Monomorphic:
+ axBuilder = new TypeAxiomBuilderPremisses(gen);
+ break;
+ default:
+ axBuilder = new TypeAxiomBuilderPremisses(gen);
+ axBuilder.Setup();
+ break;
+ }
+ AxBuilder = axBuilder;
+ UniqueNamer namer = new UniqueNamer();
+ Namer = namer;
+ Namer.Spacer = "__";
+ this.DeclCollector = new TypeDeclCollector(namer);
+
+ }
+
+ public override ProverContext Context
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<ProverContext>() != null);
+
+ return ctx;
+ }
+ }
+
+ private readonly TypeAxiomBuilder AxBuilder;
+ private readonly UniqueNamer Namer;
+ private readonly TypeDeclCollector DeclCollector;
+
+ private void FeedTypeDeclsToProver()
+ {
+ foreach (string s in DeclCollector.GetNewDeclarations()) {
+ Contract.Assert(s != null);
+ AddTypeDecl(s);
+ }
+ }
+
+ public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler)
+ {
+ //Contract.Requires(descriptiveName != null);
+ //Contract.Requires(vc != null);
+ //Contract.Requires(handler != null);
+ TextWriter output = OpenOutputFile(descriptiveName);
+ Contract.Assert(output != null);
+
+ WriteLineAndLog(output, "%------------------------------------------------------------------------------");
+ WriteLineAndLog(output, "% Boogie benchmark: " + descriptiveName);
+ WriteLineAndLog(output, "%------------------------------------------------------------------------------");
+
+ WriteLineAndLog(output, _backgroundPredicates);
+
+ if (!AxiomsAreSetup) {
+ AddAxiom(VCExpr2String(ctx.Axioms, -1));
+ AxiomsAreSetup = true;
+ }
+
+ string vcString = "fof(vc, conjecture, " + VCExpr2String(vc, 1) + ").";
+
+ foreach (string s in TypeDecls) {
+ Contract.Assert(s != null);
+ WriteLineAndLog(output, s);
+ }
+ int id = 0;
+ foreach (string s in Axioms) {
+ Contract.Assert(s != null);
+ WriteLineAndLog(output, "fof(ax" + id++ + ", axiom,");
+ WriteLineAndLog(output, s);
+ WriteLineAndLog(output, ").");
+ }
+
+ WriteLineAndLog(output, vcString);
+
+ output.Close();
+ }
+
+ public TPTPProverOptions Options
+ {
+ get { return (TPTPProverOptions)this.options; }
+ }
+
+ private TextWriter OpenOutputFile(string descriptiveName)
+ {
+ Contract.Requires(descriptiveName != null);
+ Contract.Ensures(Contract.Result<TextWriter>() != null);
+
+ string filename = Options.Output;
+ filename = Helpers.SubstituteAtPROC(descriptiveName, cce.NonNull(filename));
+ return new StreamWriter(filename, false);
+ }
+
+ private void WriteLineAndLog(TextWriter output, string msg)
+ {
+ Contract.Requires(output != null);
+ Contract.Requires(msg != null);
+ LogActivity(msg);
+ output.WriteLine(msg);
+ }
+
+ [NoDefaultContract]
+ public override Outcome CheckOutcome(ErrorHandler handler)
+ { //Contract.Requires(handler != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ return Outcome.Undetermined;
+ }
+
+ protected string VCExpr2String(VCExpr expr, int polarity)
+ {
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ DateTime start = DateTime.UtcNow;
+ if (CommandLineOptions.Clo.Trace)
+ Console.Write("Linearising ... ");
+
+ // handle the types in the VCExpr
+ TypeEraser eraser;
+ switch (CommandLineOptions.Clo.TypeEncodingMethod) {
+ case CommandLineOptions.TypeEncoding.Arguments:
+ eraser = new TypeEraserArguments((TypeAxiomBuilderArguments)AxBuilder, gen);
+ break;
+ case CommandLineOptions.TypeEncoding.Monomorphic:
+ eraser = null;
+ break;
+ default:
+ eraser = new TypeEraserPremisses((TypeAxiomBuilderPremisses)AxBuilder, gen);
+ break;
+ }
+ VCExpr exprWithoutTypes = eraser == null ? expr : eraser.Erase(expr, polarity);
+ Contract.Assert(exprWithoutTypes != null);
+
+ var letImplier = new Let2ImpliesMutator(Gen);
+ var flattener = new TermFormulaFlattener(Gen);
+ var exprWithLet = flattener.Flatten(exprWithoutTypes);
+ var exprWithoutLet = letImplier.Mutate(exprWithLet);
+
+ var axiomsWithLet = flattener.Flatten(AxBuilder.GetNewAxioms());
+ var axiomsWithoutLet = letImplier.Mutate(axiomsWithLet);
+
+ DeclCollector.Collect(axiomsWithoutLet);
+ DeclCollector.Collect(exprWithoutLet);
+ FeedTypeDeclsToProver();
+
+ AddAxiom(TPTPExprLineariser.ToString(axiomsWithoutLet, Namer, Options));
+ string res = TPTPExprLineariser.ToString(exprWithoutLet, Namer, Options);
+ Contract.Assert(res != null);
+
+ if (CommandLineOptions.Clo.Trace) {
+ DateTime end = DateTime.UtcNow;
+ TimeSpan elapsed = end - start;
+ Console.WriteLine("finished [{0} s]", elapsed.TotalSeconds);
+ }
+ return res;
+ }
+
+ // the list of all known axioms, where have to be included in each
+ // verification condition
+ private readonly List<string/*!>!*/> Axioms = new List<string/*!*/>();
+ private bool AxiomsAreSetup = false;
+
+
+
+
+ // similarly, a list of function/predicate declarations
+ private readonly List<string/*!>!*/> TypeDecls = new List<string/*!*/>();
+
+ protected void AddAxiom(string axiom)
+ {
+ Contract.Requires(axiom != null);
+ Axioms.Add(axiom);
+ // if (thmProver != null) {
+ // LogActivity(":assume " + axiom);
+ // thmProver.AddAxioms(axiom);
+ // }
+ }
+
+ protected void AddTypeDecl(string decl)
+ {
+ Contract.Requires(decl != null);
+ TypeDecls.Add(decl);
+ // if (thmProver != null) {
+ // LogActivity(decl);
+ // thmProver.Feed(decl, 0);
+ // }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ private static string _backgroundPredicates = "";
+
+ static void InitializeGlobalInformation(string backgroundPred)
+ {
+ Contract.Requires(backgroundPred != null);
+ Contract.Ensures(_backgroundPredicates != null);
+ //throws ProverException, System.IO.FileNotFoundException;
+ if (_backgroundPredicates == null) {
+ string codebaseString =
+ cce.NonNull(Path.GetDirectoryName(cce.NonNull(System.Reflection.Assembly.GetExecutingAssembly().Location)));
+
+ // Initialize '_backgroundPredicates'
+ string univBackPredPath = Path.Combine(codebaseString, backgroundPred);
+ using (StreamReader reader = new System.IO.StreamReader(univBackPredPath)) {
+ _backgroundPredicates = reader.ReadToEnd();
+ }
+ }
+ }
+ }
+
+ public class Factory : ProverFactory
+ {
+
+ public override object SpawnProver(ProverOptions options, object ctxt)
+ {
+ //Contract.Requires(ctxt != null);
+ //Contract.Requires(options != null);
+ Contract.Ensures(Contract.Result<object>() != null);
+
+ return this.SpawnProver(options,
+ cce.NonNull((DeclFreeProverContext)ctxt).ExprGen,
+ cce.NonNull((DeclFreeProverContext)ctxt));
+ }
+
+ public override object NewProverContext(ProverOptions options)
+ {
+ //Contract.Requires(options != null);
+ Contract.Ensures(Contract.Result<object>() != null);
+
+ if (CommandLineOptions.Clo.BracketIdsInVC < 0) {
+ CommandLineOptions.Clo.BracketIdsInVC = 0;
+ }
+
+ VCExpressionGenerator gen = new VCExpressionGenerator();
+ List<string>/*!>!*/ proverCommands = new List<string/*!*/>();
+ proverCommands.Add("tptp");
+ proverCommands.Add("external");
+ VCGenerationOptions genOptions = new VCGenerationOptions(proverCommands);
+ Contract.Assert(genOptions != null);
+
+ return new DeclFreeProverContext(gen, genOptions);
+ }
+
+ public override ProverOptions BlankProverOptions()
+ {
+ return new TPTPProverOptions();
+ }
+
+ protected virtual TPTPProcessTheoremProver SpawnProver(ProverOptions options,
+ VCExpressionGenerator gen,
+ DeclFreeProverContext ctx)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(gen != null);
+ Contract.Requires(ctx != null);
+ Contract.Ensures(Contract.Result<TPTPProcessTheoremProver>() != null);
+
+ return new TPTPProcessTheoremProver(options, gen, ctx);
+ }
+ }
+}
diff --git a/Source/Provers/TPTP/TPTP.csproj b/Source/Provers/TPTP/TPTP.csproj
index a3ee1caa..116492d0 100644
--- a/Source/Provers/TPTP/TPTP.csproj
+++ b/Source/Provers/TPTP/TPTP.csproj
@@ -1,131 +1,131 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{A598ED5A-93AD-4125-A555-3921A2F936FA}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie.TPTP</RootNamespace>
- <AssemblyName>Provers.TPTP</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\Provers.TPTP.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="ProverInterface.cs" />
- <Compile Include="..\..\version.cs" />
- <Compile Include="TPTPLineariser.cs" />
- <Compile Include="TypeDeclCollector.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\AbsInt\AbsInt.csproj">
- <Project>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</Project>
- <Name>AbsInt</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\AIFramework\AIFramework.csproj">
- <Project>{39B0658D-C955-41C5-9A43-48C97A1EF5FD}</Project>
- <Name>AIFramework</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\VCExpr\VCExpr.csproj">
- <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
- <Name>VCExpr</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{A598ED5A-93AD-4125-A555-3921A2F936FA}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Microsoft.Boogie.TPTP</RootNamespace>
+ <AssemblyName>Provers.TPTP</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\Provers.TPTP.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ProverInterface.cs" />
+ <Compile Include="..\..\version.cs" />
+ <Compile Include="TPTPLineariser.cs" />
+ <Compile Include="TypeDeclCollector.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\AbsInt\AbsInt.csproj">
+ <Project>{0EFA3E43-690B-48DC-A72C-384A3EA7F31F}</Project>
+ <Name>AbsInt</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\AIFramework\AIFramework.csproj">
+ <Project>{39B0658D-C955-41C5-9A43-48C97A1EF5FD}</Project>
+ <Name>AIFramework</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\VCExpr\VCExpr.csproj">
+ <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
+ <Name>VCExpr</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/Provers/TPTP/TPTPLineariser.cs b/Source/Provers/TPTP/TPTPLineariser.cs
index a35d43f0..4bdf29b9 100644
--- a/Source/Provers/TPTP/TPTPLineariser.cs
+++ b/Source/Provers/TPTP/TPTPLineariser.cs
@@ -1,740 +1,740 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// Method to turn VCExprs into strings that can be fed into TPTP provers.
-// This is currently quite similar to the
-// SimplifyLikeLineariser (but the code is independent)
-
-namespace Microsoft.Boogie.TPTP
-{
-
- // Options for the linearisation
- public class LineariserOptions {
-
- public readonly bool AsTerm;
- public LineariserOptions SetAsTerm(bool newVal) {
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
-
- if (newVal)
- return DefaultTerm;
- else
- return Default;
- }
-
- internal LineariserOptions(bool asTerm) {
- this.AsTerm = asTerm;
- }
-
- [ContractInvariantMethod]
-void ObjectInvariant()
-{
- Contract.Invariant(Default!=null);
- Contract.Invariant(DefaultTerm!=null);
-}
-
- public static readonly LineariserOptions Default = new LineariserOptions (false);
- internal static readonly LineariserOptions DefaultTerm = new LineariserOptions (true);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- // Lineariser for expressions. The result (bool) is currently not used for anything
- public class TPTPExprLineariser : IVCExprVisitor<bool, LineariserOptions/*!*/> {
-
- public static string ToString(VCExpr e, UniqueNamer namer, TPTPProverOptions opts) {
- Contract.Requires(e != null);
- Contract.Requires(namer != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- StringWriter sw = new StringWriter();
- TPTPExprLineariser lin = new TPTPExprLineariser (sw, namer, opts);
- Contract.Assert(lin!=null);
- lin.Linearise(e, LineariserOptions.Default);
- return cce.NonNull(sw.ToString());
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- private readonly TextWriter wr;
- [ContractInvariantMethod]
-void ObjectInvariant()
-{
- Contract.Invariant(wr!=null);
- Contract.Invariant(Namer != null);
-}
-
- private TPTPOpLineariser OpLinObject = null;
- private IVCExprOpVisitor<bool, LineariserOptions>/*!>!*/ OpLineariser { get {
- Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool,LineariserOptions>>() !=null);
-
- if (OpLinObject == null)
- OpLinObject = new TPTPOpLineariser(this, wr);
- return OpLinObject;
- } }
-
- internal readonly UniqueNamer Namer;
- internal readonly TPTPProverOptions Options;
-
- public TPTPExprLineariser(TextWriter wr, UniqueNamer namer, TPTPProverOptions opts) {
- Contract.Requires(wr != null);Contract.Requires(namer != null);
- this.wr = wr;
- this.Namer = namer;
- this.Options = opts;
- }
-
- public void Linearise(VCExpr expr, LineariserOptions options) {
- Contract.Requires(expr != null);
- Contract.Requires(options != null);
- expr.Accept<bool, LineariserOptions>(this, options);
- }
-
- public void LineariseAsTerm(VCExpr expr, LineariserOptions options) {
- Contract.Requires(expr != null);
- Contract.Requires(options != null);
- Linearise(expr, options.SetAsTerm(true));
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public static string MakeIdPrintable(string s) {
- Contract.Requires(s != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- // make sure that no keywords are used as identifiers
- switch(s) {
- case andName:
- case orName:
- case notName:
- case impliesName:
- case iffName:
- case eqName:
- case TRUEName:
- case FALSEName:
- case "Array":
- s = "nonkeyword_" + s;
- break;
- }
-
- var res = new StringBuilder();
-
- foreach (char ch in s) {
- if (Char.IsLetterOrDigit(ch))
- res.Append(ch);
- else
- // replace everything else with a _
- res.Append('_');
- }
-
- return res.ToString();
- }
-
- public static string Lowercase(string s)
- {
- if (char.IsLower(s[0])) return MakeIdPrintable(s);
- else return MakeIdPrintable("x" + s);
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- internal const string andName = "&"; // conjunction
- internal const string orName = "|"; // disjunction
- internal const string notName = "~"; // negation
- internal const string impliesName = "=>"; // implication
- internal const string iteName = "$itef"; // if-then-else
- internal const string iffName = "<=>"; // logical equivalence
- internal const string eqName = "="; // equality
- internal const string lessName = "lt";
- internal const string greaterName = "gt";
- internal const string atmostName = "le";
- internal const string atleastName = "ge";
- internal const string TRUEName = "$true"; // nullary predicate that is always true
- internal const string FALSEName = "$false"; // nullary predicate that is always false
- internal const string subtypeName = "UOrdering2";
- internal const string subtypeArgsName = "UOrdering3";
-
- internal const string boolTrueName = "boolTrue";
- internal const string boolFalseName = "boolFalse";
- internal const string boolIteName = "ite";
- internal const string intAddName = "intAdd";
- internal const string intSubName = "intSub";
- internal const string intMulName = "intMul";
- internal const string intDivName = "boogieIntDiv";
- internal const string intModName = "boogieIntMod";
-
- internal void AssertAsTerm(string x, LineariserOptions options) {
- Contract.Requires(x != null);
- Contract.Requires(options != null);
- if (!options.AsTerm)
- System.Diagnostics.Debug.Fail("One should never write " + x + " as a formula!");
- }
-
- internal void AssertAsFormula(string x, LineariserOptions options) {
- Contract.Requires(x != null);
- Contract.Requires(options != null);
- if (options.AsTerm)
- System.Diagnostics.Debug.Fail("One should never write " + x + " as a term!");
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprLiteral node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- if (options.AsTerm) {
-
- if (node == VCExpressionGenerator.True)
- wr.Write("{0}", boolTrueName);
- else if (node == VCExpressionGenerator.False)
- wr.Write("{0}", boolFalseName);
- else if (node is VCExprIntLit) {
- BigNum lit = ((VCExprIntLit)node).Val;
- wr.Write(lit);
- } else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- } else {
-
- if (node == VCExpressionGenerator.True)
- wr.Write("{0}", TRUEName);
- else if (node == VCExpressionGenerator.False)
- wr.Write("{0}", FALSEName);
- else if (node is VCExprIntLit) {
- System.Diagnostics.Debug.Fail("One should never write IntLit as a predicate!");
- } else
- {Contract.Assert(false); throw new cce.UnreachableException();}
-
- }
-
- return true;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- VCExprOp op = node.Op;
- Contract.Assert(op!=null);
-
- if (!options.AsTerm &&
- (op.Equals(VCExpressionGenerator.AndOp) ||
- op.Equals(VCExpressionGenerator.OrOp))) {
- // handle these operators without recursion
-
- var sop = op.Equals(VCExpressionGenerator.AndOp) ? andName : orName;
- wr.Write("(");
- IEnumerator enumerator = new VCExprNAryUniformOpEnumerator (node);
- Contract.Assert(enumerator!=null);
- var cnt = 0;
- while (enumerator.MoveNext()) {
- VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
- if (naryExpr == null || !naryExpr.Op.Equals(op)) {
- if (cnt > 0)
- wr.Write(" {0} ", sop);
- cnt++;
- Linearise(cce.NonNull((VCExpr)enumerator.Current), options);
- }
- }
-
- wr.Write(")");
-
- return true;
- }
-
- return node.Accept<bool, LineariserOptions/*!*/>(OpLineariser, options);
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprVar node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- string printedName = Namer.GetName(node, MakeIdPrintable(Lowercase(node.Name)));
- Contract.Assert(printedName!=null);
-
- if (options.AsTerm ||
- // formula variables are easy to identify in SMT-Lib
- printedName[0] == '$')
- wr.Write("{0}", printedName);
- else
- wr.Write("({0} = {1})", printedName, boolTrueName);
-
- return true;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprQuantifier node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- AssertAsFormula(node.Quan.ToString(), options);
- Contract.Assert(node.TypeParameters.Count == 0);
-
- Namer.PushScope(); try {
-
- string kind = node.Quan == Quantifier.ALL ? "!" : "?";
- wr.Write("{0} [", kind);
-
- for (int i = 0; i < node.BoundVars.Count; i++)
- {
- VCExprVar var = node.BoundVars[i];
- Contract.Assert(var!=null);
- // ensure that the variable name starts with ?
- string printedName = Namer.GetLocalName(var, "V" + MakeIdPrintable(var.Name));
- Contract.Assert(printedName!=null);
- Contract.Assert(printedName[0] == 'V');
- if (i > 0) wr.Write(",");
- wr.Write("{0}", printedName);
- }
-
- wr.Write("] : (");
-
- /* if (options.QuantifierIds) {
- // only needed for Z3
- VCQuantifierInfos! infos = node.Infos;
- if (infos.qid != null) {
- wr.Write("(QID ");
- wr.Write(infos.qid);
- wr.Write(") ");
- }
- if (0 <= infos.uniqueId) {
- wr.Write("(SKOLEMID ");
- wr.Write(infos.uniqueId);
- wr.Write(") ");
- }
- } */
-
- Linearise(node.Body, options);
-
- // WriteTriggers(node.Triggers, options);
- wr.Write(")");
-
- return true;
-
- } finally {
- Namer.PopScope();
- }
- }
-
-
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprLet node, LineariserOptions options) {
- throw new NotImplementedException();
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- // Lineariser for operator terms. The result (bool) is currently not used for anything
- internal class TPTPOpLineariser : IVCExprOpVisitor<bool, LineariserOptions/*!*/> {
- private readonly TPTPExprLineariser ExprLineariser;
- private readonly TextWriter wr;
- [ContractInvariantMethod]
-void ObjectInvariant()
-{
- Contract.Invariant(wr!=null);
- Contract.Invariant(ExprLineariser!=null);
-}
-
-
- public TPTPOpLineariser(TPTPExprLineariser ExprLineariser, TextWriter wr) {
- Contract.Requires(ExprLineariser != null);
- Contract.Requires(wr != null);
- this.ExprLineariser = ExprLineariser;
- this.wr = wr;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- private void WriteApplication(string op, IEnumerable<VCExpr/*!>!*/> args,
- LineariserOptions options) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(args ));
- Contract.Requires(options != null);
- WriteApplication(op, args, options, options.AsTerm);
- }
-
- private void WriteTermApplication(string op, IEnumerable<VCExpr/*!>!*/> args,
- LineariserOptions options) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(args ));
- Contract.Requires(options != null);
- ExprLineariser.AssertAsTerm(op, options);
- WriteApplication(op, args, options, options.AsTerm);
- }
-
-
- private void WriteApplication(string termOp,
- IEnumerable<VCExpr>/*!>!*/ args, LineariserOptions options,
- // change the AsTerm option for the arguments?
- bool argsAsTerms) {
- Contract.Requires(termOp != null);
- Contract.Requires(cce.NonNullElements(args ));
- Contract.Requires(options != null);
- LineariserOptions newOptions = options.SetAsTerm(argsAsTerms);
- Contract.Assert(newOptions!=null);
-
- var argCnt = 0;
- if (termOp == "~") {
- wr.Write("(~ ");
- foreach (var e in args) {
- ExprLineariser.Linearise(e, newOptions);
- argCnt++;
- }
- Contract.Assert(argCnt == 1);
- wr.Write(")");
- } else if ("&|~=><".IndexOf(termOp[0]) >= 0) {
- wr.Write("(");
- foreach (var e in args) {
- ExprLineariser.Linearise(e, newOptions);
- argCnt++;
- if (argCnt == 1) {
- wr.Write(" {0} ", termOp);
- }
- }
- Contract.Assert(argCnt == 2);
- wr.Write(")");
- } else {
- wr.Write(termOp);
- foreach (var e in args) {
- Contract.Assert(e != null);
- if (argCnt == 0)
- wr.Write("(");
- else
- wr.Write(", ");
- argCnt++;
- ExprLineariser.Linearise(e, newOptions);
- }
-
- if (argCnt > 0)
- wr.Write(")");
- }
- }
-
- // write an application that can only be a term.
- // if the expression is supposed to be printed as a formula,
- // it is turned into an equation (EQ (f args) |@true|)
- private void WriteApplicationTermOnly(string termOp,
- IEnumerable<VCExpr>/*!>!*/ args, LineariserOptions options) {
- Contract.Requires(termOp != null);
- Contract.Requires(cce.NonNullElements(args));
- Contract.Requires(options != null);
- if (!options.AsTerm)
- // Write: (EQ (f args) |@true|)
- // where "args" are written as terms
- wr.Write("(", eqName);
-
- WriteApplication(termOp, args, options, true);
-
- if (!options.AsTerm)
- wr.Write(" = {0})", boolTrueName);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public bool VisitNotOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- WriteApplication(notName, node, options); // arguments can be both terms and formulas
- return true;
- }
-
- private bool PrintEq(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(node != null);
- Contract.Requires(options != null);
- if (options.AsTerm) {
- throw new NotImplementedException();
- } else {
- if (node[0].Type.IsBool) {
- Contract.Assert(node[1].Type.IsBool);
- // use equivalence
- WriteApplication(iffName, node, options);
- } else {
- // use equality and write the arguments as terms
- WriteApplication(eqName, node, options, true);
- }
- }
-
- return true;
- }
-
- public bool VisitEqOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- return PrintEq(node, options);
- }
-
- public bool VisitNeqOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- wr.Write("(~ ");
- PrintEq(node, options);
- wr.Write(")");
- return true;
- }
-
- public bool VisitAndOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- Contract.Assert(options.AsTerm);
- WriteApplication(andName, node, options);
- return true;
- }
-
- public bool VisitOrOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- Contract.Assert(options.AsTerm);
- WriteApplication(orName, node, options);
- return true;
- }
-
- public bool VisitImpliesOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteApplication(impliesName, node, options);
- return true;
- }
-
- public bool VisitIfThenElseOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- throw new NotImplementedException();
- }
-
- public bool VisitCustomOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- VCExprCustomOp op = (VCExprCustomOp)node.Op;
- WriteApplicationTermOnly(op.Name, node, options);
- return true;
- }
-
- public bool VisitDistinctOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- ExprLineariser.AssertAsFormula("distinct", options);
-
- if (node.Length < 2) {
- ExprLineariser.Linearise(VCExpressionGenerator.True, options);
- } else {
- var bits = 0;
- var cnt = node.Length;
- while (cnt > 0) {
- cnt >>= 1;
- bits++;
- }
-
- wr.Write("($true ");
- foreach (VCExpr e in node) {
- for (var i = 0; i < bits; ++i) {
- var neg = (cnt & (1 << i)) != 0 ? "~" : "";
- wr.Write(" & {0}distinct__f__{1}(", neg, i);
- ExprLineariser.LineariseAsTerm(e, options);
- wr.Write(")");
- }
- wr.WriteLine();
- cnt++;
- }
- wr.Write(")");
- }
-
- return true;
- }
-
- public bool VisitLabelOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- //Contract.Requires(node.Length>=1);
- // VCExprLabelOp! op = (VCExprLabelOp)node.Op;
- // TODO
- // wr.Write(String.Format("({0} |{1}| ", op.pos ? "LBLPOS" : "LBLNEG", op.label));
- ExprLineariser.Linearise(node[0], options);
- // wr.Write(")");
- return true;
- }
-
- public bool VisitSelectOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- var name = Lowercase(SimplifyLikeExprLineariser.SelectOpName(node));
- wr.Write(name + "(");
- var cnt = 0;
- foreach (VCExpr/*!*/ e in node) {
- Contract.Assert(e != null);
- if (cnt++ > 0)
- wr.Write(", ");
- ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
- }
- wr.Write(")");
- return true;
- }
-
- public bool VisitStoreOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- var name = Lowercase(SimplifyLikeExprLineariser.StoreOpName(node));
- wr.Write(name + "(");
- var cnt = 0;
- foreach (VCExpr e in node) {
- Contract.Assert(e != null);
- if (cnt++ > 0)
- wr.Write(", ");
- ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
- }
- wr.Write(")");
- return true;
- }
-
- public bool VisitBvOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- {Contract.Assert(false); throw new NotImplementedException();} // TODO
- }
-
- public bool VisitBvExtractOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- {Contract.Assert(false); throw new NotImplementedException();} // TODO
- }
-
- public bool VisitBvConcatOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- {Contract.Assert(false); throw new NotImplementedException();} // TODO
- }
-
- public bool VisitAddOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteTermApplication(intAddName, node, options);
- return true;
- }
-
- public bool VisitSubOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteTermApplication(intSubName, node, options);
- return true;
- }
-
- public bool VisitMulOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteTermApplication(intMulName, node, options);
- return true;
- }
-
- public bool VisitDivOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteTermApplication(intDivName, node, options);
- return true;
- }
-
- public bool VisitModOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteTermApplication(intModName, node, options);
- return true;
- }
-
- public bool VisitLtOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteApplication(lessName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitLeOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteApplication(atmostName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitGtOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteApplication(greaterName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitGeOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteApplication(atleastName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitSubtypeOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteApplication(subtypeName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitSubtype3Op (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- WriteApplication(subtypeArgsName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitBoogieFunctionOp (VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
-
- VCExprBoogieFunctionOp op = (VCExprBoogieFunctionOp)node.Op;
- Contract.Assert(op!=null);
- string printedName = ExprLineariser.Namer.GetName(op.Func, Lowercase(op.Func.Name));
- Contract.Assert(printedName!=null);
-
- if (ExprLineariser.Options.UsePredicates && op.Func.OutParams[0].TypedIdent.Type.IsBool)
- WriteApplication(printedName, node, options, true);
- else
- // arguments are always terms
- WriteApplicationTermOnly(printedName, node, options);
- return true;
- }
-
- }
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// Method to turn VCExprs into strings that can be fed into TPTP provers.
+// This is currently quite similar to the
+// SimplifyLikeLineariser (but the code is independent)
+
+namespace Microsoft.Boogie.TPTP
+{
+
+ // Options for the linearisation
+ public class LineariserOptions {
+
+ public readonly bool AsTerm;
+ public LineariserOptions SetAsTerm(bool newVal) {
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+
+ if (newVal)
+ return DefaultTerm;
+ else
+ return Default;
+ }
+
+ internal LineariserOptions(bool asTerm) {
+ this.AsTerm = asTerm;
+ }
+
+ [ContractInvariantMethod]
+void ObjectInvariant()
+{
+ Contract.Invariant(Default!=null);
+ Contract.Invariant(DefaultTerm!=null);
+}
+
+ public static readonly LineariserOptions Default = new LineariserOptions (false);
+ internal static readonly LineariserOptions DefaultTerm = new LineariserOptions (true);
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ // Lineariser for expressions. The result (bool) is currently not used for anything
+ public class TPTPExprLineariser : IVCExprVisitor<bool, LineariserOptions/*!*/> {
+
+ public static string ToString(VCExpr e, UniqueNamer namer, TPTPProverOptions opts) {
+ Contract.Requires(e != null);
+ Contract.Requires(namer != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ StringWriter sw = new StringWriter();
+ TPTPExprLineariser lin = new TPTPExprLineariser (sw, namer, opts);
+ Contract.Assert(lin!=null);
+ lin.Linearise(e, LineariserOptions.Default);
+ return cce.NonNull(sw.ToString());
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ private readonly TextWriter wr;
+ [ContractInvariantMethod]
+void ObjectInvariant()
+{
+ Contract.Invariant(wr!=null);
+ Contract.Invariant(Namer != null);
+}
+
+ private TPTPOpLineariser OpLinObject = null;
+ private IVCExprOpVisitor<bool, LineariserOptions>/*!>!*/ OpLineariser { get {
+ Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool,LineariserOptions>>() !=null);
+
+ if (OpLinObject == null)
+ OpLinObject = new TPTPOpLineariser(this, wr);
+ return OpLinObject;
+ } }
+
+ internal readonly UniqueNamer Namer;
+ internal readonly TPTPProverOptions Options;
+
+ public TPTPExprLineariser(TextWriter wr, UniqueNamer namer, TPTPProverOptions opts) {
+ Contract.Requires(wr != null);Contract.Requires(namer != null);
+ this.wr = wr;
+ this.Namer = namer;
+ this.Options = opts;
+ }
+
+ public void Linearise(VCExpr expr, LineariserOptions options) {
+ Contract.Requires(expr != null);
+ Contract.Requires(options != null);
+ expr.Accept<bool, LineariserOptions>(this, options);
+ }
+
+ public void LineariseAsTerm(VCExpr expr, LineariserOptions options) {
+ Contract.Requires(expr != null);
+ Contract.Requires(options != null);
+ Linearise(expr, options.SetAsTerm(true));
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public static string MakeIdPrintable(string s) {
+ Contract.Requires(s != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ // make sure that no keywords are used as identifiers
+ switch(s) {
+ case andName:
+ case orName:
+ case notName:
+ case impliesName:
+ case iffName:
+ case eqName:
+ case TRUEName:
+ case FALSEName:
+ case "Array":
+ s = "nonkeyword_" + s;
+ break;
+ }
+
+ var res = new StringBuilder();
+
+ foreach (char ch in s) {
+ if (Char.IsLetterOrDigit(ch))
+ res.Append(ch);
+ else
+ // replace everything else with a _
+ res.Append('_');
+ }
+
+ return res.ToString();
+ }
+
+ public static string Lowercase(string s)
+ {
+ if (char.IsLower(s[0])) return MakeIdPrintable(s);
+ else return MakeIdPrintable("x" + s);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ internal const string andName = "&"; // conjunction
+ internal const string orName = "|"; // disjunction
+ internal const string notName = "~"; // negation
+ internal const string impliesName = "=>"; // implication
+ internal const string iteName = "$itef"; // if-then-else
+ internal const string iffName = "<=>"; // logical equivalence
+ internal const string eqName = "="; // equality
+ internal const string lessName = "lt";
+ internal const string greaterName = "gt";
+ internal const string atmostName = "le";
+ internal const string atleastName = "ge";
+ internal const string TRUEName = "$true"; // nullary predicate that is always true
+ internal const string FALSEName = "$false"; // nullary predicate that is always false
+ internal const string subtypeName = "UOrdering2";
+ internal const string subtypeArgsName = "UOrdering3";
+
+ internal const string boolTrueName = "boolTrue";
+ internal const string boolFalseName = "boolFalse";
+ internal const string boolIteName = "ite";
+ internal const string intAddName = "intAdd";
+ internal const string intSubName = "intSub";
+ internal const string intMulName = "intMul";
+ internal const string intDivName = "boogieIntDiv";
+ internal const string intModName = "boogieIntMod";
+
+ internal void AssertAsTerm(string x, LineariserOptions options) {
+ Contract.Requires(x != null);
+ Contract.Requires(options != null);
+ if (!options.AsTerm)
+ System.Diagnostics.Debug.Fail("One should never write " + x + " as a formula!");
+ }
+
+ internal void AssertAsFormula(string x, LineariserOptions options) {
+ Contract.Requires(x != null);
+ Contract.Requires(options != null);
+ if (options.AsTerm)
+ System.Diagnostics.Debug.Fail("One should never write " + x + " as a term!");
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprLiteral node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ if (options.AsTerm) {
+
+ if (node == VCExpressionGenerator.True)
+ wr.Write("{0}", boolTrueName);
+ else if (node == VCExpressionGenerator.False)
+ wr.Write("{0}", boolFalseName);
+ else if (node is VCExprIntLit) {
+ BigNum lit = ((VCExprIntLit)node).Val;
+ wr.Write(lit);
+ } else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ } else {
+
+ if (node == VCExpressionGenerator.True)
+ wr.Write("{0}", TRUEName);
+ else if (node == VCExpressionGenerator.False)
+ wr.Write("{0}", FALSEName);
+ else if (node is VCExprIntLit) {
+ System.Diagnostics.Debug.Fail("One should never write IntLit as a predicate!");
+ } else
+ {Contract.Assert(false); throw new cce.UnreachableException();}
+
+ }
+
+ return true;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ VCExprOp op = node.Op;
+ Contract.Assert(op!=null);
+
+ if (!options.AsTerm &&
+ (op.Equals(VCExpressionGenerator.AndOp) ||
+ op.Equals(VCExpressionGenerator.OrOp))) {
+ // handle these operators without recursion
+
+ var sop = op.Equals(VCExpressionGenerator.AndOp) ? andName : orName;
+ wr.Write("(");
+ IEnumerator enumerator = new VCExprNAryUniformOpEnumerator (node);
+ Contract.Assert(enumerator!=null);
+ var cnt = 0;
+ while (enumerator.MoveNext()) {
+ VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
+ if (naryExpr == null || !naryExpr.Op.Equals(op)) {
+ if (cnt > 0)
+ wr.Write(" {0} ", sop);
+ cnt++;
+ Linearise(cce.NonNull((VCExpr)enumerator.Current), options);
+ }
+ }
+
+ wr.Write(")");
+
+ return true;
+ }
+
+ return node.Accept<bool, LineariserOptions/*!*/>(OpLineariser, options);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprVar node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ string printedName = Namer.GetName(node, MakeIdPrintable(Lowercase(node.Name)));
+ Contract.Assert(printedName!=null);
+
+ if (options.AsTerm ||
+ // formula variables are easy to identify in SMT-Lib
+ printedName[0] == '$')
+ wr.Write("{0}", printedName);
+ else
+ wr.Write("({0} = {1})", printedName, boolTrueName);
+
+ return true;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprQuantifier node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ AssertAsFormula(node.Quan.ToString(), options);
+ Contract.Assert(node.TypeParameters.Count == 0);
+
+ Namer.PushScope(); try {
+
+ string kind = node.Quan == Quantifier.ALL ? "!" : "?";
+ wr.Write("{0} [", kind);
+
+ for (int i = 0; i < node.BoundVars.Count; i++)
+ {
+ VCExprVar var = node.BoundVars[i];
+ Contract.Assert(var!=null);
+ // ensure that the variable name starts with ?
+ string printedName = Namer.GetLocalName(var, "V" + MakeIdPrintable(var.Name));
+ Contract.Assert(printedName!=null);
+ Contract.Assert(printedName[0] == 'V');
+ if (i > 0) wr.Write(",");
+ wr.Write("{0}", printedName);
+ }
+
+ wr.Write("] : (");
+
+ /* if (options.QuantifierIds) {
+ // only needed for Z3
+ VCQuantifierInfos! infos = node.Infos;
+ if (infos.qid != null) {
+ wr.Write("(QID ");
+ wr.Write(infos.qid);
+ wr.Write(") ");
+ }
+ if (0 <= infos.uniqueId) {
+ wr.Write("(SKOLEMID ");
+ wr.Write(infos.uniqueId);
+ wr.Write(") ");
+ }
+ } */
+
+ Linearise(node.Body, options);
+
+ // WriteTriggers(node.Triggers, options);
+ wr.Write(")");
+
+ return true;
+
+ } finally {
+ Namer.PopScope();
+ }
+ }
+
+
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprLet node, LineariserOptions options) {
+ throw new NotImplementedException();
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ // Lineariser for operator terms. The result (bool) is currently not used for anything
+ internal class TPTPOpLineariser : IVCExprOpVisitor<bool, LineariserOptions/*!*/> {
+ private readonly TPTPExprLineariser ExprLineariser;
+ private readonly TextWriter wr;
+ [ContractInvariantMethod]
+void ObjectInvariant()
+{
+ Contract.Invariant(wr!=null);
+ Contract.Invariant(ExprLineariser!=null);
+}
+
+
+ public TPTPOpLineariser(TPTPExprLineariser ExprLineariser, TextWriter wr) {
+ Contract.Requires(ExprLineariser != null);
+ Contract.Requires(wr != null);
+ this.ExprLineariser = ExprLineariser;
+ this.wr = wr;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ private void WriteApplication(string op, IEnumerable<VCExpr/*!>!*/> args,
+ LineariserOptions options) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(args ));
+ Contract.Requires(options != null);
+ WriteApplication(op, args, options, options.AsTerm);
+ }
+
+ private void WriteTermApplication(string op, IEnumerable<VCExpr/*!>!*/> args,
+ LineariserOptions options) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(args ));
+ Contract.Requires(options != null);
+ ExprLineariser.AssertAsTerm(op, options);
+ WriteApplication(op, args, options, options.AsTerm);
+ }
+
+
+ private void WriteApplication(string termOp,
+ IEnumerable<VCExpr>/*!>!*/ args, LineariserOptions options,
+ // change the AsTerm option for the arguments?
+ bool argsAsTerms) {
+ Contract.Requires(termOp != null);
+ Contract.Requires(cce.NonNullElements(args ));
+ Contract.Requires(options != null);
+ LineariserOptions newOptions = options.SetAsTerm(argsAsTerms);
+ Contract.Assert(newOptions!=null);
+
+ var argCnt = 0;
+ if (termOp == "~") {
+ wr.Write("(~ ");
+ foreach (var e in args) {
+ ExprLineariser.Linearise(e, newOptions);
+ argCnt++;
+ }
+ Contract.Assert(argCnt == 1);
+ wr.Write(")");
+ } else if ("&|~=><".IndexOf(termOp[0]) >= 0) {
+ wr.Write("(");
+ foreach (var e in args) {
+ ExprLineariser.Linearise(e, newOptions);
+ argCnt++;
+ if (argCnt == 1) {
+ wr.Write(" {0} ", termOp);
+ }
+ }
+ Contract.Assert(argCnt == 2);
+ wr.Write(")");
+ } else {
+ wr.Write(termOp);
+ foreach (var e in args) {
+ Contract.Assert(e != null);
+ if (argCnt == 0)
+ wr.Write("(");
+ else
+ wr.Write(", ");
+ argCnt++;
+ ExprLineariser.Linearise(e, newOptions);
+ }
+
+ if (argCnt > 0)
+ wr.Write(")");
+ }
+ }
+
+ // write an application that can only be a term.
+ // if the expression is supposed to be printed as a formula,
+ // it is turned into an equation (EQ (f args) |@true|)
+ private void WriteApplicationTermOnly(string termOp,
+ IEnumerable<VCExpr>/*!>!*/ args, LineariserOptions options) {
+ Contract.Requires(termOp != null);
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Requires(options != null);
+ if (!options.AsTerm)
+ // Write: (EQ (f args) |@true|)
+ // where "args" are written as terms
+ wr.Write("(", eqName);
+
+ WriteApplication(termOp, args, options, true);
+
+ if (!options.AsTerm)
+ wr.Write(" = {0})", boolTrueName);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public bool VisitNotOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ WriteApplication(notName, node, options); // arguments can be both terms and formulas
+ return true;
+ }
+
+ private bool PrintEq(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(node != null);
+ Contract.Requires(options != null);
+ if (options.AsTerm) {
+ throw new NotImplementedException();
+ } else {
+ if (node[0].Type.IsBool) {
+ Contract.Assert(node[1].Type.IsBool);
+ // use equivalence
+ WriteApplication(iffName, node, options);
+ } else {
+ // use equality and write the arguments as terms
+ WriteApplication(eqName, node, options, true);
+ }
+ }
+
+ return true;
+ }
+
+ public bool VisitEqOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ return PrintEq(node, options);
+ }
+
+ public bool VisitNeqOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ wr.Write("(~ ");
+ PrintEq(node, options);
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitAndOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ Contract.Assert(options.AsTerm);
+ WriteApplication(andName, node, options);
+ return true;
+ }
+
+ public bool VisitOrOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ Contract.Assert(options.AsTerm);
+ WriteApplication(orName, node, options);
+ return true;
+ }
+
+ public bool VisitImpliesOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteApplication(impliesName, node, options);
+ return true;
+ }
+
+ public bool VisitIfThenElseOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ throw new NotImplementedException();
+ }
+
+ public bool VisitCustomOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ VCExprCustomOp op = (VCExprCustomOp)node.Op;
+ WriteApplicationTermOnly(op.Name, node, options);
+ return true;
+ }
+
+ public bool VisitDistinctOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ ExprLineariser.AssertAsFormula("distinct", options);
+
+ if (node.Length < 2) {
+ ExprLineariser.Linearise(VCExpressionGenerator.True, options);
+ } else {
+ var bits = 0;
+ var cnt = node.Length;
+ while (cnt > 0) {
+ cnt >>= 1;
+ bits++;
+ }
+
+ wr.Write("($true ");
+ foreach (VCExpr e in node) {
+ for (var i = 0; i < bits; ++i) {
+ var neg = (cnt & (1 << i)) != 0 ? "~" : "";
+ wr.Write(" & {0}distinct__f__{1}(", neg, i);
+ ExprLineariser.LineariseAsTerm(e, options);
+ wr.Write(")");
+ }
+ wr.WriteLine();
+ cnt++;
+ }
+ wr.Write(")");
+ }
+
+ return true;
+ }
+
+ public bool VisitLabelOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ //Contract.Requires(node.Length>=1);
+ // VCExprLabelOp! op = (VCExprLabelOp)node.Op;
+ // TODO
+ // wr.Write(String.Format("({0} |{1}| ", op.pos ? "LBLPOS" : "LBLNEG", op.label));
+ ExprLineariser.Linearise(node[0], options);
+ // wr.Write(")");
+ return true;
+ }
+
+ public bool VisitSelectOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ var name = Lowercase(SimplifyLikeExprLineariser.SelectOpName(node));
+ wr.Write(name + "(");
+ var cnt = 0;
+ foreach (VCExpr/*!*/ e in node) {
+ Contract.Assert(e != null);
+ if (cnt++ > 0)
+ wr.Write(", ");
+ ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
+ }
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitStoreOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ var name = Lowercase(SimplifyLikeExprLineariser.StoreOpName(node));
+ wr.Write(name + "(");
+ var cnt = 0;
+ foreach (VCExpr e in node) {
+ Contract.Assert(e != null);
+ if (cnt++ > 0)
+ wr.Write(", ");
+ ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
+ }
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitBvOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ {Contract.Assert(false); throw new NotImplementedException();} // TODO
+ }
+
+ public bool VisitBvExtractOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ {Contract.Assert(false); throw new NotImplementedException();} // TODO
+ }
+
+ public bool VisitBvConcatOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ {Contract.Assert(false); throw new NotImplementedException();} // TODO
+ }
+
+ public bool VisitAddOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteTermApplication(intAddName, node, options);
+ return true;
+ }
+
+ public bool VisitSubOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteTermApplication(intSubName, node, options);
+ return true;
+ }
+
+ public bool VisitMulOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteTermApplication(intMulName, node, options);
+ return true;
+ }
+
+ public bool VisitDivOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteTermApplication(intDivName, node, options);
+ return true;
+ }
+
+ public bool VisitModOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteTermApplication(intModName, node, options);
+ return true;
+ }
+
+ public bool VisitLtOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteApplication(lessName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitLeOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteApplication(atmostName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitGtOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteApplication(greaterName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitGeOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteApplication(atleastName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitSubtypeOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteApplication(subtypeName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitSubtype3Op (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ WriteApplication(subtypeArgsName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitBoogieFunctionOp (VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+
+ VCExprBoogieFunctionOp op = (VCExprBoogieFunctionOp)node.Op;
+ Contract.Assert(op!=null);
+ string printedName = ExprLineariser.Namer.GetName(op.Func, Lowercase(op.Func.Name));
+ Contract.Assert(printedName!=null);
+
+ if (ExprLineariser.Options.UsePredicates && op.Func.OutParams[0].TypedIdent.Type.IsBool)
+ WriteApplication(printedName, node, options, true);
+ else
+ // arguments are always terms
+ WriteApplicationTermOnly(printedName, node, options);
+ return true;
+ }
+
+ }
+ }
+
+}
diff --git a/Source/Provers/TPTP/TypeDeclCollector.cs b/Source/Provers/TPTP/TypeDeclCollector.cs
index b7495659..1daf19a5 100644
--- a/Source/Provers/TPTP/TypeDeclCollector.cs
+++ b/Source/Provers/TPTP/TypeDeclCollector.cs
@@ -1,136 +1,136 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie.TPTP
-{
- // Visitor for collecting the occurring function symbols in a VCExpr,
- // and for creating the corresponding declarations
-
- public class TypeDeclCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
-
- private readonly HashSet<string/*!*/>/*!*/ KnownStoreFunctions = new HashSet<string>();
- private readonly HashSet<string/*!*/>/*!*/ KnownSelectFunctions = new HashSet<string>();
-
- private readonly UniqueNamer Namer;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Namer != null);
- Contract.Invariant(AllDecls != null);
- Contract.Invariant(IncDecls != null);
- Contract.Invariant(cce.NonNull(KnownFunctions));
- Contract.Invariant(cce.NonNull(KnownVariables));
- }
-
-
- public TypeDeclCollector(UniqueNamer namer) {
- Contract.Requires(namer != null);
- this.Namer = namer;
- }
-
- // not used
- protected override bool StandardResult(VCExpr node, bool arg) {
- //Contract.Requires(node != null);
- return true;
- }
-
- private readonly List<string/*!>!*/> AllDecls = new List<string/*!*/> ();
- private readonly List<string/*!>!*/> IncDecls = new List<string/*!*/> ();
-
- private readonly HashSet<Function/*!*/>/*!*/ KnownFunctions = new HashSet<Function/*!*/>();
- private readonly HashSet<VCExprVar/*!*/>/*!*/ KnownVariables = new HashSet<VCExprVar/*!*/>();
-
- public List<string/*!>!*/> AllDeclarations { get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
-
- List<string>/*!>!*/ res = new List<string/*!*/> ();
- res.AddRange(AllDecls);
- return res;
- } }
-
- public List<string/*!>!*/> GetNewDeclarations() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
- List<string>/*!>!*/ res = new List<string/*!*/>();
- res.AddRange(IncDecls);
- IncDecls.Clear();
- return res;
- }
-
- private void AddDeclaration(string decl) {
- Contract.Requires(decl != null);
- AllDecls.Add(decl);
- IncDecls.Add(decl);
- }
-
- public void Collect(VCExpr expr) {
- Contract.Requires(expr != null);
- Traverse(expr, true);
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
-
- public override bool Visit(VCExprNAry node, bool arg) {
- Contract.Requires(node != null);
-
- if (node.Op is VCExprStoreOp) {
- string name = TPTPExprLineariser.Lowercase(SimplifyLikeExprLineariser.StoreOpName(node));
- if (!KnownStoreFunctions.Contains(name)) {
- var id = KnownStoreFunctions.Count;
-
- if (CommandLineOptions.Clo.MonomorphicArrays) {
- var sel = TPTPExprLineariser.Lowercase(SimplifyLikeExprLineariser.SelectOpName(node));
-
- var eq = "=";
- if (node[node.Arity - 1].Type.IsBool)
- eq = "<=>";
-
- string xS = "", yS = "";
- string dist = "";
-
- for (int i = 0; i < node.Arity - 2; i++) {
- if (i != 0) {
- dist += " | ";
- xS += ",";
- yS += ",";
- }
- var x = "X" + i;
- var y = "Y" + i;
- xS += x;
- yS += y;
- dist += string.Format("({0} != {1})", x, y);
- }
-
- string ax1 = "fof(selectEq" + id + ", axiom, ! [M,V," + xS + "] : (" +
- string.Format("{0}({1}(M,{2},V),{2}) {3} V", sel, name, xS, eq) + ")).";
- string ax2 = "fof(selectNeq" + id + ", axiom, ! [M,V," + xS + "," + yS + "] : (" +
- string.Format("( {0} ) => ", dist) +
- string.Format("{0}({1}(M,{2},V),{3}) {4} {0}(M,{3})", sel, name, xS, yS, eq) + ")).";
-
- AddDeclaration(ax1);
- AddDeclaration(ax2);
- }
-
- KnownStoreFunctions.Add(name);
- }
- //
- }
-
- return base.Visit(node, arg);
- }
-
- public override bool Visit(VCExprVar node, bool arg) {
-
- return base.Visit(node, arg);
- }
- }
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie.TPTP
+{
+ // Visitor for collecting the occurring function symbols in a VCExpr,
+ // and for creating the corresponding declarations
+
+ public class TypeDeclCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
+
+ private readonly HashSet<string/*!*/>/*!*/ KnownStoreFunctions = new HashSet<string>();
+ private readonly HashSet<string/*!*/>/*!*/ KnownSelectFunctions = new HashSet<string>();
+
+ private readonly UniqueNamer Namer;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Namer != null);
+ Contract.Invariant(AllDecls != null);
+ Contract.Invariant(IncDecls != null);
+ Contract.Invariant(cce.NonNull(KnownFunctions));
+ Contract.Invariant(cce.NonNull(KnownVariables));
+ }
+
+
+ public TypeDeclCollector(UniqueNamer namer) {
+ Contract.Requires(namer != null);
+ this.Namer = namer;
+ }
+
+ // not used
+ protected override bool StandardResult(VCExpr node, bool arg) {
+ //Contract.Requires(node != null);
+ return true;
+ }
+
+ private readonly List<string/*!>!*/> AllDecls = new List<string/*!*/> ();
+ private readonly List<string/*!>!*/> IncDecls = new List<string/*!*/> ();
+
+ private readonly HashSet<Function/*!*/>/*!*/ KnownFunctions = new HashSet<Function/*!*/>();
+ private readonly HashSet<VCExprVar/*!*/>/*!*/ KnownVariables = new HashSet<VCExprVar/*!*/>();
+
+ public List<string/*!>!*/> AllDeclarations { get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
+
+ List<string>/*!>!*/ res = new List<string/*!*/> ();
+ res.AddRange(AllDecls);
+ return res;
+ } }
+
+ public List<string/*!>!*/> GetNewDeclarations() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<string>>() ));
+ List<string>/*!>!*/ res = new List<string/*!*/>();
+ res.AddRange(IncDecls);
+ IncDecls.Clear();
+ return res;
+ }
+
+ private void AddDeclaration(string decl) {
+ Contract.Requires(decl != null);
+ AllDecls.Add(decl);
+ IncDecls.Add(decl);
+ }
+
+ public void Collect(VCExpr expr) {
+ Contract.Requires(expr != null);
+ Traverse(expr, true);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+
+ public override bool Visit(VCExprNAry node, bool arg) {
+ Contract.Requires(node != null);
+
+ if (node.Op is VCExprStoreOp) {
+ string name = TPTPExprLineariser.Lowercase(SimplifyLikeExprLineariser.StoreOpName(node));
+ if (!KnownStoreFunctions.Contains(name)) {
+ var id = KnownStoreFunctions.Count;
+
+ if (CommandLineOptions.Clo.MonomorphicArrays) {
+ var sel = TPTPExprLineariser.Lowercase(SimplifyLikeExprLineariser.SelectOpName(node));
+
+ var eq = "=";
+ if (node[node.Arity - 1].Type.IsBool)
+ eq = "<=>";
+
+ string xS = "", yS = "";
+ string dist = "";
+
+ for (int i = 0; i < node.Arity - 2; i++) {
+ if (i != 0) {
+ dist += " | ";
+ xS += ",";
+ yS += ",";
+ }
+ var x = "X" + i;
+ var y = "Y" + i;
+ xS += x;
+ yS += y;
+ dist += string.Format("({0} != {1})", x, y);
+ }
+
+ string ax1 = "fof(selectEq" + id + ", axiom, ! [M,V," + xS + "] : (" +
+ string.Format("{0}({1}(M,{2},V),{2}) {3} V", sel, name, xS, eq) + ")).";
+ string ax2 = "fof(selectNeq" + id + ", axiom, ! [M,V," + xS + "," + yS + "] : (" +
+ string.Format("( {0} ) => ", dist) +
+ string.Format("{0}({1}(M,{2},V),{3}) {4} {0}(M,{3})", sel, name, xS, yS, eq) + ")).";
+
+ AddDeclaration(ax1);
+ AddDeclaration(ax2);
+ }
+
+ KnownStoreFunctions.Add(name);
+ }
+ //
+ }
+
+ return base.Visit(node, arg);
+ }
+
+ public override bool Visit(VCExprVar node, bool arg) {
+
+ return base.Visit(node, arg);
+ }
+ }
+
} \ No newline at end of file
diff --git a/Source/Provers/Z3api/ContextLayer.cs b/Source/Provers/Z3api/ContextLayer.cs
index ad0c2239..87fd8c17 100644
--- a/Source/Provers/Z3api/ContextLayer.cs
+++ b/Source/Provers/Z3api/ContextLayer.cs
@@ -1,728 +1,728 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.IO;
-using System.Diagnostics;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie;
-using Microsoft.Boogie.Z3;
-using Microsoft.Z3;
-using Microsoft.Boogie.VCExprAST;
-using Microsoft.Basetypes;
-
-using Z3Model = Microsoft.Z3.Model;
-using BoogieModel = Microsoft.Boogie.Model;
-
-namespace Microsoft.Boogie.Z3 {
- public class Z3apiProverContext : DeclFreeProverContext {
- private BacktrackDictionary<string, Symbol> symbols = new BacktrackDictionary<string, Symbol>();
- internal BacktrackDictionary<string, Term> constants = new BacktrackDictionary<string, Term>();
- internal BacktrackDictionary<string, FuncDecl> functions = new BacktrackDictionary<string, FuncDecl>();
- internal BacktrackDictionary<string, Term> labels = new BacktrackDictionary<string, Term>();
- internal BacktrackDictionary<Term, VCExpr> constants_inv = null;
- internal BacktrackDictionary<FuncDecl, Function> functions_inv = null;
-
- public Config config;
- public Context z3;
-
- private Z3TypeCachedBuilder tm;
- private UniqueNamer namer;
- private StreamWriter z3log;
-
- private int counterexamples;
- private string logFilename;
- private List<string> debugTraces;
-
- public Z3apiProverContext(Z3InstanceOptions opts, VCExpressionGenerator gen)
- : base(gen, new VCGenerationOptions(new List<string>())) {
- int timeout = opts.Timeout * 1000;
- config = new Config();
- config.SetParamValue("MODEL", "true");
- config.SetParamValue("MODEL_V2", "true");
- config.SetParamValue("MODEL_COMPLETION", "true");
- config.SetParamValue("MBQI", "false");
- config.SetParamValue("TYPE_CHECK", "true");
- if (0 <= timeout) {
- config.SetParamValue("SOFT_TIMEOUT", timeout.ToString());
- }
-
- if (0 <= CommandLineOptions.Clo.ProverCCLimit) {
- this.counterexamples = CommandLineOptions.Clo.ProverCCLimit;
- }
- if (CommandLineOptions.Clo.SimplifyLogFilePath != null) {
- logFilename = CommandLineOptions.Clo.SimplifyLogFilePath;
- }
- this.debugTraces = new List<string>();
-
- z3 = new Context(config);
- z3.SetPrintMode(PrintMode.Smtlib2Compliant);
- if (logFilename != null)
- {
-#if true
- Z3Log.Open(logFilename);
-#else
- z3.OpenLog(logFilename);
-#endif
- }
- foreach (string tag in debugTraces)
- z3.EnableDebugTrace(tag);
-
- this.z3log = null;
- this.tm = new Z3TypeCachedBuilder(this);
- this.namer = new UniqueNamer();
- }
-
- public Z3apiProverContext(Context ctx, VCExpressionGenerator gen)
- : base(gen, new VCGenerationOptions(new List<string>()))
- {
- z3 = ctx;
-
- this.z3log = null;
- this.tm = new Z3TypeCachedBuilder(this);
- this.namer = new UniqueNamer();
-
- // For external
-
- constants_inv = new BacktrackDictionary<Term, VCExpr>();
- functions_inv = new BacktrackDictionary<FuncDecl, Function>();
- }
-
- public Term VCExprToTerm(VCExpr expr, LineariserOptions linOptions) {
- Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
- return (Term)expr.Accept(visitor, linOptions);
- }
-
-
- private class fromZ3
- {
- private VCExpressionGenerator gen;
- private Dictionary<Term, VCExpr> memo;
- private BacktrackDictionary<Term, VCExpr> constants_inv;
- private BacktrackDictionary<FuncDecl, Function> functions_inv;
- private List<VCExprLetBinding> lets;
- private int let_ctr = 0;
-
- private VCExpr create_let(Term t, VCExpr u)
- {
- var name = "$x" + let_ctr.ToString();
- let_ctr++;
- var sym = gen.Variable(name, u.Type);
- memo.Remove(t);
- memo.Add(t, sym);
- lets.Add(gen.LetBinding(sym, u));
- return sym;
- }
-
- public fromZ3(VCExpressionGenerator _gen,
- BacktrackDictionary<Term, VCExpr> _constants_inv,
- BacktrackDictionary<FuncDecl, Function> _functions_inv)
- {
- gen = _gen;
- constants_inv = _constants_inv;
- functions_inv = _functions_inv;
- memo = new Dictionary<Term, VCExpr>();
- lets = new List<VCExprLetBinding>();
- }
-
- public void clear()
- {
- memo.Clear();
- lets.Clear();
- }
- public VCExpr get(Term arg)
- {
- if (memo.ContainsKey(arg))
- return memo[arg];
- VCExpr res = null;
- switch (arg.GetKind())
- {
- case TermKind.Numeral:
- var numstr = arg.GetNumeralString();
- if (arg.GetSort().GetSortKind() == SortKind.Int) {
- res = gen.Integer(Basetypes.BigNum.FromString(numstr));
- }
- else {
- res = gen.Real(Basetypes.BigDec.FromString(numstr));
- }
- break;
- case TermKind.App:
- var args = arg.GetAppArgs();
- var vcargs = new VCExpr[args.Length];
- for (int i = 0; i < args.Length; i++)
- vcargs[i] = get(args[i]);
-
- switch (arg.GetAppDecl().GetKind())
- {
- case DeclKind.Add:
- if (vcargs.Length == 0) {
- if (arg.GetSort().GetSortKind() == SortKind.Int) {
- res = gen.Integer(Basetypes.BigNum.ZERO);
- }
- else {
- res = gen.Real(Basetypes.BigDec.ZERO);
- }
- }
- else
- {
- res = vcargs[0];
- for (int k = 1; k < vcargs.Length; k++)
- res = gen.Add(res, vcargs[k]);
- }
- break;
- case DeclKind.And:
- res = VCExpressionGenerator.True;
- for (int i = 0; i < vcargs.Length; i++)
- res = gen.AndSimp(res, vcargs[i]);
- break;
- case DeclKind.Div:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.RealDivOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.Eq:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Eq(vcargs[0], vcargs[1]);
- break;
- case DeclKind.False:
- res = VCExpressionGenerator.False;
- break;
- case DeclKind.Ge:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.GeOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.Gt:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Gt(vcargs[0], vcargs[1]);
- break;
- case DeclKind.IDiv:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.DivOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.Iff:
- Debug.Assert(vcargs.Length == 2);
- var l = create_let(args[0], vcargs[0]);
- var r = create_let(args[1], vcargs[1]);
- return gen.And(gen.Implies(l, r), gen.Implies(r, l));
- case DeclKind.Implies:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Implies(vcargs[0], vcargs[1]);
- break;
- case DeclKind.Ite:
- Debug.Assert(vcargs.Length == 3);
- res = gen.Function(VCExpressionGenerator.IfThenElseOp, vcargs[0], vcargs[1], vcargs[2]);
- break;
- case DeclKind.Le:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.LeOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.Lt:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.LtOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.Mod:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.ModOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.Mul:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.MulOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.Not:
- Debug.Assert(vcargs.Length == 1);
- res = gen.Not(vcargs[0]);
- break;
- case DeclKind.Or:
- res = VCExpressionGenerator.False;
- for (int i = 0; i < vcargs.Length; i++)
- res = gen.OrSimp(res, vcargs[i]);
- break;
- case DeclKind.Select:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Select(vcargs[0], vcargs[1]);
- break;
- case DeclKind.Store:
- Debug.Assert(vcargs.Length == 3);
- res = gen.Store(vcargs[0], vcargs[1], vcargs[2]);
- break;
- case DeclKind.Sub:
- Debug.Assert(vcargs.Length == 2);
- res = gen.Function(VCExpressionGenerator.SubOp, vcargs[0], vcargs[1]);
- break;
- case DeclKind.True:
- res = VCExpressionGenerator.True;
- break;
- case DeclKind.Uminus:
- Debug.Assert(vcargs.Length == 1);
- var argzero = null;
- if (vcargs[0].Type.IsInt) {
- argzero = gen.Integer(Basetypes.BigNum.ZERO);
- }
- else {
- argzero = gen.Real(Basetypes.BigDec.ZERO);
- }
- res = gen.Function(VCExpressionGenerator.SubOp, argzero, vcargs[0]);
- break;
- case DeclKind.ToInt:
- Debug.Assert(vcargs.Length == 1);
- res = gen.Function(VCExpressionGenerator.ToIntOp, vcargs[0]);
- break;
- case DeclKind.ToReal:
- Debug.Assert(vcargs.Length == 1);
- res = gen.Function(VCExpressionGenerator.ToRealOp, vcargs[0]);
- break;
- case DeclKind.Uninterpreted:
- var name = arg.GetAppDecl().GetDeclName();
- if (args.Length == 0)
- { // a 0-ary constant is a VCExprVar
- if (!constants_inv.TryGetValue(arg, out res))
- throw new Exception("Z3 returned unknown constant: " + name);
- }
- else
- {
- Function f;
- if (!functions_inv.TryGetValue(arg.GetAppDecl(), out f))
- throw new Exception("Z3 returned unknown function: " + name);
- List<VCExpr> vcargsList = new List<VCExpr>(vcargs);
- res = gen.Function(f, vcargsList);
- }
- break;
- default:
- throw new Exception("Unknown Z3 operator");
- }
- break;
- default:
- Debug.Assert(false);
- throw new Exception("Unknown Z3 AST kind");
- }
-
- memo.Add(arg, res);
- return res;
- }
- public VCExpr add_lets(VCExpr e)
- {
- foreach (var let in lets)
- {
- e = gen.Let(e, let);
- }
- return e;
- }
- }
-
- public VCExpr TermToVCExpr(Term t)
- {
- var fZ = new fromZ3(gen, constants_inv, functions_inv);
- return fZ.add_lets(fZ.get(t));
- }
-
-
-
-
-
- public override void DeclareType(TypeCtorDecl t, string attributes) {
- base.DeclareType(t, attributes);
- log("(declare-sort {0})", t.Name);
- }
-
- public override void DeclareConstant(Constant c, bool uniq, string attributes) {
- base.DeclareConstant(c, uniq, attributes);
- DeclareConstant(c.Name, c.TypedIdent.Type);
- }
-
- public override void DeclareFunction(Function f, string attributes) {
- base.DeclareFunction(f, attributes);
- List<Type> domain = new List<Type>();
- foreach (Variable v in f.InParams) {
- domain.Add(v.TypedIdent.Type);
- }
- if (f.OutParams.Length != 1)
- throw new Exception("Cannot handle functions with " + f.OutParams + " out parameters.");
- Type range = f.OutParams[0].TypedIdent.Type;
-
- string functionName = f.Name;
- Symbol symbolAst = GetSymbol(functionName);
- var domainStr = "";
- List<Sort> domainAst = new List<Sort>();
- foreach (Type domainType in domain) {
- Sort type = tm.GetType(domainType);
- domainAst.Add(type);
- domainStr += type.ToString() + " ";
- }
- Sort rangeAst = tm.GetType(range);
- FuncDecl constDeclAst = z3.MkFuncDecl(symbolAst, domainAst.ToArray(), rangeAst);
- functions.Add(functionName, constDeclAst);
- if(functions_inv != null)functions_inv.Add(constDeclAst, f);
- log("(declare-funs (({0} {1} {2})))", functionName, domainStr, rangeAst);
- }
-
- public override void DeclareGlobalVariable(GlobalVariable v, string attributes) {
- base.DeclareGlobalVariable(v, attributes);
- DeclareConstant(v.Name, v.TypedIdent.Type);
- }
-
- public override string Lookup(VCExprVar var) {
- return namer.Lookup(var);
- }
-
- public void log(string format, params object[] args) {
- // Currently, this is a no-op because z3log is always null
- // We use the default (automatic) tracing facility of z3
- if (z3log != null) {
- var str = string.Format(format, args);
- // Do standard string replacement
- str = str.Replace("array", "Array");
- z3log.WriteLine(str);
- z3log.Flush();
- }
- }
-
- public void CloseLog() {
-#if true
- Z3Log.Close();
-#else
- z3.CloseLog();
-#endif
- if (z3log != null) {
- z3log.Close();
- }
- z3log = null;
- }
-
- public void CreateBacktrackPoint() {
- symbols.CreateBacktrackPoint();
- constants.CreateBacktrackPoint();
- functions.CreateBacktrackPoint();
- labels.CreateBacktrackPoint();
- if(constants_inv != null)constants_inv.CreateBacktrackPoint();
- if(functions_inv != null)functions_inv.CreateBacktrackPoint();
- z3.Push();
- log("(push)");
- }
-
- public void Backtrack() {
- z3.Pop();
- labels.Backtrack();
- functions.Backtrack();
- constants.Backtrack();
- symbols.Backtrack();
- if (constants_inv != null) constants_inv.Backtrack();
- if (functions_inv != null) functions_inv.Backtrack();
- log("(pop)");
- }
-
- public void AddAxiom(VCExpr axiom, LineariserOptions linOptions) {
- Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
- Term term = (Term)axiom.Accept(visitor, linOptions);
- log("(assert {0})", term);
- z3.AssertCnstr(term);
- }
-
- public void AddConjecture(VCExpr vc, LineariserOptions linOptions) {
- VCExpr not_vc = (VCExpr)this.gen.Not(vc);
- Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
- Term term = (Term)not_vc.Accept(visitor, linOptions);
- log("(assert {0})", term);
- z3.AssertCnstr(term);
- }
-
- public void AddSmtlibString(string smtlibString) {
- FuncDecl[] decls;
- Term[] assumptions;
- Term[] terms;
- Sort[] sorts;
- string tmp;
-
- z3.ParseSmtlibString(smtlibString, new Sort[] { }, new FuncDecl[] { },
- out assumptions, out terms, out decls, out sorts, out tmp);
- // TBD: check with Nikolaj about the correct position of assumptions
- foreach (FuncDecl decl in decls) {
- Symbol symbol = z3.GetDeclName(decl);
- string functionName = z3.GetSymbolString(symbol);
- functions.Add(functionName, decl);
- }
- foreach (Term assumption in assumptions) {
- log("(assert {0})", assumption);
- z3.AssertCnstr(assumption);
- }
- }
-
- private List<Sort> GetTypes(List<Type> boogieTypes) {
- List<Sort> z3Types = new List<Sort>();
- foreach (Type boogieType in boogieTypes) {
- Sort type = tm.GetType(boogieType);
- z3Types.Add(type);
- }
- return z3Types;
- }
-
- private static bool Equals(List<string> l, List<string> r) {
- Debug.Assert(l != null);
- if (r == null)
- return false;
-
- if (l.Count != r.Count)
- return false;
-
- for (int i = 0; i < l.Count; i++)
- if (!l[i].Equals(r[i]))
- return false;
- return true;
- }
-
- private void DisplayRelevantLabels(List<string> relevantLabels) {
- foreach (string labelName in relevantLabels) {
- System.Console.Write(labelName + ",");
- }
- System.Console.WriteLine("---");
- }
-
- private void DeclareConstant(string constantName, Type boogieType) {
- Symbol symbolAst = GetSymbol(constantName);
- Sort typeAst = tm.GetType(boogieType);
-
- Term constAst = z3.MkConst(symbolAst, typeAst);
- constants.Add(constantName, constAst);
- log("(declare-funs (({0} {1})))", constAst, typeAst);
- }
-
- public ProverInterface.Outcome Check(out List<Z3ErrorModelAndLabels> boogieErrors) {
- Microsoft.Boogie.Helpers.ExtraTraceInformation("Sending data to the theorem prover");
- boogieErrors = new List<Z3ErrorModelAndLabels>();
- LBool outcome = LBool.Undef;
- Debug.Assert(0 < this.counterexamples);
- while (true) {
- Z3Model z3Model;
- outcome = z3.CheckAndGetModel(out z3Model);
-
- log("(check-sat)");
- if (outcome == LBool.False)
- break;
-
- if (outcome == LBool.Undef && z3Model == null) {
- // Blame this on timeout
- return ProverInterface.Outcome.TimeOut;
- }
-
- Debug.Assert(z3Model != null);
- LabeledLiterals labels = z3.GetRelevantLabels();
- Debug.Assert(labels != null);
-
- List<string> labelStrings = new List<string>();
- uint numLabels = labels.GetNumLabels();
- for (uint i = 0; i < numLabels; ++i) {
- Symbol sym = labels.GetLabel(i);
- string labelName = z3.GetSymbolString(sym);
- if (!labelName.StartsWith("@")) {
- labels.Disable(i);
- }
- labelStrings.Add(labelName);
- }
-
- var sw = new StringWriter();
- sw.WriteLine("*** MODEL");
- z3Model.Display(sw);
- sw.WriteLine("*** END_MODEL");
- var sr = new StringReader(sw.ToString());
- var models = Microsoft.Boogie.Model.ParseModels(sr);
- Z3ErrorModelAndLabels e = new Z3ErrorModelAndLabels(models[0], new List<string>(labelStrings));
- boogieErrors.Add(e);
-
- if (boogieErrors.Count < this.counterexamples) {
- z3.BlockLiterals(labels);
- log("block-literals {0}", labels);
- }
-
- labels.Dispose();
- z3Model.Dispose();
- if (boogieErrors.Count == this.counterexamples)
- break;
- }
-
- if (boogieErrors.Count > 0) {
- return ProverInterface.Outcome.Invalid;
- }
- else if (outcome == LBool.False) {
- return ProverInterface.Outcome.Valid;
- }
- else {
- Debug.Assert(outcome == LBool.Undef);
- return ProverInterface.Outcome.Undetermined;
- }
- }
-
- public ProverInterface.Outcome CheckAssumptions(List<VCExpr> assumptions, LineariserOptions linOptions,
- out List<Z3ErrorModelAndLabels> boogieErrors,
- out List<int> unsatCore) {
- Microsoft.Boogie.Helpers.ExtraTraceInformation("Sending data to the theorem prover");
- boogieErrors = new List<Z3ErrorModelAndLabels>();
- unsatCore = new List<int>();
- LBool outcome = LBool.Undef;
-
- Z3Model z3Model;
- Term proof;
- Term[] core;
- Term[] assumption_terms = new Term[assumptions.Count];
- var logstring = "";
- for (int i = 0; i < assumptions.Count; i++) {
- Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
- Term z3ast = (Term)assumptions[i].Accept(visitor, linOptions);
- assumption_terms[i] = z3ast;
- logstring += string.Format("({0}) ", assumption_terms[i]);
- }
-
- log("(get-core {0})", logstring);
- outcome = z3.CheckAssumptions(out z3Model, assumption_terms, out proof, out core);
-
- if (outcome != LBool.False) {
- Debug.Assert(z3Model != null);
- LabeledLiterals labels = z3.GetRelevantLabels();
- Debug.Assert(labels != null);
-
- List<string> labelStrings = new List<string>();
- uint numLabels = labels.GetNumLabels();
- for (uint i = 0; i < numLabels; ++i) {
- Symbol sym = labels.GetLabel(i);
- string labelName = z3.GetSymbolString(sym);
- if (!labelName.StartsWith("@")) {
- labels.Disable(i);
- }
- labelStrings.Add(labelName);
- }
-
- var sw = new StringWriter();
- sw.WriteLine("*** MODEL");
- z3Model.Display(sw);
- sw.WriteLine("*** END_MODEL");
- var sr = new StringReader(sw.ToString());
- var models = Microsoft.Boogie.Model.ParseModels(sr);
- Z3ErrorModelAndLabels e = new Z3ErrorModelAndLabels(models[0], new List<string>(labelStrings));
- boogieErrors.Add(e);
-
- labels.Dispose();
- z3Model.Dispose();
- }
-
- if (boogieErrors.Count > 0) {
- return ProverInterface.Outcome.Invalid;
- }
- else if (outcome == LBool.False) {
- foreach (Term t in core) {
- for (int i = 0; i < assumption_terms.Length; i++) {
- if (t.Equals(assumption_terms[i]))
- unsatCore.Add(i);
- }
- }
- return ProverInterface.Outcome.Valid;
- }
- else {
- Debug.Assert(outcome == LBool.Undef);
- return ProverInterface.Outcome.Undetermined;
- }
- }
-
- private Symbol GetSymbol(string symbolName) {
- if (!symbols.ContainsKey(symbolName)) {
- Symbol symbolAst = z3.MkSymbol(symbolName);
- symbols.Add(symbolName, symbolAst);
- }
- Symbol result;
- if (!symbols.TryGetValue(symbolName, out result))
- throw new Exception("symbol " + symbolName + " is undefined");
- return result;
- }
-
- public Term GetConstant(string constantName, Type constantType, VCExpr node)
- {
- Term typeSafeTerm;
- if (!constants.ContainsKey(constantName))
- this.DeclareConstant(constantName, constantType);
-
- if (!constants.TryGetValue(constantName, out typeSafeTerm))
- throw new Exception("constant " + constantName + " is not defined");
-
- if (constants_inv != null && !constants_inv.ContainsKey(typeSafeTerm))
- constants_inv.Add(typeSafeTerm, node);
-
- return typeSafeTerm;
- }
-
- public FuncDecl GetFunction(string functionName) {
- FuncDecl f;
- if (!functions.TryGetValue(functionName, out f))
- throw new Exception("function " + functionName + " is undefined");
- return f;
- }
-
- public Term MakeLabel(string labelName, bool pos, Term child) {
- Symbol labelSymbol = this.GetSymbol(labelName);
- Term labeledExpr = z3.MkLabel(labelSymbol, pos, child);
- labels.Add(labelName, labeledExpr);
- return labeledExpr;
- }
-
- public LabeledLiterals GetRelevantLabels() {
- LabeledLiterals safeLiterals = z3.GetRelevantLabels();
- log("get-relevant-labels");
- return safeLiterals;
- }
- }
-
- internal class BacktrackDictionary<K, V> {
- private Dictionary<K, V> dictionary = new Dictionary<K, V>();
- private Stack<List<K>> keyStack = new Stack<List<K>>();
-
- public BacktrackDictionary() {
- CreateBacktrackPoint();
- }
-
- public bool TryGetValue(K key, out V val) {
- return dictionary.TryGetValue(key, out val);
- }
-
- public void Add(K key, V v) {
- if (dictionary.ContainsKey(key)) {
- dictionary.Remove(key);
- }
- dictionary.Add(key, v);
- keyStack.Peek().Add(key);
- }
-
- public bool ContainsKey(K k) {
- return dictionary.ContainsKey(k);
- }
-
- public void CreateBacktrackPoint() {
- keyStack.Push(new List<K>());
- }
-
- public void Backtrack() {
- List<K> keysToErase = keyStack.Pop();
- foreach (K key in keysToErase) {
- dictionary.Remove(key);
- }
- if (keyStack.Count == 0)
- this.CreateBacktrackPoint();
- }
-
- public IEnumerator GetEnumerator() {
- return dictionary.Keys.GetEnumerator();
- }
- }
-
- public class Z3ErrorModelAndLabels {
- private Model _model;
- private List<string> _relevantLabels;
- public Model Model {
- get { return this._model; }
- }
- public List<string> RelevantLabels {
- get { return this._relevantLabels; }
- }
- public Z3ErrorModelAndLabels(Model model, List<string> relevantLabels) {
- this._model = model;
- this._relevantLabels = relevantLabels;
- }
- }
-
-
-
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.IO;
+using System.Diagnostics;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie;
+using Microsoft.Boogie.Z3;
+using Microsoft.Z3;
+using Microsoft.Boogie.VCExprAST;
+using Microsoft.Basetypes;
+
+using Z3Model = Microsoft.Z3.Model;
+using BoogieModel = Microsoft.Boogie.Model;
+
+namespace Microsoft.Boogie.Z3 {
+ public class Z3apiProverContext : DeclFreeProverContext {
+ private BacktrackDictionary<string, Symbol> symbols = new BacktrackDictionary<string, Symbol>();
+ internal BacktrackDictionary<string, Term> constants = new BacktrackDictionary<string, Term>();
+ internal BacktrackDictionary<string, FuncDecl> functions = new BacktrackDictionary<string, FuncDecl>();
+ internal BacktrackDictionary<string, Term> labels = new BacktrackDictionary<string, Term>();
+ internal BacktrackDictionary<Term, VCExpr> constants_inv = null;
+ internal BacktrackDictionary<FuncDecl, Function> functions_inv = null;
+
+ public Config config;
+ public Context z3;
+
+ private Z3TypeCachedBuilder tm;
+ private UniqueNamer namer;
+ private StreamWriter z3log;
+
+ private int counterexamples;
+ private string logFilename;
+ private List<string> debugTraces;
+
+ public Z3apiProverContext(Z3InstanceOptions opts, VCExpressionGenerator gen)
+ : base(gen, new VCGenerationOptions(new List<string>())) {
+ int timeout = opts.Timeout * 1000;
+ config = new Config();
+ config.SetParamValue("MODEL", "true");
+ config.SetParamValue("MODEL_V2", "true");
+ config.SetParamValue("MODEL_COMPLETION", "true");
+ config.SetParamValue("MBQI", "false");
+ config.SetParamValue("TYPE_CHECK", "true");
+ if (0 <= timeout) {
+ config.SetParamValue("SOFT_TIMEOUT", timeout.ToString());
+ }
+
+ if (0 <= CommandLineOptions.Clo.ProverCCLimit) {
+ this.counterexamples = CommandLineOptions.Clo.ProverCCLimit;
+ }
+ if (CommandLineOptions.Clo.SimplifyLogFilePath != null) {
+ logFilename = CommandLineOptions.Clo.SimplifyLogFilePath;
+ }
+ this.debugTraces = new List<string>();
+
+ z3 = new Context(config);
+ z3.SetPrintMode(PrintMode.Smtlib2Compliant);
+ if (logFilename != null)
+ {
+#if true
+ Z3Log.Open(logFilename);
+#else
+ z3.OpenLog(logFilename);
+#endif
+ }
+ foreach (string tag in debugTraces)
+ z3.EnableDebugTrace(tag);
+
+ this.z3log = null;
+ this.tm = new Z3TypeCachedBuilder(this);
+ this.namer = new UniqueNamer();
+ }
+
+ public Z3apiProverContext(Context ctx, VCExpressionGenerator gen)
+ : base(gen, new VCGenerationOptions(new List<string>()))
+ {
+ z3 = ctx;
+
+ this.z3log = null;
+ this.tm = new Z3TypeCachedBuilder(this);
+ this.namer = new UniqueNamer();
+
+ // For external
+
+ constants_inv = new BacktrackDictionary<Term, VCExpr>();
+ functions_inv = new BacktrackDictionary<FuncDecl, Function>();
+ }
+
+ public Term VCExprToTerm(VCExpr expr, LineariserOptions linOptions) {
+ Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
+ return (Term)expr.Accept(visitor, linOptions);
+ }
+
+
+ private class fromZ3
+ {
+ private VCExpressionGenerator gen;
+ private Dictionary<Term, VCExpr> memo;
+ private BacktrackDictionary<Term, VCExpr> constants_inv;
+ private BacktrackDictionary<FuncDecl, Function> functions_inv;
+ private List<VCExprLetBinding> lets;
+ private int let_ctr = 0;
+
+ private VCExpr create_let(Term t, VCExpr u)
+ {
+ var name = "$x" + let_ctr.ToString();
+ let_ctr++;
+ var sym = gen.Variable(name, u.Type);
+ memo.Remove(t);
+ memo.Add(t, sym);
+ lets.Add(gen.LetBinding(sym, u));
+ return sym;
+ }
+
+ public fromZ3(VCExpressionGenerator _gen,
+ BacktrackDictionary<Term, VCExpr> _constants_inv,
+ BacktrackDictionary<FuncDecl, Function> _functions_inv)
+ {
+ gen = _gen;
+ constants_inv = _constants_inv;
+ functions_inv = _functions_inv;
+ memo = new Dictionary<Term, VCExpr>();
+ lets = new List<VCExprLetBinding>();
+ }
+
+ public void clear()
+ {
+ memo.Clear();
+ lets.Clear();
+ }
+ public VCExpr get(Term arg)
+ {
+ if (memo.ContainsKey(arg))
+ return memo[arg];
+ VCExpr res = null;
+ switch (arg.GetKind())
+ {
+ case TermKind.Numeral:
+ var numstr = arg.GetNumeralString();
+ if (arg.GetSort().GetSortKind() == SortKind.Int) {
+ res = gen.Integer(Basetypes.BigNum.FromString(numstr));
+ }
+ else {
+ res = gen.Real(Basetypes.BigDec.FromString(numstr));
+ }
+ break;
+ case TermKind.App:
+ var args = arg.GetAppArgs();
+ var vcargs = new VCExpr[args.Length];
+ for (int i = 0; i < args.Length; i++)
+ vcargs[i] = get(args[i]);
+
+ switch (arg.GetAppDecl().GetKind())
+ {
+ case DeclKind.Add:
+ if (vcargs.Length == 0) {
+ if (arg.GetSort().GetSortKind() == SortKind.Int) {
+ res = gen.Integer(Basetypes.BigNum.ZERO);
+ }
+ else {
+ res = gen.Real(Basetypes.BigDec.ZERO);
+ }
+ }
+ else
+ {
+ res = vcargs[0];
+ for (int k = 1; k < vcargs.Length; k++)
+ res = gen.Add(res, vcargs[k]);
+ }
+ break;
+ case DeclKind.And:
+ res = VCExpressionGenerator.True;
+ for (int i = 0; i < vcargs.Length; i++)
+ res = gen.AndSimp(res, vcargs[i]);
+ break;
+ case DeclKind.Div:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.RealDivOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Eq:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Eq(vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.False:
+ res = VCExpressionGenerator.False;
+ break;
+ case DeclKind.Ge:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.GeOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Gt:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Gt(vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.IDiv:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.DivOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Iff:
+ Debug.Assert(vcargs.Length == 2);
+ var l = create_let(args[0], vcargs[0]);
+ var r = create_let(args[1], vcargs[1]);
+ return gen.And(gen.Implies(l, r), gen.Implies(r, l));
+ case DeclKind.Implies:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Implies(vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Ite:
+ Debug.Assert(vcargs.Length == 3);
+ res = gen.Function(VCExpressionGenerator.IfThenElseOp, vcargs[0], vcargs[1], vcargs[2]);
+ break;
+ case DeclKind.Le:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.LeOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Lt:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.LtOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Mod:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.ModOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Mul:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.MulOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Not:
+ Debug.Assert(vcargs.Length == 1);
+ res = gen.Not(vcargs[0]);
+ break;
+ case DeclKind.Or:
+ res = VCExpressionGenerator.False;
+ for (int i = 0; i < vcargs.Length; i++)
+ res = gen.OrSimp(res, vcargs[i]);
+ break;
+ case DeclKind.Select:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Select(vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.Store:
+ Debug.Assert(vcargs.Length == 3);
+ res = gen.Store(vcargs[0], vcargs[1], vcargs[2]);
+ break;
+ case DeclKind.Sub:
+ Debug.Assert(vcargs.Length == 2);
+ res = gen.Function(VCExpressionGenerator.SubOp, vcargs[0], vcargs[1]);
+ break;
+ case DeclKind.True:
+ res = VCExpressionGenerator.True;
+ break;
+ case DeclKind.Uminus:
+ Debug.Assert(vcargs.Length == 1);
+ var argzero = null;
+ if (vcargs[0].Type.IsInt) {
+ argzero = gen.Integer(Basetypes.BigNum.ZERO);
+ }
+ else {
+ argzero = gen.Real(Basetypes.BigDec.ZERO);
+ }
+ res = gen.Function(VCExpressionGenerator.SubOp, argzero, vcargs[0]);
+ break;
+ case DeclKind.ToInt:
+ Debug.Assert(vcargs.Length == 1);
+ res = gen.Function(VCExpressionGenerator.ToIntOp, vcargs[0]);
+ break;
+ case DeclKind.ToReal:
+ Debug.Assert(vcargs.Length == 1);
+ res = gen.Function(VCExpressionGenerator.ToRealOp, vcargs[0]);
+ break;
+ case DeclKind.Uninterpreted:
+ var name = arg.GetAppDecl().GetDeclName();
+ if (args.Length == 0)
+ { // a 0-ary constant is a VCExprVar
+ if (!constants_inv.TryGetValue(arg, out res))
+ throw new Exception("Z3 returned unknown constant: " + name);
+ }
+ else
+ {
+ Function f;
+ if (!functions_inv.TryGetValue(arg.GetAppDecl(), out f))
+ throw new Exception("Z3 returned unknown function: " + name);
+ List<VCExpr> vcargsList = new List<VCExpr>(vcargs);
+ res = gen.Function(f, vcargsList);
+ }
+ break;
+ default:
+ throw new Exception("Unknown Z3 operator");
+ }
+ break;
+ default:
+ Debug.Assert(false);
+ throw new Exception("Unknown Z3 AST kind");
+ }
+
+ memo.Add(arg, res);
+ return res;
+ }
+ public VCExpr add_lets(VCExpr e)
+ {
+ foreach (var let in lets)
+ {
+ e = gen.Let(e, let);
+ }
+ return e;
+ }
+ }
+
+ public VCExpr TermToVCExpr(Term t)
+ {
+ var fZ = new fromZ3(gen, constants_inv, functions_inv);
+ return fZ.add_lets(fZ.get(t));
+ }
+
+
+
+
+
+ public override void DeclareType(TypeCtorDecl t, string attributes) {
+ base.DeclareType(t, attributes);
+ log("(declare-sort {0})", t.Name);
+ }
+
+ public override void DeclareConstant(Constant c, bool uniq, string attributes) {
+ base.DeclareConstant(c, uniq, attributes);
+ DeclareConstant(c.Name, c.TypedIdent.Type);
+ }
+
+ public override void DeclareFunction(Function f, string attributes) {
+ base.DeclareFunction(f, attributes);
+ List<Type> domain = new List<Type>();
+ foreach (Variable v in f.InParams) {
+ domain.Add(v.TypedIdent.Type);
+ }
+ if (f.OutParams.Length != 1)
+ throw new Exception("Cannot handle functions with " + f.OutParams + " out parameters.");
+ Type range = f.OutParams[0].TypedIdent.Type;
+
+ string functionName = f.Name;
+ Symbol symbolAst = GetSymbol(functionName);
+ var domainStr = "";
+ List<Sort> domainAst = new List<Sort>();
+ foreach (Type domainType in domain) {
+ Sort type = tm.GetType(domainType);
+ domainAst.Add(type);
+ domainStr += type.ToString() + " ";
+ }
+ Sort rangeAst = tm.GetType(range);
+ FuncDecl constDeclAst = z3.MkFuncDecl(symbolAst, domainAst.ToArray(), rangeAst);
+ functions.Add(functionName, constDeclAst);
+ if(functions_inv != null)functions_inv.Add(constDeclAst, f);
+ log("(declare-funs (({0} {1} {2})))", functionName, domainStr, rangeAst);
+ }
+
+ public override void DeclareGlobalVariable(GlobalVariable v, string attributes) {
+ base.DeclareGlobalVariable(v, attributes);
+ DeclareConstant(v.Name, v.TypedIdent.Type);
+ }
+
+ public override string Lookup(VCExprVar var) {
+ return namer.Lookup(var);
+ }
+
+ public void log(string format, params object[] args) {
+ // Currently, this is a no-op because z3log is always null
+ // We use the default (automatic) tracing facility of z3
+ if (z3log != null) {
+ var str = string.Format(format, args);
+ // Do standard string replacement
+ str = str.Replace("array", "Array");
+ z3log.WriteLine(str);
+ z3log.Flush();
+ }
+ }
+
+ public void CloseLog() {
+#if true
+ Z3Log.Close();
+#else
+ z3.CloseLog();
+#endif
+ if (z3log != null) {
+ z3log.Close();
+ }
+ z3log = null;
+ }
+
+ public void CreateBacktrackPoint() {
+ symbols.CreateBacktrackPoint();
+ constants.CreateBacktrackPoint();
+ functions.CreateBacktrackPoint();
+ labels.CreateBacktrackPoint();
+ if(constants_inv != null)constants_inv.CreateBacktrackPoint();
+ if(functions_inv != null)functions_inv.CreateBacktrackPoint();
+ z3.Push();
+ log("(push)");
+ }
+
+ public void Backtrack() {
+ z3.Pop();
+ labels.Backtrack();
+ functions.Backtrack();
+ constants.Backtrack();
+ symbols.Backtrack();
+ if (constants_inv != null) constants_inv.Backtrack();
+ if (functions_inv != null) functions_inv.Backtrack();
+ log("(pop)");
+ }
+
+ public void AddAxiom(VCExpr axiom, LineariserOptions linOptions) {
+ Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
+ Term term = (Term)axiom.Accept(visitor, linOptions);
+ log("(assert {0})", term);
+ z3.AssertCnstr(term);
+ }
+
+ public void AddConjecture(VCExpr vc, LineariserOptions linOptions) {
+ VCExpr not_vc = (VCExpr)this.gen.Not(vc);
+ Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
+ Term term = (Term)not_vc.Accept(visitor, linOptions);
+ log("(assert {0})", term);
+ z3.AssertCnstr(term);
+ }
+
+ public void AddSmtlibString(string smtlibString) {
+ FuncDecl[] decls;
+ Term[] assumptions;
+ Term[] terms;
+ Sort[] sorts;
+ string tmp;
+
+ z3.ParseSmtlibString(smtlibString, new Sort[] { }, new FuncDecl[] { },
+ out assumptions, out terms, out decls, out sorts, out tmp);
+ // TBD: check with Nikolaj about the correct position of assumptions
+ foreach (FuncDecl decl in decls) {
+ Symbol symbol = z3.GetDeclName(decl);
+ string functionName = z3.GetSymbolString(symbol);
+ functions.Add(functionName, decl);
+ }
+ foreach (Term assumption in assumptions) {
+ log("(assert {0})", assumption);
+ z3.AssertCnstr(assumption);
+ }
+ }
+
+ private List<Sort> GetTypes(List<Type> boogieTypes) {
+ List<Sort> z3Types = new List<Sort>();
+ foreach (Type boogieType in boogieTypes) {
+ Sort type = tm.GetType(boogieType);
+ z3Types.Add(type);
+ }
+ return z3Types;
+ }
+
+ private static bool Equals(List<string> l, List<string> r) {
+ Debug.Assert(l != null);
+ if (r == null)
+ return false;
+
+ if (l.Count != r.Count)
+ return false;
+
+ for (int i = 0; i < l.Count; i++)
+ if (!l[i].Equals(r[i]))
+ return false;
+ return true;
+ }
+
+ private void DisplayRelevantLabels(List<string> relevantLabels) {
+ foreach (string labelName in relevantLabels) {
+ System.Console.Write(labelName + ",");
+ }
+ System.Console.WriteLine("---");
+ }
+
+ private void DeclareConstant(string constantName, Type boogieType) {
+ Symbol symbolAst = GetSymbol(constantName);
+ Sort typeAst = tm.GetType(boogieType);
+
+ Term constAst = z3.MkConst(symbolAst, typeAst);
+ constants.Add(constantName, constAst);
+ log("(declare-funs (({0} {1})))", constAst, typeAst);
+ }
+
+ public ProverInterface.Outcome Check(out List<Z3ErrorModelAndLabels> boogieErrors) {
+ Microsoft.Boogie.Helpers.ExtraTraceInformation("Sending data to the theorem prover");
+ boogieErrors = new List<Z3ErrorModelAndLabels>();
+ LBool outcome = LBool.Undef;
+ Debug.Assert(0 < this.counterexamples);
+ while (true) {
+ Z3Model z3Model;
+ outcome = z3.CheckAndGetModel(out z3Model);
+
+ log("(check-sat)");
+ if (outcome == LBool.False)
+ break;
+
+ if (outcome == LBool.Undef && z3Model == null) {
+ // Blame this on timeout
+ return ProverInterface.Outcome.TimeOut;
+ }
+
+ Debug.Assert(z3Model != null);
+ LabeledLiterals labels = z3.GetRelevantLabels();
+ Debug.Assert(labels != null);
+
+ List<string> labelStrings = new List<string>();
+ uint numLabels = labels.GetNumLabels();
+ for (uint i = 0; i < numLabels; ++i) {
+ Symbol sym = labels.GetLabel(i);
+ string labelName = z3.GetSymbolString(sym);
+ if (!labelName.StartsWith("@")) {
+ labels.Disable(i);
+ }
+ labelStrings.Add(labelName);
+ }
+
+ var sw = new StringWriter();
+ sw.WriteLine("*** MODEL");
+ z3Model.Display(sw);
+ sw.WriteLine("*** END_MODEL");
+ var sr = new StringReader(sw.ToString());
+ var models = Microsoft.Boogie.Model.ParseModels(sr);
+ Z3ErrorModelAndLabels e = new Z3ErrorModelAndLabels(models[0], new List<string>(labelStrings));
+ boogieErrors.Add(e);
+
+ if (boogieErrors.Count < this.counterexamples) {
+ z3.BlockLiterals(labels);
+ log("block-literals {0}", labels);
+ }
+
+ labels.Dispose();
+ z3Model.Dispose();
+ if (boogieErrors.Count == this.counterexamples)
+ break;
+ }
+
+ if (boogieErrors.Count > 0) {
+ return ProverInterface.Outcome.Invalid;
+ }
+ else if (outcome == LBool.False) {
+ return ProverInterface.Outcome.Valid;
+ }
+ else {
+ Debug.Assert(outcome == LBool.Undef);
+ return ProverInterface.Outcome.Undetermined;
+ }
+ }
+
+ public ProverInterface.Outcome CheckAssumptions(List<VCExpr> assumptions, LineariserOptions linOptions,
+ out List<Z3ErrorModelAndLabels> boogieErrors,
+ out List<int> unsatCore) {
+ Microsoft.Boogie.Helpers.ExtraTraceInformation("Sending data to the theorem prover");
+ boogieErrors = new List<Z3ErrorModelAndLabels>();
+ unsatCore = new List<int>();
+ LBool outcome = LBool.Undef;
+
+ Z3Model z3Model;
+ Term proof;
+ Term[] core;
+ Term[] assumption_terms = new Term[assumptions.Count];
+ var logstring = "";
+ for (int i = 0; i < assumptions.Count; i++) {
+ Z3apiExprLineariser visitor = new Z3apiExprLineariser(this, namer);
+ Term z3ast = (Term)assumptions[i].Accept(visitor, linOptions);
+ assumption_terms[i] = z3ast;
+ logstring += string.Format("({0}) ", assumption_terms[i]);
+ }
+
+ log("(get-core {0})", logstring);
+ outcome = z3.CheckAssumptions(out z3Model, assumption_terms, out proof, out core);
+
+ if (outcome != LBool.False) {
+ Debug.Assert(z3Model != null);
+ LabeledLiterals labels = z3.GetRelevantLabels();
+ Debug.Assert(labels != null);
+
+ List<string> labelStrings = new List<string>();
+ uint numLabels = labels.GetNumLabels();
+ for (uint i = 0; i < numLabels; ++i) {
+ Symbol sym = labels.GetLabel(i);
+ string labelName = z3.GetSymbolString(sym);
+ if (!labelName.StartsWith("@")) {
+ labels.Disable(i);
+ }
+ labelStrings.Add(labelName);
+ }
+
+ var sw = new StringWriter();
+ sw.WriteLine("*** MODEL");
+ z3Model.Display(sw);
+ sw.WriteLine("*** END_MODEL");
+ var sr = new StringReader(sw.ToString());
+ var models = Microsoft.Boogie.Model.ParseModels(sr);
+ Z3ErrorModelAndLabels e = new Z3ErrorModelAndLabels(models[0], new List<string>(labelStrings));
+ boogieErrors.Add(e);
+
+ labels.Dispose();
+ z3Model.Dispose();
+ }
+
+ if (boogieErrors.Count > 0) {
+ return ProverInterface.Outcome.Invalid;
+ }
+ else if (outcome == LBool.False) {
+ foreach (Term t in core) {
+ for (int i = 0; i < assumption_terms.Length; i++) {
+ if (t.Equals(assumption_terms[i]))
+ unsatCore.Add(i);
+ }
+ }
+ return ProverInterface.Outcome.Valid;
+ }
+ else {
+ Debug.Assert(outcome == LBool.Undef);
+ return ProverInterface.Outcome.Undetermined;
+ }
+ }
+
+ private Symbol GetSymbol(string symbolName) {
+ if (!symbols.ContainsKey(symbolName)) {
+ Symbol symbolAst = z3.MkSymbol(symbolName);
+ symbols.Add(symbolName, symbolAst);
+ }
+ Symbol result;
+ if (!symbols.TryGetValue(symbolName, out result))
+ throw new Exception("symbol " + symbolName + " is undefined");
+ return result;
+ }
+
+ public Term GetConstant(string constantName, Type constantType, VCExpr node)
+ {
+ Term typeSafeTerm;
+ if (!constants.ContainsKey(constantName))
+ this.DeclareConstant(constantName, constantType);
+
+ if (!constants.TryGetValue(constantName, out typeSafeTerm))
+ throw new Exception("constant " + constantName + " is not defined");
+
+ if (constants_inv != null && !constants_inv.ContainsKey(typeSafeTerm))
+ constants_inv.Add(typeSafeTerm, node);
+
+ return typeSafeTerm;
+ }
+
+ public FuncDecl GetFunction(string functionName) {
+ FuncDecl f;
+ if (!functions.TryGetValue(functionName, out f))
+ throw new Exception("function " + functionName + " is undefined");
+ return f;
+ }
+
+ public Term MakeLabel(string labelName, bool pos, Term child) {
+ Symbol labelSymbol = this.GetSymbol(labelName);
+ Term labeledExpr = z3.MkLabel(labelSymbol, pos, child);
+ labels.Add(labelName, labeledExpr);
+ return labeledExpr;
+ }
+
+ public LabeledLiterals GetRelevantLabels() {
+ LabeledLiterals safeLiterals = z3.GetRelevantLabels();
+ log("get-relevant-labels");
+ return safeLiterals;
+ }
+ }
+
+ internal class BacktrackDictionary<K, V> {
+ private Dictionary<K, V> dictionary = new Dictionary<K, V>();
+ private Stack<List<K>> keyStack = new Stack<List<K>>();
+
+ public BacktrackDictionary() {
+ CreateBacktrackPoint();
+ }
+
+ public bool TryGetValue(K key, out V val) {
+ return dictionary.TryGetValue(key, out val);
+ }
+
+ public void Add(K key, V v) {
+ if (dictionary.ContainsKey(key)) {
+ dictionary.Remove(key);
+ }
+ dictionary.Add(key, v);
+ keyStack.Peek().Add(key);
+ }
+
+ public bool ContainsKey(K k) {
+ return dictionary.ContainsKey(k);
+ }
+
+ public void CreateBacktrackPoint() {
+ keyStack.Push(new List<K>());
+ }
+
+ public void Backtrack() {
+ List<K> keysToErase = keyStack.Pop();
+ foreach (K key in keysToErase) {
+ dictionary.Remove(key);
+ }
+ if (keyStack.Count == 0)
+ this.CreateBacktrackPoint();
+ }
+
+ public IEnumerator GetEnumerator() {
+ return dictionary.Keys.GetEnumerator();
+ }
+ }
+
+ public class Z3ErrorModelAndLabels {
+ private Model _model;
+ private List<string> _relevantLabels;
+ public Model Model {
+ get { return this._model; }
+ }
+ public List<string> RelevantLabels {
+ get { return this._relevantLabels; }
+ }
+ public Z3ErrorModelAndLabels(Model model, List<string> relevantLabels) {
+ this._model = model;
+ this._relevantLabels = relevantLabels;
+ }
+ }
+
+
+
} \ No newline at end of file
diff --git a/Source/Provers/Z3api/ProverLayer.cs b/Source/Provers/Z3api/ProverLayer.cs
index d72705f3..cb7df8d7 100644
--- a/Source/Provers/Z3api/ProverLayer.cs
+++ b/Source/Provers/Z3api/ProverLayer.cs
@@ -1,354 +1,354 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.IO;
-using System.Diagnostics;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie;
-using Microsoft.Boogie.Z3;
-using Microsoft.Boogie.VCExprAST;
-using System.Diagnostics.Contracts;
-
-using TypeAst = System.IntPtr;
-using TermAst = System.IntPtr;
-using ConstDeclAst = System.IntPtr;
-using ConstAst = System.IntPtr;
-using Value = System.IntPtr;
-using PatternAst = System.IntPtr;
-
-namespace Microsoft.Boogie.Z3
-{
- public class Z3InstanceOptions : ProverOptions {
- public int Timeout { get { return TimeLimit / 1000; } }
- public int Lets {
- get {
- Contract.Ensures(0 <= Contract.Result<int>() && Contract.Result<int>() < 4);
- return CommandLineOptions.Clo.Z3lets;
- }
- }
- public bool DistZ3 = false;
- public string ExeName = "z3.exe";
- public bool InverseImplies = false;
- public string Inspector = null;
- public bool OptimizeForBv = false;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(ExeName != null);
- }
-
- protected override bool Parse(string opt) {
- //Contract.Requires(opt!=null);
- return ParseBool(opt, "REVERSE_IMPLIES", ref InverseImplies) ||
- ParseString(opt, "INSPECTOR", ref Inspector) ||
- ParseBool(opt, "DIST", ref DistZ3) ||
- ParseBool(opt, "OPTIMIZE_FOR_BV", ref OptimizeForBv) ||
- base.Parse(opt);
- }
-
- public override void PostParse() {
- base.PostParse();
-
- if (DistZ3) {
- ExeName = "z3-dist.exe";
- CommandLineOptions.Clo.RestartProverPerVC = true;
- }
- }
-
- public override string Help {
- get {
- return
-@"
-Z3-specific options:
-~~~~~~~~~~~~~~~~~~~~
-INSPECTOR=<string> Use the specified Z3Inspector binary.
-OPTIMIZE_FOR_BV=<bool> Optimize Z3 options for bitvector reasoning, and not quantifier instantiation. Defaults to false.
-
-Obscure options:
-~~~~~~~~~~~~~~~~
-DIST=<bool> Use z3-dist.exe binary.
-REVERSE_IMPLIES=<bool> Encode P==>Q as Q||!P.
-
-" + base.Help;
- // DIST requires non-public binaries
- }
- }
- }
-
- public class Z3LineariserOptions : LineariserOptions {
- private readonly Z3InstanceOptions opts;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(opts != null);
- }
-
-
- public Z3LineariserOptions(bool asTerm, Z3InstanceOptions opts, List<VCExprVar/*!>!*/> letVariables)
- : base(asTerm) {
- Contract.Requires(opts != null);
- Contract.Requires(cce.NonNullElements(letVariables));
-
- this.opts = opts;
- this.LetVariablesAttr = letVariables;
- }
-
- public override bool UseWeights {
- get {
- return true;
- }
- }
-
- public override bool UseTypes {
- get {
- return true;
- }
- }
-
- public override bool QuantifierIds {
- get {
- return true;
- }
- }
-
- public override bool InverseImplies {
- get {
- return opts.InverseImplies;
- }
- }
-
- public override LineariserOptions SetAsTerm(bool newVal) {
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
-
- if (newVal == AsTerm)
- return this;
- return new Z3LineariserOptions(newVal, opts, LetVariables);
- }
-
- // variables representing formulas in let-bindings have to be
- // printed in a different way than other variables
- private readonly List<VCExprVar/*!>!*/> LetVariablesAttr;
- public override List<VCExprVar/*!>!*/> LetVariables {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
-
- return LetVariablesAttr;
- }
- }
-
- public override LineariserOptions AddLetVariable(VCExprVar furtherVar) {
- //Contract.Requires(furtherVar != null);
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
-
- List<VCExprVar/*!>!*/> allVars = new List<VCExprVar/*!*/>();
- allVars.AddRange(LetVariables);
- allVars.Add(furtherVar);
- return new Z3LineariserOptions(AsTerm, opts, allVars);
- }
-
- public override LineariserOptions AddLetVariables(List<VCExprVar/*!>!*/> furtherVars) {
- //Contract.Requires(furtherVars != null);
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
-
- List<VCExprVar/*!>!*/> allVars = new List<VCExprVar/*!*/>();
- allVars.AddRange(LetVariables);
- allVars.AddRange(furtherVars);
- return new Z3LineariserOptions(AsTerm, opts, allVars);
- }
- }
-
- public class Z3apiProcessTheoremProver : ProverInterface
- {
- public Z3apiProcessTheoremProver(Z3InstanceOptions opts, DeclFreeProverContext ctxt)
- {
- this.options = opts;
- this.context = (Z3apiProverContext) ctxt;
- this.numAxiomsPushed = 0;
- }
-
- private Z3InstanceOptions options;
-
- private Z3apiProverContext context;
- public override ProverContext Context
- {
- get { return context; }
- }
-
- public override VCExpressionGenerator VCExprGen
- {
- get { return context.ExprGen; }
- }
-
- private int numAxiomsPushed;
-
- public override void Close()
- {
- base.Close();
- context.CloseLog();
- context.z3.Dispose();
- context.config.Dispose();
- }
-
- public void PushAxiom(VCExpr axiom)
- {
- context.CreateBacktrackPoint();
- LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
- context.AddAxiom(axiom, linOptions);
- }
-
- private void PushConjecture(VCExpr conjecture)
- {
- context.CreateBacktrackPoint();
- LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
- context.AddConjecture(conjecture, linOptions);
- }
-
- public override void PushVCExpression(VCExpr vc)
- {
- PushAxiom(vc);
- numAxiomsPushed++;
- }
-
- public void CreateBacktrackPoint()
- {
- context.CreateBacktrackPoint();
- }
-
- public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler)
- {
- LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
- Push();
- context.AddAxiom(context.Axioms, linOptions);
- context.AddConjecture(vc, linOptions);
- outcome = context.Check(out z3LabelModels);
- Pop();
- }
-
- public override void Check()
- {
- outcome = context.Check(out z3LabelModels);
- }
-
- public override ProverInterface.Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore, ErrorHandler handler)
- {
- LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
- return context.CheckAssumptions(assumptions, linOptions, out z3LabelModels, out unsatCore);
- }
-
- public override void Push()
- {
- context.CreateBacktrackPoint();
- }
-
- public override void Pop()
- {
- context.Backtrack();
- }
-
- public override void Assert(VCExpr vc, bool polarity)
- {
- LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
- if (polarity)
- context.AddAxiom(vc, linOptions);
- else
- context.AddConjecture(vc, linOptions);
- }
-
- public override void AssertAxioms()
- {
- LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
- context.AddAxiom(context.Axioms, linOptions);
- }
-
- // Number of axioms pushed since the last call to FlushAxioms
- public override int NumAxiomsPushed()
- {
- return numAxiomsPushed;
- }
-
- public override int FlushAxiomsToTheoremProver()
- {
- var ret = numAxiomsPushed;
- numAxiomsPushed = 0;
- return ret;
- }
-
- private Outcome outcome;
- private List<Z3ErrorModelAndLabels> z3LabelModels = new List<Z3ErrorModelAndLabels>();
-
- [NoDefaultContract]
- public override Outcome CheckOutcome(ErrorHandler handler)
- {
- if (outcome == Outcome.Invalid)
- {
- foreach (Z3ErrorModelAndLabels z3LabelModel in z3LabelModels)
- {
- List<string> unprefixedLabels = RemovePrefixes(z3LabelModel.RelevantLabels);
- handler.OnModel(unprefixedLabels, z3LabelModel.Model);
- }
- }
- return outcome;
- }
-
- public override Outcome CheckOutcomeCore(ErrorHandler handler) {
- if (outcome == Outcome.Invalid) {
- foreach (Z3ErrorModelAndLabels z3LabelModel in z3LabelModels) {
- List<string> unprefixedLabels = RemovePrefixes(z3LabelModel.RelevantLabels);
- handler.OnModel(unprefixedLabels, z3LabelModel.Model);
- }
- }
- return outcome;
- }
-
- private List<string> RemovePrefixes(List<string> labels)
- {
- List<string> result = new List<string>();
- foreach (string label in labels)
- {
- if (label.StartsWith("+"))
- {
- result.Add(label.Substring(1));
- }
- else if (label.StartsWith("|"))
- {
- result.Add(label.Substring(1));
- }
- else if (label.StartsWith("@"))
- {
- result.Add(label.Substring(1));
- }
- else
- throw new Exception("Unknown prefix in label " + label);
- }
- return result;
- }
- }
-}
-
-namespace Microsoft.Boogie.Z3api
-{
- public class Factory : ProverFactory
- {
- public override object SpawnProver(ProverOptions options, object ctxt)
- {
- return new Z3apiProcessTheoremProver((Z3InstanceOptions) options, (Z3apiProverContext) ctxt);
- }
-
- public override object NewProverContext(ProverOptions opts)
- {
- if (CommandLineOptions.Clo.BracketIdsInVC < 0)
- {
- CommandLineOptions.Clo.BracketIdsInVC = 0;
- }
-
- VCExpressionGenerator gen = new VCExpressionGenerator();
- return new Z3apiProverContext((Z3InstanceOptions)opts, gen);
- }
-
- public override ProverOptions BlankProverOptions()
- {
- return new Z3InstanceOptions();
- }
- }
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.IO;
+using System.Diagnostics;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie;
+using Microsoft.Boogie.Z3;
+using Microsoft.Boogie.VCExprAST;
+using System.Diagnostics.Contracts;
+
+using TypeAst = System.IntPtr;
+using TermAst = System.IntPtr;
+using ConstDeclAst = System.IntPtr;
+using ConstAst = System.IntPtr;
+using Value = System.IntPtr;
+using PatternAst = System.IntPtr;
+
+namespace Microsoft.Boogie.Z3
+{
+ public class Z3InstanceOptions : ProverOptions {
+ public int Timeout { get { return TimeLimit / 1000; } }
+ public int Lets {
+ get {
+ Contract.Ensures(0 <= Contract.Result<int>() && Contract.Result<int>() < 4);
+ return CommandLineOptions.Clo.Z3lets;
+ }
+ }
+ public bool DistZ3 = false;
+ public string ExeName = "z3.exe";
+ public bool InverseImplies = false;
+ public string Inspector = null;
+ public bool OptimizeForBv = false;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(ExeName != null);
+ }
+
+ protected override bool Parse(string opt) {
+ //Contract.Requires(opt!=null);
+ return ParseBool(opt, "REVERSE_IMPLIES", ref InverseImplies) ||
+ ParseString(opt, "INSPECTOR", ref Inspector) ||
+ ParseBool(opt, "DIST", ref DistZ3) ||
+ ParseBool(opt, "OPTIMIZE_FOR_BV", ref OptimizeForBv) ||
+ base.Parse(opt);
+ }
+
+ public override void PostParse() {
+ base.PostParse();
+
+ if (DistZ3) {
+ ExeName = "z3-dist.exe";
+ CommandLineOptions.Clo.RestartProverPerVC = true;
+ }
+ }
+
+ public override string Help {
+ get {
+ return
+@"
+Z3-specific options:
+~~~~~~~~~~~~~~~~~~~~
+INSPECTOR=<string> Use the specified Z3Inspector binary.
+OPTIMIZE_FOR_BV=<bool> Optimize Z3 options for bitvector reasoning, and not quantifier instantiation. Defaults to false.
+
+Obscure options:
+~~~~~~~~~~~~~~~~
+DIST=<bool> Use z3-dist.exe binary.
+REVERSE_IMPLIES=<bool> Encode P==>Q as Q||!P.
+
+" + base.Help;
+ // DIST requires non-public binaries
+ }
+ }
+ }
+
+ public class Z3LineariserOptions : LineariserOptions {
+ private readonly Z3InstanceOptions opts;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(opts != null);
+ }
+
+
+ public Z3LineariserOptions(bool asTerm, Z3InstanceOptions opts, List<VCExprVar/*!>!*/> letVariables)
+ : base(asTerm) {
+ Contract.Requires(opts != null);
+ Contract.Requires(cce.NonNullElements(letVariables));
+
+ this.opts = opts;
+ this.LetVariablesAttr = letVariables;
+ }
+
+ public override bool UseWeights {
+ get {
+ return true;
+ }
+ }
+
+ public override bool UseTypes {
+ get {
+ return true;
+ }
+ }
+
+ public override bool QuantifierIds {
+ get {
+ return true;
+ }
+ }
+
+ public override bool InverseImplies {
+ get {
+ return opts.InverseImplies;
+ }
+ }
+
+ public override LineariserOptions SetAsTerm(bool newVal) {
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+
+ if (newVal == AsTerm)
+ return this;
+ return new Z3LineariserOptions(newVal, opts, LetVariables);
+ }
+
+ // variables representing formulas in let-bindings have to be
+ // printed in a different way than other variables
+ private readonly List<VCExprVar/*!>!*/> LetVariablesAttr;
+ public override List<VCExprVar/*!>!*/> LetVariables {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+
+ return LetVariablesAttr;
+ }
+ }
+
+ public override LineariserOptions AddLetVariable(VCExprVar furtherVar) {
+ //Contract.Requires(furtherVar != null);
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+
+ List<VCExprVar/*!>!*/> allVars = new List<VCExprVar/*!*/>();
+ allVars.AddRange(LetVariables);
+ allVars.Add(furtherVar);
+ return new Z3LineariserOptions(AsTerm, opts, allVars);
+ }
+
+ public override LineariserOptions AddLetVariables(List<VCExprVar/*!>!*/> furtherVars) {
+ //Contract.Requires(furtherVars != null);
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+
+ List<VCExprVar/*!>!*/> allVars = new List<VCExprVar/*!*/>();
+ allVars.AddRange(LetVariables);
+ allVars.AddRange(furtherVars);
+ return new Z3LineariserOptions(AsTerm, opts, allVars);
+ }
+ }
+
+ public class Z3apiProcessTheoremProver : ProverInterface
+ {
+ public Z3apiProcessTheoremProver(Z3InstanceOptions opts, DeclFreeProverContext ctxt)
+ {
+ this.options = opts;
+ this.context = (Z3apiProverContext) ctxt;
+ this.numAxiomsPushed = 0;
+ }
+
+ private Z3InstanceOptions options;
+
+ private Z3apiProverContext context;
+ public override ProverContext Context
+ {
+ get { return context; }
+ }
+
+ public override VCExpressionGenerator VCExprGen
+ {
+ get { return context.ExprGen; }
+ }
+
+ private int numAxiomsPushed;
+
+ public override void Close()
+ {
+ base.Close();
+ context.CloseLog();
+ context.z3.Dispose();
+ context.config.Dispose();
+ }
+
+ public void PushAxiom(VCExpr axiom)
+ {
+ context.CreateBacktrackPoint();
+ LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
+ context.AddAxiom(axiom, linOptions);
+ }
+
+ private void PushConjecture(VCExpr conjecture)
+ {
+ context.CreateBacktrackPoint();
+ LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
+ context.AddConjecture(conjecture, linOptions);
+ }
+
+ public override void PushVCExpression(VCExpr vc)
+ {
+ PushAxiom(vc);
+ numAxiomsPushed++;
+ }
+
+ public void CreateBacktrackPoint()
+ {
+ context.CreateBacktrackPoint();
+ }
+
+ public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler)
+ {
+ LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
+ Push();
+ context.AddAxiom(context.Axioms, linOptions);
+ context.AddConjecture(vc, linOptions);
+ outcome = context.Check(out z3LabelModels);
+ Pop();
+ }
+
+ public override void Check()
+ {
+ outcome = context.Check(out z3LabelModels);
+ }
+
+ public override ProverInterface.Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore, ErrorHandler handler)
+ {
+ LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
+ return context.CheckAssumptions(assumptions, linOptions, out z3LabelModels, out unsatCore);
+ }
+
+ public override void Push()
+ {
+ context.CreateBacktrackPoint();
+ }
+
+ public override void Pop()
+ {
+ context.Backtrack();
+ }
+
+ public override void Assert(VCExpr vc, bool polarity)
+ {
+ LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
+ if (polarity)
+ context.AddAxiom(vc, linOptions);
+ else
+ context.AddConjecture(vc, linOptions);
+ }
+
+ public override void AssertAxioms()
+ {
+ LineariserOptions linOptions = new Z3LineariserOptions(false, (Z3InstanceOptions)this.options, new List<VCExprVar>());
+ context.AddAxiom(context.Axioms, linOptions);
+ }
+
+ // Number of axioms pushed since the last call to FlushAxioms
+ public override int NumAxiomsPushed()
+ {
+ return numAxiomsPushed;
+ }
+
+ public override int FlushAxiomsToTheoremProver()
+ {
+ var ret = numAxiomsPushed;
+ numAxiomsPushed = 0;
+ return ret;
+ }
+
+ private Outcome outcome;
+ private List<Z3ErrorModelAndLabels> z3LabelModels = new List<Z3ErrorModelAndLabels>();
+
+ [NoDefaultContract]
+ public override Outcome CheckOutcome(ErrorHandler handler)
+ {
+ if (outcome == Outcome.Invalid)
+ {
+ foreach (Z3ErrorModelAndLabels z3LabelModel in z3LabelModels)
+ {
+ List<string> unprefixedLabels = RemovePrefixes(z3LabelModel.RelevantLabels);
+ handler.OnModel(unprefixedLabels, z3LabelModel.Model);
+ }
+ }
+ return outcome;
+ }
+
+ public override Outcome CheckOutcomeCore(ErrorHandler handler) {
+ if (outcome == Outcome.Invalid) {
+ foreach (Z3ErrorModelAndLabels z3LabelModel in z3LabelModels) {
+ List<string> unprefixedLabels = RemovePrefixes(z3LabelModel.RelevantLabels);
+ handler.OnModel(unprefixedLabels, z3LabelModel.Model);
+ }
+ }
+ return outcome;
+ }
+
+ private List<string> RemovePrefixes(List<string> labels)
+ {
+ List<string> result = new List<string>();
+ foreach (string label in labels)
+ {
+ if (label.StartsWith("+"))
+ {
+ result.Add(label.Substring(1));
+ }
+ else if (label.StartsWith("|"))
+ {
+ result.Add(label.Substring(1));
+ }
+ else if (label.StartsWith("@"))
+ {
+ result.Add(label.Substring(1));
+ }
+ else
+ throw new Exception("Unknown prefix in label " + label);
+ }
+ return result;
+ }
+ }
+}
+
+namespace Microsoft.Boogie.Z3api
+{
+ public class Factory : ProverFactory
+ {
+ public override object SpawnProver(ProverOptions options, object ctxt)
+ {
+ return new Z3apiProcessTheoremProver((Z3InstanceOptions) options, (Z3apiProverContext) ctxt);
+ }
+
+ public override object NewProverContext(ProverOptions opts)
+ {
+ if (CommandLineOptions.Clo.BracketIdsInVC < 0)
+ {
+ CommandLineOptions.Clo.BracketIdsInVC = 0;
+ }
+
+ VCExpressionGenerator gen = new VCExpressionGenerator();
+ return new Z3apiProverContext((Z3InstanceOptions)opts, gen);
+ }
+
+ public override ProverOptions BlankProverOptions()
+ {
+ return new Z3InstanceOptions();
+ }
+ }
} \ No newline at end of file
diff --git a/Source/Provers/Z3api/SafeContext.cs b/Source/Provers/Z3api/SafeContext.cs
index 72192804..b83d6dff 100644
--- a/Source/Provers/Z3api/SafeContext.cs
+++ b/Source/Provers/Z3api/SafeContext.cs
@@ -1,16 +1,16 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.IO;
-using System.Diagnostics;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie;
-using Microsoft.Boogie.Z3;
-using Microsoft.Z3;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie.Z3
-{
-
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.IO;
+using System.Diagnostics;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie;
+using Microsoft.Boogie.Z3;
+using Microsoft.Z3;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie.Z3
+{
+
} \ No newline at end of file
diff --git a/Source/Provers/Z3api/StubContext.cs b/Source/Provers/Z3api/StubContext.cs
index b129b378..79f140aa 100644
--- a/Source/Provers/Z3api/StubContext.cs
+++ b/Source/Provers/Z3api/StubContext.cs
@@ -1,75 +1,75 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.IO;
-using System.Diagnostics;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie;
-using Microsoft.Boogie.Z3;
-using Microsoft.Z3;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie.Z3 {
- public class Z3StubContext : Z3Context {
- class Z3StubPatternAst: Z3PatternAst {}
- class Z3StubTermAst: Z3TermAst {}
- class Z3StubLabeledLiterals: Z3LabeledLiterals {}
-
- public void CreateBacktrackPoint(){}
- public void Backtrack(){}
- public void AddAxiom(VCExpr axiom, LineariserOptions linOptions) { }
- public void AddConjecture(VCExpr vc, LineariserOptions linOptions){}
- public void AddSmtlibString(string smtlibString) {}
- public string GetDeclName(Z3ConstDeclAst constDeclAst) {
- return "";
- }
- public Z3PatternAst MakePattern(List<Z3TermAst> exprs) {
- return new Z3StubPatternAst();
- }
- public Z3TermAst MakeQuantifier(bool isForall, uint weight, string qid, int skolemid, List<string> varNames, List<Type> boogieTypes, List<Z3PatternAst> patterns, List<Z3TermAst> no_patterns, Z3TermAst body) {
- return new Z3StubTermAst();
- }
- public ProverInterface.Outcome Check(out List<Z3ErrorModelAndLabels> boogieErrors) {
- boogieErrors = new List<Z3ErrorModelAndLabels>();
- return ProverInterface.Outcome.Undetermined;
- }
- public void TypeCheckBool(Z3TermAst t){}
- public void TypeCheckInt(Z3TermAst t){}
- public void DeclareType(string typeName) {}
- public void DeclareConstant(string constantName, Type boogieType) {}
- public void DeclareFunction(string functionName, List<Type> domain, Type range) {}
- public Z3TermAst GetConstant(string constantName, Type constantType) {
- return new Z3StubTermAst();
- }
- public Z3TermAst MakeIntLiteral(string numeral) {
- return new Z3StubTermAst();
- }
- public Z3TermAst MakeBvLiteral(int i, uint bvSize) {
- return new Z3StubTermAst();
- }
- public Z3TermAst MakeTrue() {
- return new Z3StubTermAst();
- }
- public Z3TermAst MakeFalse() {
- return new Z3StubTermAst();
- }
- public Z3TermAst MakeLabel(string labelName, bool pos, Z3TermAst child) {
- return new Z3StubTermAst();
- }
- public Z3LabeledLiterals GetRelevantLabels() {
- return new Z3StubLabeledLiterals();
- }
- public Z3TermAst Make(string op, List<Z3TermAst> children) {
- return new Z3StubTermAst();
- }
- public Z3TermAst MakeArraySelect(List<Z3TermAst> args)
- {
- return new Z3StubTermAst();
- }
- public Z3TermAst MakeArrayStore(List<Z3TermAst> args)
- {
- return new Z3StubTermAst();
- }
- }
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.IO;
+using System.Diagnostics;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie;
+using Microsoft.Boogie.Z3;
+using Microsoft.Z3;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie.Z3 {
+ public class Z3StubContext : Z3Context {
+ class Z3StubPatternAst: Z3PatternAst {}
+ class Z3StubTermAst: Z3TermAst {}
+ class Z3StubLabeledLiterals: Z3LabeledLiterals {}
+
+ public void CreateBacktrackPoint(){}
+ public void Backtrack(){}
+ public void AddAxiom(VCExpr axiom, LineariserOptions linOptions) { }
+ public void AddConjecture(VCExpr vc, LineariserOptions linOptions){}
+ public void AddSmtlibString(string smtlibString) {}
+ public string GetDeclName(Z3ConstDeclAst constDeclAst) {
+ return "";
+ }
+ public Z3PatternAst MakePattern(List<Z3TermAst> exprs) {
+ return new Z3StubPatternAst();
+ }
+ public Z3TermAst MakeQuantifier(bool isForall, uint weight, string qid, int skolemid, List<string> varNames, List<Type> boogieTypes, List<Z3PatternAst> patterns, List<Z3TermAst> no_patterns, Z3TermAst body) {
+ return new Z3StubTermAst();
+ }
+ public ProverInterface.Outcome Check(out List<Z3ErrorModelAndLabels> boogieErrors) {
+ boogieErrors = new List<Z3ErrorModelAndLabels>();
+ return ProverInterface.Outcome.Undetermined;
+ }
+ public void TypeCheckBool(Z3TermAst t){}
+ public void TypeCheckInt(Z3TermAst t){}
+ public void DeclareType(string typeName) {}
+ public void DeclareConstant(string constantName, Type boogieType) {}
+ public void DeclareFunction(string functionName, List<Type> domain, Type range) {}
+ public Z3TermAst GetConstant(string constantName, Type constantType) {
+ return new Z3StubTermAst();
+ }
+ public Z3TermAst MakeIntLiteral(string numeral) {
+ return new Z3StubTermAst();
+ }
+ public Z3TermAst MakeBvLiteral(int i, uint bvSize) {
+ return new Z3StubTermAst();
+ }
+ public Z3TermAst MakeTrue() {
+ return new Z3StubTermAst();
+ }
+ public Z3TermAst MakeFalse() {
+ return new Z3StubTermAst();
+ }
+ public Z3TermAst MakeLabel(string labelName, bool pos, Z3TermAst child) {
+ return new Z3StubTermAst();
+ }
+ public Z3LabeledLiterals GetRelevantLabels() {
+ return new Z3StubLabeledLiterals();
+ }
+ public Z3TermAst Make(string op, List<Z3TermAst> children) {
+ return new Z3StubTermAst();
+ }
+ public Z3TermAst MakeArraySelect(List<Z3TermAst> args)
+ {
+ return new Z3StubTermAst();
+ }
+ public Z3TermAst MakeArrayStore(List<Z3TermAst> args)
+ {
+ return new Z3StubTermAst();
+ }
+ }
} \ No newline at end of file
diff --git a/Source/Provers/Z3api/TypeAdapter.cs b/Source/Provers/Z3api/TypeAdapter.cs
index 879211f7..f2a9a8fd 100644
--- a/Source/Provers/Z3api/TypeAdapter.cs
+++ b/Source/Provers/Z3api/TypeAdapter.cs
@@ -1,197 +1,197 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.IO;
-using System.Diagnostics;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie;
-using Microsoft.Boogie.Z3;
-using Microsoft.Z3;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie.Z3
-{
- internal class Z3TypeCachedBuilder
- {
- private class MapTypeComparator : IEqualityComparer<MapType>
- {
- public bool Equals(MapType x, MapType y)
- {
- if (x.MapArity != y.MapArity)
- return false;
- for (int i = 0; i < x.MapArity; i++)
- {
- if (!Equals(x.Arguments[i], y.Arguments[i]))
- return false;
- }
- return Equals(x.Result, y.Result);
-
- }
- public int GetHashCode(MapType mapType)
- {
- return mapType.GetHashCode();
- }
- }
-
- private class BvTypeComparator : IEqualityComparer<BvType>
- {
- public bool Equals(BvType x, BvType y)
- {
- return x.Bits == y.Bits;
- }
- public int GetHashCode(BvType bvType)
- {
- return bvType.Bits;
- }
- }
-
- private class BasicTypeComparator : IEqualityComparer<BasicType>
- {
- public bool Equals(BasicType x, BasicType y)
- {
- return (x.IsBool == y.IsBool) &&
- (x.IsInt == y.IsInt) &&
- (x.IsReal == y.IsReal);
- }
-
- public int GetHashCode(BasicType basicType)
- {
- if (basicType.IsBool)
- return 1;
- else if (basicType.IsInt)
- return 2;
- else if (basicType.IsReal)
- return 3;
- else
- throw new Exception("Basic Type " + basicType.ToString() + " is unkwown");
- }
- }
-
- private class CtorTypeComparator : IEqualityComparer<CtorType> {
- public bool Equals(CtorType x, CtorType y) {
- return (x.Decl.Name == y.Decl.Name);
- }
-
- public int GetHashCode(CtorType ctorType) {
- return ctorType.Decl.Name.GetHashCode();
- }
- }
-
- private Dictionary<MapType, Sort> mapTypes = new Dictionary<MapType, Sort>(new MapTypeComparator());
- private Dictionary<BvType, Sort> bvTypes = new Dictionary<BvType, Sort>(new BvTypeComparator());
- private Dictionary<BasicType, Sort> basicTypes = new Dictionary<BasicType, Sort>(new BasicTypeComparator());
- private Dictionary<CtorType, Sort> ctorTypes = new Dictionary<CtorType, Sort>(new CtorTypeComparator());
-
- private Z3apiProverContext container;
-
- public Z3TypeCachedBuilder(Z3apiProverContext context)
- {
- this.container = context;
- }
-
- private Sort GetMapType(MapType mapType) {
- Context z3 = ((Z3apiProverContext)container).z3;
- if (!mapTypes.ContainsKey(mapType)) {
- Type result = mapType.Result;
- for (int i = mapType.Arguments.Length-1; i > 0; i--) {
- GetType(result);
- result = new MapType(mapType.tok, new TypeVariableSeq(), new TypeSeq(mapType.Arguments[i]), result);
- }
- mapTypes.Add(mapType, BuildMapType(GetType(mapType.Arguments[0]), GetType(result)));
- }
- return mapTypes[mapType];
- }
-
- private Sort GetBvType(BvType bvType)
- {
- if (!bvTypes.ContainsKey(bvType))
- {
- Sort typeAst = BuildBvType(bvType);
- bvTypes.Add(bvType, typeAst);
- }
- Sort result;
- bool containsKey = bvTypes.TryGetValue(bvType, out result);
- Debug.Assert(containsKey);
- return result;
- }
-
- private Sort GetBasicType(BasicType basicType)
- {
- if (!basicTypes.ContainsKey(basicType))
- {
- Sort typeAst = BuildBasicType(basicType);
- basicTypes.Add(basicType, typeAst);
- }
- Sort result;
- bool containsKey = basicTypes.TryGetValue(basicType, out result);
- Debug.Assert(containsKey);
- return result;
- }
-
- private Sort GetCtorType(CtorType ctorType) {
- if (!ctorTypes.ContainsKey(ctorType)) {
- Sort typeAst = BuildCtorType(ctorType);
- ctorTypes.Add(ctorType, typeAst);
- }
- Sort result;
- bool containsKey = ctorTypes.TryGetValue(ctorType, out result);
- Debug.Assert(containsKey);
- return result;
- }
-
- public virtual Sort GetType(Type boogieType) {
- System.Type type = boogieType.GetType();
- if (type.Equals(typeof(BvType)))
- return GetBvType((BvType)boogieType);
- else if (type.Equals(typeof(BasicType)))
- return GetBasicType((BasicType)boogieType);
- else if (type.Equals(typeof(MapType)))
- return GetMapType((MapType)boogieType);
- else if (type.Equals(typeof(CtorType)))
- return GetCtorType((CtorType)boogieType);
- else
- throw new Exception("Boogie Type " + boogieType.GetType() + " is unknown");
- }
-
- public Sort BuildMapType(Sort domain, Sort range)
- {
- Context z3 = ((Z3apiProverContext)container).z3;
- return z3.MkArraySort(domain, range);
- }
-
- public Sort BuildBvType(BvType bvType)
- {
- Context z3 = ((Z3apiProverContext)container).z3;
- return z3.MkBvSort((uint)bvType.Bits);
- }
-
- public Sort BuildBasicType(BasicType basicType)
- {
- Context z3 = ((Z3apiProverContext)container).z3;
- Sort typeAst;
- if (basicType.IsBool)
- {
- typeAst = z3.MkBoolSort();
- }
- else if (basicType.IsInt)
- {
- typeAst = z3.MkIntSort();
- }
- else if (basicType.IsReal)
- {
- typeAst = z3.MkRealSort();
- }
- else
- throw new Exception("Unknown Basic Type " + basicType.ToString());
- return typeAst;
- }
-
- public Sort BuildCtorType(CtorType ctorType) {
- Context z3 = ((Z3apiProverContext)container).z3;
- if (ctorType.Arguments.Length > 0)
- throw new Exception("Type constructor of non-zero arity are not handled");
- return z3.MkSort(ctorType.Decl.Name);
- }
- }
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.IO;
+using System.Diagnostics;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie;
+using Microsoft.Boogie.Z3;
+using Microsoft.Z3;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie.Z3
+{
+ internal class Z3TypeCachedBuilder
+ {
+ private class MapTypeComparator : IEqualityComparer<MapType>
+ {
+ public bool Equals(MapType x, MapType y)
+ {
+ if (x.MapArity != y.MapArity)
+ return false;
+ for (int i = 0; i < x.MapArity; i++)
+ {
+ if (!Equals(x.Arguments[i], y.Arguments[i]))
+ return false;
+ }
+ return Equals(x.Result, y.Result);
+
+ }
+ public int GetHashCode(MapType mapType)
+ {
+ return mapType.GetHashCode();
+ }
+ }
+
+ private class BvTypeComparator : IEqualityComparer<BvType>
+ {
+ public bool Equals(BvType x, BvType y)
+ {
+ return x.Bits == y.Bits;
+ }
+ public int GetHashCode(BvType bvType)
+ {
+ return bvType.Bits;
+ }
+ }
+
+ private class BasicTypeComparator : IEqualityComparer<BasicType>
+ {
+ public bool Equals(BasicType x, BasicType y)
+ {
+ return (x.IsBool == y.IsBool) &&
+ (x.IsInt == y.IsInt) &&
+ (x.IsReal == y.IsReal);
+ }
+
+ public int GetHashCode(BasicType basicType)
+ {
+ if (basicType.IsBool)
+ return 1;
+ else if (basicType.IsInt)
+ return 2;
+ else if (basicType.IsReal)
+ return 3;
+ else
+ throw new Exception("Basic Type " + basicType.ToString() + " is unkwown");
+ }
+ }
+
+ private class CtorTypeComparator : IEqualityComparer<CtorType> {
+ public bool Equals(CtorType x, CtorType y) {
+ return (x.Decl.Name == y.Decl.Name);
+ }
+
+ public int GetHashCode(CtorType ctorType) {
+ return ctorType.Decl.Name.GetHashCode();
+ }
+ }
+
+ private Dictionary<MapType, Sort> mapTypes = new Dictionary<MapType, Sort>(new MapTypeComparator());
+ private Dictionary<BvType, Sort> bvTypes = new Dictionary<BvType, Sort>(new BvTypeComparator());
+ private Dictionary<BasicType, Sort> basicTypes = new Dictionary<BasicType, Sort>(new BasicTypeComparator());
+ private Dictionary<CtorType, Sort> ctorTypes = new Dictionary<CtorType, Sort>(new CtorTypeComparator());
+
+ private Z3apiProverContext container;
+
+ public Z3TypeCachedBuilder(Z3apiProverContext context)
+ {
+ this.container = context;
+ }
+
+ private Sort GetMapType(MapType mapType) {
+ Context z3 = ((Z3apiProverContext)container).z3;
+ if (!mapTypes.ContainsKey(mapType)) {
+ Type result = mapType.Result;
+ for (int i = mapType.Arguments.Length-1; i > 0; i--) {
+ GetType(result);
+ result = new MapType(mapType.tok, new TypeVariableSeq(), new TypeSeq(mapType.Arguments[i]), result);
+ }
+ mapTypes.Add(mapType, BuildMapType(GetType(mapType.Arguments[0]), GetType(result)));
+ }
+ return mapTypes[mapType];
+ }
+
+ private Sort GetBvType(BvType bvType)
+ {
+ if (!bvTypes.ContainsKey(bvType))
+ {
+ Sort typeAst = BuildBvType(bvType);
+ bvTypes.Add(bvType, typeAst);
+ }
+ Sort result;
+ bool containsKey = bvTypes.TryGetValue(bvType, out result);
+ Debug.Assert(containsKey);
+ return result;
+ }
+
+ private Sort GetBasicType(BasicType basicType)
+ {
+ if (!basicTypes.ContainsKey(basicType))
+ {
+ Sort typeAst = BuildBasicType(basicType);
+ basicTypes.Add(basicType, typeAst);
+ }
+ Sort result;
+ bool containsKey = basicTypes.TryGetValue(basicType, out result);
+ Debug.Assert(containsKey);
+ return result;
+ }
+
+ private Sort GetCtorType(CtorType ctorType) {
+ if (!ctorTypes.ContainsKey(ctorType)) {
+ Sort typeAst = BuildCtorType(ctorType);
+ ctorTypes.Add(ctorType, typeAst);
+ }
+ Sort result;
+ bool containsKey = ctorTypes.TryGetValue(ctorType, out result);
+ Debug.Assert(containsKey);
+ return result;
+ }
+
+ public virtual Sort GetType(Type boogieType) {
+ System.Type type = boogieType.GetType();
+ if (type.Equals(typeof(BvType)))
+ return GetBvType((BvType)boogieType);
+ else if (type.Equals(typeof(BasicType)))
+ return GetBasicType((BasicType)boogieType);
+ else if (type.Equals(typeof(MapType)))
+ return GetMapType((MapType)boogieType);
+ else if (type.Equals(typeof(CtorType)))
+ return GetCtorType((CtorType)boogieType);
+ else
+ throw new Exception("Boogie Type " + boogieType.GetType() + " is unknown");
+ }
+
+ public Sort BuildMapType(Sort domain, Sort range)
+ {
+ Context z3 = ((Z3apiProverContext)container).z3;
+ return z3.MkArraySort(domain, range);
+ }
+
+ public Sort BuildBvType(BvType bvType)
+ {
+ Context z3 = ((Z3apiProverContext)container).z3;
+ return z3.MkBvSort((uint)bvType.Bits);
+ }
+
+ public Sort BuildBasicType(BasicType basicType)
+ {
+ Context z3 = ((Z3apiProverContext)container).z3;
+ Sort typeAst;
+ if (basicType.IsBool)
+ {
+ typeAst = z3.MkBoolSort();
+ }
+ else if (basicType.IsInt)
+ {
+ typeAst = z3.MkIntSort();
+ }
+ else if (basicType.IsReal)
+ {
+ typeAst = z3.MkRealSort();
+ }
+ else
+ throw new Exception("Unknown Basic Type " + basicType.ToString());
+ return typeAst;
+ }
+
+ public Sort BuildCtorType(CtorType ctorType) {
+ Context z3 = ((Z3apiProverContext)container).z3;
+ if (ctorType.Arguments.Length > 0)
+ throw new Exception("Type constructor of non-zero arity are not handled");
+ return z3.MkSort(ctorType.Decl.Name);
+ }
+ }
} \ No newline at end of file
diff --git a/Source/Provers/Z3api/VCExprVisitor.cs b/Source/Provers/Z3api/VCExprVisitor.cs
index e56a7950..52c7d8fd 100644
--- a/Source/Provers/Z3api/VCExprVisitor.cs
+++ b/Source/Provers/Z3api/VCExprVisitor.cs
@@ -1,649 +1,649 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-using Microsoft.Z3;
-
-namespace Microsoft.Boogie.Z3
-{
- using System.Numerics.BigInteger;
-
- public class Z3apiExprLineariser : IVCExprVisitor<Term, LineariserOptions>
- {
- private Z3apiOpLineariser opLineariser = null;
- private IVCExprOpVisitor<Term, LineariserOptions> OpLineariser
- {
- get
- {
- Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool, LineariserOptions>>() != null);
- if (opLineariser == null)
- opLineariser = new Z3apiOpLineariser(this);
- return opLineariser;
- }
- }
-
- internal readonly UniqueNamer namer;
- internal readonly Dictionary<VCExprVar, Term> letBindings;
- protected Z3apiProverContext cm;
-
- public Z3apiExprLineariser(Z3apiProverContext cm, UniqueNamer namer)
- {
- this.cm = cm;
- this.namer = namer;
- this.letBindings = new Dictionary<VCExprVar, Term>();
- }
-
- public Term Linearise(VCExpr expr, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(expr != null);
- return expr.Accept<Term, LineariserOptions>(this, options);
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public Term Make(VCExprOp op, List<Term> children) {
- Context z3 = cm.z3;
- Term[] unwrapChildren = children.ToArray();
- VCExprBoogieFunctionOp boogieFunctionOp = op as VCExprBoogieFunctionOp;
- if (boogieFunctionOp != null) {
- FuncDecl f = cm.GetFunction(boogieFunctionOp.Func.Name);
- return z3.MkApp(f, unwrapChildren);
- }
- VCExprDistinctOp distinctOp = op as VCExprDistinctOp;
- if (distinctOp != null) {
- return z3.MkDistinct(unwrapChildren);
- }
-
- if (op == VCExpressionGenerator.AndOp) {
- return z3.MkAnd(unwrapChildren);
- }
-
- if (op == VCExpressionGenerator.OrOp) {
- return z3.MkOr(unwrapChildren);
- }
-
- if (op == VCExpressionGenerator.ImpliesOp) {
- return z3.MkImplies(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.NotOp) {
- return z3.MkNot(unwrapChildren[0]);
- }
-
- if (op == VCExpressionGenerator.EqOp) {
- return z3.MkEq(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.NeqOp) {
- return z3.MkNot(z3.MkEq(unwrapChildren[0], unwrapChildren[1]));
- }
-
- if (op == VCExpressionGenerator.LtOp) {
- return z3.MkLt(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.LeOp) {
- return z3.MkLe(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.GtOp) {
- return z3.MkGt(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.GeOp) {
- return z3.MkGe(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.AddOp) {
- return z3.MkAdd(unwrapChildren);
- }
-
- if (op == VCExpressionGenerator.SubOp) {
- return z3.MkSub(unwrapChildren);
- }
-
- if (op == VCExpressionGenerator.DivOp || op == VCExpressionGenerator.RealDivOp) {
- return z3.MkDiv(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.MulOp) {
- return z3.MkMul(unwrapChildren);
- }
-
- if (op == VCExpressionGenerator.ModOp) {
- return z3.MkMod(unwrapChildren[0], unwrapChildren[1]);
- }
-
- if (op == VCExpressionGenerator.IfThenElseOp) {
- return z3.MkIte(unwrapChildren[0], unwrapChildren[1], unwrapChildren[2]);
- }
-
- if (op == VCExpressionGenerator.ToIntOp) {
- return z3.MkToInt(unwrapChildren[0]);
- }
-
- if (op == VCExpressionGenerator.ToRealOp) {
- return z3.MkToReal(unwrapChildren[0]);
- }
-
- throw new Exception("unhandled boogie operator");
- }
-
- public Term Visit(VCExprLiteral node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
-
- if (node == VCExpressionGenerator.True)
- return cm.z3.MkTrue();
- else if (node == VCExpressionGenerator.False)
- return cm.z3.MkFalse();
- else if (node is VCExprIntLit)
- return cm.z3.MkNumeral(((VCExprIntLit)node).Val.ToInt, cm.z3.MkIntSort());
- else if (node is VCExprRealLit) {
- string m = ((VCExprRealLit)node).Val.Mantissa.ToString();
- BigInteger e = ((VCExprRealLit)node).Val.Exponent;
- string f = BigInteger.Pow(10, e.Abs);
-
- if (e == 0) {
- return cm.z3.MkNumeral(m, cm.z3.MkRealSort());
- }
- else if (((VCExprRealLit)node).Val.Exponent > 0) {
- return cm.z3.MkMul(cm.z3.MkNumeral(m, cm.z3.MkRealSort()), cm.z3.MkNumeral(f, cm.z3.MkRealSort()));
- }
- else {
- return cm.z3.MkDiv(cm.z3.MkNumeral(m, cm.z3.MkRealSort()), cm.z3.MkNumeral(f, cm.z3.MkRealSort()));
- }
- }
- else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- public Term Visit(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- VCExprOp op = node.Op;
- Contract.Assert(op != null);
-
- if (op.Equals(VCExpressionGenerator.AndOp) || op.Equals(VCExpressionGenerator.OrOp))
- {
- // handle these operators without recursion
- List<Term> asts = new List<Term>();
- string opString = op.Equals(VCExpressionGenerator.AndOp) ? "AND" : "OR";
-
- IEnumerator enumerator = new VCExprNAryUniformOpEnumerator(node);
- Contract.Assert(enumerator != null);
- while (enumerator.MoveNext())
- {
- VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
- if (naryExpr == null || !naryExpr.Op.Equals(op))
- {
- asts.Add(Linearise(cce.NonNull((VCExpr)enumerator.Current), options));
- }
- }
-
- return Make(op, asts);
- }
-
- return node.Accept<Term, LineariserOptions>(OpLineariser, options);
- }
-
- public Term Visit(VCExprVar node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- if (letBindings.ContainsKey(node))
- {
- return letBindings[node];
- }
- else
- {
- string varName = namer.GetName(node, node.Name);
- return cm.GetConstant(varName, node.Type,node);
- }
- }
-
- public Term Visit(VCExprQuantifier node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- Contract.Assert(node.TypeParameters.Count == 0);
-
- namer.PushScope();
- try
- {
- List<string> varNames;
- List<Type> varTypes;
- VisitBounds(node.BoundVars, out varNames, out varTypes);
- List<Pattern> patterns;
- List<Term> no_patterns;
- VisitTriggers(node.Triggers, options, out patterns, out no_patterns);
- Term body = Linearise(node.Body, options);
- Term result;
- uint weight = 1;
- string qid = "";
- int skolemid = 0;
-
- if (options.QuantifierIds)
- {
- VCQuantifierInfos infos = node.Infos;
- Contract.Assert(infos != null);
- if (infos.qid != null)
- {
- qid = infos.qid;
- }
- if (0 <= infos.uniqueId)
- {
- skolemid = infos.uniqueId;
- }
- }
-
- if (options.UseWeights)
- {
- weight = (uint) QKeyValue.FindIntAttribute(node.Infos.attributes, "weight", 1);
- }
-
- switch (node.Quan)
- {
- case Microsoft.Boogie.VCExprAST.Quantifier.ALL:
- result = MakeQuantifier(true, weight, qid, skolemid, varNames, varTypes, patterns, no_patterns, body); break;
- case Microsoft.Boogie.VCExprAST.Quantifier.EX:
- result = MakeQuantifier(false, weight, qid, skolemid, varNames, varTypes, patterns, no_patterns, body); break;
- default:
- throw new Exception("unknown quantifier kind " + node.Quan);
- }
- return result;
- }
- finally
- {
- namer.PopScope();
- }
- }
-
- private Term MakeQuantifier(bool isForall, uint weight, string qid, int skolemid, List<string> varNames, List<Type> boogieTypes, List<Pattern> patterns, List<Term> no_patterns, Term body) {
- List<Term> bound = new List<Term>();
- for (int i = 0; i < varNames.Count; i++) {
- Term t = cm.GetConstant(varNames[i], boogieTypes[i], null);
- bound.Add(t);
- }
-
- Term termAst = cm.z3.MkQuantifier(isForall, weight, cm.z3.MkSymbol(qid), cm.z3.MkSymbol(skolemid.ToString()), patterns.ToArray(), no_patterns.ToArray(), bound.ToArray(), body);
- return termAst;
- }
-
- private void VisitBounds(List<VCExprVar> boundVars, out List<string> varNames, out List<Type> varTypes)
- {
- varNames = new List<string>();
- varTypes = new List<Type>();
- foreach (VCExprVar var in boundVars)
- {
- string varName = namer.GetLocalName(var, var.Name);
- varNames.Add(varName);
- varTypes.Add(var.Type);
- }
- }
-
- private void VisitTriggers(List<VCTrigger> triggers, LineariserOptions options, out List<Pattern> patterns, out List<Term> no_patterns)
- {
- patterns = new List<Pattern>();
- no_patterns = new List<Term>();
- foreach (VCTrigger trigger in triggers)
- {
- List<Term> exprs = new List<Term>();
- foreach (VCExpr expr in trigger.Exprs)
- {
- System.Diagnostics.Debug.Assert(expr != null);
- Term termAst = Linearise(expr, options);
- exprs.Add(termAst);
- }
- if (exprs.Count > 0)
- {
- if (trigger.Pos) {
- Pattern pattern = cm.z3.MkPattern(exprs.ToArray());
- patterns.Add(pattern);
- }
- else {
- System.Diagnostics.Debug.Assert(false, "Z3api currently does not handle nopats");
- foreach (Term expr in exprs)
- no_patterns.Add(expr);
- }
- }
- }
- }
-
- public Term Visit(VCExprLet node, LineariserOptions options)
- {
- foreach (VCExprLetBinding b in node)
- {
- Term defAst = Linearise(b.E, options);
- letBindings.Add(b.V, defAst);
- }
- Term letAst = Linearise(node.Body, options);
- foreach (VCExprLetBinding b in node)
- {
- letBindings.Remove(b.V);
- }
- return letAst;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- internal class Z3apiOpLineariser : IVCExprOpVisitor<Term, LineariserOptions>
- {
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(ExprLineariser != null);
- }
-
- private readonly Z3apiExprLineariser ExprLineariser;
-
- public Z3apiOpLineariser(Z3apiExprLineariser ExprLineariser)
- {
- Contract.Requires(ExprLineariser != null);
- this.ExprLineariser = ExprLineariser;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- private Term WriteApplication(VCExprOp op, IEnumerable<VCExpr> terms, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(terms));
-
- List<Term> args = new List<Term>();
- foreach (VCExpr e in terms)
- {
- Contract.Assert(e != null);
- args.Add(ExprLineariser.Linearise(e, options));
- }
- return ExprLineariser.Make(op, args);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public Term VisitNotOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitEqOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitNeqOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitAndOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitOrOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitImpliesOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitDistinctOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitLabelOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- VCExprLabelOp op = (VCExprLabelOp)node.Op;
- Contract.Assert(op != null);
- return ExprLineariser.cm.MakeLabel(op.label, op.pos, ExprLineariser.Linearise(node[0], options));
- }
-
- public Term VisitSelectOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- List<Term> args = new List<Term>();
- foreach (VCExpr e in node)
- {
- Contract.Assert(e != null);
- args.Add(ExprLineariser.Linearise(e, options));
- }
- System.Diagnostics.Debug.Assert(args.Count >= 2);
-
- Term selectTerm = args[0];
- for (int i = 1; i < args.Count; i++) {
- selectTerm = ExprLineariser.cm.z3.MkArraySelect(selectTerm, args[i]);
- }
- return selectTerm;
- }
-
- private Term ConstructStoreTerm(Term mapTerm, List<Term> args, int index) {
- System.Diagnostics.Debug.Assert(0 < index && index < args.Count - 1);
- if (index == args.Count - 2) {
- return ExprLineariser.cm.z3.MkArrayStore(mapTerm, args[index], args[index + 1]);
- }
- else {
- Term t = ConstructStoreTerm(ExprLineariser.cm.z3.MkArraySelect(mapTerm, args[index]), args, index + 1);
- return ExprLineariser.cm.z3.MkArrayStore(mapTerm, args[index], t);
- }
- }
-
- public Term VisitStoreOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- List<Term> args = new List<Term>();
- foreach (VCExpr e in node)
- {
- Contract.Assert(e != null);
- args.Add(ExprLineariser.Linearise(e, options));
- }
- return ConstructStoreTerm(args[0], args, 1);
- }
-
- public Term VisitBvOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- List<int> args = new List<int>();
- foreach (VCExpr e in node) {
- VCExprIntLit literal = e as VCExprIntLit;
- System.Diagnostics.Debug.Assert(literal != null);
- args.Add(literal.Val.ToInt);
- }
- System.Diagnostics.Debug.Assert(args.Count == 1);
- return ExprLineariser.cm.z3.MkNumeral(args[0], ExprLineariser.cm.z3.MkBvSort((uint)node.Type.BvBits));
- }
-
- public Term VisitBvExtractOp(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
-
- VCExprBvExtractOp op = (VCExprBvExtractOp)node.Op;
- Contract.Assert(op != null);
- System.Diagnostics.Debug.Assert(0 <= op.Start && op.Start < op.End);
-
- List<Term> args = new List<Term>();
- foreach (VCExpr e in node) {
- Contract.Assert(e != null);
- args.Add(ExprLineariser.Linearise(e, options));
- }
- System.Diagnostics.Debug.Assert(args.Count == 1);
- return ExprLineariser.cm.z3.MkBvExtract((uint) op.End - 1, (uint) op.Start, args[0]);
- }
-
- public Term VisitBvConcatOp(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
-
- VCExprBvConcatOp op = (VCExprBvConcatOp)node.Op;
- Contract.Assert(op != null);
-
- List<Term> args = new List<Term>();
- foreach (VCExpr e in node) {
- Contract.Assert(e != null);
- args.Add(ExprLineariser.Linearise(e, options));
- }
- System.Diagnostics.Debug.Assert(args.Count == 2);
- return ExprLineariser.cm.z3.MkBvConcat(args[0], args[1]);
- }
-
- public Term VisitIfThenElseOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitCustomOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(node != null);
- Contract.Requires(options != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitAddOp(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitSubOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitMulOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitDivOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitModOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitRealDivOp(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitPowOp(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitLtOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitLeOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitGtOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitGeOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitSubtypeOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitSubtype3Op(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitToIntOp(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitToRealOp(VCExprNAry node, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
-
- public Term VisitBoogieFunctionOp(VCExprNAry node, LineariserOptions options)
- {
- Contract.Requires(options != null);
- Contract.Requires(node != null);
- return WriteApplication(node.Op, node, options);
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+using Microsoft.Z3;
+
+namespace Microsoft.Boogie.Z3
+{
+ using System.Numerics.BigInteger;
+
+ public class Z3apiExprLineariser : IVCExprVisitor<Term, LineariserOptions>
+ {
+ private Z3apiOpLineariser opLineariser = null;
+ private IVCExprOpVisitor<Term, LineariserOptions> OpLineariser
+ {
+ get
+ {
+ Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool, LineariserOptions>>() != null);
+ if (opLineariser == null)
+ opLineariser = new Z3apiOpLineariser(this);
+ return opLineariser;
+ }
+ }
+
+ internal readonly UniqueNamer namer;
+ internal readonly Dictionary<VCExprVar, Term> letBindings;
+ protected Z3apiProverContext cm;
+
+ public Z3apiExprLineariser(Z3apiProverContext cm, UniqueNamer namer)
+ {
+ this.cm = cm;
+ this.namer = namer;
+ this.letBindings = new Dictionary<VCExprVar, Term>();
+ }
+
+ public Term Linearise(VCExpr expr, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(expr != null);
+ return expr.Accept<Term, LineariserOptions>(this, options);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public Term Make(VCExprOp op, List<Term> children) {
+ Context z3 = cm.z3;
+ Term[] unwrapChildren = children.ToArray();
+ VCExprBoogieFunctionOp boogieFunctionOp = op as VCExprBoogieFunctionOp;
+ if (boogieFunctionOp != null) {
+ FuncDecl f = cm.GetFunction(boogieFunctionOp.Func.Name);
+ return z3.MkApp(f, unwrapChildren);
+ }
+ VCExprDistinctOp distinctOp = op as VCExprDistinctOp;
+ if (distinctOp != null) {
+ return z3.MkDistinct(unwrapChildren);
+ }
+
+ if (op == VCExpressionGenerator.AndOp) {
+ return z3.MkAnd(unwrapChildren);
+ }
+
+ if (op == VCExpressionGenerator.OrOp) {
+ return z3.MkOr(unwrapChildren);
+ }
+
+ if (op == VCExpressionGenerator.ImpliesOp) {
+ return z3.MkImplies(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.NotOp) {
+ return z3.MkNot(unwrapChildren[0]);
+ }
+
+ if (op == VCExpressionGenerator.EqOp) {
+ return z3.MkEq(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.NeqOp) {
+ return z3.MkNot(z3.MkEq(unwrapChildren[0], unwrapChildren[1]));
+ }
+
+ if (op == VCExpressionGenerator.LtOp) {
+ return z3.MkLt(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.LeOp) {
+ return z3.MkLe(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.GtOp) {
+ return z3.MkGt(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.GeOp) {
+ return z3.MkGe(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.AddOp) {
+ return z3.MkAdd(unwrapChildren);
+ }
+
+ if (op == VCExpressionGenerator.SubOp) {
+ return z3.MkSub(unwrapChildren);
+ }
+
+ if (op == VCExpressionGenerator.DivOp || op == VCExpressionGenerator.RealDivOp) {
+ return z3.MkDiv(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.MulOp) {
+ return z3.MkMul(unwrapChildren);
+ }
+
+ if (op == VCExpressionGenerator.ModOp) {
+ return z3.MkMod(unwrapChildren[0], unwrapChildren[1]);
+ }
+
+ if (op == VCExpressionGenerator.IfThenElseOp) {
+ return z3.MkIte(unwrapChildren[0], unwrapChildren[1], unwrapChildren[2]);
+ }
+
+ if (op == VCExpressionGenerator.ToIntOp) {
+ return z3.MkToInt(unwrapChildren[0]);
+ }
+
+ if (op == VCExpressionGenerator.ToRealOp) {
+ return z3.MkToReal(unwrapChildren[0]);
+ }
+
+ throw new Exception("unhandled boogie operator");
+ }
+
+ public Term Visit(VCExprLiteral node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+
+ if (node == VCExpressionGenerator.True)
+ return cm.z3.MkTrue();
+ else if (node == VCExpressionGenerator.False)
+ return cm.z3.MkFalse();
+ else if (node is VCExprIntLit)
+ return cm.z3.MkNumeral(((VCExprIntLit)node).Val.ToInt, cm.z3.MkIntSort());
+ else if (node is VCExprRealLit) {
+ string m = ((VCExprRealLit)node).Val.Mantissa.ToString();
+ BigInteger e = ((VCExprRealLit)node).Val.Exponent;
+ string f = BigInteger.Pow(10, e.Abs);
+
+ if (e == 0) {
+ return cm.z3.MkNumeral(m, cm.z3.MkRealSort());
+ }
+ else if (((VCExprRealLit)node).Val.Exponent > 0) {
+ return cm.z3.MkMul(cm.z3.MkNumeral(m, cm.z3.MkRealSort()), cm.z3.MkNumeral(f, cm.z3.MkRealSort()));
+ }
+ else {
+ return cm.z3.MkDiv(cm.z3.MkNumeral(m, cm.z3.MkRealSort()), cm.z3.MkNumeral(f, cm.z3.MkRealSort()));
+ }
+ }
+ else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ public Term Visit(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ VCExprOp op = node.Op;
+ Contract.Assert(op != null);
+
+ if (op.Equals(VCExpressionGenerator.AndOp) || op.Equals(VCExpressionGenerator.OrOp))
+ {
+ // handle these operators without recursion
+ List<Term> asts = new List<Term>();
+ string opString = op.Equals(VCExpressionGenerator.AndOp) ? "AND" : "OR";
+
+ IEnumerator enumerator = new VCExprNAryUniformOpEnumerator(node);
+ Contract.Assert(enumerator != null);
+ while (enumerator.MoveNext())
+ {
+ VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
+ if (naryExpr == null || !naryExpr.Op.Equals(op))
+ {
+ asts.Add(Linearise(cce.NonNull((VCExpr)enumerator.Current), options));
+ }
+ }
+
+ return Make(op, asts);
+ }
+
+ return node.Accept<Term, LineariserOptions>(OpLineariser, options);
+ }
+
+ public Term Visit(VCExprVar node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ if (letBindings.ContainsKey(node))
+ {
+ return letBindings[node];
+ }
+ else
+ {
+ string varName = namer.GetName(node, node.Name);
+ return cm.GetConstant(varName, node.Type,node);
+ }
+ }
+
+ public Term Visit(VCExprQuantifier node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ Contract.Assert(node.TypeParameters.Count == 0);
+
+ namer.PushScope();
+ try
+ {
+ List<string> varNames;
+ List<Type> varTypes;
+ VisitBounds(node.BoundVars, out varNames, out varTypes);
+ List<Pattern> patterns;
+ List<Term> no_patterns;
+ VisitTriggers(node.Triggers, options, out patterns, out no_patterns);
+ Term body = Linearise(node.Body, options);
+ Term result;
+ uint weight = 1;
+ string qid = "";
+ int skolemid = 0;
+
+ if (options.QuantifierIds)
+ {
+ VCQuantifierInfos infos = node.Infos;
+ Contract.Assert(infos != null);
+ if (infos.qid != null)
+ {
+ qid = infos.qid;
+ }
+ if (0 <= infos.uniqueId)
+ {
+ skolemid = infos.uniqueId;
+ }
+ }
+
+ if (options.UseWeights)
+ {
+ weight = (uint) QKeyValue.FindIntAttribute(node.Infos.attributes, "weight", 1);
+ }
+
+ switch (node.Quan)
+ {
+ case Microsoft.Boogie.VCExprAST.Quantifier.ALL:
+ result = MakeQuantifier(true, weight, qid, skolemid, varNames, varTypes, patterns, no_patterns, body); break;
+ case Microsoft.Boogie.VCExprAST.Quantifier.EX:
+ result = MakeQuantifier(false, weight, qid, skolemid, varNames, varTypes, patterns, no_patterns, body); break;
+ default:
+ throw new Exception("unknown quantifier kind " + node.Quan);
+ }
+ return result;
+ }
+ finally
+ {
+ namer.PopScope();
+ }
+ }
+
+ private Term MakeQuantifier(bool isForall, uint weight, string qid, int skolemid, List<string> varNames, List<Type> boogieTypes, List<Pattern> patterns, List<Term> no_patterns, Term body) {
+ List<Term> bound = new List<Term>();
+ for (int i = 0; i < varNames.Count; i++) {
+ Term t = cm.GetConstant(varNames[i], boogieTypes[i], null);
+ bound.Add(t);
+ }
+
+ Term termAst = cm.z3.MkQuantifier(isForall, weight, cm.z3.MkSymbol(qid), cm.z3.MkSymbol(skolemid.ToString()), patterns.ToArray(), no_patterns.ToArray(), bound.ToArray(), body);
+ return termAst;
+ }
+
+ private void VisitBounds(List<VCExprVar> boundVars, out List<string> varNames, out List<Type> varTypes)
+ {
+ varNames = new List<string>();
+ varTypes = new List<Type>();
+ foreach (VCExprVar var in boundVars)
+ {
+ string varName = namer.GetLocalName(var, var.Name);
+ varNames.Add(varName);
+ varTypes.Add(var.Type);
+ }
+ }
+
+ private void VisitTriggers(List<VCTrigger> triggers, LineariserOptions options, out List<Pattern> patterns, out List<Term> no_patterns)
+ {
+ patterns = new List<Pattern>();
+ no_patterns = new List<Term>();
+ foreach (VCTrigger trigger in triggers)
+ {
+ List<Term> exprs = new List<Term>();
+ foreach (VCExpr expr in trigger.Exprs)
+ {
+ System.Diagnostics.Debug.Assert(expr != null);
+ Term termAst = Linearise(expr, options);
+ exprs.Add(termAst);
+ }
+ if (exprs.Count > 0)
+ {
+ if (trigger.Pos) {
+ Pattern pattern = cm.z3.MkPattern(exprs.ToArray());
+ patterns.Add(pattern);
+ }
+ else {
+ System.Diagnostics.Debug.Assert(false, "Z3api currently does not handle nopats");
+ foreach (Term expr in exprs)
+ no_patterns.Add(expr);
+ }
+ }
+ }
+ }
+
+ public Term Visit(VCExprLet node, LineariserOptions options)
+ {
+ foreach (VCExprLetBinding b in node)
+ {
+ Term defAst = Linearise(b.E, options);
+ letBindings.Add(b.V, defAst);
+ }
+ Term letAst = Linearise(node.Body, options);
+ foreach (VCExprLetBinding b in node)
+ {
+ letBindings.Remove(b.V);
+ }
+ return letAst;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ internal class Z3apiOpLineariser : IVCExprOpVisitor<Term, LineariserOptions>
+ {
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(ExprLineariser != null);
+ }
+
+ private readonly Z3apiExprLineariser ExprLineariser;
+
+ public Z3apiOpLineariser(Z3apiExprLineariser ExprLineariser)
+ {
+ Contract.Requires(ExprLineariser != null);
+ this.ExprLineariser = ExprLineariser;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ private Term WriteApplication(VCExprOp op, IEnumerable<VCExpr> terms, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(terms));
+
+ List<Term> args = new List<Term>();
+ foreach (VCExpr e in terms)
+ {
+ Contract.Assert(e != null);
+ args.Add(ExprLineariser.Linearise(e, options));
+ }
+ return ExprLineariser.Make(op, args);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public Term VisitNotOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitEqOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitNeqOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitAndOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitOrOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitImpliesOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitDistinctOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitLabelOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ VCExprLabelOp op = (VCExprLabelOp)node.Op;
+ Contract.Assert(op != null);
+ return ExprLineariser.cm.MakeLabel(op.label, op.pos, ExprLineariser.Linearise(node[0], options));
+ }
+
+ public Term VisitSelectOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ List<Term> args = new List<Term>();
+ foreach (VCExpr e in node)
+ {
+ Contract.Assert(e != null);
+ args.Add(ExprLineariser.Linearise(e, options));
+ }
+ System.Diagnostics.Debug.Assert(args.Count >= 2);
+
+ Term selectTerm = args[0];
+ for (int i = 1; i < args.Count; i++) {
+ selectTerm = ExprLineariser.cm.z3.MkArraySelect(selectTerm, args[i]);
+ }
+ return selectTerm;
+ }
+
+ private Term ConstructStoreTerm(Term mapTerm, List<Term> args, int index) {
+ System.Diagnostics.Debug.Assert(0 < index && index < args.Count - 1);
+ if (index == args.Count - 2) {
+ return ExprLineariser.cm.z3.MkArrayStore(mapTerm, args[index], args[index + 1]);
+ }
+ else {
+ Term t = ConstructStoreTerm(ExprLineariser.cm.z3.MkArraySelect(mapTerm, args[index]), args, index + 1);
+ return ExprLineariser.cm.z3.MkArrayStore(mapTerm, args[index], t);
+ }
+ }
+
+ public Term VisitStoreOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ List<Term> args = new List<Term>();
+ foreach (VCExpr e in node)
+ {
+ Contract.Assert(e != null);
+ args.Add(ExprLineariser.Linearise(e, options));
+ }
+ return ConstructStoreTerm(args[0], args, 1);
+ }
+
+ public Term VisitBvOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ List<int> args = new List<int>();
+ foreach (VCExpr e in node) {
+ VCExprIntLit literal = e as VCExprIntLit;
+ System.Diagnostics.Debug.Assert(literal != null);
+ args.Add(literal.Val.ToInt);
+ }
+ System.Diagnostics.Debug.Assert(args.Count == 1);
+ return ExprLineariser.cm.z3.MkNumeral(args[0], ExprLineariser.cm.z3.MkBvSort((uint)node.Type.BvBits));
+ }
+
+ public Term VisitBvExtractOp(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+
+ VCExprBvExtractOp op = (VCExprBvExtractOp)node.Op;
+ Contract.Assert(op != null);
+ System.Diagnostics.Debug.Assert(0 <= op.Start && op.Start < op.End);
+
+ List<Term> args = new List<Term>();
+ foreach (VCExpr e in node) {
+ Contract.Assert(e != null);
+ args.Add(ExprLineariser.Linearise(e, options));
+ }
+ System.Diagnostics.Debug.Assert(args.Count == 1);
+ return ExprLineariser.cm.z3.MkBvExtract((uint) op.End - 1, (uint) op.Start, args[0]);
+ }
+
+ public Term VisitBvConcatOp(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+
+ VCExprBvConcatOp op = (VCExprBvConcatOp)node.Op;
+ Contract.Assert(op != null);
+
+ List<Term> args = new List<Term>();
+ foreach (VCExpr e in node) {
+ Contract.Assert(e != null);
+ args.Add(ExprLineariser.Linearise(e, options));
+ }
+ System.Diagnostics.Debug.Assert(args.Count == 2);
+ return ExprLineariser.cm.z3.MkBvConcat(args[0], args[1]);
+ }
+
+ public Term VisitIfThenElseOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitCustomOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(node != null);
+ Contract.Requires(options != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitAddOp(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitSubOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitMulOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitDivOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitModOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitRealDivOp(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitPowOp(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitLtOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitLeOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitGtOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitGeOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitSubtypeOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitSubtype3Op(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitToIntOp(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitToRealOp(VCExprNAry node, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+
+ public Term VisitBoogieFunctionOp(VCExprNAry node, LineariserOptions options)
+ {
+ Contract.Requires(options != null);
+ Contract.Requires(node != null);
+ return WriteApplication(node.Op, node, options);
+ }
+ }
+ }
+}
diff --git a/Source/Provers/Z3api/Z3api.csproj b/Source/Provers/Z3api/Z3api.csproj
index 1627536d..3fb2fe48 100644
--- a/Source/Provers/Z3api/Z3api.csproj
+++ b/Source/Provers/Z3api/Z3api.csproj
@@ -1,189 +1,189 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{966DD87B-A29D-4F3C-9406-F680A61DC0E0}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Microsoft.Boogie.Z3api</RootNamespace>
- <AssemblyName>Provers.Z3api</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <StartupObject>
- </StartupObject>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for Z3api.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\Provers.Z3api.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- </PropertyGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
- <ItemGroup>
- <Reference Include="ManagedAPI">
- <HintPath>..\..\..\..\..\iZ3\win\iZ3\Debug\ManagedAPI.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Core">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Data" />
- <Reference Include="System.XML" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Model\Model.csproj">
- <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\VCExpr\VCExpr.csproj">
- <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
- <Name>VCExpr</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\VCGeneration\VCGeneration.csproj">
- <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
- <Name>VCGeneration</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="ContextLayer.cs" />
- <Compile Include="ProverLayer.cs" />
- <Compile Include="TypeAdapter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="VCExprVisitor.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{966DD87B-A29D-4F3C-9406-F680A61DC0E0}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Microsoft.Boogie.Z3api</RootNamespace>
+ <AssemblyName>Provers.Z3api</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <StartupObject>
+ </StartupObject>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
+ <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for Z3api.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\Provers.Z3api.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ </PropertyGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+ <ItemGroup>
+ <Reference Include="ManagedAPI">
+ <HintPath>..\..\..\..\..\iZ3\win\iZ3\Debug\ManagedAPI.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data" />
+ <Reference Include="System.XML" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Model\Model.csproj">
+ <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
+ <Name>Model</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\VCExpr\VCExpr.csproj">
+ <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
+ <Name>VCExpr</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\VCGeneration\VCGeneration.csproj">
+ <Project>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</Project>
+ <Name>VCGeneration</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="ContextLayer.cs" />
+ <Compile Include="ProverLayer.cs" />
+ <Compile Include="TypeAdapter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="VCExprVisitor.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/Source/Provers/Z3api/cce.cs b/Source/Provers/Z3api/cce.cs
index ef594484..1e0b12a5 100644
--- a/Source/Provers/Z3api/cce.cs
+++ b/Source/Provers/Z3api/cce.cs
@@ -1,193 +1,193 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
- }
- //[Pure]
- //public static bool NonNullElements(VariableSeq collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
- return iEnumerator != null;
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
- //[Pure]
- //public static bool IsValid(Microsoft.Dafny.Expression expression) {
- // return true;
- //}
- //public static List<T> toList<T>(PureCollections.Sequence s) {
- // List<T> toRet = new List<T>();
- // foreach (T t in s.elems)
- // if(t!=null)
- // toRet.Add(t);
- // return toRet;
- //}
-
- //internal static bool NonNullElements(Set set) {
- // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
- //}
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
+ }
+ //[Pure]
+ //public static bool NonNullElements(VariableSeq collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
+ return iEnumerator != null;
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+ //[Pure]
+ //public static bool IsValid(Microsoft.Dafny.Expression expression) {
+ // return true;
+ //}
+ //public static List<T> toList<T>(PureCollections.Sequence s) {
+ // List<T> toRet = new List<T>();
+ // foreach (T t in s.elems)
+ // if(t!=null)
+ // toRet.Add(t);
+ // return toRet;
+ //}
+
+ //internal static bool NonNullElements(Set set) {
+ // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
+ //}
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/UnitTests/BasetypesTests/BasetypesTests.csproj b/Source/UnitTests/BasetypesTests/BasetypesTests.csproj
index a2056f95..7ace2930 100644
--- a/Source/UnitTests/BasetypesTests/BasetypesTests.csproj
+++ b/Source/UnitTests/BasetypesTests/BasetypesTests.csproj
@@ -1,69 +1,69 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>BasetypesTests</RootNamespace>
- <AssemblyName>BasetypesTests</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="nunit.framework">
- <HintPath>..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Numerics" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="BigDecTests.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
- <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{D00C3F22-1EDA-4781-8F0E-81991E9CB0D9}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>BasetypesTests</RootNamespace>
+ <AssemblyName>BasetypesTests</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="nunit.framework">
+ <HintPath>..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="BigDecTests.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
+ <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/UnitTests/BasetypesTests/Properties/AssemblyInfo.cs b/Source/UnitTests/BasetypesTests/Properties/AssemblyInfo.cs
index 4ef7c05c..316282c7 100644
--- a/Source/UnitTests/BasetypesTests/Properties/AssemblyInfo.cs
+++ b/Source/UnitTests/BasetypesTests/Properties/AssemblyInfo.cs
@@ -1,36 +1,36 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("BasetypesTests")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("BasetypesTests")]
-[assembly: AssemblyCopyright("Copyright © 2014")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("0cca79cc-3251-46d9-87c1-32bc782d9fdd")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("BasetypesTests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("BasetypesTests")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0cca79cc-3251-46d9-87c1-32bc782d9fdd")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Source/UnitTests/BasetypesTests/packages.config b/Source/UnitTests/BasetypesTests/packages.config
index d4e241a2..ad37a528 100644
--- a/Source/UnitTests/BasetypesTests/packages.config
+++ b/Source/UnitTests/BasetypesTests/packages.config
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="NUnit" version="2.6.3" targetFramework="net45" />
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="NUnit" version="2.6.3" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/Source/UnitTests/CoreTests/CoreTests.csproj b/Source/UnitTests/CoreTests/CoreTests.csproj
index ddf310be..24fd8c45 100644
--- a/Source/UnitTests/CoreTests/CoreTests.csproj
+++ b/Source/UnitTests/CoreTests/CoreTests.csproj
@@ -1,84 +1,84 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{961B3BCA-2067-43B2-8E43-23C4293F21B9}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>CoreTests</RootNamespace>
- <AssemblyName>CoreTests</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="nunit.framework">
- <HintPath>..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="AbsyMetadata.cs" />
- <Compile Include="Duplicator.cs" />
- <Compile Include="ExprEquality.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="ExprTypeChecking.cs" />
- <Compile Include="ExprImmutability.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
- <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\TestUtil\TestUtil.csproj">
- <Project>{59118E35-4236-495E-AF6E-0D641302ED2C}</Project>
- <Name>TestUtil</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{961B3BCA-2067-43B2-8E43-23C4293F21B9}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>CoreTests</RootNamespace>
+ <AssemblyName>CoreTests</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="nunit.framework">
+ <HintPath>..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="AbsyMetadata.cs" />
+ <Compile Include="Duplicator.cs" />
+ <Compile Include="ExprEquality.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="ExprTypeChecking.cs" />
+ <Compile Include="ExprImmutability.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Basetypes\Basetypes.csproj">
+ <Project>{43dfad18-3e35-4558-9be2-caff6b5ba8a0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\TestUtil\TestUtil.csproj">
+ <Project>{59118E35-4236-495E-AF6E-0D641302ED2C}</Project>
+ <Name>TestUtil</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/UnitTests/CoreTests/Duplicator.cs b/Source/UnitTests/CoreTests/Duplicator.cs
index 978a041b..9e118f5d 100644
--- a/Source/UnitTests/CoreTests/Duplicator.cs
+++ b/Source/UnitTests/CoreTests/Duplicator.cs
@@ -28,7 +28,7 @@ namespace CoreTests
var A = new BvConcatExpr(Token.NoToken, bv1_8, bv2_8);
var B = d.Visit(A);
- // The duplicator should ensure we get new BVConcatExprs
+ // The duplicator should ensure we get new BVConcatExprs
Assert.AreNotSame(A, B);
}
@@ -38,7 +38,7 @@ namespace CoreTests
var A = new BvExtractExpr(Token.NoToken, bv2_8, 6,0);
var B = d.Visit(A);
- // The duplicator should ensure we get new BVExtractExprs
+ // The duplicator should ensure we get new BVExtractExprs
Assert.AreNotSame(A, B);
}
@@ -47,8 +47,8 @@ namespace CoreTests
var bv1_8 = new LiteralExpr(Token.NoToken, BigNum.FromInt(1), 8);
var bv2_8 = new LiteralExpr(Token.NoToken, BigNum.FromInt(2), 8);
var A = NAryExpr.Eq (bv1_8, bv2_8);
- var B = d.Visit(A);
-
+ var B = d.Visit(A);
+
Assert.AreNotSame(A, B);
}
diff --git a/Source/UnitTests/CoreTests/Properties/AssemblyInfo.cs b/Source/UnitTests/CoreTests/Properties/AssemblyInfo.cs
index fb965517..ddb95704 100644
--- a/Source/UnitTests/CoreTests/Properties/AssemblyInfo.cs
+++ b/Source/UnitTests/CoreTests/Properties/AssemblyInfo.cs
@@ -1,36 +1,36 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("CoreTests")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("CoreTests")]
-[assembly: AssemblyCopyright("Copyright © 2014")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("5c6f8617-e212-4ab7-bce6-5b1a930fa2b8")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CoreTests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CoreTests")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5c6f8617-e212-4ab7-bce6-5b1a930fa2b8")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Source/UnitTests/CoreTests/packages.config b/Source/UnitTests/CoreTests/packages.config
index d4e241a2..ad37a528 100644
--- a/Source/UnitTests/CoreTests/packages.config
+++ b/Source/UnitTests/CoreTests/packages.config
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="NUnit" version="2.6.3" targetFramework="net45" />
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="NUnit" version="2.6.3" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/Source/UnitTests/TestUtil/Properties/AssemblyInfo.cs b/Source/UnitTests/TestUtil/Properties/AssemblyInfo.cs
index 05c9fee5..dfff6200 100644
--- a/Source/UnitTests/TestUtil/Properties/AssemblyInfo.cs
+++ b/Source/UnitTests/TestUtil/Properties/AssemblyInfo.cs
@@ -1,36 +1,36 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("TestUtil")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("TestUtil")]
-[assembly: AssemblyCopyright("Copyright © 2014")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("5630b725-b802-4f97-9e46-6cdfd6819269")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TestUtil")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TestUtil")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5630b725-b802-4f97-9e46-6cdfd6819269")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Source/UnitTests/TestUtil/TestUtil.csproj b/Source/UnitTests/TestUtil/TestUtil.csproj
index b5d620a8..463b6454 100644
--- a/Source/UnitTests/TestUtil/TestUtil.csproj
+++ b/Source/UnitTests/TestUtil/TestUtil.csproj
@@ -1,71 +1,71 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{59118E35-4236-495E-AF6E-0D641302ED2C}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>TestUtil</RootNamespace>
- <AssemblyName>TestUtil</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="nunit.framework">
- <HintPath>..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="AssertionTextWriterTraceListener.cs" />
- <Compile Include="BoogieTestBase.cs" />
- <Compile Include="ProgramLoader.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\Core\Core.csproj">
- <Project>{b230a69c-c466-4065-b9c1-84d80e76d802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
- <Project>{fcd3ac7f-9dfd-46c8-ab1e-09f0b0f16dc5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{59118E35-4236-495E-AF6E-0D641302ED2C}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>TestUtil</RootNamespace>
+ <AssemblyName>TestUtil</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="nunit.framework">
+ <HintPath>..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="AssertionTextWriterTraceListener.cs" />
+ <Compile Include="BoogieTestBase.cs" />
+ <Compile Include="ProgramLoader.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Core\Core.csproj">
+ <Project>{b230a69c-c466-4065-b9c1-84d80e76d802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\ParserHelper\ParserHelper.csproj">
+ <Project>{fcd3ac7f-9dfd-46c8-ab1e-09f0b0f16dc5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Source/UnitTests/TestUtil/packages.config b/Source/UnitTests/TestUtil/packages.config
index d4e241a2..ad37a528 100644
--- a/Source/UnitTests/TestUtil/packages.config
+++ b/Source/UnitTests/TestUtil/packages.config
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="NUnit" version="2.6.3" targetFramework="net45" />
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="NUnit" version="2.6.3" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/Source/VCExpr/BigLiteralAbstracter.cs b/Source/VCExpr/BigLiteralAbstracter.cs
index 879ab6d6..39064fb7 100644
--- a/Source/VCExpr/BigLiteralAbstracter.cs
+++ b/Source/VCExpr/BigLiteralAbstracter.cs
@@ -1,232 +1,232 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-// Code for replacing large integer literals in VCExpr with
-// constants. This is necessary for Simplify, which cannot deal with
-// literals larger than 32 bits
-
-namespace Microsoft.Boogie.VCExprAST {
-
- public class BigLiteralAbstracter : MutatingVCExprVisitor<bool>, ICloneable {
-
- public BigLiteralAbstracter(VCExpressionGenerator gen)
- : base(gen) {
- Contract.Requires(gen != null);
- DummyVar = gen.Variable("x", Type.Int);
- IncAxioms = new List<VCExpr>();
- Literals = new List<KeyValuePair<BigNum, VCExprVar>>();
- }
-
- private BigLiteralAbstracter(BigLiteralAbstracter abstracter)
- : base(abstracter.Gen) {
- Contract.Requires(abstracter != null);
- DummyVar = abstracter.DummyVar;
- IncAxioms = new List<VCExpr>(abstracter.IncAxioms);
- Literals = new List<KeyValuePair<BigNum, VCExprVar>>(abstracter.Literals);
- }
-
- public Object Clone() {
- Contract.Ensures(Contract.Result<Object>() != null);
-
- return new BigLiteralAbstracter(this);
- }
-
- private static readonly BigNum ConstantDistance = BigNum.FromLong(100000);
- private static readonly BigNum NegConstantDistance = BigNum.FromLong(-100000);
- // distance twice plus one
- private static readonly BigNum ConstantDistanceTPO = BigNum.FromLong(200001);
- private static readonly BigNum ConstantDistancePO = BigNum.FromLong(100001);
-
- public VCExpr Abstract(VCExpr expr) {
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return Mutate(expr, true);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // list in which axioms are incrementally collected
- private readonly List<VCExpr/*!*/>/*!*/ IncAxioms;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(IncAxioms));
- }
-
- private void AddAxiom(VCExpr/*!*/ axiom) {
- Contract.Requires(axiom != null);
- IncAxioms.Add(axiom);
- }
-
- // Return all axioms that were added since the last time NewAxioms
- // was called
- public VCExpr GetNewAxioms() {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr res = Gen.NAry(VCExpressionGenerator.AndOp, IncAxioms);
- IncAxioms.Clear();
- return res;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // All named integer literals known to the visitor, in ascending
- // order. Such literals are always positive, and the distance
- // between two literals is always more than ConstantDistance.
- private readonly List<KeyValuePair<BigNum, VCExprVar/*!*/>>/*!*/ Literals;
-
- [ContractInvariantMethod]
- void ObjectInvariat() {
- Contract.Invariant(Literals != null);
- Contract.Invariant(Contract.ForAll(Literals, i => i.Value != null));
- }
-
-
- private class EntryComparerC : IComparer<KeyValuePair<BigNum, VCExprVar/*!*/>> {
- public int Compare(KeyValuePair<BigNum, VCExprVar/*!*/> a,
- KeyValuePair<BigNum, VCExprVar/*!*/> b) {
- //Contract.Requires(a.Value!=null);
- //Contract.Requires(b.Value!=null);
- return a.Key.CompareTo(b.Key);
- }
- }
-
- private static readonly EntryComparerC EntryComparer = new EntryComparerC();
-
- // variable used when searching for entries in the literal list
- private readonly VCExprVar/*!*/ DummyVar;
- [ContractInvariantMethod]
- void ObjectInvarint() {
- Contract.Invariant(DummyVar != null);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
-
- // Construct an expression to represent the given (large) integer
- // literal. Constants are defined and axiomatised if necessary
- private VCExpr Represent(BigNum lit) {
- Contract.Requires((NegConstantDistance > lit || lit > ConstantDistance));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- if (lit.IsNegative)
- return Gen.Function(VCExpressionGenerator.SubIOp,
- Gen.Integer(BigNum.ZERO), RepresentPos(lit.Neg));
- else
- return RepresentPos(lit);
- }
-
- private VCExpr RepresentPos(BigNum lit) {
- Contract.Requires((lit > ConstantDistance));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- int index = GetIndexFor(lit);
- if (index >= 0)
- // precise match
- return Literals[index].Value;
-
- // check whether a constant is defined that is at most
- // ConstantDistance away from lit
- index = ~index;
- VCExpr res = null;
- BigNum resDistance = ConstantDistancePO;
-
- if (index > 0) {
- BigNum dist = lit - Literals[index - 1].Key;
- if (dist < resDistance) {
- resDistance = dist;
- res = Gen.Function(VCExpressionGenerator.AddIOp,
- Literals[index - 1].Value, Gen.Integer(dist));
- }
- }
-
- if (index < Literals.Count) {
- BigNum dist = Literals[index].Key - lit;
- if (dist < resDistance) {
- resDistance = dist;
- res = Gen.Function(VCExpressionGenerator.SubIOp,
- Literals[index].Value, Gen.Integer(dist));
- }
- }
-
- if (res != null)
- return res;
-
- // otherwise, define a new constant to represent this literal
- return AddConstantFor(lit);
- }
-
- private VCExpr AddConstantFor(BigNum lit) {
- Contract.Requires((lit > ConstantDistance));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExprVar res = Gen.Variable("int#" + lit, Type.Int);
- int index = GetIndexFor(lit);
- Contract.Assert(index < 0);
- index = ~index;
-
- Literals.Insert(index, new KeyValuePair<BigNum, VCExprVar>(lit, res));
-
- // relate the new constant to the predecessor and successor
- if (index > 0)
- DefineRelationship(Literals[index - 1].Value, Literals[index - 1].Key,
- res, lit);
- else
- DefineRelationship(Gen.Integer(BigNum.ZERO), BigNum.ZERO, res, lit);
-
- if (index < Literals.Count - 1)
- DefineRelationship(res, lit,
- Literals[index + 1].Value, Literals[index + 1].Key);
-
- return res;
- }
-
- private void DefineRelationship(VCExpr/*!*/ aExpr, BigNum aValue,
- VCExpr/*!*/ bExpr, BigNum bValue) {
- Contract.Requires(aValue < bValue);
- Contract.Requires(aExpr != null);
- Contract.Requires(bExpr != null);
-
- BigNum dist = bValue - aValue;
- VCExpr distExpr = Gen.Function(VCExpressionGenerator.SubIOp, bExpr, aExpr);
- if (dist <= ConstantDistanceTPO)
- // constants that are sufficiently close to each other are put
- // into a precise relationship
- AddAxiom(Gen.Eq(distExpr, Gen.Integer(dist)));
- else
- AddAxiom(Gen.Function(VCExpressionGenerator.GtOp,
- distExpr, Gen.Integer(ConstantDistanceTPO)));
- }
-
- private int GetIndexFor(BigNum lit) {
- return Literals.BinarySearch(new KeyValuePair<BigNum, VCExprVar>
- (lit, DummyVar),
- EntryComparer);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override VCExpr Visit(VCExprLiteral node, bool arg) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExprIntLit intLit = node as VCExprIntLit;
- if (intLit != null) {
- if (NegConstantDistance > intLit.Val || intLit.Val > ConstantDistance)
- return Represent(intLit.Val);
- }
- return node;
- }
-
- }
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+// Code for replacing large integer literals in VCExpr with
+// constants. This is necessary for Simplify, which cannot deal with
+// literals larger than 32 bits
+
+namespace Microsoft.Boogie.VCExprAST {
+
+ public class BigLiteralAbstracter : MutatingVCExprVisitor<bool>, ICloneable {
+
+ public BigLiteralAbstracter(VCExpressionGenerator gen)
+ : base(gen) {
+ Contract.Requires(gen != null);
+ DummyVar = gen.Variable("x", Type.Int);
+ IncAxioms = new List<VCExpr>();
+ Literals = new List<KeyValuePair<BigNum, VCExprVar>>();
+ }
+
+ private BigLiteralAbstracter(BigLiteralAbstracter abstracter)
+ : base(abstracter.Gen) {
+ Contract.Requires(abstracter != null);
+ DummyVar = abstracter.DummyVar;
+ IncAxioms = new List<VCExpr>(abstracter.IncAxioms);
+ Literals = new List<KeyValuePair<BigNum, VCExprVar>>(abstracter.Literals);
+ }
+
+ public Object Clone() {
+ Contract.Ensures(Contract.Result<Object>() != null);
+
+ return new BigLiteralAbstracter(this);
+ }
+
+ private static readonly BigNum ConstantDistance = BigNum.FromLong(100000);
+ private static readonly BigNum NegConstantDistance = BigNum.FromLong(-100000);
+ // distance twice plus one
+ private static readonly BigNum ConstantDistanceTPO = BigNum.FromLong(200001);
+ private static readonly BigNum ConstantDistancePO = BigNum.FromLong(100001);
+
+ public VCExpr Abstract(VCExpr expr) {
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return Mutate(expr, true);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // list in which axioms are incrementally collected
+ private readonly List<VCExpr/*!*/>/*!*/ IncAxioms;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(IncAxioms));
+ }
+
+ private void AddAxiom(VCExpr/*!*/ axiom) {
+ Contract.Requires(axiom != null);
+ IncAxioms.Add(axiom);
+ }
+
+ // Return all axioms that were added since the last time NewAxioms
+ // was called
+ public VCExpr GetNewAxioms() {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr res = Gen.NAry(VCExpressionGenerator.AndOp, IncAxioms);
+ IncAxioms.Clear();
+ return res;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // All named integer literals known to the visitor, in ascending
+ // order. Such literals are always positive, and the distance
+ // between two literals is always more than ConstantDistance.
+ private readonly List<KeyValuePair<BigNum, VCExprVar/*!*/>>/*!*/ Literals;
+
+ [ContractInvariantMethod]
+ void ObjectInvariat() {
+ Contract.Invariant(Literals != null);
+ Contract.Invariant(Contract.ForAll(Literals, i => i.Value != null));
+ }
+
+
+ private class EntryComparerC : IComparer<KeyValuePair<BigNum, VCExprVar/*!*/>> {
+ public int Compare(KeyValuePair<BigNum, VCExprVar/*!*/> a,
+ KeyValuePair<BigNum, VCExprVar/*!*/> b) {
+ //Contract.Requires(a.Value!=null);
+ //Contract.Requires(b.Value!=null);
+ return a.Key.CompareTo(b.Key);
+ }
+ }
+
+ private static readonly EntryComparerC EntryComparer = new EntryComparerC();
+
+ // variable used when searching for entries in the literal list
+ private readonly VCExprVar/*!*/ DummyVar;
+ [ContractInvariantMethod]
+ void ObjectInvarint() {
+ Contract.Invariant(DummyVar != null);
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // Construct an expression to represent the given (large) integer
+ // literal. Constants are defined and axiomatised if necessary
+ private VCExpr Represent(BigNum lit) {
+ Contract.Requires((NegConstantDistance > lit || lit > ConstantDistance));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ if (lit.IsNegative)
+ return Gen.Function(VCExpressionGenerator.SubIOp,
+ Gen.Integer(BigNum.ZERO), RepresentPos(lit.Neg));
+ else
+ return RepresentPos(lit);
+ }
+
+ private VCExpr RepresentPos(BigNum lit) {
+ Contract.Requires((lit > ConstantDistance));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ int index = GetIndexFor(lit);
+ if (index >= 0)
+ // precise match
+ return Literals[index].Value;
+
+ // check whether a constant is defined that is at most
+ // ConstantDistance away from lit
+ index = ~index;
+ VCExpr res = null;
+ BigNum resDistance = ConstantDistancePO;
+
+ if (index > 0) {
+ BigNum dist = lit - Literals[index - 1].Key;
+ if (dist < resDistance) {
+ resDistance = dist;
+ res = Gen.Function(VCExpressionGenerator.AddIOp,
+ Literals[index - 1].Value, Gen.Integer(dist));
+ }
+ }
+
+ if (index < Literals.Count) {
+ BigNum dist = Literals[index].Key - lit;
+ if (dist < resDistance) {
+ resDistance = dist;
+ res = Gen.Function(VCExpressionGenerator.SubIOp,
+ Literals[index].Value, Gen.Integer(dist));
+ }
+ }
+
+ if (res != null)
+ return res;
+
+ // otherwise, define a new constant to represent this literal
+ return AddConstantFor(lit);
+ }
+
+ private VCExpr AddConstantFor(BigNum lit) {
+ Contract.Requires((lit > ConstantDistance));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExprVar res = Gen.Variable("int#" + lit, Type.Int);
+ int index = GetIndexFor(lit);
+ Contract.Assert(index < 0);
+ index = ~index;
+
+ Literals.Insert(index, new KeyValuePair<BigNum, VCExprVar>(lit, res));
+
+ // relate the new constant to the predecessor and successor
+ if (index > 0)
+ DefineRelationship(Literals[index - 1].Value, Literals[index - 1].Key,
+ res, lit);
+ else
+ DefineRelationship(Gen.Integer(BigNum.ZERO), BigNum.ZERO, res, lit);
+
+ if (index < Literals.Count - 1)
+ DefineRelationship(res, lit,
+ Literals[index + 1].Value, Literals[index + 1].Key);
+
+ return res;
+ }
+
+ private void DefineRelationship(VCExpr/*!*/ aExpr, BigNum aValue,
+ VCExpr/*!*/ bExpr, BigNum bValue) {
+ Contract.Requires(aValue < bValue);
+ Contract.Requires(aExpr != null);
+ Contract.Requires(bExpr != null);
+
+ BigNum dist = bValue - aValue;
+ VCExpr distExpr = Gen.Function(VCExpressionGenerator.SubIOp, bExpr, aExpr);
+ if (dist <= ConstantDistanceTPO)
+ // constants that are sufficiently close to each other are put
+ // into a precise relationship
+ AddAxiom(Gen.Eq(distExpr, Gen.Integer(dist)));
+ else
+ AddAxiom(Gen.Function(VCExpressionGenerator.GtOp,
+ distExpr, Gen.Integer(ConstantDistanceTPO)));
+ }
+
+ private int GetIndexFor(BigNum lit) {
+ return Literals.BinarySearch(new KeyValuePair<BigNum, VCExprVar>
+ (lit, DummyVar),
+ EntryComparer);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr Visit(VCExprLiteral node, bool arg) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExprIntLit intLit = node as VCExprIntLit;
+ if (intLit != null) {
+ if (NegConstantDistance > intLit.Val || intLit.Val > ConstantDistance)
+ return Represent(intLit.Val);
+ }
+ return node;
+ }
+
+ }
+
} \ No newline at end of file
diff --git a/Source/VCExpr/Boogie2VCExpr.cs b/Source/VCExpr/Boogie2VCExpr.cs
index ad319c0e..a3364ad8 100644
--- a/Source/VCExpr/Boogie2VCExpr.cs
+++ b/Source/VCExpr/Boogie2VCExpr.cs
@@ -1,1239 +1,1239 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-// A translator from the Boogie AST to the VCExpr AST.
-// This was previously realised in the methods AbsyExpr.VCView
-
-namespace Microsoft.Boogie.VCExprAST {
- using Microsoft.Boogie;
-
- // TODO: in future we might use that for defining symbols for Boogie's conditional compilation
- public class VCGenerationOptions {
- private readonly List<string/*!*/>/*!*/ SupportedProverCommands;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(SupportedProverCommands));
- }
-
-
- public bool IsProverCommandSupported(string kind) {
- Contract.Requires(kind != null);
- return SupportedProverCommands.Contains(kind);
- }
-
- public bool IsAnyProverCommandSupported(string kinds) {
- Contract.Requires(kinds != null);
- if (kinds.IndexOf(',') < 0) {
- return IsProverCommandSupported(kinds);
- } else {
- return kinds.Split(',', ' ').Any(k => IsProverCommandSupported(k));
- }
- }
-
- public VCGenerationOptions(List<string/*!*/>/*!*/ supportedProverCommands) {
- Contract.Requires(cce.NonNullElements(supportedProverCommands));
- this.SupportedProverCommands = supportedProverCommands;
- }
- }
-
- public delegate VCExpr/*!*/ CodeExprConverter(CodeExpr/*!*/ codeExpr, Hashtable/*<Block, VCExprVar!>*//*!*/ blockVariables, List<VCExprLetBinding> bindings, bool isPositiveContext);
-
- public class Boogie2VCExprTranslator : ReadOnlyVisitor, ICloneable {
- // Stack on which the various Visit-methods put the result of the translation
- private readonly Stack<VCExpr/*!*/>/*!*/ SubExpressions = new Stack<VCExpr>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(SubExpressions));
- Contract.Invariant(Gen != null);
- }
-
-
- private void Push(VCExpr expr) {
- Contract.Requires(expr != null);
- SubExpressions.Push(expr);
- }
-
- private VCExpr Pop() {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return SubExpressions.Pop();
- }
-
- public VCExpr Translate(Expr expr) {
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- this.Visit(expr);
- return Pop();
- }
-
- public List<VCExpr/*!*/>/*!*/ Translate(IList<Expr> exprs) {
- Contract.Requires(exprs != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
- List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
- foreach (Expr e in exprs)
- res.Add(Translate(cce.NonNull(e)));
- return res;
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- internal readonly VCExpressionGenerator/*!*/ Gen;
-
- public Boogie2VCExprTranslator(VCExpressionGenerator gen,
- VCGenerationOptions genOptions) {
- Contract.Requires(gen != null);
- Contract.Requires(genOptions != null);
- this.Gen = gen;
- this.GenerationOptions = genOptions;
- UnboundVariables = new VariableMapping<Variable>();
- BoundVariables = new VariableMapping<BoundVariable>();
- Formals = new VariableMapping<Formal>();
- }
-
- private Boogie2VCExprTranslator(Boogie2VCExprTranslator tl) {
- Contract.Requires(tl != null);
- this.Gen = tl.Gen;
- this.GenerationOptions = tl.GenerationOptions;
- UnboundVariables =
- (VariableMapping<Variable>)tl.UnboundVariables.Clone();
- BoundVariables = new VariableMapping<BoundVariable>();
- Formals = new VariableMapping<Formal>();
- }
-
- public object Clone() {
- Contract.Ensures(Contract.Result<object>() != null);
- return new Boogie2VCExprTranslator(this);
- }
-
- private IAppliableTranslator IAppTranslatorAttr = null;
- private IAppliableTranslator IAppTranslator {
- get {
- Contract.Ensures(Contract.Result<IAppliableTranslator>() != null);
-
- if (IAppTranslatorAttr == null)
- IAppTranslatorAttr = new IAppliableTranslator(this);
- return IAppTranslatorAttr;
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////
- // Class for handling occurring variables
-
- private class VariableMapping<VarKind> : ICloneable {
- private readonly List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>/*!*/ Mapping;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Mapping != null && Contract.ForAll(Mapping, i => cce.NonNullDictionaryAndValues(i)));
- }
-
-
- public VariableMapping() {
- List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>/*!*/ mapping =
- new List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>();
- mapping.Add(new Dictionary<VarKind/*!*/, VCExprVar/*!*/>());
- this.Mapping = mapping;
- }
-
- private VariableMapping(VariableMapping<VarKind> vm) {
- Contract.Requires(vm != null);
- List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>/*!*/ mapping =
- new List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>();
- foreach (Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/ d in vm.Mapping) {
- Contract.Assert(cce.NonNullDictionaryAndValues(d));
- mapping.Add(new Dictionary<VarKind/*!*/, VCExprVar/*!*/>(d));
- }
- this.Mapping = mapping;
- }
-
- public object Clone() {
- Contract.Ensures(Contract.Result<object>() != null);
- return new VariableMapping<VarKind>(this);
- }
-
- public void PushScope() {
- Mapping.Add(new Dictionary<VarKind/*!*/, VCExprVar/*!*/>());
- }
-
- public void PopScope() {
- Contract.Assume(Mapping.Count > 0);
- Mapping.RemoveAt(Mapping.Count - 1);
- }
-
- public void Bind(VarKind boogieVar, VCExprVar/*!*/ vcExprVar) {
- Contract.Requires(vcExprVar != null);
- Contract.Requires(boogieVar != null);
- Contract.Requires(!Contains(boogieVar));
- Mapping[Mapping.Count - 1].Add(boogieVar, vcExprVar);
- }
-
- public VCExprVar Lookup(VarKind boogieVar) {
- Contract.Requires(boogieVar != null);
- Contract.Ensures(Contract.Result<VCExprVar>() != null);
- VCExprVar res = LookupHelp(boogieVar);
- Contract.Assume(res != null);
- return res;
- }
-
- [Pure]
- public bool Contains(VarKind boogieVar) {
- Contract.Requires(boogieVar != null);
- return LookupHelp(boogieVar) != null;
- }
-
- public bool TryGetValue(VarKind boogieVar, out VCExprVar res) {
- Contract.Requires(boogieVar != null);
- res = LookupHelp(boogieVar);
- return res != null;
- }
-
- [Pure]
- private VCExprVar LookupHelp(VarKind boogieVar) {
- Contract.Requires(boogieVar != null);
- VCExprVar res;
- foreach (Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/ d in Mapping) {
- //Contract.Assert(cce.NonNullElements(d));
- if (d.TryGetValue(boogieVar, out res)) {
- Contract.Assert(res != null);
- return res;
- }
- }
- return null;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
- private readonly VariableMapping<Variable>/*!*/ UnboundVariables;
- private readonly VariableMapping<BoundVariable>/*!*/ BoundVariables;
- // used when translating the bodies of function expansions
- private readonly VariableMapping<Formal>/*!*/ Formals;
- [ContractInvariantMethod]
- void ObjectInvairant() {
- Contract.Invariant(UnboundVariables != null);
- Contract.Invariant(BoundVariables != null);
- Contract.Invariant(Formals != null);
- }
-
-
- internal void PushBoundVariableScope() {
- BoundVariables.PushScope();
- }
- internal void PopBoundVariableScope() {
- BoundVariables.PopScope();
- }
-
- internal void PushFormalsScope() {
- Formals.PushScope();
- }
- internal void PopFormalsScope() {
- Formals.PopScope();
- }
-
- public VCExprVar BindVariable(Variable boogieVar) {
- Contract.Requires(boogieVar != null);
- Contract.Ensures(Contract.Result<VCExprVar>() != null);
- if (boogieVar is BoundVariable) {
- VCExprVar/*!*/ newVar = Gen.Variable(boogieVar.Name, boogieVar.TypedIdent.Type);
- BoundVariables.Bind((BoundVariable)boogieVar, newVar);
- return newVar;
- } else if (boogieVar is Formal) {
- VCExprVar/*!*/ newVar = Gen.Variable(boogieVar.Name, boogieVar.TypedIdent.Type);
- Formals.Bind((Formal)boogieVar, newVar);
- return newVar;
- } else {
- // only bound variables and formals are declared explicitly
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- public VCExprVar LookupVariable(Variable boogieVar) {
- Contract.Requires(boogieVar != null);
- Contract.Ensures(Contract.Result<VCExprVar>() != null);
-
- BoundVariable bv = boogieVar as BoundVariable;
- if (bv != null) {
- return BoundVariables.Lookup(bv);
- }
- VCExprVar res;
- Formal fml = boogieVar as Formal;
- if (fml != null && Formals.TryGetValue(fml, out res))
- return cce.NonNull(res);
-
- // global variables, local variables, incarnations, etc. are
- // bound the first time they occur
- if (!UnboundVariables.TryGetValue(boogieVar, out res)) {
- if (boogieVar is Constant)
- res = new VCExprConstant(boogieVar.Name, boogieVar.TypedIdent.Type);
- else
- res = new VCExprVar(boogieVar.Name, boogieVar.TypedIdent.Type);
- UnboundVariables.Bind(boogieVar, res);
- }
- return cce.NonNull(res);
- }
-
- /// <summary>
- /// Unlike LookupVariable, this method does not create a new variable mapping if none is
- /// found. Instead, this method returns null in such cases. Also, this method does not
- /// look for bound variables.
- /// </summary>
- /// <param name="boogieVar"></param>
- /// <returns></returns>
- public VCExprVar TryLookupVariable(Variable boogieVar) {
- Contract.Requires(boogieVar != null);
-
- VCExprVar res;
- Formal fml = boogieVar as Formal;
- if (fml != null && Formals.TryGetValue(fml, out res))
- return cce.NonNull(res);
-
- if (UnboundVariables.TryGetValue(boogieVar, out res)) {
- return cce.NonNull(res);
- }
-
- return null; // not present
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- internal readonly VCGenerationOptions/*!*/ GenerationOptions;
- [ContractInvariantMethod]
- void ObjectInvarian() {
- Contract.Invariant(GenerationOptions != null);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public override Expr VisitLiteralExpr(LiteralExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Push(TranslateLiteralExpr(node));
- return node;
- }
- private VCExpr TranslateLiteralExpr(LiteralExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (node.Val is bool) {
- bool b = (bool)node.Val;
- if (b) {
- return VCExpressionGenerator.True;
- } else {
- return VCExpressionGenerator.False;
- }
- } else if (node.Val is BigNum) {
- return Gen.Integer(node.asBigNum);
- } else if (node.Val is BigDec) {
- return Gen.Real(node.asBigDec);
- } else if (node.Val is BigFloat) {
- return Gen.Float(node.asBigFloat);
- }
- else if (node.Val is BvConst) {
- return Gen.Bitvector((BvConst)node.Val);
- } else {
- System.Diagnostics.Debug.Assert(false, "unknown kind of literal " + node.tok.ToString());
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public override Expr VisitIdentifierExpr(IdentifierExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Contract.Assume(node.Decl != null); // the expression has to be resolved
- Push(LookupVariable(node.Decl));
- return node;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- // Because of our scheme for numbering incarnations of variables, the pre-state
- // value of a variable x is always just "x". (The first update to it in a method
- // causes it to become "x0". So we just remove old expressions with a visitor
- // before transforming it into a VCExpr.
- public override Expr VisitOldExpr(OldExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public override Expr VisitNAryExpr(NAryExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Push(TranslateNAryExpr(node));
- return node;
- }
-
- public bool isPositiveContext = true;
- private VCExpr TranslateNAryExpr(NAryExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- bool flipContextForArg0 = false;
- if (node.Fun is UnaryOperator)
- {
- UnaryOperator oper = (UnaryOperator)node.Fun;
- if (oper.Op == UnaryOperator.Opcode.Not)
- flipContextForArg0 = true;
- }
- else if (node.Fun is BinaryOperator)
- {
- BinaryOperator oper = (BinaryOperator)node.Fun;
- if (oper.Op == BinaryOperator.Opcode.Imp)
- flipContextForArg0 = true;
- else if (oper.Op == BinaryOperator.Opcode.Iff) {
- Expr one = new NAryExpr(node.tok, new BinaryOperator(node.tok, BinaryOperator.Opcode.Imp), new List<Expr> { node.Args[0], node.Args[1] });
- Expr two = new NAryExpr(node.tok, new BinaryOperator(node.tok, BinaryOperator.Opcode.Imp), new List<Expr> { node.Args[1], node.Args[0] });
- NAryExpr cmpd = new NAryExpr(node.tok, new BinaryOperator(node.tok, BinaryOperator.Opcode.And), new List<Expr> { one, two });
- TypecheckingContext tc = new TypecheckingContext(null);
- cmpd.Typecheck(tc);
- return TranslateNAryExpr(cmpd);
- }
- }
-
- int n = node.Args.Count;
- List<VCExpr/*!*/>/*!*/ vcs = new List<VCExpr/*!*/>(n);
-
- for (int i = 0; i < n; i++) {
- if (i == 0 && flipContextForArg0)
- isPositiveContext = !isPositiveContext;
- vcs.Add(Translate(cce.NonNull(node.Args)[i]));
- if (i == 0 && flipContextForArg0)
- isPositiveContext = !isPositiveContext;
- }
-
- if (node.Type == null) {
- System.Console.WriteLine("*** type is null for {0}", node);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- return IAppTranslator.Translate(node.Fun, node.Type, vcs,
- ToList(cce.NonNull(node.TypeParameters)));
- }
-
-
- private static List<Type/*!*/>/*!*/ EMPTY_TYPE_LIST = new List<Type/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvirant() {
- Contract.Invariant(EMPTY_TYPE_LIST != null);
- }
-
-
- private List<Type/*!*/>/*!*/ ToList(TypeParamInstantiation insts) {
- Contract.Requires(insts != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
- if (insts.FormalTypeParams.Count == 0)
- return EMPTY_TYPE_LIST;
-
- List<Type/*!*/>/*!*/ typeArgs = new List<Type/*!*/>();
- foreach (TypeVariable/*!*/ var in insts.FormalTypeParams) {
- Contract.Assert(var != null);
- typeArgs.Add(insts[var]);
- }
- return typeArgs;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<QuantifierExpr>() != null);
- Push(TranslateQuantifierExpr(node));
- return node;
- }
-
- public override Expr VisitExistsExpr(ExistsExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node = (ExistsExpr)this.VisitQuantifierExpr(node);
- return node;
- }
-
- public override Expr VisitForallExpr(ForallExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- node = (ForallExpr)this.VisitQuantifierExpr(node);
- return node;
- }
-
- private VCExpr TranslateQuantifierExpr(QuantifierExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<TypeVariable/*!*/>/*!*/ typeParams = new List<TypeVariable/*!*/>();
- foreach (TypeVariable/*!*/ v in node.TypeParameters) {
- Contract.Assert(v != null);
- typeParams.Add(v);
- }
-
- PushBoundVariableScope();
-
- List<VCExprVar/*!*/>/*!*/ boundVars = new List<VCExprVar/*!*/>();
- foreach (Variable/*!*/ v in node.Dummies)
- boundVars.Add(BindVariable(v));
-
- try {
- List<VCTrigger/*!*/>/*!*/ triggers = TranslateTriggers(node.Triggers);
- VCExpr/*!*/ body = Translate(node.Body);
- VCQuantifierInfos/*!*/ infos = GenerateQuantifierInfos(node);
-
- Quantifier quan;
- if (node is ForallExpr)
- quan = Quantifier.ALL;
- else if (node is ExistsExpr)
- quan = Quantifier.EX;
- else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- return Gen.Quantify(quan, typeParams, boundVars, triggers, infos, body);
- } finally {
- PopBoundVariableScope();
- }
- }
-
- private List<VCTrigger/*!*/>/*!*/ TranslateTriggers(Trigger node) {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCTrigger>>()));
- List<VCTrigger/*!*/>/*!*/ res = new List<VCTrigger/*!*/>();
- Trigger curTrigger = node;
- while (curTrigger != null) {
- res.Add(Gen.Trigger(curTrigger.Pos, Translate(curTrigger.Tr)));
- curTrigger = curTrigger.Next;
- }
- return res;
- }
-
- private VCQuantifierInfos GenerateQuantifierInfos(QuantifierExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCQuantifierInfos>() != null);
- string qid = getQidNameFromQKeyValue(node.Dummies, node.Attributes);
- return new VCQuantifierInfos(qid, node.SkolemId, false, node.Attributes);
- }
-
- private string getQidNameFromQKeyValue(List<Variable> vars, QKeyValue attributes) {
- Contract.Requires(vars != null);
- // Check for a 'qid, name' pair in keyvalues
- string qid = QKeyValue.FindStringAttribute(attributes, "qid");
- if (qid == null && vars.Count != 0) {
- // generate default name (line:column position in .bpl file)
- Variable v = vars[0];
- Contract.Assert(v != null); // Rustan's claim!
- // Include the first 8 characters of the filename in QID (helpful in case we use /concat)
- // We limit it to 8, so the SX file doesn't grow too big, and who on earth would need
- // more than 8 characters in a filename anyways.
- int max = 8;
- StringBuilder buf = new StringBuilder(max + 20);
- string filename = v.tok.filename;
- if (filename == null)
- filename = "unknown";
- for (int i = 0; i < filename.Length; ++i) {
- if (filename[i] == '/' || filename[i] == '\\')
- buf.Length = 0;
- if (buf.Length < max && char.IsLetterOrDigit(filename[i])) {
- if (buf.Length == 0 && char.IsDigit(filename[i])) {
- // Z3 does not like QID's to start with a digit, so we prepend another character
- buf.Append('_');
- }
- buf.Append(filename[i]);
- }
- }
- buf.Append('.').Append(v.Line).Append(':').Append(v.Col);
- qid = buf.ToString();
- }
- return qid;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public override Expr VisitBvExtractExpr(BvExtractExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Push(TranslateBvExtractExpr(node));
- return node;
- }
-
- private VCExpr TranslateBvExtractExpr(BvExtractExpr node) {
- Contract.Requires(node != null);
- Contract.Requires((node.Start <= node.End));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr/*!*/ bv = Translate(node.Bitvector);
- return Gen.BvExtract(bv, cce.NonNull(node.Bitvector.Type).BvBits, node.Start, node.End);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public override Expr VisitBvConcatExpr(BvConcatExpr node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Push(TranslateBvConcatExpr(node));
- return node;
- }
-
- private VCExpr TranslateBvConcatExpr(BvConcatExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr/*!*/ bv0 = Translate(node.E0);
- VCExpr/*!*/ bv1 = Translate(node.E1);
- return Gen.BvConcat(bv0, bv1);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
- // all the other cases should never happen
-
- public override Cmd VisitAssertCmd(AssertCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitAssignCmd(AssignCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitAssumeCmd(AssumeCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override AtomicRE VisitAtomicRE(AtomicRE node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AtomicRE>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Axiom VisitAxiom(Axiom node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Axiom>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Type VisitBasicType(BasicType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Type VisitBvType(BvType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Block VisitBlock(Block node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Block>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public CodeExprConverter codeExprConverter = null;
- public void SetCodeExprConverter(CodeExprConverter f) {
- this.codeExprConverter = f;
- }
- public override Expr/*!*/ VisitCodeExpr(CodeExpr/*!*/ codeExpr) {
- //Contract.Requires(codeExpr != null);
- Contract.Ensures(Contract.Result<Expr>() != null);
- Contract.Assume(codeExprConverter != null);
-
- Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
- List<VCExprLetBinding/*!*/> bindings = new List<VCExprLetBinding/*!*/>();
- VCExpr e = codeExprConverter(codeExpr, blockVariables, bindings, isPositiveContext);
- Push(e);
- return codeExpr;
- }
- public override List<Block> VisitBlockSeq(List<Block> blockSeq) {
- //Contract.Requires(blockSeq != null);
- Contract.Ensures(Contract.Result<List<Block>>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks) {
- //Contract.Requires(cce.NonNullElements(blocks));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override BoundVariable VisitBoundVariable(BoundVariable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<BoundVariable>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitCallCmd(CallCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitParCallCmd(ParCallCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq) {
- //Contract.Requires(cmdSeq != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Choice VisitChoice(Choice node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Choice>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitCommentCmd(CommentCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Constant VisitConstant(Constant node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Constant>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override CtorType VisitCtorType(CtorType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<CtorType>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Declaration VisitDeclaration(Declaration node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Declaration>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList) {
- //Contract.Requires(cce.NonNullElements(declarationList));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Declaration>>()));
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<DeclWithFormals>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Requires VisitRequires(Requires @requires) {
- //Contract.Requires(@requires != null);
- Contract.Ensures(Contract.Result<Requires>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override List<Requires> VisitRequiresSeq(List<Requires> requiresSeq) {
- //Contract.Requires(requiresSeq != null);
- Contract.Ensures(Contract.Result<List<Requires>>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Ensures VisitEnsures(Ensures @ensures) {
- //Contract.Requires(@ensures != null);
- Contract.Ensures(Contract.Result<Ensures>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq) {
- //Contract.Requires(ensuresSeq != null);
- Contract.Ensures(Contract.Result<List<Ensures>>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Formal VisitFormal(Formal node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Formal>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Function VisitFunction(Function node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override GlobalVariable VisitGlobalVariable(GlobalVariable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<GlobalVariable>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override GotoCmd VisitGotoCmd(GotoCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<GotoCmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitHavocCmd(HavocCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Implementation VisitImplementation(Implementation node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Implementation>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override LocalVariable VisitLocalVariable(LocalVariable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<LocalVariable>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AssignLhs>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override MapType VisitMapType(MapType node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<MapType>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Procedure VisitProcedure(Procedure node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Procedure>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Program VisitProgram(Program node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Program>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitRE(RE node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override List<RE> VisitRESeq(List<RE> reSeq) {
- //Contract.Requires(reSeq != null);
- Contract.Ensures(Contract.Result<List<RE>>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override ReturnCmd VisitReturnCmd(ReturnCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<ReturnCmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<ReturnExprCmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Sequential VisitSequential(Sequential node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Sequential>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<AssignLhs>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitStateCmd(StateCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override TransferCmd VisitTransferCmd(TransferCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<TransferCmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Trigger VisitTrigger(Trigger node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Trigger>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Type VisitType(Type node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override TypedIdent VisitTypedIdent(TypedIdent node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<TypedIdent>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Type VisitTypeSynonymAnnotation(TypeSynonymAnnotation node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Type VisitTypeVariable(TypeVariable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Variable VisitVariable(Variable node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Variable>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override List<Variable> VisitVariableSeq(List<Variable> variableSeq) {
- //Contract.Requires(variableSeq != null);
- Contract.Ensures(Contract.Result<List<Variable>>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Cmd>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- }
-
-
- /////////////////////////////////////////////////////////////////////////////////
-
- public class IAppliableTranslator : IAppliableVisitor<VCExpr/*!*/> {
-
- private readonly Boogie2VCExprTranslator/*!*/ BaseTranslator;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(BaseTranslator != null);
- }
-
-
- private VCExpressionGenerator/*!*/ Gen {
- get {
- Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
-
- return BaseTranslator.Gen;
- }
- }
- private VCGenerationOptions GenerationOptions {
- get {
- Contract.Ensures(Contract.Result<VCGenerationOptions>() != null);
-
- return BaseTranslator.GenerationOptions;
- }
- }
-
- public IAppliableTranslator(Boogie2VCExprTranslator baseTranslator) {
- Contract.Requires(baseTranslator != null);
- this.BaseTranslator = baseTranslator;
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- private List<VCExpr/*!*/>/*!*/ args = new List<VCExpr/*!*/>();
- private List<Type/*!*/>/*!*/ typeArgs = new List<Type/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvarianet() {
- Contract.Invariant(args != null);
- Contract.Invariant(typeArgs != null);
- }
-
-
- public VCExpr Translate(IAppliable app, Type ty, List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
- Contract.Requires(ty != null);
- Contract.Requires(app != null);
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- List<VCExpr/*!*/>/*!*/ oldArgs = this.args;
- List<Type/*!*/>/*!*/ oldTypeArgs = this.typeArgs;
- this.args = args;
- this.typeArgs = typeArgs;
- VCExpr/*!*/ result = app.Dispatch<VCExpr/*!*/>(this);
- this.args = oldArgs;
- this.typeArgs = oldTypeArgs;
- return result;
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
-
-
- public VCExpr Visit(UnaryOperator unaryOperator) {
- //Contract.Requires(unaryOperator != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Contract.Assert(unaryOperator.Op == UnaryOperator.Opcode.Neg || unaryOperator.Op == UnaryOperator.Opcode.Not);
- Contract.Assert(this.args.Count == 1);
- if (unaryOperator.Op == UnaryOperator.Opcode.Neg) {
- VCExpr e = cce.NonNull(this.args[0]);
- if (cce.NonNull(e.Type).IsInt) {
- return Gen.Function(VCExpressionGenerator.SubIOp, Gen.Integer(BigNum.ZERO), e);
- }
- else {// if (cce.NonNull(e.Type).IsReal) {
- return Gen.Function(VCExpressionGenerator.SubROp, Gen.Real(BigDec.ZERO), e);
- }
- //else {//is float
- //return Gen.Function(VCExpressionGenerator.SubFOp, Gen.Float(BigFloat.ZERO(8, 23)), e);
- //}
- }
- else {
- return Gen.Not(this.args);
- }
- }
-
- public VCExpr Visit(BinaryOperator binaryOperator) {
- //Contract.Requires(binaryOperator != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return TranslateBinaryOperator(binaryOperator, this.args);
- }
-
- public VCExpr Visit(FunctionCall functionCall) {
- //Contract.Requires(functionCall != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return TranslateFunctionCall(functionCall, this.args, this.typeArgs);
- }
-
- public VCExpr Visit(MapSelect mapSelect) {
- //Contract.Requires(mapSelect != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Gen.Select(this.args, this.typeArgs);
- }
-
- public VCExpr Visit(MapStore mapStore) {
- //Contract.Requires(mapStore != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Gen.Store(this.args, this.typeArgs);
- }
-
- public VCExpr Visit(TypeCoercion typeCoercion) {
- //Contract.Requires(typeCoercion != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Contract.Assert(this.args.Count == 1);
- return this.args[0];
- }
-
- public VCExpr Visit(ArithmeticCoercion arithCoercion) {
- //Contract.Requires(arithCoercion != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Contract.Assert(this.args.Count == 1);
- switch (arithCoercion.Coercion) {
- case ArithmeticCoercion.CoercionType.ToInt:
- return Gen.Function(VCExpressionGenerator.ToIntOp, this.args);
- case ArithmeticCoercion.CoercionType.ToReal:
- return Gen.Function(VCExpressionGenerator.ToRealOp, this.args);
- default:
- Contract.Assert(false);
- return null;
- }
- }
-
- public VCExpr Visit(IfThenElse ite) {
- //Contract.Requires(ite != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Gen.Function(VCExpressionGenerator.IfThenElseOp, this.args);
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- private VCExpr TranslateBinaryOperator(BinaryOperator app, List<VCExpr/*!*/>/*!*/ args) {
- Contract.Requires(app != null);
- Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Contract.Assert(args.Count == 2);
- Type t = cce.NonNull(cce.NonNull(args[0]).Type);
-
- switch (app.Op) {
- case BinaryOperator.Opcode.Add:
- if (t.IsInt) {
- return Gen.Function(VCExpressionGenerator.AddIOp, args);
- }
- else if (t.IsReal) {
- return Gen.Function(VCExpressionGenerator.AddROp, args);
- }
- else { //t is float
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "+"), args);
- }
- case BinaryOperator.Opcode.Sub:
- if (t.IsInt) {
- return Gen.Function(VCExpressionGenerator.SubIOp, args);
- }
- else if (t.IsReal) {
- return Gen.Function(VCExpressionGenerator.SubROp, args);
- }
- else { //t is float
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "-"), args);
- }
- case BinaryOperator.Opcode.Mul:
- if (t.IsInt) {
- return Gen.Function(VCExpressionGenerator.MulIOp, args);
- }
- else if (t.IsReal) {
- return Gen.Function(VCExpressionGenerator.MulROp, args);
- }
- else
- { //t is float
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "*"), args);
- }
- case BinaryOperator.Opcode.Div:
- return Gen.Function(VCExpressionGenerator.DivIOp, args);
- case BinaryOperator.Opcode.Mod:
- return Gen.Function(VCExpressionGenerator.ModOp, args);
- case BinaryOperator.Opcode.RealDiv:
- if (t.IsFloat) {
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "/"), args);
- }
- VCExpr arg0 = cce.NonNull(args[0]);
- VCExpr arg1 = cce.NonNull(args[1]);
- if (cce.NonNull(arg0.Type).IsInt) {
- arg0 = Gen.Function(VCExpressionGenerator.ToRealOp, arg0);
- }
- if (cce.NonNull(arg1.Type).IsInt) {
- arg1 = Gen.Function(VCExpressionGenerator.ToRealOp, arg1);
- }
- return Gen.Function(VCExpressionGenerator.DivROp, arg0, arg1);
- case BinaryOperator.Opcode.Pow:
- return Gen.Function(VCExpressionGenerator.PowOp, args);
- case BinaryOperator.Opcode.Eq:
- case BinaryOperator.Opcode.Iff:
- // we don't distinguish between equality and equivalence at this point
- if (t.IsFloat)
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "=="), args);
- return Gen.Function(VCExpressionGenerator.EqOp, args);
- case BinaryOperator.Opcode.Neq:
- return Gen.Function(VCExpressionGenerator.NeqOp, args);
- case BinaryOperator.Opcode.Lt:
- if (t.IsFloat)
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "<"), args);
- return Gen.Function(VCExpressionGenerator.LtOp, args);
- case BinaryOperator.Opcode.Le:
- if (t.IsFloat)
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "<="), args);
- return Gen.Function(VCExpressionGenerator.LeOp, args);
- case BinaryOperator.Opcode.Ge:
- if (t.IsFloat)
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, ">="), args);
- return Gen.Function(VCExpressionGenerator.GeOp, args);
- case BinaryOperator.Opcode.Gt:
- if (t.IsFloat)
- return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, ">"), args);
- return Gen.Function(VCExpressionGenerator.GtOp, args);
- case BinaryOperator.Opcode.Imp:
- return Gen.Function(VCExpressionGenerator.ImpliesOp, args);
- case BinaryOperator.Opcode.And:
- return Gen.Function(VCExpressionGenerator.AndOp, args);
- case BinaryOperator.Opcode.Or:
- return Gen.Function(VCExpressionGenerator.OrOp, args);
- case BinaryOperator.Opcode.Subtype:
- return Gen.Function(VCExpressionGenerator.SubtypeOp, args);
- default:
- Contract.Assert(false);
- throw new cce.UnreachableException(); // unexpected binary operator
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- private VCExpr/*!*/ TranslateFunctionCall(FunctionCall app, List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
- Contract.Requires(cce.NonNullElements(args));
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Requires(app != null);
- Contract.Requires((app.Func != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null); // resolution must have happened
-
- VCExpr res = ApplyExpansion(app, args, typeArgs);
- if (res != null)
- return res;
-
- VCExprOp/*!*/ functionOp = Gen.BoogieFunctionOp(app.Func);
- return Gen.Function(functionOp, args, typeArgs);
- }
-
- private VCExpr ApplyExpansion(FunctionCall app, List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
- Contract.Requires(app != null);
- Contract.Requires(cce.NonNullElements(args));
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Assert(app.Func != null); // resolution must have happened
-
- lock (app.Func)
- {
- if (app.Func.doingExpansion)
- {
- System.Console.WriteLine("*** detected expansion loop on {0}", app.Func);
- return null;
- }
-
- var exp = app.Func.Body;
- if (exp == null)
- return null;
-
- VCExpr/*!*/ translatedBody;
- VCExprSubstitution/*!*/ subst = new VCExprSubstitution();
- try
- {
- BaseTranslator.PushFormalsScope();
- BaseTranslator.PushBoundVariableScope();
- app.Func.doingExpansion = true;
-
- // first bind the formals to VCExpr variables, which are later
- // substituted with the actual parameters
- var inParams = app.Func.InParams;
- for (int i = 0; i < inParams.Count; ++i)
- subst[BaseTranslator.BindVariable(inParams[i])] = args[i];
-
- // recursively translate the body of the expansion
- translatedBody = BaseTranslator.Translate(exp);
- }
- finally
- {
- BaseTranslator.PopFormalsScope();
- BaseTranslator.PopBoundVariableScope();
- app.Func.doingExpansion = false;
- }
-
- // substitute the formals with the actual parameters in the body
- var tparms = app.Func.TypeParameters;
- Contract.Assert(typeArgs.Count == tparms.Count);
- for (int i = 0; i < typeArgs.Count; ++i)
- subst[tparms[i]] = typeArgs[i];
- SubstitutingVCExprVisitor/*!*/ substituter = new SubstitutingVCExprVisitor(Gen);
- return substituter.Mutate(translatedBody, subst);
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+// A translator from the Boogie AST to the VCExpr AST.
+// This was previously realised in the methods AbsyExpr.VCView
+
+namespace Microsoft.Boogie.VCExprAST {
+ using Microsoft.Boogie;
+
+ // TODO: in future we might use that for defining symbols for Boogie's conditional compilation
+ public class VCGenerationOptions {
+ private readonly List<string/*!*/>/*!*/ SupportedProverCommands;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(SupportedProverCommands));
+ }
+
+
+ public bool IsProverCommandSupported(string kind) {
+ Contract.Requires(kind != null);
+ return SupportedProverCommands.Contains(kind);
+ }
+
+ public bool IsAnyProverCommandSupported(string kinds) {
+ Contract.Requires(kinds != null);
+ if (kinds.IndexOf(',') < 0) {
+ return IsProverCommandSupported(kinds);
+ } else {
+ return kinds.Split(',', ' ').Any(k => IsProverCommandSupported(k));
+ }
+ }
+
+ public VCGenerationOptions(List<string/*!*/>/*!*/ supportedProverCommands) {
+ Contract.Requires(cce.NonNullElements(supportedProverCommands));
+ this.SupportedProverCommands = supportedProverCommands;
+ }
+ }
+
+ public delegate VCExpr/*!*/ CodeExprConverter(CodeExpr/*!*/ codeExpr, Hashtable/*<Block, VCExprVar!>*//*!*/ blockVariables, List<VCExprLetBinding> bindings, bool isPositiveContext);
+
+ public class Boogie2VCExprTranslator : ReadOnlyVisitor, ICloneable {
+ // Stack on which the various Visit-methods put the result of the translation
+ private readonly Stack<VCExpr/*!*/>/*!*/ SubExpressions = new Stack<VCExpr>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(SubExpressions));
+ Contract.Invariant(Gen != null);
+ }
+
+
+ private void Push(VCExpr expr) {
+ Contract.Requires(expr != null);
+ SubExpressions.Push(expr);
+ }
+
+ private VCExpr Pop() {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return SubExpressions.Pop();
+ }
+
+ public VCExpr Translate(Expr expr) {
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ this.Visit(expr);
+ return Pop();
+ }
+
+ public List<VCExpr/*!*/>/*!*/ Translate(IList<Expr> exprs) {
+ Contract.Requires(exprs != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
+ List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
+ foreach (Expr e in exprs)
+ res.Add(Translate(cce.NonNull(e)));
+ return res;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+
+ internal readonly VCExpressionGenerator/*!*/ Gen;
+
+ public Boogie2VCExprTranslator(VCExpressionGenerator gen,
+ VCGenerationOptions genOptions) {
+ Contract.Requires(gen != null);
+ Contract.Requires(genOptions != null);
+ this.Gen = gen;
+ this.GenerationOptions = genOptions;
+ UnboundVariables = new VariableMapping<Variable>();
+ BoundVariables = new VariableMapping<BoundVariable>();
+ Formals = new VariableMapping<Formal>();
+ }
+
+ private Boogie2VCExprTranslator(Boogie2VCExprTranslator tl) {
+ Contract.Requires(tl != null);
+ this.Gen = tl.Gen;
+ this.GenerationOptions = tl.GenerationOptions;
+ UnboundVariables =
+ (VariableMapping<Variable>)tl.UnboundVariables.Clone();
+ BoundVariables = new VariableMapping<BoundVariable>();
+ Formals = new VariableMapping<Formal>();
+ }
+
+ public object Clone() {
+ Contract.Ensures(Contract.Result<object>() != null);
+ return new Boogie2VCExprTranslator(this);
+ }
+
+ private IAppliableTranslator IAppTranslatorAttr = null;
+ private IAppliableTranslator IAppTranslator {
+ get {
+ Contract.Ensures(Contract.Result<IAppliableTranslator>() != null);
+
+ if (IAppTranslatorAttr == null)
+ IAppTranslatorAttr = new IAppliableTranslator(this);
+ return IAppTranslatorAttr;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Class for handling occurring variables
+
+ private class VariableMapping<VarKind> : ICloneable {
+ private readonly List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>/*!*/ Mapping;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Mapping != null && Contract.ForAll(Mapping, i => cce.NonNullDictionaryAndValues(i)));
+ }
+
+
+ public VariableMapping() {
+ List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>/*!*/ mapping =
+ new List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>();
+ mapping.Add(new Dictionary<VarKind/*!*/, VCExprVar/*!*/>());
+ this.Mapping = mapping;
+ }
+
+ private VariableMapping(VariableMapping<VarKind> vm) {
+ Contract.Requires(vm != null);
+ List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>/*!*/ mapping =
+ new List<Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/>();
+ foreach (Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/ d in vm.Mapping) {
+ Contract.Assert(cce.NonNullDictionaryAndValues(d));
+ mapping.Add(new Dictionary<VarKind/*!*/, VCExprVar/*!*/>(d));
+ }
+ this.Mapping = mapping;
+ }
+
+ public object Clone() {
+ Contract.Ensures(Contract.Result<object>() != null);
+ return new VariableMapping<VarKind>(this);
+ }
+
+ public void PushScope() {
+ Mapping.Add(new Dictionary<VarKind/*!*/, VCExprVar/*!*/>());
+ }
+
+ public void PopScope() {
+ Contract.Assume(Mapping.Count > 0);
+ Mapping.RemoveAt(Mapping.Count - 1);
+ }
+
+ public void Bind(VarKind boogieVar, VCExprVar/*!*/ vcExprVar) {
+ Contract.Requires(vcExprVar != null);
+ Contract.Requires(boogieVar != null);
+ Contract.Requires(!Contains(boogieVar));
+ Mapping[Mapping.Count - 1].Add(boogieVar, vcExprVar);
+ }
+
+ public VCExprVar Lookup(VarKind boogieVar) {
+ Contract.Requires(boogieVar != null);
+ Contract.Ensures(Contract.Result<VCExprVar>() != null);
+ VCExprVar res = LookupHelp(boogieVar);
+ Contract.Assume(res != null);
+ return res;
+ }
+
+ [Pure]
+ public bool Contains(VarKind boogieVar) {
+ Contract.Requires(boogieVar != null);
+ return LookupHelp(boogieVar) != null;
+ }
+
+ public bool TryGetValue(VarKind boogieVar, out VCExprVar res) {
+ Contract.Requires(boogieVar != null);
+ res = LookupHelp(boogieVar);
+ return res != null;
+ }
+
+ [Pure]
+ private VCExprVar LookupHelp(VarKind boogieVar) {
+ Contract.Requires(boogieVar != null);
+ VCExprVar res;
+ foreach (Dictionary<VarKind/*!*/, VCExprVar/*!*/>/*!*/ d in Mapping) {
+ //Contract.Assert(cce.NonNullElements(d));
+ if (d.TryGetValue(boogieVar, out res)) {
+ Contract.Assert(res != null);
+ return res;
+ }
+ }
+ return null;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////
+
+ private readonly VariableMapping<Variable>/*!*/ UnboundVariables;
+ private readonly VariableMapping<BoundVariable>/*!*/ BoundVariables;
+ // used when translating the bodies of function expansions
+ private readonly VariableMapping<Formal>/*!*/ Formals;
+ [ContractInvariantMethod]
+ void ObjectInvairant() {
+ Contract.Invariant(UnboundVariables != null);
+ Contract.Invariant(BoundVariables != null);
+ Contract.Invariant(Formals != null);
+ }
+
+
+ internal void PushBoundVariableScope() {
+ BoundVariables.PushScope();
+ }
+ internal void PopBoundVariableScope() {
+ BoundVariables.PopScope();
+ }
+
+ internal void PushFormalsScope() {
+ Formals.PushScope();
+ }
+ internal void PopFormalsScope() {
+ Formals.PopScope();
+ }
+
+ public VCExprVar BindVariable(Variable boogieVar) {
+ Contract.Requires(boogieVar != null);
+ Contract.Ensures(Contract.Result<VCExprVar>() != null);
+ if (boogieVar is BoundVariable) {
+ VCExprVar/*!*/ newVar = Gen.Variable(boogieVar.Name, boogieVar.TypedIdent.Type);
+ BoundVariables.Bind((BoundVariable)boogieVar, newVar);
+ return newVar;
+ } else if (boogieVar is Formal) {
+ VCExprVar/*!*/ newVar = Gen.Variable(boogieVar.Name, boogieVar.TypedIdent.Type);
+ Formals.Bind((Formal)boogieVar, newVar);
+ return newVar;
+ } else {
+ // only bound variables and formals are declared explicitly
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ public VCExprVar LookupVariable(Variable boogieVar) {
+ Contract.Requires(boogieVar != null);
+ Contract.Ensures(Contract.Result<VCExprVar>() != null);
+
+ BoundVariable bv = boogieVar as BoundVariable;
+ if (bv != null) {
+ return BoundVariables.Lookup(bv);
+ }
+ VCExprVar res;
+ Formal fml = boogieVar as Formal;
+ if (fml != null && Formals.TryGetValue(fml, out res))
+ return cce.NonNull(res);
+
+ // global variables, local variables, incarnations, etc. are
+ // bound the first time they occur
+ if (!UnboundVariables.TryGetValue(boogieVar, out res)) {
+ if (boogieVar is Constant)
+ res = new VCExprConstant(boogieVar.Name, boogieVar.TypedIdent.Type);
+ else
+ res = new VCExprVar(boogieVar.Name, boogieVar.TypedIdent.Type);
+ UnboundVariables.Bind(boogieVar, res);
+ }
+ return cce.NonNull(res);
+ }
+
+ /// <summary>
+ /// Unlike LookupVariable, this method does not create a new variable mapping if none is
+ /// found. Instead, this method returns null in such cases. Also, this method does not
+ /// look for bound variables.
+ /// </summary>
+ /// <param name="boogieVar"></param>
+ /// <returns></returns>
+ public VCExprVar TryLookupVariable(Variable boogieVar) {
+ Contract.Requires(boogieVar != null);
+
+ VCExprVar res;
+ Formal fml = boogieVar as Formal;
+ if (fml != null && Formals.TryGetValue(fml, out res))
+ return cce.NonNull(res);
+
+ if (UnboundVariables.TryGetValue(boogieVar, out res)) {
+ return cce.NonNull(res);
+ }
+
+ return null; // not present
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ internal readonly VCGenerationOptions/*!*/ GenerationOptions;
+ [ContractInvariantMethod]
+ void ObjectInvarian() {
+ Contract.Invariant(GenerationOptions != null);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public override Expr VisitLiteralExpr(LiteralExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Push(TranslateLiteralExpr(node));
+ return node;
+ }
+ private VCExpr TranslateLiteralExpr(LiteralExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (node.Val is bool) {
+ bool b = (bool)node.Val;
+ if (b) {
+ return VCExpressionGenerator.True;
+ } else {
+ return VCExpressionGenerator.False;
+ }
+ } else if (node.Val is BigNum) {
+ return Gen.Integer(node.asBigNum);
+ } else if (node.Val is BigDec) {
+ return Gen.Real(node.asBigDec);
+ } else if (node.Val is BigFloat) {
+ return Gen.Float(node.asBigFloat);
+ }
+ else if (node.Val is BvConst) {
+ return Gen.Bitvector((BvConst)node.Val);
+ } else {
+ System.Diagnostics.Debug.Assert(false, "unknown kind of literal " + node.tok.ToString());
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public override Expr VisitIdentifierExpr(IdentifierExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Contract.Assume(node.Decl != null); // the expression has to be resolved
+ Push(LookupVariable(node.Decl));
+ return node;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ // Because of our scheme for numbering incarnations of variables, the pre-state
+ // value of a variable x is always just "x". (The first update to it in a method
+ // causes it to become "x0". So we just remove old expressions with a visitor
+ // before transforming it into a VCExpr.
+ public override Expr VisitOldExpr(OldExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public override Expr VisitNAryExpr(NAryExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Push(TranslateNAryExpr(node));
+ return node;
+ }
+
+ public bool isPositiveContext = true;
+ private VCExpr TranslateNAryExpr(NAryExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ bool flipContextForArg0 = false;
+ if (node.Fun is UnaryOperator)
+ {
+ UnaryOperator oper = (UnaryOperator)node.Fun;
+ if (oper.Op == UnaryOperator.Opcode.Not)
+ flipContextForArg0 = true;
+ }
+ else if (node.Fun is BinaryOperator)
+ {
+ BinaryOperator oper = (BinaryOperator)node.Fun;
+ if (oper.Op == BinaryOperator.Opcode.Imp)
+ flipContextForArg0 = true;
+ else if (oper.Op == BinaryOperator.Opcode.Iff) {
+ Expr one = new NAryExpr(node.tok, new BinaryOperator(node.tok, BinaryOperator.Opcode.Imp), new List<Expr> { node.Args[0], node.Args[1] });
+ Expr two = new NAryExpr(node.tok, new BinaryOperator(node.tok, BinaryOperator.Opcode.Imp), new List<Expr> { node.Args[1], node.Args[0] });
+ NAryExpr cmpd = new NAryExpr(node.tok, new BinaryOperator(node.tok, BinaryOperator.Opcode.And), new List<Expr> { one, two });
+ TypecheckingContext tc = new TypecheckingContext(null);
+ cmpd.Typecheck(tc);
+ return TranslateNAryExpr(cmpd);
+ }
+ }
+
+ int n = node.Args.Count;
+ List<VCExpr/*!*/>/*!*/ vcs = new List<VCExpr/*!*/>(n);
+
+ for (int i = 0; i < n; i++) {
+ if (i == 0 && flipContextForArg0)
+ isPositiveContext = !isPositiveContext;
+ vcs.Add(Translate(cce.NonNull(node.Args)[i]));
+ if (i == 0 && flipContextForArg0)
+ isPositiveContext = !isPositiveContext;
+ }
+
+ if (node.Type == null) {
+ System.Console.WriteLine("*** type is null for {0}", node);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ return IAppTranslator.Translate(node.Fun, node.Type, vcs,
+ ToList(cce.NonNull(node.TypeParameters)));
+ }
+
+
+ private static List<Type/*!*/>/*!*/ EMPTY_TYPE_LIST = new List<Type/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvirant() {
+ Contract.Invariant(EMPTY_TYPE_LIST != null);
+ }
+
+
+ private List<Type/*!*/>/*!*/ ToList(TypeParamInstantiation insts) {
+ Contract.Requires(insts != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
+ if (insts.FormalTypeParams.Count == 0)
+ return EMPTY_TYPE_LIST;
+
+ List<Type/*!*/>/*!*/ typeArgs = new List<Type/*!*/>();
+ foreach (TypeVariable/*!*/ var in insts.FormalTypeParams) {
+ Contract.Assert(var != null);
+ typeArgs.Add(insts[var]);
+ }
+ return typeArgs;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public override QuantifierExpr VisitQuantifierExpr(QuantifierExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<QuantifierExpr>() != null);
+ Push(TranslateQuantifierExpr(node));
+ return node;
+ }
+
+ public override Expr VisitExistsExpr(ExistsExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node = (ExistsExpr)this.VisitQuantifierExpr(node);
+ return node;
+ }
+
+ public override Expr VisitForallExpr(ForallExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ node = (ForallExpr)this.VisitQuantifierExpr(node);
+ return node;
+ }
+
+ private VCExpr TranslateQuantifierExpr(QuantifierExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<TypeVariable/*!*/>/*!*/ typeParams = new List<TypeVariable/*!*/>();
+ foreach (TypeVariable/*!*/ v in node.TypeParameters) {
+ Contract.Assert(v != null);
+ typeParams.Add(v);
+ }
+
+ PushBoundVariableScope();
+
+ List<VCExprVar/*!*/>/*!*/ boundVars = new List<VCExprVar/*!*/>();
+ foreach (Variable/*!*/ v in node.Dummies)
+ boundVars.Add(BindVariable(v));
+
+ try {
+ List<VCTrigger/*!*/>/*!*/ triggers = TranslateTriggers(node.Triggers);
+ VCExpr/*!*/ body = Translate(node.Body);
+ VCQuantifierInfos/*!*/ infos = GenerateQuantifierInfos(node);
+
+ Quantifier quan;
+ if (node is ForallExpr)
+ quan = Quantifier.ALL;
+ else if (node is ExistsExpr)
+ quan = Quantifier.EX;
+ else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ return Gen.Quantify(quan, typeParams, boundVars, triggers, infos, body);
+ } finally {
+ PopBoundVariableScope();
+ }
+ }
+
+ private List<VCTrigger/*!*/>/*!*/ TranslateTriggers(Trigger node) {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCTrigger>>()));
+ List<VCTrigger/*!*/>/*!*/ res = new List<VCTrigger/*!*/>();
+ Trigger curTrigger = node;
+ while (curTrigger != null) {
+ res.Add(Gen.Trigger(curTrigger.Pos, Translate(curTrigger.Tr)));
+ curTrigger = curTrigger.Next;
+ }
+ return res;
+ }
+
+ private VCQuantifierInfos GenerateQuantifierInfos(QuantifierExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCQuantifierInfos>() != null);
+ string qid = getQidNameFromQKeyValue(node.Dummies, node.Attributes);
+ return new VCQuantifierInfos(qid, node.SkolemId, false, node.Attributes);
+ }
+
+ private string getQidNameFromQKeyValue(List<Variable> vars, QKeyValue attributes) {
+ Contract.Requires(vars != null);
+ // Check for a 'qid, name' pair in keyvalues
+ string qid = QKeyValue.FindStringAttribute(attributes, "qid");
+ if (qid == null && vars.Count != 0) {
+ // generate default name (line:column position in .bpl file)
+ Variable v = vars[0];
+ Contract.Assert(v != null); // Rustan's claim!
+ // Include the first 8 characters of the filename in QID (helpful in case we use /concat)
+ // We limit it to 8, so the SX file doesn't grow too big, and who on earth would need
+ // more than 8 characters in a filename anyways.
+ int max = 8;
+ StringBuilder buf = new StringBuilder(max + 20);
+ string filename = v.tok.filename;
+ if (filename == null)
+ filename = "unknown";
+ for (int i = 0; i < filename.Length; ++i) {
+ if (filename[i] == '/' || filename[i] == '\\')
+ buf.Length = 0;
+ if (buf.Length < max && char.IsLetterOrDigit(filename[i])) {
+ if (buf.Length == 0 && char.IsDigit(filename[i])) {
+ // Z3 does not like QID's to start with a digit, so we prepend another character
+ buf.Append('_');
+ }
+ buf.Append(filename[i]);
+ }
+ }
+ buf.Append('.').Append(v.Line).Append(':').Append(v.Col);
+ qid = buf.ToString();
+ }
+ return qid;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public override Expr VisitBvExtractExpr(BvExtractExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Push(TranslateBvExtractExpr(node));
+ return node;
+ }
+
+ private VCExpr TranslateBvExtractExpr(BvExtractExpr node) {
+ Contract.Requires(node != null);
+ Contract.Requires((node.Start <= node.End));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr/*!*/ bv = Translate(node.Bitvector);
+ return Gen.BvExtract(bv, cce.NonNull(node.Bitvector.Type).BvBits, node.Start, node.End);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public override Expr VisitBvConcatExpr(BvConcatExpr node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Push(TranslateBvConcatExpr(node));
+ return node;
+ }
+
+ private VCExpr TranslateBvConcatExpr(BvConcatExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr/*!*/ bv0 = Translate(node.E0);
+ VCExpr/*!*/ bv1 = Translate(node.E1);
+ return Gen.BvConcat(bv0, bv1);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+ // all the other cases should never happen
+
+ public override Cmd VisitAssertCmd(AssertCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitAssignCmd(AssignCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitAssumeCmd(AssumeCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override AtomicRE VisitAtomicRE(AtomicRE node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AtomicRE>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Axiom VisitAxiom(Axiom node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Axiom>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Type VisitBasicType(BasicType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Type VisitBvType(BvType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Block VisitBlock(Block node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public CodeExprConverter codeExprConverter = null;
+ public void SetCodeExprConverter(CodeExprConverter f) {
+ this.codeExprConverter = f;
+ }
+ public override Expr/*!*/ VisitCodeExpr(CodeExpr/*!*/ codeExpr) {
+ //Contract.Requires(codeExpr != null);
+ Contract.Ensures(Contract.Result<Expr>() != null);
+ Contract.Assume(codeExprConverter != null);
+
+ Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
+ List<VCExprLetBinding/*!*/> bindings = new List<VCExprLetBinding/*!*/>();
+ VCExpr e = codeExprConverter(codeExpr, blockVariables, bindings, isPositiveContext);
+ Push(e);
+ return codeExpr;
+ }
+ public override List<Block> VisitBlockSeq(List<Block> blockSeq) {
+ //Contract.Requires(blockSeq != null);
+ Contract.Ensures(Contract.Result<List<Block>>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override List<Block/*!*/>/*!*/ VisitBlockList(List<Block/*!*/>/*!*/ blocks) {
+ //Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override BoundVariable VisitBoundVariable(BoundVariable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<BoundVariable>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitCallCmd(CallCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitParCallCmd(ParCallCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override List<Cmd> VisitCmdSeq(List<Cmd> cmdSeq) {
+ //Contract.Requires(cmdSeq != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Choice VisitChoice(Choice node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Choice>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitCommentCmd(CommentCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Constant VisitConstant(Constant node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Constant>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override CtorType VisitCtorType(CtorType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<CtorType>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Declaration VisitDeclaration(Declaration node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Declaration>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override List<Declaration/*!*/>/*!*/ VisitDeclarationList(List<Declaration/*!*/>/*!*/ declarationList) {
+ //Contract.Requires(cce.NonNullElements(declarationList));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Declaration>>()));
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override DeclWithFormals VisitDeclWithFormals(DeclWithFormals node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<DeclWithFormals>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Requires VisitRequires(Requires @requires) {
+ //Contract.Requires(@requires != null);
+ Contract.Ensures(Contract.Result<Requires>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override List<Requires> VisitRequiresSeq(List<Requires> requiresSeq) {
+ //Contract.Requires(requiresSeq != null);
+ Contract.Ensures(Contract.Result<List<Requires>>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Ensures VisitEnsures(Ensures @ensures) {
+ //Contract.Requires(@ensures != null);
+ Contract.Ensures(Contract.Result<Ensures>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override List<Ensures> VisitEnsuresSeq(List<Ensures> ensuresSeq) {
+ //Contract.Requires(ensuresSeq != null);
+ Contract.Ensures(Contract.Result<List<Ensures>>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Formal VisitFormal(Formal node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Formal>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Function VisitFunction(Function node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override GlobalVariable VisitGlobalVariable(GlobalVariable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<GlobalVariable>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override GotoCmd VisitGotoCmd(GotoCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<GotoCmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitHavocCmd(HavocCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Implementation VisitImplementation(Implementation node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Implementation>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override LocalVariable VisitLocalVariable(LocalVariable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<LocalVariable>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override AssignLhs VisitMapAssignLhs(MapAssignLhs node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AssignLhs>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override MapType VisitMapType(MapType node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<MapType>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Procedure VisitProcedure(Procedure node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Procedure>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Program VisitProgram(Program node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Program>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitRE(RE node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override List<RE> VisitRESeq(List<RE> reSeq) {
+ //Contract.Requires(reSeq != null);
+ Contract.Ensures(Contract.Result<List<RE>>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override ReturnCmd VisitReturnCmd(ReturnCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<ReturnCmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override ReturnExprCmd VisitReturnExprCmd(ReturnExprCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<ReturnExprCmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Sequential VisitSequential(Sequential node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Sequential>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override AssignLhs VisitSimpleAssignLhs(SimpleAssignLhs node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<AssignLhs>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitStateCmd(StateCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override TransferCmd VisitTransferCmd(TransferCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<TransferCmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Trigger VisitTrigger(Trigger node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Trigger>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Type VisitType(Type node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override TypedIdent VisitTypedIdent(TypedIdent node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<TypedIdent>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Type VisitTypeSynonymAnnotation(TypeSynonymAnnotation node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Type VisitTypeVariable(TypeVariable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Variable VisitVariable(Variable node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Variable>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override List<Variable> VisitVariableSeq(List<Variable> variableSeq) {
+ //Contract.Requires(variableSeq != null);
+ Contract.Ensures(Contract.Result<List<Variable>>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitAssertEnsuresCmd(AssertEnsuresCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public override Cmd VisitAssertRequiresCmd(AssertRequiresCmd node) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Cmd>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ }
+
+
+ /////////////////////////////////////////////////////////////////////////////////
+
+ public class IAppliableTranslator : IAppliableVisitor<VCExpr/*!*/> {
+
+ private readonly Boogie2VCExprTranslator/*!*/ BaseTranslator;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(BaseTranslator != null);
+ }
+
+
+ private VCExpressionGenerator/*!*/ Gen {
+ get {
+ Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
+
+ return BaseTranslator.Gen;
+ }
+ }
+ private VCGenerationOptions GenerationOptions {
+ get {
+ Contract.Ensures(Contract.Result<VCGenerationOptions>() != null);
+
+ return BaseTranslator.GenerationOptions;
+ }
+ }
+
+ public IAppliableTranslator(Boogie2VCExprTranslator baseTranslator) {
+ Contract.Requires(baseTranslator != null);
+ this.BaseTranslator = baseTranslator;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+
+ private List<VCExpr/*!*/>/*!*/ args = new List<VCExpr/*!*/>();
+ private List<Type/*!*/>/*!*/ typeArgs = new List<Type/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvarianet() {
+ Contract.Invariant(args != null);
+ Contract.Invariant(typeArgs != null);
+ }
+
+
+ public VCExpr Translate(IAppliable app, Type ty, List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
+ Contract.Requires(ty != null);
+ Contract.Requires(app != null);
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ List<VCExpr/*!*/>/*!*/ oldArgs = this.args;
+ List<Type/*!*/>/*!*/ oldTypeArgs = this.typeArgs;
+ this.args = args;
+ this.typeArgs = typeArgs;
+ VCExpr/*!*/ result = app.Dispatch<VCExpr/*!*/>(this);
+ this.args = oldArgs;
+ this.typeArgs = oldTypeArgs;
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+
+
+
+ public VCExpr Visit(UnaryOperator unaryOperator) {
+ //Contract.Requires(unaryOperator != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Contract.Assert(unaryOperator.Op == UnaryOperator.Opcode.Neg || unaryOperator.Op == UnaryOperator.Opcode.Not);
+ Contract.Assert(this.args.Count == 1);
+ if (unaryOperator.Op == UnaryOperator.Opcode.Neg) {
+ VCExpr e = cce.NonNull(this.args[0]);
+ if (cce.NonNull(e.Type).IsInt) {
+ return Gen.Function(VCExpressionGenerator.SubIOp, Gen.Integer(BigNum.ZERO), e);
+ }
+ else {// if (cce.NonNull(e.Type).IsReal) {
+ return Gen.Function(VCExpressionGenerator.SubROp, Gen.Real(BigDec.ZERO), e);
+ }
+ //else {//is float
+ //return Gen.Function(VCExpressionGenerator.SubFOp, Gen.Float(BigFloat.ZERO(8, 23)), e);
+ //}
+ }
+ else {
+ return Gen.Not(this.args);
+ }
+ }
+
+ public VCExpr Visit(BinaryOperator binaryOperator) {
+ //Contract.Requires(binaryOperator != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return TranslateBinaryOperator(binaryOperator, this.args);
+ }
+
+ public VCExpr Visit(FunctionCall functionCall) {
+ //Contract.Requires(functionCall != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return TranslateFunctionCall(functionCall, this.args, this.typeArgs);
+ }
+
+ public VCExpr Visit(MapSelect mapSelect) {
+ //Contract.Requires(mapSelect != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Gen.Select(this.args, this.typeArgs);
+ }
+
+ public VCExpr Visit(MapStore mapStore) {
+ //Contract.Requires(mapStore != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Gen.Store(this.args, this.typeArgs);
+ }
+
+ public VCExpr Visit(TypeCoercion typeCoercion) {
+ //Contract.Requires(typeCoercion != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Contract.Assert(this.args.Count == 1);
+ return this.args[0];
+ }
+
+ public VCExpr Visit(ArithmeticCoercion arithCoercion) {
+ //Contract.Requires(arithCoercion != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Contract.Assert(this.args.Count == 1);
+ switch (arithCoercion.Coercion) {
+ case ArithmeticCoercion.CoercionType.ToInt:
+ return Gen.Function(VCExpressionGenerator.ToIntOp, this.args);
+ case ArithmeticCoercion.CoercionType.ToReal:
+ return Gen.Function(VCExpressionGenerator.ToRealOp, this.args);
+ default:
+ Contract.Assert(false);
+ return null;
+ }
+ }
+
+ public VCExpr Visit(IfThenElse ite) {
+ //Contract.Requires(ite != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Gen.Function(VCExpressionGenerator.IfThenElseOp, this.args);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+
+ private VCExpr TranslateBinaryOperator(BinaryOperator app, List<VCExpr/*!*/>/*!*/ args) {
+ Contract.Requires(app != null);
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Contract.Assert(args.Count == 2);
+ Type t = cce.NonNull(cce.NonNull(args[0]).Type);
+
+ switch (app.Op) {
+ case BinaryOperator.Opcode.Add:
+ if (t.IsInt) {
+ return Gen.Function(VCExpressionGenerator.AddIOp, args);
+ }
+ else if (t.IsReal) {
+ return Gen.Function(VCExpressionGenerator.AddROp, args);
+ }
+ else { //t is float
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "+"), args);
+ }
+ case BinaryOperator.Opcode.Sub:
+ if (t.IsInt) {
+ return Gen.Function(VCExpressionGenerator.SubIOp, args);
+ }
+ else if (t.IsReal) {
+ return Gen.Function(VCExpressionGenerator.SubROp, args);
+ }
+ else { //t is float
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "-"), args);
+ }
+ case BinaryOperator.Opcode.Mul:
+ if (t.IsInt) {
+ return Gen.Function(VCExpressionGenerator.MulIOp, args);
+ }
+ else if (t.IsReal) {
+ return Gen.Function(VCExpressionGenerator.MulROp, args);
+ }
+ else
+ { //t is float
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "*"), args);
+ }
+ case BinaryOperator.Opcode.Div:
+ return Gen.Function(VCExpressionGenerator.DivIOp, args);
+ case BinaryOperator.Opcode.Mod:
+ return Gen.Function(VCExpressionGenerator.ModOp, args);
+ case BinaryOperator.Opcode.RealDiv:
+ if (t.IsFloat) {
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "/"), args);
+ }
+ VCExpr arg0 = cce.NonNull(args[0]);
+ VCExpr arg1 = cce.NonNull(args[1]);
+ if (cce.NonNull(arg0.Type).IsInt) {
+ arg0 = Gen.Function(VCExpressionGenerator.ToRealOp, arg0);
+ }
+ if (cce.NonNull(arg1.Type).IsInt) {
+ arg1 = Gen.Function(VCExpressionGenerator.ToRealOp, arg1);
+ }
+ return Gen.Function(VCExpressionGenerator.DivROp, arg0, arg1);
+ case BinaryOperator.Opcode.Pow:
+ return Gen.Function(VCExpressionGenerator.PowOp, args);
+ case BinaryOperator.Opcode.Eq:
+ case BinaryOperator.Opcode.Iff:
+ // we don't distinguish between equality and equivalence at this point
+ if (t.IsFloat)
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "=="), args);
+ return Gen.Function(VCExpressionGenerator.EqOp, args);
+ case BinaryOperator.Opcode.Neq:
+ return Gen.Function(VCExpressionGenerator.NeqOp, args);
+ case BinaryOperator.Opcode.Lt:
+ if (t.IsFloat)
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "<"), args);
+ return Gen.Function(VCExpressionGenerator.LtOp, args);
+ case BinaryOperator.Opcode.Le:
+ if (t.IsFloat)
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, "<="), args);
+ return Gen.Function(VCExpressionGenerator.LeOp, args);
+ case BinaryOperator.Opcode.Ge:
+ if (t.IsFloat)
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, ">="), args);
+ return Gen.Function(VCExpressionGenerator.GeOp, args);
+ case BinaryOperator.Opcode.Gt:
+ if (t.IsFloat)
+ return Gen.Function(Gen.BinaryFloatOp(t.FloatExponent, t.FloatMantissa, ">"), args);
+ return Gen.Function(VCExpressionGenerator.GtOp, args);
+ case BinaryOperator.Opcode.Imp:
+ return Gen.Function(VCExpressionGenerator.ImpliesOp, args);
+ case BinaryOperator.Opcode.And:
+ return Gen.Function(VCExpressionGenerator.AndOp, args);
+ case BinaryOperator.Opcode.Or:
+ return Gen.Function(VCExpressionGenerator.OrOp, args);
+ case BinaryOperator.Opcode.Subtype:
+ return Gen.Function(VCExpressionGenerator.SubtypeOp, args);
+ default:
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // unexpected binary operator
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+
+ private VCExpr/*!*/ TranslateFunctionCall(FunctionCall app, List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Requires(app != null);
+ Contract.Requires((app.Func != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null); // resolution must have happened
+
+ VCExpr res = ApplyExpansion(app, args, typeArgs);
+ if (res != null)
+ return res;
+
+ VCExprOp/*!*/ functionOp = Gen.BoogieFunctionOp(app.Func);
+ return Gen.Function(functionOp, args, typeArgs);
+ }
+
+ private VCExpr ApplyExpansion(FunctionCall app, List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
+ Contract.Requires(app != null);
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Assert(app.Func != null); // resolution must have happened
+
+ lock (app.Func)
+ {
+ if (app.Func.doingExpansion)
+ {
+ System.Console.WriteLine("*** detected expansion loop on {0}", app.Func);
+ return null;
+ }
+
+ var exp = app.Func.Body;
+ if (exp == null)
+ return null;
+
+ VCExpr/*!*/ translatedBody;
+ VCExprSubstitution/*!*/ subst = new VCExprSubstitution();
+ try
+ {
+ BaseTranslator.PushFormalsScope();
+ BaseTranslator.PushBoundVariableScope();
+ app.Func.doingExpansion = true;
+
+ // first bind the formals to VCExpr variables, which are later
+ // substituted with the actual parameters
+ var inParams = app.Func.InParams;
+ for (int i = 0; i < inParams.Count; ++i)
+ subst[BaseTranslator.BindVariable(inParams[i])] = args[i];
+
+ // recursively translate the body of the expansion
+ translatedBody = BaseTranslator.Translate(exp);
+ }
+ finally
+ {
+ BaseTranslator.PopFormalsScope();
+ BaseTranslator.PopBoundVariableScope();
+ app.Func.doingExpansion = false;
+ }
+
+ // substitute the formals with the actual parameters in the body
+ var tparms = app.Func.TypeParameters;
+ Contract.Assert(typeArgs.Count == tparms.Count);
+ for (int i = 0; i < typeArgs.Count; ++i)
+ subst[tparms[i]] = typeArgs[i];
+ SubstitutingVCExprVisitor/*!*/ substituter = new SubstitutingVCExprVisitor(Gen);
+ return substituter.Mutate(translatedBody, subst);
+ }
+ }
+ }
+}
diff --git a/Source/VCExpr/Clustering.cs b/Source/VCExpr/Clustering.cs
index 1ab10107..a799aaae 100644
--- a/Source/VCExpr/Clustering.cs
+++ b/Source/VCExpr/Clustering.cs
@@ -1,522 +1,522 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// Code for managing and clusterings sets of terms; this is used to
-// compress the input given to the theorem prover
-
-namespace Microsoft.Boogie.Clustering {
- using Microsoft.Boogie.VCExprAST;
-
-
- public class SubtermCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
-
- private readonly VCExpressionGenerator/*!*/ Gen;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Gen != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalVariables));
- Contract.Invariant(cce.NonNullDictionaryAndValues(SubtermClusters));
- }
-
-
- public SubtermCollector(VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Gen = gen;
- }
-
- // variables that are global and treated like constants
- private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/> GlobalVariables = new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>();
-
- private readonly IDictionary<VCExprOp/*!*/, TermClustersSameHead/*!*/> SubtermClusters =
- new Dictionary<VCExprOp/*!*/, TermClustersSameHead/*!*/>();
-
- public void UnifyClusters() {
- foreach (KeyValuePair<VCExprOp/*!*/, TermClustersSameHead/*!*/> pair
- in SubtermClusters) {
- Contract.Assert(cce.NonNullElements(pair));
- pair.Value.UnifyClusters();
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- protected override bool StandardResult(VCExpr node, bool arg) {
- //Contract.Requires(node != null);
- return false; // by default, do not collect terms containing node
- }
-
- public override bool Visit(VCExprLiteral node, bool arg) {
- Contract.Requires(node != null);
- return true;
- }
-
- public override bool Visit(VCExprNAry node, bool arg) {
- Contract.Requires(node != null);
- VCExprBoogieFunctionOp op = node.Op as VCExprBoogieFunctionOp;
- if (op == null) {
- base.Visit(node, arg);
- return false;
- }
-
- bool res = true;
- foreach (VCExpr subexpr in node) {
- Contract.Assert(subexpr != null);
- res &= this.Traverse(subexpr, arg);
- }
-
- if (res) {
- TermClustersSameHead clusters;
- if (!SubtermClusters.TryGetValue(op, out clusters)) {
- clusters = new TermClustersSameHead(op, GlobalVariables, Gen);
- SubtermClusters.Add(op, clusters);
- }
- cce.NonNull(clusters).AddExpr(node);
- }
-
- return res;
- }
-
- public override bool Visit(VCExprVar node, bool arg) {
- Contract.Requires(node != null);
- if (!BoundTermVars.Contains(node))
- GlobalVariables[node] = node;
- return true;
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- string/*!*/ res = "";
- foreach (KeyValuePair<VCExprOp/*!*/, TermClustersSameHead/*!*/> pair
- in SubtermClusters) {
- Contract.Assert(cce.NonNullElements(pair));
- res = res + pair.Value + "\n";
- }
- return res;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- // Class for managing and clustering a set of terms that all start
- // with the same function symbol
- internal class TermClustersSameHead {
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Op != null);
- Contract.Invariant(Gen != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalVariables));
- }
- // variables that are global and treated like constants
- private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ GlobalVariables;
- public readonly VCExprOp/*!*/ Op;
- private readonly VCExpressionGenerator/*!*/ Gen;
-
- public TermClustersSameHead(VCExprOp op, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, VCExpressionGenerator/*!*/ gen) {
- Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
- Contract.Requires(gen != null);
- Contract.Requires(op != null);
- Op = op;
- GlobalVariables = globalVars;
- Gen = gen;
- }
-
- private readonly List<Cluster>/*!*/ Clusters = new List<Cluster>();
-
- private struct Cluster {
- public readonly VCExprNAry/*!*/ Generator;
- public readonly int Size;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Generator != null);
- }
-
- public Cluster(VCExprNAry generator, int size) {
- Contract.Requires(generator != null);
- Generator = generator;
- Size = size;
- }
- }
-
- private int Distance(Cluster a, Cluster b) {
- AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(Gen);
- visitor.AntiUnify(a.Generator, b.Generator);
-
- int reprSizeA, reprSizeB;
- visitor.RepresentationSize(GlobalVariables, out reprSizeA, out reprSizeB);
- return (a.Size - 1) * reprSizeA + (b.Size - 1) * reprSizeB;
- }
-
- private bool EqualUpToRenaming(Cluster a, Cluster b) {
- AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(Gen);
- visitor.AntiUnify(a.Generator, b.Generator);
- return visitor.RepresentationIsRenaming(GlobalVariables);
- }
-
- private Cluster Merge(Cluster a, Cluster b) {
- AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(Gen);
- VCExpr/*!*/ generator = visitor.AntiUnify(a.Generator, b.Generator);
- Contract.Assert(generator != null);
- VCExprNAry generatorNAry = generator as VCExprNAry;
- Contract.Assert(generatorNAry != null && Op.Equals(generatorNAry.Op));
- return new Cluster(generatorNAry, a.Size + b.Size);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public void AddExpr(VCExprNAry expr) {
- Contract.Requires(expr != null);
- Contract.Requires(Op.Equals(expr.Op));
-
- Cluster c = new Cluster(expr, 1);
- for (int i = 0; i < Clusters.Count; ++i) {
- Cluster d = Clusters[i];
- if (EqualUpToRenaming(c, d)) {
- Clusters[i] = new Cluster(d.Generator, d.Size + 1);
- return;
- }
- }
-
- Clusters.Add(c);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private struct ClusteringMatrix {
-
- private readonly VCExpressionGenerator/*!*/ Gen;
- private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ GlobalVariables;
-
- public readonly List<Cluster>/*!*/ Clusters;
- public readonly bool[]/*!*/ RemainingClusters;
-
- public readonly Distance[,]/*!*/ Distances;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Gen != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalVariables));
- Contract.Invariant(Clusters != null);
- Contract.Invariant(RemainingClusters != null);
- Contract.Invariant(Distances != null);
- }
-
-
- public struct Distance {
- public readonly int Dist;
- public readonly VCExprNAry/*!*/ Generator;
-
- public Distance(Cluster a, Cluster b, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
- AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(gen);
- Generator = (VCExprNAry)visitor.AntiUnify(a.Generator, b.Generator);
-
- int reprSizeA, reprSizeB;
- visitor.RepresentationSize(globalVars, out reprSizeA, out reprSizeB);
- Dist = (a.Size - 1) * reprSizeA + (b.Size - 1) * reprSizeB;
- }
- }
-
- public ClusteringMatrix(List<Cluster> clusters, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Contract.Requires(clusters != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
- List<Cluster> c = new List<Cluster>();
- c.AddRange(clusters);
- Clusters = c;
-
- GlobalVariables = globalVars;
- Gen = gen;
-
- bool[] remaining = new bool[clusters.Count];
- RemainingClusters = remaining;
- for (int i = 0; i < remaining.Length; ++i)
- remaining[i] = true;
-
- Distance[,]/*!*/ distances = new Distance[clusters.Count, clusters.Count];
- Distances = distances;
- for (int i = 1; i < clusters.Count; ++i)
- for (int j = 0; j < i; ++j)
- distances[i, j] =
- new Distance(clusters[i], clusters[j], GlobalVariables, Gen);
- }
-
- public void UnifyClusters(int maxDist) {
- while (true) {
- int i, j;
- int minDist = FindMinDistance(out i, out j);
-
- if (minDist > maxDist)
- return;
-
- MergeClusters(i, j);
- }
- }
-
- public void ResultingClusters(List<Cluster> clusters) {
- Contract.Requires(clusters != null);
- clusters.Clear();
- for (int i = 0; i < Clusters.Count; ++i)
- if (RemainingClusters[i])
- clusters.Add(Clusters[i]);
- }
-
- //////////////////////////////////////////////////////////////////////////
-
- private void Update(int i) {
- for (int j = 0; j < i; ++j) {
- if (RemainingClusters[j])
- Distances[i, j] =
- new Distance(Clusters[i], Clusters[j], GlobalVariables, Gen);
- }
- for (int j = i + 1; j < Clusters.Count; ++j) {
- if (RemainingClusters[j])
- Distances[j, i] =
- new Distance(Clusters[j], Clusters[i], GlobalVariables, Gen);
- }
- }
-
- private int FindMinDistance(out int c0, out int c1) {
- int minDist = int.MaxValue;
- c0 = -1;
- c1 = -1;
-
- for (int i = 0; i < Clusters.Count; ++i)
- if (RemainingClusters[i]) {
- for (int j = 0; j < i; ++j)
- if (RemainingClusters[j]) {
- if (Distances[i, j].Dist < minDist) {
- minDist = Distances[i, j].Dist;
- c0 = i;
- c1 = j;
- }
- }
- }
-
- Contract.Assert(c0 == -1 && c1 == -1 || c0 > c1 && c1 >= 0);
- return minDist;
- }
-
- private void MergeClusters(int i, int j) {
- Contract.Requires(j >= 0 && i > j && RemainingClusters[i] && RemainingClusters[j]);
- Clusters[i] = new Cluster(Distances[i, j].Generator,
- Clusters[i].Size + Clusters[j].Size);
- RemainingClusters[j] = false;
- Update(i);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public void UnifyClusters() {
- ClusteringMatrix matrix =
- new ClusteringMatrix(Clusters, GlobalVariables, Gen);
- matrix.UnifyClusters(50);
- matrix.ResultingClusters(Clusters);
- }
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- string/*!*/ res = "";
- foreach (Cluster c in Clusters)
- res = res + c.Generator + "\t" + c.Size + "\n";
- return res;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- internal class AntiUnificationVisitor : TraversingVCExprVisitor<VCExpr/*!*/, VCExpr/*!*/> {
-
- private readonly VCExpressionGenerator/*!*/ Gen;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Gen != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(Representation));
- }
-
-
- public AntiUnificationVisitor(VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Gen = gen;
- }
-
- // Sub-expressions in the first and second expression to be
- // anti-unified that are replaced with variables
- private readonly IDictionary<ExprPair, VCExprVar/*!*/>/*!*/ Representation =
- new Dictionary<ExprPair, VCExprVar/*!*/>();
-
-
-
- private struct ExprPair {
- public readonly VCExpr/*!*/ Expr0, Expr1;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Expr0 != null);
- Contract.Invariant(Expr1 != null);
- }
-
- public ExprPair(VCExpr expr0, VCExpr expr1) {
- Contract.Requires(expr1 != null);
- Contract.Requires(expr0 != null);
- Expr0 = expr0;
- Expr1 = expr1;
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (that is ExprPair) {
- ExprPair thatPair = (ExprPair)that;
- return this.Expr0.Equals(thatPair.Expr0) &&
- this.Expr1.Equals(thatPair.Expr1);
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Expr0.GetHashCode() + Expr1.GetHashCode() * 13;
- }
- }
-
- public void Reset() {
- Representation.Clear();
- }
-
- public bool RepresentationIsRenaming(IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars) {
- Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
- if (!Representation.Any(pair => pair.Key.Expr0 is VCExprVar && pair.Key.Expr1 is VCExprVar && !globalVars.ContainsKey(cce.NonNull((VCExprVar)pair.Key.Expr0)) && !globalVars.ContainsKey(cce.NonNull((VCExprVar/*!*/)pair.Key.Expr1))))
- return false;
- // check that all substituted variables are distinct
- // TODO: optimise
- return
- Representation.All(pair1 => Representation.All(pair2 => pair1.Value.Equals(pair2.Value) || !pair1.Key.Expr0.Equals(pair2.Key.Expr0) && !pair1.Key.Expr1.Equals(pair2.Key.Expr1)));
- }
-
- public void RepresentationSize(IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, out int expr0Size, out int expr1Size) {
- Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
- ReprSizeComputingVisitor/*!*/ size0Visitor = new ReprSizeComputingVisitor();
- ReprSizeComputingVisitor/*!*/ size1Visitor = new ReprSizeComputingVisitor();
-
- foreach (KeyValuePair<ExprPair, VCExprVar/*!*/> pair in Representation) {
- Contract.Assert(pair.Value != null);
- size0Visitor.ComputeSize(pair.Key.Expr0, globalVars);
- size1Visitor.ComputeSize(pair.Key.Expr1, globalVars);
- }
-
- expr0Size = size0Visitor.Size;
- expr1Size = size1Visitor.Size;
- }
-
- public VCExpr AntiUnify(VCExpr s, VCExpr t) {
- Contract.Requires(t != null);
- Contract.Requires(s != null);
- Contract.Requires((s.Type.Equals(t.Type)));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Traverse(s, t);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private VCExprVar AbstractWithVariable(VCExpr s, VCExpr t) {
- Contract.Requires(t != null);
- Contract.Requires(s != null);
- Contract.Requires((s.Type.Equals(t.Type)));
-Contract.Ensures(Contract.Result<VCExprVar>() != null);
-
- ExprPair pair = new ExprPair(s, t);
- VCExprVar repr;
- if (!Representation.TryGetValue(pair, out repr)) {
- repr = Gen.Variable("abs" + Representation.Count, s.Type);
- Representation.Add(pair, repr);
- }
- return cce.NonNull(repr);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override VCExpr Visit(VCExprLiteral node, VCExpr that) {
- Contract.Requires(that != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (node.Equals(that))
- return node;
- return AbstractWithVariable(node, that);
- }
-
- public override VCExpr Visit(VCExprNAry node, VCExpr that) {
- Contract.Requires(that != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExprNAry thatNAry = that as VCExprNAry;
- if (thatNAry != null && node.Op.Equals(thatNAry.Op)) {
- // type parameters should already have been eliminated at this
- // stage
- Contract.Assert(node.TypeParamArity == 0 && thatNAry.TypeParamArity == 0 && node.Arity == thatNAry.Arity);
-
- List<VCExpr/*!*/>/*!*/ unifiedArgs = new List<VCExpr/*!*/>();
- for (int i = 0; i < node.Arity; ++i)
- unifiedArgs.Add(Traverse(node[i], thatNAry[i]));
-
- return Gen.Function(node.Op, unifiedArgs);
- }
- return AbstractWithVariable(node, that);
- }
-
- public override VCExpr Visit(VCExprVar node, VCExpr that) {
- Contract.Requires(that != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (node.Equals(that))
- return node;
- return AbstractWithVariable(node, that);
- }
-
- protected override VCExpr StandardResult(VCExpr node, VCExpr that) {
- //Contract.Requires(that != null);
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Contract.Assert(false);
- throw new cce.UnreachableException(); // not handled here
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- internal class ReprSizeComputingVisitor
- : TraversingVCExprVisitor<bool,
- // variables considered as global constants
- IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/> {
-
- public int Size = 0;
-
- public void ComputeSize(VCExpr expr, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars) {
- Contract.Requires(expr != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
- Traverse(expr, globalVars);
- }
-
- protected override bool StandardResult(VCExpr node, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars) {
- //Contract.Requires(node != null);
- //Contract.Requires(cce.NonNullElements(globalVars));
- VCExprVar nodeAsVar = node as VCExprVar;
- if (nodeAsVar == null || globalVars.ContainsKey(nodeAsVar))
- Size = Size + 1;
- return true;
- }
- }
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// Code for managing and clusterings sets of terms; this is used to
+// compress the input given to the theorem prover
+
+namespace Microsoft.Boogie.Clustering {
+ using Microsoft.Boogie.VCExprAST;
+
+
+ public class SubtermCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
+
+ private readonly VCExpressionGenerator/*!*/ Gen;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Gen != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalVariables));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(SubtermClusters));
+ }
+
+
+ public SubtermCollector(VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Gen = gen;
+ }
+
+ // variables that are global and treated like constants
+ private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/> GlobalVariables = new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>();
+
+ private readonly IDictionary<VCExprOp/*!*/, TermClustersSameHead/*!*/> SubtermClusters =
+ new Dictionary<VCExprOp/*!*/, TermClustersSameHead/*!*/>();
+
+ public void UnifyClusters() {
+ foreach (KeyValuePair<VCExprOp/*!*/, TermClustersSameHead/*!*/> pair
+ in SubtermClusters) {
+ Contract.Assert(cce.NonNullElements(pair));
+ pair.Value.UnifyClusters();
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ protected override bool StandardResult(VCExpr node, bool arg) {
+ //Contract.Requires(node != null);
+ return false; // by default, do not collect terms containing node
+ }
+
+ public override bool Visit(VCExprLiteral node, bool arg) {
+ Contract.Requires(node != null);
+ return true;
+ }
+
+ public override bool Visit(VCExprNAry node, bool arg) {
+ Contract.Requires(node != null);
+ VCExprBoogieFunctionOp op = node.Op as VCExprBoogieFunctionOp;
+ if (op == null) {
+ base.Visit(node, arg);
+ return false;
+ }
+
+ bool res = true;
+ foreach (VCExpr subexpr in node) {
+ Contract.Assert(subexpr != null);
+ res &= this.Traverse(subexpr, arg);
+ }
+
+ if (res) {
+ TermClustersSameHead clusters;
+ if (!SubtermClusters.TryGetValue(op, out clusters)) {
+ clusters = new TermClustersSameHead(op, GlobalVariables, Gen);
+ SubtermClusters.Add(op, clusters);
+ }
+ cce.NonNull(clusters).AddExpr(node);
+ }
+
+ return res;
+ }
+
+ public override bool Visit(VCExprVar node, bool arg) {
+ Contract.Requires(node != null);
+ if (!BoundTermVars.Contains(node))
+ GlobalVariables[node] = node;
+ return true;
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ string/*!*/ res = "";
+ foreach (KeyValuePair<VCExprOp/*!*/, TermClustersSameHead/*!*/> pair
+ in SubtermClusters) {
+ Contract.Assert(cce.NonNullElements(pair));
+ res = res + pair.Value + "\n";
+ }
+ return res;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ // Class for managing and clustering a set of terms that all start
+ // with the same function symbol
+ internal class TermClustersSameHead {
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Op != null);
+ Contract.Invariant(Gen != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalVariables));
+ }
+ // variables that are global and treated like constants
+ private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ GlobalVariables;
+ public readonly VCExprOp/*!*/ Op;
+ private readonly VCExpressionGenerator/*!*/ Gen;
+
+ public TermClustersSameHead(VCExprOp op, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, VCExpressionGenerator/*!*/ gen) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
+ Contract.Requires(gen != null);
+ Contract.Requires(op != null);
+ Op = op;
+ GlobalVariables = globalVars;
+ Gen = gen;
+ }
+
+ private readonly List<Cluster>/*!*/ Clusters = new List<Cluster>();
+
+ private struct Cluster {
+ public readonly VCExprNAry/*!*/ Generator;
+ public readonly int Size;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Generator != null);
+ }
+
+ public Cluster(VCExprNAry generator, int size) {
+ Contract.Requires(generator != null);
+ Generator = generator;
+ Size = size;
+ }
+ }
+
+ private int Distance(Cluster a, Cluster b) {
+ AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(Gen);
+ visitor.AntiUnify(a.Generator, b.Generator);
+
+ int reprSizeA, reprSizeB;
+ visitor.RepresentationSize(GlobalVariables, out reprSizeA, out reprSizeB);
+ return (a.Size - 1) * reprSizeA + (b.Size - 1) * reprSizeB;
+ }
+
+ private bool EqualUpToRenaming(Cluster a, Cluster b) {
+ AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(Gen);
+ visitor.AntiUnify(a.Generator, b.Generator);
+ return visitor.RepresentationIsRenaming(GlobalVariables);
+ }
+
+ private Cluster Merge(Cluster a, Cluster b) {
+ AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(Gen);
+ VCExpr/*!*/ generator = visitor.AntiUnify(a.Generator, b.Generator);
+ Contract.Assert(generator != null);
+ VCExprNAry generatorNAry = generator as VCExprNAry;
+ Contract.Assert(generatorNAry != null && Op.Equals(generatorNAry.Op));
+ return new Cluster(generatorNAry, a.Size + b.Size);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public void AddExpr(VCExprNAry expr) {
+ Contract.Requires(expr != null);
+ Contract.Requires(Op.Equals(expr.Op));
+
+ Cluster c = new Cluster(expr, 1);
+ for (int i = 0; i < Clusters.Count; ++i) {
+ Cluster d = Clusters[i];
+ if (EqualUpToRenaming(c, d)) {
+ Clusters[i] = new Cluster(d.Generator, d.Size + 1);
+ return;
+ }
+ }
+
+ Clusters.Add(c);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ private struct ClusteringMatrix {
+
+ private readonly VCExpressionGenerator/*!*/ Gen;
+ private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ GlobalVariables;
+
+ public readonly List<Cluster>/*!*/ Clusters;
+ public readonly bool[]/*!*/ RemainingClusters;
+
+ public readonly Distance[,]/*!*/ Distances;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Gen != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalVariables));
+ Contract.Invariant(Clusters != null);
+ Contract.Invariant(RemainingClusters != null);
+ Contract.Invariant(Distances != null);
+ }
+
+
+ public struct Distance {
+ public readonly int Dist;
+ public readonly VCExprNAry/*!*/ Generator;
+
+ public Distance(Cluster a, Cluster b, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
+ AntiUnificationVisitor/*!*/ visitor = new AntiUnificationVisitor(gen);
+ Generator = (VCExprNAry)visitor.AntiUnify(a.Generator, b.Generator);
+
+ int reprSizeA, reprSizeB;
+ visitor.RepresentationSize(globalVars, out reprSizeA, out reprSizeB);
+ Dist = (a.Size - 1) * reprSizeA + (b.Size - 1) * reprSizeB;
+ }
+ }
+
+ public ClusteringMatrix(List<Cluster> clusters, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(clusters != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
+ List<Cluster> c = new List<Cluster>();
+ c.AddRange(clusters);
+ Clusters = c;
+
+ GlobalVariables = globalVars;
+ Gen = gen;
+
+ bool[] remaining = new bool[clusters.Count];
+ RemainingClusters = remaining;
+ for (int i = 0; i < remaining.Length; ++i)
+ remaining[i] = true;
+
+ Distance[,]/*!*/ distances = new Distance[clusters.Count, clusters.Count];
+ Distances = distances;
+ for (int i = 1; i < clusters.Count; ++i)
+ for (int j = 0; j < i; ++j)
+ distances[i, j] =
+ new Distance(clusters[i], clusters[j], GlobalVariables, Gen);
+ }
+
+ public void UnifyClusters(int maxDist) {
+ while (true) {
+ int i, j;
+ int minDist = FindMinDistance(out i, out j);
+
+ if (minDist > maxDist)
+ return;
+
+ MergeClusters(i, j);
+ }
+ }
+
+ public void ResultingClusters(List<Cluster> clusters) {
+ Contract.Requires(clusters != null);
+ clusters.Clear();
+ for (int i = 0; i < Clusters.Count; ++i)
+ if (RemainingClusters[i])
+ clusters.Add(Clusters[i]);
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+
+ private void Update(int i) {
+ for (int j = 0; j < i; ++j) {
+ if (RemainingClusters[j])
+ Distances[i, j] =
+ new Distance(Clusters[i], Clusters[j], GlobalVariables, Gen);
+ }
+ for (int j = i + 1; j < Clusters.Count; ++j) {
+ if (RemainingClusters[j])
+ Distances[j, i] =
+ new Distance(Clusters[j], Clusters[i], GlobalVariables, Gen);
+ }
+ }
+
+ private int FindMinDistance(out int c0, out int c1) {
+ int minDist = int.MaxValue;
+ c0 = -1;
+ c1 = -1;
+
+ for (int i = 0; i < Clusters.Count; ++i)
+ if (RemainingClusters[i]) {
+ for (int j = 0; j < i; ++j)
+ if (RemainingClusters[j]) {
+ if (Distances[i, j].Dist < minDist) {
+ minDist = Distances[i, j].Dist;
+ c0 = i;
+ c1 = j;
+ }
+ }
+ }
+
+ Contract.Assert(c0 == -1 && c1 == -1 || c0 > c1 && c1 >= 0);
+ return minDist;
+ }
+
+ private void MergeClusters(int i, int j) {
+ Contract.Requires(j >= 0 && i > j && RemainingClusters[i] && RemainingClusters[j]);
+ Clusters[i] = new Cluster(Distances[i, j].Generator,
+ Clusters[i].Size + Clusters[j].Size);
+ RemainingClusters[j] = false;
+ Update(i);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public void UnifyClusters() {
+ ClusteringMatrix matrix =
+ new ClusteringMatrix(Clusters, GlobalVariables, Gen);
+ matrix.UnifyClusters(50);
+ matrix.ResultingClusters(Clusters);
+ }
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ string/*!*/ res = "";
+ foreach (Cluster c in Clusters)
+ res = res + c.Generator + "\t" + c.Size + "\n";
+ return res;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ internal class AntiUnificationVisitor : TraversingVCExprVisitor<VCExpr/*!*/, VCExpr/*!*/> {
+
+ private readonly VCExpressionGenerator/*!*/ Gen;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Gen != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(Representation));
+ }
+
+
+ public AntiUnificationVisitor(VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Gen = gen;
+ }
+
+ // Sub-expressions in the first and second expression to be
+ // anti-unified that are replaced with variables
+ private readonly IDictionary<ExprPair, VCExprVar/*!*/>/*!*/ Representation =
+ new Dictionary<ExprPair, VCExprVar/*!*/>();
+
+
+
+ private struct ExprPair {
+ public readonly VCExpr/*!*/ Expr0, Expr1;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Expr0 != null);
+ Contract.Invariant(Expr1 != null);
+ }
+
+ public ExprPair(VCExpr expr0, VCExpr expr1) {
+ Contract.Requires(expr1 != null);
+ Contract.Requires(expr0 != null);
+ Expr0 = expr0;
+ Expr1 = expr1;
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (that is ExprPair) {
+ ExprPair thatPair = (ExprPair)that;
+ return this.Expr0.Equals(thatPair.Expr0) &&
+ this.Expr1.Equals(thatPair.Expr1);
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Expr0.GetHashCode() + Expr1.GetHashCode() * 13;
+ }
+ }
+
+ public void Reset() {
+ Representation.Clear();
+ }
+
+ public bool RepresentationIsRenaming(IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
+ if (!Representation.Any(pair => pair.Key.Expr0 is VCExprVar && pair.Key.Expr1 is VCExprVar && !globalVars.ContainsKey(cce.NonNull((VCExprVar)pair.Key.Expr0)) && !globalVars.ContainsKey(cce.NonNull((VCExprVar/*!*/)pair.Key.Expr1))))
+ return false;
+ // check that all substituted variables are distinct
+ // TODO: optimise
+ return
+ Representation.All(pair1 => Representation.All(pair2 => pair1.Value.Equals(pair2.Value) || !pair1.Key.Expr0.Equals(pair2.Key.Expr0) && !pair1.Key.Expr1.Equals(pair2.Key.Expr1)));
+ }
+
+ public void RepresentationSize(IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars, out int expr0Size, out int expr1Size) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
+ ReprSizeComputingVisitor/*!*/ size0Visitor = new ReprSizeComputingVisitor();
+ ReprSizeComputingVisitor/*!*/ size1Visitor = new ReprSizeComputingVisitor();
+
+ foreach (KeyValuePair<ExprPair, VCExprVar/*!*/> pair in Representation) {
+ Contract.Assert(pair.Value != null);
+ size0Visitor.ComputeSize(pair.Key.Expr0, globalVars);
+ size1Visitor.ComputeSize(pair.Key.Expr1, globalVars);
+ }
+
+ expr0Size = size0Visitor.Size;
+ expr1Size = size1Visitor.Size;
+ }
+
+ public VCExpr AntiUnify(VCExpr s, VCExpr t) {
+ Contract.Requires(t != null);
+ Contract.Requires(s != null);
+ Contract.Requires((s.Type.Equals(t.Type)));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Traverse(s, t);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ private VCExprVar AbstractWithVariable(VCExpr s, VCExpr t) {
+ Contract.Requires(t != null);
+ Contract.Requires(s != null);
+ Contract.Requires((s.Type.Equals(t.Type)));
+Contract.Ensures(Contract.Result<VCExprVar>() != null);
+
+ ExprPair pair = new ExprPair(s, t);
+ VCExprVar repr;
+ if (!Representation.TryGetValue(pair, out repr)) {
+ repr = Gen.Variable("abs" + Representation.Count, s.Type);
+ Representation.Add(pair, repr);
+ }
+ return cce.NonNull(repr);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr Visit(VCExprLiteral node, VCExpr that) {
+ Contract.Requires(that != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (node.Equals(that))
+ return node;
+ return AbstractWithVariable(node, that);
+ }
+
+ public override VCExpr Visit(VCExprNAry node, VCExpr that) {
+ Contract.Requires(that != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExprNAry thatNAry = that as VCExprNAry;
+ if (thatNAry != null && node.Op.Equals(thatNAry.Op)) {
+ // type parameters should already have been eliminated at this
+ // stage
+ Contract.Assert(node.TypeParamArity == 0 && thatNAry.TypeParamArity == 0 && node.Arity == thatNAry.Arity);
+
+ List<VCExpr/*!*/>/*!*/ unifiedArgs = new List<VCExpr/*!*/>();
+ for (int i = 0; i < node.Arity; ++i)
+ unifiedArgs.Add(Traverse(node[i], thatNAry[i]));
+
+ return Gen.Function(node.Op, unifiedArgs);
+ }
+ return AbstractWithVariable(node, that);
+ }
+
+ public override VCExpr Visit(VCExprVar node, VCExpr that) {
+ Contract.Requires(that != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (node.Equals(that))
+ return node;
+ return AbstractWithVariable(node, that);
+ }
+
+ protected override VCExpr StandardResult(VCExpr node, VCExpr that) {
+ //Contract.Requires(that != null);
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // not handled here
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ internal class ReprSizeComputingVisitor
+ : TraversingVCExprVisitor<bool,
+ // variables considered as global constants
+ IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/> {
+
+ public int Size = 0;
+
+ public void ComputeSize(VCExpr expr, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars) {
+ Contract.Requires(expr != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(globalVars));
+ Traverse(expr, globalVars);
+ }
+
+ protected override bool StandardResult(VCExpr node, IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ globalVars) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(cce.NonNullElements(globalVars));
+ VCExprVar nodeAsVar = node as VCExprVar;
+ if (nodeAsVar == null || globalVars.ContainsKey(nodeAsVar))
+ Size = Size + 1;
+ return true;
+ }
+ }
} \ No newline at end of file
diff --git a/Source/VCExpr/LetBindingSorter.cs b/Source/VCExpr/LetBindingSorter.cs
index 474770d0..2bf28fbb 100644
--- a/Source/VCExpr/LetBindingSorter.cs
+++ b/Source/VCExpr/LetBindingSorter.cs
@@ -1,161 +1,161 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-// Sort the bindings in a let-expression so that terms bound earlier do
-// not contain variables bound later
-
-namespace Microsoft.Boogie.VCExprAST {
-
- // (argument is not used)
- public class LetBindingSorter : MutatingVCExprVisitor<bool> {
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(FreeVarCollector != null);
- }
-
- private readonly FreeVariableCollector/*!*/ FreeVarCollector =
- new FreeVariableCollector();
-
- private List<VCExprVar/*!*/>/*!*/ FreeVarsIn(VCExpr expr) {
- Contract.Requires(expr != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
- FreeVarCollector.Collect(expr);
- List<VCExprVar/*!*/>/*!*/ freeVars = new List<VCExprVar/*!*/>(FreeVarCollector.FreeTermVars.Keys);
- FreeVarCollector.Reset();
- return freeVars;
- }
-
- public LetBindingSorter(VCExpressionGenerator gen):base(gen) {
- Contract.Requires(gen != null);
-
- }
-
- public override VCExpr Visit(VCExprLet node, bool arg){
-Contract.Requires(node != null);
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- IDictionary<VCExprVar/*!*/, Binding/*!*/> boundVars =
- new Dictionary<VCExprVar/*!*/, Binding/*!*/> ();
-
- // recurse and collect the free variables in bound terms and formulae
- foreach (VCExprLetBinding/*!*/ binding in node) {Contract.Assert(binding != null);
- VCExpr/*!*/ newE = Mutate(binding.E, arg);
- Binding/*!*/ b = new Binding (binding.V, newE, FreeVarsIn(newE));
- boundVars.Add(b.V, b);
- }
-
- // generate the occurrence edges
- foreach (KeyValuePair<VCExprVar/*!*/, Binding/*!*/> pair in boundVars) {Contract.Assert(cce.NonNullElements(pair));
- Binding/*!*/ b = pair.Value;
- Contract.Assert(b != null);
- foreach (VCExprVar/*!*/ v in b.FreeVars) {Contract.Assert(v != null);
- Binding b2;
- if (boundVars.TryGetValue(v, out b2)) {
- cce.NonNull(b2).Occurrences.Add(b);
- b.InvOccurrencesNum = b.InvOccurrencesNum + 1;
- }
- }
- }
-
- // topological sort
- Stack<Binding/*!*/> rootBindings = new Stack<Binding/*!*/> ();
- foreach (KeyValuePair<VCExprVar/*!*/, Binding/*!*/> pair in boundVars)
- {Contract.Assert(cce.NonNullElements(pair));
- if (pair.Value.InvOccurrencesNum == 0)
- rootBindings.Push(pair.Value);}
-
- List<Binding/*!*/>/*!*/ sortedBindings = new List<Binding/*!*/> ();
- while (rootBindings.Count > 0) {
- Binding/*!*/ b = rootBindings.Pop();
- Contract.Assert(b != null);
- sortedBindings.Add(b);
- foreach (Binding/*!*/ b2 in b.Occurrences) {
- Contract.Assert(b2 != null);
- b2.InvOccurrencesNum = b2.InvOccurrencesNum - 1;
- if (b2.InvOccurrencesNum == 0)
- rootBindings.Push(b2);
- }
- }
-
- if (boundVars.Any(pair=> pair.Value.InvOccurrencesNum > 0))
- System.Diagnostics.Debug.Fail("Cyclic let-bindings");
-
- Contract.Assert(node.Length == sortedBindings.Count);
-
- // check which of the bindings can be dropped
- VCExpr newBody = Mutate(node.Body, arg);
- Contract.Assert(newBody != null);
-
- IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ usedVars =
- new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/> ();
- foreach (VCExprVar/*!*/ v in FreeVarsIn(newBody)){Contract.Assert(v != null);
- if (!usedVars.ContainsKey(v))
- usedVars.Add(v, v);}
-
- for (int i = sortedBindings.Count - 1; i >= 0; --i) {
- if (usedVars.ContainsKey(sortedBindings[i].V)) {
- foreach (VCExprVar/*!*/ v in sortedBindings[i].FreeVars){
- Contract.Assert(v != null);
- if (!usedVars.ContainsKey(v))
- usedVars.Add(v, v);}
- } else {
- sortedBindings.RemoveAt(i);
- }
- }
-
- // assemble the resulting let-expression
- List<VCExprLetBinding/*!*/>/*!*/ newBindings = new List<VCExprLetBinding/*!*/>();
- foreach (Binding b in sortedBindings)
- newBindings.Add(Gen.LetBinding(b.V, b.E));
-
- return Gen.Let(newBindings, newBody);
- }
-
- private class Binding {
- public readonly VCExprVar/*!*/ V;
- public readonly VCExpr/*!*/ E;
- public readonly List<VCExprVar/*!*/>/*!*/ FreeVars;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(V != null);
- Contract.Invariant(E != null);
- Contract.Invariant(cce.NonNullElements(FreeVars));
- Contract.Invariant(Occurrences != null);
- }
-
-
- // list of all bound expression in which the variable V occurs
- // (outgoing edges)
- public readonly List<Binding>/*!*/ Occurrences;
-
- // number of variables that are bound in this let-expression
- // and that occur in FreeVars
- // (incoming edges)
- public int InvOccurrencesNum;
-
- public Binding(VCExprVar v, VCExpr e, List<VCExprVar/*!*/>/*!*/ freeVars) {
- Contract.Requires(e != null);
- Contract.Requires(v != null);
- Contract.Requires(cce.NonNullElements(freeVars));
- this.V = v;
- this.E = e;
- this.FreeVars = freeVars;
- this.Occurrences = new List<Binding>();
- this.InvOccurrencesNum = 0;
- }
- }
-
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+// Sort the bindings in a let-expression so that terms bound earlier do
+// not contain variables bound later
+
+namespace Microsoft.Boogie.VCExprAST {
+
+ // (argument is not used)
+ public class LetBindingSorter : MutatingVCExprVisitor<bool> {
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(FreeVarCollector != null);
+ }
+
+ private readonly FreeVariableCollector/*!*/ FreeVarCollector =
+ new FreeVariableCollector();
+
+ private List<VCExprVar/*!*/>/*!*/ FreeVarsIn(VCExpr expr) {
+ Contract.Requires(expr != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+ FreeVarCollector.Collect(expr);
+ List<VCExprVar/*!*/>/*!*/ freeVars = new List<VCExprVar/*!*/>(FreeVarCollector.FreeTermVars.Keys);
+ FreeVarCollector.Reset();
+ return freeVars;
+ }
+
+ public LetBindingSorter(VCExpressionGenerator gen):base(gen) {
+ Contract.Requires(gen != null);
+
+ }
+
+ public override VCExpr Visit(VCExprLet node, bool arg){
+Contract.Requires(node != null);
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ IDictionary<VCExprVar/*!*/, Binding/*!*/> boundVars =
+ new Dictionary<VCExprVar/*!*/, Binding/*!*/> ();
+
+ // recurse and collect the free variables in bound terms and formulae
+ foreach (VCExprLetBinding/*!*/ binding in node) {Contract.Assert(binding != null);
+ VCExpr/*!*/ newE = Mutate(binding.E, arg);
+ Binding/*!*/ b = new Binding (binding.V, newE, FreeVarsIn(newE));
+ boundVars.Add(b.V, b);
+ }
+
+ // generate the occurrence edges
+ foreach (KeyValuePair<VCExprVar/*!*/, Binding/*!*/> pair in boundVars) {Contract.Assert(cce.NonNullElements(pair));
+ Binding/*!*/ b = pair.Value;
+ Contract.Assert(b != null);
+ foreach (VCExprVar/*!*/ v in b.FreeVars) {Contract.Assert(v != null);
+ Binding b2;
+ if (boundVars.TryGetValue(v, out b2)) {
+ cce.NonNull(b2).Occurrences.Add(b);
+ b.InvOccurrencesNum = b.InvOccurrencesNum + 1;
+ }
+ }
+ }
+
+ // topological sort
+ Stack<Binding/*!*/> rootBindings = new Stack<Binding/*!*/> ();
+ foreach (KeyValuePair<VCExprVar/*!*/, Binding/*!*/> pair in boundVars)
+ {Contract.Assert(cce.NonNullElements(pair));
+ if (pair.Value.InvOccurrencesNum == 0)
+ rootBindings.Push(pair.Value);}
+
+ List<Binding/*!*/>/*!*/ sortedBindings = new List<Binding/*!*/> ();
+ while (rootBindings.Count > 0) {
+ Binding/*!*/ b = rootBindings.Pop();
+ Contract.Assert(b != null);
+ sortedBindings.Add(b);
+ foreach (Binding/*!*/ b2 in b.Occurrences) {
+ Contract.Assert(b2 != null);
+ b2.InvOccurrencesNum = b2.InvOccurrencesNum - 1;
+ if (b2.InvOccurrencesNum == 0)
+ rootBindings.Push(b2);
+ }
+ }
+
+ if (boundVars.Any(pair=> pair.Value.InvOccurrencesNum > 0))
+ System.Diagnostics.Debug.Fail("Cyclic let-bindings");
+
+ Contract.Assert(node.Length == sortedBindings.Count);
+
+ // check which of the bindings can be dropped
+ VCExpr newBody = Mutate(node.Body, arg);
+ Contract.Assert(newBody != null);
+
+ IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ usedVars =
+ new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/> ();
+ foreach (VCExprVar/*!*/ v in FreeVarsIn(newBody)){Contract.Assert(v != null);
+ if (!usedVars.ContainsKey(v))
+ usedVars.Add(v, v);}
+
+ for (int i = sortedBindings.Count - 1; i >= 0; --i) {
+ if (usedVars.ContainsKey(sortedBindings[i].V)) {
+ foreach (VCExprVar/*!*/ v in sortedBindings[i].FreeVars){
+ Contract.Assert(v != null);
+ if (!usedVars.ContainsKey(v))
+ usedVars.Add(v, v);}
+ } else {
+ sortedBindings.RemoveAt(i);
+ }
+ }
+
+ // assemble the resulting let-expression
+ List<VCExprLetBinding/*!*/>/*!*/ newBindings = new List<VCExprLetBinding/*!*/>();
+ foreach (Binding b in sortedBindings)
+ newBindings.Add(Gen.LetBinding(b.V, b.E));
+
+ return Gen.Let(newBindings, newBody);
+ }
+
+ private class Binding {
+ public readonly VCExprVar/*!*/ V;
+ public readonly VCExpr/*!*/ E;
+ public readonly List<VCExprVar/*!*/>/*!*/ FreeVars;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(V != null);
+ Contract.Invariant(E != null);
+ Contract.Invariant(cce.NonNullElements(FreeVars));
+ Contract.Invariant(Occurrences != null);
+ }
+
+
+ // list of all bound expression in which the variable V occurs
+ // (outgoing edges)
+ public readonly List<Binding>/*!*/ Occurrences;
+
+ // number of variables that are bound in this let-expression
+ // and that occur in FreeVars
+ // (incoming edges)
+ public int InvOccurrencesNum;
+
+ public Binding(VCExprVar v, VCExpr e, List<VCExprVar/*!*/>/*!*/ freeVars) {
+ Contract.Requires(e != null);
+ Contract.Requires(v != null);
+ Contract.Requires(cce.NonNullElements(freeVars));
+ this.V = v;
+ this.E = e;
+ this.FreeVars = freeVars;
+ this.Occurrences = new List<Binding>();
+ this.InvOccurrencesNum = 0;
+ }
+ }
+
+ }
+
+}
diff --git a/Source/VCExpr/NameClashResolver.cs b/Source/VCExpr/NameClashResolver.cs
index a46105f8..0effb386 100644
--- a/Source/VCExpr/NameClashResolver.cs
+++ b/Source/VCExpr/NameClashResolver.cs
@@ -1,196 +1,196 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-// Visitor that establishes unique variable (or constant) names in a VCExpr.
-// This is done by adding a counter as suffix if name clashes occur
-
-// TODO: also handle type variables here
-
-namespace Microsoft.Boogie.VCExprAST {
- using TEHelperFuns = Microsoft.Boogie.TypeErasure.HelperFuns;
-
- public class UniqueNamer : ICloneable {
- public string Spacer = "@@";
-
- public UniqueNamer() {
- GlobalNames = new Dictionary<Object, string>();
- LocalNames = TEHelperFuns.ToList(new Dictionary<Object/*!*/, string/*!*/>()
- as IDictionary<Object/*!*/, string/*!*/>);
- UsedNames = new HashSet<string>();
- CurrentCounters = new Dictionary<string, int>();
- GlobalPlusLocalNames = new Dictionary<Object, string>();
- }
-
- private UniqueNamer(UniqueNamer namer) {
- Contract.Requires(namer != null);
-
- Spacer = namer.Spacer;
- GlobalNames = new Dictionary<Object, string>(namer.GlobalNames);
- LocalNames = new List<IDictionary<Object, string>>();
-
- foreach (IDictionary<Object/*!*/, string/*!*/>/*!*/ d in namer.LocalNames)
- LocalNames.Add(new Dictionary<Object/*!*/, string/*!*/>(d));
-
- UsedNames = new HashSet<string>(namer.UsedNames);
- CurrentCounters = new Dictionary<string, int>(namer.CurrentCounters);
- GlobalPlusLocalNames = new Dictionary<Object, string>(namer.GlobalPlusLocalNames);
- }
-
- public Object Clone() {
- Contract.Ensures(Contract.Result<Object>() != null);
- return new UniqueNamer(this);
- }
-
- public void Reset()
- {
- GlobalNames.Clear();
- LocalNames.Clear();
- LocalNames.Add(new Dictionary<Object/*!*/, string/*!*/>());
- UsedNames.Clear();
- CurrentCounters.Clear();
- GlobalPlusLocalNames.Clear();
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private readonly IDictionary<Object/*!*/, string/*!*/>/*!*/ GlobalNames;
- [ContractInvariantMethod]
- void GlobalNamesInvariantMethod() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalNames));
- }
- private readonly List<IDictionary<Object/*!*/, string/*!*/>/*!*/>/*!*/ LocalNames;
- [ContractInvariantMethod]
- void LocalNamesInvariantMethod() {
- Contract.Invariant(Contract.ForAll(LocalNames, i => i != null && cce.NonNullDictionaryAndValues(i)));
- }
-
- // dictionary of all names that have already been used
- // (locally or globally)
- private readonly HashSet<string/*!*/>/*!*/ UsedNames;
- [ContractInvariantMethod]
- void UsedNamesInvariantMethod() {
- Contract.Invariant(cce.NonNull(UsedNames));
- }
- private readonly IDictionary<string/*!*/, int/*!*/>/*!*/ CurrentCounters;
- [ContractInvariantMethod]
- void CurrentCountersInvariantMethod() {
- Contract.Invariant(CurrentCounters != null);
- }
- private readonly IDictionary<Object/*!*/, string/*!*/>/*!*/ GlobalPlusLocalNames;
- [ContractInvariantMethod]
- void GlobalPlusLocalNamesInvariantMethod() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalPlusLocalNames));
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public void PushScope() {
- LocalNames.Add(new Dictionary<Object/*!*/, string/*!*/>());
- }
-
- public void PopScope() {
- LocalNames.RemoveAt(LocalNames.Count - 1);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private string NextFreeName(Object thingie, string baseName) {
- Contract.Requires(baseName != null);
- Contract.Requires(thingie != null);
- Contract.Ensures(Contract.Result<string>() != null);
- string/*!*/ candidate;
- int counter;
-
- if (CurrentCounters.TryGetValue(baseName, out counter)) {
- candidate = baseName + Spacer + counter;
- counter = counter + 1;
- } else {
- candidate = baseName;
- counter = 0;
- }
-
- while (UsedNames.Contains(candidate)) {
- candidate = baseName + Spacer + counter;
- counter = counter + 1;
- }
-
- UsedNames.Add(candidate);
- CurrentCounters[baseName] = counter;
- GlobalPlusLocalNames[thingie] = candidate;
- return candidate;
- }
-
- // retrieve the name of a thingie; if it does not have a name yet,
- // generate a unique name for it (as close as possible to its inherent
- // name) and register it globally
- public string GetName(Object thingie, string inherentName) {
- Contract.Requires(inherentName != null);
- Contract.Requires(thingie != null);
- Contract.Ensures(Contract.Result<string>() != null);
- string res = this[thingie];
-
- if (res != null)
- return res;
-
- // if the object is not yet registered, create a name for it
- res = NextFreeName(thingie, inherentName);
- GlobalNames.Add(thingie, res);
-
- return res;
- }
-
- [Pure]
- public string this[Object/*!*/ thingie] {
- get {
- Contract.Requires(thingie != null);
-
- string res;
- for (int i = LocalNames.Count - 1; i >= 0; --i) {
- if (LocalNames[i].TryGetValue(thingie, out res))
- return res;
- }
-
- GlobalNames.TryGetValue(thingie, out res);
- return res;
- }
- }
-
- public string GetLocalName(Object thingie, string inherentName) {
- Contract.Requires(inherentName != null);
- Contract.Requires(thingie != null);
- Contract.Ensures(Contract.Result<string>() != null);
- string res = NextFreeName(thingie, inherentName);
- LocalNames[LocalNames.Count - 1][thingie] = res;
- return res;
- }
-
- public virtual string GetQuotedName(Object thingie, string inherentName)
- {
- return GetName(thingie, inherentName);
- }
-
- public virtual string GetQuotedLocalName(Object thingie, string inherentName)
- {
- return GetLocalName(thingie, inherentName);
- }
-
- public string Lookup(Object thingie) {
- Contract.Requires(thingie != null);
- Contract.Ensures(Contract.Result<string>() != null);
- string name;
- if (GlobalPlusLocalNames.TryGetValue(thingie, out name))
- return name;
- return Spacer + "undefined" + Spacer + thingie.GetHashCode() + Spacer;
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+// Visitor that establishes unique variable (or constant) names in a VCExpr.
+// This is done by adding a counter as suffix if name clashes occur
+
+// TODO: also handle type variables here
+
+namespace Microsoft.Boogie.VCExprAST {
+ using TEHelperFuns = Microsoft.Boogie.TypeErasure.HelperFuns;
+
+ public class UniqueNamer : ICloneable {
+ public string Spacer = "@@";
+
+ public UniqueNamer() {
+ GlobalNames = new Dictionary<Object, string>();
+ LocalNames = TEHelperFuns.ToList(new Dictionary<Object/*!*/, string/*!*/>()
+ as IDictionary<Object/*!*/, string/*!*/>);
+ UsedNames = new HashSet<string>();
+ CurrentCounters = new Dictionary<string, int>();
+ GlobalPlusLocalNames = new Dictionary<Object, string>();
+ }
+
+ private UniqueNamer(UniqueNamer namer) {
+ Contract.Requires(namer != null);
+
+ Spacer = namer.Spacer;
+ GlobalNames = new Dictionary<Object, string>(namer.GlobalNames);
+ LocalNames = new List<IDictionary<Object, string>>();
+
+ foreach (IDictionary<Object/*!*/, string/*!*/>/*!*/ d in namer.LocalNames)
+ LocalNames.Add(new Dictionary<Object/*!*/, string/*!*/>(d));
+
+ UsedNames = new HashSet<string>(namer.UsedNames);
+ CurrentCounters = new Dictionary<string, int>(namer.CurrentCounters);
+ GlobalPlusLocalNames = new Dictionary<Object, string>(namer.GlobalPlusLocalNames);
+ }
+
+ public Object Clone() {
+ Contract.Ensures(Contract.Result<Object>() != null);
+ return new UniqueNamer(this);
+ }
+
+ public void Reset()
+ {
+ GlobalNames.Clear();
+ LocalNames.Clear();
+ LocalNames.Add(new Dictionary<Object/*!*/, string/*!*/>());
+ UsedNames.Clear();
+ CurrentCounters.Clear();
+ GlobalPlusLocalNames.Clear();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ private readonly IDictionary<Object/*!*/, string/*!*/>/*!*/ GlobalNames;
+ [ContractInvariantMethod]
+ void GlobalNamesInvariantMethod() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalNames));
+ }
+ private readonly List<IDictionary<Object/*!*/, string/*!*/>/*!*/>/*!*/ LocalNames;
+ [ContractInvariantMethod]
+ void LocalNamesInvariantMethod() {
+ Contract.Invariant(Contract.ForAll(LocalNames, i => i != null && cce.NonNullDictionaryAndValues(i)));
+ }
+
+ // dictionary of all names that have already been used
+ // (locally or globally)
+ private readonly HashSet<string/*!*/>/*!*/ UsedNames;
+ [ContractInvariantMethod]
+ void UsedNamesInvariantMethod() {
+ Contract.Invariant(cce.NonNull(UsedNames));
+ }
+ private readonly IDictionary<string/*!*/, int/*!*/>/*!*/ CurrentCounters;
+ [ContractInvariantMethod]
+ void CurrentCountersInvariantMethod() {
+ Contract.Invariant(CurrentCounters != null);
+ }
+ private readonly IDictionary<Object/*!*/, string/*!*/>/*!*/ GlobalPlusLocalNames;
+ [ContractInvariantMethod]
+ void GlobalPlusLocalNamesInvariantMethod() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(GlobalPlusLocalNames));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public void PushScope() {
+ LocalNames.Add(new Dictionary<Object/*!*/, string/*!*/>());
+ }
+
+ public void PopScope() {
+ LocalNames.RemoveAt(LocalNames.Count - 1);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ private string NextFreeName(Object thingie, string baseName) {
+ Contract.Requires(baseName != null);
+ Contract.Requires(thingie != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ string/*!*/ candidate;
+ int counter;
+
+ if (CurrentCounters.TryGetValue(baseName, out counter)) {
+ candidate = baseName + Spacer + counter;
+ counter = counter + 1;
+ } else {
+ candidate = baseName;
+ counter = 0;
+ }
+
+ while (UsedNames.Contains(candidate)) {
+ candidate = baseName + Spacer + counter;
+ counter = counter + 1;
+ }
+
+ UsedNames.Add(candidate);
+ CurrentCounters[baseName] = counter;
+ GlobalPlusLocalNames[thingie] = candidate;
+ return candidate;
+ }
+
+ // retrieve the name of a thingie; if it does not have a name yet,
+ // generate a unique name for it (as close as possible to its inherent
+ // name) and register it globally
+ public string GetName(Object thingie, string inherentName) {
+ Contract.Requires(inherentName != null);
+ Contract.Requires(thingie != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ string res = this[thingie];
+
+ if (res != null)
+ return res;
+
+ // if the object is not yet registered, create a name for it
+ res = NextFreeName(thingie, inherentName);
+ GlobalNames.Add(thingie, res);
+
+ return res;
+ }
+
+ [Pure]
+ public string this[Object/*!*/ thingie] {
+ get {
+ Contract.Requires(thingie != null);
+
+ string res;
+ for (int i = LocalNames.Count - 1; i >= 0; --i) {
+ if (LocalNames[i].TryGetValue(thingie, out res))
+ return res;
+ }
+
+ GlobalNames.TryGetValue(thingie, out res);
+ return res;
+ }
+ }
+
+ public string GetLocalName(Object thingie, string inherentName) {
+ Contract.Requires(inherentName != null);
+ Contract.Requires(thingie != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ string res = NextFreeName(thingie, inherentName);
+ LocalNames[LocalNames.Count - 1][thingie] = res;
+ return res;
+ }
+
+ public virtual string GetQuotedName(Object thingie, string inherentName)
+ {
+ return GetName(thingie, inherentName);
+ }
+
+ public virtual string GetQuotedLocalName(Object thingie, string inherentName)
+ {
+ return GetLocalName(thingie, inherentName);
+ }
+
+ public string Lookup(Object thingie) {
+ Contract.Requires(thingie != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ string name;
+ if (GlobalPlusLocalNames.TryGetValue(thingie, out name))
+ return name;
+ return Spacer + "undefined" + Spacer + thingie.GetHashCode() + Spacer;
+ }
+ }
+}
diff --git a/Source/VCExpr/SimplifyLikeLineariser.cs b/Source/VCExpr/SimplifyLikeLineariser.cs
index 6f74fe08..1a4374f8 100644
--- a/Source/VCExpr/SimplifyLikeLineariser.cs
+++ b/Source/VCExpr/SimplifyLikeLineariser.cs
@@ -1,1222 +1,1222 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// a naive method to turn VCExprs into strings that can be fed into Simplify
-
-namespace Microsoft.Boogie.VCExprAST {
- [ContractClassFor(typeof(LineariserOptions))]
- public abstract class LinOptContracts : LineariserOptions {
- public LinOptContracts()
- : base(true) {
- }
- public override LineariserOptions SetAsTerm(bool newVal) {
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
- throw new NotImplementedException();
- }
-
- }
-
- // Options for the linearisation. Here one can choose, for instance,
- // whether Simplify or Z3 output is to be produced
- [ContractClass(typeof(LinOptContracts))]
- public abstract class LineariserOptions {
-
- public readonly bool AsTerm;
- public abstract LineariserOptions/*!*/ SetAsTerm(bool newVal);
-
- public abstract bool QuantifierIds {
- get;
- }
-
- public virtual bool UseWeights {
- get {
- return false;
- }
- }
-
- public virtual bool InverseImplies {
- get {
- return false;
- }
- }
-
- // whether to include type specifications in quantifiers
- public abstract bool UseTypes {
- get;
- }
-
- // variables representing formulas in let-bindings have to be
- // printed in a different way than other variables
- public virtual List<VCExprVar/*!*/>/*!*/ LetVariables {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
- return EmptyList;
- }
- }
-
- public virtual LineariserOptions AddLetVariable(VCExprVar furtherVar) {
- Contract.Requires(furtherVar != null);
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
- return this;
- }
-
- public virtual LineariserOptions AddLetVariables(List<VCExprVar/*!*/>/*!*/ furtherVars) {
- Contract.Requires(cce.NonNullElements(furtherVars));
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
- return this;
- }
-
- private static readonly List<VCExprVar/*!*/>/*!*/ EmptyList = new List<VCExprVar/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvarinat() {
- Contract.Invariant(EmptyList != null);
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- protected LineariserOptions(bool asTerm) {
- this.AsTerm = asTerm;
- }
-
- public static readonly LineariserOptions SimplifyDefault = new SimplifyOptions(false);
- internal static readonly LineariserOptions SimplifyDefaultTerm = new SimplifyOptions(true);
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- private class SimplifyOptions : LineariserOptions {
- internal SimplifyOptions(bool asTerm)
- : base(asTerm) {
-
- }
- public override bool QuantifierIds {
- get {
- return false;
- }
- }
- public override bool UseTypes {
- get {
- return false;
- }
- }
- public override LineariserOptions SetAsTerm(bool newVal) {
- Contract.Ensures(Contract.Result<LineariserOptions>() != null);
- if (newVal)
- return SimplifyDefaultTerm;
- else
- return SimplifyDefault;
- }
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- // Lineariser for expressions. The result (bool) is currently not used for anything
- public class SimplifyLikeExprLineariser : IVCExprVisitor<bool, LineariserOptions/*!*/> {
-
- public static string ToSimplifyString(VCExpr e, UniqueNamer namer) {
- Contract.Requires(namer != null);
- Contract.Requires(e != null);
- Contract.Ensures(Contract.Result<string>() != null);
- return ToString(e, LineariserOptions.SimplifyDefault, namer);
- }
-
- public static string ToString(VCExpr/*!*/ e, LineariserOptions/*!*/ options, UniqueNamer/*!*/ namer) {
- Contract.Requires(e != null);
- Contract.Requires(options != null);
- Contract.Requires(namer != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- StringWriter sw = new StringWriter();
- SimplifyLikeExprLineariser lin = new SimplifyLikeExprLineariser(sw, namer);
- lin.Linearise(e, options);
- return sw.ToString();
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(wr != null);
- Contract.Invariant(Namer != null);
- }
-
- private readonly TextWriter/*!*/ wr;
- private SimplifyLikeOpLineariser OpLinObject = null;
- private IVCExprOpVisitor<bool, LineariserOptions/*!*/>/*!*/ OpLineariser {
- get {
- Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool, LineariserOptions>>() != null);
- if (OpLinObject == null)
- OpLinObject = new SimplifyLikeOpLineariser(this, wr);
- return OpLinObject;
- }
- }
-
- internal readonly UniqueNamer Namer;
-
- public SimplifyLikeExprLineariser(TextWriter wr, UniqueNamer namer) {
- Contract.Requires(namer != null);
- Contract.Requires(wr != null);
- this.wr = wr;
- this.Namer = namer;
- }
-
- public void Linearise(VCExpr expr, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(expr != null);
- expr.Accept<bool, LineariserOptions>(this, options);
- }
-
- public void LineariseAsTerm(VCExpr expr, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(expr != null);
- Linearise(expr, options.SetAsTerm(true));
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public static string MakeIdPrintable(string s) {
- Contract.Requires(s != null);
- Contract.Requires(s != "");
- Contract.Ensures(Contract.Result<string>() != null);
- // make sure that no keywords are used as identifiers
- switch (s) {
- case andName:
- case orName:
- case notName:
- case impliesName:
- case iffName:
- case eqName:
- case neqName:
- case distinctName:
- case TRUEName:
- case FALSEName:
- s = "nonkeyword_" + s;
- break;
- }
-
- if (CommandLineOptions.Clo.BracketIdsInVC == 0) {
- // In this form, we go with any identifier, so we don't ever bother about brackets.
- // Except: @true and @false are always written with brackets
- return s;
- }
- bool looksLikeOperator = true;
- bool looksLikeSimpleId = true;
- bool useBrackets = false;
- foreach (char ch in s) {
- switch (ch) {
- case '=':
- case '<':
- case '>':
- case '+':
- case '-':
- case '*':
- case '/':
- case '%':
- case ':':
- // looks like operator, not simple id
- looksLikeSimpleId = false;
- break;
- default:
- if (Char.IsLetterOrDigit(ch)) {
- // looks like simple id, not operator
- looksLikeOperator = false;
- } else {
- // looks like neither operator nor simple id
- looksLikeOperator = false;
- looksLikeSimpleId = false;
- }
- break;
- }
- if (!looksLikeOperator && !looksLikeSimpleId) {
- useBrackets = true;
- break;
- }
- }
- if (useBrackets) {
- return "|" + s + "|";
- } else {
- return s;
- }
- }
-
- private static void TypeToStringHelper(Type t, StringBuilder sb) {
- Contract.Requires(t != null);
-
- TypeSynonymAnnotation syn = t as TypeSynonymAnnotation;
- if (syn != null) {
- TypeToStringHelper(syn.ExpandedType, sb);
- } else {
- if (t.IsMap) {
- MapType m = t.AsMap;
- sb.Append('[');
- for (int i = 0; i < m.MapArity; ++i) {
- if (i != 0)
- sb.Append(',');
- TypeToStringHelper(m.Arguments[i], sb);
- }
- sb.Append(']');
- TypeToStringHelper(m.Result, sb);
- } else if (t.IsBool || t.IsInt || t.IsBv) {
- sb.Append(TypeToString(t));
- } else {
- System.IO.StringWriter buffer = new System.IO.StringWriter();
- using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
- t.Emit(stream);
- }
- sb.Append(buffer.ToString());
- }
- }
-
- }
-
-
- public static string TypeToString(Type t) {
- Contract.Requires(t != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- if (t.IsBool)
- return "$bool";
- else if (t.IsInt)
- return "$int";
- else if (t.IsBv)
- return "$bv" + t.BvBits;
- else {
- StringBuilder sb = new StringBuilder();
- TypeToStringHelper(t, sb);
- return sb.ToString();
- }
- }
-
- public static string BvConcatOpName(VCExprNAry node) {
- Contract.Requires(node != null);
- Contract.Requires((node.Op is VCExprBvConcatOp));
- Contract.Ensures(Contract.Result<string>() != null);
- int bits1 = node[0].Type.BvBits;
- int bits2 = node[1].Type.BvBits;
- return "$bv" + (bits1 + bits2) + "_concat[" + bits1 + "." + bits2 + "]";
- }
-
- public static string BvExtractOpName(VCExprNAry node) {
- Contract.Requires(node != null);
- Contract.Requires(node.Op is VCExprBvExtractOp);
- Contract.Ensures(Contract.Result<string>() != null);
- VCExprBvExtractOp op = (VCExprBvExtractOp)node.Op;
- return "$bv" + node.Type.BvBits + "_extract" + op.Total + "[" + op.Start + ":" + op.End + "]";
- }
-
- public static string StoreOpName(VCExprNAry node) {
- Contract.Requires(node != null);
- Contract.Requires((node.Op is VCExprSelectOp) || (node.Op is VCExprStoreOp));
- Contract.Ensures(Contract.Result<string>() != null);
- return "Store_" + TypeToString(node[0].Type);
- }
-
- public static string SelectOpName(VCExprNAry node) {
- Contract.Requires(node != null);
- Contract.Requires((node.Op is VCExprSelectOp) || (node.Op is VCExprStoreOp));
- Contract.Ensures(Contract.Result<string>() != null);
- return "Select_" + TypeToString(node[0].Type);
- }
-
- internal void WriteId(string s) {
- Contract.Requires(s != null);
- wr.Write(MakeIdPrintable(s));
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- /// <summary>
- /// The name for logical conjunction in Simplify
- /// </summary>
- internal const string andName = "AND"; // conjunction
- internal const string orName = "OR"; // disjunction
- internal const string notName = "NOT"; // negation
- internal const string impliesName = "IMPLIES"; // implication
- internal const string iffName = "IFF"; // logical equivalence
- internal const string eqName = "EQ"; // equality
- internal const string neqName = "NEQ"; // inequality
- internal const string lessName = "<";
- internal const string greaterName = ">";
- internal const string atmostName = "<=";
- internal const string atleastName = ">=";
- internal const string TRUEName = "TRUE"; // nullary predicate that is always true
- internal const string FALSEName = "FALSE"; // nullary predicate that is always false
- internal const string subtypeName = "<:";
- internal const string subtypeArgsName = "<::";
-
- internal const string distinctName = "DISTINCT";
- /// <summary>
- /// name of the main inclusion relation
- /// </summary>
- internal const string boolTrueName = "|@true|";
- internal const string boolFalseName = "|@false|";
- internal const string boolAndName = "boolAnd";
- internal const string boolOrName = "boolOr";
- internal const string boolNotName = "boolNot";
- internal const string termEqName = "anyEqual";
- internal const string termNeqName = "anyNeq";
- internal const string termLessName = "intLess";
- internal const string termGreaterName = "intGreater";
- internal const string termAtmostName = "intAtMost";
- internal const string termAtleastName = "intAtLeast";
- internal const string intAddName = "+";
- internal const string intAddNameReflect = "Reflect$Add";
- internal const string intSubName = "-";
- internal const string intMulName = "*";
- internal const string intDivName = "/";
- internal const string intModName = "%";
- internal const string realAddName = "realAdd";
- internal const string realSubName = "realSub";
- internal const string realMulName = "realMul";
- internal const string realDivName = "realDiv";
- internal const string floatAddName = "floatAdd";
- internal const string floatSubName = "floatSub";
- internal const string floatMulName = "floatMul";
- internal const string floatDivName = "floatDiv";
- internal const string floatRemName = "floatRem";
- internal const string floatMinName = "floatMin";
- internal const string floatMaxName = "floatMax";
- internal const string floatLeqName = "floatLeq";
- internal const string floatLtName = "floatLt";
- internal const string floatGeqName = "floatGeq";
- internal const string floatGtName = "floatGt";
- internal const string floatEqName = "floatEq";
- internal const string realPowName = "realPow";
- internal const string toIntName = "toIntCoercion";
- internal const string toRealName = "toRealCoercion";
- internal const string toFloatName = "toFloatCoercion";
-
- internal void AssertAsTerm(string x, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(x != null);
- if (!options.AsTerm)
- System.Diagnostics.Debug.Fail("One should never write " + x + " as a formula!");
- }
-
- internal void AssertAsFormula(string x, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(x != null);
- if (options.AsTerm)
- System.Diagnostics.Debug.Fail("One should never write " + x + " as a term!");
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprLiteral node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- if (options.AsTerm) {
-
- if (node == VCExpressionGenerator.True)
- wr.Write(options.UseTypes ? TRUEName : boolTrueName);
- else if (node == VCExpressionGenerator.False)
- wr.Write(options.UseTypes ? FALSEName : boolFalseName);
- else if (node is VCExprIntLit) {
- wr.Write(((VCExprIntLit)node).Val);
- } else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- } else {
-
- if (node == VCExpressionGenerator.True)
- wr.Write(TRUEName);
- else if (node == VCExpressionGenerator.False)
- wr.Write(FALSEName);
- else if (node is VCExprIntLit) {
- System.Diagnostics.Debug.Fail("One should never write IntLit as a predicate!");
- } else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- }
-
- return true;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- VCExprOp op = node.Op;
- Contract.Assert(op != null);
-
- if (!options.AsTerm &&
- (op.Equals(VCExpressionGenerator.AndOp) ||
- op.Equals(VCExpressionGenerator.OrOp))) {
- // handle these operators without recursion
-
- wr.Write("({0}",
- op.Equals(VCExpressionGenerator.AndOp) ? andName : orName);
- IEnumerator enumerator = new VCExprNAryUniformOpEnumerator(node);
- Contract.Assert(enumerator != null);
- while (enumerator.MoveNext()) {
- VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
- if (naryExpr == null || !naryExpr.Op.Equals(op)) {
- wr.Write(" ");
- Linearise(cce.NonNull((VCExpr)enumerator.Current), options);
- }
- }
-
- wr.Write(")");
-
- return true;
- }
-
- return node.Accept<bool, LineariserOptions>(OpLineariser, options);
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprVar node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- string printedName = Namer.GetName(node, node.Name);
- Contract.Assert(printedName != null);
-
- if (options.AsTerm ||
- // variables for formulas bound in a let-binding are never
- // written as an equation
- options.LetVariables.Contains(node) ||
- // if variables are properly typed, they cannot be written as
- // equation either
- options.UseTypes) {
- WriteId(printedName);
- } else {
- wr.Write("({0} ", eqName);
- WriteId(printedName);
- wr.Write(" {0})", boolTrueName);
- }
-
- return true;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprQuantifier node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- AssertAsFormula(node.Quan.ToString(), options);
- Contract.Assert(node.TypeParameters.Count == 0);
-
- Namer.PushScope();
- try {
-
- string kind = node.Quan == Quantifier.ALL ? "FORALL" : "EXISTS";
- wr.Write("({0} (", kind);
-
- for (int i = 0; i < node.BoundVars.Count; i++) {
- VCExprVar var = node.BoundVars[i];
- Contract.Assert(var != null);
- string printedName = Namer.GetLocalName(var, var.Name);
- Contract.Assert(printedName != null);
- if (i != 0)
- wr.Write(" ");
- WriteId(printedName);
- if (options.UseTypes)
- wr.Write(" :TYPE {0}", TypeToString(var.Type));
- }
- wr.Write(") ");
-
- WriteTriggers(node.Triggers, options);
-
- if (options.QuantifierIds) {
- // only needed for Z3
- VCQuantifierInfos infos = node.Infos;
- Contract.Assert(infos != null);
- if (infos.qid != null) {
- wr.Write("(QID ");
- wr.Write(infos.qid);
- wr.Write(") ");
- }
- if (0 <= infos.uniqueId) {
- wr.Write("(SKOLEMID ");
- wr.Write(infos.uniqueId);
- wr.Write(") ");
- }
- }
-
- if (options.UseWeights) {
- int weight = QKeyValue.FindIntAttribute(node.Infos.attributes, "weight", 1);
- if (weight != 1) {
- wr.Write("(WEIGHT ");
- wr.Write(weight);
- wr.Write(") ");
- }
- }
-
- Linearise(node.Body, options);
- wr.Write(")");
-
- return true;
-
- } finally {
- Namer.PopScope();
- }
- }
-
- private void WriteTriggers(List<VCTrigger/*!*/>/*!*/ triggers, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(cce.NonNullElements(triggers));
- // first, count how many neg/pos triggers there are
- int negTriggers = 0;
- int posTriggers = 0;
- foreach (VCTrigger vcTrig in triggers) {
- Contract.Assert(vcTrig != null);
- if (vcTrig.Pos) {
- posTriggers++;
- } else {
- negTriggers++;
- }
- }
-
- if (posTriggers > 0) {
- wr.Write("(PATS");
- foreach (VCTrigger vcTrig in triggers) {
- Contract.Assert(vcTrig != null);
- if (vcTrig.Pos) {
- if (vcTrig.Exprs.Count > 1) {
- wr.Write(" (MPAT");
- }
- foreach (VCExpr e in vcTrig.Exprs) {
- Contract.Assert(e != null);
- wr.Write(" ");
- LineariseAsTerm(e, options);
- }
- if (vcTrig.Exprs.Count > 1) {
- wr.Write(")");
- }
- }
- }
- wr.Write(") ");
- } else if (negTriggers > 0) {
- // if also positive triggers are given, the SMT solver (at least Z3)
- // will ignore the negative patterns and output a warning. Therefore
- // we never specify both negative and positive triggers
- wr.Write("(NOPATS");
- foreach (VCTrigger vcTrig in triggers) {
- Contract.Assert(vcTrig != null);
- if (!vcTrig.Pos) {
- wr.Write(" ");
- Contract.Assert(vcTrig.Exprs.Count == 1);
- LineariseAsTerm(vcTrig.Exprs[0], options);
- }
- }
- wr.Write(") ");
- }
-
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- public bool Visit(VCExprLet node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- Namer.PushScope();
- try {
-
- wr.Write("(LET (");
-
- LineariserOptions optionsWithVars = options.AddLetVariables(node.BoundVars);
- Contract.Assert(optionsWithVars != null);
-
- string s = "(";
- foreach (VCExprLetBinding b in node) {
- Contract.Assert(b != null);
- wr.Write(s);
- string printedName = Namer.GetLocalName(b.V, b.V.Name);
-
- bool formula = b.V.Type.IsBool;
- if (formula)
- wr.Write("FORMULA ");
- else
- wr.Write("TERM ");
- WriteId(printedName);
- wr.Write(" ");
- Linearise(b.E, optionsWithVars.SetAsTerm(!formula));
- wr.Write(")");
- s = " (";
- }
- wr.Write(") ");
- Linearise(node.Body, optionsWithVars);
- wr.Write(")");
-
- return true;
-
- } finally {
- Namer.PopScope();
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////////
-
- // Lineariser for operator terms. The result (bool) is currently not used for anything
- internal class SimplifyLikeOpLineariser : IVCExprOpVisitor<bool, LineariserOptions/*!*/> {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(ExprLineariser != null);
- Contract.Invariant(wr != null);
- }
-
- private readonly SimplifyLikeExprLineariser/*!*/ ExprLineariser;
- private readonly TextWriter/*!*/ wr;
-
- public SimplifyLikeOpLineariser(SimplifyLikeExprLineariser ExprLineariser, TextWriter wr) {
- Contract.Requires(wr != null);
- Contract.Requires(ExprLineariser != null);
- this.ExprLineariser = ExprLineariser;
- this.wr = wr;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- private void WriteApplication(string op, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options, bool argsAsTerms) {
- Contract.Requires(options != null);
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(args));
- WriteApplication(op, op, args, options, argsAsTerms);
- }
-
- private void WriteApplication(string op, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(args));
- WriteApplication(op, op, args, options, options.AsTerm);
- }
-
- private void WriteTermApplication(string op, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(args));
- ExprLineariser.AssertAsTerm(op, options);
- WriteApplication(op, op, args, options, options.AsTerm);
- }
-
- private void WriteApplication(string termOp, string predOp, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(predOp != null);
- Contract.Requires(termOp != null);
- Contract.Requires(cce.NonNullElements(args));
- WriteApplication(termOp, predOp, args, options, options.AsTerm);
- }
-
- private void WriteApplication(string termOp, string predOp, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options, bool argsAsTerms) {
- Contract.Requires(options != null);
- Contract.Requires(predOp != null);
- Contract.Requires(termOp != null);
- Contract.Requires(cce.NonNullElements(args));// change the AsTerm option for the arguments?
- wr.Write("({0}", options.AsTerm ? termOp : predOp);
-
- LineariserOptions newOptions = options.SetAsTerm(argsAsTerms);
-
- foreach (VCExpr e in args) {
- Contract.Assert(e != null);
- wr.Write(" ");
- ExprLineariser.Linearise(e, newOptions);
- }
-
- wr.Write(")");
- }
-
- // write an application that can only be a term.
- // if the expression is supposed to be printed as a formula,
- // it is turned into an equation (EQ (f args) |@true|)
- private void WriteApplicationTermOnly(string termOp, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
- Contract.Requires(options != null);
- Contract.Requires(termOp != null);
- Contract.Requires(cce.NonNullElements(args));
- if (!options.AsTerm)
- // Write: (EQ (f args) |@true|)
- // where "args" are written as terms
- wr.Write("({0} ", eqName);
-
- WriteApplication(termOp, args, options, true);
-
- if (!options.AsTerm)
- wr.Write(" {0})", boolTrueName);
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
-
- public bool VisitNotOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(boolNotName, notName, node, options); // arguments can be both terms and formulas
- return true;
- }
-
- public bool VisitEqOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- if (options.AsTerm) {
- // use equality on terms, also if the arguments have type bool
- WriteApplication(termEqName, node, options);
- } else {
- if (node[0].Type.IsBool) {
- Contract.Assert(node[1].Type.IsBool);
- // use equivalence
- WriteApplication(iffName, node, options);
- } else {
- Contract.Assert(!node[1].Type.IsBool);
- // use equality and write the arguments as terms
- WriteApplication(eqName, node, options, true);
- }
- }
-
- return true;
- }
-
- public bool VisitNeqOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- if (options.AsTerm) {
- // use equality on terms, also if the arguments have type bool
- WriteApplication(termNeqName, node, options);
- } else {
- if (node[0].Type.IsBool) {
- Contract.Assert(node[1].Type.IsBool);
- // use equivalence and negate the whole thing
- wr.Write("({0} ", notName);
- WriteApplication(iffName, node, options);
- wr.Write(")");
- } else {
- // use equality and write the arguments as terms
- WriteApplication(neqName, node, options, true);
- }
- }
-
- return true;
- }
-
- public bool VisitAndOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- Contract.Assert(options.AsTerm);
- WriteApplication(boolAndName, andName, node, options); // arguments can be both terms and formulas
- return true;
- }
-
- public bool VisitOrOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- Contract.Assert(options.AsTerm);
- WriteApplication(boolOrName, orName, node, options); // arguments can be both terms and formulas
- return true;
- }
-
- public bool VisitImpliesOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- if (options.AsTerm) {
- wr.Write("({0} ({1} ", boolOrName, boolNotName);
- ExprLineariser.Linearise(node[0], options);
- wr.Write(") ");
- ExprLineariser.Linearise(node[1], options);
- wr.Write(")");
- } else if (options.InverseImplies) {
- wr.Write("({0} ", orName);
- ExprLineariser.Linearise(node[1], options);
- wr.Write(" ({0} ", notName);
- ExprLineariser.Linearise(node[0], options);
- wr.Write("))");
- } else {
- WriteApplication(impliesName, node, options);
- }
- return true;
- }
-
- public bool VisitDistinctOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- ExprLineariser.AssertAsFormula(distinctName, options);
-
- if (node.Length < 2) {
- ExprLineariser.Linearise(VCExpressionGenerator.True, options);
- } else {
- wr.Write("({0}", distinctName);
- foreach (VCExpr e in node) {
- Contract.Assert(e != null);
- wr.Write(" ");
- ExprLineariser.LineariseAsTerm(e, options);
- }
- wr.Write(")");
- }
-
- return true;
- }
-
- public bool VisitLabelOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- VCExprLabelOp op = (VCExprLabelOp)node.Op;
- Contract.Assert(op != null);
- wr.Write(String.Format("({0} |{1}| ", op.pos ? "LBLPOS" : "LBLNEG", op.label));
- ExprLineariser.Linearise(node[0], options);
- wr.Write(")");
- return true;
- }
-
- public bool VisitSelectOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- wr.Write("(" + SelectOpName(node));
- foreach (VCExpr/*!*/ e in node) {
- Contract.Assert(e != null);
- wr.Write(" ");
- ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
- }
- wr.Write(")");
- return true;
- }
-
- public bool VisitStoreOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- wr.Write("(" + StoreOpName(node));
- foreach (VCExpr e in node) {
- Contract.Assert(e != null);
- wr.Write(" ");
- ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
- }
- wr.Write(")");
- return true;
- }
-
- public bool VisitFloatAddOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatAddName, node, options);
- return true;
- }
-
- public bool VisitFloatSubOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatSubName, node, options);
- return true;
- }
-
- public bool VisitFloatMulOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatMulName, node, options);
- return true;
- }
-
- public bool VisitFloatDivOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatDivName, node, options);
- return true;
- }
-
- public bool VisitFloatRemOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatRemName, node, options);
- return true;
- }
-
- public bool VisitFloatMinOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatMinName, node, options);
- return true;
- }
-
- public bool VisitFloatMaxOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatMaxName, node, options);
- return true;
- }
-
- public bool VisitFloatLeqOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatLeqName, node, options);
- return true;
- }
-
- public bool VisitFloatLtOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatLtName, node, options);
- return true;
- }
-
- public bool VisitFloatGeqOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatGeqName, node, options);
- return true;
- }
-
- public bool VisitFloatGtOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatGtName, node, options);
- return true;
- }
-
- public bool VisitFloatEqOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(floatEqName, node, options);
- return true;
- }
-
- public bool VisitBvOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication("$make_bv" + node.Type.BvBits, node, options);
- return true;
- }
-
- public bool VisitBvExtractOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(BvExtractOpName(node), node, options);
- return true;
- }
-
- public bool VisitBvConcatOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(BvConcatOpName(node), node, options);
- return true;
- }
-
- public bool VisitIfThenElseOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
-
- wr.Write("(ITE ");
- ExprLineariser.Linearise(node[0], options.SetAsTerm(false));
- wr.Write(" ");
- ExprLineariser.Linearise(node[1], options);
- wr.Write(" ");
- ExprLineariser.Linearise(node[2], options);
- wr.Write(")");
-
- return true;
- }
-
- public bool VisitCustomOp(VCExprNAry/*!*/ node, LineariserOptions/*!*/ options) {
- //Contract.Requires(node != null);
- //Contract.Requires(options != null);
- VCExprCustomOp op = (VCExprCustomOp)node.Op;
- wr.Write("({0}", op.Name);
- foreach (VCExpr arg in node) {
- wr.Write(" ");
- ExprLineariser.Linearise(arg, options);
- }
- wr.Write(")");
- return true;
- }
-
- public bool VisitAddOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- if (node.Type.IsInt) {
- if (CommandLineOptions.Clo.ReflectAdd) {
- WriteTermApplication(intAddNameReflect, node, options);
- }
- else {
- WriteTermApplication(intAddName, node, options);
- }
- }
- else {
- WriteTermApplication(realAddName, node, options);
- }
- return true;
- }
-
- public bool VisitSubOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- if (node.Type.IsInt) {
- WriteTermApplication(intSubName, node, options);
- }
- else if (node.Type.IsReal) {
- WriteTermApplication(realSubName, node, options);
- }
- else {
- WriteTermApplication(floatSubName, node, options);
- }
- return true;
- }
-
- public bool VisitMulOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- if (node.Type.IsInt) {
- WriteTermApplication(intMulName, node, options);
- }
- else if (node.Type.IsReal) {
- WriteTermApplication(realMulName, node, options);
- }
- else {
- WriteTermApplication(floatMulName, node, options);
- }
- return true;
- }
-
- public bool VisitDivOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(intDivName, node, options);
- return true;
- }
-
- public bool VisitModOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(intModName, node, options);
- return true;
- }
-
- public bool VisitRealDivOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(realDivName, node, options);
- return true;
- }
-
- public bool VisitPowOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteTermApplication(realPowName, node, options);
- return true;
- }
-
- public bool VisitLtOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(termLessName, lessName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitLeOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(termAtmostName, atmostName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitGtOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(termGreaterName, greaterName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitGeOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(termAtleastName, atleastName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitSubtypeOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(subtypeName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitSubtype3Op(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(subtypeArgsName, node, options, true); // arguments are always terms
- return true;
- }
-
- public bool VisitToIntOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(toIntName, node, options);
- return true;
- }
-
- public bool VisitToRealOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(toRealName, node, options);
- return true;
- }
-
- public bool VisitToFloatOp(VCExprNAry node, LineariserOptions options)
- {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- WriteApplication(toFloatName, node, options);
- return true;
- }
-
- public bool VisitBoogieFunctionOp(VCExprNAry node, LineariserOptions options) {
- //Contract.Requires(options != null);
- //Contract.Requires(node != null);
- VCExprBoogieFunctionOp op = (VCExprBoogieFunctionOp)node.Op;
- Contract.Assert(op != null);
- string funcName = op.Func.Name;
- Contract.Assert(funcName != null);
- string bvzName = op.Func.FindStringAttribute("external");
- string printedName = ExprLineariser.Namer.GetName(op.Func, funcName);
- Contract.Assert(printedName != null);
- if (bvzName != null)
- printedName = bvzName;
-
- if (options.UseTypes) {
- // we use term notation for arguments whose type is not bool, and
- // formula notation for boolean arguments
-
- wr.Write("(");
- ExprLineariser.WriteId(printedName);
-
- foreach (VCExpr e in node) {
- Contract.Assert(e != null);
- wr.Write(" ");
- ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
- }
-
- wr.Write(")");
- } else {
- // arguments are always terms
- WriteApplicationTermOnly(SimplifyLikeExprLineariser.MakeIdPrintable(printedName),
- node, options);
- }
- return true;
- }
-
- }
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// a naive method to turn VCExprs into strings that can be fed into Simplify
+
+namespace Microsoft.Boogie.VCExprAST {
+ [ContractClassFor(typeof(LineariserOptions))]
+ public abstract class LinOptContracts : LineariserOptions {
+ public LinOptContracts()
+ : base(true) {
+ }
+ public override LineariserOptions SetAsTerm(bool newVal) {
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+ throw new NotImplementedException();
+ }
+
+ }
+
+ // Options for the linearisation. Here one can choose, for instance,
+ // whether Simplify or Z3 output is to be produced
+ [ContractClass(typeof(LinOptContracts))]
+ public abstract class LineariserOptions {
+
+ public readonly bool AsTerm;
+ public abstract LineariserOptions/*!*/ SetAsTerm(bool newVal);
+
+ public abstract bool QuantifierIds {
+ get;
+ }
+
+ public virtual bool UseWeights {
+ get {
+ return false;
+ }
+ }
+
+ public virtual bool InverseImplies {
+ get {
+ return false;
+ }
+ }
+
+ // whether to include type specifications in quantifiers
+ public abstract bool UseTypes {
+ get;
+ }
+
+ // variables representing formulas in let-bindings have to be
+ // printed in a different way than other variables
+ public virtual List<VCExprVar/*!*/>/*!*/ LetVariables {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+ return EmptyList;
+ }
+ }
+
+ public virtual LineariserOptions AddLetVariable(VCExprVar furtherVar) {
+ Contract.Requires(furtherVar != null);
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+ return this;
+ }
+
+ public virtual LineariserOptions AddLetVariables(List<VCExprVar/*!*/>/*!*/ furtherVars) {
+ Contract.Requires(cce.NonNullElements(furtherVars));
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+ return this;
+ }
+
+ private static readonly List<VCExprVar/*!*/>/*!*/ EmptyList = new List<VCExprVar/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvarinat() {
+ Contract.Invariant(EmptyList != null);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ protected LineariserOptions(bool asTerm) {
+ this.AsTerm = asTerm;
+ }
+
+ public static readonly LineariserOptions SimplifyDefault = new SimplifyOptions(false);
+ internal static readonly LineariserOptions SimplifyDefaultTerm = new SimplifyOptions(true);
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ private class SimplifyOptions : LineariserOptions {
+ internal SimplifyOptions(bool asTerm)
+ : base(asTerm) {
+
+ }
+ public override bool QuantifierIds {
+ get {
+ return false;
+ }
+ }
+ public override bool UseTypes {
+ get {
+ return false;
+ }
+ }
+ public override LineariserOptions SetAsTerm(bool newVal) {
+ Contract.Ensures(Contract.Result<LineariserOptions>() != null);
+ if (newVal)
+ return SimplifyDefaultTerm;
+ else
+ return SimplifyDefault;
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ // Lineariser for expressions. The result (bool) is currently not used for anything
+ public class SimplifyLikeExprLineariser : IVCExprVisitor<bool, LineariserOptions/*!*/> {
+
+ public static string ToSimplifyString(VCExpr e, UniqueNamer namer) {
+ Contract.Requires(namer != null);
+ Contract.Requires(e != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ return ToString(e, LineariserOptions.SimplifyDefault, namer);
+ }
+
+ public static string ToString(VCExpr/*!*/ e, LineariserOptions/*!*/ options, UniqueNamer/*!*/ namer) {
+ Contract.Requires(e != null);
+ Contract.Requires(options != null);
+ Contract.Requires(namer != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ StringWriter sw = new StringWriter();
+ SimplifyLikeExprLineariser lin = new SimplifyLikeExprLineariser(sw, namer);
+ lin.Linearise(e, options);
+ return sw.ToString();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(wr != null);
+ Contract.Invariant(Namer != null);
+ }
+
+ private readonly TextWriter/*!*/ wr;
+ private SimplifyLikeOpLineariser OpLinObject = null;
+ private IVCExprOpVisitor<bool, LineariserOptions/*!*/>/*!*/ OpLineariser {
+ get {
+ Contract.Ensures(Contract.Result<IVCExprOpVisitor<bool, LineariserOptions>>() != null);
+ if (OpLinObject == null)
+ OpLinObject = new SimplifyLikeOpLineariser(this, wr);
+ return OpLinObject;
+ }
+ }
+
+ internal readonly UniqueNamer Namer;
+
+ public SimplifyLikeExprLineariser(TextWriter wr, UniqueNamer namer) {
+ Contract.Requires(namer != null);
+ Contract.Requires(wr != null);
+ this.wr = wr;
+ this.Namer = namer;
+ }
+
+ public void Linearise(VCExpr expr, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(expr != null);
+ expr.Accept<bool, LineariserOptions>(this, options);
+ }
+
+ public void LineariseAsTerm(VCExpr expr, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(expr != null);
+ Linearise(expr, options.SetAsTerm(true));
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public static string MakeIdPrintable(string s) {
+ Contract.Requires(s != null);
+ Contract.Requires(s != "");
+ Contract.Ensures(Contract.Result<string>() != null);
+ // make sure that no keywords are used as identifiers
+ switch (s) {
+ case andName:
+ case orName:
+ case notName:
+ case impliesName:
+ case iffName:
+ case eqName:
+ case neqName:
+ case distinctName:
+ case TRUEName:
+ case FALSEName:
+ s = "nonkeyword_" + s;
+ break;
+ }
+
+ if (CommandLineOptions.Clo.BracketIdsInVC == 0) {
+ // In this form, we go with any identifier, so we don't ever bother about brackets.
+ // Except: @true and @false are always written with brackets
+ return s;
+ }
+ bool looksLikeOperator = true;
+ bool looksLikeSimpleId = true;
+ bool useBrackets = false;
+ foreach (char ch in s) {
+ switch (ch) {
+ case '=':
+ case '<':
+ case '>':
+ case '+':
+ case '-':
+ case '*':
+ case '/':
+ case '%':
+ case ':':
+ // looks like operator, not simple id
+ looksLikeSimpleId = false;
+ break;
+ default:
+ if (Char.IsLetterOrDigit(ch)) {
+ // looks like simple id, not operator
+ looksLikeOperator = false;
+ } else {
+ // looks like neither operator nor simple id
+ looksLikeOperator = false;
+ looksLikeSimpleId = false;
+ }
+ break;
+ }
+ if (!looksLikeOperator && !looksLikeSimpleId) {
+ useBrackets = true;
+ break;
+ }
+ }
+ if (useBrackets) {
+ return "|" + s + "|";
+ } else {
+ return s;
+ }
+ }
+
+ private static void TypeToStringHelper(Type t, StringBuilder sb) {
+ Contract.Requires(t != null);
+
+ TypeSynonymAnnotation syn = t as TypeSynonymAnnotation;
+ if (syn != null) {
+ TypeToStringHelper(syn.ExpandedType, sb);
+ } else {
+ if (t.IsMap) {
+ MapType m = t.AsMap;
+ sb.Append('[');
+ for (int i = 0; i < m.MapArity; ++i) {
+ if (i != 0)
+ sb.Append(',');
+ TypeToStringHelper(m.Arguments[i], sb);
+ }
+ sb.Append(']');
+ TypeToStringHelper(m.Result, sb);
+ } else if (t.IsBool || t.IsInt || t.IsBv) {
+ sb.Append(TypeToString(t));
+ } else {
+ System.IO.StringWriter buffer = new System.IO.StringWriter();
+ using (TokenTextWriter stream = new TokenTextWriter("<buffer>", buffer, /*setTokens=*/ false, /*pretty=*/ false)) {
+ t.Emit(stream);
+ }
+ sb.Append(buffer.ToString());
+ }
+ }
+
+ }
+
+
+ public static string TypeToString(Type t) {
+ Contract.Requires(t != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ if (t.IsBool)
+ return "$bool";
+ else if (t.IsInt)
+ return "$int";
+ else if (t.IsBv)
+ return "$bv" + t.BvBits;
+ else {
+ StringBuilder sb = new StringBuilder();
+ TypeToStringHelper(t, sb);
+ return sb.ToString();
+ }
+ }
+
+ public static string BvConcatOpName(VCExprNAry node) {
+ Contract.Requires(node != null);
+ Contract.Requires((node.Op is VCExprBvConcatOp));
+ Contract.Ensures(Contract.Result<string>() != null);
+ int bits1 = node[0].Type.BvBits;
+ int bits2 = node[1].Type.BvBits;
+ return "$bv" + (bits1 + bits2) + "_concat[" + bits1 + "." + bits2 + "]";
+ }
+
+ public static string BvExtractOpName(VCExprNAry node) {
+ Contract.Requires(node != null);
+ Contract.Requires(node.Op is VCExprBvExtractOp);
+ Contract.Ensures(Contract.Result<string>() != null);
+ VCExprBvExtractOp op = (VCExprBvExtractOp)node.Op;
+ return "$bv" + node.Type.BvBits + "_extract" + op.Total + "[" + op.Start + ":" + op.End + "]";
+ }
+
+ public static string StoreOpName(VCExprNAry node) {
+ Contract.Requires(node != null);
+ Contract.Requires((node.Op is VCExprSelectOp) || (node.Op is VCExprStoreOp));
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "Store_" + TypeToString(node[0].Type);
+ }
+
+ public static string SelectOpName(VCExprNAry node) {
+ Contract.Requires(node != null);
+ Contract.Requires((node.Op is VCExprSelectOp) || (node.Op is VCExprStoreOp));
+ Contract.Ensures(Contract.Result<string>() != null);
+ return "Select_" + TypeToString(node[0].Type);
+ }
+
+ internal void WriteId(string s) {
+ Contract.Requires(s != null);
+ wr.Write(MakeIdPrintable(s));
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ /// <summary>
+ /// The name for logical conjunction in Simplify
+ /// </summary>
+ internal const string andName = "AND"; // conjunction
+ internal const string orName = "OR"; // disjunction
+ internal const string notName = "NOT"; // negation
+ internal const string impliesName = "IMPLIES"; // implication
+ internal const string iffName = "IFF"; // logical equivalence
+ internal const string eqName = "EQ"; // equality
+ internal const string neqName = "NEQ"; // inequality
+ internal const string lessName = "<";
+ internal const string greaterName = ">";
+ internal const string atmostName = "<=";
+ internal const string atleastName = ">=";
+ internal const string TRUEName = "TRUE"; // nullary predicate that is always true
+ internal const string FALSEName = "FALSE"; // nullary predicate that is always false
+ internal const string subtypeName = "<:";
+ internal const string subtypeArgsName = "<::";
+
+ internal const string distinctName = "DISTINCT";
+ /// <summary>
+ /// name of the main inclusion relation
+ /// </summary>
+ internal const string boolTrueName = "|@true|";
+ internal const string boolFalseName = "|@false|";
+ internal const string boolAndName = "boolAnd";
+ internal const string boolOrName = "boolOr";
+ internal const string boolNotName = "boolNot";
+ internal const string termEqName = "anyEqual";
+ internal const string termNeqName = "anyNeq";
+ internal const string termLessName = "intLess";
+ internal const string termGreaterName = "intGreater";
+ internal const string termAtmostName = "intAtMost";
+ internal const string termAtleastName = "intAtLeast";
+ internal const string intAddName = "+";
+ internal const string intAddNameReflect = "Reflect$Add";
+ internal const string intSubName = "-";
+ internal const string intMulName = "*";
+ internal const string intDivName = "/";
+ internal const string intModName = "%";
+ internal const string realAddName = "realAdd";
+ internal const string realSubName = "realSub";
+ internal const string realMulName = "realMul";
+ internal const string realDivName = "realDiv";
+ internal const string floatAddName = "floatAdd";
+ internal const string floatSubName = "floatSub";
+ internal const string floatMulName = "floatMul";
+ internal const string floatDivName = "floatDiv";
+ internal const string floatRemName = "floatRem";
+ internal const string floatMinName = "floatMin";
+ internal const string floatMaxName = "floatMax";
+ internal const string floatLeqName = "floatLeq";
+ internal const string floatLtName = "floatLt";
+ internal const string floatGeqName = "floatGeq";
+ internal const string floatGtName = "floatGt";
+ internal const string floatEqName = "floatEq";
+ internal const string realPowName = "realPow";
+ internal const string toIntName = "toIntCoercion";
+ internal const string toRealName = "toRealCoercion";
+ internal const string toFloatName = "toFloatCoercion";
+
+ internal void AssertAsTerm(string x, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(x != null);
+ if (!options.AsTerm)
+ System.Diagnostics.Debug.Fail("One should never write " + x + " as a formula!");
+ }
+
+ internal void AssertAsFormula(string x, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(x != null);
+ if (options.AsTerm)
+ System.Diagnostics.Debug.Fail("One should never write " + x + " as a term!");
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprLiteral node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ if (options.AsTerm) {
+
+ if (node == VCExpressionGenerator.True)
+ wr.Write(options.UseTypes ? TRUEName : boolTrueName);
+ else if (node == VCExpressionGenerator.False)
+ wr.Write(options.UseTypes ? FALSEName : boolFalseName);
+ else if (node is VCExprIntLit) {
+ wr.Write(((VCExprIntLit)node).Val);
+ } else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ } else {
+
+ if (node == VCExpressionGenerator.True)
+ wr.Write(TRUEName);
+ else if (node == VCExpressionGenerator.False)
+ wr.Write(FALSEName);
+ else if (node is VCExprIntLit) {
+ System.Diagnostics.Debug.Fail("One should never write IntLit as a predicate!");
+ } else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ }
+
+ return true;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ VCExprOp op = node.Op;
+ Contract.Assert(op != null);
+
+ if (!options.AsTerm &&
+ (op.Equals(VCExpressionGenerator.AndOp) ||
+ op.Equals(VCExpressionGenerator.OrOp))) {
+ // handle these operators without recursion
+
+ wr.Write("({0}",
+ op.Equals(VCExpressionGenerator.AndOp) ? andName : orName);
+ IEnumerator enumerator = new VCExprNAryUniformOpEnumerator(node);
+ Contract.Assert(enumerator != null);
+ while (enumerator.MoveNext()) {
+ VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
+ if (naryExpr == null || !naryExpr.Op.Equals(op)) {
+ wr.Write(" ");
+ Linearise(cce.NonNull((VCExpr)enumerator.Current), options);
+ }
+ }
+
+ wr.Write(")");
+
+ return true;
+ }
+
+ return node.Accept<bool, LineariserOptions>(OpLineariser, options);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprVar node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ string printedName = Namer.GetName(node, node.Name);
+ Contract.Assert(printedName != null);
+
+ if (options.AsTerm ||
+ // variables for formulas bound in a let-binding are never
+ // written as an equation
+ options.LetVariables.Contains(node) ||
+ // if variables are properly typed, they cannot be written as
+ // equation either
+ options.UseTypes) {
+ WriteId(printedName);
+ } else {
+ wr.Write("({0} ", eqName);
+ WriteId(printedName);
+ wr.Write(" {0})", boolTrueName);
+ }
+
+ return true;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprQuantifier node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ AssertAsFormula(node.Quan.ToString(), options);
+ Contract.Assert(node.TypeParameters.Count == 0);
+
+ Namer.PushScope();
+ try {
+
+ string kind = node.Quan == Quantifier.ALL ? "FORALL" : "EXISTS";
+ wr.Write("({0} (", kind);
+
+ for (int i = 0; i < node.BoundVars.Count; i++) {
+ VCExprVar var = node.BoundVars[i];
+ Contract.Assert(var != null);
+ string printedName = Namer.GetLocalName(var, var.Name);
+ Contract.Assert(printedName != null);
+ if (i != 0)
+ wr.Write(" ");
+ WriteId(printedName);
+ if (options.UseTypes)
+ wr.Write(" :TYPE {0}", TypeToString(var.Type));
+ }
+ wr.Write(") ");
+
+ WriteTriggers(node.Triggers, options);
+
+ if (options.QuantifierIds) {
+ // only needed for Z3
+ VCQuantifierInfos infos = node.Infos;
+ Contract.Assert(infos != null);
+ if (infos.qid != null) {
+ wr.Write("(QID ");
+ wr.Write(infos.qid);
+ wr.Write(") ");
+ }
+ if (0 <= infos.uniqueId) {
+ wr.Write("(SKOLEMID ");
+ wr.Write(infos.uniqueId);
+ wr.Write(") ");
+ }
+ }
+
+ if (options.UseWeights) {
+ int weight = QKeyValue.FindIntAttribute(node.Infos.attributes, "weight", 1);
+ if (weight != 1) {
+ wr.Write("(WEIGHT ");
+ wr.Write(weight);
+ wr.Write(") ");
+ }
+ }
+
+ Linearise(node.Body, options);
+ wr.Write(")");
+
+ return true;
+
+ } finally {
+ Namer.PopScope();
+ }
+ }
+
+ private void WriteTriggers(List<VCTrigger/*!*/>/*!*/ triggers, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ // first, count how many neg/pos triggers there are
+ int negTriggers = 0;
+ int posTriggers = 0;
+ foreach (VCTrigger vcTrig in triggers) {
+ Contract.Assert(vcTrig != null);
+ if (vcTrig.Pos) {
+ posTriggers++;
+ } else {
+ negTriggers++;
+ }
+ }
+
+ if (posTriggers > 0) {
+ wr.Write("(PATS");
+ foreach (VCTrigger vcTrig in triggers) {
+ Contract.Assert(vcTrig != null);
+ if (vcTrig.Pos) {
+ if (vcTrig.Exprs.Count > 1) {
+ wr.Write(" (MPAT");
+ }
+ foreach (VCExpr e in vcTrig.Exprs) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ LineariseAsTerm(e, options);
+ }
+ if (vcTrig.Exprs.Count > 1) {
+ wr.Write(")");
+ }
+ }
+ }
+ wr.Write(") ");
+ } else if (negTriggers > 0) {
+ // if also positive triggers are given, the SMT solver (at least Z3)
+ // will ignore the negative patterns and output a warning. Therefore
+ // we never specify both negative and positive triggers
+ wr.Write("(NOPATS");
+ foreach (VCTrigger vcTrig in triggers) {
+ Contract.Assert(vcTrig != null);
+ if (!vcTrig.Pos) {
+ wr.Write(" ");
+ Contract.Assert(vcTrig.Exprs.Count == 1);
+ LineariseAsTerm(vcTrig.Exprs[0], options);
+ }
+ }
+ wr.Write(") ");
+ }
+
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ public bool Visit(VCExprLet node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ Namer.PushScope();
+ try {
+
+ wr.Write("(LET (");
+
+ LineariserOptions optionsWithVars = options.AddLetVariables(node.BoundVars);
+ Contract.Assert(optionsWithVars != null);
+
+ string s = "(";
+ foreach (VCExprLetBinding b in node) {
+ Contract.Assert(b != null);
+ wr.Write(s);
+ string printedName = Namer.GetLocalName(b.V, b.V.Name);
+
+ bool formula = b.V.Type.IsBool;
+ if (formula)
+ wr.Write("FORMULA ");
+ else
+ wr.Write("TERM ");
+ WriteId(printedName);
+ wr.Write(" ");
+ Linearise(b.E, optionsWithVars.SetAsTerm(!formula));
+ wr.Write(")");
+ s = " (";
+ }
+ wr.Write(") ");
+ Linearise(node.Body, optionsWithVars);
+ wr.Write(")");
+
+ return true;
+
+ } finally {
+ Namer.PopScope();
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////
+
+ // Lineariser for operator terms. The result (bool) is currently not used for anything
+ internal class SimplifyLikeOpLineariser : IVCExprOpVisitor<bool, LineariserOptions/*!*/> {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(ExprLineariser != null);
+ Contract.Invariant(wr != null);
+ }
+
+ private readonly SimplifyLikeExprLineariser/*!*/ ExprLineariser;
+ private readonly TextWriter/*!*/ wr;
+
+ public SimplifyLikeOpLineariser(SimplifyLikeExprLineariser ExprLineariser, TextWriter wr) {
+ Contract.Requires(wr != null);
+ Contract.Requires(ExprLineariser != null);
+ this.ExprLineariser = ExprLineariser;
+ this.wr = wr;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ private void WriteApplication(string op, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options, bool argsAsTerms) {
+ Contract.Requires(options != null);
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(args));
+ WriteApplication(op, op, args, options, argsAsTerms);
+ }
+
+ private void WriteApplication(string op, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(args));
+ WriteApplication(op, op, args, options, options.AsTerm);
+ }
+
+ private void WriteTermApplication(string op, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(args));
+ ExprLineariser.AssertAsTerm(op, options);
+ WriteApplication(op, op, args, options, options.AsTerm);
+ }
+
+ private void WriteApplication(string termOp, string predOp, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(predOp != null);
+ Contract.Requires(termOp != null);
+ Contract.Requires(cce.NonNullElements(args));
+ WriteApplication(termOp, predOp, args, options, options.AsTerm);
+ }
+
+ private void WriteApplication(string termOp, string predOp, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options, bool argsAsTerms) {
+ Contract.Requires(options != null);
+ Contract.Requires(predOp != null);
+ Contract.Requires(termOp != null);
+ Contract.Requires(cce.NonNullElements(args));// change the AsTerm option for the arguments?
+ wr.Write("({0}", options.AsTerm ? termOp : predOp);
+
+ LineariserOptions newOptions = options.SetAsTerm(argsAsTerms);
+
+ foreach (VCExpr e in args) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ ExprLineariser.Linearise(e, newOptions);
+ }
+
+ wr.Write(")");
+ }
+
+ // write an application that can only be a term.
+ // if the expression is supposed to be printed as a formula,
+ // it is turned into an equation (EQ (f args) |@true|)
+ private void WriteApplicationTermOnly(string termOp, IEnumerable<VCExpr/*!*/>/*!*/ args, LineariserOptions options) {
+ Contract.Requires(options != null);
+ Contract.Requires(termOp != null);
+ Contract.Requires(cce.NonNullElements(args));
+ if (!options.AsTerm)
+ // Write: (EQ (f args) |@true|)
+ // where "args" are written as terms
+ wr.Write("({0} ", eqName);
+
+ WriteApplication(termOp, args, options, true);
+
+ if (!options.AsTerm)
+ wr.Write(" {0})", boolTrueName);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
+
+ public bool VisitNotOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(boolNotName, notName, node, options); // arguments can be both terms and formulas
+ return true;
+ }
+
+ public bool VisitEqOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ if (options.AsTerm) {
+ // use equality on terms, also if the arguments have type bool
+ WriteApplication(termEqName, node, options);
+ } else {
+ if (node[0].Type.IsBool) {
+ Contract.Assert(node[1].Type.IsBool);
+ // use equivalence
+ WriteApplication(iffName, node, options);
+ } else {
+ Contract.Assert(!node[1].Type.IsBool);
+ // use equality and write the arguments as terms
+ WriteApplication(eqName, node, options, true);
+ }
+ }
+
+ return true;
+ }
+
+ public bool VisitNeqOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ if (options.AsTerm) {
+ // use equality on terms, also if the arguments have type bool
+ WriteApplication(termNeqName, node, options);
+ } else {
+ if (node[0].Type.IsBool) {
+ Contract.Assert(node[1].Type.IsBool);
+ // use equivalence and negate the whole thing
+ wr.Write("({0} ", notName);
+ WriteApplication(iffName, node, options);
+ wr.Write(")");
+ } else {
+ // use equality and write the arguments as terms
+ WriteApplication(neqName, node, options, true);
+ }
+ }
+
+ return true;
+ }
+
+ public bool VisitAndOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ Contract.Assert(options.AsTerm);
+ WriteApplication(boolAndName, andName, node, options); // arguments can be both terms and formulas
+ return true;
+ }
+
+ public bool VisitOrOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ Contract.Assert(options.AsTerm);
+ WriteApplication(boolOrName, orName, node, options); // arguments can be both terms and formulas
+ return true;
+ }
+
+ public bool VisitImpliesOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ if (options.AsTerm) {
+ wr.Write("({0} ({1} ", boolOrName, boolNotName);
+ ExprLineariser.Linearise(node[0], options);
+ wr.Write(") ");
+ ExprLineariser.Linearise(node[1], options);
+ wr.Write(")");
+ } else if (options.InverseImplies) {
+ wr.Write("({0} ", orName);
+ ExprLineariser.Linearise(node[1], options);
+ wr.Write(" ({0} ", notName);
+ ExprLineariser.Linearise(node[0], options);
+ wr.Write("))");
+ } else {
+ WriteApplication(impliesName, node, options);
+ }
+ return true;
+ }
+
+ public bool VisitDistinctOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ ExprLineariser.AssertAsFormula(distinctName, options);
+
+ if (node.Length < 2) {
+ ExprLineariser.Linearise(VCExpressionGenerator.True, options);
+ } else {
+ wr.Write("({0}", distinctName);
+ foreach (VCExpr e in node) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ ExprLineariser.LineariseAsTerm(e, options);
+ }
+ wr.Write(")");
+ }
+
+ return true;
+ }
+
+ public bool VisitLabelOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ VCExprLabelOp op = (VCExprLabelOp)node.Op;
+ Contract.Assert(op != null);
+ wr.Write(String.Format("({0} |{1}| ", op.pos ? "LBLPOS" : "LBLNEG", op.label));
+ ExprLineariser.Linearise(node[0], options);
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitSelectOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ wr.Write("(" + SelectOpName(node));
+ foreach (VCExpr/*!*/ e in node) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
+ }
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitStoreOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ wr.Write("(" + StoreOpName(node));
+ foreach (VCExpr e in node) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
+ }
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitFloatAddOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatAddName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatSubOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatSubName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatMulOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatMulName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatDivOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatDivName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatRemOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatRemName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatMinOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatMinName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatMaxOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatMaxName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatLeqOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatLeqName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatLtOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatLtName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatGeqOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatGeqName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatGtOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatGtName, node, options);
+ return true;
+ }
+
+ public bool VisitFloatEqOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(floatEqName, node, options);
+ return true;
+ }
+
+ public bool VisitBvOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication("$make_bv" + node.Type.BvBits, node, options);
+ return true;
+ }
+
+ public bool VisitBvExtractOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(BvExtractOpName(node), node, options);
+ return true;
+ }
+
+ public bool VisitBvConcatOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(BvConcatOpName(node), node, options);
+ return true;
+ }
+
+ public bool VisitIfThenElseOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+
+ wr.Write("(ITE ");
+ ExprLineariser.Linearise(node[0], options.SetAsTerm(false));
+ wr.Write(" ");
+ ExprLineariser.Linearise(node[1], options);
+ wr.Write(" ");
+ ExprLineariser.Linearise(node[2], options);
+ wr.Write(")");
+
+ return true;
+ }
+
+ public bool VisitCustomOp(VCExprNAry/*!*/ node, LineariserOptions/*!*/ options) {
+ //Contract.Requires(node != null);
+ //Contract.Requires(options != null);
+ VCExprCustomOp op = (VCExprCustomOp)node.Op;
+ wr.Write("({0}", op.Name);
+ foreach (VCExpr arg in node) {
+ wr.Write(" ");
+ ExprLineariser.Linearise(arg, options);
+ }
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitAddOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ if (node.Type.IsInt) {
+ if (CommandLineOptions.Clo.ReflectAdd) {
+ WriteTermApplication(intAddNameReflect, node, options);
+ }
+ else {
+ WriteTermApplication(intAddName, node, options);
+ }
+ }
+ else {
+ WriteTermApplication(realAddName, node, options);
+ }
+ return true;
+ }
+
+ public bool VisitSubOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ if (node.Type.IsInt) {
+ WriteTermApplication(intSubName, node, options);
+ }
+ else if (node.Type.IsReal) {
+ WriteTermApplication(realSubName, node, options);
+ }
+ else {
+ WriteTermApplication(floatSubName, node, options);
+ }
+ return true;
+ }
+
+ public bool VisitMulOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ if (node.Type.IsInt) {
+ WriteTermApplication(intMulName, node, options);
+ }
+ else if (node.Type.IsReal) {
+ WriteTermApplication(realMulName, node, options);
+ }
+ else {
+ WriteTermApplication(floatMulName, node, options);
+ }
+ return true;
+ }
+
+ public bool VisitDivOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(intDivName, node, options);
+ return true;
+ }
+
+ public bool VisitModOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(intModName, node, options);
+ return true;
+ }
+
+ public bool VisitRealDivOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(realDivName, node, options);
+ return true;
+ }
+
+ public bool VisitPowOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteTermApplication(realPowName, node, options);
+ return true;
+ }
+
+ public bool VisitLtOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(termLessName, lessName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitLeOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(termAtmostName, atmostName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitGtOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(termGreaterName, greaterName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitGeOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(termAtleastName, atleastName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitSubtypeOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(subtypeName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitSubtype3Op(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(subtypeArgsName, node, options, true); // arguments are always terms
+ return true;
+ }
+
+ public bool VisitToIntOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(toIntName, node, options);
+ return true;
+ }
+
+ public bool VisitToRealOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(toRealName, node, options);
+ return true;
+ }
+
+ public bool VisitToFloatOp(VCExprNAry node, LineariserOptions options)
+ {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ WriteApplication(toFloatName, node, options);
+ return true;
+ }
+
+ public bool VisitBoogieFunctionOp(VCExprNAry node, LineariserOptions options) {
+ //Contract.Requires(options != null);
+ //Contract.Requires(node != null);
+ VCExprBoogieFunctionOp op = (VCExprBoogieFunctionOp)node.Op;
+ Contract.Assert(op != null);
+ string funcName = op.Func.Name;
+ Contract.Assert(funcName != null);
+ string bvzName = op.Func.FindStringAttribute("external");
+ string printedName = ExprLineariser.Namer.GetName(op.Func, funcName);
+ Contract.Assert(printedName != null);
+ if (bvzName != null)
+ printedName = bvzName;
+
+ if (options.UseTypes) {
+ // we use term notation for arguments whose type is not bool, and
+ // formula notation for boolean arguments
+
+ wr.Write("(");
+ ExprLineariser.WriteId(printedName);
+
+ foreach (VCExpr e in node) {
+ Contract.Assert(e != null);
+ wr.Write(" ");
+ ExprLineariser.Linearise(e, options.SetAsTerm(!e.Type.IsBool));
+ }
+
+ wr.Write(")");
+ } else {
+ // arguments are always terms
+ WriteApplicationTermOnly(SimplifyLikeExprLineariser.MakeIdPrintable(printedName),
+ node, options);
+ }
+ return true;
+ }
+
+ }
+ }
+
+}
diff --git a/Source/VCExpr/TermFormulaFlattening.cs b/Source/VCExpr/TermFormulaFlattening.cs
index 7815413f..c4150024 100644
--- a/Source/VCExpr/TermFormulaFlattening.cs
+++ b/Source/VCExpr/TermFormulaFlattening.cs
@@ -1,248 +1,248 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// Ensure that no formulas (expressions of type boolean that are not
-// just a variable) occur with terms (expressions of some other
-// type). This is done by introducing let-binders for boolean
-// variables.
-
-namespace Microsoft.Boogie.VCExprAST
-{
-
- public struct FlattenerState {
- public readonly int Polarity;
- public readonly bool InTerm;
-
- public static FlattenerState INITIAL = new FlattenerState(1, false);
-
- public FlattenerState(int polarity, bool inTerm) {
- Polarity = polarity;
- InTerm = inTerm;
- }
-
- public FlattenerState TogglePolarity { get {
- return new FlattenerState(-Polarity, InTerm);
- } }
-
- public FlattenerState ZeroPolarity { get {
- return new FlattenerState(0, InTerm);
- } }
-
- public FlattenerState EnterTerm { get {
- return new FlattenerState(Polarity, true);
- } }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- public class TermFormulaFlattener : MutatingVCExprVisitor<FlattenerState> {
-
- public TermFormulaFlattener(VCExpressionGenerator gen):base(gen){
-Contract.Requires(gen != null);
-
- }
-
- private readonly IDictionary<VCExpr/*!*/, VCExprVar/*!*/>/*!*/ Bindings =
- new Dictionary<VCExpr/*!*/, VCExprVar/*!*/> ();
-
- private int varNameCounter = 0;
-
- public VCExpr Flatten(VCExpr expr){
-Contract.Requires(expr != null);
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr/*!*/ res = Mutate(expr, FlattenerState.INITIAL);
- Contract.Assert(res != null);
- while (Bindings.Count > 0) {
- List<VCExprLetBinding/*!*/>/*!*/ letBindings = new List<VCExprLetBinding/*!*/> ();
- foreach (KeyValuePair<VCExpr/*!*/, VCExprVar/*!*/> pair in Bindings){Contract.Assert(cce.NonNullElements(pair));
- letBindings.Add(Gen.LetBinding(pair.Value, pair.Key));}
- Bindings.Clear();
- res = AddBindings(letBindings, res, FlattenerState.INITIAL);
- }
- return res;
- }
-
- private VCExprVar GetVarFor(VCExpr expr){
-Contract.Requires(expr != null);
-Contract.Requires((expr.Type.IsBool));
-Contract.Ensures(Contract.Result<VCExprVar>() != null);
- VCExprVar res;
- if (!Bindings.TryGetValue(expr, out res)) {
- string name = "flt" + varNameCounter;
- varNameCounter = varNameCounter + 1;
- res = Gen.Variable(name, Type.Bool);
- Bindings.Add(expr, res);
- }
- return cce.NonNull(res);
- }
-
- // Remove all let-bindings from the field bindings whose rhs
- // contains any of the specified variables
- private List<VCExprLetBinding/*!*/>/*!*/ RemoveBindingsWithVars(List<VCExprVar/*!*/>/*!*/ boundVars, List<TypeVariable/*!*/>/*!*/ boundTypeVars){
-Contract.Requires(cce.NonNullElements(boundTypeVars));
-Contract.Requires(cce.NonNullElements(boundVars));
-Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
- List<VCExprLetBinding/*!*/>/*!*/ res = new List<VCExprLetBinding/*!*/> ();
- FreeVariableCollector/*!*/ coll = new FreeVariableCollector ();
-
- foreach (KeyValuePair<VCExpr, VCExprVar> pair in Bindings) {
- Contract.Assert(cce.NonNullElements(pair));
- coll.Collect(pair.Key);
- if (boundVars.Any(var => coll.FreeTermVars.ContainsKey(var)) ||
- boundTypeVars.Any(var => coll.FreeTypeVars.Contains(var)))
- res.Add(Gen.LetBinding(pair.Value, pair.Key));
- coll.Reset();
- }
-
- foreach (VCExprLetBinding b in res){Contract.Assert(b != null);
- Bindings.Remove(b.E);}
-
- return res;
- }
-
- // Add bindings to a formula using an implication or
- // conjunction. The bindings themselves will be flattened as well,
- // which might introduce further bindings
- private VCExpr AddBindings(List<VCExprLetBinding/*!*/>/*!*/ bindings, VCExpr body, FlattenerState state){
-Contract.Requires(body != null);
-Contract.Requires(cce.NonNullElements(bindings));
-Contract.Requires((body.Type.IsBool));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- List<VCExprLetBinding/*!*/>/*!*/ mutatedBindings = FlattenBindings(bindings, state);
- Contract.Assert(mutatedBindings != null);
- VCExpr/*!*/ bindingEquations = Gen.AsEquations(mutatedBindings);
- Contract.Assert(bindingEquations != null);
- switch(state.Polarity) {
- case 1:
- return Gen.Implies(bindingEquations, body);
- case -1:
- return Gen.And(bindingEquations, body);
- case 0:
- // also add explicit quantifiers for the bound variables
- List<VCExprVar/*!*/>/*!*/ vars = new List<VCExprVar/*!*/> ();
- foreach (VCExprLetBinding/*!*/ binding in mutatedBindings){Contract.Assert(binding != null);
- vars.Add(binding.V);}
- return Gen.Forall(vars, new List<VCTrigger/*!*/>(),
- Gen.Implies(bindingEquations, body));
- }
- Contract.Assert(false); throw new cce.UnreachableException();
- }
-
- private List<VCExprLetBinding/*!*/>/*!*/ FlattenBindings(List<VCExprLetBinding/*!*/>/*!*/ bindings, FlattenerState state){
-Contract.Requires(cce.NonNullElements(bindings));
-Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
- FlattenerState stateInBindings = state.ZeroPolarity;
- List<VCExprLetBinding/*!*/>/*!*/ mutatedBindings = new List<VCExprLetBinding/*!*/> ();
- foreach (VCExprLetBinding/*!*/ b in bindings) {
- Contract.Assert(b != null);
- mutatedBindings.Add(Gen.LetBinding(b.V, Mutate(b.E, stateInBindings)));
- }
- return mutatedBindings;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override bool AvoidVisit(VCExprNAry node, FlattenerState arg)
- {
- return node.Op.Equals(VCExpressionGenerator.AndOp) ||
- node.Op.Equals(VCExpressionGenerator.OrOp);
- }
-
- public override VCExpr Visit(VCExprNAry node, FlattenerState state){
-Contract.Requires(node != null);
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- // track the polarity to know whether implications or conjunctions
- // are to be introduced
-
- if (node.Op.Equals(VCExpressionGenerator.NotOp))
- return Gen.Not(Mutate(node[0], state.TogglePolarity));
-
- if (node.Op.Equals(VCExpressionGenerator.ImpliesOp)) {
- VCExpr newArg0 = Mutate(node[0], state.TogglePolarity);
- VCExpr newArg1 = Mutate(node[1], state);
- return Gen.Implies(newArg0, newArg1);
- }
-
- if (!node.Type.IsBool)
- state = state.EnterTerm;
-
- if (!node.Op.Equals(VCExpressionGenerator.AndOp) &&
- !node.Op.Equals(VCExpressionGenerator.OrOp) &&
- !(node.Op is VCExprLabelOp))
- // standard is to set the polarity to 0 (fits most operators)
- return base.Visit(node, state.ZeroPolarity);
-
- return base.Visit(node, state);
- }
-
- public override VCExpr Visit(VCExprQuantifier node, FlattenerState state){
-Contract.Requires(node != null);
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (state.InTerm)
- return GetVarFor(node);
-
- // we only flatten within the matrix of the quantified formula,
- // not within the triggers (since SMT-solvers do not seem to
- // appreciate triggers with let-binders)
- VCExpr newBody = Mutate(node.Body, state);
-
- // Check whether any of the extracted terms contain variables
- // bound by this quantifier. In this case, we have to add
- // let-binders and remove the extracted terms
- bool cont = true;
- while (cont) {
- List<VCExprLetBinding/*!*/>/*!*/ localBindings =
- RemoveBindingsWithVars(node.BoundVars, node.TypeParameters);
- Contract.Assert(cce.NonNullElements(localBindings));
- if (localBindings.Count > 0)
- newBody = AddBindings(localBindings, newBody, state);
- else
- cont = false;
- }
-
- return Gen.Quantify(node.Quan, node.TypeParameters, node.BoundVars, node.Triggers, node.Infos, newBody);
- }
-
- public override VCExpr Visit(VCExprLet node, FlattenerState state){
-Contract.Requires(node != null);
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (state.InTerm)
- return GetVarFor(node);
-
- VCExprLet prelimRes = (VCExprLet)cce.NonNull(base.Visit(node, state));
-
- List<VCExprLetBinding/*!*/>/*!*/ allBindings = new List<VCExprLetBinding/*!*/> ();
- allBindings.AddRange(prelimRes);
-
- // Check whether any of the extracted terms contain variables
- // bound by this binder. In this case, we have to add
- // let-binders and remove the extracted terms
- bool cont = true;
- while (cont) {
- List<VCExprLetBinding/*!*/>/*!*/ localBindings =
- RemoveBindingsWithVars(prelimRes.BoundVars, new List<TypeVariable/*!*/>());
- if (localBindings.Count > 0)
- allBindings.AddRange(FlattenBindings(localBindings, state));
- else
- cont = false;
- }
-
- return Gen.Let(allBindings, prelimRes.Body);
- }
-
- }
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// Ensure that no formulas (expressions of type boolean that are not
+// just a variable) occur with terms (expressions of some other
+// type). This is done by introducing let-binders for boolean
+// variables.
+
+namespace Microsoft.Boogie.VCExprAST
+{
+
+ public struct FlattenerState {
+ public readonly int Polarity;
+ public readonly bool InTerm;
+
+ public static FlattenerState INITIAL = new FlattenerState(1, false);
+
+ public FlattenerState(int polarity, bool inTerm) {
+ Polarity = polarity;
+ InTerm = inTerm;
+ }
+
+ public FlattenerState TogglePolarity { get {
+ return new FlattenerState(-Polarity, InTerm);
+ } }
+
+ public FlattenerState ZeroPolarity { get {
+ return new FlattenerState(0, InTerm);
+ } }
+
+ public FlattenerState EnterTerm { get {
+ return new FlattenerState(Polarity, true);
+ } }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ public class TermFormulaFlattener : MutatingVCExprVisitor<FlattenerState> {
+
+ public TermFormulaFlattener(VCExpressionGenerator gen):base(gen){
+Contract.Requires(gen != null);
+
+ }
+
+ private readonly IDictionary<VCExpr/*!*/, VCExprVar/*!*/>/*!*/ Bindings =
+ new Dictionary<VCExpr/*!*/, VCExprVar/*!*/> ();
+
+ private int varNameCounter = 0;
+
+ public VCExpr Flatten(VCExpr expr){
+Contract.Requires(expr != null);
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr/*!*/ res = Mutate(expr, FlattenerState.INITIAL);
+ Contract.Assert(res != null);
+ while (Bindings.Count > 0) {
+ List<VCExprLetBinding/*!*/>/*!*/ letBindings = new List<VCExprLetBinding/*!*/> ();
+ foreach (KeyValuePair<VCExpr/*!*/, VCExprVar/*!*/> pair in Bindings){Contract.Assert(cce.NonNullElements(pair));
+ letBindings.Add(Gen.LetBinding(pair.Value, pair.Key));}
+ Bindings.Clear();
+ res = AddBindings(letBindings, res, FlattenerState.INITIAL);
+ }
+ return res;
+ }
+
+ private VCExprVar GetVarFor(VCExpr expr){
+Contract.Requires(expr != null);
+Contract.Requires((expr.Type.IsBool));
+Contract.Ensures(Contract.Result<VCExprVar>() != null);
+ VCExprVar res;
+ if (!Bindings.TryGetValue(expr, out res)) {
+ string name = "flt" + varNameCounter;
+ varNameCounter = varNameCounter + 1;
+ res = Gen.Variable(name, Type.Bool);
+ Bindings.Add(expr, res);
+ }
+ return cce.NonNull(res);
+ }
+
+ // Remove all let-bindings from the field bindings whose rhs
+ // contains any of the specified variables
+ private List<VCExprLetBinding/*!*/>/*!*/ RemoveBindingsWithVars(List<VCExprVar/*!*/>/*!*/ boundVars, List<TypeVariable/*!*/>/*!*/ boundTypeVars){
+Contract.Requires(cce.NonNullElements(boundTypeVars));
+Contract.Requires(cce.NonNullElements(boundVars));
+Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
+ List<VCExprLetBinding/*!*/>/*!*/ res = new List<VCExprLetBinding/*!*/> ();
+ FreeVariableCollector/*!*/ coll = new FreeVariableCollector ();
+
+ foreach (KeyValuePair<VCExpr, VCExprVar> pair in Bindings) {
+ Contract.Assert(cce.NonNullElements(pair));
+ coll.Collect(pair.Key);
+ if (boundVars.Any(var => coll.FreeTermVars.ContainsKey(var)) ||
+ boundTypeVars.Any(var => coll.FreeTypeVars.Contains(var)))
+ res.Add(Gen.LetBinding(pair.Value, pair.Key));
+ coll.Reset();
+ }
+
+ foreach (VCExprLetBinding b in res){Contract.Assert(b != null);
+ Bindings.Remove(b.E);}
+
+ return res;
+ }
+
+ // Add bindings to a formula using an implication or
+ // conjunction. The bindings themselves will be flattened as well,
+ // which might introduce further bindings
+ private VCExpr AddBindings(List<VCExprLetBinding/*!*/>/*!*/ bindings, VCExpr body, FlattenerState state){
+Contract.Requires(body != null);
+Contract.Requires(cce.NonNullElements(bindings));
+Contract.Requires((body.Type.IsBool));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ List<VCExprLetBinding/*!*/>/*!*/ mutatedBindings = FlattenBindings(bindings, state);
+ Contract.Assert(mutatedBindings != null);
+ VCExpr/*!*/ bindingEquations = Gen.AsEquations(mutatedBindings);
+ Contract.Assert(bindingEquations != null);
+ switch(state.Polarity) {
+ case 1:
+ return Gen.Implies(bindingEquations, body);
+ case -1:
+ return Gen.And(bindingEquations, body);
+ case 0:
+ // also add explicit quantifiers for the bound variables
+ List<VCExprVar/*!*/>/*!*/ vars = new List<VCExprVar/*!*/> ();
+ foreach (VCExprLetBinding/*!*/ binding in mutatedBindings){Contract.Assert(binding != null);
+ vars.Add(binding.V);}
+ return Gen.Forall(vars, new List<VCTrigger/*!*/>(),
+ Gen.Implies(bindingEquations, body));
+ }
+ Contract.Assert(false); throw new cce.UnreachableException();
+ }
+
+ private List<VCExprLetBinding/*!*/>/*!*/ FlattenBindings(List<VCExprLetBinding/*!*/>/*!*/ bindings, FlattenerState state){
+Contract.Requires(cce.NonNullElements(bindings));
+Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
+ FlattenerState stateInBindings = state.ZeroPolarity;
+ List<VCExprLetBinding/*!*/>/*!*/ mutatedBindings = new List<VCExprLetBinding/*!*/> ();
+ foreach (VCExprLetBinding/*!*/ b in bindings) {
+ Contract.Assert(b != null);
+ mutatedBindings.Add(Gen.LetBinding(b.V, Mutate(b.E, stateInBindings)));
+ }
+ return mutatedBindings;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override bool AvoidVisit(VCExprNAry node, FlattenerState arg)
+ {
+ return node.Op.Equals(VCExpressionGenerator.AndOp) ||
+ node.Op.Equals(VCExpressionGenerator.OrOp);
+ }
+
+ public override VCExpr Visit(VCExprNAry node, FlattenerState state){
+Contract.Requires(node != null);
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // track the polarity to know whether implications or conjunctions
+ // are to be introduced
+
+ if (node.Op.Equals(VCExpressionGenerator.NotOp))
+ return Gen.Not(Mutate(node[0], state.TogglePolarity));
+
+ if (node.Op.Equals(VCExpressionGenerator.ImpliesOp)) {
+ VCExpr newArg0 = Mutate(node[0], state.TogglePolarity);
+ VCExpr newArg1 = Mutate(node[1], state);
+ return Gen.Implies(newArg0, newArg1);
+ }
+
+ if (!node.Type.IsBool)
+ state = state.EnterTerm;
+
+ if (!node.Op.Equals(VCExpressionGenerator.AndOp) &&
+ !node.Op.Equals(VCExpressionGenerator.OrOp) &&
+ !(node.Op is VCExprLabelOp))
+ // standard is to set the polarity to 0 (fits most operators)
+ return base.Visit(node, state.ZeroPolarity);
+
+ return base.Visit(node, state);
+ }
+
+ public override VCExpr Visit(VCExprQuantifier node, FlattenerState state){
+Contract.Requires(node != null);
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (state.InTerm)
+ return GetVarFor(node);
+
+ // we only flatten within the matrix of the quantified formula,
+ // not within the triggers (since SMT-solvers do not seem to
+ // appreciate triggers with let-binders)
+ VCExpr newBody = Mutate(node.Body, state);
+
+ // Check whether any of the extracted terms contain variables
+ // bound by this quantifier. In this case, we have to add
+ // let-binders and remove the extracted terms
+ bool cont = true;
+ while (cont) {
+ List<VCExprLetBinding/*!*/>/*!*/ localBindings =
+ RemoveBindingsWithVars(node.BoundVars, node.TypeParameters);
+ Contract.Assert(cce.NonNullElements(localBindings));
+ if (localBindings.Count > 0)
+ newBody = AddBindings(localBindings, newBody, state);
+ else
+ cont = false;
+ }
+
+ return Gen.Quantify(node.Quan, node.TypeParameters, node.BoundVars, node.Triggers, node.Infos, newBody);
+ }
+
+ public override VCExpr Visit(VCExprLet node, FlattenerState state){
+Contract.Requires(node != null);
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (state.InTerm)
+ return GetVarFor(node);
+
+ VCExprLet prelimRes = (VCExprLet)cce.NonNull(base.Visit(node, state));
+
+ List<VCExprLetBinding/*!*/>/*!*/ allBindings = new List<VCExprLetBinding/*!*/> ();
+ allBindings.AddRange(prelimRes);
+
+ // Check whether any of the extracted terms contain variables
+ // bound by this binder. In this case, we have to add
+ // let-binders and remove the extracted terms
+ bool cont = true;
+ while (cont) {
+ List<VCExprLetBinding/*!*/>/*!*/ localBindings =
+ RemoveBindingsWithVars(prelimRes.BoundVars, new List<TypeVariable/*!*/>());
+ if (localBindings.Count > 0)
+ allBindings.AddRange(FlattenBindings(localBindings, state));
+ else
+ cont = false;
+ }
+
+ return Gen.Let(allBindings, prelimRes.Body);
+ }
+
+ }
+
} \ No newline at end of file
diff --git a/Source/VCExpr/TypeErasure.cs b/Source/VCExpr/TypeErasure.cs
index 6fb38c27..c2d99d77 100644
--- a/Source/VCExpr/TypeErasure.cs
+++ b/Source/VCExpr/TypeErasure.cs
@@ -1,1710 +1,1710 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// different classes for erasing complex types in VCExprs, replacing them
-// with axioms that can be handled by theorem provers and SMT solvers
-
-namespace Microsoft.Boogie.TypeErasure {
- using Microsoft.Boogie.VCExprAST;
-
- // some functionality that is needed in many places (and that should
- // really be provided by the Spec# container classes; maybe one
- // could integrate the functions in a nicer way?)
- public class HelperFuns {
-
- public static Function BoogieFunction(string name, List<TypeVariable/*!*/>/*!*/ typeParams, params Type[] types) {
- Contract.Requires(types != null);
- Contract.Requires(name != null);
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Requires(types.Length > 0);
- Contract.Requires(Contract.ForAll(0, types.Length, i => types[i] != null));
- Contract.Ensures(Contract.Result<Function>() != null);
-
- List<Variable> args = new List<Variable>();
- for (int i = 0; i < types.Length - 1; ++i)
- args.Add(new Formal(Token.NoToken,
- new TypedIdent(Token.NoToken, "arg" + i, cce.NonNull(types[i])),
- true));
- Formal result = new Formal(Token.NoToken,
- new TypedIdent(Token.NoToken, "res",
- cce.NonNull(types)[types.Length - 1]),
- false);
- return new Function(Token.NoToken, name, new List<TypeVariable>(typeParams), args, result);
- }
-
- public static Function BoogieFunction(string name, params Type[] types) {
- Contract.Requires(types != null);
- Contract.Requires(name != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- return BoogieFunction(name, new List<TypeVariable/*!*/>(), types);
- }
-
- // boogie function where all arguments and the result have the same type U
- public static Function UniformBoogieFunction(string name, int arity, Type U) {
- Contract.Requires(U != null);
- Contract.Requires(name != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- Type[]/*!*/ types = new Type[arity + 1];
- for (int i = 0; i < arity + 1; ++i)
- types[i] = U;
- return BoogieFunction(name, types);
- }
-
- public static List<VCExprVar/*!*/>/*!*/ GenVarsForInParams(Function fun, VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Contract.Requires(fun != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
- List<VCExprVar/*!*/>/*!*/ arguments = new List<VCExprVar/*!*/>(fun.InParams.Count);
- foreach (Formal/*!*/ f in fun.InParams) {
- Contract.Assert(f != null);
- VCExprVar/*!*/ var = gen.Variable(f.Name, f.TypedIdent.Type);
- arguments.Add(var);
- }
- return arguments;
- }
-
- public static List<T/*!*/>/*!*/ ToList<T>(params T[] args) where T : class{
- Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<T>>()));
- return new List<T>(args);
- }
-
- public static List<VCExpr/*!*/>/*!*/ ToVCExprList(List<VCExprVar/*!*/>/*!*/ list) {
- Contract.Requires(cce.NonNullElements(list));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
- return new List<VCExpr>(list);
- }
-
- public static List<VCExprVar/*!*/>/*!*/ VarVector(string baseName, int num, Type type, VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Contract.Requires(type != null);
- Contract.Requires(baseName != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
- List<VCExprVar/*!*/>/*!*/ res = new List<VCExprVar/*!*/>(num);
- for (int i = 0; i < num; ++i)
- res.Add(gen.Variable(baseName + i, type));
- return res;
- }
-
- public static List<VCExprVar/*!*/>/*!*/ VarVector(string baseName, List<Type/*!*/>/*!*/ types, VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Contract.Requires(baseName != null);
- Contract.Requires(cce.NonNullElements(types));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
- List<VCExprVar/*!*/>/*!*/ res = new List<VCExprVar/*!*/>(types.Count);
- for (int i = 0; i < types.Count; ++i)
- res.Add(gen.Variable(baseName + i, types[i]));
- return res;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- internal struct TypeCtorRepr {
- // function that represents the application of the type constructor
- // to smaller types
- public readonly Function/*!*/ Ctor;
- // left-inverse functions that extract the subtypes of a compound type
- public readonly List<Function/*!*/>/*!*/ Dtors;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Ctor != null);
- Contract.Invariant(cce.NonNullElements(Dtors));
- }
-
-
- public TypeCtorRepr(Function ctor, List<Function/*!*/>/*!*/ dtors) {
- Contract.Requires(ctor != null);
- Contract.Requires(cce.NonNullElements(dtors));
- Contract.Requires(ctor.InParams.Count == dtors.Count);
- this.Ctor = ctor;
- this.Dtors = dtors;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- // The class responsible for creating and keeping track of all
- // axioms related to the type system. This abstract class is made
- // concrete in two subclasses, one for type erasure with type
- // premisses in quantifiers (the semantic approach), and one for
- // type erasure with explicit type arguments of polymorphic
- // functions (the syntacted approach).
- [ContractClass(typeof(TypeAxiomBuilderContracts))]
- public abstract class TypeAxiomBuilder : ICloneable {
-
- protected readonly VCExpressionGenerator/*!*/ Gen;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Gen != null);
- Contract.Invariant(Ctor != null);
-
- }
-
-
- internal abstract MapTypeAbstractionBuilder/*!*/ MapTypeAbstracter {
- get;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // Type Axioms
-
- // list in which all typed axioms are collected
- private readonly List<VCExpr/*!*/>/*!*/ AllTypeAxioms;
- [ContractInvariantMethod]
- void AllTypeAxiomsInvariantMethod() {
- Contract.Invariant(cce.NonNullElements(AllTypeAxioms));
- }
-
- // list in which type axioms are incrementally collected
- private readonly List<VCExpr/*!*/>/*!*/ IncTypeAxioms;
- [ContractInvariantMethod]
- void IncTypeAxiomsInvariantMethod() {
- Contract.Invariant(cce.NonNullElements(IncTypeAxioms));
- }
-
- internal void AddTypeAxiom(VCExpr axiom) {
- Contract.Requires(axiom != null);
- AllTypeAxioms.Add(axiom);
- IncTypeAxioms.Add(axiom);
- }
-
- // Return all axioms that were added since the last time NewAxioms
- // was called
- public VCExpr GetNewAxioms() {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr/*!*/ res = Gen.NAry(VCExpressionGenerator.AndOp, IncTypeAxioms);
- IncTypeAxioms.Clear();
- return res;
- }
-
- // mapping from a type to its constructor number/index
- private readonly Function/*!*/ Ctor;
- private BigNum CurrentCtorNum;
-
- private VCExpr GenCtorAssignment(VCExpr typeRepr) {
- Contract.Requires(typeRepr != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (CommandLineOptions.Clo.TypeEncodingMethod
- == CommandLineOptions.TypeEncoding.None)
- return VCExpressionGenerator.True;
-
- VCExpr res = Gen.Eq(Gen.Function(Ctor, typeRepr),
- Gen.Integer(CurrentCtorNum));
- CurrentCtorNum = CurrentCtorNum + BigNum.ONE;
- return res;
- }
-
- private VCExpr GenCtorAssignment(Function typeRepr) {
- Contract.Requires(typeRepr != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (CommandLineOptions.Clo.TypeEncodingMethod
- == CommandLineOptions.TypeEncoding.None)
- return VCExpressionGenerator.True;
-
- List<VCExprVar/*!*/>/*!*/ quantifiedVars = HelperFuns.GenVarsForInParams(typeRepr, Gen);
- VCExpr/*!*/ eq =
- GenCtorAssignment(Gen.Function(typeRepr,
- HelperFuns.ToVCExprList(quantifiedVars)));
-
- if (typeRepr.InParams.Count == 0)
- return eq;
-
- return Gen.Forall(quantifiedVars, new List<VCTrigger/*!*/>(),
- "ctor:" + typeRepr.Name, -1, eq);
- }
-
- // generate an axiom (forall x0, x1, ... :: invFun(fun(x0, x1, ...) == xi)
- protected VCExpr GenLeftInverseAxiom(Function fun, Function invFun, int dtorNum) {
- Contract.Requires(invFun != null);
- Contract.Requires(fun != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCExprVar/*!*/>/*!*/ quantifiedVars = HelperFuns.GenVarsForInParams(fun, Gen);
- Contract.Assert(cce.NonNullElements(quantifiedVars));
-
- VCExpr/*!*/ funApp = Gen.Function(fun, HelperFuns.ToVCExprList(quantifiedVars));
- VCExpr/*!*/ lhs = Gen.Function(invFun, funApp);
- VCExpr/*!*/ rhs = quantifiedVars[dtorNum];
- VCExpr/*!*/ eq = Gen.Eq(lhs, rhs);
-
- List<VCTrigger/*!*/>/*!*/ triggers = HelperFuns.ToList(Gen.Trigger(true, HelperFuns.ToList(funApp)));
- Contract.Assert(cce.NonNullElements(triggers));
- return Gen.Forall(quantifiedVars, triggers, "typeInv:" + invFun.Name, -1, eq);
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
- // the type of everything that is not int, bool, or a type
- [ContractInvariantMethod]
- void ObjectInvariant2() {
- Contract.Invariant(UDecl != null);
- Contract.Invariant(TDecl != null);
- Contract.Invariant(U != null);
- Contract.Invariant(T != null);
- }
-
- private readonly TypeCtorDecl/*!*/ UDecl;
- public readonly Type/*!*/ U;
-
- // the type of types
- private readonly TypeCtorDecl/*!*/ TDecl;
- public readonly Type/*!*/ T;
-
- public abstract Type/*!*/ TypeAfterErasure(Type/*!*/ type);
- [Pure]
- public abstract bool UnchangedType(Type/*!*/ type);
-
- ///////////////////////////////////////////////////////////////////////////
- // Symbols for representing types
-
- private readonly IDictionary<Type/*!*/, VCExpr/*!*/>/*!*/ BasicTypeReprs;
- [ContractInvariantMethod]
- void BasicTypeReprsInvariantMethod() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(BasicTypeReprs));
- }
-
- private VCExpr GetBasicTypeRepr(Type type) {
- Contract.Requires(type != null);
- Contract.Requires(type.IsBasic || type.IsBv);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr res;
- if (!BasicTypeReprs.TryGetValue(type, out res)) {
- res = Gen.Function(HelperFuns.BoogieFunction(type.ToString() + "Type", T));
- AddTypeAxiom(GenCtorAssignment(res));
- BasicTypeReprs.Add(type, res);
- }
- return cce.NonNull(res);
- }
-
- private readonly IDictionary<TypeCtorDecl/*!*/, TypeCtorRepr/*!*/>/*!*/ TypeCtorReprs;
- [ContractInvariantMethod]
- void TypeCtorReprsInvariantMethod() {
- Contract.Invariant(TypeCtorReprs != null);
- }
-
- internal TypeCtorRepr GetTypeCtorReprStruct(TypeCtorDecl decl) {
- Contract.Requires(decl != null);
- TypeCtorRepr reprSet;
- if (!TypeCtorReprs.TryGetValue(decl, out reprSet)) {
- Function/*!*/ ctor = HelperFuns.UniformBoogieFunction(decl.Name + "Type", decl.Arity, T);
- Contract.Assert(ctor != null);
- AddTypeAxiom(GenCtorAssignment(ctor));
-
- List<Function/*!*/>/*!*/ dtors = new List<Function/*!*/>(decl.Arity);
- for (int i = 0; i < decl.Arity; ++i) {
- Function/*!*/ dtor = HelperFuns.UniformBoogieFunction(decl.Name + "TypeInv" + i, 1, T);
- dtors.Add(dtor);
- AddTypeAxiom(GenLeftInverseAxiom(ctor, dtor, i));
- }
-
- reprSet = new TypeCtorRepr(ctor, dtors);
- TypeCtorReprs.Add(decl, reprSet);
- }
-
- return reprSet;
- }
-
- public Function GetTypeCtorRepr(TypeCtorDecl decl) {
- Contract.Requires(decl != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- return GetTypeCtorReprStruct(decl).Ctor;
- }
-
- public Function GetTypeDtor(TypeCtorDecl decl, int num) {
- Contract.Requires(decl != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- return GetTypeCtorReprStruct(decl).Dtors[num];
- }
-
- // mapping from free type variables to VCExpr variables
- private readonly IDictionary<TypeVariable/*!*/, VCExprVar/*!*/>/*!*/ TypeVariableMapping;
- [ContractInvariantMethod]
- void TypeVariableMappingInvariantMethod() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(TypeVariableMapping));
- }
-
- public VCExprVar Typed2Untyped(TypeVariable var) {
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<VCExprVar>() != null);
- VCExprVar res;
- if (!TypeVariableMapping.TryGetValue(var, out res)) {
- res = new VCExprVar(var.Name, T);
- TypeVariableMapping.Add(var, res);
- }
- return cce.NonNull(res);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
- // Symbols for representing variables and constants
-
- // Globally defined variables
- private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ Typed2UntypedVariables;
- [ContractInvariantMethod]
- void Typed2UntypedVariablesInvariantMethod() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(Typed2UntypedVariables));
- }
-
- // This method must only be used for free (unbound) variables
- public VCExprVar Typed2Untyped(VCExprVar var) {
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<VCExprVar>() != null);
- VCExprVar res = TryTyped2Untyped(var);
- if (res == null) {
- res = Gen.Variable(var.Name, TypeAfterErasure(var.Type));
- Typed2UntypedVariables.Add(var, res);
- AddVarTypeAxiom(res, var.Type);
- }
- return cce.NonNull(res);
- }
-
- /// <summary>
- /// This method is like Typed2Untyped, except in the case where the given variables
- /// doesn't exist in the mapping. For that case, this method returns null whereas
- /// Typed2Untyped creates a new variable that it adds to the mapping.
- /// </summary>
- /// <param name="var"></param>
- /// <returns></returns>
- public VCExprVar TryTyped2Untyped(VCExprVar var) {
- Contract.Requires(var != null);
- VCExprVar res;
- if (Typed2UntypedVariables.TryGetValue(var, out res)) {
- return res;
- } else {
- return null;
- }
- }
-
- protected abstract void AddVarTypeAxiom(VCExprVar/*!*/ var, Type/*!*/ originalType);
-
- ///////////////////////////////////////////////////////////////////////////
- // Translation function from types to their term representation
-
- public VCExpr Type2Term(Type type, IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ varMapping) {
- Contract.Requires(type != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(varMapping));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- //
- if (type.IsBasic || type.IsBv) {
- //
- return GetBasicTypeRepr(type);
- //
- } else if (type.IsCtor) {
- //
- CtorType ctype = type.AsCtor;
- Function/*!*/ repr = GetTypeCtorRepr(ctype.Decl);
- List<VCExpr/*!*/>/*!*/ args = new List<VCExpr/*!*/>(ctype.Arguments.Count);
- foreach (Type/*!*/ t in ctype.Arguments.ToArray()) {
- Contract.Assert(t != null);
- args.Add(Type2Term(t, varMapping));
- }
- return Gen.Function(repr, args);
- //
- } else if (type.IsVariable) {
- //
- VCExpr res;
- if (!varMapping.TryGetValue(type.AsVariable, out res))
- // then the variable is free and we bind it at this point to a term
- // variable
- res = Typed2Untyped(type.AsVariable);
- return cce.NonNull(res);
- //
- } else if (type.IsMap) {
- //
- return Type2Term(MapTypeAbstracter.AbstractMapType(type.AsMap), varMapping);
- //
- } else {
- System.Diagnostics.Debug.Fail("Don't know how to handle this type: " + type);
- Contract.Assert(false);
- throw new cce.UnreachableException(); // please the compiler
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public TypeAxiomBuilder(VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- this.Gen = gen;
- AllTypeAxioms = new List<VCExpr/*!*/>();
- IncTypeAxioms = new List<VCExpr/*!*/>();
- BasicTypeReprs = new Dictionary<Type/*!*/, VCExpr/*!*/>();
- CurrentCtorNum = BigNum.ZERO;
- TypeCtorReprs = new Dictionary<TypeCtorDecl/*!*/, TypeCtorRepr>();
- TypeVariableMapping = new Dictionary<TypeVariable/*!*/, VCExprVar/*!*/>();
- Typed2UntypedVariables = new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>();
-
- TypeCtorDecl/*!*/ uDecl = new TypeCtorDecl(Token.NoToken, "U", 0);
- UDecl = uDecl;
- Type/*!*/ u = new CtorType(Token.NoToken, uDecl, new List<Type>());
- U = u;
-
- TypeCtorDecl/*!*/ tDecl = new TypeCtorDecl(Token.NoToken, "T", 0);
- TDecl = tDecl;
- Type/*!*/ t = new CtorType(Token.NoToken, tDecl, new List<Type>());
- T = t;
-
- Ctor = HelperFuns.BoogieFunction("Ctor", t, Type.Int);
- }
-
- public virtual void Setup() {
- GetBasicTypeRepr(Type.Int);
- GetBasicTypeRepr(Type.Real);
- GetBasicTypeRepr(Type.Bool);
- }
-
- // constructor to allow cloning
- internal TypeAxiomBuilder(TypeAxiomBuilder builder) {
- Contract.Requires(builder != null);
- Gen = builder.Gen;
- AllTypeAxioms = new List<VCExpr/*!*/>(builder.AllTypeAxioms);
- IncTypeAxioms = new List<VCExpr/*!*/>(builder.IncTypeAxioms);
-
- UDecl = builder.UDecl;
- U = builder.U;
-
- TDecl = builder.TDecl;
- T = builder.T;
-
- Ctor = builder.Ctor;
- CurrentCtorNum = builder.CurrentCtorNum;
-
- BasicTypeReprs = new Dictionary<Type/*!*/, VCExpr/*!*/>(builder.BasicTypeReprs);
- TypeCtorReprs = new Dictionary<TypeCtorDecl/*!*/, TypeCtorRepr>(builder.TypeCtorReprs);
-
- TypeVariableMapping =
- new Dictionary<TypeVariable/*!*/, VCExprVar/*!*/>(builder.TypeVariableMapping);
- Typed2UntypedVariables =
- new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>(builder.Typed2UntypedVariables);
- }
-
- public abstract Object/*!*/ Clone();
- }
-
- [ContractClassFor(typeof(TypeAxiomBuilder))]
- public abstract class TypeAxiomBuilderContracts : TypeAxiomBuilder {
- public TypeAxiomBuilderContracts()
- : base((VCExpressionGenerator)null) {
- }
- internal override MapTypeAbstractionBuilder MapTypeAbstracter {
- get {
- Contract.Ensures(Contract.Result<MapTypeAbstractionBuilder>() != null);
- throw new NotImplementedException();
- }
- }
-
- public override Type TypeAfterErasure(Type type) {
- Contract.Requires(type != null);
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
-
- public override bool UnchangedType(Type type) {
- Contract.Requires(type != null);
- throw new NotImplementedException();
- }
-
- protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
- Contract.Requires(var != null);
- Contract.Requires(originalType != null);
- throw new NotImplementedException();
- }
-
- public override object Clone() {
- Contract.Ensures(Contract.Result<object>() != null);
-
- throw new NotImplementedException();
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- // Subclass of the TypeAxiomBuilder that provides all functionality
- // to deal with native sorts of a theorem prover (that are the only
- // types left after erasing all other types). Currently, these are:
- //
- // U ... sort of all individuals/objects/values
- // T ... sort of all types
- // int ... integers
- // bool ... booleans
-
- [ContractClass(typeof(TypeAxiomBuilderIntBoolUContracts))]
- public abstract class TypeAxiomBuilderIntBoolU : TypeAxiomBuilder {
-
- public TypeAxiomBuilderIntBoolU(VCExpressionGenerator gen)
- : base(gen) {
- Contract.Requires(gen != null);
-
- TypeCasts = new Dictionary<Type/*!*/, TypeCastSet>();
- }
-
- // constructor to allow cloning
- internal TypeAxiomBuilderIntBoolU(TypeAxiomBuilderIntBoolU builder)
- : base(builder) {
- Contract.Requires(builder != null);
-
- TypeCasts = new Dictionary<Type/*!*/, TypeCastSet>(builder.TypeCasts);
- }
-
- public override void Setup() {
- base.Setup();
-
- GetTypeCasts(Type.Int);
- GetTypeCasts(Type.Real);
- GetTypeCasts(Type.Bool);
- }
-
- // generate inverse axioms for casts (castToU(castFromU(x)) = x, under certain premisses)
- protected abstract VCExpr/*!*/ GenReverseCastAxiom(Function/*!*/ castToU, Function/*!*/ castFromU);
-
- protected VCExpr GenReverseCastEq(Function castToU, Function castFromU, out VCExprVar var, out List<VCTrigger/*!*/>/*!*/ triggers) {
- Contract.Requires((castFromU != null));
- Contract.Requires((castToU != null));
- Contract.Ensures((cce.NonNullElements(Contract.ValueAtReturn(out triggers))));
- Contract.Ensures(Contract.ValueAtReturn(out var) != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- var = Gen.Variable("x", U);
-
- VCExpr inner = Gen.Function(castFromU, var);
- VCExpr lhs = Gen.Function(castToU, inner);
- triggers = HelperFuns.ToList(Gen.Trigger(true, HelperFuns.ToList(inner)));
-
- return Gen.Eq(lhs, var);
- }
-
- protected abstract VCExpr/*!*/ GenCastTypeAxioms(Function/*!*/ castToU, Function/*!*/ castFromU);
-
- ///////////////////////////////////////////////////////////////////////////
- // storage of type casts for types that are supposed to be left over in the
- // VCs (like int, bool, bitvectors)
-
- private readonly IDictionary<Type/*!*/, TypeCastSet/*!*/>/*!*/ TypeCasts;
- [ContractInvariantMethod]
- void TypeCastsInvariantMethod() {
- Contract.Invariant(TypeCasts != null);
- }
-
- private TypeCastSet GetTypeCasts(Type type) {
- Contract.Requires(type != null);
- TypeCastSet res;
- if (!TypeCasts.TryGetValue(type, out res)) {
- Function/*!*/ castToU = HelperFuns.BoogieFunction(type.ToString() + "_2_U", type, U);
- Function/*!*/ castFromU = HelperFuns.BoogieFunction("U_2_" + type.ToString(), U, type);
-
- AddTypeAxiom(GenLeftInverseAxiom(castToU, castFromU, 0));
- AddTypeAxiom(GenReverseCastAxiom(castToU, castFromU));
- AddTypeAxiom(GenCastTypeAxioms(castToU, castFromU));
-
- res = new TypeCastSet(castToU, castFromU);
- TypeCasts.Add(type, res);
- }
- return res;
- }
- [Pure]
- public Function CastTo(Type type) {
- Contract.Requires(type != null);
- Contract.Requires(UnchangedType(type));
- Contract.Ensures(Contract.Result<Function>() != null);
- return GetTypeCasts(type).CastFromU;
- }
-
- public Function CastFrom(Type type) {
- Contract.Requires(type != null);
- Contract.Requires((UnchangedType(type)));
- Contract.Ensures(Contract.Result<Function>() != null);
- return GetTypeCasts(type).CastToU;
- }
-
- private struct TypeCastSet {
- public readonly Function/*!*/ CastToU;
- public readonly Function/*!*/ CastFromU;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(CastToU != null);
- Contract.Invariant(CastFromU != null);
- }
-
-
- public TypeCastSet(Function castToU, Function castFromU) {
- Contract.Requires(castFromU != null);
- Contract.Requires(castToU != null);
- CastToU = castToU;
- CastFromU = castFromU;
- }
- }
-
- public bool IsCast(Function fun) {
- Contract.Requires(fun != null);
- if (fun.InParams.Count != 1)
- return false;
- Type/*!*/ inType = cce.NonNull(fun.InParams[0]).TypedIdent.Type;
- if (inType.Equals(U)) {
- Type/*!*/ outType = cce.NonNull(fun.OutParams[0]).TypedIdent.Type;
- if (!TypeCasts.ContainsKey(outType))
- return false;
- return fun.Equals(CastTo(outType));
- } else {
- if (!TypeCasts.ContainsKey(inType))
- return false;
- Type/*!*/ outType = cce.NonNull(fun.OutParams[0]).TypedIdent.Type;
- if (!outType.Equals(U))
- return false;
- return fun.Equals(CastFrom(inType));
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // the only types that we allow in "untyped" expressions are U,
- // Type.Int, Type.Real, and Type.Bool
-
- public override Type TypeAfterErasure(Type type) {
- //Contract.Requires(type != null);
- Contract.Ensures(Contract.Result<Type>() != null);
- if (UnchangedType(type))
- // these types are kept
- return type;
- else
- // all other types are replaced by U
- return U;
- }
-
- [Pure]
- public override bool UnchangedType(Type type) {
- //Contract.Requires(type != null);
- return type.IsInt || type.IsReal || type.IsBool || type.IsBv || (type.IsMap && CommandLineOptions.Clo.MonomorphicArrays);
- }
-
- public VCExpr Cast(VCExpr expr, Type toType) {
- Contract.Requires(toType != null);
- Contract.Requires(expr != null);
- Contract.Requires((expr.Type.Equals(U) || UnchangedType(expr.Type)));
- Contract.Requires((toType.Equals(U) || UnchangedType(toType)));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (expr.Type.Equals(toType))
- return expr;
-
- if (toType.Equals(U)) {
- return Gen.Function(CastFrom(expr.Type), expr);
- } else {
- Contract.Assert(expr.Type.Equals(U));
- return Gen.Function(CastTo(toType), expr);
- }
- }
-
- public List<VCExpr/*!*/>/*!*/ CastSeq(List<VCExpr/*!*/>/*!*/ exprs, Type toType) {
- Contract.Requires(toType != null);
- Contract.Requires(cce.NonNullElements(exprs));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
- List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>(exprs.Count);
- foreach (VCExpr/*!*/ expr in exprs) {
- Contract.Assert(expr != null);
- res.Add(Cast(expr, toType));
- }
- return res;
- }
-
-
- }
-
- [ContractClassFor(typeof(TypeAxiomBuilderIntBoolU))]
- public abstract class TypeAxiomBuilderIntBoolUContracts : TypeAxiomBuilderIntBoolU {
- public TypeAxiomBuilderIntBoolUContracts()
- : base((TypeAxiomBuilderIntBoolU)null) {
- }
- protected override VCExpr GenReverseCastAxiom(Function castToU, Function castFromU) {
- Contract.Requires(castToU != null);
- Contract.Requires(castFromU != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- throw new NotImplementedException();
- }
-
- protected override VCExpr GenCastTypeAxioms(Function castToU, Function castFromU) {
- Contract.Requires(castFromU != null);
- Contract.Requires(castToU != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- throw new NotImplementedException();
- }
-
- internal override MapTypeAbstractionBuilder MapTypeAbstracter {
- get {
- throw new NotImplementedException();
- }
- }
-
- protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
- throw new NotImplementedException();
- }
-
- public override object Clone() {
- throw new NotImplementedException();
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
- // Class for computing most general abstractions of map types. An abstraction
- // of a map type t is a maptype t' in which closed proper subtypes have been replaced
- // with type variables. E.g., an abstraction of <a>[C a, int]a would be <a>[C a, b]a.
- // We subsequently consider most general abstractions as ordinary parametrised types,
- // i.e., "<a>[C a, b]a" would be considered as a type "M b" with polymorphically typed
- // access functions
- //
- // select<a,b>(M b, C a, b) returns (a)
- // store<a,b>(M b, C a, b, a) returns (M b)
- [ContractClass(typeof(MapTypeAbstractionBuilderContracts))]
- internal abstract class MapTypeAbstractionBuilder {
-
- protected readonly TypeAxiomBuilder/*!*/ AxBuilder;
- protected readonly VCExpressionGenerator/*!*/ Gen;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilder != null);
- Contract.Invariant(Gen != null);
- }
-
-
- internal MapTypeAbstractionBuilder(TypeAxiomBuilder axBuilder, VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
- this.AxBuilder = axBuilder;
- this.Gen = gen;
- AbstractionVariables = new List<TypeVariable/*!*/>();
- ClassRepresentations = new Dictionary<MapType/*!*/, MapTypeClassRepresentation>();
- }
-
- // constructor for cloning
- internal MapTypeAbstractionBuilder(TypeAxiomBuilder axBuilder, VCExpressionGenerator gen, MapTypeAbstractionBuilder builder) {
- Contract.Requires(builder != null);
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
- this.AxBuilder = axBuilder;
- this.Gen = gen;
- AbstractionVariables =
- new List<TypeVariable/*!*/>(builder.AbstractionVariables);
- ClassRepresentations =
- new Dictionary<MapType/*!*/, MapTypeClassRepresentation>(builder.ClassRepresentations);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // Type variables used in the abstractions. We use the same variables in the
- // same order in all abstractions in order to obtain comparable abstractions
- // (equals, hashcode)
-
- private readonly List<TypeVariable/*!*/>/*!*/ AbstractionVariables;
- [ContractInvariantMethod]
- void AbstractionVariablesInvariantMethod() {
- Contract.Invariant(cce.NonNullElements(AbstractionVariables));
- }
-
- private TypeVariable AbstractionVariable(int num) {
- Contract.Requires((num >= 0));
- Contract.Ensures(Contract.Result<TypeVariable>() != null);
- while (AbstractionVariables.Count <= num)
- AbstractionVariables.Add(new TypeVariable(Token.NoToken,
- "aVar" + AbstractionVariables.Count));
- return AbstractionVariables[num];
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // The untyped representation of a class of map types, i.e., of a map type
- // <a0, a1, ...>[A0, A1, ...] R, where the argument types and the result type
- // possibly contain free type variables. For each such class, a separate type
- // constructor and separate select/store functions are introduced.
-
- protected struct MapTypeClassRepresentation {
- public readonly TypeCtorDecl/*!*/ RepresentingType;
- public readonly Function/*!*/ Select;
- public readonly Function/*!*/ Store;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(RepresentingType != null);
- Contract.Invariant(Select != null);
- Contract.Invariant(Store != null);
- }
-
-
- public MapTypeClassRepresentation(TypeCtorDecl representingType, Function select, Function store) {
- Contract.Requires(store != null);
- Contract.Requires(select != null);
- Contract.Requires(representingType != null);
- this.RepresentingType = representingType;
- this.Select = select;
- this.Store = store;
- }
- }
-
- private readonly IDictionary<MapType/*!*/, MapTypeClassRepresentation/*!*/>/*!*/ ClassRepresentations;
- [ContractInvariantMethod]
- void ClassRepresentationsInvariantMethod() {
- Contract.Invariant(ClassRepresentations != null);
- }
-
- protected MapTypeClassRepresentation GetClassRepresentation(MapType abstractedType) {
- Contract.Requires(abstractedType != null);
- MapTypeClassRepresentation res;
- if (!ClassRepresentations.TryGetValue(abstractedType, out res)) {
- int num = ClassRepresentations.Count;
- TypeCtorDecl/*!*/ synonym =
- new TypeCtorDecl(Token.NoToken, "MapType" + num, abstractedType.FreeVariables.Count);
-
- Function/*!*/ select, store;
- GenSelectStoreFunctions(abstractedType, synonym, out select, out store);
-
- res = new MapTypeClassRepresentation(synonym, select, store);
- ClassRepresentations.Add(abstractedType, res);
- }
- return res;
- }
-
- // the actual select and store functions are generated by the
- // concrete subclasses of this class
- protected abstract void GenSelectStoreFunctions(MapType/*!*/ abstractedType, TypeCtorDecl/*!*/ synonymDecl, out Function/*!*/ select, out Function/*!*/ store);
-
- ///////////////////////////////////////////////////////////////////////////
-
- public Function Select(MapType rawType, out List<Type> instantiations) {
- Contract.Requires((rawType != null));
- Contract.Ensures(Contract.ValueAtReturn(out instantiations) != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- return AbstractAndGetRepresentation(rawType, out instantiations).Select;
- }
-
- public Function Store(MapType rawType, out List<Type> instantiations) {
- Contract.Requires((rawType != null));
- Contract.Ensures(Contract.ValueAtReturn(out instantiations) != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- return AbstractAndGetRepresentation(rawType, out instantiations).Store;
- }
-
- private MapTypeClassRepresentation
- AbstractAndGetRepresentation(MapType rawType, out List<Type> instantiations) {
- Contract.Requires((rawType != null));
- Contract.Ensures(Contract.ValueAtReturn(out instantiations) != null);
- instantiations = new List<Type>();
- MapType/*!*/ abstraction = ThinOutMapType(rawType, instantiations);
- return GetClassRepresentation(abstraction);
- }
-
- public CtorType AbstractMapType(MapType rawType) {
- Contract.Requires(rawType != null);
- Contract.Ensures(Contract.Result<CtorType>() != null);
- List<Type>/*!*/ instantiations = new List<Type>();
- MapType/*!*/ abstraction = ThinOutMapType(rawType, instantiations);
-
- MapTypeClassRepresentation repr = GetClassRepresentation(abstraction);
- Contract.Assume(repr.RepresentingType.Arity == instantiations.Count);
- return new CtorType(Token.NoToken, repr.RepresentingType, instantiations);
- }
-
- // TODO: cache the result of this operation
- protected MapType ThinOutMapType(MapType rawType, List<Type> instantiations) {
- Contract.Requires(instantiations != null);
- Contract.Requires(rawType != null);
- Contract.Ensures(Contract.Result<MapType>() != null);
- List<Type>/*!*/ newArguments = new List<Type>();
- foreach (Type/*!*/ subtype in rawType.Arguments.ToList()) {
- Contract.Assert(subtype != null);
- newArguments.Add(ThinOutType(subtype, rawType.TypeParameters,
- instantiations));
- }
- Type/*!*/ newResult = ThinOutType(rawType.Result, rawType.TypeParameters,
- instantiations);
- return new MapType(Token.NoToken, rawType.TypeParameters, newArguments, newResult);
- }
-
- // the instantiations of inserted type variables, the order corresponds to the order in which "AbstractionVariable(int)" delivers variables
- private Type/*!*/ ThinOutType(Type rawType, List<TypeVariable> boundTypeParams, List<Type> instantiations) {
- Contract.Requires(instantiations != null);
- Contract.Requires(boundTypeParams != null);
- Contract.Requires(rawType != null);
- Contract.Ensures(Contract.Result<Type>() != null);
-
- if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(rawType))
- return rawType;
-
- if (rawType.FreeVariables.All(var => !boundTypeParams.Contains(var))) {
- // Bingo!
- // if the type does not contain any bound variables, we can simply
- // replace it with a type variable
- TypeVariable/*!*/ abstractionVar = AbstractionVariable(instantiations.Count);
- Contract.Assume(!boundTypeParams.Contains(abstractionVar));
- instantiations.Add(rawType);
- return abstractionVar;
- }
-
- if (rawType.IsVariable) {
- //
- // then the variable has to be bound, we cannot do anything
- TypeVariable/*!*/ rawVar = rawType.AsVariable;
- Contract.Assume(boundTypeParams.Contains(rawVar));
- return rawVar;
- //
- } else if (rawType.IsMap) {
- //
- // recursively abstract this map type and continue abstracting
- CtorType/*!*/ abstraction = AbstractMapType(rawType.AsMap);
- return ThinOutType(abstraction, boundTypeParams, instantiations);
- //
- } else if (rawType.IsCtor) {
- //
- // traverse the subtypes
- CtorType/*!*/ rawCtorType = rawType.AsCtor;
- List<Type>/*!*/ newArguments = new List<Type>();
- foreach (Type/*!*/ subtype in rawCtorType.Arguments.ToList()) {
- Contract.Assert(subtype != null);
- newArguments.Add(ThinOutType(subtype, boundTypeParams,
- instantiations));
- }
- return new CtorType(Token.NoToken, rawCtorType.Decl, newArguments);
- //
- } else {
- System.Diagnostics.Debug.Fail("Don't know how to handle this type: " + rawType);
- return rawType; // compiler appeasement policy
- }
- }
-
- }
- [ContractClassFor(typeof(MapTypeAbstractionBuilder))]
- internal abstract class MapTypeAbstractionBuilderContracts : MapTypeAbstractionBuilder {
- public MapTypeAbstractionBuilderContracts()
- : base(null, null) {
- }
- protected override void GenSelectStoreFunctions(MapType abstractedType, TypeCtorDecl synonymDecl, out Function select, out Function store) {
- Contract.Requires(abstractedType != null);
- Contract.Requires(synonymDecl != null);
- Contract.Ensures(Contract.ValueAtReturn(out select) != null);
- Contract.Ensures(Contract.ValueAtReturn(out store) != null);
-
- throw new NotImplementedException();
- }
- }
-
-
- //////////////////////////////////////////////////////////////////////////////
-
- public class VariableBindings {
- public readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ VCExprVarBindings;
- public readonly IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ TypeVariableBindings;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(VCExprVarBindings));
- Contract.Invariant(cce.NonNullDictionaryAndValues(TypeVariableBindings));
- }
-
-
- public VariableBindings(IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ vcExprVarBindings,
- IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ typeVariableBindings) {
- Contract.Requires(cce.NonNullDictionaryAndValues(vcExprVarBindings));
- Contract.Requires(cce.NonNullDictionaryAndValues(typeVariableBindings));
- this.VCExprVarBindings = vcExprVarBindings;
- this.TypeVariableBindings = typeVariableBindings;
- }
-
- public VariableBindings() :
- this(new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>(),
- new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>()) {
- }
-
- public VariableBindings Clone() {
- Contract.Ensures(Contract.Result<VariableBindings>() != null);
- IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ newVCExprVarBindings =
- new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>();
- foreach (KeyValuePair<VCExprVar/*!*/, VCExprVar/*!*/> pair in VCExprVarBindings) {
- Contract.Assert(cce.NonNullElements(pair));
- newVCExprVarBindings.Add(pair);
- }
- IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ newTypeVariableBindings =
- new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>();
- foreach (KeyValuePair<TypeVariable/*!*/, VCExpr/*!*/> pair in TypeVariableBindings) {
- Contract.Assert(cce.NonNullElements(pair));
- newTypeVariableBindings.Add(pair);
- }
- return new VariableBindings(newVCExprVarBindings, newTypeVariableBindings);
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- // The central class for turning types VCExprs into untyped
- // VCExprs. This class makes use of the type axiom builder to manage
- // the available types and symbols.
- [ContractClass(typeof(TypeEraserContracts))]
- public abstract class TypeEraser : MutatingVCExprVisitor<VariableBindings/*!*/> {
-
- protected readonly TypeAxiomBuilderIntBoolU/*!*/ AxBuilder;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilder != null);
- }
-
-
- protected abstract OpTypeEraser/*!*/ OpEraser {
- get;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public TypeEraser(TypeAxiomBuilderIntBoolU axBuilder, VCExpressionGenerator gen)
- : base(gen) {
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
- AxBuilder = axBuilder;
- }
-
- public VCExpr Erase(VCExpr expr, int polarity) {
- Contract.Requires(expr != null);
- Contract.Requires((polarity >= -1 && polarity <= 1));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- this.Polarity = polarity;
- return Mutate(expr, new VariableBindings());
- }
-
- internal int Polarity = 1; // 1 for positive, -1 for negative, 0 for both
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override VCExpr Visit(VCExprLiteral node, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Contract.Assume(node.Type == Type.Bool || node.Type == Type.Int || node.Type == Type.Real);
- return node;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override bool AvoidVisit(VCExprNAry node, VariableBindings arg)
- {
- return node.Op.Equals(VCExpressionGenerator.AndOp) ||
- node.Op.Equals(VCExpressionGenerator.OrOp);
- }
-
- public override VCExpr Visit(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExprOp/*!*/ op = node.Op;
- if (op == VCExpressionGenerator.AndOp || op == VCExpressionGenerator.OrOp)
- // more efficient on large conjunctions/disjunctions
- return base.Visit(node, bindings);
-
- // the visitor that handles all other operators
- return node.Accept<VCExpr/*!*/, VariableBindings/*!*/>(OpEraser, bindings);
- }
-
- // this method is called by MutatingVCExprVisitor.Visit(VCExprNAry, ...)
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode, List<VCExpr/*!*/>/*!*/ newSubExprs, bool changed, VariableBindings/*!*/ bindings) {
- //Contract.Requires(originalNode != null);
- //Contract.Requires(cce.NonNullElements(newSubExprs));
- //Contract.Requires(bindings != null);
- Contract.Assume(originalNode.Op == VCExpressionGenerator.AndOp ||
- originalNode.Op == VCExpressionGenerator.OrOp);
- return Gen.Function(originalNode.Op,
- AxBuilder.Cast(newSubExprs[0], Type.Bool),
- AxBuilder.Cast(newSubExprs[1], Type.Bool));
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override VCExpr Visit(VCExprVar node, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExprVar res;
- if (!bindings.VCExprVarBindings.TryGetValue(node, out res))
- return AxBuilder.Typed2Untyped(node);
- return cce.NonNull(res);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- protected bool IsUniversalQuantifier(VCExprQuantifier node) {
- Contract.Requires(node != null);
- return Polarity == 1 && node.Quan == Quantifier.EX ||
- Polarity == -1 && node.Quan == Quantifier.ALL;
- }
-
- protected List<VCExprVar/*!*/>/*!*/ BoundVarsAfterErasure(List<VCExprVar/*!*/>/*!*/ oldBoundVars,
- // the mapping between old and new variables
- // is added to this bindings-object
- VariableBindings/*!*/ bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(cce.NonNullElements(oldBoundVars));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
-
- List<VCExprVar/*!*/>/*!*/ newBoundVars = new List<VCExprVar/*!*/>(oldBoundVars.Count);
- foreach (VCExprVar/*!*/ var in oldBoundVars) {
- Type/*!*/ newType = AxBuilder.TypeAfterErasure(var.Type);
- VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
- newBoundVars.Add(newVar);
- bindings.VCExprVarBindings.Add(var, newVar);
- }
- return newBoundVars;
- }
-
- // We check whether casts Int2U or Bool2U on the bound variables
- // occur in triggers. In case a trigger like f(Int2U(x)) occurs,
- // it may be better to give variable x the type U and remove the
- // cast. The following method returns true if the quantifier
- // should be translated again with a different typing
- protected bool RedoQuantifier(VCExprQuantifier/*!*/ node,
- VCExprQuantifier/*!*/ newNode,
- // the bound vars that actually occur in the body or
- // in any of the triggers
- List<VCExprVar/*!*/>/*!*/ occurringVars,
- VariableBindings/*!*/ oldBindings,
- out VariableBindings/*!*/ newBindings,
- out List<VCExprVar/*!*/>/*!*/ newBoundVars) {
- Contract.Requires(node != null);
- Contract.Requires(newNode != null);
- Contract.Requires(cce.NonNullElements(occurringVars));
- Contract.Requires(oldBindings != null);
- Contract.Ensures(Contract.ValueAtReturn(out newBindings) != null);
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out newBoundVars)));
- List<VCExprVar/*!*/> castVariables =
- VariableCastCollector.FindCastVariables(node, newNode, AxBuilder);
- if (castVariables.Count == 0) {
- newBindings = oldBindings; // to make the compiler happy
- newBoundVars = newNode.BoundVars; // to make the compiler happy
- return false;
- }
-
- // redo everything with a different typing ...
-
- newBindings = oldBindings.Clone();
- newBoundVars = new List<VCExprVar/*!*/>(node.BoundVars.Count);
- foreach (VCExprVar/*!*/ var in node.BoundVars) {
- Contract.Assert(var != null);
- Type/*!*/ newType =
- castVariables.Contains(var) ? AxBuilder.U
- : AxBuilder.TypeAfterErasure(var.Type);
- Contract.Assert(newType != null);
- VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
- Contract.Assert(newVar != null);
- newBoundVars.Add(newVar);
- newBindings.VCExprVarBindings.Add(var, newVar);
- }
-
- return true;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override VCExpr Visit(VCExprLet node, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VariableBindings/*!*/ newVarBindings = bindings.Clone();
-
- List<VCExprVar/*!*/>/*!*/ newBoundVars = new List<VCExprVar/*!*/>(node.BoundVars.Count);
- foreach (VCExprVar/*!*/ var in node.BoundVars) {
- Type/*!*/ newType = AxBuilder.TypeAfterErasure(var.Type);
- VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
- newBoundVars.Add(newVar);
- newVarBindings.VCExprVarBindings.Add(var, newVar);
- }
-
- List<VCExprLetBinding/*!*/>/*!*/ newbindings = new List<VCExprLetBinding/*!*/>(node.Length);
- for (int i = 0; i < node.Length; ++i) {
- VCExprLetBinding/*!*/ binding = node[i];
- Contract.Assert(binding != null);
- VCExprVar/*!*/ newVar = newBoundVars[i];
- Type/*!*/ newType = newVar.Type;
-
- VCExpr/*!*/ newE = AxBuilder.Cast(Mutate(binding.E, newVarBindings), newType);
- newbindings.Add(Gen.LetBinding(newVar, newE));
- }
-
- VCExpr/*!*/ newbody = Mutate(node.Body, newVarBindings);
- return Gen.Let(newbindings, newbody);
- }
- }
-
- [ContractClassFor(typeof(TypeEraser))]
- public abstract class TypeEraserContracts : TypeEraser {
- public TypeEraserContracts()
- : base(null, null) {
- }
- protected override OpTypeEraser OpEraser {
- get {
- Contract.Ensures(Contract.Result<OpTypeEraser>() != null);
- throw new NotImplementedException();
- }
- }
- }
-
-
- //////////////////////////////////////////////////////////////////////////////
-
- public abstract class OpTypeEraser : StandardVCExprOpVisitor<VCExpr/*!*/, VariableBindings/*!*/> {
-
- protected readonly TypeAxiomBuilderIntBoolU/*!*/ AxBuilder;
-
- protected readonly TypeEraser/*!*/ Eraser;
- protected readonly VCExpressionGenerator/*!*/ Gen;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilder != null);
- Contract.Invariant(Eraser != null);
- Contract.Invariant(Gen != null);
- }
-
-
- public OpTypeEraser(TypeEraser/*!*/ eraser, TypeAxiomBuilderIntBoolU/*!*/ axBuilder, VCExpressionGenerator/*!*/ gen) {
- Contract.Requires(eraser != null);
- Contract.Requires(axBuilder != null);
- Contract.Requires(gen != null);
- this.AxBuilder = axBuilder;
- this.Eraser = eraser;
- this.Gen = gen;
- }
-
- protected override VCExpr StandardResult(VCExprNAry node, VariableBindings bindings) {
- //Contract.Requires(bindings != null);
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- System.Diagnostics.Debug.Fail("Don't know how to erase types in this expression: " + node);
- Contract.Assert(false);
- throw new cce.UnreachableException(); // to please the compiler
- }
-
- private List<VCExpr/*!*/>/*!*/ MutateSeq(VCExprNAry node, VariableBindings bindings, int newPolarity) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
- int oldPolarity = Eraser.Polarity;
- Eraser.Polarity = newPolarity;
- List<VCExpr/*!*/>/*!*/ newArgs = Eraser.MutateSeq(node, bindings);
- Eraser.Polarity = oldPolarity;
- return newArgs;
- }
-
- private VCExpr CastArguments(VCExprNAry node, Type argType, VariableBindings bindings, int newPolarity) {
- Contract.Requires(bindings != null);
- Contract.Requires(argType != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Gen.Function(node.Op,
- AxBuilder.CastSeq(MutateSeq(node, bindings, newPolarity),
- argType));
- }
-
- // Cast the arguments of the node to their old type if necessary and possible; otherwise use
- // their new type (int, real, bool, or U)
- private VCExpr CastArgumentsToOldType(VCExprNAry node, VariableBindings bindings, int newPolarity) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Requires((node.Arity > 0));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, newPolarity);
- Type/*!*/ oldType = node[0].Type;
- if (AxBuilder.UnchangedType(oldType) &&
- node.Skip(1).All(e => e.Type.Equals(oldType)))
- return Gen.Function(node.Op, AxBuilder.CastSeq(newArgs, oldType));
- else
- return Gen.Function(node.Op, AxBuilder.CastSeq(newArgs, AxBuilder.U));
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
- public override VCExpr VisitNotOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, Type.Bool, bindings, -Eraser.Polarity);
- }
- public override VCExpr VisitEqOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitNeqOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitImpliesOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- // UGLY: the code for tracking polarities should be factored out
- List<VCExpr/*!*/>/*!*/ newArgs = new List<VCExpr/*!*/>(2);
- Eraser.Polarity = -Eraser.Polarity;
- newArgs.Add(Eraser.Mutate(node[0], bindings));
- Eraser.Polarity = -Eraser.Polarity;
- newArgs.Add(Eraser.Mutate(node[1], bindings));
- return Gen.Function(node.Op, AxBuilder.CastSeq(newArgs, Type.Bool));
- }
- public override VCExpr VisitDistinctOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitLabelOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- // argument of the label operator should always be a formula
- // (at least for Simplify ... should this be ensured at a later point?)
- return CastArguments(node, Type.Bool, bindings, Eraser.Polarity);
- }
- public override VCExpr VisitIfThenElseOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, 0);
- newArgs[0] = AxBuilder.Cast(newArgs[0], Type.Bool);
- Type t = node.Type;
- if (!AxBuilder.UnchangedType(t)) {
- t = AxBuilder.U;
- }
- newArgs[1] = AxBuilder.Cast(newArgs[1], t);
- newArgs[2] = AxBuilder.Cast(newArgs[2], t);
- return Gen.Function(node.Op, newArgs);
- }
- public override VCExpr/*!*/ VisitCustomOp(VCExprNAry/*!*/ node, VariableBindings/*!*/ bindings) {
- Contract.Requires(node != null);
- Contract.Requires(bindings != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, 0);
- return Gen.Function(node.Op, newArgs);
- }
- public override VCExpr VisitAddOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, node.Type, bindings, 0);
- }
- public override VCExpr VisitSubOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, node.Type, bindings, 0);
- }
- public override VCExpr VisitMulOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, node.Type, bindings, 0);
- }
- public override VCExpr VisitDivOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, Type.Int, bindings, 0);
- }
- public override VCExpr VisitModOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, Type.Int, bindings, 0);
- }
- public override VCExpr VisitRealDivOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, Type.Real, bindings, 0);
- }
- /*public override VCExpr VisitFloatDivOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, Type.Float, bindings, 0);
- }*/
- public override VCExpr VisitPowOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, Type.Real, bindings, 0);
- }
- public override VCExpr VisitLtOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitLeOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitGtOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitGeOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitSubtypeOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArguments(node, AxBuilder.U, bindings, 0);
- }
- public override VCExpr VisitToIntOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitToRealOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatAddOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatSubOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatMulOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatDivOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatRemOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatMinOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatMaxOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatLeqOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatLtOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatGeqOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatGtOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitFloatEqOp(VCExprNAry node, VariableBindings bindings)
- {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitBvOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitBvExtractOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return CastArgumentsToOldType(node, bindings, 0);
- }
- public override VCExpr VisitBvConcatOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
- Contract.Requires((node != null));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, 0);
-
- // each argument is cast to its old type
- Contract.Assert(newArgs.Count == node.Arity && newArgs.Count == 2);
- VCExpr/*!*/ arg0 = AxBuilder.Cast(newArgs[0], node[0].Type);
- Contract.Assert(arg0 != null);
- VCExpr/*!*/ arg1 = AxBuilder.Cast(newArgs[1], node[1].Type);
- Contract.Assert(arg1 != null);
- return Gen.Function(node.Op, arg0, arg1);
- }
-
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- /// <summary>
- /// Collect all variables x occurring in expressions of the form Int2U(x) or Bool2U(x), and
- /// collect all variables x occurring outside such forms.
- /// </summary>
- internal class VariableCastCollector : TraversingVCExprVisitor<bool, bool> {
- /// <summary>
- /// Determine those bound variables in "oldNode" <em>all</em> of whose relevant uses
- /// have to be cast in potential triggers in "newNode". It is assume that
- /// the bound variables of "oldNode" correspond to the first bound
- /// variables of "newNode".
- /// </summary>
- public static List<VCExprVar/*!*/>/*!*/ FindCastVariables(VCExprQuantifier oldNode, VCExprQuantifier newNode, TypeAxiomBuilderIntBoolU axBuilder) {
- Contract.Requires((axBuilder != null));
- Contract.Requires((newNode != null));
- Contract.Requires((oldNode != null));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
- VariableCastCollector/*!*/ collector = new VariableCastCollector(axBuilder);
- Contract.Assert(collector != null);
- if (newNode.Triggers.Any(trigger => trigger.Pos)) {
- // look in the given triggers
- foreach (VCTrigger/*!*/ trigger in newNode.Triggers) {
- Contract.Assert(trigger != null);
- if (trigger.Pos) {
- foreach (VCExpr/*!*/ expr in trigger.Exprs) {
- Contract.Assert(expr != null);
- collector.Traverse(expr, true);
- }
- }
- }
- } else {
- // look in the body of the quantifier
- collector.Traverse(newNode.Body, true);
- }
-
- List<VCExprVar/*!*/>/*!*/ castVariables = new List<VCExprVar/*!*/>(collector.varsInCasts.Count);
- foreach (VCExprVar/*!*/ castVar in collector.varsInCasts) {
- Contract.Assert(castVar != null);
- int i = newNode.BoundVars.IndexOf(castVar);
- if (0 <= i && i < oldNode.BoundVars.Count && !collector.varsOutsideCasts.ContainsKey(castVar))
- castVariables.Add(oldNode.BoundVars[i]);
- }
- return castVariables;
- }
-
- public VariableCastCollector(TypeAxiomBuilderIntBoolU axBuilder) {
- Contract.Requires(axBuilder != null);
- this.AxBuilder = axBuilder;
- }
-
- readonly List<VCExprVar/*!*/>/*!*/ varsInCasts = new List<VCExprVar/*!*/>();
- readonly Dictionary<VCExprVar/*!*/, object>/*!*/ varsOutsideCasts = new Dictionary<VCExprVar/*!*/, object>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(varsInCasts));
- Contract.Invariant(varsOutsideCasts != null && Contract.ForAll(varsOutsideCasts, voc => voc.Key != null));
- Contract.Invariant(AxBuilder != null);
-
- }
-
-
- readonly TypeAxiomBuilderIntBoolU/*!*/ AxBuilder;
-
- protected override bool StandardResult(VCExpr node, bool arg) {
- //Contract.Requires(node != null);
- return true; // not used
- }
-
- public override bool Visit(VCExprNAry node, bool arg) {
- Contract.Requires(node != null);
- if (node.Op is VCExprBoogieFunctionOp) {
- Function func = ((VCExprBoogieFunctionOp)node.Op).Func;
- Contract.Assert(func != null);
- if ((AxBuilder.IsCast(func)) && node[0] is VCExprVar) {
- VCExprVar castVar = (VCExprVar)node[0];
- if (!varsInCasts.Contains(castVar))
- varsInCasts.Add(castVar);
- return true;
- }
- } else if (node.Op is VCExprNAryOp) {
- VCExpressionGenerator.SingletonOp op = VCExpressionGenerator.SingletonOpDict[node.Op];
- switch (op) {
- // the following operators cannot be used in triggers, so disregard any uses of variables as direct arguments
- case VCExpressionGenerator.SingletonOp.NotOp:
- case VCExpressionGenerator.SingletonOp.EqOp:
- case VCExpressionGenerator.SingletonOp.NeqOp:
- case VCExpressionGenerator.SingletonOp.AndOp:
- case VCExpressionGenerator.SingletonOp.OrOp:
- case VCExpressionGenerator.SingletonOp.ImpliesOp:
- case VCExpressionGenerator.SingletonOp.LtOp:
- case VCExpressionGenerator.SingletonOp.LeOp:
- case VCExpressionGenerator.SingletonOp.GtOp:
- case VCExpressionGenerator.SingletonOp.GeOp:
- foreach (VCExpr n in node) {
- if (!(n is VCExprVar)) { // don't recurse on VCExprVar argument
- n.Accept<bool, bool>(this, arg);
- }
- }
- return true;
- default:
- break;
- }
- }
- return base.Visit(node, arg);
- }
-
- public override bool Visit(VCExprVar node, bool arg) {
- Contract.Requires(node != null);
- if (!varsOutsideCasts.ContainsKey(node))
- varsOutsideCasts.Add(node, null);
- return true;
- }
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// different classes for erasing complex types in VCExprs, replacing them
+// with axioms that can be handled by theorem provers and SMT solvers
+
+namespace Microsoft.Boogie.TypeErasure {
+ using Microsoft.Boogie.VCExprAST;
+
+ // some functionality that is needed in many places (and that should
+ // really be provided by the Spec# container classes; maybe one
+ // could integrate the functions in a nicer way?)
+ public class HelperFuns {
+
+ public static Function BoogieFunction(string name, List<TypeVariable/*!*/>/*!*/ typeParams, params Type[] types) {
+ Contract.Requires(types != null);
+ Contract.Requires(name != null);
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Requires(types.Length > 0);
+ Contract.Requires(Contract.ForAll(0, types.Length, i => types[i] != null));
+ Contract.Ensures(Contract.Result<Function>() != null);
+
+ List<Variable> args = new List<Variable>();
+ for (int i = 0; i < types.Length - 1; ++i)
+ args.Add(new Formal(Token.NoToken,
+ new TypedIdent(Token.NoToken, "arg" + i, cce.NonNull(types[i])),
+ true));
+ Formal result = new Formal(Token.NoToken,
+ new TypedIdent(Token.NoToken, "res",
+ cce.NonNull(types)[types.Length - 1]),
+ false);
+ return new Function(Token.NoToken, name, new List<TypeVariable>(typeParams), args, result);
+ }
+
+ public static Function BoogieFunction(string name, params Type[] types) {
+ Contract.Requires(types != null);
+ Contract.Requires(name != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return BoogieFunction(name, new List<TypeVariable/*!*/>(), types);
+ }
+
+ // boogie function where all arguments and the result have the same type U
+ public static Function UniformBoogieFunction(string name, int arity, Type U) {
+ Contract.Requires(U != null);
+ Contract.Requires(name != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ Type[]/*!*/ types = new Type[arity + 1];
+ for (int i = 0; i < arity + 1; ++i)
+ types[i] = U;
+ return BoogieFunction(name, types);
+ }
+
+ public static List<VCExprVar/*!*/>/*!*/ GenVarsForInParams(Function fun, VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(fun != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+ List<VCExprVar/*!*/>/*!*/ arguments = new List<VCExprVar/*!*/>(fun.InParams.Count);
+ foreach (Formal/*!*/ f in fun.InParams) {
+ Contract.Assert(f != null);
+ VCExprVar/*!*/ var = gen.Variable(f.Name, f.TypedIdent.Type);
+ arguments.Add(var);
+ }
+ return arguments;
+ }
+
+ public static List<T/*!*/>/*!*/ ToList<T>(params T[] args) where T : class{
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<T>>()));
+ return new List<T>(args);
+ }
+
+ public static List<VCExpr/*!*/>/*!*/ ToVCExprList(List<VCExprVar/*!*/>/*!*/ list) {
+ Contract.Requires(cce.NonNullElements(list));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
+ return new List<VCExpr>(list);
+ }
+
+ public static List<VCExprVar/*!*/>/*!*/ VarVector(string baseName, int num, Type type, VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(type != null);
+ Contract.Requires(baseName != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+ List<VCExprVar/*!*/>/*!*/ res = new List<VCExprVar/*!*/>(num);
+ for (int i = 0; i < num; ++i)
+ res.Add(gen.Variable(baseName + i, type));
+ return res;
+ }
+
+ public static List<VCExprVar/*!*/>/*!*/ VarVector(string baseName, List<Type/*!*/>/*!*/ types, VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(baseName != null);
+ Contract.Requires(cce.NonNullElements(types));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+ List<VCExprVar/*!*/>/*!*/ res = new List<VCExprVar/*!*/>(types.Count);
+ for (int i = 0; i < types.Count; ++i)
+ res.Add(gen.Variable(baseName + i, types[i]));
+ return res;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ internal struct TypeCtorRepr {
+ // function that represents the application of the type constructor
+ // to smaller types
+ public readonly Function/*!*/ Ctor;
+ // left-inverse functions that extract the subtypes of a compound type
+ public readonly List<Function/*!*/>/*!*/ Dtors;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Ctor != null);
+ Contract.Invariant(cce.NonNullElements(Dtors));
+ }
+
+
+ public TypeCtorRepr(Function ctor, List<Function/*!*/>/*!*/ dtors) {
+ Contract.Requires(ctor != null);
+ Contract.Requires(cce.NonNullElements(dtors));
+ Contract.Requires(ctor.InParams.Count == dtors.Count);
+ this.Ctor = ctor;
+ this.Dtors = dtors;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ // The class responsible for creating and keeping track of all
+ // axioms related to the type system. This abstract class is made
+ // concrete in two subclasses, one for type erasure with type
+ // premisses in quantifiers (the semantic approach), and one for
+ // type erasure with explicit type arguments of polymorphic
+ // functions (the syntacted approach).
+ [ContractClass(typeof(TypeAxiomBuilderContracts))]
+ public abstract class TypeAxiomBuilder : ICloneable {
+
+ protected readonly VCExpressionGenerator/*!*/ Gen;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Gen != null);
+ Contract.Invariant(Ctor != null);
+
+ }
+
+
+ internal abstract MapTypeAbstractionBuilder/*!*/ MapTypeAbstracter {
+ get;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Type Axioms
+
+ // list in which all typed axioms are collected
+ private readonly List<VCExpr/*!*/>/*!*/ AllTypeAxioms;
+ [ContractInvariantMethod]
+ void AllTypeAxiomsInvariantMethod() {
+ Contract.Invariant(cce.NonNullElements(AllTypeAxioms));
+ }
+
+ // list in which type axioms are incrementally collected
+ private readonly List<VCExpr/*!*/>/*!*/ IncTypeAxioms;
+ [ContractInvariantMethod]
+ void IncTypeAxiomsInvariantMethod() {
+ Contract.Invariant(cce.NonNullElements(IncTypeAxioms));
+ }
+
+ internal void AddTypeAxiom(VCExpr axiom) {
+ Contract.Requires(axiom != null);
+ AllTypeAxioms.Add(axiom);
+ IncTypeAxioms.Add(axiom);
+ }
+
+ // Return all axioms that were added since the last time NewAxioms
+ // was called
+ public VCExpr GetNewAxioms() {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr/*!*/ res = Gen.NAry(VCExpressionGenerator.AndOp, IncTypeAxioms);
+ IncTypeAxioms.Clear();
+ return res;
+ }
+
+ // mapping from a type to its constructor number/index
+ private readonly Function/*!*/ Ctor;
+ private BigNum CurrentCtorNum;
+
+ private VCExpr GenCtorAssignment(VCExpr typeRepr) {
+ Contract.Requires(typeRepr != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (CommandLineOptions.Clo.TypeEncodingMethod
+ == CommandLineOptions.TypeEncoding.None)
+ return VCExpressionGenerator.True;
+
+ VCExpr res = Gen.Eq(Gen.Function(Ctor, typeRepr),
+ Gen.Integer(CurrentCtorNum));
+ CurrentCtorNum = CurrentCtorNum + BigNum.ONE;
+ return res;
+ }
+
+ private VCExpr GenCtorAssignment(Function typeRepr) {
+ Contract.Requires(typeRepr != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (CommandLineOptions.Clo.TypeEncodingMethod
+ == CommandLineOptions.TypeEncoding.None)
+ return VCExpressionGenerator.True;
+
+ List<VCExprVar/*!*/>/*!*/ quantifiedVars = HelperFuns.GenVarsForInParams(typeRepr, Gen);
+ VCExpr/*!*/ eq =
+ GenCtorAssignment(Gen.Function(typeRepr,
+ HelperFuns.ToVCExprList(quantifiedVars)));
+
+ if (typeRepr.InParams.Count == 0)
+ return eq;
+
+ return Gen.Forall(quantifiedVars, new List<VCTrigger/*!*/>(),
+ "ctor:" + typeRepr.Name, -1, eq);
+ }
+
+ // generate an axiom (forall x0, x1, ... :: invFun(fun(x0, x1, ...) == xi)
+ protected VCExpr GenLeftInverseAxiom(Function fun, Function invFun, int dtorNum) {
+ Contract.Requires(invFun != null);
+ Contract.Requires(fun != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCExprVar/*!*/>/*!*/ quantifiedVars = HelperFuns.GenVarsForInParams(fun, Gen);
+ Contract.Assert(cce.NonNullElements(quantifiedVars));
+
+ VCExpr/*!*/ funApp = Gen.Function(fun, HelperFuns.ToVCExprList(quantifiedVars));
+ VCExpr/*!*/ lhs = Gen.Function(invFun, funApp);
+ VCExpr/*!*/ rhs = quantifiedVars[dtorNum];
+ VCExpr/*!*/ eq = Gen.Eq(lhs, rhs);
+
+ List<VCTrigger/*!*/>/*!*/ triggers = HelperFuns.ToList(Gen.Trigger(true, HelperFuns.ToList(funApp)));
+ Contract.Assert(cce.NonNullElements(triggers));
+ return Gen.Forall(quantifiedVars, triggers, "typeInv:" + invFun.Name, -1, eq);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ // the type of everything that is not int, bool, or a type
+ [ContractInvariantMethod]
+ void ObjectInvariant2() {
+ Contract.Invariant(UDecl != null);
+ Contract.Invariant(TDecl != null);
+ Contract.Invariant(U != null);
+ Contract.Invariant(T != null);
+ }
+
+ private readonly TypeCtorDecl/*!*/ UDecl;
+ public readonly Type/*!*/ U;
+
+ // the type of types
+ private readonly TypeCtorDecl/*!*/ TDecl;
+ public readonly Type/*!*/ T;
+
+ public abstract Type/*!*/ TypeAfterErasure(Type/*!*/ type);
+ [Pure]
+ public abstract bool UnchangedType(Type/*!*/ type);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Symbols for representing types
+
+ private readonly IDictionary<Type/*!*/, VCExpr/*!*/>/*!*/ BasicTypeReprs;
+ [ContractInvariantMethod]
+ void BasicTypeReprsInvariantMethod() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(BasicTypeReprs));
+ }
+
+ private VCExpr GetBasicTypeRepr(Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires(type.IsBasic || type.IsBv);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr res;
+ if (!BasicTypeReprs.TryGetValue(type, out res)) {
+ res = Gen.Function(HelperFuns.BoogieFunction(type.ToString() + "Type", T));
+ AddTypeAxiom(GenCtorAssignment(res));
+ BasicTypeReprs.Add(type, res);
+ }
+ return cce.NonNull(res);
+ }
+
+ private readonly IDictionary<TypeCtorDecl/*!*/, TypeCtorRepr/*!*/>/*!*/ TypeCtorReprs;
+ [ContractInvariantMethod]
+ void TypeCtorReprsInvariantMethod() {
+ Contract.Invariant(TypeCtorReprs != null);
+ }
+
+ internal TypeCtorRepr GetTypeCtorReprStruct(TypeCtorDecl decl) {
+ Contract.Requires(decl != null);
+ TypeCtorRepr reprSet;
+ if (!TypeCtorReprs.TryGetValue(decl, out reprSet)) {
+ Function/*!*/ ctor = HelperFuns.UniformBoogieFunction(decl.Name + "Type", decl.Arity, T);
+ Contract.Assert(ctor != null);
+ AddTypeAxiom(GenCtorAssignment(ctor));
+
+ List<Function/*!*/>/*!*/ dtors = new List<Function/*!*/>(decl.Arity);
+ for (int i = 0; i < decl.Arity; ++i) {
+ Function/*!*/ dtor = HelperFuns.UniformBoogieFunction(decl.Name + "TypeInv" + i, 1, T);
+ dtors.Add(dtor);
+ AddTypeAxiom(GenLeftInverseAxiom(ctor, dtor, i));
+ }
+
+ reprSet = new TypeCtorRepr(ctor, dtors);
+ TypeCtorReprs.Add(decl, reprSet);
+ }
+
+ return reprSet;
+ }
+
+ public Function GetTypeCtorRepr(TypeCtorDecl decl) {
+ Contract.Requires(decl != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return GetTypeCtorReprStruct(decl).Ctor;
+ }
+
+ public Function GetTypeDtor(TypeCtorDecl decl, int num) {
+ Contract.Requires(decl != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return GetTypeCtorReprStruct(decl).Dtors[num];
+ }
+
+ // mapping from free type variables to VCExpr variables
+ private readonly IDictionary<TypeVariable/*!*/, VCExprVar/*!*/>/*!*/ TypeVariableMapping;
+ [ContractInvariantMethod]
+ void TypeVariableMappingInvariantMethod() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(TypeVariableMapping));
+ }
+
+ public VCExprVar Typed2Untyped(TypeVariable var) {
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<VCExprVar>() != null);
+ VCExprVar res;
+ if (!TypeVariableMapping.TryGetValue(var, out res)) {
+ res = new VCExprVar(var.Name, T);
+ TypeVariableMapping.Add(var, res);
+ }
+ return cce.NonNull(res);
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Symbols for representing variables and constants
+
+ // Globally defined variables
+ private readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ Typed2UntypedVariables;
+ [ContractInvariantMethod]
+ void Typed2UntypedVariablesInvariantMethod() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(Typed2UntypedVariables));
+ }
+
+ // This method must only be used for free (unbound) variables
+ public VCExprVar Typed2Untyped(VCExprVar var) {
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<VCExprVar>() != null);
+ VCExprVar res = TryTyped2Untyped(var);
+ if (res == null) {
+ res = Gen.Variable(var.Name, TypeAfterErasure(var.Type));
+ Typed2UntypedVariables.Add(var, res);
+ AddVarTypeAxiom(res, var.Type);
+ }
+ return cce.NonNull(res);
+ }
+
+ /// <summary>
+ /// This method is like Typed2Untyped, except in the case where the given variables
+ /// doesn't exist in the mapping. For that case, this method returns null whereas
+ /// Typed2Untyped creates a new variable that it adds to the mapping.
+ /// </summary>
+ /// <param name="var"></param>
+ /// <returns></returns>
+ public VCExprVar TryTyped2Untyped(VCExprVar var) {
+ Contract.Requires(var != null);
+ VCExprVar res;
+ if (Typed2UntypedVariables.TryGetValue(var, out res)) {
+ return res;
+ } else {
+ return null;
+ }
+ }
+
+ protected abstract void AddVarTypeAxiom(VCExprVar/*!*/ var, Type/*!*/ originalType);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Translation function from types to their term representation
+
+ public VCExpr Type2Term(Type type, IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ varMapping) {
+ Contract.Requires(type != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(varMapping));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ //
+ if (type.IsBasic || type.IsBv) {
+ //
+ return GetBasicTypeRepr(type);
+ //
+ } else if (type.IsCtor) {
+ //
+ CtorType ctype = type.AsCtor;
+ Function/*!*/ repr = GetTypeCtorRepr(ctype.Decl);
+ List<VCExpr/*!*/>/*!*/ args = new List<VCExpr/*!*/>(ctype.Arguments.Count);
+ foreach (Type/*!*/ t in ctype.Arguments.ToArray()) {
+ Contract.Assert(t != null);
+ args.Add(Type2Term(t, varMapping));
+ }
+ return Gen.Function(repr, args);
+ //
+ } else if (type.IsVariable) {
+ //
+ VCExpr res;
+ if (!varMapping.TryGetValue(type.AsVariable, out res))
+ // then the variable is free and we bind it at this point to a term
+ // variable
+ res = Typed2Untyped(type.AsVariable);
+ return cce.NonNull(res);
+ //
+ } else if (type.IsMap) {
+ //
+ return Type2Term(MapTypeAbstracter.AbstractMapType(type.AsMap), varMapping);
+ //
+ } else {
+ System.Diagnostics.Debug.Fail("Don't know how to handle this type: " + type);
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // please the compiler
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public TypeAxiomBuilder(VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ this.Gen = gen;
+ AllTypeAxioms = new List<VCExpr/*!*/>();
+ IncTypeAxioms = new List<VCExpr/*!*/>();
+ BasicTypeReprs = new Dictionary<Type/*!*/, VCExpr/*!*/>();
+ CurrentCtorNum = BigNum.ZERO;
+ TypeCtorReprs = new Dictionary<TypeCtorDecl/*!*/, TypeCtorRepr>();
+ TypeVariableMapping = new Dictionary<TypeVariable/*!*/, VCExprVar/*!*/>();
+ Typed2UntypedVariables = new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>();
+
+ TypeCtorDecl/*!*/ uDecl = new TypeCtorDecl(Token.NoToken, "U", 0);
+ UDecl = uDecl;
+ Type/*!*/ u = new CtorType(Token.NoToken, uDecl, new List<Type>());
+ U = u;
+
+ TypeCtorDecl/*!*/ tDecl = new TypeCtorDecl(Token.NoToken, "T", 0);
+ TDecl = tDecl;
+ Type/*!*/ t = new CtorType(Token.NoToken, tDecl, new List<Type>());
+ T = t;
+
+ Ctor = HelperFuns.BoogieFunction("Ctor", t, Type.Int);
+ }
+
+ public virtual void Setup() {
+ GetBasicTypeRepr(Type.Int);
+ GetBasicTypeRepr(Type.Real);
+ GetBasicTypeRepr(Type.Bool);
+ }
+
+ // constructor to allow cloning
+ internal TypeAxiomBuilder(TypeAxiomBuilder builder) {
+ Contract.Requires(builder != null);
+ Gen = builder.Gen;
+ AllTypeAxioms = new List<VCExpr/*!*/>(builder.AllTypeAxioms);
+ IncTypeAxioms = new List<VCExpr/*!*/>(builder.IncTypeAxioms);
+
+ UDecl = builder.UDecl;
+ U = builder.U;
+
+ TDecl = builder.TDecl;
+ T = builder.T;
+
+ Ctor = builder.Ctor;
+ CurrentCtorNum = builder.CurrentCtorNum;
+
+ BasicTypeReprs = new Dictionary<Type/*!*/, VCExpr/*!*/>(builder.BasicTypeReprs);
+ TypeCtorReprs = new Dictionary<TypeCtorDecl/*!*/, TypeCtorRepr>(builder.TypeCtorReprs);
+
+ TypeVariableMapping =
+ new Dictionary<TypeVariable/*!*/, VCExprVar/*!*/>(builder.TypeVariableMapping);
+ Typed2UntypedVariables =
+ new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>(builder.Typed2UntypedVariables);
+ }
+
+ public abstract Object/*!*/ Clone();
+ }
+
+ [ContractClassFor(typeof(TypeAxiomBuilder))]
+ public abstract class TypeAxiomBuilderContracts : TypeAxiomBuilder {
+ public TypeAxiomBuilderContracts()
+ : base((VCExpressionGenerator)null) {
+ }
+ internal override MapTypeAbstractionBuilder MapTypeAbstracter {
+ get {
+ Contract.Ensures(Contract.Result<MapTypeAbstractionBuilder>() != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ public override Type TypeAfterErasure(Type type) {
+ Contract.Requires(type != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+
+ public override bool UnchangedType(Type type) {
+ Contract.Requires(type != null);
+ throw new NotImplementedException();
+ }
+
+ protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
+ Contract.Requires(var != null);
+ Contract.Requires(originalType != null);
+ throw new NotImplementedException();
+ }
+
+ public override object Clone() {
+ Contract.Ensures(Contract.Result<object>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ // Subclass of the TypeAxiomBuilder that provides all functionality
+ // to deal with native sorts of a theorem prover (that are the only
+ // types left after erasing all other types). Currently, these are:
+ //
+ // U ... sort of all individuals/objects/values
+ // T ... sort of all types
+ // int ... integers
+ // bool ... booleans
+
+ [ContractClass(typeof(TypeAxiomBuilderIntBoolUContracts))]
+ public abstract class TypeAxiomBuilderIntBoolU : TypeAxiomBuilder {
+
+ public TypeAxiomBuilderIntBoolU(VCExpressionGenerator gen)
+ : base(gen) {
+ Contract.Requires(gen != null);
+
+ TypeCasts = new Dictionary<Type/*!*/, TypeCastSet>();
+ }
+
+ // constructor to allow cloning
+ internal TypeAxiomBuilderIntBoolU(TypeAxiomBuilderIntBoolU builder)
+ : base(builder) {
+ Contract.Requires(builder != null);
+
+ TypeCasts = new Dictionary<Type/*!*/, TypeCastSet>(builder.TypeCasts);
+ }
+
+ public override void Setup() {
+ base.Setup();
+
+ GetTypeCasts(Type.Int);
+ GetTypeCasts(Type.Real);
+ GetTypeCasts(Type.Bool);
+ }
+
+ // generate inverse axioms for casts (castToU(castFromU(x)) = x, under certain premisses)
+ protected abstract VCExpr/*!*/ GenReverseCastAxiom(Function/*!*/ castToU, Function/*!*/ castFromU);
+
+ protected VCExpr GenReverseCastEq(Function castToU, Function castFromU, out VCExprVar var, out List<VCTrigger/*!*/>/*!*/ triggers) {
+ Contract.Requires((castFromU != null));
+ Contract.Requires((castToU != null));
+ Contract.Ensures((cce.NonNullElements(Contract.ValueAtReturn(out triggers))));
+ Contract.Ensures(Contract.ValueAtReturn(out var) != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ var = Gen.Variable("x", U);
+
+ VCExpr inner = Gen.Function(castFromU, var);
+ VCExpr lhs = Gen.Function(castToU, inner);
+ triggers = HelperFuns.ToList(Gen.Trigger(true, HelperFuns.ToList(inner)));
+
+ return Gen.Eq(lhs, var);
+ }
+
+ protected abstract VCExpr/*!*/ GenCastTypeAxioms(Function/*!*/ castToU, Function/*!*/ castFromU);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // storage of type casts for types that are supposed to be left over in the
+ // VCs (like int, bool, bitvectors)
+
+ private readonly IDictionary<Type/*!*/, TypeCastSet/*!*/>/*!*/ TypeCasts;
+ [ContractInvariantMethod]
+ void TypeCastsInvariantMethod() {
+ Contract.Invariant(TypeCasts != null);
+ }
+
+ private TypeCastSet GetTypeCasts(Type type) {
+ Contract.Requires(type != null);
+ TypeCastSet res;
+ if (!TypeCasts.TryGetValue(type, out res)) {
+ Function/*!*/ castToU = HelperFuns.BoogieFunction(type.ToString() + "_2_U", type, U);
+ Function/*!*/ castFromU = HelperFuns.BoogieFunction("U_2_" + type.ToString(), U, type);
+
+ AddTypeAxiom(GenLeftInverseAxiom(castToU, castFromU, 0));
+ AddTypeAxiom(GenReverseCastAxiom(castToU, castFromU));
+ AddTypeAxiom(GenCastTypeAxioms(castToU, castFromU));
+
+ res = new TypeCastSet(castToU, castFromU);
+ TypeCasts.Add(type, res);
+ }
+ return res;
+ }
+ [Pure]
+ public Function CastTo(Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires(UnchangedType(type));
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return GetTypeCasts(type).CastFromU;
+ }
+
+ public Function CastFrom(Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires((UnchangedType(type)));
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return GetTypeCasts(type).CastToU;
+ }
+
+ private struct TypeCastSet {
+ public readonly Function/*!*/ CastToU;
+ public readonly Function/*!*/ CastFromU;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(CastToU != null);
+ Contract.Invariant(CastFromU != null);
+ }
+
+
+ public TypeCastSet(Function castToU, Function castFromU) {
+ Contract.Requires(castFromU != null);
+ Contract.Requires(castToU != null);
+ CastToU = castToU;
+ CastFromU = castFromU;
+ }
+ }
+
+ public bool IsCast(Function fun) {
+ Contract.Requires(fun != null);
+ if (fun.InParams.Count != 1)
+ return false;
+ Type/*!*/ inType = cce.NonNull(fun.InParams[0]).TypedIdent.Type;
+ if (inType.Equals(U)) {
+ Type/*!*/ outType = cce.NonNull(fun.OutParams[0]).TypedIdent.Type;
+ if (!TypeCasts.ContainsKey(outType))
+ return false;
+ return fun.Equals(CastTo(outType));
+ } else {
+ if (!TypeCasts.ContainsKey(inType))
+ return false;
+ Type/*!*/ outType = cce.NonNull(fun.OutParams[0]).TypedIdent.Type;
+ if (!outType.Equals(U))
+ return false;
+ return fun.Equals(CastFrom(inType));
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // the only types that we allow in "untyped" expressions are U,
+ // Type.Int, Type.Real, and Type.Bool
+
+ public override Type TypeAfterErasure(Type type) {
+ //Contract.Requires(type != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+ if (UnchangedType(type))
+ // these types are kept
+ return type;
+ else
+ // all other types are replaced by U
+ return U;
+ }
+
+ [Pure]
+ public override bool UnchangedType(Type type) {
+ //Contract.Requires(type != null);
+ return type.IsInt || type.IsReal || type.IsBool || type.IsBv || (type.IsMap && CommandLineOptions.Clo.MonomorphicArrays);
+ }
+
+ public VCExpr Cast(VCExpr expr, Type toType) {
+ Contract.Requires(toType != null);
+ Contract.Requires(expr != null);
+ Contract.Requires((expr.Type.Equals(U) || UnchangedType(expr.Type)));
+ Contract.Requires((toType.Equals(U) || UnchangedType(toType)));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (expr.Type.Equals(toType))
+ return expr;
+
+ if (toType.Equals(U)) {
+ return Gen.Function(CastFrom(expr.Type), expr);
+ } else {
+ Contract.Assert(expr.Type.Equals(U));
+ return Gen.Function(CastTo(toType), expr);
+ }
+ }
+
+ public List<VCExpr/*!*/>/*!*/ CastSeq(List<VCExpr/*!*/>/*!*/ exprs, Type toType) {
+ Contract.Requires(toType != null);
+ Contract.Requires(cce.NonNullElements(exprs));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
+ List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>(exprs.Count);
+ foreach (VCExpr/*!*/ expr in exprs) {
+ Contract.Assert(expr != null);
+ res.Add(Cast(expr, toType));
+ }
+ return res;
+ }
+
+
+ }
+
+ [ContractClassFor(typeof(TypeAxiomBuilderIntBoolU))]
+ public abstract class TypeAxiomBuilderIntBoolUContracts : TypeAxiomBuilderIntBoolU {
+ public TypeAxiomBuilderIntBoolUContracts()
+ : base((TypeAxiomBuilderIntBoolU)null) {
+ }
+ protected override VCExpr GenReverseCastAxiom(Function castToU, Function castFromU) {
+ Contract.Requires(castToU != null);
+ Contract.Requires(castFromU != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ throw new NotImplementedException();
+ }
+
+ protected override VCExpr GenCastTypeAxioms(Function castToU, Function castFromU) {
+ Contract.Requires(castFromU != null);
+ Contract.Requires(castToU != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ throw new NotImplementedException();
+ }
+
+ internal override MapTypeAbstractionBuilder MapTypeAbstracter {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+
+ protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
+ throw new NotImplementedException();
+ }
+
+ public override object Clone() {
+ throw new NotImplementedException();
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Class for computing most general abstractions of map types. An abstraction
+ // of a map type t is a maptype t' in which closed proper subtypes have been replaced
+ // with type variables. E.g., an abstraction of <a>[C a, int]a would be <a>[C a, b]a.
+ // We subsequently consider most general abstractions as ordinary parametrised types,
+ // i.e., "<a>[C a, b]a" would be considered as a type "M b" with polymorphically typed
+ // access functions
+ //
+ // select<a,b>(M b, C a, b) returns (a)
+ // store<a,b>(M b, C a, b, a) returns (M b)
+ [ContractClass(typeof(MapTypeAbstractionBuilderContracts))]
+ internal abstract class MapTypeAbstractionBuilder {
+
+ protected readonly TypeAxiomBuilder/*!*/ AxBuilder;
+ protected readonly VCExpressionGenerator/*!*/ Gen;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilder != null);
+ Contract.Invariant(Gen != null);
+ }
+
+
+ internal MapTypeAbstractionBuilder(TypeAxiomBuilder axBuilder, VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+ this.AxBuilder = axBuilder;
+ this.Gen = gen;
+ AbstractionVariables = new List<TypeVariable/*!*/>();
+ ClassRepresentations = new Dictionary<MapType/*!*/, MapTypeClassRepresentation>();
+ }
+
+ // constructor for cloning
+ internal MapTypeAbstractionBuilder(TypeAxiomBuilder axBuilder, VCExpressionGenerator gen, MapTypeAbstractionBuilder builder) {
+ Contract.Requires(builder != null);
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+ this.AxBuilder = axBuilder;
+ this.Gen = gen;
+ AbstractionVariables =
+ new List<TypeVariable/*!*/>(builder.AbstractionVariables);
+ ClassRepresentations =
+ new Dictionary<MapType/*!*/, MapTypeClassRepresentation>(builder.ClassRepresentations);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Type variables used in the abstractions. We use the same variables in the
+ // same order in all abstractions in order to obtain comparable abstractions
+ // (equals, hashcode)
+
+ private readonly List<TypeVariable/*!*/>/*!*/ AbstractionVariables;
+ [ContractInvariantMethod]
+ void AbstractionVariablesInvariantMethod() {
+ Contract.Invariant(cce.NonNullElements(AbstractionVariables));
+ }
+
+ private TypeVariable AbstractionVariable(int num) {
+ Contract.Requires((num >= 0));
+ Contract.Ensures(Contract.Result<TypeVariable>() != null);
+ while (AbstractionVariables.Count <= num)
+ AbstractionVariables.Add(new TypeVariable(Token.NoToken,
+ "aVar" + AbstractionVariables.Count));
+ return AbstractionVariables[num];
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // The untyped representation of a class of map types, i.e., of a map type
+ // <a0, a1, ...>[A0, A1, ...] R, where the argument types and the result type
+ // possibly contain free type variables. For each such class, a separate type
+ // constructor and separate select/store functions are introduced.
+
+ protected struct MapTypeClassRepresentation {
+ public readonly TypeCtorDecl/*!*/ RepresentingType;
+ public readonly Function/*!*/ Select;
+ public readonly Function/*!*/ Store;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(RepresentingType != null);
+ Contract.Invariant(Select != null);
+ Contract.Invariant(Store != null);
+ }
+
+
+ public MapTypeClassRepresentation(TypeCtorDecl representingType, Function select, Function store) {
+ Contract.Requires(store != null);
+ Contract.Requires(select != null);
+ Contract.Requires(representingType != null);
+ this.RepresentingType = representingType;
+ this.Select = select;
+ this.Store = store;
+ }
+ }
+
+ private readonly IDictionary<MapType/*!*/, MapTypeClassRepresentation/*!*/>/*!*/ ClassRepresentations;
+ [ContractInvariantMethod]
+ void ClassRepresentationsInvariantMethod() {
+ Contract.Invariant(ClassRepresentations != null);
+ }
+
+ protected MapTypeClassRepresentation GetClassRepresentation(MapType abstractedType) {
+ Contract.Requires(abstractedType != null);
+ MapTypeClassRepresentation res;
+ if (!ClassRepresentations.TryGetValue(abstractedType, out res)) {
+ int num = ClassRepresentations.Count;
+ TypeCtorDecl/*!*/ synonym =
+ new TypeCtorDecl(Token.NoToken, "MapType" + num, abstractedType.FreeVariables.Count);
+
+ Function/*!*/ select, store;
+ GenSelectStoreFunctions(abstractedType, synonym, out select, out store);
+
+ res = new MapTypeClassRepresentation(synonym, select, store);
+ ClassRepresentations.Add(abstractedType, res);
+ }
+ return res;
+ }
+
+ // the actual select and store functions are generated by the
+ // concrete subclasses of this class
+ protected abstract void GenSelectStoreFunctions(MapType/*!*/ abstractedType, TypeCtorDecl/*!*/ synonymDecl, out Function/*!*/ select, out Function/*!*/ store);
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ public Function Select(MapType rawType, out List<Type> instantiations) {
+ Contract.Requires((rawType != null));
+ Contract.Ensures(Contract.ValueAtReturn(out instantiations) != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return AbstractAndGetRepresentation(rawType, out instantiations).Select;
+ }
+
+ public Function Store(MapType rawType, out List<Type> instantiations) {
+ Contract.Requires((rawType != null));
+ Contract.Ensures(Contract.ValueAtReturn(out instantiations) != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ return AbstractAndGetRepresentation(rawType, out instantiations).Store;
+ }
+
+ private MapTypeClassRepresentation
+ AbstractAndGetRepresentation(MapType rawType, out List<Type> instantiations) {
+ Contract.Requires((rawType != null));
+ Contract.Ensures(Contract.ValueAtReturn(out instantiations) != null);
+ instantiations = new List<Type>();
+ MapType/*!*/ abstraction = ThinOutMapType(rawType, instantiations);
+ return GetClassRepresentation(abstraction);
+ }
+
+ public CtorType AbstractMapType(MapType rawType) {
+ Contract.Requires(rawType != null);
+ Contract.Ensures(Contract.Result<CtorType>() != null);
+ List<Type>/*!*/ instantiations = new List<Type>();
+ MapType/*!*/ abstraction = ThinOutMapType(rawType, instantiations);
+
+ MapTypeClassRepresentation repr = GetClassRepresentation(abstraction);
+ Contract.Assume(repr.RepresentingType.Arity == instantiations.Count);
+ return new CtorType(Token.NoToken, repr.RepresentingType, instantiations);
+ }
+
+ // TODO: cache the result of this operation
+ protected MapType ThinOutMapType(MapType rawType, List<Type> instantiations) {
+ Contract.Requires(instantiations != null);
+ Contract.Requires(rawType != null);
+ Contract.Ensures(Contract.Result<MapType>() != null);
+ List<Type>/*!*/ newArguments = new List<Type>();
+ foreach (Type/*!*/ subtype in rawType.Arguments.ToList()) {
+ Contract.Assert(subtype != null);
+ newArguments.Add(ThinOutType(subtype, rawType.TypeParameters,
+ instantiations));
+ }
+ Type/*!*/ newResult = ThinOutType(rawType.Result, rawType.TypeParameters,
+ instantiations);
+ return new MapType(Token.NoToken, rawType.TypeParameters, newArguments, newResult);
+ }
+
+ // the instantiations of inserted type variables, the order corresponds to the order in which "AbstractionVariable(int)" delivers variables
+ private Type/*!*/ ThinOutType(Type rawType, List<TypeVariable> boundTypeParams, List<Type> instantiations) {
+ Contract.Requires(instantiations != null);
+ Contract.Requires(boundTypeParams != null);
+ Contract.Requires(rawType != null);
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(rawType))
+ return rawType;
+
+ if (rawType.FreeVariables.All(var => !boundTypeParams.Contains(var))) {
+ // Bingo!
+ // if the type does not contain any bound variables, we can simply
+ // replace it with a type variable
+ TypeVariable/*!*/ abstractionVar = AbstractionVariable(instantiations.Count);
+ Contract.Assume(!boundTypeParams.Contains(abstractionVar));
+ instantiations.Add(rawType);
+ return abstractionVar;
+ }
+
+ if (rawType.IsVariable) {
+ //
+ // then the variable has to be bound, we cannot do anything
+ TypeVariable/*!*/ rawVar = rawType.AsVariable;
+ Contract.Assume(boundTypeParams.Contains(rawVar));
+ return rawVar;
+ //
+ } else if (rawType.IsMap) {
+ //
+ // recursively abstract this map type and continue abstracting
+ CtorType/*!*/ abstraction = AbstractMapType(rawType.AsMap);
+ return ThinOutType(abstraction, boundTypeParams, instantiations);
+ //
+ } else if (rawType.IsCtor) {
+ //
+ // traverse the subtypes
+ CtorType/*!*/ rawCtorType = rawType.AsCtor;
+ List<Type>/*!*/ newArguments = new List<Type>();
+ foreach (Type/*!*/ subtype in rawCtorType.Arguments.ToList()) {
+ Contract.Assert(subtype != null);
+ newArguments.Add(ThinOutType(subtype, boundTypeParams,
+ instantiations));
+ }
+ return new CtorType(Token.NoToken, rawCtorType.Decl, newArguments);
+ //
+ } else {
+ System.Diagnostics.Debug.Fail("Don't know how to handle this type: " + rawType);
+ return rawType; // compiler appeasement policy
+ }
+ }
+
+ }
+ [ContractClassFor(typeof(MapTypeAbstractionBuilder))]
+ internal abstract class MapTypeAbstractionBuilderContracts : MapTypeAbstractionBuilder {
+ public MapTypeAbstractionBuilderContracts()
+ : base(null, null) {
+ }
+ protected override void GenSelectStoreFunctions(MapType abstractedType, TypeCtorDecl synonymDecl, out Function select, out Function store) {
+ Contract.Requires(abstractedType != null);
+ Contract.Requires(synonymDecl != null);
+ Contract.Ensures(Contract.ValueAtReturn(out select) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out store) != null);
+
+ throw new NotImplementedException();
+ }
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ public class VariableBindings {
+ public readonly IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ VCExprVarBindings;
+ public readonly IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ TypeVariableBindings;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(VCExprVarBindings));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(TypeVariableBindings));
+ }
+
+
+ public VariableBindings(IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ vcExprVarBindings,
+ IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ typeVariableBindings) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(vcExprVarBindings));
+ Contract.Requires(cce.NonNullDictionaryAndValues(typeVariableBindings));
+ this.VCExprVarBindings = vcExprVarBindings;
+ this.TypeVariableBindings = typeVariableBindings;
+ }
+
+ public VariableBindings() :
+ this(new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>(),
+ new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>()) {
+ }
+
+ public VariableBindings Clone() {
+ Contract.Ensures(Contract.Result<VariableBindings>() != null);
+ IDictionary<VCExprVar/*!*/, VCExprVar/*!*/>/*!*/ newVCExprVarBindings =
+ new Dictionary<VCExprVar/*!*/, VCExprVar/*!*/>();
+ foreach (KeyValuePair<VCExprVar/*!*/, VCExprVar/*!*/> pair in VCExprVarBindings) {
+ Contract.Assert(cce.NonNullElements(pair));
+ newVCExprVarBindings.Add(pair);
+ }
+ IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ newTypeVariableBindings =
+ new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>();
+ foreach (KeyValuePair<TypeVariable/*!*/, VCExpr/*!*/> pair in TypeVariableBindings) {
+ Contract.Assert(cce.NonNullElements(pair));
+ newTypeVariableBindings.Add(pair);
+ }
+ return new VariableBindings(newVCExprVarBindings, newTypeVariableBindings);
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ // The central class for turning types VCExprs into untyped
+ // VCExprs. This class makes use of the type axiom builder to manage
+ // the available types and symbols.
+ [ContractClass(typeof(TypeEraserContracts))]
+ public abstract class TypeEraser : MutatingVCExprVisitor<VariableBindings/*!*/> {
+
+ protected readonly TypeAxiomBuilderIntBoolU/*!*/ AxBuilder;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilder != null);
+ }
+
+
+ protected abstract OpTypeEraser/*!*/ OpEraser {
+ get;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public TypeEraser(TypeAxiomBuilderIntBoolU axBuilder, VCExpressionGenerator gen)
+ : base(gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+ AxBuilder = axBuilder;
+ }
+
+ public VCExpr Erase(VCExpr expr, int polarity) {
+ Contract.Requires(expr != null);
+ Contract.Requires((polarity >= -1 && polarity <= 1));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ this.Polarity = polarity;
+ return Mutate(expr, new VariableBindings());
+ }
+
+ internal int Polarity = 1; // 1 for positive, -1 for negative, 0 for both
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr Visit(VCExprLiteral node, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Contract.Assume(node.Type == Type.Bool || node.Type == Type.Int || node.Type == Type.Real);
+ return node;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override bool AvoidVisit(VCExprNAry node, VariableBindings arg)
+ {
+ return node.Op.Equals(VCExpressionGenerator.AndOp) ||
+ node.Op.Equals(VCExpressionGenerator.OrOp);
+ }
+
+ public override VCExpr Visit(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExprOp/*!*/ op = node.Op;
+ if (op == VCExpressionGenerator.AndOp || op == VCExpressionGenerator.OrOp)
+ // more efficient on large conjunctions/disjunctions
+ return base.Visit(node, bindings);
+
+ // the visitor that handles all other operators
+ return node.Accept<VCExpr/*!*/, VariableBindings/*!*/>(OpEraser, bindings);
+ }
+
+ // this method is called by MutatingVCExprVisitor.Visit(VCExprNAry, ...)
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode, List<VCExpr/*!*/>/*!*/ newSubExprs, bool changed, VariableBindings/*!*/ bindings) {
+ //Contract.Requires(originalNode != null);
+ //Contract.Requires(cce.NonNullElements(newSubExprs));
+ //Contract.Requires(bindings != null);
+ Contract.Assume(originalNode.Op == VCExpressionGenerator.AndOp ||
+ originalNode.Op == VCExpressionGenerator.OrOp);
+ return Gen.Function(originalNode.Op,
+ AxBuilder.Cast(newSubExprs[0], Type.Bool),
+ AxBuilder.Cast(newSubExprs[1], Type.Bool));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr Visit(VCExprVar node, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExprVar res;
+ if (!bindings.VCExprVarBindings.TryGetValue(node, out res))
+ return AxBuilder.Typed2Untyped(node);
+ return cce.NonNull(res);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ protected bool IsUniversalQuantifier(VCExprQuantifier node) {
+ Contract.Requires(node != null);
+ return Polarity == 1 && node.Quan == Quantifier.EX ||
+ Polarity == -1 && node.Quan == Quantifier.ALL;
+ }
+
+ protected List<VCExprVar/*!*/>/*!*/ BoundVarsAfterErasure(List<VCExprVar/*!*/>/*!*/ oldBoundVars,
+ // the mapping between old and new variables
+ // is added to this bindings-object
+ VariableBindings/*!*/ bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(cce.NonNullElements(oldBoundVars));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+
+ List<VCExprVar/*!*/>/*!*/ newBoundVars = new List<VCExprVar/*!*/>(oldBoundVars.Count);
+ foreach (VCExprVar/*!*/ var in oldBoundVars) {
+ Type/*!*/ newType = AxBuilder.TypeAfterErasure(var.Type);
+ VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
+ newBoundVars.Add(newVar);
+ bindings.VCExprVarBindings.Add(var, newVar);
+ }
+ return newBoundVars;
+ }
+
+ // We check whether casts Int2U or Bool2U on the bound variables
+ // occur in triggers. In case a trigger like f(Int2U(x)) occurs,
+ // it may be better to give variable x the type U and remove the
+ // cast. The following method returns true if the quantifier
+ // should be translated again with a different typing
+ protected bool RedoQuantifier(VCExprQuantifier/*!*/ node,
+ VCExprQuantifier/*!*/ newNode,
+ // the bound vars that actually occur in the body or
+ // in any of the triggers
+ List<VCExprVar/*!*/>/*!*/ occurringVars,
+ VariableBindings/*!*/ oldBindings,
+ out VariableBindings/*!*/ newBindings,
+ out List<VCExprVar/*!*/>/*!*/ newBoundVars) {
+ Contract.Requires(node != null);
+ Contract.Requires(newNode != null);
+ Contract.Requires(cce.NonNullElements(occurringVars));
+ Contract.Requires(oldBindings != null);
+ Contract.Ensures(Contract.ValueAtReturn(out newBindings) != null);
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out newBoundVars)));
+ List<VCExprVar/*!*/> castVariables =
+ VariableCastCollector.FindCastVariables(node, newNode, AxBuilder);
+ if (castVariables.Count == 0) {
+ newBindings = oldBindings; // to make the compiler happy
+ newBoundVars = newNode.BoundVars; // to make the compiler happy
+ return false;
+ }
+
+ // redo everything with a different typing ...
+
+ newBindings = oldBindings.Clone();
+ newBoundVars = new List<VCExprVar/*!*/>(node.BoundVars.Count);
+ foreach (VCExprVar/*!*/ var in node.BoundVars) {
+ Contract.Assert(var != null);
+ Type/*!*/ newType =
+ castVariables.Contains(var) ? AxBuilder.U
+ : AxBuilder.TypeAfterErasure(var.Type);
+ Contract.Assert(newType != null);
+ VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
+ Contract.Assert(newVar != null);
+ newBoundVars.Add(newVar);
+ newBindings.VCExprVarBindings.Add(var, newVar);
+ }
+
+ return true;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr Visit(VCExprLet node, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VariableBindings/*!*/ newVarBindings = bindings.Clone();
+
+ List<VCExprVar/*!*/>/*!*/ newBoundVars = new List<VCExprVar/*!*/>(node.BoundVars.Count);
+ foreach (VCExprVar/*!*/ var in node.BoundVars) {
+ Type/*!*/ newType = AxBuilder.TypeAfterErasure(var.Type);
+ VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
+ newBoundVars.Add(newVar);
+ newVarBindings.VCExprVarBindings.Add(var, newVar);
+ }
+
+ List<VCExprLetBinding/*!*/>/*!*/ newbindings = new List<VCExprLetBinding/*!*/>(node.Length);
+ for (int i = 0; i < node.Length; ++i) {
+ VCExprLetBinding/*!*/ binding = node[i];
+ Contract.Assert(binding != null);
+ VCExprVar/*!*/ newVar = newBoundVars[i];
+ Type/*!*/ newType = newVar.Type;
+
+ VCExpr/*!*/ newE = AxBuilder.Cast(Mutate(binding.E, newVarBindings), newType);
+ newbindings.Add(Gen.LetBinding(newVar, newE));
+ }
+
+ VCExpr/*!*/ newbody = Mutate(node.Body, newVarBindings);
+ return Gen.Let(newbindings, newbody);
+ }
+ }
+
+ [ContractClassFor(typeof(TypeEraser))]
+ public abstract class TypeEraserContracts : TypeEraser {
+ public TypeEraserContracts()
+ : base(null, null) {
+ }
+ protected override OpTypeEraser OpEraser {
+ get {
+ Contract.Ensures(Contract.Result<OpTypeEraser>() != null);
+ throw new NotImplementedException();
+ }
+ }
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ public abstract class OpTypeEraser : StandardVCExprOpVisitor<VCExpr/*!*/, VariableBindings/*!*/> {
+
+ protected readonly TypeAxiomBuilderIntBoolU/*!*/ AxBuilder;
+
+ protected readonly TypeEraser/*!*/ Eraser;
+ protected readonly VCExpressionGenerator/*!*/ Gen;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilder != null);
+ Contract.Invariant(Eraser != null);
+ Contract.Invariant(Gen != null);
+ }
+
+
+ public OpTypeEraser(TypeEraser/*!*/ eraser, TypeAxiomBuilderIntBoolU/*!*/ axBuilder, VCExpressionGenerator/*!*/ gen) {
+ Contract.Requires(eraser != null);
+ Contract.Requires(axBuilder != null);
+ Contract.Requires(gen != null);
+ this.AxBuilder = axBuilder;
+ this.Eraser = eraser;
+ this.Gen = gen;
+ }
+
+ protected override VCExpr StandardResult(VCExprNAry node, VariableBindings bindings) {
+ //Contract.Requires(bindings != null);
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ System.Diagnostics.Debug.Fail("Don't know how to erase types in this expression: " + node);
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // to please the compiler
+ }
+
+ private List<VCExpr/*!*/>/*!*/ MutateSeq(VCExprNAry node, VariableBindings bindings, int newPolarity) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
+ int oldPolarity = Eraser.Polarity;
+ Eraser.Polarity = newPolarity;
+ List<VCExpr/*!*/>/*!*/ newArgs = Eraser.MutateSeq(node, bindings);
+ Eraser.Polarity = oldPolarity;
+ return newArgs;
+ }
+
+ private VCExpr CastArguments(VCExprNAry node, Type argType, VariableBindings bindings, int newPolarity) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(argType != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Gen.Function(node.Op,
+ AxBuilder.CastSeq(MutateSeq(node, bindings, newPolarity),
+ argType));
+ }
+
+ // Cast the arguments of the node to their old type if necessary and possible; otherwise use
+ // their new type (int, real, bool, or U)
+ private VCExpr CastArgumentsToOldType(VCExprNAry node, VariableBindings bindings, int newPolarity) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Requires((node.Arity > 0));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, newPolarity);
+ Type/*!*/ oldType = node[0].Type;
+ if (AxBuilder.UnchangedType(oldType) &&
+ node.Skip(1).All(e => e.Type.Equals(oldType)))
+ return Gen.Function(node.Op, AxBuilder.CastSeq(newArgs, oldType));
+ else
+ return Gen.Function(node.Op, AxBuilder.CastSeq(newArgs, AxBuilder.U));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr VisitNotOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, Type.Bool, bindings, -Eraser.Polarity);
+ }
+ public override VCExpr VisitEqOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitNeqOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitImpliesOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // UGLY: the code for tracking polarities should be factored out
+ List<VCExpr/*!*/>/*!*/ newArgs = new List<VCExpr/*!*/>(2);
+ Eraser.Polarity = -Eraser.Polarity;
+ newArgs.Add(Eraser.Mutate(node[0], bindings));
+ Eraser.Polarity = -Eraser.Polarity;
+ newArgs.Add(Eraser.Mutate(node[1], bindings));
+ return Gen.Function(node.Op, AxBuilder.CastSeq(newArgs, Type.Bool));
+ }
+ public override VCExpr VisitDistinctOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitLabelOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // argument of the label operator should always be a formula
+ // (at least for Simplify ... should this be ensured at a later point?)
+ return CastArguments(node, Type.Bool, bindings, Eraser.Polarity);
+ }
+ public override VCExpr VisitIfThenElseOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, 0);
+ newArgs[0] = AxBuilder.Cast(newArgs[0], Type.Bool);
+ Type t = node.Type;
+ if (!AxBuilder.UnchangedType(t)) {
+ t = AxBuilder.U;
+ }
+ newArgs[1] = AxBuilder.Cast(newArgs[1], t);
+ newArgs[2] = AxBuilder.Cast(newArgs[2], t);
+ return Gen.Function(node.Op, newArgs);
+ }
+ public override VCExpr/*!*/ VisitCustomOp(VCExprNAry/*!*/ node, VariableBindings/*!*/ bindings) {
+ Contract.Requires(node != null);
+ Contract.Requires(bindings != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, 0);
+ return Gen.Function(node.Op, newArgs);
+ }
+ public override VCExpr VisitAddOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, node.Type, bindings, 0);
+ }
+ public override VCExpr VisitSubOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, node.Type, bindings, 0);
+ }
+ public override VCExpr VisitMulOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, node.Type, bindings, 0);
+ }
+ public override VCExpr VisitDivOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, Type.Int, bindings, 0);
+ }
+ public override VCExpr VisitModOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, Type.Int, bindings, 0);
+ }
+ public override VCExpr VisitRealDivOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, Type.Real, bindings, 0);
+ }
+ /*public override VCExpr VisitFloatDivOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, Type.Float, bindings, 0);
+ }*/
+ public override VCExpr VisitPowOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, Type.Real, bindings, 0);
+ }
+ public override VCExpr VisitLtOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitLeOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitGtOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitGeOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitSubtypeOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArguments(node, AxBuilder.U, bindings, 0);
+ }
+ public override VCExpr VisitToIntOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitToRealOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatAddOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatSubOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatMulOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatDivOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatRemOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatMinOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatMaxOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatLeqOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatLtOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatGeqOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatGtOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitFloatEqOp(VCExprNAry node, VariableBindings bindings)
+ {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitBvOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitBvExtractOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return CastArgumentsToOldType(node, bindings, 0);
+ }
+ public override VCExpr VisitBvConcatOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+ Contract.Requires((node != null));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCExpr/*!*/>/*!*/ newArgs = MutateSeq(node, bindings, 0);
+
+ // each argument is cast to its old type
+ Contract.Assert(newArgs.Count == node.Arity && newArgs.Count == 2);
+ VCExpr/*!*/ arg0 = AxBuilder.Cast(newArgs[0], node[0].Type);
+ Contract.Assert(arg0 != null);
+ VCExpr/*!*/ arg1 = AxBuilder.Cast(newArgs[1], node[1].Type);
+ Contract.Assert(arg1 != null);
+ return Gen.Function(node.Op, arg0, arg1);
+ }
+
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ /// <summary>
+ /// Collect all variables x occurring in expressions of the form Int2U(x) or Bool2U(x), and
+ /// collect all variables x occurring outside such forms.
+ /// </summary>
+ internal class VariableCastCollector : TraversingVCExprVisitor<bool, bool> {
+ /// <summary>
+ /// Determine those bound variables in "oldNode" <em>all</em> of whose relevant uses
+ /// have to be cast in potential triggers in "newNode". It is assume that
+ /// the bound variables of "oldNode" correspond to the first bound
+ /// variables of "newNode".
+ /// </summary>
+ public static List<VCExprVar/*!*/>/*!*/ FindCastVariables(VCExprQuantifier oldNode, VCExprQuantifier newNode, TypeAxiomBuilderIntBoolU axBuilder) {
+ Contract.Requires((axBuilder != null));
+ Contract.Requires((newNode != null));
+ Contract.Requires((oldNode != null));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+ VariableCastCollector/*!*/ collector = new VariableCastCollector(axBuilder);
+ Contract.Assert(collector != null);
+ if (newNode.Triggers.Any(trigger => trigger.Pos)) {
+ // look in the given triggers
+ foreach (VCTrigger/*!*/ trigger in newNode.Triggers) {
+ Contract.Assert(trigger != null);
+ if (trigger.Pos) {
+ foreach (VCExpr/*!*/ expr in trigger.Exprs) {
+ Contract.Assert(expr != null);
+ collector.Traverse(expr, true);
+ }
+ }
+ }
+ } else {
+ // look in the body of the quantifier
+ collector.Traverse(newNode.Body, true);
+ }
+
+ List<VCExprVar/*!*/>/*!*/ castVariables = new List<VCExprVar/*!*/>(collector.varsInCasts.Count);
+ foreach (VCExprVar/*!*/ castVar in collector.varsInCasts) {
+ Contract.Assert(castVar != null);
+ int i = newNode.BoundVars.IndexOf(castVar);
+ if (0 <= i && i < oldNode.BoundVars.Count && !collector.varsOutsideCasts.ContainsKey(castVar))
+ castVariables.Add(oldNode.BoundVars[i]);
+ }
+ return castVariables;
+ }
+
+ public VariableCastCollector(TypeAxiomBuilderIntBoolU axBuilder) {
+ Contract.Requires(axBuilder != null);
+ this.AxBuilder = axBuilder;
+ }
+
+ readonly List<VCExprVar/*!*/>/*!*/ varsInCasts = new List<VCExprVar/*!*/>();
+ readonly Dictionary<VCExprVar/*!*/, object>/*!*/ varsOutsideCasts = new Dictionary<VCExprVar/*!*/, object>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(varsInCasts));
+ Contract.Invariant(varsOutsideCasts != null && Contract.ForAll(varsOutsideCasts, voc => voc.Key != null));
+ Contract.Invariant(AxBuilder != null);
+
+ }
+
+
+ readonly TypeAxiomBuilderIntBoolU/*!*/ AxBuilder;
+
+ protected override bool StandardResult(VCExpr node, bool arg) {
+ //Contract.Requires(node != null);
+ return true; // not used
+ }
+
+ public override bool Visit(VCExprNAry node, bool arg) {
+ Contract.Requires(node != null);
+ if (node.Op is VCExprBoogieFunctionOp) {
+ Function func = ((VCExprBoogieFunctionOp)node.Op).Func;
+ Contract.Assert(func != null);
+ if ((AxBuilder.IsCast(func)) && node[0] is VCExprVar) {
+ VCExprVar castVar = (VCExprVar)node[0];
+ if (!varsInCasts.Contains(castVar))
+ varsInCasts.Add(castVar);
+ return true;
+ }
+ } else if (node.Op is VCExprNAryOp) {
+ VCExpressionGenerator.SingletonOp op = VCExpressionGenerator.SingletonOpDict[node.Op];
+ switch (op) {
+ // the following operators cannot be used in triggers, so disregard any uses of variables as direct arguments
+ case VCExpressionGenerator.SingletonOp.NotOp:
+ case VCExpressionGenerator.SingletonOp.EqOp:
+ case VCExpressionGenerator.SingletonOp.NeqOp:
+ case VCExpressionGenerator.SingletonOp.AndOp:
+ case VCExpressionGenerator.SingletonOp.OrOp:
+ case VCExpressionGenerator.SingletonOp.ImpliesOp:
+ case VCExpressionGenerator.SingletonOp.LtOp:
+ case VCExpressionGenerator.SingletonOp.LeOp:
+ case VCExpressionGenerator.SingletonOp.GtOp:
+ case VCExpressionGenerator.SingletonOp.GeOp:
+ foreach (VCExpr n in node) {
+ if (!(n is VCExprVar)) { // don't recurse on VCExprVar argument
+ n.Accept<bool, bool>(this, arg);
+ }
+ }
+ return true;
+ default:
+ break;
+ }
+ }
+ return base.Visit(node, arg);
+ }
+
+ public override bool Visit(VCExprVar node, bool arg) {
+ Contract.Requires(node != null);
+ if (!varsOutsideCasts.ContainsKey(node))
+ varsOutsideCasts.Add(node, null);
+ return true;
+ }
+ }
+
+}
diff --git a/Source/VCExpr/TypeErasureArguments.cs b/Source/VCExpr/TypeErasureArguments.cs
index 8885cbc7..1ee79c17 100644
--- a/Source/VCExpr/TypeErasureArguments.cs
+++ b/Source/VCExpr/TypeErasureArguments.cs
@@ -1,754 +1,754 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// Erasure of types using explicit type parameters for functions
-
-namespace Microsoft.Boogie.TypeErasure {
- using Microsoft.Boogie.VCExprAST;
- using HFNS = Microsoft.Boogie.VCExprAST.HelperFuns;
-
- public class TypeAxiomBuilderArguments : TypeAxiomBuilderIntBoolU {
-
- public TypeAxiomBuilderArguments(VCExpressionGenerator gen)
- : base(gen) {
- Contract.Requires(gen != null);
-
- Typed2UntypedFunctions = new Dictionary<Function/*!*/, Function/*!*/>();
- }
-
- // constructor to allow cloning
- [NotDelayed]
- internal TypeAxiomBuilderArguments(TypeAxiomBuilderArguments builder)
- : base(builder) {
- Contract.Requires(builder != null);
- Typed2UntypedFunctions =
- new Dictionary<Function/*!*/, Function/*!*/>(builder.Typed2UntypedFunctions);
-
-
- MapTypeAbstracterAttr =
- builder.MapTypeAbstracterAttr == null ?
- null : new MapTypeAbstractionBuilderArguments(this, builder.Gen,
- builder.MapTypeAbstracterAttr);
- }
-
- public override Object Clone() {
- Contract.Ensures(Contract.Result<Object>() != null);
- return new TypeAxiomBuilderArguments(this);
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- // generate axioms of the kind "forall x:U. {Int2U(U2Int(x))} Int2U(U2Int(x))==x"
- // (this makes use of the assumption that only well-typed terms are generated
- // by the SMT-solver, i.e., that U2Int is only applied to terms that actually
- // are of type int)
- protected override VCExpr GenReverseCastAxiom(Function castToU, Function castFromU) {
- //Contract.Requires(castFromU != null);
- //Contract.Requires(castToU != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCTrigger/*!*/>/*!*/ triggers;
- VCExprVar/*!*/ var;
- VCExpr/*!*/ eq = GenReverseCastEq(castToU, castFromU, out var, out triggers);
- return Gen.Forall(HelperFuns.ToList(var), triggers, "cast:" + castFromU.Name, -1, eq);
- }
-
- protected override VCExpr GenCastTypeAxioms(Function castToU, Function castFromU) {
- //Contract.Requires(castFromU != null);
- //Contract.Requires(castToU != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- // nothing
- return VCExpressionGenerator.True;
- }
-
- private MapTypeAbstractionBuilderArguments MapTypeAbstracterAttr = null;
-
- internal override MapTypeAbstractionBuilder/*!*/ MapTypeAbstracter {
- get {
- Contract.Ensures(Contract.Result<MapTypeAbstractionBuilder>() != null);
-
- if (MapTypeAbstracterAttr == null)
- MapTypeAbstracterAttr = new MapTypeAbstractionBuilderArguments(this, Gen);
- return MapTypeAbstracterAttr;
- }
- }
-
- protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
- //Contract.Requires(originalType != null);
- //Contract.Requires(var != null);
- // no axioms are needed for variable or function types
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Symbols for representing functions
-
- // Globally defined functions
- private readonly IDictionary<Function/*!*/, Function/*!*/>/*!*/ Typed2UntypedFunctions;
- [ContractInvariantMethod]
- void Typed2UntypedFunctionsInvariantMethod() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(Typed2UntypedFunctions));
- }
-
- public Function Typed2Untyped(Function fun) {
- Contract.Requires(fun != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- Function res;
- if (!Typed2UntypedFunctions.TryGetValue(fun, out res)) {
- Contract.Assert(fun.OutParams.Count == 1);
-
- // if all of the parameters are int or bool, the function does
- // not have to be changed
- if (fun.InParams.All(param => UnchangedType(cce.NonNull(param).TypedIdent.Type)) &&
- UnchangedType(cce.NonNull(fun.OutParams[0]).TypedIdent.Type)) {
- res = fun;
- } else {
- Type[]/*!*/ types = new Type[fun.TypeParameters.Count + fun.InParams.Count + 1];
-
- int i = 0;
- // the first arguments are the explicit type parameters
- for (int j = 0; j < fun.TypeParameters.Count; ++j) {
- types[i] = T;
- i = i + 1;
- }
- // followed by the actual parameters
- foreach (Variable/*!*/ x in fun.InParams) {
- Contract.Assert(x != null);
- types[i] = TypeAfterErasure(x.TypedIdent.Type);
- i = i + 1;
- }
-
- types[types.Length - 1] = TypeAfterErasure(cce.NonNull(fun.OutParams[0]).TypedIdent.Type);
-
- res = HelperFuns.BoogieFunction(fun.Name, types);
- res.Attributes = fun.Attributes;
- }
-
- Typed2UntypedFunctions.Add(fun, res);
- }
- return cce.NonNull(res);
- }
-
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- internal class MapTypeAbstractionBuilderArguments : MapTypeAbstractionBuilder {
-
- private readonly TypeAxiomBuilderArguments/*!*/ AxBuilderArguments;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilderArguments != null);
- }
-
-
- internal MapTypeAbstractionBuilderArguments(TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen)
- : base(axBuilder, gen) {
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
-
- this.AxBuilderArguments = axBuilder;
- }
-
- // constructor for cloning
- internal MapTypeAbstractionBuilderArguments(TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen, MapTypeAbstractionBuilderArguments builder)
- : base(axBuilder, gen, builder) {
- Contract.Requires(builder != null);
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
- this.AxBuilderArguments = axBuilder;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- protected override void GenSelectStoreFunctions(MapType abstractedType, TypeCtorDecl synonym, out Function/*!*/ select, out Function/*!*/ store) {
- //Contract.Requires(synonym != null);
-//Contract.Requires(abstractedType != null);
-Contract.Ensures(Contract.ValueAtReturn(out select) != null);
-Contract.Ensures(Contract.ValueAtReturn(out store) != null);
- Contract.Assert(synonym.Name != null);
- string/*!*/ baseName = synonym.Name;
- int typeParamNum = abstractedType.FreeVariables.Count +
- abstractedType.TypeParameters.Count;
-
- int arity = typeParamNum + abstractedType.Arguments.Count;
-
- Type/*!*/[]/*!*/ selectTypes = new Type/*!*/ [arity + 2];
- Type/*!*/[]/*!*/ storeTypes = new Type/*!*/ [arity + 3];
-
- int i = 0;
- // Fill in the free variables and type parameters
- for (; i < typeParamNum; i++) {
- selectTypes[i] = AxBuilder.T;
- storeTypes[i] = AxBuilder.T;
- }
- // Fill in the map type
- if (CommandLineOptions.Clo.MonomorphicArrays) {
- selectTypes[i] = abstractedType;
- storeTypes[i] = abstractedType;
- } else {
- selectTypes[i] = AxBuilder.U;
- storeTypes[i] = AxBuilder.U;
- }
- i++;
- // Fill in the index types
- foreach (Type/*!*/ type in abstractedType.Arguments) {
- Contract.Assert(type != null);
- if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(type)) {
- selectTypes[i] = type;
- storeTypes[i] = type;
- } else {
- selectTypes[i] = AxBuilder.U;
- storeTypes[i] = AxBuilder.U;
- }
- i++;
- }
- // Fill in the output type for select function which also happens
- // to be the type of the last argument to the store function
- if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(abstractedType.Result)) {
- selectTypes[i] = abstractedType.Result;
- storeTypes[i] = abstractedType.Result;
- } else {
- selectTypes[i] = AxBuilder.U;
- storeTypes[i] = AxBuilder.U;
- }
- i++;
- // Fill in the map type which is the output of the store function
- if (CommandLineOptions.Clo.MonomorphicArrays)
- storeTypes[i] = abstractedType;
- else
- storeTypes[i] = AxBuilder.U;
- Contract.Assert(cce.NonNullElements<Type>(selectTypes));
- Contract.Assert(cce.NonNullElements<Type>(storeTypes));
-
- select = HelperFuns.BoogieFunction(baseName + "Select", selectTypes);
- store = HelperFuns.BoogieFunction(baseName + "Store", storeTypes);
-
- if (CommandLineOptions.Clo.UseArrayTheory) {
- select.AddAttribute("builtin", "select");
- store.AddAttribute("builtin", "store");
- } else {
- AxBuilder.AddTypeAxiom(GenMapAxiom0(select, store,
- abstractedType.TypeParameters.Count, abstractedType.FreeVariables.Count));
- AxBuilder.AddTypeAxiom(GenMapAxiom1(select, store,
- abstractedType.TypeParameters.Count, abstractedType.FreeVariables.Count));
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // The normal axioms of the theory of arrays (right now without extensionality)
-
- private VCExpr Select(Function select, List<VCExprVar/*!*/>/*!*/ types, VCExpr map, List<VCExprVar/*!*/>/*!*/ indexes) {
- Contract.Requires(map != null);
- Contract.Requires(select != null);
- Contract.Requires(cce.NonNullElements(indexes));
- Contract.Requires(cce.NonNullElements(types));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCExpr/*!*/>/*!*/ selectArgs = new List<VCExpr/*!*/>();
- selectArgs.AddRange(HelperFuns.ToVCExprList(types));
- selectArgs.Add(map);
- selectArgs.AddRange(HelperFuns.ToVCExprList(indexes));
- return Gen.Function(select, selectArgs);
- }
-
- private VCExpr Store(Function store, List<VCExprVar/*!*/>/*!*/ types, VCExpr map, List<VCExprVar/*!*/>/*!*/ indexes, VCExpr val) {
- Contract.Requires(val != null);
- Contract.Requires(map != null);
- Contract.Requires(store != null);
- Contract.Requires(cce.NonNullElements(indexes));
- Contract.Requires(cce.NonNullElements(types));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCExpr/*!*/>/*!*/ storeArgs = new List<VCExpr/*!*/>();
- storeArgs.AddRange(HelperFuns.ToVCExprList(types));
- storeArgs.Add(map);
- storeArgs.AddRange(HelperFuns.ToVCExprList(indexes));
- storeArgs.Add(val);
- return Gen.Function(store, storeArgs);
- }
-
- private VCExpr/*!*/ GenMapAxiom0(Function/*!*/ select, Function/*!*/ store,
- // bound type variables in the map type
- int mapTypeParamNum,
- // free type variables in the map
- // type (abstraction)
- int mapAbstractionVarNum) {
- Contract.Requires(select != null);
- Contract.Requires(store != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- int arity = select.InParams.Count - 1 - mapTypeParamNum - mapAbstractionVarNum;
- List<VCExprVar/*!*/>/*!*/ types =
- HelperFuns.VarVector("t", mapTypeParamNum + mapAbstractionVarNum,
- AxBuilder.T, Gen);
-
- List<Type/*!*/> indexTypes = new List<Type/*!*/>();
- for (int i = mapTypeParamNum + mapAbstractionVarNum + 1; i < select.InParams.Count; i++) {
- indexTypes.Add(cce.NonNull(select.InParams[i]).TypedIdent.Type);
- }
- Contract.Assert(arity == indexTypes.Count);
-
- List<VCExprVar/*!*/>/*!*/ indexes = HelperFuns.VarVector("x", indexTypes, Gen);
-
- VCExprVar/*!*/ m = Gen.Variable("m", AxBuilder.U);
- Contract.Assert(m != null);
- VCExprVar/*!*/ val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
- Contract.Assert(val != null);
-
- VCExpr/*!*/ storeExpr = Store(store, types, m, indexes, val);
- Contract.Assert(storeExpr != null);
- VCExpr/*!*/ selectExpr = Select(select, types, storeExpr, indexes);
- Contract.Assert(selectExpr != null);
-
- List<VCExprVar/*!*/>/*!*/ quantifiedVars = new List<VCExprVar/*!*/>();
- quantifiedVars.AddRange(types);
- quantifiedVars.Add(val);
- quantifiedVars.Add(m);
- quantifiedVars.AddRange(indexes);
-
- VCExpr/*!*/ eq = Gen.Eq(selectExpr, val);
- Contract.Assert(eq != null);
- return Gen.Forall(quantifiedVars, new List<VCTrigger/*!*/>(), "mapAx0:" + select.Name, 0, eq);
- }
-
- private VCExpr/*!*/ GenMapAxiom1(Function/*!*/ select, Function/*!*/ store,
- // bound type variables in the map
- // type
- int mapTypeParamNum,
- // free type variables in the map
- // type (abstraction)
- int mapAbstractionVarNum) {
- Contract.Requires(select != null);
- Contract.Requires(store != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- int arity = select.InParams.Count - 1 - mapTypeParamNum - mapAbstractionVarNum;
-
- List<VCExprVar/*!*/>/*!*/ freeTypeVars =
- HelperFuns.VarVector("u", mapAbstractionVarNum, AxBuilder.T, Gen);
- List<VCExprVar/*!*/>/*!*/ boundTypeVars0 =
- HelperFuns.VarVector("s", mapTypeParamNum, AxBuilder.T, Gen);
- List<VCExprVar/*!*/>/*!*/ boundTypeVars1 =
- HelperFuns.VarVector("t", mapTypeParamNum, AxBuilder.T, Gen);
-
- List<VCExprVar/*!*/>/*!*/ types0 = new List<VCExprVar/*!*/>(boundTypeVars0);
- types0.AddRange(freeTypeVars);
-
- List<VCExprVar/*!*/>/*!*/ types1 = new List<VCExprVar/*!*/>(boundTypeVars1);
- types1.AddRange(freeTypeVars);
-
- List<Type/*!*/> indexTypes = new List<Type/*!*/>();
- for (int i = mapTypeParamNum + mapAbstractionVarNum + 1; i < select.InParams.Count; i++) {
- indexTypes.Add(cce.NonNull(select.InParams[i]).TypedIdent.Type);
- }
- Contract.Assert(arity == indexTypes.Count);
-
- List<VCExprVar/*!*/>/*!*/ indexes0 = HelperFuns.VarVector("x", indexTypes, Gen);
- List<VCExprVar/*!*/>/*!*/ indexes1 = HelperFuns.VarVector("y", indexTypes, Gen);
-
- VCExprVar/*!*/ m = Gen.Variable("m", AxBuilder.U);
- Contract.Assert(m != null);
- VCExprVar/*!*/ val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
- Contract.Assert(val != null);
-
- VCExpr/*!*/ storeExpr = Store(store, types0, m, indexes0, val);
- Contract.Assert(storeExpr != null);
- VCExpr/*!*/ selectWithoutStoreExpr = Select(select, types1, m, indexes1);
- Contract.Assert(selectWithoutStoreExpr != null);
- VCExpr/*!*/ selectExpr = Select(select, types1, storeExpr, indexes1);
- Contract.Assert(selectExpr != null);
-
- VCExpr/*!*/ selectEq = Gen.Eq(selectExpr, selectWithoutStoreExpr);
- Contract.Assert(selectEq != null);
-
- List<VCExprVar/*!*/>/*!*/ quantifiedVars = new List<VCExprVar/*!*/>();
- quantifiedVars.AddRange(freeTypeVars);
- quantifiedVars.AddRange(boundTypeVars0);
- quantifiedVars.AddRange(boundTypeVars1);
- quantifiedVars.Add(val);
- quantifiedVars.Add(m);
- quantifiedVars.AddRange(indexes0);
- quantifiedVars.AddRange(indexes1);
-
- List<VCTrigger/*!*/>/*!*/ triggers = new List<VCTrigger/*!*/>();
-
- // different value arguments or different type arguments are sufficient
- // to conclude that that value of the map at some point (after an update)
- // has not changed
-
- List<VCExpr/*!*/>/*!*/ indexEqs = new List<VCExpr/*!*/>();
- for (int i = 0; i < mapTypeParamNum; ++i)
- indexEqs.Add(Gen.Eq(boundTypeVars0[i], boundTypeVars1[i]));
- for (int i = 0; i < arity; ++i)
- indexEqs.Add(Gen.Eq(indexes0[i], indexes1[i]));
-
- VCExpr/*!*/ axiom = VCExpressionGenerator.True;
- int n = 0;
- foreach (VCExpr/*!*/ indexesEq in indexEqs) {
- Contract.Assert(indexesEq != null);
- VCExpr/*!*/ matrix = Gen.Or(indexesEq, selectEq);
- Contract.Assert(matrix != null);
- VCExpr/*!*/ conjunct = Gen.Forall(quantifiedVars, triggers, "mapAx1:" + select.Name + ":" + n, 0, matrix);
- Contract.Assert(conjunct != null);
- axiom = Gen.AndSimp(axiom, conjunct);
- n = n + 1;
- }
-
- return axiom;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- public class TypeEraserArguments : TypeEraser {
-
- private readonly TypeAxiomBuilderArguments/*!*/ AxBuilderArguments;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilderArguments != null);
- }
-
-
- private OpTypeEraser OpEraserAttr = null;
- protected override OpTypeEraser/*!*/ OpEraser {
- get {
- Contract.Ensures(Contract.Result<OpTypeEraser>() != null);
-
- if (OpEraserAttr == null)
- OpEraserAttr = new OpTypeEraserArguments(this, AxBuilderArguments, Gen);
- return OpEraserAttr;
- }
- }
-
- public TypeEraserArguments(TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen) :base(axBuilder, gen){
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
-
- this.AxBuilderArguments = axBuilder;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override VCExpr Visit(VCExprQuantifier node, VariableBindings oldBindings) {
- Contract.Requires(oldBindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VariableBindings/*!*/ bindings = oldBindings.Clone();
-
- // bound term variables are replaced with bound term variables
- // typed in a simpler way
- List<VCExprVar/*!*/>/*!*/ newBoundVars =
- BoundVarsAfterErasure(node.BoundVars, bindings);
-
- // type variables are replaced with ordinary quantified variables
- GenBoundVarsForTypeParams(node.TypeParameters, newBoundVars, bindings);
- VCExpr/*!*/ newNode = HandleQuantifier(node, newBoundVars, bindings);
- Contract.Assert(newNode != null);
-
- if (!(newNode is VCExprQuantifier) || !IsUniversalQuantifier(node))
- return newNode;
-
- VariableBindings/*!*/ bindings2;
- if (!RedoQuantifier(node, (VCExprQuantifier)newNode, node.BoundVars, oldBindings,
- out bindings2, out newBoundVars))
- return newNode;
-
- GenBoundVarsForTypeParams(node.TypeParameters, newBoundVars, bindings2);
- return HandleQuantifier(node, newBoundVars, bindings2);
- }
-
- private void GenBoundVarsForTypeParams(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ newBoundVars, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Requires(cce.NonNullElements(newBoundVars));
- foreach (TypeVariable/*!*/ tvar in typeParams) {
- Contract.Assert(tvar != null);
- VCExprVar/*!*/ var = Gen.Variable(tvar.Name, AxBuilder.T);
- Contract.Assert(var != null);
- newBoundVars.Add(var);
- bindings.TypeVariableBindings.Add(tvar, var);
- }
- }
-
- private VCExpr HandleQuantifier(VCExprQuantifier node, List<VCExprVar/*!*/>/*!*/ newBoundVars, VariableBindings bindings){
-Contract.Requires(bindings != null);
-Contract.Requires(node != null);
-Contract.Requires(cce.NonNullElements(newBoundVars));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCTrigger/*!*/>/*!*/ newTriggers = MutateTriggers(node.Triggers, bindings);
- Contract.Assert(cce.NonNullElements(newTriggers));
- VCExpr/*!*/ newBody = Mutate(node.Body, bindings);
- Contract.Assert(newBody != null);
- newBody = AxBuilder.Cast(newBody, Type.Bool);
-
- if (newBoundVars.Count == 0) // might happen that no bound variables are left
- return newBody;
- return Gen.Quantify(node.Quan, new List<TypeVariable/*!*/>(), newBoundVars,
- newTriggers, node.Infos, newBody);
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- public class OpTypeEraserArguments : OpTypeEraser {
-
- protected readonly TypeAxiomBuilderArguments/*!*/ AxBuilderArguments;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilderArguments != null);
- }
-
-
- public OpTypeEraserArguments(TypeEraserArguments eraser, TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen) :base(eraser, axBuilder, gen){
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
- Contract.Requires(eraser != null);
- this.AxBuilderArguments = axBuilder;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- private VCExpr AssembleOpExpression(OpTypesPair opTypes, IEnumerable<VCExpr/*!*/>/*!*/ oldArgs, VariableBindings bindings){
-Contract.Requires(bindings != null);
-Contract.Requires(cce.NonNullElements(oldArgs));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- // UGLY: the code for tracking polarities should be factored out
- int oldPolarity = Eraser.Polarity;
- Eraser.Polarity = 0;
-
- List<VCExpr/*!*/>/*!*/ newArgs = new List<VCExpr/*!*/> ();
- // explicit type parameters
- foreach (Type/*!*/ t in opTypes.Types){
- Contract.Assert(newArgs != null);
- newArgs.Add(AxBuilder.Type2Term(t, bindings.TypeVariableBindings));}
-
- // and the actual value parameters
- Function/*!*/ newFun = ((VCExprBoogieFunctionOp)opTypes.Op).Func;
- // ^ we only allow this operator at this point
- int i = opTypes.Types.Count;
- foreach (VCExpr/*!*/ arg in oldArgs) {
- Contract.Assert(arg != null);
- newArgs.Add(AxBuilder.Cast(Eraser.Mutate(arg, bindings),
- cce.NonNull(newFun.InParams[i]).TypedIdent.Type));
- i = i + 1;
- }
-
- Eraser.Polarity = oldPolarity;
- return Gen.Function(opTypes.Op, newArgs);
- }
-
- // for the time being, we store both the types of the arguments and the explicit
- // type parameters (for most operators, this is more than actually necessary)
- private OpTypesPair OriginalOpTypes(VCExprNAry node){
-Contract.Requires(node != null);
- List<Type/*!*/>/*!*/ originalTypes = new List<Type/*!*/> ();
- foreach (VCExpr/*!*/ expr in node) {
- Contract.Assert(expr != null);
- originalTypes.Add(expr.Type);
- }
- originalTypes.AddRange(node.TypeArguments);
- return new OpTypesPair (node.Op, originalTypes);
- }
-
- private VCExpr EqualTypes(Type t0, Type t1, VariableBindings bindings){
-Contract.Requires(bindings != null);
-Contract.Requires(t1 != null);
-Contract.Requires(t0 != null);
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (t0.Equals(t1))
- return VCExpressionGenerator.True;
- VCExpr/*!*/ t0Expr = AxBuilder.Type2Term(t0, bindings.TypeVariableBindings);
- Contract.Assert(t0Expr != null);
- VCExpr/*!*/ t1Expr = AxBuilder.Type2Term(t1, bindings.TypeVariableBindings);
- Contract.Assert(t1Expr != null);
- return Gen.Eq(t0Expr, t1Expr);
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
- public override VCExpr VisitEqOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
-Contract.Requires((node != null));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- // we also have to state that the types are equal, because the
- // translation does not contain any information about the
- // relationship between values and types
- return Gen.AndSimp(base.VisitEqOp(node, bindings),
- EqualTypes(node[0].Type, node[1].Type, bindings));
- }
-
- public override VCExpr VisitNeqOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires((bindings != null));
-Contract.Requires((node != null));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- // we also have to state that the types are (un)equal, because the
- // translation does not contain any information about the
- // relationship between values and types
- return Gen.OrSimp(base.VisitNeqOp(node, bindings),
- Gen.Not(EqualTypes(node[0].Type, node[1].Type, bindings)));
- }
-
- public override VCExpr VisitSubtypeOp(VCExprNAry node, VariableBindings bindings) {
-Contract.Requires((bindings != null));
-Contract.Requires((node != null));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- // UGLY: the code for tracking polarities should be factored out
- int oldPolarity = Eraser.Polarity;
- Eraser.Polarity = 0;
-
- VCExpr/*!*/ res =
- Gen.Function(VCExpressionGenerator.Subtype3Op,
- AxBuilder.Type2Term(node[0].Type,
- bindings.TypeVariableBindings),
- AxBuilder.Cast(Eraser.Mutate(node[0], bindings),
- AxBuilder.U),
- AxBuilder.Cast(Eraser.Mutate(node[1], bindings),
- AxBuilder.U));
-
- Eraser.Polarity = oldPolarity;
- return res;
- }
-
- public override VCExpr VisitSelectOp(VCExprNAry node, VariableBindings bindings) {
-Contract.Requires((bindings != null));
-Contract.Requires((node != null));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- OpTypesPair originalOpTypes = OriginalOpTypes(node);
- OpTypesPair newOpTypes;
-
- if (!NewOpCache.TryGetValue(originalOpTypes, out newOpTypes)) {
- MapType/*!*/ rawType = node[0].Type.AsMap;
- Contract.Assert(rawType != null);
- List<Type>/*!*/ abstractionInstantiation;
- Function/*!*/ select =
- AxBuilder.MapTypeAbstracter.Select(rawType, out abstractionInstantiation);
- Contract.Assert(abstractionInstantiation != null);
- newOpTypes = TypesPairForSelectStore(node, select, abstractionInstantiation);
- NewOpCache.Add(originalOpTypes, newOpTypes);
- }
-
- return AssembleOpExpression(newOpTypes, node, bindings);
- }
-
- public override VCExpr VisitStoreOp(VCExprNAry node, VariableBindings bindings) {
-Contract.Requires((bindings != null));
-Contract.Requires((node != null));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- OpTypesPair originalOpTypes = OriginalOpTypes(node);
- OpTypesPair newOpTypes;
-
- if (!NewOpCache.TryGetValue(originalOpTypes, out newOpTypes)) {
- MapType/*!*/ rawType = node[0].Type.AsMap;
- List<Type>/*!*/ abstractionInstantiation;
- Function/*!*/ store =
- AxBuilder.MapTypeAbstracter.Store(rawType, out abstractionInstantiation);
-
- newOpTypes = TypesPairForSelectStore(node, store, abstractionInstantiation);
- NewOpCache.Add(originalOpTypes, newOpTypes);
- }
-
- return AssembleOpExpression(newOpTypes, node, bindings);
- }
-
- private OpTypesPair TypesPairForSelectStore(VCExprNAry/*!*/ node, Function/*!*/ untypedOp,
- // instantiation of the abstract map type parameters
- List<Type>/*!*/ abstractionInstantiation) {
- Contract.Requires(node != null);
- Contract.Requires(untypedOp != null);
- Contract.Requires(abstractionInstantiation != null);
-
- List<Type/*!*/>/*!*/ inferredTypeArgs = new List<Type/*!*/> ();
- foreach (Type/*!*/ t in node.TypeArguments){Contract.Assert(t != null);
-// inferredTypeArgs.Add(AxBuilder.MapTypeAbstracter.AbstractMapTypeRecursively(t));
- inferredTypeArgs.Add(t);}
- foreach (Type/*!*/ t in abstractionInstantiation) {
- Contract.Assert(t != null);
- inferredTypeArgs.Add(t);}
-
- Contract.Assert(untypedOp.InParams.Count == inferredTypeArgs.Count + node.Arity);
- return new OpTypesPair (Gen.BoogieFunctionOp(untypedOp), inferredTypeArgs);
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
- public override VCExpr VisitBoogieFunctionOp(VCExprNAry node, VariableBindings bindings) {
-Contract.Requires((bindings != null));
-Contract.Requires((node != null));
-Contract.Ensures(Contract.Result<VCExpr>() != null);
- OpTypesPair originalOpTypes = OriginalOpTypes(node);
- OpTypesPair newOpTypes;
-
- if (!NewOpCache.TryGetValue(originalOpTypes, out newOpTypes)) {
- Function/*!*/ oriFun = ((VCExprBoogieFunctionOp)node.Op).Func;
- Contract.Assert(oriFun != null);
- List<Type/*!*/>/*!*/ inferredTypeArgs = new List<Type/*!*/> ();
- foreach (Type/*!*/ t in node.TypeArguments){Contract.Assert(t != null);
-// inferredTypeArgs.Add(AxBuilder.MapTypeAbstracter.AbstractMapTypeRecursively(t));
- inferredTypeArgs.Add(t);}
-
- VCExprOp/*!*/ newOp = Gen.BoogieFunctionOp(AxBuilderArguments.Typed2Untyped(oriFun));
- newOpTypes = new OpTypesPair (newOp, inferredTypeArgs);
-
- NewOpCache.Add(originalOpTypes, newOpTypes);
- }
-
- return AssembleOpExpression(newOpTypes, node, bindings);
- }
-
- ///////////////////////////////////////////////////////////////////////////
-
- // cache from the typed operators to the untyped operators with
- // explicit type arguments. the keys are pairs of the typed
- // operator and the actual types of the argument expressions, the
- // values are pairs of the new operators and the types that have
- // to be given as explicit type arguments
- private readonly IDictionary<OpTypesPair, OpTypesPair>/*!*/ NewOpCache =
- new Dictionary<OpTypesPair, OpTypesPair>();
-
- private struct OpTypesPair {
- public readonly VCExprOp/*!*/ Op;
- public readonly List<Type/*!*/>/*!*/ Types;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Op != null);
- Contract.Invariant(cce.NonNullElements(Types));
- }
-
-
- public OpTypesPair(VCExprOp op, List<Type/*!*/>/*!*/ types) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(types));
- this.Op = op;
- this.Types = types;
- this.HashCode = HFNS.PolyHash(op.GetHashCode(), 17, types);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (that is OpTypesPair) {
- OpTypesPair thatPair = (OpTypesPair)that;
- return this.Op.Equals(thatPair.Op) &&
- HFNS.SameElements(this.Types, thatPair.Types);
- }
- return false;
- }
-
- private readonly int HashCode;
-
- [Pure]
- public override int GetHashCode() {
- return HashCode;
- }
- }
- }
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// Erasure of types using explicit type parameters for functions
+
+namespace Microsoft.Boogie.TypeErasure {
+ using Microsoft.Boogie.VCExprAST;
+ using HFNS = Microsoft.Boogie.VCExprAST.HelperFuns;
+
+ public class TypeAxiomBuilderArguments : TypeAxiomBuilderIntBoolU {
+
+ public TypeAxiomBuilderArguments(VCExpressionGenerator gen)
+ : base(gen) {
+ Contract.Requires(gen != null);
+
+ Typed2UntypedFunctions = new Dictionary<Function/*!*/, Function/*!*/>();
+ }
+
+ // constructor to allow cloning
+ [NotDelayed]
+ internal TypeAxiomBuilderArguments(TypeAxiomBuilderArguments builder)
+ : base(builder) {
+ Contract.Requires(builder != null);
+ Typed2UntypedFunctions =
+ new Dictionary<Function/*!*/, Function/*!*/>(builder.Typed2UntypedFunctions);
+
+
+ MapTypeAbstracterAttr =
+ builder.MapTypeAbstracterAttr == null ?
+ null : new MapTypeAbstractionBuilderArguments(this, builder.Gen,
+ builder.MapTypeAbstracterAttr);
+ }
+
+ public override Object Clone() {
+ Contract.Ensures(Contract.Result<Object>() != null);
+ return new TypeAxiomBuilderArguments(this);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+
+ // generate axioms of the kind "forall x:U. {Int2U(U2Int(x))} Int2U(U2Int(x))==x"
+ // (this makes use of the assumption that only well-typed terms are generated
+ // by the SMT-solver, i.e., that U2Int is only applied to terms that actually
+ // are of type int)
+ protected override VCExpr GenReverseCastAxiom(Function castToU, Function castFromU) {
+ //Contract.Requires(castFromU != null);
+ //Contract.Requires(castToU != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCTrigger/*!*/>/*!*/ triggers;
+ VCExprVar/*!*/ var;
+ VCExpr/*!*/ eq = GenReverseCastEq(castToU, castFromU, out var, out triggers);
+ return Gen.Forall(HelperFuns.ToList(var), triggers, "cast:" + castFromU.Name, -1, eq);
+ }
+
+ protected override VCExpr GenCastTypeAxioms(Function castToU, Function castFromU) {
+ //Contract.Requires(castFromU != null);
+ //Contract.Requires(castToU != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // nothing
+ return VCExpressionGenerator.True;
+ }
+
+ private MapTypeAbstractionBuilderArguments MapTypeAbstracterAttr = null;
+
+ internal override MapTypeAbstractionBuilder/*!*/ MapTypeAbstracter {
+ get {
+ Contract.Ensures(Contract.Result<MapTypeAbstractionBuilder>() != null);
+
+ if (MapTypeAbstracterAttr == null)
+ MapTypeAbstracterAttr = new MapTypeAbstractionBuilderArguments(this, Gen);
+ return MapTypeAbstracterAttr;
+ }
+ }
+
+ protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
+ //Contract.Requires(originalType != null);
+ //Contract.Requires(var != null);
+ // no axioms are needed for variable or function types
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Symbols for representing functions
+
+ // Globally defined functions
+ private readonly IDictionary<Function/*!*/, Function/*!*/>/*!*/ Typed2UntypedFunctions;
+ [ContractInvariantMethod]
+ void Typed2UntypedFunctionsInvariantMethod() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(Typed2UntypedFunctions));
+ }
+
+ public Function Typed2Untyped(Function fun) {
+ Contract.Requires(fun != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ Function res;
+ if (!Typed2UntypedFunctions.TryGetValue(fun, out res)) {
+ Contract.Assert(fun.OutParams.Count == 1);
+
+ // if all of the parameters are int or bool, the function does
+ // not have to be changed
+ if (fun.InParams.All(param => UnchangedType(cce.NonNull(param).TypedIdent.Type)) &&
+ UnchangedType(cce.NonNull(fun.OutParams[0]).TypedIdent.Type)) {
+ res = fun;
+ } else {
+ Type[]/*!*/ types = new Type[fun.TypeParameters.Count + fun.InParams.Count + 1];
+
+ int i = 0;
+ // the first arguments are the explicit type parameters
+ for (int j = 0; j < fun.TypeParameters.Count; ++j) {
+ types[i] = T;
+ i = i + 1;
+ }
+ // followed by the actual parameters
+ foreach (Variable/*!*/ x in fun.InParams) {
+ Contract.Assert(x != null);
+ types[i] = TypeAfterErasure(x.TypedIdent.Type);
+ i = i + 1;
+ }
+
+ types[types.Length - 1] = TypeAfterErasure(cce.NonNull(fun.OutParams[0]).TypedIdent.Type);
+
+ res = HelperFuns.BoogieFunction(fun.Name, types);
+ res.Attributes = fun.Attributes;
+ }
+
+ Typed2UntypedFunctions.Add(fun, res);
+ }
+ return cce.NonNull(res);
+ }
+
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ internal class MapTypeAbstractionBuilderArguments : MapTypeAbstractionBuilder {
+
+ private readonly TypeAxiomBuilderArguments/*!*/ AxBuilderArguments;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilderArguments != null);
+ }
+
+
+ internal MapTypeAbstractionBuilderArguments(TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen)
+ : base(axBuilder, gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+
+ this.AxBuilderArguments = axBuilder;
+ }
+
+ // constructor for cloning
+ internal MapTypeAbstractionBuilderArguments(TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen, MapTypeAbstractionBuilderArguments builder)
+ : base(axBuilder, gen, builder) {
+ Contract.Requires(builder != null);
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+ this.AxBuilderArguments = axBuilder;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ protected override void GenSelectStoreFunctions(MapType abstractedType, TypeCtorDecl synonym, out Function/*!*/ select, out Function/*!*/ store) {
+ //Contract.Requires(synonym != null);
+//Contract.Requires(abstractedType != null);
+Contract.Ensures(Contract.ValueAtReturn(out select) != null);
+Contract.Ensures(Contract.ValueAtReturn(out store) != null);
+ Contract.Assert(synonym.Name != null);
+ string/*!*/ baseName = synonym.Name;
+ int typeParamNum = abstractedType.FreeVariables.Count +
+ abstractedType.TypeParameters.Count;
+
+ int arity = typeParamNum + abstractedType.Arguments.Count;
+
+ Type/*!*/[]/*!*/ selectTypes = new Type/*!*/ [arity + 2];
+ Type/*!*/[]/*!*/ storeTypes = new Type/*!*/ [arity + 3];
+
+ int i = 0;
+ // Fill in the free variables and type parameters
+ for (; i < typeParamNum; i++) {
+ selectTypes[i] = AxBuilder.T;
+ storeTypes[i] = AxBuilder.T;
+ }
+ // Fill in the map type
+ if (CommandLineOptions.Clo.MonomorphicArrays) {
+ selectTypes[i] = abstractedType;
+ storeTypes[i] = abstractedType;
+ } else {
+ selectTypes[i] = AxBuilder.U;
+ storeTypes[i] = AxBuilder.U;
+ }
+ i++;
+ // Fill in the index types
+ foreach (Type/*!*/ type in abstractedType.Arguments) {
+ Contract.Assert(type != null);
+ if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(type)) {
+ selectTypes[i] = type;
+ storeTypes[i] = type;
+ } else {
+ selectTypes[i] = AxBuilder.U;
+ storeTypes[i] = AxBuilder.U;
+ }
+ i++;
+ }
+ // Fill in the output type for select function which also happens
+ // to be the type of the last argument to the store function
+ if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(abstractedType.Result)) {
+ selectTypes[i] = abstractedType.Result;
+ storeTypes[i] = abstractedType.Result;
+ } else {
+ selectTypes[i] = AxBuilder.U;
+ storeTypes[i] = AxBuilder.U;
+ }
+ i++;
+ // Fill in the map type which is the output of the store function
+ if (CommandLineOptions.Clo.MonomorphicArrays)
+ storeTypes[i] = abstractedType;
+ else
+ storeTypes[i] = AxBuilder.U;
+ Contract.Assert(cce.NonNullElements<Type>(selectTypes));
+ Contract.Assert(cce.NonNullElements<Type>(storeTypes));
+
+ select = HelperFuns.BoogieFunction(baseName + "Select", selectTypes);
+ store = HelperFuns.BoogieFunction(baseName + "Store", storeTypes);
+
+ if (CommandLineOptions.Clo.UseArrayTheory) {
+ select.AddAttribute("builtin", "select");
+ store.AddAttribute("builtin", "store");
+ } else {
+ AxBuilder.AddTypeAxiom(GenMapAxiom0(select, store,
+ abstractedType.TypeParameters.Count, abstractedType.FreeVariables.Count));
+ AxBuilder.AddTypeAxiom(GenMapAxiom1(select, store,
+ abstractedType.TypeParameters.Count, abstractedType.FreeVariables.Count));
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // The normal axioms of the theory of arrays (right now without extensionality)
+
+ private VCExpr Select(Function select, List<VCExprVar/*!*/>/*!*/ types, VCExpr map, List<VCExprVar/*!*/>/*!*/ indexes) {
+ Contract.Requires(map != null);
+ Contract.Requires(select != null);
+ Contract.Requires(cce.NonNullElements(indexes));
+ Contract.Requires(cce.NonNullElements(types));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCExpr/*!*/>/*!*/ selectArgs = new List<VCExpr/*!*/>();
+ selectArgs.AddRange(HelperFuns.ToVCExprList(types));
+ selectArgs.Add(map);
+ selectArgs.AddRange(HelperFuns.ToVCExprList(indexes));
+ return Gen.Function(select, selectArgs);
+ }
+
+ private VCExpr Store(Function store, List<VCExprVar/*!*/>/*!*/ types, VCExpr map, List<VCExprVar/*!*/>/*!*/ indexes, VCExpr val) {
+ Contract.Requires(val != null);
+ Contract.Requires(map != null);
+ Contract.Requires(store != null);
+ Contract.Requires(cce.NonNullElements(indexes));
+ Contract.Requires(cce.NonNullElements(types));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCExpr/*!*/>/*!*/ storeArgs = new List<VCExpr/*!*/>();
+ storeArgs.AddRange(HelperFuns.ToVCExprList(types));
+ storeArgs.Add(map);
+ storeArgs.AddRange(HelperFuns.ToVCExprList(indexes));
+ storeArgs.Add(val);
+ return Gen.Function(store, storeArgs);
+ }
+
+ private VCExpr/*!*/ GenMapAxiom0(Function/*!*/ select, Function/*!*/ store,
+ // bound type variables in the map type
+ int mapTypeParamNum,
+ // free type variables in the map
+ // type (abstraction)
+ int mapAbstractionVarNum) {
+ Contract.Requires(select != null);
+ Contract.Requires(store != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ int arity = select.InParams.Count - 1 - mapTypeParamNum - mapAbstractionVarNum;
+ List<VCExprVar/*!*/>/*!*/ types =
+ HelperFuns.VarVector("t", mapTypeParamNum + mapAbstractionVarNum,
+ AxBuilder.T, Gen);
+
+ List<Type/*!*/> indexTypes = new List<Type/*!*/>();
+ for (int i = mapTypeParamNum + mapAbstractionVarNum + 1; i < select.InParams.Count; i++) {
+ indexTypes.Add(cce.NonNull(select.InParams[i]).TypedIdent.Type);
+ }
+ Contract.Assert(arity == indexTypes.Count);
+
+ List<VCExprVar/*!*/>/*!*/ indexes = HelperFuns.VarVector("x", indexTypes, Gen);
+
+ VCExprVar/*!*/ m = Gen.Variable("m", AxBuilder.U);
+ Contract.Assert(m != null);
+ VCExprVar/*!*/ val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
+ Contract.Assert(val != null);
+
+ VCExpr/*!*/ storeExpr = Store(store, types, m, indexes, val);
+ Contract.Assert(storeExpr != null);
+ VCExpr/*!*/ selectExpr = Select(select, types, storeExpr, indexes);
+ Contract.Assert(selectExpr != null);
+
+ List<VCExprVar/*!*/>/*!*/ quantifiedVars = new List<VCExprVar/*!*/>();
+ quantifiedVars.AddRange(types);
+ quantifiedVars.Add(val);
+ quantifiedVars.Add(m);
+ quantifiedVars.AddRange(indexes);
+
+ VCExpr/*!*/ eq = Gen.Eq(selectExpr, val);
+ Contract.Assert(eq != null);
+ return Gen.Forall(quantifiedVars, new List<VCTrigger/*!*/>(), "mapAx0:" + select.Name, 0, eq);
+ }
+
+ private VCExpr/*!*/ GenMapAxiom1(Function/*!*/ select, Function/*!*/ store,
+ // bound type variables in the map
+ // type
+ int mapTypeParamNum,
+ // free type variables in the map
+ // type (abstraction)
+ int mapAbstractionVarNum) {
+ Contract.Requires(select != null);
+ Contract.Requires(store != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ int arity = select.InParams.Count - 1 - mapTypeParamNum - mapAbstractionVarNum;
+
+ List<VCExprVar/*!*/>/*!*/ freeTypeVars =
+ HelperFuns.VarVector("u", mapAbstractionVarNum, AxBuilder.T, Gen);
+ List<VCExprVar/*!*/>/*!*/ boundTypeVars0 =
+ HelperFuns.VarVector("s", mapTypeParamNum, AxBuilder.T, Gen);
+ List<VCExprVar/*!*/>/*!*/ boundTypeVars1 =
+ HelperFuns.VarVector("t", mapTypeParamNum, AxBuilder.T, Gen);
+
+ List<VCExprVar/*!*/>/*!*/ types0 = new List<VCExprVar/*!*/>(boundTypeVars0);
+ types0.AddRange(freeTypeVars);
+
+ List<VCExprVar/*!*/>/*!*/ types1 = new List<VCExprVar/*!*/>(boundTypeVars1);
+ types1.AddRange(freeTypeVars);
+
+ List<Type/*!*/> indexTypes = new List<Type/*!*/>();
+ for (int i = mapTypeParamNum + mapAbstractionVarNum + 1; i < select.InParams.Count; i++) {
+ indexTypes.Add(cce.NonNull(select.InParams[i]).TypedIdent.Type);
+ }
+ Contract.Assert(arity == indexTypes.Count);
+
+ List<VCExprVar/*!*/>/*!*/ indexes0 = HelperFuns.VarVector("x", indexTypes, Gen);
+ List<VCExprVar/*!*/>/*!*/ indexes1 = HelperFuns.VarVector("y", indexTypes, Gen);
+
+ VCExprVar/*!*/ m = Gen.Variable("m", AxBuilder.U);
+ Contract.Assert(m != null);
+ VCExprVar/*!*/ val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
+ Contract.Assert(val != null);
+
+ VCExpr/*!*/ storeExpr = Store(store, types0, m, indexes0, val);
+ Contract.Assert(storeExpr != null);
+ VCExpr/*!*/ selectWithoutStoreExpr = Select(select, types1, m, indexes1);
+ Contract.Assert(selectWithoutStoreExpr != null);
+ VCExpr/*!*/ selectExpr = Select(select, types1, storeExpr, indexes1);
+ Contract.Assert(selectExpr != null);
+
+ VCExpr/*!*/ selectEq = Gen.Eq(selectExpr, selectWithoutStoreExpr);
+ Contract.Assert(selectEq != null);
+
+ List<VCExprVar/*!*/>/*!*/ quantifiedVars = new List<VCExprVar/*!*/>();
+ quantifiedVars.AddRange(freeTypeVars);
+ quantifiedVars.AddRange(boundTypeVars0);
+ quantifiedVars.AddRange(boundTypeVars1);
+ quantifiedVars.Add(val);
+ quantifiedVars.Add(m);
+ quantifiedVars.AddRange(indexes0);
+ quantifiedVars.AddRange(indexes1);
+
+ List<VCTrigger/*!*/>/*!*/ triggers = new List<VCTrigger/*!*/>();
+
+ // different value arguments or different type arguments are sufficient
+ // to conclude that that value of the map at some point (after an update)
+ // has not changed
+
+ List<VCExpr/*!*/>/*!*/ indexEqs = new List<VCExpr/*!*/>();
+ for (int i = 0; i < mapTypeParamNum; ++i)
+ indexEqs.Add(Gen.Eq(boundTypeVars0[i], boundTypeVars1[i]));
+ for (int i = 0; i < arity; ++i)
+ indexEqs.Add(Gen.Eq(indexes0[i], indexes1[i]));
+
+ VCExpr/*!*/ axiom = VCExpressionGenerator.True;
+ int n = 0;
+ foreach (VCExpr/*!*/ indexesEq in indexEqs) {
+ Contract.Assert(indexesEq != null);
+ VCExpr/*!*/ matrix = Gen.Or(indexesEq, selectEq);
+ Contract.Assert(matrix != null);
+ VCExpr/*!*/ conjunct = Gen.Forall(quantifiedVars, triggers, "mapAx1:" + select.Name + ":" + n, 0, matrix);
+ Contract.Assert(conjunct != null);
+ axiom = Gen.AndSimp(axiom, conjunct);
+ n = n + 1;
+ }
+
+ return axiom;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ public class TypeEraserArguments : TypeEraser {
+
+ private readonly TypeAxiomBuilderArguments/*!*/ AxBuilderArguments;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilderArguments != null);
+ }
+
+
+ private OpTypeEraser OpEraserAttr = null;
+ protected override OpTypeEraser/*!*/ OpEraser {
+ get {
+ Contract.Ensures(Contract.Result<OpTypeEraser>() != null);
+
+ if (OpEraserAttr == null)
+ OpEraserAttr = new OpTypeEraserArguments(this, AxBuilderArguments, Gen);
+ return OpEraserAttr;
+ }
+ }
+
+ public TypeEraserArguments(TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen) :base(axBuilder, gen){
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+
+ this.AxBuilderArguments = axBuilder;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr Visit(VCExprQuantifier node, VariableBindings oldBindings) {
+ Contract.Requires(oldBindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VariableBindings/*!*/ bindings = oldBindings.Clone();
+
+ // bound term variables are replaced with bound term variables
+ // typed in a simpler way
+ List<VCExprVar/*!*/>/*!*/ newBoundVars =
+ BoundVarsAfterErasure(node.BoundVars, bindings);
+
+ // type variables are replaced with ordinary quantified variables
+ GenBoundVarsForTypeParams(node.TypeParameters, newBoundVars, bindings);
+ VCExpr/*!*/ newNode = HandleQuantifier(node, newBoundVars, bindings);
+ Contract.Assert(newNode != null);
+
+ if (!(newNode is VCExprQuantifier) || !IsUniversalQuantifier(node))
+ return newNode;
+
+ VariableBindings/*!*/ bindings2;
+ if (!RedoQuantifier(node, (VCExprQuantifier)newNode, node.BoundVars, oldBindings,
+ out bindings2, out newBoundVars))
+ return newNode;
+
+ GenBoundVarsForTypeParams(node.TypeParameters, newBoundVars, bindings2);
+ return HandleQuantifier(node, newBoundVars, bindings2);
+ }
+
+ private void GenBoundVarsForTypeParams(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ newBoundVars, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Requires(cce.NonNullElements(newBoundVars));
+ foreach (TypeVariable/*!*/ tvar in typeParams) {
+ Contract.Assert(tvar != null);
+ VCExprVar/*!*/ var = Gen.Variable(tvar.Name, AxBuilder.T);
+ Contract.Assert(var != null);
+ newBoundVars.Add(var);
+ bindings.TypeVariableBindings.Add(tvar, var);
+ }
+ }
+
+ private VCExpr HandleQuantifier(VCExprQuantifier node, List<VCExprVar/*!*/>/*!*/ newBoundVars, VariableBindings bindings){
+Contract.Requires(bindings != null);
+Contract.Requires(node != null);
+Contract.Requires(cce.NonNullElements(newBoundVars));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCTrigger/*!*/>/*!*/ newTriggers = MutateTriggers(node.Triggers, bindings);
+ Contract.Assert(cce.NonNullElements(newTriggers));
+ VCExpr/*!*/ newBody = Mutate(node.Body, bindings);
+ Contract.Assert(newBody != null);
+ newBody = AxBuilder.Cast(newBody, Type.Bool);
+
+ if (newBoundVars.Count == 0) // might happen that no bound variables are left
+ return newBody;
+ return Gen.Quantify(node.Quan, new List<TypeVariable/*!*/>(), newBoundVars,
+ newTriggers, node.Infos, newBody);
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ public class OpTypeEraserArguments : OpTypeEraser {
+
+ protected readonly TypeAxiomBuilderArguments/*!*/ AxBuilderArguments;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilderArguments != null);
+ }
+
+
+ public OpTypeEraserArguments(TypeEraserArguments eraser, TypeAxiomBuilderArguments axBuilder, VCExpressionGenerator gen) :base(eraser, axBuilder, gen){
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+ Contract.Requires(eraser != null);
+ this.AxBuilderArguments = axBuilder;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ private VCExpr AssembleOpExpression(OpTypesPair opTypes, IEnumerable<VCExpr/*!*/>/*!*/ oldArgs, VariableBindings bindings){
+Contract.Requires(bindings != null);
+Contract.Requires(cce.NonNullElements(oldArgs));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // UGLY: the code for tracking polarities should be factored out
+ int oldPolarity = Eraser.Polarity;
+ Eraser.Polarity = 0;
+
+ List<VCExpr/*!*/>/*!*/ newArgs = new List<VCExpr/*!*/> ();
+ // explicit type parameters
+ foreach (Type/*!*/ t in opTypes.Types){
+ Contract.Assert(newArgs != null);
+ newArgs.Add(AxBuilder.Type2Term(t, bindings.TypeVariableBindings));}
+
+ // and the actual value parameters
+ Function/*!*/ newFun = ((VCExprBoogieFunctionOp)opTypes.Op).Func;
+ // ^ we only allow this operator at this point
+ int i = opTypes.Types.Count;
+ foreach (VCExpr/*!*/ arg in oldArgs) {
+ Contract.Assert(arg != null);
+ newArgs.Add(AxBuilder.Cast(Eraser.Mutate(arg, bindings),
+ cce.NonNull(newFun.InParams[i]).TypedIdent.Type));
+ i = i + 1;
+ }
+
+ Eraser.Polarity = oldPolarity;
+ return Gen.Function(opTypes.Op, newArgs);
+ }
+
+ // for the time being, we store both the types of the arguments and the explicit
+ // type parameters (for most operators, this is more than actually necessary)
+ private OpTypesPair OriginalOpTypes(VCExprNAry node){
+Contract.Requires(node != null);
+ List<Type/*!*/>/*!*/ originalTypes = new List<Type/*!*/> ();
+ foreach (VCExpr/*!*/ expr in node) {
+ Contract.Assert(expr != null);
+ originalTypes.Add(expr.Type);
+ }
+ originalTypes.AddRange(node.TypeArguments);
+ return new OpTypesPair (node.Op, originalTypes);
+ }
+
+ private VCExpr EqualTypes(Type t0, Type t1, VariableBindings bindings){
+Contract.Requires(bindings != null);
+Contract.Requires(t1 != null);
+Contract.Requires(t0 != null);
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (t0.Equals(t1))
+ return VCExpressionGenerator.True;
+ VCExpr/*!*/ t0Expr = AxBuilder.Type2Term(t0, bindings.TypeVariableBindings);
+ Contract.Assert(t0Expr != null);
+ VCExpr/*!*/ t1Expr = AxBuilder.Type2Term(t1, bindings.TypeVariableBindings);
+ Contract.Assert(t1Expr != null);
+ return Gen.Eq(t0Expr, t1Expr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr VisitEqOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+Contract.Requires((node != null));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // we also have to state that the types are equal, because the
+ // translation does not contain any information about the
+ // relationship between values and types
+ return Gen.AndSimp(base.VisitEqOp(node, bindings),
+ EqualTypes(node[0].Type, node[1].Type, bindings));
+ }
+
+ public override VCExpr VisitNeqOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires((bindings != null));
+Contract.Requires((node != null));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // we also have to state that the types are (un)equal, because the
+ // translation does not contain any information about the
+ // relationship between values and types
+ return Gen.OrSimp(base.VisitNeqOp(node, bindings),
+ Gen.Not(EqualTypes(node[0].Type, node[1].Type, bindings)));
+ }
+
+ public override VCExpr VisitSubtypeOp(VCExprNAry node, VariableBindings bindings) {
+Contract.Requires((bindings != null));
+Contract.Requires((node != null));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // UGLY: the code for tracking polarities should be factored out
+ int oldPolarity = Eraser.Polarity;
+ Eraser.Polarity = 0;
+
+ VCExpr/*!*/ res =
+ Gen.Function(VCExpressionGenerator.Subtype3Op,
+ AxBuilder.Type2Term(node[0].Type,
+ bindings.TypeVariableBindings),
+ AxBuilder.Cast(Eraser.Mutate(node[0], bindings),
+ AxBuilder.U),
+ AxBuilder.Cast(Eraser.Mutate(node[1], bindings),
+ AxBuilder.U));
+
+ Eraser.Polarity = oldPolarity;
+ return res;
+ }
+
+ public override VCExpr VisitSelectOp(VCExprNAry node, VariableBindings bindings) {
+Contract.Requires((bindings != null));
+Contract.Requires((node != null));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ OpTypesPair originalOpTypes = OriginalOpTypes(node);
+ OpTypesPair newOpTypes;
+
+ if (!NewOpCache.TryGetValue(originalOpTypes, out newOpTypes)) {
+ MapType/*!*/ rawType = node[0].Type.AsMap;
+ Contract.Assert(rawType != null);
+ List<Type>/*!*/ abstractionInstantiation;
+ Function/*!*/ select =
+ AxBuilder.MapTypeAbstracter.Select(rawType, out abstractionInstantiation);
+ Contract.Assert(abstractionInstantiation != null);
+ newOpTypes = TypesPairForSelectStore(node, select, abstractionInstantiation);
+ NewOpCache.Add(originalOpTypes, newOpTypes);
+ }
+
+ return AssembleOpExpression(newOpTypes, node, bindings);
+ }
+
+ public override VCExpr VisitStoreOp(VCExprNAry node, VariableBindings bindings) {
+Contract.Requires((bindings != null));
+Contract.Requires((node != null));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ OpTypesPair originalOpTypes = OriginalOpTypes(node);
+ OpTypesPair newOpTypes;
+
+ if (!NewOpCache.TryGetValue(originalOpTypes, out newOpTypes)) {
+ MapType/*!*/ rawType = node[0].Type.AsMap;
+ List<Type>/*!*/ abstractionInstantiation;
+ Function/*!*/ store =
+ AxBuilder.MapTypeAbstracter.Store(rawType, out abstractionInstantiation);
+
+ newOpTypes = TypesPairForSelectStore(node, store, abstractionInstantiation);
+ NewOpCache.Add(originalOpTypes, newOpTypes);
+ }
+
+ return AssembleOpExpression(newOpTypes, node, bindings);
+ }
+
+ private OpTypesPair TypesPairForSelectStore(VCExprNAry/*!*/ node, Function/*!*/ untypedOp,
+ // instantiation of the abstract map type parameters
+ List<Type>/*!*/ abstractionInstantiation) {
+ Contract.Requires(node != null);
+ Contract.Requires(untypedOp != null);
+ Contract.Requires(abstractionInstantiation != null);
+
+ List<Type/*!*/>/*!*/ inferredTypeArgs = new List<Type/*!*/> ();
+ foreach (Type/*!*/ t in node.TypeArguments){Contract.Assert(t != null);
+// inferredTypeArgs.Add(AxBuilder.MapTypeAbstracter.AbstractMapTypeRecursively(t));
+ inferredTypeArgs.Add(t);}
+ foreach (Type/*!*/ t in abstractionInstantiation) {
+ Contract.Assert(t != null);
+ inferredTypeArgs.Add(t);}
+
+ Contract.Assert(untypedOp.InParams.Count == inferredTypeArgs.Count + node.Arity);
+ return new OpTypesPair (Gen.BoogieFunctionOp(untypedOp), inferredTypeArgs);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr VisitBoogieFunctionOp(VCExprNAry node, VariableBindings bindings) {
+Contract.Requires((bindings != null));
+Contract.Requires((node != null));
+Contract.Ensures(Contract.Result<VCExpr>() != null);
+ OpTypesPair originalOpTypes = OriginalOpTypes(node);
+ OpTypesPair newOpTypes;
+
+ if (!NewOpCache.TryGetValue(originalOpTypes, out newOpTypes)) {
+ Function/*!*/ oriFun = ((VCExprBoogieFunctionOp)node.Op).Func;
+ Contract.Assert(oriFun != null);
+ List<Type/*!*/>/*!*/ inferredTypeArgs = new List<Type/*!*/> ();
+ foreach (Type/*!*/ t in node.TypeArguments){Contract.Assert(t != null);
+// inferredTypeArgs.Add(AxBuilder.MapTypeAbstracter.AbstractMapTypeRecursively(t));
+ inferredTypeArgs.Add(t);}
+
+ VCExprOp/*!*/ newOp = Gen.BoogieFunctionOp(AxBuilderArguments.Typed2Untyped(oriFun));
+ newOpTypes = new OpTypesPair (newOp, inferredTypeArgs);
+
+ NewOpCache.Add(originalOpTypes, newOpTypes);
+ }
+
+ return AssembleOpExpression(newOpTypes, node, bindings);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ // cache from the typed operators to the untyped operators with
+ // explicit type arguments. the keys are pairs of the typed
+ // operator and the actual types of the argument expressions, the
+ // values are pairs of the new operators and the types that have
+ // to be given as explicit type arguments
+ private readonly IDictionary<OpTypesPair, OpTypesPair>/*!*/ NewOpCache =
+ new Dictionary<OpTypesPair, OpTypesPair>();
+
+ private struct OpTypesPair {
+ public readonly VCExprOp/*!*/ Op;
+ public readonly List<Type/*!*/>/*!*/ Types;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Op != null);
+ Contract.Invariant(cce.NonNullElements(Types));
+ }
+
+
+ public OpTypesPair(VCExprOp op, List<Type/*!*/>/*!*/ types) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(types));
+ this.Op = op;
+ this.Types = types;
+ this.HashCode = HFNS.PolyHash(op.GetHashCode(), 17, types);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (that is OpTypesPair) {
+ OpTypesPair thatPair = (OpTypesPair)that;
+ return this.Op.Equals(thatPair.Op) &&
+ HFNS.SameElements(this.Types, thatPair.Types);
+ }
+ return false;
+ }
+
+ private readonly int HashCode;
+
+ [Pure]
+ public override int GetHashCode() {
+ return HashCode;
+ }
+ }
+ }
} \ No newline at end of file
diff --git a/Source/VCExpr/TypeErasurePremisses.cs b/Source/VCExpr/TypeErasurePremisses.cs
index d4b36b68..dc9ad10f 100644
--- a/Source/VCExpr/TypeErasurePremisses.cs
+++ b/Source/VCExpr/TypeErasurePremisses.cs
@@ -1,1337 +1,1337 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-// Erasure of types using premisses (forall x :: type(x)=T ==> p(x))
-
-namespace Microsoft.Boogie.TypeErasure
-{
- using Microsoft.Boogie.VCExprAST;
-
- // When using type premisses, we can distinguish two kinds of type
- // parameters of a function or map: parameters that occur in the
- // formal argument types of the function are "implicit" because they
- // can be inferred from the actual argument types; parameters that
- // only occur in the result type of the function are "explicit"
- // because they are not inferrable and have to be given to the
- // function as additional arguments.
- //
- // The following structure is used to store the untyped version of a
- // typed function, together with the lists of implicit and explicit
- // type parameters (in the same order as they occur in the signature
- // of the original function).
-
- internal struct UntypedFunction
- {
- public readonly Function/*!*/ Fun;
- // type parameters that can be extracted from the value parameters
- public readonly List<TypeVariable/*!*/>/*!*/ ImplicitTypeParams;
- // type parameters that have to be given explicitly
- public readonly List<TypeVariable/*!*/>/*!*/ ExplicitTypeParams;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Fun != null);
- Contract.Invariant(cce.NonNullElements(ImplicitTypeParams));
- Contract.Invariant(cce.NonNullElements(ExplicitTypeParams));
- }
-
-
- public UntypedFunction(Function/*!*/ fun,
- List<TypeVariable/*!*/>/*!*/ implicitTypeParams,
- List<TypeVariable/*!*/>/*!*/ explicitTypeParams) {
- Contract.Requires(fun != null);
- Contract.Requires(cce.NonNullElements(implicitTypeParams));
- Contract.Requires(cce.NonNullElements(explicitTypeParams));
- Fun = fun;
- ImplicitTypeParams = implicitTypeParams;
- ExplicitTypeParams = explicitTypeParams;
- }
- }
-
- public class TypeAxiomBuilderPremisses : TypeAxiomBuilderIntBoolU
- {
-
- public TypeAxiomBuilderPremisses(VCExpressionGenerator gen)
- : base(gen) {
- Contract.Requires(gen != null);
-
- TypeFunction = HelperFuns.BoogieFunction("dummy", Type.Int);
- Typed2UntypedFunctions = new Dictionary<Function/*!*/, UntypedFunction>();
- MapTypeAbstracterAttr = null;
- }
-
- // constructor to allow cloning
- [NotDelayed]
- internal TypeAxiomBuilderPremisses(TypeAxiomBuilderPremisses builder)
- : base(builder) {
- Contract.Requires(builder != null);
- TypeFunction = builder.TypeFunction;
- Typed2UntypedFunctions =
- new Dictionary<Function/*!*/, UntypedFunction>(builder.Typed2UntypedFunctions);
-
- MapTypeAbstracterAttr =
- builder.MapTypeAbstracterAttr == null ?
- null : new MapTypeAbstractionBuilderPremisses(this, builder.Gen,
- builder.MapTypeAbstracterAttr);
- }
-
- public override Object Clone() {
- Contract.Ensures(Contract.Result<Object>() != null);
- return new TypeAxiomBuilderPremisses(this);
- }
-
- public override void Setup() {
- TypeFunction = HelperFuns.BoogieFunction("type", U, T);
- base.Setup();
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // generate axioms of the kind "forall x:U. {Int2U(U2Int(x))}
- // type(x)=int ==> Int2U(U2Int(x))==x"
- protected override VCExpr GenReverseCastAxiom(Function castToU, Function castFromU) {
- //Contract.Requires(castFromU != null);
- //Contract.Requires(castToU != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCTrigger/*!*/>/*!*/ triggers;
- VCExprVar/*!*/ var;
- VCExpr/*!*/ eq = GenReverseCastEq(castToU, castFromU, out var, out triggers);
- Contract.Assert(cce.NonNullElements(triggers));
- Contract.Assert(var != null);
- Contract.Assert(eq != null);
- VCExpr/*!*/ premiss;
- if (CommandLineOptions.Clo.TypeEncodingMethod
- == CommandLineOptions.TypeEncoding.None)
- premiss = VCExpressionGenerator.True;
- else
- premiss = GenVarTypeAxiom(var, cce.NonNull(castFromU.OutParams[0]).TypedIdent.Type,
- // we don't have any bindings available
- new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>());
- VCExpr/*!*/ matrix = Gen.ImpliesSimp(premiss, eq);
- Contract.Assert(matrix != null);
- return Gen.Forall(HelperFuns.ToList(var), triggers, "cast:" + castFromU.Name, -1, matrix);
- }
-
- protected override VCExpr GenCastTypeAxioms(Function castToU, Function castFromU) {
- //Contract.Requires(castFromU != null);
- //Contract.Requires(castToU != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Type/*!*/ fromType = cce.NonNull(castToU.InParams[0]).TypedIdent.Type;
- return GenFunctionAxiom(castToU, new List<TypeVariable/*!*/>(), new List<TypeVariable/*!*/>(),
- HelperFuns.ToList(fromType), fromType);
- }
-
- private MapTypeAbstractionBuilderPremisses MapTypeAbstracterAttr;
-
- internal override MapTypeAbstractionBuilder/*!*/ MapTypeAbstracter {
- get {
- Contract.Ensures(Contract.Result<MapTypeAbstractionBuilder>() != null);
-
- if (MapTypeAbstracterAttr == null)
- MapTypeAbstracterAttr = new MapTypeAbstractionBuilderPremisses(this, Gen);
- return MapTypeAbstracterAttr;
- }
- }
-
- internal MapTypeAbstractionBuilderPremisses/*!*/ MapTypeAbstracterPremisses {
- get {
- Contract.Ensures(Contract.Result<MapTypeAbstractionBuilderPremisses>() != null);
-
- return (MapTypeAbstractionBuilderPremisses)MapTypeAbstracter;
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // function that maps individuals to their type
- // the field is overwritten with its actual value in "Setup"
- private Function/*!*/ TypeFunction;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(TypeFunction != null);
- }
-
-
- public VCExpr TypeOf(VCExpr expr) {
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Gen.Function(TypeFunction, expr);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // Generate type premisses and type parameter bindings for quantifiers, functions, procedures
-
- // let-bindings to extract the instantiations of type parameters
- public List<VCExprLetBinding/*!*/>/*!*/
- GenTypeParamBindings(// the original bound variables and (implicit) type parameters
- List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ oldBoundVars,
- // VariableBindings to which the translation
- // TypeVariable -> VCExprVar is added
- VariableBindings/*!*/ bindings,
- bool addTypeVarsToBindings) {
- Contract.Requires(typeParams != null);
- Contract.Requires(cce.NonNullElements(oldBoundVars));
- Contract.Requires(bindings != null);
-
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
-
- // type variables are replaced with ordinary variables that are bound using a
- // let-expression
- if (addTypeVarsToBindings) {
- foreach (TypeVariable/*!*/ tvar in typeParams) {
- Contract.Assert(tvar != null);
- bindings.TypeVariableBindings.Add(tvar, Gen.Variable(tvar.Name, T));
- }
- }
-
- // extract the values of type variables from the term variables
- List<VCExprVar/*!*/>/*!*/ UtypedVars = new List<VCExprVar/*!*/>(oldBoundVars.Count);
- List<Type/*!*/>/*!*/ originalTypes = new List<Type/*!*/>(oldBoundVars.Count);
- foreach (VCExprVar var in oldBoundVars) {
- VCExprVar/*!*/ newVar = bindings.VCExprVarBindings[var];
- if (newVar.Type.Equals(U)) {
- UtypedVars.Add(newVar);
- originalTypes.Add(var.Type);
- }
- }
-
- UtypedVars.TrimExcess();
- originalTypes.TrimExcess();
-
- return BestTypeVarExtractors(typeParams, originalTypes, UtypedVars, bindings);
- }
-
-
- public VCExpr/*!*/ AddTypePremisses(List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings,
- VCExpr/*!*/ typePremisses, bool universal,
- VCExpr/*!*/ body) {
- Contract.Requires(cce.NonNullElements(typeVarBindings));
- Contract.Requires(typePremisses != null);
- Contract.Requires(body != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr/*!*/ bodyWithPremisses;
- if (universal)
- bodyWithPremisses = Gen.ImpliesSimp(typePremisses, body);
- else
- bodyWithPremisses = Gen.AndSimp(typePremisses, body);
-
- return Gen.Let(typeVarBindings, bodyWithPremisses);
- }
-
-
- ///////////////////////////////////////////////////////////////////////////
- // Extract the instantiations of type variables from the concrete types of
- // term variables. E.g., for a function f<a>(x : C a), we would extract the
- // instantiation of "a" by looking at the concrete type of "x".
-
- public List<VCExprLetBinding/*!*/>/*!*/
- BestTypeVarExtractors(List<TypeVariable/*!*/>/*!*/ vars, List<Type/*!*/>/*!*/ types,
- List<VCExprVar/*!*/>/*!*/ concreteTypeSources,
- VariableBindings/*!*/ bindings) {
- Contract.Requires(cce.NonNullElements(vars));
- Contract.Requires(cce.NonNullElements(types));
- Contract.Requires(cce.NonNullElements(concreteTypeSources));
- Contract.Requires(bindings != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
-
- List<VCExprLetBinding/*!*/>/*!*/ typeParamBindings = new List<VCExprLetBinding/*!*/>();
- foreach (TypeVariable/*!*/ var in vars) {
- Contract.Assert(var != null);
- VCExpr extractor = BestTypeVarExtractor(var, types, concreteTypeSources);
- if (extractor != null)
- typeParamBindings.Add(
- Gen.LetBinding((VCExprVar)bindings.TypeVariableBindings[var],
- extractor));
- }
- return typeParamBindings;
- }
-
- private VCExpr BestTypeVarExtractor(TypeVariable/*!*/ var, List<Type/*!*/>/*!*/ types,
- List<VCExprVar/*!*/>/*!*/ concreteTypeSources) {
- Contract.Requires(var != null);
- Contract.Requires(cce.NonNullElements(types));
- Contract.Requires(cce.NonNullElements(concreteTypeSources));
- List<VCExpr/*!*/> allExtractors = TypeVarExtractors(var, types, concreteTypeSources);
- Contract.Assert(cce.NonNullElements(allExtractors));
- if (allExtractors.Count == 0)
- return null;
-
- VCExpr bestExtractor = allExtractors[0];
- int bestExtractorSize = SizeComputingVisitor.ComputeSize(bestExtractor);
- for (int i = 1; i < allExtractors.Count; ++i) {
- int newSize = SizeComputingVisitor.ComputeSize(allExtractors[i]);
- if (newSize < bestExtractorSize) {
- bestExtractor = allExtractors[i];
- bestExtractorSize = newSize;
- }
- }
-
- return bestExtractor;
- }
-
- private List<VCExpr/*!*/>/*!*/ TypeVarExtractors(TypeVariable/*!*/ var, List<Type/*!*/>/*!*/ types,
- List<VCExprVar/*!*/>/*!*/ concreteTypeSources) {
- Contract.Requires(var != null);
- Contract.Requires(cce.NonNullElements(types));
- Contract.Requires(cce.NonNullElements(concreteTypeSources));
- Contract.Requires((types.Count == concreteTypeSources.Count));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
- List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
- for (int i = 0; i < types.Count; ++i)
- TypeVarExtractors(var, types[i], TypeOf(concreteTypeSources[i]), res);
-
- return res;
- }
-
- private void TypeVarExtractors(TypeVariable var, Type completeType, VCExpr innerTerm, List<VCExpr/*!*/>/*!*/ extractors) {
- Contract.Requires(innerTerm != null);
- Contract.Requires(completeType != null);
- Contract.Requires(var != null);
- Contract.Requires(cce.NonNullElements(extractors));
- if (completeType.IsVariable) {
- if (var.Equals(completeType)) {
- extractors.Add(innerTerm);
- } // else nothing
- } else if (completeType.IsBasic) {
- // nothing
- } else if (completeType.IsCtor) {
- CtorType/*!*/ ctorType = completeType.AsCtor;
- if (ctorType.Arguments.Count > 0) {
- // otherwise there are no chances of extracting any
- // instantiations from this type
- TypeCtorRepr repr = GetTypeCtorReprStruct(ctorType.Decl);
- for (int i = 0; i < ctorType.Arguments.Count; ++i) {
- VCExpr/*!*/ newInnerTerm = Gen.Function(repr.Dtors[i], innerTerm);
- Contract.Assert(newInnerTerm != null);
- TypeVarExtractors(var, ctorType.Arguments[i], newInnerTerm, extractors);
- }
- }
- } else if (completeType.IsMap) {
- TypeVarExtractors(var, MapTypeAbstracter.AbstractMapType(completeType.AsMap),
- innerTerm, extractors);
- } else {
- System.Diagnostics.Debug.Fail("Don't know how to handle this type: " + completeType);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Symbols for representing functions
-
- // Globally defined functions
- private readonly IDictionary<Function/*!*/, UntypedFunction/*!*/>/*!*/ Typed2UntypedFunctions;
- [ContractInvariantMethod]
- void Typed2UntypedFunctionsInvariantMethod() {
- Contract.Invariant(Typed2UntypedFunctions != null);
- }
-
- // distinguish between implicit and explicit type parameters
- internal static void SeparateTypeParams(List<Type/*!*/>/*!*/ valueArgumentTypes,
- List<TypeVariable>/*!*/ allTypeParams,
- out List<TypeVariable/*!*/>/*!*/ implicitParams,
- out List<TypeVariable/*!*/>/*!*/ explicitParams) {
- Contract.Requires(cce.NonNullElements(valueArgumentTypes));
- Contract.Requires(allTypeParams != null);
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out implicitParams)));
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out explicitParams)));
- List<TypeVariable>/*!*/ varsInInParamTypes = new List<TypeVariable>();
- foreach (Type/*!*/ t in valueArgumentTypes) {
- Contract.Assert(t != null);
- varsInInParamTypes.AppendWithoutDups(t.FreeVariables);
- }
-
- implicitParams = new List<TypeVariable/*!*/>(allTypeParams.Count);
- explicitParams = new List<TypeVariable/*!*/>(allTypeParams.Count);
-
- foreach (TypeVariable/*!*/ var in allTypeParams) {
- Contract.Assert(var != null);
- if (varsInInParamTypes.Contains(var))
- implicitParams.Add(var);
- else
- explicitParams.Add(var);
- }
-
- implicitParams.TrimExcess();
- explicitParams.TrimExcess();
- }
-
- internal UntypedFunction Typed2Untyped(Function fun) {
- Contract.Requires(fun != null);
- UntypedFunction res;
- if (!Typed2UntypedFunctions.TryGetValue(fun, out res)) {
- Contract.Assert(fun.OutParams.Count == 1);
-
- // if all of the parameters are int or bool, the function does
- // not have to be changed
- if (fun.InParams.All(param => UnchangedType(cce.NonNull(param).TypedIdent.Type)) &&
- UnchangedType(cce.NonNull(fun.OutParams[0]).TypedIdent.Type) &&
- fun.TypeParameters.Count == 0) {
- res = new UntypedFunction(fun, new List<TypeVariable/*!*/>(), new List<TypeVariable/*!*/>());
- } else {
- List<Type/*!*/>/*!*/ argTypes = new List<Type/*!*/>();
- foreach (Variable/*!*/ v in fun.InParams) {
- Contract.Assert(v != null);
- argTypes.Add(v.TypedIdent.Type);
- }
-
- List<TypeVariable/*!*/>/*!*/ implicitParams, explicitParams;
- SeparateTypeParams(argTypes, fun.TypeParameters, out implicitParams, out explicitParams);
-
- Type[]/*!*/ types = new Type[explicitParams.Count + fun.InParams.Count + 1];
- int i = 0;
- for (int j = 0; j < explicitParams.Count; ++j) {
- types[i] = T;
- i = i + 1;
- }
- for (int j = 0; j < fun.InParams.Count; ++i, ++j)
- types[i] = TypeAfterErasure(cce.NonNull(fun.InParams[j]).TypedIdent.Type);
- types[types.Length - 1] = TypeAfterErasure(cce.NonNull(fun.OutParams[0]).TypedIdent.Type);
-
- Function/*!*/ untypedFun = HelperFuns.BoogieFunction(fun.Name, types);
- Contract.Assert(untypedFun != null);
- untypedFun.Attributes = fun.Attributes;
- res = new UntypedFunction(untypedFun, implicitParams, explicitParams);
- if (U.Equals(types[types.Length - 1]))
- AddTypeAxiom(GenFunctionAxiom(res, fun));
- }
-
- Typed2UntypedFunctions.Add(fun, res);
- }
- return res;
- }
-
- private VCExpr GenFunctionAxiom(UntypedFunction fun, Function originalFun) {
- Contract.Requires(originalFun != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<Type/*!*/>/*!*/ originalInTypes = new List<Type/*!*/>(originalFun.InParams.Count);
- foreach (Formal/*!*/ f in originalFun.InParams)
- originalInTypes.Add(f.TypedIdent.Type);
-
- return GenFunctionAxiom(fun.Fun, fun.ImplicitTypeParams, fun.ExplicitTypeParams,
- originalInTypes,
- cce.NonNull(originalFun.OutParams[0]).TypedIdent.Type);
- }
-
- internal VCExpr/*!*/ GenFunctionAxiom(Function/*!*/ fun,
- List<TypeVariable/*!*/>/*!*/ implicitTypeParams,
- List<TypeVariable/*!*/>/*!*/ explicitTypeParams,
- List<Type/*!*/>/*!*/ originalInTypes,
- Type/*!*/ originalResultType) {
- Contract.Requires(cce.NonNullElements(implicitTypeParams));
- Contract.Requires(fun != null);
- Contract.Requires(cce.NonNullElements(explicitTypeParams));
- Contract.Requires(cce.NonNullElements(originalInTypes));
- Contract.Requires(originalResultType != null);
- Contract.Requires(originalInTypes.Count + explicitTypeParams.Count == fun.InParams.Count);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.None) {
- return VCExpressionGenerator.True;
- }
-
- List<VCExprVar/*!*/>/*!*/ typedInputVars = new List<VCExprVar/*!*/>(originalInTypes.Count);
- int i = 0;
- foreach (Type/*!*/ t in originalInTypes) {
- Contract.Assert(t != null);
- typedInputVars.Add(Gen.Variable("arg" + i, t));
- i = i + 1;
- }
-
- VariableBindings/*!*/ bindings = new VariableBindings();
-
- // type parameters that have to be given explicitly are replaced
- // with universally quantified type variables
- List<VCExprVar/*!*/>/*!*/ boundVars = new List<VCExprVar/*!*/>(explicitTypeParams.Count + typedInputVars.Count);
- foreach (TypeVariable/*!*/ var in explicitTypeParams) {
- Contract.Assert(var != null);
- VCExprVar/*!*/ newVar = Gen.Variable(var.Name, T);
- boundVars.Add(newVar);
- bindings.TypeVariableBindings.Add(var, newVar);
- }
-
- // bound term variables are replaced with bound term variables typed in
- // a simpler way
- foreach (VCExprVar/*!*/ var in typedInputVars) {
- Contract.Assert(var != null);
- Type/*!*/ newType = TypeAfterErasure(var.Type);
- Contract.Assert(newType != null);
- VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
- Contract.Assert(newVar != null);
- boundVars.Add(newVar);
- bindings.VCExprVarBindings.Add(var, newVar);
- }
-
- List<VCExprLetBinding/*!*/> typeVarBindings =
- GenTypeParamBindings(implicitTypeParams, typedInputVars, bindings, true);
- Contract.Assert(cce.NonNullElements(typeVarBindings));
-
- VCExpr/*!*/ funApp = Gen.Function(fun, HelperFuns.ToVCExprList(boundVars));
- Contract.Assert(funApp != null);
- VCExpr/*!*/ conclusion = Gen.Eq(TypeOf(funApp),
- Type2Term(originalResultType, bindings.TypeVariableBindings));
- Contract.Assert(conclusion != null);
- VCExpr conclusionWithPremisses =
- // leave out antecedents of function type axioms ... they don't appear necessary,
- // because a function can always be extended to all U-values (right?)
- // AddTypePremisses(typeVarBindings, typePremisses, true, conclusion);
- Gen.Let(typeVarBindings, conclusion);
-
- if (boundVars.Count > 0) {
- List<VCTrigger/*!*/> triggers = HelperFuns.ToList(Gen.Trigger(true, HelperFuns.ToList(funApp)));
- Contract.Assert(cce.NonNullElements(triggers));
- return Gen.Forall(boundVars, triggers, "funType:" + fun.Name, -1, conclusionWithPremisses);
- } else {
- return conclusionWithPremisses;
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
- //Contract.Requires(originalType != null);
- //Contract.Requires(var != null);
- if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.None) return;
- AddTypeAxiom(GenVarTypeAxiom(var, originalType,
- // we don't have any bindings available
- new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>()));
- }
-
- public VCExpr GenVarTypeAxiom(VCExprVar var, Type originalType, IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ varMapping) {
- Contract.Requires(var != null);
- Contract.Requires(originalType != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(varMapping));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- if (!var.Type.Equals(originalType)) {
- VCExpr/*!*/ typeRepr = Type2Term(originalType, varMapping);
- return Gen.Eq(TypeOf(var), typeRepr);
- }
- return VCExpressionGenerator.True;
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////
-
- internal class MapTypeAbstractionBuilderPremisses : MapTypeAbstractionBuilder
- {
-
- private readonly TypeAxiomBuilderPremisses/*!*/ AxBuilderPremisses;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilderPremisses != null);
- }
-
-
- internal MapTypeAbstractionBuilderPremisses(TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen)
- : base(axBuilder, gen) {
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
-
- this.AxBuilderPremisses = axBuilder;
- }
-
- // constructor for cloning
- internal MapTypeAbstractionBuilderPremisses(TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen, MapTypeAbstractionBuilderPremisses builder)
- : base(axBuilder, gen, builder) {
- Contract.Requires(builder != null);
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
-
- this.AxBuilderPremisses = axBuilder;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // Determine the type parameters of a map type that have to be
- // given explicitly when applying the select function (the
- // parameters that only occur in the result type of the
- // map). These parameters are given as a list of indexes sorted in
- // ascending order; the index i refers to the i'th bound variable
- // in a type <a0, a1, ..., an>[...]...
- public List<int>/*!*/ ExplicitSelectTypeParams(MapType type) {
- Contract.Requires(type != null);
- Contract.Ensures(Contract.Result<List<int>>() != null);
-
- List<int> res;
- if (!explicitSelectTypeParamsCache.TryGetValue(type, out res)) {
- List<TypeVariable/*!*/>/*!*/ explicitParams, implicitParams;
- TypeAxiomBuilderPremisses.SeparateTypeParams(type.Arguments.ToList(),
- type.TypeParameters,
- out implicitParams,
- out explicitParams);
- res = new List<int>(explicitParams.Count);
- foreach (TypeVariable/*!*/ var in explicitParams) {
- Contract.Assert(var != null);
- res.Add(type.TypeParameters.IndexOf(var));
- }
- explicitSelectTypeParamsCache.Add(type, res);
- }
- return cce.NonNull(res);
- }
-
- private IDictionary<MapType/*!*/, List<int>/*!*/>/*!*/ explicitSelectTypeParamsCache =
- new Dictionary<MapType/*!*/, List<int>/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvarant() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(explicitSelectTypeParamsCache));
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
-
- protected override void GenSelectStoreFunctions(MapType abstractedType, TypeCtorDecl synonym, out Function/*!*/ select, out Function/*!*/ store) {
- //Contract.Requires(synonym != null);
- //Contract.Requires(abstractedType != null);
- Contract.Ensures(Contract.ValueAtReturn(out select) != null);
- Contract.Ensures(Contract.ValueAtReturn(out store) != null);
- Type/*!*/ mapTypeSynonym;
- List<TypeVariable/*!*/>/*!*/ typeParams;
- List<Type/*!*/>/*!*/ originalInTypes;
- GenTypeAxiomParams(abstractedType, synonym, out mapTypeSynonym,
- out typeParams, out originalInTypes);
-
- // select
- List<TypeVariable/*!*/>/*!*/ explicitSelectParams, implicitSelectParams;
- select = CreateAccessFun(typeParams, originalInTypes,
- abstractedType.Result, synonym.Name + "Select",
- out implicitSelectParams, out explicitSelectParams);
-
- // store, which gets one further argument: the assigned rhs
- originalInTypes.Add(abstractedType.Result);
-
- List<TypeVariable/*!*/>/*!*/ explicitStoreParams, implicitStoreParams;
- store = CreateAccessFun(typeParams, originalInTypes,
- mapTypeSynonym, synonym.Name + "Store",
- out implicitStoreParams, out explicitStoreParams);
-
- // the store function does not have any explicit type parameters
- Contract.Assert(explicitStoreParams.Count == 0);
-
- if (CommandLineOptions.Clo.UseArrayTheory) {
- select.AddAttribute("builtin", "select");
- store.AddAttribute("builtin", "store");
- } else {
- AxBuilder.AddTypeAxiom(GenMapAxiom0(select, store,
- abstractedType.Result,
- implicitSelectParams, explicitSelectParams,
- originalInTypes));
- AxBuilder.AddTypeAxiom(GenMapAxiom1(select, store,
- abstractedType.Result,
- explicitSelectParams));
- }
- }
-
- protected void GenTypeAxiomParams(MapType/*!*/ abstractedType, TypeCtorDecl/*!*/ synonymDecl,
- out Type/*!*/ mapTypeSynonym,
- out List<TypeVariable/*!*/>/*!*/ typeParams,
- out List<Type/*!*/>/*!*/ originalIndexTypes) {
- Contract.Requires(abstractedType != null);
- Contract.Requires(synonymDecl != null);
- Contract.Ensures(Contract.ValueAtReturn(out mapTypeSynonym) != null);
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out typeParams)));
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out originalIndexTypes)));
- typeParams = new List<TypeVariable/*!*/>();
- typeParams.AddRange(abstractedType.TypeParameters);
- typeParams.AddRange(abstractedType.FreeVariables);
-
- originalIndexTypes = new List<Type/*!*/>(abstractedType.Arguments.Count + 1);
- List<Type>/*!*/ mapTypeParams = new List<Type>();
- foreach (TypeVariable/*!*/ var in abstractedType.FreeVariables) {
- Contract.Assert(var != null);
- mapTypeParams.Add(var);
- }
-
- if (CommandLineOptions.Clo.MonomorphicArrays)
- mapTypeSynonym = abstractedType;
- else
- mapTypeSynonym = new CtorType(Token.NoToken, synonymDecl, mapTypeParams);
-
- originalIndexTypes.Add(mapTypeSynonym);
- originalIndexTypes.AddRange(abstractedType.Arguments.ToList());
- }
-
- // method to actually create the select or store function
- private Function/*!*/ CreateAccessFun(List<TypeVariable/*!*/>/*!*/ originalTypeParams,
- List<Type/*!*/>/*!*/ originalInTypes,
- Type/*!*/ originalResult,
- string/*!*/ name,
- out List<TypeVariable/*!*/>/*!*/ implicitTypeParams, out List<TypeVariable/*!*/>/*!*/ explicitTypeParams) {
- Contract.Requires(cce.NonNullElements(originalTypeParams));
- Contract.Requires(cce.NonNullElements(originalInTypes));
- Contract.Requires(originalResult != null);
- Contract.Requires(name != null);
- Contract.Ensures(Contract.Result<Function>() != null);
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out implicitTypeParams)));
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out explicitTypeParams)));
-
- // select and store are basically handled like normal functions: the type
- // parameters are split into the implicit parameters, and into the parameters
- // that have to be given explicitly
- TypeAxiomBuilderPremisses.SeparateTypeParams(originalInTypes,
- new List<TypeVariable>(originalTypeParams),
- out implicitTypeParams,
- out explicitTypeParams);
-
- Type[]/*!*/ ioTypes = new Type[explicitTypeParams.Count + originalInTypes.Count + 1];
- int i = 0;
- for (; i < explicitTypeParams.Count; ++i)
- ioTypes[i] = AxBuilder.T;
- foreach (Type/*!*/ type in originalInTypes) {
- Contract.Assert(type != null);
- if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(type))
- ioTypes[i] = type;
- else
- ioTypes[i] = AxBuilder.U;
- i++;
- }
- if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(originalResult))
- ioTypes[i] = originalResult;
- else
- ioTypes[i] = AxBuilder.U;
-
- Function/*!*/ res = HelperFuns.BoogieFunction(name, ioTypes);
- Contract.Assert(res != null);
-
- if (AxBuilder.U.Equals(ioTypes[i])) {
- AxBuilder.AddTypeAxiom(
- AxBuilderPremisses.GenFunctionAxiom(res,
- implicitTypeParams, explicitTypeParams,
- originalInTypes, originalResult));
- }
- return res;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // The normal axioms of the theory of arrays (without extensionality)
-
- private VCExpr/*!*/ Select(Function/*!*/ select,
- // in general, the select function has to
- // receive explicit type parameters (which
- // are here already represented as VCExpr
- // of type T)
- List<VCExpr/*!*/>/*!*/ typeParams,
- VCExpr/*!*/ map,
- List<VCExprVar/*!*/>/*!*/ indexes) {
- Contract.Requires(select != null);
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Requires(map != null);
- Contract.Requires(cce.NonNullElements(indexes));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- List<VCExpr/*!*/>/*!*/ selectArgs = new List<VCExpr/*!*/>(typeParams.Count + indexes.Count + 1);
- selectArgs.AddRange(typeParams);
- selectArgs.Add(map);
- selectArgs.AddRange(HelperFuns.ToVCExprList(indexes));
- return Gen.Function(select, selectArgs);
- }
-
- private VCExpr Store(Function store, VCExpr map, List<VCExprVar/*!*/>/*!*/ indexes, VCExpr val) {
- Contract.Requires(val != null);
- Contract.Requires(map != null);
- Contract.Requires(store != null);
- Contract.Requires(cce.NonNullElements(indexes));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCExpr/*!*/>/*!*/ storeArgs = new List<VCExpr/*!*/>(indexes.Count + 2);
- storeArgs.Add(map);
- storeArgs.AddRange(HelperFuns.ToVCExprList(indexes));
- storeArgs.Add(val);
- return Gen.Function(store, storeArgs);
- }
-
- /// <summary>
- /// Generate:
- /// (forall m, indexes, val ::
- /// type(val) == T ==>
- /// select(store(m, indexes, val), indexes) == val)
- /// where the quantifier body is also enclosed in a let that defines portions of T, if needed.
- /// </summary>
- private VCExpr GenMapAxiom0(Function select, Function store, Type mapResult, List<TypeVariable/*!*/>/*!*/ implicitTypeParamsSelect, List<TypeVariable/*!*/>/*!*/ explicitTypeParamsSelect, List<Type/*!*/>/*!*/ originalInTypes) {
- Contract.Requires(mapResult != null);
- Contract.Requires(store != null);
- Contract.Requires(select != null);
- Contract.Requires(cce.NonNullElements(implicitTypeParamsSelect));
- Contract.Requires(cce.NonNullElements(originalInTypes));
- Contract.Requires(cce.NonNullElements(explicitTypeParamsSelect));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- int arity = store.InParams.Count - 2;
- List<VCExprVar/*!*/> inParams = new List<VCExprVar/*!*/>();
- List<VCExprVar/*!*/> quantifiedVars = new List<VCExprVar/*!*/>(store.InParams.Count);
- VariableBindings bindings = new VariableBindings();
-
- // bound variable: m
- VCExprVar typedM = Gen.Variable("m", originalInTypes[0]);
- VCExprVar m = Gen.Variable("m", AxBuilder.U);
- inParams.Add(typedM);
- quantifiedVars.Add(m);
- bindings.VCExprVarBindings.Add(typedM, m);
-
- // bound variables: indexes
- List<Type/*!*/> origIndexTypes = new List<Type/*!*/>(arity);
- List<Type/*!*/> indexTypes = new List<Type/*!*/>(arity);
- for (int i = 1; i < store.InParams.Count - 1; i++) {
- origIndexTypes.Add(originalInTypes[i]);
- indexTypes.Add(cce.NonNull(store.InParams[i]).TypedIdent.Type);
- }
- Contract.Assert(arity == indexTypes.Count);
- List<VCExprVar/*!*/> typedArgs = HelperFuns.VarVector("arg", origIndexTypes, Gen);
- Contract.Assert(cce.NonNullElements(typedArgs));
- List<VCExprVar/*!*/> indexes = HelperFuns.VarVector("x", indexTypes, Gen);
- Contract.Assert(cce.NonNullElements(indexes));
- Contract.Assert(typedArgs.Count == indexes.Count);
- inParams.AddRange(typedArgs);
- quantifiedVars.AddRange(indexes);
- for (int i = 0; i < arity; i++) {
- bindings.VCExprVarBindings.Add(typedArgs[i], indexes[i]);
- }
-
- // bound variable: val
- VCExprVar typedVal = Gen.Variable("val", mapResult);
- VCExprVar val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
- quantifiedVars.Add(val);
- bindings.VCExprVarBindings.Add(typedVal, val);
-
- // add all type parameters into bindings
- foreach (TypeVariable tp in implicitTypeParamsSelect) {
- VCExprVar tVar = Gen.Variable(tp.Name, AxBuilderPremisses.T);
- bindings.TypeVariableBindings.Add(tp, tVar);
- }
- List<VCExpr/*!*/> typeParams = new List<VCExpr/*!*/>(explicitTypeParamsSelect.Count);
- foreach (TypeVariable tp in explicitTypeParamsSelect) {
- VCExprVar tVar = Gen.Variable(tp.Name, AxBuilderPremisses.T);
- bindings.TypeVariableBindings.Add(tp, tVar);
- // ... and record these explicit type-parameter arguments in typeParams
- typeParams.Add(tVar);
- }
-
- VCExpr/*!*/ storeExpr = Store(store, m, indexes, val);
- Contract.Assert(storeExpr != null);
- VCExpr/*!*/ selectExpr = Select(select, typeParams, storeExpr, indexes);
- Contract.Assert(selectExpr != null);
-
- // Create let-binding definitions for all type parameters.
- // The implicit ones can be phrased in terms of the types of the ordinary in-parameters, and
- // we want to make sure that they don't get phrased in terms of the out-parameter, so we pass
- // in inParams here.
- List<VCExprLetBinding/*!*/> letBindings_Implicit =
- AxBuilderPremisses.GenTypeParamBindings(implicitTypeParamsSelect, inParams, bindings, false);
- Contract.Assert(cce.NonNullElements(letBindings_Implicit));
- // The explicit ones, by definition, can only be phrased in terms of the result, so we pass
- // in List(typedVal) here.
- List<VCExprLetBinding/*!*/> letBindings_Explicit =
- AxBuilderPremisses.GenTypeParamBindings(explicitTypeParamsSelect, HelperFuns.ToList(typedVal), bindings, false);
- Contract.Assert(cce.NonNullElements(letBindings_Explicit));
-
- // generate: select(store(m, indices, val)) == val
- VCExpr/*!*/ eq = Gen.Eq(selectExpr, val);
- Contract.Assert(eq != null);
- // generate: type(val) == T, where T is the type of val
- VCExpr/*!*/ ante = Gen.Eq(
- AxBuilderPremisses.TypeOf(val),
- AxBuilderPremisses.Type2Term(mapResult, bindings.TypeVariableBindings));
- Contract.Assert(ante != null);
- VCExpr body;
- if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.None ||
- !AxBuilder.U.Equals(cce.NonNull(select.OutParams[0]).TypedIdent.Type)) {
- body = Gen.Let(letBindings_Explicit, eq);
- } else {
- body = Gen.Let(letBindings_Implicit, Gen.Let(letBindings_Explicit, Gen.ImpliesSimp(ante, eq)));
- }
- return Gen.Forall(quantifiedVars, new List<VCTrigger/*!*/>(), "mapAx0:" + select.Name, 0, body);
- }
-
- private VCExpr GenMapAxiom1(Function select, Function store, Type mapResult, List<TypeVariable/*!*/>/*!*/ explicitSelectParams) {
- Contract.Requires(mapResult != null);
- Contract.Requires(store != null);
- Contract.Requires(select != null);
- Contract.Requires(cce.NonNullElements(explicitSelectParams));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- int arity = store.InParams.Count - 2;
-
- List<Type/*!*/> indexTypes = new List<Type/*!*/>();
- for (int i = 1; i < store.InParams.Count - 1; i++) {
- indexTypes.Add(cce.NonNull(store.InParams[i]).TypedIdent.Type);
- }
- Contract.Assert(indexTypes.Count == arity);
-
- List<VCExprVar/*!*/>/*!*/ indexes0 = HelperFuns.VarVector("x", indexTypes, Gen);
- Contract.Assert(cce.NonNullElements(indexes0));
- List<VCExprVar/*!*/>/*!*/ indexes1 = HelperFuns.VarVector("y", indexTypes, Gen);
- Contract.Assert(cce.NonNullElements(indexes1));
- VCExprVar/*!*/ m = Gen.Variable("m", AxBuilder.U);
- Contract.Assert(m != null);
- VCExprVar/*!*/ val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
- Contract.Assert(val != null);
-
- // extract the explicit type parameters from the actual result type ...
- VCExprVar/*!*/ typedVal = Gen.Variable("val", mapResult);
- Contract.Assert(typedVal != null);
- VariableBindings/*!*/ bindings = new VariableBindings();
- bindings.VCExprVarBindings.Add(typedVal, val);
-
- List<VCExprLetBinding/*!*/>/*!*/ letBindings =
- AxBuilderPremisses.GenTypeParamBindings(explicitSelectParams,
- HelperFuns.ToList(typedVal),
- bindings, true);
- Contract.Assert(cce.NonNullElements(letBindings));
-
- // ... and quantify the introduced term variables for type
- // parameters universally
- List<VCExprVar/*!*/>/*!*/ typeParams = new List<VCExprVar/*!*/>(explicitSelectParams.Count);
- List<VCExpr/*!*/>/*!*/ typeParamsExpr = new List<VCExpr/*!*/>(explicitSelectParams.Count);
- foreach (TypeVariable/*!*/ var in explicitSelectParams) {
- Contract.Assert(var != null);
- VCExprVar/*!*/ newVar = (VCExprVar)bindings.TypeVariableBindings[var];
- Contract.Assert(newVar != null);
- typeParams.Add(newVar);
- typeParamsExpr.Add(newVar);
- }
-
- VCExpr/*!*/ storeExpr = Store(store, m, indexes0, val);
- Contract.Assert(storeExpr != null);
- VCExpr/*!*/ selectWithoutStoreExpr = Select(select, typeParamsExpr, m, indexes1);
- Contract.Assert(selectWithoutStoreExpr != null);
- VCExpr/*!*/ selectExpr = Select(select, typeParamsExpr, storeExpr, indexes1);
- Contract.Assert(selectExpr != null);
-
- VCExpr/*!*/ selectEq = Gen.Eq(selectExpr, selectWithoutStoreExpr);
- Contract.Assert(selectEq != null);
-
- List<VCExprVar/*!*/>/*!*/ quantifiedVars = new List<VCExprVar/*!*/>(indexes0.Count + indexes1.Count + 2);
- quantifiedVars.Add(val);
- quantifiedVars.Add(m);
- quantifiedVars.AddRange(indexes0);
- quantifiedVars.AddRange(indexes1);
- quantifiedVars.AddRange(typeParams);
-
- List<VCTrigger/*!*/>/*!*/ triggers = new List<VCTrigger/*!*/>();
- Contract.Assert(cce.NonNullElements(triggers));
-
- VCExpr/*!*/ axiom = VCExpressionGenerator.True;
- Contract.Assert(axiom != null);
-
- // first non-interference criterium: the queried location is
- // different from the assigned location
- for (int i = 0; i < arity; ++i) {
- VCExpr/*!*/ indexesEq = Gen.Eq(indexes0[i], indexes1[i]);
- VCExpr/*!*/ matrix = Gen.Or(indexesEq, selectEq);
- VCExpr/*!*/ conjunct = Gen.Forall(quantifiedVars, triggers, "mapAx1:" + select.Name + ":" + i, 0, matrix);
- Contract.Assert(indexesEq != null);
- Contract.Assert(matrix != null);
- Contract.Assert(conjunct != null);
- axiom = Gen.AndSimp(axiom, conjunct);
- }
-
- // second non-interference criterion: the queried type is
- // different from the assigned type
- VCExpr/*!*/ typesEq = VCExpressionGenerator.True;
- foreach (VCExprLetBinding/*!*/ b in letBindings) {
- Contract.Assert(b != null);
- typesEq = Gen.AndSimp(typesEq, Gen.Eq(b.V, b.E));
- }
- VCExpr/*!*/ matrix2 = Gen.Or(typesEq, selectEq);
- VCExpr/*!*/ conjunct2 = Gen.Forall(quantifiedVars, triggers, "mapAx2:" + select.Name, 0, matrix2);
- axiom = Gen.AndSimp(axiom, conjunct2);
-
- return axiom;
- }
-
- }
-
- /////////////////////////////////////////////////////////////////////////////
-
- public class TypeEraserPremisses : TypeEraser
- {
-
- private readonly TypeAxiomBuilderPremisses/*!*/ AxBuilderPremisses;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilderPremisses != null);
- }
-
-
- private OpTypeEraser OpEraserAttr = null;
- protected override OpTypeEraser/*!*/ OpEraser {
- get {
- Contract.Ensures(Contract.Result<OpTypeEraser>() != null);
-
- if (OpEraserAttr == null)
- OpEraserAttr = new OpTypeEraserPremisses(this, AxBuilderPremisses, Gen);
- return OpEraserAttr;
- }
- }
-
- public TypeEraserPremisses(TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen)
- : base(axBuilder, gen) {
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
-
- this.AxBuilderPremisses = axBuilder;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public override VCExpr Visit(VCExprQuantifier node, VariableBindings oldBindings) {
- Contract.Requires(oldBindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VariableBindings bindings = oldBindings.Clone();
-
- // determine the bound vars that actually occur in the body or
- // in any of the triggers (if some variables do not occur, we
- // need to take special care of type parameters that only occur
- // in the types of such variables)
- FreeVariableCollector coll = new FreeVariableCollector();
- coll.Collect(node.Body);
- foreach (VCTrigger trigger in node.Triggers) {
- if (trigger.Pos)
- foreach (VCExpr/*!*/ e in trigger.Exprs) {
- Contract.Assert(e != null);
-
- coll.Collect(e);
- }
- }
-
- List<VCExprVar/*!*/> occurringVars = new List<VCExprVar/*!*/>(node.BoundVars.Count);
- foreach (VCExprVar var in node.BoundVars)
- if (coll.FreeTermVars.ContainsKey(var))
- occurringVars.Add(var);
-
- occurringVars.TrimExcess();
-
- // bound term variables are replaced with bound term variables typed in
- // a simpler way
- List<VCExprVar/*!*/>/*!*/ newBoundVars =
- BoundVarsAfterErasure(occurringVars, bindings);
- Contract.Assert(cce.NonNullElements(newBoundVars));
- VCExpr/*!*/ newNode = HandleQuantifier(node, occurringVars,
- newBoundVars, bindings);
- Contract.Assert(newNode != null);
-
- if (!(newNode is VCExprQuantifier) || !IsUniversalQuantifier(node))
- return newNode;
-
- VariableBindings bindings2;
- if (!RedoQuantifier(node, (VCExprQuantifier)newNode, occurringVars, oldBindings,
- out bindings2, out newBoundVars))
- return newNode;
-
- return HandleQuantifier(node, occurringVars,
- newBoundVars, bindings2);
- }
-
- private VCExpr/*!*/ GenTypePremisses(List<VCExprVar/*!*/>/*!*/ oldBoundVars,
- List<VCExprVar/*!*/>/*!*/ newBoundVars,
- IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/
- typeVarTranslation,
- List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings,
- out List<VCTrigger/*!*/>/*!*/ triggers) {
- Contract.Requires(cce.NonNullElements(oldBoundVars));
- Contract.Requires(cce.NonNullElements(newBoundVars));
- Contract.Requires(cce.NonNullDictionaryAndValues(typeVarTranslation));
- Contract.Requires(cce.NonNullElements(typeVarBindings));
- Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out triggers)));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- // build a substitution of the type variables that it can be checked
- // whether type premisses are trivial
- VCExprSubstitution/*!*/ typeParamSubstitution = new VCExprSubstitution();
- foreach (VCExprLetBinding/*!*/ binding in typeVarBindings) {
- Contract.Assert(binding != null);
- typeParamSubstitution[binding.V] = binding.E;
- }
- SubstitutingVCExprVisitor/*!*/ substituter = new SubstitutingVCExprVisitor(Gen);
- Contract.Assert(substituter != null);
-
- List<VCExpr/*!*/>/*!*/ typePremisses = new List<VCExpr/*!*/>(newBoundVars.Count);
- triggers = new List<VCTrigger/*!*/>(newBoundVars.Count);
-
- for (int i = 0; i < newBoundVars.Count; ++i) {
- VCExprVar/*!*/ oldVar = oldBoundVars[i];
- Contract.Assert(oldVar != null);
- VCExprVar/*!*/ newVar = newBoundVars[i];
- Contract.Assert(newVar != null);
-
- VCExpr/*!*/ typePremiss =
- AxBuilderPremisses.GenVarTypeAxiom(newVar, oldVar.Type,
- typeVarTranslation);
- Contract.Assert(typePremiss != null);
- if (!IsTriviallyTrue(substituter.Mutate(typePremiss,
- typeParamSubstitution))) {
- typePremisses.Add(typePremiss);
- // generate a negative trigger for the variable occurrence
- // in the type premiss
- triggers.Add(Gen.Trigger(false,
- HelperFuns.ToList(AxBuilderPremisses.TypeOf(newVar))));
- }
- }
-
- typePremisses.TrimExcess();
- triggers.TrimExcess();
-
- return Gen.NAry(VCExpressionGenerator.AndOp, typePremisses);
- }
-
- // these optimisations should maybe be moved into a separate
- // visitor (peep-hole optimisations)
- private bool IsTriviallyTrue(VCExpr expr) {
- Contract.Requires(expr != null);
- if (expr.Equals(VCExpressionGenerator.True))
- return true;
-
- if (expr is VCExprNAry) {
- VCExprNAry/*!*/ naryExpr = (VCExprNAry)expr;
- Contract.Assert(naryExpr != null);
- if (naryExpr.Op.Equals(VCExpressionGenerator.EqOp) &&
- naryExpr[0].Equals(naryExpr[1]))
- return true;
- }
-
- return false;
- }
-
- private VCExpr HandleQuantifier(VCExprQuantifier node, List<VCExprVar/*!*/>/*!*/ occurringVars/*!*/, List<VCExprVar/*!*/>/*!*/ newBoundVars, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Requires(cce.NonNullElements(occurringVars/*!*/));
- Contract.Requires(cce.NonNullElements(newBoundVars));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings =
- AxBuilderPremisses.GenTypeParamBindings(node.TypeParameters, occurringVars, bindings, true);
- Contract.Assert(typeVarBindings != null);
- // Check whether some of the type parameters could not be
- // determined from the bound variable types. In this case, we
- // quantify explicitly over these variables
- if (typeVarBindings.Count < node.TypeParameters.Count) {
- foreach (TypeVariable/*!*/ var in node.TypeParameters) {
- Contract.Assert(var != null);
- if (typeVarBindings.All(b => !b.V.Equals(var)))
- newBoundVars.Add((VCExprVar)bindings.TypeVariableBindings[var]);
- }
- }
-
- // the lists of old and new bound variables for which type
- // antecedents are to be generated
- List<VCExprVar/*!*/>/*!*/ varsWithTypeSpecs = new List<VCExprVar/*!*/>();
- List<VCExprVar/*!*/>/*!*/ newVarsWithTypeSpecs = new List<VCExprVar/*!*/>();
- if (!IsUniversalQuantifier(node) ||
- CommandLineOptions.Clo.TypeEncodingMethod
- == CommandLineOptions.TypeEncoding.Predicates) {
- foreach (VCExprVar/*!*/ oldVar in occurringVars) {
- Contract.Assert(oldVar != null);
- varsWithTypeSpecs.Add(oldVar);
- newVarsWithTypeSpecs.Add(bindings.VCExprVarBindings[oldVar]);
- }
- } // else, no type antecedents are created for any variables
-
- List<VCTrigger/*!*/>/*!*/ furtherTriggers;
- VCExpr/*!*/ typePremisses =
- GenTypePremisses(varsWithTypeSpecs, newVarsWithTypeSpecs,
- bindings.TypeVariableBindings,
- typeVarBindings, out furtherTriggers);
-
- Contract.Assert(cce.NonNullElements(furtherTriggers));
- Contract.Assert(typePremisses != null);
- List<VCTrigger/*!*/>/*!*/ newTriggers = MutateTriggers(node.Triggers, bindings);
- Contract.Assert(cce.NonNullElements(newTriggers));
- newTriggers.AddRange(furtherTriggers);
- newTriggers = AddLets2Triggers(newTriggers, typeVarBindings);
-
- VCExpr/*!*/ newBody = Mutate(node.Body, bindings);
- Contract.Assert(newBody != null);
-
- // assemble the new quantified formula
-
- if (CommandLineOptions.Clo.TypeEncodingMethod
- == CommandLineOptions.TypeEncoding.None) {
- typePremisses = VCExpressionGenerator.True;
- }
-
- VCExpr/*!*/ bodyWithPremisses =
- AxBuilderPremisses.AddTypePremisses(typeVarBindings, typePremisses,
- node.Quan == Quantifier.ALL,
- AxBuilder.Cast(newBody, Type.Bool));
- Contract.Assert(bodyWithPremisses != null);
- if (newBoundVars.Count == 0) // might happen that no bound variables are left
- return bodyWithPremisses;
-
- foreach (VCExprVar/*!*/ v in newBoundVars) {
- Contract.Assert(v != null);
- if (v.Type == AxBuilderPremisses.U) {
- newTriggers.Add(Gen.Trigger(false, AxBuilderPremisses.Cast(v, Type.Int)));
- newTriggers.Add(Gen.Trigger(false, AxBuilderPremisses.Cast(v, Type.Bool)));
- }
- }
-
- return Gen.Quantify(node.Quan, new List<TypeVariable/*!*/>(), newBoundVars,
- newTriggers, node.Infos, bodyWithPremisses);
- }
-
- // check whether we need to add let-binders for any of the type
- // parameters to the triggers (otherwise, the triggers will
- // contain unbound/dangling variables for such parameters)
- private List<VCTrigger/*!*/>/*!*/ AddLets2Triggers(List<VCTrigger/*!*/>/*!*/ triggers/*!*/, List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings) {
- Contract.Requires(cce.NonNullElements(triggers/*!*/));
- Contract.Requires(cce.NonNullElements(typeVarBindings));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCTrigger>>()));
- List<VCTrigger/*!*/>/*!*/ triggersWithLets = new List<VCTrigger/*!*/>(triggers.Count);
-
- foreach (VCTrigger/*!*/ t in triggers) {
- Contract.Assert(t != null);
- List<VCExpr/*!*/>/*!*/ exprsWithLets = new List<VCExpr/*!*/>(t.Exprs.Count);
-
- bool changed = false;
- foreach (VCExpr/*!*/ e in t.Exprs) {
- Contract.Assert(e != null);
- Dictionary<VCExprVar/*!*/, object>/*!*/ freeVars =
- FreeVariableCollector.FreeTermVariables(e);
- Contract.Assert(freeVars != null && cce.NonNullElements(freeVars.Keys));
- if (typeVarBindings.Any(b => freeVars.ContainsKey(b.V))) {
- exprsWithLets.Add(Gen.Let(typeVarBindings, e));
- changed = true;
- } else {
- exprsWithLets.Add(e);
- }
- }
-
- if (changed)
- triggersWithLets.Add(Gen.Trigger(t.Pos, exprsWithLets));
- else
- triggersWithLets.Add(t);
- }
-
- return triggersWithLets;
- }
-
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- public class OpTypeEraserPremisses : OpTypeEraser
- {
-
- private TypeAxiomBuilderPremisses/*!*/ AxBuilderPremisses;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(AxBuilderPremisses != null);
- }
-
-
- public OpTypeEraserPremisses(TypeEraserPremisses eraser, TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen)
- : base(eraser, axBuilder, gen) {
- Contract.Requires(gen != null);
- Contract.Requires(axBuilder != null);
- Contract.Requires(eraser != null);
- this.AxBuilderPremisses = axBuilder;
- }
-
- private VCExpr HandleFunctionOp(Function newFun, List<Type/*!*/>/*!*/ typeArgs/*!*/, IEnumerable<VCExpr/*!*/>/*!*/ oldArgs, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(newFun != null);
- Contract.Requires(cce.NonNullElements(typeArgs/*!*/));
- Contract.Requires(cce.NonNullElements(oldArgs));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- // UGLY: the code for tracking polarities should be factored out
- int oldPolarity = Eraser.Polarity;
- Eraser.Polarity = 0;
-
- List<VCExpr/*!*/>/*!*/ newArgs = new List<VCExpr/*!*/>(typeArgs.Count);
-
- // translate the explicit type arguments
- foreach (Type/*!*/ t in typeArgs) {
- Contract.Assert(t != null);
- newArgs.Add(AxBuilder.Type2Term(t, bindings.TypeVariableBindings));
- }
-
- // recursively translate the value arguments
- foreach (VCExpr/*!*/ arg in oldArgs) {
- Contract.Assert(arg != null);
- Type/*!*/ newType = cce.NonNull(newFun.InParams[newArgs.Count]).TypedIdent.Type;
- newArgs.Add(AxBuilder.Cast(Eraser.Mutate(arg, bindings), newType));
- }
-
- Eraser.Polarity = oldPolarity;
- return Gen.Function(newFun, newArgs);
- }
-
- public override VCExpr/*!*/ VisitSelectOp(VCExprNAry/*!*/ node,
- VariableBindings/*!*/ bindings) {
- Contract.Requires(node != null); Contract.Requires(bindings != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- MapType/*!*/ mapType = node[0].Type.AsMap;
- Contract.Assert(mapType != null);
- List<Type>/*!*/ instantiations; // not used
- Function/*!*/ select =
- AxBuilder.MapTypeAbstracter.Select(mapType, out instantiations);
- Contract.Assert(select != null);
-
- List<int>/*!*/ explicitTypeParams =
- AxBuilderPremisses.MapTypeAbstracterPremisses
- .ExplicitSelectTypeParams(mapType);
- Contract.Assert(select.InParams.Count == explicitTypeParams.Count + node.Arity);
-
- List<Type/*!*/>/*!*/ typeArgs = new List<Type/*!*/>(explicitTypeParams.Count);
- foreach (int i in explicitTypeParams)
- typeArgs.Add(node.TypeArguments[i]);
- return HandleFunctionOp(select, typeArgs, node, bindings);
- }
-
- public override VCExpr VisitStoreOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- List<Type>/*!*/ instantiations; // not used
- Function/*!*/ store =
- AxBuilder.MapTypeAbstracter.Store(node[0].Type.AsMap, out instantiations);
- Contract.Assert(store != null);
- return HandleFunctionOp(store,
- // the store function never has explicit
- // type parameters
- new List<Type/*!*/>(),
- node, bindings);
- }
-
- public override VCExpr VisitBoogieFunctionOp(VCExprNAry node, VariableBindings bindings) {
- Contract.Requires(bindings != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- Function/*!*/ oriFun = ((VCExprBoogieFunctionOp)node.Op).Func;
- Contract.Assert(oriFun != null);
- UntypedFunction untypedFun = AxBuilderPremisses.Typed2Untyped(oriFun);
- Contract.Assert(untypedFun.Fun.InParams.Count ==
- untypedFun.ExplicitTypeParams.Count + node.Arity);
-
- List<Type/*!*/>/*!*/ typeArgs =
- ExtractTypeArgs(node,
- oriFun.TypeParameters, untypedFun.ExplicitTypeParams);
- return HandleFunctionOp(untypedFun.Fun, typeArgs, node, bindings);
- }
-
- private List<Type/*!*/>/*!*/ ExtractTypeArgs(VCExprNAry node, List<TypeVariable> allTypeParams, List<TypeVariable/*!*/>/*!*/ explicitTypeParams) {
- Contract.Requires(allTypeParams != null);
- Contract.Requires(node != null);
- Contract.Requires(cce.NonNullElements(explicitTypeParams));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
- List<Type/*!*/>/*!*/ res = new List<Type/*!*/>(explicitTypeParams.Count);
- foreach (TypeVariable/*!*/ var in explicitTypeParams) {
- Contract.Assert(var != null);
- // this lookup could be optimised
- res.Add(node.TypeArguments[allTypeParams.IndexOf(var)]);
- }
- return res;
- }
- }
-
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+// Erasure of types using premisses (forall x :: type(x)=T ==> p(x))
+
+namespace Microsoft.Boogie.TypeErasure
+{
+ using Microsoft.Boogie.VCExprAST;
+
+ // When using type premisses, we can distinguish two kinds of type
+ // parameters of a function or map: parameters that occur in the
+ // formal argument types of the function are "implicit" because they
+ // can be inferred from the actual argument types; parameters that
+ // only occur in the result type of the function are "explicit"
+ // because they are not inferrable and have to be given to the
+ // function as additional arguments.
+ //
+ // The following structure is used to store the untyped version of a
+ // typed function, together with the lists of implicit and explicit
+ // type parameters (in the same order as they occur in the signature
+ // of the original function).
+
+ internal struct UntypedFunction
+ {
+ public readonly Function/*!*/ Fun;
+ // type parameters that can be extracted from the value parameters
+ public readonly List<TypeVariable/*!*/>/*!*/ ImplicitTypeParams;
+ // type parameters that have to be given explicitly
+ public readonly List<TypeVariable/*!*/>/*!*/ ExplicitTypeParams;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Fun != null);
+ Contract.Invariant(cce.NonNullElements(ImplicitTypeParams));
+ Contract.Invariant(cce.NonNullElements(ExplicitTypeParams));
+ }
+
+
+ public UntypedFunction(Function/*!*/ fun,
+ List<TypeVariable/*!*/>/*!*/ implicitTypeParams,
+ List<TypeVariable/*!*/>/*!*/ explicitTypeParams) {
+ Contract.Requires(fun != null);
+ Contract.Requires(cce.NonNullElements(implicitTypeParams));
+ Contract.Requires(cce.NonNullElements(explicitTypeParams));
+ Fun = fun;
+ ImplicitTypeParams = implicitTypeParams;
+ ExplicitTypeParams = explicitTypeParams;
+ }
+ }
+
+ public class TypeAxiomBuilderPremisses : TypeAxiomBuilderIntBoolU
+ {
+
+ public TypeAxiomBuilderPremisses(VCExpressionGenerator gen)
+ : base(gen) {
+ Contract.Requires(gen != null);
+
+ TypeFunction = HelperFuns.BoogieFunction("dummy", Type.Int);
+ Typed2UntypedFunctions = new Dictionary<Function/*!*/, UntypedFunction>();
+ MapTypeAbstracterAttr = null;
+ }
+
+ // constructor to allow cloning
+ [NotDelayed]
+ internal TypeAxiomBuilderPremisses(TypeAxiomBuilderPremisses builder)
+ : base(builder) {
+ Contract.Requires(builder != null);
+ TypeFunction = builder.TypeFunction;
+ Typed2UntypedFunctions =
+ new Dictionary<Function/*!*/, UntypedFunction>(builder.Typed2UntypedFunctions);
+
+ MapTypeAbstracterAttr =
+ builder.MapTypeAbstracterAttr == null ?
+ null : new MapTypeAbstractionBuilderPremisses(this, builder.Gen,
+ builder.MapTypeAbstracterAttr);
+ }
+
+ public override Object Clone() {
+ Contract.Ensures(Contract.Result<Object>() != null);
+ return new TypeAxiomBuilderPremisses(this);
+ }
+
+ public override void Setup() {
+ TypeFunction = HelperFuns.BoogieFunction("type", U, T);
+ base.Setup();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // generate axioms of the kind "forall x:U. {Int2U(U2Int(x))}
+ // type(x)=int ==> Int2U(U2Int(x))==x"
+ protected override VCExpr GenReverseCastAxiom(Function castToU, Function castFromU) {
+ //Contract.Requires(castFromU != null);
+ //Contract.Requires(castToU != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCTrigger/*!*/>/*!*/ triggers;
+ VCExprVar/*!*/ var;
+ VCExpr/*!*/ eq = GenReverseCastEq(castToU, castFromU, out var, out triggers);
+ Contract.Assert(cce.NonNullElements(triggers));
+ Contract.Assert(var != null);
+ Contract.Assert(eq != null);
+ VCExpr/*!*/ premiss;
+ if (CommandLineOptions.Clo.TypeEncodingMethod
+ == CommandLineOptions.TypeEncoding.None)
+ premiss = VCExpressionGenerator.True;
+ else
+ premiss = GenVarTypeAxiom(var, cce.NonNull(castFromU.OutParams[0]).TypedIdent.Type,
+ // we don't have any bindings available
+ new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>());
+ VCExpr/*!*/ matrix = Gen.ImpliesSimp(premiss, eq);
+ Contract.Assert(matrix != null);
+ return Gen.Forall(HelperFuns.ToList(var), triggers, "cast:" + castFromU.Name, -1, matrix);
+ }
+
+ protected override VCExpr GenCastTypeAxioms(Function castToU, Function castFromU) {
+ //Contract.Requires(castFromU != null);
+ //Contract.Requires(castToU != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Type/*!*/ fromType = cce.NonNull(castToU.InParams[0]).TypedIdent.Type;
+ return GenFunctionAxiom(castToU, new List<TypeVariable/*!*/>(), new List<TypeVariable/*!*/>(),
+ HelperFuns.ToList(fromType), fromType);
+ }
+
+ private MapTypeAbstractionBuilderPremisses MapTypeAbstracterAttr;
+
+ internal override MapTypeAbstractionBuilder/*!*/ MapTypeAbstracter {
+ get {
+ Contract.Ensures(Contract.Result<MapTypeAbstractionBuilder>() != null);
+
+ if (MapTypeAbstracterAttr == null)
+ MapTypeAbstracterAttr = new MapTypeAbstractionBuilderPremisses(this, Gen);
+ return MapTypeAbstracterAttr;
+ }
+ }
+
+ internal MapTypeAbstractionBuilderPremisses/*!*/ MapTypeAbstracterPremisses {
+ get {
+ Contract.Ensures(Contract.Result<MapTypeAbstractionBuilderPremisses>() != null);
+
+ return (MapTypeAbstractionBuilderPremisses)MapTypeAbstracter;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // function that maps individuals to their type
+ // the field is overwritten with its actual value in "Setup"
+ private Function/*!*/ TypeFunction;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(TypeFunction != null);
+ }
+
+
+ public VCExpr TypeOf(VCExpr expr) {
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Gen.Function(TypeFunction, expr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Generate type premisses and type parameter bindings for quantifiers, functions, procedures
+
+ // let-bindings to extract the instantiations of type parameters
+ public List<VCExprLetBinding/*!*/>/*!*/
+ GenTypeParamBindings(// the original bound variables and (implicit) type parameters
+ List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ oldBoundVars,
+ // VariableBindings to which the translation
+ // TypeVariable -> VCExprVar is added
+ VariableBindings/*!*/ bindings,
+ bool addTypeVarsToBindings) {
+ Contract.Requires(typeParams != null);
+ Contract.Requires(cce.NonNullElements(oldBoundVars));
+ Contract.Requires(bindings != null);
+
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
+
+ // type variables are replaced with ordinary variables that are bound using a
+ // let-expression
+ if (addTypeVarsToBindings) {
+ foreach (TypeVariable/*!*/ tvar in typeParams) {
+ Contract.Assert(tvar != null);
+ bindings.TypeVariableBindings.Add(tvar, Gen.Variable(tvar.Name, T));
+ }
+ }
+
+ // extract the values of type variables from the term variables
+ List<VCExprVar/*!*/>/*!*/ UtypedVars = new List<VCExprVar/*!*/>(oldBoundVars.Count);
+ List<Type/*!*/>/*!*/ originalTypes = new List<Type/*!*/>(oldBoundVars.Count);
+ foreach (VCExprVar var in oldBoundVars) {
+ VCExprVar/*!*/ newVar = bindings.VCExprVarBindings[var];
+ if (newVar.Type.Equals(U)) {
+ UtypedVars.Add(newVar);
+ originalTypes.Add(var.Type);
+ }
+ }
+
+ UtypedVars.TrimExcess();
+ originalTypes.TrimExcess();
+
+ return BestTypeVarExtractors(typeParams, originalTypes, UtypedVars, bindings);
+ }
+
+
+ public VCExpr/*!*/ AddTypePremisses(List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings,
+ VCExpr/*!*/ typePremisses, bool universal,
+ VCExpr/*!*/ body) {
+ Contract.Requires(cce.NonNullElements(typeVarBindings));
+ Contract.Requires(typePremisses != null);
+ Contract.Requires(body != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr/*!*/ bodyWithPremisses;
+ if (universal)
+ bodyWithPremisses = Gen.ImpliesSimp(typePremisses, body);
+ else
+ bodyWithPremisses = Gen.AndSimp(typePremisses, body);
+
+ return Gen.Let(typeVarBindings, bodyWithPremisses);
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Extract the instantiations of type variables from the concrete types of
+ // term variables. E.g., for a function f<a>(x : C a), we would extract the
+ // instantiation of "a" by looking at the concrete type of "x".
+
+ public List<VCExprLetBinding/*!*/>/*!*/
+ BestTypeVarExtractors(List<TypeVariable/*!*/>/*!*/ vars, List<Type/*!*/>/*!*/ types,
+ List<VCExprVar/*!*/>/*!*/ concreteTypeSources,
+ VariableBindings/*!*/ bindings) {
+ Contract.Requires(cce.NonNullElements(vars));
+ Contract.Requires(cce.NonNullElements(types));
+ Contract.Requires(cce.NonNullElements(concreteTypeSources));
+ Contract.Requires(bindings != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprLetBinding>>()));
+
+ List<VCExprLetBinding/*!*/>/*!*/ typeParamBindings = new List<VCExprLetBinding/*!*/>();
+ foreach (TypeVariable/*!*/ var in vars) {
+ Contract.Assert(var != null);
+ VCExpr extractor = BestTypeVarExtractor(var, types, concreteTypeSources);
+ if (extractor != null)
+ typeParamBindings.Add(
+ Gen.LetBinding((VCExprVar)bindings.TypeVariableBindings[var],
+ extractor));
+ }
+ return typeParamBindings;
+ }
+
+ private VCExpr BestTypeVarExtractor(TypeVariable/*!*/ var, List<Type/*!*/>/*!*/ types,
+ List<VCExprVar/*!*/>/*!*/ concreteTypeSources) {
+ Contract.Requires(var != null);
+ Contract.Requires(cce.NonNullElements(types));
+ Contract.Requires(cce.NonNullElements(concreteTypeSources));
+ List<VCExpr/*!*/> allExtractors = TypeVarExtractors(var, types, concreteTypeSources);
+ Contract.Assert(cce.NonNullElements(allExtractors));
+ if (allExtractors.Count == 0)
+ return null;
+
+ VCExpr bestExtractor = allExtractors[0];
+ int bestExtractorSize = SizeComputingVisitor.ComputeSize(bestExtractor);
+ for (int i = 1; i < allExtractors.Count; ++i) {
+ int newSize = SizeComputingVisitor.ComputeSize(allExtractors[i]);
+ if (newSize < bestExtractorSize) {
+ bestExtractor = allExtractors[i];
+ bestExtractorSize = newSize;
+ }
+ }
+
+ return bestExtractor;
+ }
+
+ private List<VCExpr/*!*/>/*!*/ TypeVarExtractors(TypeVariable/*!*/ var, List<Type/*!*/>/*!*/ types,
+ List<VCExprVar/*!*/>/*!*/ concreteTypeSources) {
+ Contract.Requires(var != null);
+ Contract.Requires(cce.NonNullElements(types));
+ Contract.Requires(cce.NonNullElements(concreteTypeSources));
+ Contract.Requires((types.Count == concreteTypeSources.Count));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
+ List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
+ for (int i = 0; i < types.Count; ++i)
+ TypeVarExtractors(var, types[i], TypeOf(concreteTypeSources[i]), res);
+
+ return res;
+ }
+
+ private void TypeVarExtractors(TypeVariable var, Type completeType, VCExpr innerTerm, List<VCExpr/*!*/>/*!*/ extractors) {
+ Contract.Requires(innerTerm != null);
+ Contract.Requires(completeType != null);
+ Contract.Requires(var != null);
+ Contract.Requires(cce.NonNullElements(extractors));
+ if (completeType.IsVariable) {
+ if (var.Equals(completeType)) {
+ extractors.Add(innerTerm);
+ } // else nothing
+ } else if (completeType.IsBasic) {
+ // nothing
+ } else if (completeType.IsCtor) {
+ CtorType/*!*/ ctorType = completeType.AsCtor;
+ if (ctorType.Arguments.Count > 0) {
+ // otherwise there are no chances of extracting any
+ // instantiations from this type
+ TypeCtorRepr repr = GetTypeCtorReprStruct(ctorType.Decl);
+ for (int i = 0; i < ctorType.Arguments.Count; ++i) {
+ VCExpr/*!*/ newInnerTerm = Gen.Function(repr.Dtors[i], innerTerm);
+ Contract.Assert(newInnerTerm != null);
+ TypeVarExtractors(var, ctorType.Arguments[i], newInnerTerm, extractors);
+ }
+ }
+ } else if (completeType.IsMap) {
+ TypeVarExtractors(var, MapTypeAbstracter.AbstractMapType(completeType.AsMap),
+ innerTerm, extractors);
+ } else {
+ System.Diagnostics.Debug.Fail("Don't know how to handle this type: " + completeType);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Symbols for representing functions
+
+ // Globally defined functions
+ private readonly IDictionary<Function/*!*/, UntypedFunction/*!*/>/*!*/ Typed2UntypedFunctions;
+ [ContractInvariantMethod]
+ void Typed2UntypedFunctionsInvariantMethod() {
+ Contract.Invariant(Typed2UntypedFunctions != null);
+ }
+
+ // distinguish between implicit and explicit type parameters
+ internal static void SeparateTypeParams(List<Type/*!*/>/*!*/ valueArgumentTypes,
+ List<TypeVariable>/*!*/ allTypeParams,
+ out List<TypeVariable/*!*/>/*!*/ implicitParams,
+ out List<TypeVariable/*!*/>/*!*/ explicitParams) {
+ Contract.Requires(cce.NonNullElements(valueArgumentTypes));
+ Contract.Requires(allTypeParams != null);
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out implicitParams)));
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out explicitParams)));
+ List<TypeVariable>/*!*/ varsInInParamTypes = new List<TypeVariable>();
+ foreach (Type/*!*/ t in valueArgumentTypes) {
+ Contract.Assert(t != null);
+ varsInInParamTypes.AppendWithoutDups(t.FreeVariables);
+ }
+
+ implicitParams = new List<TypeVariable/*!*/>(allTypeParams.Count);
+ explicitParams = new List<TypeVariable/*!*/>(allTypeParams.Count);
+
+ foreach (TypeVariable/*!*/ var in allTypeParams) {
+ Contract.Assert(var != null);
+ if (varsInInParamTypes.Contains(var))
+ implicitParams.Add(var);
+ else
+ explicitParams.Add(var);
+ }
+
+ implicitParams.TrimExcess();
+ explicitParams.TrimExcess();
+ }
+
+ internal UntypedFunction Typed2Untyped(Function fun) {
+ Contract.Requires(fun != null);
+ UntypedFunction res;
+ if (!Typed2UntypedFunctions.TryGetValue(fun, out res)) {
+ Contract.Assert(fun.OutParams.Count == 1);
+
+ // if all of the parameters are int or bool, the function does
+ // not have to be changed
+ if (fun.InParams.All(param => UnchangedType(cce.NonNull(param).TypedIdent.Type)) &&
+ UnchangedType(cce.NonNull(fun.OutParams[0]).TypedIdent.Type) &&
+ fun.TypeParameters.Count == 0) {
+ res = new UntypedFunction(fun, new List<TypeVariable/*!*/>(), new List<TypeVariable/*!*/>());
+ } else {
+ List<Type/*!*/>/*!*/ argTypes = new List<Type/*!*/>();
+ foreach (Variable/*!*/ v in fun.InParams) {
+ Contract.Assert(v != null);
+ argTypes.Add(v.TypedIdent.Type);
+ }
+
+ List<TypeVariable/*!*/>/*!*/ implicitParams, explicitParams;
+ SeparateTypeParams(argTypes, fun.TypeParameters, out implicitParams, out explicitParams);
+
+ Type[]/*!*/ types = new Type[explicitParams.Count + fun.InParams.Count + 1];
+ int i = 0;
+ for (int j = 0; j < explicitParams.Count; ++j) {
+ types[i] = T;
+ i = i + 1;
+ }
+ for (int j = 0; j < fun.InParams.Count; ++i, ++j)
+ types[i] = TypeAfterErasure(cce.NonNull(fun.InParams[j]).TypedIdent.Type);
+ types[types.Length - 1] = TypeAfterErasure(cce.NonNull(fun.OutParams[0]).TypedIdent.Type);
+
+ Function/*!*/ untypedFun = HelperFuns.BoogieFunction(fun.Name, types);
+ Contract.Assert(untypedFun != null);
+ untypedFun.Attributes = fun.Attributes;
+ res = new UntypedFunction(untypedFun, implicitParams, explicitParams);
+ if (U.Equals(types[types.Length - 1]))
+ AddTypeAxiom(GenFunctionAxiom(res, fun));
+ }
+
+ Typed2UntypedFunctions.Add(fun, res);
+ }
+ return res;
+ }
+
+ private VCExpr GenFunctionAxiom(UntypedFunction fun, Function originalFun) {
+ Contract.Requires(originalFun != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<Type/*!*/>/*!*/ originalInTypes = new List<Type/*!*/>(originalFun.InParams.Count);
+ foreach (Formal/*!*/ f in originalFun.InParams)
+ originalInTypes.Add(f.TypedIdent.Type);
+
+ return GenFunctionAxiom(fun.Fun, fun.ImplicitTypeParams, fun.ExplicitTypeParams,
+ originalInTypes,
+ cce.NonNull(originalFun.OutParams[0]).TypedIdent.Type);
+ }
+
+ internal VCExpr/*!*/ GenFunctionAxiom(Function/*!*/ fun,
+ List<TypeVariable/*!*/>/*!*/ implicitTypeParams,
+ List<TypeVariable/*!*/>/*!*/ explicitTypeParams,
+ List<Type/*!*/>/*!*/ originalInTypes,
+ Type/*!*/ originalResultType) {
+ Contract.Requires(cce.NonNullElements(implicitTypeParams));
+ Contract.Requires(fun != null);
+ Contract.Requires(cce.NonNullElements(explicitTypeParams));
+ Contract.Requires(cce.NonNullElements(originalInTypes));
+ Contract.Requires(originalResultType != null);
+ Contract.Requires(originalInTypes.Count + explicitTypeParams.Count == fun.InParams.Count);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.None) {
+ return VCExpressionGenerator.True;
+ }
+
+ List<VCExprVar/*!*/>/*!*/ typedInputVars = new List<VCExprVar/*!*/>(originalInTypes.Count);
+ int i = 0;
+ foreach (Type/*!*/ t in originalInTypes) {
+ Contract.Assert(t != null);
+ typedInputVars.Add(Gen.Variable("arg" + i, t));
+ i = i + 1;
+ }
+
+ VariableBindings/*!*/ bindings = new VariableBindings();
+
+ // type parameters that have to be given explicitly are replaced
+ // with universally quantified type variables
+ List<VCExprVar/*!*/>/*!*/ boundVars = new List<VCExprVar/*!*/>(explicitTypeParams.Count + typedInputVars.Count);
+ foreach (TypeVariable/*!*/ var in explicitTypeParams) {
+ Contract.Assert(var != null);
+ VCExprVar/*!*/ newVar = Gen.Variable(var.Name, T);
+ boundVars.Add(newVar);
+ bindings.TypeVariableBindings.Add(var, newVar);
+ }
+
+ // bound term variables are replaced with bound term variables typed in
+ // a simpler way
+ foreach (VCExprVar/*!*/ var in typedInputVars) {
+ Contract.Assert(var != null);
+ Type/*!*/ newType = TypeAfterErasure(var.Type);
+ Contract.Assert(newType != null);
+ VCExprVar/*!*/ newVar = Gen.Variable(var.Name, newType);
+ Contract.Assert(newVar != null);
+ boundVars.Add(newVar);
+ bindings.VCExprVarBindings.Add(var, newVar);
+ }
+
+ List<VCExprLetBinding/*!*/> typeVarBindings =
+ GenTypeParamBindings(implicitTypeParams, typedInputVars, bindings, true);
+ Contract.Assert(cce.NonNullElements(typeVarBindings));
+
+ VCExpr/*!*/ funApp = Gen.Function(fun, HelperFuns.ToVCExprList(boundVars));
+ Contract.Assert(funApp != null);
+ VCExpr/*!*/ conclusion = Gen.Eq(TypeOf(funApp),
+ Type2Term(originalResultType, bindings.TypeVariableBindings));
+ Contract.Assert(conclusion != null);
+ VCExpr conclusionWithPremisses =
+ // leave out antecedents of function type axioms ... they don't appear necessary,
+ // because a function can always be extended to all U-values (right?)
+ // AddTypePremisses(typeVarBindings, typePremisses, true, conclusion);
+ Gen.Let(typeVarBindings, conclusion);
+
+ if (boundVars.Count > 0) {
+ List<VCTrigger/*!*/> triggers = HelperFuns.ToList(Gen.Trigger(true, HelperFuns.ToList(funApp)));
+ Contract.Assert(cce.NonNullElements(triggers));
+ return Gen.Forall(boundVars, triggers, "funType:" + fun.Name, -1, conclusionWithPremisses);
+ } else {
+ return conclusionWithPremisses;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ protected override void AddVarTypeAxiom(VCExprVar var, Type originalType) {
+ //Contract.Requires(originalType != null);
+ //Contract.Requires(var != null);
+ if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.None) return;
+ AddTypeAxiom(GenVarTypeAxiom(var, originalType,
+ // we don't have any bindings available
+ new Dictionary<TypeVariable/*!*/, VCExpr/*!*/>()));
+ }
+
+ public VCExpr GenVarTypeAxiom(VCExprVar var, Type originalType, IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/ varMapping) {
+ Contract.Requires(var != null);
+ Contract.Requires(originalType != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(varMapping));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ if (!var.Type.Equals(originalType)) {
+ VCExpr/*!*/ typeRepr = Type2Term(originalType, varMapping);
+ return Gen.Eq(TypeOf(var), typeRepr);
+ }
+ return VCExpressionGenerator.True;
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+
+ internal class MapTypeAbstractionBuilderPremisses : MapTypeAbstractionBuilder
+ {
+
+ private readonly TypeAxiomBuilderPremisses/*!*/ AxBuilderPremisses;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilderPremisses != null);
+ }
+
+
+ internal MapTypeAbstractionBuilderPremisses(TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen)
+ : base(axBuilder, gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+
+ this.AxBuilderPremisses = axBuilder;
+ }
+
+ // constructor for cloning
+ internal MapTypeAbstractionBuilderPremisses(TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen, MapTypeAbstractionBuilderPremisses builder)
+ : base(axBuilder, gen, builder) {
+ Contract.Requires(builder != null);
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+
+ this.AxBuilderPremisses = axBuilder;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // Determine the type parameters of a map type that have to be
+ // given explicitly when applying the select function (the
+ // parameters that only occur in the result type of the
+ // map). These parameters are given as a list of indexes sorted in
+ // ascending order; the index i refers to the i'th bound variable
+ // in a type <a0, a1, ..., an>[...]...
+ public List<int>/*!*/ ExplicitSelectTypeParams(MapType type) {
+ Contract.Requires(type != null);
+ Contract.Ensures(Contract.Result<List<int>>() != null);
+
+ List<int> res;
+ if (!explicitSelectTypeParamsCache.TryGetValue(type, out res)) {
+ List<TypeVariable/*!*/>/*!*/ explicitParams, implicitParams;
+ TypeAxiomBuilderPremisses.SeparateTypeParams(type.Arguments.ToList(),
+ type.TypeParameters,
+ out implicitParams,
+ out explicitParams);
+ res = new List<int>(explicitParams.Count);
+ foreach (TypeVariable/*!*/ var in explicitParams) {
+ Contract.Assert(var != null);
+ res.Add(type.TypeParameters.IndexOf(var));
+ }
+ explicitSelectTypeParamsCache.Add(type, res);
+ }
+ return cce.NonNull(res);
+ }
+
+ private IDictionary<MapType/*!*/, List<int>/*!*/>/*!*/ explicitSelectTypeParamsCache =
+ new Dictionary<MapType/*!*/, List<int>/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvarant() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(explicitSelectTypeParamsCache));
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ protected override void GenSelectStoreFunctions(MapType abstractedType, TypeCtorDecl synonym, out Function/*!*/ select, out Function/*!*/ store) {
+ //Contract.Requires(synonym != null);
+ //Contract.Requires(abstractedType != null);
+ Contract.Ensures(Contract.ValueAtReturn(out select) != null);
+ Contract.Ensures(Contract.ValueAtReturn(out store) != null);
+ Type/*!*/ mapTypeSynonym;
+ List<TypeVariable/*!*/>/*!*/ typeParams;
+ List<Type/*!*/>/*!*/ originalInTypes;
+ GenTypeAxiomParams(abstractedType, synonym, out mapTypeSynonym,
+ out typeParams, out originalInTypes);
+
+ // select
+ List<TypeVariable/*!*/>/*!*/ explicitSelectParams, implicitSelectParams;
+ select = CreateAccessFun(typeParams, originalInTypes,
+ abstractedType.Result, synonym.Name + "Select",
+ out implicitSelectParams, out explicitSelectParams);
+
+ // store, which gets one further argument: the assigned rhs
+ originalInTypes.Add(abstractedType.Result);
+
+ List<TypeVariable/*!*/>/*!*/ explicitStoreParams, implicitStoreParams;
+ store = CreateAccessFun(typeParams, originalInTypes,
+ mapTypeSynonym, synonym.Name + "Store",
+ out implicitStoreParams, out explicitStoreParams);
+
+ // the store function does not have any explicit type parameters
+ Contract.Assert(explicitStoreParams.Count == 0);
+
+ if (CommandLineOptions.Clo.UseArrayTheory) {
+ select.AddAttribute("builtin", "select");
+ store.AddAttribute("builtin", "store");
+ } else {
+ AxBuilder.AddTypeAxiom(GenMapAxiom0(select, store,
+ abstractedType.Result,
+ implicitSelectParams, explicitSelectParams,
+ originalInTypes));
+ AxBuilder.AddTypeAxiom(GenMapAxiom1(select, store,
+ abstractedType.Result,
+ explicitSelectParams));
+ }
+ }
+
+ protected void GenTypeAxiomParams(MapType/*!*/ abstractedType, TypeCtorDecl/*!*/ synonymDecl,
+ out Type/*!*/ mapTypeSynonym,
+ out List<TypeVariable/*!*/>/*!*/ typeParams,
+ out List<Type/*!*/>/*!*/ originalIndexTypes) {
+ Contract.Requires(abstractedType != null);
+ Contract.Requires(synonymDecl != null);
+ Contract.Ensures(Contract.ValueAtReturn(out mapTypeSynonym) != null);
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out typeParams)));
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out originalIndexTypes)));
+ typeParams = new List<TypeVariable/*!*/>();
+ typeParams.AddRange(abstractedType.TypeParameters);
+ typeParams.AddRange(abstractedType.FreeVariables);
+
+ originalIndexTypes = new List<Type/*!*/>(abstractedType.Arguments.Count + 1);
+ List<Type>/*!*/ mapTypeParams = new List<Type>();
+ foreach (TypeVariable/*!*/ var in abstractedType.FreeVariables) {
+ Contract.Assert(var != null);
+ mapTypeParams.Add(var);
+ }
+
+ if (CommandLineOptions.Clo.MonomorphicArrays)
+ mapTypeSynonym = abstractedType;
+ else
+ mapTypeSynonym = new CtorType(Token.NoToken, synonymDecl, mapTypeParams);
+
+ originalIndexTypes.Add(mapTypeSynonym);
+ originalIndexTypes.AddRange(abstractedType.Arguments.ToList());
+ }
+
+ // method to actually create the select or store function
+ private Function/*!*/ CreateAccessFun(List<TypeVariable/*!*/>/*!*/ originalTypeParams,
+ List<Type/*!*/>/*!*/ originalInTypes,
+ Type/*!*/ originalResult,
+ string/*!*/ name,
+ out List<TypeVariable/*!*/>/*!*/ implicitTypeParams, out List<TypeVariable/*!*/>/*!*/ explicitTypeParams) {
+ Contract.Requires(cce.NonNullElements(originalTypeParams));
+ Contract.Requires(cce.NonNullElements(originalInTypes));
+ Contract.Requires(originalResult != null);
+ Contract.Requires(name != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out implicitTypeParams)));
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out explicitTypeParams)));
+
+ // select and store are basically handled like normal functions: the type
+ // parameters are split into the implicit parameters, and into the parameters
+ // that have to be given explicitly
+ TypeAxiomBuilderPremisses.SeparateTypeParams(originalInTypes,
+ new List<TypeVariable>(originalTypeParams),
+ out implicitTypeParams,
+ out explicitTypeParams);
+
+ Type[]/*!*/ ioTypes = new Type[explicitTypeParams.Count + originalInTypes.Count + 1];
+ int i = 0;
+ for (; i < explicitTypeParams.Count; ++i)
+ ioTypes[i] = AxBuilder.T;
+ foreach (Type/*!*/ type in originalInTypes) {
+ Contract.Assert(type != null);
+ if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(type))
+ ioTypes[i] = type;
+ else
+ ioTypes[i] = AxBuilder.U;
+ i++;
+ }
+ if (CommandLineOptions.Clo.Monomorphize && AxBuilder.UnchangedType(originalResult))
+ ioTypes[i] = originalResult;
+ else
+ ioTypes[i] = AxBuilder.U;
+
+ Function/*!*/ res = HelperFuns.BoogieFunction(name, ioTypes);
+ Contract.Assert(res != null);
+
+ if (AxBuilder.U.Equals(ioTypes[i])) {
+ AxBuilder.AddTypeAxiom(
+ AxBuilderPremisses.GenFunctionAxiom(res,
+ implicitTypeParams, explicitTypeParams,
+ originalInTypes, originalResult));
+ }
+ return res;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // The normal axioms of the theory of arrays (without extensionality)
+
+ private VCExpr/*!*/ Select(Function/*!*/ select,
+ // in general, the select function has to
+ // receive explicit type parameters (which
+ // are here already represented as VCExpr
+ // of type T)
+ List<VCExpr/*!*/>/*!*/ typeParams,
+ VCExpr/*!*/ map,
+ List<VCExprVar/*!*/>/*!*/ indexes) {
+ Contract.Requires(select != null);
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Requires(map != null);
+ Contract.Requires(cce.NonNullElements(indexes));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ List<VCExpr/*!*/>/*!*/ selectArgs = new List<VCExpr/*!*/>(typeParams.Count + indexes.Count + 1);
+ selectArgs.AddRange(typeParams);
+ selectArgs.Add(map);
+ selectArgs.AddRange(HelperFuns.ToVCExprList(indexes));
+ return Gen.Function(select, selectArgs);
+ }
+
+ private VCExpr Store(Function store, VCExpr map, List<VCExprVar/*!*/>/*!*/ indexes, VCExpr val) {
+ Contract.Requires(val != null);
+ Contract.Requires(map != null);
+ Contract.Requires(store != null);
+ Contract.Requires(cce.NonNullElements(indexes));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCExpr/*!*/>/*!*/ storeArgs = new List<VCExpr/*!*/>(indexes.Count + 2);
+ storeArgs.Add(map);
+ storeArgs.AddRange(HelperFuns.ToVCExprList(indexes));
+ storeArgs.Add(val);
+ return Gen.Function(store, storeArgs);
+ }
+
+ /// <summary>
+ /// Generate:
+ /// (forall m, indexes, val ::
+ /// type(val) == T ==>
+ /// select(store(m, indexes, val), indexes) == val)
+ /// where the quantifier body is also enclosed in a let that defines portions of T, if needed.
+ /// </summary>
+ private VCExpr GenMapAxiom0(Function select, Function store, Type mapResult, List<TypeVariable/*!*/>/*!*/ implicitTypeParamsSelect, List<TypeVariable/*!*/>/*!*/ explicitTypeParamsSelect, List<Type/*!*/>/*!*/ originalInTypes) {
+ Contract.Requires(mapResult != null);
+ Contract.Requires(store != null);
+ Contract.Requires(select != null);
+ Contract.Requires(cce.NonNullElements(implicitTypeParamsSelect));
+ Contract.Requires(cce.NonNullElements(originalInTypes));
+ Contract.Requires(cce.NonNullElements(explicitTypeParamsSelect));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ int arity = store.InParams.Count - 2;
+ List<VCExprVar/*!*/> inParams = new List<VCExprVar/*!*/>();
+ List<VCExprVar/*!*/> quantifiedVars = new List<VCExprVar/*!*/>(store.InParams.Count);
+ VariableBindings bindings = new VariableBindings();
+
+ // bound variable: m
+ VCExprVar typedM = Gen.Variable("m", originalInTypes[0]);
+ VCExprVar m = Gen.Variable("m", AxBuilder.U);
+ inParams.Add(typedM);
+ quantifiedVars.Add(m);
+ bindings.VCExprVarBindings.Add(typedM, m);
+
+ // bound variables: indexes
+ List<Type/*!*/> origIndexTypes = new List<Type/*!*/>(arity);
+ List<Type/*!*/> indexTypes = new List<Type/*!*/>(arity);
+ for (int i = 1; i < store.InParams.Count - 1; i++) {
+ origIndexTypes.Add(originalInTypes[i]);
+ indexTypes.Add(cce.NonNull(store.InParams[i]).TypedIdent.Type);
+ }
+ Contract.Assert(arity == indexTypes.Count);
+ List<VCExprVar/*!*/> typedArgs = HelperFuns.VarVector("arg", origIndexTypes, Gen);
+ Contract.Assert(cce.NonNullElements(typedArgs));
+ List<VCExprVar/*!*/> indexes = HelperFuns.VarVector("x", indexTypes, Gen);
+ Contract.Assert(cce.NonNullElements(indexes));
+ Contract.Assert(typedArgs.Count == indexes.Count);
+ inParams.AddRange(typedArgs);
+ quantifiedVars.AddRange(indexes);
+ for (int i = 0; i < arity; i++) {
+ bindings.VCExprVarBindings.Add(typedArgs[i], indexes[i]);
+ }
+
+ // bound variable: val
+ VCExprVar typedVal = Gen.Variable("val", mapResult);
+ VCExprVar val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
+ quantifiedVars.Add(val);
+ bindings.VCExprVarBindings.Add(typedVal, val);
+
+ // add all type parameters into bindings
+ foreach (TypeVariable tp in implicitTypeParamsSelect) {
+ VCExprVar tVar = Gen.Variable(tp.Name, AxBuilderPremisses.T);
+ bindings.TypeVariableBindings.Add(tp, tVar);
+ }
+ List<VCExpr/*!*/> typeParams = new List<VCExpr/*!*/>(explicitTypeParamsSelect.Count);
+ foreach (TypeVariable tp in explicitTypeParamsSelect) {
+ VCExprVar tVar = Gen.Variable(tp.Name, AxBuilderPremisses.T);
+ bindings.TypeVariableBindings.Add(tp, tVar);
+ // ... and record these explicit type-parameter arguments in typeParams
+ typeParams.Add(tVar);
+ }
+
+ VCExpr/*!*/ storeExpr = Store(store, m, indexes, val);
+ Contract.Assert(storeExpr != null);
+ VCExpr/*!*/ selectExpr = Select(select, typeParams, storeExpr, indexes);
+ Contract.Assert(selectExpr != null);
+
+ // Create let-binding definitions for all type parameters.
+ // The implicit ones can be phrased in terms of the types of the ordinary in-parameters, and
+ // we want to make sure that they don't get phrased in terms of the out-parameter, so we pass
+ // in inParams here.
+ List<VCExprLetBinding/*!*/> letBindings_Implicit =
+ AxBuilderPremisses.GenTypeParamBindings(implicitTypeParamsSelect, inParams, bindings, false);
+ Contract.Assert(cce.NonNullElements(letBindings_Implicit));
+ // The explicit ones, by definition, can only be phrased in terms of the result, so we pass
+ // in List(typedVal) here.
+ List<VCExprLetBinding/*!*/> letBindings_Explicit =
+ AxBuilderPremisses.GenTypeParamBindings(explicitTypeParamsSelect, HelperFuns.ToList(typedVal), bindings, false);
+ Contract.Assert(cce.NonNullElements(letBindings_Explicit));
+
+ // generate: select(store(m, indices, val)) == val
+ VCExpr/*!*/ eq = Gen.Eq(selectExpr, val);
+ Contract.Assert(eq != null);
+ // generate: type(val) == T, where T is the type of val
+ VCExpr/*!*/ ante = Gen.Eq(
+ AxBuilderPremisses.TypeOf(val),
+ AxBuilderPremisses.Type2Term(mapResult, bindings.TypeVariableBindings));
+ Contract.Assert(ante != null);
+ VCExpr body;
+ if (CommandLineOptions.Clo.TypeEncodingMethod == CommandLineOptions.TypeEncoding.None ||
+ !AxBuilder.U.Equals(cce.NonNull(select.OutParams[0]).TypedIdent.Type)) {
+ body = Gen.Let(letBindings_Explicit, eq);
+ } else {
+ body = Gen.Let(letBindings_Implicit, Gen.Let(letBindings_Explicit, Gen.ImpliesSimp(ante, eq)));
+ }
+ return Gen.Forall(quantifiedVars, new List<VCTrigger/*!*/>(), "mapAx0:" + select.Name, 0, body);
+ }
+
+ private VCExpr GenMapAxiom1(Function select, Function store, Type mapResult, List<TypeVariable/*!*/>/*!*/ explicitSelectParams) {
+ Contract.Requires(mapResult != null);
+ Contract.Requires(store != null);
+ Contract.Requires(select != null);
+ Contract.Requires(cce.NonNullElements(explicitSelectParams));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ int arity = store.InParams.Count - 2;
+
+ List<Type/*!*/> indexTypes = new List<Type/*!*/>();
+ for (int i = 1; i < store.InParams.Count - 1; i++) {
+ indexTypes.Add(cce.NonNull(store.InParams[i]).TypedIdent.Type);
+ }
+ Contract.Assert(indexTypes.Count == arity);
+
+ List<VCExprVar/*!*/>/*!*/ indexes0 = HelperFuns.VarVector("x", indexTypes, Gen);
+ Contract.Assert(cce.NonNullElements(indexes0));
+ List<VCExprVar/*!*/>/*!*/ indexes1 = HelperFuns.VarVector("y", indexTypes, Gen);
+ Contract.Assert(cce.NonNullElements(indexes1));
+ VCExprVar/*!*/ m = Gen.Variable("m", AxBuilder.U);
+ Contract.Assert(m != null);
+ VCExprVar/*!*/ val = Gen.Variable("val", cce.NonNull(select.OutParams[0]).TypedIdent.Type);
+ Contract.Assert(val != null);
+
+ // extract the explicit type parameters from the actual result type ...
+ VCExprVar/*!*/ typedVal = Gen.Variable("val", mapResult);
+ Contract.Assert(typedVal != null);
+ VariableBindings/*!*/ bindings = new VariableBindings();
+ bindings.VCExprVarBindings.Add(typedVal, val);
+
+ List<VCExprLetBinding/*!*/>/*!*/ letBindings =
+ AxBuilderPremisses.GenTypeParamBindings(explicitSelectParams,
+ HelperFuns.ToList(typedVal),
+ bindings, true);
+ Contract.Assert(cce.NonNullElements(letBindings));
+
+ // ... and quantify the introduced term variables for type
+ // parameters universally
+ List<VCExprVar/*!*/>/*!*/ typeParams = new List<VCExprVar/*!*/>(explicitSelectParams.Count);
+ List<VCExpr/*!*/>/*!*/ typeParamsExpr = new List<VCExpr/*!*/>(explicitSelectParams.Count);
+ foreach (TypeVariable/*!*/ var in explicitSelectParams) {
+ Contract.Assert(var != null);
+ VCExprVar/*!*/ newVar = (VCExprVar)bindings.TypeVariableBindings[var];
+ Contract.Assert(newVar != null);
+ typeParams.Add(newVar);
+ typeParamsExpr.Add(newVar);
+ }
+
+ VCExpr/*!*/ storeExpr = Store(store, m, indexes0, val);
+ Contract.Assert(storeExpr != null);
+ VCExpr/*!*/ selectWithoutStoreExpr = Select(select, typeParamsExpr, m, indexes1);
+ Contract.Assert(selectWithoutStoreExpr != null);
+ VCExpr/*!*/ selectExpr = Select(select, typeParamsExpr, storeExpr, indexes1);
+ Contract.Assert(selectExpr != null);
+
+ VCExpr/*!*/ selectEq = Gen.Eq(selectExpr, selectWithoutStoreExpr);
+ Contract.Assert(selectEq != null);
+
+ List<VCExprVar/*!*/>/*!*/ quantifiedVars = new List<VCExprVar/*!*/>(indexes0.Count + indexes1.Count + 2);
+ quantifiedVars.Add(val);
+ quantifiedVars.Add(m);
+ quantifiedVars.AddRange(indexes0);
+ quantifiedVars.AddRange(indexes1);
+ quantifiedVars.AddRange(typeParams);
+
+ List<VCTrigger/*!*/>/*!*/ triggers = new List<VCTrigger/*!*/>();
+ Contract.Assert(cce.NonNullElements(triggers));
+
+ VCExpr/*!*/ axiom = VCExpressionGenerator.True;
+ Contract.Assert(axiom != null);
+
+ // first non-interference criterium: the queried location is
+ // different from the assigned location
+ for (int i = 0; i < arity; ++i) {
+ VCExpr/*!*/ indexesEq = Gen.Eq(indexes0[i], indexes1[i]);
+ VCExpr/*!*/ matrix = Gen.Or(indexesEq, selectEq);
+ VCExpr/*!*/ conjunct = Gen.Forall(quantifiedVars, triggers, "mapAx1:" + select.Name + ":" + i, 0, matrix);
+ Contract.Assert(indexesEq != null);
+ Contract.Assert(matrix != null);
+ Contract.Assert(conjunct != null);
+ axiom = Gen.AndSimp(axiom, conjunct);
+ }
+
+ // second non-interference criterion: the queried type is
+ // different from the assigned type
+ VCExpr/*!*/ typesEq = VCExpressionGenerator.True;
+ foreach (VCExprLetBinding/*!*/ b in letBindings) {
+ Contract.Assert(b != null);
+ typesEq = Gen.AndSimp(typesEq, Gen.Eq(b.V, b.E));
+ }
+ VCExpr/*!*/ matrix2 = Gen.Or(typesEq, selectEq);
+ VCExpr/*!*/ conjunct2 = Gen.Forall(quantifiedVars, triggers, "mapAx2:" + select.Name, 0, matrix2);
+ axiom = Gen.AndSimp(axiom, conjunct2);
+
+ return axiom;
+ }
+
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+
+ public class TypeEraserPremisses : TypeEraser
+ {
+
+ private readonly TypeAxiomBuilderPremisses/*!*/ AxBuilderPremisses;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilderPremisses != null);
+ }
+
+
+ private OpTypeEraser OpEraserAttr = null;
+ protected override OpTypeEraser/*!*/ OpEraser {
+ get {
+ Contract.Ensures(Contract.Result<OpTypeEraser>() != null);
+
+ if (OpEraserAttr == null)
+ OpEraserAttr = new OpTypeEraserPremisses(this, AxBuilderPremisses, Gen);
+ return OpEraserAttr;
+ }
+ }
+
+ public TypeEraserPremisses(TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen)
+ : base(axBuilder, gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+
+ this.AxBuilderPremisses = axBuilder;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public override VCExpr Visit(VCExprQuantifier node, VariableBindings oldBindings) {
+ Contract.Requires(oldBindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VariableBindings bindings = oldBindings.Clone();
+
+ // determine the bound vars that actually occur in the body or
+ // in any of the triggers (if some variables do not occur, we
+ // need to take special care of type parameters that only occur
+ // in the types of such variables)
+ FreeVariableCollector coll = new FreeVariableCollector();
+ coll.Collect(node.Body);
+ foreach (VCTrigger trigger in node.Triggers) {
+ if (trigger.Pos)
+ foreach (VCExpr/*!*/ e in trigger.Exprs) {
+ Contract.Assert(e != null);
+
+ coll.Collect(e);
+ }
+ }
+
+ List<VCExprVar/*!*/> occurringVars = new List<VCExprVar/*!*/>(node.BoundVars.Count);
+ foreach (VCExprVar var in node.BoundVars)
+ if (coll.FreeTermVars.ContainsKey(var))
+ occurringVars.Add(var);
+
+ occurringVars.TrimExcess();
+
+ // bound term variables are replaced with bound term variables typed in
+ // a simpler way
+ List<VCExprVar/*!*/>/*!*/ newBoundVars =
+ BoundVarsAfterErasure(occurringVars, bindings);
+ Contract.Assert(cce.NonNullElements(newBoundVars));
+ VCExpr/*!*/ newNode = HandleQuantifier(node, occurringVars,
+ newBoundVars, bindings);
+ Contract.Assert(newNode != null);
+
+ if (!(newNode is VCExprQuantifier) || !IsUniversalQuantifier(node))
+ return newNode;
+
+ VariableBindings bindings2;
+ if (!RedoQuantifier(node, (VCExprQuantifier)newNode, occurringVars, oldBindings,
+ out bindings2, out newBoundVars))
+ return newNode;
+
+ return HandleQuantifier(node, occurringVars,
+ newBoundVars, bindings2);
+ }
+
+ private VCExpr/*!*/ GenTypePremisses(List<VCExprVar/*!*/>/*!*/ oldBoundVars,
+ List<VCExprVar/*!*/>/*!*/ newBoundVars,
+ IDictionary<TypeVariable/*!*/, VCExpr/*!*/>/*!*/
+ typeVarTranslation,
+ List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings,
+ out List<VCTrigger/*!*/>/*!*/ triggers) {
+ Contract.Requires(cce.NonNullElements(oldBoundVars));
+ Contract.Requires(cce.NonNullElements(newBoundVars));
+ Contract.Requires(cce.NonNullDictionaryAndValues(typeVarTranslation));
+ Contract.Requires(cce.NonNullElements(typeVarBindings));
+ Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out triggers)));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ // build a substitution of the type variables that it can be checked
+ // whether type premisses are trivial
+ VCExprSubstitution/*!*/ typeParamSubstitution = new VCExprSubstitution();
+ foreach (VCExprLetBinding/*!*/ binding in typeVarBindings) {
+ Contract.Assert(binding != null);
+ typeParamSubstitution[binding.V] = binding.E;
+ }
+ SubstitutingVCExprVisitor/*!*/ substituter = new SubstitutingVCExprVisitor(Gen);
+ Contract.Assert(substituter != null);
+
+ List<VCExpr/*!*/>/*!*/ typePremisses = new List<VCExpr/*!*/>(newBoundVars.Count);
+ triggers = new List<VCTrigger/*!*/>(newBoundVars.Count);
+
+ for (int i = 0; i < newBoundVars.Count; ++i) {
+ VCExprVar/*!*/ oldVar = oldBoundVars[i];
+ Contract.Assert(oldVar != null);
+ VCExprVar/*!*/ newVar = newBoundVars[i];
+ Contract.Assert(newVar != null);
+
+ VCExpr/*!*/ typePremiss =
+ AxBuilderPremisses.GenVarTypeAxiom(newVar, oldVar.Type,
+ typeVarTranslation);
+ Contract.Assert(typePremiss != null);
+ if (!IsTriviallyTrue(substituter.Mutate(typePremiss,
+ typeParamSubstitution))) {
+ typePremisses.Add(typePremiss);
+ // generate a negative trigger for the variable occurrence
+ // in the type premiss
+ triggers.Add(Gen.Trigger(false,
+ HelperFuns.ToList(AxBuilderPremisses.TypeOf(newVar))));
+ }
+ }
+
+ typePremisses.TrimExcess();
+ triggers.TrimExcess();
+
+ return Gen.NAry(VCExpressionGenerator.AndOp, typePremisses);
+ }
+
+ // these optimisations should maybe be moved into a separate
+ // visitor (peep-hole optimisations)
+ private bool IsTriviallyTrue(VCExpr expr) {
+ Contract.Requires(expr != null);
+ if (expr.Equals(VCExpressionGenerator.True))
+ return true;
+
+ if (expr is VCExprNAry) {
+ VCExprNAry/*!*/ naryExpr = (VCExprNAry)expr;
+ Contract.Assert(naryExpr != null);
+ if (naryExpr.Op.Equals(VCExpressionGenerator.EqOp) &&
+ naryExpr[0].Equals(naryExpr[1]))
+ return true;
+ }
+
+ return false;
+ }
+
+ private VCExpr HandleQuantifier(VCExprQuantifier node, List<VCExprVar/*!*/>/*!*/ occurringVars/*!*/, List<VCExprVar/*!*/>/*!*/ newBoundVars, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Requires(cce.NonNullElements(occurringVars/*!*/));
+ Contract.Requires(cce.NonNullElements(newBoundVars));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings =
+ AxBuilderPremisses.GenTypeParamBindings(node.TypeParameters, occurringVars, bindings, true);
+ Contract.Assert(typeVarBindings != null);
+ // Check whether some of the type parameters could not be
+ // determined from the bound variable types. In this case, we
+ // quantify explicitly over these variables
+ if (typeVarBindings.Count < node.TypeParameters.Count) {
+ foreach (TypeVariable/*!*/ var in node.TypeParameters) {
+ Contract.Assert(var != null);
+ if (typeVarBindings.All(b => !b.V.Equals(bindings.TypeVariableBindings[var])))
+ newBoundVars.Add((VCExprVar)bindings.TypeVariableBindings[var]);
+ }
+ }
+
+ // the lists of old and new bound variables for which type
+ // antecedents are to be generated
+ List<VCExprVar/*!*/>/*!*/ varsWithTypeSpecs = new List<VCExprVar/*!*/>();
+ List<VCExprVar/*!*/>/*!*/ newVarsWithTypeSpecs = new List<VCExprVar/*!*/>();
+ if (!IsUniversalQuantifier(node) ||
+ CommandLineOptions.Clo.TypeEncodingMethod
+ == CommandLineOptions.TypeEncoding.Predicates) {
+ foreach (VCExprVar/*!*/ oldVar in occurringVars) {
+ Contract.Assert(oldVar != null);
+ varsWithTypeSpecs.Add(oldVar);
+ newVarsWithTypeSpecs.Add(bindings.VCExprVarBindings[oldVar]);
+ }
+ } // else, no type antecedents are created for any variables
+
+ List<VCTrigger/*!*/>/*!*/ furtherTriggers;
+ VCExpr/*!*/ typePremisses =
+ GenTypePremisses(varsWithTypeSpecs, newVarsWithTypeSpecs,
+ bindings.TypeVariableBindings,
+ typeVarBindings, out furtherTriggers);
+
+ Contract.Assert(cce.NonNullElements(furtherTriggers));
+ Contract.Assert(typePremisses != null);
+ List<VCTrigger/*!*/>/*!*/ newTriggers = MutateTriggers(node.Triggers, bindings);
+ Contract.Assert(cce.NonNullElements(newTriggers));
+ newTriggers.AddRange(furtherTriggers);
+ newTriggers = AddLets2Triggers(newTriggers, typeVarBindings);
+
+ VCExpr/*!*/ newBody = Mutate(node.Body, bindings);
+ Contract.Assert(newBody != null);
+
+ // assemble the new quantified formula
+
+ if (CommandLineOptions.Clo.TypeEncodingMethod
+ == CommandLineOptions.TypeEncoding.None) {
+ typePremisses = VCExpressionGenerator.True;
+ }
+
+ VCExpr/*!*/ bodyWithPremisses =
+ AxBuilderPremisses.AddTypePremisses(typeVarBindings, typePremisses,
+ node.Quan == Quantifier.ALL,
+ AxBuilder.Cast(newBody, Type.Bool));
+ Contract.Assert(bodyWithPremisses != null);
+ if (newBoundVars.Count == 0) // might happen that no bound variables are left
+ return bodyWithPremisses;
+
+ foreach (VCExprVar/*!*/ v in newBoundVars) {
+ Contract.Assert(v != null);
+ if (v.Type == AxBuilderPremisses.U) {
+ newTriggers.Add(Gen.Trigger(false, AxBuilderPremisses.Cast(v, Type.Int)));
+ newTriggers.Add(Gen.Trigger(false, AxBuilderPremisses.Cast(v, Type.Bool)));
+ }
+ }
+
+ return Gen.Quantify(node.Quan, new List<TypeVariable/*!*/>(), newBoundVars,
+ newTriggers, node.Infos, bodyWithPremisses);
+ }
+
+ // check whether we need to add let-binders for any of the type
+ // parameters to the triggers (otherwise, the triggers will
+ // contain unbound/dangling variables for such parameters)
+ private List<VCTrigger/*!*/>/*!*/ AddLets2Triggers(List<VCTrigger/*!*/>/*!*/ triggers/*!*/, List<VCExprLetBinding/*!*/>/*!*/ typeVarBindings) {
+ Contract.Requires(cce.NonNullElements(triggers/*!*/));
+ Contract.Requires(cce.NonNullElements(typeVarBindings));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCTrigger>>()));
+ List<VCTrigger/*!*/>/*!*/ triggersWithLets = new List<VCTrigger/*!*/>(triggers.Count);
+
+ foreach (VCTrigger/*!*/ t in triggers) {
+ Contract.Assert(t != null);
+ List<VCExpr/*!*/>/*!*/ exprsWithLets = new List<VCExpr/*!*/>(t.Exprs.Count);
+
+ bool changed = false;
+ foreach (VCExpr/*!*/ e in t.Exprs) {
+ Contract.Assert(e != null);
+ Dictionary<VCExprVar/*!*/, object>/*!*/ freeVars =
+ FreeVariableCollector.FreeTermVariables(e);
+ Contract.Assert(freeVars != null && cce.NonNullElements(freeVars.Keys));
+ if (typeVarBindings.Any(b => freeVars.ContainsKey(b.V))) {
+ exprsWithLets.Add(Gen.Let(typeVarBindings, e));
+ changed = true;
+ } else {
+ exprsWithLets.Add(e);
+ }
+ }
+
+ if (changed)
+ triggersWithLets.Add(Gen.Trigger(t.Pos, exprsWithLets));
+ else
+ triggersWithLets.Add(t);
+ }
+
+ return triggersWithLets;
+ }
+
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ public class OpTypeEraserPremisses : OpTypeEraser
+ {
+
+ private TypeAxiomBuilderPremisses/*!*/ AxBuilderPremisses;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(AxBuilderPremisses != null);
+ }
+
+
+ public OpTypeEraserPremisses(TypeEraserPremisses eraser, TypeAxiomBuilderPremisses axBuilder, VCExpressionGenerator gen)
+ : base(eraser, axBuilder, gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(axBuilder != null);
+ Contract.Requires(eraser != null);
+ this.AxBuilderPremisses = axBuilder;
+ }
+
+ private VCExpr HandleFunctionOp(Function newFun, List<Type/*!*/>/*!*/ typeArgs/*!*/, IEnumerable<VCExpr/*!*/>/*!*/ oldArgs, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(newFun != null);
+ Contract.Requires(cce.NonNullElements(typeArgs/*!*/));
+ Contract.Requires(cce.NonNullElements(oldArgs));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // UGLY: the code for tracking polarities should be factored out
+ int oldPolarity = Eraser.Polarity;
+ Eraser.Polarity = 0;
+
+ List<VCExpr/*!*/>/*!*/ newArgs = new List<VCExpr/*!*/>(typeArgs.Count);
+
+ // translate the explicit type arguments
+ foreach (Type/*!*/ t in typeArgs) {
+ Contract.Assert(t != null);
+ newArgs.Add(AxBuilder.Type2Term(t, bindings.TypeVariableBindings));
+ }
+
+ // recursively translate the value arguments
+ foreach (VCExpr/*!*/ arg in oldArgs) {
+ Contract.Assert(arg != null);
+ Type/*!*/ newType = cce.NonNull(newFun.InParams[newArgs.Count]).TypedIdent.Type;
+ newArgs.Add(AxBuilder.Cast(Eraser.Mutate(arg, bindings), newType));
+ }
+
+ Eraser.Polarity = oldPolarity;
+ return Gen.Function(newFun, newArgs);
+ }
+
+ public override VCExpr/*!*/ VisitSelectOp(VCExprNAry/*!*/ node,
+ VariableBindings/*!*/ bindings) {
+ Contract.Requires(node != null); Contract.Requires(bindings != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ MapType/*!*/ mapType = node[0].Type.AsMap;
+ Contract.Assert(mapType != null);
+ List<Type>/*!*/ instantiations; // not used
+ Function/*!*/ select =
+ AxBuilder.MapTypeAbstracter.Select(mapType, out instantiations);
+ Contract.Assert(select != null);
+
+ List<int>/*!*/ explicitTypeParams =
+ AxBuilderPremisses.MapTypeAbstracterPremisses
+ .ExplicitSelectTypeParams(mapType);
+ Contract.Assert(select.InParams.Count == explicitTypeParams.Count + node.Arity);
+
+ List<Type/*!*/>/*!*/ typeArgs = new List<Type/*!*/>(explicitTypeParams.Count);
+ foreach (int i in explicitTypeParams)
+ typeArgs.Add(node.TypeArguments[i]);
+ return HandleFunctionOp(select, typeArgs, node, bindings);
+ }
+
+ public override VCExpr VisitStoreOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ List<Type>/*!*/ instantiations; // not used
+ Function/*!*/ store =
+ AxBuilder.MapTypeAbstracter.Store(node[0].Type.AsMap, out instantiations);
+ Contract.Assert(store != null);
+ return HandleFunctionOp(store,
+ // the store function never has explicit
+ // type parameters
+ new List<Type/*!*/>(),
+ node, bindings);
+ }
+
+ public override VCExpr VisitBoogieFunctionOp(VCExprNAry node, VariableBindings bindings) {
+ Contract.Requires(bindings != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ Function/*!*/ oriFun = ((VCExprBoogieFunctionOp)node.Op).Func;
+ Contract.Assert(oriFun != null);
+ UntypedFunction untypedFun = AxBuilderPremisses.Typed2Untyped(oriFun);
+ Contract.Assert(untypedFun.Fun.InParams.Count ==
+ untypedFun.ExplicitTypeParams.Count + node.Arity);
+
+ List<Type/*!*/>/*!*/ typeArgs =
+ ExtractTypeArgs(node,
+ oriFun.TypeParameters, untypedFun.ExplicitTypeParams);
+ return HandleFunctionOp(untypedFun.Fun, typeArgs, node, bindings);
+ }
+
+ private List<Type/*!*/>/*!*/ ExtractTypeArgs(VCExprNAry node, List<TypeVariable> allTypeParams, List<TypeVariable/*!*/>/*!*/ explicitTypeParams) {
+ Contract.Requires(allTypeParams != null);
+ Contract.Requires(node != null);
+ Contract.Requires(cce.NonNullElements(explicitTypeParams));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
+ List<Type/*!*/>/*!*/ res = new List<Type/*!*/>(explicitTypeParams.Count);
+ foreach (TypeVariable/*!*/ var in explicitTypeParams) {
+ Contract.Assert(var != null);
+ // this lookup could be optimised
+ res.Add(node.TypeArguments[allTypeParams.IndexOf(var)]);
+ }
+ return res;
+ }
+ }
+
+
+}
diff --git a/Source/VCExpr/VCExpr.csproj b/Source/VCExpr/VCExpr.csproj
index acacb4d1..efac274e 100644
--- a/Source/VCExpr/VCExpr.csproj
+++ b/Source/VCExpr/VCExpr.csproj
@@ -1,223 +1,223 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>VCExpr</RootNamespace>
- <AssemblyName>VCExpr</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for VCExpr.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\VCExpr.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\version.cs">
- <Link>version.cs</Link>
- </Compile>
- <Compile Include="BigLiteralAbstracter.cs" />
- <Compile Include="Boogie2VCExpr.cs" />
- <Compile Include="Clustering.cs" />
- <Compile Include="LetBindingSorter.cs" />
- <Compile Include="NameClashResolver.cs" />
- <Compile Include="SimplifyLikeLineariser.cs" />
- <Compile Include="TermFormulaFlattening.cs" />
- <Compile Include="TypeErasure.cs" />
- <Compile Include="TypeErasureArguments.cs" />
- <Compile Include="TypeErasurePremisses.cs" />
- <Compile Include="VCExprAST.cs" />
- <Compile Include="VCExprASTPrinter.cs" />
- <Compile Include="VCExprASTVisitors.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>VCExpr</RootNamespace>
+ <AssemblyName>BoogieVCExpr</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for VCExpr.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\VCExpr.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\version.cs">
+ <Link>version.cs</Link>
+ </Compile>
+ <Compile Include="BigLiteralAbstracter.cs" />
+ <Compile Include="Boogie2VCExpr.cs" />
+ <Compile Include="Clustering.cs" />
+ <Compile Include="LetBindingSorter.cs" />
+ <Compile Include="NameClashResolver.cs" />
+ <Compile Include="SimplifyLikeLineariser.cs" />
+ <Compile Include="TermFormulaFlattening.cs" />
+ <Compile Include="TypeErasure.cs" />
+ <Compile Include="TypeErasureArguments.cs" />
+ <Compile Include="TypeErasurePremisses.cs" />
+ <Compile Include="VCExprAST.cs" />
+ <Compile Include="VCExprASTPrinter.cs" />
+ <Compile Include="VCExprASTVisitors.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Source/VCExpr/VCExprAST.cs b/Source/VCExpr/VCExprAST.cs
index b22853ce..b5d4dfb5 100644
--- a/Source/VCExpr/VCExprAST.cs
+++ b/Source/VCExpr/VCExprAST.cs
@@ -1,2260 +1,2276 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-// Prover-independent syntax trees for representing verification conditions
-// The language can be seen as a simple polymorphically typed first-order logic,
-// very similar to the expression language of Boogie
-
-namespace Microsoft.Boogie {
- using Microsoft.Boogie.VCExprAST;
-
- public class VCExpressionGenerator {
- public static readonly VCExpr False = new VCExprLiteral(Type.Bool);
- public static readonly VCExpr True = new VCExprLiteral(Type.Bool);
-
- private Function ControlFlowFunction = null;
- public VCExpr ControlFlowFunctionApplication(VCExpr e1, VCExpr e2) {
- Contract.Requires(e1 != null);
- Contract.Requires(e2 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- if (ControlFlowFunction == null) {
- Formal/*!*/ first = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Int), true);
- Formal/*!*/ second = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Int), true);
- List<Variable> inputs = new List<Variable>();
- inputs.Add(first);
- inputs.Add(second);
- Formal/*!*/ returnVar = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Int), false);
- ControlFlowFunction = new Function(Token.NoToken, "ControlFlow", inputs, returnVar);
- }
- List<VCExpr/*!*/> args = new List<VCExpr/*!*/>();
- args.Add(e1);
- args.Add(e2);
- return Function(BoogieFunctionOp(ControlFlowFunction), args);
- }
-
- public VCExpr/*!*/ Integer(BigNum x) {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return new VCExprIntLit(x);
- }
-
- public VCExpr/*!*/ Real(BigDec x) {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return new VCExprRealLit(x);
- }
-
- public VCExpr/*!*/ Float(BigFloat x)
- {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return new VCExprFloatLit(x);
- }
-
- public VCExpr/*!*/ Function(VCExprOp/*!*/ op,
- List<VCExpr/*!*/>/*!*/ arguments,
- List<Type/*!*/>/*!*/ typeArguments) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Requires(cce.NonNullElements(typeArguments));
- if (typeArguments.Count > 0)
- return new VCExprMultiAry(op, arguments, typeArguments);
-
- switch (arguments.Count) {
- case 0:
- return new VCExprNullary(op);
- case 1:
- return new VCExprUnary(op, arguments);
- case 2:
- return new VCExprBinary(op, arguments);
- default:
- return new VCExprMultiAry(op, arguments);
- }
- }
-
- public VCExpr/*!*/ Function(VCExprOp/*!*/ op, List<VCExpr/*!*/>/*!*/ arguments) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return Function(op, arguments, VCExprNAry.EMPTY_TYPE_LIST);
- }
-
- public VCExpr/*!*/ Function(VCExprOp/*!*/ op, params VCExpr[]/*!*/ arguments) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
-
- return Function(op,
- HelperFuns.ToNonNullList(arguments),
- VCExprNAry.EMPTY_TYPE_LIST);
- }
-
- public VCExpr/*!*/ Function(VCExprOp/*!*/ op, VCExpr[]/*!*/ arguments, Type[]/*!*/ typeArguments) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Requires(cce.NonNullElements(typeArguments));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
-
- return Function(op,
- HelperFuns.ToNonNullList(arguments),
- HelperFuns.ToNonNullList(typeArguments));
- }
-
- public VCExpr/*!*/ Function(Function/*!*/ op, List<VCExpr/*!*/>/*!*/ arguments) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return Function(BoogieFunctionOp(op), arguments, VCExprNAry.EMPTY_TYPE_LIST);
- }
-
- public VCExpr/*!*/ Function(Function/*!*/ op, params VCExpr[]/*!*/ arguments) {
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Requires(op != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return Function(BoogieFunctionOp(op), arguments);
- }
-
-
- // The following method should really be called "ReduceLeft". It must
- // only be used for the binary operators "and" and "or"
- public VCExpr/*!*/ NAry(VCExprOp/*!*/ op, List<VCExpr/*!*/>/*!*/ args) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return NAry(op, args.ToArray());
- }
-
- public VCExpr/*!*/ NAry(VCExprOp/*!*/ op, params VCExpr[]/*!*/ args) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(args));
- Contract.Requires(op == AndOp || op == OrOp);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- bool and = (op == AndOp);
-
- VCExpr/*!*/ e = and ? True : False;
- foreach (VCExpr a in args) {
- e = and ? AndSimp(e, cce.NonNull(a)) : OrSimp(e, cce.NonNull(a));
- }
- return e;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
-
- public static readonly VCExprOp NotOp = new VCExprNAryOp(1, Type.Bool);
- public static readonly VCExprOp EqOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp NeqOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp AndOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp OrOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp ImpliesOp = new VCExprNAryOp(2, Type.Bool);
-
- public VCExprDistinctOp DistinctOp(int arity) {
- Contract.Ensures(Contract.Result<VCExprDistinctOp>() != null);
-
- return new VCExprDistinctOp(arity);
- }
-
- public VCExpr/*!*/ Not(List<VCExpr/*!*/>/*!*/ args) {
- Contract.Requires(args != null);
- Contract.Requires(args.Count == 1);
- Contract.Requires(args[0] != null);
- return Function(NotOp, args);
- }
-
- public VCExpr/*!*/ Not(VCExpr/*!*/ e0) {
- Contract.Requires(e0 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return Function(NotOp, e0);
- }
- public VCExpr/*!*/ Eq(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
- return Function(EqOp, e0, e1);
- }
- public VCExpr/*!*/ Neq(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return Function(NeqOp, e0, e1);
- }
- public VCExpr/*!*/ And(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(AndOp, e0, e1);
- }
- public VCExpr/*!*/ Gt(VCExpr/*!*/ e0, VCExpr/*!*/ e1)
- {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- return Function(GtOp, e0, e1);
- }
- public VCExpr/*!*/ Add(VCExpr/*!*/ e0, VCExpr/*!*/ e1)
- {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExprOp op = cce.NonNull(cce.NonNull(e0).Type).IsInt ? AddIOp : AddROp;
- return Function(op, e0, e1);
- }
- public VCExpr/*!*/ Or(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(OrOp, e0, e1);
- }
- public VCExpr/*!*/ Implies(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(ImpliesOp, e0, e1);
- }
- public VCExpr/*!*/ Distinct(List<VCExpr/*!*/>/*!*/ args) {
- Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- if (args.Count <= 1)
- // trivial case
- return True;
- return Function(DistinctOp(args.Count), args);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // Versions of the propositional operators that automatically simplify in
- // certain cases (for example, if one of the operators is True or False)
-
- public VCExpr NotSimp(VCExpr e0) {
- Contract.Requires(e0 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (e0.Equals(True))
- return False;
- if (e0.Equals(False))
- return True;
- return Not(e0);
- }
- public VCExpr AndSimp(VCExpr e0, VCExpr e1) {
- Contract.Requires(e1 != null);
- Contract.Requires(e0 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (e0.Equals(True))
- return e1;
- if (e1.Equals(True))
- return e0;
- if (e0.Equals(False) || e1.Equals(False))
- return False;
- return And(e0, e1);
- }
- public VCExpr OrSimp(VCExpr e0, VCExpr e1) {
- Contract.Requires(e1 != null);
- Contract.Requires(e0 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (e0.Equals(False))
- return e1;
- if (e1.Equals(False))
- return e0;
- if (e0.Equals(True) || e1.Equals(True))
- return True;
- return Or(e0, e1);
- }
- public VCExpr ImpliesSimp(VCExpr e0, VCExpr e1, bool aggressive = true) {
- Contract.Requires(e1 != null);
- Contract.Requires(e0 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (e0.Equals(True))
- return e1;
- if (e1.Equals(False))
- return NotSimp(e0);
- if (e0.Equals(False) || e1.Equals(True))
- return True;
- // attempt to save on the depth of expressions (to reduce chances of stack overflows)
- while (aggressive && e1 is VCExprBinary) {
- VCExprBinary n = (VCExprBinary)e1;
- if (n.Op == ImpliesOp) {
- if (AndSize(n[0]) <= AndSize(e0)) {
- // combine the antecedents
- e0 = And(e0, n[0]);
- e1 = n[1];
- continue;
- }
- }
- break;
- }
- return Implies(e0, e1);
- }
-
- ///<summary>
- /// Returns some measure of the number of conjuncts in e. This could be the total number of conjuncts in all
- /// top-most layers of the expression, or it can simply be the length of the left-prong of this and-tree. The
- /// important thing is that: AndSize(e0) >= AndSize(31) ==> AndSize(And(e0,e1)) > AndSize(e0).
- ///</summary>
- int AndSize(VCExpr e) {
- Contract.Requires(e != null);
- int n = 1;
- while (true) {
- VCExprNAry nary = e as VCExprNAry;
- if (nary != null && nary.Op == AndOp && 2 <= nary.Arity) {
- e = nary[0];
- n++;
- } else {
- return n;
- }
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // Further operators
-
- public static readonly VCExprOp AddIOp = new VCExprNAryOp(2, Type.Int);
- public static readonly VCExprOp AddROp = new VCExprNAryOp(2, Type.Real);
- public static readonly VCExprOp SubIOp = new VCExprNAryOp(2, Type.Int);
- public static readonly VCExprOp SubROp = new VCExprNAryOp(2, Type.Real);
- // public static readonly VCExprOp SubFOp = new VCExprNAryOp(2, Type.Float);
- public static readonly VCExprOp MulIOp = new VCExprNAryOp(2, Type.Int);
- public static readonly VCExprOp MulROp = new VCExprNAryOp(2, Type.Real);
- //public static readonly VCExprOp MulFOp = new VCExprNAryOp(2, Type.Float);
- public static readonly VCExprOp DivIOp = new VCExprNAryOp(2, Type.Int);
- public static readonly VCExprOp DivROp = new VCExprNAryOp(2, Type.Real);
- //public static readonly VCExprOp DivFOp = new VCExprNAryOp(2, Type.Float);
- public static readonly VCExprOp ModOp = new VCExprNAryOp(2, Type.Int);
- public static readonly VCExprOp PowOp = new VCExprNAryOp(2, Type.Real);
- public static readonly VCExprOp LtOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp LeOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp GtOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp GeOp = new VCExprNAryOp(2, Type.Bool);
- public static readonly VCExprOp SubtypeOp = new VCExprNAryOp(2, Type.Bool);
- // ternary version of the subtype operator, the first argument of which gives
- // the type of the compared terms
- public static readonly VCExprOp Subtype3Op = new VCExprNAryOp(3, Type.Bool);
- public static readonly VCExprOp IfThenElseOp = new VCExprIfThenElseOp();
- public static readonly VCExprOp ToIntOp = new VCExprNAryOp(1, Type.Int);
- public static readonly VCExprOp ToRealOp = new VCExprNAryOp(1, Type.Real);
- //public static readonly VCExprOp ToFloatOp = new VCExprNAryOp(1, Type.Float);
-
- public static readonly VCExprOp TickleBoolOp = new VCExprCustomOp("tickleBool", 1, Type.Bool);
-
- public VCExprOp BoogieFunctionOp(Function func) {
- Contract.Requires(func != null);
- Contract.Ensures(Contract.Result<VCExprOp>() != null);
- return new VCExprBoogieFunctionOp(func);
- }
-
- // Float nodes
-
- public VCExprOp BinaryFloatOp(int exp, int man, string op)
- {
- Contract.Requires(exp > 0);
- Contract.Requires(man > 0);
- Contract.Requires(op != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return new VCExprBinaryFloatOp(exp, man, op);
- }
-
- // Bitvector nodes
-
- public VCExpr Bitvector(BvConst bv) {
- Contract.Requires(bv != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprBvOp(bv.Bits), Integer(bv.Value));
- }
-
- public VCExpr BvExtract(VCExpr bv, int bits, int start, int end) {
- Contract.Requires(bv != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprBvExtractOp(start, end, bits), bv);
- }
-
- public VCExpr BvConcat(VCExpr bv1, VCExpr bv2) {
- Contract.Requires(bv2 != null);
- Contract.Requires(bv1 != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprBvConcatOp(bv1.Type.BvBits, bv2.Type.BvBits), bv1, bv2);
- }
-
- public VCExpr AtMost(VCExpr smaller, VCExpr greater) {
- Contract.Requires(greater != null);
- Contract.Requires(smaller != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(SubtypeOp, smaller, greater);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- // Dispatcher for the visitor
-
- // the declared singleton operators
- internal enum SingletonOp {
- NotOp,
- EqOp,
- NeqOp,
- AndOp,
- OrOp,
- ImpliesOp,
- AddOp,
- SubOp,
- MulOp,
- DivOp,
- ModOp,
- RealDivOp,
- PowOp,
- LtOp,
- LeOp,
- GtOp,
- GeOp,
- SubtypeOp,
- Subtype3Op,
- BvConcatOp,
- ToIntOp,
- ToRealOp,
- ToFloatOp
- };
- internal static Dictionary<VCExprOp/*!*/, SingletonOp>/*!*/ SingletonOpDict;
- [ContractInvariantMethod]
- void MiscInvariant() {
- Contract.Invariant(SingletonOpDict != null);
- }
-
-
- static VCExpressionGenerator() {
- SingletonOpDict = new Dictionary<VCExprOp/*!*/, SingletonOp>();
- SingletonOpDict.Add(NotOp, SingletonOp.NotOp);
- SingletonOpDict.Add(EqOp, SingletonOp.EqOp);
- SingletonOpDict.Add(NeqOp, SingletonOp.NeqOp);
- SingletonOpDict.Add(AndOp, SingletonOp.AndOp);
- SingletonOpDict.Add(OrOp, SingletonOp.OrOp);
- SingletonOpDict.Add(ImpliesOp, SingletonOp.ImpliesOp);
- SingletonOpDict.Add(AddIOp, SingletonOp.AddOp);
- SingletonOpDict.Add(AddROp, SingletonOp.AddOp);
- SingletonOpDict.Add(SubIOp, SingletonOp.SubOp);
- SingletonOpDict.Add(SubROp, SingletonOp.SubOp);
- //SingletonOpDict.Add(SubFOp, SingletonOp.SubOp);
- SingletonOpDict.Add(MulIOp, SingletonOp.MulOp);
- SingletonOpDict.Add(MulROp, SingletonOp.MulOp);
- //SingletonOpDict.Add(MulFOp, SingletonOp.MulOp);
- SingletonOpDict.Add(DivIOp, SingletonOp.DivOp);
- SingletonOpDict.Add(DivROp, SingletonOp.RealDivOp);
- //SingletonOpDict.Add(DivFOp, SingletonOp.FloatDivOp);
- SingletonOpDict.Add(ModOp, SingletonOp.ModOp);
- SingletonOpDict.Add(PowOp, SingletonOp.PowOp);
- SingletonOpDict.Add(LtOp, SingletonOp.LtOp);
- SingletonOpDict.Add(LeOp, SingletonOp.LeOp);
- SingletonOpDict.Add(GtOp, SingletonOp.GtOp);
- SingletonOpDict.Add(GeOp, SingletonOp.GeOp);
- SingletonOpDict.Add(SubtypeOp, SingletonOp.SubtypeOp);
- SingletonOpDict.Add(Subtype3Op, SingletonOp.Subtype3Op);
- SingletonOpDict.Add(ToIntOp, SingletonOp.ToIntOp);
- SingletonOpDict.Add(ToRealOp, SingletonOp.ToRealOp);
- //SingletonOpDict.Add(ToFloatOp, SingletonOp.ToFloatOp);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
-
-
- // Let-bindings
-
- public VCExprLetBinding LetBinding(VCExprVar v, VCExpr e) {
- Contract.Requires(e != null);
- Contract.Requires(v != null);
- Contract.Ensures(Contract.Result<VCExprLetBinding>() != null);
- return new VCExprLetBinding(v, e);
- }
-
- // A "real" let expression. All let-bindings happen simultaneously, i.e.,
- // at this level the order of the bindings does not matter. It is possible to
- // create expressions like "let x = y, y = 5 in ...". All bound variables are
- // bound in all bound terms/formulas and can occur there, but the dependencies
- // have to be acyclic
- public VCExpr Let(List<VCExprLetBinding> bindings, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(cce.NonNullElements(bindings));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (bindings.Count == 0)
- // no empty let-bindings
- return body;
- return new VCExprLet(bindings, body);
- }
-
- public VCExpr Let(VCExpr body, params VCExprLetBinding[] bindings) {
- Contract.Requires(body != null);
- Contract.Requires((cce.NonNullElements(bindings)));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Let(HelperFuns.ToNonNullList(bindings), body);
- }
-
-
- /// <summary>
- /// In contrast to the previous method, the following methods are not a general LET.
- /// Instead, it
- /// is a boolean "LET b = P in Q", where P and Q are predicates, that is allowed to be
- /// encoded as "(b == P) ==> Q" or even as "(P ==> b) ==> Q"
- /// (or "(P ==> b) and Q" in negative positions).
- /// The method assumes that the variables in the bindings are unique in the entire formula
- /// to be produced, which allows the implementation to ignore scope issues in the event that
- /// it needs to generate an alternate expression for LET.
- /// </summary>
-
-
- // Turn let-bindings let v = E in ... into implications E ==> v
- public VCExpr AsImplications(List<VCExprLetBinding> bindings) {
- Contract.Requires(cce.NonNullElements(bindings));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr/*!*/ antecedents = True;
- foreach (VCExprLetBinding b in bindings)
- // turn "LET_binding v = E" into "v <== E"
- antecedents = AndSimp(antecedents, Implies(b.E, b.V));
- return antecedents;
- }
-
- // Turn let-bindings let v = E in ... into equations v == E
- public VCExpr AsEquations(List<VCExprLetBinding> bindings) {
- Contract.Requires(cce.NonNullElements(bindings));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr/*!*/ antecedents = True;
- foreach (VCExprLetBinding b in bindings)
- // turn "LET_binding v = E" into "v <== E"
- antecedents = AndSimp(antecedents, Eq(b.E, b.V));
- return antecedents;
- }
-
-
-
- // Maps
-
- public VCExpr Select(params VCExpr[] allArgs) {
- Contract.Requires(allArgs != null);
- Contract.Requires((cce.NonNullElements(allArgs)));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprSelectOp(allArgs.Length - 1, 0),
- HelperFuns.ToNonNullList(allArgs),
- VCExprNAry.EMPTY_TYPE_LIST);
- }
-
- public VCExpr Select(VCExpr[] allArgs, Type[] typeArgs) {
- Contract.Requires(1 <= allArgs.Length);
- Contract.Requires(cce.NonNullElements(allArgs));
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprSelectOp(allArgs.Length - 1, typeArgs.Length),
- allArgs, typeArgs);
- }
-
- public VCExpr Select(List<VCExpr> allArgs, List<Type> typeArgs) {
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Requires(cce.NonNullElements(allArgs));
- Contract.Requires((1 <= allArgs.Count));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprSelectOp(allArgs.Count - 1, typeArgs.Count),
- allArgs, typeArgs);
- }
-
- public VCExpr Store(params VCExpr[] allArgs) {
- Contract.Requires(allArgs != null);
- Contract.Requires(cce.NonNullElements(allArgs));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprStoreOp(allArgs.Length - 2, 0),
- HelperFuns.ToNonNullList(allArgs),
- VCExprNAry.EMPTY_TYPE_LIST);
- }
-
- public VCExpr Store(VCExpr[] allArgs, Type[] typeArgs) {
- Contract.Requires(typeArgs != null);
- Contract.Requires(allArgs != null);
- Contract.Requires((2 <= allArgs.Length));
- Contract.Requires(cce.NonNullElements(allArgs));
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprStoreOp(allArgs.Length - 2, typeArgs.Length),
- allArgs, typeArgs);
- }
-
- public VCExpr Store(List<VCExpr> allArgs, List<Type/*!*/>/*!*/ typeArgs) {
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Requires(cce.NonNullElements(allArgs));
- Contract.Requires((2 <= allArgs.Count));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(new VCExprStoreOp(allArgs.Count - 2, typeArgs.Count),
- allArgs, typeArgs);
- }
-
-
- // Labels
-
- public VCExprLabelOp LabelOp(bool pos, string l) {
- Contract.Requires(l != null);
- Contract.Ensures(Contract.Result<VCExprLabelOp>() != null);
- return new VCExprLabelOp(pos, l);
- }
-
- public VCExpr LabelNeg(string label, VCExpr e) {
- Contract.Requires(e != null);
- Contract.Requires(label != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- if (e.Equals(True)) {
- return e; // don't bother putting negative labels around True (which will expose the True to further peephole optimizations)
- }
- return Function(LabelOp(false, label), e);
- }
- public VCExpr LabelPos(string label, VCExpr e) {
- Contract.Requires(e != null);
- Contract.Requires(label != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Function(LabelOp(true, label), e);
- }
-
- // Quantifiers
-
- public VCExpr Quantify(Quantifier quan, List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(infos != null);
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Requires(cce.NonNullElements(vars));
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return new VCExprQuantifier(quan, typeParams, vars, triggers, infos, body);
- }
-
- public VCExpr Forall(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(infos != null);
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Requires(cce.NonNullElements(vars));
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Quantify(Quantifier.ALL, typeParams, vars, triggers, infos, body);
- }
- public VCExpr Forall(List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, string qid, int weight, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(qid != null);
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Requires(cce.NonNullElements(vars));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- QKeyValue kv = null;
- if (0 <= weight) {
- kv = new QKeyValue(Token.NoToken, "weight", new List<object>() { new LiteralExpr(Token.NoToken, BigNum.FromInt(0)) }, null);
- }
- return Quantify(Quantifier.ALL, new List<TypeVariable/*!*/>(), vars,
- triggers, new VCQuantifierInfos(qid, -1, false, kv), body);
- }
- public VCExpr Forall(List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Requires(cce.NonNullElements(vars));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Quantify(Quantifier.ALL, new List<TypeVariable/*!*/>(), vars,
- triggers, new VCQuantifierInfos(null, -1, false, null), body);
- }
- public VCExpr Forall(VCExprVar var, VCTrigger trigger, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(trigger != null);
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Forall(HelperFuns.ToNonNullList(var), HelperFuns.ToNonNullList(trigger), body);
- }
- public VCExpr Exists(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(infos != null);
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Requires(cce.NonNullElements(vars));
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Quantify(Quantifier.EX, typeParams, vars, triggers, infos, body);
- }
- public VCExpr Exists(List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Requires(cce.NonNullElements(vars));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Quantify(Quantifier.EX, new List<TypeVariable/*!*/>(), vars,
- triggers, new VCQuantifierInfos(null, -1, false, null), body);
- }
- public VCExpr Exists(VCExprVar var, VCTrigger trigger, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(trigger != null);
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return Exists(HelperFuns.ToNonNullList(var), HelperFuns.ToNonNullList(trigger), body);
- }
-
- public VCTrigger Trigger(bool pos, List<VCExpr> exprs) {
- Contract.Requires(cce.NonNullElements(exprs));
- Contract.Ensures(Contract.Result<VCTrigger>() != null);
- return new VCTrigger(pos, exprs);
- }
-
- public VCTrigger Trigger(bool pos, params VCExpr[] exprs) {
- Contract.Requires(exprs != null);
- Contract.Requires((Contract.ForAll(0, exprs.Length, i => exprs[i] != null)));
- Contract.Ensures(Contract.Result<VCTrigger>() != null);
- return Trigger(pos, HelperFuns.ToNonNullList(exprs));
- }
-
- // Reference to a bound or free variable
-
- public VCExprVar Variable(string name, Type type) {
- Contract.Requires(type != null);
- Contract.Requires(name != null);
- Contract.Ensures(Contract.Result<VCExprVar>() != null);
- return new VCExprVar(name, type);
- }
- }
-}
-
-namespace Microsoft.Boogie.VCExprAST {
-
- public class HelperFuns {
- public static bool SameElements(IEnumerable a, IEnumerable b) {
- Contract.Requires(b != null);
- Contract.Requires(a != null);
- IEnumerator ia = a.GetEnumerator();
- IEnumerator ib = b.GetEnumerator();
- while (true) {
- if (ia.MoveNext()) {
- if (ib.MoveNext()) {
- if (!cce.NonNull(ia.Current).Equals(ib.Current))
- return false;
- } else {
- return false;
- }
- } else {
- return !ib.MoveNext();
- }
- }
- }
-
- public static int PolyHash(int init, int factor, IEnumerable a) {
- Contract.Requires(a != null);
- int res = init;
- foreach (object x in a)
- res = res * factor + (cce.NonNull(x)).GetHashCode();
- return res;
- }
-
- public static List<T> ToList<T>(IEnumerable<T> l) {
- Contract.Requires(l != null);
- Contract.Ensures(Contract.Result<List<T>>() != null);
- List<T>/*!*/ res = new List<T>();
- foreach (T x in l)
- res.Add(x);
- return res;
- }
-
- public static List<Type> ToTypeSeq(VCExpr[] exprs, int startIndex) {
- Contract.Requires(exprs != null);
- Contract.Requires((Contract.ForAll(0, exprs.Length, i => exprs[i] != null)));
- Contract.Ensures(Contract.Result<List<Type>>() != null);
- List<Type>/*!*/ res = new List<Type>();
- for (int i = startIndex; i < exprs.Length; ++i)
- res.Add(cce.NonNull(exprs[i]).Type);
- return res;
- }
-
- public static List<T/*!*/>/*!*/ ToNonNullList<T>(params T[] args) where T : class {
- Contract.Requires(args != null);
- List<T/*!*/>/*!*/ res = new List<T>(args.Length);
- foreach (T t in args)
- res.Add(cce.NonNull(t));
- return res;
- }
-
- public static IDictionary<A, B> Clone<A, B>(IDictionary<A, B> dict) {
- Contract.Requires(dict != null);
- Contract.Ensures(Contract.Result<IDictionary<A, B>>() != null);
- IDictionary<A, B> res = new Dictionary<A, B>(dict.Count);
- foreach (KeyValuePair<A, B> pair in dict)
- res.Add(pair);
- return res;
- }
- }
-
- [ContractClassFor(typeof(VCExpr))]
- public abstract class VCExprContracts : VCExpr {
- public override Type Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- throw new NotImplementedException();
- }
-
- }
- public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
- Contract.Requires(visitor != null);
- throw new NotImplementedException();
- }
- }
-
- [ContractClass(typeof(VCExprContracts))]
- public abstract class VCExpr {
- public abstract Type Type {
- get;
- }
-
- public abstract Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg);
-
- [Pure]
- public override string ToString() {
- Contract.Ensures(Contract.Result<string>() != null);
- StringWriter sw = new StringWriter();
- VCExprPrinter printer = new VCExprPrinter();
- printer.Print(this, sw);
- return cce.NonNull(sw.ToString());
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // Literal expressions
-
- public class VCExprLiteral : VCExpr {
- private readonly Type LitType;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(LitType != null);
- }
-
- public override Type Type {
- get {
- return LitType;
- }
- }
- internal VCExprLiteral(Type type) {
- Contract.Requires(type != null);
- this.LitType = type;
- }
- public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this, arg);
- }
- }
-
- public class VCExprIntLit : VCExprLiteral {
- public readonly BigNum Val;
- internal VCExprIntLit(BigNum val)
- : base(Type.Int) {
- this.Val = val;
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprIntLit)
- return Val == ((VCExprIntLit)that).Val;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Val.GetHashCode() * 72321;
- }
- }
-
- public class VCExprRealLit : VCExprLiteral {
- public readonly BigDec Val;
- internal VCExprRealLit(BigDec val)
- : base(Type.Real) {
- this.Val = val;
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprRealLit)
- return Val == ((VCExprRealLit)that).Val;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Val.GetHashCode() * 72321;
- }
- }
-
- public class VCExprFloatLit : VCExprLiteral
- {
- public readonly BigFloat Val;
- internal VCExprFloatLit(BigFloat val)
- : base(Type.GetFloatType(val.ExponentSize, val.SignificandSize))
- {
- this.Val = val;
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that)
- {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprFloatLit)
- return Val == ((VCExprFloatLit)that).Val;
- return false;
- }
- [Pure]
- public override int GetHashCode()
- {
- return Val.GetHashCode() * 72321;
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // Operator expressions with fixed arity
- [ContractClassFor(typeof(VCExprNAry))]
- public abstract class VCExprNAryContracts : VCExprNAry {
- public VCExprNAryContracts()
- : base(null) {
- }
- public override VCExpr this[int index] {
- get {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- throw new NotImplementedException();
- }
- }
- }
-
- [ContractClass(typeof(VCExprNAryContracts))]
- public abstract class VCExprNAry : VCExpr, IEnumerable<VCExpr/*!*/> {
- public readonly VCExprOp Op;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Op != null);
- Contract.Invariant(cce.NonNullElements(EMPTY_TYPE_LIST));
- Contract.Invariant(cce.NonNullElements(EMPTY_VCEXPR_LIST));
- }
-
- public int Arity {
- get {
- return Op.Arity;
- }
- }
- public int TypeParamArity {
- get {
- return Op.TypeParamArity;
- }
- }
- public int Length {
- get {
- return Arity;
- }
- }
- // the sub-expressions of the expression
- public abstract VCExpr/*!*/ this[int index] {
- get;
- }
-
- // the type arguments
- public abstract List<Type/*!*/>/*!*/ TypeArguments {
- get;
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- public IEnumerator<VCExpr/*!*/>/*!*/ GetEnumerator() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerator<VCExpr>>()));
- for (int i = 0; i < Arity; ++i)
- yield return this[i];
- }
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- IEnumerator System.Collections.IEnumerable.GetEnumerator() {
- Contract.Ensures(Contract.Result<IEnumerator>() != null);
- for (int i = 0; i < Arity; ++i)
- yield return this[i];
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprNAry) {
- // we compare the subterms iteratively (not recursively)
- // to avoid stack overflows
-
- VCExprNAryEnumerator enum0 = new VCExprNAryEnumerator(this);
- VCExprNAryEnumerator enum1 = new VCExprNAryEnumerator((VCExprNAry)that);
-
- while (true) {
- bool next0 = enum0.MoveNext();
- bool next1 = enum1.MoveNext();
- if (next0 != next1)
- return false;
- if (!next0)
- return true;
-
- VCExprNAry nextExprNAry0 = enum0.Current as VCExprNAry;
- VCExprNAry nextExprNAry1 = enum1.Current as VCExprNAry;
-
- if ((nextExprNAry0 == null) != (nextExprNAry1 == null))
- return false;
- if (nextExprNAry0 != null && nextExprNAry1 != null) {
- if (!nextExprNAry0.Op.Equals(nextExprNAry1.Op))
- return false;
- } else {
- if (!cce.NonNull(enum0.Current).Equals(enum1.Current))
- return false;
- }
- }
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return HelperFuns.PolyHash(Op.GetHashCode() * 123 + Arity * 61521,
- 3, this);
- }
-
- internal VCExprNAry(VCExprOp op) {
- Contract.Requires(op != null);
- this.Op = op;
- }
- public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this, arg);
- }
- public Result Accept<Result, Arg>(IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- Contract.Requires(visitor != null);
- return Op.Accept(this, visitor, arg);
- }
-
- internal static readonly List<Type/*!*/>/*!*/ EMPTY_TYPE_LIST = new List<Type/*!*/>();
- internal static readonly List<VCExpr/*!*/>/*!*/ EMPTY_VCEXPR_LIST = new List<VCExpr/*!*/>();
-
- public IEnumerable<VCExpr> UniformArguments
- {
- get
- {
- var enumerator = new VCExprNAryUniformOpEnumerator(this);
- while (enumerator.MoveNext()) {
- VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
- if (naryExpr == null || !naryExpr.Op.Equals(this.Op)) {
- yield return (VCExpr)enumerator.Current;
- }
- }
- }
- }
- }
-
- // We give specialised implementations for nullary, unary and binary expressions
-
- internal class VCExprNullary : VCExprNAry {
- private readonly Type ExprType;
- [ContractInvariantMethod]
- void loneinvariant() {
- Contract.Invariant(ExprType != null);
- }
-
- public override Type Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- return ExprType;
- }
- }
- public override VCExpr this[int index] {
- get {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- Contract.Assert(false);
- throw new cce.UnreachableException(); // no arguments
- }
- }
-
- // the type arguments
- public override List<Type/*!*/>/*!*/ TypeArguments {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
- return EMPTY_TYPE_LIST;
- }
- }
-
- internal VCExprNullary(VCExprOp op)
- : base(op) {
- Contract.Requires(op != null);
- Contract.Requires(op.Arity == 0 && op.TypeParamArity == 0);
- this.ExprType = op.InferType(EMPTY_VCEXPR_LIST, EMPTY_TYPE_LIST);
- }
- }
-
- internal class VCExprUnary : VCExprNAry {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Argument != null);
- Contract.Invariant(ExprType != null);
-
- }
-
- private readonly VCExpr/*!*/ Argument;
- private readonly Type/*!*/ ExprType;
- public override Type/*!*/ Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- return ExprType;
- }
- }
- public override VCExpr/*!*/ this[int index] {
- get {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- Contract.Assume(index == 0);
- return Argument;
- }
- }
-
- // the type arguments
- public override List<Type/*!*/>/*!*/ TypeArguments {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
- return EMPTY_TYPE_LIST;
- }
- }
-
- internal VCExprUnary(VCExprOp op, List<VCExpr> arguments)
- : base(op) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Requires(op.Arity == 1 && op.TypeParamArity == 0 && arguments.Count == 1);
-
- this.Argument = arguments[0];
- this.ExprType =
- op.InferType(arguments, EMPTY_TYPE_LIST);
- }
-
- internal VCExprUnary(VCExprOp op, VCExpr argument)
- : base(op) {
- Contract.Requires(argument != null);
- Contract.Requires(op != null);
- Contract.Requires(op.Arity == 1 && op.TypeParamArity == 0);
-
- this.Argument = argument;
- // PR: could be optimised so that the argument does
- // not have to be boxed in an array each time
- this.ExprType =
- op.InferType(HelperFuns.ToNonNullList(argument), EMPTY_TYPE_LIST);
- }
- }
-
- internal class VCExprBinary : VCExprNAry {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Argument0 != null);
- Contract.Invariant(Argument1 != null);
- Contract.Invariant(ExprType != null);
- }
-
- private readonly VCExpr Argument0;
- private readonly VCExpr Argument1;
- private readonly Type ExprType;
- public override Type Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- return ExprType;
- }
- }
- public override VCExpr this[int index] {
- get {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- switch (index) {
- case 0:
- return Argument0;
- case 1:
- return Argument1;
- default: {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
- }
- }
-
- // the type arguments
- public override List<Type/*!*/>/*!*/ TypeArguments {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
- return EMPTY_TYPE_LIST;
- }
- }
-
- internal VCExprBinary(VCExprOp op, List<VCExpr> arguments)
- : base(op) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Requires(op.Arity == 2 && op.TypeParamArity == 0 && arguments.Count == 2);
-
- this.Argument0 = arguments[0];
- this.Argument1 = arguments[1];
- this.ExprType = op.InferType(arguments, EMPTY_TYPE_LIST);
- }
-
- internal VCExprBinary(VCExprOp op, VCExpr argument0, VCExpr argument1)
- : base(op) {
- Contract.Requires(argument1 != null);
- Contract.Requires(argument0 != null);
- Contract.Requires(op != null);
- Contract.Requires(op.Arity == 2 && op.TypeParamArity == 0);
- this.Argument0 = argument0;
- this.Argument1 = argument1;
- // PR: could be optimised so that the arguments do
- // not have to be boxed in an array each time
- this.ExprType =
- op.InferType(HelperFuns.ToNonNullList(argument0, argument1),
- EMPTY_TYPE_LIST);
- }
- }
-
- internal class VCExprMultiAry : VCExprNAry {
- private readonly List<VCExpr/*!*/>/*!*/ Arguments;
- private readonly List<Type/*!*/>/*!*/ TypeArgumentsAttr;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(Arguments));
- Contract.Invariant(cce.NonNullElements(TypeArgumentsAttr));
- Contract.Invariant(ExprType != null);
- }
-
-
- private readonly Type/*!*/ ExprType;
- public override Type/*!*/ Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- return ExprType;
- }
- }
- public override VCExpr/*!*/ this[int index] {
- get {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- Contract.Assume(index >= 0 && index < Arity);
- return cce.NonNull(Arguments)[index];
- }
- }
-
- // the type arguments
- public override List<Type/*!*/>/*!*/ TypeArguments {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
- return TypeArgumentsAttr;
- }
- }
-
- internal VCExprMultiAry(VCExprOp op, List<VCExpr> arguments)
- : base(op) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(arguments));
- this.Arguments = arguments;
- this.TypeArgumentsAttr = EMPTY_TYPE_LIST;
- this.ExprType = op.InferType(arguments, TypeArgumentsAttr);
- }
- internal VCExprMultiAry(VCExprOp op, List<VCExpr> arguments, List<Type/*!*/>/*!*/ typeArguments)
- : base(op) {
- Contract.Requires(op != null);
- Contract.Requires(cce.NonNullElements(typeArguments));
- Contract.Requires(cce.NonNullElements(arguments));
- Contract.Requires(arguments.Count > 2 || typeArguments.Count > 0);
- Contract.Requires(op.Arity == arguments.Count);
- Contract.Requires(op.TypeParamArity == typeArguments.Count);
- this.Arguments = arguments;
- this.TypeArgumentsAttr = typeArguments;
- this.ExprType = op.InferType(arguments, typeArguments);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // The various operators available
- [ContractClass(typeof(VCExprOpContracts))]
- public abstract class VCExprOp {
- // the number of value parameters
- public abstract int Arity {
- get;
- }
- // the number of type parameters
- public abstract int TypeParamArity {
- get;
- }
-
- public abstract Type/*!*/ InferType(List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs);
-
- public virtual Result Accept<Result, Arg>(VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- Contract.Requires(visitor != null);
- Contract.Requires(expr != null);
- VCExpressionGenerator.SingletonOp op;
- if (VCExpressionGenerator.SingletonOpDict.TryGetValue(this, out op)) {
- switch (op) {
- case VCExpressionGenerator.SingletonOp.NotOp:
- return visitor.VisitNotOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.EqOp:
- return visitor.VisitEqOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.NeqOp:
- return visitor.VisitNeqOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.AndOp:
- return visitor.VisitAndOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.OrOp:
- return visitor.VisitOrOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.ImpliesOp:
- return visitor.VisitImpliesOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.AddOp:
- return visitor.VisitAddOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.SubOp:
- return visitor.VisitSubOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.MulOp:
- return visitor.VisitMulOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.DivOp:
- return visitor.VisitDivOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.ModOp:
- return visitor.VisitModOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.RealDivOp:
- return visitor.VisitRealDivOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.PowOp:
- return visitor.VisitPowOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.LtOp:
- return visitor.VisitLtOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.LeOp:
- return visitor.VisitLeOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.GtOp:
- return visitor.VisitGtOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.GeOp:
- return visitor.VisitGeOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.SubtypeOp:
- return visitor.VisitSubtypeOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.Subtype3Op:
- return visitor.VisitSubtype3Op(expr, arg);
- case VCExpressionGenerator.SingletonOp.BvConcatOp:
- return visitor.VisitBvConcatOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.ToIntOp:
- return visitor.VisitToIntOp(expr, arg);
- case VCExpressionGenerator.SingletonOp.ToRealOp:
- return visitor.VisitToRealOp(expr, arg);
- default:
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- } else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
- }
- [ContractClassFor(typeof(VCExprOp))]
- abstract class VCExprOpContracts : VCExprOp {
- public override Type InferType(List<VCExpr> args, List<Type> typeArgs) {
- Contract.Requires(cce.NonNullElements(args));
- Contract.Requires(cce.NonNullElements(typeArgs));
- Contract.Ensures(Contract.Result<Type>() != null);
-
- throw new NotImplementedException();
- }
- }
-
- public class VCExprNAryOp : VCExprOp {
- private readonly Type OpType;
- private readonly int OpArity;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(OpType != null);
- }
-
- public override int Arity {
- get {
- return OpArity;
- }
- }
- public override int TypeParamArity {
- get {
- return 0;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return OpType;
- }
-
- internal VCExprNAryOp(int arity, Type type) {
- Contract.Requires(type != null);
- this.OpArity = arity;
- this.OpType = type;
- }
- }
-
- public class VCExprDistinctOp : VCExprNAryOp {
- internal VCExprDistinctOp(int arity)
- : base(arity, Type.Bool) {
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprDistinctOp)
- return Arity == ((VCExprDistinctOp)that).Arity;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Arity * 917632481;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitDistinctOp(expr, arg);
- }
- }
-
- public class VCExprLabelOp : VCExprOp {
- public override int Arity {
- get {
- return 1;
- }
- }
- public override int TypeParamArity {
- get {
- return 0;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return args[0].Type;
- }
-
- public readonly bool pos;
- public readonly string label;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(label != null);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprLabelOp) {
- VCExprLabelOp/*!*/ thatOp = (VCExprLabelOp)that;
- return this.pos == thatOp.pos && this.label.Equals(thatOp.label);
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return (pos ? 9817231 : 7198639) + label.GetHashCode();
- }
-
- internal VCExprLabelOp(bool pos, string l) {
- Contract.Requires(l != null);
- this.pos = pos;
- this.label = pos ? "+" + l : "@" + l;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitLabelOp(expr, arg);
- }
- }
-
- public class VCExprSelectOp : VCExprOp {
- private readonly int MapArity;
- private readonly int MapTypeParamArity;
- public override int Arity {
- get {
- return MapArity + 1;
- }
- }
- public override int TypeParamArity {
- get {
- return MapTypeParamArity;
- }
- }
-
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- MapType/*!*/ mapType = args[0].Type.AsMap;
- Contract.Assert(TypeParamArity == mapType.TypeParameters.Count);
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- for (int i = 0; i < TypeParamArity; ++i)
- subst.Add(mapType.TypeParameters[i], typeArgs[i]);
- return mapType.Result.Substitute(subst);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprSelectOp)
- return Arity == ((VCExprSelectOp)that).Arity &&
- TypeParamArity == ((VCExprSelectOp)that).TypeParamArity;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Arity * 1212481 + TypeParamArity * 298741;
- }
-
- internal VCExprSelectOp(int arity, int typeParamArity) {
- Contract.Requires(0 <= arity && 0 <= typeParamArity);
- this.MapArity = arity;
- this.MapTypeParamArity = typeParamArity;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitSelectOp(expr, arg);
- }
- }
-
- public class VCExprStoreOp : VCExprOp {
- private readonly int MapArity;
- private readonly int MapTypeParamArity;
- public override int Arity {
- get {
- return MapArity + 2;
- }
- }
- // stores never need explicit type parameters, because also the
- // rhs is a value argument
- public override int TypeParamArity {
- get {
- return MapTypeParamArity;
- }
- }
-
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return args[0].Type;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprStoreOp)
- return Arity == ((VCExprStoreOp)that).Arity;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Arity * 91361821;
- }
-
- internal VCExprStoreOp(int arity, int typeParamArity) {
- Contract.Requires(0 <= arity && 0 <= typeParamArity);
- this.MapArity = arity;
- this.MapTypeParamArity = typeParamArity;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitStoreOp(expr, arg);
- }
- }
-
- public class VCExprIfThenElseOp : VCExprOp {
- public override int Arity {
- get {
- return 3;
- }
- }
- public override int TypeParamArity {
- get {
- return 0;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return args[1].Type;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprIfThenElseOp)
- return true;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return 1;
- }
-
- internal VCExprIfThenElseOp() {
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitIfThenElseOp(expr, arg);
- }
- }
-
- public class VCExprCustomOp : VCExprOp {
- public readonly string/*!*/ Name;
- int arity;
- public readonly Type/*!*/ Type;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Name != null);
- Contract.Invariant(Type != null);
- }
-
- public VCExprCustomOp(string/*!*/ name, int arity, Type/*!*/ type) {
- Contract.Requires(name != null);
- Contract.Requires(type != null);
- this.Name = name;
- this.arity = arity;
- this.Type = type;
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- VCExprCustomOp t = that as VCExprCustomOp;
- if (t == null)
- return false;
- return this.Name == t.Name && this.arity == t.arity && this.Type == t.Type;
- }
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override int GetHashCode() {
- int h = Name.GetHashCode();
- h = 7823 * h + arity;
- h = 7823 * h + Type.GetHashCode();
- return h;
- }
- public override int Arity {
- get {
- return arity;
- }
- }
- public override int TypeParamArity {
- get {
- return 0;
- }
- }
- public override Type/*!*/ InferType(List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires((cce.NonNullElements(args)));
- //Contract.Requires((cce.NonNullElements(typeArgs)));
- Contract.Ensures(Contract.Result<Type>() != null);
- return Type;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry/*!*/ expr, IVCExprOpVisitor<Result, Arg>/*!*/ visitor, Arg arg) {
- //Contract.Requires(expr != null);
- //Contract.Requires(visitor != null);
- return visitor.VisitCustomOp(expr, arg);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // Float operators
-
- public class VCExprBinaryFloatOp : VCExprOp {
- public readonly int Mantissa;
- public readonly int Exponent;
- private string op;
-
- public override int Arity {
- get {
- return 2;
- }
- }
- public override int TypeParamArity {
- get {
- return 2;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return Type.GetFloatType(Exponent, Mantissa);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprBinaryFloatOp)
- return this.Exponent == ((VCExprBinaryFloatOp)that).Exponent && this.Mantissa == ((VCExprBinaryFloatOp)that).Mantissa;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Exponent * 81748912 + Mantissa * 67867979;
- }
-
- internal VCExprBinaryFloatOp(int exp, int man, string op) {
- this.Exponent = exp;
- this.Mantissa = man;
- this.op = op;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- switch (op) {
- case ("+"):
- return visitor.VisitFloatAddOp(expr, arg);
- case ("-"):
- return visitor.VisitFloatSubOp(expr, arg);
- case ("*"):
- return visitor.VisitFloatMulOp(expr, arg);
- case ("/"):
- return visitor.VisitFloatDivOp(expr, arg);
- case ("rem"):
- return visitor.VisitFloatRemOp(expr, arg);
- case ("min"):
- return visitor.VisitFloatMinOp(expr, arg);
- case ("max"):
- return visitor.VisitFloatMaxOp(expr, arg);
- case ("<="):
- return visitor.VisitFloatLeqOp(expr, arg);
- case ("<"):
- return visitor.VisitFloatLtOp(expr, arg);
- case (">="):
- return visitor.VisitFloatGeqOp(expr, arg);
- case (">"):
- return visitor.VisitFloatGtOp(expr, arg);
- case ("=="):
- return visitor.VisitFloatEqOp(expr, arg);
- default:
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // Bitvector operators
-
- public class VCExprBvOp : VCExprOp {
- public readonly int Bits;
-
- public override int Arity {
- get {
- return 1;
- }
- }
- public override int TypeParamArity {
- get {
- return 0;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return Type.GetBvType(Bits);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprBvOp)
- return this.Bits == ((VCExprBvOp)that).Bits;
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Bits * 81748912;
- }
-
- internal VCExprBvOp(int bits) {
- this.Bits = bits;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitBvOp(expr, arg);
- }
- }
-
- public class VCExprBvExtractOp : VCExprOp {
- public readonly int Start;
- public readonly int End;
- public readonly int Total; // the number of bits from which the End-Start bits are extracted
-
- public override int Arity {
- get {
- return 1;
- }
- }
- public override int TypeParamArity {
- get {
- return 0;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return Type.GetBvType(End - Start);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprBvExtractOp) {
- VCExprBvExtractOp/*!*/ thatExtract = (VCExprBvExtractOp)that;
- return this.Start == thatExtract.Start && this.End == thatExtract.End && this.Total == thatExtract.Total;
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Start * 81912 + End * 978132 + Total * 571289;
- }
-
- internal VCExprBvExtractOp(int start, int end, int total) {
- Contract.Requires(0 <= start && start <= end && end <= total);
- this.Start = start;
- this.End = end;
- this.Total = total;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitBvExtractOp(expr, arg);
- }
- }
-
- public class VCExprBvConcatOp : VCExprOp {
- public readonly int LeftSize;
- public readonly int RightSize;
-
- public override int Arity {
- get {
- return 2;
- }
- }
- public override int TypeParamArity {
- get {
- return 0;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- return Type.GetBvType(args[0].Type.BvBits + args[1].Type.BvBits);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprBvConcatOp) {
- VCExprBvConcatOp thatConcat = (VCExprBvConcatOp)that;
- return this.LeftSize == thatConcat.LeftSize && this.RightSize == thatConcat.RightSize;
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return LeftSize * 81912 + RightSize * 978132;
- }
-
- internal VCExprBvConcatOp(int leftSize, int rightSize) {
- Contract.Requires(0 <= leftSize && 0 <= rightSize);
- this.LeftSize = leftSize;
- this.RightSize = rightSize;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitBvConcatOp(expr, arg);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // References to user-defined Boogie functions
-
- public class VCExprBoogieFunctionOp : VCExprOp {
- public readonly Function Func;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Func != null);
- }
-
-
- public override int Arity {
- get {
- return Func.InParams.Count;
- }
- }
- public override int TypeParamArity {
- get {
- return Func.TypeParameters.Count;
- }
- }
- public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
- //Contract.Requires(cce.NonNullElements(typeArgs));
- //Contract.Requires(cce.NonNullElements(args));
- Contract.Ensures(Contract.Result<Type>() != null);
- Contract.Assert(TypeParamArity == Func.TypeParameters.Count);
- if (TypeParamArity == 0)
- return cce.NonNull(Func.OutParams[0]).TypedIdent.Type;
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>(TypeParamArity);
- for (int i = 0; i < TypeParamArity; ++i)
- subst.Add(Func.TypeParameters[i], typeArgs[i]);
- return cce.NonNull(Func.OutParams[0]).TypedIdent.Type.Substitute(subst);
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprBoogieFunctionOp)
- return this.Func.Equals(((VCExprBoogieFunctionOp)that).Func);
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Func.GetHashCode() + 18731;
- }
-
- // we require that the result type of the expression is specified, because we
- // do not want to perform full type inference at this point
- internal VCExprBoogieFunctionOp(Function func) {
- Contract.Requires(func != null);
- this.Func = func;
- }
- public override Result Accept<Result, Arg>
- (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- //Contract.Requires(expr != null);
- return visitor.VisitBoogieFunctionOp(expr, arg);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // Binders (quantifiers and let-expressions). We introduce our own class for
- // term variables, but use the Boogie-AST class for type variables
-
- public class VCExprVar : VCExpr {
- // the name of the variable. Note that the name is not used for comparison,
- // i.e., there can be two distinct variables with the same name
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Name != null);
- Contract.Invariant(VarType != null);
- }
-
- public readonly string/*!*/ Name;
- private readonly Type/*!*/ VarType;
- public override Type/*!*/ Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
- return VarType;
- }
- }
-
- internal VCExprVar(string name, Type type) {
- Contract.Requires(type != null);
- Contract.Requires(name != null);
- this.Name = name;
- this.VarType = type;
- }
- public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this, arg);
- }
- }
-
- public class VCExprConstant : VCExprVar
- {
- internal VCExprConstant(string name, Type type) : base(name,type) {
- Contract.Requires(type != null);
- Contract.Requires(name != null);
- }
- }
-
- public abstract class VCExprBinder : VCExpr {
- public readonly VCExpr/*!*/ Body;
- public readonly List<TypeVariable/*!*/>/*!*/ TypeParameters;
- public readonly List<VCExprVar/*!*/>/*!*/ BoundVars;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Body != null);
- Contract.Invariant(cce.NonNullElements(TypeParameters));
- Contract.Invariant(cce.NonNullElements(BoundVars));
- }
-
-
- public override Type/*!*/ Type {
- get {
- Contract.Ensures(Contract.Result<Type>() != null);
-
- return Body.Type;
- }
- }
-
- internal VCExprBinder(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ boundVars, VCExpr body) {
- Contract.Requires(body != null);
- Contract.Requires(cce.NonNullElements(boundVars));
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Requires(boundVars.Count + typeParams.Count > 0); // only nontrivial binders ...
- this.TypeParameters = typeParams;
- this.BoundVars = boundVars;
- this.Body = body;
- }
- }
-
- public class VCTrigger {
- public readonly bool Pos;
- public readonly List<VCExpr/*!*/>/*!*/ Exprs;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Exprs != null);
- }
-
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCTrigger) {
- VCTrigger/*!*/ thatTrigger = (VCTrigger)that;
- return this.Pos == thatTrigger.Pos &&
- HelperFuns.SameElements(this.Exprs, thatTrigger.Exprs);
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return (Pos ? 913821 : 871334) +
- HelperFuns.PolyHash(123, 7, this.Exprs);
- }
-
- public VCTrigger(bool pos, List<VCExpr> exprs) {
- Contract.Requires(cce.NonNullElements(exprs));
- this.Pos = pos;
- this.Exprs = exprs;
- }
- }
-
- public class VCQuantifierInfos {
- public readonly string qid;
- public readonly int uniqueId;
- public readonly bool bvZ3Native;
- public QKeyValue attributes;
-
- public VCQuantifierInfos(string qid, int uniqueId, bool bvZ3Native, QKeyValue attributes) {
- this.qid = qid;
- this.uniqueId = uniqueId;
- this.bvZ3Native = bvZ3Native;
- this.attributes = attributes;
- }
- }
-
- public enum Quantifier {
- ALL,
- EX
- };
-
- public class VCExprQuantifier : VCExprBinder {
- public readonly Quantifier Quan;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Infos != null);
- Contract.Invariant(cce.NonNullElements(Triggers));
- }
-
-
- public readonly List<VCTrigger/*!*/>/*!*/ Triggers;
- public readonly VCQuantifierInfos Infos;
-
- // Equality is /not/ modulo bound renaming at this point
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprQuantifier) {
- VCExprQuantifier/*!*/ thatQuan = (VCExprQuantifier)that;
- return this.Quan == thatQuan.Quan &&
- HelperFuns.SameElements(this.Triggers, thatQuan.Triggers) &&
- HelperFuns.SameElements(this.TypeParameters, thatQuan.TypeParameters) &&
- HelperFuns.SameElements(this.BoundVars, thatQuan.BoundVars) &&
- this.Body.Equals(thatQuan.Body);
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return Quan.GetHashCode() +
- HelperFuns.PolyHash(973219, 7, TypeParameters) +
- HelperFuns.PolyHash(998431, 9, BoundVars) +
- HelperFuns.PolyHash(123, 11, Triggers);
- }
-
- internal VCExprQuantifier(Quantifier kind, List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ boundVars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body)
- : base(typeParams, boundVars, body) {
- Contract.Requires(body != null);
- Contract.Requires(infos != null);
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Requires(cce.NonNullElements(boundVars));
- Contract.Requires(cce.NonNullElements(typeParams));
-
- this.Quan = kind;
- this.Triggers = triggers;
- this.Infos = infos;
- }
- public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this, arg);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // Let-Bindings
-
- public class VCExprLetBinding {
- public readonly VCExprVar V;
- public readonly VCExpr E;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(V != null);
- Contract.Invariant(E != null);
- }
-
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprLetBinding) {
- VCExprLetBinding/*!*/ thatB = (VCExprLetBinding)that;
- return this.V.Equals(thatB.V) && this.E.Equals(thatB.E);
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return V.GetHashCode() * 71261 + E.GetHashCode();
- }
-
- internal VCExprLetBinding(VCExprVar v, VCExpr e) {
- Contract.Requires(e != null);
- Contract.Requires(v != null);
- this.V = v;
- this.E = e;
- Contract.Assert(v.Type.Equals(e.Type));
- }
- }
-
- public class VCExprLet : VCExprBinder, IEnumerable<VCExprLetBinding/*!*/> {
- private readonly List<VCExprLetBinding/*!*/>/*!*/ Bindings;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(Bindings));
-
- }
-
-
- public int Length {
- get {
- return Bindings.Count;
- }
- }
- public VCExprLetBinding this[int index] {
- get {
- Contract.Ensures(Contract.Result<VCExprLetBinding>() != null);
- return Bindings[index];
- }
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (Object.ReferenceEquals(this, that))
- return true;
- if (that is VCExprLet) {
- VCExprLet/*!*/ thatLet = (VCExprLet)that;
- return this.Body.Equals(thatLet.Body) &&
- HelperFuns.SameElements(this, (VCExprLet)that);
- }
- return false;
- }
- [Pure]
- public override int GetHashCode() {
- return HelperFuns.PolyHash(Body.GetHashCode(), 9, Bindings);
- }
-
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- public IEnumerator<VCExprLetBinding/*!*/>/*!*/ GetEnumerator() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerator<VCExprLetBinding>>()));
- return Bindings.GetEnumerator();
- }
- [Pure]
- [GlobalAccess(false)]
- [Escapes(true, false)]
- IEnumerator System.Collections.IEnumerable.GetEnumerator() {
- Contract.Ensures(Contract.Result<IEnumerator>() != null);
- return Bindings.GetEnumerator();
- }
-
- private static List<VCExprVar/*!*/>/*!*/ toSeq(List<VCExprLetBinding/*!*/>/*!*/ bindings) {
- Contract.Requires(cce.NonNullElements(bindings));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
- List<VCExprVar> res = new List<VCExprVar>();
- foreach (VCExprLetBinding/*!*/ b in bindings)
- res.Add(b.V);
- return res;
- }
-
- internal VCExprLet(List<VCExprLetBinding/*!*/>/*!*/ bindings, VCExpr/*!*/ body)
- : base(new List<TypeVariable/*!*/>(), toSeq(bindings), body) {
- Contract.Requires(cce.NonNullElements(bindings));
- Contract.Requires(body != null);
- this.Bindings = bindings;
- }
- public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
- //Contract.Requires(visitor != null);
- return visitor.Visit(this, arg);
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+// Prover-independent syntax trees for representing verification conditions
+// The language can be seen as a simple polymorphically typed first-order logic,
+// very similar to the expression language of Boogie
+
+namespace Microsoft.Boogie {
+ using Microsoft.Boogie.VCExprAST;
+
+ public class VCExpressionGenerator {
+ public static readonly VCExpr False = new VCExprLiteral(Type.Bool);
+ public static readonly VCExpr True = new VCExprLiteral(Type.Bool);
+
+ private Function ControlFlowFunction = null;
+ public VCExpr ControlFlowFunctionApplication(VCExpr e1, VCExpr e2) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e2 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ if (ControlFlowFunction == null) {
+ Formal/*!*/ first = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Int), true);
+ Formal/*!*/ second = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Int), true);
+ List<Variable> inputs = new List<Variable>();
+ inputs.Add(first);
+ inputs.Add(second);
+ Formal/*!*/ returnVar = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Int), false);
+ ControlFlowFunction = new Function(Token.NoToken, "ControlFlow", inputs, returnVar);
+ }
+ List<VCExpr/*!*/> args = new List<VCExpr/*!*/>();
+ args.Add(e1);
+ args.Add(e2);
+ return Function(BoogieFunctionOp(ControlFlowFunction), args);
+ }
+
+ public VCExpr/*!*/ Integer(BigNum x) {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return new VCExprIntLit(x);
+ }
+
+ public VCExpr/*!*/ Real(BigDec x) {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return new VCExprRealLit(x);
+ }
+
+ public VCExpr/*!*/ Float(BigFloat x)
+ {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return new VCExprFloatLit(x);
+ }
+
+ public VCExpr/*!*/ Function(VCExprOp/*!*/ op,
+ List<VCExpr/*!*/>/*!*/ arguments,
+ List<Type/*!*/>/*!*/ typeArguments) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Requires(cce.NonNullElements(typeArguments));
+ if (typeArguments.Count > 0)
+ return new VCExprMultiAry(op, arguments, typeArguments);
+
+ switch (arguments.Count) {
+ case 0:
+ return new VCExprNullary(op);
+ case 1:
+ return new VCExprUnary(op, arguments);
+ case 2:
+ return new VCExprBinary(op, arguments);
+ default:
+ return new VCExprMultiAry(op, arguments);
+ }
+ }
+
+ public VCExpr/*!*/ Function(VCExprOp/*!*/ op, List<VCExpr/*!*/>/*!*/ arguments) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return Function(op, arguments, VCExprNAry.EMPTY_TYPE_LIST);
+ }
+
+ public VCExpr/*!*/ Function(VCExprOp/*!*/ op, params VCExpr[]/*!*/ arguments) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+
+ return Function(op,
+ HelperFuns.ToNonNullList(arguments),
+ VCExprNAry.EMPTY_TYPE_LIST);
+ }
+
+ public VCExpr/*!*/ Function(VCExprOp/*!*/ op, VCExpr[]/*!*/ arguments, Type[]/*!*/ typeArguments) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Requires(cce.NonNullElements(typeArguments));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+
+ return Function(op,
+ HelperFuns.ToNonNullList(arguments),
+ HelperFuns.ToNonNullList(typeArguments));
+ }
+
+ public VCExpr/*!*/ Function(Function/*!*/ op, List<VCExpr/*!*/>/*!*/ arguments) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return Function(BoogieFunctionOp(op), arguments, VCExprNAry.EMPTY_TYPE_LIST);
+ }
+
+ public VCExpr/*!*/ Function(Function/*!*/ op, params VCExpr[]/*!*/ arguments) {
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Requires(op != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return Function(BoogieFunctionOp(op), arguments);
+ }
+
+
+ // The following method should really be called "ReduceLeft". It must
+ // only be used for the binary operators "and" and "or"
+ public VCExpr/*!*/ NAry(VCExprOp/*!*/ op, List<VCExpr/*!*/>/*!*/ args) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return NAry(op, args.ToArray());
+ }
+
+ public VCExpr/*!*/ NAry(VCExprOp/*!*/ op, params VCExpr[]/*!*/ args) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Requires(op == AndOp || op == OrOp);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ bool and = (op == AndOp);
+
+ VCExpr/*!*/ e = and ? True : False;
+ foreach (VCExpr a in args) {
+ e = and ? AndSimp(e, cce.NonNull(a)) : OrSimp(e, cce.NonNull(a));
+ }
+ return e;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ public static readonly VCExprOp NotOp = new VCExprNAryOp(1, Type.Bool);
+ public static readonly VCExprOp EqOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp NeqOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp AndOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp OrOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp ImpliesOp = new VCExprNAryOp(2, Type.Bool);
+
+ public VCExprDistinctOp DistinctOp(int arity) {
+ Contract.Ensures(Contract.Result<VCExprDistinctOp>() != null);
+
+ return new VCExprDistinctOp(arity);
+ }
+
+ public VCExpr/*!*/ Not(List<VCExpr/*!*/>/*!*/ args) {
+ Contract.Requires(args != null);
+ Contract.Requires(args.Count == 1);
+ Contract.Requires(args[0] != null);
+ return Function(NotOp, args);
+ }
+
+ public VCExpr/*!*/ Not(VCExpr/*!*/ e0) {
+ Contract.Requires(e0 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return Function(NotOp, e0);
+ }
+ public VCExpr/*!*/ Eq(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
+ return Function(EqOp, e0, e1);
+ }
+ public VCExpr/*!*/ Neq(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return Function(NeqOp, e0, e1);
+ }
+ public VCExpr/*!*/ And(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(AndOp, e0, e1);
+ }
+ public VCExpr/*!*/ Gt(VCExpr/*!*/ e0, VCExpr/*!*/ e1)
+ {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ return Function(GtOp, e0, e1);
+ }
+ public VCExpr/*!*/ Add(VCExpr/*!*/ e0, VCExpr/*!*/ e1)
+ {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExprOp op = cce.NonNull(cce.NonNull(e0).Type).IsInt ? AddIOp : AddROp;
+ return Function(op, e0, e1);
+ }
+ public VCExpr/*!*/ Or(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(OrOp, e0, e1);
+ }
+ public VCExpr/*!*/ Implies(VCExpr/*!*/ e0, VCExpr/*!*/ e1) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(ImpliesOp, e0, e1);
+ }
+ public VCExpr/*!*/ Distinct(List<VCExpr/*!*/>/*!*/ args) {
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ if (args.Count <= 1)
+ // trivial case
+ return True;
+ return Function(DistinctOp(args.Count), args);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Versions of the propositional operators that automatically simplify in
+ // certain cases (for example, if one of the operators is True or False)
+
+ public VCExpr NotSimp(VCExpr e0) {
+ Contract.Requires(e0 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (e0.Equals(True))
+ return False;
+ if (e0.Equals(False))
+ return True;
+ return Not(e0);
+ }
+ public VCExpr AndSimp(VCExpr e0, VCExpr e1) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e0 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (e0.Equals(True))
+ return e1;
+ if (e1.Equals(True))
+ return e0;
+ if (e0.Equals(False) || e1.Equals(False))
+ return False;
+ return And(e0, e1);
+ }
+ public VCExpr OrSimp(VCExpr e0, VCExpr e1) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e0 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (e0.Equals(False))
+ return e1;
+ if (e1.Equals(False))
+ return e0;
+ if (e0.Equals(True) || e1.Equals(True))
+ return True;
+ return Or(e0, e1);
+ }
+ public VCExpr ImpliesSimp(VCExpr e0, VCExpr e1, bool aggressive = true) {
+ Contract.Requires(e1 != null);
+ Contract.Requires(e0 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (e0.Equals(True))
+ return e1;
+ if (e1.Equals(False))
+ return NotSimp(e0);
+ if (e0.Equals(False) || e1.Equals(True))
+ return True;
+ // attempt to save on the depth of expressions (to reduce chances of stack overflows)
+ while (aggressive && e1 is VCExprBinary) {
+ VCExprBinary n = (VCExprBinary)e1;
+ if (n.Op == ImpliesOp) {
+ if (AndSize(n[0]) <= AndSize(e0)) {
+ // combine the antecedents
+ e0 = And(e0, n[0]);
+ e1 = n[1];
+ continue;
+ }
+ }
+ break;
+ }
+ return Implies(e0, e1);
+ }
+
+ ///<summary>
+ /// Returns some measure of the number of conjuncts in e. This could be the total number of conjuncts in all
+ /// top-most layers of the expression, or it can simply be the length of the left-prong of this and-tree. The
+ /// important thing is that: AndSize(e0) >= AndSize(31) ==> AndSize(And(e0,e1)) > AndSize(e0).
+ ///</summary>
+ int AndSize(VCExpr e) {
+ Contract.Requires(e != null);
+ int n = 1;
+ while (true) {
+ VCExprNAry nary = e as VCExprNAry;
+ if (nary != null && nary.Op == AndOp && 2 <= nary.Arity) {
+ e = nary[0];
+ n++;
+ } else {
+ return n;
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Further operators
+
+ public static readonly VCExprOp AddIOp = new VCExprNAryOp(2, Type.Int);
+ public static readonly VCExprOp AddROp = new VCExprNAryOp(2, Type.Real);
+ public static readonly VCExprOp SubIOp = new VCExprNAryOp(2, Type.Int);
+ public static readonly VCExprOp SubROp = new VCExprNAryOp(2, Type.Real);
+ // public static readonly VCExprOp SubFOp = new VCExprNAryOp(2, Type.Float);
+ public static readonly VCExprOp MulIOp = new VCExprNAryOp(2, Type.Int);
+ public static readonly VCExprOp MulROp = new VCExprNAryOp(2, Type.Real);
+ //public static readonly VCExprOp MulFOp = new VCExprNAryOp(2, Type.Float);
+ public static readonly VCExprOp DivIOp = new VCExprNAryOp(2, Type.Int);
+ public static readonly VCExprOp DivROp = new VCExprNAryOp(2, Type.Real);
+ //public static readonly VCExprOp DivFOp = new VCExprNAryOp(2, Type.Float);
+ public static readonly VCExprOp ModOp = new VCExprNAryOp(2, Type.Int);
+ public static readonly VCExprOp PowOp = new VCExprNAryOp(2, Type.Real);
+ public static readonly VCExprOp LtOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp LeOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp GtOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp GeOp = new VCExprNAryOp(2, Type.Bool);
+ public static readonly VCExprOp SubtypeOp = new VCExprNAryOp(2, Type.Bool);
+ // ternary version of the subtype operator, the first argument of which gives
+ // the type of the compared terms
+ public static readonly VCExprOp Subtype3Op = new VCExprNAryOp(3, Type.Bool);
+ public static readonly VCExprOp IfThenElseOp = new VCExprIfThenElseOp();
+ public static readonly VCExprOp ToIntOp = new VCExprNAryOp(1, Type.Int);
+ public static readonly VCExprOp ToRealOp = new VCExprNAryOp(1, Type.Real);
+ //public static readonly VCExprOp ToFloatOp = new VCExprNAryOp(1, Type.Float);
+
+ public static readonly VCExprOp TickleBoolOp = new VCExprCustomOp("tickleBool", 1, Type.Bool);
+
+ public static readonly VCExprOp TimeoutDiagnosticsOp = new VCExprCustomOp("timeoutDiagnostics", 1, Type.Bool);
+
+ public static readonly VCExprOp MinimizeOp = new VCExprCustomOp("minimize##dummy", 2, Type.Bool);
+ public static readonly VCExprOp MaximizeOp = new VCExprCustomOp("maximize##dummy", 2, Type.Bool);
+ public static readonly VCExprOp NamedAssumeOp = new VCExprCustomOp("named_assume##dummy", 2, Type.Bool);
+
+ public VCExprOp BoogieFunctionOp(Function func) {
+ Contract.Requires(func != null);
+ Contract.Ensures(Contract.Result<VCExprOp>() != null);
+ return new VCExprBoogieFunctionOp(func);
+ }
+
+ // Float nodes
+
+ public VCExprOp BinaryFloatOp(int exp, int man, string op)
+ {
+ Contract.Requires(exp > 0);
+ Contract.Requires(man > 0);
+ Contract.Requires(op != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return new VCExprBinaryFloatOp(exp, man, op);
+ }
+
+ // Bitvector nodes
+
+ public VCExpr Bitvector(BvConst bv) {
+ Contract.Requires(bv != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprBvOp(bv.Bits), Integer(bv.Value));
+ }
+
+ public VCExpr BvExtract(VCExpr bv, int bits, int start, int end) {
+ Contract.Requires(bv != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprBvExtractOp(start, end, bits), bv);
+ }
+
+ public VCExpr BvConcat(VCExpr bv1, VCExpr bv2) {
+ Contract.Requires(bv2 != null);
+ Contract.Requires(bv1 != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprBvConcatOp(bv1.Type.BvBits, bv2.Type.BvBits), bv1, bv2);
+ }
+
+ public VCExpr AtMost(VCExpr smaller, VCExpr greater) {
+ Contract.Requires(greater != null);
+ Contract.Requires(smaller != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(SubtypeOp, smaller, greater);
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Dispatcher for the visitor
+
+ // the declared singleton operators
+ internal enum SingletonOp {
+ NotOp,
+ EqOp,
+ NeqOp,
+ AndOp,
+ OrOp,
+ ImpliesOp,
+ AddOp,
+ SubOp,
+ MulOp,
+ DivOp,
+ ModOp,
+ RealDivOp,
+ PowOp,
+ LtOp,
+ LeOp,
+ GtOp,
+ GeOp,
+ SubtypeOp,
+ Subtype3Op,
+ BvConcatOp,
+ ToIntOp,
+ ToRealOp,
+ ToFloatOp
+ };
+ internal static Dictionary<VCExprOp/*!*/, SingletonOp>/*!*/ SingletonOpDict;
+ [ContractInvariantMethod]
+ void MiscInvariant() {
+ Contract.Invariant(SingletonOpDict != null);
+ }
+
+
+ static VCExpressionGenerator() {
+ SingletonOpDict = new Dictionary<VCExprOp/*!*/, SingletonOp>();
+ SingletonOpDict.Add(NotOp, SingletonOp.NotOp);
+ SingletonOpDict.Add(EqOp, SingletonOp.EqOp);
+ SingletonOpDict.Add(NeqOp, SingletonOp.NeqOp);
+ SingletonOpDict.Add(AndOp, SingletonOp.AndOp);
+ SingletonOpDict.Add(OrOp, SingletonOp.OrOp);
+ SingletonOpDict.Add(ImpliesOp, SingletonOp.ImpliesOp);
+ SingletonOpDict.Add(AddIOp, SingletonOp.AddOp);
+ SingletonOpDict.Add(AddROp, SingletonOp.AddOp);
+ SingletonOpDict.Add(SubIOp, SingletonOp.SubOp);
+ SingletonOpDict.Add(SubROp, SingletonOp.SubOp);
+ //SingletonOpDict.Add(SubFOp, SingletonOp.SubOp);
+ SingletonOpDict.Add(MulIOp, SingletonOp.MulOp);
+ SingletonOpDict.Add(MulROp, SingletonOp.MulOp);
+ //SingletonOpDict.Add(MulFOp, SingletonOp.MulOp);
+ SingletonOpDict.Add(DivIOp, SingletonOp.DivOp);
+ SingletonOpDict.Add(DivROp, SingletonOp.RealDivOp);
+ //SingletonOpDict.Add(DivFOp, SingletonOp.FloatDivOp);
+ SingletonOpDict.Add(ModOp, SingletonOp.ModOp);
+ SingletonOpDict.Add(PowOp, SingletonOp.PowOp);
+ SingletonOpDict.Add(LtOp, SingletonOp.LtOp);
+ SingletonOpDict.Add(LeOp, SingletonOp.LeOp);
+ SingletonOpDict.Add(GtOp, SingletonOp.GtOp);
+ SingletonOpDict.Add(GeOp, SingletonOp.GeOp);
+ SingletonOpDict.Add(SubtypeOp, SingletonOp.SubtypeOp);
+ SingletonOpDict.Add(Subtype3Op, SingletonOp.Subtype3Op);
+ SingletonOpDict.Add(ToIntOp, SingletonOp.ToIntOp);
+ SingletonOpDict.Add(ToRealOp, SingletonOp.ToRealOp);
+ //SingletonOpDict.Add(ToFloatOp, SingletonOp.ToFloatOp);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+
+ // Let-bindings
+
+ public VCExprLetBinding LetBinding(VCExprVar v, VCExpr e) {
+ Contract.Requires(e != null);
+ Contract.Requires(v != null);
+ Contract.Ensures(Contract.Result<VCExprLetBinding>() != null);
+ return new VCExprLetBinding(v, e);
+ }
+
+ // A "real" let expression. All let-bindings happen simultaneously, i.e.,
+ // at this level the order of the bindings does not matter. It is possible to
+ // create expressions like "let x = y, y = 5 in ...". All bound variables are
+ // bound in all bound terms/formulas and can occur there, but the dependencies
+ // have to be acyclic
+ public VCExpr Let(List<VCExprLetBinding> bindings, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(cce.NonNullElements(bindings));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (bindings.Count == 0)
+ // no empty let-bindings
+ return body;
+ return new VCExprLet(bindings, body);
+ }
+
+ public VCExpr Let(VCExpr body, params VCExprLetBinding[] bindings) {
+ Contract.Requires(body != null);
+ Contract.Requires((cce.NonNullElements(bindings)));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Let(HelperFuns.ToNonNullList(bindings), body);
+ }
+
+
+ /// <summary>
+ /// In contrast to the previous method, the following methods are not a general LET.
+ /// Instead, it
+ /// is a boolean "LET b = P in Q", where P and Q are predicates, that is allowed to be
+ /// encoded as "(b == P) ==> Q" or even as "(P ==> b) ==> Q"
+ /// (or "(P ==> b) and Q" in negative positions).
+ /// The method assumes that the variables in the bindings are unique in the entire formula
+ /// to be produced, which allows the implementation to ignore scope issues in the event that
+ /// it needs to generate an alternate expression for LET.
+ /// </summary>
+
+
+ // Turn let-bindings let v = E in ... into implications E ==> v
+ public VCExpr AsImplications(List<VCExprLetBinding> bindings) {
+ Contract.Requires(cce.NonNullElements(bindings));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr/*!*/ antecedents = True;
+ foreach (VCExprLetBinding b in bindings)
+ // turn "LET_binding v = E" into "v <== E"
+ antecedents = AndSimp(antecedents, Implies(b.E, b.V));
+ return antecedents;
+ }
+
+ // Turn let-bindings let v = E in ... into equations v == E
+ public VCExpr AsEquations(List<VCExprLetBinding> bindings) {
+ Contract.Requires(cce.NonNullElements(bindings));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr/*!*/ antecedents = True;
+ foreach (VCExprLetBinding b in bindings)
+ // turn "LET_binding v = E" into "v <== E"
+ antecedents = AndSimp(antecedents, Eq(b.E, b.V));
+ return antecedents;
+ }
+
+
+
+ // Maps
+
+ public VCExpr Select(params VCExpr[] allArgs) {
+ Contract.Requires(allArgs != null);
+ Contract.Requires((cce.NonNullElements(allArgs)));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprSelectOp(allArgs.Length - 1, 0),
+ HelperFuns.ToNonNullList(allArgs),
+ VCExprNAry.EMPTY_TYPE_LIST);
+ }
+
+ public VCExpr Select(VCExpr[] allArgs, Type[] typeArgs) {
+ Contract.Requires(1 <= allArgs.Length);
+ Contract.Requires(cce.NonNullElements(allArgs));
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprSelectOp(allArgs.Length - 1, typeArgs.Length),
+ allArgs, typeArgs);
+ }
+
+ public VCExpr Select(List<VCExpr> allArgs, List<Type> typeArgs) {
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Requires(cce.NonNullElements(allArgs));
+ Contract.Requires((1 <= allArgs.Count));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprSelectOp(allArgs.Count - 1, typeArgs.Count),
+ allArgs, typeArgs);
+ }
+
+ public VCExpr Store(params VCExpr[] allArgs) {
+ Contract.Requires(allArgs != null);
+ Contract.Requires(cce.NonNullElements(allArgs));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprStoreOp(allArgs.Length - 2, 0),
+ HelperFuns.ToNonNullList(allArgs),
+ VCExprNAry.EMPTY_TYPE_LIST);
+ }
+
+ public VCExpr Store(VCExpr[] allArgs, Type[] typeArgs) {
+ Contract.Requires(typeArgs != null);
+ Contract.Requires(allArgs != null);
+ Contract.Requires((2 <= allArgs.Length));
+ Contract.Requires(cce.NonNullElements(allArgs));
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprStoreOp(allArgs.Length - 2, typeArgs.Length),
+ allArgs, typeArgs);
+ }
+
+ public VCExpr Store(List<VCExpr> allArgs, List<Type/*!*/>/*!*/ typeArgs) {
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Requires(cce.NonNullElements(allArgs));
+ Contract.Requires((2 <= allArgs.Count));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(new VCExprStoreOp(allArgs.Count - 2, typeArgs.Count),
+ allArgs, typeArgs);
+ }
+
+
+ // Labels
+
+ public VCExprLabelOp LabelOp(bool pos, string l) {
+ Contract.Requires(l != null);
+ Contract.Ensures(Contract.Result<VCExprLabelOp>() != null);
+ return new VCExprLabelOp(pos, l);
+ }
+
+ public VCExpr LabelNeg(string label, VCExpr e) {
+ Contract.Requires(e != null);
+ Contract.Requires(label != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ if (e.Equals(True)) {
+ return e; // don't bother putting negative labels around True (which will expose the True to further peephole optimizations)
+ }
+ return Function(LabelOp(false, label), e);
+ }
+ public VCExpr LabelPos(string label, VCExpr e) {
+ Contract.Requires(e != null);
+ Contract.Requires(label != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Function(LabelOp(true, label), e);
+ }
+
+ // Quantifiers
+
+ public VCExpr Quantify(Quantifier quan, List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(infos != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Requires(cce.NonNullElements(vars));
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return new VCExprQuantifier(quan, typeParams, vars, triggers, infos, body);
+ }
+
+ public VCExpr Forall(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(infos != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Requires(cce.NonNullElements(vars));
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Quantify(Quantifier.ALL, typeParams, vars, triggers, infos, body);
+ }
+ public VCExpr Forall(List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, string qid, int weight, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(qid != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Requires(cce.NonNullElements(vars));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ QKeyValue kv = null;
+ if (0 <= weight) {
+ kv = new QKeyValue(Token.NoToken, "weight", new List<object>() { new LiteralExpr(Token.NoToken, BigNum.FromInt(0)) }, null);
+ }
+ return Quantify(Quantifier.ALL, new List<TypeVariable/*!*/>(), vars,
+ triggers, new VCQuantifierInfos(qid, -1, false, kv), body);
+ }
+ public VCExpr Forall(List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Requires(cce.NonNullElements(vars));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Quantify(Quantifier.ALL, new List<TypeVariable/*!*/>(), vars,
+ triggers, new VCQuantifierInfos(null, -1, false, null), body);
+ }
+ public VCExpr Forall(VCExprVar var, VCTrigger trigger, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(trigger != null);
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Forall(HelperFuns.ToNonNullList(var), HelperFuns.ToNonNullList(trigger), body);
+ }
+ public VCExpr Exists(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(infos != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Requires(cce.NonNullElements(vars));
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Quantify(Quantifier.EX, typeParams, vars, triggers, infos, body);
+ }
+ public VCExpr Exists(List<VCExprVar/*!*/>/*!*/ vars, List<VCTrigger/*!*/>/*!*/ triggers, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Requires(cce.NonNullElements(vars));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Quantify(Quantifier.EX, new List<TypeVariable/*!*/>(), vars,
+ triggers, new VCQuantifierInfos(null, -1, false, null), body);
+ }
+ public VCExpr Exists(VCExprVar var, VCTrigger trigger, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(trigger != null);
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return Exists(HelperFuns.ToNonNullList(var), HelperFuns.ToNonNullList(trigger), body);
+ }
+
+ public VCTrigger Trigger(bool pos, List<VCExpr> exprs) {
+ Contract.Requires(cce.NonNullElements(exprs));
+ Contract.Ensures(Contract.Result<VCTrigger>() != null);
+ return new VCTrigger(pos, exprs);
+ }
+
+ public VCTrigger Trigger(bool pos, params VCExpr[] exprs) {
+ Contract.Requires(exprs != null);
+ Contract.Requires((Contract.ForAll(0, exprs.Length, i => exprs[i] != null)));
+ Contract.Ensures(Contract.Result<VCTrigger>() != null);
+ return Trigger(pos, HelperFuns.ToNonNullList(exprs));
+ }
+
+ // Reference to a bound or free variable
+
+ public VCExprVar Variable(string name, Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires(name != null);
+ Contract.Ensures(Contract.Result<VCExprVar>() != null);
+ return new VCExprVar(name, type);
+ }
+ }
+}
+
+namespace Microsoft.Boogie.VCExprAST {
+
+ public class HelperFuns {
+ public static bool SameElements(IEnumerable a, IEnumerable b) {
+ Contract.Requires(b != null);
+ Contract.Requires(a != null);
+ IEnumerator ia = a.GetEnumerator();
+ IEnumerator ib = b.GetEnumerator();
+ while (true) {
+ if (ia.MoveNext()) {
+ if (ib.MoveNext()) {
+ if (!cce.NonNull(ia.Current).Equals(ib.Current))
+ return false;
+ } else {
+ return false;
+ }
+ } else {
+ return !ib.MoveNext();
+ }
+ }
+ }
+
+ public static int PolyHash(int init, int factor, IEnumerable a) {
+ Contract.Requires(a != null);
+ int res = init;
+ foreach (object x in a)
+ res = res * factor + (cce.NonNull(x)).GetHashCode();
+ return res;
+ }
+
+ public static List<T> ToList<T>(IEnumerable<T> l) {
+ Contract.Requires(l != null);
+ Contract.Ensures(Contract.Result<List<T>>() != null);
+ List<T>/*!*/ res = new List<T>();
+ foreach (T x in l)
+ res.Add(x);
+ return res;
+ }
+
+ public static List<Type> ToTypeSeq(VCExpr[] exprs, int startIndex) {
+ Contract.Requires(exprs != null);
+ Contract.Requires((Contract.ForAll(0, exprs.Length, i => exprs[i] != null)));
+ Contract.Ensures(Contract.Result<List<Type>>() != null);
+ List<Type>/*!*/ res = new List<Type>();
+ for (int i = startIndex; i < exprs.Length; ++i)
+ res.Add(cce.NonNull(exprs[i]).Type);
+ return res;
+ }
+
+ public static List<T/*!*/>/*!*/ ToNonNullList<T>(params T[] args) where T : class {
+ Contract.Requires(args != null);
+ List<T/*!*/>/*!*/ res = new List<T>(args.Length);
+ foreach (T t in args)
+ res.Add(cce.NonNull(t));
+ return res;
+ }
+
+ public static IDictionary<A, B> Clone<A, B>(IDictionary<A, B> dict) {
+ Contract.Requires(dict != null);
+ Contract.Ensures(Contract.Result<IDictionary<A, B>>() != null);
+ IDictionary<A, B> res = new Dictionary<A, B>(dict.Count);
+ foreach (KeyValuePair<A, B> pair in dict)
+ res.Add(pair);
+ return res;
+ }
+ }
+
+ [ContractClassFor(typeof(VCExpr))]
+ public abstract class VCExprContracts : VCExpr {
+ public override Type Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ throw new NotImplementedException();
+ }
+
+ }
+ public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
+ Contract.Requires(visitor != null);
+ throw new NotImplementedException();
+ }
+ }
+
+ [ContractClass(typeof(VCExprContracts))]
+ public abstract class VCExpr {
+ public abstract Type Type {
+ get;
+ }
+
+ public abstract Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg);
+
+ [Pure]
+ public override string ToString() {
+ Contract.Ensures(Contract.Result<string>() != null);
+ StringWriter sw = new StringWriter();
+ VCExprPrinter printer = new VCExprPrinter();
+ printer.Print(this, sw);
+ return cce.NonNull(sw.ToString());
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // Literal expressions
+
+ public class VCExprLiteral : VCExpr {
+ private readonly Type LitType;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(LitType != null);
+ }
+
+ public override Type Type {
+ get {
+ return LitType;
+ }
+ }
+ internal VCExprLiteral(Type type) {
+ Contract.Requires(type != null);
+ this.LitType = type;
+ }
+ public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this, arg);
+ }
+ }
+
+ public class VCExprIntLit : VCExprLiteral {
+ public readonly BigNum Val;
+ internal VCExprIntLit(BigNum val)
+ : base(Type.Int) {
+ this.Val = val;
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprIntLit)
+ return Val == ((VCExprIntLit)that).Val;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Val.GetHashCode() * 72321;
+ }
+ }
+
+ public class VCExprRealLit : VCExprLiteral {
+ public readonly BigDec Val;
+ internal VCExprRealLit(BigDec val)
+ : base(Type.Real) {
+ this.Val = val;
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprRealLit)
+ return Val == ((VCExprRealLit)that).Val;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Val.GetHashCode() * 72321;
+ }
+ }
+
+ public class VCExprFloatLit : VCExprLiteral
+ {
+ public readonly BigFloat Val;
+ internal VCExprFloatLit(BigFloat val)
+ : base(Type.GetFloatType(val.ExponentSize, val.SignificandSize))
+ {
+ this.Val = val;
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that)
+ {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprFloatLit)
+ return Val == ((VCExprFloatLit)that).Val;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode()
+ {
+ return Val.GetHashCode() * 72321;
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // Operator expressions with fixed arity
+ [ContractClassFor(typeof(VCExprNAry))]
+ public abstract class VCExprNAryContracts : VCExprNAry {
+ public VCExprNAryContracts()
+ : base(null) {
+ }
+ public override VCExpr this[int index] {
+ get {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ throw new NotImplementedException();
+ }
+ }
+ }
+
+ [ContractClass(typeof(VCExprNAryContracts))]
+ public abstract class VCExprNAry : VCExpr, IEnumerable<VCExpr/*!*/> {
+ public readonly VCExprOp Op;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Op != null);
+ Contract.Invariant(cce.NonNullElements(EMPTY_TYPE_LIST));
+ Contract.Invariant(cce.NonNullElements(EMPTY_VCEXPR_LIST));
+ }
+
+ public int Arity {
+ get {
+ return Op.Arity;
+ }
+ }
+ public int TypeParamArity {
+ get {
+ return Op.TypeParamArity;
+ }
+ }
+ public int Length {
+ get {
+ return Arity;
+ }
+ }
+ // the sub-expressions of the expression
+ public abstract VCExpr/*!*/ this[int index] {
+ get;
+ }
+
+ // the type arguments
+ public abstract List<Type/*!*/>/*!*/ TypeArguments {
+ get;
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ public IEnumerator<VCExpr/*!*/>/*!*/ GetEnumerator() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerator<VCExpr>>()));
+ for (int i = 0; i < Arity; ++i)
+ yield return this[i];
+ }
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ IEnumerator System.Collections.IEnumerable.GetEnumerator() {
+ Contract.Ensures(Contract.Result<IEnumerator>() != null);
+ for (int i = 0; i < Arity; ++i)
+ yield return this[i];
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprNAry) {
+ // we compare the subterms iteratively (not recursively)
+ // to avoid stack overflows
+
+ VCExprNAryEnumerator enum0 = new VCExprNAryEnumerator(this);
+ VCExprNAryEnumerator enum1 = new VCExprNAryEnumerator((VCExprNAry)that);
+
+ while (true) {
+ bool next0 = enum0.MoveNext();
+ bool next1 = enum1.MoveNext();
+ if (next0 != next1)
+ return false;
+ if (!next0)
+ return true;
+
+ VCExprNAry nextExprNAry0 = enum0.Current as VCExprNAry;
+ VCExprNAry nextExprNAry1 = enum1.Current as VCExprNAry;
+
+ if ((nextExprNAry0 == null) != (nextExprNAry1 == null))
+ return false;
+ if (nextExprNAry0 != null && nextExprNAry1 != null) {
+ if (!nextExprNAry0.Op.Equals(nextExprNAry1.Op))
+ return false;
+ } else {
+ if (!cce.NonNull(enum0.Current).Equals(enum1.Current))
+ return false;
+ }
+ }
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return HelperFuns.PolyHash(Op.GetHashCode() * 123 + Arity * 61521,
+ 3, this);
+ }
+
+ internal VCExprNAry(VCExprOp op) {
+ Contract.Requires(op != null);
+ this.Op = op;
+ }
+ public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this, arg);
+ }
+ public Result Accept<Result, Arg>(IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ Contract.Requires(visitor != null);
+ return Op.Accept(this, visitor, arg);
+ }
+
+ internal static readonly List<Type/*!*/>/*!*/ EMPTY_TYPE_LIST = new List<Type/*!*/>();
+ internal static readonly List<VCExpr/*!*/>/*!*/ EMPTY_VCEXPR_LIST = new List<VCExpr/*!*/>();
+
+ public IEnumerable<VCExpr> UniformArguments
+ {
+ get
+ {
+ var enumerator = new VCExprNAryUniformOpEnumerator(this);
+ while (enumerator.MoveNext()) {
+ VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
+ if (naryExpr == null || !naryExpr.Op.Equals(this.Op)) {
+ yield return (VCExpr)enumerator.Current;
+ }
+ }
+ }
+ }
+ }
+
+ // We give specialised implementations for nullary, unary and binary expressions
+
+ internal class VCExprNullary : VCExprNAry {
+ private readonly Type ExprType;
+ [ContractInvariantMethod]
+ void loneinvariant() {
+ Contract.Invariant(ExprType != null);
+ }
+
+ public override Type Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return ExprType;
+ }
+ }
+ public override VCExpr this[int index] {
+ get {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // no arguments
+ }
+ }
+
+ // the type arguments
+ public override List<Type/*!*/>/*!*/ TypeArguments {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
+ return EMPTY_TYPE_LIST;
+ }
+ }
+
+ internal VCExprNullary(VCExprOp op)
+ : base(op) {
+ Contract.Requires(op != null);
+ Contract.Requires(op.Arity == 0 && op.TypeParamArity == 0);
+ this.ExprType = op.InferType(EMPTY_VCEXPR_LIST, EMPTY_TYPE_LIST);
+ }
+ }
+
+ internal class VCExprUnary : VCExprNAry {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Argument != null);
+ Contract.Invariant(ExprType != null);
+
+ }
+
+ private readonly VCExpr/*!*/ Argument;
+ private readonly Type/*!*/ ExprType;
+ public override Type/*!*/ Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return ExprType;
+ }
+ }
+ public override VCExpr/*!*/ this[int index] {
+ get {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ Contract.Assume(index == 0);
+ return Argument;
+ }
+ }
+
+ // the type arguments
+ public override List<Type/*!*/>/*!*/ TypeArguments {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
+ return EMPTY_TYPE_LIST;
+ }
+ }
+
+ internal VCExprUnary(VCExprOp op, List<VCExpr> arguments)
+ : base(op) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Requires(op.Arity == 1 && op.TypeParamArity == 0 && arguments.Count == 1);
+
+ this.Argument = arguments[0];
+ this.ExprType =
+ op.InferType(arguments, EMPTY_TYPE_LIST);
+ }
+
+ internal VCExprUnary(VCExprOp op, VCExpr argument)
+ : base(op) {
+ Contract.Requires(argument != null);
+ Contract.Requires(op != null);
+ Contract.Requires(op.Arity == 1 && op.TypeParamArity == 0);
+
+ this.Argument = argument;
+ // PR: could be optimised so that the argument does
+ // not have to be boxed in an array each time
+ this.ExprType =
+ op.InferType(HelperFuns.ToNonNullList(argument), EMPTY_TYPE_LIST);
+ }
+ }
+
+ internal class VCExprBinary : VCExprNAry {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Argument0 != null);
+ Contract.Invariant(Argument1 != null);
+ Contract.Invariant(ExprType != null);
+ }
+
+ private readonly VCExpr Argument0;
+ private readonly VCExpr Argument1;
+ private readonly Type ExprType;
+ public override Type Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return ExprType;
+ }
+ }
+ public override VCExpr this[int index] {
+ get {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ switch (index) {
+ case 0:
+ return Argument0;
+ case 1:
+ return Argument1;
+ default: {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+ }
+ }
+
+ // the type arguments
+ public override List<Type/*!*/>/*!*/ TypeArguments {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
+ return EMPTY_TYPE_LIST;
+ }
+ }
+
+ internal VCExprBinary(VCExprOp op, List<VCExpr> arguments)
+ : base(op) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Requires(op.Arity == 2 && op.TypeParamArity == 0 && arguments.Count == 2);
+
+ this.Argument0 = arguments[0];
+ this.Argument1 = arguments[1];
+ this.ExprType = op.InferType(arguments, EMPTY_TYPE_LIST);
+ }
+
+ internal VCExprBinary(VCExprOp op, VCExpr argument0, VCExpr argument1)
+ : base(op) {
+ Contract.Requires(argument1 != null);
+ Contract.Requires(argument0 != null);
+ Contract.Requires(op != null);
+ Contract.Requires(op.Arity == 2 && op.TypeParamArity == 0);
+ this.Argument0 = argument0;
+ this.Argument1 = argument1;
+ // PR: could be optimised so that the arguments do
+ // not have to be boxed in an array each time
+ this.ExprType =
+ op.InferType(HelperFuns.ToNonNullList(argument0, argument1),
+ EMPTY_TYPE_LIST);
+ }
+ }
+
+ internal class VCExprMultiAry : VCExprNAry {
+ private readonly List<VCExpr/*!*/>/*!*/ Arguments;
+ private readonly List<Type/*!*/>/*!*/ TypeArgumentsAttr;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(Arguments));
+ Contract.Invariant(cce.NonNullElements(TypeArgumentsAttr));
+ Contract.Invariant(ExprType != null);
+ }
+
+
+ private readonly Type/*!*/ ExprType;
+ public override Type/*!*/ Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return ExprType;
+ }
+ }
+ public override VCExpr/*!*/ this[int index] {
+ get {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ Contract.Assume(index >= 0 && index < Arity);
+ return cce.NonNull(Arguments)[index];
+ }
+ }
+
+ // the type arguments
+ public override List<Type/*!*/>/*!*/ TypeArguments {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Type>>()));
+ return TypeArgumentsAttr;
+ }
+ }
+
+ internal VCExprMultiAry(VCExprOp op, List<VCExpr> arguments)
+ : base(op) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(arguments));
+ this.Arguments = arguments;
+ this.TypeArgumentsAttr = EMPTY_TYPE_LIST;
+ this.ExprType = op.InferType(arguments, TypeArgumentsAttr);
+ }
+ internal VCExprMultiAry(VCExprOp op, List<VCExpr> arguments, List<Type/*!*/>/*!*/ typeArguments)
+ : base(op) {
+ Contract.Requires(op != null);
+ Contract.Requires(cce.NonNullElements(typeArguments));
+ Contract.Requires(cce.NonNullElements(arguments));
+ Contract.Requires(arguments.Count > 2 || typeArguments.Count > 0);
+ Contract.Requires(op.Arity == arguments.Count);
+ Contract.Requires(op.TypeParamArity == typeArguments.Count);
+ this.Arguments = arguments;
+ this.TypeArgumentsAttr = typeArguments;
+ this.ExprType = op.InferType(arguments, typeArguments);
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // The various operators available
+ [ContractClass(typeof(VCExprOpContracts))]
+ public abstract class VCExprOp {
+ // the number of value parameters
+ public abstract int Arity {
+ get;
+ }
+ // the number of type parameters
+ public abstract int TypeParamArity {
+ get;
+ }
+
+ public abstract Type/*!*/ InferType(List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs);
+
+ public virtual Result Accept<Result, Arg>(VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ Contract.Requires(visitor != null);
+ Contract.Requires(expr != null);
+ VCExpressionGenerator.SingletonOp op;
+ if (VCExpressionGenerator.SingletonOpDict.TryGetValue(this, out op)) {
+ switch (op) {
+ case VCExpressionGenerator.SingletonOp.NotOp:
+ return visitor.VisitNotOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.EqOp:
+ return visitor.VisitEqOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.NeqOp:
+ return visitor.VisitNeqOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.AndOp:
+ return visitor.VisitAndOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.OrOp:
+ return visitor.VisitOrOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.ImpliesOp:
+ return visitor.VisitImpliesOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.AddOp:
+ return visitor.VisitAddOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.SubOp:
+ return visitor.VisitSubOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.MulOp:
+ return visitor.VisitMulOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.DivOp:
+ return visitor.VisitDivOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.ModOp:
+ return visitor.VisitModOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.RealDivOp:
+ return visitor.VisitRealDivOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.PowOp:
+ return visitor.VisitPowOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.LtOp:
+ return visitor.VisitLtOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.LeOp:
+ return visitor.VisitLeOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.GtOp:
+ return visitor.VisitGtOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.GeOp:
+ return visitor.VisitGeOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.SubtypeOp:
+ return visitor.VisitSubtypeOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.Subtype3Op:
+ return visitor.VisitSubtype3Op(expr, arg);
+ case VCExpressionGenerator.SingletonOp.BvConcatOp:
+ return visitor.VisitBvConcatOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.ToIntOp:
+ return visitor.VisitToIntOp(expr, arg);
+ case VCExpressionGenerator.SingletonOp.ToRealOp:
+ return visitor.VisitToRealOp(expr, arg);
+ default:
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ } else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+ }
+ [ContractClassFor(typeof(VCExprOp))]
+ abstract class VCExprOpContracts : VCExprOp {
+ public override Type InferType(List<VCExpr> args, List<Type> typeArgs) {
+ Contract.Requires(cce.NonNullElements(args));
+ Contract.Requires(cce.NonNullElements(typeArgs));
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+
+ public class VCExprNAryOp : VCExprOp {
+ private readonly Type OpType;
+ private readonly int OpArity;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(OpType != null);
+ }
+
+ public override int Arity {
+ get {
+ return OpArity;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 0;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return OpType;
+ }
+
+ internal VCExprNAryOp(int arity, Type type) {
+ Contract.Requires(type != null);
+ this.OpArity = arity;
+ this.OpType = type;
+ }
+ }
+
+ public class VCExprDistinctOp : VCExprNAryOp {
+ internal VCExprDistinctOp(int arity)
+ : base(arity, Type.Bool) {
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprDistinctOp)
+ return Arity == ((VCExprDistinctOp)that).Arity;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Arity * 917632481;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitDistinctOp(expr, arg);
+ }
+ }
+
+ public class VCExprLabelOp : VCExprOp {
+ public override int Arity {
+ get {
+ return 1;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 0;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return args[0].Type;
+ }
+
+ public readonly bool pos;
+ public readonly string label;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(label != null);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprLabelOp) {
+ VCExprLabelOp/*!*/ thatOp = (VCExprLabelOp)that;
+ return this.pos == thatOp.pos && this.label.Equals(thatOp.label);
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return (pos ? 9817231 : 7198639) + label.GetHashCode();
+ }
+
+ internal VCExprLabelOp(bool pos, string l) {
+ Contract.Requires(l != null);
+ this.pos = pos;
+ this.label = pos ? "+" + l : "@" + l;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitLabelOp(expr, arg);
+ }
+ }
+
+ public class VCExprSelectOp : VCExprOp {
+ private readonly int MapArity;
+ private readonly int MapTypeParamArity;
+ public override int Arity {
+ get {
+ return MapArity + 1;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return MapTypeParamArity;
+ }
+ }
+
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ MapType/*!*/ mapType = args[0].Type.AsMap;
+ Contract.Assert(TypeParamArity == mapType.TypeParameters.Count);
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ for (int i = 0; i < TypeParamArity; ++i)
+ subst.Add(mapType.TypeParameters[i], typeArgs[i]);
+ return mapType.Result.Substitute(subst);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprSelectOp)
+ return Arity == ((VCExprSelectOp)that).Arity &&
+ TypeParamArity == ((VCExprSelectOp)that).TypeParamArity;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Arity * 1212481 + TypeParamArity * 298741;
+ }
+
+ internal VCExprSelectOp(int arity, int typeParamArity) {
+ Contract.Requires(0 <= arity && 0 <= typeParamArity);
+ this.MapArity = arity;
+ this.MapTypeParamArity = typeParamArity;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitSelectOp(expr, arg);
+ }
+ }
+
+ public class VCExprStoreOp : VCExprOp {
+ private readonly int MapArity;
+ private readonly int MapTypeParamArity;
+ public override int Arity {
+ get {
+ return MapArity + 2;
+ }
+ }
+ // stores never need explicit type parameters, because also the
+ // rhs is a value argument
+ public override int TypeParamArity {
+ get {
+ return MapTypeParamArity;
+ }
+ }
+
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return args[0].Type;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprStoreOp)
+ return Arity == ((VCExprStoreOp)that).Arity;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Arity * 91361821;
+ }
+
+ internal VCExprStoreOp(int arity, int typeParamArity) {
+ Contract.Requires(0 <= arity && 0 <= typeParamArity);
+ this.MapArity = arity;
+ this.MapTypeParamArity = typeParamArity;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitStoreOp(expr, arg);
+ }
+ }
+
+ public class VCExprIfThenElseOp : VCExprOp {
+ public override int Arity {
+ get {
+ return 3;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 0;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return args[1].Type;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprIfThenElseOp)
+ return true;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return 1;
+ }
+
+ internal VCExprIfThenElseOp() {
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitIfThenElseOp(expr, arg);
+ }
+ }
+
+ public class VCExprSoftOp : VCExprCustomOp
+ {
+ public readonly int Weight;
+
+ public VCExprSoftOp(int weight) : base("soft##dummy", 2, Microsoft.Boogie.Type.Bool)
+ {
+ Weight = weight;
+ }
+ }
+
+ public class VCExprCustomOp : VCExprOp {
+ public readonly string/*!*/ Name;
+ int arity;
+ public readonly Type/*!*/ Type;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Name != null);
+ Contract.Invariant(Type != null);
+ }
+
+ public VCExprCustomOp(string/*!*/ name, int arity, Type/*!*/ type) {
+ Contract.Requires(name != null);
+ Contract.Requires(type != null);
+ this.Name = name;
+ this.arity = arity;
+ this.Type = type;
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ VCExprCustomOp t = that as VCExprCustomOp;
+ if (t == null)
+ return false;
+ return this.Name == t.Name && this.arity == t.arity && this.Type == t.Type;
+ }
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override int GetHashCode() {
+ int h = Name.GetHashCode();
+ h = 7823 * h + arity;
+ h = 7823 * h + Type.GetHashCode();
+ return h;
+ }
+ public override int Arity {
+ get {
+ return arity;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 0;
+ }
+ }
+ public override Type/*!*/ InferType(List<VCExpr/*!*/>/*!*/ args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires((cce.NonNullElements(args)));
+ //Contract.Requires((cce.NonNullElements(typeArgs)));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return Type;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry/*!*/ expr, IVCExprOpVisitor<Result, Arg>/*!*/ visitor, Arg arg) {
+ //Contract.Requires(expr != null);
+ //Contract.Requires(visitor != null);
+ return visitor.VisitCustomOp(expr, arg);
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // Float operators
+
+ public class VCExprBinaryFloatOp : VCExprOp {
+ public readonly int Mantissa;
+ public readonly int Exponent;
+ private string op;
+
+ public override int Arity {
+ get {
+ return 2;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 2;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return Type.GetFloatType(Exponent, Mantissa);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprBinaryFloatOp)
+ return this.Exponent == ((VCExprBinaryFloatOp)that).Exponent && this.Mantissa == ((VCExprBinaryFloatOp)that).Mantissa;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Exponent * 81748912 + Mantissa * 67867979;
+ }
+
+ internal VCExprBinaryFloatOp(int exp, int man, string op) {
+ this.Exponent = exp;
+ this.Mantissa = man;
+ this.op = op;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ switch (op) {
+ case ("+"):
+ return visitor.VisitFloatAddOp(expr, arg);
+ case ("-"):
+ return visitor.VisitFloatSubOp(expr, arg);
+ case ("*"):
+ return visitor.VisitFloatMulOp(expr, arg);
+ case ("/"):
+ return visitor.VisitFloatDivOp(expr, arg);
+ case ("rem"):
+ return visitor.VisitFloatRemOp(expr, arg);
+ case ("min"):
+ return visitor.VisitFloatMinOp(expr, arg);
+ case ("max"):
+ return visitor.VisitFloatMaxOp(expr, arg);
+ case ("<="):
+ return visitor.VisitFloatLeqOp(expr, arg);
+ case ("<"):
+ return visitor.VisitFloatLtOp(expr, arg);
+ case (">="):
+ return visitor.VisitFloatGeqOp(expr, arg);
+ case (">"):
+ return visitor.VisitFloatGtOp(expr, arg);
+ case ("=="):
+ return visitor.VisitFloatEqOp(expr, arg);
+ default:
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // Bitvector operators
+
+ public class VCExprBvOp : VCExprOp {
+ public readonly int Bits;
+
+ public override int Arity {
+ get {
+ return 1;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 0;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return Type.GetBvType(Bits);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprBvOp)
+ return this.Bits == ((VCExprBvOp)that).Bits;
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Bits * 81748912;
+ }
+
+ internal VCExprBvOp(int bits) {
+ this.Bits = bits;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitBvOp(expr, arg);
+ }
+ }
+
+ public class VCExprBvExtractOp : VCExprOp {
+ public readonly int Start;
+ public readonly int End;
+ public readonly int Total; // the number of bits from which the End-Start bits are extracted
+
+ public override int Arity {
+ get {
+ return 1;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 0;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return Type.GetBvType(End - Start);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprBvExtractOp) {
+ VCExprBvExtractOp/*!*/ thatExtract = (VCExprBvExtractOp)that;
+ return this.Start == thatExtract.Start && this.End == thatExtract.End && this.Total == thatExtract.Total;
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Start * 81912 + End * 978132 + Total * 571289;
+ }
+
+ internal VCExprBvExtractOp(int start, int end, int total) {
+ Contract.Requires(0 <= start && start <= end && end <= total);
+ this.Start = start;
+ this.End = end;
+ this.Total = total;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitBvExtractOp(expr, arg);
+ }
+ }
+
+ public class VCExprBvConcatOp : VCExprOp {
+ public readonly int LeftSize;
+ public readonly int RightSize;
+
+ public override int Arity {
+ get {
+ return 2;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return 0;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return Type.GetBvType(args[0].Type.BvBits + args[1].Type.BvBits);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprBvConcatOp) {
+ VCExprBvConcatOp thatConcat = (VCExprBvConcatOp)that;
+ return this.LeftSize == thatConcat.LeftSize && this.RightSize == thatConcat.RightSize;
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return LeftSize * 81912 + RightSize * 978132;
+ }
+
+ internal VCExprBvConcatOp(int leftSize, int rightSize) {
+ Contract.Requires(0 <= leftSize && 0 <= rightSize);
+ this.LeftSize = leftSize;
+ this.RightSize = rightSize;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitBvConcatOp(expr, arg);
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // References to user-defined Boogie functions
+
+ public class VCExprBoogieFunctionOp : VCExprOp {
+ public readonly Function Func;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Func != null);
+ }
+
+
+ public override int Arity {
+ get {
+ return Func.InParams.Count;
+ }
+ }
+ public override int TypeParamArity {
+ get {
+ return Func.TypeParameters.Count;
+ }
+ }
+ public override Type InferType(List<VCExpr> args, List<Type/*!*/>/*!*/ typeArgs) {
+ //Contract.Requires(cce.NonNullElements(typeArgs));
+ //Contract.Requires(cce.NonNullElements(args));
+ Contract.Ensures(Contract.Result<Type>() != null);
+ Contract.Assert(TypeParamArity == Func.TypeParameters.Count);
+ if (TypeParamArity == 0)
+ return cce.NonNull(Func.OutParams[0]).TypedIdent.Type;
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ subst = new Dictionary<TypeVariable/*!*/, Type/*!*/>(TypeParamArity);
+ for (int i = 0; i < TypeParamArity; ++i)
+ subst.Add(Func.TypeParameters[i], typeArgs[i]);
+ return cce.NonNull(Func.OutParams[0]).TypedIdent.Type.Substitute(subst);
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprBoogieFunctionOp)
+ return this.Func.Equals(((VCExprBoogieFunctionOp)that).Func);
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Func.GetHashCode() + 18731;
+ }
+
+ // we require that the result type of the expression is specified, because we
+ // do not want to perform full type inference at this point
+ internal VCExprBoogieFunctionOp(Function func) {
+ Contract.Requires(func != null);
+ this.Func = func;
+ }
+ public override Result Accept<Result, Arg>
+ (VCExprNAry expr, IVCExprOpVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ //Contract.Requires(expr != null);
+ return visitor.VisitBoogieFunctionOp(expr, arg);
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // Binders (quantifiers and let-expressions). We introduce our own class for
+ // term variables, but use the Boogie-AST class for type variables
+
+ public class VCExprVar : VCExpr {
+ // the name of the variable. Note that the name is not used for comparison,
+ // i.e., there can be two distinct variables with the same name
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Name != null);
+ Contract.Invariant(VarType != null);
+ }
+
+ public readonly string/*!*/ Name;
+ private readonly Type/*!*/ VarType;
+ public override Type/*!*/ Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+ return VarType;
+ }
+ }
+
+ internal VCExprVar(string name, Type type) {
+ Contract.Requires(type != null);
+ Contract.Requires(name != null);
+ this.Name = name;
+ this.VarType = type;
+ }
+ public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this, arg);
+ }
+ }
+
+ public class VCExprConstant : VCExprVar
+ {
+ internal VCExprConstant(string name, Type type) : base(name,type) {
+ Contract.Requires(type != null);
+ Contract.Requires(name != null);
+ }
+ }
+
+ public abstract class VCExprBinder : VCExpr {
+ public readonly VCExpr/*!*/ Body;
+ public readonly List<TypeVariable/*!*/>/*!*/ TypeParameters;
+ public readonly List<VCExprVar/*!*/>/*!*/ BoundVars;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Body != null);
+ Contract.Invariant(cce.NonNullElements(TypeParameters));
+ Contract.Invariant(cce.NonNullElements(BoundVars));
+ }
+
+
+ public override Type/*!*/ Type {
+ get {
+ Contract.Ensures(Contract.Result<Type>() != null);
+
+ return Body.Type;
+ }
+ }
+
+ internal VCExprBinder(List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ boundVars, VCExpr body) {
+ Contract.Requires(body != null);
+ Contract.Requires(cce.NonNullElements(boundVars));
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Requires(boundVars.Count + typeParams.Count > 0); // only nontrivial binders ...
+ this.TypeParameters = typeParams;
+ this.BoundVars = boundVars;
+ this.Body = body;
+ }
+ }
+
+ public class VCTrigger {
+ public readonly bool Pos;
+ public readonly List<VCExpr/*!*/>/*!*/ Exprs;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Exprs != null);
+ }
+
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCTrigger) {
+ VCTrigger/*!*/ thatTrigger = (VCTrigger)that;
+ return this.Pos == thatTrigger.Pos &&
+ HelperFuns.SameElements(this.Exprs, thatTrigger.Exprs);
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return (Pos ? 913821 : 871334) +
+ HelperFuns.PolyHash(123, 7, this.Exprs);
+ }
+
+ public VCTrigger(bool pos, List<VCExpr> exprs) {
+ Contract.Requires(cce.NonNullElements(exprs));
+ this.Pos = pos;
+ this.Exprs = exprs;
+ }
+ }
+
+ public class VCQuantifierInfos {
+ public readonly string qid;
+ public readonly int uniqueId;
+ public readonly bool bvZ3Native;
+ public QKeyValue attributes;
+
+ public VCQuantifierInfos(string qid, int uniqueId, bool bvZ3Native, QKeyValue attributes) {
+ this.qid = qid;
+ this.uniqueId = uniqueId;
+ this.bvZ3Native = bvZ3Native;
+ this.attributes = attributes;
+ }
+ }
+
+ public enum Quantifier {
+ ALL,
+ EX
+ };
+
+ public class VCExprQuantifier : VCExprBinder {
+ public readonly Quantifier Quan;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Infos != null);
+ Contract.Invariant(cce.NonNullElements(Triggers));
+ }
+
+
+ public readonly List<VCTrigger/*!*/>/*!*/ Triggers;
+ public readonly VCQuantifierInfos Infos;
+
+ // Equality is /not/ modulo bound renaming at this point
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprQuantifier) {
+ VCExprQuantifier/*!*/ thatQuan = (VCExprQuantifier)that;
+ return this.Quan == thatQuan.Quan &&
+ HelperFuns.SameElements(this.Triggers, thatQuan.Triggers) &&
+ HelperFuns.SameElements(this.TypeParameters, thatQuan.TypeParameters) &&
+ HelperFuns.SameElements(this.BoundVars, thatQuan.BoundVars) &&
+ this.Body.Equals(thatQuan.Body);
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return Quan.GetHashCode() +
+ HelperFuns.PolyHash(973219, 7, TypeParameters) +
+ HelperFuns.PolyHash(998431, 9, BoundVars) +
+ HelperFuns.PolyHash(123, 11, Triggers);
+ }
+
+ internal VCExprQuantifier(Quantifier kind, List<TypeVariable/*!*/>/*!*/ typeParams, List<VCExprVar/*!*/>/*!*/ boundVars, List<VCTrigger/*!*/>/*!*/ triggers, VCQuantifierInfos infos, VCExpr body)
+ : base(typeParams, boundVars, body) {
+ Contract.Requires(body != null);
+ Contract.Requires(infos != null);
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Requires(cce.NonNullElements(boundVars));
+ Contract.Requires(cce.NonNullElements(typeParams));
+
+ this.Quan = kind;
+ this.Triggers = triggers;
+ this.Infos = infos;
+ }
+ public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this, arg);
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // Let-Bindings
+
+ public class VCExprLetBinding {
+ public readonly VCExprVar V;
+ public readonly VCExpr E;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(V != null);
+ Contract.Invariant(E != null);
+ }
+
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprLetBinding) {
+ VCExprLetBinding/*!*/ thatB = (VCExprLetBinding)that;
+ return this.V.Equals(thatB.V) && this.E.Equals(thatB.E);
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return V.GetHashCode() * 71261 + E.GetHashCode();
+ }
+
+ internal VCExprLetBinding(VCExprVar v, VCExpr e) {
+ Contract.Requires(e != null);
+ Contract.Requires(v != null);
+ this.V = v;
+ this.E = e;
+ Contract.Assert(v.Type.Equals(e.Type));
+ }
+ }
+
+ public class VCExprLet : VCExprBinder, IEnumerable<VCExprLetBinding/*!*/> {
+ private readonly List<VCExprLetBinding/*!*/>/*!*/ Bindings;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(Bindings));
+
+ }
+
+
+ public int Length {
+ get {
+ return Bindings.Count;
+ }
+ }
+ public VCExprLetBinding this[int index] {
+ get {
+ Contract.Ensures(Contract.Result<VCExprLetBinding>() != null);
+ return Bindings[index];
+ }
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (Object.ReferenceEquals(this, that))
+ return true;
+ if (that is VCExprLet) {
+ VCExprLet/*!*/ thatLet = (VCExprLet)that;
+ return this.Body.Equals(thatLet.Body) &&
+ HelperFuns.SameElements(this, (VCExprLet)that);
+ }
+ return false;
+ }
+ [Pure]
+ public override int GetHashCode() {
+ return HelperFuns.PolyHash(Body.GetHashCode(), 9, Bindings);
+ }
+
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ public IEnumerator<VCExprLetBinding/*!*/>/*!*/ GetEnumerator() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerator<VCExprLetBinding>>()));
+ return Bindings.GetEnumerator();
+ }
+ [Pure]
+ [GlobalAccess(false)]
+ [Escapes(true, false)]
+ IEnumerator System.Collections.IEnumerable.GetEnumerator() {
+ Contract.Ensures(Contract.Result<IEnumerator>() != null);
+ return Bindings.GetEnumerator();
+ }
+
+ private static List<VCExprVar/*!*/>/*!*/ toSeq(List<VCExprLetBinding/*!*/>/*!*/ bindings) {
+ Contract.Requires(cce.NonNullElements(bindings));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExprVar>>()));
+ List<VCExprVar> res = new List<VCExprVar>();
+ foreach (VCExprLetBinding/*!*/ b in bindings)
+ res.Add(b.V);
+ return res;
+ }
+
+ internal VCExprLet(List<VCExprLetBinding/*!*/>/*!*/ bindings, VCExpr/*!*/ body)
+ : base(new List<TypeVariable/*!*/>(), toSeq(bindings), body) {
+ Contract.Requires(cce.NonNullElements(bindings));
+ Contract.Requires(body != null);
+ this.Bindings = bindings;
+ }
+ public override Result Accept<Result, Arg>(IVCExprVisitor<Result, Arg> visitor, Arg arg) {
+ //Contract.Requires(visitor != null);
+ return visitor.Visit(this, arg);
+ }
+ }
+}
diff --git a/Source/VCExpr/VCExprASTPrinter.cs b/Source/VCExpr/VCExprASTPrinter.cs
index 8e2f5d12..dac9604c 100644
--- a/Source/VCExpr/VCExprASTPrinter.cs
+++ b/Source/VCExpr/VCExprASTPrinter.cs
@@ -1,432 +1,432 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-
-// A simple visitor for turning a VCExpr into a human-readable string
-// (S-expr syntax)
-
-namespace Microsoft.Boogie.VCExprAST {
-
- public class VCExprPrinter : IVCExprVisitor<bool, TextWriter/*!*/> {
- private VCExprOpPrinter OpPrinterVar = null;
- private VCExprOpPrinter/*!*/ OpPrinter {
- get {
- Contract.Ensures(Contract.Result<VCExprOpPrinter>() != null);
-
- if (OpPrinterVar == null)
- OpPrinterVar = new VCExprOpPrinter(this);
- return OpPrinterVar;
- }
- }
-
- public void Print(VCExpr expr, TextWriter wr) {
- Contract.Requires(wr != null);
- Contract.Requires(expr != null);
- expr.Accept<bool, TextWriter/*!*/>(this, wr);
- }
-
- public bool Visit(VCExprLiteral node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- if (node == VCExpressionGenerator.True) {
- wr.Write("true");
- } else if (node == VCExpressionGenerator.False) {
- wr.Write("false");
- } else if (node is VCExprIntLit) {
- wr.Write(((VCExprIntLit)node).Val);
- } else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- return true;
- }
- public bool Visit(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- VCExprOp/*!*/ op = node.Op;
- Contract.Assert(op != null);
-
- if (op.Equals(VCExpressionGenerator.AndOp) ||
- op.Equals(VCExpressionGenerator.OrOp)) {
- // handle these operators without recursion
-
- wr.Write("({0}",
- op.Equals(VCExpressionGenerator.AndOp) ? "And" : "Or");
- IEnumerator/*!*/ enumerator = new VCExprNAryUniformOpEnumerator(node);
- Contract.Assert(enumerator != null);
- while (enumerator.MoveNext()) {
- VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
- if (naryExpr == null || !naryExpr.Op.Equals(op)) {
- wr.Write(" ");
- Print(cce.NonNull((VCExpr/*!*/)enumerator.Current), wr);
- }
- }
-
- wr.Write(")");
-
- return true;
- }
-
- return node.Accept<bool, TextWriter/*!*/>(OpPrinter, wr);
- }
- public bool Visit(VCExprVar node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- wr.Write(node.Name);
- return true;
- }
- public bool Visit(VCExprQuantifier node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- string/*!*/ quan = node.Quan == Quantifier.ALL ? "Forall" : "Exists";
- Contract.Assert(quan != null);
-
- wr.Write("({0} ", quan);
-
- if (node.TypeParameters.Count > 0) {
- wr.Write("<");
- string/*!*/ sep = "";
- foreach (TypeVariable/*!*/ v in node.TypeParameters) {
- Contract.Assert(v != null);
- wr.Write(sep);
- sep = ", ";
- wr.Write("{0}", v.Name);
- }
- wr.Write("> ");
- }
-
- if (node.BoundVars.Count > 0) {
- string/*!*/ sep = "";
- foreach (VCExprVar/*!*/ v in node.BoundVars) {
- Contract.Assert(v != null);
- wr.Write(sep);
- sep = ", ";
- Print(v, wr);
- }
- wr.Write(" ");
- }
-
- wr.Write(":: ");
-
- if (node.Triggers.Count > 0) {
- wr.Write("{0} ", "{");
- string/*!*/ sep = "";
- foreach (VCTrigger/*!*/ t in node.Triggers) {
- Contract.Assert(t != null);
- wr.Write(sep);
- sep = ", ";
- string/*!*/ sep2 = "";
- foreach (VCExpr/*!*/ e in t.Exprs) {
- Contract.Assert(e != null);
- wr.Write(sep2);
- sep2 = "+";
- Print(e, wr);
- }
- }
- wr.Write(" {0} ", "}");
- }
-
- Print(node.Body, wr);
- wr.Write(")");
- return true;
- }
- public bool Visit(VCExprLet node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- wr.Write("(Let ");
-
- string/*!*/ sep = "";
- foreach (VCExprLetBinding/*!*/ b in node) {
- Contract.Assert(b != null);
- wr.Write(sep);
- sep = ", ";
- Print(b.V, wr);
- wr.Write(" = ");
- Print(b.E, wr);
- }
- wr.Write(" ");
-
- Print(node.Body, wr);
- wr.Write(")");
- return true;
- }
- }
-
- public class VCExprOpPrinter : IVCExprOpVisitor<bool, TextWriter/*!*/> {
- private VCExprPrinter/*!*/ ExprPrinter;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(ExprPrinter != null);
- }
-
-
- public VCExprOpPrinter(VCExprPrinter exprPrinter) {
- Contract.Requires(exprPrinter != null);
- this.ExprPrinter = exprPrinter;
- }
-
- private bool PrintNAry(string op, VCExprNAry node, TextWriter wr) {
- Contract.Requires(wr != null);
- Contract.Requires(node != null);
- Contract.Requires(op != null);
- wr.Write("({0}", op);
- foreach (VCExpr/*!*/ arg in node) {
- Contract.Assert(arg != null);
- wr.Write(" ");
- ExprPrinter.Print(arg, wr);
- }
- wr.Write(")");
- return true;
- }
-
- public bool VisitNotOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("!", node, wr);
- }
- public bool VisitEqOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("==", node, wr);
- }
- public bool VisitNeqOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("!=", node, wr);
- }
- public bool VisitAndOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public bool VisitOrOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- public bool VisitImpliesOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("Implies", node, wr);
- }
- public bool VisitDistinctOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("Distinct", node, wr);
- }
- public bool VisitLabelOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- VCExprLabelOp/*!*/ op = (VCExprLabelOp)node.Op;
- Contract.Assert(op != null);
- return PrintNAry("Label " + op.label, node, wr);
- }
- public bool VisitSelectOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("Select", node, wr);
- }
- public bool VisitStoreOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("Store", node, wr);
- }
- public bool VisitFloatAddOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.add", node, wr);
- }
- public bool VisitFloatSubOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.sub", node, wr);
- }
- public bool VisitFloatMulOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.mul", node, wr);
- }
- public bool VisitFloatDivOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.div", node, wr);
- }
- public bool VisitFloatRemOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.rem", node, wr);
- }
- public bool VisitFloatMinOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.min", node, wr);
- }
- public bool VisitFloatMaxOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.max", node, wr);
- }
- public bool VisitFloatLeqOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.leq", node, wr);
- }
- public bool VisitFloatLtOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.lt", node, wr);
- }
- public bool VisitFloatGeqOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.geq", node, wr);
- }
- public bool VisitFloatGtOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.gt", node, wr);
- }
- public bool VisitFloatEqOp(VCExprNAry node, TextWriter wr)
- {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("fp.eq", node, wr);
- }
- public bool VisitBvOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("Bv", node, wr);
- }
- public bool VisitBvExtractOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("BvExtract", node, wr);
- }
- public bool VisitBvConcatOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("BvConcat", node, wr);
- }
- public bool VisitIfThenElseOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("if-then-else", node, wr);
- }
- public bool VisitCustomOp(VCExprNAry/*!*/ node, TextWriter/*!*/ wr) {
- //Contract.Requires(node!=null);
- //Contract.Requires(wr != null);
- VCExprCustomOp op = (VCExprCustomOp)node.Op;
- return PrintNAry(op.Name, node, wr);
- }
- public bool VisitAddOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- if (CommandLineOptions.Clo.ReflectAdd) {
- return PrintNAry("Reflect$Add", node, wr);
- } else {
- return PrintNAry("+", node, wr);
- }
- }
- public bool VisitSubOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("-", node, wr);
- }
- public bool VisitMulOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("*", node, wr);
- }
- public bool VisitDivOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("div", node, wr);
- }
- public bool VisitModOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("mod", node, wr);
- }
- public bool VisitRealDivOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("/", node, wr);
- }
- public bool VisitPowOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("**", node, wr);
- }
- public bool VisitLtOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("<", node, wr);
- }
- public bool VisitLeOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("<=", node, wr);
- }
- public bool VisitGtOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry(">", node, wr);
- }
- public bool VisitGeOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry(">=", node, wr);
- }
- public bool VisitSubtypeOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("<:", node, wr);
- }
- public bool VisitSubtype3Op(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("<::", node, wr);
- }
- public bool VisitToIntOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("int", node, wr);
- }
- public bool VisitToRealOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- return PrintNAry("real", node, wr);
- }
- public bool VisitBoogieFunctionOp(VCExprNAry node, TextWriter wr) {
- //Contract.Requires(wr != null);
- //Contract.Requires(node != null);
- VCExprBoogieFunctionOp/*!*/ op = (VCExprBoogieFunctionOp)node.Op;
- Contract.Assert(op != null);
- return PrintNAry(op.Func.Name, node, wr);
- }
- }
-
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+
+// A simple visitor for turning a VCExpr into a human-readable string
+// (S-expr syntax)
+
+namespace Microsoft.Boogie.VCExprAST {
+
+ public class VCExprPrinter : IVCExprVisitor<bool, TextWriter/*!*/> {
+ private VCExprOpPrinter OpPrinterVar = null;
+ private VCExprOpPrinter/*!*/ OpPrinter {
+ get {
+ Contract.Ensures(Contract.Result<VCExprOpPrinter>() != null);
+
+ if (OpPrinterVar == null)
+ OpPrinterVar = new VCExprOpPrinter(this);
+ return OpPrinterVar;
+ }
+ }
+
+ public void Print(VCExpr expr, TextWriter wr) {
+ Contract.Requires(wr != null);
+ Contract.Requires(expr != null);
+ expr.Accept<bool, TextWriter/*!*/>(this, wr);
+ }
+
+ public bool Visit(VCExprLiteral node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ if (node == VCExpressionGenerator.True) {
+ wr.Write("true");
+ } else if (node == VCExpressionGenerator.False) {
+ wr.Write("false");
+ } else if (node is VCExprIntLit) {
+ wr.Write(((VCExprIntLit)node).Val);
+ } else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ return true;
+ }
+ public bool Visit(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ VCExprOp/*!*/ op = node.Op;
+ Contract.Assert(op != null);
+
+ if (op.Equals(VCExpressionGenerator.AndOp) ||
+ op.Equals(VCExpressionGenerator.OrOp)) {
+ // handle these operators without recursion
+
+ wr.Write("({0}",
+ op.Equals(VCExpressionGenerator.AndOp) ? "And" : "Or");
+ IEnumerator/*!*/ enumerator = new VCExprNAryUniformOpEnumerator(node);
+ Contract.Assert(enumerator != null);
+ while (enumerator.MoveNext()) {
+ VCExprNAry naryExpr = enumerator.Current as VCExprNAry;
+ if (naryExpr == null || !naryExpr.Op.Equals(op)) {
+ wr.Write(" ");
+ Print(cce.NonNull((VCExpr/*!*/)enumerator.Current), wr);
+ }
+ }
+
+ wr.Write(")");
+
+ return true;
+ }
+
+ return node.Accept<bool, TextWriter/*!*/>(OpPrinter, wr);
+ }
+ public bool Visit(VCExprVar node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ wr.Write(node.Name);
+ return true;
+ }
+ public bool Visit(VCExprQuantifier node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ string/*!*/ quan = node.Quan == Quantifier.ALL ? "Forall" : "Exists";
+ Contract.Assert(quan != null);
+
+ wr.Write("({0} ", quan);
+
+ if (node.TypeParameters.Count > 0) {
+ wr.Write("<");
+ string/*!*/ sep = "";
+ foreach (TypeVariable/*!*/ v in node.TypeParameters) {
+ Contract.Assert(v != null);
+ wr.Write(sep);
+ sep = ", ";
+ wr.Write("{0}", v.Name);
+ }
+ wr.Write("> ");
+ }
+
+ if (node.BoundVars.Count > 0) {
+ string/*!*/ sep = "";
+ foreach (VCExprVar/*!*/ v in node.BoundVars) {
+ Contract.Assert(v != null);
+ wr.Write(sep);
+ sep = ", ";
+ Print(v, wr);
+ }
+ wr.Write(" ");
+ }
+
+ wr.Write(":: ");
+
+ if (node.Triggers.Count > 0) {
+ wr.Write("{0} ", "{");
+ string/*!*/ sep = "";
+ foreach (VCTrigger/*!*/ t in node.Triggers) {
+ Contract.Assert(t != null);
+ wr.Write(sep);
+ sep = ", ";
+ string/*!*/ sep2 = "";
+ foreach (VCExpr/*!*/ e in t.Exprs) {
+ Contract.Assert(e != null);
+ wr.Write(sep2);
+ sep2 = "+";
+ Print(e, wr);
+ }
+ }
+ wr.Write(" {0} ", "}");
+ }
+
+ Print(node.Body, wr);
+ wr.Write(")");
+ return true;
+ }
+ public bool Visit(VCExprLet node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ wr.Write("(Let ");
+
+ string/*!*/ sep = "";
+ foreach (VCExprLetBinding/*!*/ b in node) {
+ Contract.Assert(b != null);
+ wr.Write(sep);
+ sep = ", ";
+ Print(b.V, wr);
+ wr.Write(" = ");
+ Print(b.E, wr);
+ }
+ wr.Write(" ");
+
+ Print(node.Body, wr);
+ wr.Write(")");
+ return true;
+ }
+ }
+
+ public class VCExprOpPrinter : IVCExprOpVisitor<bool, TextWriter/*!*/> {
+ private VCExprPrinter/*!*/ ExprPrinter;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(ExprPrinter != null);
+ }
+
+
+ public VCExprOpPrinter(VCExprPrinter exprPrinter) {
+ Contract.Requires(exprPrinter != null);
+ this.ExprPrinter = exprPrinter;
+ }
+
+ private bool PrintNAry(string op, VCExprNAry node, TextWriter wr) {
+ Contract.Requires(wr != null);
+ Contract.Requires(node != null);
+ Contract.Requires(op != null);
+ wr.Write("({0}", op);
+ foreach (VCExpr/*!*/ arg in node) {
+ Contract.Assert(arg != null);
+ wr.Write(" ");
+ ExprPrinter.Print(arg, wr);
+ }
+ wr.Write(")");
+ return true;
+ }
+
+ public bool VisitNotOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("!", node, wr);
+ }
+ public bool VisitEqOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("==", node, wr);
+ }
+ public bool VisitNeqOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("!=", node, wr);
+ }
+ public bool VisitAndOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public bool VisitOrOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ public bool VisitImpliesOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("Implies", node, wr);
+ }
+ public bool VisitDistinctOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("Distinct", node, wr);
+ }
+ public bool VisitLabelOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ VCExprLabelOp/*!*/ op = (VCExprLabelOp)node.Op;
+ Contract.Assert(op != null);
+ return PrintNAry("Label " + op.label, node, wr);
+ }
+ public bool VisitSelectOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("Select", node, wr);
+ }
+ public bool VisitStoreOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("Store", node, wr);
+ }
+ public bool VisitFloatAddOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.add", node, wr);
+ }
+ public bool VisitFloatSubOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.sub", node, wr);
+ }
+ public bool VisitFloatMulOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.mul", node, wr);
+ }
+ public bool VisitFloatDivOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.div", node, wr);
+ }
+ public bool VisitFloatRemOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.rem", node, wr);
+ }
+ public bool VisitFloatMinOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.min", node, wr);
+ }
+ public bool VisitFloatMaxOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.max", node, wr);
+ }
+ public bool VisitFloatLeqOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.leq", node, wr);
+ }
+ public bool VisitFloatLtOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.lt", node, wr);
+ }
+ public bool VisitFloatGeqOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.geq", node, wr);
+ }
+ public bool VisitFloatGtOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.gt", node, wr);
+ }
+ public bool VisitFloatEqOp(VCExprNAry node, TextWriter wr)
+ {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("fp.eq", node, wr);
+ }
+ public bool VisitBvOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("Bv", node, wr);
+ }
+ public bool VisitBvExtractOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("BvExtract", node, wr);
+ }
+ public bool VisitBvConcatOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("BvConcat", node, wr);
+ }
+ public bool VisitIfThenElseOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("if-then-else", node, wr);
+ }
+ public bool VisitCustomOp(VCExprNAry/*!*/ node, TextWriter/*!*/ wr) {
+ //Contract.Requires(node!=null);
+ //Contract.Requires(wr != null);
+ VCExprCustomOp op = (VCExprCustomOp)node.Op;
+ return PrintNAry(op.Name, node, wr);
+ }
+ public bool VisitAddOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ if (CommandLineOptions.Clo.ReflectAdd) {
+ return PrintNAry("Reflect$Add", node, wr);
+ } else {
+ return PrintNAry("+", node, wr);
+ }
+ }
+ public bool VisitSubOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("-", node, wr);
+ }
+ public bool VisitMulOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("*", node, wr);
+ }
+ public bool VisitDivOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("div", node, wr);
+ }
+ public bool VisitModOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("mod", node, wr);
+ }
+ public bool VisitRealDivOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("/", node, wr);
+ }
+ public bool VisitPowOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("**", node, wr);
+ }
+ public bool VisitLtOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("<", node, wr);
+ }
+ public bool VisitLeOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("<=", node, wr);
+ }
+ public bool VisitGtOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry(">", node, wr);
+ }
+ public bool VisitGeOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry(">=", node, wr);
+ }
+ public bool VisitSubtypeOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("<:", node, wr);
+ }
+ public bool VisitSubtype3Op(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("<::", node, wr);
+ }
+ public bool VisitToIntOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("int", node, wr);
+ }
+ public bool VisitToRealOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ return PrintNAry("real", node, wr);
+ }
+ public bool VisitBoogieFunctionOp(VCExprNAry node, TextWriter wr) {
+ //Contract.Requires(wr != null);
+ //Contract.Requires(node != null);
+ VCExprBoogieFunctionOp/*!*/ op = (VCExprBoogieFunctionOp)node.Op;
+ Contract.Assert(op != null);
+ return PrintNAry(op.Func.Name, node, wr);
+ }
+ }
+
+
+}
diff --git a/Source/VCExpr/VCExprASTVisitors.cs b/Source/VCExpr/VCExprASTVisitors.cs
index c81f69e5..a23aaf8a 100644
--- a/Source/VCExpr/VCExprASTVisitors.cs
+++ b/Source/VCExpr/VCExprASTVisitors.cs
@@ -1,1681 +1,1681 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Text;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Linq;
-using Microsoft.Basetypes;
-
-// Some visitor skeletons for the VCExpression AST
-
-namespace Microsoft.Boogie.VCExprAST {
- using Microsoft.Boogie;
-
- [ContractClass(typeof(IVCExprVisitorContracts<,>))]
- public interface IVCExprVisitor<Result, Arg> {
- Result Visit(VCExprLiteral/*!*/ node, Arg arg);
- Result Visit(VCExprNAry/*!*/ node, Arg arg);
- Result Visit(VCExprVar/*!*/ node, Arg arg);
- Result Visit(VCExprQuantifier/*!*/ node, Arg arg);
- Result Visit(VCExprLet/*!*/ node, Arg arg);
- }
- [ContractClassFor(typeof(IVCExprVisitor<,>))]
- public abstract class IVCExprVisitorContracts<Result, Arg> : IVCExprVisitor<Result, Arg> {
- #region IVCExprVisitor Members
-
- public Result Visit(VCExprLiteral node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result Visit(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result Visit(VCExprVar node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result Visit(VCExprQuantifier node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result Visit(VCExprLet node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- #endregion
- }
- [ContractClass(typeof(IVCExprOpVisitorContracts<,>))]
- public interface IVCExprOpVisitor<Result, Arg> {
- Result VisitNotOp(VCExprNAry node, Arg arg);
- Result VisitEqOp(VCExprNAry node, Arg arg);
- Result VisitNeqOp(VCExprNAry node, Arg arg);
- Result VisitAndOp(VCExprNAry node, Arg arg);
- Result VisitOrOp(VCExprNAry node, Arg arg);
- Result VisitImpliesOp(VCExprNAry node, Arg arg);
- Result VisitDistinctOp(VCExprNAry node, Arg arg);
- Result VisitLabelOp(VCExprNAry node, Arg arg);
- Result VisitSelectOp(VCExprNAry node, Arg arg);
- Result VisitStoreOp(VCExprNAry node, Arg arg);
- Result VisitFloatAddOp(VCExprNAry node, Arg arg);
- Result VisitFloatSubOp(VCExprNAry node, Arg arg);
- Result VisitFloatMulOp(VCExprNAry node, Arg arg);
- Result VisitFloatDivOp(VCExprNAry node, Arg arg);
- Result VisitFloatRemOp(VCExprNAry node, Arg arg);
- Result VisitFloatMinOp(VCExprNAry node, Arg arg);
- Result VisitFloatMaxOp(VCExprNAry node, Arg arg);
- Result VisitFloatLeqOp(VCExprNAry node, Arg arg);
- Result VisitFloatLtOp(VCExprNAry node, Arg arg);
- Result VisitFloatGeqOp(VCExprNAry node, Arg arg);
- Result VisitFloatGtOp(VCExprNAry node, Arg arg);
- Result VisitFloatEqOp(VCExprNAry node, Arg arg);
- Result VisitBvOp(VCExprNAry node, Arg arg);
- Result VisitBvExtractOp(VCExprNAry node, Arg arg);
- Result VisitBvConcatOp(VCExprNAry node, Arg arg);
- Result VisitAddOp(VCExprNAry node, Arg arg);
- Result VisitSubOp(VCExprNAry node, Arg arg);
- Result VisitMulOp(VCExprNAry node, Arg arg);
- Result VisitDivOp(VCExprNAry node, Arg arg);
- Result VisitModOp(VCExprNAry node, Arg arg);
- Result VisitRealDivOp(VCExprNAry node, Arg arg);
- Result VisitPowOp(VCExprNAry node, Arg arg);
- Result VisitLtOp(VCExprNAry node, Arg arg);
- Result VisitLeOp(VCExprNAry node, Arg arg);
- Result VisitGtOp(VCExprNAry node, Arg arg);
- Result VisitGeOp(VCExprNAry node, Arg arg);
- Result VisitSubtypeOp(VCExprNAry node, Arg arg);
- Result VisitSubtype3Op(VCExprNAry node, Arg arg);
- Result VisitToIntOp(VCExprNAry node, Arg arg);
- Result VisitToRealOp(VCExprNAry node, Arg arg);
- Result VisitBoogieFunctionOp(VCExprNAry node, Arg arg);
- Result VisitIfThenElseOp(VCExprNAry node, Arg arg);
- Result VisitCustomOp(VCExprNAry node, Arg arg);
- }
- [ContractClassFor(typeof(IVCExprOpVisitor<,>))]
- public abstract class IVCExprOpVisitorContracts<Result, Arg> : IVCExprOpVisitor<Result, Arg> {
- #region IVCExprOpVisitor<Result,Arg> Members
-
- public Result VisitNotOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitEqOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitNeqOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitAndOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitOrOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitImpliesOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitDistinctOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitLabelOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitSelectOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitStoreOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatAddOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatSubOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatMulOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatDivOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatRemOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatMinOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatMaxOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatLeqOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatLtOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatGeqOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatGtOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitFloatEqOp(VCExprNAry node, Arg arg)
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitBvOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitBvExtractOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitBvConcatOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitAddOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitSubOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitMulOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitDivOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitModOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitRealDivOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitPowOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitLtOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitLeOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitGtOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitGeOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitSubtypeOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitSubtype3Op(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitToIntOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitToRealOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitToFloat(VCExprNAry node, Arg arg) //TODO: modify later
- {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitBoogieFunctionOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitIfThenElseOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- public Result VisitCustomOp(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
-
- #endregion
- }
-
- //////////////////////////////////////////////////////////////////////////////
- // Standard implementations that make it easier to create own visitors
-
- // Simple traversal of VCExprs. The Visit implementations work
- // recursively, apart from the implementation for VCExprNAry that
- // uses a stack when applied to nested nodes with the same
- // operator, e.g., (AND (AND (AND ...) ...) ...). This is necessary
- // to avoid stack overflows
-
-
- [ContractClass(typeof(TraversingVCExprVisitorContracts<,>))]
- public abstract class TraversingVCExprVisitor<Result, Arg>
- : IVCExprVisitor<Result, Arg> {
- protected abstract Result StandardResult(VCExpr/*!*/ node, Arg arg);
-
- public Result Traverse(VCExpr node, Arg arg) {
- Contract.Requires(node != null);
- return node.Accept(this, arg);
- }
-
- public virtual Result Visit(VCExprLiteral node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
-
- public virtual Result Visit(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- Result res = StandardResult(node, arg);
-
-
- if (node.TypeParamArity == 0 &&
- (node.Op == VCExpressionGenerator.AndOp ||
- node.Op == VCExpressionGenerator.OrOp ||
- node.Op == VCExpressionGenerator.ImpliesOp)) {
- Contract.Assert(node.Op != null);
- VCExprOp op = node.Op;
- HashSet<VCExprOp> ops = new HashSet<VCExprOp>();
- ops.Add(VCExpressionGenerator.AndOp);
- ops.Add(VCExpressionGenerator.OrOp);
- ops.Add(VCExpressionGenerator.ImpliesOp);
- IEnumerator enumerator = new VCExprNAryMultiUniformOpEnumerator(node, ops);
- while (enumerator.MoveNext()) {
- VCExpr expr = cce.NonNull((VCExpr)enumerator.Current);
- VCExprNAry naryExpr = expr as VCExprNAry;
- if (naryExpr == null || !ops.Contains(naryExpr.Op)) {
- expr.Accept(this, arg);
- } else {
- StandardResult(expr, arg);
- }
- }
- } else {
- foreach (VCExpr e in node) {
- Contract.Assert(e != null);
- e.Accept(this, arg);
- }
- }
-
- return res;
- }
-
- public virtual Result Visit(VCExprVar node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result Visit(VCExprQuantifier node, Arg arg) {
- //Contract.Requires(node != null);
- Result res = StandardResult(node, arg);
- foreach (VCTrigger/*!*/ trigger in node.Triggers) {
- Contract.Assert(trigger != null);
- foreach (VCExpr/*!*/ expr in trigger.Exprs) {
- Contract.Assert(expr != null);
- expr.Accept(this, arg);
- }
- }
- node.Body.Accept(this, arg);
- return res;
- }
- public virtual Result Visit(VCExprLet node, Arg arg) {
- //Contract.Requires(node != null);
- Result res = StandardResult(node, arg);
- // visit the bound expressions first
- foreach (VCExprLetBinding/*!*/ binding in node) {
- Contract.Assert(binding != null);
- binding.E.Accept(this, arg);
- }
- node.Body.Accept(this, arg);
- return res;
- }
- }
- [ContractClassFor(typeof(TraversingVCExprVisitor<,>))]
- public abstract class TraversingVCExprVisitorContracts<Result, Arg> : TraversingVCExprVisitor<Result, Arg> {
- protected override Result StandardResult(VCExpr node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
- }
- //////////////////////////////////////////////////////////////////////////////
- // Class to iterate over the nodes of a tree of VCExprNAry. This is
- // used to avoid handling such VCExpr recursively, which can easily
- // lead to stack overflows
-
- public class VCExprNAryEnumerator : IEnumerator {
-
- private readonly VCExprNAry/*!*/ CompleteExpr;
- private VCExpr CurrentExpr = null;
- private readonly Stack<VCExpr/*!*/>/*!*/ ExprTodo = new Stack<VCExpr/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(CompleteExpr != null);
- Contract.Invariant(cce.NonNullElements(ExprTodo));
- }
-
- public VCExprNAryEnumerator(VCExprNAry completeExpr) {
- Contract.Requires(completeExpr != null);
- this.CompleteExpr = completeExpr;
- Stack<VCExpr/*!*/>/*!*/ exprTodo = new Stack<VCExpr/*!*/>();
- exprTodo.Push(completeExpr);
- ExprTodo = exprTodo;
- }
-
- // Method using which a subclass can decide whether the
- // subexpressions of an expression should be enumerated as well
- // The default is to enumerate all nodes
- protected virtual bool Descend(VCExprNAry expr) {
- Contract.Requires(expr != null);
- return true;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public bool MoveNext() {
- if (ExprTodo.Count == 0)
- return false;
-
- CurrentExpr = ExprTodo.Pop();
- VCExprNAry currentNAry = CurrentExpr as VCExprNAry;
- if (currentNAry != null && Descend(currentNAry)) {
- for (int i = currentNAry.Arity - 1; i >= 0; --i)
- ExprTodo.Push(currentNAry[i]);
- }
-
- return true;
- }
-
- public object Current {
- get {
- return cce.NonNull(CurrentExpr);
- }
- }
-
- public void Reset() {
- ExprTodo.Clear();
- CurrentExpr = null;
- ExprTodo.Push(CompleteExpr);
- }
- }
-
-
- //////////////////////////////////////////////////////////////////////////////
-
- public class VCExprNAryUniformOpEnumerator : VCExprNAryEnumerator {
- private readonly VCExprOp/*!*/ Op;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Op != null);
- }
-
- public VCExprNAryUniformOpEnumerator(VCExprNAry completeExpr)
- : base(completeExpr) {
- Contract.Requires(completeExpr != null);
-
- this.Op = completeExpr.Op;
- }
- protected override bool Descend(VCExprNAry expr) {
- //Contract.Requires(expr != null);
- return expr.Op.Equals(Op) &&
- // we never skip nodes with type parameters
- // (those are too interesting ...)
- expr.TypeParamArity == 0;
- }
- }
-
- public class VCExprNAryMultiUniformOpEnumerator : VCExprNAryEnumerator
- {
- private readonly HashSet<VCExprOp> Ops;
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(Ops != null);
- }
-
- public VCExprNAryMultiUniformOpEnumerator(VCExprNAry completeExpr, HashSet<VCExprOp> ops)
- : base(completeExpr)
- {
- Contract.Requires(completeExpr != null);
-
- this.Ops = ops;
- }
- protected override bool Descend(VCExprNAry expr)
- {
- return Ops.Contains(expr.Op) && expr.TypeParamArity == 0;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////////
- // Visitor that knows about the variables bound at each location in a VCExpr
-
- public abstract class BoundVarTraversingVCExprVisitor<Result, Arg>
- : TraversingVCExprVisitor<Result, Arg> {
- // Maps with all variables bound above a certain location in the VCExpression.
- // The value of the map tells how often a particular symbol was bound
- private readonly IDictionary<VCExprVar/*!*/, int>/*!*/ BoundTermVarsDict =
- new Dictionary<VCExprVar/*!*/, int>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(BoundTermVarsDict != null);
- Contract.Invariant(BoundTypeVarsDict != null);
- }
-
- private readonly IDictionary<TypeVariable/*!*/, int>/*!*/ BoundTypeVarsDict =
- new Dictionary<TypeVariable/*!*/, int>();
-
- protected ICollection<VCExprVar/*!*/>/*!*/ BoundTermVars {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<VCExprVar>>()));
- return BoundTermVarsDict.Keys;
- }
- }
- protected ICollection<TypeVariable/*!*/>/*!*/ BoundTypeVars {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<TypeVariable>>()));
- return BoundTypeVarsDict.Keys;
- }
- }
-
- private void AddBoundVar<T>(IDictionary<T, int> dict, T sym) {
- Contract.Requires(sym != null);
- Contract.Requires(dict != null);
- int n;
- if (dict.TryGetValue(sym, out n))
- dict[sym] = n + 1;
- else
- dict[sym] = 1;
- }
-
- private void RemoveBoundVar<T>(IDictionary<T/*!*/, int/*!*/>/*!*/ dict, T sym) {
- Contract.Requires(sym != null);
- Contract.Requires(dict != null);
- int n;
- bool b = dict.TryGetValue(sym, out n);
- Contract.Assert(b && n > 0);
- if (n == 1)
- dict.Remove(sym);
- else
- dict[sym] = n - 1;
- }
-
- public override Result Visit(VCExprQuantifier node, Arg arg) {
- Contract.Requires(node != null);
- // we temporarily add bound (term and type) variables to the
- // corresponding lists
- foreach (VCExprVar/*!*/ v in node.BoundVars) {
- Contract.Assert(v != null);
- AddBoundVar<VCExprVar>(BoundTermVarsDict, v);
- }
- foreach (TypeVariable/*!*/ v in node.TypeParameters) {
- Contract.Assert(v != null);
- AddBoundVar<TypeVariable>(BoundTypeVarsDict, v);
- }
-
- Result res;
- try {
- res = VisitAfterBinding(node, arg);
- } finally {
- foreach (VCExprVar/*!*/ v in node.BoundVars) {
- Contract.Assert(v != null);
- RemoveBoundVar<VCExprVar>(BoundTermVarsDict, v);
- }
- foreach (TypeVariable/*!*/ v in node.TypeParameters) {
- Contract.Assert(v != null);
- RemoveBoundVar<TypeVariable>(BoundTypeVarsDict, v);
- }
- }
- return res;
- }
- public override Result Visit(VCExprLet node, Arg arg) {
- Contract.Requires(node != null);
- // we temporarily add bound term variables to the
- // corresponding lists
- foreach (VCExprVar/*!*/ v in node.BoundVars) {
- Contract.Assert(v != null);
- AddBoundVar<VCExprVar>(BoundTermVarsDict, v);
- }
-
- Result res;
- try {
- res = VisitAfterBinding(node, arg);
- } finally {
- foreach (VCExprVar/*!*/ v in node.BoundVars) {
- Contract.Assert(v != null);
- RemoveBoundVar<VCExprVar>(BoundTermVarsDict, v);
- }
- }
- return res;
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // The possibility is provided to look at a (quantifier or let) node
- // after its bound variables have been registered
- // (when overriding the normal visit-methods, the node will be visited
- // before the binding happens)
-
- protected virtual Result VisitAfterBinding(VCExprQuantifier node, Arg arg) {
- Contract.Requires(node != null);
- return base.Visit(node, arg);
- }
-
- protected virtual Result VisitAfterBinding(VCExprLet node, Arg arg) {
- Contract.Requires(node != null);
- return base.Visit(node, arg);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // General visitor for recursively collecting information in a VCExpr.
- // As the visitor is not used anywhere for the time being, it maybe should
- // be removed
-
- [ContractClass(typeof(CollectingVCExprVisitorContracts<,>))]
- public abstract class CollectingVCExprVisitor<Result, Arg>
- : IVCExprVisitor<Result, Arg> {
- protected abstract Result CombineResults(List<Result>/*!*/ results, Arg arg);
-
- public Result Collect(VCExpr node, Arg arg) {
- Contract.Requires(node != null);
- return node.Accept(this, arg);
- }
-
- public virtual Result Visit(VCExprLiteral node, Arg arg) {
- //Contract.Requires(node != null);
- return CombineResults(new List<Result>(), arg);
- }
- public virtual Result Visit(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- List<Result>/*!*/ results = new List<Result>();
- foreach (VCExpr/*!*/ subnode in node) {
- Contract.Assert(subnode != null);
- results.Add(subnode.Accept(this, arg));
- }
- return CombineResults(results, arg);
- }
- public virtual Result Visit(VCExprVar node, Arg arg) {
- //Contract.Requires(node != null);
- return CombineResults(new List<Result>(), arg);
- }
- public virtual Result Visit(VCExprQuantifier node, Arg arg) {
- //Contract.Requires(node != null);
- List<Result>/*!*/ result = new List<Result>();
- result.Add(node.Body.Accept(this, arg));
- foreach (VCTrigger/*!*/ trigger in node.Triggers) {
- Contract.Assert(trigger != null);
- foreach (VCExpr/*!*/ expr in trigger.Exprs) {
- Contract.Assert(expr != null);
- result.Add(expr.Accept(this, arg));
- }
- }
- return CombineResults(result, arg);
- }
- public virtual Result Visit(VCExprLet node, Arg arg) {
- //Contract.Requires(node != null);
- List<Result>/*!*/ results = new List<Result>();
- // visit the bound expressions first
- foreach (VCExprLetBinding/*!*/ binding in node) {
- Contract.Assert(binding != null);
- results.Add(binding.E.Accept(this, arg));
- }
- results.Add(node.Body.Accept(this, arg));
- return CombineResults(results, arg);
- }
- }
- [ContractClassFor(typeof(CollectingVCExprVisitor<,>))]
- public abstract class CollectingVCExprVisitorContracts<Result, Arg> : CollectingVCExprVisitor<Result, Arg> {
- protected override Result CombineResults(List<Result> results, Arg arg) {
- Contract.Requires(results != null);
- throw new NotImplementedException();
- }
- }
- ////////////////////////////////////////////////////////////////////////////
-
- public class SizeComputingVisitor : TraversingVCExprVisitor<bool, bool> {
-
- private int Size = 0;
-
- public static int ComputeSize(VCExpr expr) {
- Contract.Requires(expr != null);
- SizeComputingVisitor/*!*/ visitor = new SizeComputingVisitor();
- visitor.Traverse(expr, true);
- return visitor.Size;
- }
-
- protected override bool StandardResult(VCExpr node, bool arg) {
- //Contract.Requires(node != null);
- Size = Size + 1;
- return true;
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // Collect all free term and type variables in a VCExpr. Type variables
- // can occur free either in the types of bound variables, or in the type
- // parameters of VCExprNAry.
-
- // the result and argument (of type bool) are not used currently
- public class FreeVariableCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
- public readonly Dictionary<VCExprVar/*!*/, object>/*!*/ FreeTermVars = new Dictionary<VCExprVar/*!*/, object>();
- public readonly List<TypeVariable/*!*/>/*!*/ FreeTypeVars = new List<TypeVariable/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(FreeTermVars != null && Contract.ForAll(FreeTermVars, entry => entry.Key != null));
- Contract.Invariant(cce.NonNullElements(FreeTypeVars));
- }
-
-
- // not used
- protected override bool StandardResult(VCExpr node, bool arg) {
- //Contract.Requires(node != null);
- return true;
- }
-
- public static Dictionary<VCExprVar/*!*/, object>/*!*/ FreeTermVariables(VCExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<Dictionary<VCExprVar, object>>() != null);
- Contract.Ensures(Contract.ForAll(Contract.Result<Dictionary<VCExprVar, object>>(), ftv => ftv.Key != null));
- FreeVariableCollector collector = new FreeVariableCollector();
- collector.Traverse(node, true);
- return collector.FreeTermVars;
- }
-
- public static List<TypeVariable/*!*/>/*!*/ FreeTypeVariables(VCExpr node) {
- Contract.Requires(node != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeVariable>>()));
- FreeVariableCollector collector = new FreeVariableCollector();
- collector.Traverse(node, true);
- return collector.FreeTypeVars;
- }
-
- public void Reset() {
- FreeTermVars.Clear();
- FreeTypeVars.Clear();
- }
-
- public void Collect(VCExpr node) {
- Contract.Requires(node != null);
- Traverse(node, true);
- }
-
- public void Collect(Type type) {
- Contract.Requires(type != null);
- AddTypeVariables(type.FreeVariables.ToList());
- }
-
- /////////////////////////////////////////////////////////////////////////
-
- private void CollectTypeVariables(IEnumerable<VCExprVar/*!*/>/*!*/ boundVars) {
- Contract.Requires(cce.NonNullElements(boundVars));
- foreach (VCExprVar/*!*/ var in boundVars) {
- Contract.Assert(var != null);
- Collect(var.Type);
- }
- }
-
- private void AddTypeVariables(IEnumerable<TypeVariable/*!*/>/*!*/ typeVars) {
- Contract.Requires(cce.NonNullElements(typeVars));
- foreach (TypeVariable/*!*/ tvar in typeVars) {
- Contract.Assert(tvar != null);
- if (!BoundTypeVars.Contains(tvar) && !FreeTypeVars.Contains(tvar))
- FreeTypeVars.Add(tvar);
- }
- }
-
- public override bool Visit(VCExprVar node, bool arg) {
- Contract.Requires(node != null);
- if (!BoundTermVars.Contains(node) && !FreeTermVars.ContainsKey(node)) {
- FreeTermVars.Add(node, null);
- Collect(node.Type);
- }
- return true;
- }
-
- public override bool Visit(VCExprNAry node, bool arg) {
- Contract.Requires(node != null);
- foreach (Type/*!*/ t in node.TypeArguments) {
- Contract.Assert(t != null);
- Collect(t);
- }
- return base.Visit(node, arg);
- }
-
- protected override bool VisitAfterBinding(VCExprQuantifier node, bool arg) {
- //Contract.Requires(node != null);
- CollectTypeVariables(node.BoundVars);
- return base.VisitAfterBinding(node, arg);
- }
-
- protected override bool VisitAfterBinding(VCExprLet node, bool arg) {
- //Contract.Requires(node != null);
- CollectTypeVariables(node.BoundVars);
- return base.VisitAfterBinding(node, arg);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Framework for mutating VCExprs
-
- // The Visit implementations in the following visitor work
- // recursively, apart from the implementation for VCExprNAry that
- // uses its own stack when applied to nested nodes with the same
- // operator, e.g., (AND (AND (AND ...) ...) ...). This is necessary
- // to avoid stack overflows (like in TraversingVCExprVisitor)
-
- public abstract class MutatingVCExprVisitor<Arg>
- : IVCExprVisitor<VCExpr/*!*/, Arg> {
- protected readonly VCExpressionGenerator/*!*/ Gen;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Gen != null);
- }
-
-
- public MutatingVCExprVisitor(VCExpressionGenerator gen) {
- Contract.Requires(gen != null);
- this.Gen = gen;
- }
-
- public VCExpr Mutate(VCExpr expr, Arg arg) {
- Contract.Requires(expr != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return expr.Accept(this, arg);
- }
-
- public List<VCExpr/*!*/>/*!*/ MutateSeq(IEnumerable<VCExpr/*!*/>/*!*/ exprs, Arg arg) {
- Contract.Requires(cce.NonNullElements(exprs));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
- List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
- foreach (VCExpr/*!*/ expr in exprs) {
- Contract.Assert(expr != null);
- res.Add(expr.Accept(this, arg));
- }
- return res;
- }
-
- private List<VCExpr/*!*/>/*!*/ MutateList(List<VCExpr/*!*/>/*!*/ exprs, Arg arg) {
- Contract.Requires(cce.NonNullElements(exprs));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
- bool changed = false;
- List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
- foreach (VCExpr/*!*/ expr in exprs) {
- Contract.Assert(expr != null);
- VCExpr/*!*/ newExpr = expr.Accept(this, arg);
- if (!Object.ReferenceEquals(expr, newExpr))
- changed = true;
- res.Add(newExpr);
- }
- if (!changed)
- return exprs;
- return res;
- }
-
- public virtual VCExpr Visit(VCExprLiteral node, Arg arg) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return node;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // Special element used to mark the positions in the todo-stack where
- // results have to be popped from the result-stack.
- private static readonly VCExpr/*!*/ CombineResultsMarker = new VCExprLiteral(Type.Bool);
-
- // The todo-stack contains records of the shape
- //
- // arg0
- // arg1
- // arg2
- // ...
- // CombineResultsMarker
- // f(arg0, arg1, arg2, ...) (the original expression)
-
- private readonly Stack<VCExpr/*!*/>/*!*/ NAryExprTodoStack = new Stack<VCExpr/*!*/>();
- private readonly Stack<VCExpr/*!*/>/*!*/ NAryExprResultStack = new Stack<VCExpr/*!*/>();
- [ContractInvariantMethod]
- void ObjectInvarianta() {
- Contract.Invariant(cce.NonNullElements(NAryExprResultStack));
- Contract.Invariant(cce.NonNullElements(NAryExprTodoStack));
- }
-
-
- private void PushTodo(VCExprNAry exprTodo) {
- Contract.Requires(exprTodo != null);
- NAryExprTodoStack.Push(exprTodo);
- NAryExprTodoStack.Push(CombineResultsMarker);
- for (int i = exprTodo.Arity - 1; i >= 0; --i)
- NAryExprTodoStack.Push(exprTodo[i]);
- }
-
- public virtual bool AvoidVisit(VCExprNAry node, Arg arg)
- {
- return true;
- }
-
- public virtual VCExpr Visit(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- int initialStackSize = NAryExprTodoStack.Count;
- int initialResultStackSize = NAryExprResultStack.Count;
-
- PushTodo(node);
-
- while (NAryExprTodoStack.Count > initialStackSize) {
- VCExpr/*!*/ subExpr = NAryExprTodoStack.Pop();
- Contract.Assert(subExpr != null);
-
- if (Object.ReferenceEquals(subExpr, CombineResultsMarker)) {
- // assemble a result
- VCExprNAry/*!*/ originalExpr = (VCExprNAry)NAryExprTodoStack.Pop();
- Contract.Assert(originalExpr != null);
- VCExprOp/*!*/ op = originalExpr.Op;
- bool changed = false;
- List<VCExpr/*!*/>/*!*/ newSubExprs = new List<VCExpr/*!*/>();
-
- for (int i = op.Arity - 1; i >= 0; --i) {
- VCExpr/*!*/ nextSubExpr = NAryExprResultStack.Pop();
- Contract.Assert(nextSubExpr != null);
- if (!Object.ReferenceEquals(nextSubExpr, originalExpr[i]))
- changed = true;
- newSubExprs.Insert(0, nextSubExpr);
- }
-
- NAryExprResultStack.Push(UpdateModifiedNode(originalExpr, newSubExprs, changed, arg));
- //
- } else {
- //
- VCExprNAry narySubExpr = subExpr as VCExprNAry;
- if (narySubExpr != null && this.AvoidVisit(narySubExpr, arg) &&
- // as in VCExprNAryUniformOpEnumerator, all expressions with
- // type parameters are allowed to be inspected more closely
- narySubExpr.TypeParamArity == 0) {
- PushTodo(narySubExpr);
- } else {
- NAryExprResultStack.Push(subExpr.Accept(this, arg));
- }
- //
- }
- }
-
- Contract.Assert(NAryExprTodoStack.Count == initialStackSize && NAryExprResultStack.Count == initialResultStackSize + 1);
- return NAryExprResultStack.Pop();
- }
-
- protected virtual VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode, List<VCExpr/*!*/>/*!*/ newSubExprs, // has any of the subexpressions changed?
- bool changed,
- Arg arg) {
- Contract.Requires(cce.NonNullElements(newSubExprs));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- if (changed)
- return Gen.Function(originalNode.Op,
- newSubExprs, originalNode.TypeArguments);
- else
- return originalNode;
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public virtual VCExpr Visit(VCExprVar node, Arg arg) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- return node;
- }
-
- protected List<VCTrigger/*!*/>/*!*/ MutateTriggers(List<VCTrigger/*!*/>/*!*/ triggers, Arg arg) {
- Contract.Requires(cce.NonNullElements(triggers));
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCTrigger>>()));
- List<VCTrigger/*!*/>/*!*/ newTriggers = new List<VCTrigger/*!*/>();
- bool changed = false;
- foreach (VCTrigger/*!*/ trigger in triggers) {
- Contract.Assert(trigger != null);
- List<VCExpr/*!*/>/*!*/ exprs = trigger.Exprs;
- List<VCExpr/*!*/>/*!*/ newExprs = MutateList(exprs, arg);
-
- if (Object.ReferenceEquals(exprs, newExprs)) {
- newTriggers.Add(trigger);
- } else {
- newTriggers.Add(Gen.Trigger(trigger.Pos, newExprs));
- changed = true;
- }
- }
- if (!changed)
- return triggers;
- return newTriggers;
- }
-
- public virtual VCExpr Visit(VCExprQuantifier node, Arg arg) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- bool changed = false;
-
- VCExpr/*!*/ body = node.Body;
- Contract.Assert(body != null);
- VCExpr/*!*/ newbody = body.Accept(this, arg);
- Contract.Assert(newbody != null);
- if (!Object.ReferenceEquals(body, newbody))
- changed = true;
-
- // visit the trigger expressions as well
- List<VCTrigger/*!*/>/*!*/ triggers = node.Triggers;
- Contract.Assert(cce.NonNullElements(triggers));
- List<VCTrigger/*!*/>/*!*/ newTriggers = MutateTriggers(triggers, arg);
- Contract.Assert(cce.NonNullElements(newTriggers));
- if (!Object.ReferenceEquals(triggers, newTriggers))
- changed = true;
-
- if (!changed)
- return node;
- return Gen.Quantify(node.Quan, node.TypeParameters, node.BoundVars,
- newTriggers, node.Infos, newbody);
- }
-
- public virtual VCExpr Visit(VCExprLet node, Arg arg) {
- //Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- bool changed = false;
-
- VCExpr/*!*/ body = node.Body;
- VCExpr/*!*/ newbody = body.Accept(this, arg);
- if (!Object.ReferenceEquals(body, newbody))
- changed = true;
-
- List<VCExprLetBinding/*!*/>/*!*/ newbindings = new List<VCExprLetBinding/*!*/>();
- for (int i = 0; i < node.Length; ++i) {
- VCExprLetBinding/*!*/ binding = node[i];
- Contract.Assert(binding != null);
- VCExpr/*!*/ e = binding.E;
- VCExpr/*!*/ newE = e.Accept(this, arg);
- if (Object.ReferenceEquals(e, newE)) {
- newbindings.Add(binding);
- } else {
- changed = true;
- newbindings.Add(Gen.LetBinding(binding.V, newE));
- }
- }
-
- if (!changed)
- return node;
- return Gen.Let(newbindings, newbody);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Substitutions and a visitor for applying substitutions. A substitution can
- // substitute both type variables and term variables
-
- public class VCExprSubstitution {
- private readonly List<IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/>/*!*/ TermSubsts;
- [ContractInvariantMethod]
- void TermSubstsInvariantMethod() {
- Contract.Invariant(TermSubsts != null && Contract.ForAll(TermSubsts, i => cce.NonNullDictionaryAndValues(i)));
- }
- private readonly List<IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/>/*!*/ TypeSubsts;
- [ContractInvariantMethod]
- void TypeSubstsInvariantMethod() {
- Contract.Invariant(TermSubsts != null && Contract.ForAll(TypeSubsts, i => cce.NonNullDictionaryAndValues(i)));
- }
-
- public VCExprSubstitution(IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/ termSubst, IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ typeSubst) {
- Contract.Requires(cce.NonNullDictionaryAndValues(termSubst));
- Contract.Requires(cce.NonNullDictionaryAndValues(typeSubst));
- List<IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/>/*!*/ termSubsts =
- new List<IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/>();
- termSubsts.Add(termSubst);
- List<IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/>/*!*/ typeSubsts =
- new List<IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/>();
- typeSubsts.Add(typeSubst);
- this.TermSubsts = termSubsts;
- this.TypeSubsts = typeSubsts;
- }
-
- public VCExprSubstitution()
- : this(new Dictionary<VCExprVar/*!*/, VCExpr/*!*/>(), new Dictionary<TypeVariable/*!*/, Type/*!*/>()) {
-
- }
-
- public void PushScope() {
- TermSubsts.Add(new Dictionary<VCExprVar/*!*/, VCExpr/*!*/>());
- TypeSubsts.Add(new Dictionary<TypeVariable/*!*/, Type/*!*/>());
- }
-
- public void PopScope() {
- TermSubsts.RemoveAt(TermSubsts.Count - 1);
- TypeSubsts.RemoveAt(TypeSubsts.Count - 1);
- }
-
- public VCExpr this[VCExprVar/*!*/ var] {
- get {
- Contract.Requires(var != null);
- VCExpr res;
- for (int i = TermSubsts.Count - 1; i >= 0; --i) {
- if (TermSubsts[i].TryGetValue(var, out res))
- return res;
- }
- return null;
- }
- set {
- TermSubsts[TermSubsts.Count - 1][var] = cce.NonNull(value);
- }
- }
-
- public Type this[TypeVariable/*!*/ var] {
- get {
- Contract.Requires(var != null);
- Type res;
- for (int i = TypeSubsts.Count - 1; i >= 0; --i) {
- if (TypeSubsts[i].TryGetValue(var, out res))
- return res;
- }
- return null;
- }
- set {
- TypeSubsts[TypeSubsts.Count - 1][var] = cce.NonNull(value);
- }
- }
-
- public bool ContainsKey(VCExprVar var) {
- Contract.Requires(var != null);
- return this[var] != null;
- }
-
- public bool ContainsKey(TypeVariable var) {
- Contract.Requires(var != null);
- return this[var] != null;
- }
-
- public bool TermSubstIsEmpty {
- get {
- return TermSubsts.All(dict => !dict.Any());
- }
- }
-
- public bool TypeSubstIsEmpty {
- get {
- return TypeSubsts.All(dict => !dict.Any());
- }
- }
-
- public IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ ToTypeSubst {
- get {
- Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ res = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
- foreach (IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict in TypeSubsts) {
- foreach (KeyValuePair<TypeVariable/*!*/, Type/*!*/> pair in dict) {
- Contract.Assert(cce.NonNullElements(pair));
- // later ones overwrite earlier ones
- res[pair.Key] = pair.Value;
- }
- }
- return res;
- }
- }
-
- // the variables that are not mapped to themselves
- public IEnumerable<VCExprVar/*!*/>/*!*/ TermDomain {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<VCExprVar>>()));
- HashSet<VCExprVar/*!*/>/*!*/ domain = new HashSet<VCExprVar/*!*/>();
- foreach (IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/ dict in TermSubsts) {
- Contract.Assert(dict != null);
- foreach (VCExprVar/*!*/ var in dict.Keys) {
- Contract.Assert(var != null);
- if (!var.Equals(this[var]))
- domain.Add(var);
- }
- }
- return domain;
- }
- }
-
- // the variables that are not mapped to themselves
- public IEnumerable<TypeVariable/*!*/>/*!*/ TypeDomain {
- get {
- Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<TypeVariable>>()));
- HashSet<TypeVariable/*!*/>/*!*/ domain = new HashSet<TypeVariable/*!*/>();
- foreach (IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict in TypeSubsts) {
- Contract.Assert(dict != null);
- foreach (TypeVariable/*!*/ var in dict.Keys) {
- Contract.Assert(var != null);
- if (!var.Equals(this[var]))
- domain.Add(var);
- }
- }
- return domain;
- }
- }
-
- public FreeVariableCollector/*!*/ Codomains {
- get {
- Contract.Ensures(Contract.Result<FreeVariableCollector>() != null);
-
- FreeVariableCollector/*!*/ coll = new FreeVariableCollector();
- foreach (VCExprVar/*!*/ var in TermDomain)
- coll.Collect(cce.NonNull(this)[var]);
- foreach (TypeVariable/*!*/ var in TypeDomain)
- coll.Collect(cce.NonNull(this)[var]);
- return coll;
- }
- }
-
- public VCExprSubstitution Clone() {
- Contract.Ensures(Contract.Result<VCExprSubstitution>() != null);
- VCExprSubstitution/*!*/ res = new VCExprSubstitution();
- foreach (IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/ dict in TermSubsts)
- res.TermSubsts.Add(HelperFuns.Clone(dict));
- foreach (IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict in TypeSubsts)
- res.TypeSubsts.Add(HelperFuns.Clone(dict));
- return res;
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
-
- public class SubstitutingVCExprVisitor
- : MutatingVCExprVisitor<VCExprSubstitution/*!*/> {
- public SubstitutingVCExprVisitor(VCExpressionGenerator gen)
- : base(gen) {
- Contract.Requires(gen != null);
-
- }
-
- // when descending across a binder, we have to check that no collisions
- // or variable capture can occur. if this might happen, we replace the
- // term and type variables bound by the binder with fresh variables
- private bool CollisionPossible(IEnumerable<TypeVariable/*!*/>/*!*/ typeParams, IEnumerable<VCExprVar/*!*/>/*!*/ boundVars, VCExprSubstitution/*!*/ substitution) {
- Contract.Requires(cce.NonNullElements(typeParams));
- Contract.Requires(cce.NonNullElements(boundVars));
- Contract.Requires(substitution != null);
- // variables can be shadowed by a binder
- if (typeParams.Any(var => substitution.ContainsKey(var)) ||
- boundVars.Any(var => substitution.ContainsKey(var)))
- return true;
- // compute the codomain of the substitution
- FreeVariableCollector coll = substitution.Codomains;
- Contract.Assert(coll != null);
- // variables could be captured when applying the substitution
- return typeParams.Any(var => coll.FreeTypeVars.Contains(var)) ||
- boundVars.Any(var => coll.FreeTermVars.ContainsKey(var));
- }
-
- // can be overwritten if names of bound variables are to be changed
- protected virtual string ChooseNewVariableName(string oldName) {
- Contract.Requires(oldName != null);
- Contract.Ensures(Contract.Result<string>() != null);
- return oldName;
- }
-
- // handle type parameters in VCExprNAry
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode, List<VCExpr/*!*/>/*!*/ newSubExprs, bool changed, VCExprSubstitution/*!*/ substitution) {
- //Contract.Requires(originalNode != null);
- //Contract.Requires(cce.NonNullElements(newSubExprs));
- //Contract.Requires(substitution != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- List<Type/*!*/>/*!*/ typeParams = new List<Type/*!*/>();
- foreach (Type/*!*/ t in originalNode.TypeArguments) {
- Contract.Assert(t != null);
- Type/*!*/ newType = t.Substitute(substitution.ToTypeSubst);
- Contract.Assert(newType != null);
- if (!ReferenceEquals(t, newType))
- changed = true;
- typeParams.Add(newType);
- }
- if (changed)
- return Gen.Function(originalNode.Op, newSubExprs, typeParams);
- else
- return originalNode;
- }
-
- public override VCExpr/*!*/ Visit(VCExprQuantifier/*!*/ node, VCExprSubstitution/*!*/ substitution) {
- Contract.Requires(node != null);
- Contract.Requires(substitution != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- // the default is to refresh bound variables only if necessary
- // because of collisions
- return Visit(node, substitution, false);
- }
-
- public VCExpr/*!*/ Visit(VCExprQuantifier/*!*/ node, VCExprSubstitution/*!*/ substitution, bool refreshBoundVariables) {
- Contract.Requires(node != null);
- Contract.Requires(substitution != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- substitution.PushScope();
- try {
-
- List<TypeVariable/*!*/>/*!*/ typeParams = node.TypeParameters;
- Contract.Assert(cce.NonNullElements(typeParams));
- bool refreshAllVariables = refreshBoundVariables ||
- CollisionPossible(node.TypeParameters, node.BoundVars, substitution);
- if (refreshAllVariables) {
- // we introduce fresh type variables to ensure that none gets captured
- typeParams = new List<TypeVariable/*!*/>();
- foreach (TypeVariable/*!*/ var in node.TypeParameters) {
- Contract.Assert(var != null);
- TypeVariable/*!*/ freshVar =
- new TypeVariable(Token.NoToken, ChooseNewVariableName(var.Name));
- Contract.Assert(freshVar != null);
- typeParams.Add(freshVar);
- substitution[var] = freshVar;
- // this might overwrite other elements of the substitution, deliberately
- }
- }
-
- List<VCExprVar/*!*/>/*!*/ boundVars = node.BoundVars;
- Contract.Assert(cce.NonNullElements(boundVars));
- if (refreshAllVariables || !substitution.TypeSubstIsEmpty) {
- // collisions are possible, or we also substitute type variables. in this case
- // the bound term variables have to be replaced with fresh variables with the
- // right types
- boundVars = new List<VCExprVar/*!*/>();
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ typeSubst = substitution.ToTypeSubst;
- Contract.Assert(cce.NonNullDictionaryAndValues(typeSubst));
- foreach (VCExprVar/*!*/ var in node.BoundVars) {
- Contract.Assert(var != null);
- VCExprVar/*!*/ freshVar =
- Gen.Variable(ChooseNewVariableName(var.Name),
- var.Type.Substitute(typeSubst));
- Contract.Assert(freshVar != null);
- boundVars.Add(freshVar);
- substitution[var] = freshVar;
- // this might overwrite other elements of the substitution, deliberately
- }
- }
-
- List<VCTrigger/*!*/>/*!*/ newTriggers = new List<VCTrigger/*!*/>();
- foreach (VCTrigger/*!*/ trigger in node.Triggers) {
- Contract.Assert(trigger != null);
- newTriggers.Add(Gen.Trigger(trigger.Pos, MutateSeq(trigger.Exprs, substitution)));
- }
-
- VCExpr/*!*/ newBody = Mutate(node.Body, substitution);
- Contract.Assert(newBody != null);
-
- return Gen.Quantify(node.Quan, typeParams, boundVars,
- newTriggers, node.Infos, newBody);
-
- } finally {
- substitution.PopScope();
- }
- }
-
- public override VCExpr Visit(VCExprVar node, VCExprSubstitution substitution) {
- Contract.Requires(substitution != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr res = substitution[node];
- if (res != null)
- return res;
- return node;
- }
-
- public override VCExpr Visit(VCExprLet node, VCExprSubstitution substitution) {
- Contract.Requires(substitution != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- // the default is to refresh bound variables only if necessary
- // because of collisions
- return Visit(node, substitution, false);
- }
-
- public VCExpr Visit(VCExprLet node, VCExprSubstitution substitution, bool refreshBoundVariables) {
- Contract.Requires(substitution != null);
- Contract.Requires(node != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
- // let-expressions do not have type parameters (fortunately ...)
- substitution.PushScope();
- try {
-
- bool refreshAllVariables =
- refreshBoundVariables ||
- !substitution.TypeSubstIsEmpty ||
- CollisionPossible(new List<TypeVariable/*!*/>(), node.BoundVars, substitution);
-
- List<VCExprVar/*!*/>/*!*/ newBoundVars = node.BoundVars;
- Contract.Assert(cce.NonNullElements(newBoundVars));
- if (refreshAllVariables) {
- // collisions are possible, or we also substitute type variables. in this case
- // the bound term variables have to be replaced with fresh variables with the
- // right types
- newBoundVars = new List<VCExprVar/*!*/>();
- IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ typeSubst = substitution.ToTypeSubst;
- Contract.Assert(cce.NonNullDictionaryAndValues(typeSubst));
- foreach (VCExprVar/*!*/ var in node.BoundVars) {
- Contract.Assert(var != null);
- VCExprVar/*!*/ freshVar =
- Gen.Variable(ChooseNewVariableName(var.Name),
- var.Type.Substitute(typeSubst));
- Contract.Assert(freshVar != null);
- newBoundVars.Add(freshVar);
- substitution[var] = freshVar;
- // this might overwrite other elements of the substitution, deliberately
- }
- }
-
- List<VCExprLetBinding/*!*/>/*!*/ newbindings = new List<VCExprLetBinding/*!*/>();
- for (int i = 0; i < node.Length; ++i) {
- VCExprLetBinding/*!*/ binding = node[i];
- Contract.Assert(binding != null);
- newbindings.Add(Gen.LetBinding(newBoundVars[i], Mutate(binding.E, substitution)));
- }
-
- VCExpr/*!*/ newBody = Mutate(node.Body, substitution);
- Contract.Assert(newBody != null);
- return Gen.Let(newbindings, newBody);
-
- } finally {
- substitution.PopScope();
- }
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- [ContractClassFor(typeof(StandardVCExprOpVisitor<,>))]
- public abstract class StandardVCExprOpVisitorContracts<Result, Arg> : StandardVCExprOpVisitor<Result, Arg> {
- protected override Result StandardResult(VCExprNAry node, Arg arg) {
- Contract.Requires(node != null);
- throw new NotImplementedException();
- }
- }
-
-
- [ContractClass(typeof(StandardVCExprOpVisitorContracts<,>))]
- public abstract class StandardVCExprOpVisitor<Result, Arg>
- : IVCExprOpVisitor<Result, Arg> {
- protected abstract Result StandardResult(VCExprNAry/*!*/ node, Arg arg);
-
- public virtual Result VisitNotOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitEqOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitNeqOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitAndOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitOrOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitImpliesOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitDistinctOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitLabelOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitSelectOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitStoreOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatAddOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatSubOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatMulOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatDivOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatRemOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatMinOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatMaxOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatLeqOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatLtOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatGeqOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatGtOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitFloatEqOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitBvOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitBvExtractOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitBvConcatOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitIfThenElseOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitCustomOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitAddOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitSubOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitMulOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitDivOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitModOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitRealDivOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitPowOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitLtOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitLeOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitGtOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitGeOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitSubtypeOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitSubtype3Op(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitToIntOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitToRealOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitToFloatOp(VCExprNAry node, Arg arg)
- {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- public virtual Result VisitBoogieFunctionOp(VCExprNAry node, Arg arg) {
- //Contract.Requires(node != null);
- return StandardResult(node, arg);
- }
- }
-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using Microsoft.Basetypes;
+
+// Some visitor skeletons for the VCExpression AST
+
+namespace Microsoft.Boogie.VCExprAST {
+ using Microsoft.Boogie;
+
+ [ContractClass(typeof(IVCExprVisitorContracts<,>))]
+ public interface IVCExprVisitor<Result, Arg> {
+ Result Visit(VCExprLiteral/*!*/ node, Arg arg);
+ Result Visit(VCExprNAry/*!*/ node, Arg arg);
+ Result Visit(VCExprVar/*!*/ node, Arg arg);
+ Result Visit(VCExprQuantifier/*!*/ node, Arg arg);
+ Result Visit(VCExprLet/*!*/ node, Arg arg);
+ }
+ [ContractClassFor(typeof(IVCExprVisitor<,>))]
+ public abstract class IVCExprVisitorContracts<Result, Arg> : IVCExprVisitor<Result, Arg> {
+ #region IVCExprVisitor Members
+
+ public Result Visit(VCExprLiteral node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result Visit(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result Visit(VCExprVar node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result Visit(VCExprQuantifier node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result Visit(VCExprLet node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+ [ContractClass(typeof(IVCExprOpVisitorContracts<,>))]
+ public interface IVCExprOpVisitor<Result, Arg> {
+ Result VisitNotOp(VCExprNAry node, Arg arg);
+ Result VisitEqOp(VCExprNAry node, Arg arg);
+ Result VisitNeqOp(VCExprNAry node, Arg arg);
+ Result VisitAndOp(VCExprNAry node, Arg arg);
+ Result VisitOrOp(VCExprNAry node, Arg arg);
+ Result VisitImpliesOp(VCExprNAry node, Arg arg);
+ Result VisitDistinctOp(VCExprNAry node, Arg arg);
+ Result VisitLabelOp(VCExprNAry node, Arg arg);
+ Result VisitSelectOp(VCExprNAry node, Arg arg);
+ Result VisitStoreOp(VCExprNAry node, Arg arg);
+ Result VisitFloatAddOp(VCExprNAry node, Arg arg);
+ Result VisitFloatSubOp(VCExprNAry node, Arg arg);
+ Result VisitFloatMulOp(VCExprNAry node, Arg arg);
+ Result VisitFloatDivOp(VCExprNAry node, Arg arg);
+ Result VisitFloatRemOp(VCExprNAry node, Arg arg);
+ Result VisitFloatMinOp(VCExprNAry node, Arg arg);
+ Result VisitFloatMaxOp(VCExprNAry node, Arg arg);
+ Result VisitFloatLeqOp(VCExprNAry node, Arg arg);
+ Result VisitFloatLtOp(VCExprNAry node, Arg arg);
+ Result VisitFloatGeqOp(VCExprNAry node, Arg arg);
+ Result VisitFloatGtOp(VCExprNAry node, Arg arg);
+ Result VisitFloatEqOp(VCExprNAry node, Arg arg);
+ Result VisitBvOp(VCExprNAry node, Arg arg);
+ Result VisitBvExtractOp(VCExprNAry node, Arg arg);
+ Result VisitBvConcatOp(VCExprNAry node, Arg arg);
+ Result VisitAddOp(VCExprNAry node, Arg arg);
+ Result VisitSubOp(VCExprNAry node, Arg arg);
+ Result VisitMulOp(VCExprNAry node, Arg arg);
+ Result VisitDivOp(VCExprNAry node, Arg arg);
+ Result VisitModOp(VCExprNAry node, Arg arg);
+ Result VisitRealDivOp(VCExprNAry node, Arg arg);
+ Result VisitPowOp(VCExprNAry node, Arg arg);
+ Result VisitLtOp(VCExprNAry node, Arg arg);
+ Result VisitLeOp(VCExprNAry node, Arg arg);
+ Result VisitGtOp(VCExprNAry node, Arg arg);
+ Result VisitGeOp(VCExprNAry node, Arg arg);
+ Result VisitSubtypeOp(VCExprNAry node, Arg arg);
+ Result VisitSubtype3Op(VCExprNAry node, Arg arg);
+ Result VisitToIntOp(VCExprNAry node, Arg arg);
+ Result VisitToRealOp(VCExprNAry node, Arg arg);
+ Result VisitBoogieFunctionOp(VCExprNAry node, Arg arg);
+ Result VisitIfThenElseOp(VCExprNAry node, Arg arg);
+ Result VisitCustomOp(VCExprNAry node, Arg arg);
+ }
+ [ContractClassFor(typeof(IVCExprOpVisitor<,>))]
+ public abstract class IVCExprOpVisitorContracts<Result, Arg> : IVCExprOpVisitor<Result, Arg> {
+ #region IVCExprOpVisitor<Result,Arg> Members
+
+ public Result VisitNotOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitEqOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitNeqOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitAndOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitOrOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitImpliesOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitDistinctOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitLabelOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitSelectOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitStoreOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatAddOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatSubOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatMulOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatDivOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatRemOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatMinOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatMaxOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatLeqOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatLtOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatGeqOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatGtOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitFloatEqOp(VCExprNAry node, Arg arg)
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitBvOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitBvExtractOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitBvConcatOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitAddOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitSubOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitMulOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitDivOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitModOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitRealDivOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitPowOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitLtOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitLeOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitGtOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitGeOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitSubtypeOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitSubtype3Op(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitToIntOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitToRealOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitToFloat(VCExprNAry node, Arg arg) //TODO: modify later
+ {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitBoogieFunctionOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitIfThenElseOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ public Result VisitCustomOp(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Standard implementations that make it easier to create own visitors
+
+ // Simple traversal of VCExprs. The Visit implementations work
+ // recursively, apart from the implementation for VCExprNAry that
+ // uses a stack when applied to nested nodes with the same
+ // operator, e.g., (AND (AND (AND ...) ...) ...). This is necessary
+ // to avoid stack overflows
+
+
+ [ContractClass(typeof(TraversingVCExprVisitorContracts<,>))]
+ public abstract class TraversingVCExprVisitor<Result, Arg>
+ : IVCExprVisitor<Result, Arg> {
+ protected abstract Result StandardResult(VCExpr/*!*/ node, Arg arg);
+
+ public Result Traverse(VCExpr node, Arg arg) {
+ Contract.Requires(node != null);
+ return node.Accept(this, arg);
+ }
+
+ public virtual Result Visit(VCExprLiteral node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+
+ public virtual Result Visit(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ Result res = StandardResult(node, arg);
+
+
+ if (node.TypeParamArity == 0 &&
+ (node.Op == VCExpressionGenerator.AndOp ||
+ node.Op == VCExpressionGenerator.OrOp ||
+ node.Op == VCExpressionGenerator.ImpliesOp)) {
+ Contract.Assert(node.Op != null);
+ VCExprOp op = node.Op;
+ HashSet<VCExprOp> ops = new HashSet<VCExprOp>();
+ ops.Add(VCExpressionGenerator.AndOp);
+ ops.Add(VCExpressionGenerator.OrOp);
+ ops.Add(VCExpressionGenerator.ImpliesOp);
+ IEnumerator enumerator = new VCExprNAryMultiUniformOpEnumerator(node, ops);
+ while (enumerator.MoveNext()) {
+ VCExpr expr = cce.NonNull((VCExpr)enumerator.Current);
+ VCExprNAry naryExpr = expr as VCExprNAry;
+ if (naryExpr == null || !ops.Contains(naryExpr.Op)) {
+ expr.Accept(this, arg);
+ } else {
+ StandardResult(expr, arg);
+ }
+ }
+ } else {
+ foreach (VCExpr e in node) {
+ Contract.Assert(e != null);
+ e.Accept(this, arg);
+ }
+ }
+
+ return res;
+ }
+
+ public virtual Result Visit(VCExprVar node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result Visit(VCExprQuantifier node, Arg arg) {
+ //Contract.Requires(node != null);
+ Result res = StandardResult(node, arg);
+ foreach (VCTrigger/*!*/ trigger in node.Triggers) {
+ Contract.Assert(trigger != null);
+ foreach (VCExpr/*!*/ expr in trigger.Exprs) {
+ Contract.Assert(expr != null);
+ expr.Accept(this, arg);
+ }
+ }
+ node.Body.Accept(this, arg);
+ return res;
+ }
+ public virtual Result Visit(VCExprLet node, Arg arg) {
+ //Contract.Requires(node != null);
+ Result res = StandardResult(node, arg);
+ // visit the bound expressions first
+ foreach (VCExprLetBinding/*!*/ binding in node) {
+ Contract.Assert(binding != null);
+ binding.E.Accept(this, arg);
+ }
+ node.Body.Accept(this, arg);
+ return res;
+ }
+ }
+ [ContractClassFor(typeof(TraversingVCExprVisitor<,>))]
+ public abstract class TraversingVCExprVisitorContracts<Result, Arg> : TraversingVCExprVisitor<Result, Arg> {
+ protected override Result StandardResult(VCExpr node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+ }
+ //////////////////////////////////////////////////////////////////////////////
+ // Class to iterate over the nodes of a tree of VCExprNAry. This is
+ // used to avoid handling such VCExpr recursively, which can easily
+ // lead to stack overflows
+
+ public class VCExprNAryEnumerator : IEnumerator {
+
+ private readonly VCExprNAry/*!*/ CompleteExpr;
+ private VCExpr CurrentExpr = null;
+ private readonly Stack<VCExpr/*!*/>/*!*/ ExprTodo = new Stack<VCExpr/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(CompleteExpr != null);
+ Contract.Invariant(cce.NonNullElements(ExprTodo));
+ }
+
+ public VCExprNAryEnumerator(VCExprNAry completeExpr) {
+ Contract.Requires(completeExpr != null);
+ this.CompleteExpr = completeExpr;
+ Stack<VCExpr/*!*/>/*!*/ exprTodo = new Stack<VCExpr/*!*/>();
+ exprTodo.Push(completeExpr);
+ ExprTodo = exprTodo;
+ }
+
+ // Method using which a subclass can decide whether the
+ // subexpressions of an expression should be enumerated as well
+ // The default is to enumerate all nodes
+ protected virtual bool Descend(VCExprNAry expr) {
+ Contract.Requires(expr != null);
+ return true;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public bool MoveNext() {
+ if (ExprTodo.Count == 0)
+ return false;
+
+ CurrentExpr = ExprTodo.Pop();
+ VCExprNAry currentNAry = CurrentExpr as VCExprNAry;
+ if (currentNAry != null && Descend(currentNAry)) {
+ for (int i = currentNAry.Arity - 1; i >= 0; --i)
+ ExprTodo.Push(currentNAry[i]);
+ }
+
+ return true;
+ }
+
+ public object Current {
+ get {
+ return cce.NonNull(CurrentExpr);
+ }
+ }
+
+ public void Reset() {
+ ExprTodo.Clear();
+ CurrentExpr = null;
+ ExprTodo.Push(CompleteExpr);
+ }
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////
+
+ public class VCExprNAryUniformOpEnumerator : VCExprNAryEnumerator {
+ private readonly VCExprOp/*!*/ Op;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Op != null);
+ }
+
+ public VCExprNAryUniformOpEnumerator(VCExprNAry completeExpr)
+ : base(completeExpr) {
+ Contract.Requires(completeExpr != null);
+
+ this.Op = completeExpr.Op;
+ }
+ protected override bool Descend(VCExprNAry expr) {
+ //Contract.Requires(expr != null);
+ return expr.Op.Equals(Op) &&
+ // we never skip nodes with type parameters
+ // (those are too interesting ...)
+ expr.TypeParamArity == 0;
+ }
+ }
+
+ public class VCExprNAryMultiUniformOpEnumerator : VCExprNAryEnumerator
+ {
+ private readonly HashSet<VCExprOp> Ops;
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(Ops != null);
+ }
+
+ public VCExprNAryMultiUniformOpEnumerator(VCExprNAry completeExpr, HashSet<VCExprOp> ops)
+ : base(completeExpr)
+ {
+ Contract.Requires(completeExpr != null);
+
+ this.Ops = ops;
+ }
+ protected override bool Descend(VCExprNAry expr)
+ {
+ return Ops.Contains(expr.Op) && expr.TypeParamArity == 0;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Visitor that knows about the variables bound at each location in a VCExpr
+
+ public abstract class BoundVarTraversingVCExprVisitor<Result, Arg>
+ : TraversingVCExprVisitor<Result, Arg> {
+ // Maps with all variables bound above a certain location in the VCExpression.
+ // The value of the map tells how often a particular symbol was bound
+ private readonly IDictionary<VCExprVar/*!*/, int>/*!*/ BoundTermVarsDict =
+ new Dictionary<VCExprVar/*!*/, int>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(BoundTermVarsDict != null);
+ Contract.Invariant(BoundTypeVarsDict != null);
+ }
+
+ private readonly IDictionary<TypeVariable/*!*/, int>/*!*/ BoundTypeVarsDict =
+ new Dictionary<TypeVariable/*!*/, int>();
+
+ protected ICollection<VCExprVar/*!*/>/*!*/ BoundTermVars {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<VCExprVar>>()));
+ return BoundTermVarsDict.Keys;
+ }
+ }
+ protected ICollection<TypeVariable/*!*/>/*!*/ BoundTypeVars {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<ICollection<TypeVariable>>()));
+ return BoundTypeVarsDict.Keys;
+ }
+ }
+
+ private void AddBoundVar<T>(IDictionary<T, int> dict, T sym) {
+ Contract.Requires(sym != null);
+ Contract.Requires(dict != null);
+ int n;
+ if (dict.TryGetValue(sym, out n))
+ dict[sym] = n + 1;
+ else
+ dict[sym] = 1;
+ }
+
+ private void RemoveBoundVar<T>(IDictionary<T/*!*/, int/*!*/>/*!*/ dict, T sym) {
+ Contract.Requires(sym != null);
+ Contract.Requires(dict != null);
+ int n;
+ bool b = dict.TryGetValue(sym, out n);
+ Contract.Assert(b && n > 0);
+ if (n == 1)
+ dict.Remove(sym);
+ else
+ dict[sym] = n - 1;
+ }
+
+ public override Result Visit(VCExprQuantifier node, Arg arg) {
+ Contract.Requires(node != null);
+ // we temporarily add bound (term and type) variables to the
+ // corresponding lists
+ foreach (VCExprVar/*!*/ v in node.BoundVars) {
+ Contract.Assert(v != null);
+ AddBoundVar<VCExprVar>(BoundTermVarsDict, v);
+ }
+ foreach (TypeVariable/*!*/ v in node.TypeParameters) {
+ Contract.Assert(v != null);
+ AddBoundVar<TypeVariable>(BoundTypeVarsDict, v);
+ }
+
+ Result res;
+ try {
+ res = VisitAfterBinding(node, arg);
+ } finally {
+ foreach (VCExprVar/*!*/ v in node.BoundVars) {
+ Contract.Assert(v != null);
+ RemoveBoundVar<VCExprVar>(BoundTermVarsDict, v);
+ }
+ foreach (TypeVariable/*!*/ v in node.TypeParameters) {
+ Contract.Assert(v != null);
+ RemoveBoundVar<TypeVariable>(BoundTypeVarsDict, v);
+ }
+ }
+ return res;
+ }
+ public override Result Visit(VCExprLet node, Arg arg) {
+ Contract.Requires(node != null);
+ // we temporarily add bound term variables to the
+ // corresponding lists
+ foreach (VCExprVar/*!*/ v in node.BoundVars) {
+ Contract.Assert(v != null);
+ AddBoundVar<VCExprVar>(BoundTermVarsDict, v);
+ }
+
+ Result res;
+ try {
+ res = VisitAfterBinding(node, arg);
+ } finally {
+ foreach (VCExprVar/*!*/ v in node.BoundVars) {
+ Contract.Assert(v != null);
+ RemoveBoundVar<VCExprVar>(BoundTermVarsDict, v);
+ }
+ }
+ return res;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // The possibility is provided to look at a (quantifier or let) node
+ // after its bound variables have been registered
+ // (when overriding the normal visit-methods, the node will be visited
+ // before the binding happens)
+
+ protected virtual Result VisitAfterBinding(VCExprQuantifier node, Arg arg) {
+ Contract.Requires(node != null);
+ return base.Visit(node, arg);
+ }
+
+ protected virtual Result VisitAfterBinding(VCExprLet node, Arg arg) {
+ Contract.Requires(node != null);
+ return base.Visit(node, arg);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // General visitor for recursively collecting information in a VCExpr.
+ // As the visitor is not used anywhere for the time being, it maybe should
+ // be removed
+
+ [ContractClass(typeof(CollectingVCExprVisitorContracts<,>))]
+ public abstract class CollectingVCExprVisitor<Result, Arg>
+ : IVCExprVisitor<Result, Arg> {
+ protected abstract Result CombineResults(List<Result>/*!*/ results, Arg arg);
+
+ public Result Collect(VCExpr node, Arg arg) {
+ Contract.Requires(node != null);
+ return node.Accept(this, arg);
+ }
+
+ public virtual Result Visit(VCExprLiteral node, Arg arg) {
+ //Contract.Requires(node != null);
+ return CombineResults(new List<Result>(), arg);
+ }
+ public virtual Result Visit(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ List<Result>/*!*/ results = new List<Result>();
+ foreach (VCExpr/*!*/ subnode in node) {
+ Contract.Assert(subnode != null);
+ results.Add(subnode.Accept(this, arg));
+ }
+ return CombineResults(results, arg);
+ }
+ public virtual Result Visit(VCExprVar node, Arg arg) {
+ //Contract.Requires(node != null);
+ return CombineResults(new List<Result>(), arg);
+ }
+ public virtual Result Visit(VCExprQuantifier node, Arg arg) {
+ //Contract.Requires(node != null);
+ List<Result>/*!*/ result = new List<Result>();
+ result.Add(node.Body.Accept(this, arg));
+ foreach (VCTrigger/*!*/ trigger in node.Triggers) {
+ Contract.Assert(trigger != null);
+ foreach (VCExpr/*!*/ expr in trigger.Exprs) {
+ Contract.Assert(expr != null);
+ result.Add(expr.Accept(this, arg));
+ }
+ }
+ return CombineResults(result, arg);
+ }
+ public virtual Result Visit(VCExprLet node, Arg arg) {
+ //Contract.Requires(node != null);
+ List<Result>/*!*/ results = new List<Result>();
+ // visit the bound expressions first
+ foreach (VCExprLetBinding/*!*/ binding in node) {
+ Contract.Assert(binding != null);
+ results.Add(binding.E.Accept(this, arg));
+ }
+ results.Add(node.Body.Accept(this, arg));
+ return CombineResults(results, arg);
+ }
+ }
+ [ContractClassFor(typeof(CollectingVCExprVisitor<,>))]
+ public abstract class CollectingVCExprVisitorContracts<Result, Arg> : CollectingVCExprVisitor<Result, Arg> {
+ protected override Result CombineResults(List<Result> results, Arg arg) {
+ Contract.Requires(results != null);
+ throw new NotImplementedException();
+ }
+ }
+ ////////////////////////////////////////////////////////////////////////////
+
+ public class SizeComputingVisitor : TraversingVCExprVisitor<bool, bool> {
+
+ private int Size = 0;
+
+ public static int ComputeSize(VCExpr expr) {
+ Contract.Requires(expr != null);
+ SizeComputingVisitor/*!*/ visitor = new SizeComputingVisitor();
+ visitor.Traverse(expr, true);
+ return visitor.Size;
+ }
+
+ protected override bool StandardResult(VCExpr node, bool arg) {
+ //Contract.Requires(node != null);
+ Size = Size + 1;
+ return true;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // Collect all free term and type variables in a VCExpr. Type variables
+ // can occur free either in the types of bound variables, or in the type
+ // parameters of VCExprNAry.
+
+ // the result and argument (of type bool) are not used currently
+ public class FreeVariableCollector : BoundVarTraversingVCExprVisitor<bool, bool> {
+ public readonly Dictionary<VCExprVar/*!*/, object>/*!*/ FreeTermVars = new Dictionary<VCExprVar/*!*/, object>();
+ public readonly List<TypeVariable/*!*/>/*!*/ FreeTypeVars = new List<TypeVariable/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(FreeTermVars != null && Contract.ForAll(FreeTermVars, entry => entry.Key != null));
+ Contract.Invariant(cce.NonNullElements(FreeTypeVars));
+ }
+
+
+ // not used
+ protected override bool StandardResult(VCExpr node, bool arg) {
+ //Contract.Requires(node != null);
+ return true;
+ }
+
+ public static Dictionary<VCExprVar/*!*/, object>/*!*/ FreeTermVariables(VCExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<Dictionary<VCExprVar, object>>() != null);
+ Contract.Ensures(Contract.ForAll(Contract.Result<Dictionary<VCExprVar, object>>(), ftv => ftv.Key != null));
+ FreeVariableCollector collector = new FreeVariableCollector();
+ collector.Traverse(node, true);
+ return collector.FreeTermVars;
+ }
+
+ public static List<TypeVariable/*!*/>/*!*/ FreeTypeVariables(VCExpr node) {
+ Contract.Requires(node != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<TypeVariable>>()));
+ FreeVariableCollector collector = new FreeVariableCollector();
+ collector.Traverse(node, true);
+ return collector.FreeTypeVars;
+ }
+
+ public void Reset() {
+ FreeTermVars.Clear();
+ FreeTypeVars.Clear();
+ }
+
+ public void Collect(VCExpr node) {
+ Contract.Requires(node != null);
+ Traverse(node, true);
+ }
+
+ public void Collect(Type type) {
+ Contract.Requires(type != null);
+ AddTypeVariables(type.FreeVariables.ToList());
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+
+ private void CollectTypeVariables(IEnumerable<VCExprVar/*!*/>/*!*/ boundVars) {
+ Contract.Requires(cce.NonNullElements(boundVars));
+ foreach (VCExprVar/*!*/ var in boundVars) {
+ Contract.Assert(var != null);
+ Collect(var.Type);
+ }
+ }
+
+ private void AddTypeVariables(IEnumerable<TypeVariable/*!*/>/*!*/ typeVars) {
+ Contract.Requires(cce.NonNullElements(typeVars));
+ foreach (TypeVariable/*!*/ tvar in typeVars) {
+ Contract.Assert(tvar != null);
+ if (!BoundTypeVars.Contains(tvar) && !FreeTypeVars.Contains(tvar))
+ FreeTypeVars.Add(tvar);
+ }
+ }
+
+ public override bool Visit(VCExprVar node, bool arg) {
+ Contract.Requires(node != null);
+ if (!BoundTermVars.Contains(node) && !FreeTermVars.ContainsKey(node)) {
+ FreeTermVars.Add(node, null);
+ Collect(node.Type);
+ }
+ return true;
+ }
+
+ public override bool Visit(VCExprNAry node, bool arg) {
+ Contract.Requires(node != null);
+ foreach (Type/*!*/ t in node.TypeArguments) {
+ Contract.Assert(t != null);
+ Collect(t);
+ }
+ return base.Visit(node, arg);
+ }
+
+ protected override bool VisitAfterBinding(VCExprQuantifier node, bool arg) {
+ //Contract.Requires(node != null);
+ CollectTypeVariables(node.BoundVars);
+ return base.VisitAfterBinding(node, arg);
+ }
+
+ protected override bool VisitAfterBinding(VCExprLet node, bool arg) {
+ //Contract.Requires(node != null);
+ CollectTypeVariables(node.BoundVars);
+ return base.VisitAfterBinding(node, arg);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Framework for mutating VCExprs
+
+ // The Visit implementations in the following visitor work
+ // recursively, apart from the implementation for VCExprNAry that
+ // uses its own stack when applied to nested nodes with the same
+ // operator, e.g., (AND (AND (AND ...) ...) ...). This is necessary
+ // to avoid stack overflows (like in TraversingVCExprVisitor)
+
+ public abstract class MutatingVCExprVisitor<Arg>
+ : IVCExprVisitor<VCExpr/*!*/, Arg> {
+ protected readonly VCExpressionGenerator/*!*/ Gen;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Gen != null);
+ }
+
+
+ public MutatingVCExprVisitor(VCExpressionGenerator gen) {
+ Contract.Requires(gen != null);
+ this.Gen = gen;
+ }
+
+ public VCExpr Mutate(VCExpr expr, Arg arg) {
+ Contract.Requires(expr != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return expr.Accept(this, arg);
+ }
+
+ public List<VCExpr/*!*/>/*!*/ MutateSeq(IEnumerable<VCExpr/*!*/>/*!*/ exprs, Arg arg) {
+ Contract.Requires(cce.NonNullElements(exprs));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
+ List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
+ foreach (VCExpr/*!*/ expr in exprs) {
+ Contract.Assert(expr != null);
+ res.Add(expr.Accept(this, arg));
+ }
+ return res;
+ }
+
+ private List<VCExpr/*!*/>/*!*/ MutateList(List<VCExpr/*!*/>/*!*/ exprs, Arg arg) {
+ Contract.Requires(cce.NonNullElements(exprs));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCExpr>>()));
+ bool changed = false;
+ List<VCExpr/*!*/>/*!*/ res = new List<VCExpr/*!*/>();
+ foreach (VCExpr/*!*/ expr in exprs) {
+ Contract.Assert(expr != null);
+ VCExpr/*!*/ newExpr = expr.Accept(this, arg);
+ if (!Object.ReferenceEquals(expr, newExpr))
+ changed = true;
+ res.Add(newExpr);
+ }
+ if (!changed)
+ return exprs;
+ return res;
+ }
+
+ public virtual VCExpr Visit(VCExprLiteral node, Arg arg) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return node;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // Special element used to mark the positions in the todo-stack where
+ // results have to be popped from the result-stack.
+ private static readonly VCExpr/*!*/ CombineResultsMarker = new VCExprLiteral(Type.Bool);
+
+ // The todo-stack contains records of the shape
+ //
+ // arg0
+ // arg1
+ // arg2
+ // ...
+ // CombineResultsMarker
+ // f(arg0, arg1, arg2, ...) (the original expression)
+
+ private readonly Stack<VCExpr/*!*/>/*!*/ NAryExprTodoStack = new Stack<VCExpr/*!*/>();
+ private readonly Stack<VCExpr/*!*/>/*!*/ NAryExprResultStack = new Stack<VCExpr/*!*/>();
+ [ContractInvariantMethod]
+ void ObjectInvarianta() {
+ Contract.Invariant(cce.NonNullElements(NAryExprResultStack));
+ Contract.Invariant(cce.NonNullElements(NAryExprTodoStack));
+ }
+
+
+ private void PushTodo(VCExprNAry exprTodo) {
+ Contract.Requires(exprTodo != null);
+ NAryExprTodoStack.Push(exprTodo);
+ NAryExprTodoStack.Push(CombineResultsMarker);
+ for (int i = exprTodo.Arity - 1; i >= 0; --i)
+ NAryExprTodoStack.Push(exprTodo[i]);
+ }
+
+ public virtual bool AvoidVisit(VCExprNAry node, Arg arg)
+ {
+ return true;
+ }
+
+ public virtual VCExpr Visit(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ int initialStackSize = NAryExprTodoStack.Count;
+ int initialResultStackSize = NAryExprResultStack.Count;
+
+ PushTodo(node);
+
+ while (NAryExprTodoStack.Count > initialStackSize) {
+ VCExpr/*!*/ subExpr = NAryExprTodoStack.Pop();
+ Contract.Assert(subExpr != null);
+
+ if (Object.ReferenceEquals(subExpr, CombineResultsMarker)) {
+ // assemble a result
+ VCExprNAry/*!*/ originalExpr = (VCExprNAry)NAryExprTodoStack.Pop();
+ Contract.Assert(originalExpr != null);
+ VCExprOp/*!*/ op = originalExpr.Op;
+ bool changed = false;
+ List<VCExpr/*!*/>/*!*/ newSubExprs = new List<VCExpr/*!*/>();
+
+ for (int i = op.Arity - 1; i >= 0; --i) {
+ VCExpr/*!*/ nextSubExpr = NAryExprResultStack.Pop();
+ Contract.Assert(nextSubExpr != null);
+ if (!Object.ReferenceEquals(nextSubExpr, originalExpr[i]))
+ changed = true;
+ newSubExprs.Insert(0, nextSubExpr);
+ }
+
+ NAryExprResultStack.Push(UpdateModifiedNode(originalExpr, newSubExprs, changed, arg));
+ //
+ } else {
+ //
+ VCExprNAry narySubExpr = subExpr as VCExprNAry;
+ if (narySubExpr != null && this.AvoidVisit(narySubExpr, arg) &&
+ // as in VCExprNAryUniformOpEnumerator, all expressions with
+ // type parameters are allowed to be inspected more closely
+ narySubExpr.TypeParamArity == 0) {
+ PushTodo(narySubExpr);
+ } else {
+ NAryExprResultStack.Push(subExpr.Accept(this, arg));
+ }
+ //
+ }
+ }
+
+ Contract.Assert(NAryExprTodoStack.Count == initialStackSize && NAryExprResultStack.Count == initialResultStackSize + 1);
+ return NAryExprResultStack.Pop();
+ }
+
+ protected virtual VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode, List<VCExpr/*!*/>/*!*/ newSubExprs, // has any of the subexpressions changed?
+ bool changed,
+ Arg arg) {
+ Contract.Requires(cce.NonNullElements(newSubExprs));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ if (changed)
+ return Gen.Function(originalNode.Op,
+ newSubExprs, originalNode.TypeArguments);
+ else
+ return originalNode;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public virtual VCExpr Visit(VCExprVar node, Arg arg) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ return node;
+ }
+
+ protected List<VCTrigger/*!*/>/*!*/ MutateTriggers(List<VCTrigger/*!*/>/*!*/ triggers, Arg arg) {
+ Contract.Requires(cce.NonNullElements(triggers));
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<VCTrigger>>()));
+ List<VCTrigger/*!*/>/*!*/ newTriggers = new List<VCTrigger/*!*/>();
+ bool changed = false;
+ foreach (VCTrigger/*!*/ trigger in triggers) {
+ Contract.Assert(trigger != null);
+ List<VCExpr/*!*/>/*!*/ exprs = trigger.Exprs;
+ List<VCExpr/*!*/>/*!*/ newExprs = MutateList(exprs, arg);
+
+ if (Object.ReferenceEquals(exprs, newExprs)) {
+ newTriggers.Add(trigger);
+ } else {
+ newTriggers.Add(Gen.Trigger(trigger.Pos, newExprs));
+ changed = true;
+ }
+ }
+ if (!changed)
+ return triggers;
+ return newTriggers;
+ }
+
+ public virtual VCExpr Visit(VCExprQuantifier node, Arg arg) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ bool changed = false;
+
+ VCExpr/*!*/ body = node.Body;
+ Contract.Assert(body != null);
+ VCExpr/*!*/ newbody = body.Accept(this, arg);
+ Contract.Assert(newbody != null);
+ if (!Object.ReferenceEquals(body, newbody))
+ changed = true;
+
+ // visit the trigger expressions as well
+ List<VCTrigger/*!*/>/*!*/ triggers = node.Triggers;
+ Contract.Assert(cce.NonNullElements(triggers));
+ List<VCTrigger/*!*/>/*!*/ newTriggers = MutateTriggers(triggers, arg);
+ Contract.Assert(cce.NonNullElements(newTriggers));
+ if (!Object.ReferenceEquals(triggers, newTriggers))
+ changed = true;
+
+ if (!changed)
+ return node;
+ return Gen.Quantify(node.Quan, node.TypeParameters, node.BoundVars,
+ newTriggers, node.Infos, newbody);
+ }
+
+ public virtual VCExpr Visit(VCExprLet node, Arg arg) {
+ //Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ bool changed = false;
+
+ VCExpr/*!*/ body = node.Body;
+ VCExpr/*!*/ newbody = body.Accept(this, arg);
+ if (!Object.ReferenceEquals(body, newbody))
+ changed = true;
+
+ List<VCExprLetBinding/*!*/>/*!*/ newbindings = new List<VCExprLetBinding/*!*/>();
+ for (int i = 0; i < node.Length; ++i) {
+ VCExprLetBinding/*!*/ binding = node[i];
+ Contract.Assert(binding != null);
+ VCExpr/*!*/ e = binding.E;
+ VCExpr/*!*/ newE = e.Accept(this, arg);
+ if (Object.ReferenceEquals(e, newE)) {
+ newbindings.Add(binding);
+ } else {
+ changed = true;
+ newbindings.Add(Gen.LetBinding(binding.V, newE));
+ }
+ }
+
+ if (!changed)
+ return node;
+ return Gen.Let(newbindings, newbody);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Substitutions and a visitor for applying substitutions. A substitution can
+ // substitute both type variables and term variables
+
+ public class VCExprSubstitution {
+ private readonly List<IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/>/*!*/ TermSubsts;
+ [ContractInvariantMethod]
+ void TermSubstsInvariantMethod() {
+ Contract.Invariant(TermSubsts != null && Contract.ForAll(TermSubsts, i => cce.NonNullDictionaryAndValues(i)));
+ }
+ private readonly List<IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/>/*!*/ TypeSubsts;
+ [ContractInvariantMethod]
+ void TypeSubstsInvariantMethod() {
+ Contract.Invariant(TermSubsts != null && Contract.ForAll(TypeSubsts, i => cce.NonNullDictionaryAndValues(i)));
+ }
+
+ public VCExprSubstitution(IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/ termSubst, IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ typeSubst) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(termSubst));
+ Contract.Requires(cce.NonNullDictionaryAndValues(typeSubst));
+ List<IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/>/*!*/ termSubsts =
+ new List<IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/>();
+ termSubsts.Add(termSubst);
+ List<IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/>/*!*/ typeSubsts =
+ new List<IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/>();
+ typeSubsts.Add(typeSubst);
+ this.TermSubsts = termSubsts;
+ this.TypeSubsts = typeSubsts;
+ }
+
+ public VCExprSubstitution()
+ : this(new Dictionary<VCExprVar/*!*/, VCExpr/*!*/>(), new Dictionary<TypeVariable/*!*/, Type/*!*/>()) {
+
+ }
+
+ public void PushScope() {
+ TermSubsts.Add(new Dictionary<VCExprVar/*!*/, VCExpr/*!*/>());
+ TypeSubsts.Add(new Dictionary<TypeVariable/*!*/, Type/*!*/>());
+ }
+
+ public void PopScope() {
+ TermSubsts.RemoveAt(TermSubsts.Count - 1);
+ TypeSubsts.RemoveAt(TypeSubsts.Count - 1);
+ }
+
+ public VCExpr this[VCExprVar/*!*/ var] {
+ get {
+ Contract.Requires(var != null);
+ VCExpr res;
+ for (int i = TermSubsts.Count - 1; i >= 0; --i) {
+ if (TermSubsts[i].TryGetValue(var, out res))
+ return res;
+ }
+ return null;
+ }
+ set {
+ TermSubsts[TermSubsts.Count - 1][var] = cce.NonNull(value);
+ }
+ }
+
+ public Type this[TypeVariable/*!*/ var] {
+ get {
+ Contract.Requires(var != null);
+ Type res;
+ for (int i = TypeSubsts.Count - 1; i >= 0; --i) {
+ if (TypeSubsts[i].TryGetValue(var, out res))
+ return res;
+ }
+ return null;
+ }
+ set {
+ TypeSubsts[TypeSubsts.Count - 1][var] = cce.NonNull(value);
+ }
+ }
+
+ public bool ContainsKey(VCExprVar var) {
+ Contract.Requires(var != null);
+ return this[var] != null;
+ }
+
+ public bool ContainsKey(TypeVariable var) {
+ Contract.Requires(var != null);
+ return this[var] != null;
+ }
+
+ public bool TermSubstIsEmpty {
+ get {
+ return TermSubsts.All(dict => !dict.Any());
+ }
+ }
+
+ public bool TypeSubstIsEmpty {
+ get {
+ return TypeSubsts.All(dict => !dict.Any());
+ }
+ }
+
+ public IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ ToTypeSubst {
+ get {
+ Contract.Ensures(cce.NonNullDictionaryAndValues(Contract.Result<IDictionary<TypeVariable, Type>>()));
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ res = new Dictionary<TypeVariable/*!*/, Type/*!*/>();
+ foreach (IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict in TypeSubsts) {
+ foreach (KeyValuePair<TypeVariable/*!*/, Type/*!*/> pair in dict) {
+ Contract.Assert(cce.NonNullElements(pair));
+ // later ones overwrite earlier ones
+ res[pair.Key] = pair.Value;
+ }
+ }
+ return res;
+ }
+ }
+
+ // the variables that are not mapped to themselves
+ public IEnumerable<VCExprVar/*!*/>/*!*/ TermDomain {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<VCExprVar>>()));
+ HashSet<VCExprVar/*!*/>/*!*/ domain = new HashSet<VCExprVar/*!*/>();
+ foreach (IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/ dict in TermSubsts) {
+ Contract.Assert(dict != null);
+ foreach (VCExprVar/*!*/ var in dict.Keys) {
+ Contract.Assert(var != null);
+ if (!var.Equals(this[var]))
+ domain.Add(var);
+ }
+ }
+ return domain;
+ }
+ }
+
+ // the variables that are not mapped to themselves
+ public IEnumerable<TypeVariable/*!*/>/*!*/ TypeDomain {
+ get {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<IEnumerable<TypeVariable>>()));
+ HashSet<TypeVariable/*!*/>/*!*/ domain = new HashSet<TypeVariable/*!*/>();
+ foreach (IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict in TypeSubsts) {
+ Contract.Assert(dict != null);
+ foreach (TypeVariable/*!*/ var in dict.Keys) {
+ Contract.Assert(var != null);
+ if (!var.Equals(this[var]))
+ domain.Add(var);
+ }
+ }
+ return domain;
+ }
+ }
+
+ public FreeVariableCollector/*!*/ Codomains {
+ get {
+ Contract.Ensures(Contract.Result<FreeVariableCollector>() != null);
+
+ FreeVariableCollector/*!*/ coll = new FreeVariableCollector();
+ foreach (VCExprVar/*!*/ var in TermDomain)
+ coll.Collect(cce.NonNull(this)[var]);
+ foreach (TypeVariable/*!*/ var in TypeDomain)
+ coll.Collect(cce.NonNull(this)[var]);
+ return coll;
+ }
+ }
+
+ public VCExprSubstitution Clone() {
+ Contract.Ensures(Contract.Result<VCExprSubstitution>() != null);
+ VCExprSubstitution/*!*/ res = new VCExprSubstitution();
+ foreach (IDictionary<VCExprVar/*!*/, VCExpr/*!*/>/*!*/ dict in TermSubsts)
+ res.TermSubsts.Add(HelperFuns.Clone(dict));
+ foreach (IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ dict in TypeSubsts)
+ res.TypeSubsts.Add(HelperFuns.Clone(dict));
+ return res;
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+
+ public class SubstitutingVCExprVisitor
+ : MutatingVCExprVisitor<VCExprSubstitution/*!*/> {
+ public SubstitutingVCExprVisitor(VCExpressionGenerator gen)
+ : base(gen) {
+ Contract.Requires(gen != null);
+
+ }
+
+ // when descending across a binder, we have to check that no collisions
+ // or variable capture can occur. if this might happen, we replace the
+ // term and type variables bound by the binder with fresh variables
+ private bool CollisionPossible(IEnumerable<TypeVariable/*!*/>/*!*/ typeParams, IEnumerable<VCExprVar/*!*/>/*!*/ boundVars, VCExprSubstitution/*!*/ substitution) {
+ Contract.Requires(cce.NonNullElements(typeParams));
+ Contract.Requires(cce.NonNullElements(boundVars));
+ Contract.Requires(substitution != null);
+ // variables can be shadowed by a binder
+ if (typeParams.Any(var => substitution.ContainsKey(var)) ||
+ boundVars.Any(var => substitution.ContainsKey(var)))
+ return true;
+ // compute the codomain of the substitution
+ FreeVariableCollector coll = substitution.Codomains;
+ Contract.Assert(coll != null);
+ // variables could be captured when applying the substitution
+ return typeParams.Any(var => coll.FreeTypeVars.Contains(var)) ||
+ boundVars.Any(var => coll.FreeTermVars.ContainsKey(var));
+ }
+
+ // can be overwritten if names of bound variables are to be changed
+ protected virtual string ChooseNewVariableName(string oldName) {
+ Contract.Requires(oldName != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ return oldName;
+ }
+
+ // handle type parameters in VCExprNAry
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode, List<VCExpr/*!*/>/*!*/ newSubExprs, bool changed, VCExprSubstitution/*!*/ substitution) {
+ //Contract.Requires(originalNode != null);
+ //Contract.Requires(cce.NonNullElements(newSubExprs));
+ //Contract.Requires(substitution != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ List<Type/*!*/>/*!*/ typeParams = new List<Type/*!*/>();
+ foreach (Type/*!*/ t in originalNode.TypeArguments) {
+ Contract.Assert(t != null);
+ Type/*!*/ newType = t.Substitute(substitution.ToTypeSubst);
+ Contract.Assert(newType != null);
+ if (!ReferenceEquals(t, newType))
+ changed = true;
+ typeParams.Add(newType);
+ }
+ if (changed)
+ return Gen.Function(originalNode.Op, newSubExprs, typeParams);
+ else
+ return originalNode;
+ }
+
+ public override VCExpr/*!*/ Visit(VCExprQuantifier/*!*/ node, VCExprSubstitution/*!*/ substitution) {
+ Contract.Requires(node != null);
+ Contract.Requires(substitution != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ // the default is to refresh bound variables only if necessary
+ // because of collisions
+ return Visit(node, substitution, false);
+ }
+
+ public VCExpr/*!*/ Visit(VCExprQuantifier/*!*/ node, VCExprSubstitution/*!*/ substitution, bool refreshBoundVariables) {
+ Contract.Requires(node != null);
+ Contract.Requires(substitution != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ substitution.PushScope();
+ try {
+
+ List<TypeVariable/*!*/>/*!*/ typeParams = node.TypeParameters;
+ Contract.Assert(cce.NonNullElements(typeParams));
+ bool refreshAllVariables = refreshBoundVariables ||
+ CollisionPossible(node.TypeParameters, node.BoundVars, substitution);
+ if (refreshAllVariables) {
+ // we introduce fresh type variables to ensure that none gets captured
+ typeParams = new List<TypeVariable/*!*/>();
+ foreach (TypeVariable/*!*/ var in node.TypeParameters) {
+ Contract.Assert(var != null);
+ TypeVariable/*!*/ freshVar =
+ new TypeVariable(Token.NoToken, ChooseNewVariableName(var.Name));
+ Contract.Assert(freshVar != null);
+ typeParams.Add(freshVar);
+ substitution[var] = freshVar;
+ // this might overwrite other elements of the substitution, deliberately
+ }
+ }
+
+ List<VCExprVar/*!*/>/*!*/ boundVars = node.BoundVars;
+ Contract.Assert(cce.NonNullElements(boundVars));
+ if (refreshAllVariables || !substitution.TypeSubstIsEmpty) {
+ // collisions are possible, or we also substitute type variables. in this case
+ // the bound term variables have to be replaced with fresh variables with the
+ // right types
+ boundVars = new List<VCExprVar/*!*/>();
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ typeSubst = substitution.ToTypeSubst;
+ Contract.Assert(cce.NonNullDictionaryAndValues(typeSubst));
+ foreach (VCExprVar/*!*/ var in node.BoundVars) {
+ Contract.Assert(var != null);
+ VCExprVar/*!*/ freshVar =
+ Gen.Variable(ChooseNewVariableName(var.Name),
+ var.Type.Substitute(typeSubst));
+ Contract.Assert(freshVar != null);
+ boundVars.Add(freshVar);
+ substitution[var] = freshVar;
+ // this might overwrite other elements of the substitution, deliberately
+ }
+ }
+
+ List<VCTrigger/*!*/>/*!*/ newTriggers = new List<VCTrigger/*!*/>();
+ foreach (VCTrigger/*!*/ trigger in node.Triggers) {
+ Contract.Assert(trigger != null);
+ newTriggers.Add(Gen.Trigger(trigger.Pos, MutateSeq(trigger.Exprs, substitution)));
+ }
+
+ VCExpr/*!*/ newBody = Mutate(node.Body, substitution);
+ Contract.Assert(newBody != null);
+
+ return Gen.Quantify(node.Quan, typeParams, boundVars,
+ newTriggers, node.Infos, newBody);
+
+ } finally {
+ substitution.PopScope();
+ }
+ }
+
+ public override VCExpr Visit(VCExprVar node, VCExprSubstitution substitution) {
+ Contract.Requires(substitution != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr res = substitution[node];
+ if (res != null)
+ return res;
+ return node;
+ }
+
+ public override VCExpr Visit(VCExprLet node, VCExprSubstitution substitution) {
+ Contract.Requires(substitution != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // the default is to refresh bound variables only if necessary
+ // because of collisions
+ return Visit(node, substitution, false);
+ }
+
+ public VCExpr Visit(VCExprLet node, VCExprSubstitution substitution, bool refreshBoundVariables) {
+ Contract.Requires(substitution != null);
+ Contract.Requires(node != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+ // let-expressions do not have type parameters (fortunately ...)
+ substitution.PushScope();
+ try {
+
+ bool refreshAllVariables =
+ refreshBoundVariables ||
+ !substitution.TypeSubstIsEmpty ||
+ CollisionPossible(new List<TypeVariable/*!*/>(), node.BoundVars, substitution);
+
+ List<VCExprVar/*!*/>/*!*/ newBoundVars = node.BoundVars;
+ Contract.Assert(cce.NonNullElements(newBoundVars));
+ if (refreshAllVariables) {
+ // collisions are possible, or we also substitute type variables. in this case
+ // the bound term variables have to be replaced with fresh variables with the
+ // right types
+ newBoundVars = new List<VCExprVar/*!*/>();
+ IDictionary<TypeVariable/*!*/, Type/*!*/>/*!*/ typeSubst = substitution.ToTypeSubst;
+ Contract.Assert(cce.NonNullDictionaryAndValues(typeSubst));
+ foreach (VCExprVar/*!*/ var in node.BoundVars) {
+ Contract.Assert(var != null);
+ VCExprVar/*!*/ freshVar =
+ Gen.Variable(ChooseNewVariableName(var.Name),
+ var.Type.Substitute(typeSubst));
+ Contract.Assert(freshVar != null);
+ newBoundVars.Add(freshVar);
+ substitution[var] = freshVar;
+ // this might overwrite other elements of the substitution, deliberately
+ }
+ }
+
+ List<VCExprLetBinding/*!*/>/*!*/ newbindings = new List<VCExprLetBinding/*!*/>();
+ for (int i = 0; i < node.Length; ++i) {
+ VCExprLetBinding/*!*/ binding = node[i];
+ Contract.Assert(binding != null);
+ newbindings.Add(Gen.LetBinding(newBoundVars[i], Mutate(binding.E, substitution)));
+ }
+
+ VCExpr/*!*/ newBody = Mutate(node.Body, substitution);
+ Contract.Assert(newBody != null);
+ return Gen.Let(newbindings, newBody);
+
+ } finally {
+ substitution.PopScope();
+ }
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ [ContractClassFor(typeof(StandardVCExprOpVisitor<,>))]
+ public abstract class StandardVCExprOpVisitorContracts<Result, Arg> : StandardVCExprOpVisitor<Result, Arg> {
+ protected override Result StandardResult(VCExprNAry node, Arg arg) {
+ Contract.Requires(node != null);
+ throw new NotImplementedException();
+ }
+ }
+
+
+ [ContractClass(typeof(StandardVCExprOpVisitorContracts<,>))]
+ public abstract class StandardVCExprOpVisitor<Result, Arg>
+ : IVCExprOpVisitor<Result, Arg> {
+ protected abstract Result StandardResult(VCExprNAry/*!*/ node, Arg arg);
+
+ public virtual Result VisitNotOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitEqOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitNeqOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitAndOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitOrOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitImpliesOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitDistinctOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitLabelOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitSelectOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitStoreOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatAddOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatSubOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatMulOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatDivOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatRemOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatMinOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatMaxOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatLeqOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatLtOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatGeqOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatGtOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitFloatEqOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitBvOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitBvExtractOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitBvConcatOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitIfThenElseOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitCustomOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitAddOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitSubOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitMulOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitDivOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitModOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitRealDivOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitPowOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitLtOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitLeOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitGtOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitGeOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitSubtypeOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitSubtype3Op(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitToIntOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitToRealOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitToFloatOp(VCExprNAry node, Arg arg)
+ {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ public virtual Result VisitBoogieFunctionOp(VCExprNAry node, Arg arg) {
+ //Contract.Requires(node != null);
+ return StandardResult(node, arg);
+ }
+ }
+
} \ No newline at end of file
diff --git a/Source/VCExpr/cce.cs b/Source/VCExpr/cce.cs
index ef594484..1e0b12a5 100644
--- a/Source/VCExpr/cce.cs
+++ b/Source/VCExpr/cce.cs
@@ -1,193 +1,193 @@
-using System;
-using SA=System.Attribute;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-//using Microsoft.Boogie;
-
-/// <summary>
-/// A class containing static methods to extend the functionality of Code Contracts
-/// </summary>
-
-public static class cce {
- //[Pure]
- //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
- // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
- //}
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
- }
- //[Pure]
- //public static bool NonNullElements(VariableSeq collection) {
- // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- //}
- /// <summary>
- /// For possibly-null lists of non-null elements
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
- /// <returns></returns>
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
- return (nullability && collection == null) || cce.NonNullElements(collection);
- //Should be the same as:
- /*if(nullability&&collection==null)
- * return true;
- * return cce.NonNullElements(collection)
- */
-
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
- return kvp.Key != null && kvp.Value != null;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
- return iEnumerator != null;
- }
- //[Pure]
- //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
- // return cce.NonNullElements(graph.TopologicalSort());
- //}
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- [Pure]
- public static bool IsNew(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- [Pure]
- public static bool Different(object o, object p) {
- return true;
- }
- [Pure]
- public static bool New(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
- //[Pure]
- //public static bool IsValid(Microsoft.Dafny.Expression expression) {
- // return true;
- //}
- //public static List<T> toList<T>(PureCollections.Sequence s) {
- // List<T> toRet = new List<T>();
- // foreach (T t in s.elems)
- // if(t!=null)
- // toRet.Add(t);
- // return toRet;
- //}
-
- //internal static bool NonNullElements(Set set) {
- // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
- //}
-}
-
-public class PeerAttribute : SA {
-}
-public class RepAttribute : SA {
-}
-public class CapturedAttribute : SA {
-}
-public class NotDelayedAttribute : SA {
-}
-public class NoDefaultContractAttribute : SA {
-}
-public class VerifyAttribute : SA {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : SA {
-}
-public class AdditiveAttribute : SA {
-}
-public class ReadsAttribute : SA {
- public enum Reads {
- Nothing,
- Everything,
- };
- public ReadsAttribute(object o) {
- }
-}
-public class GlobalAccessAttribute : SA {
- public GlobalAccessAttribute(bool b) {
- }
-}
-public class EscapesAttribute : SA {
- public EscapesAttribute(bool b, bool b_2) {
- }
-}
-public class NeedsContractsAttribute : SA {
- public NeedsContractsAttribute() {
- }
- public NeedsContractsAttribute(bool ret, bool parameters) {
- }
- public NeedsContractsAttribute(bool ret, int[] parameters) {
- }
-}
-public class ImmutableAttribute : SA {
-}
-public class InsideAttribute : SA {
-}
-public class SpecPublicAttribute : SA {
-}
-public class ElementsPeerAttribute : SA {
-}
-public class ResultNotNewlyAllocatedAttribute : SA {
-}
-public class OnceAttribute : SA {
+using System;
+using SA=System.Attribute;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+//using Microsoft.Boogie;
+
+/// <summary>
+/// A class containing static methods to extend the functionality of Code Contracts
+/// </summary>
+
+public static class cce {
+ //[Pure]
+ //public static bool NonNullElements<T>(Microsoft.Dafny.Graph<T> collection) {
+ // return collection != null && cce.NonNullElements(collection.TopologicallySortedComponents());
+ //}
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && Contract.ForAll(collection, pair => NonNullElements(pair));
+ }
+ //[Pure]
+ //public static bool NonNullElements(VariableSeq collection) {
+ // return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ //}
+ /// <summary>
+ /// For possibly-null lists of non-null elements
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="collection"></param>
+ /// <param name="nullability">If true, the collection is treated as an IEnumerable&lt;T!&gt;?, rather than an IEnumerable&lt;T!&gt;!</param>
+ /// <returns></returns>
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection, bool nullability) {
+ return (nullability && collection == null) || cce.NonNullElements(collection);
+ //Should be the same as:
+ /*if(nullability&&collection==null)
+ * return true;
+ * return cce.NonNullElements(collection)
+ */
+
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(KeyValuePair<TKey, TValue> kvp) {
+ return kvp.Key != null && kvp.Value != null;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerator<T> iEnumerator) {
+ return iEnumerator != null;
+ }
+ //[Pure]
+ //public static bool NonNullElements<T>(Graphing.Graph<T> graph) {
+ // return cce.NonNullElements(graph.TopologicalSort());
+ //}
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsNew(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool Different(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static bool New(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+ //[Pure]
+ //public static bool IsValid(Microsoft.Dafny.Expression expression) {
+ // return true;
+ //}
+ //public static List<T> toList<T>(PureCollections.Sequence s) {
+ // List<T> toRet = new List<T>();
+ // foreach (T t in s.elems)
+ // if(t!=null)
+ // toRet.Add(t);
+ // return toRet;
+ //}
+
+ //internal static bool NonNullElements(Set set) {
+ // return set != null && Contract.ForAll(0,set.Count, i => set[i] != null);
+ //}
+}
+
+public class PeerAttribute : SA {
+}
+public class RepAttribute : SA {
+}
+public class CapturedAttribute : SA {
+}
+public class NotDelayedAttribute : SA {
+}
+public class NoDefaultContractAttribute : SA {
+}
+public class VerifyAttribute : SA {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : SA {
+}
+public class AdditiveAttribute : SA {
+}
+public class ReadsAttribute : SA {
+ public enum Reads {
+ Nothing,
+ Everything,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
+public class GlobalAccessAttribute : SA {
+ public GlobalAccessAttribute(bool b) {
+ }
+}
+public class EscapesAttribute : SA {
+ public EscapesAttribute(bool b, bool b_2) {
+ }
+}
+public class NeedsContractsAttribute : SA {
+ public NeedsContractsAttribute() {
+ }
+ public NeedsContractsAttribute(bool ret, bool parameters) {
+ }
+ public NeedsContractsAttribute(bool ret, int[] parameters) {
+ }
+}
+public class ImmutableAttribute : SA {
+}
+public class InsideAttribute : SA {
+}
+public class SpecPublicAttribute : SA {
+}
+public class ElementsPeerAttribute : SA {
+}
+public class ResultNotNewlyAllocatedAttribute : SA {
+}
+public class OnceAttribute : SA {
} \ No newline at end of file
diff --git a/Source/VCGeneration/Check.cs b/Source/VCGeneration/Check.cs
index da8624e9..7bda0022 100644
--- a/Source/VCGeneration/Check.cs
+++ b/Source/VCGeneration/Check.cs
@@ -1,687 +1,694 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.IO;
-using System.Text.RegularExpressions;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.AbstractInterpretation;
-using Microsoft.Boogie.VCExprAST;
-using Microsoft.Basetypes;
-using System.Threading.Tasks;
-
-namespace Microsoft.Boogie {
-
- enum CheckerStatus
- {
- Idle,
- Ready,
- Busy,
- Closed
- }
-
- /// <summary>
- /// Interface to the theorem prover specialized to Boogie.
- ///
- /// This class creates the appropriate background axioms. There
- /// should be one instance per BoogiePL program.
- /// </summary>
- public sealed class Checker {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(gen != null);
- Contract.Invariant(thmProver != null);
- }
-
- private readonly VCExpressionGenerator gen;
-
- private ProverInterface thmProver;
- private int timeout;
-
- // state for the async interface
- private volatile ProverInterface.Outcome outcome;
- private volatile bool hasOutput;
- private volatile UnexpectedProverOutputException outputExn;
- private DateTime proverStart;
- private TimeSpan proverRunTime;
- private volatile ProverInterface.ErrorHandler handler;
- private volatile CheckerStatus status;
- public volatile Program Program;
-
- public void GetReady()
- {
- Contract.Requires(IsIdle);
-
- status = CheckerStatus.Ready;
- }
-
- public void GoBackToIdle()
- {
- Contract.Requires(IsBusy);
-
- status = CheckerStatus.Idle;
- }
-
- public Task ProverTask { get; set; }
-
- public bool WillingToHandle(int timeout, Program prog) {
- return status == CheckerStatus.Idle && timeout == this.timeout && (prog == null || Program == prog);
- }
-
- public VCExpressionGenerator VCExprGen {
- get {
- Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
- return this.gen;
- }
- }
- public ProverInterface TheoremProver {
- get {
- Contract.Ensures(Contract.Result<ProverInterface>() != null);
- return this.thmProver;
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
- // We share context information for the same program between different Checkers
-
- private struct ContextCacheKey {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(program != null);
- }
-
- public readonly Program program;
-
- public ContextCacheKey(Program prog) {
- Contract.Requires(prog != null);
- this.program = prog;
- }
-
- [Pure]
- [Reads(ReadsAttribute.Reads.Nothing)]
- public override bool Equals(object that) {
- if (that is ContextCacheKey) {
- ContextCacheKey thatKey = (ContextCacheKey)that;
- return this.program.Equals(thatKey.program);
- }
- return false;
- }
-
- [Pure]
- public override int GetHashCode() {
- return this.program.GetHashCode();
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////////
-
- /// <summary>
- /// Constructor. Initialize a checker with the program and log file.
- /// Optionally, use prover context provided by parameter "ctx".
- /// </summary>
- public Checker(VC.ConditionGeneration vcgen, Program prog, string/*?*/ logFilePath, bool appendLogFile, int timeout, ProverContext ctx = null) {
- Contract.Requires(vcgen != null);
- Contract.Requires(prog != null);
- this.timeout = timeout;
- this.Program = prog;
-
- ProverOptions options = cce.NonNull(CommandLineOptions.Clo.TheProverFactory).BlankProverOptions();
-
- if (logFilePath != null) {
- options.LogFilename = logFilePath;
- if (appendLogFile)
- options.AppendLogFile = appendLogFile;
- }
-
- if (timeout > 0) {
- options.TimeLimit = timeout * 1000;
- }
-
- options.Parse(CommandLineOptions.Clo.ProverOptions);
-
- ContextCacheKey key = new ContextCacheKey(prog);
- ProverInterface prover;
-
- if (vcgen.CheckerCommonState == null) {
- vcgen.CheckerCommonState = new Dictionary<ContextCacheKey, ProverContext>();
- }
- IDictionary<ContextCacheKey, ProverContext>/*!>!*/ cachedContexts = (IDictionary<ContextCacheKey, ProverContext/*!*/>)vcgen.CheckerCommonState;
-
- if (ctx == null && cachedContexts.TryGetValue(key, out ctx))
- {
- ctx = (ProverContext)cce.NonNull(ctx).Clone();
- prover = (ProverInterface)
- CommandLineOptions.Clo.TheProverFactory.SpawnProver(options, ctx);
- } else {
- if (ctx == null) ctx = (ProverContext)CommandLineOptions.Clo.TheProverFactory.NewProverContext(options);
-
- Setup(prog, ctx);
-
- // we first generate the prover and then store a clone of the
- // context in the cache, so that the prover can setup stuff in
- // the context to be cached
- prover = (ProverInterface)
- CommandLineOptions.Clo.TheProverFactory.SpawnProver(options, ctx);
- cachedContexts.Add(key, cce.NonNull((ProverContext)ctx.Clone()));
- }
-
- this.thmProver = prover;
- this.gen = prover.VCExprGen;
- }
-
- public void Retarget(Program prog, ProverContext ctx, int timeout = 0)
- {
- lock (this)
- {
- hasOutput = default(bool);
- outcome = default(ProverInterface.Outcome);
- outputExn = default(UnexpectedProverOutputException);
- handler = default(ProverInterface.ErrorHandler);
- TheoremProver.FullReset(gen);
- ctx.Reset();
- Setup(prog, ctx);
- this.timeout = timeout;
- SetTimeout();
- }
- }
-
- public void RetargetWithoutReset(Program prog, ProverContext ctx)
- {
- ctx.Clear();
- Setup(prog, ctx);
- }
-
-
- public void SetTimeout()
- {
- if (0 < timeout)
- {
- TheoremProver.SetTimeOut(timeout * 1000);
- }
- else
- {
- TheoremProver.SetTimeOut(0);
- }
- }
-
- /// <summary>
- /// Set up the context.
- /// </summary>
- private void Setup(Program prog, ProverContext ctx)
- {
- Program = prog;
- lock (Program.TopLevelDeclarations)
- {
- foreach (Declaration decl in Program.TopLevelDeclarations)
- {
- Contract.Assert(decl != null);
- var typeDecl = decl as TypeCtorDecl;
- var constDecl = decl as Constant;
- var funDecl = decl as Function;
- var axiomDecl = decl as Axiom;
- var glVarDecl = decl as GlobalVariable;
- if (typeDecl != null)
- {
- ctx.DeclareType(typeDecl, null);
- }
- else if (constDecl != null)
- {
- ctx.DeclareConstant(constDecl, constDecl.Unique, null);
- }
- else if (funDecl != null)
- {
- ctx.DeclareFunction(funDecl, null);
- }
- else if (axiomDecl != null)
- {
- ctx.AddAxiom(axiomDecl, null);
- }
- else if (glVarDecl != null)
- {
- ctx.DeclareGlobalVariable(glVarDecl, null);
- }
- }
- }
- }
-
- /// <summary>
- /// Clean-up.
- /// </summary>
- public void Close() {
- thmProver.Close();
- status = CheckerStatus.Closed;
- }
-
- /// <summary>
- /// Push a Verification Condition as an Axiom
- /// (Required for Doomed Program Point detection)
- /// </summary>
- public void PushVCExpr(VCExpr vc) {
- Contract.Requires(vc != null);
- //thmProver.Context.AddAxiom(vc);
- thmProver.PushVCExpression(vc);
- }
-
- public bool IsBusy {
- get {
- return status == CheckerStatus.Busy;
- }
- }
-
- public bool IsReady
- {
- get
- {
- return status == CheckerStatus.Ready;
- }
- }
-
- public bool IsClosed {
- get {
- return status == CheckerStatus.Closed;
- }
- }
-
- public bool IsIdle
- {
- get
- {
- return status == CheckerStatus.Idle;
- }
- }
-
- public bool HasOutput {
- get {
- return hasOutput;
- }
- }
-
- public TimeSpan ProverRunTime {
- get {
- return proverRunTime;
- }
- }
-
- private void WaitForOutput(object dummy) {
- lock (this)
- {
- try
- {
- outcome = thmProver.CheckOutcome(cce.NonNull(handler));
- }
- catch (UnexpectedProverOutputException e)
- {
- outputExn = e;
- }
-
- switch (outcome)
- {
- case ProverInterface.Outcome.Valid:
- thmProver.LogComment("Valid");
- break;
- case ProverInterface.Outcome.Invalid:
- thmProver.LogComment("Invalid");
- break;
- case ProverInterface.Outcome.TimeOut:
- thmProver.LogComment("Timed out");
- break;
- case ProverInterface.Outcome.OutOfMemory:
- thmProver.LogComment("Out of memory");
- break;
- case ProverInterface.Outcome.Undetermined:
- thmProver.LogComment("Undetermined");
- break;
- }
-
- hasOutput = true;
- proverRunTime = DateTime.UtcNow - proverStart;
- }
- }
-
- public void BeginCheck(string descriptiveName, VCExpr vc, ProverInterface.ErrorHandler handler) {
- Contract.Requires(descriptiveName != null);
- Contract.Requires(vc != null);
- Contract.Requires(handler != null);
- Contract.Requires(IsReady);
-
- status = CheckerStatus.Busy;
- hasOutput = false;
- outputExn = null;
- this.handler = handler;
-
- thmProver.Reset(gen);
- SetTimeout();
- proverStart = DateTime.UtcNow;
- thmProver.BeginCheck(descriptiveName, vc, handler);
- // gen.ClearSharedFormulas(); PR: don't know yet what to do with this guy
-
- ProverTask = Task.Factory.StartNew(() => { WaitForOutput(null); } , TaskCreationOptions.LongRunning);
- }
-
- public ProverInterface.Outcome ReadOutcome() {
- Contract.Requires(IsBusy);
- Contract.Requires(HasOutput);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- hasOutput = false;
-
- if (outputExn != null) {
- throw outputExn;
- }
-
- return outcome;
- }
- }
-
- // -----------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------
-
- public abstract class ProverInterface {
- public static ProverInterface CreateProver(Program prog, string/*?*/ logFilePath, bool appendLogFile, int timeout, int taskID = -1) {
- Contract.Requires(prog != null);
-
- ProverOptions options = cce.NonNull(CommandLineOptions.Clo.TheProverFactory).BlankProverOptions();
-
- if (logFilePath != null) {
- options.LogFilename = logFilePath;
- if (appendLogFile)
- options.AppendLogFile = appendLogFile;
- }
-
- if (timeout > 0) {
- options.TimeLimit = timeout * 1000;
- }
-
- if (taskID >= 0) {
- options.Parse(CommandLineOptions.Clo.Cho[taskID].ProverOptions);
- } else {
- options.Parse(CommandLineOptions.Clo.ProverOptions);
- }
-
- ProverContext ctx = (ProverContext)CommandLineOptions.Clo.TheProverFactory.NewProverContext(options);
-
- // set up the context
- foreach (Declaration decl in prog.TopLevelDeclarations) {
- Contract.Assert(decl != null);
- TypeCtorDecl t = decl as TypeCtorDecl;
- if (t != null) {
- ctx.DeclareType(t, null);
- }
- }
- foreach (Declaration decl in prog.TopLevelDeclarations) {
- Contract.Assert(decl != null);
- Constant c = decl as Constant;
- if (c != null) {
- ctx.DeclareConstant(c, c.Unique, null);
- }
- else {
- Function f = decl as Function;
- if (f != null) {
- ctx.DeclareFunction(f, null);
- }
- }
- }
- foreach (var ax in prog.Axioms) {
- ctx.AddAxiom(ax, null);
- }
- foreach (Declaration decl in prog.TopLevelDeclarations) {
- Contract.Assert(decl != null);
- GlobalVariable v = decl as GlobalVariable;
- if (v != null) {
- ctx.DeclareGlobalVariable(v, null);
- }
- }
-
- return (ProverInterface)CommandLineOptions.Clo.TheProverFactory.SpawnProver(options, ctx);
- }
-
- public enum Outcome {
- Valid,
- Invalid,
- TimeOut,
- OutOfMemory,
- Undetermined
- }
- public class ErrorHandler {
- // Used in CheckOutcomeCore
- public virtual int StartingProcId()
- {
- return 0;
- }
-
- public virtual void OnModel(IList<string> labels, Model model, Outcome proverOutcome) {
- Contract.Requires(cce.NonNullElements(labels));
- }
-
- public virtual void OnResourceExceeded(string message) {
- Contract.Requires(message != null);
- }
-
- public virtual void OnProverWarning(string message)
- {
- Contract.Requires(message != null);
- switch (CommandLineOptions.Clo.PrintProverWarnings) {
- case CommandLineOptions.ProverWarnings.None:
- break;
- case CommandLineOptions.ProverWarnings.Stdout:
- Console.WriteLine("Prover warning: " + message);
- break;
- case CommandLineOptions.ProverWarnings.Stderr:
- Console.Error.WriteLine("Prover warning: " + message);
- break;
- default:
- Contract.Assume(false);
- throw new cce.UnreachableException(); // unexpected case
- }
- }
-
- public virtual Absy Label2Absy(string label) {
- Contract.Requires(label != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
-
- throw new System.NotImplementedException();
- }
- }
- public abstract void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler);
-
- public virtual Outcome CheckRPFP(string descriptiveName, RPFP vc, ErrorHandler handler,
- out RPFP.Node cex,
- Dictionary<int, Dictionary<string, string>> varSubst, Dictionary<string,int> extra_bound = null)
- {
- throw new System.NotImplementedException();
- }
- [NoDefaultContract]
- public abstract Outcome CheckOutcome(ErrorHandler handler, int taskID = -1);
- public virtual string[] CalculatePath(int controlFlowConstant) {
- throw new System.NotImplementedException();
- }
- public virtual void LogComment(string comment) {
- Contract.Requires(comment != null);
- }
- public virtual void Close() {
- }
-
- public abstract void Reset(VCExpressionGenerator gen);
-
- public abstract void FullReset(VCExpressionGenerator gen);
-
- /// <summary>
- /// MSchaef: Allows to Push a VCExpression as Axiom on the prover stack (beta)
- /// for now it is only implemented by ProcessTheoremProver and still requires some
- /// testing
- /// </summary>
- public virtual void PushVCExpression(VCExpr vc) {
- Contract.Requires(vc != null);
- throw new NotImplementedException();
- }
- public virtual string VCExpressionToString(VCExpr vc) {
- Contract.Requires(vc != null);
- Contract.Ensures(Contract.Result<string>() != null);
- throw new NotImplementedException();
- }
- public virtual void Pop() {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- throw new NotImplementedException();
- }
- public virtual int NumAxiomsPushed() {
- throw new NotImplementedException();
- }
- public virtual int FlushAxiomsToTheoremProver() {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- throw new NotImplementedException();
- }
-
- // (assert vc)
- public virtual void Assert(VCExpr vc, bool polarity)
- {
- throw new NotImplementedException();
- }
-
- // (assert implicit-axioms)
- public virtual void AssertAxioms()
- {
- throw new NotImplementedException();
- }
-
- // (check-sat)
- public virtual void Check()
- {
- throw new NotImplementedException();
- }
-
- // (check-sat + get-unsat-core + checkOutcome)
- public virtual Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore, ErrorHandler handler)
- {
- throw new NotImplementedException();
- }
-
- public virtual Outcome CheckAssumptions(List<VCExpr> hardAssumptions, List<VCExpr> softAssumptions, out List<int> unsatisfiedSoftAssumptions, ErrorHandler handler) {
- throw new NotImplementedException();
- }
-
- public virtual Outcome CheckOutcomeCore(ErrorHandler handler, int taskID = -1)
- {
- throw new NotImplementedException();
- }
-
- // (push 1)
- public virtual void Push()
- {
- throw new NotImplementedException();
- }
-
- // Set theorem prover timeout for the next "check-sat"
- public virtual void SetTimeOut(int ms)
- { }
-
- public abstract ProverContext Context {
- get;
- }
-
- public abstract VCExpressionGenerator VCExprGen {
- get;
- }
-
- public virtual void DefineMacro(Macro fun, VCExpr vc) {
- throw new NotImplementedException();
- }
-
- public class VCExprEvaluationException : Exception
- {
-
- }
-
- public virtual object Evaluate(VCExpr expr)
- {
- throw new NotImplementedException();
- }
-
- //////////////////////
- // For interpolation queries
- //////////////////////
-
- // Assert vc tagged with a name
- public virtual void AssertNamed(VCExpr vc, bool polarity, string name)
- {
- throw new NotImplementedException();
- }
-
- // Returns Interpolant(A,B)
- public virtual VCExpr ComputeInterpolant(VCExpr A, VCExpr B)
- {
- throw new NotImplementedException();
- }
-
- // Returns for each l, Interpolant(root + (leaves - l), l)
- // Preconditions:
- // leaves cannot have subformulas with same variable names
- // Both root and leaves should have been previously named via AssertNamed
- public virtual List<VCExpr> GetTreeInterpolant(List<string> root, List<string> leaves)
- {
- throw new NotImplementedException();
- }
-
- }
-
- public class ProverInterfaceContracts : ProverInterface {
- public override ProverContext Context {
- get {
- Contract.Ensures(Contract.Result<ProverContext>() != null);
-
- throw new NotImplementedException();
- }
- }
- public override VCExpressionGenerator VCExprGen {
- get {
- Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
-
- throw new NotImplementedException();
- }
- }
- public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler) {/*Contract.Requires(descriptiveName != null);*/
- //Contract.Requires(vc != null);
- //Contract.Requires(handler != null);
- throw new NotImplementedException();
- }
- [NoDefaultContract]
- public override Outcome CheckOutcome(ErrorHandler handler, int taskID = -1) {
- //Contract.Requires(handler != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- throw new NotImplementedException();
- }
-
- public override void Reset(VCExpressionGenerator gen)
- {
- throw new NotImplementedException();
- }
-
- public override void FullReset(VCExpressionGenerator gen)
- {
- throw new NotImplementedException();
- }
- }
-
- public class ProverException : Exception {
- public ProverException(string s)
- : base(s) {
- }
- }
- public class UnexpectedProverOutputException : ProverException {
- public UnexpectedProverOutputException(string s)
- : base(s) {
- }
- }
- public class ProverDiedException : UnexpectedProverOutputException {
- public ProverDiedException()
- : base("Prover died with no further output, perhaps it ran out of memory or was killed.") {
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.AbstractInterpretation;
+using Microsoft.Boogie.VCExprAST;
+using Microsoft.Basetypes;
+using System.Threading.Tasks;
+
+namespace Microsoft.Boogie {
+
+ enum CheckerStatus
+ {
+ Idle,
+ Ready,
+ Busy,
+ Closed
+ }
+
+ /// <summary>
+ /// Interface to the theorem prover specialized to Boogie.
+ ///
+ /// This class creates the appropriate background axioms. There
+ /// should be one instance per BoogiePL program.
+ /// </summary>
+ public sealed class Checker {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(gen != null);
+ Contract.Invariant(thmProver != null);
+ }
+
+ private readonly VCExpressionGenerator gen;
+
+ private ProverInterface thmProver;
+ private int timeout;
+
+ // state for the async interface
+ private volatile ProverInterface.Outcome outcome;
+ private volatile bool hasOutput;
+ private volatile UnexpectedProverOutputException outputExn;
+ private DateTime proverStart;
+ private TimeSpan proverRunTime;
+ private volatile ProverInterface.ErrorHandler handler;
+ private volatile CheckerStatus status;
+ public volatile Program Program;
+
+ public void GetReady()
+ {
+ Contract.Requires(IsIdle);
+
+ status = CheckerStatus.Ready;
+ }
+
+ public void GoBackToIdle()
+ {
+ Contract.Requires(IsBusy);
+
+ status = CheckerStatus.Idle;
+ }
+
+ public Task ProverTask { get; set; }
+
+ public bool WillingToHandle(int timeout, Program prog) {
+ return status == CheckerStatus.Idle && timeout == this.timeout && (prog == null || Program == prog);
+ }
+
+ public VCExpressionGenerator VCExprGen {
+ get {
+ Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
+ return this.gen;
+ }
+ }
+ public ProverInterface TheoremProver {
+ get {
+ Contract.Ensures(Contract.Result<ProverInterface>() != null);
+ return this.thmProver;
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+ // We share context information for the same program between different Checkers
+
+ private struct ContextCacheKey {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(program != null);
+ }
+
+ public readonly Program program;
+
+ public ContextCacheKey(Program prog) {
+ Contract.Requires(prog != null);
+ this.program = prog;
+ }
+
+ [Pure]
+ [Reads(ReadsAttribute.Reads.Nothing)]
+ public override bool Equals(object that) {
+ if (that is ContextCacheKey) {
+ ContextCacheKey thatKey = (ContextCacheKey)that;
+ return this.program.Equals(thatKey.program);
+ }
+ return false;
+ }
+
+ [Pure]
+ public override int GetHashCode() {
+ return this.program.GetHashCode();
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////
+
+ /// <summary>
+ /// Constructor. Initialize a checker with the program and log file.
+ /// Optionally, use prover context provided by parameter "ctx".
+ /// </summary>
+ public Checker(VC.ConditionGeneration vcgen, Program prog, string/*?*/ logFilePath, bool appendLogFile, int timeout, ProverContext ctx = null) {
+ Contract.Requires(vcgen != null);
+ Contract.Requires(prog != null);
+ this.timeout = timeout;
+ this.Program = prog;
+
+ ProverOptions options = cce.NonNull(CommandLineOptions.Clo.TheProverFactory).BlankProverOptions();
+
+ if (logFilePath != null) {
+ options.LogFilename = logFilePath;
+ if (appendLogFile)
+ options.AppendLogFile = appendLogFile;
+ }
+
+ if (timeout > 0) {
+ options.TimeLimit = timeout * 1000;
+ }
+
+ options.Parse(CommandLineOptions.Clo.ProverOptions);
+
+ ContextCacheKey key = new ContextCacheKey(prog);
+ ProverInterface prover;
+
+ if (vcgen.CheckerCommonState == null) {
+ vcgen.CheckerCommonState = new Dictionary<ContextCacheKey, ProverContext>();
+ }
+ IDictionary<ContextCacheKey, ProverContext>/*!>!*/ cachedContexts = (IDictionary<ContextCacheKey, ProverContext/*!*/>)vcgen.CheckerCommonState;
+
+ if (ctx == null && cachedContexts.TryGetValue(key, out ctx))
+ {
+ ctx = (ProverContext)cce.NonNull(ctx).Clone();
+ prover = (ProverInterface)
+ CommandLineOptions.Clo.TheProverFactory.SpawnProver(options, ctx);
+ } else {
+ if (ctx == null) ctx = (ProverContext)CommandLineOptions.Clo.TheProverFactory.NewProverContext(options);
+
+ Setup(prog, ctx);
+
+ // we first generate the prover and then store a clone of the
+ // context in the cache, so that the prover can setup stuff in
+ // the context to be cached
+ prover = (ProverInterface)
+ CommandLineOptions.Clo.TheProverFactory.SpawnProver(options, ctx);
+ cachedContexts.Add(key, cce.NonNull((ProverContext)ctx.Clone()));
+ }
+
+ this.thmProver = prover;
+ this.gen = prover.VCExprGen;
+ }
+
+ public void Retarget(Program prog, ProverContext ctx, int timeout = 0)
+ {
+ lock (this)
+ {
+ hasOutput = default(bool);
+ outcome = default(ProverInterface.Outcome);
+ outputExn = default(UnexpectedProverOutputException);
+ handler = default(ProverInterface.ErrorHandler);
+ TheoremProver.FullReset(gen);
+ ctx.Reset();
+ Setup(prog, ctx);
+ this.timeout = timeout;
+ SetTimeout();
+ }
+ }
+
+ public void RetargetWithoutReset(Program prog, ProverContext ctx)
+ {
+ ctx.Clear();
+ Setup(prog, ctx);
+ }
+
+
+ public void SetTimeout()
+ {
+ if (0 < timeout)
+ {
+ TheoremProver.SetTimeOut(timeout * 1000);
+ }
+ else
+ {
+ TheoremProver.SetTimeOut(0);
+ }
+ }
+
+ /// <summary>
+ /// Set up the context.
+ /// </summary>
+ private void Setup(Program prog, ProverContext ctx)
+ {
+ Program = prog;
+ // TODO(wuestholz): Is this lock necessary?
+ lock (Program.TopLevelDeclarations)
+ {
+ foreach (Declaration decl in Program.TopLevelDeclarations)
+ {
+ Contract.Assert(decl != null);
+ var typeDecl = decl as TypeCtorDecl;
+ var constDecl = decl as Constant;
+ var funDecl = decl as Function;
+ var axiomDecl = decl as Axiom;
+ var glVarDecl = decl as GlobalVariable;
+ if (typeDecl != null)
+ {
+ ctx.DeclareType(typeDecl, null);
+ }
+ else if (constDecl != null)
+ {
+ ctx.DeclareConstant(constDecl, constDecl.Unique, null);
+ }
+ else if (funDecl != null)
+ {
+ ctx.DeclareFunction(funDecl, null);
+ }
+ else if (axiomDecl != null)
+ {
+ ctx.AddAxiom(axiomDecl, null);
+ }
+ else if (glVarDecl != null)
+ {
+ ctx.DeclareGlobalVariable(glVarDecl, null);
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Clean-up.
+ /// </summary>
+ public void Close() {
+ thmProver.Close();
+ status = CheckerStatus.Closed;
+ }
+
+ /// <summary>
+ /// Push a Verification Condition as an Axiom
+ /// (Required for Doomed Program Point detection)
+ /// </summary>
+ public void PushVCExpr(VCExpr vc) {
+ Contract.Requires(vc != null);
+ //thmProver.Context.AddAxiom(vc);
+ thmProver.PushVCExpression(vc);
+ }
+
+ public bool IsBusy {
+ get {
+ return status == CheckerStatus.Busy;
+ }
+ }
+
+ public bool IsReady
+ {
+ get
+ {
+ return status == CheckerStatus.Ready;
+ }
+ }
+
+ public bool IsClosed {
+ get {
+ return status == CheckerStatus.Closed;
+ }
+ }
+
+ public bool IsIdle
+ {
+ get
+ {
+ return status == CheckerStatus.Idle;
+ }
+ }
+
+ public bool HasOutput {
+ get {
+ return hasOutput;
+ }
+ }
+
+ public TimeSpan ProverRunTime {
+ get {
+ return proverRunTime;
+ }
+ }
+
+ private void WaitForOutput(object dummy) {
+ lock (this)
+ {
+ try
+ {
+ outcome = thmProver.CheckOutcome(cce.NonNull(handler));
+ }
+ catch (UnexpectedProverOutputException e)
+ {
+ outputExn = e;
+ }
+
+ switch (outcome)
+ {
+ case ProverInterface.Outcome.Valid:
+ thmProver.LogComment("Valid");
+ break;
+ case ProverInterface.Outcome.Invalid:
+ thmProver.LogComment("Invalid");
+ break;
+ case ProverInterface.Outcome.TimeOut:
+ thmProver.LogComment("Timed out");
+ break;
+ case ProverInterface.Outcome.OutOfMemory:
+ thmProver.LogComment("Out of memory");
+ break;
+ case ProverInterface.Outcome.Undetermined:
+ thmProver.LogComment("Undetermined");
+ break;
+ }
+
+ hasOutput = true;
+ proverRunTime = DateTime.UtcNow - proverStart;
+ }
+ }
+
+ public void BeginCheck(string descriptiveName, VCExpr vc, ProverInterface.ErrorHandler handler) {
+ Contract.Requires(descriptiveName != null);
+ Contract.Requires(vc != null);
+ Contract.Requires(handler != null);
+ Contract.Requires(IsReady);
+
+ status = CheckerStatus.Busy;
+ hasOutput = false;
+ outputExn = null;
+ this.handler = handler;
+
+ thmProver.Reset(gen);
+ SetTimeout();
+ proverStart = DateTime.UtcNow;
+ thmProver.BeginCheck(descriptiveName, vc, handler);
+ // gen.ClearSharedFormulas(); PR: don't know yet what to do with this guy
+
+ ProverTask = Task.Factory.StartNew(() => { WaitForOutput(null); }, TaskCreationOptions.LongRunning);
+ }
+
+ public ProverInterface.Outcome ReadOutcome() {
+ Contract.Requires(IsBusy);
+ Contract.Requires(HasOutput);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ hasOutput = false;
+
+ if (outputExn != null) {
+ throw outputExn;
+ }
+
+ return outcome;
+ }
+ }
+
+ // -----------------------------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------------------------
+
+ public abstract class ProverInterface {
+
+ public static ProverInterface CreateProver(Program prog, string/*?*/ logFilePath, bool appendLogFile, int timeout, int taskID = -1) {
+ Contract.Requires(prog != null);
+
+ ProverOptions options = cce.NonNull(CommandLineOptions.Clo.TheProverFactory).BlankProverOptions();
+
+ if (logFilePath != null) {
+ options.LogFilename = logFilePath;
+ if (appendLogFile)
+ options.AppendLogFile = appendLogFile;
+ }
+
+ if (timeout > 0) {
+ options.TimeLimit = timeout * 1000;
+ }
+
+ if (taskID >= 0) {
+ options.Parse(CommandLineOptions.Clo.Cho[taskID].ProverOptions);
+ } else {
+ options.Parse(CommandLineOptions.Clo.ProverOptions);
+ }
+
+ ProverContext ctx = (ProverContext)CommandLineOptions.Clo.TheProverFactory.NewProverContext(options);
+
+ // set up the context
+ foreach (Declaration decl in prog.TopLevelDeclarations) {
+ Contract.Assert(decl != null);
+ TypeCtorDecl t = decl as TypeCtorDecl;
+ if (t != null) {
+ ctx.DeclareType(t, null);
+ }
+ }
+ foreach (Declaration decl in prog.TopLevelDeclarations) {
+ Contract.Assert(decl != null);
+ Constant c = decl as Constant;
+ if (c != null) {
+ ctx.DeclareConstant(c, c.Unique, null);
+ }
+ else {
+ Function f = decl as Function;
+ if (f != null) {
+ ctx.DeclareFunction(f, null);
+ }
+ }
+ }
+ foreach (var ax in prog.Axioms) {
+ ctx.AddAxiom(ax, null);
+ }
+ foreach (Declaration decl in prog.TopLevelDeclarations) {
+ Contract.Assert(decl != null);
+ GlobalVariable v = decl as GlobalVariable;
+ if (v != null) {
+ ctx.DeclareGlobalVariable(v, null);
+ }
+ }
+
+ return (ProverInterface)CommandLineOptions.Clo.TheProverFactory.SpawnProver(options, ctx);
+ }
+
+ public enum Outcome {
+ Valid,
+ Invalid,
+ TimeOut,
+ OutOfMemory,
+ Undetermined,
+ Bounded
+ }
+
+ public readonly ISet<VCExprVar> NamedAssumes = new HashSet<VCExprVar>();
+ public ISet<string> UsedNamedAssumes { get; protected set; }
+
+ public class ErrorHandler {
+ // Used in CheckOutcomeCore
+ public virtual int StartingProcId()
+ {
+ return 0;
+ }
+
+ public virtual void OnModel(IList<string> labels, Model model, Outcome proverOutcome) {
+ Contract.Requires(cce.NonNullElements(labels));
+ }
+
+ public virtual void OnResourceExceeded(string message, IEnumerable<Tuple<AssertCmd, TransferCmd>> assertCmds = null) {
+ Contract.Requires(message != null);
+ }
+
+ public virtual void OnProverWarning(string message)
+ {
+ Contract.Requires(message != null);
+ switch (CommandLineOptions.Clo.PrintProverWarnings) {
+ case CommandLineOptions.ProverWarnings.None:
+ break;
+ case CommandLineOptions.ProverWarnings.Stdout:
+ Console.WriteLine("Prover warning: " + message);
+ break;
+ case CommandLineOptions.ProverWarnings.Stderr:
+ Console.Error.WriteLine("Prover warning: " + message);
+ break;
+ default:
+ Contract.Assume(false);
+ throw new cce.UnreachableException(); // unexpected case
+ }
+ }
+
+ public virtual Absy Label2Absy(string label) {
+ Contract.Requires(label != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+
+ throw new System.NotImplementedException();
+ }
+ }
+ public abstract void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler);
+
+ public virtual Outcome CheckRPFP(string descriptiveName, RPFP vc, ErrorHandler handler,
+ out RPFP.Node cex,
+ Dictionary<int, Dictionary<string, string>> varSubst, Dictionary<string,int> extra_bound = null)
+ {
+ throw new System.NotImplementedException();
+ }
+ [NoDefaultContract]
+ public abstract Outcome CheckOutcome(ErrorHandler handler, int taskID = -1);
+ public virtual string[] CalculatePath(int controlFlowConstant) {
+ throw new System.NotImplementedException();
+ }
+ public virtual void LogComment(string comment) {
+ Contract.Requires(comment != null);
+ }
+ public virtual void Close() {
+ }
+
+ public abstract void Reset(VCExpressionGenerator gen);
+
+ public abstract void FullReset(VCExpressionGenerator gen);
+
+ /// <summary>
+ /// MSchaef: Allows to Push a VCExpression as Axiom on the prover stack (beta)
+ /// for now it is only implemented by ProcessTheoremProver and still requires some
+ /// testing
+ /// </summary>
+ public virtual void PushVCExpression(VCExpr vc) {
+ Contract.Requires(vc != null);
+ throw new NotImplementedException();
+ }
+ public virtual string VCExpressionToString(VCExpr vc) {
+ Contract.Requires(vc != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+ throw new NotImplementedException();
+ }
+ public virtual void Pop() {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ throw new NotImplementedException();
+ }
+ public virtual int NumAxiomsPushed() {
+ throw new NotImplementedException();
+ }
+ public virtual int FlushAxiomsToTheoremProver() {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ throw new NotImplementedException();
+ }
+
+ // (assert vc)
+ public virtual void Assert(VCExpr vc, bool polarity, bool isSoft = false, int weight = 1)
+ {
+ throw new NotImplementedException();
+ }
+
+ // (assert implicit-axioms)
+ public virtual void AssertAxioms()
+ {
+ throw new NotImplementedException();
+ }
+
+ // (check-sat)
+ public virtual void Check()
+ {
+ throw new NotImplementedException();
+ }
+
+ // (check-sat + get-unsat-core + checkOutcome)
+ public virtual Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore, ErrorHandler handler)
+ {
+ throw new NotImplementedException();
+ }
+
+ public virtual Outcome CheckAssumptions(List<VCExpr> hardAssumptions, List<VCExpr> softAssumptions, out List<int> unsatisfiedSoftAssumptions, ErrorHandler handler) {
+ throw new NotImplementedException();
+ }
+
+ public virtual Outcome CheckOutcomeCore(ErrorHandler handler, int taskID = -1)
+ {
+ throw new NotImplementedException();
+ }
+
+ // (push 1)
+ public virtual void Push()
+ {
+ throw new NotImplementedException();
+ }
+
+ // Set theorem prover timeout for the next "check-sat"
+ public virtual void SetTimeOut(int ms)
+ { }
+
+ public abstract ProverContext Context {
+ get;
+ }
+
+ public abstract VCExpressionGenerator VCExprGen {
+ get;
+ }
+
+ public virtual void DefineMacro(Macro fun, VCExpr vc) {
+ throw new NotImplementedException();
+ }
+
+ public class VCExprEvaluationException : Exception
+ {
+
+ }
+
+ public virtual object Evaluate(VCExpr expr)
+ {
+ throw new NotImplementedException();
+ }
+
+ //////////////////////
+ // For interpolation queries
+ //////////////////////
+
+ // Assert vc tagged with a name
+ public virtual void AssertNamed(VCExpr vc, bool polarity, string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ // Returns Interpolant(A,B)
+ public virtual VCExpr ComputeInterpolant(VCExpr A, VCExpr B)
+ {
+ throw new NotImplementedException();
+ }
+
+ // Returns for each l, Interpolant(root + (leaves - l), l)
+ // Preconditions:
+ // leaves cannot have subformulas with same variable names
+ // Both root and leaves should have been previously named via AssertNamed
+ public virtual List<VCExpr> GetTreeInterpolant(List<string> root, List<string> leaves)
+ {
+ throw new NotImplementedException();
+ }
+
+ }
+
+ public class ProverInterfaceContracts : ProverInterface {
+ public override ProverContext Context {
+ get {
+ Contract.Ensures(Contract.Result<ProverContext>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+ public override VCExpressionGenerator VCExprGen {
+ get {
+ Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+ public override void BeginCheck(string descriptiveName, VCExpr vc, ErrorHandler handler) {/*Contract.Requires(descriptiveName != null);*/
+ //Contract.Requires(vc != null);
+ //Contract.Requires(handler != null);
+ throw new NotImplementedException();
+ }
+ [NoDefaultContract]
+ public override Outcome CheckOutcome(ErrorHandler handler, int taskID = -1) {
+ //Contract.Requires(handler != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ throw new NotImplementedException();
+ }
+
+ public override void Reset(VCExpressionGenerator gen)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void FullReset(VCExpressionGenerator gen)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public class ProverException : Exception {
+ public ProverException(string s)
+ : base(s) {
+ }
+ }
+ public class UnexpectedProverOutputException : ProverException {
+ public UnexpectedProverOutputException(string s)
+ : base(s) {
+ }
+ }
+ public class ProverDiedException : UnexpectedProverOutputException {
+ public ProverDiedException()
+ : base("Prover died with no further output, perhaps it ran out of memory or was killed.") {
+ }
+ }
+}
diff --git a/Source/VCGeneration/ConditionGeneration.cs b/Source/VCGeneration/ConditionGeneration.cs
index 515ec16d..19438924 100644
--- a/Source/VCGeneration/ConditionGeneration.cs
+++ b/Source/VCGeneration/ConditionGeneration.cs
@@ -1,1985 +1,2041 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-using Set = Microsoft.Boogie.GSet<object>;
-
-namespace Microsoft.Boogie {
-
- public class CalleeCounterexampleInfo {
- public Counterexample counterexample;
- public List<object>/*!>!*/ args;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(args));
- }
-
- public CalleeCounterexampleInfo(Counterexample cex, List<object/*!>!*/> x)
- {
- Contract.Requires(cce.NonNullElements(x));
- counterexample = cex;
- args = x;
- }
- }
-
- public class TraceLocation : IEquatable<TraceLocation>
- {
- public int numBlock;
- public int numInstr;
-
- public TraceLocation(int numBlock, int numInstr)
- {
- this.numBlock = numBlock;
- this.numInstr = numInstr;
- }
-
- public override bool Equals(object obj)
- {
- TraceLocation that = obj as TraceLocation;
- if (that == null) return false;
- return (numBlock == that.numBlock && numInstr == that.numInstr);
- }
-
- public bool Equals(TraceLocation that)
- {
- return (numBlock == that.numBlock && numInstr == that.numInstr);
- }
-
- public override int GetHashCode()
- {
- return numBlock.GetHashCode() ^ 131 * numInstr.GetHashCode();
- }
- }
-
- public abstract class Counterexample {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Trace != null);
- Contract.Invariant(Context != null);
- Contract.Invariant(cce.NonNullElements(relatedInformation));
- Contract.Invariant(cce.NonNullDictionaryAndValues(calleeCounterexamples));
- }
-
- [Peer]
- public List<Block> Trace;
- public Model Model;
- public VC.ModelViewInfo MvInfo;
- public ProverContext Context;
- [Peer]
- public List<string>/*!>!*/ relatedInformation;
- public string OriginalRequestId;
- public string RequestId;
- public abstract byte[] Checksum { get; }
- public byte[] SugaredCmdChecksum;
-
- public Dictionary<TraceLocation, CalleeCounterexampleInfo> calleeCounterexamples;
-
- internal Counterexample(List<Block> trace, Model model, VC.ModelViewInfo mvInfo, ProverContext context) {
- Contract.Requires(trace != null);
- Contract.Requires(context != null);
- this.Trace = trace;
- this.Model = model;
- this.MvInfo = mvInfo;
- this.Context = context;
- this.relatedInformation = new List<string>();
- this.calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
- }
-
- // Create a shallow copy of the counterexample
- public abstract Counterexample Clone();
-
- public void AddCalleeCounterexample(TraceLocation loc, CalleeCounterexampleInfo cex)
- {
- Contract.Requires(cex != null);
- calleeCounterexamples[loc] = cex;
- }
-
- public void AddCalleeCounterexample(int numBlock, int numInstr, CalleeCounterexampleInfo cex)
- {
- Contract.Requires(cex != null);
- calleeCounterexamples[new TraceLocation(numBlock, numInstr)] = cex;
- }
-
- public void AddCalleeCounterexample(Dictionary<TraceLocation, CalleeCounterexampleInfo> cs)
- {
- Contract.Requires(cce.NonNullDictionaryAndValues(cs));
- foreach (TraceLocation loc in cs.Keys)
- {
- AddCalleeCounterexample(loc, cs[loc]);
- }
- }
-
- // Looks up the Cmd at a given index into the trace
- public Cmd getTraceCmd(TraceLocation loc)
- {
- Debug.Assert(loc.numBlock < Trace.Count);
- Block b = Trace[loc.numBlock];
- Debug.Assert(loc.numInstr < b.Cmds.Count);
- return b.Cmds[loc.numInstr];
- }
-
- // Looks up the name of the called procedure.
- // Asserts that the name exists
- public string getCalledProcName(Cmd cmd)
- {
- // There are two options:
- // 1. cmd is a CallCmd
- // 2. cmd is an AssumeCmd (passified version of a CallCmd)
- if(cmd is CallCmd) {
- return (cmd as CallCmd).Proc.Name;
- }
- AssumeCmd assumeCmd = cmd as AssumeCmd;
- Debug.Assert(assumeCmd != null);
-
- NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
- Debug.Assert(naryExpr != null);
-
- return naryExpr.Fun.FunctionName;
- }
-
- public void Print(int indent, TextWriter tw, Action<Block> blockAction = null) {
- int numBlock = -1;
- string ind = new string(' ', indent);
- foreach (Block b in Trace) {
- Contract.Assert(b != null);
- numBlock++;
- if (b.tok == null) {
- tw.WriteLine("{0}<intermediate block>", ind);
- } else {
- // for ErrorTrace == 1 restrict the output;
- // do not print tokens with -17:-4 as their location because they have been
- // introduced in the translation and do not give any useful feedback to the user
- if (!(CommandLineOptions.Clo.ErrorTrace == 1 && b.tok.line == -17 && b.tok.col == -4)) {
- if (blockAction != null)
- {
- blockAction(b);
- }
-
- tw.WriteLine("{4}{0}({1},{2}): {3}", b.tok.filename, b.tok.line, b.tok.col, b.Label, ind);
-
- for (int numInstr = 0; numInstr < b.Cmds.Count; numInstr++)
- {
- var loc = new TraceLocation(numBlock, numInstr);
- if (calleeCounterexamples.ContainsKey(loc))
- {
- var cmd = getTraceCmd(loc);
- var calleeName = getCalledProcName(cmd);
- if (calleeName.StartsWith(VC.StratifiedVCGen.recordProcName) && CommandLineOptions.Clo.StratifiedInlining > 0)
- {
- Contract.Assert(calleeCounterexamples[loc].args.Count == 1);
- var arg = calleeCounterexamples[loc].args[0];
- tw.WriteLine("{0}value = {1}", ind, arg.ToString());
- }
- else
- {
- tw.WriteLine("{1}Inlined call to procedure {0} begins", calleeName, ind);
- calleeCounterexamples[loc].counterexample.Print(indent + 4, tw);
- tw.WriteLine("{1}Inlined call to procedure {0} ends", calleeName, ind);
- }
- }
- }
- }
- }
- }
- }
-
- public static bool firstModelFile = true;
-
- public bool ModelHasStatesAlready = false;
-
- public void PrintModel(TextWriter tw)
- {
- var filename = CommandLineOptions.Clo.ModelViewFile;
- if (Model == null || filename == null || CommandLineOptions.Clo.StratifiedInlining > 0) return;
-
- if (!ModelHasStatesAlready) {
- PopulateModelWithStates();
- ModelHasStatesAlready = true;
- }
-
- if (filename == "-") {
- Model.Write(tw);
- tw.Flush();
- } else {
- using (var wr = new StreamWriter(filename, !firstModelFile)) {
- firstModelFile = false;
- Model.Write(wr);
- }
- }
- }
-
- void ApplyRedirections(Model m) {
- var mapping = new Dictionary<Model.Element, Model.Element>();
- foreach (var name in new string[] { "U_2_bool", "U_2_int" }) {
- Model.Func f = m.TryGetFunc(name);
- if (f != null && f.Arity == 1) {
- foreach (var ft in f.Apps) mapping[ft.Args[0]] = ft.Result;
- }
- }
- m.Substitute(mapping);
- }
-
- public void PopulateModelWithStates()
- {
- Contract.Requires(Model != null);
-
- Model m = Model;
- ApplyRedirections(m);
-
- var mvstates = m.TryGetFunc("$mv_state");
- if (MvInfo == null || mvstates == null || (mvstates.Arity == 1 && mvstates.Apps.Count() == 0))
- return;
-
- Contract.Assert(mvstates.Arity == 2);
-
- foreach (Variable v in MvInfo.AllVariables) {
- m.InitialState.AddBinding(v.Name, GetModelValue(m, v));
- }
-
- var states = new List<int>();
- foreach (var t in mvstates.Apps)
- states.Add(t.Args[1].AsInt());
-
- states.Sort();
-
- for (int i = 0; i < states.Count; ++i) {
- var s = states[i];
- if (0 <= s && s < MvInfo.CapturePoints.Count) {
- VC.ModelViewInfo.Mapping map = MvInfo.CapturePoints[s];
- var prevInc = i > 0 ? MvInfo.CapturePoints[states[i - 1]].IncarnationMap : new Dictionary<Variable, Expr>();
- var cs = m.MkState(map.Description);
-
- foreach (Variable v in MvInfo.AllVariables) {
- Expr e = map.IncarnationMap.ContainsKey(v) ? map.IncarnationMap[v] : null;
- if (e == null) continue;
-
- Expr prevIncV = prevInc.ContainsKey(v) ? prevInc[v] : null;
- if (prevIncV == e) continue; // skip unchanged variables
-
- Model.Element elt;
-
- if (e is IdentifierExpr) {
- IdentifierExpr ide = (IdentifierExpr)e;
- elt = GetModelValue(m, ide.Decl);
- } else if (e is LiteralExpr) {
- LiteralExpr lit = (LiteralExpr)e;
- elt = m.MkElement(lit.Val.ToString());
- } else {
- elt = m.MkFunc(e.ToString(), 0).GetConstant();
- }
-
- cs.AddBinding(v.Name, elt);
- }
-
- } else {
- Contract.Assume(false);
- }
- }
- }
-
- private Model.Element GetModelValue(Model m, Variable v) {
- Model.Element elt;
- // first, get the unique name
- string uniqueName;
- VCExprVar vvar = Context.BoogieExprTranslator.TryLookupVariable(v);
- if (vvar == null) {
- uniqueName = v.Name;
- } else {
- uniqueName = Context.Lookup(vvar);
- }
-
- var f = m.TryGetFunc(uniqueName);
- if (f == null) {
- f = m.MkFunc(uniqueName, 0);
- }
- elt = f.GetConstant();
- return elt;
- }
-
- public abstract int GetLocation();
- }
-
- public class CounterexampleComparer : IComparer<Counterexample> {
-
- private int Compare(List<Block> bs1, List<Block> bs2)
- {
- if (bs1.Count < bs2.Count)
- {
- return -1;
- }
- else if (bs2.Count < bs1.Count)
- {
- return 1;
- }
-
- for (int i = 0; i < bs1.Count; i++)
- {
- var b1 = bs1[i];
- var b2 = bs2[i];
- if (b1.tok.pos < b2.tok.pos)
- {
- return -1;
- }
- else if (b2.tok.pos < b1.tok.pos)
- {
- return 1;
- }
- }
-
- return 0;
- }
-
- public int Compare(Counterexample c1, Counterexample c2)
- {
- //Contract.Requires(c1 != null);
- //Contract.Requires(c2 != null);
- if (c1.GetLocation() == c2.GetLocation())
- {
- var c = Compare(c1.Trace, c2.Trace);
- if (c != 0)
- {
- return c;
- }
- // TODO(wuestholz): Generalize this to compare all IPotentialErrorNodes of the counterexample.
- var a1 = c1 as AssertCounterexample;
- var a2 = c2 as AssertCounterexample;
- if (a1 != null && a2 != null)
- {
- var s1 = a1.FailingAssert.ErrorData as string;
- var s2 = a2.FailingAssert.ErrorData as string;
- if (s1 != null && s2 != null)
- {
- return s1.CompareTo(s2);
- }
- }
-
- return 0;
- }
- if (c1.GetLocation() > c2.GetLocation())
- {
- return 1;
- }
- return -1;
- }
- }
-
- public class AssertCounterexample : Counterexample {
- [Peer]
- public AssertCmd FailingAssert;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(FailingAssert != null);
- }
-
-
- public AssertCounterexample(List<Block> trace, AssertCmd failingAssert, Model model, VC.ModelViewInfo mvInfo, ProverContext context)
- : base(trace, model, mvInfo, context) {
- Contract.Requires(trace != null);
- Contract.Requires(failingAssert != null);
- Contract.Requires(context != null);
- this.FailingAssert = failingAssert;
- }
-
- public override int GetLocation() {
- return FailingAssert.tok.line * 1000 + FailingAssert.tok.col;
- }
-
- public override byte[] Checksum
- {
- get { return FailingAssert.Checksum; }
- }
-
- public override Counterexample Clone()
- {
- var ret = new AssertCounterexample(Trace, FailingAssert, Model, MvInfo, Context);
- ret.calleeCounterexamples = calleeCounterexamples;
- return ret;
- }
- }
-
- public class CallCounterexample : Counterexample {
- public CallCmd FailingCall;
- public Requires FailingRequires;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(FailingCall != null);
- Contract.Invariant(FailingRequires != null);
- }
-
-
- public CallCounterexample(List<Block> trace, CallCmd failingCall, Requires failingRequires, Model model, VC.ModelViewInfo mvInfo, ProverContext context, byte[] checksum = null)
- : base(trace, model, mvInfo, context) {
- Contract.Requires(!failingRequires.Free);
- Contract.Requires(trace != null);
- Contract.Requires(context != null);
- Contract.Requires(failingCall != null);
- Contract.Requires(failingRequires != null);
- this.FailingCall = failingCall;
- this.FailingRequires = failingRequires;
- this.checksum = checksum;
- this.SugaredCmdChecksum = failingCall.Checksum;
- }
-
- public override int GetLocation() {
- return FailingCall.tok.line * 1000 + FailingCall.tok.col;
- }
-
- byte[] checksum;
- public override byte[] Checksum
- {
- get { return checksum; }
- }
-
- public override Counterexample Clone()
- {
- var ret = new CallCounterexample(Trace, FailingCall, FailingRequires, Model, MvInfo, Context, Checksum);
- ret.calleeCounterexamples = calleeCounterexamples;
- return ret;
- }
- }
-
- public class ReturnCounterexample : Counterexample {
- public TransferCmd FailingReturn;
- public Ensures FailingEnsures;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(FailingEnsures != null);
- Contract.Invariant(FailingReturn != null);
- }
-
-
- public ReturnCounterexample(List<Block> trace, TransferCmd failingReturn, Ensures failingEnsures, Model model, VC.ModelViewInfo mvInfo, ProverContext context, byte[] checksum)
- : base(trace, model, mvInfo, context) {
- Contract.Requires(trace != null);
- Contract.Requires(context != null);
- Contract.Requires(failingReturn != null);
- Contract.Requires(failingEnsures != null);
- Contract.Requires(!failingEnsures.Free);
- this.FailingReturn = failingReturn;
- this.FailingEnsures = failingEnsures;
- this.checksum = checksum;
- }
-
- public override int GetLocation() {
- return FailingReturn.tok.line * 1000 + FailingReturn.tok.col;
- }
-
- byte[] checksum;
-
- /// <summary>
- /// Returns the checksum of the corresponding assertion.
- /// </summary>
- public override byte[] Checksum
- {
- get
- {
- return checksum;
- }
- }
-
- public override Counterexample Clone()
- {
- var ret = new ReturnCounterexample(Trace, FailingReturn, FailingEnsures, Model, MvInfo, Context, checksum);
- ret.calleeCounterexamples = calleeCounterexamples;
- return ret;
- }
- }
-
- public class VerifierCallback {
- // reason == null means this is genuine counterexample returned by the prover
- // other reason means it's time out/memory out/crash
- public virtual void OnCounterexample(Counterexample ce, string/*?*/ reason) {
- Contract.Requires(ce != null);
- }
-
- // called in case resource is exceeded and we don't have counterexample
- public virtual void OnTimeout(string reason) {
- Contract.Requires(reason != null);
- }
-
- public virtual void OnOutOfMemory(string reason) {
- Contract.Requires(reason != null);
- }
-
- public virtual void OnProgress(string phase, int step, int totalSteps, double progressEstimate) {
- }
-
- public virtual void OnUnreachableCode(Implementation impl) {
- Contract.Requires(impl != null);
- }
-
- public virtual void OnWarning(string msg) {
- Contract.Requires(msg != null);
- switch (CommandLineOptions.Clo.PrintProverWarnings) {
- case CommandLineOptions.ProverWarnings.None:
- break;
- case CommandLineOptions.ProverWarnings.Stdout:
- Console.WriteLine("Prover warning: " + msg);
- break;
- case CommandLineOptions.ProverWarnings.Stderr:
- Console.Error.WriteLine("Prover warning: " + msg);
- break;
- default:
- Contract.Assume(false);
- throw new cce.UnreachableException(); // unexpected case
- }
- }
- }
-}
-
-////////////////////////////////////////////
-
-namespace VC {
- using Bpl = Microsoft.Boogie;
-
- public class VCGenException : Exception {
- public VCGenException(string s)
- : base(s) {
- }
- }
- [ContractClassFor(typeof(ConditionGeneration))]
- public abstract class ConditionGenerationContracts : ConditionGeneration {
- public override Outcome VerifyImplementation(Implementation impl, VerifierCallback callback) {
- Contract.Requires(impl != null);
- Contract.Requires(callback != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- throw new NotImplementedException();
- }
- public ConditionGenerationContracts(Program p, List<Checker> checkers)
- : base(p, checkers) {
- }
- }
-
- [ContractClass(typeof(ConditionGenerationContracts))]
- public abstract class ConditionGeneration : IDisposable {
- protected internal object CheckerCommonState;
-
- public enum Outcome {
- Correct,
- Errors,
- TimedOut,
- OutOfMemory,
- Inconclusive,
- ReachedBound
- }
-
- public static Outcome ProverInterfaceOutcomeToConditionGenerationOutcome(ProverInterface.Outcome outcome) {
- switch (outcome) {
- case ProverInterface.Outcome.Invalid:
- return Outcome.Errors;
- case ProverInterface.Outcome.OutOfMemory:
- return Outcome.OutOfMemory;
- case ProverInterface.Outcome.TimeOut:
- return Outcome.TimedOut;
- case ProverInterface.Outcome.Undetermined:
- return Outcome.Inconclusive;
- case ProverInterface.Outcome.Valid:
- return Outcome.Correct;
- }
- return Outcome.Inconclusive; // unreachable but the stupid compiler does not understand
- }
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(checkers));
- Contract.Invariant(cce.NonNullDictionaryAndValues(incarnationOriginMap));
- Contract.Invariant(program != null);
- }
-
- public int CumulativeAssertionCount; // for statistics
-
- protected readonly List<Checker>/*!>!*/ checkers;
-
- private bool _disposed;
-
- protected Implementation currentImplementation;
-
- protected List<Variable> CurrentLocalVariables = null;
-
- // shared across each implementation; created anew for each implementation
- protected Dictionary<Variable, int> variable2SequenceNumber;
- public Dictionary<Incarnation, Absy>/*!>!*/ incarnationOriginMap = new Dictionary<Incarnation, Absy>();
-
- public Program program;
- protected string/*?*/ logFilePath;
- protected bool appendLogFile;
-
- public static List<Model> errorModelList;
-
- public ConditionGeneration(Program p, List<Checker> checkers) {
- Contract.Requires(p != null && checkers != null && cce.NonNullElements(checkers));
- program = p;
- this.checkers = checkers;
- Cores = 1;
- }
-
- /// <summary>
- /// Takes an implementation and constructs a verification condition and sends
- /// it to the theorem prover.
- /// Returns null if "impl" is correct. Otherwise, returns a list of counterexamples,
- /// each counterexample consisting of an array of labels.
- /// </summary>
- /// <param name="impl"></param>
- public Outcome VerifyImplementation(Implementation impl, out List<Counterexample>/*?*/ errors, string requestId = null) {
- Contract.Requires(impl != null);
-
- Contract.Ensures(Contract.ValueAtReturn(out errors) == null || Contract.ForAll(Contract.ValueAtReturn(out errors), i => i != null));
- Contract.Ensures(Contract.Result<Outcome>() != Outcome.Errors || errors != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- Helpers.ExtraTraceInformation("Starting implementation verification");
-
- CounterexampleCollector collector = new CounterexampleCollector();
- collector.RequestId = requestId;
- Outcome outcome = VerifyImplementation(impl, collector);
- if (outcome == Outcome.Errors || outcome == Outcome.TimedOut || outcome == Outcome.OutOfMemory) {
- errors = collector.examples;
- } else {
- errors = null;
- }
-
- Helpers.ExtraTraceInformation("Finished implementation verification");
- return outcome;
- }
-
- /// <summary>
- /// Takes an implementation and constructs a verification condition and sends
- /// it to the theorem prover.
- /// Returns null if "impl" is correct. Otherwise, returns a list of counterexamples,
- /// each counterexample consisting of an array of labels.
- /// </summary>
- /// <param name="impl"></param>
- public Outcome VerifyImplementation(Implementation impl, out List<Counterexample> errors, out List<Model> errorsModel)
- {
- Contract.Ensures(Contract.Result<Outcome>() != Outcome.Errors || Contract.ValueAtReturn(out errors) != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- List<Counterexample> errorsOut;
-
- Outcome outcome;
- errorModelList = new List<Model>();
- outcome = VerifyImplementation(impl, out errorsOut);
- errors = errorsOut;
- errorsModel = errorModelList;
-
- return outcome;
- }
-
- public abstract Outcome VerifyImplementation(Implementation impl, VerifierCallback callback);
-
- /////////////////////////////////// Common Methods and Classes //////////////////////////////////////////
-
- #region Methods for injecting pre- and postconditions
- private static void
- ThreadInCodeExpr(Implementation impl,
- Block targetBlock,
- CodeExpr codeExpr,
- bool replaceWithAssert,
- TokenTextWriter debugWriter) {
- Contract.Requires(impl != null);
- Contract.Requires(codeExpr != null);
- Contract.Requires(targetBlock != null);
- // Go through codeExpr and for all blocks that have a "return e"
- // as their transfer command:
- // Replace all "return e" with "assert/assume e"
- // Change the transfer command to "goto targetBlock"
- // Then add all of the blocks in codeExpr to the implementation (at the end)
- foreach (Block b in codeExpr.Blocks) {
- Contract.Assert(b != null);
- ReturnExprCmd rec = b.TransferCmd as ReturnExprCmd;
- if (rec != null) { // otherwise it is a goto command
- if (replaceWithAssert) {
- Ensures ens = new Ensures(rec.tok, false, rec.Expr, null);
- Contract.Assert(ens != null);
- Cmd c = new AssertEnsuresCmd(ens);
- Contract.Assert(c != null);
- b.Cmds.Add(c);
- } else {
- b.Cmds.Add(new AssumeCmd(rec.tok, rec.Expr));
- }
- b.TransferCmd = new GotoCmd(Token.NoToken,
- new List<String> { targetBlock.Label },
- new List<Block> { targetBlock });
- targetBlock.Predecessors.Add(b);
- }
- impl.Blocks.Add(b);
- }
- if (debugWriter != null) {
- codeExpr.Emit(debugWriter, 1, false);
- }
- return;
- }
-
- private static void AddAsPrefix(Block b, List<Cmd> cs) {
- Contract.Requires(b != null);
- Contract.Requires(cs != null);
- List<Cmd> newCommands = new List<Cmd>();
- newCommands.AddRange(cs);
- newCommands.AddRange(b.Cmds);
- b.Cmds = newCommands;
- }
-
-
- /// <summary>
- /// Modifies an implementation by prepending it with startCmds and then, as assume
- /// statements, all preconditions. Insert new blocks as needed, and adjust impl.Blocks[0]
- /// accordingly to make it the new implementation entry block.
- /// </summary>
- /// <param name="impl"></param>
- /// <param name="startCmds"></param>
- protected static void InjectPreconditions(Implementation impl, [Captured] List<Cmd> startCmds) {
- Contract.Requires(impl != null);
- Contract.Requires(startCmds != null);
- Contract.Requires(impl.Proc != null);
-
- TokenTextWriter debugWriter = null;
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
- debugWriter.WriteLine("Effective precondition:");
- }
-
- Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
- string blockLabel = "PreconditionGeneratedEntry";
-
- Block origStartBlock = impl.Blocks[0];
- Block insertionPoint = new Block(
- new Token(-17, -4), blockLabel, startCmds,
- new GotoCmd(Token.NoToken, new List<String> { origStartBlock.Label }, new List<Block> { origStartBlock }));
-
- impl.Blocks[0] = insertionPoint; // make insertionPoint the start block
- impl.Blocks.Add(origStartBlock); // and put the previous start block at the end of the list
-
- // (free and checked) requires clauses
- foreach (Requires req in impl.Proc.Requires)
- // invariant: insertionPoint.TransferCmd is "goto origStartBlock;", but origStartBlock.Predecessors has not yet been updated
- {
- Contract.Assert(req != null);
- Expr e = Substituter.Apply(formalProcImplSubst, req.Condition);
- Cmd c = new AssumeCmd(req.tok, e);
- insertionPoint.Cmds.Add(c);
- if (debugWriter != null) {
- c.Emit(debugWriter, 1);
- }
- }
- origStartBlock.Predecessors.Add(insertionPoint);
-
- if (debugWriter != null) {
- debugWriter.WriteLine();
- }
- }
- /// <summary>
- /// Modifies an implementation by inserting all postconditions
- /// as assert statements at the end of the implementation
- /// Returns the possibly-new unified exit block of the implementation
- /// </summary>
- /// <param name="impl"></param>
- /// <param name="unifiedExitblock">The unified exit block that has
- /// already been constructed for the implementation (and so
- /// is already an element of impl.Blocks)
- /// </param>
- protected static void InjectPostConditions(Implementation impl, Block unifiedExitBlock, Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins) {
- Contract.Requires(impl != null);
- Contract.Requires(unifiedExitBlock != null);
- Contract.Requires(gotoCmdOrigins != null);
- Contract.Requires(impl.Proc != null);
- Contract.Requires(unifiedExitBlock.TransferCmd is ReturnCmd);
-
- TokenTextWriter debugWriter = null;
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
- debugWriter.WriteLine("Effective postcondition:");
- }
-
- Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
-
- // (free and checked) ensures clauses
- foreach (Ensures ens in impl.Proc.Ensures) {
- Contract.Assert(ens != null);
- if (!ens.Free) { // skip free ensures clauses
- Expr e = Substituter.Apply(formalProcImplSubst, ens.Condition);
- Ensures ensCopy = (Ensures)cce.NonNull(ens.Clone());
- ensCopy.Condition = e;
- AssertEnsuresCmd c = new AssertEnsuresCmd(ensCopy);
- c.ErrorDataEnhanced = ensCopy.ErrorDataEnhanced;
- unifiedExitBlock.Cmds.Add(c);
- if (debugWriter != null) {
- c.Emit(debugWriter, 1);
- }
- }
- }
-
- if (debugWriter != null) {
- debugWriter.WriteLine();
- }
- }
-
-
- /// <summary>
- /// Get the pre-condition of an implementation, including the where clauses from the in-parameters.
- /// </summary>
- /// <param name="impl"></param>
- protected static List<Cmd> GetPre(Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
-
-
- TokenTextWriter debugWriter = null;
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
- debugWriter.WriteLine("Effective precondition:");
- }
-
- Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
- List<Cmd> pre = new List<Cmd>();
-
- // (free and checked) requires clauses
- foreach (Requires req in impl.Proc.Requires) {
- Contract.Assert(req != null);
- Expr e = Substituter.Apply(formalProcImplSubst, req.Condition);
- Contract.Assert(e != null);
- Cmd c = new AssumeCmd(req.tok, e);
- Contract.Assert(c != null);
- pre.Add(c);
-
- if (debugWriter != null) {
- c.Emit(debugWriter, 1);
- }
- }
-
- if (debugWriter != null) {
- debugWriter.WriteLine();
- }
-
- return pre;
- }
-
- /// <summary>
- /// Get the post-condition of an implementation.
- /// </summary>
- /// <param name="impl"></param>
- protected static List<Cmd> GetPost(Implementation impl) {
-
-
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- Console.WriteLine("Effective postcondition:");
- }
-
- // Construct an Expr for the post-condition
- Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
- List<Cmd> post = new List<Cmd>();
- foreach (Ensures ens in impl.Proc.Ensures) {
- Contract.Assert(ens != null);
- if (!ens.Free) {
- Expr e = Substituter.Apply(formalProcImplSubst, ens.Condition);
- Contract.Assert(e != null);
- Ensures ensCopy = cce.NonNull((Ensures)ens.Clone());
- ensCopy.Condition = e;
- Cmd c = new AssertEnsuresCmd(ensCopy);
- ((AssertEnsuresCmd)c).ErrorDataEnhanced = ensCopy.ErrorDataEnhanced;
- post.Add(c);
-
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- c.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false), 1);
- }
- }
- }
-
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- Console.WriteLine();
- }
-
- return post;
- }
-
- /// <summary>
- /// Get the where clauses from the in- and out-parameters as
- /// a sequence of assume commands.
- /// As a side effect, this method adds these where clauses to the out parameters.
- /// </summary>
- /// <param name="impl"></param>
- protected static List<Cmd> GetParamWhereClauses(Implementation impl) {
- Contract.Requires(impl != null);
- Contract.Requires(impl.Proc != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
- TokenTextWriter debugWriter = null;
- if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
- debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
- debugWriter.WriteLine("Effective precondition from where-clauses:");
- }
-
- Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
- List<Cmd> whereClauses = new List<Cmd>();
-
- // where clauses of in-parameters
- foreach (Formal f in impl.Proc.InParams) {
- Contract.Assert(f != null);
- if (f.TypedIdent.WhereExpr != null) {
- Expr e = Substituter.Apply(formalProcImplSubst, f.TypedIdent.WhereExpr);
- Cmd c = new AssumeCmd(f.tok, e);
- whereClauses.Add(c);
-
- if (debugWriter != null) {
- c.Emit(debugWriter, 1);
- }
- }
- }
-
- // where clauses of out-parameters
- Contract.Assert(impl.OutParams.Count == impl.Proc.OutParams.Count);
- for (int i = 0; i < impl.OutParams.Count; i++) {
- Variable f = cce.NonNull(impl.Proc.OutParams[i]);
- if (f.TypedIdent.WhereExpr != null) {
- Expr e = Substituter.Apply(formalProcImplSubst, f.TypedIdent.WhereExpr);
- Cmd c = new AssumeCmd(f.tok, e);
- whereClauses.Add(c);
-
- Variable fi = cce.NonNull(impl.OutParams[i]);
- Contract.Assume(fi.TypedIdent.WhereExpr == null);
- fi.TypedIdent.WhereExpr = e;
-
- if (debugWriter != null) {
- c.Emit(debugWriter, 1);
- }
- }
- }
-
- if (debugWriter != null) {
- debugWriter.WriteLine();
- }
-
- return whereClauses;
- }
-
- protected static void RestoreParamWhereClauses(Implementation impl) {
- Contract.Requires(impl != null);
- // We no longer need the where clauses on the out parameters, so we remove them to restore the situation from before VC generation
- foreach (Formal f in impl.OutParams) {
- Contract.Assert(f != null);
- f.TypedIdent.WhereExpr = null;
- }
- }
- #endregion
-
-
- protected Checker FindCheckerFor(int timeout, bool isBlocking = true)
- {
- Contract.Ensures(!isBlocking || Contract.Result<Checker>() != null);
-
- var maxRetries = 3;
- lock (checkers)
- {
- retry:
- // Look for existing checker.
- for (int i = 0; i < checkers.Count; i++)
- {
- var c = checkers[i];
- if (Monitor.TryEnter(c))
- {
- try
- {
- if (c.WillingToHandle(timeout, program))
- {
- c.GetReady();
- return c;
- }
- else if (c.IsIdle || c.IsClosed)
- {
- if (c.IsIdle)
- {
- c.Retarget(program, c.TheoremProver.Context, timeout);
- c.GetReady();
- return c;
- }
- else
- {
- checkers.RemoveAt(i);
- }
- }
- }
- finally
- {
- Monitor.Exit(c);
- }
- }
- }
-
- if (Cores <= checkers.Count)
- {
- if (isBlocking || 0 < maxRetries)
- {
- Monitor.Wait(checkers, 50);
- maxRetries--;
- goto retry;
- }
- else
- {
- return null;
- }
- }
-
- // Create a new checker.
- string log = logFilePath;
- if (log != null && !log.Contains("@PROC@") && checkers.Count > 0)
- {
- log = log + "." + checkers.Count;
- }
- Checker ch = new Checker(this, program, log, appendLogFile, timeout);
- ch.GetReady();
- checkers.Add(ch);
- return ch;
- }
- }
-
-
- virtual public void Close() {
- }
-
-
- public class CounterexampleCollector : VerifierCallback {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(examples));
- }
-
- public string RequestId;
-
- public readonly List<Counterexample>/*!>!*/ examples = new List<Counterexample>();
- public override void OnCounterexample(Counterexample ce, string/*?*/ reason) {
- //Contract.Requires(ce != null);
- if (RequestId != null)
- {
- ce.RequestId = RequestId;
- }
- if (ce.OriginalRequestId == null && 1 < CommandLineOptions.Clo.VerifySnapshots)
- {
- ce.OriginalRequestId = RequestId;
- }
- examples.Add(ce);
- }
-
- public override void OnUnreachableCode(Implementation impl) {
- //Contract.Requires(impl != null);
- System.Console.WriteLine("found unreachable code:");
- EmitImpl(impl, false);
- // TODO report error about next to last in seq
- }
- }
-
- protected static void EmitImpl(Implementation impl, bool printDesugarings) {
- Contract.Requires(impl != null);
- int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
- CommandLineOptions.Clo.PrintUnstructured = 2; // print only the unstructured program
- bool oldPrintDesugaringSetting = CommandLineOptions.Clo.PrintDesugarings;
- CommandLineOptions.Clo.PrintDesugarings = printDesugarings;
- impl.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false), 0);
- CommandLineOptions.Clo.PrintDesugarings = oldPrintDesugaringSetting;
- CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
- }
-
-
- protected Block GenerateUnifiedExit(Implementation impl, Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins) {
- Contract.Requires(impl != null);
- Contract.Requires(gotoCmdOrigins != null);
- Contract.Ensures(Contract.Result<Block>() != null);
-
- Contract.Ensures(Contract.Result<Block>().TransferCmd is ReturnCmd);
- Block/*?*/ exitBlock = null;
- #region Create a unified exit block, if there's more than one
- {
- int returnBlocks = 0;
- foreach (Block b in impl.Blocks) {
- if (b.TransferCmd is ReturnCmd) {
- exitBlock = b;
- returnBlocks++;
- }
- }
- if (returnBlocks > 1) {
- string unifiedExitLabel = "GeneratedUnifiedExit";
- Block unifiedExit = new Block(new Token(-17, -4), unifiedExitLabel, new List<Cmd>(), new ReturnCmd(Token.NoToken));
- Contract.Assert(unifiedExit != null);
- foreach (Block b in impl.Blocks) {
- if (b.TransferCmd is ReturnCmd) {
- List<String> labels = new List<String>();
- labels.Add(unifiedExitLabel);
- List<Block> bs = new List<Block>();
- bs.Add(unifiedExit);
- GotoCmd go = new GotoCmd(Token.NoToken, labels, bs);
- gotoCmdOrigins[go] = (ReturnCmd)b.TransferCmd;
- b.TransferCmd = go;
- unifiedExit.Predecessors.Add(b);
- }
- }
-
- exitBlock = unifiedExit;
- impl.Blocks.Add(unifiedExit);
- }
- Contract.Assert(exitBlock != null);
- }
- return exitBlock;
- #endregion
- }
-
- protected static void ResetPredecessors(List<Block> blocks) {
- Contract.Requires(blocks != null);
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- b.Predecessors = new List<Block>();
- }
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- foreach (Block ch in Exits(b)) {
- Contract.Assert(ch != null);
- ch.Predecessors.Add(b);
- }
- }
- }
-
- protected static IEnumerable Exits(Block b) {
- Contract.Requires(b != null);
- GotoCmd g = b.TransferCmd as GotoCmd;
- if (g != null) {
- return cce.NonNull(g.labelTargets);
- }
- return new List<Block>();
- }
-
- protected Variable CreateIncarnation(Variable x, Absy a) {
- Contract.Requires(this.variable2SequenceNumber != null);
- Contract.Requires(this.CurrentLocalVariables != null);
- Contract.Requires(a is Block || a is AssignCmd || a is HavocCmd);
-
- Contract.Requires(x != null);
- Contract.Ensures(Contract.Result<Variable>() != null);
-
- int currentIncarnationNumber =
- variable2SequenceNumber.ContainsKey(x)
- ?
- variable2SequenceNumber[x]
- :
- -1;
- Variable v = new Incarnation(x, currentIncarnationNumber + 1);
- variable2SequenceNumber[x] = currentIncarnationNumber + 1;
- CurrentLocalVariables.Add(v);
- incarnationOriginMap.Add((Incarnation)v, a);
- return v;
- }
-
- /// <summary>
- /// Compute the incarnation map at the beginning of block "b" from the incarnation blocks of the
- /// predecessors of "b".
- ///
- /// The predecessor map b.map for block "b" is defined as follows:
- /// b.map.Domain == Union{Block p in b.predecessors; p.map.Domain}
- /// Forall{Variable v in b.map.Domain;
- /// b.map[v] == (v in Intersection{Block p in b.predecessors; p.map}.Domain
- /// ? b.predecessors[0].map[v]
- /// : new Variable())}
- /// Every variable that b.map maps to a fresh variable requires a fixup in all predecessor blocks.
- /// </summary>
- /// <param name="b"></param>
- /// <param name="block2Incarnation">Gives incarnation maps for b's predecessors.</param>
- /// <returns></returns>
- protected Dictionary<Variable, Expr> ComputeIncarnationMap(Block b, Dictionary<Block, Dictionary<Variable, Expr>> block2Incarnation) {
- Contract.Requires(b != null);
- Contract.Requires(block2Incarnation != null);
- Contract.Ensures(Contract.Result<Dictionary<Variable, Expr>>() != null);
-
- if (b.Predecessors.Count == 0) {
- return new Dictionary<Variable, Expr>();
- }
-
- Dictionary<Variable, Expr> incarnationMap = null;
- Set /*Variable*/ fixUps = new Set /*Variable*/ ();
- foreach (Block pred in b.Predecessors) {
- Contract.Assert(pred != null);
- Contract.Assert(block2Incarnation.ContainsKey(pred)); // otherwise, Passive Transformation found a block whose predecessors have not been processed yet
- Dictionary<Variable, Expr> predMap = (Dictionary<Variable, Expr>)block2Incarnation[pred];
- Contract.Assert(predMap != null);
- if (incarnationMap == null) {
- incarnationMap = new Dictionary<Variable, Expr>(predMap);
- continue;
- }
-
- ArrayList /*Variable*/ conflicts = new ArrayList /*Variable*/ ();
- foreach (Variable v in incarnationMap.Keys) {
- Contract.Assert(v != null);
- if (!predMap.ContainsKey(v)) {
- // conflict!!
- conflicts.Add(v);
- fixUps.Add(v);
- }
- }
- // Now that we're done with enumeration, we'll do all the removes
- foreach (Variable v in conflicts) {
- Contract.Assert(v != null);
- incarnationMap.Remove(v);
- }
- foreach (Variable v in predMap.Keys) {
- Contract.Assert(v != null);
- if (!incarnationMap.ContainsKey(v)) {
- // v was not in the domain of the predecessors seen so far, so it needs to be fixed up
- fixUps.Add(v);
- } else {
- // v in incarnationMap ==> all pred blocks (up to now) all agree on its incarnation
- if (predMap[v] != incarnationMap[v]) {
- // conflict!!
- incarnationMap.Remove(v);
- fixUps.Add(v);
- }
- }
- }
- }
-
- #region Second, for all variables in the fixups list, introduce a new incarnation and push it back into the preds.
- foreach (Variable v in fixUps) {
- Contract.Assert(v != null);
- if (!b.IsLive(v))
- continue;
- Variable v_prime = CreateIncarnation(v, b);
- IdentifierExpr ie = new IdentifierExpr(v_prime.tok, v_prime);
- Contract.Assert(incarnationMap != null);
- incarnationMap[v] = ie;
- foreach (Block pred in b.Predecessors) {
- Contract.Assert(pred != null);
- #region Create an assume command equating v_prime with its last incarnation in pred
- #region Create an identifier expression for the last incarnation in pred
- Dictionary<Variable, Expr> predMap = (Dictionary<Variable, Expr>)cce.NonNull(block2Incarnation[pred]);
-
- Expr pred_incarnation_exp;
- Expr o = predMap.ContainsKey(v) ? predMap[v] : null;
- if (o == null) {
- Variable predIncarnation = v;
- IdentifierExpr ie2 = new IdentifierExpr(predIncarnation.tok, predIncarnation);
- pred_incarnation_exp = ie2;
- } else {
- pred_incarnation_exp = o;
- }
- #endregion
- #region Create an identifier expression for the new incarnation
- IdentifierExpr v_prime_exp = new IdentifierExpr(v_prime.tok, v_prime);
- #endregion
- #region Create the assume command itself
- AssumeCmd ac = new AssumeCmd(v.tok, TypedExprEq(v_prime_exp, pred_incarnation_exp, v_prime.Name.Contains("a##post##")));
- pred.Cmds.Add(ac);
- #endregion
- #endregion
- }
- }
- #endregion
-
- Contract.Assert(incarnationMap != null);
- return incarnationMap;
- }
-
- Dictionary<Variable, Expr> preHavocIncarnationMap = null; // null = the previous command was not an HashCmd. Otherwise, a *copy* of the map before the havoc statement
-
- protected void TurnIntoPassiveBlock(Block b, Dictionary<Variable, Expr> incarnationMap, ModelViewInfo mvInfo, Substitution oldFrameSubst, MutableVariableCollector variableCollector, byte[] currentChecksum = null) {
- Contract.Requires(b != null);
- Contract.Requires(incarnationMap != null);
- Contract.Requires(mvInfo != null);
- Contract.Requires(oldFrameSubst != null);
- #region Walk forward over the commands in this block and convert them to passive commands
-
- List<Cmd> passiveCmds = new List<Cmd>();
- foreach (Cmd c in b.Cmds) {
- Contract.Assert(c != null); // walk forward over the commands because the map gets modified in a forward direction
- ChecksumHelper.ComputeChecksums(c, currentImplementation, variableCollector.UsedVariables, currentChecksum);
- variableCollector.Visit(c);
- currentChecksum = c.Checksum;
- TurnIntoPassiveCmd(c, incarnationMap, oldFrameSubst, passiveCmds, mvInfo, b);
- }
- b.Checksum = currentChecksum;
- b.Cmds = passiveCmds;
-
- if (b.TransferCmd is ReturnExprCmd) {
- ReturnExprCmd rec = (ReturnExprCmd)b.TransferCmd.Clone();
- Substitution incarnationSubst = Substituter.SubstitutionFromHashtable(incarnationMap);
- rec.Expr = Substituter.ApplyReplacingOldExprs(incarnationSubst, oldFrameSubst, rec.Expr);
- b.TransferCmd = rec;
- }
- #endregion
- }
-
- protected Dictionary<Variable, Expr> Convert2PassiveCmd(Implementation impl, ModelViewInfo mvInfo) {
- Contract.Requires(impl != null);
- Contract.Requires(mvInfo != null);
-
- currentImplementation = impl;
-
- var start = DateTime.UtcNow;
-
- Dictionary<Variable, Expr> r = ConvertBlocks2PassiveCmd(impl.Blocks, impl.Proc.Modifies, mvInfo);
-
- var end = DateTime.UtcNow;
-
- if (CommandLineOptions.Clo.TraceCachingForDebugging)
- {
- Console.Out.WriteLine("Turned implementation into passive commands within {0:F0} ms.\n", end.Subtract(start).TotalMilliseconds);
- }
-
- if (CommandLineOptions.Clo.TraceCachingForDebugging)
- {
- using (var tokTxtWr = new TokenTextWriter("<console>", Console.Out, false, false))
- {
- var pd = CommandLineOptions.Clo.PrintDesugarings;
- var pu = CommandLineOptions.Clo.PrintUnstructured;
- CommandLineOptions.Clo.PrintDesugarings = true;
- CommandLineOptions.Clo.PrintUnstructured = 1;
- impl.Emit(tokTxtWr, 0);
- CommandLineOptions.Clo.PrintDesugarings = pd;
- CommandLineOptions.Clo.PrintUnstructured = pu;
- }
- }
-
- currentImplementation = null;
-
- RestoreParamWhereClauses(impl);
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify) {
- Console.WriteLine("after conversion to passive commands");
- EmitImpl(impl, true);
- }
- #endregion
-
- return r;
- }
-
- protected Dictionary<Variable, Expr> ConvertBlocks2PassiveCmd(List<Block> blocks, List<IdentifierExpr> modifies, ModelViewInfo mvInfo) {
- Contract.Requires(blocks != null);
- Contract.Requires(modifies != null);
- Contract.Requires(mvInfo != null);
- #region Convert to Passive Commands
-
- #region Topological sort -- need to process in a linearization of the partial order
- Graph<Block> dag = new Graph<Block>();
- dag.AddSource(cce.NonNull(blocks[0])); // there is always at least one node in the graph
- foreach (Block b in blocks) {
- GotoCmd gtc = b.TransferCmd as GotoCmd;
- if (gtc != null) {
- Contract.Assume(gtc.labelTargets != null);
- foreach (Block dest in gtc.labelTargets) {
- Contract.Assert(dest != null);
- dag.AddEdge(b, dest);
- }
- }
- }
-
- IEnumerable sortedNodes;
- if (CommandLineOptions.Clo.ModifyTopologicalSorting) {
- sortedNodes = dag.TopologicalSort(true);
- } else {
- sortedNodes = dag.TopologicalSort();
- }
-
- Contract.Assert(sortedNodes != null);
- #endregion
-
- Substitution oldFrameSubst = ComputeOldExpressionSubstitution(modifies);
-
- // Now we can process the nodes in an order so that we're guaranteed to have
- // processed all of a node's predecessors before we process the node.
- Dictionary<Block, Dictionary<Variable, Expr>> block2Incarnation = new Dictionary<Block, Dictionary<Variable, Expr>>();
- Block exitBlock = null;
- Dictionary<Variable, Expr> exitIncarnationMap = null;
- var variableCollectors = new Dictionary<Block, MutableVariableCollector>();
- foreach (Block b in sortedNodes) {
- Contract.Assert(b != null);
- Contract.Assert(!block2Incarnation.ContainsKey(b));
- Dictionary<Variable, Expr> incarnationMap = ComputeIncarnationMap(b, block2Incarnation);
-
- // b.liveVarsBefore has served its purpose in the just-finished call to ComputeIncarnationMap; null it out.
- b.liveVarsBefore = null;
-
- // Decrement the succCount field in each predecessor. Once the field reaches zero in any block,
- // all its successors have been passified. Consequently, its entry in block2Incarnation can be removed.
- byte[] currentChecksum = null;
- var mvc = new MutableVariableCollector();
- variableCollectors[b] = mvc;
- foreach (Block p in b.Predecessors) {
- p.succCount--;
- if (p.Checksum != null)
- {
- // Compute the checksum based on the checksums of the predecessor. The order should not matter.
- currentChecksum = ChecksumHelper.CombineChecksums(p.Checksum, currentChecksum, true);
- }
- mvc.AddUsedVariables(variableCollectors[p].UsedVariables);
- if (p.succCount == 0)
- block2Incarnation.Remove(p);
- }
-
- #region Each block's map needs to be available to successor blocks
- GotoCmd gotoCmd = b.TransferCmd as GotoCmd;
- if (gotoCmd == null) {
- b.succCount = 0;
- }
- else {
- // incarnationMap needs to be added only if there is some successor of b
- b.succCount = gotoCmd.labelNames.Count;
- block2Incarnation.Add(b, incarnationMap);
- }
- #endregion Each block's map needs to be available to successor blocks
-
- TurnIntoPassiveBlock(b, incarnationMap, mvInfo, oldFrameSubst, mvc, currentChecksum);
- exitBlock = b;
- exitIncarnationMap = incarnationMap;
- }
-
- variableCollectors.Clear();
-
- // Verify that exitBlock is indeed the unique exit block
- Contract.Assert(exitBlock != null);
- Contract.Assert(exitBlock.TransferCmd is ReturnCmd);
- #endregion Convert to Passive Commands
-
- return exitIncarnationMap;
- }
-
- /// <summary>
- /// Compute the substitution for old expressions.
- /// </summary>
- protected static Substitution ComputeOldExpressionSubstitution(List<IdentifierExpr> modifies)
- {
- Dictionary<Variable, Expr> oldFrameMap = new Dictionary<Variable, Expr>();
- foreach (IdentifierExpr ie in modifies)
- {
- Contract.Assert(ie != null);
- if (!oldFrameMap.ContainsKey(cce.NonNull(ie.Decl)))
- oldFrameMap.Add(ie.Decl, ie);
- }
- return Substituter.SubstitutionFromHashtable(oldFrameMap);
- }
-
- public enum CachingAction : byte
- {
- DoNothingToAssert,
- MarkAsPartiallyVerified,
- MarkAsFullyVerified,
- RecycleError,
- AssumeNegationOfAssumptionVariable,
- DropAssume
- }
-
- public long[] CachingActionCounts;
-
- void TraceCachingAction(Cmd cmd, CachingAction action)
- {
- if (CommandLineOptions.Clo.TraceCachingForTesting)
- {
- using (var tokTxtWr = new TokenTextWriter("<console>", Console.Out, false, false))
- {
- var loc = cmd.tok != null && cmd.tok != Token.NoToken ? string.Format("{0}({1},{2})", cmd.tok.filename, cmd.tok.line, cmd.tok.col) : "<unknown location>";
- Console.Write("Processing command (at {0}) ", loc);
- cmd.Emit(tokTxtWr, 0);
- Console.Out.WriteLine(" >>> {0}", action);
- }
- }
-
- if (CommandLineOptions.Clo.TraceCachingForBenchmarking && CachingActionCounts != null)
- {
- Interlocked.Increment(ref CachingActionCounts[(int)action]);
- }
- }
-
- /// <summary>
- /// Turn a command into a passive command, and it remembers the previous step, to see if it is a havoc or not. In the case, it remembers the incarnation map BEFORE the havoc
- /// Meanwhile, record any information needed to later reconstruct a model view.
- /// </summary>
- protected void TurnIntoPassiveCmd(Cmd c, Dictionary<Variable, Expr> incarnationMap, Substitution oldFrameSubst, List<Cmd> passiveCmds, ModelViewInfo mvInfo, Block containingBlock) {
- Contract.Requires(c != null);
- Contract.Requires(incarnationMap != null);
- Contract.Requires(oldFrameSubst != null);
- Contract.Requires(passiveCmds != null);
- Contract.Requires(mvInfo != null);
- Contract.Requires(containingBlock != null);
-
- Substitution incarnationSubst = Substituter.SubstitutionFromHashtable(incarnationMap);
- #region assert/assume P |--> assert/assume P[x := in(x)], out := in
- if (c is PredicateCmd) {
- Contract.Assert(c is AssertCmd || c is AssumeCmd); // otherwise, unexpected PredicateCmd type
-
- PredicateCmd pc = (PredicateCmd)c.Clone();
- Contract.Assert(pc != null);
-
- Expr copy = Substituter.ApplyReplacingOldExprs(incarnationSubst, oldFrameSubst, pc.Expr);
- if (CommandLineOptions.Clo.ModelViewFile != null && pc is AssumeCmd) {
- string description = QKeyValue.FindStringAttribute(pc.Attributes, "captureState");
- if (description != null) {
- Expr mv = new NAryExpr(pc.tok, new FunctionCall(ModelViewInfo.MVState_FunctionDef), new List<Expr> { Bpl.Expr.Ident(ModelViewInfo.MVState_ConstantDef), Bpl.Expr.Literal(mvInfo.CapturePoints.Count) });
- copy = Bpl.Expr.And(mv, copy);
- mvInfo.CapturePoints.Add(new ModelViewInfo.Mapping(description, new Dictionary<Variable, Expr>(incarnationMap)));
- }
- }
- Contract.Assert(copy != null);
- var dropCmd = false;
- var relevantAssumpVars = currentImplementation != null ? currentImplementation.RelevantInjectedAssumptionVariables(incarnationMap) : new List<LocalVariable>();
- var relevantDoomedAssumpVars = currentImplementation != null ? currentImplementation.RelevantDoomedInjectedAssumptionVariables(incarnationMap) : new List<LocalVariable>();
- var checksum = pc.Checksum;
- if (pc is AssertCmd) {
- var ac = (AssertCmd)pc;
- ac.OrigExpr = ac.Expr;
- Contract.Assert(ac.IncarnationMap == null);
- ac.IncarnationMap = (Dictionary<Variable, Expr>)cce.NonNull(new Dictionary<Variable, Expr>(incarnationMap));
-
- var subsumption = Wlp.Subsumption(ac);
- if (relevantDoomedAssumpVars.Any())
- {
- TraceCachingAction(pc, CachingAction.DoNothingToAssert);
- }
- else if (currentImplementation != null
- && currentImplementation.HasCachedSnapshot
- && checksum != null
- && currentImplementation.IsAssertionChecksumInCachedSnapshot(checksum)
- && !currentImplementation.IsErrorChecksumInCachedSnapshot(checksum))
- {
- if (!currentImplementation.AnyErrorsInCachedSnapshot
- && currentImplementation.InjectedAssumptionVariables.Count == 1
- && relevantAssumpVars.Count == 1)
- {
- TraceCachingAction(pc, CachingAction.MarkAsPartiallyVerified);
- }
- else
- {
- bool isTrue;
- var assmVars = currentImplementation.ConjunctionOfInjectedAssumptionVariables(incarnationMap, out isTrue);
- TraceCachingAction(pc, !isTrue ? CachingAction.MarkAsPartiallyVerified : CachingAction.MarkAsFullyVerified);
- var litExpr = ac.Expr as LiteralExpr;
- if (litExpr == null || !litExpr.IsTrue)
- {
- ac.MarkAsVerifiedUnder(assmVars);
- }
- else
- {
- dropCmd = true;
- }
- }
- }
- else if (currentImplementation != null
- && currentImplementation.HasCachedSnapshot
- && relevantAssumpVars.Count == 0
- && checksum != null
- && currentImplementation.IsAssertionChecksumInCachedSnapshot(checksum)
- && currentImplementation.IsErrorChecksumInCachedSnapshot(checksum))
- {
- TraceCachingAction(pc, CachingAction.RecycleError);
- ac.MarkAsVerifiedUnder(Expr.True);
- currentImplementation.AddRecycledFailingAssertion(ac);
- pc.Attributes = new QKeyValue(Token.NoToken, "recycled_failing_assertion", new List<object>(), pc.Attributes);
- }
- else
- {
- TraceCachingAction(pc, CachingAction.DoNothingToAssert);
- }
- }
- else if (pc is AssumeCmd
- && QKeyValue.FindBoolAttribute(pc.Attributes, "precondition_previous_snapshot")
- && pc.SugaredCmdChecksum != null)
- {
- if (!relevantDoomedAssumpVars.Any()
- && currentImplementation.HasCachedSnapshot
- && currentImplementation.IsAssertionChecksumInCachedSnapshot(pc.SugaredCmdChecksum)
- && !currentImplementation.IsErrorChecksumInCachedSnapshot(pc.SugaredCmdChecksum))
- {
- bool isTrue;
- var assmVars = currentImplementation.ConjunctionOfInjectedAssumptionVariables(incarnationMap, out isTrue);
- if (!isTrue)
- {
- copy = LiteralExpr.Imp(assmVars, copy);
- TraceCachingAction(pc, CachingAction.MarkAsPartiallyVerified);
- }
- else
- {
- TraceCachingAction(pc, CachingAction.MarkAsFullyVerified);
- }
- }
- else
- {
- TraceCachingAction(pc, CachingAction.DropAssume);
- dropCmd = true;
- }
- }
- else if (pc is AssumeCmd && QKeyValue.FindBoolAttribute(pc.Attributes, "assumption_variable_initialization"))
- {
- var identExpr = pc.Expr as IdentifierExpr;
- if (identExpr != null && identExpr.Decl != null && !incarnationMap.ContainsKey(identExpr.Decl))
- {
- incarnationMap[identExpr.Decl] = LiteralExpr.True;
- dropCmd = true;
- }
- }
- pc.Expr = copy;
- if (!dropCmd)
- {
- passiveCmds.Add(pc);
- }
- }
- #endregion
- #region x1 := E1, x2 := E2, ... |--> assume x1' = E1[in] & x2' = E2[in], out := in( x |-> x' ) [except as noted below]
- else if (c is AssignCmd) {
- AssignCmd assign = ((AssignCmd)c).AsSimpleAssignCmd; // first remove map assignments
- Contract.Assert(assign != null);
- #region Substitute all variables in E with the current map
- List<Expr> copies = new List<Expr>();
- foreach (Expr e in assign.Rhss) {
- Contract.Assert(e != null);
- copies.Add(Substituter.ApplyReplacingOldExprs(incarnationSubst,
- oldFrameSubst,
- e));
- }
- #endregion
-
- List<Expr/*!>!*/> assumptions = new List<Expr>();
- // it might be too slow to create a new dictionary each time ...
- IDictionary<Variable, Expr> newIncarnationMappings =
- new Dictionary<Variable, Expr>();
-
- for (int i = 0; i < assign.Lhss.Count; ++i) {
- IdentifierExpr lhsIdExpr =
- cce.NonNull((SimpleAssignLhs)assign.Lhss[i]).AssignedVariable;
- Variable lhs = cce.NonNull(lhsIdExpr.Decl);
- Contract.Assert(lhs != null);
- Expr rhs = assign.Rhss[i];
- Contract.Assert(rhs != null);
-
- // don't create incarnations for assignments of literals or single variables.
- if (rhs is LiteralExpr) {
- incarnationMap[lhs] = rhs;
- } else if (rhs is IdentifierExpr) {
- IdentifierExpr ie = (IdentifierExpr)rhs;
- if (incarnationMap.ContainsKey(cce.NonNull(ie.Decl)))
- newIncarnationMappings[lhs] = cce.NonNull((Expr)incarnationMap[ie.Decl]);
- else
- newIncarnationMappings[lhs] = ie;
- } else {
- IdentifierExpr x_prime_exp = null;
- #region Make a new incarnation, x', for variable x, but only if x is *not* already an incarnation
- if (lhs is Incarnation) {
- // incarnations are already written only once, no need to make an incarnation of an incarnation
- x_prime_exp = lhsIdExpr;
- } else {
- Variable v = CreateIncarnation(lhs, c);
- x_prime_exp = new IdentifierExpr(lhsIdExpr.tok, v);
- newIncarnationMappings[lhs] = x_prime_exp;
- }
- #endregion
-
- var nAryExpr = copies[i] as NAryExpr;
- if (nAryExpr != null)
- {
- var binOp = nAryExpr.Fun as BinaryOperator;
- if (binOp != null
- && binOp.Op == BinaryOperator.Opcode.And)
- {
- var arg0 = nAryExpr.Args[0] as LiteralExpr;
- var arg1 = nAryExpr.Args[1] as LiteralExpr;
- if ((arg0 != null && arg0.IsTrue) || (arg1 != null && arg1.IsFalse))
- {
- // Replace the expressions "true && arg1" or "arg0 && false" by "arg1".
- copies[i] = nAryExpr.Args[1];
- }
- }
- }
-
- #region Create an assume command with the new variable
- assumptions.Add(TypedExprEq(x_prime_exp, copies[i], x_prime_exp.Decl != null && x_prime_exp.Decl.Name.Contains("a##post##")));
- #endregion
- }
- }
-
- foreach (KeyValuePair<Variable, Expr> pair in newIncarnationMappings) {
- Contract.Assert(pair.Key != null && pair.Value != null);
- incarnationMap[pair.Key] = pair.Value;
- }
-
- if (assumptions.Count > 0) {
- Expr assumption = assumptions[0];
-
- for (int i = 1; i < assumptions.Count; ++i) {
- Contract.Assert(assumption != null);
- assumption = Expr.And(assumption, assumptions[i]);
- }
- passiveCmds.Add(new AssumeCmd(c.tok, assumption));
- }
-
- if (currentImplementation != null
- && currentImplementation.HasCachedSnapshot
- && !currentImplementation.AnyErrorsInCachedSnapshot
- && currentImplementation.InjectedAssumptionVariables.Count == 1
- && assign.Lhss.Count == 1)
- {
- var identExpr = assign.Lhss[0].AsExpr as IdentifierExpr;
- Expr incarnation;
- if (identExpr != null && identExpr.Decl != null && QKeyValue.FindBoolAttribute(identExpr.Decl.Attributes, "assumption") && incarnationMap.TryGetValue(identExpr.Decl, out incarnation))
- {
- TraceCachingAction(assign, CachingAction.AssumeNegationOfAssumptionVariable);
- passiveCmds.Add(new AssumeCmd(c.tok, Expr.Not(incarnation)));
- }
- }
- }
- #endregion
- #region havoc w |--> assume whereClauses, out := in( w |-> w' )
- else if (c is HavocCmd) {
- if (this.preHavocIncarnationMap == null) // Save a copy of the incarnation map (at the top of a sequence of havoc statements)
- this.preHavocIncarnationMap = new Dictionary<Variable, Expr>(incarnationMap);
-
- HavocCmd hc = (HavocCmd)c;
- Contract.Assert(c != null);
- // If an assumption variable for postconditions is included here, it must have been assigned within a loop.
- // We do not need to havoc it if we have performed a modular proof of the loop (i.e., using only the loop
- // invariant) in the previous snapshot and are therefore not going refer to the assumption variable after
- // the loop. We can achieve this by simply not updating/adding it in the incarnation map.
- List<IdentifierExpr> havocVars = hc.Vars.Where(v => !(QKeyValue.FindBoolAttribute(v.Decl.Attributes, "assumption") && v.Decl.Name.StartsWith("a##post##"))).ToList();
- // First, compute the new incarnations
- foreach (IdentifierExpr ie in havocVars) {
- Contract.Assert(ie != null);
- if (!(ie.Decl is Incarnation)) {
- Variable x = cce.NonNull(ie.Decl);
- Variable x_prime = CreateIncarnation(x, c);
- incarnationMap[x] = new IdentifierExpr(x_prime.tok, x_prime);
- }
- }
- // Then, perform the assume of the where clauses, using the updated incarnations
- Substitution updatedIncarnationSubst = Substituter.SubstitutionFromHashtable(incarnationMap);
- foreach (IdentifierExpr ie in havocVars) {
- Contract.Assert(ie != null);
- if (!(ie.Decl is Incarnation)) {
- Variable x = cce.NonNull(ie.Decl);
- Bpl.Expr w = x.TypedIdent.WhereExpr;
- if (w != null) {
- Expr copy = Substituter.ApplyReplacingOldExprs(updatedIncarnationSubst, oldFrameSubst, w);
- passiveCmds.Add(new AssumeCmd(c.tok, copy));
- }
- }
- }
- }
- #endregion
- else if (c is CommentCmd) {
- // comments are just for debugging and don't affect verification
- } else if (c is SugaredCmd) {
- SugaredCmd sug = (SugaredCmd)c;
- Contract.Assert(sug != null);
- Cmd cmd = sug.Desugaring;
- Contract.Assert(cmd != null);
- TurnIntoPassiveCmd(cmd, incarnationMap, oldFrameSubst, passiveCmds, mvInfo, containingBlock);
- } else if (c is StateCmd) {
- this.preHavocIncarnationMap = null; // we do not need to remeber the previous incarnations
- StateCmd st = (StateCmd)c;
- Contract.Assert(st != null);
- // account for any where clauses among the local variables
- foreach (Variable v in st.Locals) {
- Contract.Assert(v != null);
- Expr w = v.TypedIdent.WhereExpr;
- if (w != null) {
- passiveCmds.Add(new AssumeCmd(v.tok, w));
- }
- }
- // do the sub-commands
- foreach (Cmd s in st.Cmds) {
- Contract.Assert(s != null);
- TurnIntoPassiveCmd(s, incarnationMap, oldFrameSubst, passiveCmds, mvInfo, containingBlock);
- }
- // remove the local variables from the incarnation map
- foreach (Variable v in st.Locals) {
- Contract.Assert(v != null);
- incarnationMap.Remove(v);
- }
- }
- #region There shouldn't be any other types of commands at this point
- else {
- Debug.Fail("Internal Error: Passive transformation handed a command that is not one of assert,assume,havoc,assign.");
- }
- #endregion
-
-
- #region We remember if we have put an havoc statement into a passive form
-
- if (!(c is HavocCmd))
- this.preHavocIncarnationMap = null;
- // else: it has already been set by the case for the HavocCmd
- #endregion
- }
-
- NAryExpr TypedExprEq(Expr e0, Expr e1, bool doNotResolveOverloading = false) {
- Contract.Requires(e0 != null);
- Contract.Requires(e1 != null);
- NAryExpr e = Expr.Eq(e0, e1);
- var fun = e.Fun as IOverloadedAppliable;
- if (fun != null)
- {
- fun.DoNotResolveOverloading = doNotResolveOverloading;
- }
- e.Type = Bpl.Type.Bool;
- e.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
- return e;
- }
-
- /// <summary>
- /// Creates a new block to add to impl.Blocks, where impl is the implementation that contains
- /// succ. Caller must do the add to impl.Blocks.
- /// </summary>
- protected Block CreateBlockBetween(int predIndex, Block succ) {
- Contract.Requires(0 <= predIndex && predIndex < succ.Predecessors.Count);
-
-
- Contract.Requires(succ != null);
- Contract.Ensures(Contract.Result<Block>() != null);
-
- Block pred = cce.NonNull(succ.Predecessors[predIndex]);
-
- string newBlockLabel = pred.Label + "_@2_" + succ.Label;
-
- // successor of newBlock list
- List<String> ls = new List<String>();
- ls.Add(succ.Label);
- List<Block> bs = new List<Block>();
- bs.Add(succ);
-
- Block newBlock = new Block(
- new Token(-17, -4),
- newBlockLabel,
- new List<Cmd>(),
- new GotoCmd(Token.NoToken, ls, bs)
- );
-
- // predecessors of newBlock
- List<Block> ps = new List<Block>();
- ps.Add(pred);
- newBlock.Predecessors = ps;
-
- // fix successors of pred
- #region Change the edge "pred->succ" to "pred->newBlock"
- GotoCmd gtc = (GotoCmd)cce.NonNull(pred.TransferCmd);
- Contract.Assume(gtc.labelTargets != null);
- Contract.Assume(gtc.labelNames != null);
- for (int i = 0, n = gtc.labelTargets.Count; i < n; i++) {
- if (gtc.labelTargets[i] == succ) {
- gtc.labelTargets[i] = newBlock;
- gtc.labelNames[i] = newBlockLabel;
- break;
- }
- }
- #endregion Change the edge "pred->succ" to "pred->newBlock"
-
- // fix predecessors of succ
- succ.Predecessors[predIndex] = newBlock;
-
- return newBlock;
- }
-
- protected void AddBlocksBetween(List<Block> blocks) {
- Contract.Requires(blocks != null);
- #region Introduce empty blocks between join points and their multi-successor predecessors
- List<Block> tweens = new List<Block>();
- foreach (Block b in blocks) {
- int nPreds = b.Predecessors.Count;
- if (nPreds > 1) {
- // b is a join point (i.e., it has more than one predecessor)
- for (int i = 0; i < nPreds; i++) {
- GotoCmd gotocmd = (GotoCmd)(cce.NonNull(b.Predecessors[i]).TransferCmd);
- if (gotocmd.labelNames != null && gotocmd.labelNames.Count > 1) {
- tweens.Add(CreateBlockBetween(i, b));
- }
- }
- }
- }
- blocks.AddRange(tweens); // must wait until iteration is done before changing the list
- #endregion
- }
-
-
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- protected virtual void Dispose(bool disposing)
- {
- if (!_disposed)
- {
- if (disposing)
- {
- Close();
- }
- _disposed = true;
- }
- }
-
- public int Cores { get; set; }
- }
-
- public class ModelViewInfo
- {
- public readonly List<Variable> AllVariables = new List<Variable>();
- public readonly List<Mapping> CapturePoints = new List<Mapping>();
- public static readonly Function MVState_FunctionDef = new Function(Token.NoToken, "$mv_state",
- new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, TypedIdent.NoName, Bpl.Type.Int), true),
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, TypedIdent.NoName, Bpl.Type.Int), true) },
- new Formal(Token.NoToken, new TypedIdent(Token.NoToken, TypedIdent.NoName, Bpl.Type.Bool), false));
- public static readonly Constant MVState_ConstantDef = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, "$mv_state_const", Bpl.Type.Int));
-
- public ModelViewInfo(Program program, Implementation impl) {
- Contract.Requires(program != null);
- Contract.Requires(impl != null);
-
- // global variables
- lock (program.TopLevelDeclarations)
- {
- foreach (var v in program.Variables)
- {
- if (!(v is Constant))
- {
- AllVariables.Add(v);
- }
- }
- }
- // implementation parameters
- foreach (Variable p in impl.InParams) {
- AllVariables.Add(p);
- }
- foreach (Variable p in impl.OutParams) {
- AllVariables.Add(p);
- }
- // implementation locals
- foreach (Variable v in impl.LocVars) {
- AllVariables.Add(v);
- }
- }
-
- public ModelViewInfo(CodeExpr codeExpr) {
- Contract.Requires(codeExpr != null);
- // TODO: also need all variables of enclosing scopes (the global variables of the program, the parameters
- // and perhaps locals of the implementation (if any), any enclosing code expressions).
-
- foreach (Variable v in codeExpr.LocVars) {
- AllVariables.Add(v);
- }
- }
-
- public class Mapping
- {
- public readonly string Description;
- public readonly Dictionary<Variable, Expr> IncarnationMap;
- public Mapping(string description, Dictionary<Variable, Expr> incarnationMap) {
- Description = description;
- IncarnationMap = incarnationMap;
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+using Set = Microsoft.Boogie.GSet<object>;
+
+namespace Microsoft.Boogie {
+
+ public class CalleeCounterexampleInfo {
+ public Counterexample counterexample;
+ public List<object>/*!>!*/ args;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(args));
+ }
+
+ public CalleeCounterexampleInfo(Counterexample cex, List<object/*!>!*/> x)
+ {
+ Contract.Requires(cce.NonNullElements(x));
+ counterexample = cex;
+ args = x;
+ }
+ }
+
+ public class TraceLocation : IEquatable<TraceLocation>
+ {
+ public int numBlock;
+ public int numInstr;
+
+ public TraceLocation(int numBlock, int numInstr)
+ {
+ this.numBlock = numBlock;
+ this.numInstr = numInstr;
+ }
+
+ public override bool Equals(object obj)
+ {
+ TraceLocation that = obj as TraceLocation;
+ if (that == null) return false;
+ return (numBlock == that.numBlock && numInstr == that.numInstr);
+ }
+
+ public bool Equals(TraceLocation that)
+ {
+ return (numBlock == that.numBlock && numInstr == that.numInstr);
+ }
+
+ public override int GetHashCode()
+ {
+ return numBlock.GetHashCode() ^ 131 * numInstr.GetHashCode();
+ }
+ }
+
+ public abstract class Counterexample {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Trace != null);
+ Contract.Invariant(Context != null);
+ Contract.Invariant(cce.NonNullElements(relatedInformation));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(calleeCounterexamples));
+ }
+
+ [Peer]
+ public List<Block> Trace;
+ public Model Model;
+ public VC.ModelViewInfo MvInfo;
+ public ProverContext Context;
+ [Peer]
+ public List<string>/*!>!*/ relatedInformation;
+ public string OriginalRequestId;
+ public string RequestId;
+ public abstract byte[] Checksum { get; }
+ public byte[] SugaredCmdChecksum;
+ public bool IsAuxiliaryCexForDiagnosingTimeouts;
+
+ public Dictionary<TraceLocation, CalleeCounterexampleInfo> calleeCounterexamples;
+
+ internal Counterexample(List<Block> trace, Model model, VC.ModelViewInfo mvInfo, ProverContext context) {
+ Contract.Requires(trace != null);
+ Contract.Requires(context != null);
+ this.Trace = trace;
+ this.Model = model;
+ this.MvInfo = mvInfo;
+ this.Context = context;
+ this.relatedInformation = new List<string>();
+ this.calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
+ }
+
+ // Create a shallow copy of the counterexample
+ public abstract Counterexample Clone();
+
+ public void AddCalleeCounterexample(TraceLocation loc, CalleeCounterexampleInfo cex)
+ {
+ Contract.Requires(cex != null);
+ calleeCounterexamples[loc] = cex;
+ }
+
+ public void AddCalleeCounterexample(int numBlock, int numInstr, CalleeCounterexampleInfo cex)
+ {
+ Contract.Requires(cex != null);
+ calleeCounterexamples[new TraceLocation(numBlock, numInstr)] = cex;
+ }
+
+ public void AddCalleeCounterexample(Dictionary<TraceLocation, CalleeCounterexampleInfo> cs)
+ {
+ Contract.Requires(cce.NonNullDictionaryAndValues(cs));
+ foreach (TraceLocation loc in cs.Keys)
+ {
+ AddCalleeCounterexample(loc, cs[loc]);
+ }
+ }
+
+ // Looks up the Cmd at a given index into the trace
+ public Cmd getTraceCmd(TraceLocation loc)
+ {
+ Debug.Assert(loc.numBlock < Trace.Count);
+ Block b = Trace[loc.numBlock];
+ Debug.Assert(loc.numInstr < b.Cmds.Count);
+ return b.Cmds[loc.numInstr];
+ }
+
+ // Looks up the name of the called procedure.
+ // Asserts that the name exists
+ public string getCalledProcName(Cmd cmd)
+ {
+ // There are two options:
+ // 1. cmd is a CallCmd
+ // 2. cmd is an AssumeCmd (passified version of a CallCmd)
+ if(cmd is CallCmd) {
+ return (cmd as CallCmd).Proc.Name;
+ }
+ AssumeCmd assumeCmd = cmd as AssumeCmd;
+ Debug.Assert(assumeCmd != null);
+
+ NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
+ Debug.Assert(naryExpr != null);
+
+ return naryExpr.Fun.FunctionName;
+ }
+
+ public void Print(int indent, TextWriter tw, Action<Block> blockAction = null) {
+ int numBlock = -1;
+ string ind = new string(' ', indent);
+ foreach (Block b in Trace) {
+ Contract.Assert(b != null);
+ numBlock++;
+ if (b.tok == null) {
+ tw.WriteLine("{0}<intermediate block>", ind);
+ } else {
+ // for ErrorTrace == 1 restrict the output;
+ // do not print tokens with -17:-4 as their location because they have been
+ // introduced in the translation and do not give any useful feedback to the user
+ if (!(CommandLineOptions.Clo.ErrorTrace == 1 && b.tok.line == -17 && b.tok.col == -4)) {
+ if (blockAction != null)
+ {
+ blockAction(b);
+ }
+
+ tw.WriteLine("{4}{0}({1},{2}): {3}", b.tok.filename, b.tok.line, b.tok.col, b.Label, ind);
+
+ for (int numInstr = 0; numInstr < b.Cmds.Count; numInstr++)
+ {
+ var loc = new TraceLocation(numBlock, numInstr);
+ if (calleeCounterexamples.ContainsKey(loc))
+ {
+ var cmd = getTraceCmd(loc);
+ var calleeName = getCalledProcName(cmd);
+ if (calleeName.StartsWith(VC.StratifiedVCGen.recordProcName) && CommandLineOptions.Clo.StratifiedInlining > 0)
+ {
+ Contract.Assert(calleeCounterexamples[loc].args.Count == 1);
+ var arg = calleeCounterexamples[loc].args[0];
+ tw.WriteLine("{0}value = {1}", ind, arg.ToString());
+ }
+ else
+ {
+ tw.WriteLine("{1}Inlined call to procedure {0} begins", calleeName, ind);
+ calleeCounterexamples[loc].counterexample.Print(indent + 4, tw);
+ tw.WriteLine("{1}Inlined call to procedure {0} ends", calleeName, ind);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static bool firstModelFile = true;
+
+ public bool ModelHasStatesAlready = false;
+
+ public void PrintModel(TextWriter tw)
+ {
+ var filename = CommandLineOptions.Clo.ModelViewFile;
+ if (Model == null || filename == null || CommandLineOptions.Clo.StratifiedInlining > 0) return;
+
+ if (!ModelHasStatesAlready) {
+ PopulateModelWithStates();
+ ModelHasStatesAlready = true;
+ }
+
+ if (filename == "-") {
+ Model.Write(tw);
+ tw.Flush();
+ } else {
+ using (var wr = new StreamWriter(filename, !firstModelFile)) {
+ firstModelFile = false;
+ Model.Write(wr);
+ }
+ }
+ }
+
+ void ApplyRedirections(Model m) {
+ var mapping = new Dictionary<Model.Element, Model.Element>();
+ foreach (var name in new string[] { "U_2_bool", "U_2_int" }) {
+ Model.Func f = m.TryGetFunc(name);
+ if (f != null && f.Arity == 1) {
+ foreach (var ft in f.Apps) mapping[ft.Args[0]] = ft.Result;
+ }
+ }
+ m.Substitute(mapping);
+ }
+
+ public void PopulateModelWithStates()
+ {
+ Contract.Requires(Model != null);
+
+ Model m = Model;
+ ApplyRedirections(m);
+
+ var mvstates = m.TryGetFunc("$mv_state");
+ if (MvInfo == null || mvstates == null || (mvstates.Arity == 1 && mvstates.Apps.Count() == 0))
+ return;
+
+ Contract.Assert(mvstates.Arity == 2);
+
+ foreach (Variable v in MvInfo.AllVariables) {
+ m.InitialState.AddBinding(v.Name, GetModelValue(m, v));
+ }
+
+ var states = new List<int>();
+ foreach (var t in mvstates.Apps)
+ states.Add(t.Args[1].AsInt());
+
+ states.Sort();
+
+ for (int i = 0; i < states.Count; ++i) {
+ var s = states[i];
+ if (0 <= s && s < MvInfo.CapturePoints.Count) {
+ VC.ModelViewInfo.Mapping map = MvInfo.CapturePoints[s];
+ var prevInc = i > 0 ? MvInfo.CapturePoints[states[i - 1]].IncarnationMap : new Dictionary<Variable, Expr>();
+ var cs = m.MkState(map.Description);
+
+ foreach (Variable v in MvInfo.AllVariables) {
+ Expr e = map.IncarnationMap.ContainsKey(v) ? map.IncarnationMap[v] : null;
+ if (e == null) continue;
+
+ Expr prevIncV = prevInc.ContainsKey(v) ? prevInc[v] : null;
+ if (prevIncV == e) continue; // skip unchanged variables
+
+ Model.Element elt;
+
+ if (e is IdentifierExpr) {
+ IdentifierExpr ide = (IdentifierExpr)e;
+ elt = GetModelValue(m, ide.Decl);
+ } else if (e is LiteralExpr) {
+ LiteralExpr lit = (LiteralExpr)e;
+ elt = m.MkElement(lit.Val.ToString());
+ } else {
+ elt = m.MkFunc(e.ToString(), 0).GetConstant();
+ }
+
+ cs.AddBinding(v.Name, elt);
+ }
+
+ } else {
+ Contract.Assume(false);
+ }
+ }
+ }
+
+ private Model.Element GetModelValue(Model m, Variable v) {
+ Model.Element elt;
+ // first, get the unique name
+ string uniqueName;
+ VCExprVar vvar = Context.BoogieExprTranslator.TryLookupVariable(v);
+ if (vvar == null) {
+ uniqueName = v.Name;
+ } else {
+ uniqueName = Context.Lookup(vvar);
+ }
+
+ var f = m.TryGetFunc(uniqueName);
+ if (f == null) {
+ f = m.MkFunc(uniqueName, 0);
+ }
+ elt = f.GetConstant();
+ return elt;
+ }
+
+ public abstract int GetLocation();
+ }
+
+ public class CounterexampleComparer : IComparer<Counterexample>, IEqualityComparer<Counterexample> {
+
+ private int Compare(List<Block> bs1, List<Block> bs2)
+ {
+ if (bs1.Count < bs2.Count)
+ {
+ return -1;
+ }
+ else if (bs2.Count < bs1.Count)
+ {
+ return 1;
+ }
+
+ for (int i = 0; i < bs1.Count; i++)
+ {
+ var b1 = bs1[i];
+ var b2 = bs2[i];
+ if (b1.tok.pos < b2.tok.pos)
+ {
+ return -1;
+ }
+ else if (b2.tok.pos < b1.tok.pos)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+
+ public int Compare(Counterexample c1, Counterexample c2)
+ {
+ //Contract.Requires(c1 != null);
+ //Contract.Requires(c2 != null);
+ if (c1.GetLocation() == c2.GetLocation())
+ {
+ var c = Compare(c1.Trace, c2.Trace);
+ if (c != 0)
+ {
+ return c;
+ }
+ // TODO(wuestholz): Generalize this to compare all IPotentialErrorNodes of the counterexample.
+ var a1 = c1 as AssertCounterexample;
+ var a2 = c2 as AssertCounterexample;
+ if (a1 != null && a2 != null)
+ {
+ var s1 = a1.FailingAssert.ErrorData as string;
+ var s2 = a2.FailingAssert.ErrorData as string;
+ if (s1 != null && s2 != null)
+ {
+ return s1.CompareTo(s2);
+ }
+ }
+
+ return 0;
+ }
+ if (c1.GetLocation() > c2.GetLocation())
+ {
+ return 1;
+ }
+ return -1;
+ }
+
+ public bool Equals(Counterexample x, Counterexample y)
+ {
+ return Compare(x, y) == 0;
+ }
+
+ public int GetHashCode(Counterexample obj)
+ {
+ return 0;
+ }
+ }
+
+ public class AssertCounterexample : Counterexample {
+ [Peer]
+ public AssertCmd FailingAssert;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(FailingAssert != null);
+ }
+
+
+ public AssertCounterexample(List<Block> trace, AssertCmd failingAssert, Model model, VC.ModelViewInfo mvInfo, ProverContext context)
+ : base(trace, model, mvInfo, context) {
+ Contract.Requires(trace != null);
+ Contract.Requires(failingAssert != null);
+ Contract.Requires(context != null);
+ this.FailingAssert = failingAssert;
+ }
+
+ public override int GetLocation() {
+ return FailingAssert.tok.line * 1000 + FailingAssert.tok.col;
+ }
+
+ public override byte[] Checksum
+ {
+ get { return FailingAssert.Checksum; }
+ }
+
+ public override Counterexample Clone()
+ {
+ var ret = new AssertCounterexample(Trace, FailingAssert, Model, MvInfo, Context);
+ ret.calleeCounterexamples = calleeCounterexamples;
+ return ret;
+ }
+ }
+
+ public class CallCounterexample : Counterexample {
+ public CallCmd FailingCall;
+ public Requires FailingRequires;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(FailingCall != null);
+ Contract.Invariant(FailingRequires != null);
+ }
+
+
+ public CallCounterexample(List<Block> trace, CallCmd failingCall, Requires failingRequires, Model model, VC.ModelViewInfo mvInfo, ProverContext context, byte[] checksum = null)
+ : base(trace, model, mvInfo, context) {
+ Contract.Requires(!failingRequires.Free);
+ Contract.Requires(trace != null);
+ Contract.Requires(context != null);
+ Contract.Requires(failingCall != null);
+ Contract.Requires(failingRequires != null);
+ this.FailingCall = failingCall;
+ this.FailingRequires = failingRequires;
+ this.checksum = checksum;
+ this.SugaredCmdChecksum = failingCall.Checksum;
+ }
+
+ public override int GetLocation() {
+ return FailingCall.tok.line * 1000 + FailingCall.tok.col;
+ }
+
+ byte[] checksum;
+ public override byte[] Checksum
+ {
+ get { return checksum; }
+ }
+
+ public override Counterexample Clone()
+ {
+ var ret = new CallCounterexample(Trace, FailingCall, FailingRequires, Model, MvInfo, Context, Checksum);
+ ret.calleeCounterexamples = calleeCounterexamples;
+ return ret;
+ }
+ }
+
+ public class ReturnCounterexample : Counterexample {
+ public TransferCmd FailingReturn;
+ public Ensures FailingEnsures;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(FailingEnsures != null);
+ Contract.Invariant(FailingReturn != null);
+ }
+
+
+ public ReturnCounterexample(List<Block> trace, TransferCmd failingReturn, Ensures failingEnsures, Model model, VC.ModelViewInfo mvInfo, ProverContext context, byte[] checksum)
+ : base(trace, model, mvInfo, context) {
+ Contract.Requires(trace != null);
+ Contract.Requires(context != null);
+ Contract.Requires(failingReturn != null);
+ Contract.Requires(failingEnsures != null);
+ Contract.Requires(!failingEnsures.Free);
+ this.FailingReturn = failingReturn;
+ this.FailingEnsures = failingEnsures;
+ this.checksum = checksum;
+ }
+
+ public override int GetLocation() {
+ return FailingReturn.tok.line * 1000 + FailingReturn.tok.col;
+ }
+
+ byte[] checksum;
+
+ /// <summary>
+ /// Returns the checksum of the corresponding assertion.
+ /// </summary>
+ public override byte[] Checksum
+ {
+ get
+ {
+ return checksum;
+ }
+ }
+
+ public override Counterexample Clone()
+ {
+ var ret = new ReturnCounterexample(Trace, FailingReturn, FailingEnsures, Model, MvInfo, Context, checksum);
+ ret.calleeCounterexamples = calleeCounterexamples;
+ return ret;
+ }
+ }
+
+ public class VerifierCallback {
+ // reason == null means this is genuine counterexample returned by the prover
+ // other reason means it's time out/memory out/crash
+ public virtual void OnCounterexample(Counterexample ce, string/*?*/ reason) {
+ Contract.Requires(ce != null);
+ }
+
+ // called in case resource is exceeded and we don't have counterexample
+ public virtual void OnTimeout(string reason) {
+ Contract.Requires(reason != null);
+ }
+
+ public virtual void OnOutOfMemory(string reason) {
+ Contract.Requires(reason != null);
+ }
+
+ public virtual void OnProgress(string phase, int step, int totalSteps, double progressEstimate) {
+ }
+
+ public virtual void OnUnreachableCode(Implementation impl) {
+ Contract.Requires(impl != null);
+ }
+
+ public virtual void OnWarning(string msg) {
+ Contract.Requires(msg != null);
+ switch (CommandLineOptions.Clo.PrintProverWarnings) {
+ case CommandLineOptions.ProverWarnings.None:
+ break;
+ case CommandLineOptions.ProverWarnings.Stdout:
+ Console.WriteLine("Prover warning: " + msg);
+ break;
+ case CommandLineOptions.ProverWarnings.Stderr:
+ Console.Error.WriteLine("Prover warning: " + msg);
+ break;
+ default:
+ Contract.Assume(false);
+ throw new cce.UnreachableException(); // unexpected case
+ }
+ }
+ }
+}
+
+////////////////////////////////////////////
+
+namespace VC {
+ using Bpl = Microsoft.Boogie;
+
+ public class VCGenException : Exception {
+ public VCGenException(string s)
+ : base(s) {
+ }
+ }
+ [ContractClassFor(typeof(ConditionGeneration))]
+ public abstract class ConditionGenerationContracts : ConditionGeneration {
+ public override Outcome VerifyImplementation(Implementation impl, VerifierCallback callback) {
+ Contract.Requires(impl != null);
+ Contract.Requires(callback != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ throw new NotImplementedException();
+ }
+ public ConditionGenerationContracts(Program p, List<Checker> checkers)
+ : base(p, checkers) {
+ }
+ }
+
+ [ContractClass(typeof(ConditionGenerationContracts))]
+ public abstract class ConditionGeneration : IDisposable {
+ protected internal object CheckerCommonState;
+
+ public enum Outcome {
+ Correct,
+ Errors,
+ TimedOut,
+ OutOfMemory,
+ Inconclusive,
+ ReachedBound
+ }
+
+ public static Outcome ProverInterfaceOutcomeToConditionGenerationOutcome(ProverInterface.Outcome outcome) {
+ switch (outcome) {
+ case ProverInterface.Outcome.Invalid:
+ return Outcome.Errors;
+ case ProverInterface.Outcome.OutOfMemory:
+ return Outcome.OutOfMemory;
+ case ProverInterface.Outcome.TimeOut:
+ return Outcome.TimedOut;
+ case ProverInterface.Outcome.Undetermined:
+ return Outcome.Inconclusive;
+ case ProverInterface.Outcome.Valid:
+ return Outcome.Correct;
+ }
+ return Outcome.Inconclusive; // unreachable but the stupid compiler does not understand
+ }
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(checkers));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(incarnationOriginMap));
+ Contract.Invariant(program != null);
+ }
+
+ public int CumulativeAssertionCount; // for statistics
+
+ protected readonly List<Checker>/*!>!*/ checkers;
+
+ private bool _disposed;
+
+ protected Implementation currentImplementation;
+
+ protected List<Variable> CurrentLocalVariables = null;
+
+ // shared across each implementation; created anew for each implementation
+ protected Dictionary<Variable, int> variable2SequenceNumber;
+ public Dictionary<Incarnation, Absy>/*!>!*/ incarnationOriginMap = new Dictionary<Incarnation, Absy>();
+
+ public Program program;
+ protected string/*?*/ logFilePath;
+ protected bool appendLogFile;
+
+ public static List<Model> errorModelList;
+
+ public ConditionGeneration(Program p, List<Checker> checkers) {
+ Contract.Requires(p != null && checkers != null && cce.NonNullElements(checkers));
+ program = p;
+ this.checkers = checkers;
+ Cores = 1;
+ }
+
+ /// <summary>
+ /// Takes an implementation and constructs a verification condition and sends
+ /// it to the theorem prover.
+ /// Returns null if "impl" is correct. Otherwise, returns a list of counterexamples,
+ /// each counterexample consisting of an array of labels.
+ /// </summary>
+ /// <param name="impl"></param>
+ public Outcome VerifyImplementation(Implementation impl, out List<Counterexample>/*?*/ errors, string requestId = null) {
+ Contract.Requires(impl != null);
+
+ Contract.Ensures(Contract.ValueAtReturn(out errors) == null || Contract.ForAll(Contract.ValueAtReturn(out errors), i => i != null));
+ Contract.Ensures(Contract.Result<Outcome>() != Outcome.Errors || errors != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ Helpers.ExtraTraceInformation("Starting implementation verification");
+
+ CounterexampleCollector collector = new CounterexampleCollector();
+ collector.RequestId = requestId;
+ Outcome outcome = VerifyImplementation(impl, collector);
+ if (outcome == Outcome.Errors || outcome == Outcome.TimedOut || outcome == Outcome.OutOfMemory) {
+ errors = collector.examples;
+ } else {
+ errors = null;
+ }
+
+ Helpers.ExtraTraceInformation("Finished implementation verification");
+ return outcome;
+ }
+
+ /// <summary>
+ /// Takes an implementation and constructs a verification condition and sends
+ /// it to the theorem prover.
+ /// Returns null if "impl" is correct. Otherwise, returns a list of counterexamples,
+ /// each counterexample consisting of an array of labels.
+ /// </summary>
+ /// <param name="impl"></param>
+ public Outcome VerifyImplementation(Implementation impl, out List<Counterexample> errors, out List<Model> errorsModel)
+ {
+ Contract.Ensures(Contract.Result<Outcome>() != Outcome.Errors || Contract.ValueAtReturn(out errors) != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ List<Counterexample> errorsOut;
+
+ Outcome outcome;
+ errorModelList = new List<Model>();
+ outcome = VerifyImplementation(impl, out errorsOut);
+ errors = errorsOut;
+ errorsModel = errorModelList;
+
+ return outcome;
+ }
+
+ public abstract Outcome VerifyImplementation(Implementation impl, VerifierCallback callback);
+
+ /////////////////////////////////// Common Methods and Classes //////////////////////////////////////////
+
+ #region Methods for injecting pre- and postconditions
+ private static void
+ ThreadInCodeExpr(Implementation impl,
+ Block targetBlock,
+ CodeExpr codeExpr,
+ bool replaceWithAssert,
+ TokenTextWriter debugWriter) {
+ Contract.Requires(impl != null);
+ Contract.Requires(codeExpr != null);
+ Contract.Requires(targetBlock != null);
+ // Go through codeExpr and for all blocks that have a "return e"
+ // as their transfer command:
+ // Replace all "return e" with "assert/assume e"
+ // Change the transfer command to "goto targetBlock"
+ // Then add all of the blocks in codeExpr to the implementation (at the end)
+ foreach (Block b in codeExpr.Blocks) {
+ Contract.Assert(b != null);
+ ReturnExprCmd rec = b.TransferCmd as ReturnExprCmd;
+ if (rec != null) { // otherwise it is a goto command
+ if (replaceWithAssert) {
+ Ensures ens = new Ensures(rec.tok, false, rec.Expr, null);
+ Contract.Assert(ens != null);
+ Cmd c = new AssertEnsuresCmd(ens);
+ Contract.Assert(c != null);
+ b.Cmds.Add(c);
+ } else {
+ b.Cmds.Add(new AssumeCmd(rec.tok, rec.Expr));
+ }
+ b.TransferCmd = new GotoCmd(Token.NoToken,
+ new List<String> { targetBlock.Label },
+ new List<Block> { targetBlock });
+ targetBlock.Predecessors.Add(b);
+ }
+ impl.Blocks.Add(b);
+ }
+ if (debugWriter != null) {
+ codeExpr.Emit(debugWriter, 1, false);
+ }
+ return;
+ }
+
+ private static void AddAsPrefix(Block b, List<Cmd> cs) {
+ Contract.Requires(b != null);
+ Contract.Requires(cs != null);
+ List<Cmd> newCommands = new List<Cmd>();
+ newCommands.AddRange(cs);
+ newCommands.AddRange(b.Cmds);
+ b.Cmds = newCommands;
+ }
+
+
+ /// <summary>
+ /// Modifies an implementation by prepending it with startCmds and then, as assume
+ /// statements, all preconditions. Insert new blocks as needed, and adjust impl.Blocks[0]
+ /// accordingly to make it the new implementation entry block.
+ /// </summary>
+ /// <param name="impl"></param>
+ /// <param name="startCmds"></param>
+ protected static void InjectPreconditions(Implementation impl, [Captured] List<Cmd> startCmds) {
+ Contract.Requires(impl != null);
+ Contract.Requires(startCmds != null);
+ Contract.Requires(impl.Proc != null);
+
+ TokenTextWriter debugWriter = null;
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
+ debugWriter.WriteLine("Effective precondition:");
+ }
+
+ Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
+ string blockLabel = "PreconditionGeneratedEntry";
+
+ Block origStartBlock = impl.Blocks[0];
+ Block insertionPoint = new Block(
+ new Token(-17, -4), blockLabel, startCmds,
+ new GotoCmd(Token.NoToken, new List<String> { origStartBlock.Label }, new List<Block> { origStartBlock }));
+
+ impl.Blocks[0] = insertionPoint; // make insertionPoint the start block
+ impl.Blocks.Add(origStartBlock); // and put the previous start block at the end of the list
+
+ // (free and checked) requires clauses
+ foreach (Requires req in impl.Proc.Requires)
+ // invariant: insertionPoint.TransferCmd is "goto origStartBlock;", but origStartBlock.Predecessors has not yet been updated
+ {
+ Contract.Assert(req != null);
+ Expr e = Substituter.Apply(formalProcImplSubst, req.Condition);
+ Cmd c = new AssumeCmd(req.tok, e);
+ c.IrrelevantForChecksumComputation = true;
+ insertionPoint.Cmds.Add(c);
+ if (debugWriter != null) {
+ c.Emit(debugWriter, 1);
+ }
+ }
+ origStartBlock.Predecessors.Add(insertionPoint);
+
+ if (impl.ExplicitAssumptionAboutCachedPrecondition != null)
+ {
+ insertionPoint.Cmds.Add(impl.ExplicitAssumptionAboutCachedPrecondition);
+ }
+
+ if (debugWriter != null) {
+ debugWriter.WriteLine();
+ }
+ }
+ /// <summary>
+ /// Modifies an implementation by inserting all postconditions
+ /// as assert statements at the end of the implementation
+ /// Returns the possibly-new unified exit block of the implementation
+ /// </summary>
+ /// <param name="impl"></param>
+ /// <param name="unifiedExitblock">The unified exit block that has
+ /// already been constructed for the implementation (and so
+ /// is already an element of impl.Blocks)
+ /// </param>
+ protected static void InjectPostConditions(Implementation impl, Block unifiedExitBlock, Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins) {
+ Contract.Requires(impl != null);
+ Contract.Requires(unifiedExitBlock != null);
+ Contract.Requires(gotoCmdOrigins != null);
+ Contract.Requires(impl.Proc != null);
+ Contract.Requires(unifiedExitBlock.TransferCmd is ReturnCmd);
+
+ TokenTextWriter debugWriter = null;
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
+ debugWriter.WriteLine("Effective postcondition:");
+ }
+
+ Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
+
+ // (free and checked) ensures clauses
+ foreach (Ensures ens in impl.Proc.Ensures) {
+ Contract.Assert(ens != null);
+ if (!ens.Free) { // skip free ensures clauses
+ Expr e = Substituter.Apply(formalProcImplSubst, ens.Condition);
+ Ensures ensCopy = (Ensures)cce.NonNull(ens.Clone());
+ ensCopy.Condition = e;
+ AssertEnsuresCmd c = new AssertEnsuresCmd(ensCopy);
+ c.ErrorDataEnhanced = ensCopy.ErrorDataEnhanced;
+ unifiedExitBlock.Cmds.Add(c);
+ if (debugWriter != null) {
+ c.Emit(debugWriter, 1);
+ }
+ }
+ }
+
+ if (debugWriter != null) {
+ debugWriter.WriteLine();
+ }
+ }
+
+
+ /// <summary>
+ /// Get the pre-condition of an implementation, including the where clauses from the in-parameters.
+ /// </summary>
+ /// <param name="impl"></param>
+ protected static List<Cmd> GetPre(Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+
+
+ TokenTextWriter debugWriter = null;
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
+ debugWriter.WriteLine("Effective precondition:");
+ }
+
+ Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
+ List<Cmd> pre = new List<Cmd>();
+
+ // (free and checked) requires clauses
+ foreach (Requires req in impl.Proc.Requires) {
+ Contract.Assert(req != null);
+ Expr e = Substituter.Apply(formalProcImplSubst, req.Condition);
+ Contract.Assert(e != null);
+ Cmd c = new AssumeCmd(req.tok, e);
+ Contract.Assert(c != null);
+ pre.Add(c);
+
+ if (debugWriter != null) {
+ c.Emit(debugWriter, 1);
+ }
+ }
+
+ if (debugWriter != null) {
+ debugWriter.WriteLine();
+ }
+
+ return pre;
+ }
+
+ /// <summary>
+ /// Get the post-condition of an implementation.
+ /// </summary>
+ /// <param name="impl"></param>
+ protected static List<Cmd> GetPost(Implementation impl) {
+
+
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ Console.WriteLine("Effective postcondition:");
+ }
+
+ // Construct an Expr for the post-condition
+ Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
+ List<Cmd> post = new List<Cmd>();
+ foreach (Ensures ens in impl.Proc.Ensures) {
+ Contract.Assert(ens != null);
+ if (!ens.Free) {
+ Expr e = Substituter.Apply(formalProcImplSubst, ens.Condition);
+ Contract.Assert(e != null);
+ Ensures ensCopy = cce.NonNull((Ensures)ens.Clone());
+ ensCopy.Condition = e;
+ Cmd c = new AssertEnsuresCmd(ensCopy);
+ ((AssertEnsuresCmd)c).ErrorDataEnhanced = ensCopy.ErrorDataEnhanced;
+ post.Add(c);
+
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ c.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false), 1);
+ }
+ }
+ }
+
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ Console.WriteLine();
+ }
+
+ return post;
+ }
+
+ /// <summary>
+ /// Get the where clauses from the in- and out-parameters as
+ /// a sequence of assume commands.
+ /// As a side effect, this method adds these where clauses to the out parameters.
+ /// </summary>
+ /// <param name="impl"></param>
+ protected static List<Cmd> GetParamWhereClauses(Implementation impl) {
+ Contract.Requires(impl != null);
+ Contract.Requires(impl.Proc != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+ TokenTextWriter debugWriter = null;
+ if (CommandLineOptions.Clo.PrintWithUniqueASTIds) {
+ debugWriter = new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false);
+ debugWriter.WriteLine("Effective precondition from where-clauses:");
+ }
+
+ Substitution formalProcImplSubst = Substituter.SubstitutionFromHashtable(impl.GetImplFormalMap());
+ List<Cmd> whereClauses = new List<Cmd>();
+
+ // where clauses of in-parameters
+ foreach (Formal f in impl.Proc.InParams) {
+ Contract.Assert(f != null);
+ if (f.TypedIdent.WhereExpr != null) {
+ Expr e = Substituter.Apply(formalProcImplSubst, f.TypedIdent.WhereExpr);
+ Cmd c = new AssumeCmd(f.tok, e);
+ whereClauses.Add(c);
+
+ if (debugWriter != null) {
+ c.Emit(debugWriter, 1);
+ }
+ }
+ }
+
+ // where clauses of out-parameters
+ Contract.Assert(impl.OutParams.Count == impl.Proc.OutParams.Count);
+ for (int i = 0; i < impl.OutParams.Count; i++) {
+ Variable f = cce.NonNull(impl.Proc.OutParams[i]);
+ if (f.TypedIdent.WhereExpr != null) {
+ Expr e = Substituter.Apply(formalProcImplSubst, f.TypedIdent.WhereExpr);
+ Cmd c = new AssumeCmd(f.tok, e);
+ whereClauses.Add(c);
+
+ Variable fi = cce.NonNull(impl.OutParams[i]);
+ Contract.Assume(fi.TypedIdent.WhereExpr == null);
+ fi.TypedIdent.WhereExpr = e;
+
+ if (debugWriter != null) {
+ c.Emit(debugWriter, 1);
+ }
+ }
+ }
+
+ if (debugWriter != null) {
+ debugWriter.WriteLine();
+ }
+
+ return whereClauses;
+ }
+
+ protected static void RestoreParamWhereClauses(Implementation impl) {
+ Contract.Requires(impl != null);
+ // We no longer need the where clauses on the out parameters, so we remove them to restore the situation from before VC generation
+ foreach (Formal f in impl.OutParams) {
+ Contract.Assert(f != null);
+ f.TypedIdent.WhereExpr = null;
+ }
+ }
+ #endregion
+
+
+ protected Checker FindCheckerFor(int timeout, bool isBlocking = true, int waitTimeinMs = 50, int maxRetries = 3)
+ {
+ Contract.Requires(0 <= waitTimeinMs && 0 <= maxRetries);
+ Contract.Ensures(!isBlocking || Contract.Result<Checker>() != null);
+
+ lock (checkers)
+ {
+ retry:
+ // Look for existing checker.
+ for (int i = 0; i < checkers.Count; i++)
+ {
+ var c = checkers[i];
+ if (Monitor.TryEnter(c))
+ {
+ try
+ {
+ if (c.WillingToHandle(timeout, program))
+ {
+ c.GetReady();
+ return c;
+ }
+ else if (c.IsIdle || c.IsClosed)
+ {
+ if (c.IsIdle)
+ {
+ c.Retarget(program, c.TheoremProver.Context, timeout);
+ c.GetReady();
+ return c;
+ }
+ else
+ {
+ checkers.RemoveAt(i);
+ i--;
+ continue;
+ }
+ }
+ }
+ finally
+ {
+ Monitor.Exit(c);
+ }
+ }
+ }
+
+ if (Cores <= checkers.Count)
+ {
+ if (isBlocking || 0 < maxRetries)
+ {
+ if (0 < waitTimeinMs)
+ {
+ Monitor.Wait(checkers, waitTimeinMs);
+ }
+ maxRetries--;
+ goto retry;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ // Create a new checker.
+ string log = logFilePath;
+ if (log != null && !log.Contains("@PROC@") && checkers.Count > 0)
+ {
+ log = log + "." + checkers.Count;
+ }
+ Checker ch = new Checker(this, program, log, appendLogFile, timeout);
+ ch.GetReady();
+ checkers.Add(ch);
+ return ch;
+ }
+ }
+
+
+ virtual public void Close() {
+ }
+
+
+ public class CounterexampleCollector : VerifierCallback {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(examples));
+ }
+
+ public string RequestId;
+
+ public readonly List<Counterexample>/*!>!*/ examples = new List<Counterexample>();
+ public override void OnCounterexample(Counterexample ce, string/*?*/ reason) {
+ //Contract.Requires(ce != null);
+ if (RequestId != null)
+ {
+ ce.RequestId = RequestId;
+ }
+ if (ce.OriginalRequestId == null && 1 < CommandLineOptions.Clo.VerifySnapshots)
+ {
+ ce.OriginalRequestId = RequestId;
+ }
+ examples.Add(ce);
+ }
+
+ public override void OnUnreachableCode(Implementation impl) {
+ //Contract.Requires(impl != null);
+ System.Console.WriteLine("found unreachable code:");
+ EmitImpl(impl, false);
+ // TODO report error about next to last in seq
+ }
+ }
+
+ protected static void EmitImpl(Implementation impl, bool printDesugarings) {
+ Contract.Requires(impl != null);
+ int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
+ CommandLineOptions.Clo.PrintUnstructured = 2; // print only the unstructured program
+ bool oldPrintDesugaringSetting = CommandLineOptions.Clo.PrintDesugarings;
+ CommandLineOptions.Clo.PrintDesugarings = printDesugarings;
+ impl.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false), 0);
+ CommandLineOptions.Clo.PrintDesugarings = oldPrintDesugaringSetting;
+ CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
+ }
+
+
+ protected Block GenerateUnifiedExit(Implementation impl, Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins) {
+ Contract.Requires(impl != null);
+ Contract.Requires(gotoCmdOrigins != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+
+ Contract.Ensures(Contract.Result<Block>().TransferCmd is ReturnCmd);
+ Block/*?*/ exitBlock = null;
+ #region Create a unified exit block, if there's more than one
+ {
+ int returnBlocks = 0;
+ foreach (Block b in impl.Blocks) {
+ if (b.TransferCmd is ReturnCmd) {
+ exitBlock = b;
+ returnBlocks++;
+ }
+ }
+ if (returnBlocks > 1) {
+ string unifiedExitLabel = "GeneratedUnifiedExit";
+ Block unifiedExit;
+ unifiedExit = new Block(new Token(-17, -4), unifiedExitLabel, new List<Cmd>(), new ReturnCmd(impl.StructuredStmts != null ? impl.StructuredStmts.EndCurly : Token.NoToken));
+ Contract.Assert(unifiedExit != null);
+ foreach (Block b in impl.Blocks) {
+ if (b.TransferCmd is ReturnCmd) {
+ List<String> labels = new List<String>();
+ labels.Add(unifiedExitLabel);
+ List<Block> bs = new List<Block>();
+ bs.Add(unifiedExit);
+ GotoCmd go = new GotoCmd(Token.NoToken, labels, bs);
+ gotoCmdOrigins[go] = (ReturnCmd)b.TransferCmd;
+ b.TransferCmd = go;
+ unifiedExit.Predecessors.Add(b);
+ }
+ }
+
+ exitBlock = unifiedExit;
+ impl.Blocks.Add(unifiedExit);
+ }
+ Contract.Assert(exitBlock != null);
+ }
+ return exitBlock;
+ #endregion
+ }
+
+ protected static void ResetPredecessors(List<Block> blocks) {
+ Contract.Requires(blocks != null);
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ b.Predecessors = new List<Block>();
+ }
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ foreach (Block ch in Exits(b)) {
+ Contract.Assert(ch != null);
+ ch.Predecessors.Add(b);
+ }
+ }
+ }
+
+ protected static IEnumerable Exits(Block b) {
+ Contract.Requires(b != null);
+ GotoCmd g = b.TransferCmd as GotoCmd;
+ if (g != null) {
+ return cce.NonNull(g.labelTargets);
+ }
+ return new List<Block>();
+ }
+
+ protected Variable CreateIncarnation(Variable x, Absy a) {
+ Contract.Requires(this.variable2SequenceNumber != null);
+ Contract.Requires(this.CurrentLocalVariables != null);
+ Contract.Requires(a is Block || a is AssignCmd || a is HavocCmd);
+
+ Contract.Requires(x != null);
+ Contract.Ensures(Contract.Result<Variable>() != null);
+
+ int currentIncarnationNumber =
+ variable2SequenceNumber.ContainsKey(x)
+ ?
+ variable2SequenceNumber[x]
+ :
+ -1;
+ Variable v = new Incarnation(x, currentIncarnationNumber + 1);
+ variable2SequenceNumber[x] = currentIncarnationNumber + 1;
+ CurrentLocalVariables.Add(v);
+ incarnationOriginMap.Add((Incarnation)v, a);
+ return v;
+ }
+
+ /// <summary>
+ /// Compute the incarnation map at the beginning of block "b" from the incarnation blocks of the
+ /// predecessors of "b".
+ ///
+ /// The predecessor map b.map for block "b" is defined as follows:
+ /// b.map.Domain == Union{Block p in b.predecessors; p.map.Domain}
+ /// Forall{Variable v in b.map.Domain;
+ /// b.map[v] == (v in Intersection{Block p in b.predecessors; p.map}.Domain
+ /// ? b.predecessors[0].map[v]
+ /// : new Variable())}
+ /// Every variable that b.map maps to a fresh variable requires a fixup in all predecessor blocks.
+ /// </summary>
+ /// <param name="b"></param>
+ /// <param name="block2Incarnation">Gives incarnation maps for b's predecessors.</param>
+ /// <returns></returns>
+ protected Dictionary<Variable, Expr> ComputeIncarnationMap(Block b, Dictionary<Block, Dictionary<Variable, Expr>> block2Incarnation) {
+ Contract.Requires(b != null);
+ Contract.Requires(block2Incarnation != null);
+ Contract.Ensures(Contract.Result<Dictionary<Variable, Expr>>() != null);
+
+ if (b.Predecessors.Count == 0) {
+ return new Dictionary<Variable, Expr>();
+ }
+
+ Dictionary<Variable, Expr> incarnationMap = null;
+ Set /*Variable*/ fixUps = new Set /*Variable*/ ();
+ foreach (Block pred in b.Predecessors) {
+ Contract.Assert(pred != null);
+ Contract.Assert(block2Incarnation.ContainsKey(pred)); // otherwise, Passive Transformation found a block whose predecessors have not been processed yet
+ Dictionary<Variable, Expr> predMap = (Dictionary<Variable, Expr>)block2Incarnation[pred];
+ Contract.Assert(predMap != null);
+ if (incarnationMap == null) {
+ incarnationMap = new Dictionary<Variable, Expr>(predMap);
+ continue;
+ }
+
+ ArrayList /*Variable*/ conflicts = new ArrayList /*Variable*/ ();
+ foreach (Variable v in incarnationMap.Keys) {
+ Contract.Assert(v != null);
+ if (!predMap.ContainsKey(v)) {
+ // conflict!!
+ conflicts.Add(v);
+ fixUps.Add(v);
+ }
+ }
+ // Now that we're done with enumeration, we'll do all the removes
+ foreach (Variable v in conflicts) {
+ Contract.Assert(v != null);
+ incarnationMap.Remove(v);
+ }
+ foreach (Variable v in predMap.Keys) {
+ Contract.Assert(v != null);
+ if (!incarnationMap.ContainsKey(v)) {
+ // v was not in the domain of the predecessors seen so far, so it needs to be fixed up
+ fixUps.Add(v);
+ } else {
+ // v in incarnationMap ==> all pred blocks (up to now) all agree on its incarnation
+ if (predMap[v] != incarnationMap[v]) {
+ // conflict!!
+ incarnationMap.Remove(v);
+ fixUps.Add(v);
+ }
+ }
+ }
+ }
+
+ #region Second, for all variables in the fixups list, introduce a new incarnation and push it back into the preds.
+ foreach (Variable v in fixUps) {
+ Contract.Assert(v != null);
+ if (!b.IsLive(v))
+ continue;
+ Variable v_prime = CreateIncarnation(v, b);
+ IdentifierExpr ie = new IdentifierExpr(v_prime.tok, v_prime);
+ Contract.Assert(incarnationMap != null);
+ incarnationMap[v] = ie;
+ foreach (Block pred in b.Predecessors) {
+ Contract.Assert(pred != null);
+ #region Create an assume command equating v_prime with its last incarnation in pred
+ #region Create an identifier expression for the last incarnation in pred
+ Dictionary<Variable, Expr> predMap = (Dictionary<Variable, Expr>)cce.NonNull(block2Incarnation[pred]);
+
+ Expr pred_incarnation_exp;
+ Expr o = predMap.ContainsKey(v) ? predMap[v] : null;
+ if (o == null) {
+ Variable predIncarnation = v;
+ IdentifierExpr ie2 = new IdentifierExpr(predIncarnation.tok, predIncarnation);
+ pred_incarnation_exp = ie2;
+ } else {
+ pred_incarnation_exp = o;
+ }
+ #endregion
+ #region Create an identifier expression for the new incarnation
+ IdentifierExpr v_prime_exp = new IdentifierExpr(v_prime.tok, v_prime);
+ #endregion
+ #region Create the assume command itself
+ AssumeCmd ac = new AssumeCmd(v.tok, TypedExprEq(v_prime_exp, pred_incarnation_exp, v_prime.Name.Contains("a##cached##")));
+ pred.Cmds.Add(ac);
+ #endregion
+ #endregion
+ }
+ }
+ #endregion
+
+ Contract.Assert(incarnationMap != null);
+ return incarnationMap;
+ }
+
+ Dictionary<Variable, Expr> preHavocIncarnationMap = null; // null = the previous command was not an HashCmd. Otherwise, a *copy* of the map before the havoc statement
+
+ protected void TurnIntoPassiveBlock(Block b, Dictionary<Variable, Expr> incarnationMap, ModelViewInfo mvInfo, Substitution oldFrameSubst, MutableVariableCollector variableCollector, byte[] currentChecksum = null) {
+ Contract.Requires(b != null);
+ Contract.Requires(incarnationMap != null);
+ Contract.Requires(mvInfo != null);
+ Contract.Requires(oldFrameSubst != null);
+ #region Walk forward over the commands in this block and convert them to passive commands
+
+ List<Cmd> passiveCmds = new List<Cmd>();
+ foreach (Cmd c in b.Cmds) {
+ Contract.Assert(c != null); // walk forward over the commands because the map gets modified in a forward direction
+ ChecksumHelper.ComputeChecksums(c, currentImplementation, variableCollector.UsedVariables, currentChecksum);
+ variableCollector.Visit(c);
+ currentChecksum = c.Checksum;
+ TurnIntoPassiveCmd(c, incarnationMap, oldFrameSubst, passiveCmds, mvInfo, b);
+ }
+ b.Checksum = currentChecksum;
+ b.Cmds = passiveCmds;
+
+ if (b.TransferCmd is ReturnExprCmd) {
+ ReturnExprCmd rec = (ReturnExprCmd)b.TransferCmd.Clone();
+ Substitution incarnationSubst = Substituter.SubstitutionFromHashtable(incarnationMap);
+ rec.Expr = Substituter.ApplyReplacingOldExprs(incarnationSubst, oldFrameSubst, rec.Expr);
+ b.TransferCmd = rec;
+ }
+ #endregion
+ }
+
+ protected Dictionary<Variable, Expr> Convert2PassiveCmd(Implementation impl, ModelViewInfo mvInfo) {
+ Contract.Requires(impl != null);
+ Contract.Requires(mvInfo != null);
+
+ currentImplementation = impl;
+
+ var start = DateTime.UtcNow;
+
+ Dictionary<Variable, Expr> r = ConvertBlocks2PassiveCmd(impl.Blocks, impl.Proc.Modifies, mvInfo);
+
+ var end = DateTime.UtcNow;
+
+ if (CommandLineOptions.Clo.TraceCachingForDebugging)
+ {
+ Console.Out.WriteLine("Turned implementation into passive commands within {0:F0} ms.\n", end.Subtract(start).TotalMilliseconds);
+ }
+
+ if (CommandLineOptions.Clo.TraceCachingForDebugging)
+ {
+ using (var tokTxtWr = new TokenTextWriter("<console>", Console.Out, false, false))
+ {
+ var pd = CommandLineOptions.Clo.PrintDesugarings;
+ var pu = CommandLineOptions.Clo.PrintUnstructured;
+ CommandLineOptions.Clo.PrintDesugarings = true;
+ CommandLineOptions.Clo.PrintUnstructured = 1;
+ impl.Emit(tokTxtWr, 0);
+ CommandLineOptions.Clo.PrintDesugarings = pd;
+ CommandLineOptions.Clo.PrintUnstructured = pu;
+ }
+ }
+
+ currentImplementation = null;
+
+ RestoreParamWhereClauses(impl);
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify) {
+ Console.WriteLine("after conversion to passive commands");
+ EmitImpl(impl, true);
+ }
+ #endregion
+
+ return r;
+ }
+
+ protected Dictionary<Variable, Expr> ConvertBlocks2PassiveCmd(List<Block> blocks, List<IdentifierExpr> modifies, ModelViewInfo mvInfo) {
+ Contract.Requires(blocks != null);
+ Contract.Requires(modifies != null);
+ Contract.Requires(mvInfo != null);
+ #region Convert to Passive Commands
+
+ #region Topological sort -- need to process in a linearization of the partial order
+ Graph<Block> dag = new Graph<Block>();
+ dag.AddSource(cce.NonNull(blocks[0])); // there is always at least one node in the graph
+ foreach (Block b in blocks) {
+ GotoCmd gtc = b.TransferCmd as GotoCmd;
+ if (gtc != null) {
+ Contract.Assume(gtc.labelTargets != null);
+ foreach (Block dest in gtc.labelTargets) {
+ Contract.Assert(dest != null);
+ dag.AddEdge(b, dest);
+ }
+ }
+ }
+
+ IEnumerable sortedNodes;
+ if (CommandLineOptions.Clo.ModifyTopologicalSorting) {
+ sortedNodes = dag.TopologicalSort(true);
+ } else {
+ sortedNodes = dag.TopologicalSort();
+ }
+
+ Contract.Assert(sortedNodes != null);
+ #endregion
+
+ Substitution oldFrameSubst = ComputeOldExpressionSubstitution(modifies);
+
+ // Now we can process the nodes in an order so that we're guaranteed to have
+ // processed all of a node's predecessors before we process the node.
+ Dictionary<Block, Dictionary<Variable, Expr>> block2Incarnation = new Dictionary<Block, Dictionary<Variable, Expr>>();
+ Block exitBlock = null;
+ Dictionary<Variable, Expr> exitIncarnationMap = null;
+ var variableCollectors = new Dictionary<Block, MutableVariableCollector>();
+ foreach (Block b in sortedNodes) {
+ Contract.Assert(b != null);
+ Contract.Assert(!block2Incarnation.ContainsKey(b));
+ Dictionary<Variable, Expr> incarnationMap = ComputeIncarnationMap(b, block2Incarnation);
+
+ // b.liveVarsBefore has served its purpose in the just-finished call to ComputeIncarnationMap; null it out.
+ b.liveVarsBefore = null;
+
+ // Decrement the succCount field in each predecessor. Once the field reaches zero in any block,
+ // all its successors have been passified. Consequently, its entry in block2Incarnation can be removed.
+ byte[] currentChecksum = null;
+ var mvc = new MutableVariableCollector();
+ variableCollectors[b] = mvc;
+ foreach (Block p in b.Predecessors) {
+ p.succCount--;
+ if (p.Checksum != null)
+ {
+ // Compute the checksum based on the checksums of the predecessor. The order should not matter.
+ currentChecksum = ChecksumHelper.CombineChecksums(p.Checksum, currentChecksum, true);
+ }
+ mvc.AddUsedVariables(variableCollectors[p].UsedVariables);
+ if (p.succCount == 0)
+ block2Incarnation.Remove(p);
+ }
+
+ #region Each block's map needs to be available to successor blocks
+ GotoCmd gotoCmd = b.TransferCmd as GotoCmd;
+ if (gotoCmd == null) {
+ b.succCount = 0;
+ }
+ else {
+ // incarnationMap needs to be added only if there is some successor of b
+ b.succCount = gotoCmd.labelNames.Count;
+ block2Incarnation.Add(b, incarnationMap);
+ }
+ #endregion Each block's map needs to be available to successor blocks
+
+ TurnIntoPassiveBlock(b, incarnationMap, mvInfo, oldFrameSubst, mvc, currentChecksum);
+ exitBlock = b;
+ exitIncarnationMap = incarnationMap;
+ }
+
+ variableCollectors.Clear();
+
+ // Verify that exitBlock is indeed the unique exit block
+ Contract.Assert(exitBlock != null);
+ Contract.Assert(exitBlock.TransferCmd is ReturnCmd);
+ #endregion Convert to Passive Commands
+
+ return exitIncarnationMap;
+ }
+
+ /// <summary>
+ /// Compute the substitution for old expressions.
+ /// </summary>
+ protected static Substitution ComputeOldExpressionSubstitution(List<IdentifierExpr> modifies)
+ {
+ Dictionary<Variable, Expr> oldFrameMap = new Dictionary<Variable, Expr>();
+ foreach (IdentifierExpr ie in modifies)
+ {
+ Contract.Assert(ie != null);
+ if (!oldFrameMap.ContainsKey(cce.NonNull(ie.Decl)))
+ oldFrameMap.Add(ie.Decl, ie);
+ }
+ return Substituter.SubstitutionFromHashtable(oldFrameMap);
+ }
+
+ public enum CachingAction : byte
+ {
+ DoNothingToAssert,
+ MarkAsPartiallyVerified,
+ MarkAsFullyVerified,
+ RecycleError,
+ AssumeNegationOfAssumptionVariable,
+ DropAssume
+ }
+
+ public long[] CachingActionCounts;
+
+ void TraceCachingAction(Cmd cmd, CachingAction action)
+ {
+ if (CommandLineOptions.Clo.TraceCachingForTesting)
+ {
+ using (var tokTxtWr = new TokenTextWriter("<console>", Console.Out, false, false))
+ {
+ var loc = cmd.tok != null && cmd.tok != Token.NoToken ? string.Format("{0}({1},{2})", cmd.tok.filename, cmd.tok.line, cmd.tok.col) : "<unknown location>";
+ Console.Write("Processing command (at {0}) ", loc);
+ cmd.Emit(tokTxtWr, 0);
+ Console.Out.WriteLine(" >>> {0}", action);
+ }
+ }
+
+ if (CommandLineOptions.Clo.TraceCachingForBenchmarking && CachingActionCounts != null)
+ {
+ Interlocked.Increment(ref CachingActionCounts[(int)action]);
+ }
+ }
+
+ /// <summary>
+ /// Turn a command into a passive command, and it remembers the previous step, to see if it is a havoc or not. In the case, it remembers the incarnation map BEFORE the havoc
+ /// Meanwhile, record any information needed to later reconstruct a model view.
+ /// </summary>
+ protected void TurnIntoPassiveCmd(Cmd c, Dictionary<Variable, Expr> incarnationMap, Substitution oldFrameSubst, List<Cmd> passiveCmds, ModelViewInfo mvInfo, Block containingBlock) {
+ Contract.Requires(c != null);
+ Contract.Requires(incarnationMap != null);
+ Contract.Requires(oldFrameSubst != null);
+ Contract.Requires(passiveCmds != null);
+ Contract.Requires(mvInfo != null);
+ Contract.Requires(containingBlock != null);
+
+ Substitution incarnationSubst = Substituter.SubstitutionFromHashtable(incarnationMap);
+ #region assert/assume P |--> assert/assume P[x := in(x)], out := in
+ if (c is PredicateCmd) {
+ Contract.Assert(c is AssertCmd || c is AssumeCmd); // otherwise, unexpected PredicateCmd type
+
+ PredicateCmd pc = (PredicateCmd)c.Clone();
+ Contract.Assert(pc != null);
+
+ QKeyValue current = pc.Attributes;
+ while (current != null)
+ {
+ if (current.Key == "minimize" || current.Key == "maximize") {
+ Contract.Assume(current.Params.Count == 1);
+ var param = current.Params[0] as Expr;
+ Contract.Assume(param != null && (param.Type.IsInt || param.Type.IsReal || param.Type.IsBv));
+ current.ClearParams();
+ current.AddParam(Substituter.ApplyReplacingOldExprs(incarnationSubst, oldFrameSubst, param));
+ }
+ if (current.Key == "verified_under") {
+ Contract.Assume(current.Params.Count == 1);
+ var param = current.Params[0] as Expr;
+ Contract.Assume(param != null && param.Type.IsBool);
+ current.ClearParams();
+ current.AddParam(Substituter.ApplyReplacingOldExprs(incarnationSubst, oldFrameSubst, param));
+ }
+ current = current.Next;
+ }
+
+ Expr copy = Substituter.ApplyReplacingOldExprs(incarnationSubst, oldFrameSubst, pc.Expr);
+ if (CommandLineOptions.Clo.ModelViewFile != null && pc is AssumeCmd) {
+ string description = QKeyValue.FindStringAttribute(pc.Attributes, "captureState");
+ if (description != null) {
+ Expr mv = new NAryExpr(pc.tok, new FunctionCall(ModelViewInfo.MVState_FunctionDef), new List<Expr> { Bpl.Expr.Ident(ModelViewInfo.MVState_ConstantDef), Bpl.Expr.Literal(mvInfo.CapturePoints.Count) });
+ copy = Bpl.Expr.And(mv, copy);
+ mvInfo.CapturePoints.Add(new ModelViewInfo.Mapping(description, new Dictionary<Variable, Expr>(incarnationMap)));
+ }
+ }
+ Contract.Assert(copy != null);
+ var dropCmd = false;
+ var relevantAssumpVars = currentImplementation != null ? currentImplementation.RelevantInjectedAssumptionVariables(incarnationMap) : new List<LocalVariable>();
+ var relevantDoomedAssumpVars = currentImplementation != null ? currentImplementation.RelevantDoomedInjectedAssumptionVariables(incarnationMap) : new List<LocalVariable>();
+ var checksum = pc.Checksum;
+ if (pc is AssertCmd) {
+ var ac = (AssertCmd)pc;
+ ac.OrigExpr = ac.Expr;
+ Contract.Assert(ac.IncarnationMap == null);
+ ac.IncarnationMap = (Dictionary<Variable, Expr>)cce.NonNull(new Dictionary<Variable, Expr>(incarnationMap));
+
+ var subsumption = Wlp.Subsumption(ac);
+ if (relevantDoomedAssumpVars.Any())
+ {
+ TraceCachingAction(pc, CachingAction.DoNothingToAssert);
+ }
+ else if (currentImplementation != null
+ && currentImplementation.HasCachedSnapshot
+ && checksum != null
+ && currentImplementation.IsAssertionChecksumInCachedSnapshot(checksum)
+ && !currentImplementation.IsErrorChecksumInCachedSnapshot(checksum))
+ {
+ if (!currentImplementation.AnyErrorsInCachedSnapshot
+ && currentImplementation.InjectedAssumptionVariables.Count == 1
+ && relevantAssumpVars.Count == 1)
+ {
+ TraceCachingAction(pc, CachingAction.MarkAsPartiallyVerified);
+ }
+ else
+ {
+ bool isTrue;
+ var assmVars = currentImplementation.ConjunctionOfInjectedAssumptionVariables(incarnationMap, out isTrue);
+ TraceCachingAction(pc, !isTrue ? CachingAction.MarkAsPartiallyVerified : CachingAction.MarkAsFullyVerified);
+ var litExpr = ac.Expr as LiteralExpr;
+ if (litExpr == null || !litExpr.IsTrue)
+ {
+ ac.MarkAsVerifiedUnder(assmVars);
+ }
+ else
+ {
+ dropCmd = true;
+ }
+ }
+ }
+ else if (currentImplementation != null
+ && currentImplementation.HasCachedSnapshot
+ && relevantAssumpVars.Count == 0
+ && checksum != null
+ && currentImplementation.IsAssertionChecksumInCachedSnapshot(checksum)
+ && currentImplementation.IsErrorChecksumInCachedSnapshot(checksum))
+ {
+ TraceCachingAction(pc, CachingAction.RecycleError);
+ ac.MarkAsVerifiedUnder(Expr.True);
+ currentImplementation.AddRecycledFailingAssertion(ac);
+ pc.Attributes = new QKeyValue(Token.NoToken, "recycled_failing_assertion", new List<object>(), pc.Attributes);
+ }
+ else
+ {
+ TraceCachingAction(pc, CachingAction.DoNothingToAssert);
+ }
+ }
+ else if (pc is AssumeCmd
+ && QKeyValue.FindBoolAttribute(pc.Attributes, "precondition_previous_snapshot")
+ && pc.SugaredCmdChecksum != null)
+ {
+ if (!relevantDoomedAssumpVars.Any()
+ && currentImplementation.HasCachedSnapshot
+ && currentImplementation.IsAssertionChecksumInCachedSnapshot(pc.SugaredCmdChecksum)
+ && !currentImplementation.IsErrorChecksumInCachedSnapshot(pc.SugaredCmdChecksum))
+ {
+ bool isTrue;
+ var assmVars = currentImplementation.ConjunctionOfInjectedAssumptionVariables(incarnationMap, out isTrue);
+ if (!isTrue)
+ {
+ copy = LiteralExpr.Imp(assmVars, copy);
+ TraceCachingAction(pc, CachingAction.MarkAsPartiallyVerified);
+ }
+ else
+ {
+ TraceCachingAction(pc, CachingAction.MarkAsFullyVerified);
+ }
+ }
+ else
+ {
+ TraceCachingAction(pc, CachingAction.DropAssume);
+ dropCmd = true;
+ }
+ }
+ else if (pc is AssumeCmd && QKeyValue.FindBoolAttribute(pc.Attributes, "assumption_variable_initialization"))
+ {
+ var identExpr = pc.Expr as IdentifierExpr;
+ if (identExpr != null && identExpr.Decl != null && !incarnationMap.ContainsKey(identExpr.Decl))
+ {
+ incarnationMap[identExpr.Decl] = LiteralExpr.True;
+ dropCmd = true;
+ }
+ }
+ pc.Expr = copy;
+ if (!dropCmd)
+ {
+ passiveCmds.Add(pc);
+ }
+ }
+ #endregion
+ #region x1 := E1, x2 := E2, ... |--> assume x1' = E1[in] & x2' = E2[in], out := in( x |-> x' ) [except as noted below]
+ else if (c is AssignCmd) {
+ AssignCmd assign = ((AssignCmd)c).AsSimpleAssignCmd; // first remove map assignments
+ Contract.Assert(assign != null);
+ #region Substitute all variables in E with the current map
+ List<Expr> copies = new List<Expr>();
+ foreach (Expr e in assign.Rhss) {
+ Contract.Assert(e != null);
+ copies.Add(Substituter.ApplyReplacingOldExprs(incarnationSubst,
+ oldFrameSubst,
+ e));
+ }
+ #endregion
+
+ List<Expr/*!>!*/> assumptions = new List<Expr>();
+ // it might be too slow to create a new dictionary each time ...
+ IDictionary<Variable, Expr> newIncarnationMappings =
+ new Dictionary<Variable, Expr>();
+
+ for (int i = 0; i < assign.Lhss.Count; ++i) {
+ IdentifierExpr lhsIdExpr =
+ cce.NonNull((SimpleAssignLhs)assign.Lhss[i]).AssignedVariable;
+ Variable lhs = cce.NonNull(lhsIdExpr.Decl);
+ Contract.Assert(lhs != null);
+ Expr rhs = assign.Rhss[i];
+ Contract.Assert(rhs != null);
+
+ // don't create incarnations for assignments of literals or single variables.
+ if (rhs is LiteralExpr) {
+ incarnationMap[lhs] = rhs;
+ } else if (rhs is IdentifierExpr) {
+ IdentifierExpr ie = (IdentifierExpr)rhs;
+ if (incarnationMap.ContainsKey(cce.NonNull(ie.Decl)))
+ newIncarnationMappings[lhs] = cce.NonNull((Expr)incarnationMap[ie.Decl]);
+ else
+ newIncarnationMappings[lhs] = ie;
+ } else {
+ IdentifierExpr x_prime_exp = null;
+ #region Make a new incarnation, x', for variable x, but only if x is *not* already an incarnation
+ if (lhs is Incarnation) {
+ // incarnations are already written only once, no need to make an incarnation of an incarnation
+ x_prime_exp = lhsIdExpr;
+ } else {
+ Variable v = CreateIncarnation(lhs, c);
+ x_prime_exp = new IdentifierExpr(lhsIdExpr.tok, v);
+ newIncarnationMappings[lhs] = x_prime_exp;
+ }
+ #endregion
+
+ var nAryExpr = copies[i] as NAryExpr;
+ if (nAryExpr != null)
+ {
+ var binOp = nAryExpr.Fun as BinaryOperator;
+ if (binOp != null
+ && binOp.Op == BinaryOperator.Opcode.And)
+ {
+ var arg0 = nAryExpr.Args[0] as LiteralExpr;
+ var arg1 = nAryExpr.Args[1] as LiteralExpr;
+ if ((arg0 != null && arg0.IsTrue) || (arg1 != null && arg1.IsFalse))
+ {
+ // Replace the expressions "true && arg1" or "arg0 && false" by "arg1".
+ copies[i] = nAryExpr.Args[1];
+ }
+ }
+ }
+
+ #region Create an assume command with the new variable
+ assumptions.Add(TypedExprEq(x_prime_exp, copies[i], x_prime_exp.Decl != null && x_prime_exp.Decl.Name.Contains("a##cached##")));
+ #endregion
+ }
+ }
+
+ foreach (KeyValuePair<Variable, Expr> pair in newIncarnationMappings) {
+ Contract.Assert(pair.Key != null && pair.Value != null);
+ incarnationMap[pair.Key] = pair.Value;
+ }
+
+ if (assumptions.Count > 0) {
+ Expr assumption = assumptions[0];
+
+ for (int i = 1; i < assumptions.Count; ++i) {
+ Contract.Assert(assumption != null);
+ assumption = Expr.And(assumption, assumptions[i]);
+ }
+ passiveCmds.Add(new AssumeCmd(c.tok, assumption));
+ }
+
+ if (currentImplementation != null
+ && currentImplementation.HasCachedSnapshot
+ && !currentImplementation.AnyErrorsInCachedSnapshot
+ && currentImplementation.DoomedInjectedAssumptionVariables.Count == 0
+ && currentImplementation.InjectedAssumptionVariables.Count == 1
+ && assign.Lhss.Count == 1)
+ {
+ var identExpr = assign.Lhss[0].AsExpr as IdentifierExpr;
+ Expr incarnation;
+ if (identExpr != null && identExpr.Decl != null && QKeyValue.FindBoolAttribute(identExpr.Decl.Attributes, "assumption") && incarnationMap.TryGetValue(identExpr.Decl, out incarnation))
+ {
+ TraceCachingAction(assign, CachingAction.AssumeNegationOfAssumptionVariable);
+ passiveCmds.Add(new AssumeCmd(c.tok, Expr.Not(incarnation)));
+ }
+ }
+ }
+ #endregion
+ #region havoc w |--> assume whereClauses, out := in( w |-> w' )
+ else if (c is HavocCmd) {
+ if (this.preHavocIncarnationMap == null) // Save a copy of the incarnation map (at the top of a sequence of havoc statements)
+ this.preHavocIncarnationMap = new Dictionary<Variable, Expr>(incarnationMap);
+
+ HavocCmd hc = (HavocCmd)c;
+ Contract.Assert(c != null);
+ // If an assumption variable for postconditions is included here, it must have been assigned within a loop.
+ // We do not need to havoc it if we have performed a modular proof of the loop (i.e., using only the loop
+ // invariant) in the previous snapshot and, consequently, the corresponding assumption did not affect the
+ // anything after the loop. We can achieve this by simply not updating/adding it in the incarnation map.
+ List<IdentifierExpr> havocVars = hc.Vars.Where(v => !(QKeyValue.FindBoolAttribute(v.Decl.Attributes, "assumption") && v.Decl.Name.StartsWith("a##cached##"))).ToList();
+ // First, compute the new incarnations
+ foreach (IdentifierExpr ie in havocVars) {
+ Contract.Assert(ie != null);
+ if (!(ie.Decl is Incarnation)) {
+ Variable x = cce.NonNull(ie.Decl);
+ Variable x_prime = CreateIncarnation(x, c);
+ incarnationMap[x] = new IdentifierExpr(x_prime.tok, x_prime);
+ }
+ }
+ // Then, perform the assume of the where clauses, using the updated incarnations
+ Substitution updatedIncarnationSubst = Substituter.SubstitutionFromHashtable(incarnationMap);
+ foreach (IdentifierExpr ie in havocVars) {
+ Contract.Assert(ie != null);
+ if (!(ie.Decl is Incarnation)) {
+ Variable x = cce.NonNull(ie.Decl);
+ Bpl.Expr w = x.TypedIdent.WhereExpr;
+ if (w != null) {
+ Expr copy = Substituter.ApplyReplacingOldExprs(updatedIncarnationSubst, oldFrameSubst, w);
+ passiveCmds.Add(new AssumeCmd(c.tok, copy));
+ }
+ }
+ }
+
+ // Add the following assume-statement for each assumption variable 'v', where 'v_post' is the new incarnation and 'v_pre' is the old one:
+ // assume v_post ==> v_pre;
+ foreach (IdentifierExpr ie in havocVars)
+ {
+ if (QKeyValue.FindBoolAttribute(ie.Decl.Attributes, "assumption"))
+ {
+ var preInc = (Expr)(preHavocIncarnationMap[ie.Decl].Clone());
+ var postInc = (Expr)(incarnationMap[ie.Decl].Clone());
+ passiveCmds.Add(new AssumeCmd(c.tok, Expr.Imp(postInc, preInc)));
+ }
+ }
+ }
+ #endregion
+ else if (c is CommentCmd) {
+ // comments are just for debugging and don't affect verification
+ } else if (c is SugaredCmd) {
+ SugaredCmd sug = (SugaredCmd)c;
+ Contract.Assert(sug != null);
+ Cmd cmd = sug.Desugaring;
+ Contract.Assert(cmd != null);
+ TurnIntoPassiveCmd(cmd, incarnationMap, oldFrameSubst, passiveCmds, mvInfo, containingBlock);
+ } else if (c is StateCmd) {
+ this.preHavocIncarnationMap = null; // we do not need to remeber the previous incarnations
+ StateCmd st = (StateCmd)c;
+ Contract.Assert(st != null);
+ // account for any where clauses among the local variables
+ foreach (Variable v in st.Locals) {
+ Contract.Assert(v != null);
+ Expr w = v.TypedIdent.WhereExpr;
+ if (w != null) {
+ passiveCmds.Add(new AssumeCmd(v.tok, w));
+ }
+ }
+ // do the sub-commands
+ foreach (Cmd s in st.Cmds) {
+ Contract.Assert(s != null);
+ TurnIntoPassiveCmd(s, incarnationMap, oldFrameSubst, passiveCmds, mvInfo, containingBlock);
+ }
+ // remove the local variables from the incarnation map
+ foreach (Variable v in st.Locals) {
+ Contract.Assert(v != null);
+ incarnationMap.Remove(v);
+ }
+ }
+ #region There shouldn't be any other types of commands at this point
+ else {
+ Debug.Fail("Internal Error: Passive transformation handed a command that is not one of assert,assume,havoc,assign.");
+ }
+ #endregion
+
+
+ #region We remember if we have put an havoc statement into a passive form
+
+ if (!(c is HavocCmd))
+ this.preHavocIncarnationMap = null;
+ // else: it has already been set by the case for the HavocCmd
+ #endregion
+ }
+
+ NAryExpr TypedExprEq(Expr e0, Expr e1, bool doNotResolveOverloading = false) {
+ Contract.Requires(e0 != null);
+ Contract.Requires(e1 != null);
+ NAryExpr e = Expr.Eq(e0, e1);
+ var fun = e.Fun as IOverloadedAppliable;
+ if (fun != null)
+ {
+ fun.DoNotResolveOverloading = doNotResolveOverloading;
+ }
+ e.Type = Bpl.Type.Bool;
+ e.TypeParameters = SimpleTypeParamInstantiation.EMPTY;
+ return e;
+ }
+
+ /// <summary>
+ /// Creates a new block to add to impl.Blocks, where impl is the implementation that contains
+ /// succ. Caller must do the add to impl.Blocks.
+ /// </summary>
+ protected Block CreateBlockBetween(int predIndex, Block succ) {
+ Contract.Requires(0 <= predIndex && predIndex < succ.Predecessors.Count);
+
+
+ Contract.Requires(succ != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+
+ Block pred = cce.NonNull(succ.Predecessors[predIndex]);
+
+ string newBlockLabel = pred.Label + "_@2_" + succ.Label;
+
+ // successor of newBlock list
+ List<String> ls = new List<String>();
+ ls.Add(succ.Label);
+ List<Block> bs = new List<Block>();
+ bs.Add(succ);
+
+ Block newBlock = new Block(
+ new Token(-17, -4),
+ newBlockLabel,
+ new List<Cmd>(),
+ new GotoCmd(Token.NoToken, ls, bs)
+ );
+
+ // predecessors of newBlock
+ List<Block> ps = new List<Block>();
+ ps.Add(pred);
+ newBlock.Predecessors = ps;
+
+ // fix successors of pred
+ #region Change the edge "pred->succ" to "pred->newBlock"
+ GotoCmd gtc = (GotoCmd)cce.NonNull(pred.TransferCmd);
+ Contract.Assume(gtc.labelTargets != null);
+ Contract.Assume(gtc.labelNames != null);
+ for (int i = 0, n = gtc.labelTargets.Count; i < n; i++) {
+ if (gtc.labelTargets[i] == succ) {
+ gtc.labelTargets[i] = newBlock;
+ gtc.labelNames[i] = newBlockLabel;
+ break;
+ }
+ }
+ #endregion Change the edge "pred->succ" to "pred->newBlock"
+
+ // fix predecessors of succ
+ succ.Predecessors[predIndex] = newBlock;
+
+ return newBlock;
+ }
+
+ protected void AddBlocksBetween(List<Block> blocks) {
+ Contract.Requires(blocks != null);
+ #region Introduce empty blocks between join points and their multi-successor predecessors
+ List<Block> tweens = new List<Block>();
+ foreach (Block b in blocks) {
+ int nPreds = b.Predecessors.Count;
+ if (nPreds > 1) {
+ // b is a join point (i.e., it has more than one predecessor)
+ for (int i = 0; i < nPreds; i++) {
+ GotoCmd gotocmd = (GotoCmd)(cce.NonNull(b.Predecessors[i]).TransferCmd);
+ if (gotocmd.labelNames != null && gotocmd.labelNames.Count > 1) {
+ tweens.Add(CreateBlockBetween(i, b));
+ }
+ }
+ }
+ }
+ blocks.AddRange(tweens); // must wait until iteration is done before changing the list
+ #endregion
+ }
+
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!_disposed)
+ {
+ if (disposing)
+ {
+ Close();
+ }
+ _disposed = true;
+ }
+ }
+
+ public int Cores { get; set; }
+ }
+
+ public class ModelViewInfo
+ {
+ public readonly List<Variable> AllVariables = new List<Variable>();
+ public readonly List<Mapping> CapturePoints = new List<Mapping>();
+ public static readonly Function MVState_FunctionDef = new Function(Token.NoToken, "$mv_state",
+ new List<Variable> { new Formal(Token.NoToken, new TypedIdent(Token.NoToken, TypedIdent.NoName, Bpl.Type.Int), true),
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, TypedIdent.NoName, Bpl.Type.Int), true) },
+ new Formal(Token.NoToken, new TypedIdent(Token.NoToken, TypedIdent.NoName, Bpl.Type.Bool), false));
+ public static readonly Constant MVState_ConstantDef = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, "$mv_state_const", Bpl.Type.Int));
+
+ public ModelViewInfo(Program program, Implementation impl) {
+ Contract.Requires(program != null);
+ Contract.Requires(impl != null);
+
+ // global variables
+ lock (program.TopLevelDeclarations)
+ {
+ foreach (var v in program.Variables)
+ {
+ if (!(v is Constant))
+ {
+ AllVariables.Add(v);
+ }
+ }
+ }
+ // implementation parameters
+ foreach (Variable p in impl.InParams) {
+ AllVariables.Add(p);
+ }
+ foreach (Variable p in impl.OutParams) {
+ AllVariables.Add(p);
+ }
+ // implementation locals
+ foreach (Variable v in impl.LocVars) {
+ AllVariables.Add(v);
+ }
+ }
+
+ public ModelViewInfo(CodeExpr codeExpr) {
+ Contract.Requires(codeExpr != null);
+ // TODO: also need all variables of enclosing scopes (the global variables of the program, the parameters
+ // and perhaps locals of the implementation (if any), any enclosing code expressions).
+
+ foreach (Variable v in codeExpr.LocVars) {
+ AllVariables.Add(v);
+ }
+ }
+
+ public class Mapping
+ {
+ public readonly string Description;
+ public readonly Dictionary<Variable, Expr> IncarnationMap;
+ public Mapping(string description, Dictionary<Variable, Expr> incarnationMap) {
+ Description = description;
+ IncarnationMap = incarnationMap;
+ }
+ }
+ }
+}
diff --git a/Source/VCGeneration/Context.cs b/Source/VCGeneration/Context.cs
index 83787dc5..3bd14e6b 100644
--- a/Source/VCGeneration/Context.cs
+++ b/Source/VCGeneration/Context.cs
@@ -1,254 +1,256 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.VCExprAST;
-
-namespace Microsoft.Boogie
-{
- /// <summary>
- /// The methods of this class are called in the following order:
- /// DeclareType*
- /// (DeclareConstant DeclareFunction)*
- /// AddAxiom*
- /// DeclareGlobalVariable*
- /// At this time, all "attributes" are passed in as null.
- /// </summary>
- [ContractClass(typeof(ProverContextContracts))]
- public abstract class ProverContext : ICloneable {
- protected virtual void ProcessDeclaration(Declaration decl) {Contract.Requires(decl != null);}
- public virtual void DeclareType(TypeCtorDecl t, string attributes) {Contract.Requires(t != null); ProcessDeclaration(t); }
- public virtual void DeclareConstant(Constant c, bool uniq, string attributes) {Contract.Requires(c != null); ProcessDeclaration(c); }
- public virtual void DeclareFunction(Function f, string attributes) {Contract.Requires(f != null); ProcessDeclaration(f); }
- public virtual void AddAxiom(Axiom a, string attributes) {Contract.Requires(a != null); ProcessDeclaration(a); }
- public virtual void DeclareGlobalVariable(GlobalVariable v, string attributes) {Contract.Requires(v != null); ProcessDeclaration(v); }
- public abstract void AddAxiom(VCExpr vc);
- public abstract string Lookup(VCExprVar var);
- public abstract VCExpressionGenerator ExprGen { get; }
- public abstract Boogie2VCExprTranslator BoogieExprTranslator { get; }
- public abstract VCGenerationOptions VCGenOptions { get; }
- public abstract object Clone();
- public abstract void Reset();
- public abstract void Clear();
- }
-
-[ContractClassFor(typeof(ProverContext))]
-public abstract class ProverContextContracts:ProverContext{
- public override void AddAxiom(VCExpr vc) {
- }
- public override void AddAxiom(Axiom a, string attributes)
-{
-}
- public override VCExpressionGenerator ExprGen
-{
- get { Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
- throw new NotImplementedException(); }
-}
- public override Boogie2VCExprTranslator BoogieExprTranslator
-{
- get { Contract.Ensures(Contract.Result<Boogie2VCExprTranslator>() != null);
- throw new NotImplementedException(); }
-}
- public override VCGenerationOptions VCGenOptions
-{
- get {Contract.Ensures(Contract.Result<VCGenerationOptions>() != null);
- throw new NotImplementedException(); }
-}
- public override object Clone()
-{
- Contract.Ensures(Contract.Result<object>() != null);
- throw new NotImplementedException();
-}
-}
-
- // -----------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------
-
- /// <summary>
- /// This ProverContext subclass is intended for use with untyped provers that do not require names
- /// to be declared before use. It constructs its context from unique constants and given axioms.
- /// </summary>
- public class DeclFreeProverContext : ProverContext {
- protected VCExpressionGenerator gen;
- protected VCGenerationOptions genOptions;
- protected Boogie2VCExprTranslator translator;
-
- protected OrderingAxiomBuilder orderingAxiomBuilder;
-
- protected List<Variable> distincts;
- protected List<VCExpr> axiomConjuncts;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(gen != null);
- Contract.Invariant(genOptions != null);
- Contract.Invariant(translator != null);
- Contract.Invariant(orderingAxiomBuilder != null);
- Contract.Invariant(cce.NonNullElements(distincts));
- Contract.Invariant(cce.NonNullElements(axiomConjuncts));
- }
-
- public VCExprTranslator/*?*/ exprTranslator;
-
- public DeclFreeProverContext(VCExpressionGenerator gen,
- VCGenerationOptions genOptions) {
- Contract.Requires(gen != null);
- Contract.Requires(genOptions != null);
- this.gen = gen;
- this.genOptions = genOptions;
- Boogie2VCExprTranslator t = new Boogie2VCExprTranslator (gen, genOptions);
- this.translator = t;
-
- SetupOrderingAxiomBuilder(gen, t);
-
- distincts = new List<Variable>();
- axiomConjuncts = new List<VCExpr>();
-
- exprTranslator = null;
- }
-
- private void SetupOrderingAxiomBuilder(VCExpressionGenerator gen, Boogie2VCExprTranslator t)
- {
- OrderingAxiomBuilder oab = new OrderingAxiomBuilder(gen, t);
- Contract.Assert(oab != null);
- oab.Setup();
- this.orderingAxiomBuilder = oab;
- }
-
- public override void Reset()
- {
- SetupOrderingAxiomBuilder(gen, translator);
- distincts = new List<Variable>();
- axiomConjuncts = new List<VCExpr>();
- }
-
- public override void Clear()
- {
- distincts = new List<Variable>();
- axiomConjuncts = new List<VCExpr>();
- }
-
- protected DeclFreeProverContext(DeclFreeProverContext ctxt) {
- Contract.Requires(ctxt != null);
- this.gen = ctxt.gen;
- this.genOptions = ctxt.genOptions;
- Boogie2VCExprTranslator t = (Boogie2VCExprTranslator)ctxt.translator.Clone();
- Contract.Assert(t != null);
- this.translator = t;
- this.orderingAxiomBuilder = new OrderingAxiomBuilder(ctxt.gen, t, ctxt.orderingAxiomBuilder);
-
- StringBuilder cmds = new StringBuilder ();
-
- distincts = new List<Variable>(ctxt.distincts);
- axiomConjuncts = new List<VCExpr>(ctxt.axiomConjuncts);
-
- if (ctxt.exprTranslator == null)
- exprTranslator = null;
- else
- exprTranslator = (VCExprTranslator)cce.NonNull(ctxt.exprTranslator.Clone());
- }
-
- public override object Clone() {
- Contract.Ensures(Contract.Result<object>() != null);
-
- return new DeclFreeProverContext(this);
- }
-
- public override void DeclareFunction(Function f, string attributes) {//Contract.Requires(f != null);
- base.ProcessDeclaration(f);
- }
-
- public override void DeclareConstant(Constant c, bool uniq, string attributes) {//Contract.Requires(c != null);
- base.DeclareConstant(c, uniq, attributes);
- orderingAxiomBuilder.AddConstant(c);
-
- // TODO: make separate distinct lists for names coming from different types
- // e.g., one for strings, one for ints, one for program types.
- if (uniq){
- distincts.Add(c);
- }
- }
-
- public override void AddAxiom(Axiom ax, string attributes) {//Contract.Requires(ax != null);
- base.AddAxiom(ax, attributes);
-
- axiomConjuncts.Add(translator.Translate(ax.Expr));
- }
-
- public override void AddAxiom(VCExpr vc)
- {//Contract.Requires(vc != null);
- axiomConjuncts.Add(vc);
- }
-
- public VCExpr Axioms {
- get {Contract.Ensures(Contract.Result<VCExpr>() != null);
- VCExpr axioms = gen.NAry(VCExpressionGenerator.AndOp, axiomConjuncts);
- List<VCExpr>/*!>!*/ distinctVars = new List<VCExpr> ();
- foreach (Variable v in distincts){
- Contract.Assert(v != null);
- distinctVars.Add(translator.LookupVariable(v));}
- axioms = gen.AndSimp(gen.Distinct(distinctVars), axioms);
- if (CommandLineOptions.Clo.TypeEncodingMethod != CommandLineOptions.TypeEncoding.Monomorphic)
- axioms = gen.AndSimp(orderingAxiomBuilder.Axioms, axioms);
- return axioms;
- }
- }
-
- public override string Lookup(VCExprVar var)
- {
- return exprTranslator.Lookup(var);
- }
-
- public override VCExpressionGenerator ExprGen { get {Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
-
- return gen;
- } }
- public override Boogie2VCExprTranslator BoogieExprTranslator { get {Contract.Ensures(Contract.Result<Boogie2VCExprTranslator>() != null);
-
- return translator;
- } }
- public override VCGenerationOptions VCGenOptions { get {Contract.Ensures(Contract.Result<VCGenerationOptions>() != null);
-
- return genOptions;
- } }
- }
-
- // Translator from VCExpressions to strings, which are implemented
- // by the various provers
- [ContractClass(typeof(VCExprTranslatorContracts))]
- public abstract class VCExprTranslator : ICloneable {
- public abstract string translate(VCExpr expr, int polarity);
- public abstract string Lookup(VCExprVar var);
- public abstract Object Clone();
- }
-
- [ContractClassFor(typeof(VCExprTranslator))]
-
- public abstract class VCExprTranslatorContracts : VCExprTranslator {
- public override object Clone() {
- Contract.Ensures(Contract.Result<object>() != null);
- throw new NotImplementedException();
- }
- public override string Lookup(VCExprVar var) {
- Contract.Requires(var != null);
- Contract.Ensures(Contract.Result<string>() != null);
-
- throw new NotImplementedException();
- }
- public override string translate(VCExpr expr, int polarity) {
-
- Contract.Requires(expr != null);
-
- Contract.Ensures(Contract.Result<string>() != null);
-
- throw new NotImplementedException();
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.VCExprAST;
+
+namespace Microsoft.Boogie
+{
+ /// <summary>
+ /// The methods of this class are called in the following order:
+ /// DeclareType*
+ /// (DeclareConstant DeclareFunction)*
+ /// AddAxiom*
+ /// DeclareGlobalVariable*
+ /// At this time, all "attributes" are passed in as null.
+ /// </summary>
+ [ContractClass(typeof(ProverContextContracts))]
+ public abstract class ProverContext : ICloneable {
+ public int TimoutDiagnosticsCount { get; set; }
+ public readonly Dictionary<int, Tuple<AssertCmd, TransferCmd>> TimeoutDiagnosticIDToAssertion = new Dictionary<int, Tuple<AssertCmd, TransferCmd>>();
+ protected virtual void ProcessDeclaration(Declaration decl) {Contract.Requires(decl != null);}
+ public virtual void DeclareType(TypeCtorDecl t, string attributes) {Contract.Requires(t != null); ProcessDeclaration(t); }
+ public virtual void DeclareConstant(Constant c, bool uniq, string attributes) {Contract.Requires(c != null); ProcessDeclaration(c); }
+ public virtual void DeclareFunction(Function f, string attributes) {Contract.Requires(f != null); ProcessDeclaration(f); }
+ public virtual void AddAxiom(Axiom a, string attributes) {Contract.Requires(a != null); ProcessDeclaration(a); }
+ public virtual void DeclareGlobalVariable(GlobalVariable v, string attributes) {Contract.Requires(v != null); ProcessDeclaration(v); }
+ public abstract void AddAxiom(VCExpr vc);
+ public abstract string Lookup(VCExprVar var);
+ public abstract VCExpressionGenerator ExprGen { get; }
+ public abstract Boogie2VCExprTranslator BoogieExprTranslator { get; }
+ public abstract VCGenerationOptions VCGenOptions { get; }
+ public abstract object Clone();
+ public abstract void Reset();
+ public abstract void Clear();
+ }
+
+[ContractClassFor(typeof(ProverContext))]
+public abstract class ProverContextContracts:ProverContext{
+ public override void AddAxiom(VCExpr vc) {
+ }
+ public override void AddAxiom(Axiom a, string attributes)
+{
+}
+ public override VCExpressionGenerator ExprGen
+{
+ get { Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
+ throw new NotImplementedException(); }
+}
+ public override Boogie2VCExprTranslator BoogieExprTranslator
+{
+ get { Contract.Ensures(Contract.Result<Boogie2VCExprTranslator>() != null);
+ throw new NotImplementedException(); }
+}
+ public override VCGenerationOptions VCGenOptions
+{
+ get {Contract.Ensures(Contract.Result<VCGenerationOptions>() != null);
+ throw new NotImplementedException(); }
+}
+ public override object Clone()
+{
+ Contract.Ensures(Contract.Result<object>() != null);
+ throw new NotImplementedException();
+}
+}
+
+ // -----------------------------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------------------------
+
+ /// <summary>
+ /// This ProverContext subclass is intended for use with untyped provers that do not require names
+ /// to be declared before use. It constructs its context from unique constants and given axioms.
+ /// </summary>
+ public class DeclFreeProverContext : ProverContext {
+ protected VCExpressionGenerator gen;
+ protected VCGenerationOptions genOptions;
+ protected Boogie2VCExprTranslator translator;
+
+ protected OrderingAxiomBuilder orderingAxiomBuilder;
+
+ protected List<Variable> distincts;
+ protected List<VCExpr> axiomConjuncts;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(gen != null);
+ Contract.Invariant(genOptions != null);
+ Contract.Invariant(translator != null);
+ Contract.Invariant(orderingAxiomBuilder != null);
+ Contract.Invariant(cce.NonNullElements(distincts));
+ Contract.Invariant(cce.NonNullElements(axiomConjuncts));
+ }
+
+ public VCExprTranslator/*?*/ exprTranslator;
+
+ public DeclFreeProverContext(VCExpressionGenerator gen,
+ VCGenerationOptions genOptions) {
+ Contract.Requires(gen != null);
+ Contract.Requires(genOptions != null);
+ this.gen = gen;
+ this.genOptions = genOptions;
+ Boogie2VCExprTranslator t = new Boogie2VCExprTranslator (gen, genOptions);
+ this.translator = t;
+
+ SetupOrderingAxiomBuilder(gen, t);
+
+ distincts = new List<Variable>();
+ axiomConjuncts = new List<VCExpr>();
+
+ exprTranslator = null;
+ }
+
+ private void SetupOrderingAxiomBuilder(VCExpressionGenerator gen, Boogie2VCExprTranslator t)
+ {
+ OrderingAxiomBuilder oab = new OrderingAxiomBuilder(gen, t);
+ Contract.Assert(oab != null);
+ oab.Setup();
+ this.orderingAxiomBuilder = oab;
+ }
+
+ public override void Reset()
+ {
+ SetupOrderingAxiomBuilder(gen, translator);
+ distincts = new List<Variable>();
+ axiomConjuncts = new List<VCExpr>();
+ }
+
+ public override void Clear()
+ {
+ distincts = new List<Variable>();
+ axiomConjuncts = new List<VCExpr>();
+ }
+
+ protected DeclFreeProverContext(DeclFreeProverContext ctxt) {
+ Contract.Requires(ctxt != null);
+ this.gen = ctxt.gen;
+ this.genOptions = ctxt.genOptions;
+ Boogie2VCExprTranslator t = (Boogie2VCExprTranslator)ctxt.translator.Clone();
+ Contract.Assert(t != null);
+ this.translator = t;
+ this.orderingAxiomBuilder = new OrderingAxiomBuilder(ctxt.gen, t, ctxt.orderingAxiomBuilder);
+
+ StringBuilder cmds = new StringBuilder ();
+
+ distincts = new List<Variable>(ctxt.distincts);
+ axiomConjuncts = new List<VCExpr>(ctxt.axiomConjuncts);
+
+ if (ctxt.exprTranslator == null)
+ exprTranslator = null;
+ else
+ exprTranslator = (VCExprTranslator)cce.NonNull(ctxt.exprTranslator.Clone());
+ }
+
+ public override object Clone() {
+ Contract.Ensures(Contract.Result<object>() != null);
+
+ return new DeclFreeProverContext(this);
+ }
+
+ public override void DeclareFunction(Function f, string attributes) {//Contract.Requires(f != null);
+ base.ProcessDeclaration(f);
+ }
+
+ public override void DeclareConstant(Constant c, bool uniq, string attributes) {//Contract.Requires(c != null);
+ base.DeclareConstant(c, uniq, attributes);
+ orderingAxiomBuilder.AddConstant(c);
+
+ // TODO: make separate distinct lists for names coming from different types
+ // e.g., one for strings, one for ints, one for program types.
+ if (uniq){
+ distincts.Add(c);
+ }
+ }
+
+ public override void AddAxiom(Axiom ax, string attributes) {//Contract.Requires(ax != null);
+ base.AddAxiom(ax, attributes);
+
+ axiomConjuncts.Add(translator.Translate(ax.Expr));
+ }
+
+ public override void AddAxiom(VCExpr vc)
+ {//Contract.Requires(vc != null);
+ axiomConjuncts.Add(vc);
+ }
+
+ public VCExpr Axioms {
+ get {Contract.Ensures(Contract.Result<VCExpr>() != null);
+ VCExpr axioms = gen.NAry(VCExpressionGenerator.AndOp, axiomConjuncts);
+ List<VCExpr>/*!>!*/ distinctVars = new List<VCExpr> ();
+ foreach (Variable v in distincts){
+ Contract.Assert(v != null);
+ distinctVars.Add(translator.LookupVariable(v));}
+ axioms = gen.AndSimp(gen.Distinct(distinctVars), axioms);
+ if (CommandLineOptions.Clo.TypeEncodingMethod != CommandLineOptions.TypeEncoding.Monomorphic)
+ axioms = gen.AndSimp(orderingAxiomBuilder.Axioms, axioms);
+ return axioms;
+ }
+ }
+
+ public override string Lookup(VCExprVar var)
+ {
+ return exprTranslator.Lookup(var);
+ }
+
+ public override VCExpressionGenerator ExprGen { get {Contract.Ensures(Contract.Result<VCExpressionGenerator>() != null);
+
+ return gen;
+ } }
+ public override Boogie2VCExprTranslator BoogieExprTranslator { get {Contract.Ensures(Contract.Result<Boogie2VCExprTranslator>() != null);
+
+ return translator;
+ } }
+ public override VCGenerationOptions VCGenOptions { get {Contract.Ensures(Contract.Result<VCGenerationOptions>() != null);
+
+ return genOptions;
+ } }
+ }
+
+ // Translator from VCExpressions to strings, which are implemented
+ // by the various provers
+ [ContractClass(typeof(VCExprTranslatorContracts))]
+ public abstract class VCExprTranslator : ICloneable {
+ public abstract string translate(VCExpr expr, int polarity);
+ public abstract string Lookup(VCExprVar var);
+ public abstract Object Clone();
+ }
+
+ [ContractClassFor(typeof(VCExprTranslator))]
+
+ public abstract class VCExprTranslatorContracts : VCExprTranslator {
+ public override object Clone() {
+ Contract.Ensures(Contract.Result<object>() != null);
+ throw new NotImplementedException();
+ }
+ public override string Lookup(VCExprVar var) {
+ Contract.Requires(var != null);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ throw new NotImplementedException();
+ }
+ public override string translate(VCExpr expr, int polarity) {
+
+ Contract.Requires(expr != null);
+
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Source/VCGeneration/ExprExtensions.cs b/Source/VCGeneration/ExprExtensions.cs
index 2bdb4af7..5e0dcf8e 100644
--- a/Source/VCGeneration/ExprExtensions.cs
+++ b/Source/VCGeneration/ExprExtensions.cs
@@ -1,353 +1,353 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 2012 Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Term = Microsoft.Boogie.VCExprAST.VCExpr;
-using FuncDecl = Microsoft.Boogie.VCExprAST.VCExprOp;
-using Sort = Microsoft.Boogie.Type;
-using Microsoft.Boogie.VCExprAST;
-
-
-/** This namespace contains some extensions to allow VCExpr to provide the
- * interface needed by RPFP and FixedpointVC. */
-
-namespace Microsoft.Boogie.ExprExtensions
-{
- class ReferenceComparer<T> : IEqualityComparer<T> where T : class
- {
- private static ReferenceComparer<T> m_instance;
-
- public static ReferenceComparer<T> Instance
- {
- get
- {
- return m_instance ?? (m_instance = new ReferenceComparer<T>());
- }
- }
-
- public bool Equals(T x, T y)
- {
- return ReferenceEquals(x, y);
- }
-
- public int GetHashCode(T obj)
- {
- return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj);
- }
- }
-
- public class TermDict<T> : Dictionary<Term, T>
- {
- public TermDict() : base(ReferenceComparer<Term>.Instance) { }
- }
-
-
-
- public enum TermKind { App, Other };
-
- public enum DeclKind { Uninterpreted, And, Implies, Label, Other };
-
- public static class MyExtensions
- {
- public static Term[] GetAppArgs(this Term t)
- {
- Microsoft.Boogie.VCExprAST.VCExprNAry tn = t as Microsoft.Boogie.VCExprAST.VCExprNAry;
- return tn.ToArray();
- }
-
- public static FuncDecl GetAppDecl(this Term t)
- {
- Microsoft.Boogie.VCExprAST.VCExprNAry tn = t as Microsoft.Boogie.VCExprAST.VCExprNAry;
- return tn.Op;
- }
-
- public static string GetDeclName(this FuncDecl f)
- {
- return (f as VCExprBoogieFunctionOp).Func.Name; //TODO
- }
-
- public static DeclKind GetKind(this FuncDecl f)
- {
- if (f is VCExprBoogieFunctionOp)
- return DeclKind.Uninterpreted;
- if (f == VCExpressionGenerator.AndOp)
- return DeclKind.And;
- if (f == VCExpressionGenerator.ImpliesOp)
- return DeclKind.Implies;
- if (f is VCExprLabelOp)
- return DeclKind.Label;
- return DeclKind.Other;
- }
-
- public static bool IsLabel(this Term t)
- {
- return (t is VCExprNAry) && (GetAppDecl(t) is VCExprLabelOp);
- }
-
- public static string LabelName(this Term t)
- {
- return (GetAppDecl(t) as VCExprLabelOp).label;
- }
-
- public static Sort GetSort(this Term t)
- {
- return t.Type;
- }
-
- public static TermKind GetKind(this Term t)
- {
- if (t is Microsoft.Boogie.VCExprAST.VCExprNAry)
- return TermKind.App;
- return TermKind.Other;
- }
-
- public static bool IsFunctionApp(this Term t)
- {
- return t.GetKind() == TermKind.App && t.GetAppDecl().GetKind() == DeclKind.Uninterpreted;
- }
-
- public static bool IsFalse(this Term t)
- {
- return t == VCExpressionGenerator.False;
- }
-
- public static Term VCExprToTerm(this Microsoft.Boogie.ProverContext ctx, VCExpr e, LineariserOptions lin){
- return e;
- }
-
- }
-
- public class Context : Microsoft.Boogie.VCExpressionGenerator
- {
- public Term MkTrue()
- {
- return VCExpressionGenerator.True;
- }
-
- public Term MkFalse()
- {
- return VCExpressionGenerator.False;
- }
-
-
- public List<Term> axioms = new List<Term>();
-
- public void AddAxiom(Term ax)
- {
- axioms.Add(ax);
- }
-
- public void RemoveAxiom(Term ax)
- {
- axioms.Remove(ax);
- }
-
- public FuncDecl MkFuncDecl(string name, FuncDecl f)
- {
- Function h = (f as VCExprBoogieFunctionOp).Func;
- Function g = new Function(Token.NoToken, name, h.InParams, h.OutParams[0]);
- return BoogieFunctionOp(g);
- }
-
- public FuncDecl MkFuncDecl(string name, Sort rng)
- {
- Function g = new Function(Token.NoToken, name, new List<Variable>(), new Constant(Token.NoToken, new TypedIdent(Token.NoToken, "dummy",rng)));
- return BoogieFunctionOp(g);
- }
-
- public Term MkApp(FuncDecl f, Term[] args)
- {
- return Function(f, args);
- }
-
- public Term MkApp(FuncDecl f, Term[] args, Type[]/*!*/ typeArguments)
- {
- return Function(f, args, typeArguments);
- }
-
- public Term MkApp(FuncDecl f, Term arg)
- {
- return Function(f, arg);
- }
-
- public Term CloneApp(Term t, Term[] args)
- {
- var f = t.GetAppDecl();
- var typeArgs = (t as VCExprNAry).TypeArguments;
- if (typeArgs != null && typeArgs.Count > 0)
- {
- return MkApp(f, args, typeArgs.ToArray());
- }
- else
- {
- return MkApp(f, args);
- }
- }
-
- public Term MkAnd(Term[] args)
- {
- if (args.Length == 0) return True;
- Term res = args[0];
- for (int i = 1; i < args.Length; i++)
- res = And(res, args[i]);
- return res;
- }
-
- public Term MkAnd(Term arg1, Term arg2)
- {
- return And(arg1, arg2);
- }
-
-
- public Term MkNot(Term arg1)
- {
- return Not(arg1);
- }
-
- public Term MkImplies(Term arg1, Term arg2)
- {
- return Implies(arg1, arg2);
- }
-
- public Term MkEq(Term arg1, Term arg2)
- {
- return Eq(arg1, arg2);
- }
-
- public Sort MkBoolSort()
- {
- return Type.Bool;
- }
-
- public Term MkConst(string name, Sort sort)
- {
- return Variable(name, sort);
- }
-
- public Term MkForall(Term[] bounds, Term body)
- {
- if (bounds.Length == 0)
- return body;
- List<VCExprVar> vbs = new List<VCExprVar>();
- foreach(var v in bounds)
- vbs.Add(v as VCExprVar);
- return Forall(vbs,new List<VCTrigger>(), body);
- }
-
- public Term MkExists(Term[] bounds, Term body)
- {
- if (bounds.Length == 0)
- return body;
- List<VCExprVar> vbs = new List<VCExprVar>();
- foreach (var v in bounds)
- vbs.Add(v as VCExprVar);
- return Exists(vbs, new List<VCTrigger>(), body);
- }
-
- private class Letifier
- {
- private class counter
- {
- public int cnt = 0;
- }
- TermDict<counter> refcnt = new TermDict<counter>();
- List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
- TermDict< VCExprVar> bindingMap = new TermDict< VCExprVar>();
- int letcnt = 0;
- Context ctx;
-
- public Letifier(Context _ctx) { ctx = _ctx; }
-
- private void RefCnt(Term t)
- {
- counter cnt;
- if (!refcnt.TryGetValue(t, out cnt))
- {
- cnt = new counter();
- refcnt.Add(t, cnt);
- }
- cnt.cnt++;
- if (cnt.cnt == 1)
- {
- var kind = t.GetKind();
- if (kind == TermKind.App)
- {
- var args = t.GetAppArgs();
- foreach (var arg in args)
- RefCnt(arg);
- }
- else if (t is VCExprQuantifier)
- {
- RefCnt((t as VCExprQuantifier).Body);
- }
- }
- }
-
- private Term Doit(Term t)
- {
- VCExprVar v;
- if (bindingMap.TryGetValue(t, out v))
- {
- return v;
- }
- Term res = null;
- var kind = t.GetKind();
- bool letok = false;
- if (kind == TermKind.App)
- {
- var f = t.GetAppDecl();
- var args = t.GetAppArgs();
- args = args.Select(x => Doit(x)).ToArray();
- res = ctx.MkApp(f, args);
- letok = true;
- }
- else if (t is VCExprQuantifier)
- {
- var q = t as VCExprQuantifier;
- var newbody = ctx.Letify(q.Body);
- if (q.Quan == Quantifier.ALL)
- res = ctx.Forall(q.BoundVars, q.Triggers, newbody);
- else
- res = ctx.Exists(q.BoundVars, q.Triggers, newbody);
- letok = true;
- }
- else res = t;
- if (letok && refcnt[t].cnt > 1)
- {
- VCExprVar lv = ctx.MkConst("fpvc$" + Convert.ToString(letcnt), t.GetSort()) as VCExprVar;
- VCExprLetBinding b = ctx.LetBinding(lv, res);
- bindings.Add(b);
- bindingMap.Add(t, lv);
- res = lv;
- letcnt++;
- }
- return res;
- }
-
- public Term Letify(Term t)
- {
- RefCnt(t);
- Term res = Doit(t);
- if (bindings.Count > 0)
- res = ctx.Let(bindings, res);
- return res;
- }
-
- }
-
- public Term Letify(Term t)
- {
- var thing = new Letifier(this);
- return thing.Letify(t);
- }
-
- };
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2012 Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Term = Microsoft.Boogie.VCExprAST.VCExpr;
+using FuncDecl = Microsoft.Boogie.VCExprAST.VCExprOp;
+using Sort = Microsoft.Boogie.Type;
+using Microsoft.Boogie.VCExprAST;
+
+
+/** This namespace contains some extensions to allow VCExpr to provide the
+ * interface needed by RPFP and FixedpointVC. */
+
+namespace Microsoft.Boogie.ExprExtensions
+{
+ class ReferenceComparer<T> : IEqualityComparer<T> where T : class
+ {
+ private static ReferenceComparer<T> m_instance;
+
+ public static ReferenceComparer<T> Instance
+ {
+ get
+ {
+ return m_instance ?? (m_instance = new ReferenceComparer<T>());
+ }
+ }
+
+ public bool Equals(T x, T y)
+ {
+ return ReferenceEquals(x, y);
+ }
+
+ public int GetHashCode(T obj)
+ {
+ return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj);
+ }
+ }
+
+ public class TermDict<T> : Dictionary<Term, T>
+ {
+ public TermDict() : base(ReferenceComparer<Term>.Instance) { }
+ }
+
+
+
+ public enum TermKind { App, Other };
+
+ public enum DeclKind { Uninterpreted, And, Implies, Label, Other };
+
+ public static class MyExtensions
+ {
+ public static Term[] GetAppArgs(this Term t)
+ {
+ Microsoft.Boogie.VCExprAST.VCExprNAry tn = t as Microsoft.Boogie.VCExprAST.VCExprNAry;
+ return tn.ToArray();
+ }
+
+ public static FuncDecl GetAppDecl(this Term t)
+ {
+ Microsoft.Boogie.VCExprAST.VCExprNAry tn = t as Microsoft.Boogie.VCExprAST.VCExprNAry;
+ return tn.Op;
+ }
+
+ public static string GetDeclName(this FuncDecl f)
+ {
+ return (f as VCExprBoogieFunctionOp).Func.Name; //TODO
+ }
+
+ public static DeclKind GetKind(this FuncDecl f)
+ {
+ if (f is VCExprBoogieFunctionOp)
+ return DeclKind.Uninterpreted;
+ if (f == VCExpressionGenerator.AndOp)
+ return DeclKind.And;
+ if (f == VCExpressionGenerator.ImpliesOp)
+ return DeclKind.Implies;
+ if (f is VCExprLabelOp)
+ return DeclKind.Label;
+ return DeclKind.Other;
+ }
+
+ public static bool IsLabel(this Term t)
+ {
+ return (t is VCExprNAry) && (GetAppDecl(t) is VCExprLabelOp);
+ }
+
+ public static string LabelName(this Term t)
+ {
+ return (GetAppDecl(t) as VCExprLabelOp).label;
+ }
+
+ public static Sort GetSort(this Term t)
+ {
+ return t.Type;
+ }
+
+ public static TermKind GetKind(this Term t)
+ {
+ if (t is Microsoft.Boogie.VCExprAST.VCExprNAry)
+ return TermKind.App;
+ return TermKind.Other;
+ }
+
+ public static bool IsFunctionApp(this Term t)
+ {
+ return t.GetKind() == TermKind.App && t.GetAppDecl().GetKind() == DeclKind.Uninterpreted;
+ }
+
+ public static bool IsFalse(this Term t)
+ {
+ return t == VCExpressionGenerator.False;
+ }
+
+ public static Term VCExprToTerm(this Microsoft.Boogie.ProverContext ctx, VCExpr e, LineariserOptions lin){
+ return e;
+ }
+
+ }
+
+ public class Context : Microsoft.Boogie.VCExpressionGenerator
+ {
+ public Term MkTrue()
+ {
+ return VCExpressionGenerator.True;
+ }
+
+ public Term MkFalse()
+ {
+ return VCExpressionGenerator.False;
+ }
+
+
+ public List<Term> axioms = new List<Term>();
+
+ public void AddAxiom(Term ax)
+ {
+ axioms.Add(ax);
+ }
+
+ public void RemoveAxiom(Term ax)
+ {
+ axioms.Remove(ax);
+ }
+
+ public FuncDecl MkFuncDecl(string name, FuncDecl f)
+ {
+ Function h = (f as VCExprBoogieFunctionOp).Func;
+ Function g = new Function(Token.NoToken, name, h.InParams, h.OutParams[0]);
+ return BoogieFunctionOp(g);
+ }
+
+ public FuncDecl MkFuncDecl(string name, Sort rng)
+ {
+ Function g = new Function(Token.NoToken, name, new List<Variable>(), new Constant(Token.NoToken, new TypedIdent(Token.NoToken, "dummy",rng)));
+ return BoogieFunctionOp(g);
+ }
+
+ public Term MkApp(FuncDecl f, Term[] args)
+ {
+ return Function(f, args);
+ }
+
+ public Term MkApp(FuncDecl f, Term[] args, Type[]/*!*/ typeArguments)
+ {
+ return Function(f, args, typeArguments);
+ }
+
+ public Term MkApp(FuncDecl f, Term arg)
+ {
+ return Function(f, arg);
+ }
+
+ public Term CloneApp(Term t, Term[] args)
+ {
+ var f = t.GetAppDecl();
+ var typeArgs = (t as VCExprNAry).TypeArguments;
+ if (typeArgs != null && typeArgs.Count > 0)
+ {
+ return MkApp(f, args, typeArgs.ToArray());
+ }
+ else
+ {
+ return MkApp(f, args);
+ }
+ }
+
+ public Term MkAnd(Term[] args)
+ {
+ if (args.Length == 0) return True;
+ Term res = args[0];
+ for (int i = 1; i < args.Length; i++)
+ res = And(res, args[i]);
+ return res;
+ }
+
+ public Term MkAnd(Term arg1, Term arg2)
+ {
+ return And(arg1, arg2);
+ }
+
+
+ public Term MkNot(Term arg1)
+ {
+ return Not(arg1);
+ }
+
+ public Term MkImplies(Term arg1, Term arg2)
+ {
+ return Implies(arg1, arg2);
+ }
+
+ public Term MkEq(Term arg1, Term arg2)
+ {
+ return Eq(arg1, arg2);
+ }
+
+ public Sort MkBoolSort()
+ {
+ return Type.Bool;
+ }
+
+ public Term MkConst(string name, Sort sort)
+ {
+ return Variable(name, sort);
+ }
+
+ public Term MkForall(Term[] bounds, Term body)
+ {
+ if (bounds.Length == 0)
+ return body;
+ List<VCExprVar> vbs = new List<VCExprVar>();
+ foreach(var v in bounds)
+ vbs.Add(v as VCExprVar);
+ return Forall(vbs,new List<VCTrigger>(), body);
+ }
+
+ public Term MkExists(Term[] bounds, Term body)
+ {
+ if (bounds.Length == 0)
+ return body;
+ List<VCExprVar> vbs = new List<VCExprVar>();
+ foreach (var v in bounds)
+ vbs.Add(v as VCExprVar);
+ return Exists(vbs, new List<VCTrigger>(), body);
+ }
+
+ private class Letifier
+ {
+ private class counter
+ {
+ public int cnt = 0;
+ }
+ TermDict<counter> refcnt = new TermDict<counter>();
+ List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
+ TermDict< VCExprVar> bindingMap = new TermDict< VCExprVar>();
+ int letcnt = 0;
+ Context ctx;
+
+ public Letifier(Context _ctx) { ctx = _ctx; }
+
+ private void RefCnt(Term t)
+ {
+ counter cnt;
+ if (!refcnt.TryGetValue(t, out cnt))
+ {
+ cnt = new counter();
+ refcnt.Add(t, cnt);
+ }
+ cnt.cnt++;
+ if (cnt.cnt == 1)
+ {
+ var kind = t.GetKind();
+ if (kind == TermKind.App)
+ {
+ var args = t.GetAppArgs();
+ foreach (var arg in args)
+ RefCnt(arg);
+ }
+ else if (t is VCExprQuantifier)
+ {
+ RefCnt((t as VCExprQuantifier).Body);
+ }
+ }
+ }
+
+ private Term Doit(Term t)
+ {
+ VCExprVar v;
+ if (bindingMap.TryGetValue(t, out v))
+ {
+ return v;
+ }
+ Term res = null;
+ var kind = t.GetKind();
+ bool letok = false;
+ if (kind == TermKind.App)
+ {
+ var f = t.GetAppDecl();
+ var args = t.GetAppArgs();
+ args = args.Select(x => Doit(x)).ToArray();
+ res = ctx.MkApp(f, args);
+ letok = true;
+ }
+ else if (t is VCExprQuantifier)
+ {
+ var q = t as VCExprQuantifier;
+ var newbody = ctx.Letify(q.Body);
+ if (q.Quan == Quantifier.ALL)
+ res = ctx.Forall(q.BoundVars, q.Triggers, newbody);
+ else
+ res = ctx.Exists(q.BoundVars, q.Triggers, newbody);
+ letok = true;
+ }
+ else res = t;
+ if (letok && refcnt[t].cnt > 1)
+ {
+ VCExprVar lv = ctx.MkConst("fpvc$" + Convert.ToString(letcnt), t.GetSort()) as VCExprVar;
+ VCExprLetBinding b = ctx.LetBinding(lv, res);
+ bindings.Add(b);
+ bindingMap.Add(t, lv);
+ res = lv;
+ letcnt++;
+ }
+ return res;
+ }
+
+ public Term Letify(Term t)
+ {
+ RefCnt(t);
+ Term res = Doit(t);
+ if (bindings.Count > 0)
+ res = ctx.Let(bindings, res);
+ return res;
+ }
+
+ }
+
+ public Term Letify(Term t)
+ {
+ var thing = new Letifier(this);
+ return thing.Letify(t);
+ }
+
+ };
+}
diff --git a/Source/VCGeneration/FixedpointVC.cs b/Source/VCGeneration/FixedpointVC.cs
index 7dbf6b05..c636ea2b 100644
--- a/Source/VCGeneration/FixedpointVC.cs
+++ b/Source/VCGeneration/FixedpointVC.cs
@@ -1,2229 +1,2245 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 2012 Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.IO;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie;
-using Microsoft.Boogie.VCExprAST;
-
-
-using Term = Microsoft.Boogie.VCExprAST.VCExpr;
-using FuncDecl = Microsoft.Boogie.VCExprAST.VCExprOp;
-using Sort = Microsoft.Boogie.Type;
-using Microsoft.Boogie.ExprExtensions;
-
-
-namespace Microsoft.Boogie
-{
- public class FixedpointVC : VC.VCGen
- {
-
- public class AnnotationInfo
- {
- public enum AnnotationType { LoopInvariant, ProcedureSummary };
- public string filename;
- public int lineno;
- public string[] argnames;
- public AnnotationType type;
- };
-
- static bool NoLabels = false;
-
- // options
- bool largeblock = false;
-
- public bool SetOption(string option, string value)
- {
- if (option == "LargeBlock")
- {
- largeblock = true;
- return true;
- }
- return false;
- }
-
- Context ctx;
- RPFP rpfp;
- // Program program;
- Microsoft.Boogie.ProverContext boogieContext;
- Microsoft.Boogie.VCExpressionGenerator gen;
- public readonly static string recordProcName = "boogie_si_record"; // TODO: this really needed?
- private Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo
- = new Dictionary<string, StratifiedInliningInfo>();
- Checker checker;
- // Microsoft.Boogie.Z3.Z3InstanceOptions options = new Microsoft.Boogie.Z3.Z3InstanceOptions(); // TODO: what?
- LineariserOptions linOptions;
- Dictionary<FuncDecl, StratifiedInliningInfo> relationToProc = new Dictionary<FuncDecl, StratifiedInliningInfo>();
- Dictionary<string, Term> labels = new Dictionary<string, Term> ();
- List<Term> DualityVCs = new List<Term>();
- Dictionary<string, bool> summaries = new Dictionary<string, bool>();
- Dictionary<Block, List<Block>> edgesCut = new Dictionary<Block, List<Block>>();
- string main_proc_name = "main";
- Dictionary<string, int> extraRecBound = null;
-
-
- public enum Mode { Corral, OldCorral, Boogie};
- public enum AnnotationStyle { Flat, Procedure, Call };
-
- Mode mode;
- AnnotationStyle style;
-
- private static Checker old_checker = null;
-
- public static void CleanUp()
- {
- if (old_checker != null)
- {
- old_checker.Close();
- old_checker = null;
- }
- }
-
- public FixedpointVC( Program _program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers, Dictionary<string,int> _extraRecBound = null)
- : base(_program, logFilePath, appendLogFile, checkers)
- {
- switch (CommandLineOptions.Clo.FixedPointMode)
- {
- case CommandLineOptions.FixedPointInferenceMode.Corral:
- mode = Mode.Corral;
- style = AnnotationStyle.Procedure;
- break;
- case CommandLineOptions.FixedPointInferenceMode.OldCorral:
- mode = Mode.OldCorral;
- style = AnnotationStyle.Procedure;
- break;
- case CommandLineOptions.FixedPointInferenceMode.Flat:
- mode = Mode.Boogie;
- style = AnnotationStyle.Flat;
- break;
- case CommandLineOptions.FixedPointInferenceMode.Procedure:
- mode = Mode.Boogie;
- style = AnnotationStyle.Procedure;
- break;
- case CommandLineOptions.FixedPointInferenceMode.Call:
- mode = Mode.Boogie;
- style = AnnotationStyle.Call;
- break;
- }
- ctx = new Context(); // TODO is this right?
- rpfp = new RPFP(RPFP.CreateLogicSolver(ctx));
- program = _program;
- gen = ctx;
- if(old_checker == null)
- checker = new Checker(this, program, logFilePath, appendLogFile, CommandLineOptions.Clo.ProverKillTime, null);
- else {
- checker = old_checker;
- checker.RetargetWithoutReset(program,checker.TheoremProver.Context);
- }
- old_checker = checker;
- boogieContext = checker.TheoremProver.Context;
- linOptions = null; // new Microsoft.Boogie.Z3.Z3LineariserOptions(false, options, new List<VCExprVar>());
- extraRecBound = _extraRecBound;
- }
-
- Dictionary<string, AnnotationInfo> annotationInfo = new Dictionary<string, AnnotationInfo>();
-
- public void AnnotateLoops(Implementation impl, ProverContext ctxt)
- {
- Contract.Requires(impl != null);
-
- CurrentLocalVariables = impl.LocVars;
- variable2SequenceNumber = new Dictionary<Variable, int>();
- incarnationOriginMap = new Dictionary<Incarnation, Absy>();
-
- ResetPredecessors(impl.Blocks);
-
- #region Create the graph by adding the source node and each edge
- GraphUtil.Graph<Block> g = Program.GraphFromImpl(impl);
- #endregion
-
- //Graph<Block> g = program.ProcessLoops(impl);
-
- g.ComputeLoops(); // this is the call that does all of the processing
- if (!g.Reducible)
- {
- throw new System.Exception("Irreducible flow graphs are unsupported.");
- }
-
- #region add a symbolic annoation to every loop head
- foreach (Block header in cce.NonNull(g.Headers))
- AnnotateBlock(impl, ctxt, header);
- #endregion
- }
-
- private void AnnotateCallSites(Implementation impl, ProverContext ctxt, Dictionary<string, bool> impls){
- foreach (var b in impl.Blocks)
- {
- foreach (var cmd in b.Cmds)
- {
- if (cmd is CallCmd)
- {
- string name = (cmd as CallCmd).callee;
- if(impls.ContainsKey(name))
- goto annotate;
- }
- }
- continue;
- annotate:
- AnnotateBlock(impl, ctxt, b);
- }
- }
-
-
- private void AnnotateBlock(Implementation impl, ProverContext ctxt, Block header)
- {
- Contract.Assert(header != null);
-
- string name = impl.Name + "_" + header.Label + "_invar";
- if (annotationInfo.ContainsKey(name))
- return;
-
- // collect the variables needed in the invariant
- List<Expr> exprs = new List<Expr>();
- List<Variable> vars = new List<Variable>();
- List<string> names = new List<string>();
-
- if (style == AnnotationStyle.Flat)
- {
- // in flat mode, all live globals should be in live set
-#if false
- foreach (Variable v in program.GlobalVariables)
- {
- vars.Add(v);
- names.Add(v.ToString());
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
-#endif
- foreach (Variable v in /* impl.LocVars */ header.liveVarsBefore)
- {
- if (!(v is BoundVariable))
- {
- vars.Add(v);
- names.Add(v.ToString());
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- }
- }
- else
- {
- foreach (Variable v in program.GlobalVariables)
- {
- vars.Add(v);
- names.Add("@old_" + v.ToString());
- exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
- }
- foreach (IdentifierExpr ie in impl.Proc.Modifies)
- {
- if (ie.Decl == null)
- continue;
- vars.Add(ie.Decl);
- names.Add(ie.Decl.ToString());
- exprs.Add(ie);
- }
- foreach (Variable v in impl.Proc.InParams)
- {
- Contract.Assert(v != null);
- vars.Add(v);
- names.Add("@old_" + v.ToString());
- exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
- }
- foreach (Variable v in impl.LocVars)
- {
- vars.Add(v);
- names.Add(v.ToString());
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- }
-
- TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
- Contract.Assert(ti != null);
- Formal returnVar = new Formal(Token.NoToken, ti, false);
- Contract.Assert(returnVar != null);
- var function = new Function(Token.NoToken, name, vars, returnVar);
- ctxt.DeclareFunction(function, "");
-
- Expr invarExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
- var invarAssertion = new AssertCmd(Token.NoToken, invarExpr);
- List<Cmd> newCmds = new List<Cmd>();
- newCmds.Add(invarAssertion);
-
- // make a record in annotationInfo;
- var info = new AnnotationInfo();
- info.filename = header.tok.filename;
- info.lineno = header.Line;
- info.argnames = names.ToArray();
- info.type = AnnotationInfo.AnnotationType.LoopInvariant;
- annotationInfo.Add(name, info);
- // get file and line info from havoc, if there is...
- if (header.Cmds.Count > 0)
- {
- PredicateCmd bif = header.Cmds[0] as PredicateCmd;
- if (bif != null)
- {
- string foo = QKeyValue.FindStringAttribute(bif.Attributes, "sourcefile");
- if (foo != null)
- info.filename = foo;
- int bar = QKeyValue.FindIntAttribute(bif.Attributes, "sourceline", -1);
- if (bar != -1)
- info.lineno = bar;
- }
- }
- var thing = header;
- foreach (Cmd c in header.Cmds)
- {
- newCmds.Add(c);
- }
- header.Cmds = newCmds;
- }
-
-#if true
- public void AnnotateProcRequires(Procedure proc, Implementation impl, ProverContext ctxt)
- {
- Contract.Requires(impl != null);
-
- CurrentLocalVariables = impl.LocVars;
-
- // collect the variables needed in the invariant
- List<Expr> exprs = new List<Expr>();
- List<Variable> vars = new List<Variable>();
- List<string> names = new List<string>();
-
- foreach (Variable v in program.GlobalVariables)
- {
- vars.Add(v);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- names.Add(v.Name);
- }
- foreach (Variable v in proc.InParams)
- {
- Contract.Assert(v != null);
- vars.Add(v);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- names.Add(v.Name);
- }
- string name = impl.Name + "_precond";
- TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
- Contract.Assert(ti != null);
- Formal returnVar = new Formal(Token.NoToken, ti, false);
- Contract.Assert(returnVar != null);
- var function = new Function(Token.NoToken, name, vars, returnVar);
- ctxt.DeclareFunction(function, "");
-
- Expr invarExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
-
- proc.Requires.Add(new Requires(Token.NoToken, false, invarExpr, "", null));
-
- var info = new AnnotationInfo();
- info.filename = proc.tok.filename;
- info.lineno = proc.Line;
- info.argnames = names.ToArray();
- info.type = AnnotationInfo.AnnotationType.LoopInvariant;
- annotationInfo.Add(name, info);
- }
-
- public void AnnotateProcEnsures(Procedure proc, Implementation impl, ProverContext ctxt)
- {
- Contract.Requires(impl != null);
-
- CurrentLocalVariables = impl.LocVars;
-
- // collect the variables needed in the invariant
- List<Expr> exprs = new List<Expr>();
- List<Variable> vars = new List<Variable>();
- List<string> names = new List<string>();
-
- foreach (Variable v in program.GlobalVariables)
- {
- vars.Add(v);
- exprs.Add(new OldExpr(Token.NoToken,new IdentifierExpr(Token.NoToken, v)));
- names.Add(v.Name);
- }
- foreach (Variable v in proc.InParams)
- {
- Contract.Assert(v != null);
- vars.Add(v);
- exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
- names.Add(v.Name);
- }
- foreach (IdentifierExpr ie in proc.Modifies)
- {
- if (ie.Decl == null)
- continue;
- vars.Add(ie.Decl);
- exprs.Add(ie);
- names.Add(ie.Decl.Name + "_out");
- }
- foreach (Variable v in proc.OutParams)
- {
- Contract.Assert(v != null);
- vars.Add(v);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- names.Add(v.Name);
- }
- string name = impl.Name + "_summary";
- summaries.Add(name, true);
- TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
- Contract.Assert(ti != null);
- Formal returnVar = new Formal(Token.NoToken, ti, false);
- Contract.Assert(returnVar != null);
- var function = new Function(Token.NoToken, name, vars, returnVar);
- ctxt.DeclareFunction(function, "");
-
- Expr invarExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
-
- proc.Ensures.Add(new Ensures(Token.NoToken, false, invarExpr, "", null));
-
- var info = new AnnotationInfo();
- info.filename = proc.tok.filename;
- info.lineno = proc.Line;
- info.argnames = names.ToArray();
- info.type = AnnotationInfo.AnnotationType.ProcedureSummary;
- annotationInfo.Add(name, info);
- }
-#endif
-
- void MarkAllFunctionImplementationsInline()
- {
- foreach (var func in program.Functions)
- {
- if (func.Body == null && func.DefinitionAxiom != null)
- {
- var def = func.DefinitionAxiom.Expr as QuantifierExpr;
- var bod = def.Body as NAryExpr;
- func.Body = bod.Args[1];
- func.DefinitionAxiom = null;
- }
- if (func.Body != null)
- if (func.FindExprAttribute("inline") == null)
- func.AddAttribute("inline", Expr.Literal(100));
- }
- }
-
- void InlineAll()
- {
- foreach (var impl in program.Implementations)
- {
- impl.OriginalBlocks = impl.Blocks;
- impl.OriginalLocVars = impl.LocVars;
- if(impl.Name != main_proc_name)
- if(impl.FindExprAttribute("inline") == null)
- impl.AddAttribute("inline", Expr.Literal(100));
- }
- foreach (var impl in program.Implementations)
- {
- if (!impl.SkipVerification)
- {
- Inliner.ProcessImplementation(program, impl);
- }
- }
- foreach (var impl in program.Implementations)
- {
- impl.OriginalBlocks = null;
- impl.OriginalLocVars = null;
- }
- }
-
- public class LazyInliningInfo
- {
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(impl != null);
- Contract.Invariant(function != null);
- Contract.Invariant(controlFlowVariable != null);
- Contract.Invariant(assertExpr != null);
- Contract.Invariant(cce.NonNullElements(interfaceVars));
- Contract.Invariant(incarnationOriginMap == null || cce.NonNullDictionaryAndValues(incarnationOriginMap));
- }
-
- public Implementation impl;
- public int uniqueId;
- public Function function;
- public Variable controlFlowVariable;
- public List<Variable> interfaceVars;
- public List<List<Variable>> interfaceVarCopies;
- public Expr assertExpr;
- public VCExpr vcexpr;
- public List<VCExprVar> privateVars;
- public Dictionary<Incarnation, Absy> incarnationOriginMap;
- public Hashtable /*Variable->Expr*/ exitIncarnationMap;
- public Hashtable /*GotoCmd->returnCmd*/ gotoCmdOrigins;
- public Dictionary<int, Absy> label2absy;
- public VC.ModelViewInfo mvInfo;
-
- public Dictionary<Block, VCExprVar> reachVars;
- public List<VCExprLetBinding> reachVarBindings;
- public Variable inputErrorVariable;
- public Variable outputErrorVariable;
-
-
-
- public LazyInliningInfo(Implementation impl, Program program, ProverContext ctxt, int uniqueId, GlobalVariable errorVariable)
- {
- Contract.Requires(impl != null);
- Contract.Requires(program != null);
- Procedure proc = cce.NonNull(impl.Proc);
-
- this.impl = impl;
- this.uniqueId = uniqueId;
- this.controlFlowVariable = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "cfc", Microsoft.Boogie.Type.Int));
- impl.LocVars.Add(controlFlowVariable);
-
- List<Variable> interfaceVars = new List<Variable>();
- Expr assertExpr = new LiteralExpr(Token.NoToken, true);
- Contract.Assert(assertExpr != null);
- foreach (Variable v in program.GlobalVariables)
- {
- Contract.Assert(v != null);
- interfaceVars.Add(v);
- if (v.Name == "error")
- inputErrorVariable = v;
- }
- // InParams must be obtained from impl and not proc
- foreach (Variable v in impl.InParams)
- {
- Contract.Assert(v != null);
- interfaceVars.Add(v);
- }
- // OutParams must be obtained from impl and not proc
- foreach (Variable v in impl.OutParams)
- {
- Contract.Assert(v != null);
- Constant c = new Constant(Token.NoToken,
- new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
- interfaceVars.Add(c);
- Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
- assertExpr = Expr.And(assertExpr, eqExpr);
- }
- if (errorVariable != null)
- {
- proc.Modifies.Add(new IdentifierExpr(Token.NoToken, errorVariable));
- }
- foreach (IdentifierExpr e in proc.Modifies)
- {
- Contract.Assert(e != null);
- if (e.Decl == null)
- continue;
- Variable v = e.Decl;
- Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
- interfaceVars.Add(c);
- if (v.Name == "error")
- {
- outputErrorVariable = c;
- continue;
- }
- Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
- assertExpr = Expr.And(assertExpr, eqExpr);
- }
-
- this.interfaceVars = interfaceVars;
- this.assertExpr = Expr.Not(assertExpr);
- List<Variable> functionInterfaceVars = new List<Variable>();
- foreach (Variable v in interfaceVars)
- {
- Contract.Assert(v != null);
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, v.Name, v.TypedIdent.Type), true));
- }
- TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
- Contract.Assert(ti != null);
- Formal returnVar = new Formal(Token.NoToken, ti, false);
- Contract.Assert(returnVar != null);
- this.function = new Function(Token.NoToken, proc.Name, functionInterfaceVars, returnVar);
- ctxt.DeclareFunction(this.function, "");
-
- interfaceVarCopies = new List<List<Variable>>();
- int temp = 0;
- for (int i = 0; i < /* CommandLineOptions.Clo.ProcedureCopyBound */ 0; i++)
- {
- interfaceVarCopies.Add(new List<Variable>());
- foreach (Variable v in interfaceVars)
- {
- Constant constant = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, v.Name + temp++, v.TypedIdent.Type));
- interfaceVarCopies[i].Add(constant);
- //program.AddTopLevelDeclaration(constant);
- }
- }
- }
- }
-
- public class StratifiedInliningInfo : LazyInliningInfo
- {
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(cce.NonNullElements(privateVars));
- Contract.Invariant(cce.NonNullElements(interfaceExprVars));
- Contract.Invariant(cce.NonNullElements(interfaceExprVars));
- }
-
- // public StratifiedVCGenBase vcgen;
- //public Implementation impl;
- //public Program program;
- //public ProverContext ctxt;
- //public int uniqueid;
- //public Function function;
- //public Variable controlFlowVariable;
- //public Expr assertExpr;
- //public VCExpr vcexpr;
- //public List<VCExprVar> interfaceExprVars;
- //public List<VCExprVar> privateExprVars;
- //public Dictionary<int, Absy> label2absy;
- //public VC.ModelViewInfo mvInfo;
- //public Dictionary<Block, List<CallSite>> callSites;
- //public Dictionary<Block, List<CallSite>> recordProcCallSites;
- //public IEnumerable<Block> sortedBlocks;
- //public bool initialized { get; private set; }
-
-
- public List<VCExprVar> interfaceExprVars;
- // public List<VCExprVar> privateVars;
- public VCExpr funcExpr;
- public VCExpr falseExpr;
- public RPFP.Transformer F;
- public RPFP.Node node;
- public RPFP.Edge edge;
- public bool isMain = false;
- public Dictionary<Absy, string> label2absyInv;
- public ProverContext ctxt;
- public Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
- public List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
-
- public StratifiedInliningInfo(Implementation _impl, Program _program, ProverContext _ctxt, int _uniqueid)
- : base(_impl,_program,_ctxt,_uniqueid,null){
- Contract.Requires(_impl != null);
- Contract.Requires(_program != null);
- privateVars = new List<VCExprVar>();
- interfaceExprVars = new List<VCExprVar>();
- ctxt = _ctxt;
- }
-
- }
-
- protected override void addExitAssert(string implName, Block exitBlock)
- {
- if (implName2StratifiedInliningInfo != null
- && implName2StratifiedInliningInfo.ContainsKey(implName)
- && !implName2StratifiedInliningInfo[implName].isMain)
- {
- if (mode == Mode.Boogie) return;
- Expr assertExpr = implName2StratifiedInliningInfo[implName].assertExpr;
- Contract.Assert(assertExpr != null);
- exitBlock.Cmds.Add(new AssertCmd(Token.NoToken, assertExpr));
- }
- }
-
-#if false
- protected override void storeIncarnationMaps(string implName, Hashtable exitIncarnationMap)
- {
- if (implName2StratifiedInliningInfo != null && implName2StratifiedInliningInfo.ContainsKey(implName))
- {
- StratifiedInliningInfo info = implName2StratifiedInliningInfo[implName];
- Contract.Assert(info != null);
- info.exitIncarnationMap = exitIncarnationMap;
- info.incarnationOriginMap = this.incarnationOriginMap;
- }
- }
-#endif
-
- public void GenerateVCsForStratifiedInlining()
- {
- Contract.Requires(program != null);
- foreach (var impl in program.Implementations)
- {
- Contract.Assert(!impl.Name.StartsWith(recordProcName), "Not allowed to have an implementation for this guy");
-
- Procedure proc = cce.NonNull(impl.Proc);
-
- {
- StratifiedInliningInfo info = new StratifiedInliningInfo(impl, program, boogieContext, QuantifierExpr.GetNextSkolemId());
- implName2StratifiedInliningInfo[impl.Name] = info;
- // We don't need controlFlowVariable for stratified Inlining
- //impl.LocVars.Add(info.controlFlowVariable);
- List<Expr> exprs = new List<Expr>();
-
- if (mode != Mode.Boogie && QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
- {
- proc.Ensures.Add(new Ensures(Token.NoToken, true, Microsoft.Boogie.Expr.False, "", null));
- info.assertExpr = Microsoft.Boogie.Expr.False;
- // info.isMain = true;
- }
- else if (mode == Mode.Corral || proc.FindExprAttribute("inline") != null || proc is LoopProcedure)
- {
- foreach (Variable v in program.GlobalVariables)
- {
- Contract.Assert(v != null);
- exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
- }
- foreach (Variable v in proc.InParams)
- {
- Contract.Assert(v != null);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- foreach (Variable v in proc.OutParams)
- {
- Contract.Assert(v != null);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- foreach (IdentifierExpr ie in proc.Modifies)
- {
- Contract.Assert(ie != null);
- if (ie.Decl == null)
- continue;
- exprs.Add(ie);
- }
- Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(info.function), exprs);
-#if true
- if(mode == Mode.Corral || mode == Mode.OldCorral)
- proc.Ensures.Add(new Ensures(Token.NoToken, true, freePostExpr, "", new QKeyValue(Token.NoToken, "si_fcall", new List<object>(), null)));
-#endif
- }
- else // not marked "inline" must be main
- {
- Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(info.function), exprs);
- info.isMain = true;
- }
- }
- }
-
- if (mode == Mode.Boogie) return;
-
- foreach (var proc in program.Procedures)
- {
- if (!proc.Name.StartsWith(recordProcName)) continue;
- Contract.Assert(proc.InParams.Count == 1);
-
- // Make a new function
- TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
- Contract.Assert(ti != null);
- Formal returnVar = new Formal(Token.NoToken, ti, false);
- Contract.Assert(returnVar != null);
-
- // Get record type
- var argtype = proc.InParams[0].TypedIdent.Type;
-
- var ins = new List<Variable>();
- ins.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "x", argtype), true));
-
- var recordFunc = new Function(Token.NoToken, proc.Name, ins, returnVar);
- boogieContext.DeclareFunction(recordFunc, "");
-
- var exprs = new List<Expr>();
- exprs.Add(new IdentifierExpr(Token.NoToken, proc.InParams[0]));
-
- Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(recordFunc), exprs);
- proc.Ensures.Add(new Ensures(true, freePostExpr));
- }
- }
-
- private void FixedPointToSpecs(){
-
- if(mode != Mode.Corral || CommandLineOptions.Clo.PrintFixedPoint == null)
- return; // not implemented for other annotation modes yet
-
- var twr = new TokenTextWriter(CommandLineOptions.Clo.PrintFixedPoint, /*pretty=*/ false);
- Dictionary<string, RPFP.Node> pmap = new Dictionary<string,RPFP.Node> ();
-
- foreach (var node in rpfp.nodes)
- pmap.Add ((node.Name as VCExprBoogieFunctionOp).Func.Name, node);
-
- foreach (var impl in program.Implementations)
- {
- Contract.Assert(!impl.Name.StartsWith(recordProcName), "Not allowed to have an implementation for this guy");
-
- Procedure proc = cce.NonNull(impl.Proc);
-
- {
- StratifiedInliningInfo info = new StratifiedInliningInfo(impl, program, boogieContext, QuantifierExpr.GetNextSkolemId());
- implName2StratifiedInliningInfo[impl.Name] = info;
- // We don't need controlFlowVariable for stratified Inlining
- //impl.LocVars.Add(info.controlFlowVariable);
- List<Expr> exprs = new List<Expr>();
-
- {
- if (pmap.ContainsKey(impl.Name))
- {
- RPFP.Node node = pmap[impl.Name];
- var annot = node.Annotation;
- EmitProcSpec(twr, proc, info, annot);
- }
- }
- }
- }
- twr.Close ();
- }
-
- private void EmitProcSpec(TokenTextWriter twr, Procedure proc, StratifiedInliningInfo info, RPFP.Transformer annot)
- {
- // last ensures clause will be the symbolic one
- if (!info.isMain)
- {
- var ens = proc.Ensures[proc.Ensures.Count - 1];
- if (ens.Condition != Expr.False) // this is main
- {
- var postExpr = ens.Condition as NAryExpr;
- var args = postExpr.Args;
-
- var ind = annot.IndParams;
- var bound = new Dictionary<VCExpr, Expr>();
- for (int i = 0; i < args.Count; i++)
- {
- bound[ind[i]] = args[i];
- }
- var new_ens_cond = VCExprToExpr(annot.Formula, bound);
- if (new_ens_cond != Expr.True)
- {
- var new_ens = new Ensures(false, new_ens_cond);
- var enslist = new List<Ensures>();
- enslist.Add(new_ens);
- var new_proc = new Procedure(proc.tok, proc.Name, proc.TypeParameters, proc.InParams,
- proc.OutParams, new List<Requires>(), new List<IdentifierExpr>(), enslist);
- new_proc.Emit(twr, 0);
- }
- }
- }
- }
-
- static int ConjectureFileCounter = 0;
-
- private void ConjecturesToSpecs()
- {
-
- if (mode != Mode.Corral || CommandLineOptions.Clo.PrintConjectures == null)
- return; // not implemented for other annotation modes yet
-
- var twr = new TokenTextWriter(CommandLineOptions.Clo.PrintConjectures + "." + ConjectureFileCounter.ToString(), /*pretty=*/ false);
- ConjectureFileCounter++;
-
- foreach (var c in rpfp.conjectures)
- {
- var name = c.node.Name.GetDeclName();
- if (implName2StratifiedInliningInfo.ContainsKey(name))
- {
- StratifiedInliningInfo info = implName2StratifiedInliningInfo[c.node.Name.GetDeclName()];
- Implementation impl = info.impl;
- Procedure proc = impl.Proc;
- EmitProcSpec(twr, proc, info, c.bound);
- }
- }
-
- twr.Close ();
- }
-
- private Term ExtractSmallerVCsRec(TermDict< Term> memo, Term t, List<Term> small, Term lbl = null)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- var kind = t.GetKind();
- if (kind == TermKind.App)
- {
- var f = t.GetAppDecl();
- if (f.GetKind() == DeclKind.Implies){
- var lhs = t.GetAppArgs()[0];
- if(lhs.GetKind() == TermKind.App){
- var r = lhs.GetAppDecl();
- if (r.GetKind() == DeclKind.And)
- {
- Term q = t.GetAppArgs()[1];
- var lhsargs = lhs.GetAppArgs();
- for (int i = lhsargs.Length-1; i >= 0; --i)
- {
- q = ctx.MkImplies(lhsargs[i], q);
- }
- res = ExtractSmallerVCsRec(memo, q, small,lbl);
- goto done;
- }
- if (r.GetKind() == DeclKind.Label)
- {
- var arg = lhs;
- arg = lhs.GetAppArgs()[0];
- if (!(arg.GetKind() == TermKind.App && arg.GetAppDecl().GetKind() == DeclKind.Uninterpreted))
- goto normal;
- if (!(annotationInfo.ContainsKey(arg.GetAppDecl().GetDeclName()) && annotationInfo[arg.GetAppDecl().GetDeclName()].type == AnnotationInfo.AnnotationType.LoopInvariant))
- goto normal;
- var sm = ctx.MkImplies(lhs, ExtractSmallerVCsRec(memo, t.GetAppArgs()[1], small));
- if (lbl != null)
- sm = ctx.MkImplies(lbl, sm);
- small.Add(sm);
- res = ctx.MkTrue();
- goto done;
- }
- if (r.GetKind() == DeclKind.Uninterpreted)
- {
- var arg = lhs;
- if (!(annotationInfo.ContainsKey(arg.GetAppDecl().GetDeclName()) && annotationInfo[arg.GetAppDecl().GetDeclName()].type == AnnotationInfo.AnnotationType.LoopInvariant))
- goto normal;
- var sm = ctx.MkImplies(lhs,ExtractSmallerVCsRec(memo,t.GetAppArgs()[1],small));
- if (lbl != null)
- sm = ctx.MkImplies(lbl, sm);
- small.Add(sm);
- res = ctx.MkTrue();
- goto done;
- }
- }
- normal:
- Term newlbl = null;
- if (lhs.IsLabel() && lhs.GetAppArgs()[0] == ctx.MkTrue())
- newlbl = lhs;
- res = ctx.MkImplies(lhs,ExtractSmallerVCsRec(memo,t.GetAppArgs()[1],small,newlbl));
- }
- else if (f.GetKind() == DeclKind.And)
- {
- res = ctx.MkApp(f,t.GetAppArgs().Select(x => ExtractSmallerVCsRec(memo, x, small)).ToArray());
- }
- else
- res = t;
- }
- else
- res = t;
- done:
- memo.Add(t, res);
- return res;
- }
-
- private void ExtractSmallerVCs(Term t, List<Term> small){
- TermDict< Term> memo = new TermDict< Term>();
- Term top = ExtractSmallerVCsRec(memo, t, small);
- small.Add(top);
- }
-
- private Dictionary<FuncDecl, int> goalNumbering = new Dictionary<FuncDecl, int>();
-
- private Term NormalizeGoal(Term goal, FuncDecl label)
- {
- var f = goal.GetAppDecl();
- var args = goal.GetAppArgs();
- int number;
- if (!goalNumbering.TryGetValue(f, out number))
- {
- number = goalNumbering.Count;
- goalNumbering.Add(f, number);
- }
- Term[] tvars = new Term[args.Length];
- Term[] eqns = new Term[args.Length];
- AnnotationInfo info = null;
- annotationInfo.TryGetValue(f.GetDeclName(), out info);
- for (int i = 0; i < args.Length; i++)
- {
- string pname = (info == null) ? i.ToString() : info.argnames[i];
- tvars[i] = ctx.MkConst("@a" + number.ToString() + "_" + pname, args[i].GetSort());
- eqns[i] = ctx.MkEq(tvars[i], args[i]);
- }
- return ctx.MkImplies(ctx.MkAnd(eqns), ctx.MkApp(label, ctx.MkApp(f, tvars)));
- }
-
- private Term MergeGoalsRec(TermDict< Term> memo, Term t)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- var kind = t.GetKind();
- if (kind == TermKind.App)
- {
- var f = t.GetAppDecl();
- var args = t.GetAppArgs();
- if (f.GetKind() == DeclKind.Implies)
- {
- res = ctx.MkImplies(args[0], MergeGoalsRec(memo, args[1]));
- goto done;
- }
- else if (f.GetKind() == DeclKind.And)
- {
- args = args.Select(x => MergeGoalsRec(memo, x)).ToArray();
- res = ctx.MkApp(f, args);
- goto done;
- }
- else if (f.GetKind() == DeclKind.Label)
- {
- var arg = t.GetAppArgs()[0];
- var r = arg.GetAppDecl();
- if (r.GetKind() == DeclKind.Uninterpreted)
- {
- res = NormalizeGoal(arg, f);
- goto done;
- }
- }
- }
- res = t;
- done:
- memo.Add(t, res);
- return res;
- }
-
- private Term MergeGoals(Term t)
- {
- TermDict< Term> memo = new TermDict< Term>();
- return MergeGoalsRec(memo, t);
- }
-
- private Term CollectGoalsRec(TermDict< Term> memo, Term t, List<Term> goals, List<Term> cruft)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- var kind = t.GetKind();
- if (kind == TermKind.App)
- {
- var f = t.GetAppDecl();
- if (f.GetKind() == DeclKind.Implies)
- {
- CollectGoalsRec(memo, t.GetAppArgs()[1], goals, cruft);
- goto done;
- }
- else if (f.GetKind() == DeclKind.And)
- {
- foreach (var arg in t.GetAppArgs())
- {
- CollectGoalsRec(memo, arg, goals, cruft);
- }
- goto done;
- }
- else if (f.GetKind() == DeclKind.Label)
- {
- var arg = t.GetAppArgs()[0];
- if (arg.GetKind() == TermKind.App && arg.GetAppDecl().GetKind() == DeclKind.Uninterpreted)
- {
- var r = arg.GetAppDecl();
- if (memo.TryGetValue(arg, out res))
- goto done;
- if (!annotationInfo.ContainsKey(r.GetDeclName()) && !arg.GetAppDecl().GetDeclName().StartsWith("_solve_"))
- goto done;
- goals.Add(arg);
- memo.Add(arg, arg);
- goto done;
- }
- else
- return CollectGoalsRec(memo, arg, goals, cruft);
- }
- else if (f.GetKind() == DeclKind.Uninterpreted)
- {
- string name = f.GetDeclName();
- if (name.StartsWith("_solve_"))
- {
- if (memo.TryGetValue(t, out res))
- goto done;
- goals.Add(t);
- memo.Add(t, t);
- return t;
- }
- }
- }
- // else the goal must be cruft
- cruft.Add(t);
- done:
- res = t; // just to return something
- memo.Add(t, res);
- return res;
- }
-
- private void CollectGoals(Term t, List<Term> goals, List<Term> cruft)
- {
- TermDict< Term> memo = new TermDict< Term>();
- CollectGoalsRec(memo, t.GetAppArgs()[1], goals, cruft);
- }
-
- private Term SubstRec(TermDict< Term> memo, Term t)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- var kind = t.GetKind();
- if (kind == TermKind.App)
- {
- // var f = t.GetAppDecl();
- var args = t.GetAppArgs().Select(x => SubstRec(memo, x)).ToArray();
- res = ctx.CloneApp(t, args);
- }
- else res = t;
- memo.Add(t, res);
- return res;
- }
-
- private Term SubstRecGoals(TermDict< Term> memo, Term t)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- var kind = t.GetKind();
- if (kind == TermKind.App)
- {
- var f = t.GetAppDecl();
- var args = t.GetAppArgs();
- if (f.GetKind() == DeclKind.Implies){
- res = SubstRecGoals(memo, args[1]);
- if (res != ctx.MkTrue())
- res = ctx.MkImplies(args[0],res);
- goto done;
- }
- else if (f.GetKind() == DeclKind.And)
- {
- args = args.Select(x => SubstRecGoals(memo, x)).ToArray();
- args = args.Where(x => x != ctx.MkTrue()).ToArray();
- res = ctx.MkAnd(args);
- goto done;
- }
- else if (f.GetKind() == DeclKind.Label)
- {
- var arg = t.GetAppArgs()[0];
- if (arg.GetKind() == TermKind.App && arg.GetAppDecl().GetKind() == DeclKind.Uninterpreted)
- {
- var r = arg.GetAppDecl();
- if (memo.TryGetValue(arg, out res))
- {
- if(res != ctx.MkTrue())
- res = ctx.MkApp(f, res);
- goto done;
- }
- }
- else
- {
- res = ctx.MkApp(f, SubstRecGoals(memo, arg));
- goto done;
- }
-
- }
- // what's left could be cruft!
- if (memo.TryGetValue(t, out res))
- {
- goto done;
- }
- }
- res = t;
- done:
- memo.Add(t, res);
- return res;
- }
-
- private void FactorVCs(Term t, List<Term> vcs)
- {
- List<Term> small = new List<Term>();
- ExtractSmallerVCs(t, small);
- foreach (var smm in small)
- {
- List<Term> goals = new List<Term>();
- List<Term> cruft = new List<Term>();
- var sm = largeblock ? MergeGoals(smm) : smm;
- CollectGoals(sm, goals,cruft);
- foreach (var goal in goals)
- {
- TermDict< Term> memo = new TermDict< Term>();
- foreach (var othergoal in goals)
- memo.Add(othergoal, othergoal.Equals(goal) ? ctx.MkFalse() : ctx.MkTrue());
- foreach (var thing in cruft)
- memo.Add(thing, ctx.MkTrue());
- var vc = SubstRecGoals(memo, sm);
- vc = ctx.MkImplies(ctx.MkNot(vc), goal);
- vcs.Add(vc);
- }
- {
- TermDict< Term> memo = new TermDict< Term>();
- foreach (var othergoal in goals)
- memo.Add(othergoal, ctx.MkTrue());
- var vc = SubstRecGoals(memo, sm);
- if (vc != ctx.MkTrue())
- {
- vc = ctx.MkImplies(ctx.MkNot(vc), ctx.MkFalse());
- vcs.Add(vc);
- }
- }
- }
- }
-
-
-
- private void GenerateVCForStratifiedInlining(Program program, StratifiedInliningInfo info, Checker checker)
- {
- Contract.Requires(program != null);
- Contract.Requires(info != null);
- Contract.Requires(checker != null);
- Contract.Requires(info.impl != null);
- Contract.Requires(info.impl.Proc != null);
-
-
-
- Implementation impl = info.impl;
- if (mode == Mode.Boogie && style == AnnotationStyle.Flat && impl.Name != main_proc_name)
- return;
- Contract.Assert(impl != null);
- ConvertCFG2DAG(impl,edgesCut);
- VC.ModelViewInfo mvInfo;
- PassifyImpl(impl, out mvInfo);
- Dictionary<int, Absy> label2absy = null;
- VCExpressionGenerator gen = checker.VCExprGen;
- Contract.Assert(gen != null);
- VCExpr vcexpr;
- if(NoLabels){
- // int assertionCount = 0;
- VCExpr startCorrect = null; /* VC.VCGen.LetVC(cce.NonNull(impl.Blocks[0]), null, null, info.blockVariables, info.bindings,
- info.ctxt, out assertionCount); */
- vcexpr = gen.Let(info.bindings, startCorrect);
- }
- else vcexpr = GenerateVC(impl, null /* info.controlFlowVariable */, out label2absy, info.ctxt);
- if(mode != Mode.Boogie)
- vcexpr = gen.Not(vcexpr);
- Contract.Assert(vcexpr != null);
- info.label2absy = label2absy;
- info.mvInfo = mvInfo;
- List<VCExpr> interfaceExprs = new List<VCExpr>();
-
- if (true /* was: !info.isMain */)
- {
- Boogie2VCExprTranslator translator = checker.TheoremProver.Context.BoogieExprTranslator;
- Contract.Assert(translator != null);
- info.privateVars = new List<VCExprVar>();
- foreach (Variable v in impl.LocVars)
- {
- Contract.Assert(v != null);
- info.privateVars.Add(translator.LookupVariable(v));
- }
- foreach (Variable v in impl.OutParams)
- {
- Contract.Assert(v != null);
- info.privateVars.Add(translator.LookupVariable(v));
- }
-
- info.interfaceExprVars = new List<VCExprVar>();
-
- foreach (Variable v in info.interfaceVars)
- {
- Contract.Assert(v != null);
- VCExprVar ev = translator.LookupVariable(v);
- Contract.Assert(ev != null);
- info.interfaceExprVars.Add(ev);
- interfaceExprs.Add(ev);
- }
- }
-
- Function function = cce.NonNull(info.function);
- Contract.Assert(function != null);
- info.funcExpr = gen.Function(function, interfaceExprs);
- info.vcexpr = vcexpr;
-
- if (mode == Mode.Boogie)
- {
- Term z3vc = boogieContext.VCExprToTerm(vcexpr, linOptions);
- FactorVCs(z3vc, DualityVCs);
- }
- else
- {
- // Index the procedures by relational variable
- FuncDecl R = boogieContext.VCExprToTerm(info.funcExpr, linOptions).GetAppDecl();
- relationToProc.Add(R, info);
- info.node = rpfp.CreateNode(boogieContext.VCExprToTerm(info.funcExpr, linOptions));
- rpfp.nodes.Add(info.node);
- if (info.isMain || QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
- info.node.Bound.Formula = ctx.MkFalse();
- }
- }
-
- // This returns a new FuncDel with same sort as top-level function
- // of term t, but with numeric suffix appended to name.
-
- private FuncDecl SuffixFuncDecl(Term t, int n)
- {
- var name = t.GetAppDecl().GetDeclName() + "_" + n.ToString();
- return ctx.MkFuncDecl(name, t.GetAppDecl());
- }
-
- // Collect the relational paremeters
-
- private Term CollectParamsRec(TermDict<Term> memo, Term t, List<FuncDecl> parms, List<RPFP.Node> nodes, Dictionary<Term,Term> done)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- var kind = t.GetKind();
- if (kind == TermKind.App)
- {
- var f = t.GetAppDecl();
- var args = t.GetAppArgs();
- args = args.Select(x => CollectParamsRec(memo, x, parms, nodes, done)).ToArray();
- StratifiedInliningInfo info;
- if (relationToProc.TryGetValue(f, out info))
- {
- if (done.ContainsKey(t))
- res = done[t];
- else
- {
- f = SuffixFuncDecl(t, parms.Count);
- parms.Add(f);
- nodes.Add(info.node);
- res = ctx.MkApp(f, args);
- done.Add(t,res); // don't count same expression twice!
- }
- }
- else
- res = ctx.CloneApp(t, args);
- } // TODO: handle quantifiers
- else res = t;
- memo.Add(t, res);
- return res;
- }
-
- public void GetTransformer(StratifiedInliningInfo info)
- {
- Term vcTerm = boogieContext.VCExprToTerm(info.vcexpr, linOptions);
- Term[] paramTerms = info.interfaceExprVars.Select(x => boogieContext.VCExprToTerm(x, linOptions)).ToArray();
- var relParams = new List<FuncDecl>();
- var nodeParams = new List<RPFP.Node>();
- var memo = new TermDict< Term>();
- var done = new Dictionary<Term,Term>(); // note this hashes on equality, not reference!
- vcTerm = CollectParamsRec(memo, vcTerm, relParams, nodeParams,done);
- // var ops = new Util.ContextOps(ctx);
- // var foo = ops.simplify_lhs(vcTerm);
- // vcTerm = foo.Item1;
- info.F = rpfp.CreateTransformer(relParams.ToArray(), paramTerms, vcTerm);
- info.edge = rpfp.CreateEdge(info.node, info.F, nodeParams.ToArray());
- rpfp.edges.Add(info.edge);
- // TODO labels[info.edge.number] = foo.Item2;
- }
-
- public RPFP.Node GetNodeOfImpl(Implementation/*!*/ impl)
- {
- return implName2StratifiedInliningInfo[impl.Name].node;
- }
-
- public class CyclicLiveVariableAnalysis : Microsoft.Boogie.LiveVariableAnalysis
- {
- public new static void ComputeLiveVariables(Implementation impl)
- {
-
- bool some_change = true;
- List<Block> sortedNodes = new List<Block>();
- foreach (var block in impl.Blocks)
- {
- sortedNodes.Add(block);
- }
- sortedNodes.Reverse();
-
- while (some_change)
- {
- some_change = false;
- foreach (Block/*!*/ block in sortedNodes)
- {
- Contract.Assert(block != null);
- HashSet<Variable/*!*/>/*!*/ liveVarsAfter = new HashSet<Variable/*!*/>();
- if (block.TransferCmd is GotoCmd)
- {
- GotoCmd gotoCmd = (GotoCmd)block.TransferCmd;
- if (gotoCmd.labelTargets != null)
- {
- foreach (Block/*!*/ succ in gotoCmd.labelTargets)
- {
- Contract.Assert(succ != null);
- if (succ.liveVarsBefore != null)
- liveVarsAfter.UnionWith(succ.liveVarsBefore);
- }
- }
- }
-
- List<Cmd> cmds = block.Cmds;
- int len = cmds.Count;
- for (int i = len - 1; i >= 0; i--)
- {
- if (cmds[i] is CallCmd)
- {
- Procedure/*!*/ proc = cce.NonNull(cce.NonNull((CallCmd/*!*/)cmds[i]).Proc);
- if (InterProcGenKill.HasSummary(proc.Name))
- {
- liveVarsAfter =
- InterProcGenKill.PropagateLiveVarsAcrossCall(cce.NonNull((CallCmd/*!*/)cmds[i]), liveVarsAfter);
- continue;
- }
- }
- Propagate(cmds[i], liveVarsAfter);
- }
-
- if (block.liveVarsBefore == null)
- block.liveVarsBefore = new HashSet<Variable>();
- if (!liveVarsAfter.IsSubsetOf(block.liveVarsBefore))
- {
- block.liveVarsBefore = liveVarsAfter;
- some_change = true;
- }
- }
- }
- }
- }
-
- public void Generate()
- {
-
- var oldDagOption = CommandLineOptions.Clo.vcVariety;
- CommandLineOptions.Clo.vcVariety = CommandLineOptions.VCVariety.Dag;
-
- // MarkAllFunctionImplementationsInline(); // This is for SMACK, which goes crazy with functions
-
- // Run live variable analysis (TODO: should this be here?)
-#if false
- if (CommandLineOptions.Clo.LiveVariableAnalysis == 2)
- {
- Microsoft.Boogie.InterProcGenKill.ComputeLiveVars(impl, program);
- }
-#endif
-
- #region In Boogie mode, annotate the program
- if (mode == Mode.Boogie)
- {
-
- // find the name of the main procedure
- main_proc_name = null; // default in case no entry point defined
- foreach (var impl in program.Implementations)
- {
- if (QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
- main_proc_name = impl.Proc.Name;
- }
- if (main_proc_name == null)
- {
- foreach (var impl in program.Implementations)
- {
- if (impl.Proc.Name == "main" || impl.Proc.Name.EndsWith(".main"))
- main_proc_name = impl.Proc.Name;
- }
- }
- if (main_proc_name == null)
- main_proc_name = "main";
-
- if (style == AnnotationStyle.Flat)
- {
- InlineAll();
- Microsoft.Boogie.BlockCoalescer.CoalesceBlocks(program);
- foreach (var impl in program.Implementations)
- {
- if (main_proc_name == impl.Proc.Name)
- {
- Microsoft.Boogie.LiveVariableAnalysis.ClearLiveVariables(impl);
- CyclicLiveVariableAnalysis.ComputeLiveVariables(impl);
- AnnotateLoops(impl, boogieContext);
- }
- }
- }
- else
- {
-
- if (style == AnnotationStyle.Procedure || style == AnnotationStyle.Call)
- {
- foreach (var impl in program.Implementations)
- {
- if (!QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
- AnnotateProcRequires(impl.Proc, impl, boogieContext);
- AnnotateProcEnsures(impl.Proc, impl, boogieContext);
- }
- if (style == AnnotationStyle.Call)
- {
-
- }
- }
-
- // must do this after annotating procedures, else calls
- // will be prematurely desugared
-
- foreach (var impl in program.Implementations)
- {
- Microsoft.Boogie.LiveVariableAnalysis.ClearLiveVariables(impl);
- CyclicLiveVariableAnalysis.ComputeLiveVariables(impl);
- }
-
-
- if (style == AnnotationStyle.Flat || style == AnnotationStyle.Call)
- {
- foreach (var impl in program.Implementations)
- {
- AnnotateLoops(impl, boogieContext);
- }
- }
- if (style == AnnotationStyle.Call)
- {
- Dictionary<string, bool> impls = new Dictionary<string, bool>();
- foreach (var impl in program.Implementations)
- {
- impls.Add(impl.Proc.Name, true);
- }
- foreach (var impl in program.Implementations)
- {
- AnnotateCallSites(impl, boogieContext, impls);
- }
- }
- if (style == AnnotationStyle.Flat)
- InlineAll();
- }
- }
- #endregion
-
- /* Generate the VC's */
- GenerateVCsForStratifiedInlining();
-
- /* Generate the background axioms */
- Term background = ctx.MkTrue(); // TODO boogieContext.VCExprToTerm(boogieContext.Axioms, linOptions);
- rpfp.AssertAxiom(background);
-
- int save_option = CommandLineOptions.Clo.StratifiedInlining; // need this to get funcall labels
- CommandLineOptions.Clo.StratifiedInlining = 1;
-
- /* Create the nodes, indexing procedures by their relational symbols. */
- foreach (StratifiedInliningInfo info in implName2StratifiedInliningInfo.Values)
- GenerateVCForStratifiedInlining(program, info, checker);
-
- CommandLineOptions.Clo.StratifiedInlining = save_option;
-
- if (mode == Mode.Boogie)
- {
- // var ops = new Util.ContextOps(ctx);
- var vcs = DualityVCs;
- DualityVCs = new List<Term>();
- foreach (var vc in vcs)
- {
- // var foo = ops.simplify_lhs(vc.GetAppArgs()[0]);
- var foo = vc.GetAppArgs()[0];
- if (!foo.IsFalse())
- DualityVCs.Add(ctx.MkImplies(foo, vc.GetAppArgs()[1]));
- }
-
- rpfp.FromClauses(DualityVCs.ToArray());
- // TODO rpfp.HornClauses = style == AnnotationStyle.Flat;
- }
- else
- {
- /* Generate the edges. */
- foreach (StratifiedInliningInfo info in implName2StratifiedInliningInfo.Values)
- GetTransformer(info);
- }
-
- // save some information for debugging purposes
- // TODO rpfp.ls.SetAnnotationInfo(annotationInfo);
-
- CommandLineOptions.Clo.vcVariety = oldDagOption;
- }
-
-
- private class ErrorHandler : ProverInterface.ErrorHandler
- {
- //TODO: anything we need to handle?
- }
-
- Dictionary<int, Dictionary<string, string>> varSubst = null;
-
- /** Check the RPFP, and return a counterexample if there is one. */
-
- public RPFP.LBool Check(ref RPFP.Node cexroot)
- {
- var start = DateTime.Now;
-
- ErrorHandler handler = new ErrorHandler();
- RPFP.Node cex;
- varSubst = new Dictionary<int,Dictionary<string,string>>();
-
-#if false
- int origRecursionBound = CommandLineOptions.Clo.RecursionBound;
- if (CommandLineOptions.Clo.RecursionBound > 0 && extraRecBound != null)
- {
- int maxExtra = 0;
- foreach (string s in extraRecBound.Keys)
- {
- int extra = extraRecBound[s];
- if (extra > maxExtra) maxExtra = extra;
- }
- CommandLineOptions.Clo.RecursionBound += maxExtra;
- }
-#endif
-
- ProverInterface.Outcome outcome =
- checker.TheoremProver.CheckRPFP("name", rpfp, handler, out cex, varSubst, extraRecBound);
- cexroot = cex;
-
-#if false
- CommandLineOptions.Clo.RecursionBound = origRecursionBound;
-#endif
-
- Console.WriteLine("solve: {0}s", (DateTime.Now - start).TotalSeconds);
-
- switch(outcome)
- {
- case ProverInterface.Outcome.Valid:
- return RPFP.LBool.False;
- case ProverInterface.Outcome.Invalid:
- return RPFP.LBool.True;
- default:
- return RPFP.LBool.Undef;
- }
- }
-
- private bool generated = false;
-
- static private Object thisLock = new Object();
-
- public override VC.VCGen.Outcome VerifyImplementation(Implementation impl, VerifierCallback collector)
- {
-
- lock (thisLock)
- {
- Procedure proc = impl.Proc;
-
- // we verify all the impls at once, so we need to execute only once
- // TODO: make sure needToCheck is true only once
- bool needToCheck = false;
- if (mode == Mode.OldCorral)
- needToCheck = proc.FindExprAttribute("inline") == null && !(proc is LoopProcedure);
- else if (mode == Mode.Corral || mode == Mode.Boogie)
- needToCheck = QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint") && !(proc is LoopProcedure);
- else
- needToCheck = impl.Name == main_proc_name;
-
- if (needToCheck)
- {
-
- var start = DateTime.Now;
-
- if (!generated)
- {
- Generate();
- Console.WriteLine("generate: {0}s", (DateTime.Now - start).TotalSeconds);
- generated = true;
- }
-
-
- Console.WriteLine("Verifying {0}...", impl.Name);
-
- RPFP.Node cexroot = null;
- // start = DateTime.Now;
- var checkres = Check(ref cexroot);
- Console.WriteLine("check: {0}s", (DateTime.Now - start).TotalSeconds);
- switch (checkres)
- {
- case RPFP.LBool.True:
- Console.WriteLine("Counterexample found.\n");
- // start = DateTime.Now;
- Counterexample cex = CreateBoogieCounterExample(cexroot.owner, cexroot, impl);
- // cexroot.owner.DisposeDualModel();
- // cex.Print(0); // just for testing
- collector.OnCounterexample(cex, "assertion failure");
- Console.WriteLine("cex: {0}s", (DateTime.Now - start).TotalSeconds);
- ConjecturesToSpecs();
- return VC.ConditionGeneration.Outcome.Errors;
- case RPFP.LBool.False:
- Console.WriteLine("Procedure is correct.");
- FixedPointToSpecs();
- ConjecturesToSpecs();
- return Outcome.Correct;
- case RPFP.LBool.Undef:
- Console.WriteLine("Inconclusive result.");
- ConjecturesToSpecs();
- return Outcome.ReachedBound;
- }
-
- }
-
- return Outcome.Inconclusive;
- }
- }
-
- public void FindLabelsRec(HashSet<Term> memo, Term t, Dictionary<string, Term> res)
- {
- if (memo.Contains(t))
- return;
- if (t.IsLabel())
- {
- string l = t.LabelName();
- if (!res.ContainsKey(l))
- res.Add(l, t.GetAppArgs()[0]);
- }
- if (t.GetKind() == TermKind.App)
- {
- var args = t.GetAppArgs();
- foreach (var a in args)
- FindLabelsRec(memo, a, res);
- } // TODO: handle quantifiers
-
- memo.Add(t);
- }
-
- public void FindLabels()
- {
- labels = new Dictionary<string, Term>();
- foreach(var e in rpfp.edges){
- int id = e.number;
- HashSet<Term> memo = new HashSet<Term>(ReferenceComparer<Term>.Instance);
- FindLabelsRec(memo, e.F.Formula, labels);
- }
- }
-
- public string CodeLabel(Absy code, StratifiedInliningInfo info, string prefix)
- {
- if (info.label2absyInv == null)
- {
- info.label2absyInv = new Dictionary<Absy, string>();
- foreach (int foo in info.label2absy.Keys)
- {
- Absy bar = info.label2absy[foo] as Absy;
- string lbl = foo.ToString();
- info.label2absyInv.Add(bar, lbl);
- }
- }
- if (info.label2absyInv.ContainsKey(code))
- {
- string label = info.label2absyInv[code];
- return prefix+label;
- }
- return null;
- }
-
- public Term CodeLabeledExpr(RPFP rpfp, RPFP.Node root, Absy code, StratifiedInliningInfo info, string prefix)
- {
- string label = CodeLabel(code, info, prefix);
-
- if (label != null)
- {
- var res = labels[label];
- return res;
- }
- else return null;
- }
-
- public class LabelNotFound : Exception { };
-
- public bool CodeLabelTrue(RPFP rpfp, RPFP.Node root, Absy code, StratifiedInliningInfo info, string prefix)
- {
- string label = CodeLabel(code, info, prefix);
-
- if (label == null)
- throw new LabelNotFound();
- return root.Outgoing.labels.Contains(label);
- }
-
- public bool CodeLabelFalse(RPFP rpfp, RPFP.Node root, Absy code, StratifiedInliningInfo info, string prefix)
- {
- return CodeLabelTrue(rpfp, root, code, info, prefix);
- }
-
-
- private class StateId
- {
- public RPFP.Edge edge;
- public int capturePoint;
- public StratifiedInliningInfo info;
- public StateId(RPFP.Edge e, int c, StratifiedInliningInfo i)
- {
- edge = e;
- capturePoint = c;
- info = i;
- }
- }
-
-
- public Counterexample CreateBoogieCounterExample(RPFP rpfp, RPFP.Node root, Implementation mainImpl)
- {
- FindLabels();
- var orderedStateIds = new List<StateId>();
- Counterexample newCounterexample =
- GenerateTrace(rpfp, root, orderedStateIds, mainImpl,true);
- if (CommandLineOptions.Clo.ModelViewFile != null)
- {
- Model m = root.owner.GetBackgroundModel();
- GetModelWithStates(m, root, implName2StratifiedInliningInfo[mainImpl.Name],
- orderedStateIds, varSubst);
- newCounterexample.Model = m;
- newCounterexample.ModelHasStatesAlready = true;
- }
- return newCounterexample;
- }
-
-
-
- private Counterexample GenerateTrace(RPFP rpfp, RPFP.Node root,
- List<StateId> orderedStateIds, Implementation procImpl, bool toplevel)
- {
- Contract.Requires(procImpl != null);
-
- Contract.Assert(!rpfp.Empty(root));
-
-
- var info = implName2StratifiedInliningInfo[procImpl.Name];
- Block entryBlock = cce.NonNull(procImpl.Blocks[0]);
- Contract.Assert(entryBlock != null);
-
- List<Block> trace = new List<Block>();
- trace.Add(entryBlock);
-
- var calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
-
- Counterexample newCounterexample =
- GenerateTraceRec(rpfp, root, orderedStateIds, entryBlock, trace, calleeCounterexamples, info, toplevel);
-
- return newCounterexample;
- }
-
- // TODO: this is a bit cheesy. Rather than finding the argument position
- // of a relational term in a transformer by linear search, better to index this
- // somewhere, but where?
- private int TransformerArgPosition(RPFP rpfp, RPFP.Node root, Term expr)
- {
- FuncDecl rel = expr.GetAppDecl();
- string relname = rel.GetDeclName();
- var rps = root.Outgoing.F.RelParams;
- for (int i = 0; i < rps.Length; i++)
- {
- string thisname = rps[i].GetDeclName();
- if (thisname == relname)
- return i;
- }
- return -1;
- }
-
- private bool EvalToFalse(RPFP rpfp, RPFP.Node root, Term expr,StratifiedInliningInfo info){
- Term res = rpfp.Eval(root.Outgoing,expr);
- return res.Equals(ctx.MkTrue());
- }
-
- private Counterexample GenerateTraceRec(
- RPFP rpfp, RPFP.Node root,
- List<StateId> orderedStateIds,
- Block/*!*/ b, List<Block>/*!*/ trace,
- Dictionary<TraceLocation/*!*/, CalleeCounterexampleInfo/*!*/>/*!*/ calleeCounterexamples,
- StratifiedInliningInfo info,
- bool toplevel)
- {
- Contract.Requires(b != null);
- Contract.Requires(trace != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(calleeCounterexamples));
-
- Stack<RPFP.Node> continuation_stack = new Stack<RPFP.Node>();
-
- // If our block is not present, try diving into precondition
- // and push a continuation.
- // TODO: is the precondition always the first child?
- while (!CodeLabelFalse(rpfp, root, b, info, "+"))
- {
- if (root.Outgoing != null && root.Outgoing.Children.Length > 0)
- {
- continuation_stack.Push(root);
- root = root.Outgoing.Children[0];
- }
- else
- {
- // can't find our block
- Contract.Assert(false);
- return null;
- }
- }
-
- // After translation, all potential errors come from asserts.
- while (true)
- {
-
-
- List<Cmd> cmds = b.Cmds;
- TransferCmd transferCmd = cce.NonNull(b.TransferCmd);
- for (int i = 0; i < cmds.Count; i++)
- {
- Cmd cmd = cce.NonNull(cmds[i]);
-
- // Skip if 'cmd' not contained in the trace or not an assert
- if (cmd is AssertCmd)
- {
- bool is_failed_assertion = false;
- if (NoLabels)
- is_failed_assertion = true; // we assume only assertions on
- else
- is_failed_assertion = CodeLabelTrue(rpfp, root, cmd, info, "@");
-
- if (is_failed_assertion)
- {
- if (continuation_stack.Count == 0)
- {
- Counterexample newCounterexample =
- AssertCmdToCounterexample((AssertCmd)cmd, transferCmd, trace, new Microsoft.Boogie.Model(), info.mvInfo,
- boogieContext);
- newCounterexample.AddCalleeCounterexample(calleeCounterexamples);
- return newCounterexample;
- }
- root = continuation_stack.Pop();
- }
- continue;
- }
-
- // Counterexample generation for inlined procedures
- AssumeCmd assumeCmd = cmd as AssumeCmd;
- if (assumeCmd == null)
- continue;
- NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
- if (naryExpr == null)
- continue;
- string calleeName = naryExpr.Fun.FunctionName;
- Contract.Assert(calleeName != null);
-
- // what is this crap???
- BinaryOperator binOp = naryExpr.Fun as BinaryOperator;
- if (binOp != null && binOp.Op == BinaryOperator.Opcode.And)
- {
- Expr expr = naryExpr.Args[0];
- NAryExpr mvStateExpr = expr as NAryExpr;
- if (mvStateExpr != null && mvStateExpr.Fun.FunctionName == VC.ModelViewInfo.MVState_FunctionDef.Name)
- {
- LiteralExpr x = mvStateExpr.Args[1] as LiteralExpr;
- // Debug.Assert(x != null);
- int foo = x.asBigNum.ToInt;
- orderedStateIds.Add(new StateId(root.Outgoing,foo,info));
- }
- }
-
- if (calleeName.EndsWith("_summary"))
- calleeName = calleeName.Substring(0, calleeName.Length - 8);
-
- if (!implName2StratifiedInliningInfo.ContainsKey(calleeName) && !calleeName.EndsWith("_summary"))
- continue;
-
- {
- Term code = CodeLabeledExpr(rpfp, root, cmd, info, "+si_fcall_");
- int pos = TransformerArgPosition(rpfp, root, code);
- if (pos >= 0)
- {
- RPFP.Node callee = root.Outgoing.Children[pos];
- orderedStateIds.Add(new StateId(callee.Outgoing, CALL,info));
- calleeCounterexamples[new TraceLocation(trace.Count - 1, i)] =
- new CalleeCounterexampleInfo(
- cce.NonNull(GenerateTrace(rpfp, callee, orderedStateIds,
- implName2StratifiedInliningInfo[calleeName].impl, false)),
- new List<object>());
- orderedStateIds.Add(new StateId(root.Outgoing, RETURN,info));
- }
- }
- }
-
- GotoCmd gotoCmd = transferCmd as GotoCmd;
- List<Block> cuts = null;
- if (edgesCut.ContainsKey(b))
- cuts = edgesCut[b];
- b = null;
-
- if (gotoCmd != null)
- {
-
- foreach (Block bb in cce.NonNull(gotoCmd.labelTargets))
- {
- Contract.Assert(bb != null);
- if (CodeLabelFalse(rpfp, root, bb, info, "+"))
- {
- trace.Add(bb);
- b = bb;
- break;
- }
- }
- if (b != null) continue;
- }
- // HACK: we have to try edges that were cut in generating the VC
-
- if (cuts != null)
- foreach (var bb in cuts)
- {
- if (CodeLabelFalse(rpfp, root, bb, info, "+"))
- {
- trace.Add(bb);
- b = bb;
- break;
- }
- }
- if (b != null) continue;
-
- return null;
- }
-
-
- }
-
- public override Counterexample extractLoopTrace(Counterexample cex, string mainProcName, Program program, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
- {
- // Construct the set of inlined procs in the original program
- var inlinedProcs = new HashSet<string>();
- foreach (var decl in program.TopLevelDeclarations)
- {
- // Implementations
- if (decl is Implementation)
- {
- var impl = decl as Implementation;
- if (!(impl.Proc is LoopProcedure))
- {
- inlinedProcs.Add(impl.Name);
- }
- }
-
- // And recording procedures
- if (decl is Procedure)
- {
- var proc = decl as Procedure;
- if (proc.Name.StartsWith(recordProcName))
- {
- // Debug.Assert(!(decl is LoopProcedure));
- inlinedProcs.Add(proc.Name);
- }
- }
- }
- return extractLoopTraceRec(
- new CalleeCounterexampleInfo(cex, new List<object>()),
- mainProcName, inlinedProcs, extractLoopMappingInfo).counterexample;
- }
-
- protected override bool elIsLoop(string procname)
- {
- StratifiedInliningInfo info = null;
- if (implName2StratifiedInliningInfo.ContainsKey(procname))
- {
- info = implName2StratifiedInliningInfo[procname];
- }
-
- if (info == null) return false;
-
- var lp = info.impl.Proc as LoopProcedure;
-
- if (lp == null) return false;
- return true;
- }
-
- private void NumberCexEdges(RPFP.Node node, Dictionary<int,RPFP.Edge> map)
- {
- if (node.Outgoing == null)
- return; // shouldn't happen
- RPFP.Edge edge = node.Outgoing;
- map[edge.number] = edge;
- foreach (var c in edge.Children)
- NumberCexEdges(c, map);
- }
-
- private void GetModelWithStates(Model m, RPFP.Node cex, StratifiedInliningInfo mainInfo,
- List<StateId> orderedStateIds,
- Dictionary<int,Dictionary<string,string>> varSubst)
- {
- if (m == null) return;
- var mvInfo = mainInfo.mvInfo;
-
-
- foreach (Variable v in mvInfo.AllVariables)
- {
- m.InitialState.AddBinding(v.Name, GetModelValue(m, v, varSubst[cex.Outgoing.number]));
- }
-
- Dictionary<int, RPFP.Edge> edgeNumbering = new Dictionary<int,RPFP.Edge>();
- NumberCexEdges(cex, edgeNumbering);
-
- int lastCandidate = 0;
- int lastCapturePoint = CALL;
- for (int i = 0; i < orderedStateIds.Count; ++i)
- {
- var s = orderedStateIds[i];
- RPFP.Edge edge = s.edge;
- int candidate = edge.number;
- int capturePoint = s.capturePoint;
- Dictionary<string, string> subst = varSubst[candidate];
-
- string implName = edge.Parent.Name.GetDeclName();
- var info = s.info.mvInfo;
-
- if (capturePoint == CALL || capturePoint == RETURN)
- {
- lastCandidate = candidate;
- lastCapturePoint = capturePoint;
- continue;
- }
-
- Contract.Assume(0 <= capturePoint && capturePoint < info.CapturePoints.Count);
- VC.ModelViewInfo.Mapping map = info.CapturePoints[capturePoint];
- var prevInc = (lastCapturePoint != CALL && lastCapturePoint != RETURN && candidate == lastCandidate)
- ? info.CapturePoints[lastCapturePoint].IncarnationMap : new Dictionary<Variable, Expr>();
- var cs = m.MkState(map.Description);
-
- foreach (Variable v in info.AllVariables)
- {
- var e = (Expr)map.IncarnationMap[v];
-
- if (e == null)
- {
- if (lastCapturePoint == CALL || lastCapturePoint == RETURN)
- {
- cs.AddBinding(v.Name, GetModelValue(m, v, subst));
- }
- continue;
- }
-
- if (lastCapturePoint != CALL && lastCapturePoint != RETURN && prevInc[v] == e) continue; // skip unchanged variables
-
- Model.Element elt;
- if (e is IdentifierExpr)
- {
- IdentifierExpr ide = (IdentifierExpr)e;
- elt = GetModelValue(m, ide.Decl, subst);
- }
- else if (e is LiteralExpr)
- {
- LiteralExpr lit = (LiteralExpr)e;
- elt = m.MkElement(lit.Val.ToString());
- }
- else
- {
- Contract.Assume(false);
- elt = m.MkFunc(e.ToString(), 0).GetConstant();
- }
- cs.AddBinding(v.Name, elt);
- }
-
- lastCandidate = candidate;
- lastCapturePoint = capturePoint;
- }
-
- return;
- }
-
-
- public readonly static int CALL = -1;
- public readonly static int RETURN = -2;
-
- private Model.Element GetModelValue(Model m, Variable v, Dictionary<string,string> subst)
- {
- // first, get the unique name
- string uniqueName;
-
- VCExprVar vvar = boogieContext.BoogieExprTranslator.TryLookupVariable(v);
-
- uniqueName = v.Name;
-
- if(subst.ContainsKey(uniqueName))
- return m.MkElement(subst[uniqueName]);
- return m.MkFunc("@undefined", 0).GetConstant();
- }
-
- class InternalError : Exception {
- }
-
-
- private BinaryOperator.Opcode VCOpToOp (VCExprOp op)
- {
- if (op == VCExpressionGenerator.AddIOp)
- return BinaryOperator.Opcode.Add;
- if (op == VCExpressionGenerator.SubIOp)
- return BinaryOperator.Opcode.Sub;
- if (op == VCExpressionGenerator.MulIOp)
- return BinaryOperator.Opcode.Mul;
- if (op == VCExpressionGenerator.DivIOp)
- return BinaryOperator.Opcode.Div;
- if (op == VCExpressionGenerator.EqOp)
- return BinaryOperator.Opcode.Eq;
- if (op == VCExpressionGenerator.LeOp)
- return BinaryOperator.Opcode.Le;
- if (op == VCExpressionGenerator.LtOp)
- return BinaryOperator.Opcode.Lt;
- if (op == VCExpressionGenerator.GeOp)
- return BinaryOperator.Opcode.Ge;
- if (op == VCExpressionGenerator.GtOp)
- return BinaryOperator.Opcode.Gt;
- if (op == VCExpressionGenerator.AndOp)
- return BinaryOperator.Opcode.And;
- if (op == VCExpressionGenerator.OrOp)
- return BinaryOperator.Opcode.Or;
- throw new InternalError();
- }
-
- private Expr MakeBinary (BinaryOperator.Opcode op, List<Expr> args)
- {
- if(args.Count == 0){
- // with zero args we need the identity of the op
- switch(op){
- case BinaryOperator.Opcode.And:
- return Expr.True;
- case BinaryOperator.Opcode.Or:
- return Expr.False;
- case BinaryOperator.Opcode.Add:
- return new LiteralExpr(Token.NoToken,Microsoft.Basetypes.BigNum.ZERO);
- default:
- throw new InternalError();
- }
- }
- var temp = args[0];
- for(int i = 1; i < args.Count; i++)
- temp = Expr.Binary(Token.NoToken,op,temp,args[i]);
- return temp;
- }
-
- private Variable MakeVar(VCExprVar v){
- var foo = new TypedIdent(Token.NoToken,v.Name.ToString(),v.Type);
- return new BoundVariable(Token.NoToken,foo);
- }
-
- private Expr VCExprToExpr (VCExpr e, Dictionary<VCExpr,Expr> bound)
- {
- if (e is VCExprVar) {
- if(bound.ContainsKey(e))
- return bound[e];
- return Expr.Ident(MakeVar(e as VCExprVar)); // TODO: this isn't right
- }
- if (e is VCExprIntLit) {
- var n = e as VCExprIntLit;
- return new LiteralExpr(Token.NoToken,n.Val);
- }
- if (e is VCExprNAry) {
- var f = e as VCExprNAry;
- var args = new List<Expr>();
- for(int i = 0; i < f.Arity; i++){
- args.Add (VCExprToExpr (f[i],bound));
- }
-
- if(f.Op == VCExpressionGenerator.NotOp)
- return Expr.Unary(Token.NoToken, UnaryOperator.Opcode.Not, args[0]);
-
- if(f.Op == VCExpressionGenerator.IfThenElseOp)
- return new NAryExpr(Token.NoToken,new IfThenElse(Token.NoToken),args);
-
- if(f.Op is VCExprSelectOp){
- var idx = new List<Expr>();
- idx.Add(args[1]);
- return Expr.Select(args[0],idx);
- }
-
- if(f.Op is VCExprStoreOp){
- var idx = new List<Expr>();
- idx.Add(args[1]);
- return Expr.Store(args[0],idx,args[2]);
- }
-
- var op = VCOpToOp (f.Op);
- return MakeBinary(op,args);
- }
-
- if(e is VCExprQuantifier) {
- var f = e as VCExprQuantifier;
- var vs = new List<Variable>();
- var new_bound = new Dictionary<VCExpr,Expr>(bound);
- foreach(var v in f.BoundVars){
- var ve = MakeVar(v);
- vs.Add(ve);
- new_bound.Add (v,Expr.Ident (ve));
- }
- var bd = VCExprToExpr(f.Body,new_bound);
- if(f.Quan == Quantifier.EX)
- return new ExistsExpr(Token.NoToken,vs,bd);
- else
- return new ForallExpr(Token.NoToken,vs,bd);
- }
- if (e == VCExpressionGenerator.True) {
- return Expr.True;
- }
- if (e == VCExpressionGenerator.False) {
- return Expr.False;
- }
- if (e is VCExprLet) {
-
- }
-
- throw new InternalError();
- }
-
-
- }
-
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2012 Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie;
+using Microsoft.Boogie.VCExprAST;
+
+
+using Term = Microsoft.Boogie.VCExprAST.VCExpr;
+using FuncDecl = Microsoft.Boogie.VCExprAST.VCExprOp;
+using Sort = Microsoft.Boogie.Type;
+using Microsoft.Boogie.ExprExtensions;
+
+
+namespace Microsoft.Boogie
+{
+ public class FixedpointVC : VC.VCGen
+ {
+
+ public class AnnotationInfo
+ {
+ public enum AnnotationType { LoopInvariant, ProcedureSummary };
+ public string filename;
+ public int lineno;
+ public string[] argnames;
+ public AnnotationType type;
+ };
+
+ static bool NoLabels = false;
+
+ // options
+ bool largeblock = false;
+
+ public bool SetOption(string option, string value)
+ {
+ if (option == "LargeBlock")
+ {
+ largeblock = true;
+ return true;
+ }
+ return false;
+ }
+
+ Context ctx;
+ RPFP rpfp;
+ // Program program;
+ Microsoft.Boogie.ProverContext boogieContext;
+ Microsoft.Boogie.VCExpressionGenerator gen;
+ public readonly static string recordProcName = "boogie_si_record"; // TODO: this really needed?
+ private Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo
+ = new Dictionary<string, StratifiedInliningInfo>();
+ Checker checker;
+ // Microsoft.Boogie.Z3.Z3InstanceOptions options = new Microsoft.Boogie.Z3.Z3InstanceOptions(); // TODO: what?
+ LineariserOptions linOptions;
+ Dictionary<FuncDecl, StratifiedInliningInfo> relationToProc = new Dictionary<FuncDecl, StratifiedInliningInfo>();
+ Dictionary<string, Term> labels = new Dictionary<string, Term> ();
+ List<Term> DualityVCs = new List<Term>();
+ Dictionary<string, bool> summaries = new Dictionary<string, bool>();
+ Dictionary<Block, List<Block>> edgesCut = new Dictionary<Block, List<Block>>();
+ string main_proc_name = "main";
+ Dictionary<string, int> extraRecBound = null;
+
+
+ public enum Mode { Corral, OldCorral, Boogie};
+ public enum AnnotationStyle { Flat, Procedure, Call };
+
+ Mode mode;
+ AnnotationStyle style;
+
+ private static Checker old_checker = null;
+
+ public static void CleanUp()
+ {
+ if (old_checker != null)
+ {
+ old_checker.Close();
+ old_checker = null;
+ }
+ }
+
+ public FixedpointVC( Program _program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers, Dictionary<string,int> _extraRecBound = null)
+ : base(_program, logFilePath, appendLogFile, checkers)
+ {
+ switch (CommandLineOptions.Clo.FixedPointMode)
+ {
+ case CommandLineOptions.FixedPointInferenceMode.Corral:
+ mode = Mode.Corral;
+ style = AnnotationStyle.Procedure;
+ break;
+ case CommandLineOptions.FixedPointInferenceMode.OldCorral:
+ mode = Mode.OldCorral;
+ style = AnnotationStyle.Procedure;
+ break;
+ case CommandLineOptions.FixedPointInferenceMode.Flat:
+ mode = Mode.Boogie;
+ style = AnnotationStyle.Flat;
+ break;
+ case CommandLineOptions.FixedPointInferenceMode.Procedure:
+ mode = Mode.Boogie;
+ style = AnnotationStyle.Procedure;
+ break;
+ case CommandLineOptions.FixedPointInferenceMode.Call:
+ mode = Mode.Boogie;
+ style = AnnotationStyle.Call;
+ break;
+ }
+ ctx = new Context(); // TODO is this right?
+ rpfp = new RPFP(RPFP.CreateLogicSolver(ctx));
+ program = _program;
+ gen = ctx;
+ if(old_checker == null)
+ checker = new Checker(this, program, logFilePath, appendLogFile, CommandLineOptions.Clo.ProverKillTime, null);
+ else {
+ checker = old_checker;
+ checker.RetargetWithoutReset(program,checker.TheoremProver.Context);
+ }
+ old_checker = checker;
+ boogieContext = checker.TheoremProver.Context;
+ linOptions = null; // new Microsoft.Boogie.Z3.Z3LineariserOptions(false, options, new List<VCExprVar>());
+ extraRecBound = _extraRecBound;
+ }
+
+ Dictionary<string, AnnotationInfo> annotationInfo = new Dictionary<string, AnnotationInfo>();
+
+ public void AnnotateLoops(Implementation impl, ProverContext ctxt)
+ {
+ Contract.Requires(impl != null);
+
+ CurrentLocalVariables = impl.LocVars;
+ variable2SequenceNumber = new Dictionary<Variable, int>();
+ incarnationOriginMap = new Dictionary<Incarnation, Absy>();
+
+ ResetPredecessors(impl.Blocks);
+
+ #region Create the graph by adding the source node and each edge
+ GraphUtil.Graph<Block> g = Program.GraphFromImpl(impl);
+ #endregion
+
+ //Graph<Block> g = program.ProcessLoops(impl);
+
+ g.ComputeLoops(); // this is the call that does all of the processing
+ if (!g.Reducible)
+ {
+ throw new System.Exception("Irreducible flow graphs are unsupported.");
+ }
+
+ #region add a symbolic annoation to every loop head
+ foreach (Block header in cce.NonNull(g.Headers))
+ AnnotateBlock(impl, ctxt, header);
+ #endregion
+ }
+
+ private void AnnotateCallSites(Implementation impl, ProverContext ctxt, Dictionary<string, bool> impls){
+ foreach (var b in impl.Blocks)
+ {
+ foreach (var cmd in b.Cmds)
+ {
+ if (cmd is CallCmd)
+ {
+ string name = (cmd as CallCmd).callee;
+ if(impls.ContainsKey(name))
+ goto annotate;
+ }
+ }
+ continue;
+ annotate:
+ AnnotateBlock(impl, ctxt, b);
+ }
+ }
+
+
+ private void AnnotateBlock(Implementation impl, ProverContext ctxt, Block header)
+ {
+ Contract.Assert(header != null);
+
+ string name = impl.Name + "_" + header.Label + "_invar";
+ if (annotationInfo.ContainsKey(name))
+ return;
+
+ // collect the variables needed in the invariant
+ List<Expr> exprs = new List<Expr>();
+ List<Variable> vars = new List<Variable>();
+ List<string> names = new List<string>();
+
+ if (style == AnnotationStyle.Flat)
+ {
+ // in flat mode, all live globals should be in live set
+#if false
+ foreach (Variable v in program.GlobalVariables)
+ {
+ vars.Add(v);
+ names.Add(v.ToString());
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+#endif
+ foreach (Variable v in /* impl.LocVars */ header.liveVarsBefore)
+ {
+ if (!(v is BoundVariable))
+ {
+ vars.Add(v);
+ names.Add(v.ToString());
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ }
+ }
+ else
+ {
+ foreach (Variable v in program.GlobalVariables)
+ {
+ vars.Add(v);
+ names.Add("@old_" + v.ToString());
+ exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
+ }
+ foreach (IdentifierExpr ie in impl.Proc.Modifies)
+ {
+ if (ie.Decl == null)
+ continue;
+ vars.Add(ie.Decl);
+ names.Add(ie.Decl.ToString());
+ exprs.Add(ie);
+ }
+ foreach (Variable v in impl.Proc.InParams)
+ {
+ Contract.Assert(v != null);
+ vars.Add(v);
+ names.Add("@old_" + v.ToString());
+ exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
+ }
+ foreach (Variable v in impl.LocVars)
+ {
+ vars.Add(v);
+ names.Add(v.ToString());
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ }
+
+ TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
+ Contract.Assert(ti != null);
+ Formal returnVar = new Formal(Token.NoToken, ti, false);
+ Contract.Assert(returnVar != null);
+ var function = new Function(Token.NoToken, name, vars, returnVar);
+ ctxt.DeclareFunction(function, "");
+
+ Expr invarExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
+ var invarAssertion = new AssertCmd(Token.NoToken, invarExpr);
+ List<Cmd> newCmds = new List<Cmd>();
+ newCmds.Add(invarAssertion);
+
+ // make a record in annotationInfo;
+ var info = new AnnotationInfo();
+ info.filename = header.tok.filename;
+ info.lineno = header.Line;
+ info.argnames = names.ToArray();
+ info.type = AnnotationInfo.AnnotationType.LoopInvariant;
+ annotationInfo.Add(name, info);
+ // get file and line info from havoc, if there is...
+ if (header.Cmds.Count > 0)
+ {
+ PredicateCmd bif = header.Cmds[0] as PredicateCmd;
+ if (bif != null)
+ {
+ string foo = QKeyValue.FindStringAttribute(bif.Attributes, "sourcefile");
+ if (foo != null)
+ info.filename = foo;
+ int bar = QKeyValue.FindIntAttribute(bif.Attributes, "sourceline", -1);
+ if (bar != -1)
+ info.lineno = bar;
+ }
+ }
+ var thing = header;
+ foreach (Cmd c in header.Cmds)
+ {
+ newCmds.Add(c);
+ }
+ header.Cmds = newCmds;
+ }
+
+#if true
+ public void AnnotateProcRequires(Procedure proc, Implementation impl, ProverContext ctxt)
+ {
+ Contract.Requires(impl != null);
+
+ CurrentLocalVariables = impl.LocVars;
+
+ // collect the variables needed in the invariant
+ List<Expr> exprs = new List<Expr>();
+ List<Variable> vars = new List<Variable>();
+ List<string> names = new List<string>();
+
+ foreach (Variable v in program.GlobalVariables)
+ {
+ vars.Add(v);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ names.Add(v.Name);
+ }
+ foreach (Variable v in proc.InParams)
+ {
+ Contract.Assert(v != null);
+ vars.Add(v);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ names.Add(v.Name);
+ }
+ string name = impl.Name + "_precond";
+ TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
+ Contract.Assert(ti != null);
+ Formal returnVar = new Formal(Token.NoToken, ti, false);
+ Contract.Assert(returnVar != null);
+ var function = new Function(Token.NoToken, name, vars, returnVar);
+ ctxt.DeclareFunction(function, "");
+
+ Expr invarExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
+
+ proc.Requires.Add(new Requires(Token.NoToken, false, invarExpr, "", null));
+
+ var info = new AnnotationInfo();
+ info.filename = proc.tok.filename;
+ info.lineno = proc.Line;
+ info.argnames = names.ToArray();
+ info.type = AnnotationInfo.AnnotationType.LoopInvariant;
+ annotationInfo.Add(name, info);
+ }
+
+ public void AnnotateProcEnsures(Procedure proc, Implementation impl, ProverContext ctxt)
+ {
+ Contract.Requires(impl != null);
+
+ CurrentLocalVariables = impl.LocVars;
+
+ // collect the variables needed in the invariant
+ List<Expr> exprs = new List<Expr>();
+ List<Variable> vars = new List<Variable>();
+ List<string> names = new List<string>();
+
+ foreach (Variable v in program.GlobalVariables)
+ {
+ vars.Add(v);
+ exprs.Add(new OldExpr(Token.NoToken,new IdentifierExpr(Token.NoToken, v)));
+ names.Add(v.Name);
+ }
+ foreach (Variable v in proc.InParams)
+ {
+ Contract.Assert(v != null);
+ vars.Add(v);
+ exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
+ names.Add(v.Name);
+ }
+ foreach (IdentifierExpr ie in proc.Modifies)
+ {
+ if (ie.Decl == null)
+ continue;
+ vars.Add(ie.Decl);
+ exprs.Add(ie);
+ names.Add(ie.Decl.Name + "_out");
+ }
+ foreach (Variable v in proc.OutParams)
+ {
+ Contract.Assert(v != null);
+ vars.Add(v);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ names.Add(v.Name);
+ }
+ string name = impl.Name + "_summary";
+ summaries.Add(name, true);
+ TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
+ Contract.Assert(ti != null);
+ Formal returnVar = new Formal(Token.NoToken, ti, false);
+ Contract.Assert(returnVar != null);
+ var function = new Function(Token.NoToken, name, vars, returnVar);
+ ctxt.DeclareFunction(function, "");
+
+ Expr invarExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
+
+ proc.Ensures.Add(new Ensures(Token.NoToken, false, invarExpr, "", null));
+
+ var info = new AnnotationInfo();
+ info.filename = proc.tok.filename;
+ info.lineno = proc.Line;
+ info.argnames = names.ToArray();
+ info.type = AnnotationInfo.AnnotationType.ProcedureSummary;
+ annotationInfo.Add(name, info);
+ }
+#endif
+
+ void MarkAllFunctionImplementationsInline()
+ {
+ foreach (var func in program.Functions)
+ {
+ if (func.Body == null && func.DefinitionAxiom != null)
+ {
+ var def = func.DefinitionAxiom.Expr as QuantifierExpr;
+ var bod = def.Body as NAryExpr;
+ func.Body = bod.Args[1];
+ func.DefinitionAxiom = null;
+ }
+ if (func.Body != null)
+ if (func.FindExprAttribute("inline") == null)
+ func.AddAttribute("inline", Expr.Literal(100));
+ }
+ }
+
+ void InlineAll()
+ {
+ foreach (var impl in program.Implementations)
+ {
+ impl.OriginalBlocks = impl.Blocks;
+ impl.OriginalLocVars = impl.LocVars;
+ if(impl.Name != main_proc_name)
+ if(impl.FindExprAttribute("inline") == null)
+ impl.AddAttribute("inline", Expr.Literal(100));
+ }
+ foreach (var impl in program.Implementations)
+ {
+ if (!impl.SkipVerification)
+ {
+ Inliner.ProcessImplementation(program, impl);
+ }
+ }
+ foreach (var impl in program.Implementations)
+ {
+ impl.OriginalBlocks = null;
+ impl.OriginalLocVars = null;
+ }
+ }
+
+ public class LazyInliningInfo
+ {
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(impl != null);
+ Contract.Invariant(function != null);
+ Contract.Invariant(controlFlowVariable != null);
+ Contract.Invariant(assertExpr != null);
+ Contract.Invariant(cce.NonNullElements(interfaceVars));
+ Contract.Invariant(incarnationOriginMap == null || cce.NonNullDictionaryAndValues(incarnationOriginMap));
+ }
+
+ public Implementation impl;
+ public int uniqueId;
+ public Function function;
+ public Variable controlFlowVariable;
+ public List<Variable> interfaceVars;
+ public List<List<Variable>> interfaceVarCopies;
+ public Expr assertExpr;
+ public VCExpr vcexpr;
+ public List<VCExprVar> privateVars;
+ public Dictionary<Incarnation, Absy> incarnationOriginMap;
+ public Hashtable /*Variable->Expr*/ exitIncarnationMap;
+ public Hashtable /*GotoCmd->returnCmd*/ gotoCmdOrigins;
+ public Dictionary<int, Absy> label2absy;
+ public VC.ModelViewInfo mvInfo;
+
+ public Dictionary<Block, VCExprVar> reachVars;
+ public List<VCExprLetBinding> reachVarBindings;
+ public Variable inputErrorVariable;
+ public Variable outputErrorVariable;
+
+
+
+ public LazyInliningInfo(Implementation impl, Program program, ProverContext ctxt, int uniqueId, GlobalVariable errorVariable)
+ {
+ Contract.Requires(impl != null);
+ Contract.Requires(program != null);
+ Procedure proc = cce.NonNull(impl.Proc);
+
+ this.impl = impl;
+ this.uniqueId = uniqueId;
+ this.controlFlowVariable = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "cfc", Microsoft.Boogie.Type.Int));
+ impl.LocVars.Add(controlFlowVariable);
+
+ List<Variable> interfaceVars = new List<Variable>();
+ Expr assertExpr = new LiteralExpr(Token.NoToken, true);
+ Contract.Assert(assertExpr != null);
+ // InParams must be obtained from impl and not proc
+ foreach (Variable v in impl.InParams)
+ {
+ Contract.Assert(v != null);
+ interfaceVars.Add(v);
+ }
+ // OutParams must be obtained from impl and not proc
+ foreach (Variable v in impl.OutParams)
+ {
+ Contract.Assert(v != null);
+ Constant c = new Constant(Token.NoToken,
+ new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
+ interfaceVars.Add(c);
+ Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
+ assertExpr = Expr.And(assertExpr, eqExpr);
+ }
+ foreach (Variable v in program.GlobalVariables)
+ {
+ Contract.Assert(v != null);
+ interfaceVars.Add(v);
+ if (v.Name == "error")
+ inputErrorVariable = v;
+ }
+ if (errorVariable != null)
+ {
+ proc.Modifies.Add(new IdentifierExpr(Token.NoToken, errorVariable));
+ }
+ foreach (IdentifierExpr e in proc.Modifies)
+ {
+ Contract.Assert(e != null);
+ if (e.Decl == null)
+ continue;
+ Variable v = e.Decl;
+ Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
+ interfaceVars.Add(c);
+ if (v.Name == "error")
+ {
+ outputErrorVariable = c;
+ continue;
+ }
+ Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
+ assertExpr = Expr.And(assertExpr, eqExpr);
+ }
+
+ this.interfaceVars = interfaceVars;
+ this.assertExpr = Expr.Not(assertExpr);
+ List<Variable> functionInterfaceVars = new List<Variable>();
+ foreach (Variable v in interfaceVars)
+ {
+ Contract.Assert(v != null);
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, v.Name, v.TypedIdent.Type), true));
+ }
+ TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
+ Contract.Assert(ti != null);
+ Formal returnVar = new Formal(Token.NoToken, ti, false);
+ Contract.Assert(returnVar != null);
+ this.function = new Function(Token.NoToken, proc.Name, functionInterfaceVars, returnVar);
+ ctxt.DeclareFunction(this.function, "");
+
+ interfaceVarCopies = new List<List<Variable>>();
+ int temp = 0;
+ for (int i = 0; i < /* CommandLineOptions.Clo.ProcedureCopyBound */ 0; i++)
+ {
+ interfaceVarCopies.Add(new List<Variable>());
+ foreach (Variable v in interfaceVars)
+ {
+ Constant constant = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, v.Name + temp++, v.TypedIdent.Type));
+ interfaceVarCopies[i].Add(constant);
+ //program.AddTopLevelDeclaration(constant);
+ }
+ }
+ }
+ }
+
+ public class StratifiedInliningInfo : LazyInliningInfo
+ {
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(cce.NonNullElements(privateVars));
+ Contract.Invariant(cce.NonNullElements(interfaceExprVars));
+ Contract.Invariant(cce.NonNullElements(interfaceExprVars));
+ }
+
+ // public StratifiedVCGenBase vcgen;
+ //public Implementation impl;
+ //public Program program;
+ //public ProverContext ctxt;
+ //public int uniqueid;
+ //public Function function;
+ //public Variable controlFlowVariable;
+ //public Expr assertExpr;
+ //public VCExpr vcexpr;
+ //public List<VCExprVar> interfaceExprVars;
+ //public List<VCExprVar> privateExprVars;
+ //public Dictionary<int, Absy> label2absy;
+ //public VC.ModelViewInfo mvInfo;
+ //public Dictionary<Block, List<CallSite>> callSites;
+ //public Dictionary<Block, List<CallSite>> recordProcCallSites;
+ //public IEnumerable<Block> sortedBlocks;
+ //public bool initialized { get; private set; }
+
+
+ public List<VCExprVar> interfaceExprVars;
+ // public List<VCExprVar> privateVars;
+ public VCExpr funcExpr;
+ public VCExpr falseExpr;
+ public RPFP.Transformer F;
+ public RPFP.Node node;
+ public RPFP.Edge edge;
+ public bool isMain = false;
+ public Dictionary<Absy, string> label2absyInv;
+ public ProverContext ctxt;
+ public Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
+ public List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
+
+ public StratifiedInliningInfo(Implementation _impl, Program _program, ProverContext _ctxt, int _uniqueid)
+ : base(_impl,_program,_ctxt,_uniqueid,null){
+ Contract.Requires(_impl != null);
+ Contract.Requires(_program != null);
+ privateVars = new List<VCExprVar>();
+ interfaceExprVars = new List<VCExprVar>();
+ ctxt = _ctxt;
+ }
+
+ }
+
+ protected override void addExitAssert(string implName, Block exitBlock)
+ {
+ if (implName2StratifiedInliningInfo != null
+ && implName2StratifiedInliningInfo.ContainsKey(implName)
+ && !implName2StratifiedInliningInfo[implName].isMain)
+ {
+ if (mode == Mode.Boogie) return;
+ Expr assertExpr = implName2StratifiedInliningInfo[implName].assertExpr;
+ Contract.Assert(assertExpr != null);
+ exitBlock.Cmds.Add(new AssertCmd(Token.NoToken, assertExpr));
+ }
+ }
+
+#if false
+ protected override void storeIncarnationMaps(string implName, Hashtable exitIncarnationMap)
+ {
+ if (implName2StratifiedInliningInfo != null && implName2StratifiedInliningInfo.ContainsKey(implName))
+ {
+ StratifiedInliningInfo info = implName2StratifiedInliningInfo[implName];
+ Contract.Assert(info != null);
+ info.exitIncarnationMap = exitIncarnationMap;
+ info.incarnationOriginMap = this.incarnationOriginMap;
+ }
+ }
+#endif
+
+ public void GenerateVCsForStratifiedInlining()
+ {
+ Contract.Requires(program != null);
+ foreach (var impl in program.Implementations)
+ {
+ Contract.Assert(!impl.Name.StartsWith(recordProcName), "Not allowed to have an implementation for this guy");
+
+ Procedure proc = cce.NonNull(impl.Proc);
+
+ {
+ StratifiedInliningInfo info = new StratifiedInliningInfo(impl, program, boogieContext, QuantifierExpr.GetNextSkolemId());
+ implName2StratifiedInliningInfo[impl.Name] = info;
+ // We don't need controlFlowVariable for stratified Inlining
+ //impl.LocVars.Add(info.controlFlowVariable);
+ List<Expr> exprs = new List<Expr>();
+
+ if (mode != Mode.Boogie && QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
+ {
+ proc.Ensures.Add(new Ensures(Token.NoToken, true, Microsoft.Boogie.Expr.False, "", null));
+ info.assertExpr = Microsoft.Boogie.Expr.False;
+ // info.isMain = true;
+ }
+ else if (mode == Mode.Corral || proc.FindExprAttribute("inline") != null || proc is LoopProcedure)
+ {
+ foreach (Variable v in proc.InParams)
+ {
+ Contract.Assert(v != null);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ foreach (Variable v in proc.OutParams)
+ {
+ Contract.Assert(v != null);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ foreach (Variable v in program.GlobalVariables)
+ {
+ Contract.Assert(v != null);
+ exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
+ }
+ foreach (IdentifierExpr ie in proc.Modifies)
+ {
+ Contract.Assert(ie != null);
+ if (ie.Decl == null)
+ continue;
+ exprs.Add(ie);
+ }
+ Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(info.function), exprs);
+#if true
+ if(mode == Mode.Corral || mode == Mode.OldCorral)
+ proc.Ensures.Add(new Ensures(Token.NoToken, true, freePostExpr, "", new QKeyValue(Token.NoToken, "si_fcall", new List<object>(), null)));
+#endif
+ }
+ else // not marked "inline" must be main
+ {
+ Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(info.function), exprs);
+ info.isMain = true;
+ }
+ }
+ }
+
+ if (mode == Mode.Boogie) return;
+
+ foreach (var proc in program.Procedures)
+ {
+ if (!proc.Name.StartsWith(recordProcName)) continue;
+ Contract.Assert(proc.InParams.Count == 1);
+
+ // Make a new function
+ TypedIdent ti = new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool);
+ Contract.Assert(ti != null);
+ Formal returnVar = new Formal(Token.NoToken, ti, false);
+ Contract.Assert(returnVar != null);
+
+ // Get record type
+ var argtype = proc.InParams[0].TypedIdent.Type;
+
+ var ins = new List<Variable>();
+ ins.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "x", argtype), true));
+
+ var recordFunc = new Function(Token.NoToken, proc.Name, ins, returnVar);
+ boogieContext.DeclareFunction(recordFunc, "");
+
+ var exprs = new List<Expr>();
+ exprs.Add(new IdentifierExpr(Token.NoToken, proc.InParams[0]));
+
+ Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(recordFunc), exprs);
+ proc.Ensures.Add(new Ensures(true, freePostExpr));
+ }
+ }
+
+ private void FixedPointToSpecs(){
+
+ if(mode != Mode.Corral || CommandLineOptions.Clo.PrintFixedPoint == null)
+ return; // not implemented for other annotation modes yet
+
+ var twr = new TokenTextWriter(CommandLineOptions.Clo.PrintFixedPoint, /*pretty=*/ false);
+ Dictionary<string, RPFP.Node> pmap = new Dictionary<string,RPFP.Node> ();
+
+ foreach (var node in rpfp.nodes)
+ pmap.Add ((node.Name as VCExprBoogieFunctionOp).Func.Name, node);
+
+ foreach (var impl in program.Implementations)
+ {
+ Contract.Assert(!impl.Name.StartsWith(recordProcName), "Not allowed to have an implementation for this guy");
+
+ Procedure proc = cce.NonNull(impl.Proc);
+
+ {
+ StratifiedInliningInfo info = new StratifiedInliningInfo(impl, program, boogieContext, QuantifierExpr.GetNextSkolemId());
+ implName2StratifiedInliningInfo[impl.Name] = info;
+ // We don't need controlFlowVariable for stratified Inlining
+ //impl.LocVars.Add(info.controlFlowVariable);
+ List<Expr> exprs = new List<Expr>();
+
+ {
+ if (pmap.ContainsKey(impl.Name))
+ {
+ RPFP.Node node = pmap[impl.Name];
+ var annot = node.Annotation;
+ EmitProcSpec(twr, proc, info, annot);
+ }
+ }
+ }
+ }
+ twr.Close ();
+ }
+
+ private void EmitProcSpec(TokenTextWriter twr, Procedure proc, StratifiedInliningInfo info, RPFP.Transformer annot)
+ {
+ // last ensures clause will be the symbolic one
+ if (!info.isMain)
+ {
+ var ens = proc.Ensures[proc.Ensures.Count - 1];
+ if (ens.Condition != Expr.False) // this is main
+ {
+ var postExpr = ens.Condition as NAryExpr;
+ var args = postExpr.Args;
+
+ var ind = annot.IndParams;
+ var bound = new Dictionary<VCExpr, Expr>();
+ for (int i = 0; i < args.Count; i++)
+ {
+ bound[ind[i]] = args[i];
+ }
+ var new_ens_cond = VCExprToExpr(annot.Formula, bound);
+ if (new_ens_cond != Expr.True)
+ {
+ var new_ens = new Ensures(false, new_ens_cond);
+ var enslist = new List<Ensures>();
+ enslist.Add(new_ens);
+ var new_proc = new Procedure(proc.tok, proc.Name, proc.TypeParameters, proc.InParams,
+ proc.OutParams, new List<Requires>(), new List<IdentifierExpr>(), enslist);
+ new_proc.Emit(twr, 0);
+ }
+ }
+ }
+ }
+
+ static int ConjectureFileCounter = 0;
+
+ private void ConjecturesToSpecs()
+ {
+
+ if (mode != Mode.Corral || CommandLineOptions.Clo.PrintConjectures == null)
+ return; // not implemented for other annotation modes yet
+
+ var twr = new TokenTextWriter(CommandLineOptions.Clo.PrintConjectures + "." + ConjectureFileCounter.ToString(), /*pretty=*/ false);
+ ConjectureFileCounter++;
+
+ foreach (var c in rpfp.conjectures)
+ {
+ var name = c.node.Name.GetDeclName();
+ if (implName2StratifiedInliningInfo.ContainsKey(name))
+ {
+ StratifiedInliningInfo info = implName2StratifiedInliningInfo[c.node.Name.GetDeclName()];
+ Implementation impl = info.impl;
+ Procedure proc = impl.Proc;
+ EmitProcSpec(twr, proc, info, c.bound);
+ }
+ }
+
+ twr.Close ();
+ }
+
+ private Term ExtractSmallerVCsRec(TermDict< Term> memo, Term t, List<Term> small, Term lbl = null)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ var kind = t.GetKind();
+ if (kind == TermKind.App)
+ {
+ var f = t.GetAppDecl();
+ if (f.GetKind() == DeclKind.Implies){
+ var lhs = t.GetAppArgs()[0];
+ if(lhs.GetKind() == TermKind.App){
+ var r = lhs.GetAppDecl();
+ if (r.GetKind() == DeclKind.And)
+ {
+ Term q = t.GetAppArgs()[1];
+ var lhsargs = lhs.GetAppArgs();
+ for (int i = lhsargs.Length-1; i >= 0; --i)
+ {
+ q = ctx.MkImplies(lhsargs[i], q);
+ }
+ res = ExtractSmallerVCsRec(memo, q, small,lbl);
+ goto done;
+ }
+ if (r.GetKind() == DeclKind.Label)
+ {
+ var arg = lhs;
+ arg = lhs.GetAppArgs()[0];
+ if (!(arg.GetKind() == TermKind.App && arg.GetAppDecl().GetKind() == DeclKind.Uninterpreted))
+ goto normal;
+ if (!(annotationInfo.ContainsKey(arg.GetAppDecl().GetDeclName()) && annotationInfo[arg.GetAppDecl().GetDeclName()].type == AnnotationInfo.AnnotationType.LoopInvariant))
+ goto normal;
+ var sm = ctx.MkImplies(lhs, ExtractSmallerVCsRec(memo, t.GetAppArgs()[1], small));
+ if (lbl != null)
+ sm = ctx.MkImplies(lbl, sm);
+ small.Add(sm);
+ res = ctx.MkTrue();
+ goto done;
+ }
+ if (r.GetKind() == DeclKind.Uninterpreted)
+ {
+ var arg = lhs;
+ if (!(annotationInfo.ContainsKey(arg.GetAppDecl().GetDeclName()) && annotationInfo[arg.GetAppDecl().GetDeclName()].type == AnnotationInfo.AnnotationType.LoopInvariant))
+ goto normal;
+ var sm = ctx.MkImplies(lhs,ExtractSmallerVCsRec(memo,t.GetAppArgs()[1],small));
+ if (lbl != null)
+ sm = ctx.MkImplies(lbl, sm);
+ small.Add(sm);
+ res = ctx.MkTrue();
+ goto done;
+ }
+ }
+ normal:
+ Term newlbl = null;
+ if (lhs.IsLabel() && lhs.GetAppArgs()[0] == ctx.MkTrue())
+ newlbl = lhs;
+ res = ctx.MkImplies(lhs,ExtractSmallerVCsRec(memo,t.GetAppArgs()[1],small,newlbl));
+ }
+ else if (f.GetKind() == DeclKind.And)
+ {
+ res = ctx.MkApp(f,t.GetAppArgs().Select(x => ExtractSmallerVCsRec(memo, x, small)).ToArray());
+ }
+ else
+ res = t;
+ }
+ else
+ res = t;
+ done:
+ memo.Add(t, res);
+ return res;
+ }
+
+ private void ExtractSmallerVCs(Term t, List<Term> small){
+ TermDict< Term> memo = new TermDict< Term>();
+ Term top = ExtractSmallerVCsRec(memo, t, small);
+ small.Add(top);
+ }
+
+ private Dictionary<FuncDecl, int> goalNumbering = new Dictionary<FuncDecl, int>();
+
+ private Term NormalizeGoal(Term goal, FuncDecl label)
+ {
+ var f = goal.GetAppDecl();
+ var args = goal.GetAppArgs();
+ int number;
+ if (!goalNumbering.TryGetValue(f, out number))
+ {
+ number = goalNumbering.Count;
+ goalNumbering.Add(f, number);
+ }
+ Term[] tvars = new Term[args.Length];
+ Term[] eqns = new Term[args.Length];
+ AnnotationInfo info = null;
+ annotationInfo.TryGetValue(f.GetDeclName(), out info);
+ for (int i = 0; i < args.Length; i++)
+ {
+ string pname = (info == null) ? i.ToString() : info.argnames[i];
+ tvars[i] = ctx.MkConst("@a" + number.ToString() + "_" + pname, args[i].GetSort());
+ eqns[i] = ctx.MkEq(tvars[i], args[i]);
+ }
+ return ctx.MkImplies(ctx.MkAnd(eqns), ctx.MkApp(label, ctx.MkApp(f, tvars)));
+ }
+
+ private Term MergeGoalsRec(TermDict< Term> memo, Term t)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ var kind = t.GetKind();
+ if (kind == TermKind.App)
+ {
+ var f = t.GetAppDecl();
+ var args = t.GetAppArgs();
+ if (f.GetKind() == DeclKind.Implies)
+ {
+ res = ctx.MkImplies(args[0], MergeGoalsRec(memo, args[1]));
+ goto done;
+ }
+ else if (f.GetKind() == DeclKind.And)
+ {
+ args = args.Select(x => MergeGoalsRec(memo, x)).ToArray();
+ res = ctx.MkApp(f, args);
+ goto done;
+ }
+ else if (f.GetKind() == DeclKind.Label)
+ {
+ var arg = t.GetAppArgs()[0];
+ var r = arg.GetAppDecl();
+ if (r.GetKind() == DeclKind.Uninterpreted)
+ {
+ res = NormalizeGoal(arg, f);
+ goto done;
+ }
+ }
+ }
+ res = t;
+ done:
+ memo.Add(t, res);
+ return res;
+ }
+
+ private Term MergeGoals(Term t)
+ {
+ TermDict< Term> memo = new TermDict< Term>();
+ return MergeGoalsRec(memo, t);
+ }
+
+ private Term CollectGoalsRec(TermDict< Term> memo, Term t, List<Term> goals, List<Term> cruft)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ var kind = t.GetKind();
+ if (kind == TermKind.App)
+ {
+ var f = t.GetAppDecl();
+ if (f.GetKind() == DeclKind.Implies)
+ {
+ CollectGoalsRec(memo, t.GetAppArgs()[1], goals, cruft);
+ goto done;
+ }
+ else if (f.GetKind() == DeclKind.And)
+ {
+ foreach (var arg in t.GetAppArgs())
+ {
+ CollectGoalsRec(memo, arg, goals, cruft);
+ }
+ goto done;
+ }
+ else if (f.GetKind() == DeclKind.Label)
+ {
+ var arg = t.GetAppArgs()[0];
+ if (arg.GetKind() == TermKind.App && arg.GetAppDecl().GetKind() == DeclKind.Uninterpreted)
+ {
+ var r = arg.GetAppDecl();
+ if (memo.TryGetValue(arg, out res))
+ goto done;
+ if (!annotationInfo.ContainsKey(r.GetDeclName()) && !arg.GetAppDecl().GetDeclName().StartsWith("_solve_"))
+ goto done;
+ goals.Add(arg);
+ memo.Add(arg, arg);
+ goto done;
+ }
+ else
+ return CollectGoalsRec(memo, arg, goals, cruft);
+ }
+ else if (f.GetKind() == DeclKind.Uninterpreted)
+ {
+ string name = f.GetDeclName();
+ if (name.StartsWith("_solve_"))
+ {
+ if (memo.TryGetValue(t, out res))
+ goto done;
+ goals.Add(t);
+ memo.Add(t, t);
+ return t;
+ }
+ }
+ }
+ // else the goal must be cruft
+ cruft.Add(t);
+ done:
+ res = t; // just to return something
+ memo.Add(t, res);
+ return res;
+ }
+
+ private void CollectGoals(Term t, List<Term> goals, List<Term> cruft)
+ {
+ TermDict< Term> memo = new TermDict< Term>();
+ CollectGoalsRec(memo, t.GetAppArgs()[1], goals, cruft);
+ }
+
+ private Term SubstRec(TermDict< Term> memo, Term t)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ var kind = t.GetKind();
+ if (kind == TermKind.App)
+ {
+ // var f = t.GetAppDecl();
+ var args = t.GetAppArgs().Select(x => SubstRec(memo, x)).ToArray();
+ res = ctx.CloneApp(t, args);
+ }
+ else res = t;
+ memo.Add(t, res);
+ return res;
+ }
+
+ private Term SubstRecGoals(TermDict< Term> memo, Term t)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ var kind = t.GetKind();
+ if (kind == TermKind.App)
+ {
+ var f = t.GetAppDecl();
+ var args = t.GetAppArgs();
+ if (f.GetKind() == DeclKind.Implies){
+ res = SubstRecGoals(memo, args[1]);
+ if (res != ctx.MkTrue())
+ res = ctx.MkImplies(args[0],res);
+ goto done;
+ }
+ else if (f.GetKind() == DeclKind.And)
+ {
+ args = args.Select(x => SubstRecGoals(memo, x)).ToArray();
+ args = args.Where(x => x != ctx.MkTrue()).ToArray();
+ res = ctx.MkAnd(args);
+ goto done;
+ }
+ else if (f.GetKind() == DeclKind.Label)
+ {
+ var arg = t.GetAppArgs()[0];
+ if (arg.GetKind() == TermKind.App && arg.GetAppDecl().GetKind() == DeclKind.Uninterpreted)
+ {
+ var r = arg.GetAppDecl();
+ if (memo.TryGetValue(arg, out res))
+ {
+ if(res != ctx.MkTrue())
+ res = ctx.MkApp(f, res);
+ goto done;
+ }
+ }
+ else
+ {
+ res = ctx.MkApp(f, SubstRecGoals(memo, arg));
+ goto done;
+ }
+
+ }
+ // what's left could be cruft!
+ if (memo.TryGetValue(t, out res))
+ {
+ goto done;
+ }
+ }
+ res = t;
+ done:
+ memo.Add(t, res);
+ return res;
+ }
+
+ private void FactorVCs(Term t, List<Term> vcs)
+ {
+ List<Term> small = new List<Term>();
+ ExtractSmallerVCs(t, small);
+ foreach (var smm in small)
+ {
+ List<Term> goals = new List<Term>();
+ List<Term> cruft = new List<Term>();
+ var sm = largeblock ? MergeGoals(smm) : smm;
+ CollectGoals(sm, goals,cruft);
+ foreach (var goal in goals)
+ {
+ TermDict< Term> memo = new TermDict< Term>();
+ foreach (var othergoal in goals)
+ memo.Add(othergoal, othergoal.Equals(goal) ? ctx.MkFalse() : ctx.MkTrue());
+ foreach (var thing in cruft)
+ memo.Add(thing, ctx.MkTrue());
+ var vc = SubstRecGoals(memo, sm);
+ vc = ctx.MkImplies(ctx.MkNot(vc), goal);
+ vcs.Add(vc);
+ }
+ {
+ TermDict< Term> memo = new TermDict< Term>();
+ foreach (var othergoal in goals)
+ memo.Add(othergoal, ctx.MkTrue());
+ var vc = SubstRecGoals(memo, sm);
+ if (vc != ctx.MkTrue())
+ {
+ vc = ctx.MkImplies(ctx.MkNot(vc), ctx.MkFalse());
+ vcs.Add(vc);
+ }
+ }
+ }
+ }
+
+
+
+ private void GenerateVCForStratifiedInlining(Program program, StratifiedInliningInfo info, Checker checker)
+ {
+ Contract.Requires(program != null);
+ Contract.Requires(info != null);
+ Contract.Requires(checker != null);
+ Contract.Requires(info.impl != null);
+ Contract.Requires(info.impl.Proc != null);
+
+
+
+ Implementation impl = info.impl;
+ if (mode == Mode.Boogie && style == AnnotationStyle.Flat && impl.Name != main_proc_name)
+ return;
+ Contract.Assert(impl != null);
+ ConvertCFG2DAG(impl,edgesCut);
+ VC.ModelViewInfo mvInfo;
+ PassifyImpl(impl, out mvInfo);
+ Dictionary<int, Absy> label2absy = null;
+ VCExpressionGenerator gen = checker.VCExprGen;
+ Contract.Assert(gen != null);
+ VCExpr vcexpr;
+ if(NoLabels){
+ // int assertionCount = 0;
+ VCExpr startCorrect = null; /* VC.VCGen.LetVC(cce.NonNull(impl.Blocks[0]), null, null, info.blockVariables, info.bindings,
+ info.ctxt, out assertionCount); */
+ vcexpr = gen.Let(info.bindings, startCorrect);
+ }
+ else vcexpr = GenerateVC(impl, null /* info.controlFlowVariable */, out label2absy, info.ctxt);
+ if(mode != Mode.Boogie)
+ vcexpr = gen.Not(vcexpr);
+ Contract.Assert(vcexpr != null);
+ info.label2absy = label2absy;
+ info.mvInfo = mvInfo;
+ List<VCExpr> interfaceExprs = new List<VCExpr>();
+
+ if (true /* was: !info.isMain */)
+ {
+ Boogie2VCExprTranslator translator = checker.TheoremProver.Context.BoogieExprTranslator;
+ Contract.Assert(translator != null);
+ info.privateVars = new List<VCExprVar>();
+ foreach (Variable v in impl.LocVars)
+ {
+ Contract.Assert(v != null);
+ info.privateVars.Add(translator.LookupVariable(v));
+ }
+ foreach (Variable v in impl.OutParams)
+ {
+ Contract.Assert(v != null);
+ info.privateVars.Add(translator.LookupVariable(v));
+ }
+
+ info.interfaceExprVars = new List<VCExprVar>();
+
+ foreach (Variable v in info.interfaceVars)
+ {
+ Contract.Assert(v != null);
+ VCExprVar ev = translator.LookupVariable(v);
+ Contract.Assert(ev != null);
+ info.interfaceExprVars.Add(ev);
+ interfaceExprs.Add(ev);
+ }
+ }
+
+ Function function = cce.NonNull(info.function);
+ Contract.Assert(function != null);
+ info.funcExpr = gen.Function(function, interfaceExprs);
+ info.vcexpr = vcexpr;
+
+ if (mode == Mode.Boogie)
+ {
+ Term z3vc = boogieContext.VCExprToTerm(vcexpr, linOptions);
+ FactorVCs(z3vc, DualityVCs);
+ }
+ else
+ {
+ // Index the procedures by relational variable
+ FuncDecl R = boogieContext.VCExprToTerm(info.funcExpr, linOptions).GetAppDecl();
+ relationToProc.Add(R, info);
+ info.node = rpfp.CreateNode(boogieContext.VCExprToTerm(info.funcExpr, linOptions));
+ rpfp.nodes.Add(info.node);
+ if (info.isMain || QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
+ info.node.Bound.Formula = ctx.MkFalse();
+ }
+ }
+
+ // This returns a new FuncDel with same sort as top-level function
+ // of term t, but with numeric suffix appended to name.
+
+ private FuncDecl SuffixFuncDecl(Term t, int n)
+ {
+ var name = t.GetAppDecl().GetDeclName() + "_" + n.ToString();
+ return ctx.MkFuncDecl(name, t.GetAppDecl());
+ }
+
+ // Collect the relational paremeters
+
+ private Term CollectParamsRec(TermDict<Term> memo, Term t, List<FuncDecl> parms, List<RPFP.Node> nodes, Dictionary<Term,Term> done)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ var kind = t.GetKind();
+ if (kind == TermKind.App)
+ {
+ var f = t.GetAppDecl();
+ var args = t.GetAppArgs();
+ args = args.Select(x => CollectParamsRec(memo, x, parms, nodes, done)).ToArray();
+ StratifiedInliningInfo info;
+ if (relationToProc.TryGetValue(f, out info))
+ {
+ if (done.ContainsKey(t))
+ res = done[t];
+ else
+ {
+ f = SuffixFuncDecl(t, parms.Count);
+ parms.Add(f);
+ nodes.Add(info.node);
+ res = ctx.MkApp(f, args);
+ done.Add(t,res); // don't count same expression twice!
+ }
+ }
+ else
+ res = ctx.CloneApp(t, args);
+ } // TODO: handle quantifiers
+ else res = t;
+ memo.Add(t, res);
+ return res;
+ }
+
+ public void GetTransformer(StratifiedInliningInfo info)
+ {
+ Term vcTerm = boogieContext.VCExprToTerm(info.vcexpr, linOptions);
+ Term[] paramTerms = info.interfaceExprVars.Select(x => boogieContext.VCExprToTerm(x, linOptions)).ToArray();
+ var relParams = new List<FuncDecl>();
+ var nodeParams = new List<RPFP.Node>();
+ var memo = new TermDict< Term>();
+ var done = new Dictionary<Term,Term>(); // note this hashes on equality, not reference!
+ vcTerm = CollectParamsRec(memo, vcTerm, relParams, nodeParams,done);
+ // var ops = new Util.ContextOps(ctx);
+ // var foo = ops.simplify_lhs(vcTerm);
+ // vcTerm = foo.Item1;
+ info.F = rpfp.CreateTransformer(relParams.ToArray(), paramTerms, vcTerm);
+ info.edge = rpfp.CreateEdge(info.node, info.F, nodeParams.ToArray());
+ rpfp.edges.Add(info.edge);
+ // TODO labels[info.edge.number] = foo.Item2;
+ }
+
+ public RPFP.Node GetNodeOfImpl(Implementation/*!*/ impl)
+ {
+ return implName2StratifiedInliningInfo[impl.Name].node;
+ }
+
+ public class CyclicLiveVariableAnalysis : Microsoft.Boogie.LiveVariableAnalysis
+ {
+ public new static void ComputeLiveVariables(Implementation impl)
+ {
+
+ bool some_change = true;
+ List<Block> sortedNodes = new List<Block>();
+ foreach (var block in impl.Blocks)
+ {
+ sortedNodes.Add(block);
+ }
+ sortedNodes.Reverse();
+
+ while (some_change)
+ {
+ some_change = false;
+ foreach (Block/*!*/ block in sortedNodes)
+ {
+ Contract.Assert(block != null);
+ HashSet<Variable/*!*/>/*!*/ liveVarsAfter = new HashSet<Variable/*!*/>();
+ if (block.TransferCmd is GotoCmd)
+ {
+ GotoCmd gotoCmd = (GotoCmd)block.TransferCmd;
+ if (gotoCmd.labelTargets != null)
+ {
+ foreach (Block/*!*/ succ in gotoCmd.labelTargets)
+ {
+ Contract.Assert(succ != null);
+ if (succ.liveVarsBefore != null)
+ liveVarsAfter.UnionWith(succ.liveVarsBefore);
+ }
+ }
+ }
+
+ List<Cmd> cmds = block.Cmds;
+ int len = cmds.Count;
+ for (int i = len - 1; i >= 0; i--)
+ {
+ if (cmds[i] is CallCmd)
+ {
+ Procedure/*!*/ proc = cce.NonNull(cce.NonNull((CallCmd/*!*/)cmds[i]).Proc);
+ if (InterProcGenKill.HasSummary(proc.Name))
+ {
+ liveVarsAfter =
+ InterProcGenKill.PropagateLiveVarsAcrossCall(cce.NonNull((CallCmd/*!*/)cmds[i]), liveVarsAfter);
+ continue;
+ }
+ }
+ Propagate(cmds[i], liveVarsAfter);
+ }
+
+ if (block.liveVarsBefore == null)
+ block.liveVarsBefore = new HashSet<Variable>();
+ if (!liveVarsAfter.IsSubsetOf(block.liveVarsBefore))
+ {
+ block.liveVarsBefore = liveVarsAfter;
+ some_change = true;
+ }
+ }
+ }
+ }
+ }
+
+ public void Generate()
+ {
+
+ var oldDagOption = CommandLineOptions.Clo.vcVariety;
+ CommandLineOptions.Clo.vcVariety = CommandLineOptions.VCVariety.Dag;
+
+ // MarkAllFunctionImplementationsInline(); // This is for SMACK, which goes crazy with functions
+
+ // Run live variable analysis (TODO: should this be here?)
+#if false
+ if (CommandLineOptions.Clo.LiveVariableAnalysis == 2)
+ {
+ Microsoft.Boogie.InterProcGenKill.ComputeLiveVars(impl, program);
+ }
+#endif
+
+ #region In Boogie mode, annotate the program
+ if (mode == Mode.Boogie)
+ {
+
+ // find the name of the main procedure
+ main_proc_name = null; // default in case no entry point defined
+ foreach (var impl in program.Implementations)
+ {
+ if (QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
+ main_proc_name = impl.Proc.Name;
+ }
+ if (main_proc_name == null)
+ {
+ foreach (var impl in program.Implementations)
+ {
+ if (impl.Proc.Name == "main" || impl.Proc.Name.EndsWith(".main"))
+ main_proc_name = impl.Proc.Name;
+ }
+ }
+ if (main_proc_name == null)
+ main_proc_name = "main";
+
+ if (style == AnnotationStyle.Flat)
+ {
+ InlineAll();
+ Microsoft.Boogie.BlockCoalescer.CoalesceBlocks(program);
+ foreach (var impl in program.Implementations)
+ {
+ if (main_proc_name == impl.Proc.Name)
+ {
+ Microsoft.Boogie.LiveVariableAnalysis.ClearLiveVariables(impl);
+ CyclicLiveVariableAnalysis.ComputeLiveVariables(impl);
+ AnnotateLoops(impl, boogieContext);
+ }
+ }
+ }
+ else
+ {
+
+ if (style == AnnotationStyle.Procedure || style == AnnotationStyle.Call)
+ {
+ foreach (var impl in program.Implementations)
+ {
+ if (!QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"))
+ AnnotateProcRequires(impl.Proc, impl, boogieContext);
+ AnnotateProcEnsures(impl.Proc, impl, boogieContext);
+ }
+ if (style == AnnotationStyle.Call)
+ {
+
+ }
+ }
+
+ // must do this after annotating procedures, else calls
+ // will be prematurely desugared
+
+ foreach (var impl in program.Implementations)
+ {
+ Microsoft.Boogie.LiveVariableAnalysis.ClearLiveVariables(impl);
+ CyclicLiveVariableAnalysis.ComputeLiveVariables(impl);
+ }
+
+
+ if (style == AnnotationStyle.Flat || style == AnnotationStyle.Call)
+ {
+ foreach (var impl in program.Implementations)
+ {
+ AnnotateLoops(impl, boogieContext);
+ }
+ }
+ if (style == AnnotationStyle.Call)
+ {
+ Dictionary<string, bool> impls = new Dictionary<string, bool>();
+ foreach (var impl in program.Implementations)
+ {
+ impls.Add(impl.Proc.Name, true);
+ }
+ foreach (var impl in program.Implementations)
+ {
+ AnnotateCallSites(impl, boogieContext, impls);
+ }
+ }
+ if (style == AnnotationStyle.Flat)
+ InlineAll();
+ }
+ }
+ #endregion
+
+ /* Generate the VC's */
+ GenerateVCsForStratifiedInlining();
+
+ /* Generate the background axioms */
+ Term background = ctx.MkTrue(); // TODO boogieContext.VCExprToTerm(boogieContext.Axioms, linOptions);
+ rpfp.AssertAxiom(background);
+
+ int save_option = CommandLineOptions.Clo.StratifiedInlining; // need this to get funcall labels
+ CommandLineOptions.Clo.StratifiedInlining = 1;
+
+ /* Create the nodes, indexing procedures by their relational symbols. */
+ foreach (StratifiedInliningInfo info in implName2StratifiedInliningInfo.Values)
+ GenerateVCForStratifiedInlining(program, info, checker);
+
+ CommandLineOptions.Clo.StratifiedInlining = save_option;
+
+ if (mode == Mode.Boogie)
+ {
+ // var ops = new Util.ContextOps(ctx);
+ var vcs = DualityVCs;
+ DualityVCs = new List<Term>();
+ foreach (var vc in vcs)
+ {
+ // var foo = ops.simplify_lhs(vc.GetAppArgs()[0]);
+ var foo = vc.GetAppArgs()[0];
+ if (!foo.IsFalse())
+ DualityVCs.Add(ctx.MkImplies(foo, vc.GetAppArgs()[1]));
+ }
+
+ rpfp.FromClauses(DualityVCs.ToArray());
+ // TODO rpfp.HornClauses = style == AnnotationStyle.Flat;
+ }
+ else
+ {
+ /* Generate the edges. */
+ foreach (StratifiedInliningInfo info in implName2StratifiedInliningInfo.Values)
+ GetTransformer(info);
+ }
+
+ // save some information for debugging purposes
+ // TODO rpfp.ls.SetAnnotationInfo(annotationInfo);
+
+ CommandLineOptions.Clo.vcVariety = oldDagOption;
+ }
+
+
+ private class ErrorHandler : ProverInterface.ErrorHandler
+ {
+ //TODO: anything we need to handle?
+ }
+
+ Dictionary<int, Dictionary<string, string>> varSubst = null;
+
+ /** Check the RPFP, and return a counterexample if there is one. */
+
+ public VC.ConditionGeneration.Outcome Check(ref RPFP.Node cexroot)
+ {
+ var start = DateTime.Now;
+
+ ErrorHandler handler = new ErrorHandler();
+ RPFP.Node cex;
+ varSubst = new Dictionary<int,Dictionary<string,string>>();
+
+#if false
+ int origRecursionBound = CommandLineOptions.Clo.RecursionBound;
+ if (CommandLineOptions.Clo.RecursionBound > 0 && extraRecBound != null)
+ {
+ int maxExtra = 0;
+ foreach (string s in extraRecBound.Keys)
+ {
+ int extra = extraRecBound[s];
+ if (extra > maxExtra) maxExtra = extra;
+ }
+ CommandLineOptions.Clo.RecursionBound += maxExtra;
+ }
+#endif
+
+ ProverInterface.Outcome outcome =
+ checker.TheoremProver.CheckRPFP("name", rpfp, handler, out cex, varSubst, extraRecBound);
+ cexroot = cex;
+
+#if false
+ CommandLineOptions.Clo.RecursionBound = origRecursionBound;
+#endif
+
+ Console.WriteLine("solve: {0}s", (DateTime.Now - start).TotalSeconds);
+
+ switch(outcome)
+ {
+ case ProverInterface.Outcome.Valid:
+ return VC.ConditionGeneration.Outcome.Correct;
+ case ProverInterface.Outcome.Bounded:
+ return VC.ConditionGeneration.Outcome.ReachedBound;
+ case ProverInterface.Outcome.Invalid:
+ return VC.ConditionGeneration.Outcome.Errors;
+ case ProverInterface.Outcome.TimeOut:
+ return VC.ConditionGeneration.Outcome.TimedOut;
+ default:
+ return VC.ConditionGeneration.Outcome.Inconclusive;
+ }
+ }
+
+ private bool generated = false;
+
+ static private Object thisLock = new Object();
+
+ public override VC.VCGen.Outcome VerifyImplementation(Implementation impl, VerifierCallback collector)
+ {
+
+ lock (thisLock)
+ {
+ Procedure proc = impl.Proc;
+
+ // we verify all the impls at once, so we need to execute only once
+ // TODO: make sure needToCheck is true only once
+ bool needToCheck = false;
+ if (mode == Mode.OldCorral)
+ needToCheck = proc.FindExprAttribute("inline") == null && !(proc is LoopProcedure);
+ else if (mode == Mode.Corral || mode == Mode.Boogie)
+ needToCheck = QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint") && !(proc is LoopProcedure);
+ else
+ needToCheck = impl.Name == main_proc_name;
+
+ if (needToCheck)
+ {
+
+ var start = DateTime.Now;
+
+ if (!generated)
+ {
+ Generate();
+ Console.WriteLine("generate: {0}s", (DateTime.Now - start).TotalSeconds);
+ generated = true;
+ }
+
+
+ Console.WriteLine("Verifying {0}...", impl.Name);
+
+ RPFP.Node cexroot = null;
+ // start = DateTime.Now;
+ var checkres = Check(ref cexroot);
+ Console.WriteLine("check: {0}s", (DateTime.Now - start).TotalSeconds);
+ switch (checkres)
+ {
+ case Outcome.Errors:
+ Console.WriteLine("Counterexample found.\n");
+ // start = DateTime.Now;
+ Counterexample cex = CreateBoogieCounterExample(cexroot.owner, cexroot, impl);
+ // cexroot.owner.DisposeDualModel();
+ // cex.Print(0); // just for testing
+ collector.OnCounterexample(cex, "assertion failure");
+ Console.WriteLine("cex: {0}s", (DateTime.Now - start).TotalSeconds);
+ ConjecturesToSpecs();
+ break;
+ case Outcome.Correct:
+ Console.WriteLine("Procedure is correct. (fixed point reached)");
+ FixedPointToSpecs();
+ ConjecturesToSpecs();
+ break;
+ case Outcome.ReachedBound:
+ Console.WriteLine("Procedure is correct. (recursion bound reached)");
+ FixedPointToSpecs();
+ ConjecturesToSpecs();
+ break;
+ default:
+ Console.WriteLine("Inconclusive result.");
+ ConjecturesToSpecs();
+ break;
+ }
+ return checkres;
+
+ }
+
+ return Outcome.Inconclusive;
+ }
+ }
+
+ public void FindLabelsRec(HashSet<Term> memo, Term t, Dictionary<string, Term> res)
+ {
+ if (memo.Contains(t))
+ return;
+ if (t.IsLabel())
+ {
+ string l = t.LabelName();
+ if (!res.ContainsKey(l))
+ res.Add(l, t.GetAppArgs()[0]);
+ }
+ if (t.GetKind() == TermKind.App)
+ {
+ var args = t.GetAppArgs();
+ foreach (var a in args)
+ FindLabelsRec(memo, a, res);
+ } // TODO: handle quantifiers
+
+ memo.Add(t);
+ }
+
+ public void FindLabels()
+ {
+ labels = new Dictionary<string, Term>();
+ foreach(var e in rpfp.edges){
+ int id = e.number;
+ HashSet<Term> memo = new HashSet<Term>(ReferenceComparer<Term>.Instance);
+ FindLabelsRec(memo, e.F.Formula, labels);
+ }
+ }
+
+ public string CodeLabel(Absy code, StratifiedInliningInfo info, string prefix)
+ {
+ if (info.label2absyInv == null)
+ {
+ info.label2absyInv = new Dictionary<Absy, string>();
+ foreach (int foo in info.label2absy.Keys)
+ {
+ Absy bar = info.label2absy[foo] as Absy;
+ string lbl = foo.ToString();
+ info.label2absyInv.Add(bar, lbl);
+ }
+ }
+ if (info.label2absyInv.ContainsKey(code))
+ {
+ string label = info.label2absyInv[code];
+ return prefix+label;
+ }
+ return null;
+ }
+
+ public Term CodeLabeledExpr(RPFP rpfp, RPFP.Node root, Absy code, StratifiedInliningInfo info, string prefix)
+ {
+ string label = CodeLabel(code, info, prefix);
+
+ if (label != null)
+ {
+ var res = labels[label];
+ return res;
+ }
+ else return null;
+ }
+
+ public class LabelNotFound : Exception { };
+
+ public bool CodeLabelTrue(RPFP rpfp, RPFP.Node root, Absy code, StratifiedInliningInfo info, string prefix)
+ {
+ string label = CodeLabel(code, info, prefix);
+
+ if (label == null)
+ throw new LabelNotFound();
+ return root.Outgoing.labels.Contains(label);
+ }
+
+ public bool CodeLabelFalse(RPFP rpfp, RPFP.Node root, Absy code, StratifiedInliningInfo info, string prefix)
+ {
+ return CodeLabelTrue(rpfp, root, code, info, prefix);
+ }
+
+
+ private class StateId
+ {
+ public RPFP.Edge edge;
+ public int capturePoint;
+ public StratifiedInliningInfo info;
+ public StateId(RPFP.Edge e, int c, StratifiedInliningInfo i)
+ {
+ edge = e;
+ capturePoint = c;
+ info = i;
+ }
+ }
+
+
+ public Counterexample CreateBoogieCounterExample(RPFP rpfp, RPFP.Node root, Implementation mainImpl)
+ {
+ FindLabels();
+ var orderedStateIds = new List<StateId>();
+ Counterexample newCounterexample =
+ GenerateTrace(rpfp, root, orderedStateIds, mainImpl,true);
+ if (CommandLineOptions.Clo.ModelViewFile != null)
+ {
+ Model m = root.owner.GetBackgroundModel();
+ GetModelWithStates(m, root, implName2StratifiedInliningInfo[mainImpl.Name],
+ orderedStateIds, varSubst);
+ newCounterexample.Model = m;
+ newCounterexample.ModelHasStatesAlready = true;
+ }
+ return newCounterexample;
+ }
+
+
+
+ private Counterexample GenerateTrace(RPFP rpfp, RPFP.Node root,
+ List<StateId> orderedStateIds, Implementation procImpl, bool toplevel)
+ {
+ Contract.Requires(procImpl != null);
+
+ Contract.Assert(!rpfp.Empty(root));
+
+
+ var info = implName2StratifiedInliningInfo[procImpl.Name];
+ Block entryBlock = cce.NonNull(procImpl.Blocks[0]);
+ Contract.Assert(entryBlock != null);
+
+ List<Block> trace = new List<Block>();
+ trace.Add(entryBlock);
+
+ var calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
+
+ Counterexample newCounterexample =
+ GenerateTraceRec(rpfp, root, orderedStateIds, entryBlock, trace, calleeCounterexamples, info, toplevel);
+
+ return newCounterexample;
+ }
+
+ // TODO: this is a bit cheesy. Rather than finding the argument position
+ // of a relational term in a transformer by linear search, better to index this
+ // somewhere, but where?
+ private int TransformerArgPosition(RPFP rpfp, RPFP.Node root, Term expr)
+ {
+ FuncDecl rel = expr.GetAppDecl();
+ string relname = rel.GetDeclName();
+ var rps = root.Outgoing.F.RelParams;
+ for (int i = 0; i < rps.Length; i++)
+ {
+ string thisname = rps[i].GetDeclName();
+ if (thisname == relname)
+ return i;
+ }
+ return -1;
+ }
+
+ private bool EvalToFalse(RPFP rpfp, RPFP.Node root, Term expr,StratifiedInliningInfo info){
+ Term res = rpfp.Eval(root.Outgoing,expr);
+ return res.Equals(ctx.MkTrue());
+ }
+
+ private Counterexample GenerateTraceRec(
+ RPFP rpfp, RPFP.Node root,
+ List<StateId> orderedStateIds,
+ Block/*!*/ b, List<Block>/*!*/ trace,
+ Dictionary<TraceLocation/*!*/, CalleeCounterexampleInfo/*!*/>/*!*/ calleeCounterexamples,
+ StratifiedInliningInfo info,
+ bool toplevel)
+ {
+ Contract.Requires(b != null);
+ Contract.Requires(trace != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(calleeCounterexamples));
+
+ Stack<RPFP.Node> continuation_stack = new Stack<RPFP.Node>();
+
+ // If our block is not present, try diving into precondition
+ // and push a continuation.
+ // TODO: is the precondition always the first child?
+ while (!CodeLabelFalse(rpfp, root, b, info, "+"))
+ {
+ if (root.Outgoing != null && root.Outgoing.Children.Length > 0)
+ {
+ continuation_stack.Push(root);
+ root = root.Outgoing.Children[0];
+ }
+ else
+ {
+ // can't find our block
+ Contract.Assert(false);
+ return null;
+ }
+ }
+
+ // After translation, all potential errors come from asserts.
+ while (true)
+ {
+
+
+ List<Cmd> cmds = b.Cmds;
+ TransferCmd transferCmd = cce.NonNull(b.TransferCmd);
+ for (int i = 0; i < cmds.Count; i++)
+ {
+ Cmd cmd = cce.NonNull(cmds[i]);
+
+ // Skip if 'cmd' not contained in the trace or not an assert
+ if (cmd is AssertCmd)
+ {
+ bool is_failed_assertion = false;
+ if (NoLabels)
+ is_failed_assertion = true; // we assume only assertions on
+ else
+ is_failed_assertion = CodeLabelTrue(rpfp, root, cmd, info, "@");
+
+ if (is_failed_assertion)
+ {
+ if (continuation_stack.Count == 0)
+ {
+ Counterexample newCounterexample =
+ AssertCmdToCounterexample((AssertCmd)cmd, transferCmd, trace, new Microsoft.Boogie.Model(), info.mvInfo,
+ boogieContext);
+ newCounterexample.AddCalleeCounterexample(calleeCounterexamples);
+ return newCounterexample;
+ }
+ root = continuation_stack.Pop();
+ }
+ continue;
+ }
+
+ // Counterexample generation for inlined procedures
+ AssumeCmd assumeCmd = cmd as AssumeCmd;
+ if (assumeCmd == null)
+ continue;
+ NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
+ if (naryExpr == null)
+ continue;
+ string calleeName = naryExpr.Fun.FunctionName;
+ Contract.Assert(calleeName != null);
+
+ // what is this crap???
+ BinaryOperator binOp = naryExpr.Fun as BinaryOperator;
+ if (binOp != null && binOp.Op == BinaryOperator.Opcode.And)
+ {
+ Expr expr = naryExpr.Args[0];
+ NAryExpr mvStateExpr = expr as NAryExpr;
+ if (mvStateExpr != null && mvStateExpr.Fun.FunctionName == VC.ModelViewInfo.MVState_FunctionDef.Name)
+ {
+ LiteralExpr x = mvStateExpr.Args[1] as LiteralExpr;
+ // Debug.Assert(x != null);
+ int foo = x.asBigNum.ToInt;
+ orderedStateIds.Add(new StateId(root.Outgoing,foo,info));
+ }
+ }
+
+ if (calleeName.EndsWith("_summary"))
+ calleeName = calleeName.Substring(0, calleeName.Length - 8);
+
+ if (!implName2StratifiedInliningInfo.ContainsKey(calleeName) && !calleeName.EndsWith("_summary"))
+ continue;
+
+ {
+ Term code = CodeLabeledExpr(rpfp, root, cmd, info, "+si_fcall_");
+ int pos = TransformerArgPosition(rpfp, root, code);
+ if (pos >= 0)
+ {
+ RPFP.Node callee = root.Outgoing.Children[pos];
+ orderedStateIds.Add(new StateId(callee.Outgoing, CALL,info));
+ calleeCounterexamples[new TraceLocation(trace.Count - 1, i)] =
+ new CalleeCounterexampleInfo(
+ cce.NonNull(GenerateTrace(rpfp, callee, orderedStateIds,
+ implName2StratifiedInliningInfo[calleeName].impl, false)),
+ new List<object>());
+ orderedStateIds.Add(new StateId(root.Outgoing, RETURN,info));
+ }
+ }
+ }
+
+ GotoCmd gotoCmd = transferCmd as GotoCmd;
+ List<Block> cuts = null;
+ if (edgesCut.ContainsKey(b))
+ cuts = edgesCut[b];
+ b = null;
+
+ if (gotoCmd != null)
+ {
+
+ foreach (Block bb in cce.NonNull(gotoCmd.labelTargets))
+ {
+ Contract.Assert(bb != null);
+ if (CodeLabelFalse(rpfp, root, bb, info, "+"))
+ {
+ trace.Add(bb);
+ b = bb;
+ break;
+ }
+ }
+ if (b != null) continue;
+ }
+ // HACK: we have to try edges that were cut in generating the VC
+
+ if (cuts != null)
+ foreach (var bb in cuts)
+ {
+ if (CodeLabelFalse(rpfp, root, bb, info, "+"))
+ {
+ trace.Add(bb);
+ b = bb;
+ break;
+ }
+ }
+ if (b != null) continue;
+
+ return null;
+ }
+
+
+ }
+
+ public override Counterexample extractLoopTrace(Counterexample cex, string mainProcName, Program program, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
+ {
+ // Construct the set of inlined procs in the original program
+ var inlinedProcs = new HashSet<string>();
+ foreach (var decl in program.TopLevelDeclarations)
+ {
+ // Implementations
+ if (decl is Implementation)
+ {
+ var impl = decl as Implementation;
+ if (!(impl.Proc is LoopProcedure))
+ {
+ inlinedProcs.Add(impl.Name);
+ }
+ }
+
+ // And recording procedures
+ if (decl is Procedure)
+ {
+ var proc = decl as Procedure;
+ if (proc.Name.StartsWith(recordProcName))
+ {
+ // Debug.Assert(!(decl is LoopProcedure));
+ inlinedProcs.Add(proc.Name);
+ }
+ }
+ }
+ return extractLoopTraceRec(
+ new CalleeCounterexampleInfo(cex, new List<object>()),
+ mainProcName, inlinedProcs, extractLoopMappingInfo).counterexample;
+ }
+
+ protected override bool elIsLoop(string procname)
+ {
+ StratifiedInliningInfo info = null;
+ if (implName2StratifiedInliningInfo.ContainsKey(procname))
+ {
+ info = implName2StratifiedInliningInfo[procname];
+ }
+
+ if (info == null) return false;
+
+ var lp = info.impl.Proc as LoopProcedure;
+
+ if (lp == null) return false;
+ return true;
+ }
+
+ private void NumberCexEdges(RPFP.Node node, Dictionary<int,RPFP.Edge> map)
+ {
+ if (node.Outgoing == null)
+ return; // shouldn't happen
+ RPFP.Edge edge = node.Outgoing;
+ map[edge.number] = edge;
+ foreach (var c in edge.Children)
+ NumberCexEdges(c, map);
+ }
+
+ private void GetModelWithStates(Model m, RPFP.Node cex, StratifiedInliningInfo mainInfo,
+ List<StateId> orderedStateIds,
+ Dictionary<int,Dictionary<string,string>> varSubst)
+ {
+ if (m == null) return;
+ var mvInfo = mainInfo.mvInfo;
+
+
+ foreach (Variable v in mvInfo.AllVariables)
+ {
+ m.InitialState.AddBinding(v.Name, GetModelValue(m, v, varSubst[cex.Outgoing.number]));
+ }
+
+ Dictionary<int, RPFP.Edge> edgeNumbering = new Dictionary<int,RPFP.Edge>();
+ NumberCexEdges(cex, edgeNumbering);
+
+ int lastCandidate = 0;
+ int lastCapturePoint = CALL;
+ for (int i = 0; i < orderedStateIds.Count; ++i)
+ {
+ var s = orderedStateIds[i];
+ RPFP.Edge edge = s.edge;
+ int candidate = edge.number;
+ int capturePoint = s.capturePoint;
+ Dictionary<string, string> subst = varSubst[candidate];
+
+ string implName = edge.Parent.Name.GetDeclName();
+ var info = s.info.mvInfo;
+
+ if (capturePoint == CALL || capturePoint == RETURN)
+ {
+ lastCandidate = candidate;
+ lastCapturePoint = capturePoint;
+ continue;
+ }
+
+ Contract.Assume(0 <= capturePoint && capturePoint < info.CapturePoints.Count);
+ VC.ModelViewInfo.Mapping map = info.CapturePoints[capturePoint];
+ var prevInc = (lastCapturePoint != CALL && lastCapturePoint != RETURN && candidate == lastCandidate)
+ ? info.CapturePoints[lastCapturePoint].IncarnationMap : new Dictionary<Variable, Expr>();
+ var cs = m.MkState(map.Description);
+
+ foreach (Variable v in info.AllVariables)
+ {
+ var e = (Expr)map.IncarnationMap[v];
+
+ if (e == null)
+ {
+ if (lastCapturePoint == CALL || lastCapturePoint == RETURN)
+ {
+ cs.AddBinding(v.Name, GetModelValue(m, v, subst));
+ }
+ continue;
+ }
+
+ if (lastCapturePoint != CALL && lastCapturePoint != RETURN && prevInc[v] == e) continue; // skip unchanged variables
+
+ Model.Element elt;
+ if (e is IdentifierExpr)
+ {
+ IdentifierExpr ide = (IdentifierExpr)e;
+ elt = GetModelValue(m, ide.Decl, subst);
+ }
+ else if (e is LiteralExpr)
+ {
+ LiteralExpr lit = (LiteralExpr)e;
+ elt = m.MkElement(lit.Val.ToString());
+ }
+ else
+ {
+ Contract.Assume(false);
+ elt = m.MkFunc(e.ToString(), 0).GetConstant();
+ }
+ cs.AddBinding(v.Name, elt);
+ }
+
+ lastCandidate = candidate;
+ lastCapturePoint = capturePoint;
+ }
+
+ return;
+ }
+
+
+ public readonly static int CALL = -1;
+ public readonly static int RETURN = -2;
+
+ private Model.Element GetModelValue(Model m, Variable v, Dictionary<string,string> subst)
+ {
+ // first, get the unique name
+ string uniqueName;
+
+ VCExprVar vvar = boogieContext.BoogieExprTranslator.TryLookupVariable(v);
+
+ uniqueName = v.Name;
+
+ if(subst.ContainsKey(uniqueName))
+ return m.MkElement(subst[uniqueName]);
+ return m.MkFunc("@undefined", 0).GetConstant();
+ }
+
+ class InternalError : Exception {
+ }
+
+
+ private BinaryOperator.Opcode VCOpToOp (VCExprOp op)
+ {
+ if (op == VCExpressionGenerator.AddIOp)
+ return BinaryOperator.Opcode.Add;
+ if (op == VCExpressionGenerator.SubIOp)
+ return BinaryOperator.Opcode.Sub;
+ if (op == VCExpressionGenerator.MulIOp)
+ return BinaryOperator.Opcode.Mul;
+ if (op == VCExpressionGenerator.DivIOp)
+ return BinaryOperator.Opcode.Div;
+ if (op == VCExpressionGenerator.EqOp)
+ return BinaryOperator.Opcode.Eq;
+ if (op == VCExpressionGenerator.LeOp)
+ return BinaryOperator.Opcode.Le;
+ if (op == VCExpressionGenerator.LtOp)
+ return BinaryOperator.Opcode.Lt;
+ if (op == VCExpressionGenerator.GeOp)
+ return BinaryOperator.Opcode.Ge;
+ if (op == VCExpressionGenerator.GtOp)
+ return BinaryOperator.Opcode.Gt;
+ if (op == VCExpressionGenerator.AndOp)
+ return BinaryOperator.Opcode.And;
+ if (op == VCExpressionGenerator.OrOp)
+ return BinaryOperator.Opcode.Or;
+ throw new InternalError();
+ }
+
+ private Expr MakeBinary (BinaryOperator.Opcode op, List<Expr> args)
+ {
+ if(args.Count == 0){
+ // with zero args we need the identity of the op
+ switch(op){
+ case BinaryOperator.Opcode.And:
+ return Expr.True;
+ case BinaryOperator.Opcode.Or:
+ return Expr.False;
+ case BinaryOperator.Opcode.Add:
+ return new LiteralExpr(Token.NoToken,Microsoft.Basetypes.BigNum.ZERO);
+ default:
+ throw new InternalError();
+ }
+ }
+ var temp = args[0];
+ for(int i = 1; i < args.Count; i++)
+ temp = Expr.Binary(Token.NoToken,op,temp,args[i]);
+ return temp;
+ }
+
+ private Variable MakeVar(VCExprVar v){
+ var foo = new TypedIdent(Token.NoToken,v.Name.ToString(),v.Type);
+ return new BoundVariable(Token.NoToken,foo);
+ }
+
+ private Expr VCExprToExpr (VCExpr e, Dictionary<VCExpr,Expr> bound)
+ {
+ if (e is VCExprVar) {
+ if(bound.ContainsKey(e))
+ return bound[e];
+ return Expr.Ident(MakeVar(e as VCExprVar)); // TODO: this isn't right
+ }
+ if (e is VCExprIntLit) {
+ var n = e as VCExprIntLit;
+ return new LiteralExpr(Token.NoToken,n.Val);
+ }
+ if (e is VCExprNAry) {
+ var f = e as VCExprNAry;
+ var args = new List<Expr>();
+ for(int i = 0; i < f.Arity; i++){
+ args.Add (VCExprToExpr (f[i],bound));
+ }
+
+ if(f.Op == VCExpressionGenerator.NotOp)
+ return Expr.Unary(Token.NoToken, UnaryOperator.Opcode.Not, args[0]);
+
+ if(f.Op == VCExpressionGenerator.IfThenElseOp)
+ return new NAryExpr(Token.NoToken,new IfThenElse(Token.NoToken),args);
+
+ if(f.Op is VCExprSelectOp){
+ var idx = new List<Expr>();
+ idx.Add(args[1]);
+ return Expr.Select(args[0],idx);
+ }
+
+ if(f.Op is VCExprStoreOp){
+ var idx = new List<Expr>();
+ idx.Add(args[1]);
+ return Expr.Store(args[0],idx,args[2]);
+ }
+
+ if (f.Op is VCExprBoogieFunctionOp)
+ {
+ return new NAryExpr(Token.NoToken,
+ new FunctionCall((f.Op as VCExprBoogieFunctionOp).Func), args);
+ }
+
+ var op = VCOpToOp (f.Op);
+ return MakeBinary(op,args);
+ }
+
+ if(e is VCExprQuantifier) {
+ var f = e as VCExprQuantifier;
+ var vs = new List<Variable>();
+ var new_bound = new Dictionary<VCExpr,Expr>(bound);
+ foreach(var v in f.BoundVars){
+ var ve = MakeVar(v);
+ vs.Add(ve);
+ new_bound.Add (v,Expr.Ident (ve));
+ }
+ var bd = VCExprToExpr(f.Body,new_bound);
+ if(f.Quan == Quantifier.EX)
+ return new ExistsExpr(Token.NoToken,vs,bd);
+ else
+ return new ForallExpr(Token.NoToken,vs,bd);
+ }
+ if (e == VCExpressionGenerator.True) {
+ return Expr.True;
+ }
+ if (e == VCExpressionGenerator.False) {
+ return Expr.False;
+ }
+ if (e is VCExprLet) {
+
+ }
+
+ throw new InternalError();
+ }
+
+
+ }
+
+
+}
diff --git a/Source/VCGeneration/OrderingAxioms.cs b/Source/VCGeneration/OrderingAxioms.cs
index dbb97764..9284601f 100644
--- a/Source/VCGeneration/OrderingAxioms.cs
+++ b/Source/VCGeneration/OrderingAxioms.cs
@@ -1,338 +1,338 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Linq;
-using System.Diagnostics.Contracts;
-using Microsoft.Boogie.VCExprAST;
-
-// Class for constructing and collecting the axioms of the partial
-// order <:. The class also manages "unique" attributes of constants
-// and generated the necessary assumptions for the theorem prover.
-
-// TODO: there should be an interface so that different ways to handle
-// ordering relations can be accessed uniformly
-
-namespace Microsoft.Boogie {
-
- public class OrderingAxiomBuilder {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(Gen != null);
- Contract.Invariant(Translator != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(OneStepFuns));
- Contract.Invariant(cce.NonNullElements(Constants));
- Contract.Invariant(cce.NonNullElements(CompleteConstantsOpen));
- Contract.Invariant(cce.NonNullElements(AllAxioms));
- Contract.Invariant(cce.NonNullElements(IncAxioms));
- }
-
-
- private readonly VCExpressionGenerator Gen;
- private readonly Boogie2VCExprTranslator Translator;
- private readonly IDictionary<Type, Function> OneStepFuns;
- private readonly List<Constant> Constants = new List<Constant>();
-
- // A list to handle constants whose direct children are fully
- // specified (the "complete" keyword). Constants are removed from
- // the list as soon as the corresponding axiom has been generated,
- // which means that from this point on no further children can be
- // added
- private readonly List<Constant> CompleteConstantsOpen = new List<Constant>();
-
- // list in which all axioms are collected
- private readonly List<VCExpr> AllAxioms = new List<VCExpr>();
-
- // list in which axioms are incrementally collected
- private readonly List<VCExpr> IncAxioms = new List<VCExpr>();
-
-
- public OrderingAxiomBuilder(VCExpressionGenerator gen,
- Boogie2VCExprTranslator translator) {
- Contract.Requires(gen != null);
- Contract.Requires(translator != null);
- this.Gen = gen;
- this.Translator = translator;
- OneStepFuns = new Dictionary<Type, Function>();
- Constants = new List<Constant>();
- CompleteConstantsOpen = new List<Constant>();
- AllAxioms = new List<VCExpr>();
- IncAxioms = new List<VCExpr>();
- }
-
- public OrderingAxiomBuilder(VCExpressionGenerator gen,
- Boogie2VCExprTranslator translator,
- OrderingAxiomBuilder builder) {
- Contract.Requires(gen != null);
- Contract.Requires(translator != null);
- Contract.Requires(builder != null);
- this.Gen = gen;
- this.Translator = translator;
- OneStepFuns = new Dictionary<Type, Function>(builder.OneStepFuns);
- Constants = new List<Constant>(builder.Constants);
- CompleteConstantsOpen = new List<Constant>(builder.CompleteConstantsOpen);
- AllAxioms = new List<VCExpr>(builder.AllAxioms);
- IncAxioms = new List<VCExpr>(builder.IncAxioms);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // Used to axiomatise the disjoint-sub-dag specs that are
- // described by parents with the "unique" flag
-
-
- private Function OneStepFunFor(Type t) {
- Contract.Requires(t != null);
- Contract.Ensures(Contract.Result<Function>() != null);
-
- Function res;
- if (!OneStepFuns.TryGetValue(t, out res)) {
- List<Variable> args = new List<Variable>();
- args.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "arg0", t), true));
- args.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "arg1", t), true));
- Formal result = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "res", t), false);
- res = new Function(Token.NoToken, "oneStep", new List<TypeVariable>(), args, result);
- OneStepFuns.Add(t, res);
- }
- return cce.NonNull(res);
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
-
- private void AddAxiom(VCExpr axiom) {
- Contract.Requires(axiom != null);
- if (axiom.Equals(VCExpressionGenerator.True))
- return;
- AllAxioms.Add(axiom);
- IncAxioms.Add(axiom);
- }
-
- // Return all axioms that were added since the last time NewAxioms
- // was called
- public VCExpr GetNewAxioms() {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- CloseChildrenCompleteConstants();
- VCExpr res = Gen.NAry(VCExpressionGenerator.AndOp, IncAxioms);
- IncAxioms.Clear();
- return res;
- }
-
- // return all axioms
- public VCExpr Axioms {
- get {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- CloseChildrenCompleteConstants();
- return Gen.NAry(VCExpressionGenerator.AndOp, AllAxioms);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- // Generate the normal axioms for a partial order relation
- public void Setup() {
- TypeVariable alpha = new TypeVariable(Token.NoToken, "alpha");
- Contract.Assert(alpha != null);
- List<TypeVariable> typeParams = new List<TypeVariable>();
- typeParams.Add(alpha);
-
- List<VCTrigger> triggers = new List<VCTrigger>();
-
- VCExprVar x = Gen.Variable("x", alpha);
- Contract.Assert(x != null);
- VCExprVar y = Gen.Variable("y", alpha);
- Contract.Assert(y != null);
- VCExprVar z = Gen.Variable("z", alpha);
- Contract.Assert(z != null);
-
- List<VCExprVar> boundVars = new List<VCExprVar>();
-
- // reflexivity
- boundVars.Add(x);
- AddAxiom(Gen.Forall(typeParams, boundVars, triggers,
- new VCQuantifierInfos("bg:subtype-refl", -1, false, null),
- Gen.AtMost(x, x)));
-
- // transitivity
- boundVars = new List<VCExprVar>();
- boundVars.Add(x);
- boundVars.Add(y);
- boundVars.Add(z);
- triggers = new List<VCTrigger>();
- triggers.Add(Gen.Trigger(true, Gen.AtMost(x, y), Gen.AtMost(y, z)));
- VCExpr body = Gen.Implies(Gen.And(Gen.AtMost(x, y), Gen.AtMost(y, z)),
- Gen.AtMost(x, z));
- Contract.Assert(body != null);
- AddAxiom(Gen.Forall(typeParams, boundVars, triggers,
- new VCQuantifierInfos("bg:subtype-trans", -1, false, null),
- body));
-
- // anti-symmetry
- boundVars = new List<VCExprVar>();
- boundVars.Add(x);
- boundVars.Add(y);
- triggers = new List<VCTrigger>();
- triggers.Add(Gen.Trigger(true, Gen.AtMost(x, y), Gen.AtMost(y, x)));
- body = Gen.Implies(Gen.And(Gen.AtMost(x, y), Gen.AtMost(y, x)),
- Gen.Eq(x, y));
- AddAxiom(Gen.Forall(typeParams, boundVars, triggers,
- new VCQuantifierInfos("bg:subtype-antisymm", -1, false, null),
- body));
- }
-
- ////////////////////////////////////////////////////////////////////////////
-
- public void AddConstant(Constant c) {
- Contract.Requires(c != null);
- AddAxiom(GenParentConstraints(c));
- Constants.Add(c);
- if (c.ChildrenComplete)
- CompleteConstantsOpen.Add(c);
-
- // ensure that no further children are added to closed
- // children-complete constants
- Contract.Assert(!(c.Parents != null && Contract.Exists(c.Parents, p => cce.NonNull((Constant)p.Parent.Decl).ChildrenComplete && !CompleteConstantsOpen.Contains((Constant)p.Parent.Decl))));
- }
-
- // Generate the constraints telling that parents of a constant are
- // strictly greater than the constant itself, and are the minimal
- // elements with this property
- private VCExpr GenParentConstraints(Constant c) {
- Contract.Requires(c != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr res = VCExpressionGenerator.True;
-
- if (c.Parents == null)
- return res;
-
- VCExprVar cAsVar = Translator.LookupVariable(c);
- VCExprVar w = Gen.Variable("w", c.TypedIdent.Type);
-
- // Parents of c are proper ancestors of c
- foreach (ConstantParent p in c.Parents) {
- Contract.Assert(p != null);
- VCExprVar par = Translator.LookupVariable(cce.NonNull(p.Parent.Decl));
- res = Gen.AndSimp(res, Gen.Neq(cAsVar, par));
- res = Gen.AndSimp(res, Gen.AtMost(cAsVar, par));
- }
-
- // Parents are direct ancestors of c (no other elements are in
- // between c and a parent)
- foreach (ConstantParent p in c.Parents) {
- Contract.Assert(p != null);
- VCExprVar par = Translator.LookupVariable(cce.NonNull(p.Parent.Decl));
- Contract.Assert(par != null);
- VCExpr antecedent1 = Gen.AtMost(cAsVar, w);
- Contract.Assert(antecedent1 != null);
- VCExpr antecedent2 = Gen.AtMost(w, par);
- Contract.Assert(antecedent2 != null);
- VCExpr body = Gen.Implies(Gen.And(antecedent1, antecedent2),
- Gen.Or(Gen.Eq(cAsVar, w), Gen.Eq(par, w)));
- Contract.Assert(body != null);
- res = Gen.AndSimp(res,
- Gen.Forall(w,
- Gen.Trigger(true, antecedent1, antecedent2),
- body));
- }
-
- // Ancestors of c are only c itself and the ancestors of the
- // parents of c
- VCExpr minAncestors = Gen.Eq(cAsVar, w);
- Contract.Assert(minAncestors != null);
- foreach (ConstantParent p in c.Parents) {
- Contract.Assert(p != null);
- minAncestors =
- Gen.Or(minAncestors,
- Gen.AtMost(Translator.LookupVariable(cce.NonNull(p.Parent.Decl)), w));
- }
- VCExpr antecedent = Gen.AtMost(cAsVar, w);
- Contract.Assert(antecedent != null);
- res = Gen.AndSimp(res,
- Gen.Forall(w,
- Gen.Trigger(true, antecedent),
- Gen.Implies(antecedent, minAncestors)));
-
- // Constraints for unique child-parent edges
- foreach (ConstantParent p in c.Parents) {
- Contract.Assert(p != null);
- if (p.Unique)
- res =
- Gen.AndSimp(res,
- GenUniqueParentConstraint(c, cce.NonNull((Constant)p.Parent.Decl)));
- }
-
- return res;
- }
-
- // Generate axioms that state that all direct children of c are
- // specified; this is the dual of the axiom stating that all direct
- // ancestors of a constant are known
- private VCExpr GenCompleteChildrenConstraints(Constant c) {
- Contract.Requires(c != null);
- Contract.Requires(c.ChildrenComplete);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
-
- VCExprVar cAsVar = Translator.LookupVariable(c);
- VCExprVar w = Gen.Variable("w", c.TypedIdent.Type);
-
- VCExpr maxDescendants = Gen.Eq(cAsVar, w);
- foreach (Constant d in Constants) {
- Contract.Assert(d != null);
- if (d.Parents != null && d.Parents.Any(p => c.Equals(p.Parent.Decl)))
- maxDescendants = Gen.Or(maxDescendants,
- Gen.AtMost(w, Translator.LookupVariable(d)));
- }
-
- VCExpr antecedent = Gen.AtMost(w, cAsVar);
- Contract.Assert(antecedent != null);
- return Gen.Forall(w,
- Gen.Trigger(true, antecedent),
- Gen.Implies(antecedent, maxDescendants));
- }
-
- private void CloseChildrenCompleteConstants() {
- foreach (Constant c in CompleteConstantsOpen) {
- Contract.Assert(c != null);
- AddAxiom(GenCompleteChildrenConstraints(c));
- }
- CompleteConstantsOpen.Clear();
- }
-
- // Generate the axiom ensuring that the sub-dags underneath unique
- // child-parent edges are all disjoint
- private VCExpr GenUniqueParentConstraint(Constant child, Constant parent) {
- Contract.Requires(child != null);
- Contract.Requires(parent != null);
- Contract.Requires(child.TypedIdent.Type.Equals(parent.TypedIdent.Type));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
-
-
- VCExprVar w = Gen.Variable("w", child.TypedIdent.Type);
- Contract.Assert(w != null);
- VCExpr antecedent =
- Gen.AtMost(w, Translator.LookupVariable(child));
- Contract.Assert(antecedent != null);
- VCExpr succedent =
- Gen.Eq(Gen.Function(OneStepFunFor(child.TypedIdent.Type),
- Translator.LookupVariable(parent), w),
- Translator.LookupVariable(child));
- Contract.Assert(succedent != null);
-
- return Gen.Forall(w,
- Gen.Trigger(true, antecedent),
- Gen.Implies(antecedent, succedent));
- }
-
- }
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Linq;
+using System.Diagnostics.Contracts;
+using Microsoft.Boogie.VCExprAST;
+
+// Class for constructing and collecting the axioms of the partial
+// order <:. The class also manages "unique" attributes of constants
+// and generated the necessary assumptions for the theorem prover.
+
+// TODO: there should be an interface so that different ways to handle
+// ordering relations can be accessed uniformly
+
+namespace Microsoft.Boogie {
+
+ public class OrderingAxiomBuilder {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(Gen != null);
+ Contract.Invariant(Translator != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(OneStepFuns));
+ Contract.Invariant(cce.NonNullElements(Constants));
+ Contract.Invariant(cce.NonNullElements(CompleteConstantsOpen));
+ Contract.Invariant(cce.NonNullElements(AllAxioms));
+ Contract.Invariant(cce.NonNullElements(IncAxioms));
+ }
+
+
+ private readonly VCExpressionGenerator Gen;
+ private readonly Boogie2VCExprTranslator Translator;
+ private readonly IDictionary<Type, Function> OneStepFuns;
+ private readonly List<Constant> Constants = new List<Constant>();
+
+ // A list to handle constants whose direct children are fully
+ // specified (the "complete" keyword). Constants are removed from
+ // the list as soon as the corresponding axiom has been generated,
+ // which means that from this point on no further children can be
+ // added
+ private readonly List<Constant> CompleteConstantsOpen = new List<Constant>();
+
+ // list in which all axioms are collected
+ private readonly List<VCExpr> AllAxioms = new List<VCExpr>();
+
+ // list in which axioms are incrementally collected
+ private readonly List<VCExpr> IncAxioms = new List<VCExpr>();
+
+
+ public OrderingAxiomBuilder(VCExpressionGenerator gen,
+ Boogie2VCExprTranslator translator) {
+ Contract.Requires(gen != null);
+ Contract.Requires(translator != null);
+ this.Gen = gen;
+ this.Translator = translator;
+ OneStepFuns = new Dictionary<Type, Function>();
+ Constants = new List<Constant>();
+ CompleteConstantsOpen = new List<Constant>();
+ AllAxioms = new List<VCExpr>();
+ IncAxioms = new List<VCExpr>();
+ }
+
+ public OrderingAxiomBuilder(VCExpressionGenerator gen,
+ Boogie2VCExprTranslator translator,
+ OrderingAxiomBuilder builder) {
+ Contract.Requires(gen != null);
+ Contract.Requires(translator != null);
+ Contract.Requires(builder != null);
+ this.Gen = gen;
+ this.Translator = translator;
+ OneStepFuns = new Dictionary<Type, Function>(builder.OneStepFuns);
+ Constants = new List<Constant>(builder.Constants);
+ CompleteConstantsOpen = new List<Constant>(builder.CompleteConstantsOpen);
+ AllAxioms = new List<VCExpr>(builder.AllAxioms);
+ IncAxioms = new List<VCExpr>(builder.IncAxioms);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // Used to axiomatise the disjoint-sub-dag specs that are
+ // described by parents with the "unique" flag
+
+
+ private Function OneStepFunFor(Type t) {
+ Contract.Requires(t != null);
+ Contract.Ensures(Contract.Result<Function>() != null);
+
+ Function res;
+ if (!OneStepFuns.TryGetValue(t, out res)) {
+ List<Variable> args = new List<Variable>();
+ args.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "arg0", t), true));
+ args.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "arg1", t), true));
+ Formal result = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "res", t), false);
+ res = new Function(Token.NoToken, "oneStep", new List<TypeVariable>(), args, result);
+ OneStepFuns.Add(t, res);
+ }
+ return cce.NonNull(res);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+
+ private void AddAxiom(VCExpr axiom) {
+ Contract.Requires(axiom != null);
+ if (axiom.Equals(VCExpressionGenerator.True))
+ return;
+ AllAxioms.Add(axiom);
+ IncAxioms.Add(axiom);
+ }
+
+ // Return all axioms that were added since the last time NewAxioms
+ // was called
+ public VCExpr GetNewAxioms() {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ CloseChildrenCompleteConstants();
+ VCExpr res = Gen.NAry(VCExpressionGenerator.AndOp, IncAxioms);
+ IncAxioms.Clear();
+ return res;
+ }
+
+ // return all axioms
+ public VCExpr Axioms {
+ get {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ CloseChildrenCompleteConstants();
+ return Gen.NAry(VCExpressionGenerator.AndOp, AllAxioms);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ // Generate the normal axioms for a partial order relation
+ public void Setup() {
+ TypeVariable alpha = new TypeVariable(Token.NoToken, "alpha");
+ Contract.Assert(alpha != null);
+ List<TypeVariable> typeParams = new List<TypeVariable>();
+ typeParams.Add(alpha);
+
+ List<VCTrigger> triggers = new List<VCTrigger>();
+
+ VCExprVar x = Gen.Variable("x", alpha);
+ Contract.Assert(x != null);
+ VCExprVar y = Gen.Variable("y", alpha);
+ Contract.Assert(y != null);
+ VCExprVar z = Gen.Variable("z", alpha);
+ Contract.Assert(z != null);
+
+ List<VCExprVar> boundVars = new List<VCExprVar>();
+
+ // reflexivity
+ boundVars.Add(x);
+ AddAxiom(Gen.Forall(typeParams, boundVars, triggers,
+ new VCQuantifierInfos("bg:subtype-refl", -1, false, null),
+ Gen.AtMost(x, x)));
+
+ // transitivity
+ boundVars = new List<VCExprVar>();
+ boundVars.Add(x);
+ boundVars.Add(y);
+ boundVars.Add(z);
+ triggers = new List<VCTrigger>();
+ triggers.Add(Gen.Trigger(true, Gen.AtMost(x, y), Gen.AtMost(y, z)));
+ VCExpr body = Gen.Implies(Gen.And(Gen.AtMost(x, y), Gen.AtMost(y, z)),
+ Gen.AtMost(x, z));
+ Contract.Assert(body != null);
+ AddAxiom(Gen.Forall(typeParams, boundVars, triggers,
+ new VCQuantifierInfos("bg:subtype-trans", -1, false, null),
+ body));
+
+ // anti-symmetry
+ boundVars = new List<VCExprVar>();
+ boundVars.Add(x);
+ boundVars.Add(y);
+ triggers = new List<VCTrigger>();
+ triggers.Add(Gen.Trigger(true, Gen.AtMost(x, y), Gen.AtMost(y, x)));
+ body = Gen.Implies(Gen.And(Gen.AtMost(x, y), Gen.AtMost(y, x)),
+ Gen.Eq(x, y));
+ AddAxiom(Gen.Forall(typeParams, boundVars, triggers,
+ new VCQuantifierInfos("bg:subtype-antisymm", -1, false, null),
+ body));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ public void AddConstant(Constant c) {
+ Contract.Requires(c != null);
+ AddAxiom(GenParentConstraints(c));
+ Constants.Add(c);
+ if (c.ChildrenComplete)
+ CompleteConstantsOpen.Add(c);
+
+ // ensure that no further children are added to closed
+ // children-complete constants
+ Contract.Assert(!(c.Parents != null && Contract.Exists(c.Parents, p => cce.NonNull((Constant)p.Parent.Decl).ChildrenComplete && !CompleteConstantsOpen.Contains((Constant)p.Parent.Decl))));
+ }
+
+ // Generate the constraints telling that parents of a constant are
+ // strictly greater than the constant itself, and are the minimal
+ // elements with this property
+ private VCExpr GenParentConstraints(Constant c) {
+ Contract.Requires(c != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr res = VCExpressionGenerator.True;
+
+ if (c.Parents == null)
+ return res;
+
+ VCExprVar cAsVar = Translator.LookupVariable(c);
+ VCExprVar w = Gen.Variable("w", c.TypedIdent.Type);
+
+ // Parents of c are proper ancestors of c
+ foreach (ConstantParent p in c.Parents) {
+ Contract.Assert(p != null);
+ VCExprVar par = Translator.LookupVariable(cce.NonNull(p.Parent.Decl));
+ res = Gen.AndSimp(res, Gen.Neq(cAsVar, par));
+ res = Gen.AndSimp(res, Gen.AtMost(cAsVar, par));
+ }
+
+ // Parents are direct ancestors of c (no other elements are in
+ // between c and a parent)
+ foreach (ConstantParent p in c.Parents) {
+ Contract.Assert(p != null);
+ VCExprVar par = Translator.LookupVariable(cce.NonNull(p.Parent.Decl));
+ Contract.Assert(par != null);
+ VCExpr antecedent1 = Gen.AtMost(cAsVar, w);
+ Contract.Assert(antecedent1 != null);
+ VCExpr antecedent2 = Gen.AtMost(w, par);
+ Contract.Assert(antecedent2 != null);
+ VCExpr body = Gen.Implies(Gen.And(antecedent1, antecedent2),
+ Gen.Or(Gen.Eq(cAsVar, w), Gen.Eq(par, w)));
+ Contract.Assert(body != null);
+ res = Gen.AndSimp(res,
+ Gen.Forall(w,
+ Gen.Trigger(true, antecedent1, antecedent2),
+ body));
+ }
+
+ // Ancestors of c are only c itself and the ancestors of the
+ // parents of c
+ VCExpr minAncestors = Gen.Eq(cAsVar, w);
+ Contract.Assert(minAncestors != null);
+ foreach (ConstantParent p in c.Parents) {
+ Contract.Assert(p != null);
+ minAncestors =
+ Gen.Or(minAncestors,
+ Gen.AtMost(Translator.LookupVariable(cce.NonNull(p.Parent.Decl)), w));
+ }
+ VCExpr antecedent = Gen.AtMost(cAsVar, w);
+ Contract.Assert(antecedent != null);
+ res = Gen.AndSimp(res,
+ Gen.Forall(w,
+ Gen.Trigger(true, antecedent),
+ Gen.Implies(antecedent, minAncestors)));
+
+ // Constraints for unique child-parent edges
+ foreach (ConstantParent p in c.Parents) {
+ Contract.Assert(p != null);
+ if (p.Unique)
+ res =
+ Gen.AndSimp(res,
+ GenUniqueParentConstraint(c, cce.NonNull((Constant)p.Parent.Decl)));
+ }
+
+ return res;
+ }
+
+ // Generate axioms that state that all direct children of c are
+ // specified; this is the dual of the axiom stating that all direct
+ // ancestors of a constant are known
+ private VCExpr GenCompleteChildrenConstraints(Constant c) {
+ Contract.Requires(c != null);
+ Contract.Requires(c.ChildrenComplete);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+
+ VCExprVar cAsVar = Translator.LookupVariable(c);
+ VCExprVar w = Gen.Variable("w", c.TypedIdent.Type);
+
+ VCExpr maxDescendants = Gen.Eq(cAsVar, w);
+ foreach (Constant d in Constants) {
+ Contract.Assert(d != null);
+ if (d.Parents != null && d.Parents.Any(p => c.Equals(p.Parent.Decl)))
+ maxDescendants = Gen.Or(maxDescendants,
+ Gen.AtMost(w, Translator.LookupVariable(d)));
+ }
+
+ VCExpr antecedent = Gen.AtMost(w, cAsVar);
+ Contract.Assert(antecedent != null);
+ return Gen.Forall(w,
+ Gen.Trigger(true, antecedent),
+ Gen.Implies(antecedent, maxDescendants));
+ }
+
+ private void CloseChildrenCompleteConstants() {
+ foreach (Constant c in CompleteConstantsOpen) {
+ Contract.Assert(c != null);
+ AddAxiom(GenCompleteChildrenConstraints(c));
+ }
+ CompleteConstantsOpen.Clear();
+ }
+
+ // Generate the axiom ensuring that the sub-dags underneath unique
+ // child-parent edges are all disjoint
+ private VCExpr GenUniqueParentConstraint(Constant child, Constant parent) {
+ Contract.Requires(child != null);
+ Contract.Requires(parent != null);
+ Contract.Requires(child.TypedIdent.Type.Equals(parent.TypedIdent.Type));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+
+
+ VCExprVar w = Gen.Variable("w", child.TypedIdent.Type);
+ Contract.Assert(w != null);
+ VCExpr antecedent =
+ Gen.AtMost(w, Translator.LookupVariable(child));
+ Contract.Assert(antecedent != null);
+ VCExpr succedent =
+ Gen.Eq(Gen.Function(OneStepFunFor(child.TypedIdent.Type),
+ Translator.LookupVariable(parent), w),
+ Translator.LookupVariable(child));
+ Contract.Assert(succedent != null);
+
+ return Gen.Forall(w,
+ Gen.Trigger(true, antecedent),
+ Gen.Implies(antecedent, succedent));
+ }
+
+ }
+
+}
diff --git a/Source/VCGeneration/RPFP.cs b/Source/VCGeneration/RPFP.cs
index ed3842d5..9d38eb47 100644
--- a/Source/VCGeneration/RPFP.cs
+++ b/Source/VCGeneration/RPFP.cs
@@ -1,609 +1,609 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 2012 Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Term = Microsoft.Boogie.VCExprAST.VCExpr;
-using FuncDecl = Microsoft.Boogie.VCExprAST.VCExprOp;
-using Sort = Microsoft.Boogie.Type;
-using Microsoft.Boogie.VCExprAST;
-
-
-using Microsoft.Boogie.ExprExtensions;
-
-
-namespace Microsoft.Boogie
-{
-
-
-
-
- /** This class represents a relation post-fixed point (RPFP) problem as
- * a "problem graph". The graph consists of Nodes and hyper-edges.
- *
- * A node consists of
- * - Annotation, a symbolic relation
- * - Bound, a symbolic relation giving an upper bound on Annotation
- *
- *
- * A hyper-edge consists of:
- * - Children, a sequence of children Nodes,
- * - F, a symbolic relational transformer,
- * - Parent, a single parent Node.
- *
- * The graph is "solved" when:
- * - For every Node n, n.Annotation subseteq n.Bound
- * - For every hyperedge e, e.F(e.Children.Annotation) subseteq e.Parent.Annotation
- *
- * where, if x is a sequence of Nodes, x.Annotation is the sequences
- * of Annotations of the nodes in the sequence.
- *
- * A symbolic Transformer consists of
- * - RelParams, a sequence of relational symbols
- * - IndParams, a sequence of individual symbols
- * - Formula, a formula over RelParams and IndParams
- *
- * A Transformer t represents a function that takes sequence R of relations
- * and yields the relation lambda (t.Indparams). Formula(R/RelParams).
- *
- * As a special case, a nullary Transformer (where RelParams is the empty sequence)
- * represents a fixed relation.
- *
- * An RPFP consists of
- * - Nodes, a set of Nodes
- * - Edges, a set of hyper-edges
- * - Context, a prover context that contains formula AST's
- *
- * Multiple RPFP's can use the same Context, but you should be careful
- * that only one RPFP asserts constraints in the context at any time.
- *
- * */
- public class RPFP
- {
- /** Symbolic representation of a relational transformer */
- public class Transformer
- {
- public FuncDecl[] RelParams;
- public Term[] IndParams;
- public Term Formula;
- public RPFP owner;
-
- public Transformer Clone()
- {
- return (Transformer)this.MemberwiseClone();
- }
- }
-
- /** Create a symbolic transformer. */
- public Transformer CreateTransformer(FuncDecl[] _RelParams, Term[] _IndParams, Term _Formula)
- {
- Transformer t = new Transformer();
- t.RelParams = _RelParams;
- t.IndParams = _IndParams;
- t.Formula = _Formula;
- t.owner = this;
- return t;
- }
-
- /** Create a relation (nullary relational transformer) */
- public Transformer CreateRelation(Term[] _IndParams, Term _Formula)
- {
- return CreateTransformer(new FuncDecl[0], _IndParams, _Formula);
- }
-
- /** A node in the RPFP graph */
- public class Node
- {
- public FuncDecl Name;
- public Transformer Annotation;
- public Transformer Bound;
- public RPFP owner;
- public int number;
- public Edge Outgoing;
- public List<Edge> Incoming;
- public Term dual;
- public Node map;
- }
-
- /** Create a node in the graph. The input is a term R(v_1...v_n)
- * where R is an arbitrary relational symbol and v_1...v_n are
- * arbitary distinct variables. The names are only of mnemonic value,
- * however, the number and type of arguments determine the type
- * of the relation at this node. */
-
- public Node CreateNode(Term t)
- {
- Node n = new Node();
- // Microsoft.Boogie.VCExprAST.VCExprNAry tn = t as Microsoft.Boogie.VCExprAST.VCExprNAry;
- // Term[] _IndParams = tn.ToArray();
- Term[] _IndParams = t.GetAppArgs();
- FuncDecl Name = t.GetAppDecl();
- n.Annotation = CreateRelation(_IndParams,ctx.MkTrue());
- n.Bound = CreateRelation(_IndParams, ctx.MkTrue());
- n.owner = this;
- n.number = ++nodeCount;
- n.Name = Name; // just to have a unique name
- n.Incoming = new List<Edge>();
- return n;
- }
-
- /** Clone a node (can be from another graph). */
-
- public Node CloneNode(Node old)
- {
- Node n = new Node();
- n.Annotation = old.Annotation.Clone();
- n.Bound = old.Bound.Clone();
- n.owner = this;
- n.number = ++nodeCount;
- n.Name = old.Name; // just to have a unique name
- n.Incoming = new List<Edge>();
- return n;
- }
-
- /** This class represents a hyper-edge in the RPFP graph */
-
- public class Edge
- {
- public Transformer F;
- public Node Parent;
- public Node[] Children;
- public RPFP owner;
- public int number;
- public Edge map;
- public HashSet<string> labels;
- internal Term dual;
- internal TermDict<Term> valuation;
- }
-
-
- /** Create a hyper-edge. */
- public Edge CreateEdge(Node _Parent, Transformer _F, Node[] _Children)
- {
- Edge e = new Edge();
- e.Parent = _Parent;
- e.F = _F;
- e.Children = _Children;
- e.owner = this;
- e.number = ++edgeCount;
- _Parent.Outgoing = e;
- foreach (var c in _Children)
- if(c != null)
- c.Incoming.Add(e);
- return e;
- }
-
- /** Create an edge that lower-bounds its parent. */
- public Edge CreateLowerBoundEdge(Node _Parent)
- {
- return CreateEdge(_Parent, _Parent.Annotation, new RPFP.Node[0]);
- }
-
-
-
-
- /** Assert a background axiom. Background axioms can be used to provide the
- * theory of auxilliary functions or relations. All symbols appearing in
- * background axioms are considered global, and may appear in both transformer
- * and relational solutions. Semantically, a solution to the RPFP gives
- * an interpretation of the unknown relations for each interpretation of the
- * auxilliary symbols that is consistent with the axioms. Axioms should be
- * asserted before any calls to Push. They cannot be de-asserted by Pop. */
-
- public void AssertAxiom(Term t)
- {
- ctx.AddAxiom(t);
- }
-
- /** Do not call this. */
-
- public void RemoveAxiom(Term t)
- {
- ctx.RemoveAxiom(t);
- }
-
- /** Type of solve results */
- public enum LBool { False, True, Undef };
-
-
- /** Solve an RPFP graph. This means either strengthen the annotation
- * so that the bound at the given root node is satisfied, or
- * show that this cannot be done by giving a dual solution
- * (i.e., a counterexample).
- *
- * In the current implementation, this only works for graphs that
- * are:
- * - tree-like
- *
- * - closed.
- *
- * In a tree-like graph, every nod has out most one incoming and one out-going edge,
- * and there are no cycles. In a closed graph, every node has exactly one out-going
- * edge. This means that the leaves of the tree are all hyper-edges with no
- * children. Such an edge represents a relation (nullary transformer) and thus
- * a lower bound on its parent. The parameter root must be the root of this tree.
- *
- * If Solve returns LBool.False, this indicates success. The annotation of the tree
- * has been updated to satisfy the upper bound at the root.
- *
- * If Solve returns LBool.True, this indicates a counterexample. For each edge,
- * you can then call Eval to determine the values of symbols in the transformer formula.
- * You can also call Empty on a node to determine if its value in the counterexample
- * is the empty relation.
- *
- * \param root The root of the tree
- * \param persist Number of context pops through which result should persist
- *
- *
- */
-
- public LBool Solve(Node root, int persist)
- {
- return LBool.False; // TODO
- }
-
-
- /** Dispose of the dual model (counterexample) if there is one. */
-
- public void DisposeDualModel()
- {
- // TODO dualModel = null;
- }
-
-
- /** Determines the value in the counterexample of a symbol occuring in the transformer formula of
- * a given edge. */
-
- public Term Eval(Edge e, Term t)
- {
- if (e.valuation == null)
- e.valuation = new TermDict< Term>();
- if (e.valuation.ContainsKey(t))
- return e.valuation[t];
- return null; // TODO
- }
-
- /** Sets the value in the counterexample of a symbol occuring in the transformer formula of
- * a given edge. */
-
- public void SetValue(Edge e, Term variable, Term value)
- {
- if (e.valuation == null)
- e.valuation = new TermDict< Term>();
- e.valuation.Add(variable, value);
- }
-
-
- /** Returns true if the given node is empty in the primal solution. For proecudure summaries,
- this means that the procedure is not called in the current counter-model. */
-
- public bool Empty(Node p)
- {
- return false; // TODO
- }
-
- /** Push a scope. Assertions made after Push can be undone by Pop. */
-
- public void Push()
- {
- stack.Push(new stack_entry());
- // TODO: do we need push/pop?
- }
-
- /** Pop a scope (see Push). Note, you cannot pop axioms. */
-
- public void Pop(int num_scopes)
- {
- //TODO ctx.Pop((uint)num_scopes);
- for (uint i = 0; i < num_scopes; i++)
- {
- stack_entry back = stack.Pop();
- foreach (var e in back.edges)
- e.dual = null;
- foreach (var n in back.nodes)
- n.dual = null;
- }
- }
-
- public Context ctx;
-
- public class LogicSolver {
- public Context ctx;
- };
-
- public LogicSolver solver;
-
- static public LogicSolver CreateLogicSolver(Context _ctx){
- LogicSolver res = new LogicSolver();
- res.ctx = _ctx;
- return res;
- }
-
- /** This represents a conjecture that a given node is upper-boudned
- by bound. */
- public class Conjecture
- {
- public Node node;
- public Transformer bound;
- }
-
- /** This is a list of conjectures generated during solving. */
-
- public List<Conjecture> conjectures = new List<Conjecture>();
-
- /** Construct an RPFP graph with a given interpolating prover context. It is allowed to
- have multiple RPFP's use the same context, but you should never have teo RPFP's
- with the same conext asserting nodes or edges at the same time. Note, if you create
- axioms in one RPFP, them create a second RPFP with the same context, the second will
- inherit the axioms.
- */
-
- public RPFP(LogicSolver slvr)
- {
- solver = slvr;
- ctx = slvr.ctx;
- stack = new Stack<stack_entry>();
- stack.Push(new stack_entry());
- }
-
-
- /** Convert an array of clauses to an RPFP.
- */
-
- public void FromClauses(Term[] clauses){
- FuncDecl failName = ctx.MkFuncDecl("@Fail", ctx.MkBoolSort());
- foreach(var clause in clauses){
- Node foo = GetNodeFromClause(clause,failName);
- if(foo != null)
- nodes.Add(foo);
- }
- foreach (var clause in clauses)
- edges.Add(GetEdgeFromClause(clause,failName));
- }
-
-
- // This returns a new FuncDel with same sort as top-level function
- // of term t, but with numeric suffix appended to name.
-
- private FuncDecl SuffixFuncDecl(Term t, int n)
- {
- var name = t.GetAppDecl().GetDeclName() + "_" + n.ToString();
- return ctx.MkFuncDecl(name, t.GetAppDecl());
- }
-
- // Collect the relational paremeters
-
- Dictionary<FuncDecl, Node> relationToNode = new Dictionary<FuncDecl, Node>();
-
- private Term CollectParamsRec(TermDict<Term> memo, Term t, List<FuncDecl> parms, List<RPFP.Node> nodes, Dictionary<Term, Term> done)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- if (t.GetKind() == TermKind.App)
- {
- var f = t.GetAppDecl();
- Node node;
- if (relationToNode.TryGetValue(f, out node))
- {
- if (done.ContainsKey(t))
- res = done[t];
- else
- {
- f = SuffixFuncDecl(t, parms.Count);
- parms.Add(f);
- nodes.Add(node);
- done.Add(t,res); // don't count same expression twice!
- }
- }
- var args = t.GetAppArgs();
- args = args.Select(x => CollectParamsRec(memo, x, parms, nodes, done)).ToArray();
- res = ctx.CloneApp(t, args);
- } // TODO: handle quantifiers
- else
- res = t;
- memo.Add(t, res);
- return res;
- }
-
- private bool IsVariable(Term t)
- {
- // TODO: is this right?
- // return t.IsFunctionApp() && t.GetAppArgs().Length == 0;
- return t is VCExprVar && !(t is VCExprConstant);
- }
-
- private Edge GetEdgeFromClause(Term t, FuncDecl failName)
- {
- Term[] args = t.GetAppArgs();
- Term body = args[0];
- Term head = args[1];
- Term[] _IndParams;
- FuncDecl Name;
- if (head.IsFalse())
- {
- Name = failName;
- _IndParams = new Term[0];
- }
- else
- {
- _IndParams = head.GetAppArgs();
- Name = head.GetAppDecl();
- }
- for(int i = 0; i < _IndParams.Length; i++)
- if (!IsVariable(_IndParams[i]))
- {
- Term v = ctx.MkConst("@a" + i.ToString(), _IndParams[i].GetSort());
- body = ctx.MkAnd(body, ctx.MkEq(v, _IndParams[i]));
- _IndParams[i] = v;
- }
- var relParams = new List<FuncDecl>();
- var nodeParams = new List<RPFP.Node>();
- var memo = new TermDict< Term>();
- var done = new Dictionary<Term, Term>(); // note this hashes on equality, not reference!
- body = CollectParamsRec(memo, body, relParams, nodeParams,done);
- Transformer F = CreateTransformer(relParams.ToArray(), _IndParams, body);
- Node parent = relationToNode[Name];
- return CreateEdge(parent, F, nodeParams.ToArray());
- }
-
- private Node GetNodeFromClause(Term t, FuncDecl failName)
- {
- Term[] args = t.GetAppArgs();
- Term body = args[0];
- Term head = args[1];
- FuncDecl Name;
- Term[] _IndParams;
- bool is_query = false;
- if (head.Equals(ctx.MkFalse()))
- {
- Name = failName;
- is_query = true;
- _IndParams = new Term[0];
- }
- else
- {
- Name = head.GetAppDecl();
- _IndParams = head.GetAppArgs();
- }
- if (relationToNode.ContainsKey(Name))
- return null;
- for (int i = 0; i < _IndParams.Length; i++)
- if (!IsVariable(_IndParams[i]))
- {
- Term v = ctx.MkConst("@a" + i.ToString(), _IndParams[i].GetSort());
- _IndParams[i] = v;
- }
- Term foo = ctx.MkApp(Name, _IndParams);
- Node node = CreateNode(foo);
- relationToNode[Name] = node;
- if (is_query)
- node.Bound = CreateRelation(new Term[0], ctx.MkFalse());
- return node;
- }
-
- /////////////////////////////////////////////////////////////////////////////////////////
- // Convert RPFP to Z3 rules
- /////////////////////////////////////////////////////////////////////////////////////////
-
- /** Get the Z3 rule corresponding to an edge */
-
- public Term GetRule(Edge edge)
- {
- Dictionary<FuncDecl, FuncDecl> predSubst = new Dictionary<FuncDecl, FuncDecl>();
- for (int i = 0; i < edge.Children.Length; i++)
- predSubst.Add(edge.F.RelParams[i], edge.Children[i].Name);
- Term body = SubstPreds(predSubst, edge.F.Formula);
- Term head = ctx.MkApp(edge.Parent.Name, edge.F.IndParams);
- var rule = BindVariables(ctx.MkImplies(body, head));
- rule = ctx.Letify(rule); // put in let bindings for theorem prover
- return rule;
- }
-
- /** Get the Z3 query corresponding to the conjunction of the node bounds. */
-
- public Term GetQuery()
- {
- List<Term> conjuncts = new List<Term>();
- foreach (var node in nodes)
- {
- if (node.Bound.Formula != ctx.MkTrue())
- conjuncts.Add(ctx.MkImplies(ctx.MkApp(node.Name, node.Bound.IndParams), node.Bound.Formula));
- }
- Term query = ctx.MkNot(ctx.MkAnd(conjuncts.ToArray()));
- query = BindVariables(query,false); // bind variables existentially
- query = ctx.Letify(query); // put in let bindings for theorem prover
- return query;
- }
-
- private void CollectVariables(TermDict< bool> memo, Term t, List<Term> vars)
- {
- if (memo.ContainsKey(t))
- return;
- if (IsVariable(t))
- vars.Add(t);
- if (t.GetKind() == TermKind.App)
- {
- foreach (var s in t.GetAppArgs())
- CollectVariables(memo, s, vars);
- }
- memo.Add(t, true);
- }
-
- private Term BindVariables(Term t, bool universal = true)
- {
- TermDict< bool> memo = new TermDict<bool>();
- List<Term> vars = new List<Term>();
- CollectVariables(memo,t,vars);
- return universal ? ctx.MkForall(vars.ToArray(), t) : ctx.MkExists(vars.ToArray(), t);
- }
-
- private Term SubstPredsRec(TermDict< Term> memo, Dictionary<FuncDecl,FuncDecl> subst, Term t)
- {
- Term res;
- if (memo.TryGetValue(t, out res))
- return res;
- if (t.GetKind() == TermKind.App)
- {
- var args = t.GetAppArgs();
- args = args.Select(x => SubstPredsRec(memo,subst,x)).ToArray();
- FuncDecl nf = null;
- var f = t.GetAppDecl();
- if (subst.TryGetValue(f, out nf))
- {
- res = ctx.MkApp(nf, args);
- }
- else
- {
- res = ctx.CloneApp(t, args);
- }
- } // TODO: handle quantifiers
- else
- res = t;
- memo.Add(t, res);
- return res;
- }
-
- private Term SubstPreds(Dictionary<FuncDecl, FuncDecl> subst, Term t)
- {
- TermDict< Term> memo = new TermDict< Term>();
- return SubstPredsRec(memo, subst, t);
- }
-
- /* Everything after here is private. */
-
- private class stack_entry
- {
- public List<Edge> edges = new List<Edge>();
- public List<Node> nodes = new List<Node>();
- };
-
- /** Set the model of the background theory used in a counterexample. */
- public void SetBackgroundModel(Model m)
- {
- dualModel = m;
- }
-
- /** Set the model of the background theory used in a counterexample. */
- public Model GetBackgroundModel()
- {
- return dualModel;
- }
-
- private int nodeCount = 0;
- private int edgeCount = 0;
- private Model dualModel;
- // private LabeledLiterals dualLabels;
- private Stack<stack_entry> stack;
- public List<Node> nodes = new List<Node>();
- public List<Edge> edges = new List<Edge>();
-
-
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2012 Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Term = Microsoft.Boogie.VCExprAST.VCExpr;
+using FuncDecl = Microsoft.Boogie.VCExprAST.VCExprOp;
+using Sort = Microsoft.Boogie.Type;
+using Microsoft.Boogie.VCExprAST;
+
+
+using Microsoft.Boogie.ExprExtensions;
+
+
+namespace Microsoft.Boogie
+{
+
+
+
+
+ /** This class represents a relation post-fixed point (RPFP) problem as
+ * a "problem graph". The graph consists of Nodes and hyper-edges.
+ *
+ * A node consists of
+ * - Annotation, a symbolic relation
+ * - Bound, a symbolic relation giving an upper bound on Annotation
+ *
+ *
+ * A hyper-edge consists of:
+ * - Children, a sequence of children Nodes,
+ * - F, a symbolic relational transformer,
+ * - Parent, a single parent Node.
+ *
+ * The graph is "solved" when:
+ * - For every Node n, n.Annotation subseteq n.Bound
+ * - For every hyperedge e, e.F(e.Children.Annotation) subseteq e.Parent.Annotation
+ *
+ * where, if x is a sequence of Nodes, x.Annotation is the sequences
+ * of Annotations of the nodes in the sequence.
+ *
+ * A symbolic Transformer consists of
+ * - RelParams, a sequence of relational symbols
+ * - IndParams, a sequence of individual symbols
+ * - Formula, a formula over RelParams and IndParams
+ *
+ * A Transformer t represents a function that takes sequence R of relations
+ * and yields the relation lambda (t.Indparams). Formula(R/RelParams).
+ *
+ * As a special case, a nullary Transformer (where RelParams is the empty sequence)
+ * represents a fixed relation.
+ *
+ * An RPFP consists of
+ * - Nodes, a set of Nodes
+ * - Edges, a set of hyper-edges
+ * - Context, a prover context that contains formula AST's
+ *
+ * Multiple RPFP's can use the same Context, but you should be careful
+ * that only one RPFP asserts constraints in the context at any time.
+ *
+ * */
+ public class RPFP
+ {
+ /** Symbolic representation of a relational transformer */
+ public class Transformer
+ {
+ public FuncDecl[] RelParams;
+ public Term[] IndParams;
+ public Term Formula;
+ public RPFP owner;
+
+ public Transformer Clone()
+ {
+ return (Transformer)this.MemberwiseClone();
+ }
+ }
+
+ /** Create a symbolic transformer. */
+ public Transformer CreateTransformer(FuncDecl[] _RelParams, Term[] _IndParams, Term _Formula)
+ {
+ Transformer t = new Transformer();
+ t.RelParams = _RelParams;
+ t.IndParams = _IndParams;
+ t.Formula = _Formula;
+ t.owner = this;
+ return t;
+ }
+
+ /** Create a relation (nullary relational transformer) */
+ public Transformer CreateRelation(Term[] _IndParams, Term _Formula)
+ {
+ return CreateTransformer(new FuncDecl[0], _IndParams, _Formula);
+ }
+
+ /** A node in the RPFP graph */
+ public class Node
+ {
+ public FuncDecl Name;
+ public Transformer Annotation;
+ public Transformer Bound;
+ public RPFP owner;
+ public int number;
+ public Edge Outgoing;
+ public List<Edge> Incoming;
+ public Term dual;
+ public Node map;
+ }
+
+ /** Create a node in the graph. The input is a term R(v_1...v_n)
+ * where R is an arbitrary relational symbol and v_1...v_n are
+ * arbitary distinct variables. The names are only of mnemonic value,
+ * however, the number and type of arguments determine the type
+ * of the relation at this node. */
+
+ public Node CreateNode(Term t)
+ {
+ Node n = new Node();
+ // Microsoft.Boogie.VCExprAST.VCExprNAry tn = t as Microsoft.Boogie.VCExprAST.VCExprNAry;
+ // Term[] _IndParams = tn.ToArray();
+ Term[] _IndParams = t.GetAppArgs();
+ FuncDecl Name = t.GetAppDecl();
+ n.Annotation = CreateRelation(_IndParams,ctx.MkTrue());
+ n.Bound = CreateRelation(_IndParams, ctx.MkTrue());
+ n.owner = this;
+ n.number = ++nodeCount;
+ n.Name = Name; // just to have a unique name
+ n.Incoming = new List<Edge>();
+ return n;
+ }
+
+ /** Clone a node (can be from another graph). */
+
+ public Node CloneNode(Node old)
+ {
+ Node n = new Node();
+ n.Annotation = old.Annotation.Clone();
+ n.Bound = old.Bound.Clone();
+ n.owner = this;
+ n.number = ++nodeCount;
+ n.Name = old.Name; // just to have a unique name
+ n.Incoming = new List<Edge>();
+ return n;
+ }
+
+ /** This class represents a hyper-edge in the RPFP graph */
+
+ public class Edge
+ {
+ public Transformer F;
+ public Node Parent;
+ public Node[] Children;
+ public RPFP owner;
+ public int number;
+ public Edge map;
+ public HashSet<string> labels;
+ internal Term dual;
+ internal TermDict<Term> valuation;
+ }
+
+
+ /** Create a hyper-edge. */
+ public Edge CreateEdge(Node _Parent, Transformer _F, Node[] _Children)
+ {
+ Edge e = new Edge();
+ e.Parent = _Parent;
+ e.F = _F;
+ e.Children = _Children;
+ e.owner = this;
+ e.number = ++edgeCount;
+ _Parent.Outgoing = e;
+ foreach (var c in _Children)
+ if(c != null)
+ c.Incoming.Add(e);
+ return e;
+ }
+
+ /** Create an edge that lower-bounds its parent. */
+ public Edge CreateLowerBoundEdge(Node _Parent)
+ {
+ return CreateEdge(_Parent, _Parent.Annotation, new RPFP.Node[0]);
+ }
+
+
+
+
+ /** Assert a background axiom. Background axioms can be used to provide the
+ * theory of auxilliary functions or relations. All symbols appearing in
+ * background axioms are considered global, and may appear in both transformer
+ * and relational solutions. Semantically, a solution to the RPFP gives
+ * an interpretation of the unknown relations for each interpretation of the
+ * auxilliary symbols that is consistent with the axioms. Axioms should be
+ * asserted before any calls to Push. They cannot be de-asserted by Pop. */
+
+ public void AssertAxiom(Term t)
+ {
+ ctx.AddAxiom(t);
+ }
+
+ /** Do not call this. */
+
+ public void RemoveAxiom(Term t)
+ {
+ ctx.RemoveAxiom(t);
+ }
+
+ /** Type of solve results */
+ public enum LBool { False, True, Undef };
+
+
+ /** Solve an RPFP graph. This means either strengthen the annotation
+ * so that the bound at the given root node is satisfied, or
+ * show that this cannot be done by giving a dual solution
+ * (i.e., a counterexample).
+ *
+ * In the current implementation, this only works for graphs that
+ * are:
+ * - tree-like
+ *
+ * - closed.
+ *
+ * In a tree-like graph, every nod has out most one incoming and one out-going edge,
+ * and there are no cycles. In a closed graph, every node has exactly one out-going
+ * edge. This means that the leaves of the tree are all hyper-edges with no
+ * children. Such an edge represents a relation (nullary transformer) and thus
+ * a lower bound on its parent. The parameter root must be the root of this tree.
+ *
+ * If Solve returns LBool.False, this indicates success. The annotation of the tree
+ * has been updated to satisfy the upper bound at the root.
+ *
+ * If Solve returns LBool.True, this indicates a counterexample. For each edge,
+ * you can then call Eval to determine the values of symbols in the transformer formula.
+ * You can also call Empty on a node to determine if its value in the counterexample
+ * is the empty relation.
+ *
+ * \param root The root of the tree
+ * \param persist Number of context pops through which result should persist
+ *
+ *
+ */
+
+ public LBool Solve(Node root, int persist)
+ {
+ return LBool.False; // TODO
+ }
+
+
+ /** Dispose of the dual model (counterexample) if there is one. */
+
+ public void DisposeDualModel()
+ {
+ // TODO dualModel = null;
+ }
+
+
+ /** Determines the value in the counterexample of a symbol occuring in the transformer formula of
+ * a given edge. */
+
+ public Term Eval(Edge e, Term t)
+ {
+ if (e.valuation == null)
+ e.valuation = new TermDict< Term>();
+ if (e.valuation.ContainsKey(t))
+ return e.valuation[t];
+ return null; // TODO
+ }
+
+ /** Sets the value in the counterexample of a symbol occuring in the transformer formula of
+ * a given edge. */
+
+ public void SetValue(Edge e, Term variable, Term value)
+ {
+ if (e.valuation == null)
+ e.valuation = new TermDict< Term>();
+ e.valuation.Add(variable, value);
+ }
+
+
+ /** Returns true if the given node is empty in the primal solution. For proecudure summaries,
+ this means that the procedure is not called in the current counter-model. */
+
+ public bool Empty(Node p)
+ {
+ return false; // TODO
+ }
+
+ /** Push a scope. Assertions made after Push can be undone by Pop. */
+
+ public void Push()
+ {
+ stack.Push(new stack_entry());
+ // TODO: do we need push/pop?
+ }
+
+ /** Pop a scope (see Push). Note, you cannot pop axioms. */
+
+ public void Pop(int num_scopes)
+ {
+ //TODO ctx.Pop((uint)num_scopes);
+ for (uint i = 0; i < num_scopes; i++)
+ {
+ stack_entry back = stack.Pop();
+ foreach (var e in back.edges)
+ e.dual = null;
+ foreach (var n in back.nodes)
+ n.dual = null;
+ }
+ }
+
+ public Context ctx;
+
+ public class LogicSolver {
+ public Context ctx;
+ };
+
+ public LogicSolver solver;
+
+ static public LogicSolver CreateLogicSolver(Context _ctx){
+ LogicSolver res = new LogicSolver();
+ res.ctx = _ctx;
+ return res;
+ }
+
+ /** This represents a conjecture that a given node is upper-boudned
+ by bound. */
+ public class Conjecture
+ {
+ public Node node;
+ public Transformer bound;
+ }
+
+ /** This is a list of conjectures generated during solving. */
+
+ public List<Conjecture> conjectures = new List<Conjecture>();
+
+ /** Construct an RPFP graph with a given interpolating prover context. It is allowed to
+ have multiple RPFP's use the same context, but you should never have teo RPFP's
+ with the same conext asserting nodes or edges at the same time. Note, if you create
+ axioms in one RPFP, them create a second RPFP with the same context, the second will
+ inherit the axioms.
+ */
+
+ public RPFP(LogicSolver slvr)
+ {
+ solver = slvr;
+ ctx = slvr.ctx;
+ stack = new Stack<stack_entry>();
+ stack.Push(new stack_entry());
+ }
+
+
+ /** Convert an array of clauses to an RPFP.
+ */
+
+ public void FromClauses(Term[] clauses){
+ FuncDecl failName = ctx.MkFuncDecl("@Fail", ctx.MkBoolSort());
+ foreach(var clause in clauses){
+ Node foo = GetNodeFromClause(clause,failName);
+ if(foo != null)
+ nodes.Add(foo);
+ }
+ foreach (var clause in clauses)
+ edges.Add(GetEdgeFromClause(clause,failName));
+ }
+
+
+ // This returns a new FuncDel with same sort as top-level function
+ // of term t, but with numeric suffix appended to name.
+
+ private FuncDecl SuffixFuncDecl(Term t, int n)
+ {
+ var name = t.GetAppDecl().GetDeclName() + "_" + n.ToString();
+ return ctx.MkFuncDecl(name, t.GetAppDecl());
+ }
+
+ // Collect the relational paremeters
+
+ Dictionary<FuncDecl, Node> relationToNode = new Dictionary<FuncDecl, Node>();
+
+ private Term CollectParamsRec(TermDict<Term> memo, Term t, List<FuncDecl> parms, List<RPFP.Node> nodes, Dictionary<Term, Term> done)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ if (t.GetKind() == TermKind.App)
+ {
+ var f = t.GetAppDecl();
+ Node node;
+ if (relationToNode.TryGetValue(f, out node))
+ {
+ if (done.ContainsKey(t))
+ res = done[t];
+ else
+ {
+ f = SuffixFuncDecl(t, parms.Count);
+ parms.Add(f);
+ nodes.Add(node);
+ done.Add(t,res); // don't count same expression twice!
+ }
+ }
+ var args = t.GetAppArgs();
+ args = args.Select(x => CollectParamsRec(memo, x, parms, nodes, done)).ToArray();
+ res = ctx.CloneApp(t, args);
+ } // TODO: handle quantifiers
+ else
+ res = t;
+ memo.Add(t, res);
+ return res;
+ }
+
+ private bool IsVariable(Term t)
+ {
+ // TODO: is this right?
+ // return t.IsFunctionApp() && t.GetAppArgs().Length == 0;
+ return t is VCExprVar && !(t is VCExprConstant);
+ }
+
+ private Edge GetEdgeFromClause(Term t, FuncDecl failName)
+ {
+ Term[] args = t.GetAppArgs();
+ Term body = args[0];
+ Term head = args[1];
+ Term[] _IndParams;
+ FuncDecl Name;
+ if (head.IsFalse())
+ {
+ Name = failName;
+ _IndParams = new Term[0];
+ }
+ else
+ {
+ _IndParams = head.GetAppArgs();
+ Name = head.GetAppDecl();
+ }
+ for(int i = 0; i < _IndParams.Length; i++)
+ if (!IsVariable(_IndParams[i]))
+ {
+ Term v = ctx.MkConst("@a" + i.ToString(), _IndParams[i].GetSort());
+ body = ctx.MkAnd(body, ctx.MkEq(v, _IndParams[i]));
+ _IndParams[i] = v;
+ }
+ var relParams = new List<FuncDecl>();
+ var nodeParams = new List<RPFP.Node>();
+ var memo = new TermDict< Term>();
+ var done = new Dictionary<Term, Term>(); // note this hashes on equality, not reference!
+ body = CollectParamsRec(memo, body, relParams, nodeParams,done);
+ Transformer F = CreateTransformer(relParams.ToArray(), _IndParams, body);
+ Node parent = relationToNode[Name];
+ return CreateEdge(parent, F, nodeParams.ToArray());
+ }
+
+ private Node GetNodeFromClause(Term t, FuncDecl failName)
+ {
+ Term[] args = t.GetAppArgs();
+ Term body = args[0];
+ Term head = args[1];
+ FuncDecl Name;
+ Term[] _IndParams;
+ bool is_query = false;
+ if (head.Equals(ctx.MkFalse()))
+ {
+ Name = failName;
+ is_query = true;
+ _IndParams = new Term[0];
+ }
+ else
+ {
+ Name = head.GetAppDecl();
+ _IndParams = head.GetAppArgs();
+ }
+ if (relationToNode.ContainsKey(Name))
+ return null;
+ for (int i = 0; i < _IndParams.Length; i++)
+ if (!IsVariable(_IndParams[i]))
+ {
+ Term v = ctx.MkConst("@a" + i.ToString(), _IndParams[i].GetSort());
+ _IndParams[i] = v;
+ }
+ Term foo = ctx.MkApp(Name, _IndParams);
+ Node node = CreateNode(foo);
+ relationToNode[Name] = node;
+ if (is_query)
+ node.Bound = CreateRelation(new Term[0], ctx.MkFalse());
+ return node;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////////
+ // Convert RPFP to Z3 rules
+ /////////////////////////////////////////////////////////////////////////////////////////
+
+ /** Get the Z3 rule corresponding to an edge */
+
+ public Term GetRule(Edge edge)
+ {
+ Dictionary<FuncDecl, FuncDecl> predSubst = new Dictionary<FuncDecl, FuncDecl>();
+ for (int i = 0; i < edge.Children.Length; i++)
+ predSubst.Add(edge.F.RelParams[i], edge.Children[i].Name);
+ Term body = SubstPreds(predSubst, edge.F.Formula);
+ Term head = ctx.MkApp(edge.Parent.Name, edge.F.IndParams);
+ var rule = BindVariables(ctx.MkImplies(body, head));
+ rule = ctx.Letify(rule); // put in let bindings for theorem prover
+ return rule;
+ }
+
+ /** Get the Z3 query corresponding to the conjunction of the node bounds. */
+
+ public Term GetQuery()
+ {
+ List<Term> conjuncts = new List<Term>();
+ foreach (var node in nodes)
+ {
+ if (node.Bound.Formula != ctx.MkTrue())
+ conjuncts.Add(ctx.MkImplies(ctx.MkApp(node.Name, node.Bound.IndParams), node.Bound.Formula));
+ }
+ Term query = ctx.MkNot(ctx.MkAnd(conjuncts.ToArray()));
+ query = BindVariables(query,false); // bind variables existentially
+ query = ctx.Letify(query); // put in let bindings for theorem prover
+ return query;
+ }
+
+ private void CollectVariables(TermDict< bool> memo, Term t, List<Term> vars)
+ {
+ if (memo.ContainsKey(t))
+ return;
+ if (IsVariable(t))
+ vars.Add(t);
+ if (t.GetKind() == TermKind.App)
+ {
+ foreach (var s in t.GetAppArgs())
+ CollectVariables(memo, s, vars);
+ }
+ memo.Add(t, true);
+ }
+
+ private Term BindVariables(Term t, bool universal = true)
+ {
+ TermDict< bool> memo = new TermDict<bool>();
+ List<Term> vars = new List<Term>();
+ CollectVariables(memo,t,vars);
+ return universal ? ctx.MkForall(vars.ToArray(), t) : ctx.MkExists(vars.ToArray(), t);
+ }
+
+ private Term SubstPredsRec(TermDict< Term> memo, Dictionary<FuncDecl,FuncDecl> subst, Term t)
+ {
+ Term res;
+ if (memo.TryGetValue(t, out res))
+ return res;
+ if (t.GetKind() == TermKind.App)
+ {
+ var args = t.GetAppArgs();
+ args = args.Select(x => SubstPredsRec(memo,subst,x)).ToArray();
+ FuncDecl nf = null;
+ var f = t.GetAppDecl();
+ if (subst.TryGetValue(f, out nf))
+ {
+ res = ctx.MkApp(nf, args);
+ }
+ else
+ {
+ res = ctx.CloneApp(t, args);
+ }
+ } // TODO: handle quantifiers
+ else
+ res = t;
+ memo.Add(t, res);
+ return res;
+ }
+
+ private Term SubstPreds(Dictionary<FuncDecl, FuncDecl> subst, Term t)
+ {
+ TermDict< Term> memo = new TermDict< Term>();
+ return SubstPredsRec(memo, subst, t);
+ }
+
+ /* Everything after here is private. */
+
+ private class stack_entry
+ {
+ public List<Edge> edges = new List<Edge>();
+ public List<Node> nodes = new List<Node>();
+ };
+
+ /** Set the model of the background theory used in a counterexample. */
+ public void SetBackgroundModel(Model m)
+ {
+ dualModel = m;
+ }
+
+ /** Set the model of the background theory used in a counterexample. */
+ public Model GetBackgroundModel()
+ {
+ return dualModel;
+ }
+
+ private int nodeCount = 0;
+ private int edgeCount = 0;
+ private Model dualModel;
+ // private LabeledLiterals dualLabels;
+ private Stack<stack_entry> stack;
+ public List<Node> nodes = new List<Node>();
+ public List<Edge> edges = new List<Edge>();
+
+
+ }
+}
diff --git a/Source/VCGeneration/StratifiedVC.cs b/Source/VCGeneration/StratifiedVC.cs
index 6f8d3668..789f86f5 100644
--- a/Source/VCGeneration/StratifiedVC.cs
+++ b/Source/VCGeneration/StratifiedVC.cs
@@ -1,2914 +1,2906 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC {
- using Bpl = Microsoft.Boogie;
-
- public class StratifiedVC {
- public StratifiedInliningInfo info;
- public int id;
- public List<VCExprVar> interfaceExprVars;
-
- // boolControlVC (block -> its bool variable)
- public Dictionary<Block, VCExpr> blockToControlVar;
- // While using labels (block -> its label)
- public Dictionary<Absy, string> block2label;
-
- public Dictionary<Block, List<StratifiedCallSite>> callSites;
- public Dictionary<Block, List<StratifiedCallSite>> recordProcCallSites;
- public VCExpr vcexpr;
-
- // Must-Reach Information
- Dictionary<Block, VCExprVar> mustReachVar;
- List<VCExprLetBinding> mustReachBindings;
-
- public StratifiedVC(StratifiedInliningInfo siInfo, HashSet<string> procCalls) {
- info = siInfo;
- info.GenerateVC();
- var vcgen = info.vcgen;
- var prover = vcgen.prover;
- VCExpressionGenerator gen = prover.VCExprGen;
- var bet = prover.Context.BoogieExprTranslator;
-
- vcexpr = info.vcexpr;
- id = vcgen.CreateNewId();
- interfaceExprVars = new List<VCExprVar>();
- Dictionary<VCExprVar, VCExpr> substDict = new Dictionary<VCExprVar, VCExpr>();
- foreach (VCExprVar v in info.interfaceExprVars) {
- VCExprVar newVar = vcgen.CreateNewVar(v.Type);
- interfaceExprVars.Add(newVar);
- substDict.Add(v, newVar);
- }
- foreach (VCExprVar v in info.privateExprVars) {
- substDict.Add(v, vcgen.CreateNewVar(v.Type));
- }
- if(info.controlFlowVariable != null)
- substDict.Add(bet.LookupVariable(info.controlFlowVariable), gen.Integer(BigNum.FromInt(id)));
- VCExprSubstitution subst = new VCExprSubstitution(substDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
- SubstitutingVCExprVisitor substVisitor = new SubstitutingVCExprVisitor(prover.VCExprGen);
- vcexpr = substVisitor.Mutate(vcexpr, subst);
-
- // For BoolControlVC generation
- if (info.blockToControlVar != null)
- {
- blockToControlVar = new Dictionary<Block, VCExpr>();
- foreach (var tup in info.blockToControlVar)
- blockToControlVar.Add(tup.Key, substDict[tup.Value]);
- }
-
- // labels
- if (info.label2absy != null)
- {
- block2label = new Dictionary<Absy, string>();
- vcexpr = RenameVCExprLabels.Apply(vcexpr, info.vcgen.prover.VCExprGen, info.label2absy, block2label);
- }
-
- if(procCalls != null)
- vcexpr = RemoveProcedureCalls.Apply(vcexpr, info.vcgen.prover.VCExprGen, procCalls);
-
- callSites = new Dictionary<Block, List<StratifiedCallSite>>();
- foreach (Block b in info.callSites.Keys) {
- callSites[b] = new List<StratifiedCallSite>();
- foreach (CallSite cs in info.callSites[b]) {
- callSites[b].Add(new StratifiedCallSite(cs, substVisitor, subst));
- }
- }
-
- recordProcCallSites = new Dictionary<Block, List<StratifiedCallSite>>();
- foreach (Block b in info.recordProcCallSites.Keys) {
- recordProcCallSites[b] = new List<StratifiedCallSite>();
- foreach (CallSite cs in info.recordProcCallSites[b]) {
- recordProcCallSites[b].Add(new StratifiedCallSite(cs, substVisitor, subst));
- }
- }
- }
-
- public VCExpr MustReach(Block block)
- {
- Contract.Assert(!CommandLineOptions.Clo.UseLabels);
-
- // This information is computed lazily
- if (mustReachBindings == null)
- {
- var vcgen = info.vcgen;
- var gen = vcgen.prover.VCExprGen;
- var impl = info.impl;
- mustReachVar = new Dictionary<Block, VCExprVar>();
- mustReachBindings = new List<VCExprLetBinding>();
- foreach (Block b in impl.Blocks)
- mustReachVar[b] = vcgen.CreateNewVar(Bpl.Type.Bool);
-
- var dag = new Graph<Block>();
- dag.AddSource(impl.Blocks[0]);
- foreach (Block b in impl.Blocks)
- {
- var gtc = b.TransferCmd as GotoCmd;
- if (gtc != null)
- foreach (Block dest in gtc.labelTargets)
- dag.AddEdge(dest, b);
- }
- IEnumerable sortedNodes = dag.TopologicalSort();
-
- foreach (Block currBlock in dag.TopologicalSort())
- {
- if (currBlock == impl.Blocks[0])
- {
- mustReachBindings.Add(gen.LetBinding(mustReachVar[currBlock], VCExpressionGenerator.True));
- continue;
- }
-
- VCExpr expr = VCExpressionGenerator.False;
- foreach (var pred in dag.Successors(currBlock))
- {
- VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(gen.Integer(BigNum.FromInt(id)), gen.Integer(BigNum.FromInt(pred.UniqueId)));
- VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(currBlock.UniqueId)));
- expr = gen.Or(expr, gen.And(mustReachVar[pred], controlTransferExpr));
- }
- mustReachBindings.Add(gen.LetBinding(mustReachVar[currBlock], expr));
- }
- }
-
- Contract.Assert(mustReachVar.ContainsKey(block));
- return info.vcgen.prover.VCExprGen.Let(mustReachBindings, mustReachVar[block]);
- }
-
- public List<StratifiedCallSite> CallSites {
- get {
- var ret = new List<StratifiedCallSite>();
- foreach (var b in callSites.Keys) {
- foreach (var cs in callSites[b]) {
- ret.Add(cs);
- }
- }
- return ret;
- }
- }
-
- public List<StratifiedCallSite> RecordProcCallSites {
- get {
- var ret = new List<StratifiedCallSite>();
- foreach (var b in recordProcCallSites.Keys) {
- foreach (var cs in recordProcCallSites[b]) {
- ret.Add(cs);
- }
- }
- return ret;
- }
- }
-
- public override string ToString()
- {
- return info.impl.Name;
- }
- }
-
- // Rename all labels in a VC to (globally) fresh labels
- class RenameVCExprLabels : MutatingVCExprVisitor<bool>
- {
- Dictionary<int, Absy> label2absy;
- Dictionary<Absy, string> absy2newlabel;
- static int counter = 11;
-
- RenameVCExprLabels(VCExpressionGenerator gen, Dictionary<int, Absy> label2absy, Dictionary<Absy, string> absy2newlabel)
- : base(gen)
- {
- this.label2absy = label2absy;
- this.absy2newlabel = absy2newlabel;
- }
-
- public static VCExpr Apply(VCExpr expr, VCExpressionGenerator gen, Dictionary<int, Absy> label2absy, Dictionary<Absy, string> absy2newlabel)
- {
- return (new RenameVCExprLabels(gen, label2absy, absy2newlabel)).Mutate(expr, true);
- }
-
- // Finds labels and changes them to a globally unique label:
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
- List<VCExpr/*!*/>/*!*/ newSubExprs,
- bool changed,
- bool arg)
- {
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr ret;
- if (changed)
- ret = Gen.Function(originalNode.Op,
- newSubExprs, originalNode.TypeArguments);
- else
- ret = originalNode;
-
- VCExprLabelOp lop = originalNode.Op as VCExprLabelOp;
- if (lop == null) return ret;
- if (!(ret is VCExprNAry)) return ret;
- VCExprNAry retnary = (VCExprNAry)ret;
-
- // remove the sign
- var nosign = 0;
- if (!Int32.TryParse(lop.label.Substring(1), out nosign))
- return ret;
-
- if (!label2absy.ContainsKey(nosign))
- return ret;
-
- string newLabel = "SI" + counter.ToString();
- counter++;
- absy2newlabel[label2absy[nosign]] = newLabel;
-
- if (lop.pos)
- {
- return Gen.LabelPos(newLabel, retnary[0]);
- }
- else
- {
- return Gen.LabelNeg(newLabel, retnary[0]);
- }
-
- }
- }
-
- // Remove the uninterpreted function calls that substitute procedure calls
- class RemoveProcedureCalls : MutatingVCExprVisitor<bool>
- {
- HashSet<string> procNames;
-
- RemoveProcedureCalls(VCExpressionGenerator gen, HashSet<string> procNames)
- : base(gen)
- {
- this.procNames = procNames;
- }
-
- public static VCExpr Apply(VCExpr expr, VCExpressionGenerator gen, HashSet<string> procNames)
- {
- return (new RemoveProcedureCalls(gen, procNames)).Mutate(expr, true);
- }
-
- // Finds labels and changes them to a globally unique label:
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
- List<VCExpr/*!*/>/*!*/ newSubExprs,
- bool changed,
- bool arg)
- {
- //Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr ret;
- if (changed)
- ret = Gen.Function(originalNode.Op,
- newSubExprs, originalNode.TypeArguments);
- else
- ret = originalNode;
-
- if (!(ret is VCExprNAry)) return ret;
- VCExprNAry retnary = (VCExprNAry)ret;
- if (!(retnary.Op is VCExprBoogieFunctionOp))
- return ret;
-
- var fcall = (retnary.Op as VCExprBoogieFunctionOp).Func.Name;
- if (procNames.Contains(fcall))
- return VCExpressionGenerator.True;
- return ret;
- }
- }
-
-
- public class CallSite {
- public string calleeName;
- public List<VCExpr> interfaceExprs;
- public Block block;
- public int numInstr; // for TraceLocation
- public VCExprVar callSiteVar;
- public QKeyValue Attributes; // attributes on the call cmd
- public CallSite(string callee, List<VCExpr> interfaceExprs, VCExprVar callSiteVar, Block block, int numInstr, QKeyValue Attributes)
- {
- this.calleeName = callee;
- this.interfaceExprs = interfaceExprs;
- this.callSiteVar = callSiteVar;
- this.block = block;
- this.numInstr = numInstr;
- this.Attributes = Attributes;
- }
- }
-
- public class StratifiedCallSite {
- public CallSite callSite;
- public List<VCExpr> interfaceExprs;
- public VCExpr callSiteExpr;
-
- public StratifiedCallSite(CallSite cs, SubstitutingVCExprVisitor substVisitor, VCExprSubstitution subst) {
- callSite = cs;
- interfaceExprs = new List<VCExpr>();
- foreach (VCExpr v in cs.interfaceExprs) {
- interfaceExprs.Add(substVisitor.Mutate(v, subst));
- }
- if (callSite.callSiteVar != null)
- callSiteExpr = substVisitor.Mutate(callSite.callSiteVar, subst);
- }
-
- public VCExpr Attach(StratifiedVC svc) {
- Contract.Assert(interfaceExprs.Count == svc.interfaceExprVars.Count);
- StratifiedInliningInfo info = svc.info;
- ProverInterface prover = info.vcgen.prover;
- VCExpressionGenerator gen = prover.VCExprGen;
-
- Dictionary<VCExprVar, VCExpr> substDict = new Dictionary<VCExprVar, VCExpr>();
- for (int i = 0; i < svc.interfaceExprVars.Count; i++) {
- VCExprVar v = svc.interfaceExprVars[i];
- substDict.Add(v, interfaceExprs[i]);
- }
- VCExprSubstitution subst = new VCExprSubstitution(substDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
- SubstitutingVCExprVisitor substVisitor = new SubstitutingVCExprVisitor(prover.VCExprGen);
- svc.vcexpr = substVisitor.Mutate(svc.vcexpr, subst);
- foreach (StratifiedCallSite scs in svc.CallSites) {
- List<VCExpr> newInterfaceExprs = new List<VCExpr>();
- foreach (VCExpr expr in scs.interfaceExprs) {
- newInterfaceExprs.Add(substVisitor.Mutate(expr, subst));
- }
- scs.interfaceExprs = newInterfaceExprs;
- }
- foreach (StratifiedCallSite scs in svc.RecordProcCallSites) {
- List<VCExpr> newInterfaceExprs = new List<VCExpr>();
- foreach (VCExpr expr in scs.interfaceExprs) {
- newInterfaceExprs.Add(substVisitor.Mutate(expr, subst));
- }
- scs.interfaceExprs = newInterfaceExprs;
- }
- //return gen.Implies(callSiteExpr, svc.vcexpr);
- return svc.vcexpr;
- }
-
- public override string ToString()
- {
- return callSite.calleeName;
- }
- }
-
- public class StratifiedInliningInfo {
- public StratifiedVCGenBase vcgen;
- public Implementation impl;
- public Function function;
- public Variable controlFlowVariable;
- public Cmd exitAssertCmd;
- public VCExpr vcexpr;
- public List<VCExprVar> interfaceExprVars;
- public List<VCExprVar> privateExprVars;
- public Dictionary<int, Absy> label2absy;
- public ModelViewInfo mvInfo;
- public Dictionary<Block, List<CallSite>> callSites;
- public Dictionary<Block, List<CallSite>> recordProcCallSites;
- public bool initialized { get; private set; }
-
- // boolControlVC (block -> its Bool variable)
- public Dictionary<Block, VCExprVar> blockToControlVar;
-
- public StratifiedInliningInfo(Implementation implementation, StratifiedVCGenBase stratifiedVcGen) {
- vcgen = stratifiedVcGen;
- impl = implementation;
-
- List<Variable> functionInterfaceVars = new List<Variable>();
- foreach (Variable v in vcgen.program.GlobalVariables) {
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
- }
- foreach (Variable v in impl.InParams) {
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
- }
- foreach (Variable v in impl.OutParams) {
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
- }
- foreach (IdentifierExpr e in impl.Proc.Modifies) {
- if (e.Decl == null) continue;
- functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", e.Decl.TypedIdent.Type), true));
- }
- Formal returnVar = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false);
- function = new Function(Token.NoToken, impl.Name, functionInterfaceVars, returnVar);
- vcgen.prover.Context.DeclareFunction(function, "");
-
- List<Expr> exprs = new List<Expr>();
- foreach (Variable v in vcgen.program.GlobalVariables) {
- Contract.Assert(v != null);
- exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
- }
- foreach (Variable v in impl.Proc.InParams) {
- Contract.Assert(v != null);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- foreach (Variable v in impl.Proc.OutParams) {
- Contract.Assert(v != null);
- exprs.Add(new IdentifierExpr(Token.NoToken, v));
- }
- foreach (IdentifierExpr ie in impl.Proc.Modifies) {
- Contract.Assert(ie != null);
- if (ie.Decl == null)
- continue;
- exprs.Add(ie);
- }
- Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
- impl.Proc.Ensures.Add(new Ensures(Token.NoToken, true, freePostExpr, "", new QKeyValue(Token.NoToken, "si_fcall", new List<object>(), null)));
-
- initialized = false;
- }
-
- public void GenerateVCBoolControl()
- {
- Debug.Assert(!initialized);
- Debug.Assert(CommandLineOptions.Clo.SIBoolControlVC);
-
- // fix names for exit variables
- var outputVariables = new List<Variable>();
- var assertConjuncts = new List<Expr>();
- foreach (Variable v in impl.OutParams)
- {
- Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
- outputVariables.Add(c);
- Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
- assertConjuncts.Add(eqExpr);
- }
- foreach (IdentifierExpr e in impl.Proc.Modifies)
- {
- if (e.Decl == null) continue;
- Variable v = e.Decl;
- Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
- outputVariables.Add(c);
- Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
- assertConjuncts.Add(eqExpr);
- }
- exitAssertCmd = new AssumeCmd(Token.NoToken, Expr.BinaryTreeAnd(assertConjuncts));
- (exitAssertCmd as AssumeCmd).Attributes = new QKeyValue(Token.NoToken, "exitAssert", new List<object>(), null);
-
- // no need for label2absy
- label2absy = new Dictionary<int, Absy>();
-
- // Passify
- Program program = vcgen.program;
- ProverInterface proverInterface = vcgen.prover;
- vcgen.ConvertCFG2DAG(impl);
- vcgen.PassifyImpl(impl, out mvInfo);
-
- VCExpressionGenerator gen = proverInterface.VCExprGen;
- var exprGen = proverInterface.Context.ExprGen;
- var translator = proverInterface.Context.BoogieExprTranslator;
-
- // add a boolean variable at each call site
- vcgen.InstrumentCallSites(impl);
-
- // typecheck
- var tc = new TypecheckingContext(null);
- impl.Typecheck(tc);
-
- ///////////////////
- // Generate the VC
- ///////////////////
-
- // block -> bool variable
- blockToControlVar = new Dictionary<Block, VCExprVar>();
- foreach (var b in impl.Blocks)
- blockToControlVar.Add(b, gen.Variable(b.Label + "_holds", Bpl.Type.Bool));
-
- vcexpr = VCExpressionGenerator.True;
- foreach (var b in impl.Blocks)
- {
- // conjoin all assume cmds
- VCExpr c = VCExpressionGenerator.True;
- foreach (var cmd in b.Cmds)
- {
- var acmd = cmd as AssumeCmd;
- if (acmd == null)
- {
- Debug.Assert(cmd is AssertCmd && (cmd as AssertCmd).Expr is LiteralExpr &&
- ((cmd as AssertCmd).Expr as LiteralExpr).IsTrue);
- continue;
- }
- var expr = translator.Translate(acmd.Expr);
- // Label the assume if it is a procedure call
- NAryExpr naryExpr = acmd.Expr as NAryExpr;
- if (naryExpr != null && naryExpr.Fun is FunctionCall)
- {
- var id = acmd.UniqueId;
- label2absy[id] = acmd;
- expr = gen.LabelPos(cce.NonNull("si_fcall_" + id.ToString()), expr);
- }
-
- c = gen.AndSimp(c, expr);
- }
-
- // block implies a disjunction of successors
- Debug.Assert(!(b.TransferCmd is ReturnExprCmd), "Not supported");
- var gc = b.TransferCmd as GotoCmd;
- if (gc != null)
- {
- VCExpr succ = VCExpressionGenerator.False;
- foreach (var sb in gc.labelTargets)
- succ = gen.OrSimp(succ, blockToControlVar[sb]);
- c = gen.AndSimp(c, succ);
- }
- else
- {
- // nothing to do
- }
- vcexpr = gen.AndSimp(vcexpr, gen.Eq(blockToControlVar[b], c));
- }
- // assert start block
- vcexpr = gen.AndSimp(vcexpr, blockToControlVar[impl.Blocks[0]]);
-
- //Console.WriteLine("VC of {0}: {1}", impl.Name, vcexpr);
- // Collect other information
- callSites = vcgen.CollectCallSites(impl);
- recordProcCallSites = vcgen.CollectRecordProcedureCallSites(impl);
-
- // record interface variables
- privateExprVars = new List<VCExprVar>();
- foreach (Variable v in impl.LocVars)
- {
- privateExprVars.Add(translator.LookupVariable(v));
- }
- foreach (Variable v in impl.OutParams)
- {
- privateExprVars.Add(translator.LookupVariable(v));
- }
- privateExprVars.AddRange(blockToControlVar.Values);
-
- interfaceExprVars = new List<VCExprVar>();
- foreach (Variable v in program.GlobalVariables)
- {
- interfaceExprVars.Add(translator.LookupVariable(v));
- }
- foreach (Variable v in impl.InParams)
- {
- interfaceExprVars.Add(translator.LookupVariable(v));
- }
- foreach (Variable v in outputVariables)
- {
- interfaceExprVars.Add(translator.LookupVariable(v));
- }
- }
-
- public void GenerateVC() {
- if (initialized) return;
- if (CommandLineOptions.Clo.SIBoolControlVC)
- {
- GenerateVCBoolControl();
- initialized = true;
- return;
- }
- List<Variable> outputVariables = new List<Variable>();
- List<Expr> assertConjuncts = new List<Expr>();
- foreach (Variable v in impl.OutParams) {
- Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
- outputVariables.Add(c);
- Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
- assertConjuncts.Add(eqExpr);
- }
- foreach (IdentifierExpr e in impl.Proc.Modifies) {
- if (e.Decl == null) continue;
- Variable v = e.Decl;
- Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
- outputVariables.Add(c);
- Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
- assertConjuncts.Add(eqExpr);
- }
- exitAssertCmd = new AssertCmd(Token.NoToken, Expr.Not(Expr.BinaryTreeAnd(assertConjuncts)));
-
- Program program = vcgen.program;
- ProverInterface proverInterface = vcgen.prover;
- vcgen.ConvertCFG2DAG(impl);
- vcgen.PassifyImpl(impl, out mvInfo);
-
- VCExpressionGenerator gen = proverInterface.VCExprGen;
- var exprGen = proverInterface.Context.ExprGen;
- var translator = proverInterface.Context.BoogieExprTranslator;
-
- VCExpr controlFlowVariableExpr = null;
- if (!CommandLineOptions.Clo.UseLabels) {
- controlFlowVariable = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "@cfc", Microsoft.Boogie.Type.Int));
- controlFlowVariableExpr = translator.LookupVariable(controlFlowVariable);
- }
-
- vcgen.InstrumentCallSites(impl);
-
- label2absy = new Dictionary<int, Absy>();
- VCGen.CodeExprConversionClosure cc = new VCGen.CodeExprConversionClosure(label2absy, proverInterface.Context);
- translator.SetCodeExprConverter(cc.CodeExprToVerificationCondition);
- vcexpr = gen.Not(vcgen.GenerateVCAux(impl, controlFlowVariableExpr, label2absy, proverInterface.Context));
-
- if (controlFlowVariableExpr != null)
- {
- VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(controlFlowVariableExpr, exprGen.Integer(BigNum.ZERO));
- VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
- vcexpr = exprGen.And(eqExpr, vcexpr);
- }
-
- callSites = vcgen.CollectCallSites(impl);
- recordProcCallSites = vcgen.CollectRecordProcedureCallSites(impl);
-
- privateExprVars = new List<VCExprVar>();
- foreach (Variable v in impl.LocVars) {
- privateExprVars.Add(translator.LookupVariable(v));
- }
- foreach (Variable v in impl.OutParams) {
- privateExprVars.Add(translator.LookupVariable(v));
- }
-
- interfaceExprVars = new List<VCExprVar>();
- foreach (Variable v in program.GlobalVariables) {
- interfaceExprVars.Add(translator.LookupVariable(v));
- }
- foreach (Variable v in impl.InParams) {
- interfaceExprVars.Add(translator.LookupVariable(v));
- }
- foreach (Variable v in outputVariables) {
- interfaceExprVars.Add(translator.LookupVariable(v));
- }
-
- initialized = true;
- }
- }
-
- public abstract class StratifiedVCGenBase : VCGen {
- public readonly static string recordProcName = "boogie_si_record";
- public Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo;
- public ProverInterface prover;
-
- public StratifiedVCGenBase(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
- : base(program, logFilePath, appendLogFile, checkers) {
- implName2StratifiedInliningInfo = new Dictionary<string, StratifiedInliningInfo>();
- prover = ProverInterface.CreateProver(program, logFilePath, appendLogFile, CommandLineOptions.Clo.ProverKillTime);
- foreach (var impl in program.Implementations) {
- implName2StratifiedInliningInfo[impl.Name] = new StratifiedInliningInfo(impl, this);
- }
- GenerateRecordFunctions();
- }
-
- private void GenerateRecordFunctions() {
- foreach (var proc in program.Procedures) {
- if (!proc.Name.StartsWith(recordProcName)) continue;
- Contract.Assert(proc.InParams.Count == 1);
-
- // Make a new function
- TypedIdent ti = new TypedIdent(Token.NoToken, "", Bpl.Type.Bool);
- Contract.Assert(ti != null);
- Formal returnVar = new Formal(Token.NoToken, ti, false);
- Contract.Assert(returnVar != null);
-
- // Get record type
- var argtype = proc.InParams[0].TypedIdent.Type;
-
- var ins = new List<Variable>();
- ins.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "x", argtype), true));
-
- var recordFunc = new Function(Token.NoToken, proc.Name, ins, returnVar);
- prover.Context.DeclareFunction(recordFunc, "");
-
- var exprs = new List<Expr>();
- exprs.Add(new IdentifierExpr(Token.NoToken, proc.InParams[0]));
-
- Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(recordFunc), exprs);
- proc.Ensures.Add(new Ensures(true, freePostExpr));
- }
- }
-
- public override void Close() {
- prover.Close();
- base.Close();
- }
-
- public void InstrumentCallSites(Implementation implementation) {
- var callSiteId = 0;
- foreach (Block block in implementation.Blocks) {
- List<Cmd> newCmds = new List<Cmd>();
- for (int i = 0; i < block.Cmds.Count; i++) {
- Cmd cmd = block.Cmds[i];
- newCmds.Add(cmd);
- AssumeCmd assumeCmd = cmd as AssumeCmd;
- if (assumeCmd == null) continue;
- NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
- if (naryExpr == null) continue;
- if (!implName2StratifiedInliningInfo.ContainsKey(naryExpr.Fun.FunctionName)) continue;
- Variable callSiteVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "SICS" + callSiteId, Microsoft.Boogie.Type.Bool));
- implementation.LocVars.Add(callSiteVar);
- newCmds.Add(new AssumeCmd(Token.NoToken, new IdentifierExpr(Token.NoToken, callSiteVar)));
- callSiteId++;
- }
- block.Cmds = newCmds;
- }
- }
-
- public Dictionary<Block, List<CallSite>> CollectCallSites(Implementation implementation) {
- var callSites = new Dictionary<Block, List<CallSite>>();
- foreach (Block block in implementation.Blocks) {
- for (int i = 0; i < block.Cmds.Count; i++) {
- Cmd cmd = block.Cmds[i];
- AssumeCmd assumeCmd = cmd as AssumeCmd;
- if (assumeCmd == null) continue;
- NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
- if (naryExpr == null) continue;
- if (!implName2StratifiedInliningInfo.ContainsKey(naryExpr.Fun.FunctionName)) continue;
- List<VCExpr> interfaceExprs = new List<VCExpr>();
- foreach (Expr e in naryExpr.Args) {
- interfaceExprs.Add(prover.Context.BoogieExprTranslator.Translate(e));
- }
- int instr = i;
- i++;
- AssumeCmd callSiteAssumeCmd = (AssumeCmd)block.Cmds[i];
- IdentifierExpr iexpr = (IdentifierExpr) callSiteAssumeCmd.Expr;
- CallSite cs = new CallSite(naryExpr.Fun.FunctionName, interfaceExprs, prover.Context.BoogieExprTranslator.LookupVariable(iexpr.Decl), block, instr, assumeCmd.Attributes);
- if (!callSites.ContainsKey(block))
- callSites[block] = new List<CallSite>();
- callSites[block].Add(cs);
- }
- }
- return callSites;
- }
-
- public Dictionary<Block, List<CallSite>> CollectRecordProcedureCallSites(Implementation implementation) {
- var callSites = new Dictionary<Block, List<CallSite>>();
- foreach (Block block in implementation.Blocks) {
- for (int i = 0; i < block.Cmds.Count; i++) {
- AssumeCmd assumeCmd = block.Cmds[i] as AssumeCmd;
- if (assumeCmd == null) continue;
- NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
- if (naryExpr == null) continue;
- if (!naryExpr.Fun.FunctionName.StartsWith(recordProcName)) continue;
- List<VCExpr> interfaceExprs = new List<VCExpr>();
- foreach (Expr e in naryExpr.Args) {
- interfaceExprs.Add(prover.Context.BoogieExprTranslator.Translate(e));
- }
- CallSite cs = new CallSite(naryExpr.Fun.FunctionName, interfaceExprs, null, block, i, assumeCmd.Attributes);
- if (!callSites.ContainsKey(block))
- callSites[block] = new List<CallSite>();
- callSites[block].Add(cs);
- }
- }
- return callSites;
- }
-
- private int macroCountForStratifiedInlining = 0;
- public Macro CreateNewMacro() {
- string newName = "SIMacro@" + macroCountForStratifiedInlining.ToString();
- macroCountForStratifiedInlining++;
- return new Macro(Token.NoToken, newName, new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool), false));
- }
- private int varCountForStratifiedInlining = 0;
- public VCExprVar CreateNewVar(Microsoft.Boogie.Type type) {
- string newName = "SIV@" + varCountForStratifiedInlining.ToString();
- varCountForStratifiedInlining++;
- Constant newVar = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, newName, type));
- prover.Context.DeclareConstant(newVar, false, null);
- return prover.VCExprGen.Variable(newVar.Name, type);
- }
- private int idCountForStratifiedInlining = 0;
- public int CreateNewId() {
- return idCountForStratifiedInlining++;
- }
-
- // Used inside PassifyImpl
- protected override void addExitAssert(string implName, Block exitBlock) {
- if (implName2StratifiedInliningInfo != null && implName2StratifiedInliningInfo.ContainsKey(implName)) {
- var exitAssertCmd = implName2StratifiedInliningInfo[implName].exitAssertCmd;
- if(exitAssertCmd != null) exitBlock.Cmds.Add(exitAssertCmd);
- }
- }
-
- public override Counterexample extractLoopTrace(Counterexample cex, string mainProcName, Program program, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo) {
- // Construct the set of inlined procs in the original program
- var inlinedProcs = new HashSet<string>();
- foreach (var decl in program.TopLevelDeclarations) {
- // Implementations
- if (decl is Implementation) {
- var impl = decl as Implementation;
- if (!(impl.Proc is LoopProcedure)) {
- inlinedProcs.Add(impl.Name);
- }
- }
-
- // And recording procedures
- if (decl is Procedure) {
- var proc = decl as Procedure;
- if (proc.Name.StartsWith(recordProcName)) {
- Debug.Assert(!(decl is LoopProcedure));
- inlinedProcs.Add(proc.Name);
- }
- }
- }
-
- return extractLoopTraceRec(
- new CalleeCounterexampleInfo(cex, new List<object>()),
- mainProcName, inlinedProcs, extractLoopMappingInfo).counterexample;
- }
-
- protected override bool elIsLoop(string procname) {
- StratifiedInliningInfo info = null;
- if (implName2StratifiedInliningInfo.ContainsKey(procname)) {
- info = implName2StratifiedInliningInfo[procname];
- }
-
- if (info == null) return false;
-
- var lp = info.impl.Proc as LoopProcedure;
-
- if (lp == null) return false;
- return true;
- }
-
- public abstract Outcome FindLeastToVerify(Implementation impl, ref HashSet<string> allBoolVars);
- }
-
- public class StratifiedVCGen : StratifiedVCGenBase {
- public bool PersistCallTree;
- public static HashSet<string> callTree = null;
- public int numInlined = 0;
- public int vcsize = 0;
- private HashSet<string> procsThatReachedRecBound;
- public HashSet<string> procsToSkip;
- public Dictionary<string, int> extraRecBound;
-
- public StratifiedVCGen(bool usePrevCallTree, HashSet<string> prevCallTree,
- HashSet<string> procsToSkip, Dictionary<string, int> extraRecBound,
- Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
- : this(program, logFilePath, appendLogFile, checkers)
- {
- this.procsToSkip = new HashSet<string>(procsToSkip);
- this.extraRecBound = new Dictionary<string, int>(extraRecBound);
-
- if (usePrevCallTree) {
- callTree = prevCallTree;
- PersistCallTree = true;
- }
- else {
- PersistCallTree = false;
- }
- }
-
- public StratifiedVCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
- : base(program, logFilePath, appendLogFile, checkers) {
- PersistCallTree = false;
- procsThatReachedRecBound = new HashSet<string>();
- procsToSkip = new HashSet<string>();
- extraRecBound = new Dictionary<string, int>();
- }
-
- // Is this procedure to be "skipped"
- // Currently this is experimental
- public bool isSkipped(string procName) {
- return procsToSkip.Contains(procName);
- }
- public bool isSkipped(int candidate, FCallHandler calls) {
- return isSkipped(calls.getProc(candidate));
- }
- // Extra rec bound for procedures
- public int GetExtraRecBound(string procName) {
- if (!extraRecBound.ContainsKey(procName))
- return 0;
- else return extraRecBound[procName];
- }
-
- public class ApiChecker {
- public ProverInterface prover;
- public ProverInterface.ErrorHandler reporter;
-
- public ApiChecker(ProverInterface prover, ProverInterface.ErrorHandler reporter) {
- this.reporter = reporter;
- this.prover = prover;
- }
-
- private Outcome CheckVC() {
- prover.Check();
- ProverInterface.Outcome outcome = prover.CheckOutcomeCore(reporter);
-
- return ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
- }
-
- public Outcome CheckAssumptions(List<VCExpr> assumptions) {
- if (assumptions.Count == 0) {
- return CheckVC();
- }
-
- prover.Push();
- foreach (var a in assumptions) {
- prover.Assert(a, true);
- }
- Outcome ret = CheckVC();
- prover.Pop();
- return ret;
- }
-
- public Outcome CheckAssumptions(List<VCExpr> hardAssumptions, List<VCExpr> softAssumptions) {
- List<int> unsatisfiedSoftAssumptions;
- ProverInterface.Outcome outcome = prover.CheckAssumptions(hardAssumptions, softAssumptions, out unsatisfiedSoftAssumptions, reporter);
- return ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
- }
-
- public Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore) {
- ProverInterface.Outcome outcome = prover.CheckAssumptions(assumptions, out unsatCore, reporter);
- return ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
- }
- }
-
- // Store important information related to a single VerifyImplementation query
- public class VerificationState {
- // The call tree
- public FCallHandler calls;
- public ApiChecker checker;
- // For statistics
- public int vcSize;
- public int expansionCount;
-
- public VerificationState(VCExpr vcMain, FCallHandler calls, ProverInterface prover, ProverInterface.ErrorHandler reporter) {
- prover.Assert(vcMain, true);
- this.calls = calls;
- this.checker = new ApiChecker(prover, reporter);
- vcSize = 0;
- expansionCount = 0;
- }
- }
-
- class FindLeastOORException : Exception
- {
- public Outcome outcome;
-
- public FindLeastOORException(string msg, Outcome outcome)
- : base(msg)
- {
- this.outcome = outcome;
- }
- }
-
- public override Outcome FindLeastToVerify(Implementation impl, ref HashSet<string> allBoolVars) {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- // Record current time
- var startTime = DateTime.UtcNow;
-
- // No Max: avoids theorem prover restarts
- CommandLineOptions.Clo.MaxProverMemory = 0;
-
- // Initialize cache
- satQueryCache = new Dictionary<int, List<HashSet<string>>>();
- unsatQueryCache = new Dictionary<int, List<HashSet<string>>>();
-
- Contract.Assert(implName2StratifiedInliningInfo != null);
-
- // Build VCs for all procedures
- implName2StratifiedInliningInfo.Values
- .Iter(info => info.GenerateVC());
-
- // Get the VC of the current procedure
- VCExpr vcMain = implName2StratifiedInliningInfo[impl.Name].vcexpr;
- Dictionary<int, Absy> mainLabel2absy = implName2StratifiedInliningInfo[impl.Name].label2absy;
-
- // Find all procedure calls in vc and put labels on them
- FCallHandler calls = new FCallHandler(prover.VCExprGen, implName2StratifiedInliningInfo, impl.Name, mainLabel2absy);
- calls.setCurrProcAsMain();
- vcMain = calls.Mutate(vcMain, true);
-
- try
- {
-
- // Put all of the necessary state into one object
- var vState = new VerificationState(vcMain, calls, prover, new EmptyErrorHandler());
-
- // We'll restore the original state of the theorem prover at the end
- // of this procedure
- vState.checker.prover.Push();
-
- // Do eager inlining
- while (calls.currCandidates.Count > 0)
- {
- List<int> toExpand = new List<int>();
-
- foreach (int id in calls.currCandidates)
- {
- Debug.Assert(calls.getRecursionBound(id) <= 1, "Recursion not supported");
- toExpand.Add(id);
- }
- DoExpansion(toExpand, vState);
- }
-
- // Find all the boolean constants
- var allConsts = new HashSet<VCExprVar>();
- foreach (var constant in program.Constants)
- {
- if (!allBoolVars.Contains(constant.Name)) continue;
- var v = prover.Context.BoogieExprTranslator.LookupVariable(constant);
- allConsts.Add(v);
- }
-
- // Now, lets start the algo
- var min = refinementLoop(vState.checker, new HashSet<VCExprVar>(), allConsts, allConsts);
-
- var ret = new HashSet<string>();
- foreach (var v in min)
- {
- //Console.WriteLine(v.Name);
- ret.Add(v.Name);
- }
- allBoolVars = ret;
-
- vState.checker.prover.Pop();
-
- return Outcome.Correct;
- }
- catch (FindLeastOORException e)
- {
- Console.WriteLine("Exception in FindLeastToVerify: {0}, {1}", e.Message, e.outcome);
- return e.outcome;
- }
- }
-
- private HashSet<VCExprVar> refinementLoop(ApiChecker apiChecker, HashSet<VCExprVar> trackedVars, HashSet<VCExprVar> trackedVarsUpperBound, HashSet<VCExprVar> allVars) {
- Debug.Assert(trackedVars.IsSubsetOf(trackedVarsUpperBound));
-
- // If we already know the fate of all vars, then we're done.
- if (trackedVars.Count == trackedVarsUpperBound.Count)
- return new HashSet<VCExprVar>(trackedVars);
-
- // See if we already have enough variables tracked
- var success = refinementLoopCheckPath(apiChecker, trackedVars, allVars);
- if (success) {
- // We have enough
- return new HashSet<VCExprVar>(trackedVars);
- }
-
- // If all that remains is 1 variable, then we know that we must track it
- if (trackedVars.Count + 1 == trackedVarsUpperBound.Count)
- return new HashSet<VCExprVar>(trackedVarsUpperBound);
-
- // Partition the remaining set of variables
- HashSet<VCExprVar> part1, part2;
- var temp = new HashSet<VCExprVar>(trackedVarsUpperBound);
- temp.ExceptWith(trackedVars);
- Partition<VCExprVar>(temp, out part1, out part2);
-
- // First half
- var fh = new HashSet<VCExprVar>(trackedVars); fh.UnionWith(part2);
- var s1 = refinementLoop(apiChecker, fh, trackedVarsUpperBound, allVars);
-
- var a = new HashSet<VCExprVar>(part1); a.IntersectWith(s1);
- var b = new HashSet<VCExprVar>(part1); b.ExceptWith(s1);
- var c = new HashSet<VCExprVar>(trackedVarsUpperBound); c.ExceptWith(b);
- a.UnionWith(trackedVars);
-
- // Second half
- return refinementLoop(apiChecker, a, c, allVars);
- }
-
- Dictionary<int, List<HashSet<string>>> satQueryCache;
- Dictionary<int, List<HashSet<string>>> unsatQueryCache;
-
- private bool refinementLoopCheckPath(ApiChecker apiChecker, HashSet<VCExprVar> varsToSet, HashSet<VCExprVar> allVars) {
- var assumptions = new List<VCExpr>();
- var prover = apiChecker.prover;
- var query = new HashSet<string>();
- varsToSet.Iter(v => query.Add(v.Name));
-
- if (checkCache(query, unsatQueryCache)) {
- prover.LogComment("FindLeast: Query Cache Hit");
- return true;
- }
- if (checkCache(query, satQueryCache)) {
- prover.LogComment("FindLeast: Query Cache Hit");
- return false;
- }
-
- prover.LogComment("FindLeast: Query Begin");
-
- foreach (var c in allVars) {
- if (varsToSet.Contains(c)) {
- assumptions.Add(c);
- }
- else {
- assumptions.Add(prover.VCExprGen.Not(c));
- }
- }
-
- var o = apiChecker.CheckAssumptions(assumptions);
- if (o != Outcome.Correct && o != Outcome.Errors)
- {
- throw new FindLeastOORException("OOR", o);
- }
- //Console.WriteLine("Result = " + o.ToString());
- prover.LogComment("FindLeast: Query End");
-
- if (o == Outcome.Correct) {
- insertCache(query, unsatQueryCache);
- return true;
- }
-
- insertCache(query, satQueryCache);
- return false;
- }
-
- private bool checkCache(HashSet<string> q, Dictionary<int, List<HashSet<string>>> cache) {
- if (!cache.ContainsKey(q.Count)) return false;
- foreach (var s in cache[q.Count]) {
- if (q.SetEquals(s)) return true;
- }
- return false;
- }
-
- private void insertCache(HashSet<string> q, Dictionary<int, List<HashSet<string>>> cache) {
- if (!cache.ContainsKey(q.Count)) {
- cache.Add(q.Count, new List<HashSet<string>>());
- }
- cache[q.Count].Add(q);
- }
-
- public static void Partition<T>(HashSet<T> values, out HashSet<T> part1, out HashSet<T> part2) {
- part1 = new HashSet<T>();
- part2 = new HashSet<T>();
- var size = values.Count;
- var crossed = false;
- var curr = 0;
- foreach (var s in values) {
- if (crossed) part2.Add(s);
- else part1.Add(s);
- curr++;
- if (!crossed && curr >= size / 2) crossed = true;
- }
- }
-
- public override Outcome VerifyImplementation(Implementation/*!*/ impl, VerifierCallback/*!*/ callback) {
- Debug.Assert(QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"));
- Debug.Assert(this.program == program);
-
- // Record current time
- var startTime = DateTime.UtcNow;
-
- // Flush any axioms that came with the program before we start SI on this implementation
- prover.AssertAxioms();
-
- // Run live variable analysis
- if (CommandLineOptions.Clo.LiveVariableAnalysis == 2) {
- Microsoft.Boogie.InterProcGenKill.ComputeLiveVars(impl, program);
- }
-
- // Get the VC of the current procedure
- StratifiedInliningInfo info = implName2StratifiedInliningInfo[impl.Name];
- info.GenerateVC();
- VCExpr vc = info.vcexpr;
- Dictionary<int, Absy> mainLabel2absy = info.label2absy;
- var reporter = new StratifiedInliningErrorReporter(implName2StratifiedInliningInfo, prover, callback, info);
-
- // Find all procedure calls in vc and put labels on them
- FCallHandler calls = new FCallHandler(prover.VCExprGen, implName2StratifiedInliningInfo, impl.Name, mainLabel2absy);
- calls.setCurrProcAsMain();
- vc = calls.Mutate(vc, true);
- reporter.SetCandidateHandler(calls);
- calls.id2VC.Add(0, vc);
- calls.extraRecursion = extraRecBound;
- if (CommandLineOptions.Clo.SIBoolControlVC)
- {
- calls.candiate2block2controlVar.Add(0, new Dictionary<Block, VCExpr>());
- implName2StratifiedInliningInfo[impl.Name].blockToControlVar.Iter(tup =>
- calls.candiate2block2controlVar[0].Add(tup.Key, tup.Value));
- }
-
- // We'll restore the original state of the theorem prover at the end
- // of this procedure
- prover.Push();
-
- // Put all of the necessary state into one object
- var vState = new VerificationState(vc, calls, prover, reporter);
- vState.vcSize += SizeComputingVisitor.ComputeSize(vc);
-
- Outcome ret = Outcome.ReachedBound;
-
- #region eager inlining
- for (int i = 1; i < CommandLineOptions.Clo.StratifiedInlining && calls.currCandidates.Count > 0; i++) {
- List<int> toExpand = new List<int>();
-
- foreach (int id in calls.currCandidates) {
- if (calls.getRecursionBound(id) <= CommandLineOptions.Clo.RecursionBound) {
- toExpand.Add(id);
- }
- }
- DoExpansion(toExpand, vState);
- }
- #endregion
-
- #region Repopulate call tree, if there is one
- if (PersistCallTree && callTree != null) {
- bool expand = true;
- while (expand) {
- List<int> toExpand = new List<int>();
- foreach (int id in calls.currCandidates) {
- if (callTree.Contains(calls.getPersistentId(id))) {
- toExpand.Add(id);
- }
- }
- if (toExpand.Count == 0) expand = false;
- else {
- DoExpansion(toExpand, vState);
- }
- }
- }
- #endregion
-
- if (CommandLineOptions.Clo.StratifiedInliningVerbose > 1) {
- Console.WriteLine(">> SI: Size of VC after eager inlining: {0}", vState.vcSize);
- }
-
- // Under-approx query is only needed if something was inlined since
- // the last time an under-approx query was made
- // TODO: introduce this
- // bool underApproxNeeded = true;
-
- // The recursion bound for stratified search
- int bound = CommandLineOptions.Clo.NonUniformUnfolding ? CommandLineOptions.Clo.RecursionBound : 1;
-
- int done = 0;
-
- int iters = 0;
-
- // for blocking candidates (and focusing on a counterexample)
- var block = new HashSet<int>();
-
- // Process tasks while not done. We're done when:
- // case 1: (correct) We didn't find a bug (either an over-approx query was valid
- // or we reached the recursion bound) and the task is "step"
- // case 2: (bug) We find a bug
- // case 3: (internal error) The theorem prover TimesOut of runs OutOfMemory
- while (true)
- {
- // Check timeout
- if (CommandLineOptions.Clo.ProverKillTime != -1)
- {
- if ((DateTime.UtcNow - startTime).TotalSeconds > CommandLineOptions.Clo.ProverKillTime)
- {
- ret = Outcome.TimedOut;
- break;
- }
- }
-
- if (done > 0)
- {
- break;
- }
-
- // Stratified Step
- ret = stratifiedStep(bound, vState, block);
- iters++;
-
- // Sorry, out of luck (time/memory)
- if (ret == Outcome.Inconclusive || ret == Outcome.OutOfMemory || ret == Outcome.TimedOut)
- {
- done = 3;
- continue;
- }
-
- if (ret == Outcome.Errors && reporter.underapproximationMode)
- {
- // Found a bug
- done = 2;
- }
- else if (ret == Outcome.Correct)
- {
- if (block.Count == 0)
- {
- // Correct
- done = 1;
- }
- else
- {
- // reset blocked and continue loop
- block.Clear();
- }
- }
- else if (ret == Outcome.ReachedBound)
- {
- if (block.Count == 0)
- {
- if (CommandLineOptions.Clo.StratifiedInliningVerbose > 0)
- Console.WriteLine(">> SI: Exhausted Bound {0}", bound);
-
- // Increment bound
- bound++;
-
- if (bound > CommandLineOptions.Clo.RecursionBound)
- {
- // Correct under bound
- done = 1;
- }
- }
- else
- {
- // reset blocked and continue loop
- block.Clear();
- }
- }
- else
- {
- // Do inlining
- Debug.Assert(ret == Outcome.Errors && !reporter.underapproximationMode);
- Contract.Assert(reporter.candidatesToExpand.Count != 0);
-
- #region expand call tree
- if (CommandLineOptions.Clo.StratifiedInliningVerbose > 1)
- {
- Console.Write(">> SI Inlining: ");
- reporter.candidatesToExpand
- .Select(c => calls.getProc(c))
- .Iter(c => { if (!isSkipped(c)) Console.Write("{0} ", c); });
-
- Console.WriteLine();
- Console.Write(">> SI Skipping: ");
- reporter.candidatesToExpand
- .Select(c => calls.getProc(c))
- .Iter(c => { if (isSkipped(c)) Console.Write("{0} ", c); });
-
- Console.WriteLine();
-
- }
-
- // Expand and try again
- vState.checker.prover.LogComment(";;;;;;;;;;;; Expansion begin ;;;;;;;;;;");
- DoExpansion(reporter.candidatesToExpand, vState);
- vState.checker.prover.LogComment(";;;;;;;;;;;; Expansion end ;;;;;;;;;;");
-
- #endregion
- }
- }
-
- // Pop off everything that we pushed so that there are no side effects from
- // this call to VerifyImplementation
- vState.checker.prover.Pop();
-
- if (CommandLineOptions.Clo.StratifiedInliningVerbose > 1) {
- Console.WriteLine(">> SI: Expansions performed: {0}", vState.expansionCount);
- Console.WriteLine(">> SI: Candidates left: {0}", calls.currCandidates.Count);
- Console.WriteLine(">> SI: Candidates skipped: {0}", calls.currCandidates.Where(i => isSkipped(i, calls)).Count());
- Console.WriteLine(">> SI: VC Size: {0}", vState.vcSize);
- }
-
- vcsize = vState.vcSize;
- numInlined = (calls.candidateParent.Keys.Count + 1) - (calls.currCandidates.Count);
-
- var rbound = "Procs that reached bound: ";
- foreach (var s in procsThatReachedRecBound) rbound += " " + s;
- if (ret == Outcome.ReachedBound) Helpers.ExtraTraceInformation(rbound);
- if (CommandLineOptions.Clo.StackDepthBound > 0 && ret == Outcome.Correct) ret = Outcome.ReachedBound;
-
- // Store current call tree
- if (PersistCallTree && (ret == Outcome.Correct || ret == Outcome.Errors || ret == Outcome.ReachedBound)) {
- callTree = new HashSet<string>();
- //var persistentNodes = new HashSet<int>(calls.candidateParent.Values);
- var persistentNodes = new HashSet<int>(calls.candidateParent.Keys);
- persistentNodes.Add(0);
- persistentNodes.ExceptWith(calls.currCandidates);
-
- foreach (var id in persistentNodes) {
- var pid = calls.getPersistentId(id);
- Debug.Assert(!callTree.Contains(pid));
- callTree.Add(pid);
- }
- }
- return ret;
- }
-
- // A step of the stratified inlining algorithm: both under-approx and over-approx queries
- private Outcome stratifiedStep(int bound, VerificationState vState, HashSet<int> block) {
- var calls = vState.calls;
- var checker = vState.checker;
- var prover = checker.prover;
- var reporter = checker.reporter as StratifiedInliningErrorReporter;
-
- reporter.underapproximationMode = true;
- prover.LogComment(";;;;;;;;;;;; Underapprox mode begin ;;;;;;;;;;");
- List<VCExpr> assumptions = new List<VCExpr>();
-
- foreach (int id in calls.currCandidates) {
- if (!isSkipped(id, calls))
- assumptions.Add(calls.getFalseExpr(id));
- }
- Outcome ret = checker.CheckAssumptions(assumptions);
- prover.LogComment(";;;;;;;;;;;; Underapprox mode end ;;;;;;;;;;");
-
- if (ret != Outcome.Correct) {
- // Either the query returned an error or it ran out of memory or time.
- // In all cases, we are done.
- return ret;
- }
-
- if (calls.currCandidates.Count == 0) {
- // If we didn't underapproximate, then we're done
- return ret;
- }
-
- prover.LogComment(";;;;;;;;;;;; Overapprox mode begin ;;;;;;;;;;");
-
- // Over-approx query
- reporter.underapproximationMode = false;
-
- // Push "true" for all, except:
- // push "false" for all candidates that have reached
- // the recursion bounds
-
- bool allTrue = true;
- bool allFalse = true;
- List<VCExpr> softAssumptions = new List<VCExpr>();
-
- assumptions = new List<VCExpr>();
- procsThatReachedRecBound.Clear();
-
- foreach (int id in calls.currCandidates) {
- if (isSkipped(id, calls)) continue;
-
- int idBound = calls.getRecursionBound(id);
- int sd = calls.getStackDepth(id);
- if (idBound <= bound && (CommandLineOptions.Clo.StackDepthBound == 0 || sd <= CommandLineOptions.Clo.StackDepthBound)) {
- if (idBound > 1)
- softAssumptions.Add(calls.getFalseExpr(id));
-
- if (block.Contains(id)) {
- assumptions.Add(calls.getFalseExpr(id));
- allTrue = false;
- }
- else {
- allFalse = false;
- }
- }
- else {
- procsThatReachedRecBound.Add(calls.getProc(id));
- assumptions.Add(calls.getFalseExpr(id));
- allTrue = false;
- }
- }
-
- if (allFalse) {
- // If we made all candidates false, then this is the same
- // as the underapprox query. We already know the answer.
- ret = Outcome.Correct;
- }
- else {
- ret = CommandLineOptions.Clo.NonUniformUnfolding
- ? checker.CheckAssumptions(assumptions, softAssumptions)
- : checker.CheckAssumptions(assumptions);
- }
-
- if (ret != Outcome.Correct && ret != Outcome.Errors) {
- // The query ran out of memory or time, that's it,
- // we cannot do better. Give up!
- return ret;
- }
-
- if (ret == Outcome.Correct) {
- // If nothing was made false, then the program is correct
- if (allTrue) {
- return ret;
- }
-
- // Nothing more can be done with current recursion bound.
- return Outcome.ReachedBound;
- }
-
- Contract.Assert(ret == Outcome.Errors);
-
- prover.LogComment(";;;;;;;;;;;; Overapprox mode end ;;;;;;;;;;");
-
- return ret;
- }
-
- // A counter for adding new variables
- static int newVarCnt = 0;
-
- // Does on-demand inlining -- pushes procedure bodies on the theorem prover stack.
- private void DoExpansion(List<int>/*!*/ candidates, VerificationState vState) {
- Contract.Requires(candidates != null);
- Contract.Requires(vState.calls != null);
- Contract.Requires(vState.checker.prover != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- // Skipped calls don't get inlined
- candidates = candidates.FindAll(id => !isSkipped(id, vState.calls));
-
- vState.expansionCount += candidates.Count;
-
- var prover = vState.checker.prover;
- var calls = vState.calls;
-
- VCExpr exprToPush = VCExpressionGenerator.True;
- Contract.Assert(exprToPush != null);
- foreach (int id in candidates) {
- VCExprNAry expr = calls.id2Candidate[id];
- Contract.Assert(expr != null);
- string procName = cce.NonNull(expr.Op as VCExprBoogieFunctionOp).Func.Name;
- if (!implName2StratifiedInliningInfo.ContainsKey(procName)) continue;
-
- StratifiedInliningInfo info = implName2StratifiedInliningInfo[procName];
- info.GenerateVC();
- //Console.WriteLine("Inlining {0}", procName);
- VCExpr expansion = cce.NonNull(info.vcexpr);
-
- // Instantiate the "forall" variables
- Dictionary<VCExprVar, VCExpr> substForallDict = new Dictionary<VCExprVar, VCExpr>();
- Contract.Assert(info.interfaceExprVars.Count == expr.Length);
- for (int i = 0; i < info.interfaceExprVars.Count; i++) {
- substForallDict.Add(info.interfaceExprVars[i], expr[i]);
- }
- VCExprSubstitution substForall = new VCExprSubstitution(substForallDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
-
- SubstitutingVCExprVisitor subst = new SubstitutingVCExprVisitor(prover.VCExprGen);
- Contract.Assert(subst != null);
- expansion = subst.Mutate(expansion, substForall);
-
- // Instantiate and declare the "exists" variables
- Dictionary<VCExprVar, VCExpr> substExistsDict = new Dictionary<VCExprVar, VCExpr>();
- foreach (VCExprVar v in info.privateExprVars) {
- Contract.Assert(v != null);
- string newName = v.Name + "_si_" + newVarCnt.ToString();
- newVarCnt++;
- prover.Context.DeclareConstant(new Constant(Token.NoToken, new TypedIdent(Token.NoToken, newName, v.Type)), false, null);
- substExistsDict.Add(v, prover.VCExprGen.Variable(newName, v.Type));
- }
- if (CommandLineOptions.Clo.SIBoolControlVC)
- {
- // record the mapping for control booleans (for tracing the path later)
- calls.candiate2block2controlVar[id] = new Dictionary<Block, VCExpr>();
- foreach (var tup in info.blockToControlVar)
- {
- calls.candiate2block2controlVar[id].Add(tup.Key,
- substExistsDict[tup.Value]);
- }
- }
- if (CommandLineOptions.Clo.ModelViewFile != null) {
- SaveSubstitution(vState, id, substForallDict, substExistsDict);
- }
- VCExprSubstitution substExists = new VCExprSubstitution(substExistsDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
-
- subst = new SubstitutingVCExprVisitor(prover.VCExprGen);
- expansion = subst.Mutate(expansion, substExists);
-
- if (!calls.currCandidates.Contains(id)) {
- Console.WriteLine("Don't know what we just expanded");
- }
-
- calls.currCandidates.Remove(id);
-
- // Record the new set of candidates and rename absy labels
- calls.currInlineCount = id;
- calls.setCurrProc(procName);
- expansion = calls.Mutate(expansion, true);
-
- //expansion = checker.VCExprGen.Eq(calls.id2ControlVar[id], expansion);
- expansion = prover.VCExprGen.Implies(calls.id2ControlVar[id], expansion);
- calls.id2VC.Add(id, expansion);
-
- exprToPush = prover.VCExprGen.And(exprToPush, expansion);
- }
- vState.checker.prover.Assert(exprToPush, true);
- vState.vcSize += SizeComputingVisitor.ComputeSize(exprToPush);
- }
-
- private void SaveSubstitution(VerificationState vState, int id,
- Dictionary<VCExprVar, VCExpr> substForallDict, Dictionary<VCExprVar, VCExpr> substExistsDict) {
- var prover = vState.checker.prover;
- var calls = vState.calls;
- Boogie2VCExprTranslator translator = prover.Context.BoogieExprTranslator;
- VCExprVar mvStateConstant = translator.LookupVariable(ModelViewInfo.MVState_ConstantDef);
- substExistsDict.Add(mvStateConstant, prover.VCExprGen.Integer(BigNum.FromInt(id)));
- Dictionary<VCExprVar, VCExpr> mapping = new Dictionary<VCExprVar, VCExpr>();
- foreach (var key in substForallDict.Keys)
- mapping[key] = substForallDict[key];
- foreach (var key in substExistsDict.Keys)
- mapping[key] = substExistsDict[key];
- calls.id2Vars[id] = mapping;
- }
-
- // Uniquely identifies a procedure call (the call expr, instance)
- public class BoogieCallExpr : IEquatable<BoogieCallExpr> {
- public NAryExpr expr;
- public int inlineCnt;
-
- public BoogieCallExpr(NAryExpr expr, int inlineCnt) {
- this.expr = expr;
- this.inlineCnt = inlineCnt;
- }
-
- public override int GetHashCode() {
- return expr.GetHashCode() + 131 * inlineCnt.GetHashCode();
- }
-
- public override bool Equals(object obj) {
- BoogieCallExpr that = obj as BoogieCallExpr;
- return (expr == that.expr && inlineCnt == that.inlineCnt);
- }
-
- public bool Equals(BoogieCallExpr that) {
- return (expr == that.expr && inlineCnt == that.inlineCnt);
- }
- }
-
- // This class is used to traverse VCs and do the following:
- // -- collect the set of FunctionCall nodes and label them with a unique string
- // -- Rename all other labels (so that calling this on the same VC results in
- // VCs with different labels each time)
- public class FCallHandler : MutatingVCExprVisitor<bool> {
- Dictionary<string/*!*/, StratifiedInliningInfo/*!*/>/*!*/ implName2StratifiedInliningInfo;
- public readonly Dictionary<int, Absy>/*!*/ mainLabel2absy;
- public Dictionary<BoogieCallExpr/*!*/, int>/*!*/ boogieExpr2Id;
- public Dictionary<BoogieCallExpr/*!*/, VCExpr>/*!*/ recordExpr2Var;
- public Dictionary<int, VCExprNAry/*!*/>/*!*/ id2Candidate;
- public Dictionary<int, VCExprVar/*!*/>/*!*/ id2ControlVar;
- public Dictionary<int, VCExpr> id2VC;
- public Dictionary<string/*!*/, int>/*!*/ label2Id;
- // candidate to block to Bool Control variable
- public Dictionary<int, Dictionary<Block, VCExpr>> candiate2block2controlVar;
- // Stores the candidate from which this one originated
- public Dictionary<int, int> candidateParent;
- // Mapping from candidate Id to the "si_unique_call" id that led to
- // this candidate. This is useful for getting persistent names for
- // candidates
- public Dictionary<int, int> candidate2callId;
- // A cache for candidate id to its persistent name
- public Dictionary<int, string> persistentNameCache;
- // Inverse of the above map
- public Dictionary<string, int> persistentNameInv;
- // Used to record candidates recently added
- public HashSet<int> recentlyAddedCandidates;
- // Name of main procedure
- private string mainProcName;
- // A map from candidate id to the VCExpr that represents its
- // first argument (used for obtaining concrete values in error trace)
- public Dictionary<int, VCExpr> argExprMap;
-
- // map from candidate to summary candidates
- public Dictionary<int, List<Tuple<VCExprVar, VCExpr>>> summaryCandidates;
- private Dictionary<string, List<Tuple<VCExprVar, VCExpr>>> summaryTemp;
- // set of all boolean guards of summaries
- public HashSet<VCExprVar> allSummaryConst;
-
- public HashSet<int> forcedCandidates;
-
- // User info -- to decrease/increase calculation of recursion bound
- public Dictionary<int, int> recursionIncrement;
- public Dictionary<string, int> extraRecursion;
-
- public HashSet<int> currCandidates;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
- Contract.Invariant(mainLabel2absy != null);
- Contract.Invariant(boogieExpr2Id != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(id2Candidate));
- Contract.Invariant(cce.NonNullDictionaryAndValues(id2ControlVar));
- Contract.Invariant(label2Id != null);
- }
-
- // Name of the procedure whose VC we're mutating
- string currProc;
-
- // The 0^th candidate is main
- static int candidateCount = 1;
- public int currInlineCount;
-
- public Dictionary<int, Dictionary<VCExprVar, VCExpr>> id2Vars;
-
- public FCallHandler(VCExpressionGenerator/*!*/ gen,
- Dictionary<string/*!*/, StratifiedInliningInfo/*!*/>/*!*/ implName2StratifiedInliningInfo,
- string mainProcName, Dictionary<int, Absy>/*!*/ mainLabel2absy)
- : base(gen) {
- Contract.Requires(gen != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
- Contract.Requires(mainLabel2absy != null);
- this.implName2StratifiedInliningInfo = implName2StratifiedInliningInfo;
- this.mainProcName = mainProcName;
- this.mainLabel2absy = mainLabel2absy;
- id2Candidate = new Dictionary<int, VCExprNAry>();
- id2ControlVar = new Dictionary<int, VCExprVar>();
- boogieExpr2Id = new Dictionary<BoogieCallExpr, int>();
- label2Id = new Dictionary<string, int>();
- currCandidates = new HashSet<int>();
- currInlineCount = 0;
- currProc = null;
- labelRenamer = new Dictionary<string, int>();
- labelRenamerInv = new Dictionary<string, string>();
- candidateParent = new Dictionary<int, int>();
- //callGraphMapping = new Dictionary<int, int>();
- recursionIncrement = new Dictionary<int, int>();
- candidate2callId = new Dictionary<int, int>();
- persistentNameCache = new Dictionary<int, string>();
- persistentNameInv = new Dictionary<string, int>();
- persistentNameCache[0] = "0";
- persistentNameInv["0"] = 0;
- recentlyAddedCandidates = new HashSet<int>();
- argExprMap = new Dictionary<int, VCExpr>();
- recordExpr2Var = new Dictionary<BoogieCallExpr, VCExpr>();
- candiate2block2controlVar = new Dictionary<int, Dictionary<Block, VCExpr>>();
-
- forcedCandidates = new HashSet<int>();
- extraRecursion = new Dictionary<string, int>();
-
- id2Vars = new Dictionary<int, Dictionary<VCExprVar, VCExpr>>();
- summaryCandidates = new Dictionary<int, List<Tuple<VCExprVar, VCExpr>>>();
- summaryTemp = new Dictionary<string, List<Tuple<VCExprVar, VCExpr>>>();
- allSummaryConst = new HashSet<VCExprVar>();
- id2VC = new Dictionary<int, VCExpr>();
- }
-
- public void Clear() {
- currCandidates = new HashSet<int>();
- }
-
- // Return the set of all candidates
- public HashSet<int> getAllCandidates() {
- var ret = new HashSet<int>(candidateParent.Keys);
- ret.Add(0);
- return ret;
- }
-
- // Given a candidate "id", let proc(id) be the
- // procedure corresponding to id. This procedure returns
- // the number of times proc(id) appears as an ancestor
- // of id. This is the same as the number of times we've
- // recursed on proc(id)
- public int getRecursionBound(int id) {
- int ret = 1;
- var str = getProc(id);
-
- while (candidateParent.ContainsKey(id)) {
- if (recursionIncrement.ContainsKey(id)) ret += recursionIncrement[id];
- id = candidateParent[id];
- if (getProc(id) == str && !forcedCandidates.Contains(id)) ret++;
- }
-
- // Usual
- if (!extraRecursion.ContainsKey(str))
- return ret;
-
- // Usual
- if (ret <= CommandLineOptions.Clo.RecursionBound - 1)
- return ret;
-
- // Special
- if (ret >= CommandLineOptions.Clo.RecursionBound &&
- ret <= CommandLineOptions.Clo.RecursionBound + extraRecursion[str] - 1)
- return CommandLineOptions.Clo.RecursionBound - 1;
-
- // Special
- return ret - extraRecursion[str];
- }
-
- // This procedure returns the stack depth of the candidate
- // (distance from main)
- public int getStackDepth(int id)
- {
- int ret = 1;
-
- while (candidateParent.ContainsKey(id))
- {
- ret++;
- id = candidateParent[id];
- }
-
- return ret;
- }
-
- // Set user-define increment/decrement to recursionBound
- public void setRecursionIncrement(int id, int incr) {
- if (recursionIncrement.ContainsKey(id))
- recursionIncrement[id] = incr;
- else
- recursionIncrement.Add(id, incr);
- }
-
- // Returns the name of the procedure corresponding to candidate id
- public string getProc(int id) {
- if (id == 0) return mainProcName;
-
- return (id2Candidate[id].Op as VCExprBoogieFunctionOp).Func.Name;
- }
-
- // Get a unique id for this candidate (dependent only on the Call
- // graph of the program). The persistent id is:
- // 0: for main
- // a_b_c: where a is the persistent id of parent, and b is the procedure name
- // and c is the unique call id (if any)
- public string getPersistentId(int top_id) {
- if (top_id == 0) return "0";
- Debug.Assert(candidateParent.ContainsKey(top_id));
- if (persistentNameCache.ContainsKey(top_id))
- return persistentNameCache[top_id];
-
- var parent_id = getPersistentId(candidateParent[top_id]);
- var call_id = candidate2callId.ContainsKey(top_id) ? candidate2callId[top_id] : -1;
- var ret = string.Format("{0}_131_{1}_131_{2}", parent_id, getProc(top_id), call_id);
- persistentNameCache[top_id] = ret;
- persistentNameInv[ret] = top_id;
- return ret;
- }
-
- public int getCandidateFromGraphNode(string n) {
- if (!persistentNameInv.ContainsKey(n)) {
- return -1;
- }
- return persistentNameInv[n];
- }
-
- private int GetNewId(VCExprNAry vc) {
- Contract.Requires(vc != null);
- int id = candidateCount;
-
- id2Candidate[id] = vc;
- id2ControlVar[id] = Gen.Variable("si_control_var_bool_" + id.ToString(), Microsoft.Boogie.Type.Bool);
-
- candidateCount++;
- currCandidates.Add(id);
- recentlyAddedCandidates.Add(id);
-
- return id;
- }
-
- private string GetLabel(int id) {
- Contract.Ensures(Contract.Result<string>() != null);
-
- string ret = "si_fcall_" + id.ToString();
- if (!label2Id.ContainsKey(ret))
- label2Id[ret] = id;
-
- return ret;
- }
-
- public int GetId(string label) {
- Contract.Requires(label != null);
- if (!label2Id.ContainsKey(label))
- return -1;
- return label2Id[label];
- }
-
- Dictionary<string, int> labelRenamer;
- Dictionary<string, string> labelRenamerInv;
-
- public string RenameAbsyLabel(string label) {
- Contract.Requires(label != null);
- Contract.Requires(label.Length >= 1);
- Contract.Ensures(Contract.Result<string>() != null);
-
- // Remove the sign from the label
- string nosign = label.Substring(1);
- var ret = "si_inline_" + currInlineCount.ToString() + "_" + nosign;
-
- if (!labelRenamer.ContainsKey(ret)) {
- var c = labelRenamer.Count + 11; // two digit labels only
- labelRenamer.Add(ret, c);
- labelRenamerInv.Add(c.ToString(), ret);
- }
- return labelRenamer[ret].ToString();
- }
-
- public string ParseRenamedAbsyLabel(string label, int cnt) {
- Contract.Requires(label != null);
- if (!labelRenamerInv.ContainsKey(label)) {
- return null;
- }
- var str = labelRenamerInv[label];
- var prefix = "si_inline_" + cnt.ToString() + "_";
- if (!str.StartsWith(prefix)) return null;
- return str.Substring(prefix.Length);
- }
-
- public void setCurrProc(string name) {
- Contract.Requires(name != null);
- currProc = name;
- Contract.Assert(implName2StratifiedInliningInfo.ContainsKey(name));
- }
-
- public void setCurrProcAsMain() {
- currProc = "";
- }
-
- // Return the formula (candidate IFF false)
- public VCExpr getFalseExpr(int candidateId) {
- //return Gen.Eq(VCExpressionGenerator.False, id2ControlVar[candidateId]);
- return Gen.Not(id2ControlVar[candidateId]);
- }
-
- // Return the formula (candidate IFF true)
- public VCExpr getTrueExpr(int candidateId) {
- return Gen.Eq(VCExpressionGenerator.True, id2ControlVar[candidateId]);
- }
-
- public Dictionary<int, Absy> getLabel2absy() {
- Contract.Ensures(Contract.Result<Dictionary<int, Absy>>() != null);
-
- Contract.Assert(currProc != null);
- if (currProc == "") {
- return mainLabel2absy;
- }
- return cce.NonNull(implName2StratifiedInliningInfo[currProc].label2absy);
- }
-
- // Finds labels and changes them:
- // si_fcall_id: if "id" corresponds to a tracked procedure call, then
- // si_control_var_candidateId
- // si_fcall_id: if "id" does not corresponds to a tracked procedure call, then
- // delete
- // num: si_inline_num
- //
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
- List<VCExpr/*!*/>/*!*/ newSubExprs,
- // has any of the subexpressions changed?
- bool changed,
- bool arg) {
- //Contract.Requires(originalNode != null);
- //Contract.Requires(cce.NonNullElements(newSubExprs));
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr ret;
- if (changed)
- ret = Gen.Function(originalNode.Op,
- newSubExprs, originalNode.TypeArguments);
- else
- ret = originalNode;
-
- VCExprLabelOp lop = originalNode.Op as VCExprLabelOp;
- if (lop == null) return ret;
- if (!(ret is VCExprNAry)) return ret;
-
- VCExprNAry retnary = (VCExprNAry)ret;
- Contract.Assert(retnary != null);
- string prefix = "si_fcall_"; // from Wlp.ssc::Cmd(...)
- if (lop.label.Substring(1).StartsWith(prefix)) {
- int id = Int32.Parse(lop.label.Substring(prefix.Length + 1));
- Dictionary<int, Absy> label2absy = getLabel2absy();
- Absy cmd = label2absy[id] as Absy;
- //label2absy.Remove(id);
-
- Contract.Assert(cmd != null);
- AssumeCmd acmd = cmd as AssumeCmd;
- Contract.Assert(acmd != null);
- NAryExpr naryExpr = acmd.Expr as NAryExpr;
- Contract.Assert(naryExpr != null);
-
- string calleeName = naryExpr.Fun.FunctionName;
-
- VCExprNAry callExpr = retnary[0] as VCExprNAry;
-
- if (implName2StratifiedInliningInfo.ContainsKey(calleeName)) {
- Contract.Assert(callExpr != null);
- int candidateId = GetNewId(callExpr);
- boogieExpr2Id[new BoogieCallExpr(naryExpr, currInlineCount)] = candidateId;
- candidateParent[candidateId] = currInlineCount;
- candiate2block2controlVar[candidateId] = new Dictionary<Block, VCExpr>();
-
- string label = GetLabel(candidateId);
- var unique_call_id = QKeyValue.FindIntAttribute(acmd.Attributes, "si_unique_call", -1);
- if (unique_call_id != -1)
- candidate2callId[candidateId] = unique_call_id;
-
- //return Gen.LabelPos(label, callExpr);
- return Gen.LabelPos(label, id2ControlVar[candidateId]);
- }
- else if (calleeName.StartsWith(recordProcName)) {
- Contract.Assert(callExpr != null);
- Debug.Assert(callExpr.Length == 1);
- Debug.Assert(callExpr[0] != null);
- recordExpr2Var[new BoogieCallExpr(naryExpr, currInlineCount)] = callExpr[0];
- return callExpr;
- }
- else {
- // callExpr can be null; this happens when the FunctionCall was on a
- // pure function (not procedure) and the function got inlined
- return retnary[0];
- }
- }
-
- // Else, rename label
- string newLabel = RenameAbsyLabel(lop.label);
- if (lop.pos) {
- return Gen.LabelPos(newLabel, retnary[0]);
- }
- else {
- return Gen.LabelNeg(newLabel, retnary[0]);
- }
-
- }
-
- // Upgrades summaryTemp to summaryCandidates by matching ensure clauses with
- // the appropriate candidate they came from
- public void matchSummaries() {
- var id2Set = new Dictionary<string, List<Tuple<int, HashSet<VCExprVar>>>>();
- foreach (var id in recentlyAddedCandidates) {
- var collect = new CollectVCVars();
- var proc = getProc(id);
- if (!id2Set.ContainsKey(proc)) id2Set.Add(proc, new List<Tuple<int, HashSet<VCExprVar>>>());
- id2Set[proc].Add(Tuple.Create(id, collect.Collect(id2Candidate[id], true)));
- }
-
- foreach (var kvp in summaryTemp) {
- Contract.Assert(id2Set.ContainsKey(kvp.Key));
- var ls = id2Set[kvp.Key];
- foreach (var tup in kvp.Value) {
- var collect = new CollectVCVars();
- var s1 = collect.Collect(tup.Item2, true);
- var found = false;
- foreach (var t in ls) {
- var s2 = t.Item2;
- if (s1.IsSubsetOf(s2)) {
- if (!summaryCandidates.ContainsKey(t.Item1))
- summaryCandidates.Add(t.Item1, new List<Tuple<VCExprVar, VCExpr>>());
- summaryCandidates[t.Item1].Add(tup);
- allSummaryConst.Add(tup.Item1);
- found = true;
- break;
- }
- }
- Contract.Assert(found);
- }
- }
- summaryTemp.Clear();
- }
-
- public IEnumerable<int> getInlinedCandidates() {
- return candidateParent.Keys.Except(currCandidates).Union(new int[] { 0 });
- }
-
- } // end FCallHandler
-
- // Collects the set of all VCExprVar in a given VCExpr
- class CollectVCVars : CollectingVCExprVisitor<HashSet<VCExprVar>, bool> {
- public override HashSet<VCExprVar> Visit(VCExprVar node, bool arg) {
- var ret = new HashSet<VCExprVar>();
- ret.Add(node);
- return ret;
- }
-
- protected override HashSet<VCExprVar> CombineResults(List<HashSet<VCExprVar>> results, bool arg) {
- var ret = new HashSet<VCExprVar>();
- results.Iter(s => ret.UnionWith(s));
- return ret;
- }
- }
-
- public class FCallInliner : MutatingVCExprVisitor<bool> {
- public Dictionary<int, VCExpr/*!*/>/*!*/ subst;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullDictionaryAndValues(subst));
- }
-
-
- public FCallInliner(VCExpressionGenerator gen)
- : base(gen) {
- Contract.Requires(gen != null);
- subst = new Dictionary<int, VCExpr>();
- }
-
- public void Clear() {
- subst = new Dictionary<int, VCExpr>();
- }
-
- protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
- List<VCExpr/*!*/>/*!*/ newSubExprs,
- // has any of the subexpressions changed?
- bool changed,
- bool arg) {
- //Contract.Requires(originalNode != null);Contract.Requires(newSubExprs != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr ret;
- if (changed)
- ret = Gen.Function(originalNode.Op, newSubExprs, originalNode.TypeArguments);
- else
- ret = originalNode;
-
- VCExprLabelOp lop = originalNode.Op as VCExprLabelOp;
- if (lop == null) return ret;
- if (!(ret is VCExprNAry)) return ret;
-
- string prefix = "si_fcall_"; // from FCallHandler::GetLabel
- if (lop.label.Substring(1).StartsWith(prefix)) {
- int id = Int32.Parse(lop.label.Substring(prefix.Length + 1));
- if (subst.ContainsKey(id)) {
- return subst[id];
- }
- }
- return ret;
- }
-
- } // end FCallInliner
-
-
-
- public class StratifiedInliningErrorReporter : ProverInterface.ErrorHandler {
- Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo;
- ProverInterface theoremProver;
- VerifierCallback callback;
- FCallHandler calls;
- StratifiedInliningInfo mainInfo;
- StratifiedVC mainVC;
-
- public bool underapproximationMode;
- public List<int> candidatesToExpand;
- public List<StratifiedCallSite> callSitesToExpand;
-
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(candidatesToExpand != null);
- Contract.Invariant(mainInfo != null);
- Contract.Invariant(callback != null);
- Contract.Invariant(theoremProver != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
- }
-
-
- public StratifiedInliningErrorReporter(Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo,
- ProverInterface theoremProver, VerifierCallback callback,
- StratifiedInliningInfo mainInfo) {
- Contract.Requires(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
- Contract.Requires(theoremProver != null);
- Contract.Requires(callback != null);
- Contract.Requires(mainInfo != null);
- this.implName2StratifiedInliningInfo = implName2StratifiedInliningInfo;
- this.theoremProver = theoremProver;
- this.callback = callback;
- this.mainInfo = mainInfo;
- this.underapproximationMode = false;
- this.calls = null;
- this.candidatesToExpand = new List<int>();
- }
-
- public StratifiedInliningErrorReporter(Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo,
- ProverInterface theoremProver, VerifierCallback callback,
- StratifiedVC mainVC) {
- Contract.Requires(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
- Contract.Requires(theoremProver != null);
- Contract.Requires(callback != null);
- Contract.Requires(mainVC != null);
- this.implName2StratifiedInliningInfo = implName2StratifiedInliningInfo;
- this.theoremProver = theoremProver;
- this.callback = callback;
- this.mainVC = mainVC;
- this.underapproximationMode = false;
- this.candidatesToExpand = new List<int>();
- }
-
- public void SetCandidateHandler(FCallHandler calls) {
- Contract.Requires(calls != null);
- this.calls = calls;
- }
-
- List<Tuple<int, int>> orderedStateIds;
-
- private Model.Element GetModelValue(Model m, Variable v, int candidateId) {
- // first, get the unique name
- string uniqueName;
-
- VCExprVar vvar = theoremProver.Context.BoogieExprTranslator.TryLookupVariable(v);
- if (vvar == null) {
- uniqueName = v.Name;
- }
- else {
- if (candidateId != 0) {
- Dictionary<VCExprVar, VCExpr> mapping = calls.id2Vars[candidateId];
- if (mapping.ContainsKey(vvar)) {
- VCExpr e = mapping[vvar];
- if (e is VCExprLiteral) {
- VCExprLiteral lit = (VCExprLiteral)e;
- return m.MkElement(lit.ToString());
- }
- vvar = (VCExprVar)mapping[vvar];
- }
- }
- uniqueName = theoremProver.Context.Lookup(vvar);
- }
-
- var f = m.TryGetFunc(uniqueName);
- if (f == null)
- return m.MkFunc("@undefined", 0).GetConstant();
- return f.GetConstant();
- }
-
- public readonly static int CALL = -1;
- public readonly static int RETURN = -2;
-
- public void PrintModel(Model model) {
- var filename = CommandLineOptions.Clo.ModelViewFile;
- if (model == null || filename == null) return;
-
- if (filename == "-") {
- model.Write(Console.Out);
- Console.Out.Flush();
- }
- else {
- using (var wr = new StreamWriter(filename, !Counterexample.firstModelFile)) {
- Counterexample.firstModelFile = false;
- model.Write(wr);
- }
- }
- }
-
- private void GetModelWithStates(Model m) {
- if (m == null) return;
- var mvInfo = mainInfo.mvInfo;
- var mvstates = m.TryGetFunc("$mv_state");
- if (mvstates == null)
- return;
-
- Contract.Assert(mvstates.Arity == 2);
-
- foreach (Variable v in mvInfo.AllVariables) {
- m.InitialState.AddBinding(v.Name, GetModelValue(m, v, 0));
- }
-
- int lastCandidate = 0;
- int lastCapturePoint = CALL;
- for (int i = 0; i < this.orderedStateIds.Count; ++i) {
- var s = orderedStateIds[i];
- int candidate = s.Item1;
- int capturePoint = s.Item2;
- string implName = calls.getProc(candidate);
- ModelViewInfo info = candidate == 0 ? mvInfo : implName2StratifiedInliningInfo[implName].mvInfo;
-
- if (capturePoint == CALL || capturePoint == RETURN) {
- lastCandidate = candidate;
- lastCapturePoint = capturePoint;
- continue;
- }
-
- Contract.Assume(0 <= capturePoint && capturePoint < info.CapturePoints.Count);
- VC.ModelViewInfo.Mapping map = info.CapturePoints[capturePoint];
- var prevInc = (lastCapturePoint != CALL && lastCapturePoint != RETURN && candidate == lastCandidate)
- ? info.CapturePoints[lastCapturePoint].IncarnationMap : new Dictionary<Variable, Expr>();
- var cs = m.MkState(map.Description);
-
- foreach (Variable v in info.AllVariables) {
- var e = (Expr)map.IncarnationMap[v];
-
- if (e == null) {
- if (lastCapturePoint == CALL || lastCapturePoint == RETURN) {
- cs.AddBinding(v.Name, GetModelValue(m, v, candidate));
- }
- continue;
- }
-
- if (lastCapturePoint != CALL && lastCapturePoint != RETURN && prevInc[v] == e) continue; // skip unchanged variables
-
- Model.Element elt;
- if (e is IdentifierExpr) {
- IdentifierExpr ide = (IdentifierExpr)e;
- elt = GetModelValue(m, ide.Decl, candidate);
- }
- else if (e is LiteralExpr) {
- LiteralExpr lit = (LiteralExpr)e;
- elt = m.MkElement(lit.Val.ToString());
- }
- else {
- Contract.Assume(false);
- elt = m.MkFunc(e.ToString(), 0).GetConstant();
- }
- cs.AddBinding(v.Name, elt);
- }
-
- lastCandidate = candidate;
- lastCapturePoint = capturePoint;
- }
-
- return;
- }
-
- public override void OnResourceExceeded(string message)
- {
- //Contract.Requires(message != null);
- }
-
- public override void OnModel(IList<string/*!*/>/*!*/ labels, Model model, ProverInterface.Outcome proverOutcome) {
- if (CommandLineOptions.Clo.PrintErrorModel >= 1 && model != null) {
- model.Write(ErrorReporter.ModelWriter);
- ErrorReporter.ModelWriter.Flush();
- }
-
- // Timeout?
- if (proverOutcome != ProverInterface.Outcome.Invalid)
- return;
-
- candidatesToExpand = new List<int>();
- orderedStateIds = new List<Tuple<int, int>>();
- var cex = GenerateTrace(labels, model, 0, mainInfo.impl, mainInfo.mvInfo);
-
- if (underapproximationMode && cex != null) {
- //Debug.Assert(candidatesToExpand.All(calls.isSkipped));
- GetModelWithStates(model);
- callback.OnCounterexample(cex, null);
- this.PrintModel(model);
- }
- }
-
- private Counterexample GenerateTrace(IList<string/*!*/>/*!*/ labels, Model/*!*/ errModel,
- int candidateId, Implementation procImpl, ModelViewInfo mvInfo) {
- Contract.Requires(cce.NonNullElements(labels));
- Contract.Requires(procImpl != null);
-
- Hashtable traceNodes = new Hashtable();
-
- if (!CommandLineOptions.Clo.SIBoolControlVC)
- {
- foreach (string s in labels)
- {
- Contract.Assert(s != null);
- var absylabel = calls.ParseRenamedAbsyLabel(s, candidateId);
-
- if (absylabel == null) continue;
-
- Absy absy;
-
- if (candidateId == 0)
- {
- absy = Label2Absy(absylabel);
- }
- else
- {
- absy = Label2Absy(procImpl.Name, absylabel);
- }
-
- if (traceNodes.ContainsKey(absy))
- System.Console.WriteLine("Warning: duplicate label: " + s + " read while tracing nodes");
- else
- traceNodes.Add(absy, null);
- }
- }
- else
- {
- Debug.Assert(CommandLineOptions.Clo.UseProverEvaluate, "Must use prover evaluate option with boolControlVC");
- var block = procImpl.Blocks[0];
- traceNodes.Add(block, null);
- while (true)
- {
- var gc = block.TransferCmd as GotoCmd;
- if (gc == null) break;
- Block next = null;
- foreach (var succ in gc.labelTargets)
- {
- var succtaken = (bool) theoremProver.Evaluate(calls.candiate2block2controlVar[candidateId][succ]);
- if (succtaken)
- {
- next = succ;
- traceNodes.Add(succ, null);
- break;
- }
- }
- Debug.Assert(next != null, "Must find a successor");
- Debug.Assert(traceNodes.ContainsKey(next), "CFG cannot be cyclic");
- block = next;
- }
- }
-
- List<Block> trace = new List<Block>();
- Block entryBlock = cce.NonNull(procImpl.Blocks[0]);
- Contract.Assert(entryBlock != null);
- Contract.Assert(traceNodes.Contains(entryBlock));
- trace.Add(entryBlock);
-
- var calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
- Counterexample newCounterexample = GenerateTraceRec(labels, errModel, mvInfo, candidateId, entryBlock, traceNodes, trace, calleeCounterexamples);
-
- return newCounterexample;
- }
-
- private Counterexample GenerateTraceRec(
- IList<string/*!*/>/*!*/ labels, Model/*!*/ errModel, ModelViewInfo mvInfo,
- int candidateId,
- Block/*!*/ b, Hashtable/*!*/ traceNodes, List<Block>/*!*/ trace,
- Dictionary<TraceLocation/*!*/, CalleeCounterexampleInfo/*!*/>/*!*/ calleeCounterexamples) {
- Contract.Requires(cce.NonNullElements(labels));
- Contract.Requires(b != null);
- Contract.Requires(traceNodes != null);
- Contract.Requires(trace != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(calleeCounterexamples));
- // After translation, all potential errors come from asserts.
- while (true) {
- List<Cmd> cmds = b.Cmds;
- TransferCmd transferCmd = cce.NonNull(b.TransferCmd);
- for (int i = 0; i < cmds.Count; i++) {
- Cmd cmd = cce.NonNull(cmds[i]);
-
- // Skip if 'cmd' not contained in the trace or not an assert
- if ((cmd is AssertCmd && traceNodes.Contains(cmd)) ||
- (cmd is AssumeCmd && QKeyValue.FindBoolAttribute((cmd as AssumeCmd).Attributes, "exitAssert")))
- {
- var acmd = cmd as AssertCmd;
- if (acmd == null) { acmd = new AssertCmd(Token.NoToken, Expr.True); }
- Counterexample newCounterexample = AssertCmdToCounterexample(acmd, transferCmd, trace, errModel, mvInfo, theoremProver.Context);
- newCounterexample.AddCalleeCounterexample(calleeCounterexamples);
- return newCounterexample;
- }
-
- // Counterexample generation for inlined procedures
- AssumeCmd assumeCmd = cmd as AssumeCmd;
- if (assumeCmd == null)
- continue;
- NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
- if (naryExpr == null)
- continue;
- string calleeName = naryExpr.Fun.FunctionName;
- Contract.Assert(calleeName != null);
-
- BinaryOperator binOp = naryExpr.Fun as BinaryOperator;
- if (binOp != null && binOp.Op == BinaryOperator.Opcode.And) {
- Expr expr = naryExpr.Args[0];
- NAryExpr mvStateExpr = expr as NAryExpr;
- if (mvStateExpr != null && mvStateExpr.Fun.FunctionName == ModelViewInfo.MVState_FunctionDef.Name) {
- LiteralExpr x = mvStateExpr.Args[1] as LiteralExpr;
- orderedStateIds.Add(new Tuple<int, int>(candidateId, x.asBigNum.ToInt));
- }
- }
-
- if (calleeName.StartsWith(recordProcName) && (errModel != null || CommandLineOptions.Clo.UseProverEvaluate)) {
- var expr = calls.recordExpr2Var[new BoogieCallExpr(naryExpr, candidateId)];
-
- // Record concrete value of the argument to this procedure
- var args = new List<object>();
- if (errModel == null && CommandLineOptions.Clo.UseProverEvaluate)
- {
- object exprv;
- try
- {
- exprv = theoremProver.Evaluate(expr);
- }
- catch (Exception)
- {
- exprv = null;
- }
- args.Add(exprv);
- }
- else
- {
- if (expr is VCExprIntLit)
- {
- args.Add(errModel.MkElement((expr as VCExprIntLit).Val.ToString()));
- }
- else if (expr == VCExpressionGenerator.True)
- {
- args.Add(errModel.MkElement("true"));
- }
- else if (expr == VCExpressionGenerator.False)
- {
- args.Add(errModel.MkElement("false"));
- }
- else if (expr is VCExprVar)
- {
- var idExpr = expr as VCExprVar;
- string name = theoremProver.Context.Lookup(idExpr);
- Contract.Assert(name != null);
- Model.Func f = errModel.TryGetFunc(name);
- if (f != null)
- {
- args.Add(f.GetConstant());
- }
- }
- else
- {
- Contract.Assert(false);
- }
- }
- calleeCounterexamples[new TraceLocation(trace.Count - 1, i)] =
- new CalleeCounterexampleInfo(null, args);
- continue;
- }
-
- if (!implName2StratifiedInliningInfo.ContainsKey(calleeName))
- continue;
-
- Contract.Assert(calls != null);
-
- int calleeId = calls.boogieExpr2Id[new BoogieCallExpr(naryExpr, candidateId)];
-
- if (calls.currCandidates.Contains(calleeId)) {
- candidatesToExpand.Add(calleeId);
- }
- else {
- orderedStateIds.Add(new Tuple<int, int>(calleeId, StratifiedInliningErrorReporter.CALL));
- var calleeInfo = implName2StratifiedInliningInfo[calleeName];
- calleeCounterexamples[new TraceLocation(trace.Count - 1, i)] =
- new CalleeCounterexampleInfo(GenerateTrace(labels, errModel, calleeId, calleeInfo.impl, calleeInfo.mvInfo), new List<object>());
- orderedStateIds.Add(new Tuple<int, int>(candidateId, StratifiedInliningErrorReporter.RETURN));
- }
- }
-
- GotoCmd gotoCmd = transferCmd as GotoCmd;
- if (gotoCmd != null) {
- b = null;
- foreach (Block bb in cce.NonNull(gotoCmd.labelTargets)) {
- Contract.Assert(bb != null);
- if (traceNodes.Contains(bb)) {
- trace.Add(bb);
- b = bb;
- break;
- }
- }
- if (b != null) continue;
- }
- return null;
- }
- }
-
- public override Absy Label2Absy(string label) {
- //Contract.Requires(label != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
-
- int id = int.Parse(label);
- Contract.Assert(calls != null);
- return cce.NonNull((Absy)calls.mainLabel2absy[id]);
- }
-
- public Absy Label2Absy(string procName, string label) {
- Contract.Requires(label != null);
- Contract.Requires(procName != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
-
- int id = int.Parse(label);
- Dictionary<int, Absy> l2a = cce.NonNull(implName2StratifiedInliningInfo[procName]).label2absy;
- return cce.NonNull((Absy)l2a[id]);
- }
-
- public override void OnProverWarning(string msg) {
- //Contract.Requires(msg != null);
- callback.OnWarning(msg);
- }
- }
-
- } // class StratifiedVCGen
-
- public class EmptyErrorHandler : ProverInterface.ErrorHandler
- {
- public override void OnModel(IList<string> labels, Model model, ProverInterface.Outcome proverOutcome)
- { }
- }
-
- public class InvalidProgramForSecureVc : Exception
- {
- public InvalidProgramForSecureVc(string msg) :
- base(msg) { }
- }
-
- public class SecureVCGen : VCGen
- {
- // Z3
- ProverInterface prover;
- // Handler
- ErrorReporter handler;
- // dump file
- public static TokenTextWriter outfile = null;
-
-
- public SecureVCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
- : base(program, logFilePath, appendLogFile, checkers)
- {
- prover = null;
- handler = null;
- if (CommandLineOptions.Clo.SecureVcGen != "" && outfile == null)
- {
- outfile = new TokenTextWriter(new StreamWriter(CommandLineOptions.Clo.SecureVcGen));
- CommandLineOptions.Clo.PrintInstrumented = true;
- var implsToVerify = new HashSet<string>(
- program.TopLevelDeclarations.OfType<Implementation>()
- .Where(impl => !impl.SkipVerification)
- .Select(impl => impl.Name));
-
- foreach (var decl in program.TopLevelDeclarations)
- {
- if (decl is NamedDeclaration && implsToVerify.Contains((decl as NamedDeclaration).Name))
- continue;
- decl.Emit(outfile, 0);
- }
- }
- }
-
- private Block GetExitBlock(Implementation impl)
- {
- var exitblocks = impl.Blocks.Where(blk => blk.TransferCmd is ReturnCmd);
- if (exitblocks.Count() == 1)
- return exitblocks.First();
- // create a new exit block
- var eb = new Block(Token.NoToken, "SVCeb", new List<Cmd>(), new ReturnCmd(Token.NoToken));
- foreach (var b in exitblocks)
- {
- b.TransferCmd = new GotoCmd(Token.NoToken, new List<Block> { eb });
- }
- impl.Blocks.Add(eb);
- return eb;
- }
-
- //static int LocalVarCounter = 0;
- private LocalVariable GetNewLocal(Variable v, string suffix)
- {
- return new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken,
- string.Format("svc_{0}_{1}", v.Name, suffix), v.TypedIdent.Type));
- }
-
- private void GenVc(Implementation impl, VerifierCallback collector)
- {
- if (impl.Proc.Requires.Any())
- throw new InvalidProgramForSecureVc("SecureVc: Requires not supported");
- if(impl.LocVars.Any(v => isVisible(v)))
- throw new InvalidProgramForSecureVc("SecureVc: Visible Local variables not allowed");
-
- // Gather spec, remove existing ensures
- var secureAsserts = new List<AssertCmd>();
- var logicalAsserts = new List<AssertCmd>();
-
- foreach (var ens in impl.Proc.Ensures)
- {
- if(ens.Free)
- throw new InvalidProgramForSecureVc("SecureVc: Free Ensures not supported");
- var dd = new Duplicator();
- secureAsserts.Add(new AssertCmd(ens.tok, Expr.Not(ens.Condition)));
- logicalAsserts.Add(dd.VisitAssertCmd(new AssertCmd(ens.tok, ens.Condition)) as AssertCmd);
- }
- impl.Proc.Ensures.Clear();
-
- // Make a copy of the impl
- var dup = new Duplicator();
- var implDup = dup.VisitImplementation(impl);
-
- // Get exit block
- var eb = GetExitBlock(impl);
-
- // Create two blocks: one for secureAsserts, one for logical asserts
- var ebSecure = new Block(Token.NoToken, "svc_secure_asserts", new List<Cmd>(), new ReturnCmd(Token.NoToken));
- var ebLogical = new Block(Token.NoToken, "svc_logical_asserts", new List<Cmd>(), new ReturnCmd(Token.NoToken));
-
- eb.TransferCmd = new GotoCmd(eb.TransferCmd.tok, new List<Block> { ebSecure, ebLogical });
- impl.Blocks.Add(ebSecure);
- impl.Blocks.Add(ebLogical);
-
- // Rename spec, while create copies of the hidden variables
- var substOld = new Dictionary<Variable, Expr>();
- var substVarSpec = new Dictionary<Variable, Expr>();
- var substVarPath = new Dictionary<Variable, Expr>();
- foreach (var g in program.GlobalVariables)
- {
- if (!isHidden(g)) continue;
- var lv = GetNewLocal(g, "In");
- impl.LocVars.Add(lv);
- substOld.Add(g, Expr.Ident(lv));
- }
-
- for(int i = 0; i < impl.InParams.Count; i++)
- {
- var v = impl.Proc.InParams[i];
- if (!isHidden(v))
- {
- substVarSpec.Add(impl.Proc.InParams[i], Expr.Ident(impl.InParams[i]));
- continue;
- }
-
- var lv = GetNewLocal(v, "In");
- impl.LocVars.Add(lv);
- substVarSpec.Add(v, Expr.Ident(lv));
- substVarPath.Add(impl.InParams[i], Expr.Ident(lv));
- }
-
- for (int i = 0; i < impl.OutParams.Count; i++)
- {
- var v = impl.Proc.OutParams[i];
- if (!isHidden(v))
- {
- substVarSpec.Add(impl.Proc.OutParams[i], Expr.Ident(impl.OutParams[i]));
- continue;
- }
-
- var lv = GetNewLocal(v, "Out");
- impl.LocVars.Add(lv);
- substVarSpec.Add(v, Expr.Ident(lv));
- substVarPath.Add(impl.OutParams[i], Expr.Ident(lv));
- }
-
- foreach (var g in program.GlobalVariables)
- {
- if (!isHidden(g)) continue;
- if (!impl.Proc.Modifies.Any(ie => ie.Name == g.Name)) continue;
-
- var lv = GetNewLocal(g, "Out");
- impl.LocVars.Add(lv);
- substVarSpec.Add(g, Expr.Ident(lv));
- substVarPath.Add(g, Expr.Ident(lv));
- }
-
- secureAsserts = secureAsserts.ConvertAll(ac =>
- Substituter.ApplyReplacingOldExprs(
- Substituter.SubstitutionFromHashtable(substVarSpec),
- Substituter.SubstitutionFromHashtable(substOld),
- ac) as AssertCmd);
-
- var substVarProcToImpl = new Dictionary<Variable, Expr>();
- for (int i = 0; i < impl.InParams.Count; i++)
- substVarProcToImpl.Add(impl.Proc.InParams[i], Expr.Ident(impl.InParams[i]));
-
- for (int i = 0; i < impl.OutParams.Count; i++)
- substVarProcToImpl.Add(impl.Proc.OutParams[i], Expr.Ident(impl.OutParams[i]));
-
- logicalAsserts = logicalAsserts.ConvertAll(ac =>
- Substituter.Apply(Substituter.SubstitutionFromHashtable(substVarProcToImpl), ac)
- as AssertCmd);
-
- // Paths
- foreach (var path in GetAllPaths(implDup))
- {
- var wp = ComputeWP(implDup, path);
-
- // replace hidden variables to match those used in the spec
- wp = Substituter.ApplyReplacingOldExprs(
- Substituter.SubstitutionFromHashtable(substVarPath),
- Substituter.SubstitutionFromHashtable(substOld),
- wp);
-
- ebSecure.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.Not(wp)));
- }
-
- ebSecure.Cmds.AddRange(secureAsserts);
- ebLogical.Cmds.AddRange(logicalAsserts);
-
- if (outfile != null)
- {
- impl.Proc.Emit(outfile, 0);
- impl.Emit(outfile, 0);
- }
-
- ModelViewInfo mvInfo;
- ConvertCFG2DAG(impl);
- var gotoCmdOrigins = PassifyImpl(impl, out mvInfo);
-
- var gen = prover.VCExprGen;
- var exprGen = prover.Context.ExprGen;
- var translator = prover.Context.BoogieExprTranslator;
-
- var label2absy = new Dictionary<int, Absy>();
- VCGen.CodeExprConversionClosure cc = new VCGen.CodeExprConversionClosure(label2absy, prover.Context);
- translator.SetCodeExprConverter(cc.CodeExprToVerificationCondition);
- var implVc = gen.Not(GenerateVCAux(impl, null, label2absy, prover.Context));
-
- handler = new VCGen.ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, incarnationOriginMap, collector, mvInfo, prover.Context, program);
-
- prover.Assert(implVc, true);
- }
-
- Expr ComputeWP(Implementation impl, List<Cmd> path)
- {
- Expr expr = Expr.True;
-
- // create constants for out varibles
- var subst = new Dictionary<Variable, Expr>();
- foreach (var g in impl.Proc.Modifies)
- {
- var c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken,
- "svc_out_const_" + g.Name, g.Decl.TypedIdent.Type));
- subst.Add(c, g);
- expr = Expr.And(expr, Expr.Eq(Expr.Ident(c), g));
- }
-
- foreach (var v in impl.OutParams)
- {
- var c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken,
- "svc_out_const_" + v.Name, v.TypedIdent.Type));
- subst.Add(c, Expr.Ident(v));
- expr = Expr.And(expr, Expr.Eq(Expr.Ident(c), Expr.Ident(v)));
- }
-
- // we need this technicality
- var subst1 = new Dictionary<Variable, Expr>();
- foreach (var g in program.GlobalVariables)
- {
- subst1.Add(g, new OldExpr(Token.NoToken, Expr.Ident(g)));
- }
-
- // Implicitly close with havoc of all the locals and OutParams
- path.Insert(0, new HavocCmd(Token.NoToken, new List<IdentifierExpr>(
- impl.LocVars.Select(v => Expr.Ident(v)).Concat(
- impl.OutParams.Select(v => Expr.Ident(v))))));
-
- for (int i = path.Count - 1; i >= 0; i--)
- {
- var cmd = path[i];
- if (cmd is AssumeCmd)
- {
- expr = Expr.And(expr, (cmd as AssumeCmd).Expr);
- }
- else if (cmd is AssignCmd)
- {
- var h = new Dictionary<Variable, Expr>();
- var acmd = cmd as AssignCmd;
- for (int j = 0; j < acmd.Lhss.Count; j++)
- {
- h.Add(acmd.Lhss[j].DeepAssignedVariable, acmd.Rhss[j]);
- }
- var s = Substituter.SubstitutionFromHashtable(h);
- expr = Substituter.Apply(s, expr);
- }
- else if (cmd is HavocCmd)
- {
- var h = new Dictionary<Variable, Expr>();
- var formals = new List<Variable>();
-
- var vc = new VariableCollector();
- vc.VisitExpr(expr);
-
- foreach (var ie in (cmd as HavocCmd).Vars)
- {
- if (!vc.usedVars.Contains(ie.Decl)) continue;
- var f = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken,
- ie.Decl.Name + "_formal", ie.Decl.TypedIdent.Type));
- h.Add(ie.Decl, Expr.Ident(f));
- formals.Add(f);
- }
- if (!formals.Any())
- continue;
- var s = Substituter.SubstitutionFromHashtable(h);
- expr = Substituter.Apply(s, expr);
- expr = new ExistsExpr(Token.NoToken, formals, expr);
- }
- else
- {
- throw new InvalidProgramForSecureVc(string.Format("Unhandled cmd: {0}", cmd));
- }
- }
-
- // Implicitly close with havoc of all the locals and OutParams
-
-
-
- expr = Substituter.Apply(Substituter.SubstitutionFromHashtable(subst1), expr);
- expr = Substituter.Apply(Substituter.SubstitutionFromHashtable(subst),
- Substituter.SubstitutionFromHashtable(new Dictionary<Variable,Expr>()), expr);
- expr.Typecheck(new TypecheckingContext(null));
- return expr;
- }
-
- // Generate all paths in the impl
- IEnumerable<List<Cmd>> GetAllPaths(Implementation impl)
- {
- var stk = new Stack<Tuple<Block, int>>();
- stk.Push(Tuple.Create(impl.Blocks[0], 0));
-
- while (stk.Any())
- {
- var tup = stk.Peek();
- if (tup.Item1.TransferCmd is ReturnCmd)
- {
- var ret = new List<Cmd>();
- var ls = stk.ToList();
- ls.Iter(t => ret.AddRange(t.Item1.Cmds));
- yield return ret;
-
- stk.Pop();
- continue;
- }
-
- stk.Pop();
-
- var gc = tup.Item1.TransferCmd as GotoCmd;
- if (gc.labelTargets.Count <= tup.Item2)
- continue;
-
- stk.Push(Tuple.Create(tup.Item1, tup.Item2 + 1));
- stk.Push(Tuple.Create(gc.labelTargets[tup.Item2], 0));
- }
- yield break;
- }
-
- bool isHidden(Variable v)
- {
- return QKeyValue.FindBoolAttribute(v.Attributes, "hidden");
- }
-
- bool isVisible(Variable v)
- {
- return !isHidden(v);
- }
-
- public override Outcome VerifyImplementation(Implementation/*!*/ impl, VerifierCallback/*!*/ callback)
- {
- Debug.Assert(this.program == program);
-
- // Record current time
- var startTime = DateTime.UtcNow;
-
- CommandLineOptions.Clo.ProverCCLimit = 1;
- prover = ProverInterface.CreateProver(program, logFilePath, appendLogFile, CommandLineOptions.Clo.ProverKillTime);
-
- // Flush any axioms that came with the program before we start SI on this implementation
- prover.AssertAxioms();
-
- GenVc(impl, callback);
-
- prover.Check();
- var outcome = prover.CheckOutcomeCore(handler);
- //var outcome = ProverInterface.Outcome.Valid;
-
- prover.Close();
-
-
-
- //Console.WriteLine("Answer = {0}", outcome);
-
- return ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
- }
- }
-
-} // namespace VC
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC {
+ using Bpl = Microsoft.Boogie;
+
+ public class StratifiedVC {
+ public StratifiedInliningInfo info;
+ public int id;
+ public List<VCExprVar> interfaceExprVars;
+
+ // boolControlVC (block -> its bool variable)
+ public Dictionary<Block, VCExpr> blockToControlVar;
+ // While using labels (block -> its label)
+ public Dictionary<Absy, string> block2label;
+
+ public Dictionary<Block, List<StratifiedCallSite>> callSites;
+ public Dictionary<Block, List<StratifiedCallSite>> recordProcCallSites;
+ public VCExpr vcexpr;
+
+ // Must-Reach Information
+ Dictionary<Block, VCExprVar> mustReachVar;
+ List<VCExprLetBinding> mustReachBindings;
+
+ public StratifiedVC(StratifiedInliningInfo siInfo, HashSet<string> procCalls) {
+ info = siInfo;
+ info.GenerateVC();
+ var vcgen = info.vcgen;
+ var prover = vcgen.prover;
+ VCExpressionGenerator gen = prover.VCExprGen;
+ var bet = prover.Context.BoogieExprTranslator;
+
+ vcexpr = info.vcexpr;
+ id = vcgen.CreateNewId();
+ interfaceExprVars = new List<VCExprVar>();
+ Dictionary<VCExprVar, VCExpr> substDict = new Dictionary<VCExprVar, VCExpr>();
+ foreach (VCExprVar v in info.interfaceExprVars) {
+ VCExprVar newVar = vcgen.CreateNewVar(v.Type);
+ interfaceExprVars.Add(newVar);
+ substDict.Add(v, newVar);
+ }
+ foreach (VCExprVar v in info.privateExprVars) {
+ substDict.Add(v, vcgen.CreateNewVar(v.Type));
+ }
+ if(info.controlFlowVariable != null)
+ substDict.Add(bet.LookupVariable(info.controlFlowVariable), gen.Integer(BigNum.FromInt(id)));
+ VCExprSubstitution subst = new VCExprSubstitution(substDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
+ SubstitutingVCExprVisitor substVisitor = new SubstitutingVCExprVisitor(prover.VCExprGen);
+ vcexpr = substVisitor.Mutate(vcexpr, subst);
+
+ // For BoolControlVC generation
+ if (info.blockToControlVar != null)
+ {
+ blockToControlVar = new Dictionary<Block, VCExpr>();
+ foreach (var tup in info.blockToControlVar)
+ blockToControlVar.Add(tup.Key, substDict[tup.Value]);
+ }
+
+ // labels
+ if (info.label2absy != null)
+ {
+ block2label = new Dictionary<Absy, string>();
+ vcexpr = RenameVCExprLabels.Apply(vcexpr, info.vcgen.prover.VCExprGen, info.label2absy, block2label);
+ }
+
+ if(procCalls != null)
+ vcexpr = RemoveProcedureCalls.Apply(vcexpr, info.vcgen.prover.VCExprGen, procCalls);
+
+ callSites = new Dictionary<Block, List<StratifiedCallSite>>();
+ foreach (Block b in info.callSites.Keys) {
+ callSites[b] = new List<StratifiedCallSite>();
+ foreach (CallSite cs in info.callSites[b]) {
+ callSites[b].Add(new StratifiedCallSite(cs, substVisitor, subst));
+ }
+ }
+
+ recordProcCallSites = new Dictionary<Block, List<StratifiedCallSite>>();
+ foreach (Block b in info.recordProcCallSites.Keys) {
+ recordProcCallSites[b] = new List<StratifiedCallSite>();
+ foreach (CallSite cs in info.recordProcCallSites[b]) {
+ recordProcCallSites[b].Add(new StratifiedCallSite(cs, substVisitor, subst));
+ }
+ }
+ }
+
+ public VCExpr MustReach(Block block)
+ {
+ Contract.Assert(!CommandLineOptions.Clo.UseLabels);
+
+ // This information is computed lazily
+ if (mustReachBindings == null)
+ {
+ var vcgen = info.vcgen;
+ var gen = vcgen.prover.VCExprGen;
+ var impl = info.impl;
+ mustReachVar = new Dictionary<Block, VCExprVar>();
+ mustReachBindings = new List<VCExprLetBinding>();
+ foreach (Block b in impl.Blocks)
+ mustReachVar[b] = vcgen.CreateNewVar(Bpl.Type.Bool);
+
+ var dag = new Graph<Block>();
+ dag.AddSource(impl.Blocks[0]);
+ foreach (Block b in impl.Blocks)
+ {
+ var gtc = b.TransferCmd as GotoCmd;
+ if (gtc != null)
+ foreach (Block dest in gtc.labelTargets)
+ dag.AddEdge(dest, b);
+ }
+ IEnumerable sortedNodes = dag.TopologicalSort();
+
+ foreach (Block currBlock in dag.TopologicalSort())
+ {
+ if (currBlock == impl.Blocks[0])
+ {
+ mustReachBindings.Add(gen.LetBinding(mustReachVar[currBlock], VCExpressionGenerator.True));
+ continue;
+ }
+
+ VCExpr expr = VCExpressionGenerator.False;
+ foreach (var pred in dag.Successors(currBlock))
+ {
+ VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(gen.Integer(BigNum.FromInt(id)), gen.Integer(BigNum.FromInt(pred.UniqueId)));
+ VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(currBlock.UniqueId)));
+ expr = gen.Or(expr, gen.And(mustReachVar[pred], controlTransferExpr));
+ }
+ mustReachBindings.Add(gen.LetBinding(mustReachVar[currBlock], expr));
+ }
+ }
+
+ Contract.Assert(mustReachVar.ContainsKey(block));
+ return info.vcgen.prover.VCExprGen.Let(mustReachBindings, mustReachVar[block]);
+ }
+
+ public List<StratifiedCallSite> CallSites {
+ get {
+ var ret = new List<StratifiedCallSite>();
+ foreach (var b in callSites.Keys) {
+ foreach (var cs in callSites[b]) {
+ ret.Add(cs);
+ }
+ }
+ return ret;
+ }
+ }
+
+ public List<StratifiedCallSite> RecordProcCallSites {
+ get {
+ var ret = new List<StratifiedCallSite>();
+ foreach (var b in recordProcCallSites.Keys) {
+ foreach (var cs in recordProcCallSites[b]) {
+ ret.Add(cs);
+ }
+ }
+ return ret;
+ }
+ }
+
+ public override string ToString()
+ {
+ return info.impl.Name;
+ }
+ }
+
+ // Rename all labels in a VC to (globally) fresh labels
+ class RenameVCExprLabels : MutatingVCExprVisitor<bool>
+ {
+ Dictionary<int, Absy> label2absy;
+ Dictionary<Absy, string> absy2newlabel;
+ static int counter = 11;
+
+ RenameVCExprLabels(VCExpressionGenerator gen, Dictionary<int, Absy> label2absy, Dictionary<Absy, string> absy2newlabel)
+ : base(gen)
+ {
+ this.label2absy = label2absy;
+ this.absy2newlabel = absy2newlabel;
+ }
+
+ public static VCExpr Apply(VCExpr expr, VCExpressionGenerator gen, Dictionary<int, Absy> label2absy, Dictionary<Absy, string> absy2newlabel)
+ {
+ return (new RenameVCExprLabels(gen, label2absy, absy2newlabel)).Mutate(expr, true);
+ }
+
+ // Finds labels and changes them to a globally unique label:
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
+ List<VCExpr/*!*/>/*!*/ newSubExprs,
+ bool changed,
+ bool arg)
+ {
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr ret;
+ if (changed)
+ ret = Gen.Function(originalNode.Op,
+ newSubExprs, originalNode.TypeArguments);
+ else
+ ret = originalNode;
+
+ VCExprLabelOp lop = originalNode.Op as VCExprLabelOp;
+ if (lop == null) return ret;
+ if (!(ret is VCExprNAry)) return ret;
+ VCExprNAry retnary = (VCExprNAry)ret;
+
+ // remove the sign
+ var nosign = 0;
+ if (!Int32.TryParse(lop.label.Substring(1), out nosign))
+ return ret;
+
+ if (!label2absy.ContainsKey(nosign))
+ return ret;
+
+ string newLabel = "SI" + counter.ToString();
+ counter++;
+ absy2newlabel[label2absy[nosign]] = newLabel;
+
+ if (lop.pos)
+ {
+ return Gen.LabelPos(newLabel, retnary[0]);
+ }
+ else
+ {
+ return Gen.LabelNeg(newLabel, retnary[0]);
+ }
+
+ }
+ }
+
+ // Remove the uninterpreted function calls that substitute procedure calls
+ class RemoveProcedureCalls : MutatingVCExprVisitor<bool>
+ {
+ HashSet<string> procNames;
+
+ RemoveProcedureCalls(VCExpressionGenerator gen, HashSet<string> procNames)
+ : base(gen)
+ {
+ this.procNames = procNames;
+ }
+
+ public static VCExpr Apply(VCExpr expr, VCExpressionGenerator gen, HashSet<string> procNames)
+ {
+ return (new RemoveProcedureCalls(gen, procNames)).Mutate(expr, true);
+ }
+
+ // Finds labels and changes them to a globally unique label:
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
+ List<VCExpr/*!*/>/*!*/ newSubExprs,
+ bool changed,
+ bool arg)
+ {
+ //Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr ret;
+ if (changed)
+ ret = Gen.Function(originalNode.Op,
+ newSubExprs, originalNode.TypeArguments);
+ else
+ ret = originalNode;
+
+ if (!(ret is VCExprNAry)) return ret;
+ VCExprNAry retnary = (VCExprNAry)ret;
+ if (!(retnary.Op is VCExprBoogieFunctionOp))
+ return ret;
+
+ var fcall = (retnary.Op as VCExprBoogieFunctionOp).Func.Name;
+ if (procNames.Contains(fcall))
+ return VCExpressionGenerator.True;
+ return ret;
+ }
+ }
+
+
+ public class CallSite {
+ public string calleeName;
+ public List<VCExpr> interfaceExprs;
+ public Block block;
+ public int numInstr; // for TraceLocation
+ public VCExprVar callSiteVar;
+ public QKeyValue Attributes; // attributes on the call cmd
+ public CallSite(string callee, List<VCExpr> interfaceExprs, VCExprVar callSiteVar, Block block, int numInstr, QKeyValue Attributes)
+ {
+ this.calleeName = callee;
+ this.interfaceExprs = interfaceExprs;
+ this.callSiteVar = callSiteVar;
+ this.block = block;
+ this.numInstr = numInstr;
+ this.Attributes = Attributes;
+ }
+ }
+
+ public class StratifiedCallSite {
+ public CallSite callSite;
+ public List<VCExpr> interfaceExprs;
+ public VCExpr callSiteExpr;
+
+ public StratifiedCallSite(CallSite cs, SubstitutingVCExprVisitor substVisitor, VCExprSubstitution subst) {
+ callSite = cs;
+ interfaceExprs = new List<VCExpr>();
+ foreach (VCExpr v in cs.interfaceExprs) {
+ interfaceExprs.Add(substVisitor.Mutate(v, subst));
+ }
+ if (callSite.callSiteVar != null)
+ callSiteExpr = substVisitor.Mutate(callSite.callSiteVar, subst);
+ }
+
+ public VCExpr Attach(StratifiedVC svc) {
+ Contract.Assert(interfaceExprs.Count == svc.interfaceExprVars.Count);
+ StratifiedInliningInfo info = svc.info;
+ ProverInterface prover = info.vcgen.prover;
+ VCExpressionGenerator gen = prover.VCExprGen;
+
+ Dictionary<VCExprVar, VCExpr> substDict = new Dictionary<VCExprVar, VCExpr>();
+ for (int i = 0; i < svc.interfaceExprVars.Count; i++) {
+ VCExprVar v = svc.interfaceExprVars[i];
+ substDict.Add(v, interfaceExprs[i]);
+ }
+ VCExprSubstitution subst = new VCExprSubstitution(substDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
+ SubstitutingVCExprVisitor substVisitor = new SubstitutingVCExprVisitor(prover.VCExprGen);
+ svc.vcexpr = substVisitor.Mutate(svc.vcexpr, subst);
+ foreach (StratifiedCallSite scs in svc.CallSites) {
+ List<VCExpr> newInterfaceExprs = new List<VCExpr>();
+ foreach (VCExpr expr in scs.interfaceExprs) {
+ newInterfaceExprs.Add(substVisitor.Mutate(expr, subst));
+ }
+ scs.interfaceExprs = newInterfaceExprs;
+ }
+ foreach (StratifiedCallSite scs in svc.RecordProcCallSites) {
+ List<VCExpr> newInterfaceExprs = new List<VCExpr>();
+ foreach (VCExpr expr in scs.interfaceExprs) {
+ newInterfaceExprs.Add(substVisitor.Mutate(expr, subst));
+ }
+ scs.interfaceExprs = newInterfaceExprs;
+ }
+ //return gen.Implies(callSiteExpr, svc.vcexpr);
+ return svc.vcexpr;
+ }
+
+ public override string ToString()
+ {
+ return callSite.calleeName;
+ }
+ }
+
+ public class StratifiedInliningInfo {
+ public StratifiedVCGenBase vcgen;
+ public Implementation impl;
+ public Function function;
+ public Variable controlFlowVariable;
+ public Cmd exitAssertCmd;
+ public VCExpr vcexpr;
+ public List<VCExprVar> interfaceExprVars;
+ public List<VCExprVar> privateExprVars;
+ public Dictionary<int, Absy> label2absy;
+ public ModelViewInfo mvInfo;
+ public Dictionary<Block, List<CallSite>> callSites;
+ public Dictionary<Block, List<CallSite>> recordProcCallSites;
+ public bool initialized { get; private set; }
+ // Instrumentation to apply after PassiveImpl, but before VCGen
+ Action<Implementation> PassiveImplInstrumentation;
+
+ // boolControlVC (block -> its Bool variable)
+ public Dictionary<Block, VCExprVar> blockToControlVar;
+
+ public StratifiedInliningInfo(Implementation implementation, StratifiedVCGenBase stratifiedVcGen, Action<Implementation> PassiveImplInstrumentation) {
+ vcgen = stratifiedVcGen;
+ impl = implementation;
+ this.PassiveImplInstrumentation = PassiveImplInstrumentation;
+
+ List<Variable> functionInterfaceVars = new List<Variable>();
+ foreach (Variable v in vcgen.program.GlobalVariables) {
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
+ }
+ foreach (Variable v in impl.InParams) {
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
+ }
+ foreach (Variable v in impl.OutParams) {
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", v.TypedIdent.Type), true));
+ }
+ foreach (IdentifierExpr e in impl.Proc.Modifies) {
+ if (e.Decl == null) continue;
+ functionInterfaceVars.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", e.Decl.TypedIdent.Type), true));
+ }
+ Formal returnVar = new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Bpl.Type.Bool), false);
+ function = new Function(Token.NoToken, impl.Name, functionInterfaceVars, returnVar);
+ vcgen.prover.Context.DeclareFunction(function, "");
+
+ List<Expr> exprs = new List<Expr>();
+ foreach (Variable v in vcgen.program.GlobalVariables) {
+ Contract.Assert(v != null);
+ exprs.Add(new OldExpr(Token.NoToken, new IdentifierExpr(Token.NoToken, v)));
+ }
+ foreach (Variable v in impl.Proc.InParams) {
+ Contract.Assert(v != null);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ foreach (Variable v in impl.Proc.OutParams) {
+ Contract.Assert(v != null);
+ exprs.Add(new IdentifierExpr(Token.NoToken, v));
+ }
+ foreach (IdentifierExpr ie in impl.Proc.Modifies) {
+ Contract.Assert(ie != null);
+ if (ie.Decl == null)
+ continue;
+ exprs.Add(ie);
+ }
+ Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(function), exprs);
+ impl.Proc.Ensures.Add(new Ensures(Token.NoToken, true, freePostExpr, "", new QKeyValue(Token.NoToken, "si_fcall", new List<object>(), null)));
+
+ initialized = false;
+ }
+
+ public void GenerateVCBoolControl()
+ {
+ Debug.Assert(!initialized);
+ Debug.Assert(CommandLineOptions.Clo.SIBoolControlVC);
+
+ // fix names for exit variables
+ var outputVariables = new List<Variable>();
+ var assertConjuncts = new List<Expr>();
+ foreach (Variable v in impl.OutParams)
+ {
+ Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
+ outputVariables.Add(c);
+ Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
+ assertConjuncts.Add(eqExpr);
+ }
+ foreach (IdentifierExpr e in impl.Proc.Modifies)
+ {
+ if (e.Decl == null) continue;
+ Variable v = e.Decl;
+ Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
+ outputVariables.Add(c);
+ Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
+ assertConjuncts.Add(eqExpr);
+ }
+ exitAssertCmd = new AssumeCmd(Token.NoToken, Expr.BinaryTreeAnd(assertConjuncts));
+ (exitAssertCmd as AssumeCmd).Attributes = new QKeyValue(Token.NoToken, "exitAssert", new List<object>(), null);
+
+ // no need for label2absy
+ label2absy = new Dictionary<int, Absy>();
+
+ // Passify
+ Program program = vcgen.program;
+ ProverInterface proverInterface = vcgen.prover;
+ vcgen.ConvertCFG2DAG(impl);
+ vcgen.PassifyImpl(impl, out mvInfo);
+
+ VCExpressionGenerator gen = proverInterface.VCExprGen;
+ var exprGen = proverInterface.Context.ExprGen;
+ var translator = proverInterface.Context.BoogieExprTranslator;
+
+ // add a boolean variable at each call site
+ vcgen.InstrumentCallSites(impl);
+
+ // typecheck
+ var tc = new TypecheckingContext(null);
+ impl.Typecheck(tc);
+
+ ///////////////////
+ // Generate the VC
+ ///////////////////
+
+ // block -> bool variable
+ blockToControlVar = new Dictionary<Block, VCExprVar>();
+ foreach (var b in impl.Blocks)
+ blockToControlVar.Add(b, gen.Variable(b.Label + "_holds", Bpl.Type.Bool));
+
+ vcexpr = VCExpressionGenerator.True;
+ foreach (var b in impl.Blocks)
+ {
+ // conjoin all assume cmds
+ VCExpr c = VCExpressionGenerator.True;
+ foreach (var cmd in b.Cmds)
+ {
+ var acmd = cmd as AssumeCmd;
+ if (acmd == null)
+ {
+ Debug.Assert(cmd is AssertCmd && (cmd as AssertCmd).Expr is LiteralExpr &&
+ ((cmd as AssertCmd).Expr as LiteralExpr).IsTrue);
+ continue;
+ }
+ var expr = translator.Translate(acmd.Expr);
+ // Label the assume if it is a procedure call
+ NAryExpr naryExpr = acmd.Expr as NAryExpr;
+ if (naryExpr != null && naryExpr.Fun is FunctionCall)
+ {
+ var id = acmd.UniqueId;
+ label2absy[id] = acmd;
+ expr = gen.LabelPos(cce.NonNull("si_fcall_" + id.ToString()), expr);
+ }
+
+ c = gen.AndSimp(c, expr);
+ }
+
+ // block implies a disjunction of successors
+ Debug.Assert(!(b.TransferCmd is ReturnExprCmd), "Not supported");
+ var gc = b.TransferCmd as GotoCmd;
+ if (gc != null)
+ {
+ VCExpr succ = VCExpressionGenerator.False;
+ foreach (var sb in gc.labelTargets)
+ succ = gen.OrSimp(succ, blockToControlVar[sb]);
+ c = gen.AndSimp(c, succ);
+ }
+ else
+ {
+ // nothing to do
+ }
+ vcexpr = gen.AndSimp(vcexpr, gen.Eq(blockToControlVar[b], c));
+ }
+ // assert start block
+ vcexpr = gen.AndSimp(vcexpr, blockToControlVar[impl.Blocks[0]]);
+
+ //Console.WriteLine("VC of {0}: {1}", impl.Name, vcexpr);
+ // Collect other information
+ callSites = vcgen.CollectCallSites(impl);
+ recordProcCallSites = vcgen.CollectRecordProcedureCallSites(impl);
+
+ // record interface variables
+ privateExprVars = new List<VCExprVar>();
+ foreach (Variable v in impl.LocVars)
+ {
+ privateExprVars.Add(translator.LookupVariable(v));
+ }
+ foreach (Variable v in impl.OutParams)
+ {
+ privateExprVars.Add(translator.LookupVariable(v));
+ }
+ privateExprVars.AddRange(blockToControlVar.Values);
+
+ interfaceExprVars = new List<VCExprVar>();
+ foreach (Variable v in program.GlobalVariables)
+ {
+ interfaceExprVars.Add(translator.LookupVariable(v));
+ }
+ foreach (Variable v in impl.InParams)
+ {
+ interfaceExprVars.Add(translator.LookupVariable(v));
+ }
+ foreach (Variable v in outputVariables)
+ {
+ interfaceExprVars.Add(translator.LookupVariable(v));
+ }
+ }
+
+ public void GenerateVC() {
+ if (initialized) return;
+ if (CommandLineOptions.Clo.SIBoolControlVC)
+ {
+ GenerateVCBoolControl();
+ initialized = true;
+ return;
+ }
+ List<Variable> outputVariables = new List<Variable>();
+ List<Expr> assertConjuncts = new List<Expr>();
+ foreach (Variable v in impl.OutParams) {
+ Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
+ outputVariables.Add(c);
+ Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
+ assertConjuncts.Add(eqExpr);
+ }
+ foreach (IdentifierExpr e in impl.Proc.Modifies) {
+ if (e.Decl == null) continue;
+ Variable v = e.Decl;
+ Constant c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, impl.Name + "_" + v.Name, v.TypedIdent.Type));
+ outputVariables.Add(c);
+ Expr eqExpr = Expr.Eq(new IdentifierExpr(Token.NoToken, c), new IdentifierExpr(Token.NoToken, v));
+ assertConjuncts.Add(eqExpr);
+ }
+ exitAssertCmd = new AssertCmd(Token.NoToken, Expr.Not(Expr.BinaryTreeAnd(assertConjuncts)));
+
+ Program program = vcgen.program;
+ ProverInterface proverInterface = vcgen.prover;
+ vcgen.ConvertCFG2DAG(impl);
+ vcgen.PassifyImpl(impl, out mvInfo);
+
+ VCExpressionGenerator gen = proverInterface.VCExprGen;
+ var exprGen = proverInterface.Context.ExprGen;
+ var translator = proverInterface.Context.BoogieExprTranslator;
+
+ VCExpr controlFlowVariableExpr = null;
+ if (!CommandLineOptions.Clo.UseLabels) {
+ controlFlowVariable = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "@cfc", Microsoft.Boogie.Type.Int));
+ controlFlowVariableExpr = translator.LookupVariable(controlFlowVariable);
+ }
+
+ vcgen.InstrumentCallSites(impl);
+
+ if (PassiveImplInstrumentation != null)
+ PassiveImplInstrumentation(impl);
+
+ label2absy = new Dictionary<int, Absy>();
+ VCGen.CodeExprConversionClosure cc = new VCGen.CodeExprConversionClosure(label2absy, proverInterface.Context);
+ translator.SetCodeExprConverter(cc.CodeExprToVerificationCondition);
+ vcexpr = gen.Not(vcgen.GenerateVCAux(impl, controlFlowVariableExpr, label2absy, proverInterface.Context));
+
+ if (controlFlowVariableExpr != null)
+ {
+ VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(controlFlowVariableExpr, exprGen.Integer(BigNum.ZERO));
+ VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
+ vcexpr = exprGen.And(eqExpr, vcexpr);
+ }
+
+ callSites = vcgen.CollectCallSites(impl);
+ recordProcCallSites = vcgen.CollectRecordProcedureCallSites(impl);
+
+ privateExprVars = new List<VCExprVar>();
+ foreach (Variable v in impl.LocVars) {
+ privateExprVars.Add(translator.LookupVariable(v));
+ }
+ foreach (Variable v in impl.OutParams) {
+ privateExprVars.Add(translator.LookupVariable(v));
+ }
+
+ interfaceExprVars = new List<VCExprVar>();
+ foreach (Variable v in program.GlobalVariables) {
+ interfaceExprVars.Add(translator.LookupVariable(v));
+ }
+ foreach (Variable v in impl.InParams) {
+ interfaceExprVars.Add(translator.LookupVariable(v));
+ }
+ foreach (Variable v in outputVariables) {
+ interfaceExprVars.Add(translator.LookupVariable(v));
+ }
+
+ initialized = true;
+ }
+ }
+
+ public abstract class StratifiedVCGenBase : VCGen {
+ public readonly static string recordProcName = "boogie_si_record";
+ public readonly static string callSiteVarAttr = "callSiteVar";
+ public Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo;
+ public ProverInterface prover;
+
+ public StratifiedVCGenBase(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers, Action<Implementation> PassiveImplInstrumentation)
+ : base(program, logFilePath, appendLogFile, checkers) {
+ implName2StratifiedInliningInfo = new Dictionary<string, StratifiedInliningInfo>();
+ prover = ProverInterface.CreateProver(program, logFilePath, appendLogFile, CommandLineOptions.Clo.ProverKillTime);
+ foreach (var impl in program.Implementations) {
+ implName2StratifiedInliningInfo[impl.Name] = new StratifiedInliningInfo(impl, this, PassiveImplInstrumentation);
+ }
+ GenerateRecordFunctions();
+ }
+
+ private void GenerateRecordFunctions() {
+ foreach (var proc in program.Procedures) {
+ if (!proc.Name.StartsWith(recordProcName)) continue;
+ Contract.Assert(proc.InParams.Count == 1);
+
+ // Make a new function
+ TypedIdent ti = new TypedIdent(Token.NoToken, "", Bpl.Type.Bool);
+ Contract.Assert(ti != null);
+ Formal returnVar = new Formal(Token.NoToken, ti, false);
+ Contract.Assert(returnVar != null);
+
+ // Get record type
+ var argtype = proc.InParams[0].TypedIdent.Type;
+
+ var ins = new List<Variable>();
+ ins.Add(new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "x", argtype), true));
+
+ var recordFunc = new Function(Token.NoToken, proc.Name, ins, returnVar);
+ prover.Context.DeclareFunction(recordFunc, "");
+
+ var exprs = new List<Expr>();
+ exprs.Add(new IdentifierExpr(Token.NoToken, proc.InParams[0]));
+
+ Expr freePostExpr = new NAryExpr(Token.NoToken, new FunctionCall(recordFunc), exprs);
+ proc.Ensures.Add(new Ensures(true, freePostExpr));
+ }
+ }
+
+ public override void Close() {
+ prover.Close();
+ base.Close();
+ }
+
+ public void InstrumentCallSites(Implementation implementation) {
+ var callSiteId = 0;
+ foreach (Block block in implementation.Blocks) {
+ List<Cmd> newCmds = new List<Cmd>();
+ for (int i = 0; i < block.Cmds.Count; i++) {
+ Cmd cmd = block.Cmds[i];
+ newCmds.Add(cmd);
+ AssumeCmd assumeCmd = cmd as AssumeCmd;
+ if (assumeCmd == null) continue;
+ NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
+ if (naryExpr == null) continue;
+ if (!implName2StratifiedInliningInfo.ContainsKey(naryExpr.Fun.FunctionName)) continue;
+ Variable callSiteVar = new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken, "SICS" + callSiteId, Microsoft.Boogie.Type.Bool));
+ implementation.LocVars.Add(callSiteVar);
+ var toInsert = new AssumeCmd(Token.NoToken, new IdentifierExpr(Token.NoToken, callSiteVar),
+ new QKeyValue(Token.NoToken, callSiteVarAttr, new List<object>(), null));
+ newCmds.Add(toInsert);
+ callSiteId++;
+ }
+ block.Cmds = newCmds;
+ }
+ }
+
+ public Dictionary<Block, List<CallSite>> CollectCallSites(Implementation implementation) {
+ var callSites = new Dictionary<Block, List<CallSite>>();
+ foreach (Block block in implementation.Blocks) {
+ for (int i = 0; i < block.Cmds.Count; i++) {
+ Cmd cmd = block.Cmds[i];
+ AssumeCmd assumeCmd = cmd as AssumeCmd;
+ if (assumeCmd == null) continue;
+ NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
+ if (naryExpr == null) continue;
+ if (!implName2StratifiedInliningInfo.ContainsKey(naryExpr.Fun.FunctionName)) continue;
+ List<VCExpr> interfaceExprs = new List<VCExpr>();
+ foreach (Expr e in naryExpr.Args) {
+ interfaceExprs.Add(prover.Context.BoogieExprTranslator.Translate(e));
+ }
+ int instr = i;
+ i++;
+ AssumeCmd callSiteAssumeCmd = (AssumeCmd)block.Cmds[i];
+ IdentifierExpr iexpr = (IdentifierExpr) callSiteAssumeCmd.Expr;
+ CallSite cs = new CallSite(naryExpr.Fun.FunctionName, interfaceExprs, prover.Context.BoogieExprTranslator.LookupVariable(iexpr.Decl), block, instr, assumeCmd.Attributes);
+ if (!callSites.ContainsKey(block))
+ callSites[block] = new List<CallSite>();
+ callSites[block].Add(cs);
+ }
+ }
+ return callSites;
+ }
+
+ public Dictionary<Block, List<CallSite>> CollectRecordProcedureCallSites(Implementation implementation) {
+ var callSites = new Dictionary<Block, List<CallSite>>();
+ foreach (Block block in implementation.Blocks) {
+ for (int i = 0; i < block.Cmds.Count; i++) {
+ AssumeCmd assumeCmd = block.Cmds[i] as AssumeCmd;
+ if (assumeCmd == null) continue;
+ NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
+ if (naryExpr == null) continue;
+ if (!naryExpr.Fun.FunctionName.StartsWith(recordProcName)) continue;
+ List<VCExpr> interfaceExprs = new List<VCExpr>();
+ foreach (Expr e in naryExpr.Args) {
+ interfaceExprs.Add(prover.Context.BoogieExprTranslator.Translate(e));
+ }
+ CallSite cs = new CallSite(naryExpr.Fun.FunctionName, interfaceExprs, null, block, i, assumeCmd.Attributes);
+ if (!callSites.ContainsKey(block))
+ callSites[block] = new List<CallSite>();
+ callSites[block].Add(cs);
+ }
+ }
+ return callSites;
+ }
+
+ private int macroCountForStratifiedInlining = 0;
+ public Macro CreateNewMacro() {
+ string newName = "SIMacro@" + macroCountForStratifiedInlining.ToString();
+ macroCountForStratifiedInlining++;
+ return new Macro(Token.NoToken, newName, new List<Variable>(), new Formal(Token.NoToken, new TypedIdent(Token.NoToken, "", Microsoft.Boogie.Type.Bool), false));
+ }
+ private int varCountForStratifiedInlining = 0;
+ public VCExprVar CreateNewVar(Microsoft.Boogie.Type type) {
+ string newName = "SIV@" + varCountForStratifiedInlining.ToString();
+ varCountForStratifiedInlining++;
+ Constant newVar = new Constant(Token.NoToken, new TypedIdent(Token.NoToken, newName, type));
+ prover.Context.DeclareConstant(newVar, false, null);
+ return prover.VCExprGen.Variable(newVar.Name, type);
+ }
+ private int idCountForStratifiedInlining = 0;
+ public int CreateNewId() {
+ return idCountForStratifiedInlining++;
+ }
+
+ // Used inside PassifyImpl
+ protected override void addExitAssert(string implName, Block exitBlock) {
+ if (implName2StratifiedInliningInfo != null && implName2StratifiedInliningInfo.ContainsKey(implName)) {
+ var exitAssertCmd = implName2StratifiedInliningInfo[implName].exitAssertCmd;
+ if(exitAssertCmd != null) exitBlock.Cmds.Add(exitAssertCmd);
+ }
+ }
+
+ public override Counterexample extractLoopTrace(Counterexample cex, string mainProcName, Program program, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo) {
+ // Construct the set of inlined procs in the original program
+ var inlinedProcs = new HashSet<string>();
+ foreach (var decl in program.TopLevelDeclarations) {
+ // Implementations
+ if (decl is Implementation) {
+ var impl = decl as Implementation;
+ if (!(impl.Proc is LoopProcedure)) {
+ inlinedProcs.Add(impl.Name);
+ }
+ }
+
+ // And recording procedures
+ if (decl is Procedure) {
+ var proc = decl as Procedure;
+ if (proc.Name.StartsWith(recordProcName)) {
+ Debug.Assert(!(decl is LoopProcedure));
+ inlinedProcs.Add(proc.Name);
+ }
+ }
+ }
+
+ return extractLoopTraceRec(
+ new CalleeCounterexampleInfo(cex, new List<object>()),
+ mainProcName, inlinedProcs, extractLoopMappingInfo).counterexample;
+ }
+
+ protected override bool elIsLoop(string procname) {
+ StratifiedInliningInfo info = null;
+ if (implName2StratifiedInliningInfo.ContainsKey(procname)) {
+ info = implName2StratifiedInliningInfo[procname];
+ }
+
+ if (info == null) return false;
+
+ var lp = info.impl.Proc as LoopProcedure;
+
+ if (lp == null) return false;
+ return true;
+ }
+
+ public abstract Outcome FindLeastToVerify(Implementation impl, ref HashSet<string> allBoolVars);
+ }
+
+ public class StratifiedVCGen : StratifiedVCGenBase {
+ public bool PersistCallTree;
+ public static HashSet<string> callTree = null;
+ public int numInlined = 0;
+ public int vcsize = 0;
+ private HashSet<string> procsThatReachedRecBound;
+ private Dictionary<string, int> extraRecBound;
+
+ public StratifiedVCGen(bool usePrevCallTree, HashSet<string> prevCallTree,
+ Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
+ : this(program, logFilePath, appendLogFile, checkers)
+ {
+ if (usePrevCallTree) {
+ callTree = prevCallTree;
+ PersistCallTree = true;
+ }
+ else {
+ PersistCallTree = false;
+ }
+ }
+
+ public StratifiedVCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
+ : base(program, logFilePath, appendLogFile, checkers, null) {
+ PersistCallTree = false;
+ procsThatReachedRecBound = new HashSet<string>();
+
+ extraRecBound = new Dictionary<string, int>();
+ program.TopLevelDeclarations.OfType<Implementation>()
+ .Iter(impl =>
+ {
+ var b = QKeyValue.FindIntAttribute(impl.Attributes, "SIextraRecBound", -1);
+ if (b != -1) extraRecBound.Add(impl.Name, b);
+ });
+ }
+
+ // Extra rec bound for procedures
+ public int GetExtraRecBound(string procName) {
+ if (!extraRecBound.ContainsKey(procName))
+ return 0;
+ else return extraRecBound[procName];
+ }
+
+ public class ApiChecker {
+ public ProverInterface prover;
+ public ProverInterface.ErrorHandler reporter;
+
+ public ApiChecker(ProverInterface prover, ProverInterface.ErrorHandler reporter) {
+ this.reporter = reporter;
+ this.prover = prover;
+ }
+
+ private Outcome CheckVC() {
+ prover.Check();
+ ProverInterface.Outcome outcome = prover.CheckOutcomeCore(reporter);
+
+ return ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
+ }
+
+ public Outcome CheckAssumptions(List<VCExpr> assumptions) {
+ if (assumptions.Count == 0) {
+ return CheckVC();
+ }
+
+ prover.Push();
+ foreach (var a in assumptions) {
+ prover.Assert(a, true);
+ }
+ Outcome ret = CheckVC();
+ prover.Pop();
+ return ret;
+ }
+
+ public Outcome CheckAssumptions(List<VCExpr> hardAssumptions, List<VCExpr> softAssumptions) {
+ List<int> unsatisfiedSoftAssumptions;
+ ProverInterface.Outcome outcome = prover.CheckAssumptions(hardAssumptions, softAssumptions, out unsatisfiedSoftAssumptions, reporter);
+ return ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
+ }
+
+ public Outcome CheckAssumptions(List<VCExpr> assumptions, out List<int> unsatCore) {
+ ProverInterface.Outcome outcome = prover.CheckAssumptions(assumptions, out unsatCore, reporter);
+ return ConditionGeneration.ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
+ }
+ }
+
+ // Store important information related to a single VerifyImplementation query
+ public class VerificationState {
+ // The call tree
+ public FCallHandler calls;
+ public ApiChecker checker;
+ // For statistics
+ public int vcSize;
+ public int expansionCount;
+
+ public VerificationState(VCExpr vcMain, FCallHandler calls, ProverInterface prover, ProverInterface.ErrorHandler reporter) {
+ prover.Assert(vcMain, true);
+ this.calls = calls;
+ this.checker = new ApiChecker(prover, reporter);
+ vcSize = 0;
+ expansionCount = 0;
+ }
+ }
+
+ class FindLeastOORException : Exception
+ {
+ public Outcome outcome;
+
+ public FindLeastOORException(string msg, Outcome outcome)
+ : base(msg)
+ {
+ this.outcome = outcome;
+ }
+ }
+
+ public override Outcome FindLeastToVerify(Implementation impl, ref HashSet<string> allBoolVars) {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ // Record current time
+ var startTime = DateTime.UtcNow;
+
+ // No Max: avoids theorem prover restarts
+ CommandLineOptions.Clo.MaxProverMemory = 0;
+
+ // Initialize cache
+ satQueryCache = new Dictionary<int, List<HashSet<string>>>();
+ unsatQueryCache = new Dictionary<int, List<HashSet<string>>>();
+
+ Contract.Assert(implName2StratifiedInliningInfo != null);
+
+ // Build VCs for all procedures
+ implName2StratifiedInliningInfo.Values
+ .Iter(info => info.GenerateVC());
+
+ // Get the VC of the current procedure
+ VCExpr vcMain = implName2StratifiedInliningInfo[impl.Name].vcexpr;
+ Dictionary<int, Absy> mainLabel2absy = implName2StratifiedInliningInfo[impl.Name].label2absy;
+
+ // Find all procedure calls in vc and put labels on them
+ FCallHandler calls = new FCallHandler(prover.VCExprGen, implName2StratifiedInliningInfo, impl.Name, mainLabel2absy);
+ calls.setCurrProcAsMain();
+ vcMain = calls.Mutate(vcMain, true);
+
+ try
+ {
+
+ // Put all of the necessary state into one object
+ var vState = new VerificationState(vcMain, calls, prover, new EmptyErrorHandler());
+
+ // We'll restore the original state of the theorem prover at the end
+ // of this procedure
+ vState.checker.prover.Push();
+
+ // Do eager inlining
+ while (calls.currCandidates.Count > 0)
+ {
+ List<int> toExpand = new List<int>();
+
+ foreach (int id in calls.currCandidates)
+ {
+ Debug.Assert(calls.getRecursionBound(id) <= 1, "Recursion not supported");
+ toExpand.Add(id);
+ }
+ DoExpansion(toExpand, vState);
+ }
+
+ // Find all the boolean constants
+ var allConsts = new HashSet<VCExprVar>();
+ foreach (var constant in program.Constants)
+ {
+ if (!allBoolVars.Contains(constant.Name)) continue;
+ var v = prover.Context.BoogieExprTranslator.LookupVariable(constant);
+ allConsts.Add(v);
+ }
+
+ // Now, lets start the algo
+ var min = refinementLoop(vState.checker, new HashSet<VCExprVar>(), allConsts, allConsts);
+
+ var ret = new HashSet<string>();
+ foreach (var v in min)
+ {
+ //Console.WriteLine(v.Name);
+ ret.Add(v.Name);
+ }
+ allBoolVars = ret;
+
+ vState.checker.prover.Pop();
+
+ return Outcome.Correct;
+ }
+ catch (FindLeastOORException e)
+ {
+ Console.WriteLine("Exception in FindLeastToVerify: {0}, {1}", e.Message, e.outcome);
+ return e.outcome;
+ }
+ }
+
+ private HashSet<VCExprVar> refinementLoop(ApiChecker apiChecker, HashSet<VCExprVar> trackedVars, HashSet<VCExprVar> trackedVarsUpperBound, HashSet<VCExprVar> allVars) {
+ Debug.Assert(trackedVars.IsSubsetOf(trackedVarsUpperBound));
+
+ // If we already know the fate of all vars, then we're done.
+ if (trackedVars.Count == trackedVarsUpperBound.Count)
+ return new HashSet<VCExprVar>(trackedVars);
+
+ // See if we already have enough variables tracked
+ var success = refinementLoopCheckPath(apiChecker, trackedVars, allVars);
+ if (success) {
+ // We have enough
+ return new HashSet<VCExprVar>(trackedVars);
+ }
+
+ // If all that remains is 1 variable, then we know that we must track it
+ if (trackedVars.Count + 1 == trackedVarsUpperBound.Count)
+ return new HashSet<VCExprVar>(trackedVarsUpperBound);
+
+ // Partition the remaining set of variables
+ HashSet<VCExprVar> part1, part2;
+ var temp = new HashSet<VCExprVar>(trackedVarsUpperBound);
+ temp.ExceptWith(trackedVars);
+ Partition<VCExprVar>(temp, out part1, out part2);
+
+ // First half
+ var fh = new HashSet<VCExprVar>(trackedVars); fh.UnionWith(part2);
+ var s1 = refinementLoop(apiChecker, fh, trackedVarsUpperBound, allVars);
+
+ var a = new HashSet<VCExprVar>(part1); a.IntersectWith(s1);
+ var b = new HashSet<VCExprVar>(part1); b.ExceptWith(s1);
+ var c = new HashSet<VCExprVar>(trackedVarsUpperBound); c.ExceptWith(b);
+ a.UnionWith(trackedVars);
+
+ // Second half
+ return refinementLoop(apiChecker, a, c, allVars);
+ }
+
+ Dictionary<int, List<HashSet<string>>> satQueryCache;
+ Dictionary<int, List<HashSet<string>>> unsatQueryCache;
+
+ private bool refinementLoopCheckPath(ApiChecker apiChecker, HashSet<VCExprVar> varsToSet, HashSet<VCExprVar> allVars) {
+ var assumptions = new List<VCExpr>();
+ var prover = apiChecker.prover;
+ var query = new HashSet<string>();
+ varsToSet.Iter(v => query.Add(v.Name));
+
+ if (checkCache(query, unsatQueryCache)) {
+ prover.LogComment("FindLeast: Query Cache Hit");
+ return true;
+ }
+ if (checkCache(query, satQueryCache)) {
+ prover.LogComment("FindLeast: Query Cache Hit");
+ return false;
+ }
+
+ prover.LogComment("FindLeast: Query Begin");
+
+ foreach (var c in allVars) {
+ if (varsToSet.Contains(c)) {
+ assumptions.Add(c);
+ }
+ else {
+ assumptions.Add(prover.VCExprGen.Not(c));
+ }
+ }
+
+ var o = apiChecker.CheckAssumptions(assumptions);
+ if (o != Outcome.Correct && o != Outcome.Errors)
+ {
+ throw new FindLeastOORException("OOR", o);
+ }
+ //Console.WriteLine("Result = " + o.ToString());
+ prover.LogComment("FindLeast: Query End");
+
+ if (o == Outcome.Correct) {
+ insertCache(query, unsatQueryCache);
+ return true;
+ }
+
+ insertCache(query, satQueryCache);
+ return false;
+ }
+
+ private bool checkCache(HashSet<string> q, Dictionary<int, List<HashSet<string>>> cache) {
+ if (!cache.ContainsKey(q.Count)) return false;
+ foreach (var s in cache[q.Count]) {
+ if (q.SetEquals(s)) return true;
+ }
+ return false;
+ }
+
+ private void insertCache(HashSet<string> q, Dictionary<int, List<HashSet<string>>> cache) {
+ if (!cache.ContainsKey(q.Count)) {
+ cache.Add(q.Count, new List<HashSet<string>>());
+ }
+ cache[q.Count].Add(q);
+ }
+
+ public static void Partition<T>(HashSet<T> values, out HashSet<T> part1, out HashSet<T> part2) {
+ part1 = new HashSet<T>();
+ part2 = new HashSet<T>();
+ var size = values.Count;
+ var crossed = false;
+ var curr = 0;
+ foreach (var s in values) {
+ if (crossed) part2.Add(s);
+ else part1.Add(s);
+ curr++;
+ if (!crossed && curr >= size / 2) crossed = true;
+ }
+ }
+
+ public override Outcome VerifyImplementation(Implementation/*!*/ impl, VerifierCallback/*!*/ callback) {
+ Debug.Assert(QKeyValue.FindBoolAttribute(impl.Attributes, "entrypoint"));
+ Debug.Assert(this.program == program);
+
+ // Record current time
+ var startTime = DateTime.UtcNow;
+
+ // Flush any axioms that came with the program before we start SI on this implementation
+ prover.AssertAxioms();
+
+ // Run live variable analysis
+ if (CommandLineOptions.Clo.LiveVariableAnalysis == 2) {
+ Microsoft.Boogie.InterProcGenKill.ComputeLiveVars(impl, program);
+ }
+
+ // Get the VC of the current procedure
+ StratifiedInliningInfo info = implName2StratifiedInliningInfo[impl.Name];
+ info.GenerateVC();
+ VCExpr vc = info.vcexpr;
+ Dictionary<int, Absy> mainLabel2absy = info.label2absy;
+ var reporter = new StratifiedInliningErrorReporter(implName2StratifiedInliningInfo, prover, callback, info);
+
+ // Find all procedure calls in vc and put labels on them
+ FCallHandler calls = new FCallHandler(prover.VCExprGen, implName2StratifiedInliningInfo, impl.Name, mainLabel2absy);
+ calls.setCurrProcAsMain();
+ vc = calls.Mutate(vc, true);
+ reporter.SetCandidateHandler(calls);
+ calls.id2VC.Add(0, vc);
+ calls.extraRecursion = extraRecBound;
+ if (CommandLineOptions.Clo.SIBoolControlVC)
+ {
+ calls.candiate2block2controlVar.Add(0, new Dictionary<Block, VCExpr>());
+ implName2StratifiedInliningInfo[impl.Name].blockToControlVar.Iter(tup =>
+ calls.candiate2block2controlVar[0].Add(tup.Key, tup.Value));
+ }
+
+ // We'll restore the original state of the theorem prover at the end
+ // of this procedure
+ prover.Push();
+
+ // Put all of the necessary state into one object
+ var vState = new VerificationState(vc, calls, prover, reporter);
+ vState.vcSize += SizeComputingVisitor.ComputeSize(vc);
+
+ Outcome ret = Outcome.ReachedBound;
+
+ #region eager inlining
+ for (int i = 1; i < CommandLineOptions.Clo.StratifiedInlining && calls.currCandidates.Count > 0; i++) {
+ List<int> toExpand = new List<int>();
+
+ foreach (int id in calls.currCandidates) {
+ if (calls.getRecursionBound(id) <= CommandLineOptions.Clo.RecursionBound) {
+ toExpand.Add(id);
+ }
+ }
+ DoExpansion(toExpand, vState);
+ }
+ #endregion
+
+ #region Repopulate call tree, if there is one
+ if (PersistCallTree && callTree != null) {
+ bool expand = true;
+ while (expand) {
+ List<int> toExpand = new List<int>();
+ foreach (int id in calls.currCandidates) {
+ if (callTree.Contains(calls.getPersistentId(id))) {
+ toExpand.Add(id);
+ }
+ }
+ if (toExpand.Count == 0) expand = false;
+ else {
+ DoExpansion(toExpand, vState);
+ }
+ }
+ }
+ #endregion
+
+ if (CommandLineOptions.Clo.StratifiedInliningVerbose > 1) {
+ Console.WriteLine(">> SI: Size of VC after eager inlining: {0}", vState.vcSize);
+ }
+
+ // Under-approx query is only needed if something was inlined since
+ // the last time an under-approx query was made
+ // TODO: introduce this
+ // bool underApproxNeeded = true;
+
+ // The recursion bound for stratified search
+ int bound = CommandLineOptions.Clo.NonUniformUnfolding ? CommandLineOptions.Clo.RecursionBound : 1;
+
+ int done = 0;
+
+ int iters = 0;
+
+ // for blocking candidates (and focusing on a counterexample)
+ var block = new HashSet<int>();
+
+ // Process tasks while not done. We're done when:
+ // case 1: (correct) We didn't find a bug (either an over-approx query was valid
+ // or we reached the recursion bound) and the task is "step"
+ // case 2: (bug) We find a bug
+ // case 3: (internal error) The theorem prover TimesOut of runs OutOfMemory
+ while (true)
+ {
+ // Check timeout
+ if (CommandLineOptions.Clo.ProverKillTime != -1)
+ {
+ if ((DateTime.UtcNow - startTime).TotalSeconds > CommandLineOptions.Clo.ProverKillTime)
+ {
+ ret = Outcome.TimedOut;
+ break;
+ }
+ }
+
+ if (done > 0)
+ {
+ break;
+ }
+
+ // Stratified Step
+ ret = stratifiedStep(bound, vState, block);
+ iters++;
+
+ // Sorry, out of luck (time/memory)
+ if (ret == Outcome.Inconclusive || ret == Outcome.OutOfMemory || ret == Outcome.TimedOut)
+ {
+ done = 3;
+ continue;
+ }
+
+ if (ret == Outcome.Errors && reporter.underapproximationMode)
+ {
+ // Found a bug
+ done = 2;
+ }
+ else if (ret == Outcome.Correct)
+ {
+ if (block.Count == 0)
+ {
+ // Correct
+ done = 1;
+ }
+ else
+ {
+ // reset blocked and continue loop
+ block.Clear();
+ }
+ }
+ else if (ret == Outcome.ReachedBound)
+ {
+ if (block.Count == 0)
+ {
+ if (CommandLineOptions.Clo.StratifiedInliningVerbose > 0)
+ Console.WriteLine(">> SI: Exhausted Bound {0}", bound);
+
+ // Increment bound
+ bound++;
+
+ if (bound > CommandLineOptions.Clo.RecursionBound)
+ {
+ // Correct under bound
+ done = 1;
+ }
+ }
+ else
+ {
+ // reset blocked and continue loop
+ block.Clear();
+ }
+ }
+ else
+ {
+ // Do inlining
+ Debug.Assert(ret == Outcome.Errors && !reporter.underapproximationMode);
+ Contract.Assert(reporter.candidatesToExpand.Count != 0);
+
+ #region expand call tree
+ if (CommandLineOptions.Clo.StratifiedInliningVerbose > 1)
+ {
+ Console.Write(">> SI Inlining: ");
+ reporter.candidatesToExpand
+ .Select(c => calls.getProc(c))
+ .Iter(c => Console.Write("{0} ", c));
+
+ Console.WriteLine();
+ }
+
+ // Expand and try again
+ vState.checker.prover.LogComment(";;;;;;;;;;;; Expansion begin ;;;;;;;;;;");
+ DoExpansion(reporter.candidatesToExpand, vState);
+ vState.checker.prover.LogComment(";;;;;;;;;;;; Expansion end ;;;;;;;;;;");
+
+ #endregion
+ }
+ }
+
+ // Pop off everything that we pushed so that there are no side effects from
+ // this call to VerifyImplementation
+ vState.checker.prover.Pop();
+
+ if (CommandLineOptions.Clo.StratifiedInliningVerbose > 1) {
+ Console.WriteLine(">> SI: Expansions performed: {0}", vState.expansionCount);
+ Console.WriteLine(">> SI: Candidates left: {0}", calls.currCandidates.Count);
+ Console.WriteLine(">> SI: VC Size: {0}", vState.vcSize);
+ }
+
+ vcsize = vState.vcSize;
+ numInlined = (calls.candidateParent.Keys.Count + 1) - (calls.currCandidates.Count);
+
+ var rbound = "Procs that reached bound: ";
+ foreach (var s in procsThatReachedRecBound) rbound += " " + s;
+ if (ret == Outcome.ReachedBound) Helpers.ExtraTraceInformation(rbound);
+ if (CommandLineOptions.Clo.StackDepthBound > 0 && ret == Outcome.Correct) ret = Outcome.ReachedBound;
+
+ // Store current call tree
+ if (PersistCallTree && (ret == Outcome.Correct || ret == Outcome.Errors || ret == Outcome.ReachedBound)) {
+ callTree = new HashSet<string>();
+ //var persistentNodes = new HashSet<int>(calls.candidateParent.Values);
+ var persistentNodes = new HashSet<int>(calls.candidateParent.Keys);
+ persistentNodes.Add(0);
+ persistentNodes.ExceptWith(calls.currCandidates);
+
+ foreach (var id in persistentNodes) {
+ var pid = calls.getPersistentId(id);
+ Debug.Assert(!callTree.Contains(pid));
+ callTree.Add(pid);
+ }
+ }
+ return ret;
+ }
+
+ // A step of the stratified inlining algorithm: both under-approx and over-approx queries
+ private Outcome stratifiedStep(int bound, VerificationState vState, HashSet<int> block) {
+ var calls = vState.calls;
+ var checker = vState.checker;
+ var prover = checker.prover;
+ var reporter = checker.reporter as StratifiedInliningErrorReporter;
+
+ reporter.underapproximationMode = true;
+ prover.LogComment(";;;;;;;;;;;; Underapprox mode begin ;;;;;;;;;;");
+ List<VCExpr> assumptions = new List<VCExpr>();
+
+ foreach (int id in calls.currCandidates) {
+ assumptions.Add(calls.getFalseExpr(id));
+ }
+ Outcome ret = checker.CheckAssumptions(assumptions);
+ prover.LogComment(";;;;;;;;;;;; Underapprox mode end ;;;;;;;;;;");
+
+ if (ret != Outcome.Correct) {
+ // Either the query returned an error or it ran out of memory or time.
+ // In all cases, we are done.
+ return ret;
+ }
+
+ if (calls.currCandidates.Count == 0) {
+ // If we didn't underapproximate, then we're done
+ return ret;
+ }
+
+ prover.LogComment(";;;;;;;;;;;; Overapprox mode begin ;;;;;;;;;;");
+
+ // Over-approx query
+ reporter.underapproximationMode = false;
+
+ // Push "true" for all, except:
+ // push "false" for all candidates that have reached
+ // the recursion bounds
+
+ bool allTrue = true;
+ bool allFalse = true;
+ List<VCExpr> softAssumptions = new List<VCExpr>();
+
+ assumptions = new List<VCExpr>();
+ procsThatReachedRecBound.Clear();
+
+ foreach (int id in calls.currCandidates) {
+
+ int idBound = calls.getRecursionBound(id);
+ int sd = calls.getStackDepth(id);
+ if (idBound <= bound && (CommandLineOptions.Clo.StackDepthBound == 0 || sd <= CommandLineOptions.Clo.StackDepthBound)) {
+ if (idBound > 1)
+ softAssumptions.Add(calls.getFalseExpr(id));
+
+ if (block.Contains(id)) {
+ assumptions.Add(calls.getFalseExpr(id));
+ allTrue = false;
+ }
+ else {
+ allFalse = false;
+ }
+ }
+ else {
+ procsThatReachedRecBound.Add(calls.getProc(id));
+ assumptions.Add(calls.getFalseExpr(id));
+ allTrue = false;
+ }
+ }
+
+ if (allFalse) {
+ // If we made all candidates false, then this is the same
+ // as the underapprox query. We already know the answer.
+ ret = Outcome.Correct;
+ }
+ else {
+ ret = CommandLineOptions.Clo.NonUniformUnfolding
+ ? checker.CheckAssumptions(assumptions, softAssumptions)
+ : checker.CheckAssumptions(assumptions);
+ }
+
+ if (ret != Outcome.Correct && ret != Outcome.Errors) {
+ // The query ran out of memory or time, that's it,
+ // we cannot do better. Give up!
+ return ret;
+ }
+
+ if (ret == Outcome.Correct) {
+ // If nothing was made false, then the program is correct
+ if (allTrue) {
+ return ret;
+ }
+
+ // Nothing more can be done with current recursion bound.
+ return Outcome.ReachedBound;
+ }
+
+ Contract.Assert(ret == Outcome.Errors);
+
+ prover.LogComment(";;;;;;;;;;;; Overapprox mode end ;;;;;;;;;;");
+
+ return ret;
+ }
+
+ // A counter for adding new variables
+ static int newVarCnt = 0;
+
+ // Does on-demand inlining -- pushes procedure bodies on the theorem prover stack.
+ private void DoExpansion(List<int>/*!*/ candidates, VerificationState vState) {
+ Contract.Requires(candidates != null);
+ Contract.Requires(vState.calls != null);
+ Contract.Requires(vState.checker.prover != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ vState.expansionCount += candidates.Count;
+
+ var prover = vState.checker.prover;
+ var calls = vState.calls;
+
+ VCExpr exprToPush = VCExpressionGenerator.True;
+ Contract.Assert(exprToPush != null);
+ foreach (int id in candidates) {
+ VCExprNAry expr = calls.id2Candidate[id];
+ Contract.Assert(expr != null);
+ string procName = cce.NonNull(expr.Op as VCExprBoogieFunctionOp).Func.Name;
+ if (!implName2StratifiedInliningInfo.ContainsKey(procName)) continue;
+
+ StratifiedInliningInfo info = implName2StratifiedInliningInfo[procName];
+ info.GenerateVC();
+ //Console.WriteLine("Inlining {0}", procName);
+ VCExpr expansion = cce.NonNull(info.vcexpr);
+
+ // Instantiate the "forall" variables
+ Dictionary<VCExprVar, VCExpr> substForallDict = new Dictionary<VCExprVar, VCExpr>();
+ Contract.Assert(info.interfaceExprVars.Count == expr.Length);
+ for (int i = 0; i < info.interfaceExprVars.Count; i++) {
+ substForallDict.Add(info.interfaceExprVars[i], expr[i]);
+ }
+ VCExprSubstitution substForall = new VCExprSubstitution(substForallDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
+
+ SubstitutingVCExprVisitor subst = new SubstitutingVCExprVisitor(prover.VCExprGen);
+ Contract.Assert(subst != null);
+ expansion = subst.Mutate(expansion, substForall);
+
+ // Instantiate and declare the "exists" variables
+ Dictionary<VCExprVar, VCExpr> substExistsDict = new Dictionary<VCExprVar, VCExpr>();
+ foreach (VCExprVar v in info.privateExprVars) {
+ Contract.Assert(v != null);
+ string newName = v.Name + "_si_" + newVarCnt.ToString();
+ newVarCnt++;
+ prover.Context.DeclareConstant(new Constant(Token.NoToken, new TypedIdent(Token.NoToken, newName, v.Type)), false, null);
+ substExistsDict.Add(v, prover.VCExprGen.Variable(newName, v.Type));
+ }
+ if (CommandLineOptions.Clo.SIBoolControlVC)
+ {
+ // record the mapping for control booleans (for tracing the path later)
+ calls.candiate2block2controlVar[id] = new Dictionary<Block, VCExpr>();
+ foreach (var tup in info.blockToControlVar)
+ {
+ calls.candiate2block2controlVar[id].Add(tup.Key,
+ substExistsDict[tup.Value]);
+ }
+ }
+ if (CommandLineOptions.Clo.ModelViewFile != null) {
+ SaveSubstitution(vState, id, substForallDict, substExistsDict);
+ }
+ VCExprSubstitution substExists = new VCExprSubstitution(substExistsDict, new Dictionary<TypeVariable, Microsoft.Boogie.Type>());
+
+ subst = new SubstitutingVCExprVisitor(prover.VCExprGen);
+ expansion = subst.Mutate(expansion, substExists);
+
+ if (!calls.currCandidates.Contains(id)) {
+ Console.WriteLine("Don't know what we just expanded");
+ }
+
+ calls.currCandidates.Remove(id);
+
+ // Record the new set of candidates and rename absy labels
+ calls.currInlineCount = id;
+ calls.setCurrProc(procName);
+ expansion = calls.Mutate(expansion, true);
+
+ //expansion = checker.VCExprGen.Eq(calls.id2ControlVar[id], expansion);
+ expansion = prover.VCExprGen.Implies(calls.id2ControlVar[id], expansion);
+ calls.id2VC.Add(id, expansion);
+
+ exprToPush = prover.VCExprGen.And(exprToPush, expansion);
+ }
+ vState.checker.prover.Assert(exprToPush, true);
+ vState.vcSize += SizeComputingVisitor.ComputeSize(exprToPush);
+ }
+
+ private void SaveSubstitution(VerificationState vState, int id,
+ Dictionary<VCExprVar, VCExpr> substForallDict, Dictionary<VCExprVar, VCExpr> substExistsDict) {
+ var prover = vState.checker.prover;
+ var calls = vState.calls;
+ Boogie2VCExprTranslator translator = prover.Context.BoogieExprTranslator;
+ VCExprVar mvStateConstant = translator.LookupVariable(ModelViewInfo.MVState_ConstantDef);
+ substExistsDict.Add(mvStateConstant, prover.VCExprGen.Integer(BigNum.FromInt(id)));
+ Dictionary<VCExprVar, VCExpr> mapping = new Dictionary<VCExprVar, VCExpr>();
+ foreach (var key in substForallDict.Keys)
+ mapping[key] = substForallDict[key];
+ foreach (var key in substExistsDict.Keys)
+ mapping[key] = substExistsDict[key];
+ calls.id2Vars[id] = mapping;
+ }
+
+ // Uniquely identifies a procedure call (the call expr, instance)
+ public class BoogieCallExpr : IEquatable<BoogieCallExpr> {
+ public NAryExpr expr;
+ public int inlineCnt;
+
+ public BoogieCallExpr(NAryExpr expr, int inlineCnt) {
+ this.expr = expr;
+ this.inlineCnt = inlineCnt;
+ }
+
+ public override int GetHashCode() {
+ return expr.GetHashCode() + 131 * inlineCnt.GetHashCode();
+ }
+
+ public override bool Equals(object obj) {
+ BoogieCallExpr that = obj as BoogieCallExpr;
+ return (expr == that.expr && inlineCnt == that.inlineCnt);
+ }
+
+ public bool Equals(BoogieCallExpr that) {
+ return (expr == that.expr && inlineCnt == that.inlineCnt);
+ }
+ }
+
+ // This class is used to traverse VCs and do the following:
+ // -- collect the set of FunctionCall nodes and label them with a unique string
+ // -- Rename all other labels (so that calling this on the same VC results in
+ // VCs with different labels each time)
+ public class FCallHandler : MutatingVCExprVisitor<bool> {
+ Dictionary<string/*!*/, StratifiedInliningInfo/*!*/>/*!*/ implName2StratifiedInliningInfo;
+ public readonly Dictionary<int, Absy>/*!*/ mainLabel2absy;
+ public Dictionary<BoogieCallExpr/*!*/, int>/*!*/ boogieExpr2Id;
+ public Dictionary<BoogieCallExpr/*!*/, VCExpr>/*!*/ recordExpr2Var;
+ public Dictionary<int, VCExprNAry/*!*/>/*!*/ id2Candidate;
+ public Dictionary<int, VCExprVar/*!*/>/*!*/ id2ControlVar;
+ public Dictionary<int, VCExpr> id2VC;
+ public Dictionary<string/*!*/, int>/*!*/ label2Id;
+ // candidate to block to Bool Control variable
+ public Dictionary<int, Dictionary<Block, VCExpr>> candiate2block2controlVar;
+ // Stores the candidate from which this one originated
+ public Dictionary<int, int> candidateParent;
+ // Mapping from candidate Id to the "si_unique_call" id that led to
+ // this candidate. This is useful for getting persistent names for
+ // candidates
+ public Dictionary<int, int> candidate2callId;
+ // A cache for candidate id to its persistent name
+ public Dictionary<int, string> persistentNameCache;
+ // Inverse of the above map
+ public Dictionary<string, int> persistentNameInv;
+ // Used to record candidates recently added
+ public HashSet<int> recentlyAddedCandidates;
+ // Name of main procedure
+ private string mainProcName;
+ // A map from candidate id to the VCExpr that represents its
+ // first argument (used for obtaining concrete values in error trace)
+ public Dictionary<int, VCExpr> argExprMap;
+
+ // map from candidate to summary candidates
+ public Dictionary<int, List<Tuple<VCExprVar, VCExpr>>> summaryCandidates;
+ private Dictionary<string, List<Tuple<VCExprVar, VCExpr>>> summaryTemp;
+ // set of all boolean guards of summaries
+ public HashSet<VCExprVar> allSummaryConst;
+
+ public HashSet<int> forcedCandidates;
+
+ // User info -- to decrease/increase calculation of recursion bound
+ public Dictionary<int, int> recursionIncrement;
+ public Dictionary<string, int> extraRecursion;
+
+ public HashSet<int> currCandidates;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
+ Contract.Invariant(mainLabel2absy != null);
+ Contract.Invariant(boogieExpr2Id != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(id2Candidate));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(id2ControlVar));
+ Contract.Invariant(label2Id != null);
+ }
+
+ // Name of the procedure whose VC we're mutating
+ string currProc;
+
+ // The 0^th candidate is main
+ static int candidateCount = 1;
+ public int currInlineCount;
+
+ public Dictionary<int, Dictionary<VCExprVar, VCExpr>> id2Vars;
+
+ public FCallHandler(VCExpressionGenerator/*!*/ gen,
+ Dictionary<string/*!*/, StratifiedInliningInfo/*!*/>/*!*/ implName2StratifiedInliningInfo,
+ string mainProcName, Dictionary<int, Absy>/*!*/ mainLabel2absy)
+ : base(gen) {
+ Contract.Requires(gen != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
+ Contract.Requires(mainLabel2absy != null);
+ this.implName2StratifiedInliningInfo = implName2StratifiedInliningInfo;
+ this.mainProcName = mainProcName;
+ this.mainLabel2absy = mainLabel2absy;
+ id2Candidate = new Dictionary<int, VCExprNAry>();
+ id2ControlVar = new Dictionary<int, VCExprVar>();
+ boogieExpr2Id = new Dictionary<BoogieCallExpr, int>();
+ label2Id = new Dictionary<string, int>();
+ currCandidates = new HashSet<int>();
+ currInlineCount = 0;
+ currProc = null;
+ labelRenamer = new Dictionary<string, int>();
+ labelRenamerInv = new Dictionary<string, string>();
+ candidateParent = new Dictionary<int, int>();
+ //callGraphMapping = new Dictionary<int, int>();
+ recursionIncrement = new Dictionary<int, int>();
+ candidate2callId = new Dictionary<int, int>();
+ persistentNameCache = new Dictionary<int, string>();
+ persistentNameInv = new Dictionary<string, int>();
+ persistentNameCache[0] = "0";
+ persistentNameInv["0"] = 0;
+ recentlyAddedCandidates = new HashSet<int>();
+ argExprMap = new Dictionary<int, VCExpr>();
+ recordExpr2Var = new Dictionary<BoogieCallExpr, VCExpr>();
+ candiate2block2controlVar = new Dictionary<int, Dictionary<Block, VCExpr>>();
+
+ forcedCandidates = new HashSet<int>();
+ extraRecursion = new Dictionary<string, int>();
+
+ id2Vars = new Dictionary<int, Dictionary<VCExprVar, VCExpr>>();
+ summaryCandidates = new Dictionary<int, List<Tuple<VCExprVar, VCExpr>>>();
+ summaryTemp = new Dictionary<string, List<Tuple<VCExprVar, VCExpr>>>();
+ allSummaryConst = new HashSet<VCExprVar>();
+ id2VC = new Dictionary<int, VCExpr>();
+ }
+
+ public void Clear() {
+ currCandidates = new HashSet<int>();
+ }
+
+ // Return the set of all candidates
+ public HashSet<int> getAllCandidates() {
+ var ret = new HashSet<int>(candidateParent.Keys);
+ ret.Add(0);
+ return ret;
+ }
+
+ // Given a candidate "id", let proc(id) be the
+ // procedure corresponding to id. This procedure returns
+ // the number of times proc(id) appears as an ancestor
+ // of id. This is the same as the number of times we've
+ // recursed on proc(id)
+ public int getRecursionBound(int id) {
+ int ret = 1;
+ var str = getProc(id);
+
+ while (candidateParent.ContainsKey(id)) {
+ if (recursionIncrement.ContainsKey(id)) ret += recursionIncrement[id];
+ id = candidateParent[id];
+ if (getProc(id) == str && !forcedCandidates.Contains(id)) ret++;
+ }
+
+ // Usual
+ if (!extraRecursion.ContainsKey(str))
+ return ret;
+
+ // Usual
+ if (ret <= CommandLineOptions.Clo.RecursionBound - 1)
+ return ret;
+
+ // Special
+ if (ret >= CommandLineOptions.Clo.RecursionBound &&
+ ret <= CommandLineOptions.Clo.RecursionBound + extraRecursion[str] - 1)
+ return CommandLineOptions.Clo.RecursionBound - 1;
+
+ // Special
+ return ret - extraRecursion[str];
+ }
+
+ // This procedure returns the stack depth of the candidate
+ // (distance from main)
+ public int getStackDepth(int id)
+ {
+ int ret = 1;
+
+ while (candidateParent.ContainsKey(id))
+ {
+ ret++;
+ id = candidateParent[id];
+ }
+
+ return ret;
+ }
+
+ // Set user-define increment/decrement to recursionBound
+ public void setRecursionIncrement(int id, int incr) {
+ if (recursionIncrement.ContainsKey(id))
+ recursionIncrement[id] = incr;
+ else
+ recursionIncrement.Add(id, incr);
+ }
+
+ // Returns the name of the procedure corresponding to candidate id
+ public string getProc(int id) {
+ if (id == 0) return mainProcName;
+
+ return (id2Candidate[id].Op as VCExprBoogieFunctionOp).Func.Name;
+ }
+
+ // Get a unique id for this candidate (dependent only on the Call
+ // graph of the program). The persistent id is:
+ // 0: for main
+ // a_b_c: where a is the persistent id of parent, and b is the procedure name
+ // and c is the unique call id (if any)
+ public string getPersistentId(int top_id) {
+ if (top_id == 0) return "0";
+ Debug.Assert(candidateParent.ContainsKey(top_id));
+ if (persistentNameCache.ContainsKey(top_id))
+ return persistentNameCache[top_id];
+
+ var parent_id = getPersistentId(candidateParent[top_id]);
+ var call_id = candidate2callId.ContainsKey(top_id) ? candidate2callId[top_id] : -1;
+ var ret = string.Format("{0}_131_{1}_131_{2}", parent_id, getProc(top_id), call_id);
+ persistentNameCache[top_id] = ret;
+ persistentNameInv[ret] = top_id;
+ return ret;
+ }
+
+ public int getCandidateFromGraphNode(string n) {
+ if (!persistentNameInv.ContainsKey(n)) {
+ return -1;
+ }
+ return persistentNameInv[n];
+ }
+
+ private int GetNewId(VCExprNAry vc) {
+ Contract.Requires(vc != null);
+ int id = candidateCount;
+
+ id2Candidate[id] = vc;
+ id2ControlVar[id] = Gen.Variable("si_control_var_bool_" + id.ToString(), Microsoft.Boogie.Type.Bool);
+
+ candidateCount++;
+ currCandidates.Add(id);
+ recentlyAddedCandidates.Add(id);
+
+ return id;
+ }
+
+ private string GetLabel(int id) {
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ string ret = "si_fcall_" + id.ToString();
+ if (!label2Id.ContainsKey(ret))
+ label2Id[ret] = id;
+
+ return ret;
+ }
+
+ public int GetId(string label) {
+ Contract.Requires(label != null);
+ if (!label2Id.ContainsKey(label))
+ return -1;
+ return label2Id[label];
+ }
+
+ Dictionary<string, int> labelRenamer;
+ Dictionary<string, string> labelRenamerInv;
+
+ public string RenameAbsyLabel(string label) {
+ Contract.Requires(label != null);
+ Contract.Requires(label.Length >= 1);
+ Contract.Ensures(Contract.Result<string>() != null);
+
+ // Remove the sign from the label
+ string nosign = label.Substring(1);
+ var ret = "si_inline_" + currInlineCount.ToString() + "_" + nosign;
+
+ if (!labelRenamer.ContainsKey(ret)) {
+ var c = labelRenamer.Count + 11; // two digit labels only
+ labelRenamer.Add(ret, c);
+ labelRenamerInv.Add(c.ToString(), ret);
+ }
+ return labelRenamer[ret].ToString();
+ }
+
+ public string ParseRenamedAbsyLabel(string label, int cnt) {
+ Contract.Requires(label != null);
+ if (!labelRenamerInv.ContainsKey(label)) {
+ return null;
+ }
+ var str = labelRenamerInv[label];
+ var prefix = "si_inline_" + cnt.ToString() + "_";
+ if (!str.StartsWith(prefix)) return null;
+ return str.Substring(prefix.Length);
+ }
+
+ public void setCurrProc(string name) {
+ Contract.Requires(name != null);
+ currProc = name;
+ Contract.Assert(implName2StratifiedInliningInfo.ContainsKey(name));
+ }
+
+ public void setCurrProcAsMain() {
+ currProc = "";
+ }
+
+ // Return the formula (candidate IFF false)
+ public VCExpr getFalseExpr(int candidateId) {
+ //return Gen.Eq(VCExpressionGenerator.False, id2ControlVar[candidateId]);
+ return Gen.Not(id2ControlVar[candidateId]);
+ }
+
+ // Return the formula (candidate IFF true)
+ public VCExpr getTrueExpr(int candidateId) {
+ return Gen.Eq(VCExpressionGenerator.True, id2ControlVar[candidateId]);
+ }
+
+ public Dictionary<int, Absy> getLabel2absy() {
+ Contract.Ensures(Contract.Result<Dictionary<int, Absy>>() != null);
+
+ Contract.Assert(currProc != null);
+ if (currProc == "") {
+ return mainLabel2absy;
+ }
+ return cce.NonNull(implName2StratifiedInliningInfo[currProc].label2absy);
+ }
+
+ // Finds labels and changes them:
+ // si_fcall_id: if "id" corresponds to a tracked procedure call, then
+ // si_control_var_candidateId
+ // si_fcall_id: if "id" does not corresponds to a tracked procedure call, then
+ // delete
+ // num: si_inline_num
+ //
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
+ List<VCExpr/*!*/>/*!*/ newSubExprs,
+ // has any of the subexpressions changed?
+ bool changed,
+ bool arg) {
+ //Contract.Requires(originalNode != null);
+ //Contract.Requires(cce.NonNullElements(newSubExprs));
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr ret;
+ if (changed)
+ ret = Gen.Function(originalNode.Op,
+ newSubExprs, originalNode.TypeArguments);
+ else
+ ret = originalNode;
+
+ VCExprLabelOp lop = originalNode.Op as VCExprLabelOp;
+ if (lop == null) return ret;
+ if (!(ret is VCExprNAry)) return ret;
+
+ VCExprNAry retnary = (VCExprNAry)ret;
+ Contract.Assert(retnary != null);
+ string prefix = "si_fcall_"; // from Wlp.ssc::Cmd(...)
+ if (lop.label.Substring(1).StartsWith(prefix)) {
+ int id = Int32.Parse(lop.label.Substring(prefix.Length + 1));
+ Dictionary<int, Absy> label2absy = getLabel2absy();
+ Absy cmd = label2absy[id] as Absy;
+ //label2absy.Remove(id);
+
+ Contract.Assert(cmd != null);
+ AssumeCmd acmd = cmd as AssumeCmd;
+ Contract.Assert(acmd != null);
+ NAryExpr naryExpr = acmd.Expr as NAryExpr;
+ Contract.Assert(naryExpr != null);
+
+ string calleeName = naryExpr.Fun.FunctionName;
+
+ VCExprNAry callExpr = retnary[0] as VCExprNAry;
+
+ if (implName2StratifiedInliningInfo.ContainsKey(calleeName)) {
+ Contract.Assert(callExpr != null);
+ int candidateId = GetNewId(callExpr);
+ boogieExpr2Id[new BoogieCallExpr(naryExpr, currInlineCount)] = candidateId;
+ candidateParent[candidateId] = currInlineCount;
+ candiate2block2controlVar[candidateId] = new Dictionary<Block, VCExpr>();
+
+ string label = GetLabel(candidateId);
+ var unique_call_id = QKeyValue.FindIntAttribute(acmd.Attributes, "si_unique_call", -1);
+ if (unique_call_id != -1)
+ candidate2callId[candidateId] = unique_call_id;
+
+ //return Gen.LabelPos(label, callExpr);
+ return Gen.LabelPos(label, id2ControlVar[candidateId]);
+ }
+ else if (calleeName.StartsWith(recordProcName)) {
+ Contract.Assert(callExpr != null);
+ Debug.Assert(callExpr.Length == 1);
+ Debug.Assert(callExpr[0] != null);
+ recordExpr2Var[new BoogieCallExpr(naryExpr, currInlineCount)] = callExpr[0];
+ return callExpr;
+ }
+ else {
+ // callExpr can be null; this happens when the FunctionCall was on a
+ // pure function (not procedure) and the function got inlined
+ return retnary[0];
+ }
+ }
+
+ // Else, rename label
+ string newLabel = RenameAbsyLabel(lop.label);
+ if (lop.pos) {
+ return Gen.LabelPos(newLabel, retnary[0]);
+ }
+ else {
+ return Gen.LabelNeg(newLabel, retnary[0]);
+ }
+
+ }
+
+ // Upgrades summaryTemp to summaryCandidates by matching ensure clauses with
+ // the appropriate candidate they came from
+ public void matchSummaries() {
+ var id2Set = new Dictionary<string, List<Tuple<int, HashSet<VCExprVar>>>>();
+ foreach (var id in recentlyAddedCandidates) {
+ var collect = new CollectVCVars();
+ var proc = getProc(id);
+ if (!id2Set.ContainsKey(proc)) id2Set.Add(proc, new List<Tuple<int, HashSet<VCExprVar>>>());
+ id2Set[proc].Add(Tuple.Create(id, collect.Collect(id2Candidate[id], true)));
+ }
+
+ foreach (var kvp in summaryTemp) {
+ Contract.Assert(id2Set.ContainsKey(kvp.Key));
+ var ls = id2Set[kvp.Key];
+ foreach (var tup in kvp.Value) {
+ var collect = new CollectVCVars();
+ var s1 = collect.Collect(tup.Item2, true);
+ var found = false;
+ foreach (var t in ls) {
+ var s2 = t.Item2;
+ if (s1.IsSubsetOf(s2)) {
+ if (!summaryCandidates.ContainsKey(t.Item1))
+ summaryCandidates.Add(t.Item1, new List<Tuple<VCExprVar, VCExpr>>());
+ summaryCandidates[t.Item1].Add(tup);
+ allSummaryConst.Add(tup.Item1);
+ found = true;
+ break;
+ }
+ }
+ Contract.Assert(found);
+ }
+ }
+ summaryTemp.Clear();
+ }
+
+ public IEnumerable<int> getInlinedCandidates() {
+ return candidateParent.Keys.Except(currCandidates).Union(new int[] { 0 });
+ }
+
+ } // end FCallHandler
+
+ // Collects the set of all VCExprVar in a given VCExpr
+ class CollectVCVars : CollectingVCExprVisitor<HashSet<VCExprVar>, bool> {
+ public override HashSet<VCExprVar> Visit(VCExprVar node, bool arg) {
+ var ret = new HashSet<VCExprVar>();
+ ret.Add(node);
+ return ret;
+ }
+
+ protected override HashSet<VCExprVar> CombineResults(List<HashSet<VCExprVar>> results, bool arg) {
+ var ret = new HashSet<VCExprVar>();
+ results.Iter(s => ret.UnionWith(s));
+ return ret;
+ }
+ }
+
+ public class FCallInliner : MutatingVCExprVisitor<bool> {
+ public Dictionary<int, VCExpr/*!*/>/*!*/ subst;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullDictionaryAndValues(subst));
+ }
+
+
+ public FCallInliner(VCExpressionGenerator gen)
+ : base(gen) {
+ Contract.Requires(gen != null);
+ subst = new Dictionary<int, VCExpr>();
+ }
+
+ public void Clear() {
+ subst = new Dictionary<int, VCExpr>();
+ }
+
+ protected override VCExpr/*!*/ UpdateModifiedNode(VCExprNAry/*!*/ originalNode,
+ List<VCExpr/*!*/>/*!*/ newSubExprs,
+ // has any of the subexpressions changed?
+ bool changed,
+ bool arg) {
+ //Contract.Requires(originalNode != null);Contract.Requires(newSubExprs != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr ret;
+ if (changed)
+ ret = Gen.Function(originalNode.Op, newSubExprs, originalNode.TypeArguments);
+ else
+ ret = originalNode;
+
+ VCExprLabelOp lop = originalNode.Op as VCExprLabelOp;
+ if (lop == null) return ret;
+ if (!(ret is VCExprNAry)) return ret;
+
+ string prefix = "si_fcall_"; // from FCallHandler::GetLabel
+ if (lop.label.Substring(1).StartsWith(prefix)) {
+ int id = Int32.Parse(lop.label.Substring(prefix.Length + 1));
+ if (subst.ContainsKey(id)) {
+ return subst[id];
+ }
+ }
+ return ret;
+ }
+
+ } // end FCallInliner
+
+
+
+ public class StratifiedInliningErrorReporter : ProverInterface.ErrorHandler {
+ Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo;
+ ProverInterface theoremProver;
+ VerifierCallback callback;
+ FCallHandler calls;
+ StratifiedInliningInfo mainInfo;
+ StratifiedVC mainVC;
+
+ public bool underapproximationMode;
+ public List<int> candidatesToExpand;
+ public List<StratifiedCallSite> callSitesToExpand;
+
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(candidatesToExpand != null);
+ Contract.Invariant(mainInfo != null);
+ Contract.Invariant(callback != null);
+ Contract.Invariant(theoremProver != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
+ }
+
+
+ public StratifiedInliningErrorReporter(Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo,
+ ProverInterface theoremProver, VerifierCallback callback,
+ StratifiedInliningInfo mainInfo) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
+ Contract.Requires(theoremProver != null);
+ Contract.Requires(callback != null);
+ Contract.Requires(mainInfo != null);
+ this.implName2StratifiedInliningInfo = implName2StratifiedInliningInfo;
+ this.theoremProver = theoremProver;
+ this.callback = callback;
+ this.mainInfo = mainInfo;
+ this.underapproximationMode = false;
+ this.calls = null;
+ this.candidatesToExpand = new List<int>();
+ }
+
+ public StratifiedInliningErrorReporter(Dictionary<string, StratifiedInliningInfo> implName2StratifiedInliningInfo,
+ ProverInterface theoremProver, VerifierCallback callback,
+ StratifiedVC mainVC) {
+ Contract.Requires(cce.NonNullDictionaryAndValues(implName2StratifiedInliningInfo));
+ Contract.Requires(theoremProver != null);
+ Contract.Requires(callback != null);
+ Contract.Requires(mainVC != null);
+ this.implName2StratifiedInliningInfo = implName2StratifiedInliningInfo;
+ this.theoremProver = theoremProver;
+ this.callback = callback;
+ this.mainVC = mainVC;
+ this.underapproximationMode = false;
+ this.candidatesToExpand = new List<int>();
+ }
+
+ public void SetCandidateHandler(FCallHandler calls) {
+ Contract.Requires(calls != null);
+ this.calls = calls;
+ }
+
+ List<Tuple<int, int>> orderedStateIds;
+
+ private Model.Element GetModelValue(Model m, Variable v, int candidateId) {
+ // first, get the unique name
+ string uniqueName;
+
+ VCExprVar vvar = theoremProver.Context.BoogieExprTranslator.TryLookupVariable(v);
+ if (vvar == null) {
+ uniqueName = v.Name;
+ }
+ else {
+ if (candidateId != 0) {
+ Dictionary<VCExprVar, VCExpr> mapping = calls.id2Vars[candidateId];
+ if (mapping.ContainsKey(vvar)) {
+ VCExpr e = mapping[vvar];
+ if (e is VCExprLiteral) {
+ VCExprLiteral lit = (VCExprLiteral)e;
+ return m.MkElement(lit.ToString());
+ }
+ vvar = (VCExprVar)mapping[vvar];
+ }
+ }
+ uniqueName = theoremProver.Context.Lookup(vvar);
+ }
+
+ var f = m.TryGetFunc(uniqueName);
+ if (f == null)
+ return m.MkFunc("@undefined", 0).GetConstant();
+ return f.GetConstant();
+ }
+
+ public readonly static int CALL = -1;
+ public readonly static int RETURN = -2;
+
+ public void PrintModel(Model model) {
+ var filename = CommandLineOptions.Clo.ModelViewFile;
+ if (model == null || filename == null) return;
+
+ if (filename == "-") {
+ model.Write(Console.Out);
+ Console.Out.Flush();
+ }
+ else {
+ using (var wr = new StreamWriter(filename, !Counterexample.firstModelFile)) {
+ Counterexample.firstModelFile = false;
+ model.Write(wr);
+ }
+ }
+ }
+
+ private void GetModelWithStates(Model m) {
+ if (m == null) return;
+ var mvInfo = mainInfo.mvInfo;
+ var mvstates = m.TryGetFunc("$mv_state");
+ if (mvstates == null)
+ return;
+
+ Contract.Assert(mvstates.Arity == 2);
+
+ foreach (Variable v in mvInfo.AllVariables) {
+ m.InitialState.AddBinding(v.Name, GetModelValue(m, v, 0));
+ }
+
+ int lastCandidate = 0;
+ int lastCapturePoint = CALL;
+ for (int i = 0; i < this.orderedStateIds.Count; ++i) {
+ var s = orderedStateIds[i];
+ int candidate = s.Item1;
+ int capturePoint = s.Item2;
+ string implName = calls.getProc(candidate);
+ ModelViewInfo info = candidate == 0 ? mvInfo : implName2StratifiedInliningInfo[implName].mvInfo;
+
+ if (capturePoint == CALL || capturePoint == RETURN) {
+ lastCandidate = candidate;
+ lastCapturePoint = capturePoint;
+ continue;
+ }
+
+ Contract.Assume(0 <= capturePoint && capturePoint < info.CapturePoints.Count);
+ VC.ModelViewInfo.Mapping map = info.CapturePoints[capturePoint];
+ var prevInc = (lastCapturePoint != CALL && lastCapturePoint != RETURN && candidate == lastCandidate)
+ ? info.CapturePoints[lastCapturePoint].IncarnationMap : new Dictionary<Variable, Expr>();
+ var cs = m.MkState(map.Description);
+
+ foreach (Variable v in info.AllVariables) {
+ var e = (Expr)map.IncarnationMap[v];
+
+ if (e == null) {
+ if (lastCapturePoint == CALL || lastCapturePoint == RETURN) {
+ cs.AddBinding(v.Name, GetModelValue(m, v, candidate));
+ }
+ continue;
+ }
+
+ if (lastCapturePoint != CALL && lastCapturePoint != RETURN && prevInc[v] == e) continue; // skip unchanged variables
+
+ Model.Element elt;
+ if (e is IdentifierExpr) {
+ IdentifierExpr ide = (IdentifierExpr)e;
+ elt = GetModelValue(m, ide.Decl, candidate);
+ }
+ else if (e is LiteralExpr) {
+ LiteralExpr lit = (LiteralExpr)e;
+ elt = m.MkElement(lit.Val.ToString());
+ }
+ else {
+ Contract.Assume(false);
+ elt = m.MkFunc(e.ToString(), 0).GetConstant();
+ }
+ cs.AddBinding(v.Name, elt);
+ }
+
+ lastCandidate = candidate;
+ lastCapturePoint = capturePoint;
+ }
+
+ return;
+ }
+
+ public override void OnResourceExceeded(string message, IEnumerable<Tuple<AssertCmd, TransferCmd>> assertCmds = null)
+ {
+ //Contract.Requires(message != null);
+ }
+
+ public override void OnModel(IList<string/*!*/>/*!*/ labels, Model model, ProverInterface.Outcome proverOutcome) {
+ if (CommandLineOptions.Clo.PrintErrorModel >= 1 && model != null) {
+ model.Write(ErrorReporter.ModelWriter);
+ ErrorReporter.ModelWriter.Flush();
+ }
+
+ // Timeout?
+ if (proverOutcome != ProverInterface.Outcome.Invalid)
+ return;
+
+ candidatesToExpand = new List<int>();
+ orderedStateIds = new List<Tuple<int, int>>();
+ var cex = GenerateTrace(labels, model, 0, mainInfo.impl, mainInfo.mvInfo);
+
+ if (underapproximationMode && cex != null) {
+ //Debug.Assert(candidatesToExpand.All(calls.isSkipped));
+ GetModelWithStates(model);
+ callback.OnCounterexample(cex, null);
+ this.PrintModel(model);
+ }
+ }
+
+ private Counterexample GenerateTrace(IList<string/*!*/>/*!*/ labels, Model/*!*/ errModel,
+ int candidateId, Implementation procImpl, ModelViewInfo mvInfo) {
+ Contract.Requires(cce.NonNullElements(labels));
+ Contract.Requires(procImpl != null);
+
+ Hashtable traceNodes = new Hashtable();
+
+ if (!CommandLineOptions.Clo.SIBoolControlVC)
+ {
+ foreach (string s in labels)
+ {
+ Contract.Assert(s != null);
+ var absylabel = calls.ParseRenamedAbsyLabel(s, candidateId);
+
+ if (absylabel == null) continue;
+
+ Absy absy;
+
+ if (candidateId == 0)
+ {
+ absy = Label2Absy(absylabel);
+ }
+ else
+ {
+ absy = Label2Absy(procImpl.Name, absylabel);
+ }
+
+ if (traceNodes.ContainsKey(absy))
+ System.Console.WriteLine("Warning: duplicate label: " + s + " read while tracing nodes");
+ else
+ traceNodes.Add(absy, null);
+ }
+ }
+ else
+ {
+ Debug.Assert(CommandLineOptions.Clo.UseProverEvaluate, "Must use prover evaluate option with boolControlVC");
+ var block = procImpl.Blocks[0];
+ traceNodes.Add(block, null);
+ while (true)
+ {
+ var gc = block.TransferCmd as GotoCmd;
+ if (gc == null) break;
+ Block next = null;
+ foreach (var succ in gc.labelTargets)
+ {
+ var succtaken = (bool) theoremProver.Evaluate(calls.candiate2block2controlVar[candidateId][succ]);
+ if (succtaken)
+ {
+ next = succ;
+ traceNodes.Add(succ, null);
+ break;
+ }
+ }
+ Debug.Assert(next != null, "Must find a successor");
+ Debug.Assert(traceNodes.ContainsKey(next), "CFG cannot be cyclic");
+ block = next;
+ }
+ }
+
+ List<Block> trace = new List<Block>();
+ Block entryBlock = cce.NonNull(procImpl.Blocks[0]);
+ Contract.Assert(entryBlock != null);
+ Contract.Assert(traceNodes.Contains(entryBlock));
+ trace.Add(entryBlock);
+
+ var calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
+ Counterexample newCounterexample = GenerateTraceRec(labels, errModel, mvInfo, candidateId, entryBlock, traceNodes, trace, calleeCounterexamples);
+
+ return newCounterexample;
+ }
+
+ private Counterexample GenerateTraceRec(
+ IList<string/*!*/>/*!*/ labels, Model/*!*/ errModel, ModelViewInfo mvInfo,
+ int candidateId,
+ Block/*!*/ b, Hashtable/*!*/ traceNodes, List<Block>/*!*/ trace,
+ Dictionary<TraceLocation/*!*/, CalleeCounterexampleInfo/*!*/>/*!*/ calleeCounterexamples) {
+ Contract.Requires(cce.NonNullElements(labels));
+ Contract.Requires(b != null);
+ Contract.Requires(traceNodes != null);
+ Contract.Requires(trace != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(calleeCounterexamples));
+ // After translation, all potential errors come from asserts.
+ while (true) {
+ List<Cmd> cmds = b.Cmds;
+ TransferCmd transferCmd = cce.NonNull(b.TransferCmd);
+ for (int i = 0; i < cmds.Count; i++) {
+ Cmd cmd = cce.NonNull(cmds[i]);
+
+ // Skip if 'cmd' not contained in the trace or not an assert
+ if ((cmd is AssertCmd && traceNodes.Contains(cmd)) ||
+ (cmd is AssumeCmd && QKeyValue.FindBoolAttribute((cmd as AssumeCmd).Attributes, "exitAssert")))
+ {
+ var acmd = cmd as AssertCmd;
+ if (acmd == null) { acmd = new AssertCmd(Token.NoToken, Expr.True); }
+ Counterexample newCounterexample = AssertCmdToCounterexample(acmd, transferCmd, trace, errModel, mvInfo, theoremProver.Context);
+ newCounterexample.AddCalleeCounterexample(calleeCounterexamples);
+ return newCounterexample;
+ }
+
+ // Counterexample generation for inlined procedures
+ AssumeCmd assumeCmd = cmd as AssumeCmd;
+ if (assumeCmd == null)
+ continue;
+ NAryExpr naryExpr = assumeCmd.Expr as NAryExpr;
+ if (naryExpr == null)
+ continue;
+ string calleeName = naryExpr.Fun.FunctionName;
+ Contract.Assert(calleeName != null);
+
+ BinaryOperator binOp = naryExpr.Fun as BinaryOperator;
+ if (binOp != null && binOp.Op == BinaryOperator.Opcode.And) {
+ Expr expr = naryExpr.Args[0];
+ NAryExpr mvStateExpr = expr as NAryExpr;
+ if (mvStateExpr != null && mvStateExpr.Fun.FunctionName == ModelViewInfo.MVState_FunctionDef.Name) {
+ LiteralExpr x = mvStateExpr.Args[1] as LiteralExpr;
+ orderedStateIds.Add(new Tuple<int, int>(candidateId, x.asBigNum.ToInt));
+ }
+ }
+
+ if (calleeName.StartsWith(recordProcName) && (errModel != null || CommandLineOptions.Clo.UseProverEvaluate)) {
+ var expr = calls.recordExpr2Var[new BoogieCallExpr(naryExpr, candidateId)];
+
+ // Record concrete value of the argument to this procedure
+ var args = new List<object>();
+ if (errModel == null && CommandLineOptions.Clo.UseProverEvaluate)
+ {
+ object exprv;
+ try
+ {
+ exprv = theoremProver.Evaluate(expr);
+ }
+ catch (Exception)
+ {
+ exprv = null;
+ }
+ args.Add(exprv);
+ }
+ else
+ {
+ if (expr is VCExprIntLit)
+ {
+ args.Add(errModel.MkElement((expr as VCExprIntLit).Val.ToString()));
+ }
+ else if (expr == VCExpressionGenerator.True)
+ {
+ args.Add(errModel.MkElement("true"));
+ }
+ else if (expr == VCExpressionGenerator.False)
+ {
+ args.Add(errModel.MkElement("false"));
+ }
+ else if (expr is VCExprVar)
+ {
+ var idExpr = expr as VCExprVar;
+ string name = theoremProver.Context.Lookup(idExpr);
+ Contract.Assert(name != null);
+ Model.Func f = errModel.TryGetFunc(name);
+ if (f != null)
+ {
+ args.Add(f.GetConstant());
+ }
+ }
+ else
+ {
+ Contract.Assert(false);
+ }
+ }
+ calleeCounterexamples[new TraceLocation(trace.Count - 1, i)] =
+ new CalleeCounterexampleInfo(null, args);
+ continue;
+ }
+
+ if (!implName2StratifiedInliningInfo.ContainsKey(calleeName))
+ continue;
+
+ Contract.Assert(calls != null);
+
+ int calleeId = calls.boogieExpr2Id[new BoogieCallExpr(naryExpr, candidateId)];
+
+ if (calls.currCandidates.Contains(calleeId)) {
+ candidatesToExpand.Add(calleeId);
+ }
+ else {
+ orderedStateIds.Add(new Tuple<int, int>(calleeId, StratifiedInliningErrorReporter.CALL));
+ var calleeInfo = implName2StratifiedInliningInfo[calleeName];
+ calleeCounterexamples[new TraceLocation(trace.Count - 1, i)] =
+ new CalleeCounterexampleInfo(GenerateTrace(labels, errModel, calleeId, calleeInfo.impl, calleeInfo.mvInfo), new List<object>());
+ orderedStateIds.Add(new Tuple<int, int>(candidateId, StratifiedInliningErrorReporter.RETURN));
+ }
+ }
+
+ GotoCmd gotoCmd = transferCmd as GotoCmd;
+ if (gotoCmd != null) {
+ b = null;
+ foreach (Block bb in cce.NonNull(gotoCmd.labelTargets)) {
+ Contract.Assert(bb != null);
+ if (traceNodes.Contains(bb)) {
+ trace.Add(bb);
+ b = bb;
+ break;
+ }
+ }
+ if (b != null) continue;
+ }
+ return null;
+ }
+ }
+
+ public override Absy Label2Absy(string label) {
+ //Contract.Requires(label != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+
+ int id = int.Parse(label);
+ Contract.Assert(calls != null);
+ return cce.NonNull((Absy)calls.mainLabel2absy[id]);
+ }
+
+ public Absy Label2Absy(string procName, string label) {
+ Contract.Requires(label != null);
+ Contract.Requires(procName != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+
+ int id = int.Parse(label);
+ Dictionary<int, Absy> l2a = cce.NonNull(implName2StratifiedInliningInfo[procName]).label2absy;
+ return cce.NonNull((Absy)l2a[id]);
+ }
+
+ public override void OnProverWarning(string msg) {
+ //Contract.Requires(msg != null);
+ callback.OnWarning(msg);
+ }
+ }
+
+ } // class StratifiedVCGen
+
+ public class EmptyErrorHandler : ProverInterface.ErrorHandler
+ {
+ public override void OnModel(IList<string> labels, Model model, ProverInterface.Outcome proverOutcome)
+ { }
+ }
+
+ public class InvalidProgramForSecureVc : Exception
+ {
+ public InvalidProgramForSecureVc(string msg) :
+ base(msg) { }
+ }
+
+ public class SecureVCGen : VCGen
+ {
+ // Z3
+ ProverInterface prover;
+ // Handler
+ ErrorReporter handler;
+ // dump file
+ public static TokenTextWriter outfile = null;
+
+
+ public SecureVCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
+ : base(program, logFilePath, appendLogFile, checkers)
+ {
+ prover = null;
+ handler = null;
+ if (CommandLineOptions.Clo.SecureVcGen != "" && outfile == null)
+ {
+ outfile = new TokenTextWriter(new StreamWriter(CommandLineOptions.Clo.SecureVcGen));
+ CommandLineOptions.Clo.PrintInstrumented = true;
+ var implsToVerify = new HashSet<string>(
+ program.TopLevelDeclarations.OfType<Implementation>()
+ .Where(impl => !impl.SkipVerification)
+ .Select(impl => impl.Name));
+
+ foreach (var decl in program.TopLevelDeclarations)
+ {
+ if (decl is NamedDeclaration && implsToVerify.Contains((decl as NamedDeclaration).Name))
+ continue;
+ decl.Emit(outfile, 0);
+ }
+ }
+ }
+
+ private Block GetExitBlock(Implementation impl)
+ {
+ var exitblocks = impl.Blocks.Where(blk => blk.TransferCmd is ReturnCmd);
+ if (exitblocks.Count() == 1)
+ return exitblocks.First();
+ // create a new exit block
+ var eb = new Block(Token.NoToken, "SVCeb", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+ foreach (var b in exitblocks)
+ {
+ b.TransferCmd = new GotoCmd(Token.NoToken, new List<Block> { eb });
+ }
+ impl.Blocks.Add(eb);
+ return eb;
+ }
+
+ //static int LocalVarCounter = 0;
+ private LocalVariable GetNewLocal(Variable v, string suffix)
+ {
+ return new LocalVariable(Token.NoToken, new TypedIdent(Token.NoToken,
+ string.Format("svc_{0}_{1}", v.Name, suffix), v.TypedIdent.Type));
+ }
+
+ private void GenVc(Implementation impl, VerifierCallback collector)
+ {
+ if (impl.Proc.Requires.Any())
+ throw new InvalidProgramForSecureVc("SecureVc: Requires not supported");
+ if(impl.LocVars.Any(v => isVisible(v)))
+ throw new InvalidProgramForSecureVc("SecureVc: Visible Local variables not allowed");
+
+ // Desugar procedure calls
+ DesugarCalls(impl);
+
+ // Gather spec, remove existing ensures
+ var secureAsserts = new List<AssertCmd>();
+ var logicalAsserts = new List<AssertCmd>();
+
+ foreach (var ens in impl.Proc.Ensures)
+ {
+ if(ens.Free)
+ throw new InvalidProgramForSecureVc("SecureVc: Free Ensures not supported");
+ var dd = new Duplicator();
+ secureAsserts.Add(new AssertCmd(ens.tok, Expr.Not(ens.Condition)));
+ logicalAsserts.Add(dd.VisitAssertCmd(new AssertCmd(ens.tok, ens.Condition)) as AssertCmd);
+ }
+ impl.Proc.Ensures.Clear();
+
+ // Make a copy of the impl
+ var dup = new Duplicator();
+ var implDup = dup.VisitImplementation(impl);
+
+ // Get exit block
+ var eb = GetExitBlock(impl);
+
+ // Create two blocks: one for secureAsserts, one for logical asserts
+ var ebSecure = new Block(Token.NoToken, "svc_secure_asserts", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+ var ebLogical = new Block(Token.NoToken, "svc_logical_asserts", new List<Cmd>(), new ReturnCmd(Token.NoToken));
+
+ eb.TransferCmd = new GotoCmd(eb.TransferCmd.tok, new List<Block> { ebSecure, ebLogical });
+ impl.Blocks.Add(ebSecure);
+ impl.Blocks.Add(ebLogical);
+
+ // Rename spec, while create copies of the hidden variables
+ var substOld = new Dictionary<Variable, Expr>();
+ var substVarSpec = new Dictionary<Variable, Expr>();
+ var substVarPath = new Dictionary<Variable, Expr>();
+ foreach (var g in program.GlobalVariables)
+ {
+ if (!isHidden(g)) continue;
+ var lv = GetNewLocal(g, "In");
+ impl.LocVars.Add(lv);
+ substOld.Add(g, Expr.Ident(lv));
+ }
+
+ for(int i = 0; i < impl.InParams.Count; i++)
+ {
+ var v = impl.Proc.InParams[i];
+ if (!isHidden(v))
+ {
+ substVarSpec.Add(impl.Proc.InParams[i], Expr.Ident(impl.InParams[i]));
+ continue;
+ }
+
+ var lv = GetNewLocal(v, "In");
+ impl.LocVars.Add(lv);
+ substVarSpec.Add(v, Expr.Ident(lv));
+ substVarPath.Add(impl.InParams[i], Expr.Ident(lv));
+ }
+
+ for (int i = 0; i < impl.OutParams.Count; i++)
+ {
+ var v = impl.Proc.OutParams[i];
+ if (!isHidden(v))
+ {
+ substVarSpec.Add(impl.Proc.OutParams[i], Expr.Ident(impl.OutParams[i]));
+ continue;
+ }
+
+ var lv = GetNewLocal(v, "Out");
+ impl.LocVars.Add(lv);
+ substVarSpec.Add(v, Expr.Ident(lv));
+ substVarPath.Add(impl.OutParams[i], Expr.Ident(lv));
+ }
+
+ foreach (var g in program.GlobalVariables)
+ {
+ if (!isHidden(g)) continue;
+ if (!impl.Proc.Modifies.Any(ie => ie.Name == g.Name)) continue;
+
+ var lv = GetNewLocal(g, "Out");
+ impl.LocVars.Add(lv);
+ substVarSpec.Add(g, Expr.Ident(lv));
+ substVarPath.Add(g, Expr.Ident(lv));
+ }
+
+ secureAsserts = secureAsserts.ConvertAll(ac =>
+ Substituter.ApplyReplacingOldExprs(
+ Substituter.SubstitutionFromHashtable(substVarSpec),
+ Substituter.SubstitutionFromHashtable(substOld),
+ ac) as AssertCmd);
+
+ var substVarProcToImpl = new Dictionary<Variable, Expr>();
+ for (int i = 0; i < impl.InParams.Count; i++)
+ substVarProcToImpl.Add(impl.Proc.InParams[i], Expr.Ident(impl.InParams[i]));
+
+ for (int i = 0; i < impl.OutParams.Count; i++)
+ substVarProcToImpl.Add(impl.Proc.OutParams[i], Expr.Ident(impl.OutParams[i]));
+
+ logicalAsserts = logicalAsserts.ConvertAll(ac =>
+ Substituter.Apply(Substituter.SubstitutionFromHashtable(substVarProcToImpl), ac)
+ as AssertCmd);
+
+ // Paths
+ foreach (var path in GetAllPaths(implDup))
+ {
+ var wp = ComputeWP(implDup, path);
+
+ // replace hidden variables to match those used in the spec
+ wp = Substituter.ApplyReplacingOldExprs(
+ Substituter.SubstitutionFromHashtable(substVarPath),
+ Substituter.SubstitutionFromHashtable(substOld),
+ wp);
+
+ ebSecure.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.Not(wp)));
+ }
+
+ ebSecure.Cmds.AddRange(secureAsserts);
+ ebLogical.Cmds.AddRange(logicalAsserts);
+
+ if (outfile != null)
+ {
+ impl.Proc.Emit(outfile, 0);
+ impl.Emit(outfile, 0);
+ }
+
+ ModelViewInfo mvInfo;
+ ConvertCFG2DAG(impl);
+ var gotoCmdOrigins = PassifyImpl(impl, out mvInfo);
+
+ var gen = prover.VCExprGen;
+ var exprGen = prover.Context.ExprGen;
+ var translator = prover.Context.BoogieExprTranslator;
+
+ var label2absy = new Dictionary<int, Absy>();
+ VCGen.CodeExprConversionClosure cc = new VCGen.CodeExprConversionClosure(label2absy, prover.Context);
+ translator.SetCodeExprConverter(cc.CodeExprToVerificationCondition);
+ var implVc = gen.Not(GenerateVCAux(impl, null, label2absy, prover.Context));
+
+ handler = new VCGen.ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, incarnationOriginMap, collector, mvInfo, prover.Context, program);
+
+ prover.Assert(implVc, true);
+ }
+
+ Expr ComputeWP(Implementation impl, List<Cmd> path)
+ {
+ Expr expr = Expr.True;
+
+ // create constants for out varibles
+ var subst = new Dictionary<Variable, Expr>();
+ foreach (var g in impl.Proc.Modifies)
+ {
+ var c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken,
+ "svc_out_const_" + g.Name, g.Decl.TypedIdent.Type));
+ subst.Add(c, g);
+ expr = Expr.And(expr, Expr.Eq(Expr.Ident(c), g));
+ }
+
+ foreach (var v in impl.OutParams)
+ {
+ var c = new Constant(Token.NoToken, new TypedIdent(Token.NoToken,
+ "svc_out_const_" + v.Name, v.TypedIdent.Type));
+ subst.Add(c, Expr.Ident(v));
+ expr = Expr.And(expr, Expr.Eq(Expr.Ident(c), Expr.Ident(v)));
+ }
+
+ // we need this technicality
+ var subst1 = new Dictionary<Variable, Expr>();
+ foreach (var g in program.GlobalVariables)
+ {
+ subst1.Add(g, new OldExpr(Token.NoToken, Expr.Ident(g)));
+ }
+
+ // Implicitly close with havoc of all the locals and OutParams
+ path.Insert(0, new HavocCmd(Token.NoToken, new List<IdentifierExpr>(
+ impl.LocVars.Select(v => Expr.Ident(v)).Concat(
+ impl.OutParams.Select(v => Expr.Ident(v))))));
+
+ for (int i = path.Count - 1; i >= 0; i--)
+ {
+ var cmd = path[i];
+ if (cmd is AssumeCmd)
+ {
+ expr = Expr.And(expr, (cmd as AssumeCmd).Expr);
+ }
+ else if (cmd is AssignCmd)
+ {
+ var h = new Dictionary<Variable, Expr>();
+ var acmd = cmd as AssignCmd;
+ for (int j = 0; j < acmd.Lhss.Count; j++)
+ {
+ h.Add(acmd.Lhss[j].DeepAssignedVariable, acmd.Rhss[j]);
+ }
+ var s = Substituter.SubstitutionFromHashtable(h);
+ expr = Substituter.Apply(s, expr);
+ }
+ else if (cmd is HavocCmd)
+ {
+ var h = new Dictionary<Variable, Expr>();
+ var formals = new List<Variable>();
+
+ var vc = new VariableCollector();
+ vc.VisitExpr(expr);
+
+ foreach (var ie in (cmd as HavocCmd).Vars)
+ {
+ if (!vc.usedVars.Contains(ie.Decl)) continue;
+ var f = new BoundVariable(Token.NoToken, new TypedIdent(Token.NoToken,
+ ie.Decl.Name + "_formal", ie.Decl.TypedIdent.Type));
+ h.Add(ie.Decl, Expr.Ident(f));
+ formals.Add(f);
+ }
+ if (!formals.Any())
+ continue;
+ var s = Substituter.SubstitutionFromHashtable(h);
+ expr = Substituter.Apply(s, expr);
+ expr = new ExistsExpr(Token.NoToken, formals, expr);
+ }
+ else
+ {
+ throw new InvalidProgramForSecureVc(string.Format("Unhandled cmd: {0}", cmd));
+ }
+ }
+
+ // Implicitly close with havoc of all the locals and OutParams
+
+
+
+ expr = Substituter.Apply(Substituter.SubstitutionFromHashtable(subst1), expr);
+ expr = Substituter.Apply(Substituter.SubstitutionFromHashtable(subst),
+ Substituter.SubstitutionFromHashtable(new Dictionary<Variable,Expr>()), expr);
+ expr.Typecheck(new TypecheckingContext(null));
+ return expr;
+ }
+
+ // Generate all paths in the impl
+ IEnumerable<List<Cmd>> GetAllPaths(Implementation impl)
+ {
+ var stk = new Stack<Tuple<Block, int>>();
+ stk.Push(Tuple.Create(impl.Blocks[0], 0));
+
+ while (stk.Any())
+ {
+ var tup = stk.Peek();
+ if (tup.Item1.TransferCmd is ReturnCmd)
+ {
+ var ret = new List<Cmd>();
+ var ls = stk.ToList();
+ ls.Iter(t => ret.AddRange(t.Item1.Cmds));
+ yield return ret;
+
+ stk.Pop();
+ continue;
+ }
+
+ stk.Pop();
+
+ var gc = tup.Item1.TransferCmd as GotoCmd;
+ if (gc.labelTargets.Count <= tup.Item2)
+ continue;
+
+ stk.Push(Tuple.Create(tup.Item1, tup.Item2 + 1));
+ stk.Push(Tuple.Create(gc.labelTargets[tup.Item2], 0));
+ }
+ yield break;
+ }
+
+ bool isHidden(Variable v)
+ {
+ return QKeyValue.FindBoolAttribute(v.Attributes, "hidden");
+ }
+
+ bool isVisible(Variable v)
+ {
+ return !isHidden(v);
+ }
+
+ public override Outcome VerifyImplementation(Implementation/*!*/ impl, VerifierCallback/*!*/ callback)
+ {
+ Debug.Assert(this.program == program);
+
+ // Record current time
+ var startTime = DateTime.UtcNow;
+
+ CommandLineOptions.Clo.ProverCCLimit = 1;
+ prover = ProverInterface.CreateProver(program, logFilePath, appendLogFile, CommandLineOptions.Clo.ProverKillTime);
+
+ // Flush any axioms that came with the program before we start SI on this implementation
+ prover.AssertAxioms();
+
+ GenVc(impl, callback);
+
+ prover.Check();
+ var outcome = prover.CheckOutcomeCore(handler);
+ //var outcome = ProverInterface.Outcome.Valid;
+
+ prover.Close();
+
+
+
+ //Console.WriteLine("Answer = {0}", outcome);
+
+ return ProverInterfaceOutcomeToConditionGenerationOutcome(outcome);
+ }
+ }
+
+} // namespace VC
diff --git a/Source/VCGeneration/VC.cs b/Source/VCGeneration/VC.cs
index 560f55b4..6e43e917 100644
--- a/Source/VCGeneration/VC.cs
+++ b/Source/VCGeneration/VC.cs
@@ -1,3893 +1,4134 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Threading;
-using System.IO;
-using Microsoft.Boogie;
-using Microsoft.Boogie.GraphUtil;
-using System.Diagnostics.Contracts;
-using Microsoft.Basetypes;
-using Microsoft.Boogie.VCExprAST;
-
-namespace VC {
- using Bpl = Microsoft.Boogie;
- using System.Threading.Tasks;
-
- public class VCGen : ConditionGeneration {
- private const bool _print_time = false;
- /// <summary>
- /// Constructor. Initializes the theorem prover.
- /// </summary>
- [NotDelayed]
- public VCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
- : base(program, checkers)
- {
- Contract.Requires(program != null);
- this.appendLogFile = appendLogFile;
- this.logFilePath = logFilePath;
- }
-
- private static AssumeCmd AssertTurnedIntoAssume(AssertCmd assrt) {
- Contract.Requires(assrt != null);
- Contract.Ensures(Contract.Result<AssumeCmd>() != null);
-
- Expr expr = assrt.Expr;
- Contract.Assert(expr != null);
- switch (Wlp.Subsumption(assrt)) {
- case CommandLineOptions.SubsumptionOption.Never:
- expr = Expr.True;
- break;
- case CommandLineOptions.SubsumptionOption.Always:
- break;
- case CommandLineOptions.SubsumptionOption.NotForQuantifiers:
- if (expr is QuantifierExpr) {
- expr = Expr.True;
- }
- break;
- default:
- Contract.Assert(false);
- throw new cce.UnreachableException(); // unexpected case
- }
-
- return new AssumeCmd(assrt.tok, expr);
- }
-
- #region Soundness smoke tester
- class SmokeTester {
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(parent != null);
- Contract.Invariant(impl != null);
- Contract.Invariant(initial != null);
- Contract.Invariant(cce.NonNullDictionaryAndValues(copies));
- Contract.Invariant(cce.NonNull(visited));
- Contract.Invariant(callback != null);
- }
-
- VCGen parent;
- Implementation impl;
- Block initial;
- int id;
- Dictionary<Block, Block> copies = new Dictionary<Block, Block>();
- HashSet<Block> visited = new HashSet<Block>();
- VerifierCallback callback;
-
- internal SmokeTester(VCGen par, Implementation i, VerifierCallback callback) {
- Contract.Requires(par != null);
- Contract.Requires(i != null);
- Contract.Requires(callback != null);
- parent = par;
- impl = i;
- initial = i.Blocks[0];
- this.callback = callback;
- }
-
- internal void Copy() {
- CloneBlock(impl.Blocks[0]);
- initial = GetCopiedBlocks()[0];
- }
-
- internal void Test() {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- DFS(initial);
- }
-
- void TopologicalSortImpl() {
- Graph<Block> dag = new Graph<Block>();
- dag.AddSource(cce.NonNull(impl.Blocks[0])); // there is always at least one node in the graph
- foreach (Block b in impl.Blocks) {
- GotoCmd gtc = b.TransferCmd as GotoCmd;
- if (gtc != null) {
- Contract.Assume(gtc.labelTargets != null);
- foreach (Block dest in gtc.labelTargets) {
- Contract.Assert(dest != null);
- dag.AddEdge(b, dest);
- }
- }
- }
- impl.Blocks = new List<Block>();
- foreach (Block b in dag.TopologicalSort()) {
- Contract.Assert(b != null);
- impl.Blocks.Add(b);
- }
- }
-
- void Emit() {
- TopologicalSortImpl();
- EmitImpl(impl, false);
- }
-
- // this one copies forward
- Block CloneBlock(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<Block>() != null);
-
- Block fake_res;
- if (copies.TryGetValue(b, out fake_res)) {
- return cce.NonNull(fake_res);
- }
- Block res = new Block(b.tok, b.Label, new List<Cmd>(b.Cmds), null);
- copies[b] = res;
- if (b.TransferCmd is GotoCmd) {
- foreach (Block ch in cce.NonNull((GotoCmd)b.TransferCmd).labelTargets) {
- Contract.Assert(ch != null);
- CloneBlock(ch);
- }
- }
- foreach (Block p in b.Predecessors) {
- Contract.Assert(p != null);
- res.Predecessors.Add(CloneBlock(p));
- }
- return res;
- }
-
- // this one copies backwards
- Block CopyBlock(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<Block>() != null);
-
- Block fake_res;
- if (copies.TryGetValue(b, out fake_res)) {
- // fake_res should be Block! but the compiler fails
- return cce.NonNull(fake_res);
- }
- Block res;
- List<Cmd> seq = new List<Cmd>();
- foreach (Cmd c in b.Cmds) {
- Contract.Assert(c != null);
- AssertCmd turn = c as AssertCmd;
- if (!turnAssertIntoAssumes || turn == null) {
- seq.Add(c);
- } else {
- seq.Add(AssertTurnedIntoAssume(turn));
- }
- }
- res = new Block(b.tok, b.Label, seq, null);
- copies[b] = res;
- foreach (Block p in b.Predecessors) {
- Contract.Assert(p != null);
- res.Predecessors.Add(CopyBlock(p));
- }
- return res;
- }
-
- List<Block> GetCopiedBlocks() {
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
-
- // the order of nodes in res is random (except for the first one, being the entry)
- List<Block> res = new List<Block>();
- res.Add(copies[initial]);
-
- foreach (KeyValuePair<Block, Block> kv in copies) {
- Contract.Assert(kv.Key != null&&kv.Value!=null);
- GotoCmd go = kv.Key.TransferCmd as GotoCmd;
- ReturnCmd ret = kv.Key.TransferCmd as ReturnCmd;
- if (kv.Key != initial) {
- res.Add(kv.Value);
- }
- if (go != null) {
- GotoCmd copy = new GotoCmd(go.tok, new List<String>(), new List<Block>());
- kv.Value.TransferCmd = copy;
- foreach (Block b in cce.NonNull(go.labelTargets)) {
- Contract.Assert(b != null);
- Block c;
- if (copies.TryGetValue(b, out c)) {
- copy.AddTarget(cce.NonNull(c));
- }
- }
- } else if (ret != null) {
- kv.Value.TransferCmd = ret;
- } else {
- Contract.Assume(false);
- throw new cce.UnreachableException();
- }
- }
-
- copies.Clear();
-
- return res;
- }
-
- // check if e is true, false, !true, !false
- // if so return true and the value of the expression in val
- bool BooleanEval(Expr e, ref bool val) {
- Contract.Requires(e != null);
- LiteralExpr lit = e as LiteralExpr;
- NAryExpr call = e as NAryExpr;
-
- if (lit != null && lit.isBool) {
- val = lit.asBool;
- return true;
- } else if (call != null &&
- call.Fun is UnaryOperator &&
- ((UnaryOperator)call.Fun).Op == UnaryOperator.Opcode.Not &&
- BooleanEval(cce.NonNull(call.Args[0]), ref val)) {
- val = !val;
- return true;
- }
- // this is for the 0bv32 != 0bv32 generated by vcc
- else if (call != null &&
- call.Fun is BinaryOperator &&
- ((BinaryOperator)call.Fun).Op == BinaryOperator.Opcode.Neq &&
- call.Args[0] is LiteralExpr &&
- cce.NonNull(call.Args[0]).Equals(call.Args[1])) {
- val = false;
- return true;
- }
-
- return false;
- }
-
- bool IsFalse(Expr e) {
- Contract.Requires(e != null);
- bool val = false;
- return BooleanEval(e, ref val) && !val;
- }
-
- bool CheckUnreachable(Block cur, List<Cmd> seq)
- {
- Contract.Requires(cur != null);
- Contract.Requires(seq != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- foreach (Cmd cmd in seq)
- {
- AssertCmd assrt = cmd as AssertCmd;
- if (assrt != null && QKeyValue.FindBoolAttribute(assrt.Attributes, "PossiblyUnreachable"))
- return false;
- }
-
- DateTime start = DateTime.UtcNow;
- if (CommandLineOptions.Clo.Trace)
- {
- System.Console.Write(" soundness smoke test #{0} ... ", id);
- }
- callback.OnProgress("smoke", id, id, 0.0);
-
- Token tok = new Token();
- tok.val = "soundness smoke test assertion";
- seq.Add(new AssertCmd(tok, Expr.False));
- Block copy = CopyBlock(cur);
- Contract.Assert(copy != null);
- copy.Cmds = seq;
- List<Block> backup = impl.Blocks;
- Contract.Assert(backup != null);
- impl.Blocks = GetCopiedBlocks();
- copy.TransferCmd = new ReturnCmd(Token.NoToken);
- if (CommandLineOptions.Clo.TraceVerify)
- {
- System.Console.WriteLine();
- System.Console.WriteLine(" --- smoke #{0}, before passify", id);
- Emit();
- }
- parent.CurrentLocalVariables = impl.LocVars;
- ModelViewInfo mvInfo;
- parent.PassifyImpl(impl, out mvInfo);
- Dictionary<int, Absy> label2Absy;
- Checker ch = parent.FindCheckerFor(CommandLineOptions.Clo.SmokeTimeout);
- Contract.Assert(ch != null);
-
- ProverInterface.Outcome outcome = ProverInterface.Outcome.Undetermined;
- try
- {
- lock (ch)
- {
- var exprGen = ch.TheoremProver.Context.ExprGen;
- VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : exprGen.Integer(BigNum.ZERO);
-
- VCExpr vc = parent.GenerateVC(impl, controlFlowVariableExpr, out label2Absy, ch.TheoremProver.Context);
- Contract.Assert(vc != null);
-
- if (!CommandLineOptions.Clo.UseLabels)
- {
- VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(exprGen.Integer(BigNum.ZERO), exprGen.Integer(BigNum.ZERO));
- VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
- vc = exprGen.Implies(eqExpr, vc);
- }
-
- impl.Blocks = backup;
-
- if (CommandLineOptions.Clo.TraceVerify)
- {
- System.Console.WriteLine(" --- smoke #{0}, after passify", id);
- Emit();
- }
-
- ch.BeginCheck(cce.NonNull(impl.Name + "_smoke" + id++), vc, new ErrorHandler(label2Absy, this.callback));
- }
-
- ch.ProverTask.Wait();
-
- lock (ch)
- {
- outcome = ch.ReadOutcome();
- }
- }
- finally
- {
- ch.GoBackToIdle();
- }
-
- parent.CurrentLocalVariables = null;
-
- DateTime end = DateTime.UtcNow;
- TimeSpan elapsed = end - start;
- if (CommandLineOptions.Clo.Trace)
- {
- System.Console.WriteLine(" [{0} s] {1}", elapsed.TotalSeconds,
- outcome == ProverInterface.Outcome.Valid ? "OOPS" :
- "OK" + (outcome == ProverInterface.Outcome.Invalid ? "" : " (" + outcome + ")"));
- }
-
- if (outcome == ProverInterface.Outcome.Valid)
- {
- // copy it again, so we get the version with calls, assignments and such
- copy = CopyBlock(cur);
- copy.Cmds = seq;
- impl.Blocks = GetCopiedBlocks();
- TopologicalSortImpl();
- callback.OnUnreachableCode(impl);
- impl.Blocks = backup;
- return true;
- }
- return false;
- }
-
- const bool turnAssertIntoAssumes = false;
-
- void DFS(Block cur) {
- Contract.Requires(cur != null);
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- if (visited.Contains(cur))
- return;
- visited.Add(cur);
-
- List<Cmd> seq = new List<Cmd>();
- foreach (Cmd cmd_ in cur.Cmds) {
- Cmd cmd = cmd_;
- Contract.Assert(cmd != null);
- AssertCmd assrt = cmd as AssertCmd;
- AssumeCmd assm = cmd as AssumeCmd;
- CallCmd call = cmd as CallCmd;
-
- bool assumeFalse = false;
-
- if (assrt != null) {
- // we're not going any further
- // it's clear the user expected unreachable code here
- // it's not clear where did he expect it, maybe it would be right to insert
- // a check just one command before
- if (IsFalse(assrt.Expr))
- return;
-
-#if TURN_ASSERT_INFO_ASSUMES
- if (turnAssertIntoAssumes) {
- cmd = AssertTurnedIntoAssume(assrt);
- }
-#endif
- } else if (assm != null) {
- if (IsFalse(assm.Expr))
- assumeFalse = true;
- } else if (call != null) {
- foreach (Ensures e in (cce.NonNull(call.Proc)).Ensures) {
- Contract.Assert(e != null);
- if (IsFalse(e.Condition))
- assumeFalse = true;
- }
- }
-
- if (assumeFalse) {
- CheckUnreachable(cur, seq);
- return;
- }
-
- seq.Add(cmd);
- }
-
-
- GotoCmd go = cur.TransferCmd as GotoCmd;
- ReturnCmd ret = cur.TransferCmd as ReturnCmd;
-
- Contract.Assume(!(go != null && go.labelTargets == null && go.labelNames != null && go.labelNames.Count > 0));
-
- if (ret != null || (go != null && cce.NonNull(go.labelTargets).Count == 0)) {
- // we end in return, so there will be no more places to check
- CheckUnreachable(cur, seq);
- } else if (go != null) {
- bool needToCheck = true;
- // if all of our children have more than one parent, then
- // we're in the right place to check
- foreach (Block target in cce.NonNull(go.labelTargets)) {
- Contract.Assert(target != null);
- if (target.Predecessors.Count == 1) {
- needToCheck = false;
- }
- }
- if (needToCheck) {
- CheckUnreachable(cur, seq);
- }
- foreach (Block target in go.labelTargets) {
- Contract.Assert(target != null);
- DFS(target);
- }
- }
- }
-
- class ErrorHandler : ProverInterface.ErrorHandler {
- Dictionary<int, Absy> label2Absy;
- VerifierCallback callback;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(label2Absy != null);
- Contract.Invariant(callback != null);
- }
-
-
- public ErrorHandler(Dictionary<int, Absy> label2Absy, VerifierCallback callback) {
- Contract.Requires(label2Absy != null);
- Contract.Requires(callback != null);
- this.label2Absy = label2Absy;
- this.callback = callback;
- }
-
- public override Absy Label2Absy(string label) {
- //Contract.Requires(label != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
-
- int id = int.Parse(label);
- return cce.NonNull((Absy)label2Absy[id]);
- }
-
- public override void OnProverWarning(string msg) {
- //Contract.Requires(msg != null);
- this.callback.OnWarning(msg);
- }
- }
- }
-
-
- #endregion
-
- #region Splitter
- class Split {
- class BlockStats {
- public bool big_block;
- public int id;
- public double assertion_cost;
- public double assumption_cost; // before multiplier
- public double incomming_paths;
- public List<Block>/*!>!*/ virtual_successors = new List<Block>();
- public List<Block>/*!>!*/ virtual_predecesors = new List<Block>();
- public HashSet<Block> reachable_blocks;
- public readonly Block block;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(virtual_successors));
- Contract.Invariant(cce.NonNullElements(virtual_predecesors));
- Contract.Invariant(block != null);
- }
-
-
- public BlockStats(Block b, int i) {
- Contract.Requires(b != null);
- block = b;
- assertion_cost = -1;
- id = i;
- }
- }
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(cce.NonNullElements(blocks));
- Contract.Invariant(cce.NonNullElements(big_blocks));
- Contract.Invariant(cce.NonNullDictionaryAndValues(stats));
- Contract.Invariant(cce.NonNullElements(assumized_branches));
- Contract.Invariant(gotoCmdOrigins != null);
- Contract.Invariant(parent != null);
- Contract.Invariant(impl != null);
- Contract.Invariant(copies != null);
- Contract.Invariant(cce.NonNull(protected_from_assert_to_assume));
- Contract.Invariant(cce.NonNull(keep_at_all));
- }
-
-
- readonly List<Block> blocks;
- readonly List<Block> big_blocks = new List<Block>();
- readonly Dictionary<Block/*!*/, BlockStats/*!*/>/*!*/ stats = new Dictionary<Block/*!*/, BlockStats/*!*/>();
- readonly int id;
- static int current_id = -1;
- Block split_block;
- bool assert_to_assume;
- List<Block/*!*/>/*!*/ assumized_branches = new List<Block/*!*/>();
-
- double score;
- bool score_computed;
- double total_cost;
- int assertion_count;
- double assertion_cost; // without multiplication by paths
- Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins;
- readonly public VCGen/*!*/ parent;
- Implementation/*!*/ impl;
-
- Dictionary<Block/*!*/, Block/*!*/>/*!*/ copies = new Dictionary<Block/*!*/, Block/*!*/>();
- bool doing_slice;
- double slice_initial_limit;
- double slice_limit;
- bool slice_pos;
- HashSet<Block/*!*/>/*!*/ protected_from_assert_to_assume = new HashSet<Block/*!*/>();
- HashSet<Block/*!*/>/*!*/ keep_at_all = new HashSet<Block/*!*/>();
-
- // async interface
- private Checker checker;
- private int splitNo;
- internal ErrorReporter reporter;
-
- public Split(List<Block/*!*/>/*!*/ blocks, Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins, VCGen/*!*/ par, Implementation/*!*/ impl) {
- Contract.Requires(cce.NonNullElements(blocks));
- Contract.Requires(gotoCmdOrigins != null);
- Contract.Requires(par != null);
- Contract.Requires(impl != null);
- this.blocks = blocks;
- this.gotoCmdOrigins = gotoCmdOrigins;
- this.parent = par;
- this.impl = impl;
- this.id = Interlocked.Increment(ref current_id);
- }
-
- public double Cost {
- get {
- ComputeBestSplit();
- return total_cost;
- }
- }
-
- public bool LastChance {
- get {
- ComputeBestSplit();
- return assertion_count == 1 && score < 0;
- }
- }
-
- public string Stats {
- get {
- ComputeBestSplit();
- return string.Format("(cost:{0:0}/{1:0}{2})", total_cost, assertion_cost, LastChance ? " last" : "");
- }
- }
-
- public void DumpDot(int no) {
- using (System.IO.StreamWriter sw = System.IO.File.CreateText(string.Format("split.{0}.dot", no))) {
- sw.WriteLine("digraph G {");
-
- ComputeBestSplit();
- List<Block> saved = assumized_branches;
- Contract.Assert(saved != null);
- assumized_branches = new List<Block>();
- DoComputeScore(false);
- assumized_branches = saved;
-
- foreach (Block b in big_blocks) {
- Contract.Assert(b != null);
- BlockStats s = GetBlockStats(b);
- foreach (Block t in s.virtual_successors) {
- Contract.Assert(t != null);
- sw.WriteLine("n{0} -> n{1};", s.id, GetBlockStats(t).id);
- }
- sw.WriteLine("n{0} [label=\"{1}:\\n({2:0.0}+{3:0.0})*{4:0.0}\"{5}];",
- s.id, b.Label,
- s.assertion_cost, s.assumption_cost, s.incomming_paths,
- s.assertion_cost > 0 ? ",shape=box" : "");
-
- }
- sw.WriteLine("}");
- sw.Close();
- }
-
- string filename = string.Format("split.{0}.bpl", no);
- using (System.IO.StreamWriter sw = System.IO.File.CreateText(filename)) {
- int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
- CommandLineOptions.Clo.PrintUnstructured = 2; // print only the unstructured program
- bool oldPrintDesugaringSetting = CommandLineOptions.Clo.PrintDesugarings;
- CommandLineOptions.Clo.PrintDesugarings = false;
- List<Block> backup = impl.Blocks;
- Contract.Assert(backup != null);
- impl.Blocks = blocks;
- impl.Emit(new TokenTextWriter(filename, sw, /*setTokens=*/ false, /*pretty=*/ false), 0);
- impl.Blocks = backup;
- CommandLineOptions.Clo.PrintDesugarings = oldPrintDesugaringSetting;
- CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
- }
- }
-
- int bsid;
- BlockStats GetBlockStats(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<BlockStats>() != null);
-
- BlockStats s;
- if (!stats.TryGetValue(b, out s)) {
- s = new BlockStats(b, bsid++);
- stats[b] = s;
- }
- return cce.NonNull(s);
- }
-
- double AssertionCost(PredicateCmd c) {
- return 1.0;
- }
-
- void CountAssertions(Block b) {
- Contract.Requires(b != null);
- BlockStats s = GetBlockStats(b);
- if (s.assertion_cost >= 0)
- return; // already done
- s.big_block = true;
- s.assertion_cost = 0;
- s.assumption_cost = 0;
- foreach (Cmd c in b.Cmds) {
- if (c is AssertCmd) {
- double cost = AssertionCost((AssertCmd)c);
- s.assertion_cost += cost;
- assertion_count++;
- assertion_cost += cost;
- } else if (c is AssumeCmd) {
- s.assumption_cost += AssertionCost((AssumeCmd)c);
- }
- }
- foreach (Block c in Exits(b)) {
- Contract.Assert(c != null);
- s.virtual_successors.Add(c);
- }
- if (s.virtual_successors.Count == 1) {
- Block next = s.virtual_successors[0];
- BlockStats se = GetBlockStats(next);
- CountAssertions(next);
- if (next.Predecessors.Count > 1 || se.virtual_successors.Count != 1)
- return;
- s.virtual_successors[0] = se.virtual_successors[0];
- s.assertion_cost += se.assertion_cost;
- s.assumption_cost += se.assumption_cost;
- se.big_block = false;
- }
- }
-
- HashSet<Block/*!*/>/*!*/ ComputeReachableNodes(Block/*!*/ b) {
- Contract.Requires(b != null);
- Contract.Ensures(cce.NonNull(Contract.Result<HashSet<Block/*!*/>>()));
- BlockStats s = GetBlockStats(b);
- if (s.reachable_blocks != null) {
- return s.reachable_blocks;
- }
- HashSet<Block/*!*/> blocks = new HashSet<Block/*!*/>();
- s.reachable_blocks = blocks;
- blocks.Add(b);
- foreach (Block/*!*/ succ in Exits(b)) {
- Contract.Assert(succ != null);
- foreach (Block r in ComputeReachableNodes(succ)) {
- Contract.Assert(r != null);
- blocks.Add(r);
- }
- }
- return blocks;
- }
-
- double ProverCost(double vc_cost) {
- return vc_cost * vc_cost;
- }
-
- void ComputeBestSplit() {
- if (score_computed)
- return;
- score_computed = true;
-
- assertion_count = 0;
-
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- CountAssertions(b);
- }
-
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- BlockStats bs = GetBlockStats(b);
- if (bs.big_block) {
- big_blocks.Add(b);
- foreach (Block ch in bs.virtual_successors) {
- Contract.Assert(ch != null);
- BlockStats chs = GetBlockStats(ch);
- if (!chs.big_block) {
- Console.WriteLine("non-big {0} accessed from {1}", ch, b);
- DumpDot(-1);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- chs.virtual_predecesors.Add(b);
- }
- }
- }
-
- assumized_branches.Clear();
- total_cost = ProverCost(DoComputeScore(false));
-
- score = double.PositiveInfinity;
- Block best_split = null;
- List<Block> saved_branches = new List<Block>();
-
- foreach (Block b in big_blocks) {
- Contract.Assert(b != null);
- GotoCmd gt = b.TransferCmd as GotoCmd;
- if (gt == null)
- continue;
- List<Block> targ = cce.NonNull(gt.labelTargets);
- if (targ.Count < 2)
- continue;
- // caution, we only consider two first exits
-
- double left0, right0, left1, right1;
- split_block = b;
-
- assumized_branches.Clear();
- assumized_branches.Add(cce.NonNull(targ[0]));
- left0 = DoComputeScore(true);
- right0 = DoComputeScore(false);
-
- assumized_branches.Clear();
- for (int idx = 1; idx < targ.Count; idx++) {
- assumized_branches.Add(cce.NonNull(targ[idx]));
- }
- left1 = DoComputeScore(true);
- right1 = DoComputeScore(false);
-
- double current_score = ProverCost(left1) + ProverCost(right1);
- double other_score = ProverCost(left0) + ProverCost(right0);
-
- if (other_score < current_score) {
- current_score = other_score;
- assumized_branches.Clear();
- assumized_branches.Add(cce.NonNull(targ[0]));
- }
-
- if (current_score < score) {
- score = current_score;
- best_split = split_block;
- saved_branches.Clear();
- saved_branches.AddRange(assumized_branches);
- }
- }
-
- if (CommandLineOptions.Clo.VcsPathSplitMult * score > total_cost) {
- split_block = null;
- score = -1;
- } else {
- assumized_branches = saved_branches;
- split_block = best_split;
- }
- }
-
- void UpdateIncommingPaths(BlockStats s) {
- Contract.Requires(s != null);
- if (s.incomming_paths < 0.0) {
- int count = 0;
- s.incomming_paths = 0.0;
- if (!keep_at_all.Contains(s.block))
- return;
- foreach (Block b in s.virtual_predecesors) {
- Contract.Assert(b != null);
- BlockStats ch = GetBlockStats(b);
- Contract.Assert(ch != null);
- UpdateIncommingPaths(ch);
- if (ch.incomming_paths > 0.0) {
- s.incomming_paths += ch.incomming_paths;
- count++;
- }
- }
- if (count > 1) {
- s.incomming_paths *= CommandLineOptions.Clo.VcsPathJoinMult;
- }
- }
- }
-
- void ComputeBlockSetsHelper(Block b, bool allow_small) {
- Contract.Requires(b != null);
- if (keep_at_all.Contains(b))
- return;
- keep_at_all.Add(b);
-
- if (allow_small) {
- foreach (Block ch in Exits(b)) {
- Contract.Assert(ch != null);
- if (b == split_block && assumized_branches.Contains(ch))
- continue;
- ComputeBlockSetsHelper(ch, allow_small);
- }
- } else {
- foreach (Block ch in GetBlockStats(b).virtual_successors) {
- Contract.Assert(ch != null);
- if (b == split_block && assumized_branches.Contains(ch))
- continue;
- ComputeBlockSetsHelper(ch, allow_small);
- }
- }
- }
-
- void ComputeBlockSets(bool allow_small) {
- protected_from_assert_to_assume.Clear();
- keep_at_all.Clear();
-
- Debug.Assert(split_block == null || GetBlockStats(split_block).big_block);
- Debug.Assert(GetBlockStats(blocks[0]).big_block);
-
- if (assert_to_assume) {
- foreach (Block b in allow_small ? blocks : big_blocks) {
- Contract.Assert(b != null);
- if (ComputeReachableNodes(b).Contains(cce.NonNull(split_block))) {
- keep_at_all.Add(b);
- }
- }
-
- foreach (Block b in assumized_branches) {
- Contract.Assert(b != null);
- foreach (Block r in ComputeReachableNodes(b)) {
- Contract.Assert(r != null);
- if (allow_small || GetBlockStats(r).big_block) {
- keep_at_all.Add(r);
- protected_from_assert_to_assume.Add(r);
- }
- }
- }
- } else {
- ComputeBlockSetsHelper(blocks[0], allow_small);
- }
- }
-
- bool ShouldAssumize(Block b) {
- Contract.Requires(b != null);
- return assert_to_assume && !protected_from_assert_to_assume.Contains(b);
- }
-
- double DoComputeScore(bool aa) {
- assert_to_assume = aa;
- ComputeBlockSets(false);
-
- foreach (Block b in big_blocks) {
- Contract.Assert(b != null);
- GetBlockStats(b).incomming_paths = -1.0;
- }
-
- GetBlockStats(blocks[0]).incomming_paths = 1.0;
-
- double cost = 0.0;
- foreach (Block b in big_blocks) {
- Contract.Assert(b != null);
- if (keep_at_all.Contains(b)) {
- BlockStats s = GetBlockStats(b);
- UpdateIncommingPaths(s);
- double local = s.assertion_cost;
- if (ShouldAssumize(b)) {
- local = (s.assertion_cost + s.assumption_cost) * CommandLineOptions.Clo.VcsAssumeMult;
- } else {
- local = s.assumption_cost * CommandLineOptions.Clo.VcsAssumeMult + s.assertion_cost;
- }
- local = local + local * s.incomming_paths * CommandLineOptions.Clo.VcsPathCostMult;
- cost += local;
- }
- }
-
- return cost;
- }
-
- List<Cmd> SliceCmds(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<List<Cmd>>() != null);
-
- List<Cmd> seq = b.Cmds;
- Contract.Assert(seq != null);
- if (!doing_slice && !ShouldAssumize(b))
- return seq;
- List<Cmd> res = new List<Cmd>();
- foreach (Cmd c in seq) {
- Contract.Assert(c != null);
- AssertCmd a = c as AssertCmd;
- Cmd the_new = c;
- bool swap = false;
- if (a != null) {
- if (doing_slice) {
- double cost = AssertionCost(a);
- bool first = (slice_limit - cost) >= 0 || slice_initial_limit == slice_limit;
- slice_limit -= cost;
- swap = slice_pos == first;
- } else if (assert_to_assume) {
- swap = true;
- } else {
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
-
- if (swap) {
- the_new = AssertTurnedIntoAssume(a);
- }
- }
- res.Add(the_new);
- }
- return res;
- }
-
- Block CloneBlock(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<Block>() != null);
-
- Block res;
- if (copies.TryGetValue(b, out res)) {
- return cce.NonNull(res);
- }
- res = new Block(b.tok, b.Label, SliceCmds(b), b.TransferCmd);
- GotoCmd gt = b.TransferCmd as GotoCmd;
- copies[b] = res;
- if (gt != null) {
- GotoCmd newGoto = new GotoCmd(gt.tok, new List<String>(), new List<Block>());
- res.TransferCmd = newGoto;
- int pos = 0;
- foreach (Block ch in cce.NonNull(gt.labelTargets)) {
- Contract.Assert(ch != null);
- Contract.Assert(doing_slice ||
- (assert_to_assume || (keep_at_all.Contains(ch) || assumized_branches.Contains(ch))));
- if (doing_slice ||
- ((b != split_block || assumized_branches.Contains(ch) == assert_to_assume) &&
- keep_at_all.Contains(ch))) {
- newGoto.AddTarget(CloneBlock(ch));
- }
- pos++;
- }
- }
- return res;
- }
-
- Split DoSplit() {
- Contract.Ensures(Contract.Result<Split>() != null);
-
- copies.Clear();
- CloneBlock(blocks[0]);
- List<Block> newBlocks = new List<Block>();
- Dictionary<TransferCmd, ReturnCmd> newGotoCmdOrigins = new Dictionary<TransferCmd, ReturnCmd>();
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- Block tmp;
- if (copies.TryGetValue(b, out tmp)) {
- newBlocks.Add(cce.NonNull(tmp));
- if (gotoCmdOrigins.ContainsKey(b.TransferCmd)) {
- newGotoCmdOrigins[tmp.TransferCmd] = gotoCmdOrigins[b.TransferCmd];
- }
-
- foreach (Block p in b.Predecessors) {
- Contract.Assert(p != null);
- Block tmp2;
- if (copies.TryGetValue(p, out tmp2)) {
- tmp.Predecessors.Add(tmp2);
- }
- }
- }
- }
-
- return new Split(newBlocks, newGotoCmdOrigins, parent, impl);
- }
-
- Split SplitAt(int idx) {
- Contract.Ensures(Contract.Result<Split>() != null);
-
- assert_to_assume = idx == 0;
- doing_slice = false;
- ComputeBlockSets(true);
-
- return DoSplit();
- }
-
- Split SliceAsserts(double limit, bool pos) {
- Contract.Ensures(Contract.Result<Split>() != null);
-
- slice_pos = pos;
- slice_limit = limit;
- slice_initial_limit = limit;
- doing_slice = true;
- Split r = DoSplit();
- /*
- Console.WriteLine("split {0} / {1} -->", limit, pos);
- List<Block!> tmp = impl.Blocks;
- impl.Blocks = r.blocks;
- EmitImpl(impl, false);
- impl.Blocks = tmp;
- */
-
- return r;
- }
-
- void Print() {
- List<Block> tmp = impl.Blocks;
- Contract.Assert(tmp != null);
- impl.Blocks = blocks;
- EmitImpl(impl, false);
- impl.Blocks = tmp;
- }
-
- public Counterexample ToCounterexample(ProverContext context) {
- Contract.Requires(context != null);
- Contract.Ensures(Contract.Result<Counterexample>() != null);
-
- List<Block> trace = new List<Block>();
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- trace.Add(b);
- }
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- foreach (Cmd c in b.Cmds) {
- Contract.Assert(c != null);
- if (c is AssertCmd) {
- return AssertCmdToCounterexample((AssertCmd)c, cce.NonNull(b.TransferCmd), trace, null, null, context);
- }
- }
- }
- Contract.Assume(false);
- throw new cce.UnreachableException();
- }
-
- /// <summary>
- /// Starting from the 0-index "split_here" annotation in begin, verifies until it reaches a subsequent "split_here" annotation
- /// Returns a list of blocks where all code not verified has asserts converted into assumes
- /// </summary>
- /// <param name="blocks">Implementation's collection of blocks</param>
- /// <param name="begin">Block containing the first split_here from which to start verifying</param>
- /// <param name="begin_split_id">0-based ID of the "split_here" annotation within begin at which to start verifying</param>
- /// <param name="blockInternalSplit">True if the entire split is contained within block begin</param>
- /// <param name="endPoints">Set of all blocks containing a "split_here" annotation</param>
- /// <returns></returns>
- // Note: Current implementation may over report errors.
- // For example, if the control flow graph is a diamond (e.g., A -> B, C, B->D, C->D),
- // and there is a split in B and an error in D, then D will be verified twice and hence report the error twice.
- // Best solution may be to memoize blocks that have been fully verified and be sure not to verify them again
- private static List<Block> DoManualSplit(List<Block> blocks, Block begin, int begin_split_id, bool blockInternalSplit, IEnumerable<Block> endPoints) {
- // Compute the set of blocks reachable from begin but not included in endPoints. These will be verified in their entirety.
- var blocksToVerifyEntirely = new HashSet<Block>();
- var reachableEndPoints = new HashSet<Block>(); // Reachable end points will be verified up to their first split point
- var todo = new Stack<Block>();
- todo.Push(begin);
- while (todo.Count > 0) {
- var currentBlock = todo.Pop();
- if (blocksToVerifyEntirely.Contains(currentBlock)) continue;
- blocksToVerifyEntirely.Add(currentBlock);
- var exit = currentBlock.TransferCmd as GotoCmd;
- if (exit != null)
- foreach (Block targetBlock in exit.labelTargets) {
- if (!endPoints.Contains(targetBlock)) {
- todo.Push(targetBlock);
- } else {
- reachableEndPoints.Add(targetBlock);
- }
- }
-
- }
- blocksToVerifyEntirely.Remove(begin);
-
- // Convert assumes to asserts in "unreachable" blocks, including portions of blocks containing "split_here"
- var newBlocks = new List<Block>(blocks.Count()); // Copies of the original blocks
- var duplicator = new Duplicator();
- var oldToNewBlockMap = new Dictionary<Block, Block>(blocks.Count()); // Maps original blocks to their new copies in newBlocks
-
- foreach (var currentBlock in blocks) {
- var newBlock = (Block)duplicator.VisitBlock(currentBlock);
- oldToNewBlockMap[currentBlock] = newBlock;
- newBlocks.Add(newBlock);
-
- if (!blockInternalSplit && blocksToVerifyEntirely.Contains(currentBlock)) continue; // All reachable blocks must be checked in their entirety, so don't change anything
- // Otherwise, we only verify a portion of the current block, so we'll need to look at each of its commands
-
- // !verify -> convert assert to assume
- var verify = (currentBlock == begin && begin_split_id == -1) // -1 tells us to start verifying from the very beginning (i.e., there is no split in the begin block)
- || (reachableEndPoints.Contains(currentBlock) // This endpoint is reachable from begin, so we verify until we hit the first split point
- && !blockInternalSplit); // Don't bother verifying if all of the splitting is within the begin block
- var newCmds = new List<Cmd>();
- var split_here_count = 0;
-
- foreach (Cmd c in currentBlock.Cmds) {
- var p = c as PredicateCmd;
- if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "split_here")) {
- if (currentBlock == begin) { // Verify everything between the begin_split_id we were given and the next split
- if (split_here_count == begin_split_id) {
- verify = true;
- } else if (split_here_count == begin_split_id + 1) {
- verify = false;
- }
- } else { // We're in an endPoint so we stop verifying as soon as we hit a "split_here"
- verify = false;
- }
- split_here_count++;
- }
-
- var asrt = c as AssertCmd;
- if (verify || asrt == null)
- newCmds.Add(c);
- else
- newCmds.Add(AssertTurnedIntoAssume(asrt));
- }
-
- newBlock.Cmds = newCmds;
- }
-
- // Patch the edges between the new blocks
- foreach (var oldBlock in blocks) {
- if (oldBlock.TransferCmd is ReturnCmd) { continue; }
- var gotoCmd = (GotoCmd)oldBlock.TransferCmd;
- var newLabelTargets = new List<Block>(gotoCmd.labelTargets.Count());
- var newLabelNames = new List<string>(gotoCmd.labelTargets.Count());
- foreach (var target in gotoCmd.labelTargets) {
- newLabelTargets.Add(oldToNewBlockMap[target]);
- newLabelNames.Add(oldToNewBlockMap[target].Label);
- }
- oldToNewBlockMap[oldBlock].TransferCmd = new GotoCmd(gotoCmd.tok, newLabelNames, newLabelTargets);
- }
-
- return newBlocks;
- }
-
- public static List<Split/*!*/> FindManualSplits(Implementation/*!*/ impl, Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins, VCGen/*!*/ par) {
- Contract.Requires(impl != null);
- Contract.Ensures(Contract.Result<List<Split>>() == null || cce.NonNullElements(Contract.Result<List<Split>>()));
-
- var splitPoints = new Dictionary<Block,int>();
- foreach (var b in impl.Blocks) {
- foreach (Cmd c in b.Cmds) {
- var p = c as PredicateCmd;
- if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "split_here")) {
- int count;
- splitPoints.TryGetValue(b, out count);
- splitPoints[b] = count + 1;
- }
- }
- }
-
- if (splitPoints.Count() == 0) { // No manual split points here
- return null;
- }
-
- List<Split> splits = new List<Split>();
- Block entryPoint = impl.Blocks[0];
- var newEntryBlocks = DoManualSplit(impl.Blocks, entryPoint, -1, splitPoints.Keys.Contains(entryPoint), splitPoints.Keys);
- splits.Add(new Split(newEntryBlocks, gotoCmdOrigins, par, impl)); // REVIEW: Does gotoCmdOrigins need to be changed at all?
-
- foreach (KeyValuePair<Block,int> pair in splitPoints) {
- for (int i = 0; i < pair.Value; i++) {
- bool blockInternalSplit = i < pair.Value - 1; // There's at least one more split, after this one, in the current block
- var newBlocks = DoManualSplit(impl.Blocks, pair.Key, i, blockInternalSplit, splitPoints.Keys);
- Split s = new Split(newBlocks, gotoCmdOrigins, par, impl); // REVIEW: Does gotoCmdOrigins need to be changed at all?
- splits.Add(s);
- }
- }
-
- return splits;
- }
-
- public static List<Split/*!*/>/*!*/ DoSplit(Split initial, double max_cost, int max) {
- Contract.Requires(initial != null);
- Contract.Ensures(cce.NonNullElements(Contract.Result<List<Split>>()));
-
- List<Split> res = new List<Split>();
- res.Add(initial);
-
- while (res.Count < max) {
- Split best = null;
- int best_idx = 0, pos = 0;
- foreach (Split s in res) {
- Contract.Assert(s != null);
- s.ComputeBestSplit(); // TODO check total_cost first
- if (s.total_cost > max_cost &&
- (best == null || best.total_cost < s.total_cost) &&
- (s.assertion_count > 1 || s.split_block != null)) {
- best = s;
- best_idx = pos;
- }
- pos++;
- }
-
- if (best == null)
- break; // no split found
-
- Split s0, s1;
-
- bool split_stats = CommandLineOptions.Clo.TraceVerify;
-
- if (split_stats) {
- Console.WriteLine("{0} {1} -->", best.split_block == null ? "SLICE" : ("SPLIT@" + best.split_block.Label), best.Stats);
- if (best.split_block != null) {
- GotoCmd g = best.split_block.TransferCmd as GotoCmd;
- if (g != null) {
- Console.Write(" exits: ");
- foreach (Block b in cce.NonNull(g.labelTargets)) {
- Contract.Assert(b != null);
- Console.Write("{0} ", b.Label);
- }
- Console.WriteLine("");
- Console.Write(" assumized: ");
- foreach (Block b in best.assumized_branches) {
- Contract.Assert(b != null);
- Console.Write("{0} ", b.Label);
- }
- Console.WriteLine("");
- }
- }
- }
-
- if (best.split_block != null) {
- s0 = best.SplitAt(0);
- s1 = best.SplitAt(1);
- } else {
- best.split_block = null;
- s0 = best.SliceAsserts(best.assertion_cost / 2, true);
- s1 = best.SliceAsserts(best.assertion_cost / 2, false);
- }
-
- if (true) {
- List<Block> ss = new List<Block>();
- ss.Add(s0.blocks[0]);
- ss.Add(s1.blocks[0]);
- try {
- best.SoundnessCheck(new HashSet<List<Block>>(new BlockListComparer()), best.blocks[0], ss);
- } catch (System.Exception e) {
- Console.WriteLine(e);
- best.DumpDot(-1);
- s0.DumpDot(-2);
- s1.DumpDot(-3);
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- if (split_stats) {
- s0.ComputeBestSplit();
- s1.ComputeBestSplit();
- Console.WriteLine(" --> {0}", s0.Stats);
- Console.WriteLine(" --> {0}", s1.Stats);
- }
-
- if (CommandLineOptions.Clo.TraceVerify) {
- best.Print();
- }
-
- res[best_idx] = s0;
- res.Add(s1);
- }
-
- return res;
- }
-
- class BlockListComparer : IEqualityComparer<List<Block>>
- {
- public bool Equals(List<Block> x, List<Block> y)
- {
- return x == y || x.SequenceEqual(y);
- }
-
- public int GetHashCode(List<Block> obj)
- {
- int h = 0;
- Contract.Assume(obj != null);
- foreach (var b in obj)
- {
- if (b != null)
- {
- h += b.GetHashCode();
- }
- }
- return h;
- }
- }
-
- public Checker Checker {
- get {
- Contract.Ensures(Contract.Result<Checker>() != null);
-
- Contract.Assert(checker != null);
- return checker;
- }
- }
-
- public Task ProverTask {
- get {
- Contract.Assert(checker != null);
- return checker.ProverTask;
- }
- }
-
- public void ReadOutcome(ref Outcome cur_outcome, out bool prover_failed) {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
- ProverInterface.Outcome outcome = cce.NonNull(checker).ReadOutcome();
-
- if (CommandLineOptions.Clo.Trace && splitNo >= 0) {
- System.Console.WriteLine(" --> split #{0} done, [{1} s] {2}", splitNo, checker.ProverRunTime.TotalSeconds, outcome);
- }
-
- if (CommandLineOptions.Clo.VcsDumpSplits) {
- DumpDot(splitNo);
- }
-
- prover_failed = false;
-
- switch (outcome) {
- case ProverInterface.Outcome.Valid:
- return;
- case ProverInterface.Outcome.Invalid:
- cur_outcome = Outcome.Errors;
- return;
- case ProverInterface.Outcome.OutOfMemory:
- prover_failed = true;
- if (cur_outcome != Outcome.Errors && cur_outcome != Outcome.Inconclusive)
- cur_outcome = Outcome.OutOfMemory;
- return;
- case ProverInterface.Outcome.TimeOut:
- prover_failed = true;
- if (cur_outcome != Outcome.Errors && cur_outcome != Outcome.Inconclusive)
- cur_outcome = Outcome.TimedOut;
- return;
- case ProverInterface.Outcome.Undetermined:
- if (cur_outcome != Outcome.Errors)
- cur_outcome = Outcome.Inconclusive;
- return;
- default:
- Contract.Assert(false);
- throw new cce.UnreachableException();
- }
- }
-
- /// <summary>
- /// As a side effect, updates "this.parent.CumulativeAssertionCount".
- /// </summary>
- public void BeginCheck(Checker checker, VerifierCallback callback, ModelViewInfo mvInfo, int no, int timeout)
- {
- Contract.Requires(checker != null);
- Contract.Requires(callback != null);
-
- splitNo = no;
-
- impl.Blocks = blocks;
-
- this.checker = checker;
-
- Dictionary<int, Absy> label2absy = new Dictionary<int, Absy>();
-
- ProverContext ctx = checker.TheoremProver.Context;
- Boogie2VCExprTranslator bet = ctx.BoogieExprTranslator;
- CodeExprConversionClosure cc = new CodeExprConversionClosure(label2absy, ctx);
- bet.SetCodeExprConverter(cc.CodeExprToVerificationCondition);
-
- var exprGen = ctx.ExprGen;
- VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : exprGen.Integer(BigNum.ZERO);
-
- VCExpr vc = parent.GenerateVCAux(impl, controlFlowVariableExpr, label2absy, checker.TheoremProver.Context);
- Contract.Assert(vc != null);
-
- if (!CommandLineOptions.Clo.UseLabels)
- {
- VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(exprGen.Integer(BigNum.ZERO), exprGen.Integer(BigNum.ZERO));
- VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
- vc = exprGen.Implies(eqExpr, vc);
- }
-
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Local)
- {
- reporter = new ErrorReporterLocal(gotoCmdOrigins, label2absy, impl.Blocks, parent.incarnationOriginMap, callback, mvInfo, cce.NonNull(this.Checker.TheoremProver.Context), parent.program);
- }
- else
- {
- reporter = new ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, parent.incarnationOriginMap, callback, mvInfo, this.Checker.TheoremProver.Context, parent.program);
- }
-
- if (CommandLineOptions.Clo.TraceVerify && no >= 0)
- {
- Console.WriteLine("-- after split #{0}", no);
- Print();
- }
-
- string desc = cce.NonNull(impl.Name);
- if (no >= 0)
- desc += "_split" + no;
- checker.BeginCheck(desc, vc, reporter);
- }
-
- private void SoundnessCheck(HashSet<List<Block>/*!*/>/*!*/ cache, Block/*!*/ orig, List<Block/*!*/>/*!*/ copies) {
- Contract.Requires(cce.NonNull(cache));
- Contract.Requires(orig != null);
- Contract.Requires(copies != null);
- {
- var t = new List<Block> { orig };
- foreach (Block b in copies) {
- Contract.Assert(b != null);
- t.Add(b);
- }
- if (cache.Contains(t)) {
- return;
- }
- cache.Add(t);
- }
-
- for (int i = 0; i < orig.Cmds.Count; ++i) {
- Cmd cmd = orig.Cmds[i];
- if (cmd is AssertCmd) {
- int found = 0;
- foreach (Block c in copies) {
- Contract.Assert(c != null);
- if (c.Cmds[i] == cmd) {
- found++;
- }
- }
- if (found == 0) {
- throw new System.Exception(string.Format("missing assertion: {0}({1})", cmd.tok.filename, cmd.tok.line));
- }
- }
- }
-
- foreach (Block exit in Exits(orig)) {
- Contract.Assert(exit != null);
- List<Block> newcopies = new List<Block>();
- foreach (Block c in copies) {
- foreach (Block cexit in Exits(c)) {
- Contract.Assert(cexit != null);
- if (cexit.Label == exit.Label) {
- newcopies.Add(cexit);
- }
- }
- }
- if (newcopies.Count == 0) {
- throw new System.Exception("missing exit " + exit.Label);
- }
- SoundnessCheck(cache, exit, newcopies);
- }
- }
- }
- #endregion
-
-
- public class CodeExprConversionClosure
- {
- Dictionary<int, Absy> label2absy;
- ProverContext ctx;
- public CodeExprConversionClosure(Dictionary<int, Absy> label2absy, ProverContext ctx)
- {
- this.label2absy = label2absy;
- this.ctx = ctx;
- }
-
- public VCExpr CodeExprToVerificationCondition(CodeExpr codeExpr, Hashtable blockVariables, List<VCExprLetBinding> bindings, bool isPositiveContext)
- {
- VCGen vcgen = new VCGen(new Program(), null, false, new List<Checker>());
- vcgen.variable2SequenceNumber = new Dictionary<Variable, int>();
- vcgen.incarnationOriginMap = new Dictionary<Incarnation, Absy>();
- vcgen.CurrentLocalVariables = codeExpr.LocVars;
-
- ResetPredecessors(codeExpr.Blocks);
- vcgen.AddBlocksBetween(codeExpr.Blocks);
- Dictionary<Variable, Expr> gotoCmdOrigins = vcgen.ConvertBlocks2PassiveCmd(codeExpr.Blocks, new List<IdentifierExpr>(), new ModelViewInfo(codeExpr));
- int ac; // computed, but then ignored for this CodeExpr
- VCExpr startCorrect = VCGen.LetVCIterative(codeExpr.Blocks, null, label2absy, ctx, out ac, isPositiveContext);
- VCExpr vce = ctx.ExprGen.Let(bindings, startCorrect);
- if (vcgen.CurrentLocalVariables.Count != 0)
- {
- Boogie2VCExprTranslator translator = ctx.BoogieExprTranslator;
- List<VCExprVar> boundVars = new List<VCExprVar>();
- foreach (Variable v in vcgen.CurrentLocalVariables)
- {
- Contract.Assert(v != null);
- VCExprVar ev = translator.LookupVariable(v);
- Contract.Assert(ev != null);
- boundVars.Add(ev);
- if (v.TypedIdent.Type.Equals(Bpl.Type.Bool))
- {
- // add an antecedent (tickleBool ev) to help the prover find a possible trigger
- vce = ctx.ExprGen.Implies(ctx.ExprGen.Function(VCExpressionGenerator.TickleBoolOp, ev), vce);
- }
- }
- vce = ctx.ExprGen.Forall(boundVars, new List<VCTrigger>(), vce);
- }
- if (isPositiveContext)
- {
- vce = ctx.ExprGen.Not(vce);
- }
- return vce;
- }
- }
-
- public VCExpr GenerateVC(Implementation/*!*/ impl, VCExpr controlFlowVariableExpr, out Dictionary<int, Absy>/*!*/ label2absy, ProverContext proverContext)
- {
- Contract.Requires(impl != null);
- Contract.Requires(proverContext != null);
- Contract.Ensures(Contract.ValueAtReturn(out label2absy) != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- label2absy = new Dictionary<int, Absy>();
- return GenerateVCAux(impl, controlFlowVariableExpr, label2absy, proverContext);
- }
-
- public VCExpr GenerateVCAux(Implementation/*!*/ impl, VCExpr controlFlowVariableExpr, Dictionary<int, Absy>/*!*/ label2absy, ProverContext proverContext) {
- Contract.Requires(impl != null);
- Contract.Requires(proverContext != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- TypecheckingContext tc = new TypecheckingContext(null);
- impl.Typecheck(tc);
-
- VCExpr vc;
- int assertionCount;
- switch (CommandLineOptions.Clo.vcVariety) {
- case CommandLineOptions.VCVariety.Structured:
- vc = VCViaStructuredProgram(impl, label2absy, proverContext, out assertionCount);
- break;
- case CommandLineOptions.VCVariety.Block:
- vc = FlatBlockVC(impl, label2absy, false, false, false, proverContext, out assertionCount);
- break;
- case CommandLineOptions.VCVariety.BlockReach:
- vc = FlatBlockVC(impl, label2absy, false, true, false, proverContext, out assertionCount);
- break;
- case CommandLineOptions.VCVariety.Local:
- vc = FlatBlockVC(impl, label2absy, true, false, false, proverContext, out assertionCount);
- break;
- case CommandLineOptions.VCVariety.BlockNested:
- vc = NestedBlockVC(impl, label2absy, false, proverContext, out assertionCount);
- break;
- case CommandLineOptions.VCVariety.BlockNestedReach:
- vc = NestedBlockVC(impl, label2absy, true, proverContext, out assertionCount);
- break;
- case CommandLineOptions.VCVariety.Dag:
- if (cce.NonNull(CommandLineOptions.Clo.TheProverFactory).SupportsDags || CommandLineOptions.Clo.FixedPointEngine != null) {
- vc = DagVC(cce.NonNull(impl.Blocks[0]), controlFlowVariableExpr, label2absy, new Hashtable/*<Block, VCExpr!>*/(), proverContext, out assertionCount);
- } else {
- vc = LetVC(cce.NonNull(impl.Blocks[0]), controlFlowVariableExpr, label2absy, proverContext, out assertionCount);
- }
- break;
- case CommandLineOptions.VCVariety.DagIterative:
- vc = LetVCIterative(impl.Blocks, controlFlowVariableExpr, label2absy, proverContext, out assertionCount);
- break;
- case CommandLineOptions.VCVariety.Doomed:
- vc = FlatBlockVC(impl, label2absy, false, false, true, proverContext, out assertionCount);
- break;
- default:
- Contract.Assert(false);
- throw new cce.UnreachableException(); // unexpected enumeration value
- }
- CumulativeAssertionCount += assertionCount;
- return vc;
- }
-
- void CheckIntAttributeOnImpl(Implementation impl, string name, ref int val) {
- Contract.Requires(impl != null);
- Contract.Requires(name != null);
- if (!(cce.NonNull(impl.Proc).CheckIntAttribute(name, ref val) || !impl.CheckIntAttribute(name, ref val))) {
- Console.WriteLine("ignoring ill-formed {:{0} ...} attribute on {1}, parameter should be an int", name, impl.Name);
- }
- }
-
- public override Outcome VerifyImplementation(Implementation/*!*/ impl, VerifierCallback/*!*/ callback) {
- Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
-
- if (impl.SkipVerification) {
- return Outcome.Inconclusive; // not sure about this one
- }
-
- callback.OnProgress("VCgen", 0, 0, 0.0);
-
- Stopwatch watch = new Stopwatch();
- if (_print_time)
- {
- Console.WriteLine("Checking function {0}", impl.Name);
- watch.Reset();
- watch.Start();
- }
-
- ConvertCFG2DAG(impl);
-
- SmokeTester smoke_tester = null;
- if (CommandLineOptions.Clo.SoundnessSmokeTest) {
- smoke_tester = new SmokeTester(this, impl, callback);
- smoke_tester.Copy();
- }
-
- ModelViewInfo mvInfo;
- var gotoCmdOrigins = PassifyImpl(impl, out mvInfo);
-
- // If "expand" attribute is supplied, expand any assertion of conjunctions into multiple assertions, one per conjunct
- foreach (var b in impl.Blocks)
- {
- List<Cmd> newCmds = new List<Cmd>();
- bool changed = false;
- foreach (var c in b.Cmds)
- {
- var a = c as AssertCmd;
- var ar = c as AssertRequiresCmd;
- var ae = c as AssertEnsuresCmd;
- var ai = c as LoopInitAssertCmd;
- var am = c as LoopInvMaintainedAssertCmd;
- // TODO:
- //use Duplicator and Substituter rather than new
- //nested IToken?
- //document expand attribute (search for {:ignore}, for example)
- //fix up new CallCmd, new Requires, new Ensures in OwickiGries.cs
- Func<Expr,Expr,Expr> withType = (Expr from, Expr to) =>
- {
- NAryExpr nFrom = from as NAryExpr;
- NAryExpr nTo = to as NAryExpr;
- to.Type = from.Type;
- if (nFrom != null && nTo != null) nTo.TypeParameters = nFrom.TypeParameters;
- return to;
- };
-
- Action<int,Expr,Action<Expr>> traverse = null;
- traverse = (depth, e, act) =>
- {
- ForallExpr forall = e as ForallExpr;
- NAryExpr nary = e as NAryExpr;
- if (forall != null)
- {
- traverse(depth, forall.Body, e1 => act(withType(forall,
- new ForallExpr(e1.tok, forall.TypeParameters, forall.Dummies, forall.Attributes, forall.Triggers, e1))));
- return;
- }
- if (nary != null)
- {
- var args = nary.Args;
- IAppliable fun = nary.Fun;
- BinaryOperator bop = fun as BinaryOperator;
- FunctionCall call = fun as FunctionCall;
- if (bop != null)
- {
- switch (bop.Op)
- {
- case BinaryOperator.Opcode.And:
- traverse(depth, args[0], act);
- traverse(depth, args[1], act);
- return;
- case BinaryOperator.Opcode.Imp:
- traverse(depth, args[1], e1 => act(withType(nary,
- new NAryExpr(e1.tok, fun, new List<Expr>() { args[0], e1 }))));
- return;
- }
- }
- if (depth > 0 && call != null && call.Func != null)
- {
- Function cf = call.Func;
- Expr body = cf.Body;
- List<Variable> ins = cf.InParams;
- if (body == null && cf.DefinitionAxiom != null)
- {
- ForallExpr all = cf.DefinitionAxiom.Expr as ForallExpr;
- if (all != null)
- {
- NAryExpr def = all.Body as NAryExpr;
- if (def != null && def.Fun is BinaryOperator && ((BinaryOperator) (def.Fun)).Op == BinaryOperator.Opcode.Iff)
- {
- body = def.Args[1];
- ins = all.Dummies;
- }
- }
- }
- if (body != null)
- {
- Func<Expr,Expr> new_f = e1 =>
- {
- Function f = new Function(cf.tok, "expand<" + cf.Name + ">", cf.TypeParameters, ins, cf.OutParams[0], cf.Comment);
- f.Body = e1;
- Token tok = new Token(e1.tok.line, e1.tok.col);
- tok.filename = e.tok.filename + "(" + e.tok.line + "," + e.tok.col + ") --> " + e1.tok.filename;
- return withType(nary, new NAryExpr(tok, new FunctionCall(f), args));
- };
- traverse(depth - 1, body, e1 => act(new_f(e1)));
- return;
- }
- }
- }
- act(e);
- };
-
- if (a != null)
- {
- var attr = a.Attributes;
- if (ar != null && ar.Requires.Attributes != null) attr = ar.Requires.Attributes;
- if (ar != null && ar.Call.Attributes != null) attr = ar.Call.Attributes;
- if (ae != null && ae.Ensures.Attributes != null) attr = ae.Ensures.Attributes;
- if (QKeyValue.FindExprAttribute(attr, "expand") != null || QKeyValue.FindBoolAttribute(attr, "expand"))
- {
- int depth = QKeyValue.FindIntAttribute(attr, "expand", 100);
- Func<Expr,Expr> fe = e => Expr.Or(a.Expr, e);
- //traverse(depth, a.Expr, e => System.Console.WriteLine(e.GetType() + " :: " + e + " @ " + e.tok.line + ", " + e.tok.col));
- traverse(depth, a.Expr, e =>
- {
- AssertCmd new_c =
- (ar != null) ? new AssertRequiresCmd(ar.Call, new Requires(e.tok, ar.Requires.Free, fe(e), ar.Requires.Comment)) :
- (ae != null) ? new AssertEnsuresCmd(new Ensures(e.tok, ae.Ensures.Free, fe(e), ae.Ensures.Comment)) :
- (ai != null) ? new LoopInitAssertCmd(e.tok, fe(e)) :
- (am != null) ? new LoopInvMaintainedAssertCmd(e.tok, fe(e)) :
- new AssertCmd(e.tok, fe(e));
- new_c.Attributes = new QKeyValue(e.tok, "subsumption", new List<object>() { new LiteralExpr(e.tok, BigNum.FromInt(0)) }, a.Attributes);
- newCmds.Add(new_c);
- });
- }
- newCmds.Add(c);
- changed = true;
- }
- else
- {
- newCmds.Add(c);
- }
- }
- if (changed) b.Cmds = newCmds;
- }
-
- double max_vc_cost = CommandLineOptions.Clo.VcsMaxCost;
- int tmp_max_vc_cost = -1, max_splits = CommandLineOptions.Clo.VcsMaxSplits,
- max_kg_splits = CommandLineOptions.Clo.VcsMaxKeepGoingSplits;
- CheckIntAttributeOnImpl(impl, "vcs_max_cost", ref tmp_max_vc_cost);
- CheckIntAttributeOnImpl(impl, "vcs_max_splits", ref max_splits);
- CheckIntAttributeOnImpl(impl, "vcs_max_keep_going_splits", ref max_kg_splits);
- if (tmp_max_vc_cost >= 0) {
- max_vc_cost = tmp_max_vc_cost;
- }
-
- Outcome outcome = Outcome.Correct;
-
- // Report all recycled failing assertions for this implementation.
- if (impl.RecycledFailingAssertions != null && impl.RecycledFailingAssertions.Any())
- {
- outcome = Outcome.Errors;
- foreach (var a in impl.RecycledFailingAssertions)
- {
- var checksum = a.Checksum;
- var oldCex = impl.ErrorChecksumToCachedError[checksum] as Counterexample;
- if (oldCex != null)
- {
- callback.OnCounterexample(oldCex, null);
- }
- }
- }
-
- Cores = CommandLineOptions.Clo.VcsCores;
- Stack<Split> work = new Stack<Split>();
- List<Split> currently_running = new List<Split>();
- ResetPredecessors(impl.Blocks);
- List<Split> manual_splits = Split.FindManualSplits(impl, gotoCmdOrigins, this);
- if (manual_splits != null) {
- foreach (var split in manual_splits) {
- work.Push(split);
- }
- } else {
- work.Push(new Split(impl.Blocks, gotoCmdOrigins, this, impl));
- }
-
- bool keep_going = max_kg_splits > 1;
- int total = 0;
- int no = max_splits == 1 && !keep_going ? -1 : 0;
- bool first_round = true;
- bool do_splitting = keep_going || max_splits > 1;
- double remaining_cost = 0.0, proven_cost = 0.0;
-
- if (do_splitting) {
- remaining_cost = work.Peek().Cost;
- }
-
- while (work.Any() || currently_running.Any())
- {
- bool prover_failed = false;
- Split s = null;
- var isWaiting = !work.Any();
-
- if (!isWaiting)
- {
- s = work.Peek();
-
- if (first_round && max_splits > 1)
- {
- prover_failed = true;
- remaining_cost -= s.Cost;
- }
- else
- {
- var timeout = (keep_going && s.LastChance) ? CommandLineOptions.Clo.VcsFinalAssertTimeout :
- keep_going ? CommandLineOptions.Clo.VcsKeepGoingTimeout :
- impl.TimeLimit;
-
- var checker = s.parent.FindCheckerFor(timeout, false);
- try
- {
- if (checker == null)
- {
- isWaiting = true;
- goto waiting;
- }
- else
- {
- s = work.Pop();
- }
-
- if (CommandLineOptions.Clo.Trace && no >= 0)
- {
- System.Console.WriteLine(" checking split {1}/{2}, {3:0.00}%, {0} ...",
- s.Stats, no + 1, total, 100 * proven_cost / (proven_cost + remaining_cost));
- }
- callback.OnProgress("VCprove", no < 0 ? 0 : no, total, proven_cost / (remaining_cost + proven_cost));
-
- Contract.Assert(s.parent == this);
- lock (checker)
- {
- s.BeginCheck(checker, callback, mvInfo, no, timeout);
- }
-
- no++;
-
- currently_running.Add(s);
- }
- catch (Exception)
- {
- checker.GoBackToIdle();
- throw;
- }
- }
- }
-
- waiting:
- if (isWaiting)
- {
- // Wait for one split to terminate.
- var tasks = currently_running.Select(splt => splt.ProverTask).ToArray();
-
- if (tasks.Any())
- {
- try
- {
- int index = Task.WaitAny(tasks);
- s = currently_running[index];
- currently_running.RemoveAt(index);
-
- if (do_splitting)
- {
- remaining_cost -= s.Cost;
- }
-
- lock (s.Checker)
- {
- s.ReadOutcome(ref outcome, out prover_failed);
- }
-
- if (do_splitting)
- {
- if (prover_failed)
- {
- // even if the prover fails, we have learned something, i.e., it is
- // annoying to watch Boogie say Timeout, 0.00% a couple of times
- proven_cost += s.Cost / 100;
- }
- else
- {
- proven_cost += s.Cost;
- }
- }
- callback.OnProgress("VCprove", no < 0 ? 0 : no, total, proven_cost / (remaining_cost + proven_cost));
-
- if (prover_failed && !first_round && s.LastChance)
- {
- string msg = "some timeout";
- if (s.reporter != null && s.reporter.resourceExceededMessage != null)
- {
- msg = s.reporter.resourceExceededMessage;
- }
- callback.OnCounterexample(s.ToCounterexample(s.Checker.TheoremProver.Context), msg);
- outcome = Outcome.Errors;
- break;
- }
- }
- finally
- {
- s.Checker.GoBackToIdle();
- }
-
- Contract.Assert(prover_failed || outcome == Outcome.Correct || outcome == Outcome.Errors || outcome == Outcome.Inconclusive);
- }
- }
-
- if (prover_failed)
- {
- int splits = first_round && max_splits > 1 ? max_splits : max_kg_splits;
-
- if (splits > 1)
- {
- List<Split> tmp = Split.DoSplit(s, max_vc_cost, splits);
- Contract.Assert(tmp != null);
- max_vc_cost = 1.0; // for future
- first_round = false;
- //tmp.Sort(new Comparison<Split!>(Split.Compare));
- foreach (Split a in tmp)
- {
- Contract.Assert(a != null);
- work.Push(a);
- total++;
- remaining_cost += a.Cost;
- }
- if (outcome != Outcome.Errors)
- {
- outcome = Outcome.Correct;
- }
- }
- else
- {
- Contract.Assert(outcome != Outcome.Correct);
- if (outcome == Outcome.TimedOut)
- {
- string msg = "some timeout";
- if (s.reporter != null && s.reporter.resourceExceededMessage != null)
- {
- msg = s.reporter.resourceExceededMessage;
- }
- callback.OnTimeout(msg);
- }
- else if (outcome == Outcome.OutOfMemory)
- {
- string msg = "out of memory";
- if (s.reporter != null && s.reporter.resourceExceededMessage != null)
- {
- msg = s.reporter.resourceExceededMessage;
- }
- callback.OnOutOfMemory(msg);
- }
-
- break;
- }
- }
- }
-
- if (outcome == Outcome.Correct && smoke_tester != null) {
- smoke_tester.Test();
- }
-
- callback.OnProgress("done", 0, 0, 1.0);
-
- if (_print_time)
- {
- watch.Stop();
- Console.WriteLine("Total time for this method: {0}", watch.Elapsed.ToString());
- }
-
- return outcome;
- }
-
- public class ErrorReporter : ProverInterface.ErrorHandler {
- Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins;
- Dictionary<int, Absy>/*!*/ label2absy;
- List<Block/*!*/>/*!*/ blocks;
- protected Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap;
- protected VerifierCallback/*!*/ callback;
- protected ModelViewInfo MvInfo;
- internal string resourceExceededMessage;
- static System.IO.TextWriter modelWriter;
- [ContractInvariantMethod]
- void ObjectInvariant() {
- Contract.Invariant(gotoCmdOrigins != null);
- Contract.Invariant(label2absy != null);
- Contract.Invariant(cce.NonNullElements(blocks));
- Contract.Invariant(cce.NonNullDictionaryAndValues(incarnationOriginMap));
- Contract.Invariant(callback != null);
- Contract.Invariant(context != null);
- Contract.Invariant(program != null);
- }
-
-
- public static TextWriter ModelWriter {
- get {
- Contract.Ensures(Contract.Result<TextWriter>() != null);
-
- if (ErrorReporter.modelWriter == null)
- ErrorReporter.modelWriter = CommandLineOptions.Clo.PrintErrorModelFile == null ? Console.Out : new StreamWriter(CommandLineOptions.Clo.PrintErrorModelFile, false);
- return ErrorReporter.modelWriter;
- }
- }
-
- protected ProverContext/*!*/ context;
- Program/*!*/ program;
-
- public ErrorReporter(Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins,
- Dictionary<int, Absy>/*!*/ label2absy,
- List<Block/*!*/>/*!*/ blocks,
- Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap,
- VerifierCallback/*!*/ callback,
- ModelViewInfo mvInfo,
- ProverContext/*!*/ context,
- Program/*!*/ program) {
- Contract.Requires(gotoCmdOrigins != null);
- Contract.Requires(label2absy != null);
- Contract.Requires(cce.NonNullElements(blocks));
- Contract.Requires(cce.NonNullDictionaryAndValues(incarnationOriginMap));
- Contract.Requires(callback != null);
- Contract.Requires(context!=null);
- Contract.Requires(program!=null);
- this.gotoCmdOrigins = gotoCmdOrigins;
- this.label2absy = label2absy;
- this.blocks = blocks;
- this.incarnationOriginMap = incarnationOriginMap;
- this.callback = callback;
- this.MvInfo = mvInfo;
-
- this.context = context;
- this.program = program;
- }
-
- public override void OnModel(IList<string/*!*/>/*!*/ labels, Model model, ProverInterface.Outcome proverOutcome) {
- //Contract.Requires(cce.NonNullElements(labels));
- if (CommandLineOptions.Clo.PrintErrorModel >= 1 && model != null) {
- if (VC.ConditionGeneration.errorModelList != null)
- {
- VC.ConditionGeneration.errorModelList.Add(model);
- }
-
- model.Write(ErrorReporter.ModelWriter);
- ErrorReporter.ModelWriter.Flush();
- }
-
- Hashtable traceNodes = new Hashtable();
- foreach (string s in labels) {
- Contract.Assert(s != null);
- Absy absy = Label2Absy(s);
- Contract.Assert(absy != null);
- if (traceNodes.ContainsKey(absy))
- System.Console.WriteLine("Warning: duplicate label: " + s + " read while tracing nodes");
- else
- traceNodes.Add(absy, null);
- }
-
- List<Block> trace = new List<Block>();
- Block entryBlock = cce.NonNull(this.blocks[0]);
- Contract.Assert(traceNodes.Contains(entryBlock));
- trace.Add(entryBlock);
-
- Counterexample newCounterexample = TraceCounterexample(entryBlock, traceNodes, trace, model, MvInfo, incarnationOriginMap, context, new Dictionary<TraceLocation, CalleeCounterexampleInfo>());
-
- if (newCounterexample == null)
- return;
-
- #region Map passive program errors back to original program errors
- ReturnCounterexample returnExample = newCounterexample as ReturnCounterexample;
- if (returnExample != null) {
- foreach (Block b in returnExample.Trace) {
- Contract.Assert(b != null);
- Contract.Assume(b.TransferCmd != null);
- ReturnCmd cmd = gotoCmdOrigins.ContainsKey(b.TransferCmd) ? gotoCmdOrigins[b.TransferCmd] : null;
- if (cmd != null) {
- returnExample.FailingReturn = cmd;
- break;
- }
- }
- }
- #endregion
- callback.OnCounterexample(newCounterexample, null);
- }
-
- public override Absy Label2Absy(string label) {
- //Contract.Requires(label != null);
- Contract.Ensures(Contract.Result<Absy>() != null);
-
- int id = int.Parse(label);
- return cce.NonNull((Absy)label2absy[id]);
- }
-
- public override void OnResourceExceeded(string msg) {
- //Contract.Requires(msg != null);
- resourceExceededMessage = msg;
- }
-
- public override void OnProverWarning(string msg) {
- //Contract.Requires(msg != null);
- callback.OnWarning(msg);
- }
- }
-
- public class ErrorReporterLocal : ErrorReporter {
- public ErrorReporterLocal(Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins,
- Dictionary<int, Absy>/*!*/ label2absy,
- List<Block/*!*/>/*!*/ blocks,
- Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap,
- VerifierCallback/*!*/ callback,
- ModelViewInfo mvInfo,
- ProverContext/*!*/ context,
- Program/*!*/ program)
- : base(gotoCmdOrigins, label2absy, blocks, incarnationOriginMap, callback, mvInfo, context, program) // here for aesthetic purposes //TODO: Maybe nix?
- {
- Contract.Requires(gotoCmdOrigins != null);
- Contract.Requires(label2absy != null);
- Contract.Requires(cce.NonNullElements(blocks));
- Contract.Requires(cce.NonNullDictionaryAndValues(incarnationOriginMap));
- Contract.Requires(callback != null);
- Contract.Requires(context != null);
- Contract.Requires(program != null);
- }
-
- public override void OnModel(IList<string/*!*/>/*!*/ labels, Model model, ProverInterface.Outcome proverOutcome) {
- //Contract.Requires(cce.NonNullElements(labels));
- // We ignore the error model here for enhanced error message purposes.
- // It is only printed to the command line.
- if (CommandLineOptions.Clo.PrintErrorModel >= 1 && model != null) {
- if (CommandLineOptions.Clo.PrintErrorModelFile != null) {
- model.Write(ErrorReporter.ModelWriter);
- ErrorReporter.ModelWriter.Flush();
- }
- }
- List<Block> traceNodes = new List<Block>();
- List<AssertCmd> assertNodes = new List<AssertCmd>();
- foreach (string s in labels) {
- Contract.Assert(s != null);
- Absy node = Label2Absy(s);
- if (node is Block) {
- Block b = (Block)node;
- traceNodes.Add(b);
- } else {
- AssertCmd a = (AssertCmd)node;
- assertNodes.Add(a);
- }
- }
- Contract.Assert(assertNodes.Count > 0);
- Contract.Assert(traceNodes.Count == assertNodes.Count);
-
- foreach (AssertCmd a in assertNodes) {
- // find the corresponding Block (assertNodes.Count is likely to be 1, or small in any case, so just do a linear search here)
- foreach (Block b in traceNodes) {
- if (b.Cmds.Contains(a)) {
- List<Block> trace = new List<Block>();
- trace.Add(b);
- Counterexample newCounterexample = AssertCmdToCounterexample(a, cce.NonNull(b.TransferCmd), trace, model, MvInfo, context);
- callback.OnCounterexample(newCounterexample, null);
- goto NEXT_ASSERT;
- }
- }
- Contract.Assert(false);
- throw new cce.UnreachableException(); // there was no block that contains the assert
- NEXT_ASSERT: {
- }
- }
- }
- }
-
- private void RecordCutEdge(Dictionary<Block,List<Block>> edgesCut, Block from, Block to){
- if (edgesCut != null)
- {
- if (!edgesCut.ContainsKey(from))
- edgesCut.Add(from, new List<Block>());
- edgesCut[from].Add(to);
- }
- }
-
- public void ConvertCFG2DAG(Implementation impl, Dictionary<Block,List<Block>> edgesCut = null, int taskID = -1)
- {
- Contract.Requires(impl != null);
- impl.PruneUnreachableBlocks(); // This is needed for VCVariety.BlockNested, and is otherwise just an optimization
-
- CurrentLocalVariables = impl.LocVars;
- variable2SequenceNumber = new Dictionary<Variable, int>();
- incarnationOriginMap = new Dictionary<Incarnation, Absy>();
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("original implementation");
- EmitImpl(impl, false);
- }
- #endregion
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("after desugaring sugared commands like procedure calls");
- EmitImpl(impl, true);
- }
- #endregion
-
- // Recompute the predecessors, but first insert a dummy start node that is sure not to be the target of any goto (because the cutting of back edges
- // below assumes that the start node has no predecessor)
- impl.Blocks.Insert(0, new Block(new Token(-17, -4), "0", new List<Cmd>(), new GotoCmd(Token.NoToken, new List<String> { impl.Blocks[0].Label }, new List<Block> { impl.Blocks[0] })));
- ResetPredecessors(impl.Blocks);
-
- if(CommandLineOptions.Clo.KInductionDepth < 0) {
- ConvertCFG2DAGStandard(impl, edgesCut, taskID);
- } else {
- ConvertCFG2DAGKInduction(impl, edgesCut, taskID);
- }
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("after conversion into a DAG");
- EmitImpl(impl, true);
- }
- #endregion
- }
-
- private void ConvertCFG2DAGStandard(Implementation impl, Dictionary<Block, List<Block>> edgesCut, int taskID)
- {
- #region Convert program CFG into a DAG
-
- #region Use the graph library to figure out where the (natural) loops are
-
- #region Create the graph by adding the source node and each edge
- Graph<Block> g = Program.GraphFromImpl(impl);
- #endregion
-
- //Graph<Block> g = program.ProcessLoops(impl);
-
- g.ComputeLoops(); // this is the call that does all of the processing
- if (!g.Reducible)
- {
- throw new VCGenException("Irreducible flow graphs are unsupported.");
- }
-
- #endregion
-
- #region Cut the backedges, push assert/assume statements from loop header into predecessors, change them all into assume statements at top of loop, introduce havoc statements
- foreach (Block header in cce.NonNull(g.Headers))
- {
- Contract.Assert(header != null);
- IDictionary<Block, object> backEdgeNodes = new Dictionary<Block, object>();
- foreach (Block b in cce.NonNull(g.BackEdgeNodes(header)))
- {
- Contract.Assert(b != null);
- backEdgeNodes.Add(b, null);
- }
-
- #region Find the (possibly empty) prefix of assert commands in the header, replace each assert with an assume of the same condition
- List<Cmd> prefixOfPredicateCmdsInit = new List<Cmd>();
- List<Cmd> prefixOfPredicateCmdsMaintained = new List<Cmd>();
- for (int i = 0, n = header.Cmds.Count; i < n; i++)
- {
- PredicateCmd a = header.Cmds[i] as PredicateCmd;
- if (a != null)
- {
- if (a is AssertCmd)
- {
- AssertCmd c = (AssertCmd)a;
- AssertCmd b = null;
-
- if (CommandLineOptions.Clo.ConcurrentHoudini)
- {
- Contract.Assert(taskID >= 0);
- if (CommandLineOptions.Clo.Cho[taskID].DisableLoopInvEntryAssert)
- b = new LoopInitAssertCmd(c.tok, Expr.True);
- else
- b = new LoopInitAssertCmd(c.tok, c.Expr);
- }
- else
- {
- b = new LoopInitAssertCmd(c.tok, c.Expr);
- }
-
- b.Attributes = c.Attributes;
- b.ErrorData = c.ErrorData;
- prefixOfPredicateCmdsInit.Add(b);
-
- if (CommandLineOptions.Clo.ConcurrentHoudini)
- {
- Contract.Assert(taskID >= 0);
- if (CommandLineOptions.Clo.Cho[taskID].DisableLoopInvMaintainedAssert)
- b = new Bpl.LoopInvMaintainedAssertCmd(c.tok, Expr.True);
- else
- b = new Bpl.LoopInvMaintainedAssertCmd(c.tok, c.Expr);
- }
- else
- {
- b = new Bpl.LoopInvMaintainedAssertCmd(c.tok, c.Expr);
- }
-
- b.Attributes = c.Attributes;
- b.ErrorData = c.ErrorData;
- prefixOfPredicateCmdsMaintained.Add(b);
- header.Cmds[i] = new AssumeCmd(c.tok, c.Expr);
- }
- else
- {
- Contract.Assert(a is AssumeCmd);
- if (Bpl.CommandLineOptions.Clo.AlwaysAssumeFreeLoopInvariants)
- {
- // Usually, "free" stuff, like free loop invariants (and the assume statements
- // that stand for such loop invariants) are ignored on the checking side. This
- // command-line option changes that behavior to always assume the conditions.
- prefixOfPredicateCmdsInit.Add(a);
- prefixOfPredicateCmdsMaintained.Add(a);
- }
- }
- }
- else if (header.Cmds[i] is CommentCmd)
- {
- // ignore
- }
- else
- {
- break; // stop when an assignment statement (or any other non-predicate cmd) is encountered
- }
- }
- #endregion
-
- #region Copy the prefix of predicate commands into each predecessor. Do this *before* cutting the backedge!!
- for (int predIndex = 0, n = header.Predecessors.Count; predIndex < n; predIndex++)
- {
- Block pred = cce.NonNull(header.Predecessors[predIndex]);
-
- // Create a block between header and pred for the predicate commands if pred has more than one successor
- GotoCmd gotocmd = cce.NonNull((GotoCmd)pred.TransferCmd);
- Contract.Assert(gotocmd.labelNames != null); // if "pred" is really a predecessor, it may be a GotoCmd with at least one label
- if (gotocmd.labelNames.Count > 1)
- {
- Block newBlock = CreateBlockBetween(predIndex, header);
- impl.Blocks.Add(newBlock);
-
- // if pred is a back edge node, then now newBlock is the back edge node
- if (backEdgeNodes.ContainsKey(pred))
- {
- backEdgeNodes.Remove(pred);
- backEdgeNodes.Add(newBlock, null);
- }
-
- pred = newBlock;
- }
- // Add the predicate commands
- if (backEdgeNodes.ContainsKey(pred))
- {
- pred.Cmds.AddRange(prefixOfPredicateCmdsMaintained);
- }
- else
- {
- pred.Cmds.AddRange(prefixOfPredicateCmdsInit);
- }
- }
- #endregion
-
- #region Cut the back edge
- foreach (Block backEdgeNode in cce.NonNull(backEdgeNodes.Keys))
- {
- Contract.Assert(backEdgeNode != null);
- Debug.Assert(backEdgeNode.TransferCmd is GotoCmd, "An node was identified as the source for a backedge, but it does not have a goto command.");
- GotoCmd gtc = backEdgeNode.TransferCmd as GotoCmd;
- if (gtc != null && gtc.labelTargets != null && gtc.labelTargets.Count > 1)
- {
- // then remove the backedge by removing the target block from the list of gotos
- List<Block> remainingTargets = new List<Block>();
- List<String> remainingLabels = new List<String>();
- Contract.Assume(gtc.labelNames != null);
- for (int i = 0, n = gtc.labelTargets.Count; i < n; i++)
- {
- if (gtc.labelTargets[i] != header)
- {
- remainingTargets.Add(gtc.labelTargets[i]);
- remainingLabels.Add(gtc.labelNames[i]);
- }
- else
- RecordCutEdge(edgesCut, backEdgeNode, header);
- }
- gtc.labelTargets = remainingTargets;
- gtc.labelNames = remainingLabels;
- }
- else
- {
- // This backedge is the only out-going edge from this node.
- // Add an "assume false" statement to the end of the statements
- // inside of the block and change the goto command to a return command.
- AssumeCmd ac = new AssumeCmd(Token.NoToken, Expr.False);
- backEdgeNode.Cmds.Add(ac);
- backEdgeNode.TransferCmd = new ReturnCmd(Token.NoToken);
- if (gtc != null && gtc.labelTargets != null && gtc.labelTargets.Count == 1)
- RecordCutEdge(edgesCut, backEdgeNode, gtc.labelTargets[0]);
- }
- #region Remove the backedge node from the list of predecessor nodes in the header
- List<Block> newPreds = new List<Block>();
- foreach (Block p in header.Predecessors)
- {
- if (p != backEdgeNode)
- newPreds.Add(p);
- }
- header.Predecessors = newPreds;
- #endregion
- }
- #endregion
-
- #region Collect all variables that are assigned to in all of the natural loops for which this is the header
- List<Variable> varsToHavoc = VarsAssignedInLoop(g, header);
- List<IdentifierExpr> havocExprs = new List<IdentifierExpr>();
- foreach (Variable v in varsToHavoc)
- {
- Contract.Assert(v != null);
- IdentifierExpr ie = new IdentifierExpr(Token.NoToken, v);
- if (!havocExprs.Contains(ie))
- havocExprs.Add(ie);
- }
- // pass the token of the enclosing loop header to the HavocCmd so we can reconstruct
- // the source location for this later on
- HavocCmd hc = new HavocCmd(header.tok, havocExprs);
- List<Cmd> newCmds = new List<Cmd>();
- newCmds.Add(hc);
- foreach (Cmd c in header.Cmds)
- {
- newCmds.Add(c);
- }
- header.Cmds = newCmds;
- #endregion
- }
- #endregion
- #endregion Convert program CFG into a DAG
- }
-
- public static List<Variable> VarsAssignedInLoop(Graph<Block> g, Block header)
- {
- List<Variable> varsToHavoc = new List<Variable>();
- foreach (Block backEdgeNode in cce.NonNull(g.BackEdgeNodes(header)))
- {
- Contract.Assert(backEdgeNode != null);
- foreach (Block b in g.NaturalLoops(header, backEdgeNode))
- {
- Contract.Assert(b != null);
- foreach (Cmd c in b.Cmds)
- {
- Contract.Assert(c != null);
- c.AddAssignedVariables(varsToHavoc);
- }
- }
- }
- return varsToHavoc;
- }
-
- public static IEnumerable<Variable> VarsReferencedInLoop(Graph<Block> g, Block header)
- {
- HashSet<Variable> referencedVars = new HashSet<Variable>();
- foreach (Block backEdgeNode in cce.NonNull(g.BackEdgeNodes(header)))
- {
- Contract.Assert(backEdgeNode != null);
- foreach (Block b in g.NaturalLoops(header, backEdgeNode))
- {
- Contract.Assert(b != null);
- foreach (Cmd c in b.Cmds)
- {
- Contract.Assert(c != null);
- var Collector = new VariableCollector();
- Collector.Visit(c);
- foreach(var v in Collector.usedVars) {
- referencedVars.Add(v);
- }
- }
- }
- }
- return referencedVars;
- }
-
- private void ConvertCFG2DAGKInduction(Implementation impl, Dictionary<Block, List<Block>> edgesCut, int taskID) {
-
- // K-induction has not been adapted to be aware of these parameters which standard CFG to DAG transformation uses
- Contract.Requires(edgesCut == null);
- Contract.Requires(taskID == -1);
-
- int inductionK = CommandLineOptions.Clo.KInductionDepth;
- Contract.Assume(inductionK >= 0);
-
- bool contRuleApplication = true;
- while (contRuleApplication) {
- contRuleApplication = false;
-
- #region Use the graph library to figure out where the (natural) loops are
-
- #region Create the graph by adding the source node and each edge
- Graph<Block> g = Program.GraphFromImpl(impl);
- #endregion
-
- g.ComputeLoops(); // this is the call that does all of the processing
- if (!g.Reducible) {
- throw new VCGenException("Irreducible flow graphs are unsupported.");
- }
-
- #endregion
-
- foreach (Block header in cce.NonNull(g.Headers)) {
- Contract.Assert(header != null);
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("Applying k-induction rule with k=" + inductionK);
- }
- #endregion
-
- #region generate the step case
- Block newHeader = DuplicateLoop(impl, g, header, null,
- false, false, "_step_assertion");
- for (int i = 0; i < inductionK; ++i)
- {
- newHeader = DuplicateLoop(impl, g, header, newHeader,
- true, true,
- "_step_" + (inductionK - i));
- }
- #endregion
-
- #region havoc variables that can be assigned in the loop
-
- List<Variable> varsToHavoc = VarsAssignedInLoop(g, header);
- List<IdentifierExpr> havocExprs = new List<IdentifierExpr>();
- foreach (Variable v in varsToHavoc)
- {
- Contract.Assert(v != null);
- IdentifierExpr ie = new IdentifierExpr(Token.NoToken, v);
- if (!havocExprs.Contains(ie))
- havocExprs.Add(ie);
- }
- // pass the token of the enclosing loop header to the HavocCmd so we can reconstruct
- // the source location for this later on
- HavocCmd hc = new HavocCmd(newHeader.tok, havocExprs);
- List<Cmd> havocCmds = new List<Cmd>();
- havocCmds.Add(hc);
-
- Block havocBlock = new Block(newHeader.tok, newHeader.Label + "_havoc", havocCmds,
- new GotoCmd (newHeader.tok, new List<Block> { newHeader }));
-
- impl.Blocks.Add(havocBlock);
- newHeader.Predecessors.Add(havocBlock);
- newHeader = havocBlock;
-
- #endregion
-
- #region generate the base case loop copies
- for (int i = 0; i < inductionK; ++i)
- {
- newHeader = DuplicateLoop(impl, g, header, newHeader,
- false, false,
- "_base_" + (inductionK - i));
- }
- #endregion
-
- #region redirect into the new loop copies and remove the original loop (but don't redirect back-edges)
-
- IDictionary<Block, object> backEdgeNodes = new Dictionary<Block, object>();
- foreach (Block b in cce.NonNull(g.BackEdgeNodes(header))) { Contract.Assert(b != null); backEdgeNodes.Add(b, null); }
-
- for (int predIndex = 0, n = header.Predecessors.Count(); predIndex < n; predIndex++)
- {
- Block pred = cce.NonNull(header.Predecessors[predIndex]);
- if (!backEdgeNodes.ContainsKey(pred))
- {
- GotoCmd gc = pred.TransferCmd as GotoCmd;
- Contract.Assert(gc != null);
- for (int i = 0; i < gc.labelTargets.Count(); ++i)
- {
- if (gc.labelTargets[i] == header)
- {
- gc.labelTargets[i] = newHeader;
- gc.labelNames[i] = newHeader.Label;
- newHeader.Predecessors.Add(pred);
- }
- }
- }
- }
- impl.PruneUnreachableBlocks();
-
- #endregion
-
- contRuleApplication = true;
- break;
- }
-
- }
-
- ResetPredecessors(impl.Blocks);
- impl.FreshenCaptureStates();
-
- }
-
- private Block DuplicateLoop(Implementation impl, Graph<Block> g,
- Block header, Block nextHeader, bool cutExits,
- bool toAssumptions, string suffix)
- {
- IDictionary<Block, Block> ori2CopiedBlocks = new Dictionary<Block, Block>();
- Duplicator duplicator = new Duplicator();
-
- #region create copies of all blocks in the loop
- foreach (Block backEdgeNode in cce.NonNull(g.BackEdgeNodes(header)))
- {
- Contract.Assert(backEdgeNode != null);
- foreach (Block b in g.NaturalLoops(header, backEdgeNode))
- {
- Contract.Assert(b != null);
- if (!ori2CopiedBlocks.ContainsKey(b))
- {
- Block copy = (Block)duplicator.Visit(b);
- copy.Cmds = new List<Cmd>(copy.Cmds); // Philipp Ruemmer commented that this was necessary due to a bug in the Duplicator. That was a long time; worth checking whether this has been fixed
- copy.Predecessors = new List<Block>();
- copy.Label = copy.Label + suffix;
-
- #region turn asserts into assumptions
- if (toAssumptions)
- {
- for (int i = 0; i < copy.Cmds.Count(); ++i)
- {
- AssertCmd ac = copy.Cmds[i] as AssertCmd;
- if (ac != null)
- {
- copy.Cmds[i] = new AssumeCmd(ac.tok, ac.Expr);
- }
- }
- }
- #endregion
-
- impl.Blocks.Add(copy);
- ori2CopiedBlocks.Add(b, copy);
- }
- }
- }
- #endregion
-
- #region adjust the transfer commands of the newly created blocks
- foreach (KeyValuePair<Block, Block> pair in ori2CopiedBlocks)
- {
- Block copy = pair.Value;
- GotoCmd gc = copy.TransferCmd as GotoCmd;
- if (gc != null)
- {
- List<Block> newTargets = new List<Block>();
- List<string> newLabels = new List<string>();
-
- for (int i = 0; i < gc.labelTargets.Count(); ++i)
- {
- Block newTarget;
- if (gc.labelTargets[i] == header)
- {
- if (nextHeader != null)
- {
- newTargets.Add(nextHeader);
- newLabels.Add(nextHeader.Label);
- nextHeader.Predecessors.Add(copy);
- }
- }
- else if (ori2CopiedBlocks.TryGetValue(gc.labelTargets[i], out newTarget))
- {
- newTargets.Add(newTarget);
- newLabels.Add(newTarget.Label);
- newTarget.Predecessors.Add(copy);
- }
- else if (!cutExits)
- {
- newTargets.Add(gc.labelTargets[i]);
- newLabels.Add(gc.labelNames[i]);
- gc.labelTargets[i].Predecessors.Add(copy);
- }
- }
-
- if (newTargets.Count() == 0)
- {
- // if no targets are left, we assume false and return
- copy.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
- copy.TransferCmd = new ReturnCmd(Token.NoToken);
- }
- else
- {
- copy.TransferCmd = new GotoCmd(gc.tok, newLabels, newTargets);
- }
- }
- else if (cutExits && (copy.TransferCmd is ReturnCmd))
- {
- // because return is a kind of exit from the loop, we
- // assume false to cut this path
- copy.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
- }
- }
- #endregion
-
- return ori2CopiedBlocks[header];
- }
-
- public void DesugarCalls(Implementation impl) {
- foreach (Block block in impl.Blocks) {
- List<Cmd> newCmds = new List<Cmd>();
- foreach (Cmd cmd in block.Cmds) {
- SugaredCmd sugaredCmd = cmd as SugaredCmd;
- if (sugaredCmd != null) {
- StateCmd stateCmd = sugaredCmd.Desugaring as StateCmd;
- foreach (Variable v in stateCmd.Locals) {
- impl.LocVars.Add(v);
- }
- newCmds.AddRange(stateCmd.Cmds);
- }
- else {
- newCmds.Add(cmd);
- }
- }
- block.Cmds = newCmds;
- }
- }
-
- public Dictionary<TransferCmd, ReturnCmd> PassifyImpl(Implementation impl, out ModelViewInfo mvInfo)
- {
- Contract.Requires(impl != null);
- Contract.Requires(program != null);
- Contract.Ensures(Contract.Result<Dictionary<TransferCmd, ReturnCmd>>() != null);
-
- Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins = new Dictionary<TransferCmd, ReturnCmd>();
- Block exitBlock = GenerateUnifiedExit(impl, gotoCmdOrigins);
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("after creating a unified exit block");
- EmitImpl(impl, true);
- }
- #endregion
-
- #region Insert pre- and post-conditions and where clauses as assume and assert statements
- {
- List<Cmd> cc = new List<Cmd>();
- // where clauses of global variables
- lock (program.TopLevelDeclarations)
- {
- foreach (var gvar in program.GlobalVariables)
- {
- if (gvar != null && gvar.TypedIdent.WhereExpr != null)
- {
- Cmd c = new AssumeCmd(gvar.tok, gvar.TypedIdent.WhereExpr);
- cc.Add(c);
- }
- }
- }
- // where clauses of in- and out-parameters
- cc.AddRange(GetParamWhereClauses(impl));
- // where clauses of local variables
- foreach (Variable lvar in impl.LocVars) {Contract.Assert(lvar != null);
- if (lvar.TypedIdent.WhereExpr != null) {
- Cmd c = new AssumeCmd(lvar.tok, lvar.TypedIdent.WhereExpr);
- cc.Add(c);
- } else if (QKeyValue.FindBoolAttribute(lvar.Attributes, "assumption")) {
- cc.Add(new AssumeCmd(lvar.tok, new IdentifierExpr(lvar.tok, lvar), new QKeyValue(lvar.tok, "assumption_variable_initialization", new List<object>(), null)));
- }
- }
- // add cc and the preconditions to new blocks preceding impl.Blocks[0]
- InjectPreconditions(impl, cc);
-
- // append postconditions, starting in exitBlock and continuing into other blocks, if needed
- InjectPostConditions(impl, exitBlock, gotoCmdOrigins);
- }
- #endregion
-
- #region Support for stratified inlining
- addExitAssert(impl.Name, exitBlock);
- #endregion
-
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("after inserting pre- and post-conditions");
- EmitImpl(impl, true);
- }
- #endregion
-
- AddBlocksBetween(impl.Blocks);
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("after adding empty blocks as needed to catch join assumptions");
- EmitImpl(impl, true);
- }
- #endregion
-
- if (CommandLineOptions.Clo.LiveVariableAnalysis > 0) {
- Microsoft.Boogie.LiveVariableAnalysis.ComputeLiveVariables(impl);
- }
-
- mvInfo = new ModelViewInfo(program, impl);
- Convert2PassiveCmd(impl, mvInfo);
-
- #region Peep-hole optimizations
- if (CommandLineOptions.Clo.RemoveEmptyBlocks){
- #region Get rid of empty blocks
- {
- RemoveEmptyBlocksIterative(impl.Blocks);
- impl.PruneUnreachableBlocks();
- }
- #endregion Get rid of empty blocks
-
- #region Debug Tracing
- if (CommandLineOptions.Clo.TraceVerify)
- {
- Console.WriteLine("after peep-hole optimizations");
- EmitImpl(impl, true);
- }
- #endregion
- }
- #endregion Peep-hole optimizations
-
- HandleSelectiveChecking(impl);
-
-
-// #region Constant Folding
-// #endregion
-// #region Debug Tracing
-// if (CommandLineOptions.Clo.TraceVerify)
-// {
-// Console.WriteLine("after constant folding");
-// EmitImpl(impl, true);
-// }
-// #endregion
-
- return gotoCmdOrigins;
- }
-
- private static void HandleSelectiveChecking(Implementation impl)
- {
- if (QKeyValue.FindBoolAttribute(impl.Attributes, "selective_checking") ||
- QKeyValue.FindBoolAttribute(impl.Proc.Attributes, "selective_checking")) {
-
- var startPoints = new List<Block>();
- foreach (var b in impl.Blocks) {
- foreach (Cmd c in b.Cmds) {
- var p = c as PredicateCmd;
- if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "start_checking_here")) {
- startPoints.Add(b);
- break;
- }
- }
- }
-
- // Compute the set of blocks reachable from blocks containing "start_checking_here"
- var blocksToCheck = new HashSet<Block>();
- foreach (var b in startPoints) {
- var todo = new Stack<Block>();
- var wasThere = blocksToCheck.Contains(b);
- todo.Push(b);
- while (todo.Count > 0) {
- var x = todo.Pop();
- if (blocksToCheck.Contains(x)) continue;
- blocksToCheck.Add(x);
- var ex = x.TransferCmd as GotoCmd;
- if (ex != null)
- foreach (Block e in ex.labelTargets)
- todo.Push(e);
- }
- if (!wasThere) blocksToCheck.Remove(b);
- }
-
- // Convert asserts to assumes in "unreachable" blocks, as well as in portions of blocks before we reach "start_checking_here"
- foreach (var b in impl.Blocks) {
- if (blocksToCheck.Contains(b)) continue; // All reachable blocks must be checked in their entirety, so don't change anything
- var newCmds = new List<Cmd>();
- var copyMode = false;
- foreach (Cmd c in b.Cmds) {
- var p = c as PredicateCmd;
- if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "start_checking_here"))
- copyMode = true;
- var asrt = c as AssertCmd;
- if (copyMode || asrt == null)
- newCmds.Add(c);
- else
- newCmds.Add(AssertTurnedIntoAssume(asrt));
- }
-
- b.Cmds = newCmds;
- }
- }
- }
-
- // Used by stratified inlining
- protected virtual void addExitAssert(string implName, Block exitBlock)
- {
- }
-
- public virtual Counterexample extractLoopTrace(Counterexample cex, string mainProcName, Program program, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
- {
- // Construct the set of inlined procs in the original program
- var inlinedProcs = new HashSet<string>();
- foreach (var proc in program.Procedures)
- {
- if (!(proc is LoopProcedure))
- {
- inlinedProcs.Add(proc.Name);
- }
- }
-
- return extractLoopTraceRec(
- new CalleeCounterexampleInfo(cex, new List<object>()),
- mainProcName, inlinedProcs, extractLoopMappingInfo).counterexample;
- }
-
- protected CalleeCounterexampleInfo extractLoopTraceRec(
- CalleeCounterexampleInfo cexInfo, string currProc,
- HashSet<string> inlinedProcs,
- Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
- {
- Contract.Requires(currProc != null);
- if (cexInfo.counterexample == null) return cexInfo;
-
- var cex = cexInfo.counterexample;
- // Go through all blocks in the trace, map them back to blocks in the original program (if there is one)
- var ret = cex.Clone();
- ret.Trace = new List<Block>();
- ret.calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
-
- for (int numBlock = 0; numBlock < cex.Trace.Count; numBlock ++ )
- {
- Block block = cex.Trace[numBlock];
- var origBlock = elGetBlock(currProc, block, extractLoopMappingInfo);
- if (origBlock != null) ret.Trace.Add(origBlock);
- var callCnt = 1;
- for (int numInstr = 0; numInstr < block.Cmds.Count; numInstr ++) {
- Cmd cmd = block.Cmds[numInstr];
- var loc = new TraceLocation(numBlock, numInstr);
- if (!cex.calleeCounterexamples.ContainsKey(loc))
- {
- if (getCallee(cex.getTraceCmd(loc), inlinedProcs) != null) callCnt++;
- continue;
- }
- string callee = cex.getCalledProcName(cex.getTraceCmd(loc));
- Contract.Assert(callee != null);
- var calleeTrace = cex.calleeCounterexamples[loc];
- Debug.Assert(calleeTrace != null);
-
- var origTrace = extractLoopTraceRec(calleeTrace, callee, inlinedProcs, extractLoopMappingInfo);
-
- if (elIsLoop(callee))
- {
- // Absorb the trace into the current trace
-
- int currLen = ret.Trace.Count;
- ret.Trace.AddRange(origTrace.counterexample.Trace);
-
- foreach (var kvp in origTrace.counterexample.calleeCounterexamples)
- {
- var newloc = new TraceLocation(kvp.Key.numBlock + currLen, kvp.Key.numInstr);
- ret.calleeCounterexamples.Add(newloc, kvp.Value);
- }
-
- }
- else
- {
- var origLoc = new TraceLocation(ret.Trace.Count - 1, getCallCmdPosition(origBlock, callCnt, inlinedProcs, callee));
- ret.calleeCounterexamples.Add(origLoc, origTrace);
- callCnt++;
- }
- }
- }
- return new CalleeCounterexampleInfo(ret, cexInfo.args);
- }
-
- // return the position of the i^th CallCmd in the block (count only those Calls that call a procedure in inlinedProcs).
- // Assert failure if there isn't any.
- // Assert that the CallCmd found calls "callee"
- private int getCallCmdPosition(Block block, int i, HashSet<string> inlinedProcs, string callee)
- {
- Debug.Assert(i >= 1);
- for (int pos = 0; pos < block.Cmds.Count; pos++)
- {
- Cmd cmd = block.Cmds[pos];
- string procCalled = getCallee(cmd, inlinedProcs);
-
- if (procCalled != null)
- {
- if (i == 1)
- {
- Debug.Assert(procCalled == callee);
- return pos;
- }
- i--;
- }
- }
-
- Debug.Assert(false, "Didn't find the i^th call cmd");
- return -1;
- }
-
- private string getCallee(Cmd cmd, HashSet<string> inlinedProcs)
- {
- string procCalled = null;
- if (cmd is CallCmd)
- {
- var cc = (CallCmd)cmd;
- if (inlinedProcs.Contains(cc.Proc.Name))
- {
- procCalled = cc.Proc.Name;
- }
- }
-
- if (cmd is AssumeCmd)
- {
- var expr = (cmd as AssumeCmd).Expr as NAryExpr;
- if (expr != null)
- {
- if (inlinedProcs.Contains(expr.Fun.FunctionName))
- {
- procCalled = expr.Fun.FunctionName;
- }
- }
- }
- return procCalled;
- }
-
- protected virtual bool elIsLoop(string procname)
- {
- return false;
- }
-
- private Block elGetBlock(string procname, Block block, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
- {
- Contract.Requires(procname != null);
-
- if (!extractLoopMappingInfo.ContainsKey(procname))
- return block;
-
- if (!extractLoopMappingInfo[procname].ContainsKey(block.Label))
- return null;
-
- return extractLoopMappingInfo[procname][block.Label];
- }
-
- static Counterexample TraceCounterexample(
- Block/*!*/ b, Hashtable/*!*/ traceNodes, List<Block>/*!*/ trace, Model errModel, ModelViewInfo mvInfo,
- Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap,
- ProverContext/*!*/ context,
- Dictionary<TraceLocation/*!*/, CalleeCounterexampleInfo/*!*/>/*!*/ calleeCounterexamples)
- {
- Contract.Requires(b != null);
- Contract.Requires(traceNodes != null);
- Contract.Requires(trace != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(incarnationOriginMap));
- Contract.Requires(context != null);
- Contract.Requires(cce.NonNullDictionaryAndValues(calleeCounterexamples));
- // After translation, all potential errors come from asserts.
-
- while (true)
- {
- List<Cmd> cmds = b.Cmds;
- Contract.Assert(cmds != null);
- TransferCmd transferCmd = cce.NonNull(b.TransferCmd);
- for (int i = 0; i < cmds.Count; i++)
- {
- Cmd cmd = cce.NonNull(cmds[i]);
-
- // Skip if 'cmd' not contained in the trace or not an assert
- if (cmd is AssertCmd && traceNodes.Contains(cmd))
- {
- Counterexample newCounterexample = AssertCmdToCounterexample((AssertCmd)cmd, transferCmd, trace, errModel, mvInfo, context);
- Contract.Assert(newCounterexample != null);
- newCounterexample.AddCalleeCounterexample(calleeCounterexamples);
- return newCounterexample;
- }
- }
-
- GotoCmd gotoCmd = transferCmd as GotoCmd;
- if (gotoCmd == null) return null;
- Block foundBlock = null;
- foreach (Block bb in cce.NonNull(gotoCmd.labelTargets))
- {
- Contract.Assert(bb != null);
- if (traceNodes.Contains(bb))
- {
- foundBlock = bb;
- break;
- }
- }
- if (foundBlock == null) return null;
- trace.Add(foundBlock);
- b = foundBlock;
- }
- }
-
- public static Counterexample AssertCmdToCounterexample(AssertCmd cmd, TransferCmd transferCmd, List<Block> trace, Model errModel, ModelViewInfo mvInfo, ProverContext context)
- {
- Contract.Requires(cmd != null);
- Contract.Requires(transferCmd != null);
- Contract.Requires(trace != null);
- Contract.Requires(context != null);
- Contract.Ensures(Contract.Result<Counterexample>() != null);
-
- List<string> relatedInformation = new List<string>();
-
- // See if it is a special assert inserted in translation
- if (cmd is AssertRequiresCmd)
- {
- AssertRequiresCmd assertCmd = (AssertRequiresCmd)cmd;
- Contract.Assert(assertCmd != null);
- CallCounterexample cc = new CallCounterexample(trace, assertCmd.Call, assertCmd.Requires, errModel, mvInfo, context, assertCmd.Checksum);
- cc.relatedInformation = relatedInformation;
- return cc;
- }
- else if (cmd is AssertEnsuresCmd)
- {
- AssertEnsuresCmd assertCmd = (AssertEnsuresCmd)cmd;
- Contract.Assert(assertCmd != null);
- ReturnCounterexample rc = new ReturnCounterexample(trace, transferCmd, assertCmd.Ensures, errModel, mvInfo, context, cmd.Checksum);
- rc.relatedInformation = relatedInformation;
- return rc;
- }
- else
- {
- AssertCounterexample ac = new AssertCounterexample(trace, (AssertCmd)cmd, errModel, mvInfo, context);
- ac.relatedInformation = relatedInformation;
- return ac;
- }
- }
-
- static VCExpr LetVC(Block startBlock,
- VCExpr controlFlowVariableExpr,
- Dictionary<int, Absy> label2absy,
- ProverContext proverCtxt,
- out int assertionCount) {
- Contract.Requires(startBlock != null);
- Contract.Requires(proverCtxt != null);
-
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
- List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
- VCExpr startCorrect = LetVC(startBlock, controlFlowVariableExpr, label2absy, blockVariables, bindings, proverCtxt, out assertionCount);
- return proverCtxt.ExprGen.Let(bindings, startCorrect);
- }
-
- static VCExpr LetVCIterative(List<Block> blocks,
- VCExpr controlFlowVariableExpr,
- Dictionary<int, Absy> label2absy,
- ProverContext proverCtxt,
- out int assertionCount,
- bool isPositiveContext = true)
- {
- Contract.Requires(blocks != null);
- Contract.Requires(proverCtxt != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- assertionCount = 0;
-
- Graph<Block> dag = new Graph<Block>();
- dag.AddSource(blocks[0]);
- foreach (Block b in blocks) {
- GotoCmd gtc = b.TransferCmd as GotoCmd;
- if (gtc != null) {
- Contract.Assume(gtc.labelTargets != null);
- foreach (Block dest in gtc.labelTargets) {
- Contract.Assert(dest != null);
- dag.AddEdge(dest, b);
- }
- }
- }
- IEnumerable sortedNodes = dag.TopologicalSort();
- Contract.Assert(sortedNodes != null);
-
- Dictionary<Block, VCExprVar> blockVariables = new Dictionary<Block, VCExprVar>();
- List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
- VCExpressionGenerator gen = proverCtxt.ExprGen;
- Contract.Assert(gen != null);
- foreach (Block block in sortedNodes) {
- VCExpr SuccCorrect;
- GotoCmd gotocmd = block.TransferCmd as GotoCmd;
- if (gotocmd == null) {
- ReturnExprCmd re = block.TransferCmd as ReturnExprCmd;
- if (re == null) {
- SuccCorrect = VCExpressionGenerator.True;
- }
- else {
- SuccCorrect = proverCtxt.BoogieExprTranslator.Translate(re.Expr);
- if (isPositiveContext)
- {
- SuccCorrect = gen.Not(SuccCorrect);
- }
- }
- }
- else {
- Contract.Assert(gotocmd.labelTargets != null);
- List<VCExpr> SuccCorrectVars = new List<VCExpr>(gotocmd.labelTargets.Count);
- foreach (Block successor in gotocmd.labelTargets) {
- Contract.Assert(successor != null);
- VCExpr s = blockVariables[successor];
- if (controlFlowVariableExpr != null) {
- VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(controlFlowVariableExpr, gen.Integer(BigNum.FromInt(block.UniqueId)));
- VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(successor.UniqueId)));
- s = gen.Implies(controlTransferExpr, s);
- }
- SuccCorrectVars.Add(s);
- }
- SuccCorrect = gen.NAry(VCExpressionGenerator.AndOp, SuccCorrectVars);
- }
-
- VCContext context = new VCContext(label2absy, proverCtxt, controlFlowVariableExpr, isPositiveContext);
- VCExpr vc = Wlp.Block(block, SuccCorrect, context);
- assertionCount += context.AssertionCount;
-
- VCExprVar v = gen.Variable(block.Label + "_correct", Bpl.Type.Bool);
- bindings.Add(gen.LetBinding(v, vc));
- blockVariables.Add(block, v);
- }
-
- return proverCtxt.ExprGen.Let(bindings, blockVariables[blocks[0]]);
- }
-
- static VCExpr LetVC(Block block,
- VCExpr controlFlowVariableExpr,
- Dictionary<int, Absy> label2absy,
- Hashtable/*<Block, VCExprVar!>*/ blockVariables,
- List<VCExprLetBinding/*!*/>/*!*/ bindings,
- ProverContext proverCtxt,
- out int assertionCount)
- {
- Contract.Requires(block != null);
- Contract.Requires(blockVariables!= null);
- Contract.Requires(cce.NonNullElements(bindings));
- Contract.Requires(proverCtxt != null);
-
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- assertionCount = 0;
-
- VCExpressionGenerator gen = proverCtxt.ExprGen;
- Contract.Assert(gen != null);
- VCExprVar v = (VCExprVar)blockVariables[block];
- if (v == null) {
- /*
- * For block A (= block), generate:
- * LET_binding A_correct = wp(A_body, (/\ S \in Successors(A) :: S_correct))
- * with the side effect of adding the let bindings to "bindings" for any
- * successor not yet visited.
- */
- VCExpr SuccCorrect;
- GotoCmd gotocmd = block.TransferCmd as GotoCmd;
- if (gotocmd == null) {
- ReturnExprCmd re = block.TransferCmd as ReturnExprCmd;
- if (re == null) {
- SuccCorrect = VCExpressionGenerator.True;
- } else {
- SuccCorrect = proverCtxt.BoogieExprTranslator.Translate(re.Expr);
- }
- } else {
- Contract.Assert( gotocmd.labelTargets != null);
- List<VCExpr> SuccCorrectVars = new List<VCExpr>(gotocmd.labelTargets.Count);
- foreach (Block successor in gotocmd.labelTargets) {
- Contract.Assert(successor != null);
- int ac;
- VCExpr s = LetVC(successor, controlFlowVariableExpr, label2absy, blockVariables, bindings, proverCtxt, out ac);
- assertionCount += ac;
- if (controlFlowVariableExpr != null)
- {
- VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(controlFlowVariableExpr, gen.Integer(BigNum.FromInt(block.UniqueId)));
- VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(successor.UniqueId)));
- s = gen.Implies(controlTransferExpr, s);
- }
- SuccCorrectVars.Add(s);
- }
- SuccCorrect = gen.NAry(VCExpressionGenerator.AndOp, SuccCorrectVars);
- }
-
-
- VCContext context = new VCContext(label2absy, proverCtxt, controlFlowVariableExpr);
- VCExpr vc = Wlp.Block(block, SuccCorrect, context);
- assertionCount += context.AssertionCount;
-
- v = gen.Variable(block.Label + "_correct", Bpl.Type.Bool);
- bindings.Add(gen.LetBinding(v, vc));
- blockVariables.Add(block, v);
- }
- return v;
- }
-
- static VCExpr DagVC(Block block,
- VCExpr controlFlowVariableExpr,
- Dictionary<int, Absy> label2absy,
- Hashtable/*<Block, VCExpr!>*/ blockEquations,
- ProverContext proverCtxt,
- out int assertionCount)
- {
- Contract.Requires(block != null);
- Contract.Requires(label2absy != null);
- Contract.Requires(blockEquations != null);
- Contract.Requires(proverCtxt != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- assertionCount = 0;
- VCExpressionGenerator gen = proverCtxt.ExprGen;
- Contract.Assert(gen != null);
- VCExpr vc = (VCExpr)blockEquations[block];
- if (vc != null) {
- return vc;
- }
-
- /*
- * For block A (= block), generate:
- * wp(A_body, (/\ S \in Successors(A) :: DagVC(S)))
- */
- VCExpr SuccCorrect = null;
- GotoCmd gotocmd = block.TransferCmd as GotoCmd;
- if (gotocmd != null)
- {
- foreach (Block successor in cce.NonNull(gotocmd.labelTargets)) {
- Contract.Assert(successor != null);
- int ac;
- VCExpr c = DagVC(successor, controlFlowVariableExpr, label2absy, blockEquations, proverCtxt, out ac);
- assertionCount += ac;
- if (controlFlowVariableExpr != null) {
- VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(controlFlowVariableExpr, gen.Integer(BigNum.FromInt(block.UniqueId)));
- VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(successor.UniqueId)));
- c = gen.Implies(controlTransferExpr, c);
- }
- SuccCorrect = SuccCorrect == null ? c : gen.And(SuccCorrect, c);
- }
- }
- if (SuccCorrect == null) {
- SuccCorrect = VCExpressionGenerator.True;
- }
-
- VCContext context = new VCContext(label2absy, proverCtxt, controlFlowVariableExpr);
- vc = Wlp.Block(block, SuccCorrect, context);
- assertionCount += context.AssertionCount;
-
- // gen.MarkAsSharedFormula(vc); PR: don't know yet what to do with this guy
-
- blockEquations.Add(block, vc);
- return vc;
- }
-
- static VCExpr FlatBlockVC(Implementation impl,
- Dictionary<int, Absy> label2absy,
- bool local, bool reach, bool doomed,
- ProverContext proverCtxt,
- out int assertionCount)
- {
- Contract.Requires(impl != null);
- Contract.Requires(label2absy != null);
- Contract.Requires(proverCtxt != null);
- Contract.Requires( !local || !reach); // "reach" must be false for local
-
- VCExpressionGenerator gen = proverCtxt.ExprGen;
- Contract.Assert(gen != null);
- Hashtable/* Block --> VCExprVar */ BlkCorrect = BlockVariableMap(impl.Blocks, "_correct", gen);
- Hashtable/* Block --> VCExprVar */ BlkReached = reach ? BlockVariableMap(impl.Blocks, "_reached", gen) : null;
-
- List<Block> blocks = impl.Blocks;
- Contract.Assert(blocks != null);
- // block sorting is now done on the VCExpr
- // if (!local && (cce.NonNull(CommandLineOptions.Clo.TheProverFactory).NeedsBlockSorting) {
- // blocks = SortBlocks(blocks);
- // }
-
- VCExpr proofObligation;
- if (!local) {
- proofObligation = cce.NonNull((VCExprVar)BlkCorrect[impl.Blocks[0]]);
- } else {
- List<VCExpr> conjuncts = new List<VCExpr>(blocks.Count);
- foreach (Block b in blocks) {Contract.Assert(b != null);
- VCExpr v = cce.NonNull((VCExprVar)BlkCorrect[b]);
- conjuncts.Add(v);
- }
- proofObligation = gen.NAry(VCExpressionGenerator.AndOp, conjuncts);
- }
-
- VCContext context = new VCContext(label2absy, proverCtxt);
- Contract.Assert(context != null);
-
- List<VCExprLetBinding> programSemantics = new List<VCExprLetBinding>(blocks.Count);
- foreach (Block b in blocks) {Contract.Assert(b != null);
- /*
- * In block mode,
- * For a return block A, generate:
- * A_correct <== wp(A_body, true) [post-condition has been translated into an assert]
- * For all other blocks, generate:
- * A_correct <== wp(A_body, (/\ S \in Successors(A) :: S_correct))
- *
- * In doomed mode, proceed as in block mode, except for a return block A, generate:
- * A_correct <== wp(A_body, false) [post-condition has been translated into an assert]
- *
- * In block reach mode, the wp(A_body,...) in the equations above change to:
- * A_reached ==> wp(A_body,...)
- * and the conjunction above changes to:
- * (/\ S \in Successors(A) :: S_correct \/ (\/ T \in Successors(A) && T != S :: T_reached))
- *
- * In local mode, generate:
- * A_correct <== wp(A_body, true)
- */
- VCExpr SuccCorrect;
- if (local) {
- SuccCorrect = VCExpressionGenerator.True;
- } else {
- SuccCorrect = SuccessorsCorrect(b, BlkCorrect, BlkReached, doomed, gen);
- }
-
- VCExpr wlp = Wlp.Block(b, SuccCorrect, context);
- if (BlkReached != null) {
- wlp = gen.Implies(cce.NonNull((VCExprVar)BlkReached[b]), wlp);
- }
-
- VCExprVar okVar = cce.NonNull((VCExprVar)BlkCorrect[b]);
- VCExprLetBinding binding = gen.LetBinding(okVar, wlp);
- programSemantics.Add(binding);
- }
-
- assertionCount = context.AssertionCount;
- return gen.Let(programSemantics, proofObligation);
- }
-
- private static Hashtable/* Block --> VCExprVar */ BlockVariableMap(List<Block/*!*/>/*!*/ blocks, string suffix,
- Microsoft.Boogie.VCExpressionGenerator gen) {
- Contract.Requires(cce.NonNullElements(blocks));
- Contract.Requires(suffix != null);
- Contract.Requires(gen != null);
- Contract.Ensures(Contract.Result<Hashtable>() != null);
-
- Hashtable/* Block --> VCExprVar */ map = new Hashtable/* Block --> (Let)Variable */();
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- VCExprVar v = gen.Variable(b.Label + suffix, Bpl.Type.Bool);
- Contract.Assert(v != null);
- map.Add(b, v);
- }
- return map;
- }
-
- private static VCExpr SuccessorsCorrect(
- Block b,
- Hashtable/* Block --> VCExprVar */ BlkCorrect,
- Hashtable/* Block --> VCExprVar */ BlkReached,
- bool doomed,
- Microsoft.Boogie.VCExpressionGenerator gen) {
- Contract.Requires(b != null);
- Contract.Requires(BlkCorrect != null);
- Contract.Requires(gen != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpr SuccCorrect = null;
- GotoCmd gotocmd = b.TransferCmd as GotoCmd;
- if (gotocmd != null) {
- foreach (Block successor in cce.NonNull(gotocmd.labelTargets)) {
- Contract.Assert(successor != null);
- // c := S_correct
- VCExpr c = (VCExprVar)BlkCorrect[successor];
- Contract.Assert(c != null);
- if (BlkReached != null) {
- // c := S_correct \/ Sibling0_reached \/ Sibling1_reached \/ ...;
- foreach (Block successorSibling in gotocmd.labelTargets) {
- Contract.Assert(successorSibling != null);
- if (successorSibling != successor) {
- c = gen.Or(c, cce.NonNull((VCExprVar)BlkReached[successorSibling]));
- }
- }
- }
- SuccCorrect = SuccCorrect == null ? c : gen.And(SuccCorrect, c);
- }
- }
- if (SuccCorrect == null) {
- return VCExpressionGenerator.True;
- } else if (doomed) {
- return VCExpressionGenerator.False;
- } else {
- return SuccCorrect;
- }
- }
-
- static VCExpr NestedBlockVC(Implementation impl,
- Dictionary<int, Absy> label2absy,
- bool reach,
- ProverContext proverCtxt,
- out int assertionCount){
- Contract.Requires(impl != null);
- Contract.Requires(label2absy != null);
- Contract.Requires(proverCtxt != null);
- Contract.Requires( impl.Blocks.Count != 0);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpressionGenerator gen = proverCtxt.ExprGen;
- Contract.Assert(gen != null);
- Graph<Block> g = Program.GraphFromImpl(impl);
-
- Hashtable/* Block --> VCExprVar */ BlkCorrect = BlockVariableMap(impl.Blocks, "_correct", gen);
- Hashtable/* Block --> VCExprVar */ BlkReached = reach ? BlockVariableMap(impl.Blocks, "_reached", gen) : null;
-
- Block startBlock = cce.NonNull( impl.Blocks[0]);
- VCExpr proofObligation = (VCExprVar)BlkCorrect[startBlock];
- Contract.Assert(proofObligation != null);
- VCContext context = new VCContext(label2absy, proverCtxt);
-
- Hashtable/*Block->int*/ totalOrder = new Hashtable/*Block->int*/();
- {
- List<Block> blocks = impl.Blocks;
-
- // block sorting is now done on the VCExpr
- // if (((!)CommandLineOptions.Clo.TheProverFactory).NeedsBlockSorting) {
- // blocks = SortBlocks(blocks);
- // }
- int i = 0;
- foreach (Block b in blocks) {
- Contract.Assert(b != null);
- totalOrder[b] = i;
- i++;
- }
- }
-
- VCExprLetBinding programSemantics = NestedBlockEquation(cce.NonNull(impl.Blocks[0]), BlkCorrect, BlkReached, totalOrder, context, g, gen);
- List<VCExprLetBinding> ps = new List<VCExprLetBinding>(1);
- ps.Add(programSemantics);
-
- assertionCount = context.AssertionCount;
- return gen.Let(ps, proofObligation);
- }
-
- private static VCExprLetBinding NestedBlockEquation(Block b,
- Hashtable/*Block-->VCExprVar*/ BlkCorrect,
- Hashtable/*Block-->VCExprVar*/ BlkReached,
- Hashtable/*Block->int*/ totalOrder,
- VCContext context,
- Graph<Block> g,
- Microsoft.Boogie.VCExpressionGenerator gen) {
- Contract.Requires(b != null);
- Contract.Requires(BlkCorrect != null);
- Contract.Requires(totalOrder != null);
- Contract.Requires(g != null);
- Contract.Requires(context != null);
-
- Contract.Ensures(Contract.Result<VCExprLetBinding>() != null);
-
- /*
- * For a block b, return:
- * LET_BINDING b_correct = wp(b_body, X)
- * where X is:
- * LET (THOSE d \in DirectDominates(b) :: BlockEquation(d))
- * IN (/\ s \in Successors(b) :: s_correct)
- *
- * When the VC-expression generator does not support LET expresions, this
- * will eventually turn into:
- * b_correct <== wp(b_body, X)
- * where X is:
- * (/\ s \in Successors(b) :: s_correct)
- * <==
- * (/\ d \in DirectDominatees(b) :: BlockEquation(d))
- *
- * In both cases above, if BlkReached is non-null, then the wp expression
- * is instead:
- * b_reached ==> wp(b_body, X)
- */
-
- VCExpr SuccCorrect = SuccessorsCorrect(b, BlkCorrect, null, false, gen);
- Contract.Assert(SuccCorrect != null);
-
- List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
- foreach (Block dominee in GetSortedBlocksImmediatelyDominatedBy(g, b, totalOrder)) {
- Contract.Assert(dominee != null);
- VCExprLetBinding c = NestedBlockEquation(dominee, BlkCorrect, BlkReached, totalOrder, context, g, gen);
- bindings.Add(c);
- }
-
- VCExpr X = gen.Let(bindings, SuccCorrect);
- VCExpr wlp = Wlp.Block(b, X, context);
- if (BlkReached != null) {
- wlp = gen.Implies((VCExprVar)BlkReached[b], wlp);
- Contract.Assert(wlp != null);
- }
- VCExprVar okVar = cce.NonNull((VCExprVar)BlkCorrect[b]);
- return gen.LetBinding(okVar, wlp);
- }
-
- /// <summary>
- /// Returns a list of g.ImmediatelyDominatedBy(b), but in a sorted order, hoping to steer around
- /// the nondeterminism problems we've been seeing by using just this call.
- /// </summary>
- static List<Block/*!*/>/*!*/ GetSortedBlocksImmediatelyDominatedBy(Graph<Block>/*!*/ g, Block/*!*/ b, Hashtable/*Block->int*//*!*/ totalOrder) {
- Contract.Requires(g != null);
- Contract.Requires(b != null);
- Contract.Requires(totalOrder != null);
- Contract.Ensures(Contract.Result<List<Block>>() != null);
-
- List<Block> list = new List<Block>();
- foreach (Block dominee in g.ImmediatelyDominatedBy(b)) {
- Contract.Assert(dominee != null);
- list.Add(dominee);
- }
- list.Sort(new Comparison<Block>(delegate(Block x, Block y) {
- return (int)cce.NonNull(totalOrder[x]) - (int)cce.NonNull(totalOrder[y]);
- }));
- return list;
- }
-
- static VCExpr VCViaStructuredProgram
- (Implementation impl, Dictionary<int, Absy> label2absy,
- ProverContext proverCtxt,
- out int assertionCount)
- {
- Contract.Requires(impl != null);
- Contract.Requires(label2absy != null);
- Contract.Requires(proverCtxt != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- #region Convert block structure back to a "regular expression"
- RE r = DAG2RE.Transform(cce.NonNull(impl.Blocks[0]));
- Contract.Assert(r != null);
- #endregion
-
- VCContext ctxt = new VCContext(label2absy, proverCtxt);
- Contract.Assert(ctxt != null);
- #region Send wlp(program,true) to Simplify
- var vcexp = Wlp.RegExpr(r, VCExpressionGenerator.True, ctxt);
- assertionCount = ctxt.AssertionCount;
- return vcexp;
- #endregion
- }
-
- /// <summary>
- /// Remove empty blocks reachable from the startBlock of the CFG
- /// </summary>
- static void RemoveEmptyBlocksIterative(List<Block> blocks) {
- // postorder traversal of cfg
- // noting loop heads in [keep] and
- // generating token information in [renameInfo]
- Block startBlock = blocks[0];
- var postorder = new List<Block>();
- var keep = new HashSet<Block>();
- var visited = new HashSet<Block>();
- var grey = new HashSet<Block>();
- var stack = new Stack<Block>();
- Dictionary<Block, Block> renameInfo = new Dictionary<Block, Block>();
-
- stack.Push(startBlock);
- visited.Add(startBlock);
- while (stack.Count != 0) {
- var curr = stack.Pop();
- if (grey.Contains(curr)) {
- postorder.Add(curr);
-
- // generate renameInfoForStartBlock
- GotoCmd gtc = curr.TransferCmd as GotoCmd;
- renameInfo[curr] = null;
- if (gtc == null || gtc.labelTargets == null || gtc.labelTargets.Count == 0) {
- if (curr.Cmds.Count == 0 && curr.tok.IsValid) {
- renameInfo[curr] = curr;
- }
- } else {
- if (curr.Cmds.Count == 0 || curr == startBlock) {
- if (curr.tok.IsValid) {
- renameInfo[curr] = curr;
- } else {
- HashSet<Block> successorRenameInfo = new HashSet<Block>();
- foreach (Block s in gtc.labelTargets) {
- if (keep.Contains(s)) {
- successorRenameInfo.Add(null);
- } else {
- successorRenameInfo.Add(renameInfo[s]);
- }
- }
- if (successorRenameInfo.Count == 1) {
- renameInfo[curr] = successorRenameInfo.Single();
- }
- }
- }
- }
- // end generate renameInfoForStartBlock
-
- } else {
- grey.Add(curr);
- stack.Push(curr);
- GotoCmd gtc = curr.TransferCmd as GotoCmd;
- if (gtc == null || gtc.labelTargets == null || gtc.labelTargets.Count == 0) continue;
- foreach (Block s in gtc.labelTargets) {
- if (!visited.Contains(s)) {
- visited.Add(s);
- stack.Push(s);
- } else if (grey.Contains(s) && !postorder.Contains(s)) { // s is a loop head
- keep.Add(s);
- }
- }
- }
- }
- keep.Add(startBlock);
-
- foreach (Block b in postorder) {
- if (!keep.Contains(b) && b.Cmds.Count == 0) {
- GotoCmd bGtc = b.TransferCmd as GotoCmd;
- foreach (Block p in b.Predecessors) {
- GotoCmd pGtc = p.TransferCmd as GotoCmd;
- Contract.Assert(pGtc != null);
- pGtc.labelTargets.Remove(b);
- pGtc.labelNames.Remove(b.Label);
- }
- if (bGtc == null || bGtc.labelTargets == null || bGtc.labelTargets.Count == 0) {
- continue;
- }
-
- List<Block> successors = bGtc.labelTargets;
-
- // Try to push token information if possible
- if (b.tok.IsValid && successors.Count == 1 && b != renameInfo[startBlock]) {
- var s = successors.Single();
- if (!s.tok.IsValid) {
- foreach (Block p in s.Predecessors) {
- if (p != b) {
- GotoCmd pGtc = p.TransferCmd as GotoCmd;
- Contract.Assert(pGtc != null);
- pGtc.labelTargets.Remove(s);
- pGtc.labelNames.Remove(s.Label);
- pGtc.labelTargets.Add(s);
- pGtc.labelNames.Add(b.Label);
- }
- }
- s.tok = b.tok;
- s.Label = b.Label;
- }
- }
-
- foreach (Block p in b.Predecessors) {
- GotoCmd pGtc = p.TransferCmd as GotoCmd;
- Contract.Assert(pGtc != null);
- foreach (Block s in successors) {
- if (!pGtc.labelTargets.Contains(s)) {
- pGtc.labelTargets.Add(s);
- pGtc.labelNames.Add(s.Label);
- }
- }
- }
- }
- }
-
- if (!startBlock.tok.IsValid && startBlock.Cmds.All(c => c is AssumeCmd)) {
- if (renameInfo[startBlock] != null) {
- startBlock.tok = renameInfo[startBlock].tok;
- startBlock.Label = renameInfo[startBlock].Label;
- }
- }
-
- }
-
- /// <summary>
- /// Remove the empty blocks reachable from the block.
- /// It changes the visiting state of the blocks, so that if you want to visit again the blocks, you have to reset them...
- /// </summary>
- static List<Block> RemoveEmptyBlocks(Block b) {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.Result<List<Block>>() != null);
-
- Contract.Assert(b.TraversingStatus == Block.VisitState.ToVisit);
- Block renameInfo;
- List<Block> retVal = removeEmptyBlocksWorker(b, true, out renameInfo);
- if (renameInfo != null && !b.tok.IsValid) {
- bool onlyAssumes = true;
- foreach (Cmd c in b.Cmds) {
- if (!(c is AssumeCmd)) {
- onlyAssumes = false;
- break;
- }
- }
- if (onlyAssumes) {
- b.tok = renameInfo.tok;
- b.Label = renameInfo.Label;
- }
- }
- return retVal;
- }
-
- /// <summary>
- /// For every not-yet-visited block n reachable from b, change n's successors to skip empty nodes.
- /// Return the *set* of blocks reachable from b without passing through a nonempty block.
- /// The target of any backedge is counted as a nonempty block.
- /// If renameInfoForStartBlock is non-null, it denotes an empty block with location information, and that
- /// information would be appropriate to display
- /// </summary>
- private static List<Block> removeEmptyBlocksWorker(Block b, bool startNode, out Block renameInfoForStartBlock)
- {
- Contract.Requires(b != null);
- Contract.Ensures(Contract.ValueAtReturn(out renameInfoForStartBlock) == null || Contract.ValueAtReturn(out renameInfoForStartBlock).tok.IsValid);
- // ensures: b in result ==> renameInfoForStartBlock == null;
-
- renameInfoForStartBlock = null;
- List<Block> bs = new List<Block>();
- GotoCmd gtc = b.TransferCmd as GotoCmd;
-
- // b has no successors
- if (gtc == null || gtc.labelTargets == null || gtc.labelTargets.Count == 0)
- {
- if (b.Cmds.Count != 0){ // only empty blocks are removed...
- bs.Add(b);
- } else if (b.tok.IsValid) {
- renameInfoForStartBlock = b;
- }
- return bs;
- }
- else if (b.TraversingStatus == Block.VisitState.ToVisit) // if b has some successors and we have not seen it so far...
- {
- b.TraversingStatus = Block.VisitState.BeingVisited;
-
- // Before recursing down to successors, make a sobering observation:
- // If b has no commands and is not the start node, then it will see
- // extinction (because it will not be included in the "return setOfSuccessors"
- // statement below). In that case, if b has a location, then the location
- // information would be lost. Hence, make an attempt to save the location
- // by pushing the location onto b's successor. This can be done if (0) b has
- // exactly one successor, (1) that successor has no location of its own, and
- // (2) that successor has no other predecessors.
- if (b.Cmds.Count == 0 && !startNode) {
- // b is about to become extinct; try to save its name and location, if possible
- if (b.tok.IsValid && gtc.labelTargets.Count == 1) {
- Block succ = cce.NonNull(gtc.labelTargets[0]);
- if (!succ.tok.IsValid && succ.Predecessors.Count == 1) {
- succ.tok = b.tok;
- succ.Label = b.Label;
- }
- }
- }
-
- // recursively call this method on each successor
- // merge result into a *set* of blocks
- HashSet<Block> mergedSuccessors = new HashSet<Block>();
- int m = 0; // in the following loop, set renameInfoForStartBlock to the value that all recursive calls agree on, if possible; otherwise, null
- foreach (Block dest in gtc.labelTargets){Contract.Assert(dest != null);
- Block renameInfo;
- List<Block> ys = removeEmptyBlocksWorker(dest, false, out renameInfo);
- Contract.Assert(ys != null);
- if (m == 0) {
- renameInfoForStartBlock = renameInfo;
- } else if (renameInfoForStartBlock != renameInfo) {
- renameInfoForStartBlock = null;
- }
- foreach (Block successor in ys){
- if (!mergedSuccessors.Contains(successor))
- mergedSuccessors.Add(successor);
- }
- m++;
- }
- b.TraversingStatus = Block.VisitState.AlreadyVisited;
-
- List<Block> setOfSuccessors = new List<Block>();
- foreach (Block d in mergedSuccessors)
- setOfSuccessors.Add(d);
- if (b.Cmds.Count == 0 && !startNode) {
- // b is about to become extinct
- if (b.tok.IsValid) {
- renameInfoForStartBlock = b;
- }
- return setOfSuccessors;
- }
- // otherwise, update the list of successors of b to be the blocks in setOfSuccessors
- gtc.labelTargets = setOfSuccessors;
- gtc.labelNames = new List<String>();
- foreach (Block d in setOfSuccessors){
- Contract.Assert(d != null);
- gtc.labelNames.Add(d.Label);}
- if (!startNode) {
- renameInfoForStartBlock = null;
- }
- return new List<Block> { b };
- }
- else // b has some successors, but we are already visiting it, or we have already visited it...
- {
- return new List<Block> { b };
- }
- }
-
- static void DumpMap(Hashtable /*Variable->Expr*/ map) {
- Contract.Requires(map != null);
- foreach (DictionaryEntry de in map) {
- Variable v = (Variable)de.Key;
- Contract.Assert(v != null);
- Expr e = (Expr)de.Value;
- Contract.Assert(e != null);
- Console.Write(" ");
- v.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false), 0);
- Console.Write(" --> ");
- e.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false));
- Console.WriteLine();
- }
- }
- }
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading;
+using System.IO;
+using Microsoft.Boogie;
+using Microsoft.Boogie.GraphUtil;
+using System.Diagnostics.Contracts;
+using Microsoft.Basetypes;
+using Microsoft.Boogie.VCExprAST;
+
+namespace VC {
+ using Bpl = Microsoft.Boogie;
+ using System.Threading.Tasks;
+
+ public class VCGen : ConditionGeneration {
+ private const bool _print_time = false;
+ /// <summary>
+ /// Constructor. Initializes the theorem prover.
+ /// </summary>
+ [NotDelayed]
+ public VCGen(Program program, string/*?*/ logFilePath, bool appendLogFile, List<Checker> checkers)
+ : base(program, checkers)
+ {
+ Contract.Requires(program != null);
+ this.appendLogFile = appendLogFile;
+ this.logFilePath = logFilePath;
+ }
+
+ private static AssumeCmd AssertTurnedIntoAssume(AssertCmd assrt) {
+ Contract.Requires(assrt != null);
+ Contract.Ensures(Contract.Result<AssumeCmd>() != null);
+
+ Expr expr = assrt.Expr;
+ Contract.Assert(expr != null);
+ switch (Wlp.Subsumption(assrt)) {
+ case CommandLineOptions.SubsumptionOption.Never:
+ expr = Expr.True;
+ break;
+ case CommandLineOptions.SubsumptionOption.Always:
+ break;
+ case CommandLineOptions.SubsumptionOption.NotForQuantifiers:
+ if (expr is QuantifierExpr) {
+ expr = Expr.True;
+ }
+ break;
+ default:
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // unexpected case
+ }
+
+ return new AssumeCmd(assrt.tok, expr);
+ }
+
+ #region Soundness smoke tester
+ class SmokeTester {
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(parent != null);
+ Contract.Invariant(impl != null);
+ Contract.Invariant(initial != null);
+ Contract.Invariant(cce.NonNullDictionaryAndValues(copies));
+ Contract.Invariant(cce.NonNull(visited));
+ Contract.Invariant(callback != null);
+ }
+
+ VCGen parent;
+ Implementation impl;
+ Block initial;
+ int id;
+ Dictionary<Block, Block> copies = new Dictionary<Block, Block>();
+ HashSet<Block> visited = new HashSet<Block>();
+ VerifierCallback callback;
+
+ internal SmokeTester(VCGen par, Implementation i, VerifierCallback callback) {
+ Contract.Requires(par != null);
+ Contract.Requires(i != null);
+ Contract.Requires(callback != null);
+ parent = par;
+ impl = i;
+ initial = i.Blocks[0];
+ this.callback = callback;
+ }
+
+ internal void Copy() {
+ CloneBlock(impl.Blocks[0]);
+ initial = GetCopiedBlocks()[0];
+ }
+
+ internal void Test() {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ DFS(initial);
+ }
+
+ void TopologicalSortImpl() {
+ Graph<Block> dag = new Graph<Block>();
+ dag.AddSource(cce.NonNull(impl.Blocks[0])); // there is always at least one node in the graph
+ foreach (Block b in impl.Blocks) {
+ GotoCmd gtc = b.TransferCmd as GotoCmd;
+ if (gtc != null) {
+ Contract.Assume(gtc.labelTargets != null);
+ foreach (Block dest in gtc.labelTargets) {
+ Contract.Assert(dest != null);
+ dag.AddEdge(b, dest);
+ }
+ }
+ }
+ impl.Blocks = new List<Block>();
+ foreach (Block b in dag.TopologicalSort()) {
+ Contract.Assert(b != null);
+ impl.Blocks.Add(b);
+ }
+ }
+
+ void Emit() {
+ TopologicalSortImpl();
+ EmitImpl(impl, false);
+ }
+
+ // this one copies forward
+ Block CloneBlock(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+
+ Block fake_res;
+ if (copies.TryGetValue(b, out fake_res)) {
+ return cce.NonNull(fake_res);
+ }
+ Block res = new Block(b.tok, b.Label, new List<Cmd>(b.Cmds), null);
+ copies[b] = res;
+ if (b.TransferCmd is GotoCmd) {
+ foreach (Block ch in cce.NonNull((GotoCmd)b.TransferCmd).labelTargets) {
+ Contract.Assert(ch != null);
+ CloneBlock(ch);
+ }
+ }
+ foreach (Block p in b.Predecessors) {
+ Contract.Assert(p != null);
+ res.Predecessors.Add(CloneBlock(p));
+ }
+ return res;
+ }
+
+ // this one copies backwards
+ Block CopyBlock(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+
+ Block fake_res;
+ if (copies.TryGetValue(b, out fake_res)) {
+ // fake_res should be Block! but the compiler fails
+ return cce.NonNull(fake_res);
+ }
+ Block res;
+ List<Cmd> seq = new List<Cmd>();
+ foreach (Cmd c in b.Cmds) {
+ Contract.Assert(c != null);
+ AssertCmd turn = c as AssertCmd;
+ if (!turnAssertIntoAssumes || turn == null) {
+ seq.Add(c);
+ } else {
+ seq.Add(AssertTurnedIntoAssume(turn));
+ }
+ }
+ res = new Block(b.tok, b.Label, seq, null);
+ copies[b] = res;
+ foreach (Block p in b.Predecessors) {
+ Contract.Assert(p != null);
+ res.Predecessors.Add(CopyBlock(p));
+ }
+ return res;
+ }
+
+ List<Block> GetCopiedBlocks() {
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Block>>()));
+
+ // the order of nodes in res is random (except for the first one, being the entry)
+ List<Block> res = new List<Block>();
+ res.Add(copies[initial]);
+
+ foreach (KeyValuePair<Block, Block> kv in copies) {
+ Contract.Assert(kv.Key != null&&kv.Value!=null);
+ GotoCmd go = kv.Key.TransferCmd as GotoCmd;
+ ReturnCmd ret = kv.Key.TransferCmd as ReturnCmd;
+ if (kv.Key != initial) {
+ res.Add(kv.Value);
+ }
+ if (go != null) {
+ GotoCmd copy = new GotoCmd(go.tok, new List<String>(), new List<Block>());
+ kv.Value.TransferCmd = copy;
+ foreach (Block b in cce.NonNull(go.labelTargets)) {
+ Contract.Assert(b != null);
+ Block c;
+ if (copies.TryGetValue(b, out c)) {
+ copy.AddTarget(cce.NonNull(c));
+ }
+ }
+ } else if (ret != null) {
+ kv.Value.TransferCmd = ret;
+ } else {
+ Contract.Assume(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ copies.Clear();
+
+ return res;
+ }
+
+ // check if e is true, false, !true, !false
+ // if so return true and the value of the expression in val
+ bool BooleanEval(Expr e, ref bool val) {
+ Contract.Requires(e != null);
+ LiteralExpr lit = e as LiteralExpr;
+ NAryExpr call = e as NAryExpr;
+
+ if (lit != null && lit.isBool) {
+ val = lit.asBool;
+ return true;
+ } else if (call != null &&
+ call.Fun is UnaryOperator &&
+ ((UnaryOperator)call.Fun).Op == UnaryOperator.Opcode.Not &&
+ BooleanEval(cce.NonNull(call.Args[0]), ref val)) {
+ val = !val;
+ return true;
+ }
+ // this is for the 0bv32 != 0bv32 generated by vcc
+ else if (call != null &&
+ call.Fun is BinaryOperator &&
+ ((BinaryOperator)call.Fun).Op == BinaryOperator.Opcode.Neq &&
+ call.Args[0] is LiteralExpr &&
+ cce.NonNull(call.Args[0]).Equals(call.Args[1])) {
+ val = false;
+ return true;
+ }
+
+ return false;
+ }
+
+ bool IsFalse(Expr e) {
+ Contract.Requires(e != null);
+ bool val = false;
+ return BooleanEval(e, ref val) && !val;
+ }
+
+ bool CheckUnreachable(Block cur, List<Cmd> seq)
+ {
+ Contract.Requires(cur != null);
+ Contract.Requires(seq != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ foreach (Cmd cmd in seq)
+ {
+ AssertCmd assrt = cmd as AssertCmd;
+ if (assrt != null && QKeyValue.FindBoolAttribute(assrt.Attributes, "PossiblyUnreachable"))
+ return false;
+ }
+
+ DateTime start = DateTime.UtcNow;
+ if (CommandLineOptions.Clo.Trace)
+ {
+ System.Console.Write(" soundness smoke test #{0} ... ", id);
+ }
+ callback.OnProgress("smoke", id, id, 0.0);
+
+ Token tok = new Token();
+ tok.val = "soundness smoke test assertion";
+ seq.Add(new AssertCmd(tok, Expr.False));
+ Block copy = CopyBlock(cur);
+ Contract.Assert(copy != null);
+ copy.Cmds = seq;
+ List<Block> backup = impl.Blocks;
+ Contract.Assert(backup != null);
+ impl.Blocks = GetCopiedBlocks();
+ copy.TransferCmd = new ReturnCmd(Token.NoToken);
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ System.Console.WriteLine();
+ System.Console.WriteLine(" --- smoke #{0}, before passify", id);
+ Emit();
+ }
+ parent.CurrentLocalVariables = impl.LocVars;
+ ModelViewInfo mvInfo;
+ parent.PassifyImpl(impl, out mvInfo);
+ Dictionary<int, Absy> label2Absy;
+ Checker ch = parent.FindCheckerFor(CommandLineOptions.Clo.SmokeTimeout);
+ Contract.Assert(ch != null);
+
+ ProverInterface.Outcome outcome = ProverInterface.Outcome.Undetermined;
+ try
+ {
+ lock (ch)
+ {
+ var exprGen = ch.TheoremProver.Context.ExprGen;
+ VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : exprGen.Integer(BigNum.ZERO);
+
+ VCExpr vc = parent.GenerateVC(impl, controlFlowVariableExpr, out label2Absy, ch.TheoremProver.Context);
+ Contract.Assert(vc != null);
+
+ if (!CommandLineOptions.Clo.UseLabels)
+ {
+ VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(exprGen.Integer(BigNum.ZERO), exprGen.Integer(BigNum.ZERO));
+ VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
+ vc = exprGen.Implies(eqExpr, vc);
+ }
+
+ impl.Blocks = backup;
+
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ System.Console.WriteLine(" --- smoke #{0}, after passify", id);
+ Emit();
+ }
+
+ ch.BeginCheck(cce.NonNull(impl.Name + "_smoke" + id++), vc, new ErrorHandler(label2Absy, this.callback));
+ }
+
+ ch.ProverTask.Wait();
+
+ lock (ch)
+ {
+ outcome = ch.ReadOutcome();
+ }
+ }
+ finally
+ {
+ ch.GoBackToIdle();
+ }
+
+ parent.CurrentLocalVariables = null;
+
+ DateTime end = DateTime.UtcNow;
+ TimeSpan elapsed = end - start;
+ if (CommandLineOptions.Clo.Trace)
+ {
+ System.Console.WriteLine(" [{0} s] {1}", elapsed.TotalSeconds,
+ outcome == ProverInterface.Outcome.Valid ? "OOPS" :
+ "OK" + (outcome == ProverInterface.Outcome.Invalid ? "" : " (" + outcome + ")"));
+ }
+
+ if (outcome == ProverInterface.Outcome.Valid)
+ {
+ // copy it again, so we get the version with calls, assignments and such
+ copy = CopyBlock(cur);
+ copy.Cmds = seq;
+ impl.Blocks = GetCopiedBlocks();
+ TopologicalSortImpl();
+ callback.OnUnreachableCode(impl);
+ impl.Blocks = backup;
+ return true;
+ }
+ return false;
+ }
+
+ const bool turnAssertIntoAssumes = false;
+
+ void DFS(Block cur) {
+ Contract.Requires(cur != null);
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ if (visited.Contains(cur))
+ return;
+ visited.Add(cur);
+
+ List<Cmd> seq = new List<Cmd>();
+ foreach (Cmd cmd_ in cur.Cmds) {
+ Cmd cmd = cmd_;
+ Contract.Assert(cmd != null);
+ AssertCmd assrt = cmd as AssertCmd;
+ AssumeCmd assm = cmd as AssumeCmd;
+ CallCmd call = cmd as CallCmd;
+
+ bool assumeFalse = false;
+
+ if (assrt != null) {
+ // we're not going any further
+ // it's clear the user expected unreachable code here
+ // it's not clear where did he expect it, maybe it would be right to insert
+ // a check just one command before
+ if (IsFalse(assrt.Expr))
+ return;
+
+#if TURN_ASSERT_INFO_ASSUMES
+ if (turnAssertIntoAssumes) {
+ cmd = AssertTurnedIntoAssume(assrt);
+ }
+#endif
+ } else if (assm != null) {
+ if (IsFalse(assm.Expr))
+ assumeFalse = true;
+ } else if (call != null) {
+ foreach (Ensures e in (cce.NonNull(call.Proc)).Ensures) {
+ Contract.Assert(e != null);
+ if (IsFalse(e.Condition))
+ assumeFalse = true;
+ }
+ }
+
+ if (assumeFalse) {
+ CheckUnreachable(cur, seq);
+ return;
+ }
+
+ seq.Add(cmd);
+ }
+
+
+ GotoCmd go = cur.TransferCmd as GotoCmd;
+ ReturnCmd ret = cur.TransferCmd as ReturnCmd;
+
+ Contract.Assume(!(go != null && go.labelTargets == null && go.labelNames != null && go.labelNames.Count > 0));
+
+ if (ret != null || (go != null && cce.NonNull(go.labelTargets).Count == 0)) {
+ // we end in return, so there will be no more places to check
+ CheckUnreachable(cur, seq);
+ } else if (go != null) {
+ bool needToCheck = true;
+ // if all of our children have more than one parent, then
+ // we're in the right place to check
+ foreach (Block target in cce.NonNull(go.labelTargets)) {
+ Contract.Assert(target != null);
+ if (target.Predecessors.Count == 1) {
+ needToCheck = false;
+ }
+ }
+ if (needToCheck) {
+ CheckUnreachable(cur, seq);
+ }
+ foreach (Block target in go.labelTargets) {
+ Contract.Assert(target != null);
+ DFS(target);
+ }
+ }
+ }
+
+ class ErrorHandler : ProverInterface.ErrorHandler {
+ Dictionary<int, Absy> label2Absy;
+ VerifierCallback callback;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(label2Absy != null);
+ Contract.Invariant(callback != null);
+ }
+
+
+ public ErrorHandler(Dictionary<int, Absy> label2Absy, VerifierCallback callback) {
+ Contract.Requires(label2Absy != null);
+ Contract.Requires(callback != null);
+ this.label2Absy = label2Absy;
+ this.callback = callback;
+ }
+
+ public override Absy Label2Absy(string label) {
+ //Contract.Requires(label != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+
+ int id = int.Parse(label);
+ return cce.NonNull((Absy)label2Absy[id]);
+ }
+
+ public override void OnProverWarning(string msg) {
+ //Contract.Requires(msg != null);
+ this.callback.OnWarning(msg);
+ }
+ }
+ }
+
+
+ #endregion
+
+ #region Splitter
+ class Split {
+ class BlockStats {
+ public bool big_block;
+ public int id;
+ public double assertion_cost;
+ public double assumption_cost; // before multiplier
+ public double incomming_paths;
+ public List<Block>/*!>!*/ virtual_successors = new List<Block>();
+ public List<Block>/*!>!*/ virtual_predecesors = new List<Block>();
+ public HashSet<Block> reachable_blocks;
+ public readonly Block block;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(virtual_successors));
+ Contract.Invariant(cce.NonNullElements(virtual_predecesors));
+ Contract.Invariant(block != null);
+ }
+
+
+ public BlockStats(Block b, int i) {
+ Contract.Requires(b != null);
+ block = b;
+ assertion_cost = -1;
+ id = i;
+ }
+ }
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(cce.NonNullElements(blocks));
+ Contract.Invariant(cce.NonNullElements(big_blocks));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(stats));
+ Contract.Invariant(cce.NonNullElements(assumized_branches));
+ Contract.Invariant(gotoCmdOrigins != null);
+ Contract.Invariant(parent != null);
+ Contract.Invariant(impl != null);
+ Contract.Invariant(copies != null);
+ Contract.Invariant(cce.NonNull(protected_from_assert_to_assume));
+ Contract.Invariant(cce.NonNull(keep_at_all));
+ }
+
+
+ readonly List<Block> blocks;
+ readonly List<Block> big_blocks = new List<Block>();
+ readonly Dictionary<Block/*!*/, BlockStats/*!*/>/*!*/ stats = new Dictionary<Block/*!*/, BlockStats/*!*/>();
+ readonly int id;
+ static int current_id = -1;
+ Block split_block;
+ bool assert_to_assume;
+ List<Block/*!*/>/*!*/ assumized_branches = new List<Block/*!*/>();
+
+ double score;
+ bool score_computed;
+ double total_cost;
+ int assertion_count;
+ double assertion_cost; // without multiplication by paths
+ Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins;
+ readonly public VCGen/*!*/ parent;
+ Implementation/*!*/ impl;
+
+ Dictionary<Block/*!*/, Block/*!*/>/*!*/ copies = new Dictionary<Block/*!*/, Block/*!*/>();
+ bool doing_slice;
+ double slice_initial_limit;
+ double slice_limit;
+ bool slice_pos;
+ HashSet<Block/*!*/>/*!*/ protected_from_assert_to_assume = new HashSet<Block/*!*/>();
+ HashSet<Block/*!*/>/*!*/ keep_at_all = new HashSet<Block/*!*/>();
+
+ // async interface
+ private Checker checker;
+ private int splitNo;
+ internal ErrorReporter reporter;
+
+ public Split(List<Block/*!*/>/*!*/ blocks, Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins, VCGen/*!*/ par, Implementation/*!*/ impl) {
+ Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Requires(gotoCmdOrigins != null);
+ Contract.Requires(par != null);
+ Contract.Requires(impl != null);
+ this.blocks = blocks;
+ this.gotoCmdOrigins = gotoCmdOrigins;
+ this.parent = par;
+ this.impl = impl;
+ this.id = Interlocked.Increment(ref current_id);
+ }
+
+ public double Cost {
+ get {
+ ComputeBestSplit();
+ return total_cost;
+ }
+ }
+
+ public bool LastChance {
+ get {
+ ComputeBestSplit();
+ return assertion_count == 1 && score < 0;
+ }
+ }
+
+ public string Stats {
+ get {
+ ComputeBestSplit();
+ return string.Format("(cost:{0:0}/{1:0}{2})", total_cost, assertion_cost, LastChance ? " last" : "");
+ }
+ }
+
+ public void DumpDot(int no) {
+ using (System.IO.StreamWriter sw = System.IO.File.CreateText(string.Format("split.{0}.dot", no))) {
+ sw.WriteLine("digraph G {");
+
+ ComputeBestSplit();
+ List<Block> saved = assumized_branches;
+ Contract.Assert(saved != null);
+ assumized_branches = new List<Block>();
+ DoComputeScore(false);
+ assumized_branches = saved;
+
+ foreach (Block b in big_blocks) {
+ Contract.Assert(b != null);
+ BlockStats s = GetBlockStats(b);
+ foreach (Block t in s.virtual_successors) {
+ Contract.Assert(t != null);
+ sw.WriteLine("n{0} -> n{1};", s.id, GetBlockStats(t).id);
+ }
+ sw.WriteLine("n{0} [label=\"{1}:\\n({2:0.0}+{3:0.0})*{4:0.0}\"{5}];",
+ s.id, b.Label,
+ s.assertion_cost, s.assumption_cost, s.incomming_paths,
+ s.assertion_cost > 0 ? ",shape=box" : "");
+
+ }
+ sw.WriteLine("}");
+ sw.Close();
+ }
+
+ string filename = string.Format("split.{0}.bpl", no);
+ using (System.IO.StreamWriter sw = System.IO.File.CreateText(filename)) {
+ int oldPrintUnstructured = CommandLineOptions.Clo.PrintUnstructured;
+ CommandLineOptions.Clo.PrintUnstructured = 2; // print only the unstructured program
+ bool oldPrintDesugaringSetting = CommandLineOptions.Clo.PrintDesugarings;
+ CommandLineOptions.Clo.PrintDesugarings = false;
+ List<Block> backup = impl.Blocks;
+ Contract.Assert(backup != null);
+ impl.Blocks = blocks;
+ impl.Emit(new TokenTextWriter(filename, sw, /*setTokens=*/ false, /*pretty=*/ false), 0);
+ impl.Blocks = backup;
+ CommandLineOptions.Clo.PrintDesugarings = oldPrintDesugaringSetting;
+ CommandLineOptions.Clo.PrintUnstructured = oldPrintUnstructured;
+ }
+ }
+
+ int bsid;
+ BlockStats GetBlockStats(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<BlockStats>() != null);
+
+ BlockStats s;
+ if (!stats.TryGetValue(b, out s)) {
+ s = new BlockStats(b, bsid++);
+ stats[b] = s;
+ }
+ return cce.NonNull(s);
+ }
+
+ double AssertionCost(PredicateCmd c) {
+ return 1.0;
+ }
+
+ void CountAssertions(Block b) {
+ Contract.Requires(b != null);
+ BlockStats s = GetBlockStats(b);
+ if (s.assertion_cost >= 0)
+ return; // already done
+ s.big_block = true;
+ s.assertion_cost = 0;
+ s.assumption_cost = 0;
+ foreach (Cmd c in b.Cmds) {
+ if (c is AssertCmd) {
+ double cost = AssertionCost((AssertCmd)c);
+ s.assertion_cost += cost;
+ assertion_count++;
+ assertion_cost += cost;
+ } else if (c is AssumeCmd) {
+ s.assumption_cost += AssertionCost((AssumeCmd)c);
+ }
+ }
+ foreach (Block c in Exits(b)) {
+ Contract.Assert(c != null);
+ s.virtual_successors.Add(c);
+ }
+ if (s.virtual_successors.Count == 1) {
+ Block next = s.virtual_successors[0];
+ BlockStats se = GetBlockStats(next);
+ CountAssertions(next);
+ if (next.Predecessors.Count > 1 || se.virtual_successors.Count != 1)
+ return;
+ s.virtual_successors[0] = se.virtual_successors[0];
+ s.assertion_cost += se.assertion_cost;
+ s.assumption_cost += se.assumption_cost;
+ se.big_block = false;
+ }
+ }
+
+ HashSet<Block/*!*/>/*!*/ ComputeReachableNodes(Block/*!*/ b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(cce.NonNull(Contract.Result<HashSet<Block/*!*/>>()));
+ BlockStats s = GetBlockStats(b);
+ if (s.reachable_blocks != null) {
+ return s.reachable_blocks;
+ }
+ HashSet<Block/*!*/> blocks = new HashSet<Block/*!*/>();
+ s.reachable_blocks = blocks;
+ blocks.Add(b);
+ foreach (Block/*!*/ succ in Exits(b)) {
+ Contract.Assert(succ != null);
+ foreach (Block r in ComputeReachableNodes(succ)) {
+ Contract.Assert(r != null);
+ blocks.Add(r);
+ }
+ }
+ return blocks;
+ }
+
+ double ProverCost(double vc_cost) {
+ return vc_cost * vc_cost;
+ }
+
+ void ComputeBestSplit() {
+ if (score_computed)
+ return;
+ score_computed = true;
+
+ assertion_count = 0;
+
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ CountAssertions(b);
+ }
+
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ BlockStats bs = GetBlockStats(b);
+ if (bs.big_block) {
+ big_blocks.Add(b);
+ foreach (Block ch in bs.virtual_successors) {
+ Contract.Assert(ch != null);
+ BlockStats chs = GetBlockStats(ch);
+ if (!chs.big_block) {
+ Console.WriteLine("non-big {0} accessed from {1}", ch, b);
+ DumpDot(-1);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ chs.virtual_predecesors.Add(b);
+ }
+ }
+ }
+
+ assumized_branches.Clear();
+ total_cost = ProverCost(DoComputeScore(false));
+
+ score = double.PositiveInfinity;
+ Block best_split = null;
+ List<Block> saved_branches = new List<Block>();
+
+ foreach (Block b in big_blocks) {
+ Contract.Assert(b != null);
+ GotoCmd gt = b.TransferCmd as GotoCmd;
+ if (gt == null)
+ continue;
+ List<Block> targ = cce.NonNull(gt.labelTargets);
+ if (targ.Count < 2)
+ continue;
+ // caution, we only consider two first exits
+
+ double left0, right0, left1, right1;
+ split_block = b;
+
+ assumized_branches.Clear();
+ assumized_branches.Add(cce.NonNull(targ[0]));
+ left0 = DoComputeScore(true);
+ right0 = DoComputeScore(false);
+
+ assumized_branches.Clear();
+ for (int idx = 1; idx < targ.Count; idx++) {
+ assumized_branches.Add(cce.NonNull(targ[idx]));
+ }
+ left1 = DoComputeScore(true);
+ right1 = DoComputeScore(false);
+
+ double current_score = ProverCost(left1) + ProverCost(right1);
+ double other_score = ProverCost(left0) + ProverCost(right0);
+
+ if (other_score < current_score) {
+ current_score = other_score;
+ assumized_branches.Clear();
+ assumized_branches.Add(cce.NonNull(targ[0]));
+ }
+
+ if (current_score < score) {
+ score = current_score;
+ best_split = split_block;
+ saved_branches.Clear();
+ saved_branches.AddRange(assumized_branches);
+ }
+ }
+
+ if (CommandLineOptions.Clo.VcsPathSplitMult * score > total_cost) {
+ split_block = null;
+ score = -1;
+ } else {
+ assumized_branches = saved_branches;
+ split_block = best_split;
+ }
+ }
+
+ void UpdateIncommingPaths(BlockStats s) {
+ Contract.Requires(s != null);
+ if (s.incomming_paths < 0.0) {
+ int count = 0;
+ s.incomming_paths = 0.0;
+ if (!keep_at_all.Contains(s.block))
+ return;
+ foreach (Block b in s.virtual_predecesors) {
+ Contract.Assert(b != null);
+ BlockStats ch = GetBlockStats(b);
+ Contract.Assert(ch != null);
+ UpdateIncommingPaths(ch);
+ if (ch.incomming_paths > 0.0) {
+ s.incomming_paths += ch.incomming_paths;
+ count++;
+ }
+ }
+ if (count > 1) {
+ s.incomming_paths *= CommandLineOptions.Clo.VcsPathJoinMult;
+ }
+ }
+ }
+
+ void ComputeBlockSetsHelper(Block b, bool allow_small) {
+ Contract.Requires(b != null);
+ if (keep_at_all.Contains(b))
+ return;
+ keep_at_all.Add(b);
+
+ if (allow_small) {
+ foreach (Block ch in Exits(b)) {
+ Contract.Assert(ch != null);
+ if (b == split_block && assumized_branches.Contains(ch))
+ continue;
+ ComputeBlockSetsHelper(ch, allow_small);
+ }
+ } else {
+ foreach (Block ch in GetBlockStats(b).virtual_successors) {
+ Contract.Assert(ch != null);
+ if (b == split_block && assumized_branches.Contains(ch))
+ continue;
+ ComputeBlockSetsHelper(ch, allow_small);
+ }
+ }
+ }
+
+ void ComputeBlockSets(bool allow_small) {
+ protected_from_assert_to_assume.Clear();
+ keep_at_all.Clear();
+
+ Debug.Assert(split_block == null || GetBlockStats(split_block).big_block);
+ Debug.Assert(GetBlockStats(blocks[0]).big_block);
+
+ if (assert_to_assume) {
+ foreach (Block b in allow_small ? blocks : big_blocks) {
+ Contract.Assert(b != null);
+ if (ComputeReachableNodes(b).Contains(cce.NonNull(split_block))) {
+ keep_at_all.Add(b);
+ }
+ }
+
+ foreach (Block b in assumized_branches) {
+ Contract.Assert(b != null);
+ foreach (Block r in ComputeReachableNodes(b)) {
+ Contract.Assert(r != null);
+ if (allow_small || GetBlockStats(r).big_block) {
+ keep_at_all.Add(r);
+ protected_from_assert_to_assume.Add(r);
+ }
+ }
+ }
+ } else {
+ ComputeBlockSetsHelper(blocks[0], allow_small);
+ }
+ }
+
+ bool ShouldAssumize(Block b) {
+ Contract.Requires(b != null);
+ return assert_to_assume && !protected_from_assert_to_assume.Contains(b);
+ }
+
+ double DoComputeScore(bool aa) {
+ assert_to_assume = aa;
+ ComputeBlockSets(false);
+
+ foreach (Block b in big_blocks) {
+ Contract.Assert(b != null);
+ GetBlockStats(b).incomming_paths = -1.0;
+ }
+
+ GetBlockStats(blocks[0]).incomming_paths = 1.0;
+
+ double cost = 0.0;
+ foreach (Block b in big_blocks) {
+ Contract.Assert(b != null);
+ if (keep_at_all.Contains(b)) {
+ BlockStats s = GetBlockStats(b);
+ UpdateIncommingPaths(s);
+ double local = s.assertion_cost;
+ if (ShouldAssumize(b)) {
+ local = (s.assertion_cost + s.assumption_cost) * CommandLineOptions.Clo.VcsAssumeMult;
+ } else {
+ local = s.assumption_cost * CommandLineOptions.Clo.VcsAssumeMult + s.assertion_cost;
+ }
+ local = local + local * s.incomming_paths * CommandLineOptions.Clo.VcsPathCostMult;
+ cost += local;
+ }
+ }
+
+ return cost;
+ }
+
+ List<Cmd> SliceCmds(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<List<Cmd>>() != null);
+
+ List<Cmd> seq = b.Cmds;
+ Contract.Assert(seq != null);
+ if (!doing_slice && !ShouldAssumize(b))
+ return seq;
+ List<Cmd> res = new List<Cmd>();
+ foreach (Cmd c in seq) {
+ Contract.Assert(c != null);
+ AssertCmd a = c as AssertCmd;
+ Cmd the_new = c;
+ bool swap = false;
+ if (a != null) {
+ if (doing_slice) {
+ double cost = AssertionCost(a);
+ bool first = (slice_limit - cost) >= 0 || slice_initial_limit == slice_limit;
+ slice_limit -= cost;
+ swap = slice_pos == first;
+ } else if (assert_to_assume) {
+ swap = true;
+ } else {
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+
+ if (swap) {
+ the_new = AssertTurnedIntoAssume(a);
+ }
+ }
+ res.Add(the_new);
+ }
+ return res;
+ }
+
+ Block CloneBlock(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<Block>() != null);
+
+ Block res;
+ if (copies.TryGetValue(b, out res)) {
+ return cce.NonNull(res);
+ }
+ res = new Block(b.tok, b.Label, SliceCmds(b), b.TransferCmd);
+ GotoCmd gt = b.TransferCmd as GotoCmd;
+ copies[b] = res;
+ if (gt != null) {
+ GotoCmd newGoto = new GotoCmd(gt.tok, new List<String>(), new List<Block>());
+ res.TransferCmd = newGoto;
+ int pos = 0;
+ foreach (Block ch in cce.NonNull(gt.labelTargets)) {
+ Contract.Assert(ch != null);
+ Contract.Assert(doing_slice ||
+ (assert_to_assume || (keep_at_all.Contains(ch) || assumized_branches.Contains(ch))));
+ if (doing_slice ||
+ ((b != split_block || assumized_branches.Contains(ch) == assert_to_assume) &&
+ keep_at_all.Contains(ch))) {
+ newGoto.AddTarget(CloneBlock(ch));
+ }
+ pos++;
+ }
+ }
+ return res;
+ }
+
+ Split DoSplit() {
+ Contract.Ensures(Contract.Result<Split>() != null);
+
+ copies.Clear();
+ CloneBlock(blocks[0]);
+ List<Block> newBlocks = new List<Block>();
+ Dictionary<TransferCmd, ReturnCmd> newGotoCmdOrigins = new Dictionary<TransferCmd, ReturnCmd>();
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ Block tmp;
+ if (copies.TryGetValue(b, out tmp)) {
+ newBlocks.Add(cce.NonNull(tmp));
+ if (gotoCmdOrigins.ContainsKey(b.TransferCmd)) {
+ newGotoCmdOrigins[tmp.TransferCmd] = gotoCmdOrigins[b.TransferCmd];
+ }
+
+ foreach (Block p in b.Predecessors) {
+ Contract.Assert(p != null);
+ Block tmp2;
+ if (copies.TryGetValue(p, out tmp2)) {
+ tmp.Predecessors.Add(tmp2);
+ }
+ }
+ }
+ }
+
+ return new Split(newBlocks, newGotoCmdOrigins, parent, impl);
+ }
+
+ Split SplitAt(int idx) {
+ Contract.Ensures(Contract.Result<Split>() != null);
+
+ assert_to_assume = idx == 0;
+ doing_slice = false;
+ ComputeBlockSets(true);
+
+ return DoSplit();
+ }
+
+ Split SliceAsserts(double limit, bool pos) {
+ Contract.Ensures(Contract.Result<Split>() != null);
+
+ slice_pos = pos;
+ slice_limit = limit;
+ slice_initial_limit = limit;
+ doing_slice = true;
+ Split r = DoSplit();
+ /*
+ Console.WriteLine("split {0} / {1} -->", limit, pos);
+ List<Block!> tmp = impl.Blocks;
+ impl.Blocks = r.blocks;
+ EmitImpl(impl, false);
+ impl.Blocks = tmp;
+ */
+
+ return r;
+ }
+
+ void Print() {
+ List<Block> tmp = impl.Blocks;
+ Contract.Assert(tmp != null);
+ impl.Blocks = blocks;
+ EmitImpl(impl, false);
+ impl.Blocks = tmp;
+ }
+
+ public Counterexample ToCounterexample(ProverContext context) {
+ Contract.Requires(context != null);
+ Contract.Ensures(Contract.Result<Counterexample>() != null);
+
+ List<Block> trace = new List<Block>();
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ trace.Add(b);
+ }
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ foreach (Cmd c in b.Cmds) {
+ Contract.Assert(c != null);
+ if (c is AssertCmd) {
+ return AssertCmdToCounterexample((AssertCmd)c, cce.NonNull(b.TransferCmd), trace, null, null, context);
+ }
+ }
+ }
+ Contract.Assume(false);
+ throw new cce.UnreachableException();
+ }
+
+ /// <summary>
+ /// Starting from the 0-index "split_here" annotation in begin, verifies until it reaches a subsequent "split_here" annotation
+ /// Returns a list of blocks where all code not verified has asserts converted into assumes
+ /// </summary>
+ /// <param name="blocks">Implementation's collection of blocks</param>
+ /// <param name="begin">Block containing the first split_here from which to start verifying</param>
+ /// <param name="begin_split_id">0-based ID of the "split_here" annotation within begin at which to start verifying</param>
+ /// <param name="blockInternalSplit">True if the entire split is contained within block begin</param>
+ /// <param name="endPoints">Set of all blocks containing a "split_here" annotation</param>
+ /// <returns></returns>
+ // Note: Current implementation may over report errors.
+ // For example, if the control flow graph is a diamond (e.g., A -> B, C, B->D, C->D),
+ // and there is a split in B and an error in D, then D will be verified twice and hence report the error twice.
+ // Best solution may be to memoize blocks that have been fully verified and be sure not to verify them again
+ private static List<Block> DoManualSplit(List<Block> blocks, Block begin, int begin_split_id, bool blockInternalSplit, IEnumerable<Block> endPoints) {
+ // Compute the set of blocks reachable from begin but not included in endPoints. These will be verified in their entirety.
+ var blocksToVerifyEntirely = new HashSet<Block>();
+ var reachableEndPoints = new HashSet<Block>(); // Reachable end points will be verified up to their first split point
+ var todo = new Stack<Block>();
+ todo.Push(begin);
+ while (todo.Count > 0) {
+ var currentBlock = todo.Pop();
+ if (blocksToVerifyEntirely.Contains(currentBlock)) continue;
+ blocksToVerifyEntirely.Add(currentBlock);
+ var exit = currentBlock.TransferCmd as GotoCmd;
+ if (exit != null)
+ foreach (Block targetBlock in exit.labelTargets) {
+ if (!endPoints.Contains(targetBlock)) {
+ todo.Push(targetBlock);
+ } else {
+ reachableEndPoints.Add(targetBlock);
+ }
+ }
+
+ }
+ blocksToVerifyEntirely.Remove(begin);
+
+ // Convert assumes to asserts in "unreachable" blocks, including portions of blocks containing "split_here"
+ var newBlocks = new List<Block>(blocks.Count()); // Copies of the original blocks
+ var duplicator = new Duplicator();
+ var oldToNewBlockMap = new Dictionary<Block, Block>(blocks.Count()); // Maps original blocks to their new copies in newBlocks
+
+ foreach (var currentBlock in blocks) {
+ var newBlock = (Block)duplicator.VisitBlock(currentBlock);
+ oldToNewBlockMap[currentBlock] = newBlock;
+ newBlocks.Add(newBlock);
+
+ if (!blockInternalSplit && blocksToVerifyEntirely.Contains(currentBlock)) continue; // All reachable blocks must be checked in their entirety, so don't change anything
+ // Otherwise, we only verify a portion of the current block, so we'll need to look at each of its commands
+
+ // !verify -> convert assert to assume
+ var verify = (currentBlock == begin && begin_split_id == -1) // -1 tells us to start verifying from the very beginning (i.e., there is no split in the begin block)
+ || (reachableEndPoints.Contains(currentBlock) // This endpoint is reachable from begin, so we verify until we hit the first split point
+ && !blockInternalSplit); // Don't bother verifying if all of the splitting is within the begin block
+ var newCmds = new List<Cmd>();
+ var split_here_count = 0;
+
+ foreach (Cmd c in currentBlock.Cmds) {
+ var p = c as PredicateCmd;
+ if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "split_here")) {
+ if (currentBlock == begin) { // Verify everything between the begin_split_id we were given and the next split
+ if (split_here_count == begin_split_id) {
+ verify = true;
+ } else if (split_here_count == begin_split_id + 1) {
+ verify = false;
+ }
+ } else { // We're in an endPoint so we stop verifying as soon as we hit a "split_here"
+ verify = false;
+ }
+ split_here_count++;
+ }
+
+ var asrt = c as AssertCmd;
+ if (verify || asrt == null)
+ newCmds.Add(c);
+ else
+ newCmds.Add(AssertTurnedIntoAssume(asrt));
+ }
+
+ newBlock.Cmds = newCmds;
+ }
+
+ // Patch the edges between the new blocks
+ foreach (var oldBlock in blocks) {
+ if (oldBlock.TransferCmd is ReturnCmd) { continue; }
+ var gotoCmd = (GotoCmd)oldBlock.TransferCmd;
+ var newLabelTargets = new List<Block>(gotoCmd.labelTargets.Count());
+ var newLabelNames = new List<string>(gotoCmd.labelTargets.Count());
+ foreach (var target in gotoCmd.labelTargets) {
+ newLabelTargets.Add(oldToNewBlockMap[target]);
+ newLabelNames.Add(oldToNewBlockMap[target].Label);
+ }
+ oldToNewBlockMap[oldBlock].TransferCmd = new GotoCmd(gotoCmd.tok, newLabelNames, newLabelTargets);
+ }
+
+ return newBlocks;
+ }
+
+ public static List<Split/*!*/> FindManualSplits(Implementation/*!*/ impl, Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins, VCGen/*!*/ par) {
+ Contract.Requires(impl != null);
+ Contract.Ensures(Contract.Result<List<Split>>() == null || cce.NonNullElements(Contract.Result<List<Split>>()));
+
+ var splitPoints = new Dictionary<Block,int>();
+ foreach (var b in impl.Blocks) {
+ foreach (Cmd c in b.Cmds) {
+ var p = c as PredicateCmd;
+ if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "split_here")) {
+ int count;
+ splitPoints.TryGetValue(b, out count);
+ splitPoints[b] = count + 1;
+ }
+ }
+ }
+
+ if (splitPoints.Count() == 0) { // No manual split points here
+ return null;
+ }
+
+ List<Split> splits = new List<Split>();
+ Block entryPoint = impl.Blocks[0];
+ var newEntryBlocks = DoManualSplit(impl.Blocks, entryPoint, -1, splitPoints.Keys.Contains(entryPoint), splitPoints.Keys);
+ splits.Add(new Split(newEntryBlocks, gotoCmdOrigins, par, impl)); // REVIEW: Does gotoCmdOrigins need to be changed at all?
+
+ foreach (KeyValuePair<Block,int> pair in splitPoints) {
+ for (int i = 0; i < pair.Value; i++) {
+ bool blockInternalSplit = i < pair.Value - 1; // There's at least one more split, after this one, in the current block
+ var newBlocks = DoManualSplit(impl.Blocks, pair.Key, i, blockInternalSplit, splitPoints.Keys);
+ Split s = new Split(newBlocks, gotoCmdOrigins, par, impl); // REVIEW: Does gotoCmdOrigins need to be changed at all?
+ splits.Add(s);
+ }
+ }
+
+ return splits;
+ }
+
+ public static List<Split/*!*/>/*!*/ DoSplit(Split initial, double max_cost, int max) {
+ Contract.Requires(initial != null);
+ Contract.Ensures(cce.NonNullElements(Contract.Result<List<Split>>()));
+
+ List<Split> res = new List<Split>();
+ res.Add(initial);
+
+ while (res.Count < max) {
+ Split best = null;
+ int best_idx = 0, pos = 0;
+ foreach (Split s in res) {
+ Contract.Assert(s != null);
+ s.ComputeBestSplit(); // TODO check total_cost first
+ if (s.total_cost > max_cost &&
+ (best == null || best.total_cost < s.total_cost) &&
+ (s.assertion_count > 1 || s.split_block != null)) {
+ best = s;
+ best_idx = pos;
+ }
+ pos++;
+ }
+
+ if (best == null)
+ break; // no split found
+
+ Split s0, s1;
+
+ bool split_stats = CommandLineOptions.Clo.TraceVerify;
+
+ if (split_stats) {
+ Console.WriteLine("{0} {1} -->", best.split_block == null ? "SLICE" : ("SPLIT@" + best.split_block.Label), best.Stats);
+ if (best.split_block != null) {
+ GotoCmd g = best.split_block.TransferCmd as GotoCmd;
+ if (g != null) {
+ Console.Write(" exits: ");
+ foreach (Block b in cce.NonNull(g.labelTargets)) {
+ Contract.Assert(b != null);
+ Console.Write("{0} ", b.Label);
+ }
+ Console.WriteLine("");
+ Console.Write(" assumized: ");
+ foreach (Block b in best.assumized_branches) {
+ Contract.Assert(b != null);
+ Console.Write("{0} ", b.Label);
+ }
+ Console.WriteLine("");
+ }
+ }
+ }
+
+ if (best.split_block != null) {
+ s0 = best.SplitAt(0);
+ s1 = best.SplitAt(1);
+ } else {
+ best.split_block = null;
+ s0 = best.SliceAsserts(best.assertion_cost / 2, true);
+ s1 = best.SliceAsserts(best.assertion_cost / 2, false);
+ }
+
+ if (true) {
+ List<Block> ss = new List<Block>();
+ ss.Add(s0.blocks[0]);
+ ss.Add(s1.blocks[0]);
+ try {
+ best.SoundnessCheck(new HashSet<List<Block>>(new BlockListComparer()), best.blocks[0], ss);
+ } catch (System.Exception e) {
+ Console.WriteLine(e);
+ best.DumpDot(-1);
+ s0.DumpDot(-2);
+ s1.DumpDot(-3);
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ if (split_stats) {
+ s0.ComputeBestSplit();
+ s1.ComputeBestSplit();
+ Console.WriteLine(" --> {0}", s0.Stats);
+ Console.WriteLine(" --> {0}", s1.Stats);
+ }
+
+ if (CommandLineOptions.Clo.TraceVerify) {
+ best.Print();
+ }
+
+ res[best_idx] = s0;
+ res.Add(s1);
+ }
+
+ return res;
+ }
+
+ class BlockListComparer : IEqualityComparer<List<Block>>
+ {
+ public bool Equals(List<Block> x, List<Block> y)
+ {
+ return x == y || x.SequenceEqual(y);
+ }
+
+ public int GetHashCode(List<Block> obj)
+ {
+ int h = 0;
+ Contract.Assume(obj != null);
+ foreach (var b in obj)
+ {
+ if (b != null)
+ {
+ h += b.GetHashCode();
+ }
+ }
+ return h;
+ }
+ }
+
+ public Checker Checker {
+ get {
+ Contract.Ensures(Contract.Result<Checker>() != null);
+
+ Contract.Assert(checker != null);
+ return checker;
+ }
+ }
+
+ public Task ProverTask {
+ get {
+ Contract.Assert(checker != null);
+ return checker.ProverTask;
+ }
+ }
+
+ public void ReadOutcome(ref Outcome cur_outcome, out bool prover_failed) {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+ ProverInterface.Outcome outcome = cce.NonNull(checker).ReadOutcome();
+
+ if (CommandLineOptions.Clo.Trace && splitNo >= 0) {
+ System.Console.WriteLine(" --> split #{0} done, [{1} s] {2}", splitNo, checker.ProverRunTime.TotalSeconds, outcome);
+ }
+
+ if (CommandLineOptions.Clo.VcsDumpSplits) {
+ DumpDot(splitNo);
+ }
+
+ prover_failed = false;
+
+ switch (outcome) {
+ case ProverInterface.Outcome.Valid:
+ return;
+ case ProverInterface.Outcome.Invalid:
+ cur_outcome = Outcome.Errors;
+ return;
+ case ProverInterface.Outcome.OutOfMemory:
+ prover_failed = true;
+ if (cur_outcome != Outcome.Errors && cur_outcome != Outcome.Inconclusive)
+ cur_outcome = Outcome.OutOfMemory;
+ return;
+ case ProverInterface.Outcome.TimeOut:
+ prover_failed = true;
+ if (cur_outcome != Outcome.Errors && cur_outcome != Outcome.Inconclusive)
+ cur_outcome = Outcome.TimedOut;
+ return;
+ case ProverInterface.Outcome.Undetermined:
+ if (cur_outcome != Outcome.Errors)
+ cur_outcome = Outcome.Inconclusive;
+ return;
+ default:
+ Contract.Assert(false);
+ throw new cce.UnreachableException();
+ }
+ }
+
+ /// <summary>
+ /// As a side effect, updates "this.parent.CumulativeAssertionCount".
+ /// </summary>
+ public void BeginCheck(Checker checker, VerifierCallback callback, ModelViewInfo mvInfo, int no, int timeout)
+ {
+ Contract.Requires(checker != null);
+ Contract.Requires(callback != null);
+
+ splitNo = no;
+
+ impl.Blocks = blocks;
+
+ this.checker = checker;
+
+ Dictionary<int, Absy> label2absy = new Dictionary<int, Absy>();
+
+ ProverContext ctx = checker.TheoremProver.Context;
+ Boogie2VCExprTranslator bet = ctx.BoogieExprTranslator;
+ CodeExprConversionClosure cc = new CodeExprConversionClosure(label2absy, ctx);
+ bet.SetCodeExprConverter(cc.CodeExprToVerificationCondition);
+
+ var exprGen = ctx.ExprGen;
+ VCExpr controlFlowVariableExpr = CommandLineOptions.Clo.UseLabels ? null : exprGen.Integer(BigNum.ZERO);
+
+ VCExpr vc = parent.GenerateVCAux(impl, controlFlowVariableExpr, label2absy, checker.TheoremProver.Context);
+ Contract.Assert(vc != null);
+
+ if (!CommandLineOptions.Clo.UseLabels)
+ {
+ VCExpr controlFlowFunctionAppl = exprGen.ControlFlowFunctionApplication(exprGen.Integer(BigNum.ZERO), exprGen.Integer(BigNum.ZERO));
+ VCExpr eqExpr = exprGen.Eq(controlFlowFunctionAppl, exprGen.Integer(BigNum.FromInt(impl.Blocks[0].UniqueId)));
+ vc = exprGen.Implies(eqExpr, vc);
+ }
+
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Local)
+ {
+ reporter = new ErrorReporterLocal(gotoCmdOrigins, label2absy, impl.Blocks, parent.incarnationOriginMap, callback, mvInfo, cce.NonNull(this.Checker.TheoremProver.Context), parent.program);
+ }
+ else
+ {
+ reporter = new ErrorReporter(gotoCmdOrigins, label2absy, impl.Blocks, parent.incarnationOriginMap, callback, mvInfo, this.Checker.TheoremProver.Context, parent.program);
+ }
+
+ if (CommandLineOptions.Clo.TraceVerify && no >= 0)
+ {
+ Console.WriteLine("-- after split #{0}", no);
+ Print();
+ }
+
+ string desc = cce.NonNull(impl.Name);
+ if (no >= 0)
+ desc += "_split" + no;
+ checker.BeginCheck(desc, vc, reporter);
+ }
+
+ private void SoundnessCheck(HashSet<List<Block>/*!*/>/*!*/ cache, Block/*!*/ orig, List<Block/*!*/>/*!*/ copies) {
+ Contract.Requires(cce.NonNull(cache));
+ Contract.Requires(orig != null);
+ Contract.Requires(copies != null);
+ {
+ var t = new List<Block> { orig };
+ foreach (Block b in copies) {
+ Contract.Assert(b != null);
+ t.Add(b);
+ }
+ if (cache.Contains(t)) {
+ return;
+ }
+ cache.Add(t);
+ }
+
+ for (int i = 0; i < orig.Cmds.Count; ++i) {
+ Cmd cmd = orig.Cmds[i];
+ if (cmd is AssertCmd) {
+ int found = 0;
+ foreach (Block c in copies) {
+ Contract.Assert(c != null);
+ if (c.Cmds[i] == cmd) {
+ found++;
+ }
+ }
+ if (found == 0) {
+ throw new System.Exception(string.Format("missing assertion: {0}({1})", cmd.tok.filename, cmd.tok.line));
+ }
+ }
+ }
+
+ foreach (Block exit in Exits(orig)) {
+ Contract.Assert(exit != null);
+ List<Block> newcopies = new List<Block>();
+ foreach (Block c in copies) {
+ foreach (Block cexit in Exits(c)) {
+ Contract.Assert(cexit != null);
+ if (cexit.Label == exit.Label) {
+ newcopies.Add(cexit);
+ }
+ }
+ }
+ if (newcopies.Count == 0) {
+ throw new System.Exception("missing exit " + exit.Label);
+ }
+ SoundnessCheck(cache, exit, newcopies);
+ }
+ }
+ }
+ #endregion
+
+
+ public class CodeExprConversionClosure
+ {
+ Dictionary<int, Absy> label2absy;
+ ProverContext ctx;
+ public CodeExprConversionClosure(Dictionary<int, Absy> label2absy, ProverContext ctx)
+ {
+ this.label2absy = label2absy;
+ this.ctx = ctx;
+ }
+
+ public VCExpr CodeExprToVerificationCondition(CodeExpr codeExpr, Hashtable blockVariables, List<VCExprLetBinding> bindings, bool isPositiveContext)
+ {
+ VCGen vcgen = new VCGen(new Program(), null, false, new List<Checker>());
+ vcgen.variable2SequenceNumber = new Dictionary<Variable, int>();
+ vcgen.incarnationOriginMap = new Dictionary<Incarnation, Absy>();
+ vcgen.CurrentLocalVariables = codeExpr.LocVars;
+
+ ResetPredecessors(codeExpr.Blocks);
+ vcgen.AddBlocksBetween(codeExpr.Blocks);
+ Dictionary<Variable, Expr> gotoCmdOrigins = vcgen.ConvertBlocks2PassiveCmd(codeExpr.Blocks, new List<IdentifierExpr>(), new ModelViewInfo(codeExpr));
+ int ac; // computed, but then ignored for this CodeExpr
+ VCExpr startCorrect = VCGen.LetVCIterative(codeExpr.Blocks, null, label2absy, ctx, out ac, isPositiveContext);
+ VCExpr vce = ctx.ExprGen.Let(bindings, startCorrect);
+ if (vcgen.CurrentLocalVariables.Count != 0)
+ {
+ Boogie2VCExprTranslator translator = ctx.BoogieExprTranslator;
+ List<VCExprVar> boundVars = new List<VCExprVar>();
+ foreach (Variable v in vcgen.CurrentLocalVariables)
+ {
+ Contract.Assert(v != null);
+ VCExprVar ev = translator.LookupVariable(v);
+ Contract.Assert(ev != null);
+ boundVars.Add(ev);
+ if (v.TypedIdent.Type.Equals(Bpl.Type.Bool))
+ {
+ // add an antecedent (tickleBool ev) to help the prover find a possible trigger
+ vce = ctx.ExprGen.Implies(ctx.ExprGen.Function(VCExpressionGenerator.TickleBoolOp, ev), vce);
+ }
+ }
+ vce = ctx.ExprGen.Forall(boundVars, new List<VCTrigger>(), vce);
+ }
+ if (isPositiveContext)
+ {
+ vce = ctx.ExprGen.Not(vce);
+ }
+ return vce;
+ }
+ }
+
+ public VCExpr GenerateVC(Implementation/*!*/ impl, VCExpr controlFlowVariableExpr, out Dictionary<int, Absy>/*!*/ label2absy, ProverContext proverContext, IList<VCExprVar> namedAssumeVars = null)
+ {
+ Contract.Requires(impl != null);
+ Contract.Requires(proverContext != null);
+ Contract.Ensures(Contract.ValueAtReturn(out label2absy) != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ label2absy = new Dictionary<int, Absy>();
+ return GenerateVCAux(impl, controlFlowVariableExpr, label2absy, proverContext, namedAssumeVars: namedAssumeVars);
+ }
+
+ public VCExpr GenerateVCAux(Implementation/*!*/ impl, VCExpr controlFlowVariableExpr, Dictionary<int, Absy>/*!*/ label2absy, ProverContext proverContext, IList<VCExprVar> namedAssumeVars = null) {
+ Contract.Requires(impl != null);
+ Contract.Requires(proverContext != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ TypecheckingContext tc = new TypecheckingContext(null);
+ impl.Typecheck(tc);
+
+ VCExpr vc;
+ int assertionCount;
+ switch (CommandLineOptions.Clo.vcVariety) {
+ case CommandLineOptions.VCVariety.Structured:
+ vc = VCViaStructuredProgram(impl, label2absy, proverContext, out assertionCount);
+ break;
+ case CommandLineOptions.VCVariety.Block:
+ vc = FlatBlockVC(impl, label2absy, false, false, false, proverContext, out assertionCount);
+ break;
+ case CommandLineOptions.VCVariety.BlockReach:
+ vc = FlatBlockVC(impl, label2absy, false, true, false, proverContext, out assertionCount);
+ break;
+ case CommandLineOptions.VCVariety.Local:
+ vc = FlatBlockVC(impl, label2absy, true, false, false, proverContext, out assertionCount);
+ break;
+ case CommandLineOptions.VCVariety.BlockNested:
+ vc = NestedBlockVC(impl, label2absy, false, proverContext, out assertionCount);
+ break;
+ case CommandLineOptions.VCVariety.BlockNestedReach:
+ vc = NestedBlockVC(impl, label2absy, true, proverContext, out assertionCount);
+ break;
+ case CommandLineOptions.VCVariety.Dag:
+ if (cce.NonNull(CommandLineOptions.Clo.TheProverFactory).SupportsDags || CommandLineOptions.Clo.FixedPointEngine != null) {
+ vc = DagVC(cce.NonNull(impl.Blocks[0]), controlFlowVariableExpr, label2absy, new Hashtable/*<Block, VCExpr!>*/(), proverContext, out assertionCount);
+ } else {
+ vc = LetVC(cce.NonNull(impl.Blocks[0]), controlFlowVariableExpr, label2absy, proverContext, out assertionCount);
+ }
+ break;
+ case CommandLineOptions.VCVariety.DagIterative:
+ vc = LetVCIterative(impl.Blocks, controlFlowVariableExpr, label2absy, proverContext, out assertionCount);
+ break;
+ case CommandLineOptions.VCVariety.Doomed:
+ vc = FlatBlockVC(impl, label2absy, false, false, true, proverContext, out assertionCount);
+ break;
+ default:
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // unexpected enumeration value
+ }
+ CumulativeAssertionCount += assertionCount;
+ return vc;
+ }
+
+ void CheckIntAttributeOnImpl(Implementation impl, string name, ref int val) {
+ Contract.Requires(impl != null);
+ Contract.Requires(name != null);
+ if (!(cce.NonNull(impl.Proc).CheckIntAttribute(name, ref val) || !impl.CheckIntAttribute(name, ref val))) {
+ Console.WriteLine("ignoring ill-formed {:{0} ...} attribute on {1}, parameter should be an int", name, impl.Name);
+ }
+ }
+
+ public override Outcome VerifyImplementation(Implementation/*!*/ impl, VerifierCallback/*!*/ callback) {
+ Contract.EnsuresOnThrow<UnexpectedProverOutputException>(true);
+
+ if (impl.SkipVerification) {
+ return Outcome.Inconclusive; // not sure about this one
+ }
+
+ callback.OnProgress("VCgen", 0, 0, 0.0);
+
+ Stopwatch watch = new Stopwatch();
+ if (_print_time)
+ {
+ Console.WriteLine("Checking function {0}", impl.Name);
+ watch.Reset();
+ watch.Start();
+ }
+
+ ConvertCFG2DAG(impl);
+
+ SmokeTester smoke_tester = null;
+ if (CommandLineOptions.Clo.SoundnessSmokeTest) {
+ smoke_tester = new SmokeTester(this, impl, callback);
+ smoke_tester.Copy();
+ }
+
+ ModelViewInfo mvInfo;
+ var gotoCmdOrigins = PassifyImpl(impl, out mvInfo);
+
+ // If "expand" attribute is supplied, expand any assertion of conjunctions into multiple assertions, one per conjunct
+ foreach (var b in impl.Blocks)
+ {
+ List<Cmd> newCmds = new List<Cmd>();
+ bool changed = false;
+ foreach (var c in b.Cmds)
+ {
+ var a = c as AssertCmd;
+ var ar = c as AssertRequiresCmd;
+ var ae = c as AssertEnsuresCmd;
+ var ai = c as LoopInitAssertCmd;
+ var am = c as LoopInvMaintainedAssertCmd;
+ // TODO:
+ //use Duplicator and Substituter rather than new
+ //nested IToken?
+ //document expand attribute (search for {:ignore}, for example)
+ //fix up new CallCmd, new Requires, new Ensures in CivlRefinement.cs
+ Func<Expr,Expr,Expr> withType = (Expr from, Expr to) =>
+ {
+ NAryExpr nFrom = from as NAryExpr;
+ NAryExpr nTo = to as NAryExpr;
+ to.Type = from.Type;
+ if (nFrom != null && nTo != null) nTo.TypeParameters = nFrom.TypeParameters;
+ return to;
+ };
+
+ Action<int,Expr,Action<Expr>> traverse = null;
+ traverse = (depth, e, act) =>
+ {
+ ForallExpr forall = e as ForallExpr;
+ NAryExpr nary = e as NAryExpr;
+ if (forall != null)
+ {
+ traverse(depth, forall.Body, e1 => act(withType(forall,
+ new ForallExpr(e1.tok, forall.TypeParameters, forall.Dummies, forall.Attributes, forall.Triggers, e1))));
+ return;
+ }
+ if (nary != null)
+ {
+ var args = nary.Args;
+ IAppliable fun = nary.Fun;
+ BinaryOperator bop = fun as BinaryOperator;
+ FunctionCall call = fun as FunctionCall;
+ if (bop != null)
+ {
+ switch (bop.Op)
+ {
+ case BinaryOperator.Opcode.And:
+ traverse(depth, args[0], act);
+ traverse(depth, args[1], act);
+ return;
+ case BinaryOperator.Opcode.Imp:
+ traverse(depth, args[1], e1 => act(withType(nary,
+ new NAryExpr(e1.tok, fun, new List<Expr>() { args[0], e1 }))));
+ return;
+ }
+ }
+ if (depth > 0 && call != null && call.Func != null)
+ {
+ Function cf = call.Func;
+ Expr body = cf.Body;
+ List<Variable> ins = cf.InParams;
+ if (body == null && cf.DefinitionAxiom != null)
+ {
+ ForallExpr all = cf.DefinitionAxiom.Expr as ForallExpr;
+ if (all != null)
+ {
+ NAryExpr def = all.Body as NAryExpr;
+ if (def != null && def.Fun is BinaryOperator && ((BinaryOperator) (def.Fun)).Op == BinaryOperator.Opcode.Iff)
+ {
+ body = def.Args[1];
+ ins = all.Dummies;
+ }
+ }
+ }
+ if (body != null)
+ {
+ Func<Expr,Expr> new_f = e1 =>
+ {
+ Function f = new Function(cf.tok, "expand<" + cf.Name + ">", cf.TypeParameters, ins, cf.OutParams[0], cf.Comment);
+ f.Body = e1;
+ Token tok = new Token(e1.tok.line, e1.tok.col);
+ tok.filename = e.tok.filename + "(" + e.tok.line + "," + e.tok.col + ") --> " + e1.tok.filename;
+ return withType(nary, new NAryExpr(tok, new FunctionCall(f), args));
+ };
+ traverse(depth - 1, body, e1 => act(new_f(e1)));
+ return;
+ }
+ }
+ }
+ act(e);
+ };
+
+ if (a != null)
+ {
+ var attr = a.Attributes;
+ if (ar != null && ar.Requires.Attributes != null) attr = ar.Requires.Attributes;
+ if (ar != null && ar.Call.Attributes != null) attr = ar.Call.Attributes;
+ if (ae != null && ae.Ensures.Attributes != null) attr = ae.Ensures.Attributes;
+ if (QKeyValue.FindExprAttribute(attr, "expand") != null || QKeyValue.FindBoolAttribute(attr, "expand"))
+ {
+ int depth = QKeyValue.FindIntAttribute(attr, "expand", 100);
+ Func<Expr,Expr> fe = e => Expr.Or(a.Expr, e);
+ //traverse(depth, a.Expr, e => System.Console.WriteLine(e.GetType() + " :: " + e + " @ " + e.tok.line + ", " + e.tok.col));
+ traverse(depth, a.Expr, e =>
+ {
+ AssertCmd new_c =
+ (ar != null) ? new AssertRequiresCmd(ar.Call, new Requires(e.tok, ar.Requires.Free, fe(e), ar.Requires.Comment)) :
+ (ae != null) ? new AssertEnsuresCmd(new Ensures(e.tok, ae.Ensures.Free, fe(e), ae.Ensures.Comment)) :
+ (ai != null) ? new LoopInitAssertCmd(e.tok, fe(e)) :
+ (am != null) ? new LoopInvMaintainedAssertCmd(e.tok, fe(e)) :
+ new AssertCmd(e.tok, fe(e));
+ new_c.Attributes = new QKeyValue(e.tok, "subsumption", new List<object>() { new LiteralExpr(e.tok, BigNum.FromInt(0)) }, a.Attributes);
+ newCmds.Add(new_c);
+ });
+ }
+ newCmds.Add(c);
+ changed = true;
+ }
+ else
+ {
+ newCmds.Add(c);
+ }
+ }
+ if (changed) b.Cmds = newCmds;
+ }
+
+ double max_vc_cost = CommandLineOptions.Clo.VcsMaxCost;
+ int tmp_max_vc_cost = -1, max_splits = CommandLineOptions.Clo.VcsMaxSplits,
+ max_kg_splits = CommandLineOptions.Clo.VcsMaxKeepGoingSplits;
+ CheckIntAttributeOnImpl(impl, "vcs_max_cost", ref tmp_max_vc_cost);
+ CheckIntAttributeOnImpl(impl, "vcs_max_splits", ref max_splits);
+ CheckIntAttributeOnImpl(impl, "vcs_max_keep_going_splits", ref max_kg_splits);
+ if (tmp_max_vc_cost >= 0) {
+ max_vc_cost = tmp_max_vc_cost;
+ }
+
+ Outcome outcome = Outcome.Correct;
+
+ // Report all recycled failing assertions for this implementation.
+ if (impl.RecycledFailingAssertions != null && impl.RecycledFailingAssertions.Any())
+ {
+ outcome = Outcome.Errors;
+ foreach (var a in impl.RecycledFailingAssertions)
+ {
+ var checksum = a.Checksum;
+ var oldCex = impl.ErrorChecksumToCachedError[checksum] as Counterexample;
+ if (oldCex != null) {
+ if (CommandLineOptions.Clo.VerifySnapshots < 3) {
+ callback.OnCounterexample(oldCex, null);
+ } else {
+ // If possible, we use the old counterexample, but with the location information of "a"
+ var cex = AssertCmdToCloneCounterexample(a, oldCex);
+ callback.OnCounterexample(cex, null);
+ // OnCounterexample may have had side effects on the RequestId and OriginalRequestId fields. We make
+ // any such updates available in oldCex. (Is this really a good design? --KRML)
+ oldCex.RequestId = cex.RequestId;
+ oldCex.OriginalRequestId = cex.OriginalRequestId;
+ }
+ }
+ }
+ }
+
+ Cores = CommandLineOptions.Clo.VcsCores;
+ Stack<Split> work = new Stack<Split>();
+ List<Split> currently_running = new List<Split>();
+ ResetPredecessors(impl.Blocks);
+ List<Split> manual_splits = Split.FindManualSplits(impl, gotoCmdOrigins, this);
+ if (manual_splits != null) {
+ foreach (var split in manual_splits) {
+ work.Push(split);
+ }
+ } else {
+ work.Push(new Split(impl.Blocks, gotoCmdOrigins, this, impl));
+ }
+
+ bool keep_going = max_kg_splits > 1;
+ int total = 0;
+ int no = max_splits == 1 && !keep_going ? -1 : 0;
+ bool first_round = true;
+ bool do_splitting = keep_going || max_splits > 1;
+ double remaining_cost = 0.0, proven_cost = 0.0;
+
+ if (do_splitting) {
+ remaining_cost = work.Peek().Cost;
+ }
+
+ while (work.Any() || currently_running.Any())
+ {
+ bool prover_failed = false;
+ Split s = null;
+ var isWaiting = !work.Any();
+
+ if (!isWaiting)
+ {
+ s = work.Peek();
+
+ if (first_round && max_splits > 1)
+ {
+ prover_failed = true;
+ remaining_cost -= s.Cost;
+ }
+ else
+ {
+ var timeout = (keep_going && s.LastChance) ? CommandLineOptions.Clo.VcsFinalAssertTimeout :
+ keep_going ? CommandLineOptions.Clo.VcsKeepGoingTimeout :
+ impl.TimeLimit;
+
+ var checker = s.parent.FindCheckerFor(timeout, false);
+ try
+ {
+ if (checker == null)
+ {
+ isWaiting = true;
+ goto waiting;
+ }
+ else
+ {
+ s = work.Pop();
+ }
+
+ if (CommandLineOptions.Clo.Trace && no >= 0)
+ {
+ System.Console.WriteLine(" checking split {1}/{2}, {3:0.00}%, {0} ...",
+ s.Stats, no + 1, total, 100 * proven_cost / (proven_cost + remaining_cost));
+ }
+ callback.OnProgress("VCprove", no < 0 ? 0 : no, total, proven_cost / (remaining_cost + proven_cost));
+
+ Contract.Assert(s.parent == this);
+ lock (checker)
+ {
+ s.BeginCheck(checker, callback, mvInfo, no, timeout);
+ }
+
+ no++;
+
+ currently_running.Add(s);
+ }
+ catch (Exception)
+ {
+ checker.GoBackToIdle();
+ throw;
+ }
+ }
+ }
+
+ waiting:
+ if (isWaiting)
+ {
+ // Wait for one split to terminate.
+ var tasks = currently_running.Select(splt => splt.ProverTask).ToArray();
+
+ if (tasks.Any())
+ {
+ try
+ {
+ int index = Task.WaitAny(tasks);
+ s = currently_running[index];
+ currently_running.RemoveAt(index);
+
+ if (do_splitting)
+ {
+ remaining_cost -= s.Cost;
+ }
+
+ lock (s.Checker)
+ {
+ s.ReadOutcome(ref outcome, out prover_failed);
+ }
+
+ if (do_splitting)
+ {
+ if (prover_failed)
+ {
+ // even if the prover fails, we have learned something, i.e., it is
+ // annoying to watch Boogie say Timeout, 0.00% a couple of times
+ proven_cost += s.Cost / 100;
+ }
+ else
+ {
+ proven_cost += s.Cost;
+ }
+ }
+ callback.OnProgress("VCprove", no < 0 ? 0 : no, total, proven_cost / (remaining_cost + proven_cost));
+
+ if (prover_failed && !first_round && s.LastChance)
+ {
+ string msg = "some timeout";
+ if (s.reporter != null && s.reporter.resourceExceededMessage != null)
+ {
+ msg = s.reporter.resourceExceededMessage;
+ }
+ callback.OnCounterexample(s.ToCounterexample(s.Checker.TheoremProver.Context), msg);
+ outcome = Outcome.Errors;
+ break;
+ }
+ }
+ finally
+ {
+ s.Checker.GoBackToIdle();
+ }
+
+ Contract.Assert(prover_failed || outcome == Outcome.Correct || outcome == Outcome.Errors || outcome == Outcome.Inconclusive);
+ }
+ }
+
+ if (prover_failed)
+ {
+ int splits = first_round && max_splits > 1 ? max_splits : max_kg_splits;
+
+ if (splits > 1)
+ {
+ List<Split> tmp = Split.DoSplit(s, max_vc_cost, splits);
+ Contract.Assert(tmp != null);
+ max_vc_cost = 1.0; // for future
+ first_round = false;
+ //tmp.Sort(new Comparison<Split!>(Split.Compare));
+ foreach (Split a in tmp)
+ {
+ Contract.Assert(a != null);
+ work.Push(a);
+ total++;
+ remaining_cost += a.Cost;
+ }
+ if (outcome != Outcome.Errors)
+ {
+ outcome = Outcome.Correct;
+ }
+ }
+ else
+ {
+ Contract.Assert(outcome != Outcome.Correct);
+ if (outcome == Outcome.TimedOut)
+ {
+ string msg = "some timeout";
+ if (s.reporter != null && s.reporter.resourceExceededMessage != null)
+ {
+ msg = s.reporter.resourceExceededMessage;
+ }
+ callback.OnTimeout(msg);
+ }
+ else if (outcome == Outcome.OutOfMemory)
+ {
+ string msg = "out of memory";
+ if (s.reporter != null && s.reporter.resourceExceededMessage != null)
+ {
+ msg = s.reporter.resourceExceededMessage;
+ }
+ callback.OnOutOfMemory(msg);
+ }
+
+ break;
+ }
+ }
+ }
+
+ if (outcome == Outcome.Correct && smoke_tester != null) {
+ smoke_tester.Test();
+ }
+
+ callback.OnProgress("done", 0, 0, 1.0);
+
+ if (_print_time)
+ {
+ watch.Stop();
+ Console.WriteLine("Total time for this method: {0}", watch.Elapsed.ToString());
+ }
+
+ return outcome;
+ }
+
+ public class ErrorReporter : ProverInterface.ErrorHandler {
+ Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins;
+ Dictionary<int, Absy>/*!*/ label2absy;
+ List<Block/*!*/>/*!*/ blocks;
+ protected Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap;
+ protected VerifierCallback/*!*/ callback;
+ protected ModelViewInfo MvInfo;
+ internal string resourceExceededMessage;
+ static System.IO.TextWriter modelWriter;
+ [ContractInvariantMethod]
+ void ObjectInvariant() {
+ Contract.Invariant(gotoCmdOrigins != null);
+ Contract.Invariant(label2absy != null);
+ Contract.Invariant(cce.NonNullElements(blocks));
+ Contract.Invariant(cce.NonNullDictionaryAndValues(incarnationOriginMap));
+ Contract.Invariant(callback != null);
+ Contract.Invariant(context != null);
+ Contract.Invariant(program != null);
+ }
+
+
+ public static TextWriter ModelWriter {
+ get {
+ Contract.Ensures(Contract.Result<TextWriter>() != null);
+
+ if (ErrorReporter.modelWriter == null)
+ ErrorReporter.modelWriter = CommandLineOptions.Clo.PrintErrorModelFile == null ? Console.Out : new StreamWriter(CommandLineOptions.Clo.PrintErrorModelFile, false);
+ return ErrorReporter.modelWriter;
+ }
+ }
+
+ protected ProverContext/*!*/ context;
+ Program/*!*/ program;
+
+ public IEnumerable<string> NecessaryAssumes
+ {
+ get { return program.NecessaryAssumes; }
+ }
+
+ public void AddNecessaryAssume(string id)
+ {
+ program.NecessaryAssumes.Add(id);
+ }
+
+ public ErrorReporter(Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins,
+ Dictionary<int, Absy>/*!*/ label2absy,
+ List<Block/*!*/>/*!*/ blocks,
+ Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap,
+ VerifierCallback/*!*/ callback,
+ ModelViewInfo mvInfo,
+ ProverContext/*!*/ context,
+ Program/*!*/ program) {
+ Contract.Requires(gotoCmdOrigins != null);
+ Contract.Requires(label2absy != null);
+ Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Requires(cce.NonNullDictionaryAndValues(incarnationOriginMap));
+ Contract.Requires(callback != null);
+ Contract.Requires(context!=null);
+ Contract.Requires(program!=null);
+ this.gotoCmdOrigins = gotoCmdOrigins;
+ this.label2absy = label2absy;
+ this.blocks = blocks;
+ this.incarnationOriginMap = incarnationOriginMap;
+ this.callback = callback;
+ this.MvInfo = mvInfo;
+
+ this.context = context;
+ this.program = program;
+ }
+
+ public override void OnModel(IList<string/*!*/>/*!*/ labels, Model model, ProverInterface.Outcome proverOutcome) {
+ //Contract.Requires(cce.NonNullElements(labels));
+ if (CommandLineOptions.Clo.PrintErrorModel >= 1 && model != null) {
+ if (VC.ConditionGeneration.errorModelList != null)
+ {
+ VC.ConditionGeneration.errorModelList.Add(model);
+ }
+
+ model.Write(ErrorReporter.ModelWriter);
+ ErrorReporter.ModelWriter.Flush();
+ }
+
+ Hashtable traceNodes = new Hashtable();
+ foreach (string s in labels) {
+ Contract.Assert(s != null);
+ Absy absy = Label2Absy(s);
+ Contract.Assert(absy != null);
+ if (traceNodes.ContainsKey(absy))
+ System.Console.WriteLine("Warning: duplicate label: " + s + " read while tracing nodes");
+ else
+ traceNodes.Add(absy, null);
+ }
+
+ List<Block> trace = new List<Block>();
+ Block entryBlock = cce.NonNull(this.blocks[0]);
+ Contract.Assert(traceNodes.Contains(entryBlock));
+ trace.Add(entryBlock);
+
+ Counterexample newCounterexample = TraceCounterexample(entryBlock, traceNodes, trace, model, MvInfo, incarnationOriginMap, context, new Dictionary<TraceLocation, CalleeCounterexampleInfo>());
+
+ if (newCounterexample == null)
+ return;
+
+ #region Map passive program errors back to original program errors
+ ReturnCounterexample returnExample = newCounterexample as ReturnCounterexample;
+ if (returnExample != null) {
+ foreach (Block b in returnExample.Trace) {
+ Contract.Assert(b != null);
+ Contract.Assume(b.TransferCmd != null);
+ ReturnCmd cmd = gotoCmdOrigins.ContainsKey(b.TransferCmd) ? gotoCmdOrigins[b.TransferCmd] : null;
+ if (cmd != null) {
+ returnExample.FailingReturn = cmd;
+ break;
+ }
+ }
+ }
+ #endregion
+ callback.OnCounterexample(newCounterexample, null);
+ }
+
+ public override Absy Label2Absy(string label) {
+ //Contract.Requires(label != null);
+ Contract.Ensures(Contract.Result<Absy>() != null);
+
+ int id = int.Parse(label);
+ return cce.NonNull((Absy)label2absy[id]);
+ }
+
+ public override void OnResourceExceeded(string msg, IEnumerable<Tuple<AssertCmd, TransferCmd>> assertCmds = null) {
+ //Contract.Requires(msg != null);
+ resourceExceededMessage = msg;
+ if (assertCmds != null)
+ {
+ foreach (var cmd in assertCmds)
+ {
+ Counterexample cex = AssertCmdToCounterexample(cmd.Item1, cmd.Item2 , new List<Block>(), null, null, context);
+ cex.IsAuxiliaryCexForDiagnosingTimeouts = true;
+ callback.OnCounterexample(cex, msg);
+ }
+ }
+ }
+
+ public override void OnProverWarning(string msg) {
+ //Contract.Requires(msg != null);
+ callback.OnWarning(msg);
+ }
+ }
+
+ public class ErrorReporterLocal : ErrorReporter {
+ public ErrorReporterLocal(Dictionary<TransferCmd, ReturnCmd>/*!*/ gotoCmdOrigins,
+ Dictionary<int, Absy>/*!*/ label2absy,
+ List<Block/*!*/>/*!*/ blocks,
+ Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap,
+ VerifierCallback/*!*/ callback,
+ ModelViewInfo mvInfo,
+ ProverContext/*!*/ context,
+ Program/*!*/ program)
+ : base(gotoCmdOrigins, label2absy, blocks, incarnationOriginMap, callback, mvInfo, context, program) // here for aesthetic purposes //TODO: Maybe nix?
+ {
+ Contract.Requires(gotoCmdOrigins != null);
+ Contract.Requires(label2absy != null);
+ Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Requires(cce.NonNullDictionaryAndValues(incarnationOriginMap));
+ Contract.Requires(callback != null);
+ Contract.Requires(context != null);
+ Contract.Requires(program != null);
+ }
+
+ public override void OnModel(IList<string/*!*/>/*!*/ labels, Model model, ProverInterface.Outcome proverOutcome) {
+ //Contract.Requires(cce.NonNullElements(labels));
+ // We ignore the error model here for enhanced error message purposes.
+ // It is only printed to the command line.
+ if (CommandLineOptions.Clo.PrintErrorModel >= 1 && model != null) {
+ if (CommandLineOptions.Clo.PrintErrorModelFile != null) {
+ model.Write(ErrorReporter.ModelWriter);
+ ErrorReporter.ModelWriter.Flush();
+ }
+ }
+ List<Block> traceNodes = new List<Block>();
+ List<AssertCmd> assertNodes = new List<AssertCmd>();
+ foreach (string s in labels) {
+ Contract.Assert(s != null);
+ Absy node = Label2Absy(s);
+ if (node is Block) {
+ Block b = (Block)node;
+ traceNodes.Add(b);
+ } else {
+ AssertCmd a = (AssertCmd)node;
+ assertNodes.Add(a);
+ }
+ }
+ Contract.Assert(assertNodes.Count > 0);
+ Contract.Assert(traceNodes.Count == assertNodes.Count);
+
+ foreach (AssertCmd a in assertNodes) {
+ // find the corresponding Block (assertNodes.Count is likely to be 1, or small in any case, so just do a linear search here)
+ foreach (Block b in traceNodes) {
+ if (b.Cmds.Contains(a)) {
+ List<Block> trace = new List<Block>();
+ trace.Add(b);
+ Counterexample newCounterexample = AssertCmdToCounterexample(a, cce.NonNull(b.TransferCmd), trace, model, MvInfo, context);
+ callback.OnCounterexample(newCounterexample, null);
+ goto NEXT_ASSERT;
+ }
+ }
+ Contract.Assert(false);
+ throw new cce.UnreachableException(); // there was no block that contains the assert
+ NEXT_ASSERT: {
+ }
+ }
+ }
+ }
+
+ private void RecordCutEdge(Dictionary<Block,List<Block>> edgesCut, Block from, Block to){
+ if (edgesCut != null)
+ {
+ if (!edgesCut.ContainsKey(from))
+ edgesCut.Add(from, new List<Block>());
+ edgesCut[from].Add(to);
+ }
+ }
+
+ public void ConvertCFG2DAG(Implementation impl, Dictionary<Block,List<Block>> edgesCut = null, int taskID = -1)
+ {
+ Contract.Requires(impl != null);
+ impl.PruneUnreachableBlocks(); // This is needed for VCVariety.BlockNested, and is otherwise just an optimization
+
+ CurrentLocalVariables = impl.LocVars;
+ variable2SequenceNumber = new Dictionary<Variable, int>();
+ incarnationOriginMap = new Dictionary<Incarnation, Absy>();
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("original implementation");
+ EmitImpl(impl, false);
+ }
+ #endregion
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("after desugaring sugared commands like procedure calls");
+ EmitImpl(impl, true);
+ }
+ #endregion
+
+ // Recompute the predecessors, but first insert a dummy start node that is sure not to be the target of any goto (because the cutting of back edges
+ // below assumes that the start node has no predecessor)
+ impl.Blocks.Insert(0, new Block(new Token(-17, -4), "0", new List<Cmd>(), new GotoCmd(Token.NoToken, new List<String> { impl.Blocks[0].Label }, new List<Block> { impl.Blocks[0] })));
+ ResetPredecessors(impl.Blocks);
+
+ var k = Math.Max(CommandLineOptions.Clo.KInductionDepth, QKeyValue.FindIntAttribute(impl.Attributes, "kInductionDepth", -1));
+ if(k < 0) {
+ ConvertCFG2DAGStandard(impl, edgesCut, taskID);
+ } else {
+ ConvertCFG2DAGKInduction(impl, edgesCut, taskID, k);
+ }
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("after conversion into a DAG");
+ EmitImpl(impl, true);
+ }
+ #endregion
+ }
+
+ private void ConvertCFG2DAGStandard(Implementation impl, Dictionary<Block, List<Block>> edgesCut, int taskID)
+ {
+ #region Convert program CFG into a DAG
+
+ #region Use the graph library to figure out where the (natural) loops are
+
+ #region Create the graph by adding the source node and each edge
+ Graph<Block> g = Program.GraphFromImpl(impl);
+ #endregion
+
+ //Graph<Block> g = program.ProcessLoops(impl);
+
+ g.ComputeLoops(); // this is the call that does all of the processing
+ if (!g.Reducible)
+ {
+ throw new VCGenException("Irreducible flow graphs are unsupported.");
+ }
+
+ #endregion
+
+ #region Cut the backedges, push assert/assume statements from loop header into predecessors, change them all into assume statements at top of loop, introduce havoc statements
+ foreach (Block header in cce.NonNull(g.Headers))
+ {
+ Contract.Assert(header != null);
+ IDictionary<Block, object> backEdgeNodes = new Dictionary<Block, object>();
+ foreach (Block b in cce.NonNull(g.BackEdgeNodes(header)))
+ {
+ Contract.Assert(b != null);
+ backEdgeNodes.Add(b, null);
+ }
+
+ #region Find the (possibly empty) prefix of assert commands in the header, replace each assert with an assume of the same condition
+ List<Cmd> prefixOfPredicateCmdsInit = new List<Cmd>();
+ List<Cmd> prefixOfPredicateCmdsMaintained = new List<Cmd>();
+ for (int i = 0, n = header.Cmds.Count; i < n; i++)
+ {
+ PredicateCmd a = header.Cmds[i] as PredicateCmd;
+ if (a != null)
+ {
+ if (a is AssertCmd)
+ {
+ AssertCmd c = (AssertCmd)a;
+ AssertCmd b = null;
+
+ if (CommandLineOptions.Clo.ConcurrentHoudini)
+ {
+ Contract.Assert(taskID >= 0);
+ if (CommandLineOptions.Clo.Cho[taskID].DisableLoopInvEntryAssert)
+ b = new LoopInitAssertCmd(c.tok, Expr.True);
+ else
+ b = new LoopInitAssertCmd(c.tok, c.Expr);
+ }
+ else
+ {
+ b = new LoopInitAssertCmd(c.tok, c.Expr);
+ }
+
+ b.Attributes = c.Attributes;
+ b.ErrorData = c.ErrorData;
+ prefixOfPredicateCmdsInit.Add(b);
+
+ if (CommandLineOptions.Clo.ConcurrentHoudini)
+ {
+ Contract.Assert(taskID >= 0);
+ if (CommandLineOptions.Clo.Cho[taskID].DisableLoopInvMaintainedAssert)
+ b = new Bpl.LoopInvMaintainedAssertCmd(c.tok, Expr.True);
+ else
+ b = new Bpl.LoopInvMaintainedAssertCmd(c.tok, c.Expr);
+ }
+ else
+ {
+ b = new Bpl.LoopInvMaintainedAssertCmd(c.tok, c.Expr);
+ }
+
+ b.Attributes = c.Attributes;
+ b.ErrorData = c.ErrorData;
+ prefixOfPredicateCmdsMaintained.Add(b);
+ header.Cmds[i] = new AssumeCmd(c.tok, c.Expr);
+ }
+ else
+ {
+ Contract.Assert(a is AssumeCmd);
+ if (Bpl.CommandLineOptions.Clo.AlwaysAssumeFreeLoopInvariants)
+ {
+ // Usually, "free" stuff, like free loop invariants (and the assume statements
+ // that stand for such loop invariants) are ignored on the checking side. This
+ // command-line option changes that behavior to always assume the conditions.
+ prefixOfPredicateCmdsInit.Add(a);
+ prefixOfPredicateCmdsMaintained.Add(a);
+ }
+ }
+ }
+ else if (header.Cmds[i] is CommentCmd)
+ {
+ // ignore
+ }
+ else
+ {
+ break; // stop when an assignment statement (or any other non-predicate cmd) is encountered
+ }
+ }
+ #endregion
+
+ #region Copy the prefix of predicate commands into each predecessor. Do this *before* cutting the backedge!!
+ for (int predIndex = 0, n = header.Predecessors.Count; predIndex < n; predIndex++)
+ {
+ Block pred = cce.NonNull(header.Predecessors[predIndex]);
+
+ // Create a block between header and pred for the predicate commands if pred has more than one successor
+ GotoCmd gotocmd = cce.NonNull((GotoCmd)pred.TransferCmd);
+ Contract.Assert(gotocmd.labelNames != null); // if "pred" is really a predecessor, it may be a GotoCmd with at least one label
+ if (gotocmd.labelNames.Count > 1)
+ {
+ Block newBlock = CreateBlockBetween(predIndex, header);
+ impl.Blocks.Add(newBlock);
+
+ // if pred is a back edge node, then now newBlock is the back edge node
+ if (backEdgeNodes.ContainsKey(pred))
+ {
+ backEdgeNodes.Remove(pred);
+ backEdgeNodes.Add(newBlock, null);
+ }
+
+ pred = newBlock;
+ }
+ // Add the predicate commands
+ if (backEdgeNodes.ContainsKey(pred))
+ {
+ pred.Cmds.AddRange(prefixOfPredicateCmdsMaintained);
+ }
+ else
+ {
+ pred.Cmds.AddRange(prefixOfPredicateCmdsInit);
+ }
+ }
+ #endregion
+
+ #region Cut the back edge
+ foreach (Block backEdgeNode in cce.NonNull(backEdgeNodes.Keys))
+ {
+ Contract.Assert(backEdgeNode != null);
+ Debug.Assert(backEdgeNode.TransferCmd is GotoCmd, "An node was identified as the source for a backedge, but it does not have a goto command.");
+ GotoCmd gtc = backEdgeNode.TransferCmd as GotoCmd;
+ if (gtc != null && gtc.labelTargets != null && gtc.labelTargets.Count > 1)
+ {
+ // then remove the backedge by removing the target block from the list of gotos
+ List<Block> remainingTargets = new List<Block>();
+ List<String> remainingLabels = new List<String>();
+ Contract.Assume(gtc.labelNames != null);
+ for (int i = 0, n = gtc.labelTargets.Count; i < n; i++)
+ {
+ if (gtc.labelTargets[i] != header)
+ {
+ remainingTargets.Add(gtc.labelTargets[i]);
+ remainingLabels.Add(gtc.labelNames[i]);
+ }
+ else
+ RecordCutEdge(edgesCut, backEdgeNode, header);
+ }
+ gtc.labelTargets = remainingTargets;
+ gtc.labelNames = remainingLabels;
+ }
+ else
+ {
+ // This backedge is the only out-going edge from this node.
+ // Add an "assume false" statement to the end of the statements
+ // inside of the block and change the goto command to a return command.
+ AssumeCmd ac = new AssumeCmd(Token.NoToken, Expr.False);
+ backEdgeNode.Cmds.Add(ac);
+ backEdgeNode.TransferCmd = new ReturnCmd(Token.NoToken);
+ if (gtc != null && gtc.labelTargets != null && gtc.labelTargets.Count == 1)
+ RecordCutEdge(edgesCut, backEdgeNode, gtc.labelTargets[0]);
+ }
+ #region Remove the backedge node from the list of predecessor nodes in the header
+ List<Block> newPreds = new List<Block>();
+ foreach (Block p in header.Predecessors)
+ {
+ if (p != backEdgeNode)
+ newPreds.Add(p);
+ }
+ header.Predecessors = newPreds;
+ #endregion
+ }
+ #endregion
+
+ #region Collect all variables that are assigned to in all of the natural loops for which this is the header
+ List<Variable> varsToHavoc = VarsAssignedInLoop(g, header);
+ List<IdentifierExpr> havocExprs = new List<IdentifierExpr>();
+ foreach (Variable v in varsToHavoc)
+ {
+ Contract.Assert(v != null);
+ IdentifierExpr ie = new IdentifierExpr(Token.NoToken, v);
+ if (!havocExprs.Contains(ie))
+ havocExprs.Add(ie);
+ }
+ // pass the token of the enclosing loop header to the HavocCmd so we can reconstruct
+ // the source location for this later on
+ HavocCmd hc = new HavocCmd(header.tok, havocExprs);
+ List<Cmd> newCmds = new List<Cmd>();
+ newCmds.Add(hc);
+ foreach (Cmd c in header.Cmds)
+ {
+ newCmds.Add(c);
+ }
+ header.Cmds = newCmds;
+ #endregion
+ }
+ #endregion
+ #endregion Convert program CFG into a DAG
+ }
+
+ public static List<Variable> VarsAssignedInLoop(Graph<Block> g, Block header)
+ {
+ List<Variable> varsToHavoc = new List<Variable>();
+ foreach (Block backEdgeNode in cce.NonNull(g.BackEdgeNodes(header)))
+ {
+ Contract.Assert(backEdgeNode != null);
+ foreach (Block b in g.NaturalLoops(header, backEdgeNode))
+ {
+ Contract.Assert(b != null);
+ foreach (Cmd c in b.Cmds)
+ {
+ Contract.Assert(c != null);
+ c.AddAssignedVariables(varsToHavoc);
+ }
+ }
+ }
+ return varsToHavoc;
+ }
+
+ public static IEnumerable<Variable> VarsReferencedInLoop(Graph<Block> g, Block header)
+ {
+ HashSet<Variable> referencedVars = new HashSet<Variable>();
+ foreach (Block backEdgeNode in cce.NonNull(g.BackEdgeNodes(header)))
+ {
+ Contract.Assert(backEdgeNode != null);
+ foreach (Block b in g.NaturalLoops(header, backEdgeNode))
+ {
+ Contract.Assert(b != null);
+ foreach (Cmd c in b.Cmds)
+ {
+ Contract.Assert(c != null);
+ var Collector = new VariableCollector();
+ Collector.Visit(c);
+ foreach(var v in Collector.usedVars) {
+ referencedVars.Add(v);
+ }
+ }
+ }
+ }
+ return referencedVars;
+ }
+
+ private void ConvertCFG2DAGKInduction(Implementation impl, Dictionary<Block, List<Block>> edgesCut, int taskID, int inductionK) {
+
+ // K-induction has not been adapted to be aware of these parameters which standard CFG to DAG transformation uses
+ Contract.Requires(edgesCut == null);
+ Contract.Requires(taskID == -1);
+ Contract.Requires(0 <= inductionK);
+
+ bool contRuleApplication = true;
+ while (contRuleApplication) {
+ contRuleApplication = false;
+
+ #region Use the graph library to figure out where the (natural) loops are
+
+ #region Create the graph by adding the source node and each edge
+ Graph<Block> g = Program.GraphFromImpl(impl);
+ #endregion
+
+ g.ComputeLoops(); // this is the call that does all of the processing
+ if (!g.Reducible) {
+ throw new VCGenException("Irreducible flow graphs are unsupported.");
+ }
+
+ #endregion
+
+ foreach (Block header in cce.NonNull(g.Headers)) {
+ Contract.Assert(header != null);
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("Applying k-induction rule with k=" + inductionK);
+ }
+ #endregion
+
+ #region generate the step case
+ Block newHeader = DuplicateLoop(impl, g, header, null,
+ false, false, "_step_assertion");
+ for (int i = 0; i < inductionK; ++i)
+ {
+ newHeader = DuplicateLoop(impl, g, header, newHeader,
+ true, true,
+ "_step_" + (inductionK - i));
+ }
+ #endregion
+
+ #region havoc variables that can be assigned in the loop
+
+ List<Variable> varsToHavoc = VarsAssignedInLoop(g, header);
+ List<IdentifierExpr> havocExprs = new List<IdentifierExpr>();
+ foreach (Variable v in varsToHavoc)
+ {
+ Contract.Assert(v != null);
+ IdentifierExpr ie = new IdentifierExpr(Token.NoToken, v);
+ if (!havocExprs.Contains(ie))
+ havocExprs.Add(ie);
+ }
+ // pass the token of the enclosing loop header to the HavocCmd so we can reconstruct
+ // the source location for this later on
+ HavocCmd hc = new HavocCmd(newHeader.tok, havocExprs);
+ List<Cmd> havocCmds = new List<Cmd>();
+ havocCmds.Add(hc);
+
+ Block havocBlock = new Block(newHeader.tok, newHeader.Label + "_havoc", havocCmds,
+ new GotoCmd (newHeader.tok, new List<Block> { newHeader }));
+
+ impl.Blocks.Add(havocBlock);
+ newHeader.Predecessors.Add(havocBlock);
+ newHeader = havocBlock;
+
+ #endregion
+
+ #region generate the base case loop copies
+ for (int i = 0; i < inductionK; ++i)
+ {
+ newHeader = DuplicateLoop(impl, g, header, newHeader,
+ false, false,
+ "_base_" + (inductionK - i));
+ }
+ #endregion
+
+ #region redirect into the new loop copies and remove the original loop (but don't redirect back-edges)
+
+ IDictionary<Block, object> backEdgeNodes = new Dictionary<Block, object>();
+ foreach (Block b in cce.NonNull(g.BackEdgeNodes(header))) { Contract.Assert(b != null); backEdgeNodes.Add(b, null); }
+
+ for (int predIndex = 0, n = header.Predecessors.Count(); predIndex < n; predIndex++)
+ {
+ Block pred = cce.NonNull(header.Predecessors[predIndex]);
+ if (!backEdgeNodes.ContainsKey(pred))
+ {
+ GotoCmd gc = pred.TransferCmd as GotoCmd;
+ Contract.Assert(gc != null);
+ for (int i = 0; i < gc.labelTargets.Count(); ++i)
+ {
+ if (gc.labelTargets[i] == header)
+ {
+ gc.labelTargets[i] = newHeader;
+ gc.labelNames[i] = newHeader.Label;
+ newHeader.Predecessors.Add(pred);
+ }
+ }
+ }
+ }
+ impl.PruneUnreachableBlocks();
+
+ #endregion
+
+ contRuleApplication = true;
+ break;
+ }
+
+ }
+
+ ResetPredecessors(impl.Blocks);
+ impl.FreshenCaptureStates();
+
+ }
+
+ private Block DuplicateLoop(Implementation impl, Graph<Block> g,
+ Block header, Block nextHeader, bool cutExits,
+ bool toAssumptions, string suffix)
+ {
+ IDictionary<Block, Block> ori2CopiedBlocks = new Dictionary<Block, Block>();
+ Duplicator duplicator = new Duplicator();
+
+ #region create copies of all blocks in the loop
+ foreach (Block backEdgeNode in cce.NonNull(g.BackEdgeNodes(header)))
+ {
+ Contract.Assert(backEdgeNode != null);
+ foreach (Block b in g.NaturalLoops(header, backEdgeNode))
+ {
+ Contract.Assert(b != null);
+ if (!ori2CopiedBlocks.ContainsKey(b))
+ {
+ Block copy = (Block)duplicator.Visit(b);
+ copy.Cmds = new List<Cmd>(copy.Cmds); // Philipp Ruemmer commented that this was necessary due to a bug in the Duplicator. That was a long time; worth checking whether this has been fixed
+ copy.Predecessors = new List<Block>();
+ copy.Label = copy.Label + suffix;
+
+ #region turn asserts into assumptions
+ if (toAssumptions)
+ {
+ for (int i = 0; i < copy.Cmds.Count(); ++i)
+ {
+ AssertCmd ac = copy.Cmds[i] as AssertCmd;
+ if (ac != null)
+ {
+ copy.Cmds[i] = new AssumeCmd(ac.tok, ac.Expr);
+ }
+ }
+ }
+ #endregion
+
+ impl.Blocks.Add(copy);
+ ori2CopiedBlocks.Add(b, copy);
+ }
+ }
+ }
+ #endregion
+
+ #region adjust the transfer commands of the newly created blocks
+ foreach (KeyValuePair<Block, Block> pair in ori2CopiedBlocks)
+ {
+ Block copy = pair.Value;
+ GotoCmd gc = copy.TransferCmd as GotoCmd;
+ if (gc != null)
+ {
+ List<Block> newTargets = new List<Block>();
+ List<string> newLabels = new List<string>();
+
+ for (int i = 0; i < gc.labelTargets.Count(); ++i)
+ {
+ Block newTarget;
+ if (gc.labelTargets[i] == header)
+ {
+ if (nextHeader != null)
+ {
+ newTargets.Add(nextHeader);
+ newLabels.Add(nextHeader.Label);
+ nextHeader.Predecessors.Add(copy);
+ }
+ }
+ else if (ori2CopiedBlocks.TryGetValue(gc.labelTargets[i], out newTarget))
+ {
+ newTargets.Add(newTarget);
+ newLabels.Add(newTarget.Label);
+ newTarget.Predecessors.Add(copy);
+ }
+ else if (!cutExits)
+ {
+ newTargets.Add(gc.labelTargets[i]);
+ newLabels.Add(gc.labelNames[i]);
+ gc.labelTargets[i].Predecessors.Add(copy);
+ }
+ }
+
+ if (newTargets.Count() == 0)
+ {
+ // if no targets are left, we assume false and return
+ copy.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
+ copy.TransferCmd = new ReturnCmd(Token.NoToken);
+ }
+ else
+ {
+ copy.TransferCmd = new GotoCmd(gc.tok, newLabels, newTargets);
+ }
+ }
+ else if (cutExits && (copy.TransferCmd is ReturnCmd))
+ {
+ // because return is a kind of exit from the loop, we
+ // assume false to cut this path
+ copy.Cmds.Add(new AssumeCmd(Token.NoToken, Expr.False));
+ }
+ }
+ #endregion
+
+ return ori2CopiedBlocks[header];
+ }
+
+ public void DesugarCalls(Implementation impl) {
+ foreach (Block block in impl.Blocks) {
+ List<Cmd> newCmds = new List<Cmd>();
+ foreach (Cmd cmd in block.Cmds) {
+ SugaredCmd sugaredCmd = cmd as SugaredCmd;
+ if (sugaredCmd != null) {
+ StateCmd stateCmd = sugaredCmd.Desugaring as StateCmd;
+ foreach (Variable v in stateCmd.Locals) {
+ impl.LocVars.Add(v);
+ }
+ newCmds.AddRange(stateCmd.Cmds);
+ }
+ else {
+ newCmds.Add(cmd);
+ }
+ }
+ block.Cmds = newCmds;
+ }
+ }
+
+ public Dictionary<TransferCmd, ReturnCmd> PassifyImpl(Implementation impl, out ModelViewInfo mvInfo)
+ {
+ Contract.Requires(impl != null);
+ Contract.Requires(program != null);
+ Contract.Ensures(Contract.Result<Dictionary<TransferCmd, ReturnCmd>>() != null);
+
+ Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins = new Dictionary<TransferCmd, ReturnCmd>();
+ Block exitBlock = GenerateUnifiedExit(impl, gotoCmdOrigins);
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("after creating a unified exit block");
+ EmitImpl(impl, true);
+ }
+ #endregion
+
+ #region Insert pre- and post-conditions and where clauses as assume and assert statements
+ {
+ List<Cmd> cc = new List<Cmd>();
+ // where clauses of global variables
+ lock (program.TopLevelDeclarations)
+ {
+ foreach (var gvar in program.GlobalVariables)
+ {
+ if (gvar != null && gvar.TypedIdent.WhereExpr != null)
+ {
+ Cmd c = new AssumeCmd(gvar.tok, gvar.TypedIdent.WhereExpr);
+ cc.Add(c);
+ }
+ }
+ }
+ // where clauses of in- and out-parameters
+ cc.AddRange(GetParamWhereClauses(impl));
+ // where clauses of local variables
+ foreach (Variable lvar in impl.LocVars) {Contract.Assert(lvar != null);
+ if (lvar.TypedIdent.WhereExpr != null) {
+ Cmd c = new AssumeCmd(lvar.tok, lvar.TypedIdent.WhereExpr);
+ cc.Add(c);
+ } else if (QKeyValue.FindBoolAttribute(lvar.Attributes, "assumption")) {
+ cc.Add(new AssumeCmd(lvar.tok, new IdentifierExpr(lvar.tok, lvar), new QKeyValue(lvar.tok, "assumption_variable_initialization", new List<object>(), null)));
+ }
+ }
+ // add cc and the preconditions to new blocks preceding impl.Blocks[0]
+ InjectPreconditions(impl, cc);
+
+ // append postconditions, starting in exitBlock and continuing into other blocks, if needed
+ InjectPostConditions(impl, exitBlock, gotoCmdOrigins);
+ }
+ #endregion
+
+ #region Support for stratified inlining
+ addExitAssert(impl.Name, exitBlock);
+ #endregion
+
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("after inserting pre- and post-conditions");
+ EmitImpl(impl, true);
+ }
+ #endregion
+
+ AddBlocksBetween(impl.Blocks);
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("after adding empty blocks as needed to catch join assumptions");
+ EmitImpl(impl, true);
+ }
+ #endregion
+
+ if (CommandLineOptions.Clo.LiveVariableAnalysis > 0) {
+ Microsoft.Boogie.LiveVariableAnalysis.ComputeLiveVariables(impl);
+ }
+
+ mvInfo = new ModelViewInfo(program, impl);
+ Convert2PassiveCmd(impl, mvInfo);
+
+ if (QKeyValue.FindBoolAttribute(impl.Attributes, "may_unverified_instrumentation"))
+ {
+ InstrumentWithMayUnverifiedConditions(impl, exitBlock);
+ }
+
+ #region Peep-hole optimizations
+ if (CommandLineOptions.Clo.RemoveEmptyBlocks){
+ #region Get rid of empty blocks
+ {
+ RemoveEmptyBlocksIterative(impl.Blocks);
+ impl.PruneUnreachableBlocks();
+ }
+ #endregion Get rid of empty blocks
+
+ #region Debug Tracing
+ if (CommandLineOptions.Clo.TraceVerify)
+ {
+ Console.WriteLine("after peep-hole optimizations");
+ EmitImpl(impl, true);
+ }
+ #endregion
+ }
+ #endregion Peep-hole optimizations
+
+ HandleSelectiveChecking(impl);
+
+
+// #region Constant Folding
+// #endregion
+// #region Debug Tracing
+// if (CommandLineOptions.Clo.TraceVerify)
+// {
+// Console.WriteLine("after constant folding");
+// EmitImpl(impl, true);
+// }
+// #endregion
+
+ return gotoCmdOrigins;
+ }
+
+ #region Simplified May-Unverified Analysis and Instrumentation
+
+ static void InstrumentWithMayUnverifiedConditions(Implementation impl, Block unifiedExitBlock)
+ {
+ var q = new Queue<Block>();
+ q.Enqueue(unifiedExitBlock);
+ var conditionOnBlockEntry = new Dictionary<Block, HashSet<Variable>>();
+ while (q.Any())
+ {
+ var block = q.Dequeue();
+
+ if (conditionOnBlockEntry.ContainsKey(block))
+ {
+ continue;
+ }
+
+ var gotoCmd = block.TransferCmd as GotoCmd;
+ if (gotoCmd != null && gotoCmd.labelTargets.Any(b => !conditionOnBlockEntry.ContainsKey(b)))
+ {
+ q.Enqueue(block);
+ continue;
+ }
+
+ HashSet<Variable> cond = new HashSet<Variable>();
+ if (gotoCmd != null)
+ {
+ var mayInstrs = new List<Block>();
+ bool noInstr = true;
+ foreach (var succ in gotoCmd.labelTargets)
+ {
+ var c = conditionOnBlockEntry[succ];
+ if (c != null)
+ {
+ mayInstrs.Add(succ);
+ }
+ else
+ {
+ noInstr = false;
+ }
+ cond = JoinVariableSets(cond, c);
+ }
+ if (!noInstr)
+ {
+ foreach (var instr in mayInstrs)
+ {
+ InstrumentWithCondition(instr, 0, conditionOnBlockEntry[instr]);
+ }
+ }
+ }
+
+ for (int i = block.Cmds.Count - 1; 0 <= i; i--)
+ {
+ var cmd = block.Cmds[i];
+ if (cond == null) { break; }
+
+ var assertCmd = cmd as AssertCmd;
+ if (assertCmd != null)
+ {
+ var litExpr = assertCmd.Expr as LiteralExpr;
+ if (litExpr != null && litExpr.IsTrue)
+ {
+ continue;
+ }
+
+ HashSet<Variable> vu = null;
+ if (assertCmd.VerifiedUnder == null)
+ {
+ vu = null;
+ }
+ else
+ {
+ HashSet<Variable> vars;
+ if (IsConjunctionOfAssumptionVariables(assertCmd.VerifiedUnder, out vars))
+ {
+ vu = vars;
+ // TODO(wuestholz): Maybe drop the :verified_under attribute.
+ }
+ else
+ {
+ vu = null;
+ }
+ }
+
+ if (vu == null)
+ {
+ InstrumentWithCondition(block, i + 1, cond);
+ }
+
+ cond = JoinVariableSets(cond, vu);
+ }
+ }
+
+ if (cond != null && block.Predecessors.Count == 0)
+ {
+ // TODO(wuestholz): Should we rather instrument each block?
+ InstrumentWithCondition(block, 0, cond);
+ }
+
+ foreach (var pred in block.Predecessors)
+ {
+ q.Enqueue(pred);
+ }
+
+ conditionOnBlockEntry[block] = cond;
+ }
+ }
+
+ private static void InstrumentWithCondition(Block block, int idx, HashSet<Variable> condition)
+ {
+ var conj = Expr.BinaryTreeAnd(condition.Select(v => (Expr)new IdentifierExpr(Token.NoToken, v)).ToList());
+ block.Cmds.Insert(idx, new AssumeCmd(Token.NoToken, Expr.Not(conj)));
+ }
+
+ static HashSet<Variable> JoinVariableSets(HashSet<Variable> c0, HashSet<Variable> c1)
+ {
+ // We use the following lattice:
+ // - Top: null (i.e., true)
+ // - Bottom: new HashSet<Variable>() (i.e., false)
+ // - Other Elements: new HashSet<Variable>(...) (i.e., conjunctions of assumption variables)
+
+ if (c0 == null || c1 == null)
+ {
+ return null;
+ }
+ var result = new HashSet<Variable>(c0);
+ result.UnionWith(c1);
+ return result;
+ }
+
+ static bool IsAssumptionVariableOrIncarnation(Variable v)
+ {
+ if (QKeyValue.FindBoolAttribute(v.Attributes, "assumption")) { return true; }
+ var incar = v as Incarnation;
+ return incar == null || QKeyValue.FindBoolAttribute(incar.OriginalVariable.Attributes, "assumption");
+ }
+
+ static bool IsConjunctionOfAssumptionVariables(Expr expr, out HashSet<Variable> variables)
+ {
+ Contract.Requires(expr != null);
+
+ variables = null;
+ var litExpr = expr as LiteralExpr;
+ if (litExpr != null && (litExpr.IsFalse || litExpr.IsTrue))
+ {
+ if (litExpr.IsTrue)
+ {
+ variables = new HashSet<Variable>();
+ }
+ return true;
+ }
+
+ var idExpr = expr as IdentifierExpr;
+ if (idExpr != null && IsAssumptionVariableOrIncarnation(idExpr.Decl))
+ {
+ variables = new HashSet<Variable>();
+ variables.Add(idExpr.Decl);
+ return true;
+ }
+
+ var andExpr = expr as NAryExpr;
+ if (andExpr != null)
+ {
+ var fun = andExpr.Fun as BinaryOperator;
+ if (fun != null && fun.Op == BinaryOperator.Opcode.And && andExpr.Args != null)
+ {
+ bool res = true;
+ variables = new HashSet<Variable>();
+ foreach (var op in andExpr.Args)
+ {
+ HashSet<Variable> vars;
+ var r = IsConjunctionOfAssumptionVariables(op, out vars);
+ res &= r;
+ variables = JoinVariableSets(variables, vars);
+ if (!res) { break; }
+ }
+ return res;
+ }
+ }
+
+ return false;
+ }
+
+ #endregion
+
+ private static void HandleSelectiveChecking(Implementation impl)
+ {
+ if (QKeyValue.FindBoolAttribute(impl.Attributes, "selective_checking") ||
+ QKeyValue.FindBoolAttribute(impl.Proc.Attributes, "selective_checking")) {
+
+ var startPoints = new List<Block>();
+ foreach (var b in impl.Blocks) {
+ foreach (Cmd c in b.Cmds) {
+ var p = c as PredicateCmd;
+ if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "start_checking_here")) {
+ startPoints.Add(b);
+ break;
+ }
+ }
+ }
+
+ // Compute the set of blocks reachable from blocks containing "start_checking_here"
+ var blocksToCheck = new HashSet<Block>();
+ foreach (var b in startPoints) {
+ var todo = new Stack<Block>();
+ var wasThere = blocksToCheck.Contains(b);
+ todo.Push(b);
+ while (todo.Count > 0) {
+ var x = todo.Pop();
+ if (blocksToCheck.Contains(x)) continue;
+ blocksToCheck.Add(x);
+ var ex = x.TransferCmd as GotoCmd;
+ if (ex != null)
+ foreach (Block e in ex.labelTargets)
+ todo.Push(e);
+ }
+ if (!wasThere) blocksToCheck.Remove(b);
+ }
+
+ // Convert asserts to assumes in "unreachable" blocks, as well as in portions of blocks before we reach "start_checking_here"
+ foreach (var b in impl.Blocks) {
+ if (blocksToCheck.Contains(b)) continue; // All reachable blocks must be checked in their entirety, so don't change anything
+ var newCmds = new List<Cmd>();
+ var copyMode = false;
+ foreach (Cmd c in b.Cmds) {
+ var p = c as PredicateCmd;
+ if (p != null && QKeyValue.FindBoolAttribute(p.Attributes, "start_checking_here"))
+ copyMode = true;
+ var asrt = c as AssertCmd;
+ if (copyMode || asrt == null)
+ newCmds.Add(c);
+ else
+ newCmds.Add(AssertTurnedIntoAssume(asrt));
+ }
+
+ b.Cmds = newCmds;
+ }
+ }
+ }
+
+ // Used by stratified inlining
+ protected virtual void addExitAssert(string implName, Block exitBlock)
+ {
+ }
+
+ public virtual Counterexample extractLoopTrace(Counterexample cex, string mainProcName, Program program, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
+ {
+ // Construct the set of inlined procs in the original program
+ var inlinedProcs = new HashSet<string>();
+ foreach (var proc in program.Procedures)
+ {
+ if (!(proc is LoopProcedure))
+ {
+ inlinedProcs.Add(proc.Name);
+ }
+ }
+
+ return extractLoopTraceRec(
+ new CalleeCounterexampleInfo(cex, new List<object>()),
+ mainProcName, inlinedProcs, extractLoopMappingInfo).counterexample;
+ }
+
+ protected CalleeCounterexampleInfo extractLoopTraceRec(
+ CalleeCounterexampleInfo cexInfo, string currProc,
+ HashSet<string> inlinedProcs,
+ Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
+ {
+ Contract.Requires(currProc != null);
+ if (cexInfo.counterexample == null) return cexInfo;
+
+ var cex = cexInfo.counterexample;
+ // Go through all blocks in the trace, map them back to blocks in the original program (if there is one)
+ var ret = cex.Clone();
+ ret.Trace = new List<Block>();
+ ret.calleeCounterexamples = new Dictionary<TraceLocation, CalleeCounterexampleInfo>();
+
+ for (int numBlock = 0; numBlock < cex.Trace.Count; numBlock ++ )
+ {
+ Block block = cex.Trace[numBlock];
+ var origBlock = elGetBlock(currProc, block, extractLoopMappingInfo);
+ if (origBlock != null) ret.Trace.Add(origBlock);
+ var callCnt = 1;
+ for (int numInstr = 0; numInstr < block.Cmds.Count; numInstr ++) {
+ Cmd cmd = block.Cmds[numInstr];
+ var loc = new TraceLocation(numBlock, numInstr);
+ if (!cex.calleeCounterexamples.ContainsKey(loc))
+ {
+ if (getCallee(cex.getTraceCmd(loc), inlinedProcs) != null) callCnt++;
+ continue;
+ }
+ string callee = cex.getCalledProcName(cex.getTraceCmd(loc));
+ Contract.Assert(callee != null);
+ var calleeTrace = cex.calleeCounterexamples[loc];
+ Debug.Assert(calleeTrace != null);
+
+ var origTrace = extractLoopTraceRec(calleeTrace, callee, inlinedProcs, extractLoopMappingInfo);
+
+ if (elIsLoop(callee))
+ {
+ // Absorb the trace into the current trace
+
+ int currLen = ret.Trace.Count;
+ ret.Trace.AddRange(origTrace.counterexample.Trace);
+
+ foreach (var kvp in origTrace.counterexample.calleeCounterexamples)
+ {
+ var newloc = new TraceLocation(kvp.Key.numBlock + currLen, kvp.Key.numInstr);
+ ret.calleeCounterexamples.Add(newloc, kvp.Value);
+ }
+
+ }
+ else
+ {
+ var origLoc = new TraceLocation(ret.Trace.Count - 1, getCallCmdPosition(origBlock, callCnt, inlinedProcs, callee));
+ ret.calleeCounterexamples.Add(origLoc, origTrace);
+ callCnt++;
+ }
+ }
+ }
+ return new CalleeCounterexampleInfo(ret, cexInfo.args);
+ }
+
+ // return the position of the i^th CallCmd in the block (count only those Calls that call a procedure in inlinedProcs).
+ // Assert failure if there isn't any.
+ // Assert that the CallCmd found calls "callee"
+ private int getCallCmdPosition(Block block, int i, HashSet<string> inlinedProcs, string callee)
+ {
+ Debug.Assert(i >= 1);
+ for (int pos = 0; pos < block.Cmds.Count; pos++)
+ {
+ Cmd cmd = block.Cmds[pos];
+ string procCalled = getCallee(cmd, inlinedProcs);
+
+ if (procCalled != null)
+ {
+ if (i == 1)
+ {
+ Debug.Assert(procCalled == callee);
+ return pos;
+ }
+ i--;
+ }
+ }
+
+ Debug.Assert(false, "Didn't find the i^th call cmd");
+ return -1;
+ }
+
+ private string getCallee(Cmd cmd, HashSet<string> inlinedProcs)
+ {
+ string procCalled = null;
+ if (cmd is CallCmd)
+ {
+ var cc = (CallCmd)cmd;
+ if (inlinedProcs.Contains(cc.Proc.Name))
+ {
+ procCalled = cc.Proc.Name;
+ }
+ }
+
+ if (cmd is AssumeCmd)
+ {
+ var expr = (cmd as AssumeCmd).Expr as NAryExpr;
+ if (expr != null)
+ {
+ if (inlinedProcs.Contains(expr.Fun.FunctionName))
+ {
+ procCalled = expr.Fun.FunctionName;
+ }
+ }
+ }
+ return procCalled;
+ }
+
+ protected virtual bool elIsLoop(string procname)
+ {
+ return false;
+ }
+
+ private Block elGetBlock(string procname, Block block, Dictionary<string, Dictionary<string, Block>> extractLoopMappingInfo)
+ {
+ Contract.Requires(procname != null);
+
+ if (!extractLoopMappingInfo.ContainsKey(procname))
+ return block;
+
+ if (!extractLoopMappingInfo[procname].ContainsKey(block.Label))
+ return null;
+
+ return extractLoopMappingInfo[procname][block.Label];
+ }
+
+ static Counterexample TraceCounterexample(
+ Block/*!*/ b, Hashtable/*!*/ traceNodes, List<Block>/*!*/ trace, Model errModel, ModelViewInfo mvInfo,
+ Dictionary<Incarnation, Absy/*!*/>/*!*/ incarnationOriginMap,
+ ProverContext/*!*/ context,
+ Dictionary<TraceLocation/*!*/, CalleeCounterexampleInfo/*!*/>/*!*/ calleeCounterexamples)
+ {
+ Contract.Requires(b != null);
+ Contract.Requires(traceNodes != null);
+ Contract.Requires(trace != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(incarnationOriginMap));
+ Contract.Requires(context != null);
+ Contract.Requires(cce.NonNullDictionaryAndValues(calleeCounterexamples));
+ // After translation, all potential errors come from asserts.
+
+ while (true)
+ {
+ List<Cmd> cmds = b.Cmds;
+ Contract.Assert(cmds != null);
+ TransferCmd transferCmd = cce.NonNull(b.TransferCmd);
+ for (int i = 0; i < cmds.Count; i++)
+ {
+ Cmd cmd = cce.NonNull(cmds[i]);
+
+ // Skip if 'cmd' not contained in the trace or not an assert
+ if (cmd is AssertCmd && traceNodes.Contains(cmd))
+ {
+ Counterexample newCounterexample = AssertCmdToCounterexample((AssertCmd)cmd, transferCmd, trace, errModel, mvInfo, context);
+ Contract.Assert(newCounterexample != null);
+ newCounterexample.AddCalleeCounterexample(calleeCounterexamples);
+ return newCounterexample;
+ }
+ }
+
+ GotoCmd gotoCmd = transferCmd as GotoCmd;
+ if (gotoCmd == null) return null;
+ Block foundBlock = null;
+ foreach (Block bb in cce.NonNull(gotoCmd.labelTargets))
+ {
+ Contract.Assert(bb != null);
+ if (traceNodes.Contains(bb))
+ {
+ foundBlock = bb;
+ break;
+ }
+ }
+ if (foundBlock == null) return null;
+ trace.Add(foundBlock);
+ b = foundBlock;
+ }
+ }
+
+ public static Counterexample AssertCmdToCounterexample(AssertCmd cmd, TransferCmd transferCmd, List<Block> trace, Model errModel, ModelViewInfo mvInfo, ProverContext context)
+ {
+ Contract.Requires(cmd != null);
+ Contract.Requires(transferCmd != null);
+ Contract.Requires(trace != null);
+ Contract.Requires(context != null);
+ Contract.Ensures(Contract.Result<Counterexample>() != null);
+
+ List<string> relatedInformation = new List<string>();
+
+ // See if it is a special assert inserted in translation
+ if (cmd is AssertRequiresCmd)
+ {
+ AssertRequiresCmd assertCmd = (AssertRequiresCmd)cmd;
+ Contract.Assert(assertCmd != null);
+ CallCounterexample cc = new CallCounterexample(trace, assertCmd.Call, assertCmd.Requires, errModel, mvInfo, context, assertCmd.Checksum);
+ cc.relatedInformation = relatedInformation;
+ return cc;
+ }
+ else if (cmd is AssertEnsuresCmd)
+ {
+ AssertEnsuresCmd assertCmd = (AssertEnsuresCmd)cmd;
+ Contract.Assert(assertCmd != null);
+ ReturnCounterexample rc = new ReturnCounterexample(trace, transferCmd, assertCmd.Ensures, errModel, mvInfo, context, cmd.Checksum);
+ rc.relatedInformation = relatedInformation;
+ return rc;
+ }
+ else
+ {
+ AssertCounterexample ac = new AssertCounterexample(trace, (AssertCmd)cmd, errModel, mvInfo, context);
+ ac.relatedInformation = relatedInformation;
+ return ac;
+ }
+ }
+
+ /// <summary>
+ /// Returns a clone of "cex", but with the location stored in "cex" replaced by those from "assrt".
+ /// </summary>
+ public static Counterexample AssertCmdToCloneCounterexample(AssertCmd assrt, Counterexample cex) {
+ Contract.Requires(assrt != null);
+ Contract.Requires(cex != null);
+ Contract.Ensures(Contract.Result<Counterexample>() != null);
+
+ List<string> relatedInformation = new List<string>();
+
+ Counterexample cc;
+ if (assrt is AssertRequiresCmd) {
+ var aa = (AssertRequiresCmd)assrt;
+ cc = new CallCounterexample(cex.Trace, aa.Call, aa.Requires, cex.Model, cex.MvInfo, cex.Context, aa.Checksum);
+ } else if (assrt is AssertEnsuresCmd && cex is ReturnCounterexample) {
+ var aa = (AssertEnsuresCmd)assrt;
+ var oldCex = (ReturnCounterexample)cex;
+ cc = new ReturnCounterexample(cex.Trace, oldCex.FailingReturn, aa.Ensures, cex.Model, cex.MvInfo, cex.Context, aa.Checksum);
+ } else {
+ cc = new AssertCounterexample(cex.Trace, assrt, cex.Model, cex.MvInfo, cex.Context);
+ }
+ cc.relatedInformation = relatedInformation;
+ return cc;
+ }
+
+ static VCExpr LetVC(Block startBlock,
+ VCExpr controlFlowVariableExpr,
+ Dictionary<int, Absy> label2absy,
+ ProverContext proverCtxt,
+ out int assertionCount) {
+ Contract.Requires(startBlock != null);
+ Contract.Requires(proverCtxt != null);
+
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/();
+ List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
+ VCExpr startCorrect = LetVC(startBlock, controlFlowVariableExpr, label2absy, blockVariables, bindings, proverCtxt, out assertionCount);
+ return proverCtxt.ExprGen.Let(bindings, startCorrect);
+ }
+
+ static VCExpr LetVCIterative(List<Block> blocks,
+ VCExpr controlFlowVariableExpr,
+ Dictionary<int, Absy> label2absy,
+ ProverContext proverCtxt,
+ out int assertionCount,
+ bool isPositiveContext = true)
+ {
+ Contract.Requires(blocks != null);
+ Contract.Requires(proverCtxt != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ assertionCount = 0;
+
+ Graph<Block> dag = new Graph<Block>();
+ dag.AddSource(blocks[0]);
+ foreach (Block b in blocks) {
+ GotoCmd gtc = b.TransferCmd as GotoCmd;
+ if (gtc != null) {
+ Contract.Assume(gtc.labelTargets != null);
+ foreach (Block dest in gtc.labelTargets) {
+ Contract.Assert(dest != null);
+ dag.AddEdge(dest, b);
+ }
+ }
+ }
+ IEnumerable sortedNodes = dag.TopologicalSort();
+ Contract.Assert(sortedNodes != null);
+
+ Dictionary<Block, VCExprVar> blockVariables = new Dictionary<Block, VCExprVar>();
+ List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
+ VCExpressionGenerator gen = proverCtxt.ExprGen;
+ Contract.Assert(gen != null);
+ foreach (Block block in sortedNodes) {
+ VCExpr SuccCorrect;
+ GotoCmd gotocmd = block.TransferCmd as GotoCmd;
+ if (gotocmd == null) {
+ ReturnExprCmd re = block.TransferCmd as ReturnExprCmd;
+ if (re == null) {
+ SuccCorrect = VCExpressionGenerator.True;
+ }
+ else {
+ SuccCorrect = proverCtxt.BoogieExprTranslator.Translate(re.Expr);
+ if (isPositiveContext)
+ {
+ SuccCorrect = gen.Not(SuccCorrect);
+ }
+ }
+ }
+ else {
+ Contract.Assert(gotocmd.labelTargets != null);
+ List<VCExpr> SuccCorrectVars = new List<VCExpr>(gotocmd.labelTargets.Count);
+ foreach (Block successor in gotocmd.labelTargets) {
+ Contract.Assert(successor != null);
+ VCExpr s = blockVariables[successor];
+ if (controlFlowVariableExpr != null) {
+ VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(controlFlowVariableExpr, gen.Integer(BigNum.FromInt(block.UniqueId)));
+ VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(successor.UniqueId)));
+ s = gen.Implies(controlTransferExpr, s);
+ }
+ SuccCorrectVars.Add(s);
+ }
+ SuccCorrect = gen.NAry(VCExpressionGenerator.AndOp, SuccCorrectVars);
+ }
+
+ VCContext context = new VCContext(label2absy, proverCtxt, controlFlowVariableExpr, isPositiveContext);
+ VCExpr vc = Wlp.Block(block, SuccCorrect, context);
+ assertionCount += context.AssertionCount;
+
+ VCExprVar v = gen.Variable(block.Label + "_correct", Bpl.Type.Bool);
+ bindings.Add(gen.LetBinding(v, vc));
+ blockVariables.Add(block, v);
+ }
+
+ return proverCtxt.ExprGen.Let(bindings, blockVariables[blocks[0]]);
+ }
+
+ static VCExpr LetVC(Block block,
+ VCExpr controlFlowVariableExpr,
+ Dictionary<int, Absy> label2absy,
+ Hashtable/*<Block, VCExprVar!>*/ blockVariables,
+ List<VCExprLetBinding/*!*/>/*!*/ bindings,
+ ProverContext proverCtxt,
+ out int assertionCount)
+ {
+ Contract.Requires(block != null);
+ Contract.Requires(blockVariables!= null);
+ Contract.Requires(cce.NonNullElements(bindings));
+ Contract.Requires(proverCtxt != null);
+
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ assertionCount = 0;
+
+ VCExpressionGenerator gen = proverCtxt.ExprGen;
+ Contract.Assert(gen != null);
+ VCExprVar v = (VCExprVar)blockVariables[block];
+ if (v == null) {
+ /*
+ * For block A (= block), generate:
+ * LET_binding A_correct = wp(A_body, (/\ S \in Successors(A) :: S_correct))
+ * with the side effect of adding the let bindings to "bindings" for any
+ * successor not yet visited.
+ */
+ VCExpr SuccCorrect;
+ GotoCmd gotocmd = block.TransferCmd as GotoCmd;
+ if (gotocmd == null) {
+ ReturnExprCmd re = block.TransferCmd as ReturnExprCmd;
+ if (re == null) {
+ SuccCorrect = VCExpressionGenerator.True;
+ } else {
+ SuccCorrect = proverCtxt.BoogieExprTranslator.Translate(re.Expr);
+ }
+ } else {
+ Contract.Assert( gotocmd.labelTargets != null);
+ List<VCExpr> SuccCorrectVars = new List<VCExpr>(gotocmd.labelTargets.Count);
+ foreach (Block successor in gotocmd.labelTargets) {
+ Contract.Assert(successor != null);
+ int ac;
+ VCExpr s = LetVC(successor, controlFlowVariableExpr, label2absy, blockVariables, bindings, proverCtxt, out ac);
+ assertionCount += ac;
+ if (controlFlowVariableExpr != null)
+ {
+ VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(controlFlowVariableExpr, gen.Integer(BigNum.FromInt(block.UniqueId)));
+ VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(successor.UniqueId)));
+ s = gen.Implies(controlTransferExpr, s);
+ }
+ SuccCorrectVars.Add(s);
+ }
+ SuccCorrect = gen.NAry(VCExpressionGenerator.AndOp, SuccCorrectVars);
+ }
+
+
+ VCContext context = new VCContext(label2absy, proverCtxt, controlFlowVariableExpr);
+ VCExpr vc = Wlp.Block(block, SuccCorrect, context);
+ assertionCount += context.AssertionCount;
+
+ v = gen.Variable(block.Label + "_correct", Bpl.Type.Bool);
+ bindings.Add(gen.LetBinding(v, vc));
+ blockVariables.Add(block, v);
+ }
+ return v;
+ }
+
+ static VCExpr DagVC(Block block,
+ VCExpr controlFlowVariableExpr,
+ Dictionary<int, Absy> label2absy,
+ Hashtable/*<Block, VCExpr!>*/ blockEquations,
+ ProverContext proverCtxt,
+ out int assertionCount)
+ {
+ Contract.Requires(block != null);
+ Contract.Requires(label2absy != null);
+ Contract.Requires(blockEquations != null);
+ Contract.Requires(proverCtxt != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ assertionCount = 0;
+ VCExpressionGenerator gen = proverCtxt.ExprGen;
+ Contract.Assert(gen != null);
+ VCExpr vc = (VCExpr)blockEquations[block];
+ if (vc != null) {
+ return vc;
+ }
+
+ /*
+ * For block A (= block), generate:
+ * wp(A_body, (/\ S \in Successors(A) :: DagVC(S)))
+ */
+ VCExpr SuccCorrect = null;
+ GotoCmd gotocmd = block.TransferCmd as GotoCmd;
+ if (gotocmd != null)
+ {
+ foreach (Block successor in cce.NonNull(gotocmd.labelTargets)) {
+ Contract.Assert(successor != null);
+ int ac;
+ VCExpr c = DagVC(successor, controlFlowVariableExpr, label2absy, blockEquations, proverCtxt, out ac);
+ assertionCount += ac;
+ if (controlFlowVariableExpr != null) {
+ VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(controlFlowVariableExpr, gen.Integer(BigNum.FromInt(block.UniqueId)));
+ VCExpr controlTransferExpr = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(successor.UniqueId)));
+ c = gen.Implies(controlTransferExpr, c);
+ }
+ SuccCorrect = SuccCorrect == null ? c : gen.And(SuccCorrect, c);
+ }
+ }
+ if (SuccCorrect == null) {
+ SuccCorrect = VCExpressionGenerator.True;
+ }
+
+ VCContext context = new VCContext(label2absy, proverCtxt, controlFlowVariableExpr);
+ vc = Wlp.Block(block, SuccCorrect, context);
+ assertionCount += context.AssertionCount;
+
+ // gen.MarkAsSharedFormula(vc); PR: don't know yet what to do with this guy
+
+ blockEquations.Add(block, vc);
+ return vc;
+ }
+
+ static VCExpr FlatBlockVC(Implementation impl,
+ Dictionary<int, Absy> label2absy,
+ bool local, bool reach, bool doomed,
+ ProverContext proverCtxt,
+ out int assertionCount)
+ {
+ Contract.Requires(impl != null);
+ Contract.Requires(label2absy != null);
+ Contract.Requires(proverCtxt != null);
+ Contract.Requires( !local || !reach); // "reach" must be false for local
+
+ VCExpressionGenerator gen = proverCtxt.ExprGen;
+ Contract.Assert(gen != null);
+ Hashtable/* Block --> VCExprVar */ BlkCorrect = BlockVariableMap(impl.Blocks, "_correct", gen);
+ Hashtable/* Block --> VCExprVar */ BlkReached = reach ? BlockVariableMap(impl.Blocks, "_reached", gen) : null;
+
+ List<Block> blocks = impl.Blocks;
+ Contract.Assert(blocks != null);
+ // block sorting is now done on the VCExpr
+ // if (!local && (cce.NonNull(CommandLineOptions.Clo.TheProverFactory).NeedsBlockSorting) {
+ // blocks = SortBlocks(blocks);
+ // }
+
+ VCExpr proofObligation;
+ if (!local) {
+ proofObligation = cce.NonNull((VCExprVar)BlkCorrect[impl.Blocks[0]]);
+ } else {
+ List<VCExpr> conjuncts = new List<VCExpr>(blocks.Count);
+ foreach (Block b in blocks) {Contract.Assert(b != null);
+ VCExpr v = cce.NonNull((VCExprVar)BlkCorrect[b]);
+ conjuncts.Add(v);
+ }
+ proofObligation = gen.NAry(VCExpressionGenerator.AndOp, conjuncts);
+ }
+
+ VCContext context = new VCContext(label2absy, proverCtxt);
+ Contract.Assert(context != null);
+
+ List<VCExprLetBinding> programSemantics = new List<VCExprLetBinding>(blocks.Count);
+ foreach (Block b in blocks) {Contract.Assert(b != null);
+ /*
+ * In block mode,
+ * For a return block A, generate:
+ * A_correct <== wp(A_body, true) [post-condition has been translated into an assert]
+ * For all other blocks, generate:
+ * A_correct <== wp(A_body, (/\ S \in Successors(A) :: S_correct))
+ *
+ * In doomed mode, proceed as in block mode, except for a return block A, generate:
+ * A_correct <== wp(A_body, false) [post-condition has been translated into an assert]
+ *
+ * In block reach mode, the wp(A_body,...) in the equations above change to:
+ * A_reached ==> wp(A_body,...)
+ * and the conjunction above changes to:
+ * (/\ S \in Successors(A) :: S_correct \/ (\/ T \in Successors(A) && T != S :: T_reached))
+ *
+ * In local mode, generate:
+ * A_correct <== wp(A_body, true)
+ */
+ VCExpr SuccCorrect;
+ if (local) {
+ SuccCorrect = VCExpressionGenerator.True;
+ } else {
+ SuccCorrect = SuccessorsCorrect(b, BlkCorrect, BlkReached, doomed, gen);
+ }
+
+ VCExpr wlp = Wlp.Block(b, SuccCorrect, context);
+ if (BlkReached != null) {
+ wlp = gen.Implies(cce.NonNull((VCExprVar)BlkReached[b]), wlp);
+ }
+
+ VCExprVar okVar = cce.NonNull((VCExprVar)BlkCorrect[b]);
+ VCExprLetBinding binding = gen.LetBinding(okVar, wlp);
+ programSemantics.Add(binding);
+ }
+
+ assertionCount = context.AssertionCount;
+ return gen.Let(programSemantics, proofObligation);
+ }
+
+ private static Hashtable/* Block --> VCExprVar */ BlockVariableMap(List<Block/*!*/>/*!*/ blocks, string suffix,
+ Microsoft.Boogie.VCExpressionGenerator gen) {
+ Contract.Requires(cce.NonNullElements(blocks));
+ Contract.Requires(suffix != null);
+ Contract.Requires(gen != null);
+ Contract.Ensures(Contract.Result<Hashtable>() != null);
+
+ Hashtable/* Block --> VCExprVar */ map = new Hashtable/* Block --> (Let)Variable */();
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ VCExprVar v = gen.Variable(b.Label + suffix, Bpl.Type.Bool);
+ Contract.Assert(v != null);
+ map.Add(b, v);
+ }
+ return map;
+ }
+
+ private static VCExpr SuccessorsCorrect(
+ Block b,
+ Hashtable/* Block --> VCExprVar */ BlkCorrect,
+ Hashtable/* Block --> VCExprVar */ BlkReached,
+ bool doomed,
+ Microsoft.Boogie.VCExpressionGenerator gen) {
+ Contract.Requires(b != null);
+ Contract.Requires(BlkCorrect != null);
+ Contract.Requires(gen != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpr SuccCorrect = null;
+ GotoCmd gotocmd = b.TransferCmd as GotoCmd;
+ if (gotocmd != null) {
+ foreach (Block successor in cce.NonNull(gotocmd.labelTargets)) {
+ Contract.Assert(successor != null);
+ // c := S_correct
+ VCExpr c = (VCExprVar)BlkCorrect[successor];
+ Contract.Assert(c != null);
+ if (BlkReached != null) {
+ // c := S_correct \/ Sibling0_reached \/ Sibling1_reached \/ ...;
+ foreach (Block successorSibling in gotocmd.labelTargets) {
+ Contract.Assert(successorSibling != null);
+ if (successorSibling != successor) {
+ c = gen.Or(c, cce.NonNull((VCExprVar)BlkReached[successorSibling]));
+ }
+ }
+ }
+ SuccCorrect = SuccCorrect == null ? c : gen.And(SuccCorrect, c);
+ }
+ }
+ if (SuccCorrect == null) {
+ return VCExpressionGenerator.True;
+ } else if (doomed) {
+ return VCExpressionGenerator.False;
+ } else {
+ return SuccCorrect;
+ }
+ }
+
+ static VCExpr NestedBlockVC(Implementation impl,
+ Dictionary<int, Absy> label2absy,
+ bool reach,
+ ProverContext proverCtxt,
+ out int assertionCount){
+ Contract.Requires(impl != null);
+ Contract.Requires(label2absy != null);
+ Contract.Requires(proverCtxt != null);
+ Contract.Requires( impl.Blocks.Count != 0);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpressionGenerator gen = proverCtxt.ExprGen;
+ Contract.Assert(gen != null);
+ Graph<Block> g = Program.GraphFromImpl(impl);
+
+ Hashtable/* Block --> VCExprVar */ BlkCorrect = BlockVariableMap(impl.Blocks, "_correct", gen);
+ Hashtable/* Block --> VCExprVar */ BlkReached = reach ? BlockVariableMap(impl.Blocks, "_reached", gen) : null;
+
+ Block startBlock = cce.NonNull( impl.Blocks[0]);
+ VCExpr proofObligation = (VCExprVar)BlkCorrect[startBlock];
+ Contract.Assert(proofObligation != null);
+ VCContext context = new VCContext(label2absy, proverCtxt);
+
+ Hashtable/*Block->int*/ totalOrder = new Hashtable/*Block->int*/();
+ {
+ List<Block> blocks = impl.Blocks;
+
+ // block sorting is now done on the VCExpr
+ // if (((!)CommandLineOptions.Clo.TheProverFactory).NeedsBlockSorting) {
+ // blocks = SortBlocks(blocks);
+ // }
+ int i = 0;
+ foreach (Block b in blocks) {
+ Contract.Assert(b != null);
+ totalOrder[b] = i;
+ i++;
+ }
+ }
+
+ VCExprLetBinding programSemantics = NestedBlockEquation(cce.NonNull(impl.Blocks[0]), BlkCorrect, BlkReached, totalOrder, context, g, gen);
+ List<VCExprLetBinding> ps = new List<VCExprLetBinding>(1);
+ ps.Add(programSemantics);
+
+ assertionCount = context.AssertionCount;
+ return gen.Let(ps, proofObligation);
+ }
+
+ private static VCExprLetBinding NestedBlockEquation(Block b,
+ Hashtable/*Block-->VCExprVar*/ BlkCorrect,
+ Hashtable/*Block-->VCExprVar*/ BlkReached,
+ Hashtable/*Block->int*/ totalOrder,
+ VCContext context,
+ Graph<Block> g,
+ Microsoft.Boogie.VCExpressionGenerator gen) {
+ Contract.Requires(b != null);
+ Contract.Requires(BlkCorrect != null);
+ Contract.Requires(totalOrder != null);
+ Contract.Requires(g != null);
+ Contract.Requires(context != null);
+
+ Contract.Ensures(Contract.Result<VCExprLetBinding>() != null);
+
+ /*
+ * For a block b, return:
+ * LET_BINDING b_correct = wp(b_body, X)
+ * where X is:
+ * LET (THOSE d \in DirectDominates(b) :: BlockEquation(d))
+ * IN (/\ s \in Successors(b) :: s_correct)
+ *
+ * When the VC-expression generator does not support LET expresions, this
+ * will eventually turn into:
+ * b_correct <== wp(b_body, X)
+ * where X is:
+ * (/\ s \in Successors(b) :: s_correct)
+ * <==
+ * (/\ d \in DirectDominatees(b) :: BlockEquation(d))
+ *
+ * In both cases above, if BlkReached is non-null, then the wp expression
+ * is instead:
+ * b_reached ==> wp(b_body, X)
+ */
+
+ VCExpr SuccCorrect = SuccessorsCorrect(b, BlkCorrect, null, false, gen);
+ Contract.Assert(SuccCorrect != null);
+
+ List<VCExprLetBinding> bindings = new List<VCExprLetBinding>();
+ foreach (Block dominee in GetSortedBlocksImmediatelyDominatedBy(g, b, totalOrder)) {
+ Contract.Assert(dominee != null);
+ VCExprLetBinding c = NestedBlockEquation(dominee, BlkCorrect, BlkReached, totalOrder, context, g, gen);
+ bindings.Add(c);
+ }
+
+ VCExpr X = gen.Let(bindings, SuccCorrect);
+ VCExpr wlp = Wlp.Block(b, X, context);
+ if (BlkReached != null) {
+ wlp = gen.Implies((VCExprVar)BlkReached[b], wlp);
+ Contract.Assert(wlp != null);
+ }
+ VCExprVar okVar = cce.NonNull((VCExprVar)BlkCorrect[b]);
+ return gen.LetBinding(okVar, wlp);
+ }
+
+ /// <summary>
+ /// Returns a list of g.ImmediatelyDominatedBy(b), but in a sorted order, hoping to steer around
+ /// the nondeterminism problems we've been seeing by using just this call.
+ /// </summary>
+ static List<Block/*!*/>/*!*/ GetSortedBlocksImmediatelyDominatedBy(Graph<Block>/*!*/ g, Block/*!*/ b, Hashtable/*Block->int*//*!*/ totalOrder) {
+ Contract.Requires(g != null);
+ Contract.Requires(b != null);
+ Contract.Requires(totalOrder != null);
+ Contract.Ensures(Contract.Result<List<Block>>() != null);
+
+ List<Block> list = new List<Block>();
+ foreach (Block dominee in g.ImmediatelyDominatedBy(b)) {
+ Contract.Assert(dominee != null);
+ list.Add(dominee);
+ }
+ list.Sort(new Comparison<Block>(delegate(Block x, Block y) {
+ return (int)cce.NonNull(totalOrder[x]) - (int)cce.NonNull(totalOrder[y]);
+ }));
+ return list;
+ }
+
+ static VCExpr VCViaStructuredProgram
+ (Implementation impl, Dictionary<int, Absy> label2absy,
+ ProverContext proverCtxt,
+ out int assertionCount)
+ {
+ Contract.Requires(impl != null);
+ Contract.Requires(label2absy != null);
+ Contract.Requires(proverCtxt != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ #region Convert block structure back to a "regular expression"
+ RE r = DAG2RE.Transform(cce.NonNull(impl.Blocks[0]));
+ Contract.Assert(r != null);
+ #endregion
+
+ VCContext ctxt = new VCContext(label2absy, proverCtxt);
+ Contract.Assert(ctxt != null);
+ #region Send wlp(program,true) to Simplify
+ var vcexp = Wlp.RegExpr(r, VCExpressionGenerator.True, ctxt);
+ assertionCount = ctxt.AssertionCount;
+ return vcexp;
+ #endregion
+ }
+
+ /// <summary>
+ /// Remove empty blocks reachable from the startBlock of the CFG
+ /// </summary>
+ static void RemoveEmptyBlocksIterative(List<Block> blocks) {
+ // postorder traversal of cfg
+ // noting loop heads in [keep] and
+ // generating token information in [renameInfo]
+ Block startBlock = blocks[0];
+ var postorder = new List<Block>();
+ var keep = new HashSet<Block>();
+ var visited = new HashSet<Block>();
+ var grey = new HashSet<Block>();
+ var stack = new Stack<Block>();
+ Dictionary<Block, Block> renameInfo = new Dictionary<Block, Block>();
+
+ stack.Push(startBlock);
+ visited.Add(startBlock);
+ while (stack.Count != 0) {
+ var curr = stack.Pop();
+ if (grey.Contains(curr)) {
+ postorder.Add(curr);
+
+ // generate renameInfoForStartBlock
+ GotoCmd gtc = curr.TransferCmd as GotoCmd;
+ renameInfo[curr] = null;
+ if (gtc == null || gtc.labelTargets == null || gtc.labelTargets.Count == 0) {
+ if (curr.Cmds.Count == 0 && curr.tok.IsValid) {
+ renameInfo[curr] = curr;
+ }
+ } else {
+ if (curr.Cmds.Count == 0 || curr == startBlock) {
+ if (curr.tok.IsValid) {
+ renameInfo[curr] = curr;
+ } else {
+ HashSet<Block> successorRenameInfo = new HashSet<Block>();
+ foreach (Block s in gtc.labelTargets) {
+ if (keep.Contains(s)) {
+ successorRenameInfo.Add(null);
+ } else {
+ successorRenameInfo.Add(renameInfo[s]);
+ }
+ }
+ if (successorRenameInfo.Count == 1) {
+ renameInfo[curr] = successorRenameInfo.Single();
+ }
+ }
+ }
+ }
+ // end generate renameInfoForStartBlock
+
+ } else {
+ grey.Add(curr);
+ stack.Push(curr);
+ GotoCmd gtc = curr.TransferCmd as GotoCmd;
+ if (gtc == null || gtc.labelTargets == null || gtc.labelTargets.Count == 0) continue;
+ foreach (Block s in gtc.labelTargets) {
+ if (!visited.Contains(s)) {
+ visited.Add(s);
+ stack.Push(s);
+ } else if (grey.Contains(s) && !postorder.Contains(s)) { // s is a loop head
+ keep.Add(s);
+ }
+ }
+ }
+ }
+ keep.Add(startBlock);
+
+ foreach (Block b in postorder) {
+ if (!keep.Contains(b) && b.Cmds.Count == 0) {
+ GotoCmd bGtc = b.TransferCmd as GotoCmd;
+ foreach (Block p in b.Predecessors) {
+ GotoCmd pGtc = p.TransferCmd as GotoCmd;
+ Contract.Assert(pGtc != null);
+ pGtc.labelTargets.Remove(b);
+ pGtc.labelNames.Remove(b.Label);
+ }
+ if (bGtc == null || bGtc.labelTargets == null || bGtc.labelTargets.Count == 0) {
+ continue;
+ }
+
+ List<Block> successors = bGtc.labelTargets;
+
+ // Try to push token information if possible
+ if (b.tok.IsValid && successors.Count == 1 && b != renameInfo[startBlock]) {
+ var s = successors.Single();
+ if (!s.tok.IsValid) {
+ foreach (Block p in s.Predecessors) {
+ if (p != b) {
+ GotoCmd pGtc = p.TransferCmd as GotoCmd;
+ Contract.Assert(pGtc != null);
+ pGtc.labelTargets.Remove(s);
+ pGtc.labelNames.Remove(s.Label);
+ pGtc.labelTargets.Add(s);
+ pGtc.labelNames.Add(b.Label);
+ }
+ }
+ s.tok = b.tok;
+ s.Label = b.Label;
+ }
+ }
+
+ foreach (Block p in b.Predecessors) {
+ GotoCmd pGtc = p.TransferCmd as GotoCmd;
+ Contract.Assert(pGtc != null);
+ foreach (Block s in successors) {
+ if (!pGtc.labelTargets.Contains(s)) {
+ pGtc.labelTargets.Add(s);
+ pGtc.labelNames.Add(s.Label);
+ }
+ }
+ }
+ }
+ }
+
+ if (!startBlock.tok.IsValid && startBlock.Cmds.All(c => c is AssumeCmd)) {
+ if (renameInfo[startBlock] != null) {
+ startBlock.tok = renameInfo[startBlock].tok;
+ startBlock.Label = renameInfo[startBlock].Label;
+ }
+ }
+
+ }
+
+ /// <summary>
+ /// Remove the empty blocks reachable from the block.
+ /// It changes the visiting state of the blocks, so that if you want to visit again the blocks, you have to reset them...
+ /// </summary>
+ static List<Block> RemoveEmptyBlocks(Block b) {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.Result<List<Block>>() != null);
+
+ Contract.Assert(b.TraversingStatus == Block.VisitState.ToVisit);
+ Block renameInfo;
+ List<Block> retVal = removeEmptyBlocksWorker(b, true, out renameInfo);
+ if (renameInfo != null && !b.tok.IsValid) {
+ bool onlyAssumes = true;
+ foreach (Cmd c in b.Cmds) {
+ if (!(c is AssumeCmd)) {
+ onlyAssumes = false;
+ break;
+ }
+ }
+ if (onlyAssumes) {
+ b.tok = renameInfo.tok;
+ b.Label = renameInfo.Label;
+ }
+ }
+ return retVal;
+ }
+
+ /// <summary>
+ /// For every not-yet-visited block n reachable from b, change n's successors to skip empty nodes.
+ /// Return the *set* of blocks reachable from b without passing through a nonempty block.
+ /// The target of any backedge is counted as a nonempty block.
+ /// If renameInfoForStartBlock is non-null, it denotes an empty block with location information, and that
+ /// information would be appropriate to display
+ /// </summary>
+ private static List<Block> removeEmptyBlocksWorker(Block b, bool startNode, out Block renameInfoForStartBlock)
+ {
+ Contract.Requires(b != null);
+ Contract.Ensures(Contract.ValueAtReturn(out renameInfoForStartBlock) == null || Contract.ValueAtReturn(out renameInfoForStartBlock).tok.IsValid);
+ // ensures: b in result ==> renameInfoForStartBlock == null;
+
+ renameInfoForStartBlock = null;
+ List<Block> bs = new List<Block>();
+ GotoCmd gtc = b.TransferCmd as GotoCmd;
+
+ // b has no successors
+ if (gtc == null || gtc.labelTargets == null || gtc.labelTargets.Count == 0)
+ {
+ if (b.Cmds.Count != 0){ // only empty blocks are removed...
+ bs.Add(b);
+ } else if (b.tok.IsValid) {
+ renameInfoForStartBlock = b;
+ }
+ return bs;
+ }
+ else if (b.TraversingStatus == Block.VisitState.ToVisit) // if b has some successors and we have not seen it so far...
+ {
+ b.TraversingStatus = Block.VisitState.BeingVisited;
+
+ // Before recursing down to successors, make a sobering observation:
+ // If b has no commands and is not the start node, then it will see
+ // extinction (because it will not be included in the "return setOfSuccessors"
+ // statement below). In that case, if b has a location, then the location
+ // information would be lost. Hence, make an attempt to save the location
+ // by pushing the location onto b's successor. This can be done if (0) b has
+ // exactly one successor, (1) that successor has no location of its own, and
+ // (2) that successor has no other predecessors.
+ if (b.Cmds.Count == 0 && !startNode) {
+ // b is about to become extinct; try to save its name and location, if possible
+ if (b.tok.IsValid && gtc.labelTargets.Count == 1) {
+ Block succ = cce.NonNull(gtc.labelTargets[0]);
+ if (!succ.tok.IsValid && succ.Predecessors.Count == 1) {
+ succ.tok = b.tok;
+ succ.Label = b.Label;
+ }
+ }
+ }
+
+ // recursively call this method on each successor
+ // merge result into a *set* of blocks
+ HashSet<Block> mergedSuccessors = new HashSet<Block>();
+ int m = 0; // in the following loop, set renameInfoForStartBlock to the value that all recursive calls agree on, if possible; otherwise, null
+ foreach (Block dest in gtc.labelTargets){Contract.Assert(dest != null);
+ Block renameInfo;
+ List<Block> ys = removeEmptyBlocksWorker(dest, false, out renameInfo);
+ Contract.Assert(ys != null);
+ if (m == 0) {
+ renameInfoForStartBlock = renameInfo;
+ } else if (renameInfoForStartBlock != renameInfo) {
+ renameInfoForStartBlock = null;
+ }
+ foreach (Block successor in ys){
+ if (!mergedSuccessors.Contains(successor))
+ mergedSuccessors.Add(successor);
+ }
+ m++;
+ }
+ b.TraversingStatus = Block.VisitState.AlreadyVisited;
+
+ List<Block> setOfSuccessors = new List<Block>();
+ foreach (Block d in mergedSuccessors)
+ setOfSuccessors.Add(d);
+ if (b.Cmds.Count == 0 && !startNode) {
+ // b is about to become extinct
+ if (b.tok.IsValid) {
+ renameInfoForStartBlock = b;
+ }
+ return setOfSuccessors;
+ }
+ // otherwise, update the list of successors of b to be the blocks in setOfSuccessors
+ gtc.labelTargets = setOfSuccessors;
+ gtc.labelNames = new List<String>();
+ foreach (Block d in setOfSuccessors){
+ Contract.Assert(d != null);
+ gtc.labelNames.Add(d.Label);}
+ if (!startNode) {
+ renameInfoForStartBlock = null;
+ }
+ return new List<Block> { b };
+ }
+ else // b has some successors, but we are already visiting it, or we have already visited it...
+ {
+ return new List<Block> { b };
+ }
+ }
+
+ static void DumpMap(Hashtable /*Variable->Expr*/ map) {
+ Contract.Requires(map != null);
+ foreach (DictionaryEntry de in map) {
+ Variable v = (Variable)de.Key;
+ Contract.Assert(v != null);
+ Expr e = (Expr)de.Value;
+ Contract.Assert(e != null);
+ Console.Write(" ");
+ v.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false), 0);
+ Console.Write(" --> ");
+ e.Emit(new TokenTextWriter("<console>", Console.Out, /*setTokens=*/ false, /*pretty=*/ false));
+ Console.WriteLine();
+ }
+ }
+ }
+}
diff --git a/Source/VCGeneration/VCGeneration.csproj b/Source/VCGeneration/VCGeneration.csproj
index 74e1eef8..4d4fc374 100644
--- a/Source/VCGeneration/VCGeneration.csproj
+++ b/Source/VCGeneration/VCGeneration.csproj
@@ -1,230 +1,230 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>VCGeneration</RootNamespace>
- <AssemblyName>VCGeneration</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'" >Client</TargetFrameworkProfile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly>
- </CodeContractsCustomRewriterAssembly>
- <CodeContractsCustomRewriterClass>
- </CodeContractsCustomRewriterClass>
- <CodeContractsLibPaths>
- </CodeContractsLibPaths>
- <CodeContractsExtraRewriteOptions>
- </CodeContractsExtraRewriteOptions>
- <CodeContractsExtraAnalysisOptions>
- </CodeContractsExtraAnalysisOptions>
- <CodeContractsBaseLineFile>
- </CodeContractsBaseLineFile>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\z3apidebug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisRuleAssemblies>
- </CodeAnalysisRuleAssemblies>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>Migrated rules for VCGeneration.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\Checked\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <CodeAnalysisLogFile>bin\Debug\VCGeneration.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
- <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
- <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
- <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
- <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
- <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
- <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
- <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
- <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
- <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
- <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
- <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
- <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
- <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
- <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
- <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
- <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
- <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
- <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
- <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
- <CodeContractsCustomRewriterAssembly />
- <CodeContractsCustomRewriterClass />
- <CodeContractsLibPaths />
- <CodeContractsExtraRewriteOptions />
- <CodeContractsExtraAnalysisOptions />
- <CodeContractsBaseLineFile />
- <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
- <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
- <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
- <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
- <WarningLevel>4</WarningLevel>
- <Optimize>false</Optimize>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
- <DebugSymbols>true</DebugSymbols>
- <OutputPath>bin\QED\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <DebugType>full</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Check.cs" />
- <Compile Include="ConditionGeneration.cs" />
- <Compile Include="Context.cs" />
- <Compile Include="ExprExtensions.cs" />
- <Compile Include="FixedpointVC.cs" />
- <Compile Include="OrderingAxioms.cs" />
- <Compile Include="RPFP.cs" />
- <Compile Include="StratifiedVC.cs" />
- <Compile Include="VC.cs" />
- <Compile Include="..\version.cs" />
- <Compile Include="Wlp.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Basetypes\Basetypes.csproj">
- <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
- <Name>Basetypes</Name>
- </ProjectReference>
- <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
- <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
- <Name>CodeContractsExtender</Name>
- </ProjectReference>
- <ProjectReference Include="..\Core\Core.csproj">
- <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
- <Name>Core</Name>
- </ProjectReference>
- <ProjectReference Include="..\Graph\Graph.csproj">
- <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
- <Name>Graph</Name>
- </ProjectReference>
- <ProjectReference Include="..\Model\Model.csproj">
- <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
- <Name>Model</Name>
- </ProjectReference>
- <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
- <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
- <Name>ParserHelper</Name>
- </ProjectReference>
- <ProjectReference Include="..\VCExpr\VCExpr.csproj">
- <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
- <Name>VCExpr</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Properties\" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.21022</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{E1F10180-C7B9-4147-B51F-FA1B701966DC}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>VCGeneration</RootNamespace>
+ <AssemblyName>BoogieVCGeneration</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>..\InterimKey.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile Condition=" '$(OS)' == 'Windows_NT'">Client</TargetFrameworkProfile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsContainerAnalysis>False</CodeContractsContainerAnalysis>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly>
+ </CodeContractsCustomRewriterAssembly>
+ <CodeContractsCustomRewriterClass>
+ </CodeContractsCustomRewriterClass>
+ <CodeContractsLibPaths>
+ </CodeContractsLibPaths>
+ <CodeContractsExtraRewriteOptions>
+ </CodeContractsExtraRewriteOptions>
+ <CodeContractsExtraAnalysisOptions>
+ </CodeContractsExtraAnalysisOptions>
+ <CodeContractsBaseLineFile>
+ </CodeContractsBaseLineFile>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'z3apidebug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\z3apidebug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisRuleAssemblies>
+ </CodeAnalysisRuleAssemblies>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>Migrated rules for VCGeneration.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Checked|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Checked\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <CodeAnalysisLogFile>bin\Debug\VCGeneration.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+ <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+ <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+ <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+ <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+ <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+ <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+ <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+ <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+ <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+ <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+ <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+ <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+ <CodeContractsPointerObligations>False</CodeContractsPointerObligations>
+ <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+ <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+ <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+ <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+ <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs>
+ <CodeContractsCustomRewriterAssembly />
+ <CodeContractsCustomRewriterClass />
+ <CodeContractsLibPaths />
+ <CodeContractsExtraRewriteOptions />
+ <CodeContractsExtraAnalysisOptions />
+ <CodeContractsBaseLineFile />
+ <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+ <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+ <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+ <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+ <WarningLevel>4</WarningLevel>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'QED|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\QED\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Check.cs" />
+ <Compile Include="ConditionGeneration.cs" />
+ <Compile Include="Context.cs" />
+ <Compile Include="ExprExtensions.cs" />
+ <Compile Include="FixedpointVC.cs" />
+ <Compile Include="OrderingAxioms.cs" />
+ <Compile Include="RPFP.cs" />
+ <Compile Include="StratifiedVC.cs" />
+ <Compile Include="VC.cs" />
+ <Compile Include="..\version.cs" />
+ <Compile Include="Wlp.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Basetypes\Basetypes.csproj">
+ <Project>{43DFAD18-3E35-4558-9BE2-CAFF6B5BA8A0}</Project>
+ <Name>Basetypes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\CodeContractsExtender\CodeContractsExtender.csproj">
+ <Project>{ACCC0156-0921-43ED-8F67-AD8BDC8CDE31}</Project>
+ <Name>CodeContractsExtender</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Core\Core.csproj">
+ <Project>{B230A69C-C466-4065-B9C1-84D80E76D802}</Project>
+ <Name>Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Graph\Graph.csproj">
+ <Project>{69A2B0B8-BCAC-4101-AE7A-556FCC58C06E}</Project>
+ <Name>Graph</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Model\Model.csproj">
+ <Project>{ACEF88D5-DADD-46DA-BAE1-2144D63F4C83}</Project>
+ <Name>Model</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\ParserHelper\ParserHelper.csproj">
+ <Project>{FCD3AC7F-9DFD-46C8-AB1E-09F0B0F16DC5}</Project>
+ <Name>ParserHelper</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\VCExpr\VCExpr.csproj">
+ <Project>{56FFDBCA-7D14-43B8-A6CA-22A20E417EE1}</Project>
+ <Name>VCExpr</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
- -->
-</Project>
+ -->
+</Project> \ No newline at end of file
diff --git a/Source/VCGeneration/Wlp.cs b/Source/VCGeneration/Wlp.cs
index 45e511f0..cad5914b 100644
--- a/Source/VCGeneration/Wlp.cs
+++ b/Source/VCGeneration/Wlp.cs
@@ -1,244 +1,286 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) Microsoft Corporation. All Rights Reserved.
-//
-//-----------------------------------------------------------------------------
-using System;
-using System.Collections;
-using Microsoft.Boogie;
-using Microsoft.Boogie.VCExprAST;
-using System.Diagnostics.Contracts;
-using System.Collections.Generic;
-using Microsoft.Basetypes;
-
-namespace VC {
- public class VCContext
- {
- [ContractInvariantMethod]
- void ObjectInvariant()
- {
- Contract.Invariant(Ctxt != null);
- }
-
- [Rep] public readonly Dictionary<int, Absy> Label2absy;
- [Rep] public readonly ProverContext Ctxt;
- public readonly VCExpr ControlFlowVariableExpr;
- public int AssertionCount; // counts the number of assertions for which Wlp has been computed
- public bool isPositiveContext;
-
- public VCContext(Dictionary<int, Absy> label2absy, ProverContext ctxt, bool isPositiveContext = true)
- {
- Contract.Requires(ctxt != null);
- this.Label2absy = label2absy;
- this.Ctxt = ctxt;
- this.isPositiveContext = isPositiveContext;
- }
-
- public VCContext(Dictionary<int, Absy> label2absy, ProverContext ctxt, VCExpr controlFlowVariableExpr, bool isPositiveContext = true)
- {
- Contract.Requires(ctxt != null);
- this.Label2absy = label2absy;
- this.Ctxt = ctxt;
- this.ControlFlowVariableExpr = controlFlowVariableExpr;
- this.isPositiveContext = isPositiveContext;
- }
- }
-
- #region A class to compute wlp of a passive command program
-
- public class Wlp
- {
- public static VCExpr Block(Block b, VCExpr N, VCContext ctxt)
- //modifies ctxt.*;
- {
- Contract.Requires(b != null);
- Contract.Requires(N != null);
- Contract.Requires(ctxt != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpressionGenerator gen = ctxt.Ctxt.ExprGen;
- Contract.Assert(gen != null);
-
- VCExpr res = N;
-
- for (int i = b.Cmds.Count; --i >= 0; )
- {
- res = Cmd(b, cce.NonNull( b.Cmds[i]), res, ctxt);
- }
-
- int id = b.UniqueId;
- if (ctxt.Label2absy != null) {
- ctxt.Label2absy[id] = b;
- }
-
- try {
- cce.BeginExpose(ctxt);
- if (ctxt.Label2absy == null) {
- return res;
- }
- else {
- return gen.Implies(gen.LabelPos(cce.NonNull(id.ToString()), VCExpressionGenerator.True), res);
- }
- } finally {
- cce.EndExpose();
- }
- }
-
- /// <summary>
- /// Computes the wlp for an assert or assume command "cmd".
- /// </summary>
- public static VCExpr Cmd(Block b, Cmd cmd, VCExpr N, VCContext ctxt) {
- Contract.Requires(cmd != null);
- Contract.Requires(N != null);
- Contract.Requires(ctxt != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- VCExpressionGenerator gen = ctxt.Ctxt.ExprGen;
- Contract.Assert(gen != null);
- if (cmd is AssertCmd) {
- AssertCmd ac = (AssertCmd)cmd;
-
- var isFullyVerified = false;
- if (ac.VerifiedUnder != null)
- {
- var litExpr = ac.VerifiedUnder as LiteralExpr;
- isFullyVerified = litExpr != null && litExpr.IsTrue;
- }
-
- if (!isFullyVerified)
- {
- ctxt.Ctxt.BoogieExprTranslator.isPositiveContext = !ctxt.Ctxt.BoogieExprTranslator.isPositiveContext;
- }
-
- VCExpr C = ctxt.Ctxt.BoogieExprTranslator.Translate(ac.Expr);
-
- VCExpr VU = null;
- if (!isFullyVerified)
- {
- if (ac.VerifiedUnder != null)
- {
- VU = ctxt.Ctxt.BoogieExprTranslator.Translate(ac.VerifiedUnder);
- }
- ctxt.Ctxt.BoogieExprTranslator.isPositiveContext = !ctxt.Ctxt.BoogieExprTranslator.isPositiveContext;
- }
-
- VCExpr R = null;
- if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) {
- R = gen.Implies(C, N);
- } else {
- var subsumption = Subsumption(ac);
- if (subsumption == CommandLineOptions.SubsumptionOption.Always
- || (subsumption == CommandLineOptions.SubsumptionOption.NotForQuantifiers && !(C is VCExprQuantifier)))
- {
- N = gen.ImpliesSimp(C, N, false);
- }
-
- if (isFullyVerified)
- {
- return N;
- }
- else if (VU != null)
- {
- C = gen.OrSimp(VU, C);
- }
-
- int id = ac.UniqueId;
- if (ctxt.Label2absy != null)
- {
- ctxt.Label2absy[id] = ac;
- }
-
- ctxt.AssertionCount++;
-
- if (ctxt.ControlFlowVariableExpr == null) {
- Contract.Assert(ctxt.Label2absy != null);
- R = gen.AndSimp(gen.LabelNeg(cce.NonNull(id.ToString()), C), N);
- } else {
- VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(ctxt.ControlFlowVariableExpr, gen.Integer(BigNum.FromInt(b.UniqueId)));
- Contract.Assert(controlFlowFunctionAppl != null);
- VCExpr assertFailure = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(-ac.UniqueId)));
- if (ctxt.Label2absy == null) {
- R = gen.AndSimp(gen.Implies(assertFailure, C), N);
- } else {
- R = gen.AndSimp(gen.LabelNeg(cce.NonNull(id.ToString()), gen.Implies(assertFailure, C)), N);
- }
- }
- }
- return R;
- } else if (cmd is AssumeCmd) {
- AssumeCmd ac = (AssumeCmd)cmd;
-
- if (CommandLineOptions.Clo.StratifiedInlining > 0) {
- // Label the assume if it is a procedure call
- NAryExpr naryExpr = ac.Expr as NAryExpr;
- if (naryExpr != null) {
- if (naryExpr.Fun is FunctionCall) {
- int id = ac.UniqueId;
- ctxt.Label2absy[id] = ac;
- return gen.ImpliesSimp(gen.LabelPos(cce.NonNull("si_fcall_" + id.ToString()), ctxt.Ctxt.BoogieExprTranslator.Translate(ac.Expr)), N);
- }
- }
- }
- return gen.ImpliesSimp(ctxt.Ctxt.BoogieExprTranslator.Translate(ac.Expr), N);
- } else {
- Console.WriteLine(cmd.ToString());
- Contract.Assert(false); throw new cce.UnreachableException(); // unexpected command
- }
- }
-
- public static CommandLineOptions.SubsumptionOption Subsumption(AssertCmd ac) {
- Contract.Requires(ac != null);
- int n = QKeyValue.FindIntAttribute(ac.Attributes, "subsumption", -1);
- switch (n) {
- case 0: return CommandLineOptions.SubsumptionOption.Never;
- case 1: return CommandLineOptions.SubsumptionOption.NotForQuantifiers;
- case 2: return CommandLineOptions.SubsumptionOption.Always;
- default: return CommandLineOptions.Clo.UseSubsumption;
- }
- }
-
- public static VCExpr RegExpr(RE r, VCExpr N, VCContext ctxt)
- {
- Contract.Requires(r != null);
- Contract.Requires(N != null);
- Contract.Requires(ctxt != null);
- Contract.Ensures(Contract.Result<VCExpr>() != null);
-
- if ( r is AtomicRE )
- {
- AtomicRE ar = (AtomicRE) r;
- return Block(ar.b, N, ctxt);
- }
- else if ( r is Sequential )
- {
- Sequential s = (Sequential) r;
- return RegExpr(s.first, RegExpr(s.second, N, ctxt), ctxt);
- }
- else if ( r is Choice )
- {
- Choice ch = (Choice) r;
- VCExpr res;
- if (ch.rs == null || ch.rs.Count==0)
- {
- res = N;
- }
- else
- {
- VCExpr currentWLP = RegExpr(cce.NonNull(ch.rs[0]), N, ctxt);
- for (int i = 1, n = ch.rs.Count; i < n; i++)
- {
- currentWLP = ctxt.Ctxt.ExprGen.And(currentWLP, RegExpr(cce.NonNull(ch.rs[i]), N, ctxt));
- }
- res = currentWLP;
- }
- return res;
- }
- else
- {
- Contract.Assert(false);throw new cce.UnreachableException(); // unexpected RE subtype
- }
- }
- }
- #endregion
-
-}
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//-----------------------------------------------------------------------------
+using System;
+using System.Collections;
+using Microsoft.Boogie;
+using Microsoft.Boogie.VCExprAST;
+using System.Diagnostics.Contracts;
+using System.Collections.Generic;
+using Microsoft.Basetypes;
+
+namespace VC {
+ public class VCContext
+ {
+ [ContractInvariantMethod]
+ void ObjectInvariant()
+ {
+ Contract.Invariant(Ctxt != null);
+ }
+
+ [Rep] public readonly Dictionary<int, Absy> Label2absy;
+ [Rep] public readonly ProverContext Ctxt;
+ public readonly VCExpr ControlFlowVariableExpr;
+ public int AssertionCount; // counts the number of assertions for which Wlp has been computed
+ public bool isPositiveContext;
+
+ public VCContext(Dictionary<int, Absy> label2absy, ProverContext ctxt, bool isPositiveContext = true)
+ {
+ Contract.Requires(ctxt != null);
+ this.Label2absy = label2absy;
+ this.Ctxt = ctxt;
+ this.isPositiveContext = isPositiveContext;
+ }
+
+ public VCContext(Dictionary<int, Absy> label2absy, ProverContext ctxt, VCExpr controlFlowVariableExpr, bool isPositiveContext = true)
+ {
+ Contract.Requires(ctxt != null);
+ this.Label2absy = label2absy;
+ this.Ctxt = ctxt;
+ this.ControlFlowVariableExpr = controlFlowVariableExpr;
+ this.isPositiveContext = isPositiveContext;
+ }
+ }
+
+ #region A class to compute wlp of a passive command program
+
+ public class Wlp
+ {
+ public static VCExpr Block(Block b, VCExpr N, VCContext ctxt)
+ //modifies ctxt.*;
+ {
+ Contract.Requires(b != null);
+ Contract.Requires(N != null);
+ Contract.Requires(ctxt != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpressionGenerator gen = ctxt.Ctxt.ExprGen;
+ Contract.Assert(gen != null);
+
+ VCExpr res = N;
+
+ for (int i = b.Cmds.Count; --i >= 0; )
+ {
+ res = Cmd(b, cce.NonNull( b.Cmds[i]), res, ctxt);
+ }
+
+ int id = b.UniqueId;
+ if (ctxt.Label2absy != null) {
+ ctxt.Label2absy[id] = b;
+ }
+
+ try {
+ cce.BeginExpose(ctxt);
+ if (ctxt.Label2absy == null) {
+ return res;
+ }
+ else {
+ return gen.Implies(gen.LabelPos(cce.NonNull(id.ToString()), VCExpressionGenerator.True), res);
+ }
+ } finally {
+ cce.EndExpose();
+ }
+ }
+
+ /// <summary>
+ /// Computes the wlp for an assert or assume command "cmd".
+ /// </summary>
+ internal static VCExpr Cmd(Block b, Cmd cmd, VCExpr N, VCContext ctxt) {
+ Contract.Requires(cmd != null);
+ Contract.Requires(N != null);
+ Contract.Requires(ctxt != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ VCExpressionGenerator gen = ctxt.Ctxt.ExprGen;
+ Contract.Assert(gen != null);
+ if (cmd is AssertCmd) {
+ AssertCmd ac = (AssertCmd)cmd;
+
+ var isFullyVerified = false;
+ if (ac.VerifiedUnder != null)
+ {
+ var litExpr = ac.VerifiedUnder as LiteralExpr;
+ isFullyVerified = litExpr != null && litExpr.IsTrue;
+ }
+
+ if (!isFullyVerified)
+ {
+ ctxt.Ctxt.BoogieExprTranslator.isPositiveContext = !ctxt.Ctxt.BoogieExprTranslator.isPositiveContext;
+ }
+
+ VCExpr C = ctxt.Ctxt.BoogieExprTranslator.Translate(ac.Expr);
+
+ VCExpr VU = null;
+ if (!isFullyVerified)
+ {
+ if (ac.VerifiedUnder != null)
+ {
+ VU = ctxt.Ctxt.BoogieExprTranslator.Translate(ac.VerifiedUnder);
+
+ if (CommandLineOptions.Clo.RunDiagnosticsOnTimeout)
+ {
+ ctxt.Ctxt.TimeoutDiagnosticIDToAssertion[ctxt.Ctxt.TimoutDiagnosticsCount] = new Tuple<AssertCmd,TransferCmd>(ac, b.TransferCmd);
+ VU = gen.Or(VU, gen.Function(VCExpressionGenerator.TimeoutDiagnosticsOp, gen.Integer(BigNum.FromInt(ctxt.Ctxt.TimoutDiagnosticsCount++))));
+ }
+ }
+ else if (CommandLineOptions.Clo.RunDiagnosticsOnTimeout)
+ {
+ ctxt.Ctxt.TimeoutDiagnosticIDToAssertion[ctxt.Ctxt.TimoutDiagnosticsCount] = new Tuple<AssertCmd,TransferCmd>(ac, b.TransferCmd);
+ VU = gen.Function(VCExpressionGenerator.TimeoutDiagnosticsOp, gen.Integer(BigNum.FromInt(ctxt.Ctxt.TimoutDiagnosticsCount++)));
+ }
+ ctxt.Ctxt.BoogieExprTranslator.isPositiveContext = !ctxt.Ctxt.BoogieExprTranslator.isPositiveContext;
+ }
+
+ VCExpr R = null;
+ if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) {
+ R = gen.Implies(C, N);
+ } else {
+ var subsumption = Subsumption(ac);
+ if (subsumption == CommandLineOptions.SubsumptionOption.Always
+ || (subsumption == CommandLineOptions.SubsumptionOption.NotForQuantifiers && !(C is VCExprQuantifier)))
+ {
+ N = gen.ImpliesSimp(C, N, false);
+ }
+
+ if (isFullyVerified)
+ {
+ return N;
+ }
+ else if (VU != null)
+ {
+ C = gen.OrSimp(VU, C);
+ }
+
+ int id = ac.UniqueId;
+ if (ctxt.Label2absy != null)
+ {
+ ctxt.Label2absy[id] = ac;
+ }
+
+ ctxt.AssertionCount++;
+
+ if (ctxt.ControlFlowVariableExpr == null) {
+ Contract.Assert(ctxt.Label2absy != null);
+ R = gen.AndSimp(gen.LabelNeg(cce.NonNull(id.ToString()), C), N);
+ } else {
+ VCExpr controlFlowFunctionAppl = gen.ControlFlowFunctionApplication(ctxt.ControlFlowVariableExpr, gen.Integer(BigNum.FromInt(b.UniqueId)));
+ Contract.Assert(controlFlowFunctionAppl != null);
+ VCExpr assertFailure = gen.Eq(controlFlowFunctionAppl, gen.Integer(BigNum.FromInt(-ac.UniqueId)));
+ if (ctxt.Label2absy == null) {
+ R = gen.AndSimp(gen.Implies(assertFailure, C), N);
+ } else {
+ R = gen.AndSimp(gen.LabelNeg(cce.NonNull(id.ToString()), gen.Implies(assertFailure, C)), N);
+ }
+ }
+ }
+ return R;
+ } else if (cmd is AssumeCmd) {
+ AssumeCmd ac = (AssumeCmd)cmd;
+
+ if (CommandLineOptions.Clo.StratifiedInlining > 0) {
+ // Label the assume if it is a procedure call
+ NAryExpr naryExpr = ac.Expr as NAryExpr;
+ if (naryExpr != null) {
+ if (naryExpr.Fun is FunctionCall) {
+ int id = ac.UniqueId;
+ ctxt.Label2absy[id] = ac;
+ return MaybeWrapWithOptimization(ctxt, gen, ac.Attributes, gen.ImpliesSimp(gen.LabelPos(cce.NonNull("si_fcall_" + id.ToString()), ctxt.Ctxt.BoogieExprTranslator.Translate(ac.Expr)), N));
+ }
+ }
+ }
+ var expr = ctxt.Ctxt.BoogieExprTranslator.Translate(ac.Expr);
+
+ var aid = QKeyValue.FindStringAttribute(ac.Attributes, "id");
+ if (aid != null)
+ {
+ var isTry = QKeyValue.FindBoolAttribute(ac.Attributes, "try");
+ var v = gen.Variable((isTry ? "try$$" : "assume$$") + aid, Microsoft.Boogie.Type.Bool);
+ expr = gen.Function(VCExpressionGenerator.NamedAssumeOp, v, gen.ImpliesSimp(v, expr));
+ }
+ var soft = QKeyValue.FindBoolAttribute(ac.Attributes, "soft");
+ var softWeight = QKeyValue.FindIntAttribute(ac.Attributes, "soft", 0);
+ if ((soft || 0 < softWeight) && aid != null)
+ {
+ var v = gen.Variable("soft$$" + aid, Microsoft.Boogie.Type.Bool);
+ expr = gen.Function(new VCExprSoftOp(Math.Max(softWeight, 1)), v, gen.ImpliesSimp(v, expr));
+ }
+ return MaybeWrapWithOptimization(ctxt, gen, ac.Attributes, gen.ImpliesSimp(expr, N));
+ } else {
+ Console.WriteLine(cmd.ToString());
+ Contract.Assert(false); throw new cce.UnreachableException(); // unexpected command
+ }
+ }
+
+ private static VCExpr MaybeWrapWithOptimization(VCContext ctxt, VCExpressionGenerator gen, QKeyValue attrs, VCExpr expr)
+ {
+ var min = QKeyValue.FindExprAttribute(attrs, "minimize");
+ if (min != null)
+ {
+ expr = gen.Function(VCExpressionGenerator.MinimizeOp, ctxt.Ctxt.BoogieExprTranslator.Translate(min), expr);
+ }
+ var max = QKeyValue.FindExprAttribute(attrs, "maximize");
+ if (max != null)
+ {
+ expr = gen.Function(VCExpressionGenerator.MaximizeOp, ctxt.Ctxt.BoogieExprTranslator.Translate(max), expr);
+ }
+ return expr;
+ }
+
+ public static CommandLineOptions.SubsumptionOption Subsumption(AssertCmd ac) {
+ Contract.Requires(ac != null);
+ int n = QKeyValue.FindIntAttribute(ac.Attributes, "subsumption", -1);
+ switch (n) {
+ case 0: return CommandLineOptions.SubsumptionOption.Never;
+ case 1: return CommandLineOptions.SubsumptionOption.NotForQuantifiers;
+ case 2: return CommandLineOptions.SubsumptionOption.Always;
+ default: return CommandLineOptions.Clo.UseSubsumption;
+ }
+ }
+
+ public static VCExpr RegExpr(RE r, VCExpr N, VCContext ctxt)
+ {
+ Contract.Requires(r != null);
+ Contract.Requires(N != null);
+ Contract.Requires(ctxt != null);
+ Contract.Ensures(Contract.Result<VCExpr>() != null);
+
+ if ( r is AtomicRE )
+ {
+ AtomicRE ar = (AtomicRE) r;
+ return Block(ar.b, N, ctxt);
+ }
+ else if ( r is Sequential )
+ {
+ Sequential s = (Sequential) r;
+ return RegExpr(s.first, RegExpr(s.second, N, ctxt), ctxt);
+ }
+ else if ( r is Choice )
+ {
+ Choice ch = (Choice) r;
+ VCExpr res;
+ if (ch.rs == null || ch.rs.Count==0)
+ {
+ res = N;
+ }
+ else
+ {
+ VCExpr currentWLP = RegExpr(cce.NonNull(ch.rs[0]), N, ctxt);
+ for (int i = 1, n = ch.rs.Count; i < n; i++)
+ {
+ currentWLP = ctxt.Ctxt.ExprGen.And(currentWLP, RegExpr(cce.NonNull(ch.rs[i]), N, ctxt));
+ }
+ res = currentWLP;
+ }
+ return res;
+ }
+ else
+ {
+ Contract.Assert(false);throw new cce.UnreachableException(); // unexpected RE subtype
+ }
+ }
+ }
+ #endregion
+
+}
diff --git a/Source/VCGeneration/cce.cs b/Source/VCGeneration/cce.cs
index 23d79815..42cabfcb 100644
--- a/Source/VCGeneration/cce.cs
+++ b/Source/VCGeneration/cce.cs
@@ -1,105 +1,105 @@
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Text;
-using Microsoft.Boogie;
-
- /// <summary>
- /// A class containing static methods to extend the functionality of Code Contracts
- /// </summary>
-
-public static class cce {
- [Pure]
- public static T NonNull<T>(T t) {
- Contract.Assert(t != null);
- return t;
- }
- [Pure]
- public static bool NonNullElements<T>(IEnumerable<T> collection) {
- return collection != null && Contract.ForAll(collection, c => c != null);
- }
- [Pure]
- public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
- return collection != null && NonNullElements(collection.Keys) && NonNullElements(collection.Values);
- }
- [Pure]
- public static bool NonNullElements(VariableSeq collection) {
- return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
- }
- [Pure]
- public static void BeginExpose(object o) {
- }
- [Pure]
- public static void EndExpose() {
- }
- [Pure]
- public static bool IsPeerConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsConsistent(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposable(object o) {
- return true;
- }
- [Pure]
- public static bool IsExposed(object o) {
- return true;
- }
- public static class Owner {
- [Pure]
- public static bool Same(object o, object p) {
- return true;
- }
- [Pure]
- public static void AssignSame(object o, object p) {
- }
- [Pure]
- public static object ElementProxy(object o) {
- return o;
- }
- [Pure]
- public static bool None(object o) {
- return true;
- }
- }
- [Pure]
- public static void LoopInvariant(bool p) {
- Contract.Assert(p);
- }
-
- public class UnreachableException : Exception {
- public UnreachableException() {
- }
- }
-}
-
-public class PeerAttribute : System.Attribute {
-}
-public class RepAttribute : System.Attribute {
-}
-public class CapturedAttribute : System.Attribute {
-}
-public class NotDelayedAttribute : System.Attribute {
-}
-public class NoDefaultContractAttribute : System.Attribute {
-}
-public class VerifyAttribute : System.Attribute {
- public VerifyAttribute(bool b) {
-
- }
-}
-public class StrictReadonlyAttribute : System.Attribute {
- }
-public class AdditiveAttribute : System.Attribute {
-}
-public class ReadsAttribute : System.Attribute {
- public enum Reads {
- Nothing,
- };
- public ReadsAttribute(object o) {
- }
-}
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Text;
+using Microsoft.Boogie;
+
+ /// <summary>
+ /// A class containing static methods to extend the functionality of Code Contracts
+ /// </summary>
+
+public static class cce {
+ [Pure]
+ public static T NonNull<T>(T t) {
+ Contract.Assert(t != null);
+ return t;
+ }
+ [Pure]
+ public static bool NonNullElements<T>(IEnumerable<T> collection) {
+ return collection != null && Contract.ForAll(collection, c => c != null);
+ }
+ [Pure]
+ public static bool NonNullElements<TKey, TValue>(IDictionary<TKey, TValue> collection) {
+ return collection != null && NonNullElements(collection.Keys) && NonNullElements(collection.Values);
+ }
+ [Pure]
+ public static bool NonNullElements(VariableSeq collection) {
+ return collection != null && Contract.ForAll(0, collection.Length, i => collection[i] != null);
+ }
+ [Pure]
+ public static void BeginExpose(object o) {
+ }
+ [Pure]
+ public static void EndExpose() {
+ }
+ [Pure]
+ public static bool IsPeerConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsConsistent(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposable(object o) {
+ return true;
+ }
+ [Pure]
+ public static bool IsExposed(object o) {
+ return true;
+ }
+ public static class Owner {
+ [Pure]
+ public static bool Same(object o, object p) {
+ return true;
+ }
+ [Pure]
+ public static void AssignSame(object o, object p) {
+ }
+ [Pure]
+ public static object ElementProxy(object o) {
+ return o;
+ }
+ [Pure]
+ public static bool None(object o) {
+ return true;
+ }
+ }
+ [Pure]
+ public static void LoopInvariant(bool p) {
+ Contract.Assert(p);
+ }
+
+ public class UnreachableException : Exception {
+ public UnreachableException() {
+ }
+ }
+}
+
+public class PeerAttribute : System.Attribute {
+}
+public class RepAttribute : System.Attribute {
+}
+public class CapturedAttribute : System.Attribute {
+}
+public class NotDelayedAttribute : System.Attribute {
+}
+public class NoDefaultContractAttribute : System.Attribute {
+}
+public class VerifyAttribute : System.Attribute {
+ public VerifyAttribute(bool b) {
+
+ }
+}
+public class StrictReadonlyAttribute : System.Attribute {
+ }
+public class AdditiveAttribute : System.Attribute {
+}
+public class ReadsAttribute : System.Attribute {
+ public enum Reads {
+ Nothing,
+ };
+ public ReadsAttribute(object o) {
+ }
+}
diff --git a/Source/version.cs b/Source/version.cs
index b5d63a7f..1a41797f 100644
--- a/Source/version.cs
+++ b/Source/version.cs
@@ -1,4 +1,4 @@
-using System.Reflection;
-// Version 2.3.0; year 2008+6, month 10, day 16
-[assembly: AssemblyVersion("2.3.0.61016")]
-[assembly: AssemblyFileVersion("2.3.0.61016")]
+using System.Reflection;
+// Version 2.3.0; year 2008+6, month 10, day 16
+[assembly: AssemblyVersion("2.3.0.61016")]
+[assembly: AssemblyFileVersion("2.3.0.61016")]
diff --git a/Source/version.ssc b/Source/version.ssc
deleted file mode 100644
index fd211b1c..00000000
--- a/Source/version.ssc
+++ /dev/null
@@ -1,12 +0,0 @@
-// ==++==
-//
-//
-//
-// ==--==
-// Warning: Automatically generated file. DO NOT EDIT
-// Generated at Dienstag, 5. Juli 2011 11:26:45
-
-using System.Reflection;
-[assembly: AssemblyVersion("2.2.30705.1126")]
-[assembly: AssemblyFileVersion("2.2.30705.1126")]
-
diff --git a/Test/AbsHoudini/Answer b/Test/AbsHoudini/Answer
index f0136d80..2ab37f22 100644
--- a/Test/AbsHoudini/Answer
+++ b/Test/AbsHoudini/Answer
@@ -1,489 +1,489 @@
-
--------------------- houd1.bpl --------------------
-function {:existential true} {:inline} b1(x: bool) : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd2.bpl --------------------
-function {:existential true} {:inline} Assert(x: bool) : bool
-{
- true
-}
-function {:existential true} {:inline} b1(x: bool) : bool
-{
- true
-}
-function {:existential true} {:inline} b2(x: bool) : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd3.bpl --------------------
-function {:existential true} {:inline} Assert(x: bool) : bool
-{
- x
-}
-function {:existential true} {:inline} b1(x: bool) : bool
-{
- true
-}
-function {:existential true} {:inline} b2(x: bool) : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd4.bpl --------------------
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-function {:existential true} {:inline} b1() : bool
-{
- false
-}
-function {:existential true} {:inline} b2(x: bool) : bool
-{
- false
-}
-function {:existential true} {:inline} b3(x: bool) : bool
-{
- false
-}
-function {:existential true} {:inline} b4(x: bool) : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd5.bpl --------------------
-function {:existential true} {:inline} b1(x: bool) : bool
-{
- !x
-}
-function {:existential true} {:inline} b2(x: bool) : bool
-{
- x
-}
-function {:existential true} {:inline} b3(x: bool) : bool
-{
- !x
-}
-function {:existential true} {:inline} b4(x: bool) : bool
-{
- x
-}
-function {:existential true} {:inline} b5() : bool
-{
- false
-}
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd6.bpl --------------------
-function {:existential true} {:inline} b1() : bool
-{
- true
-}
-function {:existential true} {:inline} b2() : bool
-{
- true
-}
-function {:existential true} {:inline} b3() : bool
-{
- true
-}
-function {:existential true} {:inline} b4() : bool
-{
- true
-}
-function {:existential true} {:inline} b5() : bool
-{
- true
-}
-function {:existential true} {:inline} b6() : bool
-{
- true
-}
-function {:existential true} {:inline} b7() : bool
-{
- true
-}
-function {:existential true} {:inline} b8() : bool
-{
- true
-}
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd7.bpl --------------------
-function {:existential true} {:inline} b1() : bool
-{
- false
-}
-function {:existential true} {:inline} b2() : bool
-{
- true
-}
-function {:existential true} {:inline} b3() : bool
-{
- true
-}
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd8.bpl --------------------
-function {:existential true} {:inline} b1() : bool
-{
- false
-}
-function {:existential true} {:inline} b2() : bool
-{
- true
-}
-function {:existential true} {:inline} b3() : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd10.bpl --------------------
-function {:existential true} {:inline} b1() : bool
-{
- true
-}
-function {:existential true} {:inline} b2() : bool
-{
- false
-}
-function {:existential true} {:inline} b3() : bool
-{
- true
-}
-function {:existential true} {:inline} Assert() : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd11.bpl --------------------
-function {:existential true} {:inline} Assert() : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- houd12.bpl --------------------
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-function {:existential true} {:inline} b1() : bool
-{
- true
-}
-function {:existential true} {:inline} b2() : bool
-{
- false
-}
-function {:existential true} {:inline} b3() : bool
-{
- false
-}
-function {:existential true} {:inline} b4() : bool
-{
- false
-}
-function {:existential true} {:inline} b5() : bool
-{
- false
-}
-function {:existential true} {:inline} b6() : bool
-{
- true
-}
-function {:existential true} {:inline} b7() : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- fail1.bpl --------------------
-function {:existential true} {:inline} b1(x: bool) : bool
-{
- false
-}
-fail1.bpl(16,3): Error BP5001: This assertion might not hold.
-Execution trace:
- fail1.bpl(11,3): anon0
- fail1.bpl(12,11): anon4_Then
- fail1.bpl(16,3): anon3
-
-Boogie program verifier finished with 0 verified, 1 error
-.
--------------------- test1.bpl --------------------
-function {:existential true} {:inline} b0() : bool
-{
- false
-}
-function {:existential true} {:inline} b1() : bool
-{
- true
-}
-function {:existential true} {:inline} b2() : bool
-{
- true
-}
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- test2.bpl --------------------
-function {:existential true} {:inline} b0() : bool
-{
- false
-}
-function {:existential true} {:inline} b1() : bool
-{
- true
-}
-function {:existential true} {:inline} b2() : bool
-{
- true
-}
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- test7.bpl --------------------
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- test8.bpl --------------------
-function {:existential true} {:inline} Assert() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- test9.bpl --------------------
-function {:existential true} {:inline} b1() : bool
-{
- true
-}
-function {:existential true} {:inline} b2() : bool
-{
- true
-}
-function {:existential true} {:inline} b3() : bool
-{
- true
-}
-function {:existential true} {:inline} b4() : bool
-{
- false
-}
-function {:existential true} {:inline} b5() : bool
-{
- true
-}
-function {:existential true} {:inline} b6() : bool
-{
- false
-}
-function {:existential true} {:inline} b7() : bool
-{
- true
-}
-function {:existential true} {:inline} b8() : bool
-{
- true
-}
-function {:existential true} {:inline} b9() : bool
-{
- true
-}
-function {:existential true} {:inline} b10() : bool
-{
- false
-}
-function {:existential true} {:inline} b11() : bool
-{
- true
-}
-function {:existential true} {:inline} b12() : bool
-{
- false
-}
-function {:existential true} {:inline} b13() : bool
-{
- true
-}
-function {:existential true} {:inline} b14() : bool
-{
- true
-}
-function {:existential true} {:inline} b15() : bool
-{
- true
-}
-function {:existential true} {:inline} b16() : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- test10.bpl --------------------
-function {:existential true} {:inline} b1() : bool
-{
- false
-}
-function {:existential true} {:inline} b2() : bool
-{
- false
-}
-function {:existential true} {:inline} b3() : bool
-{
- false
-}
-function {:existential true} {:inline} b4() : bool
-{
- false
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- pred1.bpl --------------------
-function {:existential true} {:inline} b0(x: bool, y: bool) : bool
-{
- x && !y
-}
-function {:existential true} {:inline} b1(x: bool, y: bool) : bool
-{
- (y || x) && (!x || !y)
-}
-function {:existential true} {:inline} b2(x: bool, y: bool) : bool
-{
- x && !y
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- pred2.bpl --------------------
-function {:existential true} {:inline} b0(x: bool) : bool
-{
- x
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- pred3.bpl --------------------
-function {:existential true} {:inline} b0(x: bool, y: bool) : bool
-{
- x && !y
-}
-function {:existential true} {:inline} b1(x: bool, y: bool) : bool
-{
- (y || x) && (!x || !y)
-}
-function {:existential true} {:inline} b2(x: bool, y: bool) : bool
-{
- x && !y
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- pred4.bpl --------------------
-function {:existential true} {:inline} b1(x: bool, y: bool) : bool
-{
- (y || x) && (!x || !y)
-}
-function {:existential true} {:absdomain "Intervals"} {:inline} b3(x: int) : bool
-{
- x >= 0 && x <= 0
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- pred5.bpl --------------------
-function {:existential true} {:inline} b1(x: bool) : bool
-{
- x
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- quant1.bpl --------------------
-function {:existential true} {:absdomain "IA[Intervals]"} {:inline} b1(x: int) : bool
-{
- x >= 0 && x <= 2
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- quant2.bpl --------------------
-function {:existential true} {:absdomain "Intervals"} {:inline} b1(x: int) : bool
-{
- x >= 0 && x <= 1
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- quant3.bpl --------------------
-function {:existential true} {:absdomain "Intervals"} {:inline} b1(x: int) : bool
-{
- x >= 0 && x <= 0
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- quant4.bpl --------------------
-function {:existential true} {:absdomain "IA[HoudiniConst]"} {:inline} b1() : bool
-{
- true
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
-.
--------------------- quant5.bpl --------------------
-function {:existential true} {:absdomain "Intervals"} {:inline} b1(x: int) : bool
-{
- x >= 5 && x <= 5
-}
-
-Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd1.bpl --------------------
+function {:existential true} {:inline} b1(x: bool) : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd2.bpl --------------------
+function {:existential true} {:inline} Assert(x: bool) : bool
+{
+ true
+}
+function {:existential true} {:inline} b1(x: bool) : bool
+{
+ true
+}
+function {:existential true} {:inline} b2(x: bool) : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd3.bpl --------------------
+function {:existential true} {:inline} Assert(x: bool) : bool
+{
+ x
+}
+function {:existential true} {:inline} b1(x: bool) : bool
+{
+ true
+}
+function {:existential true} {:inline} b2(x: bool) : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd4.bpl --------------------
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+function {:existential true} {:inline} b1() : bool
+{
+ false
+}
+function {:existential true} {:inline} b2(x: bool) : bool
+{
+ false
+}
+function {:existential true} {:inline} b3(x: bool) : bool
+{
+ false
+}
+function {:existential true} {:inline} b4(x: bool) : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd5.bpl --------------------
+function {:existential true} {:inline} b1(x: bool) : bool
+{
+ !x
+}
+function {:existential true} {:inline} b2(x: bool) : bool
+{
+ x
+}
+function {:existential true} {:inline} b3(x: bool) : bool
+{
+ !x
+}
+function {:existential true} {:inline} b4(x: bool) : bool
+{
+ x
+}
+function {:existential true} {:inline} b5() : bool
+{
+ false
+}
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd6.bpl --------------------
+function {:existential true} {:inline} b1() : bool
+{
+ true
+}
+function {:existential true} {:inline} b2() : bool
+{
+ true
+}
+function {:existential true} {:inline} b3() : bool
+{
+ true
+}
+function {:existential true} {:inline} b4() : bool
+{
+ true
+}
+function {:existential true} {:inline} b5() : bool
+{
+ true
+}
+function {:existential true} {:inline} b6() : bool
+{
+ true
+}
+function {:existential true} {:inline} b7() : bool
+{
+ true
+}
+function {:existential true} {:inline} b8() : bool
+{
+ true
+}
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd7.bpl --------------------
+function {:existential true} {:inline} b1() : bool
+{
+ false
+}
+function {:existential true} {:inline} b2() : bool
+{
+ true
+}
+function {:existential true} {:inline} b3() : bool
+{
+ true
+}
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd8.bpl --------------------
+function {:existential true} {:inline} b1() : bool
+{
+ false
+}
+function {:existential true} {:inline} b2() : bool
+{
+ true
+}
+function {:existential true} {:inline} b3() : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd10.bpl --------------------
+function {:existential true} {:inline} b1() : bool
+{
+ true
+}
+function {:existential true} {:inline} b2() : bool
+{
+ false
+}
+function {:existential true} {:inline} b3() : bool
+{
+ true
+}
+function {:existential true} {:inline} Assert() : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd11.bpl --------------------
+function {:existential true} {:inline} Assert() : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- houd12.bpl --------------------
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+function {:existential true} {:inline} b1() : bool
+{
+ true
+}
+function {:existential true} {:inline} b2() : bool
+{
+ false
+}
+function {:existential true} {:inline} b3() : bool
+{
+ false
+}
+function {:existential true} {:inline} b4() : bool
+{
+ false
+}
+function {:existential true} {:inline} b5() : bool
+{
+ false
+}
+function {:existential true} {:inline} b6() : bool
+{
+ true
+}
+function {:existential true} {:inline} b7() : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- fail1.bpl --------------------
+function {:existential true} {:inline} b1(x: bool) : bool
+{
+ false
+}
+fail1.bpl(16,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ fail1.bpl(11,3): anon0
+ fail1.bpl(12,11): anon4_Then
+ fail1.bpl(16,3): anon3
+
+Boogie program verifier finished with 0 verified, 1 error
+.
+-------------------- test1.bpl --------------------
+function {:existential true} {:inline} b0() : bool
+{
+ false
+}
+function {:existential true} {:inline} b1() : bool
+{
+ true
+}
+function {:existential true} {:inline} b2() : bool
+{
+ true
+}
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- test2.bpl --------------------
+function {:existential true} {:inline} b0() : bool
+{
+ false
+}
+function {:existential true} {:inline} b1() : bool
+{
+ true
+}
+function {:existential true} {:inline} b2() : bool
+{
+ true
+}
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- test7.bpl --------------------
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- test8.bpl --------------------
+function {:existential true} {:inline} Assert() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- test9.bpl --------------------
+function {:existential true} {:inline} b1() : bool
+{
+ true
+}
+function {:existential true} {:inline} b2() : bool
+{
+ true
+}
+function {:existential true} {:inline} b3() : bool
+{
+ true
+}
+function {:existential true} {:inline} b4() : bool
+{
+ false
+}
+function {:existential true} {:inline} b5() : bool
+{
+ true
+}
+function {:existential true} {:inline} b6() : bool
+{
+ false
+}
+function {:existential true} {:inline} b7() : bool
+{
+ true
+}
+function {:existential true} {:inline} b8() : bool
+{
+ true
+}
+function {:existential true} {:inline} b9() : bool
+{
+ true
+}
+function {:existential true} {:inline} b10() : bool
+{
+ false
+}
+function {:existential true} {:inline} b11() : bool
+{
+ true
+}
+function {:existential true} {:inline} b12() : bool
+{
+ false
+}
+function {:existential true} {:inline} b13() : bool
+{
+ true
+}
+function {:existential true} {:inline} b14() : bool
+{
+ true
+}
+function {:existential true} {:inline} b15() : bool
+{
+ true
+}
+function {:existential true} {:inline} b16() : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- test10.bpl --------------------
+function {:existential true} {:inline} b1() : bool
+{
+ false
+}
+function {:existential true} {:inline} b2() : bool
+{
+ false
+}
+function {:existential true} {:inline} b3() : bool
+{
+ false
+}
+function {:existential true} {:inline} b4() : bool
+{
+ false
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- pred1.bpl --------------------
+function {:existential true} {:inline} b0(x: bool, y: bool) : bool
+{
+ x && !y
+}
+function {:existential true} {:inline} b1(x: bool, y: bool) : bool
+{
+ (y || x) && (!x || !y)
+}
+function {:existential true} {:inline} b2(x: bool, y: bool) : bool
+{
+ x && !y
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- pred2.bpl --------------------
+function {:existential true} {:inline} b0(x: bool) : bool
+{
+ x
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- pred3.bpl --------------------
+function {:existential true} {:inline} b0(x: bool, y: bool) : bool
+{
+ x && !y
+}
+function {:existential true} {:inline} b1(x: bool, y: bool) : bool
+{
+ (y || x) && (!x || !y)
+}
+function {:existential true} {:inline} b2(x: bool, y: bool) : bool
+{
+ x && !y
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- pred4.bpl --------------------
+function {:existential true} {:inline} b1(x: bool, y: bool) : bool
+{
+ (y || x) && (!x || !y)
+}
+function {:existential true} {:absdomain "Intervals"} {:inline} b3(x: int) : bool
+{
+ x >= 0 && x <= 0
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- pred5.bpl --------------------
+function {:existential true} {:inline} b1(x: bool) : bool
+{
+ x
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- quant1.bpl --------------------
+function {:existential true} {:absdomain "IA[Intervals]"} {:inline} b1(x: int) : bool
+{
+ x >= 0 && x <= 2
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- quant2.bpl --------------------
+function {:existential true} {:absdomain "Intervals"} {:inline} b1(x: int) : bool
+{
+ x >= 0 && x <= 1
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- quant3.bpl --------------------
+function {:existential true} {:absdomain "Intervals"} {:inline} b1(x: int) : bool
+{
+ x >= 0 && x <= 0
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- quant4.bpl --------------------
+function {:existential true} {:absdomain "IA[HoudiniConst]"} {:inline} b1() : bool
+{
+ true
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
+.
+-------------------- quant5.bpl --------------------
+function {:existential true} {:absdomain "Intervals"} {:inline} b1(x: int) : bool
+{
+ x >= 5 && x <= 5
+}
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/AbsHoudini/f1.bpl b/Test/AbsHoudini/f1.bpl
index e5ed85ef..b7ee9011 100644
--- a/Test/AbsHoudini/f1.bpl
+++ b/Test/AbsHoudini/f1.bpl
@@ -1,32 +1,32 @@
-var g: int;
-
-procedure {:entrypoint} main()
- modifies g;
-{
- var x: int;
- var c: bool;
-
- g := 1;
-
- if(c) {
- g := g + 1;
- } else {
- g := 3;
- }
-
- call foo();
-
- if(old(g) == 0) { g := 1; }
-}
-
-procedure foo()
- modifies g;
-{
- g := g + 1;
-}
-
-procedure {:template} summaryTemplate();
- ensures {:post} g == old(g) + 1;
- ensures {:post} g == old(g) + 2;
- ensures {:post} g == old(g) + 3;
- ensures {:pre} old(g) == 0;
+var g: int;
+
+procedure {:entrypoint} main()
+ modifies g;
+{
+ var x: int;
+ var c: bool;
+
+ g := 1;
+
+ if(c) {
+ g := g + 1;
+ } else {
+ g := 3;
+ }
+
+ call foo();
+
+ if(old(g) == 0) { g := 1; }
+}
+
+procedure foo()
+ modifies g;
+{
+ g := g + 1;
+}
+
+procedure {:template} summaryTemplate();
+ ensures {:post} g == old(g) + 1;
+ ensures {:post} g == old(g) + 2;
+ ensures {:post} g == old(g) + 3;
+ ensures {:pre} old(g) == 0;
diff --git a/Test/AbsHoudini/fail1.bpl b/Test/AbsHoudini/fail1.bpl
index 02bcb8d3..4605c7e9 100644
--- a/Test/AbsHoudini/fail1.bpl
+++ b/Test/AbsHoudini/fail1.bpl
@@ -1,18 +1,18 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1(x: bool) : bool;
-
-var myVar: int;
-
-procedure foo (i:int)
-modifies myVar;
-ensures b1(myVar>0);
-{
- if (i>0) {
- myVar := 5;
- } else {
- myVar := 0;
- }
- assert false;
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1(x: bool) : bool;
+
+var myVar: int;
+
+procedure foo (i:int)
+modifies myVar;
+ensures b1(myVar>0);
+{
+ if (i>0) {
+ myVar := 5;
+ } else {
+ myVar := 0;
+ }
+ assert false;
+}
+
diff --git a/Test/AbsHoudini/houd1.bpl b/Test/AbsHoudini/houd1.bpl
index 0bd4831a..eeab11aa 100644
--- a/Test/AbsHoudini/houd1.bpl
+++ b/Test/AbsHoudini/houd1.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1(x: bool) : bool;
-
-var myVar: int;
-
-procedure foo (i:int)
-modifies myVar;
-// comment
-ensures b1(myVar>0);
-{
- if (i>0) {
- myVar := 5;
- } else {
- myVar := 0;
- }
-}
-
-// expected end assigment: b1(x) = true
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1(x: bool) : bool;
+
+var myVar: int;
+
+procedure foo (i:int)
+modifies myVar;
+// comment
+ensures b1(myVar>0);
+{
+ if (i>0) {
+ myVar := 5;
+ } else {
+ myVar := 0;
+ }
+}
+
+// expected end assigment: b1(x) = true
diff --git a/Test/AbsHoudini/houd10.bpl b/Test/AbsHoudini/houd10.bpl
index 5a0942cc..02dd91c1 100644
--- a/Test/AbsHoudini/houd10.bpl
+++ b/Test/AbsHoudini/houd10.bpl
@@ -1,24 +1,24 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1():bool;
-function {:existential true} b2():bool;
-function {:existential true} b3():bool;
-function {:existential true} Assert(): bool;
-var fooVar: int;
-var xVar: int;
-
-procedure foo()
-modifies fooVar;
-modifies xVar;
-ensures b1() || fooVar==0;
-ensures b3() || xVar<0;
-{
- fooVar:=5;
- call bar();
-}
-
-procedure bar();
-modifies xVar;
-requires Assert() || fooVar!=5;
-
-// expected assigment: Assert->true,b1->True,b2->false,b3->True
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1():bool;
+function {:existential true} b2():bool;
+function {:existential true} b3():bool;
+function {:existential true} Assert(): bool;
+var fooVar: int;
+var xVar: int;
+
+procedure foo()
+modifies fooVar;
+modifies xVar;
+ensures b1() || fooVar==0;
+ensures b3() || xVar<0;
+{
+ fooVar:=5;
+ call bar();
+}
+
+procedure bar();
+modifies xVar;
+requires Assert() || fooVar!=5;
+
+// expected assigment: Assert->true,b1->True,b2->false,b3->True
diff --git a/Test/AbsHoudini/houd11.bpl b/Test/AbsHoudini/houd11.bpl
index 638d8ec2..a493574d 100644
--- a/Test/AbsHoudini/houd11.bpl
+++ b/Test/AbsHoudini/houd11.bpl
@@ -1,15 +1,15 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} Assert() : bool;
-
-var fooVar: int;
-
-procedure foo()
-modifies fooVar;
-{
- fooVar:=5;
- assert Assert() || (fooVar==4);
- assert Assert() || (fooVar==3);
-}
-
-// expected assigment: Assert -> true
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} Assert() : bool;
+
+var fooVar: int;
+
+procedure foo()
+modifies fooVar;
+{
+ fooVar:=5;
+ assert Assert() || (fooVar==4);
+ assert Assert() || (fooVar==3);
+}
+
+// expected assigment: Assert -> true
diff --git a/Test/AbsHoudini/houd12.bpl b/Test/AbsHoudini/houd12.bpl
index 12727d65..434cdc5b 100644
--- a/Test/AbsHoudini/houd12.bpl
+++ b/Test/AbsHoudini/houd12.bpl
@@ -1,60 +1,60 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Example to test candidate annotations on loops
-
-function {:existential true} Assert(): bool;
-function {:existential true} b1():bool;
-function {:existential true} b2():bool;
-function {:existential true} b3():bool;
-function {:existential true} b4():bool;
-function {:existential true} b5():bool;
-function {:existential true} b6():bool;
-function {:existential true} b7():bool;
-
-var x: int;
-var y: int;
-
-
-procedure foo()
-modifies x;
-modifies y;
-ensures (b4() || x == 0);
-ensures (b5() || y == 10);
-ensures (b6() || x == 10);
-ensures (b7() || y == 11);
-
-{
- x := 10;
- y := 0;
-
- goto Head;
-
-Head:
-
- //loop invariants
- assert (b1() || x < 0);
- assert (b2() || x >= 0);
- assert (b3() || x + y == 10);
- goto Body, Exit;
-
-Body:
- assume x > 0;
- x := x - 1;
- y := y + 1;
-
-
- goto Head;
-
-Exit:
- assume !(x > 0);
- return;
-}
-
-// expected assigment: Assert -> false, b1->true,b2->false,b3->false,b4->false, b5->false, b6->true,b7->true
-
-
-
-
-
-
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Example to test candidate annotations on loops
+
+function {:existential true} Assert(): bool;
+function {:existential true} b1():bool;
+function {:existential true} b2():bool;
+function {:existential true} b3():bool;
+function {:existential true} b4():bool;
+function {:existential true} b5():bool;
+function {:existential true} b6():bool;
+function {:existential true} b7():bool;
+
+var x: int;
+var y: int;
+
+
+procedure foo()
+modifies x;
+modifies y;
+ensures (b4() || x == 0);
+ensures (b5() || y == 10);
+ensures (b6() || x == 10);
+ensures (b7() || y == 11);
+
+{
+ x := 10;
+ y := 0;
+
+ goto Head;
+
+Head:
+
+ //loop invariants
+ assert (b1() || x < 0);
+ assert (b2() || x >= 0);
+ assert (b3() || x + y == 10);
+ goto Body, Exit;
+
+Body:
+ assume x > 0;
+ x := x - 1;
+ y := y + 1;
+
+
+ goto Head;
+
+Exit:
+ assume !(x > 0);
+ return;
+}
+
+// expected assigment: Assert -> false, b1->true,b2->false,b3->false,b4->false, b5->false, b6->true,b7->true
+
+
+
+
+
+
+
diff --git a/Test/AbsHoudini/houd2.bpl b/Test/AbsHoudini/houd2.bpl
index 97a73464..5fce886e 100644
--- a/Test/AbsHoudini/houd2.bpl
+++ b/Test/AbsHoudini/houd2.bpl
@@ -1,29 +1,29 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} Assert(x:bool) : bool;
-function {:existential true} b1 (x:bool):bool;
-function {:existential true} b2 (x:bool):bool;
-
-
-var myVar: int;
-
-procedure bar(i:int)
-modifies myVar;
-ensures Assert(myVar>0);
-{
- call foo(5);
-}
-
-procedure foo (i:int)
-modifies myVar;
-ensures b1(myVar>0);
-ensures Assert(myVar!=-1);
-{
- if (i>0) {
- myVar := 5;
- } else {
- myVar := 0;
- }
-}
-
-// expected end assigment: Assert(x) = true, b1(x) = true, b2(x) = false
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} Assert(x:bool) : bool;
+function {:existential true} b1 (x:bool):bool;
+function {:existential true} b2 (x:bool):bool;
+
+
+var myVar: int;
+
+procedure bar(i:int)
+modifies myVar;
+ensures Assert(myVar>0);
+{
+ call foo(5);
+}
+
+procedure foo (i:int)
+modifies myVar;
+ensures b1(myVar>0);
+ensures Assert(myVar!=-1);
+{
+ if (i>0) {
+ myVar := 5;
+ } else {
+ myVar := 0;
+ }
+}
+
+// expected end assigment: Assert(x) = true, b1(x) = true, b2(x) = false
diff --git a/Test/AbsHoudini/houd3.bpl b/Test/AbsHoudini/houd3.bpl
index 178c0e36..3a9f87c3 100644
--- a/Test/AbsHoudini/houd3.bpl
+++ b/Test/AbsHoudini/houd3.bpl
@@ -1,29 +1,29 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} Assert(x: bool) : bool;
-function {:existential true} b1(x: bool) : bool;
-function {:existential true} b2(x: bool) : bool;
-
-
-var myVar: int;
-
-procedure bar(i:int)
-modifies myVar;
-ensures b2(myVar>0);
-{
- call foo(5);
-}
-
-procedure foo (i:int)
-modifies myVar;
-ensures b1(myVar>0);
-ensures Assert(myVar!=-1);
-{
- if (i>0) {
- myVar := 5;
- } else {
- myVar := 0;
- }
-}
-
-// expected end assigment: Assert(x) = x, b1(x) = True, b2(x) = True
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} Assert(x: bool) : bool;
+function {:existential true} b1(x: bool) : bool;
+function {:existential true} b2(x: bool) : bool;
+
+
+var myVar: int;
+
+procedure bar(i:int)
+modifies myVar;
+ensures b2(myVar>0);
+{
+ call foo(5);
+}
+
+procedure foo (i:int)
+modifies myVar;
+ensures b1(myVar>0);
+ensures Assert(myVar!=-1);
+{
+ if (i>0) {
+ myVar := 5;
+ } else {
+ myVar := 0;
+ }
+}
+
+// expected end assigment: Assert(x) = x, b1(x) = True, b2(x) = True
diff --git a/Test/AbsHoudini/houd4.bpl b/Test/AbsHoudini/houd4.bpl
index 3268ce12..8639726a 100644
--- a/Test/AbsHoudini/houd4.bpl
+++ b/Test/AbsHoudini/houd4.bpl
@@ -1,29 +1,29 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} Assert() : bool;
-function {:existential true} b1():bool;
-function {:existential true} b2(x:bool):bool;
-function {:existential true} b3(x:bool):bool;
-function {:existential true} b4(x:bool):bool;
-
-var array:[int]int;
-
-procedure foo (i:int)
-requires b2(i > 0);
-ensures b3(array[i] > 0);
-modifies array;
-ensures Assert() || (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
-{
- array[i] := 2 * i;
-}
-
-procedure bar (j:int) returns (result:int)
-requires b4(j > 0);
-modifies array;
-ensures Assert() || (forall x:int :: {array[x]} (!b1() && x == j) || array[x] == old(array)[x]);
-{
- call foo(j);
- result := array[j];
-}
-
-// expected assignment: Assert = false, b1(x) = false, b2(x) = false, b3(x) = false, b4(x) = false
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} Assert() : bool;
+function {:existential true} b1():bool;
+function {:existential true} b2(x:bool):bool;
+function {:existential true} b3(x:bool):bool;
+function {:existential true} b4(x:bool):bool;
+
+var array:[int]int;
+
+procedure foo (i:int)
+requires b2(i > 0);
+ensures b3(array[i] > 0);
+modifies array;
+ensures Assert() || (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
+{
+ array[i] := 2 * i;
+}
+
+procedure bar (j:int) returns (result:int)
+requires b4(j > 0);
+modifies array;
+ensures Assert() || (forall x:int :: {array[x]} (!b1() && x == j) || array[x] == old(array)[x]);
+{
+ call foo(j);
+ result := array[j];
+}
+
+// expected assignment: Assert = false, b1(x) = false, b2(x) = false, b3(x) = false, b4(x) = false
diff --git a/Test/AbsHoudini/houd5.bpl b/Test/AbsHoudini/houd5.bpl
index 9a4c274b..71045f23 100644
--- a/Test/AbsHoudini/houd5.bpl
+++ b/Test/AbsHoudini/houd5.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1(x:bool):bool;
-function {:existential true} b2(x:bool):bool;
-function {:existential true} b3(x:bool):bool;
-function {:existential true} b4(x:bool):bool;
-function {:existential true} b5():bool;
-function {:existential true} Assert():bool;
-
-var array:[int]int;
-
-procedure foo (i:int)
-requires b1(i == 0);
-requires b2(i > 0);
-requires b3(i < 0);
-ensures b4(array[i] > 0);
-modifies array;
-ensures Assert() || (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
-{
- array[i] := 2 * i;
-}
-
-procedure bar (j:int) returns (result:int)
-requires b5() || (j > 0);
-modifies array;
-{
- call foo(j);
- result := array[j];
-}
-
-// expected assigment: assert = false, b1(x) = !x, b2(x) = x, b3(x) = !x, b4(x) = x, b5() = false
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1(x:bool):bool;
+function {:existential true} b2(x:bool):bool;
+function {:existential true} b3(x:bool):bool;
+function {:existential true} b4(x:bool):bool;
+function {:existential true} b5():bool;
+function {:existential true} Assert():bool;
+
+var array:[int]int;
+
+procedure foo (i:int)
+requires b1(i == 0);
+requires b2(i > 0);
+requires b3(i < 0);
+ensures b4(array[i] > 0);
+modifies array;
+ensures Assert() || (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
+{
+ array[i] := 2 * i;
+}
+
+procedure bar (j:int) returns (result:int)
+requires b5() || (j > 0);
+modifies array;
+{
+ call foo(j);
+ result := array[j];
+}
+
+// expected assigment: assert = false, b1(x) = !x, b2(x) = x, b3(x) = !x, b4(x) = x, b5() = false
diff --git a/Test/AbsHoudini/houd6.bpl b/Test/AbsHoudini/houd6.bpl
index 4d9cc9e8..4279e4ce 100644
--- a/Test/AbsHoudini/houd6.bpl
+++ b/Test/AbsHoudini/houd6.bpl
@@ -1,46 +1,46 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1():bool;
-function {:existential true} b2():bool;
-function {:existential true} b3():bool;
-function {:existential true} b4():bool;
-function {:existential true} b5():bool;
-function {:existential true} b6():bool;
-function {:existential true} b7():bool;
-function {:existential true} b8():bool;
-function {:existential true} Assert(): bool;
-
-var array:[int]int;
-
-procedure foo (i:int)
-requires b6() || i < 0;
-requires b5() || i == 0;
-requires b2() || i > 0;
-ensures b3() || array[i] > 0;
-modifies array;
-ensures Assert() || (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
-{
- array[i] := 2 * i;
-}
-
-procedure bar (j:int) returns (result:int)
-requires b8() || j < 0;
-requires b7() || j == 0;
-requires b4() || j > 0;
-modifies array;
-ensures Assert() || (forall x:int :: {array[x]} (x == j) || array[x] == old(array)[x]);
-ensures b1() || array[j] == old(array)[j];
-{
- call foo(j);
- result := array[j];
-}
-
-var p:int;
-
-procedure main() returns (result: int)
-modifies array;
-{
- call result:= bar(p);
-}
-
-// expected assigment: Assert -> false, bi->true forall i
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1():bool;
+function {:existential true} b2():bool;
+function {:existential true} b3():bool;
+function {:existential true} b4():bool;
+function {:existential true} b5():bool;
+function {:existential true} b6():bool;
+function {:existential true} b7():bool;
+function {:existential true} b8():bool;
+function {:existential true} Assert(): bool;
+
+var array:[int]int;
+
+procedure foo (i:int)
+requires b6() || i < 0;
+requires b5() || i == 0;
+requires b2() || i > 0;
+ensures b3() || array[i] > 0;
+modifies array;
+ensures Assert() || (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
+{
+ array[i] := 2 * i;
+}
+
+procedure bar (j:int) returns (result:int)
+requires b8() || j < 0;
+requires b7() || j == 0;
+requires b4() || j > 0;
+modifies array;
+ensures Assert() || (forall x:int :: {array[x]} (x == j) || array[x] == old(array)[x]);
+ensures b1() || array[j] == old(array)[j];
+{
+ call foo(j);
+ result := array[j];
+}
+
+var p:int;
+
+procedure main() returns (result: int)
+modifies array;
+{
+ call result:= bar(p);
+}
+
+// expected assigment: Assert -> false, bi->true forall i
diff --git a/Test/AbsHoudini/houd7.bpl b/Test/AbsHoudini/houd7.bpl
index 4035755c..9272fa3c 100644
--- a/Test/AbsHoudini/houd7.bpl
+++ b/Test/AbsHoudini/houd7.bpl
@@ -1,37 +1,37 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1():bool;
-function {:existential true} b2():bool;
-function {:existential true} b3():bool;
-function {:existential true} Assert(): bool;
-var myVar: int;
-
-procedure foo(i:int)
-requires b1() || i>0;
-requires b2() || i==0;
-requires b3() || i<0;
-modifies myVar;
-ensures Assert() || myVar>0;
-{
- myVar:=5;
-}
-
-procedure bar(i:int)
-modifies myVar;
-{
- call foo(5);
-}
-// expected outcome: Correct
-// expected Assigment: Assert = false, b1->false,b2->true,b3->true
-
-
-
-
-
-
-
-
-
-
-
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1():bool;
+function {:existential true} b2():bool;
+function {:existential true} b3():bool;
+function {:existential true} Assert(): bool;
+var myVar: int;
+
+procedure foo(i:int)
+requires b1() || i>0;
+requires b2() || i==0;
+requires b3() || i<0;
+modifies myVar;
+ensures Assert() || myVar>0;
+{
+ myVar:=5;
+}
+
+procedure bar(i:int)
+modifies myVar;
+{
+ call foo(5);
+}
+// expected outcome: Correct
+// expected Assigment: Assert = false, b1->false,b2->true,b3->true
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Test/AbsHoudini/houd8.bpl b/Test/AbsHoudini/houd8.bpl
index dff155aa..7fdf514e 100644
--- a/Test/AbsHoudini/houd8.bpl
+++ b/Test/AbsHoudini/houd8.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1():bool;
-function {:existential true} b2():bool;
-function {:existential true} b3():bool;
-
-var myVar: int;
-
-procedure foo(i:int)
-modifies myVar;
-ensures b1() || myVar>0;
-ensures b2() || myVar==0;
-ensures b3() || myVar<0;
-{
- myVar:=5;
-}
-
-// expected assigment: b1->false,b2->true,b3->true
-
-
-
-
-
-
-
-
-
-
-
-
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1():bool;
+function {:existential true} b2():bool;
+function {:existential true} b3():bool;
+
+var myVar: int;
+
+procedure foo(i:int)
+modifies myVar;
+ensures b1() || myVar>0;
+ensures b2() || myVar==0;
+ensures b3() || myVar<0;
+{
+ myVar:=5;
+}
+
+// expected assigment: b1->false,b2->true,b3->true
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Test/AbsHoudini/imp1.bpl b/Test/AbsHoudini/imp1.bpl
index 29cbf567..09be87e7 100644
--- a/Test/AbsHoudini/imp1.bpl
+++ b/Test/AbsHoudini/imp1.bpl
@@ -1,21 +1,21 @@
-function {:existential true} {:absdomain "ImplicationDomain"} b1(x1: bool, x2: bool) : bool;
-function {:existential true} {:absdomain "ImplicationDomain"} b2(x1: bool, x2: bool) : bool;
-
-var x: int;
-var flag: bool;
-
-procedure foo ()
- modifies x, flag;
- ensures b1(flag, x == 0);
-{
- flag := true;
- x := 0;
-}
-
-procedure bar()
- modifies x, flag;
- ensures b2(flag, x == 0);
-{
- flag := false;
- x := 0;
-}
+function {:existential true} {:absdomain "ImplicationDomain"} b1(x1: bool, x2: bool) : bool;
+function {:existential true} {:absdomain "ImplicationDomain"} b2(x1: bool, x2: bool) : bool;
+
+var x: int;
+var flag: bool;
+
+procedure foo ()
+ modifies x, flag;
+ ensures b1(flag, x == 0);
+{
+ flag := true;
+ x := 0;
+}
+
+procedure bar()
+ modifies x, flag;
+ ensures b2(flag, x == 0);
+{
+ flag := false;
+ x := 0;
+}
diff --git a/Test/AbsHoudini/int1.bpl b/Test/AbsHoudini/int1.bpl
index 0ee0f1b9..eb4e6b51 100644
--- a/Test/AbsHoudini/int1.bpl
+++ b/Test/AbsHoudini/int1.bpl
@@ -1,26 +1,26 @@
-function {:existential true} b0(x:int): bool;
-function {:existential true} b1(x:int): bool;
-
-var g: int;
-
-procedure foo()
-modifies g;
-requires b0(g);
-ensures b1(g);
-{
- if(*) {
- g := g + 1;
- call foo();
- }
-}
-
-procedure main()
-modifies g;
-{
- g := 0;
- if(*) { g := 5; }
- call foo();
-}
-
-
-// Expected: b0(x) = [0,\infty], b1(x) = [0, \infty]
+function {:existential true} b0(x:int): bool;
+function {:existential true} b1(x:int): bool;
+
+var g: int;
+
+procedure foo()
+modifies g;
+requires b0(g);
+ensures b1(g);
+{
+ if(*) {
+ g := g + 1;
+ call foo();
+ }
+}
+
+procedure main()
+modifies g;
+{
+ g := 0;
+ if(*) { g := 5; }
+ call foo();
+}
+
+
+// Expected: b0(x) = [0,\infty], b1(x) = [0, \infty]
diff --git a/Test/AbsHoudini/multi.bpl b/Test/AbsHoudini/multi.bpl
index a33817ac..e53bb075 100644
--- a/Test/AbsHoudini/multi.bpl
+++ b/Test/AbsHoudini/multi.bpl
@@ -1,67 +1,67 @@
-function {:existential true} {:absdomain "ImplicationDomain"} b1(x1: bool, x2: bool) : bool;
-function {:existential true} {:absdomain "ImplicationDomain"} b2(x1: bool, x2: bool) : bool;
-function {:existential true} {:absdomain "PowDomain"} b3(x1: int) : bool;
-function {:existential true} {:absdomain "PowDomain"} b4(x1: bv32) : bool;
-function {:existential true} {:absdomain "EqualitiesDomain"} b5(x: int, y: int, z: int, w:int) : bool;
-
-function {:builtin "bvslt"} BV_SLT(x: bv32, y: bv32) : bool;
-
-var x: int;
-var flag: bool;
-
-// Test implication domain
-procedure foo ()
- modifies x, flag;
-{
- flag := true;
- x := 0;
- assert b1(flag, x == 0);
- flag := false;
- assert b2(flag, x == 0);
-}
-
-// Test for PowDomain(int)
-procedure bar1 ()
- modifies x, flag;
-{
- x := 2;
- if(*) { x := 16; }
- assert b3(x);
-}
-
-// Test for PowDomain(bv32)
-procedure bar2 ()
- modifies x, flag;
-{
- var s: bv32;
-
- s := 2bv32;
- if(*) { s := 16bv32; }
- assert b4(s);
-}
-
-// Test for EqualitiesDomain
-procedure baz ()
- modifies x, flag;
-{
- var y: int;
- var z: int;
- var w: int;
-
- assume x == y;
- assume x == z;
-
- if(*) {
- x := x + 1;
- y := y + 1;
- } else {
- x := x + 2;
- y := y + 2;
- }
-
- assume x == w;
-
- assert b5(x,y,z,w);
-}
-
-
+function {:existential true} {:absdomain "ImplicationDomain"} b1(x1: bool, x2: bool) : bool;
+function {:existential true} {:absdomain "ImplicationDomain"} b2(x1: bool, x2: bool) : bool;
+function {:existential true} {:absdomain "PowDomain"} b3(x1: int) : bool;
+function {:existential true} {:absdomain "PowDomain"} b4(x1: bv32) : bool;
+function {:existential true} {:absdomain "EqualitiesDomain"} b5(x: int, y: int, z: int, w:int) : bool;
+
+function {:builtin "bvslt"} BV_SLT(x: bv32, y: bv32) : bool;
+
+var x: int;
+var flag: bool;
+
+// Test implication domain
+procedure foo ()
+ modifies x, flag;
+{
+ flag := true;
+ x := 0;
+ assert b1(flag, x == 0);
+ flag := false;
+ assert b2(flag, x == 0);
+}
+
+// Test for PowDomain(int)
+procedure bar1 ()
+ modifies x, flag;
+{
+ x := 2;
+ if(*) { x := 16; }
+ assert b3(x);
+}
+
+// Test for PowDomain(bv32)
+procedure bar2 ()
+ modifies x, flag;
+{
+ var s: bv32;
+
+ s := 2bv32;
+ if(*) { s := 16bv32; }
+ assert b4(s);
+}
+
+// Test for EqualitiesDomain
+procedure baz ()
+ modifies x, flag;
+{
+ var y: int;
+ var z: int;
+ var w: int;
+
+ assume x == y;
+ assume x == z;
+
+ if(*) {
+ x := x + 1;
+ y := y + 1;
+ } else {
+ x := x + 2;
+ y := y + 2;
+ }
+
+ assume x == w;
+
+ assert b5(x,y,z,w);
+}
+
+
diff --git a/Test/AbsHoudini/pred1.bpl b/Test/AbsHoudini/pred1.bpl
index 4db4810e..51c310cc 100644
--- a/Test/AbsHoudini/pred1.bpl
+++ b/Test/AbsHoudini/pred1.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b0(x:bool, y:bool): bool;
-function {:existential true} b1(x:bool, y:bool): bool;
-function {:existential true} b2(x:bool, y:bool): bool;
-
-var g: int;
-
-procedure main()
-modifies g;
-ensures b0(g == 0, g == 5);
-{
- g := 0;
- if(*) { g := 5; }
- call foo();
-}
-
-procedure foo()
- modifies g;
- requires b1(g == 0, g == 5);
- ensures b2(g == 0, g == 5);
-{
- assume g != 5;
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b0(x:bool, y:bool): bool;
+function {:existential true} b1(x:bool, y:bool): bool;
+function {:existential true} b2(x:bool, y:bool): bool;
+
+var g: int;
+
+procedure main()
+modifies g;
+ensures b0(g == 0, g == 5);
+{
+ g := 0;
+ if(*) { g := 5; }
+ call foo();
+}
+
+procedure foo()
+ modifies g;
+ requires b1(g == 0, g == 5);
+ ensures b2(g == 0, g == 5);
+{
+ assume g != 5;
+}
+
diff --git a/Test/AbsHoudini/pred2.bpl b/Test/AbsHoudini/pred2.bpl
index c9ac3f74..f34bf5d6 100644
--- a/Test/AbsHoudini/pred2.bpl
+++ b/Test/AbsHoudini/pred2.bpl
@@ -1,14 +1,14 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b0(x:bool): bool;
-
-var g: int;
-
-procedure main()
-modifies g;
-ensures b0(g == old(g));
-{
- if(*) { g := 5; }
- assume g != 5;
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b0(x:bool): bool;
+
+var g: int;
+
+procedure main()
+modifies g;
+ensures b0(g == old(g));
+{
+ if(*) { g := 5; }
+ assume g != 5;
+}
+
diff --git a/Test/AbsHoudini/pred3.bpl b/Test/AbsHoudini/pred3.bpl
index 38f42088..ef76a073 100644
--- a/Test/AbsHoudini/pred3.bpl
+++ b/Test/AbsHoudini/pred3.bpl
@@ -1,26 +1,26 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b0(x:bool, y:bool): bool;
-function {:existential true} b1(x:bool, y:bool): bool;
-function {:existential true} b2(x:bool, y:bool): bool;
-
-var g: int;
-
-procedure main()
-modifies g;
-ensures b0(g == 0, g == 5);
-{
- assume 0 == old(g) || 1 == old(g);
- g := 0;
- if(*) { g := 5; }
- call foo();
-}
-
-procedure foo()
- modifies g;
- requires b1(g == 0, g == 5);
- ensures b2(old(g) == 0, old(g) == 5);
-{
- assume g != 5;
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b0(x:bool, y:bool): bool;
+function {:existential true} b1(x:bool, y:bool): bool;
+function {:existential true} b2(x:bool, y:bool): bool;
+
+var g: int;
+
+procedure main()
+modifies g;
+ensures b0(g == 0, g == 5);
+{
+ assume 0 == old(g) || 1 == old(g);
+ g := 0;
+ if(*) { g := 5; }
+ call foo();
+}
+
+procedure foo()
+ modifies g;
+ requires b1(g == 0, g == 5);
+ ensures b2(old(g) == 0, old(g) == 5);
+{
+ assume g != 5;
+}
+
diff --git a/Test/AbsHoudini/pred4.bpl b/Test/AbsHoudini/pred4.bpl
index 06e504e2..be9fd1f5 100644
--- a/Test/AbsHoudini/pred4.bpl
+++ b/Test/AbsHoudini/pred4.bpl
@@ -1,23 +1,23 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1(x:bool, y:bool): bool;
-function {:existential true} {:absdomain "Intervals"} b3(x:int): bool;
-
-var g: int;
-
-procedure main()
-modifies g;
-{
- g := 0;
- if(*) { g := 5; }
- call foo();
-}
-
-procedure foo()
- modifies g;
- requires b1(g == 0, g == 5);
- ensures b3(g);
-{
- assume g != 5;
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1(x:bool, y:bool): bool;
+function {:existential true} {:absdomain "Intervals"} b3(x:int): bool;
+
+var g: int;
+
+procedure main()
+modifies g;
+{
+ g := 0;
+ if(*) { g := 5; }
+ call foo();
+}
+
+procedure foo()
+ modifies g;
+ requires b1(g == 0, g == 5);
+ ensures b3(g);
+{
+ assume g != 5;
+}
+
diff --git a/Test/AbsHoudini/pred5.bpl b/Test/AbsHoudini/pred5.bpl
index 1c96fe4d..ee270b15 100644
--- a/Test/AbsHoudini/pred5.bpl
+++ b/Test/AbsHoudini/pred5.bpl
@@ -1,26 +1,26 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} b1(x: bool) : bool;
-
-procedure main()
-{
- var i: int;
- var x: int;
- var arr: [int] int;
-
- i := 0;
-
- while(*)
- invariant b1((i >= 0) && (forall j: int :: (0 <= j && j < i) ==> arr[j] == 0));
- {
- havoc x;
- assume x == 0;
-
- arr[i] := x;
- i := i + 1;
- }
-
- havoc x;
- assume x >= 0 && x < i;
- assert b1(arr[x] == 0);
-}
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:PredicateAbs "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} b1(x: bool) : bool;
+
+procedure main()
+{
+ var i: int;
+ var x: int;
+ var arr: [int] int;
+
+ i := 0;
+
+ while(*)
+ invariant b1((i >= 0) && (forall j: int :: (0 <= j && j < i) ==> arr[j] == 0));
+ {
+ havoc x;
+ assume x == 0;
+
+ arr[i] := x;
+ i := i + 1;
+ }
+
+ havoc x;
+ assume x >= 0 && x < i;
+ assert b1(arr[x] == 0);
+}
diff --git a/Test/AbsHoudini/quant1.bpl b/Test/AbsHoudini/quant1.bpl
index c3a8814c..d4f2b76b 100644
--- a/Test/AbsHoudini/quant1.bpl
+++ b/Test/AbsHoudini/quant1.bpl
@@ -1,9 +1,9 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} {:absdomain "IA[Intervals]"} b1(x: int) : bool;
-
-procedure foo ()
-{
- assert (forall x: int :: (0 <= x && x <= 2) ==> b1(x));
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} {:absdomain "IA[Intervals]"} b1(x: int) : bool;
+
+procedure foo ()
+{
+ assert (forall x: int :: (0 <= x && x <= 2) ==> b1(x));
+}
+
diff --git a/Test/AbsHoudini/quant2.bpl b/Test/AbsHoudini/quant2.bpl
index 1091155b..08fafae9 100644
--- a/Test/AbsHoudini/quant2.bpl
+++ b/Test/AbsHoudini/quant2.bpl
@@ -1,26 +1,26 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} {:absdomain "Intervals"} b1(x: int) : bool;
-
-procedure main()
-{
- var i: int;
- var x: int;
- var arr: [int] int;
-
- i := 0;
-
- while(*)
- invariant (i >= 0) && (forall j: int :: (0 <= j && j < i) ==> b1(arr[j]));
- {
- havoc x;
- assume x == 0 || x == 1;
-
- arr[i] := x;
- i := i + 1;
- }
-
- havoc x;
- assume x >= 0 && x < i;
- assert arr[x] == 0 || arr[x] == 1;
-}
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} {:absdomain "Intervals"} b1(x: int) : bool;
+
+procedure main()
+{
+ var i: int;
+ var x: int;
+ var arr: [int] int;
+
+ i := 0;
+
+ while(*)
+ invariant (i >= 0) && (forall j: int :: (0 <= j && j < i) ==> b1(arr[j]));
+ {
+ havoc x;
+ assume x == 0 || x == 1;
+
+ arr[i] := x;
+ i := i + 1;
+ }
+
+ havoc x;
+ assume x >= 0 && x < i;
+ assert arr[x] == 0 || arr[x] == 1;
+}
diff --git a/Test/AbsHoudini/quant3.bpl b/Test/AbsHoudini/quant3.bpl
index 951639ff..4a87404f 100644
--- a/Test/AbsHoudini/quant3.bpl
+++ b/Test/AbsHoudini/quant3.bpl
@@ -1,9 +1,9 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} {:absdomain "Intervals"} b1(x: int) : bool;
-
-procedure foo ()
-{
- assert (exists x: int :: (0 <= x && x <= 2) && b1(x));
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} {:absdomain "Intervals"} b1(x: int) : bool;
+
+procedure foo ()
+{
+ assert (exists x: int :: (0 <= x && x <= 2) && b1(x));
+}
+
diff --git a/Test/AbsHoudini/quant4.bpl b/Test/AbsHoudini/quant4.bpl
index ac24d7ce..38029355 100644
--- a/Test/AbsHoudini/quant4.bpl
+++ b/Test/AbsHoudini/quant4.bpl
@@ -1,9 +1,9 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} {:absdomain "IA[HoudiniConst]"} b1() : bool;
-
-procedure foo ()
-{
- assert (exists x: int :: (0 <= x && x <= 2) && b1());
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} {:absdomain "IA[HoudiniConst]"} b1() : bool;
+
+procedure foo ()
+{
+ assert (exists x: int :: (0 <= x && x <= 2) && b1());
+}
+
diff --git a/Test/AbsHoudini/quant5.bpl b/Test/AbsHoudini/quant5.bpl
index d511e9ac..fb73a137 100644
--- a/Test/AbsHoudini/quant5.bpl
+++ b/Test/AbsHoudini/quant5.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} {:absdomain "Intervals"} b1(x: int) : bool;
-
-procedure foo ()
-{
- var arr: [int] int;
- assume (forall x: int :: arr[x] == 0);
- arr[5] := 1;
-
- assert (exists x: int :: arr[x] == 1 && b1(x));
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:HoudiniConst -z3opt:MBQI=true "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} {:absdomain "Intervals"} b1(x: int) : bool;
+
+procedure foo ()
+{
+ var arr: [int] int;
+ assume (forall x: int :: arr[x] == 0);
+ arr[5] := 1;
+
+ assert (exists x: int :: arr[x] == 1 && b1(x));
+}
+
diff --git a/Test/AbsHoudini/runtest.bat b/Test/AbsHoudini/runtest.bat
index 4d70be0e..3053f5fb 100644
--- a/Test/AbsHoudini/runtest.bat
+++ b/Test/AbsHoudini/runtest.bat
@@ -1,28 +1,28 @@
-@echo off
-setlocal
-
-set BGEXE=..\..\Binaries\Boogie.exe
-
-for %%f in (houd1.bpl houd2.bpl houd3.bpl houd4.bpl houd5.bpl houd6.bpl houd7.bpl houd8.bpl houd10.bpl houd11.bpl houd12.bpl fail1.bpl) do (
- echo.
- echo -------------------- %%f --------------------
- %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /abstractHoudini:IA[ConstantProp] %%f
-)
-
-for %%f in (test1.bpl test2.bpl test7.bpl test8.bpl test9.bpl test10.bpl) do (
- echo .
- echo -------------------- %%f --------------------
- %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /inlineDepth:1 /abstractHoudini:IA[ConstantProp] %%f
-)
-
-for %%f in (pred1.bpl pred2.bpl pred3.bpl pred4.bpl pred5.bpl) do (
- echo .
- echo -------------------- %%f --------------------
- %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /inlineDepth:1 /abstractHoudini:PredicateAbs %%f
-)
-
-for %%f in (quant1.bpl quant2.bpl quant3.bpl quant4.bpl quant5.bpl) do (
- echo .
- echo -------------------- %%f --------------------
- %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /abstractHoudini:HoudiniConst /z3opt:MBQI=true %%f
-)
+@echo off
+setlocal
+
+set BGEXE=..\..\Binaries\Boogie.exe
+
+for %%f in (houd1.bpl houd2.bpl houd3.bpl houd4.bpl houd5.bpl houd6.bpl houd7.bpl houd8.bpl houd10.bpl houd11.bpl houd12.bpl fail1.bpl) do (
+ echo.
+ echo -------------------- %%f --------------------
+ %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /abstractHoudini:IA[ConstantProp] %%f
+)
+
+for %%f in (test1.bpl test2.bpl test7.bpl test8.bpl test9.bpl test10.bpl) do (
+ echo .
+ echo -------------------- %%f --------------------
+ %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /inlineDepth:1 /abstractHoudini:IA[ConstantProp] %%f
+)
+
+for %%f in (pred1.bpl pred2.bpl pred3.bpl pred4.bpl pred5.bpl) do (
+ echo .
+ echo -------------------- %%f --------------------
+ %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /inlineDepth:1 /abstractHoudini:PredicateAbs %%f
+)
+
+for %%f in (quant1.bpl quant2.bpl quant3.bpl quant4.bpl quant5.bpl) do (
+ echo .
+ echo -------------------- %%f --------------------
+ %BGEXE% %* /nologo /noinfer /contractInfer /printAssignment /abstractHoudini:HoudiniConst /z3opt:MBQI=true %%f
+)
diff --git a/Test/AbsHoudini/test1.bpl b/Test/AbsHoudini/test1.bpl
index 10015723..80521921 100644
--- a/Test/AbsHoudini/test1.bpl
+++ b/Test/AbsHoudini/test1.bpl
@@ -1,40 +1,40 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: bool;
-
-procedure foo()
-modifies g;
-ensures b0() || (!old(g) ==> old(g) == g);
-{
- call AcquireLock();
- call ReleaseLock();
-}
-
-procedure AcquireLock()
-modifies g;
-ensures b1() || old(g) == g;
-{
- g := true;
-}
-
-procedure ReleaseLock()
-modifies g;
-ensures b2() || old(g) == g;
-{
- g := false;
-}
-
-procedure main()
-modifies g;
-{
- g := false;
- call foo();
- assert Assert() || !g;
-}
-
-function {:existential true} b0(): bool;
-function {:existential true} b1(): bool;
-function {:existential true } b2(): bool;
-function {:existential true} Assert(): bool;
-
-// Expected: b0 = false, b1 = true, b2 = true, Assert = false
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: bool;
+
+procedure foo()
+modifies g;
+ensures b0() || (!old(g) ==> old(g) == g);
+{
+ call AcquireLock();
+ call ReleaseLock();
+}
+
+procedure AcquireLock()
+modifies g;
+ensures b1() || old(g) == g;
+{
+ g := true;
+}
+
+procedure ReleaseLock()
+modifies g;
+ensures b2() || old(g) == g;
+{
+ g := false;
+}
+
+procedure main()
+modifies g;
+{
+ g := false;
+ call foo();
+ assert Assert() || !g;
+}
+
+function {:existential true} b0(): bool;
+function {:existential true} b1(): bool;
+function {:existential true } b2(): bool;
+function {:existential true} Assert(): bool;
+
+// Expected: b0 = false, b1 = true, b2 = true, Assert = false
diff --git a/Test/AbsHoudini/test10.bpl b/Test/AbsHoudini/test10.bpl
index cb2fe89a..4acc862d 100644
--- a/Test/AbsHoudini/test10.bpl
+++ b/Test/AbsHoudini/test10.bpl
@@ -1,52 +1,52 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var sdv_7: int;
-var sdv_21: int;
-function {:existential true} b1(): bool;
-function{:existential true} b2(): bool;
-function{:existential true} b3(): bool;
-function{:existential true} b4(): bool;
-
-procedure push(a:int)
-modifies sdv_7, sdv_21;
-{
- sdv_21 := sdv_7;
- sdv_7 := a;
-}
-
-procedure pop()
-modifies sdv_7, sdv_21;
-{
- sdv_7 := sdv_21;
- havoc sdv_21;
-}
-
-procedure foo()
-modifies sdv_7, sdv_21;
-requires {:candidate} b1() || (sdv_7 == 0);
-ensures{:candidate} b2() || (sdv_7 == old(sdv_7));
-{
- call push(2);
- call pop();
- call bar();
-}
-
-procedure bar()
-requires{:candidate} b3() || (sdv_7 == 0);
-ensures{:candidate} b4() || (sdv_7 == old(sdv_7));
-modifies sdv_7, sdv_21;
-{
- call push(1);
- call pop();
-}
-
-procedure main()
-modifies sdv_7, sdv_21;
-{
- sdv_7 := 0;
- call foo();
-}
-
-// Expected: All false
-
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var sdv_7: int;
+var sdv_21: int;
+function {:existential true} b1(): bool;
+function{:existential true} b2(): bool;
+function{:existential true} b3(): bool;
+function{:existential true} b4(): bool;
+
+procedure push(a:int)
+modifies sdv_7, sdv_21;
+{
+ sdv_21 := sdv_7;
+ sdv_7 := a;
+}
+
+procedure pop()
+modifies sdv_7, sdv_21;
+{
+ sdv_7 := sdv_21;
+ havoc sdv_21;
+}
+
+procedure foo()
+modifies sdv_7, sdv_21;
+requires {:candidate} b1() || (sdv_7 == 0);
+ensures{:candidate} b2() || (sdv_7 == old(sdv_7));
+{
+ call push(2);
+ call pop();
+ call bar();
+}
+
+procedure bar()
+requires{:candidate} b3() || (sdv_7 == 0);
+ensures{:candidate} b4() || (sdv_7 == old(sdv_7));
+modifies sdv_7, sdv_21;
+{
+ call push(1);
+ call pop();
+}
+
+procedure main()
+modifies sdv_7, sdv_21;
+{
+ sdv_7 := 0;
+ call foo();
+}
+
+// Expected: All false
+
+
diff --git a/Test/AbsHoudini/test2.bpl b/Test/AbsHoudini/test2.bpl
index 1272e7d9..38ec8c8a 100644
--- a/Test/AbsHoudini/test2.bpl
+++ b/Test/AbsHoudini/test2.bpl
@@ -1,42 +1,42 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int;
-var h: int;
-
-procedure foo()
-modifies g, h;
-ensures b0() || old(g) == g;
-{
- call AcquireLock();
- call ReleaseLock();
-}
-
-procedure AcquireLock()
-modifies g, h;
-ensures b1() || old(g) == g;
-{
- h := g;
- g := 1;
-}
-
-procedure ReleaseLock()
-modifies g, h;
-ensures b2() || old(g) == g;
-{
- g := h;
-}
-
-procedure main()
-modifies g, h;
-{
- g := 0;
- call foo();
- assert Assert() || g == 0;
-}
-
-function {:existential true} b0(): bool;
-function {:existential true} b1(): bool;
-function {:existential true} b2(): bool;
-function {:existential true} Assert(): bool;
-
-// Expected: Assert = false, b0 = false, b1 = true, b2 = true
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int;
+var h: int;
+
+procedure foo()
+modifies g, h;
+ensures b0() || old(g) == g;
+{
+ call AcquireLock();
+ call ReleaseLock();
+}
+
+procedure AcquireLock()
+modifies g, h;
+ensures b1() || old(g) == g;
+{
+ h := g;
+ g := 1;
+}
+
+procedure ReleaseLock()
+modifies g, h;
+ensures b2() || old(g) == g;
+{
+ g := h;
+}
+
+procedure main()
+modifies g, h;
+{
+ g := 0;
+ call foo();
+ assert Assert() || g == 0;
+}
+
+function {:existential true} b0(): bool;
+function {:existential true} b1(): bool;
+function {:existential true} b2(): bool;
+function {:existential true} Assert(): bool;
+
+// Expected: Assert = false, b0 = false, b1 = true, b2 = true
diff --git a/Test/AbsHoudini/test7.bpl b/Test/AbsHoudini/test7.bpl
index 118a1c99..65f311f6 100644
--- a/Test/AbsHoudini/test7.bpl
+++ b/Test/AbsHoudini/test7.bpl
@@ -1,21 +1,21 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} Assert() : bool;
-
-var g: int;
-
-procedure main()
-modifies g;
-{
- g := 0;
- call foo();
- assert Assert() || g == 1;
-}
-
-procedure foo()
-modifies g;
-{
- g := g + 1;
-}
-
-// Expected: Assert = false
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} Assert() : bool;
+
+var g: int;
+
+procedure main()
+modifies g;
+{
+ g := 0;
+ call foo();
+ assert Assert() || g == 1;
+}
+
+procedure foo()
+modifies g;
+{
+ g := g + 1;
+}
+
+// Expected: Assert = false
diff --git a/Test/AbsHoudini/test8.bpl b/Test/AbsHoudini/test8.bpl
index f9a9afaa..1a79d188 100644
--- a/Test/AbsHoudini/test8.bpl
+++ b/Test/AbsHoudini/test8.bpl
@@ -1,27 +1,27 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:existential true} Assert(): bool;
-
-var g: int;
-
-procedure main()
-modifies g;
-{
- g := 0;
- call foo();
- assert Assert() || g == 1;
-}
-
-procedure {:inline 1} foo()
-modifies g;
-{
- call bar();
-}
-
-procedure bar()
-modifies g;
-{
- g := g + 1;
-}
-
-// Expected: Assert = false
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:existential true} Assert(): bool;
+
+var g: int;
+
+procedure main()
+modifies g;
+{
+ g := 0;
+ call foo();
+ assert Assert() || g == 1;
+}
+
+procedure {:inline 1} foo()
+modifies g;
+{
+ call bar();
+}
+
+procedure bar()
+modifies g;
+{
+ g := g + 1;
+}
+
+// Expected: Assert = false
diff --git a/Test/AbsHoudini/test9.bpl b/Test/AbsHoudini/test9.bpl
index 7d624167..9e7778eb 100644
--- a/Test/AbsHoudini/test9.bpl
+++ b/Test/AbsHoudini/test9.bpl
@@ -1,92 +1,92 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var v1: int;
-var v2: int;
-var v3: int;
-function{:existential true} b1(): bool;
-function{:existential true} b2(): bool;
-function{:existential true} b3(): bool;
-function{:existential true} b4(): bool;
-function{:existential true} b5(): bool;
-function{:existential true} b6(): bool;
-function{:existential true} b7(): bool;
-function{:existential true} b8(): bool;
-function{:existential true} b9(): bool;
-function{:existential true} b10(): bool;
-function{:existential true} b11(): bool;
-function{:existential true} b12(): bool;
-function{:existential true} b13(): bool;
-function{:existential true} b14(): bool;
-function{:existential true} b15(): bool;
-function{:existential true} b16(): bool;
-
-procedure push()
-requires {:candidate} b1() || v1 == 0;
-requires {:candidate} b2() || v1 == 1;
-ensures {:candidate} b3() || v1 == 0;
-ensures {:candidate} b4() || v1 == 1;
-modifies v1,v2;
-{
- v2 := v1;
- v1 := 1;
-}
-
-procedure pop()
-modifies v1,v2;
-requires {:candidate} b5() || v1 == 0;
-requires {:candidate} b6() || v1 == 1;
-ensures {:candidate} b7() || v1 == 0;
-ensures {:candidate} b8() || v1 == 1;
-{
- v1 := v2;
- havoc v2;
-}
-
-procedure foo()
-modifies v1,v2;
-requires {:candidate} b9() || v1 == 0;
-requires {:candidate} b10() || v1 == 1;
-ensures {:candidate} b11() || v1 == 0;
-ensures {:candidate} b12() || v1 == 1;
-{
- call push();
- call pop();
-}
-
-procedure bar()
-modifies v1,v2;
-requires {:candidate} b13() || v1 == 0;
-requires {:candidate} b14() || v1 == 1;
-ensures {:candidate} b15() || v1 == 0;
-ensures {:candidate} b16() || v1 == 1;
-{
- call push();
- call pop();
-}
-
-procedure main()
-modifies v1,v2;
-{
- v1 := 1;
- call foo();
- havoc v1;
- call bar();
-}
-
-// Expected:
-//b1 = true
-//b2 = true
-//b3 = true
-//b4 = false
-//b5 = true
-//b6 = false
-//b7 = true
-//b8 = true
-//b9 = true
-//b10 = false
-//b11 = true
-//b12 = false
-//b13 = true
-//b14 = true
-//b15 = true
-//b16 = true
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 -abstractHoudini:IA[ConstantProp] "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var v1: int;
+var v2: int;
+var v3: int;
+function{:existential true} b1(): bool;
+function{:existential true} b2(): bool;
+function{:existential true} b3(): bool;
+function{:existential true} b4(): bool;
+function{:existential true} b5(): bool;
+function{:existential true} b6(): bool;
+function{:existential true} b7(): bool;
+function{:existential true} b8(): bool;
+function{:existential true} b9(): bool;
+function{:existential true} b10(): bool;
+function{:existential true} b11(): bool;
+function{:existential true} b12(): bool;
+function{:existential true} b13(): bool;
+function{:existential true} b14(): bool;
+function{:existential true} b15(): bool;
+function{:existential true} b16(): bool;
+
+procedure push()
+requires {:candidate} b1() || v1 == 0;
+requires {:candidate} b2() || v1 == 1;
+ensures {:candidate} b3() || v1 == 0;
+ensures {:candidate} b4() || v1 == 1;
+modifies v1,v2;
+{
+ v2 := v1;
+ v1 := 1;
+}
+
+procedure pop()
+modifies v1,v2;
+requires {:candidate} b5() || v1 == 0;
+requires {:candidate} b6() || v1 == 1;
+ensures {:candidate} b7() || v1 == 0;
+ensures {:candidate} b8() || v1 == 1;
+{
+ v1 := v2;
+ havoc v2;
+}
+
+procedure foo()
+modifies v1,v2;
+requires {:candidate} b9() || v1 == 0;
+requires {:candidate} b10() || v1 == 1;
+ensures {:candidate} b11() || v1 == 0;
+ensures {:candidate} b12() || v1 == 1;
+{
+ call push();
+ call pop();
+}
+
+procedure bar()
+modifies v1,v2;
+requires {:candidate} b13() || v1 == 0;
+requires {:candidate} b14() || v1 == 1;
+ensures {:candidate} b15() || v1 == 0;
+ensures {:candidate} b16() || v1 == 1;
+{
+ call push();
+ call pop();
+}
+
+procedure main()
+modifies v1,v2;
+{
+ v1 := 1;
+ call foo();
+ havoc v1;
+ call bar();
+}
+
+// Expected:
+//b1 = true
+//b2 = true
+//b3 = true
+//b4 = false
+//b5 = true
+//b6 = false
+//b7 = true
+//b8 = true
+//b9 = true
+//b10 = false
+//b11 = true
+//b12 = false
+//b13 = true
+//b14 = true
+//b15 = true
+//b16 = true
diff --git a/Test/README.md b/Test/README.md
index 36eb474d..6e315d13 100644
--- a/Test/README.md
+++ b/Test/README.md
@@ -1,174 +1,174 @@
-Testing infrastructure
-----------------------
-
-Boogie uses LLVM's [lit tool](http://llvm.org/docs/CommandGuide/lit.html) for
-testing and the [OutputCheck tool](https://github.com/stp/OutputCheck). This
-infrastructure should work on Linux, OSX and Windows.
-
-Setting up the test environment
--------------------------------
-
-First make sure you have Python installed. We use Python 3.4 but older versions
-should work as well.
-
-The lit and OutputCheck tools are both available in
-[PyPi](https://pypi.python.org/pypi). Install the
-[pip](http://pip.readthedocs.org/en/latest/installing.html) tool if you don't
-already have have it and then run
-
-```
-$ pip install lit
-$ pip install OutputCheck
-```
-
-this will install the tools on your system. If you are running on Linux/OSX and
-do not have root access then you can use the
-[virtualenv](http://virtualenv.readthedocs.org/en/latest/) tool to install these
-tools without the need for root access.
-
-Once installed check the tools are available on your PATH.
-
-```
-$ lit --help
-Usage: lit [options] {file-or-path}
-
-Options:
- -h, --help show this help message and exit
-...
-
-$ OutputCheck --help
-usage: OutputCheck [-h] [--file-to-check= FILE_TO_CHECK=]
- [--check-prefix= CHECK_PREFIX=]
- [-l {debug,info,warning,error}] [--comment= COMMENT=] [-d]
- [--disable-substitutions]
- check_file
-...
-```
-
-On Windows it may be necessary to add the Python scripts folder
-(e.g. ``C:\Python34\Scripts\``) to your PATH if the above commands do not work.
-
-Other requirements
-------------------
-
-We currently require Z3 4.<FIXME> to be used with the test suite.
-
-
-Running the tests
------------------
-
-lit is a very flexible tool. You simply pass it one or more paths to directories
-or individual tests (usually .bpl files) and lit will build up a list of tests
-to run.
-
-For example to run the whole test suite run the following command
-
-```
-$ cd Test
-$ lit .
-```
-
-For example to run all tests in the ``test1`` folder and the bla1.bpl and
-constants.bpl test run the following command
-
-```
-$ cd Test
-$ lit test0/ livevars/bla1.bpl aitest0/constants.bpl
-```
-
-Note replace ``/`` with ``\`` on Windows (tab completition is your friend).
-
-If you would prefer to see less information when running tests you can use the
-``-s`` flag to show progress information and a summary when tests finish.
-
-```
-$ cd Test
-$ lit -s .
-```
-
-To pass additional flags to Boogie when running tests run the following command
-where ``-someParamter`` is a paramter Boogie supports.
-
-```
-$ cd Test
-$ lit --param boogie_params='-someParameter' .
-```
-
-For more ``lit`` options run
-
-```
-$ lit --help
-```
-
-Debugging failing tests
------------------------
-
-You can pass the ``-v`` flag to get more verbose output to try to determine why
-certains tests are failing.
-
-```
-$ cd Test
-$ lit -v livevars/bla1.bpl
-```
-
-Removing output produced by tests
----------------------------------
-
-lit will by default create a folder named ``Output`` in each directory that
-will contain temporary files created by tests. You can run the following to
-remove all these folders/files.
-
-```
-$ cd Test
-$ ./clean.py
-```
-
-This script will also remove old files created by the legacy batch file based
-testing infrastructure (no longer in source tree). If temporary files are left
-behind from the old testing infrastructure it is necessary to run this script
-to remove those files before using ``lit``.
-
-Writing tests
--------------
-
-Tests are driven my special comments written in ``.bpl`` files (each file is an
-individual test). These special comments (RUN lines) contain shell commands to
-run. If any command exits with a non zero exit code the test is
-considered to fail.
-
-The RUN lines may use several substitutions
-
-- ``%boogie`` expands to the absolute path to the Boogie executable with any set
- options and prefixed by ``mono`` on non Windows platforms. This does not need
- to be quoted.
-
-- ``%diff`` expands to the diff tool being used. This is ``diff`` on non
- Windows platforms and ``pydiff`` on Windows. Do not use the ``fc`` tool
- because it is buggy when tests are run concurrently. This does not need to be
- quoted.
-
-- ``%OutputCheck`` expands to the absolute path to the OutputCheck tool. This
- does not need to be quoted.
-
-- ``%s`` the absolute path to the current test file. You should make sure this
- is quoted so that tests work correctly for users who use spaces in their file
- paths.
-
-- ``%T`` the path to the temporary directory for this test. You should make sure
- this is quoted.
-
-- ``%t`` expands to the absolute path of a filename that can be used as a
- temporary file. This always expands to the same value in a single test so if
- you need multiple different temporary files append a unique value (e.g.
- ``%t1``, ``%t2``... etc). You should make sure this is quoted.
-
-Currently most tests simply execute boogie recording its output which then
-compared to a file containing the expected output (``.expect`` files) using
-``%diff``. This is incredibly fragile and it is recommended that new tests use
-the OutputCheck tool instead of relying on %diff.
-
-For more information see
-
-http://llvm.org/docs/CommandGuide/lit.html
-http://llvm.org/docs/TestingGuide.html#regression-test-structure
-https://github.com/stp/OutputCheck/blob/master/README.md
+Testing infrastructure
+----------------------
+
+Boogie uses LLVM's [lit tool](http://llvm.org/docs/CommandGuide/lit.html) for
+testing and the [OutputCheck tool](https://github.com/stp/OutputCheck). This
+infrastructure should work on Linux, OSX and Windows.
+
+Setting up the test environment
+-------------------------------
+
+First make sure you have Python installed. We use Python 3.4 but older versions
+should work as well.
+
+The lit and OutputCheck tools are both available in
+[PyPi](https://pypi.python.org/pypi). Install the
+[pip](http://pip.readthedocs.org/en/latest/installing.html) tool if you don't
+already have have it and then run
+
+```
+$ pip install lit
+$ pip install OutputCheck
+```
+
+this will install the tools on your system. If you are running on Linux/OSX and
+do not have root access then you can use the
+[virtualenv](http://virtualenv.readthedocs.org/en/latest/) tool to install these
+tools without the need for root access.
+
+Once installed check the tools are available on your PATH.
+
+```
+$ lit --help
+Usage: lit [options] {file-or-path}
+
+Options:
+ -h, --help show this help message and exit
+...
+
+$ OutputCheck --help
+usage: OutputCheck [-h] [--file-to-check= FILE_TO_CHECK=]
+ [--check-prefix= CHECK_PREFIX=]
+ [-l {debug,info,warning,error}] [--comment= COMMENT=] [-d]
+ [--disable-substitutions]
+ check_file
+...
+```
+
+On Windows it may be necessary to add the Python scripts folder
+(e.g. ``C:\Python34\Scripts\``) to your PATH if the above commands do not work.
+
+Other requirements
+------------------
+
+We currently require Z3 4.<FIXME> to be used with the test suite.
+
+
+Running the tests
+-----------------
+
+lit is a very flexible tool. You simply pass it one or more paths to directories
+or individual tests (usually .bpl files) and lit will build up a list of tests
+to run.
+
+For example to run the whole test suite run the following command
+
+```
+$ cd Test
+$ lit .
+```
+
+For example to run all tests in the ``test1`` folder and the bla1.bpl and
+constants.bpl test run the following command
+
+```
+$ cd Test
+$ lit test0/ livevars/bla1.bpl aitest0/constants.bpl
+```
+
+Note replace ``/`` with ``\`` on Windows (tab completition is your friend).
+
+If you would prefer to see less information when running tests you can use the
+``-s`` flag to show progress information and a summary when tests finish.
+
+```
+$ cd Test
+$ lit -s .
+```
+
+To pass additional flags to Boogie when running tests run the following command
+where ``-someParamter`` is a paramter Boogie supports.
+
+```
+$ cd Test
+$ lit --param boogie_params='-someParameter' .
+```
+
+For more ``lit`` options run
+
+```
+$ lit --help
+```
+
+Debugging failing tests
+-----------------------
+
+You can pass the ``-v`` flag to get more verbose output to try to determine why
+certains tests are failing.
+
+```
+$ cd Test
+$ lit -v livevars/bla1.bpl
+```
+
+Removing output produced by tests
+---------------------------------
+
+lit will by default create a folder named ``Output`` in each directory that
+will contain temporary files created by tests. You can run the following to
+remove all these folders/files.
+
+```
+$ cd Test
+$ ./clean.py
+```
+
+This script will also remove old files created by the legacy batch file based
+testing infrastructure (no longer in source tree). If temporary files are left
+behind from the old testing infrastructure it is necessary to run this script
+to remove those files before using ``lit``.
+
+Writing tests
+-------------
+
+Tests are driven my special comments written in ``.bpl`` files (each file is an
+individual test). These special comments (RUN lines) contain shell commands to
+run. If any command exits with a non zero exit code the test is
+considered to fail.
+
+The RUN lines may use several substitutions
+
+- ``%boogie`` expands to the absolute path to the Boogie executable with any set
+ options and prefixed by ``mono`` on non Windows platforms. This does not need
+ to be quoted.
+
+- ``%diff`` expands to the diff tool being used. This is ``diff`` on non
+ Windows platforms and ``pydiff`` on Windows. Do not use the ``fc`` tool
+ because it is buggy when tests are run concurrently. This does not need to be
+ quoted.
+
+- ``%OutputCheck`` expands to the absolute path to the OutputCheck tool. This
+ does not need to be quoted.
+
+- ``%s`` the absolute path to the current test file. You should make sure this
+ is quoted so that tests work correctly for users who use spaces in their file
+ paths.
+
+- ``%T`` the path to the temporary directory for this test. You should make sure
+ this is quoted.
+
+- ``%t`` expands to the absolute path of a filename that can be used as a
+ temporary file. This always expands to the same value in a single test so if
+ you need multiple different temporary files append a unique value (e.g.
+ ``%t1``, ``%t2``... etc). You should make sure this is quoted.
+
+Currently most tests simply execute boogie recording its output which then
+compared to a file containing the expected output (``.expect`` files) using
+``%diff``. This is incredibly fragile and it is recommended that new tests use
+the OutputCheck tool instead of relying on %diff.
+
+For more information see
+
+http://llvm.org/docs/CommandGuide/lit.html
+http://llvm.org/docs/TestingGuide.html#regression-test-structure
+https://github.com/stp/OutputCheck/blob/master/README.md
diff --git a/Test/aitest0/Intervals.bpl b/Test/aitest0/Intervals.bpl
index 565b6823..8d40b81d 100644
--- a/Test/aitest0/Intervals.bpl
+++ b/Test/aitest0/Intervals.bpl
@@ -1,334 +1,349 @@
-// RUN: %boogie -infer:j "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const N: int;
-axiom 0 <= N;
-
-procedure P(K: int)
- requires 0 <= K;
-{
- var b: bool, x, k: int;
-
- if (!b) {
- b := !b;
- }
- x := if b then 13 else 10;
- k := K;
- while (k != 0) {
- x := x + k;
- k := k - 1;
- }
- assert 13 <= x;
-}
-
-procedure Thresholds0()
-{
- var i: int;
- i := 0;
- while (i < 200)
- {
- i := i + 1;
- }
- assert i == 200;
-}
-
-procedure Thresholds1()
-{
- var i: int;
- i := 0;
- while (i <= 199)
- {
- i := i + 1;
- }
- assert i == 200;
-}
-
-procedure Thresholds2()
-{
- var i: int;
- i := 100;
- while (0 < i)
- {
- i := i - 1;
- }
- assert i == 0;
-}
-
-procedure Thresholds3()
-{
- var i: int;
- i := 0;
- while (i < 200)
- {
- i := i + 1;
- }
- assert i == 199; // error
-}
-
-procedure Thresholds4()
-{
- var i: int;
- i := 0;
- while (i + 3 < 203)
- {
- i := i + 1;
- }
- assert i * 2 == 400; // error: this would hold in an execution, but /infer:j is too weak to infer invariant i<=200
-}
-
-procedure UnaryNegation0() returns (x: int) // this was once buggy
-{
- x := -1;
- loop_head:
- x := x;
- goto loop_head, after_loop;
- after_loop:
- assert x == -1;
-}
-procedure UnaryNegation1() returns (x: int) // this was once buggy
-{
- x := -1;
- loop_head:
- x := x;
- goto loop_head, after_loop;
- after_loop:
- assert x == 1; // error
-}
-
-// --------------------------- test {:identity} annotation --------------------
-
-function {:identity} MyId(x: int): int;
-function MyStealthyId(x: int): int; // this one messes up the abstract interpretation
-function {:identity false} {:identity}/*the last attribute rules*/ MyPolyId<T>(x: T): T;
-function {:identity /*this is a lie*/} MyBogusId(x: int): int { -x }
-function {:identity /*ignored, since the function takes more than one argument*/} MultipleArgs(x: int, y: int): int;
-function {:identity /*ignored, since the return type is not equal to the argument type*/} BoolToInt(b: bool): int;
-function {:identity true/*in some contexts, the type of this function makes sense as an identity*/} SometimesId0<T>(x: T): int;
-function {:identity true/*in some contexts, the type of this function makes sense as an identity*/} SometimesId1<T>(x: int): T;
-function {:identity true/*in some contexts, the type of this function makes sense as an identity*/} SometimesId2<T,U>(x: T): U;
-
-
-procedure Id0(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + 1;
- }
- assert 0 <= i;
-}
-
-procedure Id1(n: int)
-{
- var i: int;
- i := MyId(0);
- while (i < n)
- {
- i := i + MyId(1);
- }
- assert 0 <= i;
-}
-
-procedure Id2(n: int)
-{
- var i: int;
- i := MyStealthyId(0);
- while (i < n)
- {
- i := i + 1;
- }
- assert 0 <= i; // error: abstract interpreter does not figure this one out
-}
-
-procedure Id3(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + MyStealthyId(1);
- }
- assert 0 <= i; // error: abstract interpreter does not figure this one out
-}
-
-procedure Id4(n: int)
-{
- var i: int;
- i := MyPolyId(0);
- while (i < n)
- {
- i := i + MyPolyId(1);
- }
- assert 0 <= i;
-}
-
-procedure Id5(n: int)
-{
- var i: int;
- var b: bool;
- i, b := 0, false;
- while (i < n)
- {
- i, b := i + 1, false;
- }
- assert !b;
-}
-
-procedure Id6(n: int)
-{
- var i: int;
- var b: bool;
- i, b := 0, MyPolyId(false);
- while (i < n)
- {
- i, b := i + 1, false;
- }
- assert !b;
-}
-
-procedure Id7(n: int)
-{
- var i, k, y, z: int;
- i, k := 0, 0;
- while (i < n)
- {
- i := i + 1;
- y, z := MyBogusId(5), -5;
- k := k + z;
- if (*) {
- assert y == z; // fine
- }
- }
- assert 0 <= k; // error: this does not hold -- k may very well be negative
-}
-
-procedure Id8(n: int)
-{
- var i, k: int;
- i, k := 0, 0;
- while (i < n)
- {
- i := i + 1;
- k := k + MyBogusId(5);
- }
- assert 0 <= k; // since we lied about MyBogusId being an {:identity} function, the abstract interpreter gives us this bogus invariant
-}
-
-procedure Id9(n: int)
- requires 0 < n;
-{
- var i, k: int;
- i, k := 0, 0;
- while (i < n)
- invariant i <= n && -k == 5*i;
- {
- i := i + 1;
- k := k + MyBogusId(5);
- }
- assert -k == 5*n;
- assert false; // this just shows the effect of MyBogusId even more; there is no complaint about this assert
-}
-
-procedure Id10(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + MultipleArgs(19, 23);
- }
- assert 0 <= i; // error: no information is known about i
-}
-
-procedure Id11(n: int)
-{
- var i, k: int;
- i, k := 0, 0;
- while (i < n)
- {
- i := i + 1;
- k := k + BoolToInt(false); // this should not be treated as an identity function, since it goes from one type to another
- }
- assert 0 <= k; // error: no information is known about k
-}
-
-procedure Id12(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + SometimesId0(false);
- }
- assert 0 <= i; // error: no information is known about i
-}
-
-procedure Id13(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + SometimesId0(1);
- }
- assert 0 <= i;
-}
-
-procedure Id14(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + SometimesId0(-1);
- }
- assert 0 <= i; // error: this does not hold
-}
-
-procedure Id15(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + SometimesId1(1);
- }
- assert 0 <= i; // fine: SometimesId1 claims to be an identity and the use of it is int->int
-}
-
-procedure Id16(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + SometimesId2(false);
- }
- assert 0 <= i; // error: no information is known about i
-}
-
-procedure Id17(n: int)
-{
- var i: int;
- i := 0;
- while (i < n)
- {
- i := i + SometimesId2(1);
- }
- assert 0 <= i; // fine: SometimesId2 claims to be an identity and the use of it is int->int
-}
-
-// real numbers
-
-procedure W0(N: real)
-{
- var i, bf0: real;
- i := 0.0;
- while (i < N) {
- bf0 := N - i;
- i := i + 1.0;
- // check termination:
- assert 0.0 <= bf0;
- assert N - i <= bf0 - 1.0;
- }
-}
+// RUN: %boogie -infer:j "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const N: int;
+axiom 0 <= N;
+
+procedure P(K: int)
+ requires 0 <= K;
+{
+ var b: bool, x, k: int;
+
+ if (!b) {
+ b := !b;
+ }
+ x := if b then 13 else 10;
+ k := K;
+ while (k != 0) {
+ x := x + k;
+ k := k - 1;
+ }
+ assert 13 <= x;
+}
+
+procedure Thresholds0()
+{
+ var i: int;
+ i := 0;
+ while (i < 200)
+ {
+ i := i + 1;
+ }
+ assert i == 200;
+}
+
+procedure Thresholds1()
+{
+ var i: int;
+ i := 0;
+ while (i <= 199)
+ {
+ i := i + 1;
+ }
+ assert i == 200;
+}
+
+procedure Thresholds2()
+{
+ var i: int;
+ i := 100;
+ while (0 < i)
+ {
+ i := i - 1;
+ }
+ assert i == 0;
+}
+
+procedure Thresholds3()
+{
+ var i: int;
+ i := 0;
+ while (i < 200)
+ {
+ i := i + 1;
+ }
+ assert i == 199; // error
+}
+
+procedure Thresholds4()
+{
+ var i: int;
+ i := 0;
+ while (i + 3 < 203)
+ {
+ i := i + 1;
+ }
+ assert i * 2 == 400; // error: this would hold in an execution, but /infer:j is too weak to infer invariant i<=200
+}
+
+procedure UnaryNegation0() returns (x: int) // this was once buggy
+{
+ x := -1;
+ loop_head:
+ x := x;
+ goto loop_head, after_loop;
+ after_loop:
+ assert x == -1;
+}
+procedure UnaryNegation1() returns (x: int) // this was once buggy
+{
+ x := -1;
+ loop_head:
+ x := x;
+ goto loop_head, after_loop;
+ after_loop:
+ assert x == 1; // error
+}
+
+// --------------------------- test {:identity} annotation --------------------
+
+function {:identity} MyId(x: int): int;
+function MyStealthyId(x: int): int; // this one messes up the abstract interpretation
+function {:identity false} {:identity}/*the last attribute rules*/ MyPolyId<T>(x: T): T;
+function {:identity /*this is a lie*/} MyBogusId(x: int): int { -x }
+function {:identity /*ignored, since the function takes more than one argument*/} MultipleArgs(x: int, y: int): int;
+function {:identity /*ignored, since the return type is not equal to the argument type*/} BoolToInt(b: bool): int;
+function {:identity true/*in some contexts, the type of this function makes sense as an identity*/} SometimesId0<T>(x: T): int;
+function {:identity true/*in some contexts, the type of this function makes sense as an identity*/} SometimesId1<T>(x: int): T;
+function {:identity true/*in some contexts, the type of this function makes sense as an identity*/} SometimesId2<T,U>(x: T): U;
+
+
+procedure Id0(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + 1;
+ }
+ assert 0 <= i;
+}
+
+procedure Id1(n: int)
+{
+ var i: int;
+ i := MyId(0);
+ while (i < n)
+ {
+ i := i + MyId(1);
+ }
+ assert 0 <= i;
+}
+
+procedure Id2(n: int)
+{
+ var i: int;
+ i := MyStealthyId(0);
+ while (i < n)
+ {
+ i := i + 1;
+ }
+ assert 0 <= i; // error: abstract interpreter does not figure this one out
+}
+
+procedure Id3(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + MyStealthyId(1);
+ }
+ assert 0 <= i; // error: abstract interpreter does not figure this one out
+}
+
+procedure Id4(n: int)
+{
+ var i: int;
+ i := MyPolyId(0);
+ while (i < n)
+ {
+ i := i + MyPolyId(1);
+ }
+ assert 0 <= i;
+}
+
+procedure Id5(n: int)
+{
+ var i: int;
+ var b: bool;
+ i, b := 0, false;
+ while (i < n)
+ {
+ i, b := i + 1, false;
+ }
+ assert !b;
+}
+
+procedure Id6(n: int)
+{
+ var i: int;
+ var b: bool;
+ i, b := 0, MyPolyId(false);
+ while (i < n)
+ {
+ i, b := i + 1, false;
+ }
+ assert !b;
+}
+
+procedure Id7(n: int)
+{
+ var i, k, y, z: int;
+ i, k := 0, 0;
+ while (i < n)
+ {
+ i := i + 1;
+ y, z := MyBogusId(5), -5;
+ k := k + z;
+ if (*) {
+ assert y == z; // fine
+ }
+ }
+ assert 0 <= k; // error: this does not hold -- k may very well be negative
+}
+
+procedure Id8(n: int)
+{
+ var i, k: int;
+ i, k := 0, 0;
+ while (i < n)
+ {
+ i := i + 1;
+ k := k + MyBogusId(5);
+ }
+ assert 0 <= k; // since we lied about MyBogusId being an {:identity} function, the abstract interpreter gives us this bogus invariant
+}
+
+procedure Id9(n: int)
+ requires 0 < n;
+{
+ var i, k: int;
+ i, k := 0, 0;
+ while (i < n)
+ invariant i <= n && -k == 5*i;
+ {
+ i := i + 1;
+ k := k + MyBogusId(5);
+ }
+ assert -k == 5*n;
+ assert false; // this just shows the effect of MyBogusId even more; there is no complaint about this assert
+}
+
+procedure Id10(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + MultipleArgs(19, 23);
+ }
+ assert 0 <= i; // error: no information is known about i
+}
+
+procedure Id11(n: int)
+{
+ var i, k: int;
+ i, k := 0, 0;
+ while (i < n)
+ {
+ i := i + 1;
+ k := k + BoolToInt(false); // this should not be treated as an identity function, since it goes from one type to another
+ }
+ assert 0 <= k; // error: no information is known about k
+}
+
+procedure Id12(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + SometimesId0(false);
+ }
+ assert 0 <= i; // error: no information is known about i
+}
+
+procedure Id13(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + SometimesId0(1);
+ }
+ assert 0 <= i;
+}
+
+procedure Id14(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + SometimesId0(-1);
+ }
+ assert 0 <= i; // error: this does not hold
+}
+
+procedure Id15(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + SometimesId1(1);
+ }
+ assert 0 <= i; // fine: SometimesId1 claims to be an identity and the use of it is int->int
+}
+
+procedure Id16(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + SometimesId2(false);
+ }
+ assert 0 <= i; // error: no information is known about i
+}
+
+procedure Id17(n: int)
+{
+ var i: int;
+ i := 0;
+ while (i < n)
+ {
+ i := i + SometimesId2(1);
+ }
+ assert 0 <= i; // fine: SometimesId2 claims to be an identity and the use of it is int->int
+}
+
+// real numbers
+
+procedure W0(N: real)
+{
+ var i, bf0: real;
+ i := 0.0;
+ while (i < N) {
+ bf0 := N - i;
+ i := i + 1.0;
+ // check termination:
+ assert 0.0 <= bf0;
+ assert N - i <= bf0 - 1.0;
+ }
+}
+
+// mod
+
+procedure Mod0(n: int)
+ requires 10 < n;
+{
+ var i: int;
+
+ i := 0;
+ while (i < 10)
+ {
+ i := (i mod n) + 1;
+ }
+ assert i == 10;
+}
diff --git a/Test/aitest0/Intervals.bpl.expect b/Test/aitest0/Intervals.bpl.expect
index a0769ec5..980593a9 100644
--- a/Test/aitest0/Intervals.bpl.expect
+++ b/Test/aitest0/Intervals.bpl.expect
@@ -54,4 +54,4 @@ Execution trace:
Intervals.bpl(303,3): anon3_LoopHead
Intervals.bpl(303,3): anon3_LoopDone
-Boogie program verifier finished with 16 verified, 11 errors
+Boogie program verifier finished with 17 verified, 11 errors
diff --git a/Test/aitest0/Issue25.bpl b/Test/aitest0/Issue25.bpl
new file mode 100644
index 00000000..6ffcd113
--- /dev/null
+++ b/Test/aitest0/Issue25.bpl
@@ -0,0 +1,14 @@
+// RUN: %boogie -infer:j "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+const N: int;
+axiom 0 <= N;
+
+procedure vacuous_post()
+ensures (forall k, l: int :: 0 <= k && k <= l && l < N ==> N < N); // Used to verify at some point (see https://github.com/boogie-org/boogie/issues/25).
+{
+var x: int;
+x := -N;
+while (x != x) {
+}
+}
diff --git a/Test/aitest0/Issue25.bpl.expect b/Test/aitest0/Issue25.bpl.expect
new file mode 100644
index 00000000..f56502e2
--- /dev/null
+++ b/Test/aitest0/Issue25.bpl.expect
@@ -0,0 +1,8 @@
+Issue25.bpl(12,1): Error BP5003: A postcondition might not hold on this return path.
+Issue25.bpl(8,1): Related location: This is the postcondition that might not hold.
+Execution trace:
+ Issue25.bpl(11,3): anon0
+ Issue25.bpl(12,1): anon2_LoopHead
+ Issue25.bpl(12,1): anon2_LoopDone
+
+Boogie program verifier finished with 0 verified, 1 error
diff --git a/Test/aitest0/constants.bpl b/Test/aitest0/constants.bpl
index a3b82df7..d2075e26 100644
--- a/Test/aitest0/constants.bpl
+++ b/Test/aitest0/constants.bpl
@@ -1,71 +1,71 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Test the constant propagation AI
-
-var GlobalFlag : bool;
-
-const A, B, C:int; // Consts
-
-procedure Join (b : bool)
- modifies GlobalFlag;
-{
- var x, y, z:int;
-
- start:
- GlobalFlag := true;
- x := 3;
- y := 4;
- z := x + y;
- goto Then, Else; // if (b)
-
- Then:
- assume b == true;
- x := x + 1;
- goto join;
-
- Else:
- assume b == false;
- y := 4;
- goto join;
-
- join:
- assert y == 4;
- assert z == 7;
- assert GlobalFlag == true;
- return;
-}
-
-
-procedure Loop ()
-{
- var c, i: int;
-
- start:
- c := 0; i := 0;
- goto test;
-
- test:
- // if (i < 10);
- goto Then, Else;
-
- Then:
- assume (i < 10);
- i := i + 1;
- goto test;
-
- Else:
- return;
-}
-
-procedure Evaluate ()
-{
- var i : int;
-
- start:
- i := 5;
- i := 3 * i + 1;
- i := 3 * (i + 1);
- i := 1 + 3 * i;
- i := (i + 1) * 3;
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Test the constant propagation AI
+
+var GlobalFlag : bool;
+
+const A, B, C:int; // Consts
+
+procedure Join (b : bool)
+ modifies GlobalFlag;
+{
+ var x, y, z:int;
+
+ start:
+ GlobalFlag := true;
+ x := 3;
+ y := 4;
+ z := x + y;
+ goto Then, Else; // if (b)
+
+ Then:
+ assume b == true;
+ x := x + 1;
+ goto join;
+
+ Else:
+ assume b == false;
+ y := 4;
+ goto join;
+
+ join:
+ assert y == 4;
+ assert z == 7;
+ assert GlobalFlag == true;
+ return;
+}
+
+
+procedure Loop ()
+{
+ var c, i: int;
+
+ start:
+ c := 0; i := 0;
+ goto test;
+
+ test:
+ // if (i < 10);
+ goto Then, Else;
+
+ Then:
+ assume (i < 10);
+ i := i + 1;
+ goto test;
+
+ Else:
+ return;
+}
+
+procedure Evaluate ()
+{
+ var i : int;
+
+ start:
+ i := 5;
+ i := 3 * i + 1;
+ i := 3 * (i + 1);
+ i := 1 + 3 * i;
+ i := (i + 1) * 3;
+ return;
+}
diff --git a/Test/aitest1/Bound.bpl b/Test/aitest1/Bound.bpl
index 81b3635f..f2dd2547 100644
--- a/Test/aitest1/Bound.bpl
+++ b/Test/aitest1/Bound.bpl
@@ -1,30 +1,30 @@
-// RUN: %boogie -infer:j "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const TEST: name;
-
-procedure P()
-{
-var i: int;
-var N: int;
-
-start:
- assume N >= 0;
- i := 0;
- assert i <= N;
- goto LoopHead;
-
-LoopHead:
- goto LoopBody, AfterLoop;
-
-LoopBody:
- assume i < N;
- i := i + 1;
- goto LoopHead;
-
-AfterLoop:
- assume !(i < N);
- assert i == N;
- return;
-}
-
-type name;
+// RUN: %boogie -infer:j "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const TEST: name;
+
+procedure P()
+{
+var i: int;
+var N: int;
+
+start:
+ assume N >= 0;
+ i := 0;
+ assert i <= N;
+ goto LoopHead;
+
+LoopHead:
+ goto LoopBody, AfterLoop;
+
+LoopBody:
+ assume i < N;
+ i := i + 1;
+ goto LoopHead;
+
+AfterLoop:
+ assume !(i < N);
+ assert i == N;
+ return;
+}
+
+type name;
diff --git a/Test/aitest1/Linear0.bpl b/Test/aitest1/Linear0.bpl
index 7e55fb12..f8e2c15a 100644
--- a/Test/aitest1/Linear0.bpl
+++ b/Test/aitest1/Linear0.bpl
@@ -1,12 +1,12 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-
-procedure p()
-{
- start:
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+
+procedure p()
+{
+ start:
+ return;
+}
diff --git a/Test/aitest1/Linear1.bpl b/Test/aitest1/Linear1.bpl
index 855dacae..452ebc43 100644
--- a/Test/aitest1/Linear1.bpl
+++ b/Test/aitest1/Linear1.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-
-procedure p()
-{
- start:
- assume x*x == y; // not a linear condition
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+
+procedure p()
+{
+ start:
+ assume x*x == y; // not a linear condition
+ return;
+}
diff --git a/Test/aitest1/Linear2.bpl b/Test/aitest1/Linear2.bpl
index fa743278..6b8684c5 100644
--- a/Test/aitest1/Linear2.bpl
+++ b/Test/aitest1/Linear2.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-
-procedure p()
-{
- start:
- assume x == 8;
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+
+procedure p()
+{
+ start:
+ assume x == 8;
+ return;
+}
diff --git a/Test/aitest1/Linear3.bpl b/Test/aitest1/Linear3.bpl
index a71214fc..19bccde9 100644
--- a/Test/aitest1/Linear3.bpl
+++ b/Test/aitest1/Linear3.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-
-procedure p()
-{
- start:
- assume x < y;
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+
+procedure p()
+{
+ start:
+ assume x < y;
+ return;
+}
diff --git a/Test/aitest1/Linear4.bpl b/Test/aitest1/Linear4.bpl
index 6cd4a947..2dd17d05 100644
--- a/Test/aitest1/Linear4.bpl
+++ b/Test/aitest1/Linear4.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-
-procedure p()
- modifies x;
-{
- A:
- assume x < y;
- goto B, C;
- B:
- x := x*x;
- return;
- C:
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+
+procedure p()
+ modifies x;
+{
+ A:
+ assume x < y;
+ goto B, C;
+ B:
+ x := x*x;
+ return;
+ C:
+ return;
+}
diff --git a/Test/aitest1/Linear5.bpl b/Test/aitest1/Linear5.bpl
index fdd961c3..693dc3cf 100644
--- a/Test/aitest1/Linear5.bpl
+++ b/Test/aitest1/Linear5.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-
-procedure p()
- modifies x;
-{
- A:
- assume -1 <= x;
- goto B, E;
- B:
- assume x < y;
- goto C, E;
- C:
- x := x*x;
- goto D, E;
- D:
- x := y;
- return;
- E:
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+
+procedure p()
+ modifies x;
+{
+ A:
+ assume -1 <= x;
+ goto B, E;
+ B:
+ assume x < y;
+ goto C, E;
+ C:
+ x := x*x;
+ goto D, E;
+ D:
+ x := y;
+ return;
+ E:
+ return;
+}
diff --git a/Test/aitest1/Linear6.bpl b/Test/aitest1/Linear6.bpl
index a6747114..aa0623ba 100644
--- a/Test/aitest1/Linear6.bpl
+++ b/Test/aitest1/Linear6.bpl
@@ -1,23 +1,23 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-var z: int;
-
-procedure p()
- modifies x;
-{
-A:
- x := 8;
- goto B, C;
-B:
- x := 9;
- goto D;
-C:
- x := 10;
- goto D;
-D:
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+var z: int;
+
+procedure p()
+ modifies x;
+{
+A:
+ x := 8;
+ goto B, C;
+B:
+ x := 9;
+ goto D;
+C:
+ x := 10;
+ goto D;
+D:
+ return;
+}
diff --git a/Test/aitest1/Linear7.bpl b/Test/aitest1/Linear7.bpl
index 45ef3e79..37bb442f 100644
--- a/Test/aitest1/Linear7.bpl
+++ b/Test/aitest1/Linear7.bpl
@@ -1,21 +1,21 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Simple test file for checking the inference of linear constraints.
-
-var x: int;
-var y: int;
-var z: int;
-
-procedure p()
-{
-A:
- goto B, C;
-B:
- assume x <= 0;
- goto D;
-C:
- assume y <= 0;
- goto D;
-D:
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Simple test file for checking the inference of linear constraints.
+
+var x: int;
+var y: int;
+var z: int;
+
+procedure p()
+{
+A:
+ goto B, C;
+B:
+ assume x <= 0;
+ goto D;
+C:
+ assume y <= 0;
+ goto D;
+D:
+ return;
+}
diff --git a/Test/aitest1/Linear8.bpl b/Test/aitest1/Linear8.bpl
index cb86b72f..1b13423d 100644
--- a/Test/aitest1/Linear8.bpl
+++ b/Test/aitest1/Linear8.bpl
@@ -1,44 +1,44 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-procedure foo () returns ()
-{
- var i: int;
- var j: int;
- var n: int;
-
-A: // true
- n := 0;
- goto B;
-
-B: // n = 0
- j := 0;
- goto C;
-
-C: // n = 0 AND j = 0
- i := j + 1;
- goto D;
-
-D: // n = 0 AND j = 0 AND i = j + 1
- i := i + 1;
- goto E;
-
-E: // n = 0 AND j = 0 AND i = j + 2
- i := i + 1;
- goto F;
-
-F: // n = 0 AND j = 0 AND i = j + 3
- i := i + 1;
- goto G;
-
-G: // n = 0 AND j = 0 AND i = j + 4
- i := i + 1;
- goto H;
-
-H: // n = 0 AND j = 0 AND i = j + 1
- j := j + 1;
- goto I;
-
-I: // n = 0 AND j = 1 AND i = j + 4
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure foo () returns ()
+{
+ var i: int;
+ var j: int;
+ var n: int;
+
+A: // true
+ n := 0;
+ goto B;
+
+B: // n = 0
+ j := 0;
+ goto C;
+
+C: // n = 0 AND j = 0
+ i := j + 1;
+ goto D;
+
+D: // n = 0 AND j = 0 AND i = j + 1
+ i := i + 1;
+ goto E;
+
+E: // n = 0 AND j = 0 AND i = j + 2
+ i := i + 1;
+ goto F;
+
+F: // n = 0 AND j = 0 AND i = j + 3
+ i := i + 1;
+ goto G;
+
+G: // n = 0 AND j = 0 AND i = j + 4
+ i := i + 1;
+ goto H;
+
+H: // n = 0 AND j = 0 AND i = j + 1
+ j := j + 1;
+ goto I;
+
+I: // n = 0 AND j = 1 AND i = j + 4
+ return;
+}
diff --git a/Test/aitest1/Linear9.bpl b/Test/aitest1/Linear9.bpl
index 86687f05..72bf0d8c 100644
--- a/Test/aitest1/Linear9.bpl
+++ b/Test/aitest1/Linear9.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo () returns ()
-{
- var i: int;
- var j: int;
- var n: int;
-entry:
- assume n >= 4;
- i := 0;
- j := i + 1;
- // n >= 4 AND i = 0 AND j = i+1
- goto exit, loop0;
-
-loop0:
- // n >= 4 AND i >= 0 AND j = i+1
- assume j <= n;
- goto loop1;
-loop1:
- // n >= 4 AND i >= 0 AND j = i+1 AND j <= n
- i := i + 1;
- goto loop2;
-loop2:
- j := j + 1;
- // n >= 4 AND i >= 1 AND j = i+1 AND j <= n+1
- goto loop0, exit;
-
-exit:
- // n >= 4 AND i >= 0 AND j = i+1 AND j <= n+1
- return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo () returns ()
+{
+ var i: int;
+ var j: int;
+ var n: int;
+entry:
+ assume n >= 4;
+ i := 0;
+ j := i + 1;
+ // n >= 4 AND i = 0 AND j = i+1
+ goto exit, loop0;
+
+loop0:
+ // n >= 4 AND i >= 0 AND j = i+1
+ assume j <= n;
+ goto loop1;
+loop1:
+ // n >= 4 AND i >= 0 AND j = i+1 AND j <= n
+ i := i + 1;
+ goto loop2;
+loop2:
+ j := j + 1;
+ // n >= 4 AND i >= 1 AND j = i+1 AND j <= n+1
+ goto loop0, exit;
+
+exit:
+ // n >= 4 AND i >= 0 AND j = i+1 AND j <= n+1
+ return;
+}
diff --git a/Test/aitest1/ineq.bpl b/Test/aitest1/ineq.bpl
index 47f1e4f1..fc6a5847 100644
--- a/Test/aitest1/ineq.bpl
+++ b/Test/aitest1/ineq.bpl
@@ -1,83 +1,83 @@
-// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Test the polyhedra domain for linear inequalities
-
-
-procedure SimpleLoop ()
-{
- var i : int;
-
- start:
- i := 0;
- goto test;
-
- test:
- goto Then, Else;
-
- Then:
- assume i < 10;
- i := i + 1;
- goto test;
-
- Else:
- assume ! (i < 10);
- return;
-}
-
-
-procedure VariableBoundLoop (n : int)
-{
- var i : int;
-
- start:
- i := 0;
- goto test;
-
- test:
- goto Then, Else;
-
- Then:
- assume i < n;
- i := i + 1;
- goto test;
-
- Else:
- assume ! (i < n);
- return;
-}
-
-procedure Foo ()
-{
- var i : int;
-
- start:
- i := 3 * i + 1;
- i := 3 * (i + 1);
- i := 1 + 3 * i;
- i := (i + 1) * 3 ;
- return;
-}
-
-procedure FooToo ()
-{
- var i : int;
-
- start:
- i := 5;
- i := 3 * i + 1;
- i := 3 * (i + 1);
- i := 1 + 3 * i;
- i := (i + 1) * 3 ;
- return;
-}
-
-procedure FooTooStepByStep ()
-{
- var i : int;
-
- L0: i := 5; goto L1;
- L1: i := 3 * i + 1; goto L2;
- L2: i := 3 * (i + 1); goto L3;
- L3: i := 1 + 3 * i; goto L4;
- L4: i := (i + 1) * 3; return;
-}
+// RUN: %boogie -infer:j -instrumentInfer:e -printInstrumented -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Test the polyhedra domain for linear inequalities
+
+
+procedure SimpleLoop ()
+{
+ var i : int;
+
+ start:
+ i := 0;
+ goto test;
+
+ test:
+ goto Then, Else;
+
+ Then:
+ assume i < 10;
+ i := i + 1;
+ goto test;
+
+ Else:
+ assume ! (i < 10);
+ return;
+}
+
+
+procedure VariableBoundLoop (n : int)
+{
+ var i : int;
+
+ start:
+ i := 0;
+ goto test;
+
+ test:
+ goto Then, Else;
+
+ Then:
+ assume i < n;
+ i := i + 1;
+ goto test;
+
+ Else:
+ assume ! (i < n);
+ return;
+}
+
+procedure Foo ()
+{
+ var i : int;
+
+ start:
+ i := 3 * i + 1;
+ i := 3 * (i + 1);
+ i := 1 + 3 * i;
+ i := (i + 1) * 3 ;
+ return;
+}
+
+procedure FooToo ()
+{
+ var i : int;
+
+ start:
+ i := 5;
+ i := 3 * i + 1;
+ i := 3 * (i + 1);
+ i := 1 + 3 * i;
+ i := (i + 1) * 3 ;
+ return;
+}
+
+procedure FooTooStepByStep ()
+{
+ var i : int;
+
+ L0: i := 5; goto L1;
+ L1: i := 3 * i + 1; goto L2;
+ L2: i := 3 * (i + 1); goto L3;
+ L3: i := 1 + 3 * i; goto L4;
+ L4: i := (i + 1) * 3; return;
+}
diff --git a/Test/aitest9/TestIntervals.bpl b/Test/aitest9/TestIntervals.bpl
index 307a1da4..c9bb8284 100644
--- a/Test/aitest9/TestIntervals.bpl
+++ b/Test/aitest9/TestIntervals.bpl
@@ -1,72 +1,72 @@
-// RUN: %boogie "%s" -infer:j > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P()
-{
- var a: int, b: int, c: int;
-
- a := 0;
- while (*) {
- a := a + 1;
- }
- // a in [0, infty]
-
- b := 0;
- if (*) { b := b + 1; }
- if (*) { b := b + 1; }
- if (*) { b := b + 1; }
- // b in [0, 3]
-
- c := a - b;
- // c in [-3, infty]
- goto Next;
-
- Next:
- assert -3 <= c;
- assert c <= 0; // error (there was once an error in the Intervals which thought this assertion to be true)
-}
-
-// The following tests a triply nested array, where the innermost array is a polymorphic map.
-// There was once an error in Boogie's handling of such things in the AI code.
-
-type ref;
-type teflon;
-
-type Field a;
-type HeapType = <a>[Field a]a;
-var Heap: HeapType;
-
-procedure Q(myField: Field [ref][teflon]bool, r: ref, t: teflon)
- modifies Heap;
-{
- Heap[myField][r][t] := true;
-}
-
-// -----
-
-procedure Neq()
-{
- var n: int;
- assume 2 <= n && n <= 10;
- assume 2 != n;
- assume n != 10;
- while (*) {
- n := n;
- }
- assert 3 <= n;
- assert n < 10;
-}
-
-procedure NeqX()
-{
- var n: real;
- assume 2.0 <= n && n <= 10.0;
- assume 2.0 != n;
- assume n != 10.0;
- // The following statement will cause Boogie to know about n only
- // what the abstract interpreter has inferred so far.
- while (*) { n := n; }
-
- assert 2.0 <= n && n <= 10.0; // yes
- assert 2.0 < n; // error, the abstract domain is not precise enough to figure this out
- assert n < 10.0; // error, ditto
-}
+// RUN: %boogie "%s" -infer:j > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P()
+{
+ var a: int, b: int, c: int;
+
+ a := 0;
+ while (*) {
+ a := a + 1;
+ }
+ // a in [0, infty]
+
+ b := 0;
+ if (*) { b := b + 1; }
+ if (*) { b := b + 1; }
+ if (*) { b := b + 1; }
+ // b in [0, 3]
+
+ c := a - b;
+ // c in [-3, infty]
+ goto Next;
+
+ Next:
+ assert -3 <= c;
+ assert c <= 0; // error (there was once an error in the Intervals which thought this assertion to be true)
+}
+
+// The following tests a triply nested array, where the innermost array is a polymorphic map.
+// There was once an error in Boogie's handling of such things in the AI code.
+
+type ref;
+type teflon;
+
+type Field a;
+type HeapType = <a>[Field a]a;
+var Heap: HeapType;
+
+procedure Q(myField: Field [ref][teflon]bool, r: ref, t: teflon)
+ modifies Heap;
+{
+ Heap[myField][r][t] := true;
+}
+
+// -----
+
+procedure Neq()
+{
+ var n: int;
+ assume 2 <= n && n <= 10;
+ assume 2 != n;
+ assume n != 10;
+ while (*) {
+ n := n;
+ }
+ assert 3 <= n;
+ assert n < 10;
+}
+
+procedure NeqX()
+{
+ var n: real;
+ assume 2.0 <= n && n <= 10.0;
+ assume 2.0 != n;
+ assume n != 10.0;
+ // The following statement will cause Boogie to know about n only
+ // what the abstract interpreter has inferred so far.
+ while (*) { n := n; }
+
+ assert 2.0 <= n && n <= 10.0; // yes
+ assert 2.0 < n; // error, the abstract domain is not precise enough to figure this out
+ assert n < 10.0; // error, ditto
+}
diff --git a/Test/aitest9/VarMapFixpoint.bpl b/Test/aitest9/VarMapFixpoint.bpl
index 6a051ed9..83ea45ca 100644
--- a/Test/aitest9/VarMapFixpoint.bpl
+++ b/Test/aitest9/VarMapFixpoint.bpl
@@ -1,60 +1,60 @@
-// RUN: %boogie "%s" -infer:j > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure main()
-{
- var x: int, y: int, z: int;
-
- start:
- x := 2;
- y := 6;
- goto LoopHead;
-
- LoopHead:
- assert y < 10; // error: the loop body sets y to an arbitrary value
- goto LoopBody, LoopEnd;
-
- LoopBody:
- havoc y;
- goto LoopHead;
-
- LoopEnd:
- return;
-}
-
-procedure SimpleWhile5() returns (returnValue: int)
-{
- var i: int;
-
- start:
- returnValue := 1;
- havoc i;
- goto LoopHead;
-
- LoopHead:
- goto LoopBody, LoopEnd;
-
- LoopBody:
- // here, we would simply like to "assume 1 <= i", but the interval domain doesn't interpret
- // assume commands, so we start a loop
- i := 1;
- goto IncLoopHead;
-
- IncLoopHead:
- goto IncI, IncDone;
-
- IncI:
- i := i + 1;
- goto IncLoopHead;
-
- IncDone:
- // now we have 1 <= i
- assert 1 <= i;
-
- returnValue := returnValue * i;
- i := i - 1;
- goto LoopHead;
-
- LoopEnd:
- assert returnValue >= 1;
- return;
-}
+// RUN: %boogie "%s" -infer:j > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure main()
+{
+ var x: int, y: int, z: int;
+
+ start:
+ x := 2;
+ y := 6;
+ goto LoopHead;
+
+ LoopHead:
+ assert y < 10; // error: the loop body sets y to an arbitrary value
+ goto LoopBody, LoopEnd;
+
+ LoopBody:
+ havoc y;
+ goto LoopHead;
+
+ LoopEnd:
+ return;
+}
+
+procedure SimpleWhile5() returns (returnValue: int)
+{
+ var i: int;
+
+ start:
+ returnValue := 1;
+ havoc i;
+ goto LoopHead;
+
+ LoopHead:
+ goto LoopBody, LoopEnd;
+
+ LoopBody:
+ // here, we would simply like to "assume 1 <= i", but the interval domain doesn't interpret
+ // assume commands, so we start a loop
+ i := 1;
+ goto IncLoopHead;
+
+ IncLoopHead:
+ goto IncI, IncDone;
+
+ IncI:
+ i := i + 1;
+ goto IncLoopHead;
+
+ IncDone:
+ // now we have 1 <= i
+ assert 1 <= i;
+
+ returnValue := returnValue * i;
+ i := i - 1;
+ goto LoopHead;
+
+ LoopEnd:
+ assert returnValue >= 1;
+ return;
+}
diff --git a/Test/bitvectors/arrays.bpl b/Test/bitvectors/arrays.bpl
index dae54e63..c6368fbe 100644
--- a/Test/bitvectors/arrays.bpl
+++ b/Test/bitvectors/arrays.bpl
@@ -1,43 +1,43 @@
-// RUN: %boogie -proverWarnings:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const unique f1 : Field int;
-const unique f2 : Field bv32;
-const unique f3 : Field bool;
-
-const unique r1 : ref;
-const unique r2 : ref;
-
-var H : <x>[ref,Field x]x;
-
-procedure foo()
- modifies H;
-{
- var i : int;
- var b : bv32;
- var c : bool;
-
- H[r1, f1] := 3;
- H[r1, f2] := 77bv32;
- H[r1, f3] := true;
- i := H[r1,f1];
- b := H[r1,f2];
- c := H[r1,f3];
- assert i == 3;
- assert b == 77bv32;
- assert H[r1,f3];
-}
-
-var B : [bv32]bv32;
-
-procedure bar()
- modifies B;
-{
- var b : bv32;
-
- B[42bv32] := 77bv32;
- b := B[42bv32];
- assert b == 77bv32;
-}
-
-
+// RUN: %boogie -proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const unique f1 : Field int;
+const unique f2 : Field bv32;
+const unique f3 : Field bool;
+
+const unique r1 : ref;
+const unique r2 : ref;
+
+var H : <x>[ref,Field x]x;
+
+procedure foo()
+ modifies H;
+{
+ var i : int;
+ var b : bv32;
+ var c : bool;
+
+ H[r1, f1] := 3;
+ H[r1, f2] := 77bv32;
+ H[r1, f3] := true;
+ i := H[r1,f1];
+ b := H[r1,f2];
+ c := H[r1,f3];
+ assert i == 3;
+ assert b == 77bv32;
+ assert H[r1,f3];
+}
+
+var B : [bv32]bv32;
+
+procedure bar()
+ modifies B;
+{
+ var b : bv32;
+
+ B[42bv32] := 77bv32;
+ b := B[42bv32];
+ assert b == 77bv32;
+}
+
+
type Field a, ref; \ No newline at end of file
diff --git a/Test/bitvectors/bv0.bpl b/Test/bitvectors/bv0.bpl
index 8c330eda..d5a34bf5 100644
--- a/Test/bitvectors/bv0.bpl
+++ b/Test/bitvectors/bv0.bpl
@@ -1,15 +1,15 @@
-// RUN: %boogie -proverWarnings:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo2(x : bv32) returns(r : bv32)
-{
- block1:
- r := 17bv31; // Error
- r := 17; // Error
- r := x[1:0]; // Error
- r := x[0:1]; // Error
- r := x[55:54]; // Error
- r := x[33:32]; // Error
- r := 17bv10 ++ 17bv42 ++ 13bv22; // Error
- return;
-}
-
+// RUN: %boogie -proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo2(x : bv32) returns(r : bv32)
+{
+ block1:
+ r := 17bv31; // Error
+ r := 17; // Error
+ r := x[1:0]; // Error
+ r := x[0:1]; // Error
+ r := x[55:54]; // Error
+ r := x[33:32]; // Error
+ r := 17bv10 ++ 17bv42 ++ 13bv22; // Error
+ return;
+}
+
diff --git a/Test/bitvectors/bv1.bpl b/Test/bitvectors/bv1.bpl
index 2edc5037..7a86bff7 100644
--- a/Test/bitvectors/bv1.bpl
+++ b/Test/bitvectors/bv1.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie -proverWarnings:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo(x : bv32) returns(r : bv32)
-{
- var q : bv64;
-
- block1:
- r := 17bv32;
- assert r == r;
- assert r[32:0] == r[32:0];
- assert 0bv2 ++ r[12:0] == 0bv2 ++ r[12:0];
- r := 17bv10 ++ 17bv22;
- // r := 17;
- q := 420000000000bv64;
- q := 8444249301319680000bv64;
- q := 16444249301319680000bv64;
- return;
-}
-
+// RUN: %boogie -proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo(x : bv32) returns(r : bv32)
+{
+ var q : bv64;
+
+ block1:
+ r := 17bv32;
+ assert r == r;
+ assert r[32:0] == r[32:0];
+ assert 0bv2 ++ r[12:0] == 0bv2 ++ r[12:0];
+ r := 17bv10 ++ 17bv22;
+ // r := 17;
+ q := 420000000000bv64;
+ q := 8444249301319680000bv64;
+ q := 16444249301319680000bv64;
+ return;
+}
+
diff --git a/Test/bitvectors/bv10.bpl b/Test/bitvectors/bv10.bpl
index cacf9f7a..6ba4ad7a 100644
--- a/Test/bitvectors/bv10.bpl
+++ b/Test/bitvectors/bv10.bpl
@@ -1,12 +1,12 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var x: bv32;
-
-procedure main()
-modifies x;
-{
-
- x := 0bv32;
- assume x == 1bv32;
- assert false;
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var x: bv32;
+
+procedure main()
+modifies x;
+{
+
+ x := 0bv32;
+ assume x == 1bv32;
+ assert false;
+}
diff --git a/Test/bitvectors/bv2.bpl b/Test/bitvectors/bv2.bpl
index 45fdf7e4..8e2c1dad 100644
--- a/Test/bitvectors/bv2.bpl
+++ b/Test/bitvectors/bv2.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie -proverWarnings:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo2(x : bv32) returns(r : bv32)
-{
- block1:
- r := x[-1:1]; // Error
-// r := x[x:1]; // Error
- r := x[1:x]; // Error
- r := x[1+1:3]; // Error
- return;
-}
-
-
+// RUN: %boogie -proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo2(x : bv32) returns(r : bv32)
+{
+ block1:
+ r := x[-1:1]; // Error
+// r := x[x:1]; // Error
+ r := x[1:x]; // Error
+ r := x[1+1:3]; // Error
+ return;
+}
+
+
diff --git a/Test/bitvectors/bv3.bpl b/Test/bitvectors/bv3.bpl
index 5a2ce47f..5b21ca59 100644
--- a/Test/bitvectors/bv3.bpl
+++ b/Test/bitvectors/bv3.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -proverWarnings:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type bv;
-type bv16;
-
+// RUN: %boogie -proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type bv;
+type bv16;
+
diff --git a/Test/bitvectors/bv4.bpl b/Test/bitvectors/bv4.bpl
index 29c8130a..1e7b6e31 100644
--- a/Test/bitvectors/bv4.bpl
+++ b/Test/bitvectors/bv4.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -proverWarnings:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-function a() returns(bv32);
-axiom a() == a();
-
-axiom 0bv5 != 1bv5;
-
-
-// -------------------------
-type $x;
-function g() returns($x);
-type Field x;
-var $gmem : <x>[ref, Field x] x;
-const unique f : Field $x;
-
-procedure qq()
- modifies $gmem;
-{
- $gmem[null, f] := g();
-}
-
-
-type ref;
-const null : ref;
+// RUN: %boogie -proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+function a() returns(bv32);
+axiom a() == a();
+
+axiom 0bv5 != 1bv5;
+
+
+// -------------------------
+type $x;
+function g() returns($x);
+type Field x;
+var $gmem : <x>[ref, Field x] x;
+const unique f : Field $x;
+
+procedure qq()
+ modifies $gmem;
+{
+ $gmem[null, f] := g();
+}
+
+
+type ref;
+const null : ref;
diff --git a/Test/bitvectors/bv5.bpl b/Test/bitvectors/bv5.bpl
index 73dff1ad..048bc315 100644
--- a/Test/bitvectors/bv5.bpl
+++ b/Test/bitvectors/bv5.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-procedure P() returns () {
- var m : <a>[a]int;
-
- m[23bv5] := 17;
- m[21bv5] := 19;
- m[21bv6] := -3;
-
- assert m[23bv5] == 17;
- assert m[21bv6] == 3; // should not be provable
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure P() returns () {
+ var m : <a>[a]int;
+
+ m[23bv5] := 17;
+ m[21bv5] := 19;
+ m[21bv6] := -3;
+
+ assert m[23bv5] == 17;
+ assert m[21bv6] == 3; // should not be provable
+}
diff --git a/Test/bitvectors/bv6.bpl b/Test/bitvectors/bv6.bpl
index d0654b6f..7ff4777f 100644
--- a/Test/bitvectors/bv6.bpl
+++ b/Test/bitvectors/bv6.bpl
@@ -1,11 +1,11 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-procedure Q() returns () {
- var x : bv32, y : bv16;
-
- x := y ++ y;
- assert x[16:0] == y;
- assert x == x[16:0] ++ y;
- assert x[17:1] == y; // should not be verifiable
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure Q() returns () {
+ var x : bv32, y : bv16;
+
+ x := y ++ y;
+ assert x[16:0] == y;
+ assert x == x[16:0] ++ y;
+ assert x[17:1] == y; // should not be verifiable
+}
diff --git a/Test/bitvectors/bv7.bpl b/Test/bitvectors/bv7.bpl
index a60f9547..5d32dda4 100644
--- a/Test/bitvectors/bv7.bpl
+++ b/Test/bitvectors/bv7.bpl
@@ -1,11 +1,11 @@
-// RUN: %boogie -proverWarnings:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo2(x : bv32) returns(r : bv32)
-{
- block1:
- r := x[x:1]; // Error
- r := x[(1:13)]; // Error
- return;
-}
-
-
+// RUN: %boogie -proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo2(x : bv32) returns(r : bv32)
+{
+ block1:
+ r := x[x:1]; // Error
+ r := x[(1:13)]; // Error
+ return;
+}
+
+
diff --git a/Test/bitvectors/bv8.bpl b/Test/bitvectors/bv8.bpl
index ee572998..557eb4e8 100644
--- a/Test/bitvectors/bv8.bpl
+++ b/Test/bitvectors/bv8.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// This file includes some tests for which Boogie once generated bad Z3 input
-
-procedure foo()
-{
- var r: bv3;
- var s: bv6;
- var u: bv15;
- var t: bv24;
-
- t := t[8: 0] ++ t[10: 0] ++ t[24: 18];
- t := (r ++ s) ++ u;
- t := t[16: 0] ++ t[8: 0];
-}
-
-procedure bar()
-{
- var a: bv64;
- var b: bv32;
- var c: bv8;
-
- c := a[8:0];
- c := b[8:0];
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// This file includes some tests for which Boogie once generated bad Z3 input
+
+procedure foo()
+{
+ var r: bv3;
+ var s: bv6;
+ var u: bv15;
+ var t: bv24;
+
+ t := t[8: 0] ++ t[10: 0] ++ t[24: 18];
+ t := (r ++ s) ++ u;
+ t := t[16: 0] ++ t[8: 0];
+}
+
+procedure bar()
+{
+ var a: bv64;
+ var b: bv32;
+ var c: bv8;
+
+ c := a[8:0];
+ c := b[8:0];
+}
diff --git a/Test/bitvectors/bv9.bpl b/Test/bitvectors/bv9.bpl
index 19a147ad..11c5156b 100644
--- a/Test/bitvectors/bv9.bpl
+++ b/Test/bitvectors/bv9.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -proverOpt:OPTIMIZE_FOR_BV=true "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo();
-
-implementation foo()
-{
- assert (forall Q#a$1^15.32#tc1: bv64, Q#b$1^15.32#tc1: bv64, Q#c$1^15.32#tc1: bv64 :: true && true && true ==> ($bv_bvadd64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1) == Q#c$1^15.32#tc1 || $bv_bvadd64($bv_bvadd64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1), 1bv64) == Q#c$1^15.32#tc1) && (if Q#c$1^15.32#tc1 == $bv_bvadd64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1) then $bv_bvugt64(Q#a$1^15.32#tc1, $bv_bvsub64(18446744073709551615bv64, Q#b$1^15.32#tc1)) else $bv_bvuge64(Q#a$1^15.32#tc1, $bv_bvsub64(18446744073709551615bv64, Q#b$1^15.32#tc1))) ==> $bv_bvlshr64($bv_bvxor64($bv_bvor64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1), $bv_bvand64($bv_bvxor64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1), Q#c$1^15.32#tc1)), 0bv32 ++ 63bv32) == 1bv64);
-}
-
-function {:bvbuiltin "bvlshr"} $bv_bvlshr64(p1: bv64, p2: bv64) : bv64;
-
-function {:bvbuiltin "bvand"} $bv_bvand64(p1: bv64, p2: bv64) : bv64;
-
-function {:bvbuiltin "bvor"} $bv_bvor64(p1: bv64, p2: bv64) : bv64;
-
-function {:bvbuiltin "bvxor"} $bv_bvxor64(p1: bv64, p2: bv64) : bv64;
-
-function {:bvbuiltin "bvuge"} $bv_bvuge64(p1: bv64, p2: bv64) : bool;
-
-function {:bvbuiltin "bvugt"} $bv_bvugt64(p1: bv64, p2: bv64) : bool;
-
-function {:bvbuiltin "bvsub"} $bv_bvsub64(p1: bv64, p2: bv64) : bv64;
-
-function {:bvbuiltin "bvadd"} $bv_bvadd64(p1: bv64, p2: bv64) : bv64;
-
+// RUN: %boogie -proverOpt:OPTIMIZE_FOR_BV=true "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo();
+
+implementation foo()
+{
+ assert (forall Q#a$1^15.32#tc1: bv64, Q#b$1^15.32#tc1: bv64, Q#c$1^15.32#tc1: bv64 :: true && true && true ==> ($bv_bvadd64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1) == Q#c$1^15.32#tc1 || $bv_bvadd64($bv_bvadd64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1), 1bv64) == Q#c$1^15.32#tc1) && (if Q#c$1^15.32#tc1 == $bv_bvadd64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1) then $bv_bvugt64(Q#a$1^15.32#tc1, $bv_bvsub64(18446744073709551615bv64, Q#b$1^15.32#tc1)) else $bv_bvuge64(Q#a$1^15.32#tc1, $bv_bvsub64(18446744073709551615bv64, Q#b$1^15.32#tc1))) ==> $bv_bvlshr64($bv_bvxor64($bv_bvor64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1), $bv_bvand64($bv_bvxor64(Q#a$1^15.32#tc1, Q#b$1^15.32#tc1), Q#c$1^15.32#tc1)), 0bv32 ++ 63bv32) == 1bv64);
+}
+
+function {:bvbuiltin "bvlshr"} $bv_bvlshr64(p1: bv64, p2: bv64) : bv64;
+
+function {:bvbuiltin "bvand"} $bv_bvand64(p1: bv64, p2: bv64) : bv64;
+
+function {:bvbuiltin "bvor"} $bv_bvor64(p1: bv64, p2: bv64) : bv64;
+
+function {:bvbuiltin "bvxor"} $bv_bvxor64(p1: bv64, p2: bv64) : bv64;
+
+function {:bvbuiltin "bvuge"} $bv_bvuge64(p1: bv64, p2: bv64) : bool;
+
+function {:bvbuiltin "bvugt"} $bv_bvugt64(p1: bv64, p2: bv64) : bool;
+
+function {:bvbuiltin "bvsub"} $bv_bvsub64(p1: bv64, p2: bv64) : bv64;
+
+function {:bvbuiltin "bvadd"} $bv_bvadd64(p1: bv64, p2: bv64) : bv64;
+
diff --git a/Test/og/DeviceCache.bpl b/Test/civl/DeviceCache.bpl
index f439b607..01b1be01 100644
--- a/Test/og/DeviceCache.bpl
+++ b/Test/civl/DeviceCache.bpl
@@ -1,210 +1,210 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-function {:builtin "MapConst"} mapconstbool(bool): [X]bool;
-const nil: X;
-var {:layer 0,1} ghostLock: X;
-var {:layer 0,1} lock: X;
-var {:layer 0,1} currsize: int;
-var {:layer 0,1} newsize: int;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
-{
- MapConstBool(false)[x := true]
-}
-function {:inline} {:linear "tid"} TidSetCollector(x: [X]bool) : [X]bool
-{
- x
-}
-
-function {:inline} Inv(ghostLock: X, currsize: int, newsize: int) : (bool)
-{
- 0 <= currsize && currsize <= newsize &&
- (ghostLock == nil <==> currsize == newsize)
-}
-
-procedure {:yields} {:layer 1} Yield()
-requires {:layer 1} Inv(ghostLock, currsize, newsize);
-ensures {:layer 1} Inv(ghostLock, currsize, newsize);
-{
- yield;
- assert {:layer 1} Inv(ghostLock, currsize, newsize);
-}
-
-procedure {:yields} {:layer 1} YieldToReadCache({:linear "tid"} tid: X)
-requires {:layer 1} Inv(ghostLock, currsize, newsize) && tid != nil;
-ensures {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) <= currsize;
-{
- yield;
- assert {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) <= currsize;
-}
-
-procedure {:yields} {:layer 1} YieldToWriteCache({:linear "tid"} tid: X)
-requires {:layer 1} Inv(ghostLock, currsize, newsize) && ghostLock == tid && tid != nil;
-ensures {:layer 1} Inv(ghostLock, currsize, newsize) && ghostLock == tid && old(currsize) == currsize && old(newsize) == newsize;
-{
- yield;
- assert {:layer 1} Inv(ghostLock, currsize, newsize) && tid != nil && ghostLock == tid && old(currsize) == currsize && old(newsize) == newsize;
-}
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: X)
-ensures {:layer 1} xl != nil;
-{
- yield;
- call xl := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 1} main({:linear_in "tid"} xls: [X]bool)
-requires {:layer 1} xls == mapconstbool(true);
-{
- var {:linear "tid"} tid: X;
-
- yield;
-
- call Init(xls);
-
- yield;
- assert {:layer 1} Inv(ghostLock, currsize, newsize);
-
- while (*)
- invariant {:layer 1} Inv(ghostLock, currsize, newsize);
- {
- par tid := Allocate() | Yield();
- yield;
- assert {:layer 1} Inv(ghostLock, currsize, newsize);
- async call Thread(tid);
- yield;
- assert {:layer 1} Inv(ghostLock, currsize, newsize);
- }
- yield;
-}
-
-procedure {:yields} {:layer 1} Thread({:linear "tid"} tid: X)
-requires {:layer 1} tid != nil;
-requires {:layer 1} Inv(ghostLock, currsize, newsize);
-{
- var start, size, bytesRead: int;
-
- havoc start, size;
- assume (0 <= start && 0 <= size);
- call bytesRead := Read(tid, start, size);
-}
-
-procedure {:yields} {:layer 1} Read({:linear "tid"} tid: X, start : int, size : int) returns (bytesRead : int)
-requires {:layer 1} tid != nil;
-requires {:layer 1} 0 <= start && 0 <= size;
-requires {:layer 1} Inv(ghostLock, currsize, newsize);
-ensures {:layer 1} 0 <= bytesRead && bytesRead <= size;
-{
- var i, tmp: int;
-
- par YieldToReadCache(tid);
- bytesRead := size;
- call acquire(tid);
- call i := ReadCurrsize(tid);
- call tmp := ReadNewsize(tid);
- if (start + size <= i) {
- call release(tid);
- goto COPY_TO_BUFFER;
- } else if (tmp > i) {
- bytesRead := if (start <= i) then (i - start) else 0;
- call release(tid);
- goto COPY_TO_BUFFER;
- } else {
- call WriteNewsize(tid, start + size);
- call release(tid);
- goto READ_DEVICE;
- }
-
-READ_DEVICE:
- par YieldToWriteCache(tid);
- call WriteCache(tid, start + size);
- par YieldToWriteCache(tid);
- call acquire(tid);
- call tmp := ReadNewsize(tid);
- call WriteCurrsize(tid, tmp);
- call release(tid);
-
-COPY_TO_BUFFER:
- par YieldToReadCache(tid);
- call ReadCache(tid, start, bytesRead);
-}
-
-procedure {:yields} {:layer 1} WriteCache({:linear "tid"} tid: X, index: int)
-requires {:layer 1} Inv(ghostLock, currsize, newsize);
-requires {:layer 1} ghostLock == tid && tid != nil;
-ensures {:layer 1} ghostLock == tid;
-ensures {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) == currsize && old(newsize) == newsize;
-{
- var j: int;
-
- par YieldToWriteCache(tid);
- call j := ReadCurrsize(tid);
- while (j < index)
- invariant {:layer 1} ghostLock == tid && currsize <= j && tid == tid;
- invariant {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) == currsize && old(newsize) == newsize;
- {
- par YieldToWriteCache(tid);
- call WriteCacheEntry(tid, j);
- j := j + 1;
- }
- par YieldToWriteCache(tid);
-}
-
-procedure {:yields} {:layer 1} ReadCache({:linear "tid"} tid: X, start: int, bytesRead: int)
-requires {:layer 1} Inv(ghostLock, currsize, newsize);
-requires {:layer 1} tid != nil;
-requires {:layer 1} 0 <= start && 0 <= bytesRead;
-requires {:layer 1} (bytesRead == 0 || start + bytesRead <= currsize);
-ensures {:layer 1} Inv(ghostLock, currsize, newsize);
-{
- var j: int;
-
- par YieldToReadCache(tid);
-
- j := 0;
- while(j < bytesRead)
- invariant {:layer 1} 0 <= j;
- invariant {:layer 1} bytesRead == 0 || start + bytesRead <= currsize;
- invariant {:layer 1} Inv(ghostLock, currsize, newsize);
- {
- assert {:layer 1} start + j < currsize;
- call ReadCacheEntry(tid, start + j);
- j := j + 1;
- par YieldToReadCache(tid);
- }
-
- par YieldToReadCache(tid);
-}
-
-procedure {:yields} {:layer 0,1} Init({:linear_in "tid"} xls:[X]bool);
-ensures {:atomic} |{ A: assert xls == mapconstbool(true); currsize := 0; newsize := 0; lock := nil; ghostLock := nil; return true; }|;
-
-procedure {:yields} {:layer 0,1} ReadCurrsize({:linear "tid"} tid: X) returns (val: int);
-ensures {:right} |{A: assert tid != nil; assert lock == tid || ghostLock == tid; val := currsize; return true; }|;
-
-procedure {:yields} {:layer 0,1} ReadNewsize({:linear "tid"} tid: X) returns (val: int);
-ensures {:right} |{A: assert tid != nil; assert lock == tid || ghostLock == tid; val := newsize; return true; }|;
-
-procedure {:yields} {:layer 0,1} WriteNewsize({:linear "tid"} tid: X, val: int);
-ensures {:atomic} |{A: assert tid != nil; assert lock == tid && ghostLock == nil; newsize := val; ghostLock := tid; return true; }|;
-
-procedure {:yields} {:layer 0,1} WriteCurrsize({:linear "tid"} tid: X, val: int);
-ensures {:atomic} |{A: assert tid != nil; assert lock == tid && ghostLock == tid; currsize := val; ghostLock := nil; return true; }|;
-
-procedure {:yields} {:layer 0,1} ReadCacheEntry({:linear "tid"} tid: X, index: int);
-ensures {:atomic} |{ A: assert 0 <= index && index < currsize; return true; }|;
-
-procedure {:yields} {:layer 0,1} WriteCacheEntry({:linear "tid"} tid: X, index: int);
-ensures {:right} |{ A: assert tid != nil; assert currsize <= index && ghostLock == tid; return true; }|;
-
-procedure {:yields} {:layer 0,1} acquire({:linear "tid"} tid: X);
-ensures {:right} |{ A: assert tid != nil; assume lock == nil; lock := tid; return true; }|;
-
-procedure {:yields} {:layer 0,1} release({:linear "tid"} tid: X);
-ensures {:left} |{ A: assert tid != nil; assert lock == tid; lock := nil; return true; }|;
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: X);
-ensures {:atomic} |{ A: assume tid != nil; return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+function {:builtin "MapConst"} mapconstbool(bool): [X]bool;
+const nil: X;
+var {:layer 0,1} ghostLock: X;
+var {:layer 0,1} lock: X;
+var {:layer 0,1} currsize: int;
+var {:layer 0,1} newsize: int;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
+{
+ MapConstBool(false)[x := true]
+}
+function {:inline} {:linear "tid"} TidSetCollector(x: [X]bool) : [X]bool
+{
+ x
+}
+
+function {:inline} Inv(ghostLock: X, currsize: int, newsize: int) : (bool)
+{
+ 0 <= currsize && currsize <= newsize &&
+ (ghostLock == nil <==> currsize == newsize)
+}
+
+procedure {:yields} {:layer 1} Yield()
+requires {:layer 1} Inv(ghostLock, currsize, newsize);
+ensures {:layer 1} Inv(ghostLock, currsize, newsize);
+{
+ yield;
+ assert {:layer 1} Inv(ghostLock, currsize, newsize);
+}
+
+procedure {:yields} {:layer 1} YieldToReadCache({:linear "tid"} tid: X)
+requires {:layer 1} Inv(ghostLock, currsize, newsize) && tid != nil;
+ensures {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) <= currsize;
+{
+ yield;
+ assert {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) <= currsize;
+}
+
+procedure {:yields} {:layer 1} YieldToWriteCache({:linear "tid"} tid: X)
+requires {:layer 1} Inv(ghostLock, currsize, newsize) && ghostLock == tid && tid != nil;
+ensures {:layer 1} Inv(ghostLock, currsize, newsize) && ghostLock == tid && old(currsize) == currsize && old(newsize) == newsize;
+{
+ yield;
+ assert {:layer 1} Inv(ghostLock, currsize, newsize) && tid != nil && ghostLock == tid && old(currsize) == currsize && old(newsize) == newsize;
+}
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: X)
+ensures {:layer 1} xl != nil;
+{
+ yield;
+ call xl := AllocateLow();
+ yield;
+}
+
+procedure {:yields} {:layer 1} main({:linear_in "tid"} xls: [X]bool)
+requires {:layer 1} xls == mapconstbool(true);
+{
+ var {:linear "tid"} tid: X;
+
+ yield;
+
+ call Init(xls);
+
+ yield;
+ assert {:layer 1} Inv(ghostLock, currsize, newsize);
+
+ while (*)
+ invariant {:layer 1} Inv(ghostLock, currsize, newsize);
+ {
+ par tid := Allocate() | Yield();
+ yield;
+ assert {:layer 1} Inv(ghostLock, currsize, newsize);
+ async call Thread(tid);
+ yield;
+ assert {:layer 1} Inv(ghostLock, currsize, newsize);
+ }
+ yield;
+}
+
+procedure {:yields} {:layer 1} Thread({:linear "tid"} tid: X)
+requires {:layer 1} tid != nil;
+requires {:layer 1} Inv(ghostLock, currsize, newsize);
+{
+ var start, size, bytesRead: int;
+
+ havoc start, size;
+ assume (0 <= start && 0 <= size);
+ call bytesRead := Read(tid, start, size);
+}
+
+procedure {:yields} {:layer 1} Read({:linear "tid"} tid: X, start : int, size : int) returns (bytesRead : int)
+requires {:layer 1} tid != nil;
+requires {:layer 1} 0 <= start && 0 <= size;
+requires {:layer 1} Inv(ghostLock, currsize, newsize);
+ensures {:layer 1} 0 <= bytesRead && bytesRead <= size;
+{
+ var i, tmp: int;
+
+ par YieldToReadCache(tid);
+ bytesRead := size;
+ call acquire(tid);
+ call i := ReadCurrsize(tid);
+ call tmp := ReadNewsize(tid);
+ if (start + size <= i) {
+ call release(tid);
+ goto COPY_TO_BUFFER;
+ } else if (tmp > i) {
+ bytesRead := if (start <= i) then (i - start) else 0;
+ call release(tid);
+ goto COPY_TO_BUFFER;
+ } else {
+ call WriteNewsize(tid, start + size);
+ call release(tid);
+ goto READ_DEVICE;
+ }
+
+READ_DEVICE:
+ par YieldToWriteCache(tid);
+ call WriteCache(tid, start + size);
+ par YieldToWriteCache(tid);
+ call acquire(tid);
+ call tmp := ReadNewsize(tid);
+ call WriteCurrsize(tid, tmp);
+ call release(tid);
+
+COPY_TO_BUFFER:
+ par YieldToReadCache(tid);
+ call ReadCache(tid, start, bytesRead);
+}
+
+procedure {:yields} {:layer 1} WriteCache({:linear "tid"} tid: X, index: int)
+requires {:layer 1} Inv(ghostLock, currsize, newsize);
+requires {:layer 1} ghostLock == tid && tid != nil;
+ensures {:layer 1} ghostLock == tid;
+ensures {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) == currsize && old(newsize) == newsize;
+{
+ var j: int;
+
+ par YieldToWriteCache(tid);
+ call j := ReadCurrsize(tid);
+ while (j < index)
+ invariant {:layer 1} ghostLock == tid && currsize <= j && tid == tid;
+ invariant {:layer 1} Inv(ghostLock, currsize, newsize) && old(currsize) == currsize && old(newsize) == newsize;
+ {
+ par YieldToWriteCache(tid);
+ call WriteCacheEntry(tid, j);
+ j := j + 1;
+ }
+ par YieldToWriteCache(tid);
+}
+
+procedure {:yields} {:layer 1} ReadCache({:linear "tid"} tid: X, start: int, bytesRead: int)
+requires {:layer 1} Inv(ghostLock, currsize, newsize);
+requires {:layer 1} tid != nil;
+requires {:layer 1} 0 <= start && 0 <= bytesRead;
+requires {:layer 1} (bytesRead == 0 || start + bytesRead <= currsize);
+ensures {:layer 1} Inv(ghostLock, currsize, newsize);
+{
+ var j: int;
+
+ par YieldToReadCache(tid);
+
+ j := 0;
+ while(j < bytesRead)
+ invariant {:layer 1} 0 <= j;
+ invariant {:layer 1} bytesRead == 0 || start + bytesRead <= currsize;
+ invariant {:layer 1} Inv(ghostLock, currsize, newsize);
+ {
+ assert {:layer 1} start + j < currsize;
+ call ReadCacheEntry(tid, start + j);
+ j := j + 1;
+ par YieldToReadCache(tid);
+ }
+
+ par YieldToReadCache(tid);
+}
+
+procedure {:yields} {:layer 0,1} Init({:linear_in "tid"} xls:[X]bool);
+ensures {:atomic} |{ A: assert xls == mapconstbool(true); currsize := 0; newsize := 0; lock := nil; ghostLock := nil; return true; }|;
+
+procedure {:yields} {:layer 0,1} ReadCurrsize({:linear "tid"} tid: X) returns (val: int);
+ensures {:right} |{A: assert tid != nil; assert lock == tid || ghostLock == tid; val := currsize; return true; }|;
+
+procedure {:yields} {:layer 0,1} ReadNewsize({:linear "tid"} tid: X) returns (val: int);
+ensures {:right} |{A: assert tid != nil; assert lock == tid || ghostLock == tid; val := newsize; return true; }|;
+
+procedure {:yields} {:layer 0,1} WriteNewsize({:linear "tid"} tid: X, val: int);
+ensures {:atomic} |{A: assert tid != nil; assert lock == tid && ghostLock == nil; newsize := val; ghostLock := tid; return true; }|;
+
+procedure {:yields} {:layer 0,1} WriteCurrsize({:linear "tid"} tid: X, val: int);
+ensures {:atomic} |{A: assert tid != nil; assert lock == tid && ghostLock == tid; currsize := val; ghostLock := nil; return true; }|;
+
+procedure {:yields} {:layer 0,1} ReadCacheEntry({:linear "tid"} tid: X, index: int);
+ensures {:atomic} |{ A: assert 0 <= index && index < currsize; return true; }|;
+
+procedure {:yields} {:layer 0,1} WriteCacheEntry({:linear "tid"} tid: X, index: int);
+ensures {:right} |{ A: assert tid != nil; assert currsize <= index && ghostLock == tid; return true; }|;
+
+procedure {:yields} {:layer 0,1} acquire({:linear "tid"} tid: X);
+ensures {:right} |{ A: assert tid != nil; assume lock == nil; lock := tid; return true; }|;
+
+procedure {:yields} {:layer 0,1} release({:linear "tid"} tid: X);
+ensures {:left} |{ A: assert tid != nil; assert lock == tid; lock := nil; return true; }|;
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: X);
+ensures {:atomic} |{ A: assume tid != nil; return true; }|;
diff --git a/Test/civl/DeviceCache.bpl.expect b/Test/civl/DeviceCache.bpl.expect
new file mode 100644
index 00000000..129e60e2
--- /dev/null
+++ b/Test/civl/DeviceCache.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 39 verified, 0 errors
diff --git a/Test/og/FlanaganQadeer.bpl b/Test/civl/FlanaganQadeer.bpl
index 7345b5b2..97df7ce2 100644
--- a/Test/og/FlanaganQadeer.bpl
+++ b/Test/civl/FlanaganQadeer.bpl
@@ -1,75 +1,75 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-const nil: X;
-var {:layer 0,1} l: X;
-var {:layer 0,1} x: int;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
-{
- MapConstBool(false)[x := true]
-}
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: X)
-ensures {:layer 1} xl != nil;
-{
- yield;
- call xl := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 1} main()
-{
- var {:linear "tid"} tid: X;
- var val: int;
-
- yield;
- while (*)
- {
- call tid := Allocate();
- havoc val;
- async call foo(tid, val);
- yield;
- }
- yield;
-}
-procedure {:yields} {:layer 0,1} Lock(tid: X);
-ensures {:atomic} |{A: assume l == nil; l := tid; return true; }|;
-
-procedure {:yields} {:layer 0,1} Unlock();
-ensures {:atomic} |{A: l := nil; return true; }|;
-
-procedure {:yields} {:layer 0,1} Set(val: int);
-ensures {:atomic} |{A: x := val; return true; }|;
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xl: X);
-ensures {:atomic} |{ A: assume xl != nil; return true; }|;
-
-procedure {:yields} {:layer 1} foo({:linear_in "tid"} tid': X, val: int)
-requires {:layer 1} tid' != nil;
-{
- var {:linear "tid"} tid: X;
- tid := tid';
-
- yield;
- call Lock(tid);
- call tid := Yield(tid);
- call Set(val);
- call tid := Yield(tid);
- assert {:layer 1} x == val;
- call tid := Yield(tid);
- call Unlock();
- yield;
-}
-
-procedure {:yields} {:layer 1} Yield({:linear_in "tid"} tid': X) returns ({:linear "tid"} tid: X)
-requires {:layer 1} tid' != nil;
-ensures {:layer 1} tid == tid';
-ensures {:layer 1} old(l) == tid ==> old(l) == l && old(x) == x;
-{
- tid := tid';
- yield;
- assert {:layer 1} tid != nil;
- assert {:layer 1} (old(l) == tid ==> old(l) == l && old(x) == x);
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+const nil: X;
+var {:layer 0,1} l: X;
+var {:layer 0,1} x: int;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: X)
+ensures {:layer 1} xl != nil;
+{
+ yield;
+ call xl := AllocateLow();
+ yield;
+}
+
+procedure {:yields} {:layer 1} main()
+{
+ var {:linear "tid"} tid: X;
+ var val: int;
+
+ yield;
+ while (*)
+ {
+ call tid := Allocate();
+ havoc val;
+ async call foo(tid, val);
+ yield;
+ }
+ yield;
+}
+procedure {:yields} {:layer 0,1} Lock(tid: X);
+ensures {:atomic} |{A: assume l == nil; l := tid; return true; }|;
+
+procedure {:yields} {:layer 0,1} Unlock();
+ensures {:atomic} |{A: l := nil; return true; }|;
+
+procedure {:yields} {:layer 0,1} Set(val: int);
+ensures {:atomic} |{A: x := val; return true; }|;
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xl: X);
+ensures {:atomic} |{ A: assume xl != nil; return true; }|;
+
+procedure {:yields} {:layer 1} foo({:linear_in "tid"} tid': X, val: int)
+requires {:layer 1} tid' != nil;
+{
+ var {:linear "tid"} tid: X;
+ tid := tid';
+
+ yield;
+ call Lock(tid);
+ call tid := Yield(tid);
+ call Set(val);
+ call tid := Yield(tid);
+ assert {:layer 1} x == val;
+ call tid := Yield(tid);
+ call Unlock();
+ yield;
+}
+
+procedure {:yields} {:layer 1} Yield({:linear_in "tid"} tid': X) returns ({:linear "tid"} tid: X)
+requires {:layer 1} tid' != nil;
+ensures {:layer 1} tid == tid';
+ensures {:layer 1} old(l) == tid ==> old(l) == l && old(x) == x;
+{
+ tid := tid';
+ yield;
+ assert {:layer 1} tid != nil;
+ assert {:layer 1} (old(l) == tid ==> old(l) == l && old(x) == x);
} \ No newline at end of file
diff --git a/Test/civl/FlanaganQadeer.bpl.expect b/Test/civl/FlanaganQadeer.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/FlanaganQadeer.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/og/Program1.bpl b/Test/civl/Program1.bpl
index f405b92a..5fe49480 100644
--- a/Test/og/Program1.bpl
+++ b/Test/civl/Program1.bpl
@@ -1,33 +1,33 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} x:int;
-
-procedure {:yields} {:layer 1} p()
-requires {:layer 1} x >= 5;
-ensures {:layer 1} x >= 8;
-{
- yield;
- assert {:layer 1} x >= 5;
- call Incr(1);
- yield;
- assert {:layer 1} x >= 6;
- call Incr(1);
- yield;
- assert {:layer 1} x >= 7;
- call Incr(1);
- yield;
- assert {:layer 1} x >= 8;
-}
-
-procedure {:yields} {:layer 1} q()
-{
- yield;
- call Incr(3);
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Incr(val: int);
-ensures {:atomic}
-|{A:
- x := x + val; return true;
-}|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} x:int;
+
+procedure {:yields} {:layer 1} p()
+requires {:layer 1} x >= 5;
+ensures {:layer 1} x >= 8;
+{
+ yield;
+ assert {:layer 1} x >= 5;
+ call Incr(1);
+ yield;
+ assert {:layer 1} x >= 6;
+ call Incr(1);
+ yield;
+ assert {:layer 1} x >= 7;
+ call Incr(1);
+ yield;
+ assert {:layer 1} x >= 8;
+}
+
+procedure {:yields} {:layer 1} q()
+{
+ yield;
+ call Incr(3);
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Incr(val: int);
+ensures {:atomic}
+|{A:
+ x := x + val; return true;
+}|;
diff --git a/Test/og/akash.bpl.expect b/Test/civl/Program1.bpl.expect
index fef5ddc0..00ddb38b 100644
--- a/Test/og/akash.bpl.expect
+++ b/Test/civl/Program1.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 4 verified, 0 errors
+
+Boogie program verifier finished with 4 verified, 0 errors
diff --git a/Test/og/Program2.bpl b/Test/civl/Program2.bpl
index 75c83c67..16b20cf2 100644
--- a/Test/og/Program2.bpl
+++ b/Test/civl/Program2.bpl
@@ -1,37 +1,37 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} x:int;
-
-procedure {:yields} {:layer 1} yield_x(n: int)
-requires {:layer 1} x >= n;
-ensures {:layer 1} x >= n;
-{
- yield;
- assert {:layer 1} x >= n;
-}
-
-procedure {:yields} {:layer 1} p()
-requires {:layer 1} x >= 5;
-ensures {:layer 1} x >= 8;
-{
- call yield_x(5);
- call Incr(1);
- call yield_x(6);
- call Incr(1);
- call yield_x(7);
- call Incr(1);
- call yield_x(8);
-}
-
-procedure {:yields} {:layer 1} q()
-{
- yield;
- call Incr(3);
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Incr(val: int);
-ensures {:atomic}
-|{A:
- x := x + val; return true;
-}|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} x:int;
+
+procedure {:yields} {:layer 1} yield_x(n: int)
+requires {:layer 1} x >= n;
+ensures {:layer 1} x >= n;
+{
+ yield;
+ assert {:layer 1} x >= n;
+}
+
+procedure {:yields} {:layer 1} p()
+requires {:layer 1} x >= 5;
+ensures {:layer 1} x >= 8;
+{
+ call yield_x(5);
+ call Incr(1);
+ call yield_x(6);
+ call Incr(1);
+ call yield_x(7);
+ call Incr(1);
+ call yield_x(8);
+}
+
+procedure {:yields} {:layer 1} q()
+{
+ yield;
+ call Incr(3);
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Incr(val: int);
+ensures {:atomic}
+|{A:
+ x := x + val; return true;
+}|;
diff --git a/Test/og/treiber-stack.bpl.expect b/Test/civl/Program2.bpl.expect
index be6b95ba..9823d44a 100644
--- a/Test/og/treiber-stack.bpl.expect
+++ b/Test/civl/Program2.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 6 verified, 0 errors
+
+Boogie program verifier finished with 6 verified, 0 errors
diff --git a/Test/og/Program3.bpl b/Test/civl/Program3.bpl
index f8c4e132..565279e7 100644
--- a/Test/og/Program3.bpl
+++ b/Test/civl/Program3.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} x:int;
-
-procedure {:yields} {:layer 1} yield_x()
-ensures {:layer 1} x >= old(x);
-{
- yield;
- assert {:layer 1} x >= old(x);
-}
-
-procedure {:yields} {:layer 1} p()
-requires {:layer 1} x >= 5;
-ensures {:layer 1} x >= 8;
-{
- call yield_x();
- call Incr(1);
- call yield_x();
- call Incr(1);
- call yield_x();
- call Incr(1);
- call yield_x();
-}
-
-procedure {:yields} {:layer 1} q()
-{
- yield;
- call Incr(3);
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Incr(val: int);
-ensures {:atomic}
-|{A:
- x := x + val; return true;
-}|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} x:int;
+
+procedure {:yields} {:layer 1} yield_x()
+ensures {:layer 1} x >= old(x);
+{
+ yield;
+ assert {:layer 1} x >= old(x);
+}
+
+procedure {:yields} {:layer 1} p()
+requires {:layer 1} x >= 5;
+ensures {:layer 1} x >= 8;
+{
+ call yield_x();
+ call Incr(1);
+ call yield_x();
+ call Incr(1);
+ call yield_x();
+ call Incr(1);
+ call yield_x();
+}
+
+procedure {:yields} {:layer 1} q()
+{
+ yield;
+ call Incr(3);
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Incr(val: int);
+ensures {:atomic}
+|{A:
+ x := x + val; return true;
+}|;
diff --git a/Test/civl/Program3.bpl.expect b/Test/civl/Program3.bpl.expect
new file mode 100644
index 00000000..9823d44a
--- /dev/null
+++ b/Test/civl/Program3.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 6 verified, 0 errors
diff --git a/Test/civl/Program4.bpl b/Test/civl/Program4.bpl
new file mode 100644
index 00000000..11ba8afa
--- /dev/null
+++ b/Test/civl/Program4.bpl
@@ -0,0 +1,139 @@
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,2} a:[int]int;
+var {:layer 0,1} count: int;
+var {:layer 1,1} {:linear "tid"} allocated:[int]bool;
+
+procedure {:yields} {:layer 2} main()
+requires {:layer 1} allocated == MapConstBool(false);
+{
+ var {:layer 1} {:linear "tid"} tid:int;
+ var i: int;
+
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ while (true)
+ invariant {:layer 1} AllocInv(count, allocated);
+ {
+ call tid, i := Allocate();
+ async call P(tid, i);
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ }
+ yield;
+}
+
+procedure {:yields} {:layer 2} P({:layer 1} {:linear "tid"} tid: int, i: int)
+requires {:layer 1} tid == i;
+requires {:layer 1} AllocInv(count, allocated);
+ensures {:layer 1} AllocInv(count, allocated);
+ensures {:layer 2} a[tid] == old(a)[tid] + 1;
+{
+ var t:int;
+
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ assert {:layer 2} a[tid] == old(a)[tid];
+ call t := Read(tid, i);
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ assert {:layer 2} a[tid] == t;
+ call Write(tid, i, t + 1);
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ assert {:layer 2} a[tid] == t + 1;
+}
+
+procedure {:yields} {:layer 1,2} Allocate() returns ({:layer 1} {:linear "tid"} tid: int, i: int)
+requires {:layer 1} AllocInv(count, allocated);
+ensures {:layer 1} AllocInv(count, allocated);
+ensures {:layer 1} tid == i;
+ensures {:atomic}
+|{A:
+ return true;
+}|;
+{
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ call i := AllocateLow();
+ call tid := MakeLinear(i);
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+}
+
+procedure {:yields} {:layer 1,2} Read({:layer 1} {:linear "tid"} tid: int, i: int) returns (val: int)
+requires {:layer 1} tid == i;
+requires {:layer 1} AllocInv(count, allocated);
+ensures {:layer 1} AllocInv(count, allocated);
+ensures {:atomic}
+|{A:
+ val := a[tid]; return true;
+}|;
+{
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ call val := ReadLow(i);
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+}
+
+procedure {:yields} {:layer 1,2} Write({:layer 1} {:linear "tid"} tid: int, i: int, val: int)
+requires {:layer 1} tid == i;
+requires {:layer 1} AllocInv(count, allocated);
+ensures {:layer 1} AllocInv(count, allocated);
+ensures {:atomic}
+|{A:
+ a[tid] := val; return true;
+}|;
+{
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+ call WriteLow(i, val);
+ yield;
+ assert {:layer 1} AllocInv(count, allocated);
+}
+
+function {:inline} AllocInv(count: int, allocated:[int]bool): (bool)
+{
+ (forall x: int :: allocated[x] ==> x < count)
+}
+
+procedure {:yields} {:layer 0,1} ReadLow(i: int) returns (val: int);
+ensures {:atomic}
+|{A:
+ val := a[i]; return true;
+}|;
+
+procedure {:yields} {:layer 0,1} WriteLow(i: int, val: int);
+ensures {:atomic}
+|{A:
+ a[i] := val; return true;
+}|;
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns (i: int);
+ensures {:atomic}
+|{A:
+ i := count;
+ count := i + 1;
+ return true;
+}|;
+
+// We can prove that this primitive procedure preserves the permission invariant locally.
+// We only need to using its specification and the definitions of TidCollector and TidSetCollector.
+procedure {:layer 1} MakeLinear(i: int) returns ({:linear "tid"} tid: int);
+requires !allocated[i];
+modifies allocated;
+ensures tid == i && allocated == old(allocated)[i := true];
+
+function {:builtin "MapConst"} MapConstBool(bool): [int]bool;
+function {:builtin "MapOr"} MapOr([int]bool, [int]bool) : [int]bool;
+
+function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+function {:inline} {:linear "tid"} TidSetCollector(x: [int]bool) : [int]bool
+{
+ x
+}
+
diff --git a/Test/og/lock-introduced.bpl.expect b/Test/civl/Program4.bpl.expect
index f62a8f46..f08c6e00 100644
--- a/Test/og/lock-introduced.bpl.expect
+++ b/Test/civl/Program4.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 12 verified, 0 errors
+
+Boogie program verifier finished with 12 verified, 0 errors
diff --git a/Test/og/Program5.bpl b/Test/civl/Program5.bpl
index 7ede3124..362a6d9d 100644
--- a/Test/og/Program5.bpl
+++ b/Test/civl/Program5.bpl
@@ -1,79 +1,84 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type Tid;
-const unique nil: Tid;
-
-function {:inline} UNALLOC():int { 0 }
-function {:inline} WHITE():int { 1 }
-function {:inline} GRAY():int { 2 }
-function {:inline} BLACK():int { 3 }
-function {:inline} Unalloc(i:int) returns(bool) { i <= 0 }
-function {:inline} White(i:int) returns(bool) { i == 1 }
-function {:inline} Gray(i:int) returns(bool) { i == 2 }
-function {:inline} Black(i:int) returns(bool) { i >= 3 }
-
-procedure {:yields} {:layer 2} YieldColorOnlyGetsDarker()
-ensures {:layer 2} Color >= old(Color);
-{
- yield;
- assert {:layer 2} Color >= old(Color);
-}
-
-procedure {:yields} {:layer 2,3} WriteBarrier({:linear "tid"} tid:Tid)
-ensures {:atomic} |{ A: assert tid != nil; goto B, C;
- B: assume White(Color); Color := GRAY(); return true;
- C: return true;}|;
-{
- var colorLocal:int;
- yield;
- call colorLocal := GetColorNoLock();
- call YieldColorOnlyGetsDarker();
- if (White(colorLocal)) { call WriteBarrierSlow(tid); }
- yield;
-}
-
-procedure {:yields} {:layer 1,2} WriteBarrierSlow({:linear "tid"} tid:Tid)
-ensures {:atomic} |{ A: assert tid != nil; goto B, C;
- B: assume White(Color); Color := GRAY(); return true;
- C: return true; }|;
-{
- var colorLocal:int;
- yield;
- call AcquireLock(tid);
- call colorLocal := GetColorLocked(tid);
- if (White(colorLocal)) { call SetColorLocked(tid, GRAY()); }
- call ReleaseLock(tid);
- yield;
-}
-
-procedure {:yields} {:layer 0,1} AcquireLock({:linear "tid"} tid: Tid);
- ensures {:right} |{ A: assert tid != nil; assume lock == nil; lock := tid; return true; }|;
-
-procedure {:yields} {:layer 0,1} ReleaseLock({:linear "tid"} tid: Tid);
- ensures {:left} |{ A: assert tid != nil; assert lock == tid; lock := nil; return true; }|;
-
-procedure {:yields} {:layer 0,1} SetColorLocked({:linear "tid"} tid:Tid, newCol:int);
- ensures {:atomic} |{A: assert tid != nil; assert lock == tid; Color := newCol; return true;}|;
-
-procedure {:yields} {:layer 0,1} GetColorLocked({:linear "tid"} tid:Tid) returns (col:int);
- ensures {:both} |{A: assert tid != nil; assert lock == tid; col := Color; return true;}|;
-
-procedure {:yields} {:layer 0,2} GetColorNoLock() returns (col:int);
- ensures {:atomic} |{A: col := Color; return true;}|;
-
-
-
-function {:builtin "MapConst"} MapConstBool(bool): [Tid]bool;
-function {:builtin "MapOr"} MapOr([Tid]bool, [Tid]bool) : [Tid]bool;
-
-var {:layer 0} Color:int;
-var {:layer 0} lock:Tid;
-
-function {:inline} {:linear "tid"} TidCollector(x: Tid) : [Tid]bool
-{
- MapConstBool(false)[x := true]
-}
-function {:inline} {:linear "tid"} TidSetCollector(x: [Tid]bool) : [Tid]bool
-{
- x
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type Tid;
+const unique nil: Tid;
+
+function {:inline} UNALLOC():int { 0 }
+function {:inline} WHITE():int { 1 }
+function {:inline} GRAY():int { 2 }
+function {:inline} BLACK():int { 3 }
+function {:inline} Unalloc(i:int) returns(bool) { i <= 0 }
+function {:inline} White(i:int) returns(bool) { i == 1 }
+function {:inline} WhiteOrLighter(i:int) returns(bool) { i <= 1 }
+function {:inline} Gray(i:int) returns(bool) { i == 2 }
+function {:inline} Black(i:int) returns(bool) { i >= 3 }
+
+procedure {:yields} {:layer 2} YieldColorOnlyGetsDarker()
+ensures {:layer 2} Color >= old(Color);
+{
+ yield;
+ assert {:layer 2} Color >= old(Color);
+}
+
+procedure {:yields} {:layer 2,3} WriteBarrier({:linear "tid"} tid:Tid)
+ensures {:atomic} |{ A: assert tid != nil; goto B, C;
+ B: assume White(Color); Color := GRAY(); return true;
+ C: assume !White(Color); return true;}|;
+requires {:layer 2} Color >= WHITE();
+ensures {:layer 2} Color >= GRAY();
+{
+ var colorLocal:int;
+ yield;
+ assert {:layer 2} Color >= WHITE();
+ call colorLocal := GetColorNoLock();
+ call YieldColorOnlyGetsDarker();
+ if (WhiteOrLighter(colorLocal)) { call WriteBarrierSlow(tid); }
+ yield;
+ assert {:layer 2} Color >= GRAY();
+}
+
+procedure {:yields} {:layer 1,2} WriteBarrierSlow({:linear "tid"} tid:Tid)
+ensures {:atomic} |{ A: assert tid != nil; goto B, C;
+ B: assume WhiteOrLighter(Color); Color := GRAY(); return true;
+ C: assume !WhiteOrLighter(Color); return true; }|;
+{
+ var colorLocal:int;
+ yield;
+ call AcquireLock(tid);
+ call colorLocal := GetColorLocked(tid);
+ if (WhiteOrLighter(colorLocal)) { call SetColorLocked(tid, GRAY()); }
+ call ReleaseLock(tid);
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} AcquireLock({:linear "tid"} tid: Tid);
+ ensures {:right} |{ A: assert tid != nil; assume lock == nil; lock := tid; return true; }|;
+
+procedure {:yields} {:layer 0,1} ReleaseLock({:linear "tid"} tid: Tid);
+ ensures {:left} |{ A: assert tid != nil; assert lock == tid; lock := nil; return true; }|;
+
+procedure {:yields} {:layer 0,1} SetColorLocked({:linear "tid"} tid:Tid, newCol:int);
+ ensures {:atomic} |{A: assert tid != nil; assert lock == tid; Color := newCol; return true;}|;
+
+procedure {:yields} {:layer 0,1} GetColorLocked({:linear "tid"} tid:Tid) returns (col:int);
+ ensures {:both} |{A: assert tid != nil; assert lock == tid; col := Color; return true;}|;
+
+procedure {:yields} {:layer 0,2} GetColorNoLock() returns (col:int);
+ ensures {:atomic} |{A: col := Color; return true;}|;
+
+
+
+function {:builtin "MapConst"} MapConstBool(bool): [Tid]bool;
+function {:builtin "MapOr"} MapOr([Tid]bool, [Tid]bool) : [Tid]bool;
+
+var {:layer 0} Color:int;
+var {:layer 0} lock:Tid;
+
+function {:inline} {:linear "tid"} TidCollector(x: Tid) : [Tid]bool
+{
+ MapConstBool(false)[x := true]
+}
+function {:inline} {:linear "tid"} TidSetCollector(x: [Tid]bool) : [Tid]bool
+{
+ x
+}
diff --git a/Test/civl/Program5.bpl.expect b/Test/civl/Program5.bpl.expect
new file mode 100644
index 00000000..4bcb1071
--- /dev/null
+++ b/Test/civl/Program5.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 21 verified, 0 errors
diff --git a/Test/civl/StoreBuffer.bpl b/Test/civl/StoreBuffer.bpl
new file mode 100644
index 00000000..d2d27ef9
--- /dev/null
+++ b/Test/civl/StoreBuffer.bpl
@@ -0,0 +1,187 @@
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+
+function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+function {:inline} {:linear "addr"} AddrCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+const numMutators: int;
+axiom 0 < numMutators;
+function {:inline} mutatorTid(i: int) : bool { 1 <= i && i <= numMutators }
+
+const GcTid: int;
+axiom numMutators < GcTid;
+function {:inline} mutatorOrGcTid(i: int) : bool { (1 <= i && i <= numMutators) || i == GcTid }
+
+const lockAddr: int;
+axiom 0 < lockAddr;
+const collectorPhaseAddr: int;
+axiom lockAddr < collectorPhaseAddr;
+
+var {:layer 0,1} Mem: [int]int;
+var {:layer 0,1} StoreBufferVal: [int][int]int;
+var {:layer 0,1} StoreBufferPresent: [int][int]bool;
+
+var {:layer 0} lock: int;
+var {:layer 0} collectorPhase: int;
+var {:layer 0} collectorPhaseDelayed: int;
+
+function {:inline} LockInv(StoreBufferPresent:[int][int]bool, StoreBufferVal:[int][int]int, Mem:[int]int, lock:int, collectorPhase:int, collectorPhaseDelayed:int): bool
+{
+ (Mem[lockAddr] == 0 <==> lock == 0) &&
+ (forall i:int :: mutatorOrGcTid(i) && StoreBufferPresent[i][lockAddr] ==> StoreBufferVal[i][lockAddr] == 0) &&
+ (forall i:int :: mutatorOrGcTid(i) ==> lock == i || StoreBufferPresent[i] == MapConstBool(false)) &&
+ (Mem[collectorPhaseAddr] == collectorPhase || (exists i:int :: mutatorOrGcTid(i) && StoreBufferPresent[i][collectorPhaseAddr])) &&
+ (forall i:int :: mutatorOrGcTid(i) && StoreBufferPresent[i][collectorPhaseAddr] ==> StoreBufferVal[i][collectorPhaseAddr] == collectorPhase) &&
+ collectorPhaseDelayed == Mem[collectorPhaseAddr]
+}
+
+// Layer 1
+procedure {:yields} {:layer 1} YieldLock()
+requires {:expand} {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+{
+ yield;
+ assert {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+}
+
+procedure {:yields} {:layer 1} YieldStoreBufferLockAddrPresent({:linear "tid"} tid:int)
+requires {:layer 1} StoreBufferPresent[tid][lockAddr];
+ensures {:layer 1} StoreBufferPresent[tid][lockAddr];
+{
+ yield;
+ assert {:layer 1} StoreBufferPresent[tid][lockAddr];
+}
+
+procedure {:yields} {:layer 1} YieldStoreBufferLockAddrAbsent({:linear "tid"} tid:int)
+requires {:layer 1} !StoreBufferPresent[tid][lockAddr];
+ensures {:layer 1} !StoreBufferPresent[tid][lockAddr];
+{
+ yield;
+ assert {:layer 1} !StoreBufferPresent[tid][lockAddr];
+}
+
+procedure {:yields} {:layer 1} LockAcquire({:linear "tid"} tid: int)
+requires {:layer 1} mutatorOrGcTid(tid);
+requires {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:right} |{ A: assert mutatorOrGcTid(tid); assume lock == 0; lock := tid; return true; }|;
+{
+ var status:bool;
+ call YieldLock();
+ while (true)
+ invariant {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ {
+ call status := LockCAS(tid);
+ if (status)
+ {
+ call YieldLock();
+ return;
+ }
+ call YieldLock();
+ }
+ call YieldLock();
+}
+
+procedure {:yields} {:layer 1} LockRelease({:linear "tid"} tid:int)
+requires {:layer 1} mutatorOrGcTid(tid);
+requires {:layer 1} !StoreBufferPresent[tid][lockAddr];
+requires {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} !StoreBufferPresent[tid][lockAddr];
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:atomic} |{ A: assert mutatorOrGcTid(tid); assert lock == tid; lock := 0; return true; }|;
+{
+ par YieldLock() | YieldStoreBufferLockAddrAbsent(tid);
+ call LockZero(tid);
+ par YieldLock() | YieldStoreBufferLockAddrPresent(tid);
+ call FlushStoreBufferEntryForLock(tid);
+ par YieldLock() | YieldStoreBufferLockAddrAbsent(tid);
+}
+
+procedure {:yields} {:layer 1} ReadCollectorPhaseLocked({:linear "tid"} tid: int) returns (phase: int)
+requires {:layer 1} mutatorOrGcTid(tid);
+requires {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:atomic} |{ A: assert mutatorOrGcTid(tid); assert lock == tid; phase := collectorPhase; return true; }|;
+{
+ call YieldLock();
+ call phase := PrimitiveRead(tid, collectorPhaseAddr);
+ call YieldLock();
+}
+
+procedure {:yields} {:layer 1} ReadCollectorPhaseUnlocked({:linear "tid"} tid: int) returns (phase: int)
+requires {:layer 1} mutatorOrGcTid(tid);
+requires {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:atomic} |{ A: assert mutatorOrGcTid(tid); assert lock != tid; phase := collectorPhaseDelayed; return true; }|;
+{
+ call YieldLock();
+ call phase := PrimitiveRead(tid, collectorPhaseAddr);
+ call YieldLock();
+}
+
+procedure {:yields} {:layer 1} SetCollectorPhase({:linear "tid"} tid: int, phase: int)
+requires {:layer 1} mutatorOrGcTid(tid);
+requires {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:atomic} |{ A: assert mutatorOrGcTid(tid); assert lock == tid; assert collectorPhase == collectorPhaseDelayed; collectorPhase := phase; return true; }|;
+{
+ call YieldLock();
+ call PrimitiveSetCollectorPhase(tid, phase);
+ call YieldLock();
+}
+
+procedure {:yields} {:layer 1} SyncCollectorPhase({:linear "tid"} tid: int)
+requires {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:atomic} |{ A: collectorPhaseDelayed := collectorPhase; return true; }|;
+{
+ call YieldLock();
+ call FlushStoreBufferEntryForCollectorPhase();
+ call YieldLock();
+}
+
+procedure {:yields} {:layer 1} Barrier({:linear "tid"} tid: int)
+requires {:layer 1} mutatorOrGcTid(tid);
+requires {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:layer 1} LockInv(StoreBufferPresent, StoreBufferVal, Mem, lock, collectorPhase, collectorPhaseDelayed);
+ensures {:atomic} |{ A: assert mutatorOrGcTid(tid); assert lock == tid; assume collectorPhase == collectorPhaseDelayed; return true; }|;
+{
+ call YieldLock();
+ call WaitForFlush(tid);
+ call YieldLock();
+}
+
+// Layer 0
+procedure {:yields} {:layer 0,1} LockCAS(tid: int) returns (status: bool);
+ensures {:atomic} |{ A: goto B, C;
+ B: assume Mem[lockAddr] == 0; Mem[lockAddr] := 1; lock := tid; status := true; return true;
+ C: status := false; return true;
+ }|;
+
+procedure {:yields} {:layer 0,1} LockZero(tid: int);
+ensures {:atomic} |{ A: assert !StoreBufferPresent[tid][lockAddr]; StoreBufferPresent[tid][lockAddr] := true; StoreBufferVal[tid][lockAddr] := 0; return true; }|;
+
+procedure {:yields} {:layer 0,1} FlushStoreBufferEntryForLock(tid: int);
+ensures {:atomic} |{ A: assert StoreBufferPresent[tid][lockAddr]; assume StoreBufferPresent[tid] == MapConstBool(false)[lockAddr := true]; Mem[lockAddr] := StoreBufferVal[tid][lockAddr]; StoreBufferPresent[tid][lockAddr] := false; lock := 0; return true; }|;
+
+procedure {:yields} {:layer 0,1} PrimitiveRead(tid: int, addr: int) returns (val: int);
+ensures {:atomic} |{ A: goto B, C;
+ B: assume StoreBufferPresent[tid][addr]; val := StoreBufferVal[tid][addr]; return true;
+ C: assume !StoreBufferPresent[tid][addr]; val := Mem[addr]; return true; }|;
+
+procedure {:yields} {:layer 0,1} PrimitiveSetCollectorPhase(tid: int, phase:int);
+ensures {:atomic} |{ A: StoreBufferPresent[tid][collectorPhaseAddr] := true; StoreBufferVal[tid][collectorPhaseAddr] := phase; collectorPhase := phase; return true; }|;
+
+procedure {:yields} {:layer 0,1} FlushStoreBufferEntryForCollectorPhase();
+ensures {:atomic} |{ var tid:int; A: assume mutatorOrGcTid(tid) && StoreBufferPresent[tid][collectorPhaseAddr]; Mem[collectorPhaseAddr] := StoreBufferVal[tid][collectorPhaseAddr]; StoreBufferPresent[tid][collectorPhaseAddr] := false; collectorPhaseDelayed := Mem[collectorPhaseAddr]; return true; }|;
+
+procedure {:yields} {:layer 0,1} WaitForFlush(tid: int);
+ensures {:atomic} |{ A: assume StoreBufferPresent[tid] == MapConstBool(false); return true; }|;
diff --git a/Test/civl/StoreBuffer.bpl.expect b/Test/civl/StoreBuffer.bpl.expect
new file mode 100644
index 00000000..1931ffd2
--- /dev/null
+++ b/Test/civl/StoreBuffer.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 27 verified, 0 errors
diff --git a/Test/og/akash.bpl b/Test/civl/akash.bpl
index c826b810..fabfcea5 100644
--- a/Test/og/akash.bpl
+++ b/Test/civl/akash.bpl
@@ -1,106 +1,106 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
-function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
-{
- MapConstBool(false)[x := true]
-}
-
-function {:inline} {:linear "1"} SetCollector1(x: [int]bool) : [int]bool
-{
- x
-}
-
-function {:inline} {:linear "2"} SetCollector2(x: [int]bool) : [int]bool
-{
- x
-}
-
-var {:layer 0,1} g: int;
-var {:layer 0,1} h: int;
-
-procedure {:yields} {:layer 0,1} SetG(val:int);
-ensures {:atomic} |{A: g := val; return true; }|;
-
-procedure {:yields} {:layer 0,1} SetH(val:int);
-ensures {:atomic} |{A: h := val; return true; }|;
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: int)
-ensures {:layer 1} xl != 0;
-{
- yield;
- call xl := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: int);
-ensures {:atomic} |{ A: assume xls != 0; return true; }|;
-
-procedure {:yields} {:layer 1} A({:linear_in "tid"} tid_in: int, {:linear_in "1"} x: [int]bool, {:linear_in "2"} y: [int]bool) returns ({:linear "tid"} tid_out: int)
-requires {:layer 1} x == mapconstbool(true);
-requires {:layer 1} y == mapconstbool(true);
-{
- var {:linear "tid"} tid_child: int;
- tid_out := tid_in;
-
- yield;
- call SetG(0);
- yield;
- assert {:layer 1} g == 0 && x == mapconstbool(true);
-
- yield;
- call tid_child := Allocate();
- async call B(tid_child, x);
-
- yield;
- call SetH(0);
-
- yield;
- assert {:layer 1} h == 0 && y == mapconstbool(true);
-
- yield;
- call tid_child := Allocate();
- async call C(tid_child, y);
-
- yield;
-}
-
-procedure {:yields} {:layer 1} B({:linear_in "tid"} tid_in: int, {:linear_in "1"} x_in: [int]bool)
-requires {:layer 1} x_in != mapconstbool(false);
-{
- var {:linear "tid"} tid_out: int;
- var {:linear "1"} x: [int]bool;
- tid_out := tid_in;
- x := x_in;
-
- yield;
-
- call SetG(1);
-
- yield;
-
- call SetG(2);
-
- yield;
-}
-
-procedure {:yields} {:layer 1} C({:linear_in "tid"} tid_in: int, {:linear_in "2"} y_in: [int]bool)
-requires {:layer 1} y_in != mapconstbool(false);
-{
- var {:linear "tid"} tid_out: int;
- var {:linear "2"} y: [int]bool;
- tid_out := tid_in;
- y := y_in;
-
- yield;
-
- call SetH(1);
-
- yield;
-
- call SetH(2);
-
- yield;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+function {:inline} {:linear "1"} SetCollector1(x: [int]bool) : [int]bool
+{
+ x
+}
+
+function {:inline} {:linear "2"} SetCollector2(x: [int]bool) : [int]bool
+{
+ x
+}
+
+var {:layer 0,1} g: int;
+var {:layer 0,1} h: int;
+
+procedure {:yields} {:layer 0,1} SetG(val:int);
+ensures {:atomic} |{A: g := val; return true; }|;
+
+procedure {:yields} {:layer 0,1} SetH(val:int);
+ensures {:atomic} |{A: h := val; return true; }|;
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: int)
+ensures {:layer 1} xl != 0;
+{
+ yield;
+ call xl := AllocateLow();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: int);
+ensures {:atomic} |{ A: assume xls != 0; return true; }|;
+
+procedure {:yields} {:layer 1} A({:linear_in "tid"} tid_in: int, {:linear_in "1"} x: [int]bool, {:linear_in "2"} y: [int]bool) returns ({:linear "tid"} tid_out: int)
+requires {:layer 1} x == mapconstbool(true);
+requires {:layer 1} y == mapconstbool(true);
+{
+ var {:linear "tid"} tid_child: int;
+ tid_out := tid_in;
+
+ yield;
+ call SetG(0);
+ yield;
+ assert {:layer 1} g == 0 && x == mapconstbool(true);
+
+ yield;
+ call tid_child := Allocate();
+ async call B(tid_child, x);
+
+ yield;
+ call SetH(0);
+
+ yield;
+ assert {:layer 1} h == 0 && y == mapconstbool(true);
+
+ yield;
+ call tid_child := Allocate();
+ async call C(tid_child, y);
+
+ yield;
+}
+
+procedure {:yields} {:layer 1} B({:linear_in "tid"} tid_in: int, {:linear_in "1"} x_in: [int]bool)
+requires {:layer 1} x_in != mapconstbool(false);
+{
+ var {:linear "tid"} tid_out: int;
+ var {:linear "1"} x: [int]bool;
+ tid_out := tid_in;
+ x := x_in;
+
+ yield;
+
+ call SetG(1);
+
+ yield;
+
+ call SetG(2);
+
+ yield;
+}
+
+procedure {:yields} {:layer 1} C({:linear_in "tid"} tid_in: int, {:linear_in "2"} y_in: [int]bool)
+requires {:layer 1} y_in != mapconstbool(false);
+{
+ var {:linear "tid"} tid_out: int;
+ var {:linear "2"} y: [int]bool;
+ tid_out := tid_in;
+ y := y_in;
+
+ yield;
+
+ call SetH(1);
+
+ yield;
+
+ call SetH(2);
+
+ yield;
} \ No newline at end of file
diff --git a/Test/civl/akash.bpl.expect b/Test/civl/akash.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/akash.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/civl/alloc.bpl b/Test/civl/alloc.bpl
new file mode 100644
index 00000000..68b7e6c6
--- /dev/null
+++ b/Test/civl/alloc.bpl
@@ -0,0 +1,175 @@
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+
+type lmap;
+function {:linear "mem"} dom(lmap): [int]bool;
+function map(lmap): [int]int;
+function cons([int]bool, [int]int) : lmap;
+axiom (forall x: [int]bool, y: [int]int :: {cons(x,y)} dom(cons(x, y)) == x && map(cons(x,y)) == y);
+
+function EmptyLmap(): (lmap);
+axiom (dom(EmptyLmap()) == MapConstBool(false));
+
+function Add(x: lmap, i: int): (lmap);
+axiom (forall x: lmap, i: int :: dom(Add(x, i)) == dom(x)[i:=true] && map(Add(x, i)) == map(x));
+
+function Remove(x: lmap, i: int): (lmap);
+axiom (forall x: lmap, i: int :: dom(Remove(x, i)) == dom(x)[i:=false] && map(Remove(x, i)) == map(x));
+
+function {:inline} PoolInv(unallocated:[int]bool, pool: lmap) : (bool)
+{
+ (forall x: int :: unallocated[x] ==> dom(pool)[x])
+}
+
+procedure {:yields} {:layer 2} Main()
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+{
+ var {:layer 1} {:linear "mem"} l: lmap;
+ var i: int;
+ par Yield() | Dummy();
+ while (*)
+ invariant {:layer 1} PoolInv(unallocated, pool);
+ {
+ call l, i := Alloc();
+ async call Thread(l, i);
+ par Yield() | Dummy();
+ }
+ par Yield() | Dummy();
+}
+
+procedure {:yields} {:layer 2} Thread({:layer 1} {:linear_in "mem"} local_in: lmap, i: int)
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+requires {:layer 1} dom(local_in)[i] && map(local_in)[i] == mem[i];
+requires {:layer 2} dom(local_in)[i];
+{
+ var y, o: int;
+ var {:layer 1} {:linear "mem"} local: lmap;
+ var {:layer 1} {:linear "mem"} l: lmap;
+
+ par YieldMem(local_in, i) | Dummy();
+ call local := Copy(local_in);
+ call local := Write(local, i, 42);
+ call o := Read(local, i);
+ assert {:layer 2} o == 42;
+ while (*)
+ invariant {:layer 1} PoolInv(unallocated, pool);
+ {
+ call l, y := Alloc();
+ call l := Write(l, y, 42);
+ call o := Read(l, y);
+ assert {:layer 2} o == 42;
+ call Free(l, y);
+ par Yield() | Dummy();
+ }
+ par Yield() | Dummy();
+}
+
+procedure {:pure} {:inline 1} Copy({:linear_in "mem"} l: lmap) returns ({:linear "mem"} l': lmap)
+{
+ l' := l;
+}
+
+procedure {:yields} {:layer 1,2} Alloc() returns ({:layer 1} {:linear "mem"} l: lmap, i: int)
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} dom(l)[i] && map(l)[i] == mem[i];
+ensures {:right} |{ A: assume dom(l)[i]; return true; }|;
+{
+ call Yield();
+ call i := PickAddr();
+ call l := AllocLinear(i);
+ call YieldMem(l, i);
+}
+
+procedure {:yields} {:layer 1,2} Free({:layer 1} {:linear_in "mem"} l: lmap, i: int)
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+requires {:layer 1} dom(l)[i];
+ensures {:both} |{ A: return true; }|;
+{
+ call Yield();
+ call FreeLinear(l, i);
+ call ReturnAddr(i);
+ call Yield();
+}
+
+procedure {:yields} {:layer 1,2} Read({:layer 1} {:linear "mem"} l: lmap, i: int) returns (o: int)
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+requires {:layer 1} dom(l)[i] && map(l)[i] == mem[i];
+ensures {:both} |{ A: assert dom(l)[i]; o := map(l)[i]; return true; }|;
+{
+ call YieldMem(l, i);
+ call o := ReadLow(i);
+ call YieldMem(l, i);
+}
+
+procedure {:yields} {:layer 1,2} Write({:layer 1} {:linear_in "mem"} l: lmap, i: int, o: int) returns ({:layer 1} {:linear "mem"} l': lmap)
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+requires {:layer 1} dom(l)[i] && map(l)[i] == mem[i];
+ensures {:layer 1} dom(l')[i] && map(l')[i] == mem[i];
+ensures {:both} |{ A: assert dom(l)[i]; l' := cons(dom(l), map(l)[i := o]); return true; }|;
+{
+ call YieldMem(l, i);
+ call WriteLow(i, o);
+ call l' := WriteLinear(l, i, o);
+ call YieldMem(l', i);
+}
+
+procedure {:layer 1} AllocLinear(i: int) returns ({:linear "mem"} l: lmap);
+modifies pool;
+requires dom(pool)[i];
+ensures pool == Remove(old(pool), i) && dom(l)[i] && map(l)[i] == mem[i];
+
+procedure {:layer 1} FreeLinear({:linear_in "mem"} l: lmap, i: int);
+modifies pool;
+requires dom(l)[i];
+ensures pool == Add(old(pool), i);
+
+procedure {:layer 1} WriteLinear({:layer 1} {:linear_in "mem"} l: lmap, i: int, o: int) returns ({:layer 1} {:linear "mem"} l': lmap);
+requires dom(l)[i];
+ensures l' == cons(dom(l), map(l)[i := o]);
+
+procedure {:yields} {:layer 1} Yield()
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+{
+ yield;
+ assert {:layer 1} PoolInv(unallocated, pool);
+}
+
+procedure {:yields} {:layer 1} YieldMem({:layer 1} {:linear "mem"} l: lmap, i: int)
+requires {:layer 1} PoolInv(unallocated, pool);
+ensures {:layer 1} PoolInv(unallocated, pool);
+requires {:layer 1} dom(l)[i] && map(l)[i] == mem[i];
+ensures {:layer 1} dom(l)[i] && map(l)[i] == mem[i];
+{
+ yield;
+ assert {:layer 1} PoolInv(unallocated, pool);
+ assert {:layer 1} dom(l)[i] && map(l)[i] == mem[i];
+}
+
+procedure {:yields} {:layer 2} Dummy()
+{
+ yield;
+}
+
+var {:layer 1, 1} {:linear "mem"} pool: lmap;
+var {:layer 0, 1} mem:[int]int;
+var {:layer 0, 1} unallocated:[int]bool;
+
+procedure {:yields} {:layer 0, 1} ReadLow(i: int) returns (o: int);
+ensures {:atomic} |{ A: o := mem[i]; return true; }|;
+
+procedure {:yields} {:layer 0, 1} WriteLow(i: int, o: int);
+ensures {:atomic} |{ A: mem[i] := o; return true; }|;
+
+procedure {:yields} {:layer 0, 1} PickAddr() returns (i: int);
+ensures {:atomic} |{ A: assume unallocated[i]; unallocated[i] := false; return true; }|;
+
+procedure {:yields} {:layer 0, 1} ReturnAddr(i: int);
+ensures {:atomic} |{ A: unallocated[i] := true; return true; }|; \ No newline at end of file
diff --git a/Test/civl/alloc.bpl.expect b/Test/civl/alloc.bpl.expect
new file mode 100644
index 00000000..4bcb1071
--- /dev/null
+++ b/Test/civl/alloc.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 21 verified, 0 errors
diff --git a/Test/og/bar.bpl b/Test/civl/bar.bpl
index 4eef8378..b5068edd 100644
--- a/Test/og/bar.bpl
+++ b/Test/civl/bar.bpl
@@ -1,57 +1,57 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} g:int;
-
-procedure {:yields} {:layer 1} PB()
-{
- yield;
- call Incr();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Incr();
-ensures {:atomic}
-|{A:
- g := g + 1; return true;
-}|;
-
-procedure {:yields} {:layer 0,1} Set(v: int);
-ensures {:atomic}
-|{A:
- g := v; return true;
-}|;
-
-procedure {:yields} {:layer 1} PC()
-ensures {:layer 1} g == old(g);
-{
- yield;
- assert {:layer 1} g == old(g);
-}
-
-procedure {:yields} {:layer 1} PE()
-{
- call PC();
-}
-
-procedure {:yields} {:layer 1} PD()
-{
- yield;
- call Set(3);
- call PC();
- assert {:layer 1} g == 3;
-}
-
-procedure {:yields} {:layer 1} Main2()
-{
- yield;
- while (*)
- {
- async call PB();
- yield;
- async call PE();
- yield;
- async call PD();
- yield;
- }
- yield;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} g:int;
+
+procedure {:yields} {:layer 1} PB()
+{
+ yield;
+ call Incr();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Incr();
+ensures {:atomic}
+|{A:
+ g := g + 1; return true;
+}|;
+
+procedure {:yields} {:layer 0,1} Set(v: int);
+ensures {:atomic}
+|{A:
+ g := v; return true;
+}|;
+
+procedure {:yields} {:layer 1} PC()
+ensures {:layer 1} g == old(g);
+{
+ yield;
+ assert {:layer 1} g == old(g);
+}
+
+procedure {:yields} {:layer 1} PE()
+{
+ call PC();
+}
+
+procedure {:yields} {:layer 1} PD()
+{
+ yield;
+ call Set(3);
+ call PC();
+ assert {:layer 1} g == 3;
+}
+
+procedure {:yields} {:layer 1} Main2()
+{
+ yield;
+ while (*)
+ {
+ async call PB();
+ yield;
+ async call PE();
+ yield;
+ async call PD();
+ yield;
+ }
+ yield;
+}
diff --git a/Test/og/bar.bpl.expect b/Test/civl/bar.bpl.expect
index 8999ae7f..be6722fe 100644
--- a/Test/og/bar.bpl.expect
+++ b/Test/civl/bar.bpl.expect
@@ -1,13 +1,13 @@
-bar.bpl(28,3): Error: Non-interference check failed
-Execution trace:
- bar.bpl(7,3): anon0
- (0,0): anon00
- bar.bpl(14,3): inline$Incr_1$0$this_A
- (0,0): inline$Impl_YieldChecker_PC_1$0$L0
-bar.bpl(28,3): Error: Non-interference check failed
-Execution trace:
- bar.bpl(38,3): anon0
- (0,0): anon00
- (0,0): inline$Impl_YieldChecker_PC_1$0$L0
-
-Boogie program verifier finished with 3 verified, 2 errors
+bar.bpl(28,3): Error: Non-interference check failed
+Execution trace:
+ bar.bpl(7,3): anon0
+ (0,0): anon00
+ bar.bpl(14,3): inline$Incr_1$0$A
+ (0,0): inline$Impl_YieldChecker_PC_1$0$L0
+bar.bpl(28,3): Error: Non-interference check failed
+Execution trace:
+ bar.bpl(38,3): anon0
+ (0,0): anon00
+ (0,0): inline$Impl_YieldChecker_PC_1$0$L0
+
+Boogie program verifier finished with 8 verified, 2 errors
diff --git a/Test/og/chris.bpl b/Test/civl/chris.bpl
index b54292ef..d755c76d 100644
--- a/Test/og/chris.bpl
+++ b/Test/civl/chris.bpl
@@ -1,28 +1,28 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var{:layer 1} x:int;
-
-procedure{:yields}{:layer 2} Havoc()
- ensures{:atomic} |{ A: return true; }|;
-{
- yield;
-}
-
-procedure{:yields}{:layer 1} Recover()
- ensures{:atomic} |{ A: assert x == 5; return true; }|;
-{
- yield;
-}
-
-procedure{:yields}{:layer 3} P()
- ensures{:atomic} |{ A: return true; }|;
- requires{:layer 2,3} x == 5;
- ensures {:layer 2,3} x == 5;
-{
-
- yield; assert{:layer 2,3} x == 5;
- call Havoc();
- yield; assert{:layer 3} x == 5;
- call Recover();
- yield; assert{:layer 2,3} x == 5;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var{:layer 1} x:int;
+
+procedure{:yields}{:layer 2} Havoc()
+ ensures{:atomic} |{ A: return true; }|;
+{
+ yield;
+}
+
+procedure{:yields}{:layer 1} Recover()
+ ensures{:atomic} |{ A: assert x == 5; return true; }|;
+{
+ yield;
+}
+
+procedure{:yields}{:layer 3} P()
+ ensures{:atomic} |{ A: return true; }|;
+ requires{:layer 2,3} x == 5;
+ ensures {:layer 2,3} x == 5;
+{
+
+ yield; assert{:layer 2,3} x == 5;
+ call Havoc();
+ yield; assert{:layer 3} x == 5;
+ call Recover();
+ yield; assert{:layer 2,3} x == 5;
+}
diff --git a/Test/og/chris.bpl.expect b/Test/civl/chris.bpl.expect
index be6b95ba..9823d44a 100644
--- a/Test/og/chris.bpl.expect
+++ b/Test/civl/chris.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 6 verified, 0 errors
+
+Boogie program verifier finished with 6 verified, 0 errors
diff --git a/Test/og/chris2.bpl b/Test/civl/chris2.bpl
index 73f112ed..268c6aa3 100644
--- a/Test/og/chris2.bpl
+++ b/Test/civl/chris2.bpl
@@ -1,34 +1,34 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var{:layer 20} x:int;
-
-procedure{:yields}{:layer 20,25} p_gt1_lower();
- ensures{:both}
- |{
- A:
- x := x + 1;
- return true;
- }|;
-
-procedure{:yields}{:layer 25,40} p_gt1()
- ensures{:both}
- |{
- A:
- x := x + 1;
- return true;
- }|;
-{
- yield;
- call p_gt1_lower();
- yield;
-}
-
-procedure{:yields}{:layer 20,40} p_gt2();
- ensures{:both}
- |{
- A:
- assert x == 0;
- return true;
- }|;
-
-
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var{:layer 20} x:int;
+
+procedure{:yields}{:layer 20,25} p_gt1_lower();
+ ensures{:both}
+ |{
+ A:
+ x := x + 1;
+ return true;
+ }|;
+
+procedure{:yields}{:layer 25,40} p_gt1()
+ ensures{:both}
+ |{
+ A:
+ x := x + 1;
+ return true;
+ }|;
+{
+ yield;
+ call p_gt1_lower();
+ yield;
+}
+
+procedure{:yields}{:layer 20,40} p_gt2();
+ ensures{:both}
+ |{
+ A:
+ assert x == 0;
+ return true;
+ }|;
+
+
diff --git a/Test/og/chris2.bpl.expect b/Test/civl/chris2.bpl.expect
index 2bf339f7..f3b66f4a 100644
--- a/Test/og/chris2.bpl.expect
+++ b/Test/civl/chris2.bpl.expect
@@ -1,18 +1,18 @@
-(0,0): Error BP5003: A postcondition might not hold on this return path.
-chris2.bpl(30,5): Related location: Gate not preserved by p_gt1_lower
-Execution trace:
- (0,0): this_A
-(0,0): Error BP5003: A postcondition might not hold on this return path.
-(0,0): Related location: Gate failure of p_gt2 not preserved by p_gt1_lower
-Execution trace:
- (0,0): this_A
-(0,0): Error BP5003: A postcondition might not hold on this return path.
-chris2.bpl(30,5): Related location: Gate not preserved by p_gt1
-Execution trace:
- (0,0): this_A
-(0,0): Error BP5003: A postcondition might not hold on this return path.
-(0,0): Related location: Gate failure of p_gt2 not preserved by p_gt1
-Execution trace:
- (0,0): this_A
-
-Boogie program verifier finished with 1 verified, 4 errors
+(0,0): Error BP5003: A postcondition might not hold on this return path.
+chris2.bpl(30,5): Related location: Gate not preserved by p_gt1_lower
+Execution trace:
+ (0,0): this_A
+(0,0): Error BP5003: A postcondition might not hold on this return path.
+(0,0): Related location: Gate failure of p_gt2 not preserved by p_gt1_lower
+Execution trace:
+ (0,0): this_A
+(0,0): Error BP5003: A postcondition might not hold on this return path.
+chris2.bpl(30,5): Related location: Gate not preserved by p_gt1
+Execution trace:
+ (0,0): this_A
+(0,0): Error BP5003: A postcondition might not hold on this return path.
+(0,0): Related location: Gate failure of p_gt2 not preserved by p_gt1
+Execution trace:
+ (0,0): this_A
+
+Boogie program verifier finished with 2 verified, 4 errors
diff --git a/Test/civl/chris3.bpl b/Test/civl/chris3.bpl
new file mode 100644
index 00000000..5cbc000a
--- /dev/null
+++ b/Test/civl/chris3.bpl
@@ -0,0 +1,19 @@
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure{:yields}{:layer 94,94} H()
+{
+ yield;
+}
+
+procedure{:yields}{:layer 94,95} A()
+ ensures{:atomic} |{ A: return true; }|;
+{
+ yield;
+}
+
+procedure{:yields}{:layer 95,95} P()
+{
+ yield;
+ par A() | H();
+ yield;
+}
diff --git a/Test/civl/chris3.bpl.expect b/Test/civl/chris3.bpl.expect
new file mode 100644
index 00000000..b415d3b9
--- /dev/null
+++ b/Test/civl/chris3.bpl.expect
@@ -0,0 +1,2 @@
+chris3.bpl(17,2): Error: The callee is not available in the caller procedure
+1 type checking errors detected in chris3.bpl
diff --git a/Test/civl/chris4.bpl b/Test/civl/chris4.bpl
new file mode 100644
index 00000000..7a19f975
--- /dev/null
+++ b/Test/civl/chris4.bpl
@@ -0,0 +1,16 @@
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure{:yields}{:layer 94,95} Test()
+{
+ yield;
+ L:
+ yield;
+}
+
+procedure{:yields}{:layer 94,95} Test2()
+{
+ yield;
+ assert{:layer 94} 2 + 2 == 3;
+ L:
+ yield;
+}
diff --git a/Test/civl/chris4.bpl.expect b/Test/civl/chris4.bpl.expect
new file mode 100644
index 00000000..d3d00979
--- /dev/null
+++ b/Test/civl/chris4.bpl.expect
@@ -0,0 +1,5 @@
+chris4.bpl(13,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ chris4.bpl(12,3): anon0
+
+Boogie program verifier finished with 1 verified, 1 error
diff --git a/Test/civl/chris5.bpl b/Test/civl/chris5.bpl
new file mode 100644
index 00000000..23ebe424
--- /dev/null
+++ b/Test/civl/chris5.bpl
@@ -0,0 +1,19 @@
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var{:layer 1,1} g:int;
+
+procedure{:layer 1} P(x:int)
+ requires {:layer 1} x == 0;
+{
+}
+
+procedure{:yields}{:layer 1,2} Y(x:int)
+ ensures{:atomic} |{ A: return true; }|;
+{
+ yield;
+
+ call P(x);
+ assert{:layer 1} x == 0;
+
+ yield;
+}
diff --git a/Test/civl/chris5.bpl.expect b/Test/civl/chris5.bpl.expect
new file mode 100644
index 00000000..32b474f5
--- /dev/null
+++ b/Test/civl/chris5.bpl.expect
@@ -0,0 +1,7 @@
+chris5.bpl(15,3): Error BP5002: A precondition for this call might not hold.
+chris5.bpl(6,3): Related location: This is the precondition that might not hold.
+Execution trace:
+ chris5.bpl(13,3): anon0
+ (0,0): anon00
+
+Boogie program verifier finished with 1 verified, 1 error
diff --git a/Test/civl/chris6.bpl b/Test/civl/chris6.bpl
new file mode 100644
index 00000000..a0aecf1e
--- /dev/null
+++ b/Test/civl/chris6.bpl
@@ -0,0 +1,14 @@
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure{:extern}{:yields}{:layer 1,2} P1();
+ requires{:layer 1} false;
+ ensures{:atomic} |{ A: return true; }|;
+
+procedure{:yields}{:layer 2,3} P2()
+ ensures{:atomic} |{ A: return true; }|;
+{
+ assert{:layer 1} false;
+ yield;
+ call P1();
+ yield;
+}
diff --git a/Test/civl/chris6.bpl.expect b/Test/civl/chris6.bpl.expect
new file mode 100644
index 00000000..229e4e10
--- /dev/null
+++ b/Test/civl/chris6.bpl.expect
@@ -0,0 +1,5 @@
+chris6.bpl(10,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ chris6.bpl(10,3): anon0
+
+Boogie program verifier finished with 1 verified, 1 error
diff --git a/Test/civl/chris7.bpl b/Test/civl/chris7.bpl
new file mode 100644
index 00000000..a8fd25d3
--- /dev/null
+++ b/Test/civl/chris7.bpl
@@ -0,0 +1,14 @@
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure{:layer 1}{:extern} P() returns(i:int);
+
+procedure{:yields}{:layer 1,1}{:extern} Y({:layer 1}x:int);
+
+procedure{:yields}{:layer 1,2} A({:layer 1}y:int)
+ ensures {:atomic} |{ A: return true; }|;
+{
+ var{:layer 1} tmp:int;
+ call Y(y);
+ call tmp := P();
+ call Y(tmp);
+}
diff --git a/Test/og/one.bpl.expect b/Test/civl/chris7.bpl.expect
index 6abb715b..37fad75c 100644
--- a/Test/og/one.bpl.expect
+++ b/Test/civl/chris7.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 1 verified, 0 errors
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/civl/chris8.bpl b/Test/civl/chris8.bpl
new file mode 100644
index 00000000..070cfec4
--- /dev/null
+++ b/Test/civl/chris8.bpl
@@ -0,0 +1,15 @@
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var{:layer 1,1} x:int;
+
+procedure{:layer 1}{:extern} P1(i:int);
+procedure{:pure}{:extern} P2(j:int);
+
+procedure{:yields}{:layer 1,2} A1({:layer 1}i:int)
+ ensures {:atomic} |{ A: return true; }|;
+{
+ yield;
+ call P1(i);
+ call P2(i);
+ yield;
+}
diff --git a/Test/og/termination2.bpl.expect b/Test/civl/chris8.bpl.expect
index 6abb715b..37fad75c 100644
--- a/Test/og/termination2.bpl.expect
+++ b/Test/civl/chris8.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 1 verified, 0 errors
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/og/civl-paper.bpl b/Test/civl/civl-paper.bpl
index a7042c6a..6cac5cea 100644
--- a/Test/og/civl-paper.bpl
+++ b/Test/civl/civl-paper.bpl
@@ -1,175 +1,175 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-const nil: X;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
-{
- MapConstBool(false)[x := true]
-}
-
-type lmap;
-function {:linear "mem"} dom(lmap): [int]bool;
-function map(lmap): [int]int;
-function cons([int]bool, [int]int) : lmap;
-axiom (forall x: [int]bool, y: [int]int :: {cons(x,y)} dom(cons(x, y)) == x && map(cons(x,y)) == y);
-
-var {:layer 0,3} {:linear "mem"} g: lmap;
-var {:layer 0,3} lock: X;
-var {:layer 0,1} b: bool;
-
-const p: int;
-
-procedure {:yields} {:layer 1} Yield1()
-requires {:layer 1} InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-{
- yield;
- assert {:layer 1} InvLock(lock, b);
-}
-
-function {:inline} InvLock(lock: X, b: bool) : bool
-{
- lock != nil <==> b
-}
-
-procedure {:yields} {:layer 2} Yield2()
-{
- yield;
-}
-
-procedure {:yields} {:layer 3} Yield3()
-requires {:layer 3} Inv(g);
-ensures {:layer 3} Inv(g);
-{
- yield;
- assert {:layer 3} Inv(g);
-}
-
-function {:inline} Inv(g: lmap) : bool
-{
- dom(g)[p] && dom(g)[p+4] && map(g)[p] == map(g)[p+4]
-}
-
-procedure {:yields} {:layer 3} P({:linear "tid"} tid: X)
-requires {:layer 1} tid != nil && InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-requires {:layer 3} tid != nil && Inv(g);
-ensures {:layer 3} Inv(g);
-{
- var t: int;
- var {:linear "mem"} l: lmap;
-
- par Yield3() | Yield1();
- call AcquireProtected(tid);
- call l := TransferFromGlobalProtected(tid);
- call t := Load(l, p);
- call l := Store(l, p, t+1);
- call t := Load(l, p+4);
- call l := Store(l, p+4, t+1);
- call TransferToGlobalProtected(tid, l);
- call ReleaseProtected(tid);
- par Yield3() | Yield1();
-}
-
-
-procedure {:yields} {:layer 2,3} TransferToGlobalProtected({:linear "tid"} tid: X, {:linear_in "mem"} l: lmap)
-ensures {:both} |{ A: assert tid != nil && lock == tid; g := l; return true; }|;
-requires {:layer 1} InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-{
- par Yield1() | Yield2();
- call TransferToGlobal(tid, l);
- par Yield1() | Yield2();
-}
-
-procedure {:yields} {:layer 2,3} TransferFromGlobalProtected({:linear "tid"} tid: X) returns ({:linear "mem"} l: lmap)
-ensures {:both} |{ A: assert tid != nil && lock == tid; l := g; return true; }|;
-requires {:layer 1} InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-{
- par Yield1() | Yield2();
- call l := TransferFromGlobal(tid);
- par Yield1() | Yield2();
-}
-
-procedure {:yields} {:layer 2,3} AcquireProtected({:linear "tid"} tid: X)
-ensures {:right} |{ A: assert tid != nil; assume lock == nil; lock := tid; return true; }|;
-requires {:layer 1} tid != nil && InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-{
- par Yield1() | Yield2();
- call Acquire(tid);
- par Yield1() | Yield2();
-}
-
-procedure {:yields} {:layer 2,3} ReleaseProtected({:linear "tid"} tid: X)
-ensures {:left} |{ A: assert tid != nil && lock == tid; lock := nil; return true; }|;
-requires {:layer 1} InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-{
- par Yield1() | Yield2();
- call Release(tid);
- par Yield1() | Yield2();
-}
-
-procedure {:yields} {:layer 1,2} Acquire({:linear "tid"} tid: X)
-requires {:layer 1} tid != nil && InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-ensures {:atomic} |{ A: assume lock == nil; lock := tid; return true; }|;
-{
- var status: bool;
- var tmp: X;
-
- par Yield1();
- L:
- assert {:layer 1} InvLock(lock, b);
- call status := CAS(tid, false, true);
- par Yield1();
- goto A, B;
-
- A:
- assume status;
- par Yield1();
- return;
-
- B:
- assume !status;
- goto L;
-}
-
-procedure {:yields} {:layer 1,2} Release({:linear "tid"} tid: X)
-ensures {:atomic} |{ A: lock := nil; return true; }|;
-requires {:layer 1} InvLock(lock, b);
-ensures {:layer 1} InvLock(lock, b);
-{
- par Yield1();
- call CLEAR(tid, false);
- par Yield1();
-}
-
-procedure {:yields} {:layer 0,2} TransferToGlobal({:linear "tid"} tid: X, {:linear_in "mem"} l: lmap);
-ensures {:atomic} |{ A: g := l; return true; }|;
-
-procedure {:yields} {:layer 0,2} TransferFromGlobal({:linear "tid"} tid: X) returns ({:linear "mem"} l: lmap);
-ensures {:atomic} |{ A: l := g; return true; }|;
-
-procedure {:yields} {:layer 0,3} Load({:linear "mem"} l: lmap, a: int) returns (v: int);
-ensures {:both} |{ A: v := map(l)[a]; return true; }|;
-
-procedure {:yields} {:layer 0,3} Store({:linear_in "mem"} l_in: lmap, a: int, v: int) returns ({:linear "mem"} l_out: lmap);
-ensures {:both} |{ A: assume l_out == cons(dom(l_in), map(l_in)[a := v]); return true; }|;
-
-procedure {:yields} {:layer 0,1} CAS(tid: X, prev: bool, next: bool) returns (status: bool);
-ensures {:atomic} |{
-A: goto B, C;
-B: assume b == prev; b := next; status := true; lock := tid; return true;
-C: status := false; return true;
-}|;
-
-procedure {:yields} {:layer 0,1} CLEAR(tid: X, next: bool);
-ensures {:atomic} |{
-A: b := next; lock := nil; return true;
-}|;
-
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+const nil: X;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+type lmap;
+function {:linear "mem"} dom(lmap): [int]bool;
+function map(lmap): [int]int;
+function cons([int]bool, [int]int) : lmap;
+axiom (forall x: [int]bool, y: [int]int :: {cons(x,y)} dom(cons(x, y)) == x && map(cons(x,y)) == y);
+
+var {:layer 0,3} {:linear "mem"} g: lmap;
+var {:layer 0,3} lock: X;
+var {:layer 0,1} b: bool;
+
+const p: int;
+
+procedure {:yields} {:layer 1} Yield1()
+requires {:layer 1} InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+{
+ yield;
+ assert {:layer 1} InvLock(lock, b);
+}
+
+function {:inline} InvLock(lock: X, b: bool) : bool
+{
+ lock != nil <==> b
+}
+
+procedure {:yields} {:layer 2} Yield2()
+{
+ yield;
+}
+
+procedure {:yields} {:layer 3} Yield3()
+requires {:layer 3} Inv(g);
+ensures {:layer 3} Inv(g);
+{
+ yield;
+ assert {:layer 3} Inv(g);
+}
+
+function {:inline} Inv(g: lmap) : bool
+{
+ dom(g)[p] && dom(g)[p+4] && map(g)[p] == map(g)[p+4]
+}
+
+procedure {:yields} {:layer 3} P({:linear "tid"} tid: X)
+requires {:layer 1} tid != nil && InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+requires {:layer 3} tid != nil && Inv(g);
+ensures {:layer 3} Inv(g);
+{
+ var t: int;
+ var {:linear "mem"} l: lmap;
+
+ par Yield3() | Yield1();
+ call AcquireProtected(tid);
+ call l := TransferFromGlobalProtected(tid);
+ call t := Load(l, p);
+ call l := Store(l, p, t+1);
+ call t := Load(l, p+4);
+ call l := Store(l, p+4, t+1);
+ call TransferToGlobalProtected(tid, l);
+ call ReleaseProtected(tid);
+ par Yield3() | Yield1();
+}
+
+
+procedure {:yields} {:layer 2,3} TransferToGlobalProtected({:linear "tid"} tid: X, {:linear_in "mem"} l: lmap)
+ensures {:both} |{ A: assert tid != nil && lock == tid; g := l; return true; }|;
+requires {:layer 1} InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+{
+ par Yield1() | Yield2();
+ call TransferToGlobal(tid, l);
+ par Yield1() | Yield2();
+}
+
+procedure {:yields} {:layer 2,3} TransferFromGlobalProtected({:linear "tid"} tid: X) returns ({:linear "mem"} l: lmap)
+ensures {:both} |{ A: assert tid != nil && lock == tid; l := g; return true; }|;
+requires {:layer 1} InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+{
+ par Yield1() | Yield2();
+ call l := TransferFromGlobal(tid);
+ par Yield1() | Yield2();
+}
+
+procedure {:yields} {:layer 2,3} AcquireProtected({:linear "tid"} tid: X)
+ensures {:right} |{ A: assert tid != nil; assume lock == nil; lock := tid; return true; }|;
+requires {:layer 1} tid != nil && InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+{
+ par Yield1() | Yield2();
+ call Acquire(tid);
+ par Yield1() | Yield2();
+}
+
+procedure {:yields} {:layer 2,3} ReleaseProtected({:linear "tid"} tid: X)
+ensures {:left} |{ A: assert tid != nil && lock == tid; lock := nil; return true; }|;
+requires {:layer 1} InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+{
+ par Yield1() | Yield2();
+ call Release(tid);
+ par Yield1() | Yield2();
+}
+
+procedure {:yields} {:layer 1,2} Acquire({:linear "tid"} tid: X)
+requires {:layer 1} tid != nil && InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+ensures {:atomic} |{ A: assume lock == nil; lock := tid; return true; }|;
+{
+ var status: bool;
+ var tmp: X;
+
+ par Yield1();
+ L:
+ assert {:layer 1} InvLock(lock, b);
+ call status := CAS(tid, false, true);
+ par Yield1();
+ goto A, B;
+
+ A:
+ assume status;
+ par Yield1();
+ return;
+
+ B:
+ assume !status;
+ goto L;
+}
+
+procedure {:yields} {:layer 1,2} Release({:linear "tid"} tid: X)
+ensures {:atomic} |{ A: lock := nil; return true; }|;
+requires {:layer 1} InvLock(lock, b);
+ensures {:layer 1} InvLock(lock, b);
+{
+ par Yield1();
+ call CLEAR(tid, false);
+ par Yield1();
+}
+
+procedure {:yields} {:layer 0,2} TransferToGlobal({:linear "tid"} tid: X, {:linear_in "mem"} l: lmap);
+ensures {:atomic} |{ A: g := l; return true; }|;
+
+procedure {:yields} {:layer 0,2} TransferFromGlobal({:linear "tid"} tid: X) returns ({:linear "mem"} l: lmap);
+ensures {:atomic} |{ A: l := g; return true; }|;
+
+procedure {:yields} {:layer 0,3} Load({:linear "mem"} l: lmap, a: int) returns (v: int);
+ensures {:both} |{ A: v := map(l)[a]; return true; }|;
+
+procedure {:yields} {:layer 0,3} Store({:linear_in "mem"} l_in: lmap, a: int, v: int) returns ({:linear "mem"} l_out: lmap);
+ensures {:both} |{ A: assume l_out == cons(dom(l_in), map(l_in)[a := v]); return true; }|;
+
+procedure {:yields} {:layer 0,1} CAS(tid: X, prev: bool, next: bool) returns (status: bool);
+ensures {:atomic} |{
+A: goto B, C;
+B: assume b == prev; b := next; status := true; lock := tid; return true;
+C: status := false; return true;
+}|;
+
+procedure {:yields} {:layer 0,1} CLEAR(tid: X, next: bool);
+ensures {:atomic} |{
+A: b := next; lock := nil; return true;
+}|;
+
diff --git a/Test/civl/civl-paper.bpl.expect b/Test/civl/civl-paper.bpl.expect
new file mode 100644
index 00000000..bd1df2f9
--- /dev/null
+++ b/Test/civl/civl-paper.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 45 verified, 0 errors
diff --git a/Test/og/foo.bpl b/Test/civl/foo.bpl
index 7eeab890..8b7b4aa6 100644
--- a/Test/og/foo.bpl
+++ b/Test/civl/foo.bpl
@@ -1,57 +1,57 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} g:int;
-
-procedure {:yields} {:layer 1} PB()
-{
- yield;
- call Incr();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Incr();
-ensures {:atomic}
-|{A:
- g := g + 1; return true;
-}|;
-
-procedure {:yields} {:layer 0,1} Set(v: int);
-ensures {:atomic}
-|{A:
- g := v; return true;
-}|;
-
-procedure {:yields} {:layer 1} PC()
-ensures {:layer 1} g == 3;
-{
- yield;
- call Set(3);
- yield;
- assert {:layer 1} g == 3;
-}
-
-procedure {:yields} {:layer 1} PE()
-{
- call PC();
-}
-
-procedure {:yields} {:layer 1} PD()
-{
- call PC();
- assert {:layer 1} g == 3;
-}
-
-procedure {:yields} {:layer 1} Main()
-{
- yield;
- while (*)
- {
- async call PB();
- yield;
- async call PE();
- yield;
- async call PD();
- yield;
- }
- yield;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} g:int;
+
+procedure {:yields} {:layer 1} PB()
+{
+ yield;
+ call Incr();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Incr();
+ensures {:atomic}
+|{A:
+ g := g + 1; return true;
+}|;
+
+procedure {:yields} {:layer 0,1} Set(v: int);
+ensures {:atomic}
+|{A:
+ g := v; return true;
+}|;
+
+procedure {:yields} {:layer 1} PC()
+ensures {:layer 1} g == 3;
+{
+ yield;
+ call Set(3);
+ yield;
+ assert {:layer 1} g == 3;
+}
+
+procedure {:yields} {:layer 1} PE()
+{
+ call PC();
+}
+
+procedure {:yields} {:layer 1} PD()
+{
+ call PC();
+ assert {:layer 1} g == 3;
+}
+
+procedure {:yields} {:layer 1} Main()
+{
+ yield;
+ while (*)
+ {
+ async call PB();
+ yield;
+ async call PE();
+ yield;
+ async call PD();
+ yield;
+ }
+ yield;
+}
diff --git a/Test/og/foo.bpl.expect b/Test/civl/foo.bpl.expect
index 0d9de9db..44a93860 100644
--- a/Test/og/foo.bpl.expect
+++ b/Test/civl/foo.bpl.expect
@@ -1,8 +1,8 @@
-foo.bpl(30,3): Error: Non-interference check failed
-Execution trace:
- foo.bpl(7,3): anon0
- (0,0): anon00
- foo.bpl(14,3): inline$Incr_1$0$this_A
- (0,0): inline$Impl_YieldChecker_PC_1$0$L0
-
-Boogie program verifier finished with 4 verified, 1 error
+foo.bpl(30,3): Error: Non-interference check failed
+Execution trace:
+ foo.bpl(7,3): anon0
+ (0,0): anon00
+ foo.bpl(14,3): inline$Incr_1$0$A
+ (0,0): inline$Impl_YieldChecker_PC_1$0$L0
+
+Boogie program verifier finished with 9 verified, 1 error
diff --git a/Test/civl/funky.bpl b/Test/civl/funky.bpl
new file mode 100644
index 00000000..ad5bf271
--- /dev/null
+++ b/Test/civl/funky.bpl
@@ -0,0 +1,133 @@
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+const nil: X;
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+var {:layer 0, 3} A: X;
+var {:layer 0, 3} B: X;
+var {:layer 0, 3} counter: int;
+
+procedure {:yields} {:layer 0, 3} LockA({:linear "tid"} tid: X);
+ensures {:right} |{ A: assert tid != nil; assume A == nil; A := tid; return true; }|;
+
+procedure {:yields} {:layer 0, 1} IncrA({:linear "tid"} tid: X);
+ensures {:right} |{ A: assert tid != nil && A == tid; counter := counter + 1; return true; }|;
+
+procedure {:yields} {:layer 0, 1} DecrA({:linear "tid"} tid: X);
+ensures {:right} |{ A: assert tid != nil && A == tid; counter := counter - 1; return true; }|;
+
+procedure {:yields} {:layer 0, 3} UnlockA({:linear "tid"} tid: X);
+ensures {:left} |{ A: assert tid != nil && A == tid; A := nil; return true; }|;
+
+procedure {:yields} {:layer 0, 3} LockB({:linear "tid"} tid: X);
+ensures {:right} |{ A: assert tid != nil; assume B == nil; B := tid; return true; }|;
+
+procedure {:yields} {:layer 0, 2} IncrB({:linear "tid"} tid: X);
+ensures {:atomic} |{ A: assert tid != nil && B == tid; counter := counter + 1; return true; }|;
+
+procedure {:yields} {:layer 0, 1} DecrB({:linear "tid"} tid: X);
+ensures {:atomic} |{ A: assert tid != nil && B == tid; counter := counter - 1; return true; }|;
+
+procedure {:yields} {:layer 0, 3} UnlockB({:linear "tid"} tid: X);
+ensures {:left} |{ A: assert tid != nil && B == tid; B := nil; return true; }|;
+
+procedure {:yields} {:layer 0, 3} AssertA({:linear "tid"} tid: X);
+ensures {:atomic} |{ A: assert tid != nil && A == tid; assert counter >= -1; return true; }|;
+
+procedure {:yields} {:layer 0, 3} AssertB({:linear "tid"} tid: X);
+ensures {:atomic} |{ A: assert tid != nil && A == tid && B == tid; assert counter == 0; return true; }|;
+
+procedure {:pure} AllocTid() returns ({:linear "tid"} tid: X);
+ensures tid != nil;
+
+procedure {:yields} {:layer 1, 2} AbsDecrB({:linear "tid"} tid: X)
+ensures {:right} |{ A: assert tid != nil && B == tid && counter == 0; counter := counter - 1; return true; }|;
+{
+ yield;
+ call DecrB(tid);
+ yield;
+}
+
+procedure {:yields} {:layer 2, 3} AbsAssertA({:linear "tid"} tid: X)
+ensures {:both} |{ A: assert tid != nil && A == tid; assert counter >= -1; return true; }|;
+{
+ yield;
+ call AssertA(tid);
+ yield;
+}
+
+procedure {:yields} {:layer 2, 3} AbsAssertB({:linear "tid"} tid: X)
+ensures {:both} |{ A: assert tid != nil && A == tid && B == tid; assert counter == 0; return true; }|;
+{
+ yield;
+ call AssertB(tid);
+ yield;
+}
+
+procedure {:yields} {:layer 1} TA({:linear "tid"} tid: X)
+requires {:layer 1} tid != nil;
+{
+ yield;
+ call LockA(tid);
+ call IncrA(tid);
+ call DecrA(tid);
+ call UnlockA(tid);
+ yield;
+}
+
+procedure {:yields} {:layer 2, 3} TB({:linear "tid"} tid: X)
+ensures {:both} |{ A: assert tid != nil && counter == 0; return true; }|;
+{
+ yield;
+ call LockB(tid);
+ call AbsDecrB(tid);
+ call IncrB(tid);
+ call UnlockB(tid);
+ yield;
+}
+
+procedure {:yields} {:layer 3} AbsTB({:linear "tid"} tid: X)
+requires {:layer 3} tid != nil && counter == 0;
+{
+ yield;
+ assert {:layer 3} counter == 0;
+ call TB(tid);
+ yield;
+}
+
+procedure {:yields} {:layer 3} main({:linear "tid"} tid: X)
+requires {:layer 3} tid != nil && counter == 0;
+{
+ var {:linear "tid"} cid: X;
+
+ yield;
+ assert {:layer 3} counter == 0;
+ while (*)
+ invariant {:layer 3} counter == 0;
+ {
+ if (*) {
+ call cid := AllocTid();
+ async call TA(cid);
+ }
+ if (*) {
+ call cid := AllocTid();
+ async call AbsTB(cid);
+ }
+ yield;
+ assert {:layer 3} counter == 0;
+ call LockA(tid);
+ call AbsAssertA(tid);
+ call LockB(tid);
+ call AbsAssertB(tid);
+ call UnlockB(tid);
+ call UnlockA(tid);
+ yield;
+ assert {:layer 3} counter == 0;
+ }
+ yield;
+} \ No newline at end of file
diff --git a/Test/civl/funky.bpl.expect b/Test/civl/funky.bpl.expect
new file mode 100644
index 00000000..0a114594
--- /dev/null
+++ b/Test/civl/funky.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 75 verified, 0 errors
diff --git a/Test/civl/ghost.bpl b/Test/civl/ghost.bpl
new file mode 100644
index 00000000..1468fa56
--- /dev/null
+++ b/Test/civl/ghost.bpl
@@ -0,0 +1,45 @@
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0} x: int;
+
+procedure {:yields} {:layer 0,1} Incr();
+ensures {:right} |{ A: x := x + 1; return true; }|;
+
+procedure {:pure} ghost(y: int) returns (z: int)
+requires y == 1;
+ensures z == 2;
+{
+ z := y + 1;
+}
+
+procedure {:yields} {:layer 1,2} Incr2()
+ensures {:right} |{ A: x := x + 2; return true; }|;
+{
+ var {:layer 1} a: int;
+
+ yield;
+ call a := ghost(1);
+ assert {:layer 1} a == 2;
+ par Incr() | Incr();
+ yield;
+}
+
+procedure {:layer 1} ghost_0() returns (z: int)
+ensures z == x;
+{
+ z := x;
+}
+
+procedure {:yields} {:layer 1,2} Incr2_0()
+ensures {:right} |{ A: x := x + 2; return true; }|;
+{
+ var {:layer 1} a: int;
+ var {:layer 1} b: int;
+
+ yield;
+ call a := ghost_0();
+ par Incr() | Incr();
+ call b := ghost_0();
+ assert {:layer 1} b == a + 2;
+ yield;
+}
diff --git a/Test/civl/ghost.bpl.expect b/Test/civl/ghost.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/ghost.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/og/linear-set.bpl b/Test/civl/linear-set.bpl
index e481291a..de7f72f4 100644
--- a/Test/og/linear-set.bpl
+++ b/Test/civl/linear-set.bpl
@@ -1,105 +1,105 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-function {:builtin "MapConst"} MapConstInt(int) : [X]int;
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:builtin "MapOr"} MapOr([X]bool, [X]bool) : [X]bool;
-
-function {:inline} None() : [X]bool
-{
- MapConstBool(false)
-}
-
-function {:inline} All() : [X]bool
-{
- MapConstBool(true)
-}
-
-function {:inline} {:linear "x"} XCollector(xs: [X]bool) : [X]bool
-{
- xs
-}
-
-var {:layer 0,1} x: int;
-var {:layer 0,1} l: [X]bool;
-
-
-procedure {:yields} {:layer 1} Split({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool)
-ensures {:layer 1} xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None();
-{
- yield;
- call xls1, xls2 := SplitLow(xls);
- yield;
-}
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xls: [X]bool)
-{
- yield;
- call xls := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Set(v: int);
-ensures {:atomic} |{A: x := v; return true; }|;
-
-procedure {:yields} {:layer 0,1} Lock(tidls: [X]bool);
-ensures {:atomic} |{A: assume l == None(); l := tidls; return true; }|;
-
-procedure {:yields} {:layer 0,1} Unlock();
-ensures {:atomic} |{A: l := None(); return true; }|;
-
-procedure {:yields} {:layer 0,1} SplitLow({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool);
-ensures {:atomic} |{ A: assume xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None(); return true; }|;
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: [X]bool);
-ensures {:atomic} |{ A: return true; }|;
-
-procedure {:yields} {:layer 1} main({:linear_in "tid"} tidls': [X]bool, {:linear_in "x"} xls': [X]bool)
-requires {:layer 1} tidls' != None() && xls' == All();
-{
- var {:linear "tid"} tidls: [X]bool;
- var {:linear "x"} xls: [X]bool;
- var {:linear "tid"} lsChild: [X]bool;
- var {:linear "x"} xls1: [X]bool;
- var {:linear "x"} xls2: [X]bool;
-
- tidls := tidls';
- xls := xls';
- yield;
- call Set(42);
- yield;
- assert {:layer 1} xls == All();
- assert {:layer 1} x == 42;
- call xls1, xls2 := Split(xls);
- call lsChild := Allocate();
- assume (lsChild != None());
- yield;
- async call thread(lsChild, xls1);
- call lsChild := Allocate();
- assume (lsChild != None());
- yield;
- async call thread(lsChild, xls2);
- yield;
-}
-
-procedure {:yields} {:layer 1} thread({:linear_in "tid"} tidls': [X]bool, {:linear_in "x"} xls': [X]bool)
-requires {:layer 1} tidls' != None() && xls' != None();
-{
- var {:linear "x"} xls: [X]bool;
- var {:linear "tid"} tidls: [X]bool;
-
- tidls := tidls';
- xls := xls';
-
- yield;
- call Lock(tidls);
- yield;
- assert {:layer 1} tidls != None() && xls != None();
- call Set(0);
- yield;
- assert {:layer 1} tidls != None() && xls != None();
- assert {:layer 1} x == 0;
- assert {:layer 1} tidls != None() && xls != None();
- call Unlock();
- yield;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+function {:builtin "MapConst"} MapConstInt(int) : [X]int;
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:builtin "MapOr"} MapOr([X]bool, [X]bool) : [X]bool;
+
+function {:inline} None() : [X]bool
+{
+ MapConstBool(false)
+}
+
+function {:inline} All() : [X]bool
+{
+ MapConstBool(true)
+}
+
+function {:inline} {:linear "x"} XCollector(xs: [X]bool) : [X]bool
+{
+ xs
+}
+
+var {:layer 0,1} x: int;
+var {:layer 0,1} l: [X]bool;
+
+
+procedure {:yields} {:layer 1} Split({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool)
+ensures {:layer 1} xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None();
+{
+ yield;
+ call xls1, xls2 := SplitLow(xls);
+ yield;
+}
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xls: [X]bool)
+{
+ yield;
+ call xls := AllocateLow();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Set(v: int);
+ensures {:atomic} |{A: x := v; return true; }|;
+
+procedure {:yields} {:layer 0,1} Lock(tidls: [X]bool);
+ensures {:atomic} |{A: assume l == None(); l := tidls; return true; }|;
+
+procedure {:yields} {:layer 0,1} Unlock();
+ensures {:atomic} |{A: l := None(); return true; }|;
+
+procedure {:yields} {:layer 0,1} SplitLow({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool);
+ensures {:atomic} |{ A: assume xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None(); return true; }|;
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: [X]bool);
+ensures {:atomic} |{ A: return true; }|;
+
+procedure {:yields} {:layer 1} main({:linear_in "tid"} tidls': [X]bool, {:linear_in "x"} xls': [X]bool)
+requires {:layer 1} tidls' != None() && xls' == All();
+{
+ var {:linear "tid"} tidls: [X]bool;
+ var {:linear "x"} xls: [X]bool;
+ var {:linear "tid"} lsChild: [X]bool;
+ var {:linear "x"} xls1: [X]bool;
+ var {:linear "x"} xls2: [X]bool;
+
+ tidls := tidls';
+ xls := xls';
+ yield;
+ call Set(42);
+ yield;
+ assert {:layer 1} xls == All();
+ assert {:layer 1} x == 42;
+ call xls1, xls2 := Split(xls);
+ call lsChild := Allocate();
+ assume (lsChild != None());
+ yield;
+ async call thread(lsChild, xls1);
+ call lsChild := Allocate();
+ assume (lsChild != None());
+ yield;
+ async call thread(lsChild, xls2);
+ yield;
+}
+
+procedure {:yields} {:layer 1} thread({:linear_in "tid"} tidls': [X]bool, {:linear_in "x"} xls': [X]bool)
+requires {:layer 1} tidls' != None() && xls' != None();
+{
+ var {:linear "x"} xls: [X]bool;
+ var {:linear "tid"} tidls: [X]bool;
+
+ tidls := tidls';
+ xls := xls';
+
+ yield;
+ call Lock(tidls);
+ yield;
+ assert {:layer 1} tidls != None() && xls != None();
+ call Set(0);
+ yield;
+ assert {:layer 1} tidls != None() && xls != None();
+ assert {:layer 1} x == 0;
+ assert {:layer 1} tidls != None() && xls != None();
+ call Unlock();
+ yield;
+}
diff --git a/Test/civl/linear-set.bpl.expect b/Test/civl/linear-set.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/linear-set.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/og/linear-set2.bpl b/Test/civl/linear-set2.bpl
index 24d8a13a..4a0c6a1f 100644
--- a/Test/og/linear-set2.bpl
+++ b/Test/civl/linear-set2.bpl
@@ -1,106 +1,106 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-function {:builtin "MapConst"} MapConstInt(int) : [X]int;
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:builtin "MapOr"} MapOr([X]bool, [X]bool) : [X]bool;
-
-function {:inline} None() : [X]bool
-{
- MapConstBool(false)
-}
-
-function {:inline} All() : [X]bool
-{
- MapConstBool(true)
-}
-
-function {:inline} {:linear "x"} XCollector(xs: [X]bool) : [X]bool
-{
- xs
-}
-
-var {:layer 0,1} x: int;
-var {:layer 0,1} l: X;
-const nil: X;
-
-procedure {:yields} {:layer 1} Split({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool)
-ensures {:layer 1} xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None();
-{
- yield;
- call xls1, xls2 := SplitLow(xls);
- yield;
-}
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xls: X)
-ensures {:layer 1} xls != nil;
-{
- yield;
- call xls := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Set(v: int);
-ensures {:atomic} |{A: x := v; return true; }|;
-
-procedure {:yields} {:layer 0,1} Lock(tidls: X);
-ensures {:atomic} |{A: assume l == nil; l := tidls; return true; }|;
-
-procedure {:yields} {:layer 0,1} Unlock();
-ensures {:atomic} |{A: l := nil; return true; }|;
-
-procedure {:yields} {:layer 0,1} SplitLow({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool);
-ensures {:atomic} |{ A: assume xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None(); return true; }|;
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: X);
-ensures {:atomic} |{ A: assume xls != nil; return true; }|;
-
-procedure {:yields} {:layer 1} main({:linear_in "tid"} tidls': X, {:linear_in "x"} xls': [X]bool)
-requires {:layer 1} tidls' != nil && xls' == All();
-{
- var {:linear "tid"} tidls: X;
- var {:linear "x"} xls: [X]bool;
- var {:linear "tid"} lsChild: X;
- var {:linear "x"} xls1: [X]bool;
- var {:linear "x"} xls2: [X]bool;
-
- tidls := tidls';
- xls := xls';
-
- yield;
- call Set(42);
- yield;
- assert {:layer 1} xls == All();
- assert {:layer 1} x == 42;
- call xls1, xls2 := Split(xls);
- call lsChild := Allocate();
- yield;
- async call thread(lsChild, xls1);
- call lsChild := Allocate();
- yield;
- async call thread(lsChild, xls2);
- yield;
-}
-
-procedure {:yields} {:layer 1} thread({:linear_in "tid"} tidls': X, {:linear_in "x"} xls': [X]bool)
-requires {:layer 1} tidls' != nil && xls' != None();
-{
- var {:linear "x"} xls: [X]bool;
- var {:linear "tid"} tidls: X;
-
- tidls := tidls';
- xls := xls';
-
- yield;
- call Lock(tidls);
- yield;
- assert {:layer 1} tidls != nil && xls != None();
- call Set(0);
- yield;
- assert {:layer 1} tidls != nil && xls != None();
- assert {:layer 1} x == 0;
- yield;
- assert {:layer 1} tidls != nil && xls != None();
- call Unlock();
- yield;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+function {:builtin "MapConst"} MapConstInt(int) : [X]int;
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:builtin "MapOr"} MapOr([X]bool, [X]bool) : [X]bool;
+
+function {:inline} None() : [X]bool
+{
+ MapConstBool(false)
+}
+
+function {:inline} All() : [X]bool
+{
+ MapConstBool(true)
+}
+
+function {:inline} {:linear "x"} XCollector(xs: [X]bool) : [X]bool
+{
+ xs
+}
+
+var {:layer 0,1} x: int;
+var {:layer 0,1} l: X;
+const nil: X;
+
+procedure {:yields} {:layer 1} Split({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool)
+ensures {:layer 1} xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None();
+{
+ yield;
+ call xls1, xls2 := SplitLow(xls);
+ yield;
+}
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xls: X)
+ensures {:layer 1} xls != nil;
+{
+ yield;
+ call xls := AllocateLow();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Set(v: int);
+ensures {:atomic} |{A: x := v; return true; }|;
+
+procedure {:yields} {:layer 0,1} Lock(tidls: X);
+ensures {:atomic} |{A: assume l == nil; l := tidls; return true; }|;
+
+procedure {:yields} {:layer 0,1} Unlock();
+ensures {:atomic} |{A: l := nil; return true; }|;
+
+procedure {:yields} {:layer 0,1} SplitLow({:linear_in "x"} xls: [X]bool) returns ({:linear "x"} xls1: [X]bool, {:linear "x"} xls2: [X]bool);
+ensures {:atomic} |{ A: assume xls == MapOr(xls1, xls2) && xls1 != None() && xls2 != None(); return true; }|;
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: X);
+ensures {:atomic} |{ A: assume xls != nil; return true; }|;
+
+procedure {:yields} {:layer 1} main({:linear_in "tid"} tidls': X, {:linear_in "x"} xls': [X]bool)
+requires {:layer 1} tidls' != nil && xls' == All();
+{
+ var {:linear "tid"} tidls: X;
+ var {:linear "x"} xls: [X]bool;
+ var {:linear "tid"} lsChild: X;
+ var {:linear "x"} xls1: [X]bool;
+ var {:linear "x"} xls2: [X]bool;
+
+ tidls := tidls';
+ xls := xls';
+
+ yield;
+ call Set(42);
+ yield;
+ assert {:layer 1} xls == All();
+ assert {:layer 1} x == 42;
+ call xls1, xls2 := Split(xls);
+ call lsChild := Allocate();
+ yield;
+ async call thread(lsChild, xls1);
+ call lsChild := Allocate();
+ yield;
+ async call thread(lsChild, xls2);
+ yield;
+}
+
+procedure {:yields} {:layer 1} thread({:linear_in "tid"} tidls': X, {:linear_in "x"} xls': [X]bool)
+requires {:layer 1} tidls' != nil && xls' != None();
+{
+ var {:linear "x"} xls: [X]bool;
+ var {:linear "tid"} tidls: X;
+
+ tidls := tidls';
+ xls := xls';
+
+ yield;
+ call Lock(tidls);
+ yield;
+ assert {:layer 1} tidls != nil && xls != None();
+ call Set(0);
+ yield;
+ assert {:layer 1} tidls != nil && xls != None();
+ assert {:layer 1} x == 0;
+ yield;
+ assert {:layer 1} tidls != nil && xls != None();
+ call Unlock();
+ yield;
+}
diff --git a/Test/civl/linear-set2.bpl.expect b/Test/civl/linear-set2.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/linear-set2.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/og/lock-introduced.bpl b/Test/civl/lock-introduced.bpl
index c9650215..5403e5d4 100644
--- a/Test/og/lock-introduced.bpl
+++ b/Test/civl/lock-introduced.bpl
@@ -1,100 +1,110 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
-{
- MapConstBool(false)[x := true]
-}
-
-type X;
-const nil: X;
-var {:layer 0,2} b: bool;
-var {:layer 1,3} lock: X;
-
-procedure {:yields} {:layer 3} Customer({:linear "tid"} tid: X)
-requires {:layer 2} tid != nil;
-requires {:layer 2} InvLock(lock, b);
-ensures {:layer 2} InvLock(lock, b);
-{
- yield;
- assert {:layer 2} InvLock(lock, b);
- while (*)
- invariant {:layer 2} InvLock(lock, b);
- {
- call Enter(tid);
- call Leave(tid);
- yield;
- assert {:layer 2} InvLock(lock, b);
- }
- yield;
- assert {:layer 2} InvLock(lock, b);
-}
-
-function {:inline} InvLock(lock: X, b: bool) : bool
-{
- lock != nil <==> b
-}
-
-procedure {:yields} {:layer 2,3} Enter({:linear "tid"} tid: X)
-requires {:layer 2} tid != nil;
-requires {:layer 2} InvLock(lock, b);
-ensures {:layer 2} InvLock(lock, b);
-ensures {:right} |{ A: assume lock == nil && tid != nil; lock := tid; return true; }|;
-{
- yield;
- assert {:layer 2} InvLock(lock, b);
- call LowerEnter(tid);
- yield;
- assert {:layer 2} InvLock(lock, b);
-}
-
-procedure {:yields} {:layer 2,3} Leave({:linear "tid"} tid:X)
-requires {:layer 2} InvLock(lock, b);
-ensures {:layer 2} InvLock(lock, b);
-ensures {:atomic} |{ A: assert lock == tid && tid != nil; lock := nil; return true; }|;
-{
- yield;
- assert {:layer 2} InvLock(lock, b);
- call LowerLeave();
- yield;
- assert {:layer 2} InvLock(lock, b);
-}
-
-procedure {:yields} {:layer 1,2} LowerEnter({:linear "tid"} tid: X)
-ensures {:atomic} |{ A: assume !b; b := true; lock := tid; return true; }|;
-{
- var status: bool;
- yield;
- L:
- call status := CAS(false, true);
- yield;
- goto A, B;
-
- A:
- assume status;
- yield;
- return;
-
- B:
- assume !status;
- goto L;
-}
-
-procedure {:yields} {:layer 1,2} LowerLeave()
-ensures {:atomic} |{ A: b := false; lock := nil; return true; }|;
-{
- yield;
- call SET(false);
- yield;
-}
-
-procedure {:yields} {:layer 0,1} CAS(prev: bool, next: bool) returns (status: bool);
-ensures {:atomic} |{
-A: goto B, C;
-B: assume b == prev; b := next; status := true; return true;
-C: status := false; return true;
-}|;
-
-procedure {:yields} {:layer 0,1} SET(next: bool);
-ensures {:atomic} |{ A: b := next; return true; }|;
-
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+type X;
+const nil: X;
+var {:layer 0,2} b: bool;
+var {:layer 1,3} lock: X;
+
+procedure {:yields} {:layer 3} Customer({:linear "tid"} tid: X)
+requires {:layer 2} tid != nil;
+requires {:layer 2} InvLock(lock, b);
+ensures {:layer 2} InvLock(lock, b);
+{
+ yield;
+ assert {:layer 2} InvLock(lock, b);
+ while (*)
+ invariant {:layer 2} InvLock(lock, b);
+ {
+ call Enter(tid);
+ call Leave(tid);
+ yield;
+ assert {:layer 2} InvLock(lock, b);
+ }
+ yield;
+ assert {:layer 2} InvLock(lock, b);
+}
+
+function {:inline} InvLock(lock: X, b: bool) : bool
+{
+ lock != nil <==> b
+}
+
+procedure {:yields} {:layer 2,3} Enter({:linear "tid"} tid: X)
+requires {:layer 2} tid != nil;
+requires {:layer 2} InvLock(lock, b);
+ensures {:layer 2} InvLock(lock, b);
+ensures {:right} |{ A: assume lock == nil && tid != nil; lock := tid; return true; }|;
+{
+ yield;
+ assert {:layer 2} InvLock(lock, b);
+ call LowerEnter(tid);
+ yield;
+ assert {:layer 2} InvLock(lock, b);
+}
+
+procedure {:yields} {:layer 2,3} Leave({:linear "tid"} tid:X)
+requires {:layer 2} InvLock(lock, b);
+ensures {:layer 2} InvLock(lock, b);
+ensures {:atomic} |{ A: assert lock == tid && tid != nil; lock := nil; return true; }|;
+{
+ yield;
+ assert {:layer 2} InvLock(lock, b);
+ call LowerLeave();
+ yield;
+ assert {:layer 2} InvLock(lock, b);
+}
+
+procedure {:yields} {:layer 1,2} LowerEnter({:linear "tid"} tid: X)
+ensures {:atomic} |{ A: assume !b; b := true; lock := tid; return true; }|;
+{
+ var status: bool;
+ yield;
+ L:
+ call status := CAS(false, true);
+ if (status) {
+ call SetLock(tid);
+ }
+ yield;
+ goto A, B;
+
+ A:
+ assume status;
+ yield;
+ return;
+
+ B:
+ assume !status;
+ goto L;
+}
+
+procedure {:yields} {:layer 1,2} LowerLeave()
+ensures {:atomic} |{ A: b := false; lock := nil; return true; }|;
+{
+ yield;
+ call SET(false);
+ call SetLock(nil);
+ yield;
+}
+
+procedure {:layer 1} {:inline 1} SetLock(v: X)
+modifies lock;
+{
+ lock := v;
+}
+
+procedure {:yields} {:layer 0,1} CAS(prev: bool, next: bool) returns (status: bool);
+ensures {:atomic} |{
+A: goto B, C;
+B: assume b == prev; b := next; status := true; return true;
+C: status := false; return true;
+}|;
+
+procedure {:yields} {:layer 0,1} SET(next: bool);
+ensures {:atomic} |{ A: b := next; return true; }|;
+
diff --git a/Test/civl/lock-introduced.bpl.expect b/Test/civl/lock-introduced.bpl.expect
new file mode 100644
index 00000000..8c74fe2e
--- /dev/null
+++ b/Test/civl/lock-introduced.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 17 verified, 0 errors
diff --git a/Test/og/lock.bpl b/Test/civl/lock.bpl
index 9341591f..ee736029 100644
--- a/Test/og/lock.bpl
+++ b/Test/civl/lock.bpl
@@ -1,57 +1,57 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,2} b: bool;
-
-procedure {:yields} {:layer 2} main()
-{
- yield;
- while (*)
- {
- async call Customer();
- yield;
- }
- yield;
-}
-
-procedure {:yields} {:layer 2} Customer()
-{
- yield;
- while (*)
- {
- call Enter();
- yield;
- call Leave();
- yield;
- }
- yield;
-}
-
-procedure {:yields} {:layer 1,2} Enter()
-ensures {:atomic} |{ A: assume !b; b := true; return true; }|;
-{
- var status: bool;
- yield;
- L:
- call status := CAS(false, true);
- yield;
- goto A, B;
-
- A:
- assume status;
- yield;
- return;
-
- B:
- assume !status;
- goto L;
-}
-
-procedure {:yields} {:layer 0,2} CAS(prev: bool, next: bool) returns (status: bool);
-ensures {:atomic} |{
-A: goto B, C;
-B: assume b == prev; b := next; status := true; return true;
-C: status := false; return true;
-}|;
-
-procedure {:yields} {:layer 0,2} Leave();
-ensures {:atomic} |{ A: b := false; return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,2} b: bool;
+
+procedure {:yields} {:layer 2} main()
+{
+ yield;
+ while (*)
+ {
+ async call Customer();
+ yield;
+ }
+ yield;
+}
+
+procedure {:yields} {:layer 2} Customer()
+{
+ yield;
+ while (*)
+ {
+ call Enter();
+ yield;
+ call Leave();
+ yield;
+ }
+ yield;
+}
+
+procedure {:yields} {:layer 1,2} Enter()
+ensures {:atomic} |{ A: assume !b; b := true; return true; }|;
+{
+ var status: bool;
+ yield;
+ L:
+ call status := CAS(false, true);
+ yield;
+ goto A, B;
+
+ A:
+ assume status;
+ yield;
+ return;
+
+ B:
+ assume !status;
+ goto L;
+}
+
+procedure {:yields} {:layer 0,2} CAS(prev: bool, next: bool) returns (status: bool);
+ensures {:atomic} |{
+A: goto B, C;
+B: assume b == prev; b := next; status := true; return true;
+C: status := false; return true;
+}|;
+
+procedure {:yields} {:layer 0,2} Leave();
+ensures {:atomic} |{ A: b := false; return true; }|;
diff --git a/Test/civl/lock.bpl.expect b/Test/civl/lock.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/lock.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/og/lock2.bpl b/Test/civl/lock2.bpl
index 4809a8f5..e84d0a6f 100644
--- a/Test/og/lock2.bpl
+++ b/Test/civl/lock2.bpl
@@ -1,63 +1,63 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,2} b: int;
-
-procedure {:yields} {:layer 2} main()
-{
- yield;
- while (*)
- {
- async call Customer();
- yield;
- }
- yield;
-}
-
-procedure {:yields} {:layer 2} Customer()
-{
- yield;
- while (*)
- {
- call Enter();
- yield;
- call Leave();
- yield;
- }
- yield;
-}
-
-procedure {:yields} {:layer 1,2} Enter()
-ensures {:atomic} |{ A: assume b == 0; b := 1; return true; }|;
-{
- var _old, curr: int;
- yield;
- while (true) {
- call _old := CAS(0, 1);
- yield;
- if (_old == 0) {
- break;
- }
- while (true) {
- call curr := Read();
- yield;
- if (curr == 0) {
- break;
- }
- }
- yield;
- }
- yield;
-}
-
-procedure {:yields} {:layer 0,2} Read() returns (val: int);
-ensures {:atomic} |{ A: val := b; return true; }|;
-
-procedure {:yields} {:layer 0,2} CAS(prev: int, next: int) returns (_old: int);
-ensures {:atomic} |{
-A: _old := b; goto B, C;
-B: assume _old == prev; b := next; return true;
-C: assume _old != prev; return true;
-}|;
-
-procedure {:yields} {:layer 0,2} Leave();
-ensures {:atomic} |{ A: b := 0; return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,2} b: int;
+
+procedure {:yields} {:layer 2} main()
+{
+ yield;
+ while (*)
+ {
+ async call Customer();
+ yield;
+ }
+ yield;
+}
+
+procedure {:yields} {:layer 2} Customer()
+{
+ yield;
+ while (*)
+ {
+ call Enter();
+ yield;
+ call Leave();
+ yield;
+ }
+ yield;
+}
+
+procedure {:yields} {:layer 1,2} Enter()
+ensures {:atomic} |{ A: assume b == 0; b := 1; return true; }|;
+{
+ var _old, curr: int;
+ yield;
+ while (true) {
+ call _old := CAS(0, 1);
+ yield;
+ if (_old == 0) {
+ break;
+ }
+ while (true) {
+ call curr := Read();
+ yield;
+ if (curr == 0) {
+ break;
+ }
+ }
+ yield;
+ }
+ yield;
+}
+
+procedure {:yields} {:layer 0,2} Read() returns (val: int);
+ensures {:atomic} |{ A: val := b; return true; }|;
+
+procedure {:yields} {:layer 0,2} CAS(prev: int, next: int) returns (_old: int);
+ensures {:atomic} |{
+A: _old := b; goto B, C;
+B: assume _old == prev; b := next; return true;
+C: assume _old != prev; return true;
+}|;
+
+procedure {:yields} {:layer 0,2} Leave();
+ensures {:atomic} |{ A: b := 0; return true; }|;
diff --git a/Test/civl/lock2.bpl.expect b/Test/civl/lock2.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/lock2.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/og/multiset.bpl b/Test/civl/multiset.bpl
index 7fb0a081..ec391380 100644
--- a/Test/og/multiset.bpl
+++ b/Test/civl/multiset.bpl
@@ -1,324 +1,324 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-
-const unique null : int;
-const unique nil: X;
-const unique done: X;
-
-var {:layer 0} elt : [int]int;
-var {:layer 0} valid : [int]bool;
-var {:layer 0} lock : [int]X;
-var {:layer 0} owner : [int]X;
-const max : int;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
-{
- MapConstBool(false)[x := true]
-}
-
-axiom (max > 0);
-
-procedure {:yields} {:layer 0} acquire(i : int, {:linear "tid"} tid: X);
-ensures {:right} |{ A:
- assert 0 <= i && i < max;
- assert tid != nil && tid != done;
- assume lock[i] == nil;
- lock[i] := tid;
- return true;
- }|;
-
-
-procedure {:yields} {:layer 0} release(i : int, {:linear "tid"} tid: X);
-ensures {:left} |{ A:
- assert 0 <= i && i < max;
- assert lock[i] == tid;
- assert tid != nil && tid != done;
- lock[i] := nil;
- return true;
- }|;
-
-
-procedure {:yields} {:layer 0,1} getElt(j : int, {:linear "tid"} tid: X) returns (elt_j:int);
-ensures {:both} |{ A:
- assert 0 <= j && j < max;
- assert lock[j] == tid;
- assert tid != nil && tid != done;
- elt_j := elt[j];
- return true;
- }|;
-
-
-procedure {:yields} {:layer 0,1} setElt(j : int, x : int, {:linear "tid"} tid: X);
-ensures {:both} |{ A:
- assert x != null;
- assert owner[j] == nil;
- assert 0 <= j && j < max;
- assert lock[j] == tid;
- assert tid != nil && tid != done;
- elt[j] := x;
- owner[j] := tid;
- return true;
- }|;
-
-
-procedure {:yields} {:layer 0,2} setEltToNull(j : int, {:linear "tid"} tid: X);
-ensures {:left} |{ A:
- assert owner[j] == tid;
- assert 0 <= j && j < max;
- assert lock[j] == tid;
- assert !valid[j];
- assert tid != nil && tid != done;
- elt[j] := null;
- owner[j] := nil;
- return true;
- }|;
-
-procedure {:yields} {:layer 0,2} setValid(j : int, {:linear "tid"} tid: X);
-ensures {:both} |{ A:
- assert 0 <= j && j < max;
- assert lock[j] == tid;
- assert tid != nil && tid != done;
- assert owner[j] == tid;
- valid[j] := true;
- owner[j] := done;
- return true;
- }|;
-
-procedure {:yields} {:layer 0,2} isEltThereAndValid(j : int, x : int, {:linear "tid"} tid: X) returns (fnd:bool);
-ensures {:both} |{ A:
- assert 0 <= j && j < max;
- assert lock[j] == tid;
- assert tid != nil && tid != done;
- fnd := (elt[j] == x) && valid[j];
- return true;
- }|;
-
-procedure {:yields} {:layer 1,2} FindSlot(x : int, {:linear "tid"} tid: X) returns (r : int)
-requires {:layer 1} Inv(valid, elt, owner) && x != null && tid != nil && tid != done;
-ensures {:layer 1} Inv(valid, elt, owner);
-ensures {:right} |{ A: assert tid != nil && tid != done;
- assert x != null;
- goto B, C;
- B: assume (0 <= r && r < max);
- assume elt[r] == null;
- assume owner[r] == nil;
- assume !valid[r];
- elt[r] := x;
- owner[r] := tid;
- return true;
- C: assume (r == -1); return true;
- }|;
-{
- var j : int;
- var elt_j : int;
-
- par Yield1();
-
- j := 0;
- while(j < max)
- invariant {:layer 1} Inv(valid, elt, owner);
- invariant {:layer 1} 0 <= j;
- {
- call acquire(j, tid);
- call elt_j := getElt(j, tid);
- if(elt_j == null)
- {
- call setElt(j, x, tid);
- call release(j, tid);
- r := j;
-
- par Yield1();
- return;
- }
- call release(j,tid);
-
- par Yield1();
-
- j := j + 1;
- }
- r := -1;
-
- par Yield1();
- return;
-}
-
-procedure {:yields} {:layer 2} Insert(x : int, {:linear "tid"} tid: X) returns (result : bool)
-requires {:layer 1} Inv(valid, elt, owner) && x != null && tid != nil && tid != done;
-ensures {:layer 1} Inv(valid, elt, owner);
-requires {:layer 2} Inv(valid, elt, owner) && x != null && tid != nil && tid != done;
-ensures {:layer 2} Inv(valid, elt, owner);
-ensures {:atomic} |{ var r:int;
- A: goto B, C;
- B: assume (0 <= r && r < max);
- assume valid[r] == false;
- assume elt[r] == null;
- assume owner[r] == nil;
- elt[r] := x; valid[r] := true; owner[r] := done;
- result := true; return true;
- C: result := false; return true;
- }|;
- {
- var i: int;
- par Yield12();
- call i := FindSlot(x, tid);
-
- if(i == -1)
- {
- result := false;
- par Yield12();
- return;
- }
- par Yield1();
- assert {:layer 1} i != -1;
- assert {:layer 2} i != -1;
- call acquire(i, tid);
- assert {:layer 2} elt[i] == x;
- assert {:layer 2} valid[i] == false;
- call setValid(i, tid);
- call release(i, tid);
- result := true;
- par Yield12();
- return;
-}
-
-procedure {:yields} {:layer 2} InsertPair(x : int, y : int, {:linear "tid"} tid: X) returns (result : bool)
-requires {:layer 1} Inv(valid, elt, owner) && x != null && y != null && tid != nil && tid != done;
-ensures {:layer 1} Inv(valid, elt, owner);
-requires {:layer 2} Inv(valid, elt, owner) && x != null && y != null && tid != nil && tid != done;
-ensures {:layer 2} Inv(valid, elt, owner);
-ensures {:atomic} |{ var rx:int;
- var ry:int;
- A: goto B, C;
- B: assume (0 <= rx && rx < max && 0 <= ry && ry < max && rx != ry);
- assume valid[rx] == false;
- assume valid[ry] == false;
- assume elt[rx] == null;
- assume elt[rx] == null;
- elt[rx] := x;
- elt[ry] := y;
- valid[rx] := true;
- valid[ry] := true;
- owner[rx] := done;
- owner[ry] := done;
- result := true; return true;
- C: result := false; return true;
- }|;
- {
- var i : int;
- var j : int;
- par Yield12();
-
- call i := FindSlot(x, tid);
-
- if (i == -1)
- {
- result := false;
- par Yield12();
- return;
- }
-
- par Yield1();
- call j := FindSlot(y, tid);
-
- if(j == -1)
- {
- par Yield1();
- call acquire(i,tid);
- call setEltToNull(i, tid);
- call release(i,tid);
- result := false;
- par Yield12();
- return;
- }
-
- par Yield1();
- assert {:layer 2} i != -1 && j != -1;
- call acquire(i, tid);
- call acquire(j, tid);
- assert {:layer 2} elt[i] == x;
- assert {:layer 2} elt[j] == y;
- assert {:layer 2} valid[i] == false;
- assert {:layer 2} valid[j] == false;
- call setValid(i, tid);
- call setValid(j, tid);
- call release(j, tid);
- call release(i, tid);
- result := true;
- par Yield12();
- return;
-}
-
-procedure {:yields} {:layer 2} LookUp(x : int, {:linear "tid"} tid: X, old_valid:[int]bool, old_elt:[int]int) returns (found : bool)
-requires {:layer 1} {:layer 2} old_valid == valid && old_elt == elt;
-requires {:layer 1} {:layer 2} Inv(valid, elt, owner);
-requires {:layer 1} {:layer 2} (tid != nil && tid != done);
-ensures {:layer 1} {:layer 2} Inv(valid, elt, owner);
-ensures {:atomic} |{ A: assert tid != nil && tid != done;
- assert x != null;
- assume found ==> (exists ii:int :: 0 <= ii && ii < max && valid[ii] && elt[ii] == x);
- assume !found ==> (forall ii:int :: 0 <= ii && ii < max ==> !(old_valid[ii] && old_elt[ii] == x));
- return true;
- }|;
-{
- var j : int;
- var isThere : bool;
-
- par Yield12() | YieldLookUp(old_valid, old_elt);
-
- j := 0;
-
- while(j < max)
- invariant {:layer 1} {:layer 2} Inv(valid, elt, owner);
- invariant {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < j ==> !(old_valid[ii] && old_elt[ii] == x));
- invariant {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
- invariant {:layer 1} {:layer 2} 0 <= j;
- {
- call acquire(j, tid);
- call isThere := isEltThereAndValid(j, x, tid);
- if(isThere)
- {
- call release(j, tid);
- found := true;
- par Yield12() | YieldLookUp(old_valid, old_elt);
- return;
- }
- call release(j,tid);
- par Yield12() | YieldLookUp(old_valid, old_elt);
- j := j + 1;
- }
- found := false;
-
- par Yield12() | YieldLookUp(old_valid, old_elt);
- return;
-}
-
-procedure {:yields} {:layer 1} Yield1()
-requires {:layer 1} Inv(valid, elt, owner);
-ensures {:layer 1} Inv(valid, elt, owner);
-{
- yield;
- assert {:layer 1} Inv(valid, elt, owner);
-}
-
-procedure {:yields} {:layer 2} Yield12()
-requires {:layer 1} {:layer 2} Inv(valid, elt, owner);
-ensures {:layer 1} {:layer 2} Inv(valid, elt, owner);
-{
- yield;
- assert {:layer 1} {:layer 2} Inv(valid, elt, owner);
-}
-
-function {:inline} Inv(valid: [int]bool, elt: [int]int, owner: [int]X): (bool)
-{
- (forall i:int :: 0 <= i && i < max ==> (elt[i] == null <==> (!valid[i] && owner[i] == nil)))
-}
-
-procedure {:yields} {:layer 2} YieldLookUp(old_valid: [int]bool, old_elt: [int]int)
-requires {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
-ensures {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
-{
- yield;
- assert {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+
+const unique null : int;
+const unique nil: X;
+const unique done: X;
+
+var {:layer 0} elt : [int]int;
+var {:layer 0} valid : [int]bool;
+var {:layer 0} lock : [int]X;
+var {:layer 0} owner : [int]X;
+const max : int;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+axiom (max > 0);
+
+procedure {:yields} {:layer 0} acquire(i : int, {:linear "tid"} tid: X);
+ensures {:right} |{ A:
+ assert 0 <= i && i < max;
+ assert tid != nil && tid != done;
+ assume lock[i] == nil;
+ lock[i] := tid;
+ return true;
+ }|;
+
+
+procedure {:yields} {:layer 0} release(i : int, {:linear "tid"} tid: X);
+ensures {:left} |{ A:
+ assert 0 <= i && i < max;
+ assert lock[i] == tid;
+ assert tid != nil && tid != done;
+ lock[i] := nil;
+ return true;
+ }|;
+
+
+procedure {:yields} {:layer 0,1} getElt(j : int, {:linear "tid"} tid: X) returns (elt_j:int);
+ensures {:both} |{ A:
+ assert 0 <= j && j < max;
+ assert lock[j] == tid;
+ assert tid != nil && tid != done;
+ elt_j := elt[j];
+ return true;
+ }|;
+
+
+procedure {:yields} {:layer 0,1} setElt(j : int, x : int, {:linear "tid"} tid: X);
+ensures {:both} |{ A:
+ assert x != null;
+ assert owner[j] == nil;
+ assert 0 <= j && j < max;
+ assert lock[j] == tid;
+ assert tid != nil && tid != done;
+ elt[j] := x;
+ owner[j] := tid;
+ return true;
+ }|;
+
+
+procedure {:yields} {:layer 0,2} setEltToNull(j : int, {:linear "tid"} tid: X);
+ensures {:left} |{ A:
+ assert owner[j] == tid;
+ assert 0 <= j && j < max;
+ assert lock[j] == tid;
+ assert !valid[j];
+ assert tid != nil && tid != done;
+ elt[j] := null;
+ owner[j] := nil;
+ return true;
+ }|;
+
+procedure {:yields} {:layer 0,2} setValid(j : int, {:linear "tid"} tid: X);
+ensures {:both} |{ A:
+ assert 0 <= j && j < max;
+ assert lock[j] == tid;
+ assert tid != nil && tid != done;
+ assert owner[j] == tid;
+ valid[j] := true;
+ owner[j] := done;
+ return true;
+ }|;
+
+procedure {:yields} {:layer 0,2} isEltThereAndValid(j : int, x : int, {:linear "tid"} tid: X) returns (fnd:bool);
+ensures {:both} |{ A:
+ assert 0 <= j && j < max;
+ assert lock[j] == tid;
+ assert tid != nil && tid != done;
+ fnd := (elt[j] == x) && valid[j];
+ return true;
+ }|;
+
+procedure {:yields} {:layer 1,2} FindSlot(x : int, {:linear "tid"} tid: X) returns (r : int)
+requires {:layer 1} Inv(valid, elt, owner) && x != null && tid != nil && tid != done;
+ensures {:layer 1} Inv(valid, elt, owner);
+ensures {:right} |{ A: assert tid != nil && tid != done;
+ assert x != null;
+ goto B, C;
+ B: assume (0 <= r && r < max);
+ assume elt[r] == null;
+ assume owner[r] == nil;
+ assume !valid[r];
+ elt[r] := x;
+ owner[r] := tid;
+ return true;
+ C: assume (r == -1); return true;
+ }|;
+{
+ var j : int;
+ var elt_j : int;
+
+ par Yield1();
+
+ j := 0;
+ while(j < max)
+ invariant {:layer 1} Inv(valid, elt, owner);
+ invariant {:layer 1} 0 <= j;
+ {
+ call acquire(j, tid);
+ call elt_j := getElt(j, tid);
+ if(elt_j == null)
+ {
+ call setElt(j, x, tid);
+ call release(j, tid);
+ r := j;
+
+ par Yield1();
+ return;
+ }
+ call release(j,tid);
+
+ par Yield1();
+
+ j := j + 1;
+ }
+ r := -1;
+
+ par Yield1();
+ return;
+}
+
+procedure {:yields} {:layer 2} Insert(x : int, {:linear "tid"} tid: X) returns (result : bool)
+requires {:layer 1} Inv(valid, elt, owner) && x != null && tid != nil && tid != done;
+ensures {:layer 1} Inv(valid, elt, owner);
+requires {:layer 2} Inv(valid, elt, owner) && x != null && tid != nil && tid != done;
+ensures {:layer 2} Inv(valid, elt, owner);
+ensures {:atomic} |{ var r:int;
+ A: goto B, C;
+ B: assume (0 <= r && r < max);
+ assume valid[r] == false;
+ assume elt[r] == null;
+ assume owner[r] == nil;
+ elt[r] := x; valid[r] := true; owner[r] := done;
+ result := true; return true;
+ C: result := false; return true;
+ }|;
+ {
+ var i: int;
+ par Yield12();
+ call i := FindSlot(x, tid);
+
+ if(i == -1)
+ {
+ result := false;
+ par Yield12();
+ return;
+ }
+ par Yield1();
+ assert {:layer 1} i != -1;
+ assert {:layer 2} i != -1;
+ call acquire(i, tid);
+ assert {:layer 2} elt[i] == x;
+ assert {:layer 2} valid[i] == false;
+ call setValid(i, tid);
+ call release(i, tid);
+ result := true;
+ par Yield12();
+ return;
+}
+
+procedure {:yields} {:layer 2} InsertPair(x : int, y : int, {:linear "tid"} tid: X) returns (result : bool)
+requires {:layer 1} Inv(valid, elt, owner) && x != null && y != null && tid != nil && tid != done;
+ensures {:layer 1} Inv(valid, elt, owner);
+requires {:layer 2} Inv(valid, elt, owner) && x != null && y != null && tid != nil && tid != done;
+ensures {:layer 2} Inv(valid, elt, owner);
+ensures {:atomic} |{ var rx:int;
+ var ry:int;
+ A: goto B, C;
+ B: assume (0 <= rx && rx < max && 0 <= ry && ry < max && rx != ry);
+ assume valid[rx] == false;
+ assume valid[ry] == false;
+ assume elt[rx] == null;
+ assume elt[rx] == null;
+ elt[rx] := x;
+ elt[ry] := y;
+ valid[rx] := true;
+ valid[ry] := true;
+ owner[rx] := done;
+ owner[ry] := done;
+ result := true; return true;
+ C: result := false; return true;
+ }|;
+ {
+ var i : int;
+ var j : int;
+ par Yield12();
+
+ call i := FindSlot(x, tid);
+
+ if (i == -1)
+ {
+ result := false;
+ par Yield12();
+ return;
+ }
+
+ par Yield1();
+ call j := FindSlot(y, tid);
+
+ if(j == -1)
+ {
+ par Yield1();
+ call acquire(i,tid);
+ call setEltToNull(i, tid);
+ call release(i,tid);
+ result := false;
+ par Yield12();
+ return;
+ }
+
+ par Yield1();
+ assert {:layer 2} i != -1 && j != -1;
+ call acquire(i, tid);
+ call acquire(j, tid);
+ assert {:layer 2} elt[i] == x;
+ assert {:layer 2} elt[j] == y;
+ assert {:layer 2} valid[i] == false;
+ assert {:layer 2} valid[j] == false;
+ call setValid(i, tid);
+ call setValid(j, tid);
+ call release(j, tid);
+ call release(i, tid);
+ result := true;
+ par Yield12();
+ return;
+}
+
+procedure {:yields} {:layer 2} LookUp(x : int, {:linear "tid"} tid: X, old_valid:[int]bool, old_elt:[int]int) returns (found : bool)
+requires {:layer 1} {:layer 2} old_valid == valid && old_elt == elt;
+requires {:layer 1} {:layer 2} Inv(valid, elt, owner);
+requires {:layer 1} {:layer 2} (tid != nil && tid != done);
+ensures {:layer 1} {:layer 2} Inv(valid, elt, owner);
+ensures {:atomic} |{ A: assert tid != nil && tid != done;
+ assert x != null;
+ assume found ==> (exists ii:int :: 0 <= ii && ii < max && valid[ii] && elt[ii] == x);
+ assume !found ==> (forall ii:int :: 0 <= ii && ii < max ==> !(old_valid[ii] && old_elt[ii] == x));
+ return true;
+ }|;
+{
+ var j : int;
+ var isThere : bool;
+
+ par Yield12() | YieldLookUp(old_valid, old_elt);
+
+ j := 0;
+
+ while(j < max)
+ invariant {:layer 1} {:layer 2} Inv(valid, elt, owner);
+ invariant {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < j ==> !(old_valid[ii] && old_elt[ii] == x));
+ invariant {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
+ invariant {:layer 1} {:layer 2} 0 <= j;
+ {
+ call acquire(j, tid);
+ call isThere := isEltThereAndValid(j, x, tid);
+ if(isThere)
+ {
+ call release(j, tid);
+ found := true;
+ par Yield12() | YieldLookUp(old_valid, old_elt);
+ return;
+ }
+ call release(j,tid);
+ par Yield12() | YieldLookUp(old_valid, old_elt);
+ j := j + 1;
+ }
+ found := false;
+
+ par Yield12() | YieldLookUp(old_valid, old_elt);
+ return;
+}
+
+procedure {:yields} {:layer 1} Yield1()
+requires {:layer 1} Inv(valid, elt, owner);
+ensures {:layer 1} Inv(valid, elt, owner);
+{
+ yield;
+ assert {:layer 1} Inv(valid, elt, owner);
+}
+
+procedure {:yields} {:layer 2} Yield12()
+requires {:layer 1} {:layer 2} Inv(valid, elt, owner);
+ensures {:layer 1} {:layer 2} Inv(valid, elt, owner);
+{
+ yield;
+ assert {:layer 1} {:layer 2} Inv(valid, elt, owner);
+}
+
+function {:inline} Inv(valid: [int]bool, elt: [int]int, owner: [int]X): (bool)
+{
+ (forall i:int :: 0 <= i && i < max ==> (elt[i] == null <==> (!valid[i] && owner[i] == nil)))
+}
+
+procedure {:yields} {:layer 2} YieldLookUp(old_valid: [int]bool, old_elt: [int]int)
+requires {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
+ensures {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
+{
+ yield;
+ assert {:layer 1} {:layer 2} (forall ii:int :: 0 <= ii && ii < max && old_valid[ii] ==> valid[ii] && old_elt[ii] == elt[ii]);
+}
diff --git a/Test/civl/multiset.bpl.expect b/Test/civl/multiset.bpl.expect
new file mode 100644
index 00000000..63682bb4
--- /dev/null
+++ b/Test/civl/multiset.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 85 verified, 0 errors
diff --git a/Test/og/new1.bpl b/Test/civl/new1.bpl
index b80b6315..c2feb179 100644
--- a/Test/og/new1.bpl
+++ b/Test/civl/new1.bpl
@@ -1,42 +1,42 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:builtin "MapConst"} mapconstbool(x:bool): [int]bool;
-
-var {:layer 0,1} g:int;
-
-function {:inline} {:linear "Perm"} SetCollectorPerm(x: [int]bool) : [int]bool
-{
- x
-}
-
-procedure {:yields} {:layer 1} PB({:linear_in "Perm"} permVar_in:[int]bool)
-requires {:layer 1} permVar_in[0] && g == 0;
-{
- var {:linear "Perm"} permVar_out: [int]bool;
- permVar_out := permVar_in;
-
- yield;
- assert {:layer 1} permVar_out[0];
- assert {:layer 1} g == 0;
-
- call IncrG();
-
- yield;
- assert {:layer 1} permVar_out[0];
- assert {:layer 1} g == 1;
-}
-
-procedure {:yields} {:layer 1} Main({:linear_in "Perm"} Permissions: [int]bool)
-requires {:layer 1} Permissions == mapconstbool(true);
-{
- yield;
- call SetG(0);
- async call PB(Permissions);
- yield;
-}
-
-procedure {:yields} {:layer 0,1} SetG(val:int);
-ensures {:atomic} |{A: g := val; return true; }|;
-
-procedure {:yields} {:layer 0,1} IncrG();
-ensures {:atomic} |{A: g := g + 1; return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} mapconstbool(x:bool): [int]bool;
+
+var {:layer 0,1} g:int;
+
+function {:inline} {:linear "Perm"} SetCollectorPerm(x: [int]bool) : [int]bool
+{
+ x
+}
+
+procedure {:yields} {:layer 1} PB({:linear_in "Perm"} permVar_in:[int]bool)
+requires {:layer 1} permVar_in[0] && g == 0;
+{
+ var {:linear "Perm"} permVar_out: [int]bool;
+ permVar_out := permVar_in;
+
+ yield;
+ assert {:layer 1} permVar_out[0];
+ assert {:layer 1} g == 0;
+
+ call IncrG();
+
+ yield;
+ assert {:layer 1} permVar_out[0];
+ assert {:layer 1} g == 1;
+}
+
+procedure {:yields} {:layer 1} Main({:linear_in "Perm"} Permissions: [int]bool)
+requires {:layer 1} Permissions == mapconstbool(true);
+{
+ yield;
+ call SetG(0);
+ async call PB(Permissions);
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} SetG(val:int);
+ensures {:atomic} |{A: g := val; return true; }|;
+
+procedure {:yields} {:layer 0,1} IncrG();
+ensures {:atomic} |{A: g := g + 1; return true; }|;
diff --git a/Test/og/FlanaganQadeer.bpl.expect b/Test/civl/new1.bpl.expect
index fef5ddc0..00ddb38b 100644
--- a/Test/og/FlanaganQadeer.bpl.expect
+++ b/Test/civl/new1.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 4 verified, 0 errors
+
+Boogie program verifier finished with 4 verified, 0 errors
diff --git a/Test/civl/nocollector.bpl b/Test/civl/nocollector.bpl
new file mode 100644
index 00000000..5a6f1e5d
--- /dev/null
+++ b/Test/civl/nocollector.bpl
@@ -0,0 +1,8 @@
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:linear "L"} x:int;
+
+procedure{:yields}{:layer 1} P()
+{
+ yield;
+}
diff --git a/Test/civl/nocollector.bpl.expect b/Test/civl/nocollector.bpl.expect
new file mode 100644
index 00000000..37fad75c
--- /dev/null
+++ b/Test/civl/nocollector.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/og/one.bpl b/Test/civl/one.bpl
index 663b2da0..3b370fa7 100644
--- a/Test/og/one.bpl
+++ b/Test/civl/one.bpl
@@ -1,18 +1,18 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} x:int;
-
-procedure {:yields} {:layer 0,1} Set(v: int);
-ensures {:atomic}
-|{A:
- x := v; return true;
-}|;
-
-procedure {:yields} {:layer 1} B()
-{
- yield;
- call Set(5);
- yield;
- assert {:layer 1} x == 5;
-}
-
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} x:int;
+
+procedure {:yields} {:layer 0,1} Set(v: int);
+ensures {:atomic}
+|{A:
+ x := v; return true;
+}|;
+
+procedure {:yields} {:layer 1} B()
+{
+ yield;
+ call Set(5);
+ yield;
+ assert {:layer 1} x == 5;
+}
+
diff --git a/Test/og/new1.bpl.expect b/Test/civl/one.bpl.expect
index 3de74d3e..41374b00 100644
--- a/Test/og/new1.bpl.expect
+++ b/Test/civl/one.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 2 verified, 0 errors
+
+Boogie program verifier finished with 2 verified, 0 errors
diff --git a/Test/civl/par-incr.bpl b/Test/civl/par-incr.bpl
new file mode 100644
index 00000000..7be8f561
--- /dev/null
+++ b/Test/civl/par-incr.bpl
@@ -0,0 +1,31 @@
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var {:layer 0} x: int;
+
+procedure {:yields} {:layer 0,1} Incr();
+ensures {:right} |{ A: x := x + 1; return true; }|;
+
+procedure {:yields} {:layer 1,2} Incr2()
+ensures {:right} |{ A: x := x + 2; return true; }|;
+{
+ yield;
+ par Incr() | Incr();
+ yield;
+}
+
+procedure {:yields} {:layer 1} Yield()
+{
+ yield;
+}
+
+procedure {:yields} {:layer 2,3} Incr4()
+ensures {:atomic} |{ A: x := x + 4; return true; }|;
+{
+ yield;
+ par Incr2() | Incr2() | Yield();
+ yield;
+}
+
+
+
diff --git a/Test/civl/par-incr.bpl.expect b/Test/civl/par-incr.bpl.expect
new file mode 100644
index 00000000..3e3dc54b
--- /dev/null
+++ b/Test/civl/par-incr.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 7 verified, 0 errors
diff --git a/Test/og/parallel1.bpl b/Test/civl/parallel1.bpl
index 20dd3c79..ec24342e 100644
--- a/Test/og/parallel1.bpl
+++ b/Test/civl/parallel1.bpl
@@ -1,48 +1,48 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} g:int;
-
-procedure {:yields} {:layer 1} PB()
-{
- yield;
- call Incr();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Incr();
-ensures {:atomic}
-|{A:
- g := g + 1; return true;
-}|;
-
-procedure {:yields} {:layer 0,1} Set(v: int);
-ensures {:atomic}
-|{A:
- g := v; return true;
-}|;
-
-procedure {:yields} {:layer 1} PC()
-ensures {:layer 1} g == 3;
-{
- yield;
- call Set(3);
- yield;
- assert {:layer 1} g == 3;
-}
-
-procedure {:yields} {:layer 1} PD()
-{
- call PC();
- assert {:layer 1} g == 3;
- yield;
-}
-
-procedure {:yields} {:layer 1} Main()
-{
- yield;
- while (*)
- {
- par PB() | PC() | PD();
- }
- yield;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} g:int;
+
+procedure {:yields} {:layer 1} PB()
+{
+ yield;
+ call Incr();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Incr();
+ensures {:atomic}
+|{A:
+ g := g + 1; return true;
+}|;
+
+procedure {:yields} {:layer 0,1} Set(v: int);
+ensures {:atomic}
+|{A:
+ g := v; return true;
+}|;
+
+procedure {:yields} {:layer 1} PC()
+ensures {:layer 1} g == 3;
+{
+ yield;
+ call Set(3);
+ yield;
+ assert {:layer 1} g == 3;
+}
+
+procedure {:yields} {:layer 1} PD()
+{
+ call PC();
+ assert {:layer 1} g == 3;
+ yield;
+}
+
+procedure {:yields} {:layer 1} Main()
+{
+ yield;
+ while (*)
+ {
+ par PB() | PC() | PD();
+ }
+ yield;
+}
diff --git a/Test/og/parallel1.bpl.expect b/Test/civl/parallel1.bpl.expect
index 588c9c5b..fa974099 100644
--- a/Test/og/parallel1.bpl.expect
+++ b/Test/civl/parallel1.bpl.expect
@@ -1,8 +1,8 @@
-parallel1.bpl(30,3): Error: Non-interference check failed
-Execution trace:
- parallel1.bpl(7,3): anon0
- (0,0): anon00
- parallel1.bpl(14,3): inline$Incr_1$0$this_A
- (0,0): inline$Impl_YieldChecker_PC_1$0$L0
-
-Boogie program verifier finished with 3 verified, 1 error
+parallel1.bpl(30,3): Error: Non-interference check failed
+Execution trace:
+ parallel1.bpl(7,3): anon0
+ (0,0): anon00
+ parallel1.bpl(14,3): inline$Incr_1$0$A
+ (0,0): inline$Impl_YieldChecker_PC_1$0$L0
+
+Boogie program verifier finished with 7 verified, 1 error
diff --git a/Test/og/parallel2.bpl b/Test/civl/parallel2.bpl
index c28edf2b..540e9810 100644
--- a/Test/og/parallel2.bpl
+++ b/Test/civl/parallel2.bpl
@@ -1,59 +1,59 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} a:[int]int;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
-function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
-{
- MapConstBool(false)[x := true]
-}
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} tid: int)
-{
- yield;
- call tid := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Write(idx: int, val: int);
-ensures {:atomic} |{A: a[idx] := val; return true; }|;
-
-procedure {:yields} {:layer 1} main()
-{
- var {:linear "tid"} i: int;
- var {:linear "tid"} j: int;
- call i := Allocate();
- call j := Allocate();
- par i := t(i) | j := t(j);
- par i := u(i) | j := u(j);
-}
-
-procedure {:yields} {:layer 1} t({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
-{
- i := i';
-
- yield;
- call Write(i, 42);
- call Yield(i);
- assert {:layer 1} a[i] == 42;
-}
-
-procedure {:yields} {:layer 1} u({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
-{
- i := i';
-
- yield;
- call Write(i, 42);
- yield;
- assert {:layer 1} a[i] == 42;
-}
-
-procedure {:yields} {:layer 1} Yield({:linear "tid"} i: int)
-ensures {:layer 1} old(a)[i] == a[i];
-{
- yield;
- assert {:layer 1} old(a)[i] == a[i];
-}
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: int);
-ensures {:atomic} |{ A: return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} a:[int]int;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} tid: int)
+{
+ yield;
+ call tid := AllocateLow();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Write(idx: int, val: int);
+ensures {:atomic} |{A: a[idx] := val; return true; }|;
+
+procedure {:yields} {:layer 1} main()
+{
+ var {:linear "tid"} i: int;
+ var {:linear "tid"} j: int;
+ call i := Allocate();
+ call j := Allocate();
+ par i := t(i) | j := t(j);
+ par i := u(i) | j := u(j);
+}
+
+procedure {:yields} {:layer 1} t({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
+{
+ i := i';
+
+ yield;
+ call Write(i, 42);
+ call Yield(i);
+ assert {:layer 1} a[i] == 42;
+}
+
+procedure {:yields} {:layer 1} u({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
+{
+ i := i';
+
+ yield;
+ call Write(i, 42);
+ yield;
+ assert {:layer 1} a[i] == 42;
+}
+
+procedure {:yields} {:layer 1} Yield({:linear "tid"} i: int)
+ensures {:layer 1} old(a)[i] == a[i];
+{
+ yield;
+ assert {:layer 1} old(a)[i] == a[i];
+}
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: int);
+ensures {:atomic} |{ A: return true; }|;
diff --git a/Test/civl/parallel2.bpl.expect b/Test/civl/parallel2.bpl.expect
new file mode 100644
index 00000000..12041afe
--- /dev/null
+++ b/Test/civl/parallel2.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 10 verified, 0 errors
diff --git a/Test/og/parallel4.bpl b/Test/civl/parallel4.bpl
index f06ff4b8..33a21446 100644
--- a/Test/og/parallel4.bpl
+++ b/Test/civl/parallel4.bpl
@@ -1,45 +1,45 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} a:int;
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} tid: int)
-{
- yield;
- call tid := AllocateLow();
- yield;
-}
-
-function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
-function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
-{
- MapConstBool(false)[x := true]
-}
-
-procedure {:yields} {:layer 1} main()
-{
- var {:linear "tid"} i: int;
- var {:linear "tid"} j: int;
- call i := Allocate();
- call j := Allocate();
- par i := t(i) | j := t(j);
-}
-
-procedure {:yields} {:layer 1} t({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
-{
- i := i';
- call Yield();
- assert {:layer 1} a == old(a);
- call Incr();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Incr();
-ensures {:atomic} |{A: a := a + 1; return true; }|;
-
-procedure {:yields} {:layer 1} Yield()
-{
- yield;
-}
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: int);
-ensures {:atomic} |{ A: return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} a:int;
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} tid: int)
+{
+ yield;
+ call tid := AllocateLow();
+ yield;
+}
+
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+procedure {:yields} {:layer 1} main()
+{
+ var {:linear "tid"} i: int;
+ var {:linear "tid"} j: int;
+ call i := Allocate();
+ call j := Allocate();
+ par i := t(i) | j := t(j);
+}
+
+procedure {:yields} {:layer 1} t({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
+{
+ i := i';
+ call Yield();
+ assert {:layer 1} a == old(a);
+ call Incr();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} Incr();
+ensures {:atomic} |{A: a := a + 1; return true; }|;
+
+procedure {:yields} {:layer 1} Yield()
+{
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: int);
+ensures {:atomic} |{ A: return true; }|;
diff --git a/Test/og/parallel4.bpl.expect b/Test/civl/parallel4.bpl.expect
index 25ad398c..baf228c8 100644
--- a/Test/og/parallel4.bpl.expect
+++ b/Test/civl/parallel4.bpl.expect
@@ -1,6 +1,6 @@
-parallel4.bpl(31,3): Error BP5001: This assertion might not hold.
-Execution trace:
- parallel4.bpl(29,5): anon0
- (0,0): anon01
-
-Boogie program verifier finished with 3 verified, 1 error
+parallel4.bpl(31,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ parallel4.bpl(29,5): anon0
+ (0,0): anon01
+
+Boogie program verifier finished with 7 verified, 1 error
diff --git a/Test/og/parallel5.bpl b/Test/civl/parallel5.bpl
index 87afc888..6d3deb8e 100644
--- a/Test/og/parallel5.bpl
+++ b/Test/civl/parallel5.bpl
@@ -1,59 +1,59 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} a:[int]int;
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} tid: int)
-{
- yield;
- call tid := AllocateLow();
- yield;
-}
-
-function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
-function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
-{
- MapConstBool(false)[x := true]
-}
-
-procedure {:yields} {:layer 0,1} Write(idx: int, val: int);
-ensures {:atomic} |{A: a[idx] := val; return true; }|;
-
-procedure {:yields} {:layer 1} main()
-{
- var {:linear "tid"} i: int;
- var {:linear "tid"} j: int;
- call i := Allocate();
- call j := Allocate();
- par i := t(i) | Yield(j);
- par i := u(i) | j := u(j);
-}
-
-procedure {:yields} {:layer 1} t({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
-{
- i := i';
-
- yield;
- call Write(i, 42);
- call Yield(i);
- assert {:layer 1} a[i] == 42;
-}
-
-procedure {:yields} {:layer 1} u({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
-{
- i := i';
-
- yield;
- call Write(i, 42);
- yield;
- assert {:layer 1} a[i] == 42;
-}
-
-procedure {:yields} {:layer 1} Yield({:linear "tid"} i: int)
-ensures {:layer 1} old(a)[i] == a[i];
-{
- yield;
- assert {:layer 1} old(a)[i] == a[i];
-}
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: int);
-ensures {:atomic} |{ A: return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} a:[int]int;
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} tid: int)
+{
+ yield;
+ call tid := AllocateLow();
+ yield;
+}
+
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+procedure {:yields} {:layer 0,1} Write(idx: int, val: int);
+ensures {:atomic} |{A: a[idx] := val; return true; }|;
+
+procedure {:yields} {:layer 1} main()
+{
+ var {:linear "tid"} i: int;
+ var {:linear "tid"} j: int;
+ call i := Allocate();
+ call j := Allocate();
+ par i := t(i) | Yield(j);
+ par i := u(i) | j := u(j);
+}
+
+procedure {:yields} {:layer 1} t({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
+{
+ i := i';
+
+ yield;
+ call Write(i, 42);
+ call Yield(i);
+ assert {:layer 1} a[i] == 42;
+}
+
+procedure {:yields} {:layer 1} u({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
+{
+ i := i';
+
+ yield;
+ call Write(i, 42);
+ yield;
+ assert {:layer 1} a[i] == 42;
+}
+
+procedure {:yields} {:layer 1} Yield({:linear "tid"} i: int)
+ensures {:layer 1} old(a)[i] == a[i];
+{
+ yield;
+ assert {:layer 1} old(a)[i] == a[i];
+}
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: int);
+ensures {:atomic} |{ A: return true; }|;
diff --git a/Test/civl/parallel5.bpl.expect b/Test/civl/parallel5.bpl.expect
new file mode 100644
index 00000000..12041afe
--- /dev/null
+++ b/Test/civl/parallel5.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 10 verified, 0 errors
diff --git a/Test/og/perm.bpl b/Test/civl/perm.bpl
index 5bc75324..5d6e0d21 100644
--- a/Test/og/perm.bpl
+++ b/Test/civl/perm.bpl
@@ -1,49 +1,49 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var {:layer 0,1} x: int;
-function {:builtin "MapConst"} ch_mapconstbool(x: bool) : [int]bool;
-
-function {:builtin "MapOr"} ch_mapunion(x: [int]bool, y: [int]bool) : [int]bool;
-
-function {:inline} {:linear "Perm"} SetCollectorPerm(x: [int]bool) : [int]bool
-{
- x
-}
-
-procedure {:yields} {:layer 1} mainE({:linear_in "Perm"} permVar_in: [int]bool)
- requires {:layer 1} permVar_in == ch_mapconstbool(true);
- requires {:layer 1} x == 0;
-{
- var {:linear "Perm"} permVar_out: [int]bool;
-
- permVar_out := permVar_in;
-
- yield;
- assert {:layer 1} x == 0;
- assert {:layer 1} permVar_out == ch_mapconstbool(true);
-
- async call foo(permVar_out);
- yield;
-}
-
-procedure {:yields} {:layer 1} foo({:linear_in "Perm"} permVar_in: [int]bool)
- requires {:layer 1} permVar_in != ch_mapconstbool(false);
- requires {:layer 1} permVar_in[1];
- requires {:layer 1} x == 0;
-{
- var {:linear "Perm"} permVar_out: [int]bool;
- permVar_out := permVar_in;
-
- yield;
- assert {:layer 1} permVar_out[1];
- assert {:layer 1} x == 0;
-
- call Incr();
-
- yield;
- assert {:layer 1} permVar_out[1];
- assert {:layer 1} x == 1;
-}
-
-procedure {:yields} {:layer 0,1} Incr();
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var {:layer 0,1} x: int;
+function {:builtin "MapConst"} ch_mapconstbool(x: bool) : [int]bool;
+
+function {:builtin "MapOr"} ch_mapunion(x: [int]bool, y: [int]bool) : [int]bool;
+
+function {:inline} {:linear "Perm"} SetCollectorPerm(x: [int]bool) : [int]bool
+{
+ x
+}
+
+procedure {:yields} {:layer 1} mainE({:linear_in "Perm"} permVar_in: [int]bool)
+ requires {:layer 1} permVar_in == ch_mapconstbool(true);
+ requires {:layer 1} x == 0;
+{
+ var {:linear "Perm"} permVar_out: [int]bool;
+
+ permVar_out := permVar_in;
+
+ yield;
+ assert {:layer 1} x == 0;
+ assert {:layer 1} permVar_out == ch_mapconstbool(true);
+
+ async call foo(permVar_out);
+ yield;
+}
+
+procedure {:yields} {:layer 1} foo({:linear_in "Perm"} permVar_in: [int]bool)
+ requires {:layer 1} permVar_in != ch_mapconstbool(false);
+ requires {:layer 1} permVar_in[1];
+ requires {:layer 1} x == 0;
+{
+ var {:linear "Perm"} permVar_out: [int]bool;
+ permVar_out := permVar_in;
+
+ yield;
+ assert {:layer 1} permVar_out[1];
+ assert {:layer 1} x == 0;
+
+ call Incr();
+
+ yield;
+ assert {:layer 1} permVar_out[1];
+ assert {:layer 1} x == 1;
+}
+
+procedure {:yields} {:layer 0,1} Incr();
ensures {:atomic} |{A: x := x + 1; return true; }|; \ No newline at end of file
diff --git a/Test/og/linear-set.bpl.expect b/Test/civl/perm.bpl.expect
index fef5ddc0..00ddb38b 100644
--- a/Test/og/linear-set.bpl.expect
+++ b/Test/civl/perm.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 4 verified, 0 errors
+
+Boogie program verifier finished with 4 verified, 0 errors
diff --git a/Test/og/t1.bpl b/Test/civl/t1.bpl
index 675b3842..ef468347 100644
--- a/Test/og/t1.bpl
+++ b/Test/civl/t1.bpl
@@ -1,103 +1,103 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
-function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
-{
- MapConstBool(false)[x := true]
-}
-
-function {:inline} {:linear "1"} SetCollector1(x: [int]bool) : [int]bool
-{
- x
-}
-
-function {:inline} {:linear "2"} SetCollector2(x: [int]bool) : [int]bool
-{
- x
-}
-
-var {:layer 0,1} g: int;
-var {:layer 0,1} h: int;
-
-procedure {:yields} {:layer 0,1} SetG(val:int);
-ensures {:atomic} |{A: g := val; return true; }|;
-
-procedure {:yields} {:layer 0,1} SetH(val:int);
-ensures {:atomic} |{A: h := val; return true; }|;
-
-procedure {:yields} {:layer 1} Yield({:linear "1"} x: [int]bool)
-requires {:layer 1} x == mapconstbool(true) && g == 0;
-ensures {:layer 1} x == mapconstbool(true) && g == 0;
-{
- yield;
- assert {:layer 1} x == mapconstbool(true) && g == 0;
-}
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: int)
-ensures {:layer 1} xl != 0;
-{
- yield;
- call xl := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: int);
-ensures {:atomic} |{ A: assume xls != 0; return true; }|;
-
-procedure {:yields} {:layer 1} A({:linear_in "tid"} tid_in: int, {:linear_in "1"} x: [int]bool, {:linear_in "2"} y: [int]bool) returns ({:linear "tid"} tid_out: int)
-requires {:layer 1} x == mapconstbool(true);
-requires {:layer 1} y == mapconstbool(true);
-{
- var {:linear "tid"} tid_child: int;
- tid_out := tid_in;
-
- yield;
- call SetG(0);
-
- par tid_child := Allocate() | Yield(x);
-
- async call B(tid_child, x);
-
- yield;
- assert {:layer 1} x == mapconstbool(true);
- assert {:layer 1} g == 0;
-
- call SetH(0);
-
- yield;
- assert {:layer 1} h == 0 && y == mapconstbool(true);
-
- yield;
- call tid_child := Allocate();
- async call C(tid_child, y);
-
- yield;
-}
-
-procedure {:yields} {:layer 1} B({:linear_in "tid"} tid_in: int, {:linear_in "1"} x_in: [int]bool)
-requires {:layer 1} x_in != mapconstbool(false);
-{
- var {:linear "tid"} tid_out: int;
- var {:linear "1"} x: [int]bool;
- tid_out := tid_in;
- x := x_in;
-
- yield;
- call SetG(1);
- yield;
-}
-
-procedure {:yields} {:layer 1} C({:linear_in "tid"} tid_in: int, {:linear_in "2"} y_in: [int]bool)
-requires {:layer 1} y_in != mapconstbool(false);
-{
- var {:linear "tid"} tid_out: int;
- var {:linear "2"} y: [int]bool;
- tid_out := tid_in;
- y := y_in;
-
- yield;
- call SetH(1);
- yield;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+function {:inline} {:linear "tid"} TidCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+function {:inline} {:linear "1"} SetCollector1(x: [int]bool) : [int]bool
+{
+ x
+}
+
+function {:inline} {:linear "2"} SetCollector2(x: [int]bool) : [int]bool
+{
+ x
+}
+
+var {:layer 0,1} g: int;
+var {:layer 0,1} h: int;
+
+procedure {:yields} {:layer 0,1} SetG(val:int);
+ensures {:atomic} |{A: g := val; return true; }|;
+
+procedure {:yields} {:layer 0,1} SetH(val:int);
+ensures {:atomic} |{A: h := val; return true; }|;
+
+procedure {:yields} {:layer 1} Yield({:linear "1"} x: [int]bool)
+requires {:layer 1} x == mapconstbool(true) && g == 0;
+ensures {:layer 1} x == mapconstbool(true) && g == 0;
+{
+ yield;
+ assert {:layer 1} x == mapconstbool(true) && g == 0;
+}
+
+procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} xl: int)
+ensures {:layer 1} xl != 0;
+{
+ yield;
+ call xl := AllocateLow();
+ yield;
+}
+
+procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} xls: int);
+ensures {:atomic} |{ A: assume xls != 0; return true; }|;
+
+procedure {:yields} {:layer 1} A({:linear_in "tid"} tid_in: int, {:linear_in "1"} x: [int]bool, {:linear_in "2"} y: [int]bool) returns ({:linear "tid"} tid_out: int)
+requires {:layer 1} x == mapconstbool(true);
+requires {:layer 1} y == mapconstbool(true);
+{
+ var {:linear "tid"} tid_child: int;
+ tid_out := tid_in;
+
+ yield;
+ call SetG(0);
+
+ par tid_child := Allocate() | Yield(x);
+
+ async call B(tid_child, x);
+
+ yield;
+ assert {:layer 1} x == mapconstbool(true);
+ assert {:layer 1} g == 0;
+
+ call SetH(0);
+
+ yield;
+ assert {:layer 1} h == 0 && y == mapconstbool(true);
+
+ yield;
+ call tid_child := Allocate();
+ async call C(tid_child, y);
+
+ yield;
+}
+
+procedure {:yields} {:layer 1} B({:linear_in "tid"} tid_in: int, {:linear_in "1"} x_in: [int]bool)
+requires {:layer 1} x_in != mapconstbool(false);
+{
+ var {:linear "tid"} tid_out: int;
+ var {:linear "1"} x: [int]bool;
+ tid_out := tid_in;
+ x := x_in;
+
+ yield;
+ call SetG(1);
+ yield;
+}
+
+procedure {:yields} {:layer 1} C({:linear_in "tid"} tid_in: int, {:linear_in "2"} y_in: [int]bool)
+requires {:layer 1} y_in != mapconstbool(false);
+{
+ var {:linear "tid"} tid_out: int;
+ var {:linear "2"} y: [int]bool;
+ tid_out := tid_in;
+ y := y_in;
+
+ yield;
+ call SetH(1);
+ yield;
+}
diff --git a/Test/og/t1.bpl.expect b/Test/civl/t1.bpl.expect
index 0b0c936e..27a208d4 100644
--- a/Test/og/t1.bpl.expect
+++ b/Test/civl/t1.bpl.expect
@@ -1,9 +1,9 @@
-t1.bpl(65,5): Error: Non-interference check failed
-Execution trace:
- t1.bpl(84,13): anon0
- (0,0): anon05
- (0,0): inline$SetG_1$0$Entry
- t1.bpl(25,21): inline$SetG_1$0$this_A
- (0,0): inline$Impl_YieldChecker_A_1$0$L1
-
-Boogie program verifier finished with 4 verified, 1 error
+t1.bpl(65,5): Error: Non-interference check failed
+Execution trace:
+ t1.bpl(84,13): anon0
+ (0,0): anon05
+ (0,0): inline$SetG_1$0$Entry
+ t1.bpl(25,21): inline$SetG_1$0$A
+ (0,0): inline$Impl_YieldChecker_A_1$0$L1
+
+Boogie program verifier finished with 9 verified, 1 error
diff --git a/Test/og/termination.bpl b/Test/civl/termination.bpl
index 2d5542dd..7741fd19 100644
--- a/Test/og/termination.bpl
+++ b/Test/civl/termination.bpl
@@ -1,18 +1,18 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure {:yields} {:layer 0} X();
-ensures {:atomic} |{ A: return true; }|;
-
-procedure {:yields} {:layer 0} Y();
-ensures {:left} |{ A: return true; }|;
-
-procedure {:yields} {:layer 1} main() {
- yield;
- call X();
- while (*)
- {
- call Y();
- }
- yield;
- assert {:layer 1} true;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure {:yields} {:layer 0} X();
+ensures {:atomic} |{ A: return true; }|;
+
+procedure {:yields} {:layer 0} Y();
+ensures {:left} |{ A: return true; }|;
+
+procedure {:yields} {:layer 1} main() {
+ yield;
+ call X();
+ while (*)
+ {
+ call Y();
+ }
+ yield;
+ assert {:layer 1} true;
+}
diff --git a/Test/og/termination.bpl.expect b/Test/civl/termination.bpl.expect
index d216a01d..adfbec48 100644
--- a/Test/og/termination.bpl.expect
+++ b/Test/civl/termination.bpl.expect
@@ -1,3 +1,3 @@
termination.bpl(9,31): Error: Implementation main fails simulation check C at layer 1. Transactions must be separated by a yield.
-
-1 type checking errors detected in termination.bpl
+
+1 type checking errors detected in termination.bpl
diff --git a/Test/og/termination2.bpl b/Test/civl/termination2.bpl
index 840c27c1..1743c6a1 100644
--- a/Test/og/termination2.bpl
+++ b/Test/civl/termination2.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure {:yields} {:layer 0} X();
-ensures {:atomic} |{ A: return true; }|;
-
-procedure {:yields} {:layer 0} Y();
-ensures {:left} |{ A: return true; }|;
-
-procedure {:yields} {:layer 1} main() {
- yield;
- call X();
- while (*)
- invariant {:terminates} {:layer 1} true;
- {
- call Y();
- }
- yield;
- assert {:layer 1} true;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure {:yields} {:layer 0} X();
+ensures {:atomic} |{ A: return true; }|;
+
+procedure {:yields} {:layer 0} Y();
+ensures {:left} |{ A: return true; }|;
+
+procedure {:yields} {:layer 1} main() {
+ yield;
+ call X();
+ while (*)
+ invariant {:terminates} {:layer 1} true;
+ {
+ call Y();
+ }
+ yield;
+ assert {:layer 1} true;
+}
diff --git a/Test/og/perm.bpl.expect b/Test/civl/termination2.bpl.expect
index 3de74d3e..41374b00 100644
--- a/Test/og/perm.bpl.expect
+++ b/Test/civl/termination2.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 2 verified, 0 errors
+
+Boogie program verifier finished with 2 verified, 0 errors
diff --git a/Test/og/ticket.bpl b/Test/civl/ticket.bpl
index 91863e1a..df19aae4 100644
--- a/Test/og/ticket.bpl
+++ b/Test/civl/ticket.bpl
@@ -1,147 +1,146 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function RightOpen(n: int) : [int]bool;
-function RightClosed(n: int) : [int]bool;
-axiom (forall x: int, y: int :: RightOpen(x)[y] <==> y < x);
-axiom (forall x: int, y: int :: RightClosed(x)[y] <==> y <= x);
-
-type X;
-function {:builtin "MapConst"} mapconstbool(bool): [X]bool;
-const nil: X;
-var {:layer 0,2} t: int;
-var {:layer 0,2} s: int;
-var {:layer 0,2} cs: X;
-var {:layer 0,2} T: [int]bool;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
-{
- MapConstBool(false)[x := true]
-}
-function {:inline} {:linear "tid"} TidSetCollector(x: [X]bool) : [X]bool
-{
- x
-}
-
-function {:inline} Inv1(tickets: [int]bool, ticket: int): (bool)
-{
- tickets == RightOpen(ticket)
-}
-
-function {:inline} Inv2(tickets: [int]bool, ticket: int, lock: X): (bool)
-{
- if (lock == nil) then tickets == RightOpen(ticket) else tickets == RightClosed(ticket)
-}
-
-procedure {:yields} {:layer 2} Allocate({:linear_in "tid"} xls':[X]bool) returns ({:linear "tid"} xls: [X]bool, {:linear "tid"} xl: X)
-ensures {:layer 1} {:layer 2} xl != nil;
-{
- yield;
- call xls, xl := AllocateLow(xls');
- yield;
-}
-
-procedure {:yields} {:layer 2} main({:linear_in "tid"} xls':[X]bool)
-requires {:layer 2} xls' == mapconstbool(true);
-{
- var {:linear "tid"} tid: X;
- var {:linear "tid"} xls: [X]bool;
-
- yield;
-
- call Init(xls');
- xls := xls';
-
- par Yield1() | Yield2();
-
- while (*)
- invariant {:layer 1} Inv1(T, t);
- invariant {:layer 2} Inv2(T, s, cs);
- {
- par xls, tid := Allocate(xls) | Yield1() | Yield2();
- async call Customer(tid);
- par Yield1() | Yield2();
- }
- par Yield1() | Yield2();
-}
-
-procedure {:yields} {:layer 2} Customer({:linear_in "tid"} tid: X)
-requires {:layer 1} Inv1(T, t);
-requires {:layer 2} tid != nil && Inv2(T, s, cs);
-{
- par Yield1() | Yield2();
- while (*)
- invariant {:layer 1} Inv1(T, t);
- invariant {:layer 2} Inv2(T, s, cs);
- {
- call Enter(tid);
- par Yield1() | Yield2() | YieldSpec(tid);
- call Leave(tid);
- par Yield1() | Yield2();
- }
- par Yield1() | Yield2();
-}
-
-procedure {:yields} {:layer 2} Enter({:linear "tid"} tid: X)
-requires {:layer 1} Inv1(T, t);
-ensures {:layer 1} Inv1(T,t);
-requires {:layer 2} tid != nil && Inv2(T, s, cs);
-ensures {:layer 2} Inv2(T, s, cs) && cs == tid;
-{
- var m: int;
-
- par Yield1() | Yield2();
- call m := GetTicketAbstract(tid);
- par Yield1();
- call WaitAndEnter(tid, m);
- par Yield1() | Yield2() | YieldSpec(tid);
-}
-
-procedure {:yields} {:layer 1,2} GetTicketAbstract({:linear "tid"} tid: X) returns (m: int)
-requires {:layer 1} Inv1(T, t);
-ensures {:layer 1} Inv1(T, t);
-ensures {:right} |{ A: havoc m, t; assume !T[m]; T[m] := true; return true; }|;
-{
- par Yield1();
- call m := GetTicket(tid);
- par Yield1();
-}
-
-procedure {:yields} {:layer 2} YieldSpec({:linear "tid"} tid: X)
-requires {:layer 2} tid != nil && cs == tid;
-ensures {:layer 2} cs == tid;
-{
- yield;
- assert {:layer 2} tid != nil && cs == tid;
-}
-
-procedure {:yields} {:layer 2} Yield2()
-requires {:layer 2} Inv2(T, s, cs);
-ensures {:layer 2} Inv2(T, s, cs);
-{
- yield;
- assert {:layer 2} Inv2(T, s, cs);
-}
-
-procedure {:yields} {:layer 1} Yield1()
-requires {:layer 1} Inv1(T, t);
-ensures {:layer 1} Inv1(T,t);
-{
- yield;
- assert {:layer 1} Inv1(T,t);
-}
-
-procedure {:yields} {:layer 0,2} Init({:linear "tid"} xls:[X]bool);
-ensures {:atomic} |{ A: assert xls == mapconstbool(true); cs := nil; t := 0; s := 0; T := RightOpen(0); return true; }|;
-
-procedure {:yields} {:layer 0,1} GetTicket({:linear "tid"} tid: X) returns (m: int);
-ensures {:atomic} |{ A: m := t; t := t + 1; T[m] := true; return true; }|;
-
-procedure {:yields} {:layer 0,2} WaitAndEnter({:linear "tid"} tid: X, m:int);
-ensures {:atomic} |{ A: assume m <= s; cs := tid; return true; }|;
-
-procedure {:yields} {:layer 0,2} Leave({:linear "tid"} tid: X);
-ensures {:atomic} |{ A: s := s + 1; cs := nil; return true; }|;
-
-procedure {:yields} {:layer 0,2} AllocateLow({:linear_in "tid"} xls':[X]bool) returns ({:linear "tid"} xls: [X]bool, {:linear "tid"} xl: X);
-ensures {:atomic} |{ A: assume xl != nil; return true; }|;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function RightOpen(n: int) : [int]bool;
+function RightClosed(n: int) : [int]bool;
+axiom (forall x: int, y: int :: RightOpen(x)[y] <==> y < x);
+axiom (forall x: int, y: int :: RightClosed(x)[y] <==> y <= x);
+
+type X;
+const nil: X;
+var {:layer 0,2} t: int;
+var {:layer 0,2} s: int;
+var {:layer 0,2} cs: X;
+var {:layer 0,2} T: [int]bool;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:inline} {:linear "tid"} TidCollector(x: X) : [X]bool
+{
+ MapConstBool(false)[x := true]
+}
+function {:inline} {:linear "tid"} TidSetCollector(x: [X]bool) : [X]bool
+{
+ x
+}
+
+function {:inline} Inv1(tickets: [int]bool, ticket: int): (bool)
+{
+ tickets == RightOpen(ticket)
+}
+
+function {:inline} Inv2(tickets: [int]bool, ticket: int, lock: X): (bool)
+{
+ if (lock == nil) then tickets == RightOpen(ticket) else tickets == RightClosed(ticket)
+}
+
+procedure {:yields} {:layer 2} Allocate({:linear_in "tid"} xls':[X]bool) returns ({:linear "tid"} xls: [X]bool, {:linear "tid"} xl: X)
+ensures {:layer 1} {:layer 2} xl != nil;
+{
+ yield;
+ call xls, xl := AllocateLow(xls');
+ yield;
+}
+
+procedure {:yields} {:layer 2} main({:linear_in "tid"} xls':[X]bool)
+requires {:layer 2} xls' == MapConstBool(true);
+{
+ var {:linear "tid"} tid: X;
+ var {:linear "tid"} xls: [X]bool;
+
+ yield;
+
+ call Init(xls');
+ xls := xls';
+
+ par Yield1() | Yield2();
+
+ while (*)
+ invariant {:layer 1} Inv1(T, t);
+ invariant {:layer 2} Inv2(T, s, cs);
+ {
+ par xls, tid := Allocate(xls) | Yield1() | Yield2();
+ async call Customer(tid);
+ par Yield1() | Yield2();
+ }
+ par Yield1() | Yield2();
+}
+
+procedure {:yields} {:layer 2} Customer({:linear_in "tid"} tid: X)
+requires {:layer 1} Inv1(T, t);
+requires {:layer 2} tid != nil && Inv2(T, s, cs);
+{
+ par Yield1() | Yield2();
+ while (*)
+ invariant {:layer 1} Inv1(T, t);
+ invariant {:layer 2} Inv2(T, s, cs);
+ {
+ call Enter(tid);
+ par Yield1() | Yield2() | YieldSpec(tid);
+ call Leave(tid);
+ par Yield1() | Yield2();
+ }
+ par Yield1() | Yield2();
+}
+
+procedure {:yields} {:layer 2} Enter({:linear "tid"} tid: X)
+requires {:layer 1} Inv1(T, t);
+ensures {:layer 1} Inv1(T,t);
+requires {:layer 2} tid != nil && Inv2(T, s, cs);
+ensures {:layer 2} Inv2(T, s, cs) && cs == tid;
+{
+ var m: int;
+
+ par Yield1() | Yield2();
+ call m := GetTicketAbstract(tid);
+ par Yield1();
+ call WaitAndEnter(tid, m);
+ par Yield1() | Yield2() | YieldSpec(tid);
+}
+
+procedure {:yields} {:layer 1,2} GetTicketAbstract({:linear "tid"} tid: X) returns (m: int)
+requires {:layer 1} Inv1(T, t);
+ensures {:layer 1} Inv1(T, t);
+ensures {:right} |{ A: havoc m, t; assume !T[m]; T[m] := true; return true; }|;
+{
+ par Yield1();
+ call m := GetTicket(tid);
+ par Yield1();
+}
+
+procedure {:yields} {:layer 2} YieldSpec({:linear "tid"} tid: X)
+requires {:layer 2} tid != nil && cs == tid;
+ensures {:layer 2} cs == tid;
+{
+ yield;
+ assert {:layer 2} tid != nil && cs == tid;
+}
+
+procedure {:yields} {:layer 2} Yield2()
+requires {:layer 2} Inv2(T, s, cs);
+ensures {:layer 2} Inv2(T, s, cs);
+{
+ yield;
+ assert {:layer 2} Inv2(T, s, cs);
+}
+
+procedure {:yields} {:layer 1} Yield1()
+requires {:layer 1} Inv1(T, t);
+ensures {:layer 1} Inv1(T,t);
+{
+ yield;
+ assert {:layer 1} Inv1(T,t);
+}
+
+procedure {:yields} {:layer 0,2} Init({:linear "tid"} xls:[X]bool);
+ensures {:atomic} |{ A: assert xls == MapConstBool(true); cs := nil; t := 0; s := 0; T := RightOpen(0); return true; }|;
+
+procedure {:yields} {:layer 0,1} GetTicket({:linear "tid"} tid: X) returns (m: int);
+ensures {:atomic} |{ A: m := t; t := t + 1; T[m] := true; return true; }|;
+
+procedure {:yields} {:layer 0,2} WaitAndEnter({:linear "tid"} tid: X, m:int);
+ensures {:atomic} |{ A: assume m <= s; cs := tid; return true; }|;
+
+procedure {:yields} {:layer 0,2} Leave({:linear "tid"} tid: X);
+ensures {:atomic} |{ A: s := s + 1; cs := nil; return true; }|;
+
+procedure {:yields} {:layer 0,2} AllocateLow({:linear_in "tid"} xls':[X]bool) returns ({:linear "tid"} xls: [X]bool, {:linear "tid"} xl: X);
+ensures {:atomic} |{ A: assume xl != nil; return true; }|;
diff --git a/Test/civl/ticket.bpl.expect b/Test/civl/ticket.bpl.expect
new file mode 100644
index 00000000..dc45a0ee
--- /dev/null
+++ b/Test/civl/ticket.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 24 verified, 0 errors
diff --git a/Test/og/treiber-stack.bpl b/Test/civl/treiber-stack.bpl
index e1c509ab..a184886d 100644
--- a/Test/og/treiber-stack.bpl
+++ b/Test/civl/treiber-stack.bpl
@@ -1,202 +1,207 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type Node = int;
-const unique null: Node;
-type lmap;
-function {:linear "Node"} dom(lmap): [Node]bool;
-function map(lmap): [Node]Node;
-function {:builtin "MapConst"} MapConstBool(bool) : [Node]bool;
-
-function EmptyLmap(): (lmap);
-axiom (dom(EmptyLmap()) == MapConstBool(false));
-
-function Add(x: lmap, i: Node, v: Node): (lmap);
-axiom (forall x: lmap, i: Node, v: Node :: dom(Add(x, i, v)) == dom(x)[i:=true] && map(Add(x, i, v)) == map(x)[i := v]);
-
-function Remove(x: lmap, i: Node): (lmap);
-axiom (forall x: lmap, i: Node :: dom(Remove(x, i)) == dom(x)[i:=false] && map(Remove(x, i)) == map(x));
-
-procedure {:yields} {:layer 0,1} ReadTopOfStack() returns (v:Node);
-ensures {:right} |{ A: assume dom(Stack)[v] || dom(Used)[v]; return true; }|;
-
-procedure {:yields} {:layer 0,1} Load(i:Node) returns (v:Node);
-ensures {:right} |{ A: assert dom(Stack)[i] || dom(Used)[i]; goto B,C;
- B: assume dom(Stack)[i]; v := map(Stack)[i]; return true;
- C: assume !dom(Stack)[i]; return true; }|;
-
-procedure {:yields} {:layer 0,1} Store({:linear_in "Node"} l_in:lmap, i:Node, v:Node) returns ({:linear "Node"} l_out:lmap);
-ensures {:both} |{ A: assert dom(l_in)[i]; l_out := Add(l_in, i, v); return true; }|;
-
-procedure {:yields} {:layer 0,1} TransferToStack(oldVal: Node, newVal: Node, {:linear_in "Node"} l_in:lmap) returns (r: bool, {:linear "Node"} l_out:lmap);
-ensures {:atomic} |{ A: assert dom(l_in)[newVal];
- goto B,C;
- B: assume oldVal == TopOfStack; TopOfStack := newVal; l_out := EmptyLmap(); Stack := Add(Stack, newVal, map(l_in)[newVal]); r := true; return true;
- C: assume oldVal != TopOfStack; l_out := l_in; r := false; return true; }|;
-
-procedure {:yields} {:layer 0,1} TransferFromStack(oldVal: Node, newVal: Node) returns (r: bool);
-ensures {:atomic} |{ A: goto B,C;
- B: assume oldVal == TopOfStack; TopOfStack := newVal; Used := Add(Used, oldVal, map(Stack)[oldVal]); Stack := Remove(Stack, oldVal); r := true; return true;
- C: assume oldVal != TopOfStack; r := false; return true; }|;
-
-var {:layer 0} TopOfStack: Node;
-var {:linear "Node"} {:layer 0} Stack: lmap;
-
-
-function {:inline} Inv(TopOfStack: Node, Stack: lmap) : (bool)
-{
- BetweenSet(map(Stack), TopOfStack, null)[TopOfStack] &&
- Subset(BetweenSet(map(Stack), TopOfStack, null), Union(Singleton(null), dom(Stack)))
-}
-
-var {:linear "Node"} {:layer 0} Used: lmap;
-
-procedure {:yields} {:layer 1} push(x: Node, {:linear_in "Node"} x_lmap: lmap)
-requires {:layer 1} dom(x_lmap)[x];
-requires {:layer 1} Inv(TopOfStack, Stack);
-ensures {:layer 1} Inv(TopOfStack, Stack);
-ensures {:atomic} |{ A: Stack := Add(Stack, x, TopOfStack); TopOfStack := x; return true; }|;
-{
- var t: Node;
- var g: bool;
- var {:linear "Node"} t_lmap: lmap;
-
- yield;
- assert {:layer 1} Inv(TopOfStack, Stack);
- t_lmap := x_lmap;
- while (true)
- invariant {:layer 1} dom(t_lmap) == dom(x_lmap);
- invariant {:layer 1} Inv(TopOfStack, Stack);
- {
- call t := ReadTopOfStack();
- call t_lmap := Store(t_lmap, x, t);
- call g, t_lmap := TransferToStack(t, x, t_lmap);
- if (g) {
- assert {:layer 1} map(Stack)[x] == t;
- break;
- }
- yield;
- assert {:layer 1} dom(t_lmap) == dom(x_lmap);
- assert {:layer 1} Inv(TopOfStack, Stack);
- }
- yield;
- assert {:expand} {:layer 1} Inv(TopOfStack, Stack);
-}
-
-procedure {:yields} {:layer 1} pop()
-requires {:layer 1} Inv(TopOfStack, Stack);
-ensures {:layer 1} Inv(TopOfStack, Stack);
-ensures {:atomic} |{ var t: Node;
- A: assume TopOfStack != null; t := TopOfStack; Used := Add(Used, t, map(Stack)[t]); TopOfStack := map(Stack)[t]; Stack := Remove(Stack, t); return true; }|;
-{
- var g: bool;
- var x: Node;
- var t: Node;
-
- yield;
- assert {:layer 1} Inv(TopOfStack, Stack);
- while (true)
- invariant {:layer 1} Inv(TopOfStack, Stack);
- {
- call t := ReadTopOfStack();
- if (t != null) {
- call x := Load(t);
- call g := TransferFromStack(t, x);
- if (g) {
- break;
- }
- }
- yield;
- assert {:layer 1} Inv(TopOfStack, Stack);
- }
- yield;
- assert {:layer 1} Inv(TopOfStack, Stack);
-}
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-
-////////////////////
-// Between predicate
-////////////////////
-function Between(f: [int]int, x: int, y: int, z: int) returns (bool);
-function Avoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
-
-
-//////////////////////////
-// Between set constructor
-//////////////////////////
-function BetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
-
-////////////////////////////////////////////////////
-// axioms relating Between and BetweenSet
-////////////////////////////////////////////////////
-axiom(forall f: [int]int, x: int, y: int, z: int :: {BetweenSet(f, x, z)[y]} BetweenSet(f, x, z)[y] <==> Between(f, x, y, z));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, z), BetweenSet(f, x, z)} Between(f, x, y, z) ==> BetweenSet(f, x, z)[y]);
-axiom(forall f: [int]int, x: int, z: int :: {BetweenSet(f, x, z)} Between(f, x, x, x));
-axiom(forall f: [int]int, x: int, z: int :: {BetweenSet(f, x, z)} Between(f, z, z, z));
-
-
-//////////////////////////
-// Axioms for Between
-//////////////////////////
-
-// reflexive
-axiom(forall f: [int]int, x: int :: Between(f, x, x, x));
-
-// step
-axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {Between(f, y, z, w), f[x]} Between(f, x, f[x], f[x]));
-
-// reach
-axiom(forall f: [int]int, x: int, y: int :: {f[x], Between(f, x, y, y)} Between(f, x, y, y) ==> x == y || Between(f, x, f[x], y));
-
-// cycle
-axiom(forall f: [int]int, x: int, y:int :: {f[x], Between(f, x, y, y)} f[x] == x && Between(f, x, y, y) ==> x == y);
-
-// sandwich
-axiom(forall f: [int]int, x: int, y: int :: {Between(f, x, y, x)} Between(f, x, y, x) ==> x == y);
-
-// order1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, y), Between(f, x, z, z)} Between(f, x, y, y) && Between(f, x, z, z) ==> Between(f, x, y, z) || Between(f, x, z, y));
-
-// order2
-axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, z)} Between(f, x, y, z) ==> Between(f, x, y, y) && Between(f, y, z, z));
-
-// transitive1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, y), Between(f, y, z, z)} Between(f, x, y, y) && Between(f, y, z, z) ==> Between(f, x, z, z));
-
-// transitive2
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {Between(f, x, y, z), Between(f, y, w, z)} Between(f, x, y, z) && Between(f, y, w, z) ==> Between(f, x, y, w) && Between(f, x, w, z));
-
-// transitive3
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {Between(f, x, y, z), Between(f, x, w, y)} Between(f, x, y, z) && Between(f, x, w, y) ==> Between(f, x, w, z) && Between(f, w, y, z));
-
-// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
-// It cannot be proved using the rest of the axioms.
-axiom(forall f: [int]int, u:int, x: int :: {Between(f, u, x, x)} Between(f, u, x, x) ==> Between(f, u, u, x));
-
-// relation between Avoiding and Between
-axiom(forall f: [int]int, x: int, y: int, z: int :: {Avoiding(f, x, y, z)} Avoiding(f, x, y, z) <==> (Between(f, x, y, z) || (Between(f, x, y, y) && !Between(f, x, z, z))));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, z)} Between(f, x, y, z) <==> (Avoiding(f, x, y, z) && Avoiding(f, x, z, z)));
-
-// update
-axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {Avoiding(f[p := q], u, v, x)} Avoiding(f[p := q], u, v, x) <==> ((Avoiding(f, u, v, p) && Avoiding(f, u, v, x)) || (Avoiding(f, u, p, x) && p != x && Avoiding(f, q, v, p) && Avoiding(f, q, v, x))));
-
-axiom (forall f: [int]int, p: int, q: int, u: int, w: int :: {BetweenSet(f[p := q], u, w)} Avoiding(f, u, w, p) ==> Equal(BetweenSet(f[p := q], u, w), BetweenSet(f, u, w)));
-axiom (forall f: [int]int, p: int, q: int, u: int, w: int :: {BetweenSet(f[p := q], u, w)} p != w && Avoiding(f, u, p, w) && Avoiding(f, q, w, p) ==> Equal(BetweenSet(f[p := q], u, w), Union(BetweenSet(f, u, p), BetweenSet(f, q, w))));
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+const null: int;
+type lmap;
+function {:linear "Node"} dom(lmap): [int]bool;
+function map(lmap): [int]int;
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+
+function EmptyLmap(): (lmap);
+axiom (dom(EmptyLmap()) == MapConstBool(false));
+
+function Add(x: lmap, i: int, v: int): (lmap);
+axiom (forall x: lmap, i: int, v: int :: dom(Add(x, i, v)) == dom(x)[i:=true] && map(Add(x, i, v)) == map(x)[i := v]);
+
+function Remove(x: lmap, i: int): (lmap);
+axiom (forall x: lmap, i: int :: dom(Remove(x, i)) == dom(x)[i:=false] && map(Remove(x, i)) == map(x));
+
+procedure {:yields} {:layer 0,1} ReadTopOfStack() returns (v:int);
+ensures {:right} |{ A: assume v == null || dom(Stack)[v] || Used[v]; return true; }|;
+
+procedure {:yields} {:layer 0,1} Load(i:int) returns (v:int);
+ensures {:right} |{ A: assert dom(Stack)[i] || Used[i]; goto B,C;
+ B: assume dom(Stack)[i]; v := map(Stack)[i]; return true;
+ C: assume !dom(Stack)[i]; return true; }|;
+
+procedure {:yields} {:layer 0,1} Store({:linear_in "Node"} l_in:lmap, i:int, v:int) returns ({:linear "Node"} l_out:lmap);
+ensures {:both} |{ A: assert dom(l_in)[i]; l_out := Add(l_in, i, v); return true; }|;
+
+procedure {:yields} {:layer 0,1} TransferToStack(oldVal: int, newVal: int, {:linear_in "Node"} l_in:lmap) returns (r: bool, {:linear "Node"} l_out:lmap);
+ensures {:atomic} |{ A: assert dom(l_in)[newVal];
+ goto B,C;
+ B: assume oldVal == TopOfStack; TopOfStack := newVal; l_out := EmptyLmap(); Stack := Add(Stack, newVal, map(l_in)[newVal]); r := true; return true;
+ C: assume oldVal != TopOfStack; l_out := l_in; r := false; return true; }|;
+
+procedure {:yields} {:layer 0,1} TransferFromStack(oldVal: int, newVal: int) returns (r: bool);
+ensures {:atomic} |{ A: goto B,C;
+ B: assume oldVal == TopOfStack; TopOfStack := newVal; Used[oldVal] := true; Stack := Remove(Stack, oldVal); r := true; return true;
+ C: assume oldVal != TopOfStack; r := false; return true; }|;
+
+var {:layer 0} TopOfStack: int;
+var {:linear "Node"} {:layer 0} Stack: lmap;
+
+
+function {:inline} Inv(TopOfStack: int, Stack: lmap) : (bool)
+{
+ BetweenSet(map(Stack), TopOfStack, null)[TopOfStack] &&
+ Subset(BetweenSet(map(Stack), TopOfStack, null), Union(Singleton(null), dom(Stack)))
+}
+
+var {:linear "Node"} {:layer 0} Used: [int]bool;
+
+function {:inline} {:linear "Node"} NodeCollector(x: int) : [int]bool
+{
+ MapConstBool(false)[x := true]
+}
+function {:inline} {:linear "Node"} NodeSetCollector(x: [int]bool) : [int]bool
+{
+ x
+}
+
+procedure {:yields} {:layer 1} push(x: int, {:linear_in "Node"} x_lmap: lmap)
+requires {:layer 1} dom(x_lmap)[x];
+requires {:layer 1} Inv(TopOfStack, Stack);
+ensures {:layer 1} Inv(TopOfStack, Stack);
+ensures {:atomic} |{ A: Stack := Add(Stack, x, TopOfStack); TopOfStack := x; return true; }|;
+{
+ var t: int;
+ var g: bool;
+ var {:linear "Node"} t_lmap: lmap;
+
+ yield;
+ assert {:layer 1} Inv(TopOfStack, Stack);
+ t_lmap := x_lmap;
+ while (true)
+ invariant {:layer 1} dom(t_lmap) == dom(x_lmap);
+ invariant {:layer 1} Inv(TopOfStack, Stack);
+ {
+ call t := ReadTopOfStack();
+ call t_lmap := Store(t_lmap, x, t);
+ call g, t_lmap := TransferToStack(t, x, t_lmap);
+ if (g) {
+ break;
+ }
+ yield;
+ assert {:layer 1} dom(t_lmap) == dom(x_lmap);
+ assert {:layer 1} Inv(TopOfStack, Stack);
+ }
+ yield;
+ assert {:expand} {:layer 1} Inv(TopOfStack, Stack);
+}
+
+procedure {:yields} {:layer 1} pop() returns (t: int)
+requires {:layer 1} Inv(TopOfStack, Stack);
+ensures {:layer 1} Inv(TopOfStack, Stack);
+ensures {:atomic} |{ A: assume TopOfStack != null; t := TopOfStack; Used[t] := true; TopOfStack := map(Stack)[t]; Stack := Remove(Stack, t); return true; }|;
+{
+ var g: bool;
+ var x: int;
+
+ yield;
+ assert {:layer 1} Inv(TopOfStack, Stack);
+ while (true)
+ invariant {:layer 1} Inv(TopOfStack, Stack);
+ {
+ call t := ReadTopOfStack();
+ if (t != null) {
+ call x := Load(t);
+ call g := TransferFromStack(t, x);
+ if (g) {
+ break;
+ }
+ }
+ yield;
+ assert {:layer 1} Inv(TopOfStack, Stack);
+ }
+ yield;
+ assert {:layer 1} Inv(TopOfStack, Stack);
+}
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+
+////////////////////
+// Between predicate
+////////////////////
+function Between(f: [int]int, x: int, y: int, z: int) returns (bool);
+function Avoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
+
+
+//////////////////////////
+// Between set constructor
+//////////////////////////
+function BetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
+
+////////////////////////////////////////////////////
+// axioms relating Between and BetweenSet
+////////////////////////////////////////////////////
+axiom(forall f: [int]int, x: int, y: int, z: int :: {BetweenSet(f, x, z)[y]} BetweenSet(f, x, z)[y] <==> Between(f, x, y, z));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, z), BetweenSet(f, x, z)} Between(f, x, y, z) ==> BetweenSet(f, x, z)[y]);
+axiom(forall f: [int]int, x: int, z: int :: {BetweenSet(f, x, z)} Between(f, x, x, x));
+axiom(forall f: [int]int, x: int, z: int :: {BetweenSet(f, x, z)} Between(f, z, z, z));
+
+
+//////////////////////////
+// Axioms for Between
+//////////////////////////
+
+// reflexive
+axiom(forall f: [int]int, x: int :: Between(f, x, x, x));
+
+// step
+axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {Between(f, y, z, w), f[x]} Between(f, x, f[x], f[x]));
+
+// reach
+axiom(forall f: [int]int, x: int, y: int :: {f[x], Between(f, x, y, y)} Between(f, x, y, y) ==> x == y || Between(f, x, f[x], y));
+
+// cycle
+axiom(forall f: [int]int, x: int, y:int :: {f[x], Between(f, x, y, y)} f[x] == x && Between(f, x, y, y) ==> x == y);
+
+// sandwich
+axiom(forall f: [int]int, x: int, y: int :: {Between(f, x, y, x)} Between(f, x, y, x) ==> x == y);
+
+// order1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, y), Between(f, x, z, z)} Between(f, x, y, y) && Between(f, x, z, z) ==> Between(f, x, y, z) || Between(f, x, z, y));
+
+// order2
+axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, z)} Between(f, x, y, z) ==> Between(f, x, y, y) && Between(f, y, z, z));
+
+// transitive1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, y), Between(f, y, z, z)} Between(f, x, y, y) && Between(f, y, z, z) ==> Between(f, x, z, z));
+
+// transitive2
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {Between(f, x, y, z), Between(f, y, w, z)} Between(f, x, y, z) && Between(f, y, w, z) ==> Between(f, x, y, w) && Between(f, x, w, z));
+
+// transitive3
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {Between(f, x, y, z), Between(f, x, w, y)} Between(f, x, y, z) && Between(f, x, w, y) ==> Between(f, x, w, z) && Between(f, w, y, z));
+
+// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
+// It cannot be proved using the rest of the axioms.
+axiom(forall f: [int]int, u:int, x: int :: {Between(f, u, x, x)} Between(f, u, x, x) ==> Between(f, u, u, x));
+
+// relation between Avoiding and Between
+axiom(forall f: [int]int, x: int, y: int, z: int :: {Avoiding(f, x, y, z)} Avoiding(f, x, y, z) <==> (Between(f, x, y, z) || (Between(f, x, y, y) && !Between(f, x, z, z))));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {Between(f, x, y, z)} Between(f, x, y, z) <==> (Avoiding(f, x, y, z) && Avoiding(f, x, z, z)));
+
+// update
+axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {Avoiding(f[p := q], u, v, x)} Avoiding(f[p := q], u, v, x) <==> ((Avoiding(f, u, v, p) && Avoiding(f, u, v, x)) || (Avoiding(f, u, p, x) && p != x && Avoiding(f, q, v, p) && Avoiding(f, q, v, x))));
+
+axiom (forall f: [int]int, p: int, q: int, u: int, w: int :: {BetweenSet(f[p := q], u, w)} Avoiding(f, u, w, p) ==> Equal(BetweenSet(f[p := q], u, w), BetweenSet(f, u, w)));
+axiom (forall f: [int]int, p: int, q: int, u: int, w: int :: {BetweenSet(f[p := q], u, w)} p != w && Avoiding(f, u, p, w) && Avoiding(f, q, w, p) ==> Equal(BetweenSet(f[p := q], u, w), Union(BetweenSet(f, u, p), BetweenSet(f, q, w))));
axiom (forall f: [int]int, p: int, q: int, u: int, w: int :: {BetweenSet(f[p := q], u, w)} Avoiding(f, u, w, p) || (p != w && Avoiding(f, u, p, w) && Avoiding(f, q, w, p)) || Equal(BetweenSet(f[p := q], u, w), Empty())); \ No newline at end of file
diff --git a/Test/civl/treiber-stack.bpl.expect b/Test/civl/treiber-stack.bpl.expect
new file mode 100644
index 00000000..76a9a2bf
--- /dev/null
+++ b/Test/civl/treiber-stack.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 8 verified, 0 errors
diff --git a/Test/og/wsq.bpl b/Test/civl/wsq.bpl
index 9cb6a19b..0a2227b6 100644
--- a/Test/og/wsq.bpl
+++ b/Test/civl/wsq.bpl
@@ -1,560 +1,544 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type Tid;
-const nil: Tid;
-
-function {:builtin "MapConst"} MapConstBool(bool) : [Tid]bool;
-function {:inline} {:linear "tid"} TidCollector(x: Tid) : [Tid]bool
-{
- MapConstBool(false)[x := true]
-}
-
-
-
-var {:layer 0,3} H: int;
-var {:layer 0,3} T: int;
-var {:layer 0,3} items: [int]int;
-var {:layer 0} status: [int]bool;
-var {:layer 0,3} take_in_cs: bool;
-var {:layer 0,3} put_in_cs: bool;
-var {:layer 0,3} steal_in_cs: [Tid]bool;
-var {:layer 0,3} h_ss: [Tid]int;
-var {:layer 0,3} t_ss: [Tid]int;
-
-const IN_Q: bool;
-const NOT_IN_Q: bool;
-axiom IN_Q == true;
-axiom NOT_IN_Q == false;
-
-const unique EMPTY: int;
-const unique NIL: Tid;
-const unique ptTid: Tid;
-axiom ptTid != NIL;
-
-function {:inline} stealerTid(tid: Tid):(bool) { tid != NIL && tid != ptTid }
-
-function {:inline} ideasInv(put_in_cs:bool,
- items:[int]int,
- status: [int]bool,
- H:int, T:int,
- take_in_cs:bool,
- steal_in_cs:[Tid]bool,
- h_ss:[Tid]int,
- t_ss:[Tid]int
- ):(bool)
-{
- (
- ( (take_in_cs) && h_ss[ptTid] < t_ss[ptTid] ==> (t_ss[ptTid] == T && H <= T &&
- items[T] != EMPTY && status[T] == IN_Q) ) &&
- (put_in_cs ==> !take_in_cs) && (take_in_cs ==> !put_in_cs) &&
- (( (take_in_cs) && H != h_ss[ptTid]) ==> H > h_ss[ptTid]) &&
- (forall td:Tid :: (stealerTid(td) && steal_in_cs[td] && H == h_ss[td] && H < t_ss[td]) ==> (items[H] != EMPTY && status[H] == IN_Q)) &&
- (forall td:Tid :: (stealerTid(td) && steal_in_cs[td] && H != h_ss[td]) ==> H > h_ss[td])
- )
-}
-
-function {:inline} queueInv(steal_in_cs:[Tid]bool,
- put_in_cs:bool,
- take_in_cs:bool,
- items:[int]int, status: [int]bool, _H:int, _T:int):(bool)
-{
- ( (forall i:int :: (_H <= i && i <= _T) ==> (status[i] == IN_Q && items[i] != EMPTY)) )
-}
-
-function {:inline} emptyInv(put_in_cs:bool, take_in_cs:bool, items:[int]int, status:[int]bool, T:int):(bool)
-{
- (forall i:int :: (i>=T && !put_in_cs && !take_in_cs) ==> status[i] == NOT_IN_Q && items[i] == EMPTY)
-}
-
-function {:inline} putInv(items:[int]int, status: [int]bool, H:int, T:int):(bool)
-{
- (forall i:int :: (H <= i && i < T) ==> (status[i] == IN_Q && items[i] != EMPTY))
-}
-
-function {:inline} takeInv(items:[int]int, status: [int]bool, H:int, T:int, t:int, h:int):(bool)
-{
- (forall i:int :: (h <= i && i <= t) ==> (status[i] == IN_Q &&
- items[i] != EMPTY) &&
- t == T
- )
-}
-
-procedure {:yields} {:layer 3} put({:linear "tid"} tid:Tid, task: int)
-requires {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && task != EMPTY && !take_in_cs && !put_in_cs;
-requires {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
-requires {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
-ensures {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
-ensures {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
-ensures {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
-ensures {:atomic} |{ var i: int; A: assume status[i] == NOT_IN_Q; status[i] := IN_Q; return true; }|;
-{
- var t: int;
- var {:aux} oldH:int;
- var {:aux} oldT:int;
- var {:aux} oldStatusT:bool;
-
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
- assert {:layer 3} {:expand} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H && oldT == T;
- assert {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
-
- call t := readT_put(tid);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && put_in_cs;
- assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} tid == ptTid && t == T;
- assert {:layer 3} oldH <= H && oldT == T;
- assert {:layer 3} (forall i:int :: i>=T ==> status[i] == NOT_IN_Q && items[i] == EMPTY);
-
- call writeItems_put(tid,t, task);
-
- oldH := H;
- oldT := T;
- oldStatusT := status[T];
- yield;
- assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && t == T && tid == ptTid && !take_in_cs && put_in_cs;
- assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} items[t] == task;
- assert {:layer 3} oldH <= H && oldT == T;
- assert {:layer 3} (forall i:int :: i>T ==> status[i] == NOT_IN_Q && items[i] == EMPTY);
-
-
- call writeT_put(tid, t+1);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
- assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} T == t + 1;
- assert {:layer 3} oldH <= H && oldT == T;
- assert {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
-}
-
-procedure {:yields} {:layer 3} take({:linear "tid"} tid:Tid) returns (task: int, taskstatus: bool)
-requires {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
-requires {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
-ensures {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs && (task != EMPTY ==> taskstatus == IN_Q);
-ensures {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
-ensures {:atomic} |{ var i: int; A: goto B,C; B: assume status[i] == IN_Q; status[i] := NOT_IN_Q; return true; C: return true;}|;
-{
- var h, t: int;
- var chk: bool;
- var {:aux} oldH:int;
- var {:aux} oldT:int;
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H && oldT == T;
-
- LOOP_ENTRY_1:
-
- while(true)
- invariant {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
- invariant {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- {
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H && oldT == T;
-
- call t := readT_take_init(tid);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} t == T;
- assert {:layer 3} items[t-1] == EMPTY ==> H > t-1;
- assert {:layer 3} oldH <= H && oldT == T;
-
- t := t-1;
- call writeT_take(tid, t);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && !take_in_cs && !put_in_cs && t_ss[tid] == t;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} t == T;
- assert {:layer 3} items[t] == EMPTY ==> H > t;
- assert {:layer 3} oldH <= H && oldT == T;
-
- call h := readH_take(tid);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && take_in_cs && !put_in_cs && h_ss[tid] == h && t_ss[tid] == t;
- assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} t == T;
- assert {:layer 3} h <= H;
- assert {:layer 3} items[t] == EMPTY ==> H > t;
- assert {:layer 3} oldH <= H;
- assert {:layer 3} oldT == T;
- assert {:layer 3} h <= H;
- assert {:layer 3} oldH == h;
-
- if(t<h) {
-
- call writeT_take_abort(tid, h);
- task := EMPTY;
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} h <= H;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} h == T;
- assert {:layer 3} oldH <= H && oldT == T;
- return;
- }
-
- call task, taskstatus := readItems(tid, t);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} H >= h;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && take_in_cs && h_ss[tid] == h && t_ss[tid] == t;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} t == T && task == items[T];
- assert {:layer 3} T > H ==> items[T] != EMPTY;
- assert {:layer 3} oldH <= H && oldT == T && !put_in_cs && take_in_cs;
-
- if(t>h) {
- call takeExitCS(tid);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && h_ss[tid] == h && t_ss[tid] == t;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} t == T && task == items[t] && task != EMPTY && taskstatus == IN_Q;
- assert {:layer 3} oldH <= H && oldT == T && !put_in_cs && !take_in_cs;
- return;
- }
- call writeT_take_eq(tid, h+1);
- oldH := H;
- oldT := T;
-
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} T == h + 1;
- assert {:layer 3} oldH <= H;
- assert {:layer 3} oldT == T;
- assert {:layer 3} task == items[t];
- assert {:layer 3} !put_in_cs;
-
- call chk := CAS_H_take(tid, h,h+1);
-
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} chk ==> (h+1 == oldH && h_ss[tid] == oldH -1 && task != EMPTY);
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} h+1 == T;
- assert {:layer 3} task == items[t];
- assert {:layer 3} !take_in_cs;
- assert {:layer 3} !put_in_cs;
- assert {:layer 3} oldH <= H && oldT == T;
-
- if(!chk) {
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} h+1 == T && task == items[t] && !take_in_cs && !put_in_cs;
- assert {:layer 3} oldH <= H && oldT == T;
-
- goto LOOP_ENTRY_1;
- }
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} h+1 == T && task == items[t] && !take_in_cs && !put_in_cs;
- assert {:layer 3} oldH <= H && oldT == T && task != EMPTY && taskstatus == IN_Q;
-
- return;
- }
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && !put_in_cs;
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H && oldT == T;
-
-}
-
-
-procedure {:yields}{:layer 3} steal({:linear "tid"} tid:Tid) returns (task: int, taskstatus: bool)
-requires {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && stealerTid(tid) &&
- !steal_in_cs[tid];
-requires {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
-ensures {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) &&
- !steal_in_cs[tid] && (task != EMPTY ==> taskstatus == IN_Q);
-ensures {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
-ensures {:atomic} |{ var i: int; A: goto B,C; B: assume status[i] == IN_Q; status[i] := NOT_IN_Q; return true; C: return true;}|;
-{
- var h, t: int;
- var chk: bool;
- var {:aux} oldH:int;
- var {:aux} oldT:int;
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} stealerTid(tid);
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H;
- assert {:layer 3} !steal_in_cs[tid];
-
- LOOP_ENTRY_2:
- while(true)
- invariant {:layer 3} stealerTid(tid);
- invariant {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- invariant {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- invariant {:layer 3} !steal_in_cs[tid];
- {
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} stealerTid(tid);
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H;
- assert {:layer 3} !steal_in_cs[tid];
-
- call h := readH_steal(tid);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} H >= h;
- assert {:layer 3} !steal_in_cs[tid];
- assert {:layer 3} h_ss[tid] == h;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H;
-
- call t := readT_steal(tid);
-
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} steal_in_cs[tid];
- assert {:layer 3} stealerTid(tid) && H >= h && steal_in_cs[tid] && h_ss[tid] == h;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H && t == t_ss[tid];
- assert {:layer 3} (h < t && take_in_cs && (h_ss[ptTid] < t_ss[ptTid]) && h == H) ==> (H < T);
- assert {:layer 3} H >= h;
-
- if( h>= t) {
-
- task := EMPTY;
- call stealExitCS(tid);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} !steal_in_cs[tid];
- assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid] && h_ss[tid] == h;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H;
- return;
- }
-
- call task, taskstatus := readItems(tid, h);
-
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} stealerTid(tid) && steal_in_cs[tid] && h_ss[tid] == h;
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H;
- assert {:layer 3} oldH == H && H == h && h_ss[tid] == h ==> task != EMPTY;
- assert {:layer 3} (take_in_cs && (h_ss[ptTid] < t_ss[ptTid]) && h == H) ==> (H < T);
- assert {:layer 3} h == H ==> status[H] == IN_Q;
-
- call chk := CAS_H_steal(tid, h,h+1);
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} h_ss[tid] == h;
- assert {:layer 3} chk ==> (h+1 == oldH && h_ss[tid] == h && task != EMPTY && taskstatus == IN_Q);
- assert {:layer 3} (take_in_cs && (h_ss[ptTid] < t_ss[ptTid]) && chk) ==> ((oldH-1) < T);
- assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid];
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} oldH <= H;
-
- if(!chk) {
- goto LOOP_ENTRY_2;
- }
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid];
- assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
- assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
- assert {:layer 3} oldH <= H && task != EMPTY;
- return;
- }
-
- oldH := H;
- oldT := T;
- yield;
- assert {:layer 3} chk && task != EMPTY;
- assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid];
- assert {:layer 3} oldH <= H;
-}
-
-procedure {:yields}{:layer 0,3} readH_take({:linear "tid"} tid:Tid) returns (y: int);
-ensures {:atomic} |{A: assert tid == ptTid;
- y := H;
- take_in_cs := true;
- h_ss[tid] := H;
- return true;}|;
-
-procedure {:yields}{:layer 0,3} readH_steal({:linear "tid"} tid:Tid) returns (y: int);
-ensures {:atomic} |{A: assert stealerTid(tid);
- assert !steal_in_cs[tid];
- y := H;
- h_ss[tid] := H;
- return true;}|;
-
-procedure {:yields}{:layer 0,3} readT_take_init({:linear "tid"} tid:Tid) returns (y: int);
-ensures {:atomic} |{A: assert tid != NIL; assert tid == ptTid; y := T; return true;}|;
-
-procedure {:yields}{:layer 0,3} readT_put({:linear "tid"} tid:Tid) returns (y: int);
-ensures {:atomic} |{A: assert tid != NIL;
- assert tid == ptTid;
- put_in_cs := true;
- y := T;
- return true;}|;
-
-procedure {:yields}{:layer 0,3} readT_steal({:linear "tid"} tid:Tid) returns (y: int);
-ensures {:atomic} |{A: assert tid != NIL;
- assert stealerTid(tid);
- assert !steal_in_cs[tid];
- y := T;
- t_ss[tid] := T;
- steal_in_cs[tid] := true;
- return true;}|;
-
-procedure {:yields}{:layer 0,3} readItems({:linear "tid"} tid:Tid, ind: int) returns (y: int, b:bool);
-ensures {:atomic} |{A: y := items[ind]; b := status[ind]; return true; }|;
-
-procedure {:yields}{:layer 0,3} writeT_put({:linear "tid"} tid:Tid, val: int);
-ensures {:atomic} |{A: assert tid == ptTid;
- T := T+1;
- put_in_cs := false;
- return true; }|;
-
-procedure {:yields}{:layer 0,3} writeT_take({:linear "tid"} tid:Tid, val: int);
-ensures {:atomic} |{A: assert tid == ptTid;
- T := val;
- t_ss[tid] := val;
- return true; }|;
-
-procedure {:yields}{:layer 0,3} writeT_take_abort({:linear "tid"} tid:Tid, val: int);
-ensures {:atomic} |{A: assert tid == ptTid;
- assert take_in_cs;
- T := val;
- take_in_cs := false;
- return true; }|;
-
-procedure {:yields}{:layer 0,3} writeT_take_eq({:linear "tid"} tid:Tid, val: int);
-ensures {:atomic} |{A: assert tid == ptTid;
- T := val;
- return true; }|;
-
-procedure {:yields}{:layer 0,3} takeExitCS({:linear "tid"} tid:Tid);
-ensures {:atomic} |{A: assert tid == ptTid;
- take_in_cs := false;
- return true; }|;
-
-procedure {:yields}{:layer 0,3} stealExitCS({:linear "tid"} tid:Tid);
-ensures {:atomic} |{A: assert stealerTid(tid);
- assert steal_in_cs[tid];
- steal_in_cs[tid] := false;
- return true; }|;
-
-
-procedure {:yields}{:layer 0,3} writeItems({:linear "tid"} tid:Tid, idx: int, val: int);
-ensures {:atomic} |{A: assert tid == ptTid;
- assert val != EMPTY;
- items[idx] := val;
- status[idx] := IN_Q;
- return true; }|;
-
-
-procedure {:yields}{:layer 0,3} writeItems_put({:linear "tid"} tid:Tid, idx: int, val: int);
-ensures {:atomic} |{A: assert tid == ptTid;
- assert val != EMPTY;
- items[idx] := val;
- status[idx] := IN_Q;
- return true; }|;
-
-procedure {:yields}{:layer 0,3} CAS_H_take({:linear "tid"} tid:Tid, prevVal :int, val: int)
- returns (result: bool);
-ensures {:atomic} |{ A: assert tid == ptTid;
- goto B, C;
- B: assume H == prevVal;
- take_in_cs := false;
- status[H] := NOT_IN_Q;
- H := H+1;
- result := true;
- return true;
- C: assume H != prevVal; result := false;
- take_in_cs := false;
- return true;
-}|;
-
-procedure {:yields}{:layer 0,3} CAS_H_steal({:linear "tid"} tid:Tid, prevVal :int, val: int)
- returns (result: bool);
-ensures {:atomic} |{ A: assert stealerTid(tid);
- goto B, C;
- B: assume H == prevVal;
- status[H] := NOT_IN_Q;
- H := H+1;
- result := true;
- steal_in_cs[tid] := false;
- return true;
- C: assume H != prevVal;
- result := false;
- steal_in_cs[tid] := false;
- return true;
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type Tid;
+const nil: Tid;
+
+function {:builtin "MapConst"} MapConstBool(bool) : [Tid]bool;
+function {:inline} {:linear "tid"} TidCollector(x: Tid) : [Tid]bool
+{
+ MapConstBool(false)[x := true]
+}
+
+
+
+var {:layer 0,3} H: int;
+var {:layer 0,3} T: int;
+var {:layer 0,3} items: [int]int;
+var {:layer 0} status: [int]bool;
+var {:layer 0,3} take_in_cs: bool;
+var {:layer 0,3} put_in_cs: bool;
+var {:layer 0,3} steal_in_cs: [Tid]bool;
+var {:layer 0,3} h_ss: [Tid]int;
+var {:layer 0,3} t_ss: [Tid]int;
+
+const IN_Q: bool;
+const NOT_IN_Q: bool;
+axiom IN_Q == true;
+axiom NOT_IN_Q == false;
+
+const unique EMPTY: int;
+const unique NIL: Tid;
+const unique ptTid: Tid;
+axiom ptTid != NIL;
+
+function {:inline} stealerTid(tid: Tid):(bool) { tid != NIL && tid != ptTid }
+
+function {:inline} ideasInv(put_in_cs:bool,
+ items:[int]int,
+ status: [int]bool,
+ H:int, T:int,
+ take_in_cs:bool,
+ steal_in_cs:[Tid]bool,
+ h_ss:[Tid]int,
+ t_ss:[Tid]int
+ ):(bool)
+{
+ (
+ ( (take_in_cs) && h_ss[ptTid] < t_ss[ptTid] ==> (t_ss[ptTid] == T && H <= T &&
+ items[T] != EMPTY && status[T] == IN_Q) ) &&
+ (put_in_cs ==> !take_in_cs) && (take_in_cs ==> !put_in_cs) &&
+ (( (take_in_cs) && H != h_ss[ptTid]) ==> H > h_ss[ptTid]) &&
+ (forall td:Tid :: (stealerTid(td) && steal_in_cs[td] && H == h_ss[td] && H < t_ss[td]) ==> (items[H] != EMPTY && status[H] == IN_Q)) &&
+ (forall td:Tid :: (stealerTid(td) && steal_in_cs[td] && H != h_ss[td]) ==> H > h_ss[td])
+ )
+}
+
+function {:inline} queueInv(steal_in_cs:[Tid]bool,
+ put_in_cs:bool,
+ take_in_cs:bool,
+ items:[int]int, status: [int]bool, _H:int, _T:int):(bool)
+{
+ ( (forall i:int :: (_H <= i && i <= _T) ==> (status[i] == IN_Q && items[i] != EMPTY)) )
+}
+
+function {:inline} emptyInv(put_in_cs:bool, take_in_cs:bool, items:[int]int, status:[int]bool, T:int):(bool)
+{
+ (forall i:int :: (i>=T && !put_in_cs && !take_in_cs) ==> status[i] == NOT_IN_Q && items[i] == EMPTY)
+}
+
+function {:inline} putInv(items:[int]int, status: [int]bool, H:int, T:int):(bool)
+{
+ (forall i:int :: (H <= i && i < T) ==> (status[i] == IN_Q && items[i] != EMPTY))
+}
+
+function {:inline} takeInv(items:[int]int, status: [int]bool, H:int, T:int, t:int, h:int):(bool)
+{
+ (forall i:int :: (h <= i && i <= t) ==> (status[i] == IN_Q &&
+ items[i] != EMPTY) &&
+ t == T
+ )
+}
+
+procedure {:yields} {:layer 3} put({:linear "tid"} tid:Tid, task: int)
+requires {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && task != EMPTY && !take_in_cs && !put_in_cs;
+requires {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+requires {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
+ensures {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ensures {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ensures {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
+ensures {:atomic} |{ var i: int; A: assume status[i] == NOT_IN_Q; status[i] := IN_Q; return true; }|;
+{
+ var t: int;
+ var {:layer 3} oldH:int;
+ var {:layer 3} oldT:int;
+ var {:layer 3} oldStatusT:bool;
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ assert {:layer 3} {:expand} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H && oldT == T;
+ assert {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
+
+ call t := readT_put(tid);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && put_in_cs;
+ assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} tid == ptTid && t == T;
+ assert {:layer 3} oldH <= H && oldT == T;
+ assert {:layer 3} (forall i:int :: i>=T ==> status[i] == NOT_IN_Q && items[i] == EMPTY);
+
+ call writeItems_put(tid,t, task);
+
+ call oldH, oldT := GhostRead();
+ call oldStatusT := GhostReadStatus();
+ yield;
+ assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && t == T && tid == ptTid && !take_in_cs && put_in_cs;
+ assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} items[t] == task;
+ assert {:layer 3} oldH <= H && oldT == T;
+ assert {:layer 3} (forall i:int :: i>T ==> status[i] == NOT_IN_Q && items[i] == EMPTY);
+
+
+ call writeT_put(tid, t+1);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} T == t + 1;
+ assert {:layer 3} oldH <= H && oldT == T;
+ assert {:layer 3} {:expand} emptyInv(put_in_cs, take_in_cs, items,status,T);
+}
+
+procedure {:yields} {:layer 3} take({:linear "tid"} tid:Tid) returns (task: int, taskstatus: bool)
+requires {:layer 3} {:expand} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+requires {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ensures {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs && (task != EMPTY ==> taskstatus == IN_Q);
+ensures {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ensures {:atomic} |{ var i: int; A: goto B,C; B: assume status[i] == IN_Q; status[i] := NOT_IN_Q; return true; C: return true;}|;
+{
+ var h, t: int;
+ var chk: bool;
+ var {:layer 3} oldH:int;
+ var {:layer 3} oldT:int;
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H && oldT == T;
+
+ LOOP_ENTRY_1:
+
+ while(true)
+ invariant {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ invariant {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ {
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H && oldT == T;
+
+ call t := readT_take_init(tid);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} t == T;
+ assert {:layer 3} items[t-1] == EMPTY ==> H > t-1;
+ assert {:layer 3} oldH <= H && oldT == T;
+
+ t := t-1;
+ call writeT_take(tid, t);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && !take_in_cs && !put_in_cs && t_ss[tid] == t;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} t == T;
+ assert {:layer 3} items[t] == EMPTY ==> H > t;
+ assert {:layer 3} oldH <= H && oldT == T;
+
+ call h := readH_take(tid);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && take_in_cs && !put_in_cs && h_ss[tid] == h && t_ss[tid] == t;
+ assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} t == T;
+ assert {:layer 3} h <= H;
+ assert {:layer 3} items[t] == EMPTY ==> H > t;
+ assert {:layer 3} oldH <= H;
+ assert {:layer 3} oldT == T;
+ assert {:layer 3} h <= H;
+ assert {:layer 3} oldH == h;
+
+ if(t<h) {
+
+ call writeT_take_abort(tid, h);
+ task := EMPTY;
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} h <= H;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && !put_in_cs;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} h == T;
+ assert {:layer 3} oldH <= H && oldT == T;
+ return;
+ }
+
+ call task, taskstatus := readItems(tid, t);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} H >= h;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && take_in_cs && h_ss[tid] == h && t_ss[tid] == t;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} t == T && task == items[T];
+ assert {:layer 3} T > H ==> items[T] != EMPTY;
+ assert {:layer 3} oldH <= H && oldT == T && !put_in_cs && take_in_cs;
+
+ if(t>h) {
+ call takeExitCS(tid);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && !take_in_cs && h_ss[tid] == h && t_ss[tid] == t;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} t == T && task == items[t] && task != EMPTY && taskstatus == IN_Q;
+ assert {:layer 3} oldH <= H && oldT == T && !put_in_cs && !take_in_cs;
+ return;
+ }
+ call writeT_take_eq(tid, h+1);
+ call oldH, oldT := GhostRead();
+
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} T == h + 1;
+ assert {:layer 3} oldH <= H;
+ assert {:layer 3} oldT == T;
+ assert {:layer 3} task == items[t];
+ assert {:layer 3} !put_in_cs;
+
+ call chk := CAS_H_take(tid, h,h+1);
+
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} chk ==> (h+1 == oldH && h_ss[tid] == oldH -1 && task != EMPTY);
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} h+1 == T;
+ assert {:layer 3} task == items[t];
+ assert {:layer 3} !take_in_cs;
+ assert {:layer 3} !put_in_cs;
+ assert {:layer 3} oldH <= H && oldT == T;
+
+ if(!chk) {
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} h+1 == T && task == items[t] && !take_in_cs && !put_in_cs;
+ assert {:layer 3} oldH <= H && oldT == T;
+
+ goto LOOP_ENTRY_1;
+ }
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && tid == ptTid && h_ss[tid] == h && t_ss[tid] == t;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} h+1 == T && task == items[t] && !take_in_cs && !put_in_cs;
+ assert {:layer 3} oldH <= H && oldT == T && task != EMPTY && taskstatus == IN_Q;
+
+ return;
+ }
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T) && tid == ptTid && !put_in_cs;
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H && oldT == T;
+
+}
+
+
+procedure {:yields}{:layer 3} steal({:linear "tid"} tid:Tid) returns (task: int, taskstatus: bool)
+requires {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) && stealerTid(tid) &&
+ !steal_in_cs[tid];
+requires {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ensures {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1) &&
+ !steal_in_cs[tid] && (task != EMPTY ==> taskstatus == IN_Q);
+ensures {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ensures {:atomic} |{ var i: int; A: goto B,C; B: assume status[i] == IN_Q; status[i] := NOT_IN_Q; return true; C: return true;}|;
+{
+ var h, t: int;
+ var chk: bool;
+ var {:layer 3} oldH:int;
+ var {:layer 3} oldT:int;
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} stealerTid(tid);
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H;
+ assert {:layer 3} !steal_in_cs[tid];
+
+ LOOP_ENTRY_2:
+ while(true)
+ invariant {:layer 3} stealerTid(tid);
+ invariant {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ invariant {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ invariant {:layer 3} !steal_in_cs[tid];
+ {
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} stealerTid(tid);
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H;
+ assert {:layer 3} !steal_in_cs[tid];
+
+ call h := readH_steal(tid);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} H >= h;
+ assert {:layer 3} !steal_in_cs[tid];
+ assert {:layer 3} h_ss[tid] == h;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H;
+
+ call t := readT_steal(tid);
+
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} steal_in_cs[tid];
+ assert {:layer 3} stealerTid(tid) && H >= h && steal_in_cs[tid] && h_ss[tid] == h;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H && t == t_ss[tid];
+ assert {:layer 3} (h < t && take_in_cs && (h_ss[ptTid] < t_ss[ptTid]) && h == H) ==> (H < T);
+ assert {:layer 3} H >= h;
+
+ if( h>= t) {
+
+ task := EMPTY;
+ call stealExitCS(tid);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} !steal_in_cs[tid];
+ assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid] && h_ss[tid] == h;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H;
+ return;
+ }
+
+ call task, taskstatus := readItems(tid, h);
+
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} stealerTid(tid) && steal_in_cs[tid] && h_ss[tid] == h;
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H;
+ assert {:layer 3} oldH == H && H == h && h_ss[tid] == h ==> task != EMPTY;
+ assert {:layer 3} (take_in_cs && (h_ss[ptTid] < t_ss[ptTid]) && h == H) ==> (H < T);
+ assert {:layer 3} h == H ==> status[H] == IN_Q;
+
+ call chk := CAS_H_steal(tid, h,h+1);
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} h_ss[tid] == h;
+ assert {:layer 3} chk ==> (h+1 == oldH && h_ss[tid] == h && task != EMPTY && taskstatus == IN_Q);
+ assert {:layer 3} (take_in_cs && (h_ss[ptTid] < t_ss[ptTid]) && chk) ==> ((oldH-1) < T);
+ assert {:layer 3} {:expand} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid];
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} oldH <= H;
+
+ if(!chk) {
+ goto LOOP_ENTRY_2;
+ }
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid];
+ assert {:layer 3} queueInv(steal_in_cs,put_in_cs,take_in_cs,items, status, H, T-1);
+ assert {:layer 3} ideasInv(put_in_cs,items, status, H, T, take_in_cs, steal_in_cs, h_ss, t_ss);
+ assert {:layer 3} oldH <= H && task != EMPTY;
+ return;
+ }
+
+ call oldH, oldT := GhostRead();
+ yield;
+ assert {:layer 3} chk && task != EMPTY;
+ assert {:layer 3} stealerTid(tid) && !steal_in_cs[tid];
+ assert {:layer 3} oldH <= H;
+}
+
+procedure {:layer 3} {:inline 1} GhostRead() returns (oldH: int, oldT: int)
+{
+ oldH := H;
+ oldT := T;
+}
+
+procedure {:layer 3} {:inline 1} GhostReadStatus() returns (oldStatus: bool)
+{
+ oldStatus := status[T];
+}
+
+procedure {:yields}{:layer 0,3} readH_take({:linear "tid"} tid:Tid) returns (y: int);
+ensures {:atomic} |{A: assert tid == ptTid;
+ y := H;
+ take_in_cs := true;
+ h_ss[tid] := H;
+ return true;}|;
+
+procedure {:yields}{:layer 0,3} readH_steal({:linear "tid"} tid:Tid) returns (y: int);
+ensures {:atomic} |{A: assert stealerTid(tid);
+ assert !steal_in_cs[tid];
+ y := H;
+ h_ss[tid] := H;
+ return true;}|;
+
+procedure {:yields}{:layer 0,3} readT_take_init({:linear "tid"} tid:Tid) returns (y: int);
+ensures {:atomic} |{A: assert tid != NIL; assert tid == ptTid; y := T; return true;}|;
+
+procedure {:yields}{:layer 0,3} readT_put({:linear "tid"} tid:Tid) returns (y: int);
+ensures {:atomic} |{A: assert tid != NIL;
+ assert tid == ptTid;
+ put_in_cs := true;
+ y := T;
+ return true;}|;
+
+procedure {:yields}{:layer 0,3} readT_steal({:linear "tid"} tid:Tid) returns (y: int);
+ensures {:atomic} |{A: assert tid != NIL;
+ assert stealerTid(tid);
+ assert !steal_in_cs[tid];
+ y := T;
+ t_ss[tid] := T;
+ steal_in_cs[tid] := true;
+ return true;}|;
+
+procedure {:yields}{:layer 0,3} readItems({:linear "tid"} tid:Tid, ind: int) returns (y: int, b:bool);
+ensures {:atomic} |{A: y := items[ind]; b := status[ind]; return true; }|;
+
+procedure {:yields}{:layer 0,3} writeT_put({:linear "tid"} tid:Tid, val: int);
+ensures {:atomic} |{A: assert tid == ptTid;
+ T := T+1;
+ put_in_cs := false;
+ return true; }|;
+
+procedure {:yields}{:layer 0,3} writeT_take({:linear "tid"} tid:Tid, val: int);
+ensures {:atomic} |{A: assert tid == ptTid;
+ T := val;
+ t_ss[tid] := val;
+ return true; }|;
+
+procedure {:yields}{:layer 0,3} writeT_take_abort({:linear "tid"} tid:Tid, val: int);
+ensures {:atomic} |{A: assert tid == ptTid;
+ assert take_in_cs;
+ T := val;
+ take_in_cs := false;
+ return true; }|;
+
+procedure {:yields}{:layer 0,3} writeT_take_eq({:linear "tid"} tid:Tid, val: int);
+ensures {:atomic} |{A: assert tid == ptTid;
+ T := val;
+ return true; }|;
+
+procedure {:yields}{:layer 0,3} takeExitCS({:linear "tid"} tid:Tid);
+ensures {:atomic} |{A: assert tid == ptTid;
+ take_in_cs := false;
+ return true; }|;
+
+procedure {:yields}{:layer 0,3} stealExitCS({:linear "tid"} tid:Tid);
+ensures {:atomic} |{A: assert stealerTid(tid);
+ assert steal_in_cs[tid];
+ steal_in_cs[tid] := false;
+ return true; }|;
+
+
+procedure {:yields}{:layer 0,3} writeItems({:linear "tid"} tid:Tid, idx: int, val: int);
+ensures {:atomic} |{A: assert tid == ptTid;
+ assert val != EMPTY;
+ items[idx] := val;
+ status[idx] := IN_Q;
+ return true; }|;
+
+
+procedure {:yields}{:layer 0,3} writeItems_put({:linear "tid"} tid:Tid, idx: int, val: int);
+ensures {:atomic} |{A: assert tid == ptTid;
+ assert val != EMPTY;
+ items[idx] := val;
+ status[idx] := IN_Q;
+ return true; }|;
+
+procedure {:yields}{:layer 0,3} CAS_H_take({:linear "tid"} tid:Tid, prevVal :int, val: int)
+ returns (result: bool);
+ensures {:atomic} |{ A: assert tid == ptTid;
+ goto B, C;
+ B: assume H == prevVal;
+ take_in_cs := false;
+ status[H] := NOT_IN_Q;
+ H := H+1;
+ result := true;
+ return true;
+ C: assume H != prevVal; result := false;
+ take_in_cs := false;
+ return true;
+}|;
+
+procedure {:yields}{:layer 0,3} CAS_H_steal({:linear "tid"} tid:Tid, prevVal :int, val: int)
+ returns (result: bool);
+ensures {:atomic} |{ A: assert stealerTid(tid);
+ goto B, C;
+ B: assume H == prevVal;
+ status[H] := NOT_IN_Q;
+ H := H+1;
+ result := true;
+ steal_in_cs[tid] := false;
+ return true;
+ C: assume H != prevVal;
+ result := false;
+ steal_in_cs[tid] := false;
+ return true;
}|; \ No newline at end of file
diff --git a/Test/civl/wsq.bpl.expect b/Test/civl/wsq.bpl.expect
new file mode 100644
index 00000000..9823d44a
--- /dev/null
+++ b/Test/civl/wsq.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 6 verified, 0 errors
diff --git a/Test/codeexpr/CodeExpr0.bpl b/Test/codeexpr/CodeExpr0.bpl
index 97dd60e7..e6bf584d 100644
--- a/Test/codeexpr/CodeExpr0.bpl
+++ b/Test/codeexpr/CodeExpr0.bpl
@@ -1,55 +1,55 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P()
-{
- assert |{ A: return true; }|;
-}
-
-// ------------
-
-procedure Q()
-{
- assert |{ var x: bool; A: x := true; return x; }|;
-}
-
-procedure R()
-{
- assert |{ var x: bool; A: x := false; return x; }|; // error
-}
-
-procedure S()
-{
- assert |{ var x: bool; A: return x; }|; // error
-}
-
-// ------------
-
-procedure T(x: int, y: int)
- requires |{ var z: bool;
- Start: goto A;
- A: z := false; goto B, C;
- B: assume 0 <= x; goto D;
- C: assume x < 0; goto R;
- D: goto E, F;
- E: assume 0 <= y; z := true; goto R;
- F: assume y < 0; goto R;
- R: return z;
- }|;
-{
- assert 0 <= x + y;
-}
-
-procedure U(x: int, y: int)
- requires |{ var z: bool;
- Start: goto A;
- A: z := false; goto B, C;
- B: assume 0 <= x; goto D;
- C: assume x < 0; goto R;
- D: goto E, F;
- E: assume 0 <= y; z := true; goto R;
- F: assume y < 0; goto R;
- R: return z;
- }|;
-{
- assert x <= y; // error
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P()
+{
+ assert |{ A: return true; }|;
+}
+
+// ------------
+
+procedure Q()
+{
+ assert |{ var x: bool; A: x := true; return x; }|;
+}
+
+procedure R()
+{
+ assert |{ var x: bool; A: x := false; return x; }|; // error
+}
+
+procedure S()
+{
+ assert |{ var x: bool; A: return x; }|; // error
+}
+
+// ------------
+
+procedure T(x: int, y: int)
+ requires |{ var z: bool;
+ Start: goto A;
+ A: z := false; goto B, C;
+ B: assume 0 <= x; goto D;
+ C: assume x < 0; goto R;
+ D: goto E, F;
+ E: assume 0 <= y; z := true; goto R;
+ F: assume y < 0; goto R;
+ R: return z;
+ }|;
+{
+ assert 0 <= x + y;
+}
+
+procedure U(x: int, y: int)
+ requires |{ var z: bool;
+ Start: goto A;
+ A: z := false; goto B, C;
+ B: assume 0 <= x; goto D;
+ C: assume x < 0; goto R;
+ D: goto E, F;
+ E: assume 0 <= y; z := true; goto R;
+ F: assume y < 0; goto R;
+ R: return z;
+ }|;
+{
+ assert x <= y; // error
+}
diff --git a/Test/codeexpr/CodeExpr1.bpl b/Test/codeexpr/CodeExpr1.bpl
index 4e8faf3f..98e97cdb 100644
--- a/Test/codeexpr/CodeExpr1.bpl
+++ b/Test/codeexpr/CodeExpr1.bpl
@@ -1,69 +1,69 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// ------ the good ------
-
-procedure F(x: int, y: int) returns (z: bool)
- requires x < y;
- ensures z == (x < 3);
-{
- start:
- z := |{ var a : bool, b : bool; B: a := x < 3; return a; }|;
- return;
-}
-
-function r(int): bool;
-
-procedure F'(x: int, y: int) returns (z: bool)
-{
- start:
- assume x < y;
- assume (forall t: int :: x < 3 + t ==> r(t));
- assert r(y);
-}
-
-procedure F''(x: int, y: int) returns (z: bool)
-{
- start:
- assume x < y;
- assume (forall t: int :: |{ var a: bool;
- Start:
- a := x < 3 + t;
- goto X, Y;
- X: assume a; return r(t);
- Y: assume !a; return true;
- }|);
- assert r(y);
-}
-
-// ------ the bad ------
-
-procedure G(x: int, y: int) returns (z: bool)
- requires x < y;
- ensures z == (x < 3);
-{
- start:
- z := |{ var a : bool, b : bool; B: a := x < 3; return !a; }|;
- return; // error: postcondition violation
-}
-
-procedure G'(x: int, y: int) returns (z: bool)
-{
- start:
- assume x < y;
- assume (forall t: int :: x + 3 < t ==> r(t));
- assert r(y); // error
-}
-
-procedure G''(x: int, y: int) returns (z: bool)
-{
- start:
- assume x < y;
- assume (forall t: int :: |{ var a: bool;
- Start:
- a := x + 3 < t;
- goto X, Y;
- X: assume a; return r(t);
- Y: assume !a; return true;
- }|);
- assert r(y); // error
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// ------ the good ------
+
+procedure F(x: int, y: int) returns (z: bool)
+ requires x < y;
+ ensures z == (x < 3);
+{
+ start:
+ z := |{ var a : bool, b : bool; B: a := x < 3; return a; }|;
+ return;
+}
+
+function r(int): bool;
+
+procedure F'(x: int, y: int) returns (z: bool)
+{
+ start:
+ assume x < y;
+ assume (forall t: int :: x < 3 + t ==> r(t));
+ assert r(y);
+}
+
+procedure F''(x: int, y: int) returns (z: bool)
+{
+ start:
+ assume x < y;
+ assume (forall t: int :: |{ var a: bool;
+ Start:
+ a := x < 3 + t;
+ goto X, Y;
+ X: assume a; return r(t);
+ Y: assume !a; return true;
+ }|);
+ assert r(y);
+}
+
+// ------ the bad ------
+
+procedure G(x: int, y: int) returns (z: bool)
+ requires x < y;
+ ensures z == (x < 3);
+{
+ start:
+ z := |{ var a : bool, b : bool; B: a := x < 3; return !a; }|;
+ return; // error: postcondition violation
+}
+
+procedure G'(x: int, y: int) returns (z: bool)
+{
+ start:
+ assume x < y;
+ assume (forall t: int :: x + 3 < t ==> r(t));
+ assert r(y); // error
+}
+
+procedure G''(x: int, y: int) returns (z: bool)
+{
+ start:
+ assume x < y;
+ assume (forall t: int :: |{ var a: bool;
+ Start:
+ a := x + 3 < t;
+ goto X, Y;
+ X: assume a; return r(t);
+ Y: assume !a; return true;
+ }|);
+ assert r(y); // error
+}
diff --git a/Test/codeexpr/CodeExpr2.bpl b/Test/codeexpr/CodeExpr2.bpl
index 9d8beed7..0edaa8f4 100644
--- a/Test/codeexpr/CodeExpr2.bpl
+++ b/Test/codeexpr/CodeExpr2.bpl
@@ -1,52 +1,52 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type T;
-const zero: T;
-
-function IsProperIndex(i: int, size: int): bool;
-
-procedure P(a: [int]T, n: int)
- requires (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
-{
- call Q(a, n);
-}
-
-procedure Q(a: [int]T, n: int)
- requires (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
-{
- call P(a, n);
-}
-
-procedure A(a: [int]T, n: int)
-{
- assert
- (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero)
- ==>
- (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
-}
-
-procedure B(a: [int]T, n: int)
-{
- assert
- (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|)
- ==>
- (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
-}
-
-procedure C(a: [int]T, n: int)
-{
- Start:
- assume (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
- goto Next;
- Next:
- assert (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
-}
-
-procedure D(a: [int]T, n: int)
-{
- Start:
- assume (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
- goto Next;
- Next:
- assert (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type T;
+const zero: T;
+
+function IsProperIndex(i: int, size: int): bool;
+
+procedure P(a: [int]T, n: int)
+ requires (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
+{
+ call Q(a, n);
+}
+
+procedure Q(a: [int]T, n: int)
+ requires (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
+{
+ call P(a, n);
+}
+
+procedure A(a: [int]T, n: int)
+{
+ assert
+ (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero)
+ ==>
+ (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
+}
+
+procedure B(a: [int]T, n: int)
+{
+ assert
+ (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|)
+ ==>
+ (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
+}
+
+procedure C(a: [int]T, n: int)
+{
+ Start:
+ assume (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
+ goto Next;
+ Next:
+ assert (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
+}
+
+procedure D(a: [int]T, n: int)
+{
+ Start:
+ assume (forall i : int :: IsProperIndex(i, n) ==> |{ B: return a[i] == zero; }|);
+ goto Next;
+ Next:
+ assert (forall i : int :: IsProperIndex(i, n) ==> a[i] == zero);
+}
diff --git a/Test/codeexpr/codeExprBug.bpl b/Test/codeexpr/codeExprBug.bpl
index 4eb86789..e1ae938c 100644
--- a/Test/codeexpr/codeExprBug.bpl
+++ b/Test/codeexpr/codeExprBug.bpl
@@ -1,15 +1,15 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure p() returns ($r: int);
- ensures |{ $bb0: return ($r == 1); }|;
-
-implementation p() returns ($x: int)
-{
- $x := 1;
- return;
-}
-
-procedure q()
- ensures |{ var $b: bool; $0: $b := true; goto $1; $1: return $b; }|;
-{
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure p() returns ($r: int);
+ ensures |{ $bb0: return ($r == 1); }|;
+
+implementation p() returns ($x: int)
+{
+ $x := 1;
+ return;
+}
+
+procedure q()
+ ensures |{ var $b: bool; $0: $b := true; goto $1; $1: return $b; }|;
+{
+}
diff --git a/Test/codeexpr/codeExprBug.bpl.expect b/Test/codeexpr/codeExprBug.bpl.expect
index 3de74d3e..41374b00 100644
--- a/Test/codeexpr/codeExprBug.bpl.expect
+++ b/Test/codeexpr/codeExprBug.bpl.expect
@@ -1,2 +1,2 @@
-
-Boogie program verifier finished with 2 verified, 0 errors
+
+Boogie program verifier finished with 2 verified, 0 errors
diff --git a/Test/commandline/multiple_procs_unusual_identifiers.bpl b/Test/commandline/multiple_procs_unusual_identifiers.bpl
new file mode 100644
index 00000000..a3a4a4c1
--- /dev/null
+++ b/Test/commandline/multiple_procs_unusual_identifiers.bpl
@@ -0,0 +1,75 @@
+// RUN: %boogie "-proc:*Bar*" "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 10 verified, 0 errors
+
+procedure foo()
+{
+ assert false;
+}
+
+procedure bar()
+{
+ assert false;
+}
+
+/* Start should be matched */
+
+procedure _Bar()
+{
+ assert true;
+}
+
+procedure .Bar()
+{
+ assert true;
+}
+
+procedure ..Bar..()
+{
+ assert true;
+}
+
+procedure $Bar()
+{
+ assert true;
+}
+
+procedure #Bar()
+{
+ assert true;
+}
+
+procedure 'Bar''()
+{
+ assert true;
+}
+
+procedure ``Bar``()
+{
+ assert true;
+}
+
+procedure ~Bar()
+{
+ assert true;
+}
+
+procedure Bar^^()
+{
+ assert true;
+}
+
+/* This is Boogie2 claims backslash is a valid identifier
+ but the parser rejects this.
+procedure Bar\\()
+{
+ assert true;
+}
+*/
+
+procedure ??Bar()
+{
+ assert true;
+}
+
+/* End should be matched */
diff --git a/Test/commandline/multiple_procs_verify_four_asterisk_wildcard.bpl b/Test/commandline/multiple_procs_verify_four_asterisk_wildcard.bpl
new file mode 100644
index 00000000..e0f8eef3
--- /dev/null
+++ b/Test/commandline/multiple_procs_verify_four_asterisk_wildcard.bpl
@@ -0,0 +1,28 @@
+// RUN: %boogie "-proc:*Bar" "-proc:*Foo" "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 4 verified, 0 errors
+
+procedure foo()
+{
+ assert false;
+}
+
+procedure helpfulFoo()
+{
+ assert true;
+}
+
+procedure Foo()
+{
+ assert true;
+}
+
+procedure translucentBar()
+{
+ assert true;
+}
+
+procedure opaqueBar()
+{
+ assert true;
+}
diff --git a/Test/commandline/multiple_procs_verify_one.bpl b/Test/commandline/multiple_procs_verify_one.bpl
new file mode 100644
index 00000000..5eaef4b1
--- /dev/null
+++ b/Test/commandline/multiple_procs_verify_one.bpl
@@ -0,0 +1,22 @@
+// RUN: %boogie -proc:foo "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 1 verified, 0 errors
+
+// Only this procedure should be verified, the others should be ignored
+procedure foo()
+{
+ assume true;
+}
+
+// An old version of Boogie just checked if the name passed to ``-proc:``
+// occurs somewhere in procedure name which would cause it to try and also
+// verify the procedures below.
+procedure foo2()
+{
+ assert false;
+}
+
+procedure function_foo()
+{
+ assert false;
+}
diff --git a/Test/commandline/multiple_procs_verify_one_request_twice.bpl b/Test/commandline/multiple_procs_verify_one_request_twice.bpl
new file mode 100644
index 00000000..7c6ee34e
--- /dev/null
+++ b/Test/commandline/multiple_procs_verify_one_request_twice.bpl
@@ -0,0 +1,20 @@
+// RUN: %boogie -proc:foo -proc:foo "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 1 verified, 0 errors
+
+// Although the command line requests two verify this procedure twice we should
+// only do try once.
+procedure foo()
+{
+ assume true;
+}
+
+procedure bar()
+{
+ assert false;
+}
+
+procedure baz()
+{
+ assert false;
+}
diff --git a/Test/commandline/multiple_procs_verify_two.bpl b/Test/commandline/multiple_procs_verify_two.bpl
new file mode 100644
index 00000000..b089bd5b
--- /dev/null
+++ b/Test/commandline/multiple_procs_verify_two.bpl
@@ -0,0 +1,17 @@
+// RUN: %boogie -proc:foo -proc:bar "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 2 verified, 0 errors
+procedure foo()
+{
+ assume true;
+}
+
+procedure bar()
+{
+ assert true;
+}
+
+procedure barz()
+{
+ assert false;
+}
diff --git a/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_begin.bpl b/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_begin.bpl
new file mode 100644
index 00000000..0f6571ba
--- /dev/null
+++ b/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_begin.bpl
@@ -0,0 +1,17 @@
+// RUN: %boogie "-proc:*Bar" "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 2 verified, 0 errors
+procedure foo()
+{
+ assert false;
+}
+
+procedure translucentBar()
+{
+ assert true;
+}
+
+procedure opaqueBar()
+{
+ assert true;
+}
diff --git a/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_end.bpl b/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_end.bpl
new file mode 100644
index 00000000..5cb102e2
--- /dev/null
+++ b/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_end.bpl
@@ -0,0 +1,17 @@
+// RUN: %boogie "-proc:bar*" "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 2 verified, 0 errors
+procedure foo()
+{
+ assert false;
+}
+
+procedure bar()
+{
+ assert true;
+}
+
+procedure barzzz()
+{
+ assert true;
+}
diff --git a/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_inbetween.bpl b/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_inbetween.bpl
new file mode 100644
index 00000000..7e19fe79
--- /dev/null
+++ b/Test/commandline/multiple_procs_verify_two_asterisk_wildcard_inbetween.bpl
@@ -0,0 +1,23 @@
+// RUN: %boogie "-proc:trivial*ZZZ" "%s" > "%t"
+// RUN: %OutputCheck --file-to-check "%t" "%s"
+// CHECK-L: Boogie program verifier finished with 2 verified, 0 errors
+procedure foo()
+{
+ assert false;
+}
+
+// should not be matched
+procedure trivialFooZZX()
+{
+ assert false;
+}
+
+procedure trivialFooZZZ()
+{
+ assert true;
+}
+
+procedure trivialBarZZZ()
+{
+ assert true;
+}
diff --git a/Test/datatypes/ex.bpl b/Test/datatypes/ex.bpl
index e7a0e694..753d8801 100644
--- a/Test/datatypes/ex.bpl
+++ b/Test/datatypes/ex.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie -typeEncoding:m "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type{:datatype} finite_map;
-function{:constructor} finite_map(dom:[int]bool, map:[int]int):finite_map;
-
-type{:datatype} partition;
-function{:constructor} partition(owners:[int]int, vars:[int]finite_map):partition;
-
-procedure P(arr:finite_map)
- requires dom#finite_map(arr)[0];
- ensures dom#finite_map(arr)[0];
-{
-}
+// RUN: %boogie -typeEncoding:m "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type{:datatype} finite_map;
+function{:constructor} finite_map(dom:[int]bool, map:[int]int):finite_map;
+
+type{:datatype} partition;
+function{:constructor} partition(owners:[int]int, vars:[int]finite_map):partition;
+
+procedure P(arr:finite_map)
+ requires dom#finite_map(arr)[0];
+ ensures dom#finite_map(arr)[0];
+{
+}
diff --git a/Test/datatypes/t1.bpl b/Test/datatypes/t1.bpl
index f0488639..876d879d 100644
--- a/Test/datatypes/t1.bpl
+++ b/Test/datatypes/t1.bpl
@@ -1,26 +1,26 @@
-// RUN: %boogie -typeEncoding:m "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type TT;
-type {:datatype} Tree;
-function {:constructor} leaf() : Tree;
-function {:constructor} node(value:TT, children:TreeList) : Tree;
-
-type {:datatype} TreeList;
-function {:constructor} cons(car:Tree, cdr:TreeList) : TreeList;
-function {:constructor} nil() : TreeList;
-
-procedure foo()
-{
- var a: Tree;
- var b: TreeList;
- var x: TT;
-
- assert value#node(node(x, nil())) == x;
- assert children#node(node(x, nil())) == nil();
-
- assert (cons(leaf(), nil()) != nil());
-
- assert is#nil(nil());
-
- assert is#node(leaf());
+// RUN: %boogie -typeEncoding:m "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type TT;
+type {:datatype} Tree;
+function {:constructor} leaf() : Tree;
+function {:constructor} node(value:TT, children:TreeList) : Tree;
+
+type {:datatype} TreeList;
+function {:constructor} cons(car:Tree, cdr:TreeList) : TreeList;
+function {:constructor} nil() : TreeList;
+
+procedure foo()
+{
+ var a: Tree;
+ var b: TreeList;
+ var x: TT;
+
+ assert value#node(node(x, nil())) == x;
+ assert children#node(node(x, nil())) == nil();
+
+ assert (cons(leaf(), nil()) != nil());
+
+ assert is#nil(nil());
+
+ assert is#node(leaf());
} \ No newline at end of file
diff --git a/Test/datatypes/t2.bpl b/Test/datatypes/t2.bpl
index 106b8d0c..257fff9c 100644
--- a/Test/datatypes/t2.bpl
+++ b/Test/datatypes/t2.bpl
@@ -1,26 +1,26 @@
-// RUN: %boogie -typeEncoding:m "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type TT;
-type {:datatype} Tree;
-function {:constructor} leaf`0() : Tree;
-function {:constructor} node`2(value:TT, children:TreeList) : Tree;
-
-type {:datatype} TreeList;
-function {:constructor} cons`2(car:Tree, cdr:TreeList) : TreeList;
-function {:constructor} nil`0() : TreeList;
-
-procedure foo()
-{
- var a: Tree;
- var b: TreeList;
- var x: TT;
-
- assert value#node`2(node`2(x, nil`0())) == x;
- assert children#node`2(node`2(x, nil`0())) == nil`0();
-
- assert (cons`2(leaf`0(), nil`0()) != nil`0());
-
- assert is#nil`0(nil`0());
-
- assert is#node`2(leaf`0());
+// RUN: %boogie -typeEncoding:m "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type TT;
+type {:datatype} Tree;
+function {:constructor} leaf`0() : Tree;
+function {:constructor} node`2(value:TT, children:TreeList) : Tree;
+
+type {:datatype} TreeList;
+function {:constructor} cons`2(car:Tree, cdr:TreeList) : TreeList;
+function {:constructor} nil`0() : TreeList;
+
+procedure foo()
+{
+ var a: Tree;
+ var b: TreeList;
+ var x: TT;
+
+ assert value#node`2(node`2(x, nil`0())) == x;
+ assert children#node`2(node`2(x, nil`0())) == nil`0();
+
+ assert (cons`2(leaf`0(), nil`0()) != nil`0());
+
+ assert is#nil`0(nil`0());
+
+ assert is#node`2(leaf`0());
} \ No newline at end of file
diff --git a/Test/doomed/doomdebug.bpl b/Test/doomed/doomdebug.bpl
index 0f45c13c..ef89e9dc 100644
--- a/Test/doomed/doomdebug.bpl
+++ b/Test/doomed/doomdebug.bpl
@@ -1,44 +1,44 @@
-procedure badtrace(x:int, y:int, z:int)
-{
- var xin : int;
- xin := x+z;
-
-
- if (y>5) {
- xin:=5;
- } else {
- assert xin != x;
- }
-}
-
-procedure baddiamond(x:int, y:int, z:int)
-{
- var xin : int;
- var yin : int;
- var zin : int;
- xin := x;
- yin := y;
- zin := z;
-
- if (y<5) {
- xin := xin -3;
- } else {
- zin := zin +10;
- xin := 0;
- }
-
- if (x<100) {
- yin := 3;
- } else {
- zin := 5;
- }
-
- if (z>5) {
- yin := yin - 2;
- xin := xin + 3;
- }
-
- zin:=zin+yin;
-
- assert xin!=x;
-}
+procedure badtrace(x:int, y:int, z:int)
+{
+ var xin : int;
+ xin := x+z;
+
+
+ if (y>5) {
+ xin:=5;
+ } else {
+ assert xin != x;
+ }
+}
+
+procedure baddiamond(x:int, y:int, z:int)
+{
+ var xin : int;
+ var yin : int;
+ var zin : int;
+ xin := x;
+ yin := y;
+ zin := z;
+
+ if (y<5) {
+ xin := xin -3;
+ } else {
+ zin := zin +10;
+ xin := 0;
+ }
+
+ if (x<100) {
+ yin := 3;
+ } else {
+ zin := 5;
+ }
+
+ if (z>5) {
+ yin := yin - 2;
+ xin := xin + 3;
+ }
+
+ zin:=zin+yin;
+
+ assert xin!=x;
+}
diff --git a/Test/doomed/doomed.bpl b/Test/doomed/doomed.bpl
index 9dea47b7..b211a481 100644
--- a/Test/doomed/doomed.bpl
+++ b/Test/doomed/doomed.bpl
@@ -1,87 +1,87 @@
-// RUN: %boogie -vc:doomed %s
-procedure evilrequires(x:int)
- requires x>0;
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
-procedure evilbranch(x:int)
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
- assume y!=2;
-
- assert x<0;
-}
-
-
-procedure evilloop(x:int)
-{
- var y : int;
- y:=x;
- while (y<100) {
- y := y -1;
- }
-}
-
-procedure evilnested(x:int)
-{
- var i : int;
- var j : int;
- i:=x-1;
- j:=1;
- while (i>=0) {
- while (j<=i) {
- assert j<x;
- j := j+1;
- }
- i := i - 1;
- }
-}
-
-
-procedure evilpath(x:int)
-{
- var y : int;
- y:=0;
- if (x>10) {
- y:=3;
- } else {
- assert y!=0;
- }
-}
-
-procedure evilcondition(x:int)
-{
- var y : int;
- y:=0;
- if (x!=0) {
- y:=3;
- } else {
- assert x!=0;
- }
-}
-
-procedure evilensures(x:int) returns ($result: int)
- ensures $result>0;
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- $result:=-1;
- }
-}
+// RUN: %boogie -vc:doomed %s
+procedure evilrequires(x:int)
+ requires x>0;
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
+procedure evilbranch(x:int)
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+ assume y!=2;
+
+ assert x<0;
+}
+
+
+procedure evilloop(x:int)
+{
+ var y : int;
+ y:=x;
+ while (y<100) {
+ y := y -1;
+ }
+}
+
+procedure evilnested(x:int)
+{
+ var i : int;
+ var j : int;
+ i:=x-1;
+ j:=1;
+ while (i>=0) {
+ while (j<=i) {
+ assert j<x;
+ j := j+1;
+ }
+ i := i - 1;
+ }
+}
+
+
+procedure evilpath(x:int)
+{
+ var y : int;
+ y:=0;
+ if (x>10) {
+ y:=3;
+ } else {
+ assert y!=0;
+ }
+}
+
+procedure evilcondition(x:int)
+{
+ var y : int;
+ y:=0;
+ if (x!=0) {
+ y:=3;
+ } else {
+ assert x!=0;
+ }
+}
+
+procedure evilensures(x:int) returns ($result: int)
+ ensures $result>0;
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ $result:=-1;
+ }
+}
diff --git a/Test/doomed/notdoomed.bpl b/Test/doomed/notdoomed.bpl
index 8d57db71..321cf1eb 100644
--- a/Test/doomed/notdoomed.bpl
+++ b/Test/doomed/notdoomed.bpl
@@ -1,58 +1,58 @@
-// RUN: %boogie -vc:doomed %s
-procedure a(x:int)
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
-procedure b(x:int)
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- assert false;
- }
-}
-
-
-procedure c(x:int)
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- assert {:PossiblyUnreachable} false;
- }
-}
-
-procedure useCE(x:int)
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
- if(x<7) {
- y := 5;
- } else {
- y := 6;
- }
-
-}
-
-
-
-
+// RUN: %boogie -vc:doomed %s
+procedure a(x:int)
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
+procedure b(x:int)
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ assert false;
+ }
+}
+
+
+procedure c(x:int)
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ assert {:PossiblyUnreachable} false;
+ }
+}
+
+procedure useCE(x:int)
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+ if(x<7) {
+ y := 5;
+ } else {
+ y := 6;
+ }
+
+}
+
+
+
+
diff --git a/Test/doomed/runtest.bat b/Test/doomed/runtest.bat
index 9dda44cf..8c9364fb 100644
--- a/Test/doomed/runtest.bat
+++ b/Test/doomed/runtest.bat
@@ -1,16 +1,16 @@
-@echo off
-setlocal
-
-set BOOGIEDIR=..\..\Binaries
-set BGEXE=%BOOGIEDIR%\Boogie.exe
-
-for %%f in (doomed.bpl) do (
- echo -------------------- %%f --------------------
- %BGEXE% /vc:doomed %* %%f
-)
-
-for %%f in (notdoomed.bpl) do (
- echo -------------------- %%f --------------------
- %BGEXE% /vc:doomed %* %%f
-)
-
+@echo off
+setlocal
+
+set BOOGIEDIR=..\..\Binaries
+set BGEXE=%BOOGIEDIR%\Boogie.exe
+
+for %%f in (doomed.bpl) do (
+ echo -------------------- %%f --------------------
+ %BGEXE% /vc:doomed %* %%f
+)
+
+for %%f in (notdoomed.bpl) do (
+ echo -------------------- %%f --------------------
+ %BGEXE% /vc:doomed %* %%f
+)
+
diff --git a/Test/doomed/smoke0.bpl b/Test/doomed/smoke0.bpl
index db01233f..159244ab 100644
--- a/Test/doomed/smoke0.bpl
+++ b/Test/doomed/smoke0.bpl
@@ -1,79 +1,79 @@
-procedure a(x:int)
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
-procedure b(x:int)
- requires x>0;
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
-
-procedure c(x:int)
- requires x>0;
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- assert false;
- } else {
- y := 2;
- }
-}
-
-procedure d(x:int)
- requires x>0;
-{
- var y : int;
-
- if(x<0) {
- assert false;
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
-procedure doomed1(x:int)
-{
- var y : int;
- y := 0;
- if(x<0) {
- y := 1;
- } else {
- assert y!=0;
- }
-}
-
-
-procedure doomed2(x:int)
-{
- var y : int;
- y := 0;
- if(x!=0) {
- y := 1;
- } else {
- assert x!=0;
- }
-}
-
-
-
-
+procedure a(x:int)
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
+procedure b(x:int)
+ requires x>0;
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
+
+procedure c(x:int)
+ requires x>0;
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ assert false;
+ } else {
+ y := 2;
+ }
+}
+
+procedure d(x:int)
+ requires x>0;
+{
+ var y : int;
+
+ if(x<0) {
+ assert false;
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
+procedure doomed1(x:int)
+{
+ var y : int;
+ y := 0;
+ if(x<0) {
+ y := 1;
+ } else {
+ assert y!=0;
+ }
+}
+
+
+procedure doomed2(x:int)
+{
+ var y : int;
+ y := 0;
+ if(x!=0) {
+ y := 1;
+ } else {
+ assert x!=0;
+ }
+}
+
+
+
+
diff --git a/Test/extractloops/detLoopExtract.bpl b/Test/extractloops/detLoopExtract.bpl
index 7e9d0629..463cecf0 100644
--- a/Test/extractloops/detLoopExtract.bpl
+++ b/Test/extractloops/detLoopExtract.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 -deterministicExtractLoops -recursionBound:4 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 -deterministicExtractLoops -recursionBound:4 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
var g:int;
var h:int; //not modified
var k:int; //modified in a procedure call
diff --git a/Test/extractloops/detLoopExtract2.bpl b/Test/extractloops/detLoopExtract2.bpl
new file mode 100644
index 00000000..f2befc53
--- /dev/null
+++ b/Test/extractloops/detLoopExtract2.bpl
@@ -0,0 +1,27 @@
+// RUN: %boogie -nologo -nologo -stratifiedInline:1 -extractLoops -deterministicExtractLoops -recursionBound:6 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+//This example checks the bug fix in the loop extract for http://symdiff.codeplex.com/workitem/4
+procedure {:entrypoint} Main() returns(r:int)
+{
+ var i, j : int;
+ var Flag : bool;
+ var b : bool;
+ i := 0;
+ j := 0;
+ Flag := false;
+ while(i<3)
+ {
+ havoc b;
+ if (b || Flag) {
+ i := i + 1;
+ j := j + 1;
+ }
+ else {
+ Flag := true;
+ j := j + 1;
+ }
+ }
+ assume !(i == j || i == j - 1);
+ return;
+}
diff --git a/Test/extractloops/detLoopExtract2.bpl.expect b/Test/extractloops/detLoopExtract2.bpl.expect
new file mode 100644
index 00000000..37fad75c
--- /dev/null
+++ b/Test/extractloops/detLoopExtract2.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/extractloops/detLoopExtractNested.bpl b/Test/extractloops/detLoopExtractNested.bpl
new file mode 100644
index 00000000..65de20c1
--- /dev/null
+++ b/Test/extractloops/detLoopExtractNested.bpl
@@ -0,0 +1,23 @@
+// RUN: %boogie -nologo -stratifiedInline:1 -extractLoops -deterministicExtractLoops -recursionBound:100 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+//This example checks the bug fix in the loop extract for http://symdiff.codeplex.com/workitem/1
+
+var t: int;
+procedure {:entrypoint} NestedLoops()
+modifies t;
+//ensures t == 6;
+{
+ var i:int, j:int;
+ i, j, t := 0, 0, 0;
+ while(i < 2) {
+ j := 0;
+ while (j < 3) {
+ t := t + 1;
+ j := j + 1;
+ }
+ i := i + 1;
+ }
+ assume true; //would be provable (!true) wihtout the fix
+}
+
diff --git a/Test/extractloops/detLoopExtractNested.bpl.expect b/Test/extractloops/detLoopExtractNested.bpl.expect
new file mode 100644
index 00000000..f4932ede
--- /dev/null
+++ b/Test/extractloops/detLoopExtractNested.bpl.expect
@@ -0,0 +1,19 @@
+(0,0): Error BP5001: This assertion might not hold.
+Execution trace:
+ detLoopExtractNested.bpl(12,12): anon0
+ detLoopExtractNested.bpl(14,8): anon5_LoopBody
+ detLoopExtractNested.bpl(16,10): anon6_LoopBody
+ detLoopExtractNested.bpl(16,10): anon6_LoopBody
+ detLoopExtractNested.bpl(16,10): anon6_LoopBody
+ detLoopExtractNested.bpl(15,6): anon6_LoopDone
+ detLoopExtractNested.bpl(15,6): anon6_LoopDone
+ detLoopExtractNested.bpl(14,8): anon5_LoopBody
+ detLoopExtractNested.bpl(16,10): anon6_LoopBody
+ detLoopExtractNested.bpl(16,10): anon6_LoopBody
+ detLoopExtractNested.bpl(16,10): anon6_LoopBody
+ detLoopExtractNested.bpl(15,6): anon6_LoopDone
+ detLoopExtractNested.bpl(15,6): anon6_LoopDone
+ detLoopExtractNested.bpl(13,4): anon5_LoopDone
+ detLoopExtractNested.bpl(13,4): anon5_LoopDone
+
+Boogie program verifier finished with 0 verified, 1 error
diff --git a/Test/extractloops/t1.bpl b/Test/extractloops/t1.bpl
index a0ebb0b8..731c4e44 100644
--- a/Test/extractloops/t1.bpl
+++ b/Test/extractloops/t1.bpl
@@ -1,43 +1,43 @@
-// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int;
-
-
-
-procedure foo()
-{
- var t: int;
- t := 0;
-}
-
-procedure {:entrypoint} A()
-modifies g;
-{
- var x: int;
- var y: int;
-
- anon0:
- assume g == 0;
- x := 4;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- call foo();
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume g < x;
- g := g + 1;
- x := x - 1;
- goto anon3_LoopHead;
-
- anon3_LoopDone:
- assume g >= x;
- goto anon2;
-
- anon2:
- assume x != 1;
- return;
-}
-
-
+// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int;
+
+
+
+procedure foo()
+{
+ var t: int;
+ t := 0;
+}
+
+procedure {:entrypoint} A()
+modifies g;
+{
+ var x: int;
+ var y: int;
+
+ anon0:
+ assume g == 0;
+ x := 4;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ call foo();
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume g < x;
+ g := g + 1;
+ x := x - 1;
+ goto anon3_LoopHead;
+
+ anon3_LoopDone:
+ assume g >= x;
+ goto anon2;
+
+ anon2:
+ assume x != 1;
+ return;
+}
+
+
diff --git a/Test/extractloops/t2.bpl b/Test/extractloops/t2.bpl
index d62733f7..39d65292 100644
--- a/Test/extractloops/t2.bpl
+++ b/Test/extractloops/t2.bpl
@@ -1,54 +1,54 @@
-// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int;
-
-
-procedure foo()
-{
- var t: int;
- t := 0;
-}
-
-procedure {:entrypoint} A()
-modifies g;
-{
- var x: int;
- var y: int;
-
- anon0:
- assume g == 0;
- x := 4;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- call foo();
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume g < x;
- g := g + 1;
- x := x - 1;
- y := 0;
- goto lab1_LoopHead;
-
- lab1_LoopHead:
- goto lab1_LoopBody, lab1_LoopDone;
-
- lab1_LoopBody:
- assume y < 2;
- y := y + 1;
- goto lab1_LoopHead;
-
- lab1_LoopDone:
- assume y >= 2;
- goto anon3_LoopHead;
-
- anon3_LoopDone:
- assume g >= x;
- goto anon2;
-
- anon2:
- return;
-}
-
-
+// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int;
+
+
+procedure foo()
+{
+ var t: int;
+ t := 0;
+}
+
+procedure {:entrypoint} A()
+modifies g;
+{
+ var x: int;
+ var y: int;
+
+ anon0:
+ assume g == 0;
+ x := 4;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ call foo();
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume g < x;
+ g := g + 1;
+ x := x - 1;
+ y := 0;
+ goto lab1_LoopHead;
+
+ lab1_LoopHead:
+ goto lab1_LoopBody, lab1_LoopDone;
+
+ lab1_LoopBody:
+ assume y < 2;
+ y := y + 1;
+ goto lab1_LoopHead;
+
+ lab1_LoopDone:
+ assume y >= 2;
+ goto anon3_LoopHead;
+
+ anon3_LoopDone:
+ assume g >= x;
+ goto anon2;
+
+ anon2:
+ return;
+}
+
+
diff --git a/Test/extractloops/t3.bpl b/Test/extractloops/t3.bpl
index 023a9adb..9e7720ec 100644
--- a/Test/extractloops/t3.bpl
+++ b/Test/extractloops/t3.bpl
@@ -1,43 +1,43 @@
-// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 -recursionBound:2 "%s" > "%t"
-// RUN: %diff "%s.rb2.expect" "%t"
-// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 -recursionBound:4 "%s" > "%t"
-// RUN: %diff "%s.rb4.expect" "%t"
-var g: int;
-
-procedure foo()
-{
- var t: int;
- t := 0;
-}
-
-procedure {:entrypoint} A()
-modifies g;
-{
- var x: int;
- var y: int;
-
- anon0:
- assume g == 0;
- x := 4;
- goto anon3_LoopHead, anon3_LoopBody;
-
- anon3_LoopHead:
- call foo();
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume g < x;
- g := g + 1;
- x := x - 1;
- goto anon3_LoopHead;
-
- anon3_LoopDone:
- assume g >= x;
- goto anon2;
-
- anon2:
- assume x != 1;
- return;
-}
-
-
+// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 -recursionBound:2 "%s" > "%t"
+// RUN: %diff "%s.rb2.expect" "%t"
+// RUN: %boogie -stratifiedInline:1 -extractLoops -removeEmptyBlocks:0 -coalesceBlocks:0 -recursionBound:4 "%s" > "%t"
+// RUN: %diff "%s.rb4.expect" "%t"
+var g: int;
+
+procedure foo()
+{
+ var t: int;
+ t := 0;
+}
+
+procedure {:entrypoint} A()
+modifies g;
+{
+ var x: int;
+ var y: int;
+
+ anon0:
+ assume g == 0;
+ x := 4;
+ goto anon3_LoopHead, anon3_LoopBody;
+
+ anon3_LoopHead:
+ call foo();
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume g < x;
+ g := g + 1;
+ x := x - 1;
+ goto anon3_LoopHead;
+
+ anon3_LoopDone:
+ assume g >= x;
+ goto anon2;
+
+ anon2:
+ assume x != 1;
+ return;
+}
+
+
diff --git a/Test/forro/prog0.forro b/Test/forro/prog0.forro
index cf06e1f9..07966e9d 100644
--- a/Test/forro/prog0.forro
+++ b/Test/forro/prog0.forro
@@ -1,39 +1,39 @@
-procedure a, b, c := P(x, y, z)
- requires 10
- ensures 20
-do
- if 30 then else end;
- if 31 then else end;
- while x < z
- invariant x <= z
- invariant b.valid and 1
- do
- k := x + 1;
- end;
- (x+5).head := c.tail;
- a := new (17, 18);
- assert a != null;
- m := k + a + null;
- c := m;
- call Q(x, y, y);
- if x then
- call a, c, b := P(a, b, c);
- else
- call R();
- end;
-end;
-
-
-procedure Q(x, y, z)
- requires 10
- ensures 20
-do
- if 40 then else end;
-end;
-
-
-procedure R()
- requires 10
- ensures 20
-do
-end;
+procedure a, b, c := P(x, y, z)
+ requires 10
+ ensures 20
+do
+ if 30 then else end;
+ if 31 then else end;
+ while x < z
+ invariant x <= z
+ invariant b.valid and 1
+ do
+ k := x + 1;
+ end;
+ (x+5).head := c.tail;
+ a := new (17, 18);
+ assert a != null;
+ m := k + a + null;
+ c := m;
+ call Q(x, y, y);
+ if x then
+ call a, c, b := P(a, b, c);
+ else
+ call R();
+ end;
+end;
+
+
+procedure Q(x, y, z)
+ requires 10
+ ensures 20
+do
+ if 40 then else end;
+end;
+
+
+procedure R()
+ requires 10
+ ensures 20
+do
+end;
diff --git a/Test/generalizedarray/Maps.bpl b/Test/generalizedarray/Maps.bpl
index 24521194..89a6403a 100644
--- a/Test/generalizedarray/Maps.bpl
+++ b/Test/generalizedarray/Maps.bpl
@@ -1,61 +1,61 @@
-// RUN: %boogie -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-
-function {:builtin "MapAdd"} mapadd([X]int, [X]int) : [X]int;
-function {:builtin "MapSub"} mapsub([X]int, [X]int) : [X]int;
-function {:builtin "MapMul"} mapmul([X]int, [X]int) : [X]int;
-function {:builtin "MapDiv"} mapdiv([X]int, [X]int) : [X]int;
-function {:builtin "MapMod"} mapmod([X]int, [X]int) : [X]int;
-function {:builtin "MapConst"} mapconstint(int) : [X]int;
-function {:builtin "MapConst"} mapconstbool(bool) : [X]bool;
-function {:builtin "MapAnd"} mapand([X]bool, [X]bool) : [X]bool;
-function {:builtin "MapOr"} mapor([X]bool, [X]bool) : [X]bool;
-function {:builtin "MapNot"} mapnot([X]bool) : [X]bool;
-function {:builtin "MapIte"} mapiteint([X]bool, [X]int, [X]int) : [X]int;
-function {:builtin "MapIte"} mapitebool([X]bool, [X]bool, [X]bool) : [X]bool;
-function {:builtin "MapLe"} maple([X]int, [X]int) : [X]bool;
-function {:builtin "MapLt"} maplt([X]int, [X]int) : [X]bool;
-function {:builtin "MapGe"} mapge([X]int, [X]int) : [X]bool;
-function {:builtin "MapGt"} mapgt([X]int, [X]int) : [X]bool;
-function {:builtin "MapEq"} mapeq([X]int, [X]int) : [X]bool;
-function {:builtin "MapIff"} mapiff([X]bool, [X]bool) : [X]bool;
-function {:builtin "MapImp"} mapimp([X]bool, [X]bool) : [X]bool;
-
-
-
-const FF: [X]bool;
-axiom FF == mapconstbool(false);
-
-const TT: [X]bool;
-axiom TT == mapconstbool(true);
-
-const MultisetEmpty: [X]int;
-axiom MultisetEmpty == mapconstint(0);
-
-function {:inline} MultisetSingleton(x: X) : [X]int
-{
- MultisetEmpty[x := 1]
-}
-
-function {:inline} MultisetPlus(a: [X]int, b: [X]int) : [X]int
-{
- mapadd(a, b)
-}
-
-function {:inline} MultisetMinus(a: [X]int, b: [X]int) : [X]int
-{
- mapiteint(mapgt(a, b), mapsub(a, b), mapconstint(0))
-}
-
-procedure foo() {
- var x: X;
-
- assert FF != TT;
- assert mapnot(FF) == TT;
-
- assert MultisetSingleton(x) != MultisetEmpty;
- assert MultisetPlus(MultisetEmpty, MultisetSingleton(x)) == MultisetSingleton(x);
- assert MultisetMinus(MultisetPlus(MultisetEmpty, MultisetSingleton(x)), MultisetSingleton(x)) == MultisetEmpty;
- assert MultisetMinus(MultisetEmpty, MultisetSingleton(x)) == MultisetEmpty;
+// RUN: %boogie -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+
+function {:builtin "MapAdd"} mapadd([X]int, [X]int) : [X]int;
+function {:builtin "MapSub"} mapsub([X]int, [X]int) : [X]int;
+function {:builtin "MapMul"} mapmul([X]int, [X]int) : [X]int;
+function {:builtin "MapDiv"} mapdiv([X]int, [X]int) : [X]int;
+function {:builtin "MapMod"} mapmod([X]int, [X]int) : [X]int;
+function {:builtin "MapConst"} mapconstint(int) : [X]int;
+function {:builtin "MapConst"} mapconstbool(bool) : [X]bool;
+function {:builtin "MapAnd"} mapand([X]bool, [X]bool) : [X]bool;
+function {:builtin "MapOr"} mapor([X]bool, [X]bool) : [X]bool;
+function {:builtin "MapNot"} mapnot([X]bool) : [X]bool;
+function {:builtin "MapIte"} mapiteint([X]bool, [X]int, [X]int) : [X]int;
+function {:builtin "MapIte"} mapitebool([X]bool, [X]bool, [X]bool) : [X]bool;
+function {:builtin "MapLe"} maple([X]int, [X]int) : [X]bool;
+function {:builtin "MapLt"} maplt([X]int, [X]int) : [X]bool;
+function {:builtin "MapGe"} mapge([X]int, [X]int) : [X]bool;
+function {:builtin "MapGt"} mapgt([X]int, [X]int) : [X]bool;
+function {:builtin "MapEq"} mapeq([X]int, [X]int) : [X]bool;
+function {:builtin "MapIff"} mapiff([X]bool, [X]bool) : [X]bool;
+function {:builtin "MapImp"} mapimp([X]bool, [X]bool) : [X]bool;
+
+
+
+const FF: [X]bool;
+axiom FF == mapconstbool(false);
+
+const TT: [X]bool;
+axiom TT == mapconstbool(true);
+
+const MultisetEmpty: [X]int;
+axiom MultisetEmpty == mapconstint(0);
+
+function {:inline} MultisetSingleton(x: X) : [X]int
+{
+ MultisetEmpty[x := 1]
+}
+
+function {:inline} MultisetPlus(a: [X]int, b: [X]int) : [X]int
+{
+ mapadd(a, b)
+}
+
+function {:inline} MultisetMinus(a: [X]int, b: [X]int) : [X]int
+{
+ mapiteint(mapgt(a, b), mapsub(a, b), mapconstint(0))
+}
+
+procedure foo() {
+ var x: X;
+
+ assert FF != TT;
+ assert mapnot(FF) == TT;
+
+ assert MultisetSingleton(x) != MultisetEmpty;
+ assert MultisetPlus(MultisetEmpty, MultisetSingleton(x)) == MultisetSingleton(x);
+ assert MultisetMinus(MultisetPlus(MultisetEmpty, MultisetSingleton(x)), MultisetSingleton(x)) == MultisetEmpty;
+ assert MultisetMinus(MultisetEmpty, MultisetSingleton(x)) == MultisetEmpty;
} \ No newline at end of file
diff --git a/Test/havoc0/KbdCreateClassObject.bpl b/Test/havoc0/KbdCreateClassObject.bpl
index df0f5039..2db6f68d 100644
--- a/Test/havoc0/KbdCreateClassObject.bpl
+++ b/Test/havoc0/KbdCreateClassObject.bpl
@@ -1,5157 +1,5157 @@
-// RUN: %boogie -monomorphize "%s" > "%t"
-// RUN: %diff success.expect "%t"
-type byte, name;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function SetTrue() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-/*
-function AtLeast(int, int) returns ([int]bool);
-function ModEqual(int, int, int) returns (bool);
-axiom(forall n:int, x:int :: ModEqual(n,x,x));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
-axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
-axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
-axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-*/
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int :: SetTrue()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name, m:[name][int]int) returns (bool);
-function Values(t:name, m:[name][int]int) returns ([int]bool);
-function T.Ptr(t:name) returns (name);
-
-axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
-
-axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
-
-axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
- (HasType(v, t, m1) <==> HasType(v, t, m2)));
-
-// Field declarations
-
-const unique T.Guid_WMIGUIDREGINFO:name;
-const unique T.InstanceCount_WMIGUIDREGINFO:name;
-const unique T.Flags_WMIGUIDREGINFO:name;
-const unique T.OperationID__ACCESS_STATE:name;
-const unique T.SecurityEvaluated__ACCESS_STATE:name;
-const unique T.GenerateAudit__ACCESS_STATE:name;
-const unique T.GenerateOnClose__ACCESS_STATE:name;
-const unique T.PrivilegesAllocated__ACCESS_STATE:name;
-const unique T.Flags__ACCESS_STATE:name;
-const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
-const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
-const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
-const unique T.SubjectSecurityContext__ACCESS_STATE:name;
-const unique T.SecurityDescriptor__ACCESS_STATE:name;
-const unique T.AuxData__ACCESS_STATE:name;
-const unique T.Privileges__ACCESS_STATE:name;
-const unique T.AuditPrivileges__ACCESS_STATE:name;
-const unique T.ObjectName__ACCESS_STATE:name;
-const unique T.ObjectTypeName__ACCESS_STATE:name;
-const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_RESOURCE_LIST:name;
-const unique T.List__CM_RESOURCE_LIST:name;
-const unique T.Size__DEVICE_CAPABILITIES:name;
-const unique T.Version__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
-const unique T.LockSupported__DEVICE_CAPABILITIES:name;
-const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.Removable__DEVICE_CAPABILITIES:name;
-const unique T.DockDevice__DEVICE_CAPABILITIES:name;
-const unique T.UniqueID__DEVICE_CAPABILITIES:name;
-const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
-const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
-const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
-const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
-const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
-const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
-const unique T.Reserved__DEVICE_CAPABILITIES:name;
-const unique T.Address__DEVICE_CAPABILITIES:name;
-const unique T.UINumber__DEVICE_CAPABILITIES:name;
-const unique T.DeviceState__DEVICE_CAPABILITIES:name;
-const unique T.SystemWake__DEVICE_CAPABILITIES:name;
-const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
-const unique T.D1Latency__DEVICE_CAPABILITIES:name;
-const unique T.D2Latency__DEVICE_CAPABILITIES:name;
-const unique T.D3Latency__DEVICE_CAPABILITIES:name;
-const unique T.Self__DEVICE_EXTENSION:name;
-const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
-const unique T.TopPort__DEVICE_EXTENSION:name;
-const unique T.PDO__DEVICE_EXTENSION:name;
-const unique T.RemoveLock__DEVICE_EXTENSION:name;
-const unique T.PnP__DEVICE_EXTENSION:name;
-const unique T.Started__DEVICE_EXTENSION:name;
-const unique T.AllowDisable__DEVICE_EXTENSION:name;
-const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
-const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
-const unique T.InputCount__DEVICE_EXTENSION:name;
-const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
-const unique T.InputData__DEVICE_EXTENSION:name;
-const unique T.DataIn__DEVICE_EXTENSION:name;
-const unique T.DataOut__DEVICE_EXTENSION:name;
-const unique T.KeyboardAttributes__DEVICE_EXTENSION:name;
-const unique T.IndicatorParameters__DEVICE_EXTENSION:name;
-const unique T.SpinLock__DEVICE_EXTENSION:name;
-const unique T.ReadQueue__DEVICE_EXTENSION:name;
-const unique T.SequenceNumber__DEVICE_EXTENSION:name;
-const unique T.DeviceState__DEVICE_EXTENSION:name;
-const unique T.SystemState__DEVICE_EXTENSION:name;
-const unique T.UnitId__DEVICE_EXTENSION:name;
-const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
-const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
-const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
-const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
-const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
-const unique T.Link__DEVICE_EXTENSION:name;
-const unique T.File__DEVICE_EXTENSION:name;
-const unique T.Enabled__DEVICE_EXTENSION:name;
-const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
-const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
-const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
-const unique T.Type__DEVICE_OBJECT:name;
-const unique T.Size__DEVICE_OBJECT:name;
-const unique T.ReferenceCount__DEVICE_OBJECT:name;
-const unique T.DriverObject__DEVICE_OBJECT:name;
-const unique T.NextDevice__DEVICE_OBJECT:name;
-const unique T.AttachedDevice__DEVICE_OBJECT:name;
-const unique T.CurrentIrp__DEVICE_OBJECT:name;
-const unique T.Timer__DEVICE_OBJECT:name;
-const unique T.Flags__DEVICE_OBJECT:name;
-const unique T.Characteristics__DEVICE_OBJECT:name;
-const unique T.Vpb__DEVICE_OBJECT:name;
-const unique T.DeviceExtension__DEVICE_OBJECT:name;
-const unique T.DeviceType__DEVICE_OBJECT:name;
-const unique T.StackSize__DEVICE_OBJECT:name;
-const unique T.Queue__DEVICE_OBJECT:name;
-const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
-const unique T.DeviceQueue__DEVICE_OBJECT:name;
-const unique T.Dpc__DEVICE_OBJECT:name;
-const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
-const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
-const unique T.DeviceLock__DEVICE_OBJECT:name;
-const unique T.SectorSize__DEVICE_OBJECT:name;
-const unique T.Spare1__DEVICE_OBJECT:name;
-const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
-const unique T.Reserved__DEVICE_OBJECT:name;
-const unique T.Type__DEVOBJ_EXTENSION:name;
-const unique T.Size__DEVOBJ_EXTENSION:name;
-const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
-const unique T.__unnamed_4_a97c65a1__DISPATCHER_HEADER:name;
-const unique T.SignalState__DISPATCHER_HEADER:name;
-const unique T.WaitListHead__DISPATCHER_HEADER:name;
-const unique T.DriverObject__DRIVER_EXTENSION:name;
-const unique T.AddDevice__DRIVER_EXTENSION:name;
-const unique T.Count__DRIVER_EXTENSION:name;
-const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
-const unique T.Type__DRIVER_OBJECT:name;
-const unique T.Size__DRIVER_OBJECT:name;
-const unique T.DeviceObject__DRIVER_OBJECT:name;
-const unique T.Flags__DRIVER_OBJECT:name;
-const unique T.DriverStart__DRIVER_OBJECT:name;
-const unique T.DriverSize__DRIVER_OBJECT:name;
-const unique T.DriverSection__DRIVER_OBJECT:name;
-const unique T.DriverExtension__DRIVER_OBJECT:name;
-const unique T.DriverName__DRIVER_OBJECT:name;
-const unique T.HardwareDatabase__DRIVER_OBJECT:name;
-const unique T.FastIoDispatch__DRIVER_OBJECT:name;
-const unique T.DriverInit__DRIVER_OBJECT:name;
-const unique T.DriverStartIo__DRIVER_OBJECT:name;
-const unique T.DriverUnload__DRIVER_OBJECT:name;
-const unique T.MajorFunction__DRIVER_OBJECT:name;
-const unique T.SystemResourcesList__ERESOURCE:name;
-const unique T.OwnerTable__ERESOURCE:name;
-const unique T.ActiveCount__ERESOURCE:name;
-const unique T.Flag__ERESOURCE:name;
-const unique T.SharedWaiters__ERESOURCE:name;
-const unique T.ExclusiveWaiters__ERESOURCE:name;
-const unique T.OwnerEntry__ERESOURCE:name;
-const unique T.ActiveEntries__ERESOURCE:name;
-const unique T.ContentionCount__ERESOURCE:name;
-const unique T.NumberOfSharedWaiters__ERESOURCE:name;
-const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
-const unique T.__unnamed_4_52c594f7__ERESOURCE:name;
-const unique T.SpinLock__ERESOURCE:name;
-const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
-const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
-const unique T.FastIoRead__FAST_IO_DISPATCH:name;
-const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoLock__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
-const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
-const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
-const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlRead__FAST_IO_DISPATCH:name;
-const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
-const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
-const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
-const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.Count__FAST_MUTEX:name;
-const unique T.Owner__FAST_MUTEX:name;
-const unique T.Contention__FAST_MUTEX:name;
-const unique T.Gate__FAST_MUTEX:name;
-const unique T.OldIrql__FAST_MUTEX:name;
-const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
-const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
-const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
-const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.Type__FILE_OBJECT:name;
-const unique T.Size__FILE_OBJECT:name;
-const unique T.DeviceObject__FILE_OBJECT:name;
-const unique T.Vpb__FILE_OBJECT:name;
-const unique T.FsContext__FILE_OBJECT:name;
-const unique T.FsContext2__FILE_OBJECT:name;
-const unique T.SectionObjectPointer__FILE_OBJECT:name;
-const unique T.PrivateCacheMap__FILE_OBJECT:name;
-const unique T.FinalStatus__FILE_OBJECT:name;
-const unique T.RelatedFileObject__FILE_OBJECT:name;
-const unique T.LockOperation__FILE_OBJECT:name;
-const unique T.DeletePending__FILE_OBJECT:name;
-const unique T.ReadAccess__FILE_OBJECT:name;
-const unique T.WriteAccess__FILE_OBJECT:name;
-const unique T.DeleteAccess__FILE_OBJECT:name;
-const unique T.SharedRead__FILE_OBJECT:name;
-const unique T.SharedWrite__FILE_OBJECT:name;
-const unique T.SharedDelete__FILE_OBJECT:name;
-const unique T.Flags__FILE_OBJECT:name;
-const unique T.FileName__FILE_OBJECT:name;
-const unique T.CurrentByteOffset__FILE_OBJECT:name;
-const unique T.Waiters__FILE_OBJECT:name;
-const unique T.Busy__FILE_OBJECT:name;
-const unique T.LastLock__FILE_OBJECT:name;
-const unique T.Lock__FILE_OBJECT:name;
-const unique T.Event__FILE_OBJECT:name;
-const unique T.CompletionContext__FILE_OBJECT:name;
-const unique T.IrpListLock__FILE_OBJECT:name;
-const unique T.IrpList__FILE_OBJECT:name;
-const unique T.FileObjectExtension__FILE_OBJECT:name;
-const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
-const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
-const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
-const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
-const unique T.Directory__FILE_STANDARD_INFORMATION:name;
-const unique T.Debug__GLOBALS:name;
-const unique T.GrandMaster__GLOBALS:name;
-const unique T.AssocClassList__GLOBALS:name;
-const unique T.NumAssocClass__GLOBALS:name;
-const unique T.Opens__GLOBALS:name;
-const unique T.NumberLegacyPorts__GLOBALS:name;
-const unique T.Mutex__GLOBALS:name;
-const unique T.ConnectOneClassToOnePort__GLOBALS:name;
-const unique T.SendOutputToAllPorts__GLOBALS:name;
-const unique T.PortsServiced__GLOBALS:name;
-const unique T.InitExtension__GLOBALS:name;
-const unique T.RegistryPath__GLOBALS:name;
-const unique T.BaseClassName__GLOBALS:name;
-const unique T.BaseClassBuffer__GLOBALS:name;
-const unique T.LegacyDeviceList__GLOBALS:name;
-const unique T.Data1__GUID:name;
-const unique T.Data2__GUID:name;
-const unique T.Data3__GUID:name;
-const unique T.Data4__GUID:name;
-const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
-const unique T.Control__INITIAL_PRIVILEGE_SET:name;
-const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
-const unique T.Size__INTERFACE:name;
-const unique T.Version__INTERFACE:name;
-const unique T.Context__INTERFACE:name;
-const unique T.InterfaceReference__INTERFACE:name;
-const unique T.InterfaceDereference__INTERFACE:name;
-const unique T.Port__IO_COMPLETION_CONTEXT:name;
-const unique T.Key__IO_COMPLETION_CONTEXT:name;
-const unique T.Common__IO_REMOVE_LOCK:name;
-const unique T.Dbg__IO_REMOVE_LOCK:name;
-const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__IO_RESOURCE_LIST:name;
-const unique T.Revision__IO_RESOURCE_LIST:name;
-const unique T.Count__IO_RESOURCE_LIST:name;
-const unique T.Descriptors__IO_RESOURCE_LIST:name;
-const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
-const unique T.AccessState__IO_SECURITY_CONTEXT:name;
-const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
-const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
-const unique T.MajorFunction__IO_STACK_LOCATION:name;
-const unique T.MinorFunction__IO_STACK_LOCATION:name;
-const unique T.Flags__IO_STACK_LOCATION:name;
-const unique T.Control__IO_STACK_LOCATION:name;
-const unique T.Parameters__IO_STACK_LOCATION:name;
-const unique T.DeviceObject__IO_STACK_LOCATION:name;
-const unique T.FileObject__IO_STACK_LOCATION:name;
-const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
-const unique T.Context__IO_STACK_LOCATION:name;
-const unique T.__unnamed_4_d99b6e2b__IO_STATUS_BLOCK:name;
-const unique T.Information__IO_STATUS_BLOCK:name;
-const unique T.Type__IRP:name;
-const unique T.Size__IRP:name;
-const unique T.MdlAddress__IRP:name;
-const unique T.Flags__IRP:name;
-const unique T.AssociatedIrp__IRP:name;
-const unique T.ThreadListEntry__IRP:name;
-const unique T.IoStatus__IRP:name;
-const unique T.RequestorMode__IRP:name;
-const unique T.PendingReturned__IRP:name;
-const unique T.StackCount__IRP:name;
-const unique T.CurrentLocation__IRP:name;
-const unique T.Cancel__IRP:name;
-const unique T.CancelIrql__IRP:name;
-const unique T.ApcEnvironment__IRP:name;
-const unique T.AllocationFlags__IRP:name;
-const unique T.UserIosb__IRP:name;
-const unique T.UserEvent__IRP:name;
-const unique T.Overlay__IRP:name;
-const unique T.CancelRoutine__IRP:name;
-const unique T.UserBuffer__IRP:name;
-const unique T.Tail__IRP:name;
-const unique T.Type__KAPC:name;
-const unique T.SpareByte0__KAPC:name;
-const unique T.Size__KAPC:name;
-const unique T.SpareByte1__KAPC:name;
-const unique T.SpareLong0__KAPC:name;
-const unique T.Thread__KAPC:name;
-const unique T.ApcListEntry__KAPC:name;
-const unique T.KernelRoutine__KAPC:name;
-const unique T.RundownRoutine__KAPC:name;
-const unique T.NormalRoutine__KAPC:name;
-const unique T.NormalContext__KAPC:name;
-const unique T.SystemArgument1__KAPC:name;
-const unique T.SystemArgument2__KAPC:name;
-const unique T.ApcStateIndex__KAPC:name;
-const unique T.ApcMode__KAPC:name;
-const unique T.Inserted__KAPC:name;
-const unique T.Type__KDEVICE_QUEUE:name;
-const unique T.Size__KDEVICE_QUEUE:name;
-const unique T.DeviceListHead__KDEVICE_QUEUE:name;
-const unique T.Lock__KDEVICE_QUEUE:name;
-const unique T.Busy__KDEVICE_QUEUE:name;
-const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
-const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Type__KDPC:name;
-const unique T.Importance__KDPC:name;
-const unique T.Number__KDPC:name;
-const unique T.DpcListEntry__KDPC:name;
-const unique T.DeferredRoutine__KDPC:name;
-const unique T.DeferredContext__KDPC:name;
-const unique T.SystemArgument1__KDPC:name;
-const unique T.SystemArgument2__KDPC:name;
-const unique T.DpcData__KDPC:name;
-const unique T.Header__KEVENT:name;
-const unique T.KeyboardIdentifier__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyboardMode__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfIndicators__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES:name;
-const unique T.InputDataQueueLength__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyRepeatMinimum__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyRepeatMaximum__KEYBOARD_ATTRIBUTES:name;
-const unique T.Type__KEYBOARD_ID:name;
-const unique T.Subtype__KEYBOARD_ID:name;
-const unique T.UnitId__KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T.UnitId__KEYBOARD_INPUT_DATA:name;
-const unique T.MakeCode__KEYBOARD_INPUT_DATA:name;
-const unique T.Flags__KEYBOARD_INPUT_DATA:name;
-const unique T.Reserved__KEYBOARD_INPUT_DATA:name;
-const unique T.ExtraInformation__KEYBOARD_INPUT_DATA:name;
-const unique T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Header__KSEMAPHORE:name;
-const unique T.Limit__KSEMAPHORE:name;
-const unique T.__unnamed_8_58ee4a31__LARGE_INTEGER:name;
-const unique T.u__LARGE_INTEGER:name;
-const unique T.QuadPart__LARGE_INTEGER:name;
-const unique T.Flink__LIST_ENTRY:name;
-const unique T.Blink__LIST_ENTRY:name;
-const unique T.LowPart__LUID:name;
-const unique T.HighPart__LUID:name;
-const unique T.Luid__LUID_AND_ATTRIBUTES:name;
-const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
-const unique T.Next__MDL:name;
-const unique T.Size__MDL:name;
-const unique T.MdlFlags__MDL:name;
-const unique T.Process__MDL:name;
-const unique T.MappedSystemVa__MDL:name;
-const unique T.StartVa__MDL:name;
-const unique T.ByteCount__MDL:name;
-const unique T.ByteOffset__MDL:name;
-const unique T.OwnerThread__OWNER_ENTRY:name;
-const unique T.__unnamed_4_6f9ac8e1__OWNER_ENTRY:name;
-const unique T.File__PORT:name;
-const unique T.Port__PORT:name;
-const unique T.Enabled__PORT:name;
-const unique T.Reserved__PORT:name;
-const unique T.Free__PORT:name;
-const unique T.SequenceD1__POWER_SEQUENCE:name;
-const unique T.SequenceD2__POWER_SEQUENCE:name;
-const unique T.SequenceD3__POWER_SEQUENCE:name;
-const unique T.SystemState__POWER_STATE:name;
-const unique T.DeviceState__POWER_STATE:name;
-const unique T.PrivilegeCount__PRIVILEGE_SET:name;
-const unique T.Control__PRIVILEGE_SET:name;
-const unique T.Privilege__PRIVILEGE_SET:name;
-const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
-const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.__unnamed_4_3a2fdc5e__SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T.Length__UNICODE_STRING:name;
-const unique T.MaximumLength__UNICODE_STRING:name;
-const unique T.Buffer__UNICODE_STRING:name;
-const unique T.Type__VPB:name;
-const unique T.Size__VPB:name;
-const unique T.Flags__VPB:name;
-const unique T.VolumeLabelLength__VPB:name;
-const unique T.DeviceObject__VPB:name;
-const unique T.RealDevice__VPB:name;
-const unique T.SerialNumber__VPB:name;
-const unique T.ReferenceCount__VPB:name;
-const unique T.VolumeLabel__VPB:name;
-const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
-const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
-const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
-const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
-const unique T.GuidCount__WMILIB_CONTEXT:name;
-const unique T.GuidList__WMILIB_CONTEXT:name;
-const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
-const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
-const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
-const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
-const unique T.Reserved___unnamed_12_0d6a30de:name;
-const unique T.MessageCount___unnamed_12_0d6a30de:name;
-const unique T.Vector___unnamed_12_0d6a30de:name;
-const unique T.Affinity___unnamed_12_0d6a30de:name;
-const unique T.Start___unnamed_12_17f5c211:name;
-const unique T.Length48___unnamed_12_17f5c211:name;
-const unique T.Start___unnamed_12_1fb42e39:name;
-const unique T.Length___unnamed_12_1fb42e39:name;
-const unique T.Reserved___unnamed_12_1fb42e39:name;
-const unique T.Start___unnamed_12_2a1563c6:name;
-const unique T.Length___unnamed_12_2a1563c6:name;
-const unique T.DataSize___unnamed_12_31347272:name;
-const unique T.Reserved1___unnamed_12_31347272:name;
-const unique T.Reserved2___unnamed_12_31347272:name;
-const unique T.Raw___unnamed_12_429aadc0:name;
-const unique T.Translated___unnamed_12_429aadc0:name;
-const unique T.Start___unnamed_12_4719de1a:name;
-const unique T.Length___unnamed_12_4719de1a:name;
-const unique T.Data___unnamed_12_4be56faa:name;
-const unique T.Data___unnamed_12_5ce25b92:name;
-const unique T.Generic___unnamed_12_7a698b72:name;
-const unique T.Port___unnamed_12_7a698b72:name;
-const unique T.Interrupt___unnamed_12_7a698b72:name;
-const unique T.MessageInterrupt___unnamed_12_7a698b72:name;
-const unique T.Memory___unnamed_12_7a698b72:name;
-const unique T.Dma___unnamed_12_7a698b72:name;
-const unique T.DevicePrivate___unnamed_12_7a698b72:name;
-const unique T.BusNumber___unnamed_12_7a698b72:name;
-const unique T.DeviceSpecificData___unnamed_12_7a698b72:name;
-const unique T.Memory40___unnamed_12_7a698b72:name;
-const unique T.Memory48___unnamed_12_7a698b72:name;
-const unique T.Memory64___unnamed_12_7a698b72:name;
-const unique T.Start___unnamed_12_87c0de8d:name;
-const unique T.Length64___unnamed_12_87c0de8d:name;
-const unique T.Start___unnamed_12_98bfc55a:name;
-const unique T.Length40___unnamed_12_98bfc55a:name;
-const unique T.Priority___unnamed_12_ab1bd9d7:name;
-const unique T.Reserved1___unnamed_12_ab1bd9d7:name;
-const unique T.Reserved2___unnamed_12_ab1bd9d7:name;
-const unique T.Level___unnamed_12_b0429be9:name;
-const unique T.Vector___unnamed_12_b0429be9:name;
-const unique T.Affinity___unnamed_12_b0429be9:name;
-const unique T.ListEntry___unnamed_12_b43e8de8:name;
-const unique T.__unnamed_4_f19b65c1___unnamed_12_b43e8de8:name;
-const unique T.Level___unnamed_12_bfdb39ee:name;
-const unique T.Vector___unnamed_12_bfdb39ee:name;
-const unique T.Affinity___unnamed_12_bfdb39ee:name;
-const unique T.Start___unnamed_12_cd42b3c3:name;
-const unique T.Length___unnamed_12_cd42b3c3:name;
-const unique T.__unnamed_12_429aadc0___unnamed_12_e668effc:name;
-const unique T.Channel___unnamed_12_e80d029e:name;
-const unique T.Port___unnamed_12_e80d029e:name;
-const unique T.Reserved1___unnamed_12_e80d029e:name;
-const unique T.Length___unnamed_16_07c0bcc5:name;
-const unique T.MinBusNumber___unnamed_16_07c0bcc5:name;
-const unique T.MaxBusNumber___unnamed_16_07c0bcc5:name;
-const unique T.Reserved___unnamed_16_07c0bcc5:name;
-const unique T.InterfaceType___unnamed_16_29cb9f2f:name;
-const unique T.Size___unnamed_16_29cb9f2f:name;
-const unique T.Version___unnamed_16_29cb9f2f:name;
-const unique T.Interface___unnamed_16_29cb9f2f:name;
-const unique T.InterfaceSpecificData___unnamed_16_29cb9f2f:name;
-const unique T.SecurityContext___unnamed_16_30f11dbf:name;
-const unique T.Options___unnamed_16_30f11dbf:name;
-const unique T.FileAttributes___unnamed_16_30f11dbf:name;
-const unique T.ShareAccess___unnamed_16_30f11dbf:name;
-const unique T.EaLength___unnamed_16_30f11dbf:name;
-const unique T.DriverContext___unnamed_16_35034f68:name;
-const unique T.Length___unnamed_16_487a9498:name;
-const unique T.FileName___unnamed_16_487a9498:name;
-const unique T.FileInformationClass___unnamed_16_487a9498:name;
-const unique T.FileIndex___unnamed_16_487a9498:name;
-const unique T.OutputBufferLength___unnamed_16_5f6a8844:name;
-const unique T.InputBufferLength___unnamed_16_5f6a8844:name;
-const unique T.FsControlCode___unnamed_16_5f6a8844:name;
-const unique T.Type3InputBuffer___unnamed_16_5f6a8844:name;
-const unique T.Length___unnamed_16_7177b9f3:name;
-const unique T.FileInformationClass___unnamed_16_7177b9f3:name;
-const unique T.FileObject___unnamed_16_7177b9f3:name;
-const unique T.__unnamed_4_43913aa5___unnamed_16_7177b9f3:name;
-const unique T.Length___unnamed_16_88e91ef6:name;
-const unique T.Key___unnamed_16_88e91ef6:name;
-const unique T.ByteOffset___unnamed_16_88e91ef6:name;
-const unique T.Length___unnamed_16_8c506c98:name;
-const unique T.Key___unnamed_16_8c506c98:name;
-const unique T.ByteOffset___unnamed_16_8c506c98:name;
-const unique T.WhichSpace___unnamed_16_9ac2e5f8:name;
-const unique T.Buffer___unnamed_16_9ac2e5f8:name;
-const unique T.Offset___unnamed_16_9ac2e5f8:name;
-const unique T.Length___unnamed_16_9ac2e5f8:name;
-const unique T.Create___unnamed_16_b93842ad:name;
-const unique T.Read___unnamed_16_b93842ad:name;
-const unique T.Write___unnamed_16_b93842ad:name;
-const unique T.QueryDirectory___unnamed_16_b93842ad:name;
-const unique T.NotifyDirectory___unnamed_16_b93842ad:name;
-const unique T.QueryFile___unnamed_16_b93842ad:name;
-const unique T.SetFile___unnamed_16_b93842ad:name;
-const unique T.QueryEa___unnamed_16_b93842ad:name;
-const unique T.SetEa___unnamed_16_b93842ad:name;
-const unique T.QueryVolume___unnamed_16_b93842ad:name;
-const unique T.SetVolume___unnamed_16_b93842ad:name;
-const unique T.FileSystemControl___unnamed_16_b93842ad:name;
-const unique T.LockControl___unnamed_16_b93842ad:name;
-const unique T.DeviceIoControl___unnamed_16_b93842ad:name;
-const unique T.QuerySecurity___unnamed_16_b93842ad:name;
-const unique T.SetSecurity___unnamed_16_b93842ad:name;
-const unique T.MountVolume___unnamed_16_b93842ad:name;
-const unique T.VerifyVolume___unnamed_16_b93842ad:name;
-const unique T.Scsi___unnamed_16_b93842ad:name;
-const unique T.QueryQuota___unnamed_16_b93842ad:name;
-const unique T.SetQuota___unnamed_16_b93842ad:name;
-const unique T.QueryDeviceRelations___unnamed_16_b93842ad:name;
-const unique T.QueryInterface___unnamed_16_b93842ad:name;
-const unique T.DeviceCapabilities___unnamed_16_b93842ad:name;
-const unique T.FilterResourceRequirements___unnamed_16_b93842ad:name;
-const unique T.ReadWriteConfig___unnamed_16_b93842ad:name;
-const unique T.SetLock___unnamed_16_b93842ad:name;
-const unique T.QueryId___unnamed_16_b93842ad:name;
-const unique T.QueryDeviceText___unnamed_16_b93842ad:name;
-const unique T.UsageNotification___unnamed_16_b93842ad:name;
-const unique T.WaitWake___unnamed_16_b93842ad:name;
-const unique T.PowerSequence___unnamed_16_b93842ad:name;
-const unique T.Power___unnamed_16_b93842ad:name;
-const unique T.StartDevice___unnamed_16_b93842ad:name;
-const unique T.WMI___unnamed_16_b93842ad:name;
-const unique T.Others___unnamed_16_b93842ad:name;
-const unique T.Length___unnamed_16_b9c62eab:name;
-const unique T.Key___unnamed_16_b9c62eab:name;
-const unique T.ByteOffset___unnamed_16_b9c62eab:name;
-const unique T.__unnamed_4_7d9d0c7e___unnamed_16_bb584060:name;
-const unique T.Type___unnamed_16_bb584060:name;
-const unique T.State___unnamed_16_bb584060:name;
-const unique T.ShutdownType___unnamed_16_bb584060:name;
-const unique T.OutputBufferLength___unnamed_16_dba55c7c:name;
-const unique T.InputBufferLength___unnamed_16_dba55c7c:name;
-const unique T.IoControlCode___unnamed_16_dba55c7c:name;
-const unique T.Type3InputBuffer___unnamed_16_dba55c7c:name;
-const unique T.DeviceQueueEntry___unnamed_16_e70c268b:name;
-const unique T.__unnamed_16_35034f68___unnamed_16_e70c268b:name;
-const unique T.Argument1___unnamed_16_e734d694:name;
-const unique T.Argument2___unnamed_16_e734d694:name;
-const unique T.Argument3___unnamed_16_e734d694:name;
-const unique T.Argument4___unnamed_16_e734d694:name;
-const unique T.ProviderId___unnamed_16_eac6dbea:name;
-const unique T.DataPath___unnamed_16_eac6dbea:name;
-const unique T.BufferSize___unnamed_16_eac6dbea:name;
-const unique T.Buffer___unnamed_16_eac6dbea:name;
-const unique T.Length___unnamed_16_f6cae4c2:name;
-const unique T.EaList___unnamed_16_f6cae4c2:name;
-const unique T.EaListLength___unnamed_16_f6cae4c2:name;
-const unique T.EaIndex___unnamed_16_f6cae4c2:name;
-const unique T.Length___unnamed_16_fe36e4f4:name;
-const unique T.StartSid___unnamed_16_fe36e4f4:name;
-const unique T.SidList___unnamed_16_fe36e4f4:name;
-const unique T.SidListLength___unnamed_16_fe36e4f4:name;
-const unique T.Abandoned___unnamed_1_29794256:name;
-const unique T.Absolute___unnamed_1_29794256:name;
-const unique T.NpxIrql___unnamed_1_29794256:name;
-const unique T.Signalling___unnamed_1_29794256:name;
-const unique T.Inserted___unnamed_1_2dc63b48:name;
-const unique T.DebugActive___unnamed_1_2dc63b48:name;
-const unique T.DpcActive___unnamed_1_2dc63b48:name;
-const unique T.Size___unnamed_1_2ef8da39:name;
-const unique T.Hand___unnamed_1_2ef8da39:name;
-const unique T.Lock___unnamed_1_faa7dc71:name;
-const unique T.MinimumVector___unnamed_20_f4d2e6d8:name;
-const unique T.MaximumVector___unnamed_20_f4d2e6d8:name;
-const unique T.AffinityPolicy___unnamed_20_f4d2e6d8:name;
-const unique T.PriorityPolicy___unnamed_20_f4d2e6d8:name;
-const unique T.TargetedProcessors___unnamed_20_f4d2e6d8:name;
-const unique T.Length___unnamed_24_41cbc8c0:name;
-const unique T.Alignment___unnamed_24_41cbc8c0:name;
-const unique T.MinimumAddress___unnamed_24_41cbc8c0:name;
-const unique T.MaximumAddress___unnamed_24_41cbc8c0:name;
-const unique T.Length48___unnamed_24_5419c914:name;
-const unique T.Alignment48___unnamed_24_5419c914:name;
-const unique T.MinimumAddress___unnamed_24_5419c914:name;
-const unique T.MaximumAddress___unnamed_24_5419c914:name;
-const unique T.Length___unnamed_24_67a5ff10:name;
-const unique T.Alignment___unnamed_24_67a5ff10:name;
-const unique T.MinimumAddress___unnamed_24_67a5ff10:name;
-const unique T.MaximumAddress___unnamed_24_67a5ff10:name;
-const unique T.Port___unnamed_24_72c3976e:name;
-const unique T.Memory___unnamed_24_72c3976e:name;
-const unique T.Interrupt___unnamed_24_72c3976e:name;
-const unique T.Dma___unnamed_24_72c3976e:name;
-const unique T.Generic___unnamed_24_72c3976e:name;
-const unique T.DevicePrivate___unnamed_24_72c3976e:name;
-const unique T.BusNumber___unnamed_24_72c3976e:name;
-const unique T.ConfigData___unnamed_24_72c3976e:name;
-const unique T.Memory40___unnamed_24_72c3976e:name;
-const unique T.Memory48___unnamed_24_72c3976e:name;
-const unique T.Memory64___unnamed_24_72c3976e:name;
-const unique T.Length64___unnamed_24_a26050bb:name;
-const unique T.Alignment64___unnamed_24_a26050bb:name;
-const unique T.MinimumAddress___unnamed_24_a26050bb:name;
-const unique T.MaximumAddress___unnamed_24_a26050bb:name;
-const unique T.Length___unnamed_24_b8f476db:name;
-const unique T.Alignment___unnamed_24_b8f476db:name;
-const unique T.MinimumAddress___unnamed_24_b8f476db:name;
-const unique T.MaximumAddress___unnamed_24_b8f476db:name;
-const unique T.Length40___unnamed_24_d09044b4:name;
-const unique T.Alignment40___unnamed_24_d09044b4:name;
-const unique T.MinimumAddress___unnamed_24_d09044b4:name;
-const unique T.MaximumAddress___unnamed_24_d09044b4:name;
-const unique T.ReplaceIfExists___unnamed_2_46cc4597:name;
-const unique T.AdvanceOnly___unnamed_2_46cc4597:name;
-const unique T.__unnamed_16_e70c268b___unnamed_40_7218f704:name;
-const unique T.Thread___unnamed_40_7218f704:name;
-const unique T.AuxiliaryBuffer___unnamed_40_7218f704:name;
-const unique T.__unnamed_12_b43e8de8___unnamed_40_7218f704:name;
-const unique T.OriginalFileObject___unnamed_40_7218f704:name;
-const unique T.ListEntry___unnamed_40_c55c9377:name;
-const unique T.Wcb___unnamed_40_c55c9377:name;
-const unique T.InitialPrivilegeSet___unnamed_44_5584090d:name;
-const unique T.PrivilegeSet___unnamed_44_5584090d:name;
-const unique T.Overlay___unnamed_48_cf99b13f:name;
-const unique T.Apc___unnamed_48_cf99b13f:name;
-const unique T.CompletionKey___unnamed_48_cf99b13f:name;
-const unique T.PowerState___unnamed_4_069846fb:name;
-const unique T.IdType___unnamed_4_224c32f4:name;
-const unique T.Capabilities___unnamed_4_2de698da:name;
-const unique T.__unnamed_4_c3479730___unnamed_4_3a2fdc5e:name;
-const unique T.ContextAsUlong___unnamed_4_3a2fdc5e:name;
-const unique T.Length___unnamed_4_3a4c1a13:name;
-const unique T.__unnamed_2_46cc4597___unnamed_4_43913aa5:name;
-const unique T.ClusterCount___unnamed_4_43913aa5:name;
-const unique T.DeleteHandle___unnamed_4_43913aa5:name;
-const unique T.UserApcRoutine___unnamed_4_4e8dd2ba:name;
-const unique T.IssuingProcess___unnamed_4_4e8dd2ba:name;
-const unique T.Srb___unnamed_4_52603077:name;
-const unique T.Address___unnamed_4_52c594f7:name;
-const unique T.CreatorBackTraceIndex___unnamed_4_52c594f7:name;
-const unique T.Type___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_29794256___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_2ef8da39___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_2dc63b48___unnamed_4_5ca00198:name;
-const unique T.MasterIrp___unnamed_4_6ac6463c:name;
-const unique T.IrpCount___unnamed_4_6ac6463c:name;
-const unique T.SystemBuffer___unnamed_4_6ac6463c:name;
-const unique T.OwnerCount___unnamed_4_6f9ac8e1:name;
-const unique T.TableSize___unnamed_4_6f9ac8e1:name;
-const unique T.PowerSequence___unnamed_4_7a02167b:name;
-const unique T.SystemContext___unnamed_4_7d9d0c7e:name;
-const unique T.SystemPowerStateContext___unnamed_4_7d9d0c7e:name;
-const unique T.IoResourceRequirementList___unnamed_4_82f7a864:name;
-const unique T.Length___unnamed_4_9aec220b:name;
-const unique T.__unnamed_4_5ca00198___unnamed_4_a97c65a1:name;
-const unique T.Lock___unnamed_4_a97c65a1:name;
-const unique T.Reserved1___unnamed_4_c3479730:name;
-const unique T.TargetSystemState___unnamed_4_c3479730:name;
-const unique T.EffectiveSystemState___unnamed_4_c3479730:name;
-const unique T.CurrentSystemState___unnamed_4_c3479730:name;
-const unique T.IgnoreHibernationPath___unnamed_4_c3479730:name;
-const unique T.PseudoTransition___unnamed_4_c3479730:name;
-const unique T.Reserved2___unnamed_4_c3479730:name;
-const unique T.Status___unnamed_4_d99b6e2b:name;
-const unique T.Pointer___unnamed_4_d99b6e2b:name;
-const unique T.CurrentStackLocation___unnamed_4_f19b65c1:name;
-const unique T.PacketType___unnamed_4_f19b65c1:name;
-const unique T.Type___unnamed_4_fa10fc16:name;
-const unique T.SecurityInformation___unnamed_8_01efa60d:name;
-const unique T.Length___unnamed_8_01efa60d:name;
-const unique T.MinimumChannel___unnamed_8_08d4cef8:name;
-const unique T.MaximumChannel___unnamed_8_08d4cef8:name;
-const unique T.__unnamed_4_4e8dd2ba___unnamed_8_0a898c0c:name;
-const unique T.UserApcContext___unnamed_8_0a898c0c:name;
-const unique T.SecurityInformation___unnamed_8_1330f93a:name;
-const unique T.SecurityDescriptor___unnamed_8_1330f93a:name;
-const unique T.AsynchronousParameters___unnamed_8_181d0de9:name;
-const unique T.AllocationSize___unnamed_8_181d0de9:name;
-const unique T.Vpb___unnamed_8_4812764d:name;
-const unique T.DeviceObject___unnamed_8_4812764d:name;
-const unique T.Length___unnamed_8_559a91e6:name;
-const unique T.FsInformationClass___unnamed_8_559a91e6:name;
-const unique T.Length___unnamed_8_5845b309:name;
-const unique T.FileInformationClass___unnamed_8_5845b309:name;
-const unique T.LowPart___unnamed_8_58ee4a31:name;
-const unique T.HighPart___unnamed_8_58ee4a31:name;
-const unique T.AllocatedResources___unnamed_8_61acf4ce:name;
-const unique T.AllocatedResourcesTranslated___unnamed_8_61acf4ce:name;
-const unique T.DeviceTextType___unnamed_8_6acfee04:name;
-const unique T.LocaleId___unnamed_8_6acfee04:name;
-const unique T.Length___unnamed_8_7f26a9dd:name;
-const unique T.CompletionFilter___unnamed_8_7f26a9dd:name;
-const unique T.Vpb___unnamed_8_87add0bd:name;
-const unique T.DeviceObject___unnamed_8_87add0bd:name;
-const unique T.InPath___unnamed_8_b2773e4c:name;
-const unique T.Reserved___unnamed_8_b2773e4c:name;
-const unique T.Type___unnamed_8_b2773e4c:name;
-const unique T.Length___unnamed_8_de890d4e:name;
-const unique T.FsInformationClass___unnamed_8_de890d4e:name;
-const unique T.LowPart___unnamed_8_ef9ba0d3:name;
-const unique T.HighPart___unnamed_8_ef9ba0d3:name;
-
-// Type declarations
-
-const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_LIST:name;
-const unique T.A1_LUID_AND_ATTRIBUTES:name;
-const unique T.A256UINT2:name;
-const unique T.A28PFDRIVER_DISPATCH:name;
-const unique T.A2UCHAR:name;
-const unique T.A2UINT2:name;
-const unique T.A32UINT2:name;
-const unique T.A37CHAR:name;
-const unique T.A3UCHAR:name;
-const unique T.A3UINT4:name;
-const unique T.A3_LUID_AND_ATTRIBUTES:name;
-const unique T.A40CHAR:name;
-const unique T.A4PVOID:name;
-const unique T.A4UINT4:name;
-const unique T.A5_DEVICE_POWER_STATE:name;
-const unique T.A65CHAR:name;
-const unique T.A75CHAR:name;
-const unique T.A76CHAR:name;
-const unique T.A7UINT2:name;
-const unique T.A7_DEVICE_POWER_STATE:name;
-const unique T.A83CHAR:name;
-const unique T.A8UCHAR:name;
-const unique T.A9UINT2:name;
-const unique T.BUS_QUERY_ID_TYPE:name;
-const unique T.CHAR:name;
-const unique T.DEVICE_TEXT_TYPE:name;
-const unique T.F0:name;
-const unique T.F1:name;
-const unique T.F10:name;
-const unique T.F11:name;
-const unique T.F12:name;
-const unique T.F13:name;
-const unique T.F14:name;
-const unique T.F15:name;
-const unique T.F16:name;
-const unique T.F17:name;
-const unique T.F18:name;
-const unique T.F19:name;
-const unique T.F2:name;
-const unique T.F20:name;
-const unique T.F21:name;
-const unique T.F22:name;
-const unique T.F23:name;
-const unique T.F24:name;
-const unique T.F25:name;
-const unique T.F26:name;
-const unique T.F27:name;
-const unique T.F28:name;
-const unique T.F29:name;
-const unique T.F3:name;
-const unique T.F30:name;
-const unique T.F31:name;
-const unique T.F32:name;
-const unique T.F33:name;
-const unique T.F34:name;
-const unique T.F35:name;
-const unique T.F36:name;
-const unique T.F37:name;
-const unique T.F38:name;
-const unique T.F4:name;
-const unique T.F5:name;
-const unique T.F6:name;
-const unique T.F7:name;
-const unique T.F8:name;
-const unique T.F9:name;
-const unique T.FDRIVER_ADD_DEVICE:name;
-const unique T.FDRIVER_CANCEL:name;
-const unique T.FDRIVER_CONTROL:name;
-const unique T.FDRIVER_DISPATCH:name;
-const unique T.FDRIVER_INITIALIZE:name;
-const unique T.FDRIVER_STARTIO:name;
-const unique T.FDRIVER_UNLOAD:name;
-const unique T.FFAST_IO_ACQUIRE_FILE:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.FFAST_IO_DETACH_DEVICE:name;
-const unique T.FFAST_IO_DEVICE_CONTROL:name;
-const unique T.FFAST_IO_LOCK:name;
-const unique T.FFAST_IO_MDL_READ:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.FFAST_IO_QUERY_OPEN:name;
-const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.FFAST_IO_READ:name;
-const unique T.FFAST_IO_READ_COMPRESSED:name;
-const unique T.FFAST_IO_RELEASE_FILE:name;
-const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_UNLOCK_ALL:name;
-const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.FFAST_IO_UNLOCK_SINGLE:name;
-const unique T.FFAST_IO_WRITE:name;
-const unique T.FFAST_IO_WRITE_COMPRESSED:name;
-const unique T.FIO_COMPLETION_ROUTINE:name;
-const unique T.FKDEFERRED_ROUTINE:name;
-const unique T.INT2:name;
-const unique T.INT4:name;
-const unique T.INT8:name;
-const unique T.PA2UINT2:name;
-const unique T.PA37CHAR:name;
-const unique T.PA40CHAR:name;
-const unique T.PA4UINT4:name;
-const unique T.PA65CHAR:name;
-const unique T.PA75CHAR:name;
-const unique T.PA76CHAR:name;
-const unique T.PA7UINT2:name;
-const unique T.PA83CHAR:name;
-const unique T.PA9UINT2:name;
-const unique T.PCHAR:name;
-const unique T.PF19:name;
-const unique T.PF21:name;
-const unique T.PF23:name;
-const unique T.PF24:name;
-const unique T.PF25:name;
-const unique T.PF33:name;
-const unique T.PF34:name;
-const unique T.PF35:name;
-const unique T.PF36:name;
-const unique T.PF37:name;
-const unique T.PF38:name;
-const unique T.PFDRIVER_ADD_DEVICE:name;
-const unique T.PFDRIVER_CANCEL:name;
-const unique T.PFDRIVER_CONTROL:name;
-const unique T.PFDRIVER_DISPATCH:name;
-const unique T.PFDRIVER_INITIALIZE:name;
-const unique T.PFDRIVER_STARTIO:name;
-const unique T.PFDRIVER_UNLOAD:name;
-const unique T.PFFAST_IO_ACQUIRE_FILE:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.PFFAST_IO_DETACH_DEVICE:name;
-const unique T.PFFAST_IO_DEVICE_CONTROL:name;
-const unique T.PFFAST_IO_LOCK:name;
-const unique T.PFFAST_IO_MDL_READ:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.PFFAST_IO_QUERY_OPEN:name;
-const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.PFFAST_IO_READ:name;
-const unique T.PFFAST_IO_READ_COMPRESSED:name;
-const unique T.PFFAST_IO_RELEASE_FILE:name;
-const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_UNLOCK_ALL:name;
-const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
-const unique T.PFFAST_IO_WRITE:name;
-const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
-const unique T.PFIO_COMPLETION_ROUTINE:name;
-const unique T.PFKDEFERRED_ROUTINE:name;
-const unique T.PINT4:name;
-const unique T.POWER_ACTION:name;
-const unique T.PPCHAR:name;
-const unique T.PPF24:name;
-const unique T.PPPUINT2:name;
-const unique T.PPP_DEVICE_OBJECT:name;
-const unique T.PPUINT2:name;
-const unique T.PPUINT4:name;
-const unique T.PPVOID:name;
-const unique T.PP_DEVICE_EXTENSION:name;
-const unique T.PP_DEVICE_OBJECT:name;
-const unique T.PP_DRIVER_OBJECT:name;
-const unique T.PP_ERESOURCE:name;
-const unique T.PP_FAST_MUTEX:name;
-const unique T.PP_IO_REMOVE_LOCK:name;
-const unique T.PP_LIST_ENTRY:name;
-const unique T.PP_MDL:name;
-const unique T.PP_UNICODE_STRING:name;
-const unique T.PUCHAR:name;
-const unique T.PUINT2:name;
-const unique T.PUINT4:name;
-const unique T.PVOID:name;
-const unique T.PWMIGUIDREGINFO:name;
-const unique T.P_ACCESS_STATE:name;
-const unique T.P_CM_RESOURCE_LIST:name;
-const unique T.P_COMPRESSED_DATA_INFO:name;
-const unique T.P_DEVICE_CAPABILITIES:name;
-const unique T.P_DEVICE_EXTENSION:name;
-const unique T.P_DEVICE_OBJECT:name;
-const unique T.P_DEVOBJ_EXTENSION:name;
-const unique T.P_DRIVER_EXTENSION:name;
-const unique T.P_DRIVER_OBJECT:name;
-const unique T.P_EPROCESS:name;
-const unique T.P_ERESOURCE:name;
-const unique T.P_ETHREAD:name;
-const unique T.P_FAST_IO_DISPATCH:name;
-const unique T.P_FAST_MUTEX:name;
-const unique T.P_FILE_BASIC_INFORMATION:name;
-const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
-const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.P_FILE_OBJECT:name;
-const unique T.P_FILE_STANDARD_INFORMATION:name;
-const unique T.P_GLOBALS:name;
-const unique T.P_GUID:name;
-const unique T.P_INTERFACE:name;
-const unique T.P_IO_COMPLETION_CONTEXT:name;
-const unique T.P_IO_REMOVE_LOCK:name;
-const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.P_IO_SECURITY_CONTEXT:name;
-const unique T.P_IO_STACK_LOCATION:name;
-const unique T.P_IO_STATUS_BLOCK:name;
-const unique T.P_IO_TIMER:name;
-const unique T.P_IRP:name;
-const unique T.P_KAPC:name;
-const unique T.P_KDPC:name;
-const unique T.P_KEVENT:name;
-const unique T.P_KEYBOARD_INPUT_DATA:name;
-const unique T.P_KSEMAPHORE:name;
-const unique T.P_KTHREAD:name;
-const unique T.P_LARGE_INTEGER:name;
-const unique T.P_LIST_ENTRY:name;
-const unique T.P_MDL:name;
-const unique T.P_OWNER_ENTRY:name;
-const unique T.P_POOL_TYPE:name;
-const unique T.P_PORT:name;
-const unique T.P_POWER_SEQUENCE:name;
-const unique T.P_SCSI_REQUEST_BLOCK:name;
-const unique T.P_SECTION_OBJECT_POINTERS:name;
-const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.P_UNICODE_STRING:name;
-const unique T.P_VPB:name;
-const unique T.UCHAR:name;
-const unique T.UINT2:name;
-const unique T.UINT4:name;
-const unique T.VOID:name;
-const unique T.WMIENABLEDISABLECONTROL:name;
-const unique T.WMIGUIDREGINFO:name;
-const unique T._ACCESS_STATE:name;
-const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_LIST:name;
-const unique T._CM_RESOURCE_LIST:name;
-const unique T._COMPRESSED_DATA_INFO:name;
-const unique T._DEVICE_CAPABILITIES:name;
-const unique T._DEVICE_EXTENSION:name;
-const unique T._DEVICE_OBJECT:name;
-const unique T._DEVICE_POWER_STATE:name;
-const unique T._DEVICE_RELATION_TYPE:name;
-const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
-const unique T._DEVOBJ_EXTENSION:name;
-const unique T._DISPATCHER_HEADER:name;
-const unique T._DRIVER_EXTENSION:name;
-const unique T._DRIVER_OBJECT:name;
-const unique T._EPROCESS:name;
-const unique T._ERESOURCE:name;
-const unique T._ETHREAD:name;
-const unique T._FAST_IO_DISPATCH:name;
-const unique T._FAST_MUTEX:name;
-const unique T._FILE_BASIC_INFORMATION:name;
-const unique T._FILE_GET_QUOTA_INFORMATION:name;
-const unique T._FILE_INFORMATION_CLASS:name;
-const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T._FILE_OBJECT:name;
-const unique T._FILE_STANDARD_INFORMATION:name;
-const unique T._FSINFOCLASS:name;
-const unique T._GLOBALS:name;
-const unique T._GUID:name;
-const unique T._INITIAL_PRIVILEGE_SET:name;
-const unique T._INTERFACE:name;
-const unique T._INTERFACE_TYPE:name;
-const unique T._IO_ALLOCATION_ACTION:name;
-const unique T._IO_COMPLETION_CONTEXT:name;
-const unique T._IO_REMOVE_LOCK:name;
-const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T._IO_RESOURCE_DESCRIPTOR:name;
-const unique T._IO_RESOURCE_LIST:name;
-const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T._IO_SECURITY_CONTEXT:name;
-const unique T._IO_STACK_LOCATION:name;
-const unique T._IO_STATUS_BLOCK:name;
-const unique T._IO_TIMER:name;
-const unique T._IRP:name;
-const unique T._IRQ_DEVICE_POLICY:name;
-const unique T._IRQ_PRIORITY:name;
-const unique T._KAPC:name;
-const unique T._KDEVICE_QUEUE:name;
-const unique T._KDEVICE_QUEUE_ENTRY:name;
-const unique T._KDPC:name;
-const unique T._KEVENT:name;
-const unique T._KEYBOARD_ATTRIBUTES:name;
-const unique T._KEYBOARD_ID:name;
-const unique T._KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T._KEYBOARD_INPUT_DATA:name;
-const unique T._KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T._KSEMAPHORE:name;
-const unique T._KTHREAD:name;
-const unique T._LARGE_INTEGER:name;
-const unique T._LIST_ENTRY:name;
-const unique T._LUID:name;
-const unique T._LUID_AND_ATTRIBUTES:name;
-const unique T._MDL:name;
-const unique T._OWNER_ENTRY:name;
-const unique T._POOL_TYPE:name;
-const unique T._PORT:name;
-const unique T._POWER_SEQUENCE:name;
-const unique T._POWER_STATE:name;
-const unique T._POWER_STATE_TYPE:name;
-const unique T._PRIVILEGE_SET:name;
-const unique T._SCSI_REQUEST_BLOCK:name;
-const unique T._SECTION_OBJECT_POINTERS:name;
-const unique T._SECURITY_IMPERSONATION_LEVEL:name;
-const unique T._SECURITY_QUALITY_OF_SERVICE:name;
-const unique T._SECURITY_SUBJECT_CONTEXT:name;
-const unique T._SYSTEM_POWER_STATE:name;
-const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T._UNICODE_STRING:name;
-const unique T._VPB:name;
-const unique T._WAIT_CONTEXT_BLOCK:name;
-const unique T._WMILIB_CONTEXT:name;
-const unique T.__unnamed_12_0d6a30de:name;
-const unique T.__unnamed_12_17f5c211:name;
-const unique T.__unnamed_12_1fb42e39:name;
-const unique T.__unnamed_12_2a1563c6:name;
-const unique T.__unnamed_12_31347272:name;
-const unique T.__unnamed_12_429aadc0:name;
-const unique T.__unnamed_12_4719de1a:name;
-const unique T.__unnamed_12_4be56faa:name;
-const unique T.__unnamed_12_5ce25b92:name;
-const unique T.__unnamed_12_7a698b72:name;
-const unique T.__unnamed_12_87c0de8d:name;
-const unique T.__unnamed_12_98bfc55a:name;
-const unique T.__unnamed_12_ab1bd9d7:name;
-const unique T.__unnamed_12_b0429be9:name;
-const unique T.__unnamed_12_b43e8de8:name;
-const unique T.__unnamed_12_bfdb39ee:name;
-const unique T.__unnamed_12_cd42b3c3:name;
-const unique T.__unnamed_12_e668effc:name;
-const unique T.__unnamed_12_e80d029e:name;
-const unique T.__unnamed_16_07c0bcc5:name;
-const unique T.__unnamed_16_29cb9f2f:name;
-const unique T.__unnamed_16_30f11dbf:name;
-const unique T.__unnamed_16_35034f68:name;
-const unique T.__unnamed_16_487a9498:name;
-const unique T.__unnamed_16_5f6a8844:name;
-const unique T.__unnamed_16_7177b9f3:name;
-const unique T.__unnamed_16_88e91ef6:name;
-const unique T.__unnamed_16_8c506c98:name;
-const unique T.__unnamed_16_9ac2e5f8:name;
-const unique T.__unnamed_16_b93842ad:name;
-const unique T.__unnamed_16_b9c62eab:name;
-const unique T.__unnamed_16_bb584060:name;
-const unique T.__unnamed_16_dba55c7c:name;
-const unique T.__unnamed_16_e70c268b:name;
-const unique T.__unnamed_16_e734d694:name;
-const unique T.__unnamed_16_eac6dbea:name;
-const unique T.__unnamed_16_f6cae4c2:name;
-const unique T.__unnamed_16_fe36e4f4:name;
-const unique T.__unnamed_1_29794256:name;
-const unique T.__unnamed_1_2dc63b48:name;
-const unique T.__unnamed_1_2ef8da39:name;
-const unique T.__unnamed_1_faa7dc71:name;
-const unique T.__unnamed_20_f4d2e6d8:name;
-const unique T.__unnamed_24_41cbc8c0:name;
-const unique T.__unnamed_24_5419c914:name;
-const unique T.__unnamed_24_67a5ff10:name;
-const unique T.__unnamed_24_72c3976e:name;
-const unique T.__unnamed_24_a26050bb:name;
-const unique T.__unnamed_24_b8f476db:name;
-const unique T.__unnamed_24_d09044b4:name;
-const unique T.__unnamed_2_46cc4597:name;
-const unique T.__unnamed_40_7218f704:name;
-const unique T.__unnamed_40_c55c9377:name;
-const unique T.__unnamed_44_5584090d:name;
-const unique T.__unnamed_48_cf99b13f:name;
-const unique T.__unnamed_4_069846fb:name;
-const unique T.__unnamed_4_224c32f4:name;
-const unique T.__unnamed_4_2de698da:name;
-const unique T.__unnamed_4_3a2fdc5e:name;
-const unique T.__unnamed_4_3a4c1a13:name;
-const unique T.__unnamed_4_43913aa5:name;
-const unique T.__unnamed_4_4e8dd2ba:name;
-const unique T.__unnamed_4_52603077:name;
-const unique T.__unnamed_4_52c594f7:name;
-const unique T.__unnamed_4_5ca00198:name;
-const unique T.__unnamed_4_6ac6463c:name;
-const unique T.__unnamed_4_6f9ac8e1:name;
-const unique T.__unnamed_4_7a02167b:name;
-const unique T.__unnamed_4_7d9d0c7e:name;
-const unique T.__unnamed_4_82f7a864:name;
-const unique T.__unnamed_4_9aec220b:name;
-const unique T.__unnamed_4_a97c65a1:name;
-const unique T.__unnamed_4_c3479730:name;
-const unique T.__unnamed_4_d99b6e2b:name;
-const unique T.__unnamed_4_f19b65c1:name;
-const unique T.__unnamed_4_fa10fc16:name;
-const unique T.__unnamed_8_01efa60d:name;
-const unique T.__unnamed_8_08d4cef8:name;
-const unique T.__unnamed_8_0a898c0c:name;
-const unique T.__unnamed_8_1330f93a:name;
-const unique T.__unnamed_8_181d0de9:name;
-const unique T.__unnamed_8_4812764d:name;
-const unique T.__unnamed_8_559a91e6:name;
-const unique T.__unnamed_8_5845b309:name;
-const unique T.__unnamed_8_58ee4a31:name;
-const unique T.__unnamed_8_61acf4ce:name;
-const unique T.__unnamed_8_6acfee04:name;
-const unique T.__unnamed_8_7f26a9dd:name;
-const unique T.__unnamed_8_87add0bd:name;
-const unique T.__unnamed_8_b2773e4c:name;
-const unique T.__unnamed_8_de890d4e:name;
-const unique T.__unnamed_8_ef9ba0d3:name;
-
-function Abandoned___unnamed_1_29794256(int) returns (int);
-function Abandoned___unnamed_1_29794256Inv(int) returns (int);
-function _S_Abandoned___unnamed_1_29794256([int]bool) returns ([int]bool);
-function _S_Abandoned___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Abandoned___unnamed_1_29794256Inv(Abandoned___unnamed_1_29794256(x))} Abandoned___unnamed_1_29794256Inv(Abandoned___unnamed_1_29794256(x)) == x);
-axiom (forall x:int :: {Abandoned___unnamed_1_29794256Inv(x)} Abandoned___unnamed_1_29794256(Abandoned___unnamed_1_29794256Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_29794256(S)[x]} _S_Abandoned___unnamed_1_29794256(S)[x] <==> S[Abandoned___unnamed_1_29794256Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_29794256Inv(S)[x]} _S_Abandoned___unnamed_1_29794256Inv(S)[x] <==> S[Abandoned___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_29794256(S)} S[x] ==> _S_Abandoned___unnamed_1_29794256(S)[Abandoned___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_29794256Inv(S)} S[x] ==> _S_Abandoned___unnamed_1_29794256Inv(S)[Abandoned___unnamed_1_29794256Inv(x)]);
-
-axiom (forall x:int :: {Abandoned___unnamed_1_29794256(x)} Abandoned___unnamed_1_29794256(x) == x + 0);
-axiom (forall x:int :: {Abandoned___unnamed_1_29794256Inv(x)} Abandoned___unnamed_1_29794256Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Abandoned___unnamed_1_29794256Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Abandoned___unnamed_1_29794256Inv(x));
-function Absolute___unnamed_1_29794256(int) returns (int);
-function Absolute___unnamed_1_29794256Inv(int) returns (int);
-function _S_Absolute___unnamed_1_29794256([int]bool) returns ([int]bool);
-function _S_Absolute___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Absolute___unnamed_1_29794256Inv(Absolute___unnamed_1_29794256(x))} Absolute___unnamed_1_29794256Inv(Absolute___unnamed_1_29794256(x)) == x);
-axiom (forall x:int :: {Absolute___unnamed_1_29794256Inv(x)} Absolute___unnamed_1_29794256(Absolute___unnamed_1_29794256Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_29794256(S)[x]} _S_Absolute___unnamed_1_29794256(S)[x] <==> S[Absolute___unnamed_1_29794256Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_29794256Inv(S)[x]} _S_Absolute___unnamed_1_29794256Inv(S)[x] <==> S[Absolute___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_29794256(S)} S[x] ==> _S_Absolute___unnamed_1_29794256(S)[Absolute___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_29794256Inv(S)} S[x] ==> _S_Absolute___unnamed_1_29794256Inv(S)[Absolute___unnamed_1_29794256Inv(x)]);
-
-axiom (forall x:int :: {Absolute___unnamed_1_29794256(x)} Absolute___unnamed_1_29794256(x) == x + 0);
-axiom (forall x:int :: {Absolute___unnamed_1_29794256Inv(x)} Absolute___unnamed_1_29794256Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Absolute___unnamed_1_29794256Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Absolute___unnamed_1_29794256Inv(x));
-function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x))} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 16);
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 16);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function AllowDisable__DEVICE_EXTENSION(int) returns (int);
-function AllowDisable__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_AllowDisable__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_AllowDisable__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSIONInv(AllowDisable__DEVICE_EXTENSION(x))} AllowDisable__DEVICE_EXTENSIONInv(AllowDisable__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSIONInv(x)} AllowDisable__DEVICE_EXTENSION(AllowDisable__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_AllowDisable__DEVICE_EXTENSION(S)[x]} _S_AllowDisable__DEVICE_EXTENSION(S)[x] <==> S[AllowDisable__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_AllowDisable__DEVICE_EXTENSIONInv(S)[x]} _S_AllowDisable__DEVICE_EXTENSIONInv(S)[x] <==> S[AllowDisable__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AllowDisable__DEVICE_EXTENSION(S)} S[x] ==> _S_AllowDisable__DEVICE_EXTENSION(S)[AllowDisable__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AllowDisable__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_AllowDisable__DEVICE_EXTENSIONInv(S)[AllowDisable__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSION(x)} AllowDisable__DEVICE_EXTENSION(x) == x + 106);
-axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSIONInv(x)} AllowDisable__DEVICE_EXTENSIONInv(x) == x - 106);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1) == AllowDisable__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 106)} MINUS_LEFT_PTR(x, 1, 106) == AllowDisable__DEVICE_EXTENSIONInv(x));
-function BaseClassName__GLOBALS(int) returns (int);
-function BaseClassName__GLOBALSInv(int) returns (int);
-function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
-function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 368);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 368);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1) == BaseClassName__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 368)} MINUS_LEFT_PTR(x, 1, 368) == BaseClassName__GLOBALSInv(x));
-function Blink__LIST_ENTRY(int) returns (int);
-function Blink__LIST_ENTRYInv(int) returns (int);
-function _S_Blink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Blink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x))} Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRY(Blink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRY(S)[x]} _S_Blink__LIST_ENTRY(S)[x] <==> S[Blink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRYInv(S)[x]} _S_Blink__LIST_ENTRYInv(S)[x] <==> S[Blink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRY(S)} S[x] ==> _S_Blink__LIST_ENTRY(S)[Blink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRYInv(S)} S[x] ==> _S_Blink__LIST_ENTRYInv(S)[Blink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == x + 4);
-axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRYInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Blink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Blink__LIST_ENTRYInv(x));
-function Blocks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x))} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 56);
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 56);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Buffer__UNICODE_STRING(int) returns (int);
-function Buffer__UNICODE_STRINGInv(int) returns (int);
-function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
-function Common__IO_REMOVE_LOCK(int) returns (int);
-function Common__IO_REMOVE_LOCKInv(int) returns (int);
-function _S_Common__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
-function _S_Common__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x))} Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x)) == x);
-axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCK(Common__IO_REMOVE_LOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCK(S)[x]} _S_Common__IO_REMOVE_LOCK(S)[x] <==> S[Common__IO_REMOVE_LOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCKInv(S)[x]} _S_Common__IO_REMOVE_LOCKInv(S)[x] <==> S[Common__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCK(S)} S[x] ==> _S_Common__IO_REMOVE_LOCK(S)[Common__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Common__IO_REMOVE_LOCKInv(S)[Common__IO_REMOVE_LOCKInv(x)]);
-
-axiom (forall x:int :: {Common__IO_REMOVE_LOCK(x)} Common__IO_REMOVE_LOCK(x) == x + 0);
-axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCKInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Common__IO_REMOVE_LOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Common__IO_REMOVE_LOCKInv(x));
-function ConnectOneClassToOnePort__GLOBALS(int) returns (int);
-function ConnectOneClassToOnePort__GLOBALSInv(int) returns (int);
-function _S_ConnectOneClassToOnePort__GLOBALS([int]bool) returns ([int]bool);
-function _S_ConnectOneClassToOnePort__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x))} ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x)) == x);
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALS(ConnectOneClassToOnePort__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALS(S)[x]} _S_ConnectOneClassToOnePort__GLOBALS(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALSInv(S)[x]} _S_ConnectOneClassToOnePort__GLOBALSInv(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALS(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALS(S)[ConnectOneClassToOnePort__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALSInv(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALSInv(S)[ConnectOneClassToOnePort__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALS(x)} ConnectOneClassToOnePort__GLOBALS(x) == x + 56);
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALSInv(x) == x - 56);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == ConnectOneClassToOnePort__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == ConnectOneClassToOnePort__GLOBALSInv(x));
-function DataIn__DEVICE_EXTENSION(int) returns (int);
-function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
-function DataOut__DEVICE_EXTENSION(int) returns (int);
-function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
-function Dbg__IO_REMOVE_LOCK(int) returns (int);
-function Dbg__IO_REMOVE_LOCKInv(int) returns (int);
-function _S_Dbg__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
-function _S_Dbg__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x))} Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x)) == x);
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCK(Dbg__IO_REMOVE_LOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCK(S)[x]} _S_Dbg__IO_REMOVE_LOCK(S)[x] <==> S[Dbg__IO_REMOVE_LOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCKInv(S)[x]} _S_Dbg__IO_REMOVE_LOCKInv(S)[x] <==> S[Dbg__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCK(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCK(S)[Dbg__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCKInv(S)[Dbg__IO_REMOVE_LOCKInv(x)]);
-
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCK(x)} Dbg__IO_REMOVE_LOCK(x) == x + 24);
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCKInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Dbg__IO_REMOVE_LOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Dbg__IO_REMOVE_LOCKInv(x));
-function DebugActive___unnamed_1_2dc63b48(int) returns (int);
-function DebugActive___unnamed_1_2dc63b48Inv(int) returns (int);
-function _S_DebugActive___unnamed_1_2dc63b48([int]bool) returns ([int]bool);
-function _S_DebugActive___unnamed_1_2dc63b48Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48Inv(DebugActive___unnamed_1_2dc63b48(x))} DebugActive___unnamed_1_2dc63b48Inv(DebugActive___unnamed_1_2dc63b48(x)) == x);
-axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48Inv(x)} DebugActive___unnamed_1_2dc63b48(DebugActive___unnamed_1_2dc63b48Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_2dc63b48(S)[x]} _S_DebugActive___unnamed_1_2dc63b48(S)[x] <==> S[DebugActive___unnamed_1_2dc63b48Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_2dc63b48Inv(S)[x]} _S_DebugActive___unnamed_1_2dc63b48Inv(S)[x] <==> S[DebugActive___unnamed_1_2dc63b48(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_2dc63b48(S)} S[x] ==> _S_DebugActive___unnamed_1_2dc63b48(S)[DebugActive___unnamed_1_2dc63b48(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_2dc63b48Inv(S)} S[x] ==> _S_DebugActive___unnamed_1_2dc63b48Inv(S)[DebugActive___unnamed_1_2dc63b48Inv(x)]);
-
-axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48(x)} DebugActive___unnamed_1_2dc63b48(x) == x + 0);
-axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48Inv(x)} DebugActive___unnamed_1_2dc63b48Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DebugActive___unnamed_1_2dc63b48Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DebugActive___unnamed_1_2dc63b48Inv(x));
-function Delay__KEYBOARD_TYPEMATIC_PARAMETERS(int) returns (int);
-function Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(int) returns (int);
-function _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS([int]bool) returns ([int]bool);
-function _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x))} Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)) == x);
-axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Delay__KEYBOARD_TYPEMATIC_PARAMETERS(Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x]} _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x] <==> S[Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x]} _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x] <==> S[Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)} S[x] ==> _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)[Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)} S[x] ==> _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
-
-axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)} Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x) == x + 4);
-axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
-function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
-function DeviceState__DEVICE_EXTENSION(int) returns (int);
-function DeviceState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x))} DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSION(DeviceState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSION(S)[x]} _S_DeviceState__DEVICE_EXTENSION(S)[x] <==> S[DeviceState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_DeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[DeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSION(S)[DeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSIONInv(S)[DeviceState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSION(x)} DeviceState__DEVICE_EXTENSION(x) == x + 188);
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSIONInv(x) == x - 188);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 188, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 188, 1) == DeviceState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 188)} MINUS_LEFT_PTR(x, 1, 188) == DeviceState__DEVICE_EXTENSIONInv(x));
-function DpcActive___unnamed_1_2dc63b48(int) returns (int);
-function DpcActive___unnamed_1_2dc63b48Inv(int) returns (int);
-function _S_DpcActive___unnamed_1_2dc63b48([int]bool) returns ([int]bool);
-function _S_DpcActive___unnamed_1_2dc63b48Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48Inv(DpcActive___unnamed_1_2dc63b48(x))} DpcActive___unnamed_1_2dc63b48Inv(DpcActive___unnamed_1_2dc63b48(x)) == x);
-axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48Inv(x)} DpcActive___unnamed_1_2dc63b48(DpcActive___unnamed_1_2dc63b48Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_2dc63b48(S)[x]} _S_DpcActive___unnamed_1_2dc63b48(S)[x] <==> S[DpcActive___unnamed_1_2dc63b48Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_2dc63b48Inv(S)[x]} _S_DpcActive___unnamed_1_2dc63b48Inv(S)[x] <==> S[DpcActive___unnamed_1_2dc63b48(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_2dc63b48(S)} S[x] ==> _S_DpcActive___unnamed_1_2dc63b48(S)[DpcActive___unnamed_1_2dc63b48(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_2dc63b48Inv(S)} S[x] ==> _S_DpcActive___unnamed_1_2dc63b48Inv(S)[DpcActive___unnamed_1_2dc63b48Inv(x)]);
-
-axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48(x)} DpcActive___unnamed_1_2dc63b48(x) == x + 0);
-axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48Inv(x)} DpcActive___unnamed_1_2dc63b48Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DpcActive___unnamed_1_2dc63b48Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DpcActive___unnamed_1_2dc63b48Inv(x));
-function Enabled__DEVICE_EXTENSION(int) returns (int);
-function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 284);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 284);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1) == Enabled__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 284)} MINUS_LEFT_PTR(x, 1, 284) == Enabled__DEVICE_EXTENSIONInv(x));
-function ExecuteWmiMethod__WMILIB_CONTEXT(int) returns (int);
-function ExecuteWmiMethod__WMILIB_CONTEXTInv(int) returns (int);
-function _S_ExecuteWmiMethod__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_ExecuteWmiMethod__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x))} ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXT(ExecuteWmiMethod__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXT(x)} ExecuteWmiMethod__WMILIB_CONTEXT(x) == x + 24);
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXTInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
-function ExtraWaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
-function ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_ExtraWaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x))} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSION(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(x) == x + 264);
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 264);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 264)} MINUS_LEFT_PTR(x, 1, 264) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
-function File__DEVICE_EXTENSION(int) returns (int);
-function File__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 280);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 280);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1) == File__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 280)} MINUS_LEFT_PTR(x, 1, 280) == File__DEVICE_EXTENSIONInv(x));
-function Flags__DEVICE_OBJECT(int) returns (int);
-function Flags__DEVICE_OBJECTInv(int) returns (int);
-function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
-function Flink__LIST_ENTRY(int) returns (int);
-function Flink__LIST_ENTRYInv(int) returns (int);
-function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
-function GrandMaster__GLOBALS(int) returns (int);
-function GrandMaster__GLOBALSInv(int) returns (int);
-function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
-function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
-function GuidCount__WMILIB_CONTEXT(int) returns (int);
-function GuidCount__WMILIB_CONTEXTInv(int) returns (int);
-function _S_GuidCount__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_GuidCount__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x))} GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXT(GuidCount__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXT(S)[x]} _S_GuidCount__WMILIB_CONTEXT(S)[x] <==> S[GuidCount__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXTInv(S)[x]} _S_GuidCount__WMILIB_CONTEXTInv(S)[x] <==> S[GuidCount__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXT(S)[GuidCount__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXTInv(S)[GuidCount__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXT(x)} GuidCount__WMILIB_CONTEXT(x) == x + 0);
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == GuidCount__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == GuidCount__WMILIB_CONTEXTInv(x));
-function GuidList__WMILIB_CONTEXT(int) returns (int);
-function GuidList__WMILIB_CONTEXTInv(int) returns (int);
-function _S_GuidList__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_GuidList__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x))} GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXT(GuidList__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXT(S)[x]} _S_GuidList__WMILIB_CONTEXT(S)[x] <==> S[GuidList__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXTInv(S)[x]} _S_GuidList__WMILIB_CONTEXTInv(S)[x] <==> S[GuidList__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXT(S)[GuidList__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXTInv(S)[GuidList__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXT(x)} GuidList__WMILIB_CONTEXT(x) == x + 4);
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXTInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GuidList__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GuidList__WMILIB_CONTEXTInv(x));
-function Hand___unnamed_1_2ef8da39(int) returns (int);
-function Hand___unnamed_1_2ef8da39Inv(int) returns (int);
-function _S_Hand___unnamed_1_2ef8da39([int]bool) returns ([int]bool);
-function _S_Hand___unnamed_1_2ef8da39Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Hand___unnamed_1_2ef8da39Inv(Hand___unnamed_1_2ef8da39(x))} Hand___unnamed_1_2ef8da39Inv(Hand___unnamed_1_2ef8da39(x)) == x);
-axiom (forall x:int :: {Hand___unnamed_1_2ef8da39Inv(x)} Hand___unnamed_1_2ef8da39(Hand___unnamed_1_2ef8da39Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_2ef8da39(S)[x]} _S_Hand___unnamed_1_2ef8da39(S)[x] <==> S[Hand___unnamed_1_2ef8da39Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_2ef8da39Inv(S)[x]} _S_Hand___unnamed_1_2ef8da39Inv(S)[x] <==> S[Hand___unnamed_1_2ef8da39(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_2ef8da39(S)} S[x] ==> _S_Hand___unnamed_1_2ef8da39(S)[Hand___unnamed_1_2ef8da39(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_2ef8da39Inv(S)} S[x] ==> _S_Hand___unnamed_1_2ef8da39Inv(S)[Hand___unnamed_1_2ef8da39Inv(x)]);
-
-axiom (forall x:int :: {Hand___unnamed_1_2ef8da39(x)} Hand___unnamed_1_2ef8da39(x) == x + 0);
-axiom (forall x:int :: {Hand___unnamed_1_2ef8da39Inv(x)} Hand___unnamed_1_2ef8da39Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Hand___unnamed_1_2ef8da39Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Hand___unnamed_1_2ef8da39Inv(x));
-function Header__KEVENT(int) returns (int);
-function Header__KEVENTInv(int) returns (int);
-function _S_Header__KEVENT([int]bool) returns ([int]bool);
-function _S_Header__KEVENTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Header__KEVENTInv(Header__KEVENT(x))} Header__KEVENTInv(Header__KEVENT(x)) == x);
-axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENT(Header__KEVENTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENT(S)[x]} _S_Header__KEVENT(S)[x] <==> S[Header__KEVENTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENTInv(S)[x]} _S_Header__KEVENTInv(S)[x] <==> S[Header__KEVENT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENT(S)} S[x] ==> _S_Header__KEVENT(S)[Header__KEVENT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENTInv(S)} S[x] ==> _S_Header__KEVENTInv(S)[Header__KEVENTInv(x)]);
-
-axiom (forall x:int :: {Header__KEVENT(x)} Header__KEVENT(x) == x + 0);
-axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Header__KEVENTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Header__KEVENTInv(x));
-function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x))} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 4);
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function IndicatorParameters__DEVICE_EXTENSION(int) returns (int);
-function IndicatorParameters__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_IndicatorParameters__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_IndicatorParameters__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSIONInv(IndicatorParameters__DEVICE_EXTENSION(x))} IndicatorParameters__DEVICE_EXTENSIONInv(IndicatorParameters__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSIONInv(x)} IndicatorParameters__DEVICE_EXTENSION(IndicatorParameters__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_IndicatorParameters__DEVICE_EXTENSION(S)[x]} _S_IndicatorParameters__DEVICE_EXTENSION(S)[x] <==> S[IndicatorParameters__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_IndicatorParameters__DEVICE_EXTENSIONInv(S)[x]} _S_IndicatorParameters__DEVICE_EXTENSIONInv(S)[x] <==> S[IndicatorParameters__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_IndicatorParameters__DEVICE_EXTENSION(S)} S[x] ==> _S_IndicatorParameters__DEVICE_EXTENSION(S)[IndicatorParameters__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_IndicatorParameters__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_IndicatorParameters__DEVICE_EXTENSIONInv(S)[IndicatorParameters__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSION(x)} IndicatorParameters__DEVICE_EXTENSION(x) == x + 168);
-axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSIONInv(x)} IndicatorParameters__DEVICE_EXTENSIONInv(x) == x - 168);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1) == IndicatorParameters__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 168)} MINUS_LEFT_PTR(x, 1, 168) == IndicatorParameters__DEVICE_EXTENSIONInv(x));
-function InputCount__DEVICE_EXTENSION(int) returns (int);
-function InputCount__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x))} InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSION(InputCount__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSION(S)[x]} _S_InputCount__DEVICE_EXTENSION(S)[x] <==> S[InputCount__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSIONInv(S)[x]} _S_InputCount__DEVICE_EXTENSIONInv(S)[x] <==> S[InputCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSION(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSION(S)[InputCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSIONInv(S)[InputCount__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSION(x)} InputCount__DEVICE_EXTENSION(x) == x + 116);
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSIONInv(x) == x - 116);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1) == InputCount__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 116)} MINUS_LEFT_PTR(x, 1, 116) == InputCount__DEVICE_EXTENSIONInv(x));
-function InputDataQueueLength__KEYBOARD_ATTRIBUTES(int) returns (int);
-function InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(InputDataQueueLength__KEYBOARD_ATTRIBUTES(x))} InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)} InputDataQueueLength__KEYBOARD_ATTRIBUTES(InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)[x]} _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)[x] <==> S[InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)[InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)[InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)} InputDataQueueLength__KEYBOARD_ATTRIBUTES(x) == x + 12);
-axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)} InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x) == x - 12);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x));
-function InputData__DEVICE_EXTENSION(int) returns (int);
-function InputData__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
-function Inserted___unnamed_1_2dc63b48(int) returns (int);
-function Inserted___unnamed_1_2dc63b48Inv(int) returns (int);
-function _S_Inserted___unnamed_1_2dc63b48([int]bool) returns ([int]bool);
-function _S_Inserted___unnamed_1_2dc63b48Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48Inv(Inserted___unnamed_1_2dc63b48(x))} Inserted___unnamed_1_2dc63b48Inv(Inserted___unnamed_1_2dc63b48(x)) == x);
-axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48Inv(x)} Inserted___unnamed_1_2dc63b48(Inserted___unnamed_1_2dc63b48Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_2dc63b48(S)[x]} _S_Inserted___unnamed_1_2dc63b48(S)[x] <==> S[Inserted___unnamed_1_2dc63b48Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_2dc63b48Inv(S)[x]} _S_Inserted___unnamed_1_2dc63b48Inv(S)[x] <==> S[Inserted___unnamed_1_2dc63b48(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_2dc63b48(S)} S[x] ==> _S_Inserted___unnamed_1_2dc63b48(S)[Inserted___unnamed_1_2dc63b48(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_2dc63b48Inv(S)} S[x] ==> _S_Inserted___unnamed_1_2dc63b48Inv(S)[Inserted___unnamed_1_2dc63b48Inv(x)]);
-
-axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48(x)} Inserted___unnamed_1_2dc63b48(x) == x + 0);
-axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48Inv(x)} Inserted___unnamed_1_2dc63b48Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Inserted___unnamed_1_2dc63b48Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Inserted___unnamed_1_2dc63b48Inv(x));
-function IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x))} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 4);
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(int) returns (int);
-function KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x))} KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)[KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)[KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)} KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x) == x + 22);
-axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x) == x - 22);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 22, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 22, 1) == KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 22)} MINUS_LEFT_PTR(x, 1, 22) == KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x));
-function KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(int) returns (int);
-function KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x))} KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)[KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)[KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)} KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x) == x + 16);
-axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x) == x - 16);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x));
-function KeyboardAttributes__DEVICE_EXTENSION(int) returns (int);
-function KeyboardAttributes__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_KeyboardAttributes__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_KeyboardAttributes__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSIONInv(KeyboardAttributes__DEVICE_EXTENSION(x))} KeyboardAttributes__DEVICE_EXTENSIONInv(KeyboardAttributes__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSIONInv(x)} KeyboardAttributes__DEVICE_EXTENSION(KeyboardAttributes__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_KeyboardAttributes__DEVICE_EXTENSION(S)[x]} _S_KeyboardAttributes__DEVICE_EXTENSION(S)[x] <==> S[KeyboardAttributes__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)[x]} _S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)[x] <==> S[KeyboardAttributes__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardAttributes__DEVICE_EXTENSION(S)} S[x] ==> _S_KeyboardAttributes__DEVICE_EXTENSION(S)[KeyboardAttributes__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)[KeyboardAttributes__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSION(x)} KeyboardAttributes__DEVICE_EXTENSION(x) == x + 140);
-axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSIONInv(x)} KeyboardAttributes__DEVICE_EXTENSIONInv(x) == x - 140);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1) == KeyboardAttributes__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 140)} MINUS_LEFT_PTR(x, 1, 140) == KeyboardAttributes__DEVICE_EXTENSIONInv(x));
-function KeyboardIdentifier__KEYBOARD_ATTRIBUTES(int) returns (int);
-function KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x))} KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)} KeyboardIdentifier__KEYBOARD_ATTRIBUTES(KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)[KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)[KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)} KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x) == x + 0);
-axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)} KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x));
-function KeyboardMode__KEYBOARD_ATTRIBUTES(int) returns (int);
-function KeyboardMode__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_KeyboardMode__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTESInv(KeyboardMode__KEYBOARD_ATTRIBUTES(x))} KeyboardMode__KEYBOARD_ATTRIBUTESInv(KeyboardMode__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)} KeyboardMode__KEYBOARD_ATTRIBUTES(KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyboardMode__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)[KeyboardMode__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)[KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTES(x)} KeyboardMode__KEYBOARD_ATTRIBUTES(x) == x + 2);
-axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)} KeyboardMode__KEYBOARD_ATTRIBUTESInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == KeyboardMode__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == KeyboardMode__KEYBOARD_ATTRIBUTESInv(x));
-function LedFlags__KEYBOARD_INDICATOR_PARAMETERS(int) returns (int);
-function LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(int) returns (int);
-function _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS([int]bool) returns ([int]bool);
-function _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x))} LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)) == x);
-axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)} LedFlags__KEYBOARD_INDICATOR_PARAMETERS(LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)[x]} _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)[x] <==> S[LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x]} _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x] <==> S[LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)} S[x] ==> _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)[LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)} S[x] ==> _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)[LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
-
-axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)} LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x) == x + 2);
-axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)} LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x));
-function LegacyDeviceList__GLOBALS(int) returns (int);
-function LegacyDeviceList__GLOBALSInv(int) returns (int);
-function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
-function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 888);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 888);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1) == LegacyDeviceList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 888)} MINUS_LEFT_PTR(x, 1, 888) == LegacyDeviceList__GLOBALSInv(x));
-function Length__UNICODE_STRING(int) returns (int);
-function Length__UNICODE_STRINGInv(int) returns (int);
-function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
-function Link__DEVICE_EXTENSION(int) returns (int);
-function Link__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 272);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 272);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1) == Link__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 272)} MINUS_LEFT_PTR(x, 1, 272) == Link__DEVICE_EXTENSIONInv(x));
-function LockList__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x))} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 20);
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 20);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Lock___unnamed_4_a97c65a1(int) returns (int);
-function Lock___unnamed_4_a97c65a1Inv(int) returns (int);
-function _S_Lock___unnamed_4_a97c65a1([int]bool) returns ([int]bool);
-function _S_Lock___unnamed_4_a97c65a1Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Lock___unnamed_4_a97c65a1Inv(Lock___unnamed_4_a97c65a1(x))} Lock___unnamed_4_a97c65a1Inv(Lock___unnamed_4_a97c65a1(x)) == x);
-axiom (forall x:int :: {Lock___unnamed_4_a97c65a1Inv(x)} Lock___unnamed_4_a97c65a1(Lock___unnamed_4_a97c65a1Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_a97c65a1(S)[x]} _S_Lock___unnamed_4_a97c65a1(S)[x] <==> S[Lock___unnamed_4_a97c65a1Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_a97c65a1Inv(S)[x]} _S_Lock___unnamed_4_a97c65a1Inv(S)[x] <==> S[Lock___unnamed_4_a97c65a1(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_a97c65a1(S)} S[x] ==> _S_Lock___unnamed_4_a97c65a1(S)[Lock___unnamed_4_a97c65a1(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_a97c65a1Inv(S)} S[x] ==> _S_Lock___unnamed_4_a97c65a1Inv(S)[Lock___unnamed_4_a97c65a1Inv(x)]);
-
-axiom (forall x:int :: {Lock___unnamed_4_a97c65a1(x)} Lock___unnamed_4_a97c65a1(x) == x + 0);
-axiom (forall x:int :: {Lock___unnamed_4_a97c65a1Inv(x)} Lock___unnamed_4_a97c65a1Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Lock___unnamed_4_a97c65a1Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Lock___unnamed_4_a97c65a1Inv(x));
-function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x))} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 32);
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 32);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 32)} MINUS_LEFT_PTR(x, 1, 32) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x))} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 8);
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function MaximumLength__UNICODE_STRING(int) returns (int);
-function MaximumLength__UNICODE_STRINGInv(int) returns (int);
-function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
-function MinDeviceWakeState__DEVICE_EXTENSION(int) returns (int);
-function MinDeviceWakeState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_MinDeviceWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_MinDeviceWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x))} MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSION(MinDeviceWakeState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSION(x)} MinDeviceWakeState__DEVICE_EXTENSION(x) == x + 252);
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSIONInv(x) == x - 252);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
-function MinSystemWakeState__DEVICE_EXTENSION(int) returns (int);
-function MinSystemWakeState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_MinSystemWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_MinSystemWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x))} MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSION(MinSystemWakeState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSION(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSION(S)[MinSystemWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSION(x)} MinSystemWakeState__DEVICE_EXTENSION(x) == x + 256);
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSIONInv(x) == x - 256);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 256, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 256, 1) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 256)} MINUS_LEFT_PTR(x, 1, 256) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
-function Mutex__GLOBALS(int) returns (int);
-function Mutex__GLOBALSInv(int) returns (int);
-function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
-function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
-function NpxIrql___unnamed_1_29794256(int) returns (int);
-function NpxIrql___unnamed_1_29794256Inv(int) returns (int);
-function _S_NpxIrql___unnamed_1_29794256([int]bool) returns ([int]bool);
-function _S_NpxIrql___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NpxIrql___unnamed_1_29794256Inv(NpxIrql___unnamed_1_29794256(x))} NpxIrql___unnamed_1_29794256Inv(NpxIrql___unnamed_1_29794256(x)) == x);
-axiom (forall x:int :: {NpxIrql___unnamed_1_29794256Inv(x)} NpxIrql___unnamed_1_29794256(NpxIrql___unnamed_1_29794256Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_29794256(S)[x]} _S_NpxIrql___unnamed_1_29794256(S)[x] <==> S[NpxIrql___unnamed_1_29794256Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_29794256Inv(S)[x]} _S_NpxIrql___unnamed_1_29794256Inv(S)[x] <==> S[NpxIrql___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_29794256(S)} S[x] ==> _S_NpxIrql___unnamed_1_29794256(S)[NpxIrql___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_29794256Inv(S)} S[x] ==> _S_NpxIrql___unnamed_1_29794256Inv(S)[NpxIrql___unnamed_1_29794256Inv(x)]);
-
-axiom (forall x:int :: {NpxIrql___unnamed_1_29794256(x)} NpxIrql___unnamed_1_29794256(x) == x + 0);
-axiom (forall x:int :: {NpxIrql___unnamed_1_29794256Inv(x)} NpxIrql___unnamed_1_29794256Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == NpxIrql___unnamed_1_29794256Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == NpxIrql___unnamed_1_29794256Inv(x));
-function NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(int) returns (int);
-function NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x))} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)[x]} _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)[x] <==> S[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x) == x + 4);
-axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x));
-function NumberOfIndicators__KEYBOARD_ATTRIBUTES(int) returns (int);
-function NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(NumberOfIndicators__KEYBOARD_ATTRIBUTES(x))} NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)} NumberOfIndicators__KEYBOARD_ATTRIBUTES(NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)[x]} _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)[x] <==> S[NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)[NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)[NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)} NumberOfIndicators__KEYBOARD_ATTRIBUTES(x) == x + 6);
-axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)} NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x) == x - 6);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 6, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 6, 1) == NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 6)} MINUS_LEFT_PTR(x, 1, 6) == NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x));
-function NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(int) returns (int);
-function NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(int) returns (int);
-function _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x))} NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)} NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)[x]} _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)[x] <==> S[NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)[NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)[NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)} NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x) == x + 8);
-axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)} NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x));
-function OkayToLogOverflow__DEVICE_EXTENSION(int) returns (int);
-function OkayToLogOverflow__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_OkayToLogOverflow__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_OkayToLogOverflow__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x))} OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSION(OkayToLogOverflow__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSION(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSION(x)} OkayToLogOverflow__DEVICE_EXTENSION(x) == x + 285);
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSIONInv(x) == x - 285);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 285, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 285, 1) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 285)} MINUS_LEFT_PTR(x, 1, 285) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
-function PDO__DEVICE_EXTENSION(int) returns (int);
-function PDO__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PDO__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PDO__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x))} PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSION(PDO__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSION(S)[x]} _S_PDO__DEVICE_EXTENSION(S)[x] <==> S[PDO__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSIONInv(S)[x]} _S_PDO__DEVICE_EXTENSIONInv(S)[x] <==> S[PDO__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSION(S)} S[x] ==> _S_PDO__DEVICE_EXTENSION(S)[PDO__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PDO__DEVICE_EXTENSIONInv(S)[PDO__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PDO__DEVICE_EXTENSION(x)} PDO__DEVICE_EXTENSION(x) == x + 12);
-axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSIONInv(x) == x - 12);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == PDO__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == PDO__DEVICE_EXTENSIONInv(x));
-function PnP__DEVICE_EXTENSION(int) returns (int);
-function PnP__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
-function QueryWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
-function QueryWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
-function _S_QueryWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_QueryWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x))} QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXT(QueryWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXT(x)} QueryWmiDataBlock__WMILIB_CONTEXT(x) == x + 12);
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 12);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
-function QueryWmiRegInfo__WMILIB_CONTEXT(int) returns (int);
-function QueryWmiRegInfo__WMILIB_CONTEXTInv(int) returns (int);
-function _S_QueryWmiRegInfo__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_QueryWmiRegInfo__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x))} QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXT(QueryWmiRegInfo__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXT(x)} QueryWmiRegInfo__WMILIB_CONTEXT(x) == x + 8);
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXTInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
-function Rate__KEYBOARD_TYPEMATIC_PARAMETERS(int) returns (int);
-function Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(int) returns (int);
-function _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS([int]bool) returns ([int]bool);
-function _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x))} Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)) == x);
-axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Rate__KEYBOARD_TYPEMATIC_PARAMETERS(Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x]} _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x] <==> S[Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x]} _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x] <==> S[Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)} S[x] ==> _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)[Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)} S[x] ==> _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
-
-axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)} Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x) == x + 2);
-axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
-function ReadQueue__DEVICE_EXTENSION(int) returns (int);
-function ReadQueue__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_ReadQueue__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_ReadQueue__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x))} ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSION(ReadQueue__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSION(S)[x]} _S_ReadQueue__DEVICE_EXTENSION(S)[x] <==> S[ReadQueue__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSIONInv(S)[x]} _S_ReadQueue__DEVICE_EXTENSIONInv(S)[x] <==> S[ReadQueue__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSION(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSION(S)[ReadQueue__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSIONInv(S)[ReadQueue__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSION(x)} ReadQueue__DEVICE_EXTENSION(x) == x + 176);
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSIONInv(x) == x - 176);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == ReadQueue__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == ReadQueue__DEVICE_EXTENSIONInv(x));
-function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x))} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 8);
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function RemoveLock__DEVICE_EXTENSION(int) returns (int);
-function RemoveLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_RemoveLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_RemoveLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x))} RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSION(RemoveLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSION(S)[x]} _S_RemoveLock__DEVICE_EXTENSION(S)[x] <==> S[RemoveLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSIONInv(S)[x]} _S_RemoveLock__DEVICE_EXTENSIONInv(S)[x] <==> S[RemoveLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSION(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSION(S)[RemoveLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSIONInv(S)[RemoveLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSION(x)} RemoveLock__DEVICE_EXTENSION(x) == x + 16);
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSIONInv(x) == x - 16);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == RemoveLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == RemoveLock__DEVICE_EXTENSIONInv(x));
-function Removed__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 0);
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 36);
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 36);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 36)} MINUS_LEFT_PTR(x, 1, 36) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 52);
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 52);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 52)} MINUS_LEFT_PTR(x, 1, 52) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 1);
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 1);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function Self__DEVICE_EXTENSION(int) returns (int);
-function Self__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
-function SequenceNumber__DEVICE_EXTENSION(int) returns (int);
-function SequenceNumber__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SequenceNumber__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SequenceNumber__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x))} SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSION(SequenceNumber__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSION(S)[x]} _S_SequenceNumber__DEVICE_EXTENSION(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x]} _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSION(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSION(S)[SequenceNumber__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSION(x)} SequenceNumber__DEVICE_EXTENSION(x) == x + 184);
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSIONInv(x) == x - 184);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 184, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 184, 1) == SequenceNumber__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 184)} MINUS_LEFT_PTR(x, 1, 184) == SequenceNumber__DEVICE_EXTENSIONInv(x));
-function SetWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
-function SetWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
-function _S_SetWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_SetWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x))} SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXT(SetWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXT(x)} SetWmiDataBlock__WMILIB_CONTEXT(x) == x + 16);
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 16);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
-function SetWmiDataItem__WMILIB_CONTEXT(int) returns (int);
-function SetWmiDataItem__WMILIB_CONTEXTInv(int) returns (int);
-function _S_SetWmiDataItem__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_SetWmiDataItem__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x))} SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXT(SetWmiDataItem__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXT(S)[SetWmiDataItem__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXT(x)} SetWmiDataItem__WMILIB_CONTEXT(x) == x + 20);
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXTInv(x) == x - 20);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
-function SignalState__DISPATCHER_HEADER(int) returns (int);
-function SignalState__DISPATCHER_HEADERInv(int) returns (int);
-function _S_SignalState__DISPATCHER_HEADER([int]bool) returns ([int]bool);
-function _S_SignalState__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x))} SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x)) == x);
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADER(SignalState__DISPATCHER_HEADERInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADER(S)[x]} _S_SignalState__DISPATCHER_HEADER(S)[x] <==> S[SignalState__DISPATCHER_HEADERInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADERInv(S)[x]} _S_SignalState__DISPATCHER_HEADERInv(S)[x] <==> S[SignalState__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADER(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADER(S)[SignalState__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADERInv(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADERInv(S)[SignalState__DISPATCHER_HEADERInv(x)]);
-
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADER(x)} SignalState__DISPATCHER_HEADER(x) == x + 4);
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADERInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == SignalState__DISPATCHER_HEADERInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == SignalState__DISPATCHER_HEADERInv(x));
-function Signalling___unnamed_1_29794256(int) returns (int);
-function Signalling___unnamed_1_29794256Inv(int) returns (int);
-function _S_Signalling___unnamed_1_29794256([int]bool) returns ([int]bool);
-function _S_Signalling___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Signalling___unnamed_1_29794256Inv(Signalling___unnamed_1_29794256(x))} Signalling___unnamed_1_29794256Inv(Signalling___unnamed_1_29794256(x)) == x);
-axiom (forall x:int :: {Signalling___unnamed_1_29794256Inv(x)} Signalling___unnamed_1_29794256(Signalling___unnamed_1_29794256Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_29794256(S)[x]} _S_Signalling___unnamed_1_29794256(S)[x] <==> S[Signalling___unnamed_1_29794256Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_29794256Inv(S)[x]} _S_Signalling___unnamed_1_29794256Inv(S)[x] <==> S[Signalling___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_29794256(S)} S[x] ==> _S_Signalling___unnamed_1_29794256(S)[Signalling___unnamed_1_29794256(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_29794256Inv(S)} S[x] ==> _S_Signalling___unnamed_1_29794256Inv(S)[Signalling___unnamed_1_29794256Inv(x)]);
-
-axiom (forall x:int :: {Signalling___unnamed_1_29794256(x)} Signalling___unnamed_1_29794256(x) == x + 0);
-axiom (forall x:int :: {Signalling___unnamed_1_29794256Inv(x)} Signalling___unnamed_1_29794256Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signalling___unnamed_1_29794256Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signalling___unnamed_1_29794256Inv(x));
-function Signature__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x))} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 0);
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Size___unnamed_1_2ef8da39(int) returns (int);
-function Size___unnamed_1_2ef8da39Inv(int) returns (int);
-function _S_Size___unnamed_1_2ef8da39([int]bool) returns ([int]bool);
-function _S_Size___unnamed_1_2ef8da39Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Size___unnamed_1_2ef8da39Inv(Size___unnamed_1_2ef8da39(x))} Size___unnamed_1_2ef8da39Inv(Size___unnamed_1_2ef8da39(x)) == x);
-axiom (forall x:int :: {Size___unnamed_1_2ef8da39Inv(x)} Size___unnamed_1_2ef8da39(Size___unnamed_1_2ef8da39Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_2ef8da39(S)[x]} _S_Size___unnamed_1_2ef8da39(S)[x] <==> S[Size___unnamed_1_2ef8da39Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_2ef8da39Inv(S)[x]} _S_Size___unnamed_1_2ef8da39Inv(S)[x] <==> S[Size___unnamed_1_2ef8da39(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_2ef8da39(S)} S[x] ==> _S_Size___unnamed_1_2ef8da39(S)[Size___unnamed_1_2ef8da39(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_2ef8da39Inv(S)} S[x] ==> _S_Size___unnamed_1_2ef8da39Inv(S)[Size___unnamed_1_2ef8da39Inv(x)]);
-
-axiom (forall x:int :: {Size___unnamed_1_2ef8da39(x)} Size___unnamed_1_2ef8da39(x) == x + 0);
-axiom (forall x:int :: {Size___unnamed_1_2ef8da39Inv(x)} Size___unnamed_1_2ef8da39Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Size___unnamed_1_2ef8da39Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Size___unnamed_1_2ef8da39Inv(x));
-function SpinLock__DEVICE_EXTENSION(int) returns (int);
-function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 172);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 172);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 172)} MINUS_LEFT_PTR(x, 1, 172) == SpinLock__DEVICE_EXTENSIONInv(x));
-function Spin__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x))} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 28);
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Started__DEVICE_EXTENSION(int) returns (int);
-function Started__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
-function Subtype__KEYBOARD_ID(int) returns (int);
-function Subtype__KEYBOARD_IDInv(int) returns (int);
-function _S_Subtype__KEYBOARD_ID([int]bool) returns ([int]bool);
-function _S_Subtype__KEYBOARD_IDInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Subtype__KEYBOARD_IDInv(Subtype__KEYBOARD_ID(x))} Subtype__KEYBOARD_IDInv(Subtype__KEYBOARD_ID(x)) == x);
-axiom (forall x:int :: {Subtype__KEYBOARD_IDInv(x)} Subtype__KEYBOARD_ID(Subtype__KEYBOARD_IDInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Subtype__KEYBOARD_ID(S)[x]} _S_Subtype__KEYBOARD_ID(S)[x] <==> S[Subtype__KEYBOARD_IDInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Subtype__KEYBOARD_IDInv(S)[x]} _S_Subtype__KEYBOARD_IDInv(S)[x] <==> S[Subtype__KEYBOARD_ID(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Subtype__KEYBOARD_ID(S)} S[x] ==> _S_Subtype__KEYBOARD_ID(S)[Subtype__KEYBOARD_ID(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Subtype__KEYBOARD_IDInv(S)} S[x] ==> _S_Subtype__KEYBOARD_IDInv(S)[Subtype__KEYBOARD_IDInv(x)]);
-
-axiom (forall x:int :: {Subtype__KEYBOARD_ID(x)} Subtype__KEYBOARD_ID(x) == x + 1);
-axiom (forall x:int :: {Subtype__KEYBOARD_IDInv(x)} Subtype__KEYBOARD_IDInv(x) == x - 1);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == Subtype__KEYBOARD_IDInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == Subtype__KEYBOARD_IDInv(x));
-function SurpriseRemoved__DEVICE_EXTENSION(int) returns (int);
-function SurpriseRemoved__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SurpriseRemoved__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SurpriseRemoved__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x))} SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSION(SurpriseRemoved__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSION(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSION(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSION(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSION(S)[SurpriseRemoved__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSION(x)} SurpriseRemoved__DEVICE_EXTENSION(x) == x + 287);
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSIONInv(x) == x - 287);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 287, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 287, 1) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 287)} MINUS_LEFT_PTR(x, 1, 287) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
-function SymbolicLinkName__DEVICE_EXTENSION(int) returns (int);
-function SymbolicLinkName__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SymbolicLinkName__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SymbolicLinkName__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x))} SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSION(SymbolicLinkName__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSION(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSION(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSION(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSION(S)[SymbolicLinkName__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSION(x)} SymbolicLinkName__DEVICE_EXTENSION(x) == x + 120);
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSIONInv(x) == x - 120);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 120)} MINUS_LEFT_PTR(x, 1, 120) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
-function SystemState__DEVICE_EXTENSION(int) returns (int);
-function SystemState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SystemState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SystemState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x))} SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSION(SystemState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSION(S)[x]} _S_SystemState__DEVICE_EXTENSION(S)[x] <==> S[SystemState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSION(S)[SystemState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSIONInv(S)[SystemState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSION(x)} SystemState__DEVICE_EXTENSION(x) == x + 192);
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSIONInv(x) == x - 192);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 192, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 192, 1) == SystemState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 192)} MINUS_LEFT_PTR(x, 1, 192) == SystemState__DEVICE_EXTENSIONInv(x));
-function SystemToDeviceState__DEVICE_EXTENSION(int) returns (int);
-function SystemToDeviceState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SystemToDeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SystemToDeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x))} SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSION(SystemToDeviceState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSION(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSION(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSION(S)[SystemToDeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSION(x)} SystemToDeviceState__DEVICE_EXTENSION(x) == x + 232);
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSIONInv(x) == x - 232);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 232)} MINUS_LEFT_PTR(x, 1, 232) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
-function TargetNotifyHandle__DEVICE_EXTENSION(int) returns (int);
-function TargetNotifyHandle__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TargetNotifyHandle__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TargetNotifyHandle__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x))} TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSION(TargetNotifyHandle__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSION(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSION(x)} TargetNotifyHandle__DEVICE_EXTENSION(x) == x + 268);
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSIONInv(x) == x - 268);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 268, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 268, 1) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 268)} MINUS_LEFT_PTR(x, 1, 268) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
-function TopPort__DEVICE_EXTENSION(int) returns (int);
-function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
-function TrueClassDevice__DEVICE_EXTENSION(int) returns (int);
-function TrueClassDevice__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TrueClassDevice__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TrueClassDevice__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x))} TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSION(TrueClassDevice__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSION(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSION(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSION(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSION(S)[TrueClassDevice__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSION(x)} TrueClassDevice__DEVICE_EXTENSION(x) == x + 4);
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSIONInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
-function TrustedSubsystemCount__DEVICE_EXTENSION(int) returns (int);
-function TrustedSubsystemCount__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TrustedSubsystemCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x))} TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSION(TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSION(x)} TrustedSubsystemCount__DEVICE_EXTENSION(x) == x + 112);
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSIONInv(x) == x - 112);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 112)} MINUS_LEFT_PTR(x, 1, 112) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
-function Type__KEYBOARD_ID(int) returns (int);
-function Type__KEYBOARD_IDInv(int) returns (int);
-function _S_Type__KEYBOARD_ID([int]bool) returns ([int]bool);
-function _S_Type__KEYBOARD_IDInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Type__KEYBOARD_IDInv(Type__KEYBOARD_ID(x))} Type__KEYBOARD_IDInv(Type__KEYBOARD_ID(x)) == x);
-axiom (forall x:int :: {Type__KEYBOARD_IDInv(x)} Type__KEYBOARD_ID(Type__KEYBOARD_IDInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Type__KEYBOARD_ID(S)[x]} _S_Type__KEYBOARD_ID(S)[x] <==> S[Type__KEYBOARD_IDInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Type__KEYBOARD_IDInv(S)[x]} _S_Type__KEYBOARD_IDInv(S)[x] <==> S[Type__KEYBOARD_ID(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Type__KEYBOARD_ID(S)} S[x] ==> _S_Type__KEYBOARD_ID(S)[Type__KEYBOARD_ID(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Type__KEYBOARD_IDInv(S)} S[x] ==> _S_Type__KEYBOARD_IDInv(S)[Type__KEYBOARD_IDInv(x)]);
-
-axiom (forall x:int :: {Type__KEYBOARD_ID(x)} Type__KEYBOARD_ID(x) == x + 0);
-axiom (forall x:int :: {Type__KEYBOARD_IDInv(x)} Type__KEYBOARD_IDInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Type__KEYBOARD_IDInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Type__KEYBOARD_IDInv(x));
-function Type___unnamed_4_5ca00198(int) returns (int);
-function Type___unnamed_4_5ca00198Inv(int) returns (int);
-function _S_Type___unnamed_4_5ca00198([int]bool) returns ([int]bool);
-function _S_Type___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Type___unnamed_4_5ca00198Inv(Type___unnamed_4_5ca00198(x))} Type___unnamed_4_5ca00198Inv(Type___unnamed_4_5ca00198(x)) == x);
-axiom (forall x:int :: {Type___unnamed_4_5ca00198Inv(x)} Type___unnamed_4_5ca00198(Type___unnamed_4_5ca00198Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_5ca00198(S)[x]} _S_Type___unnamed_4_5ca00198(S)[x] <==> S[Type___unnamed_4_5ca00198Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_5ca00198Inv(S)[x]} _S_Type___unnamed_4_5ca00198Inv(S)[x] <==> S[Type___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_5ca00198(S)} S[x] ==> _S_Type___unnamed_4_5ca00198(S)[Type___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_5ca00198Inv(S)} S[x] ==> _S_Type___unnamed_4_5ca00198Inv(S)[Type___unnamed_4_5ca00198Inv(x)]);
-
-axiom (forall x:int :: {Type___unnamed_4_5ca00198(x)} Type___unnamed_4_5ca00198(x) == x + 0);
-axiom (forall x:int :: {Type___unnamed_4_5ca00198Inv(x)} Type___unnamed_4_5ca00198Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Type___unnamed_4_5ca00198Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Type___unnamed_4_5ca00198Inv(x));
-function UnitId__DEVICE_EXTENSION(int) returns (int);
-function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 196);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 196);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1) == UnitId__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 196)} MINUS_LEFT_PTR(x, 1, 196) == UnitId__DEVICE_EXTENSIONInv(x));
-function UnitId__KEYBOARD_INDICATOR_PARAMETERS(int) returns (int);
-function UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(int) returns (int);
-function _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS([int]bool) returns ([int]bool);
-function _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(UnitId__KEYBOARD_INDICATOR_PARAMETERS(x))} UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)) == x);
-axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)} UnitId__KEYBOARD_INDICATOR_PARAMETERS(UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)[x]} _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)[x] <==> S[UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x]} _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x] <==> S[UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)} S[x] ==> _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)[UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)} S[x] ==> _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)[UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
-
-axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)} UnitId__KEYBOARD_INDICATOR_PARAMETERS(x) == x + 0);
-axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)} UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x));
-function UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(int) returns (int);
-function UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(int) returns (int);
-function _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS([int]bool) returns ([int]bool);
-function _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x))} UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)) == x);
-axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x]} _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x] <==> S[UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x]} _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x] <==> S[UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)} S[x] ==> _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)[UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)} S[x] ==> _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
-
-axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)} UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x) == x + 0);
-axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
-function WaitListHead__DISPATCHER_HEADER(int) returns (int);
-function WaitListHead__DISPATCHER_HEADERInv(int) returns (int);
-function _S_WaitListHead__DISPATCHER_HEADER([int]bool) returns ([int]bool);
-function _S_WaitListHead__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x))} WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x)) == x);
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADER(WaitListHead__DISPATCHER_HEADERInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADER(S)[x]} _S_WaitListHead__DISPATCHER_HEADER(S)[x] <==> S[WaitListHead__DISPATCHER_HEADERInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADERInv(S)[x]} _S_WaitListHead__DISPATCHER_HEADERInv(S)[x] <==> S[WaitListHead__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADER(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADER(S)[WaitListHead__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADERInv(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADERInv(S)[WaitListHead__DISPATCHER_HEADERInv(x)]);
-
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADER(x)} WaitListHead__DISPATCHER_HEADER(x) == x + 8);
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADERInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == WaitListHead__DISPATCHER_HEADERInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == WaitListHead__DISPATCHER_HEADERInv(x));
-function WaitWakeEnabled__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeEnabled__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeEnabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeEnabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x))} WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSION(WaitWakeEnabled__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSION(x)} WaitWakeEnabled__DEVICE_EXTENSION(x) == x + 286);
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSIONInv(x) == x - 286);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 286, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 286, 1) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 286)} MINUS_LEFT_PTR(x, 1, 286) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
-function WaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x))} WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSION(WaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSION(S)[WaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSION(x)} WaitWakeIrp__DEVICE_EXTENSION(x) == x + 260);
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 260);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
-function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-function WmiFunctionControl__WMILIB_CONTEXT(int) returns (int);
-function WmiFunctionControl__WMILIB_CONTEXTInv(int) returns (int);
-function _S_WmiFunctionControl__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_WmiFunctionControl__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x))} WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXT(WmiFunctionControl__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXT(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXT(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXT(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXT(S)[WmiFunctionControl__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXT(x)} WmiFunctionControl__WMILIB_CONTEXT(x) == x + 28);
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXTInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
-function WmiLibInfo__DEVICE_EXTENSION(int) returns (int);
-function WmiLibInfo__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WmiLibInfo__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WmiLibInfo__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x))} WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSION(WmiLibInfo__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSION(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSION(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSION(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSION(S)[WmiLibInfo__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSION(x)} WmiLibInfo__DEVICE_EXTENSION(x) == x + 200);
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSIONInv(x) == x - 200);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 200, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 200, 1) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 200)} MINUS_LEFT_PTR(x, 1, 200) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
-function __unnamed_1_29794256___unnamed_4_5ca00198(int) returns (int);
-function __unnamed_1_29794256___unnamed_4_5ca00198Inv(int) returns (int);
-function _S___unnamed_1_29794256___unnamed_4_5ca00198([int]bool) returns ([int]bool);
-function _S___unnamed_1_29794256___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198Inv(__unnamed_1_29794256___unnamed_4_5ca00198(x))} __unnamed_1_29794256___unnamed_4_5ca00198Inv(__unnamed_1_29794256___unnamed_4_5ca00198(x)) == x);
-axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)} __unnamed_1_29794256___unnamed_4_5ca00198(__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_29794256___unnamed_4_5ca00198(S)[x]} _S___unnamed_1_29794256___unnamed_4_5ca00198(S)[x] <==> S[__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)[x]} _S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)[x] <==> S[__unnamed_1_29794256___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_29794256___unnamed_4_5ca00198(S)} S[x] ==> _S___unnamed_1_29794256___unnamed_4_5ca00198(S)[__unnamed_1_29794256___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)} S[x] ==> _S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)[__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)]);
-
-axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198(x)} __unnamed_1_29794256___unnamed_4_5ca00198(x) == x + 1);
-axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)} __unnamed_1_29794256___unnamed_4_5ca00198Inv(x) == x - 1);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == __unnamed_1_29794256___unnamed_4_5ca00198Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == __unnamed_1_29794256___unnamed_4_5ca00198Inv(x));
-function __unnamed_1_2dc63b48___unnamed_4_5ca00198(int) returns (int);
-function __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(int) returns (int);
-function _S___unnamed_1_2dc63b48___unnamed_4_5ca00198([int]bool) returns ([int]bool);
-function _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(__unnamed_1_2dc63b48___unnamed_4_5ca00198(x))} __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)) == x);
-axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)} __unnamed_1_2dc63b48___unnamed_4_5ca00198(__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)[x]} _S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)[x] <==> S[__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)[x]} _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)[x] <==> S[__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)} S[x] ==> _S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)[__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)} S[x] ==> _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)[__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)]);
-
-axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)} __unnamed_1_2dc63b48___unnamed_4_5ca00198(x) == x + 3);
-axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)} __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x) == x - 3);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1) == __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 3)} MINUS_LEFT_PTR(x, 1, 3) == __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x));
-function __unnamed_1_2ef8da39___unnamed_4_5ca00198(int) returns (int);
-function __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(int) returns (int);
-function _S___unnamed_1_2ef8da39___unnamed_4_5ca00198([int]bool) returns ([int]bool);
-function _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(__unnamed_1_2ef8da39___unnamed_4_5ca00198(x))} __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)) == x);
-axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)} __unnamed_1_2ef8da39___unnamed_4_5ca00198(__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)[x]} _S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)[x] <==> S[__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)[x]} _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)[x] <==> S[__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)} S[x] ==> _S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)[__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)} S[x] ==> _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)[__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)]);
-
-axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)} __unnamed_1_2ef8da39___unnamed_4_5ca00198(x) == x + 2);
-axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)} __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x));
-function __unnamed_4_5ca00198___unnamed_4_a97c65a1(int) returns (int);
-function __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(int) returns (int);
-function _S___unnamed_4_5ca00198___unnamed_4_a97c65a1([int]bool) returns ([int]bool);
-function _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(__unnamed_4_5ca00198___unnamed_4_a97c65a1(x))} __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)) == x);
-axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)} __unnamed_4_5ca00198___unnamed_4_a97c65a1(__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)[x]} _S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)[x] <==> S[__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)[x]} _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)[x] <==> S[__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)} S[x] ==> _S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)[__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)} S[x] ==> _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)[__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)]);
-
-axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)} __unnamed_4_5ca00198___unnamed_4_a97c65a1(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)} __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x));
-function __unnamed_4_a97c65a1__DISPATCHER_HEADER(int) returns (int);
-function __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(int) returns (int);
-function _S___unnamed_4_a97c65a1__DISPATCHER_HEADER([int]bool) returns ([int]bool);
-function _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(__unnamed_4_a97c65a1__DISPATCHER_HEADER(x))} __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)) == x);
-axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)} __unnamed_4_a97c65a1__DISPATCHER_HEADER(__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)[x]} _S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)[x] <==> S[__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)[x]} _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)[x] <==> S[__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)} S[x] ==> _S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)[__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)} S[x] ==> _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)[__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)]);
-
-axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)} __unnamed_4_a97c65a1__DISPATCHER_HEADER(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)} __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x));
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure nondet_choice() returns (x:int);
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-var Res_DEVICE_STACK:[int]int;
-var Res_DEV_EXTN:[int]int;
-var Res_DEV_OBJ_INIT:[int]int;
-var Res_SPIN_LOCK:[int]int;
-
-
-
-////////////////////
-// Between predicate
-////////////////////
-function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
-function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
-
-
-//////////////////////////
-// Between set constructor
-//////////////////////////
-function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
-
-////////////////////////////////////////////////////
-// axioms relating ReachBetween and ReachBetweenSet
-////////////////////////////////////////////////////
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
-axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
-
-
-//////////////////////////
-// Axioms for ReachBetween
-//////////////////////////
-
-// reflexive
-axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
-
-// step
-//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
-axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
-
-// reach
-axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
-
-// cycle
-axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
-
-// sandwich
-axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
-
-// order1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
-
-// order2
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
-
-// transitive1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
-
-// transitive2
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
-
-// transitive3
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
-
-// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
-// It cannot be proved using the rest of the axioms.
-axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
-
-// relation between ReachAvoiding and ReachBetween
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
-
-// update
-axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
- ///////////////////////////////
- // Shifts for linking fields
- ///////////////////////////////
-function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
-axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
-axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
-
-const unique Globals : int;
-axiom(Globals != 0);
-// the set of constants for 64 bit integers that Boogie doesn't parse
-const unique BOOGIE_LARGE_INT_4294967273:int;
-
-
-
-procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure InitializeListHead_IRP($ListHead$1$12.44$InitializeListHead_IRP$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoCreateDevice($DriverObject$1$21226.25$IoCreateDevice$281:int, $DeviceExtensionSize$2$21227.16$IoCreateDevice$281:int, $DeviceName$3$21228.29$IoCreateDevice$281:int, $DeviceType$4$21229.22$IoCreateDevice$281:int, $DeviceCharacteristics$5$21230.16$IoCreateDevice$281:int, $Exclusive$6$21231.18$IoCreateDevice$281:int, $DeviceObject$7$21237.20$IoCreateDevice$281:int) returns ($result.IoCreateDevice$21225.0$1$:int);
-
-//TAG: ensures (LONG)__return >= 0 ==> *DeviceObject != (void *)0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> (*DeviceObject)->DeviceExtension != (void *)0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*DeviceObject)->DeviceExtension) == 1
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 1
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1)));
-//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *DeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 0)));
-//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *DeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension), 1)
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] := 1])));
-//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *DeviceObject) == __old_resource("DEV_OBJ_INIT", *DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))
-ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]])));
-//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-//TAG: ensures (LONG)__return >= 0 ==> !(__resource("DEV_OBJ_INIT", ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))->Self) == 1)
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (!(Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])])]] == 1)));
-//TAG: ensures !((LONG)__return >= 0) ==> *DeviceObject == __old(*DeviceObject)
-ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == old(Mem)[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures (LONG)__return >= 0 ==> __return == 0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ($result.IoCreateDevice$21225.0$1$ == 0));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$7$21237.20$IoCreateDevice$281))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $DeviceObject$7$21237.20$IoCreateDevice$281) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
-requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
-//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
-ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
-//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
-ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
-//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
-ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
-//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoInitializeRemoveLockEx($Lock$1$22135.25$IoInitializeRemoveLockEx$201:int, $AllocateTag$2$22136.16$IoInitializeRemoveLockEx$201:int, $MaxLockedMinutes$3$22137.16$IoInitializeRemoveLockEx$201:int, $HighWatermark$4$22138.16$IoInitializeRemoveLockEx$201:int, $RemlockSize$5$22139.16$IoInitializeRemoveLockEx$201:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KbdInitializeDataQueue($Context$1$557.13$KbdInitializeDataQueue$41:int);
-
-//TAG: requires __resource("DEV_EXTN", Context) == 1
-requires(Res_DEV_EXTN[$Context$1$557.13$KbdInitializeDataQueue$41] == 1);
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __resource("DEV_EXTN", Context) == 1
-ensures(Res_DEV_EXTN[$Context$1$557.13$KbdInitializeDataQueue$41] == 1);
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeInitializeSpinLock($SpinLock$1$13860.22$KeInitializeSpinLock$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeyboardClassLogError($Object$1$580.10$KeyboardClassLogError$281:int, $ErrorCode$2$581.10$KeyboardClassLogError$281:int, $UniqueErrorValue$3$582.10$KeyboardClassLogError$281:int, $FinalStatus$4$583.13$KeyboardClassLogError$281:int, $DumpCount$5$584.10$KeyboardClassLogError$281:int, $DumpData$6$585.11$KeyboardClassLogError$281:int, $MajorFunction$7$586.10$KeyboardClassLogError$281:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlFreeUnicodeString($UnicodeString$1$7452.28$RtlFreeUnicodeString$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure __PREfastPagedCode();
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KbdCreateClassObject($DriverObject$1$3354.28$KbdCreateClassObject$201:int, $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201:int, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201:int, $FullDeviceName$4$3357.35$KbdCreateClassObject$201:int, $Legacy$5$3358.28$KbdCreateClassObject$201:int) returns ($result.KbdCreateClassObject$3353.0$1$:int)
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1)));
-//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 0)));
-//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] := 1])));
-//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
-ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]])));
-//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-modifies alloc;
-free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
-ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3356.28$KbdCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-{
-var havoc_stringTemp:int;
-var condVal:int;
-var $ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 : int;
-var $DriverObject$1$3354.28$KbdCreateClassObject$20 : int;
-var $ExAllocatePoolWithTag.arg.2$4$ : int;
-var $FullDeviceName$4$3357.35$KbdCreateClassObject$20 : int;
-var $KbdDebugPrint.arg.2$15$ : int;
-var $KbdDebugPrint.arg.2$18$ : int;
-var $KbdDebugPrint.arg.2$2$ : int;
-var $KbdDebugPrint.arg.2$20$ : int;
-var $KbdDebugPrint.arg.2$22$ : int;
-var $KbdDebugPrint.arg.2$5$ : int;
-var $Legacy$5$3358.28$KbdCreateClassObject$20 : int;
-var $RtlAppendUnicodeToString.arg.2$12$ : int;
-var $RtlAppendUnicodeToString.arg.2$14$ : int;
-var $RtlAppendUnicodeToString.arg.2$9$ : int;
-var $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$20 : int;
-var $deviceExtension$8$3388.24$KbdCreateClassObject$20 : int;
-var $dumpCount$11$3391.24$KbdCreateClassObject$20 : int;
-var $dumpData$12$3392.24$KbdCreateClassObject$20 : int;
-var $errorCode$9$3389.24$KbdCreateClassObject$20 : int;
-var $fullClassName$10$3390.24$KbdCreateClassObject$20 : int;
-var $i$13$3393.24$KbdCreateClassObject$20 : int;
-var $memset.arg.3$7$ : int;
-var $nameIndex$14$3394.24$KbdCreateClassObject$20 : int;
-var $result.ExAllocatePoolWithTag$3441.0$3$ : int;
-var $result.ExAllocatePoolWithTag$3557.0$19$ : int;
-var $result.IoCreateDevice$3485.35$16$ : int;
-var $result.IoCreateDevice$3499.31$17$ : int;
-var $result.RtlAppendUnicodeToString$3460.32$8$ : int;
-var $result.RtlAppendUnicodeToString$3461.32$10$ : int;
-var $result.RtlAppendUnicodeToString$3464.36$11$ : int;
-var $result.RtlAppendUnicodeToString$3467.32$13$ : int;
-var $result.memset$3459.8$6$ : int;
-var $result.question.21$ : int;
-var $status$6$3386.24$KbdCreateClassObject$20 : int;
-var $uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 : int;
-var tempBoogie0:int;
-var tempBoogie1:int;
-var tempBoogie2:int;
-var tempBoogie3:int;
-var tempBoogie4:int;
-var tempBoogie5:int;
-var tempBoogie6:int;
-var tempBoogie7:int;
-var tempBoogie8:int;
-var tempBoogie9:int;
-var tempBoogie10:int;
-var tempBoogie11:int;
-var tempBoogie12:int;
-var tempBoogie13:int;
-var tempBoogie14:int;
-var tempBoogie15:int;
-var tempBoogie16:int;
-var tempBoogie17:int;
-var tempBoogie18:int;
-var tempBoogie19:int;
-var LOOP_78_alloc:[int]name;
-var LOOP_78_Mem:[name][int]int;
-var LOOP_78_Res_DEVICE_STACK:[int]int;
-var LOOP_78_Res_DEV_EXTN:[int]int;
-var LOOP_78_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_78_Res_SPIN_LOCK:[int]int;
-
-
-start:
-
-assume (alloc[$DriverObject$1$3354.28$KbdCreateClassObject$201] != UNALLOCATED);
-assume (alloc[$TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201] != UNALLOCATED);
-assume (alloc[$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] != UNALLOCATED);
-assume (alloc[$FullDeviceName$4$3357.35$KbdCreateClassObject$201] != UNALLOCATED);
-call $dumpData$12$3392.24$KbdCreateClassObject$20 := __HAVOC_malloc(16);
-call $fullClassName$10$3390.24$KbdCreateClassObject$20 := __HAVOC_malloc(8);
-$DriverObject$1$3354.28$KbdCreateClassObject$20 := $DriverObject$1$3354.28$KbdCreateClassObject$201;
-$TmpDeviceExtension$2$3355.28$KbdCreateClassObject$20 := $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201;
-$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 := $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201;
-$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := $FullDeviceName$4$3357.35$KbdCreateClassObject$201;
-$Legacy$5$3358.28$KbdCreateClassObject$20 := $Legacy$5$3358.28$KbdCreateClassObject$201;
-goto label_3;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3627)
-label_1:
-call __HAVOC_free($dumpData$12$3392.24$KbdCreateClassObject$20);
-call __HAVOC_free($fullClassName$10$3390.24$KbdCreateClassObject$20);
-assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
-assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
-assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
-assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
-assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
-assume (forall m:int :: {Mem[T.A37CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A37CHAR][m] == old(Mem[T.A37CHAR])[m]);
-assume (forall m:int :: {Mem[T.A40CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A40CHAR][m] == old(Mem[T.A40CHAR])[m]);
-assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
-assume (forall m:int :: {Mem[T.A65CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A65CHAR][m] == old(Mem[T.A65CHAR])[m]);
-assume (forall m:int :: {Mem[T.A75CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A75CHAR][m] == old(Mem[T.A75CHAR])[m]);
-assume (forall m:int :: {Mem[T.A76CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A76CHAR][m] == old(Mem[T.A76CHAR])[m]);
-assume (forall m:int :: {Mem[T.A7UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A7UINT2][m] == old(Mem[T.A7UINT2])[m]);
-assume (forall m:int :: {Mem[T.A83CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A83CHAR][m] == old(Mem[T.A83CHAR])[m]);
-assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
-assume (forall m:int :: {Mem[T.Abandoned___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Abandoned___unnamed_1_29794256][m] == old(Mem[T.Abandoned___unnamed_1_29794256])[m]);
-assume (forall m:int :: {Mem[T.Absolute___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Absolute___unnamed_1_29794256][m] == old(Mem[T.Absolute___unnamed_1_29794256])[m]);
-assume (forall m:int :: {Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.AllowDisable__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AllowDisable__DEVICE_EXTENSION][m] == old(Mem[T.AllowDisable__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Blink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blink__LIST_ENTRY][m] == old(Mem[T.Blink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.ConnectOneClassToOnePort__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ConnectOneClassToOnePort__GLOBALS][m] == old(Mem[T.ConnectOneClassToOnePort__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m] == old(Mem[T.CurrentStackLocation___unnamed_4_f19b65c1])[m]);
-assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DebugActive___unnamed_1_2dc63b48][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DebugActive___unnamed_1_2dc63b48][m] == old(Mem[T.DebugActive___unnamed_1_2dc63b48])[m]);
-assume (forall m:int :: {Mem[T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS][m] == old(Mem[T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS])[m]);
-assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.DeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceState__DEVICE_EXTENSION][m] == old(Mem[T.DeviceState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DpcActive___unnamed_1_2dc63b48][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DpcActive___unnamed_1_2dc63b48][m] == old(Mem[T.DpcActive___unnamed_1_2dc63b48])[m]);
-assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m] == old(Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.GuidCount__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidCount__WMILIB_CONTEXT][m] == old(Mem[T.GuidCount__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.GuidList__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidList__WMILIB_CONTEXT][m] == old(Mem[T.GuidList__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.Hand___unnamed_1_2ef8da39][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Hand___unnamed_1_2ef8da39][m] == old(Mem[T.Hand___unnamed_1_2ef8da39])[m]);
-assume (forall m:int :: {Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
-assume (forall m:int :: {Mem[T.InputCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputCount__DEVICE_EXTENSION][m] == old(Mem[T.InputCount__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Inserted___unnamed_1_2dc63b48][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Inserted___unnamed_1_2dc63b48][m] == old(Mem[T.Inserted___unnamed_1_2dc63b48])[m]);
-assume (forall m:int :: {Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.KeyboardAttributes__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.KeyboardAttributes__DEVICE_EXTENSION][m] == old(Mem[T.KeyboardAttributes__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.KeyboardMode__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.KeyboardMode__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.KeyboardMode__KEYBOARD_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS][m] == old(Mem[T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS])[m]);
-assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Lock___unnamed_4_a97c65a1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Lock___unnamed_4_a97c65a1][m] == old(Mem[T.Lock___unnamed_4_a97c65a1])[m]);
-assume (forall m:int :: {Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinDeviceWakeState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinSystemWakeState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
-assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.NpxIrql___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NpxIrql___unnamed_1_29794256][m] == old(Mem[T.NpxIrql___unnamed_1_29794256])[m]);
-assume (forall m:int :: {Mem[T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.NumberOfIndicators__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfIndicators__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.NumberOfIndicators__KEYBOARD_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m] == old(Mem[T.OkayToLogOverflow__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
-assume (forall m:int :: {Mem[T.PDO__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PDO__DEVICE_EXTENSION][m] == old(Mem[T.PDO__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
-assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
-assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
-assume (forall m:int :: {Mem[T.P_IO_REMOVE_LOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IO_REMOVE_LOCK][m] == old(Mem[T.P_IO_REMOVE_LOCK])[m]);
-assume (forall m:int :: {Mem[T.P_KEYBOARD_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_KEYBOARD_INPUT_DATA][m] == old(Mem[T.P_KEYBOARD_INPUT_DATA])[m]);
-assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS][m] == old(Mem[T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS])[m]);
-assume (forall m:int :: {Mem[T.ReadQueue__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ReadQueue__DEVICE_EXTENSION][m] == old(Mem[T.ReadQueue__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.RemoveLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RemoveLock__DEVICE_EXTENSION][m] == old(Mem[T.RemoveLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SequenceNumber__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SequenceNumber__DEVICE_EXTENSION][m] == old(Mem[T.SequenceNumber__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataBlock__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataItem__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.SignalState__DISPATCHER_HEADER][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SignalState__DISPATCHER_HEADER][m] == old(Mem[T.SignalState__DISPATCHER_HEADER])[m]);
-assume (forall m:int :: {Mem[T.Signalling___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signalling___unnamed_1_29794256][m] == old(Mem[T.Signalling___unnamed_1_29794256])[m]);
-assume (forall m:int :: {Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Size___unnamed_1_2ef8da39][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Size___unnamed_1_2ef8da39][m] == old(Mem[T.Size___unnamed_1_2ef8da39])[m]);
-assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Subtype__KEYBOARD_ID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Subtype__KEYBOARD_ID][m] == old(Mem[T.Subtype__KEYBOARD_ID])[m]);
-assume (forall m:int :: {Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m] == old(Mem[T.SurpriseRemoved__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SystemState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemState__DEVICE_EXTENSION][m] == old(Mem[T.SystemState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m] == old(Mem[T.SystemToDeviceState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m] == old(Mem[T.TargetNotifyHandle__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TrueClassDevice__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrueClassDevice__DEVICE_EXTENSION][m] == old(Mem[T.TrueClassDevice__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m] == old(Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Type__KEYBOARD_ID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Type__KEYBOARD_ID][m] == old(Mem[T.Type__KEYBOARD_ID])[m]);
-assume (forall m:int :: {Mem[T.Type___unnamed_4_5ca00198][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Type___unnamed_4_5ca00198][m] == old(Mem[T.Type___unnamed_4_5ca00198])[m]);
-assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
-assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
-assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
-assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.UnitId__KEYBOARD_INDICATOR_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__KEYBOARD_INDICATOR_PARAMETERS][m] == old(Mem[T.UnitId__KEYBOARD_INDICATOR_PARAMETERS])[m]);
-assume (forall m:int :: {Mem[T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS][m] == old(Mem[T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeEnabled__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeIrp__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m] == old(Mem[T.WmiFunctionControl__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3627)
-label_2:
-assume false;
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3386)
-label_3:
-goto label_4;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3387)
-label_4:
-goto label_5;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3388)
-label_5:
-goto label_6;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3388)
-label_6:
-$deviceExtension$8$3388.24$KbdCreateClassObject$20 := 0 ;
-goto label_7;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3389)
-label_7:
-goto label_8;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3389)
-label_8:
-$errorCode$9$3389.24$KbdCreateClassObject$20 := 0 ;
-goto label_9;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3390)
-label_9:
-goto label_10;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3390)
-label_10:
-// Skipping Structure assignment due to the flag SkipStructAssignments
-goto label_11;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3391)
-label_11:
-goto label_12;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3391)
-label_12:
-$dumpCount$11$3391.24$KbdCreateClassObject$20 := 0 ;
-goto label_13;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3392)
-label_13:
-goto label_14;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3393)
-label_14:
-goto label_15;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3394)
-label_15:
-goto label_16;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3396)
-label_16:
-call __PREfastPagedCode ();
-goto label_22;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3398)
-label_19:
-// skip KbdDebugPrint
-goto label_23;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3398)
-label_22:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$2$ := havoc_stringTemp ;
-goto label_19;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3404)
-label_23:
-call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
-goto label_26;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3409)
-label_26:
-Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 := 0];
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3411)
-label_27:
-goto label_27_true , label_27_false ;
-
-
-label_27_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_89;
-
-
-label_27_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_28;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3415)
-label_28:
-call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
-goto label_31;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3421)
-label_31:
-goto label_31_true , label_31_false ;
-
-
-label_31_true :
-assume (BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
-goto label_32;
-
-
-label_31_false :
-assume !(BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
-goto label_37;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3422)
-label_32:
-$status$6$3386.24$KbdCreateClassObject$20 := -1073741823 ;
-goto label_33;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3423)
-label_33:
-$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414143 ;
-goto label_34;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3424)
-label_34:
-$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10006 ;
-goto label_35;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3425)
-label_35:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3392.24$KbdCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
-goto label_36;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3426)
-label_36:
-$dumpCount$11$3391.24$KbdCreateClassObject$20 := 1 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3433)
-label_37:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]), 1, 4)];
-goto label_38;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3437)
-label_38:
-goto label_38_true , label_38_false ;
-
-
-label_38_true :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
-goto label_39;
-
-
-label_38_false :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3437)
-label_39:
-goto label_39_true , label_39_false ;
-
-
-label_39_true :
-assume ($Legacy$5$3358.28$KbdCreateClassObject$20 != 0);
-goto label_40;
-
-
-label_39_false :
-assume ($Legacy$5$3358.28$KbdCreateClassObject$20 == 0);
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3438)
-label_40:
-tempBoogie0 := PLUS(Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)], 1, 14) ;
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20) := tempBoogie0];
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3441)
-label_41:
-call $result.ExAllocatePoolWithTag$3441.0$3$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$4$, 1130652235);
-goto label_45;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3441)
-label_44:
-$ExAllocatePoolWithTag.arg.2$4$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] ;
-goto label_41;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3441)
-label_45:
-Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20) := $result.ExAllocatePoolWithTag$3441.0$3$];
-goto label_46;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3444)
-label_46:
-goto label_46_true , label_46_false ;
-
-
-label_46_true :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] != 0);
-goto label_59;
-
-
-label_46_false :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] == 0);
-goto label_50;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3446)
-label_47:
-// skip KbdDebugPrint
-goto label_51;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3446)
-label_50:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$5$ := havoc_stringTemp ;
-goto label_47;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3451)
-label_51:
-$status$6$3386.24$KbdCreateClassObject$20 := -1073741823 ;
-goto label_52;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3452)
-label_52:
-$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414143 ;
-goto label_53;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3453)
-label_53:
-$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10006 ;
-goto label_54;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3454)
-label_54:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3392.24$KbdCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
-goto label_55;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3455)
-label_55:
-$dumpCount$11$3391.24$KbdCreateClassObject$20 := 1 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3459)
-label_56:
-// ignoring intrinsic intrinsic.memset
-havoc $result.memset$3459.8$6$;
-goto label_63;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3459)
-label_59:
-$memset.arg.3$7$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] ;
-goto label_56;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3460)
-label_60:
-call $result.RtlAppendUnicodeToString$3460.32$8$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$9$);
-goto label_64;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3460)
-label_63:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$9$ := havoc_stringTemp ;
-goto label_60;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3461)
-label_64:
-call $result.RtlAppendUnicodeToString$3461.32$10$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
-goto label_67;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3463)
-label_67:
-goto label_67_true , label_67_false ;
-
-
-label_67_true :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
-goto label_68;
-
-
-label_67_false :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
-goto label_76;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3463)
-label_68:
-goto label_68_true , label_68_false ;
-
-
-label_68_true :
-assume ($Legacy$5$3358.28$KbdCreateClassObject$20 != 0);
-goto label_72;
-
-
-label_68_false :
-assume ($Legacy$5$3358.28$KbdCreateClassObject$20 == 0);
-goto label_76;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3464)
-label_69:
-call $result.RtlAppendUnicodeToString$3464.36$11$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$12$);
-goto label_76;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3464)
-label_72:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$12$ := havoc_stringTemp ;
-goto label_69;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3467)
-label_73:
-call $result.RtlAppendUnicodeToString$3467.32$13$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$14$);
-goto label_77;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3467)
-label_76:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$14$ := havoc_stringTemp ;
-goto label_73;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3473)
-label_77:
-$nameIndex$14$3394.24$KbdCreateClassObject$20 := 0 ;
-goto label_78;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3477)
-label_78:
-// loop entry initialization...
-LOOP_78_alloc := alloc;
-LOOP_78_Mem := Mem;
-LOOP_78_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_78_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_78_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_78_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_78_head;
-
-
-label_78_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: requires __preserves_resource("DEV_OBJ_INIT")
-assert(Res_DEV_OBJ_INIT == LOOP_78_Res_DEV_OBJ_INIT);
-//TAG: requires __preserves_resource("DEV_EXTN")
-assert(Res_DEV_EXTN == LOOP_78_Res_DEV_EXTN);
-//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-assert(Mem[T.Flink__LIST_ENTRY] == LOOP_78_Mem[T.Flink__LIST_ENTRY]);
-assume(forall f:int :: {alloc[Base(f)]} LOOP_78_alloc[Base(f)] == UNALLOCATED || LOOP_78_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_78_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_78_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_78_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_78_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_78_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_78_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_78_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true, __set_empty
-assert (Subset(Empty(), Union(Union(Empty(), SetTrue()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_78_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_78_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)], 2), 1, 1)) := PLUS(48, 1, $nameIndex$14$3394.24$KbdCreateClassObject$20)];
-$nameIndex$14$3394.24$KbdCreateClassObject$20 := PLUS($nameIndex$14$3394.24$KbdCreateClassObject$20, 1, 1) ;
-goto label_82;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3479)
-label_79:
-// skip KbdDebugPrint
-goto label_83;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3479)
-label_82:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$15$ := havoc_stringTemp ;
-goto label_79;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3485)
-label_83:
-call $result.IoCreateDevice$3485.35$16$ := IoCreateDevice ($DriverObject$1$3354.28$KbdCreateClassObject$20, 288, $fullClassName$10$3390.24$KbdCreateClassObject$20, 11, 0, 0, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$20);
-goto label_86;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3485)
-label_86:
-$status$6$3386.24$KbdCreateClassObject$20 := $result.IoCreateDevice$3485.35$16$ ;
-goto label_87;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3493)
-label_87:
-goto label_87_true , label_87_false ;
-
-
-label_87_true :
-assume (-1073741771 == $status$6$3386.24$KbdCreateClassObject$20);
-goto label_78_head;
-
-
-label_87_false :
-assume !(-1073741771 == $status$6$3386.24$KbdCreateClassObject$20);
-goto label_88;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3495)
-label_88:
-Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
-goto label_97;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3498)
-label_89:
-call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
-goto label_92;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3499)
-label_92:
-call $result.IoCreateDevice$3499.31$17$ := IoCreateDevice ($DriverObject$1$3354.28$KbdCreateClassObject$20, 288, 0, 11, 0, 0, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$20);
-goto label_95;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3499)
-label_95:
-$status$6$3386.24$KbdCreateClassObject$20 := $result.IoCreateDevice$3499.31$17$ ;
-goto label_96;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3506)
-label_96:
-Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := 0];
-goto label_97;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3509)
-label_97:
-goto label_97_true , label_97_false ;
-
-
-label_97_true :
-assume (0 <= $status$6$3386.24$KbdCreateClassObject$20);
-goto label_98;
-
-
-label_97_false :
-assume !(0 <= $status$6$3386.24$KbdCreateClassObject$20);
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3509)
-label_98:
-goto label_98_true , label_98_false ;
-
-
-label_98_true :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] != 0);
-goto label_107;
-
-
-label_98_false :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] == 0);
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3510)
-label_99:
-// skip KbdDebugPrint
-goto label_103;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3510)
-label_102:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$18$ := havoc_stringTemp ;
-goto label_99;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3516)
-label_103:
-$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414131 ;
-goto label_104;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3517)
-label_104:
-$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10006 ;
-goto label_105;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3518)
-label_105:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3392.24$KbdCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
-goto label_106;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3519)
-label_106:
-$dumpCount$11$3391.24$KbdCreateClassObject$20 := 1 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3528)
-label_107:
-assume (forall r:int :: {BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])], 4),r)} BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])],r)!= 0 || BIT_BAND(4,r)!= 0 <==> BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])], 4),r)!= 0);
-tempBoogie0 := BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])], 4) ;
-Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20]) := tempBoogie0];
-goto label_108;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3529)
-label_108:
-$deviceExtension$8$3388.24$KbdCreateClassObject$20 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])] ;
-goto label_109;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3531)
-label_109:
-// Skipping Structure assignment due to the flag SkipStructAssignments
-goto label_110;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3533)
-label_110:
-Mem[T.Self__DEVICE_EXTENSION] := Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20]];
-goto label_111;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3534)
-label_111:
-call IoInitializeRemoveLockEx (RemoveLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20), 1130652235, 0, 0, 88);
-goto label_114;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3539)
-label_114:
-assume (Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] == Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)]);
-call KeInitializeSpinLock (SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20));
-Mem[T.SpinLock__DEVICE_EXTENSION] := Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)]];
-goto label_117;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3544)
-label_117:
-call InitializeListHead_IRP (ReadQueue__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20));
-goto label_120;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3550)
-label_120:
-Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION] := Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][TrustedSubsystemCount__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := 0];
-goto label_121;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3557)
-label_121:
-call $result.ExAllocatePoolWithTag$3557.0$19$ := ExAllocatePoolWithTag (0, Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES][InputDataQueueLength__KEYBOARD_ATTRIBUTES(KeyboardAttributes__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20))], 1130652235);
-goto label_124;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3556)
-label_124:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := $result.ExAllocatePoolWithTag$3557.0$19$];
-goto label_125;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3562)
-label_125:
-goto label_125_true , label_125_false ;
-
-
-label_125_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] != 0);
-goto label_133;
-
-
-label_125_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] == 0);
-goto label_129;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3568)
-label_126:
-// skip KbdDebugPrint
-goto label_130;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3568)
-label_129:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$20$ := havoc_stringTemp ;
-goto label_126;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3574)
-label_130:
-$status$6$3386.24$KbdCreateClassObject$20 := -1073741670 ;
-goto label_131;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3580)
-label_131:
-$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414142 ;
-goto label_132;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3581)
-label_132:
-$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10020 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3589)
-label_133:
-call KbdInitializeDataQueue ($deviceExtension$8$3388.24$KbdCreateClassObject$20);
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3593)
-label_136:
-goto label_136_true , label_136_false ;
-
-
-label_136_true :
-assume ($status$6$3386.24$KbdCreateClassObject$20 != 0);
-goto label_137;
-
-
-label_136_false :
-assume ($status$6$3386.24$KbdCreateClassObject$20 == 0);
-goto label_162;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3599)
-label_137:
-call RtlFreeUnicodeString ($fullClassName$10$3390.24$KbdCreateClassObject$20);
-goto label_140;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3600)
-label_140:
-Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := 0];
-goto label_141;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3602)
-label_141:
-goto label_141_true , label_141_false ;
-
-
-label_141_true :
-assume ($errorCode$9$3389.24$KbdCreateClassObject$20 != 0);
-goto label_145;
-
-
-label_141_false :
-assume ($errorCode$9$3389.24$KbdCreateClassObject$20 == 0);
-goto label_148;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3603)
-label_142:
-call KeyboardClassLogError ($result.question.21$, $errorCode$9$3389.24$KbdCreateClassObject$20, $uniqueErrorValue$7$3387.24$KbdCreateClassObject$20, $status$6$3386.24$KbdCreateClassObject$20, $dumpCount$11$3391.24$KbdCreateClassObject$20, $dumpData$12$3392.24$KbdCreateClassObject$20, 0);
-goto label_148;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3604)
-label_145:
-goto label_145_true , label_145_false ;
-
-
-label_145_true :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] != 0);
-goto label_147;
-
-
-label_145_false :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] == 0);
-goto label_146;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3604)
-label_146:
-$result.question.21$ := $DriverObject$1$3354.28$KbdCreateClassObject$20 ;
-goto label_142;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3604)
-label_147:
-$result.question.21$ := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] ;
-goto label_142;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3614)
-label_148:
-goto label_148_true , label_148_false ;
-
-
-label_148_true :
-assume ($deviceExtension$8$3388.24$KbdCreateClassObject$20 != 0);
-goto label_149;
-
-
-label_148_false :
-assume ($deviceExtension$8$3388.24$KbdCreateClassObject$20 == 0);
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3614)
-label_149:
-goto label_149_true , label_149_false ;
-
-
-label_149_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] != 0);
-goto label_150;
-
-
-label_149_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] == 0);
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3615)
-label_150:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)], 0);
-goto label_153;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3616)
-label_153:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := 0];
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3618)
-label_154:
-goto label_154_true , label_154_false ;
-
-
-label_154_true :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] != 0);
-goto label_155;
-
-
-label_154_false :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] == 0);
-goto label_162;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3619)
-label_155:
-call IoDeleteDevice (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20]);
-goto label_158;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3620)
-label_158:
-Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 := 0];
-goto label_162;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3624)
-label_159:
-// skip KbdDebugPrint
-goto label_163;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3624)
-label_162:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$22$ := havoc_stringTemp ;
-goto label_159;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3626)
-label_163:
-$result.KbdCreateClassObject$3353.0$1$ := $status$6$3386.24$KbdCreateClassObject$20 ;
-goto label_1;
-
-}
-
+// RUN: %boogie -monomorphize "%s" > "%t"
+// RUN: %diff success.expect "%t"
+type byte, name;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function SetTrue() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+/*
+function AtLeast(int, int) returns ([int]bool);
+function ModEqual(int, int, int) returns (bool);
+axiom(forall n:int, x:int :: ModEqual(n,x,x));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
+axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
+axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
+axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+*/
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int :: SetTrue()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name, m:[name][int]int) returns (bool);
+function Values(t:name, m:[name][int]int) returns ([int]bool);
+function T.Ptr(t:name) returns (name);
+
+axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
+
+axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
+
+axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
+ (HasType(v, t, m1) <==> HasType(v, t, m2)));
+
+// Field declarations
+
+const unique T.Guid_WMIGUIDREGINFO:name;
+const unique T.InstanceCount_WMIGUIDREGINFO:name;
+const unique T.Flags_WMIGUIDREGINFO:name;
+const unique T.OperationID__ACCESS_STATE:name;
+const unique T.SecurityEvaluated__ACCESS_STATE:name;
+const unique T.GenerateAudit__ACCESS_STATE:name;
+const unique T.GenerateOnClose__ACCESS_STATE:name;
+const unique T.PrivilegesAllocated__ACCESS_STATE:name;
+const unique T.Flags__ACCESS_STATE:name;
+const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
+const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
+const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
+const unique T.SubjectSecurityContext__ACCESS_STATE:name;
+const unique T.SecurityDescriptor__ACCESS_STATE:name;
+const unique T.AuxData__ACCESS_STATE:name;
+const unique T.Privileges__ACCESS_STATE:name;
+const unique T.AuditPrivileges__ACCESS_STATE:name;
+const unique T.ObjectName__ACCESS_STATE:name;
+const unique T.ObjectTypeName__ACCESS_STATE:name;
+const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_RESOURCE_LIST:name;
+const unique T.List__CM_RESOURCE_LIST:name;
+const unique T.Size__DEVICE_CAPABILITIES:name;
+const unique T.Version__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
+const unique T.LockSupported__DEVICE_CAPABILITIES:name;
+const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.Removable__DEVICE_CAPABILITIES:name;
+const unique T.DockDevice__DEVICE_CAPABILITIES:name;
+const unique T.UniqueID__DEVICE_CAPABILITIES:name;
+const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
+const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
+const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
+const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
+const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
+const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
+const unique T.Reserved__DEVICE_CAPABILITIES:name;
+const unique T.Address__DEVICE_CAPABILITIES:name;
+const unique T.UINumber__DEVICE_CAPABILITIES:name;
+const unique T.DeviceState__DEVICE_CAPABILITIES:name;
+const unique T.SystemWake__DEVICE_CAPABILITIES:name;
+const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
+const unique T.D1Latency__DEVICE_CAPABILITIES:name;
+const unique T.D2Latency__DEVICE_CAPABILITIES:name;
+const unique T.D3Latency__DEVICE_CAPABILITIES:name;
+const unique T.Self__DEVICE_EXTENSION:name;
+const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
+const unique T.TopPort__DEVICE_EXTENSION:name;
+const unique T.PDO__DEVICE_EXTENSION:name;
+const unique T.RemoveLock__DEVICE_EXTENSION:name;
+const unique T.PnP__DEVICE_EXTENSION:name;
+const unique T.Started__DEVICE_EXTENSION:name;
+const unique T.AllowDisable__DEVICE_EXTENSION:name;
+const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
+const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
+const unique T.InputCount__DEVICE_EXTENSION:name;
+const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
+const unique T.InputData__DEVICE_EXTENSION:name;
+const unique T.DataIn__DEVICE_EXTENSION:name;
+const unique T.DataOut__DEVICE_EXTENSION:name;
+const unique T.KeyboardAttributes__DEVICE_EXTENSION:name;
+const unique T.IndicatorParameters__DEVICE_EXTENSION:name;
+const unique T.SpinLock__DEVICE_EXTENSION:name;
+const unique T.ReadQueue__DEVICE_EXTENSION:name;
+const unique T.SequenceNumber__DEVICE_EXTENSION:name;
+const unique T.DeviceState__DEVICE_EXTENSION:name;
+const unique T.SystemState__DEVICE_EXTENSION:name;
+const unique T.UnitId__DEVICE_EXTENSION:name;
+const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
+const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
+const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
+const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
+const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
+const unique T.Link__DEVICE_EXTENSION:name;
+const unique T.File__DEVICE_EXTENSION:name;
+const unique T.Enabled__DEVICE_EXTENSION:name;
+const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
+const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
+const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
+const unique T.Type__DEVICE_OBJECT:name;
+const unique T.Size__DEVICE_OBJECT:name;
+const unique T.ReferenceCount__DEVICE_OBJECT:name;
+const unique T.DriverObject__DEVICE_OBJECT:name;
+const unique T.NextDevice__DEVICE_OBJECT:name;
+const unique T.AttachedDevice__DEVICE_OBJECT:name;
+const unique T.CurrentIrp__DEVICE_OBJECT:name;
+const unique T.Timer__DEVICE_OBJECT:name;
+const unique T.Flags__DEVICE_OBJECT:name;
+const unique T.Characteristics__DEVICE_OBJECT:name;
+const unique T.Vpb__DEVICE_OBJECT:name;
+const unique T.DeviceExtension__DEVICE_OBJECT:name;
+const unique T.DeviceType__DEVICE_OBJECT:name;
+const unique T.StackSize__DEVICE_OBJECT:name;
+const unique T.Queue__DEVICE_OBJECT:name;
+const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
+const unique T.DeviceQueue__DEVICE_OBJECT:name;
+const unique T.Dpc__DEVICE_OBJECT:name;
+const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
+const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
+const unique T.DeviceLock__DEVICE_OBJECT:name;
+const unique T.SectorSize__DEVICE_OBJECT:name;
+const unique T.Spare1__DEVICE_OBJECT:name;
+const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
+const unique T.Reserved__DEVICE_OBJECT:name;
+const unique T.Type__DEVOBJ_EXTENSION:name;
+const unique T.Size__DEVOBJ_EXTENSION:name;
+const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
+const unique T.__unnamed_4_a97c65a1__DISPATCHER_HEADER:name;
+const unique T.SignalState__DISPATCHER_HEADER:name;
+const unique T.WaitListHead__DISPATCHER_HEADER:name;
+const unique T.DriverObject__DRIVER_EXTENSION:name;
+const unique T.AddDevice__DRIVER_EXTENSION:name;
+const unique T.Count__DRIVER_EXTENSION:name;
+const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
+const unique T.Type__DRIVER_OBJECT:name;
+const unique T.Size__DRIVER_OBJECT:name;
+const unique T.DeviceObject__DRIVER_OBJECT:name;
+const unique T.Flags__DRIVER_OBJECT:name;
+const unique T.DriverStart__DRIVER_OBJECT:name;
+const unique T.DriverSize__DRIVER_OBJECT:name;
+const unique T.DriverSection__DRIVER_OBJECT:name;
+const unique T.DriverExtension__DRIVER_OBJECT:name;
+const unique T.DriverName__DRIVER_OBJECT:name;
+const unique T.HardwareDatabase__DRIVER_OBJECT:name;
+const unique T.FastIoDispatch__DRIVER_OBJECT:name;
+const unique T.DriverInit__DRIVER_OBJECT:name;
+const unique T.DriverStartIo__DRIVER_OBJECT:name;
+const unique T.DriverUnload__DRIVER_OBJECT:name;
+const unique T.MajorFunction__DRIVER_OBJECT:name;
+const unique T.SystemResourcesList__ERESOURCE:name;
+const unique T.OwnerTable__ERESOURCE:name;
+const unique T.ActiveCount__ERESOURCE:name;
+const unique T.Flag__ERESOURCE:name;
+const unique T.SharedWaiters__ERESOURCE:name;
+const unique T.ExclusiveWaiters__ERESOURCE:name;
+const unique T.OwnerEntry__ERESOURCE:name;
+const unique T.ActiveEntries__ERESOURCE:name;
+const unique T.ContentionCount__ERESOURCE:name;
+const unique T.NumberOfSharedWaiters__ERESOURCE:name;
+const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
+const unique T.__unnamed_4_52c594f7__ERESOURCE:name;
+const unique T.SpinLock__ERESOURCE:name;
+const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
+const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
+const unique T.FastIoRead__FAST_IO_DISPATCH:name;
+const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoLock__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
+const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
+const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
+const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlRead__FAST_IO_DISPATCH:name;
+const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
+const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
+const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
+const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.Count__FAST_MUTEX:name;
+const unique T.Owner__FAST_MUTEX:name;
+const unique T.Contention__FAST_MUTEX:name;
+const unique T.Gate__FAST_MUTEX:name;
+const unique T.OldIrql__FAST_MUTEX:name;
+const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
+const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
+const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
+const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.Type__FILE_OBJECT:name;
+const unique T.Size__FILE_OBJECT:name;
+const unique T.DeviceObject__FILE_OBJECT:name;
+const unique T.Vpb__FILE_OBJECT:name;
+const unique T.FsContext__FILE_OBJECT:name;
+const unique T.FsContext2__FILE_OBJECT:name;
+const unique T.SectionObjectPointer__FILE_OBJECT:name;
+const unique T.PrivateCacheMap__FILE_OBJECT:name;
+const unique T.FinalStatus__FILE_OBJECT:name;
+const unique T.RelatedFileObject__FILE_OBJECT:name;
+const unique T.LockOperation__FILE_OBJECT:name;
+const unique T.DeletePending__FILE_OBJECT:name;
+const unique T.ReadAccess__FILE_OBJECT:name;
+const unique T.WriteAccess__FILE_OBJECT:name;
+const unique T.DeleteAccess__FILE_OBJECT:name;
+const unique T.SharedRead__FILE_OBJECT:name;
+const unique T.SharedWrite__FILE_OBJECT:name;
+const unique T.SharedDelete__FILE_OBJECT:name;
+const unique T.Flags__FILE_OBJECT:name;
+const unique T.FileName__FILE_OBJECT:name;
+const unique T.CurrentByteOffset__FILE_OBJECT:name;
+const unique T.Waiters__FILE_OBJECT:name;
+const unique T.Busy__FILE_OBJECT:name;
+const unique T.LastLock__FILE_OBJECT:name;
+const unique T.Lock__FILE_OBJECT:name;
+const unique T.Event__FILE_OBJECT:name;
+const unique T.CompletionContext__FILE_OBJECT:name;
+const unique T.IrpListLock__FILE_OBJECT:name;
+const unique T.IrpList__FILE_OBJECT:name;
+const unique T.FileObjectExtension__FILE_OBJECT:name;
+const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
+const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
+const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
+const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
+const unique T.Directory__FILE_STANDARD_INFORMATION:name;
+const unique T.Debug__GLOBALS:name;
+const unique T.GrandMaster__GLOBALS:name;
+const unique T.AssocClassList__GLOBALS:name;
+const unique T.NumAssocClass__GLOBALS:name;
+const unique T.Opens__GLOBALS:name;
+const unique T.NumberLegacyPorts__GLOBALS:name;
+const unique T.Mutex__GLOBALS:name;
+const unique T.ConnectOneClassToOnePort__GLOBALS:name;
+const unique T.SendOutputToAllPorts__GLOBALS:name;
+const unique T.PortsServiced__GLOBALS:name;
+const unique T.InitExtension__GLOBALS:name;
+const unique T.RegistryPath__GLOBALS:name;
+const unique T.BaseClassName__GLOBALS:name;
+const unique T.BaseClassBuffer__GLOBALS:name;
+const unique T.LegacyDeviceList__GLOBALS:name;
+const unique T.Data1__GUID:name;
+const unique T.Data2__GUID:name;
+const unique T.Data3__GUID:name;
+const unique T.Data4__GUID:name;
+const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
+const unique T.Control__INITIAL_PRIVILEGE_SET:name;
+const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
+const unique T.Size__INTERFACE:name;
+const unique T.Version__INTERFACE:name;
+const unique T.Context__INTERFACE:name;
+const unique T.InterfaceReference__INTERFACE:name;
+const unique T.InterfaceDereference__INTERFACE:name;
+const unique T.Port__IO_COMPLETION_CONTEXT:name;
+const unique T.Key__IO_COMPLETION_CONTEXT:name;
+const unique T.Common__IO_REMOVE_LOCK:name;
+const unique T.Dbg__IO_REMOVE_LOCK:name;
+const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__IO_RESOURCE_LIST:name;
+const unique T.Revision__IO_RESOURCE_LIST:name;
+const unique T.Count__IO_RESOURCE_LIST:name;
+const unique T.Descriptors__IO_RESOURCE_LIST:name;
+const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
+const unique T.AccessState__IO_SECURITY_CONTEXT:name;
+const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
+const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
+const unique T.MajorFunction__IO_STACK_LOCATION:name;
+const unique T.MinorFunction__IO_STACK_LOCATION:name;
+const unique T.Flags__IO_STACK_LOCATION:name;
+const unique T.Control__IO_STACK_LOCATION:name;
+const unique T.Parameters__IO_STACK_LOCATION:name;
+const unique T.DeviceObject__IO_STACK_LOCATION:name;
+const unique T.FileObject__IO_STACK_LOCATION:name;
+const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
+const unique T.Context__IO_STACK_LOCATION:name;
+const unique T.__unnamed_4_d99b6e2b__IO_STATUS_BLOCK:name;
+const unique T.Information__IO_STATUS_BLOCK:name;
+const unique T.Type__IRP:name;
+const unique T.Size__IRP:name;
+const unique T.MdlAddress__IRP:name;
+const unique T.Flags__IRP:name;
+const unique T.AssociatedIrp__IRP:name;
+const unique T.ThreadListEntry__IRP:name;
+const unique T.IoStatus__IRP:name;
+const unique T.RequestorMode__IRP:name;
+const unique T.PendingReturned__IRP:name;
+const unique T.StackCount__IRP:name;
+const unique T.CurrentLocation__IRP:name;
+const unique T.Cancel__IRP:name;
+const unique T.CancelIrql__IRP:name;
+const unique T.ApcEnvironment__IRP:name;
+const unique T.AllocationFlags__IRP:name;
+const unique T.UserIosb__IRP:name;
+const unique T.UserEvent__IRP:name;
+const unique T.Overlay__IRP:name;
+const unique T.CancelRoutine__IRP:name;
+const unique T.UserBuffer__IRP:name;
+const unique T.Tail__IRP:name;
+const unique T.Type__KAPC:name;
+const unique T.SpareByte0__KAPC:name;
+const unique T.Size__KAPC:name;
+const unique T.SpareByte1__KAPC:name;
+const unique T.SpareLong0__KAPC:name;
+const unique T.Thread__KAPC:name;
+const unique T.ApcListEntry__KAPC:name;
+const unique T.KernelRoutine__KAPC:name;
+const unique T.RundownRoutine__KAPC:name;
+const unique T.NormalRoutine__KAPC:name;
+const unique T.NormalContext__KAPC:name;
+const unique T.SystemArgument1__KAPC:name;
+const unique T.SystemArgument2__KAPC:name;
+const unique T.ApcStateIndex__KAPC:name;
+const unique T.ApcMode__KAPC:name;
+const unique T.Inserted__KAPC:name;
+const unique T.Type__KDEVICE_QUEUE:name;
+const unique T.Size__KDEVICE_QUEUE:name;
+const unique T.DeviceListHead__KDEVICE_QUEUE:name;
+const unique T.Lock__KDEVICE_QUEUE:name;
+const unique T.Busy__KDEVICE_QUEUE:name;
+const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
+const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Type__KDPC:name;
+const unique T.Importance__KDPC:name;
+const unique T.Number__KDPC:name;
+const unique T.DpcListEntry__KDPC:name;
+const unique T.DeferredRoutine__KDPC:name;
+const unique T.DeferredContext__KDPC:name;
+const unique T.SystemArgument1__KDPC:name;
+const unique T.SystemArgument2__KDPC:name;
+const unique T.DpcData__KDPC:name;
+const unique T.Header__KEVENT:name;
+const unique T.KeyboardIdentifier__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyboardMode__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfIndicators__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES:name;
+const unique T.InputDataQueueLength__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyRepeatMinimum__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyRepeatMaximum__KEYBOARD_ATTRIBUTES:name;
+const unique T.Type__KEYBOARD_ID:name;
+const unique T.Subtype__KEYBOARD_ID:name;
+const unique T.UnitId__KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T.UnitId__KEYBOARD_INPUT_DATA:name;
+const unique T.MakeCode__KEYBOARD_INPUT_DATA:name;
+const unique T.Flags__KEYBOARD_INPUT_DATA:name;
+const unique T.Reserved__KEYBOARD_INPUT_DATA:name;
+const unique T.ExtraInformation__KEYBOARD_INPUT_DATA:name;
+const unique T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Header__KSEMAPHORE:name;
+const unique T.Limit__KSEMAPHORE:name;
+const unique T.__unnamed_8_58ee4a31__LARGE_INTEGER:name;
+const unique T.u__LARGE_INTEGER:name;
+const unique T.QuadPart__LARGE_INTEGER:name;
+const unique T.Flink__LIST_ENTRY:name;
+const unique T.Blink__LIST_ENTRY:name;
+const unique T.LowPart__LUID:name;
+const unique T.HighPart__LUID:name;
+const unique T.Luid__LUID_AND_ATTRIBUTES:name;
+const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
+const unique T.Next__MDL:name;
+const unique T.Size__MDL:name;
+const unique T.MdlFlags__MDL:name;
+const unique T.Process__MDL:name;
+const unique T.MappedSystemVa__MDL:name;
+const unique T.StartVa__MDL:name;
+const unique T.ByteCount__MDL:name;
+const unique T.ByteOffset__MDL:name;
+const unique T.OwnerThread__OWNER_ENTRY:name;
+const unique T.__unnamed_4_6f9ac8e1__OWNER_ENTRY:name;
+const unique T.File__PORT:name;
+const unique T.Port__PORT:name;
+const unique T.Enabled__PORT:name;
+const unique T.Reserved__PORT:name;
+const unique T.Free__PORT:name;
+const unique T.SequenceD1__POWER_SEQUENCE:name;
+const unique T.SequenceD2__POWER_SEQUENCE:name;
+const unique T.SequenceD3__POWER_SEQUENCE:name;
+const unique T.SystemState__POWER_STATE:name;
+const unique T.DeviceState__POWER_STATE:name;
+const unique T.PrivilegeCount__PRIVILEGE_SET:name;
+const unique T.Control__PRIVILEGE_SET:name;
+const unique T.Privilege__PRIVILEGE_SET:name;
+const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
+const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.__unnamed_4_3a2fdc5e__SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T.Length__UNICODE_STRING:name;
+const unique T.MaximumLength__UNICODE_STRING:name;
+const unique T.Buffer__UNICODE_STRING:name;
+const unique T.Type__VPB:name;
+const unique T.Size__VPB:name;
+const unique T.Flags__VPB:name;
+const unique T.VolumeLabelLength__VPB:name;
+const unique T.DeviceObject__VPB:name;
+const unique T.RealDevice__VPB:name;
+const unique T.SerialNumber__VPB:name;
+const unique T.ReferenceCount__VPB:name;
+const unique T.VolumeLabel__VPB:name;
+const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
+const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
+const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
+const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
+const unique T.GuidCount__WMILIB_CONTEXT:name;
+const unique T.GuidList__WMILIB_CONTEXT:name;
+const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
+const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
+const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
+const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
+const unique T.Reserved___unnamed_12_0d6a30de:name;
+const unique T.MessageCount___unnamed_12_0d6a30de:name;
+const unique T.Vector___unnamed_12_0d6a30de:name;
+const unique T.Affinity___unnamed_12_0d6a30de:name;
+const unique T.Start___unnamed_12_17f5c211:name;
+const unique T.Length48___unnamed_12_17f5c211:name;
+const unique T.Start___unnamed_12_1fb42e39:name;
+const unique T.Length___unnamed_12_1fb42e39:name;
+const unique T.Reserved___unnamed_12_1fb42e39:name;
+const unique T.Start___unnamed_12_2a1563c6:name;
+const unique T.Length___unnamed_12_2a1563c6:name;
+const unique T.DataSize___unnamed_12_31347272:name;
+const unique T.Reserved1___unnamed_12_31347272:name;
+const unique T.Reserved2___unnamed_12_31347272:name;
+const unique T.Raw___unnamed_12_429aadc0:name;
+const unique T.Translated___unnamed_12_429aadc0:name;
+const unique T.Start___unnamed_12_4719de1a:name;
+const unique T.Length___unnamed_12_4719de1a:name;
+const unique T.Data___unnamed_12_4be56faa:name;
+const unique T.Data___unnamed_12_5ce25b92:name;
+const unique T.Generic___unnamed_12_7a698b72:name;
+const unique T.Port___unnamed_12_7a698b72:name;
+const unique T.Interrupt___unnamed_12_7a698b72:name;
+const unique T.MessageInterrupt___unnamed_12_7a698b72:name;
+const unique T.Memory___unnamed_12_7a698b72:name;
+const unique T.Dma___unnamed_12_7a698b72:name;
+const unique T.DevicePrivate___unnamed_12_7a698b72:name;
+const unique T.BusNumber___unnamed_12_7a698b72:name;
+const unique T.DeviceSpecificData___unnamed_12_7a698b72:name;
+const unique T.Memory40___unnamed_12_7a698b72:name;
+const unique T.Memory48___unnamed_12_7a698b72:name;
+const unique T.Memory64___unnamed_12_7a698b72:name;
+const unique T.Start___unnamed_12_87c0de8d:name;
+const unique T.Length64___unnamed_12_87c0de8d:name;
+const unique T.Start___unnamed_12_98bfc55a:name;
+const unique T.Length40___unnamed_12_98bfc55a:name;
+const unique T.Priority___unnamed_12_ab1bd9d7:name;
+const unique T.Reserved1___unnamed_12_ab1bd9d7:name;
+const unique T.Reserved2___unnamed_12_ab1bd9d7:name;
+const unique T.Level___unnamed_12_b0429be9:name;
+const unique T.Vector___unnamed_12_b0429be9:name;
+const unique T.Affinity___unnamed_12_b0429be9:name;
+const unique T.ListEntry___unnamed_12_b43e8de8:name;
+const unique T.__unnamed_4_f19b65c1___unnamed_12_b43e8de8:name;
+const unique T.Level___unnamed_12_bfdb39ee:name;
+const unique T.Vector___unnamed_12_bfdb39ee:name;
+const unique T.Affinity___unnamed_12_bfdb39ee:name;
+const unique T.Start___unnamed_12_cd42b3c3:name;
+const unique T.Length___unnamed_12_cd42b3c3:name;
+const unique T.__unnamed_12_429aadc0___unnamed_12_e668effc:name;
+const unique T.Channel___unnamed_12_e80d029e:name;
+const unique T.Port___unnamed_12_e80d029e:name;
+const unique T.Reserved1___unnamed_12_e80d029e:name;
+const unique T.Length___unnamed_16_07c0bcc5:name;
+const unique T.MinBusNumber___unnamed_16_07c0bcc5:name;
+const unique T.MaxBusNumber___unnamed_16_07c0bcc5:name;
+const unique T.Reserved___unnamed_16_07c0bcc5:name;
+const unique T.InterfaceType___unnamed_16_29cb9f2f:name;
+const unique T.Size___unnamed_16_29cb9f2f:name;
+const unique T.Version___unnamed_16_29cb9f2f:name;
+const unique T.Interface___unnamed_16_29cb9f2f:name;
+const unique T.InterfaceSpecificData___unnamed_16_29cb9f2f:name;
+const unique T.SecurityContext___unnamed_16_30f11dbf:name;
+const unique T.Options___unnamed_16_30f11dbf:name;
+const unique T.FileAttributes___unnamed_16_30f11dbf:name;
+const unique T.ShareAccess___unnamed_16_30f11dbf:name;
+const unique T.EaLength___unnamed_16_30f11dbf:name;
+const unique T.DriverContext___unnamed_16_35034f68:name;
+const unique T.Length___unnamed_16_487a9498:name;
+const unique T.FileName___unnamed_16_487a9498:name;
+const unique T.FileInformationClass___unnamed_16_487a9498:name;
+const unique T.FileIndex___unnamed_16_487a9498:name;
+const unique T.OutputBufferLength___unnamed_16_5f6a8844:name;
+const unique T.InputBufferLength___unnamed_16_5f6a8844:name;
+const unique T.FsControlCode___unnamed_16_5f6a8844:name;
+const unique T.Type3InputBuffer___unnamed_16_5f6a8844:name;
+const unique T.Length___unnamed_16_7177b9f3:name;
+const unique T.FileInformationClass___unnamed_16_7177b9f3:name;
+const unique T.FileObject___unnamed_16_7177b9f3:name;
+const unique T.__unnamed_4_43913aa5___unnamed_16_7177b9f3:name;
+const unique T.Length___unnamed_16_88e91ef6:name;
+const unique T.Key___unnamed_16_88e91ef6:name;
+const unique T.ByteOffset___unnamed_16_88e91ef6:name;
+const unique T.Length___unnamed_16_8c506c98:name;
+const unique T.Key___unnamed_16_8c506c98:name;
+const unique T.ByteOffset___unnamed_16_8c506c98:name;
+const unique T.WhichSpace___unnamed_16_9ac2e5f8:name;
+const unique T.Buffer___unnamed_16_9ac2e5f8:name;
+const unique T.Offset___unnamed_16_9ac2e5f8:name;
+const unique T.Length___unnamed_16_9ac2e5f8:name;
+const unique T.Create___unnamed_16_b93842ad:name;
+const unique T.Read___unnamed_16_b93842ad:name;
+const unique T.Write___unnamed_16_b93842ad:name;
+const unique T.QueryDirectory___unnamed_16_b93842ad:name;
+const unique T.NotifyDirectory___unnamed_16_b93842ad:name;
+const unique T.QueryFile___unnamed_16_b93842ad:name;
+const unique T.SetFile___unnamed_16_b93842ad:name;
+const unique T.QueryEa___unnamed_16_b93842ad:name;
+const unique T.SetEa___unnamed_16_b93842ad:name;
+const unique T.QueryVolume___unnamed_16_b93842ad:name;
+const unique T.SetVolume___unnamed_16_b93842ad:name;
+const unique T.FileSystemControl___unnamed_16_b93842ad:name;
+const unique T.LockControl___unnamed_16_b93842ad:name;
+const unique T.DeviceIoControl___unnamed_16_b93842ad:name;
+const unique T.QuerySecurity___unnamed_16_b93842ad:name;
+const unique T.SetSecurity___unnamed_16_b93842ad:name;
+const unique T.MountVolume___unnamed_16_b93842ad:name;
+const unique T.VerifyVolume___unnamed_16_b93842ad:name;
+const unique T.Scsi___unnamed_16_b93842ad:name;
+const unique T.QueryQuota___unnamed_16_b93842ad:name;
+const unique T.SetQuota___unnamed_16_b93842ad:name;
+const unique T.QueryDeviceRelations___unnamed_16_b93842ad:name;
+const unique T.QueryInterface___unnamed_16_b93842ad:name;
+const unique T.DeviceCapabilities___unnamed_16_b93842ad:name;
+const unique T.FilterResourceRequirements___unnamed_16_b93842ad:name;
+const unique T.ReadWriteConfig___unnamed_16_b93842ad:name;
+const unique T.SetLock___unnamed_16_b93842ad:name;
+const unique T.QueryId___unnamed_16_b93842ad:name;
+const unique T.QueryDeviceText___unnamed_16_b93842ad:name;
+const unique T.UsageNotification___unnamed_16_b93842ad:name;
+const unique T.WaitWake___unnamed_16_b93842ad:name;
+const unique T.PowerSequence___unnamed_16_b93842ad:name;
+const unique T.Power___unnamed_16_b93842ad:name;
+const unique T.StartDevice___unnamed_16_b93842ad:name;
+const unique T.WMI___unnamed_16_b93842ad:name;
+const unique T.Others___unnamed_16_b93842ad:name;
+const unique T.Length___unnamed_16_b9c62eab:name;
+const unique T.Key___unnamed_16_b9c62eab:name;
+const unique T.ByteOffset___unnamed_16_b9c62eab:name;
+const unique T.__unnamed_4_7d9d0c7e___unnamed_16_bb584060:name;
+const unique T.Type___unnamed_16_bb584060:name;
+const unique T.State___unnamed_16_bb584060:name;
+const unique T.ShutdownType___unnamed_16_bb584060:name;
+const unique T.OutputBufferLength___unnamed_16_dba55c7c:name;
+const unique T.InputBufferLength___unnamed_16_dba55c7c:name;
+const unique T.IoControlCode___unnamed_16_dba55c7c:name;
+const unique T.Type3InputBuffer___unnamed_16_dba55c7c:name;
+const unique T.DeviceQueueEntry___unnamed_16_e70c268b:name;
+const unique T.__unnamed_16_35034f68___unnamed_16_e70c268b:name;
+const unique T.Argument1___unnamed_16_e734d694:name;
+const unique T.Argument2___unnamed_16_e734d694:name;
+const unique T.Argument3___unnamed_16_e734d694:name;
+const unique T.Argument4___unnamed_16_e734d694:name;
+const unique T.ProviderId___unnamed_16_eac6dbea:name;
+const unique T.DataPath___unnamed_16_eac6dbea:name;
+const unique T.BufferSize___unnamed_16_eac6dbea:name;
+const unique T.Buffer___unnamed_16_eac6dbea:name;
+const unique T.Length___unnamed_16_f6cae4c2:name;
+const unique T.EaList___unnamed_16_f6cae4c2:name;
+const unique T.EaListLength___unnamed_16_f6cae4c2:name;
+const unique T.EaIndex___unnamed_16_f6cae4c2:name;
+const unique T.Length___unnamed_16_fe36e4f4:name;
+const unique T.StartSid___unnamed_16_fe36e4f4:name;
+const unique T.SidList___unnamed_16_fe36e4f4:name;
+const unique T.SidListLength___unnamed_16_fe36e4f4:name;
+const unique T.Abandoned___unnamed_1_29794256:name;
+const unique T.Absolute___unnamed_1_29794256:name;
+const unique T.NpxIrql___unnamed_1_29794256:name;
+const unique T.Signalling___unnamed_1_29794256:name;
+const unique T.Inserted___unnamed_1_2dc63b48:name;
+const unique T.DebugActive___unnamed_1_2dc63b48:name;
+const unique T.DpcActive___unnamed_1_2dc63b48:name;
+const unique T.Size___unnamed_1_2ef8da39:name;
+const unique T.Hand___unnamed_1_2ef8da39:name;
+const unique T.Lock___unnamed_1_faa7dc71:name;
+const unique T.MinimumVector___unnamed_20_f4d2e6d8:name;
+const unique T.MaximumVector___unnamed_20_f4d2e6d8:name;
+const unique T.AffinityPolicy___unnamed_20_f4d2e6d8:name;
+const unique T.PriorityPolicy___unnamed_20_f4d2e6d8:name;
+const unique T.TargetedProcessors___unnamed_20_f4d2e6d8:name;
+const unique T.Length___unnamed_24_41cbc8c0:name;
+const unique T.Alignment___unnamed_24_41cbc8c0:name;
+const unique T.MinimumAddress___unnamed_24_41cbc8c0:name;
+const unique T.MaximumAddress___unnamed_24_41cbc8c0:name;
+const unique T.Length48___unnamed_24_5419c914:name;
+const unique T.Alignment48___unnamed_24_5419c914:name;
+const unique T.MinimumAddress___unnamed_24_5419c914:name;
+const unique T.MaximumAddress___unnamed_24_5419c914:name;
+const unique T.Length___unnamed_24_67a5ff10:name;
+const unique T.Alignment___unnamed_24_67a5ff10:name;
+const unique T.MinimumAddress___unnamed_24_67a5ff10:name;
+const unique T.MaximumAddress___unnamed_24_67a5ff10:name;
+const unique T.Port___unnamed_24_72c3976e:name;
+const unique T.Memory___unnamed_24_72c3976e:name;
+const unique T.Interrupt___unnamed_24_72c3976e:name;
+const unique T.Dma___unnamed_24_72c3976e:name;
+const unique T.Generic___unnamed_24_72c3976e:name;
+const unique T.DevicePrivate___unnamed_24_72c3976e:name;
+const unique T.BusNumber___unnamed_24_72c3976e:name;
+const unique T.ConfigData___unnamed_24_72c3976e:name;
+const unique T.Memory40___unnamed_24_72c3976e:name;
+const unique T.Memory48___unnamed_24_72c3976e:name;
+const unique T.Memory64___unnamed_24_72c3976e:name;
+const unique T.Length64___unnamed_24_a26050bb:name;
+const unique T.Alignment64___unnamed_24_a26050bb:name;
+const unique T.MinimumAddress___unnamed_24_a26050bb:name;
+const unique T.MaximumAddress___unnamed_24_a26050bb:name;
+const unique T.Length___unnamed_24_b8f476db:name;
+const unique T.Alignment___unnamed_24_b8f476db:name;
+const unique T.MinimumAddress___unnamed_24_b8f476db:name;
+const unique T.MaximumAddress___unnamed_24_b8f476db:name;
+const unique T.Length40___unnamed_24_d09044b4:name;
+const unique T.Alignment40___unnamed_24_d09044b4:name;
+const unique T.MinimumAddress___unnamed_24_d09044b4:name;
+const unique T.MaximumAddress___unnamed_24_d09044b4:name;
+const unique T.ReplaceIfExists___unnamed_2_46cc4597:name;
+const unique T.AdvanceOnly___unnamed_2_46cc4597:name;
+const unique T.__unnamed_16_e70c268b___unnamed_40_7218f704:name;
+const unique T.Thread___unnamed_40_7218f704:name;
+const unique T.AuxiliaryBuffer___unnamed_40_7218f704:name;
+const unique T.__unnamed_12_b43e8de8___unnamed_40_7218f704:name;
+const unique T.OriginalFileObject___unnamed_40_7218f704:name;
+const unique T.ListEntry___unnamed_40_c55c9377:name;
+const unique T.Wcb___unnamed_40_c55c9377:name;
+const unique T.InitialPrivilegeSet___unnamed_44_5584090d:name;
+const unique T.PrivilegeSet___unnamed_44_5584090d:name;
+const unique T.Overlay___unnamed_48_cf99b13f:name;
+const unique T.Apc___unnamed_48_cf99b13f:name;
+const unique T.CompletionKey___unnamed_48_cf99b13f:name;
+const unique T.PowerState___unnamed_4_069846fb:name;
+const unique T.IdType___unnamed_4_224c32f4:name;
+const unique T.Capabilities___unnamed_4_2de698da:name;
+const unique T.__unnamed_4_c3479730___unnamed_4_3a2fdc5e:name;
+const unique T.ContextAsUlong___unnamed_4_3a2fdc5e:name;
+const unique T.Length___unnamed_4_3a4c1a13:name;
+const unique T.__unnamed_2_46cc4597___unnamed_4_43913aa5:name;
+const unique T.ClusterCount___unnamed_4_43913aa5:name;
+const unique T.DeleteHandle___unnamed_4_43913aa5:name;
+const unique T.UserApcRoutine___unnamed_4_4e8dd2ba:name;
+const unique T.IssuingProcess___unnamed_4_4e8dd2ba:name;
+const unique T.Srb___unnamed_4_52603077:name;
+const unique T.Address___unnamed_4_52c594f7:name;
+const unique T.CreatorBackTraceIndex___unnamed_4_52c594f7:name;
+const unique T.Type___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_29794256___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_2ef8da39___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_2dc63b48___unnamed_4_5ca00198:name;
+const unique T.MasterIrp___unnamed_4_6ac6463c:name;
+const unique T.IrpCount___unnamed_4_6ac6463c:name;
+const unique T.SystemBuffer___unnamed_4_6ac6463c:name;
+const unique T.OwnerCount___unnamed_4_6f9ac8e1:name;
+const unique T.TableSize___unnamed_4_6f9ac8e1:name;
+const unique T.PowerSequence___unnamed_4_7a02167b:name;
+const unique T.SystemContext___unnamed_4_7d9d0c7e:name;
+const unique T.SystemPowerStateContext___unnamed_4_7d9d0c7e:name;
+const unique T.IoResourceRequirementList___unnamed_4_82f7a864:name;
+const unique T.Length___unnamed_4_9aec220b:name;
+const unique T.__unnamed_4_5ca00198___unnamed_4_a97c65a1:name;
+const unique T.Lock___unnamed_4_a97c65a1:name;
+const unique T.Reserved1___unnamed_4_c3479730:name;
+const unique T.TargetSystemState___unnamed_4_c3479730:name;
+const unique T.EffectiveSystemState___unnamed_4_c3479730:name;
+const unique T.CurrentSystemState___unnamed_4_c3479730:name;
+const unique T.IgnoreHibernationPath___unnamed_4_c3479730:name;
+const unique T.PseudoTransition___unnamed_4_c3479730:name;
+const unique T.Reserved2___unnamed_4_c3479730:name;
+const unique T.Status___unnamed_4_d99b6e2b:name;
+const unique T.Pointer___unnamed_4_d99b6e2b:name;
+const unique T.CurrentStackLocation___unnamed_4_f19b65c1:name;
+const unique T.PacketType___unnamed_4_f19b65c1:name;
+const unique T.Type___unnamed_4_fa10fc16:name;
+const unique T.SecurityInformation___unnamed_8_01efa60d:name;
+const unique T.Length___unnamed_8_01efa60d:name;
+const unique T.MinimumChannel___unnamed_8_08d4cef8:name;
+const unique T.MaximumChannel___unnamed_8_08d4cef8:name;
+const unique T.__unnamed_4_4e8dd2ba___unnamed_8_0a898c0c:name;
+const unique T.UserApcContext___unnamed_8_0a898c0c:name;
+const unique T.SecurityInformation___unnamed_8_1330f93a:name;
+const unique T.SecurityDescriptor___unnamed_8_1330f93a:name;
+const unique T.AsynchronousParameters___unnamed_8_181d0de9:name;
+const unique T.AllocationSize___unnamed_8_181d0de9:name;
+const unique T.Vpb___unnamed_8_4812764d:name;
+const unique T.DeviceObject___unnamed_8_4812764d:name;
+const unique T.Length___unnamed_8_559a91e6:name;
+const unique T.FsInformationClass___unnamed_8_559a91e6:name;
+const unique T.Length___unnamed_8_5845b309:name;
+const unique T.FileInformationClass___unnamed_8_5845b309:name;
+const unique T.LowPart___unnamed_8_58ee4a31:name;
+const unique T.HighPart___unnamed_8_58ee4a31:name;
+const unique T.AllocatedResources___unnamed_8_61acf4ce:name;
+const unique T.AllocatedResourcesTranslated___unnamed_8_61acf4ce:name;
+const unique T.DeviceTextType___unnamed_8_6acfee04:name;
+const unique T.LocaleId___unnamed_8_6acfee04:name;
+const unique T.Length___unnamed_8_7f26a9dd:name;
+const unique T.CompletionFilter___unnamed_8_7f26a9dd:name;
+const unique T.Vpb___unnamed_8_87add0bd:name;
+const unique T.DeviceObject___unnamed_8_87add0bd:name;
+const unique T.InPath___unnamed_8_b2773e4c:name;
+const unique T.Reserved___unnamed_8_b2773e4c:name;
+const unique T.Type___unnamed_8_b2773e4c:name;
+const unique T.Length___unnamed_8_de890d4e:name;
+const unique T.FsInformationClass___unnamed_8_de890d4e:name;
+const unique T.LowPart___unnamed_8_ef9ba0d3:name;
+const unique T.HighPart___unnamed_8_ef9ba0d3:name;
+
+// Type declarations
+
+const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_LIST:name;
+const unique T.A1_LUID_AND_ATTRIBUTES:name;
+const unique T.A256UINT2:name;
+const unique T.A28PFDRIVER_DISPATCH:name;
+const unique T.A2UCHAR:name;
+const unique T.A2UINT2:name;
+const unique T.A32UINT2:name;
+const unique T.A37CHAR:name;
+const unique T.A3UCHAR:name;
+const unique T.A3UINT4:name;
+const unique T.A3_LUID_AND_ATTRIBUTES:name;
+const unique T.A40CHAR:name;
+const unique T.A4PVOID:name;
+const unique T.A4UINT4:name;
+const unique T.A5_DEVICE_POWER_STATE:name;
+const unique T.A65CHAR:name;
+const unique T.A75CHAR:name;
+const unique T.A76CHAR:name;
+const unique T.A7UINT2:name;
+const unique T.A7_DEVICE_POWER_STATE:name;
+const unique T.A83CHAR:name;
+const unique T.A8UCHAR:name;
+const unique T.A9UINT2:name;
+const unique T.BUS_QUERY_ID_TYPE:name;
+const unique T.CHAR:name;
+const unique T.DEVICE_TEXT_TYPE:name;
+const unique T.F0:name;
+const unique T.F1:name;
+const unique T.F10:name;
+const unique T.F11:name;
+const unique T.F12:name;
+const unique T.F13:name;
+const unique T.F14:name;
+const unique T.F15:name;
+const unique T.F16:name;
+const unique T.F17:name;
+const unique T.F18:name;
+const unique T.F19:name;
+const unique T.F2:name;
+const unique T.F20:name;
+const unique T.F21:name;
+const unique T.F22:name;
+const unique T.F23:name;
+const unique T.F24:name;
+const unique T.F25:name;
+const unique T.F26:name;
+const unique T.F27:name;
+const unique T.F28:name;
+const unique T.F29:name;
+const unique T.F3:name;
+const unique T.F30:name;
+const unique T.F31:name;
+const unique T.F32:name;
+const unique T.F33:name;
+const unique T.F34:name;
+const unique T.F35:name;
+const unique T.F36:name;
+const unique T.F37:name;
+const unique T.F38:name;
+const unique T.F4:name;
+const unique T.F5:name;
+const unique T.F6:name;
+const unique T.F7:name;
+const unique T.F8:name;
+const unique T.F9:name;
+const unique T.FDRIVER_ADD_DEVICE:name;
+const unique T.FDRIVER_CANCEL:name;
+const unique T.FDRIVER_CONTROL:name;
+const unique T.FDRIVER_DISPATCH:name;
+const unique T.FDRIVER_INITIALIZE:name;
+const unique T.FDRIVER_STARTIO:name;
+const unique T.FDRIVER_UNLOAD:name;
+const unique T.FFAST_IO_ACQUIRE_FILE:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.FFAST_IO_DETACH_DEVICE:name;
+const unique T.FFAST_IO_DEVICE_CONTROL:name;
+const unique T.FFAST_IO_LOCK:name;
+const unique T.FFAST_IO_MDL_READ:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.FFAST_IO_QUERY_OPEN:name;
+const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.FFAST_IO_READ:name;
+const unique T.FFAST_IO_READ_COMPRESSED:name;
+const unique T.FFAST_IO_RELEASE_FILE:name;
+const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_UNLOCK_ALL:name;
+const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.FFAST_IO_UNLOCK_SINGLE:name;
+const unique T.FFAST_IO_WRITE:name;
+const unique T.FFAST_IO_WRITE_COMPRESSED:name;
+const unique T.FIO_COMPLETION_ROUTINE:name;
+const unique T.FKDEFERRED_ROUTINE:name;
+const unique T.INT2:name;
+const unique T.INT4:name;
+const unique T.INT8:name;
+const unique T.PA2UINT2:name;
+const unique T.PA37CHAR:name;
+const unique T.PA40CHAR:name;
+const unique T.PA4UINT4:name;
+const unique T.PA65CHAR:name;
+const unique T.PA75CHAR:name;
+const unique T.PA76CHAR:name;
+const unique T.PA7UINT2:name;
+const unique T.PA83CHAR:name;
+const unique T.PA9UINT2:name;
+const unique T.PCHAR:name;
+const unique T.PF19:name;
+const unique T.PF21:name;
+const unique T.PF23:name;
+const unique T.PF24:name;
+const unique T.PF25:name;
+const unique T.PF33:name;
+const unique T.PF34:name;
+const unique T.PF35:name;
+const unique T.PF36:name;
+const unique T.PF37:name;
+const unique T.PF38:name;
+const unique T.PFDRIVER_ADD_DEVICE:name;
+const unique T.PFDRIVER_CANCEL:name;
+const unique T.PFDRIVER_CONTROL:name;
+const unique T.PFDRIVER_DISPATCH:name;
+const unique T.PFDRIVER_INITIALIZE:name;
+const unique T.PFDRIVER_STARTIO:name;
+const unique T.PFDRIVER_UNLOAD:name;
+const unique T.PFFAST_IO_ACQUIRE_FILE:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.PFFAST_IO_DETACH_DEVICE:name;
+const unique T.PFFAST_IO_DEVICE_CONTROL:name;
+const unique T.PFFAST_IO_LOCK:name;
+const unique T.PFFAST_IO_MDL_READ:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.PFFAST_IO_QUERY_OPEN:name;
+const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.PFFAST_IO_READ:name;
+const unique T.PFFAST_IO_READ_COMPRESSED:name;
+const unique T.PFFAST_IO_RELEASE_FILE:name;
+const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_UNLOCK_ALL:name;
+const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
+const unique T.PFFAST_IO_WRITE:name;
+const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
+const unique T.PFIO_COMPLETION_ROUTINE:name;
+const unique T.PFKDEFERRED_ROUTINE:name;
+const unique T.PINT4:name;
+const unique T.POWER_ACTION:name;
+const unique T.PPCHAR:name;
+const unique T.PPF24:name;
+const unique T.PPPUINT2:name;
+const unique T.PPP_DEVICE_OBJECT:name;
+const unique T.PPUINT2:name;
+const unique T.PPUINT4:name;
+const unique T.PPVOID:name;
+const unique T.PP_DEVICE_EXTENSION:name;
+const unique T.PP_DEVICE_OBJECT:name;
+const unique T.PP_DRIVER_OBJECT:name;
+const unique T.PP_ERESOURCE:name;
+const unique T.PP_FAST_MUTEX:name;
+const unique T.PP_IO_REMOVE_LOCK:name;
+const unique T.PP_LIST_ENTRY:name;
+const unique T.PP_MDL:name;
+const unique T.PP_UNICODE_STRING:name;
+const unique T.PUCHAR:name;
+const unique T.PUINT2:name;
+const unique T.PUINT4:name;
+const unique T.PVOID:name;
+const unique T.PWMIGUIDREGINFO:name;
+const unique T.P_ACCESS_STATE:name;
+const unique T.P_CM_RESOURCE_LIST:name;
+const unique T.P_COMPRESSED_DATA_INFO:name;
+const unique T.P_DEVICE_CAPABILITIES:name;
+const unique T.P_DEVICE_EXTENSION:name;
+const unique T.P_DEVICE_OBJECT:name;
+const unique T.P_DEVOBJ_EXTENSION:name;
+const unique T.P_DRIVER_EXTENSION:name;
+const unique T.P_DRIVER_OBJECT:name;
+const unique T.P_EPROCESS:name;
+const unique T.P_ERESOURCE:name;
+const unique T.P_ETHREAD:name;
+const unique T.P_FAST_IO_DISPATCH:name;
+const unique T.P_FAST_MUTEX:name;
+const unique T.P_FILE_BASIC_INFORMATION:name;
+const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
+const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.P_FILE_OBJECT:name;
+const unique T.P_FILE_STANDARD_INFORMATION:name;
+const unique T.P_GLOBALS:name;
+const unique T.P_GUID:name;
+const unique T.P_INTERFACE:name;
+const unique T.P_IO_COMPLETION_CONTEXT:name;
+const unique T.P_IO_REMOVE_LOCK:name;
+const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.P_IO_SECURITY_CONTEXT:name;
+const unique T.P_IO_STACK_LOCATION:name;
+const unique T.P_IO_STATUS_BLOCK:name;
+const unique T.P_IO_TIMER:name;
+const unique T.P_IRP:name;
+const unique T.P_KAPC:name;
+const unique T.P_KDPC:name;
+const unique T.P_KEVENT:name;
+const unique T.P_KEYBOARD_INPUT_DATA:name;
+const unique T.P_KSEMAPHORE:name;
+const unique T.P_KTHREAD:name;
+const unique T.P_LARGE_INTEGER:name;
+const unique T.P_LIST_ENTRY:name;
+const unique T.P_MDL:name;
+const unique T.P_OWNER_ENTRY:name;
+const unique T.P_POOL_TYPE:name;
+const unique T.P_PORT:name;
+const unique T.P_POWER_SEQUENCE:name;
+const unique T.P_SCSI_REQUEST_BLOCK:name;
+const unique T.P_SECTION_OBJECT_POINTERS:name;
+const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.P_UNICODE_STRING:name;
+const unique T.P_VPB:name;
+const unique T.UCHAR:name;
+const unique T.UINT2:name;
+const unique T.UINT4:name;
+const unique T.VOID:name;
+const unique T.WMIENABLEDISABLECONTROL:name;
+const unique T.WMIGUIDREGINFO:name;
+const unique T._ACCESS_STATE:name;
+const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_LIST:name;
+const unique T._CM_RESOURCE_LIST:name;
+const unique T._COMPRESSED_DATA_INFO:name;
+const unique T._DEVICE_CAPABILITIES:name;
+const unique T._DEVICE_EXTENSION:name;
+const unique T._DEVICE_OBJECT:name;
+const unique T._DEVICE_POWER_STATE:name;
+const unique T._DEVICE_RELATION_TYPE:name;
+const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
+const unique T._DEVOBJ_EXTENSION:name;
+const unique T._DISPATCHER_HEADER:name;
+const unique T._DRIVER_EXTENSION:name;
+const unique T._DRIVER_OBJECT:name;
+const unique T._EPROCESS:name;
+const unique T._ERESOURCE:name;
+const unique T._ETHREAD:name;
+const unique T._FAST_IO_DISPATCH:name;
+const unique T._FAST_MUTEX:name;
+const unique T._FILE_BASIC_INFORMATION:name;
+const unique T._FILE_GET_QUOTA_INFORMATION:name;
+const unique T._FILE_INFORMATION_CLASS:name;
+const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T._FILE_OBJECT:name;
+const unique T._FILE_STANDARD_INFORMATION:name;
+const unique T._FSINFOCLASS:name;
+const unique T._GLOBALS:name;
+const unique T._GUID:name;
+const unique T._INITIAL_PRIVILEGE_SET:name;
+const unique T._INTERFACE:name;
+const unique T._INTERFACE_TYPE:name;
+const unique T._IO_ALLOCATION_ACTION:name;
+const unique T._IO_COMPLETION_CONTEXT:name;
+const unique T._IO_REMOVE_LOCK:name;
+const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T._IO_RESOURCE_DESCRIPTOR:name;
+const unique T._IO_RESOURCE_LIST:name;
+const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T._IO_SECURITY_CONTEXT:name;
+const unique T._IO_STACK_LOCATION:name;
+const unique T._IO_STATUS_BLOCK:name;
+const unique T._IO_TIMER:name;
+const unique T._IRP:name;
+const unique T._IRQ_DEVICE_POLICY:name;
+const unique T._IRQ_PRIORITY:name;
+const unique T._KAPC:name;
+const unique T._KDEVICE_QUEUE:name;
+const unique T._KDEVICE_QUEUE_ENTRY:name;
+const unique T._KDPC:name;
+const unique T._KEVENT:name;
+const unique T._KEYBOARD_ATTRIBUTES:name;
+const unique T._KEYBOARD_ID:name;
+const unique T._KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T._KEYBOARD_INPUT_DATA:name;
+const unique T._KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T._KSEMAPHORE:name;
+const unique T._KTHREAD:name;
+const unique T._LARGE_INTEGER:name;
+const unique T._LIST_ENTRY:name;
+const unique T._LUID:name;
+const unique T._LUID_AND_ATTRIBUTES:name;
+const unique T._MDL:name;
+const unique T._OWNER_ENTRY:name;
+const unique T._POOL_TYPE:name;
+const unique T._PORT:name;
+const unique T._POWER_SEQUENCE:name;
+const unique T._POWER_STATE:name;
+const unique T._POWER_STATE_TYPE:name;
+const unique T._PRIVILEGE_SET:name;
+const unique T._SCSI_REQUEST_BLOCK:name;
+const unique T._SECTION_OBJECT_POINTERS:name;
+const unique T._SECURITY_IMPERSONATION_LEVEL:name;
+const unique T._SECURITY_QUALITY_OF_SERVICE:name;
+const unique T._SECURITY_SUBJECT_CONTEXT:name;
+const unique T._SYSTEM_POWER_STATE:name;
+const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T._UNICODE_STRING:name;
+const unique T._VPB:name;
+const unique T._WAIT_CONTEXT_BLOCK:name;
+const unique T._WMILIB_CONTEXT:name;
+const unique T.__unnamed_12_0d6a30de:name;
+const unique T.__unnamed_12_17f5c211:name;
+const unique T.__unnamed_12_1fb42e39:name;
+const unique T.__unnamed_12_2a1563c6:name;
+const unique T.__unnamed_12_31347272:name;
+const unique T.__unnamed_12_429aadc0:name;
+const unique T.__unnamed_12_4719de1a:name;
+const unique T.__unnamed_12_4be56faa:name;
+const unique T.__unnamed_12_5ce25b92:name;
+const unique T.__unnamed_12_7a698b72:name;
+const unique T.__unnamed_12_87c0de8d:name;
+const unique T.__unnamed_12_98bfc55a:name;
+const unique T.__unnamed_12_ab1bd9d7:name;
+const unique T.__unnamed_12_b0429be9:name;
+const unique T.__unnamed_12_b43e8de8:name;
+const unique T.__unnamed_12_bfdb39ee:name;
+const unique T.__unnamed_12_cd42b3c3:name;
+const unique T.__unnamed_12_e668effc:name;
+const unique T.__unnamed_12_e80d029e:name;
+const unique T.__unnamed_16_07c0bcc5:name;
+const unique T.__unnamed_16_29cb9f2f:name;
+const unique T.__unnamed_16_30f11dbf:name;
+const unique T.__unnamed_16_35034f68:name;
+const unique T.__unnamed_16_487a9498:name;
+const unique T.__unnamed_16_5f6a8844:name;
+const unique T.__unnamed_16_7177b9f3:name;
+const unique T.__unnamed_16_88e91ef6:name;
+const unique T.__unnamed_16_8c506c98:name;
+const unique T.__unnamed_16_9ac2e5f8:name;
+const unique T.__unnamed_16_b93842ad:name;
+const unique T.__unnamed_16_b9c62eab:name;
+const unique T.__unnamed_16_bb584060:name;
+const unique T.__unnamed_16_dba55c7c:name;
+const unique T.__unnamed_16_e70c268b:name;
+const unique T.__unnamed_16_e734d694:name;
+const unique T.__unnamed_16_eac6dbea:name;
+const unique T.__unnamed_16_f6cae4c2:name;
+const unique T.__unnamed_16_fe36e4f4:name;
+const unique T.__unnamed_1_29794256:name;
+const unique T.__unnamed_1_2dc63b48:name;
+const unique T.__unnamed_1_2ef8da39:name;
+const unique T.__unnamed_1_faa7dc71:name;
+const unique T.__unnamed_20_f4d2e6d8:name;
+const unique T.__unnamed_24_41cbc8c0:name;
+const unique T.__unnamed_24_5419c914:name;
+const unique T.__unnamed_24_67a5ff10:name;
+const unique T.__unnamed_24_72c3976e:name;
+const unique T.__unnamed_24_a26050bb:name;
+const unique T.__unnamed_24_b8f476db:name;
+const unique T.__unnamed_24_d09044b4:name;
+const unique T.__unnamed_2_46cc4597:name;
+const unique T.__unnamed_40_7218f704:name;
+const unique T.__unnamed_40_c55c9377:name;
+const unique T.__unnamed_44_5584090d:name;
+const unique T.__unnamed_48_cf99b13f:name;
+const unique T.__unnamed_4_069846fb:name;
+const unique T.__unnamed_4_224c32f4:name;
+const unique T.__unnamed_4_2de698da:name;
+const unique T.__unnamed_4_3a2fdc5e:name;
+const unique T.__unnamed_4_3a4c1a13:name;
+const unique T.__unnamed_4_43913aa5:name;
+const unique T.__unnamed_4_4e8dd2ba:name;
+const unique T.__unnamed_4_52603077:name;
+const unique T.__unnamed_4_52c594f7:name;
+const unique T.__unnamed_4_5ca00198:name;
+const unique T.__unnamed_4_6ac6463c:name;
+const unique T.__unnamed_4_6f9ac8e1:name;
+const unique T.__unnamed_4_7a02167b:name;
+const unique T.__unnamed_4_7d9d0c7e:name;
+const unique T.__unnamed_4_82f7a864:name;
+const unique T.__unnamed_4_9aec220b:name;
+const unique T.__unnamed_4_a97c65a1:name;
+const unique T.__unnamed_4_c3479730:name;
+const unique T.__unnamed_4_d99b6e2b:name;
+const unique T.__unnamed_4_f19b65c1:name;
+const unique T.__unnamed_4_fa10fc16:name;
+const unique T.__unnamed_8_01efa60d:name;
+const unique T.__unnamed_8_08d4cef8:name;
+const unique T.__unnamed_8_0a898c0c:name;
+const unique T.__unnamed_8_1330f93a:name;
+const unique T.__unnamed_8_181d0de9:name;
+const unique T.__unnamed_8_4812764d:name;
+const unique T.__unnamed_8_559a91e6:name;
+const unique T.__unnamed_8_5845b309:name;
+const unique T.__unnamed_8_58ee4a31:name;
+const unique T.__unnamed_8_61acf4ce:name;
+const unique T.__unnamed_8_6acfee04:name;
+const unique T.__unnamed_8_7f26a9dd:name;
+const unique T.__unnamed_8_87add0bd:name;
+const unique T.__unnamed_8_b2773e4c:name;
+const unique T.__unnamed_8_de890d4e:name;
+const unique T.__unnamed_8_ef9ba0d3:name;
+
+function Abandoned___unnamed_1_29794256(int) returns (int);
+function Abandoned___unnamed_1_29794256Inv(int) returns (int);
+function _S_Abandoned___unnamed_1_29794256([int]bool) returns ([int]bool);
+function _S_Abandoned___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Abandoned___unnamed_1_29794256Inv(Abandoned___unnamed_1_29794256(x))} Abandoned___unnamed_1_29794256Inv(Abandoned___unnamed_1_29794256(x)) == x);
+axiom (forall x:int :: {Abandoned___unnamed_1_29794256Inv(x)} Abandoned___unnamed_1_29794256(Abandoned___unnamed_1_29794256Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_29794256(S)[x]} _S_Abandoned___unnamed_1_29794256(S)[x] <==> S[Abandoned___unnamed_1_29794256Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_29794256Inv(S)[x]} _S_Abandoned___unnamed_1_29794256Inv(S)[x] <==> S[Abandoned___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_29794256(S)} S[x] ==> _S_Abandoned___unnamed_1_29794256(S)[Abandoned___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_29794256Inv(S)} S[x] ==> _S_Abandoned___unnamed_1_29794256Inv(S)[Abandoned___unnamed_1_29794256Inv(x)]);
+
+axiom (forall x:int :: {Abandoned___unnamed_1_29794256(x)} Abandoned___unnamed_1_29794256(x) == x + 0);
+axiom (forall x:int :: {Abandoned___unnamed_1_29794256Inv(x)} Abandoned___unnamed_1_29794256Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Abandoned___unnamed_1_29794256Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Abandoned___unnamed_1_29794256Inv(x));
+function Absolute___unnamed_1_29794256(int) returns (int);
+function Absolute___unnamed_1_29794256Inv(int) returns (int);
+function _S_Absolute___unnamed_1_29794256([int]bool) returns ([int]bool);
+function _S_Absolute___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Absolute___unnamed_1_29794256Inv(Absolute___unnamed_1_29794256(x))} Absolute___unnamed_1_29794256Inv(Absolute___unnamed_1_29794256(x)) == x);
+axiom (forall x:int :: {Absolute___unnamed_1_29794256Inv(x)} Absolute___unnamed_1_29794256(Absolute___unnamed_1_29794256Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_29794256(S)[x]} _S_Absolute___unnamed_1_29794256(S)[x] <==> S[Absolute___unnamed_1_29794256Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_29794256Inv(S)[x]} _S_Absolute___unnamed_1_29794256Inv(S)[x] <==> S[Absolute___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_29794256(S)} S[x] ==> _S_Absolute___unnamed_1_29794256(S)[Absolute___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_29794256Inv(S)} S[x] ==> _S_Absolute___unnamed_1_29794256Inv(S)[Absolute___unnamed_1_29794256Inv(x)]);
+
+axiom (forall x:int :: {Absolute___unnamed_1_29794256(x)} Absolute___unnamed_1_29794256(x) == x + 0);
+axiom (forall x:int :: {Absolute___unnamed_1_29794256Inv(x)} Absolute___unnamed_1_29794256Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Absolute___unnamed_1_29794256Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Absolute___unnamed_1_29794256Inv(x));
+function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x))} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 16);
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 16);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function AllowDisable__DEVICE_EXTENSION(int) returns (int);
+function AllowDisable__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_AllowDisable__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_AllowDisable__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSIONInv(AllowDisable__DEVICE_EXTENSION(x))} AllowDisable__DEVICE_EXTENSIONInv(AllowDisable__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSIONInv(x)} AllowDisable__DEVICE_EXTENSION(AllowDisable__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_AllowDisable__DEVICE_EXTENSION(S)[x]} _S_AllowDisable__DEVICE_EXTENSION(S)[x] <==> S[AllowDisable__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_AllowDisable__DEVICE_EXTENSIONInv(S)[x]} _S_AllowDisable__DEVICE_EXTENSIONInv(S)[x] <==> S[AllowDisable__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AllowDisable__DEVICE_EXTENSION(S)} S[x] ==> _S_AllowDisable__DEVICE_EXTENSION(S)[AllowDisable__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AllowDisable__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_AllowDisable__DEVICE_EXTENSIONInv(S)[AllowDisable__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSION(x)} AllowDisable__DEVICE_EXTENSION(x) == x + 106);
+axiom (forall x:int :: {AllowDisable__DEVICE_EXTENSIONInv(x)} AllowDisable__DEVICE_EXTENSIONInv(x) == x - 106);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1) == AllowDisable__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 106)} MINUS_LEFT_PTR(x, 1, 106) == AllowDisable__DEVICE_EXTENSIONInv(x));
+function BaseClassName__GLOBALS(int) returns (int);
+function BaseClassName__GLOBALSInv(int) returns (int);
+function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
+function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 368);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 368);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1) == BaseClassName__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 368)} MINUS_LEFT_PTR(x, 1, 368) == BaseClassName__GLOBALSInv(x));
+function Blink__LIST_ENTRY(int) returns (int);
+function Blink__LIST_ENTRYInv(int) returns (int);
+function _S_Blink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Blink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x))} Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRY(Blink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRY(S)[x]} _S_Blink__LIST_ENTRY(S)[x] <==> S[Blink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRYInv(S)[x]} _S_Blink__LIST_ENTRYInv(S)[x] <==> S[Blink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRY(S)} S[x] ==> _S_Blink__LIST_ENTRY(S)[Blink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRYInv(S)} S[x] ==> _S_Blink__LIST_ENTRYInv(S)[Blink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == x + 4);
+axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRYInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Blink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Blink__LIST_ENTRYInv(x));
+function Blocks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x))} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 56);
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 56);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Buffer__UNICODE_STRING(int) returns (int);
+function Buffer__UNICODE_STRINGInv(int) returns (int);
+function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
+function Common__IO_REMOVE_LOCK(int) returns (int);
+function Common__IO_REMOVE_LOCKInv(int) returns (int);
+function _S_Common__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
+function _S_Common__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x))} Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x)) == x);
+axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCK(Common__IO_REMOVE_LOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCK(S)[x]} _S_Common__IO_REMOVE_LOCK(S)[x] <==> S[Common__IO_REMOVE_LOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCKInv(S)[x]} _S_Common__IO_REMOVE_LOCKInv(S)[x] <==> S[Common__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCK(S)} S[x] ==> _S_Common__IO_REMOVE_LOCK(S)[Common__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Common__IO_REMOVE_LOCKInv(S)[Common__IO_REMOVE_LOCKInv(x)]);
+
+axiom (forall x:int :: {Common__IO_REMOVE_LOCK(x)} Common__IO_REMOVE_LOCK(x) == x + 0);
+axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCKInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Common__IO_REMOVE_LOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Common__IO_REMOVE_LOCKInv(x));
+function ConnectOneClassToOnePort__GLOBALS(int) returns (int);
+function ConnectOneClassToOnePort__GLOBALSInv(int) returns (int);
+function _S_ConnectOneClassToOnePort__GLOBALS([int]bool) returns ([int]bool);
+function _S_ConnectOneClassToOnePort__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x))} ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x)) == x);
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALS(ConnectOneClassToOnePort__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALS(S)[x]} _S_ConnectOneClassToOnePort__GLOBALS(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALSInv(S)[x]} _S_ConnectOneClassToOnePort__GLOBALSInv(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALS(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALS(S)[ConnectOneClassToOnePort__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALSInv(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALSInv(S)[ConnectOneClassToOnePort__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALS(x)} ConnectOneClassToOnePort__GLOBALS(x) == x + 56);
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALSInv(x) == x - 56);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == ConnectOneClassToOnePort__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == ConnectOneClassToOnePort__GLOBALSInv(x));
+function DataIn__DEVICE_EXTENSION(int) returns (int);
+function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
+function DataOut__DEVICE_EXTENSION(int) returns (int);
+function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
+function Dbg__IO_REMOVE_LOCK(int) returns (int);
+function Dbg__IO_REMOVE_LOCKInv(int) returns (int);
+function _S_Dbg__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
+function _S_Dbg__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x))} Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x)) == x);
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCK(Dbg__IO_REMOVE_LOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCK(S)[x]} _S_Dbg__IO_REMOVE_LOCK(S)[x] <==> S[Dbg__IO_REMOVE_LOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCKInv(S)[x]} _S_Dbg__IO_REMOVE_LOCKInv(S)[x] <==> S[Dbg__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCK(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCK(S)[Dbg__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCKInv(S)[Dbg__IO_REMOVE_LOCKInv(x)]);
+
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCK(x)} Dbg__IO_REMOVE_LOCK(x) == x + 24);
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCKInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Dbg__IO_REMOVE_LOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Dbg__IO_REMOVE_LOCKInv(x));
+function DebugActive___unnamed_1_2dc63b48(int) returns (int);
+function DebugActive___unnamed_1_2dc63b48Inv(int) returns (int);
+function _S_DebugActive___unnamed_1_2dc63b48([int]bool) returns ([int]bool);
+function _S_DebugActive___unnamed_1_2dc63b48Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48Inv(DebugActive___unnamed_1_2dc63b48(x))} DebugActive___unnamed_1_2dc63b48Inv(DebugActive___unnamed_1_2dc63b48(x)) == x);
+axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48Inv(x)} DebugActive___unnamed_1_2dc63b48(DebugActive___unnamed_1_2dc63b48Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_2dc63b48(S)[x]} _S_DebugActive___unnamed_1_2dc63b48(S)[x] <==> S[DebugActive___unnamed_1_2dc63b48Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_2dc63b48Inv(S)[x]} _S_DebugActive___unnamed_1_2dc63b48Inv(S)[x] <==> S[DebugActive___unnamed_1_2dc63b48(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_2dc63b48(S)} S[x] ==> _S_DebugActive___unnamed_1_2dc63b48(S)[DebugActive___unnamed_1_2dc63b48(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_2dc63b48Inv(S)} S[x] ==> _S_DebugActive___unnamed_1_2dc63b48Inv(S)[DebugActive___unnamed_1_2dc63b48Inv(x)]);
+
+axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48(x)} DebugActive___unnamed_1_2dc63b48(x) == x + 0);
+axiom (forall x:int :: {DebugActive___unnamed_1_2dc63b48Inv(x)} DebugActive___unnamed_1_2dc63b48Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DebugActive___unnamed_1_2dc63b48Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DebugActive___unnamed_1_2dc63b48Inv(x));
+function Delay__KEYBOARD_TYPEMATIC_PARAMETERS(int) returns (int);
+function Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(int) returns (int);
+function _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS([int]bool) returns ([int]bool);
+function _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x))} Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)) == x);
+axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Delay__KEYBOARD_TYPEMATIC_PARAMETERS(Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x]} _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x] <==> S[Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x]} _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x] <==> S[Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)} S[x] ==> _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERS(S)[Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)} S[x] ==> _S_Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
+
+axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x)} Delay__KEYBOARD_TYPEMATIC_PARAMETERS(x) == x + 4);
+axiom (forall x:int :: {Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Delay__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
+function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
+function DeviceState__DEVICE_EXTENSION(int) returns (int);
+function DeviceState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x))} DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSION(DeviceState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSION(S)[x]} _S_DeviceState__DEVICE_EXTENSION(S)[x] <==> S[DeviceState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_DeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[DeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSION(S)[DeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSIONInv(S)[DeviceState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSION(x)} DeviceState__DEVICE_EXTENSION(x) == x + 188);
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSIONInv(x) == x - 188);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 188, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 188, 1) == DeviceState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 188)} MINUS_LEFT_PTR(x, 1, 188) == DeviceState__DEVICE_EXTENSIONInv(x));
+function DpcActive___unnamed_1_2dc63b48(int) returns (int);
+function DpcActive___unnamed_1_2dc63b48Inv(int) returns (int);
+function _S_DpcActive___unnamed_1_2dc63b48([int]bool) returns ([int]bool);
+function _S_DpcActive___unnamed_1_2dc63b48Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48Inv(DpcActive___unnamed_1_2dc63b48(x))} DpcActive___unnamed_1_2dc63b48Inv(DpcActive___unnamed_1_2dc63b48(x)) == x);
+axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48Inv(x)} DpcActive___unnamed_1_2dc63b48(DpcActive___unnamed_1_2dc63b48Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_2dc63b48(S)[x]} _S_DpcActive___unnamed_1_2dc63b48(S)[x] <==> S[DpcActive___unnamed_1_2dc63b48Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_2dc63b48Inv(S)[x]} _S_DpcActive___unnamed_1_2dc63b48Inv(S)[x] <==> S[DpcActive___unnamed_1_2dc63b48(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_2dc63b48(S)} S[x] ==> _S_DpcActive___unnamed_1_2dc63b48(S)[DpcActive___unnamed_1_2dc63b48(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_2dc63b48Inv(S)} S[x] ==> _S_DpcActive___unnamed_1_2dc63b48Inv(S)[DpcActive___unnamed_1_2dc63b48Inv(x)]);
+
+axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48(x)} DpcActive___unnamed_1_2dc63b48(x) == x + 0);
+axiom (forall x:int :: {DpcActive___unnamed_1_2dc63b48Inv(x)} DpcActive___unnamed_1_2dc63b48Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DpcActive___unnamed_1_2dc63b48Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DpcActive___unnamed_1_2dc63b48Inv(x));
+function Enabled__DEVICE_EXTENSION(int) returns (int);
+function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 284);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 284);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1) == Enabled__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 284)} MINUS_LEFT_PTR(x, 1, 284) == Enabled__DEVICE_EXTENSIONInv(x));
+function ExecuteWmiMethod__WMILIB_CONTEXT(int) returns (int);
+function ExecuteWmiMethod__WMILIB_CONTEXTInv(int) returns (int);
+function _S_ExecuteWmiMethod__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_ExecuteWmiMethod__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x))} ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXT(ExecuteWmiMethod__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXT(x)} ExecuteWmiMethod__WMILIB_CONTEXT(x) == x + 24);
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXTInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
+function ExtraWaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
+function ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_ExtraWaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x))} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSION(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(x) == x + 264);
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 264);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 264)} MINUS_LEFT_PTR(x, 1, 264) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
+function File__DEVICE_EXTENSION(int) returns (int);
+function File__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 280);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 280);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1) == File__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 280)} MINUS_LEFT_PTR(x, 1, 280) == File__DEVICE_EXTENSIONInv(x));
+function Flags__DEVICE_OBJECT(int) returns (int);
+function Flags__DEVICE_OBJECTInv(int) returns (int);
+function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
+function Flink__LIST_ENTRY(int) returns (int);
+function Flink__LIST_ENTRYInv(int) returns (int);
+function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
+function GrandMaster__GLOBALS(int) returns (int);
+function GrandMaster__GLOBALSInv(int) returns (int);
+function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
+function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
+function GuidCount__WMILIB_CONTEXT(int) returns (int);
+function GuidCount__WMILIB_CONTEXTInv(int) returns (int);
+function _S_GuidCount__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_GuidCount__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x))} GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXT(GuidCount__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXT(S)[x]} _S_GuidCount__WMILIB_CONTEXT(S)[x] <==> S[GuidCount__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXTInv(S)[x]} _S_GuidCount__WMILIB_CONTEXTInv(S)[x] <==> S[GuidCount__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXT(S)[GuidCount__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXTInv(S)[GuidCount__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXT(x)} GuidCount__WMILIB_CONTEXT(x) == x + 0);
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == GuidCount__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == GuidCount__WMILIB_CONTEXTInv(x));
+function GuidList__WMILIB_CONTEXT(int) returns (int);
+function GuidList__WMILIB_CONTEXTInv(int) returns (int);
+function _S_GuidList__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_GuidList__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x))} GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXT(GuidList__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXT(S)[x]} _S_GuidList__WMILIB_CONTEXT(S)[x] <==> S[GuidList__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXTInv(S)[x]} _S_GuidList__WMILIB_CONTEXTInv(S)[x] <==> S[GuidList__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXT(S)[GuidList__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXTInv(S)[GuidList__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXT(x)} GuidList__WMILIB_CONTEXT(x) == x + 4);
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXTInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GuidList__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GuidList__WMILIB_CONTEXTInv(x));
+function Hand___unnamed_1_2ef8da39(int) returns (int);
+function Hand___unnamed_1_2ef8da39Inv(int) returns (int);
+function _S_Hand___unnamed_1_2ef8da39([int]bool) returns ([int]bool);
+function _S_Hand___unnamed_1_2ef8da39Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Hand___unnamed_1_2ef8da39Inv(Hand___unnamed_1_2ef8da39(x))} Hand___unnamed_1_2ef8da39Inv(Hand___unnamed_1_2ef8da39(x)) == x);
+axiom (forall x:int :: {Hand___unnamed_1_2ef8da39Inv(x)} Hand___unnamed_1_2ef8da39(Hand___unnamed_1_2ef8da39Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_2ef8da39(S)[x]} _S_Hand___unnamed_1_2ef8da39(S)[x] <==> S[Hand___unnamed_1_2ef8da39Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_2ef8da39Inv(S)[x]} _S_Hand___unnamed_1_2ef8da39Inv(S)[x] <==> S[Hand___unnamed_1_2ef8da39(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_2ef8da39(S)} S[x] ==> _S_Hand___unnamed_1_2ef8da39(S)[Hand___unnamed_1_2ef8da39(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_2ef8da39Inv(S)} S[x] ==> _S_Hand___unnamed_1_2ef8da39Inv(S)[Hand___unnamed_1_2ef8da39Inv(x)]);
+
+axiom (forall x:int :: {Hand___unnamed_1_2ef8da39(x)} Hand___unnamed_1_2ef8da39(x) == x + 0);
+axiom (forall x:int :: {Hand___unnamed_1_2ef8da39Inv(x)} Hand___unnamed_1_2ef8da39Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Hand___unnamed_1_2ef8da39Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Hand___unnamed_1_2ef8da39Inv(x));
+function Header__KEVENT(int) returns (int);
+function Header__KEVENTInv(int) returns (int);
+function _S_Header__KEVENT([int]bool) returns ([int]bool);
+function _S_Header__KEVENTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Header__KEVENTInv(Header__KEVENT(x))} Header__KEVENTInv(Header__KEVENT(x)) == x);
+axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENT(Header__KEVENTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENT(S)[x]} _S_Header__KEVENT(S)[x] <==> S[Header__KEVENTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENTInv(S)[x]} _S_Header__KEVENTInv(S)[x] <==> S[Header__KEVENT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENT(S)} S[x] ==> _S_Header__KEVENT(S)[Header__KEVENT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENTInv(S)} S[x] ==> _S_Header__KEVENTInv(S)[Header__KEVENTInv(x)]);
+
+axiom (forall x:int :: {Header__KEVENT(x)} Header__KEVENT(x) == x + 0);
+axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Header__KEVENTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Header__KEVENTInv(x));
+function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x))} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 4);
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function IndicatorParameters__DEVICE_EXTENSION(int) returns (int);
+function IndicatorParameters__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_IndicatorParameters__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_IndicatorParameters__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSIONInv(IndicatorParameters__DEVICE_EXTENSION(x))} IndicatorParameters__DEVICE_EXTENSIONInv(IndicatorParameters__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSIONInv(x)} IndicatorParameters__DEVICE_EXTENSION(IndicatorParameters__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_IndicatorParameters__DEVICE_EXTENSION(S)[x]} _S_IndicatorParameters__DEVICE_EXTENSION(S)[x] <==> S[IndicatorParameters__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_IndicatorParameters__DEVICE_EXTENSIONInv(S)[x]} _S_IndicatorParameters__DEVICE_EXTENSIONInv(S)[x] <==> S[IndicatorParameters__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_IndicatorParameters__DEVICE_EXTENSION(S)} S[x] ==> _S_IndicatorParameters__DEVICE_EXTENSION(S)[IndicatorParameters__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_IndicatorParameters__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_IndicatorParameters__DEVICE_EXTENSIONInv(S)[IndicatorParameters__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSION(x)} IndicatorParameters__DEVICE_EXTENSION(x) == x + 168);
+axiom (forall x:int :: {IndicatorParameters__DEVICE_EXTENSIONInv(x)} IndicatorParameters__DEVICE_EXTENSIONInv(x) == x - 168);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1) == IndicatorParameters__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 168)} MINUS_LEFT_PTR(x, 1, 168) == IndicatorParameters__DEVICE_EXTENSIONInv(x));
+function InputCount__DEVICE_EXTENSION(int) returns (int);
+function InputCount__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x))} InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSION(InputCount__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSION(S)[x]} _S_InputCount__DEVICE_EXTENSION(S)[x] <==> S[InputCount__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSIONInv(S)[x]} _S_InputCount__DEVICE_EXTENSIONInv(S)[x] <==> S[InputCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSION(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSION(S)[InputCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSIONInv(S)[InputCount__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSION(x)} InputCount__DEVICE_EXTENSION(x) == x + 116);
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSIONInv(x) == x - 116);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1) == InputCount__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 116)} MINUS_LEFT_PTR(x, 1, 116) == InputCount__DEVICE_EXTENSIONInv(x));
+function InputDataQueueLength__KEYBOARD_ATTRIBUTES(int) returns (int);
+function InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(InputDataQueueLength__KEYBOARD_ATTRIBUTES(x))} InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)} InputDataQueueLength__KEYBOARD_ATTRIBUTES(InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)[x]} _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)[x] <==> S[InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_InputDataQueueLength__KEYBOARD_ATTRIBUTES(S)[InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(S)[InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTES(x)} InputDataQueueLength__KEYBOARD_ATTRIBUTES(x) == x + 12);
+axiom (forall x:int :: {InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x)} InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x) == x - 12);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == InputDataQueueLength__KEYBOARD_ATTRIBUTESInv(x));
+function InputData__DEVICE_EXTENSION(int) returns (int);
+function InputData__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
+function Inserted___unnamed_1_2dc63b48(int) returns (int);
+function Inserted___unnamed_1_2dc63b48Inv(int) returns (int);
+function _S_Inserted___unnamed_1_2dc63b48([int]bool) returns ([int]bool);
+function _S_Inserted___unnamed_1_2dc63b48Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48Inv(Inserted___unnamed_1_2dc63b48(x))} Inserted___unnamed_1_2dc63b48Inv(Inserted___unnamed_1_2dc63b48(x)) == x);
+axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48Inv(x)} Inserted___unnamed_1_2dc63b48(Inserted___unnamed_1_2dc63b48Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_2dc63b48(S)[x]} _S_Inserted___unnamed_1_2dc63b48(S)[x] <==> S[Inserted___unnamed_1_2dc63b48Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_2dc63b48Inv(S)[x]} _S_Inserted___unnamed_1_2dc63b48Inv(S)[x] <==> S[Inserted___unnamed_1_2dc63b48(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_2dc63b48(S)} S[x] ==> _S_Inserted___unnamed_1_2dc63b48(S)[Inserted___unnamed_1_2dc63b48(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_2dc63b48Inv(S)} S[x] ==> _S_Inserted___unnamed_1_2dc63b48Inv(S)[Inserted___unnamed_1_2dc63b48Inv(x)]);
+
+axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48(x)} Inserted___unnamed_1_2dc63b48(x) == x + 0);
+axiom (forall x:int :: {Inserted___unnamed_1_2dc63b48Inv(x)} Inserted___unnamed_1_2dc63b48Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Inserted___unnamed_1_2dc63b48Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Inserted___unnamed_1_2dc63b48Inv(x));
+function IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x))} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 4);
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(int) returns (int);
+function KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x))} KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(S)[KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(S)[KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x)} KeyRepeatMaximum__KEYBOARD_ATTRIBUTES(x) == x + 22);
+axiom (forall x:int :: {KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x) == x - 22);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 22, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 22, 1) == KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 22)} MINUS_LEFT_PTR(x, 1, 22) == KeyRepeatMaximum__KEYBOARD_ATTRIBUTESInv(x));
+function KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(int) returns (int);
+function KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x))} KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(S)[KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(S)[KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x)} KeyRepeatMinimum__KEYBOARD_ATTRIBUTES(x) == x + 16);
+axiom (forall x:int :: {KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x)} KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x) == x - 16);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == KeyRepeatMinimum__KEYBOARD_ATTRIBUTESInv(x));
+function KeyboardAttributes__DEVICE_EXTENSION(int) returns (int);
+function KeyboardAttributes__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_KeyboardAttributes__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_KeyboardAttributes__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSIONInv(KeyboardAttributes__DEVICE_EXTENSION(x))} KeyboardAttributes__DEVICE_EXTENSIONInv(KeyboardAttributes__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSIONInv(x)} KeyboardAttributes__DEVICE_EXTENSION(KeyboardAttributes__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_KeyboardAttributes__DEVICE_EXTENSION(S)[x]} _S_KeyboardAttributes__DEVICE_EXTENSION(S)[x] <==> S[KeyboardAttributes__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)[x]} _S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)[x] <==> S[KeyboardAttributes__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardAttributes__DEVICE_EXTENSION(S)} S[x] ==> _S_KeyboardAttributes__DEVICE_EXTENSION(S)[KeyboardAttributes__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_KeyboardAttributes__DEVICE_EXTENSIONInv(S)[KeyboardAttributes__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSION(x)} KeyboardAttributes__DEVICE_EXTENSION(x) == x + 140);
+axiom (forall x:int :: {KeyboardAttributes__DEVICE_EXTENSIONInv(x)} KeyboardAttributes__DEVICE_EXTENSIONInv(x) == x - 140);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1) == KeyboardAttributes__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 140)} MINUS_LEFT_PTR(x, 1, 140) == KeyboardAttributes__DEVICE_EXTENSIONInv(x));
+function KeyboardIdentifier__KEYBOARD_ATTRIBUTES(int) returns (int);
+function KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x))} KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)} KeyboardIdentifier__KEYBOARD_ATTRIBUTES(KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTES(S)[KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(S)[KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x)} KeyboardIdentifier__KEYBOARD_ATTRIBUTES(x) == x + 0);
+axiom (forall x:int :: {KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x)} KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == KeyboardIdentifier__KEYBOARD_ATTRIBUTESInv(x));
+function KeyboardMode__KEYBOARD_ATTRIBUTES(int) returns (int);
+function KeyboardMode__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_KeyboardMode__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTESInv(KeyboardMode__KEYBOARD_ATTRIBUTES(x))} KeyboardMode__KEYBOARD_ATTRIBUTESInv(KeyboardMode__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)} KeyboardMode__KEYBOARD_ATTRIBUTES(KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)[x]} _S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)[x] <==> S[KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[KeyboardMode__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_KeyboardMode__KEYBOARD_ATTRIBUTES(S)[KeyboardMode__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_KeyboardMode__KEYBOARD_ATTRIBUTESInv(S)[KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTES(x)} KeyboardMode__KEYBOARD_ATTRIBUTES(x) == x + 2);
+axiom (forall x:int :: {KeyboardMode__KEYBOARD_ATTRIBUTESInv(x)} KeyboardMode__KEYBOARD_ATTRIBUTESInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == KeyboardMode__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == KeyboardMode__KEYBOARD_ATTRIBUTESInv(x));
+function LedFlags__KEYBOARD_INDICATOR_PARAMETERS(int) returns (int);
+function LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(int) returns (int);
+function _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS([int]bool) returns ([int]bool);
+function _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x))} LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)) == x);
+axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)} LedFlags__KEYBOARD_INDICATOR_PARAMETERS(LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)[x]} _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)[x] <==> S[LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x]} _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x] <==> S[LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)} S[x] ==> _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERS(S)[LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)} S[x] ==> _S_LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(S)[LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
+
+axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x)} LedFlags__KEYBOARD_INDICATOR_PARAMETERS(x) == x + 2);
+axiom (forall x:int :: {LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x)} LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == LedFlags__KEYBOARD_INDICATOR_PARAMETERSInv(x));
+function LegacyDeviceList__GLOBALS(int) returns (int);
+function LegacyDeviceList__GLOBALSInv(int) returns (int);
+function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
+function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 888);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 888);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1) == LegacyDeviceList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 888)} MINUS_LEFT_PTR(x, 1, 888) == LegacyDeviceList__GLOBALSInv(x));
+function Length__UNICODE_STRING(int) returns (int);
+function Length__UNICODE_STRINGInv(int) returns (int);
+function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
+function Link__DEVICE_EXTENSION(int) returns (int);
+function Link__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 272);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 272);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1) == Link__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 272)} MINUS_LEFT_PTR(x, 1, 272) == Link__DEVICE_EXTENSIONInv(x));
+function LockList__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x))} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 20);
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 20);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Lock___unnamed_4_a97c65a1(int) returns (int);
+function Lock___unnamed_4_a97c65a1Inv(int) returns (int);
+function _S_Lock___unnamed_4_a97c65a1([int]bool) returns ([int]bool);
+function _S_Lock___unnamed_4_a97c65a1Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Lock___unnamed_4_a97c65a1Inv(Lock___unnamed_4_a97c65a1(x))} Lock___unnamed_4_a97c65a1Inv(Lock___unnamed_4_a97c65a1(x)) == x);
+axiom (forall x:int :: {Lock___unnamed_4_a97c65a1Inv(x)} Lock___unnamed_4_a97c65a1(Lock___unnamed_4_a97c65a1Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_a97c65a1(S)[x]} _S_Lock___unnamed_4_a97c65a1(S)[x] <==> S[Lock___unnamed_4_a97c65a1Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_a97c65a1Inv(S)[x]} _S_Lock___unnamed_4_a97c65a1Inv(S)[x] <==> S[Lock___unnamed_4_a97c65a1(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_a97c65a1(S)} S[x] ==> _S_Lock___unnamed_4_a97c65a1(S)[Lock___unnamed_4_a97c65a1(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_a97c65a1Inv(S)} S[x] ==> _S_Lock___unnamed_4_a97c65a1Inv(S)[Lock___unnamed_4_a97c65a1Inv(x)]);
+
+axiom (forall x:int :: {Lock___unnamed_4_a97c65a1(x)} Lock___unnamed_4_a97c65a1(x) == x + 0);
+axiom (forall x:int :: {Lock___unnamed_4_a97c65a1Inv(x)} Lock___unnamed_4_a97c65a1Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Lock___unnamed_4_a97c65a1Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Lock___unnamed_4_a97c65a1Inv(x));
+function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x))} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 32);
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 32);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 32)} MINUS_LEFT_PTR(x, 1, 32) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x))} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 8);
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function MaximumLength__UNICODE_STRING(int) returns (int);
+function MaximumLength__UNICODE_STRINGInv(int) returns (int);
+function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
+function MinDeviceWakeState__DEVICE_EXTENSION(int) returns (int);
+function MinDeviceWakeState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_MinDeviceWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_MinDeviceWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x))} MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSION(MinDeviceWakeState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSION(x)} MinDeviceWakeState__DEVICE_EXTENSION(x) == x + 252);
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSIONInv(x) == x - 252);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
+function MinSystemWakeState__DEVICE_EXTENSION(int) returns (int);
+function MinSystemWakeState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_MinSystemWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_MinSystemWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x))} MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSION(MinSystemWakeState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSION(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSION(S)[MinSystemWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSION(x)} MinSystemWakeState__DEVICE_EXTENSION(x) == x + 256);
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSIONInv(x) == x - 256);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 256, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 256, 1) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 256)} MINUS_LEFT_PTR(x, 1, 256) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
+function Mutex__GLOBALS(int) returns (int);
+function Mutex__GLOBALSInv(int) returns (int);
+function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
+function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
+function NpxIrql___unnamed_1_29794256(int) returns (int);
+function NpxIrql___unnamed_1_29794256Inv(int) returns (int);
+function _S_NpxIrql___unnamed_1_29794256([int]bool) returns ([int]bool);
+function _S_NpxIrql___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NpxIrql___unnamed_1_29794256Inv(NpxIrql___unnamed_1_29794256(x))} NpxIrql___unnamed_1_29794256Inv(NpxIrql___unnamed_1_29794256(x)) == x);
+axiom (forall x:int :: {NpxIrql___unnamed_1_29794256Inv(x)} NpxIrql___unnamed_1_29794256(NpxIrql___unnamed_1_29794256Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_29794256(S)[x]} _S_NpxIrql___unnamed_1_29794256(S)[x] <==> S[NpxIrql___unnamed_1_29794256Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_29794256Inv(S)[x]} _S_NpxIrql___unnamed_1_29794256Inv(S)[x] <==> S[NpxIrql___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_29794256(S)} S[x] ==> _S_NpxIrql___unnamed_1_29794256(S)[NpxIrql___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_29794256Inv(S)} S[x] ==> _S_NpxIrql___unnamed_1_29794256Inv(S)[NpxIrql___unnamed_1_29794256Inv(x)]);
+
+axiom (forall x:int :: {NpxIrql___unnamed_1_29794256(x)} NpxIrql___unnamed_1_29794256(x) == x + 0);
+axiom (forall x:int :: {NpxIrql___unnamed_1_29794256Inv(x)} NpxIrql___unnamed_1_29794256Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == NpxIrql___unnamed_1_29794256Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == NpxIrql___unnamed_1_29794256Inv(x));
+function NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(int) returns (int);
+function NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x))} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)[x]} _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)[x] <==> S[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(S)[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(S)[NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x)} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES(x) == x + 4);
+axiom (forall x:int :: {NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x)} NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == NumberOfFunctionKeys__KEYBOARD_ATTRIBUTESInv(x));
+function NumberOfIndicators__KEYBOARD_ATTRIBUTES(int) returns (int);
+function NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(NumberOfIndicators__KEYBOARD_ATTRIBUTES(x))} NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)} NumberOfIndicators__KEYBOARD_ATTRIBUTES(NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)[x]} _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)[x] <==> S[NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_NumberOfIndicators__KEYBOARD_ATTRIBUTES(S)[NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(S)[NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTES(x)} NumberOfIndicators__KEYBOARD_ATTRIBUTES(x) == x + 6);
+axiom (forall x:int :: {NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x)} NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x) == x - 6);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 6, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 6, 1) == NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 6)} MINUS_LEFT_PTR(x, 1, 6) == NumberOfIndicators__KEYBOARD_ATTRIBUTESInv(x));
+function NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(int) returns (int);
+function NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(int) returns (int);
+function _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x))} NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)} NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)[x]} _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)[x] <==> S[NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)[x]} _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)[x] <==> S[NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)} S[x] ==> _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(S)[NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(S)[NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x)} NumberOfKeysTotal__KEYBOARD_ATTRIBUTES(x) == x + 8);
+axiom (forall x:int :: {NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x)} NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == NumberOfKeysTotal__KEYBOARD_ATTRIBUTESInv(x));
+function OkayToLogOverflow__DEVICE_EXTENSION(int) returns (int);
+function OkayToLogOverflow__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_OkayToLogOverflow__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_OkayToLogOverflow__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x))} OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSION(OkayToLogOverflow__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSION(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSION(x)} OkayToLogOverflow__DEVICE_EXTENSION(x) == x + 285);
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSIONInv(x) == x - 285);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 285, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 285, 1) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 285)} MINUS_LEFT_PTR(x, 1, 285) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
+function PDO__DEVICE_EXTENSION(int) returns (int);
+function PDO__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PDO__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PDO__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x))} PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSION(PDO__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSION(S)[x]} _S_PDO__DEVICE_EXTENSION(S)[x] <==> S[PDO__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSIONInv(S)[x]} _S_PDO__DEVICE_EXTENSIONInv(S)[x] <==> S[PDO__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSION(S)} S[x] ==> _S_PDO__DEVICE_EXTENSION(S)[PDO__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PDO__DEVICE_EXTENSIONInv(S)[PDO__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PDO__DEVICE_EXTENSION(x)} PDO__DEVICE_EXTENSION(x) == x + 12);
+axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSIONInv(x) == x - 12);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == PDO__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == PDO__DEVICE_EXTENSIONInv(x));
+function PnP__DEVICE_EXTENSION(int) returns (int);
+function PnP__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
+function QueryWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
+function QueryWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
+function _S_QueryWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_QueryWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x))} QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXT(QueryWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXT(x)} QueryWmiDataBlock__WMILIB_CONTEXT(x) == x + 12);
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 12);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
+function QueryWmiRegInfo__WMILIB_CONTEXT(int) returns (int);
+function QueryWmiRegInfo__WMILIB_CONTEXTInv(int) returns (int);
+function _S_QueryWmiRegInfo__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_QueryWmiRegInfo__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x))} QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXT(QueryWmiRegInfo__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXT(x)} QueryWmiRegInfo__WMILIB_CONTEXT(x) == x + 8);
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXTInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
+function Rate__KEYBOARD_TYPEMATIC_PARAMETERS(int) returns (int);
+function Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(int) returns (int);
+function _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS([int]bool) returns ([int]bool);
+function _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x))} Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)) == x);
+axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Rate__KEYBOARD_TYPEMATIC_PARAMETERS(Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x]} _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x] <==> S[Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x]} _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x] <==> S[Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)} S[x] ==> _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERS(S)[Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)} S[x] ==> _S_Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
+
+axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x)} Rate__KEYBOARD_TYPEMATIC_PARAMETERS(x) == x + 2);
+axiom (forall x:int :: {Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == Rate__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
+function ReadQueue__DEVICE_EXTENSION(int) returns (int);
+function ReadQueue__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_ReadQueue__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_ReadQueue__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x))} ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSION(ReadQueue__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSION(S)[x]} _S_ReadQueue__DEVICE_EXTENSION(S)[x] <==> S[ReadQueue__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSIONInv(S)[x]} _S_ReadQueue__DEVICE_EXTENSIONInv(S)[x] <==> S[ReadQueue__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSION(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSION(S)[ReadQueue__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSIONInv(S)[ReadQueue__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSION(x)} ReadQueue__DEVICE_EXTENSION(x) == x + 176);
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSIONInv(x) == x - 176);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == ReadQueue__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == ReadQueue__DEVICE_EXTENSIONInv(x));
+function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x))} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 8);
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function RemoveLock__DEVICE_EXTENSION(int) returns (int);
+function RemoveLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_RemoveLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_RemoveLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x))} RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSION(RemoveLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSION(S)[x]} _S_RemoveLock__DEVICE_EXTENSION(S)[x] <==> S[RemoveLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSIONInv(S)[x]} _S_RemoveLock__DEVICE_EXTENSIONInv(S)[x] <==> S[RemoveLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSION(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSION(S)[RemoveLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSIONInv(S)[RemoveLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSION(x)} RemoveLock__DEVICE_EXTENSION(x) == x + 16);
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSIONInv(x) == x - 16);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == RemoveLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == RemoveLock__DEVICE_EXTENSIONInv(x));
+function Removed__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 0);
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 36);
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 36);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 36)} MINUS_LEFT_PTR(x, 1, 36) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 52);
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 52);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 52)} MINUS_LEFT_PTR(x, 1, 52) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 1);
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 1);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function Self__DEVICE_EXTENSION(int) returns (int);
+function Self__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
+function SequenceNumber__DEVICE_EXTENSION(int) returns (int);
+function SequenceNumber__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SequenceNumber__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SequenceNumber__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x))} SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSION(SequenceNumber__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSION(S)[x]} _S_SequenceNumber__DEVICE_EXTENSION(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x]} _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSION(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSION(S)[SequenceNumber__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSION(x)} SequenceNumber__DEVICE_EXTENSION(x) == x + 184);
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSIONInv(x) == x - 184);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 184, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 184, 1) == SequenceNumber__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 184)} MINUS_LEFT_PTR(x, 1, 184) == SequenceNumber__DEVICE_EXTENSIONInv(x));
+function SetWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
+function SetWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
+function _S_SetWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_SetWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x))} SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXT(SetWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXT(x)} SetWmiDataBlock__WMILIB_CONTEXT(x) == x + 16);
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 16);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
+function SetWmiDataItem__WMILIB_CONTEXT(int) returns (int);
+function SetWmiDataItem__WMILIB_CONTEXTInv(int) returns (int);
+function _S_SetWmiDataItem__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_SetWmiDataItem__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x))} SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXT(SetWmiDataItem__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXT(S)[SetWmiDataItem__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXT(x)} SetWmiDataItem__WMILIB_CONTEXT(x) == x + 20);
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXTInv(x) == x - 20);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
+function SignalState__DISPATCHER_HEADER(int) returns (int);
+function SignalState__DISPATCHER_HEADERInv(int) returns (int);
+function _S_SignalState__DISPATCHER_HEADER([int]bool) returns ([int]bool);
+function _S_SignalState__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x))} SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x)) == x);
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADER(SignalState__DISPATCHER_HEADERInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADER(S)[x]} _S_SignalState__DISPATCHER_HEADER(S)[x] <==> S[SignalState__DISPATCHER_HEADERInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADERInv(S)[x]} _S_SignalState__DISPATCHER_HEADERInv(S)[x] <==> S[SignalState__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADER(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADER(S)[SignalState__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADERInv(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADERInv(S)[SignalState__DISPATCHER_HEADERInv(x)]);
+
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADER(x)} SignalState__DISPATCHER_HEADER(x) == x + 4);
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADERInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == SignalState__DISPATCHER_HEADERInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == SignalState__DISPATCHER_HEADERInv(x));
+function Signalling___unnamed_1_29794256(int) returns (int);
+function Signalling___unnamed_1_29794256Inv(int) returns (int);
+function _S_Signalling___unnamed_1_29794256([int]bool) returns ([int]bool);
+function _S_Signalling___unnamed_1_29794256Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Signalling___unnamed_1_29794256Inv(Signalling___unnamed_1_29794256(x))} Signalling___unnamed_1_29794256Inv(Signalling___unnamed_1_29794256(x)) == x);
+axiom (forall x:int :: {Signalling___unnamed_1_29794256Inv(x)} Signalling___unnamed_1_29794256(Signalling___unnamed_1_29794256Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_29794256(S)[x]} _S_Signalling___unnamed_1_29794256(S)[x] <==> S[Signalling___unnamed_1_29794256Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_29794256Inv(S)[x]} _S_Signalling___unnamed_1_29794256Inv(S)[x] <==> S[Signalling___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_29794256(S)} S[x] ==> _S_Signalling___unnamed_1_29794256(S)[Signalling___unnamed_1_29794256(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_29794256Inv(S)} S[x] ==> _S_Signalling___unnamed_1_29794256Inv(S)[Signalling___unnamed_1_29794256Inv(x)]);
+
+axiom (forall x:int :: {Signalling___unnamed_1_29794256(x)} Signalling___unnamed_1_29794256(x) == x + 0);
+axiom (forall x:int :: {Signalling___unnamed_1_29794256Inv(x)} Signalling___unnamed_1_29794256Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signalling___unnamed_1_29794256Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signalling___unnamed_1_29794256Inv(x));
+function Signature__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x))} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 0);
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Size___unnamed_1_2ef8da39(int) returns (int);
+function Size___unnamed_1_2ef8da39Inv(int) returns (int);
+function _S_Size___unnamed_1_2ef8da39([int]bool) returns ([int]bool);
+function _S_Size___unnamed_1_2ef8da39Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Size___unnamed_1_2ef8da39Inv(Size___unnamed_1_2ef8da39(x))} Size___unnamed_1_2ef8da39Inv(Size___unnamed_1_2ef8da39(x)) == x);
+axiom (forall x:int :: {Size___unnamed_1_2ef8da39Inv(x)} Size___unnamed_1_2ef8da39(Size___unnamed_1_2ef8da39Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_2ef8da39(S)[x]} _S_Size___unnamed_1_2ef8da39(S)[x] <==> S[Size___unnamed_1_2ef8da39Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_2ef8da39Inv(S)[x]} _S_Size___unnamed_1_2ef8da39Inv(S)[x] <==> S[Size___unnamed_1_2ef8da39(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_2ef8da39(S)} S[x] ==> _S_Size___unnamed_1_2ef8da39(S)[Size___unnamed_1_2ef8da39(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_2ef8da39Inv(S)} S[x] ==> _S_Size___unnamed_1_2ef8da39Inv(S)[Size___unnamed_1_2ef8da39Inv(x)]);
+
+axiom (forall x:int :: {Size___unnamed_1_2ef8da39(x)} Size___unnamed_1_2ef8da39(x) == x + 0);
+axiom (forall x:int :: {Size___unnamed_1_2ef8da39Inv(x)} Size___unnamed_1_2ef8da39Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Size___unnamed_1_2ef8da39Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Size___unnamed_1_2ef8da39Inv(x));
+function SpinLock__DEVICE_EXTENSION(int) returns (int);
+function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 172);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 172);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 172)} MINUS_LEFT_PTR(x, 1, 172) == SpinLock__DEVICE_EXTENSIONInv(x));
+function Spin__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x))} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 28);
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Started__DEVICE_EXTENSION(int) returns (int);
+function Started__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
+function Subtype__KEYBOARD_ID(int) returns (int);
+function Subtype__KEYBOARD_IDInv(int) returns (int);
+function _S_Subtype__KEYBOARD_ID([int]bool) returns ([int]bool);
+function _S_Subtype__KEYBOARD_IDInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Subtype__KEYBOARD_IDInv(Subtype__KEYBOARD_ID(x))} Subtype__KEYBOARD_IDInv(Subtype__KEYBOARD_ID(x)) == x);
+axiom (forall x:int :: {Subtype__KEYBOARD_IDInv(x)} Subtype__KEYBOARD_ID(Subtype__KEYBOARD_IDInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Subtype__KEYBOARD_ID(S)[x]} _S_Subtype__KEYBOARD_ID(S)[x] <==> S[Subtype__KEYBOARD_IDInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Subtype__KEYBOARD_IDInv(S)[x]} _S_Subtype__KEYBOARD_IDInv(S)[x] <==> S[Subtype__KEYBOARD_ID(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Subtype__KEYBOARD_ID(S)} S[x] ==> _S_Subtype__KEYBOARD_ID(S)[Subtype__KEYBOARD_ID(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Subtype__KEYBOARD_IDInv(S)} S[x] ==> _S_Subtype__KEYBOARD_IDInv(S)[Subtype__KEYBOARD_IDInv(x)]);
+
+axiom (forall x:int :: {Subtype__KEYBOARD_ID(x)} Subtype__KEYBOARD_ID(x) == x + 1);
+axiom (forall x:int :: {Subtype__KEYBOARD_IDInv(x)} Subtype__KEYBOARD_IDInv(x) == x - 1);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == Subtype__KEYBOARD_IDInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == Subtype__KEYBOARD_IDInv(x));
+function SurpriseRemoved__DEVICE_EXTENSION(int) returns (int);
+function SurpriseRemoved__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SurpriseRemoved__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SurpriseRemoved__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x))} SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSION(SurpriseRemoved__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSION(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSION(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSION(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSION(S)[SurpriseRemoved__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSION(x)} SurpriseRemoved__DEVICE_EXTENSION(x) == x + 287);
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSIONInv(x) == x - 287);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 287, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 287, 1) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 287)} MINUS_LEFT_PTR(x, 1, 287) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
+function SymbolicLinkName__DEVICE_EXTENSION(int) returns (int);
+function SymbolicLinkName__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SymbolicLinkName__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SymbolicLinkName__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x))} SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSION(SymbolicLinkName__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSION(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSION(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSION(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSION(S)[SymbolicLinkName__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSION(x)} SymbolicLinkName__DEVICE_EXTENSION(x) == x + 120);
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSIONInv(x) == x - 120);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 120)} MINUS_LEFT_PTR(x, 1, 120) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
+function SystemState__DEVICE_EXTENSION(int) returns (int);
+function SystemState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SystemState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SystemState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x))} SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSION(SystemState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSION(S)[x]} _S_SystemState__DEVICE_EXTENSION(S)[x] <==> S[SystemState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSION(S)[SystemState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSIONInv(S)[SystemState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSION(x)} SystemState__DEVICE_EXTENSION(x) == x + 192);
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSIONInv(x) == x - 192);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 192, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 192, 1) == SystemState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 192)} MINUS_LEFT_PTR(x, 1, 192) == SystemState__DEVICE_EXTENSIONInv(x));
+function SystemToDeviceState__DEVICE_EXTENSION(int) returns (int);
+function SystemToDeviceState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SystemToDeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SystemToDeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x))} SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSION(SystemToDeviceState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSION(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSION(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSION(S)[SystemToDeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSION(x)} SystemToDeviceState__DEVICE_EXTENSION(x) == x + 232);
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSIONInv(x) == x - 232);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 232)} MINUS_LEFT_PTR(x, 1, 232) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
+function TargetNotifyHandle__DEVICE_EXTENSION(int) returns (int);
+function TargetNotifyHandle__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TargetNotifyHandle__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TargetNotifyHandle__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x))} TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSION(TargetNotifyHandle__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSION(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSION(x)} TargetNotifyHandle__DEVICE_EXTENSION(x) == x + 268);
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSIONInv(x) == x - 268);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 268, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 268, 1) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 268)} MINUS_LEFT_PTR(x, 1, 268) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
+function TopPort__DEVICE_EXTENSION(int) returns (int);
+function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
+function TrueClassDevice__DEVICE_EXTENSION(int) returns (int);
+function TrueClassDevice__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TrueClassDevice__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TrueClassDevice__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x))} TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSION(TrueClassDevice__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSION(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSION(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSION(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSION(S)[TrueClassDevice__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSION(x)} TrueClassDevice__DEVICE_EXTENSION(x) == x + 4);
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSIONInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
+function TrustedSubsystemCount__DEVICE_EXTENSION(int) returns (int);
+function TrustedSubsystemCount__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TrustedSubsystemCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x))} TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSION(TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSION(x)} TrustedSubsystemCount__DEVICE_EXTENSION(x) == x + 112);
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSIONInv(x) == x - 112);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 112)} MINUS_LEFT_PTR(x, 1, 112) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
+function Type__KEYBOARD_ID(int) returns (int);
+function Type__KEYBOARD_IDInv(int) returns (int);
+function _S_Type__KEYBOARD_ID([int]bool) returns ([int]bool);
+function _S_Type__KEYBOARD_IDInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Type__KEYBOARD_IDInv(Type__KEYBOARD_ID(x))} Type__KEYBOARD_IDInv(Type__KEYBOARD_ID(x)) == x);
+axiom (forall x:int :: {Type__KEYBOARD_IDInv(x)} Type__KEYBOARD_ID(Type__KEYBOARD_IDInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Type__KEYBOARD_ID(S)[x]} _S_Type__KEYBOARD_ID(S)[x] <==> S[Type__KEYBOARD_IDInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Type__KEYBOARD_IDInv(S)[x]} _S_Type__KEYBOARD_IDInv(S)[x] <==> S[Type__KEYBOARD_ID(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Type__KEYBOARD_ID(S)} S[x] ==> _S_Type__KEYBOARD_ID(S)[Type__KEYBOARD_ID(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Type__KEYBOARD_IDInv(S)} S[x] ==> _S_Type__KEYBOARD_IDInv(S)[Type__KEYBOARD_IDInv(x)]);
+
+axiom (forall x:int :: {Type__KEYBOARD_ID(x)} Type__KEYBOARD_ID(x) == x + 0);
+axiom (forall x:int :: {Type__KEYBOARD_IDInv(x)} Type__KEYBOARD_IDInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Type__KEYBOARD_IDInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Type__KEYBOARD_IDInv(x));
+function Type___unnamed_4_5ca00198(int) returns (int);
+function Type___unnamed_4_5ca00198Inv(int) returns (int);
+function _S_Type___unnamed_4_5ca00198([int]bool) returns ([int]bool);
+function _S_Type___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Type___unnamed_4_5ca00198Inv(Type___unnamed_4_5ca00198(x))} Type___unnamed_4_5ca00198Inv(Type___unnamed_4_5ca00198(x)) == x);
+axiom (forall x:int :: {Type___unnamed_4_5ca00198Inv(x)} Type___unnamed_4_5ca00198(Type___unnamed_4_5ca00198Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_5ca00198(S)[x]} _S_Type___unnamed_4_5ca00198(S)[x] <==> S[Type___unnamed_4_5ca00198Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_5ca00198Inv(S)[x]} _S_Type___unnamed_4_5ca00198Inv(S)[x] <==> S[Type___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_5ca00198(S)} S[x] ==> _S_Type___unnamed_4_5ca00198(S)[Type___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_5ca00198Inv(S)} S[x] ==> _S_Type___unnamed_4_5ca00198Inv(S)[Type___unnamed_4_5ca00198Inv(x)]);
+
+axiom (forall x:int :: {Type___unnamed_4_5ca00198(x)} Type___unnamed_4_5ca00198(x) == x + 0);
+axiom (forall x:int :: {Type___unnamed_4_5ca00198Inv(x)} Type___unnamed_4_5ca00198Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Type___unnamed_4_5ca00198Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Type___unnamed_4_5ca00198Inv(x));
+function UnitId__DEVICE_EXTENSION(int) returns (int);
+function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 196);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 196);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1) == UnitId__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 196)} MINUS_LEFT_PTR(x, 1, 196) == UnitId__DEVICE_EXTENSIONInv(x));
+function UnitId__KEYBOARD_INDICATOR_PARAMETERS(int) returns (int);
+function UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(int) returns (int);
+function _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS([int]bool) returns ([int]bool);
+function _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(UnitId__KEYBOARD_INDICATOR_PARAMETERS(x))} UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)) == x);
+axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)} UnitId__KEYBOARD_INDICATOR_PARAMETERS(UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)[x]} _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)[x] <==> S[UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x]} _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)[x] <==> S[UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)} S[x] ==> _S_UnitId__KEYBOARD_INDICATOR_PARAMETERS(S)[UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)} S[x] ==> _S_UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(S)[UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)]);
+
+axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERS(x)} UnitId__KEYBOARD_INDICATOR_PARAMETERS(x) == x + 0);
+axiom (forall x:int :: {UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x)} UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == UnitId__KEYBOARD_INDICATOR_PARAMETERSInv(x));
+function UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(int) returns (int);
+function UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(int) returns (int);
+function _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS([int]bool) returns ([int]bool);
+function _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x))} UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)) == x);
+axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x]} _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)[x] <==> S[UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x]} _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[x] <==> S[UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)} S[x] ==> _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(S)[UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)} S[x] ==> _S_UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(S)[UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)]);
+
+axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x)} UnitId__KEYBOARD_TYPEMATIC_PARAMETERS(x) == x + 0);
+axiom (forall x:int :: {UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x)} UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == UnitId__KEYBOARD_TYPEMATIC_PARAMETERSInv(x));
+function WaitListHead__DISPATCHER_HEADER(int) returns (int);
+function WaitListHead__DISPATCHER_HEADERInv(int) returns (int);
+function _S_WaitListHead__DISPATCHER_HEADER([int]bool) returns ([int]bool);
+function _S_WaitListHead__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x))} WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x)) == x);
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADER(WaitListHead__DISPATCHER_HEADERInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADER(S)[x]} _S_WaitListHead__DISPATCHER_HEADER(S)[x] <==> S[WaitListHead__DISPATCHER_HEADERInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADERInv(S)[x]} _S_WaitListHead__DISPATCHER_HEADERInv(S)[x] <==> S[WaitListHead__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADER(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADER(S)[WaitListHead__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADERInv(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADERInv(S)[WaitListHead__DISPATCHER_HEADERInv(x)]);
+
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADER(x)} WaitListHead__DISPATCHER_HEADER(x) == x + 8);
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADERInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == WaitListHead__DISPATCHER_HEADERInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == WaitListHead__DISPATCHER_HEADERInv(x));
+function WaitWakeEnabled__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeEnabled__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeEnabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeEnabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x))} WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSION(WaitWakeEnabled__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSION(x)} WaitWakeEnabled__DEVICE_EXTENSION(x) == x + 286);
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSIONInv(x) == x - 286);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 286, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 286, 1) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 286)} MINUS_LEFT_PTR(x, 1, 286) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
+function WaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x))} WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSION(WaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSION(S)[WaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSION(x)} WaitWakeIrp__DEVICE_EXTENSION(x) == x + 260);
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 260);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
+function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+function WmiFunctionControl__WMILIB_CONTEXT(int) returns (int);
+function WmiFunctionControl__WMILIB_CONTEXTInv(int) returns (int);
+function _S_WmiFunctionControl__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_WmiFunctionControl__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x))} WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXT(WmiFunctionControl__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXT(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXT(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXT(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXT(S)[WmiFunctionControl__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXT(x)} WmiFunctionControl__WMILIB_CONTEXT(x) == x + 28);
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXTInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
+function WmiLibInfo__DEVICE_EXTENSION(int) returns (int);
+function WmiLibInfo__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WmiLibInfo__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WmiLibInfo__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x))} WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSION(WmiLibInfo__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSION(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSION(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSION(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSION(S)[WmiLibInfo__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSION(x)} WmiLibInfo__DEVICE_EXTENSION(x) == x + 200);
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSIONInv(x) == x - 200);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 200, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 200, 1) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 200)} MINUS_LEFT_PTR(x, 1, 200) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
+function __unnamed_1_29794256___unnamed_4_5ca00198(int) returns (int);
+function __unnamed_1_29794256___unnamed_4_5ca00198Inv(int) returns (int);
+function _S___unnamed_1_29794256___unnamed_4_5ca00198([int]bool) returns ([int]bool);
+function _S___unnamed_1_29794256___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198Inv(__unnamed_1_29794256___unnamed_4_5ca00198(x))} __unnamed_1_29794256___unnamed_4_5ca00198Inv(__unnamed_1_29794256___unnamed_4_5ca00198(x)) == x);
+axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)} __unnamed_1_29794256___unnamed_4_5ca00198(__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_29794256___unnamed_4_5ca00198(S)[x]} _S___unnamed_1_29794256___unnamed_4_5ca00198(S)[x] <==> S[__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)[x]} _S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)[x] <==> S[__unnamed_1_29794256___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_29794256___unnamed_4_5ca00198(S)} S[x] ==> _S___unnamed_1_29794256___unnamed_4_5ca00198(S)[__unnamed_1_29794256___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)} S[x] ==> _S___unnamed_1_29794256___unnamed_4_5ca00198Inv(S)[__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)]);
+
+axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198(x)} __unnamed_1_29794256___unnamed_4_5ca00198(x) == x + 1);
+axiom (forall x:int :: {__unnamed_1_29794256___unnamed_4_5ca00198Inv(x)} __unnamed_1_29794256___unnamed_4_5ca00198Inv(x) == x - 1);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == __unnamed_1_29794256___unnamed_4_5ca00198Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == __unnamed_1_29794256___unnamed_4_5ca00198Inv(x));
+function __unnamed_1_2dc63b48___unnamed_4_5ca00198(int) returns (int);
+function __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(int) returns (int);
+function _S___unnamed_1_2dc63b48___unnamed_4_5ca00198([int]bool) returns ([int]bool);
+function _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(__unnamed_1_2dc63b48___unnamed_4_5ca00198(x))} __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)) == x);
+axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)} __unnamed_1_2dc63b48___unnamed_4_5ca00198(__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)[x]} _S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)[x] <==> S[__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)[x]} _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)[x] <==> S[__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)} S[x] ==> _S___unnamed_1_2dc63b48___unnamed_4_5ca00198(S)[__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)} S[x] ==> _S___unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(S)[__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)]);
+
+axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198(x)} __unnamed_1_2dc63b48___unnamed_4_5ca00198(x) == x + 3);
+axiom (forall x:int :: {__unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x)} __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x) == x - 3);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1) == __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 3)} MINUS_LEFT_PTR(x, 1, 3) == __unnamed_1_2dc63b48___unnamed_4_5ca00198Inv(x));
+function __unnamed_1_2ef8da39___unnamed_4_5ca00198(int) returns (int);
+function __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(int) returns (int);
+function _S___unnamed_1_2ef8da39___unnamed_4_5ca00198([int]bool) returns ([int]bool);
+function _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(__unnamed_1_2ef8da39___unnamed_4_5ca00198(x))} __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)) == x);
+axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)} __unnamed_1_2ef8da39___unnamed_4_5ca00198(__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)[x]} _S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)[x] <==> S[__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)[x]} _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)[x] <==> S[__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)} S[x] ==> _S___unnamed_1_2ef8da39___unnamed_4_5ca00198(S)[__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)} S[x] ==> _S___unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(S)[__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)]);
+
+axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198(x)} __unnamed_1_2ef8da39___unnamed_4_5ca00198(x) == x + 2);
+axiom (forall x:int :: {__unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x)} __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == __unnamed_1_2ef8da39___unnamed_4_5ca00198Inv(x));
+function __unnamed_4_5ca00198___unnamed_4_a97c65a1(int) returns (int);
+function __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(int) returns (int);
+function _S___unnamed_4_5ca00198___unnamed_4_a97c65a1([int]bool) returns ([int]bool);
+function _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(__unnamed_4_5ca00198___unnamed_4_a97c65a1(x))} __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)) == x);
+axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)} __unnamed_4_5ca00198___unnamed_4_a97c65a1(__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)[x]} _S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)[x] <==> S[__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)[x]} _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)[x] <==> S[__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)} S[x] ==> _S___unnamed_4_5ca00198___unnamed_4_a97c65a1(S)[__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)} S[x] ==> _S___unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(S)[__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)]);
+
+axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1(x)} __unnamed_4_5ca00198___unnamed_4_a97c65a1(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x)} __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_5ca00198___unnamed_4_a97c65a1Inv(x));
+function __unnamed_4_a97c65a1__DISPATCHER_HEADER(int) returns (int);
+function __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(int) returns (int);
+function _S___unnamed_4_a97c65a1__DISPATCHER_HEADER([int]bool) returns ([int]bool);
+function _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(__unnamed_4_a97c65a1__DISPATCHER_HEADER(x))} __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)) == x);
+axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)} __unnamed_4_a97c65a1__DISPATCHER_HEADER(__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)[x]} _S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)[x] <==> S[__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)[x]} _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)[x] <==> S[__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)} S[x] ==> _S___unnamed_4_a97c65a1__DISPATCHER_HEADER(S)[__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)} S[x] ==> _S___unnamed_4_a97c65a1__DISPATCHER_HEADERInv(S)[__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)]);
+
+axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADER(x)} __unnamed_4_a97c65a1__DISPATCHER_HEADER(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x)} __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_a97c65a1__DISPATCHER_HEADERInv(x));
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure nondet_choice() returns (x:int);
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+var Res_DEVICE_STACK:[int]int;
+var Res_DEV_EXTN:[int]int;
+var Res_DEV_OBJ_INIT:[int]int;
+var Res_SPIN_LOCK:[int]int;
+
+
+
+////////////////////
+// Between predicate
+////////////////////
+function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
+function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
+
+
+//////////////////////////
+// Between set constructor
+//////////////////////////
+function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
+
+////////////////////////////////////////////////////
+// axioms relating ReachBetween and ReachBetweenSet
+////////////////////////////////////////////////////
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
+axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
+
+
+//////////////////////////
+// Axioms for ReachBetween
+//////////////////////////
+
+// reflexive
+axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
+
+// step
+//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
+axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
+
+// reach
+axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
+
+// cycle
+axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
+
+// sandwich
+axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
+
+// order1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
+
+// order2
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
+
+// transitive1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
+
+// transitive2
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
+
+// transitive3
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
+
+// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
+// It cannot be proved using the rest of the axioms.
+axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
+
+// relation between ReachAvoiding and ReachBetween
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
+
+// update
+axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
+ ///////////////////////////////
+ // Shifts for linking fields
+ ///////////////////////////////
+function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
+axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
+axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
+
+const unique Globals : int;
+axiom(Globals != 0);
+// the set of constants for 64 bit integers that Boogie doesn't parse
+const unique BOOGIE_LARGE_INT_4294967273:int;
+
+
+
+procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure InitializeListHead_IRP($ListHead$1$12.44$InitializeListHead_IRP$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoCreateDevice($DriverObject$1$21226.25$IoCreateDevice$281:int, $DeviceExtensionSize$2$21227.16$IoCreateDevice$281:int, $DeviceName$3$21228.29$IoCreateDevice$281:int, $DeviceType$4$21229.22$IoCreateDevice$281:int, $DeviceCharacteristics$5$21230.16$IoCreateDevice$281:int, $Exclusive$6$21231.18$IoCreateDevice$281:int, $DeviceObject$7$21237.20$IoCreateDevice$281:int) returns ($result.IoCreateDevice$21225.0$1$:int);
+
+//TAG: ensures (LONG)__return >= 0 ==> *DeviceObject != (void *)0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> (*DeviceObject)->DeviceExtension != (void *)0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*DeviceObject)->DeviceExtension) == 1
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 1
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1)));
+//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *DeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 0)));
+//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *DeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension), 1)
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] := 1])));
+//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *DeviceObject) == __old_resource("DEV_OBJ_INIT", *DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))
+ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]])));
+//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+//TAG: ensures (LONG)__return >= 0 ==> !(__resource("DEV_OBJ_INIT", ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))->Self) == 1)
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (!(Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])])]] == 1)));
+//TAG: ensures !((LONG)__return >= 0) ==> *DeviceObject == __old(*DeviceObject)
+ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == old(Mem)[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures (LONG)__return >= 0 ==> __return == 0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ($result.IoCreateDevice$21225.0$1$ == 0));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$7$21237.20$IoCreateDevice$281))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $DeviceObject$7$21237.20$IoCreateDevice$281) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
+requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
+//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
+ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
+//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
+ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
+//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
+ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
+//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoInitializeRemoveLockEx($Lock$1$22135.25$IoInitializeRemoveLockEx$201:int, $AllocateTag$2$22136.16$IoInitializeRemoveLockEx$201:int, $MaxLockedMinutes$3$22137.16$IoInitializeRemoveLockEx$201:int, $HighWatermark$4$22138.16$IoInitializeRemoveLockEx$201:int, $RemlockSize$5$22139.16$IoInitializeRemoveLockEx$201:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KbdInitializeDataQueue($Context$1$557.13$KbdInitializeDataQueue$41:int);
+
+//TAG: requires __resource("DEV_EXTN", Context) == 1
+requires(Res_DEV_EXTN[$Context$1$557.13$KbdInitializeDataQueue$41] == 1);
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __resource("DEV_EXTN", Context) == 1
+ensures(Res_DEV_EXTN[$Context$1$557.13$KbdInitializeDataQueue$41] == 1);
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeInitializeSpinLock($SpinLock$1$13860.22$KeInitializeSpinLock$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeyboardClassLogError($Object$1$580.10$KeyboardClassLogError$281:int, $ErrorCode$2$581.10$KeyboardClassLogError$281:int, $UniqueErrorValue$3$582.10$KeyboardClassLogError$281:int, $FinalStatus$4$583.13$KeyboardClassLogError$281:int, $DumpCount$5$584.10$KeyboardClassLogError$281:int, $DumpData$6$585.11$KeyboardClassLogError$281:int, $MajorFunction$7$586.10$KeyboardClassLogError$281:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlFreeUnicodeString($UnicodeString$1$7452.28$RtlFreeUnicodeString$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure __PREfastPagedCode();
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KbdCreateClassObject($DriverObject$1$3354.28$KbdCreateClassObject$201:int, $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201:int, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201:int, $FullDeviceName$4$3357.35$KbdCreateClassObject$201:int, $Legacy$5$3358.28$KbdCreateClassObject$201:int) returns ($result.KbdCreateClassObject$3353.0$1$:int)
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1)));
+//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 0)));
+//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] := 1])));
+//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
+ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]])));
+//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+modifies alloc;
+free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
+ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3356.28$KbdCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+{
+var havoc_stringTemp:int;
+var condVal:int;
+var $ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 : int;
+var $DriverObject$1$3354.28$KbdCreateClassObject$20 : int;
+var $ExAllocatePoolWithTag.arg.2$4$ : int;
+var $FullDeviceName$4$3357.35$KbdCreateClassObject$20 : int;
+var $KbdDebugPrint.arg.2$15$ : int;
+var $KbdDebugPrint.arg.2$18$ : int;
+var $KbdDebugPrint.arg.2$2$ : int;
+var $KbdDebugPrint.arg.2$20$ : int;
+var $KbdDebugPrint.arg.2$22$ : int;
+var $KbdDebugPrint.arg.2$5$ : int;
+var $Legacy$5$3358.28$KbdCreateClassObject$20 : int;
+var $RtlAppendUnicodeToString.arg.2$12$ : int;
+var $RtlAppendUnicodeToString.arg.2$14$ : int;
+var $RtlAppendUnicodeToString.arg.2$9$ : int;
+var $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$20 : int;
+var $deviceExtension$8$3388.24$KbdCreateClassObject$20 : int;
+var $dumpCount$11$3391.24$KbdCreateClassObject$20 : int;
+var $dumpData$12$3392.24$KbdCreateClassObject$20 : int;
+var $errorCode$9$3389.24$KbdCreateClassObject$20 : int;
+var $fullClassName$10$3390.24$KbdCreateClassObject$20 : int;
+var $i$13$3393.24$KbdCreateClassObject$20 : int;
+var $memset.arg.3$7$ : int;
+var $nameIndex$14$3394.24$KbdCreateClassObject$20 : int;
+var $result.ExAllocatePoolWithTag$3441.0$3$ : int;
+var $result.ExAllocatePoolWithTag$3557.0$19$ : int;
+var $result.IoCreateDevice$3485.35$16$ : int;
+var $result.IoCreateDevice$3499.31$17$ : int;
+var $result.RtlAppendUnicodeToString$3460.32$8$ : int;
+var $result.RtlAppendUnicodeToString$3461.32$10$ : int;
+var $result.RtlAppendUnicodeToString$3464.36$11$ : int;
+var $result.RtlAppendUnicodeToString$3467.32$13$ : int;
+var $result.memset$3459.8$6$ : int;
+var $result.question.21$ : int;
+var $status$6$3386.24$KbdCreateClassObject$20 : int;
+var $uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 : int;
+var tempBoogie0:int;
+var tempBoogie1:int;
+var tempBoogie2:int;
+var tempBoogie3:int;
+var tempBoogie4:int;
+var tempBoogie5:int;
+var tempBoogie6:int;
+var tempBoogie7:int;
+var tempBoogie8:int;
+var tempBoogie9:int;
+var tempBoogie10:int;
+var tempBoogie11:int;
+var tempBoogie12:int;
+var tempBoogie13:int;
+var tempBoogie14:int;
+var tempBoogie15:int;
+var tempBoogie16:int;
+var tempBoogie17:int;
+var tempBoogie18:int;
+var tempBoogie19:int;
+var LOOP_78_alloc:[int]name;
+var LOOP_78_Mem:[name][int]int;
+var LOOP_78_Res_DEVICE_STACK:[int]int;
+var LOOP_78_Res_DEV_EXTN:[int]int;
+var LOOP_78_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_78_Res_SPIN_LOCK:[int]int;
+
+
+start:
+
+assume (alloc[$DriverObject$1$3354.28$KbdCreateClassObject$201] != UNALLOCATED);
+assume (alloc[$TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201] != UNALLOCATED);
+assume (alloc[$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] != UNALLOCATED);
+assume (alloc[$FullDeviceName$4$3357.35$KbdCreateClassObject$201] != UNALLOCATED);
+call $dumpData$12$3392.24$KbdCreateClassObject$20 := __HAVOC_malloc(16);
+call $fullClassName$10$3390.24$KbdCreateClassObject$20 := __HAVOC_malloc(8);
+$DriverObject$1$3354.28$KbdCreateClassObject$20 := $DriverObject$1$3354.28$KbdCreateClassObject$201;
+$TmpDeviceExtension$2$3355.28$KbdCreateClassObject$20 := $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201;
+$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 := $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201;
+$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := $FullDeviceName$4$3357.35$KbdCreateClassObject$201;
+$Legacy$5$3358.28$KbdCreateClassObject$20 := $Legacy$5$3358.28$KbdCreateClassObject$201;
+goto label_3;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3627)
+label_1:
+call __HAVOC_free($dumpData$12$3392.24$KbdCreateClassObject$20);
+call __HAVOC_free($fullClassName$10$3390.24$KbdCreateClassObject$20);
+assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
+assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
+assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
+assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
+assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
+assume (forall m:int :: {Mem[T.A37CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A37CHAR][m] == old(Mem[T.A37CHAR])[m]);
+assume (forall m:int :: {Mem[T.A40CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A40CHAR][m] == old(Mem[T.A40CHAR])[m]);
+assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
+assume (forall m:int :: {Mem[T.A65CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A65CHAR][m] == old(Mem[T.A65CHAR])[m]);
+assume (forall m:int :: {Mem[T.A75CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A75CHAR][m] == old(Mem[T.A75CHAR])[m]);
+assume (forall m:int :: {Mem[T.A76CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A76CHAR][m] == old(Mem[T.A76CHAR])[m]);
+assume (forall m:int :: {Mem[T.A7UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A7UINT2][m] == old(Mem[T.A7UINT2])[m]);
+assume (forall m:int :: {Mem[T.A83CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A83CHAR][m] == old(Mem[T.A83CHAR])[m]);
+assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
+assume (forall m:int :: {Mem[T.Abandoned___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Abandoned___unnamed_1_29794256][m] == old(Mem[T.Abandoned___unnamed_1_29794256])[m]);
+assume (forall m:int :: {Mem[T.Absolute___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Absolute___unnamed_1_29794256][m] == old(Mem[T.Absolute___unnamed_1_29794256])[m]);
+assume (forall m:int :: {Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.AllowDisable__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AllowDisable__DEVICE_EXTENSION][m] == old(Mem[T.AllowDisable__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Blink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blink__LIST_ENTRY][m] == old(Mem[T.Blink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.ConnectOneClassToOnePort__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ConnectOneClassToOnePort__GLOBALS][m] == old(Mem[T.ConnectOneClassToOnePort__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m] == old(Mem[T.CurrentStackLocation___unnamed_4_f19b65c1])[m]);
+assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DebugActive___unnamed_1_2dc63b48][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DebugActive___unnamed_1_2dc63b48][m] == old(Mem[T.DebugActive___unnamed_1_2dc63b48])[m]);
+assume (forall m:int :: {Mem[T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS][m] == old(Mem[T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS])[m]);
+assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.DeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceState__DEVICE_EXTENSION][m] == old(Mem[T.DeviceState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DpcActive___unnamed_1_2dc63b48][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DpcActive___unnamed_1_2dc63b48][m] == old(Mem[T.DpcActive___unnamed_1_2dc63b48])[m]);
+assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m] == old(Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.GuidCount__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidCount__WMILIB_CONTEXT][m] == old(Mem[T.GuidCount__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.GuidList__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidList__WMILIB_CONTEXT][m] == old(Mem[T.GuidList__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.Hand___unnamed_1_2ef8da39][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Hand___unnamed_1_2ef8da39][m] == old(Mem[T.Hand___unnamed_1_2ef8da39])[m]);
+assume (forall m:int :: {Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
+assume (forall m:int :: {Mem[T.InputCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputCount__DEVICE_EXTENSION][m] == old(Mem[T.InputCount__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Inserted___unnamed_1_2dc63b48][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Inserted___unnamed_1_2dc63b48][m] == old(Mem[T.Inserted___unnamed_1_2dc63b48])[m]);
+assume (forall m:int :: {Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.KeyboardAttributes__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.KeyboardAttributes__DEVICE_EXTENSION][m] == old(Mem[T.KeyboardAttributes__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.KeyboardMode__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.KeyboardMode__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.KeyboardMode__KEYBOARD_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS][m] == old(Mem[T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS])[m]);
+assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Lock___unnamed_4_a97c65a1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Lock___unnamed_4_a97c65a1][m] == old(Mem[T.Lock___unnamed_4_a97c65a1])[m]);
+assume (forall m:int :: {Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinDeviceWakeState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinSystemWakeState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
+assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.NpxIrql___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NpxIrql___unnamed_1_29794256][m] == old(Mem[T.NpxIrql___unnamed_1_29794256])[m]);
+assume (forall m:int :: {Mem[T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.NumberOfIndicators__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfIndicators__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.NumberOfIndicators__KEYBOARD_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES][m] == old(Mem[T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m] == old(Mem[T.OkayToLogOverflow__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
+assume (forall m:int :: {Mem[T.PDO__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PDO__DEVICE_EXTENSION][m] == old(Mem[T.PDO__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
+assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
+assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
+assume (forall m:int :: {Mem[T.P_IO_REMOVE_LOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IO_REMOVE_LOCK][m] == old(Mem[T.P_IO_REMOVE_LOCK])[m]);
+assume (forall m:int :: {Mem[T.P_KEYBOARD_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_KEYBOARD_INPUT_DATA][m] == old(Mem[T.P_KEYBOARD_INPUT_DATA])[m]);
+assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS][m] == old(Mem[T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS])[m]);
+assume (forall m:int :: {Mem[T.ReadQueue__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ReadQueue__DEVICE_EXTENSION][m] == old(Mem[T.ReadQueue__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.RemoveLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RemoveLock__DEVICE_EXTENSION][m] == old(Mem[T.RemoveLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SequenceNumber__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SequenceNumber__DEVICE_EXTENSION][m] == old(Mem[T.SequenceNumber__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataBlock__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataItem__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.SignalState__DISPATCHER_HEADER][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SignalState__DISPATCHER_HEADER][m] == old(Mem[T.SignalState__DISPATCHER_HEADER])[m]);
+assume (forall m:int :: {Mem[T.Signalling___unnamed_1_29794256][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signalling___unnamed_1_29794256][m] == old(Mem[T.Signalling___unnamed_1_29794256])[m]);
+assume (forall m:int :: {Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Size___unnamed_1_2ef8da39][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Size___unnamed_1_2ef8da39][m] == old(Mem[T.Size___unnamed_1_2ef8da39])[m]);
+assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Subtype__KEYBOARD_ID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Subtype__KEYBOARD_ID][m] == old(Mem[T.Subtype__KEYBOARD_ID])[m]);
+assume (forall m:int :: {Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m] == old(Mem[T.SurpriseRemoved__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SystemState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemState__DEVICE_EXTENSION][m] == old(Mem[T.SystemState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m] == old(Mem[T.SystemToDeviceState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m] == old(Mem[T.TargetNotifyHandle__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TrueClassDevice__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrueClassDevice__DEVICE_EXTENSION][m] == old(Mem[T.TrueClassDevice__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m] == old(Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Type__KEYBOARD_ID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Type__KEYBOARD_ID][m] == old(Mem[T.Type__KEYBOARD_ID])[m]);
+assume (forall m:int :: {Mem[T.Type___unnamed_4_5ca00198][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Type___unnamed_4_5ca00198][m] == old(Mem[T.Type___unnamed_4_5ca00198])[m]);
+assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
+assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
+assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
+assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.UnitId__KEYBOARD_INDICATOR_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__KEYBOARD_INDICATOR_PARAMETERS][m] == old(Mem[T.UnitId__KEYBOARD_INDICATOR_PARAMETERS])[m]);
+assume (forall m:int :: {Mem[T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS][m] == old(Mem[T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeEnabled__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeIrp__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m] == old(Mem[T.WmiFunctionControl__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3627)
+label_2:
+assume false;
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3386)
+label_3:
+goto label_4;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3387)
+label_4:
+goto label_5;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3388)
+label_5:
+goto label_6;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3388)
+label_6:
+$deviceExtension$8$3388.24$KbdCreateClassObject$20 := 0 ;
+goto label_7;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3389)
+label_7:
+goto label_8;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3389)
+label_8:
+$errorCode$9$3389.24$KbdCreateClassObject$20 := 0 ;
+goto label_9;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3390)
+label_9:
+goto label_10;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3390)
+label_10:
+// Skipping Structure assignment due to the flag SkipStructAssignments
+goto label_11;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3391)
+label_11:
+goto label_12;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3391)
+label_12:
+$dumpCount$11$3391.24$KbdCreateClassObject$20 := 0 ;
+goto label_13;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3392)
+label_13:
+goto label_14;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3393)
+label_14:
+goto label_15;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3394)
+label_15:
+goto label_16;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3396)
+label_16:
+call __PREfastPagedCode ();
+goto label_22;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3398)
+label_19:
+// skip KbdDebugPrint
+goto label_23;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3398)
+label_22:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$2$ := havoc_stringTemp ;
+goto label_19;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3404)
+label_23:
+call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
+goto label_26;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3409)
+label_26:
+Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 := 0];
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3411)
+label_27:
+goto label_27_true , label_27_false ;
+
+
+label_27_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_89;
+
+
+label_27_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_28;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3415)
+label_28:
+call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
+goto label_31;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3421)
+label_31:
+goto label_31_true , label_31_false ;
+
+
+label_31_true :
+assume (BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
+goto label_32;
+
+
+label_31_false :
+assume !(BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
+goto label_37;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3422)
+label_32:
+$status$6$3386.24$KbdCreateClassObject$20 := -1073741823 ;
+goto label_33;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3423)
+label_33:
+$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414143 ;
+goto label_34;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3424)
+label_34:
+$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10006 ;
+goto label_35;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3425)
+label_35:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3392.24$KbdCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
+goto label_36;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3426)
+label_36:
+$dumpCount$11$3391.24$KbdCreateClassObject$20 := 1 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3433)
+label_37:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]), 1, 4)];
+goto label_38;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3437)
+label_38:
+goto label_38_true , label_38_false ;
+
+
+label_38_true :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
+goto label_39;
+
+
+label_38_false :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3437)
+label_39:
+goto label_39_true , label_39_false ;
+
+
+label_39_true :
+assume ($Legacy$5$3358.28$KbdCreateClassObject$20 != 0);
+goto label_40;
+
+
+label_39_false :
+assume ($Legacy$5$3358.28$KbdCreateClassObject$20 == 0);
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3438)
+label_40:
+tempBoogie0 := PLUS(Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)], 1, 14) ;
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20) := tempBoogie0];
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3441)
+label_41:
+call $result.ExAllocatePoolWithTag$3441.0$3$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$4$, 1130652235);
+goto label_45;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3441)
+label_44:
+$ExAllocatePoolWithTag.arg.2$4$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] ;
+goto label_41;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3441)
+label_45:
+Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20) := $result.ExAllocatePoolWithTag$3441.0$3$];
+goto label_46;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3444)
+label_46:
+goto label_46_true , label_46_false ;
+
+
+label_46_true :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] != 0);
+goto label_59;
+
+
+label_46_false :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] == 0);
+goto label_50;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3446)
+label_47:
+// skip KbdDebugPrint
+goto label_51;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3446)
+label_50:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$5$ := havoc_stringTemp ;
+goto label_47;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3451)
+label_51:
+$status$6$3386.24$KbdCreateClassObject$20 := -1073741823 ;
+goto label_52;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3452)
+label_52:
+$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414143 ;
+goto label_53;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3453)
+label_53:
+$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10006 ;
+goto label_54;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3454)
+label_54:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3392.24$KbdCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
+goto label_55;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3455)
+label_55:
+$dumpCount$11$3391.24$KbdCreateClassObject$20 := 1 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3459)
+label_56:
+// ignoring intrinsic intrinsic.memset
+havoc $result.memset$3459.8$6$;
+goto label_63;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3459)
+label_59:
+$memset.arg.3$7$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)] ;
+goto label_56;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3460)
+label_60:
+call $result.RtlAppendUnicodeToString$3460.32$8$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$9$);
+goto label_64;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3460)
+label_63:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$9$ := havoc_stringTemp ;
+goto label_60;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3461)
+label_64:
+call $result.RtlAppendUnicodeToString$3461.32$10$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
+goto label_67;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3463)
+label_67:
+goto label_67_true , label_67_false ;
+
+
+label_67_true :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
+goto label_68;
+
+
+label_67_false :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
+goto label_76;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3463)
+label_68:
+goto label_68_true , label_68_false ;
+
+
+label_68_true :
+assume ($Legacy$5$3358.28$KbdCreateClassObject$20 != 0);
+goto label_72;
+
+
+label_68_false :
+assume ($Legacy$5$3358.28$KbdCreateClassObject$20 == 0);
+goto label_76;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3464)
+label_69:
+call $result.RtlAppendUnicodeToString$3464.36$11$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$12$);
+goto label_76;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3464)
+label_72:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$12$ := havoc_stringTemp ;
+goto label_69;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3467)
+label_73:
+call $result.RtlAppendUnicodeToString$3467.32$13$ := RtlAppendUnicodeToString ($fullClassName$10$3390.24$KbdCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$14$);
+goto label_77;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3467)
+label_76:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$14$ := havoc_stringTemp ;
+goto label_73;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3473)
+label_77:
+$nameIndex$14$3394.24$KbdCreateClassObject$20 := 0 ;
+goto label_78;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3477)
+label_78:
+// loop entry initialization...
+LOOP_78_alloc := alloc;
+LOOP_78_Mem := Mem;
+LOOP_78_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_78_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_78_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_78_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_78_head;
+
+
+label_78_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: requires __preserves_resource("DEV_OBJ_INIT")
+assert(Res_DEV_OBJ_INIT == LOOP_78_Res_DEV_OBJ_INIT);
+//TAG: requires __preserves_resource("DEV_EXTN")
+assert(Res_DEV_EXTN == LOOP_78_Res_DEV_EXTN);
+//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+assert(Mem[T.Flink__LIST_ENTRY] == LOOP_78_Mem[T.Flink__LIST_ENTRY]);
+assume(forall f:int :: {alloc[Base(f)]} LOOP_78_alloc[Base(f)] == UNALLOCATED || LOOP_78_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_78_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_78_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_78_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_78_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_78_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_78_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_78_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true, __set_empty
+assert (Subset(Empty(), Union(Union(Empty(), SetTrue()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_78_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_78_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)], 2), 1, 1)) := PLUS(48, 1, $nameIndex$14$3394.24$KbdCreateClassObject$20)];
+$nameIndex$14$3394.24$KbdCreateClassObject$20 := PLUS($nameIndex$14$3394.24$KbdCreateClassObject$20, 1, 1) ;
+goto label_82;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3479)
+label_79:
+// skip KbdDebugPrint
+goto label_83;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3479)
+label_82:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$15$ := havoc_stringTemp ;
+goto label_79;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3485)
+label_83:
+call $result.IoCreateDevice$3485.35$16$ := IoCreateDevice ($DriverObject$1$3354.28$KbdCreateClassObject$20, 288, $fullClassName$10$3390.24$KbdCreateClassObject$20, 11, 0, 0, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$20);
+goto label_86;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3485)
+label_86:
+$status$6$3386.24$KbdCreateClassObject$20 := $result.IoCreateDevice$3485.35$16$ ;
+goto label_87;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3493)
+label_87:
+goto label_87_true , label_87_false ;
+
+
+label_87_true :
+assume (-1073741771 == $status$6$3386.24$KbdCreateClassObject$20);
+goto label_78_head;
+
+
+label_87_false :
+assume !(-1073741771 == $status$6$3386.24$KbdCreateClassObject$20);
+goto label_88;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3495)
+label_88:
+Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
+goto label_97;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3498)
+label_89:
+call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
+goto label_92;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3499)
+label_92:
+call $result.IoCreateDevice$3499.31$17$ := IoCreateDevice ($DriverObject$1$3354.28$KbdCreateClassObject$20, 288, 0, 11, 0, 0, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$20);
+goto label_95;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3499)
+label_95:
+$status$6$3386.24$KbdCreateClassObject$20 := $result.IoCreateDevice$3499.31$17$ ;
+goto label_96;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3506)
+label_96:
+Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := 0];
+goto label_97;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3509)
+label_97:
+goto label_97_true , label_97_false ;
+
+
+label_97_true :
+assume (0 <= $status$6$3386.24$KbdCreateClassObject$20);
+goto label_98;
+
+
+label_97_false :
+assume !(0 <= $status$6$3386.24$KbdCreateClassObject$20);
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3509)
+label_98:
+goto label_98_true , label_98_false ;
+
+
+label_98_true :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] != 0);
+goto label_107;
+
+
+label_98_false :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] == 0);
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3510)
+label_99:
+// skip KbdDebugPrint
+goto label_103;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3510)
+label_102:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$18$ := havoc_stringTemp ;
+goto label_99;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3516)
+label_103:
+$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414131 ;
+goto label_104;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3517)
+label_104:
+$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10006 ;
+goto label_105;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3518)
+label_105:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3392.24$KbdCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3390.24$KbdCreateClassObject$20)]];
+goto label_106;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3519)
+label_106:
+$dumpCount$11$3391.24$KbdCreateClassObject$20 := 1 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3528)
+label_107:
+assume (forall r:int :: {BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])], 4),r)} BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])],r)!= 0 || BIT_BAND(4,r)!= 0 <==> BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])], 4),r)!= 0);
+tempBoogie0 := BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])], 4) ;
+Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20]) := tempBoogie0];
+goto label_108;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3529)
+label_108:
+$deviceExtension$8$3388.24$KbdCreateClassObject$20 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20])] ;
+goto label_109;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3531)
+label_109:
+// Skipping Structure assignment due to the flag SkipStructAssignments
+goto label_110;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3533)
+label_110:
+Mem[T.Self__DEVICE_EXTENSION] := Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20]];
+goto label_111;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3534)
+label_111:
+call IoInitializeRemoveLockEx (RemoveLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20), 1130652235, 0, 0, 88);
+goto label_114;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3539)
+label_114:
+assume (Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] == Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)]);
+call KeInitializeSpinLock (SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20));
+Mem[T.SpinLock__DEVICE_EXTENSION] := Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)]];
+goto label_117;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3544)
+label_117:
+call InitializeListHead_IRP (ReadQueue__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20));
+goto label_120;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3550)
+label_120:
+Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION] := Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][TrustedSubsystemCount__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := 0];
+goto label_121;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3557)
+label_121:
+call $result.ExAllocatePoolWithTag$3557.0$19$ := ExAllocatePoolWithTag (0, Mem[T.InputDataQueueLength__KEYBOARD_ATTRIBUTES][InputDataQueueLength__KEYBOARD_ATTRIBUTES(KeyboardAttributes__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20))], 1130652235);
+goto label_124;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3556)
+label_124:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := $result.ExAllocatePoolWithTag$3557.0$19$];
+goto label_125;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3562)
+label_125:
+goto label_125_true , label_125_false ;
+
+
+label_125_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] != 0);
+goto label_133;
+
+
+label_125_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] == 0);
+goto label_129;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3568)
+label_126:
+// skip KbdDebugPrint
+goto label_130;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3568)
+label_129:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$20$ := havoc_stringTemp ;
+goto label_126;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3574)
+label_130:
+$status$6$3386.24$KbdCreateClassObject$20 := -1073741670 ;
+goto label_131;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3580)
+label_131:
+$errorCode$9$3389.24$KbdCreateClassObject$20 := -1073414142 ;
+goto label_132;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3581)
+label_132:
+$uniqueErrorValue$7$3387.24$KbdCreateClassObject$20 := 10020 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3589)
+label_133:
+call KbdInitializeDataQueue ($deviceExtension$8$3388.24$KbdCreateClassObject$20);
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3593)
+label_136:
+goto label_136_true , label_136_false ;
+
+
+label_136_true :
+assume ($status$6$3386.24$KbdCreateClassObject$20 != 0);
+goto label_137;
+
+
+label_136_false :
+assume ($status$6$3386.24$KbdCreateClassObject$20 == 0);
+goto label_162;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3599)
+label_137:
+call RtlFreeUnicodeString ($fullClassName$10$3390.24$KbdCreateClassObject$20);
+goto label_140;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3600)
+label_140:
+Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3357.35$KbdCreateClassObject$20 := 0];
+goto label_141;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3602)
+label_141:
+goto label_141_true , label_141_false ;
+
+
+label_141_true :
+assume ($errorCode$9$3389.24$KbdCreateClassObject$20 != 0);
+goto label_145;
+
+
+label_141_false :
+assume ($errorCode$9$3389.24$KbdCreateClassObject$20 == 0);
+goto label_148;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3603)
+label_142:
+call KeyboardClassLogError ($result.question.21$, $errorCode$9$3389.24$KbdCreateClassObject$20, $uniqueErrorValue$7$3387.24$KbdCreateClassObject$20, $status$6$3386.24$KbdCreateClassObject$20, $dumpCount$11$3391.24$KbdCreateClassObject$20, $dumpData$12$3392.24$KbdCreateClassObject$20, 0);
+goto label_148;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3604)
+label_145:
+goto label_145_true , label_145_false ;
+
+
+label_145_true :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] != 0);
+goto label_147;
+
+
+label_145_false :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] == 0);
+goto label_146;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3604)
+label_146:
+$result.question.21$ := $DriverObject$1$3354.28$KbdCreateClassObject$20 ;
+goto label_142;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3604)
+label_147:
+$result.question.21$ := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] ;
+goto label_142;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3614)
+label_148:
+goto label_148_true , label_148_false ;
+
+
+label_148_true :
+assume ($deviceExtension$8$3388.24$KbdCreateClassObject$20 != 0);
+goto label_149;
+
+
+label_148_false :
+assume ($deviceExtension$8$3388.24$KbdCreateClassObject$20 == 0);
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3614)
+label_149:
+goto label_149_true , label_149_false ;
+
+
+label_149_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] != 0);
+goto label_150;
+
+
+label_149_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)] == 0);
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3615)
+label_150:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20)], 0);
+goto label_153;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3616)
+label_153:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3388.24$KbdCreateClassObject$20) := 0];
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3618)
+label_154:
+goto label_154_true , label_154_false ;
+
+
+label_154_true :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] != 0);
+goto label_155;
+
+
+label_154_false :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20] == 0);
+goto label_162;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3619)
+label_155:
+call IoDeleteDevice (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20]);
+goto label_158;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3620)
+label_158:
+Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$20 := 0];
+goto label_162;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3624)
+label_159:
+// skip KbdDebugPrint
+goto label_163;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3624)
+label_162:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$22$ := havoc_stringTemp ;
+goto label_159;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3626)
+label_163:
+$result.KbdCreateClassObject$3353.0$1$ := $status$6$3386.24$KbdCreateClassObject$20 ;
+goto label_1;
+
+}
+
diff --git a/Test/havoc0/KeyboardClassFindMorePorts.bpl b/Test/havoc0/KeyboardClassFindMorePorts.bpl
index a2b8994d..e419e8a0 100644
--- a/Test/havoc0/KeyboardClassFindMorePorts.bpl
+++ b/Test/havoc0/KeyboardClassFindMorePorts.bpl
@@ -1,3782 +1,3782 @@
-// RUN: %boogie -monomorphize "%s" > "%t"
-// RUN: %diff success.expect "%t"
-type byte, name;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function SetTrue() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-/*
-function AtLeast(int, int) returns ([int]bool);
-function ModEqual(int, int, int) returns (bool);
-axiom(forall n:int, x:int :: ModEqual(n,x,x));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
-axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
-axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
-axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-*/
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int :: SetTrue()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name, m:[name][int]int) returns (bool);
-function Values(t:name, m:[name][int]int) returns ([int]bool);
-function T.Ptr(t:name) returns (name);
-
-axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
-
-axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
-
-axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
- (HasType(v, t, m1) <==> HasType(v, t, m2)));
-
-// Field declarations
-
-const unique T.Guid_WMIGUIDREGINFO:name;
-const unique T.InstanceCount_WMIGUIDREGINFO:name;
-const unique T.Flags_WMIGUIDREGINFO:name;
-const unique T.OperationID__ACCESS_STATE:name;
-const unique T.SecurityEvaluated__ACCESS_STATE:name;
-const unique T.GenerateAudit__ACCESS_STATE:name;
-const unique T.GenerateOnClose__ACCESS_STATE:name;
-const unique T.PrivilegesAllocated__ACCESS_STATE:name;
-const unique T.Flags__ACCESS_STATE:name;
-const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
-const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
-const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
-const unique T.SubjectSecurityContext__ACCESS_STATE:name;
-const unique T.SecurityDescriptor__ACCESS_STATE:name;
-const unique T.AuxData__ACCESS_STATE:name;
-const unique T.Privileges__ACCESS_STATE:name;
-const unique T.AuditPrivileges__ACCESS_STATE:name;
-const unique T.ObjectName__ACCESS_STATE:name;
-const unique T.ObjectTypeName__ACCESS_STATE:name;
-const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_RESOURCE_LIST:name;
-const unique T.List__CM_RESOURCE_LIST:name;
-const unique T.Size__DEVICE_CAPABILITIES:name;
-const unique T.Version__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
-const unique T.LockSupported__DEVICE_CAPABILITIES:name;
-const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.Removable__DEVICE_CAPABILITIES:name;
-const unique T.DockDevice__DEVICE_CAPABILITIES:name;
-const unique T.UniqueID__DEVICE_CAPABILITIES:name;
-const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
-const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
-const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
-const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
-const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
-const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
-const unique T.Reserved__DEVICE_CAPABILITIES:name;
-const unique T.Address__DEVICE_CAPABILITIES:name;
-const unique T.UINumber__DEVICE_CAPABILITIES:name;
-const unique T.DeviceState__DEVICE_CAPABILITIES:name;
-const unique T.SystemWake__DEVICE_CAPABILITIES:name;
-const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
-const unique T.D1Latency__DEVICE_CAPABILITIES:name;
-const unique T.D2Latency__DEVICE_CAPABILITIES:name;
-const unique T.D3Latency__DEVICE_CAPABILITIES:name;
-const unique T.Self__DEVICE_EXTENSION:name;
-const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
-const unique T.TopPort__DEVICE_EXTENSION:name;
-const unique T.PDO__DEVICE_EXTENSION:name;
-const unique T.RemoveLock__DEVICE_EXTENSION:name;
-const unique T.PnP__DEVICE_EXTENSION:name;
-const unique T.Started__DEVICE_EXTENSION:name;
-const unique T.AllowDisable__DEVICE_EXTENSION:name;
-const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
-const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
-const unique T.InputCount__DEVICE_EXTENSION:name;
-const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
-const unique T.InputData__DEVICE_EXTENSION:name;
-const unique T.DataIn__DEVICE_EXTENSION:name;
-const unique T.DataOut__DEVICE_EXTENSION:name;
-const unique T.KeyboardAttributes__DEVICE_EXTENSION:name;
-const unique T.IndicatorParameters__DEVICE_EXTENSION:name;
-const unique T.SpinLock__DEVICE_EXTENSION:name;
-const unique T.ReadQueue__DEVICE_EXTENSION:name;
-const unique T.SequenceNumber__DEVICE_EXTENSION:name;
-const unique T.DeviceState__DEVICE_EXTENSION:name;
-const unique T.SystemState__DEVICE_EXTENSION:name;
-const unique T.UnitId__DEVICE_EXTENSION:name;
-const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
-const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
-const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
-const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
-const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
-const unique T.Link__DEVICE_EXTENSION:name;
-const unique T.File__DEVICE_EXTENSION:name;
-const unique T.Enabled__DEVICE_EXTENSION:name;
-const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
-const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
-const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
-const unique T.Type__DEVICE_OBJECT:name;
-const unique T.Size__DEVICE_OBJECT:name;
-const unique T.ReferenceCount__DEVICE_OBJECT:name;
-const unique T.DriverObject__DEVICE_OBJECT:name;
-const unique T.NextDevice__DEVICE_OBJECT:name;
-const unique T.AttachedDevice__DEVICE_OBJECT:name;
-const unique T.CurrentIrp__DEVICE_OBJECT:name;
-const unique T.Timer__DEVICE_OBJECT:name;
-const unique T.Flags__DEVICE_OBJECT:name;
-const unique T.Characteristics__DEVICE_OBJECT:name;
-const unique T.Vpb__DEVICE_OBJECT:name;
-const unique T.DeviceExtension__DEVICE_OBJECT:name;
-const unique T.DeviceType__DEVICE_OBJECT:name;
-const unique T.StackSize__DEVICE_OBJECT:name;
-const unique T.Queue__DEVICE_OBJECT:name;
-const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
-const unique T.DeviceQueue__DEVICE_OBJECT:name;
-const unique T.Dpc__DEVICE_OBJECT:name;
-const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
-const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
-const unique T.DeviceLock__DEVICE_OBJECT:name;
-const unique T.SectorSize__DEVICE_OBJECT:name;
-const unique T.Spare1__DEVICE_OBJECT:name;
-const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
-const unique T.Reserved__DEVICE_OBJECT:name;
-const unique T.Type__DEVOBJ_EXTENSION:name;
-const unique T.Size__DEVOBJ_EXTENSION:name;
-const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
-const unique T.__unnamed_4_a97c65a1__DISPATCHER_HEADER:name;
-const unique T.SignalState__DISPATCHER_HEADER:name;
-const unique T.WaitListHead__DISPATCHER_HEADER:name;
-const unique T.DriverObject__DRIVER_EXTENSION:name;
-const unique T.AddDevice__DRIVER_EXTENSION:name;
-const unique T.Count__DRIVER_EXTENSION:name;
-const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
-const unique T.Type__DRIVER_OBJECT:name;
-const unique T.Size__DRIVER_OBJECT:name;
-const unique T.DeviceObject__DRIVER_OBJECT:name;
-const unique T.Flags__DRIVER_OBJECT:name;
-const unique T.DriverStart__DRIVER_OBJECT:name;
-const unique T.DriverSize__DRIVER_OBJECT:name;
-const unique T.DriverSection__DRIVER_OBJECT:name;
-const unique T.DriverExtension__DRIVER_OBJECT:name;
-const unique T.DriverName__DRIVER_OBJECT:name;
-const unique T.HardwareDatabase__DRIVER_OBJECT:name;
-const unique T.FastIoDispatch__DRIVER_OBJECT:name;
-const unique T.DriverInit__DRIVER_OBJECT:name;
-const unique T.DriverStartIo__DRIVER_OBJECT:name;
-const unique T.DriverUnload__DRIVER_OBJECT:name;
-const unique T.MajorFunction__DRIVER_OBJECT:name;
-const unique T.SystemResourcesList__ERESOURCE:name;
-const unique T.OwnerTable__ERESOURCE:name;
-const unique T.ActiveCount__ERESOURCE:name;
-const unique T.Flag__ERESOURCE:name;
-const unique T.SharedWaiters__ERESOURCE:name;
-const unique T.ExclusiveWaiters__ERESOURCE:name;
-const unique T.OwnerEntry__ERESOURCE:name;
-const unique T.ActiveEntries__ERESOURCE:name;
-const unique T.ContentionCount__ERESOURCE:name;
-const unique T.NumberOfSharedWaiters__ERESOURCE:name;
-const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
-const unique T.__unnamed_4_52c594f7__ERESOURCE:name;
-const unique T.SpinLock__ERESOURCE:name;
-const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
-const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
-const unique T.FastIoRead__FAST_IO_DISPATCH:name;
-const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoLock__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
-const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
-const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
-const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlRead__FAST_IO_DISPATCH:name;
-const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
-const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
-const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
-const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.Count__FAST_MUTEX:name;
-const unique T.Owner__FAST_MUTEX:name;
-const unique T.Contention__FAST_MUTEX:name;
-const unique T.Gate__FAST_MUTEX:name;
-const unique T.OldIrql__FAST_MUTEX:name;
-const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
-const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
-const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
-const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.Type__FILE_OBJECT:name;
-const unique T.Size__FILE_OBJECT:name;
-const unique T.DeviceObject__FILE_OBJECT:name;
-const unique T.Vpb__FILE_OBJECT:name;
-const unique T.FsContext__FILE_OBJECT:name;
-const unique T.FsContext2__FILE_OBJECT:name;
-const unique T.SectionObjectPointer__FILE_OBJECT:name;
-const unique T.PrivateCacheMap__FILE_OBJECT:name;
-const unique T.FinalStatus__FILE_OBJECT:name;
-const unique T.RelatedFileObject__FILE_OBJECT:name;
-const unique T.LockOperation__FILE_OBJECT:name;
-const unique T.DeletePending__FILE_OBJECT:name;
-const unique T.ReadAccess__FILE_OBJECT:name;
-const unique T.WriteAccess__FILE_OBJECT:name;
-const unique T.DeleteAccess__FILE_OBJECT:name;
-const unique T.SharedRead__FILE_OBJECT:name;
-const unique T.SharedWrite__FILE_OBJECT:name;
-const unique T.SharedDelete__FILE_OBJECT:name;
-const unique T.Flags__FILE_OBJECT:name;
-const unique T.FileName__FILE_OBJECT:name;
-const unique T.CurrentByteOffset__FILE_OBJECT:name;
-const unique T.Waiters__FILE_OBJECT:name;
-const unique T.Busy__FILE_OBJECT:name;
-const unique T.LastLock__FILE_OBJECT:name;
-const unique T.Lock__FILE_OBJECT:name;
-const unique T.Event__FILE_OBJECT:name;
-const unique T.CompletionContext__FILE_OBJECT:name;
-const unique T.IrpListLock__FILE_OBJECT:name;
-const unique T.IrpList__FILE_OBJECT:name;
-const unique T.FileObjectExtension__FILE_OBJECT:name;
-const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
-const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
-const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
-const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
-const unique T.Directory__FILE_STANDARD_INFORMATION:name;
-const unique T.Debug__GLOBALS:name;
-const unique T.GrandMaster__GLOBALS:name;
-const unique T.AssocClassList__GLOBALS:name;
-const unique T.NumAssocClass__GLOBALS:name;
-const unique T.Opens__GLOBALS:name;
-const unique T.NumberLegacyPorts__GLOBALS:name;
-const unique T.Mutex__GLOBALS:name;
-const unique T.ConnectOneClassToOnePort__GLOBALS:name;
-const unique T.SendOutputToAllPorts__GLOBALS:name;
-const unique T.PortsServiced__GLOBALS:name;
-const unique T.InitExtension__GLOBALS:name;
-const unique T.RegistryPath__GLOBALS:name;
-const unique T.BaseClassName__GLOBALS:name;
-const unique T.BaseClassBuffer__GLOBALS:name;
-const unique T.LegacyDeviceList__GLOBALS:name;
-const unique T.Data1__GUID:name;
-const unique T.Data2__GUID:name;
-const unique T.Data3__GUID:name;
-const unique T.Data4__GUID:name;
-const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
-const unique T.Control__INITIAL_PRIVILEGE_SET:name;
-const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
-const unique T.Size__INTERFACE:name;
-const unique T.Version__INTERFACE:name;
-const unique T.Context__INTERFACE:name;
-const unique T.InterfaceReference__INTERFACE:name;
-const unique T.InterfaceDereference__INTERFACE:name;
-const unique T.Port__IO_COMPLETION_CONTEXT:name;
-const unique T.Key__IO_COMPLETION_CONTEXT:name;
-const unique T.Common__IO_REMOVE_LOCK:name;
-const unique T.Dbg__IO_REMOVE_LOCK:name;
-const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__IO_RESOURCE_LIST:name;
-const unique T.Revision__IO_RESOURCE_LIST:name;
-const unique T.Count__IO_RESOURCE_LIST:name;
-const unique T.Descriptors__IO_RESOURCE_LIST:name;
-const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
-const unique T.AccessState__IO_SECURITY_CONTEXT:name;
-const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
-const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
-const unique T.MajorFunction__IO_STACK_LOCATION:name;
-const unique T.MinorFunction__IO_STACK_LOCATION:name;
-const unique T.Flags__IO_STACK_LOCATION:name;
-const unique T.Control__IO_STACK_LOCATION:name;
-const unique T.Parameters__IO_STACK_LOCATION:name;
-const unique T.DeviceObject__IO_STACK_LOCATION:name;
-const unique T.FileObject__IO_STACK_LOCATION:name;
-const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
-const unique T.Context__IO_STACK_LOCATION:name;
-const unique T.__unnamed_4_d99b6e2b__IO_STATUS_BLOCK:name;
-const unique T.Information__IO_STATUS_BLOCK:name;
-const unique T.Type__IRP:name;
-const unique T.Size__IRP:name;
-const unique T.MdlAddress__IRP:name;
-const unique T.Flags__IRP:name;
-const unique T.AssociatedIrp__IRP:name;
-const unique T.ThreadListEntry__IRP:name;
-const unique T.IoStatus__IRP:name;
-const unique T.RequestorMode__IRP:name;
-const unique T.PendingReturned__IRP:name;
-const unique T.StackCount__IRP:name;
-const unique T.CurrentLocation__IRP:name;
-const unique T.Cancel__IRP:name;
-const unique T.CancelIrql__IRP:name;
-const unique T.ApcEnvironment__IRP:name;
-const unique T.AllocationFlags__IRP:name;
-const unique T.UserIosb__IRP:name;
-const unique T.UserEvent__IRP:name;
-const unique T.Overlay__IRP:name;
-const unique T.CancelRoutine__IRP:name;
-const unique T.UserBuffer__IRP:name;
-const unique T.Tail__IRP:name;
-const unique T.Type__KAPC:name;
-const unique T.SpareByte0__KAPC:name;
-const unique T.Size__KAPC:name;
-const unique T.SpareByte1__KAPC:name;
-const unique T.SpareLong0__KAPC:name;
-const unique T.Thread__KAPC:name;
-const unique T.ApcListEntry__KAPC:name;
-const unique T.KernelRoutine__KAPC:name;
-const unique T.RundownRoutine__KAPC:name;
-const unique T.NormalRoutine__KAPC:name;
-const unique T.NormalContext__KAPC:name;
-const unique T.SystemArgument1__KAPC:name;
-const unique T.SystemArgument2__KAPC:name;
-const unique T.ApcStateIndex__KAPC:name;
-const unique T.ApcMode__KAPC:name;
-const unique T.Inserted__KAPC:name;
-const unique T.Type__KDEVICE_QUEUE:name;
-const unique T.Size__KDEVICE_QUEUE:name;
-const unique T.DeviceListHead__KDEVICE_QUEUE:name;
-const unique T.Lock__KDEVICE_QUEUE:name;
-const unique T.Busy__KDEVICE_QUEUE:name;
-const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
-const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Type__KDPC:name;
-const unique T.Importance__KDPC:name;
-const unique T.Number__KDPC:name;
-const unique T.DpcListEntry__KDPC:name;
-const unique T.DeferredRoutine__KDPC:name;
-const unique T.DeferredContext__KDPC:name;
-const unique T.SystemArgument1__KDPC:name;
-const unique T.SystemArgument2__KDPC:name;
-const unique T.DpcData__KDPC:name;
-const unique T.Header__KEVENT:name;
-const unique T.KeyboardIdentifier__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyboardMode__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfIndicators__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES:name;
-const unique T.InputDataQueueLength__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyRepeatMinimum__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyRepeatMaximum__KEYBOARD_ATTRIBUTES:name;
-const unique T.Type__KEYBOARD_ID:name;
-const unique T.Subtype__KEYBOARD_ID:name;
-const unique T.UnitId__KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T.UnitId__KEYBOARD_INPUT_DATA:name;
-const unique T.MakeCode__KEYBOARD_INPUT_DATA:name;
-const unique T.Flags__KEYBOARD_INPUT_DATA:name;
-const unique T.Reserved__KEYBOARD_INPUT_DATA:name;
-const unique T.ExtraInformation__KEYBOARD_INPUT_DATA:name;
-const unique T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Header__KSEMAPHORE:name;
-const unique T.Limit__KSEMAPHORE:name;
-const unique T.__unnamed_8_58ee4a31__LARGE_INTEGER:name;
-const unique T.u__LARGE_INTEGER:name;
-const unique T.QuadPart__LARGE_INTEGER:name;
-const unique T.Flink__LIST_ENTRY:name;
-const unique T.Blink__LIST_ENTRY:name;
-const unique T.LowPart__LUID:name;
-const unique T.HighPart__LUID:name;
-const unique T.Luid__LUID_AND_ATTRIBUTES:name;
-const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
-const unique T.Next__MDL:name;
-const unique T.Size__MDL:name;
-const unique T.MdlFlags__MDL:name;
-const unique T.Process__MDL:name;
-const unique T.MappedSystemVa__MDL:name;
-const unique T.StartVa__MDL:name;
-const unique T.ByteCount__MDL:name;
-const unique T.ByteOffset__MDL:name;
-const unique T.OwnerThread__OWNER_ENTRY:name;
-const unique T.__unnamed_4_6f9ac8e1__OWNER_ENTRY:name;
-const unique T.File__PORT:name;
-const unique T.Port__PORT:name;
-const unique T.Enabled__PORT:name;
-const unique T.Reserved__PORT:name;
-const unique T.Free__PORT:name;
-const unique T.SequenceD1__POWER_SEQUENCE:name;
-const unique T.SequenceD2__POWER_SEQUENCE:name;
-const unique T.SequenceD3__POWER_SEQUENCE:name;
-const unique T.SystemState__POWER_STATE:name;
-const unique T.DeviceState__POWER_STATE:name;
-const unique T.PrivilegeCount__PRIVILEGE_SET:name;
-const unique T.Control__PRIVILEGE_SET:name;
-const unique T.Privilege__PRIVILEGE_SET:name;
-const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
-const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.__unnamed_4_3a2fdc5e__SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T.Length__UNICODE_STRING:name;
-const unique T.MaximumLength__UNICODE_STRING:name;
-const unique T.Buffer__UNICODE_STRING:name;
-const unique T.Type__VPB:name;
-const unique T.Size__VPB:name;
-const unique T.Flags__VPB:name;
-const unique T.VolumeLabelLength__VPB:name;
-const unique T.DeviceObject__VPB:name;
-const unique T.RealDevice__VPB:name;
-const unique T.SerialNumber__VPB:name;
-const unique T.ReferenceCount__VPB:name;
-const unique T.VolumeLabel__VPB:name;
-const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
-const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
-const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
-const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
-const unique T.GuidCount__WMILIB_CONTEXT:name;
-const unique T.GuidList__WMILIB_CONTEXT:name;
-const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
-const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
-const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
-const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
-const unique T.Reserved___unnamed_12_0d6a30de:name;
-const unique T.MessageCount___unnamed_12_0d6a30de:name;
-const unique T.Vector___unnamed_12_0d6a30de:name;
-const unique T.Affinity___unnamed_12_0d6a30de:name;
-const unique T.Start___unnamed_12_17f5c211:name;
-const unique T.Length48___unnamed_12_17f5c211:name;
-const unique T.Start___unnamed_12_1fb42e39:name;
-const unique T.Length___unnamed_12_1fb42e39:name;
-const unique T.Reserved___unnamed_12_1fb42e39:name;
-const unique T.Start___unnamed_12_2a1563c6:name;
-const unique T.Length___unnamed_12_2a1563c6:name;
-const unique T.DataSize___unnamed_12_31347272:name;
-const unique T.Reserved1___unnamed_12_31347272:name;
-const unique T.Reserved2___unnamed_12_31347272:name;
-const unique T.Raw___unnamed_12_429aadc0:name;
-const unique T.Translated___unnamed_12_429aadc0:name;
-const unique T.Start___unnamed_12_4719de1a:name;
-const unique T.Length___unnamed_12_4719de1a:name;
-const unique T.Data___unnamed_12_4be56faa:name;
-const unique T.Data___unnamed_12_5ce25b92:name;
-const unique T.Generic___unnamed_12_7a698b72:name;
-const unique T.Port___unnamed_12_7a698b72:name;
-const unique T.Interrupt___unnamed_12_7a698b72:name;
-const unique T.MessageInterrupt___unnamed_12_7a698b72:name;
-const unique T.Memory___unnamed_12_7a698b72:name;
-const unique T.Dma___unnamed_12_7a698b72:name;
-const unique T.DevicePrivate___unnamed_12_7a698b72:name;
-const unique T.BusNumber___unnamed_12_7a698b72:name;
-const unique T.DeviceSpecificData___unnamed_12_7a698b72:name;
-const unique T.Memory40___unnamed_12_7a698b72:name;
-const unique T.Memory48___unnamed_12_7a698b72:name;
-const unique T.Memory64___unnamed_12_7a698b72:name;
-const unique T.Start___unnamed_12_87c0de8d:name;
-const unique T.Length64___unnamed_12_87c0de8d:name;
-const unique T.Start___unnamed_12_98bfc55a:name;
-const unique T.Length40___unnamed_12_98bfc55a:name;
-const unique T.Priority___unnamed_12_ab1bd9d7:name;
-const unique T.Reserved1___unnamed_12_ab1bd9d7:name;
-const unique T.Reserved2___unnamed_12_ab1bd9d7:name;
-const unique T.Level___unnamed_12_b0429be9:name;
-const unique T.Vector___unnamed_12_b0429be9:name;
-const unique T.Affinity___unnamed_12_b0429be9:name;
-const unique T.ListEntry___unnamed_12_b43e8de8:name;
-const unique T.__unnamed_4_f19b65c1___unnamed_12_b43e8de8:name;
-const unique T.Level___unnamed_12_bfdb39ee:name;
-const unique T.Vector___unnamed_12_bfdb39ee:name;
-const unique T.Affinity___unnamed_12_bfdb39ee:name;
-const unique T.Start___unnamed_12_cd42b3c3:name;
-const unique T.Length___unnamed_12_cd42b3c3:name;
-const unique T.__unnamed_12_429aadc0___unnamed_12_e668effc:name;
-const unique T.Channel___unnamed_12_e80d029e:name;
-const unique T.Port___unnamed_12_e80d029e:name;
-const unique T.Reserved1___unnamed_12_e80d029e:name;
-const unique T.Length___unnamed_16_07c0bcc5:name;
-const unique T.MinBusNumber___unnamed_16_07c0bcc5:name;
-const unique T.MaxBusNumber___unnamed_16_07c0bcc5:name;
-const unique T.Reserved___unnamed_16_07c0bcc5:name;
-const unique T.InterfaceType___unnamed_16_29cb9f2f:name;
-const unique T.Size___unnamed_16_29cb9f2f:name;
-const unique T.Version___unnamed_16_29cb9f2f:name;
-const unique T.Interface___unnamed_16_29cb9f2f:name;
-const unique T.InterfaceSpecificData___unnamed_16_29cb9f2f:name;
-const unique T.SecurityContext___unnamed_16_30f11dbf:name;
-const unique T.Options___unnamed_16_30f11dbf:name;
-const unique T.FileAttributes___unnamed_16_30f11dbf:name;
-const unique T.ShareAccess___unnamed_16_30f11dbf:name;
-const unique T.EaLength___unnamed_16_30f11dbf:name;
-const unique T.DriverContext___unnamed_16_35034f68:name;
-const unique T.Length___unnamed_16_487a9498:name;
-const unique T.FileName___unnamed_16_487a9498:name;
-const unique T.FileInformationClass___unnamed_16_487a9498:name;
-const unique T.FileIndex___unnamed_16_487a9498:name;
-const unique T.OutputBufferLength___unnamed_16_5f6a8844:name;
-const unique T.InputBufferLength___unnamed_16_5f6a8844:name;
-const unique T.FsControlCode___unnamed_16_5f6a8844:name;
-const unique T.Type3InputBuffer___unnamed_16_5f6a8844:name;
-const unique T.Length___unnamed_16_7177b9f3:name;
-const unique T.FileInformationClass___unnamed_16_7177b9f3:name;
-const unique T.FileObject___unnamed_16_7177b9f3:name;
-const unique T.__unnamed_4_43913aa5___unnamed_16_7177b9f3:name;
-const unique T.Length___unnamed_16_88e91ef6:name;
-const unique T.Key___unnamed_16_88e91ef6:name;
-const unique T.ByteOffset___unnamed_16_88e91ef6:name;
-const unique T.Length___unnamed_16_8c506c98:name;
-const unique T.Key___unnamed_16_8c506c98:name;
-const unique T.ByteOffset___unnamed_16_8c506c98:name;
-const unique T.WhichSpace___unnamed_16_9ac2e5f8:name;
-const unique T.Buffer___unnamed_16_9ac2e5f8:name;
-const unique T.Offset___unnamed_16_9ac2e5f8:name;
-const unique T.Length___unnamed_16_9ac2e5f8:name;
-const unique T.Create___unnamed_16_b93842ad:name;
-const unique T.Read___unnamed_16_b93842ad:name;
-const unique T.Write___unnamed_16_b93842ad:name;
-const unique T.QueryDirectory___unnamed_16_b93842ad:name;
-const unique T.NotifyDirectory___unnamed_16_b93842ad:name;
-const unique T.QueryFile___unnamed_16_b93842ad:name;
-const unique T.SetFile___unnamed_16_b93842ad:name;
-const unique T.QueryEa___unnamed_16_b93842ad:name;
-const unique T.SetEa___unnamed_16_b93842ad:name;
-const unique T.QueryVolume___unnamed_16_b93842ad:name;
-const unique T.SetVolume___unnamed_16_b93842ad:name;
-const unique T.FileSystemControl___unnamed_16_b93842ad:name;
-const unique T.LockControl___unnamed_16_b93842ad:name;
-const unique T.DeviceIoControl___unnamed_16_b93842ad:name;
-const unique T.QuerySecurity___unnamed_16_b93842ad:name;
-const unique T.SetSecurity___unnamed_16_b93842ad:name;
-const unique T.MountVolume___unnamed_16_b93842ad:name;
-const unique T.VerifyVolume___unnamed_16_b93842ad:name;
-const unique T.Scsi___unnamed_16_b93842ad:name;
-const unique T.QueryQuota___unnamed_16_b93842ad:name;
-const unique T.SetQuota___unnamed_16_b93842ad:name;
-const unique T.QueryDeviceRelations___unnamed_16_b93842ad:name;
-const unique T.QueryInterface___unnamed_16_b93842ad:name;
-const unique T.DeviceCapabilities___unnamed_16_b93842ad:name;
-const unique T.FilterResourceRequirements___unnamed_16_b93842ad:name;
-const unique T.ReadWriteConfig___unnamed_16_b93842ad:name;
-const unique T.SetLock___unnamed_16_b93842ad:name;
-const unique T.QueryId___unnamed_16_b93842ad:name;
-const unique T.QueryDeviceText___unnamed_16_b93842ad:name;
-const unique T.UsageNotification___unnamed_16_b93842ad:name;
-const unique T.WaitWake___unnamed_16_b93842ad:name;
-const unique T.PowerSequence___unnamed_16_b93842ad:name;
-const unique T.Power___unnamed_16_b93842ad:name;
-const unique T.StartDevice___unnamed_16_b93842ad:name;
-const unique T.WMI___unnamed_16_b93842ad:name;
-const unique T.Others___unnamed_16_b93842ad:name;
-const unique T.Length___unnamed_16_b9c62eab:name;
-const unique T.Key___unnamed_16_b9c62eab:name;
-const unique T.ByteOffset___unnamed_16_b9c62eab:name;
-const unique T.__unnamed_4_7d9d0c7e___unnamed_16_bb584060:name;
-const unique T.Type___unnamed_16_bb584060:name;
-const unique T.State___unnamed_16_bb584060:name;
-const unique T.ShutdownType___unnamed_16_bb584060:name;
-const unique T.OutputBufferLength___unnamed_16_dba55c7c:name;
-const unique T.InputBufferLength___unnamed_16_dba55c7c:name;
-const unique T.IoControlCode___unnamed_16_dba55c7c:name;
-const unique T.Type3InputBuffer___unnamed_16_dba55c7c:name;
-const unique T.DeviceQueueEntry___unnamed_16_e70c268b:name;
-const unique T.__unnamed_16_35034f68___unnamed_16_e70c268b:name;
-const unique T.Argument1___unnamed_16_e734d694:name;
-const unique T.Argument2___unnamed_16_e734d694:name;
-const unique T.Argument3___unnamed_16_e734d694:name;
-const unique T.Argument4___unnamed_16_e734d694:name;
-const unique T.ProviderId___unnamed_16_eac6dbea:name;
-const unique T.DataPath___unnamed_16_eac6dbea:name;
-const unique T.BufferSize___unnamed_16_eac6dbea:name;
-const unique T.Buffer___unnamed_16_eac6dbea:name;
-const unique T.Length___unnamed_16_f6cae4c2:name;
-const unique T.EaList___unnamed_16_f6cae4c2:name;
-const unique T.EaListLength___unnamed_16_f6cae4c2:name;
-const unique T.EaIndex___unnamed_16_f6cae4c2:name;
-const unique T.Length___unnamed_16_fe36e4f4:name;
-const unique T.StartSid___unnamed_16_fe36e4f4:name;
-const unique T.SidList___unnamed_16_fe36e4f4:name;
-const unique T.SidListLength___unnamed_16_fe36e4f4:name;
-const unique T.Abandoned___unnamed_1_29794256:name;
-const unique T.Absolute___unnamed_1_29794256:name;
-const unique T.NpxIrql___unnamed_1_29794256:name;
-const unique T.Signalling___unnamed_1_29794256:name;
-const unique T.Inserted___unnamed_1_2dc63b48:name;
-const unique T.DebugActive___unnamed_1_2dc63b48:name;
-const unique T.DpcActive___unnamed_1_2dc63b48:name;
-const unique T.Size___unnamed_1_2ef8da39:name;
-const unique T.Hand___unnamed_1_2ef8da39:name;
-const unique T.Lock___unnamed_1_faa7dc71:name;
-const unique T.MinimumVector___unnamed_20_f4d2e6d8:name;
-const unique T.MaximumVector___unnamed_20_f4d2e6d8:name;
-const unique T.AffinityPolicy___unnamed_20_f4d2e6d8:name;
-const unique T.PriorityPolicy___unnamed_20_f4d2e6d8:name;
-const unique T.TargetedProcessors___unnamed_20_f4d2e6d8:name;
-const unique T.Length___unnamed_24_41cbc8c0:name;
-const unique T.Alignment___unnamed_24_41cbc8c0:name;
-const unique T.MinimumAddress___unnamed_24_41cbc8c0:name;
-const unique T.MaximumAddress___unnamed_24_41cbc8c0:name;
-const unique T.Length48___unnamed_24_5419c914:name;
-const unique T.Alignment48___unnamed_24_5419c914:name;
-const unique T.MinimumAddress___unnamed_24_5419c914:name;
-const unique T.MaximumAddress___unnamed_24_5419c914:name;
-const unique T.Length___unnamed_24_67a5ff10:name;
-const unique T.Alignment___unnamed_24_67a5ff10:name;
-const unique T.MinimumAddress___unnamed_24_67a5ff10:name;
-const unique T.MaximumAddress___unnamed_24_67a5ff10:name;
-const unique T.Port___unnamed_24_72c3976e:name;
-const unique T.Memory___unnamed_24_72c3976e:name;
-const unique T.Interrupt___unnamed_24_72c3976e:name;
-const unique T.Dma___unnamed_24_72c3976e:name;
-const unique T.Generic___unnamed_24_72c3976e:name;
-const unique T.DevicePrivate___unnamed_24_72c3976e:name;
-const unique T.BusNumber___unnamed_24_72c3976e:name;
-const unique T.ConfigData___unnamed_24_72c3976e:name;
-const unique T.Memory40___unnamed_24_72c3976e:name;
-const unique T.Memory48___unnamed_24_72c3976e:name;
-const unique T.Memory64___unnamed_24_72c3976e:name;
-const unique T.Length64___unnamed_24_a26050bb:name;
-const unique T.Alignment64___unnamed_24_a26050bb:name;
-const unique T.MinimumAddress___unnamed_24_a26050bb:name;
-const unique T.MaximumAddress___unnamed_24_a26050bb:name;
-const unique T.Length___unnamed_24_b8f476db:name;
-const unique T.Alignment___unnamed_24_b8f476db:name;
-const unique T.MinimumAddress___unnamed_24_b8f476db:name;
-const unique T.MaximumAddress___unnamed_24_b8f476db:name;
-const unique T.Length40___unnamed_24_d09044b4:name;
-const unique T.Alignment40___unnamed_24_d09044b4:name;
-const unique T.MinimumAddress___unnamed_24_d09044b4:name;
-const unique T.MaximumAddress___unnamed_24_d09044b4:name;
-const unique T.ReplaceIfExists___unnamed_2_46cc4597:name;
-const unique T.AdvanceOnly___unnamed_2_46cc4597:name;
-const unique T.__unnamed_16_e70c268b___unnamed_40_7218f704:name;
-const unique T.Thread___unnamed_40_7218f704:name;
-const unique T.AuxiliaryBuffer___unnamed_40_7218f704:name;
-const unique T.__unnamed_12_b43e8de8___unnamed_40_7218f704:name;
-const unique T.OriginalFileObject___unnamed_40_7218f704:name;
-const unique T.ListEntry___unnamed_40_c55c9377:name;
-const unique T.Wcb___unnamed_40_c55c9377:name;
-const unique T.InitialPrivilegeSet___unnamed_44_5584090d:name;
-const unique T.PrivilegeSet___unnamed_44_5584090d:name;
-const unique T.Overlay___unnamed_48_cf99b13f:name;
-const unique T.Apc___unnamed_48_cf99b13f:name;
-const unique T.CompletionKey___unnamed_48_cf99b13f:name;
-const unique T.PowerState___unnamed_4_069846fb:name;
-const unique T.IdType___unnamed_4_224c32f4:name;
-const unique T.Capabilities___unnamed_4_2de698da:name;
-const unique T.__unnamed_4_c3479730___unnamed_4_3a2fdc5e:name;
-const unique T.ContextAsUlong___unnamed_4_3a2fdc5e:name;
-const unique T.Length___unnamed_4_3a4c1a13:name;
-const unique T.__unnamed_2_46cc4597___unnamed_4_43913aa5:name;
-const unique T.ClusterCount___unnamed_4_43913aa5:name;
-const unique T.DeleteHandle___unnamed_4_43913aa5:name;
-const unique T.UserApcRoutine___unnamed_4_4e8dd2ba:name;
-const unique T.IssuingProcess___unnamed_4_4e8dd2ba:name;
-const unique T.Srb___unnamed_4_52603077:name;
-const unique T.Address___unnamed_4_52c594f7:name;
-const unique T.CreatorBackTraceIndex___unnamed_4_52c594f7:name;
-const unique T.Type___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_29794256___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_2ef8da39___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_2dc63b48___unnamed_4_5ca00198:name;
-const unique T.MasterIrp___unnamed_4_6ac6463c:name;
-const unique T.IrpCount___unnamed_4_6ac6463c:name;
-const unique T.SystemBuffer___unnamed_4_6ac6463c:name;
-const unique T.OwnerCount___unnamed_4_6f9ac8e1:name;
-const unique T.TableSize___unnamed_4_6f9ac8e1:name;
-const unique T.PowerSequence___unnamed_4_7a02167b:name;
-const unique T.SystemContext___unnamed_4_7d9d0c7e:name;
-const unique T.SystemPowerStateContext___unnamed_4_7d9d0c7e:name;
-const unique T.IoResourceRequirementList___unnamed_4_82f7a864:name;
-const unique T.Length___unnamed_4_9aec220b:name;
-const unique T.__unnamed_4_5ca00198___unnamed_4_a97c65a1:name;
-const unique T.Lock___unnamed_4_a97c65a1:name;
-const unique T.Reserved1___unnamed_4_c3479730:name;
-const unique T.TargetSystemState___unnamed_4_c3479730:name;
-const unique T.EffectiveSystemState___unnamed_4_c3479730:name;
-const unique T.CurrentSystemState___unnamed_4_c3479730:name;
-const unique T.IgnoreHibernationPath___unnamed_4_c3479730:name;
-const unique T.PseudoTransition___unnamed_4_c3479730:name;
-const unique T.Reserved2___unnamed_4_c3479730:name;
-const unique T.Status___unnamed_4_d99b6e2b:name;
-const unique T.Pointer___unnamed_4_d99b6e2b:name;
-const unique T.CurrentStackLocation___unnamed_4_f19b65c1:name;
-const unique T.PacketType___unnamed_4_f19b65c1:name;
-const unique T.Type___unnamed_4_fa10fc16:name;
-const unique T.SecurityInformation___unnamed_8_01efa60d:name;
-const unique T.Length___unnamed_8_01efa60d:name;
-const unique T.MinimumChannel___unnamed_8_08d4cef8:name;
-const unique T.MaximumChannel___unnamed_8_08d4cef8:name;
-const unique T.__unnamed_4_4e8dd2ba___unnamed_8_0a898c0c:name;
-const unique T.UserApcContext___unnamed_8_0a898c0c:name;
-const unique T.SecurityInformation___unnamed_8_1330f93a:name;
-const unique T.SecurityDescriptor___unnamed_8_1330f93a:name;
-const unique T.AsynchronousParameters___unnamed_8_181d0de9:name;
-const unique T.AllocationSize___unnamed_8_181d0de9:name;
-const unique T.Vpb___unnamed_8_4812764d:name;
-const unique T.DeviceObject___unnamed_8_4812764d:name;
-const unique T.Length___unnamed_8_559a91e6:name;
-const unique T.FsInformationClass___unnamed_8_559a91e6:name;
-const unique T.Length___unnamed_8_5845b309:name;
-const unique T.FileInformationClass___unnamed_8_5845b309:name;
-const unique T.LowPart___unnamed_8_58ee4a31:name;
-const unique T.HighPart___unnamed_8_58ee4a31:name;
-const unique T.AllocatedResources___unnamed_8_61acf4ce:name;
-const unique T.AllocatedResourcesTranslated___unnamed_8_61acf4ce:name;
-const unique T.DeviceTextType___unnamed_8_6acfee04:name;
-const unique T.LocaleId___unnamed_8_6acfee04:name;
-const unique T.Length___unnamed_8_7f26a9dd:name;
-const unique T.CompletionFilter___unnamed_8_7f26a9dd:name;
-const unique T.Vpb___unnamed_8_87add0bd:name;
-const unique T.DeviceObject___unnamed_8_87add0bd:name;
-const unique T.InPath___unnamed_8_b2773e4c:name;
-const unique T.Reserved___unnamed_8_b2773e4c:name;
-const unique T.Type___unnamed_8_b2773e4c:name;
-const unique T.Length___unnamed_8_de890d4e:name;
-const unique T.FsInformationClass___unnamed_8_de890d4e:name;
-const unique T.LowPart___unnamed_8_ef9ba0d3:name;
-const unique T.HighPart___unnamed_8_ef9ba0d3:name;
-
-// Type declarations
-
-const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_LIST:name;
-const unique T.A1_LUID_AND_ATTRIBUTES:name;
-const unique T.A256UINT2:name;
-const unique T.A28PFDRIVER_DISPATCH:name;
-const unique T.A2UCHAR:name;
-const unique T.A2UINT2:name;
-const unique T.A32UINT2:name;
-const unique T.A3UCHAR:name;
-const unique T.A3UINT4:name;
-const unique T.A3_LUID_AND_ATTRIBUTES:name;
-const unique T.A4PVOID:name;
-const unique T.A4UINT4:name;
-const unique T.A5UINT2:name;
-const unique T.A5_DEVICE_POWER_STATE:name;
-const unique T.A7_DEVICE_POWER_STATE:name;
-const unique T.A88CHAR:name;
-const unique T.A8UCHAR:name;
-const unique T.A9UINT2:name;
-const unique T.BUS_QUERY_ID_TYPE:name;
-const unique T.CHAR:name;
-const unique T.DEVICE_TEXT_TYPE:name;
-const unique T.F0:name;
-const unique T.F1:name;
-const unique T.F10:name;
-const unique T.F11:name;
-const unique T.F12:name;
-const unique T.F13:name;
-const unique T.F14:name;
-const unique T.F15:name;
-const unique T.F16:name;
-const unique T.F17:name;
-const unique T.F18:name;
-const unique T.F19:name;
-const unique T.F2:name;
-const unique T.F20:name;
-const unique T.F21:name;
-const unique T.F22:name;
-const unique T.F23:name;
-const unique T.F24:name;
-const unique T.F25:name;
-const unique T.F26:name;
-const unique T.F27:name;
-const unique T.F28:name;
-const unique T.F29:name;
-const unique T.F3:name;
-const unique T.F30:name;
-const unique T.F31:name;
-const unique T.F32:name;
-const unique T.F33:name;
-const unique T.F34:name;
-const unique T.F35:name;
-const unique T.F36:name;
-const unique T.F37:name;
-const unique T.F38:name;
-const unique T.F4:name;
-const unique T.F5:name;
-const unique T.F6:name;
-const unique T.F7:name;
-const unique T.F8:name;
-const unique T.F9:name;
-const unique T.FDRIVER_ADD_DEVICE:name;
-const unique T.FDRIVER_CANCEL:name;
-const unique T.FDRIVER_CONTROL:name;
-const unique T.FDRIVER_DISPATCH:name;
-const unique T.FDRIVER_INITIALIZE:name;
-const unique T.FDRIVER_STARTIO:name;
-const unique T.FDRIVER_UNLOAD:name;
-const unique T.FFAST_IO_ACQUIRE_FILE:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.FFAST_IO_DETACH_DEVICE:name;
-const unique T.FFAST_IO_DEVICE_CONTROL:name;
-const unique T.FFAST_IO_LOCK:name;
-const unique T.FFAST_IO_MDL_READ:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.FFAST_IO_QUERY_OPEN:name;
-const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.FFAST_IO_READ:name;
-const unique T.FFAST_IO_READ_COMPRESSED:name;
-const unique T.FFAST_IO_RELEASE_FILE:name;
-const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_UNLOCK_ALL:name;
-const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.FFAST_IO_UNLOCK_SINGLE:name;
-const unique T.FFAST_IO_WRITE:name;
-const unique T.FFAST_IO_WRITE_COMPRESSED:name;
-const unique T.FIO_COMPLETION_ROUTINE:name;
-const unique T.FKDEFERRED_ROUTINE:name;
-const unique T.INT2:name;
-const unique T.INT4:name;
-const unique T.INT8:name;
-const unique T.PA256UINT2:name;
-const unique T.PA2UINT2:name;
-const unique T.PA4UINT4:name;
-const unique T.PA5UINT2:name;
-const unique T.PA88CHAR:name;
-const unique T.PA9UINT2:name;
-const unique T.PCHAR:name;
-const unique T.PF19:name;
-const unique T.PF21:name;
-const unique T.PF23:name;
-const unique T.PF24:name;
-const unique T.PF25:name;
-const unique T.PF33:name;
-const unique T.PF34:name;
-const unique T.PF35:name;
-const unique T.PF36:name;
-const unique T.PF37:name;
-const unique T.PF38:name;
-const unique T.PFDRIVER_ADD_DEVICE:name;
-const unique T.PFDRIVER_CANCEL:name;
-const unique T.PFDRIVER_CONTROL:name;
-const unique T.PFDRIVER_DISPATCH:name;
-const unique T.PFDRIVER_INITIALIZE:name;
-const unique T.PFDRIVER_STARTIO:name;
-const unique T.PFDRIVER_UNLOAD:name;
-const unique T.PFFAST_IO_ACQUIRE_FILE:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.PFFAST_IO_DETACH_DEVICE:name;
-const unique T.PFFAST_IO_DEVICE_CONTROL:name;
-const unique T.PFFAST_IO_LOCK:name;
-const unique T.PFFAST_IO_MDL_READ:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.PFFAST_IO_QUERY_OPEN:name;
-const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.PFFAST_IO_READ:name;
-const unique T.PFFAST_IO_READ_COMPRESSED:name;
-const unique T.PFFAST_IO_RELEASE_FILE:name;
-const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_UNLOCK_ALL:name;
-const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
-const unique T.PFFAST_IO_WRITE:name;
-const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
-const unique T.PFIO_COMPLETION_ROUTINE:name;
-const unique T.PFKDEFERRED_ROUTINE:name;
-const unique T.PINT4:name;
-const unique T.POWER_ACTION:name;
-const unique T.PPCHAR:name;
-const unique T.PPF24:name;
-const unique T.PPPUINT2:name;
-const unique T.PPP_DEVICE_OBJECT:name;
-const unique T.PPP_FILE_OBJECT:name;
-const unique T.PPUINT2:name;
-const unique T.PPUINT4:name;
-const unique T.PPVOID:name;
-const unique T.PP_DEVICE_EXTENSION:name;
-const unique T.PP_DEVICE_OBJECT:name;
-const unique T.PP_DRIVER_OBJECT:name;
-const unique T.PP_ERESOURCE:name;
-const unique T.PP_FAST_MUTEX:name;
-const unique T.PP_FILE_OBJECT:name;
-const unique T.PP_LIST_ENTRY:name;
-const unique T.PP_MDL:name;
-const unique T.PP_PORT:name;
-const unique T.PP_UNICODE_STRING:name;
-const unique T.PUCHAR:name;
-const unique T.PUINT2:name;
-const unique T.PUINT4:name;
-const unique T.PVOID:name;
-const unique T.PWMIGUIDREGINFO:name;
-const unique T.P_ACCESS_STATE:name;
-const unique T.P_CM_RESOURCE_LIST:name;
-const unique T.P_COMPRESSED_DATA_INFO:name;
-const unique T.P_DEVICE_CAPABILITIES:name;
-const unique T.P_DEVICE_EXTENSION:name;
-const unique T.P_DEVICE_OBJECT:name;
-const unique T.P_DEVOBJ_EXTENSION:name;
-const unique T.P_DRIVER_EXTENSION:name;
-const unique T.P_DRIVER_OBJECT:name;
-const unique T.P_EPROCESS:name;
-const unique T.P_ERESOURCE:name;
-const unique T.P_ETHREAD:name;
-const unique T.P_FAST_IO_DISPATCH:name;
-const unique T.P_FAST_MUTEX:name;
-const unique T.P_FILE_BASIC_INFORMATION:name;
-const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
-const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.P_FILE_OBJECT:name;
-const unique T.P_FILE_STANDARD_INFORMATION:name;
-const unique T.P_GLOBALS:name;
-const unique T.P_GUID:name;
-const unique T.P_INTERFACE:name;
-const unique T.P_IO_COMPLETION_CONTEXT:name;
-const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.P_IO_SECURITY_CONTEXT:name;
-const unique T.P_IO_STACK_LOCATION:name;
-const unique T.P_IO_STATUS_BLOCK:name;
-const unique T.P_IO_TIMER:name;
-const unique T.P_IRP:name;
-const unique T.P_KAPC:name;
-const unique T.P_KDPC:name;
-const unique T.P_KEVENT:name;
-const unique T.P_KEYBOARD_INPUT_DATA:name;
-const unique T.P_KSEMAPHORE:name;
-const unique T.P_KTHREAD:name;
-const unique T.P_LARGE_INTEGER:name;
-const unique T.P_LIST_ENTRY:name;
-const unique T.P_MDL:name;
-const unique T.P_OWNER_ENTRY:name;
-const unique T.P_POOL_TYPE:name;
-const unique T.P_PORT:name;
-const unique T.P_POWER_SEQUENCE:name;
-const unique T.P_SCSI_REQUEST_BLOCK:name;
-const unique T.P_SECTION_OBJECT_POINTERS:name;
-const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.P_UNICODE_STRING:name;
-const unique T.P_VPB:name;
-const unique T.UCHAR:name;
-const unique T.UINT2:name;
-const unique T.UINT4:name;
-const unique T.VOID:name;
-const unique T.WMIENABLEDISABLECONTROL:name;
-const unique T.WMIGUIDREGINFO:name;
-const unique T._ACCESS_STATE:name;
-const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_LIST:name;
-const unique T._CM_RESOURCE_LIST:name;
-const unique T._COMPRESSED_DATA_INFO:name;
-const unique T._DEVICE_CAPABILITIES:name;
-const unique T._DEVICE_EXTENSION:name;
-const unique T._DEVICE_OBJECT:name;
-const unique T._DEVICE_POWER_STATE:name;
-const unique T._DEVICE_RELATION_TYPE:name;
-const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
-const unique T._DEVOBJ_EXTENSION:name;
-const unique T._DISPATCHER_HEADER:name;
-const unique T._DRIVER_EXTENSION:name;
-const unique T._DRIVER_OBJECT:name;
-const unique T._EPROCESS:name;
-const unique T._ERESOURCE:name;
-const unique T._ETHREAD:name;
-const unique T._FAST_IO_DISPATCH:name;
-const unique T._FAST_MUTEX:name;
-const unique T._FILE_BASIC_INFORMATION:name;
-const unique T._FILE_GET_QUOTA_INFORMATION:name;
-const unique T._FILE_INFORMATION_CLASS:name;
-const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T._FILE_OBJECT:name;
-const unique T._FILE_STANDARD_INFORMATION:name;
-const unique T._FSINFOCLASS:name;
-const unique T._GLOBALS:name;
-const unique T._GUID:name;
-const unique T._INITIAL_PRIVILEGE_SET:name;
-const unique T._INTERFACE:name;
-const unique T._INTERFACE_TYPE:name;
-const unique T._IO_ALLOCATION_ACTION:name;
-const unique T._IO_COMPLETION_CONTEXT:name;
-const unique T._IO_REMOVE_LOCK:name;
-const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T._IO_RESOURCE_DESCRIPTOR:name;
-const unique T._IO_RESOURCE_LIST:name;
-const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T._IO_SECURITY_CONTEXT:name;
-const unique T._IO_STACK_LOCATION:name;
-const unique T._IO_STATUS_BLOCK:name;
-const unique T._IO_TIMER:name;
-const unique T._IRP:name;
-const unique T._IRQ_DEVICE_POLICY:name;
-const unique T._IRQ_PRIORITY:name;
-const unique T._KAPC:name;
-const unique T._KDEVICE_QUEUE:name;
-const unique T._KDEVICE_QUEUE_ENTRY:name;
-const unique T._KDPC:name;
-const unique T._KEVENT:name;
-const unique T._KEYBOARD_ATTRIBUTES:name;
-const unique T._KEYBOARD_ID:name;
-const unique T._KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T._KEYBOARD_INPUT_DATA:name;
-const unique T._KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T._KSEMAPHORE:name;
-const unique T._KTHREAD:name;
-const unique T._LARGE_INTEGER:name;
-const unique T._LIST_ENTRY:name;
-const unique T._LUID:name;
-const unique T._LUID_AND_ATTRIBUTES:name;
-const unique T._MDL:name;
-const unique T._OWNER_ENTRY:name;
-const unique T._POOL_TYPE:name;
-const unique T._PORT:name;
-const unique T._POWER_SEQUENCE:name;
-const unique T._POWER_STATE:name;
-const unique T._POWER_STATE_TYPE:name;
-const unique T._PRIVILEGE_SET:name;
-const unique T._SCSI_REQUEST_BLOCK:name;
-const unique T._SECTION_OBJECT_POINTERS:name;
-const unique T._SECURITY_IMPERSONATION_LEVEL:name;
-const unique T._SECURITY_QUALITY_OF_SERVICE:name;
-const unique T._SECURITY_SUBJECT_CONTEXT:name;
-const unique T._SYSTEM_POWER_STATE:name;
-const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T._UNICODE_STRING:name;
-const unique T._VPB:name;
-const unique T._WAIT_CONTEXT_BLOCK:name;
-const unique T._WMILIB_CONTEXT:name;
-const unique T.__unnamed_12_0d6a30de:name;
-const unique T.__unnamed_12_17f5c211:name;
-const unique T.__unnamed_12_1fb42e39:name;
-const unique T.__unnamed_12_2a1563c6:name;
-const unique T.__unnamed_12_31347272:name;
-const unique T.__unnamed_12_429aadc0:name;
-const unique T.__unnamed_12_4719de1a:name;
-const unique T.__unnamed_12_4be56faa:name;
-const unique T.__unnamed_12_5ce25b92:name;
-const unique T.__unnamed_12_7a698b72:name;
-const unique T.__unnamed_12_87c0de8d:name;
-const unique T.__unnamed_12_98bfc55a:name;
-const unique T.__unnamed_12_ab1bd9d7:name;
-const unique T.__unnamed_12_b0429be9:name;
-const unique T.__unnamed_12_b43e8de8:name;
-const unique T.__unnamed_12_bfdb39ee:name;
-const unique T.__unnamed_12_cd42b3c3:name;
-const unique T.__unnamed_12_e668effc:name;
-const unique T.__unnamed_12_e80d029e:name;
-const unique T.__unnamed_16_07c0bcc5:name;
-const unique T.__unnamed_16_29cb9f2f:name;
-const unique T.__unnamed_16_30f11dbf:name;
-const unique T.__unnamed_16_35034f68:name;
-const unique T.__unnamed_16_487a9498:name;
-const unique T.__unnamed_16_5f6a8844:name;
-const unique T.__unnamed_16_7177b9f3:name;
-const unique T.__unnamed_16_88e91ef6:name;
-const unique T.__unnamed_16_8c506c98:name;
-const unique T.__unnamed_16_9ac2e5f8:name;
-const unique T.__unnamed_16_b93842ad:name;
-const unique T.__unnamed_16_b9c62eab:name;
-const unique T.__unnamed_16_bb584060:name;
-const unique T.__unnamed_16_dba55c7c:name;
-const unique T.__unnamed_16_e70c268b:name;
-const unique T.__unnamed_16_e734d694:name;
-const unique T.__unnamed_16_eac6dbea:name;
-const unique T.__unnamed_16_f6cae4c2:name;
-const unique T.__unnamed_16_fe36e4f4:name;
-const unique T.__unnamed_1_29794256:name;
-const unique T.__unnamed_1_2dc63b48:name;
-const unique T.__unnamed_1_2ef8da39:name;
-const unique T.__unnamed_1_faa7dc71:name;
-const unique T.__unnamed_20_f4d2e6d8:name;
-const unique T.__unnamed_24_41cbc8c0:name;
-const unique T.__unnamed_24_5419c914:name;
-const unique T.__unnamed_24_67a5ff10:name;
-const unique T.__unnamed_24_72c3976e:name;
-const unique T.__unnamed_24_a26050bb:name;
-const unique T.__unnamed_24_b8f476db:name;
-const unique T.__unnamed_24_d09044b4:name;
-const unique T.__unnamed_2_46cc4597:name;
-const unique T.__unnamed_40_7218f704:name;
-const unique T.__unnamed_40_c55c9377:name;
-const unique T.__unnamed_44_5584090d:name;
-const unique T.__unnamed_48_cf99b13f:name;
-const unique T.__unnamed_4_069846fb:name;
-const unique T.__unnamed_4_224c32f4:name;
-const unique T.__unnamed_4_2de698da:name;
-const unique T.__unnamed_4_3a2fdc5e:name;
-const unique T.__unnamed_4_3a4c1a13:name;
-const unique T.__unnamed_4_43913aa5:name;
-const unique T.__unnamed_4_4e8dd2ba:name;
-const unique T.__unnamed_4_52603077:name;
-const unique T.__unnamed_4_52c594f7:name;
-const unique T.__unnamed_4_5ca00198:name;
-const unique T.__unnamed_4_6ac6463c:name;
-const unique T.__unnamed_4_6f9ac8e1:name;
-const unique T.__unnamed_4_7a02167b:name;
-const unique T.__unnamed_4_7d9d0c7e:name;
-const unique T.__unnamed_4_82f7a864:name;
-const unique T.__unnamed_4_9aec220b:name;
-const unique T.__unnamed_4_a97c65a1:name;
-const unique T.__unnamed_4_c3479730:name;
-const unique T.__unnamed_4_d99b6e2b:name;
-const unique T.__unnamed_4_f19b65c1:name;
-const unique T.__unnamed_4_fa10fc16:name;
-const unique T.__unnamed_8_01efa60d:name;
-const unique T.__unnamed_8_08d4cef8:name;
-const unique T.__unnamed_8_0a898c0c:name;
-const unique T.__unnamed_8_1330f93a:name;
-const unique T.__unnamed_8_181d0de9:name;
-const unique T.__unnamed_8_4812764d:name;
-const unique T.__unnamed_8_559a91e6:name;
-const unique T.__unnamed_8_5845b309:name;
-const unique T.__unnamed_8_58ee4a31:name;
-const unique T.__unnamed_8_61acf4ce:name;
-const unique T.__unnamed_8_6acfee04:name;
-const unique T.__unnamed_8_7f26a9dd:name;
-const unique T.__unnamed_8_87add0bd:name;
-const unique T.__unnamed_8_b2773e4c:name;
-const unique T.__unnamed_8_de890d4e:name;
-const unique T.__unnamed_8_ef9ba0d3:name;
-
-function AssocClassList__GLOBALS(int) returns (int);
-function AssocClassList__GLOBALSInv(int) returns (int);
-function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
-function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
-function BaseClassName__GLOBALS(int) returns (int);
-function BaseClassName__GLOBALSInv(int) returns (int);
-function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
-function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 368);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 368);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1) == BaseClassName__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 368)} MINUS_LEFT_PTR(x, 1, 368) == BaseClassName__GLOBALSInv(x));
-function Buffer__UNICODE_STRING(int) returns (int);
-function Buffer__UNICODE_STRINGInv(int) returns (int);
-function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
-function DataIn__DEVICE_EXTENSION(int) returns (int);
-function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
-function DataOut__DEVICE_EXTENSION(int) returns (int);
-function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
-function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
-function File__DEVICE_EXTENSION(int) returns (int);
-function File__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 280);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 280);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1) == File__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 280)} MINUS_LEFT_PTR(x, 1, 280) == File__DEVICE_EXTENSIONInv(x));
-function File__PORT(int) returns (int);
-function File__PORTInv(int) returns (int);
-function _S_File__PORT([int]bool) returns ([int]bool);
-function _S_File__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
-
-axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
-function Flags__DEVICE_OBJECT(int) returns (int);
-function Flags__DEVICE_OBJECTInv(int) returns (int);
-function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
-function Flink__LIST_ENTRY(int) returns (int);
-function Flink__LIST_ENTRYInv(int) returns (int);
-function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
-function Free__PORT(int) returns (int);
-function Free__PORTInv(int) returns (int);
-function _S_Free__PORT([int]bool) returns ([int]bool);
-function _S_Free__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
-
-axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
-function GrandMaster__GLOBALS(int) returns (int);
-function GrandMaster__GLOBALSInv(int) returns (int);
-function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
-function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
-function InitExtension__GLOBALS(int) returns (int);
-function InitExtension__GLOBALSInv(int) returns (int);
-function _S_InitExtension__GLOBALS([int]bool) returns ([int]bool);
-function _S_InitExtension__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InitExtension__GLOBALSInv(InitExtension__GLOBALS(x))} InitExtension__GLOBALSInv(InitExtension__GLOBALS(x)) == x);
-axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALS(InitExtension__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALS(S)[x]} _S_InitExtension__GLOBALS(S)[x] <==> S[InitExtension__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALSInv(S)[x]} _S_InitExtension__GLOBALSInv(S)[x] <==> S[InitExtension__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALS(S)} S[x] ==> _S_InitExtension__GLOBALS(S)[InitExtension__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALSInv(S)} S[x] ==> _S_InitExtension__GLOBALSInv(S)[InitExtension__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {InitExtension__GLOBALS(x)} InitExtension__GLOBALS(x) == x + 72);
-axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALSInv(x) == x - 72);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 72, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 72, 1) == InitExtension__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 72)} MINUS_LEFT_PTR(x, 1, 72) == InitExtension__GLOBALSInv(x));
-function InputData__DEVICE_EXTENSION(int) returns (int);
-function InputData__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
-function LegacyDeviceList__GLOBALS(int) returns (int);
-function LegacyDeviceList__GLOBALSInv(int) returns (int);
-function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
-function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 888);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 888);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1) == LegacyDeviceList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 888)} MINUS_LEFT_PTR(x, 1, 888) == LegacyDeviceList__GLOBALSInv(x));
-function Length__UNICODE_STRING(int) returns (int);
-function Length__UNICODE_STRINGInv(int) returns (int);
-function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
-function Link__DEVICE_EXTENSION(int) returns (int);
-function Link__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 272);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 272);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1) == Link__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 272)} MINUS_LEFT_PTR(x, 1, 272) == Link__DEVICE_EXTENSIONInv(x));
-function MaximumLength__UNICODE_STRING(int) returns (int);
-function MaximumLength__UNICODE_STRINGInv(int) returns (int);
-function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
-function Mutex__GLOBALS(int) returns (int);
-function Mutex__GLOBALSInv(int) returns (int);
-function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
-function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
-function NumberLegacyPorts__GLOBALS(int) returns (int);
-function NumberLegacyPorts__GLOBALSInv(int) returns (int);
-function _S_NumberLegacyPorts__GLOBALS([int]bool) returns ([int]bool);
-function _S_NumberLegacyPorts__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x))} NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x)) == x);
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALS(NumberLegacyPorts__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALS(S)[x]} _S_NumberLegacyPorts__GLOBALS(S)[x] <==> S[NumberLegacyPorts__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALSInv(S)[x]} _S_NumberLegacyPorts__GLOBALSInv(S)[x] <==> S[NumberLegacyPorts__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALS(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALS(S)[NumberLegacyPorts__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALSInv(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALSInv(S)[NumberLegacyPorts__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALS(x)} NumberLegacyPorts__GLOBALS(x) == x + 20);
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALSInv(x) == x - 20);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == NumberLegacyPorts__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == NumberLegacyPorts__GLOBALSInv(x));
-function PnP__DEVICE_EXTENSION(int) returns (int);
-function PnP__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
-function Port__PORT(int) returns (int);
-function Port__PORTInv(int) returns (int);
-function _S_Port__PORT([int]bool) returns ([int]bool);
-function _S_Port__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
-
-axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
-function PortsServiced__GLOBALS(int) returns (int);
-function PortsServiced__GLOBALSInv(int) returns (int);
-function _S_PortsServiced__GLOBALS([int]bool) returns ([int]bool);
-function _S_PortsServiced__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x))} PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x)) == x);
-axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALS(PortsServiced__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALS(S)[x]} _S_PortsServiced__GLOBALS(S)[x] <==> S[PortsServiced__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALSInv(S)[x]} _S_PortsServiced__GLOBALSInv(S)[x] <==> S[PortsServiced__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALS(S)} S[x] ==> _S_PortsServiced__GLOBALS(S)[PortsServiced__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALSInv(S)} S[x] ==> _S_PortsServiced__GLOBALSInv(S)[PortsServiced__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {PortsServiced__GLOBALS(x)} PortsServiced__GLOBALS(x) == x + 64);
-axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALSInv(x) == x - 64);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1) == PortsServiced__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 64)} MINUS_LEFT_PTR(x, 1, 64) == PortsServiced__GLOBALSInv(x));
-function Self__DEVICE_EXTENSION(int) returns (int);
-function Self__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
-function StackSize__DEVICE_OBJECT(int) returns (int);
-function StackSize__DEVICE_OBJECTInv(int) returns (int);
-function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
-function Started__DEVICE_EXTENSION(int) returns (int);
-function Started__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
-function TopPort__DEVICE_EXTENSION(int) returns (int);
-function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
-function UnitId__DEVICE_EXTENSION(int) returns (int);
-function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 196);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 196);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1) == UnitId__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 196)} MINUS_LEFT_PTR(x, 1, 196) == UnitId__DEVICE_EXTENSIONInv(x));
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure nondet_choice() returns (x:int);
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-var Res_DEVICE_STACK:[int]int;
-var Res_DEV_EXTN:[int]int;
-var Res_DEV_OBJ_INIT:[int]int;
-var Res_SPIN_LOCK:[int]int;
-
-
-
-////////////////////
-// Between predicate
-////////////////////
-function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
-function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
-
-
-//////////////////////////
-// Between set constructor
-//////////////////////////
-function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
-
-////////////////////////////////////////////////////
-// axioms relating ReachBetween and ReachBetweenSet
-////////////////////////////////////////////////////
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
-axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
-
-
-//////////////////////////
-// Axioms for ReachBetween
-//////////////////////////
-
-// reflexive
-axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
-
-// step
-//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
-axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
-
-// reach
-axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
-
-// cycle
-axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
-
-// sandwich
-axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
-
-// order1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
-
-// order2
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
-
-// transitive1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
-
-// transitive2
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
-
-// transitive3
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
-
-// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
-// It cannot be proved using the rest of the axioms.
-axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
-
-// relation between ReachAvoiding and ReachBetween
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
-
-// update
-axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
- ///////////////////////////////
- // Shifts for linking fields
- ///////////////////////////////
-function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
-axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
-axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
-
-const unique Globals : int;
-axiom(Globals != 0);
-// the set of constants for 64 bit integers that Boogie doesn't parse
-const unique BOOGIE_LARGE_INT_3221553153:int;
-
-
-
-procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure InsertTailList($ListHead$1$6980.24$InsertTailList$81:int, $Entry$2$6981.41$InsertTailList$81:int);
-
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead), __setunion(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead)), __set(Entry)))
-ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81))) && Subset(Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
-requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
-//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
-ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
-//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
-ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
-//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
-ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
-//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoGetDeviceObjectPointer($ObjectName$1$21492.26$IoGetDeviceObjectPointer$161:int, $DesiredAccess$2$21493.22$IoGetDeviceObjectPointer$161:int, $FileObject$3$21494.24$IoGetDeviceObjectPointer$161:int, $DeviceObject$4$21495.26$IoGetDeviceObjectPointer$161:int) returns ($result.IoGetDeviceObjectPointer$21491.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KbdCreateClassObject($DriverObject$1$3354.28$KbdCreateClassObject$201:int, $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201:int, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201:int, $FullDeviceName$4$3357.35$KbdCreateClassObject$201:int, $Legacy$5$3358.28$KbdCreateClassObject$201:int) returns ($result.KbdCreateClassObject$3353.0$1$:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1)));
-//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 0)));
-//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
-ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] := 1])));
-//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
-ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]])));
-//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
-ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3356.28$KbdCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KbdDeterminePortsServiced($BasePortName$1$3676.23$KbdDeterminePortsServiced$81:int, $NumberPortsServiced$2$3677.18$KbdDeterminePortsServiced$81:int) returns ($result.KbdDeterminePortsServiced$3675.0$1$:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeyboardAddDeviceEx($ClassData$1$819.28$KeyboardAddDeviceEx$121:int, $FullClassName$2$820.28$KeyboardAddDeviceEx$121:int, $File$3$821.28$KeyboardAddDeviceEx$121:int) returns ($result.KeyboardAddDeviceEx$818.0$1$:int);
-
-//TAG: requires __resource("DEV_EXTN", ClassData) == 1
-requires(Res_DEV_EXTN[$ClassData$1$819.28$KeyboardAddDeviceEx$121] == 1);
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __resource("DEV_EXTN", ClassData) == 1
-ensures(Res_DEV_EXTN[$ClassData$1$819.28$KeyboardAddDeviceEx$121] == 1);
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeyboardClassLogError($Object$1$4824.10$KeyboardClassLogError$281:int, $ErrorCode$2$4825.10$KeyboardClassLogError$281:int, $UniqueErrorValue$3$4826.10$KeyboardClassLogError$281:int, $FinalStatus$4$4827.13$KeyboardClassLogError$281:int, $DumpCount$5$4828.10$KeyboardClassLogError$281:int, $DumpData$6$4829.11$KeyboardClassLogError$281:int, $MajorFunction$7$4830.10$KeyboardClassLogError$281:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlCopyUnicodeString($DestinationString$1$7401.28$RtlCopyUnicodeString$81:int, $SourceString$2$7402.30$RtlCopyUnicodeString$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlInitUnicodeString($DestinationString$1$7281.26$RtlInitUnicodeString$81:int, $SourceString$2$7282.37$RtlInitUnicodeString$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure __PREfastPagedCode();
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeyboardClassFindMorePorts($DriverObject$1$4861.20$KeyboardClassFindMorePorts$121:int, $Context$2$4862.20$KeyboardClassFindMorePorts$121:int, $Count$3$4863.20$KeyboardClassFindMorePorts$121:int)
-
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
-modifies alloc;
-free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for:
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for:
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for:
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for:
-
-//TAG: havoc memory locations by default
-modifies Mem;
-{
-var havoc_stringTemp:int;
-var condVal:int;
-var $Context$2$4862.20$KeyboardClassFindMorePorts$12 : int;
-var $Count$3$4863.20$KeyboardClassFindMorePorts$12 : int;
-var $DriverObject$1$4861.20$KeyboardClassFindMorePorts$12 : int;
-var $ExAllocatePoolWithTag.arg.2$5$ : int;
-var $KbdDebugPrint.arg.2$6$ : int;
-var $RtlAppendUnicodeToString.arg.2$10$ : int;
-var $RtlAppendUnicodeToString.arg.2$13$ : int;
-var $RtlAppendUnicodeToString.arg.2$3$ : int;
-var $basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12 : int;
-var $basePortName$11$4893.28$KeyboardClassFindMorePorts$12 : int;
-var $classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12 : int;
-var $deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 : int;
-var $dumpData$7$4889.28$KeyboardClassFindMorePorts$12 : int;
-var $file$15$4897.28$KeyboardClassFindMorePorts$12 : int;
-var $fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 : int;
-var $fullPortName$12$4894.28$KeyboardClassFindMorePorts$12 : int;
-var $i$8$4890.28$KeyboardClassFindMorePorts$12 : int;
-var $memset.arg.3$8$ : int;
-var $numPorts$9$4891.28$KeyboardClassFindMorePorts$12 : int;
-var $port$16$5029.22$KeyboardClassFindMorePorts$12 : int;
-var $result.ExAllocatePoolWithTag$4926.0$4$ : int;
-var $result.IoGetDeviceObjectPointer$5001.42$16$ : int;
-var $result.KbdCreateClassObject$4978.38$15$ : int;
-var $result.KbdDeterminePortsServiced$4954.29$14$ : int;
-var $result.KeyboardAddDeviceEx$5013.37$17$ : int;
-var $result.ObfDereferenceObject$5042.16$18$ : int;
-var $result.RtlAppendUnicodeToString$4915.28$2$ : int;
-var $result.RtlAppendUnicodeToString$4950.28$9$ : int;
-var $result.RtlAppendUnicodeToString$4951.28$11$ : int;
-var $result.RtlAppendUnicodeToString$4952.28$12$ : int;
-var $result.memset$4903.4$1$ : int;
-var $result.memset$4949.4$7$ : int;
-var $status$4$4886.28$KeyboardClassFindMorePorts$12 : int;
-var $successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12 : int;
-var tempBoogie0:int;
-var tempBoogie1:int;
-var tempBoogie2:int;
-var tempBoogie3:int;
-var tempBoogie4:int;
-var tempBoogie5:int;
-var tempBoogie6:int;
-var tempBoogie7:int;
-var tempBoogie8:int;
-var tempBoogie9:int;
-var tempBoogie10:int;
-var tempBoogie11:int;
-var tempBoogie12:int;
-var tempBoogie13:int;
-var tempBoogie14:int;
-var tempBoogie15:int;
-var tempBoogie16:int;
-var tempBoogie17:int;
-var tempBoogie18:int;
-var tempBoogie19:int;
-var LOOP_74_alloc:[int]name;
-var LOOP_74_Mem:[name][int]int;
-var LOOP_74_Res_DEVICE_STACK:[int]int;
-var LOOP_74_Res_DEV_EXTN:[int]int;
-var LOOP_74_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_74_Res_SPIN_LOCK:[int]int;
-
-
-start:
-
-assume (alloc[$DriverObject$1$4861.20$KeyboardClassFindMorePorts$121] != UNALLOCATED);
-assume (alloc[$Context$2$4862.20$KeyboardClassFindMorePorts$121] != UNALLOCATED);
-call $basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(512);
-call $basePortName$11$4893.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(8);
-call $classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
-call $dumpData$7$4889.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(16);
-call $file$15$4897.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
-call $fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
-call $fullPortName$12$4894.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(8);
-call $numPorts$9$4891.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
-$DriverObject$1$4861.20$KeyboardClassFindMorePorts$12 := $DriverObject$1$4861.20$KeyboardClassFindMorePorts$121;
-$Context$2$4862.20$KeyboardClassFindMorePorts$12 := $Context$2$4862.20$KeyboardClassFindMorePorts$121;
-$Count$3$4863.20$KeyboardClassFindMorePorts$12 := $Count$3$4863.20$KeyboardClassFindMorePorts$121;
-goto label_3;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5070)
-label_1:
-call __HAVOC_free($basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12);
-call __HAVOC_free($basePortName$11$4893.28$KeyboardClassFindMorePorts$12);
-call __HAVOC_free($classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12);
-call __HAVOC_free($dumpData$7$4889.28$KeyboardClassFindMorePorts$12);
-call __HAVOC_free($file$15$4897.28$KeyboardClassFindMorePorts$12);
-call __HAVOC_free($fullClassName$14$4896.28$KeyboardClassFindMorePorts$12);
-call __HAVOC_free($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12);
-call __HAVOC_free($numPorts$9$4891.28$KeyboardClassFindMorePorts$12);
-assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
-assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
-assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
-assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
-assume (forall m:int :: {Mem[T.A256UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A256UINT2][m] == old(Mem[T.A256UINT2])[m]);
-assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
-assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
-assume (forall m:int :: {Mem[T.A5UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A5UINT2][m] == old(Mem[T.A5UINT2])[m]);
-assume (forall m:int :: {Mem[T.A88CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A88CHAR][m] == old(Mem[T.A88CHAR])[m]);
-assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
-assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CHAR][m] == old(Mem[T.CHAR])[m]);
-assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m] == old(Mem[T.CurrentStackLocation___unnamed_4_f19b65c1])[m]);
-assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
-assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
-assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
-assume (forall m:int :: {Mem[T.InitExtension__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InitExtension__GLOBALS][m] == old(Mem[T.InitExtension__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
-assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.NumberLegacyPorts__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberLegacyPorts__GLOBALS][m] == old(Mem[T.NumberLegacyPorts__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
-assume (forall m:int :: {Mem[T.PPUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PPUINT2][m] == old(Mem[T.PPUINT2])[m]);
-assume (forall m:int :: {Mem[T.PP_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_DEVICE_OBJECT][m] == old(Mem[T.PP_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
-assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
-assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
-assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_KEYBOARD_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_KEYBOARD_INPUT_DATA][m] == old(Mem[T.P_KEYBOARD_INPUT_DATA])[m]);
-assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
-assume (forall m:int :: {Mem[T.PortsServiced__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PortsServiced__GLOBALS][m] == old(Mem[T.PortsServiced__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
-assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
-assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
-assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5070)
-label_2:
-assume false;
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4886)
-label_3:
-goto label_4;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4887)
-label_4:
-goto label_5;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4887)
-label_5:
-$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := 0 ;
-goto label_6;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4888)
-label_6:
-goto label_7;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4888)
-label_7:
-Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12 := 0];
-goto label_8;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4889)
-label_8:
-goto label_9;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4890)
-label_9:
-goto label_10;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4891)
-label_10:
-goto label_11;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4892)
-label_11:
-goto label_12;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4893)
-label_12:
-goto label_13;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4894)
-label_13:
-goto label_14;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4895)
-label_14:
-goto label_15;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4896)
-label_15:
-goto label_16;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4896)
-label_16:
-Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 := 0];
-goto label_17;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4897)
-label_17:
-goto label_18;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4899)
-label_18:
-call __PREfastPagedCode ();
-goto label_21;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4901)
-label_21:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12) := 0];
-goto label_22;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4903)
-label_22:
-// ignoring intrinsic intrinsic.memset
-havoc $result.memset$4903.4$1$;
-goto label_25;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4904)
-label_25:
-Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := $basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12];
-goto label_26;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4905)
-label_26:
-Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := 0];
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4906)
-label_27:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := 512];
-goto label_28;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4913)
-label_28:
-call RtlCopyUnicodeString ($basePortName$11$4893.28$KeyboardClassFindMorePorts$12, BaseClassName__GLOBALS(Globals));
-goto label_31;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4914)
-label_31:
-tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT( Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12)], 10, 1) ;
-Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := tempBoogie0];
-goto label_35;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4915)
-label_32:
-call $result.RtlAppendUnicodeToString$4915.28$2$ := RtlAppendUnicodeToString ($basePortName$11$4893.28$KeyboardClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$3$);
-goto label_36;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4915)
-label_35:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$3$ := havoc_stringTemp ;
-goto label_32;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4920)
-label_36:
-call RtlInitUnicodeString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, 0);
-goto label_39;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4922)
-label_39:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12)]), 1, 2)];
-goto label_43;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4926)
-label_40:
-call $result.ExAllocatePoolWithTag$4926.0$4$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$5$, 1130652235);
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4926)
-label_43:
-$ExAllocatePoolWithTag.arg.2$5$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] ;
-goto label_40;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4926)
-label_44:
-Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12) := $result.ExAllocatePoolWithTag$4926.0$4$];
-goto label_45;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4929)
-label_45:
-goto label_45_true , label_45_false ;
-
-
-label_45_true :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] != 0);
-goto label_57;
-
-
-label_45_false :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] == 0);
-goto label_49;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4931)
-label_46:
-// skip KbdDebugPrint
-goto label_50;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4931)
-label_49:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$6$ := havoc_stringTemp ;
-goto label_46;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4936)
-label_50:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$7$4889.28$KeyboardClassFindMorePorts$12, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)]];
-goto label_51;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4937)
-label_51:
-call KeyboardClassLogError ($DriverObject$1$4861.20$KeyboardClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 10008, -1073741823, 1, $dumpData$7$4889.28$KeyboardClassFindMorePorts$12, 0);
-goto label_151;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4949)
-label_54:
-// ignoring intrinsic intrinsic.memset
-havoc $result.memset$4949.4$7$;
-goto label_61;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4949)
-label_57:
-$memset.arg.3$8$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] ;
-goto label_54;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4950)
-label_58:
-call $result.RtlAppendUnicodeToString$4950.28$9$ := RtlAppendUnicodeToString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$10$);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4950)
-label_61:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$10$ := havoc_stringTemp ;
-goto label_58;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4951)
-label_62:
-call $result.RtlAppendUnicodeToString$4951.28$11$ := RtlAppendUnicodeToString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12)]);
-goto label_68;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4952)
-label_65:
-call $result.RtlAppendUnicodeToString$4952.28$12$ := RtlAppendUnicodeToString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$13$);
-goto label_69;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4952)
-label_68:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$13$ := havoc_stringTemp ;
-goto label_65;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4954)
-label_69:
-call $result.KbdDeterminePortsServiced$4954.29$14$ := KbdDeterminePortsServiced ($basePortName$11$4893.28$KeyboardClassFindMorePorts$12, $numPorts$9$4891.28$KeyboardClassFindMorePorts$12);
-goto label_72;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4961)
-label_72:
-$i$8$4890.28$KeyboardClassFindMorePorts$12 := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals)] ;
-goto label_73;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4961)
-label_73:
-$successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12 := 0 ;
-goto label_74;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4962)
-label_74:
-// loop entry initialization...
-LOOP_74_alloc := alloc;
-LOOP_74_Mem := Mem;
-LOOP_74_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_74_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_74_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_74_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_74_head;
-
-
-label_74_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-assume(forall f:int :: {alloc[Base(f)]} LOOP_74_alloc[Base(f)] == UNALLOCATED || LOOP_74_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_74_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_74_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_74_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_74_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_74_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_74_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (SetTrue()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_74_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-goto label_74_true , label_74_false ;
-
-
-label_74_true :
-assume ($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
-goto label_75;
-
-
-label_74_false :
-assume !($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
-goto label_150;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4962)
-label_75:
-goto label_75_true , label_75_false ;
-
-
-label_75_true :
-assume ($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4891.28$KeyboardClassFindMorePorts$12]);
-goto label_76;
-
-
-label_75_false :
-assume !($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4891.28$KeyboardClassFindMorePorts$12]);
-goto label_150;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4973)
-label_76:
-Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)], 2), 1, 1)) := PLUS(48, 1, $i$8$4890.28$KeyboardClassFindMorePorts$12)];
-goto label_77;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4978)
-label_77:
-call $result.KbdCreateClassObject$4978.38$15$ := KbdCreateClassObject ($DriverObject$1$4861.20$KeyboardClassFindMorePorts$12, InitExtension__GLOBALS(Globals), $classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12, $fullClassName$14$4896.28$KeyboardClassFindMorePorts$12, 1);
-goto label_80;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4978)
-label_80:
-$status$4$4886.28$KeyboardClassFindMorePorts$12 := $result.KbdCreateClassObject$4978.38$15$ ;
-goto label_81;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4984)
-label_81:
-goto label_81_true , label_81_false ;
-
-
-label_81_true :
-assume (0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
-goto label_85;
-
-
-label_81_false :
-assume !(0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
-goto label_82;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4985)
-label_82:
-call KeyboardClassLogError ($DriverObject$1$4861.20$KeyboardClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 10008, $status$4$4886.28$KeyboardClassFindMorePorts$12, 0, 0, 0);
-goto label_149;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4995)
-label_85:
-$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])] ;
-goto label_86;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4996)
-label_86:
-Mem[T.PnP__DEVICE_EXTENSION] := Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
-goto label_87;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5001)
-label_87:
-assume (Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]);
-call $result.IoGetDeviceObjectPointer$5001.42$16$ := IoGetDeviceObjectPointer ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, 128, $file$15$4897.28$KeyboardClassFindMorePorts$12, TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12));
-Mem[T.TopPort__DEVICE_EXTENSION] := Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
-goto label_90;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5001)
-label_90:
-$status$4$4886.28$KeyboardClassFindMorePorts$12 := $result.IoGetDeviceObjectPointer$5001.42$16$ ;
-goto label_91;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5006)
-label_91:
-goto label_91_true , label_91_false ;
-
-
-label_91_true :
-assume ($status$4$4886.28$KeyboardClassFindMorePorts$12 != 0);
-goto label_92;
-
-
-label_91_false :
-assume ($status$4$4886.28$KeyboardClassFindMorePorts$12 == 0);
-goto label_103;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
-label_92:
-goto label_92_true , label_92_false ;
-
-
-label_92_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] != 0);
-goto label_93;
-
-
-label_92_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == 0);
-goto label_99;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
-label_93:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)], 0);
-goto label_96;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
-label_96:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
-goto label_97;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
-label_97:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
-goto label_98;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
-label_98:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
-goto label_99;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
-label_99:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]);
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
-label_102:
-$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := 0 ;
-goto label_149;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5012)
-label_103:
-Mem[T.StackSize__DEVICE_OBJECT] := Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12]) := PLUS(1, 1, Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])])];
-goto label_104;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5013)
-label_104:
-call $result.KeyboardAddDeviceEx$5013.37$17$ := KeyboardAddDeviceEx ($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12, Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12], Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12]);
-goto label_107;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5013)
-label_107:
-$status$4$4886.28$KeyboardClassFindMorePorts$12 := $result.KeyboardAddDeviceEx$5013.37$17$ ;
-goto label_108;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5014)
-label_108:
-assume (forall r:int :: {BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)),r)} (POW2(r) && POW2(128) && r != 128) ==> (BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])],r)!= 0 <==> BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)),r)!= 0));
-assume (BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)),128) == 0);
-tempBoogie0 := BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)) ;
-Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12]) := tempBoogie0];
-goto label_109;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5016)
-label_109:
-goto label_109_true , label_109_false ;
-
-
-label_109_true :
-assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] != 0);
-goto label_110;
-
-
-label_109_false :
-assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] == 0);
-goto label_114;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5017)
-label_110:
-call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12], 0);
-goto label_113;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5018)
-label_113:
-Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 := 0];
-goto label_114;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5021)
-label_114:
-goto label_114_true , label_114_false ;
-
-
-label_114_true :
-assume (0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
-goto label_145;
-
-
-label_114_false :
-assume !(0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
-goto label_115;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5022)
-label_115:
-goto label_115_true , label_115_false ;
-
-
-label_115_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_119;
-
-
-label_115_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_116;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5023)
-label_116:
-goto label_116_true , label_116_false ;
-
-
-label_116_true :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] != 0);
-goto label_117;
-
-
-label_116_false :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == 0);
-goto label_130;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5024)
-label_117:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
-goto label_118;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5025)
-label_118:
-Mem[T.File__DEVICE_EXTENSION] := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
-goto label_130;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5029)
-label_119:
-goto label_120;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5031)
-label_120:
-call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
-goto label_123;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5033)
-label_123:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12 := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]))]];
-goto label_124;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5034)
-label_124:
-Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])) := 0];
-goto label_125;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5035)
-label_125:
-Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])) := 1];
-goto label_126;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5036)
-label_126:
-Mem[T.Port__PORT] := Mem[T.Port__PORT][Port__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])) := 0];
-goto label_127;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5038)
-label_127:
-call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
-goto label_130;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5041)
-label_130:
-goto label_130_true , label_130_false ;
-
-
-label_130_true :
-assume (Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12] != 0);
-goto label_131;
-
-
-label_130_false :
-assume (Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12] == 0);
-goto label_134;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5042)
-label_131:
-call $result.ObfDereferenceObject$5042.16$18$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12]);
-goto label_134;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
-label_134:
-goto label_134_true , label_134_false ;
-
-
-label_134_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] != 0);
-goto label_135;
-
-
-label_134_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == 0);
-goto label_141;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
-label_135:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)], 0);
-goto label_138;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
-label_138:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
-goto label_139;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
-label_139:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
-goto label_140;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
-label_140:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
-goto label_141;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
-label_141:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]);
-goto label_144;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
-label_144:
-$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := 0 ;
-goto label_149;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5052)
-label_145:
-call InsertTailList (LegacyDeviceList__GLOBALS(Globals), Link__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12));
-goto label_148;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5053)
-label_148:
-$successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12 := PLUS($successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12, 1, 1) ;
-goto label_149;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4963)
-label_149:
-$i$8$4890.28$KeyboardClassFindMorePorts$12 := PLUS($i$8$4890.28$KeyboardClassFindMorePorts$12, 1, 1) ;
-goto label_74_head;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5055)
-label_150:
-Mem[T.NumberLegacyPorts__GLOBALS] := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals) := $i$8$4890.28$KeyboardClassFindMorePorts$12];
-goto label_151;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5063)
-label_151:
-goto label_151_true , label_151_false ;
-
-
-label_151_true :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] != 0);
-goto label_152;
-
-
-label_151_false :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] == 0);
-goto label_155;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5064)
-label_152:
-call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)], 0);
-goto label_155;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5067)
-label_155:
-goto label_155_true , label_155_false ;
-
-
-label_155_true :
-assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] != 0);
-goto label_156;
-
-
-label_155_false :
-assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] == 0);
-goto label_1;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5068)
-label_156:
-call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12], 0);
-goto label_1;
-
-}
-
+// RUN: %boogie -monomorphize "%s" > "%t"
+// RUN: %diff success.expect "%t"
+type byte, name;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function SetTrue() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+/*
+function AtLeast(int, int) returns ([int]bool);
+function ModEqual(int, int, int) returns (bool);
+axiom(forall n:int, x:int :: ModEqual(n,x,x));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
+axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
+axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
+axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+*/
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int :: SetTrue()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name, m:[name][int]int) returns (bool);
+function Values(t:name, m:[name][int]int) returns ([int]bool);
+function T.Ptr(t:name) returns (name);
+
+axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
+
+axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
+
+axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
+ (HasType(v, t, m1) <==> HasType(v, t, m2)));
+
+// Field declarations
+
+const unique T.Guid_WMIGUIDREGINFO:name;
+const unique T.InstanceCount_WMIGUIDREGINFO:name;
+const unique T.Flags_WMIGUIDREGINFO:name;
+const unique T.OperationID__ACCESS_STATE:name;
+const unique T.SecurityEvaluated__ACCESS_STATE:name;
+const unique T.GenerateAudit__ACCESS_STATE:name;
+const unique T.GenerateOnClose__ACCESS_STATE:name;
+const unique T.PrivilegesAllocated__ACCESS_STATE:name;
+const unique T.Flags__ACCESS_STATE:name;
+const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
+const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
+const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
+const unique T.SubjectSecurityContext__ACCESS_STATE:name;
+const unique T.SecurityDescriptor__ACCESS_STATE:name;
+const unique T.AuxData__ACCESS_STATE:name;
+const unique T.Privileges__ACCESS_STATE:name;
+const unique T.AuditPrivileges__ACCESS_STATE:name;
+const unique T.ObjectName__ACCESS_STATE:name;
+const unique T.ObjectTypeName__ACCESS_STATE:name;
+const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_RESOURCE_LIST:name;
+const unique T.List__CM_RESOURCE_LIST:name;
+const unique T.Size__DEVICE_CAPABILITIES:name;
+const unique T.Version__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
+const unique T.LockSupported__DEVICE_CAPABILITIES:name;
+const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.Removable__DEVICE_CAPABILITIES:name;
+const unique T.DockDevice__DEVICE_CAPABILITIES:name;
+const unique T.UniqueID__DEVICE_CAPABILITIES:name;
+const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
+const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
+const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
+const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
+const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
+const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
+const unique T.Reserved__DEVICE_CAPABILITIES:name;
+const unique T.Address__DEVICE_CAPABILITIES:name;
+const unique T.UINumber__DEVICE_CAPABILITIES:name;
+const unique T.DeviceState__DEVICE_CAPABILITIES:name;
+const unique T.SystemWake__DEVICE_CAPABILITIES:name;
+const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
+const unique T.D1Latency__DEVICE_CAPABILITIES:name;
+const unique T.D2Latency__DEVICE_CAPABILITIES:name;
+const unique T.D3Latency__DEVICE_CAPABILITIES:name;
+const unique T.Self__DEVICE_EXTENSION:name;
+const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
+const unique T.TopPort__DEVICE_EXTENSION:name;
+const unique T.PDO__DEVICE_EXTENSION:name;
+const unique T.RemoveLock__DEVICE_EXTENSION:name;
+const unique T.PnP__DEVICE_EXTENSION:name;
+const unique T.Started__DEVICE_EXTENSION:name;
+const unique T.AllowDisable__DEVICE_EXTENSION:name;
+const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
+const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
+const unique T.InputCount__DEVICE_EXTENSION:name;
+const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
+const unique T.InputData__DEVICE_EXTENSION:name;
+const unique T.DataIn__DEVICE_EXTENSION:name;
+const unique T.DataOut__DEVICE_EXTENSION:name;
+const unique T.KeyboardAttributes__DEVICE_EXTENSION:name;
+const unique T.IndicatorParameters__DEVICE_EXTENSION:name;
+const unique T.SpinLock__DEVICE_EXTENSION:name;
+const unique T.ReadQueue__DEVICE_EXTENSION:name;
+const unique T.SequenceNumber__DEVICE_EXTENSION:name;
+const unique T.DeviceState__DEVICE_EXTENSION:name;
+const unique T.SystemState__DEVICE_EXTENSION:name;
+const unique T.UnitId__DEVICE_EXTENSION:name;
+const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
+const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
+const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
+const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
+const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
+const unique T.Link__DEVICE_EXTENSION:name;
+const unique T.File__DEVICE_EXTENSION:name;
+const unique T.Enabled__DEVICE_EXTENSION:name;
+const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
+const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
+const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
+const unique T.Type__DEVICE_OBJECT:name;
+const unique T.Size__DEVICE_OBJECT:name;
+const unique T.ReferenceCount__DEVICE_OBJECT:name;
+const unique T.DriverObject__DEVICE_OBJECT:name;
+const unique T.NextDevice__DEVICE_OBJECT:name;
+const unique T.AttachedDevice__DEVICE_OBJECT:name;
+const unique T.CurrentIrp__DEVICE_OBJECT:name;
+const unique T.Timer__DEVICE_OBJECT:name;
+const unique T.Flags__DEVICE_OBJECT:name;
+const unique T.Characteristics__DEVICE_OBJECT:name;
+const unique T.Vpb__DEVICE_OBJECT:name;
+const unique T.DeviceExtension__DEVICE_OBJECT:name;
+const unique T.DeviceType__DEVICE_OBJECT:name;
+const unique T.StackSize__DEVICE_OBJECT:name;
+const unique T.Queue__DEVICE_OBJECT:name;
+const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
+const unique T.DeviceQueue__DEVICE_OBJECT:name;
+const unique T.Dpc__DEVICE_OBJECT:name;
+const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
+const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
+const unique T.DeviceLock__DEVICE_OBJECT:name;
+const unique T.SectorSize__DEVICE_OBJECT:name;
+const unique T.Spare1__DEVICE_OBJECT:name;
+const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
+const unique T.Reserved__DEVICE_OBJECT:name;
+const unique T.Type__DEVOBJ_EXTENSION:name;
+const unique T.Size__DEVOBJ_EXTENSION:name;
+const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
+const unique T.__unnamed_4_a97c65a1__DISPATCHER_HEADER:name;
+const unique T.SignalState__DISPATCHER_HEADER:name;
+const unique T.WaitListHead__DISPATCHER_HEADER:name;
+const unique T.DriverObject__DRIVER_EXTENSION:name;
+const unique T.AddDevice__DRIVER_EXTENSION:name;
+const unique T.Count__DRIVER_EXTENSION:name;
+const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
+const unique T.Type__DRIVER_OBJECT:name;
+const unique T.Size__DRIVER_OBJECT:name;
+const unique T.DeviceObject__DRIVER_OBJECT:name;
+const unique T.Flags__DRIVER_OBJECT:name;
+const unique T.DriverStart__DRIVER_OBJECT:name;
+const unique T.DriverSize__DRIVER_OBJECT:name;
+const unique T.DriverSection__DRIVER_OBJECT:name;
+const unique T.DriverExtension__DRIVER_OBJECT:name;
+const unique T.DriverName__DRIVER_OBJECT:name;
+const unique T.HardwareDatabase__DRIVER_OBJECT:name;
+const unique T.FastIoDispatch__DRIVER_OBJECT:name;
+const unique T.DriverInit__DRIVER_OBJECT:name;
+const unique T.DriverStartIo__DRIVER_OBJECT:name;
+const unique T.DriverUnload__DRIVER_OBJECT:name;
+const unique T.MajorFunction__DRIVER_OBJECT:name;
+const unique T.SystemResourcesList__ERESOURCE:name;
+const unique T.OwnerTable__ERESOURCE:name;
+const unique T.ActiveCount__ERESOURCE:name;
+const unique T.Flag__ERESOURCE:name;
+const unique T.SharedWaiters__ERESOURCE:name;
+const unique T.ExclusiveWaiters__ERESOURCE:name;
+const unique T.OwnerEntry__ERESOURCE:name;
+const unique T.ActiveEntries__ERESOURCE:name;
+const unique T.ContentionCount__ERESOURCE:name;
+const unique T.NumberOfSharedWaiters__ERESOURCE:name;
+const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
+const unique T.__unnamed_4_52c594f7__ERESOURCE:name;
+const unique T.SpinLock__ERESOURCE:name;
+const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
+const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
+const unique T.FastIoRead__FAST_IO_DISPATCH:name;
+const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoLock__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
+const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
+const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
+const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlRead__FAST_IO_DISPATCH:name;
+const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
+const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
+const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
+const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.Count__FAST_MUTEX:name;
+const unique T.Owner__FAST_MUTEX:name;
+const unique T.Contention__FAST_MUTEX:name;
+const unique T.Gate__FAST_MUTEX:name;
+const unique T.OldIrql__FAST_MUTEX:name;
+const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
+const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
+const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
+const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.Type__FILE_OBJECT:name;
+const unique T.Size__FILE_OBJECT:name;
+const unique T.DeviceObject__FILE_OBJECT:name;
+const unique T.Vpb__FILE_OBJECT:name;
+const unique T.FsContext__FILE_OBJECT:name;
+const unique T.FsContext2__FILE_OBJECT:name;
+const unique T.SectionObjectPointer__FILE_OBJECT:name;
+const unique T.PrivateCacheMap__FILE_OBJECT:name;
+const unique T.FinalStatus__FILE_OBJECT:name;
+const unique T.RelatedFileObject__FILE_OBJECT:name;
+const unique T.LockOperation__FILE_OBJECT:name;
+const unique T.DeletePending__FILE_OBJECT:name;
+const unique T.ReadAccess__FILE_OBJECT:name;
+const unique T.WriteAccess__FILE_OBJECT:name;
+const unique T.DeleteAccess__FILE_OBJECT:name;
+const unique T.SharedRead__FILE_OBJECT:name;
+const unique T.SharedWrite__FILE_OBJECT:name;
+const unique T.SharedDelete__FILE_OBJECT:name;
+const unique T.Flags__FILE_OBJECT:name;
+const unique T.FileName__FILE_OBJECT:name;
+const unique T.CurrentByteOffset__FILE_OBJECT:name;
+const unique T.Waiters__FILE_OBJECT:name;
+const unique T.Busy__FILE_OBJECT:name;
+const unique T.LastLock__FILE_OBJECT:name;
+const unique T.Lock__FILE_OBJECT:name;
+const unique T.Event__FILE_OBJECT:name;
+const unique T.CompletionContext__FILE_OBJECT:name;
+const unique T.IrpListLock__FILE_OBJECT:name;
+const unique T.IrpList__FILE_OBJECT:name;
+const unique T.FileObjectExtension__FILE_OBJECT:name;
+const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
+const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
+const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
+const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
+const unique T.Directory__FILE_STANDARD_INFORMATION:name;
+const unique T.Debug__GLOBALS:name;
+const unique T.GrandMaster__GLOBALS:name;
+const unique T.AssocClassList__GLOBALS:name;
+const unique T.NumAssocClass__GLOBALS:name;
+const unique T.Opens__GLOBALS:name;
+const unique T.NumberLegacyPorts__GLOBALS:name;
+const unique T.Mutex__GLOBALS:name;
+const unique T.ConnectOneClassToOnePort__GLOBALS:name;
+const unique T.SendOutputToAllPorts__GLOBALS:name;
+const unique T.PortsServiced__GLOBALS:name;
+const unique T.InitExtension__GLOBALS:name;
+const unique T.RegistryPath__GLOBALS:name;
+const unique T.BaseClassName__GLOBALS:name;
+const unique T.BaseClassBuffer__GLOBALS:name;
+const unique T.LegacyDeviceList__GLOBALS:name;
+const unique T.Data1__GUID:name;
+const unique T.Data2__GUID:name;
+const unique T.Data3__GUID:name;
+const unique T.Data4__GUID:name;
+const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
+const unique T.Control__INITIAL_PRIVILEGE_SET:name;
+const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
+const unique T.Size__INTERFACE:name;
+const unique T.Version__INTERFACE:name;
+const unique T.Context__INTERFACE:name;
+const unique T.InterfaceReference__INTERFACE:name;
+const unique T.InterfaceDereference__INTERFACE:name;
+const unique T.Port__IO_COMPLETION_CONTEXT:name;
+const unique T.Key__IO_COMPLETION_CONTEXT:name;
+const unique T.Common__IO_REMOVE_LOCK:name;
+const unique T.Dbg__IO_REMOVE_LOCK:name;
+const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__IO_RESOURCE_LIST:name;
+const unique T.Revision__IO_RESOURCE_LIST:name;
+const unique T.Count__IO_RESOURCE_LIST:name;
+const unique T.Descriptors__IO_RESOURCE_LIST:name;
+const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
+const unique T.AccessState__IO_SECURITY_CONTEXT:name;
+const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
+const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
+const unique T.MajorFunction__IO_STACK_LOCATION:name;
+const unique T.MinorFunction__IO_STACK_LOCATION:name;
+const unique T.Flags__IO_STACK_LOCATION:name;
+const unique T.Control__IO_STACK_LOCATION:name;
+const unique T.Parameters__IO_STACK_LOCATION:name;
+const unique T.DeviceObject__IO_STACK_LOCATION:name;
+const unique T.FileObject__IO_STACK_LOCATION:name;
+const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
+const unique T.Context__IO_STACK_LOCATION:name;
+const unique T.__unnamed_4_d99b6e2b__IO_STATUS_BLOCK:name;
+const unique T.Information__IO_STATUS_BLOCK:name;
+const unique T.Type__IRP:name;
+const unique T.Size__IRP:name;
+const unique T.MdlAddress__IRP:name;
+const unique T.Flags__IRP:name;
+const unique T.AssociatedIrp__IRP:name;
+const unique T.ThreadListEntry__IRP:name;
+const unique T.IoStatus__IRP:name;
+const unique T.RequestorMode__IRP:name;
+const unique T.PendingReturned__IRP:name;
+const unique T.StackCount__IRP:name;
+const unique T.CurrentLocation__IRP:name;
+const unique T.Cancel__IRP:name;
+const unique T.CancelIrql__IRP:name;
+const unique T.ApcEnvironment__IRP:name;
+const unique T.AllocationFlags__IRP:name;
+const unique T.UserIosb__IRP:name;
+const unique T.UserEvent__IRP:name;
+const unique T.Overlay__IRP:name;
+const unique T.CancelRoutine__IRP:name;
+const unique T.UserBuffer__IRP:name;
+const unique T.Tail__IRP:name;
+const unique T.Type__KAPC:name;
+const unique T.SpareByte0__KAPC:name;
+const unique T.Size__KAPC:name;
+const unique T.SpareByte1__KAPC:name;
+const unique T.SpareLong0__KAPC:name;
+const unique T.Thread__KAPC:name;
+const unique T.ApcListEntry__KAPC:name;
+const unique T.KernelRoutine__KAPC:name;
+const unique T.RundownRoutine__KAPC:name;
+const unique T.NormalRoutine__KAPC:name;
+const unique T.NormalContext__KAPC:name;
+const unique T.SystemArgument1__KAPC:name;
+const unique T.SystemArgument2__KAPC:name;
+const unique T.ApcStateIndex__KAPC:name;
+const unique T.ApcMode__KAPC:name;
+const unique T.Inserted__KAPC:name;
+const unique T.Type__KDEVICE_QUEUE:name;
+const unique T.Size__KDEVICE_QUEUE:name;
+const unique T.DeviceListHead__KDEVICE_QUEUE:name;
+const unique T.Lock__KDEVICE_QUEUE:name;
+const unique T.Busy__KDEVICE_QUEUE:name;
+const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
+const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Type__KDPC:name;
+const unique T.Importance__KDPC:name;
+const unique T.Number__KDPC:name;
+const unique T.DpcListEntry__KDPC:name;
+const unique T.DeferredRoutine__KDPC:name;
+const unique T.DeferredContext__KDPC:name;
+const unique T.SystemArgument1__KDPC:name;
+const unique T.SystemArgument2__KDPC:name;
+const unique T.DpcData__KDPC:name;
+const unique T.Header__KEVENT:name;
+const unique T.KeyboardIdentifier__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyboardMode__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfIndicators__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES:name;
+const unique T.InputDataQueueLength__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyRepeatMinimum__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyRepeatMaximum__KEYBOARD_ATTRIBUTES:name;
+const unique T.Type__KEYBOARD_ID:name;
+const unique T.Subtype__KEYBOARD_ID:name;
+const unique T.UnitId__KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T.UnitId__KEYBOARD_INPUT_DATA:name;
+const unique T.MakeCode__KEYBOARD_INPUT_DATA:name;
+const unique T.Flags__KEYBOARD_INPUT_DATA:name;
+const unique T.Reserved__KEYBOARD_INPUT_DATA:name;
+const unique T.ExtraInformation__KEYBOARD_INPUT_DATA:name;
+const unique T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Header__KSEMAPHORE:name;
+const unique T.Limit__KSEMAPHORE:name;
+const unique T.__unnamed_8_58ee4a31__LARGE_INTEGER:name;
+const unique T.u__LARGE_INTEGER:name;
+const unique T.QuadPart__LARGE_INTEGER:name;
+const unique T.Flink__LIST_ENTRY:name;
+const unique T.Blink__LIST_ENTRY:name;
+const unique T.LowPart__LUID:name;
+const unique T.HighPart__LUID:name;
+const unique T.Luid__LUID_AND_ATTRIBUTES:name;
+const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
+const unique T.Next__MDL:name;
+const unique T.Size__MDL:name;
+const unique T.MdlFlags__MDL:name;
+const unique T.Process__MDL:name;
+const unique T.MappedSystemVa__MDL:name;
+const unique T.StartVa__MDL:name;
+const unique T.ByteCount__MDL:name;
+const unique T.ByteOffset__MDL:name;
+const unique T.OwnerThread__OWNER_ENTRY:name;
+const unique T.__unnamed_4_6f9ac8e1__OWNER_ENTRY:name;
+const unique T.File__PORT:name;
+const unique T.Port__PORT:name;
+const unique T.Enabled__PORT:name;
+const unique T.Reserved__PORT:name;
+const unique T.Free__PORT:name;
+const unique T.SequenceD1__POWER_SEQUENCE:name;
+const unique T.SequenceD2__POWER_SEQUENCE:name;
+const unique T.SequenceD3__POWER_SEQUENCE:name;
+const unique T.SystemState__POWER_STATE:name;
+const unique T.DeviceState__POWER_STATE:name;
+const unique T.PrivilegeCount__PRIVILEGE_SET:name;
+const unique T.Control__PRIVILEGE_SET:name;
+const unique T.Privilege__PRIVILEGE_SET:name;
+const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
+const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.__unnamed_4_3a2fdc5e__SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T.Length__UNICODE_STRING:name;
+const unique T.MaximumLength__UNICODE_STRING:name;
+const unique T.Buffer__UNICODE_STRING:name;
+const unique T.Type__VPB:name;
+const unique T.Size__VPB:name;
+const unique T.Flags__VPB:name;
+const unique T.VolumeLabelLength__VPB:name;
+const unique T.DeviceObject__VPB:name;
+const unique T.RealDevice__VPB:name;
+const unique T.SerialNumber__VPB:name;
+const unique T.ReferenceCount__VPB:name;
+const unique T.VolumeLabel__VPB:name;
+const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
+const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
+const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
+const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
+const unique T.GuidCount__WMILIB_CONTEXT:name;
+const unique T.GuidList__WMILIB_CONTEXT:name;
+const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
+const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
+const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
+const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
+const unique T.Reserved___unnamed_12_0d6a30de:name;
+const unique T.MessageCount___unnamed_12_0d6a30de:name;
+const unique T.Vector___unnamed_12_0d6a30de:name;
+const unique T.Affinity___unnamed_12_0d6a30de:name;
+const unique T.Start___unnamed_12_17f5c211:name;
+const unique T.Length48___unnamed_12_17f5c211:name;
+const unique T.Start___unnamed_12_1fb42e39:name;
+const unique T.Length___unnamed_12_1fb42e39:name;
+const unique T.Reserved___unnamed_12_1fb42e39:name;
+const unique T.Start___unnamed_12_2a1563c6:name;
+const unique T.Length___unnamed_12_2a1563c6:name;
+const unique T.DataSize___unnamed_12_31347272:name;
+const unique T.Reserved1___unnamed_12_31347272:name;
+const unique T.Reserved2___unnamed_12_31347272:name;
+const unique T.Raw___unnamed_12_429aadc0:name;
+const unique T.Translated___unnamed_12_429aadc0:name;
+const unique T.Start___unnamed_12_4719de1a:name;
+const unique T.Length___unnamed_12_4719de1a:name;
+const unique T.Data___unnamed_12_4be56faa:name;
+const unique T.Data___unnamed_12_5ce25b92:name;
+const unique T.Generic___unnamed_12_7a698b72:name;
+const unique T.Port___unnamed_12_7a698b72:name;
+const unique T.Interrupt___unnamed_12_7a698b72:name;
+const unique T.MessageInterrupt___unnamed_12_7a698b72:name;
+const unique T.Memory___unnamed_12_7a698b72:name;
+const unique T.Dma___unnamed_12_7a698b72:name;
+const unique T.DevicePrivate___unnamed_12_7a698b72:name;
+const unique T.BusNumber___unnamed_12_7a698b72:name;
+const unique T.DeviceSpecificData___unnamed_12_7a698b72:name;
+const unique T.Memory40___unnamed_12_7a698b72:name;
+const unique T.Memory48___unnamed_12_7a698b72:name;
+const unique T.Memory64___unnamed_12_7a698b72:name;
+const unique T.Start___unnamed_12_87c0de8d:name;
+const unique T.Length64___unnamed_12_87c0de8d:name;
+const unique T.Start___unnamed_12_98bfc55a:name;
+const unique T.Length40___unnamed_12_98bfc55a:name;
+const unique T.Priority___unnamed_12_ab1bd9d7:name;
+const unique T.Reserved1___unnamed_12_ab1bd9d7:name;
+const unique T.Reserved2___unnamed_12_ab1bd9d7:name;
+const unique T.Level___unnamed_12_b0429be9:name;
+const unique T.Vector___unnamed_12_b0429be9:name;
+const unique T.Affinity___unnamed_12_b0429be9:name;
+const unique T.ListEntry___unnamed_12_b43e8de8:name;
+const unique T.__unnamed_4_f19b65c1___unnamed_12_b43e8de8:name;
+const unique T.Level___unnamed_12_bfdb39ee:name;
+const unique T.Vector___unnamed_12_bfdb39ee:name;
+const unique T.Affinity___unnamed_12_bfdb39ee:name;
+const unique T.Start___unnamed_12_cd42b3c3:name;
+const unique T.Length___unnamed_12_cd42b3c3:name;
+const unique T.__unnamed_12_429aadc0___unnamed_12_e668effc:name;
+const unique T.Channel___unnamed_12_e80d029e:name;
+const unique T.Port___unnamed_12_e80d029e:name;
+const unique T.Reserved1___unnamed_12_e80d029e:name;
+const unique T.Length___unnamed_16_07c0bcc5:name;
+const unique T.MinBusNumber___unnamed_16_07c0bcc5:name;
+const unique T.MaxBusNumber___unnamed_16_07c0bcc5:name;
+const unique T.Reserved___unnamed_16_07c0bcc5:name;
+const unique T.InterfaceType___unnamed_16_29cb9f2f:name;
+const unique T.Size___unnamed_16_29cb9f2f:name;
+const unique T.Version___unnamed_16_29cb9f2f:name;
+const unique T.Interface___unnamed_16_29cb9f2f:name;
+const unique T.InterfaceSpecificData___unnamed_16_29cb9f2f:name;
+const unique T.SecurityContext___unnamed_16_30f11dbf:name;
+const unique T.Options___unnamed_16_30f11dbf:name;
+const unique T.FileAttributes___unnamed_16_30f11dbf:name;
+const unique T.ShareAccess___unnamed_16_30f11dbf:name;
+const unique T.EaLength___unnamed_16_30f11dbf:name;
+const unique T.DriverContext___unnamed_16_35034f68:name;
+const unique T.Length___unnamed_16_487a9498:name;
+const unique T.FileName___unnamed_16_487a9498:name;
+const unique T.FileInformationClass___unnamed_16_487a9498:name;
+const unique T.FileIndex___unnamed_16_487a9498:name;
+const unique T.OutputBufferLength___unnamed_16_5f6a8844:name;
+const unique T.InputBufferLength___unnamed_16_5f6a8844:name;
+const unique T.FsControlCode___unnamed_16_5f6a8844:name;
+const unique T.Type3InputBuffer___unnamed_16_5f6a8844:name;
+const unique T.Length___unnamed_16_7177b9f3:name;
+const unique T.FileInformationClass___unnamed_16_7177b9f3:name;
+const unique T.FileObject___unnamed_16_7177b9f3:name;
+const unique T.__unnamed_4_43913aa5___unnamed_16_7177b9f3:name;
+const unique T.Length___unnamed_16_88e91ef6:name;
+const unique T.Key___unnamed_16_88e91ef6:name;
+const unique T.ByteOffset___unnamed_16_88e91ef6:name;
+const unique T.Length___unnamed_16_8c506c98:name;
+const unique T.Key___unnamed_16_8c506c98:name;
+const unique T.ByteOffset___unnamed_16_8c506c98:name;
+const unique T.WhichSpace___unnamed_16_9ac2e5f8:name;
+const unique T.Buffer___unnamed_16_9ac2e5f8:name;
+const unique T.Offset___unnamed_16_9ac2e5f8:name;
+const unique T.Length___unnamed_16_9ac2e5f8:name;
+const unique T.Create___unnamed_16_b93842ad:name;
+const unique T.Read___unnamed_16_b93842ad:name;
+const unique T.Write___unnamed_16_b93842ad:name;
+const unique T.QueryDirectory___unnamed_16_b93842ad:name;
+const unique T.NotifyDirectory___unnamed_16_b93842ad:name;
+const unique T.QueryFile___unnamed_16_b93842ad:name;
+const unique T.SetFile___unnamed_16_b93842ad:name;
+const unique T.QueryEa___unnamed_16_b93842ad:name;
+const unique T.SetEa___unnamed_16_b93842ad:name;
+const unique T.QueryVolume___unnamed_16_b93842ad:name;
+const unique T.SetVolume___unnamed_16_b93842ad:name;
+const unique T.FileSystemControl___unnamed_16_b93842ad:name;
+const unique T.LockControl___unnamed_16_b93842ad:name;
+const unique T.DeviceIoControl___unnamed_16_b93842ad:name;
+const unique T.QuerySecurity___unnamed_16_b93842ad:name;
+const unique T.SetSecurity___unnamed_16_b93842ad:name;
+const unique T.MountVolume___unnamed_16_b93842ad:name;
+const unique T.VerifyVolume___unnamed_16_b93842ad:name;
+const unique T.Scsi___unnamed_16_b93842ad:name;
+const unique T.QueryQuota___unnamed_16_b93842ad:name;
+const unique T.SetQuota___unnamed_16_b93842ad:name;
+const unique T.QueryDeviceRelations___unnamed_16_b93842ad:name;
+const unique T.QueryInterface___unnamed_16_b93842ad:name;
+const unique T.DeviceCapabilities___unnamed_16_b93842ad:name;
+const unique T.FilterResourceRequirements___unnamed_16_b93842ad:name;
+const unique T.ReadWriteConfig___unnamed_16_b93842ad:name;
+const unique T.SetLock___unnamed_16_b93842ad:name;
+const unique T.QueryId___unnamed_16_b93842ad:name;
+const unique T.QueryDeviceText___unnamed_16_b93842ad:name;
+const unique T.UsageNotification___unnamed_16_b93842ad:name;
+const unique T.WaitWake___unnamed_16_b93842ad:name;
+const unique T.PowerSequence___unnamed_16_b93842ad:name;
+const unique T.Power___unnamed_16_b93842ad:name;
+const unique T.StartDevice___unnamed_16_b93842ad:name;
+const unique T.WMI___unnamed_16_b93842ad:name;
+const unique T.Others___unnamed_16_b93842ad:name;
+const unique T.Length___unnamed_16_b9c62eab:name;
+const unique T.Key___unnamed_16_b9c62eab:name;
+const unique T.ByteOffset___unnamed_16_b9c62eab:name;
+const unique T.__unnamed_4_7d9d0c7e___unnamed_16_bb584060:name;
+const unique T.Type___unnamed_16_bb584060:name;
+const unique T.State___unnamed_16_bb584060:name;
+const unique T.ShutdownType___unnamed_16_bb584060:name;
+const unique T.OutputBufferLength___unnamed_16_dba55c7c:name;
+const unique T.InputBufferLength___unnamed_16_dba55c7c:name;
+const unique T.IoControlCode___unnamed_16_dba55c7c:name;
+const unique T.Type3InputBuffer___unnamed_16_dba55c7c:name;
+const unique T.DeviceQueueEntry___unnamed_16_e70c268b:name;
+const unique T.__unnamed_16_35034f68___unnamed_16_e70c268b:name;
+const unique T.Argument1___unnamed_16_e734d694:name;
+const unique T.Argument2___unnamed_16_e734d694:name;
+const unique T.Argument3___unnamed_16_e734d694:name;
+const unique T.Argument4___unnamed_16_e734d694:name;
+const unique T.ProviderId___unnamed_16_eac6dbea:name;
+const unique T.DataPath___unnamed_16_eac6dbea:name;
+const unique T.BufferSize___unnamed_16_eac6dbea:name;
+const unique T.Buffer___unnamed_16_eac6dbea:name;
+const unique T.Length___unnamed_16_f6cae4c2:name;
+const unique T.EaList___unnamed_16_f6cae4c2:name;
+const unique T.EaListLength___unnamed_16_f6cae4c2:name;
+const unique T.EaIndex___unnamed_16_f6cae4c2:name;
+const unique T.Length___unnamed_16_fe36e4f4:name;
+const unique T.StartSid___unnamed_16_fe36e4f4:name;
+const unique T.SidList___unnamed_16_fe36e4f4:name;
+const unique T.SidListLength___unnamed_16_fe36e4f4:name;
+const unique T.Abandoned___unnamed_1_29794256:name;
+const unique T.Absolute___unnamed_1_29794256:name;
+const unique T.NpxIrql___unnamed_1_29794256:name;
+const unique T.Signalling___unnamed_1_29794256:name;
+const unique T.Inserted___unnamed_1_2dc63b48:name;
+const unique T.DebugActive___unnamed_1_2dc63b48:name;
+const unique T.DpcActive___unnamed_1_2dc63b48:name;
+const unique T.Size___unnamed_1_2ef8da39:name;
+const unique T.Hand___unnamed_1_2ef8da39:name;
+const unique T.Lock___unnamed_1_faa7dc71:name;
+const unique T.MinimumVector___unnamed_20_f4d2e6d8:name;
+const unique T.MaximumVector___unnamed_20_f4d2e6d8:name;
+const unique T.AffinityPolicy___unnamed_20_f4d2e6d8:name;
+const unique T.PriorityPolicy___unnamed_20_f4d2e6d8:name;
+const unique T.TargetedProcessors___unnamed_20_f4d2e6d8:name;
+const unique T.Length___unnamed_24_41cbc8c0:name;
+const unique T.Alignment___unnamed_24_41cbc8c0:name;
+const unique T.MinimumAddress___unnamed_24_41cbc8c0:name;
+const unique T.MaximumAddress___unnamed_24_41cbc8c0:name;
+const unique T.Length48___unnamed_24_5419c914:name;
+const unique T.Alignment48___unnamed_24_5419c914:name;
+const unique T.MinimumAddress___unnamed_24_5419c914:name;
+const unique T.MaximumAddress___unnamed_24_5419c914:name;
+const unique T.Length___unnamed_24_67a5ff10:name;
+const unique T.Alignment___unnamed_24_67a5ff10:name;
+const unique T.MinimumAddress___unnamed_24_67a5ff10:name;
+const unique T.MaximumAddress___unnamed_24_67a5ff10:name;
+const unique T.Port___unnamed_24_72c3976e:name;
+const unique T.Memory___unnamed_24_72c3976e:name;
+const unique T.Interrupt___unnamed_24_72c3976e:name;
+const unique T.Dma___unnamed_24_72c3976e:name;
+const unique T.Generic___unnamed_24_72c3976e:name;
+const unique T.DevicePrivate___unnamed_24_72c3976e:name;
+const unique T.BusNumber___unnamed_24_72c3976e:name;
+const unique T.ConfigData___unnamed_24_72c3976e:name;
+const unique T.Memory40___unnamed_24_72c3976e:name;
+const unique T.Memory48___unnamed_24_72c3976e:name;
+const unique T.Memory64___unnamed_24_72c3976e:name;
+const unique T.Length64___unnamed_24_a26050bb:name;
+const unique T.Alignment64___unnamed_24_a26050bb:name;
+const unique T.MinimumAddress___unnamed_24_a26050bb:name;
+const unique T.MaximumAddress___unnamed_24_a26050bb:name;
+const unique T.Length___unnamed_24_b8f476db:name;
+const unique T.Alignment___unnamed_24_b8f476db:name;
+const unique T.MinimumAddress___unnamed_24_b8f476db:name;
+const unique T.MaximumAddress___unnamed_24_b8f476db:name;
+const unique T.Length40___unnamed_24_d09044b4:name;
+const unique T.Alignment40___unnamed_24_d09044b4:name;
+const unique T.MinimumAddress___unnamed_24_d09044b4:name;
+const unique T.MaximumAddress___unnamed_24_d09044b4:name;
+const unique T.ReplaceIfExists___unnamed_2_46cc4597:name;
+const unique T.AdvanceOnly___unnamed_2_46cc4597:name;
+const unique T.__unnamed_16_e70c268b___unnamed_40_7218f704:name;
+const unique T.Thread___unnamed_40_7218f704:name;
+const unique T.AuxiliaryBuffer___unnamed_40_7218f704:name;
+const unique T.__unnamed_12_b43e8de8___unnamed_40_7218f704:name;
+const unique T.OriginalFileObject___unnamed_40_7218f704:name;
+const unique T.ListEntry___unnamed_40_c55c9377:name;
+const unique T.Wcb___unnamed_40_c55c9377:name;
+const unique T.InitialPrivilegeSet___unnamed_44_5584090d:name;
+const unique T.PrivilegeSet___unnamed_44_5584090d:name;
+const unique T.Overlay___unnamed_48_cf99b13f:name;
+const unique T.Apc___unnamed_48_cf99b13f:name;
+const unique T.CompletionKey___unnamed_48_cf99b13f:name;
+const unique T.PowerState___unnamed_4_069846fb:name;
+const unique T.IdType___unnamed_4_224c32f4:name;
+const unique T.Capabilities___unnamed_4_2de698da:name;
+const unique T.__unnamed_4_c3479730___unnamed_4_3a2fdc5e:name;
+const unique T.ContextAsUlong___unnamed_4_3a2fdc5e:name;
+const unique T.Length___unnamed_4_3a4c1a13:name;
+const unique T.__unnamed_2_46cc4597___unnamed_4_43913aa5:name;
+const unique T.ClusterCount___unnamed_4_43913aa5:name;
+const unique T.DeleteHandle___unnamed_4_43913aa5:name;
+const unique T.UserApcRoutine___unnamed_4_4e8dd2ba:name;
+const unique T.IssuingProcess___unnamed_4_4e8dd2ba:name;
+const unique T.Srb___unnamed_4_52603077:name;
+const unique T.Address___unnamed_4_52c594f7:name;
+const unique T.CreatorBackTraceIndex___unnamed_4_52c594f7:name;
+const unique T.Type___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_29794256___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_2ef8da39___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_2dc63b48___unnamed_4_5ca00198:name;
+const unique T.MasterIrp___unnamed_4_6ac6463c:name;
+const unique T.IrpCount___unnamed_4_6ac6463c:name;
+const unique T.SystemBuffer___unnamed_4_6ac6463c:name;
+const unique T.OwnerCount___unnamed_4_6f9ac8e1:name;
+const unique T.TableSize___unnamed_4_6f9ac8e1:name;
+const unique T.PowerSequence___unnamed_4_7a02167b:name;
+const unique T.SystemContext___unnamed_4_7d9d0c7e:name;
+const unique T.SystemPowerStateContext___unnamed_4_7d9d0c7e:name;
+const unique T.IoResourceRequirementList___unnamed_4_82f7a864:name;
+const unique T.Length___unnamed_4_9aec220b:name;
+const unique T.__unnamed_4_5ca00198___unnamed_4_a97c65a1:name;
+const unique T.Lock___unnamed_4_a97c65a1:name;
+const unique T.Reserved1___unnamed_4_c3479730:name;
+const unique T.TargetSystemState___unnamed_4_c3479730:name;
+const unique T.EffectiveSystemState___unnamed_4_c3479730:name;
+const unique T.CurrentSystemState___unnamed_4_c3479730:name;
+const unique T.IgnoreHibernationPath___unnamed_4_c3479730:name;
+const unique T.PseudoTransition___unnamed_4_c3479730:name;
+const unique T.Reserved2___unnamed_4_c3479730:name;
+const unique T.Status___unnamed_4_d99b6e2b:name;
+const unique T.Pointer___unnamed_4_d99b6e2b:name;
+const unique T.CurrentStackLocation___unnamed_4_f19b65c1:name;
+const unique T.PacketType___unnamed_4_f19b65c1:name;
+const unique T.Type___unnamed_4_fa10fc16:name;
+const unique T.SecurityInformation___unnamed_8_01efa60d:name;
+const unique T.Length___unnamed_8_01efa60d:name;
+const unique T.MinimumChannel___unnamed_8_08d4cef8:name;
+const unique T.MaximumChannel___unnamed_8_08d4cef8:name;
+const unique T.__unnamed_4_4e8dd2ba___unnamed_8_0a898c0c:name;
+const unique T.UserApcContext___unnamed_8_0a898c0c:name;
+const unique T.SecurityInformation___unnamed_8_1330f93a:name;
+const unique T.SecurityDescriptor___unnamed_8_1330f93a:name;
+const unique T.AsynchronousParameters___unnamed_8_181d0de9:name;
+const unique T.AllocationSize___unnamed_8_181d0de9:name;
+const unique T.Vpb___unnamed_8_4812764d:name;
+const unique T.DeviceObject___unnamed_8_4812764d:name;
+const unique T.Length___unnamed_8_559a91e6:name;
+const unique T.FsInformationClass___unnamed_8_559a91e6:name;
+const unique T.Length___unnamed_8_5845b309:name;
+const unique T.FileInformationClass___unnamed_8_5845b309:name;
+const unique T.LowPart___unnamed_8_58ee4a31:name;
+const unique T.HighPart___unnamed_8_58ee4a31:name;
+const unique T.AllocatedResources___unnamed_8_61acf4ce:name;
+const unique T.AllocatedResourcesTranslated___unnamed_8_61acf4ce:name;
+const unique T.DeviceTextType___unnamed_8_6acfee04:name;
+const unique T.LocaleId___unnamed_8_6acfee04:name;
+const unique T.Length___unnamed_8_7f26a9dd:name;
+const unique T.CompletionFilter___unnamed_8_7f26a9dd:name;
+const unique T.Vpb___unnamed_8_87add0bd:name;
+const unique T.DeviceObject___unnamed_8_87add0bd:name;
+const unique T.InPath___unnamed_8_b2773e4c:name;
+const unique T.Reserved___unnamed_8_b2773e4c:name;
+const unique T.Type___unnamed_8_b2773e4c:name;
+const unique T.Length___unnamed_8_de890d4e:name;
+const unique T.FsInformationClass___unnamed_8_de890d4e:name;
+const unique T.LowPart___unnamed_8_ef9ba0d3:name;
+const unique T.HighPart___unnamed_8_ef9ba0d3:name;
+
+// Type declarations
+
+const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_LIST:name;
+const unique T.A1_LUID_AND_ATTRIBUTES:name;
+const unique T.A256UINT2:name;
+const unique T.A28PFDRIVER_DISPATCH:name;
+const unique T.A2UCHAR:name;
+const unique T.A2UINT2:name;
+const unique T.A32UINT2:name;
+const unique T.A3UCHAR:name;
+const unique T.A3UINT4:name;
+const unique T.A3_LUID_AND_ATTRIBUTES:name;
+const unique T.A4PVOID:name;
+const unique T.A4UINT4:name;
+const unique T.A5UINT2:name;
+const unique T.A5_DEVICE_POWER_STATE:name;
+const unique T.A7_DEVICE_POWER_STATE:name;
+const unique T.A88CHAR:name;
+const unique T.A8UCHAR:name;
+const unique T.A9UINT2:name;
+const unique T.BUS_QUERY_ID_TYPE:name;
+const unique T.CHAR:name;
+const unique T.DEVICE_TEXT_TYPE:name;
+const unique T.F0:name;
+const unique T.F1:name;
+const unique T.F10:name;
+const unique T.F11:name;
+const unique T.F12:name;
+const unique T.F13:name;
+const unique T.F14:name;
+const unique T.F15:name;
+const unique T.F16:name;
+const unique T.F17:name;
+const unique T.F18:name;
+const unique T.F19:name;
+const unique T.F2:name;
+const unique T.F20:name;
+const unique T.F21:name;
+const unique T.F22:name;
+const unique T.F23:name;
+const unique T.F24:name;
+const unique T.F25:name;
+const unique T.F26:name;
+const unique T.F27:name;
+const unique T.F28:name;
+const unique T.F29:name;
+const unique T.F3:name;
+const unique T.F30:name;
+const unique T.F31:name;
+const unique T.F32:name;
+const unique T.F33:name;
+const unique T.F34:name;
+const unique T.F35:name;
+const unique T.F36:name;
+const unique T.F37:name;
+const unique T.F38:name;
+const unique T.F4:name;
+const unique T.F5:name;
+const unique T.F6:name;
+const unique T.F7:name;
+const unique T.F8:name;
+const unique T.F9:name;
+const unique T.FDRIVER_ADD_DEVICE:name;
+const unique T.FDRIVER_CANCEL:name;
+const unique T.FDRIVER_CONTROL:name;
+const unique T.FDRIVER_DISPATCH:name;
+const unique T.FDRIVER_INITIALIZE:name;
+const unique T.FDRIVER_STARTIO:name;
+const unique T.FDRIVER_UNLOAD:name;
+const unique T.FFAST_IO_ACQUIRE_FILE:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.FFAST_IO_DETACH_DEVICE:name;
+const unique T.FFAST_IO_DEVICE_CONTROL:name;
+const unique T.FFAST_IO_LOCK:name;
+const unique T.FFAST_IO_MDL_READ:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.FFAST_IO_QUERY_OPEN:name;
+const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.FFAST_IO_READ:name;
+const unique T.FFAST_IO_READ_COMPRESSED:name;
+const unique T.FFAST_IO_RELEASE_FILE:name;
+const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_UNLOCK_ALL:name;
+const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.FFAST_IO_UNLOCK_SINGLE:name;
+const unique T.FFAST_IO_WRITE:name;
+const unique T.FFAST_IO_WRITE_COMPRESSED:name;
+const unique T.FIO_COMPLETION_ROUTINE:name;
+const unique T.FKDEFERRED_ROUTINE:name;
+const unique T.INT2:name;
+const unique T.INT4:name;
+const unique T.INT8:name;
+const unique T.PA256UINT2:name;
+const unique T.PA2UINT2:name;
+const unique T.PA4UINT4:name;
+const unique T.PA5UINT2:name;
+const unique T.PA88CHAR:name;
+const unique T.PA9UINT2:name;
+const unique T.PCHAR:name;
+const unique T.PF19:name;
+const unique T.PF21:name;
+const unique T.PF23:name;
+const unique T.PF24:name;
+const unique T.PF25:name;
+const unique T.PF33:name;
+const unique T.PF34:name;
+const unique T.PF35:name;
+const unique T.PF36:name;
+const unique T.PF37:name;
+const unique T.PF38:name;
+const unique T.PFDRIVER_ADD_DEVICE:name;
+const unique T.PFDRIVER_CANCEL:name;
+const unique T.PFDRIVER_CONTROL:name;
+const unique T.PFDRIVER_DISPATCH:name;
+const unique T.PFDRIVER_INITIALIZE:name;
+const unique T.PFDRIVER_STARTIO:name;
+const unique T.PFDRIVER_UNLOAD:name;
+const unique T.PFFAST_IO_ACQUIRE_FILE:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.PFFAST_IO_DETACH_DEVICE:name;
+const unique T.PFFAST_IO_DEVICE_CONTROL:name;
+const unique T.PFFAST_IO_LOCK:name;
+const unique T.PFFAST_IO_MDL_READ:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.PFFAST_IO_QUERY_OPEN:name;
+const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.PFFAST_IO_READ:name;
+const unique T.PFFAST_IO_READ_COMPRESSED:name;
+const unique T.PFFAST_IO_RELEASE_FILE:name;
+const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_UNLOCK_ALL:name;
+const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
+const unique T.PFFAST_IO_WRITE:name;
+const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
+const unique T.PFIO_COMPLETION_ROUTINE:name;
+const unique T.PFKDEFERRED_ROUTINE:name;
+const unique T.PINT4:name;
+const unique T.POWER_ACTION:name;
+const unique T.PPCHAR:name;
+const unique T.PPF24:name;
+const unique T.PPPUINT2:name;
+const unique T.PPP_DEVICE_OBJECT:name;
+const unique T.PPP_FILE_OBJECT:name;
+const unique T.PPUINT2:name;
+const unique T.PPUINT4:name;
+const unique T.PPVOID:name;
+const unique T.PP_DEVICE_EXTENSION:name;
+const unique T.PP_DEVICE_OBJECT:name;
+const unique T.PP_DRIVER_OBJECT:name;
+const unique T.PP_ERESOURCE:name;
+const unique T.PP_FAST_MUTEX:name;
+const unique T.PP_FILE_OBJECT:name;
+const unique T.PP_LIST_ENTRY:name;
+const unique T.PP_MDL:name;
+const unique T.PP_PORT:name;
+const unique T.PP_UNICODE_STRING:name;
+const unique T.PUCHAR:name;
+const unique T.PUINT2:name;
+const unique T.PUINT4:name;
+const unique T.PVOID:name;
+const unique T.PWMIGUIDREGINFO:name;
+const unique T.P_ACCESS_STATE:name;
+const unique T.P_CM_RESOURCE_LIST:name;
+const unique T.P_COMPRESSED_DATA_INFO:name;
+const unique T.P_DEVICE_CAPABILITIES:name;
+const unique T.P_DEVICE_EXTENSION:name;
+const unique T.P_DEVICE_OBJECT:name;
+const unique T.P_DEVOBJ_EXTENSION:name;
+const unique T.P_DRIVER_EXTENSION:name;
+const unique T.P_DRIVER_OBJECT:name;
+const unique T.P_EPROCESS:name;
+const unique T.P_ERESOURCE:name;
+const unique T.P_ETHREAD:name;
+const unique T.P_FAST_IO_DISPATCH:name;
+const unique T.P_FAST_MUTEX:name;
+const unique T.P_FILE_BASIC_INFORMATION:name;
+const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
+const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.P_FILE_OBJECT:name;
+const unique T.P_FILE_STANDARD_INFORMATION:name;
+const unique T.P_GLOBALS:name;
+const unique T.P_GUID:name;
+const unique T.P_INTERFACE:name;
+const unique T.P_IO_COMPLETION_CONTEXT:name;
+const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.P_IO_SECURITY_CONTEXT:name;
+const unique T.P_IO_STACK_LOCATION:name;
+const unique T.P_IO_STATUS_BLOCK:name;
+const unique T.P_IO_TIMER:name;
+const unique T.P_IRP:name;
+const unique T.P_KAPC:name;
+const unique T.P_KDPC:name;
+const unique T.P_KEVENT:name;
+const unique T.P_KEYBOARD_INPUT_DATA:name;
+const unique T.P_KSEMAPHORE:name;
+const unique T.P_KTHREAD:name;
+const unique T.P_LARGE_INTEGER:name;
+const unique T.P_LIST_ENTRY:name;
+const unique T.P_MDL:name;
+const unique T.P_OWNER_ENTRY:name;
+const unique T.P_POOL_TYPE:name;
+const unique T.P_PORT:name;
+const unique T.P_POWER_SEQUENCE:name;
+const unique T.P_SCSI_REQUEST_BLOCK:name;
+const unique T.P_SECTION_OBJECT_POINTERS:name;
+const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.P_UNICODE_STRING:name;
+const unique T.P_VPB:name;
+const unique T.UCHAR:name;
+const unique T.UINT2:name;
+const unique T.UINT4:name;
+const unique T.VOID:name;
+const unique T.WMIENABLEDISABLECONTROL:name;
+const unique T.WMIGUIDREGINFO:name;
+const unique T._ACCESS_STATE:name;
+const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_LIST:name;
+const unique T._CM_RESOURCE_LIST:name;
+const unique T._COMPRESSED_DATA_INFO:name;
+const unique T._DEVICE_CAPABILITIES:name;
+const unique T._DEVICE_EXTENSION:name;
+const unique T._DEVICE_OBJECT:name;
+const unique T._DEVICE_POWER_STATE:name;
+const unique T._DEVICE_RELATION_TYPE:name;
+const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
+const unique T._DEVOBJ_EXTENSION:name;
+const unique T._DISPATCHER_HEADER:name;
+const unique T._DRIVER_EXTENSION:name;
+const unique T._DRIVER_OBJECT:name;
+const unique T._EPROCESS:name;
+const unique T._ERESOURCE:name;
+const unique T._ETHREAD:name;
+const unique T._FAST_IO_DISPATCH:name;
+const unique T._FAST_MUTEX:name;
+const unique T._FILE_BASIC_INFORMATION:name;
+const unique T._FILE_GET_QUOTA_INFORMATION:name;
+const unique T._FILE_INFORMATION_CLASS:name;
+const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T._FILE_OBJECT:name;
+const unique T._FILE_STANDARD_INFORMATION:name;
+const unique T._FSINFOCLASS:name;
+const unique T._GLOBALS:name;
+const unique T._GUID:name;
+const unique T._INITIAL_PRIVILEGE_SET:name;
+const unique T._INTERFACE:name;
+const unique T._INTERFACE_TYPE:name;
+const unique T._IO_ALLOCATION_ACTION:name;
+const unique T._IO_COMPLETION_CONTEXT:name;
+const unique T._IO_REMOVE_LOCK:name;
+const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T._IO_RESOURCE_DESCRIPTOR:name;
+const unique T._IO_RESOURCE_LIST:name;
+const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T._IO_SECURITY_CONTEXT:name;
+const unique T._IO_STACK_LOCATION:name;
+const unique T._IO_STATUS_BLOCK:name;
+const unique T._IO_TIMER:name;
+const unique T._IRP:name;
+const unique T._IRQ_DEVICE_POLICY:name;
+const unique T._IRQ_PRIORITY:name;
+const unique T._KAPC:name;
+const unique T._KDEVICE_QUEUE:name;
+const unique T._KDEVICE_QUEUE_ENTRY:name;
+const unique T._KDPC:name;
+const unique T._KEVENT:name;
+const unique T._KEYBOARD_ATTRIBUTES:name;
+const unique T._KEYBOARD_ID:name;
+const unique T._KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T._KEYBOARD_INPUT_DATA:name;
+const unique T._KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T._KSEMAPHORE:name;
+const unique T._KTHREAD:name;
+const unique T._LARGE_INTEGER:name;
+const unique T._LIST_ENTRY:name;
+const unique T._LUID:name;
+const unique T._LUID_AND_ATTRIBUTES:name;
+const unique T._MDL:name;
+const unique T._OWNER_ENTRY:name;
+const unique T._POOL_TYPE:name;
+const unique T._PORT:name;
+const unique T._POWER_SEQUENCE:name;
+const unique T._POWER_STATE:name;
+const unique T._POWER_STATE_TYPE:name;
+const unique T._PRIVILEGE_SET:name;
+const unique T._SCSI_REQUEST_BLOCK:name;
+const unique T._SECTION_OBJECT_POINTERS:name;
+const unique T._SECURITY_IMPERSONATION_LEVEL:name;
+const unique T._SECURITY_QUALITY_OF_SERVICE:name;
+const unique T._SECURITY_SUBJECT_CONTEXT:name;
+const unique T._SYSTEM_POWER_STATE:name;
+const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T._UNICODE_STRING:name;
+const unique T._VPB:name;
+const unique T._WAIT_CONTEXT_BLOCK:name;
+const unique T._WMILIB_CONTEXT:name;
+const unique T.__unnamed_12_0d6a30de:name;
+const unique T.__unnamed_12_17f5c211:name;
+const unique T.__unnamed_12_1fb42e39:name;
+const unique T.__unnamed_12_2a1563c6:name;
+const unique T.__unnamed_12_31347272:name;
+const unique T.__unnamed_12_429aadc0:name;
+const unique T.__unnamed_12_4719de1a:name;
+const unique T.__unnamed_12_4be56faa:name;
+const unique T.__unnamed_12_5ce25b92:name;
+const unique T.__unnamed_12_7a698b72:name;
+const unique T.__unnamed_12_87c0de8d:name;
+const unique T.__unnamed_12_98bfc55a:name;
+const unique T.__unnamed_12_ab1bd9d7:name;
+const unique T.__unnamed_12_b0429be9:name;
+const unique T.__unnamed_12_b43e8de8:name;
+const unique T.__unnamed_12_bfdb39ee:name;
+const unique T.__unnamed_12_cd42b3c3:name;
+const unique T.__unnamed_12_e668effc:name;
+const unique T.__unnamed_12_e80d029e:name;
+const unique T.__unnamed_16_07c0bcc5:name;
+const unique T.__unnamed_16_29cb9f2f:name;
+const unique T.__unnamed_16_30f11dbf:name;
+const unique T.__unnamed_16_35034f68:name;
+const unique T.__unnamed_16_487a9498:name;
+const unique T.__unnamed_16_5f6a8844:name;
+const unique T.__unnamed_16_7177b9f3:name;
+const unique T.__unnamed_16_88e91ef6:name;
+const unique T.__unnamed_16_8c506c98:name;
+const unique T.__unnamed_16_9ac2e5f8:name;
+const unique T.__unnamed_16_b93842ad:name;
+const unique T.__unnamed_16_b9c62eab:name;
+const unique T.__unnamed_16_bb584060:name;
+const unique T.__unnamed_16_dba55c7c:name;
+const unique T.__unnamed_16_e70c268b:name;
+const unique T.__unnamed_16_e734d694:name;
+const unique T.__unnamed_16_eac6dbea:name;
+const unique T.__unnamed_16_f6cae4c2:name;
+const unique T.__unnamed_16_fe36e4f4:name;
+const unique T.__unnamed_1_29794256:name;
+const unique T.__unnamed_1_2dc63b48:name;
+const unique T.__unnamed_1_2ef8da39:name;
+const unique T.__unnamed_1_faa7dc71:name;
+const unique T.__unnamed_20_f4d2e6d8:name;
+const unique T.__unnamed_24_41cbc8c0:name;
+const unique T.__unnamed_24_5419c914:name;
+const unique T.__unnamed_24_67a5ff10:name;
+const unique T.__unnamed_24_72c3976e:name;
+const unique T.__unnamed_24_a26050bb:name;
+const unique T.__unnamed_24_b8f476db:name;
+const unique T.__unnamed_24_d09044b4:name;
+const unique T.__unnamed_2_46cc4597:name;
+const unique T.__unnamed_40_7218f704:name;
+const unique T.__unnamed_40_c55c9377:name;
+const unique T.__unnamed_44_5584090d:name;
+const unique T.__unnamed_48_cf99b13f:name;
+const unique T.__unnamed_4_069846fb:name;
+const unique T.__unnamed_4_224c32f4:name;
+const unique T.__unnamed_4_2de698da:name;
+const unique T.__unnamed_4_3a2fdc5e:name;
+const unique T.__unnamed_4_3a4c1a13:name;
+const unique T.__unnamed_4_43913aa5:name;
+const unique T.__unnamed_4_4e8dd2ba:name;
+const unique T.__unnamed_4_52603077:name;
+const unique T.__unnamed_4_52c594f7:name;
+const unique T.__unnamed_4_5ca00198:name;
+const unique T.__unnamed_4_6ac6463c:name;
+const unique T.__unnamed_4_6f9ac8e1:name;
+const unique T.__unnamed_4_7a02167b:name;
+const unique T.__unnamed_4_7d9d0c7e:name;
+const unique T.__unnamed_4_82f7a864:name;
+const unique T.__unnamed_4_9aec220b:name;
+const unique T.__unnamed_4_a97c65a1:name;
+const unique T.__unnamed_4_c3479730:name;
+const unique T.__unnamed_4_d99b6e2b:name;
+const unique T.__unnamed_4_f19b65c1:name;
+const unique T.__unnamed_4_fa10fc16:name;
+const unique T.__unnamed_8_01efa60d:name;
+const unique T.__unnamed_8_08d4cef8:name;
+const unique T.__unnamed_8_0a898c0c:name;
+const unique T.__unnamed_8_1330f93a:name;
+const unique T.__unnamed_8_181d0de9:name;
+const unique T.__unnamed_8_4812764d:name;
+const unique T.__unnamed_8_559a91e6:name;
+const unique T.__unnamed_8_5845b309:name;
+const unique T.__unnamed_8_58ee4a31:name;
+const unique T.__unnamed_8_61acf4ce:name;
+const unique T.__unnamed_8_6acfee04:name;
+const unique T.__unnamed_8_7f26a9dd:name;
+const unique T.__unnamed_8_87add0bd:name;
+const unique T.__unnamed_8_b2773e4c:name;
+const unique T.__unnamed_8_de890d4e:name;
+const unique T.__unnamed_8_ef9ba0d3:name;
+
+function AssocClassList__GLOBALS(int) returns (int);
+function AssocClassList__GLOBALSInv(int) returns (int);
+function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
+function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
+function BaseClassName__GLOBALS(int) returns (int);
+function BaseClassName__GLOBALSInv(int) returns (int);
+function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
+function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 368);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 368);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 368, 1) == BaseClassName__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 368)} MINUS_LEFT_PTR(x, 1, 368) == BaseClassName__GLOBALSInv(x));
+function Buffer__UNICODE_STRING(int) returns (int);
+function Buffer__UNICODE_STRINGInv(int) returns (int);
+function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
+function DataIn__DEVICE_EXTENSION(int) returns (int);
+function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
+function DataOut__DEVICE_EXTENSION(int) returns (int);
+function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
+function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
+function File__DEVICE_EXTENSION(int) returns (int);
+function File__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 280);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 280);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1) == File__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 280)} MINUS_LEFT_PTR(x, 1, 280) == File__DEVICE_EXTENSIONInv(x));
+function File__PORT(int) returns (int);
+function File__PORTInv(int) returns (int);
+function _S_File__PORT([int]bool) returns ([int]bool);
+function _S_File__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
+
+axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
+function Flags__DEVICE_OBJECT(int) returns (int);
+function Flags__DEVICE_OBJECTInv(int) returns (int);
+function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
+function Flink__LIST_ENTRY(int) returns (int);
+function Flink__LIST_ENTRYInv(int) returns (int);
+function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
+function Free__PORT(int) returns (int);
+function Free__PORTInv(int) returns (int);
+function _S_Free__PORT([int]bool) returns ([int]bool);
+function _S_Free__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
+
+axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
+function GrandMaster__GLOBALS(int) returns (int);
+function GrandMaster__GLOBALSInv(int) returns (int);
+function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
+function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
+function InitExtension__GLOBALS(int) returns (int);
+function InitExtension__GLOBALSInv(int) returns (int);
+function _S_InitExtension__GLOBALS([int]bool) returns ([int]bool);
+function _S_InitExtension__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InitExtension__GLOBALSInv(InitExtension__GLOBALS(x))} InitExtension__GLOBALSInv(InitExtension__GLOBALS(x)) == x);
+axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALS(InitExtension__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALS(S)[x]} _S_InitExtension__GLOBALS(S)[x] <==> S[InitExtension__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALSInv(S)[x]} _S_InitExtension__GLOBALSInv(S)[x] <==> S[InitExtension__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALS(S)} S[x] ==> _S_InitExtension__GLOBALS(S)[InitExtension__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALSInv(S)} S[x] ==> _S_InitExtension__GLOBALSInv(S)[InitExtension__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {InitExtension__GLOBALS(x)} InitExtension__GLOBALS(x) == x + 72);
+axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALSInv(x) == x - 72);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 72, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 72, 1) == InitExtension__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 72)} MINUS_LEFT_PTR(x, 1, 72) == InitExtension__GLOBALSInv(x));
+function InputData__DEVICE_EXTENSION(int) returns (int);
+function InputData__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
+function LegacyDeviceList__GLOBALS(int) returns (int);
+function LegacyDeviceList__GLOBALSInv(int) returns (int);
+function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
+function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 888);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 888);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1) == LegacyDeviceList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 888)} MINUS_LEFT_PTR(x, 1, 888) == LegacyDeviceList__GLOBALSInv(x));
+function Length__UNICODE_STRING(int) returns (int);
+function Length__UNICODE_STRINGInv(int) returns (int);
+function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
+function Link__DEVICE_EXTENSION(int) returns (int);
+function Link__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 272);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 272);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1) == Link__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 272)} MINUS_LEFT_PTR(x, 1, 272) == Link__DEVICE_EXTENSIONInv(x));
+function MaximumLength__UNICODE_STRING(int) returns (int);
+function MaximumLength__UNICODE_STRINGInv(int) returns (int);
+function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
+function Mutex__GLOBALS(int) returns (int);
+function Mutex__GLOBALSInv(int) returns (int);
+function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
+function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
+function NumberLegacyPorts__GLOBALS(int) returns (int);
+function NumberLegacyPorts__GLOBALSInv(int) returns (int);
+function _S_NumberLegacyPorts__GLOBALS([int]bool) returns ([int]bool);
+function _S_NumberLegacyPorts__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x))} NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x)) == x);
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALS(NumberLegacyPorts__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALS(S)[x]} _S_NumberLegacyPorts__GLOBALS(S)[x] <==> S[NumberLegacyPorts__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALSInv(S)[x]} _S_NumberLegacyPorts__GLOBALSInv(S)[x] <==> S[NumberLegacyPorts__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALS(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALS(S)[NumberLegacyPorts__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALSInv(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALSInv(S)[NumberLegacyPorts__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALS(x)} NumberLegacyPorts__GLOBALS(x) == x + 20);
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALSInv(x) == x - 20);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == NumberLegacyPorts__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == NumberLegacyPorts__GLOBALSInv(x));
+function PnP__DEVICE_EXTENSION(int) returns (int);
+function PnP__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
+function Port__PORT(int) returns (int);
+function Port__PORTInv(int) returns (int);
+function _S_Port__PORT([int]bool) returns ([int]bool);
+function _S_Port__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
+
+axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
+function PortsServiced__GLOBALS(int) returns (int);
+function PortsServiced__GLOBALSInv(int) returns (int);
+function _S_PortsServiced__GLOBALS([int]bool) returns ([int]bool);
+function _S_PortsServiced__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x))} PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x)) == x);
+axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALS(PortsServiced__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALS(S)[x]} _S_PortsServiced__GLOBALS(S)[x] <==> S[PortsServiced__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALSInv(S)[x]} _S_PortsServiced__GLOBALSInv(S)[x] <==> S[PortsServiced__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALS(S)} S[x] ==> _S_PortsServiced__GLOBALS(S)[PortsServiced__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALSInv(S)} S[x] ==> _S_PortsServiced__GLOBALSInv(S)[PortsServiced__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {PortsServiced__GLOBALS(x)} PortsServiced__GLOBALS(x) == x + 64);
+axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALSInv(x) == x - 64);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1) == PortsServiced__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 64)} MINUS_LEFT_PTR(x, 1, 64) == PortsServiced__GLOBALSInv(x));
+function Self__DEVICE_EXTENSION(int) returns (int);
+function Self__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
+function StackSize__DEVICE_OBJECT(int) returns (int);
+function StackSize__DEVICE_OBJECTInv(int) returns (int);
+function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
+function Started__DEVICE_EXTENSION(int) returns (int);
+function Started__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
+function TopPort__DEVICE_EXTENSION(int) returns (int);
+function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
+function UnitId__DEVICE_EXTENSION(int) returns (int);
+function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 196);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 196);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1) == UnitId__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 196)} MINUS_LEFT_PTR(x, 1, 196) == UnitId__DEVICE_EXTENSIONInv(x));
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure nondet_choice() returns (x:int);
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+var Res_DEVICE_STACK:[int]int;
+var Res_DEV_EXTN:[int]int;
+var Res_DEV_OBJ_INIT:[int]int;
+var Res_SPIN_LOCK:[int]int;
+
+
+
+////////////////////
+// Between predicate
+////////////////////
+function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
+function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
+
+
+//////////////////////////
+// Between set constructor
+//////////////////////////
+function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
+
+////////////////////////////////////////////////////
+// axioms relating ReachBetween and ReachBetweenSet
+////////////////////////////////////////////////////
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
+axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
+
+
+//////////////////////////
+// Axioms for ReachBetween
+//////////////////////////
+
+// reflexive
+axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
+
+// step
+//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
+axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
+
+// reach
+axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
+
+// cycle
+axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
+
+// sandwich
+axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
+
+// order1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
+
+// order2
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
+
+// transitive1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
+
+// transitive2
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
+
+// transitive3
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
+
+// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
+// It cannot be proved using the rest of the axioms.
+axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
+
+// relation between ReachAvoiding and ReachBetween
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
+
+// update
+axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
+ ///////////////////////////////
+ // Shifts for linking fields
+ ///////////////////////////////
+function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
+axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
+axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
+
+const unique Globals : int;
+axiom(Globals != 0);
+// the set of constants for 64 bit integers that Boogie doesn't parse
+const unique BOOGIE_LARGE_INT_3221553153:int;
+
+
+
+procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure InsertTailList($ListHead$1$6980.24$InsertTailList$81:int, $Entry$2$6981.41$InsertTailList$81:int);
+
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead), __setunion(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead)), __set(Entry)))
+ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81))) && Subset(Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
+requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
+//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
+ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
+//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
+ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
+//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
+ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
+//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoGetDeviceObjectPointer($ObjectName$1$21492.26$IoGetDeviceObjectPointer$161:int, $DesiredAccess$2$21493.22$IoGetDeviceObjectPointer$161:int, $FileObject$3$21494.24$IoGetDeviceObjectPointer$161:int, $DeviceObject$4$21495.26$IoGetDeviceObjectPointer$161:int) returns ($result.IoGetDeviceObjectPointer$21491.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KbdCreateClassObject($DriverObject$1$3354.28$KbdCreateClassObject$201:int, $TmpDeviceExtension$2$3355.28$KbdCreateClassObject$201:int, $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201:int, $FullDeviceName$4$3357.35$KbdCreateClassObject$201:int, $Legacy$5$3358.28$KbdCreateClassObject$201:int) returns ($result.KbdCreateClassObject$3353.0$1$:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 1)));
+//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == 0)));
+//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
+ensures(($result.KbdCreateClassObject$3353.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] := 1])));
+//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
+ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]])));
+//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!($result.KbdCreateClassObject$3353.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3356.28$KbdCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
+ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3356.28$KbdCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3356.28$KbdCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KbdDeterminePortsServiced($BasePortName$1$3676.23$KbdDeterminePortsServiced$81:int, $NumberPortsServiced$2$3677.18$KbdDeterminePortsServiced$81:int) returns ($result.KbdDeterminePortsServiced$3675.0$1$:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeyboardAddDeviceEx($ClassData$1$819.28$KeyboardAddDeviceEx$121:int, $FullClassName$2$820.28$KeyboardAddDeviceEx$121:int, $File$3$821.28$KeyboardAddDeviceEx$121:int) returns ($result.KeyboardAddDeviceEx$818.0$1$:int);
+
+//TAG: requires __resource("DEV_EXTN", ClassData) == 1
+requires(Res_DEV_EXTN[$ClassData$1$819.28$KeyboardAddDeviceEx$121] == 1);
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __resource("DEV_EXTN", ClassData) == 1
+ensures(Res_DEV_EXTN[$ClassData$1$819.28$KeyboardAddDeviceEx$121] == 1);
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeyboardClassLogError($Object$1$4824.10$KeyboardClassLogError$281:int, $ErrorCode$2$4825.10$KeyboardClassLogError$281:int, $UniqueErrorValue$3$4826.10$KeyboardClassLogError$281:int, $FinalStatus$4$4827.13$KeyboardClassLogError$281:int, $DumpCount$5$4828.10$KeyboardClassLogError$281:int, $DumpData$6$4829.11$KeyboardClassLogError$281:int, $MajorFunction$7$4830.10$KeyboardClassLogError$281:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlCopyUnicodeString($DestinationString$1$7401.28$RtlCopyUnicodeString$81:int, $SourceString$2$7402.30$RtlCopyUnicodeString$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlInitUnicodeString($DestinationString$1$7281.26$RtlInitUnicodeString$81:int, $SourceString$2$7282.37$RtlInitUnicodeString$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure __PREfastPagedCode();
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeyboardClassFindMorePorts($DriverObject$1$4861.20$KeyboardClassFindMorePorts$121:int, $Context$2$4862.20$KeyboardClassFindMorePorts$121:int, $Count$3$4863.20$KeyboardClassFindMorePorts$121:int)
+
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
+modifies alloc;
+free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for:
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for:
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for:
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for:
+
+//TAG: havoc memory locations by default
+modifies Mem;
+{
+var havoc_stringTemp:int;
+var condVal:int;
+var $Context$2$4862.20$KeyboardClassFindMorePorts$12 : int;
+var $Count$3$4863.20$KeyboardClassFindMorePorts$12 : int;
+var $DriverObject$1$4861.20$KeyboardClassFindMorePorts$12 : int;
+var $ExAllocatePoolWithTag.arg.2$5$ : int;
+var $KbdDebugPrint.arg.2$6$ : int;
+var $RtlAppendUnicodeToString.arg.2$10$ : int;
+var $RtlAppendUnicodeToString.arg.2$13$ : int;
+var $RtlAppendUnicodeToString.arg.2$3$ : int;
+var $basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12 : int;
+var $basePortName$11$4893.28$KeyboardClassFindMorePorts$12 : int;
+var $classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12 : int;
+var $deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 : int;
+var $dumpData$7$4889.28$KeyboardClassFindMorePorts$12 : int;
+var $file$15$4897.28$KeyboardClassFindMorePorts$12 : int;
+var $fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 : int;
+var $fullPortName$12$4894.28$KeyboardClassFindMorePorts$12 : int;
+var $i$8$4890.28$KeyboardClassFindMorePorts$12 : int;
+var $memset.arg.3$8$ : int;
+var $numPorts$9$4891.28$KeyboardClassFindMorePorts$12 : int;
+var $port$16$5029.22$KeyboardClassFindMorePorts$12 : int;
+var $result.ExAllocatePoolWithTag$4926.0$4$ : int;
+var $result.IoGetDeviceObjectPointer$5001.42$16$ : int;
+var $result.KbdCreateClassObject$4978.38$15$ : int;
+var $result.KbdDeterminePortsServiced$4954.29$14$ : int;
+var $result.KeyboardAddDeviceEx$5013.37$17$ : int;
+var $result.ObfDereferenceObject$5042.16$18$ : int;
+var $result.RtlAppendUnicodeToString$4915.28$2$ : int;
+var $result.RtlAppendUnicodeToString$4950.28$9$ : int;
+var $result.RtlAppendUnicodeToString$4951.28$11$ : int;
+var $result.RtlAppendUnicodeToString$4952.28$12$ : int;
+var $result.memset$4903.4$1$ : int;
+var $result.memset$4949.4$7$ : int;
+var $status$4$4886.28$KeyboardClassFindMorePorts$12 : int;
+var $successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12 : int;
+var tempBoogie0:int;
+var tempBoogie1:int;
+var tempBoogie2:int;
+var tempBoogie3:int;
+var tempBoogie4:int;
+var tempBoogie5:int;
+var tempBoogie6:int;
+var tempBoogie7:int;
+var tempBoogie8:int;
+var tempBoogie9:int;
+var tempBoogie10:int;
+var tempBoogie11:int;
+var tempBoogie12:int;
+var tempBoogie13:int;
+var tempBoogie14:int;
+var tempBoogie15:int;
+var tempBoogie16:int;
+var tempBoogie17:int;
+var tempBoogie18:int;
+var tempBoogie19:int;
+var LOOP_74_alloc:[int]name;
+var LOOP_74_Mem:[name][int]int;
+var LOOP_74_Res_DEVICE_STACK:[int]int;
+var LOOP_74_Res_DEV_EXTN:[int]int;
+var LOOP_74_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_74_Res_SPIN_LOCK:[int]int;
+
+
+start:
+
+assume (alloc[$DriverObject$1$4861.20$KeyboardClassFindMorePorts$121] != UNALLOCATED);
+assume (alloc[$Context$2$4862.20$KeyboardClassFindMorePorts$121] != UNALLOCATED);
+call $basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(512);
+call $basePortName$11$4893.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(8);
+call $classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
+call $dumpData$7$4889.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(16);
+call $file$15$4897.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
+call $fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
+call $fullPortName$12$4894.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(8);
+call $numPorts$9$4891.28$KeyboardClassFindMorePorts$12 := __HAVOC_malloc(4);
+$DriverObject$1$4861.20$KeyboardClassFindMorePorts$12 := $DriverObject$1$4861.20$KeyboardClassFindMorePorts$121;
+$Context$2$4862.20$KeyboardClassFindMorePorts$12 := $Context$2$4862.20$KeyboardClassFindMorePorts$121;
+$Count$3$4863.20$KeyboardClassFindMorePorts$12 := $Count$3$4863.20$KeyboardClassFindMorePorts$121;
+goto label_3;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5070)
+label_1:
+call __HAVOC_free($basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12);
+call __HAVOC_free($basePortName$11$4893.28$KeyboardClassFindMorePorts$12);
+call __HAVOC_free($classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12);
+call __HAVOC_free($dumpData$7$4889.28$KeyboardClassFindMorePorts$12);
+call __HAVOC_free($file$15$4897.28$KeyboardClassFindMorePorts$12);
+call __HAVOC_free($fullClassName$14$4896.28$KeyboardClassFindMorePorts$12);
+call __HAVOC_free($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12);
+call __HAVOC_free($numPorts$9$4891.28$KeyboardClassFindMorePorts$12);
+assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
+assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
+assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
+assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
+assume (forall m:int :: {Mem[T.A256UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A256UINT2][m] == old(Mem[T.A256UINT2])[m]);
+assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
+assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
+assume (forall m:int :: {Mem[T.A5UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A5UINT2][m] == old(Mem[T.A5UINT2])[m]);
+assume (forall m:int :: {Mem[T.A88CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A88CHAR][m] == old(Mem[T.A88CHAR])[m]);
+assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
+assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CHAR][m] == old(Mem[T.CHAR])[m]);
+assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m] == old(Mem[T.CurrentStackLocation___unnamed_4_f19b65c1])[m]);
+assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
+assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
+assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
+assume (forall m:int :: {Mem[T.InitExtension__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InitExtension__GLOBALS][m] == old(Mem[T.InitExtension__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
+assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.NumberLegacyPorts__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberLegacyPorts__GLOBALS][m] == old(Mem[T.NumberLegacyPorts__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
+assume (forall m:int :: {Mem[T.PPUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PPUINT2][m] == old(Mem[T.PPUINT2])[m]);
+assume (forall m:int :: {Mem[T.PP_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_DEVICE_OBJECT][m] == old(Mem[T.PP_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
+assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
+assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
+assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_KEYBOARD_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_KEYBOARD_INPUT_DATA][m] == old(Mem[T.P_KEYBOARD_INPUT_DATA])[m]);
+assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
+assume (forall m:int :: {Mem[T.PortsServiced__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PortsServiced__GLOBALS][m] == old(Mem[T.PortsServiced__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
+assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
+assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
+assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5070)
+label_2:
+assume false;
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4886)
+label_3:
+goto label_4;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4887)
+label_4:
+goto label_5;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4887)
+label_5:
+$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := 0 ;
+goto label_6;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4888)
+label_6:
+goto label_7;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4888)
+label_7:
+Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12 := 0];
+goto label_8;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4889)
+label_8:
+goto label_9;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4890)
+label_9:
+goto label_10;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4891)
+label_10:
+goto label_11;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4892)
+label_11:
+goto label_12;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4893)
+label_12:
+goto label_13;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4894)
+label_13:
+goto label_14;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4895)
+label_14:
+goto label_15;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4896)
+label_15:
+goto label_16;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4896)
+label_16:
+Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 := 0];
+goto label_17;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4897)
+label_17:
+goto label_18;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4899)
+label_18:
+call __PREfastPagedCode ();
+goto label_21;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4901)
+label_21:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12) := 0];
+goto label_22;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4903)
+label_22:
+// ignoring intrinsic intrinsic.memset
+havoc $result.memset$4903.4$1$;
+goto label_25;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4904)
+label_25:
+Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := $basePortBuffer$13$4895.28$KeyboardClassFindMorePorts$12];
+goto label_26;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4905)
+label_26:
+Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := 0];
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4906)
+label_27:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := 512];
+goto label_28;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4913)
+label_28:
+call RtlCopyUnicodeString ($basePortName$11$4893.28$KeyboardClassFindMorePorts$12, BaseClassName__GLOBALS(Globals));
+goto label_31;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4914)
+label_31:
+tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT( Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12)], 10, 1) ;
+Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12) := tempBoogie0];
+goto label_35;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4915)
+label_32:
+call $result.RtlAppendUnicodeToString$4915.28$2$ := RtlAppendUnicodeToString ($basePortName$11$4893.28$KeyboardClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$3$);
+goto label_36;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4915)
+label_35:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$3$ := havoc_stringTemp ;
+goto label_32;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4920)
+label_36:
+call RtlInitUnicodeString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, 0);
+goto label_39;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4922)
+label_39:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12)]), 1, 2)];
+goto label_43;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4926)
+label_40:
+call $result.ExAllocatePoolWithTag$4926.0$4$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$5$, 1130652235);
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4926)
+label_43:
+$ExAllocatePoolWithTag.arg.2$5$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] ;
+goto label_40;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4926)
+label_44:
+Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12) := $result.ExAllocatePoolWithTag$4926.0$4$];
+goto label_45;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4929)
+label_45:
+goto label_45_true , label_45_false ;
+
+
+label_45_true :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] != 0);
+goto label_57;
+
+
+label_45_false :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] == 0);
+goto label_49;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4931)
+label_46:
+// skip KbdDebugPrint
+goto label_50;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4931)
+label_49:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$6$ := havoc_stringTemp ;
+goto label_46;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4936)
+label_50:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$7$4889.28$KeyboardClassFindMorePorts$12, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)]];
+goto label_51;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4937)
+label_51:
+call KeyboardClassLogError ($DriverObject$1$4861.20$KeyboardClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 10008, -1073741823, 1, $dumpData$7$4889.28$KeyboardClassFindMorePorts$12, 0);
+goto label_151;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4949)
+label_54:
+// ignoring intrinsic intrinsic.memset
+havoc $result.memset$4949.4$7$;
+goto label_61;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4949)
+label_57:
+$memset.arg.3$8$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] ;
+goto label_54;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4950)
+label_58:
+call $result.RtlAppendUnicodeToString$4950.28$9$ := RtlAppendUnicodeToString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$10$);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4950)
+label_61:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$10$ := havoc_stringTemp ;
+goto label_58;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4951)
+label_62:
+call $result.RtlAppendUnicodeToString$4951.28$11$ := RtlAppendUnicodeToString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4893.28$KeyboardClassFindMorePorts$12)]);
+goto label_68;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4952)
+label_65:
+call $result.RtlAppendUnicodeToString$4952.28$12$ := RtlAppendUnicodeToString ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$13$);
+goto label_69;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4952)
+label_68:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$13$ := havoc_stringTemp ;
+goto label_65;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4954)
+label_69:
+call $result.KbdDeterminePortsServiced$4954.29$14$ := KbdDeterminePortsServiced ($basePortName$11$4893.28$KeyboardClassFindMorePorts$12, $numPorts$9$4891.28$KeyboardClassFindMorePorts$12);
+goto label_72;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4961)
+label_72:
+$i$8$4890.28$KeyboardClassFindMorePorts$12 := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals)] ;
+goto label_73;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4961)
+label_73:
+$successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12 := 0 ;
+goto label_74;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4962)
+label_74:
+// loop entry initialization...
+LOOP_74_alloc := alloc;
+LOOP_74_Mem := Mem;
+LOOP_74_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_74_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_74_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_74_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_74_head;
+
+
+label_74_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+assume(forall f:int :: {alloc[Base(f)]} LOOP_74_alloc[Base(f)] == UNALLOCATED || LOOP_74_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_74_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_74_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_74_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_74_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_74_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_74_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (SetTrue()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_74_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+goto label_74_true , label_74_false ;
+
+
+label_74_true :
+assume ($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
+goto label_75;
+
+
+label_74_false :
+assume !($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
+goto label_150;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4962)
+label_75:
+goto label_75_true , label_75_false ;
+
+
+label_75_true :
+assume ($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4891.28$KeyboardClassFindMorePorts$12]);
+goto label_76;
+
+
+label_75_false :
+assume !($i$8$4890.28$KeyboardClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4891.28$KeyboardClassFindMorePorts$12]);
+goto label_150;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4973)
+label_76:
+Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)], 2), 1, 1)) := PLUS(48, 1, $i$8$4890.28$KeyboardClassFindMorePorts$12)];
+goto label_77;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4978)
+label_77:
+call $result.KbdCreateClassObject$4978.38$15$ := KbdCreateClassObject ($DriverObject$1$4861.20$KeyboardClassFindMorePorts$12, InitExtension__GLOBALS(Globals), $classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12, $fullClassName$14$4896.28$KeyboardClassFindMorePorts$12, 1);
+goto label_80;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4978)
+label_80:
+$status$4$4886.28$KeyboardClassFindMorePorts$12 := $result.KbdCreateClassObject$4978.38$15$ ;
+goto label_81;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4984)
+label_81:
+goto label_81_true , label_81_false ;
+
+
+label_81_true :
+assume (0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
+goto label_85;
+
+
+label_81_false :
+assume !(0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
+goto label_82;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4985)
+label_82:
+call KeyboardClassLogError ($DriverObject$1$4861.20$KeyboardClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 10008, $status$4$4886.28$KeyboardClassFindMorePorts$12, 0, 0, 0);
+goto label_149;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4995)
+label_85:
+$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])] ;
+goto label_86;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4996)
+label_86:
+Mem[T.PnP__DEVICE_EXTENSION] := Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
+goto label_87;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5001)
+label_87:
+assume (Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]);
+call $result.IoGetDeviceObjectPointer$5001.42$16$ := IoGetDeviceObjectPointer ($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12, 128, $file$15$4897.28$KeyboardClassFindMorePorts$12, TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12));
+Mem[T.TopPort__DEVICE_EXTENSION] := Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
+goto label_90;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5001)
+label_90:
+$status$4$4886.28$KeyboardClassFindMorePorts$12 := $result.IoGetDeviceObjectPointer$5001.42$16$ ;
+goto label_91;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5006)
+label_91:
+goto label_91_true , label_91_false ;
+
+
+label_91_true :
+assume ($status$4$4886.28$KeyboardClassFindMorePorts$12 != 0);
+goto label_92;
+
+
+label_91_false :
+assume ($status$4$4886.28$KeyboardClassFindMorePorts$12 == 0);
+goto label_103;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
+label_92:
+goto label_92_true , label_92_false ;
+
+
+label_92_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] != 0);
+goto label_93;
+
+
+label_92_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == 0);
+goto label_99;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
+label_93:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)], 0);
+goto label_96;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
+label_96:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
+goto label_97;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
+label_97:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
+goto label_98;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
+label_98:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
+goto label_99;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
+label_99:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]);
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5008)
+label_102:
+$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := 0 ;
+goto label_149;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5012)
+label_103:
+Mem[T.StackSize__DEVICE_OBJECT] := Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12]) := PLUS(1, 1, Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])])];
+goto label_104;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5013)
+label_104:
+call $result.KeyboardAddDeviceEx$5013.37$17$ := KeyboardAddDeviceEx ($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12, Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12], Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12]);
+goto label_107;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5013)
+label_107:
+$status$4$4886.28$KeyboardClassFindMorePorts$12 := $result.KeyboardAddDeviceEx$5013.37$17$ ;
+goto label_108;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5014)
+label_108:
+assume (forall r:int :: {BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)),r)} (POW2(r) && POW2(128) && r != 128) ==> (BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])],r)!= 0 <==> BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)),r)!= 0));
+assume (BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)),128) == 0);
+tempBoogie0 := BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12])], BIT_BNOT(128)) ;
+Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4888.28$KeyboardClassFindMorePorts$12]) := tempBoogie0];
+goto label_109;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5016)
+label_109:
+goto label_109_true , label_109_false ;
+
+
+label_109_true :
+assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] != 0);
+goto label_110;
+
+
+label_109_false :
+assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] == 0);
+goto label_114;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5017)
+label_110:
+call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12], 0);
+goto label_113;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5018)
+label_113:
+Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12 := 0];
+goto label_114;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5021)
+label_114:
+goto label_114_true , label_114_false ;
+
+
+label_114_true :
+assume (0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
+goto label_145;
+
+
+label_114_false :
+assume !(0 <= $status$4$4886.28$KeyboardClassFindMorePorts$12);
+goto label_115;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5022)
+label_115:
+goto label_115_true , label_115_false ;
+
+
+label_115_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_119;
+
+
+label_115_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_116;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5023)
+label_116:
+goto label_116_true , label_116_false ;
+
+
+label_116_true :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] != 0);
+goto label_117;
+
+
+label_116_false :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == 0);
+goto label_130;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5024)
+label_117:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
+goto label_118;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5025)
+label_118:
+Mem[T.File__DEVICE_EXTENSION] := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
+goto label_130;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5029)
+label_119:
+goto label_120;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5031)
+label_120:
+call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
+goto label_123;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5033)
+label_123:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12 := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]))]];
+goto label_124;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5034)
+label_124:
+Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])) := 0];
+goto label_125;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5035)
+label_125:
+Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])) := 1];
+goto label_126;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5036)
+label_126:
+Mem[T.Port__PORT] := Mem[T.Port__PORT][Port__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)])) := 0];
+goto label_127;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5038)
+label_127:
+call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
+goto label_130;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5041)
+label_130:
+goto label_130_true , label_130_false ;
+
+
+label_130_true :
+assume (Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12] != 0);
+goto label_131;
+
+
+label_130_false :
+assume (Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12] == 0);
+goto label_134;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5042)
+label_131:
+call $result.ObfDereferenceObject$5042.16$18$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$15$4897.28$KeyboardClassFindMorePorts$12]);
+goto label_134;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
+label_134:
+goto label_134_true , label_134_false ;
+
+
+label_134_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] != 0);
+goto label_135;
+
+
+label_134_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)] == 0);
+goto label_141;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
+label_135:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)], 0);
+goto label_138;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
+label_138:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := 0];
+goto label_139;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
+label_139:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
+goto label_140;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
+label_140:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]];
+goto label_141;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
+label_141:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12)]);
+goto label_144;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5045)
+label_144:
+$deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12 := 0 ;
+goto label_149;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5052)
+label_145:
+call InsertTailList (LegacyDeviceList__GLOBALS(Globals), Link__DEVICE_EXTENSION($deviceExtension$5$4887.28$KeyboardClassFindMorePorts$12));
+goto label_148;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5053)
+label_148:
+$successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12 := PLUS($successfulCreates$10$4892.28$KeyboardClassFindMorePorts$12, 1, 1) ;
+goto label_149;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(4963)
+label_149:
+$i$8$4890.28$KeyboardClassFindMorePorts$12 := PLUS($i$8$4890.28$KeyboardClassFindMorePorts$12, 1, 1) ;
+goto label_74_head;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5055)
+label_150:
+Mem[T.NumberLegacyPorts__GLOBALS] := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals) := $i$8$4890.28$KeyboardClassFindMorePorts$12];
+goto label_151;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5063)
+label_151:
+goto label_151_true , label_151_false ;
+
+
+label_151_true :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] != 0);
+goto label_152;
+
+
+label_151_false :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)] == 0);
+goto label_155;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5064)
+label_152:
+call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4894.28$KeyboardClassFindMorePorts$12)], 0);
+goto label_155;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5067)
+label_155:
+goto label_155_true , label_155_false ;
+
+
+label_155_true :
+assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] != 0);
+goto label_156;
+
+
+label_155_false :
+assume (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12] == 0);
+goto label_1;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(5068)
+label_156:
+call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4896.28$KeyboardClassFindMorePorts$12], 0);
+goto label_1;
+
+}
+
diff --git a/Test/havoc0/KeyboardClassUnload.bpl b/Test/havoc0/KeyboardClassUnload.bpl
index 3ca87200..19d23227 100644
--- a/Test/havoc0/KeyboardClassUnload.bpl
+++ b/Test/havoc0/KeyboardClassUnload.bpl
@@ -1,3335 +1,3335 @@
-// RUN: %boogie -monomorphize "%s" > "%t"
-// RUN: %diff success.expect "%t"
-type byte, name;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function SetTrue() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-/*
-function AtLeast(int, int) returns ([int]bool);
-function ModEqual(int, int, int) returns (bool);
-axiom(forall n:int, x:int :: ModEqual(n,x,x));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
-axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
-axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
-axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-*/
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int :: SetTrue()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name, m:[name][int]int) returns (bool);
-function Values(t:name, m:[name][int]int) returns ([int]bool);
-function T.Ptr(t:name) returns (name);
-
-axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
-
-axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
-
-axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
- (HasType(v, t, m1) <==> HasType(v, t, m2)));
-
-// Field declarations
-
-const unique T.Guid_WMIGUIDREGINFO:name;
-const unique T.InstanceCount_WMIGUIDREGINFO:name;
-const unique T.Flags_WMIGUIDREGINFO:name;
-const unique T.OperationID__ACCESS_STATE:name;
-const unique T.SecurityEvaluated__ACCESS_STATE:name;
-const unique T.GenerateAudit__ACCESS_STATE:name;
-const unique T.GenerateOnClose__ACCESS_STATE:name;
-const unique T.PrivilegesAllocated__ACCESS_STATE:name;
-const unique T.Flags__ACCESS_STATE:name;
-const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
-const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
-const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
-const unique T.SubjectSecurityContext__ACCESS_STATE:name;
-const unique T.SecurityDescriptor__ACCESS_STATE:name;
-const unique T.AuxData__ACCESS_STATE:name;
-const unique T.Privileges__ACCESS_STATE:name;
-const unique T.AuditPrivileges__ACCESS_STATE:name;
-const unique T.ObjectName__ACCESS_STATE:name;
-const unique T.ObjectTypeName__ACCESS_STATE:name;
-const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_RESOURCE_LIST:name;
-const unique T.List__CM_RESOURCE_LIST:name;
-const unique T.Size__DEVICE_CAPABILITIES:name;
-const unique T.Version__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
-const unique T.LockSupported__DEVICE_CAPABILITIES:name;
-const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.Removable__DEVICE_CAPABILITIES:name;
-const unique T.DockDevice__DEVICE_CAPABILITIES:name;
-const unique T.UniqueID__DEVICE_CAPABILITIES:name;
-const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
-const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
-const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
-const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
-const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
-const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
-const unique T.Reserved__DEVICE_CAPABILITIES:name;
-const unique T.Address__DEVICE_CAPABILITIES:name;
-const unique T.UINumber__DEVICE_CAPABILITIES:name;
-const unique T.DeviceState__DEVICE_CAPABILITIES:name;
-const unique T.SystemWake__DEVICE_CAPABILITIES:name;
-const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
-const unique T.D1Latency__DEVICE_CAPABILITIES:name;
-const unique T.D2Latency__DEVICE_CAPABILITIES:name;
-const unique T.D3Latency__DEVICE_CAPABILITIES:name;
-const unique T.Self__DEVICE_EXTENSION:name;
-const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
-const unique T.TopPort__DEVICE_EXTENSION:name;
-const unique T.PDO__DEVICE_EXTENSION:name;
-const unique T.RemoveLock__DEVICE_EXTENSION:name;
-const unique T.PnP__DEVICE_EXTENSION:name;
-const unique T.Started__DEVICE_EXTENSION:name;
-const unique T.AllowDisable__DEVICE_EXTENSION:name;
-const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
-const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
-const unique T.InputCount__DEVICE_EXTENSION:name;
-const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
-const unique T.InputData__DEVICE_EXTENSION:name;
-const unique T.DataIn__DEVICE_EXTENSION:name;
-const unique T.DataOut__DEVICE_EXTENSION:name;
-const unique T.KeyboardAttributes__DEVICE_EXTENSION:name;
-const unique T.IndicatorParameters__DEVICE_EXTENSION:name;
-const unique T.SpinLock__DEVICE_EXTENSION:name;
-const unique T.ReadQueue__DEVICE_EXTENSION:name;
-const unique T.SequenceNumber__DEVICE_EXTENSION:name;
-const unique T.DeviceState__DEVICE_EXTENSION:name;
-const unique T.SystemState__DEVICE_EXTENSION:name;
-const unique T.UnitId__DEVICE_EXTENSION:name;
-const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
-const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
-const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
-const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
-const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
-const unique T.Link__DEVICE_EXTENSION:name;
-const unique T.File__DEVICE_EXTENSION:name;
-const unique T.Enabled__DEVICE_EXTENSION:name;
-const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
-const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
-const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
-const unique T.Type__DEVICE_OBJECT:name;
-const unique T.Size__DEVICE_OBJECT:name;
-const unique T.ReferenceCount__DEVICE_OBJECT:name;
-const unique T.DriverObject__DEVICE_OBJECT:name;
-const unique T.NextDevice__DEVICE_OBJECT:name;
-const unique T.AttachedDevice__DEVICE_OBJECT:name;
-const unique T.CurrentIrp__DEVICE_OBJECT:name;
-const unique T.Timer__DEVICE_OBJECT:name;
-const unique T.Flags__DEVICE_OBJECT:name;
-const unique T.Characteristics__DEVICE_OBJECT:name;
-const unique T.Vpb__DEVICE_OBJECT:name;
-const unique T.DeviceExtension__DEVICE_OBJECT:name;
-const unique T.DeviceType__DEVICE_OBJECT:name;
-const unique T.StackSize__DEVICE_OBJECT:name;
-const unique T.Queue__DEVICE_OBJECT:name;
-const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
-const unique T.DeviceQueue__DEVICE_OBJECT:name;
-const unique T.Dpc__DEVICE_OBJECT:name;
-const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
-const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
-const unique T.DeviceLock__DEVICE_OBJECT:name;
-const unique T.SectorSize__DEVICE_OBJECT:name;
-const unique T.Spare1__DEVICE_OBJECT:name;
-const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
-const unique T.Reserved__DEVICE_OBJECT:name;
-const unique T.Type__DEVOBJ_EXTENSION:name;
-const unique T.Size__DEVOBJ_EXTENSION:name;
-const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
-const unique T.__unnamed_4_a97c65a1__DISPATCHER_HEADER:name;
-const unique T.SignalState__DISPATCHER_HEADER:name;
-const unique T.WaitListHead__DISPATCHER_HEADER:name;
-const unique T.DriverObject__DRIVER_EXTENSION:name;
-const unique T.AddDevice__DRIVER_EXTENSION:name;
-const unique T.Count__DRIVER_EXTENSION:name;
-const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
-const unique T.Type__DRIVER_OBJECT:name;
-const unique T.Size__DRIVER_OBJECT:name;
-const unique T.DeviceObject__DRIVER_OBJECT:name;
-const unique T.Flags__DRIVER_OBJECT:name;
-const unique T.DriverStart__DRIVER_OBJECT:name;
-const unique T.DriverSize__DRIVER_OBJECT:name;
-const unique T.DriverSection__DRIVER_OBJECT:name;
-const unique T.DriverExtension__DRIVER_OBJECT:name;
-const unique T.DriverName__DRIVER_OBJECT:name;
-const unique T.HardwareDatabase__DRIVER_OBJECT:name;
-const unique T.FastIoDispatch__DRIVER_OBJECT:name;
-const unique T.DriverInit__DRIVER_OBJECT:name;
-const unique T.DriverStartIo__DRIVER_OBJECT:name;
-const unique T.DriverUnload__DRIVER_OBJECT:name;
-const unique T.MajorFunction__DRIVER_OBJECT:name;
-const unique T.SystemResourcesList__ERESOURCE:name;
-const unique T.OwnerTable__ERESOURCE:name;
-const unique T.ActiveCount__ERESOURCE:name;
-const unique T.Flag__ERESOURCE:name;
-const unique T.SharedWaiters__ERESOURCE:name;
-const unique T.ExclusiveWaiters__ERESOURCE:name;
-const unique T.OwnerEntry__ERESOURCE:name;
-const unique T.ActiveEntries__ERESOURCE:name;
-const unique T.ContentionCount__ERESOURCE:name;
-const unique T.NumberOfSharedWaiters__ERESOURCE:name;
-const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
-const unique T.__unnamed_4_52c594f7__ERESOURCE:name;
-const unique T.SpinLock__ERESOURCE:name;
-const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
-const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
-const unique T.FastIoRead__FAST_IO_DISPATCH:name;
-const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoLock__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
-const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
-const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
-const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlRead__FAST_IO_DISPATCH:name;
-const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
-const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
-const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
-const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.Count__FAST_MUTEX:name;
-const unique T.Owner__FAST_MUTEX:name;
-const unique T.Contention__FAST_MUTEX:name;
-const unique T.Gate__FAST_MUTEX:name;
-const unique T.OldIrql__FAST_MUTEX:name;
-const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
-const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
-const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
-const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.Type__FILE_OBJECT:name;
-const unique T.Size__FILE_OBJECT:name;
-const unique T.DeviceObject__FILE_OBJECT:name;
-const unique T.Vpb__FILE_OBJECT:name;
-const unique T.FsContext__FILE_OBJECT:name;
-const unique T.FsContext2__FILE_OBJECT:name;
-const unique T.SectionObjectPointer__FILE_OBJECT:name;
-const unique T.PrivateCacheMap__FILE_OBJECT:name;
-const unique T.FinalStatus__FILE_OBJECT:name;
-const unique T.RelatedFileObject__FILE_OBJECT:name;
-const unique T.LockOperation__FILE_OBJECT:name;
-const unique T.DeletePending__FILE_OBJECT:name;
-const unique T.ReadAccess__FILE_OBJECT:name;
-const unique T.WriteAccess__FILE_OBJECT:name;
-const unique T.DeleteAccess__FILE_OBJECT:name;
-const unique T.SharedRead__FILE_OBJECT:name;
-const unique T.SharedWrite__FILE_OBJECT:name;
-const unique T.SharedDelete__FILE_OBJECT:name;
-const unique T.Flags__FILE_OBJECT:name;
-const unique T.FileName__FILE_OBJECT:name;
-const unique T.CurrentByteOffset__FILE_OBJECT:name;
-const unique T.Waiters__FILE_OBJECT:name;
-const unique T.Busy__FILE_OBJECT:name;
-const unique T.LastLock__FILE_OBJECT:name;
-const unique T.Lock__FILE_OBJECT:name;
-const unique T.Event__FILE_OBJECT:name;
-const unique T.CompletionContext__FILE_OBJECT:name;
-const unique T.IrpListLock__FILE_OBJECT:name;
-const unique T.IrpList__FILE_OBJECT:name;
-const unique T.FileObjectExtension__FILE_OBJECT:name;
-const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
-const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
-const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
-const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
-const unique T.Directory__FILE_STANDARD_INFORMATION:name;
-const unique T.Debug__GLOBALS:name;
-const unique T.GrandMaster__GLOBALS:name;
-const unique T.AssocClassList__GLOBALS:name;
-const unique T.NumAssocClass__GLOBALS:name;
-const unique T.Opens__GLOBALS:name;
-const unique T.NumberLegacyPorts__GLOBALS:name;
-const unique T.Mutex__GLOBALS:name;
-const unique T.ConnectOneClassToOnePort__GLOBALS:name;
-const unique T.SendOutputToAllPorts__GLOBALS:name;
-const unique T.PortsServiced__GLOBALS:name;
-const unique T.InitExtension__GLOBALS:name;
-const unique T.RegistryPath__GLOBALS:name;
-const unique T.BaseClassName__GLOBALS:name;
-const unique T.BaseClassBuffer__GLOBALS:name;
-const unique T.LegacyDeviceList__GLOBALS:name;
-const unique T.Data1__GUID:name;
-const unique T.Data2__GUID:name;
-const unique T.Data3__GUID:name;
-const unique T.Data4__GUID:name;
-const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
-const unique T.Control__INITIAL_PRIVILEGE_SET:name;
-const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
-const unique T.Size__INTERFACE:name;
-const unique T.Version__INTERFACE:name;
-const unique T.Context__INTERFACE:name;
-const unique T.InterfaceReference__INTERFACE:name;
-const unique T.InterfaceDereference__INTERFACE:name;
-const unique T.Port__IO_COMPLETION_CONTEXT:name;
-const unique T.Key__IO_COMPLETION_CONTEXT:name;
-const unique T.Common__IO_REMOVE_LOCK:name;
-const unique T.Dbg__IO_REMOVE_LOCK:name;
-const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__IO_RESOURCE_LIST:name;
-const unique T.Revision__IO_RESOURCE_LIST:name;
-const unique T.Count__IO_RESOURCE_LIST:name;
-const unique T.Descriptors__IO_RESOURCE_LIST:name;
-const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
-const unique T.AccessState__IO_SECURITY_CONTEXT:name;
-const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
-const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
-const unique T.MajorFunction__IO_STACK_LOCATION:name;
-const unique T.MinorFunction__IO_STACK_LOCATION:name;
-const unique T.Flags__IO_STACK_LOCATION:name;
-const unique T.Control__IO_STACK_LOCATION:name;
-const unique T.Parameters__IO_STACK_LOCATION:name;
-const unique T.DeviceObject__IO_STACK_LOCATION:name;
-const unique T.FileObject__IO_STACK_LOCATION:name;
-const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
-const unique T.Context__IO_STACK_LOCATION:name;
-const unique T.__unnamed_4_d99b6e2b__IO_STATUS_BLOCK:name;
-const unique T.Information__IO_STATUS_BLOCK:name;
-const unique T.Type__IRP:name;
-const unique T.Size__IRP:name;
-const unique T.MdlAddress__IRP:name;
-const unique T.Flags__IRP:name;
-const unique T.AssociatedIrp__IRP:name;
-const unique T.ThreadListEntry__IRP:name;
-const unique T.IoStatus__IRP:name;
-const unique T.RequestorMode__IRP:name;
-const unique T.PendingReturned__IRP:name;
-const unique T.StackCount__IRP:name;
-const unique T.CurrentLocation__IRP:name;
-const unique T.Cancel__IRP:name;
-const unique T.CancelIrql__IRP:name;
-const unique T.ApcEnvironment__IRP:name;
-const unique T.AllocationFlags__IRP:name;
-const unique T.UserIosb__IRP:name;
-const unique T.UserEvent__IRP:name;
-const unique T.Overlay__IRP:name;
-const unique T.CancelRoutine__IRP:name;
-const unique T.UserBuffer__IRP:name;
-const unique T.Tail__IRP:name;
-const unique T.Type__KAPC:name;
-const unique T.SpareByte0__KAPC:name;
-const unique T.Size__KAPC:name;
-const unique T.SpareByte1__KAPC:name;
-const unique T.SpareLong0__KAPC:name;
-const unique T.Thread__KAPC:name;
-const unique T.ApcListEntry__KAPC:name;
-const unique T.KernelRoutine__KAPC:name;
-const unique T.RundownRoutine__KAPC:name;
-const unique T.NormalRoutine__KAPC:name;
-const unique T.NormalContext__KAPC:name;
-const unique T.SystemArgument1__KAPC:name;
-const unique T.SystemArgument2__KAPC:name;
-const unique T.ApcStateIndex__KAPC:name;
-const unique T.ApcMode__KAPC:name;
-const unique T.Inserted__KAPC:name;
-const unique T.Type__KDEVICE_QUEUE:name;
-const unique T.Size__KDEVICE_QUEUE:name;
-const unique T.DeviceListHead__KDEVICE_QUEUE:name;
-const unique T.Lock__KDEVICE_QUEUE:name;
-const unique T.Busy__KDEVICE_QUEUE:name;
-const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
-const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Type__KDPC:name;
-const unique T.Importance__KDPC:name;
-const unique T.Number__KDPC:name;
-const unique T.DpcListEntry__KDPC:name;
-const unique T.DeferredRoutine__KDPC:name;
-const unique T.DeferredContext__KDPC:name;
-const unique T.SystemArgument1__KDPC:name;
-const unique T.SystemArgument2__KDPC:name;
-const unique T.DpcData__KDPC:name;
-const unique T.Header__KEVENT:name;
-const unique T.KeyboardIdentifier__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyboardMode__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfIndicators__KEYBOARD_ATTRIBUTES:name;
-const unique T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES:name;
-const unique T.InputDataQueueLength__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyRepeatMinimum__KEYBOARD_ATTRIBUTES:name;
-const unique T.KeyRepeatMaximum__KEYBOARD_ATTRIBUTES:name;
-const unique T.Type__KEYBOARD_ID:name;
-const unique T.Subtype__KEYBOARD_ID:name;
-const unique T.UnitId__KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T.UnitId__KEYBOARD_INPUT_DATA:name;
-const unique T.MakeCode__KEYBOARD_INPUT_DATA:name;
-const unique T.Flags__KEYBOARD_INPUT_DATA:name;
-const unique T.Reserved__KEYBOARD_INPUT_DATA:name;
-const unique T.ExtraInformation__KEYBOARD_INPUT_DATA:name;
-const unique T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T.Header__KSEMAPHORE:name;
-const unique T.Limit__KSEMAPHORE:name;
-const unique T.__unnamed_8_58ee4a31__LARGE_INTEGER:name;
-const unique T.u__LARGE_INTEGER:name;
-const unique T.QuadPart__LARGE_INTEGER:name;
-const unique T.Flink__LIST_ENTRY:name;
-const unique T.Blink__LIST_ENTRY:name;
-const unique T.LowPart__LUID:name;
-const unique T.HighPart__LUID:name;
-const unique T.Luid__LUID_AND_ATTRIBUTES:name;
-const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
-const unique T.Next__MDL:name;
-const unique T.Size__MDL:name;
-const unique T.MdlFlags__MDL:name;
-const unique T.Process__MDL:name;
-const unique T.MappedSystemVa__MDL:name;
-const unique T.StartVa__MDL:name;
-const unique T.ByteCount__MDL:name;
-const unique T.ByteOffset__MDL:name;
-const unique T.OwnerThread__OWNER_ENTRY:name;
-const unique T.__unnamed_4_6f9ac8e1__OWNER_ENTRY:name;
-const unique T.File__PORT:name;
-const unique T.Port__PORT:name;
-const unique T.Enabled__PORT:name;
-const unique T.Reserved__PORT:name;
-const unique T.Free__PORT:name;
-const unique T.SequenceD1__POWER_SEQUENCE:name;
-const unique T.SequenceD2__POWER_SEQUENCE:name;
-const unique T.SequenceD3__POWER_SEQUENCE:name;
-const unique T.SystemState__POWER_STATE:name;
-const unique T.DeviceState__POWER_STATE:name;
-const unique T.PrivilegeCount__PRIVILEGE_SET:name;
-const unique T.Control__PRIVILEGE_SET:name;
-const unique T.Privilege__PRIVILEGE_SET:name;
-const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
-const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.__unnamed_4_3a2fdc5e__SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T.Length__UNICODE_STRING:name;
-const unique T.MaximumLength__UNICODE_STRING:name;
-const unique T.Buffer__UNICODE_STRING:name;
-const unique T.Type__VPB:name;
-const unique T.Size__VPB:name;
-const unique T.Flags__VPB:name;
-const unique T.VolumeLabelLength__VPB:name;
-const unique T.DeviceObject__VPB:name;
-const unique T.RealDevice__VPB:name;
-const unique T.SerialNumber__VPB:name;
-const unique T.ReferenceCount__VPB:name;
-const unique T.VolumeLabel__VPB:name;
-const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
-const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
-const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
-const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
-const unique T.GuidCount__WMILIB_CONTEXT:name;
-const unique T.GuidList__WMILIB_CONTEXT:name;
-const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
-const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
-const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
-const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
-const unique T.Reserved___unnamed_12_0d6a30de:name;
-const unique T.MessageCount___unnamed_12_0d6a30de:name;
-const unique T.Vector___unnamed_12_0d6a30de:name;
-const unique T.Affinity___unnamed_12_0d6a30de:name;
-const unique T.Start___unnamed_12_17f5c211:name;
-const unique T.Length48___unnamed_12_17f5c211:name;
-const unique T.Start___unnamed_12_1fb42e39:name;
-const unique T.Length___unnamed_12_1fb42e39:name;
-const unique T.Reserved___unnamed_12_1fb42e39:name;
-const unique T.Start___unnamed_12_2a1563c6:name;
-const unique T.Length___unnamed_12_2a1563c6:name;
-const unique T.DataSize___unnamed_12_31347272:name;
-const unique T.Reserved1___unnamed_12_31347272:name;
-const unique T.Reserved2___unnamed_12_31347272:name;
-const unique T.Raw___unnamed_12_429aadc0:name;
-const unique T.Translated___unnamed_12_429aadc0:name;
-const unique T.Start___unnamed_12_4719de1a:name;
-const unique T.Length___unnamed_12_4719de1a:name;
-const unique T.Data___unnamed_12_4be56faa:name;
-const unique T.Data___unnamed_12_5ce25b92:name;
-const unique T.Generic___unnamed_12_7a698b72:name;
-const unique T.Port___unnamed_12_7a698b72:name;
-const unique T.Interrupt___unnamed_12_7a698b72:name;
-const unique T.MessageInterrupt___unnamed_12_7a698b72:name;
-const unique T.Memory___unnamed_12_7a698b72:name;
-const unique T.Dma___unnamed_12_7a698b72:name;
-const unique T.DevicePrivate___unnamed_12_7a698b72:name;
-const unique T.BusNumber___unnamed_12_7a698b72:name;
-const unique T.DeviceSpecificData___unnamed_12_7a698b72:name;
-const unique T.Memory40___unnamed_12_7a698b72:name;
-const unique T.Memory48___unnamed_12_7a698b72:name;
-const unique T.Memory64___unnamed_12_7a698b72:name;
-const unique T.Start___unnamed_12_87c0de8d:name;
-const unique T.Length64___unnamed_12_87c0de8d:name;
-const unique T.Start___unnamed_12_98bfc55a:name;
-const unique T.Length40___unnamed_12_98bfc55a:name;
-const unique T.Priority___unnamed_12_ab1bd9d7:name;
-const unique T.Reserved1___unnamed_12_ab1bd9d7:name;
-const unique T.Reserved2___unnamed_12_ab1bd9d7:name;
-const unique T.Level___unnamed_12_b0429be9:name;
-const unique T.Vector___unnamed_12_b0429be9:name;
-const unique T.Affinity___unnamed_12_b0429be9:name;
-const unique T.ListEntry___unnamed_12_b43e8de8:name;
-const unique T.__unnamed_4_f19b65c1___unnamed_12_b43e8de8:name;
-const unique T.Level___unnamed_12_bfdb39ee:name;
-const unique T.Vector___unnamed_12_bfdb39ee:name;
-const unique T.Affinity___unnamed_12_bfdb39ee:name;
-const unique T.Start___unnamed_12_cd42b3c3:name;
-const unique T.Length___unnamed_12_cd42b3c3:name;
-const unique T.__unnamed_12_429aadc0___unnamed_12_e668effc:name;
-const unique T.Channel___unnamed_12_e80d029e:name;
-const unique T.Port___unnamed_12_e80d029e:name;
-const unique T.Reserved1___unnamed_12_e80d029e:name;
-const unique T.Length___unnamed_16_07c0bcc5:name;
-const unique T.MinBusNumber___unnamed_16_07c0bcc5:name;
-const unique T.MaxBusNumber___unnamed_16_07c0bcc5:name;
-const unique T.Reserved___unnamed_16_07c0bcc5:name;
-const unique T.InterfaceType___unnamed_16_29cb9f2f:name;
-const unique T.Size___unnamed_16_29cb9f2f:name;
-const unique T.Version___unnamed_16_29cb9f2f:name;
-const unique T.Interface___unnamed_16_29cb9f2f:name;
-const unique T.InterfaceSpecificData___unnamed_16_29cb9f2f:name;
-const unique T.SecurityContext___unnamed_16_30f11dbf:name;
-const unique T.Options___unnamed_16_30f11dbf:name;
-const unique T.FileAttributes___unnamed_16_30f11dbf:name;
-const unique T.ShareAccess___unnamed_16_30f11dbf:name;
-const unique T.EaLength___unnamed_16_30f11dbf:name;
-const unique T.DriverContext___unnamed_16_35034f68:name;
-const unique T.Length___unnamed_16_487a9498:name;
-const unique T.FileName___unnamed_16_487a9498:name;
-const unique T.FileInformationClass___unnamed_16_487a9498:name;
-const unique T.FileIndex___unnamed_16_487a9498:name;
-const unique T.OutputBufferLength___unnamed_16_5f6a8844:name;
-const unique T.InputBufferLength___unnamed_16_5f6a8844:name;
-const unique T.FsControlCode___unnamed_16_5f6a8844:name;
-const unique T.Type3InputBuffer___unnamed_16_5f6a8844:name;
-const unique T.Length___unnamed_16_7177b9f3:name;
-const unique T.FileInformationClass___unnamed_16_7177b9f3:name;
-const unique T.FileObject___unnamed_16_7177b9f3:name;
-const unique T.__unnamed_4_43913aa5___unnamed_16_7177b9f3:name;
-const unique T.Length___unnamed_16_88e91ef6:name;
-const unique T.Key___unnamed_16_88e91ef6:name;
-const unique T.ByteOffset___unnamed_16_88e91ef6:name;
-const unique T.Length___unnamed_16_8c506c98:name;
-const unique T.Key___unnamed_16_8c506c98:name;
-const unique T.ByteOffset___unnamed_16_8c506c98:name;
-const unique T.WhichSpace___unnamed_16_9ac2e5f8:name;
-const unique T.Buffer___unnamed_16_9ac2e5f8:name;
-const unique T.Offset___unnamed_16_9ac2e5f8:name;
-const unique T.Length___unnamed_16_9ac2e5f8:name;
-const unique T.Create___unnamed_16_b93842ad:name;
-const unique T.Read___unnamed_16_b93842ad:name;
-const unique T.Write___unnamed_16_b93842ad:name;
-const unique T.QueryDirectory___unnamed_16_b93842ad:name;
-const unique T.NotifyDirectory___unnamed_16_b93842ad:name;
-const unique T.QueryFile___unnamed_16_b93842ad:name;
-const unique T.SetFile___unnamed_16_b93842ad:name;
-const unique T.QueryEa___unnamed_16_b93842ad:name;
-const unique T.SetEa___unnamed_16_b93842ad:name;
-const unique T.QueryVolume___unnamed_16_b93842ad:name;
-const unique T.SetVolume___unnamed_16_b93842ad:name;
-const unique T.FileSystemControl___unnamed_16_b93842ad:name;
-const unique T.LockControl___unnamed_16_b93842ad:name;
-const unique T.DeviceIoControl___unnamed_16_b93842ad:name;
-const unique T.QuerySecurity___unnamed_16_b93842ad:name;
-const unique T.SetSecurity___unnamed_16_b93842ad:name;
-const unique T.MountVolume___unnamed_16_b93842ad:name;
-const unique T.VerifyVolume___unnamed_16_b93842ad:name;
-const unique T.Scsi___unnamed_16_b93842ad:name;
-const unique T.QueryQuota___unnamed_16_b93842ad:name;
-const unique T.SetQuota___unnamed_16_b93842ad:name;
-const unique T.QueryDeviceRelations___unnamed_16_b93842ad:name;
-const unique T.QueryInterface___unnamed_16_b93842ad:name;
-const unique T.DeviceCapabilities___unnamed_16_b93842ad:name;
-const unique T.FilterResourceRequirements___unnamed_16_b93842ad:name;
-const unique T.ReadWriteConfig___unnamed_16_b93842ad:name;
-const unique T.SetLock___unnamed_16_b93842ad:name;
-const unique T.QueryId___unnamed_16_b93842ad:name;
-const unique T.QueryDeviceText___unnamed_16_b93842ad:name;
-const unique T.UsageNotification___unnamed_16_b93842ad:name;
-const unique T.WaitWake___unnamed_16_b93842ad:name;
-const unique T.PowerSequence___unnamed_16_b93842ad:name;
-const unique T.Power___unnamed_16_b93842ad:name;
-const unique T.StartDevice___unnamed_16_b93842ad:name;
-const unique T.WMI___unnamed_16_b93842ad:name;
-const unique T.Others___unnamed_16_b93842ad:name;
-const unique T.Length___unnamed_16_b9c62eab:name;
-const unique T.Key___unnamed_16_b9c62eab:name;
-const unique T.ByteOffset___unnamed_16_b9c62eab:name;
-const unique T.__unnamed_4_7d9d0c7e___unnamed_16_bb584060:name;
-const unique T.Type___unnamed_16_bb584060:name;
-const unique T.State___unnamed_16_bb584060:name;
-const unique T.ShutdownType___unnamed_16_bb584060:name;
-const unique T.OutputBufferLength___unnamed_16_dba55c7c:name;
-const unique T.InputBufferLength___unnamed_16_dba55c7c:name;
-const unique T.IoControlCode___unnamed_16_dba55c7c:name;
-const unique T.Type3InputBuffer___unnamed_16_dba55c7c:name;
-const unique T.DeviceQueueEntry___unnamed_16_e70c268b:name;
-const unique T.__unnamed_16_35034f68___unnamed_16_e70c268b:name;
-const unique T.Argument1___unnamed_16_e734d694:name;
-const unique T.Argument2___unnamed_16_e734d694:name;
-const unique T.Argument3___unnamed_16_e734d694:name;
-const unique T.Argument4___unnamed_16_e734d694:name;
-const unique T.ProviderId___unnamed_16_eac6dbea:name;
-const unique T.DataPath___unnamed_16_eac6dbea:name;
-const unique T.BufferSize___unnamed_16_eac6dbea:name;
-const unique T.Buffer___unnamed_16_eac6dbea:name;
-const unique T.Length___unnamed_16_f6cae4c2:name;
-const unique T.EaList___unnamed_16_f6cae4c2:name;
-const unique T.EaListLength___unnamed_16_f6cae4c2:name;
-const unique T.EaIndex___unnamed_16_f6cae4c2:name;
-const unique T.Length___unnamed_16_fe36e4f4:name;
-const unique T.StartSid___unnamed_16_fe36e4f4:name;
-const unique T.SidList___unnamed_16_fe36e4f4:name;
-const unique T.SidListLength___unnamed_16_fe36e4f4:name;
-const unique T.Abandoned___unnamed_1_29794256:name;
-const unique T.Absolute___unnamed_1_29794256:name;
-const unique T.NpxIrql___unnamed_1_29794256:name;
-const unique T.Signalling___unnamed_1_29794256:name;
-const unique T.Inserted___unnamed_1_2dc63b48:name;
-const unique T.DebugActive___unnamed_1_2dc63b48:name;
-const unique T.DpcActive___unnamed_1_2dc63b48:name;
-const unique T.Size___unnamed_1_2ef8da39:name;
-const unique T.Hand___unnamed_1_2ef8da39:name;
-const unique T.Lock___unnamed_1_faa7dc71:name;
-const unique T.MinimumVector___unnamed_20_f4d2e6d8:name;
-const unique T.MaximumVector___unnamed_20_f4d2e6d8:name;
-const unique T.AffinityPolicy___unnamed_20_f4d2e6d8:name;
-const unique T.PriorityPolicy___unnamed_20_f4d2e6d8:name;
-const unique T.TargetedProcessors___unnamed_20_f4d2e6d8:name;
-const unique T.Length___unnamed_24_41cbc8c0:name;
-const unique T.Alignment___unnamed_24_41cbc8c0:name;
-const unique T.MinimumAddress___unnamed_24_41cbc8c0:name;
-const unique T.MaximumAddress___unnamed_24_41cbc8c0:name;
-const unique T.Length48___unnamed_24_5419c914:name;
-const unique T.Alignment48___unnamed_24_5419c914:name;
-const unique T.MinimumAddress___unnamed_24_5419c914:name;
-const unique T.MaximumAddress___unnamed_24_5419c914:name;
-const unique T.Length___unnamed_24_67a5ff10:name;
-const unique T.Alignment___unnamed_24_67a5ff10:name;
-const unique T.MinimumAddress___unnamed_24_67a5ff10:name;
-const unique T.MaximumAddress___unnamed_24_67a5ff10:name;
-const unique T.Port___unnamed_24_72c3976e:name;
-const unique T.Memory___unnamed_24_72c3976e:name;
-const unique T.Interrupt___unnamed_24_72c3976e:name;
-const unique T.Dma___unnamed_24_72c3976e:name;
-const unique T.Generic___unnamed_24_72c3976e:name;
-const unique T.DevicePrivate___unnamed_24_72c3976e:name;
-const unique T.BusNumber___unnamed_24_72c3976e:name;
-const unique T.ConfigData___unnamed_24_72c3976e:name;
-const unique T.Memory40___unnamed_24_72c3976e:name;
-const unique T.Memory48___unnamed_24_72c3976e:name;
-const unique T.Memory64___unnamed_24_72c3976e:name;
-const unique T.Length64___unnamed_24_a26050bb:name;
-const unique T.Alignment64___unnamed_24_a26050bb:name;
-const unique T.MinimumAddress___unnamed_24_a26050bb:name;
-const unique T.MaximumAddress___unnamed_24_a26050bb:name;
-const unique T.Length___unnamed_24_b8f476db:name;
-const unique T.Alignment___unnamed_24_b8f476db:name;
-const unique T.MinimumAddress___unnamed_24_b8f476db:name;
-const unique T.MaximumAddress___unnamed_24_b8f476db:name;
-const unique T.Length40___unnamed_24_d09044b4:name;
-const unique T.Alignment40___unnamed_24_d09044b4:name;
-const unique T.MinimumAddress___unnamed_24_d09044b4:name;
-const unique T.MaximumAddress___unnamed_24_d09044b4:name;
-const unique T.ReplaceIfExists___unnamed_2_46cc4597:name;
-const unique T.AdvanceOnly___unnamed_2_46cc4597:name;
-const unique T.__unnamed_16_e70c268b___unnamed_40_7218f704:name;
-const unique T.Thread___unnamed_40_7218f704:name;
-const unique T.AuxiliaryBuffer___unnamed_40_7218f704:name;
-const unique T.__unnamed_12_b43e8de8___unnamed_40_7218f704:name;
-const unique T.OriginalFileObject___unnamed_40_7218f704:name;
-const unique T.ListEntry___unnamed_40_c55c9377:name;
-const unique T.Wcb___unnamed_40_c55c9377:name;
-const unique T.InitialPrivilegeSet___unnamed_44_5584090d:name;
-const unique T.PrivilegeSet___unnamed_44_5584090d:name;
-const unique T.Overlay___unnamed_48_cf99b13f:name;
-const unique T.Apc___unnamed_48_cf99b13f:name;
-const unique T.CompletionKey___unnamed_48_cf99b13f:name;
-const unique T.PowerState___unnamed_4_069846fb:name;
-const unique T.IdType___unnamed_4_224c32f4:name;
-const unique T.Capabilities___unnamed_4_2de698da:name;
-const unique T.__unnamed_4_c3479730___unnamed_4_3a2fdc5e:name;
-const unique T.ContextAsUlong___unnamed_4_3a2fdc5e:name;
-const unique T.Length___unnamed_4_3a4c1a13:name;
-const unique T.__unnamed_2_46cc4597___unnamed_4_43913aa5:name;
-const unique T.ClusterCount___unnamed_4_43913aa5:name;
-const unique T.DeleteHandle___unnamed_4_43913aa5:name;
-const unique T.UserApcRoutine___unnamed_4_4e8dd2ba:name;
-const unique T.IssuingProcess___unnamed_4_4e8dd2ba:name;
-const unique T.Srb___unnamed_4_52603077:name;
-const unique T.Address___unnamed_4_52c594f7:name;
-const unique T.CreatorBackTraceIndex___unnamed_4_52c594f7:name;
-const unique T.Type___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_29794256___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_2ef8da39___unnamed_4_5ca00198:name;
-const unique T.__unnamed_1_2dc63b48___unnamed_4_5ca00198:name;
-const unique T.MasterIrp___unnamed_4_6ac6463c:name;
-const unique T.IrpCount___unnamed_4_6ac6463c:name;
-const unique T.SystemBuffer___unnamed_4_6ac6463c:name;
-const unique T.OwnerCount___unnamed_4_6f9ac8e1:name;
-const unique T.TableSize___unnamed_4_6f9ac8e1:name;
-const unique T.PowerSequence___unnamed_4_7a02167b:name;
-const unique T.SystemContext___unnamed_4_7d9d0c7e:name;
-const unique T.SystemPowerStateContext___unnamed_4_7d9d0c7e:name;
-const unique T.IoResourceRequirementList___unnamed_4_82f7a864:name;
-const unique T.Length___unnamed_4_9aec220b:name;
-const unique T.__unnamed_4_5ca00198___unnamed_4_a97c65a1:name;
-const unique T.Lock___unnamed_4_a97c65a1:name;
-const unique T.Reserved1___unnamed_4_c3479730:name;
-const unique T.TargetSystemState___unnamed_4_c3479730:name;
-const unique T.EffectiveSystemState___unnamed_4_c3479730:name;
-const unique T.CurrentSystemState___unnamed_4_c3479730:name;
-const unique T.IgnoreHibernationPath___unnamed_4_c3479730:name;
-const unique T.PseudoTransition___unnamed_4_c3479730:name;
-const unique T.Reserved2___unnamed_4_c3479730:name;
-const unique T.Status___unnamed_4_d99b6e2b:name;
-const unique T.Pointer___unnamed_4_d99b6e2b:name;
-const unique T.CurrentStackLocation___unnamed_4_f19b65c1:name;
-const unique T.PacketType___unnamed_4_f19b65c1:name;
-const unique T.Type___unnamed_4_fa10fc16:name;
-const unique T.SecurityInformation___unnamed_8_01efa60d:name;
-const unique T.Length___unnamed_8_01efa60d:name;
-const unique T.MinimumChannel___unnamed_8_08d4cef8:name;
-const unique T.MaximumChannel___unnamed_8_08d4cef8:name;
-const unique T.__unnamed_4_4e8dd2ba___unnamed_8_0a898c0c:name;
-const unique T.UserApcContext___unnamed_8_0a898c0c:name;
-const unique T.SecurityInformation___unnamed_8_1330f93a:name;
-const unique T.SecurityDescriptor___unnamed_8_1330f93a:name;
-const unique T.AsynchronousParameters___unnamed_8_181d0de9:name;
-const unique T.AllocationSize___unnamed_8_181d0de9:name;
-const unique T.Vpb___unnamed_8_4812764d:name;
-const unique T.DeviceObject___unnamed_8_4812764d:name;
-const unique T.Length___unnamed_8_559a91e6:name;
-const unique T.FsInformationClass___unnamed_8_559a91e6:name;
-const unique T.Length___unnamed_8_5845b309:name;
-const unique T.FileInformationClass___unnamed_8_5845b309:name;
-const unique T.LowPart___unnamed_8_58ee4a31:name;
-const unique T.HighPart___unnamed_8_58ee4a31:name;
-const unique T.AllocatedResources___unnamed_8_61acf4ce:name;
-const unique T.AllocatedResourcesTranslated___unnamed_8_61acf4ce:name;
-const unique T.DeviceTextType___unnamed_8_6acfee04:name;
-const unique T.LocaleId___unnamed_8_6acfee04:name;
-const unique T.Length___unnamed_8_7f26a9dd:name;
-const unique T.CompletionFilter___unnamed_8_7f26a9dd:name;
-const unique T.Vpb___unnamed_8_87add0bd:name;
-const unique T.DeviceObject___unnamed_8_87add0bd:name;
-const unique T.InPath___unnamed_8_b2773e4c:name;
-const unique T.Reserved___unnamed_8_b2773e4c:name;
-const unique T.Type___unnamed_8_b2773e4c:name;
-const unique T.Length___unnamed_8_de890d4e:name;
-const unique T.FsInformationClass___unnamed_8_de890d4e:name;
-const unique T.LowPart___unnamed_8_ef9ba0d3:name;
-const unique T.HighPart___unnamed_8_ef9ba0d3:name;
-
-// Type declarations
-
-const unique T.A11CHAR:name;
-const unique T.A19CHAR:name;
-const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_LIST:name;
-const unique T.A1_LUID_AND_ATTRIBUTES:name;
-const unique T.A256UINT2:name;
-const unique T.A28PFDRIVER_DISPATCH:name;
-const unique T.A2UCHAR:name;
-const unique T.A32UINT2:name;
-const unique T.A36CHAR:name;
-const unique T.A37CHAR:name;
-const unique T.A39CHAR:name;
-const unique T.A3UCHAR:name;
-const unique T.A3UINT4:name;
-const unique T.A3_LUID_AND_ATTRIBUTES:name;
-const unique T.A43CHAR:name;
-const unique T.A4PVOID:name;
-const unique T.A4UINT4:name;
-const unique T.A5_DEVICE_POWER_STATE:name;
-const unique T.A74CHAR:name;
-const unique T.A7_DEVICE_POWER_STATE:name;
-const unique T.A8UCHAR:name;
-const unique T.BUS_QUERY_ID_TYPE:name;
-const unique T.CHAR:name;
-const unique T.DEVICE_TEXT_TYPE:name;
-const unique T.F0:name;
-const unique T.F1:name;
-const unique T.F10:name;
-const unique T.F11:name;
-const unique T.F12:name;
-const unique T.F13:name;
-const unique T.F14:name;
-const unique T.F15:name;
-const unique T.F16:name;
-const unique T.F17:name;
-const unique T.F18:name;
-const unique T.F19:name;
-const unique T.F2:name;
-const unique T.F20:name;
-const unique T.F21:name;
-const unique T.F22:name;
-const unique T.F23:name;
-const unique T.F24:name;
-const unique T.F25:name;
-const unique T.F26:name;
-const unique T.F27:name;
-const unique T.F28:name;
-const unique T.F29:name;
-const unique T.F3:name;
-const unique T.F30:name;
-const unique T.F31:name;
-const unique T.F32:name;
-const unique T.F33:name;
-const unique T.F34:name;
-const unique T.F35:name;
-const unique T.F36:name;
-const unique T.F37:name;
-const unique T.F38:name;
-const unique T.F4:name;
-const unique T.F5:name;
-const unique T.F6:name;
-const unique T.F7:name;
-const unique T.F8:name;
-const unique T.F9:name;
-const unique T.FDRIVER_ADD_DEVICE:name;
-const unique T.FDRIVER_CANCEL:name;
-const unique T.FDRIVER_CONTROL:name;
-const unique T.FDRIVER_DISPATCH:name;
-const unique T.FDRIVER_INITIALIZE:name;
-const unique T.FDRIVER_STARTIO:name;
-const unique T.FDRIVER_UNLOAD:name;
-const unique T.FFAST_IO_ACQUIRE_FILE:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.FFAST_IO_DETACH_DEVICE:name;
-const unique T.FFAST_IO_DEVICE_CONTROL:name;
-const unique T.FFAST_IO_LOCK:name;
-const unique T.FFAST_IO_MDL_READ:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.FFAST_IO_QUERY_OPEN:name;
-const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.FFAST_IO_READ:name;
-const unique T.FFAST_IO_READ_COMPRESSED:name;
-const unique T.FFAST_IO_RELEASE_FILE:name;
-const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_UNLOCK_ALL:name;
-const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.FFAST_IO_UNLOCK_SINGLE:name;
-const unique T.FFAST_IO_WRITE:name;
-const unique T.FFAST_IO_WRITE_COMPRESSED:name;
-const unique T.FIO_COMPLETION_ROUTINE:name;
-const unique T.FKDEFERRED_ROUTINE:name;
-const unique T.INT2:name;
-const unique T.INT4:name;
-const unique T.INT8:name;
-const unique T.PA11CHAR:name;
-const unique T.PA19CHAR:name;
-const unique T.PA36CHAR:name;
-const unique T.PA37CHAR:name;
-const unique T.PA39CHAR:name;
-const unique T.PA43CHAR:name;
-const unique T.PA74CHAR:name;
-const unique T.PCHAR:name;
-const unique T.PF19:name;
-const unique T.PF21:name;
-const unique T.PF23:name;
-const unique T.PF24:name;
-const unique T.PF25:name;
-const unique T.PF33:name;
-const unique T.PF34:name;
-const unique T.PF35:name;
-const unique T.PF36:name;
-const unique T.PF37:name;
-const unique T.PF38:name;
-const unique T.PFDRIVER_ADD_DEVICE:name;
-const unique T.PFDRIVER_CANCEL:name;
-const unique T.PFDRIVER_CONTROL:name;
-const unique T.PFDRIVER_DISPATCH:name;
-const unique T.PFDRIVER_INITIALIZE:name;
-const unique T.PFDRIVER_STARTIO:name;
-const unique T.PFDRIVER_UNLOAD:name;
-const unique T.PFFAST_IO_ACQUIRE_FILE:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.PFFAST_IO_DETACH_DEVICE:name;
-const unique T.PFFAST_IO_DEVICE_CONTROL:name;
-const unique T.PFFAST_IO_LOCK:name;
-const unique T.PFFAST_IO_MDL_READ:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.PFFAST_IO_QUERY_OPEN:name;
-const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.PFFAST_IO_READ:name;
-const unique T.PFFAST_IO_READ_COMPRESSED:name;
-const unique T.PFFAST_IO_RELEASE_FILE:name;
-const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_UNLOCK_ALL:name;
-const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
-const unique T.PFFAST_IO_WRITE:name;
-const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
-const unique T.PFIO_COMPLETION_ROUTINE:name;
-const unique T.PFKDEFERRED_ROUTINE:name;
-const unique T.PINT4:name;
-const unique T.POWER_ACTION:name;
-const unique T.PPCHAR:name;
-const unique T.PPF24:name;
-const unique T.PPP_FILE_OBJECT:name;
-const unique T.PPVOID:name;
-const unique T.PP_DEVICE_EXTENSION:name;
-const unique T.PP_DEVICE_OBJECT:name;
-const unique T.PP_DRIVER_OBJECT:name;
-const unique T.PP_ERESOURCE:name;
-const unique T.PP_FILE_OBJECT:name;
-const unique T.PP_IRP:name;
-const unique T.PP_LIST_ENTRY:name;
-const unique T.PP_MDL:name;
-const unique T.PP_PORT:name;
-const unique T.PP_UNICODE_STRING:name;
-const unique T.PUCHAR:name;
-const unique T.PUINT2:name;
-const unique T.PUINT4:name;
-const unique T.PVOID:name;
-const unique T.PWMIGUIDREGINFO:name;
-const unique T.P_ACCESS_STATE:name;
-const unique T.P_CM_RESOURCE_LIST:name;
-const unique T.P_COMPRESSED_DATA_INFO:name;
-const unique T.P_DEVICE_CAPABILITIES:name;
-const unique T.P_DEVICE_EXTENSION:name;
-const unique T.P_DEVICE_OBJECT:name;
-const unique T.P_DEVOBJ_EXTENSION:name;
-const unique T.P_DRIVER_EXTENSION:name;
-const unique T.P_DRIVER_OBJECT:name;
-const unique T.P_EPROCESS:name;
-const unique T.P_ERESOURCE:name;
-const unique T.P_ETHREAD:name;
-const unique T.P_FAST_IO_DISPATCH:name;
-const unique T.P_FILE_BASIC_INFORMATION:name;
-const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
-const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.P_FILE_OBJECT:name;
-const unique T.P_FILE_STANDARD_INFORMATION:name;
-const unique T.P_GLOBALS:name;
-const unique T.P_GUID:name;
-const unique T.P_INTERFACE:name;
-const unique T.P_IO_COMPLETION_CONTEXT:name;
-const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.P_IO_SECURITY_CONTEXT:name;
-const unique T.P_IO_STACK_LOCATION:name;
-const unique T.P_IO_STATUS_BLOCK:name;
-const unique T.P_IO_TIMER:name;
-const unique T.P_IRP:name;
-const unique T.P_KAPC:name;
-const unique T.P_KDPC:name;
-const unique T.P_KEVENT:name;
-const unique T.P_KEYBOARD_INPUT_DATA:name;
-const unique T.P_KSEMAPHORE:name;
-const unique T.P_KTHREAD:name;
-const unique T.P_LARGE_INTEGER:name;
-const unique T.P_LIST_ENTRY:name;
-const unique T.P_MDL:name;
-const unique T.P_OWNER_ENTRY:name;
-const unique T.P_PORT:name;
-const unique T.P_POWER_SEQUENCE:name;
-const unique T.P_SCSI_REQUEST_BLOCK:name;
-const unique T.P_SECTION_OBJECT_POINTERS:name;
-const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.P_UNICODE_STRING:name;
-const unique T.P_VPB:name;
-const unique T.UCHAR:name;
-const unique T.UINT2:name;
-const unique T.UINT4:name;
-const unique T.VOID:name;
-const unique T.WMIENABLEDISABLECONTROL:name;
-const unique T.WMIGUIDREGINFO:name;
-const unique T._ACCESS_STATE:name;
-const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_LIST:name;
-const unique T._CM_RESOURCE_LIST:name;
-const unique T._COMPRESSED_DATA_INFO:name;
-const unique T._DEVICE_CAPABILITIES:name;
-const unique T._DEVICE_EXTENSION:name;
-const unique T._DEVICE_OBJECT:name;
-const unique T._DEVICE_POWER_STATE:name;
-const unique T._DEVICE_RELATION_TYPE:name;
-const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
-const unique T._DEVOBJ_EXTENSION:name;
-const unique T._DISPATCHER_HEADER:name;
-const unique T._DRIVER_EXTENSION:name;
-const unique T._DRIVER_OBJECT:name;
-const unique T._EPROCESS:name;
-const unique T._ERESOURCE:name;
-const unique T._ETHREAD:name;
-const unique T._FAST_IO_DISPATCH:name;
-const unique T._FAST_MUTEX:name;
-const unique T._FILE_BASIC_INFORMATION:name;
-const unique T._FILE_GET_QUOTA_INFORMATION:name;
-const unique T._FILE_INFORMATION_CLASS:name;
-const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T._FILE_OBJECT:name;
-const unique T._FILE_STANDARD_INFORMATION:name;
-const unique T._FSINFOCLASS:name;
-const unique T._GLOBALS:name;
-const unique T._GUID:name;
-const unique T._INITIAL_PRIVILEGE_SET:name;
-const unique T._INTERFACE:name;
-const unique T._INTERFACE_TYPE:name;
-const unique T._IO_ALLOCATION_ACTION:name;
-const unique T._IO_COMPLETION_CONTEXT:name;
-const unique T._IO_REMOVE_LOCK:name;
-const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T._IO_RESOURCE_DESCRIPTOR:name;
-const unique T._IO_RESOURCE_LIST:name;
-const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T._IO_SECURITY_CONTEXT:name;
-const unique T._IO_STACK_LOCATION:name;
-const unique T._IO_STATUS_BLOCK:name;
-const unique T._IO_TIMER:name;
-const unique T._IRP:name;
-const unique T._IRQ_DEVICE_POLICY:name;
-const unique T._IRQ_PRIORITY:name;
-const unique T._KAPC:name;
-const unique T._KDEVICE_QUEUE:name;
-const unique T._KDEVICE_QUEUE_ENTRY:name;
-const unique T._KDPC:name;
-const unique T._KEVENT:name;
-const unique T._KEYBOARD_ATTRIBUTES:name;
-const unique T._KEYBOARD_ID:name;
-const unique T._KEYBOARD_INDICATOR_PARAMETERS:name;
-const unique T._KEYBOARD_INPUT_DATA:name;
-const unique T._KEYBOARD_TYPEMATIC_PARAMETERS:name;
-const unique T._KSEMAPHORE:name;
-const unique T._KTHREAD:name;
-const unique T._LARGE_INTEGER:name;
-const unique T._LIST_ENTRY:name;
-const unique T._LUID:name;
-const unique T._LUID_AND_ATTRIBUTES:name;
-const unique T._MDL:name;
-const unique T._OWNER_ENTRY:name;
-const unique T._PORT:name;
-const unique T._POWER_SEQUENCE:name;
-const unique T._POWER_STATE:name;
-const unique T._POWER_STATE_TYPE:name;
-const unique T._PRIVILEGE_SET:name;
-const unique T._SCSI_REQUEST_BLOCK:name;
-const unique T._SECTION_OBJECT_POINTERS:name;
-const unique T._SECURITY_IMPERSONATION_LEVEL:name;
-const unique T._SECURITY_QUALITY_OF_SERVICE:name;
-const unique T._SECURITY_SUBJECT_CONTEXT:name;
-const unique T._SYSTEM_POWER_STATE:name;
-const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T._UNICODE_STRING:name;
-const unique T._VPB:name;
-const unique T._WAIT_CONTEXT_BLOCK:name;
-const unique T._WMILIB_CONTEXT:name;
-const unique T.__unnamed_12_0d6a30de:name;
-const unique T.__unnamed_12_17f5c211:name;
-const unique T.__unnamed_12_1fb42e39:name;
-const unique T.__unnamed_12_2a1563c6:name;
-const unique T.__unnamed_12_31347272:name;
-const unique T.__unnamed_12_429aadc0:name;
-const unique T.__unnamed_12_4719de1a:name;
-const unique T.__unnamed_12_4be56faa:name;
-const unique T.__unnamed_12_5ce25b92:name;
-const unique T.__unnamed_12_7a698b72:name;
-const unique T.__unnamed_12_87c0de8d:name;
-const unique T.__unnamed_12_98bfc55a:name;
-const unique T.__unnamed_12_ab1bd9d7:name;
-const unique T.__unnamed_12_b0429be9:name;
-const unique T.__unnamed_12_b43e8de8:name;
-const unique T.__unnamed_12_bfdb39ee:name;
-const unique T.__unnamed_12_cd42b3c3:name;
-const unique T.__unnamed_12_e668effc:name;
-const unique T.__unnamed_12_e80d029e:name;
-const unique T.__unnamed_16_07c0bcc5:name;
-const unique T.__unnamed_16_29cb9f2f:name;
-const unique T.__unnamed_16_30f11dbf:name;
-const unique T.__unnamed_16_35034f68:name;
-const unique T.__unnamed_16_487a9498:name;
-const unique T.__unnamed_16_5f6a8844:name;
-const unique T.__unnamed_16_7177b9f3:name;
-const unique T.__unnamed_16_88e91ef6:name;
-const unique T.__unnamed_16_8c506c98:name;
-const unique T.__unnamed_16_9ac2e5f8:name;
-const unique T.__unnamed_16_b93842ad:name;
-const unique T.__unnamed_16_b9c62eab:name;
-const unique T.__unnamed_16_bb584060:name;
-const unique T.__unnamed_16_dba55c7c:name;
-const unique T.__unnamed_16_e70c268b:name;
-const unique T.__unnamed_16_e734d694:name;
-const unique T.__unnamed_16_eac6dbea:name;
-const unique T.__unnamed_16_f6cae4c2:name;
-const unique T.__unnamed_16_fe36e4f4:name;
-const unique T.__unnamed_1_29794256:name;
-const unique T.__unnamed_1_2dc63b48:name;
-const unique T.__unnamed_1_2ef8da39:name;
-const unique T.__unnamed_1_faa7dc71:name;
-const unique T.__unnamed_20_f4d2e6d8:name;
-const unique T.__unnamed_24_41cbc8c0:name;
-const unique T.__unnamed_24_5419c914:name;
-const unique T.__unnamed_24_67a5ff10:name;
-const unique T.__unnamed_24_72c3976e:name;
-const unique T.__unnamed_24_a26050bb:name;
-const unique T.__unnamed_24_b8f476db:name;
-const unique T.__unnamed_24_d09044b4:name;
-const unique T.__unnamed_2_46cc4597:name;
-const unique T.__unnamed_40_7218f704:name;
-const unique T.__unnamed_40_c55c9377:name;
-const unique T.__unnamed_44_5584090d:name;
-const unique T.__unnamed_48_cf99b13f:name;
-const unique T.__unnamed_4_069846fb:name;
-const unique T.__unnamed_4_224c32f4:name;
-const unique T.__unnamed_4_2de698da:name;
-const unique T.__unnamed_4_3a2fdc5e:name;
-const unique T.__unnamed_4_3a4c1a13:name;
-const unique T.__unnamed_4_43913aa5:name;
-const unique T.__unnamed_4_4e8dd2ba:name;
-const unique T.__unnamed_4_52603077:name;
-const unique T.__unnamed_4_52c594f7:name;
-const unique T.__unnamed_4_5ca00198:name;
-const unique T.__unnamed_4_6ac6463c:name;
-const unique T.__unnamed_4_6f9ac8e1:name;
-const unique T.__unnamed_4_7a02167b:name;
-const unique T.__unnamed_4_7d9d0c7e:name;
-const unique T.__unnamed_4_82f7a864:name;
-const unique T.__unnamed_4_9aec220b:name;
-const unique T.__unnamed_4_a97c65a1:name;
-const unique T.__unnamed_4_c3479730:name;
-const unique T.__unnamed_4_d99b6e2b:name;
-const unique T.__unnamed_4_f19b65c1:name;
-const unique T.__unnamed_4_fa10fc16:name;
-const unique T.__unnamed_8_01efa60d:name;
-const unique T.__unnamed_8_08d4cef8:name;
-const unique T.__unnamed_8_0a898c0c:name;
-const unique T.__unnamed_8_1330f93a:name;
-const unique T.__unnamed_8_181d0de9:name;
-const unique T.__unnamed_8_4812764d:name;
-const unique T.__unnamed_8_559a91e6:name;
-const unique T.__unnamed_8_5845b309:name;
-const unique T.__unnamed_8_58ee4a31:name;
-const unique T.__unnamed_8_61acf4ce:name;
-const unique T.__unnamed_8_6acfee04:name;
-const unique T.__unnamed_8_7f26a9dd:name;
-const unique T.__unnamed_8_87add0bd:name;
-const unique T.__unnamed_8_b2773e4c:name;
-const unique T.__unnamed_8_de890d4e:name;
-const unique T.__unnamed_8_ef9ba0d3:name;
-
-function AssocClassList__GLOBALS(int) returns (int);
-function AssocClassList__GLOBALSInv(int) returns (int);
-function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
-function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
-function Buffer__UNICODE_STRING(int) returns (int);
-function Buffer__UNICODE_STRINGInv(int) returns (int);
-function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
-function DataIn__DEVICE_EXTENSION(int) returns (int);
-function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
-function DataOut__DEVICE_EXTENSION(int) returns (int);
-function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
-function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
-function Enabled__DEVICE_EXTENSION(int) returns (int);
-function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 284);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 284);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1) == Enabled__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 284)} MINUS_LEFT_PTR(x, 1, 284) == Enabled__DEVICE_EXTENSIONInv(x));
-function Enabled__PORT(int) returns (int);
-function Enabled__PORTInv(int) returns (int);
-function _S_Enabled__PORT([int]bool) returns ([int]bool);
-function _S_Enabled__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Enabled__PORTInv(Enabled__PORT(x))} Enabled__PORTInv(Enabled__PORT(x)) == x);
-axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORT(Enabled__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORT(S)[x]} _S_Enabled__PORT(S)[x] <==> S[Enabled__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORTInv(S)[x]} _S_Enabled__PORTInv(S)[x] <==> S[Enabled__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORT(S)} S[x] ==> _S_Enabled__PORT(S)[Enabled__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORTInv(S)} S[x] ==> _S_Enabled__PORTInv(S)[Enabled__PORTInv(x)]);
-
-axiom (forall x:int :: {Enabled__PORT(x)} Enabled__PORT(x) == x + 8);
-axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORTInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == Enabled__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == Enabled__PORTInv(x));
-function File__DEVICE_EXTENSION(int) returns (int);
-function File__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 280);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 280);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1) == File__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 280)} MINUS_LEFT_PTR(x, 1, 280) == File__DEVICE_EXTENSIONInv(x));
-function File__PORT(int) returns (int);
-function File__PORTInv(int) returns (int);
-function _S_File__PORT([int]bool) returns ([int]bool);
-function _S_File__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
-
-axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
-function Flink__LIST_ENTRY(int) returns (int);
-function Flink__LIST_ENTRYInv(int) returns (int);
-function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
-function Free__PORT(int) returns (int);
-function Free__PORTInv(int) returns (int);
-function _S_Free__PORT([int]bool) returns ([int]bool);
-function _S_Free__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
-
-axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
-function GrandMaster__GLOBALS(int) returns (int);
-function GrandMaster__GLOBALSInv(int) returns (int);
-function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
-function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
-function InputData__DEVICE_EXTENSION(int) returns (int);
-function InputData__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
-function LegacyDeviceList__GLOBALS(int) returns (int);
-function LegacyDeviceList__GLOBALSInv(int) returns (int);
-function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
-function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 888);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 888);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1) == LegacyDeviceList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 888)} MINUS_LEFT_PTR(x, 1, 888) == LegacyDeviceList__GLOBALSInv(x));
-function Link__DEVICE_EXTENSION(int) returns (int);
-function Link__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 272);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 272);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1) == Link__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 272)} MINUS_LEFT_PTR(x, 1, 272) == Link__DEVICE_EXTENSIONInv(x));
-function NumAssocClass__GLOBALS(int) returns (int);
-function NumAssocClass__GLOBALSInv(int) returns (int);
-function _S_NumAssocClass__GLOBALS([int]bool) returns ([int]bool);
-function _S_NumAssocClass__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x))} NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x)) == x);
-axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALS(NumAssocClass__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALS(S)[x]} _S_NumAssocClass__GLOBALS(S)[x] <==> S[NumAssocClass__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALSInv(S)[x]} _S_NumAssocClass__GLOBALSInv(S)[x] <==> S[NumAssocClass__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALS(S)} S[x] ==> _S_NumAssocClass__GLOBALS(S)[NumAssocClass__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALSInv(S)} S[x] ==> _S_NumAssocClass__GLOBALSInv(S)[NumAssocClass__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {NumAssocClass__GLOBALS(x)} NumAssocClass__GLOBALS(x) == x + 12);
-axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALSInv(x) == x - 12);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == NumAssocClass__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == NumAssocClass__GLOBALSInv(x));
-function PnP__DEVICE_EXTENSION(int) returns (int);
-function PnP__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
-function Port__PORT(int) returns (int);
-function Port__PORTInv(int) returns (int);
-function _S_Port__PORT([int]bool) returns ([int]bool);
-function _S_Port__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
-
-axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
-function RegistryPath__GLOBALS(int) returns (int);
-function RegistryPath__GLOBALSInv(int) returns (int);
-function _S_RegistryPath__GLOBALS([int]bool) returns ([int]bool);
-function _S_RegistryPath__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x))} RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x)) == x);
-axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALS(RegistryPath__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALS(S)[x]} _S_RegistryPath__GLOBALS(S)[x] <==> S[RegistryPath__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALSInv(S)[x]} _S_RegistryPath__GLOBALSInv(S)[x] <==> S[RegistryPath__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALS(S)} S[x] ==> _S_RegistryPath__GLOBALS(S)[RegistryPath__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALSInv(S)} S[x] ==> _S_RegistryPath__GLOBALSInv(S)[RegistryPath__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {RegistryPath__GLOBALS(x)} RegistryPath__GLOBALS(x) == x + 360);
-axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALSInv(x) == x - 360);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 360, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 360, 1) == RegistryPath__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 360)} MINUS_LEFT_PTR(x, 1, 360) == RegistryPath__GLOBALSInv(x));
-function Self__DEVICE_EXTENSION(int) returns (int);
-function Self__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
-function StackSize__DEVICE_OBJECT(int) returns (int);
-function StackSize__DEVICE_OBJECTInv(int) returns (int);
-function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
-function Started__DEVICE_EXTENSION(int) returns (int);
-function Started__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
-function TopPort__DEVICE_EXTENSION(int) returns (int);
-function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
-function UnitId__DEVICE_EXTENSION(int) returns (int);
-function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 196);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 196);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1) == UnitId__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 196)} MINUS_LEFT_PTR(x, 1, 196) == UnitId__DEVICE_EXTENSIONInv(x));
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure nondet_choice() returns (x:int);
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-var Res_DEVICE_STACK:[int]int;
-var Res_DEV_EXTN:[int]int;
-var Res_DEV_OBJ_INIT:[int]int;
-var Res_SPIN_LOCK:[int]int;
-
-
-
-////////////////////
-// Between predicate
-////////////////////
-function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
-function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
-
-
-//////////////////////////
-// Between set constructor
-//////////////////////////
-function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
-
-////////////////////////////////////////////////////
-// axioms relating ReachBetween and ReachBetweenSet
-////////////////////////////////////////////////////
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
-axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
-
-
-//////////////////////////
-// Axioms for ReachBetween
-//////////////////////////
-
-// reflexive
-axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
-
-// step
-//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
-axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
-
-// reach
-axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
-
-// cycle
-axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
-
-// sandwich
-axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
-
-// order1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
-
-// order2
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
-
-// transitive1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
-
-// transitive2
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
-
-// transitive3
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
-
-// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
-// It cannot be proved using the rest of the axioms.
-axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
-
-// relation between ReachAvoiding and ReachBetween
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
-
-// update
-axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
- ///////////////////////////////
- // Shifts for linking fields
- ///////////////////////////////
-function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
-axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
-axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
-
-const unique Globals : int;
-axiom(Globals != 0);
-
-
-procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoAllocateIrp($StackSize$1$20453.15$IoAllocateIrp$81:int, $ChargeQuota$2$20454.17$IoAllocateIrp$81:int) returns ($result.IoAllocateIrp$20452.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
-requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
-//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
-ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
-//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
-ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
-//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
-ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
-//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoFreeIrp($Irp$1$21417.14$IoFreeIrp$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KbdEnableDisablePort($EnableFlag$1$543.15$KbdEnableDisablePort$161:int, $Irp$2$544.15$KbdEnableDisablePort$161:int, $Port$3$545.25$KbdEnableDisablePort$161:int, $File$4$546.22$KbdEnableDisablePort$161:int) returns ($result.KbdEnableDisablePort$542.0$1$:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeyboardClassCleanupQueue($DeviceObject$1$1080.28$KeyboardClassCleanupQueue$121:int, $DeviceExtension$2$1081.28$KeyboardClassCleanupQueue$121:int, $FileObject$3$1082.28$KeyboardClassCleanupQueue$121:int);
-
-//TAG: requires __resource("DEV_EXTN", DeviceExtension) == 1
-requires(Res_DEV_EXTN[$DeviceExtension$2$1081.28$KeyboardClassCleanupQueue$121] == 1);
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires __resource("DEV_OBJ_INIT", DeviceObject) == 1
-requires(Res_DEV_OBJ_INIT[$DeviceObject$1$1080.28$KeyboardClassCleanupQueue$121] == 1);
-//TAG: ensures __resource("DEV_EXTN", DeviceExtension) == 1
-ensures(Res_DEV_EXTN[$DeviceExtension$2$1081.28$KeyboardClassCleanupQueue$121] == 1);
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-//TAG: ensures __resource("DEV_OBJ_INIT", DeviceObject) == 1
-ensures(Res_DEV_OBJ_INIT[$DeviceObject$1$1080.28$KeyboardClassCleanupQueue$121] == 1);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RemoveEntryList($Entry$1$6929.19$RemoveEntryList$41:int) returns ($result.RemoveEntryList$6928.0$1$:int);
-
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __setminus(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList)), __set(Entry)))
-ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41))) && Subset(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)))));
-//TAG: ensures Entry->Flink == __old(Entry->Flink)
-ensures(Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)] == old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure __PREfastPagedCode();
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeyboardClassUnload($DriverObject$1$2966.24$KeyboardClassUnload$41:int)
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-modifies alloc;
-free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for:
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for:
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for:
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for:
-
-//TAG: havoc memory locations by default
-modifies Mem;
-{
-var havoc_stringTemp:int;
-var condVal:int;
-var $DriverObject$1$2966.24$KeyboardClassUnload$4 : int;
-var $IoAllocateIrp.arg.1$9$ : int;
-var $KbdDebugPrint.arg.2$1$ : int;
-var $KbdDebugPrint.arg.2$19$ : int;
-var $RtlAssert.arg.1$14$ : int;
-var $RtlAssert.arg.1$16$ : int;
-var $RtlAssert.arg.1$18$ : int;
-var $RtlAssert.arg.1$3$ : int;
-var $RtlAssert.arg.1$5$ : int;
-var $RtlAssert.arg.1$7$ : int;
-var $RtlAssert.arg.2$13$ : int;
-var $RtlAssert.arg.2$15$ : int;
-var $RtlAssert.arg.2$17$ : int;
-var $RtlAssert.arg.2$2$ : int;
-var $RtlAssert.arg.2$4$ : int;
-var $RtlAssert.arg.2$6$ : int;
-var $data$3$2989.22$KeyboardClassUnload$4 : int;
-var $enabled$6$3006.16$KeyboardClassUnload$4 : int;
-var $entry$2$2988.16$KeyboardClassUnload$4 : int;
-var $file$7$3007.21$KeyboardClassUnload$4 : int;
-var $i$8$3075.14$KeyboardClassUnload$4 : int;
-var $irp$5$2991.9$KeyboardClassUnload$4 : int;
-var $port$4$2990.10$KeyboardClassUnload$4 : int;
-var $result.IoAllocateIrp$3031.31$8$ : int;
-var $result.KbdEnableDisablePort$3033.37$10$ : int;
-var $result.ObfDereferenceObject$3044.12$11$ : int;
-var $result.RemoveEntryList$3055.24$12$ : int;
-var tempBoogie0:int;
-var tempBoogie1:int;
-var tempBoogie2:int;
-var tempBoogie3:int;
-var tempBoogie4:int;
-var tempBoogie5:int;
-var tempBoogie6:int;
-var tempBoogie7:int;
-var tempBoogie8:int;
-var tempBoogie9:int;
-var tempBoogie10:int;
-var tempBoogie11:int;
-var tempBoogie12:int;
-var tempBoogie13:int;
-var tempBoogie14:int;
-var tempBoogie15:int;
-var tempBoogie16:int;
-var tempBoogie17:int;
-var tempBoogie18:int;
-var tempBoogie19:int;
-var LOOP_15_alloc:[int]name;
-var LOOP_15_Mem:[name][int]int;
-var LOOP_15_Res_DEVICE_STACK:[int]int;
-var LOOP_15_Res_DEV_EXTN:[int]int;
-var LOOP_15_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_15_Res_SPIN_LOCK:[int]int;
-var LOOP_108_alloc:[int]name;
-var LOOP_108_Mem:[name][int]int;
-var LOOP_108_Res_DEVICE_STACK:[int]int;
-var LOOP_108_Res_DEV_EXTN:[int]int;
-var LOOP_108_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_108_Res_SPIN_LOCK:[int]int;
-
-
-start:
-
-assume (alloc[$DriverObject$1$2966.24$KeyboardClassUnload$41] != UNALLOCATED);
-call $file$7$3007.21$KeyboardClassUnload$4 := __HAVOC_malloc(4);
-$DriverObject$1$2966.24$KeyboardClassUnload$4 := $DriverObject$1$2966.24$KeyboardClassUnload$41;
-goto label_3;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3088)
-label_1:
-call __HAVOC_free($file$7$3007.21$KeyboardClassUnload$4);
-assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
-assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
-assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
-assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
-assume (forall m:int :: {Mem[T.A11CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A11CHAR][m] == old(Mem[T.A11CHAR])[m]);
-assume (forall m:int :: {Mem[T.A19CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A19CHAR][m] == old(Mem[T.A19CHAR])[m]);
-assume (forall m:int :: {Mem[T.A36CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A36CHAR][m] == old(Mem[T.A36CHAR])[m]);
-assume (forall m:int :: {Mem[T.A37CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A37CHAR][m] == old(Mem[T.A37CHAR])[m]);
-assume (forall m:int :: {Mem[T.A39CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A39CHAR][m] == old(Mem[T.A39CHAR])[m]);
-assume (forall m:int :: {Mem[T.A43CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A43CHAR][m] == old(Mem[T.A43CHAR])[m]);
-assume (forall m:int :: {Mem[T.A74CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A74CHAR][m] == old(Mem[T.A74CHAR])[m]);
-assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m] == old(Mem[T.CurrentStackLocation___unnamed_4_f19b65c1])[m]);
-assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Enabled__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__PORT][m] == old(Mem[T.Enabled__PORT])[m]);
-assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
-assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
-assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
-assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
-assume (forall m:int :: {Mem[T.NumAssocClass__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumAssocClass__GLOBALS][m] == old(Mem[T.NumAssocClass__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
-assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_IRP][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IRP][m] == old(Mem[T.P_IRP])[m]);
-assume (forall m:int :: {Mem[T.P_KEYBOARD_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_KEYBOARD_INPUT_DATA][m] == old(Mem[T.P_KEYBOARD_INPUT_DATA])[m]);
-assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.P_PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_PORT][m] == old(Mem[T.P_PORT])[m]);
-assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
-assume (forall m:int :: {Mem[T.RegistryPath__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RegistryPath__GLOBALS][m] == old(Mem[T.RegistryPath__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
-assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
-assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3088)
-label_2:
-assume false;
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2988)
-label_3:
-goto label_4;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2989)
-label_4:
-goto label_5;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2990)
-label_5:
-goto label_6;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2991)
-label_6:
-goto label_7;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2995)
-label_7:
-call __PREfastPagedCode ();
-goto label_13;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2997)
-label_10:
-// skip KbdDebugPrint
-goto label_14;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2997)
-label_13:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$1$ := havoc_stringTemp ;
-goto label_10;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3002)
-label_14:
-$entry$2$2988.16$KeyboardClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))] ;
-goto label_15;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3003)
-label_15:
-// loop entry initialization...
-LOOP_15_alloc := alloc;
-LOOP_15_Mem := Mem;
-LOOP_15_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_15_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_15_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_15_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_15_head;
-
-
-label_15_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: requires __setin(entry, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[$entry$2$2988.16$KeyboardClassUnload$4]);
-assume(forall f:int :: {alloc[Base(f)]} LOOP_15_alloc[Base(f)] == UNALLOCATED || LOOP_15_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_15_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_15_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_15_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_15_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_15_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_15_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_15_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-goto label_15_true , label_15_false ;
-
-
-label_15_true :
-assume ($entry$2$2988.16$KeyboardClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
-goto label_16;
-
-
-label_15_false :
-assume !($entry$2$2988.16$KeyboardClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
-goto label_85;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3006)
-label_16:
-goto label_17;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3006)
-label_17:
-$enabled$6$3006.16$KeyboardClassUnload$4 := 0 ;
-goto label_18;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3007)
-label_18:
-goto label_19;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3007)
-label_19:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4 := 0];
-goto label_20;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3009)
-label_20:
-$data$3$2989.22$KeyboardClassUnload$4 := MINUS_LEFT_PTR($entry$2$2988.16$KeyboardClassUnload$4, 1, 272) ;
-goto label_21;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
-label_21:
-goto label_21_true , label_21_false ;
-
-
-label_21_true :
-assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
-goto label_25;
-
-
-label_21_false :
-assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
-label_22:
-// skip RtlAssert
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
-label_25:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$2$ := havoc_stringTemp ;
-goto label_26;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
-label_26:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$3$ := havoc_stringTemp ;
-goto label_22;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3012)
-label_27:
-goto label_27_true , label_27_false ;
-
-
-label_27_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_28;
-
-
-label_27_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_40;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3013)
-label_28:
-$port$4$2990.10$KeyboardClassUnload$4 := PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]) ;
-goto label_29;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
-label_29:
-goto label_29_true , label_29_false ;
-
-
-label_29_true :
-assume (Mem[T.Port__PORT][Port__PORT($port$4$2990.10$KeyboardClassUnload$4)] == $data$3$2989.22$KeyboardClassUnload$4);
-goto label_35;
-
-
-label_29_false :
-assume !(Mem[T.Port__PORT][Port__PORT($port$4$2990.10$KeyboardClassUnload$4)] == $data$3$2989.22$KeyboardClassUnload$4);
-goto label_33;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
-label_30:
-// skip RtlAssert
-goto label_35;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
-label_33:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$4$ := havoc_stringTemp ;
-goto label_34;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
-label_34:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$5$ := havoc_stringTemp ;
-goto label_30;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3016)
-label_35:
-$enabled$6$3006.16$KeyboardClassUnload$4 := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2990.10$KeyboardClassUnload$4)] ;
-goto label_36;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3017)
-label_36:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4 := Mem[T.File__PORT][File__PORT($port$4$2990.10$KeyboardClassUnload$4)]];
-goto label_37;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3019)
-label_37:
-Mem[T.Enabled__PORT] := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2990.10$KeyboardClassUnload$4) := 0];
-goto label_38;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3020)
-label_38:
-Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT($port$4$2990.10$KeyboardClassUnload$4) := 0];
-goto label_39;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3021)
-label_39:
-Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT($port$4$2990.10$KeyboardClassUnload$4) := 1];
-goto label_49;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3024)
-label_40:
-$enabled$6$3006.16$KeyboardClassUnload$4 := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] ;
-goto label_41;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3025)
-label_41:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
-goto label_42;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
-label_42:
-goto label_42_true , label_42_false ;
-
-
-label_42_true :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
-goto label_48;
-
-
-label_42_false :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
-goto label_46;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
-label_43:
-// skip RtlAssert
-goto label_48;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
-label_46:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$6$ := havoc_stringTemp ;
-goto label_47;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
-label_47:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$7$ := havoc_stringTemp ;
-goto label_43;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3027)
-label_48:
-Mem[T.Enabled__DEVICE_EXTENSION] := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := 0];
-goto label_49;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3030)
-label_49:
-goto label_49_true , label_49_false ;
-
-
-label_49_true :
-assume ($enabled$6$3006.16$KeyboardClassUnload$4 != 0);
-goto label_53;
-
-
-label_49_false :
-assume ($enabled$6$3006.16$KeyboardClassUnload$4 == 0);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3031)
-label_50:
-call $result.IoAllocateIrp$3031.31$8$ := IoAllocateIrp ($IoAllocateIrp.arg.1$9$, 0);
-goto label_54;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3031)
-label_53:
-$IoAllocateIrp.arg.1$9$ := PLUS(Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)])], 1, 1) ;
-goto label_50;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3031)
-label_54:
-$irp$5$2991.9$KeyboardClassUnload$4 := $result.IoAllocateIrp$3031.31$8$ ;
-goto label_55;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3032)
-label_55:
-goto label_55_true , label_55_false ;
-
-
-label_55_true :
-assume ($irp$5$2991.9$KeyboardClassUnload$4 != 0);
-goto label_56;
-
-
-label_55_false :
-assume ($irp$5$2991.9$KeyboardClassUnload$4 == 0);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3033)
-label_56:
-call $result.KbdEnableDisablePort$3033.37$10$ := KbdEnableDisablePort (0, $irp$5$2991.9$KeyboardClassUnload$4, $data$3$2989.22$KeyboardClassUnload$4, $file$7$3007.21$KeyboardClassUnload$4);
-goto label_59;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3034)
-label_59:
-call IoFreeIrp ($irp$5$2991.9$KeyboardClassUnload$4);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3043)
-label_62:
-goto label_62_true , label_62_false ;
-
-
-label_62_true :
-assume (Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4] != 0);
-goto label_63;
-
-
-label_62_false :
-assume (Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4] == 0);
-goto label_66;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3044)
-label_63:
-call $result.ObfDereferenceObject$3044.12$11$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4]);
-goto label_66;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3051)
-label_66:
-goto label_66_true , label_66_false ;
-
-
-label_66_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_70;
-
-
-label_66_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_67;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3052)
-label_67:
-call KeyboardClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], $data$3$2989.22$KeyboardClassUnload$4, 0);
-goto label_70;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3055)
-label_70:
-call $result.RemoveEntryList$3055.24$12$ := RemoveEntryList (Link__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4));
-goto label_73;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3056)
-label_73:
-$entry$2$2988.16$KeyboardClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($entry$2$2988.16$KeyboardClassUnload$4)] ;
-goto label_74;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
-label_74:
-goto label_74_true , label_74_false ;
-
-
-label_74_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
-goto label_75;
-
-
-label_74_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
-goto label_81;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
-label_75:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], 0);
-goto label_78;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
-label_78:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := 0];
-goto label_79;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
-label_79:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
-goto label_80;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
-label_80:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
-goto label_81;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
-label_81:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]);
-goto label_84;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
-label_84:
-$data$3$2989.22$KeyboardClassUnload$4 := 0 ;
-goto label_15_head;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3064)
-label_85:
-goto label_85_true , label_85_false ;
-
-
-label_85_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_86;
-
-
-label_85_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3065)
-label_86:
-$data$3$2989.22$KeyboardClassUnload$4 := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] ;
-goto label_87;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3066)
-label_87:
-Mem[T.GrandMaster__GLOBALS] := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals) := 0];
-goto label_88;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3068)
-label_88:
-call KeyboardClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], $data$3$2989.22$KeyboardClassUnload$4, 0);
-goto label_91;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
-label_91:
-goto label_91_true , label_91_false ;
-
-
-label_91_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
-goto label_92;
-
-
-label_91_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
-goto label_98;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
-label_92:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], 0);
-goto label_95;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
-label_95:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := 0];
-goto label_96;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
-label_96:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
-goto label_97;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
-label_97:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
-goto label_98;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
-label_98:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]);
-goto label_101;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
-label_101:
-$data$3$2989.22$KeyboardClassUnload$4 := 0 ;
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3072)
-label_102:
-call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(RegistryPath__GLOBALS(Globals))], 0);
-goto label_105;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3073)
-label_105:
-goto label_105_true , label_105_false ;
-
-
-label_105_true :
-assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] != 0);
-goto label_106;
-
-
-label_105_false :
-assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] == 0);
-goto label_134;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3075)
-label_106:
-goto label_107;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3077)
-label_107:
-$i$8$3075.14$KeyboardClassUnload$4 := 0 ;
-goto label_108;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3077)
-label_108:
-// loop entry initialization...
-LOOP_108_alloc := alloc;
-LOOP_108_Mem := Mem;
-LOOP_108_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_108_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_108_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_108_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_108_head;
-
-
-label_108_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires __preserves_resource("DEV_OBJ_INIT")
-assert(Res_DEV_OBJ_INIT == LOOP_108_Res_DEV_OBJ_INIT);
-//TAG: requires __preserves_resource("DEV_EXTN")
-assert(Res_DEV_EXTN == LOOP_108_Res_DEV_EXTN);
-//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-assert(Mem[T.Flink__LIST_ENTRY] == LOOP_108_Mem[T.Flink__LIST_ENTRY]);
-assume(forall f:int :: {alloc[Base(f)]} LOOP_108_alloc[Base(f)] == UNALLOCATED || LOOP_108_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_108_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_108_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_108_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_108_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_108_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_108_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_108_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_108_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_108_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-goto label_108_true , label_108_false ;
-
-
-label_108_true :
-assume ($i$8$3075.14$KeyboardClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
-goto label_109;
-
-
-label_108_false :
-assume !($i$8$3075.14$KeyboardClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
-goto label_128;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
-label_109:
-goto label_109_true , label_109_false ;
-
-
-label_109_true :
-assume (Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 1);
-goto label_115;
-
-
-label_109_false :
-assume !(Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 1);
-goto label_113;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
-label_110:
-// skip RtlAssert
-goto label_115;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
-label_113:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$13$ := havoc_stringTemp ;
-goto label_114;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
-label_114:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$14$ := havoc_stringTemp ;
-goto label_110;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
-label_115:
-goto label_115_true , label_115_false ;
-
-
-label_115_true :
-assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] != 0);
-goto label_119;
-
-
-label_115_false :
-assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 0);
-goto label_121;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
-label_116:
-// skip RtlAssert
-goto label_121;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
-label_119:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$15$ := havoc_stringTemp ;
-goto label_120;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
-label_120:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$16$ := havoc_stringTemp ;
-goto label_116;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
-label_121:
-goto label_121_true , label_121_false ;
-
-
-label_121_true :
-assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] != 0);
-goto label_125;
-
-
-label_121_false :
-assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 0);
-goto label_127;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
-label_122:
-// skip RtlAssert
-goto label_127;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
-label_125:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$17$ := havoc_stringTemp ;
-goto label_126;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
-label_126:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$18$ := havoc_stringTemp ;
-goto label_122;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3077)
-label_127:
-$i$8$3075.14$KeyboardClassUnload$4 := PLUS($i$8$3075.14$KeyboardClassUnload$4, 1, 1) ;
-goto label_108_head;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3084)
-label_128:
-call ExFreePoolWithTag (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 0);
-goto label_134;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3087)
-label_131:
-// skip KbdDebugPrint
-goto label_1;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3087)
-label_134:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$KbdDebugPrint.arg.2$19$ := havoc_stringTemp ;
-goto label_131;
-
-}
-
+// RUN: %boogie -monomorphize "%s" > "%t"
+// RUN: %diff success.expect "%t"
+type byte, name;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function SetTrue() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+/*
+function AtLeast(int, int) returns ([int]bool);
+function ModEqual(int, int, int) returns (bool);
+axiom(forall n:int, x:int :: ModEqual(n,x,x));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
+axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
+axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
+axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+*/
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int :: SetTrue()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name, m:[name][int]int) returns (bool);
+function Values(t:name, m:[name][int]int) returns ([int]bool);
+function T.Ptr(t:name) returns (name);
+
+axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
+
+axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
+
+axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
+ (HasType(v, t, m1) <==> HasType(v, t, m2)));
+
+// Field declarations
+
+const unique T.Guid_WMIGUIDREGINFO:name;
+const unique T.InstanceCount_WMIGUIDREGINFO:name;
+const unique T.Flags_WMIGUIDREGINFO:name;
+const unique T.OperationID__ACCESS_STATE:name;
+const unique T.SecurityEvaluated__ACCESS_STATE:name;
+const unique T.GenerateAudit__ACCESS_STATE:name;
+const unique T.GenerateOnClose__ACCESS_STATE:name;
+const unique T.PrivilegesAllocated__ACCESS_STATE:name;
+const unique T.Flags__ACCESS_STATE:name;
+const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
+const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
+const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
+const unique T.SubjectSecurityContext__ACCESS_STATE:name;
+const unique T.SecurityDescriptor__ACCESS_STATE:name;
+const unique T.AuxData__ACCESS_STATE:name;
+const unique T.Privileges__ACCESS_STATE:name;
+const unique T.AuditPrivileges__ACCESS_STATE:name;
+const unique T.ObjectName__ACCESS_STATE:name;
+const unique T.ObjectTypeName__ACCESS_STATE:name;
+const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_RESOURCE_LIST:name;
+const unique T.List__CM_RESOURCE_LIST:name;
+const unique T.Size__DEVICE_CAPABILITIES:name;
+const unique T.Version__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
+const unique T.LockSupported__DEVICE_CAPABILITIES:name;
+const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.Removable__DEVICE_CAPABILITIES:name;
+const unique T.DockDevice__DEVICE_CAPABILITIES:name;
+const unique T.UniqueID__DEVICE_CAPABILITIES:name;
+const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
+const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
+const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
+const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
+const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
+const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
+const unique T.Reserved__DEVICE_CAPABILITIES:name;
+const unique T.Address__DEVICE_CAPABILITIES:name;
+const unique T.UINumber__DEVICE_CAPABILITIES:name;
+const unique T.DeviceState__DEVICE_CAPABILITIES:name;
+const unique T.SystemWake__DEVICE_CAPABILITIES:name;
+const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
+const unique T.D1Latency__DEVICE_CAPABILITIES:name;
+const unique T.D2Latency__DEVICE_CAPABILITIES:name;
+const unique T.D3Latency__DEVICE_CAPABILITIES:name;
+const unique T.Self__DEVICE_EXTENSION:name;
+const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
+const unique T.TopPort__DEVICE_EXTENSION:name;
+const unique T.PDO__DEVICE_EXTENSION:name;
+const unique T.RemoveLock__DEVICE_EXTENSION:name;
+const unique T.PnP__DEVICE_EXTENSION:name;
+const unique T.Started__DEVICE_EXTENSION:name;
+const unique T.AllowDisable__DEVICE_EXTENSION:name;
+const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
+const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
+const unique T.InputCount__DEVICE_EXTENSION:name;
+const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
+const unique T.InputData__DEVICE_EXTENSION:name;
+const unique T.DataIn__DEVICE_EXTENSION:name;
+const unique T.DataOut__DEVICE_EXTENSION:name;
+const unique T.KeyboardAttributes__DEVICE_EXTENSION:name;
+const unique T.IndicatorParameters__DEVICE_EXTENSION:name;
+const unique T.SpinLock__DEVICE_EXTENSION:name;
+const unique T.ReadQueue__DEVICE_EXTENSION:name;
+const unique T.SequenceNumber__DEVICE_EXTENSION:name;
+const unique T.DeviceState__DEVICE_EXTENSION:name;
+const unique T.SystemState__DEVICE_EXTENSION:name;
+const unique T.UnitId__DEVICE_EXTENSION:name;
+const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
+const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
+const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
+const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
+const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
+const unique T.Link__DEVICE_EXTENSION:name;
+const unique T.File__DEVICE_EXTENSION:name;
+const unique T.Enabled__DEVICE_EXTENSION:name;
+const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
+const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
+const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
+const unique T.Type__DEVICE_OBJECT:name;
+const unique T.Size__DEVICE_OBJECT:name;
+const unique T.ReferenceCount__DEVICE_OBJECT:name;
+const unique T.DriverObject__DEVICE_OBJECT:name;
+const unique T.NextDevice__DEVICE_OBJECT:name;
+const unique T.AttachedDevice__DEVICE_OBJECT:name;
+const unique T.CurrentIrp__DEVICE_OBJECT:name;
+const unique T.Timer__DEVICE_OBJECT:name;
+const unique T.Flags__DEVICE_OBJECT:name;
+const unique T.Characteristics__DEVICE_OBJECT:name;
+const unique T.Vpb__DEVICE_OBJECT:name;
+const unique T.DeviceExtension__DEVICE_OBJECT:name;
+const unique T.DeviceType__DEVICE_OBJECT:name;
+const unique T.StackSize__DEVICE_OBJECT:name;
+const unique T.Queue__DEVICE_OBJECT:name;
+const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
+const unique T.DeviceQueue__DEVICE_OBJECT:name;
+const unique T.Dpc__DEVICE_OBJECT:name;
+const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
+const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
+const unique T.DeviceLock__DEVICE_OBJECT:name;
+const unique T.SectorSize__DEVICE_OBJECT:name;
+const unique T.Spare1__DEVICE_OBJECT:name;
+const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
+const unique T.Reserved__DEVICE_OBJECT:name;
+const unique T.Type__DEVOBJ_EXTENSION:name;
+const unique T.Size__DEVOBJ_EXTENSION:name;
+const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
+const unique T.__unnamed_4_a97c65a1__DISPATCHER_HEADER:name;
+const unique T.SignalState__DISPATCHER_HEADER:name;
+const unique T.WaitListHead__DISPATCHER_HEADER:name;
+const unique T.DriverObject__DRIVER_EXTENSION:name;
+const unique T.AddDevice__DRIVER_EXTENSION:name;
+const unique T.Count__DRIVER_EXTENSION:name;
+const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
+const unique T.Type__DRIVER_OBJECT:name;
+const unique T.Size__DRIVER_OBJECT:name;
+const unique T.DeviceObject__DRIVER_OBJECT:name;
+const unique T.Flags__DRIVER_OBJECT:name;
+const unique T.DriverStart__DRIVER_OBJECT:name;
+const unique T.DriverSize__DRIVER_OBJECT:name;
+const unique T.DriverSection__DRIVER_OBJECT:name;
+const unique T.DriverExtension__DRIVER_OBJECT:name;
+const unique T.DriverName__DRIVER_OBJECT:name;
+const unique T.HardwareDatabase__DRIVER_OBJECT:name;
+const unique T.FastIoDispatch__DRIVER_OBJECT:name;
+const unique T.DriverInit__DRIVER_OBJECT:name;
+const unique T.DriverStartIo__DRIVER_OBJECT:name;
+const unique T.DriverUnload__DRIVER_OBJECT:name;
+const unique T.MajorFunction__DRIVER_OBJECT:name;
+const unique T.SystemResourcesList__ERESOURCE:name;
+const unique T.OwnerTable__ERESOURCE:name;
+const unique T.ActiveCount__ERESOURCE:name;
+const unique T.Flag__ERESOURCE:name;
+const unique T.SharedWaiters__ERESOURCE:name;
+const unique T.ExclusiveWaiters__ERESOURCE:name;
+const unique T.OwnerEntry__ERESOURCE:name;
+const unique T.ActiveEntries__ERESOURCE:name;
+const unique T.ContentionCount__ERESOURCE:name;
+const unique T.NumberOfSharedWaiters__ERESOURCE:name;
+const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
+const unique T.__unnamed_4_52c594f7__ERESOURCE:name;
+const unique T.SpinLock__ERESOURCE:name;
+const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
+const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
+const unique T.FastIoRead__FAST_IO_DISPATCH:name;
+const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoLock__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
+const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
+const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
+const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlRead__FAST_IO_DISPATCH:name;
+const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
+const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
+const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
+const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.Count__FAST_MUTEX:name;
+const unique T.Owner__FAST_MUTEX:name;
+const unique T.Contention__FAST_MUTEX:name;
+const unique T.Gate__FAST_MUTEX:name;
+const unique T.OldIrql__FAST_MUTEX:name;
+const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
+const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
+const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
+const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.Type__FILE_OBJECT:name;
+const unique T.Size__FILE_OBJECT:name;
+const unique T.DeviceObject__FILE_OBJECT:name;
+const unique T.Vpb__FILE_OBJECT:name;
+const unique T.FsContext__FILE_OBJECT:name;
+const unique T.FsContext2__FILE_OBJECT:name;
+const unique T.SectionObjectPointer__FILE_OBJECT:name;
+const unique T.PrivateCacheMap__FILE_OBJECT:name;
+const unique T.FinalStatus__FILE_OBJECT:name;
+const unique T.RelatedFileObject__FILE_OBJECT:name;
+const unique T.LockOperation__FILE_OBJECT:name;
+const unique T.DeletePending__FILE_OBJECT:name;
+const unique T.ReadAccess__FILE_OBJECT:name;
+const unique T.WriteAccess__FILE_OBJECT:name;
+const unique T.DeleteAccess__FILE_OBJECT:name;
+const unique T.SharedRead__FILE_OBJECT:name;
+const unique T.SharedWrite__FILE_OBJECT:name;
+const unique T.SharedDelete__FILE_OBJECT:name;
+const unique T.Flags__FILE_OBJECT:name;
+const unique T.FileName__FILE_OBJECT:name;
+const unique T.CurrentByteOffset__FILE_OBJECT:name;
+const unique T.Waiters__FILE_OBJECT:name;
+const unique T.Busy__FILE_OBJECT:name;
+const unique T.LastLock__FILE_OBJECT:name;
+const unique T.Lock__FILE_OBJECT:name;
+const unique T.Event__FILE_OBJECT:name;
+const unique T.CompletionContext__FILE_OBJECT:name;
+const unique T.IrpListLock__FILE_OBJECT:name;
+const unique T.IrpList__FILE_OBJECT:name;
+const unique T.FileObjectExtension__FILE_OBJECT:name;
+const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
+const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
+const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
+const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
+const unique T.Directory__FILE_STANDARD_INFORMATION:name;
+const unique T.Debug__GLOBALS:name;
+const unique T.GrandMaster__GLOBALS:name;
+const unique T.AssocClassList__GLOBALS:name;
+const unique T.NumAssocClass__GLOBALS:name;
+const unique T.Opens__GLOBALS:name;
+const unique T.NumberLegacyPorts__GLOBALS:name;
+const unique T.Mutex__GLOBALS:name;
+const unique T.ConnectOneClassToOnePort__GLOBALS:name;
+const unique T.SendOutputToAllPorts__GLOBALS:name;
+const unique T.PortsServiced__GLOBALS:name;
+const unique T.InitExtension__GLOBALS:name;
+const unique T.RegistryPath__GLOBALS:name;
+const unique T.BaseClassName__GLOBALS:name;
+const unique T.BaseClassBuffer__GLOBALS:name;
+const unique T.LegacyDeviceList__GLOBALS:name;
+const unique T.Data1__GUID:name;
+const unique T.Data2__GUID:name;
+const unique T.Data3__GUID:name;
+const unique T.Data4__GUID:name;
+const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
+const unique T.Control__INITIAL_PRIVILEGE_SET:name;
+const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
+const unique T.Size__INTERFACE:name;
+const unique T.Version__INTERFACE:name;
+const unique T.Context__INTERFACE:name;
+const unique T.InterfaceReference__INTERFACE:name;
+const unique T.InterfaceDereference__INTERFACE:name;
+const unique T.Port__IO_COMPLETION_CONTEXT:name;
+const unique T.Key__IO_COMPLETION_CONTEXT:name;
+const unique T.Common__IO_REMOVE_LOCK:name;
+const unique T.Dbg__IO_REMOVE_LOCK:name;
+const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__IO_RESOURCE_LIST:name;
+const unique T.Revision__IO_RESOURCE_LIST:name;
+const unique T.Count__IO_RESOURCE_LIST:name;
+const unique T.Descriptors__IO_RESOURCE_LIST:name;
+const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
+const unique T.AccessState__IO_SECURITY_CONTEXT:name;
+const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
+const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
+const unique T.MajorFunction__IO_STACK_LOCATION:name;
+const unique T.MinorFunction__IO_STACK_LOCATION:name;
+const unique T.Flags__IO_STACK_LOCATION:name;
+const unique T.Control__IO_STACK_LOCATION:name;
+const unique T.Parameters__IO_STACK_LOCATION:name;
+const unique T.DeviceObject__IO_STACK_LOCATION:name;
+const unique T.FileObject__IO_STACK_LOCATION:name;
+const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
+const unique T.Context__IO_STACK_LOCATION:name;
+const unique T.__unnamed_4_d99b6e2b__IO_STATUS_BLOCK:name;
+const unique T.Information__IO_STATUS_BLOCK:name;
+const unique T.Type__IRP:name;
+const unique T.Size__IRP:name;
+const unique T.MdlAddress__IRP:name;
+const unique T.Flags__IRP:name;
+const unique T.AssociatedIrp__IRP:name;
+const unique T.ThreadListEntry__IRP:name;
+const unique T.IoStatus__IRP:name;
+const unique T.RequestorMode__IRP:name;
+const unique T.PendingReturned__IRP:name;
+const unique T.StackCount__IRP:name;
+const unique T.CurrentLocation__IRP:name;
+const unique T.Cancel__IRP:name;
+const unique T.CancelIrql__IRP:name;
+const unique T.ApcEnvironment__IRP:name;
+const unique T.AllocationFlags__IRP:name;
+const unique T.UserIosb__IRP:name;
+const unique T.UserEvent__IRP:name;
+const unique T.Overlay__IRP:name;
+const unique T.CancelRoutine__IRP:name;
+const unique T.UserBuffer__IRP:name;
+const unique T.Tail__IRP:name;
+const unique T.Type__KAPC:name;
+const unique T.SpareByte0__KAPC:name;
+const unique T.Size__KAPC:name;
+const unique T.SpareByte1__KAPC:name;
+const unique T.SpareLong0__KAPC:name;
+const unique T.Thread__KAPC:name;
+const unique T.ApcListEntry__KAPC:name;
+const unique T.KernelRoutine__KAPC:name;
+const unique T.RundownRoutine__KAPC:name;
+const unique T.NormalRoutine__KAPC:name;
+const unique T.NormalContext__KAPC:name;
+const unique T.SystemArgument1__KAPC:name;
+const unique T.SystemArgument2__KAPC:name;
+const unique T.ApcStateIndex__KAPC:name;
+const unique T.ApcMode__KAPC:name;
+const unique T.Inserted__KAPC:name;
+const unique T.Type__KDEVICE_QUEUE:name;
+const unique T.Size__KDEVICE_QUEUE:name;
+const unique T.DeviceListHead__KDEVICE_QUEUE:name;
+const unique T.Lock__KDEVICE_QUEUE:name;
+const unique T.Busy__KDEVICE_QUEUE:name;
+const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
+const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Type__KDPC:name;
+const unique T.Importance__KDPC:name;
+const unique T.Number__KDPC:name;
+const unique T.DpcListEntry__KDPC:name;
+const unique T.DeferredRoutine__KDPC:name;
+const unique T.DeferredContext__KDPC:name;
+const unique T.SystemArgument1__KDPC:name;
+const unique T.SystemArgument2__KDPC:name;
+const unique T.DpcData__KDPC:name;
+const unique T.Header__KEVENT:name;
+const unique T.KeyboardIdentifier__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyboardMode__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfFunctionKeys__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfIndicators__KEYBOARD_ATTRIBUTES:name;
+const unique T.NumberOfKeysTotal__KEYBOARD_ATTRIBUTES:name;
+const unique T.InputDataQueueLength__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyRepeatMinimum__KEYBOARD_ATTRIBUTES:name;
+const unique T.KeyRepeatMaximum__KEYBOARD_ATTRIBUTES:name;
+const unique T.Type__KEYBOARD_ID:name;
+const unique T.Subtype__KEYBOARD_ID:name;
+const unique T.UnitId__KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T.LedFlags__KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T.UnitId__KEYBOARD_INPUT_DATA:name;
+const unique T.MakeCode__KEYBOARD_INPUT_DATA:name;
+const unique T.Flags__KEYBOARD_INPUT_DATA:name;
+const unique T.Reserved__KEYBOARD_INPUT_DATA:name;
+const unique T.ExtraInformation__KEYBOARD_INPUT_DATA:name;
+const unique T.UnitId__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Rate__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Delay__KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T.Header__KSEMAPHORE:name;
+const unique T.Limit__KSEMAPHORE:name;
+const unique T.__unnamed_8_58ee4a31__LARGE_INTEGER:name;
+const unique T.u__LARGE_INTEGER:name;
+const unique T.QuadPart__LARGE_INTEGER:name;
+const unique T.Flink__LIST_ENTRY:name;
+const unique T.Blink__LIST_ENTRY:name;
+const unique T.LowPart__LUID:name;
+const unique T.HighPart__LUID:name;
+const unique T.Luid__LUID_AND_ATTRIBUTES:name;
+const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
+const unique T.Next__MDL:name;
+const unique T.Size__MDL:name;
+const unique T.MdlFlags__MDL:name;
+const unique T.Process__MDL:name;
+const unique T.MappedSystemVa__MDL:name;
+const unique T.StartVa__MDL:name;
+const unique T.ByteCount__MDL:name;
+const unique T.ByteOffset__MDL:name;
+const unique T.OwnerThread__OWNER_ENTRY:name;
+const unique T.__unnamed_4_6f9ac8e1__OWNER_ENTRY:name;
+const unique T.File__PORT:name;
+const unique T.Port__PORT:name;
+const unique T.Enabled__PORT:name;
+const unique T.Reserved__PORT:name;
+const unique T.Free__PORT:name;
+const unique T.SequenceD1__POWER_SEQUENCE:name;
+const unique T.SequenceD2__POWER_SEQUENCE:name;
+const unique T.SequenceD3__POWER_SEQUENCE:name;
+const unique T.SystemState__POWER_STATE:name;
+const unique T.DeviceState__POWER_STATE:name;
+const unique T.PrivilegeCount__PRIVILEGE_SET:name;
+const unique T.Control__PRIVILEGE_SET:name;
+const unique T.Privilege__PRIVILEGE_SET:name;
+const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
+const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.__unnamed_4_3a2fdc5e__SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T.Length__UNICODE_STRING:name;
+const unique T.MaximumLength__UNICODE_STRING:name;
+const unique T.Buffer__UNICODE_STRING:name;
+const unique T.Type__VPB:name;
+const unique T.Size__VPB:name;
+const unique T.Flags__VPB:name;
+const unique T.VolumeLabelLength__VPB:name;
+const unique T.DeviceObject__VPB:name;
+const unique T.RealDevice__VPB:name;
+const unique T.SerialNumber__VPB:name;
+const unique T.ReferenceCount__VPB:name;
+const unique T.VolumeLabel__VPB:name;
+const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
+const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
+const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
+const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
+const unique T.GuidCount__WMILIB_CONTEXT:name;
+const unique T.GuidList__WMILIB_CONTEXT:name;
+const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
+const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
+const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
+const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
+const unique T.Reserved___unnamed_12_0d6a30de:name;
+const unique T.MessageCount___unnamed_12_0d6a30de:name;
+const unique T.Vector___unnamed_12_0d6a30de:name;
+const unique T.Affinity___unnamed_12_0d6a30de:name;
+const unique T.Start___unnamed_12_17f5c211:name;
+const unique T.Length48___unnamed_12_17f5c211:name;
+const unique T.Start___unnamed_12_1fb42e39:name;
+const unique T.Length___unnamed_12_1fb42e39:name;
+const unique T.Reserved___unnamed_12_1fb42e39:name;
+const unique T.Start___unnamed_12_2a1563c6:name;
+const unique T.Length___unnamed_12_2a1563c6:name;
+const unique T.DataSize___unnamed_12_31347272:name;
+const unique T.Reserved1___unnamed_12_31347272:name;
+const unique T.Reserved2___unnamed_12_31347272:name;
+const unique T.Raw___unnamed_12_429aadc0:name;
+const unique T.Translated___unnamed_12_429aadc0:name;
+const unique T.Start___unnamed_12_4719de1a:name;
+const unique T.Length___unnamed_12_4719de1a:name;
+const unique T.Data___unnamed_12_4be56faa:name;
+const unique T.Data___unnamed_12_5ce25b92:name;
+const unique T.Generic___unnamed_12_7a698b72:name;
+const unique T.Port___unnamed_12_7a698b72:name;
+const unique T.Interrupt___unnamed_12_7a698b72:name;
+const unique T.MessageInterrupt___unnamed_12_7a698b72:name;
+const unique T.Memory___unnamed_12_7a698b72:name;
+const unique T.Dma___unnamed_12_7a698b72:name;
+const unique T.DevicePrivate___unnamed_12_7a698b72:name;
+const unique T.BusNumber___unnamed_12_7a698b72:name;
+const unique T.DeviceSpecificData___unnamed_12_7a698b72:name;
+const unique T.Memory40___unnamed_12_7a698b72:name;
+const unique T.Memory48___unnamed_12_7a698b72:name;
+const unique T.Memory64___unnamed_12_7a698b72:name;
+const unique T.Start___unnamed_12_87c0de8d:name;
+const unique T.Length64___unnamed_12_87c0de8d:name;
+const unique T.Start___unnamed_12_98bfc55a:name;
+const unique T.Length40___unnamed_12_98bfc55a:name;
+const unique T.Priority___unnamed_12_ab1bd9d7:name;
+const unique T.Reserved1___unnamed_12_ab1bd9d7:name;
+const unique T.Reserved2___unnamed_12_ab1bd9d7:name;
+const unique T.Level___unnamed_12_b0429be9:name;
+const unique T.Vector___unnamed_12_b0429be9:name;
+const unique T.Affinity___unnamed_12_b0429be9:name;
+const unique T.ListEntry___unnamed_12_b43e8de8:name;
+const unique T.__unnamed_4_f19b65c1___unnamed_12_b43e8de8:name;
+const unique T.Level___unnamed_12_bfdb39ee:name;
+const unique T.Vector___unnamed_12_bfdb39ee:name;
+const unique T.Affinity___unnamed_12_bfdb39ee:name;
+const unique T.Start___unnamed_12_cd42b3c3:name;
+const unique T.Length___unnamed_12_cd42b3c3:name;
+const unique T.__unnamed_12_429aadc0___unnamed_12_e668effc:name;
+const unique T.Channel___unnamed_12_e80d029e:name;
+const unique T.Port___unnamed_12_e80d029e:name;
+const unique T.Reserved1___unnamed_12_e80d029e:name;
+const unique T.Length___unnamed_16_07c0bcc5:name;
+const unique T.MinBusNumber___unnamed_16_07c0bcc5:name;
+const unique T.MaxBusNumber___unnamed_16_07c0bcc5:name;
+const unique T.Reserved___unnamed_16_07c0bcc5:name;
+const unique T.InterfaceType___unnamed_16_29cb9f2f:name;
+const unique T.Size___unnamed_16_29cb9f2f:name;
+const unique T.Version___unnamed_16_29cb9f2f:name;
+const unique T.Interface___unnamed_16_29cb9f2f:name;
+const unique T.InterfaceSpecificData___unnamed_16_29cb9f2f:name;
+const unique T.SecurityContext___unnamed_16_30f11dbf:name;
+const unique T.Options___unnamed_16_30f11dbf:name;
+const unique T.FileAttributes___unnamed_16_30f11dbf:name;
+const unique T.ShareAccess___unnamed_16_30f11dbf:name;
+const unique T.EaLength___unnamed_16_30f11dbf:name;
+const unique T.DriverContext___unnamed_16_35034f68:name;
+const unique T.Length___unnamed_16_487a9498:name;
+const unique T.FileName___unnamed_16_487a9498:name;
+const unique T.FileInformationClass___unnamed_16_487a9498:name;
+const unique T.FileIndex___unnamed_16_487a9498:name;
+const unique T.OutputBufferLength___unnamed_16_5f6a8844:name;
+const unique T.InputBufferLength___unnamed_16_5f6a8844:name;
+const unique T.FsControlCode___unnamed_16_5f6a8844:name;
+const unique T.Type3InputBuffer___unnamed_16_5f6a8844:name;
+const unique T.Length___unnamed_16_7177b9f3:name;
+const unique T.FileInformationClass___unnamed_16_7177b9f3:name;
+const unique T.FileObject___unnamed_16_7177b9f3:name;
+const unique T.__unnamed_4_43913aa5___unnamed_16_7177b9f3:name;
+const unique T.Length___unnamed_16_88e91ef6:name;
+const unique T.Key___unnamed_16_88e91ef6:name;
+const unique T.ByteOffset___unnamed_16_88e91ef6:name;
+const unique T.Length___unnamed_16_8c506c98:name;
+const unique T.Key___unnamed_16_8c506c98:name;
+const unique T.ByteOffset___unnamed_16_8c506c98:name;
+const unique T.WhichSpace___unnamed_16_9ac2e5f8:name;
+const unique T.Buffer___unnamed_16_9ac2e5f8:name;
+const unique T.Offset___unnamed_16_9ac2e5f8:name;
+const unique T.Length___unnamed_16_9ac2e5f8:name;
+const unique T.Create___unnamed_16_b93842ad:name;
+const unique T.Read___unnamed_16_b93842ad:name;
+const unique T.Write___unnamed_16_b93842ad:name;
+const unique T.QueryDirectory___unnamed_16_b93842ad:name;
+const unique T.NotifyDirectory___unnamed_16_b93842ad:name;
+const unique T.QueryFile___unnamed_16_b93842ad:name;
+const unique T.SetFile___unnamed_16_b93842ad:name;
+const unique T.QueryEa___unnamed_16_b93842ad:name;
+const unique T.SetEa___unnamed_16_b93842ad:name;
+const unique T.QueryVolume___unnamed_16_b93842ad:name;
+const unique T.SetVolume___unnamed_16_b93842ad:name;
+const unique T.FileSystemControl___unnamed_16_b93842ad:name;
+const unique T.LockControl___unnamed_16_b93842ad:name;
+const unique T.DeviceIoControl___unnamed_16_b93842ad:name;
+const unique T.QuerySecurity___unnamed_16_b93842ad:name;
+const unique T.SetSecurity___unnamed_16_b93842ad:name;
+const unique T.MountVolume___unnamed_16_b93842ad:name;
+const unique T.VerifyVolume___unnamed_16_b93842ad:name;
+const unique T.Scsi___unnamed_16_b93842ad:name;
+const unique T.QueryQuota___unnamed_16_b93842ad:name;
+const unique T.SetQuota___unnamed_16_b93842ad:name;
+const unique T.QueryDeviceRelations___unnamed_16_b93842ad:name;
+const unique T.QueryInterface___unnamed_16_b93842ad:name;
+const unique T.DeviceCapabilities___unnamed_16_b93842ad:name;
+const unique T.FilterResourceRequirements___unnamed_16_b93842ad:name;
+const unique T.ReadWriteConfig___unnamed_16_b93842ad:name;
+const unique T.SetLock___unnamed_16_b93842ad:name;
+const unique T.QueryId___unnamed_16_b93842ad:name;
+const unique T.QueryDeviceText___unnamed_16_b93842ad:name;
+const unique T.UsageNotification___unnamed_16_b93842ad:name;
+const unique T.WaitWake___unnamed_16_b93842ad:name;
+const unique T.PowerSequence___unnamed_16_b93842ad:name;
+const unique T.Power___unnamed_16_b93842ad:name;
+const unique T.StartDevice___unnamed_16_b93842ad:name;
+const unique T.WMI___unnamed_16_b93842ad:name;
+const unique T.Others___unnamed_16_b93842ad:name;
+const unique T.Length___unnamed_16_b9c62eab:name;
+const unique T.Key___unnamed_16_b9c62eab:name;
+const unique T.ByteOffset___unnamed_16_b9c62eab:name;
+const unique T.__unnamed_4_7d9d0c7e___unnamed_16_bb584060:name;
+const unique T.Type___unnamed_16_bb584060:name;
+const unique T.State___unnamed_16_bb584060:name;
+const unique T.ShutdownType___unnamed_16_bb584060:name;
+const unique T.OutputBufferLength___unnamed_16_dba55c7c:name;
+const unique T.InputBufferLength___unnamed_16_dba55c7c:name;
+const unique T.IoControlCode___unnamed_16_dba55c7c:name;
+const unique T.Type3InputBuffer___unnamed_16_dba55c7c:name;
+const unique T.DeviceQueueEntry___unnamed_16_e70c268b:name;
+const unique T.__unnamed_16_35034f68___unnamed_16_e70c268b:name;
+const unique T.Argument1___unnamed_16_e734d694:name;
+const unique T.Argument2___unnamed_16_e734d694:name;
+const unique T.Argument3___unnamed_16_e734d694:name;
+const unique T.Argument4___unnamed_16_e734d694:name;
+const unique T.ProviderId___unnamed_16_eac6dbea:name;
+const unique T.DataPath___unnamed_16_eac6dbea:name;
+const unique T.BufferSize___unnamed_16_eac6dbea:name;
+const unique T.Buffer___unnamed_16_eac6dbea:name;
+const unique T.Length___unnamed_16_f6cae4c2:name;
+const unique T.EaList___unnamed_16_f6cae4c2:name;
+const unique T.EaListLength___unnamed_16_f6cae4c2:name;
+const unique T.EaIndex___unnamed_16_f6cae4c2:name;
+const unique T.Length___unnamed_16_fe36e4f4:name;
+const unique T.StartSid___unnamed_16_fe36e4f4:name;
+const unique T.SidList___unnamed_16_fe36e4f4:name;
+const unique T.SidListLength___unnamed_16_fe36e4f4:name;
+const unique T.Abandoned___unnamed_1_29794256:name;
+const unique T.Absolute___unnamed_1_29794256:name;
+const unique T.NpxIrql___unnamed_1_29794256:name;
+const unique T.Signalling___unnamed_1_29794256:name;
+const unique T.Inserted___unnamed_1_2dc63b48:name;
+const unique T.DebugActive___unnamed_1_2dc63b48:name;
+const unique T.DpcActive___unnamed_1_2dc63b48:name;
+const unique T.Size___unnamed_1_2ef8da39:name;
+const unique T.Hand___unnamed_1_2ef8da39:name;
+const unique T.Lock___unnamed_1_faa7dc71:name;
+const unique T.MinimumVector___unnamed_20_f4d2e6d8:name;
+const unique T.MaximumVector___unnamed_20_f4d2e6d8:name;
+const unique T.AffinityPolicy___unnamed_20_f4d2e6d8:name;
+const unique T.PriorityPolicy___unnamed_20_f4d2e6d8:name;
+const unique T.TargetedProcessors___unnamed_20_f4d2e6d8:name;
+const unique T.Length___unnamed_24_41cbc8c0:name;
+const unique T.Alignment___unnamed_24_41cbc8c0:name;
+const unique T.MinimumAddress___unnamed_24_41cbc8c0:name;
+const unique T.MaximumAddress___unnamed_24_41cbc8c0:name;
+const unique T.Length48___unnamed_24_5419c914:name;
+const unique T.Alignment48___unnamed_24_5419c914:name;
+const unique T.MinimumAddress___unnamed_24_5419c914:name;
+const unique T.MaximumAddress___unnamed_24_5419c914:name;
+const unique T.Length___unnamed_24_67a5ff10:name;
+const unique T.Alignment___unnamed_24_67a5ff10:name;
+const unique T.MinimumAddress___unnamed_24_67a5ff10:name;
+const unique T.MaximumAddress___unnamed_24_67a5ff10:name;
+const unique T.Port___unnamed_24_72c3976e:name;
+const unique T.Memory___unnamed_24_72c3976e:name;
+const unique T.Interrupt___unnamed_24_72c3976e:name;
+const unique T.Dma___unnamed_24_72c3976e:name;
+const unique T.Generic___unnamed_24_72c3976e:name;
+const unique T.DevicePrivate___unnamed_24_72c3976e:name;
+const unique T.BusNumber___unnamed_24_72c3976e:name;
+const unique T.ConfigData___unnamed_24_72c3976e:name;
+const unique T.Memory40___unnamed_24_72c3976e:name;
+const unique T.Memory48___unnamed_24_72c3976e:name;
+const unique T.Memory64___unnamed_24_72c3976e:name;
+const unique T.Length64___unnamed_24_a26050bb:name;
+const unique T.Alignment64___unnamed_24_a26050bb:name;
+const unique T.MinimumAddress___unnamed_24_a26050bb:name;
+const unique T.MaximumAddress___unnamed_24_a26050bb:name;
+const unique T.Length___unnamed_24_b8f476db:name;
+const unique T.Alignment___unnamed_24_b8f476db:name;
+const unique T.MinimumAddress___unnamed_24_b8f476db:name;
+const unique T.MaximumAddress___unnamed_24_b8f476db:name;
+const unique T.Length40___unnamed_24_d09044b4:name;
+const unique T.Alignment40___unnamed_24_d09044b4:name;
+const unique T.MinimumAddress___unnamed_24_d09044b4:name;
+const unique T.MaximumAddress___unnamed_24_d09044b4:name;
+const unique T.ReplaceIfExists___unnamed_2_46cc4597:name;
+const unique T.AdvanceOnly___unnamed_2_46cc4597:name;
+const unique T.__unnamed_16_e70c268b___unnamed_40_7218f704:name;
+const unique T.Thread___unnamed_40_7218f704:name;
+const unique T.AuxiliaryBuffer___unnamed_40_7218f704:name;
+const unique T.__unnamed_12_b43e8de8___unnamed_40_7218f704:name;
+const unique T.OriginalFileObject___unnamed_40_7218f704:name;
+const unique T.ListEntry___unnamed_40_c55c9377:name;
+const unique T.Wcb___unnamed_40_c55c9377:name;
+const unique T.InitialPrivilegeSet___unnamed_44_5584090d:name;
+const unique T.PrivilegeSet___unnamed_44_5584090d:name;
+const unique T.Overlay___unnamed_48_cf99b13f:name;
+const unique T.Apc___unnamed_48_cf99b13f:name;
+const unique T.CompletionKey___unnamed_48_cf99b13f:name;
+const unique T.PowerState___unnamed_4_069846fb:name;
+const unique T.IdType___unnamed_4_224c32f4:name;
+const unique T.Capabilities___unnamed_4_2de698da:name;
+const unique T.__unnamed_4_c3479730___unnamed_4_3a2fdc5e:name;
+const unique T.ContextAsUlong___unnamed_4_3a2fdc5e:name;
+const unique T.Length___unnamed_4_3a4c1a13:name;
+const unique T.__unnamed_2_46cc4597___unnamed_4_43913aa5:name;
+const unique T.ClusterCount___unnamed_4_43913aa5:name;
+const unique T.DeleteHandle___unnamed_4_43913aa5:name;
+const unique T.UserApcRoutine___unnamed_4_4e8dd2ba:name;
+const unique T.IssuingProcess___unnamed_4_4e8dd2ba:name;
+const unique T.Srb___unnamed_4_52603077:name;
+const unique T.Address___unnamed_4_52c594f7:name;
+const unique T.CreatorBackTraceIndex___unnamed_4_52c594f7:name;
+const unique T.Type___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_29794256___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_2ef8da39___unnamed_4_5ca00198:name;
+const unique T.__unnamed_1_2dc63b48___unnamed_4_5ca00198:name;
+const unique T.MasterIrp___unnamed_4_6ac6463c:name;
+const unique T.IrpCount___unnamed_4_6ac6463c:name;
+const unique T.SystemBuffer___unnamed_4_6ac6463c:name;
+const unique T.OwnerCount___unnamed_4_6f9ac8e1:name;
+const unique T.TableSize___unnamed_4_6f9ac8e1:name;
+const unique T.PowerSequence___unnamed_4_7a02167b:name;
+const unique T.SystemContext___unnamed_4_7d9d0c7e:name;
+const unique T.SystemPowerStateContext___unnamed_4_7d9d0c7e:name;
+const unique T.IoResourceRequirementList___unnamed_4_82f7a864:name;
+const unique T.Length___unnamed_4_9aec220b:name;
+const unique T.__unnamed_4_5ca00198___unnamed_4_a97c65a1:name;
+const unique T.Lock___unnamed_4_a97c65a1:name;
+const unique T.Reserved1___unnamed_4_c3479730:name;
+const unique T.TargetSystemState___unnamed_4_c3479730:name;
+const unique T.EffectiveSystemState___unnamed_4_c3479730:name;
+const unique T.CurrentSystemState___unnamed_4_c3479730:name;
+const unique T.IgnoreHibernationPath___unnamed_4_c3479730:name;
+const unique T.PseudoTransition___unnamed_4_c3479730:name;
+const unique T.Reserved2___unnamed_4_c3479730:name;
+const unique T.Status___unnamed_4_d99b6e2b:name;
+const unique T.Pointer___unnamed_4_d99b6e2b:name;
+const unique T.CurrentStackLocation___unnamed_4_f19b65c1:name;
+const unique T.PacketType___unnamed_4_f19b65c1:name;
+const unique T.Type___unnamed_4_fa10fc16:name;
+const unique T.SecurityInformation___unnamed_8_01efa60d:name;
+const unique T.Length___unnamed_8_01efa60d:name;
+const unique T.MinimumChannel___unnamed_8_08d4cef8:name;
+const unique T.MaximumChannel___unnamed_8_08d4cef8:name;
+const unique T.__unnamed_4_4e8dd2ba___unnamed_8_0a898c0c:name;
+const unique T.UserApcContext___unnamed_8_0a898c0c:name;
+const unique T.SecurityInformation___unnamed_8_1330f93a:name;
+const unique T.SecurityDescriptor___unnamed_8_1330f93a:name;
+const unique T.AsynchronousParameters___unnamed_8_181d0de9:name;
+const unique T.AllocationSize___unnamed_8_181d0de9:name;
+const unique T.Vpb___unnamed_8_4812764d:name;
+const unique T.DeviceObject___unnamed_8_4812764d:name;
+const unique T.Length___unnamed_8_559a91e6:name;
+const unique T.FsInformationClass___unnamed_8_559a91e6:name;
+const unique T.Length___unnamed_8_5845b309:name;
+const unique T.FileInformationClass___unnamed_8_5845b309:name;
+const unique T.LowPart___unnamed_8_58ee4a31:name;
+const unique T.HighPart___unnamed_8_58ee4a31:name;
+const unique T.AllocatedResources___unnamed_8_61acf4ce:name;
+const unique T.AllocatedResourcesTranslated___unnamed_8_61acf4ce:name;
+const unique T.DeviceTextType___unnamed_8_6acfee04:name;
+const unique T.LocaleId___unnamed_8_6acfee04:name;
+const unique T.Length___unnamed_8_7f26a9dd:name;
+const unique T.CompletionFilter___unnamed_8_7f26a9dd:name;
+const unique T.Vpb___unnamed_8_87add0bd:name;
+const unique T.DeviceObject___unnamed_8_87add0bd:name;
+const unique T.InPath___unnamed_8_b2773e4c:name;
+const unique T.Reserved___unnamed_8_b2773e4c:name;
+const unique T.Type___unnamed_8_b2773e4c:name;
+const unique T.Length___unnamed_8_de890d4e:name;
+const unique T.FsInformationClass___unnamed_8_de890d4e:name;
+const unique T.LowPart___unnamed_8_ef9ba0d3:name;
+const unique T.HighPart___unnamed_8_ef9ba0d3:name;
+
+// Type declarations
+
+const unique T.A11CHAR:name;
+const unique T.A19CHAR:name;
+const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_LIST:name;
+const unique T.A1_LUID_AND_ATTRIBUTES:name;
+const unique T.A256UINT2:name;
+const unique T.A28PFDRIVER_DISPATCH:name;
+const unique T.A2UCHAR:name;
+const unique T.A32UINT2:name;
+const unique T.A36CHAR:name;
+const unique T.A37CHAR:name;
+const unique T.A39CHAR:name;
+const unique T.A3UCHAR:name;
+const unique T.A3UINT4:name;
+const unique T.A3_LUID_AND_ATTRIBUTES:name;
+const unique T.A43CHAR:name;
+const unique T.A4PVOID:name;
+const unique T.A4UINT4:name;
+const unique T.A5_DEVICE_POWER_STATE:name;
+const unique T.A74CHAR:name;
+const unique T.A7_DEVICE_POWER_STATE:name;
+const unique T.A8UCHAR:name;
+const unique T.BUS_QUERY_ID_TYPE:name;
+const unique T.CHAR:name;
+const unique T.DEVICE_TEXT_TYPE:name;
+const unique T.F0:name;
+const unique T.F1:name;
+const unique T.F10:name;
+const unique T.F11:name;
+const unique T.F12:name;
+const unique T.F13:name;
+const unique T.F14:name;
+const unique T.F15:name;
+const unique T.F16:name;
+const unique T.F17:name;
+const unique T.F18:name;
+const unique T.F19:name;
+const unique T.F2:name;
+const unique T.F20:name;
+const unique T.F21:name;
+const unique T.F22:name;
+const unique T.F23:name;
+const unique T.F24:name;
+const unique T.F25:name;
+const unique T.F26:name;
+const unique T.F27:name;
+const unique T.F28:name;
+const unique T.F29:name;
+const unique T.F3:name;
+const unique T.F30:name;
+const unique T.F31:name;
+const unique T.F32:name;
+const unique T.F33:name;
+const unique T.F34:name;
+const unique T.F35:name;
+const unique T.F36:name;
+const unique T.F37:name;
+const unique T.F38:name;
+const unique T.F4:name;
+const unique T.F5:name;
+const unique T.F6:name;
+const unique T.F7:name;
+const unique T.F8:name;
+const unique T.F9:name;
+const unique T.FDRIVER_ADD_DEVICE:name;
+const unique T.FDRIVER_CANCEL:name;
+const unique T.FDRIVER_CONTROL:name;
+const unique T.FDRIVER_DISPATCH:name;
+const unique T.FDRIVER_INITIALIZE:name;
+const unique T.FDRIVER_STARTIO:name;
+const unique T.FDRIVER_UNLOAD:name;
+const unique T.FFAST_IO_ACQUIRE_FILE:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.FFAST_IO_DETACH_DEVICE:name;
+const unique T.FFAST_IO_DEVICE_CONTROL:name;
+const unique T.FFAST_IO_LOCK:name;
+const unique T.FFAST_IO_MDL_READ:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.FFAST_IO_QUERY_OPEN:name;
+const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.FFAST_IO_READ:name;
+const unique T.FFAST_IO_READ_COMPRESSED:name;
+const unique T.FFAST_IO_RELEASE_FILE:name;
+const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_UNLOCK_ALL:name;
+const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.FFAST_IO_UNLOCK_SINGLE:name;
+const unique T.FFAST_IO_WRITE:name;
+const unique T.FFAST_IO_WRITE_COMPRESSED:name;
+const unique T.FIO_COMPLETION_ROUTINE:name;
+const unique T.FKDEFERRED_ROUTINE:name;
+const unique T.INT2:name;
+const unique T.INT4:name;
+const unique T.INT8:name;
+const unique T.PA11CHAR:name;
+const unique T.PA19CHAR:name;
+const unique T.PA36CHAR:name;
+const unique T.PA37CHAR:name;
+const unique T.PA39CHAR:name;
+const unique T.PA43CHAR:name;
+const unique T.PA74CHAR:name;
+const unique T.PCHAR:name;
+const unique T.PF19:name;
+const unique T.PF21:name;
+const unique T.PF23:name;
+const unique T.PF24:name;
+const unique T.PF25:name;
+const unique T.PF33:name;
+const unique T.PF34:name;
+const unique T.PF35:name;
+const unique T.PF36:name;
+const unique T.PF37:name;
+const unique T.PF38:name;
+const unique T.PFDRIVER_ADD_DEVICE:name;
+const unique T.PFDRIVER_CANCEL:name;
+const unique T.PFDRIVER_CONTROL:name;
+const unique T.PFDRIVER_DISPATCH:name;
+const unique T.PFDRIVER_INITIALIZE:name;
+const unique T.PFDRIVER_STARTIO:name;
+const unique T.PFDRIVER_UNLOAD:name;
+const unique T.PFFAST_IO_ACQUIRE_FILE:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.PFFAST_IO_DETACH_DEVICE:name;
+const unique T.PFFAST_IO_DEVICE_CONTROL:name;
+const unique T.PFFAST_IO_LOCK:name;
+const unique T.PFFAST_IO_MDL_READ:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.PFFAST_IO_QUERY_OPEN:name;
+const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.PFFAST_IO_READ:name;
+const unique T.PFFAST_IO_READ_COMPRESSED:name;
+const unique T.PFFAST_IO_RELEASE_FILE:name;
+const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_UNLOCK_ALL:name;
+const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
+const unique T.PFFAST_IO_WRITE:name;
+const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
+const unique T.PFIO_COMPLETION_ROUTINE:name;
+const unique T.PFKDEFERRED_ROUTINE:name;
+const unique T.PINT4:name;
+const unique T.POWER_ACTION:name;
+const unique T.PPCHAR:name;
+const unique T.PPF24:name;
+const unique T.PPP_FILE_OBJECT:name;
+const unique T.PPVOID:name;
+const unique T.PP_DEVICE_EXTENSION:name;
+const unique T.PP_DEVICE_OBJECT:name;
+const unique T.PP_DRIVER_OBJECT:name;
+const unique T.PP_ERESOURCE:name;
+const unique T.PP_FILE_OBJECT:name;
+const unique T.PP_IRP:name;
+const unique T.PP_LIST_ENTRY:name;
+const unique T.PP_MDL:name;
+const unique T.PP_PORT:name;
+const unique T.PP_UNICODE_STRING:name;
+const unique T.PUCHAR:name;
+const unique T.PUINT2:name;
+const unique T.PUINT4:name;
+const unique T.PVOID:name;
+const unique T.PWMIGUIDREGINFO:name;
+const unique T.P_ACCESS_STATE:name;
+const unique T.P_CM_RESOURCE_LIST:name;
+const unique T.P_COMPRESSED_DATA_INFO:name;
+const unique T.P_DEVICE_CAPABILITIES:name;
+const unique T.P_DEVICE_EXTENSION:name;
+const unique T.P_DEVICE_OBJECT:name;
+const unique T.P_DEVOBJ_EXTENSION:name;
+const unique T.P_DRIVER_EXTENSION:name;
+const unique T.P_DRIVER_OBJECT:name;
+const unique T.P_EPROCESS:name;
+const unique T.P_ERESOURCE:name;
+const unique T.P_ETHREAD:name;
+const unique T.P_FAST_IO_DISPATCH:name;
+const unique T.P_FILE_BASIC_INFORMATION:name;
+const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
+const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.P_FILE_OBJECT:name;
+const unique T.P_FILE_STANDARD_INFORMATION:name;
+const unique T.P_GLOBALS:name;
+const unique T.P_GUID:name;
+const unique T.P_INTERFACE:name;
+const unique T.P_IO_COMPLETION_CONTEXT:name;
+const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.P_IO_SECURITY_CONTEXT:name;
+const unique T.P_IO_STACK_LOCATION:name;
+const unique T.P_IO_STATUS_BLOCK:name;
+const unique T.P_IO_TIMER:name;
+const unique T.P_IRP:name;
+const unique T.P_KAPC:name;
+const unique T.P_KDPC:name;
+const unique T.P_KEVENT:name;
+const unique T.P_KEYBOARD_INPUT_DATA:name;
+const unique T.P_KSEMAPHORE:name;
+const unique T.P_KTHREAD:name;
+const unique T.P_LARGE_INTEGER:name;
+const unique T.P_LIST_ENTRY:name;
+const unique T.P_MDL:name;
+const unique T.P_OWNER_ENTRY:name;
+const unique T.P_PORT:name;
+const unique T.P_POWER_SEQUENCE:name;
+const unique T.P_SCSI_REQUEST_BLOCK:name;
+const unique T.P_SECTION_OBJECT_POINTERS:name;
+const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.P_UNICODE_STRING:name;
+const unique T.P_VPB:name;
+const unique T.UCHAR:name;
+const unique T.UINT2:name;
+const unique T.UINT4:name;
+const unique T.VOID:name;
+const unique T.WMIENABLEDISABLECONTROL:name;
+const unique T.WMIGUIDREGINFO:name;
+const unique T._ACCESS_STATE:name;
+const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_LIST:name;
+const unique T._CM_RESOURCE_LIST:name;
+const unique T._COMPRESSED_DATA_INFO:name;
+const unique T._DEVICE_CAPABILITIES:name;
+const unique T._DEVICE_EXTENSION:name;
+const unique T._DEVICE_OBJECT:name;
+const unique T._DEVICE_POWER_STATE:name;
+const unique T._DEVICE_RELATION_TYPE:name;
+const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
+const unique T._DEVOBJ_EXTENSION:name;
+const unique T._DISPATCHER_HEADER:name;
+const unique T._DRIVER_EXTENSION:name;
+const unique T._DRIVER_OBJECT:name;
+const unique T._EPROCESS:name;
+const unique T._ERESOURCE:name;
+const unique T._ETHREAD:name;
+const unique T._FAST_IO_DISPATCH:name;
+const unique T._FAST_MUTEX:name;
+const unique T._FILE_BASIC_INFORMATION:name;
+const unique T._FILE_GET_QUOTA_INFORMATION:name;
+const unique T._FILE_INFORMATION_CLASS:name;
+const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T._FILE_OBJECT:name;
+const unique T._FILE_STANDARD_INFORMATION:name;
+const unique T._FSINFOCLASS:name;
+const unique T._GLOBALS:name;
+const unique T._GUID:name;
+const unique T._INITIAL_PRIVILEGE_SET:name;
+const unique T._INTERFACE:name;
+const unique T._INTERFACE_TYPE:name;
+const unique T._IO_ALLOCATION_ACTION:name;
+const unique T._IO_COMPLETION_CONTEXT:name;
+const unique T._IO_REMOVE_LOCK:name;
+const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T._IO_RESOURCE_DESCRIPTOR:name;
+const unique T._IO_RESOURCE_LIST:name;
+const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T._IO_SECURITY_CONTEXT:name;
+const unique T._IO_STACK_LOCATION:name;
+const unique T._IO_STATUS_BLOCK:name;
+const unique T._IO_TIMER:name;
+const unique T._IRP:name;
+const unique T._IRQ_DEVICE_POLICY:name;
+const unique T._IRQ_PRIORITY:name;
+const unique T._KAPC:name;
+const unique T._KDEVICE_QUEUE:name;
+const unique T._KDEVICE_QUEUE_ENTRY:name;
+const unique T._KDPC:name;
+const unique T._KEVENT:name;
+const unique T._KEYBOARD_ATTRIBUTES:name;
+const unique T._KEYBOARD_ID:name;
+const unique T._KEYBOARD_INDICATOR_PARAMETERS:name;
+const unique T._KEYBOARD_INPUT_DATA:name;
+const unique T._KEYBOARD_TYPEMATIC_PARAMETERS:name;
+const unique T._KSEMAPHORE:name;
+const unique T._KTHREAD:name;
+const unique T._LARGE_INTEGER:name;
+const unique T._LIST_ENTRY:name;
+const unique T._LUID:name;
+const unique T._LUID_AND_ATTRIBUTES:name;
+const unique T._MDL:name;
+const unique T._OWNER_ENTRY:name;
+const unique T._PORT:name;
+const unique T._POWER_SEQUENCE:name;
+const unique T._POWER_STATE:name;
+const unique T._POWER_STATE_TYPE:name;
+const unique T._PRIVILEGE_SET:name;
+const unique T._SCSI_REQUEST_BLOCK:name;
+const unique T._SECTION_OBJECT_POINTERS:name;
+const unique T._SECURITY_IMPERSONATION_LEVEL:name;
+const unique T._SECURITY_QUALITY_OF_SERVICE:name;
+const unique T._SECURITY_SUBJECT_CONTEXT:name;
+const unique T._SYSTEM_POWER_STATE:name;
+const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T._UNICODE_STRING:name;
+const unique T._VPB:name;
+const unique T._WAIT_CONTEXT_BLOCK:name;
+const unique T._WMILIB_CONTEXT:name;
+const unique T.__unnamed_12_0d6a30de:name;
+const unique T.__unnamed_12_17f5c211:name;
+const unique T.__unnamed_12_1fb42e39:name;
+const unique T.__unnamed_12_2a1563c6:name;
+const unique T.__unnamed_12_31347272:name;
+const unique T.__unnamed_12_429aadc0:name;
+const unique T.__unnamed_12_4719de1a:name;
+const unique T.__unnamed_12_4be56faa:name;
+const unique T.__unnamed_12_5ce25b92:name;
+const unique T.__unnamed_12_7a698b72:name;
+const unique T.__unnamed_12_87c0de8d:name;
+const unique T.__unnamed_12_98bfc55a:name;
+const unique T.__unnamed_12_ab1bd9d7:name;
+const unique T.__unnamed_12_b0429be9:name;
+const unique T.__unnamed_12_b43e8de8:name;
+const unique T.__unnamed_12_bfdb39ee:name;
+const unique T.__unnamed_12_cd42b3c3:name;
+const unique T.__unnamed_12_e668effc:name;
+const unique T.__unnamed_12_e80d029e:name;
+const unique T.__unnamed_16_07c0bcc5:name;
+const unique T.__unnamed_16_29cb9f2f:name;
+const unique T.__unnamed_16_30f11dbf:name;
+const unique T.__unnamed_16_35034f68:name;
+const unique T.__unnamed_16_487a9498:name;
+const unique T.__unnamed_16_5f6a8844:name;
+const unique T.__unnamed_16_7177b9f3:name;
+const unique T.__unnamed_16_88e91ef6:name;
+const unique T.__unnamed_16_8c506c98:name;
+const unique T.__unnamed_16_9ac2e5f8:name;
+const unique T.__unnamed_16_b93842ad:name;
+const unique T.__unnamed_16_b9c62eab:name;
+const unique T.__unnamed_16_bb584060:name;
+const unique T.__unnamed_16_dba55c7c:name;
+const unique T.__unnamed_16_e70c268b:name;
+const unique T.__unnamed_16_e734d694:name;
+const unique T.__unnamed_16_eac6dbea:name;
+const unique T.__unnamed_16_f6cae4c2:name;
+const unique T.__unnamed_16_fe36e4f4:name;
+const unique T.__unnamed_1_29794256:name;
+const unique T.__unnamed_1_2dc63b48:name;
+const unique T.__unnamed_1_2ef8da39:name;
+const unique T.__unnamed_1_faa7dc71:name;
+const unique T.__unnamed_20_f4d2e6d8:name;
+const unique T.__unnamed_24_41cbc8c0:name;
+const unique T.__unnamed_24_5419c914:name;
+const unique T.__unnamed_24_67a5ff10:name;
+const unique T.__unnamed_24_72c3976e:name;
+const unique T.__unnamed_24_a26050bb:name;
+const unique T.__unnamed_24_b8f476db:name;
+const unique T.__unnamed_24_d09044b4:name;
+const unique T.__unnamed_2_46cc4597:name;
+const unique T.__unnamed_40_7218f704:name;
+const unique T.__unnamed_40_c55c9377:name;
+const unique T.__unnamed_44_5584090d:name;
+const unique T.__unnamed_48_cf99b13f:name;
+const unique T.__unnamed_4_069846fb:name;
+const unique T.__unnamed_4_224c32f4:name;
+const unique T.__unnamed_4_2de698da:name;
+const unique T.__unnamed_4_3a2fdc5e:name;
+const unique T.__unnamed_4_3a4c1a13:name;
+const unique T.__unnamed_4_43913aa5:name;
+const unique T.__unnamed_4_4e8dd2ba:name;
+const unique T.__unnamed_4_52603077:name;
+const unique T.__unnamed_4_52c594f7:name;
+const unique T.__unnamed_4_5ca00198:name;
+const unique T.__unnamed_4_6ac6463c:name;
+const unique T.__unnamed_4_6f9ac8e1:name;
+const unique T.__unnamed_4_7a02167b:name;
+const unique T.__unnamed_4_7d9d0c7e:name;
+const unique T.__unnamed_4_82f7a864:name;
+const unique T.__unnamed_4_9aec220b:name;
+const unique T.__unnamed_4_a97c65a1:name;
+const unique T.__unnamed_4_c3479730:name;
+const unique T.__unnamed_4_d99b6e2b:name;
+const unique T.__unnamed_4_f19b65c1:name;
+const unique T.__unnamed_4_fa10fc16:name;
+const unique T.__unnamed_8_01efa60d:name;
+const unique T.__unnamed_8_08d4cef8:name;
+const unique T.__unnamed_8_0a898c0c:name;
+const unique T.__unnamed_8_1330f93a:name;
+const unique T.__unnamed_8_181d0de9:name;
+const unique T.__unnamed_8_4812764d:name;
+const unique T.__unnamed_8_559a91e6:name;
+const unique T.__unnamed_8_5845b309:name;
+const unique T.__unnamed_8_58ee4a31:name;
+const unique T.__unnamed_8_61acf4ce:name;
+const unique T.__unnamed_8_6acfee04:name;
+const unique T.__unnamed_8_7f26a9dd:name;
+const unique T.__unnamed_8_87add0bd:name;
+const unique T.__unnamed_8_b2773e4c:name;
+const unique T.__unnamed_8_de890d4e:name;
+const unique T.__unnamed_8_ef9ba0d3:name;
+
+function AssocClassList__GLOBALS(int) returns (int);
+function AssocClassList__GLOBALSInv(int) returns (int);
+function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
+function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
+function Buffer__UNICODE_STRING(int) returns (int);
+function Buffer__UNICODE_STRINGInv(int) returns (int);
+function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
+function DataIn__DEVICE_EXTENSION(int) returns (int);
+function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
+function DataOut__DEVICE_EXTENSION(int) returns (int);
+function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
+function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
+function Enabled__DEVICE_EXTENSION(int) returns (int);
+function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 284);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 284);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 284, 1) == Enabled__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 284)} MINUS_LEFT_PTR(x, 1, 284) == Enabled__DEVICE_EXTENSIONInv(x));
+function Enabled__PORT(int) returns (int);
+function Enabled__PORTInv(int) returns (int);
+function _S_Enabled__PORT([int]bool) returns ([int]bool);
+function _S_Enabled__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Enabled__PORTInv(Enabled__PORT(x))} Enabled__PORTInv(Enabled__PORT(x)) == x);
+axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORT(Enabled__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORT(S)[x]} _S_Enabled__PORT(S)[x] <==> S[Enabled__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORTInv(S)[x]} _S_Enabled__PORTInv(S)[x] <==> S[Enabled__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORT(S)} S[x] ==> _S_Enabled__PORT(S)[Enabled__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORTInv(S)} S[x] ==> _S_Enabled__PORTInv(S)[Enabled__PORTInv(x)]);
+
+axiom (forall x:int :: {Enabled__PORT(x)} Enabled__PORT(x) == x + 8);
+axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORTInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == Enabled__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == Enabled__PORTInv(x));
+function File__DEVICE_EXTENSION(int) returns (int);
+function File__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 280);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 280);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 280, 1) == File__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 280)} MINUS_LEFT_PTR(x, 1, 280) == File__DEVICE_EXTENSIONInv(x));
+function File__PORT(int) returns (int);
+function File__PORTInv(int) returns (int);
+function _S_File__PORT([int]bool) returns ([int]bool);
+function _S_File__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
+
+axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
+function Flink__LIST_ENTRY(int) returns (int);
+function Flink__LIST_ENTRYInv(int) returns (int);
+function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
+function Free__PORT(int) returns (int);
+function Free__PORTInv(int) returns (int);
+function _S_Free__PORT([int]bool) returns ([int]bool);
+function _S_Free__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
+
+axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
+function GrandMaster__GLOBALS(int) returns (int);
+function GrandMaster__GLOBALSInv(int) returns (int);
+function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
+function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
+function InputData__DEVICE_EXTENSION(int) returns (int);
+function InputData__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
+function LegacyDeviceList__GLOBALS(int) returns (int);
+function LegacyDeviceList__GLOBALSInv(int) returns (int);
+function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
+function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 888);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 888);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 888, 1) == LegacyDeviceList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 888)} MINUS_LEFT_PTR(x, 1, 888) == LegacyDeviceList__GLOBALSInv(x));
+function Link__DEVICE_EXTENSION(int) returns (int);
+function Link__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 272);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 272);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 272, 1) == Link__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 272)} MINUS_LEFT_PTR(x, 1, 272) == Link__DEVICE_EXTENSIONInv(x));
+function NumAssocClass__GLOBALS(int) returns (int);
+function NumAssocClass__GLOBALSInv(int) returns (int);
+function _S_NumAssocClass__GLOBALS([int]bool) returns ([int]bool);
+function _S_NumAssocClass__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x))} NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x)) == x);
+axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALS(NumAssocClass__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALS(S)[x]} _S_NumAssocClass__GLOBALS(S)[x] <==> S[NumAssocClass__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALSInv(S)[x]} _S_NumAssocClass__GLOBALSInv(S)[x] <==> S[NumAssocClass__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALS(S)} S[x] ==> _S_NumAssocClass__GLOBALS(S)[NumAssocClass__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALSInv(S)} S[x] ==> _S_NumAssocClass__GLOBALSInv(S)[NumAssocClass__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {NumAssocClass__GLOBALS(x)} NumAssocClass__GLOBALS(x) == x + 12);
+axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALSInv(x) == x - 12);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == NumAssocClass__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == NumAssocClass__GLOBALSInv(x));
+function PnP__DEVICE_EXTENSION(int) returns (int);
+function PnP__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
+function Port__PORT(int) returns (int);
+function Port__PORTInv(int) returns (int);
+function _S_Port__PORT([int]bool) returns ([int]bool);
+function _S_Port__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
+
+axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
+function RegistryPath__GLOBALS(int) returns (int);
+function RegistryPath__GLOBALSInv(int) returns (int);
+function _S_RegistryPath__GLOBALS([int]bool) returns ([int]bool);
+function _S_RegistryPath__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x))} RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x)) == x);
+axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALS(RegistryPath__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALS(S)[x]} _S_RegistryPath__GLOBALS(S)[x] <==> S[RegistryPath__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALSInv(S)[x]} _S_RegistryPath__GLOBALSInv(S)[x] <==> S[RegistryPath__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALS(S)} S[x] ==> _S_RegistryPath__GLOBALS(S)[RegistryPath__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALSInv(S)} S[x] ==> _S_RegistryPath__GLOBALSInv(S)[RegistryPath__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {RegistryPath__GLOBALS(x)} RegistryPath__GLOBALS(x) == x + 360);
+axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALSInv(x) == x - 360);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 360, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 360, 1) == RegistryPath__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 360)} MINUS_LEFT_PTR(x, 1, 360) == RegistryPath__GLOBALSInv(x));
+function Self__DEVICE_EXTENSION(int) returns (int);
+function Self__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
+function StackSize__DEVICE_OBJECT(int) returns (int);
+function StackSize__DEVICE_OBJECTInv(int) returns (int);
+function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
+function Started__DEVICE_EXTENSION(int) returns (int);
+function Started__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
+function TopPort__DEVICE_EXTENSION(int) returns (int);
+function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
+function UnitId__DEVICE_EXTENSION(int) returns (int);
+function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 196);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 196);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 196, 1) == UnitId__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 196)} MINUS_LEFT_PTR(x, 1, 196) == UnitId__DEVICE_EXTENSIONInv(x));
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure nondet_choice() returns (x:int);
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+var Res_DEVICE_STACK:[int]int;
+var Res_DEV_EXTN:[int]int;
+var Res_DEV_OBJ_INIT:[int]int;
+var Res_SPIN_LOCK:[int]int;
+
+
+
+////////////////////
+// Between predicate
+////////////////////
+function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
+function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
+
+
+//////////////////////////
+// Between set constructor
+//////////////////////////
+function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
+
+////////////////////////////////////////////////////
+// axioms relating ReachBetween and ReachBetweenSet
+////////////////////////////////////////////////////
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
+axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
+
+
+//////////////////////////
+// Axioms for ReachBetween
+//////////////////////////
+
+// reflexive
+axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
+
+// step
+//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
+axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
+
+// reach
+axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
+
+// cycle
+axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
+
+// sandwich
+axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
+
+// order1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
+
+// order2
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
+
+// transitive1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
+
+// transitive2
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
+
+// transitive3
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
+
+// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
+// It cannot be proved using the rest of the axioms.
+axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
+
+// relation between ReachAvoiding and ReachBetween
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
+
+// update
+axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
+ ///////////////////////////////
+ // Shifts for linking fields
+ ///////////////////////////////
+function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
+axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
+axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
+
+const unique Globals : int;
+axiom(Globals != 0);
+
+
+procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoAllocateIrp($StackSize$1$20453.15$IoAllocateIrp$81:int, $ChargeQuota$2$20454.17$IoAllocateIrp$81:int) returns ($result.IoAllocateIrp$20452.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
+requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
+//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
+ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
+//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
+ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
+//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
+ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
+//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoFreeIrp($Irp$1$21417.14$IoFreeIrp$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KbdEnableDisablePort($EnableFlag$1$543.15$KbdEnableDisablePort$161:int, $Irp$2$544.15$KbdEnableDisablePort$161:int, $Port$3$545.25$KbdEnableDisablePort$161:int, $File$4$546.22$KbdEnableDisablePort$161:int) returns ($result.KbdEnableDisablePort$542.0$1$:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeyboardClassCleanupQueue($DeviceObject$1$1080.28$KeyboardClassCleanupQueue$121:int, $DeviceExtension$2$1081.28$KeyboardClassCleanupQueue$121:int, $FileObject$3$1082.28$KeyboardClassCleanupQueue$121:int);
+
+//TAG: requires __resource("DEV_EXTN", DeviceExtension) == 1
+requires(Res_DEV_EXTN[$DeviceExtension$2$1081.28$KeyboardClassCleanupQueue$121] == 1);
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires __resource("DEV_OBJ_INIT", DeviceObject) == 1
+requires(Res_DEV_OBJ_INIT[$DeviceObject$1$1080.28$KeyboardClassCleanupQueue$121] == 1);
+//TAG: ensures __resource("DEV_EXTN", DeviceExtension) == 1
+ensures(Res_DEV_EXTN[$DeviceExtension$2$1081.28$KeyboardClassCleanupQueue$121] == 1);
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+//TAG: ensures __resource("DEV_OBJ_INIT", DeviceObject) == 1
+ensures(Res_DEV_OBJ_INIT[$DeviceObject$1$1080.28$KeyboardClassCleanupQueue$121] == 1);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RemoveEntryList($Entry$1$6929.19$RemoveEntryList$41:int) returns ($result.RemoveEntryList$6928.0$1$:int);
+
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __setminus(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList)), __set(Entry)))
+ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41))) && Subset(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)))));
+//TAG: ensures Entry->Flink == __old(Entry->Flink)
+ensures(Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)] == old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure __PREfastPagedCode();
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeyboardClassUnload($DriverObject$1$2966.24$KeyboardClassUnload$41:int)
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+modifies alloc;
+free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for:
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for:
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for:
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for:
+
+//TAG: havoc memory locations by default
+modifies Mem;
+{
+var havoc_stringTemp:int;
+var condVal:int;
+var $DriverObject$1$2966.24$KeyboardClassUnload$4 : int;
+var $IoAllocateIrp.arg.1$9$ : int;
+var $KbdDebugPrint.arg.2$1$ : int;
+var $KbdDebugPrint.arg.2$19$ : int;
+var $RtlAssert.arg.1$14$ : int;
+var $RtlAssert.arg.1$16$ : int;
+var $RtlAssert.arg.1$18$ : int;
+var $RtlAssert.arg.1$3$ : int;
+var $RtlAssert.arg.1$5$ : int;
+var $RtlAssert.arg.1$7$ : int;
+var $RtlAssert.arg.2$13$ : int;
+var $RtlAssert.arg.2$15$ : int;
+var $RtlAssert.arg.2$17$ : int;
+var $RtlAssert.arg.2$2$ : int;
+var $RtlAssert.arg.2$4$ : int;
+var $RtlAssert.arg.2$6$ : int;
+var $data$3$2989.22$KeyboardClassUnload$4 : int;
+var $enabled$6$3006.16$KeyboardClassUnload$4 : int;
+var $entry$2$2988.16$KeyboardClassUnload$4 : int;
+var $file$7$3007.21$KeyboardClassUnload$4 : int;
+var $i$8$3075.14$KeyboardClassUnload$4 : int;
+var $irp$5$2991.9$KeyboardClassUnload$4 : int;
+var $port$4$2990.10$KeyboardClassUnload$4 : int;
+var $result.IoAllocateIrp$3031.31$8$ : int;
+var $result.KbdEnableDisablePort$3033.37$10$ : int;
+var $result.ObfDereferenceObject$3044.12$11$ : int;
+var $result.RemoveEntryList$3055.24$12$ : int;
+var tempBoogie0:int;
+var tempBoogie1:int;
+var tempBoogie2:int;
+var tempBoogie3:int;
+var tempBoogie4:int;
+var tempBoogie5:int;
+var tempBoogie6:int;
+var tempBoogie7:int;
+var tempBoogie8:int;
+var tempBoogie9:int;
+var tempBoogie10:int;
+var tempBoogie11:int;
+var tempBoogie12:int;
+var tempBoogie13:int;
+var tempBoogie14:int;
+var tempBoogie15:int;
+var tempBoogie16:int;
+var tempBoogie17:int;
+var tempBoogie18:int;
+var tempBoogie19:int;
+var LOOP_15_alloc:[int]name;
+var LOOP_15_Mem:[name][int]int;
+var LOOP_15_Res_DEVICE_STACK:[int]int;
+var LOOP_15_Res_DEV_EXTN:[int]int;
+var LOOP_15_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_15_Res_SPIN_LOCK:[int]int;
+var LOOP_108_alloc:[int]name;
+var LOOP_108_Mem:[name][int]int;
+var LOOP_108_Res_DEVICE_STACK:[int]int;
+var LOOP_108_Res_DEV_EXTN:[int]int;
+var LOOP_108_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_108_Res_SPIN_LOCK:[int]int;
+
+
+start:
+
+assume (alloc[$DriverObject$1$2966.24$KeyboardClassUnload$41] != UNALLOCATED);
+call $file$7$3007.21$KeyboardClassUnload$4 := __HAVOC_malloc(4);
+$DriverObject$1$2966.24$KeyboardClassUnload$4 := $DriverObject$1$2966.24$KeyboardClassUnload$41;
+goto label_3;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3088)
+label_1:
+call __HAVOC_free($file$7$3007.21$KeyboardClassUnload$4);
+assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
+assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
+assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
+assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
+assume (forall m:int :: {Mem[T.A11CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A11CHAR][m] == old(Mem[T.A11CHAR])[m]);
+assume (forall m:int :: {Mem[T.A19CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A19CHAR][m] == old(Mem[T.A19CHAR])[m]);
+assume (forall m:int :: {Mem[T.A36CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A36CHAR][m] == old(Mem[T.A36CHAR])[m]);
+assume (forall m:int :: {Mem[T.A37CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A37CHAR][m] == old(Mem[T.A37CHAR])[m]);
+assume (forall m:int :: {Mem[T.A39CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A39CHAR][m] == old(Mem[T.A39CHAR])[m]);
+assume (forall m:int :: {Mem[T.A43CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A43CHAR][m] == old(Mem[T.A43CHAR])[m]);
+assume (forall m:int :: {Mem[T.A74CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A74CHAR][m] == old(Mem[T.A74CHAR])[m]);
+assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][m] == old(Mem[T.CurrentStackLocation___unnamed_4_f19b65c1])[m]);
+assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Enabled__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__PORT][m] == old(Mem[T.Enabled__PORT])[m]);
+assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
+assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
+assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
+assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
+assume (forall m:int :: {Mem[T.NumAssocClass__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumAssocClass__GLOBALS][m] == old(Mem[T.NumAssocClass__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
+assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_IRP][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IRP][m] == old(Mem[T.P_IRP])[m]);
+assume (forall m:int :: {Mem[T.P_KEYBOARD_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_KEYBOARD_INPUT_DATA][m] == old(Mem[T.P_KEYBOARD_INPUT_DATA])[m]);
+assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.P_PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_PORT][m] == old(Mem[T.P_PORT])[m]);
+assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
+assume (forall m:int :: {Mem[T.RegistryPath__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RegistryPath__GLOBALS][m] == old(Mem[T.RegistryPath__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
+assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
+assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3088)
+label_2:
+assume false;
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2988)
+label_3:
+goto label_4;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2989)
+label_4:
+goto label_5;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2990)
+label_5:
+goto label_6;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2991)
+label_6:
+goto label_7;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2995)
+label_7:
+call __PREfastPagedCode ();
+goto label_13;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2997)
+label_10:
+// skip KbdDebugPrint
+goto label_14;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(2997)
+label_13:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$1$ := havoc_stringTemp ;
+goto label_10;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3002)
+label_14:
+$entry$2$2988.16$KeyboardClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))] ;
+goto label_15;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3003)
+label_15:
+// loop entry initialization...
+LOOP_15_alloc := alloc;
+LOOP_15_Mem := Mem;
+LOOP_15_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_15_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_15_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_15_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_15_head;
+
+
+label_15_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: requires __setin(entry, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[$entry$2$2988.16$KeyboardClassUnload$4]);
+assume(forall f:int :: {alloc[Base(f)]} LOOP_15_alloc[Base(f)] == UNALLOCATED || LOOP_15_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_15_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_15_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_15_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_15_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_15_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_15_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_15_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+goto label_15_true , label_15_false ;
+
+
+label_15_true :
+assume ($entry$2$2988.16$KeyboardClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
+goto label_16;
+
+
+label_15_false :
+assume !($entry$2$2988.16$KeyboardClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
+goto label_85;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3006)
+label_16:
+goto label_17;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3006)
+label_17:
+$enabled$6$3006.16$KeyboardClassUnload$4 := 0 ;
+goto label_18;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3007)
+label_18:
+goto label_19;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3007)
+label_19:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4 := 0];
+goto label_20;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3009)
+label_20:
+$data$3$2989.22$KeyboardClassUnload$4 := MINUS_LEFT_PTR($entry$2$2988.16$KeyboardClassUnload$4, 1, 272) ;
+goto label_21;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
+label_21:
+goto label_21_true , label_21_false ;
+
+
+label_21_true :
+assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
+goto label_25;
+
+
+label_21_false :
+assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
+label_22:
+// skip RtlAssert
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
+label_25:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$2$ := havoc_stringTemp ;
+goto label_26;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3010)
+label_26:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$3$ := havoc_stringTemp ;
+goto label_22;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3012)
+label_27:
+goto label_27_true , label_27_false ;
+
+
+label_27_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_28;
+
+
+label_27_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_40;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3013)
+label_28:
+$port$4$2990.10$KeyboardClassUnload$4 := PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]) ;
+goto label_29;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
+label_29:
+goto label_29_true , label_29_false ;
+
+
+label_29_true :
+assume (Mem[T.Port__PORT][Port__PORT($port$4$2990.10$KeyboardClassUnload$4)] == $data$3$2989.22$KeyboardClassUnload$4);
+goto label_35;
+
+
+label_29_false :
+assume !(Mem[T.Port__PORT][Port__PORT($port$4$2990.10$KeyboardClassUnload$4)] == $data$3$2989.22$KeyboardClassUnload$4);
+goto label_33;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
+label_30:
+// skip RtlAssert
+goto label_35;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
+label_33:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$4$ := havoc_stringTemp ;
+goto label_34;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3014)
+label_34:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$5$ := havoc_stringTemp ;
+goto label_30;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3016)
+label_35:
+$enabled$6$3006.16$KeyboardClassUnload$4 := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2990.10$KeyboardClassUnload$4)] ;
+goto label_36;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3017)
+label_36:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4 := Mem[T.File__PORT][File__PORT($port$4$2990.10$KeyboardClassUnload$4)]];
+goto label_37;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3019)
+label_37:
+Mem[T.Enabled__PORT] := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2990.10$KeyboardClassUnload$4) := 0];
+goto label_38;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3020)
+label_38:
+Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT($port$4$2990.10$KeyboardClassUnload$4) := 0];
+goto label_39;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3021)
+label_39:
+Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT($port$4$2990.10$KeyboardClassUnload$4) := 1];
+goto label_49;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3024)
+label_40:
+$enabled$6$3006.16$KeyboardClassUnload$4 := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] ;
+goto label_41;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3025)
+label_41:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
+goto label_42;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
+label_42:
+goto label_42_true , label_42_false ;
+
+
+label_42_true :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
+goto label_48;
+
+
+label_42_false :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
+goto label_46;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
+label_43:
+// skip RtlAssert
+goto label_48;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
+label_46:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$6$ := havoc_stringTemp ;
+goto label_47;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3026)
+label_47:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$7$ := havoc_stringTemp ;
+goto label_43;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3027)
+label_48:
+Mem[T.Enabled__DEVICE_EXTENSION] := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := 0];
+goto label_49;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3030)
+label_49:
+goto label_49_true , label_49_false ;
+
+
+label_49_true :
+assume ($enabled$6$3006.16$KeyboardClassUnload$4 != 0);
+goto label_53;
+
+
+label_49_false :
+assume ($enabled$6$3006.16$KeyboardClassUnload$4 == 0);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3031)
+label_50:
+call $result.IoAllocateIrp$3031.31$8$ := IoAllocateIrp ($IoAllocateIrp.arg.1$9$, 0);
+goto label_54;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3031)
+label_53:
+$IoAllocateIrp.arg.1$9$ := PLUS(Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)])], 1, 1) ;
+goto label_50;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3031)
+label_54:
+$irp$5$2991.9$KeyboardClassUnload$4 := $result.IoAllocateIrp$3031.31$8$ ;
+goto label_55;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3032)
+label_55:
+goto label_55_true , label_55_false ;
+
+
+label_55_true :
+assume ($irp$5$2991.9$KeyboardClassUnload$4 != 0);
+goto label_56;
+
+
+label_55_false :
+assume ($irp$5$2991.9$KeyboardClassUnload$4 == 0);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3033)
+label_56:
+call $result.KbdEnableDisablePort$3033.37$10$ := KbdEnableDisablePort (0, $irp$5$2991.9$KeyboardClassUnload$4, $data$3$2989.22$KeyboardClassUnload$4, $file$7$3007.21$KeyboardClassUnload$4);
+goto label_59;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3034)
+label_59:
+call IoFreeIrp ($irp$5$2991.9$KeyboardClassUnload$4);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3043)
+label_62:
+goto label_62_true , label_62_false ;
+
+
+label_62_true :
+assume (Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4] != 0);
+goto label_63;
+
+
+label_62_false :
+assume (Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4] == 0);
+goto label_66;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3044)
+label_63:
+call $result.ObfDereferenceObject$3044.12$11$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$7$3007.21$KeyboardClassUnload$4]);
+goto label_66;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3051)
+label_66:
+goto label_66_true , label_66_false ;
+
+
+label_66_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_70;
+
+
+label_66_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_67;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3052)
+label_67:
+call KeyboardClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], $data$3$2989.22$KeyboardClassUnload$4, 0);
+goto label_70;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3055)
+label_70:
+call $result.RemoveEntryList$3055.24$12$ := RemoveEntryList (Link__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4));
+goto label_73;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3056)
+label_73:
+$entry$2$2988.16$KeyboardClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($entry$2$2988.16$KeyboardClassUnload$4)] ;
+goto label_74;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
+label_74:
+goto label_74_true , label_74_false ;
+
+
+label_74_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
+goto label_75;
+
+
+label_74_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
+goto label_81;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
+label_75:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], 0);
+goto label_78;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
+label_78:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := 0];
+goto label_79;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
+label_79:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
+goto label_80;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
+label_80:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
+goto label_81;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
+label_81:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]);
+goto label_84;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3058)
+label_84:
+$data$3$2989.22$KeyboardClassUnload$4 := 0 ;
+goto label_15_head;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3064)
+label_85:
+goto label_85_true , label_85_false ;
+
+
+label_85_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_86;
+
+
+label_85_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3065)
+label_86:
+$data$3$2989.22$KeyboardClassUnload$4 := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] ;
+goto label_87;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3066)
+label_87:
+Mem[T.GrandMaster__GLOBALS] := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals) := 0];
+goto label_88;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3068)
+label_88:
+call KeyboardClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], $data$3$2989.22$KeyboardClassUnload$4, 0);
+goto label_91;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
+label_91:
+goto label_91_true , label_91_false ;
+
+
+label_91_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] != 0);
+goto label_92;
+
+
+label_91_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)] == 0);
+goto label_98;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
+label_92:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)], 0);
+goto label_95;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
+label_95:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := 0];
+goto label_96;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
+label_96:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
+goto label_97;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
+label_97:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]];
+goto label_98;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
+label_98:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2989.22$KeyboardClassUnload$4)]);
+goto label_101;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3069)
+label_101:
+$data$3$2989.22$KeyboardClassUnload$4 := 0 ;
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3072)
+label_102:
+call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(RegistryPath__GLOBALS(Globals))], 0);
+goto label_105;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3073)
+label_105:
+goto label_105_true , label_105_false ;
+
+
+label_105_true :
+assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] != 0);
+goto label_106;
+
+
+label_105_false :
+assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] == 0);
+goto label_134;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3075)
+label_106:
+goto label_107;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3077)
+label_107:
+$i$8$3075.14$KeyboardClassUnload$4 := 0 ;
+goto label_108;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3077)
+label_108:
+// loop entry initialization...
+LOOP_108_alloc := alloc;
+LOOP_108_Mem := Mem;
+LOOP_108_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_108_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_108_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_108_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_108_head;
+
+
+label_108_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), 1)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> (true))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires __preserves_resource("DEV_OBJ_INIT")
+assert(Res_DEV_OBJ_INIT == LOOP_108_Res_DEV_OBJ_INIT);
+//TAG: requires __preserves_resource("DEV_EXTN")
+assert(Res_DEV_EXTN == LOOP_108_Res_DEV_EXTN);
+//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+assert(Mem[T.Flink__LIST_ENTRY] == LOOP_108_Mem[T.Flink__LIST_ENTRY]);
+assume(forall f:int :: {alloc[Base(f)]} LOOP_108_alloc[Base(f)] == UNALLOCATED || LOOP_108_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_108_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_108_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_108_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_108_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_108_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_f19b65c1] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m] == LOOP_108_Mem[T.CurrentStackLocation___unnamed_4_f19b65c1][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_108_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_108_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_108_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+goto label_108_true , label_108_false ;
+
+
+label_108_true :
+assume ($i$8$3075.14$KeyboardClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
+goto label_109;
+
+
+label_108_false :
+assume !($i$8$3075.14$KeyboardClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
+goto label_128;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
+label_109:
+goto label_109_true , label_109_false ;
+
+
+label_109_true :
+assume (Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 1);
+goto label_115;
+
+
+label_109_false :
+assume !(Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 1);
+goto label_113;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
+label_110:
+// skip RtlAssert
+goto label_115;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
+label_113:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$13$ := havoc_stringTemp ;
+goto label_114;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3078)
+label_114:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$14$ := havoc_stringTemp ;
+goto label_110;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
+label_115:
+goto label_115_true , label_115_false ;
+
+
+label_115_true :
+assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] != 0);
+goto label_119;
+
+
+label_115_false :
+assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 0);
+goto label_121;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
+label_116:
+// skip RtlAssert
+goto label_121;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
+label_119:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$15$ := havoc_stringTemp ;
+goto label_120;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3079)
+label_120:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$16$ := havoc_stringTemp ;
+goto label_116;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
+label_121:
+goto label_121_true , label_121_false ;
+
+
+label_121_true :
+assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] != 0);
+goto label_125;
+
+
+label_121_false :
+assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$3075.14$KeyboardClassUnload$4))] == 0);
+goto label_127;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
+label_122:
+// skip RtlAssert
+goto label_127;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
+label_125:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$17$ := havoc_stringTemp ;
+goto label_126;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3080)
+label_126:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$18$ := havoc_stringTemp ;
+goto label_122;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3077)
+label_127:
+$i$8$3075.14$KeyboardClassUnload$4 := PLUS($i$8$3075.14$KeyboardClassUnload$4, 1, 1) ;
+goto label_108_head;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3084)
+label_128:
+call ExFreePoolWithTag (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 0);
+goto label_134;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3087)
+label_131:
+// skip KbdDebugPrint
+goto label_1;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\kbdclass_fbl_fbs_dev2_ntfs\kbdclass.c(3087)
+label_134:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$KbdDebugPrint.arg.2$19$ := havoc_stringTemp ;
+goto label_131;
+
+}
+
diff --git a/Test/havoc0/MouCreateClassObject.bpl b/Test/havoc0/MouCreateClassObject.bpl
index 98a0fda6..ed8e60b2 100644
--- a/Test/havoc0/MouCreateClassObject.bpl
+++ b/Test/havoc0/MouCreateClassObject.bpl
@@ -1,4920 +1,4920 @@
-// RUN: %boogie -monomorphize "%s" > "%t"
-// RUN: %diff success.expect "%t"
-type byte, name;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function SetTrue() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-/*
-function AtLeast(int, int) returns ([int]bool);
-function ModEqual(int, int, int) returns (bool);
-axiom(forall n:int, x:int :: ModEqual(n,x,x));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
-axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
-axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
-axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-*/
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int :: SetTrue()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name, m:[name][int]int) returns (bool);
-function Values(t:name, m:[name][int]int) returns ([int]bool);
-function T.Ptr(t:name) returns (name);
-
-axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
-
-axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
-
-axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
- (HasType(v, t, m1) <==> HasType(v, t, m2)));
-
-// Field declarations
-
-const unique T.Guid_WMIGUIDREGINFO:name;
-const unique T.InstanceCount_WMIGUIDREGINFO:name;
-const unique T.Flags_WMIGUIDREGINFO:name;
-const unique T.OperationID__ACCESS_STATE:name;
-const unique T.SecurityEvaluated__ACCESS_STATE:name;
-const unique T.GenerateAudit__ACCESS_STATE:name;
-const unique T.GenerateOnClose__ACCESS_STATE:name;
-const unique T.PrivilegesAllocated__ACCESS_STATE:name;
-const unique T.Flags__ACCESS_STATE:name;
-const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
-const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
-const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
-const unique T.SubjectSecurityContext__ACCESS_STATE:name;
-const unique T.SecurityDescriptor__ACCESS_STATE:name;
-const unique T.AuxData__ACCESS_STATE:name;
-const unique T.Privileges__ACCESS_STATE:name;
-const unique T.AuditPrivileges__ACCESS_STATE:name;
-const unique T.ObjectName__ACCESS_STATE:name;
-const unique T.ObjectTypeName__ACCESS_STATE:name;
-const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_RESOURCE_LIST:name;
-const unique T.List__CM_RESOURCE_LIST:name;
-const unique T.Size__DEVICE_CAPABILITIES:name;
-const unique T.Version__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
-const unique T.LockSupported__DEVICE_CAPABILITIES:name;
-const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.Removable__DEVICE_CAPABILITIES:name;
-const unique T.DockDevice__DEVICE_CAPABILITIES:name;
-const unique T.UniqueID__DEVICE_CAPABILITIES:name;
-const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
-const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
-const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
-const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
-const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
-const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
-const unique T.Reserved__DEVICE_CAPABILITIES:name;
-const unique T.Address__DEVICE_CAPABILITIES:name;
-const unique T.UINumber__DEVICE_CAPABILITIES:name;
-const unique T.DeviceState__DEVICE_CAPABILITIES:name;
-const unique T.SystemWake__DEVICE_CAPABILITIES:name;
-const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
-const unique T.D1Latency__DEVICE_CAPABILITIES:name;
-const unique T.D2Latency__DEVICE_CAPABILITIES:name;
-const unique T.D3Latency__DEVICE_CAPABILITIES:name;
-const unique T.Self__DEVICE_EXTENSION:name;
-const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
-const unique T.TopPort__DEVICE_EXTENSION:name;
-const unique T.PDO__DEVICE_EXTENSION:name;
-const unique T.RemoveLock__DEVICE_EXTENSION:name;
-const unique T.PnP__DEVICE_EXTENSION:name;
-const unique T.Started__DEVICE_EXTENSION:name;
-const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
-const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
-const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
-const unique T.InputCount__DEVICE_EXTENSION:name;
-const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
-const unique T.InputData__DEVICE_EXTENSION:name;
-const unique T.DataIn__DEVICE_EXTENSION:name;
-const unique T.DataOut__DEVICE_EXTENSION:name;
-const unique T.MouseAttributes__DEVICE_EXTENSION:name;
-const unique T.SpinLock__DEVICE_EXTENSION:name;
-const unique T.ReadQueue__DEVICE_EXTENSION:name;
-const unique T.SequenceNumber__DEVICE_EXTENSION:name;
-const unique T.DeviceState__DEVICE_EXTENSION:name;
-const unique T.SystemState__DEVICE_EXTENSION:name;
-const unique T.UnitId__DEVICE_EXTENSION:name;
-const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
-const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
-const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
-const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
-const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
-const unique T.Link__DEVICE_EXTENSION:name;
-const unique T.File__DEVICE_EXTENSION:name;
-const unique T.Enabled__DEVICE_EXTENSION:name;
-const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
-const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
-const unique T.Type__DEVICE_OBJECT:name;
-const unique T.Size__DEVICE_OBJECT:name;
-const unique T.ReferenceCount__DEVICE_OBJECT:name;
-const unique T.DriverObject__DEVICE_OBJECT:name;
-const unique T.NextDevice__DEVICE_OBJECT:name;
-const unique T.AttachedDevice__DEVICE_OBJECT:name;
-const unique T.CurrentIrp__DEVICE_OBJECT:name;
-const unique T.Timer__DEVICE_OBJECT:name;
-const unique T.Flags__DEVICE_OBJECT:name;
-const unique T.Characteristics__DEVICE_OBJECT:name;
-const unique T.Vpb__DEVICE_OBJECT:name;
-const unique T.DeviceExtension__DEVICE_OBJECT:name;
-const unique T.DeviceType__DEVICE_OBJECT:name;
-const unique T.StackSize__DEVICE_OBJECT:name;
-const unique T.Queue__DEVICE_OBJECT:name;
-const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
-const unique T.DeviceQueue__DEVICE_OBJECT:name;
-const unique T.Dpc__DEVICE_OBJECT:name;
-const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
-const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
-const unique T.DeviceLock__DEVICE_OBJECT:name;
-const unique T.SectorSize__DEVICE_OBJECT:name;
-const unique T.Spare1__DEVICE_OBJECT:name;
-const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
-const unique T.Reserved__DEVICE_OBJECT:name;
-const unique T.Type__DEVOBJ_EXTENSION:name;
-const unique T.Size__DEVOBJ_EXTENSION:name;
-const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
-const unique T.__unnamed_4_c9b2e921__DISPATCHER_HEADER:name;
-const unique T.SignalState__DISPATCHER_HEADER:name;
-const unique T.WaitListHead__DISPATCHER_HEADER:name;
-const unique T.DriverObject__DRIVER_EXTENSION:name;
-const unique T.AddDevice__DRIVER_EXTENSION:name;
-const unique T.Count__DRIVER_EXTENSION:name;
-const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
-const unique T.Type__DRIVER_OBJECT:name;
-const unique T.Size__DRIVER_OBJECT:name;
-const unique T.DeviceObject__DRIVER_OBJECT:name;
-const unique T.Flags__DRIVER_OBJECT:name;
-const unique T.DriverStart__DRIVER_OBJECT:name;
-const unique T.DriverSize__DRIVER_OBJECT:name;
-const unique T.DriverSection__DRIVER_OBJECT:name;
-const unique T.DriverExtension__DRIVER_OBJECT:name;
-const unique T.DriverName__DRIVER_OBJECT:name;
-const unique T.HardwareDatabase__DRIVER_OBJECT:name;
-const unique T.FastIoDispatch__DRIVER_OBJECT:name;
-const unique T.DriverInit__DRIVER_OBJECT:name;
-const unique T.DriverStartIo__DRIVER_OBJECT:name;
-const unique T.DriverUnload__DRIVER_OBJECT:name;
-const unique T.MajorFunction__DRIVER_OBJECT:name;
-const unique T.SystemResourcesList__ERESOURCE:name;
-const unique T.OwnerTable__ERESOURCE:name;
-const unique T.ActiveCount__ERESOURCE:name;
-const unique T.Flag__ERESOURCE:name;
-const unique T.SharedWaiters__ERESOURCE:name;
-const unique T.ExclusiveWaiters__ERESOURCE:name;
-const unique T.OwnerEntry__ERESOURCE:name;
-const unique T.ActiveEntries__ERESOURCE:name;
-const unique T.ContentionCount__ERESOURCE:name;
-const unique T.NumberOfSharedWaiters__ERESOURCE:name;
-const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
-const unique T.__unnamed_4_46b62f69__ERESOURCE:name;
-const unique T.SpinLock__ERESOURCE:name;
-const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
-const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
-const unique T.FastIoRead__FAST_IO_DISPATCH:name;
-const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoLock__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
-const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
-const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
-const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlRead__FAST_IO_DISPATCH:name;
-const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
-const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
-const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
-const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.Count__FAST_MUTEX:name;
-const unique T.Owner__FAST_MUTEX:name;
-const unique T.Contention__FAST_MUTEX:name;
-const unique T.Gate__FAST_MUTEX:name;
-const unique T.OldIrql__FAST_MUTEX:name;
-const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
-const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
-const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
-const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.Type__FILE_OBJECT:name;
-const unique T.Size__FILE_OBJECT:name;
-const unique T.DeviceObject__FILE_OBJECT:name;
-const unique T.Vpb__FILE_OBJECT:name;
-const unique T.FsContext__FILE_OBJECT:name;
-const unique T.FsContext2__FILE_OBJECT:name;
-const unique T.SectionObjectPointer__FILE_OBJECT:name;
-const unique T.PrivateCacheMap__FILE_OBJECT:name;
-const unique T.FinalStatus__FILE_OBJECT:name;
-const unique T.RelatedFileObject__FILE_OBJECT:name;
-const unique T.LockOperation__FILE_OBJECT:name;
-const unique T.DeletePending__FILE_OBJECT:name;
-const unique T.ReadAccess__FILE_OBJECT:name;
-const unique T.WriteAccess__FILE_OBJECT:name;
-const unique T.DeleteAccess__FILE_OBJECT:name;
-const unique T.SharedRead__FILE_OBJECT:name;
-const unique T.SharedWrite__FILE_OBJECT:name;
-const unique T.SharedDelete__FILE_OBJECT:name;
-const unique T.Flags__FILE_OBJECT:name;
-const unique T.FileName__FILE_OBJECT:name;
-const unique T.CurrentByteOffset__FILE_OBJECT:name;
-const unique T.Waiters__FILE_OBJECT:name;
-const unique T.Busy__FILE_OBJECT:name;
-const unique T.LastLock__FILE_OBJECT:name;
-const unique T.Lock__FILE_OBJECT:name;
-const unique T.Event__FILE_OBJECT:name;
-const unique T.CompletionContext__FILE_OBJECT:name;
-const unique T.IrpListLock__FILE_OBJECT:name;
-const unique T.IrpList__FILE_OBJECT:name;
-const unique T.FileObjectExtension__FILE_OBJECT:name;
-const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
-const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
-const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
-const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
-const unique T.Directory__FILE_STANDARD_INFORMATION:name;
-const unique T.Debug__GLOBALS:name;
-const unique T.GrandMaster__GLOBALS:name;
-const unique T.AssocClassList__GLOBALS:name;
-const unique T.NumAssocClass__GLOBALS:name;
-const unique T.Opens__GLOBALS:name;
-const unique T.NumberLegacyPorts__GLOBALS:name;
-const unique T.Mutex__GLOBALS:name;
-const unique T.ConnectOneClassToOnePort__GLOBALS:name;
-const unique T.PortsServiced__GLOBALS:name;
-const unique T.InitExtension__GLOBALS:name;
-const unique T.RegistryPath__GLOBALS:name;
-const unique T.BaseClassName__GLOBALS:name;
-const unique T.BaseClassBuffer__GLOBALS:name;
-const unique T.LegacyDeviceList__GLOBALS:name;
-const unique T.Data1__GUID:name;
-const unique T.Data2__GUID:name;
-const unique T.Data3__GUID:name;
-const unique T.Data4__GUID:name;
-const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
-const unique T.Control__INITIAL_PRIVILEGE_SET:name;
-const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
-const unique T.Size__INTERFACE:name;
-const unique T.Version__INTERFACE:name;
-const unique T.Context__INTERFACE:name;
-const unique T.InterfaceReference__INTERFACE:name;
-const unique T.InterfaceDereference__INTERFACE:name;
-const unique T.Port__IO_COMPLETION_CONTEXT:name;
-const unique T.Key__IO_COMPLETION_CONTEXT:name;
-const unique T.Common__IO_REMOVE_LOCK:name;
-const unique T.Dbg__IO_REMOVE_LOCK:name;
-const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__IO_RESOURCE_LIST:name;
-const unique T.Revision__IO_RESOURCE_LIST:name;
-const unique T.Count__IO_RESOURCE_LIST:name;
-const unique T.Descriptors__IO_RESOURCE_LIST:name;
-const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
-const unique T.AccessState__IO_SECURITY_CONTEXT:name;
-const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
-const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
-const unique T.MajorFunction__IO_STACK_LOCATION:name;
-const unique T.MinorFunction__IO_STACK_LOCATION:name;
-const unique T.Flags__IO_STACK_LOCATION:name;
-const unique T.Control__IO_STACK_LOCATION:name;
-const unique T.Parameters__IO_STACK_LOCATION:name;
-const unique T.DeviceObject__IO_STACK_LOCATION:name;
-const unique T.FileObject__IO_STACK_LOCATION:name;
-const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
-const unique T.Context__IO_STACK_LOCATION:name;
-const unique T.__unnamed_4_16aff58e__IO_STATUS_BLOCK:name;
-const unique T.Information__IO_STATUS_BLOCK:name;
-const unique T.Type__IRP:name;
-const unique T.Size__IRP:name;
-const unique T.MdlAddress__IRP:name;
-const unique T.Flags__IRP:name;
-const unique T.AssociatedIrp__IRP:name;
-const unique T.ThreadListEntry__IRP:name;
-const unique T.IoStatus__IRP:name;
-const unique T.RequestorMode__IRP:name;
-const unique T.PendingReturned__IRP:name;
-const unique T.StackCount__IRP:name;
-const unique T.CurrentLocation__IRP:name;
-const unique T.Cancel__IRP:name;
-const unique T.CancelIrql__IRP:name;
-const unique T.ApcEnvironment__IRP:name;
-const unique T.AllocationFlags__IRP:name;
-const unique T.UserIosb__IRP:name;
-const unique T.UserEvent__IRP:name;
-const unique T.Overlay__IRP:name;
-const unique T.CancelRoutine__IRP:name;
-const unique T.UserBuffer__IRP:name;
-const unique T.Tail__IRP:name;
-const unique T.Type__KAPC:name;
-const unique T.SpareByte0__KAPC:name;
-const unique T.Size__KAPC:name;
-const unique T.SpareByte1__KAPC:name;
-const unique T.SpareLong0__KAPC:name;
-const unique T.Thread__KAPC:name;
-const unique T.ApcListEntry__KAPC:name;
-const unique T.KernelRoutine__KAPC:name;
-const unique T.RundownRoutine__KAPC:name;
-const unique T.NormalRoutine__KAPC:name;
-const unique T.NormalContext__KAPC:name;
-const unique T.SystemArgument1__KAPC:name;
-const unique T.SystemArgument2__KAPC:name;
-const unique T.ApcStateIndex__KAPC:name;
-const unique T.ApcMode__KAPC:name;
-const unique T.Inserted__KAPC:name;
-const unique T.Type__KDEVICE_QUEUE:name;
-const unique T.Size__KDEVICE_QUEUE:name;
-const unique T.DeviceListHead__KDEVICE_QUEUE:name;
-const unique T.Lock__KDEVICE_QUEUE:name;
-const unique T.Busy__KDEVICE_QUEUE:name;
-const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
-const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Type__KDPC:name;
-const unique T.Importance__KDPC:name;
-const unique T.Number__KDPC:name;
-const unique T.DpcListEntry__KDPC:name;
-const unique T.DeferredRoutine__KDPC:name;
-const unique T.DeferredContext__KDPC:name;
-const unique T.SystemArgument1__KDPC:name;
-const unique T.SystemArgument2__KDPC:name;
-const unique T.DpcData__KDPC:name;
-const unique T.Header__KEVENT:name;
-const unique T.Header__KSEMAPHORE:name;
-const unique T.Limit__KSEMAPHORE:name;
-const unique T.__unnamed_8_8684a3e7__LARGE_INTEGER:name;
-const unique T.u__LARGE_INTEGER:name;
-const unique T.QuadPart__LARGE_INTEGER:name;
-const unique T.Flink__LIST_ENTRY:name;
-const unique T.Blink__LIST_ENTRY:name;
-const unique T.LowPart__LUID:name;
-const unique T.HighPart__LUID:name;
-const unique T.Luid__LUID_AND_ATTRIBUTES:name;
-const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
-const unique T.Next__MDL:name;
-const unique T.Size__MDL:name;
-const unique T.MdlFlags__MDL:name;
-const unique T.Process__MDL:name;
-const unique T.MappedSystemVa__MDL:name;
-const unique T.StartVa__MDL:name;
-const unique T.ByteCount__MDL:name;
-const unique T.ByteOffset__MDL:name;
-const unique T.MouseIdentifier__MOUSE_ATTRIBUTES:name;
-const unique T.NumberOfButtons__MOUSE_ATTRIBUTES:name;
-const unique T.SampleRate__MOUSE_ATTRIBUTES:name;
-const unique T.InputDataQueueLength__MOUSE_ATTRIBUTES:name;
-const unique T.UnitId__MOUSE_INPUT_DATA:name;
-const unique T.Flags__MOUSE_INPUT_DATA:name;
-const unique T.__unnamed_4_9c11ed91__MOUSE_INPUT_DATA:name;
-const unique T.RawButtons__MOUSE_INPUT_DATA:name;
-const unique T.LastX__MOUSE_INPUT_DATA:name;
-const unique T.LastY__MOUSE_INPUT_DATA:name;
-const unique T.ExtraInformation__MOUSE_INPUT_DATA:name;
-const unique T.OwnerThread__OWNER_ENTRY:name;
-const unique T.__unnamed_4_c1e23b02__OWNER_ENTRY:name;
-const unique T.File__PORT:name;
-const unique T.Port__PORT:name;
-const unique T.Enabled__PORT:name;
-const unique T.Reserved__PORT:name;
-const unique T.Free__PORT:name;
-const unique T.SequenceD1__POWER_SEQUENCE:name;
-const unique T.SequenceD2__POWER_SEQUENCE:name;
-const unique T.SequenceD3__POWER_SEQUENCE:name;
-const unique T.SystemState__POWER_STATE:name;
-const unique T.DeviceState__POWER_STATE:name;
-const unique T.PrivilegeCount__PRIVILEGE_SET:name;
-const unique T.Control__PRIVILEGE_SET:name;
-const unique T.Privilege__PRIVILEGE_SET:name;
-const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
-const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.__unnamed_4_b4f5a780__SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T.Length__UNICODE_STRING:name;
-const unique T.MaximumLength__UNICODE_STRING:name;
-const unique T.Buffer__UNICODE_STRING:name;
-const unique T.Type__VPB:name;
-const unique T.Size__VPB:name;
-const unique T.Flags__VPB:name;
-const unique T.VolumeLabelLength__VPB:name;
-const unique T.DeviceObject__VPB:name;
-const unique T.RealDevice__VPB:name;
-const unique T.SerialNumber__VPB:name;
-const unique T.ReferenceCount__VPB:name;
-const unique T.VolumeLabel__VPB:name;
-const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
-const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
-const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
-const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
-const unique T.GuidCount__WMILIB_CONTEXT:name;
-const unique T.GuidList__WMILIB_CONTEXT:name;
-const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
-const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
-const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
-const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
-const unique T.Start___unnamed_12_06b9ee6e:name;
-const unique T.Length48___unnamed_12_06b9ee6e:name;
-const unique T.Start___unnamed_12_0882bd02:name;
-const unique T.Length64___unnamed_12_0882bd02:name;
-const unique T.__unnamed_12_2e80217b___unnamed_12_264d0dab:name;
-const unique T.Raw___unnamed_12_2e80217b:name;
-const unique T.Translated___unnamed_12_2e80217b:name;
-const unique T.Data___unnamed_12_5cc7ace2:name;
-const unique T.Channel___unnamed_12_6374506e:name;
-const unique T.Port___unnamed_12_6374506e:name;
-const unique T.Reserved1___unnamed_12_6374506e:name;
-const unique T.Priority___unnamed_12_68a4278e:name;
-const unique T.Reserved1___unnamed_12_68a4278e:name;
-const unique T.Reserved2___unnamed_12_68a4278e:name;
-const unique T.Generic___unnamed_12_79ed2653:name;
-const unique T.Port___unnamed_12_79ed2653:name;
-const unique T.Interrupt___unnamed_12_79ed2653:name;
-const unique T.MessageInterrupt___unnamed_12_79ed2653:name;
-const unique T.Memory___unnamed_12_79ed2653:name;
-const unique T.Dma___unnamed_12_79ed2653:name;
-const unique T.DevicePrivate___unnamed_12_79ed2653:name;
-const unique T.BusNumber___unnamed_12_79ed2653:name;
-const unique T.DeviceSpecificData___unnamed_12_79ed2653:name;
-const unique T.Memory40___unnamed_12_79ed2653:name;
-const unique T.Memory48___unnamed_12_79ed2653:name;
-const unique T.Memory64___unnamed_12_79ed2653:name;
-const unique T.Start___unnamed_12_7da594c0:name;
-const unique T.Length40___unnamed_12_7da594c0:name;
-const unique T.Start___unnamed_12_9873e05d:name;
-const unique T.Length___unnamed_12_9873e05d:name;
-const unique T.DataSize___unnamed_12_9cc8cebc:name;
-const unique T.Reserved1___unnamed_12_9cc8cebc:name;
-const unique T.Reserved2___unnamed_12_9cc8cebc:name;
-const unique T.Start___unnamed_12_b98da82e:name;
-const unique T.Length___unnamed_12_b98da82e:name;
-const unique T.Level___unnamed_12_c2880e88:name;
-const unique T.Vector___unnamed_12_c2880e88:name;
-const unique T.Affinity___unnamed_12_c2880e88:name;
-const unique T.Start___unnamed_12_c49ab31a:name;
-const unique T.Length___unnamed_12_c49ab31a:name;
-const unique T.ListEntry___unnamed_12_c6ed93f3:name;
-const unique T.__unnamed_4_a7aa989c___unnamed_12_c6ed93f3:name;
-const unique T.Data___unnamed_12_ced61554:name;
-const unique T.Reserved___unnamed_12_d9c44df5:name;
-const unique T.MessageCount___unnamed_12_d9c44df5:name;
-const unique T.Vector___unnamed_12_d9c44df5:name;
-const unique T.Affinity___unnamed_12_d9c44df5:name;
-const unique T.Start___unnamed_12_db3dcbfc:name;
-const unique T.Length___unnamed_12_db3dcbfc:name;
-const unique T.Reserved___unnamed_12_db3dcbfc:name;
-const unique T.Level___unnamed_12_fb26b3fc:name;
-const unique T.Vector___unnamed_12_fb26b3fc:name;
-const unique T.Affinity___unnamed_12_fb26b3fc:name;
-const unique T.OutputBufferLength___unnamed_16_22e4d054:name;
-const unique T.InputBufferLength___unnamed_16_22e4d054:name;
-const unique T.IoControlCode___unnamed_16_22e4d054:name;
-const unique T.Type3InputBuffer___unnamed_16_22e4d054:name;
-const unique T.Create___unnamed_16_39b626ad:name;
-const unique T.Read___unnamed_16_39b626ad:name;
-const unique T.Write___unnamed_16_39b626ad:name;
-const unique T.QueryDirectory___unnamed_16_39b626ad:name;
-const unique T.NotifyDirectory___unnamed_16_39b626ad:name;
-const unique T.QueryFile___unnamed_16_39b626ad:name;
-const unique T.SetFile___unnamed_16_39b626ad:name;
-const unique T.QueryEa___unnamed_16_39b626ad:name;
-const unique T.SetEa___unnamed_16_39b626ad:name;
-const unique T.QueryVolume___unnamed_16_39b626ad:name;
-const unique T.SetVolume___unnamed_16_39b626ad:name;
-const unique T.FileSystemControl___unnamed_16_39b626ad:name;
-const unique T.LockControl___unnamed_16_39b626ad:name;
-const unique T.DeviceIoControl___unnamed_16_39b626ad:name;
-const unique T.QuerySecurity___unnamed_16_39b626ad:name;
-const unique T.SetSecurity___unnamed_16_39b626ad:name;
-const unique T.MountVolume___unnamed_16_39b626ad:name;
-const unique T.VerifyVolume___unnamed_16_39b626ad:name;
-const unique T.Scsi___unnamed_16_39b626ad:name;
-const unique T.QueryQuota___unnamed_16_39b626ad:name;
-const unique T.SetQuota___unnamed_16_39b626ad:name;
-const unique T.QueryDeviceRelations___unnamed_16_39b626ad:name;
-const unique T.QueryInterface___unnamed_16_39b626ad:name;
-const unique T.DeviceCapabilities___unnamed_16_39b626ad:name;
-const unique T.FilterResourceRequirements___unnamed_16_39b626ad:name;
-const unique T.ReadWriteConfig___unnamed_16_39b626ad:name;
-const unique T.SetLock___unnamed_16_39b626ad:name;
-const unique T.QueryId___unnamed_16_39b626ad:name;
-const unique T.QueryDeviceText___unnamed_16_39b626ad:name;
-const unique T.UsageNotification___unnamed_16_39b626ad:name;
-const unique T.WaitWake___unnamed_16_39b626ad:name;
-const unique T.PowerSequence___unnamed_16_39b626ad:name;
-const unique T.Power___unnamed_16_39b626ad:name;
-const unique T.StartDevice___unnamed_16_39b626ad:name;
-const unique T.WMI___unnamed_16_39b626ad:name;
-const unique T.Others___unnamed_16_39b626ad:name;
-const unique T.WhichSpace___unnamed_16_56c011d7:name;
-const unique T.Buffer___unnamed_16_56c011d7:name;
-const unique T.Offset___unnamed_16_56c011d7:name;
-const unique T.Length___unnamed_16_56c011d7:name;
-const unique T.DeviceQueueEntry___unnamed_16_5fed8f23:name;
-const unique T.__unnamed_16_ae643f17___unnamed_16_5fed8f23:name;
-const unique T.Length___unnamed_16_6be9abe0:name;
-const unique T.FileName___unnamed_16_6be9abe0:name;
-const unique T.FileInformationClass___unnamed_16_6be9abe0:name;
-const unique T.FileIndex___unnamed_16_6be9abe0:name;
-const unique T.InterfaceType___unnamed_16_78879a38:name;
-const unique T.Size___unnamed_16_78879a38:name;
-const unique T.Version___unnamed_16_78879a38:name;
-const unique T.Interface___unnamed_16_78879a38:name;
-const unique T.InterfaceSpecificData___unnamed_16_78879a38:name;
-const unique T.Length___unnamed_16_804a2f24:name;
-const unique T.StartSid___unnamed_16_804a2f24:name;
-const unique T.SidList___unnamed_16_804a2f24:name;
-const unique T.SidListLength___unnamed_16_804a2f24:name;
-const unique T.Argument1___unnamed_16_8586693f:name;
-const unique T.Argument2___unnamed_16_8586693f:name;
-const unique T.Argument3___unnamed_16_8586693f:name;
-const unique T.Argument4___unnamed_16_8586693f:name;
-const unique T.Length___unnamed_16_8831e65f:name;
-const unique T.Key___unnamed_16_8831e65f:name;
-const unique T.ByteOffset___unnamed_16_8831e65f:name;
-const unique T.SecurityContext___unnamed_16_8c2d663a:name;
-const unique T.Options___unnamed_16_8c2d663a:name;
-const unique T.FileAttributes___unnamed_16_8c2d663a:name;
-const unique T.ShareAccess___unnamed_16_8c2d663a:name;
-const unique T.EaLength___unnamed_16_8c2d663a:name;
-const unique T.Length___unnamed_16_913b9a7a:name;
-const unique T.Key___unnamed_16_913b9a7a:name;
-const unique T.ByteOffset___unnamed_16_913b9a7a:name;
-const unique T.OutputBufferLength___unnamed_16_94d1d1c7:name;
-const unique T.InputBufferLength___unnamed_16_94d1d1c7:name;
-const unique T.FsControlCode___unnamed_16_94d1d1c7:name;
-const unique T.Type3InputBuffer___unnamed_16_94d1d1c7:name;
-const unique T.Length___unnamed_16_a2fab4da:name;
-const unique T.FileInformationClass___unnamed_16_a2fab4da:name;
-const unique T.FileObject___unnamed_16_a2fab4da:name;
-const unique T.__unnamed_4_a7d0864c___unnamed_16_a2fab4da:name;
-const unique T.DriverContext___unnamed_16_ae643f17:name;
-const unique T.Length___unnamed_16_c1b29316:name;
-const unique T.Key___unnamed_16_c1b29316:name;
-const unique T.ByteOffset___unnamed_16_c1b29316:name;
-const unique T.ProviderId___unnamed_16_cbd53ed4:name;
-const unique T.DataPath___unnamed_16_cbd53ed4:name;
-const unique T.BufferSize___unnamed_16_cbd53ed4:name;
-const unique T.Buffer___unnamed_16_cbd53ed4:name;
-const unique T.Length___unnamed_16_db70db6e:name;
-const unique T.MinBusNumber___unnamed_16_db70db6e:name;
-const unique T.MaxBusNumber___unnamed_16_db70db6e:name;
-const unique T.Reserved___unnamed_16_db70db6e:name;
-const unique T.Length___unnamed_16_ef4b6307:name;
-const unique T.EaList___unnamed_16_ef4b6307:name;
-const unique T.EaListLength___unnamed_16_ef4b6307:name;
-const unique T.EaIndex___unnamed_16_ef4b6307:name;
-const unique T.__unnamed_4_b060dea6___unnamed_16_fdda1f62:name;
-const unique T.Type___unnamed_16_fdda1f62:name;
-const unique T.State___unnamed_16_fdda1f62:name;
-const unique T.ShutdownType___unnamed_16_fdda1f62:name;
-const unique T.Lock___unnamed_1_1394de4b:name;
-const unique T.Abandoned___unnamed_1_2bb39c56:name;
-const unique T.Absolute___unnamed_1_2bb39c56:name;
-const unique T.NpxIrql___unnamed_1_2bb39c56:name;
-const unique T.Signalling___unnamed_1_2bb39c56:name;
-const unique T.Inserted___unnamed_1_9fa0583a:name;
-const unique T.DebugActive___unnamed_1_9fa0583a:name;
-const unique T.DpcActive___unnamed_1_9fa0583a:name;
-const unique T.Size___unnamed_1_e30779f5:name;
-const unique T.Hand___unnamed_1_e30779f5:name;
-const unique T.MinimumVector___unnamed_20_83d468e4:name;
-const unique T.MaximumVector___unnamed_20_83d468e4:name;
-const unique T.AffinityPolicy___unnamed_20_83d468e4:name;
-const unique T.PriorityPolicy___unnamed_20_83d468e4:name;
-const unique T.TargetedProcessors___unnamed_20_83d468e4:name;
-const unique T.Length40___unnamed_24_035931da:name;
-const unique T.Alignment40___unnamed_24_035931da:name;
-const unique T.MinimumAddress___unnamed_24_035931da:name;
-const unique T.MaximumAddress___unnamed_24_035931da:name;
-const unique T.Length___unnamed_24_38e128db:name;
-const unique T.Alignment___unnamed_24_38e128db:name;
-const unique T.MinimumAddress___unnamed_24_38e128db:name;
-const unique T.MaximumAddress___unnamed_24_38e128db:name;
-const unique T.Length___unnamed_24_9500ea34:name;
-const unique T.Alignment___unnamed_24_9500ea34:name;
-const unique T.MinimumAddress___unnamed_24_9500ea34:name;
-const unique T.MaximumAddress___unnamed_24_9500ea34:name;
-const unique T.Length___unnamed_24_9734802c:name;
-const unique T.Alignment___unnamed_24_9734802c:name;
-const unique T.MinimumAddress___unnamed_24_9734802c:name;
-const unique T.MaximumAddress___unnamed_24_9734802c:name;
-const unique T.Length64___unnamed_24_af62813f:name;
-const unique T.Alignment64___unnamed_24_af62813f:name;
-const unique T.MinimumAddress___unnamed_24_af62813f:name;
-const unique T.MaximumAddress___unnamed_24_af62813f:name;
-const unique T.Length48___unnamed_24_c0555099:name;
-const unique T.Alignment48___unnamed_24_c0555099:name;
-const unique T.MinimumAddress___unnamed_24_c0555099:name;
-const unique T.MaximumAddress___unnamed_24_c0555099:name;
-const unique T.Port___unnamed_24_d7c4ec3a:name;
-const unique T.Memory___unnamed_24_d7c4ec3a:name;
-const unique T.Interrupt___unnamed_24_d7c4ec3a:name;
-const unique T.Dma___unnamed_24_d7c4ec3a:name;
-const unique T.Generic___unnamed_24_d7c4ec3a:name;
-const unique T.DevicePrivate___unnamed_24_d7c4ec3a:name;
-const unique T.BusNumber___unnamed_24_d7c4ec3a:name;
-const unique T.ConfigData___unnamed_24_d7c4ec3a:name;
-const unique T.Memory40___unnamed_24_d7c4ec3a:name;
-const unique T.Memory48___unnamed_24_d7c4ec3a:name;
-const unique T.Memory64___unnamed_24_d7c4ec3a:name;
-const unique T.ReplaceIfExists___unnamed_2_196a7f56:name;
-const unique T.AdvanceOnly___unnamed_2_196a7f56:name;
-const unique T.__unnamed_16_5fed8f23___unnamed_40_a0414182:name;
-const unique T.Thread___unnamed_40_a0414182:name;
-const unique T.AuxiliaryBuffer___unnamed_40_a0414182:name;
-const unique T.__unnamed_12_c6ed93f3___unnamed_40_a0414182:name;
-const unique T.OriginalFileObject___unnamed_40_a0414182:name;
-const unique T.ListEntry___unnamed_40_d90496f4:name;
-const unique T.Wcb___unnamed_40_d90496f4:name;
-const unique T.InitialPrivilegeSet___unnamed_44_a7026dca:name;
-const unique T.PrivilegeSet___unnamed_44_a7026dca:name;
-const unique T.Overlay___unnamed_48_c1da9fa5:name;
-const unique T.Apc___unnamed_48_c1da9fa5:name;
-const unique T.CompletionKey___unnamed_48_c1da9fa5:name;
-const unique T.PowerSequence___unnamed_4_0510b147:name;
-const unique T.Length___unnamed_4_0a569078:name;
-const unique T.Status___unnamed_4_16aff58e:name;
-const unique T.Pointer___unnamed_4_16aff58e:name;
-const unique T.IdType___unnamed_4_40bf8e34:name;
-const unique T.Address___unnamed_4_46b62f69:name;
-const unique T.CreatorBackTraceIndex___unnamed_4_46b62f69:name;
-const unique T.Capabilities___unnamed_4_73d46255:name;
-const unique T.Srb___unnamed_4_765e3037:name;
-const unique T.Type___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_2bb39c56___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_e30779f5___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_9fa0583a___unnamed_4_846adf3f:name;
-const unique T.PowerState___unnamed_4_8dd73d30:name;
-const unique T.Type___unnamed_4_957e0d74:name;
-const unique T.Buttons___unnamed_4_9c11ed91:name;
-const unique T.__unnamed_4_b5247f10___unnamed_4_9c11ed91:name;
-const unique T.IoResourceRequirementList___unnamed_4_a58d40c8:name;
-const unique T.CurrentStackLocation___unnamed_4_a7aa989c:name;
-const unique T.PacketType___unnamed_4_a7aa989c:name;
-const unique T.__unnamed_2_196a7f56___unnamed_4_a7d0864c:name;
-const unique T.ClusterCount___unnamed_4_a7d0864c:name;
-const unique T.DeleteHandle___unnamed_4_a7d0864c:name;
-const unique T.Length___unnamed_4_aa20b426:name;
-const unique T.UserApcRoutine___unnamed_4_ab87ddfd:name;
-const unique T.IssuingProcess___unnamed_4_ab87ddfd:name;
-const unique T.Reserved1___unnamed_4_b016b1e1:name;
-const unique T.TargetSystemState___unnamed_4_b016b1e1:name;
-const unique T.EffectiveSystemState___unnamed_4_b016b1e1:name;
-const unique T.CurrentSystemState___unnamed_4_b016b1e1:name;
-const unique T.IgnoreHibernationPath___unnamed_4_b016b1e1:name;
-const unique T.PseudoTransition___unnamed_4_b016b1e1:name;
-const unique T.Reserved2___unnamed_4_b016b1e1:name;
-const unique T.SystemContext___unnamed_4_b060dea6:name;
-const unique T.SystemPowerStateContext___unnamed_4_b060dea6:name;
-const unique T.__unnamed_4_b016b1e1___unnamed_4_b4f5a780:name;
-const unique T.ContextAsUlong___unnamed_4_b4f5a780:name;
-const unique T.ButtonFlags___unnamed_4_b5247f10:name;
-const unique T.ButtonData___unnamed_4_b5247f10:name;
-const unique T.OwnerCount___unnamed_4_c1e23b02:name;
-const unique T.TableSize___unnamed_4_c1e23b02:name;
-const unique T.__unnamed_4_846adf3f___unnamed_4_c9b2e921:name;
-const unique T.Lock___unnamed_4_c9b2e921:name;
-const unique T.MasterIrp___unnamed_4_fa7b96a7:name;
-const unique T.IrpCount___unnamed_4_fa7b96a7:name;
-const unique T.SystemBuffer___unnamed_4_fa7b96a7:name;
-const unique T.Vpb___unnamed_8_09ad2712:name;
-const unique T.DeviceObject___unnamed_8_09ad2712:name;
-const unique T.Length___unnamed_8_21ac1dba:name;
-const unique T.CompletionFilter___unnamed_8_21ac1dba:name;
-const unique T.Length___unnamed_8_27d3ab76:name;
-const unique T.FsInformationClass___unnamed_8_27d3ab76:name;
-const unique T.Vpb___unnamed_8_4289df81:name;
-const unique T.DeviceObject___unnamed_8_4289df81:name;
-const unique T.Length___unnamed_8_47b72724:name;
-const unique T.FileInformationClass___unnamed_8_47b72724:name;
-const unique T.DeviceTextType___unnamed_8_4b3e3ba3:name;
-const unique T.LocaleId___unnamed_8_4b3e3ba3:name;
-const unique T.__unnamed_4_ab87ddfd___unnamed_8_4f695993:name;
-const unique T.UserApcContext___unnamed_8_4f695993:name;
-const unique T.AllocatedResources___unnamed_8_5cfb6ca4:name;
-const unique T.AllocatedResourcesTranslated___unnamed_8_5cfb6ca4:name;
-const unique T.SecurityInformation___unnamed_8_606438c5:name;
-const unique T.Length___unnamed_8_606438c5:name;
-const unique T.MinimumChannel___unnamed_8_6ad774c0:name;
-const unique T.MaximumChannel___unnamed_8_6ad774c0:name;
-const unique T.Length___unnamed_8_805045cb:name;
-const unique T.FsInformationClass___unnamed_8_805045cb:name;
-const unique T.LowPart___unnamed_8_8684a3e7:name;
-const unique T.HighPart___unnamed_8_8684a3e7:name;
-const unique T.SecurityInformation___unnamed_8_8cc410da:name;
-const unique T.SecurityDescriptor___unnamed_8_8cc410da:name;
-const unique T.InPath___unnamed_8_a47253e0:name;
-const unique T.Reserved___unnamed_8_a47253e0:name;
-const unique T.Type___unnamed_8_a47253e0:name;
-const unique T.AsynchronousParameters___unnamed_8_bbd07f6c:name;
-const unique T.AllocationSize___unnamed_8_bbd07f6c:name;
-const unique T.LowPart___unnamed_8_c9ca8234:name;
-const unique T.HighPart___unnamed_8_c9ca8234:name;
-
-// Type declarations
-
-const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_LIST:name;
-const unique T.A1_LUID_AND_ATTRIBUTES:name;
-const unique T.A256UINT2:name;
-const unique T.A28PFDRIVER_DISPATCH:name;
-const unique T.A2UCHAR:name;
-const unique T.A2UINT2:name;
-const unique T.A32UINT2:name;
-const unique T.A37CHAR:name;
-const unique T.A3UCHAR:name;
-const unique T.A3UINT4:name;
-const unique T.A3_LUID_AND_ATTRIBUTES:name;
-const unique T.A40CHAR:name;
-const unique T.A4PVOID:name;
-const unique T.A4UINT4:name;
-const unique T.A5_DEVICE_POWER_STATE:name;
-const unique T.A65CHAR:name;
-const unique T.A75CHAR:name;
-const unique T.A76CHAR:name;
-const unique T.A7UINT2:name;
-const unique T.A7_DEVICE_POWER_STATE:name;
-const unique T.A80CHAR:name;
-const unique T.A8UCHAR:name;
-const unique T.A9UINT2:name;
-const unique T.BUS_QUERY_ID_TYPE:name;
-const unique T.CHAR:name;
-const unique T.DEVICE_TEXT_TYPE:name;
-const unique T.F0:name;
-const unique T.F1:name;
-const unique T.F10:name;
-const unique T.F11:name;
-const unique T.F12:name;
-const unique T.F13:name;
-const unique T.F14:name;
-const unique T.F15:name;
-const unique T.F16:name;
-const unique T.F17:name;
-const unique T.F18:name;
-const unique T.F19:name;
-const unique T.F2:name;
-const unique T.F20:name;
-const unique T.F21:name;
-const unique T.F22:name;
-const unique T.F23:name;
-const unique T.F24:name;
-const unique T.F25:name;
-const unique T.F26:name;
-const unique T.F27:name;
-const unique T.F28:name;
-const unique T.F29:name;
-const unique T.F3:name;
-const unique T.F30:name;
-const unique T.F31:name;
-const unique T.F32:name;
-const unique T.F33:name;
-const unique T.F34:name;
-const unique T.F35:name;
-const unique T.F36:name;
-const unique T.F37:name;
-const unique T.F38:name;
-const unique T.F4:name;
-const unique T.F5:name;
-const unique T.F6:name;
-const unique T.F7:name;
-const unique T.F8:name;
-const unique T.F9:name;
-const unique T.FDRIVER_ADD_DEVICE:name;
-const unique T.FDRIVER_CANCEL:name;
-const unique T.FDRIVER_CONTROL:name;
-const unique T.FDRIVER_DISPATCH:name;
-const unique T.FDRIVER_INITIALIZE:name;
-const unique T.FDRIVER_STARTIO:name;
-const unique T.FDRIVER_UNLOAD:name;
-const unique T.FFAST_IO_ACQUIRE_FILE:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.FFAST_IO_DETACH_DEVICE:name;
-const unique T.FFAST_IO_DEVICE_CONTROL:name;
-const unique T.FFAST_IO_LOCK:name;
-const unique T.FFAST_IO_MDL_READ:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.FFAST_IO_QUERY_OPEN:name;
-const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.FFAST_IO_READ:name;
-const unique T.FFAST_IO_READ_COMPRESSED:name;
-const unique T.FFAST_IO_RELEASE_FILE:name;
-const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_UNLOCK_ALL:name;
-const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.FFAST_IO_UNLOCK_SINGLE:name;
-const unique T.FFAST_IO_WRITE:name;
-const unique T.FFAST_IO_WRITE_COMPRESSED:name;
-const unique T.FIO_COMPLETION_ROUTINE:name;
-const unique T.FKDEFERRED_ROUTINE:name;
-const unique T.INT2:name;
-const unique T.INT4:name;
-const unique T.INT8:name;
-const unique T.PA2UINT2:name;
-const unique T.PA37CHAR:name;
-const unique T.PA40CHAR:name;
-const unique T.PA4UINT4:name;
-const unique T.PA65CHAR:name;
-const unique T.PA75CHAR:name;
-const unique T.PA76CHAR:name;
-const unique T.PA7UINT2:name;
-const unique T.PA80CHAR:name;
-const unique T.PA9UINT2:name;
-const unique T.PCHAR:name;
-const unique T.PF19:name;
-const unique T.PF21:name;
-const unique T.PF23:name;
-const unique T.PF24:name;
-const unique T.PF25:name;
-const unique T.PF33:name;
-const unique T.PF34:name;
-const unique T.PF35:name;
-const unique T.PF36:name;
-const unique T.PF37:name;
-const unique T.PF38:name;
-const unique T.PFDRIVER_ADD_DEVICE:name;
-const unique T.PFDRIVER_CANCEL:name;
-const unique T.PFDRIVER_CONTROL:name;
-const unique T.PFDRIVER_DISPATCH:name;
-const unique T.PFDRIVER_INITIALIZE:name;
-const unique T.PFDRIVER_STARTIO:name;
-const unique T.PFDRIVER_UNLOAD:name;
-const unique T.PFFAST_IO_ACQUIRE_FILE:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.PFFAST_IO_DETACH_DEVICE:name;
-const unique T.PFFAST_IO_DEVICE_CONTROL:name;
-const unique T.PFFAST_IO_LOCK:name;
-const unique T.PFFAST_IO_MDL_READ:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.PFFAST_IO_QUERY_OPEN:name;
-const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.PFFAST_IO_READ:name;
-const unique T.PFFAST_IO_READ_COMPRESSED:name;
-const unique T.PFFAST_IO_RELEASE_FILE:name;
-const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_UNLOCK_ALL:name;
-const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
-const unique T.PFFAST_IO_WRITE:name;
-const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
-const unique T.PFIO_COMPLETION_ROUTINE:name;
-const unique T.PFKDEFERRED_ROUTINE:name;
-const unique T.PINT4:name;
-const unique T.POWER_ACTION:name;
-const unique T.PPCHAR:name;
-const unique T.PPF24:name;
-const unique T.PPPUINT2:name;
-const unique T.PPP_DEVICE_OBJECT:name;
-const unique T.PPUINT2:name;
-const unique T.PPUINT4:name;
-const unique T.PPVOID:name;
-const unique T.PP_DEVICE_EXTENSION:name;
-const unique T.PP_DEVICE_OBJECT:name;
-const unique T.PP_DRIVER_OBJECT:name;
-const unique T.PP_ERESOURCE:name;
-const unique T.PP_FAST_MUTEX:name;
-const unique T.PP_IO_REMOVE_LOCK:name;
-const unique T.PP_LIST_ENTRY:name;
-const unique T.PP_MDL:name;
-const unique T.PP_UNICODE_STRING:name;
-const unique T.PUCHAR:name;
-const unique T.PUINT2:name;
-const unique T.PUINT4:name;
-const unique T.PVOID:name;
-const unique T.PWMIGUIDREGINFO:name;
-const unique T.P_ACCESS_STATE:name;
-const unique T.P_CM_RESOURCE_LIST:name;
-const unique T.P_COMPRESSED_DATA_INFO:name;
-const unique T.P_DEVICE_CAPABILITIES:name;
-const unique T.P_DEVICE_EXTENSION:name;
-const unique T.P_DEVICE_OBJECT:name;
-const unique T.P_DEVOBJ_EXTENSION:name;
-const unique T.P_DRIVER_EXTENSION:name;
-const unique T.P_DRIVER_OBJECT:name;
-const unique T.P_EPROCESS:name;
-const unique T.P_ERESOURCE:name;
-const unique T.P_ETHREAD:name;
-const unique T.P_FAST_IO_DISPATCH:name;
-const unique T.P_FAST_MUTEX:name;
-const unique T.P_FILE_BASIC_INFORMATION:name;
-const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
-const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.P_FILE_OBJECT:name;
-const unique T.P_FILE_STANDARD_INFORMATION:name;
-const unique T.P_GLOBALS:name;
-const unique T.P_GUID:name;
-const unique T.P_INTERFACE:name;
-const unique T.P_IO_COMPLETION_CONTEXT:name;
-const unique T.P_IO_REMOVE_LOCK:name;
-const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.P_IO_SECURITY_CONTEXT:name;
-const unique T.P_IO_STACK_LOCATION:name;
-const unique T.P_IO_STATUS_BLOCK:name;
-const unique T.P_IO_TIMER:name;
-const unique T.P_IRP:name;
-const unique T.P_KAPC:name;
-const unique T.P_KDPC:name;
-const unique T.P_KEVENT:name;
-const unique T.P_KSEMAPHORE:name;
-const unique T.P_KTHREAD:name;
-const unique T.P_LARGE_INTEGER:name;
-const unique T.P_LIST_ENTRY:name;
-const unique T.P_MDL:name;
-const unique T.P_MOUSE_INPUT_DATA:name;
-const unique T.P_OWNER_ENTRY:name;
-const unique T.P_POOL_TYPE:name;
-const unique T.P_PORT:name;
-const unique T.P_POWER_SEQUENCE:name;
-const unique T.P_SCSI_REQUEST_BLOCK:name;
-const unique T.P_SECTION_OBJECT_POINTERS:name;
-const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.P_UNICODE_STRING:name;
-const unique T.P_VPB:name;
-const unique T.UCHAR:name;
-const unique T.UINT2:name;
-const unique T.UINT4:name;
-const unique T.VOID:name;
-const unique T.WMIENABLEDISABLECONTROL:name;
-const unique T.WMIGUIDREGINFO:name;
-const unique T._ACCESS_STATE:name;
-const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_LIST:name;
-const unique T._CM_RESOURCE_LIST:name;
-const unique T._COMPRESSED_DATA_INFO:name;
-const unique T._DEVICE_CAPABILITIES:name;
-const unique T._DEVICE_EXTENSION:name;
-const unique T._DEVICE_OBJECT:name;
-const unique T._DEVICE_POWER_STATE:name;
-const unique T._DEVICE_RELATION_TYPE:name;
-const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
-const unique T._DEVOBJ_EXTENSION:name;
-const unique T._DISPATCHER_HEADER:name;
-const unique T._DRIVER_EXTENSION:name;
-const unique T._DRIVER_OBJECT:name;
-const unique T._EPROCESS:name;
-const unique T._ERESOURCE:name;
-const unique T._ETHREAD:name;
-const unique T._FAST_IO_DISPATCH:name;
-const unique T._FAST_MUTEX:name;
-const unique T._FILE_BASIC_INFORMATION:name;
-const unique T._FILE_GET_QUOTA_INFORMATION:name;
-const unique T._FILE_INFORMATION_CLASS:name;
-const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T._FILE_OBJECT:name;
-const unique T._FILE_STANDARD_INFORMATION:name;
-const unique T._FSINFOCLASS:name;
-const unique T._GLOBALS:name;
-const unique T._GUID:name;
-const unique T._INITIAL_PRIVILEGE_SET:name;
-const unique T._INTERFACE:name;
-const unique T._INTERFACE_TYPE:name;
-const unique T._IO_ALLOCATION_ACTION:name;
-const unique T._IO_COMPLETION_CONTEXT:name;
-const unique T._IO_REMOVE_LOCK:name;
-const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T._IO_RESOURCE_DESCRIPTOR:name;
-const unique T._IO_RESOURCE_LIST:name;
-const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T._IO_SECURITY_CONTEXT:name;
-const unique T._IO_STACK_LOCATION:name;
-const unique T._IO_STATUS_BLOCK:name;
-const unique T._IO_TIMER:name;
-const unique T._IRP:name;
-const unique T._IRQ_DEVICE_POLICY:name;
-const unique T._IRQ_PRIORITY:name;
-const unique T._KAPC:name;
-const unique T._KDEVICE_QUEUE:name;
-const unique T._KDEVICE_QUEUE_ENTRY:name;
-const unique T._KDPC:name;
-const unique T._KEVENT:name;
-const unique T._KSEMAPHORE:name;
-const unique T._KTHREAD:name;
-const unique T._LARGE_INTEGER:name;
-const unique T._LIST_ENTRY:name;
-const unique T._LUID:name;
-const unique T._LUID_AND_ATTRIBUTES:name;
-const unique T._MDL:name;
-const unique T._MOUSE_ATTRIBUTES:name;
-const unique T._MOUSE_INPUT_DATA:name;
-const unique T._OWNER_ENTRY:name;
-const unique T._POOL_TYPE:name;
-const unique T._PORT:name;
-const unique T._POWER_SEQUENCE:name;
-const unique T._POWER_STATE:name;
-const unique T._POWER_STATE_TYPE:name;
-const unique T._PRIVILEGE_SET:name;
-const unique T._SCSI_REQUEST_BLOCK:name;
-const unique T._SECTION_OBJECT_POINTERS:name;
-const unique T._SECURITY_IMPERSONATION_LEVEL:name;
-const unique T._SECURITY_QUALITY_OF_SERVICE:name;
-const unique T._SECURITY_SUBJECT_CONTEXT:name;
-const unique T._SYSTEM_POWER_STATE:name;
-const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T._UNICODE_STRING:name;
-const unique T._VPB:name;
-const unique T._WAIT_CONTEXT_BLOCK:name;
-const unique T._WMILIB_CONTEXT:name;
-const unique T.__unnamed_12_06b9ee6e:name;
-const unique T.__unnamed_12_0882bd02:name;
-const unique T.__unnamed_12_264d0dab:name;
-const unique T.__unnamed_12_2e80217b:name;
-const unique T.__unnamed_12_5cc7ace2:name;
-const unique T.__unnamed_12_6374506e:name;
-const unique T.__unnamed_12_68a4278e:name;
-const unique T.__unnamed_12_79ed2653:name;
-const unique T.__unnamed_12_7da594c0:name;
-const unique T.__unnamed_12_9873e05d:name;
-const unique T.__unnamed_12_9cc8cebc:name;
-const unique T.__unnamed_12_b98da82e:name;
-const unique T.__unnamed_12_c2880e88:name;
-const unique T.__unnamed_12_c49ab31a:name;
-const unique T.__unnamed_12_c6ed93f3:name;
-const unique T.__unnamed_12_ced61554:name;
-const unique T.__unnamed_12_d9c44df5:name;
-const unique T.__unnamed_12_db3dcbfc:name;
-const unique T.__unnamed_12_fb26b3fc:name;
-const unique T.__unnamed_16_22e4d054:name;
-const unique T.__unnamed_16_39b626ad:name;
-const unique T.__unnamed_16_56c011d7:name;
-const unique T.__unnamed_16_5fed8f23:name;
-const unique T.__unnamed_16_6be9abe0:name;
-const unique T.__unnamed_16_78879a38:name;
-const unique T.__unnamed_16_804a2f24:name;
-const unique T.__unnamed_16_8586693f:name;
-const unique T.__unnamed_16_8831e65f:name;
-const unique T.__unnamed_16_8c2d663a:name;
-const unique T.__unnamed_16_913b9a7a:name;
-const unique T.__unnamed_16_94d1d1c7:name;
-const unique T.__unnamed_16_a2fab4da:name;
-const unique T.__unnamed_16_ae643f17:name;
-const unique T.__unnamed_16_c1b29316:name;
-const unique T.__unnamed_16_cbd53ed4:name;
-const unique T.__unnamed_16_db70db6e:name;
-const unique T.__unnamed_16_ef4b6307:name;
-const unique T.__unnamed_16_fdda1f62:name;
-const unique T.__unnamed_1_1394de4b:name;
-const unique T.__unnamed_1_2bb39c56:name;
-const unique T.__unnamed_1_9fa0583a:name;
-const unique T.__unnamed_1_e30779f5:name;
-const unique T.__unnamed_20_83d468e4:name;
-const unique T.__unnamed_24_035931da:name;
-const unique T.__unnamed_24_38e128db:name;
-const unique T.__unnamed_24_9500ea34:name;
-const unique T.__unnamed_24_9734802c:name;
-const unique T.__unnamed_24_af62813f:name;
-const unique T.__unnamed_24_c0555099:name;
-const unique T.__unnamed_24_d7c4ec3a:name;
-const unique T.__unnamed_2_196a7f56:name;
-const unique T.__unnamed_40_a0414182:name;
-const unique T.__unnamed_40_d90496f4:name;
-const unique T.__unnamed_44_a7026dca:name;
-const unique T.__unnamed_48_c1da9fa5:name;
-const unique T.__unnamed_4_0510b147:name;
-const unique T.__unnamed_4_0a569078:name;
-const unique T.__unnamed_4_16aff58e:name;
-const unique T.__unnamed_4_40bf8e34:name;
-const unique T.__unnamed_4_46b62f69:name;
-const unique T.__unnamed_4_73d46255:name;
-const unique T.__unnamed_4_765e3037:name;
-const unique T.__unnamed_4_846adf3f:name;
-const unique T.__unnamed_4_8dd73d30:name;
-const unique T.__unnamed_4_957e0d74:name;
-const unique T.__unnamed_4_9c11ed91:name;
-const unique T.__unnamed_4_a58d40c8:name;
-const unique T.__unnamed_4_a7aa989c:name;
-const unique T.__unnamed_4_a7d0864c:name;
-const unique T.__unnamed_4_aa20b426:name;
-const unique T.__unnamed_4_ab87ddfd:name;
-const unique T.__unnamed_4_b016b1e1:name;
-const unique T.__unnamed_4_b060dea6:name;
-const unique T.__unnamed_4_b4f5a780:name;
-const unique T.__unnamed_4_b5247f10:name;
-const unique T.__unnamed_4_c1e23b02:name;
-const unique T.__unnamed_4_c9b2e921:name;
-const unique T.__unnamed_4_fa7b96a7:name;
-const unique T.__unnamed_8_09ad2712:name;
-const unique T.__unnamed_8_21ac1dba:name;
-const unique T.__unnamed_8_27d3ab76:name;
-const unique T.__unnamed_8_4289df81:name;
-const unique T.__unnamed_8_47b72724:name;
-const unique T.__unnamed_8_4b3e3ba3:name;
-const unique T.__unnamed_8_4f695993:name;
-const unique T.__unnamed_8_5cfb6ca4:name;
-const unique T.__unnamed_8_606438c5:name;
-const unique T.__unnamed_8_6ad774c0:name;
-const unique T.__unnamed_8_805045cb:name;
-const unique T.__unnamed_8_8684a3e7:name;
-const unique T.__unnamed_8_8cc410da:name;
-const unique T.__unnamed_8_a47253e0:name;
-const unique T.__unnamed_8_bbd07f6c:name;
-const unique T.__unnamed_8_c9ca8234:name;
-
-function Abandoned___unnamed_1_2bb39c56(int) returns (int);
-function Abandoned___unnamed_1_2bb39c56Inv(int) returns (int);
-function _S_Abandoned___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
-function _S_Abandoned___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56Inv(Abandoned___unnamed_1_2bb39c56(x))} Abandoned___unnamed_1_2bb39c56Inv(Abandoned___unnamed_1_2bb39c56(x)) == x);
-axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56Inv(x)} Abandoned___unnamed_1_2bb39c56(Abandoned___unnamed_1_2bb39c56Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_2bb39c56(S)[x]} _S_Abandoned___unnamed_1_2bb39c56(S)[x] <==> S[Abandoned___unnamed_1_2bb39c56Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_2bb39c56Inv(S)[x]} _S_Abandoned___unnamed_1_2bb39c56Inv(S)[x] <==> S[Abandoned___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_2bb39c56(S)} S[x] ==> _S_Abandoned___unnamed_1_2bb39c56(S)[Abandoned___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_Abandoned___unnamed_1_2bb39c56Inv(S)[Abandoned___unnamed_1_2bb39c56Inv(x)]);
-
-axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56(x)} Abandoned___unnamed_1_2bb39c56(x) == x + 0);
-axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56Inv(x)} Abandoned___unnamed_1_2bb39c56Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Abandoned___unnamed_1_2bb39c56Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Abandoned___unnamed_1_2bb39c56Inv(x));
-function Absolute___unnamed_1_2bb39c56(int) returns (int);
-function Absolute___unnamed_1_2bb39c56Inv(int) returns (int);
-function _S_Absolute___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
-function _S_Absolute___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56Inv(Absolute___unnamed_1_2bb39c56(x))} Absolute___unnamed_1_2bb39c56Inv(Absolute___unnamed_1_2bb39c56(x)) == x);
-axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56Inv(x)} Absolute___unnamed_1_2bb39c56(Absolute___unnamed_1_2bb39c56Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_2bb39c56(S)[x]} _S_Absolute___unnamed_1_2bb39c56(S)[x] <==> S[Absolute___unnamed_1_2bb39c56Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_2bb39c56Inv(S)[x]} _S_Absolute___unnamed_1_2bb39c56Inv(S)[x] <==> S[Absolute___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_2bb39c56(S)} S[x] ==> _S_Absolute___unnamed_1_2bb39c56(S)[Absolute___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_Absolute___unnamed_1_2bb39c56Inv(S)[Absolute___unnamed_1_2bb39c56Inv(x)]);
-
-axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56(x)} Absolute___unnamed_1_2bb39c56(x) == x + 0);
-axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56Inv(x)} Absolute___unnamed_1_2bb39c56Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Absolute___unnamed_1_2bb39c56Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Absolute___unnamed_1_2bb39c56Inv(x));
-function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x))} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 16);
-axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 16);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function BaseClassName__GLOBALS(int) returns (int);
-function BaseClassName__GLOBALSInv(int) returns (int);
-function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
-function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 344);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 344);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1) == BaseClassName__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 344)} MINUS_LEFT_PTR(x, 1, 344) == BaseClassName__GLOBALSInv(x));
-function Blink__LIST_ENTRY(int) returns (int);
-function Blink__LIST_ENTRYInv(int) returns (int);
-function _S_Blink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Blink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x))} Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRY(Blink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRY(S)[x]} _S_Blink__LIST_ENTRY(S)[x] <==> S[Blink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRYInv(S)[x]} _S_Blink__LIST_ENTRYInv(S)[x] <==> S[Blink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRY(S)} S[x] ==> _S_Blink__LIST_ENTRY(S)[Blink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRYInv(S)} S[x] ==> _S_Blink__LIST_ENTRYInv(S)[Blink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == x + 4);
-axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRYInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Blink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Blink__LIST_ENTRYInv(x));
-function Blocks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x))} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 56);
-axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 56);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Buffer__UNICODE_STRING(int) returns (int);
-function Buffer__UNICODE_STRINGInv(int) returns (int);
-function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
-function Common__IO_REMOVE_LOCK(int) returns (int);
-function Common__IO_REMOVE_LOCKInv(int) returns (int);
-function _S_Common__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
-function _S_Common__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x))} Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x)) == x);
-axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCK(Common__IO_REMOVE_LOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCK(S)[x]} _S_Common__IO_REMOVE_LOCK(S)[x] <==> S[Common__IO_REMOVE_LOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCKInv(S)[x]} _S_Common__IO_REMOVE_LOCKInv(S)[x] <==> S[Common__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCK(S)} S[x] ==> _S_Common__IO_REMOVE_LOCK(S)[Common__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Common__IO_REMOVE_LOCKInv(S)[Common__IO_REMOVE_LOCKInv(x)]);
-
-axiom (forall x:int :: {Common__IO_REMOVE_LOCK(x)} Common__IO_REMOVE_LOCK(x) == x + 0);
-axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCKInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Common__IO_REMOVE_LOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Common__IO_REMOVE_LOCKInv(x));
-function ConnectOneClassToOnePort__GLOBALS(int) returns (int);
-function ConnectOneClassToOnePort__GLOBALSInv(int) returns (int);
-function _S_ConnectOneClassToOnePort__GLOBALS([int]bool) returns ([int]bool);
-function _S_ConnectOneClassToOnePort__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x))} ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x)) == x);
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALS(ConnectOneClassToOnePort__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALS(S)[x]} _S_ConnectOneClassToOnePort__GLOBALS(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALSInv(S)[x]} _S_ConnectOneClassToOnePort__GLOBALSInv(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALS(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALS(S)[ConnectOneClassToOnePort__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALSInv(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALSInv(S)[ConnectOneClassToOnePort__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALS(x)} ConnectOneClassToOnePort__GLOBALS(x) == x + 56);
-axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALSInv(x) == x - 56);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == ConnectOneClassToOnePort__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == ConnectOneClassToOnePort__GLOBALSInv(x));
-function DataIn__DEVICE_EXTENSION(int) returns (int);
-function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
-function DataOut__DEVICE_EXTENSION(int) returns (int);
-function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
-function Dbg__IO_REMOVE_LOCK(int) returns (int);
-function Dbg__IO_REMOVE_LOCKInv(int) returns (int);
-function _S_Dbg__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
-function _S_Dbg__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x))} Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x)) == x);
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCK(Dbg__IO_REMOVE_LOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCK(S)[x]} _S_Dbg__IO_REMOVE_LOCK(S)[x] <==> S[Dbg__IO_REMOVE_LOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCKInv(S)[x]} _S_Dbg__IO_REMOVE_LOCKInv(S)[x] <==> S[Dbg__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCK(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCK(S)[Dbg__IO_REMOVE_LOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCKInv(S)[Dbg__IO_REMOVE_LOCKInv(x)]);
-
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCK(x)} Dbg__IO_REMOVE_LOCK(x) == x + 24);
-axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCKInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Dbg__IO_REMOVE_LOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Dbg__IO_REMOVE_LOCKInv(x));
-function DebugActive___unnamed_1_9fa0583a(int) returns (int);
-function DebugActive___unnamed_1_9fa0583aInv(int) returns (int);
-function _S_DebugActive___unnamed_1_9fa0583a([int]bool) returns ([int]bool);
-function _S_DebugActive___unnamed_1_9fa0583aInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583aInv(DebugActive___unnamed_1_9fa0583a(x))} DebugActive___unnamed_1_9fa0583aInv(DebugActive___unnamed_1_9fa0583a(x)) == x);
-axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583aInv(x)} DebugActive___unnamed_1_9fa0583a(DebugActive___unnamed_1_9fa0583aInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_9fa0583a(S)[x]} _S_DebugActive___unnamed_1_9fa0583a(S)[x] <==> S[DebugActive___unnamed_1_9fa0583aInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_9fa0583aInv(S)[x]} _S_DebugActive___unnamed_1_9fa0583aInv(S)[x] <==> S[DebugActive___unnamed_1_9fa0583a(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_9fa0583a(S)} S[x] ==> _S_DebugActive___unnamed_1_9fa0583a(S)[DebugActive___unnamed_1_9fa0583a(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_9fa0583aInv(S)} S[x] ==> _S_DebugActive___unnamed_1_9fa0583aInv(S)[DebugActive___unnamed_1_9fa0583aInv(x)]);
-
-axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583a(x)} DebugActive___unnamed_1_9fa0583a(x) == x + 0);
-axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583aInv(x)} DebugActive___unnamed_1_9fa0583aInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DebugActive___unnamed_1_9fa0583aInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DebugActive___unnamed_1_9fa0583aInv(x));
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
-function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
-function DeviceState__DEVICE_EXTENSION(int) returns (int);
-function DeviceState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x))} DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSION(DeviceState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSION(S)[x]} _S_DeviceState__DEVICE_EXTENSION(S)[x] <==> S[DeviceState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_DeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[DeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSION(S)[DeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSIONInv(S)[DeviceState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSION(x)} DeviceState__DEVICE_EXTENSION(x) == x + 168);
-axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSIONInv(x) == x - 168);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1) == DeviceState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 168)} MINUS_LEFT_PTR(x, 1, 168) == DeviceState__DEVICE_EXTENSIONInv(x));
-function DpcActive___unnamed_1_9fa0583a(int) returns (int);
-function DpcActive___unnamed_1_9fa0583aInv(int) returns (int);
-function _S_DpcActive___unnamed_1_9fa0583a([int]bool) returns ([int]bool);
-function _S_DpcActive___unnamed_1_9fa0583aInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583aInv(DpcActive___unnamed_1_9fa0583a(x))} DpcActive___unnamed_1_9fa0583aInv(DpcActive___unnamed_1_9fa0583a(x)) == x);
-axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583aInv(x)} DpcActive___unnamed_1_9fa0583a(DpcActive___unnamed_1_9fa0583aInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_9fa0583a(S)[x]} _S_DpcActive___unnamed_1_9fa0583a(S)[x] <==> S[DpcActive___unnamed_1_9fa0583aInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_9fa0583aInv(S)[x]} _S_DpcActive___unnamed_1_9fa0583aInv(S)[x] <==> S[DpcActive___unnamed_1_9fa0583a(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_9fa0583a(S)} S[x] ==> _S_DpcActive___unnamed_1_9fa0583a(S)[DpcActive___unnamed_1_9fa0583a(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_9fa0583aInv(S)} S[x] ==> _S_DpcActive___unnamed_1_9fa0583aInv(S)[DpcActive___unnamed_1_9fa0583aInv(x)]);
-
-axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583a(x)} DpcActive___unnamed_1_9fa0583a(x) == x + 0);
-axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583aInv(x)} DpcActive___unnamed_1_9fa0583aInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DpcActive___unnamed_1_9fa0583aInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DpcActive___unnamed_1_9fa0583aInv(x));
-function Enabled__DEVICE_EXTENSION(int) returns (int);
-function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 264);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 264);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1) == Enabled__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 264)} MINUS_LEFT_PTR(x, 1, 264) == Enabled__DEVICE_EXTENSIONInv(x));
-function ExecuteWmiMethod__WMILIB_CONTEXT(int) returns (int);
-function ExecuteWmiMethod__WMILIB_CONTEXTInv(int) returns (int);
-function _S_ExecuteWmiMethod__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_ExecuteWmiMethod__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x))} ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXT(ExecuteWmiMethod__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXT(x)} ExecuteWmiMethod__WMILIB_CONTEXT(x) == x + 24);
-axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXTInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
-function ExtraWaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
-function ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_ExtraWaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x))} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSION(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(x) == x + 244);
-axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 244);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 244, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 244, 1) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 244)} MINUS_LEFT_PTR(x, 1, 244) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
-function File__DEVICE_EXTENSION(int) returns (int);
-function File__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 260);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 260);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == File__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == File__DEVICE_EXTENSIONInv(x));
-function Flags__DEVICE_OBJECT(int) returns (int);
-function Flags__DEVICE_OBJECTInv(int) returns (int);
-function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
-function Flink__LIST_ENTRY(int) returns (int);
-function Flink__LIST_ENTRYInv(int) returns (int);
-function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
-function GrandMaster__GLOBALS(int) returns (int);
-function GrandMaster__GLOBALSInv(int) returns (int);
-function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
-function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
-function GuidCount__WMILIB_CONTEXT(int) returns (int);
-function GuidCount__WMILIB_CONTEXTInv(int) returns (int);
-function _S_GuidCount__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_GuidCount__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x))} GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXT(GuidCount__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXT(S)[x]} _S_GuidCount__WMILIB_CONTEXT(S)[x] <==> S[GuidCount__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXTInv(S)[x]} _S_GuidCount__WMILIB_CONTEXTInv(S)[x] <==> S[GuidCount__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXT(S)[GuidCount__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXTInv(S)[GuidCount__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXT(x)} GuidCount__WMILIB_CONTEXT(x) == x + 0);
-axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == GuidCount__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == GuidCount__WMILIB_CONTEXTInv(x));
-function GuidList__WMILIB_CONTEXT(int) returns (int);
-function GuidList__WMILIB_CONTEXTInv(int) returns (int);
-function _S_GuidList__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_GuidList__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x))} GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXT(GuidList__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXT(S)[x]} _S_GuidList__WMILIB_CONTEXT(S)[x] <==> S[GuidList__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXTInv(S)[x]} _S_GuidList__WMILIB_CONTEXTInv(S)[x] <==> S[GuidList__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXT(S)[GuidList__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXTInv(S)[GuidList__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXT(x)} GuidList__WMILIB_CONTEXT(x) == x + 4);
-axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXTInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GuidList__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GuidList__WMILIB_CONTEXTInv(x));
-function Hand___unnamed_1_e30779f5(int) returns (int);
-function Hand___unnamed_1_e30779f5Inv(int) returns (int);
-function _S_Hand___unnamed_1_e30779f5([int]bool) returns ([int]bool);
-function _S_Hand___unnamed_1_e30779f5Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Hand___unnamed_1_e30779f5Inv(Hand___unnamed_1_e30779f5(x))} Hand___unnamed_1_e30779f5Inv(Hand___unnamed_1_e30779f5(x)) == x);
-axiom (forall x:int :: {Hand___unnamed_1_e30779f5Inv(x)} Hand___unnamed_1_e30779f5(Hand___unnamed_1_e30779f5Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_e30779f5(S)[x]} _S_Hand___unnamed_1_e30779f5(S)[x] <==> S[Hand___unnamed_1_e30779f5Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_e30779f5Inv(S)[x]} _S_Hand___unnamed_1_e30779f5Inv(S)[x] <==> S[Hand___unnamed_1_e30779f5(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_e30779f5(S)} S[x] ==> _S_Hand___unnamed_1_e30779f5(S)[Hand___unnamed_1_e30779f5(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_e30779f5Inv(S)} S[x] ==> _S_Hand___unnamed_1_e30779f5Inv(S)[Hand___unnamed_1_e30779f5Inv(x)]);
-
-axiom (forall x:int :: {Hand___unnamed_1_e30779f5(x)} Hand___unnamed_1_e30779f5(x) == x + 0);
-axiom (forall x:int :: {Hand___unnamed_1_e30779f5Inv(x)} Hand___unnamed_1_e30779f5Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Hand___unnamed_1_e30779f5Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Hand___unnamed_1_e30779f5Inv(x));
-function Header__KEVENT(int) returns (int);
-function Header__KEVENTInv(int) returns (int);
-function _S_Header__KEVENT([int]bool) returns ([int]bool);
-function _S_Header__KEVENTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Header__KEVENTInv(Header__KEVENT(x))} Header__KEVENTInv(Header__KEVENT(x)) == x);
-axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENT(Header__KEVENTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENT(S)[x]} _S_Header__KEVENT(S)[x] <==> S[Header__KEVENTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENTInv(S)[x]} _S_Header__KEVENTInv(S)[x] <==> S[Header__KEVENT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENT(S)} S[x] ==> _S_Header__KEVENT(S)[Header__KEVENT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENTInv(S)} S[x] ==> _S_Header__KEVENTInv(S)[Header__KEVENTInv(x)]);
-
-axiom (forall x:int :: {Header__KEVENT(x)} Header__KEVENT(x) == x + 0);
-axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Header__KEVENTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Header__KEVENTInv(x));
-function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x))} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 4);
-axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function InputCount__DEVICE_EXTENSION(int) returns (int);
-function InputCount__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x))} InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSION(InputCount__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSION(S)[x]} _S_InputCount__DEVICE_EXTENSION(S)[x] <==> S[InputCount__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSIONInv(S)[x]} _S_InputCount__DEVICE_EXTENSIONInv(S)[x] <==> S[InputCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSION(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSION(S)[InputCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSIONInv(S)[InputCount__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSION(x)} InputCount__DEVICE_EXTENSION(x) == x + 116);
-axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSIONInv(x) == x - 116);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1) == InputCount__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 116)} MINUS_LEFT_PTR(x, 1, 116) == InputCount__DEVICE_EXTENSIONInv(x));
-function InputDataQueueLength__MOUSE_ATTRIBUTES(int) returns (int);
-function InputDataQueueLength__MOUSE_ATTRIBUTESInv(int) returns (int);
-function _S_InputDataQueueLength__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTESInv(InputDataQueueLength__MOUSE_ATTRIBUTES(x))} InputDataQueueLength__MOUSE_ATTRIBUTESInv(InputDataQueueLength__MOUSE_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)} InputDataQueueLength__MOUSE_ATTRIBUTES(InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)[x]} _S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)[x] <==> S[InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)[x]} _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)[x] <==> S[InputDataQueueLength__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)[InputDataQueueLength__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)[InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTES(x)} InputDataQueueLength__MOUSE_ATTRIBUTES(x) == x + 8);
-axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)} InputDataQueueLength__MOUSE_ATTRIBUTESInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == InputDataQueueLength__MOUSE_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == InputDataQueueLength__MOUSE_ATTRIBUTESInv(x));
-function InputData__DEVICE_EXTENSION(int) returns (int);
-function InputData__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
-function Inserted___unnamed_1_9fa0583a(int) returns (int);
-function Inserted___unnamed_1_9fa0583aInv(int) returns (int);
-function _S_Inserted___unnamed_1_9fa0583a([int]bool) returns ([int]bool);
-function _S_Inserted___unnamed_1_9fa0583aInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Inserted___unnamed_1_9fa0583aInv(Inserted___unnamed_1_9fa0583a(x))} Inserted___unnamed_1_9fa0583aInv(Inserted___unnamed_1_9fa0583a(x)) == x);
-axiom (forall x:int :: {Inserted___unnamed_1_9fa0583aInv(x)} Inserted___unnamed_1_9fa0583a(Inserted___unnamed_1_9fa0583aInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_9fa0583a(S)[x]} _S_Inserted___unnamed_1_9fa0583a(S)[x] <==> S[Inserted___unnamed_1_9fa0583aInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_9fa0583aInv(S)[x]} _S_Inserted___unnamed_1_9fa0583aInv(S)[x] <==> S[Inserted___unnamed_1_9fa0583a(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_9fa0583a(S)} S[x] ==> _S_Inserted___unnamed_1_9fa0583a(S)[Inserted___unnamed_1_9fa0583a(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_9fa0583aInv(S)} S[x] ==> _S_Inserted___unnamed_1_9fa0583aInv(S)[Inserted___unnamed_1_9fa0583aInv(x)]);
-
-axiom (forall x:int :: {Inserted___unnamed_1_9fa0583a(x)} Inserted___unnamed_1_9fa0583a(x) == x + 0);
-axiom (forall x:int :: {Inserted___unnamed_1_9fa0583aInv(x)} Inserted___unnamed_1_9fa0583aInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Inserted___unnamed_1_9fa0583aInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Inserted___unnamed_1_9fa0583aInv(x));
-function IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x))} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 4);
-axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function LegacyDeviceList__GLOBALS(int) returns (int);
-function LegacyDeviceList__GLOBALSInv(int) returns (int);
-function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
-function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 864);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 864);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1) == LegacyDeviceList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 864)} MINUS_LEFT_PTR(x, 1, 864) == LegacyDeviceList__GLOBALSInv(x));
-function Length__UNICODE_STRING(int) returns (int);
-function Length__UNICODE_STRINGInv(int) returns (int);
-function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
-function Link__DEVICE_EXTENSION(int) returns (int);
-function Link__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 252);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 252);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == Link__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == Link__DEVICE_EXTENSIONInv(x));
-function LockList__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x))} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 20);
-axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 20);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Lock___unnamed_4_c9b2e921(int) returns (int);
-function Lock___unnamed_4_c9b2e921Inv(int) returns (int);
-function _S_Lock___unnamed_4_c9b2e921([int]bool) returns ([int]bool);
-function _S_Lock___unnamed_4_c9b2e921Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Lock___unnamed_4_c9b2e921Inv(Lock___unnamed_4_c9b2e921(x))} Lock___unnamed_4_c9b2e921Inv(Lock___unnamed_4_c9b2e921(x)) == x);
-axiom (forall x:int :: {Lock___unnamed_4_c9b2e921Inv(x)} Lock___unnamed_4_c9b2e921(Lock___unnamed_4_c9b2e921Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_c9b2e921(S)[x]} _S_Lock___unnamed_4_c9b2e921(S)[x] <==> S[Lock___unnamed_4_c9b2e921Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_c9b2e921Inv(S)[x]} _S_Lock___unnamed_4_c9b2e921Inv(S)[x] <==> S[Lock___unnamed_4_c9b2e921(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_c9b2e921(S)} S[x] ==> _S_Lock___unnamed_4_c9b2e921(S)[Lock___unnamed_4_c9b2e921(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_c9b2e921Inv(S)} S[x] ==> _S_Lock___unnamed_4_c9b2e921Inv(S)[Lock___unnamed_4_c9b2e921Inv(x)]);
-
-axiom (forall x:int :: {Lock___unnamed_4_c9b2e921(x)} Lock___unnamed_4_c9b2e921(x) == x + 0);
-axiom (forall x:int :: {Lock___unnamed_4_c9b2e921Inv(x)} Lock___unnamed_4_c9b2e921Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Lock___unnamed_4_c9b2e921Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Lock___unnamed_4_c9b2e921Inv(x));
-function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x))} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 32);
-axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 32);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 32)} MINUS_LEFT_PTR(x, 1, 32) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x))} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 8);
-axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function MaximumLength__UNICODE_STRING(int) returns (int);
-function MaximumLength__UNICODE_STRINGInv(int) returns (int);
-function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
-function MinDeviceWakeState__DEVICE_EXTENSION(int) returns (int);
-function MinDeviceWakeState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_MinDeviceWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_MinDeviceWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x))} MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSION(MinDeviceWakeState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSION(x)} MinDeviceWakeState__DEVICE_EXTENSION(x) == x + 232);
-axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSIONInv(x) == x - 232);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 232)} MINUS_LEFT_PTR(x, 1, 232) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
-function MinSystemWakeState__DEVICE_EXTENSION(int) returns (int);
-function MinSystemWakeState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_MinSystemWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_MinSystemWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x))} MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSION(MinSystemWakeState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSION(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSION(S)[MinSystemWakeState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSION(x)} MinSystemWakeState__DEVICE_EXTENSION(x) == x + 236);
-axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSIONInv(x) == x - 236);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 236, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 236, 1) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 236)} MINUS_LEFT_PTR(x, 1, 236) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
-function MouseAttributes__DEVICE_EXTENSION(int) returns (int);
-function MouseAttributes__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_MouseAttributes__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_MouseAttributes__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSIONInv(MouseAttributes__DEVICE_EXTENSION(x))} MouseAttributes__DEVICE_EXTENSIONInv(MouseAttributes__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSIONInv(x)} MouseAttributes__DEVICE_EXTENSION(MouseAttributes__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MouseAttributes__DEVICE_EXTENSION(S)[x]} _S_MouseAttributes__DEVICE_EXTENSION(S)[x] <==> S[MouseAttributes__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MouseAttributes__DEVICE_EXTENSIONInv(S)[x]} _S_MouseAttributes__DEVICE_EXTENSIONInv(S)[x] <==> S[MouseAttributes__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseAttributes__DEVICE_EXTENSION(S)} S[x] ==> _S_MouseAttributes__DEVICE_EXTENSION(S)[MouseAttributes__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseAttributes__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MouseAttributes__DEVICE_EXTENSIONInv(S)[MouseAttributes__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSION(x)} MouseAttributes__DEVICE_EXTENSION(x) == x + 140);
-axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSIONInv(x)} MouseAttributes__DEVICE_EXTENSIONInv(x) == x - 140);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1) == MouseAttributes__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 140)} MINUS_LEFT_PTR(x, 1, 140) == MouseAttributes__DEVICE_EXTENSIONInv(x));
-function MouseIdentifier__MOUSE_ATTRIBUTES(int) returns (int);
-function MouseIdentifier__MOUSE_ATTRIBUTESInv(int) returns (int);
-function _S_MouseIdentifier__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_MouseIdentifier__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTESInv(MouseIdentifier__MOUSE_ATTRIBUTES(x))} MouseIdentifier__MOUSE_ATTRIBUTESInv(MouseIdentifier__MOUSE_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTESInv(x)} MouseIdentifier__MOUSE_ATTRIBUTES(MouseIdentifier__MOUSE_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MouseIdentifier__MOUSE_ATTRIBUTES(S)[x]} _S_MouseIdentifier__MOUSE_ATTRIBUTES(S)[x] <==> S[MouseIdentifier__MOUSE_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)[x]} _S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)[x] <==> S[MouseIdentifier__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseIdentifier__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_MouseIdentifier__MOUSE_ATTRIBUTES(S)[MouseIdentifier__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)[MouseIdentifier__MOUSE_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTES(x)} MouseIdentifier__MOUSE_ATTRIBUTES(x) == x + 0);
-axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTESInv(x)} MouseIdentifier__MOUSE_ATTRIBUTESInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == MouseIdentifier__MOUSE_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == MouseIdentifier__MOUSE_ATTRIBUTESInv(x));
-function Mutex__GLOBALS(int) returns (int);
-function Mutex__GLOBALSInv(int) returns (int);
-function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
-function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
-function NpxIrql___unnamed_1_2bb39c56(int) returns (int);
-function NpxIrql___unnamed_1_2bb39c56Inv(int) returns (int);
-function _S_NpxIrql___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
-function _S_NpxIrql___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56Inv(NpxIrql___unnamed_1_2bb39c56(x))} NpxIrql___unnamed_1_2bb39c56Inv(NpxIrql___unnamed_1_2bb39c56(x)) == x);
-axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56Inv(x)} NpxIrql___unnamed_1_2bb39c56(NpxIrql___unnamed_1_2bb39c56Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_2bb39c56(S)[x]} _S_NpxIrql___unnamed_1_2bb39c56(S)[x] <==> S[NpxIrql___unnamed_1_2bb39c56Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_2bb39c56Inv(S)[x]} _S_NpxIrql___unnamed_1_2bb39c56Inv(S)[x] <==> S[NpxIrql___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_2bb39c56(S)} S[x] ==> _S_NpxIrql___unnamed_1_2bb39c56(S)[NpxIrql___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_NpxIrql___unnamed_1_2bb39c56Inv(S)[NpxIrql___unnamed_1_2bb39c56Inv(x)]);
-
-axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56(x)} NpxIrql___unnamed_1_2bb39c56(x) == x + 0);
-axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56Inv(x)} NpxIrql___unnamed_1_2bb39c56Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == NpxIrql___unnamed_1_2bb39c56Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == NpxIrql___unnamed_1_2bb39c56Inv(x));
-function NumberOfButtons__MOUSE_ATTRIBUTES(int) returns (int);
-function NumberOfButtons__MOUSE_ATTRIBUTESInv(int) returns (int);
-function _S_NumberOfButtons__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_NumberOfButtons__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTESInv(NumberOfButtons__MOUSE_ATTRIBUTES(x))} NumberOfButtons__MOUSE_ATTRIBUTESInv(NumberOfButtons__MOUSE_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTESInv(x)} NumberOfButtons__MOUSE_ATTRIBUTES(NumberOfButtons__MOUSE_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfButtons__MOUSE_ATTRIBUTES(S)[x]} _S_NumberOfButtons__MOUSE_ATTRIBUTES(S)[x] <==> S[NumberOfButtons__MOUSE_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)[x]} _S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)[x] <==> S[NumberOfButtons__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfButtons__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_NumberOfButtons__MOUSE_ATTRIBUTES(S)[NumberOfButtons__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)[NumberOfButtons__MOUSE_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTES(x)} NumberOfButtons__MOUSE_ATTRIBUTES(x) == x + 2);
-axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTESInv(x)} NumberOfButtons__MOUSE_ATTRIBUTESInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == NumberOfButtons__MOUSE_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == NumberOfButtons__MOUSE_ATTRIBUTESInv(x));
-function OkayToLogOverflow__DEVICE_EXTENSION(int) returns (int);
-function OkayToLogOverflow__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_OkayToLogOverflow__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_OkayToLogOverflow__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x))} OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSION(OkayToLogOverflow__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSION(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSION(x)} OkayToLogOverflow__DEVICE_EXTENSION(x) == x + 106);
-axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSIONInv(x) == x - 106);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 106)} MINUS_LEFT_PTR(x, 1, 106) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
-function PDO__DEVICE_EXTENSION(int) returns (int);
-function PDO__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PDO__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PDO__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x))} PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSION(PDO__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSION(S)[x]} _S_PDO__DEVICE_EXTENSION(S)[x] <==> S[PDO__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSIONInv(S)[x]} _S_PDO__DEVICE_EXTENSIONInv(S)[x] <==> S[PDO__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSION(S)} S[x] ==> _S_PDO__DEVICE_EXTENSION(S)[PDO__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PDO__DEVICE_EXTENSIONInv(S)[PDO__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PDO__DEVICE_EXTENSION(x)} PDO__DEVICE_EXTENSION(x) == x + 12);
-axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSIONInv(x) == x - 12);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == PDO__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == PDO__DEVICE_EXTENSIONInv(x));
-function PnP__DEVICE_EXTENSION(int) returns (int);
-function PnP__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
-function QueryWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
-function QueryWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
-function _S_QueryWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_QueryWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x))} QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXT(QueryWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXT(x)} QueryWmiDataBlock__WMILIB_CONTEXT(x) == x + 12);
-axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 12);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
-function QueryWmiRegInfo__WMILIB_CONTEXT(int) returns (int);
-function QueryWmiRegInfo__WMILIB_CONTEXTInv(int) returns (int);
-function _S_QueryWmiRegInfo__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_QueryWmiRegInfo__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x))} QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXT(QueryWmiRegInfo__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXT(x)} QueryWmiRegInfo__WMILIB_CONTEXT(x) == x + 8);
-axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXTInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
-function ReadQueue__DEVICE_EXTENSION(int) returns (int);
-function ReadQueue__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_ReadQueue__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_ReadQueue__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x))} ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSION(ReadQueue__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSION(S)[x]} _S_ReadQueue__DEVICE_EXTENSION(S)[x] <==> S[ReadQueue__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSIONInv(S)[x]} _S_ReadQueue__DEVICE_EXTENSIONInv(S)[x] <==> S[ReadQueue__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSION(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSION(S)[ReadQueue__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSIONInv(S)[ReadQueue__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSION(x)} ReadQueue__DEVICE_EXTENSION(x) == x + 156);
-axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSIONInv(x) == x - 156);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 156, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 156, 1) == ReadQueue__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 156)} MINUS_LEFT_PTR(x, 1, 156) == ReadQueue__DEVICE_EXTENSIONInv(x));
-function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x))} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 8);
-axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function RemoveLock__DEVICE_EXTENSION(int) returns (int);
-function RemoveLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_RemoveLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_RemoveLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x))} RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSION(RemoveLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSION(S)[x]} _S_RemoveLock__DEVICE_EXTENSION(S)[x] <==> S[RemoveLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSIONInv(S)[x]} _S_RemoveLock__DEVICE_EXTENSIONInv(S)[x] <==> S[RemoveLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSION(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSION(S)[RemoveLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSIONInv(S)[RemoveLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSION(x)} RemoveLock__DEVICE_EXTENSION(x) == x + 16);
-axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSIONInv(x) == x - 16);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == RemoveLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == RemoveLock__DEVICE_EXTENSIONInv(x));
-function Removed__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 0);
-axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 36);
-axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 36);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 36)} MINUS_LEFT_PTR(x, 1, 36) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 52);
-axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 52);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 52)} MINUS_LEFT_PTR(x, 1, 52) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
-function Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
-function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
-function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 1);
-axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 1);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
-function SampleRate__MOUSE_ATTRIBUTES(int) returns (int);
-function SampleRate__MOUSE_ATTRIBUTESInv(int) returns (int);
-function _S_SampleRate__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
-function _S_SampleRate__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTESInv(SampleRate__MOUSE_ATTRIBUTES(x))} SampleRate__MOUSE_ATTRIBUTESInv(SampleRate__MOUSE_ATTRIBUTES(x)) == x);
-axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTESInv(x)} SampleRate__MOUSE_ATTRIBUTES(SampleRate__MOUSE_ATTRIBUTESInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SampleRate__MOUSE_ATTRIBUTES(S)[x]} _S_SampleRate__MOUSE_ATTRIBUTES(S)[x] <==> S[SampleRate__MOUSE_ATTRIBUTESInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SampleRate__MOUSE_ATTRIBUTESInv(S)[x]} _S_SampleRate__MOUSE_ATTRIBUTESInv(S)[x] <==> S[SampleRate__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SampleRate__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_SampleRate__MOUSE_ATTRIBUTES(S)[SampleRate__MOUSE_ATTRIBUTES(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SampleRate__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_SampleRate__MOUSE_ATTRIBUTESInv(S)[SampleRate__MOUSE_ATTRIBUTESInv(x)]);
-
-axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTES(x)} SampleRate__MOUSE_ATTRIBUTES(x) == x + 4);
-axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTESInv(x)} SampleRate__MOUSE_ATTRIBUTESInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == SampleRate__MOUSE_ATTRIBUTESInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == SampleRate__MOUSE_ATTRIBUTESInv(x));
-function Self__DEVICE_EXTENSION(int) returns (int);
-function Self__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
-function SequenceNumber__DEVICE_EXTENSION(int) returns (int);
-function SequenceNumber__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SequenceNumber__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SequenceNumber__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x))} SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSION(SequenceNumber__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSION(S)[x]} _S_SequenceNumber__DEVICE_EXTENSION(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x]} _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSION(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSION(S)[SequenceNumber__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSION(x)} SequenceNumber__DEVICE_EXTENSION(x) == x + 164);
-axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSIONInv(x) == x - 164);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 164, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 164, 1) == SequenceNumber__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 164)} MINUS_LEFT_PTR(x, 1, 164) == SequenceNumber__DEVICE_EXTENSIONInv(x));
-function SetWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
-function SetWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
-function _S_SetWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_SetWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x))} SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXT(SetWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXT(x)} SetWmiDataBlock__WMILIB_CONTEXT(x) == x + 16);
-axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 16);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
-function SetWmiDataItem__WMILIB_CONTEXT(int) returns (int);
-function SetWmiDataItem__WMILIB_CONTEXTInv(int) returns (int);
-function _S_SetWmiDataItem__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_SetWmiDataItem__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x))} SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXT(SetWmiDataItem__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXT(S)[SetWmiDataItem__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXT(x)} SetWmiDataItem__WMILIB_CONTEXT(x) == x + 20);
-axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXTInv(x) == x - 20);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
-function SignalState__DISPATCHER_HEADER(int) returns (int);
-function SignalState__DISPATCHER_HEADERInv(int) returns (int);
-function _S_SignalState__DISPATCHER_HEADER([int]bool) returns ([int]bool);
-function _S_SignalState__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x))} SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x)) == x);
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADER(SignalState__DISPATCHER_HEADERInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADER(S)[x]} _S_SignalState__DISPATCHER_HEADER(S)[x] <==> S[SignalState__DISPATCHER_HEADERInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADERInv(S)[x]} _S_SignalState__DISPATCHER_HEADERInv(S)[x] <==> S[SignalState__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADER(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADER(S)[SignalState__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADERInv(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADERInv(S)[SignalState__DISPATCHER_HEADERInv(x)]);
-
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADER(x)} SignalState__DISPATCHER_HEADER(x) == x + 4);
-axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADERInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == SignalState__DISPATCHER_HEADERInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == SignalState__DISPATCHER_HEADERInv(x));
-function Signalling___unnamed_1_2bb39c56(int) returns (int);
-function Signalling___unnamed_1_2bb39c56Inv(int) returns (int);
-function _S_Signalling___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
-function _S_Signalling___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56Inv(Signalling___unnamed_1_2bb39c56(x))} Signalling___unnamed_1_2bb39c56Inv(Signalling___unnamed_1_2bb39c56(x)) == x);
-axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56Inv(x)} Signalling___unnamed_1_2bb39c56(Signalling___unnamed_1_2bb39c56Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_2bb39c56(S)[x]} _S_Signalling___unnamed_1_2bb39c56(S)[x] <==> S[Signalling___unnamed_1_2bb39c56Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_2bb39c56Inv(S)[x]} _S_Signalling___unnamed_1_2bb39c56Inv(S)[x] <==> S[Signalling___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_2bb39c56(S)} S[x] ==> _S_Signalling___unnamed_1_2bb39c56(S)[Signalling___unnamed_1_2bb39c56(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_Signalling___unnamed_1_2bb39c56Inv(S)[Signalling___unnamed_1_2bb39c56Inv(x)]);
-
-axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56(x)} Signalling___unnamed_1_2bb39c56(x) == x + 0);
-axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56Inv(x)} Signalling___unnamed_1_2bb39c56Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signalling___unnamed_1_2bb39c56Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signalling___unnamed_1_2bb39c56Inv(x));
-function Signature__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x))} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 0);
-axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Size___unnamed_1_e30779f5(int) returns (int);
-function Size___unnamed_1_e30779f5Inv(int) returns (int);
-function _S_Size___unnamed_1_e30779f5([int]bool) returns ([int]bool);
-function _S_Size___unnamed_1_e30779f5Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Size___unnamed_1_e30779f5Inv(Size___unnamed_1_e30779f5(x))} Size___unnamed_1_e30779f5Inv(Size___unnamed_1_e30779f5(x)) == x);
-axiom (forall x:int :: {Size___unnamed_1_e30779f5Inv(x)} Size___unnamed_1_e30779f5(Size___unnamed_1_e30779f5Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_e30779f5(S)[x]} _S_Size___unnamed_1_e30779f5(S)[x] <==> S[Size___unnamed_1_e30779f5Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_e30779f5Inv(S)[x]} _S_Size___unnamed_1_e30779f5Inv(S)[x] <==> S[Size___unnamed_1_e30779f5(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_e30779f5(S)} S[x] ==> _S_Size___unnamed_1_e30779f5(S)[Size___unnamed_1_e30779f5(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_e30779f5Inv(S)} S[x] ==> _S_Size___unnamed_1_e30779f5Inv(S)[Size___unnamed_1_e30779f5Inv(x)]);
-
-axiom (forall x:int :: {Size___unnamed_1_e30779f5(x)} Size___unnamed_1_e30779f5(x) == x + 0);
-axiom (forall x:int :: {Size___unnamed_1_e30779f5Inv(x)} Size___unnamed_1_e30779f5Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Size___unnamed_1_e30779f5Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Size___unnamed_1_e30779f5Inv(x));
-function SpinLock__DEVICE_EXTENSION(int) returns (int);
-function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 152);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 152);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 152)} MINUS_LEFT_PTR(x, 1, 152) == SpinLock__DEVICE_EXTENSIONInv(x));
-function Spin__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
-function Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
-function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
-function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x))} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
-
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 28);
-axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
-function Started__DEVICE_EXTENSION(int) returns (int);
-function Started__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
-function SurpriseRemoved__DEVICE_EXTENSION(int) returns (int);
-function SurpriseRemoved__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SurpriseRemoved__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SurpriseRemoved__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x))} SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSION(SurpriseRemoved__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSION(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSION(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSION(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSION(S)[SurpriseRemoved__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSION(x)} SurpriseRemoved__DEVICE_EXTENSION(x) == x + 266);
-axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSIONInv(x) == x - 266);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 266, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 266, 1) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 266)} MINUS_LEFT_PTR(x, 1, 266) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
-function SymbolicLinkName__DEVICE_EXTENSION(int) returns (int);
-function SymbolicLinkName__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SymbolicLinkName__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SymbolicLinkName__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x))} SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSION(SymbolicLinkName__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSION(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSION(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSION(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSION(S)[SymbolicLinkName__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSION(x)} SymbolicLinkName__DEVICE_EXTENSION(x) == x + 120);
-axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSIONInv(x) == x - 120);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 120)} MINUS_LEFT_PTR(x, 1, 120) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
-function SystemState__DEVICE_EXTENSION(int) returns (int);
-function SystemState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SystemState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SystemState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x))} SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSION(SystemState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSION(S)[x]} _S_SystemState__DEVICE_EXTENSION(S)[x] <==> S[SystemState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSION(S)[SystemState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSIONInv(S)[SystemState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSION(x)} SystemState__DEVICE_EXTENSION(x) == x + 172);
-axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSIONInv(x) == x - 172);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1) == SystemState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 172)} MINUS_LEFT_PTR(x, 1, 172) == SystemState__DEVICE_EXTENSIONInv(x));
-function SystemToDeviceState__DEVICE_EXTENSION(int) returns (int);
-function SystemToDeviceState__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SystemToDeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SystemToDeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x))} SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSION(SystemToDeviceState__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSION(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSION(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSION(S)[SystemToDeviceState__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSION(x)} SystemToDeviceState__DEVICE_EXTENSION(x) == x + 212);
-axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSIONInv(x) == x - 212);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 212, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 212, 1) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 212)} MINUS_LEFT_PTR(x, 1, 212) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
-function TargetNotifyHandle__DEVICE_EXTENSION(int) returns (int);
-function TargetNotifyHandle__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TargetNotifyHandle__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TargetNotifyHandle__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x))} TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSION(TargetNotifyHandle__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSION(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSION(x)} TargetNotifyHandle__DEVICE_EXTENSION(x) == x + 248);
-axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSIONInv(x) == x - 248);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 248, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 248, 1) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 248)} MINUS_LEFT_PTR(x, 1, 248) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
-function TopPort__DEVICE_EXTENSION(int) returns (int);
-function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
-function TrueClassDevice__DEVICE_EXTENSION(int) returns (int);
-function TrueClassDevice__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TrueClassDevice__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TrueClassDevice__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x))} TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSION(TrueClassDevice__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSION(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSION(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSION(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSION(S)[TrueClassDevice__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSION(x)} TrueClassDevice__DEVICE_EXTENSION(x) == x + 4);
-axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSIONInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
-function TrustedSubsystemCount__DEVICE_EXTENSION(int) returns (int);
-function TrustedSubsystemCount__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TrustedSubsystemCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x))} TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSION(TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSION(x)} TrustedSubsystemCount__DEVICE_EXTENSION(x) == x + 112);
-axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSIONInv(x) == x - 112);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 112)} MINUS_LEFT_PTR(x, 1, 112) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
-function Type___unnamed_4_846adf3f(int) returns (int);
-function Type___unnamed_4_846adf3fInv(int) returns (int);
-function _S_Type___unnamed_4_846adf3f([int]bool) returns ([int]bool);
-function _S_Type___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Type___unnamed_4_846adf3fInv(Type___unnamed_4_846adf3f(x))} Type___unnamed_4_846adf3fInv(Type___unnamed_4_846adf3f(x)) == x);
-axiom (forall x:int :: {Type___unnamed_4_846adf3fInv(x)} Type___unnamed_4_846adf3f(Type___unnamed_4_846adf3fInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_846adf3f(S)[x]} _S_Type___unnamed_4_846adf3f(S)[x] <==> S[Type___unnamed_4_846adf3fInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_846adf3fInv(S)[x]} _S_Type___unnamed_4_846adf3fInv(S)[x] <==> S[Type___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_846adf3f(S)} S[x] ==> _S_Type___unnamed_4_846adf3f(S)[Type___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_846adf3fInv(S)} S[x] ==> _S_Type___unnamed_4_846adf3fInv(S)[Type___unnamed_4_846adf3fInv(x)]);
-
-axiom (forall x:int :: {Type___unnamed_4_846adf3f(x)} Type___unnamed_4_846adf3f(x) == x + 0);
-axiom (forall x:int :: {Type___unnamed_4_846adf3fInv(x)} Type___unnamed_4_846adf3fInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Type___unnamed_4_846adf3fInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Type___unnamed_4_846adf3fInv(x));
-function UnitId__DEVICE_EXTENSION(int) returns (int);
-function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 176);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 176);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == UnitId__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == UnitId__DEVICE_EXTENSIONInv(x));
-function WaitListHead__DISPATCHER_HEADER(int) returns (int);
-function WaitListHead__DISPATCHER_HEADERInv(int) returns (int);
-function _S_WaitListHead__DISPATCHER_HEADER([int]bool) returns ([int]bool);
-function _S_WaitListHead__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x))} WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x)) == x);
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADER(WaitListHead__DISPATCHER_HEADERInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADER(S)[x]} _S_WaitListHead__DISPATCHER_HEADER(S)[x] <==> S[WaitListHead__DISPATCHER_HEADERInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADERInv(S)[x]} _S_WaitListHead__DISPATCHER_HEADERInv(S)[x] <==> S[WaitListHead__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADER(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADER(S)[WaitListHead__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADERInv(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADERInv(S)[WaitListHead__DISPATCHER_HEADERInv(x)]);
-
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADER(x)} WaitListHead__DISPATCHER_HEADER(x) == x + 8);
-axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADERInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == WaitListHead__DISPATCHER_HEADERInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == WaitListHead__DISPATCHER_HEADERInv(x));
-function WaitWakeEnabled__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeEnabled__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeEnabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeEnabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x))} WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSION(WaitWakeEnabled__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSION(x)} WaitWakeEnabled__DEVICE_EXTENSION(x) == x + 265);
-axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSIONInv(x) == x - 265);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 265, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 265, 1) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 265)} MINUS_LEFT_PTR(x, 1, 265) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
-function WaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x))} WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSION(WaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSION(S)[WaitWakeIrp__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSION(x)} WaitWakeIrp__DEVICE_EXTENSION(x) == x + 240);
-axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 240);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 240, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 240, 1) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 240)} MINUS_LEFT_PTR(x, 1, 240) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
-function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-function WmiFunctionControl__WMILIB_CONTEXT(int) returns (int);
-function WmiFunctionControl__WMILIB_CONTEXTInv(int) returns (int);
-function _S_WmiFunctionControl__WMILIB_CONTEXT([int]bool) returns ([int]bool);
-function _S_WmiFunctionControl__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x))} WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x)) == x);
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXT(WmiFunctionControl__WMILIB_CONTEXTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXT(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXT(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXT(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXT(S)[WmiFunctionControl__WMILIB_CONTEXT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
-
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXT(x)} WmiFunctionControl__WMILIB_CONTEXT(x) == x + 28);
-axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXTInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
-function WmiLibInfo__DEVICE_EXTENSION(int) returns (int);
-function WmiLibInfo__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WmiLibInfo__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WmiLibInfo__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x))} WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSION(WmiLibInfo__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSION(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSION(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSION(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSION(S)[WmiLibInfo__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSION(x)} WmiLibInfo__DEVICE_EXTENSION(x) == x + 180);
-axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSIONInv(x) == x - 180);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 180, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 180, 1) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 180)} MINUS_LEFT_PTR(x, 1, 180) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
-function __unnamed_1_2bb39c56___unnamed_4_846adf3f(int) returns (int);
-function __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(int) returns (int);
-function _S___unnamed_1_2bb39c56___unnamed_4_846adf3f([int]bool) returns ([int]bool);
-function _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(__unnamed_1_2bb39c56___unnamed_4_846adf3f(x))} __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)) == x);
-axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)} __unnamed_1_2bb39c56___unnamed_4_846adf3f(__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)[x]} _S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)[x] <==> S[__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)[x]} _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)[x] <==> S[__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)} S[x] ==> _S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)[__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)} S[x] ==> _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)[__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)]);
-
-axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)} __unnamed_1_2bb39c56___unnamed_4_846adf3f(x) == x + 1);
-axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)} __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x) == x - 1);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x));
-function __unnamed_1_9fa0583a___unnamed_4_846adf3f(int) returns (int);
-function __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(int) returns (int);
-function _S___unnamed_1_9fa0583a___unnamed_4_846adf3f([int]bool) returns ([int]bool);
-function _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(__unnamed_1_9fa0583a___unnamed_4_846adf3f(x))} __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)) == x);
-axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)} __unnamed_1_9fa0583a___unnamed_4_846adf3f(__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)[x]} _S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)[x] <==> S[__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)[x]} _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)[x] <==> S[__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)} S[x] ==> _S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)[__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)} S[x] ==> _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)[__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)]);
-
-axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)} __unnamed_1_9fa0583a___unnamed_4_846adf3f(x) == x + 3);
-axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)} __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x) == x - 3);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1) == __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 3)} MINUS_LEFT_PTR(x, 1, 3) == __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x));
-function __unnamed_1_e30779f5___unnamed_4_846adf3f(int) returns (int);
-function __unnamed_1_e30779f5___unnamed_4_846adf3fInv(int) returns (int);
-function _S___unnamed_1_e30779f5___unnamed_4_846adf3f([int]bool) returns ([int]bool);
-function _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3fInv(__unnamed_1_e30779f5___unnamed_4_846adf3f(x))} __unnamed_1_e30779f5___unnamed_4_846adf3fInv(__unnamed_1_e30779f5___unnamed_4_846adf3f(x)) == x);
-axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)} __unnamed_1_e30779f5___unnamed_4_846adf3f(__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)[x]} _S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)[x] <==> S[__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)[x]} _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)[x] <==> S[__unnamed_1_e30779f5___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)} S[x] ==> _S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)[__unnamed_1_e30779f5___unnamed_4_846adf3f(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)} S[x] ==> _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)[__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)]);
-
-axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3f(x)} __unnamed_1_e30779f5___unnamed_4_846adf3f(x) == x + 2);
-axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)} __unnamed_1_e30779f5___unnamed_4_846adf3fInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == __unnamed_1_e30779f5___unnamed_4_846adf3fInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == __unnamed_1_e30779f5___unnamed_4_846adf3fInv(x));
-function __unnamed_4_846adf3f___unnamed_4_c9b2e921(int) returns (int);
-function __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(int) returns (int);
-function _S___unnamed_4_846adf3f___unnamed_4_c9b2e921([int]bool) returns ([int]bool);
-function _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(__unnamed_4_846adf3f___unnamed_4_c9b2e921(x))} __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)) == x);
-axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)} __unnamed_4_846adf3f___unnamed_4_c9b2e921(__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)[x]} _S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)[x] <==> S[__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)[x]} _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)[x] <==> S[__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)} S[x] ==> _S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)[__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)} S[x] ==> _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)[__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)]);
-
-axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)} __unnamed_4_846adf3f___unnamed_4_c9b2e921(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)} __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x));
-function __unnamed_4_c9b2e921__DISPATCHER_HEADER(int) returns (int);
-function __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(int) returns (int);
-function _S___unnamed_4_c9b2e921__DISPATCHER_HEADER([int]bool) returns ([int]bool);
-function _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(__unnamed_4_c9b2e921__DISPATCHER_HEADER(x))} __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)) == x);
-axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)} __unnamed_4_c9b2e921__DISPATCHER_HEADER(__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)[x]} _S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)[x] <==> S[__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)[x]} _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)[x] <==> S[__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)} S[x] ==> _S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)[__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)} S[x] ==> _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)[__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)]);
-
-axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)} __unnamed_4_c9b2e921__DISPATCHER_HEADER(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)} __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x));
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure nondet_choice() returns (x:int);
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-var Res_DEVICE_STACK:[int]int;
-var Res_DEV_EXTN:[int]int;
-var Res_DEV_OBJ_INIT:[int]int;
-var Res_SPIN_LOCK:[int]int;
-
-
-
-////////////////////
-// Between predicate
-////////////////////
-function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
-function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
-
-
-//////////////////////////
-// Between set constructor
-//////////////////////////
-function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
-
-////////////////////////////////////////////////////
-// axioms relating ReachBetween and ReachBetweenSet
-////////////////////////////////////////////////////
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
-axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
-
-
-//////////////////////////
-// Axioms for ReachBetween
-//////////////////////////
-
-// reflexive
-axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
-
-// step
-//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
-axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
-
-// reach
-axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
-
-// cycle
-axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
-
-// sandwich
-axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
-
-// order1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
-
-// order2
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
-
-// transitive1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
-
-// transitive2
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
-
-// transitive3
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
-
-// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
-// It cannot be proved using the rest of the axioms.
-axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
-
-// relation between ReachAvoiding and ReachBetween
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
-
-// update
-axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
- ///////////////////////////////
- // Shifts for linking fields
- ///////////////////////////////
-function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
-axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
-axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
-
-const unique Globals : int;
-axiom(Globals != 0);
-// the set of constants for 64 bit integers that Boogie doesn't parse
-const unique BOOGIE_LARGE_INT_4294967273:int;
-
-
-
-procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure InitializeListHead_IRP($ListHead$1$12.44$InitializeListHead_IRP$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoCreateDevice($DriverObject$1$21226.25$IoCreateDevice$281:int, $DeviceExtensionSize$2$21227.16$IoCreateDevice$281:int, $DeviceName$3$21228.29$IoCreateDevice$281:int, $DeviceType$4$21229.22$IoCreateDevice$281:int, $DeviceCharacteristics$5$21230.16$IoCreateDevice$281:int, $Exclusive$6$21231.18$IoCreateDevice$281:int, $DeviceObject$7$21237.20$IoCreateDevice$281:int) returns ($result.IoCreateDevice$21225.0$1$:int);
-
-//TAG: ensures (LONG)__return >= 0 ==> *DeviceObject != (void *)0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> (*DeviceObject)->DeviceExtension != (void *)0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*DeviceObject)->DeviceExtension) == 1
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 1
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1)));
-//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *DeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 0)));
-//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *DeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension), 1)
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] := 1])));
-//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *DeviceObject) == __old_resource("DEV_OBJ_INIT", *DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))
-ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]])));
-//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-//TAG: ensures (LONG)__return >= 0 ==> !(__resource("DEV_OBJ_INIT", ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))->Self) == 1)
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (!(Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])])]] == 1)));
-//TAG: ensures !((LONG)__return >= 0) ==> *DeviceObject == __old(*DeviceObject)
-ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == old(Mem)[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures (LONG)__return >= 0 ==> __return == 0
-ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ($result.IoCreateDevice$21225.0$1$ == 0));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$7$21237.20$IoCreateDevice$281))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $DeviceObject$7$21237.20$IoCreateDevice$281) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
-requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
-//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
-ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
-//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
-ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
-//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
-ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
-//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoInitializeRemoveLockEx($Lock$1$22135.25$IoInitializeRemoveLockEx$201:int, $AllocateTag$2$22136.16$IoInitializeRemoveLockEx$201:int, $MaxLockedMinutes$3$22137.16$IoInitializeRemoveLockEx$201:int, $HighWatermark$4$22138.16$IoInitializeRemoveLockEx$201:int, $RemlockSize$5$22139.16$IoInitializeRemoveLockEx$201:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure KeInitializeSpinLock($SpinLock$1$13860.22$KeInitializeSpinLock$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-//TAG: ensures 1 ==> __resource("SPIN_LOCK", SpinLock) == 0
-ensures((true) ==> (Res_SPIN_LOCK[$SpinLock$1$13860.22$KeInitializeSpinLock$41] == 0));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty, SpinLock
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($SpinLock$1$13860.22$KeInitializeSpinLock$41))) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || ($SpinLock$1$13860.22$KeInitializeSpinLock$41 == r) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouInitializeDataQueue($Context$1$518.13$MouInitializeDataQueue$41:int);
-
-//TAG: requires __resource("DEV_EXTN", Context) == 1
-requires(Res_DEV_EXTN[$Context$1$518.13$MouInitializeDataQueue$41] == 1);
-//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)Context)->SpinLock) == 0
-requires(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($Context$1$518.13$MouInitializeDataQueue$41)] == 0);
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __resource("DEV_EXTN", Context) == 1
-ensures(Res_DEV_EXTN[$Context$1$518.13$MouInitializeDataQueue$41] == 1);
-//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)Context)->SpinLock) == 0
-ensures(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($Context$1$518.13$MouInitializeDataQueue$41)] == 0);
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouseClassLogError($Object$1$542.10$MouseClassLogError$281:int, $ErrorCode$2$543.10$MouseClassLogError$281:int, $UniqueErrorValue$3$544.10$MouseClassLogError$281:int, $FinalStatus$4$545.13$MouseClassLogError$281:int, $DumpCount$5$546.10$MouseClassLogError$281:int, $DumpData$6$547.11$MouseClassLogError$281:int, $MajorFunction$7$548.10$MouseClassLogError$281:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlFreeUnicodeString($UnicodeString$1$7452.28$RtlFreeUnicodeString$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure __PREfastPagedCode();
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouCreateClassObject($DriverObject$1$3165.28$MouCreateClassObject$201:int, $TmpDeviceExtension$2$3166.28$MouCreateClassObject$201:int, $ClassDeviceObject$3$3167.28$MouCreateClassObject$201:int, $FullDeviceName$4$3168.35$MouCreateClassObject$201:int, $Legacy$5$3169.28$MouCreateClassObject$201:int) returns ($result.MouCreateClassObject$3164.0$1$:int)
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1)));
-//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 0)));
-//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] := 1])));
-//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
-ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]])));
-//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __setin(_H_z, __set((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))) || __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])[_H_z]) || ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-//TAG: ensures !((LONG)__return >= 0) ==> __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))->SpinLock) == 0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])] == 0));
-modifies alloc;
-free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: &TmpDeviceExtension->WaitWakeSpinLock, &((struct _DEVICE_EXTENSION *)TmpDeviceExtension)->SpinLock, __set_true
-ensures (Subset(Empty(), Union(Union(Union(Empty(), Singleton(WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), Singleton(SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), SetTrue())) && (forall r:int :: {Res_SPIN_LOCK[r]} (WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SetTrue()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
-ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3167.28$MouCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3167.28$MouCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-{
-var havoc_stringTemp:int;
-var condVal:int;
-var $ClassDeviceObject$3$3167.28$MouCreateClassObject$20 : int;
-var $DriverObject$1$3165.28$MouCreateClassObject$20 : int;
-var $ExAllocatePoolWithTag.arg.2$4$ : int;
-var $FullDeviceName$4$3168.35$MouCreateClassObject$20 : int;
-var $Legacy$5$3169.28$MouCreateClassObject$20 : int;
-var $MouDebugPrint.arg.2$15$ : int;
-var $MouDebugPrint.arg.2$18$ : int;
-var $MouDebugPrint.arg.2$2$ : int;
-var $MouDebugPrint.arg.2$20$ : int;
-var $MouDebugPrint.arg.2$22$ : int;
-var $MouDebugPrint.arg.2$5$ : int;
-var $RtlAppendUnicodeToString.arg.2$12$ : int;
-var $RtlAppendUnicodeToString.arg.2$14$ : int;
-var $RtlAppendUnicodeToString.arg.2$9$ : int;
-var $TmpDeviceExtension$2$3166.28$MouCreateClassObject$20 : int;
-var $deviceExtension$8$3199.24$MouCreateClassObject$20 : int;
-var $dumpCount$11$3202.24$MouCreateClassObject$20 : int;
-var $dumpData$12$3203.24$MouCreateClassObject$20 : int;
-var $errorCode$9$3200.24$MouCreateClassObject$20 : int;
-var $fullClassName$10$3201.24$MouCreateClassObject$20 : int;
-var $i$13$3204.24$MouCreateClassObject$20 : int;
-var $memset.arg.3$7$ : int;
-var $nameIndex$14$3205.24$MouCreateClassObject$20 : int;
-var $result.ExAllocatePoolWithTag$3252.0$3$ : int;
-var $result.ExAllocatePoolWithTag$3370.0$19$ : int;
-var $result.IoCreateDevice$3296.35$16$ : int;
-var $result.IoCreateDevice$3310.31$17$ : int;
-var $result.RtlAppendUnicodeToString$3271.32$8$ : int;
-var $result.RtlAppendUnicodeToString$3272.32$10$ : int;
-var $result.RtlAppendUnicodeToString$3275.36$11$ : int;
-var $result.RtlAppendUnicodeToString$3278.32$13$ : int;
-var $result.memset$3270.8$6$ : int;
-var $result.question.21$ : int;
-var $status$6$3197.24$MouCreateClassObject$20 : int;
-var $uniqueErrorValue$7$3198.24$MouCreateClassObject$20 : int;
-var tempBoogie0:int;
-var tempBoogie1:int;
-var tempBoogie2:int;
-var tempBoogie3:int;
-var tempBoogie4:int;
-var tempBoogie5:int;
-var tempBoogie6:int;
-var tempBoogie7:int;
-var tempBoogie8:int;
-var tempBoogie9:int;
-var tempBoogie10:int;
-var tempBoogie11:int;
-var tempBoogie12:int;
-var tempBoogie13:int;
-var tempBoogie14:int;
-var tempBoogie15:int;
-var tempBoogie16:int;
-var tempBoogie17:int;
-var tempBoogie18:int;
-var tempBoogie19:int;
-var LOOP_78_alloc:[int]name;
-var LOOP_78_Mem:[name][int]int;
-var LOOP_78_Res_DEVICE_STACK:[int]int;
-var LOOP_78_Res_DEV_EXTN:[int]int;
-var LOOP_78_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_78_Res_SPIN_LOCK:[int]int;
-
-
-start:
-
-assume (alloc[$DriverObject$1$3165.28$MouCreateClassObject$201] != UNALLOCATED);
-assume (alloc[$TmpDeviceExtension$2$3166.28$MouCreateClassObject$201] != UNALLOCATED);
-assume (alloc[$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] != UNALLOCATED);
-assume (alloc[$FullDeviceName$4$3168.35$MouCreateClassObject$201] != UNALLOCATED);
-call $dumpData$12$3203.24$MouCreateClassObject$20 := __HAVOC_malloc(16);
-call $fullClassName$10$3201.24$MouCreateClassObject$20 := __HAVOC_malloc(8);
-$DriverObject$1$3165.28$MouCreateClassObject$20 := $DriverObject$1$3165.28$MouCreateClassObject$201;
-$TmpDeviceExtension$2$3166.28$MouCreateClassObject$20 := $TmpDeviceExtension$2$3166.28$MouCreateClassObject$201;
-$ClassDeviceObject$3$3167.28$MouCreateClassObject$20 := $ClassDeviceObject$3$3167.28$MouCreateClassObject$201;
-$FullDeviceName$4$3168.35$MouCreateClassObject$20 := $FullDeviceName$4$3168.35$MouCreateClassObject$201;
-$Legacy$5$3169.28$MouCreateClassObject$20 := $Legacy$5$3169.28$MouCreateClassObject$201;
-goto label_3;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3440)
-label_1:
-call __HAVOC_free($dumpData$12$3203.24$MouCreateClassObject$20);
-call __HAVOC_free($fullClassName$10$3201.24$MouCreateClassObject$20);
-assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
-assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
-assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
-assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
-assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
-assume (forall m:int :: {Mem[T.A37CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A37CHAR][m] == old(Mem[T.A37CHAR])[m]);
-assume (forall m:int :: {Mem[T.A40CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A40CHAR][m] == old(Mem[T.A40CHAR])[m]);
-assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
-assume (forall m:int :: {Mem[T.A65CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A65CHAR][m] == old(Mem[T.A65CHAR])[m]);
-assume (forall m:int :: {Mem[T.A75CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A75CHAR][m] == old(Mem[T.A75CHAR])[m]);
-assume (forall m:int :: {Mem[T.A76CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A76CHAR][m] == old(Mem[T.A76CHAR])[m]);
-assume (forall m:int :: {Mem[T.A7UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A7UINT2][m] == old(Mem[T.A7UINT2])[m]);
-assume (forall m:int :: {Mem[T.A80CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A80CHAR][m] == old(Mem[T.A80CHAR])[m]);
-assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
-assume (forall m:int :: {Mem[T.Abandoned___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Abandoned___unnamed_1_2bb39c56][m] == old(Mem[T.Abandoned___unnamed_1_2bb39c56])[m]);
-assume (forall m:int :: {Mem[T.Absolute___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Absolute___unnamed_1_2bb39c56][m] == old(Mem[T.Absolute___unnamed_1_2bb39c56])[m]);
-assume (forall m:int :: {Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Blink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blink__LIST_ENTRY][m] == old(Mem[T.Blink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.ConnectOneClassToOnePort__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ConnectOneClassToOnePort__GLOBALS][m] == old(Mem[T.ConnectOneClassToOnePort__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m] == old(Mem[T.CurrentStackLocation___unnamed_4_a7aa989c])[m]);
-assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DebugActive___unnamed_1_9fa0583a][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DebugActive___unnamed_1_9fa0583a][m] == old(Mem[T.DebugActive___unnamed_1_9fa0583a])[m]);
-assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.DeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceState__DEVICE_EXTENSION][m] == old(Mem[T.DeviceState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DpcActive___unnamed_1_9fa0583a][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DpcActive___unnamed_1_9fa0583a][m] == old(Mem[T.DpcActive___unnamed_1_9fa0583a])[m]);
-assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m] == old(Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.GuidCount__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidCount__WMILIB_CONTEXT][m] == old(Mem[T.GuidCount__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.GuidList__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidList__WMILIB_CONTEXT][m] == old(Mem[T.GuidList__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.Hand___unnamed_1_e30779f5][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Hand___unnamed_1_e30779f5][m] == old(Mem[T.Hand___unnamed_1_e30779f5])[m]);
-assume (forall m:int :: {Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
-assume (forall m:int :: {Mem[T.InputCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputCount__DEVICE_EXTENSION][m] == old(Mem[T.InputCount__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES][m] == old(Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Inserted___unnamed_1_9fa0583a][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Inserted___unnamed_1_9fa0583a][m] == old(Mem[T.Inserted___unnamed_1_9fa0583a])[m]);
-assume (forall m:int :: {Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Lock___unnamed_4_c9b2e921][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Lock___unnamed_4_c9b2e921][m] == old(Mem[T.Lock___unnamed_4_c9b2e921])[m]);
-assume (forall m:int :: {Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinDeviceWakeState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinSystemWakeState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
-assume (forall m:int :: {Mem[T.MouseAttributes__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MouseAttributes__DEVICE_EXTENSION][m] == old(Mem[T.MouseAttributes__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MouseIdentifier__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MouseIdentifier__MOUSE_ATTRIBUTES][m] == old(Mem[T.MouseIdentifier__MOUSE_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.NpxIrql___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NpxIrql___unnamed_1_2bb39c56][m] == old(Mem[T.NpxIrql___unnamed_1_2bb39c56])[m]);
-assume (forall m:int :: {Mem[T.NumberOfButtons__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfButtons__MOUSE_ATTRIBUTES][m] == old(Mem[T.NumberOfButtons__MOUSE_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m] == old(Mem[T.OkayToLogOverflow__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
-assume (forall m:int :: {Mem[T.PDO__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PDO__DEVICE_EXTENSION][m] == old(Mem[T.PDO__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
-assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
-assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
-assume (forall m:int :: {Mem[T.P_IO_REMOVE_LOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IO_REMOVE_LOCK][m] == old(Mem[T.P_IO_REMOVE_LOCK])[m]);
-assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.P_MOUSE_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_MOUSE_INPUT_DATA][m] == old(Mem[T.P_MOUSE_INPUT_DATA])[m]);
-assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.ReadQueue__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ReadQueue__DEVICE_EXTENSION][m] == old(Mem[T.ReadQueue__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.RemoveLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RemoveLock__DEVICE_EXTENSION][m] == old(Mem[T.RemoveLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.SampleRate__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SampleRate__MOUSE_ATTRIBUTES][m] == old(Mem[T.SampleRate__MOUSE_ATTRIBUTES])[m]);
-assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SequenceNumber__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SequenceNumber__DEVICE_EXTENSION][m] == old(Mem[T.SequenceNumber__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataBlock__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataItem__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T.SignalState__DISPATCHER_HEADER][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SignalState__DISPATCHER_HEADER][m] == old(Mem[T.SignalState__DISPATCHER_HEADER])[m]);
-assume (forall m:int :: {Mem[T.Signalling___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signalling___unnamed_1_2bb39c56][m] == old(Mem[T.Signalling___unnamed_1_2bb39c56])[m]);
-assume (forall m:int :: {Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Size___unnamed_1_e30779f5][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Size___unnamed_1_e30779f5][m] == old(Mem[T.Size___unnamed_1_e30779f5])[m]);
-assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
-assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m] == old(Mem[T.SurpriseRemoved__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SystemState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemState__DEVICE_EXTENSION][m] == old(Mem[T.SystemState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m] == old(Mem[T.SystemToDeviceState__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m] == old(Mem[T.TargetNotifyHandle__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TrueClassDevice__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrueClassDevice__DEVICE_EXTENSION][m] == old(Mem[T.TrueClassDevice__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m] == old(Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Type___unnamed_4_846adf3f][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Type___unnamed_4_846adf3f][m] == old(Mem[T.Type___unnamed_4_846adf3f])[m]);
-assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
-assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
-assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
-assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeEnabled__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeIrp__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m] == old(Mem[T.WmiFunctionControl__WMILIB_CONTEXT])[m]);
-assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3440)
-label_2:
-assume false;
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3197)
-label_3:
-goto label_4;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3198)
-label_4:
-goto label_5;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3199)
-label_5:
-goto label_6;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3199)
-label_6:
-$deviceExtension$8$3199.24$MouCreateClassObject$20 := 0 ;
-goto label_7;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3200)
-label_7:
-goto label_8;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3200)
-label_8:
-$errorCode$9$3200.24$MouCreateClassObject$20 := 0 ;
-goto label_9;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3201)
-label_9:
-goto label_10;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3201)
-label_10:
-// Skipping Structure assignment due to the flag SkipStructAssignments
-goto label_11;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3202)
-label_11:
-goto label_12;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3202)
-label_12:
-$dumpCount$11$3202.24$MouCreateClassObject$20 := 0 ;
-goto label_13;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3203)
-label_13:
-goto label_14;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3204)
-label_14:
-goto label_15;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3205)
-label_15:
-goto label_16;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3207)
-label_16:
-call __PREfastPagedCode ();
-goto label_22;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3209)
-label_19:
-// skip MouDebugPrint
-goto label_23;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3209)
-label_22:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$2$ := havoc_stringTemp ;
-goto label_19;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3215)
-label_23:
-call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
-goto label_26;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3220)
-label_26:
-Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20 := 0];
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3222)
-label_27:
-goto label_27_true , label_27_false ;
-
-
-label_27_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_89;
-
-
-label_27_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_28;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3226)
-label_28:
-call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
-goto label_31;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3232)
-label_31:
-goto label_31_true , label_31_false ;
-
-
-label_31_true :
-assume (BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
-goto label_32;
-
-
-label_31_false :
-assume !(BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
-goto label_37;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3233)
-label_32:
-$status$6$3197.24$MouCreateClassObject$20 := -1073741823 ;
-goto label_33;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3234)
-label_33:
-$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414143 ;
-goto label_34;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3235)
-label_34:
-$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20006 ;
-goto label_35;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3236)
-label_35:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3203.24$MouCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
-goto label_36;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3237)
-label_36:
-$dumpCount$11$3202.24$MouCreateClassObject$20 := 1 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3244)
-label_37:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]), 1, 4)];
-goto label_38;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3248)
-label_38:
-goto label_38_true , label_38_false ;
-
-
-label_38_true :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
-goto label_39;
-
-
-label_38_false :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3248)
-label_39:
-goto label_39_true , label_39_false ;
-
-
-label_39_true :
-assume ($Legacy$5$3169.28$MouCreateClassObject$20 != 0);
-goto label_40;
-
-
-label_39_false :
-assume ($Legacy$5$3169.28$MouCreateClassObject$20 == 0);
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3249)
-label_40:
-tempBoogie0 := PLUS(Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)], 1, 14) ;
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20) := tempBoogie0];
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3252)
-label_41:
-call $result.ExAllocatePoolWithTag$3252.0$3$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$4$, 1131377997);
-goto label_45;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3252)
-label_44:
-$ExAllocatePoolWithTag.arg.2$4$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] ;
-goto label_41;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3252)
-label_45:
-Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20) := $result.ExAllocatePoolWithTag$3252.0$3$];
-goto label_46;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3255)
-label_46:
-goto label_46_true , label_46_false ;
-
-
-label_46_true :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] != 0);
-goto label_59;
-
-
-label_46_false :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] == 0);
-goto label_50;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3257)
-label_47:
-// skip MouDebugPrint
-goto label_51;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3257)
-label_50:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$5$ := havoc_stringTemp ;
-goto label_47;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3262)
-label_51:
-$status$6$3197.24$MouCreateClassObject$20 := -1073741823 ;
-goto label_52;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3263)
-label_52:
-$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414143 ;
-goto label_53;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3264)
-label_53:
-$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20006 ;
-goto label_54;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3265)
-label_54:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3203.24$MouCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
-goto label_55;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3266)
-label_55:
-$dumpCount$11$3202.24$MouCreateClassObject$20 := 1 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3270)
-label_56:
-// ignoring intrinsic intrinsic.memset
-havoc $result.memset$3270.8$6$;
-goto label_63;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3270)
-label_59:
-$memset.arg.3$7$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] ;
-goto label_56;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3271)
-label_60:
-call $result.RtlAppendUnicodeToString$3271.32$8$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$9$);
-goto label_64;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3271)
-label_63:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$9$ := havoc_stringTemp ;
-goto label_60;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3272)
-label_64:
-call $result.RtlAppendUnicodeToString$3272.32$10$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
-goto label_67;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3274)
-label_67:
-goto label_67_true , label_67_false ;
-
-
-label_67_true :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
-goto label_68;
-
-
-label_67_false :
-assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
-goto label_76;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3274)
-label_68:
-goto label_68_true , label_68_false ;
-
-
-label_68_true :
-assume ($Legacy$5$3169.28$MouCreateClassObject$20 != 0);
-goto label_72;
-
-
-label_68_false :
-assume ($Legacy$5$3169.28$MouCreateClassObject$20 == 0);
-goto label_76;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3275)
-label_69:
-call $result.RtlAppendUnicodeToString$3275.36$11$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$12$);
-goto label_76;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3275)
-label_72:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$12$ := havoc_stringTemp ;
-goto label_69;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3278)
-label_73:
-call $result.RtlAppendUnicodeToString$3278.32$13$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$14$);
-goto label_77;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3278)
-label_76:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$14$ := havoc_stringTemp ;
-goto label_73;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3284)
-label_77:
-$nameIndex$14$3205.24$MouCreateClassObject$20 := 0 ;
-goto label_78;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3288)
-label_78:
-// loop entry initialization...
-LOOP_78_alloc := alloc;
-LOOP_78_Mem := Mem;
-LOOP_78_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_78_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_78_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_78_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_78_head;
-
-
-label_78_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: requires __preserves_resource("DEV_OBJ_INIT")
-assert(Res_DEV_OBJ_INIT == LOOP_78_Res_DEV_OBJ_INIT);
-//TAG: requires __preserves_resource("DEV_EXTN")
-assert(Res_DEV_EXTN == LOOP_78_Res_DEV_EXTN);
-//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-assert(Mem[T.Flink__LIST_ENTRY] == LOOP_78_Mem[T.Flink__LIST_ENTRY]);
-assume(forall f:int :: {alloc[Base(f)]} LOOP_78_alloc[Base(f)] == UNALLOCATED || LOOP_78_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_78_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_78_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_78_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_true, __set_empty
-assert (Subset(Empty(), Union(Union(Empty(), SetTrue()), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (SetTrue()[r]) || (Empty()[r]) || LOOP_78_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_78_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_78_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_78_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true, __set_empty
-assert (Subset(Empty(), Union(Union(Empty(), SetTrue()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_78_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_78_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)], 2), 1, 1)) := PLUS(48, 1, $nameIndex$14$3205.24$MouCreateClassObject$20)];
-$nameIndex$14$3205.24$MouCreateClassObject$20 := PLUS($nameIndex$14$3205.24$MouCreateClassObject$20, 1, 1) ;
-goto label_82;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3290)
-label_79:
-// skip MouDebugPrint
-goto label_83;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3290)
-label_82:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$15$ := havoc_stringTemp ;
-goto label_79;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3296)
-label_83:
-call $result.IoCreateDevice$3296.35$16$ := IoCreateDevice ($DriverObject$1$3165.28$MouCreateClassObject$20, 272, $fullClassName$10$3201.24$MouCreateClassObject$20, 15, 0, 0, $ClassDeviceObject$3$3167.28$MouCreateClassObject$20);
-goto label_86;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3296)
-label_86:
-$status$6$3197.24$MouCreateClassObject$20 := $result.IoCreateDevice$3296.35$16$ ;
-goto label_87;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3304)
-label_87:
-goto label_87_true , label_87_false ;
-
-
-label_87_true :
-assume (-1073741771 == $status$6$3197.24$MouCreateClassObject$20);
-goto label_78_head;
-
-
-label_87_false :
-assume !(-1073741771 == $status$6$3197.24$MouCreateClassObject$20);
-goto label_88;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3306)
-label_88:
-Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3168.35$MouCreateClassObject$20 := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
-goto label_97;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3309)
-label_89:
-call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
-goto label_92;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3310)
-label_92:
-call $result.IoCreateDevice$3310.31$17$ := IoCreateDevice ($DriverObject$1$3165.28$MouCreateClassObject$20, 272, 0, 15, 0, 0, $ClassDeviceObject$3$3167.28$MouCreateClassObject$20);
-goto label_95;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3310)
-label_95:
-$status$6$3197.24$MouCreateClassObject$20 := $result.IoCreateDevice$3310.31$17$ ;
-goto label_96;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3317)
-label_96:
-Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3168.35$MouCreateClassObject$20 := 0];
-goto label_97;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3320)
-label_97:
-goto label_97_true , label_97_false ;
-
-
-label_97_true :
-assume (0 <= $status$6$3197.24$MouCreateClassObject$20);
-goto label_98;
-
-
-label_97_false :
-assume !(0 <= $status$6$3197.24$MouCreateClassObject$20);
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3320)
-label_98:
-goto label_98_true , label_98_false ;
-
-
-label_98_true :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] != 0);
-goto label_107;
-
-
-label_98_false :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] == 0);
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3321)
-label_99:
-// skip MouDebugPrint
-goto label_103;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3321)
-label_102:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$18$ := havoc_stringTemp ;
-goto label_99;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3327)
-label_103:
-$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414131 ;
-goto label_104;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3328)
-label_104:
-$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20006 ;
-goto label_105;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3329)
-label_105:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3203.24$MouCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
-goto label_106;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3330)
-label_106:
-$dumpCount$11$3202.24$MouCreateClassObject$20 := 1 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3339)
-label_107:
-assume (forall r:int :: {BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])], 4),r)} BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])],r)!= 0 || BIT_BAND(4,r)!= 0 <==> BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])], 4),r)!= 0);
-tempBoogie0 := BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])], 4) ;
-Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20]) := tempBoogie0];
-goto label_108;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3340)
-label_108:
-$deviceExtension$8$3199.24$MouCreateClassObject$20 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])] ;
-goto label_109;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3342)
-label_109:
-// Skipping Structure assignment due to the flag SkipStructAssignments
-goto label_110;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3344)
-label_110:
-Mem[T.Self__DEVICE_EXTENSION] := Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20]];
-goto label_111;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3345)
-label_111:
-call IoInitializeRemoveLockEx (RemoveLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20), 1131377997, 0, 0, 88);
-goto label_114;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3351)
-label_114:
-assume (Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] == Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)]);
-call KeInitializeSpinLock (SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20));
-Mem[T.SpinLock__DEVICE_EXTENSION] := Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)]];
-goto label_117;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3357)
-label_117:
-call InitializeListHead_IRP (ReadQueue__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20));
-goto label_120;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3363)
-label_120:
-Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION] := Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][TrustedSubsystemCount__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := 0];
-goto label_121;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3370)
-label_121:
-call $result.ExAllocatePoolWithTag$3370.0$19$ := ExAllocatePoolWithTag (0, Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES][InputDataQueueLength__MOUSE_ATTRIBUTES(MouseAttributes__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20))], 1131377997);
-goto label_124;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3369)
-label_124:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := $result.ExAllocatePoolWithTag$3370.0$19$];
-goto label_125;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3375)
-label_125:
-goto label_125_true , label_125_false ;
-
-
-label_125_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] != 0);
-goto label_133;
-
-
-label_125_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] == 0);
-goto label_129;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3381)
-label_126:
-// skip MouDebugPrint
-goto label_130;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3381)
-label_129:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$20$ := havoc_stringTemp ;
-goto label_126;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3387)
-label_130:
-$status$6$3197.24$MouCreateClassObject$20 := -1073741670 ;
-goto label_131;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3393)
-label_131:
-$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414142 ;
-goto label_132;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3394)
-label_132:
-$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20020 ;
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3402)
-label_133:
-call MouInitializeDataQueue ($deviceExtension$8$3199.24$MouCreateClassObject$20);
-goto label_136;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3406)
-label_136:
-goto label_136_true , label_136_false ;
-
-
-label_136_true :
-assume ($status$6$3197.24$MouCreateClassObject$20 != 0);
-goto label_137;
-
-
-label_136_false :
-assume ($status$6$3197.24$MouCreateClassObject$20 == 0);
-goto label_162;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3412)
-label_137:
-call RtlFreeUnicodeString ($fullClassName$10$3201.24$MouCreateClassObject$20);
-goto label_140;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3413)
-label_140:
-Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3168.35$MouCreateClassObject$20 := 0];
-goto label_141;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3415)
-label_141:
-goto label_141_true , label_141_false ;
-
-
-label_141_true :
-assume ($errorCode$9$3200.24$MouCreateClassObject$20 != 0);
-goto label_145;
-
-
-label_141_false :
-assume ($errorCode$9$3200.24$MouCreateClassObject$20 == 0);
-goto label_148;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3416)
-label_142:
-call MouseClassLogError ($result.question.21$, $errorCode$9$3200.24$MouCreateClassObject$20, $uniqueErrorValue$7$3198.24$MouCreateClassObject$20, $status$6$3197.24$MouCreateClassObject$20, $dumpCount$11$3202.24$MouCreateClassObject$20, $dumpData$12$3203.24$MouCreateClassObject$20, 0);
-goto label_148;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3417)
-label_145:
-goto label_145_true , label_145_false ;
-
-
-label_145_true :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] != 0);
-goto label_147;
-
-
-label_145_false :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] == 0);
-goto label_146;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3417)
-label_146:
-$result.question.21$ := $DriverObject$1$3165.28$MouCreateClassObject$20 ;
-goto label_142;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3417)
-label_147:
-$result.question.21$ := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] ;
-goto label_142;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3427)
-label_148:
-goto label_148_true , label_148_false ;
-
-
-label_148_true :
-assume ($deviceExtension$8$3199.24$MouCreateClassObject$20 != 0);
-goto label_149;
-
-
-label_148_false :
-assume ($deviceExtension$8$3199.24$MouCreateClassObject$20 == 0);
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3427)
-label_149:
-goto label_149_true , label_149_false ;
-
-
-label_149_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] != 0);
-goto label_150;
-
-
-label_149_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] == 0);
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3428)
-label_150:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)], 0);
-goto label_153;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3429)
-label_153:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := 0];
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3431)
-label_154:
-goto label_154_true , label_154_false ;
-
-
-label_154_true :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] != 0);
-goto label_155;
-
-
-label_154_false :
-assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] == 0);
-goto label_162;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3432)
-label_155:
-call IoDeleteDevice (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20]);
-goto label_158;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3433)
-label_158:
-Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20 := 0];
-goto label_162;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3437)
-label_159:
-// skip MouDebugPrint
-goto label_163;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3437)
-label_162:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$22$ := havoc_stringTemp ;
-goto label_159;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3439)
-label_163:
-$result.MouCreateClassObject$3164.0$1$ := $status$6$3197.24$MouCreateClassObject$20 ;
-goto label_1;
-
-}
-
+// RUN: %boogie -monomorphize "%s" > "%t"
+// RUN: %diff success.expect "%t"
+type byte, name;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function SetTrue() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+/*
+function AtLeast(int, int) returns ([int]bool);
+function ModEqual(int, int, int) returns (bool);
+axiom(forall n:int, x:int :: ModEqual(n,x,x));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
+axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
+axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
+axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+*/
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int :: SetTrue()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name, m:[name][int]int) returns (bool);
+function Values(t:name, m:[name][int]int) returns ([int]bool);
+function T.Ptr(t:name) returns (name);
+
+axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
+
+axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
+
+axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
+ (HasType(v, t, m1) <==> HasType(v, t, m2)));
+
+// Field declarations
+
+const unique T.Guid_WMIGUIDREGINFO:name;
+const unique T.InstanceCount_WMIGUIDREGINFO:name;
+const unique T.Flags_WMIGUIDREGINFO:name;
+const unique T.OperationID__ACCESS_STATE:name;
+const unique T.SecurityEvaluated__ACCESS_STATE:name;
+const unique T.GenerateAudit__ACCESS_STATE:name;
+const unique T.GenerateOnClose__ACCESS_STATE:name;
+const unique T.PrivilegesAllocated__ACCESS_STATE:name;
+const unique T.Flags__ACCESS_STATE:name;
+const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
+const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
+const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
+const unique T.SubjectSecurityContext__ACCESS_STATE:name;
+const unique T.SecurityDescriptor__ACCESS_STATE:name;
+const unique T.AuxData__ACCESS_STATE:name;
+const unique T.Privileges__ACCESS_STATE:name;
+const unique T.AuditPrivileges__ACCESS_STATE:name;
+const unique T.ObjectName__ACCESS_STATE:name;
+const unique T.ObjectTypeName__ACCESS_STATE:name;
+const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_RESOURCE_LIST:name;
+const unique T.List__CM_RESOURCE_LIST:name;
+const unique T.Size__DEVICE_CAPABILITIES:name;
+const unique T.Version__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
+const unique T.LockSupported__DEVICE_CAPABILITIES:name;
+const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.Removable__DEVICE_CAPABILITIES:name;
+const unique T.DockDevice__DEVICE_CAPABILITIES:name;
+const unique T.UniqueID__DEVICE_CAPABILITIES:name;
+const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
+const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
+const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
+const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
+const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
+const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
+const unique T.Reserved__DEVICE_CAPABILITIES:name;
+const unique T.Address__DEVICE_CAPABILITIES:name;
+const unique T.UINumber__DEVICE_CAPABILITIES:name;
+const unique T.DeviceState__DEVICE_CAPABILITIES:name;
+const unique T.SystemWake__DEVICE_CAPABILITIES:name;
+const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
+const unique T.D1Latency__DEVICE_CAPABILITIES:name;
+const unique T.D2Latency__DEVICE_CAPABILITIES:name;
+const unique T.D3Latency__DEVICE_CAPABILITIES:name;
+const unique T.Self__DEVICE_EXTENSION:name;
+const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
+const unique T.TopPort__DEVICE_EXTENSION:name;
+const unique T.PDO__DEVICE_EXTENSION:name;
+const unique T.RemoveLock__DEVICE_EXTENSION:name;
+const unique T.PnP__DEVICE_EXTENSION:name;
+const unique T.Started__DEVICE_EXTENSION:name;
+const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
+const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
+const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
+const unique T.InputCount__DEVICE_EXTENSION:name;
+const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
+const unique T.InputData__DEVICE_EXTENSION:name;
+const unique T.DataIn__DEVICE_EXTENSION:name;
+const unique T.DataOut__DEVICE_EXTENSION:name;
+const unique T.MouseAttributes__DEVICE_EXTENSION:name;
+const unique T.SpinLock__DEVICE_EXTENSION:name;
+const unique T.ReadQueue__DEVICE_EXTENSION:name;
+const unique T.SequenceNumber__DEVICE_EXTENSION:name;
+const unique T.DeviceState__DEVICE_EXTENSION:name;
+const unique T.SystemState__DEVICE_EXTENSION:name;
+const unique T.UnitId__DEVICE_EXTENSION:name;
+const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
+const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
+const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
+const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
+const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
+const unique T.Link__DEVICE_EXTENSION:name;
+const unique T.File__DEVICE_EXTENSION:name;
+const unique T.Enabled__DEVICE_EXTENSION:name;
+const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
+const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
+const unique T.Type__DEVICE_OBJECT:name;
+const unique T.Size__DEVICE_OBJECT:name;
+const unique T.ReferenceCount__DEVICE_OBJECT:name;
+const unique T.DriverObject__DEVICE_OBJECT:name;
+const unique T.NextDevice__DEVICE_OBJECT:name;
+const unique T.AttachedDevice__DEVICE_OBJECT:name;
+const unique T.CurrentIrp__DEVICE_OBJECT:name;
+const unique T.Timer__DEVICE_OBJECT:name;
+const unique T.Flags__DEVICE_OBJECT:name;
+const unique T.Characteristics__DEVICE_OBJECT:name;
+const unique T.Vpb__DEVICE_OBJECT:name;
+const unique T.DeviceExtension__DEVICE_OBJECT:name;
+const unique T.DeviceType__DEVICE_OBJECT:name;
+const unique T.StackSize__DEVICE_OBJECT:name;
+const unique T.Queue__DEVICE_OBJECT:name;
+const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
+const unique T.DeviceQueue__DEVICE_OBJECT:name;
+const unique T.Dpc__DEVICE_OBJECT:name;
+const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
+const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
+const unique T.DeviceLock__DEVICE_OBJECT:name;
+const unique T.SectorSize__DEVICE_OBJECT:name;
+const unique T.Spare1__DEVICE_OBJECT:name;
+const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
+const unique T.Reserved__DEVICE_OBJECT:name;
+const unique T.Type__DEVOBJ_EXTENSION:name;
+const unique T.Size__DEVOBJ_EXTENSION:name;
+const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
+const unique T.__unnamed_4_c9b2e921__DISPATCHER_HEADER:name;
+const unique T.SignalState__DISPATCHER_HEADER:name;
+const unique T.WaitListHead__DISPATCHER_HEADER:name;
+const unique T.DriverObject__DRIVER_EXTENSION:name;
+const unique T.AddDevice__DRIVER_EXTENSION:name;
+const unique T.Count__DRIVER_EXTENSION:name;
+const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
+const unique T.Type__DRIVER_OBJECT:name;
+const unique T.Size__DRIVER_OBJECT:name;
+const unique T.DeviceObject__DRIVER_OBJECT:name;
+const unique T.Flags__DRIVER_OBJECT:name;
+const unique T.DriverStart__DRIVER_OBJECT:name;
+const unique T.DriverSize__DRIVER_OBJECT:name;
+const unique T.DriverSection__DRIVER_OBJECT:name;
+const unique T.DriverExtension__DRIVER_OBJECT:name;
+const unique T.DriverName__DRIVER_OBJECT:name;
+const unique T.HardwareDatabase__DRIVER_OBJECT:name;
+const unique T.FastIoDispatch__DRIVER_OBJECT:name;
+const unique T.DriverInit__DRIVER_OBJECT:name;
+const unique T.DriverStartIo__DRIVER_OBJECT:name;
+const unique T.DriverUnload__DRIVER_OBJECT:name;
+const unique T.MajorFunction__DRIVER_OBJECT:name;
+const unique T.SystemResourcesList__ERESOURCE:name;
+const unique T.OwnerTable__ERESOURCE:name;
+const unique T.ActiveCount__ERESOURCE:name;
+const unique T.Flag__ERESOURCE:name;
+const unique T.SharedWaiters__ERESOURCE:name;
+const unique T.ExclusiveWaiters__ERESOURCE:name;
+const unique T.OwnerEntry__ERESOURCE:name;
+const unique T.ActiveEntries__ERESOURCE:name;
+const unique T.ContentionCount__ERESOURCE:name;
+const unique T.NumberOfSharedWaiters__ERESOURCE:name;
+const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
+const unique T.__unnamed_4_46b62f69__ERESOURCE:name;
+const unique T.SpinLock__ERESOURCE:name;
+const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
+const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
+const unique T.FastIoRead__FAST_IO_DISPATCH:name;
+const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoLock__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
+const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
+const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
+const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlRead__FAST_IO_DISPATCH:name;
+const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
+const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
+const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
+const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.Count__FAST_MUTEX:name;
+const unique T.Owner__FAST_MUTEX:name;
+const unique T.Contention__FAST_MUTEX:name;
+const unique T.Gate__FAST_MUTEX:name;
+const unique T.OldIrql__FAST_MUTEX:name;
+const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
+const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
+const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
+const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.Type__FILE_OBJECT:name;
+const unique T.Size__FILE_OBJECT:name;
+const unique T.DeviceObject__FILE_OBJECT:name;
+const unique T.Vpb__FILE_OBJECT:name;
+const unique T.FsContext__FILE_OBJECT:name;
+const unique T.FsContext2__FILE_OBJECT:name;
+const unique T.SectionObjectPointer__FILE_OBJECT:name;
+const unique T.PrivateCacheMap__FILE_OBJECT:name;
+const unique T.FinalStatus__FILE_OBJECT:name;
+const unique T.RelatedFileObject__FILE_OBJECT:name;
+const unique T.LockOperation__FILE_OBJECT:name;
+const unique T.DeletePending__FILE_OBJECT:name;
+const unique T.ReadAccess__FILE_OBJECT:name;
+const unique T.WriteAccess__FILE_OBJECT:name;
+const unique T.DeleteAccess__FILE_OBJECT:name;
+const unique T.SharedRead__FILE_OBJECT:name;
+const unique T.SharedWrite__FILE_OBJECT:name;
+const unique T.SharedDelete__FILE_OBJECT:name;
+const unique T.Flags__FILE_OBJECT:name;
+const unique T.FileName__FILE_OBJECT:name;
+const unique T.CurrentByteOffset__FILE_OBJECT:name;
+const unique T.Waiters__FILE_OBJECT:name;
+const unique T.Busy__FILE_OBJECT:name;
+const unique T.LastLock__FILE_OBJECT:name;
+const unique T.Lock__FILE_OBJECT:name;
+const unique T.Event__FILE_OBJECT:name;
+const unique T.CompletionContext__FILE_OBJECT:name;
+const unique T.IrpListLock__FILE_OBJECT:name;
+const unique T.IrpList__FILE_OBJECT:name;
+const unique T.FileObjectExtension__FILE_OBJECT:name;
+const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
+const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
+const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
+const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
+const unique T.Directory__FILE_STANDARD_INFORMATION:name;
+const unique T.Debug__GLOBALS:name;
+const unique T.GrandMaster__GLOBALS:name;
+const unique T.AssocClassList__GLOBALS:name;
+const unique T.NumAssocClass__GLOBALS:name;
+const unique T.Opens__GLOBALS:name;
+const unique T.NumberLegacyPorts__GLOBALS:name;
+const unique T.Mutex__GLOBALS:name;
+const unique T.ConnectOneClassToOnePort__GLOBALS:name;
+const unique T.PortsServiced__GLOBALS:name;
+const unique T.InitExtension__GLOBALS:name;
+const unique T.RegistryPath__GLOBALS:name;
+const unique T.BaseClassName__GLOBALS:name;
+const unique T.BaseClassBuffer__GLOBALS:name;
+const unique T.LegacyDeviceList__GLOBALS:name;
+const unique T.Data1__GUID:name;
+const unique T.Data2__GUID:name;
+const unique T.Data3__GUID:name;
+const unique T.Data4__GUID:name;
+const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
+const unique T.Control__INITIAL_PRIVILEGE_SET:name;
+const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
+const unique T.Size__INTERFACE:name;
+const unique T.Version__INTERFACE:name;
+const unique T.Context__INTERFACE:name;
+const unique T.InterfaceReference__INTERFACE:name;
+const unique T.InterfaceDereference__INTERFACE:name;
+const unique T.Port__IO_COMPLETION_CONTEXT:name;
+const unique T.Key__IO_COMPLETION_CONTEXT:name;
+const unique T.Common__IO_REMOVE_LOCK:name;
+const unique T.Dbg__IO_REMOVE_LOCK:name;
+const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__IO_RESOURCE_LIST:name;
+const unique T.Revision__IO_RESOURCE_LIST:name;
+const unique T.Count__IO_RESOURCE_LIST:name;
+const unique T.Descriptors__IO_RESOURCE_LIST:name;
+const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
+const unique T.AccessState__IO_SECURITY_CONTEXT:name;
+const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
+const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
+const unique T.MajorFunction__IO_STACK_LOCATION:name;
+const unique T.MinorFunction__IO_STACK_LOCATION:name;
+const unique T.Flags__IO_STACK_LOCATION:name;
+const unique T.Control__IO_STACK_LOCATION:name;
+const unique T.Parameters__IO_STACK_LOCATION:name;
+const unique T.DeviceObject__IO_STACK_LOCATION:name;
+const unique T.FileObject__IO_STACK_LOCATION:name;
+const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
+const unique T.Context__IO_STACK_LOCATION:name;
+const unique T.__unnamed_4_16aff58e__IO_STATUS_BLOCK:name;
+const unique T.Information__IO_STATUS_BLOCK:name;
+const unique T.Type__IRP:name;
+const unique T.Size__IRP:name;
+const unique T.MdlAddress__IRP:name;
+const unique T.Flags__IRP:name;
+const unique T.AssociatedIrp__IRP:name;
+const unique T.ThreadListEntry__IRP:name;
+const unique T.IoStatus__IRP:name;
+const unique T.RequestorMode__IRP:name;
+const unique T.PendingReturned__IRP:name;
+const unique T.StackCount__IRP:name;
+const unique T.CurrentLocation__IRP:name;
+const unique T.Cancel__IRP:name;
+const unique T.CancelIrql__IRP:name;
+const unique T.ApcEnvironment__IRP:name;
+const unique T.AllocationFlags__IRP:name;
+const unique T.UserIosb__IRP:name;
+const unique T.UserEvent__IRP:name;
+const unique T.Overlay__IRP:name;
+const unique T.CancelRoutine__IRP:name;
+const unique T.UserBuffer__IRP:name;
+const unique T.Tail__IRP:name;
+const unique T.Type__KAPC:name;
+const unique T.SpareByte0__KAPC:name;
+const unique T.Size__KAPC:name;
+const unique T.SpareByte1__KAPC:name;
+const unique T.SpareLong0__KAPC:name;
+const unique T.Thread__KAPC:name;
+const unique T.ApcListEntry__KAPC:name;
+const unique T.KernelRoutine__KAPC:name;
+const unique T.RundownRoutine__KAPC:name;
+const unique T.NormalRoutine__KAPC:name;
+const unique T.NormalContext__KAPC:name;
+const unique T.SystemArgument1__KAPC:name;
+const unique T.SystemArgument2__KAPC:name;
+const unique T.ApcStateIndex__KAPC:name;
+const unique T.ApcMode__KAPC:name;
+const unique T.Inserted__KAPC:name;
+const unique T.Type__KDEVICE_QUEUE:name;
+const unique T.Size__KDEVICE_QUEUE:name;
+const unique T.DeviceListHead__KDEVICE_QUEUE:name;
+const unique T.Lock__KDEVICE_QUEUE:name;
+const unique T.Busy__KDEVICE_QUEUE:name;
+const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
+const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Type__KDPC:name;
+const unique T.Importance__KDPC:name;
+const unique T.Number__KDPC:name;
+const unique T.DpcListEntry__KDPC:name;
+const unique T.DeferredRoutine__KDPC:name;
+const unique T.DeferredContext__KDPC:name;
+const unique T.SystemArgument1__KDPC:name;
+const unique T.SystemArgument2__KDPC:name;
+const unique T.DpcData__KDPC:name;
+const unique T.Header__KEVENT:name;
+const unique T.Header__KSEMAPHORE:name;
+const unique T.Limit__KSEMAPHORE:name;
+const unique T.__unnamed_8_8684a3e7__LARGE_INTEGER:name;
+const unique T.u__LARGE_INTEGER:name;
+const unique T.QuadPart__LARGE_INTEGER:name;
+const unique T.Flink__LIST_ENTRY:name;
+const unique T.Blink__LIST_ENTRY:name;
+const unique T.LowPart__LUID:name;
+const unique T.HighPart__LUID:name;
+const unique T.Luid__LUID_AND_ATTRIBUTES:name;
+const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
+const unique T.Next__MDL:name;
+const unique T.Size__MDL:name;
+const unique T.MdlFlags__MDL:name;
+const unique T.Process__MDL:name;
+const unique T.MappedSystemVa__MDL:name;
+const unique T.StartVa__MDL:name;
+const unique T.ByteCount__MDL:name;
+const unique T.ByteOffset__MDL:name;
+const unique T.MouseIdentifier__MOUSE_ATTRIBUTES:name;
+const unique T.NumberOfButtons__MOUSE_ATTRIBUTES:name;
+const unique T.SampleRate__MOUSE_ATTRIBUTES:name;
+const unique T.InputDataQueueLength__MOUSE_ATTRIBUTES:name;
+const unique T.UnitId__MOUSE_INPUT_DATA:name;
+const unique T.Flags__MOUSE_INPUT_DATA:name;
+const unique T.__unnamed_4_9c11ed91__MOUSE_INPUT_DATA:name;
+const unique T.RawButtons__MOUSE_INPUT_DATA:name;
+const unique T.LastX__MOUSE_INPUT_DATA:name;
+const unique T.LastY__MOUSE_INPUT_DATA:name;
+const unique T.ExtraInformation__MOUSE_INPUT_DATA:name;
+const unique T.OwnerThread__OWNER_ENTRY:name;
+const unique T.__unnamed_4_c1e23b02__OWNER_ENTRY:name;
+const unique T.File__PORT:name;
+const unique T.Port__PORT:name;
+const unique T.Enabled__PORT:name;
+const unique T.Reserved__PORT:name;
+const unique T.Free__PORT:name;
+const unique T.SequenceD1__POWER_SEQUENCE:name;
+const unique T.SequenceD2__POWER_SEQUENCE:name;
+const unique T.SequenceD3__POWER_SEQUENCE:name;
+const unique T.SystemState__POWER_STATE:name;
+const unique T.DeviceState__POWER_STATE:name;
+const unique T.PrivilegeCount__PRIVILEGE_SET:name;
+const unique T.Control__PRIVILEGE_SET:name;
+const unique T.Privilege__PRIVILEGE_SET:name;
+const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
+const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.__unnamed_4_b4f5a780__SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T.Length__UNICODE_STRING:name;
+const unique T.MaximumLength__UNICODE_STRING:name;
+const unique T.Buffer__UNICODE_STRING:name;
+const unique T.Type__VPB:name;
+const unique T.Size__VPB:name;
+const unique T.Flags__VPB:name;
+const unique T.VolumeLabelLength__VPB:name;
+const unique T.DeviceObject__VPB:name;
+const unique T.RealDevice__VPB:name;
+const unique T.SerialNumber__VPB:name;
+const unique T.ReferenceCount__VPB:name;
+const unique T.VolumeLabel__VPB:name;
+const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
+const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
+const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
+const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
+const unique T.GuidCount__WMILIB_CONTEXT:name;
+const unique T.GuidList__WMILIB_CONTEXT:name;
+const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
+const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
+const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
+const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
+const unique T.Start___unnamed_12_06b9ee6e:name;
+const unique T.Length48___unnamed_12_06b9ee6e:name;
+const unique T.Start___unnamed_12_0882bd02:name;
+const unique T.Length64___unnamed_12_0882bd02:name;
+const unique T.__unnamed_12_2e80217b___unnamed_12_264d0dab:name;
+const unique T.Raw___unnamed_12_2e80217b:name;
+const unique T.Translated___unnamed_12_2e80217b:name;
+const unique T.Data___unnamed_12_5cc7ace2:name;
+const unique T.Channel___unnamed_12_6374506e:name;
+const unique T.Port___unnamed_12_6374506e:name;
+const unique T.Reserved1___unnamed_12_6374506e:name;
+const unique T.Priority___unnamed_12_68a4278e:name;
+const unique T.Reserved1___unnamed_12_68a4278e:name;
+const unique T.Reserved2___unnamed_12_68a4278e:name;
+const unique T.Generic___unnamed_12_79ed2653:name;
+const unique T.Port___unnamed_12_79ed2653:name;
+const unique T.Interrupt___unnamed_12_79ed2653:name;
+const unique T.MessageInterrupt___unnamed_12_79ed2653:name;
+const unique T.Memory___unnamed_12_79ed2653:name;
+const unique T.Dma___unnamed_12_79ed2653:name;
+const unique T.DevicePrivate___unnamed_12_79ed2653:name;
+const unique T.BusNumber___unnamed_12_79ed2653:name;
+const unique T.DeviceSpecificData___unnamed_12_79ed2653:name;
+const unique T.Memory40___unnamed_12_79ed2653:name;
+const unique T.Memory48___unnamed_12_79ed2653:name;
+const unique T.Memory64___unnamed_12_79ed2653:name;
+const unique T.Start___unnamed_12_7da594c0:name;
+const unique T.Length40___unnamed_12_7da594c0:name;
+const unique T.Start___unnamed_12_9873e05d:name;
+const unique T.Length___unnamed_12_9873e05d:name;
+const unique T.DataSize___unnamed_12_9cc8cebc:name;
+const unique T.Reserved1___unnamed_12_9cc8cebc:name;
+const unique T.Reserved2___unnamed_12_9cc8cebc:name;
+const unique T.Start___unnamed_12_b98da82e:name;
+const unique T.Length___unnamed_12_b98da82e:name;
+const unique T.Level___unnamed_12_c2880e88:name;
+const unique T.Vector___unnamed_12_c2880e88:name;
+const unique T.Affinity___unnamed_12_c2880e88:name;
+const unique T.Start___unnamed_12_c49ab31a:name;
+const unique T.Length___unnamed_12_c49ab31a:name;
+const unique T.ListEntry___unnamed_12_c6ed93f3:name;
+const unique T.__unnamed_4_a7aa989c___unnamed_12_c6ed93f3:name;
+const unique T.Data___unnamed_12_ced61554:name;
+const unique T.Reserved___unnamed_12_d9c44df5:name;
+const unique T.MessageCount___unnamed_12_d9c44df5:name;
+const unique T.Vector___unnamed_12_d9c44df5:name;
+const unique T.Affinity___unnamed_12_d9c44df5:name;
+const unique T.Start___unnamed_12_db3dcbfc:name;
+const unique T.Length___unnamed_12_db3dcbfc:name;
+const unique T.Reserved___unnamed_12_db3dcbfc:name;
+const unique T.Level___unnamed_12_fb26b3fc:name;
+const unique T.Vector___unnamed_12_fb26b3fc:name;
+const unique T.Affinity___unnamed_12_fb26b3fc:name;
+const unique T.OutputBufferLength___unnamed_16_22e4d054:name;
+const unique T.InputBufferLength___unnamed_16_22e4d054:name;
+const unique T.IoControlCode___unnamed_16_22e4d054:name;
+const unique T.Type3InputBuffer___unnamed_16_22e4d054:name;
+const unique T.Create___unnamed_16_39b626ad:name;
+const unique T.Read___unnamed_16_39b626ad:name;
+const unique T.Write___unnamed_16_39b626ad:name;
+const unique T.QueryDirectory___unnamed_16_39b626ad:name;
+const unique T.NotifyDirectory___unnamed_16_39b626ad:name;
+const unique T.QueryFile___unnamed_16_39b626ad:name;
+const unique T.SetFile___unnamed_16_39b626ad:name;
+const unique T.QueryEa___unnamed_16_39b626ad:name;
+const unique T.SetEa___unnamed_16_39b626ad:name;
+const unique T.QueryVolume___unnamed_16_39b626ad:name;
+const unique T.SetVolume___unnamed_16_39b626ad:name;
+const unique T.FileSystemControl___unnamed_16_39b626ad:name;
+const unique T.LockControl___unnamed_16_39b626ad:name;
+const unique T.DeviceIoControl___unnamed_16_39b626ad:name;
+const unique T.QuerySecurity___unnamed_16_39b626ad:name;
+const unique T.SetSecurity___unnamed_16_39b626ad:name;
+const unique T.MountVolume___unnamed_16_39b626ad:name;
+const unique T.VerifyVolume___unnamed_16_39b626ad:name;
+const unique T.Scsi___unnamed_16_39b626ad:name;
+const unique T.QueryQuota___unnamed_16_39b626ad:name;
+const unique T.SetQuota___unnamed_16_39b626ad:name;
+const unique T.QueryDeviceRelations___unnamed_16_39b626ad:name;
+const unique T.QueryInterface___unnamed_16_39b626ad:name;
+const unique T.DeviceCapabilities___unnamed_16_39b626ad:name;
+const unique T.FilterResourceRequirements___unnamed_16_39b626ad:name;
+const unique T.ReadWriteConfig___unnamed_16_39b626ad:name;
+const unique T.SetLock___unnamed_16_39b626ad:name;
+const unique T.QueryId___unnamed_16_39b626ad:name;
+const unique T.QueryDeviceText___unnamed_16_39b626ad:name;
+const unique T.UsageNotification___unnamed_16_39b626ad:name;
+const unique T.WaitWake___unnamed_16_39b626ad:name;
+const unique T.PowerSequence___unnamed_16_39b626ad:name;
+const unique T.Power___unnamed_16_39b626ad:name;
+const unique T.StartDevice___unnamed_16_39b626ad:name;
+const unique T.WMI___unnamed_16_39b626ad:name;
+const unique T.Others___unnamed_16_39b626ad:name;
+const unique T.WhichSpace___unnamed_16_56c011d7:name;
+const unique T.Buffer___unnamed_16_56c011d7:name;
+const unique T.Offset___unnamed_16_56c011d7:name;
+const unique T.Length___unnamed_16_56c011d7:name;
+const unique T.DeviceQueueEntry___unnamed_16_5fed8f23:name;
+const unique T.__unnamed_16_ae643f17___unnamed_16_5fed8f23:name;
+const unique T.Length___unnamed_16_6be9abe0:name;
+const unique T.FileName___unnamed_16_6be9abe0:name;
+const unique T.FileInformationClass___unnamed_16_6be9abe0:name;
+const unique T.FileIndex___unnamed_16_6be9abe0:name;
+const unique T.InterfaceType___unnamed_16_78879a38:name;
+const unique T.Size___unnamed_16_78879a38:name;
+const unique T.Version___unnamed_16_78879a38:name;
+const unique T.Interface___unnamed_16_78879a38:name;
+const unique T.InterfaceSpecificData___unnamed_16_78879a38:name;
+const unique T.Length___unnamed_16_804a2f24:name;
+const unique T.StartSid___unnamed_16_804a2f24:name;
+const unique T.SidList___unnamed_16_804a2f24:name;
+const unique T.SidListLength___unnamed_16_804a2f24:name;
+const unique T.Argument1___unnamed_16_8586693f:name;
+const unique T.Argument2___unnamed_16_8586693f:name;
+const unique T.Argument3___unnamed_16_8586693f:name;
+const unique T.Argument4___unnamed_16_8586693f:name;
+const unique T.Length___unnamed_16_8831e65f:name;
+const unique T.Key___unnamed_16_8831e65f:name;
+const unique T.ByteOffset___unnamed_16_8831e65f:name;
+const unique T.SecurityContext___unnamed_16_8c2d663a:name;
+const unique T.Options___unnamed_16_8c2d663a:name;
+const unique T.FileAttributes___unnamed_16_8c2d663a:name;
+const unique T.ShareAccess___unnamed_16_8c2d663a:name;
+const unique T.EaLength___unnamed_16_8c2d663a:name;
+const unique T.Length___unnamed_16_913b9a7a:name;
+const unique T.Key___unnamed_16_913b9a7a:name;
+const unique T.ByteOffset___unnamed_16_913b9a7a:name;
+const unique T.OutputBufferLength___unnamed_16_94d1d1c7:name;
+const unique T.InputBufferLength___unnamed_16_94d1d1c7:name;
+const unique T.FsControlCode___unnamed_16_94d1d1c7:name;
+const unique T.Type3InputBuffer___unnamed_16_94d1d1c7:name;
+const unique T.Length___unnamed_16_a2fab4da:name;
+const unique T.FileInformationClass___unnamed_16_a2fab4da:name;
+const unique T.FileObject___unnamed_16_a2fab4da:name;
+const unique T.__unnamed_4_a7d0864c___unnamed_16_a2fab4da:name;
+const unique T.DriverContext___unnamed_16_ae643f17:name;
+const unique T.Length___unnamed_16_c1b29316:name;
+const unique T.Key___unnamed_16_c1b29316:name;
+const unique T.ByteOffset___unnamed_16_c1b29316:name;
+const unique T.ProviderId___unnamed_16_cbd53ed4:name;
+const unique T.DataPath___unnamed_16_cbd53ed4:name;
+const unique T.BufferSize___unnamed_16_cbd53ed4:name;
+const unique T.Buffer___unnamed_16_cbd53ed4:name;
+const unique T.Length___unnamed_16_db70db6e:name;
+const unique T.MinBusNumber___unnamed_16_db70db6e:name;
+const unique T.MaxBusNumber___unnamed_16_db70db6e:name;
+const unique T.Reserved___unnamed_16_db70db6e:name;
+const unique T.Length___unnamed_16_ef4b6307:name;
+const unique T.EaList___unnamed_16_ef4b6307:name;
+const unique T.EaListLength___unnamed_16_ef4b6307:name;
+const unique T.EaIndex___unnamed_16_ef4b6307:name;
+const unique T.__unnamed_4_b060dea6___unnamed_16_fdda1f62:name;
+const unique T.Type___unnamed_16_fdda1f62:name;
+const unique T.State___unnamed_16_fdda1f62:name;
+const unique T.ShutdownType___unnamed_16_fdda1f62:name;
+const unique T.Lock___unnamed_1_1394de4b:name;
+const unique T.Abandoned___unnamed_1_2bb39c56:name;
+const unique T.Absolute___unnamed_1_2bb39c56:name;
+const unique T.NpxIrql___unnamed_1_2bb39c56:name;
+const unique T.Signalling___unnamed_1_2bb39c56:name;
+const unique T.Inserted___unnamed_1_9fa0583a:name;
+const unique T.DebugActive___unnamed_1_9fa0583a:name;
+const unique T.DpcActive___unnamed_1_9fa0583a:name;
+const unique T.Size___unnamed_1_e30779f5:name;
+const unique T.Hand___unnamed_1_e30779f5:name;
+const unique T.MinimumVector___unnamed_20_83d468e4:name;
+const unique T.MaximumVector___unnamed_20_83d468e4:name;
+const unique T.AffinityPolicy___unnamed_20_83d468e4:name;
+const unique T.PriorityPolicy___unnamed_20_83d468e4:name;
+const unique T.TargetedProcessors___unnamed_20_83d468e4:name;
+const unique T.Length40___unnamed_24_035931da:name;
+const unique T.Alignment40___unnamed_24_035931da:name;
+const unique T.MinimumAddress___unnamed_24_035931da:name;
+const unique T.MaximumAddress___unnamed_24_035931da:name;
+const unique T.Length___unnamed_24_38e128db:name;
+const unique T.Alignment___unnamed_24_38e128db:name;
+const unique T.MinimumAddress___unnamed_24_38e128db:name;
+const unique T.MaximumAddress___unnamed_24_38e128db:name;
+const unique T.Length___unnamed_24_9500ea34:name;
+const unique T.Alignment___unnamed_24_9500ea34:name;
+const unique T.MinimumAddress___unnamed_24_9500ea34:name;
+const unique T.MaximumAddress___unnamed_24_9500ea34:name;
+const unique T.Length___unnamed_24_9734802c:name;
+const unique T.Alignment___unnamed_24_9734802c:name;
+const unique T.MinimumAddress___unnamed_24_9734802c:name;
+const unique T.MaximumAddress___unnamed_24_9734802c:name;
+const unique T.Length64___unnamed_24_af62813f:name;
+const unique T.Alignment64___unnamed_24_af62813f:name;
+const unique T.MinimumAddress___unnamed_24_af62813f:name;
+const unique T.MaximumAddress___unnamed_24_af62813f:name;
+const unique T.Length48___unnamed_24_c0555099:name;
+const unique T.Alignment48___unnamed_24_c0555099:name;
+const unique T.MinimumAddress___unnamed_24_c0555099:name;
+const unique T.MaximumAddress___unnamed_24_c0555099:name;
+const unique T.Port___unnamed_24_d7c4ec3a:name;
+const unique T.Memory___unnamed_24_d7c4ec3a:name;
+const unique T.Interrupt___unnamed_24_d7c4ec3a:name;
+const unique T.Dma___unnamed_24_d7c4ec3a:name;
+const unique T.Generic___unnamed_24_d7c4ec3a:name;
+const unique T.DevicePrivate___unnamed_24_d7c4ec3a:name;
+const unique T.BusNumber___unnamed_24_d7c4ec3a:name;
+const unique T.ConfigData___unnamed_24_d7c4ec3a:name;
+const unique T.Memory40___unnamed_24_d7c4ec3a:name;
+const unique T.Memory48___unnamed_24_d7c4ec3a:name;
+const unique T.Memory64___unnamed_24_d7c4ec3a:name;
+const unique T.ReplaceIfExists___unnamed_2_196a7f56:name;
+const unique T.AdvanceOnly___unnamed_2_196a7f56:name;
+const unique T.__unnamed_16_5fed8f23___unnamed_40_a0414182:name;
+const unique T.Thread___unnamed_40_a0414182:name;
+const unique T.AuxiliaryBuffer___unnamed_40_a0414182:name;
+const unique T.__unnamed_12_c6ed93f3___unnamed_40_a0414182:name;
+const unique T.OriginalFileObject___unnamed_40_a0414182:name;
+const unique T.ListEntry___unnamed_40_d90496f4:name;
+const unique T.Wcb___unnamed_40_d90496f4:name;
+const unique T.InitialPrivilegeSet___unnamed_44_a7026dca:name;
+const unique T.PrivilegeSet___unnamed_44_a7026dca:name;
+const unique T.Overlay___unnamed_48_c1da9fa5:name;
+const unique T.Apc___unnamed_48_c1da9fa5:name;
+const unique T.CompletionKey___unnamed_48_c1da9fa5:name;
+const unique T.PowerSequence___unnamed_4_0510b147:name;
+const unique T.Length___unnamed_4_0a569078:name;
+const unique T.Status___unnamed_4_16aff58e:name;
+const unique T.Pointer___unnamed_4_16aff58e:name;
+const unique T.IdType___unnamed_4_40bf8e34:name;
+const unique T.Address___unnamed_4_46b62f69:name;
+const unique T.CreatorBackTraceIndex___unnamed_4_46b62f69:name;
+const unique T.Capabilities___unnamed_4_73d46255:name;
+const unique T.Srb___unnamed_4_765e3037:name;
+const unique T.Type___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_2bb39c56___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_e30779f5___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_9fa0583a___unnamed_4_846adf3f:name;
+const unique T.PowerState___unnamed_4_8dd73d30:name;
+const unique T.Type___unnamed_4_957e0d74:name;
+const unique T.Buttons___unnamed_4_9c11ed91:name;
+const unique T.__unnamed_4_b5247f10___unnamed_4_9c11ed91:name;
+const unique T.IoResourceRequirementList___unnamed_4_a58d40c8:name;
+const unique T.CurrentStackLocation___unnamed_4_a7aa989c:name;
+const unique T.PacketType___unnamed_4_a7aa989c:name;
+const unique T.__unnamed_2_196a7f56___unnamed_4_a7d0864c:name;
+const unique T.ClusterCount___unnamed_4_a7d0864c:name;
+const unique T.DeleteHandle___unnamed_4_a7d0864c:name;
+const unique T.Length___unnamed_4_aa20b426:name;
+const unique T.UserApcRoutine___unnamed_4_ab87ddfd:name;
+const unique T.IssuingProcess___unnamed_4_ab87ddfd:name;
+const unique T.Reserved1___unnamed_4_b016b1e1:name;
+const unique T.TargetSystemState___unnamed_4_b016b1e1:name;
+const unique T.EffectiveSystemState___unnamed_4_b016b1e1:name;
+const unique T.CurrentSystemState___unnamed_4_b016b1e1:name;
+const unique T.IgnoreHibernationPath___unnamed_4_b016b1e1:name;
+const unique T.PseudoTransition___unnamed_4_b016b1e1:name;
+const unique T.Reserved2___unnamed_4_b016b1e1:name;
+const unique T.SystemContext___unnamed_4_b060dea6:name;
+const unique T.SystemPowerStateContext___unnamed_4_b060dea6:name;
+const unique T.__unnamed_4_b016b1e1___unnamed_4_b4f5a780:name;
+const unique T.ContextAsUlong___unnamed_4_b4f5a780:name;
+const unique T.ButtonFlags___unnamed_4_b5247f10:name;
+const unique T.ButtonData___unnamed_4_b5247f10:name;
+const unique T.OwnerCount___unnamed_4_c1e23b02:name;
+const unique T.TableSize___unnamed_4_c1e23b02:name;
+const unique T.__unnamed_4_846adf3f___unnamed_4_c9b2e921:name;
+const unique T.Lock___unnamed_4_c9b2e921:name;
+const unique T.MasterIrp___unnamed_4_fa7b96a7:name;
+const unique T.IrpCount___unnamed_4_fa7b96a7:name;
+const unique T.SystemBuffer___unnamed_4_fa7b96a7:name;
+const unique T.Vpb___unnamed_8_09ad2712:name;
+const unique T.DeviceObject___unnamed_8_09ad2712:name;
+const unique T.Length___unnamed_8_21ac1dba:name;
+const unique T.CompletionFilter___unnamed_8_21ac1dba:name;
+const unique T.Length___unnamed_8_27d3ab76:name;
+const unique T.FsInformationClass___unnamed_8_27d3ab76:name;
+const unique T.Vpb___unnamed_8_4289df81:name;
+const unique T.DeviceObject___unnamed_8_4289df81:name;
+const unique T.Length___unnamed_8_47b72724:name;
+const unique T.FileInformationClass___unnamed_8_47b72724:name;
+const unique T.DeviceTextType___unnamed_8_4b3e3ba3:name;
+const unique T.LocaleId___unnamed_8_4b3e3ba3:name;
+const unique T.__unnamed_4_ab87ddfd___unnamed_8_4f695993:name;
+const unique T.UserApcContext___unnamed_8_4f695993:name;
+const unique T.AllocatedResources___unnamed_8_5cfb6ca4:name;
+const unique T.AllocatedResourcesTranslated___unnamed_8_5cfb6ca4:name;
+const unique T.SecurityInformation___unnamed_8_606438c5:name;
+const unique T.Length___unnamed_8_606438c5:name;
+const unique T.MinimumChannel___unnamed_8_6ad774c0:name;
+const unique T.MaximumChannel___unnamed_8_6ad774c0:name;
+const unique T.Length___unnamed_8_805045cb:name;
+const unique T.FsInformationClass___unnamed_8_805045cb:name;
+const unique T.LowPart___unnamed_8_8684a3e7:name;
+const unique T.HighPart___unnamed_8_8684a3e7:name;
+const unique T.SecurityInformation___unnamed_8_8cc410da:name;
+const unique T.SecurityDescriptor___unnamed_8_8cc410da:name;
+const unique T.InPath___unnamed_8_a47253e0:name;
+const unique T.Reserved___unnamed_8_a47253e0:name;
+const unique T.Type___unnamed_8_a47253e0:name;
+const unique T.AsynchronousParameters___unnamed_8_bbd07f6c:name;
+const unique T.AllocationSize___unnamed_8_bbd07f6c:name;
+const unique T.LowPart___unnamed_8_c9ca8234:name;
+const unique T.HighPart___unnamed_8_c9ca8234:name;
+
+// Type declarations
+
+const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_LIST:name;
+const unique T.A1_LUID_AND_ATTRIBUTES:name;
+const unique T.A256UINT2:name;
+const unique T.A28PFDRIVER_DISPATCH:name;
+const unique T.A2UCHAR:name;
+const unique T.A2UINT2:name;
+const unique T.A32UINT2:name;
+const unique T.A37CHAR:name;
+const unique T.A3UCHAR:name;
+const unique T.A3UINT4:name;
+const unique T.A3_LUID_AND_ATTRIBUTES:name;
+const unique T.A40CHAR:name;
+const unique T.A4PVOID:name;
+const unique T.A4UINT4:name;
+const unique T.A5_DEVICE_POWER_STATE:name;
+const unique T.A65CHAR:name;
+const unique T.A75CHAR:name;
+const unique T.A76CHAR:name;
+const unique T.A7UINT2:name;
+const unique T.A7_DEVICE_POWER_STATE:name;
+const unique T.A80CHAR:name;
+const unique T.A8UCHAR:name;
+const unique T.A9UINT2:name;
+const unique T.BUS_QUERY_ID_TYPE:name;
+const unique T.CHAR:name;
+const unique T.DEVICE_TEXT_TYPE:name;
+const unique T.F0:name;
+const unique T.F1:name;
+const unique T.F10:name;
+const unique T.F11:name;
+const unique T.F12:name;
+const unique T.F13:name;
+const unique T.F14:name;
+const unique T.F15:name;
+const unique T.F16:name;
+const unique T.F17:name;
+const unique T.F18:name;
+const unique T.F19:name;
+const unique T.F2:name;
+const unique T.F20:name;
+const unique T.F21:name;
+const unique T.F22:name;
+const unique T.F23:name;
+const unique T.F24:name;
+const unique T.F25:name;
+const unique T.F26:name;
+const unique T.F27:name;
+const unique T.F28:name;
+const unique T.F29:name;
+const unique T.F3:name;
+const unique T.F30:name;
+const unique T.F31:name;
+const unique T.F32:name;
+const unique T.F33:name;
+const unique T.F34:name;
+const unique T.F35:name;
+const unique T.F36:name;
+const unique T.F37:name;
+const unique T.F38:name;
+const unique T.F4:name;
+const unique T.F5:name;
+const unique T.F6:name;
+const unique T.F7:name;
+const unique T.F8:name;
+const unique T.F9:name;
+const unique T.FDRIVER_ADD_DEVICE:name;
+const unique T.FDRIVER_CANCEL:name;
+const unique T.FDRIVER_CONTROL:name;
+const unique T.FDRIVER_DISPATCH:name;
+const unique T.FDRIVER_INITIALIZE:name;
+const unique T.FDRIVER_STARTIO:name;
+const unique T.FDRIVER_UNLOAD:name;
+const unique T.FFAST_IO_ACQUIRE_FILE:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.FFAST_IO_DETACH_DEVICE:name;
+const unique T.FFAST_IO_DEVICE_CONTROL:name;
+const unique T.FFAST_IO_LOCK:name;
+const unique T.FFAST_IO_MDL_READ:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.FFAST_IO_QUERY_OPEN:name;
+const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.FFAST_IO_READ:name;
+const unique T.FFAST_IO_READ_COMPRESSED:name;
+const unique T.FFAST_IO_RELEASE_FILE:name;
+const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_UNLOCK_ALL:name;
+const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.FFAST_IO_UNLOCK_SINGLE:name;
+const unique T.FFAST_IO_WRITE:name;
+const unique T.FFAST_IO_WRITE_COMPRESSED:name;
+const unique T.FIO_COMPLETION_ROUTINE:name;
+const unique T.FKDEFERRED_ROUTINE:name;
+const unique T.INT2:name;
+const unique T.INT4:name;
+const unique T.INT8:name;
+const unique T.PA2UINT2:name;
+const unique T.PA37CHAR:name;
+const unique T.PA40CHAR:name;
+const unique T.PA4UINT4:name;
+const unique T.PA65CHAR:name;
+const unique T.PA75CHAR:name;
+const unique T.PA76CHAR:name;
+const unique T.PA7UINT2:name;
+const unique T.PA80CHAR:name;
+const unique T.PA9UINT2:name;
+const unique T.PCHAR:name;
+const unique T.PF19:name;
+const unique T.PF21:name;
+const unique T.PF23:name;
+const unique T.PF24:name;
+const unique T.PF25:name;
+const unique T.PF33:name;
+const unique T.PF34:name;
+const unique T.PF35:name;
+const unique T.PF36:name;
+const unique T.PF37:name;
+const unique T.PF38:name;
+const unique T.PFDRIVER_ADD_DEVICE:name;
+const unique T.PFDRIVER_CANCEL:name;
+const unique T.PFDRIVER_CONTROL:name;
+const unique T.PFDRIVER_DISPATCH:name;
+const unique T.PFDRIVER_INITIALIZE:name;
+const unique T.PFDRIVER_STARTIO:name;
+const unique T.PFDRIVER_UNLOAD:name;
+const unique T.PFFAST_IO_ACQUIRE_FILE:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.PFFAST_IO_DETACH_DEVICE:name;
+const unique T.PFFAST_IO_DEVICE_CONTROL:name;
+const unique T.PFFAST_IO_LOCK:name;
+const unique T.PFFAST_IO_MDL_READ:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.PFFAST_IO_QUERY_OPEN:name;
+const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.PFFAST_IO_READ:name;
+const unique T.PFFAST_IO_READ_COMPRESSED:name;
+const unique T.PFFAST_IO_RELEASE_FILE:name;
+const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_UNLOCK_ALL:name;
+const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
+const unique T.PFFAST_IO_WRITE:name;
+const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
+const unique T.PFIO_COMPLETION_ROUTINE:name;
+const unique T.PFKDEFERRED_ROUTINE:name;
+const unique T.PINT4:name;
+const unique T.POWER_ACTION:name;
+const unique T.PPCHAR:name;
+const unique T.PPF24:name;
+const unique T.PPPUINT2:name;
+const unique T.PPP_DEVICE_OBJECT:name;
+const unique T.PPUINT2:name;
+const unique T.PPUINT4:name;
+const unique T.PPVOID:name;
+const unique T.PP_DEVICE_EXTENSION:name;
+const unique T.PP_DEVICE_OBJECT:name;
+const unique T.PP_DRIVER_OBJECT:name;
+const unique T.PP_ERESOURCE:name;
+const unique T.PP_FAST_MUTEX:name;
+const unique T.PP_IO_REMOVE_LOCK:name;
+const unique T.PP_LIST_ENTRY:name;
+const unique T.PP_MDL:name;
+const unique T.PP_UNICODE_STRING:name;
+const unique T.PUCHAR:name;
+const unique T.PUINT2:name;
+const unique T.PUINT4:name;
+const unique T.PVOID:name;
+const unique T.PWMIGUIDREGINFO:name;
+const unique T.P_ACCESS_STATE:name;
+const unique T.P_CM_RESOURCE_LIST:name;
+const unique T.P_COMPRESSED_DATA_INFO:name;
+const unique T.P_DEVICE_CAPABILITIES:name;
+const unique T.P_DEVICE_EXTENSION:name;
+const unique T.P_DEVICE_OBJECT:name;
+const unique T.P_DEVOBJ_EXTENSION:name;
+const unique T.P_DRIVER_EXTENSION:name;
+const unique T.P_DRIVER_OBJECT:name;
+const unique T.P_EPROCESS:name;
+const unique T.P_ERESOURCE:name;
+const unique T.P_ETHREAD:name;
+const unique T.P_FAST_IO_DISPATCH:name;
+const unique T.P_FAST_MUTEX:name;
+const unique T.P_FILE_BASIC_INFORMATION:name;
+const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
+const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.P_FILE_OBJECT:name;
+const unique T.P_FILE_STANDARD_INFORMATION:name;
+const unique T.P_GLOBALS:name;
+const unique T.P_GUID:name;
+const unique T.P_INTERFACE:name;
+const unique T.P_IO_COMPLETION_CONTEXT:name;
+const unique T.P_IO_REMOVE_LOCK:name;
+const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.P_IO_SECURITY_CONTEXT:name;
+const unique T.P_IO_STACK_LOCATION:name;
+const unique T.P_IO_STATUS_BLOCK:name;
+const unique T.P_IO_TIMER:name;
+const unique T.P_IRP:name;
+const unique T.P_KAPC:name;
+const unique T.P_KDPC:name;
+const unique T.P_KEVENT:name;
+const unique T.P_KSEMAPHORE:name;
+const unique T.P_KTHREAD:name;
+const unique T.P_LARGE_INTEGER:name;
+const unique T.P_LIST_ENTRY:name;
+const unique T.P_MDL:name;
+const unique T.P_MOUSE_INPUT_DATA:name;
+const unique T.P_OWNER_ENTRY:name;
+const unique T.P_POOL_TYPE:name;
+const unique T.P_PORT:name;
+const unique T.P_POWER_SEQUENCE:name;
+const unique T.P_SCSI_REQUEST_BLOCK:name;
+const unique T.P_SECTION_OBJECT_POINTERS:name;
+const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.P_UNICODE_STRING:name;
+const unique T.P_VPB:name;
+const unique T.UCHAR:name;
+const unique T.UINT2:name;
+const unique T.UINT4:name;
+const unique T.VOID:name;
+const unique T.WMIENABLEDISABLECONTROL:name;
+const unique T.WMIGUIDREGINFO:name;
+const unique T._ACCESS_STATE:name;
+const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_LIST:name;
+const unique T._CM_RESOURCE_LIST:name;
+const unique T._COMPRESSED_DATA_INFO:name;
+const unique T._DEVICE_CAPABILITIES:name;
+const unique T._DEVICE_EXTENSION:name;
+const unique T._DEVICE_OBJECT:name;
+const unique T._DEVICE_POWER_STATE:name;
+const unique T._DEVICE_RELATION_TYPE:name;
+const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
+const unique T._DEVOBJ_EXTENSION:name;
+const unique T._DISPATCHER_HEADER:name;
+const unique T._DRIVER_EXTENSION:name;
+const unique T._DRIVER_OBJECT:name;
+const unique T._EPROCESS:name;
+const unique T._ERESOURCE:name;
+const unique T._ETHREAD:name;
+const unique T._FAST_IO_DISPATCH:name;
+const unique T._FAST_MUTEX:name;
+const unique T._FILE_BASIC_INFORMATION:name;
+const unique T._FILE_GET_QUOTA_INFORMATION:name;
+const unique T._FILE_INFORMATION_CLASS:name;
+const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T._FILE_OBJECT:name;
+const unique T._FILE_STANDARD_INFORMATION:name;
+const unique T._FSINFOCLASS:name;
+const unique T._GLOBALS:name;
+const unique T._GUID:name;
+const unique T._INITIAL_PRIVILEGE_SET:name;
+const unique T._INTERFACE:name;
+const unique T._INTERFACE_TYPE:name;
+const unique T._IO_ALLOCATION_ACTION:name;
+const unique T._IO_COMPLETION_CONTEXT:name;
+const unique T._IO_REMOVE_LOCK:name;
+const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T._IO_RESOURCE_DESCRIPTOR:name;
+const unique T._IO_RESOURCE_LIST:name;
+const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T._IO_SECURITY_CONTEXT:name;
+const unique T._IO_STACK_LOCATION:name;
+const unique T._IO_STATUS_BLOCK:name;
+const unique T._IO_TIMER:name;
+const unique T._IRP:name;
+const unique T._IRQ_DEVICE_POLICY:name;
+const unique T._IRQ_PRIORITY:name;
+const unique T._KAPC:name;
+const unique T._KDEVICE_QUEUE:name;
+const unique T._KDEVICE_QUEUE_ENTRY:name;
+const unique T._KDPC:name;
+const unique T._KEVENT:name;
+const unique T._KSEMAPHORE:name;
+const unique T._KTHREAD:name;
+const unique T._LARGE_INTEGER:name;
+const unique T._LIST_ENTRY:name;
+const unique T._LUID:name;
+const unique T._LUID_AND_ATTRIBUTES:name;
+const unique T._MDL:name;
+const unique T._MOUSE_ATTRIBUTES:name;
+const unique T._MOUSE_INPUT_DATA:name;
+const unique T._OWNER_ENTRY:name;
+const unique T._POOL_TYPE:name;
+const unique T._PORT:name;
+const unique T._POWER_SEQUENCE:name;
+const unique T._POWER_STATE:name;
+const unique T._POWER_STATE_TYPE:name;
+const unique T._PRIVILEGE_SET:name;
+const unique T._SCSI_REQUEST_BLOCK:name;
+const unique T._SECTION_OBJECT_POINTERS:name;
+const unique T._SECURITY_IMPERSONATION_LEVEL:name;
+const unique T._SECURITY_QUALITY_OF_SERVICE:name;
+const unique T._SECURITY_SUBJECT_CONTEXT:name;
+const unique T._SYSTEM_POWER_STATE:name;
+const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T._UNICODE_STRING:name;
+const unique T._VPB:name;
+const unique T._WAIT_CONTEXT_BLOCK:name;
+const unique T._WMILIB_CONTEXT:name;
+const unique T.__unnamed_12_06b9ee6e:name;
+const unique T.__unnamed_12_0882bd02:name;
+const unique T.__unnamed_12_264d0dab:name;
+const unique T.__unnamed_12_2e80217b:name;
+const unique T.__unnamed_12_5cc7ace2:name;
+const unique T.__unnamed_12_6374506e:name;
+const unique T.__unnamed_12_68a4278e:name;
+const unique T.__unnamed_12_79ed2653:name;
+const unique T.__unnamed_12_7da594c0:name;
+const unique T.__unnamed_12_9873e05d:name;
+const unique T.__unnamed_12_9cc8cebc:name;
+const unique T.__unnamed_12_b98da82e:name;
+const unique T.__unnamed_12_c2880e88:name;
+const unique T.__unnamed_12_c49ab31a:name;
+const unique T.__unnamed_12_c6ed93f3:name;
+const unique T.__unnamed_12_ced61554:name;
+const unique T.__unnamed_12_d9c44df5:name;
+const unique T.__unnamed_12_db3dcbfc:name;
+const unique T.__unnamed_12_fb26b3fc:name;
+const unique T.__unnamed_16_22e4d054:name;
+const unique T.__unnamed_16_39b626ad:name;
+const unique T.__unnamed_16_56c011d7:name;
+const unique T.__unnamed_16_5fed8f23:name;
+const unique T.__unnamed_16_6be9abe0:name;
+const unique T.__unnamed_16_78879a38:name;
+const unique T.__unnamed_16_804a2f24:name;
+const unique T.__unnamed_16_8586693f:name;
+const unique T.__unnamed_16_8831e65f:name;
+const unique T.__unnamed_16_8c2d663a:name;
+const unique T.__unnamed_16_913b9a7a:name;
+const unique T.__unnamed_16_94d1d1c7:name;
+const unique T.__unnamed_16_a2fab4da:name;
+const unique T.__unnamed_16_ae643f17:name;
+const unique T.__unnamed_16_c1b29316:name;
+const unique T.__unnamed_16_cbd53ed4:name;
+const unique T.__unnamed_16_db70db6e:name;
+const unique T.__unnamed_16_ef4b6307:name;
+const unique T.__unnamed_16_fdda1f62:name;
+const unique T.__unnamed_1_1394de4b:name;
+const unique T.__unnamed_1_2bb39c56:name;
+const unique T.__unnamed_1_9fa0583a:name;
+const unique T.__unnamed_1_e30779f5:name;
+const unique T.__unnamed_20_83d468e4:name;
+const unique T.__unnamed_24_035931da:name;
+const unique T.__unnamed_24_38e128db:name;
+const unique T.__unnamed_24_9500ea34:name;
+const unique T.__unnamed_24_9734802c:name;
+const unique T.__unnamed_24_af62813f:name;
+const unique T.__unnamed_24_c0555099:name;
+const unique T.__unnamed_24_d7c4ec3a:name;
+const unique T.__unnamed_2_196a7f56:name;
+const unique T.__unnamed_40_a0414182:name;
+const unique T.__unnamed_40_d90496f4:name;
+const unique T.__unnamed_44_a7026dca:name;
+const unique T.__unnamed_48_c1da9fa5:name;
+const unique T.__unnamed_4_0510b147:name;
+const unique T.__unnamed_4_0a569078:name;
+const unique T.__unnamed_4_16aff58e:name;
+const unique T.__unnamed_4_40bf8e34:name;
+const unique T.__unnamed_4_46b62f69:name;
+const unique T.__unnamed_4_73d46255:name;
+const unique T.__unnamed_4_765e3037:name;
+const unique T.__unnamed_4_846adf3f:name;
+const unique T.__unnamed_4_8dd73d30:name;
+const unique T.__unnamed_4_957e0d74:name;
+const unique T.__unnamed_4_9c11ed91:name;
+const unique T.__unnamed_4_a58d40c8:name;
+const unique T.__unnamed_4_a7aa989c:name;
+const unique T.__unnamed_4_a7d0864c:name;
+const unique T.__unnamed_4_aa20b426:name;
+const unique T.__unnamed_4_ab87ddfd:name;
+const unique T.__unnamed_4_b016b1e1:name;
+const unique T.__unnamed_4_b060dea6:name;
+const unique T.__unnamed_4_b4f5a780:name;
+const unique T.__unnamed_4_b5247f10:name;
+const unique T.__unnamed_4_c1e23b02:name;
+const unique T.__unnamed_4_c9b2e921:name;
+const unique T.__unnamed_4_fa7b96a7:name;
+const unique T.__unnamed_8_09ad2712:name;
+const unique T.__unnamed_8_21ac1dba:name;
+const unique T.__unnamed_8_27d3ab76:name;
+const unique T.__unnamed_8_4289df81:name;
+const unique T.__unnamed_8_47b72724:name;
+const unique T.__unnamed_8_4b3e3ba3:name;
+const unique T.__unnamed_8_4f695993:name;
+const unique T.__unnamed_8_5cfb6ca4:name;
+const unique T.__unnamed_8_606438c5:name;
+const unique T.__unnamed_8_6ad774c0:name;
+const unique T.__unnamed_8_805045cb:name;
+const unique T.__unnamed_8_8684a3e7:name;
+const unique T.__unnamed_8_8cc410da:name;
+const unique T.__unnamed_8_a47253e0:name;
+const unique T.__unnamed_8_bbd07f6c:name;
+const unique T.__unnamed_8_c9ca8234:name;
+
+function Abandoned___unnamed_1_2bb39c56(int) returns (int);
+function Abandoned___unnamed_1_2bb39c56Inv(int) returns (int);
+function _S_Abandoned___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
+function _S_Abandoned___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56Inv(Abandoned___unnamed_1_2bb39c56(x))} Abandoned___unnamed_1_2bb39c56Inv(Abandoned___unnamed_1_2bb39c56(x)) == x);
+axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56Inv(x)} Abandoned___unnamed_1_2bb39c56(Abandoned___unnamed_1_2bb39c56Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_2bb39c56(S)[x]} _S_Abandoned___unnamed_1_2bb39c56(S)[x] <==> S[Abandoned___unnamed_1_2bb39c56Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Abandoned___unnamed_1_2bb39c56Inv(S)[x]} _S_Abandoned___unnamed_1_2bb39c56Inv(S)[x] <==> S[Abandoned___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_2bb39c56(S)} S[x] ==> _S_Abandoned___unnamed_1_2bb39c56(S)[Abandoned___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Abandoned___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_Abandoned___unnamed_1_2bb39c56Inv(S)[Abandoned___unnamed_1_2bb39c56Inv(x)]);
+
+axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56(x)} Abandoned___unnamed_1_2bb39c56(x) == x + 0);
+axiom (forall x:int :: {Abandoned___unnamed_1_2bb39c56Inv(x)} Abandoned___unnamed_1_2bb39c56Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Abandoned___unnamed_1_2bb39c56Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Abandoned___unnamed_1_2bb39c56Inv(x));
+function Absolute___unnamed_1_2bb39c56(int) returns (int);
+function Absolute___unnamed_1_2bb39c56Inv(int) returns (int);
+function _S_Absolute___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
+function _S_Absolute___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56Inv(Absolute___unnamed_1_2bb39c56(x))} Absolute___unnamed_1_2bb39c56Inv(Absolute___unnamed_1_2bb39c56(x)) == x);
+axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56Inv(x)} Absolute___unnamed_1_2bb39c56(Absolute___unnamed_1_2bb39c56Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_2bb39c56(S)[x]} _S_Absolute___unnamed_1_2bb39c56(S)[x] <==> S[Absolute___unnamed_1_2bb39c56Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Absolute___unnamed_1_2bb39c56Inv(S)[x]} _S_Absolute___unnamed_1_2bb39c56Inv(S)[x] <==> S[Absolute___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_2bb39c56(S)} S[x] ==> _S_Absolute___unnamed_1_2bb39c56(S)[Absolute___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Absolute___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_Absolute___unnamed_1_2bb39c56Inv(S)[Absolute___unnamed_1_2bb39c56Inv(x)]);
+
+axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56(x)} Absolute___unnamed_1_2bb39c56(x) == x + 0);
+axiom (forall x:int :: {Absolute___unnamed_1_2bb39c56Inv(x)} Absolute___unnamed_1_2bb39c56Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Absolute___unnamed_1_2bb39c56Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Absolute___unnamed_1_2bb39c56Inv(x));
+function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x))} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 16);
+axiom (forall x:int :: {AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 16);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == AllocateTag__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function BaseClassName__GLOBALS(int) returns (int);
+function BaseClassName__GLOBALSInv(int) returns (int);
+function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
+function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 344);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 344);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1) == BaseClassName__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 344)} MINUS_LEFT_PTR(x, 1, 344) == BaseClassName__GLOBALSInv(x));
+function Blink__LIST_ENTRY(int) returns (int);
+function Blink__LIST_ENTRYInv(int) returns (int);
+function _S_Blink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Blink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x))} Blink__LIST_ENTRYInv(Blink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRY(Blink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRY(S)[x]} _S_Blink__LIST_ENTRY(S)[x] <==> S[Blink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Blink__LIST_ENTRYInv(S)[x]} _S_Blink__LIST_ENTRYInv(S)[x] <==> S[Blink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRY(S)} S[x] ==> _S_Blink__LIST_ENTRY(S)[Blink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blink__LIST_ENTRYInv(S)} S[x] ==> _S_Blink__LIST_ENTRYInv(S)[Blink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == x + 4);
+axiom (forall x:int :: {Blink__LIST_ENTRYInv(x)} Blink__LIST_ENTRYInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Blink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Blink__LIST_ENTRYInv(x));
+function Blocks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x))} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCK(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 56);
+axiom (forall x:int :: {Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 56);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == Blocks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Buffer__UNICODE_STRING(int) returns (int);
+function Buffer__UNICODE_STRINGInv(int) returns (int);
+function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
+function Common__IO_REMOVE_LOCK(int) returns (int);
+function Common__IO_REMOVE_LOCKInv(int) returns (int);
+function _S_Common__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
+function _S_Common__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x))} Common__IO_REMOVE_LOCKInv(Common__IO_REMOVE_LOCK(x)) == x);
+axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCK(Common__IO_REMOVE_LOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCK(S)[x]} _S_Common__IO_REMOVE_LOCK(S)[x] <==> S[Common__IO_REMOVE_LOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Common__IO_REMOVE_LOCKInv(S)[x]} _S_Common__IO_REMOVE_LOCKInv(S)[x] <==> S[Common__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCK(S)} S[x] ==> _S_Common__IO_REMOVE_LOCK(S)[Common__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Common__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Common__IO_REMOVE_LOCKInv(S)[Common__IO_REMOVE_LOCKInv(x)]);
+
+axiom (forall x:int :: {Common__IO_REMOVE_LOCK(x)} Common__IO_REMOVE_LOCK(x) == x + 0);
+axiom (forall x:int :: {Common__IO_REMOVE_LOCKInv(x)} Common__IO_REMOVE_LOCKInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Common__IO_REMOVE_LOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Common__IO_REMOVE_LOCKInv(x));
+function ConnectOneClassToOnePort__GLOBALS(int) returns (int);
+function ConnectOneClassToOnePort__GLOBALSInv(int) returns (int);
+function _S_ConnectOneClassToOnePort__GLOBALS([int]bool) returns ([int]bool);
+function _S_ConnectOneClassToOnePort__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x))} ConnectOneClassToOnePort__GLOBALSInv(ConnectOneClassToOnePort__GLOBALS(x)) == x);
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALS(ConnectOneClassToOnePort__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALS(S)[x]} _S_ConnectOneClassToOnePort__GLOBALS(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ConnectOneClassToOnePort__GLOBALSInv(S)[x]} _S_ConnectOneClassToOnePort__GLOBALSInv(S)[x] <==> S[ConnectOneClassToOnePort__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALS(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALS(S)[ConnectOneClassToOnePort__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ConnectOneClassToOnePort__GLOBALSInv(S)} S[x] ==> _S_ConnectOneClassToOnePort__GLOBALSInv(S)[ConnectOneClassToOnePort__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALS(x)} ConnectOneClassToOnePort__GLOBALS(x) == x + 56);
+axiom (forall x:int :: {ConnectOneClassToOnePort__GLOBALSInv(x)} ConnectOneClassToOnePort__GLOBALSInv(x) == x - 56);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 56, 1) == ConnectOneClassToOnePort__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 56)} MINUS_LEFT_PTR(x, 1, 56) == ConnectOneClassToOnePort__GLOBALSInv(x));
+function DataIn__DEVICE_EXTENSION(int) returns (int);
+function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
+function DataOut__DEVICE_EXTENSION(int) returns (int);
+function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
+function Dbg__IO_REMOVE_LOCK(int) returns (int);
+function Dbg__IO_REMOVE_LOCKInv(int) returns (int);
+function _S_Dbg__IO_REMOVE_LOCK([int]bool) returns ([int]bool);
+function _S_Dbg__IO_REMOVE_LOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x))} Dbg__IO_REMOVE_LOCKInv(Dbg__IO_REMOVE_LOCK(x)) == x);
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCK(Dbg__IO_REMOVE_LOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCK(S)[x]} _S_Dbg__IO_REMOVE_LOCK(S)[x] <==> S[Dbg__IO_REMOVE_LOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Dbg__IO_REMOVE_LOCKInv(S)[x]} _S_Dbg__IO_REMOVE_LOCKInv(S)[x] <==> S[Dbg__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCK(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCK(S)[Dbg__IO_REMOVE_LOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Dbg__IO_REMOVE_LOCKInv(S)} S[x] ==> _S_Dbg__IO_REMOVE_LOCKInv(S)[Dbg__IO_REMOVE_LOCKInv(x)]);
+
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCK(x)} Dbg__IO_REMOVE_LOCK(x) == x + 24);
+axiom (forall x:int :: {Dbg__IO_REMOVE_LOCKInv(x)} Dbg__IO_REMOVE_LOCKInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Dbg__IO_REMOVE_LOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Dbg__IO_REMOVE_LOCKInv(x));
+function DebugActive___unnamed_1_9fa0583a(int) returns (int);
+function DebugActive___unnamed_1_9fa0583aInv(int) returns (int);
+function _S_DebugActive___unnamed_1_9fa0583a([int]bool) returns ([int]bool);
+function _S_DebugActive___unnamed_1_9fa0583aInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583aInv(DebugActive___unnamed_1_9fa0583a(x))} DebugActive___unnamed_1_9fa0583aInv(DebugActive___unnamed_1_9fa0583a(x)) == x);
+axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583aInv(x)} DebugActive___unnamed_1_9fa0583a(DebugActive___unnamed_1_9fa0583aInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_9fa0583a(S)[x]} _S_DebugActive___unnamed_1_9fa0583a(S)[x] <==> S[DebugActive___unnamed_1_9fa0583aInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DebugActive___unnamed_1_9fa0583aInv(S)[x]} _S_DebugActive___unnamed_1_9fa0583aInv(S)[x] <==> S[DebugActive___unnamed_1_9fa0583a(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_9fa0583a(S)} S[x] ==> _S_DebugActive___unnamed_1_9fa0583a(S)[DebugActive___unnamed_1_9fa0583a(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DebugActive___unnamed_1_9fa0583aInv(S)} S[x] ==> _S_DebugActive___unnamed_1_9fa0583aInv(S)[DebugActive___unnamed_1_9fa0583aInv(x)]);
+
+axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583a(x)} DebugActive___unnamed_1_9fa0583a(x) == x + 0);
+axiom (forall x:int :: {DebugActive___unnamed_1_9fa0583aInv(x)} DebugActive___unnamed_1_9fa0583aInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DebugActive___unnamed_1_9fa0583aInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DebugActive___unnamed_1_9fa0583aInv(x));
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
+function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
+function DeviceState__DEVICE_EXTENSION(int) returns (int);
+function DeviceState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x))} DeviceState__DEVICE_EXTENSIONInv(DeviceState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSION(DeviceState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSION(S)[x]} _S_DeviceState__DEVICE_EXTENSION(S)[x] <==> S[DeviceState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_DeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[DeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSION(S)[DeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DeviceState__DEVICE_EXTENSIONInv(S)[DeviceState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSION(x)} DeviceState__DEVICE_EXTENSION(x) == x + 168);
+axiom (forall x:int :: {DeviceState__DEVICE_EXTENSIONInv(x)} DeviceState__DEVICE_EXTENSIONInv(x) == x - 168);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 168, 1) == DeviceState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 168)} MINUS_LEFT_PTR(x, 1, 168) == DeviceState__DEVICE_EXTENSIONInv(x));
+function DpcActive___unnamed_1_9fa0583a(int) returns (int);
+function DpcActive___unnamed_1_9fa0583aInv(int) returns (int);
+function _S_DpcActive___unnamed_1_9fa0583a([int]bool) returns ([int]bool);
+function _S_DpcActive___unnamed_1_9fa0583aInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583aInv(DpcActive___unnamed_1_9fa0583a(x))} DpcActive___unnamed_1_9fa0583aInv(DpcActive___unnamed_1_9fa0583a(x)) == x);
+axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583aInv(x)} DpcActive___unnamed_1_9fa0583a(DpcActive___unnamed_1_9fa0583aInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_9fa0583a(S)[x]} _S_DpcActive___unnamed_1_9fa0583a(S)[x] <==> S[DpcActive___unnamed_1_9fa0583aInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DpcActive___unnamed_1_9fa0583aInv(S)[x]} _S_DpcActive___unnamed_1_9fa0583aInv(S)[x] <==> S[DpcActive___unnamed_1_9fa0583a(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_9fa0583a(S)} S[x] ==> _S_DpcActive___unnamed_1_9fa0583a(S)[DpcActive___unnamed_1_9fa0583a(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DpcActive___unnamed_1_9fa0583aInv(S)} S[x] ==> _S_DpcActive___unnamed_1_9fa0583aInv(S)[DpcActive___unnamed_1_9fa0583aInv(x)]);
+
+axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583a(x)} DpcActive___unnamed_1_9fa0583a(x) == x + 0);
+axiom (forall x:int :: {DpcActive___unnamed_1_9fa0583aInv(x)} DpcActive___unnamed_1_9fa0583aInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == DpcActive___unnamed_1_9fa0583aInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == DpcActive___unnamed_1_9fa0583aInv(x));
+function Enabled__DEVICE_EXTENSION(int) returns (int);
+function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 264);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 264);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1) == Enabled__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 264)} MINUS_LEFT_PTR(x, 1, 264) == Enabled__DEVICE_EXTENSIONInv(x));
+function ExecuteWmiMethod__WMILIB_CONTEXT(int) returns (int);
+function ExecuteWmiMethod__WMILIB_CONTEXTInv(int) returns (int);
+function _S_ExecuteWmiMethod__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_ExecuteWmiMethod__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x))} ExecuteWmiMethod__WMILIB_CONTEXTInv(ExecuteWmiMethod__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXT(ExecuteWmiMethod__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x]} _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[x] <==> S[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXT(S)[ExecuteWmiMethod__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)} S[x] ==> _S_ExecuteWmiMethod__WMILIB_CONTEXTInv(S)[ExecuteWmiMethod__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXT(x)} ExecuteWmiMethod__WMILIB_CONTEXT(x) == x + 24);
+axiom (forall x:int :: {ExecuteWmiMethod__WMILIB_CONTEXTInv(x)} ExecuteWmiMethod__WMILIB_CONTEXTInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == ExecuteWmiMethod__WMILIB_CONTEXTInv(x));
+function ExtraWaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
+function ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_ExtraWaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x))} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(ExtraWaitWakeIrp__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSION(S)[ExtraWaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(S)[ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSION(x)} ExtraWaitWakeIrp__DEVICE_EXTENSION(x) == x + 244);
+axiom (forall x:int :: {ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x)} ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 244);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 244, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 244, 1) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 244)} MINUS_LEFT_PTR(x, 1, 244) == ExtraWaitWakeIrp__DEVICE_EXTENSIONInv(x));
+function File__DEVICE_EXTENSION(int) returns (int);
+function File__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 260);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 260);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == File__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == File__DEVICE_EXTENSIONInv(x));
+function Flags__DEVICE_OBJECT(int) returns (int);
+function Flags__DEVICE_OBJECTInv(int) returns (int);
+function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
+function Flink__LIST_ENTRY(int) returns (int);
+function Flink__LIST_ENTRYInv(int) returns (int);
+function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
+function GrandMaster__GLOBALS(int) returns (int);
+function GrandMaster__GLOBALSInv(int) returns (int);
+function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
+function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
+function GuidCount__WMILIB_CONTEXT(int) returns (int);
+function GuidCount__WMILIB_CONTEXTInv(int) returns (int);
+function _S_GuidCount__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_GuidCount__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x))} GuidCount__WMILIB_CONTEXTInv(GuidCount__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXT(GuidCount__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXT(S)[x]} _S_GuidCount__WMILIB_CONTEXT(S)[x] <==> S[GuidCount__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GuidCount__WMILIB_CONTEXTInv(S)[x]} _S_GuidCount__WMILIB_CONTEXTInv(S)[x] <==> S[GuidCount__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXT(S)[GuidCount__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidCount__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidCount__WMILIB_CONTEXTInv(S)[GuidCount__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXT(x)} GuidCount__WMILIB_CONTEXT(x) == x + 0);
+axiom (forall x:int :: {GuidCount__WMILIB_CONTEXTInv(x)} GuidCount__WMILIB_CONTEXTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == GuidCount__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == GuidCount__WMILIB_CONTEXTInv(x));
+function GuidList__WMILIB_CONTEXT(int) returns (int);
+function GuidList__WMILIB_CONTEXTInv(int) returns (int);
+function _S_GuidList__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_GuidList__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x))} GuidList__WMILIB_CONTEXTInv(GuidList__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXT(GuidList__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXT(S)[x]} _S_GuidList__WMILIB_CONTEXT(S)[x] <==> S[GuidList__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GuidList__WMILIB_CONTEXTInv(S)[x]} _S_GuidList__WMILIB_CONTEXTInv(S)[x] <==> S[GuidList__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXT(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXT(S)[GuidList__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GuidList__WMILIB_CONTEXTInv(S)} S[x] ==> _S_GuidList__WMILIB_CONTEXTInv(S)[GuidList__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXT(x)} GuidList__WMILIB_CONTEXT(x) == x + 4);
+axiom (forall x:int :: {GuidList__WMILIB_CONTEXTInv(x)} GuidList__WMILIB_CONTEXTInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GuidList__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GuidList__WMILIB_CONTEXTInv(x));
+function Hand___unnamed_1_e30779f5(int) returns (int);
+function Hand___unnamed_1_e30779f5Inv(int) returns (int);
+function _S_Hand___unnamed_1_e30779f5([int]bool) returns ([int]bool);
+function _S_Hand___unnamed_1_e30779f5Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Hand___unnamed_1_e30779f5Inv(Hand___unnamed_1_e30779f5(x))} Hand___unnamed_1_e30779f5Inv(Hand___unnamed_1_e30779f5(x)) == x);
+axiom (forall x:int :: {Hand___unnamed_1_e30779f5Inv(x)} Hand___unnamed_1_e30779f5(Hand___unnamed_1_e30779f5Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_e30779f5(S)[x]} _S_Hand___unnamed_1_e30779f5(S)[x] <==> S[Hand___unnamed_1_e30779f5Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Hand___unnamed_1_e30779f5Inv(S)[x]} _S_Hand___unnamed_1_e30779f5Inv(S)[x] <==> S[Hand___unnamed_1_e30779f5(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_e30779f5(S)} S[x] ==> _S_Hand___unnamed_1_e30779f5(S)[Hand___unnamed_1_e30779f5(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Hand___unnamed_1_e30779f5Inv(S)} S[x] ==> _S_Hand___unnamed_1_e30779f5Inv(S)[Hand___unnamed_1_e30779f5Inv(x)]);
+
+axiom (forall x:int :: {Hand___unnamed_1_e30779f5(x)} Hand___unnamed_1_e30779f5(x) == x + 0);
+axiom (forall x:int :: {Hand___unnamed_1_e30779f5Inv(x)} Hand___unnamed_1_e30779f5Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Hand___unnamed_1_e30779f5Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Hand___unnamed_1_e30779f5Inv(x));
+function Header__KEVENT(int) returns (int);
+function Header__KEVENTInv(int) returns (int);
+function _S_Header__KEVENT([int]bool) returns ([int]bool);
+function _S_Header__KEVENTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Header__KEVENTInv(Header__KEVENT(x))} Header__KEVENTInv(Header__KEVENT(x)) == x);
+axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENT(Header__KEVENTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENT(S)[x]} _S_Header__KEVENT(S)[x] <==> S[Header__KEVENTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Header__KEVENTInv(S)[x]} _S_Header__KEVENTInv(S)[x] <==> S[Header__KEVENT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENT(S)} S[x] ==> _S_Header__KEVENT(S)[Header__KEVENT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Header__KEVENTInv(S)} S[x] ==> _S_Header__KEVENTInv(S)[Header__KEVENTInv(x)]);
+
+axiom (forall x:int :: {Header__KEVENT(x)} Header__KEVENT(x) == x + 0);
+axiom (forall x:int :: {Header__KEVENTInv(x)} Header__KEVENTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Header__KEVENTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Header__KEVENTInv(x));
+function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x))} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 4);
+axiom (forall x:int :: {HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == HighWatermark__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function InputCount__DEVICE_EXTENSION(int) returns (int);
+function InputCount__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x))} InputCount__DEVICE_EXTENSIONInv(InputCount__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSION(InputCount__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSION(S)[x]} _S_InputCount__DEVICE_EXTENSION(S)[x] <==> S[InputCount__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputCount__DEVICE_EXTENSIONInv(S)[x]} _S_InputCount__DEVICE_EXTENSIONInv(S)[x] <==> S[InputCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSION(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSION(S)[InputCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputCount__DEVICE_EXTENSIONInv(S)[InputCount__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSION(x)} InputCount__DEVICE_EXTENSION(x) == x + 116);
+axiom (forall x:int :: {InputCount__DEVICE_EXTENSIONInv(x)} InputCount__DEVICE_EXTENSIONInv(x) == x - 116);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 116, 1) == InputCount__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 116)} MINUS_LEFT_PTR(x, 1, 116) == InputCount__DEVICE_EXTENSIONInv(x));
+function InputDataQueueLength__MOUSE_ATTRIBUTES(int) returns (int);
+function InputDataQueueLength__MOUSE_ATTRIBUTESInv(int) returns (int);
+function _S_InputDataQueueLength__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTESInv(InputDataQueueLength__MOUSE_ATTRIBUTES(x))} InputDataQueueLength__MOUSE_ATTRIBUTESInv(InputDataQueueLength__MOUSE_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)} InputDataQueueLength__MOUSE_ATTRIBUTES(InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)[x]} _S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)[x] <==> S[InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)[x]} _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)[x] <==> S[InputDataQueueLength__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_InputDataQueueLength__MOUSE_ATTRIBUTES(S)[InputDataQueueLength__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_InputDataQueueLength__MOUSE_ATTRIBUTESInv(S)[InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTES(x)} InputDataQueueLength__MOUSE_ATTRIBUTES(x) == x + 8);
+axiom (forall x:int :: {InputDataQueueLength__MOUSE_ATTRIBUTESInv(x)} InputDataQueueLength__MOUSE_ATTRIBUTESInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == InputDataQueueLength__MOUSE_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == InputDataQueueLength__MOUSE_ATTRIBUTESInv(x));
+function InputData__DEVICE_EXTENSION(int) returns (int);
+function InputData__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
+function Inserted___unnamed_1_9fa0583a(int) returns (int);
+function Inserted___unnamed_1_9fa0583aInv(int) returns (int);
+function _S_Inserted___unnamed_1_9fa0583a([int]bool) returns ([int]bool);
+function _S_Inserted___unnamed_1_9fa0583aInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Inserted___unnamed_1_9fa0583aInv(Inserted___unnamed_1_9fa0583a(x))} Inserted___unnamed_1_9fa0583aInv(Inserted___unnamed_1_9fa0583a(x)) == x);
+axiom (forall x:int :: {Inserted___unnamed_1_9fa0583aInv(x)} Inserted___unnamed_1_9fa0583a(Inserted___unnamed_1_9fa0583aInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_9fa0583a(S)[x]} _S_Inserted___unnamed_1_9fa0583a(S)[x] <==> S[Inserted___unnamed_1_9fa0583aInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Inserted___unnamed_1_9fa0583aInv(S)[x]} _S_Inserted___unnamed_1_9fa0583aInv(S)[x] <==> S[Inserted___unnamed_1_9fa0583a(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_9fa0583a(S)} S[x] ==> _S_Inserted___unnamed_1_9fa0583a(S)[Inserted___unnamed_1_9fa0583a(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Inserted___unnamed_1_9fa0583aInv(S)} S[x] ==> _S_Inserted___unnamed_1_9fa0583aInv(S)[Inserted___unnamed_1_9fa0583aInv(x)]);
+
+axiom (forall x:int :: {Inserted___unnamed_1_9fa0583a(x)} Inserted___unnamed_1_9fa0583a(x) == x + 0);
+axiom (forall x:int :: {Inserted___unnamed_1_9fa0583aInv(x)} Inserted___unnamed_1_9fa0583aInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Inserted___unnamed_1_9fa0583aInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Inserted___unnamed_1_9fa0583aInv(x));
+function IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x))} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 4);
+axiom (forall x:int :: {IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == IoCount__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function LegacyDeviceList__GLOBALS(int) returns (int);
+function LegacyDeviceList__GLOBALSInv(int) returns (int);
+function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
+function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 864);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 864);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1) == LegacyDeviceList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 864)} MINUS_LEFT_PTR(x, 1, 864) == LegacyDeviceList__GLOBALSInv(x));
+function Length__UNICODE_STRING(int) returns (int);
+function Length__UNICODE_STRINGInv(int) returns (int);
+function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
+function Link__DEVICE_EXTENSION(int) returns (int);
+function Link__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 252);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 252);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == Link__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == Link__DEVICE_EXTENSIONInv(x));
+function LockList__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x))} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCK(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCK(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 20);
+axiom (forall x:int :: {LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 20);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == LockList__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Lock___unnamed_4_c9b2e921(int) returns (int);
+function Lock___unnamed_4_c9b2e921Inv(int) returns (int);
+function _S_Lock___unnamed_4_c9b2e921([int]bool) returns ([int]bool);
+function _S_Lock___unnamed_4_c9b2e921Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Lock___unnamed_4_c9b2e921Inv(Lock___unnamed_4_c9b2e921(x))} Lock___unnamed_4_c9b2e921Inv(Lock___unnamed_4_c9b2e921(x)) == x);
+axiom (forall x:int :: {Lock___unnamed_4_c9b2e921Inv(x)} Lock___unnamed_4_c9b2e921(Lock___unnamed_4_c9b2e921Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_c9b2e921(S)[x]} _S_Lock___unnamed_4_c9b2e921(S)[x] <==> S[Lock___unnamed_4_c9b2e921Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Lock___unnamed_4_c9b2e921Inv(S)[x]} _S_Lock___unnamed_4_c9b2e921Inv(S)[x] <==> S[Lock___unnamed_4_c9b2e921(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_c9b2e921(S)} S[x] ==> _S_Lock___unnamed_4_c9b2e921(S)[Lock___unnamed_4_c9b2e921(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Lock___unnamed_4_c9b2e921Inv(S)} S[x] ==> _S_Lock___unnamed_4_c9b2e921Inv(S)[Lock___unnamed_4_c9b2e921Inv(x)]);
+
+axiom (forall x:int :: {Lock___unnamed_4_c9b2e921(x)} Lock___unnamed_4_c9b2e921(x) == x + 0);
+axiom (forall x:int :: {Lock___unnamed_4_c9b2e921Inv(x)} Lock___unnamed_4_c9b2e921Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Lock___unnamed_4_c9b2e921Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Lock___unnamed_4_c9b2e921Inv(x));
+function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x))} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 32);
+axiom (forall x:int :: {LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 32);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 32, 1) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 32)} MINUS_LEFT_PTR(x, 1, 32) == LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x))} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 8);
+axiom (forall x:int :: {MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function MaximumLength__UNICODE_STRING(int) returns (int);
+function MaximumLength__UNICODE_STRINGInv(int) returns (int);
+function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
+function MinDeviceWakeState__DEVICE_EXTENSION(int) returns (int);
+function MinDeviceWakeState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_MinDeviceWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_MinDeviceWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x))} MinDeviceWakeState__DEVICE_EXTENSIONInv(MinDeviceWakeState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSION(MinDeviceWakeState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSION(S)[MinDeviceWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinDeviceWakeState__DEVICE_EXTENSIONInv(S)[MinDeviceWakeState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSION(x)} MinDeviceWakeState__DEVICE_EXTENSION(x) == x + 232);
+axiom (forall x:int :: {MinDeviceWakeState__DEVICE_EXTENSIONInv(x)} MinDeviceWakeState__DEVICE_EXTENSIONInv(x) == x - 232);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 232, 1) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 232)} MINUS_LEFT_PTR(x, 1, 232) == MinDeviceWakeState__DEVICE_EXTENSIONInv(x));
+function MinSystemWakeState__DEVICE_EXTENSION(int) returns (int);
+function MinSystemWakeState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_MinSystemWakeState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_MinSystemWakeState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x))} MinSystemWakeState__DEVICE_EXTENSIONInv(MinSystemWakeState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSION(MinSystemWakeState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSION(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSION(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x]} _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[x] <==> S[MinSystemWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSION(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSION(S)[MinSystemWakeState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MinSystemWakeState__DEVICE_EXTENSIONInv(S)[MinSystemWakeState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSION(x)} MinSystemWakeState__DEVICE_EXTENSION(x) == x + 236);
+axiom (forall x:int :: {MinSystemWakeState__DEVICE_EXTENSIONInv(x)} MinSystemWakeState__DEVICE_EXTENSIONInv(x) == x - 236);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 236, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 236, 1) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 236)} MINUS_LEFT_PTR(x, 1, 236) == MinSystemWakeState__DEVICE_EXTENSIONInv(x));
+function MouseAttributes__DEVICE_EXTENSION(int) returns (int);
+function MouseAttributes__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_MouseAttributes__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_MouseAttributes__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSIONInv(MouseAttributes__DEVICE_EXTENSION(x))} MouseAttributes__DEVICE_EXTENSIONInv(MouseAttributes__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSIONInv(x)} MouseAttributes__DEVICE_EXTENSION(MouseAttributes__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MouseAttributes__DEVICE_EXTENSION(S)[x]} _S_MouseAttributes__DEVICE_EXTENSION(S)[x] <==> S[MouseAttributes__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MouseAttributes__DEVICE_EXTENSIONInv(S)[x]} _S_MouseAttributes__DEVICE_EXTENSIONInv(S)[x] <==> S[MouseAttributes__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseAttributes__DEVICE_EXTENSION(S)} S[x] ==> _S_MouseAttributes__DEVICE_EXTENSION(S)[MouseAttributes__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseAttributes__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_MouseAttributes__DEVICE_EXTENSIONInv(S)[MouseAttributes__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSION(x)} MouseAttributes__DEVICE_EXTENSION(x) == x + 140);
+axiom (forall x:int :: {MouseAttributes__DEVICE_EXTENSIONInv(x)} MouseAttributes__DEVICE_EXTENSIONInv(x) == x - 140);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 140, 1) == MouseAttributes__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 140)} MINUS_LEFT_PTR(x, 1, 140) == MouseAttributes__DEVICE_EXTENSIONInv(x));
+function MouseIdentifier__MOUSE_ATTRIBUTES(int) returns (int);
+function MouseIdentifier__MOUSE_ATTRIBUTESInv(int) returns (int);
+function _S_MouseIdentifier__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_MouseIdentifier__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTESInv(MouseIdentifier__MOUSE_ATTRIBUTES(x))} MouseIdentifier__MOUSE_ATTRIBUTESInv(MouseIdentifier__MOUSE_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTESInv(x)} MouseIdentifier__MOUSE_ATTRIBUTES(MouseIdentifier__MOUSE_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MouseIdentifier__MOUSE_ATTRIBUTES(S)[x]} _S_MouseIdentifier__MOUSE_ATTRIBUTES(S)[x] <==> S[MouseIdentifier__MOUSE_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)[x]} _S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)[x] <==> S[MouseIdentifier__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseIdentifier__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_MouseIdentifier__MOUSE_ATTRIBUTES(S)[MouseIdentifier__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_MouseIdentifier__MOUSE_ATTRIBUTESInv(S)[MouseIdentifier__MOUSE_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTES(x)} MouseIdentifier__MOUSE_ATTRIBUTES(x) == x + 0);
+axiom (forall x:int :: {MouseIdentifier__MOUSE_ATTRIBUTESInv(x)} MouseIdentifier__MOUSE_ATTRIBUTESInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == MouseIdentifier__MOUSE_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == MouseIdentifier__MOUSE_ATTRIBUTESInv(x));
+function Mutex__GLOBALS(int) returns (int);
+function Mutex__GLOBALSInv(int) returns (int);
+function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
+function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
+function NpxIrql___unnamed_1_2bb39c56(int) returns (int);
+function NpxIrql___unnamed_1_2bb39c56Inv(int) returns (int);
+function _S_NpxIrql___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
+function _S_NpxIrql___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56Inv(NpxIrql___unnamed_1_2bb39c56(x))} NpxIrql___unnamed_1_2bb39c56Inv(NpxIrql___unnamed_1_2bb39c56(x)) == x);
+axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56Inv(x)} NpxIrql___unnamed_1_2bb39c56(NpxIrql___unnamed_1_2bb39c56Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_2bb39c56(S)[x]} _S_NpxIrql___unnamed_1_2bb39c56(S)[x] <==> S[NpxIrql___unnamed_1_2bb39c56Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NpxIrql___unnamed_1_2bb39c56Inv(S)[x]} _S_NpxIrql___unnamed_1_2bb39c56Inv(S)[x] <==> S[NpxIrql___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_2bb39c56(S)} S[x] ==> _S_NpxIrql___unnamed_1_2bb39c56(S)[NpxIrql___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NpxIrql___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_NpxIrql___unnamed_1_2bb39c56Inv(S)[NpxIrql___unnamed_1_2bb39c56Inv(x)]);
+
+axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56(x)} NpxIrql___unnamed_1_2bb39c56(x) == x + 0);
+axiom (forall x:int :: {NpxIrql___unnamed_1_2bb39c56Inv(x)} NpxIrql___unnamed_1_2bb39c56Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == NpxIrql___unnamed_1_2bb39c56Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == NpxIrql___unnamed_1_2bb39c56Inv(x));
+function NumberOfButtons__MOUSE_ATTRIBUTES(int) returns (int);
+function NumberOfButtons__MOUSE_ATTRIBUTESInv(int) returns (int);
+function _S_NumberOfButtons__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_NumberOfButtons__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTESInv(NumberOfButtons__MOUSE_ATTRIBUTES(x))} NumberOfButtons__MOUSE_ATTRIBUTESInv(NumberOfButtons__MOUSE_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTESInv(x)} NumberOfButtons__MOUSE_ATTRIBUTES(NumberOfButtons__MOUSE_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfButtons__MOUSE_ATTRIBUTES(S)[x]} _S_NumberOfButtons__MOUSE_ATTRIBUTES(S)[x] <==> S[NumberOfButtons__MOUSE_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)[x]} _S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)[x] <==> S[NumberOfButtons__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfButtons__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_NumberOfButtons__MOUSE_ATTRIBUTES(S)[NumberOfButtons__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_NumberOfButtons__MOUSE_ATTRIBUTESInv(S)[NumberOfButtons__MOUSE_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTES(x)} NumberOfButtons__MOUSE_ATTRIBUTES(x) == x + 2);
+axiom (forall x:int :: {NumberOfButtons__MOUSE_ATTRIBUTESInv(x)} NumberOfButtons__MOUSE_ATTRIBUTESInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == NumberOfButtons__MOUSE_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == NumberOfButtons__MOUSE_ATTRIBUTESInv(x));
+function OkayToLogOverflow__DEVICE_EXTENSION(int) returns (int);
+function OkayToLogOverflow__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_OkayToLogOverflow__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_OkayToLogOverflow__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x))} OkayToLogOverflow__DEVICE_EXTENSIONInv(OkayToLogOverflow__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSION(OkayToLogOverflow__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x]} _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[x] <==> S[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSION(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSION(S)[OkayToLogOverflow__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_OkayToLogOverflow__DEVICE_EXTENSIONInv(S)[OkayToLogOverflow__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSION(x)} OkayToLogOverflow__DEVICE_EXTENSION(x) == x + 106);
+axiom (forall x:int :: {OkayToLogOverflow__DEVICE_EXTENSIONInv(x)} OkayToLogOverflow__DEVICE_EXTENSIONInv(x) == x - 106);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 106, 1) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 106)} MINUS_LEFT_PTR(x, 1, 106) == OkayToLogOverflow__DEVICE_EXTENSIONInv(x));
+function PDO__DEVICE_EXTENSION(int) returns (int);
+function PDO__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PDO__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PDO__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x))} PDO__DEVICE_EXTENSIONInv(PDO__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSION(PDO__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSION(S)[x]} _S_PDO__DEVICE_EXTENSION(S)[x] <==> S[PDO__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PDO__DEVICE_EXTENSIONInv(S)[x]} _S_PDO__DEVICE_EXTENSIONInv(S)[x] <==> S[PDO__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSION(S)} S[x] ==> _S_PDO__DEVICE_EXTENSION(S)[PDO__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PDO__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PDO__DEVICE_EXTENSIONInv(S)[PDO__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PDO__DEVICE_EXTENSION(x)} PDO__DEVICE_EXTENSION(x) == x + 12);
+axiom (forall x:int :: {PDO__DEVICE_EXTENSIONInv(x)} PDO__DEVICE_EXTENSIONInv(x) == x - 12);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == PDO__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == PDO__DEVICE_EXTENSIONInv(x));
+function PnP__DEVICE_EXTENSION(int) returns (int);
+function PnP__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
+function QueryWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
+function QueryWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
+function _S_QueryWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_QueryWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x))} QueryWmiDataBlock__WMILIB_CONTEXTInv(QueryWmiDataBlock__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXT(QueryWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXT(S)[QueryWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiDataBlock__WMILIB_CONTEXTInv(S)[QueryWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXT(x)} QueryWmiDataBlock__WMILIB_CONTEXT(x) == x + 12);
+axiom (forall x:int :: {QueryWmiDataBlock__WMILIB_CONTEXTInv(x)} QueryWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 12);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == QueryWmiDataBlock__WMILIB_CONTEXTInv(x));
+function QueryWmiRegInfo__WMILIB_CONTEXT(int) returns (int);
+function QueryWmiRegInfo__WMILIB_CONTEXTInv(int) returns (int);
+function _S_QueryWmiRegInfo__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_QueryWmiRegInfo__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x))} QueryWmiRegInfo__WMILIB_CONTEXTInv(QueryWmiRegInfo__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXT(QueryWmiRegInfo__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x]} _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[x] <==> S[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXT(S)[QueryWmiRegInfo__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)} S[x] ==> _S_QueryWmiRegInfo__WMILIB_CONTEXTInv(S)[QueryWmiRegInfo__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXT(x)} QueryWmiRegInfo__WMILIB_CONTEXT(x) == x + 8);
+axiom (forall x:int :: {QueryWmiRegInfo__WMILIB_CONTEXTInv(x)} QueryWmiRegInfo__WMILIB_CONTEXTInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == QueryWmiRegInfo__WMILIB_CONTEXTInv(x));
+function ReadQueue__DEVICE_EXTENSION(int) returns (int);
+function ReadQueue__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_ReadQueue__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_ReadQueue__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x))} ReadQueue__DEVICE_EXTENSIONInv(ReadQueue__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSION(ReadQueue__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSION(S)[x]} _S_ReadQueue__DEVICE_EXTENSION(S)[x] <==> S[ReadQueue__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_ReadQueue__DEVICE_EXTENSIONInv(S)[x]} _S_ReadQueue__DEVICE_EXTENSIONInv(S)[x] <==> S[ReadQueue__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSION(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSION(S)[ReadQueue__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_ReadQueue__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_ReadQueue__DEVICE_EXTENSIONInv(S)[ReadQueue__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSION(x)} ReadQueue__DEVICE_EXTENSION(x) == x + 156);
+axiom (forall x:int :: {ReadQueue__DEVICE_EXTENSIONInv(x)} ReadQueue__DEVICE_EXTENSIONInv(x) == x - 156);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 156, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 156, 1) == ReadQueue__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 156)} MINUS_LEFT_PTR(x, 1, 156) == ReadQueue__DEVICE_EXTENSIONInv(x));
+function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x))} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 8);
+axiom (forall x:int :: {RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function RemoveLock__DEVICE_EXTENSION(int) returns (int);
+function RemoveLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_RemoveLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_RemoveLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x))} RemoveLock__DEVICE_EXTENSIONInv(RemoveLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSION(RemoveLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSION(S)[x]} _S_RemoveLock__DEVICE_EXTENSION(S)[x] <==> S[RemoveLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_RemoveLock__DEVICE_EXTENSIONInv(S)[x]} _S_RemoveLock__DEVICE_EXTENSIONInv(S)[x] <==> S[RemoveLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSION(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSION(S)[RemoveLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RemoveLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_RemoveLock__DEVICE_EXTENSIONInv(S)[RemoveLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSION(x)} RemoveLock__DEVICE_EXTENSION(x) == x + 16);
+axiom (forall x:int :: {RemoveLock__DEVICE_EXTENSIONInv(x)} RemoveLock__DEVICE_EXTENSIONInv(x) == x - 16);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == RemoveLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == RemoveLock__DEVICE_EXTENSIONInv(x));
+function Removed__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 0);
+axiom (forall x:int :: {Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Removed__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 36);
+axiom (forall x:int :: {Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 36);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 36, 1) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 36)} MINUS_LEFT_PTR(x, 1, 36) == Reserved1__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x))} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 52);
+axiom (forall x:int :: {Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 52);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 52, 1) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 52)} MINUS_LEFT_PTR(x, 1, 52) == Reserved2__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(int) returns (int);
+function Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(int) returns (int);
+function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK([int]bool) returns ([int]bool);
+function _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x))} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)) == x);
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x]} _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[x] <==> S[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)} S[x] ==> _S_Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(S)[Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCK(x) == x + 1);
+axiom (forall x:int :: {Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x)} Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x) == x - 1);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == Reserved__IO_REMOVE_LOCK_COMMON_BLOCKInv(x));
+function SampleRate__MOUSE_ATTRIBUTES(int) returns (int);
+function SampleRate__MOUSE_ATTRIBUTESInv(int) returns (int);
+function _S_SampleRate__MOUSE_ATTRIBUTES([int]bool) returns ([int]bool);
+function _S_SampleRate__MOUSE_ATTRIBUTESInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTESInv(SampleRate__MOUSE_ATTRIBUTES(x))} SampleRate__MOUSE_ATTRIBUTESInv(SampleRate__MOUSE_ATTRIBUTES(x)) == x);
+axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTESInv(x)} SampleRate__MOUSE_ATTRIBUTES(SampleRate__MOUSE_ATTRIBUTESInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SampleRate__MOUSE_ATTRIBUTES(S)[x]} _S_SampleRate__MOUSE_ATTRIBUTES(S)[x] <==> S[SampleRate__MOUSE_ATTRIBUTESInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SampleRate__MOUSE_ATTRIBUTESInv(S)[x]} _S_SampleRate__MOUSE_ATTRIBUTESInv(S)[x] <==> S[SampleRate__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SampleRate__MOUSE_ATTRIBUTES(S)} S[x] ==> _S_SampleRate__MOUSE_ATTRIBUTES(S)[SampleRate__MOUSE_ATTRIBUTES(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SampleRate__MOUSE_ATTRIBUTESInv(S)} S[x] ==> _S_SampleRate__MOUSE_ATTRIBUTESInv(S)[SampleRate__MOUSE_ATTRIBUTESInv(x)]);
+
+axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTES(x)} SampleRate__MOUSE_ATTRIBUTES(x) == x + 4);
+axiom (forall x:int :: {SampleRate__MOUSE_ATTRIBUTESInv(x)} SampleRate__MOUSE_ATTRIBUTESInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == SampleRate__MOUSE_ATTRIBUTESInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == SampleRate__MOUSE_ATTRIBUTESInv(x));
+function Self__DEVICE_EXTENSION(int) returns (int);
+function Self__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
+function SequenceNumber__DEVICE_EXTENSION(int) returns (int);
+function SequenceNumber__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SequenceNumber__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SequenceNumber__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x))} SequenceNumber__DEVICE_EXTENSIONInv(SequenceNumber__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSION(SequenceNumber__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSION(S)[x]} _S_SequenceNumber__DEVICE_EXTENSION(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x]} _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[x] <==> S[SequenceNumber__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSION(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSION(S)[SequenceNumber__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SequenceNumber__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SequenceNumber__DEVICE_EXTENSIONInv(S)[SequenceNumber__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSION(x)} SequenceNumber__DEVICE_EXTENSION(x) == x + 164);
+axiom (forall x:int :: {SequenceNumber__DEVICE_EXTENSIONInv(x)} SequenceNumber__DEVICE_EXTENSIONInv(x) == x - 164);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 164, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 164, 1) == SequenceNumber__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 164)} MINUS_LEFT_PTR(x, 1, 164) == SequenceNumber__DEVICE_EXTENSIONInv(x));
+function SetWmiDataBlock__WMILIB_CONTEXT(int) returns (int);
+function SetWmiDataBlock__WMILIB_CONTEXTInv(int) returns (int);
+function _S_SetWmiDataBlock__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_SetWmiDataBlock__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x))} SetWmiDataBlock__WMILIB_CONTEXTInv(SetWmiDataBlock__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXT(SetWmiDataBlock__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXT(S)[SetWmiDataBlock__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataBlock__WMILIB_CONTEXTInv(S)[SetWmiDataBlock__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXT(x)} SetWmiDataBlock__WMILIB_CONTEXT(x) == x + 16);
+axiom (forall x:int :: {SetWmiDataBlock__WMILIB_CONTEXTInv(x)} SetWmiDataBlock__WMILIB_CONTEXTInv(x) == x - 16);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 16, 1) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 16)} MINUS_LEFT_PTR(x, 1, 16) == SetWmiDataBlock__WMILIB_CONTEXTInv(x));
+function SetWmiDataItem__WMILIB_CONTEXT(int) returns (int);
+function SetWmiDataItem__WMILIB_CONTEXTInv(int) returns (int);
+function _S_SetWmiDataItem__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_SetWmiDataItem__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x))} SetWmiDataItem__WMILIB_CONTEXTInv(SetWmiDataItem__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXT(SetWmiDataItem__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXT(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXT(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x]} _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[x] <==> S[SetWmiDataItem__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXT(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXT(S)[SetWmiDataItem__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)} S[x] ==> _S_SetWmiDataItem__WMILIB_CONTEXTInv(S)[SetWmiDataItem__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXT(x)} SetWmiDataItem__WMILIB_CONTEXT(x) == x + 20);
+axiom (forall x:int :: {SetWmiDataItem__WMILIB_CONTEXTInv(x)} SetWmiDataItem__WMILIB_CONTEXTInv(x) == x - 20);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == SetWmiDataItem__WMILIB_CONTEXTInv(x));
+function SignalState__DISPATCHER_HEADER(int) returns (int);
+function SignalState__DISPATCHER_HEADERInv(int) returns (int);
+function _S_SignalState__DISPATCHER_HEADER([int]bool) returns ([int]bool);
+function _S_SignalState__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x))} SignalState__DISPATCHER_HEADERInv(SignalState__DISPATCHER_HEADER(x)) == x);
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADER(SignalState__DISPATCHER_HEADERInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADER(S)[x]} _S_SignalState__DISPATCHER_HEADER(S)[x] <==> S[SignalState__DISPATCHER_HEADERInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SignalState__DISPATCHER_HEADERInv(S)[x]} _S_SignalState__DISPATCHER_HEADERInv(S)[x] <==> S[SignalState__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADER(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADER(S)[SignalState__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SignalState__DISPATCHER_HEADERInv(S)} S[x] ==> _S_SignalState__DISPATCHER_HEADERInv(S)[SignalState__DISPATCHER_HEADERInv(x)]);
+
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADER(x)} SignalState__DISPATCHER_HEADER(x) == x + 4);
+axiom (forall x:int :: {SignalState__DISPATCHER_HEADERInv(x)} SignalState__DISPATCHER_HEADERInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == SignalState__DISPATCHER_HEADERInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == SignalState__DISPATCHER_HEADERInv(x));
+function Signalling___unnamed_1_2bb39c56(int) returns (int);
+function Signalling___unnamed_1_2bb39c56Inv(int) returns (int);
+function _S_Signalling___unnamed_1_2bb39c56([int]bool) returns ([int]bool);
+function _S_Signalling___unnamed_1_2bb39c56Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56Inv(Signalling___unnamed_1_2bb39c56(x))} Signalling___unnamed_1_2bb39c56Inv(Signalling___unnamed_1_2bb39c56(x)) == x);
+axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56Inv(x)} Signalling___unnamed_1_2bb39c56(Signalling___unnamed_1_2bb39c56Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_2bb39c56(S)[x]} _S_Signalling___unnamed_1_2bb39c56(S)[x] <==> S[Signalling___unnamed_1_2bb39c56Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Signalling___unnamed_1_2bb39c56Inv(S)[x]} _S_Signalling___unnamed_1_2bb39c56Inv(S)[x] <==> S[Signalling___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_2bb39c56(S)} S[x] ==> _S_Signalling___unnamed_1_2bb39c56(S)[Signalling___unnamed_1_2bb39c56(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signalling___unnamed_1_2bb39c56Inv(S)} S[x] ==> _S_Signalling___unnamed_1_2bb39c56Inv(S)[Signalling___unnamed_1_2bb39c56Inv(x)]);
+
+axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56(x)} Signalling___unnamed_1_2bb39c56(x) == x + 0);
+axiom (forall x:int :: {Signalling___unnamed_1_2bb39c56Inv(x)} Signalling___unnamed_1_2bb39c56Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signalling___unnamed_1_2bb39c56Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signalling___unnamed_1_2bb39c56Inv(x));
+function Signature__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x))} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCK(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCK(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 0);
+axiom (forall x:int :: {Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Signature__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Size___unnamed_1_e30779f5(int) returns (int);
+function Size___unnamed_1_e30779f5Inv(int) returns (int);
+function _S_Size___unnamed_1_e30779f5([int]bool) returns ([int]bool);
+function _S_Size___unnamed_1_e30779f5Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Size___unnamed_1_e30779f5Inv(Size___unnamed_1_e30779f5(x))} Size___unnamed_1_e30779f5Inv(Size___unnamed_1_e30779f5(x)) == x);
+axiom (forall x:int :: {Size___unnamed_1_e30779f5Inv(x)} Size___unnamed_1_e30779f5(Size___unnamed_1_e30779f5Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_e30779f5(S)[x]} _S_Size___unnamed_1_e30779f5(S)[x] <==> S[Size___unnamed_1_e30779f5Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Size___unnamed_1_e30779f5Inv(S)[x]} _S_Size___unnamed_1_e30779f5Inv(S)[x] <==> S[Size___unnamed_1_e30779f5(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_e30779f5(S)} S[x] ==> _S_Size___unnamed_1_e30779f5(S)[Size___unnamed_1_e30779f5(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Size___unnamed_1_e30779f5Inv(S)} S[x] ==> _S_Size___unnamed_1_e30779f5Inv(S)[Size___unnamed_1_e30779f5Inv(x)]);
+
+axiom (forall x:int :: {Size___unnamed_1_e30779f5(x)} Size___unnamed_1_e30779f5(x) == x + 0);
+axiom (forall x:int :: {Size___unnamed_1_e30779f5Inv(x)} Size___unnamed_1_e30779f5Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Size___unnamed_1_e30779f5Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Size___unnamed_1_e30779f5Inv(x));
+function SpinLock__DEVICE_EXTENSION(int) returns (int);
+function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 152);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 152);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 152)} MINUS_LEFT_PTR(x, 1, 152) == SpinLock__DEVICE_EXTENSIONInv(x));
+function Spin__IO_REMOVE_LOCK_DBG_BLOCK(int) returns (int);
+function Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(int) returns (int);
+function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK([int]bool) returns ([int]bool);
+function _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x))} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)) == x);
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x]} _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[x] <==> S[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCK(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)} S[x] ==> _S_Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(S)[Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)]);
+
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCK(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCK(x) == x + 28);
+axiom (forall x:int :: {Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x)} Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Spin__IO_REMOVE_LOCK_DBG_BLOCKInv(x));
+function Started__DEVICE_EXTENSION(int) returns (int);
+function Started__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
+function SurpriseRemoved__DEVICE_EXTENSION(int) returns (int);
+function SurpriseRemoved__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SurpriseRemoved__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SurpriseRemoved__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x))} SurpriseRemoved__DEVICE_EXTENSIONInv(SurpriseRemoved__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSION(SurpriseRemoved__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSION(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSION(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x]} _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[x] <==> S[SurpriseRemoved__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSION(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSION(S)[SurpriseRemoved__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SurpriseRemoved__DEVICE_EXTENSIONInv(S)[SurpriseRemoved__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSION(x)} SurpriseRemoved__DEVICE_EXTENSION(x) == x + 266);
+axiom (forall x:int :: {SurpriseRemoved__DEVICE_EXTENSIONInv(x)} SurpriseRemoved__DEVICE_EXTENSIONInv(x) == x - 266);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 266, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 266, 1) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 266)} MINUS_LEFT_PTR(x, 1, 266) == SurpriseRemoved__DEVICE_EXTENSIONInv(x));
+function SymbolicLinkName__DEVICE_EXTENSION(int) returns (int);
+function SymbolicLinkName__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SymbolicLinkName__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SymbolicLinkName__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x))} SymbolicLinkName__DEVICE_EXTENSIONInv(SymbolicLinkName__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSION(SymbolicLinkName__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSION(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSION(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x]} _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[x] <==> S[SymbolicLinkName__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSION(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSION(S)[SymbolicLinkName__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SymbolicLinkName__DEVICE_EXTENSIONInv(S)[SymbolicLinkName__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSION(x)} SymbolicLinkName__DEVICE_EXTENSION(x) == x + 120);
+axiom (forall x:int :: {SymbolicLinkName__DEVICE_EXTENSIONInv(x)} SymbolicLinkName__DEVICE_EXTENSIONInv(x) == x - 120);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 120, 1) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 120)} MINUS_LEFT_PTR(x, 1, 120) == SymbolicLinkName__DEVICE_EXTENSIONInv(x));
+function SystemState__DEVICE_EXTENSION(int) returns (int);
+function SystemState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SystemState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SystemState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x))} SystemState__DEVICE_EXTENSIONInv(SystemState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSION(SystemState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSION(S)[x]} _S_SystemState__DEVICE_EXTENSION(S)[x] <==> S[SystemState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SystemState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSION(S)[SystemState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemState__DEVICE_EXTENSIONInv(S)[SystemState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSION(x)} SystemState__DEVICE_EXTENSION(x) == x + 172);
+axiom (forall x:int :: {SystemState__DEVICE_EXTENSIONInv(x)} SystemState__DEVICE_EXTENSIONInv(x) == x - 172);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 172, 1) == SystemState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 172)} MINUS_LEFT_PTR(x, 1, 172) == SystemState__DEVICE_EXTENSIONInv(x));
+function SystemToDeviceState__DEVICE_EXTENSION(int) returns (int);
+function SystemToDeviceState__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SystemToDeviceState__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SystemToDeviceState__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x))} SystemToDeviceState__DEVICE_EXTENSIONInv(SystemToDeviceState__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSION(SystemToDeviceState__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSION(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSION(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x]} _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[x] <==> S[SystemToDeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSION(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSION(S)[SystemToDeviceState__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SystemToDeviceState__DEVICE_EXTENSIONInv(S)[SystemToDeviceState__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSION(x)} SystemToDeviceState__DEVICE_EXTENSION(x) == x + 212);
+axiom (forall x:int :: {SystemToDeviceState__DEVICE_EXTENSIONInv(x)} SystemToDeviceState__DEVICE_EXTENSIONInv(x) == x - 212);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 212, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 212, 1) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 212)} MINUS_LEFT_PTR(x, 1, 212) == SystemToDeviceState__DEVICE_EXTENSIONInv(x));
+function TargetNotifyHandle__DEVICE_EXTENSION(int) returns (int);
+function TargetNotifyHandle__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TargetNotifyHandle__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TargetNotifyHandle__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x))} TargetNotifyHandle__DEVICE_EXTENSIONInv(TargetNotifyHandle__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSION(TargetNotifyHandle__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x]} _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[x] <==> S[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSION(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSION(S)[TargetNotifyHandle__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TargetNotifyHandle__DEVICE_EXTENSIONInv(S)[TargetNotifyHandle__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSION(x)} TargetNotifyHandle__DEVICE_EXTENSION(x) == x + 248);
+axiom (forall x:int :: {TargetNotifyHandle__DEVICE_EXTENSIONInv(x)} TargetNotifyHandle__DEVICE_EXTENSIONInv(x) == x - 248);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 248, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 248, 1) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 248)} MINUS_LEFT_PTR(x, 1, 248) == TargetNotifyHandle__DEVICE_EXTENSIONInv(x));
+function TopPort__DEVICE_EXTENSION(int) returns (int);
+function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
+function TrueClassDevice__DEVICE_EXTENSION(int) returns (int);
+function TrueClassDevice__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TrueClassDevice__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TrueClassDevice__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x))} TrueClassDevice__DEVICE_EXTENSIONInv(TrueClassDevice__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSION(TrueClassDevice__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSION(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSION(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x]} _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[x] <==> S[TrueClassDevice__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSION(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSION(S)[TrueClassDevice__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrueClassDevice__DEVICE_EXTENSIONInv(S)[TrueClassDevice__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSION(x)} TrueClassDevice__DEVICE_EXTENSION(x) == x + 4);
+axiom (forall x:int :: {TrueClassDevice__DEVICE_EXTENSIONInv(x)} TrueClassDevice__DEVICE_EXTENSIONInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == TrueClassDevice__DEVICE_EXTENSIONInv(x));
+function TrustedSubsystemCount__DEVICE_EXTENSION(int) returns (int);
+function TrustedSubsystemCount__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TrustedSubsystemCount__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x))} TrustedSubsystemCount__DEVICE_EXTENSIONInv(TrustedSubsystemCount__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSION(TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x]} _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[x] <==> S[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSION(S)[TrustedSubsystemCount__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TrustedSubsystemCount__DEVICE_EXTENSIONInv(S)[TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSION(x)} TrustedSubsystemCount__DEVICE_EXTENSION(x) == x + 112);
+axiom (forall x:int :: {TrustedSubsystemCount__DEVICE_EXTENSIONInv(x)} TrustedSubsystemCount__DEVICE_EXTENSIONInv(x) == x - 112);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 112, 1) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 112)} MINUS_LEFT_PTR(x, 1, 112) == TrustedSubsystemCount__DEVICE_EXTENSIONInv(x));
+function Type___unnamed_4_846adf3f(int) returns (int);
+function Type___unnamed_4_846adf3fInv(int) returns (int);
+function _S_Type___unnamed_4_846adf3f([int]bool) returns ([int]bool);
+function _S_Type___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Type___unnamed_4_846adf3fInv(Type___unnamed_4_846adf3f(x))} Type___unnamed_4_846adf3fInv(Type___unnamed_4_846adf3f(x)) == x);
+axiom (forall x:int :: {Type___unnamed_4_846adf3fInv(x)} Type___unnamed_4_846adf3f(Type___unnamed_4_846adf3fInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_846adf3f(S)[x]} _S_Type___unnamed_4_846adf3f(S)[x] <==> S[Type___unnamed_4_846adf3fInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Type___unnamed_4_846adf3fInv(S)[x]} _S_Type___unnamed_4_846adf3fInv(S)[x] <==> S[Type___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_846adf3f(S)} S[x] ==> _S_Type___unnamed_4_846adf3f(S)[Type___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Type___unnamed_4_846adf3fInv(S)} S[x] ==> _S_Type___unnamed_4_846adf3fInv(S)[Type___unnamed_4_846adf3fInv(x)]);
+
+axiom (forall x:int :: {Type___unnamed_4_846adf3f(x)} Type___unnamed_4_846adf3f(x) == x + 0);
+axiom (forall x:int :: {Type___unnamed_4_846adf3fInv(x)} Type___unnamed_4_846adf3fInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Type___unnamed_4_846adf3fInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Type___unnamed_4_846adf3fInv(x));
+function UnitId__DEVICE_EXTENSION(int) returns (int);
+function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 176);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 176);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == UnitId__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == UnitId__DEVICE_EXTENSIONInv(x));
+function WaitListHead__DISPATCHER_HEADER(int) returns (int);
+function WaitListHead__DISPATCHER_HEADERInv(int) returns (int);
+function _S_WaitListHead__DISPATCHER_HEADER([int]bool) returns ([int]bool);
+function _S_WaitListHead__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x))} WaitListHead__DISPATCHER_HEADERInv(WaitListHead__DISPATCHER_HEADER(x)) == x);
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADER(WaitListHead__DISPATCHER_HEADERInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADER(S)[x]} _S_WaitListHead__DISPATCHER_HEADER(S)[x] <==> S[WaitListHead__DISPATCHER_HEADERInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitListHead__DISPATCHER_HEADERInv(S)[x]} _S_WaitListHead__DISPATCHER_HEADERInv(S)[x] <==> S[WaitListHead__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADER(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADER(S)[WaitListHead__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitListHead__DISPATCHER_HEADERInv(S)} S[x] ==> _S_WaitListHead__DISPATCHER_HEADERInv(S)[WaitListHead__DISPATCHER_HEADERInv(x)]);
+
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADER(x)} WaitListHead__DISPATCHER_HEADER(x) == x + 8);
+axiom (forall x:int :: {WaitListHead__DISPATCHER_HEADERInv(x)} WaitListHead__DISPATCHER_HEADERInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == WaitListHead__DISPATCHER_HEADERInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == WaitListHead__DISPATCHER_HEADERInv(x));
+function WaitWakeEnabled__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeEnabled__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeEnabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeEnabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x))} WaitWakeEnabled__DEVICE_EXTENSIONInv(WaitWakeEnabled__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSION(WaitWakeEnabled__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSION(S)[WaitWakeEnabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeEnabled__DEVICE_EXTENSIONInv(S)[WaitWakeEnabled__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSION(x)} WaitWakeEnabled__DEVICE_EXTENSION(x) == x + 265);
+axiom (forall x:int :: {WaitWakeEnabled__DEVICE_EXTENSIONInv(x)} WaitWakeEnabled__DEVICE_EXTENSIONInv(x) == x - 265);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 265, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 265, 1) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 265)} MINUS_LEFT_PTR(x, 1, 265) == WaitWakeEnabled__DEVICE_EXTENSIONInv(x));
+function WaitWakeIrp__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeIrp__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeIrp__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeIrp__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x))} WaitWakeIrp__DEVICE_EXTENSIONInv(WaitWakeIrp__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSION(WaitWakeIrp__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSION(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSION(S)[WaitWakeIrp__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeIrp__DEVICE_EXTENSIONInv(S)[WaitWakeIrp__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSION(x)} WaitWakeIrp__DEVICE_EXTENSION(x) == x + 240);
+axiom (forall x:int :: {WaitWakeIrp__DEVICE_EXTENSIONInv(x)} WaitWakeIrp__DEVICE_EXTENSIONInv(x) == x - 240);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 240, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 240, 1) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 240)} MINUS_LEFT_PTR(x, 1, 240) == WaitWakeIrp__DEVICE_EXTENSIONInv(x));
+function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+function WmiFunctionControl__WMILIB_CONTEXT(int) returns (int);
+function WmiFunctionControl__WMILIB_CONTEXTInv(int) returns (int);
+function _S_WmiFunctionControl__WMILIB_CONTEXT([int]bool) returns ([int]bool);
+function _S_WmiFunctionControl__WMILIB_CONTEXTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x))} WmiFunctionControl__WMILIB_CONTEXTInv(WmiFunctionControl__WMILIB_CONTEXT(x)) == x);
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXT(WmiFunctionControl__WMILIB_CONTEXTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXT(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXT(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x]} _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[x] <==> S[WmiFunctionControl__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXT(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXT(S)[WmiFunctionControl__WMILIB_CONTEXT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)} S[x] ==> _S_WmiFunctionControl__WMILIB_CONTEXTInv(S)[WmiFunctionControl__WMILIB_CONTEXTInv(x)]);
+
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXT(x)} WmiFunctionControl__WMILIB_CONTEXT(x) == x + 28);
+axiom (forall x:int :: {WmiFunctionControl__WMILIB_CONTEXTInv(x)} WmiFunctionControl__WMILIB_CONTEXTInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == WmiFunctionControl__WMILIB_CONTEXTInv(x));
+function WmiLibInfo__DEVICE_EXTENSION(int) returns (int);
+function WmiLibInfo__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WmiLibInfo__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WmiLibInfo__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x))} WmiLibInfo__DEVICE_EXTENSIONInv(WmiLibInfo__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSION(WmiLibInfo__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSION(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSION(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x]} _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[x] <==> S[WmiLibInfo__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSION(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSION(S)[WmiLibInfo__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WmiLibInfo__DEVICE_EXTENSIONInv(S)[WmiLibInfo__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSION(x)} WmiLibInfo__DEVICE_EXTENSION(x) == x + 180);
+axiom (forall x:int :: {WmiLibInfo__DEVICE_EXTENSIONInv(x)} WmiLibInfo__DEVICE_EXTENSIONInv(x) == x - 180);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 180, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 180, 1) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 180)} MINUS_LEFT_PTR(x, 1, 180) == WmiLibInfo__DEVICE_EXTENSIONInv(x));
+function __unnamed_1_2bb39c56___unnamed_4_846adf3f(int) returns (int);
+function __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(int) returns (int);
+function _S___unnamed_1_2bb39c56___unnamed_4_846adf3f([int]bool) returns ([int]bool);
+function _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(__unnamed_1_2bb39c56___unnamed_4_846adf3f(x))} __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)) == x);
+axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)} __unnamed_1_2bb39c56___unnamed_4_846adf3f(__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)[x]} _S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)[x] <==> S[__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)[x]} _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)[x] <==> S[__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)} S[x] ==> _S___unnamed_1_2bb39c56___unnamed_4_846adf3f(S)[__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)} S[x] ==> _S___unnamed_1_2bb39c56___unnamed_4_846adf3fInv(S)[__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)]);
+
+axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3f(x)} __unnamed_1_2bb39c56___unnamed_4_846adf3f(x) == x + 1);
+axiom (forall x:int :: {__unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x)} __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x) == x - 1);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 1, 1) == __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 1)} MINUS_LEFT_PTR(x, 1, 1) == __unnamed_1_2bb39c56___unnamed_4_846adf3fInv(x));
+function __unnamed_1_9fa0583a___unnamed_4_846adf3f(int) returns (int);
+function __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(int) returns (int);
+function _S___unnamed_1_9fa0583a___unnamed_4_846adf3f([int]bool) returns ([int]bool);
+function _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(__unnamed_1_9fa0583a___unnamed_4_846adf3f(x))} __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)) == x);
+axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)} __unnamed_1_9fa0583a___unnamed_4_846adf3f(__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)[x]} _S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)[x] <==> S[__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)[x]} _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)[x] <==> S[__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)} S[x] ==> _S___unnamed_1_9fa0583a___unnamed_4_846adf3f(S)[__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)} S[x] ==> _S___unnamed_1_9fa0583a___unnamed_4_846adf3fInv(S)[__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)]);
+
+axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3f(x)} __unnamed_1_9fa0583a___unnamed_4_846adf3f(x) == x + 3);
+axiom (forall x:int :: {__unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x)} __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x) == x - 3);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 3, 1) == __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 3)} MINUS_LEFT_PTR(x, 1, 3) == __unnamed_1_9fa0583a___unnamed_4_846adf3fInv(x));
+function __unnamed_1_e30779f5___unnamed_4_846adf3f(int) returns (int);
+function __unnamed_1_e30779f5___unnamed_4_846adf3fInv(int) returns (int);
+function _S___unnamed_1_e30779f5___unnamed_4_846adf3f([int]bool) returns ([int]bool);
+function _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3fInv(__unnamed_1_e30779f5___unnamed_4_846adf3f(x))} __unnamed_1_e30779f5___unnamed_4_846adf3fInv(__unnamed_1_e30779f5___unnamed_4_846adf3f(x)) == x);
+axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)} __unnamed_1_e30779f5___unnamed_4_846adf3f(__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)[x]} _S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)[x] <==> S[__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)[x]} _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)[x] <==> S[__unnamed_1_e30779f5___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)} S[x] ==> _S___unnamed_1_e30779f5___unnamed_4_846adf3f(S)[__unnamed_1_e30779f5___unnamed_4_846adf3f(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)} S[x] ==> _S___unnamed_1_e30779f5___unnamed_4_846adf3fInv(S)[__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)]);
+
+axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3f(x)} __unnamed_1_e30779f5___unnamed_4_846adf3f(x) == x + 2);
+axiom (forall x:int :: {__unnamed_1_e30779f5___unnamed_4_846adf3fInv(x)} __unnamed_1_e30779f5___unnamed_4_846adf3fInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == __unnamed_1_e30779f5___unnamed_4_846adf3fInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == __unnamed_1_e30779f5___unnamed_4_846adf3fInv(x));
+function __unnamed_4_846adf3f___unnamed_4_c9b2e921(int) returns (int);
+function __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(int) returns (int);
+function _S___unnamed_4_846adf3f___unnamed_4_c9b2e921([int]bool) returns ([int]bool);
+function _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(__unnamed_4_846adf3f___unnamed_4_c9b2e921(x))} __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)) == x);
+axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)} __unnamed_4_846adf3f___unnamed_4_c9b2e921(__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)[x]} _S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)[x] <==> S[__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)[x]} _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)[x] <==> S[__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)} S[x] ==> _S___unnamed_4_846adf3f___unnamed_4_c9b2e921(S)[__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)} S[x] ==> _S___unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(S)[__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)]);
+
+axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921(x)} __unnamed_4_846adf3f___unnamed_4_c9b2e921(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x)} __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_846adf3f___unnamed_4_c9b2e921Inv(x));
+function __unnamed_4_c9b2e921__DISPATCHER_HEADER(int) returns (int);
+function __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(int) returns (int);
+function _S___unnamed_4_c9b2e921__DISPATCHER_HEADER([int]bool) returns ([int]bool);
+function _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(__unnamed_4_c9b2e921__DISPATCHER_HEADER(x))} __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)) == x);
+axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)} __unnamed_4_c9b2e921__DISPATCHER_HEADER(__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)[x]} _S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)[x] <==> S[__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)[x]} _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)[x] <==> S[__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)} S[x] ==> _S___unnamed_4_c9b2e921__DISPATCHER_HEADER(S)[__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)} S[x] ==> _S___unnamed_4_c9b2e921__DISPATCHER_HEADERInv(S)[__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)]);
+
+axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADER(x)} __unnamed_4_c9b2e921__DISPATCHER_HEADER(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x)} __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == __unnamed_4_c9b2e921__DISPATCHER_HEADERInv(x));
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure nondet_choice() returns (x:int);
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+var Res_DEVICE_STACK:[int]int;
+var Res_DEV_EXTN:[int]int;
+var Res_DEV_OBJ_INIT:[int]int;
+var Res_SPIN_LOCK:[int]int;
+
+
+
+////////////////////
+// Between predicate
+////////////////////
+function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
+function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
+
+
+//////////////////////////
+// Between set constructor
+//////////////////////////
+function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
+
+////////////////////////////////////////////////////
+// axioms relating ReachBetween and ReachBetweenSet
+////////////////////////////////////////////////////
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
+axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
+
+
+//////////////////////////
+// Axioms for ReachBetween
+//////////////////////////
+
+// reflexive
+axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
+
+// step
+//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
+axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
+
+// reach
+axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
+
+// cycle
+axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
+
+// sandwich
+axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
+
+// order1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
+
+// order2
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
+
+// transitive1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
+
+// transitive2
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
+
+// transitive3
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
+
+// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
+// It cannot be proved using the rest of the axioms.
+axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
+
+// relation between ReachAvoiding and ReachBetween
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
+
+// update
+axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
+ ///////////////////////////////
+ // Shifts for linking fields
+ ///////////////////////////////
+function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
+axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
+axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
+
+const unique Globals : int;
+axiom(Globals != 0);
+// the set of constants for 64 bit integers that Boogie doesn't parse
+const unique BOOGIE_LARGE_INT_4294967273:int;
+
+
+
+procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure InitializeListHead_IRP($ListHead$1$12.44$InitializeListHead_IRP$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoCreateDevice($DriverObject$1$21226.25$IoCreateDevice$281:int, $DeviceExtensionSize$2$21227.16$IoCreateDevice$281:int, $DeviceName$3$21228.29$IoCreateDevice$281:int, $DeviceType$4$21229.22$IoCreateDevice$281:int, $DeviceCharacteristics$5$21230.16$IoCreateDevice$281:int, $Exclusive$6$21231.18$IoCreateDevice$281:int, $DeviceObject$7$21237.20$IoCreateDevice$281:int) returns ($result.IoCreateDevice$21225.0$1$:int);
+
+//TAG: ensures (LONG)__return >= 0 ==> *DeviceObject != (void *)0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> (*DeviceObject)->DeviceExtension != (void *)0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*DeviceObject)->DeviceExtension) == 1
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 1
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 1)));
+//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *DeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == 0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == 0)));
+//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *DeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension), 1)
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] := 1])));
+//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *DeviceObject) == __old_resource("DEV_OBJ_INIT", *DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))
+ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]])));
+//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+//TAG: ensures (LONG)__return >= 0 ==> !(__resource("DEV_OBJ_INIT", ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension))->Self) == 1)
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> (!(Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])])]] == 1)));
+//TAG: ensures !((LONG)__return >= 0) ==> *DeviceObject == __old(*DeviceObject)
+ensures((!($result.IoCreateDevice$21225.0$1$ >= 0)) ==> (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == old(Mem)[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures (LONG)__return >= 0 ==> __return == 0
+ensures(($result.IoCreateDevice$21225.0$1$ >= 0) ==> ($result.IoCreateDevice$21225.0$1$ == 0));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*DeviceObject))->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$DeviceObject$7$21237.20$IoCreateDevice$281] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$7$21237.20$IoCreateDevice$281))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $DeviceObject$7$21237.20$IoCreateDevice$281) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
+requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
+//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
+ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
+//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
+ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
+//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
+ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
+//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoInitializeRemoveLockEx($Lock$1$22135.25$IoInitializeRemoveLockEx$201:int, $AllocateTag$2$22136.16$IoInitializeRemoveLockEx$201:int, $MaxLockedMinutes$3$22137.16$IoInitializeRemoveLockEx$201:int, $HighWatermark$4$22138.16$IoInitializeRemoveLockEx$201:int, $RemlockSize$5$22139.16$IoInitializeRemoveLockEx$201:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure KeInitializeSpinLock($SpinLock$1$13860.22$KeInitializeSpinLock$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+//TAG: ensures 1 ==> __resource("SPIN_LOCK", SpinLock) == 0
+ensures((true) ==> (Res_SPIN_LOCK[$SpinLock$1$13860.22$KeInitializeSpinLock$41] == 0));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty, SpinLock
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($SpinLock$1$13860.22$KeInitializeSpinLock$41))) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || ($SpinLock$1$13860.22$KeInitializeSpinLock$41 == r) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouInitializeDataQueue($Context$1$518.13$MouInitializeDataQueue$41:int);
+
+//TAG: requires __resource("DEV_EXTN", Context) == 1
+requires(Res_DEV_EXTN[$Context$1$518.13$MouInitializeDataQueue$41] == 1);
+//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)Context)->SpinLock) == 0
+requires(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($Context$1$518.13$MouInitializeDataQueue$41)] == 0);
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __resource("DEV_EXTN", Context) == 1
+ensures(Res_DEV_EXTN[$Context$1$518.13$MouInitializeDataQueue$41] == 1);
+//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)Context)->SpinLock) == 0
+ensures(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($Context$1$518.13$MouInitializeDataQueue$41)] == 0);
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouseClassLogError($Object$1$542.10$MouseClassLogError$281:int, $ErrorCode$2$543.10$MouseClassLogError$281:int, $UniqueErrorValue$3$544.10$MouseClassLogError$281:int, $FinalStatus$4$545.13$MouseClassLogError$281:int, $DumpCount$5$546.10$MouseClassLogError$281:int, $DumpData$6$547.11$MouseClassLogError$281:int, $MajorFunction$7$548.10$MouseClassLogError$281:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlFreeUnicodeString($UnicodeString$1$7452.28$RtlFreeUnicodeString$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure __PREfastPagedCode();
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouCreateClassObject($DriverObject$1$3165.28$MouCreateClassObject$201:int, $TmpDeviceExtension$2$3166.28$MouCreateClassObject$201:int, $ClassDeviceObject$3$3167.28$MouCreateClassObject$201:int, $FullDeviceName$4$3168.35$MouCreateClassObject$201:int, $Legacy$5$3169.28$MouCreateClassObject$201:int) returns ($result.MouCreateClassObject$3164.0$1$:int)
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1)));
+//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 0)));
+//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] := 1])));
+//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
+ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]])));
+//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __setin(_H_z, __set((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))) || __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])[_H_z]) || ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+//TAG: ensures !((LONG)__return >= 0) ==> __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))->SpinLock) == 0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])] == 0));
+modifies alloc;
+free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: &TmpDeviceExtension->WaitWakeSpinLock, &((struct _DEVICE_EXTENSION *)TmpDeviceExtension)->SpinLock, __set_true
+ensures (Subset(Empty(), Union(Union(Union(Empty(), Singleton(WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), Singleton(SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), SetTrue())) && (forall r:int :: {Res_SPIN_LOCK[r]} (WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SetTrue()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
+ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3167.28$MouCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3167.28$MouCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+{
+var havoc_stringTemp:int;
+var condVal:int;
+var $ClassDeviceObject$3$3167.28$MouCreateClassObject$20 : int;
+var $DriverObject$1$3165.28$MouCreateClassObject$20 : int;
+var $ExAllocatePoolWithTag.arg.2$4$ : int;
+var $FullDeviceName$4$3168.35$MouCreateClassObject$20 : int;
+var $Legacy$5$3169.28$MouCreateClassObject$20 : int;
+var $MouDebugPrint.arg.2$15$ : int;
+var $MouDebugPrint.arg.2$18$ : int;
+var $MouDebugPrint.arg.2$2$ : int;
+var $MouDebugPrint.arg.2$20$ : int;
+var $MouDebugPrint.arg.2$22$ : int;
+var $MouDebugPrint.arg.2$5$ : int;
+var $RtlAppendUnicodeToString.arg.2$12$ : int;
+var $RtlAppendUnicodeToString.arg.2$14$ : int;
+var $RtlAppendUnicodeToString.arg.2$9$ : int;
+var $TmpDeviceExtension$2$3166.28$MouCreateClassObject$20 : int;
+var $deviceExtension$8$3199.24$MouCreateClassObject$20 : int;
+var $dumpCount$11$3202.24$MouCreateClassObject$20 : int;
+var $dumpData$12$3203.24$MouCreateClassObject$20 : int;
+var $errorCode$9$3200.24$MouCreateClassObject$20 : int;
+var $fullClassName$10$3201.24$MouCreateClassObject$20 : int;
+var $i$13$3204.24$MouCreateClassObject$20 : int;
+var $memset.arg.3$7$ : int;
+var $nameIndex$14$3205.24$MouCreateClassObject$20 : int;
+var $result.ExAllocatePoolWithTag$3252.0$3$ : int;
+var $result.ExAllocatePoolWithTag$3370.0$19$ : int;
+var $result.IoCreateDevice$3296.35$16$ : int;
+var $result.IoCreateDevice$3310.31$17$ : int;
+var $result.RtlAppendUnicodeToString$3271.32$8$ : int;
+var $result.RtlAppendUnicodeToString$3272.32$10$ : int;
+var $result.RtlAppendUnicodeToString$3275.36$11$ : int;
+var $result.RtlAppendUnicodeToString$3278.32$13$ : int;
+var $result.memset$3270.8$6$ : int;
+var $result.question.21$ : int;
+var $status$6$3197.24$MouCreateClassObject$20 : int;
+var $uniqueErrorValue$7$3198.24$MouCreateClassObject$20 : int;
+var tempBoogie0:int;
+var tempBoogie1:int;
+var tempBoogie2:int;
+var tempBoogie3:int;
+var tempBoogie4:int;
+var tempBoogie5:int;
+var tempBoogie6:int;
+var tempBoogie7:int;
+var tempBoogie8:int;
+var tempBoogie9:int;
+var tempBoogie10:int;
+var tempBoogie11:int;
+var tempBoogie12:int;
+var tempBoogie13:int;
+var tempBoogie14:int;
+var tempBoogie15:int;
+var tempBoogie16:int;
+var tempBoogie17:int;
+var tempBoogie18:int;
+var tempBoogie19:int;
+var LOOP_78_alloc:[int]name;
+var LOOP_78_Mem:[name][int]int;
+var LOOP_78_Res_DEVICE_STACK:[int]int;
+var LOOP_78_Res_DEV_EXTN:[int]int;
+var LOOP_78_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_78_Res_SPIN_LOCK:[int]int;
+
+
+start:
+
+assume (alloc[$DriverObject$1$3165.28$MouCreateClassObject$201] != UNALLOCATED);
+assume (alloc[$TmpDeviceExtension$2$3166.28$MouCreateClassObject$201] != UNALLOCATED);
+assume (alloc[$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] != UNALLOCATED);
+assume (alloc[$FullDeviceName$4$3168.35$MouCreateClassObject$201] != UNALLOCATED);
+call $dumpData$12$3203.24$MouCreateClassObject$20 := __HAVOC_malloc(16);
+call $fullClassName$10$3201.24$MouCreateClassObject$20 := __HAVOC_malloc(8);
+$DriverObject$1$3165.28$MouCreateClassObject$20 := $DriverObject$1$3165.28$MouCreateClassObject$201;
+$TmpDeviceExtension$2$3166.28$MouCreateClassObject$20 := $TmpDeviceExtension$2$3166.28$MouCreateClassObject$201;
+$ClassDeviceObject$3$3167.28$MouCreateClassObject$20 := $ClassDeviceObject$3$3167.28$MouCreateClassObject$201;
+$FullDeviceName$4$3168.35$MouCreateClassObject$20 := $FullDeviceName$4$3168.35$MouCreateClassObject$201;
+$Legacy$5$3169.28$MouCreateClassObject$20 := $Legacy$5$3169.28$MouCreateClassObject$201;
+goto label_3;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3440)
+label_1:
+call __HAVOC_free($dumpData$12$3203.24$MouCreateClassObject$20);
+call __HAVOC_free($fullClassName$10$3201.24$MouCreateClassObject$20);
+assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
+assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
+assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
+assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
+assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
+assume (forall m:int :: {Mem[T.A37CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A37CHAR][m] == old(Mem[T.A37CHAR])[m]);
+assume (forall m:int :: {Mem[T.A40CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A40CHAR][m] == old(Mem[T.A40CHAR])[m]);
+assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
+assume (forall m:int :: {Mem[T.A65CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A65CHAR][m] == old(Mem[T.A65CHAR])[m]);
+assume (forall m:int :: {Mem[T.A75CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A75CHAR][m] == old(Mem[T.A75CHAR])[m]);
+assume (forall m:int :: {Mem[T.A76CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A76CHAR][m] == old(Mem[T.A76CHAR])[m]);
+assume (forall m:int :: {Mem[T.A7UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A7UINT2][m] == old(Mem[T.A7UINT2])[m]);
+assume (forall m:int :: {Mem[T.A80CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A80CHAR][m] == old(Mem[T.A80CHAR])[m]);
+assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
+assume (forall m:int :: {Mem[T.Abandoned___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Abandoned___unnamed_1_2bb39c56][m] == old(Mem[T.Abandoned___unnamed_1_2bb39c56])[m]);
+assume (forall m:int :: {Mem[T.Absolute___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Absolute___unnamed_1_2bb39c56][m] == old(Mem[T.Absolute___unnamed_1_2bb39c56])[m]);
+assume (forall m:int :: {Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Blink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blink__LIST_ENTRY][m] == old(Mem[T.Blink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.ConnectOneClassToOnePort__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ConnectOneClassToOnePort__GLOBALS][m] == old(Mem[T.ConnectOneClassToOnePort__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m] == old(Mem[T.CurrentStackLocation___unnamed_4_a7aa989c])[m]);
+assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DebugActive___unnamed_1_9fa0583a][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DebugActive___unnamed_1_9fa0583a][m] == old(Mem[T.DebugActive___unnamed_1_9fa0583a])[m]);
+assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.DeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceState__DEVICE_EXTENSION][m] == old(Mem[T.DeviceState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DpcActive___unnamed_1_9fa0583a][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DpcActive___unnamed_1_9fa0583a][m] == old(Mem[T.DpcActive___unnamed_1_9fa0583a])[m]);
+assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT][m] == old(Mem[T.ExecuteWmiMethod__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.ExtraWaitWakeIrp__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.GuidCount__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidCount__WMILIB_CONTEXT][m] == old(Mem[T.GuidCount__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.GuidList__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GuidList__WMILIB_CONTEXT][m] == old(Mem[T.GuidList__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.Hand___unnamed_1_e30779f5][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Hand___unnamed_1_e30779f5][m] == old(Mem[T.Hand___unnamed_1_e30779f5])[m]);
+assume (forall m:int :: {Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
+assume (forall m:int :: {Mem[T.InputCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputCount__DEVICE_EXTENSION][m] == old(Mem[T.InputCount__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES][m] == old(Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Inserted___unnamed_1_9fa0583a][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Inserted___unnamed_1_9fa0583a][m] == old(Mem[T.Inserted___unnamed_1_9fa0583a])[m]);
+assume (forall m:int :: {Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Lock___unnamed_4_c9b2e921][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Lock___unnamed_4_c9b2e921][m] == old(Mem[T.Lock___unnamed_4_c9b2e921])[m]);
+assume (forall m:int :: {Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinDeviceWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinDeviceWakeState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinSystemWakeState__DEVICE_EXTENSION][m] == old(Mem[T.MinSystemWakeState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
+assume (forall m:int :: {Mem[T.MouseAttributes__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MouseAttributes__DEVICE_EXTENSION][m] == old(Mem[T.MouseAttributes__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MouseIdentifier__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MouseIdentifier__MOUSE_ATTRIBUTES][m] == old(Mem[T.MouseIdentifier__MOUSE_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.NpxIrql___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NpxIrql___unnamed_1_2bb39c56][m] == old(Mem[T.NpxIrql___unnamed_1_2bb39c56])[m]);
+assume (forall m:int :: {Mem[T.NumberOfButtons__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberOfButtons__MOUSE_ATTRIBUTES][m] == old(Mem[T.NumberOfButtons__MOUSE_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.OkayToLogOverflow__DEVICE_EXTENSION][m] == old(Mem[T.OkayToLogOverflow__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
+assume (forall m:int :: {Mem[T.PDO__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PDO__DEVICE_EXTENSION][m] == old(Mem[T.PDO__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
+assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
+assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
+assume (forall m:int :: {Mem[T.P_IO_REMOVE_LOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IO_REMOVE_LOCK][m] == old(Mem[T.P_IO_REMOVE_LOCK])[m]);
+assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.P_MOUSE_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_MOUSE_INPUT_DATA][m] == old(Mem[T.P_MOUSE_INPUT_DATA])[m]);
+assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiDataBlock__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT][m] == old(Mem[T.QueryWmiRegInfo__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.ReadQueue__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.ReadQueue__DEVICE_EXTENSION][m] == old(Mem[T.ReadQueue__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.RemoveLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RemoveLock__DEVICE_EXTENSION][m] == old(Mem[T.RemoveLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK][m] == old(Mem[T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.SampleRate__MOUSE_ATTRIBUTES][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SampleRate__MOUSE_ATTRIBUTES][m] == old(Mem[T.SampleRate__MOUSE_ATTRIBUTES])[m]);
+assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SequenceNumber__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SequenceNumber__DEVICE_EXTENSION][m] == old(Mem[T.SequenceNumber__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataBlock__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataBlock__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SetWmiDataItem__WMILIB_CONTEXT][m] == old(Mem[T.SetWmiDataItem__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T.SignalState__DISPATCHER_HEADER][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SignalState__DISPATCHER_HEADER][m] == old(Mem[T.SignalState__DISPATCHER_HEADER])[m]);
+assume (forall m:int :: {Mem[T.Signalling___unnamed_1_2bb39c56][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signalling___unnamed_1_2bb39c56][m] == old(Mem[T.Signalling___unnamed_1_2bb39c56])[m]);
+assume (forall m:int :: {Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Signature__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Size___unnamed_1_e30779f5][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Size___unnamed_1_e30779f5][m] == old(Mem[T.Size___unnamed_1_e30779f5])[m]);
+assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK][m] == old(Mem[T.Spin__IO_REMOVE_LOCK_DBG_BLOCK])[m]);
+assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SurpriseRemoved__DEVICE_EXTENSION][m] == old(Mem[T.SurpriseRemoved__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SystemState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemState__DEVICE_EXTENSION][m] == old(Mem[T.SystemState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SystemToDeviceState__DEVICE_EXTENSION][m] == old(Mem[T.SystemToDeviceState__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TargetNotifyHandle__DEVICE_EXTENSION][m] == old(Mem[T.TargetNotifyHandle__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TrueClassDevice__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrueClassDevice__DEVICE_EXTENSION][m] == old(Mem[T.TrueClassDevice__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][m] == old(Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Type___unnamed_4_846adf3f][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Type___unnamed_4_846adf3f][m] == old(Mem[T.Type___unnamed_4_846adf3f])[m]);
+assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
+assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
+assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
+assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeEnabled__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeEnabled__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeIrp__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeIrp__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WmiFunctionControl__WMILIB_CONTEXT][m] == old(Mem[T.WmiFunctionControl__WMILIB_CONTEXT])[m]);
+assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3440)
+label_2:
+assume false;
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3197)
+label_3:
+goto label_4;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3198)
+label_4:
+goto label_5;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3199)
+label_5:
+goto label_6;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3199)
+label_6:
+$deviceExtension$8$3199.24$MouCreateClassObject$20 := 0 ;
+goto label_7;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3200)
+label_7:
+goto label_8;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3200)
+label_8:
+$errorCode$9$3200.24$MouCreateClassObject$20 := 0 ;
+goto label_9;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3201)
+label_9:
+goto label_10;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3201)
+label_10:
+// Skipping Structure assignment due to the flag SkipStructAssignments
+goto label_11;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3202)
+label_11:
+goto label_12;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3202)
+label_12:
+$dumpCount$11$3202.24$MouCreateClassObject$20 := 0 ;
+goto label_13;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3203)
+label_13:
+goto label_14;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3204)
+label_14:
+goto label_15;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3205)
+label_15:
+goto label_16;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3207)
+label_16:
+call __PREfastPagedCode ();
+goto label_22;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3209)
+label_19:
+// skip MouDebugPrint
+goto label_23;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3209)
+label_22:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$2$ := havoc_stringTemp ;
+goto label_19;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3215)
+label_23:
+call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
+goto label_26;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3220)
+label_26:
+Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20 := 0];
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3222)
+label_27:
+goto label_27_true , label_27_false ;
+
+
+label_27_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_89;
+
+
+label_27_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_28;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3226)
+label_28:
+call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
+goto label_31;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3232)
+label_31:
+goto label_31_true , label_31_false ;
+
+
+label_31_true :
+assume (BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
+goto label_32;
+
+
+label_31_false :
+assume !(BOOGIE_LARGE_INT_4294967273 < Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
+goto label_37;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3233)
+label_32:
+$status$6$3197.24$MouCreateClassObject$20 := -1073741823 ;
+goto label_33;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3234)
+label_33:
+$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414143 ;
+goto label_34;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3235)
+label_34:
+$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20006 ;
+goto label_35;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3236)
+label_35:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3203.24$MouCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
+goto label_36;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3237)
+label_36:
+$dumpCount$11$3202.24$MouCreateClassObject$20 := 1 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3244)
+label_37:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]), 1, 4)];
+goto label_38;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3248)
+label_38:
+goto label_38_true , label_38_false ;
+
+
+label_38_true :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
+goto label_39;
+
+
+label_38_false :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3248)
+label_39:
+goto label_39_true , label_39_false ;
+
+
+label_39_true :
+assume ($Legacy$5$3169.28$MouCreateClassObject$20 != 0);
+goto label_40;
+
+
+label_39_false :
+assume ($Legacy$5$3169.28$MouCreateClassObject$20 == 0);
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3249)
+label_40:
+tempBoogie0 := PLUS(Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)], 1, 14) ;
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20) := tempBoogie0];
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3252)
+label_41:
+call $result.ExAllocatePoolWithTag$3252.0$3$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$4$, 1131377997);
+goto label_45;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3252)
+label_44:
+$ExAllocatePoolWithTag.arg.2$4$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] ;
+goto label_41;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3252)
+label_45:
+Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20) := $result.ExAllocatePoolWithTag$3252.0$3$];
+goto label_46;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3255)
+label_46:
+goto label_46_true , label_46_false ;
+
+
+label_46_true :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] != 0);
+goto label_59;
+
+
+label_46_false :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] == 0);
+goto label_50;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3257)
+label_47:
+// skip MouDebugPrint
+goto label_51;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3257)
+label_50:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$5$ := havoc_stringTemp ;
+goto label_47;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3262)
+label_51:
+$status$6$3197.24$MouCreateClassObject$20 := -1073741823 ;
+goto label_52;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3263)
+label_52:
+$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414143 ;
+goto label_53;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3264)
+label_53:
+$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20006 ;
+goto label_54;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3265)
+label_54:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3203.24$MouCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
+goto label_55;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3266)
+label_55:
+$dumpCount$11$3202.24$MouCreateClassObject$20 := 1 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3270)
+label_56:
+// ignoring intrinsic intrinsic.memset
+havoc $result.memset$3270.8$6$;
+goto label_63;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3270)
+label_59:
+$memset.arg.3$7$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)] ;
+goto label_56;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3271)
+label_60:
+call $result.RtlAppendUnicodeToString$3271.32$8$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$9$);
+goto label_64;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3271)
+label_63:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$9$ := havoc_stringTemp ;
+goto label_60;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3272)
+label_64:
+call $result.RtlAppendUnicodeToString$3272.32$10$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(BaseClassName__GLOBALS(Globals))]);
+goto label_67;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3274)
+label_67:
+goto label_67_true , label_67_false ;
+
+
+label_67_true :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] != 0);
+goto label_68;
+
+
+label_67_false :
+assume (Mem[T.ConnectOneClassToOnePort__GLOBALS][ConnectOneClassToOnePort__GLOBALS(Globals)] == 0);
+goto label_76;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3274)
+label_68:
+goto label_68_true , label_68_false ;
+
+
+label_68_true :
+assume ($Legacy$5$3169.28$MouCreateClassObject$20 != 0);
+goto label_72;
+
+
+label_68_false :
+assume ($Legacy$5$3169.28$MouCreateClassObject$20 == 0);
+goto label_76;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3275)
+label_69:
+call $result.RtlAppendUnicodeToString$3275.36$11$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$12$);
+goto label_76;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3275)
+label_72:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$12$ := havoc_stringTemp ;
+goto label_69;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3278)
+label_73:
+call $result.RtlAppendUnicodeToString$3278.32$13$ := RtlAppendUnicodeToString ($fullClassName$10$3201.24$MouCreateClassObject$20, $RtlAppendUnicodeToString.arg.2$14$);
+goto label_77;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3278)
+label_76:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$14$ := havoc_stringTemp ;
+goto label_73;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3284)
+label_77:
+$nameIndex$14$3205.24$MouCreateClassObject$20 := 0 ;
+goto label_78;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3288)
+label_78:
+// loop entry initialization...
+LOOP_78_alloc := alloc;
+LOOP_78_Mem := Mem;
+LOOP_78_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_78_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_78_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_78_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_78_head;
+
+
+label_78_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: requires __preserves_resource("DEV_OBJ_INIT")
+assert(Res_DEV_OBJ_INIT == LOOP_78_Res_DEV_OBJ_INIT);
+//TAG: requires __preserves_resource("DEV_EXTN")
+assert(Res_DEV_EXTN == LOOP_78_Res_DEV_EXTN);
+//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+assert(Mem[T.Flink__LIST_ENTRY] == LOOP_78_Mem[T.Flink__LIST_ENTRY]);
+assume(forall f:int :: {alloc[Base(f)]} LOOP_78_alloc[Base(f)] == UNALLOCATED || LOOP_78_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_78_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_78_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_78_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_true, __set_empty
+assert (Subset(Empty(), Union(Union(Empty(), SetTrue()), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (SetTrue()[r]) || (Empty()[r]) || LOOP_78_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_78_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_78_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_78_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true, __set_empty
+assert (Subset(Empty(), Union(Union(Empty(), SetTrue()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_78_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_78_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_78_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)], 2), 1, 1)) := PLUS(48, 1, $nameIndex$14$3205.24$MouCreateClassObject$20)];
+$nameIndex$14$3205.24$MouCreateClassObject$20 := PLUS($nameIndex$14$3205.24$MouCreateClassObject$20, 1, 1) ;
+goto label_82;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3290)
+label_79:
+// skip MouDebugPrint
+goto label_83;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3290)
+label_82:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$15$ := havoc_stringTemp ;
+goto label_79;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3296)
+label_83:
+call $result.IoCreateDevice$3296.35$16$ := IoCreateDevice ($DriverObject$1$3165.28$MouCreateClassObject$20, 272, $fullClassName$10$3201.24$MouCreateClassObject$20, 15, 0, 0, $ClassDeviceObject$3$3167.28$MouCreateClassObject$20);
+goto label_86;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3296)
+label_86:
+$status$6$3197.24$MouCreateClassObject$20 := $result.IoCreateDevice$3296.35$16$ ;
+goto label_87;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3304)
+label_87:
+goto label_87_true , label_87_false ;
+
+
+label_87_true :
+assume (-1073741771 == $status$6$3197.24$MouCreateClassObject$20);
+goto label_78_head;
+
+
+label_87_false :
+assume !(-1073741771 == $status$6$3197.24$MouCreateClassObject$20);
+goto label_88;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3306)
+label_88:
+Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3168.35$MouCreateClassObject$20 := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
+goto label_97;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3309)
+label_89:
+call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
+goto label_92;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3310)
+label_92:
+call $result.IoCreateDevice$3310.31$17$ := IoCreateDevice ($DriverObject$1$3165.28$MouCreateClassObject$20, 272, 0, 15, 0, 0, $ClassDeviceObject$3$3167.28$MouCreateClassObject$20);
+goto label_95;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3310)
+label_95:
+$status$6$3197.24$MouCreateClassObject$20 := $result.IoCreateDevice$3310.31$17$ ;
+goto label_96;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3317)
+label_96:
+Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3168.35$MouCreateClassObject$20 := 0];
+goto label_97;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3320)
+label_97:
+goto label_97_true , label_97_false ;
+
+
+label_97_true :
+assume (0 <= $status$6$3197.24$MouCreateClassObject$20);
+goto label_98;
+
+
+label_97_false :
+assume !(0 <= $status$6$3197.24$MouCreateClassObject$20);
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3320)
+label_98:
+goto label_98_true , label_98_false ;
+
+
+label_98_true :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] != 0);
+goto label_107;
+
+
+label_98_false :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] == 0);
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3321)
+label_99:
+// skip MouDebugPrint
+goto label_103;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3321)
+label_102:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$18$ := havoc_stringTemp ;
+goto label_99;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3327)
+label_103:
+$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414131 ;
+goto label_104;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3328)
+label_104:
+$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20006 ;
+goto label_105;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3329)
+label_105:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$12$3203.24$MouCreateClassObject$20, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullClassName$10$3201.24$MouCreateClassObject$20)]];
+goto label_106;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3330)
+label_106:
+$dumpCount$11$3202.24$MouCreateClassObject$20 := 1 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3339)
+label_107:
+assume (forall r:int :: {BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])], 4),r)} BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])],r)!= 0 || BIT_BAND(4,r)!= 0 <==> BIT_BAND(BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])], 4),r)!= 0);
+tempBoogie0 := BIT_BOR(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])], 4) ;
+Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20]) := tempBoogie0];
+goto label_108;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3340)
+label_108:
+$deviceExtension$8$3199.24$MouCreateClassObject$20 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20])] ;
+goto label_109;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3342)
+label_109:
+// Skipping Structure assignment due to the flag SkipStructAssignments
+goto label_110;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3344)
+label_110:
+Mem[T.Self__DEVICE_EXTENSION] := Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20]];
+goto label_111;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3345)
+label_111:
+call IoInitializeRemoveLockEx (RemoveLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20), 1131377997, 0, 0, 88);
+goto label_114;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3351)
+label_114:
+assume (Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] == Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)]);
+call KeInitializeSpinLock (SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20));
+Mem[T.SpinLock__DEVICE_EXTENSION] := Mem[T.SpinLock__DEVICE_EXTENSION][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := Mem[T.UINT4][SpinLock__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)]];
+goto label_117;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3357)
+label_117:
+call InitializeListHead_IRP (ReadQueue__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20));
+goto label_120;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3363)
+label_120:
+Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION] := Mem[T.TrustedSubsystemCount__DEVICE_EXTENSION][TrustedSubsystemCount__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := 0];
+goto label_121;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3370)
+label_121:
+call $result.ExAllocatePoolWithTag$3370.0$19$ := ExAllocatePoolWithTag (0, Mem[T.InputDataQueueLength__MOUSE_ATTRIBUTES][InputDataQueueLength__MOUSE_ATTRIBUTES(MouseAttributes__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20))], 1131377997);
+goto label_124;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3369)
+label_124:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := $result.ExAllocatePoolWithTag$3370.0$19$];
+goto label_125;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3375)
+label_125:
+goto label_125_true , label_125_false ;
+
+
+label_125_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] != 0);
+goto label_133;
+
+
+label_125_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] == 0);
+goto label_129;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3381)
+label_126:
+// skip MouDebugPrint
+goto label_130;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3381)
+label_129:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$20$ := havoc_stringTemp ;
+goto label_126;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3387)
+label_130:
+$status$6$3197.24$MouCreateClassObject$20 := -1073741670 ;
+goto label_131;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3393)
+label_131:
+$errorCode$9$3200.24$MouCreateClassObject$20 := -1073414142 ;
+goto label_132;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3394)
+label_132:
+$uniqueErrorValue$7$3198.24$MouCreateClassObject$20 := 20020 ;
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3402)
+label_133:
+call MouInitializeDataQueue ($deviceExtension$8$3199.24$MouCreateClassObject$20);
+goto label_136;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3406)
+label_136:
+goto label_136_true , label_136_false ;
+
+
+label_136_true :
+assume ($status$6$3197.24$MouCreateClassObject$20 != 0);
+goto label_137;
+
+
+label_136_false :
+assume ($status$6$3197.24$MouCreateClassObject$20 == 0);
+goto label_162;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3412)
+label_137:
+call RtlFreeUnicodeString ($fullClassName$10$3201.24$MouCreateClassObject$20);
+goto label_140;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3413)
+label_140:
+Mem[T.PUINT2] := Mem[T.PUINT2][$FullDeviceName$4$3168.35$MouCreateClassObject$20 := 0];
+goto label_141;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3415)
+label_141:
+goto label_141_true , label_141_false ;
+
+
+label_141_true :
+assume ($errorCode$9$3200.24$MouCreateClassObject$20 != 0);
+goto label_145;
+
+
+label_141_false :
+assume ($errorCode$9$3200.24$MouCreateClassObject$20 == 0);
+goto label_148;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3416)
+label_142:
+call MouseClassLogError ($result.question.21$, $errorCode$9$3200.24$MouCreateClassObject$20, $uniqueErrorValue$7$3198.24$MouCreateClassObject$20, $status$6$3197.24$MouCreateClassObject$20, $dumpCount$11$3202.24$MouCreateClassObject$20, $dumpData$12$3203.24$MouCreateClassObject$20, 0);
+goto label_148;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3417)
+label_145:
+goto label_145_true , label_145_false ;
+
+
+label_145_true :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] != 0);
+goto label_147;
+
+
+label_145_false :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] == 0);
+goto label_146;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3417)
+label_146:
+$result.question.21$ := $DriverObject$1$3165.28$MouCreateClassObject$20 ;
+goto label_142;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3417)
+label_147:
+$result.question.21$ := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] ;
+goto label_142;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3427)
+label_148:
+goto label_148_true , label_148_false ;
+
+
+label_148_true :
+assume ($deviceExtension$8$3199.24$MouCreateClassObject$20 != 0);
+goto label_149;
+
+
+label_148_false :
+assume ($deviceExtension$8$3199.24$MouCreateClassObject$20 == 0);
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3427)
+label_149:
+goto label_149_true , label_149_false ;
+
+
+label_149_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] != 0);
+goto label_150;
+
+
+label_149_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)] == 0);
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3428)
+label_150:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20)], 0);
+goto label_153;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3429)
+label_153:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$8$3199.24$MouCreateClassObject$20) := 0];
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3431)
+label_154:
+goto label_154_true , label_154_false ;
+
+
+label_154_true :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] != 0);
+goto label_155;
+
+
+label_154_false :
+assume (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20] == 0);
+goto label_162;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3432)
+label_155:
+call IoDeleteDevice (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20]);
+goto label_158;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3433)
+label_158:
+Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$20 := 0];
+goto label_162;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3437)
+label_159:
+// skip MouDebugPrint
+goto label_163;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3437)
+label_162:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$22$ := havoc_stringTemp ;
+goto label_159;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(3439)
+label_163:
+$result.MouCreateClassObject$3164.0$1$ := $status$6$3197.24$MouCreateClassObject$20 ;
+goto label_1;
+
+}
+
diff --git a/Test/havoc0/MouseClassFindMorePorts.bpl b/Test/havoc0/MouseClassFindMorePorts.bpl
index f9e4a18c..15ca82cc 100644
--- a/Test/havoc0/MouseClassFindMorePorts.bpl
+++ b/Test/havoc0/MouseClassFindMorePorts.bpl
@@ -1,3839 +1,3839 @@
-// RUN: %boogie -monomorphize "%s" > "%t"
-// RUN: %diff success.expect "%t"
-type byte, name;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function SetTrue() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-/*
-function AtLeast(int, int) returns ([int]bool);
-function ModEqual(int, int, int) returns (bool);
-axiom(forall n:int, x:int :: ModEqual(n,x,x));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
-axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
-axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
-axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-*/
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int :: SetTrue()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name, m:[name][int]int) returns (bool);
-function Values(t:name, m:[name][int]int) returns ([int]bool);
-function T.Ptr(t:name) returns (name);
-
-axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
-
-axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
-
-axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
- (HasType(v, t, m1) <==> HasType(v, t, m2)));
-
-// Field declarations
-
-const unique T.Guid_WMIGUIDREGINFO:name;
-const unique T.InstanceCount_WMIGUIDREGINFO:name;
-const unique T.Flags_WMIGUIDREGINFO:name;
-const unique T.OperationID__ACCESS_STATE:name;
-const unique T.SecurityEvaluated__ACCESS_STATE:name;
-const unique T.GenerateAudit__ACCESS_STATE:name;
-const unique T.GenerateOnClose__ACCESS_STATE:name;
-const unique T.PrivilegesAllocated__ACCESS_STATE:name;
-const unique T.Flags__ACCESS_STATE:name;
-const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
-const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
-const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
-const unique T.SubjectSecurityContext__ACCESS_STATE:name;
-const unique T.SecurityDescriptor__ACCESS_STATE:name;
-const unique T.AuxData__ACCESS_STATE:name;
-const unique T.Privileges__ACCESS_STATE:name;
-const unique T.AuditPrivileges__ACCESS_STATE:name;
-const unique T.ObjectName__ACCESS_STATE:name;
-const unique T.ObjectTypeName__ACCESS_STATE:name;
-const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_RESOURCE_LIST:name;
-const unique T.List__CM_RESOURCE_LIST:name;
-const unique T.Size__DEVICE_CAPABILITIES:name;
-const unique T.Version__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
-const unique T.LockSupported__DEVICE_CAPABILITIES:name;
-const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.Removable__DEVICE_CAPABILITIES:name;
-const unique T.DockDevice__DEVICE_CAPABILITIES:name;
-const unique T.UniqueID__DEVICE_CAPABILITIES:name;
-const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
-const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
-const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
-const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
-const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
-const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
-const unique T.Reserved__DEVICE_CAPABILITIES:name;
-const unique T.Address__DEVICE_CAPABILITIES:name;
-const unique T.UINumber__DEVICE_CAPABILITIES:name;
-const unique T.DeviceState__DEVICE_CAPABILITIES:name;
-const unique T.SystemWake__DEVICE_CAPABILITIES:name;
-const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
-const unique T.D1Latency__DEVICE_CAPABILITIES:name;
-const unique T.D2Latency__DEVICE_CAPABILITIES:name;
-const unique T.D3Latency__DEVICE_CAPABILITIES:name;
-const unique T.Self__DEVICE_EXTENSION:name;
-const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
-const unique T.TopPort__DEVICE_EXTENSION:name;
-const unique T.PDO__DEVICE_EXTENSION:name;
-const unique T.RemoveLock__DEVICE_EXTENSION:name;
-const unique T.PnP__DEVICE_EXTENSION:name;
-const unique T.Started__DEVICE_EXTENSION:name;
-const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
-const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
-const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
-const unique T.InputCount__DEVICE_EXTENSION:name;
-const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
-const unique T.InputData__DEVICE_EXTENSION:name;
-const unique T.DataIn__DEVICE_EXTENSION:name;
-const unique T.DataOut__DEVICE_EXTENSION:name;
-const unique T.MouseAttributes__DEVICE_EXTENSION:name;
-const unique T.SpinLock__DEVICE_EXTENSION:name;
-const unique T.ReadQueue__DEVICE_EXTENSION:name;
-const unique T.SequenceNumber__DEVICE_EXTENSION:name;
-const unique T.DeviceState__DEVICE_EXTENSION:name;
-const unique T.SystemState__DEVICE_EXTENSION:name;
-const unique T.UnitId__DEVICE_EXTENSION:name;
-const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
-const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
-const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
-const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
-const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
-const unique T.Link__DEVICE_EXTENSION:name;
-const unique T.File__DEVICE_EXTENSION:name;
-const unique T.Enabled__DEVICE_EXTENSION:name;
-const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
-const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
-const unique T.Type__DEVICE_OBJECT:name;
-const unique T.Size__DEVICE_OBJECT:name;
-const unique T.ReferenceCount__DEVICE_OBJECT:name;
-const unique T.DriverObject__DEVICE_OBJECT:name;
-const unique T.NextDevice__DEVICE_OBJECT:name;
-const unique T.AttachedDevice__DEVICE_OBJECT:name;
-const unique T.CurrentIrp__DEVICE_OBJECT:name;
-const unique T.Timer__DEVICE_OBJECT:name;
-const unique T.Flags__DEVICE_OBJECT:name;
-const unique T.Characteristics__DEVICE_OBJECT:name;
-const unique T.Vpb__DEVICE_OBJECT:name;
-const unique T.DeviceExtension__DEVICE_OBJECT:name;
-const unique T.DeviceType__DEVICE_OBJECT:name;
-const unique T.StackSize__DEVICE_OBJECT:name;
-const unique T.Queue__DEVICE_OBJECT:name;
-const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
-const unique T.DeviceQueue__DEVICE_OBJECT:name;
-const unique T.Dpc__DEVICE_OBJECT:name;
-const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
-const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
-const unique T.DeviceLock__DEVICE_OBJECT:name;
-const unique T.SectorSize__DEVICE_OBJECT:name;
-const unique T.Spare1__DEVICE_OBJECT:name;
-const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
-const unique T.Reserved__DEVICE_OBJECT:name;
-const unique T.Type__DEVOBJ_EXTENSION:name;
-const unique T.Size__DEVOBJ_EXTENSION:name;
-const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
-const unique T.__unnamed_4_c9b2e921__DISPATCHER_HEADER:name;
-const unique T.SignalState__DISPATCHER_HEADER:name;
-const unique T.WaitListHead__DISPATCHER_HEADER:name;
-const unique T.DriverObject__DRIVER_EXTENSION:name;
-const unique T.AddDevice__DRIVER_EXTENSION:name;
-const unique T.Count__DRIVER_EXTENSION:name;
-const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
-const unique T.Type__DRIVER_OBJECT:name;
-const unique T.Size__DRIVER_OBJECT:name;
-const unique T.DeviceObject__DRIVER_OBJECT:name;
-const unique T.Flags__DRIVER_OBJECT:name;
-const unique T.DriverStart__DRIVER_OBJECT:name;
-const unique T.DriverSize__DRIVER_OBJECT:name;
-const unique T.DriverSection__DRIVER_OBJECT:name;
-const unique T.DriverExtension__DRIVER_OBJECT:name;
-const unique T.DriverName__DRIVER_OBJECT:name;
-const unique T.HardwareDatabase__DRIVER_OBJECT:name;
-const unique T.FastIoDispatch__DRIVER_OBJECT:name;
-const unique T.DriverInit__DRIVER_OBJECT:name;
-const unique T.DriverStartIo__DRIVER_OBJECT:name;
-const unique T.DriverUnload__DRIVER_OBJECT:name;
-const unique T.MajorFunction__DRIVER_OBJECT:name;
-const unique T.SystemResourcesList__ERESOURCE:name;
-const unique T.OwnerTable__ERESOURCE:name;
-const unique T.ActiveCount__ERESOURCE:name;
-const unique T.Flag__ERESOURCE:name;
-const unique T.SharedWaiters__ERESOURCE:name;
-const unique T.ExclusiveWaiters__ERESOURCE:name;
-const unique T.OwnerEntry__ERESOURCE:name;
-const unique T.ActiveEntries__ERESOURCE:name;
-const unique T.ContentionCount__ERESOURCE:name;
-const unique T.NumberOfSharedWaiters__ERESOURCE:name;
-const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
-const unique T.__unnamed_4_46b62f69__ERESOURCE:name;
-const unique T.SpinLock__ERESOURCE:name;
-const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
-const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
-const unique T.FastIoRead__FAST_IO_DISPATCH:name;
-const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoLock__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
-const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
-const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
-const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlRead__FAST_IO_DISPATCH:name;
-const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
-const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
-const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
-const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.Count__FAST_MUTEX:name;
-const unique T.Owner__FAST_MUTEX:name;
-const unique T.Contention__FAST_MUTEX:name;
-const unique T.Gate__FAST_MUTEX:name;
-const unique T.OldIrql__FAST_MUTEX:name;
-const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
-const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
-const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
-const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.Type__FILE_OBJECT:name;
-const unique T.Size__FILE_OBJECT:name;
-const unique T.DeviceObject__FILE_OBJECT:name;
-const unique T.Vpb__FILE_OBJECT:name;
-const unique T.FsContext__FILE_OBJECT:name;
-const unique T.FsContext2__FILE_OBJECT:name;
-const unique T.SectionObjectPointer__FILE_OBJECT:name;
-const unique T.PrivateCacheMap__FILE_OBJECT:name;
-const unique T.FinalStatus__FILE_OBJECT:name;
-const unique T.RelatedFileObject__FILE_OBJECT:name;
-const unique T.LockOperation__FILE_OBJECT:name;
-const unique T.DeletePending__FILE_OBJECT:name;
-const unique T.ReadAccess__FILE_OBJECT:name;
-const unique T.WriteAccess__FILE_OBJECT:name;
-const unique T.DeleteAccess__FILE_OBJECT:name;
-const unique T.SharedRead__FILE_OBJECT:name;
-const unique T.SharedWrite__FILE_OBJECT:name;
-const unique T.SharedDelete__FILE_OBJECT:name;
-const unique T.Flags__FILE_OBJECT:name;
-const unique T.FileName__FILE_OBJECT:name;
-const unique T.CurrentByteOffset__FILE_OBJECT:name;
-const unique T.Waiters__FILE_OBJECT:name;
-const unique T.Busy__FILE_OBJECT:name;
-const unique T.LastLock__FILE_OBJECT:name;
-const unique T.Lock__FILE_OBJECT:name;
-const unique T.Event__FILE_OBJECT:name;
-const unique T.CompletionContext__FILE_OBJECT:name;
-const unique T.IrpListLock__FILE_OBJECT:name;
-const unique T.IrpList__FILE_OBJECT:name;
-const unique T.FileObjectExtension__FILE_OBJECT:name;
-const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
-const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
-const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
-const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
-const unique T.Directory__FILE_STANDARD_INFORMATION:name;
-const unique T.Debug__GLOBALS:name;
-const unique T.GrandMaster__GLOBALS:name;
-const unique T.AssocClassList__GLOBALS:name;
-const unique T.NumAssocClass__GLOBALS:name;
-const unique T.Opens__GLOBALS:name;
-const unique T.NumberLegacyPorts__GLOBALS:name;
-const unique T.Mutex__GLOBALS:name;
-const unique T.ConnectOneClassToOnePort__GLOBALS:name;
-const unique T.PortsServiced__GLOBALS:name;
-const unique T.InitExtension__GLOBALS:name;
-const unique T.RegistryPath__GLOBALS:name;
-const unique T.BaseClassName__GLOBALS:name;
-const unique T.BaseClassBuffer__GLOBALS:name;
-const unique T.LegacyDeviceList__GLOBALS:name;
-const unique T.Data1__GUID:name;
-const unique T.Data2__GUID:name;
-const unique T.Data3__GUID:name;
-const unique T.Data4__GUID:name;
-const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
-const unique T.Control__INITIAL_PRIVILEGE_SET:name;
-const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
-const unique T.Size__INTERFACE:name;
-const unique T.Version__INTERFACE:name;
-const unique T.Context__INTERFACE:name;
-const unique T.InterfaceReference__INTERFACE:name;
-const unique T.InterfaceDereference__INTERFACE:name;
-const unique T.Port__IO_COMPLETION_CONTEXT:name;
-const unique T.Key__IO_COMPLETION_CONTEXT:name;
-const unique T.Common__IO_REMOVE_LOCK:name;
-const unique T.Dbg__IO_REMOVE_LOCK:name;
-const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__IO_RESOURCE_LIST:name;
-const unique T.Revision__IO_RESOURCE_LIST:name;
-const unique T.Count__IO_RESOURCE_LIST:name;
-const unique T.Descriptors__IO_RESOURCE_LIST:name;
-const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
-const unique T.AccessState__IO_SECURITY_CONTEXT:name;
-const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
-const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
-const unique T.MajorFunction__IO_STACK_LOCATION:name;
-const unique T.MinorFunction__IO_STACK_LOCATION:name;
-const unique T.Flags__IO_STACK_LOCATION:name;
-const unique T.Control__IO_STACK_LOCATION:name;
-const unique T.Parameters__IO_STACK_LOCATION:name;
-const unique T.DeviceObject__IO_STACK_LOCATION:name;
-const unique T.FileObject__IO_STACK_LOCATION:name;
-const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
-const unique T.Context__IO_STACK_LOCATION:name;
-const unique T.__unnamed_4_16aff58e__IO_STATUS_BLOCK:name;
-const unique T.Information__IO_STATUS_BLOCK:name;
-const unique T.Type__IRP:name;
-const unique T.Size__IRP:name;
-const unique T.MdlAddress__IRP:name;
-const unique T.Flags__IRP:name;
-const unique T.AssociatedIrp__IRP:name;
-const unique T.ThreadListEntry__IRP:name;
-const unique T.IoStatus__IRP:name;
-const unique T.RequestorMode__IRP:name;
-const unique T.PendingReturned__IRP:name;
-const unique T.StackCount__IRP:name;
-const unique T.CurrentLocation__IRP:name;
-const unique T.Cancel__IRP:name;
-const unique T.CancelIrql__IRP:name;
-const unique T.ApcEnvironment__IRP:name;
-const unique T.AllocationFlags__IRP:name;
-const unique T.UserIosb__IRP:name;
-const unique T.UserEvent__IRP:name;
-const unique T.Overlay__IRP:name;
-const unique T.CancelRoutine__IRP:name;
-const unique T.UserBuffer__IRP:name;
-const unique T.Tail__IRP:name;
-const unique T.Type__KAPC:name;
-const unique T.SpareByte0__KAPC:name;
-const unique T.Size__KAPC:name;
-const unique T.SpareByte1__KAPC:name;
-const unique T.SpareLong0__KAPC:name;
-const unique T.Thread__KAPC:name;
-const unique T.ApcListEntry__KAPC:name;
-const unique T.KernelRoutine__KAPC:name;
-const unique T.RundownRoutine__KAPC:name;
-const unique T.NormalRoutine__KAPC:name;
-const unique T.NormalContext__KAPC:name;
-const unique T.SystemArgument1__KAPC:name;
-const unique T.SystemArgument2__KAPC:name;
-const unique T.ApcStateIndex__KAPC:name;
-const unique T.ApcMode__KAPC:name;
-const unique T.Inserted__KAPC:name;
-const unique T.Type__KDEVICE_QUEUE:name;
-const unique T.Size__KDEVICE_QUEUE:name;
-const unique T.DeviceListHead__KDEVICE_QUEUE:name;
-const unique T.Lock__KDEVICE_QUEUE:name;
-const unique T.Busy__KDEVICE_QUEUE:name;
-const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
-const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Type__KDPC:name;
-const unique T.Importance__KDPC:name;
-const unique T.Number__KDPC:name;
-const unique T.DpcListEntry__KDPC:name;
-const unique T.DeferredRoutine__KDPC:name;
-const unique T.DeferredContext__KDPC:name;
-const unique T.SystemArgument1__KDPC:name;
-const unique T.SystemArgument2__KDPC:name;
-const unique T.DpcData__KDPC:name;
-const unique T.Header__KEVENT:name;
-const unique T.Header__KSEMAPHORE:name;
-const unique T.Limit__KSEMAPHORE:name;
-const unique T.__unnamed_8_8684a3e7__LARGE_INTEGER:name;
-const unique T.u__LARGE_INTEGER:name;
-const unique T.QuadPart__LARGE_INTEGER:name;
-const unique T.Flink__LIST_ENTRY:name;
-const unique T.Blink__LIST_ENTRY:name;
-const unique T.LowPart__LUID:name;
-const unique T.HighPart__LUID:name;
-const unique T.Luid__LUID_AND_ATTRIBUTES:name;
-const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
-const unique T.Next__MDL:name;
-const unique T.Size__MDL:name;
-const unique T.MdlFlags__MDL:name;
-const unique T.Process__MDL:name;
-const unique T.MappedSystemVa__MDL:name;
-const unique T.StartVa__MDL:name;
-const unique T.ByteCount__MDL:name;
-const unique T.ByteOffset__MDL:name;
-const unique T.MouseIdentifier__MOUSE_ATTRIBUTES:name;
-const unique T.NumberOfButtons__MOUSE_ATTRIBUTES:name;
-const unique T.SampleRate__MOUSE_ATTRIBUTES:name;
-const unique T.InputDataQueueLength__MOUSE_ATTRIBUTES:name;
-const unique T.UnitId__MOUSE_INPUT_DATA:name;
-const unique T.Flags__MOUSE_INPUT_DATA:name;
-const unique T.__unnamed_4_9c11ed91__MOUSE_INPUT_DATA:name;
-const unique T.RawButtons__MOUSE_INPUT_DATA:name;
-const unique T.LastX__MOUSE_INPUT_DATA:name;
-const unique T.LastY__MOUSE_INPUT_DATA:name;
-const unique T.ExtraInformation__MOUSE_INPUT_DATA:name;
-const unique T.OwnerThread__OWNER_ENTRY:name;
-const unique T.__unnamed_4_c1e23b02__OWNER_ENTRY:name;
-const unique T.File__PORT:name;
-const unique T.Port__PORT:name;
-const unique T.Enabled__PORT:name;
-const unique T.Reserved__PORT:name;
-const unique T.Free__PORT:name;
-const unique T.SequenceD1__POWER_SEQUENCE:name;
-const unique T.SequenceD2__POWER_SEQUENCE:name;
-const unique T.SequenceD3__POWER_SEQUENCE:name;
-const unique T.SystemState__POWER_STATE:name;
-const unique T.DeviceState__POWER_STATE:name;
-const unique T.PrivilegeCount__PRIVILEGE_SET:name;
-const unique T.Control__PRIVILEGE_SET:name;
-const unique T.Privilege__PRIVILEGE_SET:name;
-const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
-const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.__unnamed_4_b4f5a780__SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T.Length__UNICODE_STRING:name;
-const unique T.MaximumLength__UNICODE_STRING:name;
-const unique T.Buffer__UNICODE_STRING:name;
-const unique T.Type__VPB:name;
-const unique T.Size__VPB:name;
-const unique T.Flags__VPB:name;
-const unique T.VolumeLabelLength__VPB:name;
-const unique T.DeviceObject__VPB:name;
-const unique T.RealDevice__VPB:name;
-const unique T.SerialNumber__VPB:name;
-const unique T.ReferenceCount__VPB:name;
-const unique T.VolumeLabel__VPB:name;
-const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
-const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
-const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
-const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
-const unique T.GuidCount__WMILIB_CONTEXT:name;
-const unique T.GuidList__WMILIB_CONTEXT:name;
-const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
-const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
-const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
-const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
-const unique T.Start___unnamed_12_06b9ee6e:name;
-const unique T.Length48___unnamed_12_06b9ee6e:name;
-const unique T.Start___unnamed_12_0882bd02:name;
-const unique T.Length64___unnamed_12_0882bd02:name;
-const unique T.__unnamed_12_2e80217b___unnamed_12_264d0dab:name;
-const unique T.Raw___unnamed_12_2e80217b:name;
-const unique T.Translated___unnamed_12_2e80217b:name;
-const unique T.Data___unnamed_12_5cc7ace2:name;
-const unique T.Channel___unnamed_12_6374506e:name;
-const unique T.Port___unnamed_12_6374506e:name;
-const unique T.Reserved1___unnamed_12_6374506e:name;
-const unique T.Priority___unnamed_12_68a4278e:name;
-const unique T.Reserved1___unnamed_12_68a4278e:name;
-const unique T.Reserved2___unnamed_12_68a4278e:name;
-const unique T.Generic___unnamed_12_79ed2653:name;
-const unique T.Port___unnamed_12_79ed2653:name;
-const unique T.Interrupt___unnamed_12_79ed2653:name;
-const unique T.MessageInterrupt___unnamed_12_79ed2653:name;
-const unique T.Memory___unnamed_12_79ed2653:name;
-const unique T.Dma___unnamed_12_79ed2653:name;
-const unique T.DevicePrivate___unnamed_12_79ed2653:name;
-const unique T.BusNumber___unnamed_12_79ed2653:name;
-const unique T.DeviceSpecificData___unnamed_12_79ed2653:name;
-const unique T.Memory40___unnamed_12_79ed2653:name;
-const unique T.Memory48___unnamed_12_79ed2653:name;
-const unique T.Memory64___unnamed_12_79ed2653:name;
-const unique T.Start___unnamed_12_7da594c0:name;
-const unique T.Length40___unnamed_12_7da594c0:name;
-const unique T.Start___unnamed_12_9873e05d:name;
-const unique T.Length___unnamed_12_9873e05d:name;
-const unique T.DataSize___unnamed_12_9cc8cebc:name;
-const unique T.Reserved1___unnamed_12_9cc8cebc:name;
-const unique T.Reserved2___unnamed_12_9cc8cebc:name;
-const unique T.Start___unnamed_12_b98da82e:name;
-const unique T.Length___unnamed_12_b98da82e:name;
-const unique T.Level___unnamed_12_c2880e88:name;
-const unique T.Vector___unnamed_12_c2880e88:name;
-const unique T.Affinity___unnamed_12_c2880e88:name;
-const unique T.Start___unnamed_12_c49ab31a:name;
-const unique T.Length___unnamed_12_c49ab31a:name;
-const unique T.ListEntry___unnamed_12_c6ed93f3:name;
-const unique T.__unnamed_4_a7aa989c___unnamed_12_c6ed93f3:name;
-const unique T.Data___unnamed_12_ced61554:name;
-const unique T.Reserved___unnamed_12_d9c44df5:name;
-const unique T.MessageCount___unnamed_12_d9c44df5:name;
-const unique T.Vector___unnamed_12_d9c44df5:name;
-const unique T.Affinity___unnamed_12_d9c44df5:name;
-const unique T.Start___unnamed_12_db3dcbfc:name;
-const unique T.Length___unnamed_12_db3dcbfc:name;
-const unique T.Reserved___unnamed_12_db3dcbfc:name;
-const unique T.Level___unnamed_12_fb26b3fc:name;
-const unique T.Vector___unnamed_12_fb26b3fc:name;
-const unique T.Affinity___unnamed_12_fb26b3fc:name;
-const unique T.OutputBufferLength___unnamed_16_22e4d054:name;
-const unique T.InputBufferLength___unnamed_16_22e4d054:name;
-const unique T.IoControlCode___unnamed_16_22e4d054:name;
-const unique T.Type3InputBuffer___unnamed_16_22e4d054:name;
-const unique T.Create___unnamed_16_39b626ad:name;
-const unique T.Read___unnamed_16_39b626ad:name;
-const unique T.Write___unnamed_16_39b626ad:name;
-const unique T.QueryDirectory___unnamed_16_39b626ad:name;
-const unique T.NotifyDirectory___unnamed_16_39b626ad:name;
-const unique T.QueryFile___unnamed_16_39b626ad:name;
-const unique T.SetFile___unnamed_16_39b626ad:name;
-const unique T.QueryEa___unnamed_16_39b626ad:name;
-const unique T.SetEa___unnamed_16_39b626ad:name;
-const unique T.QueryVolume___unnamed_16_39b626ad:name;
-const unique T.SetVolume___unnamed_16_39b626ad:name;
-const unique T.FileSystemControl___unnamed_16_39b626ad:name;
-const unique T.LockControl___unnamed_16_39b626ad:name;
-const unique T.DeviceIoControl___unnamed_16_39b626ad:name;
-const unique T.QuerySecurity___unnamed_16_39b626ad:name;
-const unique T.SetSecurity___unnamed_16_39b626ad:name;
-const unique T.MountVolume___unnamed_16_39b626ad:name;
-const unique T.VerifyVolume___unnamed_16_39b626ad:name;
-const unique T.Scsi___unnamed_16_39b626ad:name;
-const unique T.QueryQuota___unnamed_16_39b626ad:name;
-const unique T.SetQuota___unnamed_16_39b626ad:name;
-const unique T.QueryDeviceRelations___unnamed_16_39b626ad:name;
-const unique T.QueryInterface___unnamed_16_39b626ad:name;
-const unique T.DeviceCapabilities___unnamed_16_39b626ad:name;
-const unique T.FilterResourceRequirements___unnamed_16_39b626ad:name;
-const unique T.ReadWriteConfig___unnamed_16_39b626ad:name;
-const unique T.SetLock___unnamed_16_39b626ad:name;
-const unique T.QueryId___unnamed_16_39b626ad:name;
-const unique T.QueryDeviceText___unnamed_16_39b626ad:name;
-const unique T.UsageNotification___unnamed_16_39b626ad:name;
-const unique T.WaitWake___unnamed_16_39b626ad:name;
-const unique T.PowerSequence___unnamed_16_39b626ad:name;
-const unique T.Power___unnamed_16_39b626ad:name;
-const unique T.StartDevice___unnamed_16_39b626ad:name;
-const unique T.WMI___unnamed_16_39b626ad:name;
-const unique T.Others___unnamed_16_39b626ad:name;
-const unique T.WhichSpace___unnamed_16_56c011d7:name;
-const unique T.Buffer___unnamed_16_56c011d7:name;
-const unique T.Offset___unnamed_16_56c011d7:name;
-const unique T.Length___unnamed_16_56c011d7:name;
-const unique T.DeviceQueueEntry___unnamed_16_5fed8f23:name;
-const unique T.__unnamed_16_ae643f17___unnamed_16_5fed8f23:name;
-const unique T.Length___unnamed_16_6be9abe0:name;
-const unique T.FileName___unnamed_16_6be9abe0:name;
-const unique T.FileInformationClass___unnamed_16_6be9abe0:name;
-const unique T.FileIndex___unnamed_16_6be9abe0:name;
-const unique T.InterfaceType___unnamed_16_78879a38:name;
-const unique T.Size___unnamed_16_78879a38:name;
-const unique T.Version___unnamed_16_78879a38:name;
-const unique T.Interface___unnamed_16_78879a38:name;
-const unique T.InterfaceSpecificData___unnamed_16_78879a38:name;
-const unique T.Length___unnamed_16_804a2f24:name;
-const unique T.StartSid___unnamed_16_804a2f24:name;
-const unique T.SidList___unnamed_16_804a2f24:name;
-const unique T.SidListLength___unnamed_16_804a2f24:name;
-const unique T.Argument1___unnamed_16_8586693f:name;
-const unique T.Argument2___unnamed_16_8586693f:name;
-const unique T.Argument3___unnamed_16_8586693f:name;
-const unique T.Argument4___unnamed_16_8586693f:name;
-const unique T.Length___unnamed_16_8831e65f:name;
-const unique T.Key___unnamed_16_8831e65f:name;
-const unique T.ByteOffset___unnamed_16_8831e65f:name;
-const unique T.SecurityContext___unnamed_16_8c2d663a:name;
-const unique T.Options___unnamed_16_8c2d663a:name;
-const unique T.FileAttributes___unnamed_16_8c2d663a:name;
-const unique T.ShareAccess___unnamed_16_8c2d663a:name;
-const unique T.EaLength___unnamed_16_8c2d663a:name;
-const unique T.Length___unnamed_16_913b9a7a:name;
-const unique T.Key___unnamed_16_913b9a7a:name;
-const unique T.ByteOffset___unnamed_16_913b9a7a:name;
-const unique T.OutputBufferLength___unnamed_16_94d1d1c7:name;
-const unique T.InputBufferLength___unnamed_16_94d1d1c7:name;
-const unique T.FsControlCode___unnamed_16_94d1d1c7:name;
-const unique T.Type3InputBuffer___unnamed_16_94d1d1c7:name;
-const unique T.Length___unnamed_16_a2fab4da:name;
-const unique T.FileInformationClass___unnamed_16_a2fab4da:name;
-const unique T.FileObject___unnamed_16_a2fab4da:name;
-const unique T.__unnamed_4_a7d0864c___unnamed_16_a2fab4da:name;
-const unique T.DriverContext___unnamed_16_ae643f17:name;
-const unique T.Length___unnamed_16_c1b29316:name;
-const unique T.Key___unnamed_16_c1b29316:name;
-const unique T.ByteOffset___unnamed_16_c1b29316:name;
-const unique T.ProviderId___unnamed_16_cbd53ed4:name;
-const unique T.DataPath___unnamed_16_cbd53ed4:name;
-const unique T.BufferSize___unnamed_16_cbd53ed4:name;
-const unique T.Buffer___unnamed_16_cbd53ed4:name;
-const unique T.Length___unnamed_16_db70db6e:name;
-const unique T.MinBusNumber___unnamed_16_db70db6e:name;
-const unique T.MaxBusNumber___unnamed_16_db70db6e:name;
-const unique T.Reserved___unnamed_16_db70db6e:name;
-const unique T.Length___unnamed_16_ef4b6307:name;
-const unique T.EaList___unnamed_16_ef4b6307:name;
-const unique T.EaListLength___unnamed_16_ef4b6307:name;
-const unique T.EaIndex___unnamed_16_ef4b6307:name;
-const unique T.__unnamed_4_b060dea6___unnamed_16_fdda1f62:name;
-const unique T.Type___unnamed_16_fdda1f62:name;
-const unique T.State___unnamed_16_fdda1f62:name;
-const unique T.ShutdownType___unnamed_16_fdda1f62:name;
-const unique T.Lock___unnamed_1_1394de4b:name;
-const unique T.Abandoned___unnamed_1_2bb39c56:name;
-const unique T.Absolute___unnamed_1_2bb39c56:name;
-const unique T.NpxIrql___unnamed_1_2bb39c56:name;
-const unique T.Signalling___unnamed_1_2bb39c56:name;
-const unique T.Inserted___unnamed_1_9fa0583a:name;
-const unique T.DebugActive___unnamed_1_9fa0583a:name;
-const unique T.DpcActive___unnamed_1_9fa0583a:name;
-const unique T.Size___unnamed_1_e30779f5:name;
-const unique T.Hand___unnamed_1_e30779f5:name;
-const unique T.MinimumVector___unnamed_20_83d468e4:name;
-const unique T.MaximumVector___unnamed_20_83d468e4:name;
-const unique T.AffinityPolicy___unnamed_20_83d468e4:name;
-const unique T.PriorityPolicy___unnamed_20_83d468e4:name;
-const unique T.TargetedProcessors___unnamed_20_83d468e4:name;
-const unique T.Length40___unnamed_24_035931da:name;
-const unique T.Alignment40___unnamed_24_035931da:name;
-const unique T.MinimumAddress___unnamed_24_035931da:name;
-const unique T.MaximumAddress___unnamed_24_035931da:name;
-const unique T.Length___unnamed_24_38e128db:name;
-const unique T.Alignment___unnamed_24_38e128db:name;
-const unique T.MinimumAddress___unnamed_24_38e128db:name;
-const unique T.MaximumAddress___unnamed_24_38e128db:name;
-const unique T.Length___unnamed_24_9500ea34:name;
-const unique T.Alignment___unnamed_24_9500ea34:name;
-const unique T.MinimumAddress___unnamed_24_9500ea34:name;
-const unique T.MaximumAddress___unnamed_24_9500ea34:name;
-const unique T.Length___unnamed_24_9734802c:name;
-const unique T.Alignment___unnamed_24_9734802c:name;
-const unique T.MinimumAddress___unnamed_24_9734802c:name;
-const unique T.MaximumAddress___unnamed_24_9734802c:name;
-const unique T.Length64___unnamed_24_af62813f:name;
-const unique T.Alignment64___unnamed_24_af62813f:name;
-const unique T.MinimumAddress___unnamed_24_af62813f:name;
-const unique T.MaximumAddress___unnamed_24_af62813f:name;
-const unique T.Length48___unnamed_24_c0555099:name;
-const unique T.Alignment48___unnamed_24_c0555099:name;
-const unique T.MinimumAddress___unnamed_24_c0555099:name;
-const unique T.MaximumAddress___unnamed_24_c0555099:name;
-const unique T.Port___unnamed_24_d7c4ec3a:name;
-const unique T.Memory___unnamed_24_d7c4ec3a:name;
-const unique T.Interrupt___unnamed_24_d7c4ec3a:name;
-const unique T.Dma___unnamed_24_d7c4ec3a:name;
-const unique T.Generic___unnamed_24_d7c4ec3a:name;
-const unique T.DevicePrivate___unnamed_24_d7c4ec3a:name;
-const unique T.BusNumber___unnamed_24_d7c4ec3a:name;
-const unique T.ConfigData___unnamed_24_d7c4ec3a:name;
-const unique T.Memory40___unnamed_24_d7c4ec3a:name;
-const unique T.Memory48___unnamed_24_d7c4ec3a:name;
-const unique T.Memory64___unnamed_24_d7c4ec3a:name;
-const unique T.ReplaceIfExists___unnamed_2_196a7f56:name;
-const unique T.AdvanceOnly___unnamed_2_196a7f56:name;
-const unique T.__unnamed_16_5fed8f23___unnamed_40_a0414182:name;
-const unique T.Thread___unnamed_40_a0414182:name;
-const unique T.AuxiliaryBuffer___unnamed_40_a0414182:name;
-const unique T.__unnamed_12_c6ed93f3___unnamed_40_a0414182:name;
-const unique T.OriginalFileObject___unnamed_40_a0414182:name;
-const unique T.ListEntry___unnamed_40_d90496f4:name;
-const unique T.Wcb___unnamed_40_d90496f4:name;
-const unique T.InitialPrivilegeSet___unnamed_44_a7026dca:name;
-const unique T.PrivilegeSet___unnamed_44_a7026dca:name;
-const unique T.Overlay___unnamed_48_c1da9fa5:name;
-const unique T.Apc___unnamed_48_c1da9fa5:name;
-const unique T.CompletionKey___unnamed_48_c1da9fa5:name;
-const unique T.PowerSequence___unnamed_4_0510b147:name;
-const unique T.Length___unnamed_4_0a569078:name;
-const unique T.Status___unnamed_4_16aff58e:name;
-const unique T.Pointer___unnamed_4_16aff58e:name;
-const unique T.IdType___unnamed_4_40bf8e34:name;
-const unique T.Address___unnamed_4_46b62f69:name;
-const unique T.CreatorBackTraceIndex___unnamed_4_46b62f69:name;
-const unique T.Capabilities___unnamed_4_73d46255:name;
-const unique T.Srb___unnamed_4_765e3037:name;
-const unique T.Type___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_2bb39c56___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_e30779f5___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_9fa0583a___unnamed_4_846adf3f:name;
-const unique T.PowerState___unnamed_4_8dd73d30:name;
-const unique T.Type___unnamed_4_957e0d74:name;
-const unique T.Buttons___unnamed_4_9c11ed91:name;
-const unique T.__unnamed_4_b5247f10___unnamed_4_9c11ed91:name;
-const unique T.IoResourceRequirementList___unnamed_4_a58d40c8:name;
-const unique T.CurrentStackLocation___unnamed_4_a7aa989c:name;
-const unique T.PacketType___unnamed_4_a7aa989c:name;
-const unique T.__unnamed_2_196a7f56___unnamed_4_a7d0864c:name;
-const unique T.ClusterCount___unnamed_4_a7d0864c:name;
-const unique T.DeleteHandle___unnamed_4_a7d0864c:name;
-const unique T.Length___unnamed_4_aa20b426:name;
-const unique T.UserApcRoutine___unnamed_4_ab87ddfd:name;
-const unique T.IssuingProcess___unnamed_4_ab87ddfd:name;
-const unique T.Reserved1___unnamed_4_b016b1e1:name;
-const unique T.TargetSystemState___unnamed_4_b016b1e1:name;
-const unique T.EffectiveSystemState___unnamed_4_b016b1e1:name;
-const unique T.CurrentSystemState___unnamed_4_b016b1e1:name;
-const unique T.IgnoreHibernationPath___unnamed_4_b016b1e1:name;
-const unique T.PseudoTransition___unnamed_4_b016b1e1:name;
-const unique T.Reserved2___unnamed_4_b016b1e1:name;
-const unique T.SystemContext___unnamed_4_b060dea6:name;
-const unique T.SystemPowerStateContext___unnamed_4_b060dea6:name;
-const unique T.__unnamed_4_b016b1e1___unnamed_4_b4f5a780:name;
-const unique T.ContextAsUlong___unnamed_4_b4f5a780:name;
-const unique T.ButtonFlags___unnamed_4_b5247f10:name;
-const unique T.ButtonData___unnamed_4_b5247f10:name;
-const unique T.OwnerCount___unnamed_4_c1e23b02:name;
-const unique T.TableSize___unnamed_4_c1e23b02:name;
-const unique T.__unnamed_4_846adf3f___unnamed_4_c9b2e921:name;
-const unique T.Lock___unnamed_4_c9b2e921:name;
-const unique T.MasterIrp___unnamed_4_fa7b96a7:name;
-const unique T.IrpCount___unnamed_4_fa7b96a7:name;
-const unique T.SystemBuffer___unnamed_4_fa7b96a7:name;
-const unique T.Vpb___unnamed_8_09ad2712:name;
-const unique T.DeviceObject___unnamed_8_09ad2712:name;
-const unique T.Length___unnamed_8_21ac1dba:name;
-const unique T.CompletionFilter___unnamed_8_21ac1dba:name;
-const unique T.Length___unnamed_8_27d3ab76:name;
-const unique T.FsInformationClass___unnamed_8_27d3ab76:name;
-const unique T.Vpb___unnamed_8_4289df81:name;
-const unique T.DeviceObject___unnamed_8_4289df81:name;
-const unique T.Length___unnamed_8_47b72724:name;
-const unique T.FileInformationClass___unnamed_8_47b72724:name;
-const unique T.DeviceTextType___unnamed_8_4b3e3ba3:name;
-const unique T.LocaleId___unnamed_8_4b3e3ba3:name;
-const unique T.__unnamed_4_ab87ddfd___unnamed_8_4f695993:name;
-const unique T.UserApcContext___unnamed_8_4f695993:name;
-const unique T.AllocatedResources___unnamed_8_5cfb6ca4:name;
-const unique T.AllocatedResourcesTranslated___unnamed_8_5cfb6ca4:name;
-const unique T.SecurityInformation___unnamed_8_606438c5:name;
-const unique T.Length___unnamed_8_606438c5:name;
-const unique T.MinimumChannel___unnamed_8_6ad774c0:name;
-const unique T.MaximumChannel___unnamed_8_6ad774c0:name;
-const unique T.Length___unnamed_8_805045cb:name;
-const unique T.FsInformationClass___unnamed_8_805045cb:name;
-const unique T.LowPart___unnamed_8_8684a3e7:name;
-const unique T.HighPart___unnamed_8_8684a3e7:name;
-const unique T.SecurityInformation___unnamed_8_8cc410da:name;
-const unique T.SecurityDescriptor___unnamed_8_8cc410da:name;
-const unique T.InPath___unnamed_8_a47253e0:name;
-const unique T.Reserved___unnamed_8_a47253e0:name;
-const unique T.Type___unnamed_8_a47253e0:name;
-const unique T.AsynchronousParameters___unnamed_8_bbd07f6c:name;
-const unique T.AllocationSize___unnamed_8_bbd07f6c:name;
-const unique T.LowPart___unnamed_8_c9ca8234:name;
-const unique T.HighPart___unnamed_8_c9ca8234:name;
-
-// Type declarations
-
-const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_LIST:name;
-const unique T.A1_LUID_AND_ATTRIBUTES:name;
-const unique T.A256UINT2:name;
-const unique T.A28PFDRIVER_DISPATCH:name;
-const unique T.A2UCHAR:name;
-const unique T.A2UINT2:name;
-const unique T.A32UINT2:name;
-const unique T.A3UCHAR:name;
-const unique T.A3UINT4:name;
-const unique T.A3_LUID_AND_ATTRIBUTES:name;
-const unique T.A4PVOID:name;
-const unique T.A4UINT4:name;
-const unique T.A5UINT2:name;
-const unique T.A5_DEVICE_POWER_STATE:name;
-const unique T.A7_DEVICE_POWER_STATE:name;
-const unique T.A85CHAR:name;
-const unique T.A8UCHAR:name;
-const unique T.A9UINT2:name;
-const unique T.BUS_QUERY_ID_TYPE:name;
-const unique T.CHAR:name;
-const unique T.DEVICE_TEXT_TYPE:name;
-const unique T.F0:name;
-const unique T.F1:name;
-const unique T.F10:name;
-const unique T.F11:name;
-const unique T.F12:name;
-const unique T.F13:name;
-const unique T.F14:name;
-const unique T.F15:name;
-const unique T.F16:name;
-const unique T.F17:name;
-const unique T.F18:name;
-const unique T.F19:name;
-const unique T.F2:name;
-const unique T.F20:name;
-const unique T.F21:name;
-const unique T.F22:name;
-const unique T.F23:name;
-const unique T.F24:name;
-const unique T.F25:name;
-const unique T.F26:name;
-const unique T.F27:name;
-const unique T.F28:name;
-const unique T.F29:name;
-const unique T.F3:name;
-const unique T.F30:name;
-const unique T.F31:name;
-const unique T.F32:name;
-const unique T.F33:name;
-const unique T.F34:name;
-const unique T.F35:name;
-const unique T.F36:name;
-const unique T.F37:name;
-const unique T.F38:name;
-const unique T.F4:name;
-const unique T.F5:name;
-const unique T.F6:name;
-const unique T.F7:name;
-const unique T.F8:name;
-const unique T.F9:name;
-const unique T.FDRIVER_ADD_DEVICE:name;
-const unique T.FDRIVER_CANCEL:name;
-const unique T.FDRIVER_CONTROL:name;
-const unique T.FDRIVER_DISPATCH:name;
-const unique T.FDRIVER_INITIALIZE:name;
-const unique T.FDRIVER_STARTIO:name;
-const unique T.FDRIVER_UNLOAD:name;
-const unique T.FFAST_IO_ACQUIRE_FILE:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.FFAST_IO_DETACH_DEVICE:name;
-const unique T.FFAST_IO_DEVICE_CONTROL:name;
-const unique T.FFAST_IO_LOCK:name;
-const unique T.FFAST_IO_MDL_READ:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.FFAST_IO_QUERY_OPEN:name;
-const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.FFAST_IO_READ:name;
-const unique T.FFAST_IO_READ_COMPRESSED:name;
-const unique T.FFAST_IO_RELEASE_FILE:name;
-const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_UNLOCK_ALL:name;
-const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.FFAST_IO_UNLOCK_SINGLE:name;
-const unique T.FFAST_IO_WRITE:name;
-const unique T.FFAST_IO_WRITE_COMPRESSED:name;
-const unique T.FIO_COMPLETION_ROUTINE:name;
-const unique T.FKDEFERRED_ROUTINE:name;
-const unique T.INT2:name;
-const unique T.INT4:name;
-const unique T.INT8:name;
-const unique T.PA256UINT2:name;
-const unique T.PA2UINT2:name;
-const unique T.PA4UINT4:name;
-const unique T.PA5UINT2:name;
-const unique T.PA85CHAR:name;
-const unique T.PA9UINT2:name;
-const unique T.PCHAR:name;
-const unique T.PF19:name;
-const unique T.PF21:name;
-const unique T.PF23:name;
-const unique T.PF24:name;
-const unique T.PF25:name;
-const unique T.PF33:name;
-const unique T.PF34:name;
-const unique T.PF35:name;
-const unique T.PF36:name;
-const unique T.PF37:name;
-const unique T.PF38:name;
-const unique T.PFDRIVER_ADD_DEVICE:name;
-const unique T.PFDRIVER_CANCEL:name;
-const unique T.PFDRIVER_CONTROL:name;
-const unique T.PFDRIVER_DISPATCH:name;
-const unique T.PFDRIVER_INITIALIZE:name;
-const unique T.PFDRIVER_STARTIO:name;
-const unique T.PFDRIVER_UNLOAD:name;
-const unique T.PFFAST_IO_ACQUIRE_FILE:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.PFFAST_IO_DETACH_DEVICE:name;
-const unique T.PFFAST_IO_DEVICE_CONTROL:name;
-const unique T.PFFAST_IO_LOCK:name;
-const unique T.PFFAST_IO_MDL_READ:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.PFFAST_IO_QUERY_OPEN:name;
-const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.PFFAST_IO_READ:name;
-const unique T.PFFAST_IO_READ_COMPRESSED:name;
-const unique T.PFFAST_IO_RELEASE_FILE:name;
-const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_UNLOCK_ALL:name;
-const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
-const unique T.PFFAST_IO_WRITE:name;
-const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
-const unique T.PFIO_COMPLETION_ROUTINE:name;
-const unique T.PFKDEFERRED_ROUTINE:name;
-const unique T.PINT4:name;
-const unique T.POWER_ACTION:name;
-const unique T.PPCHAR:name;
-const unique T.PPF24:name;
-const unique T.PPPUINT2:name;
-const unique T.PPP_DEVICE_OBJECT:name;
-const unique T.PPP_FILE_OBJECT:name;
-const unique T.PPUINT2:name;
-const unique T.PPUINT4:name;
-const unique T.PPVOID:name;
-const unique T.PP_DEVICE_EXTENSION:name;
-const unique T.PP_DEVICE_OBJECT:name;
-const unique T.PP_DRIVER_OBJECT:name;
-const unique T.PP_ERESOURCE:name;
-const unique T.PP_FAST_MUTEX:name;
-const unique T.PP_FILE_OBJECT:name;
-const unique T.PP_LIST_ENTRY:name;
-const unique T.PP_MDL:name;
-const unique T.PP_PORT:name;
-const unique T.PP_UNICODE_STRING:name;
-const unique T.PUCHAR:name;
-const unique T.PUINT2:name;
-const unique T.PUINT4:name;
-const unique T.PVOID:name;
-const unique T.PWMIGUIDREGINFO:name;
-const unique T.P_ACCESS_STATE:name;
-const unique T.P_CM_RESOURCE_LIST:name;
-const unique T.P_COMPRESSED_DATA_INFO:name;
-const unique T.P_DEVICE_CAPABILITIES:name;
-const unique T.P_DEVICE_EXTENSION:name;
-const unique T.P_DEVICE_OBJECT:name;
-const unique T.P_DEVOBJ_EXTENSION:name;
-const unique T.P_DRIVER_EXTENSION:name;
-const unique T.P_DRIVER_OBJECT:name;
-const unique T.P_EPROCESS:name;
-const unique T.P_ERESOURCE:name;
-const unique T.P_ETHREAD:name;
-const unique T.P_FAST_IO_DISPATCH:name;
-const unique T.P_FAST_MUTEX:name;
-const unique T.P_FILE_BASIC_INFORMATION:name;
-const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
-const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.P_FILE_OBJECT:name;
-const unique T.P_FILE_STANDARD_INFORMATION:name;
-const unique T.P_GLOBALS:name;
-const unique T.P_GUID:name;
-const unique T.P_INTERFACE:name;
-const unique T.P_IO_COMPLETION_CONTEXT:name;
-const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.P_IO_SECURITY_CONTEXT:name;
-const unique T.P_IO_STACK_LOCATION:name;
-const unique T.P_IO_STATUS_BLOCK:name;
-const unique T.P_IO_TIMER:name;
-const unique T.P_IRP:name;
-const unique T.P_KAPC:name;
-const unique T.P_KDPC:name;
-const unique T.P_KEVENT:name;
-const unique T.P_KSEMAPHORE:name;
-const unique T.P_KTHREAD:name;
-const unique T.P_LARGE_INTEGER:name;
-const unique T.P_LIST_ENTRY:name;
-const unique T.P_MDL:name;
-const unique T.P_MOUSE_INPUT_DATA:name;
-const unique T.P_OWNER_ENTRY:name;
-const unique T.P_POOL_TYPE:name;
-const unique T.P_PORT:name;
-const unique T.P_POWER_SEQUENCE:name;
-const unique T.P_SCSI_REQUEST_BLOCK:name;
-const unique T.P_SECTION_OBJECT_POINTERS:name;
-const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.P_UNICODE_STRING:name;
-const unique T.P_VPB:name;
-const unique T.UCHAR:name;
-const unique T.UINT2:name;
-const unique T.UINT4:name;
-const unique T.VOID:name;
-const unique T.WMIENABLEDISABLECONTROL:name;
-const unique T.WMIGUIDREGINFO:name;
-const unique T._ACCESS_STATE:name;
-const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_LIST:name;
-const unique T._CM_RESOURCE_LIST:name;
-const unique T._COMPRESSED_DATA_INFO:name;
-const unique T._DEVICE_CAPABILITIES:name;
-const unique T._DEVICE_EXTENSION:name;
-const unique T._DEVICE_OBJECT:name;
-const unique T._DEVICE_POWER_STATE:name;
-const unique T._DEVICE_RELATION_TYPE:name;
-const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
-const unique T._DEVOBJ_EXTENSION:name;
-const unique T._DISPATCHER_HEADER:name;
-const unique T._DRIVER_EXTENSION:name;
-const unique T._DRIVER_OBJECT:name;
-const unique T._EPROCESS:name;
-const unique T._ERESOURCE:name;
-const unique T._ETHREAD:name;
-const unique T._FAST_IO_DISPATCH:name;
-const unique T._FAST_MUTEX:name;
-const unique T._FILE_BASIC_INFORMATION:name;
-const unique T._FILE_GET_QUOTA_INFORMATION:name;
-const unique T._FILE_INFORMATION_CLASS:name;
-const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T._FILE_OBJECT:name;
-const unique T._FILE_STANDARD_INFORMATION:name;
-const unique T._FSINFOCLASS:name;
-const unique T._GLOBALS:name;
-const unique T._GUID:name;
-const unique T._INITIAL_PRIVILEGE_SET:name;
-const unique T._INTERFACE:name;
-const unique T._INTERFACE_TYPE:name;
-const unique T._IO_ALLOCATION_ACTION:name;
-const unique T._IO_COMPLETION_CONTEXT:name;
-const unique T._IO_REMOVE_LOCK:name;
-const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T._IO_RESOURCE_DESCRIPTOR:name;
-const unique T._IO_RESOURCE_LIST:name;
-const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T._IO_SECURITY_CONTEXT:name;
-const unique T._IO_STACK_LOCATION:name;
-const unique T._IO_STATUS_BLOCK:name;
-const unique T._IO_TIMER:name;
-const unique T._IRP:name;
-const unique T._IRQ_DEVICE_POLICY:name;
-const unique T._IRQ_PRIORITY:name;
-const unique T._KAPC:name;
-const unique T._KDEVICE_QUEUE:name;
-const unique T._KDEVICE_QUEUE_ENTRY:name;
-const unique T._KDPC:name;
-const unique T._KEVENT:name;
-const unique T._KSEMAPHORE:name;
-const unique T._KTHREAD:name;
-const unique T._LARGE_INTEGER:name;
-const unique T._LIST_ENTRY:name;
-const unique T._LUID:name;
-const unique T._LUID_AND_ATTRIBUTES:name;
-const unique T._MDL:name;
-const unique T._MOUSE_ATTRIBUTES:name;
-const unique T._MOUSE_INPUT_DATA:name;
-const unique T._OWNER_ENTRY:name;
-const unique T._POOL_TYPE:name;
-const unique T._PORT:name;
-const unique T._POWER_SEQUENCE:name;
-const unique T._POWER_STATE:name;
-const unique T._POWER_STATE_TYPE:name;
-const unique T._PRIVILEGE_SET:name;
-const unique T._SCSI_REQUEST_BLOCK:name;
-const unique T._SECTION_OBJECT_POINTERS:name;
-const unique T._SECURITY_IMPERSONATION_LEVEL:name;
-const unique T._SECURITY_QUALITY_OF_SERVICE:name;
-const unique T._SECURITY_SUBJECT_CONTEXT:name;
-const unique T._SYSTEM_POWER_STATE:name;
-const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T._UNICODE_STRING:name;
-const unique T._VPB:name;
-const unique T._WAIT_CONTEXT_BLOCK:name;
-const unique T._WMILIB_CONTEXT:name;
-const unique T.__unnamed_12_06b9ee6e:name;
-const unique T.__unnamed_12_0882bd02:name;
-const unique T.__unnamed_12_264d0dab:name;
-const unique T.__unnamed_12_2e80217b:name;
-const unique T.__unnamed_12_5cc7ace2:name;
-const unique T.__unnamed_12_6374506e:name;
-const unique T.__unnamed_12_68a4278e:name;
-const unique T.__unnamed_12_79ed2653:name;
-const unique T.__unnamed_12_7da594c0:name;
-const unique T.__unnamed_12_9873e05d:name;
-const unique T.__unnamed_12_9cc8cebc:name;
-const unique T.__unnamed_12_b98da82e:name;
-const unique T.__unnamed_12_c2880e88:name;
-const unique T.__unnamed_12_c49ab31a:name;
-const unique T.__unnamed_12_c6ed93f3:name;
-const unique T.__unnamed_12_ced61554:name;
-const unique T.__unnamed_12_d9c44df5:name;
-const unique T.__unnamed_12_db3dcbfc:name;
-const unique T.__unnamed_12_fb26b3fc:name;
-const unique T.__unnamed_16_22e4d054:name;
-const unique T.__unnamed_16_39b626ad:name;
-const unique T.__unnamed_16_56c011d7:name;
-const unique T.__unnamed_16_5fed8f23:name;
-const unique T.__unnamed_16_6be9abe0:name;
-const unique T.__unnamed_16_78879a38:name;
-const unique T.__unnamed_16_804a2f24:name;
-const unique T.__unnamed_16_8586693f:name;
-const unique T.__unnamed_16_8831e65f:name;
-const unique T.__unnamed_16_8c2d663a:name;
-const unique T.__unnamed_16_913b9a7a:name;
-const unique T.__unnamed_16_94d1d1c7:name;
-const unique T.__unnamed_16_a2fab4da:name;
-const unique T.__unnamed_16_ae643f17:name;
-const unique T.__unnamed_16_c1b29316:name;
-const unique T.__unnamed_16_cbd53ed4:name;
-const unique T.__unnamed_16_db70db6e:name;
-const unique T.__unnamed_16_ef4b6307:name;
-const unique T.__unnamed_16_fdda1f62:name;
-const unique T.__unnamed_1_1394de4b:name;
-const unique T.__unnamed_1_2bb39c56:name;
-const unique T.__unnamed_1_9fa0583a:name;
-const unique T.__unnamed_1_e30779f5:name;
-const unique T.__unnamed_20_83d468e4:name;
-const unique T.__unnamed_24_035931da:name;
-const unique T.__unnamed_24_38e128db:name;
-const unique T.__unnamed_24_9500ea34:name;
-const unique T.__unnamed_24_9734802c:name;
-const unique T.__unnamed_24_af62813f:name;
-const unique T.__unnamed_24_c0555099:name;
-const unique T.__unnamed_24_d7c4ec3a:name;
-const unique T.__unnamed_2_196a7f56:name;
-const unique T.__unnamed_40_a0414182:name;
-const unique T.__unnamed_40_d90496f4:name;
-const unique T.__unnamed_44_a7026dca:name;
-const unique T.__unnamed_48_c1da9fa5:name;
-const unique T.__unnamed_4_0510b147:name;
-const unique T.__unnamed_4_0a569078:name;
-const unique T.__unnamed_4_16aff58e:name;
-const unique T.__unnamed_4_40bf8e34:name;
-const unique T.__unnamed_4_46b62f69:name;
-const unique T.__unnamed_4_73d46255:name;
-const unique T.__unnamed_4_765e3037:name;
-const unique T.__unnamed_4_846adf3f:name;
-const unique T.__unnamed_4_8dd73d30:name;
-const unique T.__unnamed_4_957e0d74:name;
-const unique T.__unnamed_4_9c11ed91:name;
-const unique T.__unnamed_4_a58d40c8:name;
-const unique T.__unnamed_4_a7aa989c:name;
-const unique T.__unnamed_4_a7d0864c:name;
-const unique T.__unnamed_4_aa20b426:name;
-const unique T.__unnamed_4_ab87ddfd:name;
-const unique T.__unnamed_4_b016b1e1:name;
-const unique T.__unnamed_4_b060dea6:name;
-const unique T.__unnamed_4_b4f5a780:name;
-const unique T.__unnamed_4_b5247f10:name;
-const unique T.__unnamed_4_c1e23b02:name;
-const unique T.__unnamed_4_c9b2e921:name;
-const unique T.__unnamed_4_fa7b96a7:name;
-const unique T.__unnamed_8_09ad2712:name;
-const unique T.__unnamed_8_21ac1dba:name;
-const unique T.__unnamed_8_27d3ab76:name;
-const unique T.__unnamed_8_4289df81:name;
-const unique T.__unnamed_8_47b72724:name;
-const unique T.__unnamed_8_4b3e3ba3:name;
-const unique T.__unnamed_8_4f695993:name;
-const unique T.__unnamed_8_5cfb6ca4:name;
-const unique T.__unnamed_8_606438c5:name;
-const unique T.__unnamed_8_6ad774c0:name;
-const unique T.__unnamed_8_805045cb:name;
-const unique T.__unnamed_8_8684a3e7:name;
-const unique T.__unnamed_8_8cc410da:name;
-const unique T.__unnamed_8_a47253e0:name;
-const unique T.__unnamed_8_bbd07f6c:name;
-const unique T.__unnamed_8_c9ca8234:name;
-
-function AssocClassList__GLOBALS(int) returns (int);
-function AssocClassList__GLOBALSInv(int) returns (int);
-function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
-function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
-function BaseClassName__GLOBALS(int) returns (int);
-function BaseClassName__GLOBALSInv(int) returns (int);
-function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
-function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 344);
-axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 344);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1) == BaseClassName__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 344)} MINUS_LEFT_PTR(x, 1, 344) == BaseClassName__GLOBALSInv(x));
-function Buffer__UNICODE_STRING(int) returns (int);
-function Buffer__UNICODE_STRINGInv(int) returns (int);
-function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
-function DataIn__DEVICE_EXTENSION(int) returns (int);
-function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
-function DataOut__DEVICE_EXTENSION(int) returns (int);
-function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
-function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
-function File__DEVICE_EXTENSION(int) returns (int);
-function File__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 260);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 260);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == File__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == File__DEVICE_EXTENSIONInv(x));
-function File__PORT(int) returns (int);
-function File__PORTInv(int) returns (int);
-function _S_File__PORT([int]bool) returns ([int]bool);
-function _S_File__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
-
-axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
-function Flags__DEVICE_OBJECT(int) returns (int);
-function Flags__DEVICE_OBJECTInv(int) returns (int);
-function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
-axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
-function Flink__LIST_ENTRY(int) returns (int);
-function Flink__LIST_ENTRYInv(int) returns (int);
-function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
-function Free__PORT(int) returns (int);
-function Free__PORTInv(int) returns (int);
-function _S_Free__PORT([int]bool) returns ([int]bool);
-function _S_Free__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
-
-axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
-function GrandMaster__GLOBALS(int) returns (int);
-function GrandMaster__GLOBALSInv(int) returns (int);
-function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
-function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
-function InitExtension__GLOBALS(int) returns (int);
-function InitExtension__GLOBALSInv(int) returns (int);
-function _S_InitExtension__GLOBALS([int]bool) returns ([int]bool);
-function _S_InitExtension__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InitExtension__GLOBALSInv(InitExtension__GLOBALS(x))} InitExtension__GLOBALSInv(InitExtension__GLOBALS(x)) == x);
-axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALS(InitExtension__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALS(S)[x]} _S_InitExtension__GLOBALS(S)[x] <==> S[InitExtension__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALSInv(S)[x]} _S_InitExtension__GLOBALSInv(S)[x] <==> S[InitExtension__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALS(S)} S[x] ==> _S_InitExtension__GLOBALS(S)[InitExtension__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALSInv(S)} S[x] ==> _S_InitExtension__GLOBALSInv(S)[InitExtension__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {InitExtension__GLOBALS(x)} InitExtension__GLOBALS(x) == x + 64);
-axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALSInv(x) == x - 64);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1) == InitExtension__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 64)} MINUS_LEFT_PTR(x, 1, 64) == InitExtension__GLOBALSInv(x));
-function InputData__DEVICE_EXTENSION(int) returns (int);
-function InputData__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
-function LegacyDeviceList__GLOBALS(int) returns (int);
-function LegacyDeviceList__GLOBALSInv(int) returns (int);
-function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
-function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 864);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 864);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1) == LegacyDeviceList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 864)} MINUS_LEFT_PTR(x, 1, 864) == LegacyDeviceList__GLOBALSInv(x));
-function Length__UNICODE_STRING(int) returns (int);
-function Length__UNICODE_STRINGInv(int) returns (int);
-function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
-axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
-function Link__DEVICE_EXTENSION(int) returns (int);
-function Link__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 252);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 252);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == Link__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == Link__DEVICE_EXTENSIONInv(x));
-function MaximumLength__UNICODE_STRING(int) returns (int);
-function MaximumLength__UNICODE_STRINGInv(int) returns (int);
-function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
-axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
-function Mutex__GLOBALS(int) returns (int);
-function Mutex__GLOBALSInv(int) returns (int);
-function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
-function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
-axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
-function NumberLegacyPorts__GLOBALS(int) returns (int);
-function NumberLegacyPorts__GLOBALSInv(int) returns (int);
-function _S_NumberLegacyPorts__GLOBALS([int]bool) returns ([int]bool);
-function _S_NumberLegacyPorts__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x))} NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x)) == x);
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALS(NumberLegacyPorts__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALS(S)[x]} _S_NumberLegacyPorts__GLOBALS(S)[x] <==> S[NumberLegacyPorts__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALSInv(S)[x]} _S_NumberLegacyPorts__GLOBALSInv(S)[x] <==> S[NumberLegacyPorts__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALS(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALS(S)[NumberLegacyPorts__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALSInv(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALSInv(S)[NumberLegacyPorts__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALS(x)} NumberLegacyPorts__GLOBALS(x) == x + 20);
-axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALSInv(x) == x - 20);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == NumberLegacyPorts__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == NumberLegacyPorts__GLOBALSInv(x));
-function PnP__DEVICE_EXTENSION(int) returns (int);
-function PnP__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
-function Port__PORT(int) returns (int);
-function Port__PORTInv(int) returns (int);
-function _S_Port__PORT([int]bool) returns ([int]bool);
-function _S_Port__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
-
-axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
-function PortsServiced__GLOBALS(int) returns (int);
-function PortsServiced__GLOBALSInv(int) returns (int);
-function _S_PortsServiced__GLOBALS([int]bool) returns ([int]bool);
-function _S_PortsServiced__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x))} PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x)) == x);
-axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALS(PortsServiced__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALS(S)[x]} _S_PortsServiced__GLOBALS(S)[x] <==> S[PortsServiced__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALSInv(S)[x]} _S_PortsServiced__GLOBALSInv(S)[x] <==> S[PortsServiced__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALS(S)} S[x] ==> _S_PortsServiced__GLOBALS(S)[PortsServiced__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALSInv(S)} S[x] ==> _S_PortsServiced__GLOBALSInv(S)[PortsServiced__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {PortsServiced__GLOBALS(x)} PortsServiced__GLOBALS(x) == x + 60);
-axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALSInv(x) == x - 60);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 60, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 60, 1) == PortsServiced__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 60)} MINUS_LEFT_PTR(x, 1, 60) == PortsServiced__GLOBALSInv(x));
-function Self__DEVICE_EXTENSION(int) returns (int);
-function Self__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
-function SpinLock__DEVICE_EXTENSION(int) returns (int);
-function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 152);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 152);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 152)} MINUS_LEFT_PTR(x, 1, 152) == SpinLock__DEVICE_EXTENSIONInv(x));
-function StackSize__DEVICE_OBJECT(int) returns (int);
-function StackSize__DEVICE_OBJECTInv(int) returns (int);
-function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
-function Started__DEVICE_EXTENSION(int) returns (int);
-function Started__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
-function TopPort__DEVICE_EXTENSION(int) returns (int);
-function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
-function UnitId__DEVICE_EXTENSION(int) returns (int);
-function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 176);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 176);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == UnitId__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == UnitId__DEVICE_EXTENSIONInv(x));
-function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure nondet_choice() returns (x:int);
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-var Res_DEVICE_STACK:[int]int;
-var Res_DEV_EXTN:[int]int;
-var Res_DEV_OBJ_INIT:[int]int;
-var Res_SPIN_LOCK:[int]int;
-
-
-
-////////////////////
-// Between predicate
-////////////////////
-function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
-function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
-
-
-//////////////////////////
-// Between set constructor
-//////////////////////////
-function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
-
-////////////////////////////////////////////////////
-// axioms relating ReachBetween and ReachBetweenSet
-////////////////////////////////////////////////////
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
-axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
-
-
-//////////////////////////
-// Axioms for ReachBetween
-//////////////////////////
-
-// reflexive
-axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
-
-// step
-//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
-axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
-
-// reach
-axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
-
-// cycle
-axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
-
-// sandwich
-axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
-
-// order1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
-
-// order2
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
-
-// transitive1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
-
-// transitive2
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
-
-// transitive3
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
-
-// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
-// It cannot be proved using the rest of the axioms.
-axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
-
-// relation between ReachAvoiding and ReachBetween
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
-
-// update
-axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
- ///////////////////////////////
- // Shifts for linking fields
- ///////////////////////////////
-function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
-axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
-axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
-
-const unique Globals : int;
-axiom(Globals != 0);
-// the set of constants for 64 bit integers that Boogie doesn't parse
-const unique BOOGIE_LARGE_INT_3221553153:int;
-
-
-
-procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure InsertTailList($ListHead$1$6980.24$InsertTailList$81:int, $Entry$2$6981.41$InsertTailList$81:int);
-
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead), __setunion(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead)), __set(Entry)))
-ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81))) && Subset(Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
-requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
-//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
-ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
-//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
-ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
-//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
-ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
-//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoGetDeviceObjectPointer($ObjectName$1$21492.26$IoGetDeviceObjectPointer$161:int, $DesiredAccess$2$21493.22$IoGetDeviceObjectPointer$161:int, $FileObject$3$21494.24$IoGetDeviceObjectPointer$161:int, $DeviceObject$4$21495.26$IoGetDeviceObjectPointer$161:int) returns ($result.IoGetDeviceObjectPointer$21491.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouCreateClassObject($DriverObject$1$3165.28$MouCreateClassObject$201:int, $TmpDeviceExtension$2$3166.28$MouCreateClassObject$201:int, $ClassDeviceObject$3$3167.28$MouCreateClassObject$201:int, $FullDeviceName$4$3168.35$MouCreateClassObject$201:int, $Legacy$5$3169.28$MouCreateClassObject$201:int) returns ($result.MouCreateClassObject$3164.0$1$:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] != 0));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1)));
-//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 0)));
-//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] := 1])));
-//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
-ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]])));
-//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __setin(_H_z, __set((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))) || __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])[_H_z]) || ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-//TAG: ensures !((LONG)__return >= 0) ==> __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-//TAG: ensures (LONG)__return >= 0 ==> __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))->SpinLock) == 0
-ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])] == 0));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: &TmpDeviceExtension->WaitWakeSpinLock, &((struct _DEVICE_EXTENSION *)TmpDeviceExtension)->SpinLock, __set_true
-ensures (Subset(Empty(), Union(Union(Union(Empty(), Singleton(WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), Singleton(SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), SetTrue())) && (forall r:int :: {Res_SPIN_LOCK[r]} (WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SetTrue()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
-ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3167.28$MouCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3167.28$MouCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouDeterminePortsServiced($BasePortName$1$3491.23$MouDeterminePortsServiced$81:int, $NumberPortsServiced$2$3492.18$MouDeterminePortsServiced$81:int) returns ($result.MouDeterminePortsServiced$3490.0$1$:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouseAddDeviceEx($ClassData$1$792.28$MouseAddDeviceEx$121:int, $FullClassName$2$793.29$MouseAddDeviceEx$121:int, $File$3$794.28$MouseAddDeviceEx$121:int) returns ($result.MouseAddDeviceEx$791.0$1$:int);
-
-//TAG: requires __resource("DEV_EXTN", ClassData) == 1
-requires(Res_DEV_EXTN[$ClassData$1$792.28$MouseAddDeviceEx$121] == 1);
-//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)ClassData)->SpinLock) == 0
-requires(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121)] == 0);
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __resource("DEV_EXTN", ClassData) == 1
-ensures(Res_DEV_EXTN[$ClassData$1$792.28$MouseAddDeviceEx$121] == 1);
-//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)ClassData)->WaitWakeSpinLock) == 0
-ensures(Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121)] == 0);
-//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)ClassData)->SpinLock) == 0
-ensures(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121)] == 0);
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: &ClassData->WaitWakeSpinLock, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Singleton(WaitWakeSpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121))), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (WaitWakeSpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121) == r) || (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouseClassLogError($Object$1$4550.10$MouseClassLogError$281:int, $ErrorCode$2$4551.10$MouseClassLogError$281:int, $UniqueErrorValue$3$4552.10$MouseClassLogError$281:int, $FinalStatus$4$4553.13$MouseClassLogError$281:int, $DumpCount$5$4554.10$MouseClassLogError$281:int, $DumpData$6$4555.11$MouseClassLogError$281:int, $MajorFunction$7$4556.10$MouseClassLogError$281:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlCopyUnicodeString($DestinationString$1$7401.28$RtlCopyUnicodeString$81:int, $SourceString$2$7402.30$RtlCopyUnicodeString$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RtlInitUnicodeString($DestinationString$1$7281.26$RtlInitUnicodeString$81:int, $SourceString$2$7282.37$RtlInitUnicodeString$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure __PREfastPagedCode();
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouseClassFindMorePorts($DriverObject$1$4588.20$MouseClassFindMorePorts$121:int, $Context$2$4589.20$MouseClassFindMorePorts$121:int, $Count$3$4590.20$MouseClassFindMorePorts$121:int)
-
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-modifies alloc;
-free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for:
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for:
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for:
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for:
-
-//TAG: havoc memory locations by default
-modifies Mem;
-{
-var havoc_stringTemp:int;
-var condVal:int;
-var $Context$2$4589.20$MouseClassFindMorePorts$12 : int;
-var $Count$3$4590.20$MouseClassFindMorePorts$12 : int;
-var $DriverObject$1$4588.20$MouseClassFindMorePorts$12 : int;
-var $ExAllocatePoolWithTag.arg.2$5$ : int;
-var $MouDebugPrint.arg.2$6$ : int;
-var $RtlAppendUnicodeToString.arg.2$10$ : int;
-var $RtlAppendUnicodeToString.arg.2$13$ : int;
-var $RtlAppendUnicodeToString.arg.2$3$ : int;
-var $basePortBuffer$13$4622.28$MouseClassFindMorePorts$12 : int;
-var $basePortName$11$4620.28$MouseClassFindMorePorts$12 : int;
-var $classDeviceObject$6$4615.28$MouseClassFindMorePorts$12 : int;
-var $deviceExtension$5$4614.28$MouseClassFindMorePorts$12 : int;
-var $dumpData$7$4616.28$MouseClassFindMorePorts$12 : int;
-var $file$15$4624.28$MouseClassFindMorePorts$12 : int;
-var $fullClassName$14$4623.28$MouseClassFindMorePorts$12 : int;
-var $fullPortName$12$4621.28$MouseClassFindMorePorts$12 : int;
-var $i$8$4617.28$MouseClassFindMorePorts$12 : int;
-var $memset.arg.3$8$ : int;
-var $numPorts$9$4618.28$MouseClassFindMorePorts$12 : int;
-var $port$16$4759.22$MouseClassFindMorePorts$12 : int;
-var $result.ExAllocatePoolWithTag$4653.0$4$ : int;
-var $result.IoGetDeviceObjectPointer$4731.42$16$ : int;
-var $result.MouCreateClassObject$4708.37$15$ : int;
-var $result.MouDeterminePortsServiced$4680.29$14$ : int;
-var $result.MouseAddDeviceEx$4743.34$17$ : int;
-var $result.ObfDereferenceObject$4772.16$18$ : int;
-var $result.RtlAppendUnicodeToString$4642.28$2$ : int;
-var $result.RtlAppendUnicodeToString$4676.28$9$ : int;
-var $result.RtlAppendUnicodeToString$4677.28$11$ : int;
-var $result.RtlAppendUnicodeToString$4678.28$12$ : int;
-var $result.memset$4630.4$1$ : int;
-var $result.memset$4675.4$7$ : int;
-var $status$4$4613.28$MouseClassFindMorePorts$12 : int;
-var $successfulCreates$10$4619.28$MouseClassFindMorePorts$12 : int;
-var tempBoogie0:int;
-var tempBoogie1:int;
-var tempBoogie2:int;
-var tempBoogie3:int;
-var tempBoogie4:int;
-var tempBoogie5:int;
-var tempBoogie6:int;
-var tempBoogie7:int;
-var tempBoogie8:int;
-var tempBoogie9:int;
-var tempBoogie10:int;
-var tempBoogie11:int;
-var tempBoogie12:int;
-var tempBoogie13:int;
-var tempBoogie14:int;
-var tempBoogie15:int;
-var tempBoogie16:int;
-var tempBoogie17:int;
-var tempBoogie18:int;
-var tempBoogie19:int;
-var LOOP_74_alloc:[int]name;
-var LOOP_74_Mem:[name][int]int;
-var LOOP_74_Res_DEVICE_STACK:[int]int;
-var LOOP_74_Res_DEV_EXTN:[int]int;
-var LOOP_74_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_74_Res_SPIN_LOCK:[int]int;
-
-
-start:
-
-assume (alloc[$DriverObject$1$4588.20$MouseClassFindMorePorts$121] != UNALLOCATED);
-assume (alloc[$Context$2$4589.20$MouseClassFindMorePorts$121] != UNALLOCATED);
-call $basePortBuffer$13$4622.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(512);
-call $basePortName$11$4620.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(8);
-call $classDeviceObject$6$4615.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
-call $dumpData$7$4616.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(16);
-call $file$15$4624.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
-call $fullClassName$14$4623.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
-call $fullPortName$12$4621.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(8);
-call $numPorts$9$4618.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
-$DriverObject$1$4588.20$MouseClassFindMorePorts$12 := $DriverObject$1$4588.20$MouseClassFindMorePorts$121;
-$Context$2$4589.20$MouseClassFindMorePorts$12 := $Context$2$4589.20$MouseClassFindMorePorts$121;
-$Count$3$4590.20$MouseClassFindMorePorts$12 := $Count$3$4590.20$MouseClassFindMorePorts$121;
-goto label_3;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4799)
-label_1:
-call __HAVOC_free($basePortBuffer$13$4622.28$MouseClassFindMorePorts$12);
-call __HAVOC_free($basePortName$11$4620.28$MouseClassFindMorePorts$12);
-call __HAVOC_free($classDeviceObject$6$4615.28$MouseClassFindMorePorts$12);
-call __HAVOC_free($dumpData$7$4616.28$MouseClassFindMorePorts$12);
-call __HAVOC_free($file$15$4624.28$MouseClassFindMorePorts$12);
-call __HAVOC_free($fullClassName$14$4623.28$MouseClassFindMorePorts$12);
-call __HAVOC_free($fullPortName$12$4621.28$MouseClassFindMorePorts$12);
-call __HAVOC_free($numPorts$9$4618.28$MouseClassFindMorePorts$12);
-assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
-assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
-assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
-assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
-assume (forall m:int :: {Mem[T.A256UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A256UINT2][m] == old(Mem[T.A256UINT2])[m]);
-assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
-assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
-assume (forall m:int :: {Mem[T.A5UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A5UINT2][m] == old(Mem[T.A5UINT2])[m]);
-assume (forall m:int :: {Mem[T.A85CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A85CHAR][m] == old(Mem[T.A85CHAR])[m]);
-assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
-assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CHAR][m] == old(Mem[T.CHAR])[m]);
-assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m] == old(Mem[T.CurrentStackLocation___unnamed_4_a7aa989c])[m]);
-assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
-assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
-assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
-assume (forall m:int :: {Mem[T.InitExtension__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InitExtension__GLOBALS][m] == old(Mem[T.InitExtension__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
-assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.NumberLegacyPorts__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberLegacyPorts__GLOBALS][m] == old(Mem[T.NumberLegacyPorts__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
-assume (forall m:int :: {Mem[T.PPUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PPUINT2][m] == old(Mem[T.PPUINT2])[m]);
-assume (forall m:int :: {Mem[T.PP_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_DEVICE_OBJECT][m] == old(Mem[T.PP_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
-assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
-assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
-assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.P_MOUSE_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_MOUSE_INPUT_DATA][m] == old(Mem[T.P_MOUSE_INPUT_DATA])[m]);
-assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
-assume (forall m:int :: {Mem[T.PortsServiced__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PortsServiced__GLOBALS][m] == old(Mem[T.PortsServiced__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
-assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
-assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
-assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4799)
-label_2:
-assume false;
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4613)
-label_3:
-goto label_4;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4614)
-label_4:
-goto label_5;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4614)
-label_5:
-$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := 0 ;
-goto label_6;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4615)
-label_6:
-goto label_7;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4615)
-label_7:
-Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12 := 0];
-goto label_8;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4616)
-label_8:
-goto label_9;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4617)
-label_9:
-goto label_10;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4618)
-label_10:
-goto label_11;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4619)
-label_11:
-goto label_12;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4620)
-label_12:
-goto label_13;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4621)
-label_13:
-goto label_14;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4622)
-label_14:
-goto label_15;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4623)
-label_15:
-goto label_16;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4623)
-label_16:
-Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12 := 0];
-goto label_17;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4624)
-label_17:
-goto label_18;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4626)
-label_18:
-call __PREfastPagedCode ();
-goto label_21;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4628)
-label_21:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12) := 0];
-goto label_22;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4630)
-label_22:
-// ignoring intrinsic intrinsic.memset
-havoc $result.memset$4630.4$1$;
-goto label_25;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4631)
-label_25:
-Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := $basePortBuffer$13$4622.28$MouseClassFindMorePorts$12];
-goto label_26;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4632)
-label_26:
-Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := 0];
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4633)
-label_27:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := 512];
-goto label_28;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4640)
-label_28:
-call RtlCopyUnicodeString ($basePortName$11$4620.28$MouseClassFindMorePorts$12, BaseClassName__GLOBALS(Globals));
-goto label_31;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4641)
-label_31:
-tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT( Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12)], 10, 1) ;
-Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := tempBoogie0];
-goto label_35;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4642)
-label_32:
-call $result.RtlAppendUnicodeToString$4642.28$2$ := RtlAppendUnicodeToString ($basePortName$11$4620.28$MouseClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$3$);
-goto label_36;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4642)
-label_35:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$3$ := havoc_stringTemp ;
-goto label_32;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4647)
-label_36:
-call RtlInitUnicodeString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, 0);
-goto label_39;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4649)
-label_39:
-Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12)]), 1, 2)];
-goto label_43;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4653)
-label_40:
-call $result.ExAllocatePoolWithTag$4653.0$4$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$5$, 1131377997);
-goto label_44;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4653)
-label_43:
-$ExAllocatePoolWithTag.arg.2$5$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] ;
-goto label_40;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4653)
-label_44:
-Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12) := $result.ExAllocatePoolWithTag$4653.0$4$];
-goto label_45;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4656)
-label_45:
-goto label_45_true , label_45_false ;
-
-
-label_45_true :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] != 0);
-goto label_57;
-
-
-label_45_false :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] == 0);
-goto label_49;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4658)
-label_46:
-// skip MouDebugPrint
-goto label_50;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4658)
-label_49:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$6$ := havoc_stringTemp ;
-goto label_46;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4663)
-label_50:
-Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$7$4616.28$MouseClassFindMorePorts$12, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)]];
-goto label_51;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4664)
-label_51:
-call MouseClassLogError ($DriverObject$1$4588.20$MouseClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 20008, -1073741823, 1, $dumpData$7$4616.28$MouseClassFindMorePorts$12, 0);
-goto label_156;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4675)
-label_54:
-// ignoring intrinsic intrinsic.memset
-havoc $result.memset$4675.4$7$;
-goto label_61;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4675)
-label_57:
-$memset.arg.3$8$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] ;
-goto label_54;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4676)
-label_58:
-call $result.RtlAppendUnicodeToString$4676.28$9$ := RtlAppendUnicodeToString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$10$);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4676)
-label_61:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$10$ := havoc_stringTemp ;
-goto label_58;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4677)
-label_62:
-call $result.RtlAppendUnicodeToString$4677.28$11$ := RtlAppendUnicodeToString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12)]);
-goto label_68;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4678)
-label_65:
-call $result.RtlAppendUnicodeToString$4678.28$12$ := RtlAppendUnicodeToString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$13$);
-goto label_69;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4678)
-label_68:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAppendUnicodeToString.arg.2$13$ := havoc_stringTemp ;
-goto label_65;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4680)
-label_69:
-call $result.MouDeterminePortsServiced$4680.29$14$ := MouDeterminePortsServiced ($basePortName$11$4620.28$MouseClassFindMorePorts$12, $numPorts$9$4618.28$MouseClassFindMorePorts$12);
-goto label_72;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4687)
-label_72:
-$i$8$4617.28$MouseClassFindMorePorts$12 := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals)] ;
-goto label_73;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4687)
-label_73:
-$successfulCreates$10$4619.28$MouseClassFindMorePorts$12 := 0 ;
-goto label_74;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4688)
-label_74:
-// loop entry initialization...
-LOOP_74_alloc := alloc;
-LOOP_74_Mem := Mem;
-LOOP_74_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_74_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_74_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_74_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_74_head;
-
-
-label_74_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-assume(forall f:int :: {alloc[Base(f)]} LOOP_74_alloc[Base(f)] == UNALLOCATED || LOOP_74_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_74_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_SPIN_LOCK[r]} (SetTrue()[r]) || LOOP_74_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_74_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_74_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_74_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_74_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (SetTrue()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_74_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-goto label_74_true , label_74_false ;
-
-
-label_74_true :
-assume ($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
-goto label_75;
-
-
-label_74_false :
-assume !($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
-goto label_155;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4688)
-label_75:
-goto label_75_true , label_75_false ;
-
-
-label_75_true :
-assume ($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4618.28$MouseClassFindMorePorts$12]);
-goto label_76;
-
-
-label_75_false :
-assume !($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4618.28$MouseClassFindMorePorts$12]);
-goto label_155;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4698)
-label_76:
-Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)], 2), 1, 1)) := PLUS(48, 1, $i$8$4617.28$MouseClassFindMorePorts$12)];
-goto label_77;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4700)
-label_77:
-goto label_77_true , label_77_false ;
-
-
-label_77_true :
-assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] != 0);
-goto label_78;
-
-
-label_77_false :
-assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] == 0);
-goto label_82;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4701)
-label_78:
-call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], 0);
-goto label_81;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4702)
-label_81:
-Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12 := 0];
-goto label_82;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4708)
-label_82:
-call $result.MouCreateClassObject$4708.37$15$ := MouCreateClassObject ($DriverObject$1$4588.20$MouseClassFindMorePorts$12, InitExtension__GLOBALS(Globals), $classDeviceObject$6$4615.28$MouseClassFindMorePorts$12, $fullClassName$14$4623.28$MouseClassFindMorePorts$12, 1);
-goto label_85;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4708)
-label_85:
-$status$4$4613.28$MouseClassFindMorePorts$12 := $result.MouCreateClassObject$4708.37$15$ ;
-goto label_86;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4714)
-label_86:
-goto label_86_true , label_86_false ;
-
-
-label_86_true :
-assume (0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
-goto label_90;
-
-
-label_86_false :
-assume !(0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
-goto label_87;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4715)
-label_87:
-call MouseClassLogError ($DriverObject$1$4588.20$MouseClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 20008, $status$4$4613.28$MouseClassFindMorePorts$12, 0, 0, 0);
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4725)
-label_90:
-$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])] ;
-goto label_91;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4726)
-label_91:
-Mem[T.PnP__DEVICE_EXTENSION] := Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
-goto label_92;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4731)
-label_92:
-assume (Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]);
-call $result.IoGetDeviceObjectPointer$4731.42$16$ := IoGetDeviceObjectPointer ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, 128, $file$15$4624.28$MouseClassFindMorePorts$12, TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12));
-Mem[T.TopPort__DEVICE_EXTENSION] := Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
-goto label_95;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4731)
-label_95:
-$status$4$4613.28$MouseClassFindMorePorts$12 := $result.IoGetDeviceObjectPointer$4731.42$16$ ;
-goto label_96;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4736)
-label_96:
-goto label_96_true , label_96_false ;
-
-
-label_96_true :
-assume ($status$4$4613.28$MouseClassFindMorePorts$12 != 0);
-goto label_97;
-
-
-label_96_false :
-assume ($status$4$4613.28$MouseClassFindMorePorts$12 == 0);
-goto label_108;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
-label_97:
-goto label_97_true , label_97_false ;
-
-
-label_97_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] != 0);
-goto label_98;
-
-
-label_97_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == 0);
-goto label_104;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
-label_98:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)], 0);
-goto label_101;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
-label_101:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
-label_102:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
-goto label_103;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
-label_103:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
-goto label_104;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
-label_104:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]);
-goto label_107;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
-label_107:
-$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := 0 ;
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4742)
-label_108:
-Mem[T.StackSize__DEVICE_OBJECT] := Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12]) := PLUS(1, 1, Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])])];
-goto label_109;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4743)
-label_109:
-call $result.MouseAddDeviceEx$4743.34$17$ := MouseAddDeviceEx ($deviceExtension$5$4614.28$MouseClassFindMorePorts$12, Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12]);
-goto label_112;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4743)
-label_112:
-$status$4$4613.28$MouseClassFindMorePorts$12 := $result.MouseAddDeviceEx$4743.34$17$ ;
-goto label_113;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4744)
-label_113:
-assume (forall r:int :: {BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)),r)} (POW2(r) && POW2(128) && r != 128) ==> (BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])],r)!= 0 <==> BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)),r)!= 0));
-assume (BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)),128) == 0);
-tempBoogie0 := BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)) ;
-Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12]) := tempBoogie0];
-goto label_114;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4746)
-label_114:
-goto label_114_true , label_114_false ;
-
-
-label_114_true :
-assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] != 0);
-goto label_115;
-
-
-label_114_false :
-assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] == 0);
-goto label_119;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4747)
-label_115:
-call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], 0);
-goto label_118;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4748)
-label_118:
-Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12 := 0];
-goto label_119;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4751)
-label_119:
-goto label_119_true , label_119_false ;
-
-
-label_119_true :
-assume (0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
-goto label_150;
-
-
-label_119_false :
-assume !(0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
-goto label_120;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4752)
-label_120:
-goto label_120_true , label_120_false ;
-
-
-label_120_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_124;
-
-
-label_120_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_121;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4753)
-label_121:
-goto label_121_true , label_121_false ;
-
-
-label_121_true :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] != 0);
-goto label_122;
-
-
-label_121_false :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == 0);
-goto label_135;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4754)
-label_122:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
-goto label_123;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4755)
-label_123:
-Mem[T.File__DEVICE_EXTENSION] := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
-goto label_135;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4759)
-label_124:
-goto label_125;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4761)
-label_125:
-call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
-goto label_128;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4763)
-label_128:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12 := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]))]];
-goto label_129;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4764)
-label_129:
-Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])) := 0];
-goto label_130;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4765)
-label_130:
-Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])) := 1];
-goto label_131;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4766)
-label_131:
-Mem[T.Port__PORT] := Mem[T.Port__PORT][Port__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])) := 0];
-goto label_132;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4768)
-label_132:
-call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
-goto label_135;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4771)
-label_135:
-goto label_135_true , label_135_false ;
-
-
-label_135_true :
-assume (Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12] != 0);
-goto label_136;
-
-
-label_135_false :
-assume (Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12] == 0);
-goto label_139;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4772)
-label_136:
-call $result.ObfDereferenceObject$4772.16$18$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12]);
-goto label_139;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
-label_139:
-goto label_139_true , label_139_false ;
-
-
-label_139_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] != 0);
-goto label_140;
-
-
-label_139_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == 0);
-goto label_146;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
-label_140:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)], 0);
-goto label_143;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
-label_143:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
-goto label_144;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
-label_144:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
-goto label_145;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
-label_145:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
-goto label_146;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
-label_146:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]);
-goto label_149;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
-label_149:
-$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := 0 ;
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4782)
-label_150:
-call InsertTailList (LegacyDeviceList__GLOBALS(Globals), Link__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12));
-goto label_153;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4783)
-label_153:
-$successfulCreates$10$4619.28$MouseClassFindMorePorts$12 := PLUS($successfulCreates$10$4619.28$MouseClassFindMorePorts$12, 1, 1) ;
-goto label_154;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4689)
-label_154:
-$i$8$4617.28$MouseClassFindMorePorts$12 := PLUS($i$8$4617.28$MouseClassFindMorePorts$12, 1, 1) ;
-goto label_74_head;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4786)
-label_155:
-tempBoogie0 := PLUS(Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals)], 1, $successfulCreates$10$4619.28$MouseClassFindMorePorts$12) ;
-Mem[T.NumberLegacyPorts__GLOBALS] := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals) := tempBoogie0];
-goto label_156;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4792)
-label_156:
-goto label_156_true , label_156_false ;
-
-
-label_156_true :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] != 0);
-goto label_157;
-
-
-label_156_false :
-assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] == 0);
-goto label_160;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4793)
-label_157:
-call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)], 0);
-goto label_160;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4796)
-label_160:
-goto label_160_true , label_160_false ;
-
-
-label_160_true :
-assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] != 0);
-goto label_161;
-
-
-label_160_false :
-assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] == 0);
-goto label_1;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4797)
-label_161:
-call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], 0);
-goto label_1;
-
-}
-
+// RUN: %boogie -monomorphize "%s" > "%t"
+// RUN: %diff success.expect "%t"
+type byte, name;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function SetTrue() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+/*
+function AtLeast(int, int) returns ([int]bool);
+function ModEqual(int, int, int) returns (bool);
+axiom(forall n:int, x:int :: ModEqual(n,x,x));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
+axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
+axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
+axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+*/
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int :: SetTrue()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name, m:[name][int]int) returns (bool);
+function Values(t:name, m:[name][int]int) returns ([int]bool);
+function T.Ptr(t:name) returns (name);
+
+axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
+
+axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
+
+axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
+ (HasType(v, t, m1) <==> HasType(v, t, m2)));
+
+// Field declarations
+
+const unique T.Guid_WMIGUIDREGINFO:name;
+const unique T.InstanceCount_WMIGUIDREGINFO:name;
+const unique T.Flags_WMIGUIDREGINFO:name;
+const unique T.OperationID__ACCESS_STATE:name;
+const unique T.SecurityEvaluated__ACCESS_STATE:name;
+const unique T.GenerateAudit__ACCESS_STATE:name;
+const unique T.GenerateOnClose__ACCESS_STATE:name;
+const unique T.PrivilegesAllocated__ACCESS_STATE:name;
+const unique T.Flags__ACCESS_STATE:name;
+const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
+const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
+const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
+const unique T.SubjectSecurityContext__ACCESS_STATE:name;
+const unique T.SecurityDescriptor__ACCESS_STATE:name;
+const unique T.AuxData__ACCESS_STATE:name;
+const unique T.Privileges__ACCESS_STATE:name;
+const unique T.AuditPrivileges__ACCESS_STATE:name;
+const unique T.ObjectName__ACCESS_STATE:name;
+const unique T.ObjectTypeName__ACCESS_STATE:name;
+const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_RESOURCE_LIST:name;
+const unique T.List__CM_RESOURCE_LIST:name;
+const unique T.Size__DEVICE_CAPABILITIES:name;
+const unique T.Version__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
+const unique T.LockSupported__DEVICE_CAPABILITIES:name;
+const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.Removable__DEVICE_CAPABILITIES:name;
+const unique T.DockDevice__DEVICE_CAPABILITIES:name;
+const unique T.UniqueID__DEVICE_CAPABILITIES:name;
+const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
+const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
+const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
+const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
+const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
+const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
+const unique T.Reserved__DEVICE_CAPABILITIES:name;
+const unique T.Address__DEVICE_CAPABILITIES:name;
+const unique T.UINumber__DEVICE_CAPABILITIES:name;
+const unique T.DeviceState__DEVICE_CAPABILITIES:name;
+const unique T.SystemWake__DEVICE_CAPABILITIES:name;
+const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
+const unique T.D1Latency__DEVICE_CAPABILITIES:name;
+const unique T.D2Latency__DEVICE_CAPABILITIES:name;
+const unique T.D3Latency__DEVICE_CAPABILITIES:name;
+const unique T.Self__DEVICE_EXTENSION:name;
+const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
+const unique T.TopPort__DEVICE_EXTENSION:name;
+const unique T.PDO__DEVICE_EXTENSION:name;
+const unique T.RemoveLock__DEVICE_EXTENSION:name;
+const unique T.PnP__DEVICE_EXTENSION:name;
+const unique T.Started__DEVICE_EXTENSION:name;
+const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
+const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
+const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
+const unique T.InputCount__DEVICE_EXTENSION:name;
+const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
+const unique T.InputData__DEVICE_EXTENSION:name;
+const unique T.DataIn__DEVICE_EXTENSION:name;
+const unique T.DataOut__DEVICE_EXTENSION:name;
+const unique T.MouseAttributes__DEVICE_EXTENSION:name;
+const unique T.SpinLock__DEVICE_EXTENSION:name;
+const unique T.ReadQueue__DEVICE_EXTENSION:name;
+const unique T.SequenceNumber__DEVICE_EXTENSION:name;
+const unique T.DeviceState__DEVICE_EXTENSION:name;
+const unique T.SystemState__DEVICE_EXTENSION:name;
+const unique T.UnitId__DEVICE_EXTENSION:name;
+const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
+const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
+const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
+const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
+const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
+const unique T.Link__DEVICE_EXTENSION:name;
+const unique T.File__DEVICE_EXTENSION:name;
+const unique T.Enabled__DEVICE_EXTENSION:name;
+const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
+const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
+const unique T.Type__DEVICE_OBJECT:name;
+const unique T.Size__DEVICE_OBJECT:name;
+const unique T.ReferenceCount__DEVICE_OBJECT:name;
+const unique T.DriverObject__DEVICE_OBJECT:name;
+const unique T.NextDevice__DEVICE_OBJECT:name;
+const unique T.AttachedDevice__DEVICE_OBJECT:name;
+const unique T.CurrentIrp__DEVICE_OBJECT:name;
+const unique T.Timer__DEVICE_OBJECT:name;
+const unique T.Flags__DEVICE_OBJECT:name;
+const unique T.Characteristics__DEVICE_OBJECT:name;
+const unique T.Vpb__DEVICE_OBJECT:name;
+const unique T.DeviceExtension__DEVICE_OBJECT:name;
+const unique T.DeviceType__DEVICE_OBJECT:name;
+const unique T.StackSize__DEVICE_OBJECT:name;
+const unique T.Queue__DEVICE_OBJECT:name;
+const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
+const unique T.DeviceQueue__DEVICE_OBJECT:name;
+const unique T.Dpc__DEVICE_OBJECT:name;
+const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
+const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
+const unique T.DeviceLock__DEVICE_OBJECT:name;
+const unique T.SectorSize__DEVICE_OBJECT:name;
+const unique T.Spare1__DEVICE_OBJECT:name;
+const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
+const unique T.Reserved__DEVICE_OBJECT:name;
+const unique T.Type__DEVOBJ_EXTENSION:name;
+const unique T.Size__DEVOBJ_EXTENSION:name;
+const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
+const unique T.__unnamed_4_c9b2e921__DISPATCHER_HEADER:name;
+const unique T.SignalState__DISPATCHER_HEADER:name;
+const unique T.WaitListHead__DISPATCHER_HEADER:name;
+const unique T.DriverObject__DRIVER_EXTENSION:name;
+const unique T.AddDevice__DRIVER_EXTENSION:name;
+const unique T.Count__DRIVER_EXTENSION:name;
+const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
+const unique T.Type__DRIVER_OBJECT:name;
+const unique T.Size__DRIVER_OBJECT:name;
+const unique T.DeviceObject__DRIVER_OBJECT:name;
+const unique T.Flags__DRIVER_OBJECT:name;
+const unique T.DriverStart__DRIVER_OBJECT:name;
+const unique T.DriverSize__DRIVER_OBJECT:name;
+const unique T.DriverSection__DRIVER_OBJECT:name;
+const unique T.DriverExtension__DRIVER_OBJECT:name;
+const unique T.DriverName__DRIVER_OBJECT:name;
+const unique T.HardwareDatabase__DRIVER_OBJECT:name;
+const unique T.FastIoDispatch__DRIVER_OBJECT:name;
+const unique T.DriverInit__DRIVER_OBJECT:name;
+const unique T.DriverStartIo__DRIVER_OBJECT:name;
+const unique T.DriverUnload__DRIVER_OBJECT:name;
+const unique T.MajorFunction__DRIVER_OBJECT:name;
+const unique T.SystemResourcesList__ERESOURCE:name;
+const unique T.OwnerTable__ERESOURCE:name;
+const unique T.ActiveCount__ERESOURCE:name;
+const unique T.Flag__ERESOURCE:name;
+const unique T.SharedWaiters__ERESOURCE:name;
+const unique T.ExclusiveWaiters__ERESOURCE:name;
+const unique T.OwnerEntry__ERESOURCE:name;
+const unique T.ActiveEntries__ERESOURCE:name;
+const unique T.ContentionCount__ERESOURCE:name;
+const unique T.NumberOfSharedWaiters__ERESOURCE:name;
+const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
+const unique T.__unnamed_4_46b62f69__ERESOURCE:name;
+const unique T.SpinLock__ERESOURCE:name;
+const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
+const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
+const unique T.FastIoRead__FAST_IO_DISPATCH:name;
+const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoLock__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
+const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
+const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
+const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlRead__FAST_IO_DISPATCH:name;
+const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
+const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
+const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
+const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.Count__FAST_MUTEX:name;
+const unique T.Owner__FAST_MUTEX:name;
+const unique T.Contention__FAST_MUTEX:name;
+const unique T.Gate__FAST_MUTEX:name;
+const unique T.OldIrql__FAST_MUTEX:name;
+const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
+const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
+const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
+const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.Type__FILE_OBJECT:name;
+const unique T.Size__FILE_OBJECT:name;
+const unique T.DeviceObject__FILE_OBJECT:name;
+const unique T.Vpb__FILE_OBJECT:name;
+const unique T.FsContext__FILE_OBJECT:name;
+const unique T.FsContext2__FILE_OBJECT:name;
+const unique T.SectionObjectPointer__FILE_OBJECT:name;
+const unique T.PrivateCacheMap__FILE_OBJECT:name;
+const unique T.FinalStatus__FILE_OBJECT:name;
+const unique T.RelatedFileObject__FILE_OBJECT:name;
+const unique T.LockOperation__FILE_OBJECT:name;
+const unique T.DeletePending__FILE_OBJECT:name;
+const unique T.ReadAccess__FILE_OBJECT:name;
+const unique T.WriteAccess__FILE_OBJECT:name;
+const unique T.DeleteAccess__FILE_OBJECT:name;
+const unique T.SharedRead__FILE_OBJECT:name;
+const unique T.SharedWrite__FILE_OBJECT:name;
+const unique T.SharedDelete__FILE_OBJECT:name;
+const unique T.Flags__FILE_OBJECT:name;
+const unique T.FileName__FILE_OBJECT:name;
+const unique T.CurrentByteOffset__FILE_OBJECT:name;
+const unique T.Waiters__FILE_OBJECT:name;
+const unique T.Busy__FILE_OBJECT:name;
+const unique T.LastLock__FILE_OBJECT:name;
+const unique T.Lock__FILE_OBJECT:name;
+const unique T.Event__FILE_OBJECT:name;
+const unique T.CompletionContext__FILE_OBJECT:name;
+const unique T.IrpListLock__FILE_OBJECT:name;
+const unique T.IrpList__FILE_OBJECT:name;
+const unique T.FileObjectExtension__FILE_OBJECT:name;
+const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
+const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
+const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
+const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
+const unique T.Directory__FILE_STANDARD_INFORMATION:name;
+const unique T.Debug__GLOBALS:name;
+const unique T.GrandMaster__GLOBALS:name;
+const unique T.AssocClassList__GLOBALS:name;
+const unique T.NumAssocClass__GLOBALS:name;
+const unique T.Opens__GLOBALS:name;
+const unique T.NumberLegacyPorts__GLOBALS:name;
+const unique T.Mutex__GLOBALS:name;
+const unique T.ConnectOneClassToOnePort__GLOBALS:name;
+const unique T.PortsServiced__GLOBALS:name;
+const unique T.InitExtension__GLOBALS:name;
+const unique T.RegistryPath__GLOBALS:name;
+const unique T.BaseClassName__GLOBALS:name;
+const unique T.BaseClassBuffer__GLOBALS:name;
+const unique T.LegacyDeviceList__GLOBALS:name;
+const unique T.Data1__GUID:name;
+const unique T.Data2__GUID:name;
+const unique T.Data3__GUID:name;
+const unique T.Data4__GUID:name;
+const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
+const unique T.Control__INITIAL_PRIVILEGE_SET:name;
+const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
+const unique T.Size__INTERFACE:name;
+const unique T.Version__INTERFACE:name;
+const unique T.Context__INTERFACE:name;
+const unique T.InterfaceReference__INTERFACE:name;
+const unique T.InterfaceDereference__INTERFACE:name;
+const unique T.Port__IO_COMPLETION_CONTEXT:name;
+const unique T.Key__IO_COMPLETION_CONTEXT:name;
+const unique T.Common__IO_REMOVE_LOCK:name;
+const unique T.Dbg__IO_REMOVE_LOCK:name;
+const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__IO_RESOURCE_LIST:name;
+const unique T.Revision__IO_RESOURCE_LIST:name;
+const unique T.Count__IO_RESOURCE_LIST:name;
+const unique T.Descriptors__IO_RESOURCE_LIST:name;
+const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
+const unique T.AccessState__IO_SECURITY_CONTEXT:name;
+const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
+const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
+const unique T.MajorFunction__IO_STACK_LOCATION:name;
+const unique T.MinorFunction__IO_STACK_LOCATION:name;
+const unique T.Flags__IO_STACK_LOCATION:name;
+const unique T.Control__IO_STACK_LOCATION:name;
+const unique T.Parameters__IO_STACK_LOCATION:name;
+const unique T.DeviceObject__IO_STACK_LOCATION:name;
+const unique T.FileObject__IO_STACK_LOCATION:name;
+const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
+const unique T.Context__IO_STACK_LOCATION:name;
+const unique T.__unnamed_4_16aff58e__IO_STATUS_BLOCK:name;
+const unique T.Information__IO_STATUS_BLOCK:name;
+const unique T.Type__IRP:name;
+const unique T.Size__IRP:name;
+const unique T.MdlAddress__IRP:name;
+const unique T.Flags__IRP:name;
+const unique T.AssociatedIrp__IRP:name;
+const unique T.ThreadListEntry__IRP:name;
+const unique T.IoStatus__IRP:name;
+const unique T.RequestorMode__IRP:name;
+const unique T.PendingReturned__IRP:name;
+const unique T.StackCount__IRP:name;
+const unique T.CurrentLocation__IRP:name;
+const unique T.Cancel__IRP:name;
+const unique T.CancelIrql__IRP:name;
+const unique T.ApcEnvironment__IRP:name;
+const unique T.AllocationFlags__IRP:name;
+const unique T.UserIosb__IRP:name;
+const unique T.UserEvent__IRP:name;
+const unique T.Overlay__IRP:name;
+const unique T.CancelRoutine__IRP:name;
+const unique T.UserBuffer__IRP:name;
+const unique T.Tail__IRP:name;
+const unique T.Type__KAPC:name;
+const unique T.SpareByte0__KAPC:name;
+const unique T.Size__KAPC:name;
+const unique T.SpareByte1__KAPC:name;
+const unique T.SpareLong0__KAPC:name;
+const unique T.Thread__KAPC:name;
+const unique T.ApcListEntry__KAPC:name;
+const unique T.KernelRoutine__KAPC:name;
+const unique T.RundownRoutine__KAPC:name;
+const unique T.NormalRoutine__KAPC:name;
+const unique T.NormalContext__KAPC:name;
+const unique T.SystemArgument1__KAPC:name;
+const unique T.SystemArgument2__KAPC:name;
+const unique T.ApcStateIndex__KAPC:name;
+const unique T.ApcMode__KAPC:name;
+const unique T.Inserted__KAPC:name;
+const unique T.Type__KDEVICE_QUEUE:name;
+const unique T.Size__KDEVICE_QUEUE:name;
+const unique T.DeviceListHead__KDEVICE_QUEUE:name;
+const unique T.Lock__KDEVICE_QUEUE:name;
+const unique T.Busy__KDEVICE_QUEUE:name;
+const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
+const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Type__KDPC:name;
+const unique T.Importance__KDPC:name;
+const unique T.Number__KDPC:name;
+const unique T.DpcListEntry__KDPC:name;
+const unique T.DeferredRoutine__KDPC:name;
+const unique T.DeferredContext__KDPC:name;
+const unique T.SystemArgument1__KDPC:name;
+const unique T.SystemArgument2__KDPC:name;
+const unique T.DpcData__KDPC:name;
+const unique T.Header__KEVENT:name;
+const unique T.Header__KSEMAPHORE:name;
+const unique T.Limit__KSEMAPHORE:name;
+const unique T.__unnamed_8_8684a3e7__LARGE_INTEGER:name;
+const unique T.u__LARGE_INTEGER:name;
+const unique T.QuadPart__LARGE_INTEGER:name;
+const unique T.Flink__LIST_ENTRY:name;
+const unique T.Blink__LIST_ENTRY:name;
+const unique T.LowPart__LUID:name;
+const unique T.HighPart__LUID:name;
+const unique T.Luid__LUID_AND_ATTRIBUTES:name;
+const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
+const unique T.Next__MDL:name;
+const unique T.Size__MDL:name;
+const unique T.MdlFlags__MDL:name;
+const unique T.Process__MDL:name;
+const unique T.MappedSystemVa__MDL:name;
+const unique T.StartVa__MDL:name;
+const unique T.ByteCount__MDL:name;
+const unique T.ByteOffset__MDL:name;
+const unique T.MouseIdentifier__MOUSE_ATTRIBUTES:name;
+const unique T.NumberOfButtons__MOUSE_ATTRIBUTES:name;
+const unique T.SampleRate__MOUSE_ATTRIBUTES:name;
+const unique T.InputDataQueueLength__MOUSE_ATTRIBUTES:name;
+const unique T.UnitId__MOUSE_INPUT_DATA:name;
+const unique T.Flags__MOUSE_INPUT_DATA:name;
+const unique T.__unnamed_4_9c11ed91__MOUSE_INPUT_DATA:name;
+const unique T.RawButtons__MOUSE_INPUT_DATA:name;
+const unique T.LastX__MOUSE_INPUT_DATA:name;
+const unique T.LastY__MOUSE_INPUT_DATA:name;
+const unique T.ExtraInformation__MOUSE_INPUT_DATA:name;
+const unique T.OwnerThread__OWNER_ENTRY:name;
+const unique T.__unnamed_4_c1e23b02__OWNER_ENTRY:name;
+const unique T.File__PORT:name;
+const unique T.Port__PORT:name;
+const unique T.Enabled__PORT:name;
+const unique T.Reserved__PORT:name;
+const unique T.Free__PORT:name;
+const unique T.SequenceD1__POWER_SEQUENCE:name;
+const unique T.SequenceD2__POWER_SEQUENCE:name;
+const unique T.SequenceD3__POWER_SEQUENCE:name;
+const unique T.SystemState__POWER_STATE:name;
+const unique T.DeviceState__POWER_STATE:name;
+const unique T.PrivilegeCount__PRIVILEGE_SET:name;
+const unique T.Control__PRIVILEGE_SET:name;
+const unique T.Privilege__PRIVILEGE_SET:name;
+const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
+const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.__unnamed_4_b4f5a780__SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T.Length__UNICODE_STRING:name;
+const unique T.MaximumLength__UNICODE_STRING:name;
+const unique T.Buffer__UNICODE_STRING:name;
+const unique T.Type__VPB:name;
+const unique T.Size__VPB:name;
+const unique T.Flags__VPB:name;
+const unique T.VolumeLabelLength__VPB:name;
+const unique T.DeviceObject__VPB:name;
+const unique T.RealDevice__VPB:name;
+const unique T.SerialNumber__VPB:name;
+const unique T.ReferenceCount__VPB:name;
+const unique T.VolumeLabel__VPB:name;
+const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
+const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
+const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
+const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
+const unique T.GuidCount__WMILIB_CONTEXT:name;
+const unique T.GuidList__WMILIB_CONTEXT:name;
+const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
+const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
+const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
+const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
+const unique T.Start___unnamed_12_06b9ee6e:name;
+const unique T.Length48___unnamed_12_06b9ee6e:name;
+const unique T.Start___unnamed_12_0882bd02:name;
+const unique T.Length64___unnamed_12_0882bd02:name;
+const unique T.__unnamed_12_2e80217b___unnamed_12_264d0dab:name;
+const unique T.Raw___unnamed_12_2e80217b:name;
+const unique T.Translated___unnamed_12_2e80217b:name;
+const unique T.Data___unnamed_12_5cc7ace2:name;
+const unique T.Channel___unnamed_12_6374506e:name;
+const unique T.Port___unnamed_12_6374506e:name;
+const unique T.Reserved1___unnamed_12_6374506e:name;
+const unique T.Priority___unnamed_12_68a4278e:name;
+const unique T.Reserved1___unnamed_12_68a4278e:name;
+const unique T.Reserved2___unnamed_12_68a4278e:name;
+const unique T.Generic___unnamed_12_79ed2653:name;
+const unique T.Port___unnamed_12_79ed2653:name;
+const unique T.Interrupt___unnamed_12_79ed2653:name;
+const unique T.MessageInterrupt___unnamed_12_79ed2653:name;
+const unique T.Memory___unnamed_12_79ed2653:name;
+const unique T.Dma___unnamed_12_79ed2653:name;
+const unique T.DevicePrivate___unnamed_12_79ed2653:name;
+const unique T.BusNumber___unnamed_12_79ed2653:name;
+const unique T.DeviceSpecificData___unnamed_12_79ed2653:name;
+const unique T.Memory40___unnamed_12_79ed2653:name;
+const unique T.Memory48___unnamed_12_79ed2653:name;
+const unique T.Memory64___unnamed_12_79ed2653:name;
+const unique T.Start___unnamed_12_7da594c0:name;
+const unique T.Length40___unnamed_12_7da594c0:name;
+const unique T.Start___unnamed_12_9873e05d:name;
+const unique T.Length___unnamed_12_9873e05d:name;
+const unique T.DataSize___unnamed_12_9cc8cebc:name;
+const unique T.Reserved1___unnamed_12_9cc8cebc:name;
+const unique T.Reserved2___unnamed_12_9cc8cebc:name;
+const unique T.Start___unnamed_12_b98da82e:name;
+const unique T.Length___unnamed_12_b98da82e:name;
+const unique T.Level___unnamed_12_c2880e88:name;
+const unique T.Vector___unnamed_12_c2880e88:name;
+const unique T.Affinity___unnamed_12_c2880e88:name;
+const unique T.Start___unnamed_12_c49ab31a:name;
+const unique T.Length___unnamed_12_c49ab31a:name;
+const unique T.ListEntry___unnamed_12_c6ed93f3:name;
+const unique T.__unnamed_4_a7aa989c___unnamed_12_c6ed93f3:name;
+const unique T.Data___unnamed_12_ced61554:name;
+const unique T.Reserved___unnamed_12_d9c44df5:name;
+const unique T.MessageCount___unnamed_12_d9c44df5:name;
+const unique T.Vector___unnamed_12_d9c44df5:name;
+const unique T.Affinity___unnamed_12_d9c44df5:name;
+const unique T.Start___unnamed_12_db3dcbfc:name;
+const unique T.Length___unnamed_12_db3dcbfc:name;
+const unique T.Reserved___unnamed_12_db3dcbfc:name;
+const unique T.Level___unnamed_12_fb26b3fc:name;
+const unique T.Vector___unnamed_12_fb26b3fc:name;
+const unique T.Affinity___unnamed_12_fb26b3fc:name;
+const unique T.OutputBufferLength___unnamed_16_22e4d054:name;
+const unique T.InputBufferLength___unnamed_16_22e4d054:name;
+const unique T.IoControlCode___unnamed_16_22e4d054:name;
+const unique T.Type3InputBuffer___unnamed_16_22e4d054:name;
+const unique T.Create___unnamed_16_39b626ad:name;
+const unique T.Read___unnamed_16_39b626ad:name;
+const unique T.Write___unnamed_16_39b626ad:name;
+const unique T.QueryDirectory___unnamed_16_39b626ad:name;
+const unique T.NotifyDirectory___unnamed_16_39b626ad:name;
+const unique T.QueryFile___unnamed_16_39b626ad:name;
+const unique T.SetFile___unnamed_16_39b626ad:name;
+const unique T.QueryEa___unnamed_16_39b626ad:name;
+const unique T.SetEa___unnamed_16_39b626ad:name;
+const unique T.QueryVolume___unnamed_16_39b626ad:name;
+const unique T.SetVolume___unnamed_16_39b626ad:name;
+const unique T.FileSystemControl___unnamed_16_39b626ad:name;
+const unique T.LockControl___unnamed_16_39b626ad:name;
+const unique T.DeviceIoControl___unnamed_16_39b626ad:name;
+const unique T.QuerySecurity___unnamed_16_39b626ad:name;
+const unique T.SetSecurity___unnamed_16_39b626ad:name;
+const unique T.MountVolume___unnamed_16_39b626ad:name;
+const unique T.VerifyVolume___unnamed_16_39b626ad:name;
+const unique T.Scsi___unnamed_16_39b626ad:name;
+const unique T.QueryQuota___unnamed_16_39b626ad:name;
+const unique T.SetQuota___unnamed_16_39b626ad:name;
+const unique T.QueryDeviceRelations___unnamed_16_39b626ad:name;
+const unique T.QueryInterface___unnamed_16_39b626ad:name;
+const unique T.DeviceCapabilities___unnamed_16_39b626ad:name;
+const unique T.FilterResourceRequirements___unnamed_16_39b626ad:name;
+const unique T.ReadWriteConfig___unnamed_16_39b626ad:name;
+const unique T.SetLock___unnamed_16_39b626ad:name;
+const unique T.QueryId___unnamed_16_39b626ad:name;
+const unique T.QueryDeviceText___unnamed_16_39b626ad:name;
+const unique T.UsageNotification___unnamed_16_39b626ad:name;
+const unique T.WaitWake___unnamed_16_39b626ad:name;
+const unique T.PowerSequence___unnamed_16_39b626ad:name;
+const unique T.Power___unnamed_16_39b626ad:name;
+const unique T.StartDevice___unnamed_16_39b626ad:name;
+const unique T.WMI___unnamed_16_39b626ad:name;
+const unique T.Others___unnamed_16_39b626ad:name;
+const unique T.WhichSpace___unnamed_16_56c011d7:name;
+const unique T.Buffer___unnamed_16_56c011d7:name;
+const unique T.Offset___unnamed_16_56c011d7:name;
+const unique T.Length___unnamed_16_56c011d7:name;
+const unique T.DeviceQueueEntry___unnamed_16_5fed8f23:name;
+const unique T.__unnamed_16_ae643f17___unnamed_16_5fed8f23:name;
+const unique T.Length___unnamed_16_6be9abe0:name;
+const unique T.FileName___unnamed_16_6be9abe0:name;
+const unique T.FileInformationClass___unnamed_16_6be9abe0:name;
+const unique T.FileIndex___unnamed_16_6be9abe0:name;
+const unique T.InterfaceType___unnamed_16_78879a38:name;
+const unique T.Size___unnamed_16_78879a38:name;
+const unique T.Version___unnamed_16_78879a38:name;
+const unique T.Interface___unnamed_16_78879a38:name;
+const unique T.InterfaceSpecificData___unnamed_16_78879a38:name;
+const unique T.Length___unnamed_16_804a2f24:name;
+const unique T.StartSid___unnamed_16_804a2f24:name;
+const unique T.SidList___unnamed_16_804a2f24:name;
+const unique T.SidListLength___unnamed_16_804a2f24:name;
+const unique T.Argument1___unnamed_16_8586693f:name;
+const unique T.Argument2___unnamed_16_8586693f:name;
+const unique T.Argument3___unnamed_16_8586693f:name;
+const unique T.Argument4___unnamed_16_8586693f:name;
+const unique T.Length___unnamed_16_8831e65f:name;
+const unique T.Key___unnamed_16_8831e65f:name;
+const unique T.ByteOffset___unnamed_16_8831e65f:name;
+const unique T.SecurityContext___unnamed_16_8c2d663a:name;
+const unique T.Options___unnamed_16_8c2d663a:name;
+const unique T.FileAttributes___unnamed_16_8c2d663a:name;
+const unique T.ShareAccess___unnamed_16_8c2d663a:name;
+const unique T.EaLength___unnamed_16_8c2d663a:name;
+const unique T.Length___unnamed_16_913b9a7a:name;
+const unique T.Key___unnamed_16_913b9a7a:name;
+const unique T.ByteOffset___unnamed_16_913b9a7a:name;
+const unique T.OutputBufferLength___unnamed_16_94d1d1c7:name;
+const unique T.InputBufferLength___unnamed_16_94d1d1c7:name;
+const unique T.FsControlCode___unnamed_16_94d1d1c7:name;
+const unique T.Type3InputBuffer___unnamed_16_94d1d1c7:name;
+const unique T.Length___unnamed_16_a2fab4da:name;
+const unique T.FileInformationClass___unnamed_16_a2fab4da:name;
+const unique T.FileObject___unnamed_16_a2fab4da:name;
+const unique T.__unnamed_4_a7d0864c___unnamed_16_a2fab4da:name;
+const unique T.DriverContext___unnamed_16_ae643f17:name;
+const unique T.Length___unnamed_16_c1b29316:name;
+const unique T.Key___unnamed_16_c1b29316:name;
+const unique T.ByteOffset___unnamed_16_c1b29316:name;
+const unique T.ProviderId___unnamed_16_cbd53ed4:name;
+const unique T.DataPath___unnamed_16_cbd53ed4:name;
+const unique T.BufferSize___unnamed_16_cbd53ed4:name;
+const unique T.Buffer___unnamed_16_cbd53ed4:name;
+const unique T.Length___unnamed_16_db70db6e:name;
+const unique T.MinBusNumber___unnamed_16_db70db6e:name;
+const unique T.MaxBusNumber___unnamed_16_db70db6e:name;
+const unique T.Reserved___unnamed_16_db70db6e:name;
+const unique T.Length___unnamed_16_ef4b6307:name;
+const unique T.EaList___unnamed_16_ef4b6307:name;
+const unique T.EaListLength___unnamed_16_ef4b6307:name;
+const unique T.EaIndex___unnamed_16_ef4b6307:name;
+const unique T.__unnamed_4_b060dea6___unnamed_16_fdda1f62:name;
+const unique T.Type___unnamed_16_fdda1f62:name;
+const unique T.State___unnamed_16_fdda1f62:name;
+const unique T.ShutdownType___unnamed_16_fdda1f62:name;
+const unique T.Lock___unnamed_1_1394de4b:name;
+const unique T.Abandoned___unnamed_1_2bb39c56:name;
+const unique T.Absolute___unnamed_1_2bb39c56:name;
+const unique T.NpxIrql___unnamed_1_2bb39c56:name;
+const unique T.Signalling___unnamed_1_2bb39c56:name;
+const unique T.Inserted___unnamed_1_9fa0583a:name;
+const unique T.DebugActive___unnamed_1_9fa0583a:name;
+const unique T.DpcActive___unnamed_1_9fa0583a:name;
+const unique T.Size___unnamed_1_e30779f5:name;
+const unique T.Hand___unnamed_1_e30779f5:name;
+const unique T.MinimumVector___unnamed_20_83d468e4:name;
+const unique T.MaximumVector___unnamed_20_83d468e4:name;
+const unique T.AffinityPolicy___unnamed_20_83d468e4:name;
+const unique T.PriorityPolicy___unnamed_20_83d468e4:name;
+const unique T.TargetedProcessors___unnamed_20_83d468e4:name;
+const unique T.Length40___unnamed_24_035931da:name;
+const unique T.Alignment40___unnamed_24_035931da:name;
+const unique T.MinimumAddress___unnamed_24_035931da:name;
+const unique T.MaximumAddress___unnamed_24_035931da:name;
+const unique T.Length___unnamed_24_38e128db:name;
+const unique T.Alignment___unnamed_24_38e128db:name;
+const unique T.MinimumAddress___unnamed_24_38e128db:name;
+const unique T.MaximumAddress___unnamed_24_38e128db:name;
+const unique T.Length___unnamed_24_9500ea34:name;
+const unique T.Alignment___unnamed_24_9500ea34:name;
+const unique T.MinimumAddress___unnamed_24_9500ea34:name;
+const unique T.MaximumAddress___unnamed_24_9500ea34:name;
+const unique T.Length___unnamed_24_9734802c:name;
+const unique T.Alignment___unnamed_24_9734802c:name;
+const unique T.MinimumAddress___unnamed_24_9734802c:name;
+const unique T.MaximumAddress___unnamed_24_9734802c:name;
+const unique T.Length64___unnamed_24_af62813f:name;
+const unique T.Alignment64___unnamed_24_af62813f:name;
+const unique T.MinimumAddress___unnamed_24_af62813f:name;
+const unique T.MaximumAddress___unnamed_24_af62813f:name;
+const unique T.Length48___unnamed_24_c0555099:name;
+const unique T.Alignment48___unnamed_24_c0555099:name;
+const unique T.MinimumAddress___unnamed_24_c0555099:name;
+const unique T.MaximumAddress___unnamed_24_c0555099:name;
+const unique T.Port___unnamed_24_d7c4ec3a:name;
+const unique T.Memory___unnamed_24_d7c4ec3a:name;
+const unique T.Interrupt___unnamed_24_d7c4ec3a:name;
+const unique T.Dma___unnamed_24_d7c4ec3a:name;
+const unique T.Generic___unnamed_24_d7c4ec3a:name;
+const unique T.DevicePrivate___unnamed_24_d7c4ec3a:name;
+const unique T.BusNumber___unnamed_24_d7c4ec3a:name;
+const unique T.ConfigData___unnamed_24_d7c4ec3a:name;
+const unique T.Memory40___unnamed_24_d7c4ec3a:name;
+const unique T.Memory48___unnamed_24_d7c4ec3a:name;
+const unique T.Memory64___unnamed_24_d7c4ec3a:name;
+const unique T.ReplaceIfExists___unnamed_2_196a7f56:name;
+const unique T.AdvanceOnly___unnamed_2_196a7f56:name;
+const unique T.__unnamed_16_5fed8f23___unnamed_40_a0414182:name;
+const unique T.Thread___unnamed_40_a0414182:name;
+const unique T.AuxiliaryBuffer___unnamed_40_a0414182:name;
+const unique T.__unnamed_12_c6ed93f3___unnamed_40_a0414182:name;
+const unique T.OriginalFileObject___unnamed_40_a0414182:name;
+const unique T.ListEntry___unnamed_40_d90496f4:name;
+const unique T.Wcb___unnamed_40_d90496f4:name;
+const unique T.InitialPrivilegeSet___unnamed_44_a7026dca:name;
+const unique T.PrivilegeSet___unnamed_44_a7026dca:name;
+const unique T.Overlay___unnamed_48_c1da9fa5:name;
+const unique T.Apc___unnamed_48_c1da9fa5:name;
+const unique T.CompletionKey___unnamed_48_c1da9fa5:name;
+const unique T.PowerSequence___unnamed_4_0510b147:name;
+const unique T.Length___unnamed_4_0a569078:name;
+const unique T.Status___unnamed_4_16aff58e:name;
+const unique T.Pointer___unnamed_4_16aff58e:name;
+const unique T.IdType___unnamed_4_40bf8e34:name;
+const unique T.Address___unnamed_4_46b62f69:name;
+const unique T.CreatorBackTraceIndex___unnamed_4_46b62f69:name;
+const unique T.Capabilities___unnamed_4_73d46255:name;
+const unique T.Srb___unnamed_4_765e3037:name;
+const unique T.Type___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_2bb39c56___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_e30779f5___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_9fa0583a___unnamed_4_846adf3f:name;
+const unique T.PowerState___unnamed_4_8dd73d30:name;
+const unique T.Type___unnamed_4_957e0d74:name;
+const unique T.Buttons___unnamed_4_9c11ed91:name;
+const unique T.__unnamed_4_b5247f10___unnamed_4_9c11ed91:name;
+const unique T.IoResourceRequirementList___unnamed_4_a58d40c8:name;
+const unique T.CurrentStackLocation___unnamed_4_a7aa989c:name;
+const unique T.PacketType___unnamed_4_a7aa989c:name;
+const unique T.__unnamed_2_196a7f56___unnamed_4_a7d0864c:name;
+const unique T.ClusterCount___unnamed_4_a7d0864c:name;
+const unique T.DeleteHandle___unnamed_4_a7d0864c:name;
+const unique T.Length___unnamed_4_aa20b426:name;
+const unique T.UserApcRoutine___unnamed_4_ab87ddfd:name;
+const unique T.IssuingProcess___unnamed_4_ab87ddfd:name;
+const unique T.Reserved1___unnamed_4_b016b1e1:name;
+const unique T.TargetSystemState___unnamed_4_b016b1e1:name;
+const unique T.EffectiveSystemState___unnamed_4_b016b1e1:name;
+const unique T.CurrentSystemState___unnamed_4_b016b1e1:name;
+const unique T.IgnoreHibernationPath___unnamed_4_b016b1e1:name;
+const unique T.PseudoTransition___unnamed_4_b016b1e1:name;
+const unique T.Reserved2___unnamed_4_b016b1e1:name;
+const unique T.SystemContext___unnamed_4_b060dea6:name;
+const unique T.SystemPowerStateContext___unnamed_4_b060dea6:name;
+const unique T.__unnamed_4_b016b1e1___unnamed_4_b4f5a780:name;
+const unique T.ContextAsUlong___unnamed_4_b4f5a780:name;
+const unique T.ButtonFlags___unnamed_4_b5247f10:name;
+const unique T.ButtonData___unnamed_4_b5247f10:name;
+const unique T.OwnerCount___unnamed_4_c1e23b02:name;
+const unique T.TableSize___unnamed_4_c1e23b02:name;
+const unique T.__unnamed_4_846adf3f___unnamed_4_c9b2e921:name;
+const unique T.Lock___unnamed_4_c9b2e921:name;
+const unique T.MasterIrp___unnamed_4_fa7b96a7:name;
+const unique T.IrpCount___unnamed_4_fa7b96a7:name;
+const unique T.SystemBuffer___unnamed_4_fa7b96a7:name;
+const unique T.Vpb___unnamed_8_09ad2712:name;
+const unique T.DeviceObject___unnamed_8_09ad2712:name;
+const unique T.Length___unnamed_8_21ac1dba:name;
+const unique T.CompletionFilter___unnamed_8_21ac1dba:name;
+const unique T.Length___unnamed_8_27d3ab76:name;
+const unique T.FsInformationClass___unnamed_8_27d3ab76:name;
+const unique T.Vpb___unnamed_8_4289df81:name;
+const unique T.DeviceObject___unnamed_8_4289df81:name;
+const unique T.Length___unnamed_8_47b72724:name;
+const unique T.FileInformationClass___unnamed_8_47b72724:name;
+const unique T.DeviceTextType___unnamed_8_4b3e3ba3:name;
+const unique T.LocaleId___unnamed_8_4b3e3ba3:name;
+const unique T.__unnamed_4_ab87ddfd___unnamed_8_4f695993:name;
+const unique T.UserApcContext___unnamed_8_4f695993:name;
+const unique T.AllocatedResources___unnamed_8_5cfb6ca4:name;
+const unique T.AllocatedResourcesTranslated___unnamed_8_5cfb6ca4:name;
+const unique T.SecurityInformation___unnamed_8_606438c5:name;
+const unique T.Length___unnamed_8_606438c5:name;
+const unique T.MinimumChannel___unnamed_8_6ad774c0:name;
+const unique T.MaximumChannel___unnamed_8_6ad774c0:name;
+const unique T.Length___unnamed_8_805045cb:name;
+const unique T.FsInformationClass___unnamed_8_805045cb:name;
+const unique T.LowPart___unnamed_8_8684a3e7:name;
+const unique T.HighPart___unnamed_8_8684a3e7:name;
+const unique T.SecurityInformation___unnamed_8_8cc410da:name;
+const unique T.SecurityDescriptor___unnamed_8_8cc410da:name;
+const unique T.InPath___unnamed_8_a47253e0:name;
+const unique T.Reserved___unnamed_8_a47253e0:name;
+const unique T.Type___unnamed_8_a47253e0:name;
+const unique T.AsynchronousParameters___unnamed_8_bbd07f6c:name;
+const unique T.AllocationSize___unnamed_8_bbd07f6c:name;
+const unique T.LowPart___unnamed_8_c9ca8234:name;
+const unique T.HighPart___unnamed_8_c9ca8234:name;
+
+// Type declarations
+
+const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_LIST:name;
+const unique T.A1_LUID_AND_ATTRIBUTES:name;
+const unique T.A256UINT2:name;
+const unique T.A28PFDRIVER_DISPATCH:name;
+const unique T.A2UCHAR:name;
+const unique T.A2UINT2:name;
+const unique T.A32UINT2:name;
+const unique T.A3UCHAR:name;
+const unique T.A3UINT4:name;
+const unique T.A3_LUID_AND_ATTRIBUTES:name;
+const unique T.A4PVOID:name;
+const unique T.A4UINT4:name;
+const unique T.A5UINT2:name;
+const unique T.A5_DEVICE_POWER_STATE:name;
+const unique T.A7_DEVICE_POWER_STATE:name;
+const unique T.A85CHAR:name;
+const unique T.A8UCHAR:name;
+const unique T.A9UINT2:name;
+const unique T.BUS_QUERY_ID_TYPE:name;
+const unique T.CHAR:name;
+const unique T.DEVICE_TEXT_TYPE:name;
+const unique T.F0:name;
+const unique T.F1:name;
+const unique T.F10:name;
+const unique T.F11:name;
+const unique T.F12:name;
+const unique T.F13:name;
+const unique T.F14:name;
+const unique T.F15:name;
+const unique T.F16:name;
+const unique T.F17:name;
+const unique T.F18:name;
+const unique T.F19:name;
+const unique T.F2:name;
+const unique T.F20:name;
+const unique T.F21:name;
+const unique T.F22:name;
+const unique T.F23:name;
+const unique T.F24:name;
+const unique T.F25:name;
+const unique T.F26:name;
+const unique T.F27:name;
+const unique T.F28:name;
+const unique T.F29:name;
+const unique T.F3:name;
+const unique T.F30:name;
+const unique T.F31:name;
+const unique T.F32:name;
+const unique T.F33:name;
+const unique T.F34:name;
+const unique T.F35:name;
+const unique T.F36:name;
+const unique T.F37:name;
+const unique T.F38:name;
+const unique T.F4:name;
+const unique T.F5:name;
+const unique T.F6:name;
+const unique T.F7:name;
+const unique T.F8:name;
+const unique T.F9:name;
+const unique T.FDRIVER_ADD_DEVICE:name;
+const unique T.FDRIVER_CANCEL:name;
+const unique T.FDRIVER_CONTROL:name;
+const unique T.FDRIVER_DISPATCH:name;
+const unique T.FDRIVER_INITIALIZE:name;
+const unique T.FDRIVER_STARTIO:name;
+const unique T.FDRIVER_UNLOAD:name;
+const unique T.FFAST_IO_ACQUIRE_FILE:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.FFAST_IO_DETACH_DEVICE:name;
+const unique T.FFAST_IO_DEVICE_CONTROL:name;
+const unique T.FFAST_IO_LOCK:name;
+const unique T.FFAST_IO_MDL_READ:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.FFAST_IO_QUERY_OPEN:name;
+const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.FFAST_IO_READ:name;
+const unique T.FFAST_IO_READ_COMPRESSED:name;
+const unique T.FFAST_IO_RELEASE_FILE:name;
+const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_UNLOCK_ALL:name;
+const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.FFAST_IO_UNLOCK_SINGLE:name;
+const unique T.FFAST_IO_WRITE:name;
+const unique T.FFAST_IO_WRITE_COMPRESSED:name;
+const unique T.FIO_COMPLETION_ROUTINE:name;
+const unique T.FKDEFERRED_ROUTINE:name;
+const unique T.INT2:name;
+const unique T.INT4:name;
+const unique T.INT8:name;
+const unique T.PA256UINT2:name;
+const unique T.PA2UINT2:name;
+const unique T.PA4UINT4:name;
+const unique T.PA5UINT2:name;
+const unique T.PA85CHAR:name;
+const unique T.PA9UINT2:name;
+const unique T.PCHAR:name;
+const unique T.PF19:name;
+const unique T.PF21:name;
+const unique T.PF23:name;
+const unique T.PF24:name;
+const unique T.PF25:name;
+const unique T.PF33:name;
+const unique T.PF34:name;
+const unique T.PF35:name;
+const unique T.PF36:name;
+const unique T.PF37:name;
+const unique T.PF38:name;
+const unique T.PFDRIVER_ADD_DEVICE:name;
+const unique T.PFDRIVER_CANCEL:name;
+const unique T.PFDRIVER_CONTROL:name;
+const unique T.PFDRIVER_DISPATCH:name;
+const unique T.PFDRIVER_INITIALIZE:name;
+const unique T.PFDRIVER_STARTIO:name;
+const unique T.PFDRIVER_UNLOAD:name;
+const unique T.PFFAST_IO_ACQUIRE_FILE:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.PFFAST_IO_DETACH_DEVICE:name;
+const unique T.PFFAST_IO_DEVICE_CONTROL:name;
+const unique T.PFFAST_IO_LOCK:name;
+const unique T.PFFAST_IO_MDL_READ:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.PFFAST_IO_QUERY_OPEN:name;
+const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.PFFAST_IO_READ:name;
+const unique T.PFFAST_IO_READ_COMPRESSED:name;
+const unique T.PFFAST_IO_RELEASE_FILE:name;
+const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_UNLOCK_ALL:name;
+const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
+const unique T.PFFAST_IO_WRITE:name;
+const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
+const unique T.PFIO_COMPLETION_ROUTINE:name;
+const unique T.PFKDEFERRED_ROUTINE:name;
+const unique T.PINT4:name;
+const unique T.POWER_ACTION:name;
+const unique T.PPCHAR:name;
+const unique T.PPF24:name;
+const unique T.PPPUINT2:name;
+const unique T.PPP_DEVICE_OBJECT:name;
+const unique T.PPP_FILE_OBJECT:name;
+const unique T.PPUINT2:name;
+const unique T.PPUINT4:name;
+const unique T.PPVOID:name;
+const unique T.PP_DEVICE_EXTENSION:name;
+const unique T.PP_DEVICE_OBJECT:name;
+const unique T.PP_DRIVER_OBJECT:name;
+const unique T.PP_ERESOURCE:name;
+const unique T.PP_FAST_MUTEX:name;
+const unique T.PP_FILE_OBJECT:name;
+const unique T.PP_LIST_ENTRY:name;
+const unique T.PP_MDL:name;
+const unique T.PP_PORT:name;
+const unique T.PP_UNICODE_STRING:name;
+const unique T.PUCHAR:name;
+const unique T.PUINT2:name;
+const unique T.PUINT4:name;
+const unique T.PVOID:name;
+const unique T.PWMIGUIDREGINFO:name;
+const unique T.P_ACCESS_STATE:name;
+const unique T.P_CM_RESOURCE_LIST:name;
+const unique T.P_COMPRESSED_DATA_INFO:name;
+const unique T.P_DEVICE_CAPABILITIES:name;
+const unique T.P_DEVICE_EXTENSION:name;
+const unique T.P_DEVICE_OBJECT:name;
+const unique T.P_DEVOBJ_EXTENSION:name;
+const unique T.P_DRIVER_EXTENSION:name;
+const unique T.P_DRIVER_OBJECT:name;
+const unique T.P_EPROCESS:name;
+const unique T.P_ERESOURCE:name;
+const unique T.P_ETHREAD:name;
+const unique T.P_FAST_IO_DISPATCH:name;
+const unique T.P_FAST_MUTEX:name;
+const unique T.P_FILE_BASIC_INFORMATION:name;
+const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
+const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.P_FILE_OBJECT:name;
+const unique T.P_FILE_STANDARD_INFORMATION:name;
+const unique T.P_GLOBALS:name;
+const unique T.P_GUID:name;
+const unique T.P_INTERFACE:name;
+const unique T.P_IO_COMPLETION_CONTEXT:name;
+const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.P_IO_SECURITY_CONTEXT:name;
+const unique T.P_IO_STACK_LOCATION:name;
+const unique T.P_IO_STATUS_BLOCK:name;
+const unique T.P_IO_TIMER:name;
+const unique T.P_IRP:name;
+const unique T.P_KAPC:name;
+const unique T.P_KDPC:name;
+const unique T.P_KEVENT:name;
+const unique T.P_KSEMAPHORE:name;
+const unique T.P_KTHREAD:name;
+const unique T.P_LARGE_INTEGER:name;
+const unique T.P_LIST_ENTRY:name;
+const unique T.P_MDL:name;
+const unique T.P_MOUSE_INPUT_DATA:name;
+const unique T.P_OWNER_ENTRY:name;
+const unique T.P_POOL_TYPE:name;
+const unique T.P_PORT:name;
+const unique T.P_POWER_SEQUENCE:name;
+const unique T.P_SCSI_REQUEST_BLOCK:name;
+const unique T.P_SECTION_OBJECT_POINTERS:name;
+const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.P_UNICODE_STRING:name;
+const unique T.P_VPB:name;
+const unique T.UCHAR:name;
+const unique T.UINT2:name;
+const unique T.UINT4:name;
+const unique T.VOID:name;
+const unique T.WMIENABLEDISABLECONTROL:name;
+const unique T.WMIGUIDREGINFO:name;
+const unique T._ACCESS_STATE:name;
+const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_LIST:name;
+const unique T._CM_RESOURCE_LIST:name;
+const unique T._COMPRESSED_DATA_INFO:name;
+const unique T._DEVICE_CAPABILITIES:name;
+const unique T._DEVICE_EXTENSION:name;
+const unique T._DEVICE_OBJECT:name;
+const unique T._DEVICE_POWER_STATE:name;
+const unique T._DEVICE_RELATION_TYPE:name;
+const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
+const unique T._DEVOBJ_EXTENSION:name;
+const unique T._DISPATCHER_HEADER:name;
+const unique T._DRIVER_EXTENSION:name;
+const unique T._DRIVER_OBJECT:name;
+const unique T._EPROCESS:name;
+const unique T._ERESOURCE:name;
+const unique T._ETHREAD:name;
+const unique T._FAST_IO_DISPATCH:name;
+const unique T._FAST_MUTEX:name;
+const unique T._FILE_BASIC_INFORMATION:name;
+const unique T._FILE_GET_QUOTA_INFORMATION:name;
+const unique T._FILE_INFORMATION_CLASS:name;
+const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T._FILE_OBJECT:name;
+const unique T._FILE_STANDARD_INFORMATION:name;
+const unique T._FSINFOCLASS:name;
+const unique T._GLOBALS:name;
+const unique T._GUID:name;
+const unique T._INITIAL_PRIVILEGE_SET:name;
+const unique T._INTERFACE:name;
+const unique T._INTERFACE_TYPE:name;
+const unique T._IO_ALLOCATION_ACTION:name;
+const unique T._IO_COMPLETION_CONTEXT:name;
+const unique T._IO_REMOVE_LOCK:name;
+const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T._IO_RESOURCE_DESCRIPTOR:name;
+const unique T._IO_RESOURCE_LIST:name;
+const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T._IO_SECURITY_CONTEXT:name;
+const unique T._IO_STACK_LOCATION:name;
+const unique T._IO_STATUS_BLOCK:name;
+const unique T._IO_TIMER:name;
+const unique T._IRP:name;
+const unique T._IRQ_DEVICE_POLICY:name;
+const unique T._IRQ_PRIORITY:name;
+const unique T._KAPC:name;
+const unique T._KDEVICE_QUEUE:name;
+const unique T._KDEVICE_QUEUE_ENTRY:name;
+const unique T._KDPC:name;
+const unique T._KEVENT:name;
+const unique T._KSEMAPHORE:name;
+const unique T._KTHREAD:name;
+const unique T._LARGE_INTEGER:name;
+const unique T._LIST_ENTRY:name;
+const unique T._LUID:name;
+const unique T._LUID_AND_ATTRIBUTES:name;
+const unique T._MDL:name;
+const unique T._MOUSE_ATTRIBUTES:name;
+const unique T._MOUSE_INPUT_DATA:name;
+const unique T._OWNER_ENTRY:name;
+const unique T._POOL_TYPE:name;
+const unique T._PORT:name;
+const unique T._POWER_SEQUENCE:name;
+const unique T._POWER_STATE:name;
+const unique T._POWER_STATE_TYPE:name;
+const unique T._PRIVILEGE_SET:name;
+const unique T._SCSI_REQUEST_BLOCK:name;
+const unique T._SECTION_OBJECT_POINTERS:name;
+const unique T._SECURITY_IMPERSONATION_LEVEL:name;
+const unique T._SECURITY_QUALITY_OF_SERVICE:name;
+const unique T._SECURITY_SUBJECT_CONTEXT:name;
+const unique T._SYSTEM_POWER_STATE:name;
+const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T._UNICODE_STRING:name;
+const unique T._VPB:name;
+const unique T._WAIT_CONTEXT_BLOCK:name;
+const unique T._WMILIB_CONTEXT:name;
+const unique T.__unnamed_12_06b9ee6e:name;
+const unique T.__unnamed_12_0882bd02:name;
+const unique T.__unnamed_12_264d0dab:name;
+const unique T.__unnamed_12_2e80217b:name;
+const unique T.__unnamed_12_5cc7ace2:name;
+const unique T.__unnamed_12_6374506e:name;
+const unique T.__unnamed_12_68a4278e:name;
+const unique T.__unnamed_12_79ed2653:name;
+const unique T.__unnamed_12_7da594c0:name;
+const unique T.__unnamed_12_9873e05d:name;
+const unique T.__unnamed_12_9cc8cebc:name;
+const unique T.__unnamed_12_b98da82e:name;
+const unique T.__unnamed_12_c2880e88:name;
+const unique T.__unnamed_12_c49ab31a:name;
+const unique T.__unnamed_12_c6ed93f3:name;
+const unique T.__unnamed_12_ced61554:name;
+const unique T.__unnamed_12_d9c44df5:name;
+const unique T.__unnamed_12_db3dcbfc:name;
+const unique T.__unnamed_12_fb26b3fc:name;
+const unique T.__unnamed_16_22e4d054:name;
+const unique T.__unnamed_16_39b626ad:name;
+const unique T.__unnamed_16_56c011d7:name;
+const unique T.__unnamed_16_5fed8f23:name;
+const unique T.__unnamed_16_6be9abe0:name;
+const unique T.__unnamed_16_78879a38:name;
+const unique T.__unnamed_16_804a2f24:name;
+const unique T.__unnamed_16_8586693f:name;
+const unique T.__unnamed_16_8831e65f:name;
+const unique T.__unnamed_16_8c2d663a:name;
+const unique T.__unnamed_16_913b9a7a:name;
+const unique T.__unnamed_16_94d1d1c7:name;
+const unique T.__unnamed_16_a2fab4da:name;
+const unique T.__unnamed_16_ae643f17:name;
+const unique T.__unnamed_16_c1b29316:name;
+const unique T.__unnamed_16_cbd53ed4:name;
+const unique T.__unnamed_16_db70db6e:name;
+const unique T.__unnamed_16_ef4b6307:name;
+const unique T.__unnamed_16_fdda1f62:name;
+const unique T.__unnamed_1_1394de4b:name;
+const unique T.__unnamed_1_2bb39c56:name;
+const unique T.__unnamed_1_9fa0583a:name;
+const unique T.__unnamed_1_e30779f5:name;
+const unique T.__unnamed_20_83d468e4:name;
+const unique T.__unnamed_24_035931da:name;
+const unique T.__unnamed_24_38e128db:name;
+const unique T.__unnamed_24_9500ea34:name;
+const unique T.__unnamed_24_9734802c:name;
+const unique T.__unnamed_24_af62813f:name;
+const unique T.__unnamed_24_c0555099:name;
+const unique T.__unnamed_24_d7c4ec3a:name;
+const unique T.__unnamed_2_196a7f56:name;
+const unique T.__unnamed_40_a0414182:name;
+const unique T.__unnamed_40_d90496f4:name;
+const unique T.__unnamed_44_a7026dca:name;
+const unique T.__unnamed_48_c1da9fa5:name;
+const unique T.__unnamed_4_0510b147:name;
+const unique T.__unnamed_4_0a569078:name;
+const unique T.__unnamed_4_16aff58e:name;
+const unique T.__unnamed_4_40bf8e34:name;
+const unique T.__unnamed_4_46b62f69:name;
+const unique T.__unnamed_4_73d46255:name;
+const unique T.__unnamed_4_765e3037:name;
+const unique T.__unnamed_4_846adf3f:name;
+const unique T.__unnamed_4_8dd73d30:name;
+const unique T.__unnamed_4_957e0d74:name;
+const unique T.__unnamed_4_9c11ed91:name;
+const unique T.__unnamed_4_a58d40c8:name;
+const unique T.__unnamed_4_a7aa989c:name;
+const unique T.__unnamed_4_a7d0864c:name;
+const unique T.__unnamed_4_aa20b426:name;
+const unique T.__unnamed_4_ab87ddfd:name;
+const unique T.__unnamed_4_b016b1e1:name;
+const unique T.__unnamed_4_b060dea6:name;
+const unique T.__unnamed_4_b4f5a780:name;
+const unique T.__unnamed_4_b5247f10:name;
+const unique T.__unnamed_4_c1e23b02:name;
+const unique T.__unnamed_4_c9b2e921:name;
+const unique T.__unnamed_4_fa7b96a7:name;
+const unique T.__unnamed_8_09ad2712:name;
+const unique T.__unnamed_8_21ac1dba:name;
+const unique T.__unnamed_8_27d3ab76:name;
+const unique T.__unnamed_8_4289df81:name;
+const unique T.__unnamed_8_47b72724:name;
+const unique T.__unnamed_8_4b3e3ba3:name;
+const unique T.__unnamed_8_4f695993:name;
+const unique T.__unnamed_8_5cfb6ca4:name;
+const unique T.__unnamed_8_606438c5:name;
+const unique T.__unnamed_8_6ad774c0:name;
+const unique T.__unnamed_8_805045cb:name;
+const unique T.__unnamed_8_8684a3e7:name;
+const unique T.__unnamed_8_8cc410da:name;
+const unique T.__unnamed_8_a47253e0:name;
+const unique T.__unnamed_8_bbd07f6c:name;
+const unique T.__unnamed_8_c9ca8234:name;
+
+function AssocClassList__GLOBALS(int) returns (int);
+function AssocClassList__GLOBALSInv(int) returns (int);
+function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
+function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
+function BaseClassName__GLOBALS(int) returns (int);
+function BaseClassName__GLOBALSInv(int) returns (int);
+function _S_BaseClassName__GLOBALS([int]bool) returns ([int]bool);
+function _S_BaseClassName__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x))} BaseClassName__GLOBALSInv(BaseClassName__GLOBALS(x)) == x);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALS(BaseClassName__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALS(S)[x]} _S_BaseClassName__GLOBALS(S)[x] <==> S[BaseClassName__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_BaseClassName__GLOBALSInv(S)[x]} _S_BaseClassName__GLOBALSInv(S)[x] <==> S[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALS(S)} S[x] ==> _S_BaseClassName__GLOBALS(S)[BaseClassName__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_BaseClassName__GLOBALSInv(S)} S[x] ==> _S_BaseClassName__GLOBALSInv(S)[BaseClassName__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {BaseClassName__GLOBALS(x)} BaseClassName__GLOBALS(x) == x + 344);
+axiom (forall x:int :: {BaseClassName__GLOBALSInv(x)} BaseClassName__GLOBALSInv(x) == x - 344);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 344, 1) == BaseClassName__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 344)} MINUS_LEFT_PTR(x, 1, 344) == BaseClassName__GLOBALSInv(x));
+function Buffer__UNICODE_STRING(int) returns (int);
+function Buffer__UNICODE_STRINGInv(int) returns (int);
+function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
+function DataIn__DEVICE_EXTENSION(int) returns (int);
+function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
+function DataOut__DEVICE_EXTENSION(int) returns (int);
+function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
+function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
+function File__DEVICE_EXTENSION(int) returns (int);
+function File__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 260);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 260);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == File__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == File__DEVICE_EXTENSIONInv(x));
+function File__PORT(int) returns (int);
+function File__PORTInv(int) returns (int);
+function _S_File__PORT([int]bool) returns ([int]bool);
+function _S_File__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
+
+axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
+function Flags__DEVICE_OBJECT(int) returns (int);
+function Flags__DEVICE_OBJECTInv(int) returns (int);
+function _S_Flags__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_Flags__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x))} Flags__DEVICE_OBJECTInv(Flags__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECT(Flags__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECT(S)[x]} _S_Flags__DEVICE_OBJECT(S)[x] <==> S[Flags__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flags__DEVICE_OBJECTInv(S)[x]} _S_Flags__DEVICE_OBJECTInv(S)[x] <==> S[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECT(S)} S[x] ==> _S_Flags__DEVICE_OBJECT(S)[Flags__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flags__DEVICE_OBJECTInv(S)} S[x] ==> _S_Flags__DEVICE_OBJECTInv(S)[Flags__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {Flags__DEVICE_OBJECT(x)} Flags__DEVICE_OBJECT(x) == x + 28);
+axiom (forall x:int :: {Flags__DEVICE_OBJECTInv(x)} Flags__DEVICE_OBJECTInv(x) == x - 28);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 28, 1) == Flags__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 28)} MINUS_LEFT_PTR(x, 1, 28) == Flags__DEVICE_OBJECTInv(x));
+function Flink__LIST_ENTRY(int) returns (int);
+function Flink__LIST_ENTRYInv(int) returns (int);
+function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
+function Free__PORT(int) returns (int);
+function Free__PORTInv(int) returns (int);
+function _S_Free__PORT([int]bool) returns ([int]bool);
+function _S_Free__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
+
+axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
+function GrandMaster__GLOBALS(int) returns (int);
+function GrandMaster__GLOBALSInv(int) returns (int);
+function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
+function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
+function InitExtension__GLOBALS(int) returns (int);
+function InitExtension__GLOBALSInv(int) returns (int);
+function _S_InitExtension__GLOBALS([int]bool) returns ([int]bool);
+function _S_InitExtension__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InitExtension__GLOBALSInv(InitExtension__GLOBALS(x))} InitExtension__GLOBALSInv(InitExtension__GLOBALS(x)) == x);
+axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALS(InitExtension__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALS(S)[x]} _S_InitExtension__GLOBALS(S)[x] <==> S[InitExtension__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InitExtension__GLOBALSInv(S)[x]} _S_InitExtension__GLOBALSInv(S)[x] <==> S[InitExtension__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALS(S)} S[x] ==> _S_InitExtension__GLOBALS(S)[InitExtension__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InitExtension__GLOBALSInv(S)} S[x] ==> _S_InitExtension__GLOBALSInv(S)[InitExtension__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {InitExtension__GLOBALS(x)} InitExtension__GLOBALS(x) == x + 64);
+axiom (forall x:int :: {InitExtension__GLOBALSInv(x)} InitExtension__GLOBALSInv(x) == x - 64);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 64, 1) == InitExtension__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 64)} MINUS_LEFT_PTR(x, 1, 64) == InitExtension__GLOBALSInv(x));
+function InputData__DEVICE_EXTENSION(int) returns (int);
+function InputData__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
+function LegacyDeviceList__GLOBALS(int) returns (int);
+function LegacyDeviceList__GLOBALSInv(int) returns (int);
+function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
+function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 864);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 864);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1) == LegacyDeviceList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 864)} MINUS_LEFT_PTR(x, 1, 864) == LegacyDeviceList__GLOBALSInv(x));
+function Length__UNICODE_STRING(int) returns (int);
+function Length__UNICODE_STRINGInv(int) returns (int);
+function _S_Length__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Length__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x))} Length__UNICODE_STRINGInv(Length__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRING(Length__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRING(S)[x]} _S_Length__UNICODE_STRING(S)[x] <==> S[Length__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Length__UNICODE_STRINGInv(S)[x]} _S_Length__UNICODE_STRINGInv(S)[x] <==> S[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRING(S)} S[x] ==> _S_Length__UNICODE_STRING(S)[Length__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Length__UNICODE_STRINGInv(S)} S[x] ==> _S_Length__UNICODE_STRINGInv(S)[Length__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Length__UNICODE_STRING(x)} Length__UNICODE_STRING(x) == x + 0);
+axiom (forall x:int :: {Length__UNICODE_STRINGInv(x)} Length__UNICODE_STRINGInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Length__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Length__UNICODE_STRINGInv(x));
+function Link__DEVICE_EXTENSION(int) returns (int);
+function Link__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 252);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 252);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == Link__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == Link__DEVICE_EXTENSIONInv(x));
+function MaximumLength__UNICODE_STRING(int) returns (int);
+function MaximumLength__UNICODE_STRINGInv(int) returns (int);
+function _S_MaximumLength__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_MaximumLength__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x))} MaximumLength__UNICODE_STRINGInv(MaximumLength__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRING(MaximumLength__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRING(S)[x]} _S_MaximumLength__UNICODE_STRING(S)[x] <==> S[MaximumLength__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_MaximumLength__UNICODE_STRINGInv(S)[x]} _S_MaximumLength__UNICODE_STRINGInv(S)[x] <==> S[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRING(S)} S[x] ==> _S_MaximumLength__UNICODE_STRING(S)[MaximumLength__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_MaximumLength__UNICODE_STRINGInv(S)} S[x] ==> _S_MaximumLength__UNICODE_STRINGInv(S)[MaximumLength__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {MaximumLength__UNICODE_STRING(x)} MaximumLength__UNICODE_STRING(x) == x + 2);
+axiom (forall x:int :: {MaximumLength__UNICODE_STRINGInv(x)} MaximumLength__UNICODE_STRINGInv(x) == x - 2);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 2, 1) == MaximumLength__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 2)} MINUS_LEFT_PTR(x, 1, 2) == MaximumLength__UNICODE_STRINGInv(x));
+function Mutex__GLOBALS(int) returns (int);
+function Mutex__GLOBALSInv(int) returns (int);
+function _S_Mutex__GLOBALS([int]bool) returns ([int]bool);
+function _S_Mutex__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Mutex__GLOBALSInv(Mutex__GLOBALS(x))} Mutex__GLOBALSInv(Mutex__GLOBALS(x)) == x);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALS(Mutex__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALS(S)[x]} _S_Mutex__GLOBALS(S)[x] <==> S[Mutex__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Mutex__GLOBALSInv(S)[x]} _S_Mutex__GLOBALSInv(S)[x] <==> S[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALS(S)} S[x] ==> _S_Mutex__GLOBALS(S)[Mutex__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Mutex__GLOBALSInv(S)} S[x] ==> _S_Mutex__GLOBALSInv(S)[Mutex__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {Mutex__GLOBALS(x)} Mutex__GLOBALS(x) == x + 24);
+axiom (forall x:int :: {Mutex__GLOBALSInv(x)} Mutex__GLOBALSInv(x) == x - 24);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 24, 1) == Mutex__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 24)} MINUS_LEFT_PTR(x, 1, 24) == Mutex__GLOBALSInv(x));
+function NumberLegacyPorts__GLOBALS(int) returns (int);
+function NumberLegacyPorts__GLOBALSInv(int) returns (int);
+function _S_NumberLegacyPorts__GLOBALS([int]bool) returns ([int]bool);
+function _S_NumberLegacyPorts__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x))} NumberLegacyPorts__GLOBALSInv(NumberLegacyPorts__GLOBALS(x)) == x);
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALS(NumberLegacyPorts__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALS(S)[x]} _S_NumberLegacyPorts__GLOBALS(S)[x] <==> S[NumberLegacyPorts__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumberLegacyPorts__GLOBALSInv(S)[x]} _S_NumberLegacyPorts__GLOBALSInv(S)[x] <==> S[NumberLegacyPorts__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALS(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALS(S)[NumberLegacyPorts__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumberLegacyPorts__GLOBALSInv(S)} S[x] ==> _S_NumberLegacyPorts__GLOBALSInv(S)[NumberLegacyPorts__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALS(x)} NumberLegacyPorts__GLOBALS(x) == x + 20);
+axiom (forall x:int :: {NumberLegacyPorts__GLOBALSInv(x)} NumberLegacyPorts__GLOBALSInv(x) == x - 20);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 20, 1) == NumberLegacyPorts__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 20)} MINUS_LEFT_PTR(x, 1, 20) == NumberLegacyPorts__GLOBALSInv(x));
+function PnP__DEVICE_EXTENSION(int) returns (int);
+function PnP__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
+function Port__PORT(int) returns (int);
+function Port__PORTInv(int) returns (int);
+function _S_Port__PORT([int]bool) returns ([int]bool);
+function _S_Port__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
+
+axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
+function PortsServiced__GLOBALS(int) returns (int);
+function PortsServiced__GLOBALSInv(int) returns (int);
+function _S_PortsServiced__GLOBALS([int]bool) returns ([int]bool);
+function _S_PortsServiced__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x))} PortsServiced__GLOBALSInv(PortsServiced__GLOBALS(x)) == x);
+axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALS(PortsServiced__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALS(S)[x]} _S_PortsServiced__GLOBALS(S)[x] <==> S[PortsServiced__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PortsServiced__GLOBALSInv(S)[x]} _S_PortsServiced__GLOBALSInv(S)[x] <==> S[PortsServiced__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALS(S)} S[x] ==> _S_PortsServiced__GLOBALS(S)[PortsServiced__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PortsServiced__GLOBALSInv(S)} S[x] ==> _S_PortsServiced__GLOBALSInv(S)[PortsServiced__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {PortsServiced__GLOBALS(x)} PortsServiced__GLOBALS(x) == x + 60);
+axiom (forall x:int :: {PortsServiced__GLOBALSInv(x)} PortsServiced__GLOBALSInv(x) == x - 60);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 60, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 60, 1) == PortsServiced__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 60)} MINUS_LEFT_PTR(x, 1, 60) == PortsServiced__GLOBALSInv(x));
+function Self__DEVICE_EXTENSION(int) returns (int);
+function Self__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
+function SpinLock__DEVICE_EXTENSION(int) returns (int);
+function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 152);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 152);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 152)} MINUS_LEFT_PTR(x, 1, 152) == SpinLock__DEVICE_EXTENSIONInv(x));
+function StackSize__DEVICE_OBJECT(int) returns (int);
+function StackSize__DEVICE_OBJECTInv(int) returns (int);
+function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
+function Started__DEVICE_EXTENSION(int) returns (int);
+function Started__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
+function TopPort__DEVICE_EXTENSION(int) returns (int);
+function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
+function UnitId__DEVICE_EXTENSION(int) returns (int);
+function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 176);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 176);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == UnitId__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == UnitId__DEVICE_EXTENSIONInv(x));
+function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure nondet_choice() returns (x:int);
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+var Res_DEVICE_STACK:[int]int;
+var Res_DEV_EXTN:[int]int;
+var Res_DEV_OBJ_INIT:[int]int;
+var Res_SPIN_LOCK:[int]int;
+
+
+
+////////////////////
+// Between predicate
+////////////////////
+function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
+function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
+
+
+//////////////////////////
+// Between set constructor
+//////////////////////////
+function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
+
+////////////////////////////////////////////////////
+// axioms relating ReachBetween and ReachBetweenSet
+////////////////////////////////////////////////////
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
+axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
+
+
+//////////////////////////
+// Axioms for ReachBetween
+//////////////////////////
+
+// reflexive
+axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
+
+// step
+//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
+axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
+
+// reach
+axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
+
+// cycle
+axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
+
+// sandwich
+axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
+
+// order1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
+
+// order2
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
+
+// transitive1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
+
+// transitive2
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
+
+// transitive3
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
+
+// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
+// It cannot be proved using the rest of the axioms.
+axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
+
+// relation between ReachAvoiding and ReachBetween
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
+
+// update
+axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
+ ///////////////////////////////
+ // Shifts for linking fields
+ ///////////////////////////////
+function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
+axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
+axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
+
+const unique Globals : int;
+axiom(Globals != 0);
+// the set of constants for 64 bit integers that Boogie doesn't parse
+const unique BOOGIE_LARGE_INT_3221553153:int;
+
+
+
+procedure ExAcquireFastMutex($FastMutex$1$15000.16$ExAcquireFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExAllocatePoolWithTag($PoolType$1$14789.57$ExAllocatePoolWithTag$121:int, $NumberOfBytes$2$14790.16$ExAllocatePoolWithTag$121:int, $Tag$3$14791.15$ExAllocatePoolWithTag$121:int) returns ($result.ExAllocatePoolWithTag$14788.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ExReleaseFastMutex($FastMutex$1$15013.16$ExReleaseFastMutex$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure InsertTailList($ListHead$1$6980.24$InsertTailList$81:int, $Entry$2$6981.41$InsertTailList$81:int);
+
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead), __setunion(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), ListHead->Flink, ListHead)), __set(Entry)))
+ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81))) && Subset(Union(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81), Singleton($Entry$2$6981.41$InsertTailList$81)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($ListHead$1$6980.24$InsertTailList$81)], $ListHead$1$6980.24$InsertTailList$81))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
+requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
+//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
+ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
+//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
+ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
+//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
+ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
+//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoGetDeviceObjectPointer($ObjectName$1$21492.26$IoGetDeviceObjectPointer$161:int, $DesiredAccess$2$21493.22$IoGetDeviceObjectPointer$161:int, $FileObject$3$21494.24$IoGetDeviceObjectPointer$161:int, $DeviceObject$4$21495.26$IoGetDeviceObjectPointer$161:int) returns ($result.IoGetDeviceObjectPointer$21491.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouCreateClassObject($DriverObject$1$3165.28$MouCreateClassObject$201:int, $TmpDeviceExtension$2$3166.28$MouCreateClassObject$201:int, $ClassDeviceObject$3$3167.28$MouCreateClassObject$201:int, $FullDeviceName$4$3168.35$MouCreateClassObject$201:int, $Legacy$5$3169.28$MouCreateClassObject$201:int) returns ($result.MouCreateClassObject$3164.0$1$:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures (LONG)__return >= 0 ==> *ClassDeviceObject != (void *)0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> (*ClassDeviceObject)->DeviceExtension != (void *)0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] != 0));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_EXTN", (*ClassDeviceObject)->DeviceExtension) == 1
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 1
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 1)));
+//TAG: ensures (LONG)__return >= 0 ==> __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) == 0 && __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == 0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == 0) && (old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == 0)));
+//TAG: ensures (LONG)__return >= 0 ==> __updates_resource("DEV_OBJ_INIT", *ClassDeviceObject, 1) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension), 1)
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] := 1]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] := 1])));
+//TAG: ensures !((LONG)__return >= 0) ==> __resource("DEV_OBJ_INIT", *ClassDeviceObject) == __old_resource("DEV_OBJ_INIT", *ClassDeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))
+ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]] == old(Res_DEV_OBJ_INIT)[Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]])));
+//TAG: ensures !((LONG)__return >= 0) ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __setin(_H_z, __set((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))) || __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])[_H_z]) || ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+//TAG: ensures !((LONG)__return >= 0) ==> __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures((!($result.MouCreateClassObject$3164.0$1$ >= 0)) ==> ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+//TAG: ensures (LONG)__return >= 0 ==> __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension))->SpinLock) == 0
+ensures(($result.MouCreateClassObject$3164.0$1$ >= 0) ==> (Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])])] == 0));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(*ClassDeviceObject))->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201])] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, *ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201]))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Mem[T.P_DEVICE_OBJECT][$ClassDeviceObject$3$3167.28$MouCreateClassObject$201] == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: &TmpDeviceExtension->WaitWakeSpinLock, &((struct _DEVICE_EXTENSION *)TmpDeviceExtension)->SpinLock, __set_true
+ensures (Subset(Empty(), Union(Union(Union(Empty(), Singleton(WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), Singleton(SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201))), SetTrue())) && (forall r:int :: {Res_SPIN_LOCK[r]} (WaitWakeSpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SpinLock__DEVICE_EXTENSION($TmpDeviceExtension$2$3166.28$MouCreateClassObject$201) == r) || (SetTrue()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
+ensures (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, ClassDeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($ClassDeviceObject$3$3167.28$MouCreateClassObject$201))) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (_m == $ClassDeviceObject$3$3167.28$MouCreateClassObject$201) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouDeterminePortsServiced($BasePortName$1$3491.23$MouDeterminePortsServiced$81:int, $NumberPortsServiced$2$3492.18$MouDeterminePortsServiced$81:int) returns ($result.MouDeterminePortsServiced$3490.0$1$:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouseAddDeviceEx($ClassData$1$792.28$MouseAddDeviceEx$121:int, $FullClassName$2$793.29$MouseAddDeviceEx$121:int, $File$3$794.28$MouseAddDeviceEx$121:int) returns ($result.MouseAddDeviceEx$791.0$1$:int);
+
+//TAG: requires __resource("DEV_EXTN", ClassData) == 1
+requires(Res_DEV_EXTN[$ClassData$1$792.28$MouseAddDeviceEx$121] == 1);
+//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)ClassData)->SpinLock) == 0
+requires(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121)] == 0);
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __resource("DEV_EXTN", ClassData) == 1
+ensures(Res_DEV_EXTN[$ClassData$1$792.28$MouseAddDeviceEx$121] == 1);
+//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)ClassData)->WaitWakeSpinLock) == 0
+ensures(Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121)] == 0);
+//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)ClassData)->SpinLock) == 0
+ensures(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121)] == 0);
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: &ClassData->WaitWakeSpinLock, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Singleton(WaitWakeSpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121))), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (WaitWakeSpinLock__DEVICE_EXTENSION($ClassData$1$792.28$MouseAddDeviceEx$121) == r) || (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouseClassLogError($Object$1$4550.10$MouseClassLogError$281:int, $ErrorCode$2$4551.10$MouseClassLogError$281:int, $UniqueErrorValue$3$4552.10$MouseClassLogError$281:int, $FinalStatus$4$4553.13$MouseClassLogError$281:int, $DumpCount$5$4554.10$MouseClassLogError$281:int, $DumpData$6$4555.11$MouseClassLogError$281:int, $MajorFunction$7$4556.10$MouseClassLogError$281:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlAppendUnicodeToString($Destination$1$7421.28$RtlAppendUnicodeToString$81:int, $Source$2$7422.20$RtlAppendUnicodeToString$81:int) returns ($result.RtlAppendUnicodeToString$7420.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlCopyUnicodeString($DestinationString$1$7401.28$RtlCopyUnicodeString$81:int, $SourceString$2$7402.30$RtlCopyUnicodeString$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RtlInitUnicodeString($DestinationString$1$7281.26$RtlInitUnicodeString$81:int, $SourceString$2$7282.37$RtlInitUnicodeString$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure __PREfastPagedCode();
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouseClassFindMorePorts($DriverObject$1$4588.20$MouseClassFindMorePorts$121:int, $Context$2$4589.20$MouseClassFindMorePorts$121:int, $Count$3$4590.20$MouseClassFindMorePorts$121:int)
+
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+modifies alloc;
+free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for:
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for:
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for:
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for:
+
+//TAG: havoc memory locations by default
+modifies Mem;
+{
+var havoc_stringTemp:int;
+var condVal:int;
+var $Context$2$4589.20$MouseClassFindMorePorts$12 : int;
+var $Count$3$4590.20$MouseClassFindMorePorts$12 : int;
+var $DriverObject$1$4588.20$MouseClassFindMorePorts$12 : int;
+var $ExAllocatePoolWithTag.arg.2$5$ : int;
+var $MouDebugPrint.arg.2$6$ : int;
+var $RtlAppendUnicodeToString.arg.2$10$ : int;
+var $RtlAppendUnicodeToString.arg.2$13$ : int;
+var $RtlAppendUnicodeToString.arg.2$3$ : int;
+var $basePortBuffer$13$4622.28$MouseClassFindMorePorts$12 : int;
+var $basePortName$11$4620.28$MouseClassFindMorePorts$12 : int;
+var $classDeviceObject$6$4615.28$MouseClassFindMorePorts$12 : int;
+var $deviceExtension$5$4614.28$MouseClassFindMorePorts$12 : int;
+var $dumpData$7$4616.28$MouseClassFindMorePorts$12 : int;
+var $file$15$4624.28$MouseClassFindMorePorts$12 : int;
+var $fullClassName$14$4623.28$MouseClassFindMorePorts$12 : int;
+var $fullPortName$12$4621.28$MouseClassFindMorePorts$12 : int;
+var $i$8$4617.28$MouseClassFindMorePorts$12 : int;
+var $memset.arg.3$8$ : int;
+var $numPorts$9$4618.28$MouseClassFindMorePorts$12 : int;
+var $port$16$4759.22$MouseClassFindMorePorts$12 : int;
+var $result.ExAllocatePoolWithTag$4653.0$4$ : int;
+var $result.IoGetDeviceObjectPointer$4731.42$16$ : int;
+var $result.MouCreateClassObject$4708.37$15$ : int;
+var $result.MouDeterminePortsServiced$4680.29$14$ : int;
+var $result.MouseAddDeviceEx$4743.34$17$ : int;
+var $result.ObfDereferenceObject$4772.16$18$ : int;
+var $result.RtlAppendUnicodeToString$4642.28$2$ : int;
+var $result.RtlAppendUnicodeToString$4676.28$9$ : int;
+var $result.RtlAppendUnicodeToString$4677.28$11$ : int;
+var $result.RtlAppendUnicodeToString$4678.28$12$ : int;
+var $result.memset$4630.4$1$ : int;
+var $result.memset$4675.4$7$ : int;
+var $status$4$4613.28$MouseClassFindMorePorts$12 : int;
+var $successfulCreates$10$4619.28$MouseClassFindMorePorts$12 : int;
+var tempBoogie0:int;
+var tempBoogie1:int;
+var tempBoogie2:int;
+var tempBoogie3:int;
+var tempBoogie4:int;
+var tempBoogie5:int;
+var tempBoogie6:int;
+var tempBoogie7:int;
+var tempBoogie8:int;
+var tempBoogie9:int;
+var tempBoogie10:int;
+var tempBoogie11:int;
+var tempBoogie12:int;
+var tempBoogie13:int;
+var tempBoogie14:int;
+var tempBoogie15:int;
+var tempBoogie16:int;
+var tempBoogie17:int;
+var tempBoogie18:int;
+var tempBoogie19:int;
+var LOOP_74_alloc:[int]name;
+var LOOP_74_Mem:[name][int]int;
+var LOOP_74_Res_DEVICE_STACK:[int]int;
+var LOOP_74_Res_DEV_EXTN:[int]int;
+var LOOP_74_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_74_Res_SPIN_LOCK:[int]int;
+
+
+start:
+
+assume (alloc[$DriverObject$1$4588.20$MouseClassFindMorePorts$121] != UNALLOCATED);
+assume (alloc[$Context$2$4589.20$MouseClassFindMorePorts$121] != UNALLOCATED);
+call $basePortBuffer$13$4622.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(512);
+call $basePortName$11$4620.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(8);
+call $classDeviceObject$6$4615.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
+call $dumpData$7$4616.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(16);
+call $file$15$4624.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
+call $fullClassName$14$4623.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
+call $fullPortName$12$4621.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(8);
+call $numPorts$9$4618.28$MouseClassFindMorePorts$12 := __HAVOC_malloc(4);
+$DriverObject$1$4588.20$MouseClassFindMorePorts$12 := $DriverObject$1$4588.20$MouseClassFindMorePorts$121;
+$Context$2$4589.20$MouseClassFindMorePorts$12 := $Context$2$4589.20$MouseClassFindMorePorts$121;
+$Count$3$4590.20$MouseClassFindMorePorts$12 := $Count$3$4590.20$MouseClassFindMorePorts$121;
+goto label_3;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4799)
+label_1:
+call __HAVOC_free($basePortBuffer$13$4622.28$MouseClassFindMorePorts$12);
+call __HAVOC_free($basePortName$11$4620.28$MouseClassFindMorePorts$12);
+call __HAVOC_free($classDeviceObject$6$4615.28$MouseClassFindMorePorts$12);
+call __HAVOC_free($dumpData$7$4616.28$MouseClassFindMorePorts$12);
+call __HAVOC_free($file$15$4624.28$MouseClassFindMorePorts$12);
+call __HAVOC_free($fullClassName$14$4623.28$MouseClassFindMorePorts$12);
+call __HAVOC_free($fullPortName$12$4621.28$MouseClassFindMorePorts$12);
+call __HAVOC_free($numPorts$9$4618.28$MouseClassFindMorePorts$12);
+assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
+assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
+assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
+assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
+assume (forall m:int :: {Mem[T.A256UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A256UINT2][m] == old(Mem[T.A256UINT2])[m]);
+assume (forall m:int :: {Mem[T.A2UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A2UINT2][m] == old(Mem[T.A2UINT2])[m]);
+assume (forall m:int :: {Mem[T.A4UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A4UINT4][m] == old(Mem[T.A4UINT4])[m]);
+assume (forall m:int :: {Mem[T.A5UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A5UINT2][m] == old(Mem[T.A5UINT2])[m]);
+assume (forall m:int :: {Mem[T.A85CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A85CHAR][m] == old(Mem[T.A85CHAR])[m]);
+assume (forall m:int :: {Mem[T.A9UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A9UINT2][m] == old(Mem[T.A9UINT2])[m]);
+assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.BaseClassName__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.BaseClassName__GLOBALS][m] == old(Mem[T.BaseClassName__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CHAR][m] == old(Mem[T.CHAR])[m]);
+assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m] == old(Mem[T.CurrentStackLocation___unnamed_4_a7aa989c])[m]);
+assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
+assume (forall m:int :: {Mem[T.Flags__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flags__DEVICE_OBJECT][m] == old(Mem[T.Flags__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
+assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
+assume (forall m:int :: {Mem[T.InitExtension__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InitExtension__GLOBALS][m] == old(Mem[T.InitExtension__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Length__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Length__UNICODE_STRING][m] == old(Mem[T.Length__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MaximumLength__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MaximumLength__UNICODE_STRING][m] == old(Mem[T.MaximumLength__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
+assume (forall m:int :: {Mem[T.Mutex__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Mutex__GLOBALS][m] == old(Mem[T.Mutex__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.NumberLegacyPorts__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumberLegacyPorts__GLOBALS][m] == old(Mem[T.NumberLegacyPorts__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
+assume (forall m:int :: {Mem[T.PPUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PPUINT2][m] == old(Mem[T.PPUINT2])[m]);
+assume (forall m:int :: {Mem[T.PP_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_DEVICE_OBJECT][m] == old(Mem[T.PP_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.PUINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT2][m] == old(Mem[T.PUINT2])[m]);
+assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
+assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_DRIVER_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DRIVER_OBJECT][m] == old(Mem[T.P_DRIVER_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_FAST_MUTEX][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FAST_MUTEX][m] == old(Mem[T.P_FAST_MUTEX])[m]);
+assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.P_MOUSE_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_MOUSE_INPUT_DATA][m] == old(Mem[T.P_MOUSE_INPUT_DATA])[m]);
+assume (forall m:int :: {Mem[T.P_UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_UNICODE_STRING][m] == old(Mem[T.P_UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
+assume (forall m:int :: {Mem[T.PortsServiced__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PortsServiced__GLOBALS][m] == old(Mem[T.PortsServiced__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
+assume (forall m:int :: {Mem[T.UINT2][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT2][m] == old(Mem[T.UINT2])[m]);
+assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
+assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T._POOL_TYPE][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T._POOL_TYPE][m] == old(Mem[T._POOL_TYPE])[m]);
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4799)
+label_2:
+assume false;
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4613)
+label_3:
+goto label_4;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4614)
+label_4:
+goto label_5;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4614)
+label_5:
+$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := 0 ;
+goto label_6;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4615)
+label_6:
+goto label_7;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4615)
+label_7:
+Mem[T.P_DEVICE_OBJECT] := Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12 := 0];
+goto label_8;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4616)
+label_8:
+goto label_9;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4617)
+label_9:
+goto label_10;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4618)
+label_10:
+goto label_11;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4619)
+label_11:
+goto label_12;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4620)
+label_12:
+goto label_13;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4621)
+label_13:
+goto label_14;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4622)
+label_14:
+goto label_15;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4623)
+label_15:
+goto label_16;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4623)
+label_16:
+Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12 := 0];
+goto label_17;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4624)
+label_17:
+goto label_18;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4626)
+label_18:
+call __PREfastPagedCode ();
+goto label_21;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4628)
+label_21:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12) := 0];
+goto label_22;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4630)
+label_22:
+// ignoring intrinsic intrinsic.memset
+havoc $result.memset$4630.4$1$;
+goto label_25;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4631)
+label_25:
+Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := $basePortBuffer$13$4622.28$MouseClassFindMorePorts$12];
+goto label_26;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4632)
+label_26:
+Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := 0];
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4633)
+label_27:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := 512];
+goto label_28;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4640)
+label_28:
+call RtlCopyUnicodeString ($basePortName$11$4620.28$MouseClassFindMorePorts$12, BaseClassName__GLOBALS(Globals));
+goto label_31;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4641)
+label_31:
+tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT( Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12)], 10, 1) ;
+Mem[T.Length__UNICODE_STRING] := Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12) := tempBoogie0];
+goto label_35;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4642)
+label_32:
+call $result.RtlAppendUnicodeToString$4642.28$2$ := RtlAppendUnicodeToString ($basePortName$11$4620.28$MouseClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$3$);
+goto label_36;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4642)
+label_35:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$3$ := havoc_stringTemp ;
+goto label_32;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4647)
+label_36:
+call RtlInitUnicodeString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, 0);
+goto label_39;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4649)
+label_39:
+Mem[T.MaximumLength__UNICODE_STRING] := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12) := PLUS(PLUS(18, 1, Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12)]), 1, 2)];
+goto label_43;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4653)
+label_40:
+call $result.ExAllocatePoolWithTag$4653.0$4$ := ExAllocatePoolWithTag (1, $ExAllocatePoolWithTag.arg.2$5$, 1131377997);
+goto label_44;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4653)
+label_43:
+$ExAllocatePoolWithTag.arg.2$5$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] ;
+goto label_40;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4653)
+label_44:
+Mem[T.Buffer__UNICODE_STRING] := Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12) := $result.ExAllocatePoolWithTag$4653.0$4$];
+goto label_45;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4656)
+label_45:
+goto label_45_true , label_45_false ;
+
+
+label_45_true :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] != 0);
+goto label_57;
+
+
+label_45_false :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] == 0);
+goto label_49;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4658)
+label_46:
+// skip MouDebugPrint
+goto label_50;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4658)
+label_49:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$6$ := havoc_stringTemp ;
+goto label_46;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4663)
+label_50:
+Mem[T.UINT4] := Mem[T.UINT4][PLUS($dumpData$7$4616.28$MouseClassFindMorePorts$12, 4, 0) := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)]];
+goto label_51;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4664)
+label_51:
+call MouseClassLogError ($DriverObject$1$4588.20$MouseClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 20008, -1073741823, 1, $dumpData$7$4616.28$MouseClassFindMorePorts$12, 0);
+goto label_156;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4675)
+label_54:
+// ignoring intrinsic intrinsic.memset
+havoc $result.memset$4675.4$7$;
+goto label_61;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4675)
+label_57:
+$memset.arg.3$8$ := Mem[T.MaximumLength__UNICODE_STRING][MaximumLength__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] ;
+goto label_54;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4676)
+label_58:
+call $result.RtlAppendUnicodeToString$4676.28$9$ := RtlAppendUnicodeToString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$10$);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4676)
+label_61:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$10$ := havoc_stringTemp ;
+goto label_58;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4677)
+label_62:
+call $result.RtlAppendUnicodeToString$4677.28$11$ := RtlAppendUnicodeToString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($basePortName$11$4620.28$MouseClassFindMorePorts$12)]);
+goto label_68;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4678)
+label_65:
+call $result.RtlAppendUnicodeToString$4678.28$12$ := RtlAppendUnicodeToString ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, $RtlAppendUnicodeToString.arg.2$13$);
+goto label_69;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4678)
+label_68:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAppendUnicodeToString.arg.2$13$ := havoc_stringTemp ;
+goto label_65;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4680)
+label_69:
+call $result.MouDeterminePortsServiced$4680.29$14$ := MouDeterminePortsServiced ($basePortName$11$4620.28$MouseClassFindMorePorts$12, $numPorts$9$4618.28$MouseClassFindMorePorts$12);
+goto label_72;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4687)
+label_72:
+$i$8$4617.28$MouseClassFindMorePorts$12 := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals)] ;
+goto label_73;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4687)
+label_73:
+$successfulCreates$10$4619.28$MouseClassFindMorePorts$12 := 0 ;
+goto label_74;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4688)
+label_74:
+// loop entry initialization...
+LOOP_74_alloc := alloc;
+LOOP_74_Mem := Mem;
+LOOP_74_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_74_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_74_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_74_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_74_head;
+
+
+label_74_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+assume(forall f:int :: {alloc[Base(f)]} LOOP_74_alloc[Base(f)] == UNALLOCATED || LOOP_74_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_74_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_74_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_SPIN_LOCK[r]} (SetTrue()[r]) || LOOP_74_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_74_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_74_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_74_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (SetTrue()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_74_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_74_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (SetTrue()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_74_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+goto label_74_true , label_74_false ;
+
+
+label_74_true :
+assume ($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
+goto label_75;
+
+
+label_74_false :
+assume !($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.PortsServiced__GLOBALS][PortsServiced__GLOBALS(Globals)]);
+goto label_155;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4688)
+label_75:
+goto label_75_true , label_75_false ;
+
+
+label_75_true :
+assume ($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4618.28$MouseClassFindMorePorts$12]);
+goto label_76;
+
+
+label_75_false :
+assume !($i$8$4617.28$MouseClassFindMorePorts$12 < Mem[T.UINT4][$numPorts$9$4618.28$MouseClassFindMorePorts$12]);
+goto label_155;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4698)
+label_76:
+Mem[T.UINT2] := Mem[T.UINT2][PLUS(Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)], 2, MINUS_BOTH_PTR_OR_BOTH_INT( BINARY_BOTH_INT(Mem[T.Length__UNICODE_STRING][Length__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)], 2), 1, 1)) := PLUS(48, 1, $i$8$4617.28$MouseClassFindMorePorts$12)];
+goto label_77;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4700)
+label_77:
+goto label_77_true , label_77_false ;
+
+
+label_77_true :
+assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] != 0);
+goto label_78;
+
+
+label_77_false :
+assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] == 0);
+goto label_82;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4701)
+label_78:
+call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], 0);
+goto label_81;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4702)
+label_81:
+Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12 := 0];
+goto label_82;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4708)
+label_82:
+call $result.MouCreateClassObject$4708.37$15$ := MouCreateClassObject ($DriverObject$1$4588.20$MouseClassFindMorePorts$12, InitExtension__GLOBALS(Globals), $classDeviceObject$6$4615.28$MouseClassFindMorePorts$12, $fullClassName$14$4623.28$MouseClassFindMorePorts$12, 1);
+goto label_85;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4708)
+label_85:
+$status$4$4613.28$MouseClassFindMorePorts$12 := $result.MouCreateClassObject$4708.37$15$ ;
+goto label_86;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4714)
+label_86:
+goto label_86_true , label_86_false ;
+
+
+label_86_true :
+assume (0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
+goto label_90;
+
+
+label_86_false :
+assume !(0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
+goto label_87;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4715)
+label_87:
+call MouseClassLogError ($DriverObject$1$4588.20$MouseClassFindMorePorts$12, BOOGIE_LARGE_INT_3221553153, 20008, $status$4$4613.28$MouseClassFindMorePorts$12, 0, 0, 0);
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4725)
+label_90:
+$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])] ;
+goto label_91;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4726)
+label_91:
+Mem[T.PnP__DEVICE_EXTENSION] := Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
+goto label_92;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4731)
+label_92:
+assume (Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]);
+call $result.IoGetDeviceObjectPointer$4731.42$16$ := IoGetDeviceObjectPointer ($fullPortName$12$4621.28$MouseClassFindMorePorts$12, 128, $file$15$4624.28$MouseClassFindMorePorts$12, TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12));
+Mem[T.TopPort__DEVICE_EXTENSION] := Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.P_DEVICE_OBJECT][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
+goto label_95;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4731)
+label_95:
+$status$4$4613.28$MouseClassFindMorePorts$12 := $result.IoGetDeviceObjectPointer$4731.42$16$ ;
+goto label_96;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4736)
+label_96:
+goto label_96_true , label_96_false ;
+
+
+label_96_true :
+assume ($status$4$4613.28$MouseClassFindMorePorts$12 != 0);
+goto label_97;
+
+
+label_96_false :
+assume ($status$4$4613.28$MouseClassFindMorePorts$12 == 0);
+goto label_108;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
+label_97:
+goto label_97_true , label_97_false ;
+
+
+label_97_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] != 0);
+goto label_98;
+
+
+label_97_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == 0);
+goto label_104;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
+label_98:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)], 0);
+goto label_101;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
+label_101:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
+label_102:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
+goto label_103;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
+label_103:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
+goto label_104;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
+label_104:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]);
+goto label_107;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4738)
+label_107:
+$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := 0 ;
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4742)
+label_108:
+Mem[T.StackSize__DEVICE_OBJECT] := Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12]) := PLUS(1, 1, Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])])];
+goto label_109;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4743)
+label_109:
+call $result.MouseAddDeviceEx$4743.34$17$ := MouseAddDeviceEx ($deviceExtension$5$4614.28$MouseClassFindMorePorts$12, Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12]);
+goto label_112;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4743)
+label_112:
+$status$4$4613.28$MouseClassFindMorePorts$12 := $result.MouseAddDeviceEx$4743.34$17$ ;
+goto label_113;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4744)
+label_113:
+assume (forall r:int :: {BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)),r)} (POW2(r) && POW2(128) && r != 128) ==> (BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])],r)!= 0 <==> BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)),r)!= 0));
+assume (BIT_BAND(BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)),128) == 0);
+tempBoogie0 := BIT_BAND(Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12])], BIT_BNOT(128)) ;
+Mem[T.Flags__DEVICE_OBJECT] := Mem[T.Flags__DEVICE_OBJECT][Flags__DEVICE_OBJECT(Mem[T.P_DEVICE_OBJECT][$classDeviceObject$6$4615.28$MouseClassFindMorePorts$12]) := tempBoogie0];
+goto label_114;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4746)
+label_114:
+goto label_114_true , label_114_false ;
+
+
+label_114_true :
+assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] != 0);
+goto label_115;
+
+
+label_114_false :
+assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] == 0);
+goto label_119;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4747)
+label_115:
+call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], 0);
+goto label_118;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4748)
+label_118:
+Mem[T.PUINT2] := Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12 := 0];
+goto label_119;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4751)
+label_119:
+goto label_119_true , label_119_false ;
+
+
+label_119_true :
+assume (0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
+goto label_150;
+
+
+label_119_false :
+assume !(0 <= $status$4$4613.28$MouseClassFindMorePorts$12);
+goto label_120;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4752)
+label_120:
+goto label_120_true , label_120_false ;
+
+
+label_120_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_124;
+
+
+label_120_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_121;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4753)
+label_121:
+goto label_121_true , label_121_false ;
+
+
+label_121_true :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] != 0);
+goto label_122;
+
+
+label_121_false :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == 0);
+goto label_135;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4754)
+label_122:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
+goto label_123;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4755)
+label_123:
+Mem[T.File__DEVICE_EXTENSION] := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
+goto label_135;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4759)
+label_124:
+goto label_125;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4761)
+label_125:
+call ExAcquireFastMutex (Mutex__GLOBALS(Globals));
+goto label_128;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4763)
+label_128:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12 := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]))]];
+goto label_129;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4764)
+label_129:
+Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])) := 0];
+goto label_130;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4765)
+label_130:
+Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])) := 1];
+goto label_131;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4766)
+label_131:
+Mem[T.Port__PORT] := Mem[T.Port__PORT][Port__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)])) := 0];
+goto label_132;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4768)
+label_132:
+call ExReleaseFastMutex (Mutex__GLOBALS(Globals));
+goto label_135;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4771)
+label_135:
+goto label_135_true , label_135_false ;
+
+
+label_135_true :
+assume (Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12] != 0);
+goto label_136;
+
+
+label_135_false :
+assume (Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12] == 0);
+goto label_139;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4772)
+label_136:
+call $result.ObfDereferenceObject$4772.16$18$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$15$4624.28$MouseClassFindMorePorts$12]);
+goto label_139;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
+label_139:
+goto label_139_true , label_139_false ;
+
+
+label_139_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] != 0);
+goto label_140;
+
+
+label_139_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)] == 0);
+goto label_146;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
+label_140:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)], 0);
+goto label_143;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
+label_143:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := 0];
+goto label_144;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
+label_144:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
+goto label_145;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
+label_145:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]];
+goto label_146;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
+label_146:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12)]);
+goto label_149;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4775)
+label_149:
+$deviceExtension$5$4614.28$MouseClassFindMorePorts$12 := 0 ;
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4782)
+label_150:
+call InsertTailList (LegacyDeviceList__GLOBALS(Globals), Link__DEVICE_EXTENSION($deviceExtension$5$4614.28$MouseClassFindMorePorts$12));
+goto label_153;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4783)
+label_153:
+$successfulCreates$10$4619.28$MouseClassFindMorePorts$12 := PLUS($successfulCreates$10$4619.28$MouseClassFindMorePorts$12, 1, 1) ;
+goto label_154;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4689)
+label_154:
+$i$8$4617.28$MouseClassFindMorePorts$12 := PLUS($i$8$4617.28$MouseClassFindMorePorts$12, 1, 1) ;
+goto label_74_head;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4786)
+label_155:
+tempBoogie0 := PLUS(Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals)], 1, $successfulCreates$10$4619.28$MouseClassFindMorePorts$12) ;
+Mem[T.NumberLegacyPorts__GLOBALS] := Mem[T.NumberLegacyPorts__GLOBALS][NumberLegacyPorts__GLOBALS(Globals) := tempBoogie0];
+goto label_156;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4792)
+label_156:
+goto label_156_true , label_156_false ;
+
+
+label_156_true :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] != 0);
+goto label_157;
+
+
+label_156_false :
+assume (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)] == 0);
+goto label_160;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4793)
+label_157:
+call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING($fullPortName$12$4621.28$MouseClassFindMorePorts$12)], 0);
+goto label_160;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4796)
+label_160:
+goto label_160_true , label_160_false ;
+
+
+label_160_true :
+assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] != 0);
+goto label_161;
+
+
+label_160_false :
+assume (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12] == 0);
+goto label_1;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(4797)
+label_161:
+call ExFreePoolWithTag (Mem[T.PUINT2][$fullClassName$14$4623.28$MouseClassFindMorePorts$12], 0);
+goto label_1;
+
+}
+
diff --git a/Test/havoc0/MouseClassUnload.bpl b/Test/havoc0/MouseClassUnload.bpl
index 97f92fe5..fae1e9b1 100644
--- a/Test/havoc0/MouseClassUnload.bpl
+++ b/Test/havoc0/MouseClassUnload.bpl
@@ -1,3371 +1,3371 @@
-// RUN: %boogie -monomorphize "%s" > "%t"
-// RUN: %diff success.expect "%t"
-type byte, name;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function SetTrue() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-/*
-function AtLeast(int, int) returns ([int]bool);
-function ModEqual(int, int, int) returns (bool);
-axiom(forall n:int, x:int :: ModEqual(n,x,x));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
-axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
-axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
-axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-*/
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int :: SetTrue()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name, m:[name][int]int) returns (bool);
-function Values(t:name, m:[name][int]int) returns ([int]bool);
-function T.Ptr(t:name) returns (name);
-
-axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
-
-axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
-axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
-
-axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
- (HasType(v, t, m1) <==> HasType(v, t, m2)));
-
-// Field declarations
-
-const unique T.Guid_WMIGUIDREGINFO:name;
-const unique T.InstanceCount_WMIGUIDREGINFO:name;
-const unique T.Flags_WMIGUIDREGINFO:name;
-const unique T.OperationID__ACCESS_STATE:name;
-const unique T.SecurityEvaluated__ACCESS_STATE:name;
-const unique T.GenerateAudit__ACCESS_STATE:name;
-const unique T.GenerateOnClose__ACCESS_STATE:name;
-const unique T.PrivilegesAllocated__ACCESS_STATE:name;
-const unique T.Flags__ACCESS_STATE:name;
-const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
-const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
-const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
-const unique T.SubjectSecurityContext__ACCESS_STATE:name;
-const unique T.SecurityDescriptor__ACCESS_STATE:name;
-const unique T.AuxData__ACCESS_STATE:name;
-const unique T.Privileges__ACCESS_STATE:name;
-const unique T.AuditPrivileges__ACCESS_STATE:name;
-const unique T.ObjectName__ACCESS_STATE:name;
-const unique T.ObjectTypeName__ACCESS_STATE:name;
-const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
-const unique T.Count__CM_RESOURCE_LIST:name;
-const unique T.List__CM_RESOURCE_LIST:name;
-const unique T.Size__DEVICE_CAPABILITIES:name;
-const unique T.Version__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
-const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
-const unique T.LockSupported__DEVICE_CAPABILITIES:name;
-const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.Removable__DEVICE_CAPABILITIES:name;
-const unique T.DockDevice__DEVICE_CAPABILITIES:name;
-const unique T.UniqueID__DEVICE_CAPABILITIES:name;
-const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
-const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
-const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
-const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
-const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
-const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
-const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
-const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
-const unique T.Reserved__DEVICE_CAPABILITIES:name;
-const unique T.Address__DEVICE_CAPABILITIES:name;
-const unique T.UINumber__DEVICE_CAPABILITIES:name;
-const unique T.DeviceState__DEVICE_CAPABILITIES:name;
-const unique T.SystemWake__DEVICE_CAPABILITIES:name;
-const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
-const unique T.D1Latency__DEVICE_CAPABILITIES:name;
-const unique T.D2Latency__DEVICE_CAPABILITIES:name;
-const unique T.D3Latency__DEVICE_CAPABILITIES:name;
-const unique T.Self__DEVICE_EXTENSION:name;
-const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
-const unique T.TopPort__DEVICE_EXTENSION:name;
-const unique T.PDO__DEVICE_EXTENSION:name;
-const unique T.RemoveLock__DEVICE_EXTENSION:name;
-const unique T.PnP__DEVICE_EXTENSION:name;
-const unique T.Started__DEVICE_EXTENSION:name;
-const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
-const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
-const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
-const unique T.InputCount__DEVICE_EXTENSION:name;
-const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
-const unique T.InputData__DEVICE_EXTENSION:name;
-const unique T.DataIn__DEVICE_EXTENSION:name;
-const unique T.DataOut__DEVICE_EXTENSION:name;
-const unique T.MouseAttributes__DEVICE_EXTENSION:name;
-const unique T.SpinLock__DEVICE_EXTENSION:name;
-const unique T.ReadQueue__DEVICE_EXTENSION:name;
-const unique T.SequenceNumber__DEVICE_EXTENSION:name;
-const unique T.DeviceState__DEVICE_EXTENSION:name;
-const unique T.SystemState__DEVICE_EXTENSION:name;
-const unique T.UnitId__DEVICE_EXTENSION:name;
-const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
-const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
-const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
-const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
-const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
-const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
-const unique T.Link__DEVICE_EXTENSION:name;
-const unique T.File__DEVICE_EXTENSION:name;
-const unique T.Enabled__DEVICE_EXTENSION:name;
-const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
-const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
-const unique T.Type__DEVICE_OBJECT:name;
-const unique T.Size__DEVICE_OBJECT:name;
-const unique T.ReferenceCount__DEVICE_OBJECT:name;
-const unique T.DriverObject__DEVICE_OBJECT:name;
-const unique T.NextDevice__DEVICE_OBJECT:name;
-const unique T.AttachedDevice__DEVICE_OBJECT:name;
-const unique T.CurrentIrp__DEVICE_OBJECT:name;
-const unique T.Timer__DEVICE_OBJECT:name;
-const unique T.Flags__DEVICE_OBJECT:name;
-const unique T.Characteristics__DEVICE_OBJECT:name;
-const unique T.Vpb__DEVICE_OBJECT:name;
-const unique T.DeviceExtension__DEVICE_OBJECT:name;
-const unique T.DeviceType__DEVICE_OBJECT:name;
-const unique T.StackSize__DEVICE_OBJECT:name;
-const unique T.Queue__DEVICE_OBJECT:name;
-const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
-const unique T.DeviceQueue__DEVICE_OBJECT:name;
-const unique T.Dpc__DEVICE_OBJECT:name;
-const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
-const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
-const unique T.DeviceLock__DEVICE_OBJECT:name;
-const unique T.SectorSize__DEVICE_OBJECT:name;
-const unique T.Spare1__DEVICE_OBJECT:name;
-const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
-const unique T.Reserved__DEVICE_OBJECT:name;
-const unique T.Type__DEVOBJ_EXTENSION:name;
-const unique T.Size__DEVOBJ_EXTENSION:name;
-const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
-const unique T.__unnamed_4_c9b2e921__DISPATCHER_HEADER:name;
-const unique T.SignalState__DISPATCHER_HEADER:name;
-const unique T.WaitListHead__DISPATCHER_HEADER:name;
-const unique T.DriverObject__DRIVER_EXTENSION:name;
-const unique T.AddDevice__DRIVER_EXTENSION:name;
-const unique T.Count__DRIVER_EXTENSION:name;
-const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
-const unique T.Type__DRIVER_OBJECT:name;
-const unique T.Size__DRIVER_OBJECT:name;
-const unique T.DeviceObject__DRIVER_OBJECT:name;
-const unique T.Flags__DRIVER_OBJECT:name;
-const unique T.DriverStart__DRIVER_OBJECT:name;
-const unique T.DriverSize__DRIVER_OBJECT:name;
-const unique T.DriverSection__DRIVER_OBJECT:name;
-const unique T.DriverExtension__DRIVER_OBJECT:name;
-const unique T.DriverName__DRIVER_OBJECT:name;
-const unique T.HardwareDatabase__DRIVER_OBJECT:name;
-const unique T.FastIoDispatch__DRIVER_OBJECT:name;
-const unique T.DriverInit__DRIVER_OBJECT:name;
-const unique T.DriverStartIo__DRIVER_OBJECT:name;
-const unique T.DriverUnload__DRIVER_OBJECT:name;
-const unique T.MajorFunction__DRIVER_OBJECT:name;
-const unique T.SystemResourcesList__ERESOURCE:name;
-const unique T.OwnerTable__ERESOURCE:name;
-const unique T.ActiveCount__ERESOURCE:name;
-const unique T.Flag__ERESOURCE:name;
-const unique T.SharedWaiters__ERESOURCE:name;
-const unique T.ExclusiveWaiters__ERESOURCE:name;
-const unique T.OwnerEntry__ERESOURCE:name;
-const unique T.ActiveEntries__ERESOURCE:name;
-const unique T.ContentionCount__ERESOURCE:name;
-const unique T.NumberOfSharedWaiters__ERESOURCE:name;
-const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
-const unique T.__unnamed_4_46b62f69__ERESOURCE:name;
-const unique T.SpinLock__ERESOURCE:name;
-const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
-const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
-const unique T.FastIoRead__FAST_IO_DISPATCH:name;
-const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
-const unique T.FastIoLock__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
-const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
-const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
-const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
-const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
-const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlRead__FAST_IO_DISPATCH:name;
-const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
-const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
-const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
-const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
-const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
-const unique T.Count__FAST_MUTEX:name;
-const unique T.Owner__FAST_MUTEX:name;
-const unique T.Contention__FAST_MUTEX:name;
-const unique T.Gate__FAST_MUTEX:name;
-const unique T.OldIrql__FAST_MUTEX:name;
-const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
-const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
-const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
-const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
-const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.Type__FILE_OBJECT:name;
-const unique T.Size__FILE_OBJECT:name;
-const unique T.DeviceObject__FILE_OBJECT:name;
-const unique T.Vpb__FILE_OBJECT:name;
-const unique T.FsContext__FILE_OBJECT:name;
-const unique T.FsContext2__FILE_OBJECT:name;
-const unique T.SectionObjectPointer__FILE_OBJECT:name;
-const unique T.PrivateCacheMap__FILE_OBJECT:name;
-const unique T.FinalStatus__FILE_OBJECT:name;
-const unique T.RelatedFileObject__FILE_OBJECT:name;
-const unique T.LockOperation__FILE_OBJECT:name;
-const unique T.DeletePending__FILE_OBJECT:name;
-const unique T.ReadAccess__FILE_OBJECT:name;
-const unique T.WriteAccess__FILE_OBJECT:name;
-const unique T.DeleteAccess__FILE_OBJECT:name;
-const unique T.SharedRead__FILE_OBJECT:name;
-const unique T.SharedWrite__FILE_OBJECT:name;
-const unique T.SharedDelete__FILE_OBJECT:name;
-const unique T.Flags__FILE_OBJECT:name;
-const unique T.FileName__FILE_OBJECT:name;
-const unique T.CurrentByteOffset__FILE_OBJECT:name;
-const unique T.Waiters__FILE_OBJECT:name;
-const unique T.Busy__FILE_OBJECT:name;
-const unique T.LastLock__FILE_OBJECT:name;
-const unique T.Lock__FILE_OBJECT:name;
-const unique T.Event__FILE_OBJECT:name;
-const unique T.CompletionContext__FILE_OBJECT:name;
-const unique T.IrpListLock__FILE_OBJECT:name;
-const unique T.IrpList__FILE_OBJECT:name;
-const unique T.FileObjectExtension__FILE_OBJECT:name;
-const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
-const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
-const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
-const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
-const unique T.Directory__FILE_STANDARD_INFORMATION:name;
-const unique T.Debug__GLOBALS:name;
-const unique T.GrandMaster__GLOBALS:name;
-const unique T.AssocClassList__GLOBALS:name;
-const unique T.NumAssocClass__GLOBALS:name;
-const unique T.Opens__GLOBALS:name;
-const unique T.NumberLegacyPorts__GLOBALS:name;
-const unique T.Mutex__GLOBALS:name;
-const unique T.ConnectOneClassToOnePort__GLOBALS:name;
-const unique T.PortsServiced__GLOBALS:name;
-const unique T.InitExtension__GLOBALS:name;
-const unique T.RegistryPath__GLOBALS:name;
-const unique T.BaseClassName__GLOBALS:name;
-const unique T.BaseClassBuffer__GLOBALS:name;
-const unique T.LegacyDeviceList__GLOBALS:name;
-const unique T.Data1__GUID:name;
-const unique T.Data2__GUID:name;
-const unique T.Data3__GUID:name;
-const unique T.Data4__GUID:name;
-const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
-const unique T.Control__INITIAL_PRIVILEGE_SET:name;
-const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
-const unique T.Size__INTERFACE:name;
-const unique T.Version__INTERFACE:name;
-const unique T.Context__INTERFACE:name;
-const unique T.InterfaceReference__INTERFACE:name;
-const unique T.InterfaceDereference__INTERFACE:name;
-const unique T.Port__IO_COMPLETION_CONTEXT:name;
-const unique T.Key__IO_COMPLETION_CONTEXT:name;
-const unique T.Common__IO_REMOVE_LOCK:name;
-const unique T.Dbg__IO_REMOVE_LOCK:name;
-const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
-const unique T.Version__IO_RESOURCE_LIST:name;
-const unique T.Revision__IO_RESOURCE_LIST:name;
-const unique T.Count__IO_RESOURCE_LIST:name;
-const unique T.Descriptors__IO_RESOURCE_LIST:name;
-const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
-const unique T.AccessState__IO_SECURITY_CONTEXT:name;
-const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
-const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
-const unique T.MajorFunction__IO_STACK_LOCATION:name;
-const unique T.MinorFunction__IO_STACK_LOCATION:name;
-const unique T.Flags__IO_STACK_LOCATION:name;
-const unique T.Control__IO_STACK_LOCATION:name;
-const unique T.Parameters__IO_STACK_LOCATION:name;
-const unique T.DeviceObject__IO_STACK_LOCATION:name;
-const unique T.FileObject__IO_STACK_LOCATION:name;
-const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
-const unique T.Context__IO_STACK_LOCATION:name;
-const unique T.__unnamed_4_16aff58e__IO_STATUS_BLOCK:name;
-const unique T.Information__IO_STATUS_BLOCK:name;
-const unique T.Type__IRP:name;
-const unique T.Size__IRP:name;
-const unique T.MdlAddress__IRP:name;
-const unique T.Flags__IRP:name;
-const unique T.AssociatedIrp__IRP:name;
-const unique T.ThreadListEntry__IRP:name;
-const unique T.IoStatus__IRP:name;
-const unique T.RequestorMode__IRP:name;
-const unique T.PendingReturned__IRP:name;
-const unique T.StackCount__IRP:name;
-const unique T.CurrentLocation__IRP:name;
-const unique T.Cancel__IRP:name;
-const unique T.CancelIrql__IRP:name;
-const unique T.ApcEnvironment__IRP:name;
-const unique T.AllocationFlags__IRP:name;
-const unique T.UserIosb__IRP:name;
-const unique T.UserEvent__IRP:name;
-const unique T.Overlay__IRP:name;
-const unique T.CancelRoutine__IRP:name;
-const unique T.UserBuffer__IRP:name;
-const unique T.Tail__IRP:name;
-const unique T.Type__KAPC:name;
-const unique T.SpareByte0__KAPC:name;
-const unique T.Size__KAPC:name;
-const unique T.SpareByte1__KAPC:name;
-const unique T.SpareLong0__KAPC:name;
-const unique T.Thread__KAPC:name;
-const unique T.ApcListEntry__KAPC:name;
-const unique T.KernelRoutine__KAPC:name;
-const unique T.RundownRoutine__KAPC:name;
-const unique T.NormalRoutine__KAPC:name;
-const unique T.NormalContext__KAPC:name;
-const unique T.SystemArgument1__KAPC:name;
-const unique T.SystemArgument2__KAPC:name;
-const unique T.ApcStateIndex__KAPC:name;
-const unique T.ApcMode__KAPC:name;
-const unique T.Inserted__KAPC:name;
-const unique T.Type__KDEVICE_QUEUE:name;
-const unique T.Size__KDEVICE_QUEUE:name;
-const unique T.DeviceListHead__KDEVICE_QUEUE:name;
-const unique T.Lock__KDEVICE_QUEUE:name;
-const unique T.Busy__KDEVICE_QUEUE:name;
-const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
-const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
-const unique T.Type__KDPC:name;
-const unique T.Importance__KDPC:name;
-const unique T.Number__KDPC:name;
-const unique T.DpcListEntry__KDPC:name;
-const unique T.DeferredRoutine__KDPC:name;
-const unique T.DeferredContext__KDPC:name;
-const unique T.SystemArgument1__KDPC:name;
-const unique T.SystemArgument2__KDPC:name;
-const unique T.DpcData__KDPC:name;
-const unique T.Header__KEVENT:name;
-const unique T.Header__KSEMAPHORE:name;
-const unique T.Limit__KSEMAPHORE:name;
-const unique T.__unnamed_8_8684a3e7__LARGE_INTEGER:name;
-const unique T.u__LARGE_INTEGER:name;
-const unique T.QuadPart__LARGE_INTEGER:name;
-const unique T.Flink__LIST_ENTRY:name;
-const unique T.Blink__LIST_ENTRY:name;
-const unique T.LowPart__LUID:name;
-const unique T.HighPart__LUID:name;
-const unique T.Luid__LUID_AND_ATTRIBUTES:name;
-const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
-const unique T.Next__MDL:name;
-const unique T.Size__MDL:name;
-const unique T.MdlFlags__MDL:name;
-const unique T.Process__MDL:name;
-const unique T.MappedSystemVa__MDL:name;
-const unique T.StartVa__MDL:name;
-const unique T.ByteCount__MDL:name;
-const unique T.ByteOffset__MDL:name;
-const unique T.MouseIdentifier__MOUSE_ATTRIBUTES:name;
-const unique T.NumberOfButtons__MOUSE_ATTRIBUTES:name;
-const unique T.SampleRate__MOUSE_ATTRIBUTES:name;
-const unique T.InputDataQueueLength__MOUSE_ATTRIBUTES:name;
-const unique T.UnitId__MOUSE_INPUT_DATA:name;
-const unique T.Flags__MOUSE_INPUT_DATA:name;
-const unique T.__unnamed_4_9c11ed91__MOUSE_INPUT_DATA:name;
-const unique T.RawButtons__MOUSE_INPUT_DATA:name;
-const unique T.LastX__MOUSE_INPUT_DATA:name;
-const unique T.LastY__MOUSE_INPUT_DATA:name;
-const unique T.ExtraInformation__MOUSE_INPUT_DATA:name;
-const unique T.OwnerThread__OWNER_ENTRY:name;
-const unique T.__unnamed_4_c1e23b02__OWNER_ENTRY:name;
-const unique T.File__PORT:name;
-const unique T.Port__PORT:name;
-const unique T.Enabled__PORT:name;
-const unique T.Reserved__PORT:name;
-const unique T.Free__PORT:name;
-const unique T.SequenceD1__POWER_SEQUENCE:name;
-const unique T.SequenceD2__POWER_SEQUENCE:name;
-const unique T.SequenceD3__POWER_SEQUENCE:name;
-const unique T.SystemState__POWER_STATE:name;
-const unique T.DeviceState__POWER_STATE:name;
-const unique T.PrivilegeCount__PRIVILEGE_SET:name;
-const unique T.Control__PRIVILEGE_SET:name;
-const unique T.Privilege__PRIVILEGE_SET:name;
-const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
-const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
-const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
-const unique T.__unnamed_4_b4f5a780__SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T.Length__UNICODE_STRING:name;
-const unique T.MaximumLength__UNICODE_STRING:name;
-const unique T.Buffer__UNICODE_STRING:name;
-const unique T.Type__VPB:name;
-const unique T.Size__VPB:name;
-const unique T.Flags__VPB:name;
-const unique T.VolumeLabelLength__VPB:name;
-const unique T.DeviceObject__VPB:name;
-const unique T.RealDevice__VPB:name;
-const unique T.SerialNumber__VPB:name;
-const unique T.ReferenceCount__VPB:name;
-const unique T.VolumeLabel__VPB:name;
-const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
-const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
-const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
-const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
-const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
-const unique T.GuidCount__WMILIB_CONTEXT:name;
-const unique T.GuidList__WMILIB_CONTEXT:name;
-const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
-const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
-const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
-const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
-const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
-const unique T.Start___unnamed_12_06b9ee6e:name;
-const unique T.Length48___unnamed_12_06b9ee6e:name;
-const unique T.Start___unnamed_12_0882bd02:name;
-const unique T.Length64___unnamed_12_0882bd02:name;
-const unique T.__unnamed_12_2e80217b___unnamed_12_264d0dab:name;
-const unique T.Raw___unnamed_12_2e80217b:name;
-const unique T.Translated___unnamed_12_2e80217b:name;
-const unique T.Data___unnamed_12_5cc7ace2:name;
-const unique T.Channel___unnamed_12_6374506e:name;
-const unique T.Port___unnamed_12_6374506e:name;
-const unique T.Reserved1___unnamed_12_6374506e:name;
-const unique T.Priority___unnamed_12_68a4278e:name;
-const unique T.Reserved1___unnamed_12_68a4278e:name;
-const unique T.Reserved2___unnamed_12_68a4278e:name;
-const unique T.Generic___unnamed_12_79ed2653:name;
-const unique T.Port___unnamed_12_79ed2653:name;
-const unique T.Interrupt___unnamed_12_79ed2653:name;
-const unique T.MessageInterrupt___unnamed_12_79ed2653:name;
-const unique T.Memory___unnamed_12_79ed2653:name;
-const unique T.Dma___unnamed_12_79ed2653:name;
-const unique T.DevicePrivate___unnamed_12_79ed2653:name;
-const unique T.BusNumber___unnamed_12_79ed2653:name;
-const unique T.DeviceSpecificData___unnamed_12_79ed2653:name;
-const unique T.Memory40___unnamed_12_79ed2653:name;
-const unique T.Memory48___unnamed_12_79ed2653:name;
-const unique T.Memory64___unnamed_12_79ed2653:name;
-const unique T.Start___unnamed_12_7da594c0:name;
-const unique T.Length40___unnamed_12_7da594c0:name;
-const unique T.Start___unnamed_12_9873e05d:name;
-const unique T.Length___unnamed_12_9873e05d:name;
-const unique T.DataSize___unnamed_12_9cc8cebc:name;
-const unique T.Reserved1___unnamed_12_9cc8cebc:name;
-const unique T.Reserved2___unnamed_12_9cc8cebc:name;
-const unique T.Start___unnamed_12_b98da82e:name;
-const unique T.Length___unnamed_12_b98da82e:name;
-const unique T.Level___unnamed_12_c2880e88:name;
-const unique T.Vector___unnamed_12_c2880e88:name;
-const unique T.Affinity___unnamed_12_c2880e88:name;
-const unique T.Start___unnamed_12_c49ab31a:name;
-const unique T.Length___unnamed_12_c49ab31a:name;
-const unique T.ListEntry___unnamed_12_c6ed93f3:name;
-const unique T.__unnamed_4_a7aa989c___unnamed_12_c6ed93f3:name;
-const unique T.Data___unnamed_12_ced61554:name;
-const unique T.Reserved___unnamed_12_d9c44df5:name;
-const unique T.MessageCount___unnamed_12_d9c44df5:name;
-const unique T.Vector___unnamed_12_d9c44df5:name;
-const unique T.Affinity___unnamed_12_d9c44df5:name;
-const unique T.Start___unnamed_12_db3dcbfc:name;
-const unique T.Length___unnamed_12_db3dcbfc:name;
-const unique T.Reserved___unnamed_12_db3dcbfc:name;
-const unique T.Level___unnamed_12_fb26b3fc:name;
-const unique T.Vector___unnamed_12_fb26b3fc:name;
-const unique T.Affinity___unnamed_12_fb26b3fc:name;
-const unique T.OutputBufferLength___unnamed_16_22e4d054:name;
-const unique T.InputBufferLength___unnamed_16_22e4d054:name;
-const unique T.IoControlCode___unnamed_16_22e4d054:name;
-const unique T.Type3InputBuffer___unnamed_16_22e4d054:name;
-const unique T.Create___unnamed_16_39b626ad:name;
-const unique T.Read___unnamed_16_39b626ad:name;
-const unique T.Write___unnamed_16_39b626ad:name;
-const unique T.QueryDirectory___unnamed_16_39b626ad:name;
-const unique T.NotifyDirectory___unnamed_16_39b626ad:name;
-const unique T.QueryFile___unnamed_16_39b626ad:name;
-const unique T.SetFile___unnamed_16_39b626ad:name;
-const unique T.QueryEa___unnamed_16_39b626ad:name;
-const unique T.SetEa___unnamed_16_39b626ad:name;
-const unique T.QueryVolume___unnamed_16_39b626ad:name;
-const unique T.SetVolume___unnamed_16_39b626ad:name;
-const unique T.FileSystemControl___unnamed_16_39b626ad:name;
-const unique T.LockControl___unnamed_16_39b626ad:name;
-const unique T.DeviceIoControl___unnamed_16_39b626ad:name;
-const unique T.QuerySecurity___unnamed_16_39b626ad:name;
-const unique T.SetSecurity___unnamed_16_39b626ad:name;
-const unique T.MountVolume___unnamed_16_39b626ad:name;
-const unique T.VerifyVolume___unnamed_16_39b626ad:name;
-const unique T.Scsi___unnamed_16_39b626ad:name;
-const unique T.QueryQuota___unnamed_16_39b626ad:name;
-const unique T.SetQuota___unnamed_16_39b626ad:name;
-const unique T.QueryDeviceRelations___unnamed_16_39b626ad:name;
-const unique T.QueryInterface___unnamed_16_39b626ad:name;
-const unique T.DeviceCapabilities___unnamed_16_39b626ad:name;
-const unique T.FilterResourceRequirements___unnamed_16_39b626ad:name;
-const unique T.ReadWriteConfig___unnamed_16_39b626ad:name;
-const unique T.SetLock___unnamed_16_39b626ad:name;
-const unique T.QueryId___unnamed_16_39b626ad:name;
-const unique T.QueryDeviceText___unnamed_16_39b626ad:name;
-const unique T.UsageNotification___unnamed_16_39b626ad:name;
-const unique T.WaitWake___unnamed_16_39b626ad:name;
-const unique T.PowerSequence___unnamed_16_39b626ad:name;
-const unique T.Power___unnamed_16_39b626ad:name;
-const unique T.StartDevice___unnamed_16_39b626ad:name;
-const unique T.WMI___unnamed_16_39b626ad:name;
-const unique T.Others___unnamed_16_39b626ad:name;
-const unique T.WhichSpace___unnamed_16_56c011d7:name;
-const unique T.Buffer___unnamed_16_56c011d7:name;
-const unique T.Offset___unnamed_16_56c011d7:name;
-const unique T.Length___unnamed_16_56c011d7:name;
-const unique T.DeviceQueueEntry___unnamed_16_5fed8f23:name;
-const unique T.__unnamed_16_ae643f17___unnamed_16_5fed8f23:name;
-const unique T.Length___unnamed_16_6be9abe0:name;
-const unique T.FileName___unnamed_16_6be9abe0:name;
-const unique T.FileInformationClass___unnamed_16_6be9abe0:name;
-const unique T.FileIndex___unnamed_16_6be9abe0:name;
-const unique T.InterfaceType___unnamed_16_78879a38:name;
-const unique T.Size___unnamed_16_78879a38:name;
-const unique T.Version___unnamed_16_78879a38:name;
-const unique T.Interface___unnamed_16_78879a38:name;
-const unique T.InterfaceSpecificData___unnamed_16_78879a38:name;
-const unique T.Length___unnamed_16_804a2f24:name;
-const unique T.StartSid___unnamed_16_804a2f24:name;
-const unique T.SidList___unnamed_16_804a2f24:name;
-const unique T.SidListLength___unnamed_16_804a2f24:name;
-const unique T.Argument1___unnamed_16_8586693f:name;
-const unique T.Argument2___unnamed_16_8586693f:name;
-const unique T.Argument3___unnamed_16_8586693f:name;
-const unique T.Argument4___unnamed_16_8586693f:name;
-const unique T.Length___unnamed_16_8831e65f:name;
-const unique T.Key___unnamed_16_8831e65f:name;
-const unique T.ByteOffset___unnamed_16_8831e65f:name;
-const unique T.SecurityContext___unnamed_16_8c2d663a:name;
-const unique T.Options___unnamed_16_8c2d663a:name;
-const unique T.FileAttributes___unnamed_16_8c2d663a:name;
-const unique T.ShareAccess___unnamed_16_8c2d663a:name;
-const unique T.EaLength___unnamed_16_8c2d663a:name;
-const unique T.Length___unnamed_16_913b9a7a:name;
-const unique T.Key___unnamed_16_913b9a7a:name;
-const unique T.ByteOffset___unnamed_16_913b9a7a:name;
-const unique T.OutputBufferLength___unnamed_16_94d1d1c7:name;
-const unique T.InputBufferLength___unnamed_16_94d1d1c7:name;
-const unique T.FsControlCode___unnamed_16_94d1d1c7:name;
-const unique T.Type3InputBuffer___unnamed_16_94d1d1c7:name;
-const unique T.Length___unnamed_16_a2fab4da:name;
-const unique T.FileInformationClass___unnamed_16_a2fab4da:name;
-const unique T.FileObject___unnamed_16_a2fab4da:name;
-const unique T.__unnamed_4_a7d0864c___unnamed_16_a2fab4da:name;
-const unique T.DriverContext___unnamed_16_ae643f17:name;
-const unique T.Length___unnamed_16_c1b29316:name;
-const unique T.Key___unnamed_16_c1b29316:name;
-const unique T.ByteOffset___unnamed_16_c1b29316:name;
-const unique T.ProviderId___unnamed_16_cbd53ed4:name;
-const unique T.DataPath___unnamed_16_cbd53ed4:name;
-const unique T.BufferSize___unnamed_16_cbd53ed4:name;
-const unique T.Buffer___unnamed_16_cbd53ed4:name;
-const unique T.Length___unnamed_16_db70db6e:name;
-const unique T.MinBusNumber___unnamed_16_db70db6e:name;
-const unique T.MaxBusNumber___unnamed_16_db70db6e:name;
-const unique T.Reserved___unnamed_16_db70db6e:name;
-const unique T.Length___unnamed_16_ef4b6307:name;
-const unique T.EaList___unnamed_16_ef4b6307:name;
-const unique T.EaListLength___unnamed_16_ef4b6307:name;
-const unique T.EaIndex___unnamed_16_ef4b6307:name;
-const unique T.__unnamed_4_b060dea6___unnamed_16_fdda1f62:name;
-const unique T.Type___unnamed_16_fdda1f62:name;
-const unique T.State___unnamed_16_fdda1f62:name;
-const unique T.ShutdownType___unnamed_16_fdda1f62:name;
-const unique T.Lock___unnamed_1_1394de4b:name;
-const unique T.Abandoned___unnamed_1_2bb39c56:name;
-const unique T.Absolute___unnamed_1_2bb39c56:name;
-const unique T.NpxIrql___unnamed_1_2bb39c56:name;
-const unique T.Signalling___unnamed_1_2bb39c56:name;
-const unique T.Inserted___unnamed_1_9fa0583a:name;
-const unique T.DebugActive___unnamed_1_9fa0583a:name;
-const unique T.DpcActive___unnamed_1_9fa0583a:name;
-const unique T.Size___unnamed_1_e30779f5:name;
-const unique T.Hand___unnamed_1_e30779f5:name;
-const unique T.MinimumVector___unnamed_20_83d468e4:name;
-const unique T.MaximumVector___unnamed_20_83d468e4:name;
-const unique T.AffinityPolicy___unnamed_20_83d468e4:name;
-const unique T.PriorityPolicy___unnamed_20_83d468e4:name;
-const unique T.TargetedProcessors___unnamed_20_83d468e4:name;
-const unique T.Length40___unnamed_24_035931da:name;
-const unique T.Alignment40___unnamed_24_035931da:name;
-const unique T.MinimumAddress___unnamed_24_035931da:name;
-const unique T.MaximumAddress___unnamed_24_035931da:name;
-const unique T.Length___unnamed_24_38e128db:name;
-const unique T.Alignment___unnamed_24_38e128db:name;
-const unique T.MinimumAddress___unnamed_24_38e128db:name;
-const unique T.MaximumAddress___unnamed_24_38e128db:name;
-const unique T.Length___unnamed_24_9500ea34:name;
-const unique T.Alignment___unnamed_24_9500ea34:name;
-const unique T.MinimumAddress___unnamed_24_9500ea34:name;
-const unique T.MaximumAddress___unnamed_24_9500ea34:name;
-const unique T.Length___unnamed_24_9734802c:name;
-const unique T.Alignment___unnamed_24_9734802c:name;
-const unique T.MinimumAddress___unnamed_24_9734802c:name;
-const unique T.MaximumAddress___unnamed_24_9734802c:name;
-const unique T.Length64___unnamed_24_af62813f:name;
-const unique T.Alignment64___unnamed_24_af62813f:name;
-const unique T.MinimumAddress___unnamed_24_af62813f:name;
-const unique T.MaximumAddress___unnamed_24_af62813f:name;
-const unique T.Length48___unnamed_24_c0555099:name;
-const unique T.Alignment48___unnamed_24_c0555099:name;
-const unique T.MinimumAddress___unnamed_24_c0555099:name;
-const unique T.MaximumAddress___unnamed_24_c0555099:name;
-const unique T.Port___unnamed_24_d7c4ec3a:name;
-const unique T.Memory___unnamed_24_d7c4ec3a:name;
-const unique T.Interrupt___unnamed_24_d7c4ec3a:name;
-const unique T.Dma___unnamed_24_d7c4ec3a:name;
-const unique T.Generic___unnamed_24_d7c4ec3a:name;
-const unique T.DevicePrivate___unnamed_24_d7c4ec3a:name;
-const unique T.BusNumber___unnamed_24_d7c4ec3a:name;
-const unique T.ConfigData___unnamed_24_d7c4ec3a:name;
-const unique T.Memory40___unnamed_24_d7c4ec3a:name;
-const unique T.Memory48___unnamed_24_d7c4ec3a:name;
-const unique T.Memory64___unnamed_24_d7c4ec3a:name;
-const unique T.ReplaceIfExists___unnamed_2_196a7f56:name;
-const unique T.AdvanceOnly___unnamed_2_196a7f56:name;
-const unique T.__unnamed_16_5fed8f23___unnamed_40_a0414182:name;
-const unique T.Thread___unnamed_40_a0414182:name;
-const unique T.AuxiliaryBuffer___unnamed_40_a0414182:name;
-const unique T.__unnamed_12_c6ed93f3___unnamed_40_a0414182:name;
-const unique T.OriginalFileObject___unnamed_40_a0414182:name;
-const unique T.ListEntry___unnamed_40_d90496f4:name;
-const unique T.Wcb___unnamed_40_d90496f4:name;
-const unique T.InitialPrivilegeSet___unnamed_44_a7026dca:name;
-const unique T.PrivilegeSet___unnamed_44_a7026dca:name;
-const unique T.Overlay___unnamed_48_c1da9fa5:name;
-const unique T.Apc___unnamed_48_c1da9fa5:name;
-const unique T.CompletionKey___unnamed_48_c1da9fa5:name;
-const unique T.PowerSequence___unnamed_4_0510b147:name;
-const unique T.Length___unnamed_4_0a569078:name;
-const unique T.Status___unnamed_4_16aff58e:name;
-const unique T.Pointer___unnamed_4_16aff58e:name;
-const unique T.IdType___unnamed_4_40bf8e34:name;
-const unique T.Address___unnamed_4_46b62f69:name;
-const unique T.CreatorBackTraceIndex___unnamed_4_46b62f69:name;
-const unique T.Capabilities___unnamed_4_73d46255:name;
-const unique T.Srb___unnamed_4_765e3037:name;
-const unique T.Type___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_2bb39c56___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_e30779f5___unnamed_4_846adf3f:name;
-const unique T.__unnamed_1_9fa0583a___unnamed_4_846adf3f:name;
-const unique T.PowerState___unnamed_4_8dd73d30:name;
-const unique T.Type___unnamed_4_957e0d74:name;
-const unique T.Buttons___unnamed_4_9c11ed91:name;
-const unique T.__unnamed_4_b5247f10___unnamed_4_9c11ed91:name;
-const unique T.IoResourceRequirementList___unnamed_4_a58d40c8:name;
-const unique T.CurrentStackLocation___unnamed_4_a7aa989c:name;
-const unique T.PacketType___unnamed_4_a7aa989c:name;
-const unique T.__unnamed_2_196a7f56___unnamed_4_a7d0864c:name;
-const unique T.ClusterCount___unnamed_4_a7d0864c:name;
-const unique T.DeleteHandle___unnamed_4_a7d0864c:name;
-const unique T.Length___unnamed_4_aa20b426:name;
-const unique T.UserApcRoutine___unnamed_4_ab87ddfd:name;
-const unique T.IssuingProcess___unnamed_4_ab87ddfd:name;
-const unique T.Reserved1___unnamed_4_b016b1e1:name;
-const unique T.TargetSystemState___unnamed_4_b016b1e1:name;
-const unique T.EffectiveSystemState___unnamed_4_b016b1e1:name;
-const unique T.CurrentSystemState___unnamed_4_b016b1e1:name;
-const unique T.IgnoreHibernationPath___unnamed_4_b016b1e1:name;
-const unique T.PseudoTransition___unnamed_4_b016b1e1:name;
-const unique T.Reserved2___unnamed_4_b016b1e1:name;
-const unique T.SystemContext___unnamed_4_b060dea6:name;
-const unique T.SystemPowerStateContext___unnamed_4_b060dea6:name;
-const unique T.__unnamed_4_b016b1e1___unnamed_4_b4f5a780:name;
-const unique T.ContextAsUlong___unnamed_4_b4f5a780:name;
-const unique T.ButtonFlags___unnamed_4_b5247f10:name;
-const unique T.ButtonData___unnamed_4_b5247f10:name;
-const unique T.OwnerCount___unnamed_4_c1e23b02:name;
-const unique T.TableSize___unnamed_4_c1e23b02:name;
-const unique T.__unnamed_4_846adf3f___unnamed_4_c9b2e921:name;
-const unique T.Lock___unnamed_4_c9b2e921:name;
-const unique T.MasterIrp___unnamed_4_fa7b96a7:name;
-const unique T.IrpCount___unnamed_4_fa7b96a7:name;
-const unique T.SystemBuffer___unnamed_4_fa7b96a7:name;
-const unique T.Vpb___unnamed_8_09ad2712:name;
-const unique T.DeviceObject___unnamed_8_09ad2712:name;
-const unique T.Length___unnamed_8_21ac1dba:name;
-const unique T.CompletionFilter___unnamed_8_21ac1dba:name;
-const unique T.Length___unnamed_8_27d3ab76:name;
-const unique T.FsInformationClass___unnamed_8_27d3ab76:name;
-const unique T.Vpb___unnamed_8_4289df81:name;
-const unique T.DeviceObject___unnamed_8_4289df81:name;
-const unique T.Length___unnamed_8_47b72724:name;
-const unique T.FileInformationClass___unnamed_8_47b72724:name;
-const unique T.DeviceTextType___unnamed_8_4b3e3ba3:name;
-const unique T.LocaleId___unnamed_8_4b3e3ba3:name;
-const unique T.__unnamed_4_ab87ddfd___unnamed_8_4f695993:name;
-const unique T.UserApcContext___unnamed_8_4f695993:name;
-const unique T.AllocatedResources___unnamed_8_5cfb6ca4:name;
-const unique T.AllocatedResourcesTranslated___unnamed_8_5cfb6ca4:name;
-const unique T.SecurityInformation___unnamed_8_606438c5:name;
-const unique T.Length___unnamed_8_606438c5:name;
-const unique T.MinimumChannel___unnamed_8_6ad774c0:name;
-const unique T.MaximumChannel___unnamed_8_6ad774c0:name;
-const unique T.Length___unnamed_8_805045cb:name;
-const unique T.FsInformationClass___unnamed_8_805045cb:name;
-const unique T.LowPart___unnamed_8_8684a3e7:name;
-const unique T.HighPart___unnamed_8_8684a3e7:name;
-const unique T.SecurityInformation___unnamed_8_8cc410da:name;
-const unique T.SecurityDescriptor___unnamed_8_8cc410da:name;
-const unique T.InPath___unnamed_8_a47253e0:name;
-const unique T.Reserved___unnamed_8_a47253e0:name;
-const unique T.Type___unnamed_8_a47253e0:name;
-const unique T.AsynchronousParameters___unnamed_8_bbd07f6c:name;
-const unique T.AllocationSize___unnamed_8_bbd07f6c:name;
-const unique T.LowPart___unnamed_8_c9ca8234:name;
-const unique T.HighPart___unnamed_8_c9ca8234:name;
-
-// Type declarations
-
-const unique T.A11CHAR:name;
-const unique T.A19CHAR:name;
-const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
-const unique T.A1_IO_RESOURCE_LIST:name;
-const unique T.A1_LUID_AND_ATTRIBUTES:name;
-const unique T.A256UINT2:name;
-const unique T.A28PFDRIVER_DISPATCH:name;
-const unique T.A2UCHAR:name;
-const unique T.A32UINT2:name;
-const unique T.A33CHAR:name;
-const unique T.A34CHAR:name;
-const unique T.A39CHAR:name;
-const unique T.A3UCHAR:name;
-const unique T.A3UINT4:name;
-const unique T.A3_LUID_AND_ATTRIBUTES:name;
-const unique T.A43CHAR:name;
-const unique T.A4PVOID:name;
-const unique T.A4UINT4:name;
-const unique T.A5_DEVICE_POWER_STATE:name;
-const unique T.A74CHAR:name;
-const unique T.A7_DEVICE_POWER_STATE:name;
-const unique T.A8UCHAR:name;
-const unique T.BUS_QUERY_ID_TYPE:name;
-const unique T.CHAR:name;
-const unique T.DEVICE_TEXT_TYPE:name;
-const unique T.F0:name;
-const unique T.F1:name;
-const unique T.F10:name;
-const unique T.F11:name;
-const unique T.F12:name;
-const unique T.F13:name;
-const unique T.F14:name;
-const unique T.F15:name;
-const unique T.F16:name;
-const unique T.F17:name;
-const unique T.F18:name;
-const unique T.F19:name;
-const unique T.F2:name;
-const unique T.F20:name;
-const unique T.F21:name;
-const unique T.F22:name;
-const unique T.F23:name;
-const unique T.F24:name;
-const unique T.F25:name;
-const unique T.F26:name;
-const unique T.F27:name;
-const unique T.F28:name;
-const unique T.F29:name;
-const unique T.F3:name;
-const unique T.F30:name;
-const unique T.F31:name;
-const unique T.F32:name;
-const unique T.F33:name;
-const unique T.F34:name;
-const unique T.F35:name;
-const unique T.F36:name;
-const unique T.F37:name;
-const unique T.F38:name;
-const unique T.F4:name;
-const unique T.F5:name;
-const unique T.F6:name;
-const unique T.F7:name;
-const unique T.F8:name;
-const unique T.F9:name;
-const unique T.FDRIVER_ADD_DEVICE:name;
-const unique T.FDRIVER_CANCEL:name;
-const unique T.FDRIVER_CONTROL:name;
-const unique T.FDRIVER_DISPATCH:name;
-const unique T.FDRIVER_INITIALIZE:name;
-const unique T.FDRIVER_STARTIO:name;
-const unique T.FDRIVER_UNLOAD:name;
-const unique T.FFAST_IO_ACQUIRE_FILE:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.FFAST_IO_DETACH_DEVICE:name;
-const unique T.FFAST_IO_DEVICE_CONTROL:name;
-const unique T.FFAST_IO_LOCK:name;
-const unique T.FFAST_IO_MDL_READ:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.FFAST_IO_QUERY_OPEN:name;
-const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.FFAST_IO_READ:name;
-const unique T.FFAST_IO_READ_COMPRESSED:name;
-const unique T.FFAST_IO_RELEASE_FILE:name;
-const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.FFAST_IO_UNLOCK_ALL:name;
-const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.FFAST_IO_UNLOCK_SINGLE:name;
-const unique T.FFAST_IO_WRITE:name;
-const unique T.FFAST_IO_WRITE_COMPRESSED:name;
-const unique T.FIO_COMPLETION_ROUTINE:name;
-const unique T.FKDEFERRED_ROUTINE:name;
-const unique T.INT2:name;
-const unique T.INT4:name;
-const unique T.INT8:name;
-const unique T.PA11CHAR:name;
-const unique T.PA19CHAR:name;
-const unique T.PA33CHAR:name;
-const unique T.PA34CHAR:name;
-const unique T.PA39CHAR:name;
-const unique T.PA43CHAR:name;
-const unique T.PA74CHAR:name;
-const unique T.PCHAR:name;
-const unique T.PF19:name;
-const unique T.PF21:name;
-const unique T.PF23:name;
-const unique T.PF24:name;
-const unique T.PF25:name;
-const unique T.PF33:name;
-const unique T.PF34:name;
-const unique T.PF35:name;
-const unique T.PF36:name;
-const unique T.PF37:name;
-const unique T.PF38:name;
-const unique T.PFDRIVER_ADD_DEVICE:name;
-const unique T.PFDRIVER_CANCEL:name;
-const unique T.PFDRIVER_CONTROL:name;
-const unique T.PFDRIVER_DISPATCH:name;
-const unique T.PFDRIVER_INITIALIZE:name;
-const unique T.PFDRIVER_STARTIO:name;
-const unique T.PFDRIVER_UNLOAD:name;
-const unique T.PFFAST_IO_ACQUIRE_FILE:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
-const unique T.PFFAST_IO_DETACH_DEVICE:name;
-const unique T.PFFAST_IO_DEVICE_CONTROL:name;
-const unique T.PFFAST_IO_LOCK:name;
-const unique T.PFFAST_IO_MDL_READ:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
-const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
-const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
-const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
-const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
-const unique T.PFFAST_IO_QUERY_OPEN:name;
-const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
-const unique T.PFFAST_IO_READ:name;
-const unique T.PFFAST_IO_READ_COMPRESSED:name;
-const unique T.PFFAST_IO_RELEASE_FILE:name;
-const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
-const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
-const unique T.PFFAST_IO_UNLOCK_ALL:name;
-const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
-const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
-const unique T.PFFAST_IO_WRITE:name;
-const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
-const unique T.PFIO_COMPLETION_ROUTINE:name;
-const unique T.PFKDEFERRED_ROUTINE:name;
-const unique T.PINT4:name;
-const unique T.POWER_ACTION:name;
-const unique T.PPCHAR:name;
-const unique T.PPF24:name;
-const unique T.PPP_FILE_OBJECT:name;
-const unique T.PPVOID:name;
-const unique T.PP_DEVICE_EXTENSION:name;
-const unique T.PP_DEVICE_OBJECT:name;
-const unique T.PP_DRIVER_OBJECT:name;
-const unique T.PP_ERESOURCE:name;
-const unique T.PP_FILE_OBJECT:name;
-const unique T.PP_IRP:name;
-const unique T.PP_LIST_ENTRY:name;
-const unique T.PP_MDL:name;
-const unique T.PP_PORT:name;
-const unique T.PP_UNICODE_STRING:name;
-const unique T.PUCHAR:name;
-const unique T.PUINT2:name;
-const unique T.PUINT4:name;
-const unique T.PVOID:name;
-const unique T.PWMIGUIDREGINFO:name;
-const unique T.P_ACCESS_STATE:name;
-const unique T.P_CM_RESOURCE_LIST:name;
-const unique T.P_COMPRESSED_DATA_INFO:name;
-const unique T.P_DEVICE_CAPABILITIES:name;
-const unique T.P_DEVICE_EXTENSION:name;
-const unique T.P_DEVICE_OBJECT:name;
-const unique T.P_DEVOBJ_EXTENSION:name;
-const unique T.P_DRIVER_EXTENSION:name;
-const unique T.P_DRIVER_OBJECT:name;
-const unique T.P_EPROCESS:name;
-const unique T.P_ERESOURCE:name;
-const unique T.P_ETHREAD:name;
-const unique T.P_FAST_IO_DISPATCH:name;
-const unique T.P_FILE_BASIC_INFORMATION:name;
-const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
-const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T.P_FILE_OBJECT:name;
-const unique T.P_FILE_STANDARD_INFORMATION:name;
-const unique T.P_GLOBALS:name;
-const unique T.P_GUID:name;
-const unique T.P_INTERFACE:name;
-const unique T.P_IO_COMPLETION_CONTEXT:name;
-const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T.P_IO_SECURITY_CONTEXT:name;
-const unique T.P_IO_STACK_LOCATION:name;
-const unique T.P_IO_STATUS_BLOCK:name;
-const unique T.P_IO_TIMER:name;
-const unique T.P_IRP:name;
-const unique T.P_KAPC:name;
-const unique T.P_KDPC:name;
-const unique T.P_KEVENT:name;
-const unique T.P_KSEMAPHORE:name;
-const unique T.P_KTHREAD:name;
-const unique T.P_LARGE_INTEGER:name;
-const unique T.P_LIST_ENTRY:name;
-const unique T.P_MDL:name;
-const unique T.P_MOUSE_INPUT_DATA:name;
-const unique T.P_OWNER_ENTRY:name;
-const unique T.P_PORT:name;
-const unique T.P_POWER_SEQUENCE:name;
-const unique T.P_SCSI_REQUEST_BLOCK:name;
-const unique T.P_SECTION_OBJECT_POINTERS:name;
-const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
-const unique T.P_UNICODE_STRING:name;
-const unique T.P_VPB:name;
-const unique T.UCHAR:name;
-const unique T.UINT2:name;
-const unique T.UINT4:name;
-const unique T.VOID:name;
-const unique T.WMIENABLEDISABLECONTROL:name;
-const unique T.WMIGUIDREGINFO:name;
-const unique T._ACCESS_STATE:name;
-const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
-const unique T._CM_PARTIAL_RESOURCE_LIST:name;
-const unique T._CM_RESOURCE_LIST:name;
-const unique T._COMPRESSED_DATA_INFO:name;
-const unique T._DEVICE_CAPABILITIES:name;
-const unique T._DEVICE_EXTENSION:name;
-const unique T._DEVICE_OBJECT:name;
-const unique T._DEVICE_POWER_STATE:name;
-const unique T._DEVICE_RELATION_TYPE:name;
-const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
-const unique T._DEVOBJ_EXTENSION:name;
-const unique T._DISPATCHER_HEADER:name;
-const unique T._DRIVER_EXTENSION:name;
-const unique T._DRIVER_OBJECT:name;
-const unique T._EPROCESS:name;
-const unique T._ERESOURCE:name;
-const unique T._ETHREAD:name;
-const unique T._FAST_IO_DISPATCH:name;
-const unique T._FAST_MUTEX:name;
-const unique T._FILE_BASIC_INFORMATION:name;
-const unique T._FILE_GET_QUOTA_INFORMATION:name;
-const unique T._FILE_INFORMATION_CLASS:name;
-const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
-const unique T._FILE_OBJECT:name;
-const unique T._FILE_STANDARD_INFORMATION:name;
-const unique T._FSINFOCLASS:name;
-const unique T._GLOBALS:name;
-const unique T._GUID:name;
-const unique T._INITIAL_PRIVILEGE_SET:name;
-const unique T._INTERFACE:name;
-const unique T._INTERFACE_TYPE:name;
-const unique T._IO_ALLOCATION_ACTION:name;
-const unique T._IO_COMPLETION_CONTEXT:name;
-const unique T._IO_REMOVE_LOCK:name;
-const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
-const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
-const unique T._IO_RESOURCE_DESCRIPTOR:name;
-const unique T._IO_RESOURCE_LIST:name;
-const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
-const unique T._IO_SECURITY_CONTEXT:name;
-const unique T._IO_STACK_LOCATION:name;
-const unique T._IO_STATUS_BLOCK:name;
-const unique T._IO_TIMER:name;
-const unique T._IRP:name;
-const unique T._IRQ_DEVICE_POLICY:name;
-const unique T._IRQ_PRIORITY:name;
-const unique T._KAPC:name;
-const unique T._KDEVICE_QUEUE:name;
-const unique T._KDEVICE_QUEUE_ENTRY:name;
-const unique T._KDPC:name;
-const unique T._KEVENT:name;
-const unique T._KSEMAPHORE:name;
-const unique T._KTHREAD:name;
-const unique T._LARGE_INTEGER:name;
-const unique T._LIST_ENTRY:name;
-const unique T._LUID:name;
-const unique T._LUID_AND_ATTRIBUTES:name;
-const unique T._MDL:name;
-const unique T._MOUSE_ATTRIBUTES:name;
-const unique T._MOUSE_INPUT_DATA:name;
-const unique T._OWNER_ENTRY:name;
-const unique T._PORT:name;
-const unique T._POWER_SEQUENCE:name;
-const unique T._POWER_STATE:name;
-const unique T._POWER_STATE_TYPE:name;
-const unique T._PRIVILEGE_SET:name;
-const unique T._SCSI_REQUEST_BLOCK:name;
-const unique T._SECTION_OBJECT_POINTERS:name;
-const unique T._SECURITY_IMPERSONATION_LEVEL:name;
-const unique T._SECURITY_QUALITY_OF_SERVICE:name;
-const unique T._SECURITY_SUBJECT_CONTEXT:name;
-const unique T._SYSTEM_POWER_STATE:name;
-const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
-const unique T._UNICODE_STRING:name;
-const unique T._VPB:name;
-const unique T._WAIT_CONTEXT_BLOCK:name;
-const unique T._WMILIB_CONTEXT:name;
-const unique T.__unnamed_12_06b9ee6e:name;
-const unique T.__unnamed_12_0882bd02:name;
-const unique T.__unnamed_12_264d0dab:name;
-const unique T.__unnamed_12_2e80217b:name;
-const unique T.__unnamed_12_5cc7ace2:name;
-const unique T.__unnamed_12_6374506e:name;
-const unique T.__unnamed_12_68a4278e:name;
-const unique T.__unnamed_12_79ed2653:name;
-const unique T.__unnamed_12_7da594c0:name;
-const unique T.__unnamed_12_9873e05d:name;
-const unique T.__unnamed_12_9cc8cebc:name;
-const unique T.__unnamed_12_b98da82e:name;
-const unique T.__unnamed_12_c2880e88:name;
-const unique T.__unnamed_12_c49ab31a:name;
-const unique T.__unnamed_12_c6ed93f3:name;
-const unique T.__unnamed_12_ced61554:name;
-const unique T.__unnamed_12_d9c44df5:name;
-const unique T.__unnamed_12_db3dcbfc:name;
-const unique T.__unnamed_12_fb26b3fc:name;
-const unique T.__unnamed_16_22e4d054:name;
-const unique T.__unnamed_16_39b626ad:name;
-const unique T.__unnamed_16_56c011d7:name;
-const unique T.__unnamed_16_5fed8f23:name;
-const unique T.__unnamed_16_6be9abe0:name;
-const unique T.__unnamed_16_78879a38:name;
-const unique T.__unnamed_16_804a2f24:name;
-const unique T.__unnamed_16_8586693f:name;
-const unique T.__unnamed_16_8831e65f:name;
-const unique T.__unnamed_16_8c2d663a:name;
-const unique T.__unnamed_16_913b9a7a:name;
-const unique T.__unnamed_16_94d1d1c7:name;
-const unique T.__unnamed_16_a2fab4da:name;
-const unique T.__unnamed_16_ae643f17:name;
-const unique T.__unnamed_16_c1b29316:name;
-const unique T.__unnamed_16_cbd53ed4:name;
-const unique T.__unnamed_16_db70db6e:name;
-const unique T.__unnamed_16_ef4b6307:name;
-const unique T.__unnamed_16_fdda1f62:name;
-const unique T.__unnamed_1_1394de4b:name;
-const unique T.__unnamed_1_2bb39c56:name;
-const unique T.__unnamed_1_9fa0583a:name;
-const unique T.__unnamed_1_e30779f5:name;
-const unique T.__unnamed_20_83d468e4:name;
-const unique T.__unnamed_24_035931da:name;
-const unique T.__unnamed_24_38e128db:name;
-const unique T.__unnamed_24_9500ea34:name;
-const unique T.__unnamed_24_9734802c:name;
-const unique T.__unnamed_24_af62813f:name;
-const unique T.__unnamed_24_c0555099:name;
-const unique T.__unnamed_24_d7c4ec3a:name;
-const unique T.__unnamed_2_196a7f56:name;
-const unique T.__unnamed_40_a0414182:name;
-const unique T.__unnamed_40_d90496f4:name;
-const unique T.__unnamed_44_a7026dca:name;
-const unique T.__unnamed_48_c1da9fa5:name;
-const unique T.__unnamed_4_0510b147:name;
-const unique T.__unnamed_4_0a569078:name;
-const unique T.__unnamed_4_16aff58e:name;
-const unique T.__unnamed_4_40bf8e34:name;
-const unique T.__unnamed_4_46b62f69:name;
-const unique T.__unnamed_4_73d46255:name;
-const unique T.__unnamed_4_765e3037:name;
-const unique T.__unnamed_4_846adf3f:name;
-const unique T.__unnamed_4_8dd73d30:name;
-const unique T.__unnamed_4_957e0d74:name;
-const unique T.__unnamed_4_9c11ed91:name;
-const unique T.__unnamed_4_a58d40c8:name;
-const unique T.__unnamed_4_a7aa989c:name;
-const unique T.__unnamed_4_a7d0864c:name;
-const unique T.__unnamed_4_aa20b426:name;
-const unique T.__unnamed_4_ab87ddfd:name;
-const unique T.__unnamed_4_b016b1e1:name;
-const unique T.__unnamed_4_b060dea6:name;
-const unique T.__unnamed_4_b4f5a780:name;
-const unique T.__unnamed_4_b5247f10:name;
-const unique T.__unnamed_4_c1e23b02:name;
-const unique T.__unnamed_4_c9b2e921:name;
-const unique T.__unnamed_4_fa7b96a7:name;
-const unique T.__unnamed_8_09ad2712:name;
-const unique T.__unnamed_8_21ac1dba:name;
-const unique T.__unnamed_8_27d3ab76:name;
-const unique T.__unnamed_8_4289df81:name;
-const unique T.__unnamed_8_47b72724:name;
-const unique T.__unnamed_8_4b3e3ba3:name;
-const unique T.__unnamed_8_4f695993:name;
-const unique T.__unnamed_8_5cfb6ca4:name;
-const unique T.__unnamed_8_606438c5:name;
-const unique T.__unnamed_8_6ad774c0:name;
-const unique T.__unnamed_8_805045cb:name;
-const unique T.__unnamed_8_8684a3e7:name;
-const unique T.__unnamed_8_8cc410da:name;
-const unique T.__unnamed_8_a47253e0:name;
-const unique T.__unnamed_8_bbd07f6c:name;
-const unique T.__unnamed_8_c9ca8234:name;
-
-function AssocClassList__GLOBALS(int) returns (int);
-function AssocClassList__GLOBALSInv(int) returns (int);
-function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
-function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
-axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
-function Buffer__UNICODE_STRING(int) returns (int);
-function Buffer__UNICODE_STRINGInv(int) returns (int);
-function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
-function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
-
-axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
-axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
-function DataIn__DEVICE_EXTENSION(int) returns (int);
-function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
-axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
-function DataOut__DEVICE_EXTENSION(int) returns (int);
-function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
-axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
-function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
-function Enabled__DEVICE_EXTENSION(int) returns (int);
-function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 264);
-axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 264);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1) == Enabled__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 264)} MINUS_LEFT_PTR(x, 1, 264) == Enabled__DEVICE_EXTENSIONInv(x));
-function Enabled__PORT(int) returns (int);
-function Enabled__PORTInv(int) returns (int);
-function _S_Enabled__PORT([int]bool) returns ([int]bool);
-function _S_Enabled__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Enabled__PORTInv(Enabled__PORT(x))} Enabled__PORTInv(Enabled__PORT(x)) == x);
-axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORT(Enabled__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORT(S)[x]} _S_Enabled__PORT(S)[x] <==> S[Enabled__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORTInv(S)[x]} _S_Enabled__PORTInv(S)[x] <==> S[Enabled__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORT(S)} S[x] ==> _S_Enabled__PORT(S)[Enabled__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORTInv(S)} S[x] ==> _S_Enabled__PORTInv(S)[Enabled__PORTInv(x)]);
-
-axiom (forall x:int :: {Enabled__PORT(x)} Enabled__PORT(x) == x + 8);
-axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORTInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == Enabled__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == Enabled__PORTInv(x));
-function File__DEVICE_EXTENSION(int) returns (int);
-function File__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 260);
-axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 260);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == File__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == File__DEVICE_EXTENSIONInv(x));
-function File__PORT(int) returns (int);
-function File__PORTInv(int) returns (int);
-function _S_File__PORT([int]bool) returns ([int]bool);
-function _S_File__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
-
-axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
-axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
-function Flink__LIST_ENTRY(int) returns (int);
-function Flink__LIST_ENTRYInv(int) returns (int);
-function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
-function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
-
-axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
-axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
-function Free__PORT(int) returns (int);
-function Free__PORTInv(int) returns (int);
-function _S_Free__PORT([int]bool) returns ([int]bool);
-function _S_Free__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
-
-axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
-axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
-function GrandMaster__GLOBALS(int) returns (int);
-function GrandMaster__GLOBALSInv(int) returns (int);
-function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
-function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
-function InputData__DEVICE_EXTENSION(int) returns (int);
-function InputData__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
-axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
-function LegacyDeviceList__GLOBALS(int) returns (int);
-function LegacyDeviceList__GLOBALSInv(int) returns (int);
-function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
-function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 864);
-axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 864);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1) == LegacyDeviceList__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 864)} MINUS_LEFT_PTR(x, 1, 864) == LegacyDeviceList__GLOBALSInv(x));
-function Link__DEVICE_EXTENSION(int) returns (int);
-function Link__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 252);
-axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 252);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == Link__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == Link__DEVICE_EXTENSIONInv(x));
-function NumAssocClass__GLOBALS(int) returns (int);
-function NumAssocClass__GLOBALSInv(int) returns (int);
-function _S_NumAssocClass__GLOBALS([int]bool) returns ([int]bool);
-function _S_NumAssocClass__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x))} NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x)) == x);
-axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALS(NumAssocClass__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALS(S)[x]} _S_NumAssocClass__GLOBALS(S)[x] <==> S[NumAssocClass__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALSInv(S)[x]} _S_NumAssocClass__GLOBALSInv(S)[x] <==> S[NumAssocClass__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALS(S)} S[x] ==> _S_NumAssocClass__GLOBALS(S)[NumAssocClass__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALSInv(S)} S[x] ==> _S_NumAssocClass__GLOBALSInv(S)[NumAssocClass__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {NumAssocClass__GLOBALS(x)} NumAssocClass__GLOBALS(x) == x + 12);
-axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALSInv(x) == x - 12);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == NumAssocClass__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == NumAssocClass__GLOBALSInv(x));
-function PnP__DEVICE_EXTENSION(int) returns (int);
-function PnP__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
-axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
-function Port__PORT(int) returns (int);
-function Port__PORTInv(int) returns (int);
-function _S_Port__PORT([int]bool) returns ([int]bool);
-function _S_Port__PORTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
-
-axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
-axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
-function RegistryPath__GLOBALS(int) returns (int);
-function RegistryPath__GLOBALSInv(int) returns (int);
-function _S_RegistryPath__GLOBALS([int]bool) returns ([int]bool);
-function _S_RegistryPath__GLOBALSInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x))} RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x)) == x);
-axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALS(RegistryPath__GLOBALSInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALS(S)[x]} _S_RegistryPath__GLOBALS(S)[x] <==> S[RegistryPath__GLOBALSInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALSInv(S)[x]} _S_RegistryPath__GLOBALSInv(S)[x] <==> S[RegistryPath__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALS(S)} S[x] ==> _S_RegistryPath__GLOBALS(S)[RegistryPath__GLOBALS(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALSInv(S)} S[x] ==> _S_RegistryPath__GLOBALSInv(S)[RegistryPath__GLOBALSInv(x)]);
-
-axiom (forall x:int :: {RegistryPath__GLOBALS(x)} RegistryPath__GLOBALS(x) == x + 336);
-axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALSInv(x) == x - 336);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 336, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 336, 1) == RegistryPath__GLOBALSInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 336)} MINUS_LEFT_PTR(x, 1, 336) == RegistryPath__GLOBALSInv(x));
-function Self__DEVICE_EXTENSION(int) returns (int);
-function Self__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
-function SpinLock__DEVICE_EXTENSION(int) returns (int);
-function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 152);
-axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 152);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 152)} MINUS_LEFT_PTR(x, 1, 152) == SpinLock__DEVICE_EXTENSIONInv(x));
-function StackSize__DEVICE_OBJECT(int) returns (int);
-function StackSize__DEVICE_OBJECTInv(int) returns (int);
-function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
-function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
-
-axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
-axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
-function Started__DEVICE_EXTENSION(int) returns (int);
-function Started__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
-axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
-function TopPort__DEVICE_EXTENSION(int) returns (int);
-function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
-axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
-function UnitId__DEVICE_EXTENSION(int) returns (int);
-function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 176);
-axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 176);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == UnitId__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == UnitId__DEVICE_EXTENSIONInv(x));
-function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
-function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
-function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
-
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
-axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
-
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
-axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
-axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure nondet_choice() returns (x:int);
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-var Res_DEVICE_STACK:[int]int;
-var Res_DEV_EXTN:[int]int;
-var Res_DEV_OBJ_INIT:[int]int;
-var Res_SPIN_LOCK:[int]int;
-
-
-
-////////////////////
-// Between predicate
-////////////////////
-function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
-function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
-
-
-//////////////////////////
-// Between set constructor
-//////////////////////////
-function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
-
-////////////////////////////////////////////////////
-// axioms relating ReachBetween and ReachBetweenSet
-////////////////////////////////////////////////////
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
-axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
-
-
-//////////////////////////
-// Axioms for ReachBetween
-//////////////////////////
-
-// reflexive
-axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
-
-// step
-//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
-axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
-
-// reach
-axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
-
-// cycle
-axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
-
-// sandwich
-axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
-
-// order1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
-
-// order2
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
-
-// transitive1
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
-
-// transitive2
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
-
-// transitive3
-axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
-
-// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
-// It cannot be proved using the rest of the axioms.
-axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
-
-// relation between ReachAvoiding and ReachBetween
-axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
-
-// update
-axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
- ///////////////////////////////
- // Shifts for linking fields
- ///////////////////////////////
-function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
-axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
-axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
-
-const unique Globals : int;
-axiom(Globals != 0);
-
-
-procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoAllocateIrp($StackSize$1$20453.15$IoAllocateIrp$81:int, $ChargeQuota$2$20454.17$IoAllocateIrp$81:int) returns ($result.IoAllocateIrp$20452.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
-requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
-//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
-ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
-//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
-ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
-//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
-ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
-//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure IoFreeIrp($Irp$1$21417.14$IoFreeIrp$41:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouEnableDisablePort($EnableFlag$1$504.15$MouEnableDisablePort$161:int, $Irp$2$505.15$MouEnableDisablePort$161:int, $Port$3$506.25$MouEnableDisablePort$161:int, $File$4$507.22$MouEnableDisablePort$161:int) returns ($result.MouEnableDisablePort$503.0$1$:int);
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouseClassCleanupQueue($DeviceObject$1$1052.28$MouseClassCleanupQueue$121:int, $DeviceExtension$2$1053.28$MouseClassCleanupQueue$121:int, $FileObject$3$1054.28$MouseClassCleanupQueue$121:int);
-
-//TAG: requires __resource("DEV_EXTN", DeviceExtension) == 1
-requires(Res_DEV_EXTN[$DeviceExtension$2$1053.28$MouseClassCleanupQueue$121] == 1);
-//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->WaitWakeSpinLock) == 0
-requires(Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
-//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->SpinLock) == 0
-requires(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires __resource("DEV_OBJ_INIT", DeviceObject) == 1
-requires(Res_DEV_OBJ_INIT[$DeviceObject$1$1052.28$MouseClassCleanupQueue$121] == 1);
-//TAG: ensures __resource("DEV_EXTN", DeviceExtension) == 1
-ensures(Res_DEV_EXTN[$DeviceExtension$2$1053.28$MouseClassCleanupQueue$121] == 1);
-//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->WaitWakeSpinLock) == 0
-ensures(Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
-//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->SpinLock) == 0
-ensures(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
-ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
-//TAG: ensures __preserves_resource("DEV_EXTN")
-ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
-//TAG: ensures __resource("DEV_OBJ_INIT", DeviceObject) == 1
-ensures(Res_DEV_OBJ_INIT[$DeviceObject$1$1052.28$MouseClassCleanupQueue$121] == 1);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure RemoveEntryList($Entry$1$6929.19$RemoveEntryList$41:int) returns ($result.RemoveEntryList$6928.0$1$:int);
-
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __setminus(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList)), __set(Entry)))
-ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41))) && Subset(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)))));
-//TAG: ensures Entry->Flink == __old(Entry->Flink)
-ensures(Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)] == old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, __set_empty
-ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure __PREfastPagedCode();
-
-//TAG: ensures __preserves_mem
-ensures(Mem == old(Mem));
-//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
-ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
-
-//TAG: havoc memory locations by default
-modifies Mem;
-
-
-procedure MouseClassUnload($DriverObject$1$2789.24$MouseClassUnload$41:int)
-
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-modifies alloc;
-free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Res_DEVICE_STACK;
-
-//TAG: net change in resource DEVICE_STACK only for:
-modifies Res_DEV_EXTN;
-
-//TAG: net change in resource DEV_EXTN only for:
-modifies Res_DEV_OBJ_INIT;
-
-//TAG: net change in resource DEV_OBJ_INIT only for:
-modifies Res_SPIN_LOCK;
-
-//TAG: net change in resource SPIN_LOCK only for:
-
-//TAG: havoc memory locations by default
-modifies Mem;
-{
-var havoc_stringTemp:int;
-var condVal:int;
-var $DriverObject$1$2789.24$MouseClassUnload$4 : int;
-var $IoAllocateIrp.arg.1$9$ : int;
-var $MouDebugPrint.arg.2$1$ : int;
-var $MouDebugPrint.arg.2$19$ : int;
-var $RtlAssert.arg.1$14$ : int;
-var $RtlAssert.arg.1$16$ : int;
-var $RtlAssert.arg.1$18$ : int;
-var $RtlAssert.arg.1$3$ : int;
-var $RtlAssert.arg.1$5$ : int;
-var $RtlAssert.arg.1$7$ : int;
-var $RtlAssert.arg.2$13$ : int;
-var $RtlAssert.arg.2$15$ : int;
-var $RtlAssert.arg.2$17$ : int;
-var $RtlAssert.arg.2$2$ : int;
-var $RtlAssert.arg.2$4$ : int;
-var $RtlAssert.arg.2$6$ : int;
-var $data$3$2812.22$MouseClassUnload$4 : int;
-var $enabled$6$2829.16$MouseClassUnload$4 : int;
-var $entry$2$2811.16$MouseClassUnload$4 : int;
-var $file$7$2830.21$MouseClassUnload$4 : int;
-var $i$8$2898.14$MouseClassUnload$4 : int;
-var $irp$5$2814.9$MouseClassUnload$4 : int;
-var $port$4$2813.10$MouseClassUnload$4 : int;
-var $result.IoAllocateIrp$2854.31$8$ : int;
-var $result.MouEnableDisablePort$2856.37$10$ : int;
-var $result.ObfDereferenceObject$2867.12$11$ : int;
-var $result.RemoveEntryList$2878.24$12$ : int;
-var tempBoogie0:int;
-var tempBoogie1:int;
-var tempBoogie2:int;
-var tempBoogie3:int;
-var tempBoogie4:int;
-var tempBoogie5:int;
-var tempBoogie6:int;
-var tempBoogie7:int;
-var tempBoogie8:int;
-var tempBoogie9:int;
-var tempBoogie10:int;
-var tempBoogie11:int;
-var tempBoogie12:int;
-var tempBoogie13:int;
-var tempBoogie14:int;
-var tempBoogie15:int;
-var tempBoogie16:int;
-var tempBoogie17:int;
-var tempBoogie18:int;
-var tempBoogie19:int;
-var LOOP_15_alloc:[int]name;
-var LOOP_15_Mem:[name][int]int;
-var LOOP_15_Res_DEVICE_STACK:[int]int;
-var LOOP_15_Res_DEV_EXTN:[int]int;
-var LOOP_15_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_15_Res_SPIN_LOCK:[int]int;
-var LOOP_108_alloc:[int]name;
-var LOOP_108_Mem:[name][int]int;
-var LOOP_108_Res_DEVICE_STACK:[int]int;
-var LOOP_108_Res_DEV_EXTN:[int]int;
-var LOOP_108_Res_DEV_OBJ_INIT:[int]int;
-var LOOP_108_Res_SPIN_LOCK:[int]int;
-
-
-start:
-
-assume (alloc[$DriverObject$1$2789.24$MouseClassUnload$41] != UNALLOCATED);
-call $file$7$2830.21$MouseClassUnload$4 := __HAVOC_malloc(4);
-$DriverObject$1$2789.24$MouseClassUnload$4 := $DriverObject$1$2789.24$MouseClassUnload$41;
-goto label_3;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2911)
-label_1:
-call __HAVOC_free($file$7$2830.21$MouseClassUnload$4);
-assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
-assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
-assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
-assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
-assume (forall m:int :: {Mem[T.A11CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A11CHAR][m] == old(Mem[T.A11CHAR])[m]);
-assume (forall m:int :: {Mem[T.A19CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A19CHAR][m] == old(Mem[T.A19CHAR])[m]);
-assume (forall m:int :: {Mem[T.A33CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A33CHAR][m] == old(Mem[T.A33CHAR])[m]);
-assume (forall m:int :: {Mem[T.A34CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A34CHAR][m] == old(Mem[T.A34CHAR])[m]);
-assume (forall m:int :: {Mem[T.A39CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A39CHAR][m] == old(Mem[T.A39CHAR])[m]);
-assume (forall m:int :: {Mem[T.A43CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A43CHAR][m] == old(Mem[T.A43CHAR])[m]);
-assume (forall m:int :: {Mem[T.A74CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A74CHAR][m] == old(Mem[T.A74CHAR])[m]);
-assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
-assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m] == old(Mem[T.CurrentStackLocation___unnamed_4_a7aa989c])[m]);
-assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Enabled__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__PORT][m] == old(Mem[T.Enabled__PORT])[m]);
-assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
-assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
-assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
-assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
-assume (forall m:int :: {Mem[T.NumAssocClass__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumAssocClass__GLOBALS][m] == old(Mem[T.NumAssocClass__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
-assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
-assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.P_IRP][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IRP][m] == old(Mem[T.P_IRP])[m]);
-assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
-assume (forall m:int :: {Mem[T.P_MOUSE_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_MOUSE_INPUT_DATA][m] == old(Mem[T.P_MOUSE_INPUT_DATA])[m]);
-assume (forall m:int :: {Mem[T.P_PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_PORT][m] == old(Mem[T.P_PORT])[m]);
-assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
-assume (forall m:int :: {Mem[T.RegistryPath__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RegistryPath__GLOBALS][m] == old(Mem[T.RegistryPath__GLOBALS])[m]);
-assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
-assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
-assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
-assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
-assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2911)
-label_2:
-assume false;
-return;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2811)
-label_3:
-goto label_4;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2812)
-label_4:
-goto label_5;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2813)
-label_5:
-goto label_6;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2814)
-label_6:
-goto label_7;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2818)
-label_7:
-call __PREfastPagedCode ();
-goto label_13;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2820)
-label_10:
-// skip MouDebugPrint
-goto label_14;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2820)
-label_13:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$1$ := havoc_stringTemp ;
-goto label_10;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2825)
-label_14:
-$entry$2$2811.16$MouseClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))] ;
-goto label_15;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2826)
-label_15:
-// loop entry initialization...
-LOOP_15_alloc := alloc;
-LOOP_15_Mem := Mem;
-LOOP_15_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_15_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_15_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_15_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_15_head;
-
-
-label_15_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
-assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
-//TAG: requires __setin(entry, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[$entry$2$2811.16$MouseClassUnload$4]);
-assume(forall f:int :: {alloc[Base(f)]} LOOP_15_alloc[Base(f)] == UNALLOCATED || LOOP_15_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_15_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
-assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_15_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_15_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_15_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_15_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_15_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_15_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-goto label_15_true , label_15_false ;
-
-
-label_15_true :
-assume ($entry$2$2811.16$MouseClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
-goto label_16;
-
-
-label_15_false :
-assume !($entry$2$2811.16$MouseClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
-goto label_85;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2829)
-label_16:
-goto label_17;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2829)
-label_17:
-$enabled$6$2829.16$MouseClassUnload$4 := 0 ;
-goto label_18;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2830)
-label_18:
-goto label_19;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2830)
-label_19:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4 := 0];
-goto label_20;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2832)
-label_20:
-$data$3$2812.22$MouseClassUnload$4 := MINUS_LEFT_PTR($entry$2$2811.16$MouseClassUnload$4, 1, 252) ;
-goto label_21;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
-label_21:
-goto label_21_true , label_21_false ;
-
-
-label_21_true :
-assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
-goto label_25;
-
-
-label_21_false :
-assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
-label_22:
-// skip RtlAssert
-goto label_27;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
-label_25:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$2$ := havoc_stringTemp ;
-goto label_26;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
-label_26:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$3$ := havoc_stringTemp ;
-goto label_22;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2835)
-label_27:
-goto label_27_true , label_27_false ;
-
-
-label_27_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_28;
-
-
-label_27_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_40;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2836)
-label_28:
-$port$4$2813.10$MouseClassUnload$4 := PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]) ;
-goto label_29;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
-label_29:
-goto label_29_true , label_29_false ;
-
-
-label_29_true :
-assume (Mem[T.Port__PORT][Port__PORT($port$4$2813.10$MouseClassUnload$4)] == $data$3$2812.22$MouseClassUnload$4);
-goto label_35;
-
-
-label_29_false :
-assume !(Mem[T.Port__PORT][Port__PORT($port$4$2813.10$MouseClassUnload$4)] == $data$3$2812.22$MouseClassUnload$4);
-goto label_33;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
-label_30:
-// skip RtlAssert
-goto label_35;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
-label_33:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$4$ := havoc_stringTemp ;
-goto label_34;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
-label_34:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$5$ := havoc_stringTemp ;
-goto label_30;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2839)
-label_35:
-$enabled$6$2829.16$MouseClassUnload$4 := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2813.10$MouseClassUnload$4)] ;
-goto label_36;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2840)
-label_36:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4 := Mem[T.File__PORT][File__PORT($port$4$2813.10$MouseClassUnload$4)]];
-goto label_37;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2842)
-label_37:
-Mem[T.Enabled__PORT] := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2813.10$MouseClassUnload$4) := 0];
-goto label_38;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2843)
-label_38:
-Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT($port$4$2813.10$MouseClassUnload$4) := 0];
-goto label_39;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2844)
-label_39:
-Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT($port$4$2813.10$MouseClassUnload$4) := 1];
-goto label_49;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2847)
-label_40:
-$enabled$6$2829.16$MouseClassUnload$4 := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] ;
-goto label_41;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2848)
-label_41:
-Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
-goto label_42;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
-label_42:
-goto label_42_true , label_42_false ;
-
-
-label_42_true :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
-goto label_48;
-
-
-label_42_false :
-assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
-goto label_46;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
-label_43:
-// skip RtlAssert
-goto label_48;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
-label_46:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$6$ := havoc_stringTemp ;
-goto label_47;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
-label_47:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$7$ := havoc_stringTemp ;
-goto label_43;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2850)
-label_48:
-Mem[T.Enabled__DEVICE_EXTENSION] := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := 0];
-goto label_49;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2853)
-label_49:
-goto label_49_true , label_49_false ;
-
-
-label_49_true :
-assume ($enabled$6$2829.16$MouseClassUnload$4 != 0);
-goto label_53;
-
-
-label_49_false :
-assume ($enabled$6$2829.16$MouseClassUnload$4 == 0);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2854)
-label_50:
-call $result.IoAllocateIrp$2854.31$8$ := IoAllocateIrp ($IoAllocateIrp.arg.1$9$, 0);
-goto label_54;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2854)
-label_53:
-$IoAllocateIrp.arg.1$9$ := PLUS(Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)])], 1, 1) ;
-goto label_50;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2854)
-label_54:
-$irp$5$2814.9$MouseClassUnload$4 := $result.IoAllocateIrp$2854.31$8$ ;
-goto label_55;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2855)
-label_55:
-goto label_55_true , label_55_false ;
-
-
-label_55_true :
-assume ($irp$5$2814.9$MouseClassUnload$4 != 0);
-goto label_56;
-
-
-label_55_false :
-assume ($irp$5$2814.9$MouseClassUnload$4 == 0);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2856)
-label_56:
-call $result.MouEnableDisablePort$2856.37$10$ := MouEnableDisablePort (0, $irp$5$2814.9$MouseClassUnload$4, $data$3$2812.22$MouseClassUnload$4, $file$7$2830.21$MouseClassUnload$4);
-goto label_59;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2857)
-label_59:
-call IoFreeIrp ($irp$5$2814.9$MouseClassUnload$4);
-goto label_62;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2866)
-label_62:
-goto label_62_true , label_62_false ;
-
-
-label_62_true :
-assume (Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4] != 0);
-goto label_63;
-
-
-label_62_false :
-assume (Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4] == 0);
-goto label_66;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2867)
-label_63:
-call $result.ObfDereferenceObject$2867.12$11$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4]);
-goto label_66;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2874)
-label_66:
-goto label_66_true , label_66_false ;
-
-
-label_66_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_70;
-
-
-label_66_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_67;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2875)
-label_67:
-call MouseClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], $data$3$2812.22$MouseClassUnload$4, 0);
-goto label_70;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2878)
-label_70:
-call $result.RemoveEntryList$2878.24$12$ := RemoveEntryList (Link__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4));
-goto label_73;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2879)
-label_73:
-$entry$2$2811.16$MouseClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($entry$2$2811.16$MouseClassUnload$4)] ;
-goto label_74;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
-label_74:
-goto label_74_true , label_74_false ;
-
-
-label_74_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
-goto label_75;
-
-
-label_74_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
-goto label_81;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
-label_75:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], 0);
-goto label_78;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
-label_78:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := 0];
-goto label_79;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
-label_79:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
-goto label_80;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
-label_80:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
-goto label_81;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
-label_81:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]);
-goto label_84;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
-label_84:
-$data$3$2812.22$MouseClassUnload$4 := 0 ;
-goto label_15_head;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2887)
-label_85:
-goto label_85_true , label_85_false ;
-
-
-label_85_true :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
-goto label_86;
-
-
-label_85_false :
-assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2888)
-label_86:
-$data$3$2812.22$MouseClassUnload$4 := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] ;
-goto label_87;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2889)
-label_87:
-Mem[T.GrandMaster__GLOBALS] := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals) := 0];
-goto label_88;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2891)
-label_88:
-call MouseClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], $data$3$2812.22$MouseClassUnload$4, 0);
-goto label_91;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
-label_91:
-goto label_91_true , label_91_false ;
-
-
-label_91_true :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
-goto label_92;
-
-
-label_91_false :
-assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
-goto label_98;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
-label_92:
-call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], 0);
-goto label_95;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
-label_95:
-Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := 0];
-goto label_96;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
-label_96:
-Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
-goto label_97;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
-label_97:
-Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
-goto label_98;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
-label_98:
-call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]);
-goto label_101;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
-label_101:
-$data$3$2812.22$MouseClassUnload$4 := 0 ;
-goto label_102;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2895)
-label_102:
-call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(RegistryPath__GLOBALS(Globals))], 0);
-goto label_105;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2896)
-label_105:
-goto label_105_true , label_105_false ;
-
-
-label_105_true :
-assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] != 0);
-goto label_106;
-
-
-label_105_false :
-assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] == 0);
-goto label_134;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2898)
-label_106:
-goto label_107;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2900)
-label_107:
-$i$8$2898.14$MouseClassUnload$4 := 0 ;
-goto label_108;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2900)
-label_108:
-// loop entry initialization...
-LOOP_108_alloc := alloc;
-LOOP_108_Mem := Mem;
-LOOP_108_Res_DEVICE_STACK := Res_DEVICE_STACK;
-LOOP_108_Res_DEV_EXTN := Res_DEV_EXTN;
-LOOP_108_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
-LOOP_108_Res_SPIN_LOCK := Res_SPIN_LOCK;
-goto label_108_head;
-
-
-label_108_head:
-// loop head assertions...
-//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
-assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
-//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
-assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
-//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
-assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
-//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
-assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
-//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
-assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
-//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
-assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
-//TAG: requires __preserves_resource("DEV_OBJ_INIT")
-assert(Res_DEV_OBJ_INIT == LOOP_108_Res_DEV_OBJ_INIT);
-//TAG: requires __preserves_resource("DEV_EXTN")
-assert(Res_DEV_EXTN == LOOP_108_Res_DEV_EXTN);
-//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
-assert(Mem[T.Flink__LIST_ENTRY] == LOOP_108_Mem[T.Flink__LIST_ENTRY]);
-assume(forall f:int :: {alloc[Base(f)]} LOOP_108_alloc[Base(f)] == UNALLOCATED || LOOP_108_alloc[Base(f)] == alloc[Base(f)]);
-
-
-//TAG: net change in resource DEVICE_STACK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_108_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
-
-//TAG: net change in resource DEV_EXTN only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_108_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
-
-//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_108_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
-
-//TAG: net change in resource SPIN_LOCK only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_108_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
-//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_108_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
-//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_108_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
-//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_108_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
-//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Self__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Started__DEVICE_EXTENSION][_m]));
-//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_108_Mem[T.GrandMaster__GLOBALS][_m]));
-//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
-assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_108_Mem[T.P_DEVICE_OBJECT][_m]));
-
-// end loop head assertions
-
-goto label_108_true , label_108_false ;
-
-
-label_108_true :
-assume ($i$8$2898.14$MouseClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
-goto label_109;
-
-
-label_108_false :
-assume !($i$8$2898.14$MouseClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
-goto label_128;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
-label_109:
-goto label_109_true , label_109_false ;
-
-
-label_109_true :
-assume (Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 1);
-goto label_115;
-
-
-label_109_false :
-assume !(Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 1);
-goto label_113;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
-label_110:
-// skip RtlAssert
-goto label_115;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
-label_113:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$13$ := havoc_stringTemp ;
-goto label_114;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
-label_114:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$14$ := havoc_stringTemp ;
-goto label_110;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
-label_115:
-goto label_115_true , label_115_false ;
-
-
-label_115_true :
-assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] != 0);
-goto label_119;
-
-
-label_115_false :
-assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 0);
-goto label_121;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
-label_116:
-// skip RtlAssert
-goto label_121;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
-label_119:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$15$ := havoc_stringTemp ;
-goto label_120;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
-label_120:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$16$ := havoc_stringTemp ;
-goto label_116;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
-label_121:
-goto label_121_true , label_121_false ;
-
-
-label_121_true :
-assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] != 0);
-goto label_125;
-
-
-label_121_false :
-assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 0);
-goto label_127;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
-label_122:
-// skip RtlAssert
-goto label_127;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
-label_125:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.2$17$ := havoc_stringTemp ;
-goto label_126;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
-label_126:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$RtlAssert.arg.1$18$ := havoc_stringTemp ;
-goto label_122;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2900)
-label_127:
-$i$8$2898.14$MouseClassUnload$4 := PLUS($i$8$2898.14$MouseClassUnload$4, 1, 1) ;
-goto label_108_head;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2907)
-label_128:
-call ExFreePoolWithTag (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 0);
-goto label_134;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2910)
-label_131:
-// skip MouDebugPrint
-goto label_1;
-
-
-// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2910)
-label_134:
-call havoc_stringTemp := __HAVOC_malloc(1);
-$MouDebugPrint.arg.2$19$ := havoc_stringTemp ;
-goto label_131;
-
-}
-
+// RUN: %boogie -monomorphize "%s" > "%t"
+// RUN: %diff success.expect "%t"
+type byte, name;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function SetTrue() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+/*
+function AtLeast(int, int) returns ([int]bool);
+function ModEqual(int, int, int) returns (bool);
+axiom(forall n:int, x:int :: ModEqual(n,x,x));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
+axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
+axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
+axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+*/
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int :: SetTrue()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]}{Union(S,T),S[x]}{Union(S,T),T[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]}{Intersection(S,T),S[x]}{Intersection(S,T),T[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]}{Difference(S,T),S[x]}{Difference(S,T),T[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Subset(S,T)}{T[x],Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x],Disjoint(S,T)}{T[x],Disjoint(S,T)} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f,y), f[x]} Inverse(f,y)[x] ==> f[x] == y);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name, m:[name][int]int) returns (bool);
+function Values(t:name, m:[name][int]int) returns ([int]bool);
+function T.Ptr(t:name) returns (name);
+
+axiom(forall v:int, t:name, m:[name][int]int :: {Values(t, m)[v]} Values(t, m)[v] ==> HasType(v, t, m));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, t, m), Values(t, m)} HasType(v, t, m) ==> Values(t, m)[v]);
+
+axiom(forall a:int, t:name :: {Match(a, T.Ptr(t))} Match(a, T.Ptr(t)) <==> Field(a) == T.Ptr(t));
+axiom(forall v:int, t:name, m:[name][int]int :: {HasType(v, T.Ptr(t), m)} HasType(v, T.Ptr(t), m) <==> (v == 0 || (v > 0 && Match(v, t))));
+
+axiom(forall v:int, t:name, m1:[name][int]int, m2:[name][int]int :: {HasType(v, t, m1), HasType(v, t, m2)}
+ (HasType(v, t, m1) <==> HasType(v, t, m2)));
+
+// Field declarations
+
+const unique T.Guid_WMIGUIDREGINFO:name;
+const unique T.InstanceCount_WMIGUIDREGINFO:name;
+const unique T.Flags_WMIGUIDREGINFO:name;
+const unique T.OperationID__ACCESS_STATE:name;
+const unique T.SecurityEvaluated__ACCESS_STATE:name;
+const unique T.GenerateAudit__ACCESS_STATE:name;
+const unique T.GenerateOnClose__ACCESS_STATE:name;
+const unique T.PrivilegesAllocated__ACCESS_STATE:name;
+const unique T.Flags__ACCESS_STATE:name;
+const unique T.RemainingDesiredAccess__ACCESS_STATE:name;
+const unique T.PreviouslyGrantedAccess__ACCESS_STATE:name;
+const unique T.OriginalDesiredAccess__ACCESS_STATE:name;
+const unique T.SubjectSecurityContext__ACCESS_STATE:name;
+const unique T.SecurityDescriptor__ACCESS_STATE:name;
+const unique T.AuxData__ACCESS_STATE:name;
+const unique T.Privileges__ACCESS_STATE:name;
+const unique T.AuditPrivileges__ACCESS_STATE:name;
+const unique T.ObjectName__ACCESS_STATE:name;
+const unique T.ObjectTypeName__ACCESS_STATE:name;
+const unique T.InterfaceType__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.BusNumber__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.PartialResourceList__CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.u__CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Revision__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.PartialDescriptors__CM_PARTIAL_RESOURCE_LIST:name;
+const unique T.Count__CM_RESOURCE_LIST:name;
+const unique T.List__CM_RESOURCE_LIST:name;
+const unique T.Size__DEVICE_CAPABILITIES:name;
+const unique T.Version__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD1__DEVICE_CAPABILITIES:name;
+const unique T.DeviceD2__DEVICE_CAPABILITIES:name;
+const unique T.LockSupported__DEVICE_CAPABILITIES:name;
+const unique T.EjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.Removable__DEVICE_CAPABILITIES:name;
+const unique T.DockDevice__DEVICE_CAPABILITIES:name;
+const unique T.UniqueID__DEVICE_CAPABILITIES:name;
+const unique T.SilentInstall__DEVICE_CAPABILITIES:name;
+const unique T.RawDeviceOK__DEVICE_CAPABILITIES:name;
+const unique T.SurpriseRemovalOK__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD0__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD1__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD2__DEVICE_CAPABILITIES:name;
+const unique T.WakeFromD3__DEVICE_CAPABILITIES:name;
+const unique T.HardwareDisabled__DEVICE_CAPABILITIES:name;
+const unique T.NonDynamic__DEVICE_CAPABILITIES:name;
+const unique T.WarmEjectSupported__DEVICE_CAPABILITIES:name;
+const unique T.NoDisplayInUI__DEVICE_CAPABILITIES:name;
+const unique T.Reserved__DEVICE_CAPABILITIES:name;
+const unique T.Address__DEVICE_CAPABILITIES:name;
+const unique T.UINumber__DEVICE_CAPABILITIES:name;
+const unique T.DeviceState__DEVICE_CAPABILITIES:name;
+const unique T.SystemWake__DEVICE_CAPABILITIES:name;
+const unique T.DeviceWake__DEVICE_CAPABILITIES:name;
+const unique T.D1Latency__DEVICE_CAPABILITIES:name;
+const unique T.D2Latency__DEVICE_CAPABILITIES:name;
+const unique T.D3Latency__DEVICE_CAPABILITIES:name;
+const unique T.Self__DEVICE_EXTENSION:name;
+const unique T.TrueClassDevice__DEVICE_EXTENSION:name;
+const unique T.TopPort__DEVICE_EXTENSION:name;
+const unique T.PDO__DEVICE_EXTENSION:name;
+const unique T.RemoveLock__DEVICE_EXTENSION:name;
+const unique T.PnP__DEVICE_EXTENSION:name;
+const unique T.Started__DEVICE_EXTENSION:name;
+const unique T.OkayToLogOverflow__DEVICE_EXTENSION:name;
+const unique T.WaitWakeSpinLock__DEVICE_EXTENSION:name;
+const unique T.TrustedSubsystemCount__DEVICE_EXTENSION:name;
+const unique T.InputCount__DEVICE_EXTENSION:name;
+const unique T.SymbolicLinkName__DEVICE_EXTENSION:name;
+const unique T.InputData__DEVICE_EXTENSION:name;
+const unique T.DataIn__DEVICE_EXTENSION:name;
+const unique T.DataOut__DEVICE_EXTENSION:name;
+const unique T.MouseAttributes__DEVICE_EXTENSION:name;
+const unique T.SpinLock__DEVICE_EXTENSION:name;
+const unique T.ReadQueue__DEVICE_EXTENSION:name;
+const unique T.SequenceNumber__DEVICE_EXTENSION:name;
+const unique T.DeviceState__DEVICE_EXTENSION:name;
+const unique T.SystemState__DEVICE_EXTENSION:name;
+const unique T.UnitId__DEVICE_EXTENSION:name;
+const unique T.WmiLibInfo__DEVICE_EXTENSION:name;
+const unique T.SystemToDeviceState__DEVICE_EXTENSION:name;
+const unique T.MinDeviceWakeState__DEVICE_EXTENSION:name;
+const unique T.MinSystemWakeState__DEVICE_EXTENSION:name;
+const unique T.WaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.ExtraWaitWakeIrp__DEVICE_EXTENSION:name;
+const unique T.TargetNotifyHandle__DEVICE_EXTENSION:name;
+const unique T.Link__DEVICE_EXTENSION:name;
+const unique T.File__DEVICE_EXTENSION:name;
+const unique T.Enabled__DEVICE_EXTENSION:name;
+const unique T.WaitWakeEnabled__DEVICE_EXTENSION:name;
+const unique T.SurpriseRemoved__DEVICE_EXTENSION:name;
+const unique T.Type__DEVICE_OBJECT:name;
+const unique T.Size__DEVICE_OBJECT:name;
+const unique T.ReferenceCount__DEVICE_OBJECT:name;
+const unique T.DriverObject__DEVICE_OBJECT:name;
+const unique T.NextDevice__DEVICE_OBJECT:name;
+const unique T.AttachedDevice__DEVICE_OBJECT:name;
+const unique T.CurrentIrp__DEVICE_OBJECT:name;
+const unique T.Timer__DEVICE_OBJECT:name;
+const unique T.Flags__DEVICE_OBJECT:name;
+const unique T.Characteristics__DEVICE_OBJECT:name;
+const unique T.Vpb__DEVICE_OBJECT:name;
+const unique T.DeviceExtension__DEVICE_OBJECT:name;
+const unique T.DeviceType__DEVICE_OBJECT:name;
+const unique T.StackSize__DEVICE_OBJECT:name;
+const unique T.Queue__DEVICE_OBJECT:name;
+const unique T.AlignmentRequirement__DEVICE_OBJECT:name;
+const unique T.DeviceQueue__DEVICE_OBJECT:name;
+const unique T.Dpc__DEVICE_OBJECT:name;
+const unique T.ActiveThreadCount__DEVICE_OBJECT:name;
+const unique T.SecurityDescriptor__DEVICE_OBJECT:name;
+const unique T.DeviceLock__DEVICE_OBJECT:name;
+const unique T.SectorSize__DEVICE_OBJECT:name;
+const unique T.Spare1__DEVICE_OBJECT:name;
+const unique T.DeviceObjectExtension__DEVICE_OBJECT:name;
+const unique T.Reserved__DEVICE_OBJECT:name;
+const unique T.Type__DEVOBJ_EXTENSION:name;
+const unique T.Size__DEVOBJ_EXTENSION:name;
+const unique T.DeviceObject__DEVOBJ_EXTENSION:name;
+const unique T.__unnamed_4_c9b2e921__DISPATCHER_HEADER:name;
+const unique T.SignalState__DISPATCHER_HEADER:name;
+const unique T.WaitListHead__DISPATCHER_HEADER:name;
+const unique T.DriverObject__DRIVER_EXTENSION:name;
+const unique T.AddDevice__DRIVER_EXTENSION:name;
+const unique T.Count__DRIVER_EXTENSION:name;
+const unique T.ServiceKeyName__DRIVER_EXTENSION:name;
+const unique T.Type__DRIVER_OBJECT:name;
+const unique T.Size__DRIVER_OBJECT:name;
+const unique T.DeviceObject__DRIVER_OBJECT:name;
+const unique T.Flags__DRIVER_OBJECT:name;
+const unique T.DriverStart__DRIVER_OBJECT:name;
+const unique T.DriverSize__DRIVER_OBJECT:name;
+const unique T.DriverSection__DRIVER_OBJECT:name;
+const unique T.DriverExtension__DRIVER_OBJECT:name;
+const unique T.DriverName__DRIVER_OBJECT:name;
+const unique T.HardwareDatabase__DRIVER_OBJECT:name;
+const unique T.FastIoDispatch__DRIVER_OBJECT:name;
+const unique T.DriverInit__DRIVER_OBJECT:name;
+const unique T.DriverStartIo__DRIVER_OBJECT:name;
+const unique T.DriverUnload__DRIVER_OBJECT:name;
+const unique T.MajorFunction__DRIVER_OBJECT:name;
+const unique T.SystemResourcesList__ERESOURCE:name;
+const unique T.OwnerTable__ERESOURCE:name;
+const unique T.ActiveCount__ERESOURCE:name;
+const unique T.Flag__ERESOURCE:name;
+const unique T.SharedWaiters__ERESOURCE:name;
+const unique T.ExclusiveWaiters__ERESOURCE:name;
+const unique T.OwnerEntry__ERESOURCE:name;
+const unique T.ActiveEntries__ERESOURCE:name;
+const unique T.ContentionCount__ERESOURCE:name;
+const unique T.NumberOfSharedWaiters__ERESOURCE:name;
+const unique T.NumberOfExclusiveWaiters__ERESOURCE:name;
+const unique T.__unnamed_4_46b62f69__ERESOURCE:name;
+const unique T.SpinLock__ERESOURCE:name;
+const unique T.SizeOfFastIoDispatch__FAST_IO_DISPATCH:name;
+const unique T.FastIoCheckIfPossible__FAST_IO_DISPATCH:name;
+const unique T.FastIoRead__FAST_IO_DISPATCH:name;
+const unique T.FastIoWrite__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryBasicInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryStandardInfo__FAST_IO_DISPATCH:name;
+const unique T.FastIoLock__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockSingle__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAll__FAST_IO_DISPATCH:name;
+const unique T.FastIoUnlockAllByKey__FAST_IO_DISPATCH:name;
+const unique T.FastIoDeviceControl__FAST_IO_DISPATCH:name;
+const unique T.AcquireFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.ReleaseFileForNtCreateSection__FAST_IO_DISPATCH:name;
+const unique T.FastIoDetachDevice__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryNetworkOpenInfo__FAST_IO_DISPATCH:name;
+const unique T.AcquireForModWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlRead__FAST_IO_DISPATCH:name;
+const unique T.MdlReadComplete__FAST_IO_DISPATCH:name;
+const unique T.PrepareMdlWrite__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteComplete__FAST_IO_DISPATCH:name;
+const unique T.FastIoReadCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoWriteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlReadCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.MdlWriteCompleteCompressed__FAST_IO_DISPATCH:name;
+const unique T.FastIoQueryOpen__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForModWrite__FAST_IO_DISPATCH:name;
+const unique T.AcquireForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.ReleaseForCcFlush__FAST_IO_DISPATCH:name;
+const unique T.Count__FAST_MUTEX:name;
+const unique T.Owner__FAST_MUTEX:name;
+const unique T.Contention__FAST_MUTEX:name;
+const unique T.Gate__FAST_MUTEX:name;
+const unique T.OldIrql__FAST_MUTEX:name;
+const unique T.CreationTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastAccessTime__FILE_BASIC_INFORMATION:name;
+const unique T.LastWriteTime__FILE_BASIC_INFORMATION:name;
+const unique T.ChangeTime__FILE_BASIC_INFORMATION:name;
+const unique T.FileAttributes__FILE_BASIC_INFORMATION:name;
+const unique T.CreationTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastAccessTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.LastWriteTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.ChangeTime__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.AllocationSize__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.EndOfFile__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.FileAttributes__FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.Type__FILE_OBJECT:name;
+const unique T.Size__FILE_OBJECT:name;
+const unique T.DeviceObject__FILE_OBJECT:name;
+const unique T.Vpb__FILE_OBJECT:name;
+const unique T.FsContext__FILE_OBJECT:name;
+const unique T.FsContext2__FILE_OBJECT:name;
+const unique T.SectionObjectPointer__FILE_OBJECT:name;
+const unique T.PrivateCacheMap__FILE_OBJECT:name;
+const unique T.FinalStatus__FILE_OBJECT:name;
+const unique T.RelatedFileObject__FILE_OBJECT:name;
+const unique T.LockOperation__FILE_OBJECT:name;
+const unique T.DeletePending__FILE_OBJECT:name;
+const unique T.ReadAccess__FILE_OBJECT:name;
+const unique T.WriteAccess__FILE_OBJECT:name;
+const unique T.DeleteAccess__FILE_OBJECT:name;
+const unique T.SharedRead__FILE_OBJECT:name;
+const unique T.SharedWrite__FILE_OBJECT:name;
+const unique T.SharedDelete__FILE_OBJECT:name;
+const unique T.Flags__FILE_OBJECT:name;
+const unique T.FileName__FILE_OBJECT:name;
+const unique T.CurrentByteOffset__FILE_OBJECT:name;
+const unique T.Waiters__FILE_OBJECT:name;
+const unique T.Busy__FILE_OBJECT:name;
+const unique T.LastLock__FILE_OBJECT:name;
+const unique T.Lock__FILE_OBJECT:name;
+const unique T.Event__FILE_OBJECT:name;
+const unique T.CompletionContext__FILE_OBJECT:name;
+const unique T.IrpListLock__FILE_OBJECT:name;
+const unique T.IrpList__FILE_OBJECT:name;
+const unique T.FileObjectExtension__FILE_OBJECT:name;
+const unique T.AllocationSize__FILE_STANDARD_INFORMATION:name;
+const unique T.EndOfFile__FILE_STANDARD_INFORMATION:name;
+const unique T.NumberOfLinks__FILE_STANDARD_INFORMATION:name;
+const unique T.DeletePending__FILE_STANDARD_INFORMATION:name;
+const unique T.Directory__FILE_STANDARD_INFORMATION:name;
+const unique T.Debug__GLOBALS:name;
+const unique T.GrandMaster__GLOBALS:name;
+const unique T.AssocClassList__GLOBALS:name;
+const unique T.NumAssocClass__GLOBALS:name;
+const unique T.Opens__GLOBALS:name;
+const unique T.NumberLegacyPorts__GLOBALS:name;
+const unique T.Mutex__GLOBALS:name;
+const unique T.ConnectOneClassToOnePort__GLOBALS:name;
+const unique T.PortsServiced__GLOBALS:name;
+const unique T.InitExtension__GLOBALS:name;
+const unique T.RegistryPath__GLOBALS:name;
+const unique T.BaseClassName__GLOBALS:name;
+const unique T.BaseClassBuffer__GLOBALS:name;
+const unique T.LegacyDeviceList__GLOBALS:name;
+const unique T.Data1__GUID:name;
+const unique T.Data2__GUID:name;
+const unique T.Data3__GUID:name;
+const unique T.Data4__GUID:name;
+const unique T.PrivilegeCount__INITIAL_PRIVILEGE_SET:name;
+const unique T.Control__INITIAL_PRIVILEGE_SET:name;
+const unique T.Privilege__INITIAL_PRIVILEGE_SET:name;
+const unique T.Size__INTERFACE:name;
+const unique T.Version__INTERFACE:name;
+const unique T.Context__INTERFACE:name;
+const unique T.InterfaceReference__INTERFACE:name;
+const unique T.InterfaceDereference__INTERFACE:name;
+const unique T.Port__IO_COMPLETION_CONTEXT:name;
+const unique T.Key__IO_COMPLETION_CONTEXT:name;
+const unique T.Common__IO_REMOVE_LOCK:name;
+const unique T.Dbg__IO_REMOVE_LOCK:name;
+const unique T.Removed__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Reserved__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.IoCount__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.RemoveEvent__IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T.Signature__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.HighWatermark__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.MaxLockedTicks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.AllocateTag__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LockList__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Spin__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.LowMemoryCount__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved1__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Reserved2__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Blocks__IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T.Option__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Type__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.ShareDisposition__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare1__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Flags__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Spare2__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.u__IO_RESOURCE_DESCRIPTOR:name;
+const unique T.Version__IO_RESOURCE_LIST:name;
+const unique T.Revision__IO_RESOURCE_LIST:name;
+const unique T.Count__IO_RESOURCE_LIST:name;
+const unique T.Descriptors__IO_RESOURCE_LIST:name;
+const unique T.ListSize__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.InterfaceType__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.BusNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SlotNumber__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.Reserved__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.AlternativeLists__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.List__IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.SecurityQos__IO_SECURITY_CONTEXT:name;
+const unique T.AccessState__IO_SECURITY_CONTEXT:name;
+const unique T.DesiredAccess__IO_SECURITY_CONTEXT:name;
+const unique T.FullCreateOptions__IO_SECURITY_CONTEXT:name;
+const unique T.MajorFunction__IO_STACK_LOCATION:name;
+const unique T.MinorFunction__IO_STACK_LOCATION:name;
+const unique T.Flags__IO_STACK_LOCATION:name;
+const unique T.Control__IO_STACK_LOCATION:name;
+const unique T.Parameters__IO_STACK_LOCATION:name;
+const unique T.DeviceObject__IO_STACK_LOCATION:name;
+const unique T.FileObject__IO_STACK_LOCATION:name;
+const unique T.CompletionRoutine__IO_STACK_LOCATION:name;
+const unique T.Context__IO_STACK_LOCATION:name;
+const unique T.__unnamed_4_16aff58e__IO_STATUS_BLOCK:name;
+const unique T.Information__IO_STATUS_BLOCK:name;
+const unique T.Type__IRP:name;
+const unique T.Size__IRP:name;
+const unique T.MdlAddress__IRP:name;
+const unique T.Flags__IRP:name;
+const unique T.AssociatedIrp__IRP:name;
+const unique T.ThreadListEntry__IRP:name;
+const unique T.IoStatus__IRP:name;
+const unique T.RequestorMode__IRP:name;
+const unique T.PendingReturned__IRP:name;
+const unique T.StackCount__IRP:name;
+const unique T.CurrentLocation__IRP:name;
+const unique T.Cancel__IRP:name;
+const unique T.CancelIrql__IRP:name;
+const unique T.ApcEnvironment__IRP:name;
+const unique T.AllocationFlags__IRP:name;
+const unique T.UserIosb__IRP:name;
+const unique T.UserEvent__IRP:name;
+const unique T.Overlay__IRP:name;
+const unique T.CancelRoutine__IRP:name;
+const unique T.UserBuffer__IRP:name;
+const unique T.Tail__IRP:name;
+const unique T.Type__KAPC:name;
+const unique T.SpareByte0__KAPC:name;
+const unique T.Size__KAPC:name;
+const unique T.SpareByte1__KAPC:name;
+const unique T.SpareLong0__KAPC:name;
+const unique T.Thread__KAPC:name;
+const unique T.ApcListEntry__KAPC:name;
+const unique T.KernelRoutine__KAPC:name;
+const unique T.RundownRoutine__KAPC:name;
+const unique T.NormalRoutine__KAPC:name;
+const unique T.NormalContext__KAPC:name;
+const unique T.SystemArgument1__KAPC:name;
+const unique T.SystemArgument2__KAPC:name;
+const unique T.ApcStateIndex__KAPC:name;
+const unique T.ApcMode__KAPC:name;
+const unique T.Inserted__KAPC:name;
+const unique T.Type__KDEVICE_QUEUE:name;
+const unique T.Size__KDEVICE_QUEUE:name;
+const unique T.DeviceListHead__KDEVICE_QUEUE:name;
+const unique T.Lock__KDEVICE_QUEUE:name;
+const unique T.Busy__KDEVICE_QUEUE:name;
+const unique T.DeviceListEntry__KDEVICE_QUEUE_ENTRY:name;
+const unique T.SortKey__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Inserted__KDEVICE_QUEUE_ENTRY:name;
+const unique T.Type__KDPC:name;
+const unique T.Importance__KDPC:name;
+const unique T.Number__KDPC:name;
+const unique T.DpcListEntry__KDPC:name;
+const unique T.DeferredRoutine__KDPC:name;
+const unique T.DeferredContext__KDPC:name;
+const unique T.SystemArgument1__KDPC:name;
+const unique T.SystemArgument2__KDPC:name;
+const unique T.DpcData__KDPC:name;
+const unique T.Header__KEVENT:name;
+const unique T.Header__KSEMAPHORE:name;
+const unique T.Limit__KSEMAPHORE:name;
+const unique T.__unnamed_8_8684a3e7__LARGE_INTEGER:name;
+const unique T.u__LARGE_INTEGER:name;
+const unique T.QuadPart__LARGE_INTEGER:name;
+const unique T.Flink__LIST_ENTRY:name;
+const unique T.Blink__LIST_ENTRY:name;
+const unique T.LowPart__LUID:name;
+const unique T.HighPart__LUID:name;
+const unique T.Luid__LUID_AND_ATTRIBUTES:name;
+const unique T.Attributes__LUID_AND_ATTRIBUTES:name;
+const unique T.Next__MDL:name;
+const unique T.Size__MDL:name;
+const unique T.MdlFlags__MDL:name;
+const unique T.Process__MDL:name;
+const unique T.MappedSystemVa__MDL:name;
+const unique T.StartVa__MDL:name;
+const unique T.ByteCount__MDL:name;
+const unique T.ByteOffset__MDL:name;
+const unique T.MouseIdentifier__MOUSE_ATTRIBUTES:name;
+const unique T.NumberOfButtons__MOUSE_ATTRIBUTES:name;
+const unique T.SampleRate__MOUSE_ATTRIBUTES:name;
+const unique T.InputDataQueueLength__MOUSE_ATTRIBUTES:name;
+const unique T.UnitId__MOUSE_INPUT_DATA:name;
+const unique T.Flags__MOUSE_INPUT_DATA:name;
+const unique T.__unnamed_4_9c11ed91__MOUSE_INPUT_DATA:name;
+const unique T.RawButtons__MOUSE_INPUT_DATA:name;
+const unique T.LastX__MOUSE_INPUT_DATA:name;
+const unique T.LastY__MOUSE_INPUT_DATA:name;
+const unique T.ExtraInformation__MOUSE_INPUT_DATA:name;
+const unique T.OwnerThread__OWNER_ENTRY:name;
+const unique T.__unnamed_4_c1e23b02__OWNER_ENTRY:name;
+const unique T.File__PORT:name;
+const unique T.Port__PORT:name;
+const unique T.Enabled__PORT:name;
+const unique T.Reserved__PORT:name;
+const unique T.Free__PORT:name;
+const unique T.SequenceD1__POWER_SEQUENCE:name;
+const unique T.SequenceD2__POWER_SEQUENCE:name;
+const unique T.SequenceD3__POWER_SEQUENCE:name;
+const unique T.SystemState__POWER_STATE:name;
+const unique T.DeviceState__POWER_STATE:name;
+const unique T.PrivilegeCount__PRIVILEGE_SET:name;
+const unique T.Control__PRIVILEGE_SET:name;
+const unique T.Privilege__PRIVILEGE_SET:name;
+const unique T.DataSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.SharedCacheMap__SECTION_OBJECT_POINTERS:name;
+const unique T.ImageSectionObject__SECTION_OBJECT_POINTERS:name;
+const unique T.Length__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ImpersonationLevel__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ContextTrackingMode__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.EffectiveOnly__SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.ClientToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ImpersonationLevel__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.PrimaryToken__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.ProcessAuditId__SECURITY_SUBJECT_CONTEXT:name;
+const unique T.__unnamed_4_b4f5a780__SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T.Length__UNICODE_STRING:name;
+const unique T.MaximumLength__UNICODE_STRING:name;
+const unique T.Buffer__UNICODE_STRING:name;
+const unique T.Type__VPB:name;
+const unique T.Size__VPB:name;
+const unique T.Flags__VPB:name;
+const unique T.VolumeLabelLength__VPB:name;
+const unique T.DeviceObject__VPB:name;
+const unique T.RealDevice__VPB:name;
+const unique T.SerialNumber__VPB:name;
+const unique T.ReferenceCount__VPB:name;
+const unique T.VolumeLabel__VPB:name;
+const unique T.WaitQueueEntry__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceRoutine__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceContext__WAIT_CONTEXT_BLOCK:name;
+const unique T.NumberOfMapRegisters__WAIT_CONTEXT_BLOCK:name;
+const unique T.DeviceObject__WAIT_CONTEXT_BLOCK:name;
+const unique T.CurrentIrp__WAIT_CONTEXT_BLOCK:name;
+const unique T.BufferChainingDpc__WAIT_CONTEXT_BLOCK:name;
+const unique T.GuidCount__WMILIB_CONTEXT:name;
+const unique T.GuidList__WMILIB_CONTEXT:name;
+const unique T.QueryWmiRegInfo__WMILIB_CONTEXT:name;
+const unique T.QueryWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataBlock__WMILIB_CONTEXT:name;
+const unique T.SetWmiDataItem__WMILIB_CONTEXT:name;
+const unique T.ExecuteWmiMethod__WMILIB_CONTEXT:name;
+const unique T.WmiFunctionControl__WMILIB_CONTEXT:name;
+const unique T.Start___unnamed_12_06b9ee6e:name;
+const unique T.Length48___unnamed_12_06b9ee6e:name;
+const unique T.Start___unnamed_12_0882bd02:name;
+const unique T.Length64___unnamed_12_0882bd02:name;
+const unique T.__unnamed_12_2e80217b___unnamed_12_264d0dab:name;
+const unique T.Raw___unnamed_12_2e80217b:name;
+const unique T.Translated___unnamed_12_2e80217b:name;
+const unique T.Data___unnamed_12_5cc7ace2:name;
+const unique T.Channel___unnamed_12_6374506e:name;
+const unique T.Port___unnamed_12_6374506e:name;
+const unique T.Reserved1___unnamed_12_6374506e:name;
+const unique T.Priority___unnamed_12_68a4278e:name;
+const unique T.Reserved1___unnamed_12_68a4278e:name;
+const unique T.Reserved2___unnamed_12_68a4278e:name;
+const unique T.Generic___unnamed_12_79ed2653:name;
+const unique T.Port___unnamed_12_79ed2653:name;
+const unique T.Interrupt___unnamed_12_79ed2653:name;
+const unique T.MessageInterrupt___unnamed_12_79ed2653:name;
+const unique T.Memory___unnamed_12_79ed2653:name;
+const unique T.Dma___unnamed_12_79ed2653:name;
+const unique T.DevicePrivate___unnamed_12_79ed2653:name;
+const unique T.BusNumber___unnamed_12_79ed2653:name;
+const unique T.DeviceSpecificData___unnamed_12_79ed2653:name;
+const unique T.Memory40___unnamed_12_79ed2653:name;
+const unique T.Memory48___unnamed_12_79ed2653:name;
+const unique T.Memory64___unnamed_12_79ed2653:name;
+const unique T.Start___unnamed_12_7da594c0:name;
+const unique T.Length40___unnamed_12_7da594c0:name;
+const unique T.Start___unnamed_12_9873e05d:name;
+const unique T.Length___unnamed_12_9873e05d:name;
+const unique T.DataSize___unnamed_12_9cc8cebc:name;
+const unique T.Reserved1___unnamed_12_9cc8cebc:name;
+const unique T.Reserved2___unnamed_12_9cc8cebc:name;
+const unique T.Start___unnamed_12_b98da82e:name;
+const unique T.Length___unnamed_12_b98da82e:name;
+const unique T.Level___unnamed_12_c2880e88:name;
+const unique T.Vector___unnamed_12_c2880e88:name;
+const unique T.Affinity___unnamed_12_c2880e88:name;
+const unique T.Start___unnamed_12_c49ab31a:name;
+const unique T.Length___unnamed_12_c49ab31a:name;
+const unique T.ListEntry___unnamed_12_c6ed93f3:name;
+const unique T.__unnamed_4_a7aa989c___unnamed_12_c6ed93f3:name;
+const unique T.Data___unnamed_12_ced61554:name;
+const unique T.Reserved___unnamed_12_d9c44df5:name;
+const unique T.MessageCount___unnamed_12_d9c44df5:name;
+const unique T.Vector___unnamed_12_d9c44df5:name;
+const unique T.Affinity___unnamed_12_d9c44df5:name;
+const unique T.Start___unnamed_12_db3dcbfc:name;
+const unique T.Length___unnamed_12_db3dcbfc:name;
+const unique T.Reserved___unnamed_12_db3dcbfc:name;
+const unique T.Level___unnamed_12_fb26b3fc:name;
+const unique T.Vector___unnamed_12_fb26b3fc:name;
+const unique T.Affinity___unnamed_12_fb26b3fc:name;
+const unique T.OutputBufferLength___unnamed_16_22e4d054:name;
+const unique T.InputBufferLength___unnamed_16_22e4d054:name;
+const unique T.IoControlCode___unnamed_16_22e4d054:name;
+const unique T.Type3InputBuffer___unnamed_16_22e4d054:name;
+const unique T.Create___unnamed_16_39b626ad:name;
+const unique T.Read___unnamed_16_39b626ad:name;
+const unique T.Write___unnamed_16_39b626ad:name;
+const unique T.QueryDirectory___unnamed_16_39b626ad:name;
+const unique T.NotifyDirectory___unnamed_16_39b626ad:name;
+const unique T.QueryFile___unnamed_16_39b626ad:name;
+const unique T.SetFile___unnamed_16_39b626ad:name;
+const unique T.QueryEa___unnamed_16_39b626ad:name;
+const unique T.SetEa___unnamed_16_39b626ad:name;
+const unique T.QueryVolume___unnamed_16_39b626ad:name;
+const unique T.SetVolume___unnamed_16_39b626ad:name;
+const unique T.FileSystemControl___unnamed_16_39b626ad:name;
+const unique T.LockControl___unnamed_16_39b626ad:name;
+const unique T.DeviceIoControl___unnamed_16_39b626ad:name;
+const unique T.QuerySecurity___unnamed_16_39b626ad:name;
+const unique T.SetSecurity___unnamed_16_39b626ad:name;
+const unique T.MountVolume___unnamed_16_39b626ad:name;
+const unique T.VerifyVolume___unnamed_16_39b626ad:name;
+const unique T.Scsi___unnamed_16_39b626ad:name;
+const unique T.QueryQuota___unnamed_16_39b626ad:name;
+const unique T.SetQuota___unnamed_16_39b626ad:name;
+const unique T.QueryDeviceRelations___unnamed_16_39b626ad:name;
+const unique T.QueryInterface___unnamed_16_39b626ad:name;
+const unique T.DeviceCapabilities___unnamed_16_39b626ad:name;
+const unique T.FilterResourceRequirements___unnamed_16_39b626ad:name;
+const unique T.ReadWriteConfig___unnamed_16_39b626ad:name;
+const unique T.SetLock___unnamed_16_39b626ad:name;
+const unique T.QueryId___unnamed_16_39b626ad:name;
+const unique T.QueryDeviceText___unnamed_16_39b626ad:name;
+const unique T.UsageNotification___unnamed_16_39b626ad:name;
+const unique T.WaitWake___unnamed_16_39b626ad:name;
+const unique T.PowerSequence___unnamed_16_39b626ad:name;
+const unique T.Power___unnamed_16_39b626ad:name;
+const unique T.StartDevice___unnamed_16_39b626ad:name;
+const unique T.WMI___unnamed_16_39b626ad:name;
+const unique T.Others___unnamed_16_39b626ad:name;
+const unique T.WhichSpace___unnamed_16_56c011d7:name;
+const unique T.Buffer___unnamed_16_56c011d7:name;
+const unique T.Offset___unnamed_16_56c011d7:name;
+const unique T.Length___unnamed_16_56c011d7:name;
+const unique T.DeviceQueueEntry___unnamed_16_5fed8f23:name;
+const unique T.__unnamed_16_ae643f17___unnamed_16_5fed8f23:name;
+const unique T.Length___unnamed_16_6be9abe0:name;
+const unique T.FileName___unnamed_16_6be9abe0:name;
+const unique T.FileInformationClass___unnamed_16_6be9abe0:name;
+const unique T.FileIndex___unnamed_16_6be9abe0:name;
+const unique T.InterfaceType___unnamed_16_78879a38:name;
+const unique T.Size___unnamed_16_78879a38:name;
+const unique T.Version___unnamed_16_78879a38:name;
+const unique T.Interface___unnamed_16_78879a38:name;
+const unique T.InterfaceSpecificData___unnamed_16_78879a38:name;
+const unique T.Length___unnamed_16_804a2f24:name;
+const unique T.StartSid___unnamed_16_804a2f24:name;
+const unique T.SidList___unnamed_16_804a2f24:name;
+const unique T.SidListLength___unnamed_16_804a2f24:name;
+const unique T.Argument1___unnamed_16_8586693f:name;
+const unique T.Argument2___unnamed_16_8586693f:name;
+const unique T.Argument3___unnamed_16_8586693f:name;
+const unique T.Argument4___unnamed_16_8586693f:name;
+const unique T.Length___unnamed_16_8831e65f:name;
+const unique T.Key___unnamed_16_8831e65f:name;
+const unique T.ByteOffset___unnamed_16_8831e65f:name;
+const unique T.SecurityContext___unnamed_16_8c2d663a:name;
+const unique T.Options___unnamed_16_8c2d663a:name;
+const unique T.FileAttributes___unnamed_16_8c2d663a:name;
+const unique T.ShareAccess___unnamed_16_8c2d663a:name;
+const unique T.EaLength___unnamed_16_8c2d663a:name;
+const unique T.Length___unnamed_16_913b9a7a:name;
+const unique T.Key___unnamed_16_913b9a7a:name;
+const unique T.ByteOffset___unnamed_16_913b9a7a:name;
+const unique T.OutputBufferLength___unnamed_16_94d1d1c7:name;
+const unique T.InputBufferLength___unnamed_16_94d1d1c7:name;
+const unique T.FsControlCode___unnamed_16_94d1d1c7:name;
+const unique T.Type3InputBuffer___unnamed_16_94d1d1c7:name;
+const unique T.Length___unnamed_16_a2fab4da:name;
+const unique T.FileInformationClass___unnamed_16_a2fab4da:name;
+const unique T.FileObject___unnamed_16_a2fab4da:name;
+const unique T.__unnamed_4_a7d0864c___unnamed_16_a2fab4da:name;
+const unique T.DriverContext___unnamed_16_ae643f17:name;
+const unique T.Length___unnamed_16_c1b29316:name;
+const unique T.Key___unnamed_16_c1b29316:name;
+const unique T.ByteOffset___unnamed_16_c1b29316:name;
+const unique T.ProviderId___unnamed_16_cbd53ed4:name;
+const unique T.DataPath___unnamed_16_cbd53ed4:name;
+const unique T.BufferSize___unnamed_16_cbd53ed4:name;
+const unique T.Buffer___unnamed_16_cbd53ed4:name;
+const unique T.Length___unnamed_16_db70db6e:name;
+const unique T.MinBusNumber___unnamed_16_db70db6e:name;
+const unique T.MaxBusNumber___unnamed_16_db70db6e:name;
+const unique T.Reserved___unnamed_16_db70db6e:name;
+const unique T.Length___unnamed_16_ef4b6307:name;
+const unique T.EaList___unnamed_16_ef4b6307:name;
+const unique T.EaListLength___unnamed_16_ef4b6307:name;
+const unique T.EaIndex___unnamed_16_ef4b6307:name;
+const unique T.__unnamed_4_b060dea6___unnamed_16_fdda1f62:name;
+const unique T.Type___unnamed_16_fdda1f62:name;
+const unique T.State___unnamed_16_fdda1f62:name;
+const unique T.ShutdownType___unnamed_16_fdda1f62:name;
+const unique T.Lock___unnamed_1_1394de4b:name;
+const unique T.Abandoned___unnamed_1_2bb39c56:name;
+const unique T.Absolute___unnamed_1_2bb39c56:name;
+const unique T.NpxIrql___unnamed_1_2bb39c56:name;
+const unique T.Signalling___unnamed_1_2bb39c56:name;
+const unique T.Inserted___unnamed_1_9fa0583a:name;
+const unique T.DebugActive___unnamed_1_9fa0583a:name;
+const unique T.DpcActive___unnamed_1_9fa0583a:name;
+const unique T.Size___unnamed_1_e30779f5:name;
+const unique T.Hand___unnamed_1_e30779f5:name;
+const unique T.MinimumVector___unnamed_20_83d468e4:name;
+const unique T.MaximumVector___unnamed_20_83d468e4:name;
+const unique T.AffinityPolicy___unnamed_20_83d468e4:name;
+const unique T.PriorityPolicy___unnamed_20_83d468e4:name;
+const unique T.TargetedProcessors___unnamed_20_83d468e4:name;
+const unique T.Length40___unnamed_24_035931da:name;
+const unique T.Alignment40___unnamed_24_035931da:name;
+const unique T.MinimumAddress___unnamed_24_035931da:name;
+const unique T.MaximumAddress___unnamed_24_035931da:name;
+const unique T.Length___unnamed_24_38e128db:name;
+const unique T.Alignment___unnamed_24_38e128db:name;
+const unique T.MinimumAddress___unnamed_24_38e128db:name;
+const unique T.MaximumAddress___unnamed_24_38e128db:name;
+const unique T.Length___unnamed_24_9500ea34:name;
+const unique T.Alignment___unnamed_24_9500ea34:name;
+const unique T.MinimumAddress___unnamed_24_9500ea34:name;
+const unique T.MaximumAddress___unnamed_24_9500ea34:name;
+const unique T.Length___unnamed_24_9734802c:name;
+const unique T.Alignment___unnamed_24_9734802c:name;
+const unique T.MinimumAddress___unnamed_24_9734802c:name;
+const unique T.MaximumAddress___unnamed_24_9734802c:name;
+const unique T.Length64___unnamed_24_af62813f:name;
+const unique T.Alignment64___unnamed_24_af62813f:name;
+const unique T.MinimumAddress___unnamed_24_af62813f:name;
+const unique T.MaximumAddress___unnamed_24_af62813f:name;
+const unique T.Length48___unnamed_24_c0555099:name;
+const unique T.Alignment48___unnamed_24_c0555099:name;
+const unique T.MinimumAddress___unnamed_24_c0555099:name;
+const unique T.MaximumAddress___unnamed_24_c0555099:name;
+const unique T.Port___unnamed_24_d7c4ec3a:name;
+const unique T.Memory___unnamed_24_d7c4ec3a:name;
+const unique T.Interrupt___unnamed_24_d7c4ec3a:name;
+const unique T.Dma___unnamed_24_d7c4ec3a:name;
+const unique T.Generic___unnamed_24_d7c4ec3a:name;
+const unique T.DevicePrivate___unnamed_24_d7c4ec3a:name;
+const unique T.BusNumber___unnamed_24_d7c4ec3a:name;
+const unique T.ConfigData___unnamed_24_d7c4ec3a:name;
+const unique T.Memory40___unnamed_24_d7c4ec3a:name;
+const unique T.Memory48___unnamed_24_d7c4ec3a:name;
+const unique T.Memory64___unnamed_24_d7c4ec3a:name;
+const unique T.ReplaceIfExists___unnamed_2_196a7f56:name;
+const unique T.AdvanceOnly___unnamed_2_196a7f56:name;
+const unique T.__unnamed_16_5fed8f23___unnamed_40_a0414182:name;
+const unique T.Thread___unnamed_40_a0414182:name;
+const unique T.AuxiliaryBuffer___unnamed_40_a0414182:name;
+const unique T.__unnamed_12_c6ed93f3___unnamed_40_a0414182:name;
+const unique T.OriginalFileObject___unnamed_40_a0414182:name;
+const unique T.ListEntry___unnamed_40_d90496f4:name;
+const unique T.Wcb___unnamed_40_d90496f4:name;
+const unique T.InitialPrivilegeSet___unnamed_44_a7026dca:name;
+const unique T.PrivilegeSet___unnamed_44_a7026dca:name;
+const unique T.Overlay___unnamed_48_c1da9fa5:name;
+const unique T.Apc___unnamed_48_c1da9fa5:name;
+const unique T.CompletionKey___unnamed_48_c1da9fa5:name;
+const unique T.PowerSequence___unnamed_4_0510b147:name;
+const unique T.Length___unnamed_4_0a569078:name;
+const unique T.Status___unnamed_4_16aff58e:name;
+const unique T.Pointer___unnamed_4_16aff58e:name;
+const unique T.IdType___unnamed_4_40bf8e34:name;
+const unique T.Address___unnamed_4_46b62f69:name;
+const unique T.CreatorBackTraceIndex___unnamed_4_46b62f69:name;
+const unique T.Capabilities___unnamed_4_73d46255:name;
+const unique T.Srb___unnamed_4_765e3037:name;
+const unique T.Type___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_2bb39c56___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_e30779f5___unnamed_4_846adf3f:name;
+const unique T.__unnamed_1_9fa0583a___unnamed_4_846adf3f:name;
+const unique T.PowerState___unnamed_4_8dd73d30:name;
+const unique T.Type___unnamed_4_957e0d74:name;
+const unique T.Buttons___unnamed_4_9c11ed91:name;
+const unique T.__unnamed_4_b5247f10___unnamed_4_9c11ed91:name;
+const unique T.IoResourceRequirementList___unnamed_4_a58d40c8:name;
+const unique T.CurrentStackLocation___unnamed_4_a7aa989c:name;
+const unique T.PacketType___unnamed_4_a7aa989c:name;
+const unique T.__unnamed_2_196a7f56___unnamed_4_a7d0864c:name;
+const unique T.ClusterCount___unnamed_4_a7d0864c:name;
+const unique T.DeleteHandle___unnamed_4_a7d0864c:name;
+const unique T.Length___unnamed_4_aa20b426:name;
+const unique T.UserApcRoutine___unnamed_4_ab87ddfd:name;
+const unique T.IssuingProcess___unnamed_4_ab87ddfd:name;
+const unique T.Reserved1___unnamed_4_b016b1e1:name;
+const unique T.TargetSystemState___unnamed_4_b016b1e1:name;
+const unique T.EffectiveSystemState___unnamed_4_b016b1e1:name;
+const unique T.CurrentSystemState___unnamed_4_b016b1e1:name;
+const unique T.IgnoreHibernationPath___unnamed_4_b016b1e1:name;
+const unique T.PseudoTransition___unnamed_4_b016b1e1:name;
+const unique T.Reserved2___unnamed_4_b016b1e1:name;
+const unique T.SystemContext___unnamed_4_b060dea6:name;
+const unique T.SystemPowerStateContext___unnamed_4_b060dea6:name;
+const unique T.__unnamed_4_b016b1e1___unnamed_4_b4f5a780:name;
+const unique T.ContextAsUlong___unnamed_4_b4f5a780:name;
+const unique T.ButtonFlags___unnamed_4_b5247f10:name;
+const unique T.ButtonData___unnamed_4_b5247f10:name;
+const unique T.OwnerCount___unnamed_4_c1e23b02:name;
+const unique T.TableSize___unnamed_4_c1e23b02:name;
+const unique T.__unnamed_4_846adf3f___unnamed_4_c9b2e921:name;
+const unique T.Lock___unnamed_4_c9b2e921:name;
+const unique T.MasterIrp___unnamed_4_fa7b96a7:name;
+const unique T.IrpCount___unnamed_4_fa7b96a7:name;
+const unique T.SystemBuffer___unnamed_4_fa7b96a7:name;
+const unique T.Vpb___unnamed_8_09ad2712:name;
+const unique T.DeviceObject___unnamed_8_09ad2712:name;
+const unique T.Length___unnamed_8_21ac1dba:name;
+const unique T.CompletionFilter___unnamed_8_21ac1dba:name;
+const unique T.Length___unnamed_8_27d3ab76:name;
+const unique T.FsInformationClass___unnamed_8_27d3ab76:name;
+const unique T.Vpb___unnamed_8_4289df81:name;
+const unique T.DeviceObject___unnamed_8_4289df81:name;
+const unique T.Length___unnamed_8_47b72724:name;
+const unique T.FileInformationClass___unnamed_8_47b72724:name;
+const unique T.DeviceTextType___unnamed_8_4b3e3ba3:name;
+const unique T.LocaleId___unnamed_8_4b3e3ba3:name;
+const unique T.__unnamed_4_ab87ddfd___unnamed_8_4f695993:name;
+const unique T.UserApcContext___unnamed_8_4f695993:name;
+const unique T.AllocatedResources___unnamed_8_5cfb6ca4:name;
+const unique T.AllocatedResourcesTranslated___unnamed_8_5cfb6ca4:name;
+const unique T.SecurityInformation___unnamed_8_606438c5:name;
+const unique T.Length___unnamed_8_606438c5:name;
+const unique T.MinimumChannel___unnamed_8_6ad774c0:name;
+const unique T.MaximumChannel___unnamed_8_6ad774c0:name;
+const unique T.Length___unnamed_8_805045cb:name;
+const unique T.FsInformationClass___unnamed_8_805045cb:name;
+const unique T.LowPart___unnamed_8_8684a3e7:name;
+const unique T.HighPart___unnamed_8_8684a3e7:name;
+const unique T.SecurityInformation___unnamed_8_8cc410da:name;
+const unique T.SecurityDescriptor___unnamed_8_8cc410da:name;
+const unique T.InPath___unnamed_8_a47253e0:name;
+const unique T.Reserved___unnamed_8_a47253e0:name;
+const unique T.Type___unnamed_8_a47253e0:name;
+const unique T.AsynchronousParameters___unnamed_8_bbd07f6c:name;
+const unique T.AllocationSize___unnamed_8_bbd07f6c:name;
+const unique T.LowPart___unnamed_8_c9ca8234:name;
+const unique T.HighPart___unnamed_8_c9ca8234:name;
+
+// Type declarations
+
+const unique T.A11CHAR:name;
+const unique T.A19CHAR:name;
+const unique T.A1_CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_DESCRIPTOR:name;
+const unique T.A1_IO_RESOURCE_LIST:name;
+const unique T.A1_LUID_AND_ATTRIBUTES:name;
+const unique T.A256UINT2:name;
+const unique T.A28PFDRIVER_DISPATCH:name;
+const unique T.A2UCHAR:name;
+const unique T.A32UINT2:name;
+const unique T.A33CHAR:name;
+const unique T.A34CHAR:name;
+const unique T.A39CHAR:name;
+const unique T.A3UCHAR:name;
+const unique T.A3UINT4:name;
+const unique T.A3_LUID_AND_ATTRIBUTES:name;
+const unique T.A43CHAR:name;
+const unique T.A4PVOID:name;
+const unique T.A4UINT4:name;
+const unique T.A5_DEVICE_POWER_STATE:name;
+const unique T.A74CHAR:name;
+const unique T.A7_DEVICE_POWER_STATE:name;
+const unique T.A8UCHAR:name;
+const unique T.BUS_QUERY_ID_TYPE:name;
+const unique T.CHAR:name;
+const unique T.DEVICE_TEXT_TYPE:name;
+const unique T.F0:name;
+const unique T.F1:name;
+const unique T.F10:name;
+const unique T.F11:name;
+const unique T.F12:name;
+const unique T.F13:name;
+const unique T.F14:name;
+const unique T.F15:name;
+const unique T.F16:name;
+const unique T.F17:name;
+const unique T.F18:name;
+const unique T.F19:name;
+const unique T.F2:name;
+const unique T.F20:name;
+const unique T.F21:name;
+const unique T.F22:name;
+const unique T.F23:name;
+const unique T.F24:name;
+const unique T.F25:name;
+const unique T.F26:name;
+const unique T.F27:name;
+const unique T.F28:name;
+const unique T.F29:name;
+const unique T.F3:name;
+const unique T.F30:name;
+const unique T.F31:name;
+const unique T.F32:name;
+const unique T.F33:name;
+const unique T.F34:name;
+const unique T.F35:name;
+const unique T.F36:name;
+const unique T.F37:name;
+const unique T.F38:name;
+const unique T.F4:name;
+const unique T.F5:name;
+const unique T.F6:name;
+const unique T.F7:name;
+const unique T.F8:name;
+const unique T.F9:name;
+const unique T.FDRIVER_ADD_DEVICE:name;
+const unique T.FDRIVER_CANCEL:name;
+const unique T.FDRIVER_CONTROL:name;
+const unique T.FDRIVER_DISPATCH:name;
+const unique T.FDRIVER_INITIALIZE:name;
+const unique T.FDRIVER_STARTIO:name;
+const unique T.FDRIVER_UNLOAD:name;
+const unique T.FFAST_IO_ACQUIRE_FILE:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.FFAST_IO_DETACH_DEVICE:name;
+const unique T.FFAST_IO_DEVICE_CONTROL:name;
+const unique T.FFAST_IO_LOCK:name;
+const unique T.FFAST_IO_MDL_READ:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.FFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.FFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.FFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.FFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.FFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.FFAST_IO_QUERY_OPEN:name;
+const unique T.FFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.FFAST_IO_READ:name;
+const unique T.FFAST_IO_READ_COMPRESSED:name;
+const unique T.FFAST_IO_RELEASE_FILE:name;
+const unique T.FFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.FFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.FFAST_IO_UNLOCK_ALL:name;
+const unique T.FFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.FFAST_IO_UNLOCK_SINGLE:name;
+const unique T.FFAST_IO_WRITE:name;
+const unique T.FFAST_IO_WRITE_COMPRESSED:name;
+const unique T.FIO_COMPLETION_ROUTINE:name;
+const unique T.FKDEFERRED_ROUTINE:name;
+const unique T.INT2:name;
+const unique T.INT4:name;
+const unique T.INT8:name;
+const unique T.PA11CHAR:name;
+const unique T.PA19CHAR:name;
+const unique T.PA33CHAR:name;
+const unique T.PA34CHAR:name;
+const unique T.PA39CHAR:name;
+const unique T.PA43CHAR:name;
+const unique T.PA74CHAR:name;
+const unique T.PCHAR:name;
+const unique T.PF19:name;
+const unique T.PF21:name;
+const unique T.PF23:name;
+const unique T.PF24:name;
+const unique T.PF25:name;
+const unique T.PF33:name;
+const unique T.PF34:name;
+const unique T.PF35:name;
+const unique T.PF36:name;
+const unique T.PF37:name;
+const unique T.PF38:name;
+const unique T.PFDRIVER_ADD_DEVICE:name;
+const unique T.PFDRIVER_CANCEL:name;
+const unique T.PFDRIVER_CONTROL:name;
+const unique T.PFDRIVER_DISPATCH:name;
+const unique T.PFDRIVER_INITIALIZE:name;
+const unique T.PFDRIVER_STARTIO:name;
+const unique T.PFDRIVER_UNLOAD:name;
+const unique T.PFFAST_IO_ACQUIRE_FILE:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_ACQUIRE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_CHECK_IF_POSSIBLE:name;
+const unique T.PFFAST_IO_DETACH_DEVICE:name;
+const unique T.PFFAST_IO_DEVICE_CONTROL:name;
+const unique T.PFFAST_IO_LOCK:name;
+const unique T.PFFAST_IO_MDL_READ:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_READ_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE:name;
+const unique T.PFFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED:name;
+const unique T.PFFAST_IO_PREPARE_MDL_WRITE:name;
+const unique T.PFFAST_IO_QUERY_BASIC_INFO:name;
+const unique T.PFFAST_IO_QUERY_NETWORK_OPEN_INFO:name;
+const unique T.PFFAST_IO_QUERY_OPEN:name;
+const unique T.PFFAST_IO_QUERY_STANDARD_INFO:name;
+const unique T.PFFAST_IO_READ:name;
+const unique T.PFFAST_IO_READ_COMPRESSED:name;
+const unique T.PFFAST_IO_RELEASE_FILE:name;
+const unique T.PFFAST_IO_RELEASE_FOR_CCFLUSH:name;
+const unique T.PFFAST_IO_RELEASE_FOR_MOD_WRITE:name;
+const unique T.PFFAST_IO_UNLOCK_ALL:name;
+const unique T.PFFAST_IO_UNLOCK_ALL_BY_KEY:name;
+const unique T.PFFAST_IO_UNLOCK_SINGLE:name;
+const unique T.PFFAST_IO_WRITE:name;
+const unique T.PFFAST_IO_WRITE_COMPRESSED:name;
+const unique T.PFIO_COMPLETION_ROUTINE:name;
+const unique T.PFKDEFERRED_ROUTINE:name;
+const unique T.PINT4:name;
+const unique T.POWER_ACTION:name;
+const unique T.PPCHAR:name;
+const unique T.PPF24:name;
+const unique T.PPP_FILE_OBJECT:name;
+const unique T.PPVOID:name;
+const unique T.PP_DEVICE_EXTENSION:name;
+const unique T.PP_DEVICE_OBJECT:name;
+const unique T.PP_DRIVER_OBJECT:name;
+const unique T.PP_ERESOURCE:name;
+const unique T.PP_FILE_OBJECT:name;
+const unique T.PP_IRP:name;
+const unique T.PP_LIST_ENTRY:name;
+const unique T.PP_MDL:name;
+const unique T.PP_PORT:name;
+const unique T.PP_UNICODE_STRING:name;
+const unique T.PUCHAR:name;
+const unique T.PUINT2:name;
+const unique T.PUINT4:name;
+const unique T.PVOID:name;
+const unique T.PWMIGUIDREGINFO:name;
+const unique T.P_ACCESS_STATE:name;
+const unique T.P_CM_RESOURCE_LIST:name;
+const unique T.P_COMPRESSED_DATA_INFO:name;
+const unique T.P_DEVICE_CAPABILITIES:name;
+const unique T.P_DEVICE_EXTENSION:name;
+const unique T.P_DEVICE_OBJECT:name;
+const unique T.P_DEVOBJ_EXTENSION:name;
+const unique T.P_DRIVER_EXTENSION:name;
+const unique T.P_DRIVER_OBJECT:name;
+const unique T.P_EPROCESS:name;
+const unique T.P_ERESOURCE:name;
+const unique T.P_ETHREAD:name;
+const unique T.P_FAST_IO_DISPATCH:name;
+const unique T.P_FILE_BASIC_INFORMATION:name;
+const unique T.P_FILE_GET_QUOTA_INFORMATION:name;
+const unique T.P_FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T.P_FILE_OBJECT:name;
+const unique T.P_FILE_STANDARD_INFORMATION:name;
+const unique T.P_GLOBALS:name;
+const unique T.P_GUID:name;
+const unique T.P_INTERFACE:name;
+const unique T.P_IO_COMPLETION_CONTEXT:name;
+const unique T.P_IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T.P_IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T.P_IO_SECURITY_CONTEXT:name;
+const unique T.P_IO_STACK_LOCATION:name;
+const unique T.P_IO_STATUS_BLOCK:name;
+const unique T.P_IO_TIMER:name;
+const unique T.P_IRP:name;
+const unique T.P_KAPC:name;
+const unique T.P_KDPC:name;
+const unique T.P_KEVENT:name;
+const unique T.P_KSEMAPHORE:name;
+const unique T.P_KTHREAD:name;
+const unique T.P_LARGE_INTEGER:name;
+const unique T.P_LIST_ENTRY:name;
+const unique T.P_MDL:name;
+const unique T.P_MOUSE_INPUT_DATA:name;
+const unique T.P_OWNER_ENTRY:name;
+const unique T.P_PORT:name;
+const unique T.P_POWER_SEQUENCE:name;
+const unique T.P_SCSI_REQUEST_BLOCK:name;
+const unique T.P_SECTION_OBJECT_POINTERS:name;
+const unique T.P_SECURITY_QUALITY_OF_SERVICE:name;
+const unique T.P_UNICODE_STRING:name;
+const unique T.P_VPB:name;
+const unique T.UCHAR:name;
+const unique T.UINT2:name;
+const unique T.UINT4:name;
+const unique T.VOID:name;
+const unique T.WMIENABLEDISABLECONTROL:name;
+const unique T.WMIGUIDREGINFO:name;
+const unique T._ACCESS_STATE:name;
+const unique T._CM_FULL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_DESCRIPTOR:name;
+const unique T._CM_PARTIAL_RESOURCE_LIST:name;
+const unique T._CM_RESOURCE_LIST:name;
+const unique T._COMPRESSED_DATA_INFO:name;
+const unique T._DEVICE_CAPABILITIES:name;
+const unique T._DEVICE_EXTENSION:name;
+const unique T._DEVICE_OBJECT:name;
+const unique T._DEVICE_POWER_STATE:name;
+const unique T._DEVICE_RELATION_TYPE:name;
+const unique T._DEVICE_USAGE_NOTIFICATION_TYPE:name;
+const unique T._DEVOBJ_EXTENSION:name;
+const unique T._DISPATCHER_HEADER:name;
+const unique T._DRIVER_EXTENSION:name;
+const unique T._DRIVER_OBJECT:name;
+const unique T._EPROCESS:name;
+const unique T._ERESOURCE:name;
+const unique T._ETHREAD:name;
+const unique T._FAST_IO_DISPATCH:name;
+const unique T._FAST_MUTEX:name;
+const unique T._FILE_BASIC_INFORMATION:name;
+const unique T._FILE_GET_QUOTA_INFORMATION:name;
+const unique T._FILE_INFORMATION_CLASS:name;
+const unique T._FILE_NETWORK_OPEN_INFORMATION:name;
+const unique T._FILE_OBJECT:name;
+const unique T._FILE_STANDARD_INFORMATION:name;
+const unique T._FSINFOCLASS:name;
+const unique T._GLOBALS:name;
+const unique T._GUID:name;
+const unique T._INITIAL_PRIVILEGE_SET:name;
+const unique T._INTERFACE:name;
+const unique T._INTERFACE_TYPE:name;
+const unique T._IO_ALLOCATION_ACTION:name;
+const unique T._IO_COMPLETION_CONTEXT:name;
+const unique T._IO_REMOVE_LOCK:name;
+const unique T._IO_REMOVE_LOCK_COMMON_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_DBG_BLOCK:name;
+const unique T._IO_REMOVE_LOCK_TRACKING_BLOCK:name;
+const unique T._IO_RESOURCE_DESCRIPTOR:name;
+const unique T._IO_RESOURCE_LIST:name;
+const unique T._IO_RESOURCE_REQUIREMENTS_LIST:name;
+const unique T._IO_SECURITY_CONTEXT:name;
+const unique T._IO_STACK_LOCATION:name;
+const unique T._IO_STATUS_BLOCK:name;
+const unique T._IO_TIMER:name;
+const unique T._IRP:name;
+const unique T._IRQ_DEVICE_POLICY:name;
+const unique T._IRQ_PRIORITY:name;
+const unique T._KAPC:name;
+const unique T._KDEVICE_QUEUE:name;
+const unique T._KDEVICE_QUEUE_ENTRY:name;
+const unique T._KDPC:name;
+const unique T._KEVENT:name;
+const unique T._KSEMAPHORE:name;
+const unique T._KTHREAD:name;
+const unique T._LARGE_INTEGER:name;
+const unique T._LIST_ENTRY:name;
+const unique T._LUID:name;
+const unique T._LUID_AND_ATTRIBUTES:name;
+const unique T._MDL:name;
+const unique T._MOUSE_ATTRIBUTES:name;
+const unique T._MOUSE_INPUT_DATA:name;
+const unique T._OWNER_ENTRY:name;
+const unique T._PORT:name;
+const unique T._POWER_SEQUENCE:name;
+const unique T._POWER_STATE:name;
+const unique T._POWER_STATE_TYPE:name;
+const unique T._PRIVILEGE_SET:name;
+const unique T._SCSI_REQUEST_BLOCK:name;
+const unique T._SECTION_OBJECT_POINTERS:name;
+const unique T._SECURITY_IMPERSONATION_LEVEL:name;
+const unique T._SECURITY_QUALITY_OF_SERVICE:name;
+const unique T._SECURITY_SUBJECT_CONTEXT:name;
+const unique T._SYSTEM_POWER_STATE:name;
+const unique T._SYSTEM_POWER_STATE_CONTEXT:name;
+const unique T._UNICODE_STRING:name;
+const unique T._VPB:name;
+const unique T._WAIT_CONTEXT_BLOCK:name;
+const unique T._WMILIB_CONTEXT:name;
+const unique T.__unnamed_12_06b9ee6e:name;
+const unique T.__unnamed_12_0882bd02:name;
+const unique T.__unnamed_12_264d0dab:name;
+const unique T.__unnamed_12_2e80217b:name;
+const unique T.__unnamed_12_5cc7ace2:name;
+const unique T.__unnamed_12_6374506e:name;
+const unique T.__unnamed_12_68a4278e:name;
+const unique T.__unnamed_12_79ed2653:name;
+const unique T.__unnamed_12_7da594c0:name;
+const unique T.__unnamed_12_9873e05d:name;
+const unique T.__unnamed_12_9cc8cebc:name;
+const unique T.__unnamed_12_b98da82e:name;
+const unique T.__unnamed_12_c2880e88:name;
+const unique T.__unnamed_12_c49ab31a:name;
+const unique T.__unnamed_12_c6ed93f3:name;
+const unique T.__unnamed_12_ced61554:name;
+const unique T.__unnamed_12_d9c44df5:name;
+const unique T.__unnamed_12_db3dcbfc:name;
+const unique T.__unnamed_12_fb26b3fc:name;
+const unique T.__unnamed_16_22e4d054:name;
+const unique T.__unnamed_16_39b626ad:name;
+const unique T.__unnamed_16_56c011d7:name;
+const unique T.__unnamed_16_5fed8f23:name;
+const unique T.__unnamed_16_6be9abe0:name;
+const unique T.__unnamed_16_78879a38:name;
+const unique T.__unnamed_16_804a2f24:name;
+const unique T.__unnamed_16_8586693f:name;
+const unique T.__unnamed_16_8831e65f:name;
+const unique T.__unnamed_16_8c2d663a:name;
+const unique T.__unnamed_16_913b9a7a:name;
+const unique T.__unnamed_16_94d1d1c7:name;
+const unique T.__unnamed_16_a2fab4da:name;
+const unique T.__unnamed_16_ae643f17:name;
+const unique T.__unnamed_16_c1b29316:name;
+const unique T.__unnamed_16_cbd53ed4:name;
+const unique T.__unnamed_16_db70db6e:name;
+const unique T.__unnamed_16_ef4b6307:name;
+const unique T.__unnamed_16_fdda1f62:name;
+const unique T.__unnamed_1_1394de4b:name;
+const unique T.__unnamed_1_2bb39c56:name;
+const unique T.__unnamed_1_9fa0583a:name;
+const unique T.__unnamed_1_e30779f5:name;
+const unique T.__unnamed_20_83d468e4:name;
+const unique T.__unnamed_24_035931da:name;
+const unique T.__unnamed_24_38e128db:name;
+const unique T.__unnamed_24_9500ea34:name;
+const unique T.__unnamed_24_9734802c:name;
+const unique T.__unnamed_24_af62813f:name;
+const unique T.__unnamed_24_c0555099:name;
+const unique T.__unnamed_24_d7c4ec3a:name;
+const unique T.__unnamed_2_196a7f56:name;
+const unique T.__unnamed_40_a0414182:name;
+const unique T.__unnamed_40_d90496f4:name;
+const unique T.__unnamed_44_a7026dca:name;
+const unique T.__unnamed_48_c1da9fa5:name;
+const unique T.__unnamed_4_0510b147:name;
+const unique T.__unnamed_4_0a569078:name;
+const unique T.__unnamed_4_16aff58e:name;
+const unique T.__unnamed_4_40bf8e34:name;
+const unique T.__unnamed_4_46b62f69:name;
+const unique T.__unnamed_4_73d46255:name;
+const unique T.__unnamed_4_765e3037:name;
+const unique T.__unnamed_4_846adf3f:name;
+const unique T.__unnamed_4_8dd73d30:name;
+const unique T.__unnamed_4_957e0d74:name;
+const unique T.__unnamed_4_9c11ed91:name;
+const unique T.__unnamed_4_a58d40c8:name;
+const unique T.__unnamed_4_a7aa989c:name;
+const unique T.__unnamed_4_a7d0864c:name;
+const unique T.__unnamed_4_aa20b426:name;
+const unique T.__unnamed_4_ab87ddfd:name;
+const unique T.__unnamed_4_b016b1e1:name;
+const unique T.__unnamed_4_b060dea6:name;
+const unique T.__unnamed_4_b4f5a780:name;
+const unique T.__unnamed_4_b5247f10:name;
+const unique T.__unnamed_4_c1e23b02:name;
+const unique T.__unnamed_4_c9b2e921:name;
+const unique T.__unnamed_4_fa7b96a7:name;
+const unique T.__unnamed_8_09ad2712:name;
+const unique T.__unnamed_8_21ac1dba:name;
+const unique T.__unnamed_8_27d3ab76:name;
+const unique T.__unnamed_8_4289df81:name;
+const unique T.__unnamed_8_47b72724:name;
+const unique T.__unnamed_8_4b3e3ba3:name;
+const unique T.__unnamed_8_4f695993:name;
+const unique T.__unnamed_8_5cfb6ca4:name;
+const unique T.__unnamed_8_606438c5:name;
+const unique T.__unnamed_8_6ad774c0:name;
+const unique T.__unnamed_8_805045cb:name;
+const unique T.__unnamed_8_8684a3e7:name;
+const unique T.__unnamed_8_8cc410da:name;
+const unique T.__unnamed_8_a47253e0:name;
+const unique T.__unnamed_8_bbd07f6c:name;
+const unique T.__unnamed_8_c9ca8234:name;
+
+function AssocClassList__GLOBALS(int) returns (int);
+function AssocClassList__GLOBALSInv(int) returns (int);
+function _S_AssocClassList__GLOBALS([int]bool) returns ([int]bool);
+function _S_AssocClassList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x))} AssocClassList__GLOBALSInv(AssocClassList__GLOBALS(x)) == x);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALS(AssocClassList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALS(S)[x]} _S_AssocClassList__GLOBALS(S)[x] <==> S[AssocClassList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_AssocClassList__GLOBALSInv(S)[x]} _S_AssocClassList__GLOBALSInv(S)[x] <==> S[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALS(S)} S[x] ==> _S_AssocClassList__GLOBALS(S)[AssocClassList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_AssocClassList__GLOBALSInv(S)} S[x] ==> _S_AssocClassList__GLOBALSInv(S)[AssocClassList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {AssocClassList__GLOBALS(x)} AssocClassList__GLOBALS(x) == x + 8);
+axiom (forall x:int :: {AssocClassList__GLOBALSInv(x)} AssocClassList__GLOBALSInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == AssocClassList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == AssocClassList__GLOBALSInv(x));
+function Buffer__UNICODE_STRING(int) returns (int);
+function Buffer__UNICODE_STRINGInv(int) returns (int);
+function _S_Buffer__UNICODE_STRING([int]bool) returns ([int]bool);
+function _S_Buffer__UNICODE_STRINGInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x))} Buffer__UNICODE_STRINGInv(Buffer__UNICODE_STRING(x)) == x);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRING(Buffer__UNICODE_STRINGInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRING(S)[x]} _S_Buffer__UNICODE_STRING(S)[x] <==> S[Buffer__UNICODE_STRINGInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Buffer__UNICODE_STRINGInv(S)[x]} _S_Buffer__UNICODE_STRINGInv(S)[x] <==> S[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRING(S)} S[x] ==> _S_Buffer__UNICODE_STRING(S)[Buffer__UNICODE_STRING(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Buffer__UNICODE_STRINGInv(S)} S[x] ==> _S_Buffer__UNICODE_STRINGInv(S)[Buffer__UNICODE_STRINGInv(x)]);
+
+axiom (forall x:int :: {Buffer__UNICODE_STRING(x)} Buffer__UNICODE_STRING(x) == x + 4);
+axiom (forall x:int :: {Buffer__UNICODE_STRINGInv(x)} Buffer__UNICODE_STRINGInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Buffer__UNICODE_STRINGInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Buffer__UNICODE_STRINGInv(x));
+function DataIn__DEVICE_EXTENSION(int) returns (int);
+function DataIn__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataIn__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataIn__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x))} DataIn__DEVICE_EXTENSIONInv(DataIn__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSION(DataIn__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSION(S)[x]} _S_DataIn__DEVICE_EXTENSION(S)[x] <==> S[DataIn__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataIn__DEVICE_EXTENSIONInv(S)[x]} _S_DataIn__DEVICE_EXTENSIONInv(S)[x] <==> S[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSION(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSION(S)[DataIn__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataIn__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataIn__DEVICE_EXTENSIONInv(S)[DataIn__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSION(x)} DataIn__DEVICE_EXTENSION(x) == x + 132);
+axiom (forall x:int :: {DataIn__DEVICE_EXTENSIONInv(x)} DataIn__DEVICE_EXTENSIONInv(x) == x - 132);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 132, 1) == DataIn__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 132)} MINUS_LEFT_PTR(x, 1, 132) == DataIn__DEVICE_EXTENSIONInv(x));
+function DataOut__DEVICE_EXTENSION(int) returns (int);
+function DataOut__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_DataOut__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_DataOut__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x))} DataOut__DEVICE_EXTENSIONInv(DataOut__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSION(DataOut__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSION(S)[x]} _S_DataOut__DEVICE_EXTENSION(S)[x] <==> S[DataOut__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DataOut__DEVICE_EXTENSIONInv(S)[x]} _S_DataOut__DEVICE_EXTENSIONInv(S)[x] <==> S[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSION(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSION(S)[DataOut__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DataOut__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_DataOut__DEVICE_EXTENSIONInv(S)[DataOut__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSION(x)} DataOut__DEVICE_EXTENSION(x) == x + 136);
+axiom (forall x:int :: {DataOut__DEVICE_EXTENSIONInv(x)} DataOut__DEVICE_EXTENSIONInv(x) == x - 136);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 136, 1) == DataOut__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 136)} MINUS_LEFT_PTR(x, 1, 136) == DataOut__DEVICE_EXTENSIONInv(x));
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+function DeviceExtension__DEVICE_OBJECTInv(int) returns (int);
+function _S_DeviceExtension__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_DeviceExtension__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x))} DeviceExtension__DEVICE_OBJECTInv(DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECT(S)[x]} _S_DeviceExtension__DEVICE_OBJECT(S)[x] <==> S[DeviceExtension__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_DeviceExtension__DEVICE_OBJECTInv(S)[x]} _S_DeviceExtension__DEVICE_OBJECTInv(S)[x] <==> S[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECT(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECT(S)[DeviceExtension__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_DeviceExtension__DEVICE_OBJECTInv(S)} S[x] ==> _S_DeviceExtension__DEVICE_OBJECTInv(S)[DeviceExtension__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECTInv(x)} DeviceExtension__DEVICE_OBJECTInv(x) == x - 40);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 40, 1) == DeviceExtension__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 40)} MINUS_LEFT_PTR(x, 1, 40) == DeviceExtension__DEVICE_OBJECTInv(x));
+function Enabled__DEVICE_EXTENSION(int) returns (int);
+function Enabled__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Enabled__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Enabled__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x))} Enabled__DEVICE_EXTENSIONInv(Enabled__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSION(Enabled__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSION(S)[x]} _S_Enabled__DEVICE_EXTENSION(S)[x] <==> S[Enabled__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__DEVICE_EXTENSIONInv(S)[x]} _S_Enabled__DEVICE_EXTENSIONInv(S)[x] <==> S[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSION(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSION(S)[Enabled__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Enabled__DEVICE_EXTENSIONInv(S)[Enabled__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSION(x)} Enabled__DEVICE_EXTENSION(x) == x + 264);
+axiom (forall x:int :: {Enabled__DEVICE_EXTENSIONInv(x)} Enabled__DEVICE_EXTENSIONInv(x) == x - 264);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 264, 1) == Enabled__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 264)} MINUS_LEFT_PTR(x, 1, 264) == Enabled__DEVICE_EXTENSIONInv(x));
+function Enabled__PORT(int) returns (int);
+function Enabled__PORTInv(int) returns (int);
+function _S_Enabled__PORT([int]bool) returns ([int]bool);
+function _S_Enabled__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Enabled__PORTInv(Enabled__PORT(x))} Enabled__PORTInv(Enabled__PORT(x)) == x);
+axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORT(Enabled__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORT(S)[x]} _S_Enabled__PORT(S)[x] <==> S[Enabled__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Enabled__PORTInv(S)[x]} _S_Enabled__PORTInv(S)[x] <==> S[Enabled__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORT(S)} S[x] ==> _S_Enabled__PORT(S)[Enabled__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Enabled__PORTInv(S)} S[x] ==> _S_Enabled__PORTInv(S)[Enabled__PORTInv(x)]);
+
+axiom (forall x:int :: {Enabled__PORT(x)} Enabled__PORT(x) == x + 8);
+axiom (forall x:int :: {Enabled__PORTInv(x)} Enabled__PORTInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == Enabled__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == Enabled__PORTInv(x));
+function File__DEVICE_EXTENSION(int) returns (int);
+function File__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_File__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_File__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x))} File__DEVICE_EXTENSIONInv(File__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSION(File__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSION(S)[x]} _S_File__DEVICE_EXTENSION(S)[x] <==> S[File__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__DEVICE_EXTENSIONInv(S)[x]} _S_File__DEVICE_EXTENSIONInv(S)[x] <==> S[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSION(S)} S[x] ==> _S_File__DEVICE_EXTENSION(S)[File__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_File__DEVICE_EXTENSIONInv(S)[File__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {File__DEVICE_EXTENSION(x)} File__DEVICE_EXTENSION(x) == x + 260);
+axiom (forall x:int :: {File__DEVICE_EXTENSIONInv(x)} File__DEVICE_EXTENSIONInv(x) == x - 260);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 260, 1) == File__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 260)} MINUS_LEFT_PTR(x, 1, 260) == File__DEVICE_EXTENSIONInv(x));
+function File__PORT(int) returns (int);
+function File__PORTInv(int) returns (int);
+function _S_File__PORT([int]bool) returns ([int]bool);
+function _S_File__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {File__PORTInv(File__PORT(x))} File__PORTInv(File__PORT(x)) == x);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORT(File__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_File__PORT(S)[x]} _S_File__PORT(S)[x] <==> S[File__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_File__PORTInv(S)[x]} _S_File__PORTInv(S)[x] <==> S[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORT(S)} S[x] ==> _S_File__PORT(S)[File__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_File__PORTInv(S)} S[x] ==> _S_File__PORTInv(S)[File__PORTInv(x)]);
+
+axiom (forall x:int :: {File__PORT(x)} File__PORT(x) == x + 0);
+axiom (forall x:int :: {File__PORTInv(x)} File__PORTInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == File__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == File__PORTInv(x));
+function Flink__LIST_ENTRY(int) returns (int);
+function Flink__LIST_ENTRYInv(int) returns (int);
+function _S_Flink__LIST_ENTRY([int]bool) returns ([int]bool);
+function _S_Flink__LIST_ENTRYInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x))} Flink__LIST_ENTRYInv(Flink__LIST_ENTRY(x)) == x);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRY(Flink__LIST_ENTRYInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRY(S)[x]} _S_Flink__LIST_ENTRY(S)[x] <==> S[Flink__LIST_ENTRYInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Flink__LIST_ENTRYInv(S)[x]} _S_Flink__LIST_ENTRYInv(S)[x] <==> S[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRY(S)} S[x] ==> _S_Flink__LIST_ENTRY(S)[Flink__LIST_ENTRY(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Flink__LIST_ENTRYInv(S)} S[x] ==> _S_Flink__LIST_ENTRYInv(S)[Flink__LIST_ENTRYInv(x)]);
+
+axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
+axiom (forall x:int :: {Flink__LIST_ENTRYInv(x)} Flink__LIST_ENTRYInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Flink__LIST_ENTRYInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Flink__LIST_ENTRYInv(x));
+function Free__PORT(int) returns (int);
+function Free__PORTInv(int) returns (int);
+function _S_Free__PORT([int]bool) returns ([int]bool);
+function _S_Free__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Free__PORTInv(Free__PORT(x))} Free__PORTInv(Free__PORT(x)) == x);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORT(Free__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORT(S)[x]} _S_Free__PORT(S)[x] <==> S[Free__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Free__PORTInv(S)[x]} _S_Free__PORTInv(S)[x] <==> S[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORT(S)} S[x] ==> _S_Free__PORT(S)[Free__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Free__PORTInv(S)} S[x] ==> _S_Free__PORTInv(S)[Free__PORTInv(x)]);
+
+axiom (forall x:int :: {Free__PORT(x)} Free__PORT(x) == x + 11);
+axiom (forall x:int :: {Free__PORTInv(x)} Free__PORTInv(x) == x - 11);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 11, 1) == Free__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 11)} MINUS_LEFT_PTR(x, 1, 11) == Free__PORTInv(x));
+function GrandMaster__GLOBALS(int) returns (int);
+function GrandMaster__GLOBALSInv(int) returns (int);
+function _S_GrandMaster__GLOBALS([int]bool) returns ([int]bool);
+function _S_GrandMaster__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x))} GrandMaster__GLOBALSInv(GrandMaster__GLOBALS(x)) == x);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALS(GrandMaster__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALS(S)[x]} _S_GrandMaster__GLOBALS(S)[x] <==> S[GrandMaster__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_GrandMaster__GLOBALSInv(S)[x]} _S_GrandMaster__GLOBALSInv(S)[x] <==> S[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALS(S)} S[x] ==> _S_GrandMaster__GLOBALS(S)[GrandMaster__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_GrandMaster__GLOBALSInv(S)} S[x] ==> _S_GrandMaster__GLOBALSInv(S)[GrandMaster__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {GrandMaster__GLOBALS(x)} GrandMaster__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {GrandMaster__GLOBALSInv(x)} GrandMaster__GLOBALSInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == GrandMaster__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == GrandMaster__GLOBALSInv(x));
+function InputData__DEVICE_EXTENSION(int) returns (int);
+function InputData__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_InputData__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_InputData__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x))} InputData__DEVICE_EXTENSIONInv(InputData__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSION(InputData__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSION(S)[x]} _S_InputData__DEVICE_EXTENSION(S)[x] <==> S[InputData__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_InputData__DEVICE_EXTENSIONInv(S)[x]} _S_InputData__DEVICE_EXTENSIONInv(S)[x] <==> S[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSION(S)} S[x] ==> _S_InputData__DEVICE_EXTENSION(S)[InputData__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_InputData__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_InputData__DEVICE_EXTENSIONInv(S)[InputData__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {InputData__DEVICE_EXTENSION(x)} InputData__DEVICE_EXTENSION(x) == x + 128);
+axiom (forall x:int :: {InputData__DEVICE_EXTENSIONInv(x)} InputData__DEVICE_EXTENSIONInv(x) == x - 128);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 128, 1) == InputData__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 128)} MINUS_LEFT_PTR(x, 1, 128) == InputData__DEVICE_EXTENSIONInv(x));
+function LegacyDeviceList__GLOBALS(int) returns (int);
+function LegacyDeviceList__GLOBALSInv(int) returns (int);
+function _S_LegacyDeviceList__GLOBALS([int]bool) returns ([int]bool);
+function _S_LegacyDeviceList__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x))} LegacyDeviceList__GLOBALSInv(LegacyDeviceList__GLOBALS(x)) == x);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALS(LegacyDeviceList__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALS(S)[x]} _S_LegacyDeviceList__GLOBALS(S)[x] <==> S[LegacyDeviceList__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_LegacyDeviceList__GLOBALSInv(S)[x]} _S_LegacyDeviceList__GLOBALSInv(S)[x] <==> S[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALS(S)} S[x] ==> _S_LegacyDeviceList__GLOBALS(S)[LegacyDeviceList__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_LegacyDeviceList__GLOBALSInv(S)} S[x] ==> _S_LegacyDeviceList__GLOBALSInv(S)[LegacyDeviceList__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {LegacyDeviceList__GLOBALS(x)} LegacyDeviceList__GLOBALS(x) == x + 864);
+axiom (forall x:int :: {LegacyDeviceList__GLOBALSInv(x)} LegacyDeviceList__GLOBALSInv(x) == x - 864);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 864, 1) == LegacyDeviceList__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 864)} MINUS_LEFT_PTR(x, 1, 864) == LegacyDeviceList__GLOBALSInv(x));
+function Link__DEVICE_EXTENSION(int) returns (int);
+function Link__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Link__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Link__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x))} Link__DEVICE_EXTENSIONInv(Link__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSION(Link__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSION(S)[x]} _S_Link__DEVICE_EXTENSION(S)[x] <==> S[Link__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Link__DEVICE_EXTENSIONInv(S)[x]} _S_Link__DEVICE_EXTENSIONInv(S)[x] <==> S[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSION(S)} S[x] ==> _S_Link__DEVICE_EXTENSION(S)[Link__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Link__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Link__DEVICE_EXTENSIONInv(S)[Link__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Link__DEVICE_EXTENSION(x)} Link__DEVICE_EXTENSION(x) == x + 252);
+axiom (forall x:int :: {Link__DEVICE_EXTENSIONInv(x)} Link__DEVICE_EXTENSIONInv(x) == x - 252);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 252, 1) == Link__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 252)} MINUS_LEFT_PTR(x, 1, 252) == Link__DEVICE_EXTENSIONInv(x));
+function NumAssocClass__GLOBALS(int) returns (int);
+function NumAssocClass__GLOBALSInv(int) returns (int);
+function _S_NumAssocClass__GLOBALS([int]bool) returns ([int]bool);
+function _S_NumAssocClass__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x))} NumAssocClass__GLOBALSInv(NumAssocClass__GLOBALS(x)) == x);
+axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALS(NumAssocClass__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALS(S)[x]} _S_NumAssocClass__GLOBALS(S)[x] <==> S[NumAssocClass__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_NumAssocClass__GLOBALSInv(S)[x]} _S_NumAssocClass__GLOBALSInv(S)[x] <==> S[NumAssocClass__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALS(S)} S[x] ==> _S_NumAssocClass__GLOBALS(S)[NumAssocClass__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_NumAssocClass__GLOBALSInv(S)} S[x] ==> _S_NumAssocClass__GLOBALSInv(S)[NumAssocClass__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {NumAssocClass__GLOBALS(x)} NumAssocClass__GLOBALS(x) == x + 12);
+axiom (forall x:int :: {NumAssocClass__GLOBALSInv(x)} NumAssocClass__GLOBALSInv(x) == x - 12);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 12, 1) == NumAssocClass__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 12)} MINUS_LEFT_PTR(x, 1, 12) == NumAssocClass__GLOBALSInv(x));
+function PnP__DEVICE_EXTENSION(int) returns (int);
+function PnP__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_PnP__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_PnP__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x))} PnP__DEVICE_EXTENSIONInv(PnP__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSION(PnP__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSION(S)[x]} _S_PnP__DEVICE_EXTENSION(S)[x] <==> S[PnP__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_PnP__DEVICE_EXTENSIONInv(S)[x]} _S_PnP__DEVICE_EXTENSIONInv(S)[x] <==> S[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSION(S)} S[x] ==> _S_PnP__DEVICE_EXTENSION(S)[PnP__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_PnP__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_PnP__DEVICE_EXTENSIONInv(S)[PnP__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {PnP__DEVICE_EXTENSION(x)} PnP__DEVICE_EXTENSION(x) == x + 104);
+axiom (forall x:int :: {PnP__DEVICE_EXTENSIONInv(x)} PnP__DEVICE_EXTENSIONInv(x) == x - 104);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 104, 1) == PnP__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 104)} MINUS_LEFT_PTR(x, 1, 104) == PnP__DEVICE_EXTENSIONInv(x));
+function Port__PORT(int) returns (int);
+function Port__PORTInv(int) returns (int);
+function _S_Port__PORT([int]bool) returns ([int]bool);
+function _S_Port__PORTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Port__PORTInv(Port__PORT(x))} Port__PORTInv(Port__PORT(x)) == x);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORT(Port__PORTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORT(S)[x]} _S_Port__PORT(S)[x] <==> S[Port__PORTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Port__PORTInv(S)[x]} _S_Port__PORTInv(S)[x] <==> S[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORT(S)} S[x] ==> _S_Port__PORT(S)[Port__PORT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Port__PORTInv(S)} S[x] ==> _S_Port__PORTInv(S)[Port__PORTInv(x)]);
+
+axiom (forall x:int :: {Port__PORT(x)} Port__PORT(x) == x + 4);
+axiom (forall x:int :: {Port__PORTInv(x)} Port__PORTInv(x) == x - 4);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 4, 1) == Port__PORTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 4)} MINUS_LEFT_PTR(x, 1, 4) == Port__PORTInv(x));
+function RegistryPath__GLOBALS(int) returns (int);
+function RegistryPath__GLOBALSInv(int) returns (int);
+function _S_RegistryPath__GLOBALS([int]bool) returns ([int]bool);
+function _S_RegistryPath__GLOBALSInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x))} RegistryPath__GLOBALSInv(RegistryPath__GLOBALS(x)) == x);
+axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALS(RegistryPath__GLOBALSInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALS(S)[x]} _S_RegistryPath__GLOBALS(S)[x] <==> S[RegistryPath__GLOBALSInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_RegistryPath__GLOBALSInv(S)[x]} _S_RegistryPath__GLOBALSInv(S)[x] <==> S[RegistryPath__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALS(S)} S[x] ==> _S_RegistryPath__GLOBALS(S)[RegistryPath__GLOBALS(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_RegistryPath__GLOBALSInv(S)} S[x] ==> _S_RegistryPath__GLOBALSInv(S)[RegistryPath__GLOBALSInv(x)]);
+
+axiom (forall x:int :: {RegistryPath__GLOBALS(x)} RegistryPath__GLOBALS(x) == x + 336);
+axiom (forall x:int :: {RegistryPath__GLOBALSInv(x)} RegistryPath__GLOBALSInv(x) == x - 336);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 336, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 336, 1) == RegistryPath__GLOBALSInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 336)} MINUS_LEFT_PTR(x, 1, 336) == RegistryPath__GLOBALSInv(x));
+function Self__DEVICE_EXTENSION(int) returns (int);
+function Self__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Self__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Self__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x))} Self__DEVICE_EXTENSIONInv(Self__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSION(Self__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSION(S)[x]} _S_Self__DEVICE_EXTENSION(S)[x] <==> S[Self__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Self__DEVICE_EXTENSIONInv(S)[x]} _S_Self__DEVICE_EXTENSIONInv(S)[x] <==> S[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSION(S)} S[x] ==> _S_Self__DEVICE_EXTENSION(S)[Self__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Self__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Self__DEVICE_EXTENSIONInv(S)[Self__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Self__DEVICE_EXTENSION(x)} Self__DEVICE_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {Self__DEVICE_EXTENSIONInv(x)} Self__DEVICE_EXTENSIONInv(x) == x - 0);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 0, 1) == Self__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 0)} MINUS_LEFT_PTR(x, 1, 0) == Self__DEVICE_EXTENSIONInv(x));
+function SpinLock__DEVICE_EXTENSION(int) returns (int);
+function SpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_SpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_SpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x))} SpinLock__DEVICE_EXTENSIONInv(SpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSION(SpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSION(S)[x]} _S_SpinLock__DEVICE_EXTENSION(S)[x] <==> S[SpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_SpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_SpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSION(S)[SpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_SpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_SpinLock__DEVICE_EXTENSIONInv(S)[SpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSION(x)} SpinLock__DEVICE_EXTENSION(x) == x + 152);
+axiom (forall x:int :: {SpinLock__DEVICE_EXTENSIONInv(x)} SpinLock__DEVICE_EXTENSIONInv(x) == x - 152);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 152, 1) == SpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 152)} MINUS_LEFT_PTR(x, 1, 152) == SpinLock__DEVICE_EXTENSIONInv(x));
+function StackSize__DEVICE_OBJECT(int) returns (int);
+function StackSize__DEVICE_OBJECTInv(int) returns (int);
+function _S_StackSize__DEVICE_OBJECT([int]bool) returns ([int]bool);
+function _S_StackSize__DEVICE_OBJECTInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x))} StackSize__DEVICE_OBJECTInv(StackSize__DEVICE_OBJECT(x)) == x);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECT(StackSize__DEVICE_OBJECTInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECT(S)[x]} _S_StackSize__DEVICE_OBJECT(S)[x] <==> S[StackSize__DEVICE_OBJECTInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_StackSize__DEVICE_OBJECTInv(S)[x]} _S_StackSize__DEVICE_OBJECTInv(S)[x] <==> S[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECT(S)} S[x] ==> _S_StackSize__DEVICE_OBJECT(S)[StackSize__DEVICE_OBJECT(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_StackSize__DEVICE_OBJECTInv(S)} S[x] ==> _S_StackSize__DEVICE_OBJECTInv(S)[StackSize__DEVICE_OBJECTInv(x)]);
+
+axiom (forall x:int :: {StackSize__DEVICE_OBJECT(x)} StackSize__DEVICE_OBJECT(x) == x + 48);
+axiom (forall x:int :: {StackSize__DEVICE_OBJECTInv(x)} StackSize__DEVICE_OBJECTInv(x) == x - 48);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 48, 1) == StackSize__DEVICE_OBJECTInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 48)} MINUS_LEFT_PTR(x, 1, 48) == StackSize__DEVICE_OBJECTInv(x));
+function Started__DEVICE_EXTENSION(int) returns (int);
+function Started__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_Started__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_Started__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x))} Started__DEVICE_EXTENSIONInv(Started__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSION(Started__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSION(S)[x]} _S_Started__DEVICE_EXTENSION(S)[x] <==> S[Started__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_Started__DEVICE_EXTENSIONInv(S)[x]} _S_Started__DEVICE_EXTENSIONInv(S)[x] <==> S[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSION(S)} S[x] ==> _S_Started__DEVICE_EXTENSION(S)[Started__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_Started__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_Started__DEVICE_EXTENSIONInv(S)[Started__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {Started__DEVICE_EXTENSION(x)} Started__DEVICE_EXTENSION(x) == x + 105);
+axiom (forall x:int :: {Started__DEVICE_EXTENSIONInv(x)} Started__DEVICE_EXTENSIONInv(x) == x - 105);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 105, 1) == Started__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 105)} MINUS_LEFT_PTR(x, 1, 105) == Started__DEVICE_EXTENSIONInv(x));
+function TopPort__DEVICE_EXTENSION(int) returns (int);
+function TopPort__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_TopPort__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_TopPort__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x))} TopPort__DEVICE_EXTENSIONInv(TopPort__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSION(TopPort__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSION(S)[x]} _S_TopPort__DEVICE_EXTENSION(S)[x] <==> S[TopPort__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_TopPort__DEVICE_EXTENSIONInv(S)[x]} _S_TopPort__DEVICE_EXTENSIONInv(S)[x] <==> S[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSION(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSION(S)[TopPort__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_TopPort__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_TopPort__DEVICE_EXTENSIONInv(S)[TopPort__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSION(x)} TopPort__DEVICE_EXTENSION(x) == x + 8);
+axiom (forall x:int :: {TopPort__DEVICE_EXTENSIONInv(x)} TopPort__DEVICE_EXTENSIONInv(x) == x - 8);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 8, 1) == TopPort__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 8)} MINUS_LEFT_PTR(x, 1, 8) == TopPort__DEVICE_EXTENSIONInv(x));
+function UnitId__DEVICE_EXTENSION(int) returns (int);
+function UnitId__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_UnitId__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_UnitId__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x))} UnitId__DEVICE_EXTENSIONInv(UnitId__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSION(UnitId__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSION(S)[x]} _S_UnitId__DEVICE_EXTENSION(S)[x] <==> S[UnitId__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_UnitId__DEVICE_EXTENSIONInv(S)[x]} _S_UnitId__DEVICE_EXTENSIONInv(S)[x] <==> S[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSION(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSION(S)[UnitId__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_UnitId__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_UnitId__DEVICE_EXTENSIONInv(S)[UnitId__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSION(x)} UnitId__DEVICE_EXTENSION(x) == x + 176);
+axiom (forall x:int :: {UnitId__DEVICE_EXTENSIONInv(x)} UnitId__DEVICE_EXTENSIONInv(x) == x - 176);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 176, 1) == UnitId__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 176)} MINUS_LEFT_PTR(x, 1, 176) == UnitId__DEVICE_EXTENSIONInv(x));
+function WaitWakeSpinLock__DEVICE_EXTENSION(int) returns (int);
+function WaitWakeSpinLock__DEVICE_EXTENSIONInv(int) returns (int);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSION([int]bool) returns ([int]bool);
+function _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv([int]bool) returns ([int]bool);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x))} WaitWakeSpinLock__DEVICE_EXTENSIONInv(WaitWakeSpinLock__DEVICE_EXTENSION(x)) == x);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSION(WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)) == x);
+
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+axiom (forall x:int, S:[int]bool :: {_S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x]} _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[x] <==> S[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSION(S)[WaitWakeSpinLock__DEVICE_EXTENSION(x)]);
+axiom (forall x:int, S:[int]bool :: {S[x], _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)} S[x] ==> _S_WaitWakeSpinLock__DEVICE_EXTENSIONInv(S)[WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)]);
+
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSION(x)} WaitWakeSpinLock__DEVICE_EXTENSION(x) == x + 108);
+axiom (forall x:int :: {WaitWakeSpinLock__DEVICE_EXTENSIONInv(x)} WaitWakeSpinLock__DEVICE_EXTENSIONInv(x) == x - 108);
+axiom (forall x:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, 108, 1) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+axiom (forall x:int :: {MINUS_LEFT_PTR(x, 1, 108)} MINUS_LEFT_PTR(x, 1, 108) == WaitWakeSpinLock__DEVICE_EXTENSIONInv(x));
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure nondet_choice() returns (x:int);
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+var Res_DEVICE_STACK:[int]int;
+var Res_DEV_EXTN:[int]int;
+var Res_DEV_OBJ_INIT:[int]int;
+var Res_SPIN_LOCK:[int]int;
+
+
+
+////////////////////
+// Between predicate
+////////////////////
+function ReachBetween(f: [int]int, x: int, y: int, z: int) returns (bool);
+function ReachAvoiding(f: [int]int, x: int, y: int, z: int) returns (bool);
+
+
+//////////////////////////
+// Between set constructor
+//////////////////////////
+function ReachBetweenSet(f: [int]int, x: int, z: int) returns ([int]bool);
+
+////////////////////////////////////////////////////
+// axioms relating ReachBetween and ReachBetweenSet
+////////////////////////////////////////////////////
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetweenSet(f, x, z)[y]} ReachBetweenSet(f, x, z)[y] <==> ReachBetween(f, x, y, z));
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z), ReachBetweenSet(f, x, z)} ReachBetween(f, x, y, z) ==> ReachBetweenSet(f, x, z)[y]);
+axiom(forall f: [int]int, x: int, z: int :: {ReachBetweenSet(f, x, z)} ReachBetween(f, x, x, x));
+
+
+//////////////////////////
+// Axioms for ReachBetween
+//////////////////////////
+
+// reflexive
+axiom(forall f: [int]int, x: int :: ReachBetween(f, x, x, x));
+
+// step
+//axiom(forall f: [int]int, x: int :: {f[x]} ReachBetween(f, x, f[x], f[x]));
+axiom(forall f: [int]int, x: int, y: int, z: int, w:int :: {ReachBetween(f, y, z, w), f[x]} ReachBetween(f, x, f[x], f[x]));
+
+// reach
+axiom(forall f: [int]int, x: int, y: int :: {f[x], ReachBetween(f, x, y, y)} ReachBetween(f, x, y, y) ==> x == y || ReachBetween(f, x, f[x], y));
+
+// cycle
+axiom(forall f: [int]int, x: int, y:int :: {f[x], ReachBetween(f, x, y, y)} f[x] == x && ReachBetween(f, x, y, y) ==> x == y);
+
+// sandwich
+axiom(forall f: [int]int, x: int, y: int :: {ReachBetween(f, x, y, x)} ReachBetween(f, x, y, x) ==> x == y);
+
+// order1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, x, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, x, z, z) ==> ReachBetween(f, x, y, z) || ReachBetween(f, x, z, y));
+
+// order2
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, z)} ReachBetween(f, x, y, z) ==> ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z));
+
+// transitive1
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachBetween(f, x, y, y), ReachBetween(f, y, z, z)} ReachBetween(f, x, y, y) && ReachBetween(f, y, z, z) ==> ReachBetween(f, x, z, z));
+
+// transitive2
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, y, w, z)} ReachBetween(f, x, y, z) && ReachBetween(f, y, w, z) ==> ReachBetween(f, x, y, w) && ReachBetween(f, x, w, z));
+
+// transitive3
+axiom(forall f: [int]int, x: int, y: int, z: int, w: int :: {ReachBetween(f, x, y, z), ReachBetween(f, x, w, y)} ReachBetween(f, x, y, z) && ReachBetween(f, x, w, y) ==> ReachBetween(f, x, w, z) && ReachBetween(f, w, y, z));
+
+// This axiom is required to deal with the incompleteness of the trigger for the reflexive axiom.
+// It cannot be proved using the rest of the axioms.
+axiom(forall f: [int]int, u:int, x: int :: {ReachBetween(f, u, x, x)} ReachBetween(f, u, x, x) ==> ReachBetween(f, u, u, x));
+
+// relation between ReachAvoiding and ReachBetween
+axiom(forall f: [int]int, x: int, y: int, z: int :: {ReachAvoiding(f, x, y, z)}{ReachBetween(f, x, y, z)} ReachAvoiding(f, x, y, z) <==> (ReachBetween(f, x, y, z) || (ReachBetween(f, x, y, y) && !ReachBetween(f, x, z, z))));
+
+// update
+axiom(forall f: [int]int, u: int, v: int, x: int, p: int, q: int :: {ReachAvoiding(f[p := q], u, v, x)} ReachAvoiding(f[p := q], u, v, x) <==> ((ReachAvoiding(f, u, v, p) && ReachAvoiding(f, u, v, x)) || (ReachAvoiding(f, u, p, x) && p != x && ReachAvoiding(f, q, v, p) && ReachAvoiding(f, q, v, x))));
+ ///////////////////////////////
+ // Shifts for linking fields
+ ///////////////////////////////
+function Shift_Flink__LIST_ENTRY(f: [int]int) returns ([int]int);
+axiom( forall f: [int]int, __x:int :: {f[Flink__LIST_ENTRY(__x)],Shift_Flink__LIST_ENTRY(f)} {Shift_Flink__LIST_ENTRY(f)[__x]} Shift_Flink__LIST_ENTRY(f)[__x] == f[Flink__LIST_ENTRY(__x)]);
+axiom(forall f: [int]int, __x:int, __v:int :: {Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v])} Shift_Flink__LIST_ENTRY(f[Flink__LIST_ENTRY(__x) := __v]) == Shift_Flink__LIST_ENTRY(f)[__x := __v]);
+
+const unique Globals : int;
+axiom(Globals != 0);
+
+
+procedure ExFreePoolWithTag($P$1$14901.35$ExFreePoolWithTag$81:int, $Tag$2$14902.15$ExFreePoolWithTag$81:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoAllocateIrp($StackSize$1$20453.15$IoAllocateIrp$81:int, $ChargeQuota$2$20454.17$IoAllocateIrp$81:int) returns ($result.IoAllocateIrp$20452.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoDeleteDevice($DeviceObject$1$21328.67$IoDeleteDevice$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: requires 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 1 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 1
+requires((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 1) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 1)));
+//TAG: ensures 1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == 0 && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == 0
+ensures((true) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == 0) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == 0)));
+//TAG: ensures 1 ==> __updates_resource("DEV_OBJ_INIT", DeviceObject, 0) && __updates_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension), 0)
+ensures((true) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41 := 0]) && (Res_DEV_EXTN == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] := 0])));
+//TAG: ensures !1 ==> __resource("DEV_OBJ_INIT", DeviceObject) == __old_resource("DEV_OBJ_INIT", DeviceObject) && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)) == __old_resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension))
+ensures((!(true)) ==> ((Res_DEV_OBJ_INIT[$DeviceObject$1$21328.67$IoDeleteDevice$41] == old(Res_DEV_OBJ_INIT)[$DeviceObject$1$21328.67$IoDeleteDevice$41]) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]] == old(Res_DEV_EXTN)[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]])));
+//TAG: ensures !1 ==> __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+free ensures((!(true)) ==> ((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN))));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)DeviceObject)->DeviceExtension)
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)]))) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT($DeviceObject$1$21328.67$IoDeleteDevice$41)] == r) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, DeviceObject
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Singleton($DeviceObject$1$21328.67$IoDeleteDevice$41))) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || ($DeviceObject$1$21328.67$IoDeleteDevice$41 == r) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure IoFreeIrp($Irp$1$21417.14$IoFreeIrp$41:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouEnableDisablePort($EnableFlag$1$504.15$MouEnableDisablePort$161:int, $Irp$2$505.15$MouEnableDisablePort$161:int, $Port$3$506.25$MouEnableDisablePort$161:int, $File$4$507.22$MouEnableDisablePort$161:int) returns ($result.MouEnableDisablePort$503.0$1$:int);
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+ensures((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouseClassCleanupQueue($DeviceObject$1$1052.28$MouseClassCleanupQueue$121:int, $DeviceExtension$2$1053.28$MouseClassCleanupQueue$121:int, $FileObject$3$1054.28$MouseClassCleanupQueue$121:int);
+
+//TAG: requires __resource("DEV_EXTN", DeviceExtension) == 1
+requires(Res_DEV_EXTN[$DeviceExtension$2$1053.28$MouseClassCleanupQueue$121] == 1);
+//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->WaitWakeSpinLock) == 0
+requires(Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
+//TAG: requires __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->SpinLock) == 0
+requires(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+requires((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+requires((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires __resource("DEV_OBJ_INIT", DeviceObject) == 1
+requires(Res_DEV_OBJ_INIT[$DeviceObject$1$1052.28$MouseClassCleanupQueue$121] == 1);
+//TAG: ensures __resource("DEV_EXTN", DeviceExtension) == 1
+ensures(Res_DEV_EXTN[$DeviceExtension$2$1053.28$MouseClassCleanupQueue$121] == 1);
+//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->WaitWakeSpinLock) == 0
+ensures(Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
+//TAG: ensures __resource("SPIN_LOCK", &((struct _DEVICE_EXTENSION *)DeviceExtension)->SpinLock) == 0
+ensures(Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION($DeviceExtension$2$1053.28$MouseClassCleanupQueue$121)] == 0);
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+ensures((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: ensures __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: ensures 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+ensures((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: ensures 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+ensures((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: ensures 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+ensures((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: ensures __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+ensures(Mem[T.Flink__LIST_ENTRY] == old(Mem)[T.Flink__LIST_ENTRY]);
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT")
+ensures(Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT));
+//TAG: ensures __preserves_resource("DEV_EXTN")
+ensures(Res_DEV_EXTN == old(Res_DEV_EXTN));
+//TAG: ensures __resource("DEV_OBJ_INIT", DeviceObject) == 1
+ensures(Res_DEV_OBJ_INIT[$DeviceObject$1$1052.28$MouseClassCleanupQueue$121] == 1);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure ObfDereferenceObject($Object$1$24931.15$ObfDereferenceObject$41:int) returns ($result.ObfDereferenceObject$24930.0$1$:int);
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure RemoveEntryList($Entry$1$6929.19$RemoveEntryList$41:int) returns ($result.RemoveEntryList$6928.0$1$:int);
+
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+//TAG: ensures __seteq(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __setminus(__old(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList)), __set(Entry)))
+ensures((Subset(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41))) && Subset(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(old(Mem)[T.Flink__LIST_ENTRY]), old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(old(Globals)))], LegacyDeviceList__GLOBALS(old(Globals))), Singleton($Entry$1$6929.19$RemoveEntryList$41)), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)))));
+//TAG: ensures Entry->Flink == __old(Entry->Flink)
+ensures(Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)] == old(Mem)[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($Entry$1$6929.19$RemoveEntryList$41)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty, __set_empty
+ensures (Subset(Empty(), Union(Union(Empty(), Empty()), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure __PREfastPagedCode();
+
+//TAG: ensures __preserves_mem
+ensures(Mem == old(Mem));
+//TAG: ensures __preserves_resource("DEV_OBJ_INIT") && __preserves_resource("DEV_EXTN")
+ensures((Res_DEV_OBJ_INIT == old(Res_DEV_OBJ_INIT)) && (Res_DEV_EXTN == old(Res_DEV_EXTN)));
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || old(Res_DEVICE_STACK)[r] == Res_DEVICE_STACK[r]));
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || old(Res_DEV_EXTN)[r] == Res_DEV_EXTN[r]));
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || old(Res_DEV_OBJ_INIT)[r] == Res_DEV_OBJ_INIT[r]));
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || old(Res_SPIN_LOCK)[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == old(Mem)[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == old(Mem)[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == old(Mem)[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == old(Mem)[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == old(Mem)[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == old(Mem)[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+ensures (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == old(Mem)[T.P_DEVICE_OBJECT][_m]));
+
+//TAG: havoc memory locations by default
+modifies Mem;
+
+
+procedure MouseClassUnload($DriverObject$1$2789.24$MouseClassUnload$41:int)
+
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+requires((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+requires(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+//TAG: ensures __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+ensures((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: ensures __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z) && __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+ensures(((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z)))) && ((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0))))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+requires((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+requires((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+requires((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+requires((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+modifies alloc;
+free ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Res_DEVICE_STACK;
+
+//TAG: net change in resource DEVICE_STACK only for:
+modifies Res_DEV_EXTN;
+
+//TAG: net change in resource DEV_EXTN only for:
+modifies Res_DEV_OBJ_INIT;
+
+//TAG: net change in resource DEV_OBJ_INIT only for:
+modifies Res_SPIN_LOCK;
+
+//TAG: net change in resource SPIN_LOCK only for:
+
+//TAG: havoc memory locations by default
+modifies Mem;
+{
+var havoc_stringTemp:int;
+var condVal:int;
+var $DriverObject$1$2789.24$MouseClassUnload$4 : int;
+var $IoAllocateIrp.arg.1$9$ : int;
+var $MouDebugPrint.arg.2$1$ : int;
+var $MouDebugPrint.arg.2$19$ : int;
+var $RtlAssert.arg.1$14$ : int;
+var $RtlAssert.arg.1$16$ : int;
+var $RtlAssert.arg.1$18$ : int;
+var $RtlAssert.arg.1$3$ : int;
+var $RtlAssert.arg.1$5$ : int;
+var $RtlAssert.arg.1$7$ : int;
+var $RtlAssert.arg.2$13$ : int;
+var $RtlAssert.arg.2$15$ : int;
+var $RtlAssert.arg.2$17$ : int;
+var $RtlAssert.arg.2$2$ : int;
+var $RtlAssert.arg.2$4$ : int;
+var $RtlAssert.arg.2$6$ : int;
+var $data$3$2812.22$MouseClassUnload$4 : int;
+var $enabled$6$2829.16$MouseClassUnload$4 : int;
+var $entry$2$2811.16$MouseClassUnload$4 : int;
+var $file$7$2830.21$MouseClassUnload$4 : int;
+var $i$8$2898.14$MouseClassUnload$4 : int;
+var $irp$5$2814.9$MouseClassUnload$4 : int;
+var $port$4$2813.10$MouseClassUnload$4 : int;
+var $result.IoAllocateIrp$2854.31$8$ : int;
+var $result.MouEnableDisablePort$2856.37$10$ : int;
+var $result.ObfDereferenceObject$2867.12$11$ : int;
+var $result.RemoveEntryList$2878.24$12$ : int;
+var tempBoogie0:int;
+var tempBoogie1:int;
+var tempBoogie2:int;
+var tempBoogie3:int;
+var tempBoogie4:int;
+var tempBoogie5:int;
+var tempBoogie6:int;
+var tempBoogie7:int;
+var tempBoogie8:int;
+var tempBoogie9:int;
+var tempBoogie10:int;
+var tempBoogie11:int;
+var tempBoogie12:int;
+var tempBoogie13:int;
+var tempBoogie14:int;
+var tempBoogie15:int;
+var tempBoogie16:int;
+var tempBoogie17:int;
+var tempBoogie18:int;
+var tempBoogie19:int;
+var LOOP_15_alloc:[int]name;
+var LOOP_15_Mem:[name][int]int;
+var LOOP_15_Res_DEVICE_STACK:[int]int;
+var LOOP_15_Res_DEV_EXTN:[int]int;
+var LOOP_15_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_15_Res_SPIN_LOCK:[int]int;
+var LOOP_108_alloc:[int]name;
+var LOOP_108_Mem:[name][int]int;
+var LOOP_108_Res_DEVICE_STACK:[int]int;
+var LOOP_108_Res_DEV_EXTN:[int]int;
+var LOOP_108_Res_DEV_OBJ_INIT:[int]int;
+var LOOP_108_Res_SPIN_LOCK:[int]int;
+
+
+start:
+
+assume (alloc[$DriverObject$1$2789.24$MouseClassUnload$41] != UNALLOCATED);
+call $file$7$2830.21$MouseClassUnload$4 := __HAVOC_malloc(4);
+$DriverObject$1$2789.24$MouseClassUnload$4 := $DriverObject$1$2789.24$MouseClassUnload$41;
+goto label_3;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2911)
+label_1:
+call __HAVOC_free($file$7$2830.21$MouseClassUnload$4);
+assume (forall m:int:: {Res_DEVICE_STACK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEVICE_STACK[m] == old(Res_DEVICE_STACK)[m]);
+assume (forall m:int:: {Res_DEV_EXTN[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_EXTN[m] == old(Res_DEV_EXTN)[m]);
+assume (forall m:int:: {Res_DEV_OBJ_INIT[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_DEV_OBJ_INIT[m] == old(Res_DEV_OBJ_INIT)[m]);
+assume (forall m:int:: {Res_SPIN_LOCK[m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Res_SPIN_LOCK[m] == old(Res_SPIN_LOCK)[m]);
+assume (forall m:int :: {Mem[T.A11CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A11CHAR][m] == old(Mem[T.A11CHAR])[m]);
+assume (forall m:int :: {Mem[T.A19CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A19CHAR][m] == old(Mem[T.A19CHAR])[m]);
+assume (forall m:int :: {Mem[T.A33CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A33CHAR][m] == old(Mem[T.A33CHAR])[m]);
+assume (forall m:int :: {Mem[T.A34CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A34CHAR][m] == old(Mem[T.A34CHAR])[m]);
+assume (forall m:int :: {Mem[T.A39CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A39CHAR][m] == old(Mem[T.A39CHAR])[m]);
+assume (forall m:int :: {Mem[T.A43CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A43CHAR][m] == old(Mem[T.A43CHAR])[m]);
+assume (forall m:int :: {Mem[T.A74CHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.A74CHAR][m] == old(Mem[T.A74CHAR])[m]);
+assume (forall m:int :: {Mem[T.AssocClassList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.AssocClassList__GLOBALS][m] == old(Mem[T.AssocClassList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Buffer__UNICODE_STRING][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Buffer__UNICODE_STRING][m] == old(Mem[T.Buffer__UNICODE_STRING])[m]);
+assume (forall m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][m] == old(Mem[T.CurrentStackLocation___unnamed_4_a7aa989c])[m]);
+assume (forall m:int :: {Mem[T.DataIn__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataIn__DEVICE_EXTENSION][m] == old(Mem[T.DataIn__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DataOut__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DataOut__DEVICE_EXTENSION][m] == old(Mem[T.DataOut__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.DeviceExtension__DEVICE_OBJECT][m] == old(Mem[T.DeviceExtension__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Enabled__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__DEVICE_EXTENSION][m] == old(Mem[T.Enabled__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Enabled__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Enabled__PORT][m] == old(Mem[T.Enabled__PORT])[m]);
+assume (forall m:int :: {Mem[T.File__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__DEVICE_EXTENSION][m] == old(Mem[T.File__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.File__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.File__PORT][m] == old(Mem[T.File__PORT])[m]);
+assume (forall m:int :: {Mem[T.Flink__LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Flink__LIST_ENTRY][m] == old(Mem[T.Flink__LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.Free__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Free__PORT][m] == old(Mem[T.Free__PORT])[m]);
+assume (forall m:int :: {Mem[T.GrandMaster__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.GrandMaster__GLOBALS][m] == old(Mem[T.GrandMaster__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.INT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.INT4][m] == old(Mem[T.INT4])[m]);
+assume (forall m:int :: {Mem[T.InputData__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.InputData__DEVICE_EXTENSION][m] == old(Mem[T.InputData__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.LegacyDeviceList__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.LegacyDeviceList__GLOBALS][m] == old(Mem[T.LegacyDeviceList__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Link__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Link__DEVICE_EXTENSION][m] == old(Mem[T.Link__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.MinorFunction__IO_STACK_LOCATION][m] == old(Mem[T.MinorFunction__IO_STACK_LOCATION])[m]);
+assume (forall m:int :: {Mem[T.NumAssocClass__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.NumAssocClass__GLOBALS][m] == old(Mem[T.NumAssocClass__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.PCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PCHAR][m] == old(Mem[T.PCHAR])[m]);
+assume (forall m:int :: {Mem[T.PP_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PP_FILE_OBJECT][m] == old(Mem[T.PP_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.PUINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PUINT4][m] == old(Mem[T.PUINT4])[m]);
+assume (forall m:int :: {Mem[T.PVOID][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PVOID][m] == old(Mem[T.PVOID])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_EXTENSION][m] == old(Mem[T.P_DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.P_DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_DEVICE_OBJECT][m] == old(Mem[T.P_DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_FILE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_FILE_OBJECT][m] == old(Mem[T.P_FILE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.P_IRP][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_IRP][m] == old(Mem[T.P_IRP])[m]);
+assume (forall m:int :: {Mem[T.P_LIST_ENTRY][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_LIST_ENTRY][m] == old(Mem[T.P_LIST_ENTRY])[m]);
+assume (forall m:int :: {Mem[T.P_MOUSE_INPUT_DATA][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_MOUSE_INPUT_DATA][m] == old(Mem[T.P_MOUSE_INPUT_DATA])[m]);
+assume (forall m:int :: {Mem[T.P_PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.P_PORT][m] == old(Mem[T.P_PORT])[m]);
+assume (forall m:int :: {Mem[T.PnP__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.PnP__DEVICE_EXTENSION][m] == old(Mem[T.PnP__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.Port__PORT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Port__PORT][m] == old(Mem[T.Port__PORT])[m]);
+assume (forall m:int :: {Mem[T.RegistryPath__GLOBALS][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.RegistryPath__GLOBALS][m] == old(Mem[T.RegistryPath__GLOBALS])[m]);
+assume (forall m:int :: {Mem[T.Self__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Self__DEVICE_EXTENSION][m] == old(Mem[T.Self__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.SpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.SpinLock__DEVICE_EXTENSION][m] == old(Mem[T.SpinLock__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.StackSize__DEVICE_OBJECT][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.StackSize__DEVICE_OBJECT][m] == old(Mem[T.StackSize__DEVICE_OBJECT])[m]);
+assume (forall m:int :: {Mem[T.Started__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.Started__DEVICE_EXTENSION][m] == old(Mem[T.Started__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.TopPort__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.TopPort__DEVICE_EXTENSION][m] == old(Mem[T.TopPort__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.UCHAR][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UCHAR][m] == old(Mem[T.UCHAR])[m]);
+assume (forall m:int :: {Mem[T.UINT4][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UINT4][m] == old(Mem[T.UINT4])[m]);
+assume (forall m:int :: {Mem[T.UnitId__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.UnitId__DEVICE_EXTENSION][m] == old(Mem[T.UnitId__DEVICE_EXTENSION])[m]);
+assume (forall m:int :: {Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION][m] == old(Mem[T.WaitWakeSpinLock__DEVICE_EXTENSION])[m]);
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2911)
+label_2:
+assume false;
+return;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2811)
+label_3:
+goto label_4;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2812)
+label_4:
+goto label_5;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2813)
+label_5:
+goto label_6;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2814)
+label_6:
+goto label_7;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2818)
+label_7:
+call __PREfastPagedCode ();
+goto label_13;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2820)
+label_10:
+// skip MouDebugPrint
+goto label_14;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2820)
+label_13:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$1$ := havoc_stringTemp ;
+goto label_10;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2825)
+label_14:
+$entry$2$2811.16$MouseClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))] ;
+goto label_15;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2826)
+label_15:
+// loop entry initialization...
+LOOP_15_alloc := alloc;
+LOOP_15_Mem := Mem;
+LOOP_15_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_15_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_15_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_15_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_15_head;
+
+
+label_15_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires 1 ==> !__setin(&Globals.GrandMaster->Link, __setminus(__btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), __set(&Globals.LegacyDeviceList)))
+assert((true) ==> (!(Difference(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals)), Singleton(LegacyDeviceList__GLOBALS(Globals)))[Link__DEVICE_EXTENSION(Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)])])));
+//TAG: requires __setin(entry, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert(ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[$entry$2$2811.16$MouseClassUnload$4]);
+assume(forall f:int :: {alloc[Base(f)]} LOOP_15_alloc[Base(f)] == UNALLOCATED || LOOP_15_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_15_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_EXTN[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_true
+assert (Subset(Empty(), Union(Empty(), SetTrue())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (SetTrue()[r]) || LOOP_15_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_15_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_15_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_15_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_15_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_15_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_15_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_15_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+goto label_15_true , label_15_false ;
+
+
+label_15_true :
+assume ($entry$2$2811.16$MouseClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
+goto label_16;
+
+
+label_15_false :
+assume !($entry$2$2811.16$MouseClassUnload$4 != LegacyDeviceList__GLOBALS(Globals));
+goto label_85;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2829)
+label_16:
+goto label_17;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2829)
+label_17:
+$enabled$6$2829.16$MouseClassUnload$4 := 0 ;
+goto label_18;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2830)
+label_18:
+goto label_19;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2830)
+label_19:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4 := 0];
+goto label_20;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2832)
+label_20:
+$data$3$2812.22$MouseClassUnload$4 := MINUS_LEFT_PTR($entry$2$2811.16$MouseClassUnload$4, 1, 252) ;
+goto label_21;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
+label_21:
+goto label_21_true , label_21_false ;
+
+
+label_21_true :
+assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
+goto label_25;
+
+
+label_21_false :
+assume (Mem[T.PnP__DEVICE_EXTENSION][PnP__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
+label_22:
+// skip RtlAssert
+goto label_27;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
+label_25:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$2$ := havoc_stringTemp ;
+goto label_26;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2833)
+label_26:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$3$ := havoc_stringTemp ;
+goto label_22;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2835)
+label_27:
+goto label_27_true , label_27_false ;
+
+
+label_27_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_28;
+
+
+label_27_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_40;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2836)
+label_28:
+$port$4$2813.10$MouseClassUnload$4 := PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, Mem[T.UnitId__DEVICE_EXTENSION][UnitId__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]) ;
+goto label_29;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
+label_29:
+goto label_29_true , label_29_false ;
+
+
+label_29_true :
+assume (Mem[T.Port__PORT][Port__PORT($port$4$2813.10$MouseClassUnload$4)] == $data$3$2812.22$MouseClassUnload$4);
+goto label_35;
+
+
+label_29_false :
+assume !(Mem[T.Port__PORT][Port__PORT($port$4$2813.10$MouseClassUnload$4)] == $data$3$2812.22$MouseClassUnload$4);
+goto label_33;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
+label_30:
+// skip RtlAssert
+goto label_35;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
+label_33:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$4$ := havoc_stringTemp ;
+goto label_34;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2837)
+label_34:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$5$ := havoc_stringTemp ;
+goto label_30;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2839)
+label_35:
+$enabled$6$2829.16$MouseClassUnload$4 := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2813.10$MouseClassUnload$4)] ;
+goto label_36;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2840)
+label_36:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4 := Mem[T.File__PORT][File__PORT($port$4$2813.10$MouseClassUnload$4)]];
+goto label_37;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2842)
+label_37:
+Mem[T.Enabled__PORT] := Mem[T.Enabled__PORT][Enabled__PORT($port$4$2813.10$MouseClassUnload$4) := 0];
+goto label_38;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2843)
+label_38:
+Mem[T.File__PORT] := Mem[T.File__PORT][File__PORT($port$4$2813.10$MouseClassUnload$4) := 0];
+goto label_39;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2844)
+label_39:
+Mem[T.Free__PORT] := Mem[T.Free__PORT][Free__PORT($port$4$2813.10$MouseClassUnload$4) := 1];
+goto label_49;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2847)
+label_40:
+$enabled$6$2829.16$MouseClassUnload$4 := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] ;
+goto label_41;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2848)
+label_41:
+Mem[T.P_FILE_OBJECT] := Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4 := Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
+goto label_42;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
+label_42:
+goto label_42_true , label_42_false ;
+
+
+label_42_true :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
+goto label_48;
+
+
+label_42_false :
+assume (Mem[T.File__DEVICE_EXTENSION][File__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
+goto label_46;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
+label_43:
+// skip RtlAssert
+goto label_48;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
+label_46:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$6$ := havoc_stringTemp ;
+goto label_47;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2849)
+label_47:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$7$ := havoc_stringTemp ;
+goto label_43;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2850)
+label_48:
+Mem[T.Enabled__DEVICE_EXTENSION] := Mem[T.Enabled__DEVICE_EXTENSION][Enabled__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := 0];
+goto label_49;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2853)
+label_49:
+goto label_49_true , label_49_false ;
+
+
+label_49_true :
+assume ($enabled$6$2829.16$MouseClassUnload$4 != 0);
+goto label_53;
+
+
+label_49_false :
+assume ($enabled$6$2829.16$MouseClassUnload$4 == 0);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2854)
+label_50:
+call $result.IoAllocateIrp$2854.31$8$ := IoAllocateIrp ($IoAllocateIrp.arg.1$9$, 0);
+goto label_54;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2854)
+label_53:
+$IoAllocateIrp.arg.1$9$ := PLUS(Mem[T.StackSize__DEVICE_OBJECT][StackSize__DEVICE_OBJECT(Mem[T.TopPort__DEVICE_EXTENSION][TopPort__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)])], 1, 1) ;
+goto label_50;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2854)
+label_54:
+$irp$5$2814.9$MouseClassUnload$4 := $result.IoAllocateIrp$2854.31$8$ ;
+goto label_55;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2855)
+label_55:
+goto label_55_true , label_55_false ;
+
+
+label_55_true :
+assume ($irp$5$2814.9$MouseClassUnload$4 != 0);
+goto label_56;
+
+
+label_55_false :
+assume ($irp$5$2814.9$MouseClassUnload$4 == 0);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2856)
+label_56:
+call $result.MouEnableDisablePort$2856.37$10$ := MouEnableDisablePort (0, $irp$5$2814.9$MouseClassUnload$4, $data$3$2812.22$MouseClassUnload$4, $file$7$2830.21$MouseClassUnload$4);
+goto label_59;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2857)
+label_59:
+call IoFreeIrp ($irp$5$2814.9$MouseClassUnload$4);
+goto label_62;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2866)
+label_62:
+goto label_62_true , label_62_false ;
+
+
+label_62_true :
+assume (Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4] != 0);
+goto label_63;
+
+
+label_62_false :
+assume (Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4] == 0);
+goto label_66;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2867)
+label_63:
+call $result.ObfDereferenceObject$2867.12$11$ := ObfDereferenceObject (Mem[T.P_FILE_OBJECT][$file$7$2830.21$MouseClassUnload$4]);
+goto label_66;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2874)
+label_66:
+goto label_66_true , label_66_false ;
+
+
+label_66_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_70;
+
+
+label_66_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_67;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2875)
+label_67:
+call MouseClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], $data$3$2812.22$MouseClassUnload$4, 0);
+goto label_70;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2878)
+label_70:
+call $result.RemoveEntryList$2878.24$12$ := RemoveEntryList (Link__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4));
+goto label_73;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2879)
+label_73:
+$entry$2$2811.16$MouseClassUnload$4 := Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY($entry$2$2811.16$MouseClassUnload$4)] ;
+goto label_74;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
+label_74:
+goto label_74_true , label_74_false ;
+
+
+label_74_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
+goto label_75;
+
+
+label_74_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
+goto label_81;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
+label_75:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], 0);
+goto label_78;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
+label_78:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := 0];
+goto label_79;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
+label_79:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
+goto label_80;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
+label_80:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
+goto label_81;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
+label_81:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]);
+goto label_84;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2881)
+label_84:
+$data$3$2812.22$MouseClassUnload$4 := 0 ;
+goto label_15_head;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2887)
+label_85:
+goto label_85_true , label_85_false ;
+
+
+label_85_true :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0);
+goto label_86;
+
+
+label_85_false :
+assume (Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] == 0);
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2888)
+label_86:
+$data$3$2812.22$MouseClassUnload$4 := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] ;
+goto label_87;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2889)
+label_87:
+Mem[T.GrandMaster__GLOBALS] := Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals) := 0];
+goto label_88;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2891)
+label_88:
+call MouseClassCleanupQueue (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], $data$3$2812.22$MouseClassUnload$4, 0);
+goto label_91;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
+label_91:
+goto label_91_true , label_91_false ;
+
+
+label_91_true :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] != 0);
+goto label_92;
+
+
+label_91_false :
+assume (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)] == 0);
+goto label_98;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
+label_92:
+call ExFreePoolWithTag (Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)], 0);
+goto label_95;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
+label_95:
+Mem[T.DataOut__DEVICE_EXTENSION] := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := 0];
+goto label_96;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
+label_96:
+Mem[T.DataIn__DEVICE_EXTENSION] := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataOut__DEVICE_EXTENSION][DataOut__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
+goto label_97;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
+label_97:
+Mem[T.InputData__DEVICE_EXTENSION] := Mem[T.InputData__DEVICE_EXTENSION][InputData__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4) := Mem[T.DataIn__DEVICE_EXTENSION][DataIn__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]];
+goto label_98;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
+label_98:
+call IoDeleteDevice (Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION($data$3$2812.22$MouseClassUnload$4)]);
+goto label_101;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2892)
+label_101:
+$data$3$2812.22$MouseClassUnload$4 := 0 ;
+goto label_102;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2895)
+label_102:
+call ExFreePoolWithTag (Mem[T.Buffer__UNICODE_STRING][Buffer__UNICODE_STRING(RegistryPath__GLOBALS(Globals))], 0);
+goto label_105;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2896)
+label_105:
+goto label_105_true , label_105_false ;
+
+
+label_105_true :
+assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] != 0);
+goto label_106;
+
+
+label_105_false :
+assume (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)] == 0);
+goto label_134;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2898)
+label_106:
+goto label_107;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2900)
+label_107:
+$i$8$2898.14$MouseClassUnload$4 := 0 ;
+goto label_108;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2900)
+label_108:
+// loop entry initialization...
+LOOP_108_alloc := alloc;
+LOOP_108_Mem := Mem;
+LOOP_108_Res_DEVICE_STACK := Res_DEVICE_STACK;
+LOOP_108_Res_DEV_EXTN := Res_DEV_EXTN;
+LOOP_108_Res_DEV_OBJ_INIT := Res_DEV_OBJ_INIT;
+LOOP_108_Res_SPIN_LOCK := Res_SPIN_LOCK;
+goto label_108_head;
+
+
+label_108_head:
+// loop head assertions...
+//TAG: requires __pforall(_H_x, (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension), __inv_resource("DEV_OBJ_INIT", 1), ((struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension))->Self == _H_x && __resource("DEV_EXTN", (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)_H_x)->DeviceExtension)) == 1)
+assert((forall _H_x:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]} Inverse(Res_DEV_OBJ_INIT,1)[_H_x] ==> ((Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)])] == _H_x) && (Res_DEV_EXTN[Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(_H_x)]] == 1))));
+//TAG: requires __pforall(_H_z, _H_z->Self, __inv_resource("DEV_EXTN", 1), __resource("DEV_OBJ_INIT", _H_z->Self) == 1 && (struct _DEVICE_EXTENSION *)(((struct _DEVICE_OBJECT *)(_H_z->Self))->DeviceExtension) == _H_z)
+assert((forall _H_z:int :: {Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]} Inverse(Res_DEV_EXTN,1)[_H_z] ==> ((Res_DEV_OBJ_INIT[Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)]] == 1) && (Mem[T.DeviceExtension__DEVICE_OBJECT][DeviceExtension__DEVICE_OBJECT(Mem[T.Self__DEVICE_EXTENSION][Self__DEVICE_EXTENSION(_H_z)])] == _H_z))));
+//TAG: requires __forall(_H_z, __inv_resource("DEV_EXTN", 1), __resource("SPIN_LOCK", &_H_z->SpinLock) == 0 && __resource("SPIN_LOCK", &_H_z->WaitWakeSpinLock) == 0)
+assert((Subset(Empty(), Inverse(Res_DEV_EXTN,1)) && (forall _H_z : int :: {Inverse(Res_DEV_EXTN,1)[_H_z]} (Inverse(Res_DEV_EXTN,1)[_H_z]) ==> ((Res_SPIN_LOCK[SpinLock__DEVICE_EXTENSION(_H_z)] == 0) && (Res_SPIN_LOCK[WaitWakeSpinLock__DEVICE_EXTENSION(_H_z)] == 0)))));
+//TAG: requires 1 ==> (Globals.GrandMaster != (void *)0 ==> __resource("DEV_EXTN", Globals.GrandMaster) == 1)
+assert((true) ==> ((Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)] != 0) ==> (Res_DEV_EXTN[Mem[T.GrandMaster__GLOBALS][GrandMaster__GLOBALS(Globals)]] == 1)));
+//TAG: requires 1 ==> __setin(&Globals.LegacyDeviceList, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList))
+assert((true) ==> (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[LegacyDeviceList__GLOBALS(Globals)]));
+//TAG: requires 1 ==> __forall(_H_y, __btwn(__offset((*((struct _LIST_ENTRY *)0)).Flink), (&Globals.LegacyDeviceList)->Flink, &Globals.LegacyDeviceList), _H_y == &Globals.LegacyDeviceList || __resource("DEV_EXTN", CONTAINING_RECORD(_H_y, struct _DEVICE_EXTENSION , Link)) == 1)
+assert((true) ==> ((Subset(Empty(), ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))) && (forall _H_y : int :: {ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]} (ReachBetweenSet(Shift_Flink__LIST_ENTRY(Mem[T.Flink__LIST_ENTRY]), Mem[T.Flink__LIST_ENTRY][Flink__LIST_ENTRY(LegacyDeviceList__GLOBALS(Globals))], LegacyDeviceList__GLOBALS(Globals))[_H_y]) ==> ((_H_y == LegacyDeviceList__GLOBALS(Globals)) || (Res_DEV_EXTN[MINUS_LEFT_PTR(_H_y, 1, Link__DEVICE_EXTENSION(0))] == 1))))));
+//TAG: requires __preserves_resource("DEV_OBJ_INIT")
+assert(Res_DEV_OBJ_INIT == LOOP_108_Res_DEV_OBJ_INIT);
+//TAG: requires __preserves_resource("DEV_EXTN")
+assert(Res_DEV_EXTN == LOOP_108_Res_DEV_EXTN);
+//TAG: requires __preserves_field_map(__offset((*((struct _LIST_ENTRY *)0)).Flink))
+assert(Mem[T.Flink__LIST_ENTRY] == LOOP_108_Mem[T.Flink__LIST_ENTRY]);
+assume(forall f:int :: {alloc[Base(f)]} LOOP_108_alloc[Base(f)] == UNALLOCATED || LOOP_108_alloc[Base(f)] == alloc[Base(f)]);
+
+
+//TAG: net change in resource DEVICE_STACK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEVICE_STACK[r]} (Empty()[r]) || LOOP_108_Res_DEVICE_STACK[r] == Res_DEVICE_STACK[r]));
+
+//TAG: net change in resource DEV_EXTN only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_EXTN[r]} (Empty()[r]) || LOOP_108_Res_DEV_EXTN[r] == Res_DEV_EXTN[r]));
+
+//TAG: net change in resource DEV_OBJ_INIT only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_DEV_OBJ_INIT[r]} (Empty()[r]) || LOOP_108_Res_DEV_OBJ_INIT[r] == Res_DEV_OBJ_INIT[r]));
+
+//TAG: net change in resource SPIN_LOCK only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall r:int :: {Res_SPIN_LOCK[r]} (Empty()[r]) || LOOP_108_Res_SPIN_LOCK[r] == Res_SPIN_LOCK[r]));
+//TAG: updated memory locations at Mem[T.MinorFunction__IO_STACK_LOCATION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.MinorFunction__IO_STACK_LOCATION][_m]} (Empty()[_m]) || Mem[T.MinorFunction__IO_STACK_LOCATION][_m] == LOOP_108_Mem[T.MinorFunction__IO_STACK_LOCATION][_m]));
+//TAG: updated memory locations at Mem[T.CurrentStackLocation___unnamed_4_a7aa989c] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]} (Empty()[_m]) || Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m] == LOOP_108_Mem[T.CurrentStackLocation___unnamed_4_a7aa989c][_m]));
+//TAG: updated memory locations at Mem[T.DeviceExtension__DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.DeviceExtension__DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.DeviceExtension__DEVICE_OBJECT][_m] == LOOP_108_Mem[T.DeviceExtension__DEVICE_OBJECT][_m]));
+//TAG: updated memory locations at Mem[T.Self__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Self__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Self__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Self__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.Started__DEVICE_EXTENSION] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.Started__DEVICE_EXTENSION][_m]} (Empty()[_m]) || Mem[T.Started__DEVICE_EXTENSION][_m] == LOOP_108_Mem[T.Started__DEVICE_EXTENSION][_m]));
+//TAG: updated memory locations at Mem[T.GrandMaster__GLOBALS] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.GrandMaster__GLOBALS][_m]} (Empty()[_m]) || Mem[T.GrandMaster__GLOBALS][_m] == LOOP_108_Mem[T.GrandMaster__GLOBALS][_m]));
+//TAG: updated memory locations at Mem[T.P_DEVICE_OBJECT] only for: __set_empty
+assert (Subset(Empty(), Union(Empty(), Empty())) && (forall _m:int :: {Mem[T.P_DEVICE_OBJECT][_m]} (Empty()[_m]) || Mem[T.P_DEVICE_OBJECT][_m] == LOOP_108_Mem[T.P_DEVICE_OBJECT][_m]));
+
+// end loop head assertions
+
+goto label_108_true , label_108_false ;
+
+
+label_108_true :
+assume ($i$8$2898.14$MouseClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
+goto label_109;
+
+
+label_108_false :
+assume !($i$8$2898.14$MouseClassUnload$4 < Mem[T.NumAssocClass__GLOBALS][NumAssocClass__GLOBALS(Globals)]);
+goto label_128;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
+label_109:
+goto label_109_true , label_109_false ;
+
+
+label_109_true :
+assume (Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 1);
+goto label_115;
+
+
+label_109_false :
+assume !(Mem[T.Free__PORT][Free__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 1);
+goto label_113;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
+label_110:
+// skip RtlAssert
+goto label_115;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
+label_113:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$13$ := havoc_stringTemp ;
+goto label_114;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2901)
+label_114:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$14$ := havoc_stringTemp ;
+goto label_110;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
+label_115:
+goto label_115_true , label_115_false ;
+
+
+label_115_true :
+assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] != 0);
+goto label_119;
+
+
+label_115_false :
+assume (Mem[T.Enabled__PORT][Enabled__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 0);
+goto label_121;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
+label_116:
+// skip RtlAssert
+goto label_121;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
+label_119:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$15$ := havoc_stringTemp ;
+goto label_120;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2902)
+label_120:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$16$ := havoc_stringTemp ;
+goto label_116;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
+label_121:
+goto label_121_true , label_121_false ;
+
+
+label_121_true :
+assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] != 0);
+goto label_125;
+
+
+label_121_false :
+assume (Mem[T.File__PORT][File__PORT(PLUS(Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 12, $i$8$2898.14$MouseClassUnload$4))] == 0);
+goto label_127;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
+label_122:
+// skip RtlAssert
+goto label_127;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
+label_125:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.2$17$ := havoc_stringTemp ;
+goto label_126;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2903)
+label_126:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$RtlAssert.arg.1$18$ := havoc_stringTemp ;
+goto label_122;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2900)
+label_127:
+$i$8$2898.14$MouseClassUnload$4 := PLUS($i$8$2898.14$MouseClassUnload$4, 1, 1) ;
+goto label_108_head;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2907)
+label_128:
+call ExFreePoolWithTag (Mem[T.AssocClassList__GLOBALS][AssocClassList__GLOBALS(Globals)], 0);
+goto label_134;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2910)
+label_131:
+// skip MouDebugPrint
+goto label_1;
+
+
+// e:\esp1\esp\tests\hvdrivers\houdini\mouclass_fbl_fbs_dev2_ntfs\mouclass.c(2910)
+label_134:
+call havoc_stringTemp := __HAVOC_malloc(1);
+$MouDebugPrint.arg.2$19$ := havoc_stringTemp ;
+goto label_131;
+
+}
+
diff --git a/Test/houdini/deterministic.bpl b/Test/houdini/deterministic.bpl
index 8a6c0cd6..f566388a 100644
--- a/Test/houdini/deterministic.bpl
+++ b/Test/houdini/deterministic.bpl
@@ -1,27 +1,27 @@
-// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-function f(a:int):int;
-
-procedure {:inline 1} Foo(x:int) returns (r:int)
-free ensures r == f(x);
-{
- if (x >0 ) {
- call r := Foo(x);
- r := r + 1;
- havoc r;
- } else {
- r := 0;
- }
- return;
-}
-
-procedure Check(x1:int, x2:int)
-{
- var r1: int, r2:int;
-
- call r1 := Foo(x2); //inlined
- call r2 := Foo(x2); //inlined
- assert r1 == r2;
-}
+// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+function f(a:int):int;
+
+procedure {:inline 1} Foo(x:int) returns (r:int)
+free ensures r == f(x);
+{
+ if (x >0 ) {
+ call r := Foo(x);
+ r := r + 1;
+ havoc r;
+ } else {
+ r := 0;
+ }
+ return;
+}
+
+procedure Check(x1:int, x2:int)
+{
+ var r1: int, r2:int;
+
+ call r1 := Foo(x2); //inlined
+ call r2 := Foo(x2); //inlined
+ assert r1 == r2;
+}
diff --git a/Test/houdini/deterministic.bpl.expect b/Test/houdini/deterministic.bpl.expect
index 22b480b4..55ced70d 100644
--- a/Test/houdini/deterministic.bpl.expect
+++ b/Test/houdini/deterministic.bpl.expect
@@ -1,3 +1,3 @@
-Assignment computed by Houdini:
-
-Boogie program verifier finished with 1 verified, 0 errors
+Assignment computed by Houdini:
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/houdini/houd1.bpl b/Test/houdini/houd1.bpl
index 0ad0feee..8477064f 100644
--- a/Test/houdini/houd1.bpl
+++ b/Test/houdini/houd1.bpl
@@ -1,21 +1,21 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-
-var myVar: int;
-
-procedure foo (i:int)
-modifies myVar;
-// comment
-ensures b1 ==> myVar>0;
-ensures myVar!=-1;
-{
- if (i>0) {
- myVar := 5;
- } else {
- myVar := 0;
- }
-}
-
-// expected output: Correct
-// expected end assigment: b1->False
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+
+var myVar: int;
+
+procedure foo (i:int)
+modifies myVar;
+// comment
+ensures b1 ==> myVar>0;
+ensures myVar!=-1;
+{
+ if (i>0) {
+ myVar := 5;
+ } else {
+ myVar := 0;
+ }
+}
+
+// expected output: Correct
+// expected end assigment: b1->False
diff --git a/Test/houdini/houd10.bpl b/Test/houdini/houd10.bpl
index 11757320..4e329df3 100644
--- a/Test/houdini/houd10.bpl
+++ b/Test/houdini/houd10.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-
-var fooVar: int;
-var xVar: int;
-
-procedure foo()
-modifies fooVar;
-modifies xVar;
-ensures b1 ==> fooVar==0;
-ensures b3 ==> xVar<0;
-{
- fooVar:=5;
- call bar();
-}
-
-procedure bar();
-modifies xVar;
-requires fooVar!=5;
-
-// expected outcome: Errors
-// expected assigment: b1->True,b2->True,b3->True
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+
+var fooVar: int;
+var xVar: int;
+
+procedure foo()
+modifies fooVar;
+modifies xVar;
+ensures b1 ==> fooVar==0;
+ensures b3 ==> xVar<0;
+{
+ fooVar:=5;
+ call bar();
+}
+
+procedure bar();
+modifies xVar;
+requires fooVar!=5;
+
+// expected outcome: Errors
+// expected assigment: b1->True,b2->True,b3->True
diff --git a/Test/houdini/houd11.bpl b/Test/houdini/houd11.bpl
index dc90f900..239d7e29 100644
--- a/Test/houdini/houd11.bpl
+++ b/Test/houdini/houd11.bpl
@@ -1,15 +1,15 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-var fooVar: int;
-
-procedure foo()
-modifies fooVar;
-{
- fooVar:=5;
- assert(fooVar==4);
- assert(fooVar==3);
-}
-
-// expected outcome: Errors
-// expected assigment: []
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var fooVar: int;
+
+procedure foo()
+modifies fooVar;
+{
+ fooVar:=5;
+ assert(fooVar==4);
+ assert(fooVar==3);
+}
+
+// expected outcome: Errors
+// expected assigment: []
diff --git a/Test/houdini/houd12.bpl b/Test/houdini/houd12.bpl
index 7e39b8af..9c1a2449 100644
--- a/Test/houdini/houd12.bpl
+++ b/Test/houdini/houd12.bpl
@@ -1,59 +1,59 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" | %OutputCheck -d "%s"
-// Example to test candidate annotations on loops
-
-// CHECK-L: Assignment computed by Houdini:
-// CHECK-NEXT-L: b1 = False
-const {:existential true} b1:bool;
-// CHECK-NEXT-L: b2 = True
-const {:existential true} b2:bool;
-// CHECK-NEXT-L: b3 = True
-const {:existential true} b3:bool;
-// CHECK-NEXT-L: b4 = True
-const {:existential true} b4:bool;
-// CHECK-NEXT-L: b5 = True
-const {:existential true} b5:bool;
-// CHECK-NEXT-L: b6 = False
-const {:existential true} b6:bool;
-// CHECK-NEXT-L: b7 = False
-const {:existential true} b7:bool;
-
-var x: int;
-var y: int;
-
-
-procedure foo()
-modifies x;
-modifies y;
-ensures (b4 ==> x == 0);
-ensures (b5 ==> y == 10);
-ensures (b6 ==> x == 10);
-ensures (b7 ==> y == 11);
-
-{
- x := 10;
- y := 0;
-
- goto Head;
-
-Head:
-
- //loop invariants
- assert (b1 ==> x < 0);
- assert (b2 ==> x >= 0);
- assert (b3 ==> x + y == 10);
- goto Body, Exit;
-
-Body:
- assume x > 0;
- x := x - 1;
- y := y + 1;
-
-
- goto Head;
-
-Exit:
- assume !(x > 0);
- return;
-}
-
-// CHECK-L: Boogie program verifier finished with 1 verified, 0 errors
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" | %OutputCheck -d "%s"
+// Example to test candidate annotations on loops
+
+// CHECK-L: Assignment computed by Houdini:
+// CHECK-NEXT-L: b1 = False
+const {:existential true} b1:bool;
+// CHECK-NEXT-L: b2 = True
+const {:existential true} b2:bool;
+// CHECK-NEXT-L: b3 = True
+const {:existential true} b3:bool;
+// CHECK-NEXT-L: b4 = True
+const {:existential true} b4:bool;
+// CHECK-NEXT-L: b5 = True
+const {:existential true} b5:bool;
+// CHECK-NEXT-L: b6 = False
+const {:existential true} b6:bool;
+// CHECK-NEXT-L: b7 = False
+const {:existential true} b7:bool;
+
+var x: int;
+var y: int;
+
+
+procedure foo()
+modifies x;
+modifies y;
+ensures (b4 ==> x == 0);
+ensures (b5 ==> y == 10);
+ensures (b6 ==> x == 10);
+ensures (b7 ==> y == 11);
+
+{
+ x := 10;
+ y := 0;
+
+ goto Head;
+
+Head:
+
+ //loop invariants
+ assert (b1 ==> x < 0);
+ assert (b2 ==> x >= 0);
+ assert (b3 ==> x + y == 10);
+ goto Body, Exit;
+
+Body:
+ assume x > 0;
+ x := x - 1;
+ y := y + 1;
+
+
+ goto Head;
+
+Exit:
+ assume !(x > 0);
+ return;
+}
+
+// CHECK-L: Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/houdini/houd2.bpl b/Test/houdini/houd2.bpl
index e0bfe4ba..4bd94215 100644
--- a/Test/houdini/houd2.bpl
+++ b/Test/houdini/houd2.bpl
@@ -1,29 +1,29 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-
-
-var myVar: int;
-
-procedure bar(i:int)
-modifies myVar;
-ensures myVar>0;
-{
- call foo(5);
-}
-
-procedure foo (i:int)
-modifies myVar;
-ensures b1 ==> myVar>0;
-ensures myVar!=-1;
-{
- if (i>0) {
- myVar := 5;
- } else {
- myVar := 0;
- }
-}
-
-// expected output: Errors
-// expected end assigment: b1->False b2->True
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+
+
+var myVar: int;
+
+procedure bar(i:int)
+modifies myVar;
+ensures myVar>0;
+{
+ call foo(5);
+}
+
+procedure foo (i:int)
+modifies myVar;
+ensures b1 ==> myVar>0;
+ensures myVar!=-1;
+{
+ if (i>0) {
+ myVar := 5;
+ } else {
+ myVar := 0;
+ }
+}
+
+// expected output: Errors
+// expected end assigment: b1->False b2->True
diff --git a/Test/houdini/houd3.bpl b/Test/houdini/houd3.bpl
index 2f6b1452..a8a49409 100644
--- a/Test/houdini/houd3.bpl
+++ b/Test/houdini/houd3.bpl
@@ -1,29 +1,29 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-
-
-var myVar: int;
-
-procedure bar(i:int)
-modifies myVar;
-ensures b2==>myVar>0;
-{
- call foo(5);
-}
-
-procedure foo (i:int)
-modifies myVar;
-ensures b1 ==> myVar>0;
-ensures myVar!=-1;
-{
- if (i>0) {
- myVar := 5;
- } else {
- myVar := 0;
- }
-}
-
-// expected output: Correct
-// expected end assigment: b1->False b2->False
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+
+
+var myVar: int;
+
+procedure bar(i:int)
+modifies myVar;
+ensures b2==>myVar>0;
+{
+ call foo(5);
+}
+
+procedure foo (i:int)
+modifies myVar;
+ensures b1 ==> myVar>0;
+ensures myVar!=-1;
+{
+ if (i>0) {
+ myVar := 5;
+ } else {
+ myVar := 0;
+ }
+}
+
+// expected output: Correct
+// expected end assigment: b1->False b2->False
diff --git a/Test/houdini/houd4.bpl b/Test/houdini/houd4.bpl
index 0950e422..f3937a8a 100644
--- a/Test/houdini/houd4.bpl
+++ b/Test/houdini/houd4.bpl
@@ -1,29 +1,29 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-const {:existential true} b4:bool;
-
-var array:[int]int;
-
-procedure foo (i:int)
-requires b2 ==> i > 0;
-ensures b3 ==> array[i] > 0;
-modifies array;
-ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
-{
- array[i] := 2 * i;
-}
-
-procedure bar (j:int) returns (result:int)
-requires b4 ==> j > 0;
-modifies array;
-ensures (forall x:int :: {array[x]} (b1 && x == j) || array[x] == old(array)[x]);
-{
- call foo(j);
- result := array[j];
-}
-
-// expected outcome: Correct
-// expected assignment: b1->True,b2->True,b3->True,b4->True
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+const {:existential true} b4:bool;
+
+var array:[int]int;
+
+procedure foo (i:int)
+requires b2 ==> i > 0;
+ensures b3 ==> array[i] > 0;
+modifies array;
+ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
+{
+ array[i] := 2 * i;
+}
+
+procedure bar (j:int) returns (result:int)
+requires b4 ==> j > 0;
+modifies array;
+ensures (forall x:int :: {array[x]} (b1 && x == j) || array[x] == old(array)[x]);
+{
+ call foo(j);
+ result := array[j];
+}
+
+// expected outcome: Correct
+// expected assignment: b1->True,b2->True,b3->True,b4->True
diff --git a/Test/houdini/houd5.bpl b/Test/houdini/houd5.bpl
index b6ee32dd..73f7143e 100644
--- a/Test/houdini/houd5.bpl
+++ b/Test/houdini/houd5.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-const {:existential true} b4:bool;
-const {:existential true} b5:bool;
-
-var array:[int]int;
-
-procedure foo (i:int)
-requires b1 ==> i == 0;
-requires b2 ==> i > 0;
-requires b3 ==> i < 0;
-ensures b4 ==> array[i] > 0;
-modifies array;
-ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
-{
- array[i] := 2 * i;
-}
-
-procedure bar (j:int) returns (result:int)
-requires b5 ==> j > 0;
-modifies array;
-{
- call foo(j);
- result := array[j];
-}
-
-// expected outcome: Correct
-// expected assigment: b1->False,b2->true,b3->False,b4->True,b5->True
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+const {:existential true} b4:bool;
+const {:existential true} b5:bool;
+
+var array:[int]int;
+
+procedure foo (i:int)
+requires b1 ==> i == 0;
+requires b2 ==> i > 0;
+requires b3 ==> i < 0;
+ensures b4 ==> array[i] > 0;
+modifies array;
+ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
+{
+ array[i] := 2 * i;
+}
+
+procedure bar (j:int) returns (result:int)
+requires b5 ==> j > 0;
+modifies array;
+{
+ call foo(j);
+ result := array[j];
+}
+
+// expected outcome: Correct
+// expected assigment: b1->False,b2->true,b3->False,b4->True,b5->True
diff --git a/Test/houdini/houd6.bpl b/Test/houdini/houd6.bpl
index a1dc7220..7b8903a7 100644
--- a/Test/houdini/houd6.bpl
+++ b/Test/houdini/houd6.bpl
@@ -1,46 +1,46 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-const {:existential true} b4:bool;
-const {:existential true} b5:bool;
-const {:existential true} b6:bool;
-const {:existential true} b7:bool;
-const {:existential true} b8:bool;
-
-var array:[int]int;
-
-procedure foo (i:int)
-requires b6 ==> i < 0;
-requires b5 ==> i == 0;
-requires b2 ==> i > 0;
-ensures b3 ==> array[i] > 0;
-modifies array;
-ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
-{
- array[i] := 2 * i;
-}
-
-procedure bar (j:int) returns (result:int)
-requires b8 ==> j < 0;
-requires b7 ==> j == 0;
-requires b4 ==> j > 0;
-modifies array;
-ensures (forall x:int :: {array[x]} (x == j) || array[x] == old(array)[x]);
-ensures (b1 ==> array[j] == old(array)[j]);
-{
- call foo(j);
- result := array[j];
-}
-
-var p:int;
-
-procedure main() returns (result: int)
-modifies array;
-{
- call result:= bar(p);
-}
-
-// expected outcome: Correct
-// expected assigment: bi->False forall i
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+const {:existential true} b4:bool;
+const {:existential true} b5:bool;
+const {:existential true} b6:bool;
+const {:existential true} b7:bool;
+const {:existential true} b8:bool;
+
+var array:[int]int;
+
+procedure foo (i:int)
+requires b6 ==> i < 0;
+requires b5 ==> i == 0;
+requires b2 ==> i > 0;
+ensures b3 ==> array[i] > 0;
+modifies array;
+ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
+{
+ array[i] := 2 * i;
+}
+
+procedure bar (j:int) returns (result:int)
+requires b8 ==> j < 0;
+requires b7 ==> j == 0;
+requires b4 ==> j > 0;
+modifies array;
+ensures (forall x:int :: {array[x]} (x == j) || array[x] == old(array)[x]);
+ensures (b1 ==> array[j] == old(array)[j]);
+{
+ call foo(j);
+ result := array[j];
+}
+
+var p:int;
+
+procedure main() returns (result: int)
+modifies array;
+{
+ call result:= bar(p);
+}
+
+// expected outcome: Correct
+// expected assigment: bi->False forall i
diff --git a/Test/houdini/houd7.bpl b/Test/houdini/houd7.bpl
index 6238ee5a..18b4448b 100644
--- a/Test/houdini/houd7.bpl
+++ b/Test/houdini/houd7.bpl
@@ -1,37 +1,37 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-
-var myVar: int;
-
-procedure foo(i:int)
-requires b1 ==> i>0;
-requires b2 ==> i==0;
-requires b3 ==> i<0;
-modifies myVar;
-ensures myVar>0;
-{
- myVar:=5;
-}
-
-procedure bar(i:int)
-modifies myVar;
-{
- call foo(5);
-}
-// expected outcome: Correct
-// expected Assigment: b1->True,b2->False,b3->False
-
-
-
-
-
-
-
-
-
-
-
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+
+var myVar: int;
+
+procedure foo(i:int)
+requires b1 ==> i>0;
+requires b2 ==> i==0;
+requires b3 ==> i<0;
+modifies myVar;
+ensures myVar>0;
+{
+ myVar:=5;
+}
+
+procedure bar(i:int)
+modifies myVar;
+{
+ call foo(5);
+}
+// expected outcome: Correct
+// expected Assigment: b1->True,b2->False,b3->False
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Test/houdini/houd8.bpl b/Test/houdini/houd8.bpl
index 52d49111..1df79b48 100644
--- a/Test/houdini/houd8.bpl
+++ b/Test/houdini/houd8.bpl
@@ -1,32 +1,32 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-
-var myVar: int;
-
-procedure foo(i:int)
-modifies myVar;
-ensures b1 ==> myVar>0;
-ensures b2 ==> myVar==0;
-ensures b3 ==> myVar<0;
-{
- myVar:=5;
-}
-
-// expected outcome: Correct
-// expected assigment: b1->True,b2->False,b3->False
-
-
-
-
-
-
-
-
-
-
-
-
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+
+var myVar: int;
+
+procedure foo(i:int)
+modifies myVar;
+ensures b1 ==> myVar>0;
+ensures b2 ==> myVar==0;
+ensures b3 ==> myVar<0;
+{
+ myVar:=5;
+}
+
+// expected outcome: Correct
+// expected assigment: b1->True,b2->False,b3->False
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Test/houdini/houd9.bpl b/Test/houdini/houd9.bpl
index 0a33896c..c8f91ad4 100644
--- a/Test/houdini/houd9.bpl
+++ b/Test/houdini/houd9.bpl
@@ -1,34 +1,34 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-
-axiom(b1 && b2 && b3);
-
-var fooVar: int;
-var xVar: int;
-
-
-procedure foo()
-modifies fooVar;
-modifies xVar;
-ensures b1 ==> fooVar>0;
-ensures b2 ==> fooVar==0;
-ensures b3 ==> xVar<0;
-{
- fooVar:=5;
- assert(fooVar>5);
- xVar:=0;
- assert(xVar>0);
-}
-
-// expected outcome: Errors
-// expected assigment: b1->True,b2->True,b3->True
-
-
-
-
-
-
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+
+axiom(b1 && b2 && b3);
+
+var fooVar: int;
+var xVar: int;
+
+
+procedure foo()
+modifies fooVar;
+modifies xVar;
+ensures b1 ==> fooVar>0;
+ensures b2 ==> fooVar==0;
+ensures b3 ==> xVar<0;
+{
+ fooVar:=5;
+ assert(fooVar>5);
+ xVar:=0;
+ assert(xVar>0);
+}
+
+// expected outcome: Errors
+// expected assigment: b1->True,b2->True,b3->True
+
+
+
+
+
+
+
diff --git a/Test/houdini/mergedProgSingle_dac.bpl b/Test/houdini/mergedProgSingle_dac.bpl
index 26ff38d7..e891254f 100644
--- a/Test/houdini/mergedProgSingle_dac.bpl
+++ b/Test/houdini/mergedProgSingle_dac.bpl
@@ -1,7616 +1,7616 @@
-// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-function _v2.ite(b: bool, x: int, y: int) : int;
-
-var _v2.OK: bool;
-
-var {:extern} _v2.Mem: [name][int]int;
-
-var {:extern} _v2.alloc: int;
-
-var {:extern} _v2.Mem_T.A1CHAR: [int]int;
-
-var {:extern} _v2.Mem_T.A5UCHAR: [int]int;
-
-var {:extern} _v2.Mem_T.A6UCHAR: [int]int;
-
-var {:extern} _v2.Mem_T.CHAR: [int]int;
-
-var {:extern} _v2.Mem_T.INT4: [int]int;
-
-var {:extern} _v2.Mem_T.PCHAR: [int]int;
-
-var {:extern} _v2.Mem_T.PUCHAR: [int]int;
-
-var {:extern} _v2.Mem_T.PVOID: [int]int;
-
-var {:extern} _v2.Mem_T.Pieee80211_scan_entry: [int]int;
-
-var {:extern} _v2.Mem_T.UCHAR: [int]int;
-
-var {:extern} _v2.Mem_T.VOID: [int]int;
-
-var {:extern} _v2.Mem_T.ieee80211_scan_entry: [int]int;
-
-var {:extern} _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
-
-var {:extern} _v2.detChoiceCnt: int;
-
-var {:extern} _v2.Res_KERNEL_SOURCE: [int]int;
-
-var {:extern} _v2.Res_PROBED: [int]int;
-
-const {:extern} unique _v2.T.se_rsn_ie_ieee80211_scan_entry: name;
-
-const {:extern} unique _v2.T.A1CHAR: name;
-
-const {:extern} unique _v2.T.A5UCHAR: name;
-
-const {:extern} unique _v2.T.A6UCHAR: name;
-
-const {:extern} unique _v2.T.CHAR: name;
-
-const {:extern} unique _v2.T.INT4: name;
-
-const {:extern} unique _v2.T.PA1CHAR: name;
-
-const {:extern} unique _v2.T.PA5UCHAR: name;
-
-const {:extern} unique _v2.T.PA6UCHAR: name;
-
-const {:extern} unique _v2.T.PCHAR: name;
-
-const {:extern} unique _v2.T.PINT4: name;
-
-const {:extern} unique _v2.T.PPCHAR: name;
-
-const {:extern} unique _v2.T.PPUCHAR: name;
-
-const {:extern} unique _v2.T.PPVOID: name;
-
-const {:extern} unique _v2.T.PPieee80211_scan_entry: name;
-
-const {:extern} unique _v2.T.PUCHAR: name;
-
-const {:extern} unique _v2.T.PUINT4: name;
-
-const {:extern} unique _v2.T.PVOID: name;
-
-const {:extern} unique _v2.T.Pieee80211_scan_entry: name;
-
-const {:extern} unique _v2.T.UCHAR: name;
-
-const {:extern} unique _v2.T.UINT4: name;
-
-const {:extern} unique _v2.T.VOID: name;
-
-const {:extern} unique _v2.T.ieee80211_scan_entry: name;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_8: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 13} unique _v2.__ctobpl_const_2: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 15} unique _v2.__ctobpl_const_3: int;
-
-const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 15} unique _v2.__ctobpl_const_4: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_5: int;
-
-const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_6: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_7: int;
-
-const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_9: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_10: int;
-
-const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_44: int;
-
-const {:extern} {:model_const "(se.se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 66} unique _v2.__ctobpl_const_50: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 51} unique _v2.__ctobpl_const_34: int;
-
-const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 67} unique _v2.__ctobpl_const_51: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_45: int;
-
-const {:extern} {:model_const "(se.se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 67} unique _v2.__ctobpl_const_52: int;
-
-const {:extern} {:model_const "(se->se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 52} unique _v2.__ctobpl_const_37: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_42: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_39: int;
-
-const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_47: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_40: int;
-
-const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_38: int;
-
-const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 66} unique _v2.__ctobpl_const_49: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 52} unique _v2.__ctobpl_const_35: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_43: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_46: int;
-
-const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 65} unique _v2.__ctobpl_const_48: int;
-
-const {:extern} {:model_const "(se->se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_41: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 52} unique _v2.__ctobpl_const_36: int;
-
-const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 13} unique _v2.__ctobpl_const_1: int;
-
-const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_31: int;
-
-const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_17: int;
-
-const {:extern} {:model_const "*(p + 1)"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 32} unique _v2.__ctobpl_const_24: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_18: int;
-
-const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 34} unique _v2.__ctobpl_const_26: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 18} unique _v2.__ctobpl_const_14: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_27: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 51} unique _v2.__ctobpl_const_33: int;
-
-const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_28: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_15: int;
-
-const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 17} unique _v2.__ctobpl_const_11: int;
-
-const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_29: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 17} unique _v2.__ctobpl_const_12: int;
-
-const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_32: int;
-
-const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_19: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 30} unique _v2.__ctobpl_const_21: int;
-
-const {:extern} {:model_const "*p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 30} unique _v2.__ctobpl_const_22: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 32} unique _v2.__ctobpl_const_23: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_16: int;
-
-const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_20: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 33} unique _v2.__ctobpl_const_25: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 18} unique _v2.__ctobpl_const_13: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_30: int;
-
-function {:extern} _v2.OneByteToInt(arg_0: byte) : int;
-
-function {:extern} _v2.TwoBytesToInt(arg_0: byte, arg_1: byte) : int;
-
-function {:extern} _v2.FourBytesToInt(arg_0: byte, arg_1: byte, arg_2: byte, arg_3: byte) : int;
-
-function {:extern} _v2.Field(arg_0: int) : name;
-
-function {:extern} _v2.Base(arg_0: int) : int;
-
-function {:extern} _v2.Match(a: int, t: name) : bool;
-
-function {:extern} _v2.MatchBase(b: int, a: int, t: name) : bool;
-
-function {:extern} _v2.HasType(v: int, t: name) : bool;
-
-function {:extern} _v2.T.Ptr(t: name) : name;
-
-function {:extern} _v2.se_rsn_ie_ieee80211_scan_entry(arg_0: int) : int;
-
-function {:extern} _v2.se_rsn_ie_ieee80211_scan_entryInv(arg_0: int) : int;
-
-function {:extern} _v2._S_se_rsn_ie_ieee80211_scan_entry(arg_0: [int]bool) : [int]bool;
-
-function {:extern} _v2._S_se_rsn_ie_ieee80211_scan_entryInv(arg_0: [int]bool) : [int]bool;
-
-function {:extern} _v2.INT_AND(a: int, b: int) : int;
-
-function {:extern} _v2.INT_OR(a: int, b: int) : int;
-
-function {:extern} _v2.INT_XOR(a: int, b: int) : int;
-
-function {:extern} _v2.INT_NOT(a: int) : int;
-
-function {:extern} _v2.POW2(a: int) : bool;
-
-function {:extern} _v2.INT_MINUS_LEFT_PTR(a: int, a_size: int, b: int) : int;
-
-function {:extern} _v2.INT_PLUS(a: int, a_size: int, b: int) : int;
-
-function {:extern} _v2.INT_MULT(a: int, b: int) : int;
-
-function {:extern} _v2.INT_DIV(a: int, b: int) : int;
-
-function {:extern} _v2.INT_BINARY_BOTH_INT(a: int, b: int) : int;
-
-function {:extern} _v2.BV32_EQ(x: bv32, y: bv32) : bool;
-
-function {:extern} _v2.BV32_NEQ(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvadd"} _v2.BV32_ADD(x: bv32, y: bv32) : bv32;
-
-function {:extern} {:bvbuiltin "bvsub"} _v2.BV32_SUB(x: bv32, y: bv32) : bv32;
-
-function {:extern} {:bvbuiltin "bvmul"} _v2.BV32_MULT(x: bv32, y: bv32) : bv32;
-
-function {:extern} {:bvbuiltin "bvudiv"} _v2.BV32_DIV(x: bv32, y: bv32) : bv32;
-
-function {:extern} {:bvbuiltin "bvult"} _v2.BV32_ULT(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvslt"} _v2.BV32_LT(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvule"} _v2.BV32_ULEQ(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvsle"} _v2.BV32_LEQ(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvugt"} _v2.BV32_UGT(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvsgt"} _v2.BV32_GT(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvuge"} _v2.BV32_UGEQ(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvsge"} _v2.BV32_GEQ(x: bv32, y: bv32) : bool;
-
-function {:extern} {:bvbuiltin "bvand"} _v2.BV32_AND(a: bv32, b: bv32) : bv32;
-
-function {:extern} {:bvbuiltin "bvor"} _v2.BV32_OR(a: bv32, b: bv32) : bv32;
-
-function {:extern} {:bvbuiltin "bvxor"} _v2.BV32_XOR(a: bv32, b: bv32) : bv32;
-
-function {:extern} {:bvbuiltin "bvnot"} _v2.BV32_NOT(a: bv32) : bv32;
-
-function {:extern} _v2.BV32_MINUS_BOTH_PTR_OR_BOTH_INT(a: bv32, b: bv32, size: bv32) : bv32;
-
-function {:extern} _v2.BV32_MINUS_LEFT_PTR(a: bv32, a_size: bv32, b: bv32) : bv32;
-
-function {:extern} _v2.BV32_PLUS(a: bv32, a_size: bv32, b: bv32) : bv32;
-
-function {:extern} _v2.BV32_BINARY_BOTH_INT(a: bv32, b: bv32) : bv32;
-
-function {:extern} _v2.bv32ToInt(arg_0: bv32) : int;
-
-function {:extern} _v2.intToBv32(arg_0: int) : bv32;
-
-function {:extern} _v2.choose(a: bool, b: int, c: int) : int;
-
-function {:extern} _v2.LIFT(a: bool) : int;
-
-function {:extern} _v2.PTR_NOT(a: int) : int;
-
-function {:extern} _v2.NULL_CHECK(a: int) : int;
-
-function {:extern} _v2.NewAlloc(x: int, y: int) : int;
-
-function {:extern} _v2.DetChoiceFunc(a: int) : int;
-
-function {:extern} _v2.Res_VALID_REGION(arg_0: int) : int;
-
-function {:extern} _v2.Equal(arg_0: [int]bool, arg_1: [int]bool) : bool;
-
-function {:extern} _v2.Subset(arg_0: [int]bool, arg_1: [int]bool) : bool;
-
-function {:extern} _v2.Disjoint(arg_0: [int]bool, arg_1: [int]bool) : bool;
-
-function {:extern} _v2.Empty() : [int]bool;
-
-function {:extern} _v2.SetTrue() : [int]bool;
-
-function {:extern} _v2.Singleton(arg_0: int) : [int]bool;
-
-function {:extern} _v2.Reachable(arg_0: [int,int]bool, arg_1: int) : [int]bool;
-
-function {:extern} _v2.Union(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
-
-function {:extern} _v2.Intersection(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
-
-function {:extern} _v2.Difference(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
-
-function {:extern} _v2.Dereference(arg_0: [int]bool, arg_1: [int]int) : [int]bool;
-
-function {:extern} _v2.Inverse(f: [int]int, x: int) : [int]bool;
-
-function {:extern} _v2.AtLeast(arg_0: int, arg_1: int) : [int]bool;
-
-function {:extern} _v2.Rep(arg_0: int, arg_1: int) : int;
-
-function {:extern} _v2.Array(arg_0: int, arg_1: int, arg_2: int) : [int]bool;
-
-function {:extern} _v2.Unified(arg_0: [name][int]int) : [int]int;
-
-function {:extern} _v2.value_is(c: int, e: int) : bool;
-
-
-function {:inline true} _v2.se_rsn_ie_ieee80211_scan_entry(x : int) : int
-{
-_v2.INT_ADD(x, 0)
-}
-
-function {:inline true} _v2.INT_EQ(x : int, y : int): bool
-{
-x == y
-}
-
-function {:inline true} _v2.INT_NEQ(x : int, y: int): bool
-{
-x != y
-}
-
-function {:inline true} _v2.INT_ADD(x : int, y : int): int
-{
-x + y
-}
-
-function {:inline true} _v2.INT_SUB(x : int, y : int): int
-{
- x - y
-}
-
-function {:inline true} _v2.INT_LT(x : int, y : int): bool
-{
-x < y
-}
-
-function {:inline true} _v2.INT_ULT(x : int, y : int): bool
-{
-x < y
-}
-
-function {:inline true} _v2.INT_LEQ(x : int, y : int): bool
-{
-x <= y
-}
-
-function {:inline true} _v2.INT_ULEQ(x : int, y : int): bool
-{
-x <= y
-}
-
-function {:inline true} _v2.INT_GT(x : int, y : int): bool
-{
-x > y
-}
-
-function {:inline true} _v2.INT_UGT(x : int, y : int): bool
-{
-x > y
-}
-
-function {:inline true} _v2.INT_GEQ(x : int, y : int): bool
-{
-x >= y
-}
-
-function {:inline true} _v2.INT_UGEQ(x : int, y : int): bool
-{
-x >= y
-}
-
-
-
-procedure _v2.havoc_assert(i: int);
- /* free */ requires i != 0;
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.havoc_assume(i: int);
- /* free */ ensures i != 0;
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.__HAVOC_free(a: int);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.__HAVOC_malloc(obj_size: int) returns (new: int);
- /* free */ requires _v2.INT_GEQ(obj_size, 0);
- modifies _v2.alloc;
- /* free */ ensures new == old(_v2.alloc);
- /* free */ ensures _v2.INT_GT(_v2.alloc, _v2.INT_ADD(new, obj_size));
- /* free */ ensures _v2.Base(new) == new;
- /* free */ ensures _v2.INT_GEQ(new, 0);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.__HAVOC_det_malloc(obj_size: int) returns (new: int);
- /* free */ requires _v2.INT_GEQ(obj_size, 0);
- modifies _v2.alloc;
- /* free */ ensures new == old(_v2.alloc);
- /* free */ ensures _v2.INT_GT(_v2.alloc, _v2.INT_ADD(new, obj_size));
- /* free */ ensures _v2.Base(new) == new;
- /* free */ ensures _v2.alloc == _v2.NewAlloc(old(_v2.alloc), obj_size);
- /* free */ ensures _v2.INT_GEQ(new, 0);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-
-procedure _v2.nondet_choice() returns (x: int);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.det_choice() returns (x: int);
- modifies _v2.detChoiceCnt;
- /* free */ ensures _v2.detChoiceCnt == _v2.INT_ADD(old(_v2.detChoiceCnt), 1);
- /* free */ ensures x == _v2.DetChoiceFunc(old(_v2.detChoiceCnt));
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2._strdup(str: int) returns (new: int);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2._xstrcasecmp(a0: int, a1: int) returns (ret: int);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2._xstrcmp(a0: int, a1: int) returns (ret: int);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.memcpy(a0: int, a1: int, a2: int) returns (ret: int);
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.encode_ie(buf_.1: int,
- bufsize_.1: int,
- ie_.1: int,
- ielen_.1: int,
- leader_.1: int,
- leader_len_.1: int)
- returns (result.encode_ie$1: int);
- modifies _v2.OK, _v2.Mem_T.UCHAR;
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int);
- modifies _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.main() returns (result.main$1: int);
- modifies _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-procedure _v2.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
- returns (out_bufsize: int, out_i: int, out_p: int, out_tempBoogie0: int);
- modifies _v2.Mem_T.UCHAR, _v2.OK;
- /* free */ ensures _v2.OK ==> old(_v2.OK);
-
-
-
-implementation _v2.encode_ie(buf_.1: int,
- bufsize_.1: int,
- ie_.1: int,
- ielen_.1: int,
- leader_.1: int,
- leader_len_.1: int)
- returns (result.encode_ie$1: int)
-{
- var {:extern} havoc_stringTemp: int;
- var {:extern} condVal: int;
- var {:extern} buf: int;
- var {:extern} bufsize: int;
- var {:extern} i: int;
- var {:extern} ie: int;
- var {:extern} ielen: int;
- var {:extern} leader: int;
- var {:extern} leader_len: int;
- var {:extern} p: int;
- var {:extern} result.memcpy$2: int;
- var {:extern} $result.question.3.$$static$: int;
- var {:extern} tempBoogie0: int;
- var {:extern} tempBoogie1: int;
- var {:extern} tempBoogie2: int;
- var {:extern} tempBoogie3: int;
- var {:extern} tempBoogie4: int;
- var {:extern} tempBoogie5: int;
- var {:extern} tempBoogie6: int;
- var {:extern} tempBoogie7: int;
- var {:extern} tempBoogie8: int;
- var {:extern} tempBoogie9: int;
- var {:extern} tempBoogie10: int;
- var {:extern} tempBoogie11: int;
- var {:extern} tempBoogie12: int;
- var {:extern} tempBoogie13: int;
- var {:extern} tempBoogie14: int;
- var {:extern} tempBoogie15: int;
- var {:extern} tempBoogie16: int;
- var {:extern} tempBoogie17: int;
- var {:extern} tempBoogie18: int;
- var {:extern} tempBoogie19: int;
- var {:extern} __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume _v2.INT_LT(buf_.1, _v2.alloc);
- assume _v2.INT_LT(ie_.1, _v2.alloc);
- assume _v2.INT_LT(leader_.1, _v2.alloc);
- buf := 0;
- assume _v2.INT_GEQ(buf_.1, 0);
- bufsize := 0;
- i := 0;
- ie := 0;
- assume _v2.INT_GEQ(ie_.1, 0);
- ielen := 0;
- leader := 0;
- assume _v2.INT_GEQ(leader_.1, 0);
- leader_len := 0;
- p := 0;
- result.encode_ie$1 := 0;
- result.memcpy$2 := 0;
- $result.question.3.$$static$ := 0;
- buf := buf_.1;
- bufsize := bufsize_.1;
- ie := ie_.1;
- ielen := ielen_.1;
- leader := leader_.1;
- leader_len := leader_len_.1;
- goto label_3#2;
-
- label_3#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 9} true;
- goto label_4#2;
-
- label_4#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 10} true;
- goto label_5#2;
-
- label_5#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 13} true;
- goto label_5_true#2, label_5_false#2;
-
- label_5_false#2:
- assume !_v2.INT_LT(bufsize, leader_len);
- assume _v2.value_is(_v2.__ctobpl_const_1, bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_2, leader_len);
- goto label_6#2;
-
- label_6#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 15} true;
- p := buf;
- assume _v2.value_is(_v2.__ctobpl_const_3, p);
- assume _v2.value_is(_v2.__ctobpl_const_4, buf);
- goto label_8#2;
-
- label_8#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 16} true;
- call result.memcpy$2 := _v2.memcpy(p, leader, leader_len);
- assume _v2.value_is(_v2.__ctobpl_const_5, p);
- assume _v2.value_is(_v2.__ctobpl_const_6, leader);
- assume _v2.value_is(_v2.__ctobpl_const_7, leader_len);
- assume _v2.value_is(_v2.__ctobpl_const_8, p);
- assume _v2.value_is(_v2.__ctobpl_const_9, leader);
- assume _v2.value_is(_v2.__ctobpl_const_10, leader_len);
- goto label_11#2;
-
- label_11#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 17} true;
- havoc tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(bufsize, leader_len, 1, tempBoogie0);
- bufsize := tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_11, bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_12, leader_len);
- goto label_12#2;
-
- label_12#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 18} true;
- tempBoogie0 := _v2.INT_PLUS(p, 1, leader_len);
- p := tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_13, p);
- assume _v2.value_is(_v2.__ctobpl_const_14, leader_len);
- goto label_13#2;
-
- label_13#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- i := 0;
- assume _v2.value_is(_v2.__ctobpl_const_15, i);
- goto label_14#2;
-
- label_14#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- goto label_14_head#2;
-
- label_14_head#2:
- call bufsize, i, p, tempBoogie0 := _v2.encode_ie_loop_label_14_head(bufsize, i, ielen, p, tempBoogie0);
- goto label_14_head_last#2;
-
- label_14_head_last#2:
- goto label_14_true#2, label_14_false#2;
-
- label_14_false#2:
- assume !_v2.INT_LT(i, ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, i);
- assume _v2.value_is(_v2.__ctobpl_const_17, ielen);
- goto label_15#2;
-
- label_14_true#2:
- assume _v2.INT_LT(i, ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, i);
- assume _v2.value_is(_v2.__ctobpl_const_17, ielen);
- goto label_16#2;
-
- label_16#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- goto label_16_true#2, label_16_false#2;
-
- label_16_false#2:
- assume !_v2.INT_LT(2, bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, bufsize);
- goto label_15#2;
-
- label_15#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- goto label_15_true#2, label_15_false#2;
-
- label_15_false#2:
- assume !_v2.INT_EQ(i, ielen);
- assume _v2.value_is(_v2.__ctobpl_const_18, i);
- assume _v2.value_is(_v2.__ctobpl_const_19, ielen);
- goto label_22#2;
-
- label_22#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- $result.question.3.$$static$ := 0;
- assume _v2.value_is(_v2.__ctobpl_const_28, $result.question.3.$$static$);
- goto label_24#2;
-
- label_15_true#2:
- assume _v2.INT_EQ(i, ielen);
- assume _v2.value_is(_v2.__ctobpl_const_18, i);
- assume _v2.value_is(_v2.__ctobpl_const_19, ielen);
- goto label_23#2;
-
- label_23#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- havoc $result.question.3.$$static$;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(p, buf, 1, $result.question.3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_29, $result.question.3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_30, p);
- assume _v2.value_is(_v2.__ctobpl_const_31, buf);
- goto label_24#2;
-
- label_24#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- result.encode_ie$1 := $result.question.3.$$static$;
- assume _v2.value_is(_v2.__ctobpl_const_32, $result.question.3.$$static$);
- goto label_1#2;
-
- label_16_true#2:
- assume _v2.INT_LT(2, bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, bufsize);
- goto label_17#2;
-
- label_17#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(p, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(p) == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[p := 120];
- assume _v2.value_is(_v2.__ctobpl_const_21, p);
- assume _v2.value_is(_v2.__ctobpl_const_22, _v2.Mem_T.UCHAR[p]);
- goto label_18#2;
-
- label_18#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(p, 1, 1), 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(p, 1, 1)) == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1) := 120];
- assume _v2.value_is(_v2.__ctobpl_const_23, p);
- assume _v2.value_is(_v2.__ctobpl_const_24, _v2.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1)]);
- goto label_19#2;
-
- label_19#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
- tempBoogie0 := _v2.INT_PLUS(p, 1, 2);
- p := tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_25, p);
- goto label_20#2;
-
- label_20#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
- havoc tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(bufsize, 2, 1, tempBoogie0);
- bufsize := tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_26, bufsize);
- goto label_21#2;
-
- label_21#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- assume _v2.value_is(_v2.__ctobpl_const_27, i);
- i := _v2.INT_PLUS(i, 1, 1);
- goto label_21_dummy#2;
-
- label_21_dummy#2:
- assume false;
- return;
-
- label_5_true#2:
- assume _v2.INT_LT(bufsize, leader_len);
- assume _v2.value_is(_v2.__ctobpl_const_1, bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_2, leader_len);
- goto label_7#2;
-
- label_7#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 14} true;
- result.encode_ie$1 := 0;
- goto label_1#2;
-
- label_1#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 40} true;
- return;
-}
-
-
-
-implementation _v2.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int)
-{
- var {:extern} havoc_stringTemp: int;
- var {:extern} condVal: int;
- var {:extern} buf: int;
- var {:extern} $encode_ie.arg.4$3.$$static$: int;
- var {:extern} result.encode_ie$2: int;
- var {:extern} rsn_leader: int;
- var {:extern} se: int;
- var {:extern} tempBoogie0: int;
- var {:extern} tempBoogie1: int;
- var {:extern} tempBoogie2: int;
- var {:extern} tempBoogie3: int;
- var {:extern} tempBoogie4: int;
- var {:extern} tempBoogie5: int;
- var {:extern} tempBoogie6: int;
- var {:extern} tempBoogie7: int;
- var {:extern} tempBoogie8: int;
- var {:extern} tempBoogie9: int;
- var {:extern} tempBoogie10: int;
- var {:extern} tempBoogie11: int;
- var {:extern} tempBoogie12: int;
- var {:extern} tempBoogie13: int;
- var {:extern} tempBoogie14: int;
- var {:extern} tempBoogie15: int;
- var {:extern} tempBoogie16: int;
- var {:extern} tempBoogie17: int;
- var {:extern} tempBoogie18: int;
- var {:extern} tempBoogie19: int;
- var {:extern} __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume _v2.INT_LT(se_.1, _v2.alloc);
- call buf := _v2.__HAVOC_det_malloc(6);
- $encode_ie.arg.4$3.$$static$ := 0;
- result.encode_ie$2 := 0;
- result.giwscan_cb$1 := 0;
- call rsn_leader := _v2.__HAVOC_det_malloc(1);
- se := 0;
- assume _v2.INT_GEQ(se_.1, 0);
- se := se_.1;
- goto label_3#2;
-
- label_3#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 46} true;
- goto label_4#2;
-
- label_4#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 47} true;
- goto label_5#2;
-
- label_5#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 51} true;
- assume _v2.INT_GEQ(se, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- goto label_5_true#2, label_5_false#2;
-
- label_5_false#2:
- assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
- == 0;
- assume _v2.value_is(_v2.__ctobpl_const_33, se);
- assume _v2.value_is(_v2.__ctobpl_const_34,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- goto label_6#2;
-
- label_5_true#2:
- assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
- != 0;
- assume _v2.value_is(_v2.__ctobpl_const_33, se);
- assume _v2.value_is(_v2.__ctobpl_const_34,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- goto label_7#2;
-
- label_7#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 52} true;
- assume _v2.INT_GEQ(se, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0))
- == 1;
- assert true;
- goto label_7_true#2, label_7_false#2;
-
- label_7_false#2:
- assume !_v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v2.__ctobpl_const_35, se);
- assume _v2.value_is(_v2.__ctobpl_const_36,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v2.__ctobpl_const_37,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)]);
- goto label_6#2;
-
- label_7_true#2:
- assume _v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v2.__ctobpl_const_35, se);
- assume _v2.value_is(_v2.__ctobpl_const_36,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v2.__ctobpl_const_37,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)]);
- goto label_8#2;
-
- label_8#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 54} true;
- assume _v2.INT_GEQ(se, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1))
- == 1;
- assert true;
- $encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1)],
- 1,
- 2);
- assume _v2.value_is(_v2.__ctobpl_const_38, $encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_39, se);
- assume _v2.value_is(_v2.__ctobpl_const_40,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v2.__ctobpl_const_41,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1)]);
- goto label_9#2;
-
- label_9#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 53} true;
- assume _v2.INT_GEQ(se, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(se, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- call result.encode_ie$2 := _v2.encode_ie(buf, 6, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)], $encode_ie.arg.4$3.$$static$, rsn_leader, 1);
- assume _v2.value_is(_v2.__ctobpl_const_42, se);
- assume _v2.value_is(_v2.__ctobpl_const_43,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v2.__ctobpl_const_44, $encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_45, se);
- assume _v2.value_is(_v2.__ctobpl_const_46,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v2.__ctobpl_const_47, $encode_ie.arg.4$3.$$static$);
- goto label_6#2;
-
- label_6#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 58} true;
- result.giwscan_cb$1 := 0;
- goto label_1#2;
-
- label_1#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 59} true;
- call _v2.__HAVOC_free(buf);
- call _v2.__HAVOC_free(rsn_leader);
- return;
-}
-
-
-
-implementation _v2.main() returns (result.main$1: int)
-{
- var {:extern} havoc_stringTemp: int;
- var {:extern} condVal: int;
- var {:extern} ie: int;
- var {:extern} result.giwscan_cb$2: int;
- var {:extern} se: int;
- var {:extern} tempBoogie0: int;
- var {:extern} tempBoogie1: int;
- var {:extern} tempBoogie2: int;
- var {:extern} tempBoogie3: int;
- var {:extern} tempBoogie4: int;
- var {:extern} tempBoogie5: int;
- var {:extern} tempBoogie6: int;
- var {:extern} tempBoogie7: int;
- var {:extern} tempBoogie8: int;
- var {:extern} tempBoogie9: int;
- var {:extern} tempBoogie10: int;
- var {:extern} tempBoogie11: int;
- var {:extern} tempBoogie12: int;
- var {:extern} tempBoogie13: int;
- var {:extern} tempBoogie14: int;
- var {:extern} tempBoogie15: int;
- var {:extern} tempBoogie16: int;
- var {:extern} tempBoogie17: int;
- var {:extern} tempBoogie18: int;
- var {:extern} tempBoogie19: int;
- var {:extern} __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- call ie := _v2.__HAVOC_det_malloc(5);
- result.giwscan_cb$2 := 0;
- result.main$1 := 0;
- call se := _v2.__HAVOC_det_malloc(4);
- goto label_3#2;
-
- label_3#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 63} true;
- goto label_4#2;
-
- label_4#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 64} true;
- goto label_5#2;
-
- label_5#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 65} true;
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se) := ie];
- assume _v2.value_is(_v2.__ctobpl_const_48,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- goto label_6#2;
-
- label_6#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 66} true;
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0))
- == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0) := 200];
- assume _v2.value_is(_v2.__ctobpl_const_49,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v2.__ctobpl_const_50,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)]);
- goto label_7#2;
-
- label_7#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 67} true;
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1))
- == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1) := 3];
- assume _v2.value_is(_v2.__ctobpl_const_51,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v2.__ctobpl_const_52,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1)]);
- goto label_8#2;
-
- label_8#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 69} true;
- assume _v2.INT_GT(se, 0);
- assume _v2.INT_GT(se, 0);
- call result.giwscan_cb$2 := _v2.giwscan_cb(se);
- goto label_11#2;
-
- label_11#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 71} true;
- result.main$1 := 0;
- goto label_1#2;
-
- label_1#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 72} true;
- call _v2.__HAVOC_free(ie);
- call _v2.__HAVOC_free(se);
- return;
-}
-
-
-
-implementation _v2.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
- returns (out_bufsize: int, out_i: int, out_p: int, out_tempBoogie0: int)
-{
-
- entry#2:
- out_bufsize, out_i, out_p, out_tempBoogie0 := in_bufsize, in_i, in_p, in_tempBoogie0;
- goto label_14_head#2;
-
- label_14_head#2:
- goto label_14_true#2, label_14_false#2;
-
- label_14_false#2:
- assume !_v2.INT_LT(out_i, in_ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, out_i);
- assume _v2.value_is(_v2.__ctobpl_const_17, in_ielen);
- out_bufsize, out_i, out_p, out_tempBoogie0 := in_bufsize, in_i, in_p, in_tempBoogie0;
- _v2.Mem_T.UCHAR := old(_v2.Mem_T.UCHAR);
- return;
-
- label_14_true#2:
- assume _v2.INT_LT(out_i, in_ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, out_i);
- assume _v2.value_is(_v2.__ctobpl_const_17, in_ielen);
- goto label_16#2;
-
- label_16#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- goto label_16_true#2, label_16_false#2;
-
- label_16_false#2:
- assume !_v2.INT_LT(2, out_bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, out_bufsize);
- out_bufsize, out_i, out_p, out_tempBoogie0 := in_bufsize, in_i, in_p, in_tempBoogie0;
- _v2.Mem_T.UCHAR := old(_v2.Mem_T.UCHAR);
- return;
-
- label_16_true#2:
- assume _v2.INT_LT(2, out_bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, out_bufsize);
- goto label_17#2;
-
- label_17#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(out_p, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(out_p) == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[out_p := 120];
- assume _v2.value_is(_v2.__ctobpl_const_21, out_p);
- assume _v2.value_is(_v2.__ctobpl_const_22, _v2.Mem_T.UCHAR[out_p]);
- goto label_18#2;
-
- label_18#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(out_p, 1, 1), 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(out_p, 1, 1)) == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1) := 120];
- assume _v2.value_is(_v2.__ctobpl_const_23, out_p);
- assume _v2.value_is(_v2.__ctobpl_const_24, _v2.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1)]);
- goto label_19#2;
-
- label_19#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
- out_tempBoogie0 := _v2.INT_PLUS(out_p, 1, 2);
- out_p := out_tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_25, out_p);
- goto label_20#2;
-
- label_20#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
- havoc out_tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(out_bufsize, 2, 1, out_tempBoogie0);
- out_bufsize := out_tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_26, out_bufsize);
- goto label_21#2;
-
- label_21#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- assume _v2.value_is(_v2.__ctobpl_const_27, out_i);
- out_i := _v2.INT_PLUS(out_i, 1, 1);
- goto label_21_dummy#2;
-
- label_21_dummy#2:
- call out_bufsize, out_i, out_p, out_tempBoogie0 := _v2.encode_ie_loop_label_14_head(out_bufsize, out_i, in_ielen, out_p, out_tempBoogie0);
- return;
-}
-
-
-
-function _v1.ite(b: bool, x: int, y: int) : int;
-
-
-var _v1.OK: bool;
-
-var {:extern} _v1.Mem: [name][int]int;
-
-var {:extern} _v1.alloc: int;
-
-var {:extern} _v1.Mem_T.A1CHAR: [int]int;
-
-var {:extern} _v1.Mem_T.A5UCHAR: [int]int;
-
-var {:extern} _v1.Mem_T.A6UCHAR: [int]int;
-
-var {:extern} _v1.Mem_T.CHAR: [int]int;
-
-var {:extern} _v1.Mem_T.INT4: [int]int;
-
-var {:extern} _v1.Mem_T.PCHAR: [int]int;
-
-var {:extern} _v1.Mem_T.PUCHAR: [int]int;
-
-var {:extern} _v1.Mem_T.PVOID: [int]int;
-
-var {:extern} _v1.Mem_T.Pieee80211_scan_entry: [int]int;
-
-var {:extern} _v1.Mem_T.UCHAR: [int]int;
-
-var {:extern} _v1.Mem_T.VOID: [int]int;
-
-var {:extern} _v1.Mem_T.ieee80211_scan_entry: [int]int;
-
-var {:extern} _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
-
-var {:extern} _v1.detChoiceCnt: int;
-
-var {:extern} _v1.Res_KERNEL_SOURCE: [int]int;
-
-var {:extern} _v1.Res_PROBED: [int]int;
-
-const {:extern} unique _v1.T.se_rsn_ie_ieee80211_scan_entry: name;
-
-const {:extern} unique _v1.T.A1CHAR: name;
-
-const {:extern} unique _v1.T.A5UCHAR: name;
-
-const {:extern} unique _v1.T.A6UCHAR: name;
-
-const {:extern} unique _v1.T.CHAR: name;
-
-const {:extern} unique _v1.T.INT4: name;
-
-const {:extern} unique _v1.T.PA1CHAR: name;
-
-const {:extern} unique _v1.T.PA5UCHAR: name;
-
-const {:extern} unique _v1.T.PA6UCHAR: name;
-
-const {:extern} unique _v1.T.PCHAR: name;
-
-const {:extern} unique _v1.T.PINT4: name;
-
-const {:extern} unique _v1.T.PPCHAR: name;
-
-const {:extern} unique _v1.T.PPUCHAR: name;
-
-const {:extern} unique _v1.T.PPVOID: name;
-
-const {:extern} unique _v1.T.PPieee80211_scan_entry: name;
-
-const {:extern} unique _v1.T.PUCHAR: name;
-
-const {:extern} unique _v1.T.PUINT4: name;
-
-const {:extern} unique _v1.T.PVOID: name;
-
-const {:extern} unique _v1.T.Pieee80211_scan_entry: name;
-
-const {:extern} unique _v1.T.UCHAR: name;
-
-const {:extern} unique _v1.T.UINT4: name;
-
-const {:extern} unique _v1.T.VOID: name;
-
-const {:extern} unique _v1.T.ieee80211_scan_entry: name;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_5: int;
-
-const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_6: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_7: int;
-
-const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_9: int;
-
-const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 13} unique _v1.__ctobpl_const_1: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_8: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_10: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 13} unique _v1.__ctobpl_const_2: int;
-
-const {:extern} {:model_const "*(p + 1)"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 32} unique _v1.__ctobpl_const_24: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 33} unique _v1.__ctobpl_const_25: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_26: int;
-
-const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_28: int;
-
-const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 17} unique _v1.__ctobpl_const_11: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 32} unique _v1.__ctobpl_const_23: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 18} unique _v1.__ctobpl_const_13: int;
-
-const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_30: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 50} unique _v1.__ctobpl_const_32: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 17} unique _v1.__ctobpl_const_12: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 50} unique _v1.__ctobpl_const_33: int;
-
-const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_20: int;
-
-const {:extern} {:model_const "*p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 30} unique _v1.__ctobpl_const_22: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_18: int;
-
-const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_31: int;
-
-const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_19: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_16: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 30} unique _v1.__ctobpl_const_21: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_29: int;
-
-const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_27: int;
-
-const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_17: int;
-
-const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 18} unique _v1.__ctobpl_const_14: int;
-
-const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_15: int;
-
-const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 15} unique _v1.__ctobpl_const_3: int;
-
-const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 15} unique _v1.__ctobpl_const_4: int;
-
-const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 66} unique _v1.__ctobpl_const_50: int;
-
-const {:extern} {:model_const "(se.se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 65} unique _v1.__ctobpl_const_49: int;
-
-const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 65} unique _v1.__ctobpl_const_48: int;
-
-const {:extern} {:model_const "(se.se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 66} unique _v1.__ctobpl_const_51: int;
-
-const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 64} unique _v1.__ctobpl_const_47: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_41: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_42: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_45: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 51} unique _v1.__ctobpl_const_35: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_44: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 51} unique _v1.__ctobpl_const_34: int;
-
-const {:extern} {:model_const "(se->se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_40: int;
-
-const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_38: int;
-
-const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_43: int;
-
-const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_46: int;
-
-const {:extern} {:model_const "(se->se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 51} unique _v1.__ctobpl_const_36: int;
-
-const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_37: int;
-
-const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_39: int;
-
-function {:inline true} _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(a : int, b : int, size : int, result : int) : bool
-{
- (size * result <= a - b) && (a - b < size * (result + 1))
-}
-
-
-
-procedure _v1.havoc_assert(i: int);
- /* free */ requires i != 0;
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.havoc_assume(i: int);
- /* free */ ensures i != 0;
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.__HAVOC_free(a: int);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.__HAVOC_malloc(obj_size: int) returns (new: int);
- /* free */ requires _v2.INT_GEQ(obj_size, 0);
- modifies _v1.alloc;
- /* free */ ensures new == old(_v1.alloc);
- /* free */ ensures _v2.INT_GT(_v1.alloc, _v2.INT_ADD(new, obj_size));
- /* free */ ensures _v2.Base(new) == new;
- /* free */ ensures _v2.INT_GEQ(new, 0);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.__HAVOC_det_malloc(obj_size: int) returns (new: int);
- /* free */ requires _v2.INT_GEQ(obj_size, 0);
- modifies _v1.alloc;
- /* free */ ensures new == old(_v1.alloc);
- /* free */ ensures _v2.INT_GT(_v1.alloc, _v2.INT_ADD(new, obj_size));
- /* free */ ensures _v2.Base(new) == new;
- /* free */ ensures _v1.alloc == _v2.NewAlloc(old(_v1.alloc), obj_size);
- /* free */ ensures _v2.INT_GEQ(new, 0);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-
-procedure _v1.nondet_choice() returns (x: int);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.det_choice() returns (x: int);
- modifies _v1.detChoiceCnt;
- /* free */ ensures _v1.detChoiceCnt == _v2.INT_ADD(old(_v1.detChoiceCnt), 1);
- /* free */ ensures x == _v2.DetChoiceFunc(old(_v1.detChoiceCnt));
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1._strdup(str: int) returns (new: int);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1._xstrcasecmp(a0: int, a1: int) returns (ret: int);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1._xstrcmp(a0: int, a1: int) returns (ret: int);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.memcpy(a0: int, a1: int, a2: int) returns (ret: int);
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.encode_ie(buf_.1: int,
- bufsize_.1: int,
- ie_.1: int,
- ielen_.1: int,
- leader_.1: int,
- leader_len_.1: int)
- returns (result.encode_ie$1: int);
- modifies _v1.OK, _v1.Mem_T.UCHAR;
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int);
- modifies _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.main() returns (result.main$1: int);
- modifies _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-procedure _v1.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
- returns (out_i: int, out_p: int, out_tempBoogie0: int);
- modifies _v1.Mem_T.UCHAR, _v1.OK;
- /* free */ ensures _v1.OK ==> old(_v1.OK);
-
-
-
-implementation _v1.encode_ie(buf_.1: int,
- bufsize_.1: int,
- ie_.1: int,
- ielen_.1: int,
- leader_.1: int,
- leader_len_.1: int)
- returns (result.encode_ie$1: int)
-{
- var {:extern} havoc_stringTemp: int;
- var {:extern} condVal: int;
- var {:extern} buf: int;
- var {:extern} bufsize: int;
- var {:extern} i: int;
- var {:extern} ie: int;
- var {:extern} ielen: int;
- var {:extern} leader: int;
- var {:extern} leader_len: int;
- var {:extern} p: int;
- var {:extern} result.memcpy$2: int;
- var {:extern} $result.question.3.$$static$: int;
- var {:extern} tempBoogie0: int;
- var {:extern} tempBoogie1: int;
- var {:extern} tempBoogie2: int;
- var {:extern} tempBoogie3: int;
- var {:extern} tempBoogie4: int;
- var {:extern} tempBoogie5: int;
- var {:extern} tempBoogie6: int;
- var {:extern} tempBoogie7: int;
- var {:extern} tempBoogie8: int;
- var {:extern} tempBoogie9: int;
- var {:extern} tempBoogie10: int;
- var {:extern} tempBoogie11: int;
- var {:extern} tempBoogie12: int;
- var {:extern} tempBoogie13: int;
- var {:extern} tempBoogie14: int;
- var {:extern} tempBoogie15: int;
- var {:extern} tempBoogie16: int;
- var {:extern} tempBoogie17: int;
- var {:extern} tempBoogie18: int;
- var {:extern} tempBoogie19: int;
- var {:extern} __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume _v2.INT_LT(buf_.1, _v1.alloc);
- assume _v2.INT_LT(ie_.1, _v1.alloc);
- assume _v2.INT_LT(leader_.1, _v1.alloc);
- buf := 0;
- assume _v2.INT_GEQ(buf_.1, 0);
- bufsize := 0;
- i := 0;
- ie := 0;
- assume _v2.INT_GEQ(ie_.1, 0);
- ielen := 0;
- leader := 0;
- assume _v2.INT_GEQ(leader_.1, 0);
- leader_len := 0;
- p := 0;
- result.encode_ie$1 := 0;
- result.memcpy$2 := 0;
- $result.question.3.$$static$ := 0;
- buf := buf_.1;
- bufsize := bufsize_.1;
- ie := ie_.1;
- ielen := ielen_.1;
- leader := leader_.1;
- leader_len := leader_len_.1;
- goto label_3#2;
-
- label_3#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 9} true;
- goto label_4#2;
-
- label_4#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 10} true;
- goto label_5#2;
-
- label_5#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 13} true;
- goto label_5_true#2, label_5_false#2;
-
- label_5_false#2:
- assume !_v2.INT_LT(bufsize, leader_len);
- assume _v2.value_is(_v1.__ctobpl_const_1, bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_2, leader_len);
- goto label_6#2;
-
- label_6#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 15} true;
- p := buf;
- assume _v2.value_is(_v1.__ctobpl_const_3, p);
- assume _v2.value_is(_v1.__ctobpl_const_4, buf);
- goto label_8#2;
-
- label_8#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 16} true;
- call result.memcpy$2 := _v1.memcpy(p, leader, leader_len);
- assume _v2.value_is(_v1.__ctobpl_const_5, p);
- assume _v2.value_is(_v1.__ctobpl_const_6, leader);
- assume _v2.value_is(_v1.__ctobpl_const_7, leader_len);
- assume _v2.value_is(_v1.__ctobpl_const_8, p);
- assume _v2.value_is(_v1.__ctobpl_const_9, leader);
- assume _v2.value_is(_v1.__ctobpl_const_10, leader_len);
- goto label_11#2;
-
- label_11#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 17} true;
- havoc tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(bufsize, leader_len, 1, tempBoogie0);
- bufsize := tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_11, bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_12, leader_len);
- goto label_12#2;
-
- label_12#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 18} true;
- tempBoogie0 := _v2.INT_PLUS(p, 1, leader_len);
- p := tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_13, p);
- assume _v2.value_is(_v1.__ctobpl_const_14, leader_len);
- goto label_13#2;
-
- label_13#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- i := 0;
- assume _v2.value_is(_v1.__ctobpl_const_15, i);
- goto label_14#2;
-
- label_14#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- goto label_14_head#2;
-
- label_14_head#2:
- call i, p, tempBoogie0 := _v1.encode_ie_loop_label_14_head(bufsize, i, ielen, p, tempBoogie0);
- goto label_14_head_last#2;
-
- label_14_head_last#2:
- goto label_14_true#2, label_14_false#2;
-
- label_14_false#2:
- assume !_v2.INT_LT(i, ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, i);
- assume _v2.value_is(_v1.__ctobpl_const_17, ielen);
- goto label_15#2;
-
- label_14_true#2:
- assume _v2.INT_LT(i, ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, i);
- assume _v2.value_is(_v1.__ctobpl_const_17, ielen);
- goto label_16#2;
-
- label_16#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- goto label_16_true#2, label_16_false#2;
-
- label_16_false#2:
- assume !_v2.INT_LT(2, bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, bufsize);
- goto label_15#2;
-
- label_15#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- goto label_15_true#2, label_15_false#2;
-
- label_15_false#2:
- assume !_v2.INT_EQ(i, ielen);
- assume _v2.value_is(_v1.__ctobpl_const_18, i);
- assume _v2.value_is(_v1.__ctobpl_const_19, ielen);
- goto label_21#2;
-
- label_21#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- $result.question.3.$$static$ := 0;
- assume _v2.value_is(_v1.__ctobpl_const_27, $result.question.3.$$static$);
- goto label_23#2;
-
- label_15_true#2:
- assume _v2.INT_EQ(i, ielen);
- assume _v2.value_is(_v1.__ctobpl_const_18, i);
- assume _v2.value_is(_v1.__ctobpl_const_19, ielen);
- goto label_22#2;
-
- label_22#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- havoc $result.question.3.$$static$;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(p, buf, 1, $result.question.3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_28, $result.question.3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_29, p);
- assume _v2.value_is(_v1.__ctobpl_const_30, buf);
- goto label_23#2;
-
- label_23#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- result.encode_ie$1 := $result.question.3.$$static$;
- assume _v2.value_is(_v1.__ctobpl_const_31, $result.question.3.$$static$);
- goto label_1#2;
-
- label_16_true#2:
- assume _v2.INT_LT(2, bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, bufsize);
- goto label_17#2;
-
- label_17#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(p, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(p) == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[p := 120];
- assume _v2.value_is(_v1.__ctobpl_const_21, p);
- assume _v2.value_is(_v1.__ctobpl_const_22, _v1.Mem_T.UCHAR[p]);
- goto label_18#2;
-
- label_18#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(p, 1, 1), 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(p, 1, 1)) == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1) := 120];
- assume _v2.value_is(_v1.__ctobpl_const_23, p);
- assume _v2.value_is(_v1.__ctobpl_const_24, _v1.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1)]);
- goto label_19#2;
-
- label_19#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
- tempBoogie0 := _v2.INT_PLUS(p, 1, 2);
- p := tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_25, p);
- goto label_20#2;
-
- label_20#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- assume _v2.value_is(_v1.__ctobpl_const_26, i);
- i := _v2.INT_PLUS(i, 1, 1);
- goto label_20_dummy#2;
-
- label_20_dummy#2:
- assume false;
- return;
-
- label_5_true#2:
- assume _v2.INT_LT(bufsize, leader_len);
- assume _v2.value_is(_v1.__ctobpl_const_1, bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_2, leader_len);
- goto label_7#2;
-
- label_7#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 14} true;
- result.encode_ie$1 := 0;
- goto label_1#2;
-
- label_1#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 39} true;
- return;
-}
-
-
-
-implementation _v1.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int)
-{
- var {:extern} havoc_stringTemp: int;
- var {:extern} condVal: int;
- var {:extern} buf: int;
- var {:extern} $encode_ie.arg.4$3.$$static$: int;
- var {:extern} result.encode_ie$2: int;
- var {:extern} rsn_leader: int;
- var {:extern} se: int;
- var {:extern} tempBoogie0: int;
- var {:extern} tempBoogie1: int;
- var {:extern} tempBoogie2: int;
- var {:extern} tempBoogie3: int;
- var {:extern} tempBoogie4: int;
- var {:extern} tempBoogie5: int;
- var {:extern} tempBoogie6: int;
- var {:extern} tempBoogie7: int;
- var {:extern} tempBoogie8: int;
- var {:extern} tempBoogie9: int;
- var {:extern} tempBoogie10: int;
- var {:extern} tempBoogie11: int;
- var {:extern} tempBoogie12: int;
- var {:extern} tempBoogie13: int;
- var {:extern} tempBoogie14: int;
- var {:extern} tempBoogie15: int;
- var {:extern} tempBoogie16: int;
- var {:extern} tempBoogie17: int;
- var {:extern} tempBoogie18: int;
- var {:extern} tempBoogie19: int;
- var {:extern} __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume _v2.INT_LT(se_.1, _v1.alloc);
- call buf := _v1.__HAVOC_det_malloc(6);
- $encode_ie.arg.4$3.$$static$ := 0;
- result.encode_ie$2 := 0;
- result.giwscan_cb$1 := 0;
- call rsn_leader := _v1.__HAVOC_det_malloc(1);
- se := 0;
- assume _v2.INT_GEQ(se_.1, 0);
- se := se_.1;
- goto label_3#2;
-
- label_3#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 45} true;
- goto label_4#2;
-
- label_4#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 46} true;
- goto label_5#2;
-
- label_5#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 50} true;
- assume _v2.INT_GEQ(se, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- goto label_5_true#2, label_5_false#2;
-
- label_5_false#2:
- assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
- == 0;
- assume _v2.value_is(_v1.__ctobpl_const_32, se);
- assume _v2.value_is(_v1.__ctobpl_const_33,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- goto label_6#2;
-
- label_5_true#2:
- assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
- != 0;
- assume _v2.value_is(_v1.__ctobpl_const_32, se);
- assume _v2.value_is(_v1.__ctobpl_const_33,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- goto label_7#2;
-
- label_7#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 51} true;
- assume _v2.INT_GEQ(se, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0))
- == 1;
- assert true;
- goto label_7_true#2, label_7_false#2;
-
- label_7_false#2:
- assume !_v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v1.__ctobpl_const_34, se);
- assume _v2.value_is(_v1.__ctobpl_const_35,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v1.__ctobpl_const_36,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)]);
- goto label_6#2;
-
- label_7_true#2:
- assume _v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v1.__ctobpl_const_34, se);
- assume _v2.value_is(_v1.__ctobpl_const_35,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v1.__ctobpl_const_36,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)]);
- goto label_8#2;
-
- label_8#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 53} true;
- assume _v2.INT_GEQ(se, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1))
- == 1;
- assert true;
- $encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1)],
- 1,
- 2);
- assume _v2.value_is(_v1.__ctobpl_const_37, $encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_38, se);
- assume _v2.value_is(_v1.__ctobpl_const_39,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v1.__ctobpl_const_40,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1)]);
- goto label_9#2;
-
- label_9#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 52} true;
- assume _v2.INT_GEQ(se, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(se, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- call result.encode_ie$2 := _v1.encode_ie(buf, 6, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)], $encode_ie.arg.4$3.$$static$, rsn_leader, 1);
- assume _v2.value_is(_v1.__ctobpl_const_41, se);
- assume _v2.value_is(_v1.__ctobpl_const_42,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v1.__ctobpl_const_43, $encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_44, se);
- assume _v2.value_is(_v1.__ctobpl_const_45,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v1.__ctobpl_const_46, $encode_ie.arg.4$3.$$static$);
- goto label_6#2;
-
- label_6#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 57} true;
- result.giwscan_cb$1 := 0;
- goto label_1#2;
-
- label_1#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 58} true;
- call _v1.__HAVOC_free(buf);
- call _v1.__HAVOC_free(rsn_leader);
- return;
-}
-
-
-
-implementation _v1.main() returns (result.main$1: int)
-{
- var {:extern} havoc_stringTemp: int;
- var {:extern} condVal: int;
- var {:extern} ie: int;
- var {:extern} result.giwscan_cb$2: int;
- var {:extern} se: int;
- var {:extern} tempBoogie0: int;
- var {:extern} tempBoogie1: int;
- var {:extern} tempBoogie2: int;
- var {:extern} tempBoogie3: int;
- var {:extern} tempBoogie4: int;
- var {:extern} tempBoogie5: int;
- var {:extern} tempBoogie6: int;
- var {:extern} tempBoogie7: int;
- var {:extern} tempBoogie8: int;
- var {:extern} tempBoogie9: int;
- var {:extern} tempBoogie10: int;
- var {:extern} tempBoogie11: int;
- var {:extern} tempBoogie12: int;
- var {:extern} tempBoogie13: int;
- var {:extern} tempBoogie14: int;
- var {:extern} tempBoogie15: int;
- var {:extern} tempBoogie16: int;
- var {:extern} tempBoogie17: int;
- var {:extern} tempBoogie18: int;
- var {:extern} tempBoogie19: int;
- var {:extern} __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- call ie := _v1.__HAVOC_det_malloc(5);
- result.giwscan_cb$2 := 0;
- result.main$1 := 0;
- call se := _v1.__HAVOC_det_malloc(4);
- goto label_3#2;
-
- label_3#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 62} true;
- goto label_4#2;
-
- label_4#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 63} true;
- goto label_5#2;
-
- label_5#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 64} true;
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se) := ie];
- assume _v2.value_is(_v1.__ctobpl_const_47,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- goto label_6#2;
-
- label_6#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 65} true;
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0))
- == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0) := 200];
- assume _v2.value_is(_v1.__ctobpl_const_48,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v1.__ctobpl_const_49,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 0)]);
- goto label_7#2;
-
- label_7#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 66} true;
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1))
- == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1) := 3];
- assume _v2.value_is(_v1.__ctobpl_const_50,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
- assume _v2.value_is(_v1.__ctobpl_const_51,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
- 1,
- 1)]);
- goto label_8#2;
-
- label_8#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 68} true;
- assume _v2.INT_GT(se, 0);
- assume _v2.INT_GT(se, 0);
- call result.giwscan_cb$2 := _v1.giwscan_cb(se);
- goto label_11#2;
-
- label_11#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 70} true;
- result.main$1 := 0;
- goto label_1#2;
-
- label_1#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 71} true;
- call _v1.__HAVOC_free(ie);
- call _v1.__HAVOC_free(se);
- return;
-}
-
-
-
-implementation _v1.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
- returns (out_i: int, out_p: int, out_tempBoogie0: int)
-{
-
- entry#2:
- out_i, out_p, out_tempBoogie0 := in_i, in_p, in_tempBoogie0;
- goto label_14_head#2;
-
- label_14_head#2:
- goto label_14_true#2, label_14_false#2;
-
- label_14_false#2:
- assume !_v2.INT_LT(out_i, in_ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, out_i);
- assume _v2.value_is(_v1.__ctobpl_const_17, in_ielen);
- out_i, out_p, out_tempBoogie0 := in_i, in_p, in_tempBoogie0;
- _v1.Mem_T.UCHAR := old(_v1.Mem_T.UCHAR);
- return;
-
- label_14_true#2:
- assume _v2.INT_LT(out_i, in_ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, out_i);
- assume _v2.value_is(_v1.__ctobpl_const_17, in_ielen);
- goto label_16#2;
-
- label_16#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- goto label_16_true#2, label_16_false#2;
-
- label_16_false#2:
- assume !_v2.INT_LT(2, in_bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, in_bufsize);
- out_i, out_p, out_tempBoogie0 := in_i, in_p, in_tempBoogie0;
- _v1.Mem_T.UCHAR := old(_v1.Mem_T.UCHAR);
- return;
-
- label_16_true#2:
- assume _v2.INT_LT(2, in_bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, in_bufsize);
- goto label_17#2;
-
- label_17#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(out_p, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(out_p) == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[out_p := 120];
- assume _v2.value_is(_v1.__ctobpl_const_21, out_p);
- assume _v2.value_is(_v1.__ctobpl_const_22, _v1.Mem_T.UCHAR[out_p]);
- goto label_18#2;
-
- label_18#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(out_p, 1, 1), 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(out_p, 1, 1)) == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1) := 120];
- assume _v2.value_is(_v1.__ctobpl_const_23, out_p);
- assume _v2.value_is(_v1.__ctobpl_const_24, _v1.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1)]);
- goto label_19#2;
-
- label_19#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
- out_tempBoogie0 := _v2.INT_PLUS(out_p, 1, 2);
- out_p := out_tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_25, out_p);
- goto label_20#2;
-
- label_20#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- assume _v2.value_is(_v1.__ctobpl_const_26, out_i);
- out_i := _v2.INT_PLUS(out_i, 1, 1);
- goto label_20_dummy#2;
-
- label_20_dummy#2:
- call out_i, out_p, out_tempBoogie0 := _v1.encode_ie_loop_label_14_head(in_bufsize, out_i, in_ielen, out_p, out_tempBoogie0);
- return;
-}
-
-
-
-type {:extern} name;
-
-type {:extern} byte;
-
-function {:inline true} MS$_v1.havoc_assert$_v2.havoc_assert(_v1.i: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v2.i: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.havoc_assert___v2.havoc_assert(_v1.i: int, _v2.i: int);
- requires _v1.i == _v2.i
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.havoc_assert$_v2.havoc_assert(_v1.i,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v2.i,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED));
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.havoc_assume$_v2.havoc_assume(_v1.i: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v2.i: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.havoc_assume___v2.havoc_assume(_v1.i: int, _v2.i: int);
- requires _v1.i == _v2.i
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.havoc_assume$_v2.havoc_assume(_v1.i,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v2.i,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED));
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.__HAVOC_free$_v2.__HAVOC_free(_v1.a: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v2.a: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_0: bool;
-
-const {:existential true} _houdini_1: bool;
-
-const {:existential true} _houdini_2: bool;
-
-const {:existential true} _houdini_3: bool;
-
-const {:existential true} _houdini_4: bool;
-
-const {:existential true} _houdini_5: bool;
-
-const {:existential true} _houdini_6: bool;
-
-const {:existential true} _houdini_7: bool;
-
-const {:existential true} _houdini_8: bool;
-
-const {:existential true} _houdini_9: bool;
-
-const {:existential true} _houdini_10: bool;
-
-const {:existential true} _houdini_11: bool;
-
-const {:existential true} _houdini_12: bool;
-
-const {:existential true} _houdini_13: bool;
-
-const {:existential true} _houdini_14: bool;
-
-const {:existential true} _houdini_15: bool;
-
-const {:existential true} _houdini_16: bool;
-
-const {:existential true} _houdini_17: bool;
-
-const {:existential true} _houdini_18: bool;
-
-const {:existential true} _houdini_19: bool;
-
-const {:existential true} _houdini_20: bool;
-
-const {:existential true} _houdini_21: bool;
-
-const {:existential true} _houdini_22: bool;
-
-const {:existential true} _houdini_23: bool;
-
-procedure MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.a: int, _v2.a: int);
- requires _houdini_0 ==> _v1.a <= _v2.a;
- requires _houdini_1 ==> _v2.a <= _v1.a;
- requires _houdini_2 ==> _v1.OK ==> _v2.OK;
- requires _houdini_3 ==> _v2.OK ==> _v1.OK;
- requires _houdini_4 ==> _v1.Mem == _v2.Mem;
- requires _houdini_5 ==> _v1.alloc <= _v2.alloc;
- requires _houdini_6 ==> _v2.alloc <= _v1.alloc;
- requires _houdini_7 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
- requires _houdini_8 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
- requires _houdini_9 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
- requires _houdini_10 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
- requires _houdini_11 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
- requires _houdini_12 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
- requires _houdini_13 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
- requires _houdini_14 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
- requires _houdini_15
- ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
- requires _houdini_16 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
- requires _houdini_17 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
- requires _houdini_18 ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
- requires _houdini_19
- ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- requires _houdini_20 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
- requires _houdini_21 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
- requires _houdini_22 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
- requires _houdini_23 ==> _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.__HAVOC_free$_v2.__HAVOC_free(_v1.a,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v2.a,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED));
- ensures old(_v1.a == _v2.a) ==> true;
-
-
-
-function {:inline true} MS$_v1.__HAVOC_malloc$_v2.__HAVOC_malloc(_v1.obj_size: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.alloc_: int,
- _v1.new: int,
- _v2.obj_size: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.alloc_: int,
- _v2.new: int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.__HAVOC_malloc___v2.__HAVOC_malloc(_v1.obj_size: int, _v2.obj_size: int) returns (_v1.new: int, _v2.new: int);
- requires _v1.obj_size == _v2.obj_size
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- modifies _v1.alloc, _v2.alloc;
- ensures MS$_v1.__HAVOC_malloc$_v2.__HAVOC_malloc(_v1.obj_size,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.alloc,
- _v1.new,
- _v2.obj_size,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.alloc,
- _v2.new);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.__HAVOC_det_malloc$_v2.__HAVOC_det_malloc(_v1.obj_size: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.alloc_: int,
- _v1.new: int,
- _v2.obj_size: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.alloc_: int,
- _v2.new: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_24: bool;
-
-const {:existential true} _houdini_25: bool;
-
-const {:existential true} _houdini_26: bool;
-
-const {:existential true} _houdini_27: bool;
-
-const {:existential true} _houdini_28: bool;
-
-const {:existential true} _houdini_29: bool;
-
-const {:existential true} _houdini_30: bool;
-
-const {:existential true} _houdini_31: bool;
-
-const {:existential true} _houdini_32: bool;
-
-const {:existential true} _houdini_33: bool;
-
-const {:existential true} _houdini_34: bool;
-
-const {:existential true} _houdini_35: bool;
-
-const {:existential true} _houdini_36: bool;
-
-const {:existential true} _houdini_37: bool;
-
-const {:existential true} _houdini_38: bool;
-
-const {:existential true} _houdini_39: bool;
-
-const {:existential true} _houdini_40: bool;
-
-const {:existential true} _houdini_41: bool;
-
-const {:existential true} _houdini_42: bool;
-
-const {:existential true} _houdini_43: bool;
-
-const {:existential true} _houdini_44: bool;
-
-const {:existential true} _houdini_45: bool;
-
-const {:existential true} _houdini_46: bool;
-
-const {:existential true} _houdini_47: bool;
-
-procedure MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.obj_size: int, _v2.obj_size: int) returns (_v1.new: int, _v2.new: int);
- requires _houdini_24 ==> _v1.obj_size <= _v2.obj_size;
- requires _houdini_25 ==> _v2.obj_size <= _v1.obj_size;
- requires _houdini_26 ==> _v1.OK ==> _v2.OK;
- requires _houdini_27 ==> _v2.OK ==> _v1.OK;
- requires _houdini_28 ==> _v1.Mem == _v2.Mem;
- requires _houdini_29 ==> _v1.alloc <= _v2.alloc;
- requires _houdini_30 ==> _v2.alloc <= _v1.alloc;
- requires _houdini_31 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
- requires _houdini_32 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
- requires _houdini_33 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
- requires _houdini_34 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
- requires _houdini_35 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
- requires _houdini_36 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
- requires _houdini_37 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
- requires _houdini_38 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
- requires _houdini_39
- ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
- requires _houdini_40 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
- requires _houdini_41 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
- requires _houdini_42 ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
- requires _houdini_43
- ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- requires _houdini_44 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
- requires _houdini_45 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
- requires _houdini_46 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
- requires _houdini_47 ==> _v1.Res_PROBED == _v2.Res_PROBED;
- modifies _v1.alloc, _v2.alloc;
- ensures MS$_v1.__HAVOC_det_malloc$_v2.__HAVOC_det_malloc(_v1.obj_size,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.alloc,
- _v1.new,
- _v2.obj_size,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.alloc,
- _v2.new);
- ensures old(_v1.obj_size == _v2.obj_size && _v1.alloc == _v2.alloc)
- ==> _v1.new <= _v2.new
- && _v2.new <= _v1.new
- && _v1.alloc <= _v2.alloc
- && _v2.alloc <= _v1.alloc;
-
-
-
-function {:inline true} MS$_v1.__HAVOC_memset_split_1$_v2.__HAVOC_memset_split_1(_v1.A: [int]int,
- _v1.p: int,
- _v1.c: int,
- _v1.n: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.ret: [int]int,
- _v2.A: [int]int,
- _v2.p: int,
- _v2.c: int,
- _v2.n: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.ret: [int]int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.__HAVOC_memset_split_1___v2.__HAVOC_memset_split_1(_v1.A: [int]int,
- _v1.p: int,
- _v1.c: int,
- _v1.n: int,
- _v2.A: [int]int,
- _v2.p: int,
- _v2.c: int,
- _v2.n: int)
- returns (_v1.ret: [int]int, _v2.ret: [int]int);
- requires _v1.A == _v2.A
- && _v1.p == _v2.p
- && _v1.c == _v2.c
- && _v1.n == _v2.n
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.__HAVOC_memset_split_1$_v2.__HAVOC_memset_split_1(_v1.A,
- _v1.p,
- _v1.c,
- _v1.n,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.ret,
- _v2.A,
- _v2.p,
- _v2.c,
- _v2.n,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.ret);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.__HAVOC_memset_split_2$_v2.__HAVOC_memset_split_2(_v1.A: [int]int,
- _v1.p: int,
- _v1.c: int,
- _v1.n: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.ret: [int]int,
- _v2.A: [int]int,
- _v2.p: int,
- _v2.c: int,
- _v2.n: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.ret: [int]int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.__HAVOC_memset_split_2___v2.__HAVOC_memset_split_2(_v1.A: [int]int,
- _v1.p: int,
- _v1.c: int,
- _v1.n: int,
- _v2.A: [int]int,
- _v2.p: int,
- _v2.c: int,
- _v2.n: int)
- returns (_v1.ret: [int]int, _v2.ret: [int]int);
- requires _v1.A == _v2.A
- && _v1.p == _v2.p
- && _v1.c == _v2.c
- && _v1.n == _v2.n
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.__HAVOC_memset_split_2$_v2.__HAVOC_memset_split_2(_v1.A,
- _v1.p,
- _v1.c,
- _v1.n,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.ret,
- _v2.A,
- _v2.p,
- _v2.c,
- _v2.n,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.ret);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.__HAVOC_memset_split_4$_v2.__HAVOC_memset_split_4(_v1.A: [int]int,
- _v1.p: int,
- _v1.c: int,
- _v1.n: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.ret: [int]int,
- _v2.A: [int]int,
- _v2.p: int,
- _v2.c: int,
- _v2.n: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.ret: [int]int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.__HAVOC_memset_split_4___v2.__HAVOC_memset_split_4(_v1.A: [int]int,
- _v1.p: int,
- _v1.c: int,
- _v1.n: int,
- _v2.A: [int]int,
- _v2.p: int,
- _v2.c: int,
- _v2.n: int)
- returns (_v1.ret: [int]int, _v2.ret: [int]int);
- requires _v1.A == _v2.A
- && _v1.p == _v2.p
- && _v1.c == _v2.c
- && _v1.n == _v2.n
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.__HAVOC_memset_split_4$_v2.__HAVOC_memset_split_4(_v1.A,
- _v1.p,
- _v1.c,
- _v1.n,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.ret,
- _v2.A,
- _v2.p,
- _v2.c,
- _v2.n,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.ret);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.nondet_choice$_v2.nondet_choice(_v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.x: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.x: int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.nondet_choice___v2.nondet_choice() returns (_v1.x: int, _v2.x: int);
- requires (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.nondet_choice$_v2.nondet_choice(old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.x,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.x);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.det_choice$_v2.det_choice(_v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.detChoiceCnt_: int,
- _v1.x: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.detChoiceCnt_: int,
- _v2.x: int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.det_choice___v2.det_choice() returns (_v1.x: int, _v2.x: int);
- requires (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- modifies _v1.detChoiceCnt, _v2.detChoiceCnt;
- ensures MS$_v1.det_choice$_v2.det_choice(old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.detChoiceCnt,
- _v1.x,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.detChoiceCnt,
- _v2.x);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1._strdup$_v2._strdup(_v1.str: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.new: int,
- _v2.str: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.new: int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1._strdup___v2._strdup(_v1.str: int, _v2.str: int) returns (_v1.new: int, _v2.new: int);
- requires _v1.str == _v2.str
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1._strdup$_v2._strdup(_v1.str,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.new,
- _v2.str,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.new);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1._xstrcasecmp$_v2._xstrcasecmp(_v1.a0: int,
- _v1.a1: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.ret: int,
- _v2.a0: int,
- _v2.a1: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.ret: int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1._xstrcasecmp___v2._xstrcasecmp(_v1.a0: int, _v1.a1: int, _v2.a0: int, _v2.a1: int)
- returns (_v1.ret: int, _v2.ret: int);
- requires _v1.a0 == _v2.a0
- && _v1.a1 == _v2.a1
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1._xstrcasecmp$_v2._xstrcasecmp(_v1.a0,
- _v1.a1,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.ret,
- _v2.a0,
- _v2.a1,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.ret);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1._xstrcmp$_v2._xstrcmp(_v1.a0: int,
- _v1.a1: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.ret: int,
- _v2.a0: int,
- _v2.a1: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.ret: int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1._xstrcmp___v2._xstrcmp(_v1.a0: int, _v1.a1: int, _v2.a0: int, _v2.a1: int)
- returns (_v1.ret: int, _v2.ret: int);
- requires _v1.a0 == _v2.a0
- && _v1.a1 == _v2.a1
- &&
- (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1._xstrcmp$_v2._xstrcmp(_v1.a0,
- _v1.a1,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.ret,
- _v2.a0,
- _v2.a1,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.ret);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-function {:inline true} MS$_v1.memcpy$_v2.memcpy(_v1.a0: int,
- _v1.a1: int,
- _v1.a2: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.ret: int,
- _v2.a0: int,
- _v2.a1: int,
- _v2.a2: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.ret: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_48: bool;
-
-const {:existential true} _houdini_49: bool;
-
-const {:existential true} _houdini_50: bool;
-
-const {:existential true} _houdini_51: bool;
-
-const {:existential true} _houdini_52: bool;
-
-const {:existential true} _houdini_53: bool;
-
-const {:existential true} _houdini_54: bool;
-
-const {:existential true} _houdini_55: bool;
-
-const {:existential true} _houdini_56: bool;
-
-const {:existential true} _houdini_57: bool;
-
-const {:existential true} _houdini_58: bool;
-
-const {:existential true} _houdini_59: bool;
-
-const {:existential true} _houdini_60: bool;
-
-const {:existential true} _houdini_61: bool;
-
-const {:existential true} _houdini_62: bool;
-
-const {:existential true} _houdini_63: bool;
-
-const {:existential true} _houdini_64: bool;
-
-const {:existential true} _houdini_65: bool;
-
-const {:existential true} _houdini_66: bool;
-
-const {:existential true} _houdini_67: bool;
-
-const {:existential true} _houdini_68: bool;
-
-const {:existential true} _houdini_69: bool;
-
-const {:existential true} _houdini_70: bool;
-
-const {:existential true} _houdini_71: bool;
-
-const {:existential true} _houdini_72: bool;
-
-const {:existential true} _houdini_73: bool;
-
-const {:existential true} _houdini_74: bool;
-
-const {:existential true} _houdini_75: bool;
-
-procedure MS_Check__v1.memcpy___v2.memcpy(_v1.a0: int, _v1.a1: int, _v1.a2: int, _v2.a0: int, _v2.a1: int, _v2.a2: int)
- returns (_v1.ret: int, _v2.ret: int);
- requires _houdini_48 ==> _v1.a0 <= _v2.a0;
- requires _houdini_49 ==> _v2.a0 <= _v1.a0;
- requires _houdini_50 ==> _v1.a1 <= _v2.a1;
- requires _houdini_51 ==> _v2.a1 <= _v1.a1;
- requires _houdini_52 ==> _v1.a2 <= _v2.a2;
- requires _houdini_53 ==> _v2.a2 <= _v1.a2;
- requires _houdini_54 ==> _v1.OK ==> _v2.OK;
- requires _houdini_55 ==> _v2.OK ==> _v1.OK;
- requires _houdini_56 ==> _v1.Mem == _v2.Mem;
- requires _houdini_57 ==> _v1.alloc <= _v2.alloc;
- requires _houdini_58 ==> _v2.alloc <= _v1.alloc;
- requires _houdini_59 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
- requires _houdini_60 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
- requires _houdini_61 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
- requires _houdini_62 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
- requires _houdini_63 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
- requires _houdini_64 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
- requires _houdini_65 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
- requires _houdini_66 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
- requires _houdini_67
- ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
- requires _houdini_68 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
- requires _houdini_69 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
- requires _houdini_70 ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
- requires _houdini_71
- ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- requires _houdini_72 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
- requires _houdini_73 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
- requires _houdini_74 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
- requires _houdini_75 ==> _v1.Res_PROBED == _v2.Res_PROBED;
- ensures MS$_v1.memcpy$_v2.memcpy(_v1.a0,
- _v1.a1,
- _v1.a2,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.ret,
- _v2.a0,
- _v2.a1,
- _v2.a2,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.ret);
- ensures old(_v1.a0 == _v2.a0 && _v1.a1 == _v2.a1 && _v1.a2 == _v2.a2)
- ==> _v1.ret <= _v2.ret && _v2.ret <= _v1.ret;
-
-
-
-function {:inline true} MS$_v1.encode_ie$_v2.encode_ie(_v1.buf_.1: int,
- _v1.bufsize_.1: int,
- _v1.ie_.1: int,
- _v1.ielen_.1: int,
- _v1.leader_.1: int,
- _v1.leader_len_.1: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.OK_: bool,
- _v1.Mem_T.UCHAR_: [int]int,
- _v1.result.encode_ie$1: int,
- _v2.buf_.1: int,
- _v2.bufsize_.1: int,
- _v2.ie_.1: int,
- _v2.ielen_.1: int,
- _v2.leader_.1: int,
- _v2.leader_len_.1: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.OK_: bool,
- _v2.Mem_T.UCHAR_: [int]int,
- _v2.result.encode_ie$1: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_76: bool;
-
-const {:existential true} _houdini_77: bool;
-
-const {:existential true} _houdini_78: bool;
-
-const {:existential true} _houdini_79: bool;
-
-const {:existential true} _houdini_80: bool;
-
-const {:existential true} _houdini_81: bool;
-
-const {:existential true} _houdini_82: bool;
-
-const {:existential true} _houdini_83: bool;
-
-const {:existential true} _houdini_84: bool;
-
-const {:existential true} _houdini_85: bool;
-
-const {:existential true} _houdini_86: bool;
-
-const {:existential true} _houdini_87: bool;
-
-const {:existential true} _houdini_88: bool;
-
-const {:existential true} _houdini_89: bool;
-
-const {:existential true} _houdini_90: bool;
-
-const {:existential true} _houdini_91: bool;
-
-const {:existential true} _houdini_92: bool;
-
-const {:existential true} _houdini_93: bool;
-
-const {:existential true} _houdini_94: bool;
-
-const {:existential true} _houdini_95: bool;
-
-const {:existential true} _houdini_96: bool;
-
-const {:existential true} _houdini_97: bool;
-
-const {:existential true} _houdini_98: bool;
-
-const {:existential true} _houdini_99: bool;
-
-const {:existential true} _houdini_100: bool;
-
-const {:existential true} _houdini_101: bool;
-
-const {:existential true} _houdini_102: bool;
-
-const {:existential true} _houdini_103: bool;
-
-const {:existential true} _houdini_104: bool;
-
-const {:existential true} _houdini_105: bool;
-
-const {:existential true} _houdini_106: bool;
-
-const {:existential true} _houdini_107: bool;
-
-const {:existential true} _houdini_108: bool;
-
-const {:existential true} _houdini_109: bool;
-
-const {:existential true} _houdini_110: bool;
-
-const {:existential true} _houdini_111: bool;
-
-const {:existential true} _houdini_112: bool;
-
-const {:existential true} _houdini_113: bool;
-
-const {:existential true} _houdini_114: bool;
-
-procedure MS_Check__v1.encode_ie___v2.encode_ie(_v1.buf_.1: int,
- _v1.bufsize_.1: int,
- _v1.ie_.1: int,
- _v1.ielen_.1: int,
- _v1.leader_.1: int,
- _v1.leader_len_.1: int,
- _v2.buf_.1: int,
- _v2.bufsize_.1: int,
- _v2.ie_.1: int,
- _v2.ielen_.1: int,
- _v2.leader_.1: int,
- _v2.leader_len_.1: int)
- returns (_v1.result.encode_ie$1: int, _v2.result.encode_ie$1: int);
- requires _houdini_81 ==> _v1.buf_.1 <= _v2.buf_.1;
- requires _houdini_82 ==> _v2.buf_.1 <= _v1.buf_.1;
- requires _houdini_83 ==> _v1.bufsize_.1 <= _v2.bufsize_.1;
- requires _houdini_84 ==> _v2.bufsize_.1 <= _v1.bufsize_.1;
- requires _houdini_85 ==> _v1.ie_.1 <= _v2.ie_.1;
- requires _houdini_86 ==> _v2.ie_.1 <= _v1.ie_.1;
- requires _houdini_87 ==> _v1.ielen_.1 <= _v2.ielen_.1;
- requires _houdini_88 ==> _v2.ielen_.1 <= _v1.ielen_.1;
- requires _houdini_89 ==> _v1.leader_.1 <= _v2.leader_.1;
- requires _houdini_90 ==> _v2.leader_.1 <= _v1.leader_.1;
- requires _houdini_91 ==> _v1.leader_len_.1 <= _v2.leader_len_.1;
- requires _houdini_92 ==> _v2.leader_len_.1 <= _v1.leader_len_.1;
- requires _houdini_93 ==> _v1.OK ==> _v2.OK;
- requires _houdini_94 ==> _v2.OK ==> _v1.OK;
- requires _houdini_95 ==> _v1.Mem == _v2.Mem;
- requires _houdini_96 ==> _v1.alloc <= _v2.alloc;
- requires _houdini_97 ==> _v2.alloc <= _v1.alloc;
- requires _houdini_98 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
- requires _houdini_99 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
- requires _houdini_100 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
- requires _houdini_101 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
- requires _houdini_102 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
- requires _houdini_103 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
- requires _houdini_104 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
- requires _houdini_105 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
- requires _houdini_106
- ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
- requires _houdini_107 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
- requires _houdini_108 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
- requires _houdini_109
- ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
- requires _houdini_110
- ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- requires _houdini_111 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
- requires _houdini_112 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
- requires _houdini_113 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
- requires _houdini_114 ==> _v1.Res_PROBED == _v2.Res_PROBED;
- modifies _v1.OK, _v1.Mem_T.UCHAR, _v2.OK, _v2.Mem_T.UCHAR;
- ensures MS$_v1.encode_ie$_v2.encode_ie(_v1.buf_.1,
- _v1.bufsize_.1,
- _v1.ie_.1,
- _v1.ielen_.1,
- _v1.leader_.1,
- _v1.leader_len_.1,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.OK,
- _v1.Mem_T.UCHAR,
- _v1.result.encode_ie$1,
- _v2.buf_.1,
- _v2.bufsize_.1,
- _v2.ie_.1,
- _v2.ielen_.1,
- _v2.leader_.1,
- _v2.leader_len_.1,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.OK,
- _v2.Mem_T.UCHAR,
- _v2.result.encode_ie$1);
- ensures _houdini_76 ==> _v1.result.encode_ie$1 <= _v2.result.encode_ie$1;
- ensures _houdini_77 ==> _v2.result.encode_ie$1 <= _v1.result.encode_ie$1;
- ensures _houdini_78 ==> _v1.OK ==> _v2.OK;
- ensures _houdini_79 ==> _v2.OK ==> _v1.OK;
- ensures _houdini_80 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
-
-
-
-implementation MS_Check__v1.encode_ie___v2.encode_ie(_v1.buf_.1: int,
- _v1.bufsize_.1: int,
- _v1.ie_.1: int,
- _v1.ielen_.1: int,
- _v1.leader_.1: int,
- _v1.leader_len_.1: int,
- _v2.buf_.1: int,
- _v2.bufsize_.1: int,
- _v2.ie_.1: int,
- _v2.ielen_.1: int,
- _v2.leader_.1: int,
- _v2.leader_len_.1: int)
- returns (_v1.result.encode_ie$1: int, _v2.result.encode_ie$1: int)
-{
- var inline$_v1.encode_ie$0$havoc_stringTemp: int;
- var inline$_v1.encode_ie$0$condVal: int;
- var inline$_v1.encode_ie$0$buf: int;
- var inline$_v1.encode_ie$0$bufsize: int;
- var inline$_v1.encode_ie$0$i: int;
- var inline$_v1.encode_ie$0$ie: int;
- var inline$_v1.encode_ie$0$ielen: int;
- var inline$_v1.encode_ie$0$leader: int;
- var inline$_v1.encode_ie$0$leader_len: int;
- var inline$_v1.encode_ie$0$p: int;
- var inline$_v1.encode_ie$0$result.memcpy$2: int;
- var inline$_v1.encode_ie$0$$result.question.3.$$static$: int;
- var inline$_v1.encode_ie$0$tempBoogie0: int;
- var inline$_v1.encode_ie$0$tempBoogie1: int;
- var inline$_v1.encode_ie$0$tempBoogie2: int;
- var inline$_v1.encode_ie$0$tempBoogie3: int;
- var inline$_v1.encode_ie$0$tempBoogie4: int;
- var inline$_v1.encode_ie$0$tempBoogie5: int;
- var inline$_v1.encode_ie$0$tempBoogie6: int;
- var inline$_v1.encode_ie$0$tempBoogie7: int;
- var inline$_v1.encode_ie$0$tempBoogie8: int;
- var inline$_v1.encode_ie$0$tempBoogie9: int;
- var inline$_v1.encode_ie$0$tempBoogie10: int;
- var inline$_v1.encode_ie$0$tempBoogie11: int;
- var inline$_v1.encode_ie$0$tempBoogie12: int;
- var inline$_v1.encode_ie$0$tempBoogie13: int;
- var inline$_v1.encode_ie$0$tempBoogie14: int;
- var inline$_v1.encode_ie$0$tempBoogie15: int;
- var inline$_v1.encode_ie$0$tempBoogie16: int;
- var inline$_v1.encode_ie$0$tempBoogie17: int;
- var inline$_v1.encode_ie$0$tempBoogie18: int;
- var inline$_v1.encode_ie$0$tempBoogie19: int;
- var inline$_v1.encode_ie$0$__havoc_dummy_return: int;
- var inline$_v1.encode_ie$0$buf_.1: int;
- var inline$_v1.encode_ie$0$bufsize_.1: int;
- var inline$_v1.encode_ie$0$ie_.1: int;
- var inline$_v1.encode_ie$0$ielen_.1: int;
- var inline$_v1.encode_ie$0$leader_.1: int;
- var inline$_v1.encode_ie$0$leader_len_.1: int;
- var inline$_v1.encode_ie$0$result.encode_ie$1: int;
- var inline$_v1.encode_ie$0$_v1.OK: bool;
- var inline$_v1.encode_ie$0$_v1.Mem_T.UCHAR: [int]int;
- var inline$_v2.encode_ie$0$havoc_stringTemp: int;
- var inline$_v2.encode_ie$0$condVal: int;
- var inline$_v2.encode_ie$0$buf: int;
- var inline$_v2.encode_ie$0$bufsize: int;
- var inline$_v2.encode_ie$0$i: int;
- var inline$_v2.encode_ie$0$ie: int;
- var inline$_v2.encode_ie$0$ielen: int;
- var inline$_v2.encode_ie$0$leader: int;
- var inline$_v2.encode_ie$0$leader_len: int;
- var inline$_v2.encode_ie$0$p: int;
- var inline$_v2.encode_ie$0$result.memcpy$2: int;
- var inline$_v2.encode_ie$0$$result.question.3.$$static$: int;
- var inline$_v2.encode_ie$0$tempBoogie0: int;
- var inline$_v2.encode_ie$0$tempBoogie1: int;
- var inline$_v2.encode_ie$0$tempBoogie2: int;
- var inline$_v2.encode_ie$0$tempBoogie3: int;
- var inline$_v2.encode_ie$0$tempBoogie4: int;
- var inline$_v2.encode_ie$0$tempBoogie5: int;
- var inline$_v2.encode_ie$0$tempBoogie6: int;
- var inline$_v2.encode_ie$0$tempBoogie7: int;
- var inline$_v2.encode_ie$0$tempBoogie8: int;
- var inline$_v2.encode_ie$0$tempBoogie9: int;
- var inline$_v2.encode_ie$0$tempBoogie10: int;
- var inline$_v2.encode_ie$0$tempBoogie11: int;
- var inline$_v2.encode_ie$0$tempBoogie12: int;
- var inline$_v2.encode_ie$0$tempBoogie13: int;
- var inline$_v2.encode_ie$0$tempBoogie14: int;
- var inline$_v2.encode_ie$0$tempBoogie15: int;
- var inline$_v2.encode_ie$0$tempBoogie16: int;
- var inline$_v2.encode_ie$0$tempBoogie17: int;
- var inline$_v2.encode_ie$0$tempBoogie18: int;
- var inline$_v2.encode_ie$0$tempBoogie19: int;
- var inline$_v2.encode_ie$0$__havoc_dummy_return: int;
- var inline$_v2.encode_ie$0$buf_.1: int;
- var inline$_v2.encode_ie$0$bufsize_.1: int;
- var inline$_v2.encode_ie$0$ie_.1: int;
- var inline$_v2.encode_ie$0$ielen_.1: int;
- var inline$_v2.encode_ie$0$leader_.1: int;
- var inline$_v2.encode_ie$0$leader_len_.1: int;
- var inline$_v2.encode_ie$0$result.encode_ie$1: int;
- var inline$_v2.encode_ie$0$_v2.OK: bool;
- var inline$_v2.encode_ie$0$_v2.Mem_T.UCHAR: [int]int;
- var _v1.memcpy_1_done: bool;
- var _v1.memcpy_in_1_0: int;
- var _v1.memcpy_in_1_1: int;
- var _v1.memcpy_in_1_2: int;
- var _v1.memcpy_in_1_3: bool;
- var _v1.memcpy_in_1_4: [int]int;
- var _v1.memcpy_out_1_0: int;
- var _v1.encode_ie_loop_label_14_head_2_done: bool;
- var _v1.encode_ie_loop_label_14_head_in_2_0: int;
- var _v1.encode_ie_loop_label_14_head_in_2_1: int;
- var _v1.encode_ie_loop_label_14_head_in_2_2: int;
- var _v1.encode_ie_loop_label_14_head_in_2_3: int;
- var _v1.encode_ie_loop_label_14_head_in_2_4: int;
- var _v1.encode_ie_loop_label_14_head_in_2_5: bool;
- var _v1.encode_ie_loop_label_14_head_in_2_6: [int]int;
- var _v1.encode_ie_loop_label_14_head_out_2_0: int;
- var _v1.encode_ie_loop_label_14_head_out_2_1: int;
- var _v1.encode_ie_loop_label_14_head_out_2_2: int;
- var _v1.encode_ie_loop_label_14_head_out_2_3: [int]int;
- var _v1.encode_ie_loop_label_14_head_out_2_4: bool;
- var _v2.memcpy_3_done: bool;
- var _v2.memcpy_in_3_0: int;
- var _v2.memcpy_in_3_1: int;
- var _v2.memcpy_in_3_2: int;
- var _v2.memcpy_in_3_3: bool;
- var _v2.memcpy_in_3_4: [int]int;
- var _v2.memcpy_out_3_0: int;
- var _v2.encode_ie_loop_label_14_head_4_done: bool;
- var _v2.encode_ie_loop_label_14_head_in_4_0: int;
- var _v2.encode_ie_loop_label_14_head_in_4_1: int;
- var _v2.encode_ie_loop_label_14_head_in_4_2: int;
- var _v2.encode_ie_loop_label_14_head_in_4_3: int;
- var _v2.encode_ie_loop_label_14_head_in_4_4: int;
- var _v2.encode_ie_loop_label_14_head_in_4_5: bool;
- var _v2.encode_ie_loop_label_14_head_in_4_6: [int]int;
- var _v2.encode_ie_loop_label_14_head_out_4_0: int;
- var _v2.encode_ie_loop_label_14_head_out_4_1: int;
- var _v2.encode_ie_loop_label_14_head_out_4_2: int;
- var _v2.encode_ie_loop_label_14_head_out_4_3: int;
- var _v2.encode_ie_loop_label_14_head_out_4_4: [int]int;
- var _v2.encode_ie_loop_label_14_head_out_4_5: bool;
- var store__0__v1.OK: bool;
- var store__0__v1.Mem_T.UCHAR: [int]int;
- var store__0__v2.OK: bool;
- var store__0__v2.Mem_T.UCHAR: [int]int;
- var out__v1.memcpy_out_1_0_0: int;
- var out__v2.memcpy_out_3_0_0: int;
- var store__1__v1.OK: bool;
- var store__1__v1.Mem_T.UCHAR: [int]int;
- var store__1__v2.OK: bool;
- var store__1__v2.Mem_T.UCHAR: [int]int;
- var out__v1.encode_ie_loop_label_14_head_out_2_0_1: int;
- var out__v1.encode_ie_loop_label_14_head_out_2_1_1: int;
- var out__v1.encode_ie_loop_label_14_head_out_2_2_1: int;
- var out__v2.encode_ie_loop_label_14_head_out_4_0_1: int;
- var out__v2.encode_ie_loop_label_14_head_out_4_1_1: int;
- var out__v2.encode_ie_loop_label_14_head_out_4_2_1: int;
- var out__v2.encode_ie_loop_label_14_head_out_4_3_1: int;
-
- START:
- _v1.memcpy_1_done, _v1.encode_ie_loop_label_14_head_2_done, _v2.memcpy_3_done, _v2.encode_ie_loop_label_14_head_4_done := false, false, false, false;
- goto inline$_v1.encode_ie$0$Entry;
-
- inline$_v1.encode_ie$0$Entry:
- inline$_v1.encode_ie$0$buf_.1 := _v1.buf_.1;
- inline$_v1.encode_ie$0$bufsize_.1 := _v1.bufsize_.1;
- inline$_v1.encode_ie$0$ie_.1 := _v1.ie_.1;
- inline$_v1.encode_ie$0$ielen_.1 := _v1.ielen_.1;
- inline$_v1.encode_ie$0$leader_.1 := _v1.leader_.1;
- inline$_v1.encode_ie$0$leader_len_.1 := _v1.leader_len_.1;
- havoc inline$_v1.encode_ie$0$havoc_stringTemp, inline$_v1.encode_ie$0$condVal, inline$_v1.encode_ie$0$buf, inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ie, inline$_v1.encode_ie$0$ielen, inline$_v1.encode_ie$0$leader, inline$_v1.encode_ie$0$leader_len, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$result.memcpy$2, inline$_v1.encode_ie$0$$result.question.3.$$static$, inline$_v1.encode_ie$0$tempBoogie0, inline$_v1.encode_ie$0$tempBoogie1, inline$_v1.encode_ie$0$tempBoogie2, inline$_v1.encode_ie$0$tempBoogie3, inline$_v1.encode_ie$0$tempBoogie4, inline$_v1.encode_ie$0$tempBoogie5, inline$_v1.encode_ie$0$tempBoogie6, inline$_v1.encode_ie$0$tempBoogie7, inline$_v1.encode_ie$0$tempBoogie8, inline$_v1.encode_ie$0$tempBoogie9, inline$_v1.encode_ie$0$tempBoogie10, inline$_v1.encode_ie$0$tempBoogie11, inline$_v1.encode_ie$0$tempBoogie12, inline$_v1.encode_ie$0$tempBoogie13, inline$_v1.encode_ie$0$tempBoogie14, inline$_v1.encode_ie$0$tempBoogie15, inline$_v1.encode_ie$0$tempBoogie16, inline$_v1.encode_ie$0$tempBoogie17, inline$_v1.encode_ie$0$tempBoogie18, inline$_v1.encode_ie$0$tempBoogie19, inline$_v1.encode_ie$0$__havoc_dummy_return, inline$_v1.encode_ie$0$result.encode_ie$1;
- inline$_v1.encode_ie$0$_v1.OK := _v1.OK;
- inline$_v1.encode_ie$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
- goto inline$_v1.encode_ie$0$anon0#2;
-
- inline$_v1.encode_ie$0$anon0#2:
- inline$_v1.encode_ie$0$havoc_stringTemp := 0;
- goto inline$_v1.encode_ie$0$start#2;
-
- inline$_v1.encode_ie$0$start#2:
- assume _v2.INT_LT(inline$_v1.encode_ie$0$buf_.1, _v1.alloc);
- assume _v2.INT_LT(inline$_v1.encode_ie$0$ie_.1, _v1.alloc);
- assume _v2.INT_LT(inline$_v1.encode_ie$0$leader_.1, _v1.alloc);
- inline$_v1.encode_ie$0$buf := 0;
- assume _v2.INT_GEQ(inline$_v1.encode_ie$0$buf_.1, 0);
- inline$_v1.encode_ie$0$bufsize := 0;
- inline$_v1.encode_ie$0$i := 0;
- inline$_v1.encode_ie$0$ie := 0;
- assume _v2.INT_GEQ(inline$_v1.encode_ie$0$ie_.1, 0);
- inline$_v1.encode_ie$0$ielen := 0;
- inline$_v1.encode_ie$0$leader := 0;
- assume _v2.INT_GEQ(inline$_v1.encode_ie$0$leader_.1, 0);
- inline$_v1.encode_ie$0$leader_len := 0;
- inline$_v1.encode_ie$0$p := 0;
- inline$_v1.encode_ie$0$result.encode_ie$1 := 0;
- inline$_v1.encode_ie$0$result.memcpy$2 := 0;
- inline$_v1.encode_ie$0$$result.question.3.$$static$ := 0;
- inline$_v1.encode_ie$0$buf := inline$_v1.encode_ie$0$buf_.1;
- inline$_v1.encode_ie$0$bufsize := inline$_v1.encode_ie$0$bufsize_.1;
- inline$_v1.encode_ie$0$ie := inline$_v1.encode_ie$0$ie_.1;
- inline$_v1.encode_ie$0$ielen := inline$_v1.encode_ie$0$ielen_.1;
- inline$_v1.encode_ie$0$leader := inline$_v1.encode_ie$0$leader_.1;
- inline$_v1.encode_ie$0$leader_len := inline$_v1.encode_ie$0$leader_len_.1;
- goto inline$_v1.encode_ie$0$label_3#2;
-
- inline$_v1.encode_ie$0$label_3#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 9} true;
- goto inline$_v1.encode_ie$0$label_4#2;
-
- inline$_v1.encode_ie$0$label_4#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 10} true;
- goto inline$_v1.encode_ie$0$label_5#2;
-
- inline$_v1.encode_ie$0$label_5#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 13} true;
- goto inline$_v1.encode_ie$0$label_5_true#2, inline$_v1.encode_ie$0$label_5_false#2;
-
- inline$_v1.encode_ie$0$label_5_false#2:
- assume !_v2.INT_LT(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$leader_len);
- assume _v2.value_is(_v1.__ctobpl_const_1, inline$_v1.encode_ie$0$bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_2, inline$_v1.encode_ie$0$leader_len);
- goto inline$_v1.encode_ie$0$label_6#2;
-
- inline$_v1.encode_ie$0$label_6#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 15} true;
- inline$_v1.encode_ie$0$p := inline$_v1.encode_ie$0$buf;
- assume _v2.value_is(_v1.__ctobpl_const_3, inline$_v1.encode_ie$0$p);
- assume _v2.value_is(_v1.__ctobpl_const_4, inline$_v1.encode_ie$0$buf);
- goto inline$_v1.encode_ie$0$label_8#2;
-
- inline$_v1.encode_ie$0$label_8#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 16} true;
- _v1.memcpy_in_1_0, _v1.memcpy_in_1_1, _v1.memcpy_in_1_2, _v1.memcpy_in_1_3, _v1.memcpy_in_1_4 := inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$leader, inline$_v1.encode_ie$0$leader_len, _v1.OK, _v1.Mem_T.UCHAR;
- call inline$_v1.encode_ie$0$result.memcpy$2 := _v1.memcpy(inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$leader, inline$_v1.encode_ie$0$leader_len);
- _v1.memcpy_1_done := true;
- _v1.memcpy_out_1_0 := inline$_v1.encode_ie$0$result.memcpy$2;
- assume _v2.value_is(_v1.__ctobpl_const_5, inline$_v1.encode_ie$0$p);
- assume _v2.value_is(_v1.__ctobpl_const_6, inline$_v1.encode_ie$0$leader);
- assume _v2.value_is(_v1.__ctobpl_const_7, inline$_v1.encode_ie$0$leader_len);
- assume _v2.value_is(_v1.__ctobpl_const_8, inline$_v1.encode_ie$0$p);
- assume _v2.value_is(_v1.__ctobpl_const_9, inline$_v1.encode_ie$0$leader);
- assume _v2.value_is(_v1.__ctobpl_const_10, inline$_v1.encode_ie$0$leader_len);
- goto inline$_v1.encode_ie$0$label_11#2;
-
- inline$_v1.encode_ie$0$label_11#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 17} true;
- havoc inline$_v1.encode_ie$0$tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$leader_len, 1, inline$_v1.encode_ie$0$tempBoogie0);
- inline$_v1.encode_ie$0$bufsize := inline$_v1.encode_ie$0$tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_11, inline$_v1.encode_ie$0$bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_12, inline$_v1.encode_ie$0$leader_len);
- goto inline$_v1.encode_ie$0$label_12#2;
-
- inline$_v1.encode_ie$0$label_12#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 18} true;
- inline$_v1.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, inline$_v1.encode_ie$0$leader_len);
- inline$_v1.encode_ie$0$p := inline$_v1.encode_ie$0$tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_13, inline$_v1.encode_ie$0$p);
- assume _v2.value_is(_v1.__ctobpl_const_14, inline$_v1.encode_ie$0$leader_len);
- goto inline$_v1.encode_ie$0$label_13#2;
-
- inline$_v1.encode_ie$0$label_13#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- inline$_v1.encode_ie$0$i := 0;
- assume _v2.value_is(_v1.__ctobpl_const_15, inline$_v1.encode_ie$0$i);
- goto inline$_v1.encode_ie$0$label_14#2;
-
- inline$_v1.encode_ie$0$label_14#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- goto inline$_v1.encode_ie$0$label_14_head#2;
-
- inline$_v1.encode_ie$0$label_14_head#2:
- _v1.encode_ie_loop_label_14_head_in_2_0, _v1.encode_ie_loop_label_14_head_in_2_1, _v1.encode_ie_loop_label_14_head_in_2_2, _v1.encode_ie_loop_label_14_head_in_2_3, _v1.encode_ie_loop_label_14_head_in_2_4, _v1.encode_ie_loop_label_14_head_in_2_5, _v1.encode_ie_loop_label_14_head_in_2_6 := inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0, _v1.OK, _v1.Mem_T.UCHAR;
- call inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0 := _v1.encode_ie_loop_label_14_head(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0);
- _v1.encode_ie_loop_label_14_head_2_done := true;
- _v1.encode_ie_loop_label_14_head_out_2_0, _v1.encode_ie_loop_label_14_head_out_2_1, _v1.encode_ie_loop_label_14_head_out_2_2, _v1.encode_ie_loop_label_14_head_out_2_3, _v1.encode_ie_loop_label_14_head_out_2_4 := inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0, _v1.Mem_T.UCHAR, _v1.OK;
- goto inline$_v1.encode_ie$0$label_14_head_last#2;
-
- inline$_v1.encode_ie$0$label_14_head_last#2:
- goto inline$_v1.encode_ie$0$label_14_true#2, inline$_v1.encode_ie$0$label_14_false#2;
-
- inline$_v1.encode_ie$0$label_14_false#2:
- assume !_v2.INT_LT(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie$0$i);
- assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie$0$ielen);
- goto inline$_v1.encode_ie$0$label_15#2;
-
- inline$_v1.encode_ie$0$label_14_true#2:
- assume _v2.INT_LT(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie$0$i);
- assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie$0$ielen);
- goto inline$_v1.encode_ie$0$label_16#2;
-
- inline$_v1.encode_ie$0$label_16#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- goto inline$_v1.encode_ie$0$label_16_true#2, inline$_v1.encode_ie$0$label_16_false#2;
-
- inline$_v1.encode_ie$0$label_16_false#2:
- assume !_v2.INT_LT(2, inline$_v1.encode_ie$0$bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie$0$bufsize);
- goto inline$_v1.encode_ie$0$label_15#2;
-
- inline$_v1.encode_ie$0$label_15#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- goto inline$_v1.encode_ie$0$label_15_true#2, inline$_v1.encode_ie$0$label_15_false#2;
-
- inline$_v1.encode_ie$0$label_15_false#2:
- assume !_v2.INT_EQ(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
- assume _v2.value_is(_v1.__ctobpl_const_18, inline$_v1.encode_ie$0$i);
- assume _v2.value_is(_v1.__ctobpl_const_19, inline$_v1.encode_ie$0$ielen);
- goto inline$_v1.encode_ie$0$label_21#2;
-
- inline$_v1.encode_ie$0$label_21#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- inline$_v1.encode_ie$0$$result.question.3.$$static$ := 0;
- assume _v2.value_is(_v1.__ctobpl_const_27, inline$_v1.encode_ie$0$$result.question.3.$$static$);
- goto inline$_v1.encode_ie$0$label_23#2;
-
- inline$_v1.encode_ie$0$label_15_true#2:
- assume _v2.INT_EQ(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
- assume _v2.value_is(_v1.__ctobpl_const_18, inline$_v1.encode_ie$0$i);
- assume _v2.value_is(_v1.__ctobpl_const_19, inline$_v1.encode_ie$0$ielen);
- goto inline$_v1.encode_ie$0$label_22#2;
-
- inline$_v1.encode_ie$0$label_22#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- havoc inline$_v1.encode_ie$0$$result.question.3.$$static$;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$buf, 1, inline$_v1.encode_ie$0$$result.question.3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_28, inline$_v1.encode_ie$0$$result.question.3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_29, inline$_v1.encode_ie$0$p);
- assume _v2.value_is(_v1.__ctobpl_const_30, inline$_v1.encode_ie$0$buf);
- goto inline$_v1.encode_ie$0$label_23#2;
-
- inline$_v1.encode_ie$0$label_23#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
- inline$_v1.encode_ie$0$result.encode_ie$1 := inline$_v1.encode_ie$0$$result.question.3.$$static$;
- assume _v2.value_is(_v1.__ctobpl_const_31, inline$_v1.encode_ie$0$$result.question.3.$$static$);
- goto inline$_v1.encode_ie$0$label_1#2;
-
- inline$_v1.encode_ie$0$label_16_true#2:
- assume _v2.INT_LT(2, inline$_v1.encode_ie$0$bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie$0$bufsize);
- goto inline$_v1.encode_ie$0$label_17#2;
-
- inline$_v1.encode_ie$0$label_17#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(inline$_v1.encode_ie$0$p, 0);
- _v1.OK := _v1.OK && _v2.Res_VALID_REGION(inline$_v1.encode_ie$0$p) == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[inline$_v1.encode_ie$0$p := 120];
- assume _v2.value_is(_v1.__ctobpl_const_21, inline$_v1.encode_ie$0$p);
- assume _v2.value_is(_v1.__ctobpl_const_22, _v1.Mem_T.UCHAR[inline$_v1.encode_ie$0$p]);
- goto inline$_v1.encode_ie$0$label_18#2;
-
- inline$_v1.encode_ie$0$label_18#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1), 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1)) == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1) := 120];
- assume _v2.value_is(_v1.__ctobpl_const_23, inline$_v1.encode_ie$0$p);
- assume _v2.value_is(_v1.__ctobpl_const_24,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1)]);
- goto inline$_v1.encode_ie$0$label_19#2;
-
- inline$_v1.encode_ie$0$label_19#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
- inline$_v1.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 2);
- inline$_v1.encode_ie$0$p := inline$_v1.encode_ie$0$tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_25, inline$_v1.encode_ie$0$p);
- goto inline$_v1.encode_ie$0$label_20#2;
-
- inline$_v1.encode_ie$0$label_20#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- assume _v2.value_is(_v1.__ctobpl_const_26, inline$_v1.encode_ie$0$i);
- inline$_v1.encode_ie$0$i := _v2.INT_PLUS(inline$_v1.encode_ie$0$i, 1, 1);
- goto inline$_v1.encode_ie$0$label_20_dummy#2;
-
- inline$_v1.encode_ie$0$label_20_dummy#2:
- assume false;
- goto inline$_v1.encode_ie$0$Return;
-
- inline$_v1.encode_ie$0$label_5_true#2:
- assume _v2.INT_LT(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$leader_len);
- assume _v2.value_is(_v1.__ctobpl_const_1, inline$_v1.encode_ie$0$bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_2, inline$_v1.encode_ie$0$leader_len);
- goto inline$_v1.encode_ie$0$label_7#2;
-
- inline$_v1.encode_ie$0$label_7#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 14} true;
- inline$_v1.encode_ie$0$result.encode_ie$1 := 0;
- goto inline$_v1.encode_ie$0$label_1#2;
-
- inline$_v1.encode_ie$0$label_1#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 39} true;
- goto inline$_v1.encode_ie$0$Return;
-
- inline$_v1.encode_ie$0$Return:
- assume true;
- _v1.result.encode_ie$1 := inline$_v1.encode_ie$0$result.encode_ie$1;
- goto START$1;
-
- START$1:
- goto inline$_v2.encode_ie$0$Entry;
-
- inline$_v2.encode_ie$0$Entry:
- inline$_v2.encode_ie$0$buf_.1 := _v2.buf_.1;
- inline$_v2.encode_ie$0$bufsize_.1 := _v2.bufsize_.1;
- inline$_v2.encode_ie$0$ie_.1 := _v2.ie_.1;
- inline$_v2.encode_ie$0$ielen_.1 := _v2.ielen_.1;
- inline$_v2.encode_ie$0$leader_.1 := _v2.leader_.1;
- inline$_v2.encode_ie$0$leader_len_.1 := _v2.leader_len_.1;
- havoc inline$_v2.encode_ie$0$havoc_stringTemp, inline$_v2.encode_ie$0$condVal, inline$_v2.encode_ie$0$buf, inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ie, inline$_v2.encode_ie$0$ielen, inline$_v2.encode_ie$0$leader, inline$_v2.encode_ie$0$leader_len, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$result.memcpy$2, inline$_v2.encode_ie$0$$result.question.3.$$static$, inline$_v2.encode_ie$0$tempBoogie0, inline$_v2.encode_ie$0$tempBoogie1, inline$_v2.encode_ie$0$tempBoogie2, inline$_v2.encode_ie$0$tempBoogie3, inline$_v2.encode_ie$0$tempBoogie4, inline$_v2.encode_ie$0$tempBoogie5, inline$_v2.encode_ie$0$tempBoogie6, inline$_v2.encode_ie$0$tempBoogie7, inline$_v2.encode_ie$0$tempBoogie8, inline$_v2.encode_ie$0$tempBoogie9, inline$_v2.encode_ie$0$tempBoogie10, inline$_v2.encode_ie$0$tempBoogie11, inline$_v2.encode_ie$0$tempBoogie12, inline$_v2.encode_ie$0$tempBoogie13, inline$_v2.encode_ie$0$tempBoogie14, inline$_v2.encode_ie$0$tempBoogie15, inline$_v2.encode_ie$0$tempBoogie16, inline$_v2.encode_ie$0$tempBoogie17, inline$_v2.encode_ie$0$tempBoogie18, inline$_v2.encode_ie$0$tempBoogie19, inline$_v2.encode_ie$0$__havoc_dummy_return, inline$_v2.encode_ie$0$result.encode_ie$1;
- inline$_v2.encode_ie$0$_v2.OK := _v2.OK;
- inline$_v2.encode_ie$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
- goto inline$_v2.encode_ie$0$anon0#2;
-
- inline$_v2.encode_ie$0$anon0#2:
- inline$_v2.encode_ie$0$havoc_stringTemp := 0;
- goto inline$_v2.encode_ie$0$start#2;
-
- inline$_v2.encode_ie$0$start#2:
- assume _v2.INT_LT(inline$_v2.encode_ie$0$buf_.1, _v2.alloc);
- assume _v2.INT_LT(inline$_v2.encode_ie$0$ie_.1, _v2.alloc);
- assume _v2.INT_LT(inline$_v2.encode_ie$0$leader_.1, _v2.alloc);
- inline$_v2.encode_ie$0$buf := 0;
- assume _v2.INT_GEQ(inline$_v2.encode_ie$0$buf_.1, 0);
- inline$_v2.encode_ie$0$bufsize := 0;
- inline$_v2.encode_ie$0$i := 0;
- inline$_v2.encode_ie$0$ie := 0;
- assume _v2.INT_GEQ(inline$_v2.encode_ie$0$ie_.1, 0);
- inline$_v2.encode_ie$0$ielen := 0;
- inline$_v2.encode_ie$0$leader := 0;
- assume _v2.INT_GEQ(inline$_v2.encode_ie$0$leader_.1, 0);
- inline$_v2.encode_ie$0$leader_len := 0;
- inline$_v2.encode_ie$0$p := 0;
- inline$_v2.encode_ie$0$result.encode_ie$1 := 0;
- inline$_v2.encode_ie$0$result.memcpy$2 := 0;
- inline$_v2.encode_ie$0$$result.question.3.$$static$ := 0;
- inline$_v2.encode_ie$0$buf := inline$_v2.encode_ie$0$buf_.1;
- inline$_v2.encode_ie$0$bufsize := inline$_v2.encode_ie$0$bufsize_.1;
- inline$_v2.encode_ie$0$ie := inline$_v2.encode_ie$0$ie_.1;
- inline$_v2.encode_ie$0$ielen := inline$_v2.encode_ie$0$ielen_.1;
- inline$_v2.encode_ie$0$leader := inline$_v2.encode_ie$0$leader_.1;
- inline$_v2.encode_ie$0$leader_len := inline$_v2.encode_ie$0$leader_len_.1;
- goto inline$_v2.encode_ie$0$label_3#2;
-
- inline$_v2.encode_ie$0$label_3#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 9} true;
- goto inline$_v2.encode_ie$0$label_4#2;
-
- inline$_v2.encode_ie$0$label_4#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 10} true;
- goto inline$_v2.encode_ie$0$label_5#2;
-
- inline$_v2.encode_ie$0$label_5#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 13} true;
- goto inline$_v2.encode_ie$0$label_5_true#2, inline$_v2.encode_ie$0$label_5_false#2;
-
- inline$_v2.encode_ie$0$label_5_false#2:
- assume !_v2.INT_LT(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$leader_len);
- assume _v2.value_is(_v2.__ctobpl_const_1, inline$_v2.encode_ie$0$bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_2, inline$_v2.encode_ie$0$leader_len);
- goto inline$_v2.encode_ie$0$label_6#2;
-
- inline$_v2.encode_ie$0$label_6#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 15} true;
- inline$_v2.encode_ie$0$p := inline$_v2.encode_ie$0$buf;
- assume _v2.value_is(_v2.__ctobpl_const_3, inline$_v2.encode_ie$0$p);
- assume _v2.value_is(_v2.__ctobpl_const_4, inline$_v2.encode_ie$0$buf);
- goto inline$_v2.encode_ie$0$label_8#2;
-
- inline$_v2.encode_ie$0$label_8#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 16} true;
- _v2.memcpy_in_3_0, _v2.memcpy_in_3_1, _v2.memcpy_in_3_2, _v2.memcpy_in_3_3, _v2.memcpy_in_3_4 := inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$leader, inline$_v2.encode_ie$0$leader_len, _v2.OK, _v2.Mem_T.UCHAR;
- call inline$_v2.encode_ie$0$result.memcpy$2 := _v2.memcpy(inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$leader, inline$_v2.encode_ie$0$leader_len);
- _v2.memcpy_3_done := true;
- _v2.memcpy_out_3_0 := inline$_v2.encode_ie$0$result.memcpy$2;
- assume _v2.value_is(_v2.__ctobpl_const_5, inline$_v2.encode_ie$0$p);
- assume _v2.value_is(_v2.__ctobpl_const_6, inline$_v2.encode_ie$0$leader);
- assume _v2.value_is(_v2.__ctobpl_const_7, inline$_v2.encode_ie$0$leader_len);
- assume _v2.value_is(_v2.__ctobpl_const_8, inline$_v2.encode_ie$0$p);
- assume _v2.value_is(_v2.__ctobpl_const_9, inline$_v2.encode_ie$0$leader);
- assume _v2.value_is(_v2.__ctobpl_const_10, inline$_v2.encode_ie$0$leader_len);
- goto inline$_v2.encode_ie$0$label_11#2;
-
- inline$_v2.encode_ie$0$label_11#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 17} true;
- havoc inline$_v2.encode_ie$0$tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$leader_len, 1, inline$_v2.encode_ie$0$tempBoogie0);
- inline$_v2.encode_ie$0$bufsize := inline$_v2.encode_ie$0$tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_11, inline$_v2.encode_ie$0$bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_12, inline$_v2.encode_ie$0$leader_len);
- goto inline$_v2.encode_ie$0$label_12#2;
-
- inline$_v2.encode_ie$0$label_12#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 18} true;
- inline$_v2.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, inline$_v2.encode_ie$0$leader_len);
- inline$_v2.encode_ie$0$p := inline$_v2.encode_ie$0$tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_13, inline$_v2.encode_ie$0$p);
- assume _v2.value_is(_v2.__ctobpl_const_14, inline$_v2.encode_ie$0$leader_len);
- goto inline$_v2.encode_ie$0$label_13#2;
-
- inline$_v2.encode_ie$0$label_13#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- inline$_v2.encode_ie$0$i := 0;
- assume _v2.value_is(_v2.__ctobpl_const_15, inline$_v2.encode_ie$0$i);
- goto inline$_v2.encode_ie$0$label_14#2;
-
- inline$_v2.encode_ie$0$label_14#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- goto inline$_v2.encode_ie$0$label_14_head#2;
-
- inline$_v2.encode_ie$0$label_14_head#2:
- _v2.encode_ie_loop_label_14_head_in_4_0, _v2.encode_ie_loop_label_14_head_in_4_1, _v2.encode_ie_loop_label_14_head_in_4_2, _v2.encode_ie_loop_label_14_head_in_4_3, _v2.encode_ie_loop_label_14_head_in_4_4, _v2.encode_ie_loop_label_14_head_in_4_5, _v2.encode_ie_loop_label_14_head_in_4_6 := inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0, _v2.OK, _v2.Mem_T.UCHAR;
- call inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0 := _v2.encode_ie_loop_label_14_head(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0);
- _v2.encode_ie_loop_label_14_head_4_done := true;
- _v2.encode_ie_loop_label_14_head_out_4_0, _v2.encode_ie_loop_label_14_head_out_4_1, _v2.encode_ie_loop_label_14_head_out_4_2, _v2.encode_ie_loop_label_14_head_out_4_3, _v2.encode_ie_loop_label_14_head_out_4_4, _v2.encode_ie_loop_label_14_head_out_4_5 := inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0, _v2.Mem_T.UCHAR, _v2.OK;
- goto inline$_v2.encode_ie$0$label_14_head_last#2;
-
- inline$_v2.encode_ie$0$label_14_head_last#2:
- goto inline$_v2.encode_ie$0$label_14_true#2, inline$_v2.encode_ie$0$label_14_false#2;
-
- inline$_v2.encode_ie$0$label_14_false#2:
- assume !_v2.INT_LT(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie$0$i);
- assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie$0$ielen);
- goto inline$_v2.encode_ie$0$label_15#2;
-
- inline$_v2.encode_ie$0$label_14_true#2:
- assume _v2.INT_LT(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie$0$i);
- assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie$0$ielen);
- goto inline$_v2.encode_ie$0$label_16#2;
-
- inline$_v2.encode_ie$0$label_16#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- goto inline$_v2.encode_ie$0$label_16_true#2, inline$_v2.encode_ie$0$label_16_false#2;
-
- inline$_v2.encode_ie$0$label_16_false#2:
- assume !_v2.INT_LT(2, inline$_v2.encode_ie$0$bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie$0$bufsize);
- goto inline$_v2.encode_ie$0$label_15#2;
-
- inline$_v2.encode_ie$0$label_15#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- goto inline$_v2.encode_ie$0$label_15_true#2, inline$_v2.encode_ie$0$label_15_false#2;
-
- inline$_v2.encode_ie$0$label_15_false#2:
- assume !_v2.INT_EQ(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
- assume _v2.value_is(_v2.__ctobpl_const_18, inline$_v2.encode_ie$0$i);
- assume _v2.value_is(_v2.__ctobpl_const_19, inline$_v2.encode_ie$0$ielen);
- goto inline$_v2.encode_ie$0$label_22#2;
-
- inline$_v2.encode_ie$0$label_22#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- inline$_v2.encode_ie$0$$result.question.3.$$static$ := 0;
- assume _v2.value_is(_v2.__ctobpl_const_28, inline$_v2.encode_ie$0$$result.question.3.$$static$);
- goto inline$_v2.encode_ie$0$label_24#2;
-
- inline$_v2.encode_ie$0$label_15_true#2:
- assume _v2.INT_EQ(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
- assume _v2.value_is(_v2.__ctobpl_const_18, inline$_v2.encode_ie$0$i);
- assume _v2.value_is(_v2.__ctobpl_const_19, inline$_v2.encode_ie$0$ielen);
- goto inline$_v2.encode_ie$0$label_23#2;
-
- inline$_v2.encode_ie$0$label_23#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- havoc inline$_v2.encode_ie$0$$result.question.3.$$static$;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$buf, 1, inline$_v2.encode_ie$0$$result.question.3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_29, inline$_v2.encode_ie$0$$result.question.3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_30, inline$_v2.encode_ie$0$p);
- assume _v2.value_is(_v2.__ctobpl_const_31, inline$_v2.encode_ie$0$buf);
- goto inline$_v2.encode_ie$0$label_24#2;
-
- inline$_v2.encode_ie$0$label_24#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
- inline$_v2.encode_ie$0$result.encode_ie$1 := inline$_v2.encode_ie$0$$result.question.3.$$static$;
- assume _v2.value_is(_v2.__ctobpl_const_32, inline$_v2.encode_ie$0$$result.question.3.$$static$);
- goto inline$_v2.encode_ie$0$label_1#2;
-
- inline$_v2.encode_ie$0$label_16_true#2:
- assume _v2.INT_LT(2, inline$_v2.encode_ie$0$bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie$0$bufsize);
- goto inline$_v2.encode_ie$0$label_17#2;
-
- inline$_v2.encode_ie$0$label_17#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(inline$_v2.encode_ie$0$p, 0);
- _v2.OK := _v2.OK && _v2.Res_VALID_REGION(inline$_v2.encode_ie$0$p) == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[inline$_v2.encode_ie$0$p := 120];
- assume _v2.value_is(_v2.__ctobpl_const_21, inline$_v2.encode_ie$0$p);
- assume _v2.value_is(_v2.__ctobpl_const_22, _v2.Mem_T.UCHAR[inline$_v2.encode_ie$0$p]);
- goto inline$_v2.encode_ie$0$label_18#2;
-
- inline$_v2.encode_ie$0$label_18#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1), 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1)) == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1) := 120];
- assume _v2.value_is(_v2.__ctobpl_const_23, inline$_v2.encode_ie$0$p);
- assume _v2.value_is(_v2.__ctobpl_const_24,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1)]);
- goto inline$_v2.encode_ie$0$label_19#2;
-
- inline$_v2.encode_ie$0$label_19#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
- inline$_v2.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 2);
- inline$_v2.encode_ie$0$p := inline$_v2.encode_ie$0$tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_25, inline$_v2.encode_ie$0$p);
- goto inline$_v2.encode_ie$0$label_20#2;
-
- inline$_v2.encode_ie$0$label_20#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
- havoc inline$_v2.encode_ie$0$tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie$0$bufsize, 2, 1, inline$_v2.encode_ie$0$tempBoogie0);
- inline$_v2.encode_ie$0$bufsize := inline$_v2.encode_ie$0$tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_26, inline$_v2.encode_ie$0$bufsize);
- goto inline$_v2.encode_ie$0$label_21#2;
-
- inline$_v2.encode_ie$0$label_21#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- assume _v2.value_is(_v2.__ctobpl_const_27, inline$_v2.encode_ie$0$i);
- inline$_v2.encode_ie$0$i := _v2.INT_PLUS(inline$_v2.encode_ie$0$i, 1, 1);
- goto inline$_v2.encode_ie$0$label_21_dummy#2;
-
- inline$_v2.encode_ie$0$label_21_dummy#2:
- assume false;
- goto inline$_v2.encode_ie$0$Return;
-
- inline$_v2.encode_ie$0$label_5_true#2:
- assume _v2.INT_LT(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$leader_len);
- assume _v2.value_is(_v2.__ctobpl_const_1, inline$_v2.encode_ie$0$bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_2, inline$_v2.encode_ie$0$leader_len);
- goto inline$_v2.encode_ie$0$label_7#2;
-
- inline$_v2.encode_ie$0$label_7#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 14} true;
- inline$_v2.encode_ie$0$result.encode_ie$1 := 0;
- goto inline$_v2.encode_ie$0$label_1#2;
-
- inline$_v2.encode_ie$0$label_1#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 40} true;
- goto inline$_v2.encode_ie$0$Return;
-
- inline$_v2.encode_ie$0$Return:
- assume true;
- _v2.result.encode_ie$1 := inline$_v2.encode_ie$0$result.encode_ie$1;
- goto START$2;
-
- START$2:
- goto MS_L_0_1;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.memcpy_1_done && _v2.memcpy_3_done;
- store__0__v1.OK, store__0__v1.Mem_T.UCHAR := _v1.OK, _v1.Mem_T.UCHAR;
- store__0__v2.OK, store__0__v2.Mem_T.UCHAR := _v2.OK, _v2.Mem_T.UCHAR;
- _v1.OK, _v1.Mem_T.UCHAR := _v1.memcpy_in_1_3, _v1.memcpy_in_1_4;
- _v2.OK, _v2.Mem_T.UCHAR := _v2.memcpy_in_3_3, _v2.memcpy_in_3_4;
- call out__v1.memcpy_out_1_0_0, out__v2.memcpy_out_3_0_0 := MS_Check__v1.memcpy___v2.memcpy(_v1.memcpy_in_1_0, _v1.memcpy_in_1_1, _v1.memcpy_in_1_2, _v2.memcpy_in_3_0, _v2.memcpy_in_3_1, _v2.memcpy_in_3_2);
- assume true;
- assume true;
- assume _v1.memcpy_out_1_0 == out__v1.memcpy_out_1_0_0
- && _v2.memcpy_out_3_0 == out__v2.memcpy_out_3_0_0;
- _v1.OK, _v1.Mem_T.UCHAR := store__0__v1.OK, store__0__v1.Mem_T.UCHAR;
- _v2.OK, _v2.Mem_T.UCHAR := store__0__v2.OK, store__0__v2.Mem_T.UCHAR;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.memcpy_1_done && _v2.memcpy_3_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-
- MS_L_0_1:
- goto MS_L_taken_1, MS_L_not_taken_1;
-
- MS_L_taken_1:
- assume _v1.encode_ie_loop_label_14_head_2_done
- && _v2.encode_ie_loop_label_14_head_4_done;
- store__1__v1.OK, store__1__v1.Mem_T.UCHAR := _v1.OK, _v1.Mem_T.UCHAR;
- store__1__v2.OK, store__1__v2.Mem_T.UCHAR := _v2.OK, _v2.Mem_T.UCHAR;
- _v1.OK, _v1.Mem_T.UCHAR := _v1.encode_ie_loop_label_14_head_in_2_5, _v1.encode_ie_loop_label_14_head_in_2_6;
- _v2.OK, _v2.Mem_T.UCHAR := _v2.encode_ie_loop_label_14_head_in_4_5, _v2.encode_ie_loop_label_14_head_in_4_6;
- call out__v1.encode_ie_loop_label_14_head_out_2_0_1, out__v1.encode_ie_loop_label_14_head_out_2_1_1, out__v1.encode_ie_loop_label_14_head_out_2_2_1, out__v2.encode_ie_loop_label_14_head_out_4_0_1, out__v2.encode_ie_loop_label_14_head_out_4_1_1, out__v2.encode_ie_loop_label_14_head_out_4_2_1, out__v2.encode_ie_loop_label_14_head_out_4_3_1 := MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.encode_ie_loop_label_14_head_in_2_0, _v1.encode_ie_loop_label_14_head_in_2_1, _v1.encode_ie_loop_label_14_head_in_2_2, _v1.encode_ie_loop_label_14_head_in_2_3, _v1.encode_ie_loop_label_14_head_in_2_4, _v2.encode_ie_loop_label_14_head_in_4_0, _v2.encode_ie_loop_label_14_head_in_4_1, _v2.encode_ie_loop_label_14_head_in_4_2, _v2.encode_ie_loop_label_14_head_in_4_3, _v2.encode_ie_loop_label_14_head_in_4_4);
- assume _v1.Mem_T.UCHAR == _v1.encode_ie_loop_label_14_head_out_2_3
- && (_v1.OK <==> _v1.encode_ie_loop_label_14_head_out_2_4);
- assume _v2.Mem_T.UCHAR == _v2.encode_ie_loop_label_14_head_out_4_4
- && (_v2.OK <==> _v2.encode_ie_loop_label_14_head_out_4_5);
- assume _v1.encode_ie_loop_label_14_head_out_2_0
- == out__v1.encode_ie_loop_label_14_head_out_2_0_1
- && _v1.encode_ie_loop_label_14_head_out_2_1
- == out__v1.encode_ie_loop_label_14_head_out_2_1_1
- && _v1.encode_ie_loop_label_14_head_out_2_2
- == out__v1.encode_ie_loop_label_14_head_out_2_2_1
- && _v2.encode_ie_loop_label_14_head_out_4_0
- == out__v2.encode_ie_loop_label_14_head_out_4_0_1
- && _v2.encode_ie_loop_label_14_head_out_4_1
- == out__v2.encode_ie_loop_label_14_head_out_4_1_1
- && _v2.encode_ie_loop_label_14_head_out_4_2
- == out__v2.encode_ie_loop_label_14_head_out_4_2_1
- && _v2.encode_ie_loop_label_14_head_out_4_3
- == out__v2.encode_ie_loop_label_14_head_out_4_3_1;
- _v1.OK, _v1.Mem_T.UCHAR := store__1__v1.OK, store__1__v1.Mem_T.UCHAR;
- _v2.OK, _v2.Mem_T.UCHAR := store__1__v2.OK, store__1__v2.Mem_T.UCHAR;
- goto MS_L_meet_1;
-
- MS_L_not_taken_1:
- assume !(_v1.encode_ie_loop_label_14_head_2_done
- && _v2.encode_ie_loop_label_14_head_4_done);
- goto MS_L_meet_1;
-
- MS_L_meet_1:
- goto MS_L_0_0;
-}
-
-
-
-function {:inline true} MS$_v1.encode_ie_loop_label_14_head$_v2.encode_ie_loop_label_14_head(_v1.in_bufsize: int,
- _v1.in_i: int,
- _v1.in_ielen: int,
- _v1.in_p: int,
- _v1.in_tempBoogie0: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.Mem_T.UCHAR_: [int]int,
- _v1.OK_: bool,
- _v1.out_i: int,
- _v1.out_p: int,
- _v1.out_tempBoogie0: int,
- _v2.in_bufsize: int,
- _v2.in_i: int,
- _v2.in_ielen: int,
- _v2.in_p: int,
- _v2.in_tempBoogie0: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.Mem_T.UCHAR_: [int]int,
- _v2.OK_: bool,
- _v2.out_bufsize: int,
- _v2.out_i: int,
- _v2.out_p: int,
- _v2.out_tempBoogie0: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_115: bool;
-
-const {:existential true} _houdini_116: bool;
-
-const {:existential true} _houdini_117: bool;
-
-const {:existential true} _houdini_118: bool;
-
-const {:existential true} _houdini_119: bool;
-
-const {:existential true} _houdini_120: bool;
-
-const {:existential true} _houdini_121: bool;
-
-const {:existential true} _houdini_122: bool;
-
-const {:existential true} _houdini_123: bool;
-
-const {:existential true} _houdini_124: bool;
-
-const {:existential true} _houdini_125: bool;
-
-const {:existential true} _houdini_126: bool;
-
-const {:existential true} _houdini_127: bool;
-
-const {:existential true} _houdini_128: bool;
-
-const {:existential true} _houdini_129: bool;
-
-const {:existential true} _houdini_130: bool;
-
-const {:existential true} _houdini_131: bool;
-
-const {:existential true} _houdini_132: bool;
-
-const {:existential true} _houdini_133: bool;
-
-const {:existential true} _houdini_134: bool;
-
-const {:existential true} _houdini_135: bool;
-
-const {:existential true} _houdini_136: bool;
-
-const {:existential true} _houdini_137: bool;
-
-const {:existential true} _houdini_138: bool;
-
-const {:existential true} _houdini_139: bool;
-
-const {:existential true} _houdini_140: bool;
-
-const {:existential true} _houdini_141: bool;
-
-const {:existential true} _houdini_142: bool;
-
-const {:existential true} _houdini_143: bool;
-
-const {:existential true} _houdini_144: bool;
-
-const {:existential true} _houdini_145: bool;
-
-const {:existential true} _houdini_146: bool;
-
-const {:existential true} _houdini_147: bool;
-
-const {:existential true} _houdini_148: bool;
-
-const {:existential true} _houdini_149: bool;
-
-const {:existential true} _houdini_150: bool;
-
-const {:existential true} _houdini_151: bool;
-
-const {:existential true} _houdini_152: bool;
-
-const {:existential true} _houdini_153: bool;
-
-const {:existential true} _houdini_154: bool;
-
-const {:existential true} _houdini_155: bool;
-
-procedure MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.in_bufsize: int,
- _v1.in_i: int,
- _v1.in_ielen: int,
- _v1.in_p: int,
- _v1.in_tempBoogie0: int,
- _v2.in_bufsize: int,
- _v2.in_i: int,
- _v2.in_ielen: int,
- _v2.in_p: int,
- _v2.in_tempBoogie0: int)
- returns (_v1.out_i: int,
- _v1.out_p: int,
- _v1.out_tempBoogie0: int,
- _v2.out_bufsize: int,
- _v2.out_i: int,
- _v2.out_p: int,
- _v2.out_tempBoogie0: int);
- requires _houdini_124 ==> _v1.in_bufsize <= _v2.in_bufsize;
- requires _houdini_125 ==> _v2.in_bufsize <= _v1.in_bufsize;
- requires _houdini_126 ==> _v1.in_i <= _v2.in_i;
- requires _houdini_127 ==> _v2.in_i <= _v1.in_i;
- requires _houdini_128 ==> _v1.in_ielen <= _v2.in_ielen;
- requires _houdini_129 ==> _v2.in_ielen <= _v1.in_ielen;
- requires _houdini_130 ==> _v1.in_p <= _v2.in_p;
- requires _houdini_131 ==> _v2.in_p <= _v1.in_p;
- requires _houdini_132 ==> _v1.in_tempBoogie0 <= _v2.in_tempBoogie0;
- requires _houdini_133 ==> _v2.in_tempBoogie0 <= _v1.in_tempBoogie0;
- requires _houdini_134 ==> _v1.OK ==> _v2.OK;
- requires _houdini_135 ==> _v2.OK ==> _v1.OK;
- requires _houdini_136 ==> _v1.Mem == _v2.Mem;
- requires _houdini_137 ==> _v1.alloc <= _v2.alloc;
- requires _houdini_138 ==> _v2.alloc <= _v1.alloc;
- requires _houdini_139 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
- requires _houdini_140 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
- requires _houdini_141 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
- requires _houdini_142 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
- requires _houdini_143 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
- requires _houdini_144 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
- requires _houdini_145 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
- requires _houdini_146 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
- requires _houdini_147
- ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
- requires _houdini_148 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
- requires _houdini_149 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
- requires _houdini_150
- ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
- requires _houdini_151
- ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- requires _houdini_152 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
- requires _houdini_153 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
- requires _houdini_154 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
- requires _houdini_155 ==> _v1.Res_PROBED == _v2.Res_PROBED;
- modifies _v1.Mem_T.UCHAR, _v1.OK, _v2.Mem_T.UCHAR, _v2.OK;
- ensures MS$_v1.encode_ie_loop_label_14_head$_v2.encode_ie_loop_label_14_head(_v1.in_bufsize,
- _v1.in_i,
- _v1.in_ielen,
- _v1.in_p,
- _v1.in_tempBoogie0,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.Mem_T.UCHAR,
- _v1.OK,
- _v1.out_i,
- _v1.out_p,
- _v1.out_tempBoogie0,
- _v2.in_bufsize,
- _v2.in_i,
- _v2.in_ielen,
- _v2.in_p,
- _v2.in_tempBoogie0,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.Mem_T.UCHAR,
- _v2.OK,
- _v2.out_bufsize,
- _v2.out_i,
- _v2.out_p,
- _v2.out_tempBoogie0);
- ensures _houdini_115 ==> _v1.out_i <= _v2.out_i;
- ensures _houdini_116 ==> _v2.out_i <= _v1.out_i;
- ensures _houdini_117 ==> _v1.out_p <= _v2.out_p;
- ensures _houdini_118 ==> _v2.out_p <= _v1.out_p;
- ensures _houdini_119 ==> _v1.out_tempBoogie0 <= _v2.out_tempBoogie0;
- ensures _houdini_120 ==> _v2.out_tempBoogie0 <= _v1.out_tempBoogie0;
- ensures _houdini_121 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
- ensures _houdini_122 ==> _v1.OK ==> _v2.OK;
- ensures _houdini_123 ==> _v2.OK ==> _v1.OK;
-
-
-
-implementation MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.in_bufsize: int,
- _v1.in_i: int,
- _v1.in_ielen: int,
- _v1.in_p: int,
- _v1.in_tempBoogie0: int,
- _v2.in_bufsize: int,
- _v2.in_i: int,
- _v2.in_ielen: int,
- _v2.in_p: int,
- _v2.in_tempBoogie0: int)
- returns (_v1.out_i: int,
- _v1.out_p: int,
- _v1.out_tempBoogie0: int,
- _v2.out_bufsize: int,
- _v2.out_i: int,
- _v2.out_p: int,
- _v2.out_tempBoogie0: int)
-{
- var inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$in_i: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$in_ielen: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$in_p: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$out_i: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$out_p: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0: int;
- var inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR: [int]int;
- var inline$_v1.encode_ie_loop_label_14_head$0$_v1.OK: bool;
- var inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$in_i: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$in_ielen: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$in_p: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$out_i: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$out_p: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0: int;
- var inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR: [int]int;
- var inline$_v2.encode_ie_loop_label_14_head$0$_v2.OK: bool;
- var _v1.encode_ie_loop_label_14_head_1_done: bool;
- var _v1.encode_ie_loop_label_14_head_in_1_0: int;
- var _v1.encode_ie_loop_label_14_head_in_1_1: int;
- var _v1.encode_ie_loop_label_14_head_in_1_2: int;
- var _v1.encode_ie_loop_label_14_head_in_1_3: int;
- var _v1.encode_ie_loop_label_14_head_in_1_4: int;
- var _v1.encode_ie_loop_label_14_head_in_1_5: [int]int;
- var _v1.encode_ie_loop_label_14_head_in_1_6: bool;
- var _v1.encode_ie_loop_label_14_head_out_1_0: int;
- var _v1.encode_ie_loop_label_14_head_out_1_1: int;
- var _v1.encode_ie_loop_label_14_head_out_1_2: int;
- var _v1.encode_ie_loop_label_14_head_out_1_3: [int]int;
- var _v1.encode_ie_loop_label_14_head_out_1_4: bool;
- var _v2.encode_ie_loop_label_14_head_2_done: bool;
- var _v2.encode_ie_loop_label_14_head_in_2_0: int;
- var _v2.encode_ie_loop_label_14_head_in_2_1: int;
- var _v2.encode_ie_loop_label_14_head_in_2_2: int;
- var _v2.encode_ie_loop_label_14_head_in_2_3: int;
- var _v2.encode_ie_loop_label_14_head_in_2_4: int;
- var _v2.encode_ie_loop_label_14_head_in_2_5: [int]int;
- var _v2.encode_ie_loop_label_14_head_in_2_6: bool;
- var _v2.encode_ie_loop_label_14_head_out_2_0: int;
- var _v2.encode_ie_loop_label_14_head_out_2_1: int;
- var _v2.encode_ie_loop_label_14_head_out_2_2: int;
- var _v2.encode_ie_loop_label_14_head_out_2_3: int;
- var _v2.encode_ie_loop_label_14_head_out_2_4: [int]int;
- var _v2.encode_ie_loop_label_14_head_out_2_5: bool;
- var store__0__v1.Mem_T.UCHAR: [int]int;
- var store__0__v1.OK: bool;
- var store__0__v2.Mem_T.UCHAR: [int]int;
- var store__0__v2.OK: bool;
- var out__v1.encode_ie_loop_label_14_head_out_1_0_0: int;
- var out__v1.encode_ie_loop_label_14_head_out_1_1_0: int;
- var out__v1.encode_ie_loop_label_14_head_out_1_2_0: int;
- var out__v2.encode_ie_loop_label_14_head_out_2_0_0: int;
- var out__v2.encode_ie_loop_label_14_head_out_2_1_0: int;
- var out__v2.encode_ie_loop_label_14_head_out_2_2_0: int;
- var out__v2.encode_ie_loop_label_14_head_out_2_3_0: int;
-
- START:
- _v1.encode_ie_loop_label_14_head_1_done, _v2.encode_ie_loop_label_14_head_2_done := false, false;
- goto inline$_v1.encode_ie_loop_label_14_head$0$Entry;
-
- inline$_v1.encode_ie_loop_label_14_head$0$Entry:
- inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize := _v1.in_bufsize;
- inline$_v1.encode_ie_loop_label_14_head$0$in_i := _v1.in_i;
- inline$_v1.encode_ie_loop_label_14_head$0$in_ielen := _v1.in_ielen;
- inline$_v1.encode_ie_loop_label_14_head$0$in_p := _v1.in_p;
- inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0 := _v1.in_tempBoogie0;
- havoc inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
- inline$_v1.encode_ie_loop_label_14_head$0$_v1.OK := _v1.OK;
- goto inline$_v1.encode_ie_loop_label_14_head$0$entry#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$entry#2:
- inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$in_i, inline$_v1.encode_ie_loop_label_14_head$0$in_p, inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0;
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_14_head#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_14_head#2:
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_14_true#2, inline$_v1.encode_ie_loop_label_14_head$0$label_14_false#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_14_false#2:
- assume !_v2.INT_LT(inline$_v1.encode_ie_loop_label_14_head$0$out_i,
- inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie_loop_label_14_head$0$out_i);
- assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
- inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$in_i, inline$_v1.encode_ie_loop_label_14_head$0$in_p, inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0;
- _v1.Mem_T.UCHAR := inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR;
- goto inline$_v1.encode_ie_loop_label_14_head$0$Return;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_14_true#2:
- assume _v2.INT_LT(inline$_v1.encode_ie_loop_label_14_head$0$out_i,
- inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
- assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie_loop_label_14_head$0$out_i);
- assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_16#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_16#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_16_true#2, inline$_v1.encode_ie_loop_label_14_head$0$label_16_false#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_16_false#2:
- assume !_v2.INT_LT(2, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
- inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$in_i, inline$_v1.encode_ie_loop_label_14_head$0$in_p, inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0;
- _v1.Mem_T.UCHAR := inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR;
- goto inline$_v1.encode_ie_loop_label_14_head$0$Return;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_16_true#2:
- assume _v2.INT_LT(2, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
- assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_17#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_17#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(inline$_v1.encode_ie_loop_label_14_head$0$out_p) == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[inline$_v1.encode_ie_loop_label_14_head$0$out_p := 120];
- assume _v2.value_is(_v1.__ctobpl_const_21, inline$_v1.encode_ie_loop_label_14_head$0$out_p);
- assume _v2.value_is(_v1.__ctobpl_const_22,
- _v1.Mem_T.UCHAR[inline$_v1.encode_ie_loop_label_14_head$0$out_p]);
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_18#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_18#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1), 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1))
- == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1) := 120];
- assume _v2.value_is(_v1.__ctobpl_const_23, inline$_v1.encode_ie_loop_label_14_head$0$out_p);
- assume _v2.value_is(_v1.__ctobpl_const_24,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1)]);
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_19#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_19#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
- inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 2);
- inline$_v1.encode_ie_loop_label_14_head$0$out_p := inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- assume _v2.value_is(_v1.__ctobpl_const_25, inline$_v1.encode_ie_loop_label_14_head$0$out_p);
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_20#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_20#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
- assume _v2.value_is(_v1.__ctobpl_const_26, inline$_v1.encode_ie_loop_label_14_head$0$out_i);
- inline$_v1.encode_ie_loop_label_14_head$0$out_i := _v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_i, 1, 1);
- goto inline$_v1.encode_ie_loop_label_14_head$0$label_20_dummy#2;
-
- inline$_v1.encode_ie_loop_label_14_head$0$label_20_dummy#2:
- _v1.encode_ie_loop_label_14_head_in_1_0, _v1.encode_ie_loop_label_14_head_in_1_1, _v1.encode_ie_loop_label_14_head_in_1_2, _v1.encode_ie_loop_label_14_head_in_1_3, _v1.encode_ie_loop_label_14_head_in_1_4, _v1.encode_ie_loop_label_14_head_in_1_5, _v1.encode_ie_loop_label_14_head_in_1_6 := inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v1.Mem_T.UCHAR, _v1.OK;
- call inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v1.encode_ie_loop_label_14_head(inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0);
- _v1.encode_ie_loop_label_14_head_1_done := true;
- _v1.encode_ie_loop_label_14_head_out_1_0, _v1.encode_ie_loop_label_14_head_out_1_1, _v1.encode_ie_loop_label_14_head_out_1_2, _v1.encode_ie_loop_label_14_head_out_1_3, _v1.encode_ie_loop_label_14_head_out_1_4 := inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v1.Mem_T.UCHAR, _v1.OK;
- goto inline$_v1.encode_ie_loop_label_14_head$0$Return;
-
- inline$_v1.encode_ie_loop_label_14_head$0$Return:
- assume true;
- _v1.out_i := inline$_v1.encode_ie_loop_label_14_head$0$out_i;
- _v1.out_p := inline$_v1.encode_ie_loop_label_14_head$0$out_p;
- _v1.out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- goto START$1;
-
- START$1:
- goto inline$_v2.encode_ie_loop_label_14_head$0$Entry;
-
- inline$_v2.encode_ie_loop_label_14_head$0$Entry:
- inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize := _v2.in_bufsize;
- inline$_v2.encode_ie_loop_label_14_head$0$in_i := _v2.in_i;
- inline$_v2.encode_ie_loop_label_14_head$0$in_ielen := _v2.in_ielen;
- inline$_v2.encode_ie_loop_label_14_head$0$in_p := _v2.in_p;
- inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0 := _v2.in_tempBoogie0;
- havoc inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
- inline$_v2.encode_ie_loop_label_14_head$0$_v2.OK := _v2.OK;
- goto inline$_v2.encode_ie_loop_label_14_head$0$entry#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$entry#2:
- inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$in_i, inline$_v2.encode_ie_loop_label_14_head$0$in_p, inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0;
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_14_head#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_14_head#2:
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_14_true#2, inline$_v2.encode_ie_loop_label_14_head$0$label_14_false#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_14_false#2:
- assume !_v2.INT_LT(inline$_v2.encode_ie_loop_label_14_head$0$out_i,
- inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie_loop_label_14_head$0$out_i);
- assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
- inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$in_i, inline$_v2.encode_ie_loop_label_14_head$0$in_p, inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0;
- _v2.Mem_T.UCHAR := inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR;
- goto inline$_v2.encode_ie_loop_label_14_head$0$Return;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_14_true#2:
- assume _v2.INT_LT(inline$_v2.encode_ie_loop_label_14_head$0$out_i,
- inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
- assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie_loop_label_14_head$0$out_i);
- assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_16#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_16#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_16_true#2, inline$_v2.encode_ie_loop_label_14_head$0$label_16_false#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_16_false#2:
- assume !_v2.INT_LT(2, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
- inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$in_i, inline$_v2.encode_ie_loop_label_14_head$0$in_p, inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0;
- _v2.Mem_T.UCHAR := inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR;
- goto inline$_v2.encode_ie_loop_label_14_head$0$Return;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_16_true#2:
- assume _v2.INT_LT(2, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
- assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_17#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_17#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
- assume _v2.INT_GEQ(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(inline$_v2.encode_ie_loop_label_14_head$0$out_p) == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[inline$_v2.encode_ie_loop_label_14_head$0$out_p := 120];
- assume _v2.value_is(_v2.__ctobpl_const_21, inline$_v2.encode_ie_loop_label_14_head$0$out_p);
- assume _v2.value_is(_v2.__ctobpl_const_22,
- _v2.Mem_T.UCHAR[inline$_v2.encode_ie_loop_label_14_head$0$out_p]);
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_18#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_18#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
- assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1), 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1))
- == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1) := 120];
- assume _v2.value_is(_v2.__ctobpl_const_23, inline$_v2.encode_ie_loop_label_14_head$0$out_p);
- assume _v2.value_is(_v2.__ctobpl_const_24,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1)]);
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_19#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_19#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
- inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 2);
- inline$_v2.encode_ie_loop_label_14_head$0$out_p := inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_25, inline$_v2.encode_ie_loop_label_14_head$0$out_p);
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_20#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_20#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
- havoc inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, 2, 1, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0);
- inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize := inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- assume _v2.value_is(_v2.__ctobpl_const_26, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_21#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_21#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
- assume _v2.value_is(_v2.__ctobpl_const_27, inline$_v2.encode_ie_loop_label_14_head$0$out_i);
- inline$_v2.encode_ie_loop_label_14_head$0$out_i := _v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_i, 1, 1);
- goto inline$_v2.encode_ie_loop_label_14_head$0$label_21_dummy#2;
-
- inline$_v2.encode_ie_loop_label_14_head$0$label_21_dummy#2:
- _v2.encode_ie_loop_label_14_head_in_2_0, _v2.encode_ie_loop_label_14_head_in_2_1, _v2.encode_ie_loop_label_14_head_in_2_2, _v2.encode_ie_loop_label_14_head_in_2_3, _v2.encode_ie_loop_label_14_head_in_2_4, _v2.encode_ie_loop_label_14_head_in_2_5, _v2.encode_ie_loop_label_14_head_in_2_6 := inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v2.Mem_T.UCHAR, _v2.OK;
- call inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v2.encode_ie_loop_label_14_head(inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0);
- _v2.encode_ie_loop_label_14_head_2_done := true;
- _v2.encode_ie_loop_label_14_head_out_2_0, _v2.encode_ie_loop_label_14_head_out_2_1, _v2.encode_ie_loop_label_14_head_out_2_2, _v2.encode_ie_loop_label_14_head_out_2_3, _v2.encode_ie_loop_label_14_head_out_2_4, _v2.encode_ie_loop_label_14_head_out_2_5 := inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v2.Mem_T.UCHAR, _v2.OK;
- goto inline$_v2.encode_ie_loop_label_14_head$0$Return;
-
- inline$_v2.encode_ie_loop_label_14_head$0$Return:
- assume true;
- _v2.out_bufsize := inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize;
- _v2.out_i := inline$_v2.encode_ie_loop_label_14_head$0$out_i;
- _v2.out_p := inline$_v2.encode_ie_loop_label_14_head$0$out_p;
- _v2.out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
- goto START$2;
-
- START$2:
- goto MS_L_0_0;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.encode_ie_loop_label_14_head_1_done
- && _v2.encode_ie_loop_label_14_head_2_done;
- store__0__v1.Mem_T.UCHAR, store__0__v1.OK := _v1.Mem_T.UCHAR, _v1.OK;
- store__0__v2.Mem_T.UCHAR, store__0__v2.OK := _v2.Mem_T.UCHAR, _v2.OK;
- _v1.Mem_T.UCHAR, _v1.OK := _v1.encode_ie_loop_label_14_head_in_1_5, _v1.encode_ie_loop_label_14_head_in_1_6;
- _v2.Mem_T.UCHAR, _v2.OK := _v2.encode_ie_loop_label_14_head_in_2_5, _v2.encode_ie_loop_label_14_head_in_2_6;
- call out__v1.encode_ie_loop_label_14_head_out_1_0_0, out__v1.encode_ie_loop_label_14_head_out_1_1_0, out__v1.encode_ie_loop_label_14_head_out_1_2_0, out__v2.encode_ie_loop_label_14_head_out_2_0_0, out__v2.encode_ie_loop_label_14_head_out_2_1_0, out__v2.encode_ie_loop_label_14_head_out_2_2_0, out__v2.encode_ie_loop_label_14_head_out_2_3_0 := MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.encode_ie_loop_label_14_head_in_1_0, _v1.encode_ie_loop_label_14_head_in_1_1, _v1.encode_ie_loop_label_14_head_in_1_2, _v1.encode_ie_loop_label_14_head_in_1_3, _v1.encode_ie_loop_label_14_head_in_1_4, _v2.encode_ie_loop_label_14_head_in_2_0, _v2.encode_ie_loop_label_14_head_in_2_1, _v2.encode_ie_loop_label_14_head_in_2_2, _v2.encode_ie_loop_label_14_head_in_2_3, _v2.encode_ie_loop_label_14_head_in_2_4);
- assume _v1.Mem_T.UCHAR == _v1.encode_ie_loop_label_14_head_out_1_3
- && (_v1.OK <==> _v1.encode_ie_loop_label_14_head_out_1_4);
- assume _v2.Mem_T.UCHAR == _v2.encode_ie_loop_label_14_head_out_2_4
- && (_v2.OK <==> _v2.encode_ie_loop_label_14_head_out_2_5);
- assume _v1.encode_ie_loop_label_14_head_out_1_0
- == out__v1.encode_ie_loop_label_14_head_out_1_0_0
- && _v1.encode_ie_loop_label_14_head_out_1_1
- == out__v1.encode_ie_loop_label_14_head_out_1_1_0
- && _v1.encode_ie_loop_label_14_head_out_1_2
- == out__v1.encode_ie_loop_label_14_head_out_1_2_0
- && _v2.encode_ie_loop_label_14_head_out_2_0
- == out__v2.encode_ie_loop_label_14_head_out_2_0_0
- && _v2.encode_ie_loop_label_14_head_out_2_1
- == out__v2.encode_ie_loop_label_14_head_out_2_1_0
- && _v2.encode_ie_loop_label_14_head_out_2_2
- == out__v2.encode_ie_loop_label_14_head_out_2_2_0
- && _v2.encode_ie_loop_label_14_head_out_2_3
- == out__v2.encode_ie_loop_label_14_head_out_2_3_0;
- _v1.Mem_T.UCHAR, _v1.OK := store__0__v1.Mem_T.UCHAR, store__0__v1.OK;
- _v2.Mem_T.UCHAR, _v2.OK := store__0__v2.Mem_T.UCHAR, store__0__v2.OK;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.encode_ie_loop_label_14_head_1_done
- && _v2.encode_ie_loop_label_14_head_2_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-}
-
-
-
-function {:inline true} MS$_v1.giwscan_cb$_v2.giwscan_cb(_v1.se_.1: int,
- _v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.alloc_: int,
- _v1.OK_: bool,
- _v1.Mem_T.UCHAR_: [int]int,
- _v1.result.giwscan_cb$1: int,
- _v2.se_.1: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.alloc_: int,
- _v2.OK_: bool,
- _v2.Mem_T.UCHAR_: [int]int,
- _v2.result.giwscan_cb$1: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_156: bool;
-
-const {:existential true} _houdini_157: bool;
-
-const {:existential true} _houdini_158: bool;
-
-const {:existential true} _houdini_159: bool;
-
-const {:existential true} _houdini_160: bool;
-
-const {:existential true} _houdini_161: bool;
-
-const {:existential true} _houdini_162: bool;
-
-const {:existential true} _houdini_163: bool;
-
-const {:existential true} _houdini_164: bool;
-
-const {:existential true} _houdini_165: bool;
-
-const {:existential true} _houdini_166: bool;
-
-const {:existential true} _houdini_167: bool;
-
-const {:existential true} _houdini_168: bool;
-
-const {:existential true} _houdini_169: bool;
-
-const {:existential true} _houdini_170: bool;
-
-const {:existential true} _houdini_171: bool;
-
-const {:existential true} _houdini_172: bool;
-
-const {:existential true} _houdini_173: bool;
-
-const {:existential true} _houdini_174: bool;
-
-const {:existential true} _houdini_175: bool;
-
-const {:existential true} _houdini_176: bool;
-
-const {:existential true} _houdini_177: bool;
-
-const {:existential true} _houdini_178: bool;
-
-const {:existential true} _houdini_179: bool;
-
-const {:existential true} _houdini_180: bool;
-
-const {:existential true} _houdini_181: bool;
-
-const {:existential true} _houdini_182: bool;
-
-const {:existential true} _houdini_183: bool;
-
-const {:existential true} _houdini_184: bool;
-
-const {:existential true} _houdini_185: bool;
-
-const {:existential true} _houdini_186: bool;
-
-procedure MS_Check__v1.giwscan_cb___v2.giwscan_cb(_v1.se_.1: int, _v2.se_.1: int)
- returns (_v1.result.giwscan_cb$1: int, _v2.result.giwscan_cb$1: int);
- requires _houdini_163 ==> _v1.se_.1 <= _v2.se_.1;
- requires _houdini_164 ==> _v2.se_.1 <= _v1.se_.1;
- requires _houdini_165 ==> _v1.OK ==> _v2.OK;
- requires _houdini_166 ==> _v2.OK ==> _v1.OK;
- requires _houdini_167 ==> _v1.Mem == _v2.Mem;
- requires _houdini_168 ==> _v1.alloc <= _v2.alloc;
- requires _houdini_169 ==> _v2.alloc <= _v1.alloc;
- requires _houdini_170 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
- requires _houdini_171 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
- requires _houdini_172 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
- requires _houdini_173 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
- requires _houdini_174 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
- requires _houdini_175 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
- requires _houdini_176 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
- requires _houdini_177 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
- requires _houdini_178
- ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
- requires _houdini_179 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
- requires _houdini_180 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
- requires _houdini_181
- ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
- requires _houdini_182
- ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- requires _houdini_183 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
- requires _houdini_184 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
- requires _houdini_185 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
- requires _houdini_186 ==> _v1.Res_PROBED == _v2.Res_PROBED;
- modifies _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- ensures MS$_v1.giwscan_cb$_v2.giwscan_cb(_v1.se_.1,
- old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.alloc,
- _v1.OK,
- _v1.Mem_T.UCHAR,
- _v1.result.giwscan_cb$1,
- _v2.se_.1,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.alloc,
- _v2.OK,
- _v2.Mem_T.UCHAR,
- _v2.result.giwscan_cb$1);
- ensures _houdini_156 ==> _v1.result.giwscan_cb$1 <= _v2.result.giwscan_cb$1;
- ensures _houdini_157 ==> _v2.result.giwscan_cb$1 <= _v1.result.giwscan_cb$1;
- ensures _houdini_158 ==> _v1.alloc <= _v2.alloc;
- ensures _houdini_159 ==> _v2.alloc <= _v1.alloc;
- ensures _houdini_160 ==> _v1.OK ==> _v2.OK;
- ensures _houdini_161 ==> _v2.OK ==> _v1.OK;
- ensures _houdini_162 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
-
-
-
-implementation MS_Check__v1.giwscan_cb___v2.giwscan_cb(_v1.se_.1: int, _v2.se_.1: int)
- returns (_v1.result.giwscan_cb$1: int, _v2.result.giwscan_cb$1: int)
-{
- var inline$_v1.giwscan_cb$0$havoc_stringTemp: int;
- var inline$_v1.giwscan_cb$0$condVal: int;
- var inline$_v1.giwscan_cb$0$buf: int;
- var inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$: int;
- var inline$_v1.giwscan_cb$0$result.encode_ie$2: int;
- var inline$_v1.giwscan_cb$0$rsn_leader: int;
- var inline$_v1.giwscan_cb$0$se: int;
- var inline$_v1.giwscan_cb$0$tempBoogie0: int;
- var inline$_v1.giwscan_cb$0$tempBoogie1: int;
- var inline$_v1.giwscan_cb$0$tempBoogie2: int;
- var inline$_v1.giwscan_cb$0$tempBoogie3: int;
- var inline$_v1.giwscan_cb$0$tempBoogie4: int;
- var inline$_v1.giwscan_cb$0$tempBoogie5: int;
- var inline$_v1.giwscan_cb$0$tempBoogie6: int;
- var inline$_v1.giwscan_cb$0$tempBoogie7: int;
- var inline$_v1.giwscan_cb$0$tempBoogie8: int;
- var inline$_v1.giwscan_cb$0$tempBoogie9: int;
- var inline$_v1.giwscan_cb$0$tempBoogie10: int;
- var inline$_v1.giwscan_cb$0$tempBoogie11: int;
- var inline$_v1.giwscan_cb$0$tempBoogie12: int;
- var inline$_v1.giwscan_cb$0$tempBoogie13: int;
- var inline$_v1.giwscan_cb$0$tempBoogie14: int;
- var inline$_v1.giwscan_cb$0$tempBoogie15: int;
- var inline$_v1.giwscan_cb$0$tempBoogie16: int;
- var inline$_v1.giwscan_cb$0$tempBoogie17: int;
- var inline$_v1.giwscan_cb$0$tempBoogie18: int;
- var inline$_v1.giwscan_cb$0$tempBoogie19: int;
- var inline$_v1.giwscan_cb$0$__havoc_dummy_return: int;
- var inline$_v1.giwscan_cb$0$se_.1: int;
- var inline$_v1.giwscan_cb$0$result.giwscan_cb$1: int;
- var inline$_v1.giwscan_cb$0$_v1.alloc: int;
- var inline$_v1.giwscan_cb$0$_v1.OK: bool;
- var inline$_v1.giwscan_cb$0$_v1.Mem_T.UCHAR: [int]int;
- var inline$_v2.giwscan_cb$0$havoc_stringTemp: int;
- var inline$_v2.giwscan_cb$0$condVal: int;
- var inline$_v2.giwscan_cb$0$buf: int;
- var inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$: int;
- var inline$_v2.giwscan_cb$0$result.encode_ie$2: int;
- var inline$_v2.giwscan_cb$0$rsn_leader: int;
- var inline$_v2.giwscan_cb$0$se: int;
- var inline$_v2.giwscan_cb$0$tempBoogie0: int;
- var inline$_v2.giwscan_cb$0$tempBoogie1: int;
- var inline$_v2.giwscan_cb$0$tempBoogie2: int;
- var inline$_v2.giwscan_cb$0$tempBoogie3: int;
- var inline$_v2.giwscan_cb$0$tempBoogie4: int;
- var inline$_v2.giwscan_cb$0$tempBoogie5: int;
- var inline$_v2.giwscan_cb$0$tempBoogie6: int;
- var inline$_v2.giwscan_cb$0$tempBoogie7: int;
- var inline$_v2.giwscan_cb$0$tempBoogie8: int;
- var inline$_v2.giwscan_cb$0$tempBoogie9: int;
- var inline$_v2.giwscan_cb$0$tempBoogie10: int;
- var inline$_v2.giwscan_cb$0$tempBoogie11: int;
- var inline$_v2.giwscan_cb$0$tempBoogie12: int;
- var inline$_v2.giwscan_cb$0$tempBoogie13: int;
- var inline$_v2.giwscan_cb$0$tempBoogie14: int;
- var inline$_v2.giwscan_cb$0$tempBoogie15: int;
- var inline$_v2.giwscan_cb$0$tempBoogie16: int;
- var inline$_v2.giwscan_cb$0$tempBoogie17: int;
- var inline$_v2.giwscan_cb$0$tempBoogie18: int;
- var inline$_v2.giwscan_cb$0$tempBoogie19: int;
- var inline$_v2.giwscan_cb$0$__havoc_dummy_return: int;
- var inline$_v2.giwscan_cb$0$se_.1: int;
- var inline$_v2.giwscan_cb$0$result.giwscan_cb$1: int;
- var inline$_v2.giwscan_cb$0$_v2.alloc: int;
- var inline$_v2.giwscan_cb$0$_v2.OK: bool;
- var inline$_v2.giwscan_cb$0$_v2.Mem_T.UCHAR: [int]int;
- var _v1.__HAVOC_det_malloc_1_done: bool;
- var _v1.__HAVOC_det_malloc_in_1_0: int;
- var _v1.__HAVOC_det_malloc_in_1_1: int;
- var _v1.__HAVOC_det_malloc_in_1_2: bool;
- var _v1.__HAVOC_det_malloc_in_1_3: [int]int;
- var _v1.__HAVOC_det_malloc_out_1_0: int;
- var _v1.__HAVOC_det_malloc_out_1_1: int;
- var _v1.__HAVOC_det_malloc_2_done: bool;
- var _v1.__HAVOC_det_malloc_in_2_0: int;
- var _v1.__HAVOC_det_malloc_in_2_1: int;
- var _v1.__HAVOC_det_malloc_in_2_2: bool;
- var _v1.__HAVOC_det_malloc_in_2_3: [int]int;
- var _v1.__HAVOC_det_malloc_out_2_0: int;
- var _v1.__HAVOC_det_malloc_out_2_1: int;
- var _v1.encode_ie_3_done: bool;
- var _v1.encode_ie_in_3_0: int;
- var _v1.encode_ie_in_3_1: int;
- var _v1.encode_ie_in_3_2: int;
- var _v1.encode_ie_in_3_3: int;
- var _v1.encode_ie_in_3_4: int;
- var _v1.encode_ie_in_3_5: int;
- var _v1.encode_ie_in_3_6: int;
- var _v1.encode_ie_in_3_7: bool;
- var _v1.encode_ie_in_3_8: [int]int;
- var _v1.encode_ie_out_3_0: int;
- var _v1.encode_ie_out_3_1: bool;
- var _v1.encode_ie_out_3_2: [int]int;
- var _v1.__HAVOC_free_4_done: bool;
- var _v1.__HAVOC_free_in_4_0: int;
- var _v1.__HAVOC_free_in_4_1: int;
- var _v1.__HAVOC_free_in_4_2: bool;
- var _v1.__HAVOC_free_in_4_3: [int]int;
- var _v1.__HAVOC_free_5_done: bool;
- var _v1.__HAVOC_free_in_5_0: int;
- var _v1.__HAVOC_free_in_5_1: int;
- var _v1.__HAVOC_free_in_5_2: bool;
- var _v1.__HAVOC_free_in_5_3: [int]int;
- var _v2.__HAVOC_det_malloc_6_done: bool;
- var _v2.__HAVOC_det_malloc_in_6_0: int;
- var _v2.__HAVOC_det_malloc_in_6_1: int;
- var _v2.__HAVOC_det_malloc_in_6_2: bool;
- var _v2.__HAVOC_det_malloc_in_6_3: [int]int;
- var _v2.__HAVOC_det_malloc_out_6_0: int;
- var _v2.__HAVOC_det_malloc_out_6_1: int;
- var _v2.__HAVOC_det_malloc_7_done: bool;
- var _v2.__HAVOC_det_malloc_in_7_0: int;
- var _v2.__HAVOC_det_malloc_in_7_1: int;
- var _v2.__HAVOC_det_malloc_in_7_2: bool;
- var _v2.__HAVOC_det_malloc_in_7_3: [int]int;
- var _v2.__HAVOC_det_malloc_out_7_0: int;
- var _v2.__HAVOC_det_malloc_out_7_1: int;
- var _v2.encode_ie_8_done: bool;
- var _v2.encode_ie_in_8_0: int;
- var _v2.encode_ie_in_8_1: int;
- var _v2.encode_ie_in_8_2: int;
- var _v2.encode_ie_in_8_3: int;
- var _v2.encode_ie_in_8_4: int;
- var _v2.encode_ie_in_8_5: int;
- var _v2.encode_ie_in_8_6: int;
- var _v2.encode_ie_in_8_7: bool;
- var _v2.encode_ie_in_8_8: [int]int;
- var _v2.encode_ie_out_8_0: int;
- var _v2.encode_ie_out_8_1: bool;
- var _v2.encode_ie_out_8_2: [int]int;
- var _v2.__HAVOC_free_9_done: bool;
- var _v2.__HAVOC_free_in_9_0: int;
- var _v2.__HAVOC_free_in_9_1: int;
- var _v2.__HAVOC_free_in_9_2: bool;
- var _v2.__HAVOC_free_in_9_3: [int]int;
- var _v2.__HAVOC_free_10_done: bool;
- var _v2.__HAVOC_free_in_10_0: int;
- var _v2.__HAVOC_free_in_10_1: int;
- var _v2.__HAVOC_free_in_10_2: bool;
- var _v2.__HAVOC_free_in_10_3: [int]int;
- var store__0__v1.alloc: int;
- var store__0__v1.OK: bool;
- var store__0__v1.Mem_T.UCHAR: [int]int;
- var store__0__v2.alloc: int;
- var store__0__v2.OK: bool;
- var store__0__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_1_0_0: int;
- var out__v2.__HAVOC_det_malloc_out_6_0_0: int;
- var store__1__v1.alloc: int;
- var store__1__v1.OK: bool;
- var store__1__v1.Mem_T.UCHAR: [int]int;
- var store__1__v2.alloc: int;
- var store__1__v2.OK: bool;
- var store__1__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_1_0_1: int;
- var out__v2.__HAVOC_det_malloc_out_7_0_1: int;
- var store__2__v1.alloc: int;
- var store__2__v1.OK: bool;
- var store__2__v1.Mem_T.UCHAR: [int]int;
- var store__2__v2.alloc: int;
- var store__2__v2.OK: bool;
- var store__2__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_2_0_2: int;
- var out__v2.__HAVOC_det_malloc_out_6_0_2: int;
- var store__3__v1.alloc: int;
- var store__3__v1.OK: bool;
- var store__3__v1.Mem_T.UCHAR: [int]int;
- var store__3__v2.alloc: int;
- var store__3__v2.OK: bool;
- var store__3__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_2_0_3: int;
- var out__v2.__HAVOC_det_malloc_out_7_0_3: int;
- var store__4__v1.alloc: int;
- var store__4__v1.OK: bool;
- var store__4__v1.Mem_T.UCHAR: [int]int;
- var store__4__v2.alloc: int;
- var store__4__v2.OK: bool;
- var store__4__v2.Mem_T.UCHAR: [int]int;
- var out__v1.encode_ie_out_3_0_4: int;
- var out__v2.encode_ie_out_8_0_4: int;
- var store__5__v1.alloc: int;
- var store__5__v1.OK: bool;
- var store__5__v1.Mem_T.UCHAR: [int]int;
- var store__5__v2.alloc: int;
- var store__5__v2.OK: bool;
- var store__5__v2.Mem_T.UCHAR: [int]int;
- var store__6__v1.alloc: int;
- var store__6__v1.OK: bool;
- var store__6__v1.Mem_T.UCHAR: [int]int;
- var store__6__v2.alloc: int;
- var store__6__v2.OK: bool;
- var store__6__v2.Mem_T.UCHAR: [int]int;
- var store__7__v1.alloc: int;
- var store__7__v1.OK: bool;
- var store__7__v1.Mem_T.UCHAR: [int]int;
- var store__7__v2.alloc: int;
- var store__7__v2.OK: bool;
- var store__7__v2.Mem_T.UCHAR: [int]int;
- var store__8__v1.alloc: int;
- var store__8__v1.OK: bool;
- var store__8__v1.Mem_T.UCHAR: [int]int;
- var store__8__v2.alloc: int;
- var store__8__v2.OK: bool;
- var store__8__v2.Mem_T.UCHAR: [int]int;
-
- START:
- _v1.__HAVOC_det_malloc_1_done, _v1.__HAVOC_det_malloc_2_done, _v1.encode_ie_3_done, _v1.__HAVOC_free_4_done, _v1.__HAVOC_free_5_done, _v2.__HAVOC_det_malloc_6_done, _v2.__HAVOC_det_malloc_7_done, _v2.encode_ie_8_done, _v2.__HAVOC_free_9_done, _v2.__HAVOC_free_10_done := false, false, false, false, false, false, false, false, false, false;
- goto inline$_v1.giwscan_cb$0$Entry;
-
- inline$_v1.giwscan_cb$0$Entry:
- inline$_v1.giwscan_cb$0$se_.1 := _v1.se_.1;
- havoc inline$_v1.giwscan_cb$0$havoc_stringTemp, inline$_v1.giwscan_cb$0$condVal, inline$_v1.giwscan_cb$0$buf, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v1.giwscan_cb$0$result.encode_ie$2, inline$_v1.giwscan_cb$0$rsn_leader, inline$_v1.giwscan_cb$0$se, inline$_v1.giwscan_cb$0$tempBoogie0, inline$_v1.giwscan_cb$0$tempBoogie1, inline$_v1.giwscan_cb$0$tempBoogie2, inline$_v1.giwscan_cb$0$tempBoogie3, inline$_v1.giwscan_cb$0$tempBoogie4, inline$_v1.giwscan_cb$0$tempBoogie5, inline$_v1.giwscan_cb$0$tempBoogie6, inline$_v1.giwscan_cb$0$tempBoogie7, inline$_v1.giwscan_cb$0$tempBoogie8, inline$_v1.giwscan_cb$0$tempBoogie9, inline$_v1.giwscan_cb$0$tempBoogie10, inline$_v1.giwscan_cb$0$tempBoogie11, inline$_v1.giwscan_cb$0$tempBoogie12, inline$_v1.giwscan_cb$0$tempBoogie13, inline$_v1.giwscan_cb$0$tempBoogie14, inline$_v1.giwscan_cb$0$tempBoogie15, inline$_v1.giwscan_cb$0$tempBoogie16, inline$_v1.giwscan_cb$0$tempBoogie17, inline$_v1.giwscan_cb$0$tempBoogie18, inline$_v1.giwscan_cb$0$tempBoogie19, inline$_v1.giwscan_cb$0$__havoc_dummy_return, inline$_v1.giwscan_cb$0$result.giwscan_cb$1;
- inline$_v1.giwscan_cb$0$_v1.alloc := _v1.alloc;
- inline$_v1.giwscan_cb$0$_v1.OK := _v1.OK;
- inline$_v1.giwscan_cb$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
- goto inline$_v1.giwscan_cb$0$anon0#2;
-
- inline$_v1.giwscan_cb$0$anon0#2:
- inline$_v1.giwscan_cb$0$havoc_stringTemp := 0;
- goto inline$_v1.giwscan_cb$0$start#2;
-
- inline$_v1.giwscan_cb$0$start#2:
- assume _v2.INT_LT(inline$_v1.giwscan_cb$0$se_.1, _v1.alloc);
- _v1.__HAVOC_det_malloc_in_1_0, _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3 := 6, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- call inline$_v1.giwscan_cb$0$buf := _v1.__HAVOC_det_malloc(6);
- _v1.__HAVOC_det_malloc_1_done := true;
- _v1.__HAVOC_det_malloc_out_1_0, _v1.__HAVOC_det_malloc_out_1_1 := inline$_v1.giwscan_cb$0$buf, _v1.alloc;
- inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := 0;
- inline$_v1.giwscan_cb$0$result.encode_ie$2 := 0;
- inline$_v1.giwscan_cb$0$result.giwscan_cb$1 := 0;
- _v1.__HAVOC_det_malloc_in_2_0, _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3 := 1, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- call inline$_v1.giwscan_cb$0$rsn_leader := _v1.__HAVOC_det_malloc(1);
- _v1.__HAVOC_det_malloc_2_done := true;
- _v1.__HAVOC_det_malloc_out_2_0, _v1.__HAVOC_det_malloc_out_2_1 := inline$_v1.giwscan_cb$0$rsn_leader, _v1.alloc;
- inline$_v1.giwscan_cb$0$se := 0;
- assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se_.1, 0);
- inline$_v1.giwscan_cb$0$se := inline$_v1.giwscan_cb$0$se_.1;
- goto inline$_v1.giwscan_cb$0$label_3#2;
-
- inline$_v1.giwscan_cb$0$label_3#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 45} true;
- goto inline$_v1.giwscan_cb$0$label_4#2;
-
- inline$_v1.giwscan_cb$0$label_4#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 46} true;
- goto inline$_v1.giwscan_cb$0$label_5#2;
-
- inline$_v1.giwscan_cb$0$label_5#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 50} true;
- assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
- == 1;
- assert true;
- goto inline$_v1.giwscan_cb$0$label_5_true#2, inline$_v1.giwscan_cb$0$label_5_false#2;
-
- inline$_v1.giwscan_cb$0$label_5_false#2:
- assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]
- == 0;
- assume _v2.value_is(_v1.__ctobpl_const_32, inline$_v1.giwscan_cb$0$se);
- assume _v2.value_is(_v1.__ctobpl_const_33,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
- goto inline$_v1.giwscan_cb$0$label_6#2;
-
- inline$_v1.giwscan_cb$0$label_5_true#2:
- assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]
- != 0;
- assume _v2.value_is(_v1.__ctobpl_const_32, inline$_v1.giwscan_cb$0$se);
- assume _v2.value_is(_v1.__ctobpl_const_33,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
- goto inline$_v1.giwscan_cb$0$label_7#2;
-
- inline$_v1.giwscan_cb$0$label_7#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 51} true;
- assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 0))
- == 1;
- assert true;
- goto inline$_v1.giwscan_cb$0$label_7_true#2, inline$_v1.giwscan_cb$0$label_7_false#2;
-
- inline$_v1.giwscan_cb$0$label_7_false#2:
- assume !_v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v1.__ctobpl_const_34, inline$_v1.giwscan_cb$0$se);
- assume _v2.value_is(_v1.__ctobpl_const_35,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
- assume _v2.value_is(_v1.__ctobpl_const_36,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 0)]);
- goto inline$_v1.giwscan_cb$0$label_6#2;
-
- inline$_v1.giwscan_cb$0$label_7_true#2:
- assume _v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v1.__ctobpl_const_34, inline$_v1.giwscan_cb$0$se);
- assume _v2.value_is(_v1.__ctobpl_const_35,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
- assume _v2.value_is(_v1.__ctobpl_const_36,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 0)]);
- goto inline$_v1.giwscan_cb$0$label_8#2;
-
- inline$_v1.giwscan_cb$0$label_8#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 53} true;
- assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 1))
- == 1;
- assert true;
- inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 1)],
- 1,
- 2);
- assume _v2.value_is(_v1.__ctobpl_const_37, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_38, inline$_v1.giwscan_cb$0$se);
- assume _v2.value_is(_v1.__ctobpl_const_39,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
- assume _v2.value_is(_v1.__ctobpl_const_40,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
- 1,
- 1)]);
- goto inline$_v1.giwscan_cb$0$label_9#2;
-
- inline$_v1.giwscan_cb$0$label_9#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 52} true;
- assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
- == 1;
- assert true;
- _v1.encode_ie_in_3_0, _v1.encode_ie_in_3_1, _v1.encode_ie_in_3_2, _v1.encode_ie_in_3_3, _v1.encode_ie_in_3_4, _v1.encode_ie_in_3_5, _v1.encode_ie_in_3_6, _v1.encode_ie_in_3_7, _v1.encode_ie_in_3_8 := inline$_v1.giwscan_cb$0$buf, 6, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)], inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v1.giwscan_cb$0$rsn_leader, 1, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- call inline$_v1.giwscan_cb$0$result.encode_ie$2 := _v1.encode_ie(inline$_v1.giwscan_cb$0$buf, 6, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)], inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v1.giwscan_cb$0$rsn_leader, 1);
- _v1.encode_ie_3_done := true;
- _v1.encode_ie_out_3_0, _v1.encode_ie_out_3_1, _v1.encode_ie_out_3_2 := inline$_v1.giwscan_cb$0$result.encode_ie$2, _v1.OK, _v1.Mem_T.UCHAR;
- assume _v2.value_is(_v1.__ctobpl_const_41, inline$_v1.giwscan_cb$0$se);
- assume _v2.value_is(_v1.__ctobpl_const_42,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
- assume _v2.value_is(_v1.__ctobpl_const_43, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v1.__ctobpl_const_44, inline$_v1.giwscan_cb$0$se);
- assume _v2.value_is(_v1.__ctobpl_const_45,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
- assume _v2.value_is(_v1.__ctobpl_const_46, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
- goto inline$_v1.giwscan_cb$0$label_6#2;
-
- inline$_v1.giwscan_cb$0$label_6#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 57} true;
- inline$_v1.giwscan_cb$0$result.giwscan_cb$1 := 0;
- goto inline$_v1.giwscan_cb$0$label_1#2;
-
- inline$_v1.giwscan_cb$0$label_1#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 58} true;
- _v1.__HAVOC_free_in_4_0, _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3 := inline$_v1.giwscan_cb$0$buf, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- call _v1.__HAVOC_free(inline$_v1.giwscan_cb$0$buf);
- _v1.__HAVOC_free_4_done := true;
- _v1.__HAVOC_free_in_5_0, _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3 := inline$_v1.giwscan_cb$0$rsn_leader, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- call _v1.__HAVOC_free(inline$_v1.giwscan_cb$0$rsn_leader);
- _v1.__HAVOC_free_5_done := true;
- goto inline$_v1.giwscan_cb$0$Return;
-
- inline$_v1.giwscan_cb$0$Return:
- assume true;
- _v1.result.giwscan_cb$1 := inline$_v1.giwscan_cb$0$result.giwscan_cb$1;
- goto START$1;
-
- START$1:
- goto inline$_v2.giwscan_cb$0$Entry;
-
- inline$_v2.giwscan_cb$0$Entry:
- inline$_v2.giwscan_cb$0$se_.1 := _v2.se_.1;
- havoc inline$_v2.giwscan_cb$0$havoc_stringTemp, inline$_v2.giwscan_cb$0$condVal, inline$_v2.giwscan_cb$0$buf, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v2.giwscan_cb$0$result.encode_ie$2, inline$_v2.giwscan_cb$0$rsn_leader, inline$_v2.giwscan_cb$0$se, inline$_v2.giwscan_cb$0$tempBoogie0, inline$_v2.giwscan_cb$0$tempBoogie1, inline$_v2.giwscan_cb$0$tempBoogie2, inline$_v2.giwscan_cb$0$tempBoogie3, inline$_v2.giwscan_cb$0$tempBoogie4, inline$_v2.giwscan_cb$0$tempBoogie5, inline$_v2.giwscan_cb$0$tempBoogie6, inline$_v2.giwscan_cb$0$tempBoogie7, inline$_v2.giwscan_cb$0$tempBoogie8, inline$_v2.giwscan_cb$0$tempBoogie9, inline$_v2.giwscan_cb$0$tempBoogie10, inline$_v2.giwscan_cb$0$tempBoogie11, inline$_v2.giwscan_cb$0$tempBoogie12, inline$_v2.giwscan_cb$0$tempBoogie13, inline$_v2.giwscan_cb$0$tempBoogie14, inline$_v2.giwscan_cb$0$tempBoogie15, inline$_v2.giwscan_cb$0$tempBoogie16, inline$_v2.giwscan_cb$0$tempBoogie17, inline$_v2.giwscan_cb$0$tempBoogie18, inline$_v2.giwscan_cb$0$tempBoogie19, inline$_v2.giwscan_cb$0$__havoc_dummy_return, inline$_v2.giwscan_cb$0$result.giwscan_cb$1;
- inline$_v2.giwscan_cb$0$_v2.alloc := _v2.alloc;
- inline$_v2.giwscan_cb$0$_v2.OK := _v2.OK;
- inline$_v2.giwscan_cb$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
- goto inline$_v2.giwscan_cb$0$anon0#2;
-
- inline$_v2.giwscan_cb$0$anon0#2:
- inline$_v2.giwscan_cb$0$havoc_stringTemp := 0;
- goto inline$_v2.giwscan_cb$0$start#2;
-
- inline$_v2.giwscan_cb$0$start#2:
- assume _v2.INT_LT(inline$_v2.giwscan_cb$0$se_.1, _v2.alloc);
- _v2.__HAVOC_det_malloc_in_6_0, _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3 := 6, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- call inline$_v2.giwscan_cb$0$buf := _v2.__HAVOC_det_malloc(6);
- _v2.__HAVOC_det_malloc_6_done := true;
- _v2.__HAVOC_det_malloc_out_6_0, _v2.__HAVOC_det_malloc_out_6_1 := inline$_v2.giwscan_cb$0$buf, _v2.alloc;
- inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := 0;
- inline$_v2.giwscan_cb$0$result.encode_ie$2 := 0;
- inline$_v2.giwscan_cb$0$result.giwscan_cb$1 := 0;
- _v2.__HAVOC_det_malloc_in_7_0, _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3 := 1, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- call inline$_v2.giwscan_cb$0$rsn_leader := _v2.__HAVOC_det_malloc(1);
- _v2.__HAVOC_det_malloc_7_done := true;
- _v2.__HAVOC_det_malloc_out_7_0, _v2.__HAVOC_det_malloc_out_7_1 := inline$_v2.giwscan_cb$0$rsn_leader, _v2.alloc;
- inline$_v2.giwscan_cb$0$se := 0;
- assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se_.1, 0);
- inline$_v2.giwscan_cb$0$se := inline$_v2.giwscan_cb$0$se_.1;
- goto inline$_v2.giwscan_cb$0$label_3#2;
-
- inline$_v2.giwscan_cb$0$label_3#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 46} true;
- goto inline$_v2.giwscan_cb$0$label_4#2;
-
- inline$_v2.giwscan_cb$0$label_4#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 47} true;
- goto inline$_v2.giwscan_cb$0$label_5#2;
-
- inline$_v2.giwscan_cb$0$label_5#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 51} true;
- assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
- == 1;
- assert true;
- goto inline$_v2.giwscan_cb$0$label_5_true#2, inline$_v2.giwscan_cb$0$label_5_false#2;
-
- inline$_v2.giwscan_cb$0$label_5_false#2:
- assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]
- == 0;
- assume _v2.value_is(_v2.__ctobpl_const_33, inline$_v2.giwscan_cb$0$se);
- assume _v2.value_is(_v2.__ctobpl_const_34,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
- goto inline$_v2.giwscan_cb$0$label_6#2;
-
- inline$_v2.giwscan_cb$0$label_5_true#2:
- assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]
- != 0;
- assume _v2.value_is(_v2.__ctobpl_const_33, inline$_v2.giwscan_cb$0$se);
- assume _v2.value_is(_v2.__ctobpl_const_34,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
- goto inline$_v2.giwscan_cb$0$label_7#2;
-
- inline$_v2.giwscan_cb$0$label_7#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 52} true;
- assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 0))
- == 1;
- assert true;
- goto inline$_v2.giwscan_cb$0$label_7_true#2, inline$_v2.giwscan_cb$0$label_7_false#2;
-
- inline$_v2.giwscan_cb$0$label_7_false#2:
- assume !_v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v2.__ctobpl_const_35, inline$_v2.giwscan_cb$0$se);
- assume _v2.value_is(_v2.__ctobpl_const_36,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
- assume _v2.value_is(_v2.__ctobpl_const_37,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 0)]);
- goto inline$_v2.giwscan_cb$0$label_6#2;
-
- inline$_v2.giwscan_cb$0$label_7_true#2:
- assume _v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 0)],
- 200);
- assume _v2.value_is(_v2.__ctobpl_const_35, inline$_v2.giwscan_cb$0$se);
- assume _v2.value_is(_v2.__ctobpl_const_36,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
- assume _v2.value_is(_v2.__ctobpl_const_37,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 0)]);
- goto inline$_v2.giwscan_cb$0$label_8#2;
-
- inline$_v2.giwscan_cb$0$label_8#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 54} true;
- assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 1))
- == 1;
- assert true;
- inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 1)],
- 1,
- 2);
- assume _v2.value_is(_v2.__ctobpl_const_38, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_39, inline$_v2.giwscan_cb$0$se);
- assume _v2.value_is(_v2.__ctobpl_const_40,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
- assume _v2.value_is(_v2.__ctobpl_const_41,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
- 1,
- 1)]);
- goto inline$_v2.giwscan_cb$0$label_9#2;
-
- inline$_v2.giwscan_cb$0$label_9#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 53} true;
- assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
- == 1;
- assert true;
- _v2.encode_ie_in_8_0, _v2.encode_ie_in_8_1, _v2.encode_ie_in_8_2, _v2.encode_ie_in_8_3, _v2.encode_ie_in_8_4, _v2.encode_ie_in_8_5, _v2.encode_ie_in_8_6, _v2.encode_ie_in_8_7, _v2.encode_ie_in_8_8 := inline$_v2.giwscan_cb$0$buf, 6, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)], inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v2.giwscan_cb$0$rsn_leader, 1, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- call inline$_v2.giwscan_cb$0$result.encode_ie$2 := _v2.encode_ie(inline$_v2.giwscan_cb$0$buf, 6, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)], inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v2.giwscan_cb$0$rsn_leader, 1);
- _v2.encode_ie_8_done := true;
- _v2.encode_ie_out_8_0, _v2.encode_ie_out_8_1, _v2.encode_ie_out_8_2 := inline$_v2.giwscan_cb$0$result.encode_ie$2, _v2.OK, _v2.Mem_T.UCHAR;
- assume _v2.value_is(_v2.__ctobpl_const_42, inline$_v2.giwscan_cb$0$se);
- assume _v2.value_is(_v2.__ctobpl_const_43,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
- assume _v2.value_is(_v2.__ctobpl_const_44, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
- assume _v2.value_is(_v2.__ctobpl_const_45, inline$_v2.giwscan_cb$0$se);
- assume _v2.value_is(_v2.__ctobpl_const_46,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
- assume _v2.value_is(_v2.__ctobpl_const_47, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
- goto inline$_v2.giwscan_cb$0$label_6#2;
-
- inline$_v2.giwscan_cb$0$label_6#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 58} true;
- inline$_v2.giwscan_cb$0$result.giwscan_cb$1 := 0;
- goto inline$_v2.giwscan_cb$0$label_1#2;
-
- inline$_v2.giwscan_cb$0$label_1#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 59} true;
- _v2.__HAVOC_free_in_9_0, _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3 := inline$_v2.giwscan_cb$0$buf, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- call _v2.__HAVOC_free(inline$_v2.giwscan_cb$0$buf);
- _v2.__HAVOC_free_9_done := true;
- _v2.__HAVOC_free_in_10_0, _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3 := inline$_v2.giwscan_cb$0$rsn_leader, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- call _v2.__HAVOC_free(inline$_v2.giwscan_cb$0$rsn_leader);
- _v2.__HAVOC_free_10_done := true;
- goto inline$_v2.giwscan_cb$0$Return;
-
- inline$_v2.giwscan_cb$0$Return:
- assume true;
- _v2.result.giwscan_cb$1 := inline$_v2.giwscan_cb$0$result.giwscan_cb$1;
- goto START$2;
-
- START$2:
- goto MS_L_0_8;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done;
- store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3;
- call out__v1.__HAVOC_det_malloc_out_1_0_0, out__v2.__HAVOC_det_malloc_out_6_0_0 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_6_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
- assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_0
- && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_0;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.UCHAR;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-
- MS_L_0_1:
- goto MS_L_taken_1, MS_L_not_taken_1;
-
- MS_L_taken_1:
- assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done;
- store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3;
- call out__v1.__HAVOC_det_malloc_out_1_0_1, out__v2.__HAVOC_det_malloc_out_7_0_1 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_7_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
- assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_1
- && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_1;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.UCHAR;
- goto MS_L_meet_1;
-
- MS_L_not_taken_1:
- assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done);
- goto MS_L_meet_1;
-
- MS_L_meet_1:
- goto MS_L_0_0;
-
- MS_L_0_2:
- goto MS_L_taken_2, MS_L_not_taken_2;
-
- MS_L_taken_2:
- assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done;
- store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3;
- call out__v1.__HAVOC_det_malloc_out_2_0_2, out__v2.__HAVOC_det_malloc_out_6_0_2 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_6_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
- assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_2
- && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_2;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.UCHAR;
- goto MS_L_meet_2;
-
- MS_L_not_taken_2:
- assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done);
- goto MS_L_meet_2;
-
- MS_L_meet_2:
- goto MS_L_0_1;
-
- MS_L_0_3:
- goto MS_L_taken_3, MS_L_not_taken_3;
-
- MS_L_taken_3:
- assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done;
- store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3;
- call out__v1.__HAVOC_det_malloc_out_2_0_3, out__v2.__HAVOC_det_malloc_out_7_0_3 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_7_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
- assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_3
- && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_3;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.UCHAR;
- goto MS_L_meet_3;
-
- MS_L_not_taken_3:
- assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done);
- goto MS_L_meet_3;
-
- MS_L_meet_3:
- goto MS_L_0_2;
-
- MS_L_0_4:
- goto MS_L_taken_4, MS_L_not_taken_4;
-
- MS_L_taken_4:
- assume _v1.encode_ie_3_done && _v2.encode_ie_8_done;
- store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.encode_ie_in_3_6, _v1.encode_ie_in_3_7, _v1.encode_ie_in_3_8;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.encode_ie_in_8_6, _v2.encode_ie_in_8_7, _v2.encode_ie_in_8_8;
- call out__v1.encode_ie_out_3_0_4, out__v2.encode_ie_out_8_0_4 := MS_Check__v1.encode_ie___v2.encode_ie(_v1.encode_ie_in_3_0, _v1.encode_ie_in_3_1, _v1.encode_ie_in_3_2, _v1.encode_ie_in_3_3, _v1.encode_ie_in_3_4, _v1.encode_ie_in_3_5, _v2.encode_ie_in_8_0, _v2.encode_ie_in_8_1, _v2.encode_ie_in_8_2, _v2.encode_ie_in_8_3, _v2.encode_ie_in_8_4, _v2.encode_ie_in_8_5);
- assume (_v1.OK <==> _v1.encode_ie_out_3_1) && _v1.Mem_T.UCHAR == _v1.encode_ie_out_3_2;
- assume (_v2.OK <==> _v2.encode_ie_out_8_1) && _v2.Mem_T.UCHAR == _v2.encode_ie_out_8_2;
- assume _v1.encode_ie_out_3_0 == out__v1.encode_ie_out_3_0_4
- && _v2.encode_ie_out_8_0 == out__v2.encode_ie_out_8_0_4;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.UCHAR;
- goto MS_L_meet_4;
-
- MS_L_not_taken_4:
- assume !(_v1.encode_ie_3_done && _v2.encode_ie_8_done);
- goto MS_L_meet_4;
-
- MS_L_meet_4:
- goto MS_L_0_3;
-
- MS_L_0_5:
- goto MS_L_taken_5, MS_L_not_taken_5;
-
- MS_L_taken_5:
- assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done;
- store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_9_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.UCHAR;
- goto MS_L_meet_5;
-
- MS_L_not_taken_5:
- assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done);
- goto MS_L_meet_5;
-
- MS_L_meet_5:
- goto MS_L_0_4;
-
- MS_L_0_6:
- goto MS_L_taken_6, MS_L_not_taken_6;
-
- MS_L_taken_6:
- assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done;
- store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_10_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.UCHAR;
- goto MS_L_meet_6;
-
- MS_L_not_taken_6:
- assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done);
- goto MS_L_meet_6;
-
- MS_L_meet_6:
- goto MS_L_0_5;
-
- MS_L_0_7:
- goto MS_L_taken_7, MS_L_not_taken_7;
-
- MS_L_taken_7:
- assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done;
- store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_9_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.UCHAR;
- goto MS_L_meet_7;
-
- MS_L_not_taken_7:
- assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done);
- goto MS_L_meet_7;
-
- MS_L_meet_7:
- goto MS_L_0_6;
-
- MS_L_0_8:
- goto MS_L_taken_8, MS_L_not_taken_8;
-
- MS_L_taken_8:
- assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done;
- store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_10_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.UCHAR;
- goto MS_L_meet_8;
-
- MS_L_not_taken_8:
- assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done);
- goto MS_L_meet_8;
-
- MS_L_meet_8:
- goto MS_L_0_7;
-}
-
-
-
-function {:inline true} MS$_v1.main$_v2.main(_v1.OK_old: bool,
- _v1.Mem_old: [name][int]int,
- _v1.alloc_old: int,
- _v1.Mem_T.A1CHAR_old: [int]int,
- _v1.Mem_T.A5UCHAR_old: [int]int,
- _v1.Mem_T.A6UCHAR_old: [int]int,
- _v1.Mem_T.CHAR_old: [int]int,
- _v1.Mem_T.INT4_old: [int]int,
- _v1.Mem_T.PCHAR_old: [int]int,
- _v1.Mem_T.PUCHAR_old: [int]int,
- _v1.Mem_T.PVOID_old: [int]int,
- _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.UCHAR_old: [int]int,
- _v1.Mem_T.VOID_old: [int]int,
- _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v1.detChoiceCnt_old: int,
- _v1.Res_KERNEL_SOURCE_old: [int]int,
- _v1.Res_PROBED_old: [int]int,
- _v1.alloc_: int,
- _v1.OK_: bool,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_: [int]int,
- _v1.Mem_T.UCHAR_: [int]int,
- _v1.result.main$1: int,
- _v2.OK_old: bool,
- _v2.Mem_old: [name][int]int,
- _v2.alloc_old: int,
- _v2.Mem_T.A1CHAR_old: [int]int,
- _v2.Mem_T.A5UCHAR_old: [int]int,
- _v2.Mem_T.A6UCHAR_old: [int]int,
- _v2.Mem_T.CHAR_old: [int]int,
- _v2.Mem_T.INT4_old: [int]int,
- _v2.Mem_T.PCHAR_old: [int]int,
- _v2.Mem_T.PUCHAR_old: [int]int,
- _v2.Mem_T.PVOID_old: [int]int,
- _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.UCHAR_old: [int]int,
- _v2.Mem_T.VOID_old: [int]int,
- _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
- _v2.detChoiceCnt_old: int,
- _v2.Res_KERNEL_SOURCE_old: [int]int,
- _v2.Res_PROBED_old: [int]int,
- _v2.alloc_: int,
- _v2.OK_: bool,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_: [int]int,
- _v2.Mem_T.UCHAR_: [int]int,
- _v2.result.main$1: int)
- : bool
-{
- true
-}
-
-procedure MS_Check__v1.main___v2.main() returns (_v1.result.main$1: int, _v2.result.main$1: int);
- requires (_v1.OK <==> _v2.OK)
- && _v1.Mem == _v2.Mem
- && _v1.alloc == _v2.alloc
- && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
- && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
- && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
- && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
- && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
- && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
- && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
- && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
- && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
- && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
- && _v1.Mem_T.VOID == _v2.Mem_T.VOID
- && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
- && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
- == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
- && _v1.detChoiceCnt == _v2.detChoiceCnt
- && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
- && _v1.Res_PROBED == _v2.Res_PROBED;
- modifies _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- ensures MS$_v1.main$_v2.main(old(_v1.OK),
- old(_v1.Mem),
- old(_v1.alloc),
- old(_v1.Mem_T.A1CHAR),
- old(_v1.Mem_T.A5UCHAR),
- old(_v1.Mem_T.A6UCHAR),
- old(_v1.Mem_T.CHAR),
- old(_v1.Mem_T.INT4),
- old(_v1.Mem_T.PCHAR),
- old(_v1.Mem_T.PUCHAR),
- old(_v1.Mem_T.PVOID),
- old(_v1.Mem_T.Pieee80211_scan_entry),
- old(_v1.Mem_T.UCHAR),
- old(_v1.Mem_T.VOID),
- old(_v1.Mem_T.ieee80211_scan_entry),
- old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v1.detChoiceCnt),
- old(_v1.Res_KERNEL_SOURCE),
- old(_v1.Res_PROBED),
- _v1.alloc,
- _v1.OK,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry,
- _v1.Mem_T.UCHAR,
- _v1.result.main$1,
- old(_v2.OK),
- old(_v2.Mem),
- old(_v2.alloc),
- old(_v2.Mem_T.A1CHAR),
- old(_v2.Mem_T.A5UCHAR),
- old(_v2.Mem_T.A6UCHAR),
- old(_v2.Mem_T.CHAR),
- old(_v2.Mem_T.INT4),
- old(_v2.Mem_T.PCHAR),
- old(_v2.Mem_T.PUCHAR),
- old(_v2.Mem_T.PVOID),
- old(_v2.Mem_T.Pieee80211_scan_entry),
- old(_v2.Mem_T.UCHAR),
- old(_v2.Mem_T.VOID),
- old(_v2.Mem_T.ieee80211_scan_entry),
- old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
- old(_v2.detChoiceCnt),
- old(_v2.Res_KERNEL_SOURCE),
- old(_v2.Res_PROBED),
- _v2.alloc,
- _v2.OK,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry,
- _v2.Mem_T.UCHAR,
- _v2.result.main$1);
- ensures _v1.OK ==> _v2.OK;
-
-
-
-implementation MS_Check__v1.main___v2.main() returns (_v1.result.main$1: int, _v2.result.main$1: int)
-{
- var inline$_v1.main$0$havoc_stringTemp: int;
- var inline$_v1.main$0$condVal: int;
- var inline$_v1.main$0$ie: int;
- var inline$_v1.main$0$result.giwscan_cb$2: int;
- var inline$_v1.main$0$se: int;
- var inline$_v1.main$0$tempBoogie0: int;
- var inline$_v1.main$0$tempBoogie1: int;
- var inline$_v1.main$0$tempBoogie2: int;
- var inline$_v1.main$0$tempBoogie3: int;
- var inline$_v1.main$0$tempBoogie4: int;
- var inline$_v1.main$0$tempBoogie5: int;
- var inline$_v1.main$0$tempBoogie6: int;
- var inline$_v1.main$0$tempBoogie7: int;
- var inline$_v1.main$0$tempBoogie8: int;
- var inline$_v1.main$0$tempBoogie9: int;
- var inline$_v1.main$0$tempBoogie10: int;
- var inline$_v1.main$0$tempBoogie11: int;
- var inline$_v1.main$0$tempBoogie12: int;
- var inline$_v1.main$0$tempBoogie13: int;
- var inline$_v1.main$0$tempBoogie14: int;
- var inline$_v1.main$0$tempBoogie15: int;
- var inline$_v1.main$0$tempBoogie16: int;
- var inline$_v1.main$0$tempBoogie17: int;
- var inline$_v1.main$0$tempBoogie18: int;
- var inline$_v1.main$0$tempBoogie19: int;
- var inline$_v1.main$0$__havoc_dummy_return: int;
- var inline$_v1.main$0$result.main$1: int;
- var inline$_v1.main$0$_v1.alloc: int;
- var inline$_v1.main$0$_v1.OK: bool;
- var inline$_v1.main$0$_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var inline$_v1.main$0$_v1.Mem_T.UCHAR: [int]int;
- var inline$_v2.main$0$havoc_stringTemp: int;
- var inline$_v2.main$0$condVal: int;
- var inline$_v2.main$0$ie: int;
- var inline$_v2.main$0$result.giwscan_cb$2: int;
- var inline$_v2.main$0$se: int;
- var inline$_v2.main$0$tempBoogie0: int;
- var inline$_v2.main$0$tempBoogie1: int;
- var inline$_v2.main$0$tempBoogie2: int;
- var inline$_v2.main$0$tempBoogie3: int;
- var inline$_v2.main$0$tempBoogie4: int;
- var inline$_v2.main$0$tempBoogie5: int;
- var inline$_v2.main$0$tempBoogie6: int;
- var inline$_v2.main$0$tempBoogie7: int;
- var inline$_v2.main$0$tempBoogie8: int;
- var inline$_v2.main$0$tempBoogie9: int;
- var inline$_v2.main$0$tempBoogie10: int;
- var inline$_v2.main$0$tempBoogie11: int;
- var inline$_v2.main$0$tempBoogie12: int;
- var inline$_v2.main$0$tempBoogie13: int;
- var inline$_v2.main$0$tempBoogie14: int;
- var inline$_v2.main$0$tempBoogie15: int;
- var inline$_v2.main$0$tempBoogie16: int;
- var inline$_v2.main$0$tempBoogie17: int;
- var inline$_v2.main$0$tempBoogie18: int;
- var inline$_v2.main$0$tempBoogie19: int;
- var inline$_v2.main$0$__havoc_dummy_return: int;
- var inline$_v2.main$0$result.main$1: int;
- var inline$_v2.main$0$_v2.alloc: int;
- var inline$_v2.main$0$_v2.OK: bool;
- var inline$_v2.main$0$_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var inline$_v2.main$0$_v2.Mem_T.UCHAR: [int]int;
- var _v1.__HAVOC_det_malloc_1_done: bool;
- var _v1.__HAVOC_det_malloc_in_1_0: int;
- var _v1.__HAVOC_det_malloc_in_1_1: int;
- var _v1.__HAVOC_det_malloc_in_1_2: bool;
- var _v1.__HAVOC_det_malloc_in_1_3: [int]int;
- var _v1.__HAVOC_det_malloc_in_1_4: [int]int;
- var _v1.__HAVOC_det_malloc_out_1_0: int;
- var _v1.__HAVOC_det_malloc_out_1_1: int;
- var _v1.__HAVOC_det_malloc_2_done: bool;
- var _v1.__HAVOC_det_malloc_in_2_0: int;
- var _v1.__HAVOC_det_malloc_in_2_1: int;
- var _v1.__HAVOC_det_malloc_in_2_2: bool;
- var _v1.__HAVOC_det_malloc_in_2_3: [int]int;
- var _v1.__HAVOC_det_malloc_in_2_4: [int]int;
- var _v1.__HAVOC_det_malloc_out_2_0: int;
- var _v1.__HAVOC_det_malloc_out_2_1: int;
- var _v1.giwscan_cb_3_done: bool;
- var _v1.giwscan_cb_in_3_0: int;
- var _v1.giwscan_cb_in_3_1: int;
- var _v1.giwscan_cb_in_3_2: bool;
- var _v1.giwscan_cb_in_3_3: [int]int;
- var _v1.giwscan_cb_in_3_4: [int]int;
- var _v1.giwscan_cb_out_3_0: int;
- var _v1.giwscan_cb_out_3_1: int;
- var _v1.giwscan_cb_out_3_2: bool;
- var _v1.giwscan_cb_out_3_3: [int]int;
- var _v1.__HAVOC_free_4_done: bool;
- var _v1.__HAVOC_free_in_4_0: int;
- var _v1.__HAVOC_free_in_4_1: int;
- var _v1.__HAVOC_free_in_4_2: bool;
- var _v1.__HAVOC_free_in_4_3: [int]int;
- var _v1.__HAVOC_free_in_4_4: [int]int;
- var _v1.__HAVOC_free_5_done: bool;
- var _v1.__HAVOC_free_in_5_0: int;
- var _v1.__HAVOC_free_in_5_1: int;
- var _v1.__HAVOC_free_in_5_2: bool;
- var _v1.__HAVOC_free_in_5_3: [int]int;
- var _v1.__HAVOC_free_in_5_4: [int]int;
- var _v2.__HAVOC_det_malloc_6_done: bool;
- var _v2.__HAVOC_det_malloc_in_6_0: int;
- var _v2.__HAVOC_det_malloc_in_6_1: int;
- var _v2.__HAVOC_det_malloc_in_6_2: bool;
- var _v2.__HAVOC_det_malloc_in_6_3: [int]int;
- var _v2.__HAVOC_det_malloc_in_6_4: [int]int;
- var _v2.__HAVOC_det_malloc_out_6_0: int;
- var _v2.__HAVOC_det_malloc_out_6_1: int;
- var _v2.__HAVOC_det_malloc_7_done: bool;
- var _v2.__HAVOC_det_malloc_in_7_0: int;
- var _v2.__HAVOC_det_malloc_in_7_1: int;
- var _v2.__HAVOC_det_malloc_in_7_2: bool;
- var _v2.__HAVOC_det_malloc_in_7_3: [int]int;
- var _v2.__HAVOC_det_malloc_in_7_4: [int]int;
- var _v2.__HAVOC_det_malloc_out_7_0: int;
- var _v2.__HAVOC_det_malloc_out_7_1: int;
- var _v2.giwscan_cb_8_done: bool;
- var _v2.giwscan_cb_in_8_0: int;
- var _v2.giwscan_cb_in_8_1: int;
- var _v2.giwscan_cb_in_8_2: bool;
- var _v2.giwscan_cb_in_8_3: [int]int;
- var _v2.giwscan_cb_in_8_4: [int]int;
- var _v2.giwscan_cb_out_8_0: int;
- var _v2.giwscan_cb_out_8_1: int;
- var _v2.giwscan_cb_out_8_2: bool;
- var _v2.giwscan_cb_out_8_3: [int]int;
- var _v2.__HAVOC_free_9_done: bool;
- var _v2.__HAVOC_free_in_9_0: int;
- var _v2.__HAVOC_free_in_9_1: int;
- var _v2.__HAVOC_free_in_9_2: bool;
- var _v2.__HAVOC_free_in_9_3: [int]int;
- var _v2.__HAVOC_free_in_9_4: [int]int;
- var _v2.__HAVOC_free_10_done: bool;
- var _v2.__HAVOC_free_in_10_0: int;
- var _v2.__HAVOC_free_in_10_1: int;
- var _v2.__HAVOC_free_in_10_2: bool;
- var _v2.__HAVOC_free_in_10_3: [int]int;
- var _v2.__HAVOC_free_in_10_4: [int]int;
- var store__0__v1.alloc: int;
- var store__0__v1.OK: bool;
- var store__0__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__0__v1.Mem_T.UCHAR: [int]int;
- var store__0__v2.alloc: int;
- var store__0__v2.OK: bool;
- var store__0__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__0__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_1_0_0: int;
- var out__v2.__HAVOC_det_malloc_out_6_0_0: int;
- var store__1__v1.alloc: int;
- var store__1__v1.OK: bool;
- var store__1__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__1__v1.Mem_T.UCHAR: [int]int;
- var store__1__v2.alloc: int;
- var store__1__v2.OK: bool;
- var store__1__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__1__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_1_0_1: int;
- var out__v2.__HAVOC_det_malloc_out_7_0_1: int;
- var store__2__v1.alloc: int;
- var store__2__v1.OK: bool;
- var store__2__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__2__v1.Mem_T.UCHAR: [int]int;
- var store__2__v2.alloc: int;
- var store__2__v2.OK: bool;
- var store__2__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__2__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_2_0_2: int;
- var out__v2.__HAVOC_det_malloc_out_6_0_2: int;
- var store__3__v1.alloc: int;
- var store__3__v1.OK: bool;
- var store__3__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__3__v1.Mem_T.UCHAR: [int]int;
- var store__3__v2.alloc: int;
- var store__3__v2.OK: bool;
- var store__3__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__3__v2.Mem_T.UCHAR: [int]int;
- var out__v1.__HAVOC_det_malloc_out_2_0_3: int;
- var out__v2.__HAVOC_det_malloc_out_7_0_3: int;
- var store__4__v1.alloc: int;
- var store__4__v1.OK: bool;
- var store__4__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__4__v1.Mem_T.UCHAR: [int]int;
- var store__4__v2.alloc: int;
- var store__4__v2.OK: bool;
- var store__4__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__4__v2.Mem_T.UCHAR: [int]int;
- var out__v1.giwscan_cb_out_3_0_4: int;
- var out__v2.giwscan_cb_out_8_0_4: int;
- var store__5__v1.alloc: int;
- var store__5__v1.OK: bool;
- var store__5__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__5__v1.Mem_T.UCHAR: [int]int;
- var store__5__v2.alloc: int;
- var store__5__v2.OK: bool;
- var store__5__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__5__v2.Mem_T.UCHAR: [int]int;
- var store__6__v1.alloc: int;
- var store__6__v1.OK: bool;
- var store__6__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__6__v1.Mem_T.UCHAR: [int]int;
- var store__6__v2.alloc: int;
- var store__6__v2.OK: bool;
- var store__6__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__6__v2.Mem_T.UCHAR: [int]int;
- var store__7__v1.alloc: int;
- var store__7__v1.OK: bool;
- var store__7__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__7__v1.Mem_T.UCHAR: [int]int;
- var store__7__v2.alloc: int;
- var store__7__v2.OK: bool;
- var store__7__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__7__v2.Mem_T.UCHAR: [int]int;
- var store__8__v1.alloc: int;
- var store__8__v1.OK: bool;
- var store__8__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__8__v1.Mem_T.UCHAR: [int]int;
- var store__8__v2.alloc: int;
- var store__8__v2.OK: bool;
- var store__8__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
- var store__8__v2.Mem_T.UCHAR: [int]int;
-
- START:
- _v1.__HAVOC_det_malloc_1_done, _v1.__HAVOC_det_malloc_2_done, _v1.giwscan_cb_3_done, _v1.__HAVOC_free_4_done, _v1.__HAVOC_free_5_done, _v2.__HAVOC_det_malloc_6_done, _v2.__HAVOC_det_malloc_7_done, _v2.giwscan_cb_8_done, _v2.__HAVOC_free_9_done, _v2.__HAVOC_free_10_done := false, false, false, false, false, false, false, false, false, false;
- goto inline$_v1.main$0$Entry;
-
- inline$_v1.main$0$Entry:
- havoc inline$_v1.main$0$havoc_stringTemp, inline$_v1.main$0$condVal, inline$_v1.main$0$ie, inline$_v1.main$0$result.giwscan_cb$2, inline$_v1.main$0$se, inline$_v1.main$0$tempBoogie0, inline$_v1.main$0$tempBoogie1, inline$_v1.main$0$tempBoogie2, inline$_v1.main$0$tempBoogie3, inline$_v1.main$0$tempBoogie4, inline$_v1.main$0$tempBoogie5, inline$_v1.main$0$tempBoogie6, inline$_v1.main$0$tempBoogie7, inline$_v1.main$0$tempBoogie8, inline$_v1.main$0$tempBoogie9, inline$_v1.main$0$tempBoogie10, inline$_v1.main$0$tempBoogie11, inline$_v1.main$0$tempBoogie12, inline$_v1.main$0$tempBoogie13, inline$_v1.main$0$tempBoogie14, inline$_v1.main$0$tempBoogie15, inline$_v1.main$0$tempBoogie16, inline$_v1.main$0$tempBoogie17, inline$_v1.main$0$tempBoogie18, inline$_v1.main$0$tempBoogie19, inline$_v1.main$0$__havoc_dummy_return, inline$_v1.main$0$result.main$1;
- inline$_v1.main$0$_v1.alloc := _v1.alloc;
- inline$_v1.main$0$_v1.OK := _v1.OK;
- inline$_v1.main$0$_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- inline$_v1.main$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
- goto inline$_v1.main$0$anon0#2;
-
- inline$_v1.main$0$anon0#2:
- inline$_v1.main$0$havoc_stringTemp := 0;
- goto inline$_v1.main$0$start#2;
-
- inline$_v1.main$0$start#2:
- _v1.__HAVOC_det_malloc_in_1_0, _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3, _v1.__HAVOC_det_malloc_in_1_4 := 5, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- call inline$_v1.main$0$ie := _v1.__HAVOC_det_malloc(5);
- _v1.__HAVOC_det_malloc_1_done := true;
- _v1.__HAVOC_det_malloc_out_1_0, _v1.__HAVOC_det_malloc_out_1_1 := inline$_v1.main$0$ie, _v1.alloc;
- inline$_v1.main$0$result.giwscan_cb$2 := 0;
- inline$_v1.main$0$result.main$1 := 0;
- _v1.__HAVOC_det_malloc_in_2_0, _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3, _v1.__HAVOC_det_malloc_in_2_4 := 4, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- call inline$_v1.main$0$se := _v1.__HAVOC_det_malloc(4);
- _v1.__HAVOC_det_malloc_2_done := true;
- _v1.__HAVOC_det_malloc_out_2_0, _v1.__HAVOC_det_malloc_out_2_1 := inline$_v1.main$0$se, _v1.alloc;
- goto inline$_v1.main$0$label_3#2;
-
- inline$_v1.main$0$label_3#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 62} true;
- goto inline$_v1.main$0$label_4#2;
-
- inline$_v1.main$0$label_4#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 63} true;
- goto inline$_v1.main$0$label_5#2;
-
- inline$_v1.main$0$label_5#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 64} true;
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se))
- == 1;
- assert true;
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se) := inline$_v1.main$0$ie];
- assume _v2.value_is(_v1.__ctobpl_const_47,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)]);
- goto inline$_v1.main$0$label_6#2;
-
- inline$_v1.main$0$label_6#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 65} true;
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 1,
- 0))
- == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 1,
- 0) := 200];
- assume _v2.value_is(_v1.__ctobpl_const_48,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)]);
- assume _v2.value_is(_v1.__ctobpl_const_49,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 1,
- 0)]);
- goto inline$_v1.main$0$label_7#2;
-
- inline$_v1.main$0$label_7#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 66} true;
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 0);
- _v1.OK := _v1.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 1,
- 1))
- == 1;
- assert true;
- _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 1,
- 1) := 3];
- assume _v2.value_is(_v1.__ctobpl_const_50,
- _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)]);
- assume _v2.value_is(_v1.__ctobpl_const_51,
- _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
- 1,
- 1)]);
- goto inline$_v1.main$0$label_8#2;
-
- inline$_v1.main$0$label_8#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 68} true;
- assume _v2.INT_GT(inline$_v1.main$0$se, 0);
- assume _v2.INT_GT(inline$_v1.main$0$se, 0);
- _v1.giwscan_cb_in_3_0, _v1.giwscan_cb_in_3_1, _v1.giwscan_cb_in_3_2, _v1.giwscan_cb_in_3_3, _v1.giwscan_cb_in_3_4 := inline$_v1.main$0$se, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- call inline$_v1.main$0$result.giwscan_cb$2 := _v1.giwscan_cb(inline$_v1.main$0$se);
- _v1.giwscan_cb_3_done := true;
- _v1.giwscan_cb_out_3_0, _v1.giwscan_cb_out_3_1, _v1.giwscan_cb_out_3_2, _v1.giwscan_cb_out_3_3 := inline$_v1.main$0$result.giwscan_cb$2, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
- goto inline$_v1.main$0$label_11#2;
-
- inline$_v1.main$0$label_11#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 70} true;
- inline$_v1.main$0$result.main$1 := 0;
- goto inline$_v1.main$0$label_1#2;
-
- inline$_v1.main$0$label_1#2:
- _v1.OK := _v1.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 71} true;
- _v1.__HAVOC_free_in_4_0, _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3, _v1.__HAVOC_free_in_4_4 := inline$_v1.main$0$ie, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- call _v1.__HAVOC_free(inline$_v1.main$0$ie);
- _v1.__HAVOC_free_4_done := true;
- _v1.__HAVOC_free_in_5_0, _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3, _v1.__HAVOC_free_in_5_4 := inline$_v1.main$0$se, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- call _v1.__HAVOC_free(inline$_v1.main$0$se);
- _v1.__HAVOC_free_5_done := true;
- goto inline$_v1.main$0$Return;
-
- inline$_v1.main$0$Return:
- assume true;
- _v1.result.main$1 := inline$_v1.main$0$result.main$1;
- goto START$1;
-
- START$1:
- goto inline$_v2.main$0$Entry;
-
- inline$_v2.main$0$Entry:
- havoc inline$_v2.main$0$havoc_stringTemp, inline$_v2.main$0$condVal, inline$_v2.main$0$ie, inline$_v2.main$0$result.giwscan_cb$2, inline$_v2.main$0$se, inline$_v2.main$0$tempBoogie0, inline$_v2.main$0$tempBoogie1, inline$_v2.main$0$tempBoogie2, inline$_v2.main$0$tempBoogie3, inline$_v2.main$0$tempBoogie4, inline$_v2.main$0$tempBoogie5, inline$_v2.main$0$tempBoogie6, inline$_v2.main$0$tempBoogie7, inline$_v2.main$0$tempBoogie8, inline$_v2.main$0$tempBoogie9, inline$_v2.main$0$tempBoogie10, inline$_v2.main$0$tempBoogie11, inline$_v2.main$0$tempBoogie12, inline$_v2.main$0$tempBoogie13, inline$_v2.main$0$tempBoogie14, inline$_v2.main$0$tempBoogie15, inline$_v2.main$0$tempBoogie16, inline$_v2.main$0$tempBoogie17, inline$_v2.main$0$tempBoogie18, inline$_v2.main$0$tempBoogie19, inline$_v2.main$0$__havoc_dummy_return, inline$_v2.main$0$result.main$1;
- inline$_v2.main$0$_v2.alloc := _v2.alloc;
- inline$_v2.main$0$_v2.OK := _v2.OK;
- inline$_v2.main$0$_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
- inline$_v2.main$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
- goto inline$_v2.main$0$anon0#2;
-
- inline$_v2.main$0$anon0#2:
- inline$_v2.main$0$havoc_stringTemp := 0;
- goto inline$_v2.main$0$start#2;
-
- inline$_v2.main$0$start#2:
- _v2.__HAVOC_det_malloc_in_6_0, _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3, _v2.__HAVOC_det_malloc_in_6_4 := 5, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- call inline$_v2.main$0$ie := _v2.__HAVOC_det_malloc(5);
- _v2.__HAVOC_det_malloc_6_done := true;
- _v2.__HAVOC_det_malloc_out_6_0, _v2.__HAVOC_det_malloc_out_6_1 := inline$_v2.main$0$ie, _v2.alloc;
- inline$_v2.main$0$result.giwscan_cb$2 := 0;
- inline$_v2.main$0$result.main$1 := 0;
- _v2.__HAVOC_det_malloc_in_7_0, _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3, _v2.__HAVOC_det_malloc_in_7_4 := 4, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- call inline$_v2.main$0$se := _v2.__HAVOC_det_malloc(4);
- _v2.__HAVOC_det_malloc_7_done := true;
- _v2.__HAVOC_det_malloc_out_7_0, _v2.__HAVOC_det_malloc_out_7_1 := inline$_v2.main$0$se, _v2.alloc;
- goto inline$_v2.main$0$label_3#2;
-
- inline$_v2.main$0$label_3#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 63} true;
- goto inline$_v2.main$0$label_4#2;
-
- inline$_v2.main$0$label_4#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 64} true;
- goto inline$_v2.main$0$label_5#2;
-
- inline$_v2.main$0$label_5#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 65} true;
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se))
- == 1;
- assert true;
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se) := inline$_v2.main$0$ie];
- assume _v2.value_is(_v2.__ctobpl_const_48,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)]);
- goto inline$_v2.main$0$label_6#2;
-
- inline$_v2.main$0$label_6#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 66} true;
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 1,
- 0))
- == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 1,
- 0) := 200];
- assume _v2.value_is(_v2.__ctobpl_const_49,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)]);
- assume _v2.value_is(_v2.__ctobpl_const_50,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 1,
- 0)]);
- goto inline$_v2.main$0$label_7#2;
-
- inline$_v2.main$0$label_7#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 67} true;
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se))
- == 1;
- assert true;
- assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 0);
- _v2.OK := _v2.OK
- && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 1,
- 1))
- == 1;
- assert true;
- _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 1,
- 1) := 3];
- assume _v2.value_is(_v2.__ctobpl_const_51,
- _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)]);
- assume _v2.value_is(_v2.__ctobpl_const_52,
- _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
- 1,
- 1)]);
- goto inline$_v2.main$0$label_8#2;
-
- inline$_v2.main$0$label_8#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 69} true;
- assume _v2.INT_GT(inline$_v2.main$0$se, 0);
- assume _v2.INT_GT(inline$_v2.main$0$se, 0);
- _v2.giwscan_cb_in_8_0, _v2.giwscan_cb_in_8_1, _v2.giwscan_cb_in_8_2, _v2.giwscan_cb_in_8_3, _v2.giwscan_cb_in_8_4 := inline$_v2.main$0$se, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- call inline$_v2.main$0$result.giwscan_cb$2 := _v2.giwscan_cb(inline$_v2.main$0$se);
- _v2.giwscan_cb_8_done := true;
- _v2.giwscan_cb_out_8_0, _v2.giwscan_cb_out_8_1, _v2.giwscan_cb_out_8_2, _v2.giwscan_cb_out_8_3 := inline$_v2.main$0$result.giwscan_cb$2, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
- goto inline$_v2.main$0$label_11#2;
-
- inline$_v2.main$0$label_11#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 71} true;
- inline$_v2.main$0$result.main$1 := 0;
- goto inline$_v2.main$0$label_1#2;
-
- inline$_v2.main$0$label_1#2:
- _v2.OK := _v2.OK && true;
- assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 72} true;
- _v2.__HAVOC_free_in_9_0, _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3, _v2.__HAVOC_free_in_9_4 := inline$_v2.main$0$ie, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- call _v2.__HAVOC_free(inline$_v2.main$0$ie);
- _v2.__HAVOC_free_9_done := true;
- _v2.__HAVOC_free_in_10_0, _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3, _v2.__HAVOC_free_in_10_4 := inline$_v2.main$0$se, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- call _v2.__HAVOC_free(inline$_v2.main$0$se);
- _v2.__HAVOC_free_10_done := true;
- goto inline$_v2.main$0$Return;
-
- inline$_v2.main$0$Return:
- assume true;
- _v2.result.main$1 := inline$_v2.main$0$result.main$1;
- goto START$2;
-
- START$2:
- goto MS_L_0_8;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done;
- store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3, _v1.__HAVOC_det_malloc_in_1_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3, _v2.__HAVOC_det_malloc_in_6_4;
- call out__v1.__HAVOC_det_malloc_out_1_0_0, out__v2.__HAVOC_det_malloc_out_6_0_0 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_6_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
- assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_0
- && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_0;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v2.Mem_T.UCHAR;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-
- MS_L_0_1:
- goto MS_L_taken_1, MS_L_not_taken_1;
-
- MS_L_taken_1:
- assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done;
- store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3, _v1.__HAVOC_det_malloc_in_1_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3, _v2.__HAVOC_det_malloc_in_7_4;
- call out__v1.__HAVOC_det_malloc_out_1_0_1, out__v2.__HAVOC_det_malloc_out_7_0_1 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_7_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
- assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_1
- && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_1;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v2.Mem_T.UCHAR;
- goto MS_L_meet_1;
-
- MS_L_not_taken_1:
- assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done);
- goto MS_L_meet_1;
-
- MS_L_meet_1:
- goto MS_L_0_0;
-
- MS_L_0_2:
- goto MS_L_taken_2, MS_L_not_taken_2;
-
- MS_L_taken_2:
- assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done;
- store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3, _v1.__HAVOC_det_malloc_in_2_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3, _v2.__HAVOC_det_malloc_in_6_4;
- call out__v1.__HAVOC_det_malloc_out_2_0_2, out__v2.__HAVOC_det_malloc_out_6_0_2 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_6_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
- assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_2
- && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_2;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v2.Mem_T.UCHAR;
- goto MS_L_meet_2;
-
- MS_L_not_taken_2:
- assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done);
- goto MS_L_meet_2;
-
- MS_L_meet_2:
- goto MS_L_0_1;
-
- MS_L_0_3:
- goto MS_L_taken_3, MS_L_not_taken_3;
-
- MS_L_taken_3:
- assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done;
- store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3, _v1.__HAVOC_det_malloc_in_2_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3, _v2.__HAVOC_det_malloc_in_7_4;
- call out__v1.__HAVOC_det_malloc_out_2_0_3, out__v2.__HAVOC_det_malloc_out_7_0_3 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_7_0);
- assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
- assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
- assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_3
- && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_3;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v2.Mem_T.UCHAR;
- goto MS_L_meet_3;
-
- MS_L_not_taken_3:
- assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done);
- goto MS_L_meet_3;
-
- MS_L_meet_3:
- goto MS_L_0_2;
-
- MS_L_0_4:
- goto MS_L_taken_4, MS_L_not_taken_4;
-
- MS_L_taken_4:
- assume _v1.giwscan_cb_3_done && _v2.giwscan_cb_8_done;
- store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.giwscan_cb_in_3_1, _v1.giwscan_cb_in_3_2, _v1.giwscan_cb_in_3_3, _v1.giwscan_cb_in_3_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.giwscan_cb_in_8_1, _v2.giwscan_cb_in_8_2, _v2.giwscan_cb_in_8_3, _v2.giwscan_cb_in_8_4;
- call out__v1.giwscan_cb_out_3_0_4, out__v2.giwscan_cb_out_8_0_4 := MS_Check__v1.giwscan_cb___v2.giwscan_cb(_v1.giwscan_cb_in_3_0, _v2.giwscan_cb_in_8_0);
- assume _v1.alloc == _v1.giwscan_cb_out_3_1
- && (_v1.OK <==> _v1.giwscan_cb_out_3_2)
- && _v1.Mem_T.UCHAR == _v1.giwscan_cb_out_3_3;
- assume _v2.alloc == _v2.giwscan_cb_out_8_1
- && (_v2.OK <==> _v2.giwscan_cb_out_8_2)
- && _v2.Mem_T.UCHAR == _v2.giwscan_cb_out_8_3;
- assume _v1.giwscan_cb_out_3_0 == out__v1.giwscan_cb_out_3_0_4
- && _v2.giwscan_cb_out_8_0 == out__v2.giwscan_cb_out_8_0_4;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v2.Mem_T.UCHAR;
- goto MS_L_meet_4;
-
- MS_L_not_taken_4:
- assume !(_v1.giwscan_cb_3_done && _v2.giwscan_cb_8_done);
- goto MS_L_meet_4;
-
- MS_L_meet_4:
- goto MS_L_0_3;
-
- MS_L_0_5:
- goto MS_L_taken_5, MS_L_not_taken_5;
-
- MS_L_taken_5:
- assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done;
- store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3, _v1.__HAVOC_free_in_4_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3, _v2.__HAVOC_free_in_9_4;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_9_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v2.Mem_T.UCHAR;
- goto MS_L_meet_5;
-
- MS_L_not_taken_5:
- assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done);
- goto MS_L_meet_5;
-
- MS_L_meet_5:
- goto MS_L_0_4;
-
- MS_L_0_6:
- goto MS_L_taken_6, MS_L_not_taken_6;
-
- MS_L_taken_6:
- assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done;
- store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3, _v1.__HAVOC_free_in_4_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3, _v2.__HAVOC_free_in_10_4;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_10_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v2.Mem_T.UCHAR;
- goto MS_L_meet_6;
-
- MS_L_not_taken_6:
- assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done);
- goto MS_L_meet_6;
-
- MS_L_meet_6:
- goto MS_L_0_5;
-
- MS_L_0_7:
- goto MS_L_taken_7, MS_L_not_taken_7;
-
- MS_L_taken_7:
- assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done;
- store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3, _v1.__HAVOC_free_in_5_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3, _v2.__HAVOC_free_in_9_4;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_9_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v2.Mem_T.UCHAR;
- goto MS_L_meet_7;
-
- MS_L_not_taken_7:
- assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done);
- goto MS_L_meet_7;
-
- MS_L_meet_7:
- goto MS_L_0_6;
-
- MS_L_0_8:
- goto MS_L_taken_8, MS_L_not_taken_8;
-
- MS_L_taken_8:
- assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done;
- store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
- store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3, _v1.__HAVOC_free_in_5_4;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3, _v2.__HAVOC_free_in_10_4;
- call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_10_0);
- assume true;
- assume true;
- assume true;
- _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v1.Mem_T.UCHAR;
- _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v2.Mem_T.UCHAR;
- goto MS_L_meet_8;
-
- MS_L_not_taken_8:
- assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done);
- goto MS_L_meet_8;
-
- MS_L_meet_8:
- goto MS_L_0_7;
-}
-
-
+// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+function _v2.ite(b: bool, x: int, y: int) : int;
+
+var _v2.OK: bool;
+
+var {:extern} _v2.Mem: [name][int]int;
+
+var {:extern} _v2.alloc: int;
+
+var {:extern} _v2.Mem_T.A1CHAR: [int]int;
+
+var {:extern} _v2.Mem_T.A5UCHAR: [int]int;
+
+var {:extern} _v2.Mem_T.A6UCHAR: [int]int;
+
+var {:extern} _v2.Mem_T.CHAR: [int]int;
+
+var {:extern} _v2.Mem_T.INT4: [int]int;
+
+var {:extern} _v2.Mem_T.PCHAR: [int]int;
+
+var {:extern} _v2.Mem_T.PUCHAR: [int]int;
+
+var {:extern} _v2.Mem_T.PVOID: [int]int;
+
+var {:extern} _v2.Mem_T.Pieee80211_scan_entry: [int]int;
+
+var {:extern} _v2.Mem_T.UCHAR: [int]int;
+
+var {:extern} _v2.Mem_T.VOID: [int]int;
+
+var {:extern} _v2.Mem_T.ieee80211_scan_entry: [int]int;
+
+var {:extern} _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+
+var {:extern} _v2.detChoiceCnt: int;
+
+var {:extern} _v2.Res_KERNEL_SOURCE: [int]int;
+
+var {:extern} _v2.Res_PROBED: [int]int;
+
+const {:extern} unique _v2.T.se_rsn_ie_ieee80211_scan_entry: name;
+
+const {:extern} unique _v2.T.A1CHAR: name;
+
+const {:extern} unique _v2.T.A5UCHAR: name;
+
+const {:extern} unique _v2.T.A6UCHAR: name;
+
+const {:extern} unique _v2.T.CHAR: name;
+
+const {:extern} unique _v2.T.INT4: name;
+
+const {:extern} unique _v2.T.PA1CHAR: name;
+
+const {:extern} unique _v2.T.PA5UCHAR: name;
+
+const {:extern} unique _v2.T.PA6UCHAR: name;
+
+const {:extern} unique _v2.T.PCHAR: name;
+
+const {:extern} unique _v2.T.PINT4: name;
+
+const {:extern} unique _v2.T.PPCHAR: name;
+
+const {:extern} unique _v2.T.PPUCHAR: name;
+
+const {:extern} unique _v2.T.PPVOID: name;
+
+const {:extern} unique _v2.T.PPieee80211_scan_entry: name;
+
+const {:extern} unique _v2.T.PUCHAR: name;
+
+const {:extern} unique _v2.T.PUINT4: name;
+
+const {:extern} unique _v2.T.PVOID: name;
+
+const {:extern} unique _v2.T.Pieee80211_scan_entry: name;
+
+const {:extern} unique _v2.T.UCHAR: name;
+
+const {:extern} unique _v2.T.UINT4: name;
+
+const {:extern} unique _v2.T.VOID: name;
+
+const {:extern} unique _v2.T.ieee80211_scan_entry: name;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_8: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 13} unique _v2.__ctobpl_const_2: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 15} unique _v2.__ctobpl_const_3: int;
+
+const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 15} unique _v2.__ctobpl_const_4: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_5: int;
+
+const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_6: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_7: int;
+
+const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_9: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 16} unique _v2.__ctobpl_const_10: int;
+
+const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_44: int;
+
+const {:extern} {:model_const "(se.se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 66} unique _v2.__ctobpl_const_50: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 51} unique _v2.__ctobpl_const_34: int;
+
+const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 67} unique _v2.__ctobpl_const_51: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_45: int;
+
+const {:extern} {:model_const "(se.se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 67} unique _v2.__ctobpl_const_52: int;
+
+const {:extern} {:model_const "(se->se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 52} unique _v2.__ctobpl_const_37: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_42: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_39: int;
+
+const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_47: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_40: int;
+
+const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_38: int;
+
+const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 66} unique _v2.__ctobpl_const_49: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 52} unique _v2.__ctobpl_const_35: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_43: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 53} unique _v2.__ctobpl_const_46: int;
+
+const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 65} unique _v2.__ctobpl_const_48: int;
+
+const {:extern} {:model_const "(se->se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 54} unique _v2.__ctobpl_const_41: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 52} unique _v2.__ctobpl_const_36: int;
+
+const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 13} unique _v2.__ctobpl_const_1: int;
+
+const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_31: int;
+
+const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_17: int;
+
+const {:extern} {:model_const "*(p + 1)"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 32} unique _v2.__ctobpl_const_24: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_18: int;
+
+const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 34} unique _v2.__ctobpl_const_26: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 18} unique _v2.__ctobpl_const_14: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_27: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 51} unique _v2.__ctobpl_const_33: int;
+
+const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_28: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_15: int;
+
+const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 17} unique _v2.__ctobpl_const_11: int;
+
+const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_29: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 17} unique _v2.__ctobpl_const_12: int;
+
+const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_32: int;
+
+const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_19: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 30} unique _v2.__ctobpl_const_21: int;
+
+const {:extern} {:model_const "*p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 30} unique _v2.__ctobpl_const_22: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 32} unique _v2.__ctobpl_const_23: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_16: int;
+
+const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 20} unique _v2.__ctobpl_const_20: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 33} unique _v2.__ctobpl_const_25: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 18} unique _v2.__ctobpl_const_13: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceLine 39} unique _v2.__ctobpl_const_30: int;
+
+function {:extern} _v2.OneByteToInt(arg_0: byte) : int;
+
+function {:extern} _v2.TwoBytesToInt(arg_0: byte, arg_1: byte) : int;
+
+function {:extern} _v2.FourBytesToInt(arg_0: byte, arg_1: byte, arg_2: byte, arg_3: byte) : int;
+
+function {:extern} _v2.Field(arg_0: int) : name;
+
+function {:extern} _v2.Base(arg_0: int) : int;
+
+function {:extern} _v2.Match(a: int, t: name) : bool;
+
+function {:extern} _v2.MatchBase(b: int, a: int, t: name) : bool;
+
+function {:extern} _v2.HasType(v: int, t: name) : bool;
+
+function {:extern} _v2.T.Ptr(t: name) : name;
+
+function {:extern} _v2.se_rsn_ie_ieee80211_scan_entry(arg_0: int) : int;
+
+function {:extern} _v2.se_rsn_ie_ieee80211_scan_entryInv(arg_0: int) : int;
+
+function {:extern} _v2._S_se_rsn_ie_ieee80211_scan_entry(arg_0: [int]bool) : [int]bool;
+
+function {:extern} _v2._S_se_rsn_ie_ieee80211_scan_entryInv(arg_0: [int]bool) : [int]bool;
+
+function {:extern} _v2.INT_AND(a: int, b: int) : int;
+
+function {:extern} _v2.INT_OR(a: int, b: int) : int;
+
+function {:extern} _v2.INT_XOR(a: int, b: int) : int;
+
+function {:extern} _v2.INT_NOT(a: int) : int;
+
+function {:extern} _v2.POW2(a: int) : bool;
+
+function {:extern} _v2.INT_MINUS_LEFT_PTR(a: int, a_size: int, b: int) : int;
+
+function {:extern} _v2.INT_PLUS(a: int, a_size: int, b: int) : int;
+
+function {:extern} _v2.INT_MULT(a: int, b: int) : int;
+
+function {:extern} _v2.INT_DIV(a: int, b: int) : int;
+
+function {:extern} _v2.INT_BINARY_BOTH_INT(a: int, b: int) : int;
+
+function {:extern} _v2.BV32_EQ(x: bv32, y: bv32) : bool;
+
+function {:extern} _v2.BV32_NEQ(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvadd"} _v2.BV32_ADD(x: bv32, y: bv32) : bv32;
+
+function {:extern} {:bvbuiltin "bvsub"} _v2.BV32_SUB(x: bv32, y: bv32) : bv32;
+
+function {:extern} {:bvbuiltin "bvmul"} _v2.BV32_MULT(x: bv32, y: bv32) : bv32;
+
+function {:extern} {:bvbuiltin "bvudiv"} _v2.BV32_DIV(x: bv32, y: bv32) : bv32;
+
+function {:extern} {:bvbuiltin "bvult"} _v2.BV32_ULT(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvslt"} _v2.BV32_LT(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvule"} _v2.BV32_ULEQ(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvsle"} _v2.BV32_LEQ(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvugt"} _v2.BV32_UGT(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvsgt"} _v2.BV32_GT(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvuge"} _v2.BV32_UGEQ(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvsge"} _v2.BV32_GEQ(x: bv32, y: bv32) : bool;
+
+function {:extern} {:bvbuiltin "bvand"} _v2.BV32_AND(a: bv32, b: bv32) : bv32;
+
+function {:extern} {:bvbuiltin "bvor"} _v2.BV32_OR(a: bv32, b: bv32) : bv32;
+
+function {:extern} {:bvbuiltin "bvxor"} _v2.BV32_XOR(a: bv32, b: bv32) : bv32;
+
+function {:extern} {:bvbuiltin "bvnot"} _v2.BV32_NOT(a: bv32) : bv32;
+
+function {:extern} _v2.BV32_MINUS_BOTH_PTR_OR_BOTH_INT(a: bv32, b: bv32, size: bv32) : bv32;
+
+function {:extern} _v2.BV32_MINUS_LEFT_PTR(a: bv32, a_size: bv32, b: bv32) : bv32;
+
+function {:extern} _v2.BV32_PLUS(a: bv32, a_size: bv32, b: bv32) : bv32;
+
+function {:extern} _v2.BV32_BINARY_BOTH_INT(a: bv32, b: bv32) : bv32;
+
+function {:extern} _v2.bv32ToInt(arg_0: bv32) : int;
+
+function {:extern} _v2.intToBv32(arg_0: int) : bv32;
+
+function {:extern} _v2.choose(a: bool, b: int, c: int) : int;
+
+function {:extern} _v2.LIFT(a: bool) : int;
+
+function {:extern} _v2.PTR_NOT(a: int) : int;
+
+function {:extern} _v2.NULL_CHECK(a: int) : int;
+
+function {:extern} _v2.NewAlloc(x: int, y: int) : int;
+
+function {:extern} _v2.DetChoiceFunc(a: int) : int;
+
+function {:extern} _v2.Res_VALID_REGION(arg_0: int) : int;
+
+function {:extern} _v2.Equal(arg_0: [int]bool, arg_1: [int]bool) : bool;
+
+function {:extern} _v2.Subset(arg_0: [int]bool, arg_1: [int]bool) : bool;
+
+function {:extern} _v2.Disjoint(arg_0: [int]bool, arg_1: [int]bool) : bool;
+
+function {:extern} _v2.Empty() : [int]bool;
+
+function {:extern} _v2.SetTrue() : [int]bool;
+
+function {:extern} _v2.Singleton(arg_0: int) : [int]bool;
+
+function {:extern} _v2.Reachable(arg_0: [int,int]bool, arg_1: int) : [int]bool;
+
+function {:extern} _v2.Union(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
+
+function {:extern} _v2.Intersection(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
+
+function {:extern} _v2.Difference(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
+
+function {:extern} _v2.Dereference(arg_0: [int]bool, arg_1: [int]int) : [int]bool;
+
+function {:extern} _v2.Inverse(f: [int]int, x: int) : [int]bool;
+
+function {:extern} _v2.AtLeast(arg_0: int, arg_1: int) : [int]bool;
+
+function {:extern} _v2.Rep(arg_0: int, arg_1: int) : int;
+
+function {:extern} _v2.Array(arg_0: int, arg_1: int, arg_2: int) : [int]bool;
+
+function {:extern} _v2.Unified(arg_0: [name][int]int) : [int]int;
+
+function {:extern} _v2.value_is(c: int, e: int) : bool;
+
+
+function {:inline true} _v2.se_rsn_ie_ieee80211_scan_entry(x : int) : int
+{
+_v2.INT_ADD(x, 0)
+}
+
+function {:inline true} _v2.INT_EQ(x : int, y : int): bool
+{
+x == y
+}
+
+function {:inline true} _v2.INT_NEQ(x : int, y: int): bool
+{
+x != y
+}
+
+function {:inline true} _v2.INT_ADD(x : int, y : int): int
+{
+x + y
+}
+
+function {:inline true} _v2.INT_SUB(x : int, y : int): int
+{
+ x - y
+}
+
+function {:inline true} _v2.INT_LT(x : int, y : int): bool
+{
+x < y
+}
+
+function {:inline true} _v2.INT_ULT(x : int, y : int): bool
+{
+x < y
+}
+
+function {:inline true} _v2.INT_LEQ(x : int, y : int): bool
+{
+x <= y
+}
+
+function {:inline true} _v2.INT_ULEQ(x : int, y : int): bool
+{
+x <= y
+}
+
+function {:inline true} _v2.INT_GT(x : int, y : int): bool
+{
+x > y
+}
+
+function {:inline true} _v2.INT_UGT(x : int, y : int): bool
+{
+x > y
+}
+
+function {:inline true} _v2.INT_GEQ(x : int, y : int): bool
+{
+x >= y
+}
+
+function {:inline true} _v2.INT_UGEQ(x : int, y : int): bool
+{
+x >= y
+}
+
+
+
+procedure _v2.havoc_assert(i: int);
+ /* free */ requires i != 0;
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.havoc_assume(i: int);
+ /* free */ ensures i != 0;
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.__HAVOC_free(a: int);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.__HAVOC_malloc(obj_size: int) returns (new: int);
+ /* free */ requires _v2.INT_GEQ(obj_size, 0);
+ modifies _v2.alloc;
+ /* free */ ensures new == old(_v2.alloc);
+ /* free */ ensures _v2.INT_GT(_v2.alloc, _v2.INT_ADD(new, obj_size));
+ /* free */ ensures _v2.Base(new) == new;
+ /* free */ ensures _v2.INT_GEQ(new, 0);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.__HAVOC_det_malloc(obj_size: int) returns (new: int);
+ /* free */ requires _v2.INT_GEQ(obj_size, 0);
+ modifies _v2.alloc;
+ /* free */ ensures new == old(_v2.alloc);
+ /* free */ ensures _v2.INT_GT(_v2.alloc, _v2.INT_ADD(new, obj_size));
+ /* free */ ensures _v2.Base(new) == new;
+ /* free */ ensures _v2.alloc == _v2.NewAlloc(old(_v2.alloc), obj_size);
+ /* free */ ensures _v2.INT_GEQ(new, 0);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+
+procedure _v2.nondet_choice() returns (x: int);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.det_choice() returns (x: int);
+ modifies _v2.detChoiceCnt;
+ /* free */ ensures _v2.detChoiceCnt == _v2.INT_ADD(old(_v2.detChoiceCnt), 1);
+ /* free */ ensures x == _v2.DetChoiceFunc(old(_v2.detChoiceCnt));
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2._strdup(str: int) returns (new: int);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2._xstrcasecmp(a0: int, a1: int) returns (ret: int);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2._xstrcmp(a0: int, a1: int) returns (ret: int);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.memcpy(a0: int, a1: int, a2: int) returns (ret: int);
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.encode_ie(buf_.1: int,
+ bufsize_.1: int,
+ ie_.1: int,
+ ielen_.1: int,
+ leader_.1: int,
+ leader_len_.1: int)
+ returns (result.encode_ie$1: int);
+ modifies _v2.OK, _v2.Mem_T.UCHAR;
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int);
+ modifies _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.main() returns (result.main$1: int);
+ modifies _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+procedure _v2.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
+ returns (out_bufsize: int, out_i: int, out_p: int, out_tempBoogie0: int);
+ modifies _v2.Mem_T.UCHAR, _v2.OK;
+ /* free */ ensures _v2.OK ==> old(_v2.OK);
+
+
+
+implementation _v2.encode_ie(buf_.1: int,
+ bufsize_.1: int,
+ ie_.1: int,
+ ielen_.1: int,
+ leader_.1: int,
+ leader_len_.1: int)
+ returns (result.encode_ie$1: int)
+{
+ var {:extern} havoc_stringTemp: int;
+ var {:extern} condVal: int;
+ var {:extern} buf: int;
+ var {:extern} bufsize: int;
+ var {:extern} i: int;
+ var {:extern} ie: int;
+ var {:extern} ielen: int;
+ var {:extern} leader: int;
+ var {:extern} leader_len: int;
+ var {:extern} p: int;
+ var {:extern} result.memcpy$2: int;
+ var {:extern} $result.question.3.$$static$: int;
+ var {:extern} tempBoogie0: int;
+ var {:extern} tempBoogie1: int;
+ var {:extern} tempBoogie2: int;
+ var {:extern} tempBoogie3: int;
+ var {:extern} tempBoogie4: int;
+ var {:extern} tempBoogie5: int;
+ var {:extern} tempBoogie6: int;
+ var {:extern} tempBoogie7: int;
+ var {:extern} tempBoogie8: int;
+ var {:extern} tempBoogie9: int;
+ var {:extern} tempBoogie10: int;
+ var {:extern} tempBoogie11: int;
+ var {:extern} tempBoogie12: int;
+ var {:extern} tempBoogie13: int;
+ var {:extern} tempBoogie14: int;
+ var {:extern} tempBoogie15: int;
+ var {:extern} tempBoogie16: int;
+ var {:extern} tempBoogie17: int;
+ var {:extern} tempBoogie18: int;
+ var {:extern} tempBoogie19: int;
+ var {:extern} __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume _v2.INT_LT(buf_.1, _v2.alloc);
+ assume _v2.INT_LT(ie_.1, _v2.alloc);
+ assume _v2.INT_LT(leader_.1, _v2.alloc);
+ buf := 0;
+ assume _v2.INT_GEQ(buf_.1, 0);
+ bufsize := 0;
+ i := 0;
+ ie := 0;
+ assume _v2.INT_GEQ(ie_.1, 0);
+ ielen := 0;
+ leader := 0;
+ assume _v2.INT_GEQ(leader_.1, 0);
+ leader_len := 0;
+ p := 0;
+ result.encode_ie$1 := 0;
+ result.memcpy$2 := 0;
+ $result.question.3.$$static$ := 0;
+ buf := buf_.1;
+ bufsize := bufsize_.1;
+ ie := ie_.1;
+ ielen := ielen_.1;
+ leader := leader_.1;
+ leader_len := leader_len_.1;
+ goto label_3#2;
+
+ label_3#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 9} true;
+ goto label_4#2;
+
+ label_4#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 10} true;
+ goto label_5#2;
+
+ label_5#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 13} true;
+ goto label_5_true#2, label_5_false#2;
+
+ label_5_false#2:
+ assume !_v2.INT_LT(bufsize, leader_len);
+ assume _v2.value_is(_v2.__ctobpl_const_1, bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_2, leader_len);
+ goto label_6#2;
+
+ label_6#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 15} true;
+ p := buf;
+ assume _v2.value_is(_v2.__ctobpl_const_3, p);
+ assume _v2.value_is(_v2.__ctobpl_const_4, buf);
+ goto label_8#2;
+
+ label_8#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 16} true;
+ call result.memcpy$2 := _v2.memcpy(p, leader, leader_len);
+ assume _v2.value_is(_v2.__ctobpl_const_5, p);
+ assume _v2.value_is(_v2.__ctobpl_const_6, leader);
+ assume _v2.value_is(_v2.__ctobpl_const_7, leader_len);
+ assume _v2.value_is(_v2.__ctobpl_const_8, p);
+ assume _v2.value_is(_v2.__ctobpl_const_9, leader);
+ assume _v2.value_is(_v2.__ctobpl_const_10, leader_len);
+ goto label_11#2;
+
+ label_11#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 17} true;
+ havoc tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(bufsize, leader_len, 1, tempBoogie0);
+ bufsize := tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_11, bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_12, leader_len);
+ goto label_12#2;
+
+ label_12#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 18} true;
+ tempBoogie0 := _v2.INT_PLUS(p, 1, leader_len);
+ p := tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_13, p);
+ assume _v2.value_is(_v2.__ctobpl_const_14, leader_len);
+ goto label_13#2;
+
+ label_13#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ i := 0;
+ assume _v2.value_is(_v2.__ctobpl_const_15, i);
+ goto label_14#2;
+
+ label_14#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ goto label_14_head#2;
+
+ label_14_head#2:
+ call bufsize, i, p, tempBoogie0 := _v2.encode_ie_loop_label_14_head(bufsize, i, ielen, p, tempBoogie0);
+ goto label_14_head_last#2;
+
+ label_14_head_last#2:
+ goto label_14_true#2, label_14_false#2;
+
+ label_14_false#2:
+ assume !_v2.INT_LT(i, ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, ielen);
+ goto label_15#2;
+
+ label_14_true#2:
+ assume _v2.INT_LT(i, ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, ielen);
+ goto label_16#2;
+
+ label_16#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ goto label_16_true#2, label_16_false#2;
+
+ label_16_false#2:
+ assume !_v2.INT_LT(2, bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, bufsize);
+ goto label_15#2;
+
+ label_15#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ goto label_15_true#2, label_15_false#2;
+
+ label_15_false#2:
+ assume !_v2.INT_EQ(i, ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_18, i);
+ assume _v2.value_is(_v2.__ctobpl_const_19, ielen);
+ goto label_22#2;
+
+ label_22#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ $result.question.3.$$static$ := 0;
+ assume _v2.value_is(_v2.__ctobpl_const_28, $result.question.3.$$static$);
+ goto label_24#2;
+
+ label_15_true#2:
+ assume _v2.INT_EQ(i, ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_18, i);
+ assume _v2.value_is(_v2.__ctobpl_const_19, ielen);
+ goto label_23#2;
+
+ label_23#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ havoc $result.question.3.$$static$;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(p, buf, 1, $result.question.3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_29, $result.question.3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_30, p);
+ assume _v2.value_is(_v2.__ctobpl_const_31, buf);
+ goto label_24#2;
+
+ label_24#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ result.encode_ie$1 := $result.question.3.$$static$;
+ assume _v2.value_is(_v2.__ctobpl_const_32, $result.question.3.$$static$);
+ goto label_1#2;
+
+ label_16_true#2:
+ assume _v2.INT_LT(2, bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, bufsize);
+ goto label_17#2;
+
+ label_17#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(p, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(p) == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[p := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_21, p);
+ assume _v2.value_is(_v2.__ctobpl_const_22, _v2.Mem_T.UCHAR[p]);
+ goto label_18#2;
+
+ label_18#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(p, 1, 1), 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(p, 1, 1)) == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1) := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_23, p);
+ assume _v2.value_is(_v2.__ctobpl_const_24, _v2.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1)]);
+ goto label_19#2;
+
+ label_19#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
+ tempBoogie0 := _v2.INT_PLUS(p, 1, 2);
+ p := tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_25, p);
+ goto label_20#2;
+
+ label_20#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
+ havoc tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(bufsize, 2, 1, tempBoogie0);
+ bufsize := tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_26, bufsize);
+ goto label_21#2;
+
+ label_21#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v2.__ctobpl_const_27, i);
+ i := _v2.INT_PLUS(i, 1, 1);
+ goto label_21_dummy#2;
+
+ label_21_dummy#2:
+ assume false;
+ return;
+
+ label_5_true#2:
+ assume _v2.INT_LT(bufsize, leader_len);
+ assume _v2.value_is(_v2.__ctobpl_const_1, bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_2, leader_len);
+ goto label_7#2;
+
+ label_7#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 14} true;
+ result.encode_ie$1 := 0;
+ goto label_1#2;
+
+ label_1#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 40} true;
+ return;
+}
+
+
+
+implementation _v2.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int)
+{
+ var {:extern} havoc_stringTemp: int;
+ var {:extern} condVal: int;
+ var {:extern} buf: int;
+ var {:extern} $encode_ie.arg.4$3.$$static$: int;
+ var {:extern} result.encode_ie$2: int;
+ var {:extern} rsn_leader: int;
+ var {:extern} se: int;
+ var {:extern} tempBoogie0: int;
+ var {:extern} tempBoogie1: int;
+ var {:extern} tempBoogie2: int;
+ var {:extern} tempBoogie3: int;
+ var {:extern} tempBoogie4: int;
+ var {:extern} tempBoogie5: int;
+ var {:extern} tempBoogie6: int;
+ var {:extern} tempBoogie7: int;
+ var {:extern} tempBoogie8: int;
+ var {:extern} tempBoogie9: int;
+ var {:extern} tempBoogie10: int;
+ var {:extern} tempBoogie11: int;
+ var {:extern} tempBoogie12: int;
+ var {:extern} tempBoogie13: int;
+ var {:extern} tempBoogie14: int;
+ var {:extern} tempBoogie15: int;
+ var {:extern} tempBoogie16: int;
+ var {:extern} tempBoogie17: int;
+ var {:extern} tempBoogie18: int;
+ var {:extern} tempBoogie19: int;
+ var {:extern} __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume _v2.INT_LT(se_.1, _v2.alloc);
+ call buf := _v2.__HAVOC_det_malloc(6);
+ $encode_ie.arg.4$3.$$static$ := 0;
+ result.encode_ie$2 := 0;
+ result.giwscan_cb$1 := 0;
+ call rsn_leader := _v2.__HAVOC_det_malloc(1);
+ se := 0;
+ assume _v2.INT_GEQ(se_.1, 0);
+ se := se_.1;
+ goto label_3#2;
+
+ label_3#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 46} true;
+ goto label_4#2;
+
+ label_4#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 47} true;
+ goto label_5#2;
+
+ label_5#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 51} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ goto label_5_true#2, label_5_false#2;
+
+ label_5_false#2:
+ assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
+ == 0;
+ assume _v2.value_is(_v2.__ctobpl_const_33, se);
+ assume _v2.value_is(_v2.__ctobpl_const_34,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ goto label_6#2;
+
+ label_5_true#2:
+ assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
+ != 0;
+ assume _v2.value_is(_v2.__ctobpl_const_33, se);
+ assume _v2.value_is(_v2.__ctobpl_const_34,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ goto label_7#2;
+
+ label_7#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 52} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ goto label_7_true#2, label_7_false#2;
+
+ label_7_false#2:
+ assume !_v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v2.__ctobpl_const_35, se);
+ assume _v2.value_is(_v2.__ctobpl_const_36,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_37,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)]);
+ goto label_6#2;
+
+ label_7_true#2:
+ assume _v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v2.__ctobpl_const_35, se);
+ assume _v2.value_is(_v2.__ctobpl_const_36,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_37,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)]);
+ goto label_8#2;
+
+ label_8#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 54} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ $encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1)],
+ 1,
+ 2);
+ assume _v2.value_is(_v2.__ctobpl_const_38, $encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_39, se);
+ assume _v2.value_is(_v2.__ctobpl_const_40,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_41,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1)]);
+ goto label_9#2;
+
+ label_9#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 53} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(se, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ call result.encode_ie$2 := _v2.encode_ie(buf, 6, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)], $encode_ie.arg.4$3.$$static$, rsn_leader, 1);
+ assume _v2.value_is(_v2.__ctobpl_const_42, se);
+ assume _v2.value_is(_v2.__ctobpl_const_43,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_44, $encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_45, se);
+ assume _v2.value_is(_v2.__ctobpl_const_46,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_47, $encode_ie.arg.4$3.$$static$);
+ goto label_6#2;
+
+ label_6#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 58} true;
+ result.giwscan_cb$1 := 0;
+ goto label_1#2;
+
+ label_1#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 59} true;
+ call _v2.__HAVOC_free(buf);
+ call _v2.__HAVOC_free(rsn_leader);
+ return;
+}
+
+
+
+implementation _v2.main() returns (result.main$1: int)
+{
+ var {:extern} havoc_stringTemp: int;
+ var {:extern} condVal: int;
+ var {:extern} ie: int;
+ var {:extern} result.giwscan_cb$2: int;
+ var {:extern} se: int;
+ var {:extern} tempBoogie0: int;
+ var {:extern} tempBoogie1: int;
+ var {:extern} tempBoogie2: int;
+ var {:extern} tempBoogie3: int;
+ var {:extern} tempBoogie4: int;
+ var {:extern} tempBoogie5: int;
+ var {:extern} tempBoogie6: int;
+ var {:extern} tempBoogie7: int;
+ var {:extern} tempBoogie8: int;
+ var {:extern} tempBoogie9: int;
+ var {:extern} tempBoogie10: int;
+ var {:extern} tempBoogie11: int;
+ var {:extern} tempBoogie12: int;
+ var {:extern} tempBoogie13: int;
+ var {:extern} tempBoogie14: int;
+ var {:extern} tempBoogie15: int;
+ var {:extern} tempBoogie16: int;
+ var {:extern} tempBoogie17: int;
+ var {:extern} tempBoogie18: int;
+ var {:extern} tempBoogie19: int;
+ var {:extern} __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ call ie := _v2.__HAVOC_det_malloc(5);
+ result.giwscan_cb$2 := 0;
+ result.main$1 := 0;
+ call se := _v2.__HAVOC_det_malloc(4);
+ goto label_3#2;
+
+ label_3#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 63} true;
+ goto label_4#2;
+
+ label_4#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 64} true;
+ goto label_5#2;
+
+ label_5#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 65} true;
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se) := ie];
+ assume _v2.value_is(_v2.__ctobpl_const_48,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ goto label_6#2;
+
+ label_6#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 66} true;
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0) := 200];
+ assume _v2.value_is(_v2.__ctobpl_const_49,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_50,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)]);
+ goto label_7#2;
+
+ label_7#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 67} true;
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1) := 3];
+ assume _v2.value_is(_v2.__ctobpl_const_51,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_52,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1)]);
+ goto label_8#2;
+
+ label_8#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 69} true;
+ assume _v2.INT_GT(se, 0);
+ assume _v2.INT_GT(se, 0);
+ call result.giwscan_cb$2 := _v2.giwscan_cb(se);
+ goto label_11#2;
+
+ label_11#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 71} true;
+ result.main$1 := 0;
+ goto label_1#2;
+
+ label_1#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 72} true;
+ call _v2.__HAVOC_free(ie);
+ call _v2.__HAVOC_free(se);
+ return;
+}
+
+
+
+implementation _v2.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
+ returns (out_bufsize: int, out_i: int, out_p: int, out_tempBoogie0: int)
+{
+
+ entry#2:
+ out_bufsize, out_i, out_p, out_tempBoogie0 := in_bufsize, in_i, in_p, in_tempBoogie0;
+ goto label_14_head#2;
+
+ label_14_head#2:
+ goto label_14_true#2, label_14_false#2;
+
+ label_14_false#2:
+ assume !_v2.INT_LT(out_i, in_ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, out_i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, in_ielen);
+ out_bufsize, out_i, out_p, out_tempBoogie0 := in_bufsize, in_i, in_p, in_tempBoogie0;
+ _v2.Mem_T.UCHAR := old(_v2.Mem_T.UCHAR);
+ return;
+
+ label_14_true#2:
+ assume _v2.INT_LT(out_i, in_ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, out_i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, in_ielen);
+ goto label_16#2;
+
+ label_16#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ goto label_16_true#2, label_16_false#2;
+
+ label_16_false#2:
+ assume !_v2.INT_LT(2, out_bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, out_bufsize);
+ out_bufsize, out_i, out_p, out_tempBoogie0 := in_bufsize, in_i, in_p, in_tempBoogie0;
+ _v2.Mem_T.UCHAR := old(_v2.Mem_T.UCHAR);
+ return;
+
+ label_16_true#2:
+ assume _v2.INT_LT(2, out_bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, out_bufsize);
+ goto label_17#2;
+
+ label_17#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(out_p, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(out_p) == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[out_p := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_21, out_p);
+ assume _v2.value_is(_v2.__ctobpl_const_22, _v2.Mem_T.UCHAR[out_p]);
+ goto label_18#2;
+
+ label_18#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(out_p, 1, 1), 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(out_p, 1, 1)) == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1) := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_23, out_p);
+ assume _v2.value_is(_v2.__ctobpl_const_24, _v2.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1)]);
+ goto label_19#2;
+
+ label_19#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
+ out_tempBoogie0 := _v2.INT_PLUS(out_p, 1, 2);
+ out_p := out_tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_25, out_p);
+ goto label_20#2;
+
+ label_20#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
+ havoc out_tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(out_bufsize, 2, 1, out_tempBoogie0);
+ out_bufsize := out_tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_26, out_bufsize);
+ goto label_21#2;
+
+ label_21#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v2.__ctobpl_const_27, out_i);
+ out_i := _v2.INT_PLUS(out_i, 1, 1);
+ goto label_21_dummy#2;
+
+ label_21_dummy#2:
+ call out_bufsize, out_i, out_p, out_tempBoogie0 := _v2.encode_ie_loop_label_14_head(out_bufsize, out_i, in_ielen, out_p, out_tempBoogie0);
+ return;
+}
+
+
+
+function _v1.ite(b: bool, x: int, y: int) : int;
+
+
+var _v1.OK: bool;
+
+var {:extern} _v1.Mem: [name][int]int;
+
+var {:extern} _v1.alloc: int;
+
+var {:extern} _v1.Mem_T.A1CHAR: [int]int;
+
+var {:extern} _v1.Mem_T.A5UCHAR: [int]int;
+
+var {:extern} _v1.Mem_T.A6UCHAR: [int]int;
+
+var {:extern} _v1.Mem_T.CHAR: [int]int;
+
+var {:extern} _v1.Mem_T.INT4: [int]int;
+
+var {:extern} _v1.Mem_T.PCHAR: [int]int;
+
+var {:extern} _v1.Mem_T.PUCHAR: [int]int;
+
+var {:extern} _v1.Mem_T.PVOID: [int]int;
+
+var {:extern} _v1.Mem_T.Pieee80211_scan_entry: [int]int;
+
+var {:extern} _v1.Mem_T.UCHAR: [int]int;
+
+var {:extern} _v1.Mem_T.VOID: [int]int;
+
+var {:extern} _v1.Mem_T.ieee80211_scan_entry: [int]int;
+
+var {:extern} _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+
+var {:extern} _v1.detChoiceCnt: int;
+
+var {:extern} _v1.Res_KERNEL_SOURCE: [int]int;
+
+var {:extern} _v1.Res_PROBED: [int]int;
+
+const {:extern} unique _v1.T.se_rsn_ie_ieee80211_scan_entry: name;
+
+const {:extern} unique _v1.T.A1CHAR: name;
+
+const {:extern} unique _v1.T.A5UCHAR: name;
+
+const {:extern} unique _v1.T.A6UCHAR: name;
+
+const {:extern} unique _v1.T.CHAR: name;
+
+const {:extern} unique _v1.T.INT4: name;
+
+const {:extern} unique _v1.T.PA1CHAR: name;
+
+const {:extern} unique _v1.T.PA5UCHAR: name;
+
+const {:extern} unique _v1.T.PA6UCHAR: name;
+
+const {:extern} unique _v1.T.PCHAR: name;
+
+const {:extern} unique _v1.T.PINT4: name;
+
+const {:extern} unique _v1.T.PPCHAR: name;
+
+const {:extern} unique _v1.T.PPUCHAR: name;
+
+const {:extern} unique _v1.T.PPVOID: name;
+
+const {:extern} unique _v1.T.PPieee80211_scan_entry: name;
+
+const {:extern} unique _v1.T.PUCHAR: name;
+
+const {:extern} unique _v1.T.PUINT4: name;
+
+const {:extern} unique _v1.T.PVOID: name;
+
+const {:extern} unique _v1.T.Pieee80211_scan_entry: name;
+
+const {:extern} unique _v1.T.UCHAR: name;
+
+const {:extern} unique _v1.T.UINT4: name;
+
+const {:extern} unique _v1.T.VOID: name;
+
+const {:extern} unique _v1.T.ieee80211_scan_entry: name;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_5: int;
+
+const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_6: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_7: int;
+
+const {:extern} {:model_const "leader"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_9: int;
+
+const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 13} unique _v1.__ctobpl_const_1: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_8: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 16} unique _v1.__ctobpl_const_10: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 13} unique _v1.__ctobpl_const_2: int;
+
+const {:extern} {:model_const "*(p + 1)"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 32} unique _v1.__ctobpl_const_24: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 33} unique _v1.__ctobpl_const_25: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_26: int;
+
+const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_28: int;
+
+const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 17} unique _v1.__ctobpl_const_11: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 32} unique _v1.__ctobpl_const_23: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 18} unique _v1.__ctobpl_const_13: int;
+
+const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_30: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 50} unique _v1.__ctobpl_const_32: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 17} unique _v1.__ctobpl_const_12: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 50} unique _v1.__ctobpl_const_33: int;
+
+const {:extern} {:model_const "bufsize"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_20: int;
+
+const {:extern} {:model_const "*p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 30} unique _v1.__ctobpl_const_22: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_18: int;
+
+const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_31: int;
+
+const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_19: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_16: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 30} unique _v1.__ctobpl_const_21: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_29: int;
+
+const {:extern} {:model_const "result.question.3"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 38} unique _v1.__ctobpl_const_27: int;
+
+const {:extern} {:model_const "ielen"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_17: int;
+
+const {:extern} {:model_const "leader_len"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 18} unique _v1.__ctobpl_const_14: int;
+
+const {:extern} {:model_const "i"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 20} unique _v1.__ctobpl_const_15: int;
+
+const {:extern} {:model_const "p"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 15} unique _v1.__ctobpl_const_3: int;
+
+const {:extern} {:model_const "buf"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 15} unique _v1.__ctobpl_const_4: int;
+
+const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 66} unique _v1.__ctobpl_const_50: int;
+
+const {:extern} {:model_const "(se.se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 65} unique _v1.__ctobpl_const_49: int;
+
+const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 65} unique _v1.__ctobpl_const_48: int;
+
+const {:extern} {:model_const "(se.se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 66} unique _v1.__ctobpl_const_51: int;
+
+const {:extern} {:model_const "se.se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 64} unique _v1.__ctobpl_const_47: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_41: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_42: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_45: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 51} unique _v1.__ctobpl_const_35: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_44: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 51} unique _v1.__ctobpl_const_34: int;
+
+const {:extern} {:model_const "(se->se_rsn_ie)[1]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_40: int;
+
+const {:extern} {:model_const "se"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_38: int;
+
+const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_43: int;
+
+const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 52} unique _v1.__ctobpl_const_46: int;
+
+const {:extern} {:model_const "(se->se_rsn_ie)[0]"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 51} unique _v1.__ctobpl_const_36: int;
+
+const {:extern} {:model_const "encode_ie.arg.4"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_37: int;
+
+const {:extern} {:model_const "se->se_rsn_ie"} {:sourceFile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceLine 53} unique _v1.__ctobpl_const_39: int;
+
+function {:inline true} _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(a : int, b : int, size : int, result : int) : bool
+{
+ (size * result <= a - b) && (a - b < size * (result + 1))
+}
+
+
+
+procedure _v1.havoc_assert(i: int);
+ /* free */ requires i != 0;
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.havoc_assume(i: int);
+ /* free */ ensures i != 0;
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.__HAVOC_free(a: int);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.__HAVOC_malloc(obj_size: int) returns (new: int);
+ /* free */ requires _v2.INT_GEQ(obj_size, 0);
+ modifies _v1.alloc;
+ /* free */ ensures new == old(_v1.alloc);
+ /* free */ ensures _v2.INT_GT(_v1.alloc, _v2.INT_ADD(new, obj_size));
+ /* free */ ensures _v2.Base(new) == new;
+ /* free */ ensures _v2.INT_GEQ(new, 0);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.__HAVOC_det_malloc(obj_size: int) returns (new: int);
+ /* free */ requires _v2.INT_GEQ(obj_size, 0);
+ modifies _v1.alloc;
+ /* free */ ensures new == old(_v1.alloc);
+ /* free */ ensures _v2.INT_GT(_v1.alloc, _v2.INT_ADD(new, obj_size));
+ /* free */ ensures _v2.Base(new) == new;
+ /* free */ ensures _v1.alloc == _v2.NewAlloc(old(_v1.alloc), obj_size);
+ /* free */ ensures _v2.INT_GEQ(new, 0);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+
+procedure _v1.nondet_choice() returns (x: int);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.det_choice() returns (x: int);
+ modifies _v1.detChoiceCnt;
+ /* free */ ensures _v1.detChoiceCnt == _v2.INT_ADD(old(_v1.detChoiceCnt), 1);
+ /* free */ ensures x == _v2.DetChoiceFunc(old(_v1.detChoiceCnt));
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1._strdup(str: int) returns (new: int);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1._xstrcasecmp(a0: int, a1: int) returns (ret: int);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1._xstrcmp(a0: int, a1: int) returns (ret: int);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.memcpy(a0: int, a1: int, a2: int) returns (ret: int);
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.encode_ie(buf_.1: int,
+ bufsize_.1: int,
+ ie_.1: int,
+ ielen_.1: int,
+ leader_.1: int,
+ leader_len_.1: int)
+ returns (result.encode_ie$1: int);
+ modifies _v1.OK, _v1.Mem_T.UCHAR;
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int);
+ modifies _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.main() returns (result.main$1: int);
+ modifies _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+procedure _v1.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
+ returns (out_i: int, out_p: int, out_tempBoogie0: int);
+ modifies _v1.Mem_T.UCHAR, _v1.OK;
+ /* free */ ensures _v1.OK ==> old(_v1.OK);
+
+
+
+implementation _v1.encode_ie(buf_.1: int,
+ bufsize_.1: int,
+ ie_.1: int,
+ ielen_.1: int,
+ leader_.1: int,
+ leader_len_.1: int)
+ returns (result.encode_ie$1: int)
+{
+ var {:extern} havoc_stringTemp: int;
+ var {:extern} condVal: int;
+ var {:extern} buf: int;
+ var {:extern} bufsize: int;
+ var {:extern} i: int;
+ var {:extern} ie: int;
+ var {:extern} ielen: int;
+ var {:extern} leader: int;
+ var {:extern} leader_len: int;
+ var {:extern} p: int;
+ var {:extern} result.memcpy$2: int;
+ var {:extern} $result.question.3.$$static$: int;
+ var {:extern} tempBoogie0: int;
+ var {:extern} tempBoogie1: int;
+ var {:extern} tempBoogie2: int;
+ var {:extern} tempBoogie3: int;
+ var {:extern} tempBoogie4: int;
+ var {:extern} tempBoogie5: int;
+ var {:extern} tempBoogie6: int;
+ var {:extern} tempBoogie7: int;
+ var {:extern} tempBoogie8: int;
+ var {:extern} tempBoogie9: int;
+ var {:extern} tempBoogie10: int;
+ var {:extern} tempBoogie11: int;
+ var {:extern} tempBoogie12: int;
+ var {:extern} tempBoogie13: int;
+ var {:extern} tempBoogie14: int;
+ var {:extern} tempBoogie15: int;
+ var {:extern} tempBoogie16: int;
+ var {:extern} tempBoogie17: int;
+ var {:extern} tempBoogie18: int;
+ var {:extern} tempBoogie19: int;
+ var {:extern} __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume _v2.INT_LT(buf_.1, _v1.alloc);
+ assume _v2.INT_LT(ie_.1, _v1.alloc);
+ assume _v2.INT_LT(leader_.1, _v1.alloc);
+ buf := 0;
+ assume _v2.INT_GEQ(buf_.1, 0);
+ bufsize := 0;
+ i := 0;
+ ie := 0;
+ assume _v2.INT_GEQ(ie_.1, 0);
+ ielen := 0;
+ leader := 0;
+ assume _v2.INT_GEQ(leader_.1, 0);
+ leader_len := 0;
+ p := 0;
+ result.encode_ie$1 := 0;
+ result.memcpy$2 := 0;
+ $result.question.3.$$static$ := 0;
+ buf := buf_.1;
+ bufsize := bufsize_.1;
+ ie := ie_.1;
+ ielen := ielen_.1;
+ leader := leader_.1;
+ leader_len := leader_len_.1;
+ goto label_3#2;
+
+ label_3#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 9} true;
+ goto label_4#2;
+
+ label_4#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 10} true;
+ goto label_5#2;
+
+ label_5#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 13} true;
+ goto label_5_true#2, label_5_false#2;
+
+ label_5_false#2:
+ assume !_v2.INT_LT(bufsize, leader_len);
+ assume _v2.value_is(_v1.__ctobpl_const_1, bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_2, leader_len);
+ goto label_6#2;
+
+ label_6#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 15} true;
+ p := buf;
+ assume _v2.value_is(_v1.__ctobpl_const_3, p);
+ assume _v2.value_is(_v1.__ctobpl_const_4, buf);
+ goto label_8#2;
+
+ label_8#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 16} true;
+ call result.memcpy$2 := _v1.memcpy(p, leader, leader_len);
+ assume _v2.value_is(_v1.__ctobpl_const_5, p);
+ assume _v2.value_is(_v1.__ctobpl_const_6, leader);
+ assume _v2.value_is(_v1.__ctobpl_const_7, leader_len);
+ assume _v2.value_is(_v1.__ctobpl_const_8, p);
+ assume _v2.value_is(_v1.__ctobpl_const_9, leader);
+ assume _v2.value_is(_v1.__ctobpl_const_10, leader_len);
+ goto label_11#2;
+
+ label_11#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 17} true;
+ havoc tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(bufsize, leader_len, 1, tempBoogie0);
+ bufsize := tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_11, bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_12, leader_len);
+ goto label_12#2;
+
+ label_12#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 18} true;
+ tempBoogie0 := _v2.INT_PLUS(p, 1, leader_len);
+ p := tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_13, p);
+ assume _v2.value_is(_v1.__ctobpl_const_14, leader_len);
+ goto label_13#2;
+
+ label_13#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ i := 0;
+ assume _v2.value_is(_v1.__ctobpl_const_15, i);
+ goto label_14#2;
+
+ label_14#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ goto label_14_head#2;
+
+ label_14_head#2:
+ call i, p, tempBoogie0 := _v1.encode_ie_loop_label_14_head(bufsize, i, ielen, p, tempBoogie0);
+ goto label_14_head_last#2;
+
+ label_14_head_last#2:
+ goto label_14_true#2, label_14_false#2;
+
+ label_14_false#2:
+ assume !_v2.INT_LT(i, ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, ielen);
+ goto label_15#2;
+
+ label_14_true#2:
+ assume _v2.INT_LT(i, ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, ielen);
+ goto label_16#2;
+
+ label_16#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ goto label_16_true#2, label_16_false#2;
+
+ label_16_false#2:
+ assume !_v2.INT_LT(2, bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, bufsize);
+ goto label_15#2;
+
+ label_15#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ goto label_15_true#2, label_15_false#2;
+
+ label_15_false#2:
+ assume !_v2.INT_EQ(i, ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_18, i);
+ assume _v2.value_is(_v1.__ctobpl_const_19, ielen);
+ goto label_21#2;
+
+ label_21#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ $result.question.3.$$static$ := 0;
+ assume _v2.value_is(_v1.__ctobpl_const_27, $result.question.3.$$static$);
+ goto label_23#2;
+
+ label_15_true#2:
+ assume _v2.INT_EQ(i, ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_18, i);
+ assume _v2.value_is(_v1.__ctobpl_const_19, ielen);
+ goto label_22#2;
+
+ label_22#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ havoc $result.question.3.$$static$;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(p, buf, 1, $result.question.3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_28, $result.question.3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_29, p);
+ assume _v2.value_is(_v1.__ctobpl_const_30, buf);
+ goto label_23#2;
+
+ label_23#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ result.encode_ie$1 := $result.question.3.$$static$;
+ assume _v2.value_is(_v1.__ctobpl_const_31, $result.question.3.$$static$);
+ goto label_1#2;
+
+ label_16_true#2:
+ assume _v2.INT_LT(2, bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, bufsize);
+ goto label_17#2;
+
+ label_17#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(p, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(p) == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[p := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_21, p);
+ assume _v2.value_is(_v1.__ctobpl_const_22, _v1.Mem_T.UCHAR[p]);
+ goto label_18#2;
+
+ label_18#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(p, 1, 1), 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(p, 1, 1)) == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1) := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_23, p);
+ assume _v2.value_is(_v1.__ctobpl_const_24, _v1.Mem_T.UCHAR[_v2.INT_PLUS(p, 1, 1)]);
+ goto label_19#2;
+
+ label_19#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
+ tempBoogie0 := _v2.INT_PLUS(p, 1, 2);
+ p := tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_25, p);
+ goto label_20#2;
+
+ label_20#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v1.__ctobpl_const_26, i);
+ i := _v2.INT_PLUS(i, 1, 1);
+ goto label_20_dummy#2;
+
+ label_20_dummy#2:
+ assume false;
+ return;
+
+ label_5_true#2:
+ assume _v2.INT_LT(bufsize, leader_len);
+ assume _v2.value_is(_v1.__ctobpl_const_1, bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_2, leader_len);
+ goto label_7#2;
+
+ label_7#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 14} true;
+ result.encode_ie$1 := 0;
+ goto label_1#2;
+
+ label_1#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 39} true;
+ return;
+}
+
+
+
+implementation _v1.giwscan_cb(se_.1: int) returns (result.giwscan_cb$1: int)
+{
+ var {:extern} havoc_stringTemp: int;
+ var {:extern} condVal: int;
+ var {:extern} buf: int;
+ var {:extern} $encode_ie.arg.4$3.$$static$: int;
+ var {:extern} result.encode_ie$2: int;
+ var {:extern} rsn_leader: int;
+ var {:extern} se: int;
+ var {:extern} tempBoogie0: int;
+ var {:extern} tempBoogie1: int;
+ var {:extern} tempBoogie2: int;
+ var {:extern} tempBoogie3: int;
+ var {:extern} tempBoogie4: int;
+ var {:extern} tempBoogie5: int;
+ var {:extern} tempBoogie6: int;
+ var {:extern} tempBoogie7: int;
+ var {:extern} tempBoogie8: int;
+ var {:extern} tempBoogie9: int;
+ var {:extern} tempBoogie10: int;
+ var {:extern} tempBoogie11: int;
+ var {:extern} tempBoogie12: int;
+ var {:extern} tempBoogie13: int;
+ var {:extern} tempBoogie14: int;
+ var {:extern} tempBoogie15: int;
+ var {:extern} tempBoogie16: int;
+ var {:extern} tempBoogie17: int;
+ var {:extern} tempBoogie18: int;
+ var {:extern} tempBoogie19: int;
+ var {:extern} __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume _v2.INT_LT(se_.1, _v1.alloc);
+ call buf := _v1.__HAVOC_det_malloc(6);
+ $encode_ie.arg.4$3.$$static$ := 0;
+ result.encode_ie$2 := 0;
+ result.giwscan_cb$1 := 0;
+ call rsn_leader := _v1.__HAVOC_det_malloc(1);
+ se := 0;
+ assume _v2.INT_GEQ(se_.1, 0);
+ se := se_.1;
+ goto label_3#2;
+
+ label_3#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 45} true;
+ goto label_4#2;
+
+ label_4#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 46} true;
+ goto label_5#2;
+
+ label_5#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 50} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ goto label_5_true#2, label_5_false#2;
+
+ label_5_false#2:
+ assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
+ == 0;
+ assume _v2.value_is(_v1.__ctobpl_const_32, se);
+ assume _v2.value_is(_v1.__ctobpl_const_33,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ goto label_6#2;
+
+ label_5_true#2:
+ assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]
+ != 0;
+ assume _v2.value_is(_v1.__ctobpl_const_32, se);
+ assume _v2.value_is(_v1.__ctobpl_const_33,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ goto label_7#2;
+
+ label_7#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 51} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ goto label_7_true#2, label_7_false#2;
+
+ label_7_false#2:
+ assume !_v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v1.__ctobpl_const_34, se);
+ assume _v2.value_is(_v1.__ctobpl_const_35,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_36,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)]);
+ goto label_6#2;
+
+ label_7_true#2:
+ assume _v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v1.__ctobpl_const_34, se);
+ assume _v2.value_is(_v1.__ctobpl_const_35,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_36,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)]);
+ goto label_8#2;
+
+ label_8#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 53} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ $encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1)],
+ 1,
+ 2);
+ assume _v2.value_is(_v1.__ctobpl_const_37, $encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_38, se);
+ assume _v2.value_is(_v1.__ctobpl_const_39,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_40,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1)]);
+ goto label_9#2;
+
+ label_9#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 52} true;
+ assume _v2.INT_GEQ(se, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(se, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ call result.encode_ie$2 := _v1.encode_ie(buf, 6, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)], $encode_ie.arg.4$3.$$static$, rsn_leader, 1);
+ assume _v2.value_is(_v1.__ctobpl_const_41, se);
+ assume _v2.value_is(_v1.__ctobpl_const_42,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_43, $encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_44, se);
+ assume _v2.value_is(_v1.__ctobpl_const_45,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_46, $encode_ie.arg.4$3.$$static$);
+ goto label_6#2;
+
+ label_6#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 57} true;
+ result.giwscan_cb$1 := 0;
+ goto label_1#2;
+
+ label_1#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 58} true;
+ call _v1.__HAVOC_free(buf);
+ call _v1.__HAVOC_free(rsn_leader);
+ return;
+}
+
+
+
+implementation _v1.main() returns (result.main$1: int)
+{
+ var {:extern} havoc_stringTemp: int;
+ var {:extern} condVal: int;
+ var {:extern} ie: int;
+ var {:extern} result.giwscan_cb$2: int;
+ var {:extern} se: int;
+ var {:extern} tempBoogie0: int;
+ var {:extern} tempBoogie1: int;
+ var {:extern} tempBoogie2: int;
+ var {:extern} tempBoogie3: int;
+ var {:extern} tempBoogie4: int;
+ var {:extern} tempBoogie5: int;
+ var {:extern} tempBoogie6: int;
+ var {:extern} tempBoogie7: int;
+ var {:extern} tempBoogie8: int;
+ var {:extern} tempBoogie9: int;
+ var {:extern} tempBoogie10: int;
+ var {:extern} tempBoogie11: int;
+ var {:extern} tempBoogie12: int;
+ var {:extern} tempBoogie13: int;
+ var {:extern} tempBoogie14: int;
+ var {:extern} tempBoogie15: int;
+ var {:extern} tempBoogie16: int;
+ var {:extern} tempBoogie17: int;
+ var {:extern} tempBoogie18: int;
+ var {:extern} tempBoogie19: int;
+ var {:extern} __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ call ie := _v1.__HAVOC_det_malloc(5);
+ result.giwscan_cb$2 := 0;
+ result.main$1 := 0;
+ call se := _v1.__HAVOC_det_malloc(4);
+ goto label_3#2;
+
+ label_3#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 62} true;
+ goto label_4#2;
+
+ label_4#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 63} true;
+ goto label_5#2;
+
+ label_5#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 64} true;
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se) := ie];
+ assume _v2.value_is(_v1.__ctobpl_const_47,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ goto label_6#2;
+
+ label_6#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 65} true;
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0) := 200];
+ assume _v2.value_is(_v1.__ctobpl_const_48,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_49,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 0)]);
+ goto label_7#2;
+
+ label_7#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 66} true;
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(se)) == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1) := 3];
+ assume _v2.value_is(_v1.__ctobpl_const_50,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_51,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(se)],
+ 1,
+ 1)]);
+ goto label_8#2;
+
+ label_8#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 68} true;
+ assume _v2.INT_GT(se, 0);
+ assume _v2.INT_GT(se, 0);
+ call result.giwscan_cb$2 := _v1.giwscan_cb(se);
+ goto label_11#2;
+
+ label_11#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 70} true;
+ result.main$1 := 0;
+ goto label_1#2;
+
+ label_1#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 71} true;
+ call _v1.__HAVOC_free(ie);
+ call _v1.__HAVOC_free(se);
+ return;
+}
+
+
+
+implementation _v1.encode_ie_loop_label_14_head(in_bufsize: int, in_i: int, in_ielen: int, in_p: int, in_tempBoogie0: int)
+ returns (out_i: int, out_p: int, out_tempBoogie0: int)
+{
+
+ entry#2:
+ out_i, out_p, out_tempBoogie0 := in_i, in_p, in_tempBoogie0;
+ goto label_14_head#2;
+
+ label_14_head#2:
+ goto label_14_true#2, label_14_false#2;
+
+ label_14_false#2:
+ assume !_v2.INT_LT(out_i, in_ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, out_i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, in_ielen);
+ out_i, out_p, out_tempBoogie0 := in_i, in_p, in_tempBoogie0;
+ _v1.Mem_T.UCHAR := old(_v1.Mem_T.UCHAR);
+ return;
+
+ label_14_true#2:
+ assume _v2.INT_LT(out_i, in_ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, out_i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, in_ielen);
+ goto label_16#2;
+
+ label_16#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ goto label_16_true#2, label_16_false#2;
+
+ label_16_false#2:
+ assume !_v2.INT_LT(2, in_bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, in_bufsize);
+ out_i, out_p, out_tempBoogie0 := in_i, in_p, in_tempBoogie0;
+ _v1.Mem_T.UCHAR := old(_v1.Mem_T.UCHAR);
+ return;
+
+ label_16_true#2:
+ assume _v2.INT_LT(2, in_bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, in_bufsize);
+ goto label_17#2;
+
+ label_17#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(out_p, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(out_p) == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[out_p := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_21, out_p);
+ assume _v2.value_is(_v1.__ctobpl_const_22, _v1.Mem_T.UCHAR[out_p]);
+ goto label_18#2;
+
+ label_18#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(out_p, 1, 1), 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(_v2.INT_PLUS(out_p, 1, 1)) == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1) := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_23, out_p);
+ assume _v2.value_is(_v1.__ctobpl_const_24, _v1.Mem_T.UCHAR[_v2.INT_PLUS(out_p, 1, 1)]);
+ goto label_19#2;
+
+ label_19#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
+ out_tempBoogie0 := _v2.INT_PLUS(out_p, 1, 2);
+ out_p := out_tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_25, out_p);
+ goto label_20#2;
+
+ label_20#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v1.__ctobpl_const_26, out_i);
+ out_i := _v2.INT_PLUS(out_i, 1, 1);
+ goto label_20_dummy#2;
+
+ label_20_dummy#2:
+ call out_i, out_p, out_tempBoogie0 := _v1.encode_ie_loop_label_14_head(in_bufsize, out_i, in_ielen, out_p, out_tempBoogie0);
+ return;
+}
+
+
+
+type {:extern} name;
+
+type {:extern} byte;
+
+function {:inline true} MS$_v1.havoc_assert$_v2.havoc_assert(_v1.i: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v2.i: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.havoc_assert___v2.havoc_assert(_v1.i: int, _v2.i: int);
+ requires _v1.i == _v2.i
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.havoc_assert$_v2.havoc_assert(_v1.i,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v2.i,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED));
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.havoc_assume$_v2.havoc_assume(_v1.i: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v2.i: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.havoc_assume___v2.havoc_assume(_v1.i: int, _v2.i: int);
+ requires _v1.i == _v2.i
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.havoc_assume$_v2.havoc_assume(_v1.i,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v2.i,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED));
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.__HAVOC_free$_v2.__HAVOC_free(_v1.a: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v2.a: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_0: bool;
+
+const {:existential true} _houdini_1: bool;
+
+const {:existential true} _houdini_2: bool;
+
+const {:existential true} _houdini_3: bool;
+
+const {:existential true} _houdini_4: bool;
+
+const {:existential true} _houdini_5: bool;
+
+const {:existential true} _houdini_6: bool;
+
+const {:existential true} _houdini_7: bool;
+
+const {:existential true} _houdini_8: bool;
+
+const {:existential true} _houdini_9: bool;
+
+const {:existential true} _houdini_10: bool;
+
+const {:existential true} _houdini_11: bool;
+
+const {:existential true} _houdini_12: bool;
+
+const {:existential true} _houdini_13: bool;
+
+const {:existential true} _houdini_14: bool;
+
+const {:existential true} _houdini_15: bool;
+
+const {:existential true} _houdini_16: bool;
+
+const {:existential true} _houdini_17: bool;
+
+const {:existential true} _houdini_18: bool;
+
+const {:existential true} _houdini_19: bool;
+
+const {:existential true} _houdini_20: bool;
+
+const {:existential true} _houdini_21: bool;
+
+const {:existential true} _houdini_22: bool;
+
+const {:existential true} _houdini_23: bool;
+
+procedure MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.a: int, _v2.a: int);
+ requires _houdini_0 ==> _v1.a <= _v2.a;
+ requires _houdini_1 ==> _v2.a <= _v1.a;
+ requires _houdini_2 ==> _v1.OK ==> _v2.OK;
+ requires _houdini_3 ==> _v2.OK ==> _v1.OK;
+ requires _houdini_4 ==> _v1.Mem == _v2.Mem;
+ requires _houdini_5 ==> _v1.alloc <= _v2.alloc;
+ requires _houdini_6 ==> _v2.alloc <= _v1.alloc;
+ requires _houdini_7 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
+ requires _houdini_8 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
+ requires _houdini_9 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
+ requires _houdini_10 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
+ requires _houdini_11 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
+ requires _houdini_12 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
+ requires _houdini_13 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
+ requires _houdini_14 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
+ requires _houdini_15
+ ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
+ requires _houdini_16 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+ requires _houdini_17 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
+ requires _houdini_18 ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
+ requires _houdini_19
+ ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ requires _houdini_20 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
+ requires _houdini_21 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
+ requires _houdini_22 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
+ requires _houdini_23 ==> _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.__HAVOC_free$_v2.__HAVOC_free(_v1.a,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v2.a,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED));
+ ensures old(_v1.a == _v2.a) ==> true;
+
+
+
+function {:inline true} MS$_v1.__HAVOC_malloc$_v2.__HAVOC_malloc(_v1.obj_size: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.alloc_: int,
+ _v1.new: int,
+ _v2.obj_size: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.alloc_: int,
+ _v2.new: int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.__HAVOC_malloc___v2.__HAVOC_malloc(_v1.obj_size: int, _v2.obj_size: int) returns (_v1.new: int, _v2.new: int);
+ requires _v1.obj_size == _v2.obj_size
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ modifies _v1.alloc, _v2.alloc;
+ ensures MS$_v1.__HAVOC_malloc$_v2.__HAVOC_malloc(_v1.obj_size,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.alloc,
+ _v1.new,
+ _v2.obj_size,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.alloc,
+ _v2.new);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.__HAVOC_det_malloc$_v2.__HAVOC_det_malloc(_v1.obj_size: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.alloc_: int,
+ _v1.new: int,
+ _v2.obj_size: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.alloc_: int,
+ _v2.new: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_24: bool;
+
+const {:existential true} _houdini_25: bool;
+
+const {:existential true} _houdini_26: bool;
+
+const {:existential true} _houdini_27: bool;
+
+const {:existential true} _houdini_28: bool;
+
+const {:existential true} _houdini_29: bool;
+
+const {:existential true} _houdini_30: bool;
+
+const {:existential true} _houdini_31: bool;
+
+const {:existential true} _houdini_32: bool;
+
+const {:existential true} _houdini_33: bool;
+
+const {:existential true} _houdini_34: bool;
+
+const {:existential true} _houdini_35: bool;
+
+const {:existential true} _houdini_36: bool;
+
+const {:existential true} _houdini_37: bool;
+
+const {:existential true} _houdini_38: bool;
+
+const {:existential true} _houdini_39: bool;
+
+const {:existential true} _houdini_40: bool;
+
+const {:existential true} _houdini_41: bool;
+
+const {:existential true} _houdini_42: bool;
+
+const {:existential true} _houdini_43: bool;
+
+const {:existential true} _houdini_44: bool;
+
+const {:existential true} _houdini_45: bool;
+
+const {:existential true} _houdini_46: bool;
+
+const {:existential true} _houdini_47: bool;
+
+procedure MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.obj_size: int, _v2.obj_size: int) returns (_v1.new: int, _v2.new: int);
+ requires _houdini_24 ==> _v1.obj_size <= _v2.obj_size;
+ requires _houdini_25 ==> _v2.obj_size <= _v1.obj_size;
+ requires _houdini_26 ==> _v1.OK ==> _v2.OK;
+ requires _houdini_27 ==> _v2.OK ==> _v1.OK;
+ requires _houdini_28 ==> _v1.Mem == _v2.Mem;
+ requires _houdini_29 ==> _v1.alloc <= _v2.alloc;
+ requires _houdini_30 ==> _v2.alloc <= _v1.alloc;
+ requires _houdini_31 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
+ requires _houdini_32 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
+ requires _houdini_33 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
+ requires _houdini_34 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
+ requires _houdini_35 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
+ requires _houdini_36 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
+ requires _houdini_37 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
+ requires _houdini_38 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
+ requires _houdini_39
+ ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
+ requires _houdini_40 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+ requires _houdini_41 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
+ requires _houdini_42 ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
+ requires _houdini_43
+ ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ requires _houdini_44 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
+ requires _houdini_45 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
+ requires _houdini_46 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
+ requires _houdini_47 ==> _v1.Res_PROBED == _v2.Res_PROBED;
+ modifies _v1.alloc, _v2.alloc;
+ ensures MS$_v1.__HAVOC_det_malloc$_v2.__HAVOC_det_malloc(_v1.obj_size,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.alloc,
+ _v1.new,
+ _v2.obj_size,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.alloc,
+ _v2.new);
+ ensures old(_v1.obj_size == _v2.obj_size && _v1.alloc == _v2.alloc)
+ ==> _v1.new <= _v2.new
+ && _v2.new <= _v1.new
+ && _v1.alloc <= _v2.alloc
+ && _v2.alloc <= _v1.alloc;
+
+
+
+function {:inline true} MS$_v1.__HAVOC_memset_split_1$_v2.__HAVOC_memset_split_1(_v1.A: [int]int,
+ _v1.p: int,
+ _v1.c: int,
+ _v1.n: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.ret: [int]int,
+ _v2.A: [int]int,
+ _v2.p: int,
+ _v2.c: int,
+ _v2.n: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.ret: [int]int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.__HAVOC_memset_split_1___v2.__HAVOC_memset_split_1(_v1.A: [int]int,
+ _v1.p: int,
+ _v1.c: int,
+ _v1.n: int,
+ _v2.A: [int]int,
+ _v2.p: int,
+ _v2.c: int,
+ _v2.n: int)
+ returns (_v1.ret: [int]int, _v2.ret: [int]int);
+ requires _v1.A == _v2.A
+ && _v1.p == _v2.p
+ && _v1.c == _v2.c
+ && _v1.n == _v2.n
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.__HAVOC_memset_split_1$_v2.__HAVOC_memset_split_1(_v1.A,
+ _v1.p,
+ _v1.c,
+ _v1.n,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.ret,
+ _v2.A,
+ _v2.p,
+ _v2.c,
+ _v2.n,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.ret);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.__HAVOC_memset_split_2$_v2.__HAVOC_memset_split_2(_v1.A: [int]int,
+ _v1.p: int,
+ _v1.c: int,
+ _v1.n: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.ret: [int]int,
+ _v2.A: [int]int,
+ _v2.p: int,
+ _v2.c: int,
+ _v2.n: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.ret: [int]int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.__HAVOC_memset_split_2___v2.__HAVOC_memset_split_2(_v1.A: [int]int,
+ _v1.p: int,
+ _v1.c: int,
+ _v1.n: int,
+ _v2.A: [int]int,
+ _v2.p: int,
+ _v2.c: int,
+ _v2.n: int)
+ returns (_v1.ret: [int]int, _v2.ret: [int]int);
+ requires _v1.A == _v2.A
+ && _v1.p == _v2.p
+ && _v1.c == _v2.c
+ && _v1.n == _v2.n
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.__HAVOC_memset_split_2$_v2.__HAVOC_memset_split_2(_v1.A,
+ _v1.p,
+ _v1.c,
+ _v1.n,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.ret,
+ _v2.A,
+ _v2.p,
+ _v2.c,
+ _v2.n,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.ret);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.__HAVOC_memset_split_4$_v2.__HAVOC_memset_split_4(_v1.A: [int]int,
+ _v1.p: int,
+ _v1.c: int,
+ _v1.n: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.ret: [int]int,
+ _v2.A: [int]int,
+ _v2.p: int,
+ _v2.c: int,
+ _v2.n: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.ret: [int]int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.__HAVOC_memset_split_4___v2.__HAVOC_memset_split_4(_v1.A: [int]int,
+ _v1.p: int,
+ _v1.c: int,
+ _v1.n: int,
+ _v2.A: [int]int,
+ _v2.p: int,
+ _v2.c: int,
+ _v2.n: int)
+ returns (_v1.ret: [int]int, _v2.ret: [int]int);
+ requires _v1.A == _v2.A
+ && _v1.p == _v2.p
+ && _v1.c == _v2.c
+ && _v1.n == _v2.n
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.__HAVOC_memset_split_4$_v2.__HAVOC_memset_split_4(_v1.A,
+ _v1.p,
+ _v1.c,
+ _v1.n,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.ret,
+ _v2.A,
+ _v2.p,
+ _v2.c,
+ _v2.n,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.ret);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.nondet_choice$_v2.nondet_choice(_v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.x: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.x: int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.nondet_choice___v2.nondet_choice() returns (_v1.x: int, _v2.x: int);
+ requires (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.nondet_choice$_v2.nondet_choice(old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.x,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.x);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.det_choice$_v2.det_choice(_v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.detChoiceCnt_: int,
+ _v1.x: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.detChoiceCnt_: int,
+ _v2.x: int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.det_choice___v2.det_choice() returns (_v1.x: int, _v2.x: int);
+ requires (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ modifies _v1.detChoiceCnt, _v2.detChoiceCnt;
+ ensures MS$_v1.det_choice$_v2.det_choice(old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.detChoiceCnt,
+ _v1.x,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.detChoiceCnt,
+ _v2.x);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1._strdup$_v2._strdup(_v1.str: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.new: int,
+ _v2.str: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.new: int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1._strdup___v2._strdup(_v1.str: int, _v2.str: int) returns (_v1.new: int, _v2.new: int);
+ requires _v1.str == _v2.str
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1._strdup$_v2._strdup(_v1.str,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.new,
+ _v2.str,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.new);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1._xstrcasecmp$_v2._xstrcasecmp(_v1.a0: int,
+ _v1.a1: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.ret: int,
+ _v2.a0: int,
+ _v2.a1: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.ret: int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1._xstrcasecmp___v2._xstrcasecmp(_v1.a0: int, _v1.a1: int, _v2.a0: int, _v2.a1: int)
+ returns (_v1.ret: int, _v2.ret: int);
+ requires _v1.a0 == _v2.a0
+ && _v1.a1 == _v2.a1
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1._xstrcasecmp$_v2._xstrcasecmp(_v1.a0,
+ _v1.a1,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.ret,
+ _v2.a0,
+ _v2.a1,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.ret);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1._xstrcmp$_v2._xstrcmp(_v1.a0: int,
+ _v1.a1: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.ret: int,
+ _v2.a0: int,
+ _v2.a1: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.ret: int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1._xstrcmp___v2._xstrcmp(_v1.a0: int, _v1.a1: int, _v2.a0: int, _v2.a1: int)
+ returns (_v1.ret: int, _v2.ret: int);
+ requires _v1.a0 == _v2.a0
+ && _v1.a1 == _v2.a1
+ &&
+ (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1._xstrcmp$_v2._xstrcmp(_v1.a0,
+ _v1.a1,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.ret,
+ _v2.a0,
+ _v2.a1,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.ret);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+function {:inline true} MS$_v1.memcpy$_v2.memcpy(_v1.a0: int,
+ _v1.a1: int,
+ _v1.a2: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.ret: int,
+ _v2.a0: int,
+ _v2.a1: int,
+ _v2.a2: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.ret: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_48: bool;
+
+const {:existential true} _houdini_49: bool;
+
+const {:existential true} _houdini_50: bool;
+
+const {:existential true} _houdini_51: bool;
+
+const {:existential true} _houdini_52: bool;
+
+const {:existential true} _houdini_53: bool;
+
+const {:existential true} _houdini_54: bool;
+
+const {:existential true} _houdini_55: bool;
+
+const {:existential true} _houdini_56: bool;
+
+const {:existential true} _houdini_57: bool;
+
+const {:existential true} _houdini_58: bool;
+
+const {:existential true} _houdini_59: bool;
+
+const {:existential true} _houdini_60: bool;
+
+const {:existential true} _houdini_61: bool;
+
+const {:existential true} _houdini_62: bool;
+
+const {:existential true} _houdini_63: bool;
+
+const {:existential true} _houdini_64: bool;
+
+const {:existential true} _houdini_65: bool;
+
+const {:existential true} _houdini_66: bool;
+
+const {:existential true} _houdini_67: bool;
+
+const {:existential true} _houdini_68: bool;
+
+const {:existential true} _houdini_69: bool;
+
+const {:existential true} _houdini_70: bool;
+
+const {:existential true} _houdini_71: bool;
+
+const {:existential true} _houdini_72: bool;
+
+const {:existential true} _houdini_73: bool;
+
+const {:existential true} _houdini_74: bool;
+
+const {:existential true} _houdini_75: bool;
+
+procedure MS_Check__v1.memcpy___v2.memcpy(_v1.a0: int, _v1.a1: int, _v1.a2: int, _v2.a0: int, _v2.a1: int, _v2.a2: int)
+ returns (_v1.ret: int, _v2.ret: int);
+ requires _houdini_48 ==> _v1.a0 <= _v2.a0;
+ requires _houdini_49 ==> _v2.a0 <= _v1.a0;
+ requires _houdini_50 ==> _v1.a1 <= _v2.a1;
+ requires _houdini_51 ==> _v2.a1 <= _v1.a1;
+ requires _houdini_52 ==> _v1.a2 <= _v2.a2;
+ requires _houdini_53 ==> _v2.a2 <= _v1.a2;
+ requires _houdini_54 ==> _v1.OK ==> _v2.OK;
+ requires _houdini_55 ==> _v2.OK ==> _v1.OK;
+ requires _houdini_56 ==> _v1.Mem == _v2.Mem;
+ requires _houdini_57 ==> _v1.alloc <= _v2.alloc;
+ requires _houdini_58 ==> _v2.alloc <= _v1.alloc;
+ requires _houdini_59 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
+ requires _houdini_60 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
+ requires _houdini_61 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
+ requires _houdini_62 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
+ requires _houdini_63 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
+ requires _houdini_64 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
+ requires _houdini_65 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
+ requires _houdini_66 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
+ requires _houdini_67
+ ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
+ requires _houdini_68 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+ requires _houdini_69 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
+ requires _houdini_70 ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
+ requires _houdini_71
+ ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ requires _houdini_72 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
+ requires _houdini_73 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
+ requires _houdini_74 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
+ requires _houdini_75 ==> _v1.Res_PROBED == _v2.Res_PROBED;
+ ensures MS$_v1.memcpy$_v2.memcpy(_v1.a0,
+ _v1.a1,
+ _v1.a2,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.ret,
+ _v2.a0,
+ _v2.a1,
+ _v2.a2,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.ret);
+ ensures old(_v1.a0 == _v2.a0 && _v1.a1 == _v2.a1 && _v1.a2 == _v2.a2)
+ ==> _v1.ret <= _v2.ret && _v2.ret <= _v1.ret;
+
+
+
+function {:inline true} MS$_v1.encode_ie$_v2.encode_ie(_v1.buf_.1: int,
+ _v1.bufsize_.1: int,
+ _v1.ie_.1: int,
+ _v1.ielen_.1: int,
+ _v1.leader_.1: int,
+ _v1.leader_len_.1: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.OK_: bool,
+ _v1.Mem_T.UCHAR_: [int]int,
+ _v1.result.encode_ie$1: int,
+ _v2.buf_.1: int,
+ _v2.bufsize_.1: int,
+ _v2.ie_.1: int,
+ _v2.ielen_.1: int,
+ _v2.leader_.1: int,
+ _v2.leader_len_.1: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.OK_: bool,
+ _v2.Mem_T.UCHAR_: [int]int,
+ _v2.result.encode_ie$1: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_76: bool;
+
+const {:existential true} _houdini_77: bool;
+
+const {:existential true} _houdini_78: bool;
+
+const {:existential true} _houdini_79: bool;
+
+const {:existential true} _houdini_80: bool;
+
+const {:existential true} _houdini_81: bool;
+
+const {:existential true} _houdini_82: bool;
+
+const {:existential true} _houdini_83: bool;
+
+const {:existential true} _houdini_84: bool;
+
+const {:existential true} _houdini_85: bool;
+
+const {:existential true} _houdini_86: bool;
+
+const {:existential true} _houdini_87: bool;
+
+const {:existential true} _houdini_88: bool;
+
+const {:existential true} _houdini_89: bool;
+
+const {:existential true} _houdini_90: bool;
+
+const {:existential true} _houdini_91: bool;
+
+const {:existential true} _houdini_92: bool;
+
+const {:existential true} _houdini_93: bool;
+
+const {:existential true} _houdini_94: bool;
+
+const {:existential true} _houdini_95: bool;
+
+const {:existential true} _houdini_96: bool;
+
+const {:existential true} _houdini_97: bool;
+
+const {:existential true} _houdini_98: bool;
+
+const {:existential true} _houdini_99: bool;
+
+const {:existential true} _houdini_100: bool;
+
+const {:existential true} _houdini_101: bool;
+
+const {:existential true} _houdini_102: bool;
+
+const {:existential true} _houdini_103: bool;
+
+const {:existential true} _houdini_104: bool;
+
+const {:existential true} _houdini_105: bool;
+
+const {:existential true} _houdini_106: bool;
+
+const {:existential true} _houdini_107: bool;
+
+const {:existential true} _houdini_108: bool;
+
+const {:existential true} _houdini_109: bool;
+
+const {:existential true} _houdini_110: bool;
+
+const {:existential true} _houdini_111: bool;
+
+const {:existential true} _houdini_112: bool;
+
+const {:existential true} _houdini_113: bool;
+
+const {:existential true} _houdini_114: bool;
+
+procedure MS_Check__v1.encode_ie___v2.encode_ie(_v1.buf_.1: int,
+ _v1.bufsize_.1: int,
+ _v1.ie_.1: int,
+ _v1.ielen_.1: int,
+ _v1.leader_.1: int,
+ _v1.leader_len_.1: int,
+ _v2.buf_.1: int,
+ _v2.bufsize_.1: int,
+ _v2.ie_.1: int,
+ _v2.ielen_.1: int,
+ _v2.leader_.1: int,
+ _v2.leader_len_.1: int)
+ returns (_v1.result.encode_ie$1: int, _v2.result.encode_ie$1: int);
+ requires _houdini_81 ==> _v1.buf_.1 <= _v2.buf_.1;
+ requires _houdini_82 ==> _v2.buf_.1 <= _v1.buf_.1;
+ requires _houdini_83 ==> _v1.bufsize_.1 <= _v2.bufsize_.1;
+ requires _houdini_84 ==> _v2.bufsize_.1 <= _v1.bufsize_.1;
+ requires _houdini_85 ==> _v1.ie_.1 <= _v2.ie_.1;
+ requires _houdini_86 ==> _v2.ie_.1 <= _v1.ie_.1;
+ requires _houdini_87 ==> _v1.ielen_.1 <= _v2.ielen_.1;
+ requires _houdini_88 ==> _v2.ielen_.1 <= _v1.ielen_.1;
+ requires _houdini_89 ==> _v1.leader_.1 <= _v2.leader_.1;
+ requires _houdini_90 ==> _v2.leader_.1 <= _v1.leader_.1;
+ requires _houdini_91 ==> _v1.leader_len_.1 <= _v2.leader_len_.1;
+ requires _houdini_92 ==> _v2.leader_len_.1 <= _v1.leader_len_.1;
+ requires _houdini_93 ==> _v1.OK ==> _v2.OK;
+ requires _houdini_94 ==> _v2.OK ==> _v1.OK;
+ requires _houdini_95 ==> _v1.Mem == _v2.Mem;
+ requires _houdini_96 ==> _v1.alloc <= _v2.alloc;
+ requires _houdini_97 ==> _v2.alloc <= _v1.alloc;
+ requires _houdini_98 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
+ requires _houdini_99 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
+ requires _houdini_100 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
+ requires _houdini_101 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
+ requires _houdini_102 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
+ requires _houdini_103 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
+ requires _houdini_104 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
+ requires _houdini_105 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
+ requires _houdini_106
+ ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
+ requires _houdini_107 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+ requires _houdini_108 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
+ requires _houdini_109
+ ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
+ requires _houdini_110
+ ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ requires _houdini_111 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
+ requires _houdini_112 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
+ requires _houdini_113 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
+ requires _houdini_114 ==> _v1.Res_PROBED == _v2.Res_PROBED;
+ modifies _v1.OK, _v1.Mem_T.UCHAR, _v2.OK, _v2.Mem_T.UCHAR;
+ ensures MS$_v1.encode_ie$_v2.encode_ie(_v1.buf_.1,
+ _v1.bufsize_.1,
+ _v1.ie_.1,
+ _v1.ielen_.1,
+ _v1.leader_.1,
+ _v1.leader_len_.1,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.OK,
+ _v1.Mem_T.UCHAR,
+ _v1.result.encode_ie$1,
+ _v2.buf_.1,
+ _v2.bufsize_.1,
+ _v2.ie_.1,
+ _v2.ielen_.1,
+ _v2.leader_.1,
+ _v2.leader_len_.1,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.OK,
+ _v2.Mem_T.UCHAR,
+ _v2.result.encode_ie$1);
+ ensures _houdini_76 ==> _v1.result.encode_ie$1 <= _v2.result.encode_ie$1;
+ ensures _houdini_77 ==> _v2.result.encode_ie$1 <= _v1.result.encode_ie$1;
+ ensures _houdini_78 ==> _v1.OK ==> _v2.OK;
+ ensures _houdini_79 ==> _v2.OK ==> _v1.OK;
+ ensures _houdini_80 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+
+
+
+implementation MS_Check__v1.encode_ie___v2.encode_ie(_v1.buf_.1: int,
+ _v1.bufsize_.1: int,
+ _v1.ie_.1: int,
+ _v1.ielen_.1: int,
+ _v1.leader_.1: int,
+ _v1.leader_len_.1: int,
+ _v2.buf_.1: int,
+ _v2.bufsize_.1: int,
+ _v2.ie_.1: int,
+ _v2.ielen_.1: int,
+ _v2.leader_.1: int,
+ _v2.leader_len_.1: int)
+ returns (_v1.result.encode_ie$1: int, _v2.result.encode_ie$1: int)
+{
+ var inline$_v1.encode_ie$0$havoc_stringTemp: int;
+ var inline$_v1.encode_ie$0$condVal: int;
+ var inline$_v1.encode_ie$0$buf: int;
+ var inline$_v1.encode_ie$0$bufsize: int;
+ var inline$_v1.encode_ie$0$i: int;
+ var inline$_v1.encode_ie$0$ie: int;
+ var inline$_v1.encode_ie$0$ielen: int;
+ var inline$_v1.encode_ie$0$leader: int;
+ var inline$_v1.encode_ie$0$leader_len: int;
+ var inline$_v1.encode_ie$0$p: int;
+ var inline$_v1.encode_ie$0$result.memcpy$2: int;
+ var inline$_v1.encode_ie$0$$result.question.3.$$static$: int;
+ var inline$_v1.encode_ie$0$tempBoogie0: int;
+ var inline$_v1.encode_ie$0$tempBoogie1: int;
+ var inline$_v1.encode_ie$0$tempBoogie2: int;
+ var inline$_v1.encode_ie$0$tempBoogie3: int;
+ var inline$_v1.encode_ie$0$tempBoogie4: int;
+ var inline$_v1.encode_ie$0$tempBoogie5: int;
+ var inline$_v1.encode_ie$0$tempBoogie6: int;
+ var inline$_v1.encode_ie$0$tempBoogie7: int;
+ var inline$_v1.encode_ie$0$tempBoogie8: int;
+ var inline$_v1.encode_ie$0$tempBoogie9: int;
+ var inline$_v1.encode_ie$0$tempBoogie10: int;
+ var inline$_v1.encode_ie$0$tempBoogie11: int;
+ var inline$_v1.encode_ie$0$tempBoogie12: int;
+ var inline$_v1.encode_ie$0$tempBoogie13: int;
+ var inline$_v1.encode_ie$0$tempBoogie14: int;
+ var inline$_v1.encode_ie$0$tempBoogie15: int;
+ var inline$_v1.encode_ie$0$tempBoogie16: int;
+ var inline$_v1.encode_ie$0$tempBoogie17: int;
+ var inline$_v1.encode_ie$0$tempBoogie18: int;
+ var inline$_v1.encode_ie$0$tempBoogie19: int;
+ var inline$_v1.encode_ie$0$__havoc_dummy_return: int;
+ var inline$_v1.encode_ie$0$buf_.1: int;
+ var inline$_v1.encode_ie$0$bufsize_.1: int;
+ var inline$_v1.encode_ie$0$ie_.1: int;
+ var inline$_v1.encode_ie$0$ielen_.1: int;
+ var inline$_v1.encode_ie$0$leader_.1: int;
+ var inline$_v1.encode_ie$0$leader_len_.1: int;
+ var inline$_v1.encode_ie$0$result.encode_ie$1: int;
+ var inline$_v1.encode_ie$0$_v1.OK: bool;
+ var inline$_v1.encode_ie$0$_v1.Mem_T.UCHAR: [int]int;
+ var inline$_v2.encode_ie$0$havoc_stringTemp: int;
+ var inline$_v2.encode_ie$0$condVal: int;
+ var inline$_v2.encode_ie$0$buf: int;
+ var inline$_v2.encode_ie$0$bufsize: int;
+ var inline$_v2.encode_ie$0$i: int;
+ var inline$_v2.encode_ie$0$ie: int;
+ var inline$_v2.encode_ie$0$ielen: int;
+ var inline$_v2.encode_ie$0$leader: int;
+ var inline$_v2.encode_ie$0$leader_len: int;
+ var inline$_v2.encode_ie$0$p: int;
+ var inline$_v2.encode_ie$0$result.memcpy$2: int;
+ var inline$_v2.encode_ie$0$$result.question.3.$$static$: int;
+ var inline$_v2.encode_ie$0$tempBoogie0: int;
+ var inline$_v2.encode_ie$0$tempBoogie1: int;
+ var inline$_v2.encode_ie$0$tempBoogie2: int;
+ var inline$_v2.encode_ie$0$tempBoogie3: int;
+ var inline$_v2.encode_ie$0$tempBoogie4: int;
+ var inline$_v2.encode_ie$0$tempBoogie5: int;
+ var inline$_v2.encode_ie$0$tempBoogie6: int;
+ var inline$_v2.encode_ie$0$tempBoogie7: int;
+ var inline$_v2.encode_ie$0$tempBoogie8: int;
+ var inline$_v2.encode_ie$0$tempBoogie9: int;
+ var inline$_v2.encode_ie$0$tempBoogie10: int;
+ var inline$_v2.encode_ie$0$tempBoogie11: int;
+ var inline$_v2.encode_ie$0$tempBoogie12: int;
+ var inline$_v2.encode_ie$0$tempBoogie13: int;
+ var inline$_v2.encode_ie$0$tempBoogie14: int;
+ var inline$_v2.encode_ie$0$tempBoogie15: int;
+ var inline$_v2.encode_ie$0$tempBoogie16: int;
+ var inline$_v2.encode_ie$0$tempBoogie17: int;
+ var inline$_v2.encode_ie$0$tempBoogie18: int;
+ var inline$_v2.encode_ie$0$tempBoogie19: int;
+ var inline$_v2.encode_ie$0$__havoc_dummy_return: int;
+ var inline$_v2.encode_ie$0$buf_.1: int;
+ var inline$_v2.encode_ie$0$bufsize_.1: int;
+ var inline$_v2.encode_ie$0$ie_.1: int;
+ var inline$_v2.encode_ie$0$ielen_.1: int;
+ var inline$_v2.encode_ie$0$leader_.1: int;
+ var inline$_v2.encode_ie$0$leader_len_.1: int;
+ var inline$_v2.encode_ie$0$result.encode_ie$1: int;
+ var inline$_v2.encode_ie$0$_v2.OK: bool;
+ var inline$_v2.encode_ie$0$_v2.Mem_T.UCHAR: [int]int;
+ var _v1.memcpy_1_done: bool;
+ var _v1.memcpy_in_1_0: int;
+ var _v1.memcpy_in_1_1: int;
+ var _v1.memcpy_in_1_2: int;
+ var _v1.memcpy_in_1_3: bool;
+ var _v1.memcpy_in_1_4: [int]int;
+ var _v1.memcpy_out_1_0: int;
+ var _v1.encode_ie_loop_label_14_head_2_done: bool;
+ var _v1.encode_ie_loop_label_14_head_in_2_0: int;
+ var _v1.encode_ie_loop_label_14_head_in_2_1: int;
+ var _v1.encode_ie_loop_label_14_head_in_2_2: int;
+ var _v1.encode_ie_loop_label_14_head_in_2_3: int;
+ var _v1.encode_ie_loop_label_14_head_in_2_4: int;
+ var _v1.encode_ie_loop_label_14_head_in_2_5: bool;
+ var _v1.encode_ie_loop_label_14_head_in_2_6: [int]int;
+ var _v1.encode_ie_loop_label_14_head_out_2_0: int;
+ var _v1.encode_ie_loop_label_14_head_out_2_1: int;
+ var _v1.encode_ie_loop_label_14_head_out_2_2: int;
+ var _v1.encode_ie_loop_label_14_head_out_2_3: [int]int;
+ var _v1.encode_ie_loop_label_14_head_out_2_4: bool;
+ var _v2.memcpy_3_done: bool;
+ var _v2.memcpy_in_3_0: int;
+ var _v2.memcpy_in_3_1: int;
+ var _v2.memcpy_in_3_2: int;
+ var _v2.memcpy_in_3_3: bool;
+ var _v2.memcpy_in_3_4: [int]int;
+ var _v2.memcpy_out_3_0: int;
+ var _v2.encode_ie_loop_label_14_head_4_done: bool;
+ var _v2.encode_ie_loop_label_14_head_in_4_0: int;
+ var _v2.encode_ie_loop_label_14_head_in_4_1: int;
+ var _v2.encode_ie_loop_label_14_head_in_4_2: int;
+ var _v2.encode_ie_loop_label_14_head_in_4_3: int;
+ var _v2.encode_ie_loop_label_14_head_in_4_4: int;
+ var _v2.encode_ie_loop_label_14_head_in_4_5: bool;
+ var _v2.encode_ie_loop_label_14_head_in_4_6: [int]int;
+ var _v2.encode_ie_loop_label_14_head_out_4_0: int;
+ var _v2.encode_ie_loop_label_14_head_out_4_1: int;
+ var _v2.encode_ie_loop_label_14_head_out_4_2: int;
+ var _v2.encode_ie_loop_label_14_head_out_4_3: int;
+ var _v2.encode_ie_loop_label_14_head_out_4_4: [int]int;
+ var _v2.encode_ie_loop_label_14_head_out_4_5: bool;
+ var store__0__v1.OK: bool;
+ var store__0__v1.Mem_T.UCHAR: [int]int;
+ var store__0__v2.OK: bool;
+ var store__0__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.memcpy_out_1_0_0: int;
+ var out__v2.memcpy_out_3_0_0: int;
+ var store__1__v1.OK: bool;
+ var store__1__v1.Mem_T.UCHAR: [int]int;
+ var store__1__v2.OK: bool;
+ var store__1__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.encode_ie_loop_label_14_head_out_2_0_1: int;
+ var out__v1.encode_ie_loop_label_14_head_out_2_1_1: int;
+ var out__v1.encode_ie_loop_label_14_head_out_2_2_1: int;
+ var out__v2.encode_ie_loop_label_14_head_out_4_0_1: int;
+ var out__v2.encode_ie_loop_label_14_head_out_4_1_1: int;
+ var out__v2.encode_ie_loop_label_14_head_out_4_2_1: int;
+ var out__v2.encode_ie_loop_label_14_head_out_4_3_1: int;
+
+ START:
+ _v1.memcpy_1_done, _v1.encode_ie_loop_label_14_head_2_done, _v2.memcpy_3_done, _v2.encode_ie_loop_label_14_head_4_done := false, false, false, false;
+ goto inline$_v1.encode_ie$0$Entry;
+
+ inline$_v1.encode_ie$0$Entry:
+ inline$_v1.encode_ie$0$buf_.1 := _v1.buf_.1;
+ inline$_v1.encode_ie$0$bufsize_.1 := _v1.bufsize_.1;
+ inline$_v1.encode_ie$0$ie_.1 := _v1.ie_.1;
+ inline$_v1.encode_ie$0$ielen_.1 := _v1.ielen_.1;
+ inline$_v1.encode_ie$0$leader_.1 := _v1.leader_.1;
+ inline$_v1.encode_ie$0$leader_len_.1 := _v1.leader_len_.1;
+ havoc inline$_v1.encode_ie$0$havoc_stringTemp, inline$_v1.encode_ie$0$condVal, inline$_v1.encode_ie$0$buf, inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ie, inline$_v1.encode_ie$0$ielen, inline$_v1.encode_ie$0$leader, inline$_v1.encode_ie$0$leader_len, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$result.memcpy$2, inline$_v1.encode_ie$0$$result.question.3.$$static$, inline$_v1.encode_ie$0$tempBoogie0, inline$_v1.encode_ie$0$tempBoogie1, inline$_v1.encode_ie$0$tempBoogie2, inline$_v1.encode_ie$0$tempBoogie3, inline$_v1.encode_ie$0$tempBoogie4, inline$_v1.encode_ie$0$tempBoogie5, inline$_v1.encode_ie$0$tempBoogie6, inline$_v1.encode_ie$0$tempBoogie7, inline$_v1.encode_ie$0$tempBoogie8, inline$_v1.encode_ie$0$tempBoogie9, inline$_v1.encode_ie$0$tempBoogie10, inline$_v1.encode_ie$0$tempBoogie11, inline$_v1.encode_ie$0$tempBoogie12, inline$_v1.encode_ie$0$tempBoogie13, inline$_v1.encode_ie$0$tempBoogie14, inline$_v1.encode_ie$0$tempBoogie15, inline$_v1.encode_ie$0$tempBoogie16, inline$_v1.encode_ie$0$tempBoogie17, inline$_v1.encode_ie$0$tempBoogie18, inline$_v1.encode_ie$0$tempBoogie19, inline$_v1.encode_ie$0$__havoc_dummy_return, inline$_v1.encode_ie$0$result.encode_ie$1;
+ inline$_v1.encode_ie$0$_v1.OK := _v1.OK;
+ inline$_v1.encode_ie$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
+ goto inline$_v1.encode_ie$0$anon0#2;
+
+ inline$_v1.encode_ie$0$anon0#2:
+ inline$_v1.encode_ie$0$havoc_stringTemp := 0;
+ goto inline$_v1.encode_ie$0$start#2;
+
+ inline$_v1.encode_ie$0$start#2:
+ assume _v2.INT_LT(inline$_v1.encode_ie$0$buf_.1, _v1.alloc);
+ assume _v2.INT_LT(inline$_v1.encode_ie$0$ie_.1, _v1.alloc);
+ assume _v2.INT_LT(inline$_v1.encode_ie$0$leader_.1, _v1.alloc);
+ inline$_v1.encode_ie$0$buf := 0;
+ assume _v2.INT_GEQ(inline$_v1.encode_ie$0$buf_.1, 0);
+ inline$_v1.encode_ie$0$bufsize := 0;
+ inline$_v1.encode_ie$0$i := 0;
+ inline$_v1.encode_ie$0$ie := 0;
+ assume _v2.INT_GEQ(inline$_v1.encode_ie$0$ie_.1, 0);
+ inline$_v1.encode_ie$0$ielen := 0;
+ inline$_v1.encode_ie$0$leader := 0;
+ assume _v2.INT_GEQ(inline$_v1.encode_ie$0$leader_.1, 0);
+ inline$_v1.encode_ie$0$leader_len := 0;
+ inline$_v1.encode_ie$0$p := 0;
+ inline$_v1.encode_ie$0$result.encode_ie$1 := 0;
+ inline$_v1.encode_ie$0$result.memcpy$2 := 0;
+ inline$_v1.encode_ie$0$$result.question.3.$$static$ := 0;
+ inline$_v1.encode_ie$0$buf := inline$_v1.encode_ie$0$buf_.1;
+ inline$_v1.encode_ie$0$bufsize := inline$_v1.encode_ie$0$bufsize_.1;
+ inline$_v1.encode_ie$0$ie := inline$_v1.encode_ie$0$ie_.1;
+ inline$_v1.encode_ie$0$ielen := inline$_v1.encode_ie$0$ielen_.1;
+ inline$_v1.encode_ie$0$leader := inline$_v1.encode_ie$0$leader_.1;
+ inline$_v1.encode_ie$0$leader_len := inline$_v1.encode_ie$0$leader_len_.1;
+ goto inline$_v1.encode_ie$0$label_3#2;
+
+ inline$_v1.encode_ie$0$label_3#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 9} true;
+ goto inline$_v1.encode_ie$0$label_4#2;
+
+ inline$_v1.encode_ie$0$label_4#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 10} true;
+ goto inline$_v1.encode_ie$0$label_5#2;
+
+ inline$_v1.encode_ie$0$label_5#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 13} true;
+ goto inline$_v1.encode_ie$0$label_5_true#2, inline$_v1.encode_ie$0$label_5_false#2;
+
+ inline$_v1.encode_ie$0$label_5_false#2:
+ assume !_v2.INT_LT(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$leader_len);
+ assume _v2.value_is(_v1.__ctobpl_const_1, inline$_v1.encode_ie$0$bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_2, inline$_v1.encode_ie$0$leader_len);
+ goto inline$_v1.encode_ie$0$label_6#2;
+
+ inline$_v1.encode_ie$0$label_6#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 15} true;
+ inline$_v1.encode_ie$0$p := inline$_v1.encode_ie$0$buf;
+ assume _v2.value_is(_v1.__ctobpl_const_3, inline$_v1.encode_ie$0$p);
+ assume _v2.value_is(_v1.__ctobpl_const_4, inline$_v1.encode_ie$0$buf);
+ goto inline$_v1.encode_ie$0$label_8#2;
+
+ inline$_v1.encode_ie$0$label_8#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 16} true;
+ _v1.memcpy_in_1_0, _v1.memcpy_in_1_1, _v1.memcpy_in_1_2, _v1.memcpy_in_1_3, _v1.memcpy_in_1_4 := inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$leader, inline$_v1.encode_ie$0$leader_len, _v1.OK, _v1.Mem_T.UCHAR;
+ call inline$_v1.encode_ie$0$result.memcpy$2 := _v1.memcpy(inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$leader, inline$_v1.encode_ie$0$leader_len);
+ _v1.memcpy_1_done := true;
+ _v1.memcpy_out_1_0 := inline$_v1.encode_ie$0$result.memcpy$2;
+ assume _v2.value_is(_v1.__ctobpl_const_5, inline$_v1.encode_ie$0$p);
+ assume _v2.value_is(_v1.__ctobpl_const_6, inline$_v1.encode_ie$0$leader);
+ assume _v2.value_is(_v1.__ctobpl_const_7, inline$_v1.encode_ie$0$leader_len);
+ assume _v2.value_is(_v1.__ctobpl_const_8, inline$_v1.encode_ie$0$p);
+ assume _v2.value_is(_v1.__ctobpl_const_9, inline$_v1.encode_ie$0$leader);
+ assume _v2.value_is(_v1.__ctobpl_const_10, inline$_v1.encode_ie$0$leader_len);
+ goto inline$_v1.encode_ie$0$label_11#2;
+
+ inline$_v1.encode_ie$0$label_11#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 17} true;
+ havoc inline$_v1.encode_ie$0$tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$leader_len, 1, inline$_v1.encode_ie$0$tempBoogie0);
+ inline$_v1.encode_ie$0$bufsize := inline$_v1.encode_ie$0$tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_11, inline$_v1.encode_ie$0$bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_12, inline$_v1.encode_ie$0$leader_len);
+ goto inline$_v1.encode_ie$0$label_12#2;
+
+ inline$_v1.encode_ie$0$label_12#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 18} true;
+ inline$_v1.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, inline$_v1.encode_ie$0$leader_len);
+ inline$_v1.encode_ie$0$p := inline$_v1.encode_ie$0$tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_13, inline$_v1.encode_ie$0$p);
+ assume _v2.value_is(_v1.__ctobpl_const_14, inline$_v1.encode_ie$0$leader_len);
+ goto inline$_v1.encode_ie$0$label_13#2;
+
+ inline$_v1.encode_ie$0$label_13#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ inline$_v1.encode_ie$0$i := 0;
+ assume _v2.value_is(_v1.__ctobpl_const_15, inline$_v1.encode_ie$0$i);
+ goto inline$_v1.encode_ie$0$label_14#2;
+
+ inline$_v1.encode_ie$0$label_14#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ goto inline$_v1.encode_ie$0$label_14_head#2;
+
+ inline$_v1.encode_ie$0$label_14_head#2:
+ _v1.encode_ie_loop_label_14_head_in_2_0, _v1.encode_ie_loop_label_14_head_in_2_1, _v1.encode_ie_loop_label_14_head_in_2_2, _v1.encode_ie_loop_label_14_head_in_2_3, _v1.encode_ie_loop_label_14_head_in_2_4, _v1.encode_ie_loop_label_14_head_in_2_5, _v1.encode_ie_loop_label_14_head_in_2_6 := inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0, _v1.OK, _v1.Mem_T.UCHAR;
+ call inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0 := _v1.encode_ie_loop_label_14_head(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0);
+ _v1.encode_ie_loop_label_14_head_2_done := true;
+ _v1.encode_ie_loop_label_14_head_out_2_0, _v1.encode_ie_loop_label_14_head_out_2_1, _v1.encode_ie_loop_label_14_head_out_2_2, _v1.encode_ie_loop_label_14_head_out_2_3, _v1.encode_ie_loop_label_14_head_out_2_4 := inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$tempBoogie0, _v1.Mem_T.UCHAR, _v1.OK;
+ goto inline$_v1.encode_ie$0$label_14_head_last#2;
+
+ inline$_v1.encode_ie$0$label_14_head_last#2:
+ goto inline$_v1.encode_ie$0$label_14_true#2, inline$_v1.encode_ie$0$label_14_false#2;
+
+ inline$_v1.encode_ie$0$label_14_false#2:
+ assume !_v2.INT_LT(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie$0$i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie$0$ielen);
+ goto inline$_v1.encode_ie$0$label_15#2;
+
+ inline$_v1.encode_ie$0$label_14_true#2:
+ assume _v2.INT_LT(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie$0$i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie$0$ielen);
+ goto inline$_v1.encode_ie$0$label_16#2;
+
+ inline$_v1.encode_ie$0$label_16#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ goto inline$_v1.encode_ie$0$label_16_true#2, inline$_v1.encode_ie$0$label_16_false#2;
+
+ inline$_v1.encode_ie$0$label_16_false#2:
+ assume !_v2.INT_LT(2, inline$_v1.encode_ie$0$bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie$0$bufsize);
+ goto inline$_v1.encode_ie$0$label_15#2;
+
+ inline$_v1.encode_ie$0$label_15#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ goto inline$_v1.encode_ie$0$label_15_true#2, inline$_v1.encode_ie$0$label_15_false#2;
+
+ inline$_v1.encode_ie$0$label_15_false#2:
+ assume !_v2.INT_EQ(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_18, inline$_v1.encode_ie$0$i);
+ assume _v2.value_is(_v1.__ctobpl_const_19, inline$_v1.encode_ie$0$ielen);
+ goto inline$_v1.encode_ie$0$label_21#2;
+
+ inline$_v1.encode_ie$0$label_21#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ inline$_v1.encode_ie$0$$result.question.3.$$static$ := 0;
+ assume _v2.value_is(_v1.__ctobpl_const_27, inline$_v1.encode_ie$0$$result.question.3.$$static$);
+ goto inline$_v1.encode_ie$0$label_23#2;
+
+ inline$_v1.encode_ie$0$label_15_true#2:
+ assume _v2.INT_EQ(inline$_v1.encode_ie$0$i, inline$_v1.encode_ie$0$ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_18, inline$_v1.encode_ie$0$i);
+ assume _v2.value_is(_v1.__ctobpl_const_19, inline$_v1.encode_ie$0$ielen);
+ goto inline$_v1.encode_ie$0$label_22#2;
+
+ inline$_v1.encode_ie$0$label_22#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ havoc inline$_v1.encode_ie$0$$result.question.3.$$static$;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v1.encode_ie$0$p, inline$_v1.encode_ie$0$buf, 1, inline$_v1.encode_ie$0$$result.question.3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_28, inline$_v1.encode_ie$0$$result.question.3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_29, inline$_v1.encode_ie$0$p);
+ assume _v2.value_is(_v1.__ctobpl_const_30, inline$_v1.encode_ie$0$buf);
+ goto inline$_v1.encode_ie$0$label_23#2;
+
+ inline$_v1.encode_ie$0$label_23#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 38} true;
+ inline$_v1.encode_ie$0$result.encode_ie$1 := inline$_v1.encode_ie$0$$result.question.3.$$static$;
+ assume _v2.value_is(_v1.__ctobpl_const_31, inline$_v1.encode_ie$0$$result.question.3.$$static$);
+ goto inline$_v1.encode_ie$0$label_1#2;
+
+ inline$_v1.encode_ie$0$label_16_true#2:
+ assume _v2.INT_LT(2, inline$_v1.encode_ie$0$bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie$0$bufsize);
+ goto inline$_v1.encode_ie$0$label_17#2;
+
+ inline$_v1.encode_ie$0$label_17#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(inline$_v1.encode_ie$0$p, 0);
+ _v1.OK := _v1.OK && _v2.Res_VALID_REGION(inline$_v1.encode_ie$0$p) == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[inline$_v1.encode_ie$0$p := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_21, inline$_v1.encode_ie$0$p);
+ assume _v2.value_is(_v1.__ctobpl_const_22, _v1.Mem_T.UCHAR[inline$_v1.encode_ie$0$p]);
+ goto inline$_v1.encode_ie$0$label_18#2;
+
+ inline$_v1.encode_ie$0$label_18#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1), 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1)) == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1) := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_23, inline$_v1.encode_ie$0$p);
+ assume _v2.value_is(_v1.__ctobpl_const_24,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 1)]);
+ goto inline$_v1.encode_ie$0$label_19#2;
+
+ inline$_v1.encode_ie$0$label_19#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
+ inline$_v1.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v1.encode_ie$0$p, 1, 2);
+ inline$_v1.encode_ie$0$p := inline$_v1.encode_ie$0$tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_25, inline$_v1.encode_ie$0$p);
+ goto inline$_v1.encode_ie$0$label_20#2;
+
+ inline$_v1.encode_ie$0$label_20#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v1.__ctobpl_const_26, inline$_v1.encode_ie$0$i);
+ inline$_v1.encode_ie$0$i := _v2.INT_PLUS(inline$_v1.encode_ie$0$i, 1, 1);
+ goto inline$_v1.encode_ie$0$label_20_dummy#2;
+
+ inline$_v1.encode_ie$0$label_20_dummy#2:
+ assume false;
+ goto inline$_v1.encode_ie$0$Return;
+
+ inline$_v1.encode_ie$0$label_5_true#2:
+ assume _v2.INT_LT(inline$_v1.encode_ie$0$bufsize, inline$_v1.encode_ie$0$leader_len);
+ assume _v2.value_is(_v1.__ctobpl_const_1, inline$_v1.encode_ie$0$bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_2, inline$_v1.encode_ie$0$leader_len);
+ goto inline$_v1.encode_ie$0$label_7#2;
+
+ inline$_v1.encode_ie$0$label_7#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 14} true;
+ inline$_v1.encode_ie$0$result.encode_ie$1 := 0;
+ goto inline$_v1.encode_ie$0$label_1#2;
+
+ inline$_v1.encode_ie$0$label_1#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 39} true;
+ goto inline$_v1.encode_ie$0$Return;
+
+ inline$_v1.encode_ie$0$Return:
+ assume true;
+ _v1.result.encode_ie$1 := inline$_v1.encode_ie$0$result.encode_ie$1;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.encode_ie$0$Entry;
+
+ inline$_v2.encode_ie$0$Entry:
+ inline$_v2.encode_ie$0$buf_.1 := _v2.buf_.1;
+ inline$_v2.encode_ie$0$bufsize_.1 := _v2.bufsize_.1;
+ inline$_v2.encode_ie$0$ie_.1 := _v2.ie_.1;
+ inline$_v2.encode_ie$0$ielen_.1 := _v2.ielen_.1;
+ inline$_v2.encode_ie$0$leader_.1 := _v2.leader_.1;
+ inline$_v2.encode_ie$0$leader_len_.1 := _v2.leader_len_.1;
+ havoc inline$_v2.encode_ie$0$havoc_stringTemp, inline$_v2.encode_ie$0$condVal, inline$_v2.encode_ie$0$buf, inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ie, inline$_v2.encode_ie$0$ielen, inline$_v2.encode_ie$0$leader, inline$_v2.encode_ie$0$leader_len, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$result.memcpy$2, inline$_v2.encode_ie$0$$result.question.3.$$static$, inline$_v2.encode_ie$0$tempBoogie0, inline$_v2.encode_ie$0$tempBoogie1, inline$_v2.encode_ie$0$tempBoogie2, inline$_v2.encode_ie$0$tempBoogie3, inline$_v2.encode_ie$0$tempBoogie4, inline$_v2.encode_ie$0$tempBoogie5, inline$_v2.encode_ie$0$tempBoogie6, inline$_v2.encode_ie$0$tempBoogie7, inline$_v2.encode_ie$0$tempBoogie8, inline$_v2.encode_ie$0$tempBoogie9, inline$_v2.encode_ie$0$tempBoogie10, inline$_v2.encode_ie$0$tempBoogie11, inline$_v2.encode_ie$0$tempBoogie12, inline$_v2.encode_ie$0$tempBoogie13, inline$_v2.encode_ie$0$tempBoogie14, inline$_v2.encode_ie$0$tempBoogie15, inline$_v2.encode_ie$0$tempBoogie16, inline$_v2.encode_ie$0$tempBoogie17, inline$_v2.encode_ie$0$tempBoogie18, inline$_v2.encode_ie$0$tempBoogie19, inline$_v2.encode_ie$0$__havoc_dummy_return, inline$_v2.encode_ie$0$result.encode_ie$1;
+ inline$_v2.encode_ie$0$_v2.OK := _v2.OK;
+ inline$_v2.encode_ie$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
+ goto inline$_v2.encode_ie$0$anon0#2;
+
+ inline$_v2.encode_ie$0$anon0#2:
+ inline$_v2.encode_ie$0$havoc_stringTemp := 0;
+ goto inline$_v2.encode_ie$0$start#2;
+
+ inline$_v2.encode_ie$0$start#2:
+ assume _v2.INT_LT(inline$_v2.encode_ie$0$buf_.1, _v2.alloc);
+ assume _v2.INT_LT(inline$_v2.encode_ie$0$ie_.1, _v2.alloc);
+ assume _v2.INT_LT(inline$_v2.encode_ie$0$leader_.1, _v2.alloc);
+ inline$_v2.encode_ie$0$buf := 0;
+ assume _v2.INT_GEQ(inline$_v2.encode_ie$0$buf_.1, 0);
+ inline$_v2.encode_ie$0$bufsize := 0;
+ inline$_v2.encode_ie$0$i := 0;
+ inline$_v2.encode_ie$0$ie := 0;
+ assume _v2.INT_GEQ(inline$_v2.encode_ie$0$ie_.1, 0);
+ inline$_v2.encode_ie$0$ielen := 0;
+ inline$_v2.encode_ie$0$leader := 0;
+ assume _v2.INT_GEQ(inline$_v2.encode_ie$0$leader_.1, 0);
+ inline$_v2.encode_ie$0$leader_len := 0;
+ inline$_v2.encode_ie$0$p := 0;
+ inline$_v2.encode_ie$0$result.encode_ie$1 := 0;
+ inline$_v2.encode_ie$0$result.memcpy$2 := 0;
+ inline$_v2.encode_ie$0$$result.question.3.$$static$ := 0;
+ inline$_v2.encode_ie$0$buf := inline$_v2.encode_ie$0$buf_.1;
+ inline$_v2.encode_ie$0$bufsize := inline$_v2.encode_ie$0$bufsize_.1;
+ inline$_v2.encode_ie$0$ie := inline$_v2.encode_ie$0$ie_.1;
+ inline$_v2.encode_ie$0$ielen := inline$_v2.encode_ie$0$ielen_.1;
+ inline$_v2.encode_ie$0$leader := inline$_v2.encode_ie$0$leader_.1;
+ inline$_v2.encode_ie$0$leader_len := inline$_v2.encode_ie$0$leader_len_.1;
+ goto inline$_v2.encode_ie$0$label_3#2;
+
+ inline$_v2.encode_ie$0$label_3#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 9} true;
+ goto inline$_v2.encode_ie$0$label_4#2;
+
+ inline$_v2.encode_ie$0$label_4#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 10} true;
+ goto inline$_v2.encode_ie$0$label_5#2;
+
+ inline$_v2.encode_ie$0$label_5#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 13} true;
+ goto inline$_v2.encode_ie$0$label_5_true#2, inline$_v2.encode_ie$0$label_5_false#2;
+
+ inline$_v2.encode_ie$0$label_5_false#2:
+ assume !_v2.INT_LT(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$leader_len);
+ assume _v2.value_is(_v2.__ctobpl_const_1, inline$_v2.encode_ie$0$bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_2, inline$_v2.encode_ie$0$leader_len);
+ goto inline$_v2.encode_ie$0$label_6#2;
+
+ inline$_v2.encode_ie$0$label_6#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 15} true;
+ inline$_v2.encode_ie$0$p := inline$_v2.encode_ie$0$buf;
+ assume _v2.value_is(_v2.__ctobpl_const_3, inline$_v2.encode_ie$0$p);
+ assume _v2.value_is(_v2.__ctobpl_const_4, inline$_v2.encode_ie$0$buf);
+ goto inline$_v2.encode_ie$0$label_8#2;
+
+ inline$_v2.encode_ie$0$label_8#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 16} true;
+ _v2.memcpy_in_3_0, _v2.memcpy_in_3_1, _v2.memcpy_in_3_2, _v2.memcpy_in_3_3, _v2.memcpy_in_3_4 := inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$leader, inline$_v2.encode_ie$0$leader_len, _v2.OK, _v2.Mem_T.UCHAR;
+ call inline$_v2.encode_ie$0$result.memcpy$2 := _v2.memcpy(inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$leader, inline$_v2.encode_ie$0$leader_len);
+ _v2.memcpy_3_done := true;
+ _v2.memcpy_out_3_0 := inline$_v2.encode_ie$0$result.memcpy$2;
+ assume _v2.value_is(_v2.__ctobpl_const_5, inline$_v2.encode_ie$0$p);
+ assume _v2.value_is(_v2.__ctobpl_const_6, inline$_v2.encode_ie$0$leader);
+ assume _v2.value_is(_v2.__ctobpl_const_7, inline$_v2.encode_ie$0$leader_len);
+ assume _v2.value_is(_v2.__ctobpl_const_8, inline$_v2.encode_ie$0$p);
+ assume _v2.value_is(_v2.__ctobpl_const_9, inline$_v2.encode_ie$0$leader);
+ assume _v2.value_is(_v2.__ctobpl_const_10, inline$_v2.encode_ie$0$leader_len);
+ goto inline$_v2.encode_ie$0$label_11#2;
+
+ inline$_v2.encode_ie$0$label_11#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 17} true;
+ havoc inline$_v2.encode_ie$0$tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$leader_len, 1, inline$_v2.encode_ie$0$tempBoogie0);
+ inline$_v2.encode_ie$0$bufsize := inline$_v2.encode_ie$0$tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_11, inline$_v2.encode_ie$0$bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_12, inline$_v2.encode_ie$0$leader_len);
+ goto inline$_v2.encode_ie$0$label_12#2;
+
+ inline$_v2.encode_ie$0$label_12#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 18} true;
+ inline$_v2.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, inline$_v2.encode_ie$0$leader_len);
+ inline$_v2.encode_ie$0$p := inline$_v2.encode_ie$0$tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_13, inline$_v2.encode_ie$0$p);
+ assume _v2.value_is(_v2.__ctobpl_const_14, inline$_v2.encode_ie$0$leader_len);
+ goto inline$_v2.encode_ie$0$label_13#2;
+
+ inline$_v2.encode_ie$0$label_13#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ inline$_v2.encode_ie$0$i := 0;
+ assume _v2.value_is(_v2.__ctobpl_const_15, inline$_v2.encode_ie$0$i);
+ goto inline$_v2.encode_ie$0$label_14#2;
+
+ inline$_v2.encode_ie$0$label_14#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ goto inline$_v2.encode_ie$0$label_14_head#2;
+
+ inline$_v2.encode_ie$0$label_14_head#2:
+ _v2.encode_ie_loop_label_14_head_in_4_0, _v2.encode_ie_loop_label_14_head_in_4_1, _v2.encode_ie_loop_label_14_head_in_4_2, _v2.encode_ie_loop_label_14_head_in_4_3, _v2.encode_ie_loop_label_14_head_in_4_4, _v2.encode_ie_loop_label_14_head_in_4_5, _v2.encode_ie_loop_label_14_head_in_4_6 := inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0, _v2.OK, _v2.Mem_T.UCHAR;
+ call inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0 := _v2.encode_ie_loop_label_14_head(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0);
+ _v2.encode_ie_loop_label_14_head_4_done := true;
+ _v2.encode_ie_loop_label_14_head_out_4_0, _v2.encode_ie_loop_label_14_head_out_4_1, _v2.encode_ie_loop_label_14_head_out_4_2, _v2.encode_ie_loop_label_14_head_out_4_3, _v2.encode_ie_loop_label_14_head_out_4_4, _v2.encode_ie_loop_label_14_head_out_4_5 := inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$tempBoogie0, _v2.Mem_T.UCHAR, _v2.OK;
+ goto inline$_v2.encode_ie$0$label_14_head_last#2;
+
+ inline$_v2.encode_ie$0$label_14_head_last#2:
+ goto inline$_v2.encode_ie$0$label_14_true#2, inline$_v2.encode_ie$0$label_14_false#2;
+
+ inline$_v2.encode_ie$0$label_14_false#2:
+ assume !_v2.INT_LT(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie$0$i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie$0$ielen);
+ goto inline$_v2.encode_ie$0$label_15#2;
+
+ inline$_v2.encode_ie$0$label_14_true#2:
+ assume _v2.INT_LT(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie$0$i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie$0$ielen);
+ goto inline$_v2.encode_ie$0$label_16#2;
+
+ inline$_v2.encode_ie$0$label_16#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ goto inline$_v2.encode_ie$0$label_16_true#2, inline$_v2.encode_ie$0$label_16_false#2;
+
+ inline$_v2.encode_ie$0$label_16_false#2:
+ assume !_v2.INT_LT(2, inline$_v2.encode_ie$0$bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie$0$bufsize);
+ goto inline$_v2.encode_ie$0$label_15#2;
+
+ inline$_v2.encode_ie$0$label_15#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ goto inline$_v2.encode_ie$0$label_15_true#2, inline$_v2.encode_ie$0$label_15_false#2;
+
+ inline$_v2.encode_ie$0$label_15_false#2:
+ assume !_v2.INT_EQ(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_18, inline$_v2.encode_ie$0$i);
+ assume _v2.value_is(_v2.__ctobpl_const_19, inline$_v2.encode_ie$0$ielen);
+ goto inline$_v2.encode_ie$0$label_22#2;
+
+ inline$_v2.encode_ie$0$label_22#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ inline$_v2.encode_ie$0$$result.question.3.$$static$ := 0;
+ assume _v2.value_is(_v2.__ctobpl_const_28, inline$_v2.encode_ie$0$$result.question.3.$$static$);
+ goto inline$_v2.encode_ie$0$label_24#2;
+
+ inline$_v2.encode_ie$0$label_15_true#2:
+ assume _v2.INT_EQ(inline$_v2.encode_ie$0$i, inline$_v2.encode_ie$0$ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_18, inline$_v2.encode_ie$0$i);
+ assume _v2.value_is(_v2.__ctobpl_const_19, inline$_v2.encode_ie$0$ielen);
+ goto inline$_v2.encode_ie$0$label_23#2;
+
+ inline$_v2.encode_ie$0$label_23#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ havoc inline$_v2.encode_ie$0$$result.question.3.$$static$;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie$0$p, inline$_v2.encode_ie$0$buf, 1, inline$_v2.encode_ie$0$$result.question.3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_29, inline$_v2.encode_ie$0$$result.question.3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_30, inline$_v2.encode_ie$0$p);
+ assume _v2.value_is(_v2.__ctobpl_const_31, inline$_v2.encode_ie$0$buf);
+ goto inline$_v2.encode_ie$0$label_24#2;
+
+ inline$_v2.encode_ie$0$label_24#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 39} true;
+ inline$_v2.encode_ie$0$result.encode_ie$1 := inline$_v2.encode_ie$0$$result.question.3.$$static$;
+ assume _v2.value_is(_v2.__ctobpl_const_32, inline$_v2.encode_ie$0$$result.question.3.$$static$);
+ goto inline$_v2.encode_ie$0$label_1#2;
+
+ inline$_v2.encode_ie$0$label_16_true#2:
+ assume _v2.INT_LT(2, inline$_v2.encode_ie$0$bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie$0$bufsize);
+ goto inline$_v2.encode_ie$0$label_17#2;
+
+ inline$_v2.encode_ie$0$label_17#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(inline$_v2.encode_ie$0$p, 0);
+ _v2.OK := _v2.OK && _v2.Res_VALID_REGION(inline$_v2.encode_ie$0$p) == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[inline$_v2.encode_ie$0$p := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_21, inline$_v2.encode_ie$0$p);
+ assume _v2.value_is(_v2.__ctobpl_const_22, _v2.Mem_T.UCHAR[inline$_v2.encode_ie$0$p]);
+ goto inline$_v2.encode_ie$0$label_18#2;
+
+ inline$_v2.encode_ie$0$label_18#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1), 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1)) == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1) := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_23, inline$_v2.encode_ie$0$p);
+ assume _v2.value_is(_v2.__ctobpl_const_24,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 1)]);
+ goto inline$_v2.encode_ie$0$label_19#2;
+
+ inline$_v2.encode_ie$0$label_19#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
+ inline$_v2.encode_ie$0$tempBoogie0 := _v2.INT_PLUS(inline$_v2.encode_ie$0$p, 1, 2);
+ inline$_v2.encode_ie$0$p := inline$_v2.encode_ie$0$tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_25, inline$_v2.encode_ie$0$p);
+ goto inline$_v2.encode_ie$0$label_20#2;
+
+ inline$_v2.encode_ie$0$label_20#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
+ havoc inline$_v2.encode_ie$0$tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie$0$bufsize, 2, 1, inline$_v2.encode_ie$0$tempBoogie0);
+ inline$_v2.encode_ie$0$bufsize := inline$_v2.encode_ie$0$tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_26, inline$_v2.encode_ie$0$bufsize);
+ goto inline$_v2.encode_ie$0$label_21#2;
+
+ inline$_v2.encode_ie$0$label_21#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v2.__ctobpl_const_27, inline$_v2.encode_ie$0$i);
+ inline$_v2.encode_ie$0$i := _v2.INT_PLUS(inline$_v2.encode_ie$0$i, 1, 1);
+ goto inline$_v2.encode_ie$0$label_21_dummy#2;
+
+ inline$_v2.encode_ie$0$label_21_dummy#2:
+ assume false;
+ goto inline$_v2.encode_ie$0$Return;
+
+ inline$_v2.encode_ie$0$label_5_true#2:
+ assume _v2.INT_LT(inline$_v2.encode_ie$0$bufsize, inline$_v2.encode_ie$0$leader_len);
+ assume _v2.value_is(_v2.__ctobpl_const_1, inline$_v2.encode_ie$0$bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_2, inline$_v2.encode_ie$0$leader_len);
+ goto inline$_v2.encode_ie$0$label_7#2;
+
+ inline$_v2.encode_ie$0$label_7#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 14} true;
+ inline$_v2.encode_ie$0$result.encode_ie$1 := 0;
+ goto inline$_v2.encode_ie$0$label_1#2;
+
+ inline$_v2.encode_ie$0$label_1#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 40} true;
+ goto inline$_v2.encode_ie$0$Return;
+
+ inline$_v2.encode_ie$0$Return:
+ assume true;
+ _v2.result.encode_ie$1 := inline$_v2.encode_ie$0$result.encode_ie$1;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_1;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.memcpy_1_done && _v2.memcpy_3_done;
+ store__0__v1.OK, store__0__v1.Mem_T.UCHAR := _v1.OK, _v1.Mem_T.UCHAR;
+ store__0__v2.OK, store__0__v2.Mem_T.UCHAR := _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.OK, _v1.Mem_T.UCHAR := _v1.memcpy_in_1_3, _v1.memcpy_in_1_4;
+ _v2.OK, _v2.Mem_T.UCHAR := _v2.memcpy_in_3_3, _v2.memcpy_in_3_4;
+ call out__v1.memcpy_out_1_0_0, out__v2.memcpy_out_3_0_0 := MS_Check__v1.memcpy___v2.memcpy(_v1.memcpy_in_1_0, _v1.memcpy_in_1_1, _v1.memcpy_in_1_2, _v2.memcpy_in_3_0, _v2.memcpy_in_3_1, _v2.memcpy_in_3_2);
+ assume true;
+ assume true;
+ assume _v1.memcpy_out_1_0 == out__v1.memcpy_out_1_0_0
+ && _v2.memcpy_out_3_0 == out__v2.memcpy_out_3_0_0;
+ _v1.OK, _v1.Mem_T.UCHAR := store__0__v1.OK, store__0__v1.Mem_T.UCHAR;
+ _v2.OK, _v2.Mem_T.UCHAR := store__0__v2.OK, store__0__v2.Mem_T.UCHAR;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.memcpy_1_done && _v2.memcpy_3_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+
+ MS_L_0_1:
+ goto MS_L_taken_1, MS_L_not_taken_1;
+
+ MS_L_taken_1:
+ assume _v1.encode_ie_loop_label_14_head_2_done
+ && _v2.encode_ie_loop_label_14_head_4_done;
+ store__1__v1.OK, store__1__v1.Mem_T.UCHAR := _v1.OK, _v1.Mem_T.UCHAR;
+ store__1__v2.OK, store__1__v2.Mem_T.UCHAR := _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.OK, _v1.Mem_T.UCHAR := _v1.encode_ie_loop_label_14_head_in_2_5, _v1.encode_ie_loop_label_14_head_in_2_6;
+ _v2.OK, _v2.Mem_T.UCHAR := _v2.encode_ie_loop_label_14_head_in_4_5, _v2.encode_ie_loop_label_14_head_in_4_6;
+ call out__v1.encode_ie_loop_label_14_head_out_2_0_1, out__v1.encode_ie_loop_label_14_head_out_2_1_1, out__v1.encode_ie_loop_label_14_head_out_2_2_1, out__v2.encode_ie_loop_label_14_head_out_4_0_1, out__v2.encode_ie_loop_label_14_head_out_4_1_1, out__v2.encode_ie_loop_label_14_head_out_4_2_1, out__v2.encode_ie_loop_label_14_head_out_4_3_1 := MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.encode_ie_loop_label_14_head_in_2_0, _v1.encode_ie_loop_label_14_head_in_2_1, _v1.encode_ie_loop_label_14_head_in_2_2, _v1.encode_ie_loop_label_14_head_in_2_3, _v1.encode_ie_loop_label_14_head_in_2_4, _v2.encode_ie_loop_label_14_head_in_4_0, _v2.encode_ie_loop_label_14_head_in_4_1, _v2.encode_ie_loop_label_14_head_in_4_2, _v2.encode_ie_loop_label_14_head_in_4_3, _v2.encode_ie_loop_label_14_head_in_4_4);
+ assume _v1.Mem_T.UCHAR == _v1.encode_ie_loop_label_14_head_out_2_3
+ && (_v1.OK <==> _v1.encode_ie_loop_label_14_head_out_2_4);
+ assume _v2.Mem_T.UCHAR == _v2.encode_ie_loop_label_14_head_out_4_4
+ && (_v2.OK <==> _v2.encode_ie_loop_label_14_head_out_4_5);
+ assume _v1.encode_ie_loop_label_14_head_out_2_0
+ == out__v1.encode_ie_loop_label_14_head_out_2_0_1
+ && _v1.encode_ie_loop_label_14_head_out_2_1
+ == out__v1.encode_ie_loop_label_14_head_out_2_1_1
+ && _v1.encode_ie_loop_label_14_head_out_2_2
+ == out__v1.encode_ie_loop_label_14_head_out_2_2_1
+ && _v2.encode_ie_loop_label_14_head_out_4_0
+ == out__v2.encode_ie_loop_label_14_head_out_4_0_1
+ && _v2.encode_ie_loop_label_14_head_out_4_1
+ == out__v2.encode_ie_loop_label_14_head_out_4_1_1
+ && _v2.encode_ie_loop_label_14_head_out_4_2
+ == out__v2.encode_ie_loop_label_14_head_out_4_2_1
+ && _v2.encode_ie_loop_label_14_head_out_4_3
+ == out__v2.encode_ie_loop_label_14_head_out_4_3_1;
+ _v1.OK, _v1.Mem_T.UCHAR := store__1__v1.OK, store__1__v1.Mem_T.UCHAR;
+ _v2.OK, _v2.Mem_T.UCHAR := store__1__v2.OK, store__1__v2.Mem_T.UCHAR;
+ goto MS_L_meet_1;
+
+ MS_L_not_taken_1:
+ assume !(_v1.encode_ie_loop_label_14_head_2_done
+ && _v2.encode_ie_loop_label_14_head_4_done);
+ goto MS_L_meet_1;
+
+ MS_L_meet_1:
+ goto MS_L_0_0;
+}
+
+
+
+function {:inline true} MS$_v1.encode_ie_loop_label_14_head$_v2.encode_ie_loop_label_14_head(_v1.in_bufsize: int,
+ _v1.in_i: int,
+ _v1.in_ielen: int,
+ _v1.in_p: int,
+ _v1.in_tempBoogie0: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.Mem_T.UCHAR_: [int]int,
+ _v1.OK_: bool,
+ _v1.out_i: int,
+ _v1.out_p: int,
+ _v1.out_tempBoogie0: int,
+ _v2.in_bufsize: int,
+ _v2.in_i: int,
+ _v2.in_ielen: int,
+ _v2.in_p: int,
+ _v2.in_tempBoogie0: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.Mem_T.UCHAR_: [int]int,
+ _v2.OK_: bool,
+ _v2.out_bufsize: int,
+ _v2.out_i: int,
+ _v2.out_p: int,
+ _v2.out_tempBoogie0: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_115: bool;
+
+const {:existential true} _houdini_116: bool;
+
+const {:existential true} _houdini_117: bool;
+
+const {:existential true} _houdini_118: bool;
+
+const {:existential true} _houdini_119: bool;
+
+const {:existential true} _houdini_120: bool;
+
+const {:existential true} _houdini_121: bool;
+
+const {:existential true} _houdini_122: bool;
+
+const {:existential true} _houdini_123: bool;
+
+const {:existential true} _houdini_124: bool;
+
+const {:existential true} _houdini_125: bool;
+
+const {:existential true} _houdini_126: bool;
+
+const {:existential true} _houdini_127: bool;
+
+const {:existential true} _houdini_128: bool;
+
+const {:existential true} _houdini_129: bool;
+
+const {:existential true} _houdini_130: bool;
+
+const {:existential true} _houdini_131: bool;
+
+const {:existential true} _houdini_132: bool;
+
+const {:existential true} _houdini_133: bool;
+
+const {:existential true} _houdini_134: bool;
+
+const {:existential true} _houdini_135: bool;
+
+const {:existential true} _houdini_136: bool;
+
+const {:existential true} _houdini_137: bool;
+
+const {:existential true} _houdini_138: bool;
+
+const {:existential true} _houdini_139: bool;
+
+const {:existential true} _houdini_140: bool;
+
+const {:existential true} _houdini_141: bool;
+
+const {:existential true} _houdini_142: bool;
+
+const {:existential true} _houdini_143: bool;
+
+const {:existential true} _houdini_144: bool;
+
+const {:existential true} _houdini_145: bool;
+
+const {:existential true} _houdini_146: bool;
+
+const {:existential true} _houdini_147: bool;
+
+const {:existential true} _houdini_148: bool;
+
+const {:existential true} _houdini_149: bool;
+
+const {:existential true} _houdini_150: bool;
+
+const {:existential true} _houdini_151: bool;
+
+const {:existential true} _houdini_152: bool;
+
+const {:existential true} _houdini_153: bool;
+
+const {:existential true} _houdini_154: bool;
+
+const {:existential true} _houdini_155: bool;
+
+procedure MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.in_bufsize: int,
+ _v1.in_i: int,
+ _v1.in_ielen: int,
+ _v1.in_p: int,
+ _v1.in_tempBoogie0: int,
+ _v2.in_bufsize: int,
+ _v2.in_i: int,
+ _v2.in_ielen: int,
+ _v2.in_p: int,
+ _v2.in_tempBoogie0: int)
+ returns (_v1.out_i: int,
+ _v1.out_p: int,
+ _v1.out_tempBoogie0: int,
+ _v2.out_bufsize: int,
+ _v2.out_i: int,
+ _v2.out_p: int,
+ _v2.out_tempBoogie0: int);
+ requires _houdini_124 ==> _v1.in_bufsize <= _v2.in_bufsize;
+ requires _houdini_125 ==> _v2.in_bufsize <= _v1.in_bufsize;
+ requires _houdini_126 ==> _v1.in_i <= _v2.in_i;
+ requires _houdini_127 ==> _v2.in_i <= _v1.in_i;
+ requires _houdini_128 ==> _v1.in_ielen <= _v2.in_ielen;
+ requires _houdini_129 ==> _v2.in_ielen <= _v1.in_ielen;
+ requires _houdini_130 ==> _v1.in_p <= _v2.in_p;
+ requires _houdini_131 ==> _v2.in_p <= _v1.in_p;
+ requires _houdini_132 ==> _v1.in_tempBoogie0 <= _v2.in_tempBoogie0;
+ requires _houdini_133 ==> _v2.in_tempBoogie0 <= _v1.in_tempBoogie0;
+ requires _houdini_134 ==> _v1.OK ==> _v2.OK;
+ requires _houdini_135 ==> _v2.OK ==> _v1.OK;
+ requires _houdini_136 ==> _v1.Mem == _v2.Mem;
+ requires _houdini_137 ==> _v1.alloc <= _v2.alloc;
+ requires _houdini_138 ==> _v2.alloc <= _v1.alloc;
+ requires _houdini_139 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
+ requires _houdini_140 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
+ requires _houdini_141 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
+ requires _houdini_142 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
+ requires _houdini_143 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
+ requires _houdini_144 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
+ requires _houdini_145 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
+ requires _houdini_146 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
+ requires _houdini_147
+ ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
+ requires _houdini_148 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+ requires _houdini_149 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
+ requires _houdini_150
+ ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
+ requires _houdini_151
+ ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ requires _houdini_152 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
+ requires _houdini_153 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
+ requires _houdini_154 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
+ requires _houdini_155 ==> _v1.Res_PROBED == _v2.Res_PROBED;
+ modifies _v1.Mem_T.UCHAR, _v1.OK, _v2.Mem_T.UCHAR, _v2.OK;
+ ensures MS$_v1.encode_ie_loop_label_14_head$_v2.encode_ie_loop_label_14_head(_v1.in_bufsize,
+ _v1.in_i,
+ _v1.in_ielen,
+ _v1.in_p,
+ _v1.in_tempBoogie0,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.Mem_T.UCHAR,
+ _v1.OK,
+ _v1.out_i,
+ _v1.out_p,
+ _v1.out_tempBoogie0,
+ _v2.in_bufsize,
+ _v2.in_i,
+ _v2.in_ielen,
+ _v2.in_p,
+ _v2.in_tempBoogie0,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.Mem_T.UCHAR,
+ _v2.OK,
+ _v2.out_bufsize,
+ _v2.out_i,
+ _v2.out_p,
+ _v2.out_tempBoogie0);
+ ensures _houdini_115 ==> _v1.out_i <= _v2.out_i;
+ ensures _houdini_116 ==> _v2.out_i <= _v1.out_i;
+ ensures _houdini_117 ==> _v1.out_p <= _v2.out_p;
+ ensures _houdini_118 ==> _v2.out_p <= _v1.out_p;
+ ensures _houdini_119 ==> _v1.out_tempBoogie0 <= _v2.out_tempBoogie0;
+ ensures _houdini_120 ==> _v2.out_tempBoogie0 <= _v1.out_tempBoogie0;
+ ensures _houdini_121 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+ ensures _houdini_122 ==> _v1.OK ==> _v2.OK;
+ ensures _houdini_123 ==> _v2.OK ==> _v1.OK;
+
+
+
+implementation MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.in_bufsize: int,
+ _v1.in_i: int,
+ _v1.in_ielen: int,
+ _v1.in_p: int,
+ _v1.in_tempBoogie0: int,
+ _v2.in_bufsize: int,
+ _v2.in_i: int,
+ _v2.in_ielen: int,
+ _v2.in_p: int,
+ _v2.in_tempBoogie0: int)
+ returns (_v1.out_i: int,
+ _v1.out_p: int,
+ _v1.out_tempBoogie0: int,
+ _v2.out_bufsize: int,
+ _v2.out_i: int,
+ _v2.out_p: int,
+ _v2.out_tempBoogie0: int)
+{
+ var inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$in_i: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$in_ielen: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$in_p: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$out_i: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$out_p: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0: int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR: [int]int;
+ var inline$_v1.encode_ie_loop_label_14_head$0$_v1.OK: bool;
+ var inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$in_i: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$in_ielen: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$in_p: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$out_i: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$out_p: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0: int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR: [int]int;
+ var inline$_v2.encode_ie_loop_label_14_head$0$_v2.OK: bool;
+ var _v1.encode_ie_loop_label_14_head_1_done: bool;
+ var _v1.encode_ie_loop_label_14_head_in_1_0: int;
+ var _v1.encode_ie_loop_label_14_head_in_1_1: int;
+ var _v1.encode_ie_loop_label_14_head_in_1_2: int;
+ var _v1.encode_ie_loop_label_14_head_in_1_3: int;
+ var _v1.encode_ie_loop_label_14_head_in_1_4: int;
+ var _v1.encode_ie_loop_label_14_head_in_1_5: [int]int;
+ var _v1.encode_ie_loop_label_14_head_in_1_6: bool;
+ var _v1.encode_ie_loop_label_14_head_out_1_0: int;
+ var _v1.encode_ie_loop_label_14_head_out_1_1: int;
+ var _v1.encode_ie_loop_label_14_head_out_1_2: int;
+ var _v1.encode_ie_loop_label_14_head_out_1_3: [int]int;
+ var _v1.encode_ie_loop_label_14_head_out_1_4: bool;
+ var _v2.encode_ie_loop_label_14_head_2_done: bool;
+ var _v2.encode_ie_loop_label_14_head_in_2_0: int;
+ var _v2.encode_ie_loop_label_14_head_in_2_1: int;
+ var _v2.encode_ie_loop_label_14_head_in_2_2: int;
+ var _v2.encode_ie_loop_label_14_head_in_2_3: int;
+ var _v2.encode_ie_loop_label_14_head_in_2_4: int;
+ var _v2.encode_ie_loop_label_14_head_in_2_5: [int]int;
+ var _v2.encode_ie_loop_label_14_head_in_2_6: bool;
+ var _v2.encode_ie_loop_label_14_head_out_2_0: int;
+ var _v2.encode_ie_loop_label_14_head_out_2_1: int;
+ var _v2.encode_ie_loop_label_14_head_out_2_2: int;
+ var _v2.encode_ie_loop_label_14_head_out_2_3: int;
+ var _v2.encode_ie_loop_label_14_head_out_2_4: [int]int;
+ var _v2.encode_ie_loop_label_14_head_out_2_5: bool;
+ var store__0__v1.Mem_T.UCHAR: [int]int;
+ var store__0__v1.OK: bool;
+ var store__0__v2.Mem_T.UCHAR: [int]int;
+ var store__0__v2.OK: bool;
+ var out__v1.encode_ie_loop_label_14_head_out_1_0_0: int;
+ var out__v1.encode_ie_loop_label_14_head_out_1_1_0: int;
+ var out__v1.encode_ie_loop_label_14_head_out_1_2_0: int;
+ var out__v2.encode_ie_loop_label_14_head_out_2_0_0: int;
+ var out__v2.encode_ie_loop_label_14_head_out_2_1_0: int;
+ var out__v2.encode_ie_loop_label_14_head_out_2_2_0: int;
+ var out__v2.encode_ie_loop_label_14_head_out_2_3_0: int;
+
+ START:
+ _v1.encode_ie_loop_label_14_head_1_done, _v2.encode_ie_loop_label_14_head_2_done := false, false;
+ goto inline$_v1.encode_ie_loop_label_14_head$0$Entry;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$Entry:
+ inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize := _v1.in_bufsize;
+ inline$_v1.encode_ie_loop_label_14_head$0$in_i := _v1.in_i;
+ inline$_v1.encode_ie_loop_label_14_head$0$in_ielen := _v1.in_ielen;
+ inline$_v1.encode_ie_loop_label_14_head$0$in_p := _v1.in_p;
+ inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0 := _v1.in_tempBoogie0;
+ havoc inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
+ inline$_v1.encode_ie_loop_label_14_head$0$_v1.OK := _v1.OK;
+ goto inline$_v1.encode_ie_loop_label_14_head$0$entry#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$entry#2:
+ inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$in_i, inline$_v1.encode_ie_loop_label_14_head$0$in_p, inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0;
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_14_head#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_14_head#2:
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_14_true#2, inline$_v1.encode_ie_loop_label_14_head$0$label_14_false#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_14_false#2:
+ assume !_v2.INT_LT(inline$_v1.encode_ie_loop_label_14_head$0$out_i,
+ inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie_loop_label_14_head$0$out_i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
+ inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$in_i, inline$_v1.encode_ie_loop_label_14_head$0$in_p, inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0;
+ _v1.Mem_T.UCHAR := inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR;
+ goto inline$_v1.encode_ie_loop_label_14_head$0$Return;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_14_true#2:
+ assume _v2.INT_LT(inline$_v1.encode_ie_loop_label_14_head$0$out_i,
+ inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
+ assume _v2.value_is(_v1.__ctobpl_const_16, inline$_v1.encode_ie_loop_label_14_head$0$out_i);
+ assume _v2.value_is(_v1.__ctobpl_const_17, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen);
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_16#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_16#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_16_true#2, inline$_v1.encode_ie_loop_label_14_head$0$label_16_false#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_16_false#2:
+ assume !_v2.INT_LT(2, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
+ inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$in_i, inline$_v1.encode_ie_loop_label_14_head$0$in_p, inline$_v1.encode_ie_loop_label_14_head$0$in_tempBoogie0;
+ _v1.Mem_T.UCHAR := inline$_v1.encode_ie_loop_label_14_head$0$_v1.Mem_T.UCHAR;
+ goto inline$_v1.encode_ie_loop_label_14_head$0$Return;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_16_true#2:
+ assume _v2.INT_LT(2, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
+ assume _v2.value_is(_v1.__ctobpl_const_20, inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize);
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_17#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_17#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(inline$_v1.encode_ie_loop_label_14_head$0$out_p) == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[inline$_v1.encode_ie_loop_label_14_head$0$out_p := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_21, inline$_v1.encode_ie_loop_label_14_head$0$out_p);
+ assume _v2.value_is(_v1.__ctobpl_const_22,
+ _v1.Mem_T.UCHAR[inline$_v1.encode_ie_loop_label_14_head$0$out_p]);
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_18#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_18#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1), 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1))
+ == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1) := 120];
+ assume _v2.value_is(_v1.__ctobpl_const_23, inline$_v1.encode_ie_loop_label_14_head$0$out_p);
+ assume _v2.value_is(_v1.__ctobpl_const_24,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 1)]);
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_19#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_19#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 33} true;
+ inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_p, 1, 2);
+ inline$_v1.encode_ie_loop_label_14_head$0$out_p := inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ assume _v2.value_is(_v1.__ctobpl_const_25, inline$_v1.encode_ie_loop_label_14_head$0$out_p);
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_20#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_20#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v1.__ctobpl_const_26, inline$_v1.encode_ie_loop_label_14_head$0$out_i);
+ inline$_v1.encode_ie_loop_label_14_head$0$out_i := _v2.INT_PLUS(inline$_v1.encode_ie_loop_label_14_head$0$out_i, 1, 1);
+ goto inline$_v1.encode_ie_loop_label_14_head$0$label_20_dummy#2;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$label_20_dummy#2:
+ _v1.encode_ie_loop_label_14_head_in_1_0, _v1.encode_ie_loop_label_14_head_in_1_1, _v1.encode_ie_loop_label_14_head_in_1_2, _v1.encode_ie_loop_label_14_head_in_1_3, _v1.encode_ie_loop_label_14_head_in_1_4, _v1.encode_ie_loop_label_14_head_in_1_5, _v1.encode_ie_loop_label_14_head_in_1_6 := inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v1.Mem_T.UCHAR, _v1.OK;
+ call inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v1.encode_ie_loop_label_14_head(inline$_v1.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$in_ielen, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0);
+ _v1.encode_ie_loop_label_14_head_1_done := true;
+ _v1.encode_ie_loop_label_14_head_out_1_0, _v1.encode_ie_loop_label_14_head_out_1_1, _v1.encode_ie_loop_label_14_head_out_1_2, _v1.encode_ie_loop_label_14_head_out_1_3, _v1.encode_ie_loop_label_14_head_out_1_4 := inline$_v1.encode_ie_loop_label_14_head$0$out_i, inline$_v1.encode_ie_loop_label_14_head$0$out_p, inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v1.Mem_T.UCHAR, _v1.OK;
+ goto inline$_v1.encode_ie_loop_label_14_head$0$Return;
+
+ inline$_v1.encode_ie_loop_label_14_head$0$Return:
+ assume true;
+ _v1.out_i := inline$_v1.encode_ie_loop_label_14_head$0$out_i;
+ _v1.out_p := inline$_v1.encode_ie_loop_label_14_head$0$out_p;
+ _v1.out_tempBoogie0 := inline$_v1.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.encode_ie_loop_label_14_head$0$Entry;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$Entry:
+ inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize := _v2.in_bufsize;
+ inline$_v2.encode_ie_loop_label_14_head$0$in_i := _v2.in_i;
+ inline$_v2.encode_ie_loop_label_14_head$0$in_ielen := _v2.in_ielen;
+ inline$_v2.encode_ie_loop_label_14_head$0$in_p := _v2.in_p;
+ inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0 := _v2.in_tempBoogie0;
+ havoc inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
+ inline$_v2.encode_ie_loop_label_14_head$0$_v2.OK := _v2.OK;
+ goto inline$_v2.encode_ie_loop_label_14_head$0$entry#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$entry#2:
+ inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$in_i, inline$_v2.encode_ie_loop_label_14_head$0$in_p, inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0;
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_14_head#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_14_head#2:
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_14_true#2, inline$_v2.encode_ie_loop_label_14_head$0$label_14_false#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_14_false#2:
+ assume !_v2.INT_LT(inline$_v2.encode_ie_loop_label_14_head$0$out_i,
+ inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie_loop_label_14_head$0$out_i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
+ inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$in_i, inline$_v2.encode_ie_loop_label_14_head$0$in_p, inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0;
+ _v2.Mem_T.UCHAR := inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR;
+ goto inline$_v2.encode_ie_loop_label_14_head$0$Return;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_14_true#2:
+ assume _v2.INT_LT(inline$_v2.encode_ie_loop_label_14_head$0$out_i,
+ inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
+ assume _v2.value_is(_v2.__ctobpl_const_16, inline$_v2.encode_ie_loop_label_14_head$0$out_i);
+ assume _v2.value_is(_v2.__ctobpl_const_17, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen);
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_16#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_16#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_16_true#2, inline$_v2.encode_ie_loop_label_14_head$0$label_16_false#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_16_false#2:
+ assume !_v2.INT_LT(2, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
+ inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$in_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$in_i, inline$_v2.encode_ie_loop_label_14_head$0$in_p, inline$_v2.encode_ie_loop_label_14_head$0$in_tempBoogie0;
+ _v2.Mem_T.UCHAR := inline$_v2.encode_ie_loop_label_14_head$0$_v2.Mem_T.UCHAR;
+ goto inline$_v2.encode_ie_loop_label_14_head$0$Return;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_16_true#2:
+ assume _v2.INT_LT(2, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
+ assume _v2.value_is(_v2.__ctobpl_const_20, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_17#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_17#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 30} true;
+ assume _v2.INT_GEQ(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(inline$_v2.encode_ie_loop_label_14_head$0$out_p) == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[inline$_v2.encode_ie_loop_label_14_head$0$out_p := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_21, inline$_v2.encode_ie_loop_label_14_head$0$out_p);
+ assume _v2.value_is(_v2.__ctobpl_const_22,
+ _v2.Mem_T.UCHAR[inline$_v2.encode_ie_loop_label_14_head$0$out_p]);
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_18#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_18#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 32} true;
+ assume _v2.INT_GEQ(_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1), 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1))
+ == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1) := 120];
+ assume _v2.value_is(_v2.__ctobpl_const_23, inline$_v2.encode_ie_loop_label_14_head$0$out_p);
+ assume _v2.value_is(_v2.__ctobpl_const_24,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 1)]);
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_19#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_19#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 33} true;
+ inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_p, 1, 2);
+ inline$_v2.encode_ie_loop_label_14_head$0$out_p := inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_25, inline$_v2.encode_ie_loop_label_14_head$0$out_p);
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_20#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_20#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 34} true;
+ havoc inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ assume _v2.INT_MINUS_BOTH_PTR_OR_BOTH_INT(inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, 2, 1, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0);
+ inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize := inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ assume _v2.value_is(_v2.__ctobpl_const_26, inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize);
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_21#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_21#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 20} true;
+ assume _v2.value_is(_v2.__ctobpl_const_27, inline$_v2.encode_ie_loop_label_14_head$0$out_i);
+ inline$_v2.encode_ie_loop_label_14_head$0$out_i := _v2.INT_PLUS(inline$_v2.encode_ie_loop_label_14_head$0$out_i, 1, 1);
+ goto inline$_v2.encode_ie_loop_label_14_head$0$label_21_dummy#2;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$label_21_dummy#2:
+ _v2.encode_ie_loop_label_14_head_in_2_0, _v2.encode_ie_loop_label_14_head_in_2_1, _v2.encode_ie_loop_label_14_head_in_2_2, _v2.encode_ie_loop_label_14_head_in_2_3, _v2.encode_ie_loop_label_14_head_in_2_4, _v2.encode_ie_loop_label_14_head_in_2_5, _v2.encode_ie_loop_label_14_head_in_2_6 := inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v2.Mem_T.UCHAR, _v2.OK;
+ call inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0 := _v2.encode_ie_loop_label_14_head(inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$in_ielen, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0);
+ _v2.encode_ie_loop_label_14_head_2_done := true;
+ _v2.encode_ie_loop_label_14_head_out_2_0, _v2.encode_ie_loop_label_14_head_out_2_1, _v2.encode_ie_loop_label_14_head_out_2_2, _v2.encode_ie_loop_label_14_head_out_2_3, _v2.encode_ie_loop_label_14_head_out_2_4, _v2.encode_ie_loop_label_14_head_out_2_5 := inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize, inline$_v2.encode_ie_loop_label_14_head$0$out_i, inline$_v2.encode_ie_loop_label_14_head$0$out_p, inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0, _v2.Mem_T.UCHAR, _v2.OK;
+ goto inline$_v2.encode_ie_loop_label_14_head$0$Return;
+
+ inline$_v2.encode_ie_loop_label_14_head$0$Return:
+ assume true;
+ _v2.out_bufsize := inline$_v2.encode_ie_loop_label_14_head$0$out_bufsize;
+ _v2.out_i := inline$_v2.encode_ie_loop_label_14_head$0$out_i;
+ _v2.out_p := inline$_v2.encode_ie_loop_label_14_head$0$out_p;
+ _v2.out_tempBoogie0 := inline$_v2.encode_ie_loop_label_14_head$0$out_tempBoogie0;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_0;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.encode_ie_loop_label_14_head_1_done
+ && _v2.encode_ie_loop_label_14_head_2_done;
+ store__0__v1.Mem_T.UCHAR, store__0__v1.OK := _v1.Mem_T.UCHAR, _v1.OK;
+ store__0__v2.Mem_T.UCHAR, store__0__v2.OK := _v2.Mem_T.UCHAR, _v2.OK;
+ _v1.Mem_T.UCHAR, _v1.OK := _v1.encode_ie_loop_label_14_head_in_1_5, _v1.encode_ie_loop_label_14_head_in_1_6;
+ _v2.Mem_T.UCHAR, _v2.OK := _v2.encode_ie_loop_label_14_head_in_2_5, _v2.encode_ie_loop_label_14_head_in_2_6;
+ call out__v1.encode_ie_loop_label_14_head_out_1_0_0, out__v1.encode_ie_loop_label_14_head_out_1_1_0, out__v1.encode_ie_loop_label_14_head_out_1_2_0, out__v2.encode_ie_loop_label_14_head_out_2_0_0, out__v2.encode_ie_loop_label_14_head_out_2_1_0, out__v2.encode_ie_loop_label_14_head_out_2_2_0, out__v2.encode_ie_loop_label_14_head_out_2_3_0 := MS_Check__v1.encode_ie_loop_label_14_head___v2.encode_ie_loop_label_14_head(_v1.encode_ie_loop_label_14_head_in_1_0, _v1.encode_ie_loop_label_14_head_in_1_1, _v1.encode_ie_loop_label_14_head_in_1_2, _v1.encode_ie_loop_label_14_head_in_1_3, _v1.encode_ie_loop_label_14_head_in_1_4, _v2.encode_ie_loop_label_14_head_in_2_0, _v2.encode_ie_loop_label_14_head_in_2_1, _v2.encode_ie_loop_label_14_head_in_2_2, _v2.encode_ie_loop_label_14_head_in_2_3, _v2.encode_ie_loop_label_14_head_in_2_4);
+ assume _v1.Mem_T.UCHAR == _v1.encode_ie_loop_label_14_head_out_1_3
+ && (_v1.OK <==> _v1.encode_ie_loop_label_14_head_out_1_4);
+ assume _v2.Mem_T.UCHAR == _v2.encode_ie_loop_label_14_head_out_2_4
+ && (_v2.OK <==> _v2.encode_ie_loop_label_14_head_out_2_5);
+ assume _v1.encode_ie_loop_label_14_head_out_1_0
+ == out__v1.encode_ie_loop_label_14_head_out_1_0_0
+ && _v1.encode_ie_loop_label_14_head_out_1_1
+ == out__v1.encode_ie_loop_label_14_head_out_1_1_0
+ && _v1.encode_ie_loop_label_14_head_out_1_2
+ == out__v1.encode_ie_loop_label_14_head_out_1_2_0
+ && _v2.encode_ie_loop_label_14_head_out_2_0
+ == out__v2.encode_ie_loop_label_14_head_out_2_0_0
+ && _v2.encode_ie_loop_label_14_head_out_2_1
+ == out__v2.encode_ie_loop_label_14_head_out_2_1_0
+ && _v2.encode_ie_loop_label_14_head_out_2_2
+ == out__v2.encode_ie_loop_label_14_head_out_2_2_0
+ && _v2.encode_ie_loop_label_14_head_out_2_3
+ == out__v2.encode_ie_loop_label_14_head_out_2_3_0;
+ _v1.Mem_T.UCHAR, _v1.OK := store__0__v1.Mem_T.UCHAR, store__0__v1.OK;
+ _v2.Mem_T.UCHAR, _v2.OK := store__0__v2.Mem_T.UCHAR, store__0__v2.OK;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.encode_ie_loop_label_14_head_1_done
+ && _v2.encode_ie_loop_label_14_head_2_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+}
+
+
+
+function {:inline true} MS$_v1.giwscan_cb$_v2.giwscan_cb(_v1.se_.1: int,
+ _v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.alloc_: int,
+ _v1.OK_: bool,
+ _v1.Mem_T.UCHAR_: [int]int,
+ _v1.result.giwscan_cb$1: int,
+ _v2.se_.1: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.alloc_: int,
+ _v2.OK_: bool,
+ _v2.Mem_T.UCHAR_: [int]int,
+ _v2.result.giwscan_cb$1: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_156: bool;
+
+const {:existential true} _houdini_157: bool;
+
+const {:existential true} _houdini_158: bool;
+
+const {:existential true} _houdini_159: bool;
+
+const {:existential true} _houdini_160: bool;
+
+const {:existential true} _houdini_161: bool;
+
+const {:existential true} _houdini_162: bool;
+
+const {:existential true} _houdini_163: bool;
+
+const {:existential true} _houdini_164: bool;
+
+const {:existential true} _houdini_165: bool;
+
+const {:existential true} _houdini_166: bool;
+
+const {:existential true} _houdini_167: bool;
+
+const {:existential true} _houdini_168: bool;
+
+const {:existential true} _houdini_169: bool;
+
+const {:existential true} _houdini_170: bool;
+
+const {:existential true} _houdini_171: bool;
+
+const {:existential true} _houdini_172: bool;
+
+const {:existential true} _houdini_173: bool;
+
+const {:existential true} _houdini_174: bool;
+
+const {:existential true} _houdini_175: bool;
+
+const {:existential true} _houdini_176: bool;
+
+const {:existential true} _houdini_177: bool;
+
+const {:existential true} _houdini_178: bool;
+
+const {:existential true} _houdini_179: bool;
+
+const {:existential true} _houdini_180: bool;
+
+const {:existential true} _houdini_181: bool;
+
+const {:existential true} _houdini_182: bool;
+
+const {:existential true} _houdini_183: bool;
+
+const {:existential true} _houdini_184: bool;
+
+const {:existential true} _houdini_185: bool;
+
+const {:existential true} _houdini_186: bool;
+
+procedure MS_Check__v1.giwscan_cb___v2.giwscan_cb(_v1.se_.1: int, _v2.se_.1: int)
+ returns (_v1.result.giwscan_cb$1: int, _v2.result.giwscan_cb$1: int);
+ requires _houdini_163 ==> _v1.se_.1 <= _v2.se_.1;
+ requires _houdini_164 ==> _v2.se_.1 <= _v1.se_.1;
+ requires _houdini_165 ==> _v1.OK ==> _v2.OK;
+ requires _houdini_166 ==> _v2.OK ==> _v1.OK;
+ requires _houdini_167 ==> _v1.Mem == _v2.Mem;
+ requires _houdini_168 ==> _v1.alloc <= _v2.alloc;
+ requires _houdini_169 ==> _v2.alloc <= _v1.alloc;
+ requires _houdini_170 ==> _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR;
+ requires _houdini_171 ==> _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR;
+ requires _houdini_172 ==> _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR;
+ requires _houdini_173 ==> _v1.Mem_T.CHAR == _v2.Mem_T.CHAR;
+ requires _houdini_174 ==> _v1.Mem_T.INT4 == _v2.Mem_T.INT4;
+ requires _houdini_175 ==> _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR;
+ requires _houdini_176 ==> _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR;
+ requires _houdini_177 ==> _v1.Mem_T.PVOID == _v2.Mem_T.PVOID;
+ requires _houdini_178
+ ==> _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry;
+ requires _houdini_179 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+ requires _houdini_180 ==> _v1.Mem_T.VOID == _v2.Mem_T.VOID;
+ requires _houdini_181
+ ==> _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry;
+ requires _houdini_182
+ ==> _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ requires _houdini_183 ==> _v1.detChoiceCnt <= _v2.detChoiceCnt;
+ requires _houdini_184 ==> _v2.detChoiceCnt <= _v1.detChoiceCnt;
+ requires _houdini_185 ==> _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE;
+ requires _houdini_186 ==> _v1.Res_PROBED == _v2.Res_PROBED;
+ modifies _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ ensures MS$_v1.giwscan_cb$_v2.giwscan_cb(_v1.se_.1,
+ old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.alloc,
+ _v1.OK,
+ _v1.Mem_T.UCHAR,
+ _v1.result.giwscan_cb$1,
+ _v2.se_.1,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.alloc,
+ _v2.OK,
+ _v2.Mem_T.UCHAR,
+ _v2.result.giwscan_cb$1);
+ ensures _houdini_156 ==> _v1.result.giwscan_cb$1 <= _v2.result.giwscan_cb$1;
+ ensures _houdini_157 ==> _v2.result.giwscan_cb$1 <= _v1.result.giwscan_cb$1;
+ ensures _houdini_158 ==> _v1.alloc <= _v2.alloc;
+ ensures _houdini_159 ==> _v2.alloc <= _v1.alloc;
+ ensures _houdini_160 ==> _v1.OK ==> _v2.OK;
+ ensures _houdini_161 ==> _v2.OK ==> _v1.OK;
+ ensures _houdini_162 ==> _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR;
+
+
+
+implementation MS_Check__v1.giwscan_cb___v2.giwscan_cb(_v1.se_.1: int, _v2.se_.1: int)
+ returns (_v1.result.giwscan_cb$1: int, _v2.result.giwscan_cb$1: int)
+{
+ var inline$_v1.giwscan_cb$0$havoc_stringTemp: int;
+ var inline$_v1.giwscan_cb$0$condVal: int;
+ var inline$_v1.giwscan_cb$0$buf: int;
+ var inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$: int;
+ var inline$_v1.giwscan_cb$0$result.encode_ie$2: int;
+ var inline$_v1.giwscan_cb$0$rsn_leader: int;
+ var inline$_v1.giwscan_cb$0$se: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie0: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie1: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie2: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie3: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie4: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie5: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie6: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie7: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie8: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie9: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie10: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie11: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie12: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie13: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie14: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie15: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie16: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie17: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie18: int;
+ var inline$_v1.giwscan_cb$0$tempBoogie19: int;
+ var inline$_v1.giwscan_cb$0$__havoc_dummy_return: int;
+ var inline$_v1.giwscan_cb$0$se_.1: int;
+ var inline$_v1.giwscan_cb$0$result.giwscan_cb$1: int;
+ var inline$_v1.giwscan_cb$0$_v1.alloc: int;
+ var inline$_v1.giwscan_cb$0$_v1.OK: bool;
+ var inline$_v1.giwscan_cb$0$_v1.Mem_T.UCHAR: [int]int;
+ var inline$_v2.giwscan_cb$0$havoc_stringTemp: int;
+ var inline$_v2.giwscan_cb$0$condVal: int;
+ var inline$_v2.giwscan_cb$0$buf: int;
+ var inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$: int;
+ var inline$_v2.giwscan_cb$0$result.encode_ie$2: int;
+ var inline$_v2.giwscan_cb$0$rsn_leader: int;
+ var inline$_v2.giwscan_cb$0$se: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie0: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie1: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie2: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie3: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie4: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie5: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie6: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie7: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie8: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie9: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie10: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie11: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie12: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie13: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie14: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie15: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie16: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie17: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie18: int;
+ var inline$_v2.giwscan_cb$0$tempBoogie19: int;
+ var inline$_v2.giwscan_cb$0$__havoc_dummy_return: int;
+ var inline$_v2.giwscan_cb$0$se_.1: int;
+ var inline$_v2.giwscan_cb$0$result.giwscan_cb$1: int;
+ var inline$_v2.giwscan_cb$0$_v2.alloc: int;
+ var inline$_v2.giwscan_cb$0$_v2.OK: bool;
+ var inline$_v2.giwscan_cb$0$_v2.Mem_T.UCHAR: [int]int;
+ var _v1.__HAVOC_det_malloc_1_done: bool;
+ var _v1.__HAVOC_det_malloc_in_1_0: int;
+ var _v1.__HAVOC_det_malloc_in_1_1: int;
+ var _v1.__HAVOC_det_malloc_in_1_2: bool;
+ var _v1.__HAVOC_det_malloc_in_1_3: [int]int;
+ var _v1.__HAVOC_det_malloc_out_1_0: int;
+ var _v1.__HAVOC_det_malloc_out_1_1: int;
+ var _v1.__HAVOC_det_malloc_2_done: bool;
+ var _v1.__HAVOC_det_malloc_in_2_0: int;
+ var _v1.__HAVOC_det_malloc_in_2_1: int;
+ var _v1.__HAVOC_det_malloc_in_2_2: bool;
+ var _v1.__HAVOC_det_malloc_in_2_3: [int]int;
+ var _v1.__HAVOC_det_malloc_out_2_0: int;
+ var _v1.__HAVOC_det_malloc_out_2_1: int;
+ var _v1.encode_ie_3_done: bool;
+ var _v1.encode_ie_in_3_0: int;
+ var _v1.encode_ie_in_3_1: int;
+ var _v1.encode_ie_in_3_2: int;
+ var _v1.encode_ie_in_3_3: int;
+ var _v1.encode_ie_in_3_4: int;
+ var _v1.encode_ie_in_3_5: int;
+ var _v1.encode_ie_in_3_6: int;
+ var _v1.encode_ie_in_3_7: bool;
+ var _v1.encode_ie_in_3_8: [int]int;
+ var _v1.encode_ie_out_3_0: int;
+ var _v1.encode_ie_out_3_1: bool;
+ var _v1.encode_ie_out_3_2: [int]int;
+ var _v1.__HAVOC_free_4_done: bool;
+ var _v1.__HAVOC_free_in_4_0: int;
+ var _v1.__HAVOC_free_in_4_1: int;
+ var _v1.__HAVOC_free_in_4_2: bool;
+ var _v1.__HAVOC_free_in_4_3: [int]int;
+ var _v1.__HAVOC_free_5_done: bool;
+ var _v1.__HAVOC_free_in_5_0: int;
+ var _v1.__HAVOC_free_in_5_1: int;
+ var _v1.__HAVOC_free_in_5_2: bool;
+ var _v1.__HAVOC_free_in_5_3: [int]int;
+ var _v2.__HAVOC_det_malloc_6_done: bool;
+ var _v2.__HAVOC_det_malloc_in_6_0: int;
+ var _v2.__HAVOC_det_malloc_in_6_1: int;
+ var _v2.__HAVOC_det_malloc_in_6_2: bool;
+ var _v2.__HAVOC_det_malloc_in_6_3: [int]int;
+ var _v2.__HAVOC_det_malloc_out_6_0: int;
+ var _v2.__HAVOC_det_malloc_out_6_1: int;
+ var _v2.__HAVOC_det_malloc_7_done: bool;
+ var _v2.__HAVOC_det_malloc_in_7_0: int;
+ var _v2.__HAVOC_det_malloc_in_7_1: int;
+ var _v2.__HAVOC_det_malloc_in_7_2: bool;
+ var _v2.__HAVOC_det_malloc_in_7_3: [int]int;
+ var _v2.__HAVOC_det_malloc_out_7_0: int;
+ var _v2.__HAVOC_det_malloc_out_7_1: int;
+ var _v2.encode_ie_8_done: bool;
+ var _v2.encode_ie_in_8_0: int;
+ var _v2.encode_ie_in_8_1: int;
+ var _v2.encode_ie_in_8_2: int;
+ var _v2.encode_ie_in_8_3: int;
+ var _v2.encode_ie_in_8_4: int;
+ var _v2.encode_ie_in_8_5: int;
+ var _v2.encode_ie_in_8_6: int;
+ var _v2.encode_ie_in_8_7: bool;
+ var _v2.encode_ie_in_8_8: [int]int;
+ var _v2.encode_ie_out_8_0: int;
+ var _v2.encode_ie_out_8_1: bool;
+ var _v2.encode_ie_out_8_2: [int]int;
+ var _v2.__HAVOC_free_9_done: bool;
+ var _v2.__HAVOC_free_in_9_0: int;
+ var _v2.__HAVOC_free_in_9_1: int;
+ var _v2.__HAVOC_free_in_9_2: bool;
+ var _v2.__HAVOC_free_in_9_3: [int]int;
+ var _v2.__HAVOC_free_10_done: bool;
+ var _v2.__HAVOC_free_in_10_0: int;
+ var _v2.__HAVOC_free_in_10_1: int;
+ var _v2.__HAVOC_free_in_10_2: bool;
+ var _v2.__HAVOC_free_in_10_3: [int]int;
+ var store__0__v1.alloc: int;
+ var store__0__v1.OK: bool;
+ var store__0__v1.Mem_T.UCHAR: [int]int;
+ var store__0__v2.alloc: int;
+ var store__0__v2.OK: bool;
+ var store__0__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_1_0_0: int;
+ var out__v2.__HAVOC_det_malloc_out_6_0_0: int;
+ var store__1__v1.alloc: int;
+ var store__1__v1.OK: bool;
+ var store__1__v1.Mem_T.UCHAR: [int]int;
+ var store__1__v2.alloc: int;
+ var store__1__v2.OK: bool;
+ var store__1__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_1_0_1: int;
+ var out__v2.__HAVOC_det_malloc_out_7_0_1: int;
+ var store__2__v1.alloc: int;
+ var store__2__v1.OK: bool;
+ var store__2__v1.Mem_T.UCHAR: [int]int;
+ var store__2__v2.alloc: int;
+ var store__2__v2.OK: bool;
+ var store__2__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_2_0_2: int;
+ var out__v2.__HAVOC_det_malloc_out_6_0_2: int;
+ var store__3__v1.alloc: int;
+ var store__3__v1.OK: bool;
+ var store__3__v1.Mem_T.UCHAR: [int]int;
+ var store__3__v2.alloc: int;
+ var store__3__v2.OK: bool;
+ var store__3__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_2_0_3: int;
+ var out__v2.__HAVOC_det_malloc_out_7_0_3: int;
+ var store__4__v1.alloc: int;
+ var store__4__v1.OK: bool;
+ var store__4__v1.Mem_T.UCHAR: [int]int;
+ var store__4__v2.alloc: int;
+ var store__4__v2.OK: bool;
+ var store__4__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.encode_ie_out_3_0_4: int;
+ var out__v2.encode_ie_out_8_0_4: int;
+ var store__5__v1.alloc: int;
+ var store__5__v1.OK: bool;
+ var store__5__v1.Mem_T.UCHAR: [int]int;
+ var store__5__v2.alloc: int;
+ var store__5__v2.OK: bool;
+ var store__5__v2.Mem_T.UCHAR: [int]int;
+ var store__6__v1.alloc: int;
+ var store__6__v1.OK: bool;
+ var store__6__v1.Mem_T.UCHAR: [int]int;
+ var store__6__v2.alloc: int;
+ var store__6__v2.OK: bool;
+ var store__6__v2.Mem_T.UCHAR: [int]int;
+ var store__7__v1.alloc: int;
+ var store__7__v1.OK: bool;
+ var store__7__v1.Mem_T.UCHAR: [int]int;
+ var store__7__v2.alloc: int;
+ var store__7__v2.OK: bool;
+ var store__7__v2.Mem_T.UCHAR: [int]int;
+ var store__8__v1.alloc: int;
+ var store__8__v1.OK: bool;
+ var store__8__v1.Mem_T.UCHAR: [int]int;
+ var store__8__v2.alloc: int;
+ var store__8__v2.OK: bool;
+ var store__8__v2.Mem_T.UCHAR: [int]int;
+
+ START:
+ _v1.__HAVOC_det_malloc_1_done, _v1.__HAVOC_det_malloc_2_done, _v1.encode_ie_3_done, _v1.__HAVOC_free_4_done, _v1.__HAVOC_free_5_done, _v2.__HAVOC_det_malloc_6_done, _v2.__HAVOC_det_malloc_7_done, _v2.encode_ie_8_done, _v2.__HAVOC_free_9_done, _v2.__HAVOC_free_10_done := false, false, false, false, false, false, false, false, false, false;
+ goto inline$_v1.giwscan_cb$0$Entry;
+
+ inline$_v1.giwscan_cb$0$Entry:
+ inline$_v1.giwscan_cb$0$se_.1 := _v1.se_.1;
+ havoc inline$_v1.giwscan_cb$0$havoc_stringTemp, inline$_v1.giwscan_cb$0$condVal, inline$_v1.giwscan_cb$0$buf, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v1.giwscan_cb$0$result.encode_ie$2, inline$_v1.giwscan_cb$0$rsn_leader, inline$_v1.giwscan_cb$0$se, inline$_v1.giwscan_cb$0$tempBoogie0, inline$_v1.giwscan_cb$0$tempBoogie1, inline$_v1.giwscan_cb$0$tempBoogie2, inline$_v1.giwscan_cb$0$tempBoogie3, inline$_v1.giwscan_cb$0$tempBoogie4, inline$_v1.giwscan_cb$0$tempBoogie5, inline$_v1.giwscan_cb$0$tempBoogie6, inline$_v1.giwscan_cb$0$tempBoogie7, inline$_v1.giwscan_cb$0$tempBoogie8, inline$_v1.giwscan_cb$0$tempBoogie9, inline$_v1.giwscan_cb$0$tempBoogie10, inline$_v1.giwscan_cb$0$tempBoogie11, inline$_v1.giwscan_cb$0$tempBoogie12, inline$_v1.giwscan_cb$0$tempBoogie13, inline$_v1.giwscan_cb$0$tempBoogie14, inline$_v1.giwscan_cb$0$tempBoogie15, inline$_v1.giwscan_cb$0$tempBoogie16, inline$_v1.giwscan_cb$0$tempBoogie17, inline$_v1.giwscan_cb$0$tempBoogie18, inline$_v1.giwscan_cb$0$tempBoogie19, inline$_v1.giwscan_cb$0$__havoc_dummy_return, inline$_v1.giwscan_cb$0$result.giwscan_cb$1;
+ inline$_v1.giwscan_cb$0$_v1.alloc := _v1.alloc;
+ inline$_v1.giwscan_cb$0$_v1.OK := _v1.OK;
+ inline$_v1.giwscan_cb$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
+ goto inline$_v1.giwscan_cb$0$anon0#2;
+
+ inline$_v1.giwscan_cb$0$anon0#2:
+ inline$_v1.giwscan_cb$0$havoc_stringTemp := 0;
+ goto inline$_v1.giwscan_cb$0$start#2;
+
+ inline$_v1.giwscan_cb$0$start#2:
+ assume _v2.INT_LT(inline$_v1.giwscan_cb$0$se_.1, _v1.alloc);
+ _v1.__HAVOC_det_malloc_in_1_0, _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3 := 6, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ call inline$_v1.giwscan_cb$0$buf := _v1.__HAVOC_det_malloc(6);
+ _v1.__HAVOC_det_malloc_1_done := true;
+ _v1.__HAVOC_det_malloc_out_1_0, _v1.__HAVOC_det_malloc_out_1_1 := inline$_v1.giwscan_cb$0$buf, _v1.alloc;
+ inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := 0;
+ inline$_v1.giwscan_cb$0$result.encode_ie$2 := 0;
+ inline$_v1.giwscan_cb$0$result.giwscan_cb$1 := 0;
+ _v1.__HAVOC_det_malloc_in_2_0, _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3 := 1, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ call inline$_v1.giwscan_cb$0$rsn_leader := _v1.__HAVOC_det_malloc(1);
+ _v1.__HAVOC_det_malloc_2_done := true;
+ _v1.__HAVOC_det_malloc_out_2_0, _v1.__HAVOC_det_malloc_out_2_1 := inline$_v1.giwscan_cb$0$rsn_leader, _v1.alloc;
+ inline$_v1.giwscan_cb$0$se := 0;
+ assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se_.1, 0);
+ inline$_v1.giwscan_cb$0$se := inline$_v1.giwscan_cb$0$se_.1;
+ goto inline$_v1.giwscan_cb$0$label_3#2;
+
+ inline$_v1.giwscan_cb$0$label_3#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 45} true;
+ goto inline$_v1.giwscan_cb$0$label_4#2;
+
+ inline$_v1.giwscan_cb$0$label_4#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 46} true;
+ goto inline$_v1.giwscan_cb$0$label_5#2;
+
+ inline$_v1.giwscan_cb$0$label_5#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 50} true;
+ assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ goto inline$_v1.giwscan_cb$0$label_5_true#2, inline$_v1.giwscan_cb$0$label_5_false#2;
+
+ inline$_v1.giwscan_cb$0$label_5_false#2:
+ assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]
+ == 0;
+ assume _v2.value_is(_v1.__ctobpl_const_32, inline$_v1.giwscan_cb$0$se);
+ assume _v2.value_is(_v1.__ctobpl_const_33,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
+ goto inline$_v1.giwscan_cb$0$label_6#2;
+
+ inline$_v1.giwscan_cb$0$label_5_true#2:
+ assume _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]
+ != 0;
+ assume _v2.value_is(_v1.__ctobpl_const_32, inline$_v1.giwscan_cb$0$se);
+ assume _v2.value_is(_v1.__ctobpl_const_33,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
+ goto inline$_v1.giwscan_cb$0$label_7#2;
+
+ inline$_v1.giwscan_cb$0$label_7#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 51} true;
+ assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ goto inline$_v1.giwscan_cb$0$label_7_true#2, inline$_v1.giwscan_cb$0$label_7_false#2;
+
+ inline$_v1.giwscan_cb$0$label_7_false#2:
+ assume !_v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v1.__ctobpl_const_34, inline$_v1.giwscan_cb$0$se);
+ assume _v2.value_is(_v1.__ctobpl_const_35,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_36,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 0)]);
+ goto inline$_v1.giwscan_cb$0$label_6#2;
+
+ inline$_v1.giwscan_cb$0$label_7_true#2:
+ assume _v2.INT_EQ(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v1.__ctobpl_const_34, inline$_v1.giwscan_cb$0$se);
+ assume _v2.value_is(_v1.__ctobpl_const_35,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_36,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 0)]);
+ goto inline$_v1.giwscan_cb$0$label_8#2;
+
+ inline$_v1.giwscan_cb$0$label_8#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 53} true;
+ assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 1)],
+ 1,
+ 2);
+ assume _v2.value_is(_v1.__ctobpl_const_37, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_38, inline$_v1.giwscan_cb$0$se);
+ assume _v2.value_is(_v1.__ctobpl_const_39,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_40,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)],
+ 1,
+ 1)]);
+ goto inline$_v1.giwscan_cb$0$label_9#2;
+
+ inline$_v1.giwscan_cb$0$label_9#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 52} true;
+ assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(inline$_v1.giwscan_cb$0$se, 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ _v1.encode_ie_in_3_0, _v1.encode_ie_in_3_1, _v1.encode_ie_in_3_2, _v1.encode_ie_in_3_3, _v1.encode_ie_in_3_4, _v1.encode_ie_in_3_5, _v1.encode_ie_in_3_6, _v1.encode_ie_in_3_7, _v1.encode_ie_in_3_8 := inline$_v1.giwscan_cb$0$buf, 6, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)], inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v1.giwscan_cb$0$rsn_leader, 1, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ call inline$_v1.giwscan_cb$0$result.encode_ie$2 := _v1.encode_ie(inline$_v1.giwscan_cb$0$buf, 6, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)], inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v1.giwscan_cb$0$rsn_leader, 1);
+ _v1.encode_ie_3_done := true;
+ _v1.encode_ie_out_3_0, _v1.encode_ie_out_3_1, _v1.encode_ie_out_3_2 := inline$_v1.giwscan_cb$0$result.encode_ie$2, _v1.OK, _v1.Mem_T.UCHAR;
+ assume _v2.value_is(_v1.__ctobpl_const_41, inline$_v1.giwscan_cb$0$se);
+ assume _v2.value_is(_v1.__ctobpl_const_42,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_43, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v1.__ctobpl_const_44, inline$_v1.giwscan_cb$0$se);
+ assume _v2.value_is(_v1.__ctobpl_const_45,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_46, inline$_v1.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
+ goto inline$_v1.giwscan_cb$0$label_6#2;
+
+ inline$_v1.giwscan_cb$0$label_6#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 57} true;
+ inline$_v1.giwscan_cb$0$result.giwscan_cb$1 := 0;
+ goto inline$_v1.giwscan_cb$0$label_1#2;
+
+ inline$_v1.giwscan_cb$0$label_1#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 58} true;
+ _v1.__HAVOC_free_in_4_0, _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3 := inline$_v1.giwscan_cb$0$buf, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ call _v1.__HAVOC_free(inline$_v1.giwscan_cb$0$buf);
+ _v1.__HAVOC_free_4_done := true;
+ _v1.__HAVOC_free_in_5_0, _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3 := inline$_v1.giwscan_cb$0$rsn_leader, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ call _v1.__HAVOC_free(inline$_v1.giwscan_cb$0$rsn_leader);
+ _v1.__HAVOC_free_5_done := true;
+ goto inline$_v1.giwscan_cb$0$Return;
+
+ inline$_v1.giwscan_cb$0$Return:
+ assume true;
+ _v1.result.giwscan_cb$1 := inline$_v1.giwscan_cb$0$result.giwscan_cb$1;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.giwscan_cb$0$Entry;
+
+ inline$_v2.giwscan_cb$0$Entry:
+ inline$_v2.giwscan_cb$0$se_.1 := _v2.se_.1;
+ havoc inline$_v2.giwscan_cb$0$havoc_stringTemp, inline$_v2.giwscan_cb$0$condVal, inline$_v2.giwscan_cb$0$buf, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v2.giwscan_cb$0$result.encode_ie$2, inline$_v2.giwscan_cb$0$rsn_leader, inline$_v2.giwscan_cb$0$se, inline$_v2.giwscan_cb$0$tempBoogie0, inline$_v2.giwscan_cb$0$tempBoogie1, inline$_v2.giwscan_cb$0$tempBoogie2, inline$_v2.giwscan_cb$0$tempBoogie3, inline$_v2.giwscan_cb$0$tempBoogie4, inline$_v2.giwscan_cb$0$tempBoogie5, inline$_v2.giwscan_cb$0$tempBoogie6, inline$_v2.giwscan_cb$0$tempBoogie7, inline$_v2.giwscan_cb$0$tempBoogie8, inline$_v2.giwscan_cb$0$tempBoogie9, inline$_v2.giwscan_cb$0$tempBoogie10, inline$_v2.giwscan_cb$0$tempBoogie11, inline$_v2.giwscan_cb$0$tempBoogie12, inline$_v2.giwscan_cb$0$tempBoogie13, inline$_v2.giwscan_cb$0$tempBoogie14, inline$_v2.giwscan_cb$0$tempBoogie15, inline$_v2.giwscan_cb$0$tempBoogie16, inline$_v2.giwscan_cb$0$tempBoogie17, inline$_v2.giwscan_cb$0$tempBoogie18, inline$_v2.giwscan_cb$0$tempBoogie19, inline$_v2.giwscan_cb$0$__havoc_dummy_return, inline$_v2.giwscan_cb$0$result.giwscan_cb$1;
+ inline$_v2.giwscan_cb$0$_v2.alloc := _v2.alloc;
+ inline$_v2.giwscan_cb$0$_v2.OK := _v2.OK;
+ inline$_v2.giwscan_cb$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
+ goto inline$_v2.giwscan_cb$0$anon0#2;
+
+ inline$_v2.giwscan_cb$0$anon0#2:
+ inline$_v2.giwscan_cb$0$havoc_stringTemp := 0;
+ goto inline$_v2.giwscan_cb$0$start#2;
+
+ inline$_v2.giwscan_cb$0$start#2:
+ assume _v2.INT_LT(inline$_v2.giwscan_cb$0$se_.1, _v2.alloc);
+ _v2.__HAVOC_det_malloc_in_6_0, _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3 := 6, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ call inline$_v2.giwscan_cb$0$buf := _v2.__HAVOC_det_malloc(6);
+ _v2.__HAVOC_det_malloc_6_done := true;
+ _v2.__HAVOC_det_malloc_out_6_0, _v2.__HAVOC_det_malloc_out_6_1 := inline$_v2.giwscan_cb$0$buf, _v2.alloc;
+ inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := 0;
+ inline$_v2.giwscan_cb$0$result.encode_ie$2 := 0;
+ inline$_v2.giwscan_cb$0$result.giwscan_cb$1 := 0;
+ _v2.__HAVOC_det_malloc_in_7_0, _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3 := 1, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ call inline$_v2.giwscan_cb$0$rsn_leader := _v2.__HAVOC_det_malloc(1);
+ _v2.__HAVOC_det_malloc_7_done := true;
+ _v2.__HAVOC_det_malloc_out_7_0, _v2.__HAVOC_det_malloc_out_7_1 := inline$_v2.giwscan_cb$0$rsn_leader, _v2.alloc;
+ inline$_v2.giwscan_cb$0$se := 0;
+ assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se_.1, 0);
+ inline$_v2.giwscan_cb$0$se := inline$_v2.giwscan_cb$0$se_.1;
+ goto inline$_v2.giwscan_cb$0$label_3#2;
+
+ inline$_v2.giwscan_cb$0$label_3#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 46} true;
+ goto inline$_v2.giwscan_cb$0$label_4#2;
+
+ inline$_v2.giwscan_cb$0$label_4#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 47} true;
+ goto inline$_v2.giwscan_cb$0$label_5#2;
+
+ inline$_v2.giwscan_cb$0$label_5#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 51} true;
+ assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ goto inline$_v2.giwscan_cb$0$label_5_true#2, inline$_v2.giwscan_cb$0$label_5_false#2;
+
+ inline$_v2.giwscan_cb$0$label_5_false#2:
+ assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]
+ == 0;
+ assume _v2.value_is(_v2.__ctobpl_const_33, inline$_v2.giwscan_cb$0$se);
+ assume _v2.value_is(_v2.__ctobpl_const_34,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
+ goto inline$_v2.giwscan_cb$0$label_6#2;
+
+ inline$_v2.giwscan_cb$0$label_5_true#2:
+ assume _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]
+ != 0;
+ assume _v2.value_is(_v2.__ctobpl_const_33, inline$_v2.giwscan_cb$0$se);
+ assume _v2.value_is(_v2.__ctobpl_const_34,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
+ goto inline$_v2.giwscan_cb$0$label_7#2;
+
+ inline$_v2.giwscan_cb$0$label_7#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 52} true;
+ assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ goto inline$_v2.giwscan_cb$0$label_7_true#2, inline$_v2.giwscan_cb$0$label_7_false#2;
+
+ inline$_v2.giwscan_cb$0$label_7_false#2:
+ assume !_v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v2.__ctobpl_const_35, inline$_v2.giwscan_cb$0$se);
+ assume _v2.value_is(_v2.__ctobpl_const_36,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_37,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 0)]);
+ goto inline$_v2.giwscan_cb$0$label_6#2;
+
+ inline$_v2.giwscan_cb$0$label_7_true#2:
+ assume _v2.INT_EQ(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 0)],
+ 200);
+ assume _v2.value_is(_v2.__ctobpl_const_35, inline$_v2.giwscan_cb$0$se);
+ assume _v2.value_is(_v2.__ctobpl_const_36,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_37,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 0)]);
+ goto inline$_v2.giwscan_cb$0$label_8#2;
+
+ inline$_v2.giwscan_cb$0$label_8#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 54} true;
+ assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$ := _v2.INT_PLUS(_v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 1)],
+ 1,
+ 2);
+ assume _v2.value_is(_v2.__ctobpl_const_38, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_39, inline$_v2.giwscan_cb$0$se);
+ assume _v2.value_is(_v2.__ctobpl_const_40,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_41,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)],
+ 1,
+ 1)]);
+ goto inline$_v2.giwscan_cb$0$label_9#2;
+
+ inline$_v2.giwscan_cb$0$label_9#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 53} true;
+ assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(inline$_v2.giwscan_cb$0$se, 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se))
+ == 1;
+ assert true;
+ _v2.encode_ie_in_8_0, _v2.encode_ie_in_8_1, _v2.encode_ie_in_8_2, _v2.encode_ie_in_8_3, _v2.encode_ie_in_8_4, _v2.encode_ie_in_8_5, _v2.encode_ie_in_8_6, _v2.encode_ie_in_8_7, _v2.encode_ie_in_8_8 := inline$_v2.giwscan_cb$0$buf, 6, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)], inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v2.giwscan_cb$0$rsn_leader, 1, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ call inline$_v2.giwscan_cb$0$result.encode_ie$2 := _v2.encode_ie(inline$_v2.giwscan_cb$0$buf, 6, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)], inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$, inline$_v2.giwscan_cb$0$rsn_leader, 1);
+ _v2.encode_ie_8_done := true;
+ _v2.encode_ie_out_8_0, _v2.encode_ie_out_8_1, _v2.encode_ie_out_8_2 := inline$_v2.giwscan_cb$0$result.encode_ie$2, _v2.OK, _v2.Mem_T.UCHAR;
+ assume _v2.value_is(_v2.__ctobpl_const_42, inline$_v2.giwscan_cb$0$se);
+ assume _v2.value_is(_v2.__ctobpl_const_43,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_44, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
+ assume _v2.value_is(_v2.__ctobpl_const_45, inline$_v2.giwscan_cb$0$se);
+ assume _v2.value_is(_v2.__ctobpl_const_46,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.giwscan_cb$0$se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_47, inline$_v2.giwscan_cb$0$$encode_ie.arg.4$3.$$static$);
+ goto inline$_v2.giwscan_cb$0$label_6#2;
+
+ inline$_v2.giwscan_cb$0$label_6#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 58} true;
+ inline$_v2.giwscan_cb$0$result.giwscan_cb$1 := 0;
+ goto inline$_v2.giwscan_cb$0$label_1#2;
+
+ inline$_v2.giwscan_cb$0$label_1#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 59} true;
+ _v2.__HAVOC_free_in_9_0, _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3 := inline$_v2.giwscan_cb$0$buf, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ call _v2.__HAVOC_free(inline$_v2.giwscan_cb$0$buf);
+ _v2.__HAVOC_free_9_done := true;
+ _v2.__HAVOC_free_in_10_0, _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3 := inline$_v2.giwscan_cb$0$rsn_leader, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ call _v2.__HAVOC_free(inline$_v2.giwscan_cb$0$rsn_leader);
+ _v2.__HAVOC_free_10_done := true;
+ goto inline$_v2.giwscan_cb$0$Return;
+
+ inline$_v2.giwscan_cb$0$Return:
+ assume true;
+ _v2.result.giwscan_cb$1 := inline$_v2.giwscan_cb$0$result.giwscan_cb$1;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_8;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done;
+ store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3;
+ call out__v1.__HAVOC_det_malloc_out_1_0_0, out__v2.__HAVOC_det_malloc_out_6_0_0 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_6_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
+ assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_0
+ && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_0;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.UCHAR;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+
+ MS_L_0_1:
+ goto MS_L_taken_1, MS_L_not_taken_1;
+
+ MS_L_taken_1:
+ assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done;
+ store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3;
+ call out__v1.__HAVOC_det_malloc_out_1_0_1, out__v2.__HAVOC_det_malloc_out_7_0_1 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_7_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
+ assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_1
+ && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_1;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.UCHAR;
+ goto MS_L_meet_1;
+
+ MS_L_not_taken_1:
+ assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done);
+ goto MS_L_meet_1;
+
+ MS_L_meet_1:
+ goto MS_L_0_0;
+
+ MS_L_0_2:
+ goto MS_L_taken_2, MS_L_not_taken_2;
+
+ MS_L_taken_2:
+ assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done;
+ store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3;
+ call out__v1.__HAVOC_det_malloc_out_2_0_2, out__v2.__HAVOC_det_malloc_out_6_0_2 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_6_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
+ assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_2
+ && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_2;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.UCHAR;
+ goto MS_L_meet_2;
+
+ MS_L_not_taken_2:
+ assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done);
+ goto MS_L_meet_2;
+
+ MS_L_meet_2:
+ goto MS_L_0_1;
+
+ MS_L_0_3:
+ goto MS_L_taken_3, MS_L_not_taken_3;
+
+ MS_L_taken_3:
+ assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done;
+ store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3;
+ call out__v1.__HAVOC_det_malloc_out_2_0_3, out__v2.__HAVOC_det_malloc_out_7_0_3 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_7_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
+ assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_3
+ && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_3;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.UCHAR;
+ goto MS_L_meet_3;
+
+ MS_L_not_taken_3:
+ assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done);
+ goto MS_L_meet_3;
+
+ MS_L_meet_3:
+ goto MS_L_0_2;
+
+ MS_L_0_4:
+ goto MS_L_taken_4, MS_L_not_taken_4;
+
+ MS_L_taken_4:
+ assume _v1.encode_ie_3_done && _v2.encode_ie_8_done;
+ store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.encode_ie_in_3_6, _v1.encode_ie_in_3_7, _v1.encode_ie_in_3_8;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.encode_ie_in_8_6, _v2.encode_ie_in_8_7, _v2.encode_ie_in_8_8;
+ call out__v1.encode_ie_out_3_0_4, out__v2.encode_ie_out_8_0_4 := MS_Check__v1.encode_ie___v2.encode_ie(_v1.encode_ie_in_3_0, _v1.encode_ie_in_3_1, _v1.encode_ie_in_3_2, _v1.encode_ie_in_3_3, _v1.encode_ie_in_3_4, _v1.encode_ie_in_3_5, _v2.encode_ie_in_8_0, _v2.encode_ie_in_8_1, _v2.encode_ie_in_8_2, _v2.encode_ie_in_8_3, _v2.encode_ie_in_8_4, _v2.encode_ie_in_8_5);
+ assume (_v1.OK <==> _v1.encode_ie_out_3_1) && _v1.Mem_T.UCHAR == _v1.encode_ie_out_3_2;
+ assume (_v2.OK <==> _v2.encode_ie_out_8_1) && _v2.Mem_T.UCHAR == _v2.encode_ie_out_8_2;
+ assume _v1.encode_ie_out_3_0 == out__v1.encode_ie_out_3_0_4
+ && _v2.encode_ie_out_8_0 == out__v2.encode_ie_out_8_0_4;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.UCHAR;
+ goto MS_L_meet_4;
+
+ MS_L_not_taken_4:
+ assume !(_v1.encode_ie_3_done && _v2.encode_ie_8_done);
+ goto MS_L_meet_4;
+
+ MS_L_meet_4:
+ goto MS_L_0_3;
+
+ MS_L_0_5:
+ goto MS_L_taken_5, MS_L_not_taken_5;
+
+ MS_L_taken_5:
+ assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done;
+ store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_9_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.UCHAR;
+ goto MS_L_meet_5;
+
+ MS_L_not_taken_5:
+ assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done);
+ goto MS_L_meet_5;
+
+ MS_L_meet_5:
+ goto MS_L_0_4;
+
+ MS_L_0_6:
+ goto MS_L_taken_6, MS_L_not_taken_6;
+
+ MS_L_taken_6:
+ assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done;
+ store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_10_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.UCHAR;
+ goto MS_L_meet_6;
+
+ MS_L_not_taken_6:
+ assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done);
+ goto MS_L_meet_6;
+
+ MS_L_meet_6:
+ goto MS_L_0_5;
+
+ MS_L_0_7:
+ goto MS_L_taken_7, MS_L_not_taken_7;
+
+ MS_L_taken_7:
+ assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done;
+ store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_9_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.UCHAR;
+ goto MS_L_meet_7;
+
+ MS_L_not_taken_7:
+ assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done);
+ goto MS_L_meet_7;
+
+ MS_L_meet_7:
+ goto MS_L_0_6;
+
+ MS_L_0_8:
+ goto MS_L_taken_8, MS_L_not_taken_8;
+
+ MS_L_taken_8:
+ assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done;
+ store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_10_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR := store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR := store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.UCHAR;
+ goto MS_L_meet_8;
+
+ MS_L_not_taken_8:
+ assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done);
+ goto MS_L_meet_8;
+
+ MS_L_meet_8:
+ goto MS_L_0_7;
+}
+
+
+
+function {:inline true} MS$_v1.main$_v2.main(_v1.OK_old: bool,
+ _v1.Mem_old: [name][int]int,
+ _v1.alloc_old: int,
+ _v1.Mem_T.A1CHAR_old: [int]int,
+ _v1.Mem_T.A5UCHAR_old: [int]int,
+ _v1.Mem_T.A6UCHAR_old: [int]int,
+ _v1.Mem_T.CHAR_old: [int]int,
+ _v1.Mem_T.INT4_old: [int]int,
+ _v1.Mem_T.PCHAR_old: [int]int,
+ _v1.Mem_T.PUCHAR_old: [int]int,
+ _v1.Mem_T.PVOID_old: [int]int,
+ _v1.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.UCHAR_old: [int]int,
+ _v1.Mem_T.VOID_old: [int]int,
+ _v1.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v1.detChoiceCnt_old: int,
+ _v1.Res_KERNEL_SOURCE_old: [int]int,
+ _v1.Res_PROBED_old: [int]int,
+ _v1.alloc_: int,
+ _v1.OK_: bool,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry_: [int]int,
+ _v1.Mem_T.UCHAR_: [int]int,
+ _v1.result.main$1: int,
+ _v2.OK_old: bool,
+ _v2.Mem_old: [name][int]int,
+ _v2.alloc_old: int,
+ _v2.Mem_T.A1CHAR_old: [int]int,
+ _v2.Mem_T.A5UCHAR_old: [int]int,
+ _v2.Mem_T.A6UCHAR_old: [int]int,
+ _v2.Mem_T.CHAR_old: [int]int,
+ _v2.Mem_T.INT4_old: [int]int,
+ _v2.Mem_T.PCHAR_old: [int]int,
+ _v2.Mem_T.PUCHAR_old: [int]int,
+ _v2.Mem_T.PVOID_old: [int]int,
+ _v2.Mem_T.Pieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.UCHAR_old: [int]int,
+ _v2.Mem_T.VOID_old: [int]int,
+ _v2.Mem_T.ieee80211_scan_entry_old: [int]int,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_old: [int]int,
+ _v2.detChoiceCnt_old: int,
+ _v2.Res_KERNEL_SOURCE_old: [int]int,
+ _v2.Res_PROBED_old: [int]int,
+ _v2.alloc_: int,
+ _v2.OK_: bool,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry_: [int]int,
+ _v2.Mem_T.UCHAR_: [int]int,
+ _v2.result.main$1: int)
+ : bool
+{
+ true
+}
+
+procedure MS_Check__v1.main___v2.main() returns (_v1.result.main$1: int, _v2.result.main$1: int);
+ requires (_v1.OK <==> _v2.OK)
+ && _v1.Mem == _v2.Mem
+ && _v1.alloc == _v2.alloc
+ && _v1.Mem_T.A1CHAR == _v2.Mem_T.A1CHAR
+ && _v1.Mem_T.A5UCHAR == _v2.Mem_T.A5UCHAR
+ && _v1.Mem_T.A6UCHAR == _v2.Mem_T.A6UCHAR
+ && _v1.Mem_T.CHAR == _v2.Mem_T.CHAR
+ && _v1.Mem_T.INT4 == _v2.Mem_T.INT4
+ && _v1.Mem_T.PCHAR == _v2.Mem_T.PCHAR
+ && _v1.Mem_T.PUCHAR == _v2.Mem_T.PUCHAR
+ && _v1.Mem_T.PVOID == _v2.Mem_T.PVOID
+ && _v1.Mem_T.Pieee80211_scan_entry == _v2.Mem_T.Pieee80211_scan_entry
+ && _v1.Mem_T.UCHAR == _v2.Mem_T.UCHAR
+ && _v1.Mem_T.VOID == _v2.Mem_T.VOID
+ && _v1.Mem_T.ieee80211_scan_entry == _v2.Mem_T.ieee80211_scan_entry
+ && _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ == _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry
+ && _v1.detChoiceCnt == _v2.detChoiceCnt
+ && _v1.Res_KERNEL_SOURCE == _v2.Res_KERNEL_SOURCE
+ && _v1.Res_PROBED == _v2.Res_PROBED;
+ modifies _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ ensures MS$_v1.main$_v2.main(old(_v1.OK),
+ old(_v1.Mem),
+ old(_v1.alloc),
+ old(_v1.Mem_T.A1CHAR),
+ old(_v1.Mem_T.A5UCHAR),
+ old(_v1.Mem_T.A6UCHAR),
+ old(_v1.Mem_T.CHAR),
+ old(_v1.Mem_T.INT4),
+ old(_v1.Mem_T.PCHAR),
+ old(_v1.Mem_T.PUCHAR),
+ old(_v1.Mem_T.PVOID),
+ old(_v1.Mem_T.Pieee80211_scan_entry),
+ old(_v1.Mem_T.UCHAR),
+ old(_v1.Mem_T.VOID),
+ old(_v1.Mem_T.ieee80211_scan_entry),
+ old(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v1.detChoiceCnt),
+ old(_v1.Res_KERNEL_SOURCE),
+ old(_v1.Res_PROBED),
+ _v1.alloc,
+ _v1.OK,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry,
+ _v1.Mem_T.UCHAR,
+ _v1.result.main$1,
+ old(_v2.OK),
+ old(_v2.Mem),
+ old(_v2.alloc),
+ old(_v2.Mem_T.A1CHAR),
+ old(_v2.Mem_T.A5UCHAR),
+ old(_v2.Mem_T.A6UCHAR),
+ old(_v2.Mem_T.CHAR),
+ old(_v2.Mem_T.INT4),
+ old(_v2.Mem_T.PCHAR),
+ old(_v2.Mem_T.PUCHAR),
+ old(_v2.Mem_T.PVOID),
+ old(_v2.Mem_T.Pieee80211_scan_entry),
+ old(_v2.Mem_T.UCHAR),
+ old(_v2.Mem_T.VOID),
+ old(_v2.Mem_T.ieee80211_scan_entry),
+ old(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry),
+ old(_v2.detChoiceCnt),
+ old(_v2.Res_KERNEL_SOURCE),
+ old(_v2.Res_PROBED),
+ _v2.alloc,
+ _v2.OK,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry,
+ _v2.Mem_T.UCHAR,
+ _v2.result.main$1);
+ ensures _v1.OK ==> _v2.OK;
+
+
+
+implementation MS_Check__v1.main___v2.main() returns (_v1.result.main$1: int, _v2.result.main$1: int)
+{
+ var inline$_v1.main$0$havoc_stringTemp: int;
+ var inline$_v1.main$0$condVal: int;
+ var inline$_v1.main$0$ie: int;
+ var inline$_v1.main$0$result.giwscan_cb$2: int;
+ var inline$_v1.main$0$se: int;
+ var inline$_v1.main$0$tempBoogie0: int;
+ var inline$_v1.main$0$tempBoogie1: int;
+ var inline$_v1.main$0$tempBoogie2: int;
+ var inline$_v1.main$0$tempBoogie3: int;
+ var inline$_v1.main$0$tempBoogie4: int;
+ var inline$_v1.main$0$tempBoogie5: int;
+ var inline$_v1.main$0$tempBoogie6: int;
+ var inline$_v1.main$0$tempBoogie7: int;
+ var inline$_v1.main$0$tempBoogie8: int;
+ var inline$_v1.main$0$tempBoogie9: int;
+ var inline$_v1.main$0$tempBoogie10: int;
+ var inline$_v1.main$0$tempBoogie11: int;
+ var inline$_v1.main$0$tempBoogie12: int;
+ var inline$_v1.main$0$tempBoogie13: int;
+ var inline$_v1.main$0$tempBoogie14: int;
+ var inline$_v1.main$0$tempBoogie15: int;
+ var inline$_v1.main$0$tempBoogie16: int;
+ var inline$_v1.main$0$tempBoogie17: int;
+ var inline$_v1.main$0$tempBoogie18: int;
+ var inline$_v1.main$0$tempBoogie19: int;
+ var inline$_v1.main$0$__havoc_dummy_return: int;
+ var inline$_v1.main$0$result.main$1: int;
+ var inline$_v1.main$0$_v1.alloc: int;
+ var inline$_v1.main$0$_v1.OK: bool;
+ var inline$_v1.main$0$_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var inline$_v1.main$0$_v1.Mem_T.UCHAR: [int]int;
+ var inline$_v2.main$0$havoc_stringTemp: int;
+ var inline$_v2.main$0$condVal: int;
+ var inline$_v2.main$0$ie: int;
+ var inline$_v2.main$0$result.giwscan_cb$2: int;
+ var inline$_v2.main$0$se: int;
+ var inline$_v2.main$0$tempBoogie0: int;
+ var inline$_v2.main$0$tempBoogie1: int;
+ var inline$_v2.main$0$tempBoogie2: int;
+ var inline$_v2.main$0$tempBoogie3: int;
+ var inline$_v2.main$0$tempBoogie4: int;
+ var inline$_v2.main$0$tempBoogie5: int;
+ var inline$_v2.main$0$tempBoogie6: int;
+ var inline$_v2.main$0$tempBoogie7: int;
+ var inline$_v2.main$0$tempBoogie8: int;
+ var inline$_v2.main$0$tempBoogie9: int;
+ var inline$_v2.main$0$tempBoogie10: int;
+ var inline$_v2.main$0$tempBoogie11: int;
+ var inline$_v2.main$0$tempBoogie12: int;
+ var inline$_v2.main$0$tempBoogie13: int;
+ var inline$_v2.main$0$tempBoogie14: int;
+ var inline$_v2.main$0$tempBoogie15: int;
+ var inline$_v2.main$0$tempBoogie16: int;
+ var inline$_v2.main$0$tempBoogie17: int;
+ var inline$_v2.main$0$tempBoogie18: int;
+ var inline$_v2.main$0$tempBoogie19: int;
+ var inline$_v2.main$0$__havoc_dummy_return: int;
+ var inline$_v2.main$0$result.main$1: int;
+ var inline$_v2.main$0$_v2.alloc: int;
+ var inline$_v2.main$0$_v2.OK: bool;
+ var inline$_v2.main$0$_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var inline$_v2.main$0$_v2.Mem_T.UCHAR: [int]int;
+ var _v1.__HAVOC_det_malloc_1_done: bool;
+ var _v1.__HAVOC_det_malloc_in_1_0: int;
+ var _v1.__HAVOC_det_malloc_in_1_1: int;
+ var _v1.__HAVOC_det_malloc_in_1_2: bool;
+ var _v1.__HAVOC_det_malloc_in_1_3: [int]int;
+ var _v1.__HAVOC_det_malloc_in_1_4: [int]int;
+ var _v1.__HAVOC_det_malloc_out_1_0: int;
+ var _v1.__HAVOC_det_malloc_out_1_1: int;
+ var _v1.__HAVOC_det_malloc_2_done: bool;
+ var _v1.__HAVOC_det_malloc_in_2_0: int;
+ var _v1.__HAVOC_det_malloc_in_2_1: int;
+ var _v1.__HAVOC_det_malloc_in_2_2: bool;
+ var _v1.__HAVOC_det_malloc_in_2_3: [int]int;
+ var _v1.__HAVOC_det_malloc_in_2_4: [int]int;
+ var _v1.__HAVOC_det_malloc_out_2_0: int;
+ var _v1.__HAVOC_det_malloc_out_2_1: int;
+ var _v1.giwscan_cb_3_done: bool;
+ var _v1.giwscan_cb_in_3_0: int;
+ var _v1.giwscan_cb_in_3_1: int;
+ var _v1.giwscan_cb_in_3_2: bool;
+ var _v1.giwscan_cb_in_3_3: [int]int;
+ var _v1.giwscan_cb_in_3_4: [int]int;
+ var _v1.giwscan_cb_out_3_0: int;
+ var _v1.giwscan_cb_out_3_1: int;
+ var _v1.giwscan_cb_out_3_2: bool;
+ var _v1.giwscan_cb_out_3_3: [int]int;
+ var _v1.__HAVOC_free_4_done: bool;
+ var _v1.__HAVOC_free_in_4_0: int;
+ var _v1.__HAVOC_free_in_4_1: int;
+ var _v1.__HAVOC_free_in_4_2: bool;
+ var _v1.__HAVOC_free_in_4_3: [int]int;
+ var _v1.__HAVOC_free_in_4_4: [int]int;
+ var _v1.__HAVOC_free_5_done: bool;
+ var _v1.__HAVOC_free_in_5_0: int;
+ var _v1.__HAVOC_free_in_5_1: int;
+ var _v1.__HAVOC_free_in_5_2: bool;
+ var _v1.__HAVOC_free_in_5_3: [int]int;
+ var _v1.__HAVOC_free_in_5_4: [int]int;
+ var _v2.__HAVOC_det_malloc_6_done: bool;
+ var _v2.__HAVOC_det_malloc_in_6_0: int;
+ var _v2.__HAVOC_det_malloc_in_6_1: int;
+ var _v2.__HAVOC_det_malloc_in_6_2: bool;
+ var _v2.__HAVOC_det_malloc_in_6_3: [int]int;
+ var _v2.__HAVOC_det_malloc_in_6_4: [int]int;
+ var _v2.__HAVOC_det_malloc_out_6_0: int;
+ var _v2.__HAVOC_det_malloc_out_6_1: int;
+ var _v2.__HAVOC_det_malloc_7_done: bool;
+ var _v2.__HAVOC_det_malloc_in_7_0: int;
+ var _v2.__HAVOC_det_malloc_in_7_1: int;
+ var _v2.__HAVOC_det_malloc_in_7_2: bool;
+ var _v2.__HAVOC_det_malloc_in_7_3: [int]int;
+ var _v2.__HAVOC_det_malloc_in_7_4: [int]int;
+ var _v2.__HAVOC_det_malloc_out_7_0: int;
+ var _v2.__HAVOC_det_malloc_out_7_1: int;
+ var _v2.giwscan_cb_8_done: bool;
+ var _v2.giwscan_cb_in_8_0: int;
+ var _v2.giwscan_cb_in_8_1: int;
+ var _v2.giwscan_cb_in_8_2: bool;
+ var _v2.giwscan_cb_in_8_3: [int]int;
+ var _v2.giwscan_cb_in_8_4: [int]int;
+ var _v2.giwscan_cb_out_8_0: int;
+ var _v2.giwscan_cb_out_8_1: int;
+ var _v2.giwscan_cb_out_8_2: bool;
+ var _v2.giwscan_cb_out_8_3: [int]int;
+ var _v2.__HAVOC_free_9_done: bool;
+ var _v2.__HAVOC_free_in_9_0: int;
+ var _v2.__HAVOC_free_in_9_1: int;
+ var _v2.__HAVOC_free_in_9_2: bool;
+ var _v2.__HAVOC_free_in_9_3: [int]int;
+ var _v2.__HAVOC_free_in_9_4: [int]int;
+ var _v2.__HAVOC_free_10_done: bool;
+ var _v2.__HAVOC_free_in_10_0: int;
+ var _v2.__HAVOC_free_in_10_1: int;
+ var _v2.__HAVOC_free_in_10_2: bool;
+ var _v2.__HAVOC_free_in_10_3: [int]int;
+ var _v2.__HAVOC_free_in_10_4: [int]int;
+ var store__0__v1.alloc: int;
+ var store__0__v1.OK: bool;
+ var store__0__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__0__v1.Mem_T.UCHAR: [int]int;
+ var store__0__v2.alloc: int;
+ var store__0__v2.OK: bool;
+ var store__0__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__0__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_1_0_0: int;
+ var out__v2.__HAVOC_det_malloc_out_6_0_0: int;
+ var store__1__v1.alloc: int;
+ var store__1__v1.OK: bool;
+ var store__1__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__1__v1.Mem_T.UCHAR: [int]int;
+ var store__1__v2.alloc: int;
+ var store__1__v2.OK: bool;
+ var store__1__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__1__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_1_0_1: int;
+ var out__v2.__HAVOC_det_malloc_out_7_0_1: int;
+ var store__2__v1.alloc: int;
+ var store__2__v1.OK: bool;
+ var store__2__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__2__v1.Mem_T.UCHAR: [int]int;
+ var store__2__v2.alloc: int;
+ var store__2__v2.OK: bool;
+ var store__2__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__2__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_2_0_2: int;
+ var out__v2.__HAVOC_det_malloc_out_6_0_2: int;
+ var store__3__v1.alloc: int;
+ var store__3__v1.OK: bool;
+ var store__3__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__3__v1.Mem_T.UCHAR: [int]int;
+ var store__3__v2.alloc: int;
+ var store__3__v2.OK: bool;
+ var store__3__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__3__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.__HAVOC_det_malloc_out_2_0_3: int;
+ var out__v2.__HAVOC_det_malloc_out_7_0_3: int;
+ var store__4__v1.alloc: int;
+ var store__4__v1.OK: bool;
+ var store__4__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__4__v1.Mem_T.UCHAR: [int]int;
+ var store__4__v2.alloc: int;
+ var store__4__v2.OK: bool;
+ var store__4__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__4__v2.Mem_T.UCHAR: [int]int;
+ var out__v1.giwscan_cb_out_3_0_4: int;
+ var out__v2.giwscan_cb_out_8_0_4: int;
+ var store__5__v1.alloc: int;
+ var store__5__v1.OK: bool;
+ var store__5__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__5__v1.Mem_T.UCHAR: [int]int;
+ var store__5__v2.alloc: int;
+ var store__5__v2.OK: bool;
+ var store__5__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__5__v2.Mem_T.UCHAR: [int]int;
+ var store__6__v1.alloc: int;
+ var store__6__v1.OK: bool;
+ var store__6__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__6__v1.Mem_T.UCHAR: [int]int;
+ var store__6__v2.alloc: int;
+ var store__6__v2.OK: bool;
+ var store__6__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__6__v2.Mem_T.UCHAR: [int]int;
+ var store__7__v1.alloc: int;
+ var store__7__v1.OK: bool;
+ var store__7__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__7__v1.Mem_T.UCHAR: [int]int;
+ var store__7__v2.alloc: int;
+ var store__7__v2.OK: bool;
+ var store__7__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__7__v2.Mem_T.UCHAR: [int]int;
+ var store__8__v1.alloc: int;
+ var store__8__v1.OK: bool;
+ var store__8__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__8__v1.Mem_T.UCHAR: [int]int;
+ var store__8__v2.alloc: int;
+ var store__8__v2.OK: bool;
+ var store__8__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry: [int]int;
+ var store__8__v2.Mem_T.UCHAR: [int]int;
+
+ START:
+ _v1.__HAVOC_det_malloc_1_done, _v1.__HAVOC_det_malloc_2_done, _v1.giwscan_cb_3_done, _v1.__HAVOC_free_4_done, _v1.__HAVOC_free_5_done, _v2.__HAVOC_det_malloc_6_done, _v2.__HAVOC_det_malloc_7_done, _v2.giwscan_cb_8_done, _v2.__HAVOC_free_9_done, _v2.__HAVOC_free_10_done := false, false, false, false, false, false, false, false, false, false;
+ goto inline$_v1.main$0$Entry;
+
+ inline$_v1.main$0$Entry:
+ havoc inline$_v1.main$0$havoc_stringTemp, inline$_v1.main$0$condVal, inline$_v1.main$0$ie, inline$_v1.main$0$result.giwscan_cb$2, inline$_v1.main$0$se, inline$_v1.main$0$tempBoogie0, inline$_v1.main$0$tempBoogie1, inline$_v1.main$0$tempBoogie2, inline$_v1.main$0$tempBoogie3, inline$_v1.main$0$tempBoogie4, inline$_v1.main$0$tempBoogie5, inline$_v1.main$0$tempBoogie6, inline$_v1.main$0$tempBoogie7, inline$_v1.main$0$tempBoogie8, inline$_v1.main$0$tempBoogie9, inline$_v1.main$0$tempBoogie10, inline$_v1.main$0$tempBoogie11, inline$_v1.main$0$tempBoogie12, inline$_v1.main$0$tempBoogie13, inline$_v1.main$0$tempBoogie14, inline$_v1.main$0$tempBoogie15, inline$_v1.main$0$tempBoogie16, inline$_v1.main$0$tempBoogie17, inline$_v1.main$0$tempBoogie18, inline$_v1.main$0$tempBoogie19, inline$_v1.main$0$__havoc_dummy_return, inline$_v1.main$0$result.main$1;
+ inline$_v1.main$0$_v1.alloc := _v1.alloc;
+ inline$_v1.main$0$_v1.OK := _v1.OK;
+ inline$_v1.main$0$_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ inline$_v1.main$0$_v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR;
+ goto inline$_v1.main$0$anon0#2;
+
+ inline$_v1.main$0$anon0#2:
+ inline$_v1.main$0$havoc_stringTemp := 0;
+ goto inline$_v1.main$0$start#2;
+
+ inline$_v1.main$0$start#2:
+ _v1.__HAVOC_det_malloc_in_1_0, _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3, _v1.__HAVOC_det_malloc_in_1_4 := 5, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ call inline$_v1.main$0$ie := _v1.__HAVOC_det_malloc(5);
+ _v1.__HAVOC_det_malloc_1_done := true;
+ _v1.__HAVOC_det_malloc_out_1_0, _v1.__HAVOC_det_malloc_out_1_1 := inline$_v1.main$0$ie, _v1.alloc;
+ inline$_v1.main$0$result.giwscan_cb$2 := 0;
+ inline$_v1.main$0$result.main$1 := 0;
+ _v1.__HAVOC_det_malloc_in_2_0, _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3, _v1.__HAVOC_det_malloc_in_2_4 := 4, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ call inline$_v1.main$0$se := _v1.__HAVOC_det_malloc(4);
+ _v1.__HAVOC_det_malloc_2_done := true;
+ _v1.__HAVOC_det_malloc_out_2_0, _v1.__HAVOC_det_malloc_out_2_1 := inline$_v1.main$0$se, _v1.alloc;
+ goto inline$_v1.main$0$label_3#2;
+
+ inline$_v1.main$0$label_3#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 62} true;
+ goto inline$_v1.main$0$label_4#2;
+
+ inline$_v1.main$0$label_4#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 63} true;
+ goto inline$_v1.main$0$label_5#2;
+
+ inline$_v1.main$0$label_5#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 64} true;
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se))
+ == 1;
+ assert true;
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se) := inline$_v1.main$0$ie];
+ assume _v2.value_is(_v1.__ctobpl_const_47,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)]);
+ goto inline$_v1.main$0$label_6#2;
+
+ inline$_v1.main$0$label_6#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 65} true;
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 1,
+ 0) := 200];
+ assume _v2.value_is(_v1.__ctobpl_const_48,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_49,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 1,
+ 0)]);
+ goto inline$_v1.main$0$label_7#2;
+
+ inline$_v1.main$0$label_7#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 66} true;
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 0);
+ _v1.OK := _v1.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ _v1.Mem_T.UCHAR := _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 1,
+ 1) := 3];
+ assume _v2.value_is(_v1.__ctobpl_const_50,
+ _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)]);
+ assume _v2.value_is(_v1.__ctobpl_const_51,
+ _v1.Mem_T.UCHAR[_v2.INT_PLUS(_v1.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v1.main$0$se)],
+ 1,
+ 1)]);
+ goto inline$_v1.main$0$label_8#2;
+
+ inline$_v1.main$0$label_8#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 68} true;
+ assume _v2.INT_GT(inline$_v1.main$0$se, 0);
+ assume _v2.INT_GT(inline$_v1.main$0$se, 0);
+ _v1.giwscan_cb_in_3_0, _v1.giwscan_cb_in_3_1, _v1.giwscan_cb_in_3_2, _v1.giwscan_cb_in_3_3, _v1.giwscan_cb_in_3_4 := inline$_v1.main$0$se, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ call inline$_v1.main$0$result.giwscan_cb$2 := _v1.giwscan_cb(inline$_v1.main$0$se);
+ _v1.giwscan_cb_3_done := true;
+ _v1.giwscan_cb_out_3_0, _v1.giwscan_cb_out_3_1, _v1.giwscan_cb_out_3_2, _v1.giwscan_cb_out_3_3 := inline$_v1.main$0$result.giwscan_cb$2, _v1.alloc, _v1.OK, _v1.Mem_T.UCHAR;
+ goto inline$_v1.main$0$label_11#2;
+
+ inline$_v1.main$0$label_11#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 70} true;
+ inline$_v1.main$0$result.main$1 := 0;
+ goto inline$_v1.main$0$label_1#2;
+
+ inline$_v1.main$0$label_1#2:
+ _v1.OK := _v1.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\bad\interproc_bad.c"} {:sourceline 71} true;
+ _v1.__HAVOC_free_in_4_0, _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3, _v1.__HAVOC_free_in_4_4 := inline$_v1.main$0$ie, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ call _v1.__HAVOC_free(inline$_v1.main$0$ie);
+ _v1.__HAVOC_free_4_done := true;
+ _v1.__HAVOC_free_in_5_0, _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3, _v1.__HAVOC_free_in_5_4 := inline$_v1.main$0$se, _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ call _v1.__HAVOC_free(inline$_v1.main$0$se);
+ _v1.__HAVOC_free_5_done := true;
+ goto inline$_v1.main$0$Return;
+
+ inline$_v1.main$0$Return:
+ assume true;
+ _v1.result.main$1 := inline$_v1.main$0$result.main$1;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.main$0$Entry;
+
+ inline$_v2.main$0$Entry:
+ havoc inline$_v2.main$0$havoc_stringTemp, inline$_v2.main$0$condVal, inline$_v2.main$0$ie, inline$_v2.main$0$result.giwscan_cb$2, inline$_v2.main$0$se, inline$_v2.main$0$tempBoogie0, inline$_v2.main$0$tempBoogie1, inline$_v2.main$0$tempBoogie2, inline$_v2.main$0$tempBoogie3, inline$_v2.main$0$tempBoogie4, inline$_v2.main$0$tempBoogie5, inline$_v2.main$0$tempBoogie6, inline$_v2.main$0$tempBoogie7, inline$_v2.main$0$tempBoogie8, inline$_v2.main$0$tempBoogie9, inline$_v2.main$0$tempBoogie10, inline$_v2.main$0$tempBoogie11, inline$_v2.main$0$tempBoogie12, inline$_v2.main$0$tempBoogie13, inline$_v2.main$0$tempBoogie14, inline$_v2.main$0$tempBoogie15, inline$_v2.main$0$tempBoogie16, inline$_v2.main$0$tempBoogie17, inline$_v2.main$0$tempBoogie18, inline$_v2.main$0$tempBoogie19, inline$_v2.main$0$__havoc_dummy_return, inline$_v2.main$0$result.main$1;
+ inline$_v2.main$0$_v2.alloc := _v2.alloc;
+ inline$_v2.main$0$_v2.OK := _v2.OK;
+ inline$_v2.main$0$_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry;
+ inline$_v2.main$0$_v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR;
+ goto inline$_v2.main$0$anon0#2;
+
+ inline$_v2.main$0$anon0#2:
+ inline$_v2.main$0$havoc_stringTemp := 0;
+ goto inline$_v2.main$0$start#2;
+
+ inline$_v2.main$0$start#2:
+ _v2.__HAVOC_det_malloc_in_6_0, _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3, _v2.__HAVOC_det_malloc_in_6_4 := 5, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ call inline$_v2.main$0$ie := _v2.__HAVOC_det_malloc(5);
+ _v2.__HAVOC_det_malloc_6_done := true;
+ _v2.__HAVOC_det_malloc_out_6_0, _v2.__HAVOC_det_malloc_out_6_1 := inline$_v2.main$0$ie, _v2.alloc;
+ inline$_v2.main$0$result.giwscan_cb$2 := 0;
+ inline$_v2.main$0$result.main$1 := 0;
+ _v2.__HAVOC_det_malloc_in_7_0, _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3, _v2.__HAVOC_det_malloc_in_7_4 := 4, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ call inline$_v2.main$0$se := _v2.__HAVOC_det_malloc(4);
+ _v2.__HAVOC_det_malloc_7_done := true;
+ _v2.__HAVOC_det_malloc_out_7_0, _v2.__HAVOC_det_malloc_out_7_1 := inline$_v2.main$0$se, _v2.alloc;
+ goto inline$_v2.main$0$label_3#2;
+
+ inline$_v2.main$0$label_3#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 63} true;
+ goto inline$_v2.main$0$label_4#2;
+
+ inline$_v2.main$0$label_4#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 64} true;
+ goto inline$_v2.main$0$label_5#2;
+
+ inline$_v2.main$0$label_5#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 65} true;
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se))
+ == 1;
+ assert true;
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry := _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se) := inline$_v2.main$0$ie];
+ assume _v2.value_is(_v2.__ctobpl_const_48,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)]);
+ goto inline$_v2.main$0$label_6#2;
+
+ inline$_v2.main$0$label_6#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 66} true;
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 1,
+ 0))
+ == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 1,
+ 0) := 200];
+ assume _v2.value_is(_v2.__ctobpl_const_49,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_50,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 1,
+ 0)]);
+ goto inline$_v2.main$0$label_7#2;
+
+ inline$_v2.main$0$label_7#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 67} true;
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se))
+ == 1;
+ assert true;
+ assume _v2.INT_GEQ(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 0);
+ _v2.OK := _v2.OK
+ && _v2.Res_VALID_REGION(_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 1,
+ 1))
+ == 1;
+ assert true;
+ _v2.Mem_T.UCHAR := _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 1,
+ 1) := 3];
+ assume _v2.value_is(_v2.__ctobpl_const_51,
+ _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)]);
+ assume _v2.value_is(_v2.__ctobpl_const_52,
+ _v2.Mem_T.UCHAR[_v2.INT_PLUS(_v2.Mem_T.se_rsn_ie_ieee80211_scan_entry[_v2.se_rsn_ie_ieee80211_scan_entry(inline$_v2.main$0$se)],
+ 1,
+ 1)]);
+ goto inline$_v2.main$0$label_8#2;
+
+ inline$_v2.main$0$label_8#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 69} true;
+ assume _v2.INT_GT(inline$_v2.main$0$se, 0);
+ assume _v2.INT_GT(inline$_v2.main$0$se, 0);
+ _v2.giwscan_cb_in_8_0, _v2.giwscan_cb_in_8_1, _v2.giwscan_cb_in_8_2, _v2.giwscan_cb_in_8_3, _v2.giwscan_cb_in_8_4 := inline$_v2.main$0$se, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ call inline$_v2.main$0$result.giwscan_cb$2 := _v2.giwscan_cb(inline$_v2.main$0$se);
+ _v2.giwscan_cb_8_done := true;
+ _v2.giwscan_cb_out_8_0, _v2.giwscan_cb_out_8_1, _v2.giwscan_cb_out_8_2, _v2.giwscan_cb_out_8_3 := inline$_v2.main$0$result.giwscan_cb$2, _v2.alloc, _v2.OK, _v2.Mem_T.UCHAR;
+ goto inline$_v2.main$0$label_11#2;
+
+ inline$_v2.main$0$label_11#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 71} true;
+ inline$_v2.main$0$result.main$1 := 0;
+ goto inline$_v2.main$0$label_1#2;
+
+ inline$_v2.main$0$label_1#2:
+ _v2.OK := _v2.OK && true;
+ assert {:sourcefile "d:\tvm\projects\symb_diff\benchmarks\verisec-suite\programs\apps\madwifi\cve-2006-6332\ok\interproc_ok.c"} {:sourceline 72} true;
+ _v2.__HAVOC_free_in_9_0, _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3, _v2.__HAVOC_free_in_9_4 := inline$_v2.main$0$ie, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ call _v2.__HAVOC_free(inline$_v2.main$0$ie);
+ _v2.__HAVOC_free_9_done := true;
+ _v2.__HAVOC_free_in_10_0, _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3, _v2.__HAVOC_free_in_10_4 := inline$_v2.main$0$se, _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ call _v2.__HAVOC_free(inline$_v2.main$0$se);
+ _v2.__HAVOC_free_10_done := true;
+ goto inline$_v2.main$0$Return;
+
+ inline$_v2.main$0$Return:
+ assume true;
+ _v2.result.main$1 := inline$_v2.main$0$result.main$1;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_8;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done;
+ store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3, _v1.__HAVOC_det_malloc_in_1_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3, _v2.__HAVOC_det_malloc_in_6_4;
+ call out__v1.__HAVOC_det_malloc_out_1_0_0, out__v2.__HAVOC_det_malloc_out_6_0_0 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_6_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
+ assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_0
+ && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_0;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__0__v1.alloc, store__0__v1.OK, store__0__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__0__v2.alloc, store__0__v2.OK, store__0__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__0__v2.Mem_T.UCHAR;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_6_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+
+ MS_L_0_1:
+ goto MS_L_taken_1, MS_L_not_taken_1;
+
+ MS_L_taken_1:
+ assume _v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done;
+ store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_1_1, _v1.__HAVOC_det_malloc_in_1_2, _v1.__HAVOC_det_malloc_in_1_3, _v1.__HAVOC_det_malloc_in_1_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3, _v2.__HAVOC_det_malloc_in_7_4;
+ call out__v1.__HAVOC_det_malloc_out_1_0_1, out__v2.__HAVOC_det_malloc_out_7_0_1 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_1_0, _v2.__HAVOC_det_malloc_in_7_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_1_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
+ assume _v1.__HAVOC_det_malloc_out_1_0 == out__v1.__HAVOC_det_malloc_out_1_0_1
+ && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_1;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__1__v1.alloc, store__1__v1.OK, store__1__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__1__v2.alloc, store__1__v2.OK, store__1__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__1__v2.Mem_T.UCHAR;
+ goto MS_L_meet_1;
+
+ MS_L_not_taken_1:
+ assume !(_v1.__HAVOC_det_malloc_1_done && _v2.__HAVOC_det_malloc_7_done);
+ goto MS_L_meet_1;
+
+ MS_L_meet_1:
+ goto MS_L_0_0;
+
+ MS_L_0_2:
+ goto MS_L_taken_2, MS_L_not_taken_2;
+
+ MS_L_taken_2:
+ assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done;
+ store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3, _v1.__HAVOC_det_malloc_in_2_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_6_1, _v2.__HAVOC_det_malloc_in_6_2, _v2.__HAVOC_det_malloc_in_6_3, _v2.__HAVOC_det_malloc_in_6_4;
+ call out__v1.__HAVOC_det_malloc_out_2_0_2, out__v2.__HAVOC_det_malloc_out_6_0_2 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_6_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_6_1;
+ assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_2
+ && _v2.__HAVOC_det_malloc_out_6_0 == out__v2.__HAVOC_det_malloc_out_6_0_2;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__2__v1.alloc, store__2__v1.OK, store__2__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__2__v2.alloc, store__2__v2.OK, store__2__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__2__v2.Mem_T.UCHAR;
+ goto MS_L_meet_2;
+
+ MS_L_not_taken_2:
+ assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_6_done);
+ goto MS_L_meet_2;
+
+ MS_L_meet_2:
+ goto MS_L_0_1;
+
+ MS_L_0_3:
+ goto MS_L_taken_3, MS_L_not_taken_3;
+
+ MS_L_taken_3:
+ assume _v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done;
+ store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_det_malloc_in_2_1, _v1.__HAVOC_det_malloc_in_2_2, _v1.__HAVOC_det_malloc_in_2_3, _v1.__HAVOC_det_malloc_in_2_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_det_malloc_in_7_1, _v2.__HAVOC_det_malloc_in_7_2, _v2.__HAVOC_det_malloc_in_7_3, _v2.__HAVOC_det_malloc_in_7_4;
+ call out__v1.__HAVOC_det_malloc_out_2_0_3, out__v2.__HAVOC_det_malloc_out_7_0_3 := MS_Check__v1.__HAVOC_det_malloc___v2.__HAVOC_det_malloc(_v1.__HAVOC_det_malloc_in_2_0, _v2.__HAVOC_det_malloc_in_7_0);
+ assume _v1.alloc == _v1.__HAVOC_det_malloc_out_2_1;
+ assume _v2.alloc == _v2.__HAVOC_det_malloc_out_7_1;
+ assume _v1.__HAVOC_det_malloc_out_2_0 == out__v1.__HAVOC_det_malloc_out_2_0_3
+ && _v2.__HAVOC_det_malloc_out_7_0 == out__v2.__HAVOC_det_malloc_out_7_0_3;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__3__v1.alloc, store__3__v1.OK, store__3__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__3__v2.alloc, store__3__v2.OK, store__3__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__3__v2.Mem_T.UCHAR;
+ goto MS_L_meet_3;
+
+ MS_L_not_taken_3:
+ assume !(_v1.__HAVOC_det_malloc_2_done && _v2.__HAVOC_det_malloc_7_done);
+ goto MS_L_meet_3;
+
+ MS_L_meet_3:
+ goto MS_L_0_2;
+
+ MS_L_0_4:
+ goto MS_L_taken_4, MS_L_not_taken_4;
+
+ MS_L_taken_4:
+ assume _v1.giwscan_cb_3_done && _v2.giwscan_cb_8_done;
+ store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.giwscan_cb_in_3_1, _v1.giwscan_cb_in_3_2, _v1.giwscan_cb_in_3_3, _v1.giwscan_cb_in_3_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.giwscan_cb_in_8_1, _v2.giwscan_cb_in_8_2, _v2.giwscan_cb_in_8_3, _v2.giwscan_cb_in_8_4;
+ call out__v1.giwscan_cb_out_3_0_4, out__v2.giwscan_cb_out_8_0_4 := MS_Check__v1.giwscan_cb___v2.giwscan_cb(_v1.giwscan_cb_in_3_0, _v2.giwscan_cb_in_8_0);
+ assume _v1.alloc == _v1.giwscan_cb_out_3_1
+ && (_v1.OK <==> _v1.giwscan_cb_out_3_2)
+ && _v1.Mem_T.UCHAR == _v1.giwscan_cb_out_3_3;
+ assume _v2.alloc == _v2.giwscan_cb_out_8_1
+ && (_v2.OK <==> _v2.giwscan_cb_out_8_2)
+ && _v2.Mem_T.UCHAR == _v2.giwscan_cb_out_8_3;
+ assume _v1.giwscan_cb_out_3_0 == out__v1.giwscan_cb_out_3_0_4
+ && _v2.giwscan_cb_out_8_0 == out__v2.giwscan_cb_out_8_0_4;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__4__v1.alloc, store__4__v1.OK, store__4__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__4__v2.alloc, store__4__v2.OK, store__4__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__4__v2.Mem_T.UCHAR;
+ goto MS_L_meet_4;
+
+ MS_L_not_taken_4:
+ assume !(_v1.giwscan_cb_3_done && _v2.giwscan_cb_8_done);
+ goto MS_L_meet_4;
+
+ MS_L_meet_4:
+ goto MS_L_0_3;
+
+ MS_L_0_5:
+ goto MS_L_taken_5, MS_L_not_taken_5;
+
+ MS_L_taken_5:
+ assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done;
+ store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3, _v1.__HAVOC_free_in_4_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3, _v2.__HAVOC_free_in_9_4;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_9_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__5__v1.alloc, store__5__v1.OK, store__5__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__5__v2.alloc, store__5__v2.OK, store__5__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__5__v2.Mem_T.UCHAR;
+ goto MS_L_meet_5;
+
+ MS_L_not_taken_5:
+ assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_9_done);
+ goto MS_L_meet_5;
+
+ MS_L_meet_5:
+ goto MS_L_0_4;
+
+ MS_L_0_6:
+ goto MS_L_taken_6, MS_L_not_taken_6;
+
+ MS_L_taken_6:
+ assume _v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done;
+ store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_4_1, _v1.__HAVOC_free_in_4_2, _v1.__HAVOC_free_in_4_3, _v1.__HAVOC_free_in_4_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3, _v2.__HAVOC_free_in_10_4;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_4_0, _v2.__HAVOC_free_in_10_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__6__v1.alloc, store__6__v1.OK, store__6__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__6__v2.alloc, store__6__v2.OK, store__6__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__6__v2.Mem_T.UCHAR;
+ goto MS_L_meet_6;
+
+ MS_L_not_taken_6:
+ assume !(_v1.__HAVOC_free_4_done && _v2.__HAVOC_free_10_done);
+ goto MS_L_meet_6;
+
+ MS_L_meet_6:
+ goto MS_L_0_5;
+
+ MS_L_0_7:
+ goto MS_L_taken_7, MS_L_not_taken_7;
+
+ MS_L_taken_7:
+ assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done;
+ store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3, _v1.__HAVOC_free_in_5_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_9_1, _v2.__HAVOC_free_in_9_2, _v2.__HAVOC_free_in_9_3, _v2.__HAVOC_free_in_9_4;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_9_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__7__v1.alloc, store__7__v1.OK, store__7__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__7__v2.alloc, store__7__v2.OK, store__7__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__7__v2.Mem_T.UCHAR;
+ goto MS_L_meet_7;
+
+ MS_L_not_taken_7:
+ assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_9_done);
+ goto MS_L_meet_7;
+
+ MS_L_meet_7:
+ goto MS_L_0_6;
+
+ MS_L_0_8:
+ goto MS_L_taken_8, MS_L_not_taken_8;
+
+ MS_L_taken_8:
+ assume _v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done;
+ store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v1.Mem_T.UCHAR := _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR;
+ store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v2.Mem_T.UCHAR := _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := _v1.__HAVOC_free_in_5_1, _v1.__HAVOC_free_in_5_2, _v1.__HAVOC_free_in_5_3, _v1.__HAVOC_free_in_5_4;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := _v2.__HAVOC_free_in_10_1, _v2.__HAVOC_free_in_10_2, _v2.__HAVOC_free_in_10_3, _v2.__HAVOC_free_in_10_4;
+ call MS_Check__v1.__HAVOC_free___v2.__HAVOC_free(_v1.__HAVOC_free_in_5_0, _v2.__HAVOC_free_in_10_0);
+ assume true;
+ assume true;
+ assume true;
+ _v1.alloc, _v1.OK, _v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v1.Mem_T.UCHAR := store__8__v1.alloc, store__8__v1.OK, store__8__v1.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v1.Mem_T.UCHAR;
+ _v2.alloc, _v2.OK, _v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, _v2.Mem_T.UCHAR := store__8__v2.alloc, store__8__v2.OK, store__8__v2.Mem_T.se_rsn_ie_ieee80211_scan_entry, store__8__v2.Mem_T.UCHAR;
+ goto MS_L_meet_8;
+
+ MS_L_not_taken_8:
+ assume !(_v1.__HAVOC_free_5_done && _v2.__HAVOC_free_10_done);
+ goto MS_L_meet_8;
+
+ MS_L_meet_8:
+ goto MS_L_0_7;
+}
+
+
diff --git a/Test/houdini/mergedProgSingle_dac.bpl.expect b/Test/houdini/mergedProgSingle_dac.bpl.expect
index 75750967..e9e7034a 100644
--- a/Test/houdini/mergedProgSingle_dac.bpl.expect
+++ b/Test/houdini/mergedProgSingle_dac.bpl.expect
@@ -1,190 +1,190 @@
-Assignment computed by Houdini:
-_houdini_0 = False
-_houdini_1 = False
-_houdini_2 = False
-_houdini_3 = False
-_houdini_4 = True
-_houdini_5 = True
-_houdini_6 = True
-_houdini_7 = True
-_houdini_8 = True
-_houdini_9 = True
-_houdini_10 = True
-_houdini_11 = True
-_houdini_12 = True
-_houdini_13 = True
-_houdini_14 = True
-_houdini_15 = True
-_houdini_16 = False
-_houdini_17 = True
-_houdini_18 = True
-_houdini_19 = True
-_houdini_20 = True
-_houdini_21 = True
-_houdini_22 = True
-_houdini_23 = True
-_houdini_24 = False
-_houdini_25 = False
-_houdini_26 = True
-_houdini_27 = True
-_houdini_28 = True
-_houdini_29 = False
-_houdini_30 = False
-_houdini_31 = True
-_houdini_32 = True
-_houdini_33 = True
-_houdini_34 = True
-_houdini_35 = True
-_houdini_36 = True
-_houdini_37 = True
-_houdini_38 = True
-_houdini_39 = True
-_houdini_40 = True
-_houdini_41 = True
-_houdini_42 = True
-_houdini_43 = True
-_houdini_44 = True
-_houdini_45 = True
-_houdini_46 = True
-_houdini_47 = True
-_houdini_48 = True
-_houdini_49 = True
-_houdini_50 = True
-_houdini_51 = True
-_houdini_52 = True
-_houdini_53 = True
-_houdini_54 = True
-_houdini_55 = True
-_houdini_56 = True
-_houdini_57 = True
-_houdini_58 = True
-_houdini_59 = True
-_houdini_60 = True
-_houdini_61 = True
-_houdini_62 = True
-_houdini_63 = True
-_houdini_64 = True
-_houdini_65 = True
-_houdini_66 = True
-_houdini_67 = True
-_houdini_68 = True
-_houdini_69 = True
-_houdini_70 = True
-_houdini_71 = True
-_houdini_72 = True
-_houdini_73 = True
-_houdini_74 = True
-_houdini_75 = True
-_houdini_76 = False
-_houdini_77 = False
-_houdini_78 = True
-_houdini_79 = False
-_houdini_80 = False
-_houdini_81 = True
-_houdini_82 = True
-_houdini_83 = True
-_houdini_84 = True
-_houdini_85 = True
-_houdini_86 = True
-_houdini_87 = True
-_houdini_88 = True
-_houdini_89 = True
-_houdini_90 = True
-_houdini_91 = True
-_houdini_92 = True
-_houdini_93 = True
-_houdini_94 = True
-_houdini_95 = True
-_houdini_96 = True
-_houdini_97 = True
-_houdini_98 = True
-_houdini_99 = True
-_houdini_100 = True
-_houdini_101 = True
-_houdini_102 = True
-_houdini_103 = True
-_houdini_104 = True
-_houdini_105 = True
-_houdini_106 = True
-_houdini_107 = True
-_houdini_108 = True
-_houdini_109 = True
-_houdini_110 = True
-_houdini_111 = True
-_houdini_112 = True
-_houdini_113 = True
-_houdini_114 = True
-_houdini_115 = False
-_houdini_116 = False
-_houdini_117 = False
-_houdini_118 = False
-_houdini_119 = False
-_houdini_120 = False
-_houdini_121 = False
-_houdini_122 = True
-_houdini_123 = False
-_houdini_124 = False
-_houdini_125 = True
-_houdini_126 = True
-_houdini_127 = True
-_houdini_128 = True
-_houdini_129 = True
-_houdini_130 = True
-_houdini_131 = True
-_houdini_132 = False
-_houdini_133 = False
-_houdini_134 = True
-_houdini_135 = True
-_houdini_136 = True
-_houdini_137 = True
-_houdini_138 = True
-_houdini_139 = True
-_houdini_140 = True
-_houdini_141 = True
-_houdini_142 = True
-_houdini_143 = True
-_houdini_144 = True
-_houdini_145 = True
-_houdini_146 = True
-_houdini_147 = True
-_houdini_148 = True
-_houdini_149 = True
-_houdini_150 = True
-_houdini_151 = True
-_houdini_152 = True
-_houdini_153 = True
-_houdini_154 = True
-_houdini_155 = True
-_houdini_156 = True
-_houdini_157 = True
-_houdini_158 = True
-_houdini_159 = True
-_houdini_160 = True
-_houdini_161 = False
-_houdini_162 = False
-_houdini_163 = True
-_houdini_164 = True
-_houdini_165 = True
-_houdini_166 = True
-_houdini_167 = True
-_houdini_168 = True
-_houdini_169 = True
-_houdini_170 = True
-_houdini_171 = True
-_houdini_172 = True
-_houdini_173 = True
-_houdini_174 = True
-_houdini_175 = True
-_houdini_176 = True
-_houdini_177 = True
-_houdini_178 = True
-_houdini_179 = True
-_houdini_180 = True
-_houdini_181 = True
-_houdini_182 = True
-_houdini_183 = True
-_houdini_184 = True
-_houdini_185 = True
-_houdini_186 = True
-
-Boogie program verifier finished with 12 verified, 0 errors
+Assignment computed by Houdini:
+_houdini_0 = False
+_houdini_1 = False
+_houdini_2 = False
+_houdini_3 = False
+_houdini_4 = True
+_houdini_5 = True
+_houdini_6 = True
+_houdini_7 = True
+_houdini_8 = True
+_houdini_9 = True
+_houdini_10 = True
+_houdini_11 = True
+_houdini_12 = True
+_houdini_13 = True
+_houdini_14 = True
+_houdini_15 = True
+_houdini_16 = False
+_houdini_17 = True
+_houdini_18 = True
+_houdini_19 = True
+_houdini_20 = True
+_houdini_21 = True
+_houdini_22 = True
+_houdini_23 = True
+_houdini_24 = False
+_houdini_25 = False
+_houdini_26 = True
+_houdini_27 = True
+_houdini_28 = True
+_houdini_29 = False
+_houdini_30 = False
+_houdini_31 = True
+_houdini_32 = True
+_houdini_33 = True
+_houdini_34 = True
+_houdini_35 = True
+_houdini_36 = True
+_houdini_37 = True
+_houdini_38 = True
+_houdini_39 = True
+_houdini_40 = True
+_houdini_41 = True
+_houdini_42 = True
+_houdini_43 = True
+_houdini_44 = True
+_houdini_45 = True
+_houdini_46 = True
+_houdini_47 = True
+_houdini_48 = True
+_houdini_49 = True
+_houdini_50 = True
+_houdini_51 = True
+_houdini_52 = True
+_houdini_53 = True
+_houdini_54 = True
+_houdini_55 = True
+_houdini_56 = True
+_houdini_57 = True
+_houdini_58 = True
+_houdini_59 = True
+_houdini_60 = True
+_houdini_61 = True
+_houdini_62 = True
+_houdini_63 = True
+_houdini_64 = True
+_houdini_65 = True
+_houdini_66 = True
+_houdini_67 = True
+_houdini_68 = True
+_houdini_69 = True
+_houdini_70 = True
+_houdini_71 = True
+_houdini_72 = True
+_houdini_73 = True
+_houdini_74 = True
+_houdini_75 = True
+_houdini_76 = False
+_houdini_77 = False
+_houdini_78 = True
+_houdini_79 = False
+_houdini_80 = False
+_houdini_81 = True
+_houdini_82 = True
+_houdini_83 = True
+_houdini_84 = True
+_houdini_85 = True
+_houdini_86 = True
+_houdini_87 = True
+_houdini_88 = True
+_houdini_89 = True
+_houdini_90 = True
+_houdini_91 = True
+_houdini_92 = True
+_houdini_93 = True
+_houdini_94 = True
+_houdini_95 = True
+_houdini_96 = True
+_houdini_97 = True
+_houdini_98 = True
+_houdini_99 = True
+_houdini_100 = True
+_houdini_101 = True
+_houdini_102 = True
+_houdini_103 = True
+_houdini_104 = True
+_houdini_105 = True
+_houdini_106 = True
+_houdini_107 = True
+_houdini_108 = True
+_houdini_109 = True
+_houdini_110 = True
+_houdini_111 = True
+_houdini_112 = True
+_houdini_113 = True
+_houdini_114 = True
+_houdini_115 = False
+_houdini_116 = False
+_houdini_117 = False
+_houdini_118 = False
+_houdini_119 = False
+_houdini_120 = False
+_houdini_121 = False
+_houdini_122 = True
+_houdini_123 = False
+_houdini_124 = False
+_houdini_125 = True
+_houdini_126 = True
+_houdini_127 = True
+_houdini_128 = True
+_houdini_129 = True
+_houdini_130 = True
+_houdini_131 = True
+_houdini_132 = False
+_houdini_133 = False
+_houdini_134 = True
+_houdini_135 = True
+_houdini_136 = True
+_houdini_137 = True
+_houdini_138 = True
+_houdini_139 = True
+_houdini_140 = True
+_houdini_141 = True
+_houdini_142 = True
+_houdini_143 = True
+_houdini_144 = True
+_houdini_145 = True
+_houdini_146 = True
+_houdini_147 = True
+_houdini_148 = True
+_houdini_149 = True
+_houdini_150 = True
+_houdini_151 = True
+_houdini_152 = True
+_houdini_153 = True
+_houdini_154 = True
+_houdini_155 = True
+_houdini_156 = True
+_houdini_157 = True
+_houdini_158 = True
+_houdini_159 = True
+_houdini_160 = True
+_houdini_161 = False
+_houdini_162 = False
+_houdini_163 = True
+_houdini_164 = True
+_houdini_165 = True
+_houdini_166 = True
+_houdini_167 = True
+_houdini_168 = True
+_houdini_169 = True
+_houdini_170 = True
+_houdini_171 = True
+_houdini_172 = True
+_houdini_173 = True
+_houdini_174 = True
+_houdini_175 = True
+_houdini_176 = True
+_houdini_177 = True
+_houdini_178 = True
+_houdini_179 = True
+_houdini_180 = True
+_houdini_181 = True
+_houdini_182 = True
+_houdini_183 = True
+_houdini_184 = True
+_houdini_185 = True
+_houdini_186 = True
+
+Boogie program verifier finished with 12 verified, 0 errors
diff --git a/Test/houdini/mergedProgSingle_res_ex1.bpl b/Test/houdini/mergedProgSingle_res_ex1.bpl
index 9313075a..eaaa9945 100644
--- a/Test/houdini/mergedProgSingle_res_ex1.bpl
+++ b/Test/houdini/mergedProgSingle_res_ex1.bpl
@@ -1,621 +1,621 @@
-// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-var _v2.control_flag: int;
-
-function _v2.control_UIF(arg_0: int, arg_1: int) : int;
-
-procedure _v2.Eval(x: int) returns (result: int);
- modifies _v2.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
-
-
-
-procedure _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
- modifies _v2.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
-
-
-
-implementation _v2.Eval(x.1: int) returns (result: int)
-{
- var x: int;
-
- anon0:
- x := x.1;
- result := 0;
- _v2.control_flag := 0;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- call result, x := _v2.Eval_loop_anon3_LoopHead(result, x);
- goto anon3_LoopHead_last;
-
- anon3_LoopHead_last:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- result := result + x;
- havoc result;
- x := x - 1;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- assume false;
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= x;
- goto anon2;
-
- anon2:
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
- return;
-}
-
-
-
-implementation _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
-{
-
- entry:
- out_result, out_x := in_result, in_x;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} out_x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- out_result := out_result + out_x;
- havoc out_result;
- out_x := out_x - 1;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- call out_result, out_x := _v2.Eval_loop_anon3_LoopHead(out_result, out_x);
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= out_x;
- out_result, out_x := in_result, in_x;
- _v2.control_flag := old(_v2.control_flag);
- return;
-}
-
-
-
-var _v1.control_flag: int;
-
-procedure _v1.Eval(x: int) returns (result: int);
- modifies _v1.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
-
-
-
-procedure _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
- modifies _v1.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
-
-
-
-implementation _v1.Eval(x.1: int) returns (result: int)
-{
- var x: int;
-
- anon0:
- x := x.1;
- result := 0;
- _v1.control_flag := 0;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- call result, x := _v1.Eval_loop_anon3_LoopHead(result, x);
- goto anon3_LoopHead_last;
-
- anon3_LoopHead_last:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- result := result + x;
- x := x - 1;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- assume false;
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= x;
- goto anon2;
-
- anon2:
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
- return;
-}
-
-
-
-implementation _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
-{
-
- entry:
- out_result, out_x := in_result, in_x;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} out_x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- out_result := out_result + out_x;
- out_x := out_x - 1;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- call out_result, out_x := _v1.Eval_loop_anon3_LoopHead(out_result, out_x);
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= out_x;
- out_result, out_x := in_result, in_x;
- _v1.control_flag := old(_v1.control_flag);
- return;
-}
-
-
-
-function {:inline true} MS$_v1.Eval$_v2.Eval(_v1.x: int,
- _v1.control_flag_old: int,
- _v1.control_flag_: int,
- _v1.result: int,
- _v2.x: int,
- _v2.control_flag_old: int,
- _v2.control_flag_: int,
- _v2.result: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_Eval_control_flag_0: bool;
-
-const {:existential true} _houdini_Eval_result_1: bool;
-
-procedure MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int);
- modifies _v1.control_flag, _v2.control_flag;
- ensures MS$_v1.Eval$_v2.Eval(_v1.x,
- old(_v1.control_flag),
- _v1.control_flag,
- _v1.result,
- _v2.x,
- old(_v2.control_flag),
- _v2.control_flag,
- _v2.result);
- ensures _houdini_Eval_control_flag_0
- ==>
- old(_v1.control_flag == _v2.control_flag && _v1.x == _v2.x)
- ==> _v1.control_flag == _v2.control_flag;
- ensures _houdini_Eval_result_1 ==> old(_v1.x == _v2.x) ==> _v1.result == _v2.result;
-
-
-
-implementation MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int)
-{
- var inline$_v1.Eval$0$x: int;
- var inline$_v1.Eval$0$x.1: int;
- var inline$_v1.Eval$0$result: int;
- var inline$_v1.Eval$0$_v1.control_flag: int;
- var inline$_v2.Eval$0$x: int;
- var inline$_v2.Eval$0$x.1: int;
- var inline$_v2.Eval$0$result: int;
- var inline$_v2.Eval$0$_v2.control_flag: int;
- var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
- var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
- var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
- var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
- var store__0__v1.control_flag: int;
- var store__0__v2.control_flag: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
-
- START:
- _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
- goto inline$_v1.Eval$0$Entry;
-
- inline$_v1.Eval$0$Entry:
- inline$_v1.Eval$0$x.1 := _v1.x;
- havoc inline$_v1.Eval$0$x, inline$_v1.Eval$0$result;
- inline$_v1.Eval$0$_v1.control_flag := _v1.control_flag;
- goto inline$_v1.Eval$0$anon0;
-
- inline$_v1.Eval$0$anon0:
- inline$_v1.Eval$0$x := inline$_v1.Eval$0$x.1;
- inline$_v1.Eval$0$result := 0;
- _v1.control_flag := 0;
- goto inline$_v1.Eval$0$anon3_LoopHead;
-
- inline$_v1.Eval$0$anon3_LoopHead:
- _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
- call inline$_v1.Eval$0$result, inline$_v1.Eval$0$x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval$0$result, inline$_v1.Eval$0$x);
- _v1.Eval_loop_anon3_LoopHead_1_done := true;
- _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
- goto inline$_v1.Eval$0$anon3_LoopHead_last;
-
- inline$_v1.Eval$0$anon3_LoopHead_last:
- goto inline$_v1.Eval$0$anon3_LoopDone, inline$_v1.Eval$0$anon3_LoopBody;
-
- inline$_v1.Eval$0$anon3_LoopBody:
- assume {:partition} inline$_v1.Eval$0$x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- inline$_v1.Eval$0$result := inline$_v1.Eval$0$result + inline$_v1.Eval$0$x;
- inline$_v1.Eval$0$x := inline$_v1.Eval$0$x - 1;
- goto inline$_v1.Eval$0$anon3_LoopBody_dummy;
-
- inline$_v1.Eval$0$anon3_LoopBody_dummy:
- assume false;
- goto inline$_v1.Eval$0$Return;
-
- inline$_v1.Eval$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v1.Eval$0$x;
- goto inline$_v1.Eval$0$anon2;
-
- inline$_v1.Eval$0$anon2:
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
- goto inline$_v1.Eval$0$Return;
-
- inline$_v1.Eval$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- _v1.result := inline$_v1.Eval$0$result;
- goto START$1;
-
- START$1:
- goto inline$_v2.Eval$0$Entry;
-
- inline$_v2.Eval$0$Entry:
- inline$_v2.Eval$0$x.1 := _v2.x;
- havoc inline$_v2.Eval$0$x, inline$_v2.Eval$0$result;
- inline$_v2.Eval$0$_v2.control_flag := _v2.control_flag;
- goto inline$_v2.Eval$0$anon0;
-
- inline$_v2.Eval$0$anon0:
- inline$_v2.Eval$0$x := inline$_v2.Eval$0$x.1;
- inline$_v2.Eval$0$result := 0;
- _v2.control_flag := 0;
- goto inline$_v2.Eval$0$anon3_LoopHead;
-
- inline$_v2.Eval$0$anon3_LoopHead:
- _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
- call inline$_v2.Eval$0$result, inline$_v2.Eval$0$x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval$0$result, inline$_v2.Eval$0$x);
- _v2.Eval_loop_anon3_LoopHead_2_done := true;
- _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
- goto inline$_v2.Eval$0$anon3_LoopHead_last;
-
- inline$_v2.Eval$0$anon3_LoopHead_last:
- goto inline$_v2.Eval$0$anon3_LoopDone, inline$_v2.Eval$0$anon3_LoopBody;
-
- inline$_v2.Eval$0$anon3_LoopBody:
- assume {:partition} inline$_v2.Eval$0$x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- inline$_v2.Eval$0$result := inline$_v2.Eval$0$result + inline$_v2.Eval$0$x;
- havoc inline$_v2.Eval$0$result;
- inline$_v2.Eval$0$x := inline$_v2.Eval$0$x - 1;
- goto inline$_v2.Eval$0$anon3_LoopBody_dummy;
-
- inline$_v2.Eval$0$anon3_LoopBody_dummy:
- assume false;
- goto inline$_v2.Eval$0$Return;
-
- inline$_v2.Eval$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v2.Eval$0$x;
- goto inline$_v2.Eval$0$anon2;
-
- inline$_v2.Eval$0$anon2:
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
- goto inline$_v2.Eval$0$Return;
-
- inline$_v2.Eval$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- _v2.result := inline$_v2.Eval$0$result;
- goto START$2;
-
- START$2:
- goto MS_L_0_0;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
- store__0__v1.control_flag := _v1.control_flag;
- store__0__v2.control_flag := _v2.control_flag;
- _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
- _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
- call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
- assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
- assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
- assume _v1.Eval_loop_anon3_LoopHead_out_1_0
- == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
- && _v1.Eval_loop_anon3_LoopHead_out_1_1
- == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_0
- == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_1
- == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
- _v1.control_flag := store__0__v1.control_flag;
- _v2.control_flag := store__0__v2.control_flag;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-}
-
-
-
-function {:inline true} MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result: int,
- _v1.in_x: int,
- _v1.control_flag_old: int,
- _v1.control_flag_: int,
- _v1.out_result: int,
- _v1.out_x: int,
- _v2.in_result: int,
- _v2.in_x: int,
- _v2.control_flag_old: int,
- _v2.control_flag_: int,
- _v2.out_result: int,
- _v2.out_x: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_Eval_loop_anon3_LoopHead_control_flag_2: bool;
-
-const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_result_3: bool;
-
-const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_x_4: bool;
-
-procedure MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
- returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int);
- modifies _v1.control_flag, _v2.control_flag;
- ensures MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result,
- _v1.in_x,
- old(_v1.control_flag),
- _v1.control_flag,
- _v1.out_result,
- _v1.out_x,
- _v2.in_result,
- _v2.in_x,
- old(_v2.control_flag),
- _v2.control_flag,
- _v2.out_result,
- _v2.out_x);
- ensures _houdini_Eval_loop_anon3_LoopHead_control_flag_2
- ==>
- old(_v1.control_flag == _v2.control_flag && _v1.in_x == _v2.in_x)
- ==> _v1.control_flag == _v2.control_flag;
- ensures _houdini_Eval_loop_anon3_LoopHead_out_result_3
- ==>
- old(_v1.in_result == _v2.in_result && _v1.in_x == _v2.in_x)
- ==> _v1.out_result == _v2.out_result;
- ensures _houdini_Eval_loop_anon3_LoopHead_out_x_4
- ==>
- old(_v1.in_x == _v2.in_x)
- ==> _v1.out_x == _v2.out_x;
-
-
-
-implementation MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
- returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int)
-{
- var inline$_v1.Eval_loop_anon3_LoopHead$0$in_result: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$in_x: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$out_result: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$out_x: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$in_result: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$in_x: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$out_result: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$out_x: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag: int;
- var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
- var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
- var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
- var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
- var store__0__v1.control_flag: int;
- var store__0__v2.control_flag: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
-
- START:
- _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$Entry;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$Entry:
- inline$_v1.Eval_loop_anon3_LoopHead$0$in_result := _v1.in_result;
- inline$_v1.Eval_loop_anon3_LoopHead$0$in_x := _v1.in_x;
- havoc inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag := _v1.control_flag;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$entry;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$entry:
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
- assume {:partition} inline$_v1.Eval_loop_anon3_LoopHead$0$out_x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result
- + inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x - 1;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
- _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
- call inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x);
- _v1.Eval_loop_anon3_LoopHead_1_done := true;
- _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
- _v1.control_flag := inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- _v1.out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result;
- _v1.out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- goto START$1;
-
- START$1:
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$Entry;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$Entry:
- inline$_v2.Eval_loop_anon3_LoopHead$0$in_result := _v2.in_result;
- inline$_v2.Eval_loop_anon3_LoopHead$0$in_x := _v2.in_x;
- havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag := _v2.control_flag;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$entry;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$entry:
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
- assume {:partition} inline$_v2.Eval_loop_anon3_LoopHead$0$out_x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result
- + inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_result;
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x - 1;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
- _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
- call inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x);
- _v2.Eval_loop_anon3_LoopHead_2_done := true;
- _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
- _v2.control_flag := inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- _v2.out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result;
- _v2.out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- goto START$2;
-
- START$2:
- goto MS_L_0_0;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
- store__0__v1.control_flag := _v1.control_flag;
- store__0__v2.control_flag := _v2.control_flag;
- _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
- _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
- call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
- assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
- assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
- assume _v1.Eval_loop_anon3_LoopHead_out_1_0
- == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
- && _v1.Eval_loop_anon3_LoopHead_out_1_1
- == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_0
- == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_1
- == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
- _v1.control_flag := store__0__v1.control_flag;
- _v2.control_flag := store__0__v2.control_flag;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-}
-
-
+// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var _v2.control_flag: int;
+
+function _v2.control_UIF(arg_0: int, arg_1: int) : int;
+
+procedure _v2.Eval(x: int) returns (result: int);
+ modifies _v2.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+
+
+
+procedure _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
+ modifies _v2.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+
+
+
+implementation _v2.Eval(x.1: int) returns (result: int)
+{
+ var x: int;
+
+ anon0:
+ x := x.1;
+ result := 0;
+ _v2.control_flag := 0;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ call result, x := _v2.Eval_loop_anon3_LoopHead(result, x);
+ goto anon3_LoopHead_last;
+
+ anon3_LoopHead_last:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ result := result + x;
+ havoc result;
+ x := x - 1;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ assume false;
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= x;
+ goto anon2;
+
+ anon2:
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
+ return;
+}
+
+
+
+implementation _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
+{
+
+ entry:
+ out_result, out_x := in_result, in_x;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} out_x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ out_result := out_result + out_x;
+ havoc out_result;
+ out_x := out_x - 1;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ call out_result, out_x := _v2.Eval_loop_anon3_LoopHead(out_result, out_x);
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= out_x;
+ out_result, out_x := in_result, in_x;
+ _v2.control_flag := old(_v2.control_flag);
+ return;
+}
+
+
+
+var _v1.control_flag: int;
+
+procedure _v1.Eval(x: int) returns (result: int);
+ modifies _v1.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+
+
+
+procedure _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
+ modifies _v1.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+
+
+
+implementation _v1.Eval(x.1: int) returns (result: int)
+{
+ var x: int;
+
+ anon0:
+ x := x.1;
+ result := 0;
+ _v1.control_flag := 0;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ call result, x := _v1.Eval_loop_anon3_LoopHead(result, x);
+ goto anon3_LoopHead_last;
+
+ anon3_LoopHead_last:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ result := result + x;
+ x := x - 1;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ assume false;
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= x;
+ goto anon2;
+
+ anon2:
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
+ return;
+}
+
+
+
+implementation _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
+{
+
+ entry:
+ out_result, out_x := in_result, in_x;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} out_x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ out_result := out_result + out_x;
+ out_x := out_x - 1;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ call out_result, out_x := _v1.Eval_loop_anon3_LoopHead(out_result, out_x);
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= out_x;
+ out_result, out_x := in_result, in_x;
+ _v1.control_flag := old(_v1.control_flag);
+ return;
+}
+
+
+
+function {:inline true} MS$_v1.Eval$_v2.Eval(_v1.x: int,
+ _v1.control_flag_old: int,
+ _v1.control_flag_: int,
+ _v1.result: int,
+ _v2.x: int,
+ _v2.control_flag_old: int,
+ _v2.control_flag_: int,
+ _v2.result: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_Eval_control_flag_0: bool;
+
+const {:existential true} _houdini_Eval_result_1: bool;
+
+procedure MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int);
+ modifies _v1.control_flag, _v2.control_flag;
+ ensures MS$_v1.Eval$_v2.Eval(_v1.x,
+ old(_v1.control_flag),
+ _v1.control_flag,
+ _v1.result,
+ _v2.x,
+ old(_v2.control_flag),
+ _v2.control_flag,
+ _v2.result);
+ ensures _houdini_Eval_control_flag_0
+ ==>
+ old(_v1.control_flag == _v2.control_flag && _v1.x == _v2.x)
+ ==> _v1.control_flag == _v2.control_flag;
+ ensures _houdini_Eval_result_1 ==> old(_v1.x == _v2.x) ==> _v1.result == _v2.result;
+
+
+
+implementation MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int)
+{
+ var inline$_v1.Eval$0$x: int;
+ var inline$_v1.Eval$0$x.1: int;
+ var inline$_v1.Eval$0$result: int;
+ var inline$_v1.Eval$0$_v1.control_flag: int;
+ var inline$_v2.Eval$0$x: int;
+ var inline$_v2.Eval$0$x.1: int;
+ var inline$_v2.Eval$0$result: int;
+ var inline$_v2.Eval$0$_v2.control_flag: int;
+ var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
+ var store__0__v1.control_flag: int;
+ var store__0__v2.control_flag: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
+
+ START:
+ _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
+ goto inline$_v1.Eval$0$Entry;
+
+ inline$_v1.Eval$0$Entry:
+ inline$_v1.Eval$0$x.1 := _v1.x;
+ havoc inline$_v1.Eval$0$x, inline$_v1.Eval$0$result;
+ inline$_v1.Eval$0$_v1.control_flag := _v1.control_flag;
+ goto inline$_v1.Eval$0$anon0;
+
+ inline$_v1.Eval$0$anon0:
+ inline$_v1.Eval$0$x := inline$_v1.Eval$0$x.1;
+ inline$_v1.Eval$0$result := 0;
+ _v1.control_flag := 0;
+ goto inline$_v1.Eval$0$anon3_LoopHead;
+
+ inline$_v1.Eval$0$anon3_LoopHead:
+ _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
+ call inline$_v1.Eval$0$result, inline$_v1.Eval$0$x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval$0$result, inline$_v1.Eval$0$x);
+ _v1.Eval_loop_anon3_LoopHead_1_done := true;
+ _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
+ goto inline$_v1.Eval$0$anon3_LoopHead_last;
+
+ inline$_v1.Eval$0$anon3_LoopHead_last:
+ goto inline$_v1.Eval$0$anon3_LoopDone, inline$_v1.Eval$0$anon3_LoopBody;
+
+ inline$_v1.Eval$0$anon3_LoopBody:
+ assume {:partition} inline$_v1.Eval$0$x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ inline$_v1.Eval$0$result := inline$_v1.Eval$0$result + inline$_v1.Eval$0$x;
+ inline$_v1.Eval$0$x := inline$_v1.Eval$0$x - 1;
+ goto inline$_v1.Eval$0$anon3_LoopBody_dummy;
+
+ inline$_v1.Eval$0$anon3_LoopBody_dummy:
+ assume false;
+ goto inline$_v1.Eval$0$Return;
+
+ inline$_v1.Eval$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v1.Eval$0$x;
+ goto inline$_v1.Eval$0$anon2;
+
+ inline$_v1.Eval$0$anon2:
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
+ goto inline$_v1.Eval$0$Return;
+
+ inline$_v1.Eval$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v1.result := inline$_v1.Eval$0$result;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.Eval$0$Entry;
+
+ inline$_v2.Eval$0$Entry:
+ inline$_v2.Eval$0$x.1 := _v2.x;
+ havoc inline$_v2.Eval$0$x, inline$_v2.Eval$0$result;
+ inline$_v2.Eval$0$_v2.control_flag := _v2.control_flag;
+ goto inline$_v2.Eval$0$anon0;
+
+ inline$_v2.Eval$0$anon0:
+ inline$_v2.Eval$0$x := inline$_v2.Eval$0$x.1;
+ inline$_v2.Eval$0$result := 0;
+ _v2.control_flag := 0;
+ goto inline$_v2.Eval$0$anon3_LoopHead;
+
+ inline$_v2.Eval$0$anon3_LoopHead:
+ _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
+ call inline$_v2.Eval$0$result, inline$_v2.Eval$0$x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval$0$result, inline$_v2.Eval$0$x);
+ _v2.Eval_loop_anon3_LoopHead_2_done := true;
+ _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
+ goto inline$_v2.Eval$0$anon3_LoopHead_last;
+
+ inline$_v2.Eval$0$anon3_LoopHead_last:
+ goto inline$_v2.Eval$0$anon3_LoopDone, inline$_v2.Eval$0$anon3_LoopBody;
+
+ inline$_v2.Eval$0$anon3_LoopBody:
+ assume {:partition} inline$_v2.Eval$0$x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ inline$_v2.Eval$0$result := inline$_v2.Eval$0$result + inline$_v2.Eval$0$x;
+ havoc inline$_v2.Eval$0$result;
+ inline$_v2.Eval$0$x := inline$_v2.Eval$0$x - 1;
+ goto inline$_v2.Eval$0$anon3_LoopBody_dummy;
+
+ inline$_v2.Eval$0$anon3_LoopBody_dummy:
+ assume false;
+ goto inline$_v2.Eval$0$Return;
+
+ inline$_v2.Eval$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v2.Eval$0$x;
+ goto inline$_v2.Eval$0$anon2;
+
+ inline$_v2.Eval$0$anon2:
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
+ goto inline$_v2.Eval$0$Return;
+
+ inline$_v2.Eval$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v2.result := inline$_v2.Eval$0$result;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_0;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
+ store__0__v1.control_flag := _v1.control_flag;
+ store__0__v2.control_flag := _v2.control_flag;
+ _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
+ _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
+ call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
+ assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
+ assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
+ assume _v1.Eval_loop_anon3_LoopHead_out_1_0
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
+ && _v1.Eval_loop_anon3_LoopHead_out_1_1
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_0
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_1
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
+ _v1.control_flag := store__0__v1.control_flag;
+ _v2.control_flag := store__0__v2.control_flag;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+}
+
+
+
+function {:inline true} MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result: int,
+ _v1.in_x: int,
+ _v1.control_flag_old: int,
+ _v1.control_flag_: int,
+ _v1.out_result: int,
+ _v1.out_x: int,
+ _v2.in_result: int,
+ _v2.in_x: int,
+ _v2.control_flag_old: int,
+ _v2.control_flag_: int,
+ _v2.out_result: int,
+ _v2.out_x: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_Eval_loop_anon3_LoopHead_control_flag_2: bool;
+
+const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_result_3: bool;
+
+const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_x_4: bool;
+
+procedure MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
+ returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int);
+ modifies _v1.control_flag, _v2.control_flag;
+ ensures MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result,
+ _v1.in_x,
+ old(_v1.control_flag),
+ _v1.control_flag,
+ _v1.out_result,
+ _v1.out_x,
+ _v2.in_result,
+ _v2.in_x,
+ old(_v2.control_flag),
+ _v2.control_flag,
+ _v2.out_result,
+ _v2.out_x);
+ ensures _houdini_Eval_loop_anon3_LoopHead_control_flag_2
+ ==>
+ old(_v1.control_flag == _v2.control_flag && _v1.in_x == _v2.in_x)
+ ==> _v1.control_flag == _v2.control_flag;
+ ensures _houdini_Eval_loop_anon3_LoopHead_out_result_3
+ ==>
+ old(_v1.in_result == _v2.in_result && _v1.in_x == _v2.in_x)
+ ==> _v1.out_result == _v2.out_result;
+ ensures _houdini_Eval_loop_anon3_LoopHead_out_x_4
+ ==>
+ old(_v1.in_x == _v2.in_x)
+ ==> _v1.out_x == _v2.out_x;
+
+
+
+implementation MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
+ returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int)
+{
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$in_result: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$in_x: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$out_result: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$out_x: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$in_result: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$in_x: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$out_result: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$out_x: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag: int;
+ var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
+ var store__0__v1.control_flag: int;
+ var store__0__v2.control_flag: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
+
+ START:
+ _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$Entry;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$Entry:
+ inline$_v1.Eval_loop_anon3_LoopHead$0$in_result := _v1.in_result;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$in_x := _v1.in_x;
+ havoc inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag := _v1.control_flag;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$entry;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$entry:
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
+ assume {:partition} inline$_v1.Eval_loop_anon3_LoopHead$0$out_x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result
+ + inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x - 1;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
+ _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
+ call inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x);
+ _v1.Eval_loop_anon3_LoopHead_1_done := true;
+ _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
+ _v1.control_flag := inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v1.out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result;
+ _v1.out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$Entry;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$Entry:
+ inline$_v2.Eval_loop_anon3_LoopHead$0$in_result := _v2.in_result;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$in_x := _v2.in_x;
+ havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag := _v2.control_flag;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$entry;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$entry:
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
+ assume {:partition} inline$_v2.Eval_loop_anon3_LoopHead$0$out_x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result
+ + inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_result;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x - 1;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
+ _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
+ call inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x);
+ _v2.Eval_loop_anon3_LoopHead_2_done := true;
+ _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
+ _v2.control_flag := inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v2.out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result;
+ _v2.out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_0;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
+ store__0__v1.control_flag := _v1.control_flag;
+ store__0__v2.control_flag := _v2.control_flag;
+ _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
+ _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
+ call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
+ assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
+ assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
+ assume _v1.Eval_loop_anon3_LoopHead_out_1_0
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
+ && _v1.Eval_loop_anon3_LoopHead_out_1_1
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_0
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_1
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
+ _v1.control_flag := store__0__v1.control_flag;
+ _v2.control_flag := store__0__v2.control_flag;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+}
+
+
diff --git a/Test/houdini/mergedProgSingle_res_ex1.bpl.expect b/Test/houdini/mergedProgSingle_res_ex1.bpl.expect
index ead49d31..f7d607c3 100644
--- a/Test/houdini/mergedProgSingle_res_ex1.bpl.expect
+++ b/Test/houdini/mergedProgSingle_res_ex1.bpl.expect
@@ -1,8 +1,8 @@
-Assignment computed by Houdini:
-_houdini_Eval_control_flag_0 = True
-_houdini_Eval_result_1 = False
-_houdini_Eval_loop_anon3_LoopHead_control_flag_2 = True
-_houdini_Eval_loop_anon3_LoopHead_out_result_3 = False
-_houdini_Eval_loop_anon3_LoopHead_out_x_4 = True
-
-Boogie program verifier finished with 6 verified, 0 errors
+Assignment computed by Houdini:
+_houdini_Eval_control_flag_0 = True
+_houdini_Eval_result_1 = False
+_houdini_Eval_loop_anon3_LoopHead_control_flag_2 = True
+_houdini_Eval_loop_anon3_LoopHead_out_result_3 = False
+_houdini_Eval_loop_anon3_LoopHead_out_x_4 = True
+
+Boogie program verifier finished with 6 verified, 0 errors
diff --git a/Test/houdini/mergedProgSingle_res_ex2.bpl b/Test/houdini/mergedProgSingle_res_ex2.bpl
index 2337d434..ae5688aa 100644
--- a/Test/houdini/mergedProgSingle_res_ex2.bpl
+++ b/Test/houdini/mergedProgSingle_res_ex2.bpl
@@ -1,621 +1,621 @@
-// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-var _v2.control_flag: int;
-
-function _v2.control_UIF(arg_0: int, arg_1: int) : int;
-
-procedure _v2.Eval(x: int) returns (result: int);
- modifies _v2.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
-
-
-
-procedure _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
- modifies _v2.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
-
-
-
-implementation _v2.Eval(x.1: int) returns (result: int)
-{
- var x: int;
-
- anon0:
- x := x.1;
- result := 0;
- _v2.control_flag := 0;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- call result, x := _v2.Eval_loop_anon3_LoopHead(result, x);
- goto anon3_LoopHead_last;
-
- anon3_LoopHead_last:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- result := result + x;
- x := x - 1;
- havoc x;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- assume false;
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= x;
- goto anon2;
-
- anon2:
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
- return;
-}
-
-
-
-implementation _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
-{
-
- entry:
- out_result, out_x := in_result, in_x;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} out_x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- out_result := out_result + out_x;
- out_x := out_x - 1;
- havoc out_x;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- call out_result, out_x := _v2.Eval_loop_anon3_LoopHead(out_result, out_x);
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= out_x;
- out_result, out_x := in_result, in_x;
- _v2.control_flag := old(_v2.control_flag);
- return;
-}
-
-
-
-var _v1.control_flag: int;
-
-procedure _v1.Eval(x: int) returns (result: int);
- modifies _v1.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
- free ensures {:io_dependency "result", "x"} true;
-
-
-
-procedure _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
- modifies _v1.control_flag;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
- free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
- free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
- free ensures {:io_dependency "out_x", "in_x"} true;
-
-
-
-implementation _v1.Eval(x.1: int) returns (result: int)
-{
- var x: int;
-
- anon0:
- x := x.1;
- result := 0;
- _v1.control_flag := 0;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- call result, x := _v1.Eval_loop_anon3_LoopHead(result, x);
- goto anon3_LoopHead_last;
-
- anon3_LoopHead_last:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- result := result + x;
- x := x - 1;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- assume false;
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= x;
- goto anon2;
-
- anon2:
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
- return;
-}
-
-
-
-implementation _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
-{
-
- entry:
- out_result, out_x := in_result, in_x;
- goto anon3_LoopHead;
-
- anon3_LoopHead:
- goto anon3_LoopDone, anon3_LoopBody;
-
- anon3_LoopBody:
- assume {:partition} out_x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- out_result := out_result + out_x;
- out_x := out_x - 1;
- goto anon3_LoopBody_dummy;
-
- anon3_LoopBody_dummy:
- call out_result, out_x := _v1.Eval_loop_anon3_LoopHead(out_result, out_x);
- return;
-
- anon3_LoopDone:
- assume {:partition} 0 >= out_x;
- out_result, out_x := in_result, in_x;
- _v1.control_flag := old(_v1.control_flag);
- return;
-}
-
-
-
-function {:inline true} MS$_v1.Eval$_v2.Eval(_v1.x: int,
- _v1.control_flag_old: int,
- _v1.control_flag_: int,
- _v1.result: int,
- _v2.x: int,
- _v2.control_flag_old: int,
- _v2.control_flag_: int,
- _v2.result: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_Eval_control_flag_0: bool;
-
-const {:existential true} _houdini_Eval_result_1: bool;
-
-procedure MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int);
- modifies _v1.control_flag, _v2.control_flag;
- ensures MS$_v1.Eval$_v2.Eval(_v1.x,
- old(_v1.control_flag),
- _v1.control_flag,
- _v1.result,
- _v2.x,
- old(_v2.control_flag),
- _v2.control_flag,
- _v2.result);
- ensures _houdini_Eval_control_flag_0
- ==>
- old(_v1.control_flag == _v2.control_flag && _v1.x == _v2.x)
- ==> _v1.control_flag == _v2.control_flag;
- ensures _houdini_Eval_result_1 ==> old(_v1.x == _v2.x) ==> _v1.result == _v2.result;
-
-
-
-implementation MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int)
-{
- var inline$_v1.Eval$0$x: int;
- var inline$_v1.Eval$0$x.1: int;
- var inline$_v1.Eval$0$result: int;
- var inline$_v1.Eval$0$_v1.control_flag: int;
- var inline$_v2.Eval$0$x: int;
- var inline$_v2.Eval$0$x.1: int;
- var inline$_v2.Eval$0$result: int;
- var inline$_v2.Eval$0$_v2.control_flag: int;
- var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
- var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
- var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
- var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
- var store__0__v1.control_flag: int;
- var store__0__v2.control_flag: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
-
- START:
- _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
- goto inline$_v1.Eval$0$Entry;
-
- inline$_v1.Eval$0$Entry:
- inline$_v1.Eval$0$x.1 := _v1.x;
- havoc inline$_v1.Eval$0$x, inline$_v1.Eval$0$result;
- inline$_v1.Eval$0$_v1.control_flag := _v1.control_flag;
- goto inline$_v1.Eval$0$anon0;
-
- inline$_v1.Eval$0$anon0:
- inline$_v1.Eval$0$x := inline$_v1.Eval$0$x.1;
- inline$_v1.Eval$0$result := 0;
- _v1.control_flag := 0;
- goto inline$_v1.Eval$0$anon3_LoopHead;
-
- inline$_v1.Eval$0$anon3_LoopHead:
- _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
- call inline$_v1.Eval$0$result, inline$_v1.Eval$0$x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval$0$result, inline$_v1.Eval$0$x);
- _v1.Eval_loop_anon3_LoopHead_1_done := true;
- _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
- goto inline$_v1.Eval$0$anon3_LoopHead_last;
-
- inline$_v1.Eval$0$anon3_LoopHead_last:
- goto inline$_v1.Eval$0$anon3_LoopDone, inline$_v1.Eval$0$anon3_LoopBody;
-
- inline$_v1.Eval$0$anon3_LoopBody:
- assume {:partition} inline$_v1.Eval$0$x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- inline$_v1.Eval$0$result := inline$_v1.Eval$0$result + inline$_v1.Eval$0$x;
- inline$_v1.Eval$0$x := inline$_v1.Eval$0$x - 1;
- goto inline$_v1.Eval$0$anon3_LoopBody_dummy;
-
- inline$_v1.Eval$0$anon3_LoopBody_dummy:
- assume false;
- goto inline$_v1.Eval$0$Return;
-
- inline$_v1.Eval$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v1.Eval$0$x;
- goto inline$_v1.Eval$0$anon2;
-
- inline$_v1.Eval$0$anon2:
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
- goto inline$_v1.Eval$0$Return;
-
- inline$_v1.Eval$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- _v1.result := inline$_v1.Eval$0$result;
- goto START$1;
-
- START$1:
- goto inline$_v2.Eval$0$Entry;
-
- inline$_v2.Eval$0$Entry:
- inline$_v2.Eval$0$x.1 := _v2.x;
- havoc inline$_v2.Eval$0$x, inline$_v2.Eval$0$result;
- inline$_v2.Eval$0$_v2.control_flag := _v2.control_flag;
- goto inline$_v2.Eval$0$anon0;
-
- inline$_v2.Eval$0$anon0:
- inline$_v2.Eval$0$x := inline$_v2.Eval$0$x.1;
- inline$_v2.Eval$0$result := 0;
- _v2.control_flag := 0;
- goto inline$_v2.Eval$0$anon3_LoopHead;
-
- inline$_v2.Eval$0$anon3_LoopHead:
- _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
- call inline$_v2.Eval$0$result, inline$_v2.Eval$0$x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval$0$result, inline$_v2.Eval$0$x);
- _v2.Eval_loop_anon3_LoopHead_2_done := true;
- _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
- goto inline$_v2.Eval$0$anon3_LoopHead_last;
-
- inline$_v2.Eval$0$anon3_LoopHead_last:
- goto inline$_v2.Eval$0$anon3_LoopDone, inline$_v2.Eval$0$anon3_LoopBody;
-
- inline$_v2.Eval$0$anon3_LoopBody:
- assume {:partition} inline$_v2.Eval$0$x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- inline$_v2.Eval$0$result := inline$_v2.Eval$0$result + inline$_v2.Eval$0$x;
- inline$_v2.Eval$0$x := inline$_v2.Eval$0$x - 1;
- havoc inline$_v2.Eval$0$x;
- goto inline$_v2.Eval$0$anon3_LoopBody_dummy;
-
- inline$_v2.Eval$0$anon3_LoopBody_dummy:
- assume false;
- goto inline$_v2.Eval$0$Return;
-
- inline$_v2.Eval$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v2.Eval$0$x;
- goto inline$_v2.Eval$0$anon2;
-
- inline$_v2.Eval$0$anon2:
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
- goto inline$_v2.Eval$0$Return;
-
- inline$_v2.Eval$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- _v2.result := inline$_v2.Eval$0$result;
- goto START$2;
-
- START$2:
- goto MS_L_0_0;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
- store__0__v1.control_flag := _v1.control_flag;
- store__0__v2.control_flag := _v2.control_flag;
- _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
- _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
- call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
- assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
- assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
- assume _v1.Eval_loop_anon3_LoopHead_out_1_0
- == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
- && _v1.Eval_loop_anon3_LoopHead_out_1_1
- == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_0
- == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_1
- == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
- _v1.control_flag := store__0__v1.control_flag;
- _v2.control_flag := store__0__v2.control_flag;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-}
-
-
-
-function {:inline true} MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result: int,
- _v1.in_x: int,
- _v1.control_flag_old: int,
- _v1.control_flag_: int,
- _v1.out_result: int,
- _v1.out_x: int,
- _v2.in_result: int,
- _v2.in_x: int,
- _v2.control_flag_old: int,
- _v2.control_flag_: int,
- _v2.out_result: int,
- _v2.out_x: int)
- : bool
-{
- true
-}
-
-const {:existential true} _houdini_Eval_loop_anon3_LoopHead_control_flag_2: bool;
-
-const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_result_3: bool;
-
-const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_x_4: bool;
-
-procedure MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
- returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int);
- modifies _v1.control_flag, _v2.control_flag;
- ensures MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result,
- _v1.in_x,
- old(_v1.control_flag),
- _v1.control_flag,
- _v1.out_result,
- _v1.out_x,
- _v2.in_result,
- _v2.in_x,
- old(_v2.control_flag),
- _v2.control_flag,
- _v2.out_result,
- _v2.out_x);
- ensures _houdini_Eval_loop_anon3_LoopHead_control_flag_2
- ==>
- old(_v1.control_flag == _v2.control_flag && _v1.in_x == _v2.in_x)
- ==> _v1.control_flag == _v2.control_flag;
- ensures _houdini_Eval_loop_anon3_LoopHead_out_result_3
- ==>
- old(_v1.in_result == _v2.in_result && _v1.in_x == _v2.in_x)
- ==> _v1.out_result == _v2.out_result;
- ensures _houdini_Eval_loop_anon3_LoopHead_out_x_4
- ==>
- old(_v1.in_x == _v2.in_x)
- ==> _v1.out_x == _v2.out_x;
-
-
-
-implementation MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
- returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int)
-{
- var inline$_v1.Eval_loop_anon3_LoopHead$0$in_result: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$in_x: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$out_result: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$out_x: int;
- var inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$in_result: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$in_x: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$out_result: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$out_x: int;
- var inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag: int;
- var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
- var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
- var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
- var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
- var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
- var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
- var store__0__v1.control_flag: int;
- var store__0__v2.control_flag: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
- var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
- var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
-
- START:
- _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$Entry;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$Entry:
- inline$_v1.Eval_loop_anon3_LoopHead$0$in_result := _v1.in_result;
- inline$_v1.Eval_loop_anon3_LoopHead$0$in_x := _v1.in_x;
- havoc inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag := _v1.control_flag;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$entry;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$entry:
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
- assume {:partition} inline$_v1.Eval_loop_anon3_LoopHead$0$out_x > 0;
- _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result
- + inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x - 1;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
- _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
- call inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x);
- _v1.Eval_loop_anon3_LoopHead_1_done := true;
- _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
- _v1.control_flag := inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag;
- goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v1.Eval_loop_anon3_LoopHead$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- _v1.out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result;
- _v1.out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
- goto START$1;
-
- START$1:
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$Entry;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$Entry:
- inline$_v2.Eval_loop_anon3_LoopHead$0$in_result := _v2.in_result;
- inline$_v2.Eval_loop_anon3_LoopHead$0$in_x := _v2.in_x;
- havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag := _v2.control_flag;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$entry;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$entry:
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
- assume {:partition} inline$_v2.Eval_loop_anon3_LoopHead$0$out_x > 0;
- _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result
- + inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x - 1;
- havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
- _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
- call inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x);
- _v2.Eval_loop_anon3_LoopHead_2_done := true;
- _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
- assume {:partition} 0 >= inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
- _v2.control_flag := inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag;
- goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
-
- inline$_v2.Eval_loop_anon3_LoopHead$0$Return:
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- assume true;
- _v2.out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result;
- _v2.out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
- goto START$2;
-
- START$2:
- goto MS_L_0_0;
-
- MS_L_0_0:
- goto MS_L_taken_0, MS_L_not_taken_0;
-
- MS_L_taken_0:
- assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
- store__0__v1.control_flag := _v1.control_flag;
- store__0__v2.control_flag := _v2.control_flag;
- _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
- _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
- call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
- assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
- assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
- assume _v1.Eval_loop_anon3_LoopHead_out_1_0
- == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
- && _v1.Eval_loop_anon3_LoopHead_out_1_1
- == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_0
- == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
- && _v2.Eval_loop_anon3_LoopHead_out_2_1
- == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
- _v1.control_flag := store__0__v1.control_flag;
- _v2.control_flag := store__0__v2.control_flag;
- goto MS_L_meet_0;
-
- MS_L_not_taken_0:
- assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
- goto MS_L_meet_0;
-
- MS_L_meet_0:
- return;
-}
-
-
+// RUN: %boogie /nologo /contractInfer /inlineDepth:1 /printAssignment /noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var _v2.control_flag: int;
+
+function _v2.control_UIF(arg_0: int, arg_1: int) : int;
+
+procedure _v2.Eval(x: int) returns (result: int);
+ modifies _v2.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+
+
+
+procedure _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
+ modifies _v2.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+
+
+
+implementation _v2.Eval(x.1: int) returns (result: int)
+{
+ var x: int;
+
+ anon0:
+ x := x.1;
+ result := 0;
+ _v2.control_flag := 0;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ call result, x := _v2.Eval_loop_anon3_LoopHead(result, x);
+ goto anon3_LoopHead_last;
+
+ anon3_LoopHead_last:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ result := result + x;
+ x := x - 1;
+ havoc x;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ assume false;
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= x;
+ goto anon2;
+
+ anon2:
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
+ return;
+}
+
+
+
+implementation _v2.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
+{
+
+ entry:
+ out_result, out_x := in_result, in_x;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} out_x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ out_result := out_result + out_x;
+ out_x := out_x - 1;
+ havoc out_x;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ call out_result, out_x := _v2.Eval_loop_anon3_LoopHead(out_result, out_x);
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= out_x;
+ out_result, out_x := in_result, in_x;
+ _v2.control_flag := old(_v2.control_flag);
+ return;
+}
+
+
+
+var _v1.control_flag: int;
+
+procedure _v1.Eval(x: int) returns (result: int);
+ modifies _v1.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "x"} true;
+ free ensures {:io_dependency "result", "x"} true;
+
+
+
+procedure _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int);
+ modifies _v1.control_flag;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+ free ensures {:io_dependency "control_flag", "control_flag", "in_x"} true;
+ free ensures {:io_dependency "out_result", "in_result", "in_x"} true;
+ free ensures {:io_dependency "out_x", "in_x"} true;
+
+
+
+implementation _v1.Eval(x.1: int) returns (result: int)
+{
+ var x: int;
+
+ anon0:
+ x := x.1;
+ result := 0;
+ _v1.control_flag := 0;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ call result, x := _v1.Eval_loop_anon3_LoopHead(result, x);
+ goto anon3_LoopHead_last;
+
+ anon3_LoopHead_last:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ result := result + x;
+ x := x - 1;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ assume false;
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= x;
+ goto anon2;
+
+ anon2:
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
+ return;
+}
+
+
+
+implementation _v1.Eval_loop_anon3_LoopHead(in_result: int, in_x: int) returns (out_result: int, out_x: int)
+{
+
+ entry:
+ out_result, out_x := in_result, in_x;
+ goto anon3_LoopHead;
+
+ anon3_LoopHead:
+ goto anon3_LoopDone, anon3_LoopBody;
+
+ anon3_LoopBody:
+ assume {:partition} out_x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ out_result := out_result + out_x;
+ out_x := out_x - 1;
+ goto anon3_LoopBody_dummy;
+
+ anon3_LoopBody_dummy:
+ call out_result, out_x := _v1.Eval_loop_anon3_LoopHead(out_result, out_x);
+ return;
+
+ anon3_LoopDone:
+ assume {:partition} 0 >= out_x;
+ out_result, out_x := in_result, in_x;
+ _v1.control_flag := old(_v1.control_flag);
+ return;
+}
+
+
+
+function {:inline true} MS$_v1.Eval$_v2.Eval(_v1.x: int,
+ _v1.control_flag_old: int,
+ _v1.control_flag_: int,
+ _v1.result: int,
+ _v2.x: int,
+ _v2.control_flag_old: int,
+ _v2.control_flag_: int,
+ _v2.result: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_Eval_control_flag_0: bool;
+
+const {:existential true} _houdini_Eval_result_1: bool;
+
+procedure MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int);
+ modifies _v1.control_flag, _v2.control_flag;
+ ensures MS$_v1.Eval$_v2.Eval(_v1.x,
+ old(_v1.control_flag),
+ _v1.control_flag,
+ _v1.result,
+ _v2.x,
+ old(_v2.control_flag),
+ _v2.control_flag,
+ _v2.result);
+ ensures _houdini_Eval_control_flag_0
+ ==>
+ old(_v1.control_flag == _v2.control_flag && _v1.x == _v2.x)
+ ==> _v1.control_flag == _v2.control_flag;
+ ensures _houdini_Eval_result_1 ==> old(_v1.x == _v2.x) ==> _v1.result == _v2.result;
+
+
+
+implementation MS_Check__v1.Eval___v2.Eval(_v1.x: int, _v2.x: int) returns (_v1.result: int, _v2.result: int)
+{
+ var inline$_v1.Eval$0$x: int;
+ var inline$_v1.Eval$0$x.1: int;
+ var inline$_v1.Eval$0$result: int;
+ var inline$_v1.Eval$0$_v1.control_flag: int;
+ var inline$_v2.Eval$0$x: int;
+ var inline$_v2.Eval$0$x.1: int;
+ var inline$_v2.Eval$0$result: int;
+ var inline$_v2.Eval$0$_v2.control_flag: int;
+ var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
+ var store__0__v1.control_flag: int;
+ var store__0__v2.control_flag: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
+
+ START:
+ _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
+ goto inline$_v1.Eval$0$Entry;
+
+ inline$_v1.Eval$0$Entry:
+ inline$_v1.Eval$0$x.1 := _v1.x;
+ havoc inline$_v1.Eval$0$x, inline$_v1.Eval$0$result;
+ inline$_v1.Eval$0$_v1.control_flag := _v1.control_flag;
+ goto inline$_v1.Eval$0$anon0;
+
+ inline$_v1.Eval$0$anon0:
+ inline$_v1.Eval$0$x := inline$_v1.Eval$0$x.1;
+ inline$_v1.Eval$0$result := 0;
+ _v1.control_flag := 0;
+ goto inline$_v1.Eval$0$anon3_LoopHead;
+
+ inline$_v1.Eval$0$anon3_LoopHead:
+ _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
+ call inline$_v1.Eval$0$result, inline$_v1.Eval$0$x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval$0$result, inline$_v1.Eval$0$x);
+ _v1.Eval_loop_anon3_LoopHead_1_done := true;
+ _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval$0$result, inline$_v1.Eval$0$x, _v1.control_flag;
+ goto inline$_v1.Eval$0$anon3_LoopHead_last;
+
+ inline$_v1.Eval$0$anon3_LoopHead_last:
+ goto inline$_v1.Eval$0$anon3_LoopDone, inline$_v1.Eval$0$anon3_LoopBody;
+
+ inline$_v1.Eval$0$anon3_LoopBody:
+ assume {:partition} inline$_v1.Eval$0$x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ inline$_v1.Eval$0$result := inline$_v1.Eval$0$result + inline$_v1.Eval$0$x;
+ inline$_v1.Eval$0$x := inline$_v1.Eval$0$x - 1;
+ goto inline$_v1.Eval$0$anon3_LoopBody_dummy;
+
+ inline$_v1.Eval$0$anon3_LoopBody_dummy:
+ assume false;
+ goto inline$_v1.Eval$0$Return;
+
+ inline$_v1.Eval$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v1.Eval$0$x;
+ goto inline$_v1.Eval$0$anon2;
+
+ inline$_v1.Eval$0$anon2:
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 2);
+ goto inline$_v1.Eval$0$Return;
+
+ inline$_v1.Eval$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v1.result := inline$_v1.Eval$0$result;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.Eval$0$Entry;
+
+ inline$_v2.Eval$0$Entry:
+ inline$_v2.Eval$0$x.1 := _v2.x;
+ havoc inline$_v2.Eval$0$x, inline$_v2.Eval$0$result;
+ inline$_v2.Eval$0$_v2.control_flag := _v2.control_flag;
+ goto inline$_v2.Eval$0$anon0;
+
+ inline$_v2.Eval$0$anon0:
+ inline$_v2.Eval$0$x := inline$_v2.Eval$0$x.1;
+ inline$_v2.Eval$0$result := 0;
+ _v2.control_flag := 0;
+ goto inline$_v2.Eval$0$anon3_LoopHead;
+
+ inline$_v2.Eval$0$anon3_LoopHead:
+ _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
+ call inline$_v2.Eval$0$result, inline$_v2.Eval$0$x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval$0$result, inline$_v2.Eval$0$x);
+ _v2.Eval_loop_anon3_LoopHead_2_done := true;
+ _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval$0$result, inline$_v2.Eval$0$x, _v2.control_flag;
+ goto inline$_v2.Eval$0$anon3_LoopHead_last;
+
+ inline$_v2.Eval$0$anon3_LoopHead_last:
+ goto inline$_v2.Eval$0$anon3_LoopDone, inline$_v2.Eval$0$anon3_LoopBody;
+
+ inline$_v2.Eval$0$anon3_LoopBody:
+ assume {:partition} inline$_v2.Eval$0$x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ inline$_v2.Eval$0$result := inline$_v2.Eval$0$result + inline$_v2.Eval$0$x;
+ inline$_v2.Eval$0$x := inline$_v2.Eval$0$x - 1;
+ havoc inline$_v2.Eval$0$x;
+ goto inline$_v2.Eval$0$anon3_LoopBody_dummy;
+
+ inline$_v2.Eval$0$anon3_LoopBody_dummy:
+ assume false;
+ goto inline$_v2.Eval$0$Return;
+
+ inline$_v2.Eval$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v2.Eval$0$x;
+ goto inline$_v2.Eval$0$anon2;
+
+ inline$_v2.Eval$0$anon2:
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 2);
+ goto inline$_v2.Eval$0$Return;
+
+ inline$_v2.Eval$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v2.result := inline$_v2.Eval$0$result;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_0;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
+ store__0__v1.control_flag := _v1.control_flag;
+ store__0__v2.control_flag := _v2.control_flag;
+ _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
+ _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
+ call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
+ assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
+ assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
+ assume _v1.Eval_loop_anon3_LoopHead_out_1_0
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
+ && _v1.Eval_loop_anon3_LoopHead_out_1_1
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_0
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_1
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
+ _v1.control_flag := store__0__v1.control_flag;
+ _v2.control_flag := store__0__v2.control_flag;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+}
+
+
+
+function {:inline true} MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result: int,
+ _v1.in_x: int,
+ _v1.control_flag_old: int,
+ _v1.control_flag_: int,
+ _v1.out_result: int,
+ _v1.out_x: int,
+ _v2.in_result: int,
+ _v2.in_x: int,
+ _v2.control_flag_old: int,
+ _v2.control_flag_: int,
+ _v2.out_result: int,
+ _v2.out_x: int)
+ : bool
+{
+ true
+}
+
+const {:existential true} _houdini_Eval_loop_anon3_LoopHead_control_flag_2: bool;
+
+const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_result_3: bool;
+
+const {:existential true} _houdini_Eval_loop_anon3_LoopHead_out_x_4: bool;
+
+procedure MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
+ returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int);
+ modifies _v1.control_flag, _v2.control_flag;
+ ensures MS$_v1.Eval_loop_anon3_LoopHead$_v2.Eval_loop_anon3_LoopHead(_v1.in_result,
+ _v1.in_x,
+ old(_v1.control_flag),
+ _v1.control_flag,
+ _v1.out_result,
+ _v1.out_x,
+ _v2.in_result,
+ _v2.in_x,
+ old(_v2.control_flag),
+ _v2.control_flag,
+ _v2.out_result,
+ _v2.out_x);
+ ensures _houdini_Eval_loop_anon3_LoopHead_control_flag_2
+ ==>
+ old(_v1.control_flag == _v2.control_flag && _v1.in_x == _v2.in_x)
+ ==> _v1.control_flag == _v2.control_flag;
+ ensures _houdini_Eval_loop_anon3_LoopHead_out_result_3
+ ==>
+ old(_v1.in_result == _v2.in_result && _v1.in_x == _v2.in_x)
+ ==> _v1.out_result == _v2.out_result;
+ ensures _houdini_Eval_loop_anon3_LoopHead_out_x_4
+ ==>
+ old(_v1.in_x == _v2.in_x)
+ ==> _v1.out_x == _v2.out_x;
+
+
+
+implementation MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.in_result: int, _v1.in_x: int, _v2.in_result: int, _v2.in_x: int)
+ returns (_v1.out_result: int, _v1.out_x: int, _v2.out_result: int, _v2.out_x: int)
+{
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$in_result: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$in_x: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$out_result: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$out_x: int;
+ var inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$in_result: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$in_x: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$out_result: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$out_x: int;
+ var inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag: int;
+ var _v1.Eval_loop_anon3_LoopHead_1_done: bool;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_in_1_2: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_0: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_1: int;
+ var _v1.Eval_loop_anon3_LoopHead_out_1_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_2_done: bool;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_in_2_2: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_0: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_1: int;
+ var _v2.Eval_loop_anon3_LoopHead_out_2_2: int;
+ var store__0__v1.control_flag: int;
+ var store__0__v2.control_flag: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_0_0: int;
+ var out__v1.Eval_loop_anon3_LoopHead_out_1_1_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_0_0: int;
+ var out__v2.Eval_loop_anon3_LoopHead_out_2_1_0: int;
+
+ START:
+ _v1.Eval_loop_anon3_LoopHead_1_done, _v2.Eval_loop_anon3_LoopHead_2_done := false, false;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$Entry;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$Entry:
+ inline$_v1.Eval_loop_anon3_LoopHead$0$in_result := _v1.in_result;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$in_x := _v1.in_x;
+ havoc inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag := _v1.control_flag;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$entry;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$entry:
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
+ assume {:partition} inline$_v1.Eval_loop_anon3_LoopHead$0$out_x > 0;
+ _v1.control_flag := _v2.control_UIF(_v1.control_flag, 1);
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result
+ + inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x - 1;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
+ _v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v1.Eval_loop_anon3_LoopHead_in_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
+ call inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := _v1.Eval_loop_anon3_LoopHead(inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x);
+ _v1.Eval_loop_anon3_LoopHead_1_done := true;
+ _v1.Eval_loop_anon3_LoopHead_out_1_0, _v1.Eval_loop_anon3_LoopHead_out_1_1, _v1.Eval_loop_anon3_LoopHead_out_1_2 := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x, _v1.control_flag;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v1.Eval_loop_anon3_LoopHead$0$out_result, inline$_v1.Eval_loop_anon3_LoopHead$0$out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$in_result, inline$_v1.Eval_loop_anon3_LoopHead$0$in_x;
+ _v1.control_flag := inline$_v1.Eval_loop_anon3_LoopHead$0$_v1.control_flag;
+ goto inline$_v1.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v1.Eval_loop_anon3_LoopHead$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v1.out_result := inline$_v1.Eval_loop_anon3_LoopHead$0$out_result;
+ _v1.out_x := inline$_v1.Eval_loop_anon3_LoopHead$0$out_x;
+ goto START$1;
+
+ START$1:
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$Entry;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$Entry:
+ inline$_v2.Eval_loop_anon3_LoopHead$0$in_result := _v2.in_result;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$in_x := _v2.in_x;
+ havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag := _v2.control_flag;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$entry;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$entry:
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopHead:
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone, inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody:
+ assume {:partition} inline$_v2.Eval_loop_anon3_LoopHead$0$out_x > 0;
+ _v2.control_flag := _v2.control_UIF(_v2.control_flag, 1);
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result
+ + inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x - 1;
+ havoc inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopBody_dummy:
+ _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1, _v2.Eval_loop_anon3_LoopHead_in_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
+ call inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := _v2.Eval_loop_anon3_LoopHead(inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x);
+ _v2.Eval_loop_anon3_LoopHead_2_done := true;
+ _v2.Eval_loop_anon3_LoopHead_out_2_0, _v2.Eval_loop_anon3_LoopHead_out_2_1, _v2.Eval_loop_anon3_LoopHead_out_2_2 := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x, _v2.control_flag;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$anon3_LoopDone:
+ assume {:partition} 0 >= inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ inline$_v2.Eval_loop_anon3_LoopHead$0$out_result, inline$_v2.Eval_loop_anon3_LoopHead$0$out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$in_result, inline$_v2.Eval_loop_anon3_LoopHead$0$in_x;
+ _v2.control_flag := inline$_v2.Eval_loop_anon3_LoopHead$0$_v2.control_flag;
+ goto inline$_v2.Eval_loop_anon3_LoopHead$0$Return;
+
+ inline$_v2.Eval_loop_anon3_LoopHead$0$Return:
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ assume true;
+ _v2.out_result := inline$_v2.Eval_loop_anon3_LoopHead$0$out_result;
+ _v2.out_x := inline$_v2.Eval_loop_anon3_LoopHead$0$out_x;
+ goto START$2;
+
+ START$2:
+ goto MS_L_0_0;
+
+ MS_L_0_0:
+ goto MS_L_taken_0, MS_L_not_taken_0;
+
+ MS_L_taken_0:
+ assume _v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done;
+ store__0__v1.control_flag := _v1.control_flag;
+ store__0__v2.control_flag := _v2.control_flag;
+ _v1.control_flag := _v1.Eval_loop_anon3_LoopHead_in_1_2;
+ _v2.control_flag := _v2.Eval_loop_anon3_LoopHead_in_2_2;
+ call out__v1.Eval_loop_anon3_LoopHead_out_1_0_0, out__v1.Eval_loop_anon3_LoopHead_out_1_1_0, out__v2.Eval_loop_anon3_LoopHead_out_2_0_0, out__v2.Eval_loop_anon3_LoopHead_out_2_1_0 := MS_Check__v1.Eval_loop_anon3_LoopHead___v2.Eval_loop_anon3_LoopHead(_v1.Eval_loop_anon3_LoopHead_in_1_0, _v1.Eval_loop_anon3_LoopHead_in_1_1, _v2.Eval_loop_anon3_LoopHead_in_2_0, _v2.Eval_loop_anon3_LoopHead_in_2_1);
+ assume _v1.control_flag == _v1.Eval_loop_anon3_LoopHead_out_1_2;
+ assume _v2.control_flag == _v2.Eval_loop_anon3_LoopHead_out_2_2;
+ assume _v1.Eval_loop_anon3_LoopHead_out_1_0
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_0_0
+ && _v1.Eval_loop_anon3_LoopHead_out_1_1
+ == out__v1.Eval_loop_anon3_LoopHead_out_1_1_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_0
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_0_0
+ && _v2.Eval_loop_anon3_LoopHead_out_2_1
+ == out__v2.Eval_loop_anon3_LoopHead_out_2_1_0;
+ _v1.control_flag := store__0__v1.control_flag;
+ _v2.control_flag := store__0__v2.control_flag;
+ goto MS_L_meet_0;
+
+ MS_L_not_taken_0:
+ assume !(_v1.Eval_loop_anon3_LoopHead_1_done && _v2.Eval_loop_anon3_LoopHead_2_done);
+ goto MS_L_meet_0;
+
+ MS_L_meet_0:
+ return;
+}
+
+
diff --git a/Test/houdini/mergedProgSingle_res_ex2.bpl.expect b/Test/houdini/mergedProgSingle_res_ex2.bpl.expect
index f551fc90..aff2f6ec 100644
--- a/Test/houdini/mergedProgSingle_res_ex2.bpl.expect
+++ b/Test/houdini/mergedProgSingle_res_ex2.bpl.expect
@@ -1,8 +1,8 @@
-Assignment computed by Houdini:
-_houdini_Eval_control_flag_0 = False
-_houdini_Eval_result_1 = False
-_houdini_Eval_loop_anon3_LoopHead_control_flag_2 = False
-_houdini_Eval_loop_anon3_LoopHead_out_result_3 = False
-_houdini_Eval_loop_anon3_LoopHead_out_x_4 = False
-
-Boogie program verifier finished with 6 verified, 0 errors
+Assignment computed by Houdini:
+_houdini_Eval_control_flag_0 = False
+_houdini_Eval_result_1 = False
+_houdini_Eval_loop_anon3_LoopHead_control_flag_2 = False
+_houdini_Eval_loop_anon3_LoopHead_out_result_3 = False
+_houdini_Eval_loop_anon3_LoopHead_out_x_4 = False
+
+Boogie program verifier finished with 6 verified, 0 errors
diff --git a/Test/houdini/test1.bpl b/Test/houdini/test1.bpl
index 7a8db5e8..72c4fb65 100644
--- a/Test/houdini/test1.bpl
+++ b/Test/houdini/test1.bpl
@@ -1,38 +1,38 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: bool;
-
-procedure foo()
-modifies g;
-ensures b0 ==> (!old(g) ==> old(g) == g);
-{
- call AcquireLock();
- call ReleaseLock();
-}
-
-procedure AcquireLock()
-modifies g;
-ensures b1 ==> old(g) == g;
-{
- g := true;
-}
-
-procedure ReleaseLock()
-modifies g;
-ensures b2 ==> old(g) == g;
-{
- g := false;
-}
-
-procedure main()
-modifies g;
-{
- g := false;
- call foo();
- assert !g;
-}
-
-const {:existential true} b0: bool;
-const {:existential true} b1: bool;
-const {:existential true } b2: bool;
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: bool;
+
+procedure foo()
+modifies g;
+ensures b0 ==> (!old(g) ==> old(g) == g);
+{
+ call AcquireLock();
+ call ReleaseLock();
+}
+
+procedure AcquireLock()
+modifies g;
+ensures b1 ==> old(g) == g;
+{
+ g := true;
+}
+
+procedure ReleaseLock()
+modifies g;
+ensures b2 ==> old(g) == g;
+{
+ g := false;
+}
+
+procedure main()
+modifies g;
+{
+ g := false;
+ call foo();
+ assert !g;
+}
+
+const {:existential true} b0: bool;
+const {:existential true} b1: bool;
+const {:existential true } b2: bool;
+
diff --git a/Test/houdini/test10.bpl b/Test/houdini/test10.bpl
index f77d0c87..7c1c7e11 100644
--- a/Test/houdini/test10.bpl
+++ b/Test/houdini/test10.bpl
@@ -1,49 +1,49 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var sdv_7: int;
-var sdv_21: int;
-const {:existential true} b1: bool;
-const{:existential true} b2: bool;
-const{:existential true} b3: bool;
-const{:existential true} b4: bool;
-
-procedure push(a:int)
-modifies sdv_7, sdv_21;
-{
- sdv_21 := sdv_7;
- sdv_7 := a;
-}
-
-procedure pop()
-modifies sdv_7, sdv_21;
-{
- sdv_7 := sdv_21;
- havoc sdv_21;
-}
-
-procedure foo()
-modifies sdv_7, sdv_21;
-requires {:candidate} b1 ==> (sdv_7 == 0);
-ensures{:candidate} b2 ==> (sdv_7 == old(sdv_7));
-{
- call push(2);
- call pop();
- call bar();
-}
-
-procedure bar()
-requires{:candidate} b3 ==> (sdv_7 == 0);
-ensures{:candidate} b4 ==> (sdv_7 == old(sdv_7));
-modifies sdv_7, sdv_21;
-{
- call push(1);
- call pop();
-}
-
-procedure main()
-modifies sdv_7, sdv_21;
-{
- sdv_7 := 0;
- call foo();
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var sdv_7: int;
+var sdv_21: int;
+const {:existential true} b1: bool;
+const{:existential true} b2: bool;
+const{:existential true} b3: bool;
+const{:existential true} b4: bool;
+
+procedure push(a:int)
+modifies sdv_7, sdv_21;
+{
+ sdv_21 := sdv_7;
+ sdv_7 := a;
+}
+
+procedure pop()
+modifies sdv_7, sdv_21;
+{
+ sdv_7 := sdv_21;
+ havoc sdv_21;
+}
+
+procedure foo()
+modifies sdv_7, sdv_21;
+requires {:candidate} b1 ==> (sdv_7 == 0);
+ensures{:candidate} b2 ==> (sdv_7 == old(sdv_7));
+{
+ call push(2);
+ call pop();
+ call bar();
+}
+
+procedure bar()
+requires{:candidate} b3 ==> (sdv_7 == 0);
+ensures{:candidate} b4 ==> (sdv_7 == old(sdv_7));
+modifies sdv_7, sdv_21;
+{
+ call push(1);
+ call pop();
+}
+
+procedure main()
+modifies sdv_7, sdv_21;
+{
+ sdv_7 := 0;
+ call foo();
+}
+
diff --git a/Test/houdini/test10.bpl.expect b/Test/houdini/test10.bpl.expect
index d6c787d1..9ebabc6f 100644
--- a/Test/houdini/test10.bpl.expect
+++ b/Test/houdini/test10.bpl.expect
@@ -1,7 +1,7 @@
-Assignment computed by Houdini:
-b1 = True
-b2 = True
-b3 = False
-b4 = True
-
-Boogie program verifier finished with 5 verified, 0 errors
+Assignment computed by Houdini:
+b1 = True
+b2 = True
+b3 = False
+b4 = True
+
+Boogie program verifier finished with 5 verified, 0 errors
diff --git a/Test/houdini/test2.bpl b/Test/houdini/test2.bpl
index 5639dc61..e89e40be 100644
--- a/Test/houdini/test2.bpl
+++ b/Test/houdini/test2.bpl
@@ -1,40 +1,40 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int;
-var h: int;
-
-procedure foo()
-modifies g, h;
-ensures b0 ==> old(g) == g;
-{
- call AcquireLock();
- call ReleaseLock();
-}
-
-procedure AcquireLock()
-modifies g, h;
-ensures b1 ==> old(g) == g;
-{
- h := g;
- g := 1;
-}
-
-procedure ReleaseLock()
-modifies g, h;
-ensures b2 ==> old(g) == g;
-{
- g := h;
-}
-
-procedure main()
-modifies g, h;
-{
- g := 0;
- call foo();
- assert g == 0;
-}
-
-const {:existential true} b0: bool;
-const {:existential true} b1: bool;
-const {:existential true } b2: bool;
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int;
+var h: int;
+
+procedure foo()
+modifies g, h;
+ensures b0 ==> old(g) == g;
+{
+ call AcquireLock();
+ call ReleaseLock();
+}
+
+procedure AcquireLock()
+modifies g, h;
+ensures b1 ==> old(g) == g;
+{
+ h := g;
+ g := 1;
+}
+
+procedure ReleaseLock()
+modifies g, h;
+ensures b2 ==> old(g) == g;
+{
+ g := h;
+}
+
+procedure main()
+modifies g, h;
+{
+ g := 0;
+ call foo();
+ assert g == 0;
+}
+
+const {:existential true} b0: bool;
+const {:existential true} b1: bool;
+const {:existential true } b2: bool;
+
diff --git a/Test/houdini/test7.bpl b/Test/houdini/test7.bpl
index 4f0a832d..dc3e350f 100644
--- a/Test/houdini/test7.bpl
+++ b/Test/houdini/test7.bpl
@@ -1,17 +1,17 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int;
-
-procedure main()
-modifies g;
-{
- g := 0;
- call foo();
- assert g == 1;
-}
-
-procedure foo()
-modifies g;
-{
- g := g + 1;
-}
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int;
+
+procedure main()
+modifies g;
+{
+ g := 0;
+ call foo();
+ assert g == 1;
+}
+
+procedure foo()
+modifies g;
+{
+ g := g + 1;
+}
diff --git a/Test/houdini/test8.bpl b/Test/houdini/test8.bpl
index 79738a9b..d8de97a3 100644
--- a/Test/houdini/test8.bpl
+++ b/Test/houdini/test8.bpl
@@ -1,23 +1,23 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int;
-
-procedure main()
-modifies g;
-{
- g := 0;
- call foo();
- assert g == 1;
-}
-
-procedure {:inline 1} foo()
-modifies g;
-{
- call bar();
-}
-
-procedure bar()
-modifies g;
-{
- g := g + 1;
-}
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int;
+
+procedure main()
+modifies g;
+{
+ g := 0;
+ call foo();
+ assert g == 1;
+}
+
+procedure {:inline 1} foo()
+modifies g;
+{
+ call bar();
+}
+
+procedure bar()
+modifies g;
+{
+ g := g + 1;
+}
diff --git a/Test/houdini/test9.bpl b/Test/houdini/test9.bpl
index 68404a8f..a56443bf 100644
--- a/Test/houdini/test9.bpl
+++ b/Test/houdini/test9.bpl
@@ -1,75 +1,75 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var v1: int;
-var v2: int;
-var v3: int;
-const{:existential true} b1: bool;
-const{:existential true} b2: bool;
-const{:existential true} b3: bool;
-const{:existential true} b4: bool;
-const{:existential true} b5: bool;
-const{:existential true} b6: bool;
-const{:existential true} b7: bool;
-const{:existential true} b8: bool;
-const{:existential true} b9: bool;
-const{:existential true} b10: bool;
-const{:existential true} b11: bool;
-const{:existential true} b12: bool;
-const{:existential true} b13: bool;
-const{:existential true} b14: bool;
-const{:existential true} b15: bool;
-const{:existential true} b16: bool;
-
-procedure push()
-requires {:candidate} b1 ==> v1 == 0;
-requires {:candidate} b2 ==> v1 == 1;
-ensures {:candidate} b3 ==> v1 == 0;
-ensures {:candidate} b4 ==> v1 == 1;
-modifies v1,v2;
-{
- v2 := v1;
- v1 := 1;
-}
-
-procedure pop()
-modifies v1,v2;
-requires {:candidate} b5 ==> v1 == 0;
-requires {:candidate} b6 ==> v1 == 1;
-ensures {:candidate} b7 ==> v1 == 0;
-ensures {:candidate} b8 ==> v1 == 1;
-{
- v1 := v2;
- havoc v2;
-}
-
-procedure foo()
-modifies v1,v2;
-requires {:candidate} b9 ==> v1 == 0;
-requires {:candidate} b10 ==> v1 == 1;
-ensures {:candidate} b11 ==> v1 == 0;
-ensures {:candidate} b12 ==> v1 == 1;
-{
- call push();
- call pop();
-}
-
-procedure bar()
-modifies v1,v2;
-requires {:candidate} b13 ==> v1 == 0;
-requires {:candidate} b14 ==> v1 == 1;
-ensures {:candidate} b15 ==> v1 == 0;
-ensures {:candidate} b16 ==> v1 == 1;
-{
- call push();
- call pop();
-}
-
-procedure main()
-modifies v1,v2;
-{
- v1 := 1;
- call foo();
- havoc v1;
- call bar();
-}
-
+// RUN: %boogie -noinfer -contractInfer -printAssignment -inlineDepth:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var v1: int;
+var v2: int;
+var v3: int;
+const{:existential true} b1: bool;
+const{:existential true} b2: bool;
+const{:existential true} b3: bool;
+const{:existential true} b4: bool;
+const{:existential true} b5: bool;
+const{:existential true} b6: bool;
+const{:existential true} b7: bool;
+const{:existential true} b8: bool;
+const{:existential true} b9: bool;
+const{:existential true} b10: bool;
+const{:existential true} b11: bool;
+const{:existential true} b12: bool;
+const{:existential true} b13: bool;
+const{:existential true} b14: bool;
+const{:existential true} b15: bool;
+const{:existential true} b16: bool;
+
+procedure push()
+requires {:candidate} b1 ==> v1 == 0;
+requires {:candidate} b2 ==> v1 == 1;
+ensures {:candidate} b3 ==> v1 == 0;
+ensures {:candidate} b4 ==> v1 == 1;
+modifies v1,v2;
+{
+ v2 := v1;
+ v1 := 1;
+}
+
+procedure pop()
+modifies v1,v2;
+requires {:candidate} b5 ==> v1 == 0;
+requires {:candidate} b6 ==> v1 == 1;
+ensures {:candidate} b7 ==> v1 == 0;
+ensures {:candidate} b8 ==> v1 == 1;
+{
+ v1 := v2;
+ havoc v2;
+}
+
+procedure foo()
+modifies v1,v2;
+requires {:candidate} b9 ==> v1 == 0;
+requires {:candidate} b10 ==> v1 == 1;
+ensures {:candidate} b11 ==> v1 == 0;
+ensures {:candidate} b12 ==> v1 == 1;
+{
+ call push();
+ call pop();
+}
+
+procedure bar()
+modifies v1,v2;
+requires {:candidate} b13 ==> v1 == 0;
+requires {:candidate} b14 ==> v1 == 1;
+ensures {:candidate} b15 ==> v1 == 0;
+ensures {:candidate} b16 ==> v1 == 1;
+{
+ call push();
+ call pop();
+}
+
+procedure main()
+modifies v1,v2;
+{
+ v1 := 1;
+ call foo();
+ havoc v1;
+ call bar();
+}
+
diff --git a/Test/houdini/testUnsatCore.bpl b/Test/houdini/testUnsatCore.bpl
index 19066269..0ac1b9e8 100644
--- a/Test/houdini/testUnsatCore.bpl
+++ b/Test/houdini/testUnsatCore.bpl
@@ -1,37 +1,37 @@
-// RUN: %boogie -noinfer -contractInfer -printAssignment -useUnsatCoreForContractInfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-// Example to exercise the unsatcore to optimize houdini
-
-procedure foo(x:int, y:int, z:int)
-//requires
-requires br0 ==> x == 1;
-requires br1 ==> y == 1;
-requires br2 ==> z == 1;
-//ensures
-ensures be0 ==> x == 1;
-{
-
-}
-
-procedure bar()
-{
- call foo(1, 2, 3);
-
-}
-
-const {:existential true} br0: bool;
-const {:existential true} br1: bool;
-const {:existential true} br2: bool;
-const {:existential true} be0: bool;
-
-
-// The output does not have any details to illustrate the flag (its an optimization)
-// One way to make sure it works is to run with -trace
-//
-// $boogie_codeplex\binaries\boogie.exe -noinfer -contractInfer -printAssignment -trace testUnsatCore.bpl
-//
-// and lookout for the following lines
-//
-// Number of unsat core prover queries = 2
+// RUN: %boogie -noinfer -contractInfer -printAssignment -useUnsatCoreForContractInfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+// Example to exercise the unsatcore to optimize houdini
+
+procedure foo(x:int, y:int, z:int)
+//requires
+requires br0 ==> x == 1;
+requires br1 ==> y == 1;
+requires br2 ==> z == 1;
+//ensures
+ensures be0 ==> x == 1;
+{
+
+}
+
+procedure bar()
+{
+ call foo(1, 2, 3);
+
+}
+
+const {:existential true} br0: bool;
+const {:existential true} br1: bool;
+const {:existential true} br2: bool;
+const {:existential true} be0: bool;
+
+
+// The output does not have any details to illustrate the flag (its an optimization)
+// One way to make sure it works is to run with -trace
+//
+// $boogie_codeplex\binaries\boogie.exe -noinfer -contractInfer -printAssignment -trace testUnsatCore.bpl
+//
+// and lookout for the following lines
+//
+// Number of unsat core prover queries = 2
// Number of unsat core prunings = 2 \ No newline at end of file
diff --git a/Test/houdini/testUnsatCore.bpl.expect b/Test/houdini/testUnsatCore.bpl.expect
index cff391b2..dd748334 100644
--- a/Test/houdini/testUnsatCore.bpl.expect
+++ b/Test/houdini/testUnsatCore.bpl.expect
@@ -1,7 +1,7 @@
-Assignment computed by Houdini:
-br0 = True
-br1 = False
-br2 = False
-be0 = True
-
-Boogie program verifier finished with 2 verified, 0 errors
+Assignment computed by Houdini:
+br0 = True
+br1 = False
+br2 = False
+be0 = True
+
+Boogie program verifier finished with 2 verified, 0 errors
diff --git a/Test/inline/Elevator.asml b/Test/inline/Elevator.asml
index 02a58d10..e2d4bdf1 100644
--- a/Test/inline/Elevator.asml
+++ b/Test/inline/Elevator.asml
@@ -1,56 +1,56 @@
-var floors as Set of Integer
-var DoorsOpen as Set of Integer = {}
-var liftDoorOpen as Boolean = false
-var liftLevel as Integer = 1
-var moving as Boolean = false
-var headingTo as Integer = 0
-
-[Action]
-ButtonPress(i as Integer)
- require i in floors
- headingTo := i
-
-[Action]
-MoveUp()
- require liftDoorOpen = false and liftLevel < headingTo
- require not (liftLevel in DoorsOpen)
- moving := true
- liftLevel:= liftLevel + 1
-
-[Action]
-MoveDown()
- //bug, should require that liftDoorOpen = false
- require liftLevel > headingTo and headingTo > 0
- require not (liftLevel in DoorsOpen)
- moving := true
- liftLevel := liftLevel - 1
-
-[Action]
-Stop()
- require liftLevel = headingTo
- moving := false
-
-[Action]
-OpenLiftDoor()
- require moving = false
- liftDoorOpen := true
-
-[Action]
-CloseLiftDoor()
- liftDoorOpen := false
-
-[Action]
-OpenFloorDoor(i as Integer)
- require liftLevel = i
- DoorsOpen := DoorsOpen union {i}
-
-[Action]
-CloseFloorDoor(i as Integer)
- DoorsOpen := DoorsOpen - {i}
-
-
-Invariant ()
- require not (liftDoorOpen = true and moving = true)
-
-
+var floors as Set of Integer
+var DoorsOpen as Set of Integer = {}
+var liftDoorOpen as Boolean = false
+var liftLevel as Integer = 1
+var moving as Boolean = false
+var headingTo as Integer = 0
+
+[Action]
+ButtonPress(i as Integer)
+ require i in floors
+ headingTo := i
+
+[Action]
+MoveUp()
+ require liftDoorOpen = false and liftLevel < headingTo
+ require not (liftLevel in DoorsOpen)
+ moving := true
+ liftLevel:= liftLevel + 1
+
+[Action]
+MoveDown()
+ //bug, should require that liftDoorOpen = false
+ require liftLevel > headingTo and headingTo > 0
+ require not (liftLevel in DoorsOpen)
+ moving := true
+ liftLevel := liftLevel - 1
+
+[Action]
+Stop()
+ require liftLevel = headingTo
+ moving := false
+
+[Action]
+OpenLiftDoor()
+ require moving = false
+ liftDoorOpen := true
+
+[Action]
+CloseLiftDoor()
+ liftDoorOpen := false
+
+[Action]
+OpenFloorDoor(i as Integer)
+ require liftLevel = i
+ DoorsOpen := DoorsOpen union {i}
+
+[Action]
+CloseFloorDoor(i as Integer)
+ DoorsOpen := DoorsOpen - {i}
+
+
+Invariant ()
+ require not (liftDoorOpen = true and moving = true)
+
+
\ No newline at end of file
diff --git a/Test/inline/Elevator.bpl b/Test/inline/Elevator.bpl
index 2e146643..dc364ce2 100644
--- a/Test/inline/Elevator.bpl
+++ b/Test/inline/Elevator.bpl
@@ -1,156 +1,156 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %boogie -removeEmptyBlocks:0 "%s" >> "%t"
-// RUN: %diff "%s.expect" "%t"
-// A Boogie version of Elevator.asml (see Boogie/Test/inline/Elevator.asml)
-
-var floors: [int]bool; // set of integer
-var DoorsOpen: [int]bool;
-var liftDoorOpen: bool;
-var liftLevel: int;
-var moving: bool;
-var headingTo: int;
-
-procedure Main_Error()
- modifies floors, DoorsOpen, liftDoorOpen, liftLevel, moving, headingTo;
-{
- var i: int;
-
- call Initialize();
- while (true)
- invariant !(liftDoorOpen && moving);
- {
- if (*) {
- havoc i; call ButtonPress(i);
- } else if (*) {
- call MoveUp();
- } else if (*) {
- call MoveDown_Error();
- } else if (*) {
- call Stop();
- } else if (*) {
- call OpenLiftDoor();
- } else if (*) {
- call CloseLiftDoor();
- } else if (*) {
- havoc i; call OpenFloorDoor(i);
- } else {
- havoc i; call CloseFloorDoor(i);
- }
- }
-}
-
-procedure Main_Correct()
- modifies floors, DoorsOpen, liftDoorOpen, liftLevel, moving, headingTo;
-{
- var i: int;
-
- call Initialize();
- while (true)
- invariant !(liftDoorOpen && moving);
- {
- if (*) {
- havoc i; call ButtonPress(i);
- } else if (*) {
- call MoveUp();
- } else if (*) {
- call MoveDown_Correct();
- } else if (*) {
- call Stop();
- } else if (*) {
- call OpenLiftDoor();
- } else if (*) {
- call CloseLiftDoor();
- } else if (*) {
- havoc i; call OpenFloorDoor(i);
- } else {
- havoc i; call CloseFloorDoor(i);
- }
- }
-}
-
-procedure {:inline 1} Initialize()
- modifies floors, DoorsOpen, liftDoorOpen, liftLevel, moving, headingTo;
-{
- DoorsOpen := EmptySet;
- liftDoorOpen := false;
- liftLevel := 1;
- moving := false;
- headingTo := 0;
-}
-
-procedure {:inline 1} ButtonPress(i: int)
- modifies headingTo;
-{
- assume floors[i];
- headingTo := i;
-}
-
-procedure {:inline 1} MoveUp()
- modifies moving, liftLevel;
-{
- assume !liftDoorOpen && liftLevel < headingTo;
- assume !DoorsOpen[liftLevel];
- moving := true;
- liftLevel:= liftLevel + 1;
-}
-
-procedure {:inline 1} MoveDown_Error()
- modifies moving, liftLevel;
-{
- //bug, should require that liftDoorOpen = false
- // assume !liftDoorOpen;
- assume liftLevel > headingTo && headingTo > 0;
- assume !DoorsOpen[liftLevel];
- moving := true;
- liftLevel := liftLevel - 1;
-}
-
-procedure {:inline 1} MoveDown_Correct()
- modifies moving, liftLevel;
-{
- assume !liftDoorOpen;
- assume liftLevel > headingTo && headingTo > 0;
- assume !DoorsOpen[liftLevel];
- moving := true;
- liftLevel := liftLevel - 1;
-}
-
-procedure {:inline 1} Stop()
- modifies moving;
-{
- assume liftLevel == headingTo;
- moving := false;
-}
-
-procedure {:inline 1} OpenLiftDoor()
- modifies liftDoorOpen;
-{
- assume !moving;
- liftDoorOpen := true;
-}
-
-procedure {:inline 1} CloseLiftDoor()
- modifies liftDoorOpen;
-{
- liftDoorOpen := false;
-}
-
-procedure {:inline 1} OpenFloorDoor(i: int)
- modifies DoorsOpen;
-{
- assume liftLevel == i;
- DoorsOpen[i] := true; // DoorsOpen := DoorsOpen union {i};
-}
-
-procedure {:inline 1} CloseFloorDoor(i: int)
- modifies DoorsOpen;
-{
- DoorsOpen[i] := false; // DoorsOpen := DoorsOpen - {i}
-}
-
-// ---------------------------------------------------------------
-
-const EmptySet: [int]bool;
-axiom (forall o: int :: { EmptySet[o] } !EmptySet[o]);
-
-// ---------------------------------------------------------------
+// RUN: %boogie "%s" > "%t"
+// RUN: %boogie -removeEmptyBlocks:0 "%s" >> "%t"
+// RUN: %diff "%s.expect" "%t"
+// A Boogie version of Elevator.asml (see Boogie/Test/inline/Elevator.asml)
+
+var floors: [int]bool; // set of integer
+var DoorsOpen: [int]bool;
+var liftDoorOpen: bool;
+var liftLevel: int;
+var moving: bool;
+var headingTo: int;
+
+procedure Main_Error()
+ modifies floors, DoorsOpen, liftDoorOpen, liftLevel, moving, headingTo;
+{
+ var i: int;
+
+ call Initialize();
+ while (true)
+ invariant !(liftDoorOpen && moving);
+ {
+ if (*) {
+ havoc i; call ButtonPress(i);
+ } else if (*) {
+ call MoveUp();
+ } else if (*) {
+ call MoveDown_Error();
+ } else if (*) {
+ call Stop();
+ } else if (*) {
+ call OpenLiftDoor();
+ } else if (*) {
+ call CloseLiftDoor();
+ } else if (*) {
+ havoc i; call OpenFloorDoor(i);
+ } else {
+ havoc i; call CloseFloorDoor(i);
+ }
+ }
+}
+
+procedure Main_Correct()
+ modifies floors, DoorsOpen, liftDoorOpen, liftLevel, moving, headingTo;
+{
+ var i: int;
+
+ call Initialize();
+ while (true)
+ invariant !(liftDoorOpen && moving);
+ {
+ if (*) {
+ havoc i; call ButtonPress(i);
+ } else if (*) {
+ call MoveUp();
+ } else if (*) {
+ call MoveDown_Correct();
+ } else if (*) {
+ call Stop();
+ } else if (*) {
+ call OpenLiftDoor();
+ } else if (*) {
+ call CloseLiftDoor();
+ } else if (*) {
+ havoc i; call OpenFloorDoor(i);
+ } else {
+ havoc i; call CloseFloorDoor(i);
+ }
+ }
+}
+
+procedure {:inline 1} Initialize()
+ modifies floors, DoorsOpen, liftDoorOpen, liftLevel, moving, headingTo;
+{
+ DoorsOpen := EmptySet;
+ liftDoorOpen := false;
+ liftLevel := 1;
+ moving := false;
+ headingTo := 0;
+}
+
+procedure {:inline 1} ButtonPress(i: int)
+ modifies headingTo;
+{
+ assume floors[i];
+ headingTo := i;
+}
+
+procedure {:inline 1} MoveUp()
+ modifies moving, liftLevel;
+{
+ assume !liftDoorOpen && liftLevel < headingTo;
+ assume !DoorsOpen[liftLevel];
+ moving := true;
+ liftLevel:= liftLevel + 1;
+}
+
+procedure {:inline 1} MoveDown_Error()
+ modifies moving, liftLevel;
+{
+ //bug, should require that liftDoorOpen = false
+ // assume !liftDoorOpen;
+ assume liftLevel > headingTo && headingTo > 0;
+ assume !DoorsOpen[liftLevel];
+ moving := true;
+ liftLevel := liftLevel - 1;
+}
+
+procedure {:inline 1} MoveDown_Correct()
+ modifies moving, liftLevel;
+{
+ assume !liftDoorOpen;
+ assume liftLevel > headingTo && headingTo > 0;
+ assume !DoorsOpen[liftLevel];
+ moving := true;
+ liftLevel := liftLevel - 1;
+}
+
+procedure {:inline 1} Stop()
+ modifies moving;
+{
+ assume liftLevel == headingTo;
+ moving := false;
+}
+
+procedure {:inline 1} OpenLiftDoor()
+ modifies liftDoorOpen;
+{
+ assume !moving;
+ liftDoorOpen := true;
+}
+
+procedure {:inline 1} CloseLiftDoor()
+ modifies liftDoorOpen;
+{
+ liftDoorOpen := false;
+}
+
+procedure {:inline 1} OpenFloorDoor(i: int)
+ modifies DoorsOpen;
+{
+ assume liftLevel == i;
+ DoorsOpen[i] := true; // DoorsOpen := DoorsOpen union {i};
+}
+
+procedure {:inline 1} CloseFloorDoor(i: int)
+ modifies DoorsOpen;
+{
+ DoorsOpen[i] := false; // DoorsOpen := DoorsOpen - {i}
+}
+
+// ---------------------------------------------------------------
+
+const EmptySet: [int]bool;
+axiom (forall o: int :: { EmptySet[o] } !EmptySet[o]);
+
+// ---------------------------------------------------------------
diff --git a/Test/inline/InliningAndLoops.bpl b/Test/inline/InliningAndLoops.bpl
index 74b20913..52901480 100644
--- a/Test/inline/InliningAndLoops.bpl
+++ b/Test/inline/InliningAndLoops.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -loopUnroll:3 -soundLoopUnrolling "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo(N: int)
- requires N == 2;
-{
- var n, sum, recent: int;
- n, sum := 0, 0;
- while (n < N)
- {
- call recent := bar();
- sum, n := sum + recent, n + 1;
- }
- if (n == 2) {
- assert sum == recent + recent; // no reason to believe this always to be true
- }
-}
-
-procedure {:inline 1} bar() returns (r: int)
-{
- var x: int;
- r := x;
-}
+// RUN: %boogie -loopUnroll:3 -soundLoopUnrolling "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo(N: int)
+ requires N == 2;
+{
+ var n, sum, recent: int;
+ n, sum := 0, 0;
+ while (n < N)
+ {
+ call recent := bar();
+ sum, n := sum + recent, n + 1;
+ }
+ if (n == 2) {
+ assert sum == recent + recent; // no reason to believe this always to be true
+ }
+}
+
+procedure {:inline 1} bar() returns (r: int)
+{
+ var x: int;
+ r := x;
+}
diff --git a/Test/inline/codeexpr.bpl b/Test/inline/codeexpr.bpl
index 0b4ebeb6..185b518d 100644
--- a/Test/inline/codeexpr.bpl
+++ b/Test/inline/codeexpr.bpl
@@ -1,62 +1,62 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: bool;
-
-procedure {:inline 1} bar() returns (l: bool)
-{
- l := g;
-}
-
-procedure {:inline 1} baz() returns (l: bool)
-{
- call l := bar();
-}
-
-procedure A1()
-modifies g;
-{
- g := true;
- assert |{ var l: bool; A: call l := bar(); return l; }|;
- assert (exists p: bool :: |{ var l: bool; A: call l := bar(); return l; }|);
- assert (forall p: bool :: |{ var l: bool; A: call l := bar(); return l; }|);
-}
-
-procedure A2()
-{
- assert |{ var l: bool; A: assume g; call l := bar(); return l; }|;
- assert g ==> |{ var l: bool; A: call l := bar(); return l; }|;
- assert (exists p: bool :: g ==> |{ var l: bool; A: call l := bar(); return l; }|);
- assert (forall p: bool :: g ==> |{ var l: bool; A: call l := bar(); return l; }|);
-}
-
-procedure A3()
-{
- assume |{ var l: bool; A: call l := bar(); return l; }|;
- assert |{ var l: bool; A: call l := bar(); return l; }|;
-}
-
-procedure A4()
-modifies g;
-{
- g := true;
- assert |{ var l: bool; A: call l := bar(); return !l; }|;
-}
-
-procedure A5()
-modifies g;
-{
- var m: bool;
-
- g := true;
- m := |{ var l: bool; A: call l := bar(); return l; }|;
- assert m;
-}
-
-procedure A6()
-modifies g;
-{
- g := true;
- assert |{ var l: bool; A: call l := baz(); return l; }|;
- assert (exists p: bool :: |{ var l: bool; A: call l := baz(); return l; }|);
- assert (forall p: bool :: |{ var l: bool; A: call l := baz(); return l; }|);
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: bool;
+
+procedure {:inline 1} bar() returns (l: bool)
+{
+ l := g;
+}
+
+procedure {:inline 1} baz() returns (l: bool)
+{
+ call l := bar();
+}
+
+procedure A1()
+modifies g;
+{
+ g := true;
+ assert |{ var l: bool; A: call l := bar(); return l; }|;
+ assert (exists p: bool :: |{ var l: bool; A: call l := bar(); return l; }|);
+ assert (forall p: bool :: |{ var l: bool; A: call l := bar(); return l; }|);
+}
+
+procedure A2()
+{
+ assert |{ var l: bool; A: assume g; call l := bar(); return l; }|;
+ assert g ==> |{ var l: bool; A: call l := bar(); return l; }|;
+ assert (exists p: bool :: g ==> |{ var l: bool; A: call l := bar(); return l; }|);
+ assert (forall p: bool :: g ==> |{ var l: bool; A: call l := bar(); return l; }|);
+}
+
+procedure A3()
+{
+ assume |{ var l: bool; A: call l := bar(); return l; }|;
+ assert |{ var l: bool; A: call l := bar(); return l; }|;
+}
+
+procedure A4()
+modifies g;
+{
+ g := true;
+ assert |{ var l: bool; A: call l := bar(); return !l; }|;
+}
+
+procedure A5()
+modifies g;
+{
+ var m: bool;
+
+ g := true;
+ m := |{ var l: bool; A: call l := bar(); return l; }|;
+ assert m;
+}
+
+procedure A6()
+modifies g;
+{
+ g := true;
+ assert |{ var l: bool; A: call l := baz(); return l; }|;
+ assert (exists p: bool :: |{ var l: bool; A: call l := baz(); return l; }|);
+ assert (forall p: bool :: |{ var l: bool; A: call l := baz(); return l; }|);
+}
diff --git a/Test/inline/expansion2.bpl b/Test/inline/expansion2.bpl
index 9883ce83..18eaef33 100644
--- a/Test/inline/expansion2.bpl
+++ b/Test/inline/expansion2.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie "-proverLog:%T/expand2.sx" "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// RUN: %OutputCheck "--file-to-check=%T/expand2.sx" "%s"
-function {:inline true} xxgz(x:int) returns(bool)
- { x > 0 }
-function {:inline true} xxf1(x:int,y:bool) returns(int)
- { x + 1 }
-
-axiom (forall z:int :: z>12 ==> xxgz(z));
-axiom (forall y:int, x:bool :: xxf1(y, x) > 1 ==> y > 0);
-
-procedure foo()
-{
- // CHECK-NOT-L: xxgz
- assert xxgz(12);
- // CHECK-NOT-L: xxf1
- assert xxf1(3,true) == 4;
-}
-
+// RUN: %boogie "-proverLog:%T/expand2.sx" "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// RUN: %OutputCheck "--file-to-check=%T/expand2.sx" "%s"
+function {:inline true} xxgz(x:int) returns(bool)
+ { x > 0 }
+function {:inline true} xxf1(x:int,y:bool) returns(int)
+ { x + 1 }
+
+axiom (forall z:int :: z>12 ==> xxgz(z));
+axiom (forall y:int, x:bool :: xxf1(y, x) > 1 ==> y > 0);
+
+procedure foo()
+{
+ // CHECK-NOT-L: xxgz
+ assert xxgz(12);
+ // CHECK-NOT-L: xxf1
+ assert xxf1(3,true) == 4;
+}
+
diff --git a/Test/inline/expansion3.bpl b/Test/inline/expansion3.bpl
index bfb8b0fa..a6cbb411 100644
--- a/Test/inline/expansion3.bpl
+++ b/Test/inline/expansion3.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:inline true} foo3(x:int, y:bool) returns(bool)
- { foo3(x,y) }
-
-axiom foo3(1,false);
-
-procedure baz1()
- requires foo3(2,false);
-{
- assume foo3(1,true);
-}
-
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:inline true} foo3(x:int, y:bool) returns(bool)
+ { foo3(x,y) }
+
+axiom foo3(1,false);
+
+procedure baz1()
+ requires foo3(2,false);
+{
+ assume foo3(1,true);
+}
+
diff --git a/Test/inline/expansion4.bpl b/Test/inline/expansion4.bpl
index 1c1ff51c..cfd0672d 100644
--- a/Test/inline/expansion4.bpl
+++ b/Test/inline/expansion4.bpl
@@ -1,11 +1,11 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function foo(x:int) : int
- { if x <= 0 then 1 else foo(x - 1) + 2 }
-
-procedure bar()
-{
- assert foo(0) == 1;
- assert foo(1) == 3;
- assert foo(2) == 5;
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function foo(x:int) : int
+ { if x <= 0 then 1 else foo(x - 1) + 2 }
+
+procedure bar()
+{
+ assert foo(0) == 1;
+ assert foo(1) == 3;
+ assert foo(2) == 5;
+}
diff --git a/Test/inline/fundef.bpl b/Test/inline/fundef.bpl
index 9c5b2cfd..1d2dd50d 100644
--- a/Test/inline/fundef.bpl
+++ b/Test/inline/fundef.bpl
@@ -1,8 +1,8 @@
-// RUN: %boogie -print:- -env:0 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:inline true} foo(x:int) returns(bool)
- { x > 0 }
-function {:inline false} foo2(x:int) returns(bool)
- { x > 0 }
-function foo3(x:int) returns(bool)
- { x > 0 }
+// RUN: %boogie -print:- -env:0 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:inline true} foo(x:int) returns(bool)
+ { x > 0 }
+function {:inline false} foo2(x:int) returns(bool)
+ { x > 0 }
+function foo3(x:int) returns(bool)
+ { x > 0 }
diff --git a/Test/inline/fundef2.bpl b/Test/inline/fundef2.bpl
index 39453453..9e0f9fab 100644
--- a/Test/inline/fundef2.bpl
+++ b/Test/inline/fundef2.bpl
@@ -1,9 +1,9 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:inline true} foo(x:int) returns(bool)
- { x > 0 }
-
-procedure P() {
- assert foo(13);
- assert foo(-5); // error
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:inline true} foo(x:int) returns(bool)
+ { x > 0 }
+
+procedure P() {
+ assert foo(13);
+ assert foo(-5); // error
+}
diff --git a/Test/inline/polyInline.bpl b/Test/inline/polyInline.bpl
index ed404867..709b8b41 100644
--- a/Test/inline/polyInline.bpl
+++ b/Test/inline/polyInline.bpl
@@ -1,43 +1,43 @@
-// RUN: %boogie /typeEncoding:predicates /logPrefix:p "%s" > "%t"
-// RUN: %boogie /typeEncoding:arguments /logPrefix:a "%s" >> "%t"
-// RUN: %diff "%s.expect" "%t"
-
-const C:int;
-const D:bool;
-
-function empty<alpha>() returns (alpha);
-
-function eqC<alpha>(x:alpha) returns (bool) { x == C }
-function giveEmpty<alpha>() returns (alpha) { empty() }
-
-function {:inline true} eqC2<alpha>(x:alpha) returns (bool) { x == C }
-function {:inline true} giveEmpty2<alpha>() returns (alpha) { empty() }
-
-function eqC3<alpha>(x:alpha) returns (bool);
-axiom {:inline true} (forall<alpha> x:alpha :: eqC3(x) == (x == C));
-
-function giveEmpty3<alpha>() returns (alpha);
-axiom {:inline true} (forall<alpha> :: giveEmpty3():alpha == empty());
-
-procedure P() {
- assert eqC(C);
- assert eqC2(C);
- assert eqC3(C);
- assert eqC2(D); // should not be provable
-}
-
-procedure Q() {
- assert giveEmpty() == empty();
- assert giveEmpty() == empty():int;
- assert giveEmpty():bool == empty();
-
- assert giveEmpty2() == empty();
- assert giveEmpty2() == empty():int;
- assert giveEmpty2():bool == empty();
-
- assert giveEmpty3() == empty();
- assert giveEmpty3() == empty():int;
- assert giveEmpty3():bool == empty();
-
- assert giveEmpty3() == C; // should not be provable
-}
+// RUN: %boogie /typeEncoding:predicates /logPrefix:p "%s" > "%t"
+// RUN: %boogie /typeEncoding:arguments /logPrefix:a "%s" >> "%t"
+// RUN: %diff "%s.expect" "%t"
+
+const C:int;
+const D:bool;
+
+function empty<alpha>() returns (alpha);
+
+function eqC<alpha>(x:alpha) returns (bool) { x == C }
+function giveEmpty<alpha>() returns (alpha) { empty() }
+
+function {:inline true} eqC2<alpha>(x:alpha) returns (bool) { x == C }
+function {:inline true} giveEmpty2<alpha>() returns (alpha) { empty() }
+
+function eqC3<alpha>(x:alpha) returns (bool);
+axiom {:inline true} (forall<alpha> x:alpha :: eqC3(x) == (x == C));
+
+function giveEmpty3<alpha>() returns (alpha);
+axiom {:inline true} (forall<alpha> :: giveEmpty3():alpha == empty());
+
+procedure P() {
+ assert eqC(C);
+ assert eqC2(C);
+ assert eqC3(C);
+ assert eqC2(D); // should not be provable
+}
+
+procedure Q() {
+ assert giveEmpty() == empty();
+ assert giveEmpty() == empty():int;
+ assert giveEmpty():bool == empty();
+
+ assert giveEmpty2() == empty();
+ assert giveEmpty2() == empty():int;
+ assert giveEmpty2():bool == empty();
+
+ assert giveEmpty3() == empty();
+ assert giveEmpty3() == empty():int;
+ assert giveEmpty3():bool == empty();
+
+ assert giveEmpty3() == C; // should not be provable
+}
diff --git a/Test/inline/test0.bpl b/Test/inline/test0.bpl
index 6a2d9640..52006767 100644
--- a/Test/inline/test0.bpl
+++ b/Test/inline/test0.bpl
@@ -1,50 +1,50 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// inlined functions
-
-function Twice(x: int) returns (int)
-{
- x + x
-}
-
-function {:inline} Double(x: int) returns (int)
-{
- 3 * x - x
-}
-
-function f(int) returns (int);
-function g(int) returns (int);
-function h(int) returns (int);
-function k(int) returns (int);
-axiom (forall x: int :: Twice(x) == f(x)); // here, Twice(x) and f(x) are both triggers
-axiom (forall x: int :: Double(x) == g(x)); // since Double is inlined, the trigger here is just g(x)
-axiom (forall x: int :: { f(x) } f(x) < h(x) );
-axiom (forall x: int :: { g(x) } g(x) < k(x) );
-
-procedure P(a: int, b: int, c: int)
-{
- // The following is provable, because Twice triggers its definition and the resulting f(a)
- // triggers the relation to h(a).
- assert Twice(a) < h(a);
- if (*) {
- // The following is NOT provable, because Double is inlined and thus no g(b) term is ever
- // created
- assert Double(b) < k(b); // error
- } else {
- // The following IS provable, because the explicit g(c) will cause both of the necessary
- // quantifiers to trigger
- assert g(c) == 2*c;
- assert Double(c) < k(c);
- }
-}
-
-// nullary functions
-
-function Five() returns (int) { 5 }
-
-function {:inline} Eight() returns (e: int) { 8 }
-
-procedure Q()
-{
- assert 8 * Five() == 5 * Eight();
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// inlined functions
+
+function Twice(x: int) returns (int)
+{
+ x + x
+}
+
+function {:inline} Double(x: int) returns (int)
+{
+ 3 * x - x
+}
+
+function f(int) returns (int);
+function g(int) returns (int);
+function h(int) returns (int);
+function k(int) returns (int);
+axiom (forall x: int :: Twice(x) == f(x)); // here, Twice(x) and f(x) are both triggers
+axiom (forall x: int :: Double(x) == g(x)); // since Double is inlined, the trigger here is just g(x)
+axiom (forall x: int :: { f(x) } f(x) < h(x) );
+axiom (forall x: int :: { g(x) } g(x) < k(x) );
+
+procedure P(a: int, b: int, c: int)
+{
+ // The following is provable, because Twice triggers its definition and the resulting f(a)
+ // triggers the relation to h(a).
+ assert Twice(a) < h(a);
+ if (*) {
+ // The following is NOT provable, because Double is inlined and thus no g(b) term is ever
+ // created
+ assert Double(b) < k(b); // error
+ } else {
+ // The following IS provable, because the explicit g(c) will cause both of the necessary
+ // quantifiers to trigger
+ assert g(c) == 2*c;
+ assert Double(c) < k(c);
+ }
+}
+
+// nullary functions
+
+function Five() returns (int) { 5 }
+
+function {:inline} Eight() returns (e: int) { 8 }
+
+procedure Q()
+{
+ assert 8 * Five() == 5 * Eight();
+}
diff --git a/Test/inline/test1.bpl b/Test/inline/test1.bpl
index 11ce6b4f..f9166965 100644
--- a/Test/inline/test1.bpl
+++ b/Test/inline/test1.bpl
@@ -1,47 +1,47 @@
-// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-procedure Main()
-{
-
- var x:int;
- var y:int;
-
- x := 1;
- y := 0;
-
- call x := inc(x, 5);
- call y := incdec(x, 2);
-
- assert(x - 1 == y);
-
-}
-
-procedure {:inline 1} incdec(x:int, y:int) returns (z:int)
- ensures z == x + 1 - y;
-{
- z := x;
- z := x + 1;
- call z := dec(z, y);
-
- return;
-
-}
-
-procedure {:inline 1} inc(x:int, i:int) returns (y:int)
- ensures y == x + i;
-{
- y := x;
- y := x + i;
- return;
-
-}
-
-procedure {:inline 1} dec(x:int, i:int) returns (y:int)
- ensures y == x - i;
-{
- y := x;
- y := x - i;
- return;
-
+// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure Main()
+{
+
+ var x:int;
+ var y:int;
+
+ x := 1;
+ y := 0;
+
+ call x := inc(x, 5);
+ call y := incdec(x, 2);
+
+ assert(x - 1 == y);
+
+}
+
+procedure {:inline 1} incdec(x:int, y:int) returns (z:int)
+ ensures z == x + 1 - y;
+{
+ z := x;
+ z := x + 1;
+ call z := dec(z, y);
+
+ return;
+
+}
+
+procedure {:inline 1} inc(x:int, i:int) returns (y:int)
+ ensures y == x + i;
+{
+ y := x;
+ y := x + i;
+ return;
+
+}
+
+procedure {:inline 1} dec(x:int, i:int) returns (y:int)
+ ensures y == x - i;
+{
+ y := x;
+ y := x - i;
+ return;
+
} \ No newline at end of file
diff --git a/Test/inline/test2.bpl b/Test/inline/test2.bpl
index 981d7604..6c16d342 100644
--- a/Test/inline/test2.bpl
+++ b/Test/inline/test2.bpl
@@ -1,33 +1,33 @@
-// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-var glb:int;
-
-procedure calculate()
-modifies glb;
-{
- var x:int;
- var y:int;
-
- y := 5;
-
- call x := increase(y);
-
- return;
-}
-
-
-procedure {:inline 1} increase (i:int) returns (k:int)
-modifies glb;
-{
- var j:int;
-
- j := i;
- j := j + 1;
-
- glb := glb + j;
-
- k := j;
-
- return;
-}
+// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var glb:int;
+
+procedure calculate()
+modifies glb;
+{
+ var x:int;
+ var y:int;
+
+ y := 5;
+
+ call x := increase(y);
+
+ return;
+}
+
+
+procedure {:inline 1} increase (i:int) returns (k:int)
+modifies glb;
+{
+ var j:int;
+
+ j := i;
+ j := j + 1;
+
+ glb := glb + j;
+
+ k := j;
+
+ return;
+}
diff --git a/Test/inline/test3.bpl b/Test/inline/test3.bpl
index 2f8b1749..1af4485a 100644
--- a/Test/inline/test3.bpl
+++ b/Test/inline/test3.bpl
@@ -1,30 +1,30 @@
-// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-var glb:int;
-
-procedure recursivetest()
-modifies glb;
-{
- glb := 5;
- call glb := recursive(glb);
-
- return;
-
-}
-
-procedure {:inline 3} recursive(x:int) returns (y:int)
-{
-
- var k: int;
-
- if(x == 0) {
- y := 1;
- return;
- }
-
- call k := recursive(x-1);
- y := y + k;
- return;
-
+// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var glb:int;
+
+procedure recursivetest()
+modifies glb;
+{
+ glb := 5;
+ call glb := recursive(glb);
+
+ return;
+
+}
+
+procedure {:inline 3} recursive(x:int) returns (y:int)
+{
+
+ var k: int;
+
+ if(x == 0) {
+ y := 1;
+ return;
+ }
+
+ call k := recursive(x-1);
+ y := y + k;
+ return;
+
} \ No newline at end of file
diff --git a/Test/inline/test4.bpl b/Test/inline/test4.bpl
index 7743c498..2a646b58 100644
--- a/Test/inline/test4.bpl
+++ b/Test/inline/test4.bpl
@@ -1,55 +1,55 @@
-// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-procedure main(x:int)
-{
- var A:[int]int;
- var i:int;
- var b:bool;
- var size:int;
-
- call i,b := find(A, size, x);
-
- if(b) {
- assert(i > 0 && A[i] == x);
- }
-
- return;
-}
-
-procedure {:inline 1} find(A:[int]int, size:int, x:int) returns (ret:int, found:bool)
-{
- var i:int;
- var b:bool;
-
- ret := -1;
- b := false;
- found := b;
- i := 0;
-
- while(i < size) {
- call b := check(A, i, x);
- if(b) {
- ret := i;
- found := b;
- break;
- }
-
- }
-
- return;
-
-}
-
-
-procedure {:inline 3} check (A:[int]int, i:int, c:int) returns (ret:bool)
- requires i >= 0;
- ensures (old(A[i]) > c) ==> ret == true;
-{
- if(A[i] == c) {
- ret := true;
- } else {
- ret := false;
- }
- return;
+// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure main(x:int)
+{
+ var A:[int]int;
+ var i:int;
+ var b:bool;
+ var size:int;
+
+ call i,b := find(A, size, x);
+
+ if(b) {
+ assert(i > 0 && A[i] == x);
+ }
+
+ return;
+}
+
+procedure {:inline 1} find(A:[int]int, size:int, x:int) returns (ret:int, found:bool)
+{
+ var i:int;
+ var b:bool;
+
+ ret := -1;
+ b := false;
+ found := b;
+ i := 0;
+
+ while(i < size) {
+ call b := check(A, i, x);
+ if(b) {
+ ret := i;
+ found := b;
+ break;
+ }
+
+ }
+
+ return;
+
+}
+
+
+procedure {:inline 3} check (A:[int]int, i:int, c:int) returns (ret:bool)
+ requires i >= 0;
+ ensures (old(A[i]) > c) ==> ret == true;
+{
+ if(A[i] == c) {
+ ret := true;
+ } else {
+ ret := false;
+ }
+ return;
} \ No newline at end of file
diff --git a/Test/inline/test5.bpl b/Test/inline/test5.bpl
index d7a80737..a0a25faf 100644
--- a/Test/inline/test5.bpl
+++ b/Test/inline/test5.bpl
@@ -1,81 +1,81 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// test a case, where the inlined proc comes before the caller
-
-procedure {:inline 2} foo()
- modifies x;
-{
- x := x + 1;
-}
-
-var x:int;
-
-procedure bar()
- modifies x;
-{
- x := 3;
- call foo();
- assert x == 4;
- call foo();
- assert x == 5;
-}
-
-// -------------------------------------------------
-
-var Mem : [int]int;
-
-procedure {:inline 1} P(x:int)
- modifies Mem;
-{
- Mem[x] := 1;
-}
-
-procedure mainA()
- modifies Mem;
-{
- Mem[1] := 0;
- call P(0);
- call P(1);
- assert Mem[1] == 0; // error
-}
-
-procedure mainB()
- modifies Mem;
-{
- Mem[1] := 0;
- call P(0);
- call P(1);
- assert Mem[1] == 1; // good
-}
-
-procedure mainC()
- modifies Mem;
-{
- Mem[1] := 0;
- call P(0);
- call P(1);
- assert Mem[1] == 1; // good
-}
-
-// -------------------------------------------------
-
-type ref;
-var xyz: ref;
-
-procedure xyzA();
- modifies xyz;
- ensures old(xyz) == xyz;
-
-procedure {:inline 1} xyzB()
- modifies xyz;
-{
- call xyzA();
-}
-
-procedure xyzMain()
- modifies xyz;
-{
- call xyzA();
- assert old(xyz) == xyz;
- call xyzB();
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// test a case, where the inlined proc comes before the caller
+
+procedure {:inline 2} foo()
+ modifies x;
+{
+ x := x + 1;
+}
+
+var x:int;
+
+procedure bar()
+ modifies x;
+{
+ x := 3;
+ call foo();
+ assert x == 4;
+ call foo();
+ assert x == 5;
+}
+
+// -------------------------------------------------
+
+var Mem : [int]int;
+
+procedure {:inline 1} P(x:int)
+ modifies Mem;
+{
+ Mem[x] := 1;
+}
+
+procedure mainA()
+ modifies Mem;
+{
+ Mem[1] := 0;
+ call P(0);
+ call P(1);
+ assert Mem[1] == 0; // error
+}
+
+procedure mainB()
+ modifies Mem;
+{
+ Mem[1] := 0;
+ call P(0);
+ call P(1);
+ assert Mem[1] == 1; // good
+}
+
+procedure mainC()
+ modifies Mem;
+{
+ Mem[1] := 0;
+ call P(0);
+ call P(1);
+ assert Mem[1] == 1; // good
+}
+
+// -------------------------------------------------
+
+type ref;
+var xyz: ref;
+
+procedure xyzA();
+ modifies xyz;
+ ensures old(xyz) == xyz;
+
+procedure {:inline 1} xyzB()
+ modifies xyz;
+{
+ call xyzA();
+}
+
+procedure xyzMain()
+ modifies xyz;
+{
+ call xyzA();
+ assert old(xyz) == xyz;
+ call xyzB();
+}
diff --git a/Test/inline/test6.bpl b/Test/inline/test6.bpl
index d2e034fc..386c8d94 100644
--- a/Test/inline/test6.bpl
+++ b/Test/inline/test6.bpl
@@ -1,39 +1,39 @@
-// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure {:inline 2} foo()
- modifies x;
-{
- x := x + 1;
- call foo();
-}
-
-procedure {:inline 2} foo1()
- modifies x;
-{
- x := x + 1;
- call foo2();
-}
-
-procedure {:inline 2} foo2()
- modifies x;
-{
- x := x + 1;
- call foo3();
-}
-
-procedure {:inline 2} foo3()
- modifies x;
-{
- x := x + 1;
- call foo1();
-}
-
-var x:int;
-
-procedure bar()
- modifies x;
-{
- call foo();
- call foo1();
-}
-
+// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure {:inline 2} foo()
+ modifies x;
+{
+ x := x + 1;
+ call foo();
+}
+
+procedure {:inline 2} foo1()
+ modifies x;
+{
+ x := x + 1;
+ call foo2();
+}
+
+procedure {:inline 2} foo2()
+ modifies x;
+{
+ x := x + 1;
+ call foo3();
+}
+
+procedure {:inline 2} foo3()
+ modifies x;
+{
+ x := x + 1;
+ call foo1();
+}
+
+var x:int;
+
+procedure bar()
+ modifies x;
+{
+ call foo();
+ call foo1();
+}
+
diff --git a/Test/linear/allocator.bpl b/Test/linear/allocator.bpl
index 147d700f..fcd79b26 100644
--- a/Test/linear/allocator.bpl
+++ b/Test/linear/allocator.bpl
@@ -1,12 +1,12 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure A({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int);
- ensures i == i';
-
-procedure B({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
-{
- i := i';
- call i := A(i);
- assert false;
-}
-
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure A({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int);
+ ensures i == i';
+
+procedure B({:linear_in "tid"} i': int) returns ({:linear "tid"} i: int)
+{
+ i := i';
+ call i := A(i);
+ assert false;
+}
+
diff --git a/Test/linear/async-bug.bpl b/Test/linear/async-bug.bpl
index ad7020ad..4692f267 100644
--- a/Test/linear/async-bug.bpl
+++ b/Test/linear/async-bug.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const GcTid:int;
-
-procedure {:yields} {:layer 100} Initialize({:linear "tid"} tid:int)
-requires{:layer 100} tid == GcTid;
-{
- yield;
- assert{:layer 100} tid == GcTid;
-
- call GarbageCollect(tid);
-
- yield;
- assert{:layer 100} tid == GcTid;
-
- async call GarbageCollect(tid);
-
- yield;
- assert{:layer 100} tid == GcTid;
-
- async call GarbageCollect(tid);
-
- yield;
- assert{:layer 100} tid == GcTid;
-
- yield;
- assert{:layer 100} tid == GcTid;
-}
-
-procedure {:yields} {:layer 100} GarbageCollect({:linear "tid"} tid:int)
-requires{:layer 100} tid == GcTid;
-{
- yield;
- assert{:layer 100} tid == GcTid;
-}
-
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const GcTid:int;
+
+procedure {:yields} {:layer 100} Initialize({:linear "tid"} tid:int)
+requires{:layer 100} tid == GcTid;
+{
+ yield;
+ assert{:layer 100} tid == GcTid;
+
+ call GarbageCollect(tid);
+
+ yield;
+ assert{:layer 100} tid == GcTid;
+
+ async call GarbageCollect(tid);
+
+ yield;
+ assert{:layer 100} tid == GcTid;
+
+ async call GarbageCollect(tid);
+
+ yield;
+ assert{:layer 100} tid == GcTid;
+
+ yield;
+ assert{:layer 100} tid == GcTid;
+}
+
+procedure {:yields} {:layer 100} GarbageCollect({:linear "tid"} tid:int)
+requires{:layer 100} tid == GcTid;
+{
+ yield;
+ assert{:layer 100} tid == GcTid;
+}
+
diff --git a/Test/linear/async-bug.bpl.expect b/Test/linear/async-bug.bpl.expect
index 73a5eaee..b27eace7 100644
--- a/Test/linear/async-bug.bpl.expect
+++ b/Test/linear/async-bug.bpl.expect
@@ -1,3 +1,3 @@
-async-bug.bpl(21,30): Error: unavailable source for a linear read
-async-bug.bpl(28,0): Error: Input variable tid must be available at a return
-2 type checking errors detected in async-bug.bpl
+async-bug.bpl(21,30): Error: unavailable source for a linear read
+async-bug.bpl(28,0): Error: Input variable tid must be available at a return
+2 type checking errors detected in async-bug.bpl
diff --git a/Test/linear/bug.bpl b/Test/linear/bug.bpl
index 9177e2ca..4757b5b9 100644
--- a/Test/linear/bug.bpl
+++ b/Test/linear/bug.bpl
@@ -1,16 +1,16 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
-function {:inline} {:linear ""} LinearIntDistinctness(x:int) : [int]bool { MapConstBool(false)[x := true] }
-
-var {:linear ""} g:int;
-
-procedure A()
-{
-}
-
-procedure B()
-{
- call A();
- assert false;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} MapConstBool(bool) : [int]bool;
+function {:inline} {:linear ""} LinearIntDistinctness(x:int) : [int]bool { MapConstBool(false)[x := true] }
+
+var {:linear ""} g:int;
+
+procedure A()
+{
+}
+
+procedure B()
+{
+ call A();
+ assert false;
+}
diff --git a/Test/linear/f1.bpl b/Test/linear/f1.bpl
index 0d255149..cf786143 100644
--- a/Test/linear/f1.bpl
+++ b/Test/linear/f1.bpl
@@ -1,48 +1,48 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
-const {:existential true} b0: bool;
-const {:existential true} b1: bool;
-const {:existential true} b2: bool;
-const {:existential true} b3: bool;
-const {:existential true} b4: bool;
-const {:existential true} b5: bool;
-const {:existential true} b6: bool;
-const {:existential true} b7: bool;
-const {:existential true} b8: bool;
-
-axiom(b0);
-axiom(b1);
-axiom(b2);
-axiom(b3);
-axiom(b4);
-axiom(b5);
-axiom(!b6);
-axiom(!b7);
-axiom(b8);
-
-procedure main({:linear_in "1"} x_in: [int]bool)
- requires b0 ==> x_in == mapconstbool(true);
- requires b1 ==> x_in != mapconstbool(false);
-{
- var {:linear "1"} x: [int] bool;
- x := x_in;
-
- call foo(x);
-
- assert b6 ==> x == mapconstbool(true);
- assert b7 ==> x != mapconstbool(false);
- assert b8 ==> x == mapconstbool(false);
-}
-
-procedure foo({:linear_in "1"} x_in: [int]bool)
- requires b2 ==> x_in == mapconstbool(true);
- requires b3 ==> x_in != mapconstbool(false);
-{
- var {:linear "1"} x: [int] bool;
- x := x_in;
-
- assert b4 ==> x == mapconstbool(true);
- assert b5 ==> x != mapconstbool(false);
-
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
+const {:existential true} b0: bool;
+const {:existential true} b1: bool;
+const {:existential true} b2: bool;
+const {:existential true} b3: bool;
+const {:existential true} b4: bool;
+const {:existential true} b5: bool;
+const {:existential true} b6: bool;
+const {:existential true} b7: bool;
+const {:existential true} b8: bool;
+
+axiom(b0);
+axiom(b1);
+axiom(b2);
+axiom(b3);
+axiom(b4);
+axiom(b5);
+axiom(!b6);
+axiom(!b7);
+axiom(b8);
+
+procedure main({:linear_in "1"} x_in: [int]bool)
+ requires b0 ==> x_in == mapconstbool(true);
+ requires b1 ==> x_in != mapconstbool(false);
+{
+ var {:linear "1"} x: [int] bool;
+ x := x_in;
+
+ call foo(x);
+
+ assert b6 ==> x == mapconstbool(true);
+ assert b7 ==> x != mapconstbool(false);
+ assert b8 ==> x == mapconstbool(false);
+}
+
+procedure foo({:linear_in "1"} x_in: [int]bool)
+ requires b2 ==> x_in == mapconstbool(true);
+ requires b3 ==> x_in != mapconstbool(false);
+{
+ var {:linear "1"} x: [int] bool;
+ x := x_in;
+
+ assert b4 ==> x == mapconstbool(true);
+ assert b5 ==> x != mapconstbool(false);
+
+}
diff --git a/Test/linear/f2.bpl b/Test/linear/f2.bpl
index 18f518da..f6c67873 100644
--- a/Test/linear/f2.bpl
+++ b/Test/linear/f2.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
-function {:builtin "MapOr"} mapunion([int]bool, [int]bool) : [int]bool;
-
-procedure Split({:linear_in "1"} xls: [int]bool) returns ({:linear "1"} xls1: [int]bool, {:linear "1"} xls2: [int]bool);
-ensures xls == mapunion(xls1, xls2) && xls1 != mapconstbool(false) && xls2 != mapconstbool(false);
-
-procedure Allocate() returns ({:linear "1"} x: [int]bool);
-
-procedure main()
-{
- var {:linear "1"} x: [int] bool;
- var {:linear "1"} x1: [int] bool;
- var {:linear "1"} x2: [int] bool;
-
- call x := Allocate();
- assume x == mapconstbool(true);
-
- call x1, x2 := Split(x);
- assert false;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:builtin "MapConst"} mapconstbool(bool) : [int]bool;
+function {:builtin "MapOr"} mapunion([int]bool, [int]bool) : [int]bool;
+
+procedure Split({:linear_in "1"} xls: [int]bool) returns ({:linear "1"} xls1: [int]bool, {:linear "1"} xls2: [int]bool);
+ensures xls == mapunion(xls1, xls2) && xls1 != mapconstbool(false) && xls2 != mapconstbool(false);
+
+procedure Allocate() returns ({:linear "1"} x: [int]bool);
+
+procedure main()
+{
+ var {:linear "1"} x: [int] bool;
+ var {:linear "1"} x1: [int] bool;
+ var {:linear "1"} x2: [int] bool;
+
+ call x := Allocate();
+ assume x == mapconstbool(true);
+
+ call x1, x2 := Split(x);
+ assert false;
+}
diff --git a/Test/linear/f3.bpl b/Test/linear/f3.bpl
index 3a0e855c..954b4a7a 100644
--- a/Test/linear/f3.bpl
+++ b/Test/linear/f3.bpl
@@ -1,10 +1,10 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure A() {}
-
-procedure B({:linear_in ""} tid:int) returns({:linear ""} tid':int)
-{
- tid' := tid;
- call A();
-}
-
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure A() {}
+
+procedure B({:linear_in ""} tid:int) returns({:linear ""} tid':int)
+{
+ tid' := tid;
+ call A();
+}
+
diff --git a/Test/linear/list.bpl b/Test/linear/list.bpl
index 804cb7e2..e4fa23f6 100644
--- a/Test/linear/list.bpl
+++ b/Test/linear/list.bpl
@@ -1,50 +1,50 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
-function {:builtin "MapOr"} MapOr([X]bool, [X]bool) : [X]bool;
-
-function {:inline} {:linear "Mem"} MemCollector(xs: [X]bool) : [X]bool
-{
- xs
-}
-
-var head: X;
-var tail: X;
-var {:linear "Mem"} D: [X]bool;
-var Next:[X]X;
-const nil: X;
-
-procedure malloc() returns (x: X, {:linear "Mem"} M: [X]bool);
-ensures M == MapConstBool(false)[x := true];
-
-procedure Join({:linear_in "Mem"} A: [X]bool);
-modifies D;
-ensures MapOr(old(D), A) == D;
-
-procedure one()
-requires D[head] && D[tail];
-requires (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
-ensures D[head] && D[tail];
-ensures (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
-ensures head != tail;
-{
- var x: X;
- var {:linear "Mem"} M: [X]bool;
-
- call x, M := malloc();
- call Join(M);
- Next[tail] := x;
- tail := x;
- Next[tail] := nil;
-}
-
-procedure two()
-requires head != tail;
-requires D[head] && D[tail];
-requires (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
-ensures (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
-ensures D[head] && D[tail];
-{
- head := Next[head];
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory -doModSetAnalysis "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+function {:builtin "MapConst"} MapConstBool(bool) : [X]bool;
+function {:builtin "MapOr"} MapOr([X]bool, [X]bool) : [X]bool;
+
+function {:inline} {:linear "Mem"} MemCollector(xs: [X]bool) : [X]bool
+{
+ xs
+}
+
+var head: X;
+var tail: X;
+var {:linear "Mem"} D: [X]bool;
+var Next:[X]X;
+const nil: X;
+
+procedure malloc() returns (x: X, {:linear "Mem"} M: [X]bool);
+ensures M == MapConstBool(false)[x := true];
+
+procedure Join({:linear_in "Mem"} A: [X]bool);
+modifies D;
+ensures MapOr(old(D), A) == D;
+
+procedure one()
+requires D[head] && D[tail];
+requires (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
+ensures D[head] && D[tail];
+ensures (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
+ensures head != tail;
+{
+ var x: X;
+ var {:linear "Mem"} M: [X]bool;
+
+ call x, M := malloc();
+ call Join(M);
+ Next[tail] := x;
+ tail := x;
+ Next[tail] := nil;
+}
+
+procedure two()
+requires head != tail;
+requires D[head] && D[tail];
+requires (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
+ensures (forall d: X :: {D[d]} D[d] ==> D[Next[d]] || d == tail);
+ensures D[head] && D[tail];
+{
+ head := Next[head];
+}
diff --git a/Test/linear/typecheck.bpl b/Test/linear/typecheck.bpl
index 5c936dd0..c3c294c9 100644
--- a/Test/linear/typecheck.bpl
+++ b/Test/linear/typecheck.bpl
@@ -1,115 +1,118 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type X;
-
-procedure A()
-{
- var {:linear "A"} a: X;
- var {:linear "A"} b: int;
-}
-
-procedure B()
-{
- var {:linear "B"} a: X;
- var {:linear "B"} b: [X]bool;
-}
-
-procedure C()
-{
- var {:linear "C"} a: X;
- var {:linear "C"} c: [X]int;
-}
-
-function f(X): X;
-
-procedure {:yields} {:layer 1} D()
-{
- var {:linear "D"} a: X;
- var {:linear "D"} x: X;
- var {:linear "D"} b: [X]bool;
- var c: X;
- var {:linear "D2"} d: X;
-
- b[a] := true;
-
- a := f(a);
-
- a := c;
-
- c := a;
-
- a := d;
-
- a := a;
-
- a, x := x, a;
-
- a, x := x, x;
-
- call a, x := E(a, x);
-
- call a, x := E(a, a);
-
- call a, x := E(a, f(a));
-
- call a, x := E(a, d);
-
- call d, x := E(a, x);
-
- call a, x := E(c, x);
-
- call c, x := E(a, x);
-
- yield;
- par a := F(a) | x := F(a);
- yield;
-}
-
-procedure {:yields} {:layer 1} E({:linear_in "D"} a: X, {:linear_in "D"} b: X) returns ({:linear "D"} c: X, {:linear "D"} d: X)
-{
- yield;
- c := a;
- yield;
-}
-
-procedure {:yields} {:layer 0} F({:linear_in "D"} a: X) returns ({:linear "D"} c: X);
-
-var {:linear "x"} g:int;
-
-procedure G(i:int) returns({:linear "x"} r:int)
-{
- r := g;
-}
-
-procedure H(i:int) returns({:linear "x"} r:int)
-modifies g;
-{
- g := r;
-}
-
-procedure {:yields} {:layer 0} I({:linear_in ""} x:int) returns({:linear ""} x':int)
-{
- x' := x;
-}
-
-procedure {:yields} {:layer 0} J()
-{
-}
-
-procedure {:yields} {:layer 1} P1({:linear_in ""} x:int) returns({:linear ""} x':int)
-{
- yield;
- par x' := I(x) | J();
- yield;
- call x' := I(x');
- yield;
-}
-
-procedure {:yields} {:layer 1} P2({:linear_in ""} x:int) returns({:linear ""} x':int)
-{
- yield;
- call x' := I(x);
- yield;
- par x' := I(x') | J();
- yield;
-}
+// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type X;
+
+procedure A()
+{
+ var {:linear "A"} a: X;
+ var {:linear "A"} b: int;
+}
+
+procedure B()
+{
+ var {:linear "B"} a: X;
+ var {:linear "B"} b: [X]bool;
+}
+
+procedure C()
+{
+ var {:linear "C"} a: X;
+ var {:linear "C"} c: [X]int;
+}
+
+function f(X): X;
+
+procedure {:yields} {:layer 1} D()
+{
+ var {:linear "D"} a: X;
+ var {:linear "D"} x: X;
+ var {:linear "D"} b: [X]bool;
+ var c: X;
+ var {:linear "D2"} d: X;
+
+ b[a] := true;
+
+ a := f(a);
+
+ a := c;
+
+ c := a;
+
+ a := d;
+
+ a := a;
+
+ a, x := x, a;
+
+ a, x := x, x;
+
+ call a, x := E(a, x);
+
+ call a, x := E(a, a);
+
+ call a, x := E(a, f(a));
+
+ call a, x := E(a, d);
+
+ call d, x := E(a, x);
+
+ call a, x := E(c, x);
+
+ call c, x := E(a, x);
+
+ yield;
+ par a := F(a) | x := F(a);
+ yield;
+}
+
+procedure {:yields} {:layer 1} E({:linear_in "D"} a: X, {:linear_in "D"} b: X) returns ({:linear "D"} c: X, {:linear "D"} d: X)
+{
+ yield;
+ c := a;
+ yield;
+}
+
+procedure {:yields} {:layer 0} F({:linear_in "D"} a: X) returns ({:linear "D"} c: X);
+
+var {:linear "x"} g:int;
+
+procedure G(i:int) returns({:linear "x"} r:int)
+{
+ r := g;
+}
+
+procedure H(i:int) returns({:linear "x"} r:int)
+modifies g;
+{
+ g := r;
+}
+
+procedure {:yields} {:layer 0} I({:linear_in ""} x:int) returns({:linear ""} x':int)
+{
+ yield;
+ x' := x;
+ yield;
+}
+
+procedure {:yields} {:layer 0} J()
+{
+ yield;
+}
+
+procedure {:yields} {:layer 1} P1({:linear_in ""} x:int) returns({:linear ""} x':int)
+{
+ yield;
+ par x' := I(x) | J();
+ yield;
+ call x' := I(x');
+ yield;
+}
+
+procedure {:yields} {:layer 1} P2({:linear_in ""} x:int) returns({:linear ""} x':int)
+{
+ yield;
+ call x' := I(x);
+ yield;
+ par x' := I(x') | J();
+ yield;
+}
diff --git a/Test/linear/typecheck.bpl.expect b/Test/linear/typecheck.bpl.expect
index 5466fe62..04575093 100644
--- a/Test/linear/typecheck.bpl.expect
+++ b/Test/linear/typecheck.bpl.expect
@@ -1,16 +1,16 @@
-typecheck.bpl(33,9): Error: Only simple assignment allowed on linear variable b
-typecheck.bpl(35,6): Error: Only variable can be assigned to linear variable a
-typecheck.bpl(37,6): Error: Only linear variable can be assigned to linear variable a
-typecheck.bpl(41,6): Error: Linear variable of domain D2 cannot be assigned to linear variable of domain D
-typecheck.bpl(47,9): Error: Linear variable x can occur only once in the right-hand-side of an assignment
-typecheck.bpl(51,4): Error: Linear variable a can occur only once as an input parameter
-typecheck.bpl(53,4): Error: Only variable can be passed to linear parameter b
-typecheck.bpl(55,4): Error: The domains of formal and actual parameters must be the same
-typecheck.bpl(57,4): Error: The domains of formal and actual parameters must be the same
-typecheck.bpl(59,4): Error: Only a linear argument can be passed to linear parameter a
-typecheck.bpl(64,4): Error: Linear variable a can occur only once as an input parameter of a parallel call
-typecheck.bpl(73,0): Error: Output variable d must be available at a return
-typecheck.bpl(82,0): Error: Global variable g must be available at a return
-typecheck.bpl(87,7): Error: unavailable source for a linear read
-typecheck.bpl(88,0): Error: Output variable r must be available at a return
-15 type checking errors detected in typecheck.bpl
+typecheck.bpl(33,9): Error: Only simple assignment allowed on linear variable b
+typecheck.bpl(35,6): Error: Only variable can be assigned to linear variable a
+typecheck.bpl(37,6): Error: Only linear variable can be assigned to linear variable a
+typecheck.bpl(41,6): Error: Linear variable of domain D2 cannot be assigned to linear variable of domain D
+typecheck.bpl(47,9): Error: Linear variable x can occur only once in the right-hand-side of an assignment
+typecheck.bpl(51,4): Error: Linear variable a can occur only once as an input parameter
+typecheck.bpl(53,4): Error: Only variable can be passed to linear parameter b
+typecheck.bpl(55,4): Error: The domains of formal and actual parameters must be the same
+typecheck.bpl(57,4): Error: The domains of formal and actual parameters must be the same
+typecheck.bpl(59,4): Error: Only a linear argument can be passed to linear parameter a
+typecheck.bpl(64,4): Error: Linear variable a can occur only once as an input parameter of a parallel call
+typecheck.bpl(73,0): Error: Output variable d must be available at a return
+typecheck.bpl(82,0): Error: Global variable g must be available at a return
+typecheck.bpl(87,7): Error: unavailable source for a linear read
+typecheck.bpl(88,0): Error: Output variable r must be available at a return
+15 type checking errors detected in typecheck.bpl
diff --git a/Test/livevars/NestedOneDimensionalMap.bpl b/Test/livevars/NestedOneDimensionalMap.bpl
index 5f67f352..dce3ece9 100644
--- a/Test/livevars/NestedOneDimensionalMap.bpl
+++ b/Test/livevars/NestedOneDimensionalMap.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var k: int;
-var AllMaps__1: [int][int]int;
-
-procedure PoirotMain.Main_trace_1_trace_1()
-modifies k, AllMaps__1;
-{
- var $tmp4: int;
- var local_0: int;
-
- lab0:
- k := 1;
- goto lab1, lab2;
-
-
-lab1:
- assume k == 0;
- goto lab3;
-
-lab2:
- assume k == 1;
- $tmp4 := local_0;
- goto lab3;
-
-lab3:
- AllMaps__1[$tmp4][0] := 1;
- assert AllMaps__1[local_0][0] == 1;
-}
-
-
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var k: int;
+var AllMaps__1: [int][int]int;
+
+procedure PoirotMain.Main_trace_1_trace_1()
+modifies k, AllMaps__1;
+{
+ var $tmp4: int;
+ var local_0: int;
+
+ lab0:
+ k := 1;
+ goto lab1, lab2;
+
+
+lab1:
+ assume k == 0;
+ goto lab3;
+
+lab2:
+ assume k == 1;
+ $tmp4 := local_0;
+ goto lab3;
+
+lab3:
+ AllMaps__1[$tmp4][0] := 1;
+ assert AllMaps__1[local_0][0] == 1;
+}
+
+
diff --git a/Test/livevars/TwoDimensionalMap.bpl b/Test/livevars/TwoDimensionalMap.bpl
index 2a90ffe2..f3aea329 100644
--- a/Test/livevars/TwoDimensionalMap.bpl
+++ b/Test/livevars/TwoDimensionalMap.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var k: int;
-var AllMaps__1: [int,int]int;
-
-procedure PoirotMain.Main_trace_1_trace_1()
-modifies k, AllMaps__1;
-{
- var $tmp4: int;
- var local_0: int;
-
- lab0:
- k := 1;
- goto lab1, lab2;
-
-
-lab1:
- assume k == 0;
- goto lab3;
-
-lab2:
- assume k == 1;
- $tmp4 := local_0;
- goto lab3;
-
-lab3:
- AllMaps__1[$tmp4,0] := 1;
- assert AllMaps__1[local_0,0] == 1;
-}
-
-
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var k: int;
+var AllMaps__1: [int,int]int;
+
+procedure PoirotMain.Main_trace_1_trace_1()
+modifies k, AllMaps__1;
+{
+ var $tmp4: int;
+ var local_0: int;
+
+ lab0:
+ k := 1;
+ goto lab1, lab2;
+
+
+lab1:
+ assume k == 0;
+ goto lab3;
+
+lab2:
+ assume k == 1;
+ $tmp4 := local_0;
+ goto lab3;
+
+lab3:
+ AllMaps__1[$tmp4,0] := 1;
+ assert AllMaps__1[local_0,0] == 1;
+}
+
+
diff --git a/Test/livevars/bla1.bpl b/Test/livevars/bla1.bpl
index 669f8571..9be8aafd 100644
--- a/Test/livevars/bla1.bpl
+++ b/Test/livevars/bla1.bpl
@@ -1,2102 +1,2102 @@
-// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var __storm_thread_done_0 : bool;
-var __storm_thread_done_1 : bool;
-var __storm_thread_done_2 : bool;
-
-var raiseException : bool;
-var errorReached : bool;
-var k : int;
-var __storm_atomic : bool;
-var __storm_init : bool;
-var tid : int;
-var tidCount : int;
-
-procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tidRet:int)
-{
- tidRet := tid;
- return;
-}
-
-
-procedure storm_context_0();
-procedure storm_context_1();
-
-procedure contextSwitch();
-modifies k;
-ensures __storm_atomic ==> old(k) == k;
-ensures(old(k) <= k);
-ensures(k < 2);
-
-
-
-// Memory model
-
-// Mutable
-var alloc:int;
-
-// Immutable
-
-var Mem_0_T.CancelRoutine__IRP : [int]int;
-var Mem_1_T.CancelRoutine__IRP : [int]int;
-var Mem_s_1_T.CancelRoutine__IRP : [int]int;
-var Mem_0_T.Cancel__IRP : [int]int;
-var Mem_1_T.Cancel__IRP : [int]int;
-var Mem_s_1_T.Cancel__IRP : [int]int;
-var Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
-var Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
-var Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
-var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_s_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_0_T.DeviceObject__IO_STACK_LOCATION : [int]int;
-var Mem_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
-var Mem_s_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
-
-
-// Field declarations
-
-
-// Type declarations
-
-
-// Field offset definitions
-
-function AssociatedIrp__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == x + 12);
-axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function COMMON_DATA__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelIrql__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
-axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelRoutine__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
-axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Cancel__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
-axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
-axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Context__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
-axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Control__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
-axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControllerData__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == x + 0);
-axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentLocation__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
-axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentStackLocation___unnamed_4_3c640f23(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == x + 0);
-axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceIoControl___unnamed_16_afe81cff(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == x + 0);
-axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceObject__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
-axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(int) returns (int);
-
-
-//axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == x + 2);
-axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == INT_ADD(x, 2));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Information__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
-axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Initialized_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == x + 323);
-axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == INT_ADD(x, 323));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function InterruptDescriptor_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == x + 300);
-axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == INT_ADD(x, 300));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function InterruptObject_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == x + 4);
-axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IoStatus__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
-axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IsKeyboard_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == x + 325);
-axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == INT_ADD(x, 325));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Item__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == x + 0);
-axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function KeyboardExtension__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == x + 8);
-axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function KeyboardPowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == x + 8);
-axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MajorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
-axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MinorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
-axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MouseExtension__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MousePowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == x + 4);
-axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function OutputBufferLength___unnamed_16_ae81ad04(int) returns (int);
-
-
-//axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == x + 0);
-axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function OutstandingPowerIrp_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == x + 44);
-axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == INT_ADD(x, 44));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Overlay___unnamed_48_e2bbfb0b(int) returns (int);
-
-
-//axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == x + 0);
-axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Parameters__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
-axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PendingReturned__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
-axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerCaps__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == x + 328);
-axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 328));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerFlags__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == x + 40);
-axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == INT_ADD(x, 40));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerSpinLock__CONTROLLER_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == x + 116);
-axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == INT_ADD(x, 116));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == x + 48);
-axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == INT_ADD(x, 48));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Power___unnamed_16_afe81cff(int) returns (int);
-
-
-//axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == x + 0);
-axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function RemoveLock_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == x + 20);
-axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ShutdownType_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == x + 56);
-axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == INT_ADD(x, 56));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ShutdownType___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == x + 12);
-axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Started_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == x + 326);
-axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == INT_ADD(x, 326));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function State___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == x + 8);
-axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Status___unnamed_4_d4b13373(int) returns (int);
-
-
-//axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == x + 0);
-axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == x + 332);
-axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 332));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == x + 368);
-axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 368));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemBuffer___unnamed_4_99f86ad5(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == x + 0);
-axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == x + 52);
-axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == INT_ADD(x, 52));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Tail__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
-axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function TopOfStack_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == x + 12);
-axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Type___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == x + 4);
-axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_12_41c62b26___unnamed_40_32307de2(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == x + 24);
-axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_4_3c640f23___unnamed_12_41c62b26(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == x + 8);
-axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_4_d4b13373__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-
-///////////////////////////////////
-// will be replaced by:
-// "//" when using bv mode
-// "" when using int mode
-// main reason is to avoid using bv for constants
-// or avoid translating lines that are complex or unsound
-//////////////////////////////////
-
-////////////////////////////////////////////
-/////// functions for int type /////////////
-// Theorem prover does not see INT_ADD etc.
-////////////////////////////////////////////
-function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
-function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
-
-function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
-function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
-function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
-function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
-function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
-function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
-
-
-////////////////////////////////////////////
-/////// functions for bv32 type /////////////
-// Theorem prover does not see INT_ADD etc.
-// we are treating unsigned ops now
-////////////////////////////////////////////
-function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
-function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
-
-function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
-
-//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
-//only enabled with bv theory
-// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
-
-//////////////////////////////////
-// Generic C Arithmetic operations
-/////////////////////////////////
-
-//Is this sound for bv32?
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
- axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
- INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
-
-//we just keep this axiom for size = 1
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
-
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
-
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
-
-function MULT(a:int, b:int) returns (int); // a*b
-//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-// Not sure if these axioms hold for BV too, just commet them for BV
-
-
-
-//uninterpreted binary op
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-
-//////////////////////////////////////////
-//// Bitwise ops (uninterpreted, used with int)
-//////////////////////////////////////////
-
-
- function BIT_BAND(a:int, b:int) returns (x:int);
-
-
- function BIT_BOR(a:int, b:int) returns (x:int);
- function BIT_BXOR(a:int, b:int) returns (x:int);
- function BIT_BNOT(a:int) returns (int);
-
-
-
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function PTR_NOT(a:int) returns (int);
-axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
-axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-
-function NewAlloc(x:int, y:int) returns (z:int);
-
-//Comments below make HAVOC_malloc deterministic
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-//requires obj_size >= 0;
-free requires INT_GEQ(obj_size, 0);
-modifies alloc;
-ensures new == old(alloc);
-//ensures alloc > new + obj_size;
-ensures INT_GT(alloc, INT_ADD(new, obj_size));
-//ensures alloc == NewAlloc(old(alloc), obj_size);
-
-
-
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-
-/*
-//bv functions
-function bv8ToInt(bv8) returns (int);
-function bv16ToInt(bv16) returns (int);
-function bv32ToInt(bv32) returns (int);
-function bv64ToInt(bv64) returns (int);
-
-function intToBv8(int) returns (bv8);
-function intToBv16(int) returns (bv16);
-function intToBv32(int) returns (bv32);
-function intToBv64(int) returns (bv64);
-
-axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
-axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
-axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
-axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
-
-axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
-axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
-axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
-axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
-*/
-
-
-
-var Res_0_COMPLETED : [int]int;
-var Res_1_COMPLETED : [int]int;
-var Res_s_1_COMPLETED : [int]int;
-var Res_KERNEL_SOURCE:[int]int;
-var Res_0_LOCK : [int]int;
-var Res_1_LOCK : [int]int;
-var Res_s_1_LOCK : [int]int;
-var Res_PROBED:[int]int;
-
-//Pointer constants
-
-//Function pointer constants
-
-
-const unique Globals : int;
-axiom(Globals != 0);
-const unique I8xPowerUpToD0Complete : int;
-axiom(I8xPowerUpToD0Complete != 0);
-const unique I8xReinitializeHardware : int;
-axiom(I8xReinitializeHardware != 0);
-const unique I8xSysButtonCancelRoutine : int;
-axiom(I8xSysButtonCancelRoutine != 0);
-var cancelLockStatus_0 : int;
-var cancelLockStatus_1 : int;
-var cancelLockStatus_s_1 : int;
-
-const unique hdevobj : int;
-axiom(hdevobj != 0);
-// the set of constants for 64 bit integers that Boogie doesn't parse
-const unique BOOGIE_LARGE_INT_2147483648:int;
-
-
-
-procedure ExFreePoolWithTag(a0:int, a1:int);
-
-
-
-procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
-
-
-
-procedure IoAllocateWorkItem(a0:int) returns (ret:int);
-
-
-
-procedure IoDisconnectInterrupt(a0:int);
-
-
-
-procedure IoFreeWorkItem(a0:int);
-
-
-
-procedure IoQueueWorkItem(a0:int, a1:int, a2:int, a3:int);
-
-
-
-procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
-
-
-
-procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure PoStartNextPowerIrp(a0:int);
-
-
-
-procedure __PREfastPagedCode();
-
-
-
-procedure __storm_assert_dummy();
-
-
-
-procedure __storm_atomic_begin_dummy();
-
-
-
-procedure __storm_atomic_end_dummy();
-
-
-
-procedure memcpy(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure memset(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-
-
-
-procedure storm_nondet() returns (ret:int);
-
-
-
-procedure storm_main();
- free requires 0 < alloc;
- free requires 0 < tid;
- free requires tid < tidCount;
- requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
- modifies tidCount, alloc, raiseException, cancelLockStatus_s_1, __storm_init, __storm_atomic, errorReached, cancelLockStatus_0, cancelLockStatus_1, __storm_thread_done_2, __storm_thread_done_1, __storm_thread_done_0, tid, k, Res_0_COMPLETED, Res_1_COMPLETED, Res_KERNEL_SOURCE, Res_0_LOCK, Res_1_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_1_T.CancelRoutine__IRP, Mem_0_T.Cancel__IRP, Mem_1_T.Cancel__IRP, Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_1_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.DeviceObject__IO_STACK_LOCATION, Mem_1_T.DeviceObject__IO_STACK_LOCATION;
-
-
-
-implementation storm_main()
-{
- var inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine_.1: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$: int, inline$I8xKeyboardGetSysButtonEvent$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1: int, k_old_1: int, k_old_0: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp: int, inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp: int, tid_old_1: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$: int, tid_old_0: int, inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation: int, inline$cancel$0$$Irp$1$64.17$cancel: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl: int, inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$: int, inline$cancel$0$$Irp$1$64.17$cancel_.1: int, $irp$1$91.7$storm_main: int, inline$storm_getThreadID$0$tidRet: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1: int, $result.storm_IoAllocateIrp$96.21$1$: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$: int, tidCount_old: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine_.1: int, inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp: int, inline$dispatch$0$$Irp$1$8.19$dispatch: int, $result.IoGetCurrentIrpStackLocation$99.38$2$: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$173.41$4$: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent: int, $irpSp$2$92.21$storm_main: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1: int, inline$dispatch$0$$Irp$1$8.19$dispatch_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int;
-
- start#1:
- assume Res_1_COMPLETED == Res_s_1_COMPLETED;
- assume Res_1_LOCK == Res_s_1_LOCK;
- assume Mem_1_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
- assume Mem_1_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
- assume Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
- assume Mem_1_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
- assume Mem_1_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
- assume cancelLockStatus_1 == cancelLockStatus_s_1;
- __storm_thread_done_0 := false;
- __storm_thread_done_1 := false;
- __storm_thread_done_2 := false;
- k := 0;
- errorReached := false;
- __storm_atomic := false;
- __storm_init := false;
- goto label_3#1;
-
- label_3#1:
- goto label_4#1;
-
- label_4#1:
- goto label_5#1;
-
- label_5#1:
- goto anon10_Then#1, anon10_Else#1;
-
- anon10_Else#1:
- assume k != 0;
- goto anon11_Then#1, anon11_Else#1;
-
- anon11_Else#1:
- assume k != 1;
- goto anon2#1;
-
- anon11_Then#1:
- assume k == 1;
- cancelLockStatus_1 := 0;
- goto anon2#1;
-
- anon10_Then#1:
- assume k == 0;
- cancelLockStatus_0 := 0;
- goto anon2#1;
-
- anon2#1:
- call contextSwitch();
- goto label_6#1;
-
- label_6#1:
- goto inline$storm_IoAllocateIrp$0$Entry#1;
-
- inline$storm_IoAllocateIrp$0$Entry#1:
- inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1 := 2;
- goto inline$storm_IoAllocateIrp$0$start#1;
-
- inline$storm_IoAllocateIrp$0$start#1:
- inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1;
- goto inline$storm_IoAllocateIrp$0$label_3#1;
-
- inline$storm_IoAllocateIrp$0$label_3#1:
- goto inline$storm_IoAllocateIrp$0$label_4#1;
-
- inline$storm_IoAllocateIrp$0$label_4#1:
- goto inline$storm_IoAllocateIrp$0$label_5#1;
-
- inline$storm_IoAllocateIrp$0$label_5#1:
- call inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ := storm_nondet();
- goto inline$storm_IoAllocateIrp$0$label_8#1;
-
- inline$storm_IoAllocateIrp$0$label_8#1:
- goto inline$storm_IoAllocateIrp$0$label_8_case_0#1, inline$storm_IoAllocateIrp$0$label_8_case_1#1;
-
- inline$storm_IoAllocateIrp$0$label_8_case_1#1:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ == 0;
- goto inline$storm_IoAllocateIrp$0$label_10#1;
-
- inline$storm_IoAllocateIrp$0$label_10#1:
- __storm_atomic := true;
- goto inline$storm_IoAllocateIrp$0$label_13#1;
-
- inline$storm_IoAllocateIrp$0$label_13#1:
- call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$ := __HAVOC_malloc(112);
- goto inline$storm_IoAllocateIrp$0$label_16#1;
-
- inline$storm_IoAllocateIrp$0$label_16#1:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$;
- goto inline$storm_IoAllocateIrp$0$label_17#1;
-
- inline$storm_IoAllocateIrp$0$label_17#1:
- goto inline$storm_IoAllocateIrp$0$anon14_Then#1, inline$storm_IoAllocateIrp$0$anon14_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon14_Else#1:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon15_Then#1, inline$storm_IoAllocateIrp$0$anon15_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon15_Else#1:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon2#1;
-
- inline$storm_IoAllocateIrp$0$anon15_Then#1:
- assume k == 1;
- Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon2#1;
-
- inline$storm_IoAllocateIrp$0$anon14_Then#1:
- assume k == 0;
- Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon2#1;
-
- inline$storm_IoAllocateIrp$0$anon2#1:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_18#1;
-
- inline$storm_IoAllocateIrp$0$label_18#1:
- goto inline$storm_IoAllocateIrp$0$anon16_Then#1, inline$storm_IoAllocateIrp$0$anon16_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon16_Else#1:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon17_Then#1, inline$storm_IoAllocateIrp$0$anon17_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon17_Else#1:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon5#1;
-
- inline$storm_IoAllocateIrp$0$anon17_Then#1:
- assume k == 1;
- Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon5#1;
-
- inline$storm_IoAllocateIrp$0$anon16_Then#1:
- assume k == 0;
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon5#1;
-
- inline$storm_IoAllocateIrp$0$anon5#1:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_19#1;
-
- inline$storm_IoAllocateIrp$0$label_19#1:
- goto inline$storm_IoAllocateIrp$0$anon18_Then#1, inline$storm_IoAllocateIrp$0$anon18_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon18_Else#1:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon19_Then#1, inline$storm_IoAllocateIrp$0$anon19_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon19_Else#1:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon8#1;
-
- inline$storm_IoAllocateIrp$0$anon19_Then#1:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
- goto inline$storm_IoAllocateIrp$0$anon8#1;
-
- inline$storm_IoAllocateIrp$0$anon18_Then#1:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
- goto inline$storm_IoAllocateIrp$0$anon8#1;
-
- inline$storm_IoAllocateIrp$0$anon8#1:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_20#1;
-
- inline$storm_IoAllocateIrp$0$label_20#1:
- assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp);
- goto inline$storm_IoAllocateIrp$0$label_21#1;
-
- inline$storm_IoAllocateIrp$0$label_21#1:
- inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp, 36);
- goto inline$storm_IoAllocateIrp$0$label_22#1;
-
- inline$storm_IoAllocateIrp$0$label_22#1:
- call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
- goto inline$storm_IoAllocateIrp$0$label_25#1;
-
- inline$storm_IoAllocateIrp$0$label_25#1:
- inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$;
- goto inline$storm_IoAllocateIrp$0$label_26#1;
-
- inline$storm_IoAllocateIrp$0$label_26#1:
- goto inline$storm_IoAllocateIrp$0$anon20_Then#1, inline$storm_IoAllocateIrp$0$anon20_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon20_Else#1:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon21_Then#1, inline$storm_IoAllocateIrp$0$anon21_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon21_Else#1:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon11#1;
-
- inline$storm_IoAllocateIrp$0$anon21_Then#1:
- assume k == 1;
- Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
- goto inline$storm_IoAllocateIrp$0$anon11#1;
-
- inline$storm_IoAllocateIrp$0$anon20_Then#1:
- assume k == 0;
- Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
- goto inline$storm_IoAllocateIrp$0$anon11#1;
-
- inline$storm_IoAllocateIrp$0$anon11#1:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_27#1;
-
- inline$storm_IoAllocateIrp$0$label_27#1:
- goto inline$IoGetNextIrpStackLocation$0$Entry#1;
-
- inline$IoGetNextIrpStackLocation$0$Entry#1:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
- goto inline$IoGetNextIrpStackLocation$0$start#1;
-
- inline$IoGetNextIrpStackLocation$0$start#1:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation := inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1;
- goto inline$IoGetNextIrpStackLocation$0$label_3#1;
-
- inline$IoGetNextIrpStackLocation$0$label_3#1:
- goto inline$IoGetNextIrpStackLocation$0$anon3_Then#1, inline$IoGetNextIrpStackLocation$0$anon3_Else#1;
-
- inline$IoGetNextIrpStackLocation$0$anon3_Else#1:
- assume k != 0;
- goto inline$IoGetNextIrpStackLocation$0$anon4_Then#1, inline$IoGetNextIrpStackLocation$0$anon4_Else#1;
-
- inline$IoGetNextIrpStackLocation$0$anon4_Else#1:
- assume k != 1;
- goto inline$IoGetNextIrpStackLocation$0$anon2#1;
-
- inline$IoGetNextIrpStackLocation$0$anon4_Then#1:
- assume k == 1;
- inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
- goto inline$IoGetNextIrpStackLocation$0$anon2#1;
-
- inline$IoGetNextIrpStackLocation$0$anon3_Then#1:
- assume k == 0;
- inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
- goto inline$IoGetNextIrpStackLocation$0$anon2#1;
-
- inline$IoGetNextIrpStackLocation$0$anon2#1:
- call contextSwitch();
- inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$ := MINUS_LEFT_PTR(inline$IoGetNextIrpStackLocation$0$myVar_0, 36, 1);
- goto inline$IoGetNextIrpStackLocation$0$label_1#1;
-
- inline$IoGetNextIrpStackLocation$0$label_1#1:
- goto inline$IoGetNextIrpStackLocation$0$Return#1;
-
- inline$IoGetNextIrpStackLocation$0$Return#1:
- inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$ := inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$;
- goto inline$storm_IoAllocateIrp$0$label_27$1#1;
-
- inline$storm_IoAllocateIrp$0$label_27$1#1:
- goto inline$storm_IoAllocateIrp$0$label_30#1;
-
- inline$storm_IoAllocateIrp$0$label_30#1:
- inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$;
- goto inline$storm_IoAllocateIrp$0$label_31#1;
-
- inline$storm_IoAllocateIrp$0$label_31#1:
- goto inline$storm_IoAllocateIrp$0$label_32#1;
-
- inline$storm_IoAllocateIrp$0$label_32#1:
- goto inline$storm_IoAllocateIrp$0$label_33#1;
-
- inline$storm_IoAllocateIrp$0$label_33#1:
- goto inline$storm_IoAllocateIrp$0$anon22_Then#1, inline$storm_IoAllocateIrp$0$anon22_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon22_Else#1:
- assume __storm_init;
- goto inline$storm_IoAllocateIrp$0$anon13#1;
-
- inline$storm_IoAllocateIrp$0$anon22_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAllocateIrp$0$anon13#1;
-
- inline$storm_IoAllocateIrp$0$anon13#1:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_36#1;
-
- inline$storm_IoAllocateIrp$0$label_8_case_0#1:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ != 0;
- goto inline$storm_IoAllocateIrp$0$label_9#1;
-
- inline$storm_IoAllocateIrp$0$label_9#1:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0;
- goto inline$storm_IoAllocateIrp$0$label_36#1;
-
- inline$storm_IoAllocateIrp$0$label_36#1:
- inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
- goto inline$storm_IoAllocateIrp$0$label_1#1;
-
- inline$storm_IoAllocateIrp$0$label_1#1:
- goto inline$storm_IoAllocateIrp$0$Return#1;
-
- inline$storm_IoAllocateIrp$0$Return#1:
- $result.storm_IoAllocateIrp$96.21$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$;
- goto label_6$1#1;
-
- label_6$1#1:
- goto label_9#1;
-
- label_9#1:
- $irp$1$91.7$storm_main := $result.storm_IoAllocateIrp$96.21$1$;
- goto label_10#1;
-
- label_10#1:
- assume INT_NEQ($irp$1$91.7$storm_main, 0);
- goto label_11#1;
-
- label_11#1:
- goto inline$IoSetNextIrpStackLocation$0$Entry#1;
-
- inline$IoSetNextIrpStackLocation$0$Entry#1:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1 := $irp$1$91.7$storm_main;
- goto inline$IoSetNextIrpStackLocation$0$start#1;
-
- inline$IoSetNextIrpStackLocation$0$start#1:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation := inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1;
- goto inline$IoSetNextIrpStackLocation$0$label_3#1;
-
- inline$IoSetNextIrpStackLocation$0$label_3#1:
- havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 1, 1);
- goto inline$IoSetNextIrpStackLocation$0$label_4#1;
-
- inline$IoSetNextIrpStackLocation$0$label_4#1:
- goto inline$IoSetNextIrpStackLocation$0$anon6_Then#1, inline$IoSetNextIrpStackLocation$0$anon6_Else#1;
-
- inline$IoSetNextIrpStackLocation$0$anon6_Else#1:
- assume k != 0;
- goto inline$IoSetNextIrpStackLocation$0$anon7_Then#1, inline$IoSetNextIrpStackLocation$0$anon7_Else#1;
-
- inline$IoSetNextIrpStackLocation$0$anon7_Else#1:
- assume k != 1;
- goto inline$IoSetNextIrpStackLocation$0$anon2#1;
-
- inline$IoSetNextIrpStackLocation$0$anon7_Then#1:
- assume k == 1;
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
- goto inline$IoSetNextIrpStackLocation$0$anon2#1;
-
- inline$IoSetNextIrpStackLocation$0$anon6_Then#1:
- assume k == 0;
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
- goto inline$IoSetNextIrpStackLocation$0$anon2#1;
-
- inline$IoSetNextIrpStackLocation$0$anon2#1:
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$0$anon8_Then#1, inline$IoSetNextIrpStackLocation$0$anon8_Else#1;
-
- inline$IoSetNextIrpStackLocation$0$anon8_Else#1:
- assume k != 0;
- goto inline$IoSetNextIrpStackLocation$0$anon9_Then#1, inline$IoSetNextIrpStackLocation$0$anon9_Else#1;
-
- inline$IoSetNextIrpStackLocation$0$anon9_Else#1:
- assume k != 1;
- goto inline$IoSetNextIrpStackLocation$0$anon5#1;
-
- inline$IoSetNextIrpStackLocation$0$anon9_Then#1:
- assume k == 1;
- Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
- goto inline$IoSetNextIrpStackLocation$0$anon5#1;
-
- inline$IoSetNextIrpStackLocation$0$anon8_Then#1:
- assume k == 0;
- Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
- goto inline$IoSetNextIrpStackLocation$0$anon5#1;
-
- inline$IoSetNextIrpStackLocation$0$anon5#1:
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$0$label_1#1;
-
- inline$IoSetNextIrpStackLocation$0$label_1#1:
- goto inline$IoSetNextIrpStackLocation$0$Return#1;
-
- inline$IoSetNextIrpStackLocation$0$Return#1:
- goto label_11$1#1;
-
- label_11$1#1:
- goto label_14#1;
-
- label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$0$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$0$Entry#1:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := $irp$1$91.7$storm_main;
- goto inline$IoGetCurrentIrpStackLocation$0$start#1;
-
- inline$IoGetCurrentIrpStackLocation$0$start#1:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
- goto inline$IoGetCurrentIrpStackLocation$0$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$0$anon3_Then#1, inline$IoGetCurrentIrpStackLocation$0$anon3_Else#1;
-
- inline$IoGetCurrentIrpStackLocation$0$anon3_Else#1:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$0$anon4_Then#1, inline$IoGetCurrentIrpStackLocation$0$anon4_Else#1;
-
- inline$IoGetCurrentIrpStackLocation$0$anon4_Else#1:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$0$anon2#1;
-
- inline$IoGetCurrentIrpStackLocation$0$anon4_Then#1:
- assume k == 1;
- inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- goto inline$IoGetCurrentIrpStackLocation$0$anon2#1;
-
- inline$IoGetCurrentIrpStackLocation$0$anon3_Then#1:
- assume k == 0;
- inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- goto inline$IoGetCurrentIrpStackLocation$0$anon2#1;
-
- inline$IoGetCurrentIrpStackLocation$0$anon2#1:
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$0$myVar_0;
- goto inline$IoGetCurrentIrpStackLocation$0$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$0$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$0$Return#1:
- $result.IoGetCurrentIrpStackLocation$99.38$2$ := inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
- goto label_14$1#1;
-
- label_14$1#1:
- goto label_17#1;
-
- label_17#1:
- $irpSp$2$92.21$storm_main := $result.IoGetCurrentIrpStackLocation$99.38$2$;
- goto label_18#1;
-
- label_18#1:
- goto anon12_Then#1, anon12_Else#1;
-
- anon12_Else#1:
- assume k != 0;
- goto anon13_Then#1, anon13_Else#1;
-
- anon13_Else#1:
- assume k != 1;
- goto anon5#1;
-
- anon13_Then#1:
- assume k == 1;
- Mem_1_T.DeviceObject__IO_STACK_LOCATION := Mem_1_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
- goto anon5#1;
-
- anon12_Then#1:
- assume k == 0;
- Mem_0_T.DeviceObject__IO_STACK_LOCATION := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
- goto anon5#1;
-
- anon5#1:
- call contextSwitch();
- goto label_19#1;
-
- label_19#1:
- goto label_20#1;
-
- label_20#1:
- k_old_0 := k;
- tid_old_0 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$dispatch$0$Entry#1;
-
- inline$dispatch$0$Entry#1:
- inline$dispatch$0$$Irp$1$8.19$dispatch_.1 := $irp$1$91.7$storm_main;
- goto inline$dispatch$0$start#1;
-
- inline$dispatch$0$start#1:
- inline$dispatch$0$$Irp$1$8.19$dispatch := inline$dispatch$0$$Irp$1$8.19$dispatch_.1;
- goto inline$dispatch$0$label_3#1;
-
- inline$dispatch$0$label_3#1:
- goto inline$dispatch$0$label_4#1;
-
- inline$dispatch$0$label_4#1:
- goto inline$IoGetCurrentIrpStackLocation$1$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$1$Entry#1:
- goto inline$IoGetCurrentIrpStackLocation$1$start#1;
-
- inline$IoGetCurrentIrpStackLocation$1$start#1:
- goto inline$IoGetCurrentIrpStackLocation$1$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$1$anon3_Then#1, inline$IoGetCurrentIrpStackLocation$1$anon3_Else#1;
-
- inline$IoGetCurrentIrpStackLocation$1$anon3_Else#1:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$1$anon4_Then#1, inline$IoGetCurrentIrpStackLocation$1$anon4_Else#1;
-
- inline$IoGetCurrentIrpStackLocation$1$anon4_Else#1:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$1$anon2#1;
-
- inline$IoGetCurrentIrpStackLocation$1$anon4_Then#1:
- assume k == 1;
- goto inline$IoGetCurrentIrpStackLocation$1$anon2#1;
-
- inline$IoGetCurrentIrpStackLocation$1$anon3_Then#1:
- assume k == 0;
- goto inline$IoGetCurrentIrpStackLocation$1$anon2#1;
-
- inline$IoGetCurrentIrpStackLocation$1$anon2#1:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$1$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$1$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$1$Return#1:
- goto inline$dispatch$0$label_4$1#1;
-
- inline$dispatch$0$label_4$1#1:
- goto inline$dispatch$0$label_7#1;
-
- inline$dispatch$0$label_7#1:
- goto inline$dispatch$0$label_8#1;
-
- inline$dispatch$0$label_8#1:
- goto inline$I8xDeviceControl$0$Entry#1;
-
- inline$I8xDeviceControl$0$Entry#1:
- inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1 := inline$dispatch$0$$Irp$1$8.19$dispatch;
- goto inline$I8xDeviceControl$0$start#1;
-
- inline$I8xDeviceControl$0$start#1:
- inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1;
- goto inline$I8xDeviceControl$0$label_3#1;
-
- inline$I8xDeviceControl$0$label_3#1:
- goto inline$I8xDeviceControl$0$label_4#1;
-
- inline$I8xDeviceControl$0$label_4#1:
- call __PREfastPagedCode();
- goto inline$I8xDeviceControl$0$label_7#1;
-
- inline$I8xDeviceControl$0$label_7#1:
- goto inline$I8xDeviceControl$0$anon3_Then#1, inline$I8xDeviceControl$0$anon3_Else#1;
-
- inline$I8xDeviceControl$0$anon3_Else#1:
- assume k != 0;
- goto inline$I8xDeviceControl$0$anon4_Then#1, inline$I8xDeviceControl$0$anon4_Else#1;
-
- inline$I8xDeviceControl$0$anon4_Else#1:
- assume k != 1;
- goto inline$I8xDeviceControl$0$anon2#1;
-
- inline$I8xDeviceControl$0$anon4_Then#1:
- assume k == 1;
- goto inline$I8xDeviceControl$0$anon2#1;
-
- inline$I8xDeviceControl$0$anon3_Then#1:
- assume k == 0;
- goto inline$I8xDeviceControl$0$anon2#1;
-
- inline$I8xDeviceControl$0$anon2#1:
- call contextSwitch();
- goto inline$I8xDeviceControl$0$label_8#1;
-
- inline$I8xDeviceControl$0$label_8#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$Entry#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$Entry#1:
- inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
- goto inline$I8xKeyboardGetSysButtonEvent$0$start#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$start#1:
- inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent_.1;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_3#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_3#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_4#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_4#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_5#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_5#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_6#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_6#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_7#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_7#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_8#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_8#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_9#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_9#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_9_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_9_false#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_9_false#1:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_10#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_10#1:
- goto inline$storm_IoSetCancelRoutine$0$Entry#1;
-
- inline$storm_IoSetCancelRoutine$0$Entry#1:
- inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent;
- inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine_.1 := I8xSysButtonCancelRoutine;
- goto inline$storm_IoSetCancelRoutine$0$start#1;
-
- inline$storm_IoSetCancelRoutine$0$start#1:
- inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine_.1;
- inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine_.1;
- goto inline$storm_IoSetCancelRoutine$0$label_3#1;
-
- inline$storm_IoSetCancelRoutine$0$label_3#1:
- goto inline$storm_IoSetCancelRoutine$0$label_4#1;
-
- inline$storm_IoSetCancelRoutine$0$label_4#1:
- call inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$ := storm_nondet();
- goto inline$storm_IoSetCancelRoutine$0$label_7#1;
-
- inline$storm_IoSetCancelRoutine$0$label_7#1:
- goto inline$storm_IoSetCancelRoutine$0$label_7_true#1, inline$storm_IoSetCancelRoutine$0$label_7_false#1;
-
- inline$storm_IoSetCancelRoutine$0$label_7_false#1:
- assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$ == 0;
- goto inline$storm_IoSetCancelRoutine$0$label_8#1;
-
- inline$storm_IoSetCancelRoutine$0$label_7_true#1:
- assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$ != 0;
- goto inline$storm_IoSetCancelRoutine$0$label_11#1;
-
- inline$storm_IoSetCancelRoutine$0$label_11#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine], 1);
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_12#1;
-
- inline$storm_IoSetCancelRoutine$0$label_12#1:
- goto inline$storm_IoSetCancelRoutine$0$label_12_true#1, inline$storm_IoSetCancelRoutine$0$label_12_false#1;
-
- inline$storm_IoSetCancelRoutine$0$label_12_false#1:
- assume 0 == 0;
- goto inline$storm_IoSetCancelRoutine$0$label_13#1;
-
- inline$storm_IoSetCancelRoutine$0$label_13#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCancelRoutine$0$label_1#1;
-
- inline$storm_IoSetCancelRoutine$0$label_12_true#1:
- assume 0 != 0;
- goto inline$storm_IoSetCancelRoutine$0$label_8#1;
-
- inline$storm_IoSetCancelRoutine$0$label_8#1:
- __storm_atomic := true;
- goto inline$storm_IoSetCancelRoutine$0$label_16#1;
-
- inline$storm_IoSetCancelRoutine$0$label_16#1:
- goto inline$storm_IoSetCancelRoutine$0$anon9_Then#1, inline$storm_IoSetCancelRoutine$0$anon9_Else#1;
-
- inline$storm_IoSetCancelRoutine$0$anon9_Else#1:
- assume k != 0;
- goto inline$storm_IoSetCancelRoutine$0$anon10_Then#1, inline$storm_IoSetCancelRoutine$0$anon10_Else#1;
-
- inline$storm_IoSetCancelRoutine$0$anon10_Else#1:
- assume k != 1;
- goto inline$storm_IoSetCancelRoutine$0$anon3#1;
-
- inline$storm_IoSetCancelRoutine$0$anon10_Then#1:
- assume k == 1;
- goto inline$storm_IoSetCancelRoutine$0$anon3#1;
-
- inline$storm_IoSetCancelRoutine$0$anon9_Then#1:
- assume k == 0;
- goto inline$storm_IoSetCancelRoutine$0$anon3#1;
-
- inline$storm_IoSetCancelRoutine$0$anon3#1:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_17#1;
-
- inline$storm_IoSetCancelRoutine$0$label_17#1:
- goto inline$storm_IoSetCancelRoutine$0$anon11_Then#1, inline$storm_IoSetCancelRoutine$0$anon11_Else#1;
-
- inline$storm_IoSetCancelRoutine$0$anon11_Else#1:
- assume k != 0;
- goto inline$storm_IoSetCancelRoutine$0$anon12_Then#1, inline$storm_IoSetCancelRoutine$0$anon12_Else#1;
-
- inline$storm_IoSetCancelRoutine$0$anon12_Else#1:
- assume k != 1;
- goto inline$storm_IoSetCancelRoutine$0$anon6#1;
-
- inline$storm_IoSetCancelRoutine$0$anon12_Then#1:
- assume k == 1;
- Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine];
- goto inline$storm_IoSetCancelRoutine$0$anon6#1;
-
- inline$storm_IoSetCancelRoutine$0$anon11_Then#1:
- assume k == 0;
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine];
- goto inline$storm_IoSetCancelRoutine$0$anon6#1;
-
- inline$storm_IoSetCancelRoutine$0$anon6#1:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_18#1;
-
- inline$storm_IoSetCancelRoutine$0$label_18#1:
- goto inline$storm_IoSetCancelRoutine$0$anon13_Then#1, inline$storm_IoSetCancelRoutine$0$anon13_Else#1;
-
- inline$storm_IoSetCancelRoutine$0$anon13_Else#1:
- assume __storm_init;
- goto inline$storm_IoSetCancelRoutine$0$anon8#1;
-
- inline$storm_IoSetCancelRoutine$0$anon13_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoSetCancelRoutine$0$anon8#1;
-
- inline$storm_IoSetCancelRoutine$0$anon8#1:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_21#1;
-
- inline$storm_IoSetCancelRoutine$0$label_21#1:
- goto inline$storm_IoSetCancelRoutine$0$label_1#1;
-
- inline$storm_IoSetCancelRoutine$0$label_1#1:
- goto inline$storm_IoSetCancelRoutine$0$Return#1;
-
- inline$storm_IoSetCancelRoutine$0$Return#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_18#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_18#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_18_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_18_false#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_18_false#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon8_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon8_Else#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon8_Else#1:
- assume k != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon9_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon9_Else#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon9_Else#1:
- assume k != 1;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon9_Then#1:
- assume k == 1;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon8_Then#1:
- assume k == 0;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon5#1:
- call contextSwitch();
- assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_19#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_19#1:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent := 259;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_18_true#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon6_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon6_Else#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon6_Else#1:
- assume k != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon7_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon7_Else#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon7_Else#1:
- assume k != 1;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon2#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon7_Then#1:
- assume k == 1;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon2#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon6_Then#1:
- assume k == 0;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon2#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon2#1:
- call contextSwitch();
- assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_20#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_20#1:
- call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$ := storm_nondet();
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_23#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_23#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_23_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_23_false#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_23_false#1:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$ == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_24#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_24#1:
- call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$173.41$4$ := storm_nondet();
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_28#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_28#1:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$173.41$4$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_23_true#1:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$ != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_27#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_27#1:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741536;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_9_true#1:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_13#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_13_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_13_false#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_13_false#1:
- assume !INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent, 259);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_13_true#1:
- assume INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent, 259);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_15#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15#1:
- goto inline$I8xCompleteSysButtonIrp$0$Entry#1;
-
- inline$I8xCompleteSysButtonIrp$0$Entry#1:
- inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent;
- goto inline$I8xCompleteSysButtonIrp$0$start#1;
-
- inline$I8xCompleteSysButtonIrp$0$start#1:
- inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1;
- goto inline$I8xCompleteSysButtonIrp$0$label_3#1;
-
- inline$I8xCompleteSysButtonIrp$0$label_3#1:
- goto inline$storm_IoCompleteRequest$0$Entry#1;
-
- inline$storm_IoCompleteRequest$0$Entry#1:
- inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp;
- goto inline$storm_IoCompleteRequest$0$start#1;
-
- inline$storm_IoCompleteRequest$0$start#1:
- inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$0$label_3#1;
-
- inline$storm_IoCompleteRequest$0$label_3#1:
- call inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$0$label_6#1;
-
- inline$storm_IoCompleteRequest$0$label_6#1:
- goto inline$storm_IoCompleteRequest$0$label_6_true#1, inline$storm_IoCompleteRequest$0$label_6_false#1;
-
- inline$storm_IoCompleteRequest$0$label_6_false#1:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$0$label_7#1;
-
- inline$storm_IoCompleteRequest$0$label_6_true#1:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$0$label_8#1;
-
- inline$storm_IoCompleteRequest$0$label_8#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_9#1;
-
- inline$storm_IoCompleteRequest$0$label_9#1:
- goto inline$storm_IoCompleteRequest$0$label_9_true#1, inline$storm_IoCompleteRequest$0$label_9_false#1;
-
- inline$storm_IoCompleteRequest$0$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$0$label_10#1;
-
- inline$storm_IoCompleteRequest$0$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$0$label_1#1;
-
- inline$storm_IoCompleteRequest$0$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$0$label_7#1;
-
- inline$storm_IoCompleteRequest$0$label_7#1:
- goto inline$storm_IoCompleteRequest$0$anon4_Then#1, inline$storm_IoCompleteRequest$0$anon4_Else#1;
-
- inline$storm_IoCompleteRequest$0$anon4_Else#1:
- assume k != 0;
- goto inline$storm_IoCompleteRequest$0$anon5_Then#1, inline$storm_IoCompleteRequest$0$anon5_Else#1;
-
- inline$storm_IoCompleteRequest$0$anon5_Else#1:
- assume k != 1;
- goto inline$storm_IoCompleteRequest$0$anon2#1;
-
- inline$storm_IoCompleteRequest$0$anon5_Then#1:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$0$anon2#1;
-
- inline$storm_IoCompleteRequest$0$anon4_Then#1:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$0$anon2#1;
-
- inline$storm_IoCompleteRequest$0$anon2#1:
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_1#1;
-
- inline$storm_IoCompleteRequest$0$label_1#1:
- goto inline$storm_IoCompleteRequest$0$Return#1;
-
- inline$storm_IoCompleteRequest$0$Return#1:
- goto inline$I8xCompleteSysButtonIrp$0$label_3$1#1;
-
- inline$I8xCompleteSysButtonIrp$0$label_3$1#1:
- goto inline$I8xCompleteSysButtonIrp$0$label_1#1;
-
- inline$I8xCompleteSysButtonIrp$0$label_1#1:
- goto inline$I8xCompleteSysButtonIrp$0$Return#1;
-
- inline$I8xCompleteSysButtonIrp$0$Return#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_15$1#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15$1#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_14#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_1#1:
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#1;
-
- inline$I8xKeyboardGetSysButtonEvent$0$Return#1:
- goto inline$I8xDeviceControl$0$label_8$1#1;
-
- inline$I8xDeviceControl$0$label_8$1#1:
- goto inline$I8xDeviceControl$0$label_11#1;
-
- inline$I8xDeviceControl$0$label_11#1:
- goto inline$I8xDeviceControl$0$label_1#1;
-
- inline$I8xDeviceControl$0$label_1#1:
- goto inline$I8xDeviceControl$0$Return#1;
-
- inline$I8xDeviceControl$0$Return#1:
- goto inline$dispatch$0$label_8$1#1;
-
- inline$dispatch$0$label_8$1#1:
- goto inline$dispatch$0$label_11#1;
-
- inline$dispatch$0$label_11#1:
- goto inline$dispatch$0$label_1#1;
-
- inline$dispatch$0$label_1#1:
- goto inline$dispatch$0$Return#1;
-
- inline$dispatch$0$Return#1:
- goto label_20$1#1;
-
- label_20$1#1:
- goto anon14_Then#1, anon14_Else#1;
-
- anon14_Else#1:
- assume !(errorReached || !raiseException);
- goto anon7#1;
-
- anon14_Then#1:
- assume errorReached || !raiseException;
- __storm_thread_done_1 := true;
- goto anon7#1;
-
- anon7#1:
- k := k_old_0;
- tid := tid_old_0;
- goto label_23#1;
-
- label_23#1:
- goto label_24#1;
-
- label_24#1:
- k_old_1 := k;
- tid_old_1 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$cancel$0$Entry#1;
-
- inline$cancel$0$Entry#1:
- inline$cancel$0$$Irp$1$64.17$cancel_.1 := $irp$1$91.7$storm_main;
- goto inline$cancel$0$start#1;
-
- inline$cancel$0$start#1:
- inline$cancel$0$$Irp$1$64.17$cancel := inline$cancel$0$$Irp$1$64.17$cancel_.1;
- goto inline$cancel$0$label_3#1;
-
- inline$cancel$0$label_3#1:
- goto inline$storm_IoCancelIrp$0$Entry#1;
-
- inline$storm_IoCancelIrp$0$Entry#1:
- inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1 := inline$cancel$0$$Irp$1$64.17$cancel;
- goto inline$storm_IoCancelIrp$0$start#1;
-
- inline$storm_IoCancelIrp$0$start#1:
- inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1;
- goto inline$storm_IoCancelIrp$0$label_3#1;
-
- inline$storm_IoCancelIrp$0$label_3#1:
- goto inline$storm_IoCancelIrp$0$label_4#1;
-
- inline$storm_IoCancelIrp$0$label_4#1:
- goto inline$storm_IoCancelIrp$0$anon12_Then#1, inline$storm_IoCancelIrp$0$anon12_Else#1;
-
- inline$storm_IoCancelIrp$0$anon12_Else#1:
- assume k != 0;
- goto inline$storm_IoCancelIrp$0$anon13_Then#1, inline$storm_IoCancelIrp$0$anon13_Else#1;
-
- inline$storm_IoCancelIrp$0$anon13_Else#1:
- assume k != 1;
- goto inline$storm_IoCancelIrp$0$anon2#1;
-
- inline$storm_IoCancelIrp$0$anon13_Then#1:
- assume k == 1;
- Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
- goto inline$storm_IoCancelIrp$0$anon2#1;
-
- inline$storm_IoCancelIrp$0$anon12_Then#1:
- assume k == 0;
- Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
- goto inline$storm_IoCancelIrp$0$anon2#1;
-
- inline$storm_IoCancelIrp$0$anon2#1:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_5#1;
-
- inline$storm_IoCancelIrp$0$label_5#1:
- __storm_atomic := true;
- goto inline$storm_IoCancelIrp$0$label_8#1;
-
- inline$storm_IoCancelIrp$0$label_8#1:
- goto inline$storm_IoCancelIrp$0$anon14_Then#1, inline$storm_IoCancelIrp$0$anon14_Else#1;
-
- inline$storm_IoCancelIrp$0$anon14_Else#1:
- assume k != 0;
- goto inline$storm_IoCancelIrp$0$anon15_Then#1, inline$storm_IoCancelIrp$0$anon15_Else#1;
-
- inline$storm_IoCancelIrp$0$anon15_Else#1:
- assume k != 1;
- goto inline$storm_IoCancelIrp$0$anon5#1;
-
- inline$storm_IoCancelIrp$0$anon15_Then#1:
- assume k == 1;
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
- goto inline$storm_IoCancelIrp$0$anon5#1;
-
- inline$storm_IoCancelIrp$0$anon14_Then#1:
- assume k == 0;
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
- goto inline$storm_IoCancelIrp$0$anon5#1;
-
- inline$storm_IoCancelIrp$0$anon5#1:
- call contextSwitch();
- inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$myVar_0;
- goto inline$storm_IoCancelIrp$0$label_9#1;
-
- inline$storm_IoCancelIrp$0$label_9#1:
- goto inline$storm_IoCancelIrp$0$anon16_Then#1, inline$storm_IoCancelIrp$0$anon16_Else#1;
-
- inline$storm_IoCancelIrp$0$anon16_Else#1:
- assume k != 0;
- goto inline$storm_IoCancelIrp$0$anon17_Then#1, inline$storm_IoCancelIrp$0$anon17_Else#1;
-
- inline$storm_IoCancelIrp$0$anon17_Else#1:
- assume k != 1;
- goto inline$storm_IoCancelIrp$0$anon8#1;
-
- inline$storm_IoCancelIrp$0$anon17_Then#1:
- assume k == 1;
- Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
- goto inline$storm_IoCancelIrp$0$anon8#1;
-
- inline$storm_IoCancelIrp$0$anon16_Then#1:
- assume k == 0;
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
- goto inline$storm_IoCancelIrp$0$anon8#1;
-
- inline$storm_IoCancelIrp$0$anon8#1:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_10#1;
-
- inline$storm_IoCancelIrp$0$label_10#1:
- goto inline$storm_IoCancelIrp$0$anon18_Then#1, inline$storm_IoCancelIrp$0$anon18_Else#1;
-
- inline$storm_IoCancelIrp$0$anon18_Else#1:
- assume __storm_init;
- goto inline$storm_IoCancelIrp$0$anon10#1;
-
- inline$storm_IoCancelIrp$0$anon18_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoCancelIrp$0$anon10#1;
-
- inline$storm_IoCancelIrp$0$anon10#1:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_13#1;
-
- inline$storm_IoCancelIrp$0$label_13#1:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
- assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
- goto inline$storm_IoAcquireCancelSpinLock$0$Entry#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$Entry#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$start#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$start#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_3#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_3#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_4#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_4#1:
- goto inline$storm_getThreadID$0$Entry#1;
-
- inline$storm_getThreadID$0$Entry#1:
- goto inline$storm_getThreadID$0$anon0#1;
-
- inline$storm_getThreadID$0$anon0#1:
- inline$storm_getThreadID$0$tidRet := tid;
- goto inline$storm_getThreadID$0$Return#1;
-
- inline$storm_getThreadID$0$Return#1:
- inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$ := inline$storm_getThreadID$0$tidRet;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_4$1#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_4$1#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_7#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_7#1:
- inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock := inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_8#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_8#1:
- __storm_atomic := true;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_11#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_11_true#1, inline$storm_IoAcquireCancelSpinLock$0$label_11_false#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11_false#1:
- assume k == 0 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
- assume k == 1 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_12#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_1#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11_true#1:
- assume k == 0 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
- assume k == 1 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_15#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_15#1:
- assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
- assume k == 1 ==> INT_EQ(cancelLockStatus_1, 0);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_16#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_16#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#1:
- assume k != 0;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon7_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon7_Else#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon7_Else#1:
- assume k != 1;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon7_Then#1:
- assume k == 1;
- cancelLockStatus_1 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#1:
- assume k == 0;
- cancelLockStatus_0 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon3#1:
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_17#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_17#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#1:
- assume __storm_init;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon5#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon5#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon5#1:
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_1#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_1#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$Return#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$Return#1:
- goto inline$storm_IoCancelIrp$0$label_13$1#1;
-
- inline$storm_IoCancelIrp$0$label_13$1#1:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- goto inline$storm_IoCancelIrp$0$label_16#1;
-
- inline$storm_IoCancelIrp$0$label_16#1:
- goto inline$storm_IoCancelIrp$0$label_16_true#1, inline$storm_IoCancelIrp$0$label_16_false#1;
-
- inline$storm_IoCancelIrp$0$label_16_false#1:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == 0;
- goto inline$storm_IoCancelIrp$0$label_17#1;
-
- inline$storm_IoCancelIrp$0$label_17#1:
- goto inline$storm_IoCancelIrp$0$label_1#1;
-
- inline$storm_IoCancelIrp$0$label_16_true#1:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp != 0;
- goto inline$storm_IoCancelIrp$0$label_18#1;
-
- inline$storm_IoCancelIrp$0$label_18#1:
- goto inline$storm_IoCancelIrp$0$label_19#1;
-
- inline$storm_IoCancelIrp$0$label_19#1:
- call inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ := storm_nondet();
- goto inline$storm_IoCancelIrp$0$label_22#1;
-
- inline$storm_IoCancelIrp$0$label_22#1:
- goto inline$storm_IoCancelIrp$0$label_22_true#1, inline$storm_IoCancelIrp$0$label_22_false#1;
-
- inline$storm_IoCancelIrp$0$label_22_false#1:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ == 0;
- goto inline$storm_IoCancelIrp$0$label_23#1;
-
- inline$storm_IoCancelIrp$0$label_22_true#1:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ != 0;
- goto inline$storm_IoCancelIrp$0$label_24#1;
-
- inline$storm_IoCancelIrp$0$label_24#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_25#1;
-
- inline$storm_IoCancelIrp$0$label_25#1:
- goto inline$storm_IoCancelIrp$0$label_25_true#1, inline$storm_IoCancelIrp$0$label_25_false#1;
-
- inline$storm_IoCancelIrp$0$label_25_false#1:
- assume 0 == 0;
- goto inline$storm_IoCancelIrp$0$label_26#1;
-
- inline$storm_IoCancelIrp$0$label_26#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCancelIrp$0$label_1#1;
-
- inline$storm_IoCancelIrp$0$label_25_true#1:
- assume 0 != 0;
- goto inline$storm_IoCancelIrp$0$label_23#1;
-
- inline$storm_IoCancelIrp$0$label_23#1:
- goto inline$storm_IoCancelIrp$0$label_1#1;
-
- inline$storm_IoCancelIrp$0$label_1#1:
- goto inline$storm_IoCancelIrp$0$Return#1;
-
- inline$storm_IoCancelIrp$0$Return#1:
- goto inline$cancel$0$label_3$1#1;
-
- inline$cancel$0$label_3$1#1:
- goto inline$cancel$0$label_1#1;
-
- inline$cancel$0$label_1#1:
- goto inline$cancel$0$Return#1;
-
- inline$cancel$0$Return#1:
- goto label_24$1#1;
-
- label_24$1#1:
- goto anon15_Then#1, anon15_Else#1;
-
- anon15_Else#1:
- assume !(errorReached || !raiseException);
- goto anon9#1;
-
- anon15_Then#1:
- assume errorReached || !raiseException;
- __storm_thread_done_2 := true;
- goto anon9#1;
-
- anon9#1:
- k := k_old_1;
- tid := tid_old_1;
- goto label_1#1;
-
- label_1#1:
- assume Mem_0_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
- assume Mem_0_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
- assume Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
- assume Mem_0_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
- assume Mem_0_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
- assume cancelLockStatus_0 == cancelLockStatus_s_1;
- assume Res_0_COMPLETED == Res_s_1_COMPLETED;
- assume Res_0_LOCK == Res_s_1_LOCK;
- assert !errorReached;
- return;
-}
-
-
-
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var __storm_thread_done_0 : bool;
+var __storm_thread_done_1 : bool;
+var __storm_thread_done_2 : bool;
+
+var raiseException : bool;
+var errorReached : bool;
+var k : int;
+var __storm_atomic : bool;
+var __storm_init : bool;
+var tid : int;
+var tidCount : int;
+
+procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tidRet:int)
+{
+ tidRet := tid;
+ return;
+}
+
+
+procedure storm_context_0();
+procedure storm_context_1();
+
+procedure contextSwitch();
+modifies k;
+ensures __storm_atomic ==> old(k) == k;
+ensures(old(k) <= k);
+ensures(k < 2);
+
+
+
+// Memory model
+
+// Mutable
+var alloc:int;
+
+// Immutable
+
+var Mem_0_T.CancelRoutine__IRP : [int]int;
+var Mem_1_T.CancelRoutine__IRP : [int]int;
+var Mem_s_1_T.CancelRoutine__IRP : [int]int;
+var Mem_0_T.Cancel__IRP : [int]int;
+var Mem_1_T.Cancel__IRP : [int]int;
+var Mem_s_1_T.Cancel__IRP : [int]int;
+var Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
+var Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
+var Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
+var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_s_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_0_T.DeviceObject__IO_STACK_LOCATION : [int]int;
+var Mem_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
+var Mem_s_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
+
+
+// Field declarations
+
+
+// Type declarations
+
+
+// Field offset definitions
+
+function AssociatedIrp__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == x + 12);
+axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function COMMON_DATA__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelIrql__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
+axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelRoutine__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
+axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Cancel__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
+axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
+axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Context__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
+axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Control__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
+axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControllerData__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == x + 0);
+axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentLocation__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
+axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentStackLocation___unnamed_4_3c640f23(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == x + 0);
+axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceIoControl___unnamed_16_afe81cff(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == x + 0);
+axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceObject__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
+axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(int) returns (int);
+
+
+//axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == x + 2);
+axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == INT_ADD(x, 2));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Information__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
+axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Initialized_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == x + 323);
+axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == INT_ADD(x, 323));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function InterruptDescriptor_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == x + 300);
+axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == INT_ADD(x, 300));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function InterruptObject_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == x + 4);
+axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IoStatus__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
+axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IsKeyboard_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == x + 325);
+axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == INT_ADD(x, 325));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Item__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == x + 0);
+axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function KeyboardExtension__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == x + 8);
+axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function KeyboardPowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == x + 8);
+axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MajorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
+axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MinorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
+axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MouseExtension__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MousePowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == x + 4);
+axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function OutputBufferLength___unnamed_16_ae81ad04(int) returns (int);
+
+
+//axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == x + 0);
+axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function OutstandingPowerIrp_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == x + 44);
+axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == INT_ADD(x, 44));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Overlay___unnamed_48_e2bbfb0b(int) returns (int);
+
+
+//axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == x + 0);
+axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Parameters__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
+axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PendingReturned__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
+axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerCaps__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == x + 328);
+axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 328));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerFlags__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == x + 40);
+axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == INT_ADD(x, 40));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerSpinLock__CONTROLLER_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == x + 116);
+axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == INT_ADD(x, 116));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == x + 48);
+axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == INT_ADD(x, 48));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Power___unnamed_16_afe81cff(int) returns (int);
+
+
+//axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == x + 0);
+axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function RemoveLock_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == x + 20);
+axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ShutdownType_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == x + 56);
+axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == INT_ADD(x, 56));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ShutdownType___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == x + 12);
+axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Started_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == x + 326);
+axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == INT_ADD(x, 326));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function State___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == x + 8);
+axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Status___unnamed_4_d4b13373(int) returns (int);
+
+
+//axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == x + 0);
+axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == x + 332);
+axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 332));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == x + 368);
+axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 368));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemBuffer___unnamed_4_99f86ad5(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == x + 0);
+axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == x + 52);
+axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == INT_ADD(x, 52));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Tail__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
+axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function TopOfStack_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == x + 12);
+axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Type___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == x + 4);
+axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_12_41c62b26___unnamed_40_32307de2(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == x + 24);
+axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_4_3c640f23___unnamed_12_41c62b26(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == x + 8);
+axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_4_d4b13373__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+
+///////////////////////////////////
+// will be replaced by:
+// "//" when using bv mode
+// "" when using int mode
+// main reason is to avoid using bv for constants
+// or avoid translating lines that are complex or unsound
+//////////////////////////////////
+
+////////////////////////////////////////////
+/////// functions for int type /////////////
+// Theorem prover does not see INT_ADD etc.
+////////////////////////////////////////////
+function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
+function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
+
+function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
+function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
+function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
+function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
+function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
+function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
+
+
+////////////////////////////////////////////
+/////// functions for bv32 type /////////////
+// Theorem prover does not see INT_ADD etc.
+// we are treating unsigned ops now
+////////////////////////////////////////////
+function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
+function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
+
+function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
+
+//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
+//only enabled with bv theory
+// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
+
+//////////////////////////////////
+// Generic C Arithmetic operations
+/////////////////////////////////
+
+//Is this sound for bv32?
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+ axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+ INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
+
+//we just keep this axiom for size = 1
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
+
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
+
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
+
+function MULT(a:int, b:int) returns (int); // a*b
+//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+// Not sure if these axioms hold for BV too, just commet them for BV
+
+
+
+//uninterpreted binary op
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+
+//////////////////////////////////////////
+//// Bitwise ops (uninterpreted, used with int)
+//////////////////////////////////////////
+
+
+ function BIT_BAND(a:int, b:int) returns (x:int);
+
+
+ function BIT_BOR(a:int, b:int) returns (x:int);
+ function BIT_BXOR(a:int, b:int) returns (x:int);
+ function BIT_BNOT(a:int) returns (int);
+
+
+
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function PTR_NOT(a:int) returns (int);
+axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
+axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+
+function NewAlloc(x:int, y:int) returns (z:int);
+
+//Comments below make HAVOC_malloc deterministic
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+//requires obj_size >= 0;
+free requires INT_GEQ(obj_size, 0);
+modifies alloc;
+ensures new == old(alloc);
+//ensures alloc > new + obj_size;
+ensures INT_GT(alloc, INT_ADD(new, obj_size));
+//ensures alloc == NewAlloc(old(alloc), obj_size);
+
+
+
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+
+/*
+//bv functions
+function bv8ToInt(bv8) returns (int);
+function bv16ToInt(bv16) returns (int);
+function bv32ToInt(bv32) returns (int);
+function bv64ToInt(bv64) returns (int);
+
+function intToBv8(int) returns (bv8);
+function intToBv16(int) returns (bv16);
+function intToBv32(int) returns (bv32);
+function intToBv64(int) returns (bv64);
+
+axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
+axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
+axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
+axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
+
+axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
+axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
+axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
+axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
+*/
+
+
+
+var Res_0_COMPLETED : [int]int;
+var Res_1_COMPLETED : [int]int;
+var Res_s_1_COMPLETED : [int]int;
+var Res_KERNEL_SOURCE:[int]int;
+var Res_0_LOCK : [int]int;
+var Res_1_LOCK : [int]int;
+var Res_s_1_LOCK : [int]int;
+var Res_PROBED:[int]int;
+
+//Pointer constants
+
+//Function pointer constants
+
+
+const unique Globals : int;
+axiom(Globals != 0);
+const unique I8xPowerUpToD0Complete : int;
+axiom(I8xPowerUpToD0Complete != 0);
+const unique I8xReinitializeHardware : int;
+axiom(I8xReinitializeHardware != 0);
+const unique I8xSysButtonCancelRoutine : int;
+axiom(I8xSysButtonCancelRoutine != 0);
+var cancelLockStatus_0 : int;
+var cancelLockStatus_1 : int;
+var cancelLockStatus_s_1 : int;
+
+const unique hdevobj : int;
+axiom(hdevobj != 0);
+// the set of constants for 64 bit integers that Boogie doesn't parse
+const unique BOOGIE_LARGE_INT_2147483648:int;
+
+
+
+procedure ExFreePoolWithTag(a0:int, a1:int);
+
+
+
+procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
+
+
+
+procedure IoAllocateWorkItem(a0:int) returns (ret:int);
+
+
+
+procedure IoDisconnectInterrupt(a0:int);
+
+
+
+procedure IoFreeWorkItem(a0:int);
+
+
+
+procedure IoQueueWorkItem(a0:int, a1:int, a2:int, a3:int);
+
+
+
+procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
+
+
+
+procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure PoStartNextPowerIrp(a0:int);
+
+
+
+procedure __PREfastPagedCode();
+
+
+
+procedure __storm_assert_dummy();
+
+
+
+procedure __storm_atomic_begin_dummy();
+
+
+
+procedure __storm_atomic_end_dummy();
+
+
+
+procedure memcpy(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure memset(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+
+
+
+procedure storm_nondet() returns (ret:int);
+
+
+
+procedure storm_main();
+ free requires 0 < alloc;
+ free requires 0 < tid;
+ free requires tid < tidCount;
+ requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
+ modifies tidCount, alloc, raiseException, cancelLockStatus_s_1, __storm_init, __storm_atomic, errorReached, cancelLockStatus_0, cancelLockStatus_1, __storm_thread_done_2, __storm_thread_done_1, __storm_thread_done_0, tid, k, Res_0_COMPLETED, Res_1_COMPLETED, Res_KERNEL_SOURCE, Res_0_LOCK, Res_1_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_1_T.CancelRoutine__IRP, Mem_0_T.Cancel__IRP, Mem_1_T.Cancel__IRP, Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_1_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.DeviceObject__IO_STACK_LOCATION, Mem_1_T.DeviceObject__IO_STACK_LOCATION;
+
+
+
+implementation storm_main()
+{
+ var inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine_.1: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$: int, inline$I8xKeyboardGetSysButtonEvent$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1: int, k_old_1: int, k_old_0: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp: int, inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp: int, tid_old_1: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$: int, tid_old_0: int, inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation: int, inline$cancel$0$$Irp$1$64.17$cancel: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl: int, inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$: int, inline$cancel$0$$Irp$1$64.17$cancel_.1: int, $irp$1$91.7$storm_main: int, inline$storm_getThreadID$0$tidRet: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1: int, $result.storm_IoAllocateIrp$96.21$1$: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$: int, tidCount_old: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine_.1: int, inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp: int, inline$dispatch$0$$Irp$1$8.19$dispatch: int, $result.IoGetCurrentIrpStackLocation$99.38$2$: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$173.41$4$: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent: int, $irpSp$2$92.21$storm_main: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1: int, inline$dispatch$0$$Irp$1$8.19$dispatch_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int;
+
+ start#1:
+ assume Res_1_COMPLETED == Res_s_1_COMPLETED;
+ assume Res_1_LOCK == Res_s_1_LOCK;
+ assume Mem_1_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
+ assume Mem_1_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
+ assume Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
+ assume Mem_1_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
+ assume Mem_1_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
+ assume cancelLockStatus_1 == cancelLockStatus_s_1;
+ __storm_thread_done_0 := false;
+ __storm_thread_done_1 := false;
+ __storm_thread_done_2 := false;
+ k := 0;
+ errorReached := false;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto label_3#1;
+
+ label_3#1:
+ goto label_4#1;
+
+ label_4#1:
+ goto label_5#1;
+
+ label_5#1:
+ goto anon10_Then#1, anon10_Else#1;
+
+ anon10_Else#1:
+ assume k != 0;
+ goto anon11_Then#1, anon11_Else#1;
+
+ anon11_Else#1:
+ assume k != 1;
+ goto anon2#1;
+
+ anon11_Then#1:
+ assume k == 1;
+ cancelLockStatus_1 := 0;
+ goto anon2#1;
+
+ anon10_Then#1:
+ assume k == 0;
+ cancelLockStatus_0 := 0;
+ goto anon2#1;
+
+ anon2#1:
+ call contextSwitch();
+ goto label_6#1;
+
+ label_6#1:
+ goto inline$storm_IoAllocateIrp$0$Entry#1;
+
+ inline$storm_IoAllocateIrp$0$Entry#1:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1 := 2;
+ goto inline$storm_IoAllocateIrp$0$start#1;
+
+ inline$storm_IoAllocateIrp$0$start#1:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1;
+ goto inline$storm_IoAllocateIrp$0$label_3#1;
+
+ inline$storm_IoAllocateIrp$0$label_3#1:
+ goto inline$storm_IoAllocateIrp$0$label_4#1;
+
+ inline$storm_IoAllocateIrp$0$label_4#1:
+ goto inline$storm_IoAllocateIrp$0$label_5#1;
+
+ inline$storm_IoAllocateIrp$0$label_5#1:
+ call inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ := storm_nondet();
+ goto inline$storm_IoAllocateIrp$0$label_8#1;
+
+ inline$storm_IoAllocateIrp$0$label_8#1:
+ goto inline$storm_IoAllocateIrp$0$label_8_case_0#1, inline$storm_IoAllocateIrp$0$label_8_case_1#1;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_1#1:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ == 0;
+ goto inline$storm_IoAllocateIrp$0$label_10#1;
+
+ inline$storm_IoAllocateIrp$0$label_10#1:
+ __storm_atomic := true;
+ goto inline$storm_IoAllocateIrp$0$label_13#1;
+
+ inline$storm_IoAllocateIrp$0$label_13#1:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$ := __HAVOC_malloc(112);
+ goto inline$storm_IoAllocateIrp$0$label_16#1;
+
+ inline$storm_IoAllocateIrp$0$label_16#1:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$;
+ goto inline$storm_IoAllocateIrp$0$label_17#1;
+
+ inline$storm_IoAllocateIrp$0$label_17#1:
+ goto inline$storm_IoAllocateIrp$0$anon14_Then#1, inline$storm_IoAllocateIrp$0$anon14_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon14_Else#1:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon15_Then#1, inline$storm_IoAllocateIrp$0$anon15_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon15_Else#1:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon2#1;
+
+ inline$storm_IoAllocateIrp$0$anon15_Then#1:
+ assume k == 1;
+ Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon2#1;
+
+ inline$storm_IoAllocateIrp$0$anon14_Then#1:
+ assume k == 0;
+ Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon2#1;
+
+ inline$storm_IoAllocateIrp$0$anon2#1:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_18#1;
+
+ inline$storm_IoAllocateIrp$0$label_18#1:
+ goto inline$storm_IoAllocateIrp$0$anon16_Then#1, inline$storm_IoAllocateIrp$0$anon16_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon16_Else#1:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon17_Then#1, inline$storm_IoAllocateIrp$0$anon17_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon17_Else#1:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon5#1;
+
+ inline$storm_IoAllocateIrp$0$anon17_Then#1:
+ assume k == 1;
+ Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon5#1;
+
+ inline$storm_IoAllocateIrp$0$anon16_Then#1:
+ assume k == 0;
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon5#1;
+
+ inline$storm_IoAllocateIrp$0$anon5#1:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_19#1;
+
+ inline$storm_IoAllocateIrp$0$label_19#1:
+ goto inline$storm_IoAllocateIrp$0$anon18_Then#1, inline$storm_IoAllocateIrp$0$anon18_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon18_Else#1:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon19_Then#1, inline$storm_IoAllocateIrp$0$anon19_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon19_Else#1:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon8#1;
+
+ inline$storm_IoAllocateIrp$0$anon19_Then#1:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
+ goto inline$storm_IoAllocateIrp$0$anon8#1;
+
+ inline$storm_IoAllocateIrp$0$anon18_Then#1:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
+ goto inline$storm_IoAllocateIrp$0$anon8#1;
+
+ inline$storm_IoAllocateIrp$0$anon8#1:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_20#1;
+
+ inline$storm_IoAllocateIrp$0$label_20#1:
+ assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp);
+ goto inline$storm_IoAllocateIrp$0$label_21#1;
+
+ inline$storm_IoAllocateIrp$0$label_21#1:
+ inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp, 36);
+ goto inline$storm_IoAllocateIrp$0$label_22#1;
+
+ inline$storm_IoAllocateIrp$0$label_22#1:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
+ goto inline$storm_IoAllocateIrp$0$label_25#1;
+
+ inline$storm_IoAllocateIrp$0$label_25#1:
+ inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$;
+ goto inline$storm_IoAllocateIrp$0$label_26#1;
+
+ inline$storm_IoAllocateIrp$0$label_26#1:
+ goto inline$storm_IoAllocateIrp$0$anon20_Then#1, inline$storm_IoAllocateIrp$0$anon20_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon20_Else#1:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon21_Then#1, inline$storm_IoAllocateIrp$0$anon21_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon21_Else#1:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon11#1;
+
+ inline$storm_IoAllocateIrp$0$anon21_Then#1:
+ assume k == 1;
+ Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
+ goto inline$storm_IoAllocateIrp$0$anon11#1;
+
+ inline$storm_IoAllocateIrp$0$anon20_Then#1:
+ assume k == 0;
+ Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
+ goto inline$storm_IoAllocateIrp$0$anon11#1;
+
+ inline$storm_IoAllocateIrp$0$anon11#1:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_27#1;
+
+ inline$storm_IoAllocateIrp$0$label_27#1:
+ goto inline$IoGetNextIrpStackLocation$0$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$0$Entry#1:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
+ goto inline$IoGetNextIrpStackLocation$0$start#1;
+
+ inline$IoGetNextIrpStackLocation$0$start#1:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation := inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1;
+ goto inline$IoGetNextIrpStackLocation$0$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$0$anon3_Then#1, inline$IoGetNextIrpStackLocation$0$anon3_Else#1;
+
+ inline$IoGetNextIrpStackLocation$0$anon3_Else#1:
+ assume k != 0;
+ goto inline$IoGetNextIrpStackLocation$0$anon4_Then#1, inline$IoGetNextIrpStackLocation$0$anon4_Else#1;
+
+ inline$IoGetNextIrpStackLocation$0$anon4_Else#1:
+ assume k != 1;
+ goto inline$IoGetNextIrpStackLocation$0$anon2#1;
+
+ inline$IoGetNextIrpStackLocation$0$anon4_Then#1:
+ assume k == 1;
+ inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
+ goto inline$IoGetNextIrpStackLocation$0$anon2#1;
+
+ inline$IoGetNextIrpStackLocation$0$anon3_Then#1:
+ assume k == 0;
+ inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
+ goto inline$IoGetNextIrpStackLocation$0$anon2#1;
+
+ inline$IoGetNextIrpStackLocation$0$anon2#1:
+ call contextSwitch();
+ inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$ := MINUS_LEFT_PTR(inline$IoGetNextIrpStackLocation$0$myVar_0, 36, 1);
+ goto inline$IoGetNextIrpStackLocation$0$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$0$Return#1;
+
+ inline$IoGetNextIrpStackLocation$0$Return#1:
+ inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$ := inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$;
+ goto inline$storm_IoAllocateIrp$0$label_27$1#1;
+
+ inline$storm_IoAllocateIrp$0$label_27$1#1:
+ goto inline$storm_IoAllocateIrp$0$label_30#1;
+
+ inline$storm_IoAllocateIrp$0$label_30#1:
+ inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$;
+ goto inline$storm_IoAllocateIrp$0$label_31#1;
+
+ inline$storm_IoAllocateIrp$0$label_31#1:
+ goto inline$storm_IoAllocateIrp$0$label_32#1;
+
+ inline$storm_IoAllocateIrp$0$label_32#1:
+ goto inline$storm_IoAllocateIrp$0$label_33#1;
+
+ inline$storm_IoAllocateIrp$0$label_33#1:
+ goto inline$storm_IoAllocateIrp$0$anon22_Then#1, inline$storm_IoAllocateIrp$0$anon22_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon22_Else#1:
+ assume __storm_init;
+ goto inline$storm_IoAllocateIrp$0$anon13#1;
+
+ inline$storm_IoAllocateIrp$0$anon22_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAllocateIrp$0$anon13#1;
+
+ inline$storm_IoAllocateIrp$0$anon13#1:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_36#1;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_0#1:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ != 0;
+ goto inline$storm_IoAllocateIrp$0$label_9#1;
+
+ inline$storm_IoAllocateIrp$0$label_9#1:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0;
+ goto inline$storm_IoAllocateIrp$0$label_36#1;
+
+ inline$storm_IoAllocateIrp$0$label_36#1:
+ inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
+ goto inline$storm_IoAllocateIrp$0$label_1#1;
+
+ inline$storm_IoAllocateIrp$0$label_1#1:
+ goto inline$storm_IoAllocateIrp$0$Return#1;
+
+ inline$storm_IoAllocateIrp$0$Return#1:
+ $result.storm_IoAllocateIrp$96.21$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$;
+ goto label_6$1#1;
+
+ label_6$1#1:
+ goto label_9#1;
+
+ label_9#1:
+ $irp$1$91.7$storm_main := $result.storm_IoAllocateIrp$96.21$1$;
+ goto label_10#1;
+
+ label_10#1:
+ assume INT_NEQ($irp$1$91.7$storm_main, 0);
+ goto label_11#1;
+
+ label_11#1:
+ goto inline$IoSetNextIrpStackLocation$0$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$0$Entry#1:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1 := $irp$1$91.7$storm_main;
+ goto inline$IoSetNextIrpStackLocation$0$start#1;
+
+ inline$IoSetNextIrpStackLocation$0$start#1:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation := inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1;
+ goto inline$IoSetNextIrpStackLocation$0$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_3#1:
+ havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 1, 1);
+ goto inline$IoSetNextIrpStackLocation$0$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_4#1:
+ goto inline$IoSetNextIrpStackLocation$0$anon6_Then#1, inline$IoSetNextIrpStackLocation$0$anon6_Else#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon6_Else#1:
+ assume k != 0;
+ goto inline$IoSetNextIrpStackLocation$0$anon7_Then#1, inline$IoSetNextIrpStackLocation$0$anon7_Else#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon7_Else#1:
+ assume k != 1;
+ goto inline$IoSetNextIrpStackLocation$0$anon2#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon7_Then#1:
+ assume k == 1;
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
+ goto inline$IoSetNextIrpStackLocation$0$anon2#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon6_Then#1:
+ assume k == 0;
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
+ goto inline$IoSetNextIrpStackLocation$0$anon2#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon2#1:
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$0$anon8_Then#1, inline$IoSetNextIrpStackLocation$0$anon8_Else#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon8_Else#1:
+ assume k != 0;
+ goto inline$IoSetNextIrpStackLocation$0$anon9_Then#1, inline$IoSetNextIrpStackLocation$0$anon9_Else#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon9_Else#1:
+ assume k != 1;
+ goto inline$IoSetNextIrpStackLocation$0$anon5#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon9_Then#1:
+ assume k == 1;
+ Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
+ goto inline$IoSetNextIrpStackLocation$0$anon5#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon8_Then#1:
+ assume k == 0;
+ Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
+ goto inline$IoSetNextIrpStackLocation$0$anon5#1;
+
+ inline$IoSetNextIrpStackLocation$0$anon5#1:
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$0$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$0$Return#1;
+
+ inline$IoSetNextIrpStackLocation$0$Return#1:
+ goto label_11$1#1;
+
+ label_11$1#1:
+ goto label_14#1;
+
+ label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$0$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := $irp$1$91.7$storm_main;
+ goto inline$IoGetCurrentIrpStackLocation$0$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$start#1:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$0$anon3_Then#1, inline$IoGetCurrentIrpStackLocation$0$anon3_Else#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon3_Else#1:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$0$anon4_Then#1, inline$IoGetCurrentIrpStackLocation$0$anon4_Else#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon4_Else#1:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$0$anon2#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon4_Then#1:
+ assume k == 1;
+ inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ goto inline$IoGetCurrentIrpStackLocation$0$anon2#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon3_Then#1:
+ assume k == 0;
+ inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ goto inline$IoGetCurrentIrpStackLocation$0$anon2#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon2#1:
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$0$myVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$0$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$Return#1:
+ $result.IoGetCurrentIrpStackLocation$99.38$2$ := inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
+ goto label_14$1#1;
+
+ label_14$1#1:
+ goto label_17#1;
+
+ label_17#1:
+ $irpSp$2$92.21$storm_main := $result.IoGetCurrentIrpStackLocation$99.38$2$;
+ goto label_18#1;
+
+ label_18#1:
+ goto anon12_Then#1, anon12_Else#1;
+
+ anon12_Else#1:
+ assume k != 0;
+ goto anon13_Then#1, anon13_Else#1;
+
+ anon13_Else#1:
+ assume k != 1;
+ goto anon5#1;
+
+ anon13_Then#1:
+ assume k == 1;
+ Mem_1_T.DeviceObject__IO_STACK_LOCATION := Mem_1_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
+ goto anon5#1;
+
+ anon12_Then#1:
+ assume k == 0;
+ Mem_0_T.DeviceObject__IO_STACK_LOCATION := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
+ goto anon5#1;
+
+ anon5#1:
+ call contextSwitch();
+ goto label_19#1;
+
+ label_19#1:
+ goto label_20#1;
+
+ label_20#1:
+ k_old_0 := k;
+ tid_old_0 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$dispatch$0$Entry#1;
+
+ inline$dispatch$0$Entry#1:
+ inline$dispatch$0$$Irp$1$8.19$dispatch_.1 := $irp$1$91.7$storm_main;
+ goto inline$dispatch$0$start#1;
+
+ inline$dispatch$0$start#1:
+ inline$dispatch$0$$Irp$1$8.19$dispatch := inline$dispatch$0$$Irp$1$8.19$dispatch_.1;
+ goto inline$dispatch$0$label_3#1;
+
+ inline$dispatch$0$label_3#1:
+ goto inline$dispatch$0$label_4#1;
+
+ inline$dispatch$0$label_4#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$Entry#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$start#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$anon3_Then#1, inline$IoGetCurrentIrpStackLocation$1$anon3_Else#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon3_Else#1:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon4_Then#1, inline$IoGetCurrentIrpStackLocation$1$anon4_Else#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon4_Else#1:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon2#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon4_Then#1:
+ assume k == 1;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon2#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon3_Then#1:
+ assume k == 0;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon2#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon2#1:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$1$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$Return#1:
+ goto inline$dispatch$0$label_4$1#1;
+
+ inline$dispatch$0$label_4$1#1:
+ goto inline$dispatch$0$label_7#1;
+
+ inline$dispatch$0$label_7#1:
+ goto inline$dispatch$0$label_8#1;
+
+ inline$dispatch$0$label_8#1:
+ goto inline$I8xDeviceControl$0$Entry#1;
+
+ inline$I8xDeviceControl$0$Entry#1:
+ inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1 := inline$dispatch$0$$Irp$1$8.19$dispatch;
+ goto inline$I8xDeviceControl$0$start#1;
+
+ inline$I8xDeviceControl$0$start#1:
+ inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1;
+ goto inline$I8xDeviceControl$0$label_3#1;
+
+ inline$I8xDeviceControl$0$label_3#1:
+ goto inline$I8xDeviceControl$0$label_4#1;
+
+ inline$I8xDeviceControl$0$label_4#1:
+ call __PREfastPagedCode();
+ goto inline$I8xDeviceControl$0$label_7#1;
+
+ inline$I8xDeviceControl$0$label_7#1:
+ goto inline$I8xDeviceControl$0$anon3_Then#1, inline$I8xDeviceControl$0$anon3_Else#1;
+
+ inline$I8xDeviceControl$0$anon3_Else#1:
+ assume k != 0;
+ goto inline$I8xDeviceControl$0$anon4_Then#1, inline$I8xDeviceControl$0$anon4_Else#1;
+
+ inline$I8xDeviceControl$0$anon4_Else#1:
+ assume k != 1;
+ goto inline$I8xDeviceControl$0$anon2#1;
+
+ inline$I8xDeviceControl$0$anon4_Then#1:
+ assume k == 1;
+ goto inline$I8xDeviceControl$0$anon2#1;
+
+ inline$I8xDeviceControl$0$anon3_Then#1:
+ assume k == 0;
+ goto inline$I8xDeviceControl$0$anon2#1;
+
+ inline$I8xDeviceControl$0$anon2#1:
+ call contextSwitch();
+ goto inline$I8xDeviceControl$0$label_8#1;
+
+ inline$I8xDeviceControl$0$label_8#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Entry#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$Entry#1:
+ inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$start#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$start#1:
+ inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent_.1;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_3#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_3#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_4#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_4#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_5#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_5#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_6#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_6#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_7#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_7#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_8#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_8#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_9#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_9#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_9_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_9_false#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_9_false#1:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_10#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_10#1:
+ goto inline$storm_IoSetCancelRoutine$0$Entry#1;
+
+ inline$storm_IoSetCancelRoutine$0$Entry#1:
+ inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent;
+ inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine_.1 := I8xSysButtonCancelRoutine;
+ goto inline$storm_IoSetCancelRoutine$0$start#1;
+
+ inline$storm_IoSetCancelRoutine$0$start#1:
+ inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine_.1;
+ inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine_.1;
+ goto inline$storm_IoSetCancelRoutine$0$label_3#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_3#1:
+ goto inline$storm_IoSetCancelRoutine$0$label_4#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_4#1:
+ call inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$ := storm_nondet();
+ goto inline$storm_IoSetCancelRoutine$0$label_7#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_7#1:
+ goto inline$storm_IoSetCancelRoutine$0$label_7_true#1, inline$storm_IoSetCancelRoutine$0$label_7_false#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_7_false#1:
+ assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$ == 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_8#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_7_true#1:
+ assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$389.2$2$ != 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_11#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_11#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_12#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_12#1:
+ goto inline$storm_IoSetCancelRoutine$0$label_12_true#1, inline$storm_IoSetCancelRoutine$0$label_12_false#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_12_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_13#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_13#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCancelRoutine$0$label_1#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_12_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_8#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_8#1:
+ __storm_atomic := true;
+ goto inline$storm_IoSetCancelRoutine$0$label_16#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_16#1:
+ goto inline$storm_IoSetCancelRoutine$0$anon9_Then#1, inline$storm_IoSetCancelRoutine$0$anon9_Else#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon9_Else#1:
+ assume k != 0;
+ goto inline$storm_IoSetCancelRoutine$0$anon10_Then#1, inline$storm_IoSetCancelRoutine$0$anon10_Else#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon10_Else#1:
+ assume k != 1;
+ goto inline$storm_IoSetCancelRoutine$0$anon3#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon10_Then#1:
+ assume k == 1;
+ goto inline$storm_IoSetCancelRoutine$0$anon3#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon9_Then#1:
+ assume k == 0;
+ goto inline$storm_IoSetCancelRoutine$0$anon3#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon3#1:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_17#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_17#1:
+ goto inline$storm_IoSetCancelRoutine$0$anon11_Then#1, inline$storm_IoSetCancelRoutine$0$anon11_Else#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon11_Else#1:
+ assume k != 0;
+ goto inline$storm_IoSetCancelRoutine$0$anon12_Then#1, inline$storm_IoSetCancelRoutine$0$anon12_Else#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon12_Else#1:
+ assume k != 1;
+ goto inline$storm_IoSetCancelRoutine$0$anon6#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon12_Then#1:
+ assume k == 1;
+ Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine];
+ goto inline$storm_IoSetCancelRoutine$0$anon6#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon11_Then#1:
+ assume k == 0;
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$384.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$385.20$storm_IoSetCancelRoutine];
+ goto inline$storm_IoSetCancelRoutine$0$anon6#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon6#1:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_18#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_18#1:
+ goto inline$storm_IoSetCancelRoutine$0$anon13_Then#1, inline$storm_IoSetCancelRoutine$0$anon13_Else#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon13_Else#1:
+ assume __storm_init;
+ goto inline$storm_IoSetCancelRoutine$0$anon8#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon13_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoSetCancelRoutine$0$anon8#1;
+
+ inline$storm_IoSetCancelRoutine$0$anon8#1:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_21#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_21#1:
+ goto inline$storm_IoSetCancelRoutine$0$label_1#1;
+
+ inline$storm_IoSetCancelRoutine$0$label_1#1:
+ goto inline$storm_IoSetCancelRoutine$0$Return#1;
+
+ inline$storm_IoSetCancelRoutine$0$Return#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_18#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_18#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_18_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_18_false#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_18_false#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon8_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon8_Else#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon8_Else#1:
+ assume k != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon9_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon9_Else#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon9_Else#1:
+ assume k != 1;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon9_Then#1:
+ assume k == 1;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon8_Then#1:
+ assume k == 0;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon5#1:
+ call contextSwitch();
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_19#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_19#1:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent := 259;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_18_true#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon6_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon6_Else#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon6_Else#1:
+ assume k != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon7_Then#1, inline$I8xKeyboardGetSysButtonEvent$0$anon7_Else#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon7_Else#1:
+ assume k != 1;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon2#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon7_Then#1:
+ assume k == 1;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon2#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon6_Then#1:
+ assume k == 0;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon2#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon2#1:
+ call contextSwitch();
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_20#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_20#1:
+ call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$ := storm_nondet();
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_23#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_23#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_23_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_23_false#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_23_false#1:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$ == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_24#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_24#1:
+ call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$173.41$4$ := storm_nondet();
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_28#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_28#1:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$173.41$4$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_23_true#1:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$162.31$3$ != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_27#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_27#1:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741536;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_9_true#1:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_13#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_13_true#1, inline$I8xKeyboardGetSysButtonEvent$0$label_13_false#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_13_false#1:
+ assume !INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent, 259);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_13_true#1:
+ assume INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$5$144.24$I8xKeyboardGetSysButtonEvent, 259);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_15#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15#1:
+ goto inline$I8xCompleteSysButtonIrp$0$Entry#1;
+
+ inline$I8xCompleteSysButtonIrp$0$Entry#1:
+ inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$140.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$I8xCompleteSysButtonIrp$0$start#1;
+
+ inline$I8xCompleteSysButtonIrp$0$start#1:
+ inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1;
+ goto inline$I8xCompleteSysButtonIrp$0$label_3#1;
+
+ inline$I8xCompleteSysButtonIrp$0$label_3#1:
+ goto inline$storm_IoCompleteRequest$0$Entry#1;
+
+ inline$storm_IoCompleteRequest$0$Entry#1:
+ inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp;
+ goto inline$storm_IoCompleteRequest$0$start#1;
+
+ inline$storm_IoCompleteRequest$0$start#1:
+ inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$0$label_3#1;
+
+ inline$storm_IoCompleteRequest$0$label_3#1:
+ call inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$0$label_6#1;
+
+ inline$storm_IoCompleteRequest$0$label_6#1:
+ goto inline$storm_IoCompleteRequest$0$label_6_true#1, inline$storm_IoCompleteRequest$0$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$0$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#1;
+
+ inline$storm_IoCompleteRequest$0$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$0$label_8#1;
+
+ inline$storm_IoCompleteRequest$0$label_8#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_9#1;
+
+ inline$storm_IoCompleteRequest$0$label_9#1:
+ goto inline$storm_IoCompleteRequest$0$label_9_true#1, inline$storm_IoCompleteRequest$0$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$0$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$0$label_10#1;
+
+ inline$storm_IoCompleteRequest$0$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$0$label_1#1;
+
+ inline$storm_IoCompleteRequest$0$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#1;
+
+ inline$storm_IoCompleteRequest$0$label_7#1:
+ goto inline$storm_IoCompleteRequest$0$anon4_Then#1, inline$storm_IoCompleteRequest$0$anon4_Else#1;
+
+ inline$storm_IoCompleteRequest$0$anon4_Else#1:
+ assume k != 0;
+ goto inline$storm_IoCompleteRequest$0$anon5_Then#1, inline$storm_IoCompleteRequest$0$anon5_Else#1;
+
+ inline$storm_IoCompleteRequest$0$anon5_Else#1:
+ assume k != 1;
+ goto inline$storm_IoCompleteRequest$0$anon2#1;
+
+ inline$storm_IoCompleteRequest$0$anon5_Then#1:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$0$anon2#1;
+
+ inline$storm_IoCompleteRequest$0$anon4_Then#1:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$0$anon2#1;
+
+ inline$storm_IoCompleteRequest$0$anon2#1:
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_1#1;
+
+ inline$storm_IoCompleteRequest$0$label_1#1:
+ goto inline$storm_IoCompleteRequest$0$Return#1;
+
+ inline$storm_IoCompleteRequest$0$Return#1:
+ goto inline$I8xCompleteSysButtonIrp$0$label_3$1#1;
+
+ inline$I8xCompleteSysButtonIrp$0$label_3$1#1:
+ goto inline$I8xCompleteSysButtonIrp$0$label_1#1;
+
+ inline$I8xCompleteSysButtonIrp$0$label_1#1:
+ goto inline$I8xCompleteSysButtonIrp$0$Return#1;
+
+ inline$I8xCompleteSysButtonIrp$0$Return#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_15$1#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15$1#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_14#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_1#1:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#1;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$Return#1:
+ goto inline$I8xDeviceControl$0$label_8$1#1;
+
+ inline$I8xDeviceControl$0$label_8$1#1:
+ goto inline$I8xDeviceControl$0$label_11#1;
+
+ inline$I8xDeviceControl$0$label_11#1:
+ goto inline$I8xDeviceControl$0$label_1#1;
+
+ inline$I8xDeviceControl$0$label_1#1:
+ goto inline$I8xDeviceControl$0$Return#1;
+
+ inline$I8xDeviceControl$0$Return#1:
+ goto inline$dispatch$0$label_8$1#1;
+
+ inline$dispatch$0$label_8$1#1:
+ goto inline$dispatch$0$label_11#1;
+
+ inline$dispatch$0$label_11#1:
+ goto inline$dispatch$0$label_1#1;
+
+ inline$dispatch$0$label_1#1:
+ goto inline$dispatch$0$Return#1;
+
+ inline$dispatch$0$Return#1:
+ goto label_20$1#1;
+
+ label_20$1#1:
+ goto anon14_Then#1, anon14_Else#1;
+
+ anon14_Else#1:
+ assume !(errorReached || !raiseException);
+ goto anon7#1;
+
+ anon14_Then#1:
+ assume errorReached || !raiseException;
+ __storm_thread_done_1 := true;
+ goto anon7#1;
+
+ anon7#1:
+ k := k_old_0;
+ tid := tid_old_0;
+ goto label_23#1;
+
+ label_23#1:
+ goto label_24#1;
+
+ label_24#1:
+ k_old_1 := k;
+ tid_old_1 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$cancel$0$Entry#1;
+
+ inline$cancel$0$Entry#1:
+ inline$cancel$0$$Irp$1$64.17$cancel_.1 := $irp$1$91.7$storm_main;
+ goto inline$cancel$0$start#1;
+
+ inline$cancel$0$start#1:
+ inline$cancel$0$$Irp$1$64.17$cancel := inline$cancel$0$$Irp$1$64.17$cancel_.1;
+ goto inline$cancel$0$label_3#1;
+
+ inline$cancel$0$label_3#1:
+ goto inline$storm_IoCancelIrp$0$Entry#1;
+
+ inline$storm_IoCancelIrp$0$Entry#1:
+ inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1 := inline$cancel$0$$Irp$1$64.17$cancel;
+ goto inline$storm_IoCancelIrp$0$start#1;
+
+ inline$storm_IoCancelIrp$0$start#1:
+ inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1;
+ goto inline$storm_IoCancelIrp$0$label_3#1;
+
+ inline$storm_IoCancelIrp$0$label_3#1:
+ goto inline$storm_IoCancelIrp$0$label_4#1;
+
+ inline$storm_IoCancelIrp$0$label_4#1:
+ goto inline$storm_IoCancelIrp$0$anon12_Then#1, inline$storm_IoCancelIrp$0$anon12_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon12_Else#1:
+ assume k != 0;
+ goto inline$storm_IoCancelIrp$0$anon13_Then#1, inline$storm_IoCancelIrp$0$anon13_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon13_Else#1:
+ assume k != 1;
+ goto inline$storm_IoCancelIrp$0$anon2#1;
+
+ inline$storm_IoCancelIrp$0$anon13_Then#1:
+ assume k == 1;
+ Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
+ goto inline$storm_IoCancelIrp$0$anon2#1;
+
+ inline$storm_IoCancelIrp$0$anon12_Then#1:
+ assume k == 0;
+ Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
+ goto inline$storm_IoCancelIrp$0$anon2#1;
+
+ inline$storm_IoCancelIrp$0$anon2#1:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_5#1;
+
+ inline$storm_IoCancelIrp$0$label_5#1:
+ __storm_atomic := true;
+ goto inline$storm_IoCancelIrp$0$label_8#1;
+
+ inline$storm_IoCancelIrp$0$label_8#1:
+ goto inline$storm_IoCancelIrp$0$anon14_Then#1, inline$storm_IoCancelIrp$0$anon14_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon14_Else#1:
+ assume k != 0;
+ goto inline$storm_IoCancelIrp$0$anon15_Then#1, inline$storm_IoCancelIrp$0$anon15_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon15_Else#1:
+ assume k != 1;
+ goto inline$storm_IoCancelIrp$0$anon5#1;
+
+ inline$storm_IoCancelIrp$0$anon15_Then#1:
+ assume k == 1;
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
+ goto inline$storm_IoCancelIrp$0$anon5#1;
+
+ inline$storm_IoCancelIrp$0$anon14_Then#1:
+ assume k == 0;
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
+ goto inline$storm_IoCancelIrp$0$anon5#1;
+
+ inline$storm_IoCancelIrp$0$anon5#1:
+ call contextSwitch();
+ inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$myVar_0;
+ goto inline$storm_IoCancelIrp$0$label_9#1;
+
+ inline$storm_IoCancelIrp$0$label_9#1:
+ goto inline$storm_IoCancelIrp$0$anon16_Then#1, inline$storm_IoCancelIrp$0$anon16_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon16_Else#1:
+ assume k != 0;
+ goto inline$storm_IoCancelIrp$0$anon17_Then#1, inline$storm_IoCancelIrp$0$anon17_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon17_Else#1:
+ assume k != 1;
+ goto inline$storm_IoCancelIrp$0$anon8#1;
+
+ inline$storm_IoCancelIrp$0$anon17_Then#1:
+ assume k == 1;
+ Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
+ goto inline$storm_IoCancelIrp$0$anon8#1;
+
+ inline$storm_IoCancelIrp$0$anon16_Then#1:
+ assume k == 0;
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
+ goto inline$storm_IoCancelIrp$0$anon8#1;
+
+ inline$storm_IoCancelIrp$0$anon8#1:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_10#1;
+
+ inline$storm_IoCancelIrp$0$label_10#1:
+ goto inline$storm_IoCancelIrp$0$anon18_Then#1, inline$storm_IoCancelIrp$0$anon18_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon18_Else#1:
+ assume __storm_init;
+ goto inline$storm_IoCancelIrp$0$anon10#1;
+
+ inline$storm_IoCancelIrp$0$anon18_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoCancelIrp$0$anon10#1;
+
+ inline$storm_IoCancelIrp$0$anon10#1:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_13#1;
+
+ inline$storm_IoCancelIrp$0$label_13#1:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
+ assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
+ goto inline$storm_IoAcquireCancelSpinLock$0$Entry#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Entry#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$start#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$start#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_3#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_3#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_4#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_4#1:
+ goto inline$storm_getThreadID$0$Entry#1;
+
+ inline$storm_getThreadID$0$Entry#1:
+ goto inline$storm_getThreadID$0$anon0#1;
+
+ inline$storm_getThreadID$0$anon0#1:
+ inline$storm_getThreadID$0$tidRet := tid;
+ goto inline$storm_getThreadID$0$Return#1;
+
+ inline$storm_getThreadID$0$Return#1:
+ inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$ := inline$storm_getThreadID$0$tidRet;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_4$1#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_4$1#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_7#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_7#1:
+ inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock := inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_8#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_8#1:
+ __storm_atomic := true;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_11#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_11_true#1, inline$storm_IoAcquireCancelSpinLock$0$label_11_false#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11_false#1:
+ assume k == 0 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
+ assume k == 1 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_12#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_1#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11_true#1:
+ assume k == 0 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
+ assume k == 1 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_15#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_15#1:
+ assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
+ assume k == 1 ==> INT_EQ(cancelLockStatus_1, 0);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_16#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_16#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#1:
+ assume k != 0;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon7_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon7_Else#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon7_Else#1:
+ assume k != 1;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon7_Then#1:
+ assume k == 1;
+ cancelLockStatus_1 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#1:
+ assume k == 0;
+ cancelLockStatus_0 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon3#1:
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_17#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_17#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#1:
+ assume __storm_init;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon5#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon5#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon5#1:
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_1#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_1#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$Return#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Return#1:
+ goto inline$storm_IoCancelIrp$0$label_13$1#1;
+
+ inline$storm_IoCancelIrp$0$label_13$1#1:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ goto inline$storm_IoCancelIrp$0$label_16#1;
+
+ inline$storm_IoCancelIrp$0$label_16#1:
+ goto inline$storm_IoCancelIrp$0$label_16_true#1, inline$storm_IoCancelIrp$0$label_16_false#1;
+
+ inline$storm_IoCancelIrp$0$label_16_false#1:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == 0;
+ goto inline$storm_IoCancelIrp$0$label_17#1;
+
+ inline$storm_IoCancelIrp$0$label_17#1:
+ goto inline$storm_IoCancelIrp$0$label_1#1;
+
+ inline$storm_IoCancelIrp$0$label_16_true#1:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp != 0;
+ goto inline$storm_IoCancelIrp$0$label_18#1;
+
+ inline$storm_IoCancelIrp$0$label_18#1:
+ goto inline$storm_IoCancelIrp$0$label_19#1;
+
+ inline$storm_IoCancelIrp$0$label_19#1:
+ call inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ := storm_nondet();
+ goto inline$storm_IoCancelIrp$0$label_22#1;
+
+ inline$storm_IoCancelIrp$0$label_22#1:
+ goto inline$storm_IoCancelIrp$0$label_22_true#1, inline$storm_IoCancelIrp$0$label_22_false#1;
+
+ inline$storm_IoCancelIrp$0$label_22_false#1:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ == 0;
+ goto inline$storm_IoCancelIrp$0$label_23#1;
+
+ inline$storm_IoCancelIrp$0$label_22_true#1:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ != 0;
+ goto inline$storm_IoCancelIrp$0$label_24#1;
+
+ inline$storm_IoCancelIrp$0$label_24#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_25#1;
+
+ inline$storm_IoCancelIrp$0$label_25#1:
+ goto inline$storm_IoCancelIrp$0$label_25_true#1, inline$storm_IoCancelIrp$0$label_25_false#1;
+
+ inline$storm_IoCancelIrp$0$label_25_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCancelIrp$0$label_26#1;
+
+ inline$storm_IoCancelIrp$0$label_26#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCancelIrp$0$label_1#1;
+
+ inline$storm_IoCancelIrp$0$label_25_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCancelIrp$0$label_23#1;
+
+ inline$storm_IoCancelIrp$0$label_23#1:
+ goto inline$storm_IoCancelIrp$0$label_1#1;
+
+ inline$storm_IoCancelIrp$0$label_1#1:
+ goto inline$storm_IoCancelIrp$0$Return#1;
+
+ inline$storm_IoCancelIrp$0$Return#1:
+ goto inline$cancel$0$label_3$1#1;
+
+ inline$cancel$0$label_3$1#1:
+ goto inline$cancel$0$label_1#1;
+
+ inline$cancel$0$label_1#1:
+ goto inline$cancel$0$Return#1;
+
+ inline$cancel$0$Return#1:
+ goto label_24$1#1;
+
+ label_24$1#1:
+ goto anon15_Then#1, anon15_Else#1;
+
+ anon15_Else#1:
+ assume !(errorReached || !raiseException);
+ goto anon9#1;
+
+ anon15_Then#1:
+ assume errorReached || !raiseException;
+ __storm_thread_done_2 := true;
+ goto anon9#1;
+
+ anon9#1:
+ k := k_old_1;
+ tid := tid_old_1;
+ goto label_1#1;
+
+ label_1#1:
+ assume Mem_0_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
+ assume Mem_0_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
+ assume Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
+ assume Mem_0_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
+ assume Mem_0_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
+ assume cancelLockStatus_0 == cancelLockStatus_s_1;
+ assume Res_0_COMPLETED == Res_s_1_COMPLETED;
+ assume Res_0_LOCK == Res_s_1_LOCK;
+ assert !errorReached;
+ return;
+}
+
+
+
diff --git a/Test/livevars/daytona_bug2_ioctl_example_1.bpl b/Test/livevars/daytona_bug2_ioctl_example_1.bpl
index c752df09..e1637937 100644
--- a/Test/livevars/daytona_bug2_ioctl_example_1.bpl
+++ b/Test/livevars/daytona_bug2_ioctl_example_1.bpl
@@ -1,4012 +1,4012 @@
-// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var __storm_thread_done_0 : bool;
-var __storm_thread_done_1 : bool;
-var __storm_thread_done_2 : bool;
-var __storm_thread_done_3 : bool;
-
-var raiseException : bool;
-var errorReached : bool;
-var k : int;
-var __storm_atomic : bool;
-var __storm_init : bool;
-var tid : int;
-var tidCount : int;
-
-procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tidRet:int)
-{
- tidRet := tid;
- return;
-}
-
-
-procedure storm_context_0();
-
-procedure contextSwitch();
-modifies k;
-ensures __storm_atomic ==> old(k) == k;
-ensures(old(k) <= k);
-ensures(k < 1);
-
-
-
-// Memory model
-
-// Mutable
-var alloc:int;
-
-// Immutable
-
-var Mem_0_T.CancelRoutine__IRP : [int]int;
-var Mem_0_T.Cancel__IRP : [int]int;
-var Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
-var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_0_T.DeviceObject__IO_STACK_LOCATION : [int]int;
-
-
-// Field declarations
-
-
-// Type declarations
-
-
-// Field offset definitions
-
-function AssociatedIrp__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == x + 12);
-axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function COMMON_DATA__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelIrql__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
-axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelRoutine__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
-axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Cancel__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
-axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
-axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Context__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
-axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Control__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
-axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControllerData__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == x + 0);
-axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentLocation__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
-axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentStackLocation___unnamed_4_3c640f23(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == x + 0);
-axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceIoControl___unnamed_16_afe81cff(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == x + 0);
-axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceObject__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
-axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(int) returns (int);
-
-
-//axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == x + 2);
-axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == INT_ADD(x, 2));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Information__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
-axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Initialized_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == x + 323);
-axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == INT_ADD(x, 323));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function InterruptDescriptor_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == x + 300);
-axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == INT_ADD(x, 300));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function InterruptObject_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == x + 4);
-axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IoControlCode___unnamed_16_ae81ad04(int) returns (int);
-
-
-//axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == x + 8);
-axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IoStatus__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
-axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Irp__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == x + 8);
-axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IsKeyboard_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == x + 325);
-axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == INT_ADD(x, 325));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Item__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == x + 0);
-axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Item__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == x + 0);
-axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function KeyboardExtension__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == x + 8);
-axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function KeyboardPowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == x + 8);
-axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MajorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
-axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MakeCode__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == x + 4);
-axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MinorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
-axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MouseExtension__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MousePowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == x + 4);
-axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function OutputBufferLength___unnamed_16_ae81ad04(int) returns (int);
-
-
-//axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == x + 0);
-axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function OutstandingPowerIrp_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == x + 44);
-axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == INT_ADD(x, 44));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Overlay___unnamed_48_e2bbfb0b(int) returns (int);
-
-
-//axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == x + 0);
-axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Parameters__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
-axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PendingReturned__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
-axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PnpDeviceState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == x + 316);
-axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == INT_ADD(x, 316));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerCaps__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == x + 328);
-axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 328));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerEvent__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == x + 329);
-axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 329));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerFlags__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == x + 40);
-axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == INT_ADD(x, 40));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerSpinLock__CONTROLLER_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == x + 116);
-axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == INT_ADD(x, 116));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == x + 48);
-axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == INT_ADD(x, 48));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Power___unnamed_16_afe81cff(int) returns (int);
-
-
-//axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == x + 0);
-axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function RemoveLock_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == x + 20);
-axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Self_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == x + 0);
-axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ShutdownType_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == x + 56);
-axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == INT_ADD(x, 56));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ShutdownType___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == x + 12);
-axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Started_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == x + 326);
-axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == INT_ADD(x, 326));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function State___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == x + 8);
-axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Status___unnamed_4_d4b13373(int) returns (int);
-
-
-//axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == x + 0);
-axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == x + 332);
-axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 332));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == x + 368);
-axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 368));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemBuffer___unnamed_4_99f86ad5(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == x + 0);
-axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == x + 52);
-axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == INT_ADD(x, 52));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Tail__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
-axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function TopOfStack_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == x + 12);
-axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Type___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == x + 4);
-axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_12_41c62b26___unnamed_40_32307de2(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == x + 24);
-axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_4_3c640f23___unnamed_12_41c62b26(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == x + 8);
-axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_4_d4b13373__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-
-///////////////////////////////////
-// will be replaced by:
-// "//" when using bv mode
-// "" when using int mode
-// main reason is to avoid using bv for constants
-// or avoid translating lines that are complex or unsound
-//////////////////////////////////
-
-////////////////////////////////////////////
-/////// functions for int type /////////////
-// Theorem prover does not see INT_ADD etc.
-////////////////////////////////////////////
-function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
-function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
-
-function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
-function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
-function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
-function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
-function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
-function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
-
-
-////////////////////////////////////////////
-/////// functions for bv32 type /////////////
-// Theorem prover does not see INT_ADD etc.
-// we are treating unsigned ops now
-////////////////////////////////////////////
-function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
-function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
-
-function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
-
-//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
-//only enabled with bv theory
-// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
-
-//////////////////////////////////
-// Generic C Arithmetic operations
-/////////////////////////////////
-
-//Is this sound for bv32?
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
- axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
- INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
-
-//we just keep this axiom for size = 1
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
-
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
-
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
-
-function MULT(a:int, b:int) returns (int); // a*b
-//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-// Not sure if these axioms hold for BV too, just commet them for BV
-
-
-
-//uninterpreted binary op
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-
-//////////////////////////////////////////
-//// Bitwise ops (uninterpreted, used with int)
-//////////////////////////////////////////
-
-
- function BIT_BAND(a:int, b:int) returns (x:int);
-
-
- function BIT_BOR(a:int, b:int) returns (x:int);
- function BIT_BXOR(a:int, b:int) returns (x:int);
- function BIT_BNOT(a:int) returns (int);
-
-
-
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function PTR_NOT(a:int) returns (int);
-axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
-axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-
-function NewAlloc(x:int, y:int) returns (z:int);
-
-//Comments below make HAVOC_malloc deterministic
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-//requires obj_size >= 0;
-free requires INT_GEQ(obj_size, 0);
-modifies alloc;
-ensures new == old(alloc);
-//ensures alloc > new + obj_size;
-ensures INT_GT(alloc, INT_ADD(new, obj_size));
-//ensures alloc == NewAlloc(old(alloc), obj_size);
-
-
-
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-
-/*
-//bv functions
-function bv8ToInt(bv8) returns (int);
-function bv16ToInt(bv16) returns (int);
-function bv32ToInt(bv32) returns (int);
-function bv64ToInt(bv64) returns (int);
-
-function intToBv8(int) returns (bv8);
-function intToBv16(int) returns (bv16);
-function intToBv32(int) returns (bv32);
-function intToBv64(int) returns (bv64);
-
-axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
-axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
-axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
-axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
-
-axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
-axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
-axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
-axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
-*/
-
-
-
-var Res_0_COMPLETED : [int]int;
-var Res_KERNEL_SOURCE:[int]int;
-var Res_0_LOCK : [int]int;
-var Res_PROBED:[int]int;
-
-//Pointer constants
-
-//Function pointer constants
-
-
-const unique Globals : int;
-axiom(Globals != 0);
-const unique I8xCompleteSysButtonEventWorker : int;
-axiom(I8xCompleteSysButtonEventWorker != 0);
-const unique I8xPowerUpToD0Complete : int;
-axiom(I8xPowerUpToD0Complete != 0);
-const unique I8xReinitializeHardware : int;
-axiom(I8xReinitializeHardware != 0);
-const unique I8xSysButtonCancelRoutine : int;
-axiom(I8xSysButtonCancelRoutine != 0);
-var cancelLockStatus_0 : int;
-
-const unique hdevobj : int;
-axiom(hdevobj != 0);
-// the set of constants for 64 bit integers that Boogie doesn't parse
-const unique BOOGIE_LARGE_INT_2147483648:int;
-
-
-
-procedure DRIVER_CANCEL(a0:int, a1:int);
-
-
-
-procedure ExFreePoolWithTag(a0:int, a1:int);
-
-
-
-procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
-
-
-
-procedure IoAllocateWorkItem(a0:int) returns (ret:int);
-
-
-
-procedure IoDisconnectInterrupt(a0:int);
-
-
-
-procedure IoFreeWorkItem(a0:int);
-
-
-
-procedure IoQueueWorkItem(a0:int, a1:int, a2:int, a3:int);
-
-
-
-procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
-
-
-
-procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure PoStartNextPowerIrp(a0:int);
-
-
-
-procedure __PREfastPagedCode();
-
-
-
-procedure __storm_assert_dummy();
-
-
-
-procedure __storm_atomic_begin_dummy();
-
-
-
-procedure __storm_atomic_end_dummy();
-
-
-
-procedure memcpy(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure memset(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-
-
-
-procedure storm_nondet() returns (ret:int);
-
-
-
-procedure storm_main();
- free requires 0 < alloc;
- free requires 0 < tid;
- free requires tid < tidCount;
- requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
- modifies tidCount, alloc, raiseException, __storm_init, __storm_atomic, errorReached, cancelLockStatus_0, __storm_thread_done_3, __storm_thread_done_2, __storm_thread_done_1, __storm_thread_done_0, tid, k, Res_0_COMPLETED, Res_KERNEL_SOURCE, Res_0_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_0_T.Cancel__IRP, Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.DeviceObject__IO_STACK_LOCATION;
-
-
-
-implementation storm_main()
-{
- var inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, $irpSp$2$92.21$storm_main: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp: int, inline$storm_getThreadID$5$tidRet: int, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$: int, inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$: int, inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$5$myVar_0: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1: int, inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, $result.IoGetCurrentIrpStackLocation$99.38$2$: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$dispatch$0$$Irp$1$8.19$dispatch_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$storm_getThreadID$0$tidRet: int, inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver: int, inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$: int, inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0: int, inline$storm_getThreadID$1$tidRet: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$cancel$0$$Irp$1$64.17$cancel: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$cancel$0$$Irp$1$64.17$cancel_.1: int, $irp$1$91.7$storm_main: int, inline$myInitDriver$0$myNondetVar_0: int, inline$myInitDriver$0$myNondetVar_1: int, inline$storm_getThreadID$4$tidRet: int, inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$: int, inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$: int, inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$: int, inline$I8xSysButtonCancelRoutine$0$myVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest: int, k_old_2: int, inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine: int, inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$: int, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$: int, inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1: int, k_old_1: int, k_old_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$myVar_0: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1: int, inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine: int, inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_1: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_0: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$: int, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$: int, inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0: int, inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine: int, inline$I8xDeviceControl$0$myVar_0: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_IoSetCancelRoutine$1$myVar_0: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1: int, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1: int, inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock: int, inline$storm_getThreadID$3$tidRet: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$: int, inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock: int, inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$: int, inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_getThreadID$2$tidRet: int, inline$I8xDeviceControl$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation: int, inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent: int, inline$dispatch$0$$Irp$1$8.19$dispatch: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp: int, $result.storm_IoAllocateIrp$96.21$1$: int, tidCount_old: int, inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1: int, inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xCompleteSysButtonIrp$0$myNondetVar_0: int, inline$myInitDriver$0$myVar_0: int, tid_old_1: int, tid_old_0: int, tid_old_2: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1: int, inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$: int, inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$: int;
-
- start#2:
- __storm_thread_done_0 := false;
- __storm_thread_done_1 := false;
- __storm_thread_done_2 := false;
- __storm_thread_done_3 := false;
- k := 0;
- errorReached := false;
- __storm_atomic := false;
- __storm_init := false;
- goto label_3#2;
-
- label_3#2:
- goto label_4#2;
-
- label_4#2:
- goto label_5#2;
-
- label_5#2:
- cancelLockStatus_0 := 0;
- call contextSwitch();
- goto label_6#2;
-
- label_6#2:
- goto inline$storm_IoAllocateIrp$0$Entry#2;
-
- inline$storm_IoAllocateIrp$0$Entry#2:
- inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1 := 2;
- goto inline$storm_IoAllocateIrp$0$start#2;
-
- inline$storm_IoAllocateIrp$0$start#2:
- inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1;
- goto inline$storm_IoAllocateIrp$0$label_3#2;
-
- inline$storm_IoAllocateIrp$0$label_3#2:
- goto inline$storm_IoAllocateIrp$0$label_4#2;
-
- inline$storm_IoAllocateIrp$0$label_4#2:
- goto inline$storm_IoAllocateIrp$0$label_5#2;
-
- inline$storm_IoAllocateIrp$0$label_5#2:
- call inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ := storm_nondet();
- goto inline$storm_IoAllocateIrp$0$label_8#2;
-
- inline$storm_IoAllocateIrp$0$label_8#2:
- goto inline$storm_IoAllocateIrp$0$label_8_case_0#2, inline$storm_IoAllocateIrp$0$label_8_case_1#2;
-
- inline$storm_IoAllocateIrp$0$label_8_case_1#2:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ == 0;
- goto inline$storm_IoAllocateIrp$0$label_10#2;
-
- inline$storm_IoAllocateIrp$0$label_10#2:
- __storm_atomic := true;
- goto inline$storm_IoAllocateIrp$0$label_13#2;
-
- inline$storm_IoAllocateIrp$0$label_13#2:
- call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$ := __HAVOC_malloc(112);
- goto inline$storm_IoAllocateIrp$0$label_16#2;
-
- inline$storm_IoAllocateIrp$0$label_16#2:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$;
- goto inline$storm_IoAllocateIrp$0$label_17#2;
-
- inline$storm_IoAllocateIrp$0$label_17#2:
- Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_18#2;
-
- inline$storm_IoAllocateIrp$0$label_18#2:
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_19#2;
-
- inline$storm_IoAllocateIrp$0$label_19#2:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_20#2;
-
- inline$storm_IoAllocateIrp$0$label_20#2:
- havoc raiseException;
- goto inline$storm_IoAllocateIrp$0$anon6_Then#2, inline$storm_IoAllocateIrp$0$anon6_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon6_Else#2:
- assume !raiseException;
- goto inline$storm_IoAllocateIrp$0$anon1#2;
-
- inline$storm_IoAllocateIrp$0$anon1#2:
- assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp);
- goto inline$storm_IoAllocateIrp$0$label_21#2;
-
- inline$storm_IoAllocateIrp$0$label_21#2:
- inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp, 36);
- goto inline$storm_IoAllocateIrp$0$label_22#2;
-
- inline$storm_IoAllocateIrp$0$label_22#2:
- call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
- goto inline$storm_IoAllocateIrp$0$label_25#2;
-
- inline$storm_IoAllocateIrp$0$label_25#2:
- inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$;
- goto inline$storm_IoAllocateIrp$0$label_26#2;
-
- inline$storm_IoAllocateIrp$0$label_26#2:
- Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_27#2;
-
- inline$storm_IoAllocateIrp$0$label_27#2:
- goto inline$IoGetNextIrpStackLocation$0$Entry#2;
-
- inline$IoGetNextIrpStackLocation$0$Entry#2:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
- goto inline$IoGetNextIrpStackLocation$0$start#2;
-
- inline$IoGetNextIrpStackLocation$0$start#2:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation := inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1;
- goto inline$IoGetNextIrpStackLocation$0$label_3#2;
-
- inline$IoGetNextIrpStackLocation$0$label_3#2:
- inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
- call contextSwitch();
- inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$ := MINUS_LEFT_PTR(inline$IoGetNextIrpStackLocation$0$myVar_0, 36, 1);
- goto inline$IoGetNextIrpStackLocation$0$label_1#2;
-
- inline$IoGetNextIrpStackLocation$0$label_1#2:
- goto inline$IoGetNextIrpStackLocation$0$Return#2;
-
- inline$IoGetNextIrpStackLocation$0$Return#2:
- inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$ := inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$;
- goto inline$storm_IoAllocateIrp$0$label_27$1#2;
-
- inline$storm_IoAllocateIrp$0$label_27$1#2:
- goto inline$storm_IoAllocateIrp$0$anon7_Then#2, inline$storm_IoAllocateIrp$0$anon7_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon7_Else#2:
- assume !raiseException;
- goto inline$storm_IoAllocateIrp$0$anon3#2;
-
- inline$storm_IoAllocateIrp$0$anon3#2:
- goto inline$storm_IoAllocateIrp$0$label_30#2;
-
- inline$storm_IoAllocateIrp$0$label_30#2:
- inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$;
- goto inline$storm_IoAllocateIrp$0$label_31#2;
-
- inline$storm_IoAllocateIrp$0$label_31#2:
- goto inline$storm_IoAllocateIrp$0$label_32#2;
-
- inline$storm_IoAllocateIrp$0$label_32#2:
- goto inline$storm_IoAllocateIrp$0$label_33#2;
-
- inline$storm_IoAllocateIrp$0$label_33#2:
- goto inline$storm_IoAllocateIrp$0$anon8_Then#2, inline$storm_IoAllocateIrp$0$anon8_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon8_Else#2:
- assume __storm_init;
- goto inline$storm_IoAllocateIrp$0$anon5#2;
-
- inline$storm_IoAllocateIrp$0$anon8_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAllocateIrp$0$anon5#2;
-
- inline$storm_IoAllocateIrp$0$anon5#2:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_36#2;
-
- inline$storm_IoAllocateIrp$0$anon7_Then#2:
- assume raiseException;
- goto inline$storm_IoAllocateIrp$0$Return#2;
-
- inline$storm_IoAllocateIrp$0$anon6_Then#2:
- assume raiseException;
- goto inline$storm_IoAllocateIrp$0$Return#2;
-
- inline$storm_IoAllocateIrp$0$label_8_case_0#2:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ != 0;
- goto inline$storm_IoAllocateIrp$0$label_9#2;
-
- inline$storm_IoAllocateIrp$0$label_9#2:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0;
- goto inline$storm_IoAllocateIrp$0$label_36#2;
-
- inline$storm_IoAllocateIrp$0$label_36#2:
- inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
- goto inline$storm_IoAllocateIrp$0$label_1#2;
-
- inline$storm_IoAllocateIrp$0$label_1#2:
- goto inline$storm_IoAllocateIrp$0$Return#2;
-
- inline$storm_IoAllocateIrp$0$Return#2:
- $result.storm_IoAllocateIrp$96.21$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$;
- goto label_6$1#2;
-
- label_6$1#2:
- goto anon16_Then#2, anon16_Else#2;
-
- anon16_Else#2:
- assume !raiseException;
- goto anon1#2;
-
- anon1#2:
- goto label_9#2;
-
- label_9#2:
- $irp$1$91.7$storm_main := $result.storm_IoAllocateIrp$96.21$1$;
- goto label_10#2;
-
- label_10#2:
- havoc raiseException;
- goto anon17_Then#2, anon17_Else#2;
-
- anon17_Else#2:
- assume !raiseException;
- goto anon3#2;
-
- anon3#2:
- assume INT_NEQ($irp$1$91.7$storm_main, 0);
- goto label_11#2;
-
- label_11#2:
- goto inline$IoSetNextIrpStackLocation$0$Entry#2;
-
- inline$IoSetNextIrpStackLocation$0$Entry#2:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1 := $irp$1$91.7$storm_main;
- goto inline$IoSetNextIrpStackLocation$0$start#2;
-
- inline$IoSetNextIrpStackLocation$0$start#2:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation := inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1;
- goto inline$IoSetNextIrpStackLocation$0$label_3#2;
-
- inline$IoSetNextIrpStackLocation$0$label_3#2:
- havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 1, 1);
- goto inline$IoSetNextIrpStackLocation$0$label_4#2;
-
- inline$IoSetNextIrpStackLocation$0$label_4#2:
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myVar_0, 36, 1);
- Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$0$label_1#2;
-
- inline$IoSetNextIrpStackLocation$0$label_1#2:
- goto inline$IoSetNextIrpStackLocation$0$Return#2;
-
- inline$IoSetNextIrpStackLocation$0$Return#2:
- goto label_11$1#2;
-
- label_11$1#2:
- goto anon18_Then#2, anon18_Else#2;
-
- anon18_Else#2:
- assume !raiseException;
- goto anon5#2;
-
- anon5#2:
- goto label_14#2;
-
- label_14#2:
- goto inline$IoGetCurrentIrpStackLocation$0$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$0$Entry#2:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := $irp$1$91.7$storm_main;
- goto inline$IoGetCurrentIrpStackLocation$0$start#2;
-
- inline$IoGetCurrentIrpStackLocation$0$start#2:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
- goto inline$IoGetCurrentIrpStackLocation$0$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$0$label_3#2:
- inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$0$myVar_0;
- goto inline$IoGetCurrentIrpStackLocation$0$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$0$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$0$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$0$Return#2:
- $result.IoGetCurrentIrpStackLocation$99.38$2$ := inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
- goto label_14$1#2;
-
- label_14$1#2:
- goto anon19_Then#2, anon19_Else#2;
-
- anon19_Else#2:
- assume !raiseException;
- goto anon7#2;
-
- anon7#2:
- goto label_17#2;
-
- label_17#2:
- $irpSp$2$92.21$storm_main := $result.IoGetCurrentIrpStackLocation$99.38$2$;
- goto label_18#2;
-
- label_18#2:
- Mem_0_T.DeviceObject__IO_STACK_LOCATION := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
- call contextSwitch();
- goto label_19#2;
-
- label_19#2:
- goto inline$myInitDriver$0$Entry#2;
-
- inline$myInitDriver$0$Entry#2:
- goto inline$myInitDriver$0$start#2;
-
- inline$myInitDriver$0$start#2:
- goto inline$myInitDriver$0$label_3#2;
-
- inline$myInitDriver$0$label_3#2:
- goto inline$myInitDriver$0$label_4#2;
-
- inline$myInitDriver$0$label_4#2:
- inline$myInitDriver$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
- call contextSwitch();
- inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver := inline$myInitDriver$0$myVar_0;
- goto inline$myInitDriver$0$label_5#2;
-
- inline$myInitDriver$0$label_5#2:
- havoc inline$myInitDriver$0$myNondetVar_0;
- havoc inline$myInitDriver$0$myNondetVar_1;
- assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
- goto inline$storm_KeInitializeSpinLock$0$Entry#2;
-
- inline$storm_KeInitializeSpinLock$0$Entry#2:
- inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver);
- goto inline$storm_KeInitializeSpinLock$0$start#2;
-
- inline$storm_KeInitializeSpinLock$0$start#2:
- inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1;
- goto inline$storm_KeInitializeSpinLock$0$label_3#2;
-
- inline$storm_KeInitializeSpinLock$0$label_3#2:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := 0];
- call contextSwitch();
- goto inline$storm_KeInitializeSpinLock$0$label_1#2;
-
- inline$storm_KeInitializeSpinLock$0$label_1#2:
- goto inline$storm_KeInitializeSpinLock$0$Return#2;
-
- inline$storm_KeInitializeSpinLock$0$Return#2:
- goto inline$myInitDriver$0$label_5$1#2;
-
- inline$myInitDriver$0$label_5$1#2:
- goto inline$myInitDriver$0$anon2_Then#2, inline$myInitDriver$0$anon2_Else#2;
-
- inline$myInitDriver$0$anon2_Else#2:
- assume !raiseException;
- goto inline$myInitDriver$0$anon1#2;
-
- inline$myInitDriver$0$anon1#2:
- havoc inline$myInitDriver$0$myNondetVar_0;
- goto inline$myInitDriver$0$label_1#2;
-
- inline$myInitDriver$0$label_1#2:
- goto inline$myInitDriver$0$Return#2;
-
- inline$myInitDriver$0$anon2_Then#2:
- assume raiseException;
- goto inline$myInitDriver$0$Return#2;
-
- inline$myInitDriver$0$Return#2:
- goto label_19$1#2;
-
- label_19$1#2:
- goto anon20_Then#2, anon20_Else#2;
-
- anon20_Else#2:
- assume !raiseException;
- goto anon9#2;
-
- anon9#2:
- goto label_22#2;
-
- label_22#2:
- goto label_23#2;
-
- label_23#2:
- k_old_0 := k;
- tid_old_0 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$dispatch$0$Entry#2;
-
- inline$dispatch$0$Entry#2:
- inline$dispatch$0$$Irp$1$8.19$dispatch_.1 := $irp$1$91.7$storm_main;
- goto inline$dispatch$0$start#2;
-
- inline$dispatch$0$start#2:
- inline$dispatch$0$$Irp$1$8.19$dispatch := inline$dispatch$0$$Irp$1$8.19$dispatch_.1;
- goto inline$dispatch$0$label_3#2;
-
- inline$dispatch$0$label_3#2:
- goto inline$dispatch$0$label_4#2;
-
- inline$dispatch$0$label_4#2:
- goto inline$IoGetCurrentIrpStackLocation$1$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$1$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$1$start#2;
-
- inline$IoGetCurrentIrpStackLocation$1$start#2:
- goto inline$IoGetCurrentIrpStackLocation$1$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$1$label_3#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$1$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$1$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$1$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$1$Return#2:
- goto inline$dispatch$0$label_4$1#2;
-
- inline$dispatch$0$label_4$1#2:
- goto inline$dispatch$0$anon4_Then#2, inline$dispatch$0$anon4_Else#2;
-
- inline$dispatch$0$anon4_Else#2:
- assume !raiseException;
- goto inline$dispatch$0$anon1#2;
-
- inline$dispatch$0$anon1#2:
- goto inline$dispatch$0$label_7#2;
-
- inline$dispatch$0$label_7#2:
- goto inline$dispatch$0$label_8#2;
-
- inline$dispatch$0$label_8#2:
- goto inline$I8xDeviceControl$0$Entry#2;
-
- inline$I8xDeviceControl$0$Entry#2:
- inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1 := hdevobj;
- inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1 := inline$dispatch$0$$Irp$1$8.19$dispatch;
- goto inline$I8xDeviceControl$0$start#2;
-
- inline$I8xDeviceControl$0$start#2:
- inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl := inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1;
- inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1;
- goto inline$I8xDeviceControl$0$label_3#2;
-
- inline$I8xDeviceControl$0$label_3#2:
- goto inline$I8xDeviceControl$0$label_4#2;
-
- inline$I8xDeviceControl$0$label_4#2:
- goto inline$I8xDeviceControl$0$label_5#2;
-
- inline$I8xDeviceControl$0$label_5#2:
- goto inline$I8xDeviceControl$0$label_6#2;
-
- inline$I8xDeviceControl$0$label_6#2:
- goto inline$I8xDeviceControl$0$label_7#2;
-
- inline$I8xDeviceControl$0$label_7#2:
- call __PREfastPagedCode();
- goto inline$I8xDeviceControl$0$anon10_Then#2, inline$I8xDeviceControl$0$anon10_Else#2;
-
- inline$I8xDeviceControl$0$anon10_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon1#2;
-
- inline$I8xDeviceControl$0$anon1#2:
- goto inline$I8xDeviceControl$0$label_10#2;
-
- inline$I8xDeviceControl$0$label_10#2:
- inline$I8xDeviceControl$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl)];
- call contextSwitch();
- inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl := inline$I8xDeviceControl$0$myVar_0;
- goto inline$I8xDeviceControl$0$label_11#2;
-
- inline$I8xDeviceControl$0$label_11#2:
- goto inline$I8xDeviceControl$0$label_11_true#2, inline$I8xDeviceControl$0$label_11_false#2;
-
- inline$I8xDeviceControl$0$label_11_false#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
- goto inline$I8xDeviceControl$0$label_12#2;
-
- inline$I8xDeviceControl$0$label_11_true#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
- goto inline$I8xDeviceControl$0$label_13#2;
-
- inline$I8xDeviceControl$0$label_13#2:
- goto inline$I8xDeviceControl$0$label_13_true#2, inline$I8xDeviceControl$0$label_13_false#2;
-
- inline$I8xDeviceControl$0$label_13_false#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
- goto inline$I8xDeviceControl$0$label_12#2;
-
- inline$I8xDeviceControl$0$label_13_true#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
- goto inline$I8xDeviceControl$0$label_14#2;
-
- inline$I8xDeviceControl$0$label_14#2:
- goto inline$I8xDeviceControl$0$label_14_true#2, inline$I8xDeviceControl$0$label_14_false#2;
-
- inline$I8xDeviceControl$0$label_14_false#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) == 0;
- goto inline$I8xDeviceControl$0$label_15#2;
-
- inline$I8xDeviceControl$0$label_15#2:
- goto inline$IoGetCurrentIrpStackLocation$2$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$2$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$2$start#2;
-
- inline$IoGetCurrentIrpStackLocation$2$start#2:
- goto inline$IoGetCurrentIrpStackLocation$2$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$2$label_3#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$2$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$2$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$2$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$2$Return#2:
- goto inline$I8xDeviceControl$0$label_15$1#2;
-
- inline$I8xDeviceControl$0$label_15$1#2:
- goto inline$I8xDeviceControl$0$anon11_Then#2, inline$I8xDeviceControl$0$anon11_Else#2;
-
- inline$I8xDeviceControl$0$anon11_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon3#2;
-
- inline$I8xDeviceControl$0$anon3#2:
- goto inline$I8xDeviceControl$0$label_18#2;
-
- inline$I8xDeviceControl$0$label_18#2:
- goto inline$I8xDeviceControl$0$label_19#2;
-
- inline$I8xDeviceControl$0$label_19#2:
- goto inline$I8xDeviceControl$0$label_19_case_0#2, inline$I8xDeviceControl$0$label_19_case_1#2, inline$I8xDeviceControl$0$label_19_case_2#2;
-
- inline$I8xDeviceControl$0$label_19_case_2#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703684;
- goto inline$I8xDeviceControl$0$label_24#2;
-
- inline$I8xDeviceControl$0$label_24#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$Entry#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$Entry#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl;
- inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
- goto inline$I8xKeyboardGetSysButtonEvent$0$start#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$start#2:
- call inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent := __HAVOC_malloc(1);
- inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1;
- inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_3#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_3#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_4#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_4#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_5#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_5#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_6#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_6#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_7#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_7#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_8#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_8#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_9#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_9#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_10#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_10#2:
- goto inline$IoGetCurrentIrpStackLocation$4$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$4$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$4$start#2;
-
- inline$IoGetCurrentIrpStackLocation$4$start#2:
- goto inline$IoGetCurrentIrpStackLocation$4$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$4$label_3#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$4$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$4$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$4$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$4$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon28_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon28_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon28_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_13#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_14#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume !INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_15#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_23#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_23#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$0$Entry#2;
-
- inline$storm_KeAcquireSpinLock$0$Entry#2:
- inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
- goto inline$storm_KeAcquireSpinLock$0$start#2;
-
- inline$storm_KeAcquireSpinLock$0$start#2:
- inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
- goto inline$storm_KeAcquireSpinLock$0$label_3#2;
-
- inline$storm_KeAcquireSpinLock$0$label_3#2:
- goto inline$storm_KeAcquireSpinLock$0$label_4#2;
-
- inline$storm_KeAcquireSpinLock$0$label_4#2:
- goto inline$storm_getThreadID$0$Entry#2;
-
- inline$storm_getThreadID$0$Entry#2:
- goto inline$storm_getThreadID$0$anon0#2;
-
- inline$storm_getThreadID$0$anon0#2:
- inline$storm_getThreadID$0$tidRet := tid;
- goto inline$storm_getThreadID$0$Return#2;
-
- inline$storm_getThreadID$0$Return#2:
- inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$0$tidRet;
- goto inline$storm_KeAcquireSpinLock$0$label_4$1#2;
-
- inline$storm_KeAcquireSpinLock$0$label_4$1#2:
- goto inline$storm_KeAcquireSpinLock$0$label_7#2;
-
- inline$storm_KeAcquireSpinLock$0$label_7#2:
- inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$0$label_8#2;
-
- inline$storm_KeAcquireSpinLock$0$label_8#2:
- goto inline$storm_KeAcquireSpinLock$0$label_9#2;
-
- inline$storm_KeAcquireSpinLock$0$label_9#2:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$0$label_12#2;
-
- inline$storm_KeAcquireSpinLock$0$label_12#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon7_Then#2, inline$storm_KeAcquireSpinLock$0$anon7_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon7_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon1#2;
-
- inline$storm_KeAcquireSpinLock$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_13#2;
-
- inline$storm_KeAcquireSpinLock$0$label_13#2:
- goto inline$storm_KeAcquireSpinLock$0$label_13_true#2, inline$storm_KeAcquireSpinLock$0$label_13_false#2;
-
- inline$storm_KeAcquireSpinLock$0$label_13_false#2:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$0$label_14#2;
-
- inline$storm_KeAcquireSpinLock$0$label_14#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$0$label_1#2;
-
- inline$storm_KeAcquireSpinLock$0$label_13_true#2:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$0$label_17#2;
-
- inline$storm_KeAcquireSpinLock$0$label_17#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon8_Then#2, inline$storm_KeAcquireSpinLock$0$anon8_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon4#2;
-
- inline$storm_KeAcquireSpinLock$0$anon4#2:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
- goto inline$storm_KeAcquireSpinLock$0$label_18#2;
-
- inline$storm_KeAcquireSpinLock$0$label_18#2:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock];
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_19#2;
-
- inline$storm_KeAcquireSpinLock$0$label_19#2:
- goto inline$storm_KeAcquireSpinLock$0$anon9_Then#2, inline$storm_KeAcquireSpinLock$0$anon9_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon9_Else#2:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$0$anon6#2;
-
- inline$storm_KeAcquireSpinLock$0$anon9_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$0$anon6#2;
-
- inline$storm_KeAcquireSpinLock$0$anon6#2:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_1#2;
-
- inline$storm_KeAcquireSpinLock$0$label_1#2:
- goto inline$storm_KeAcquireSpinLock$0$Return#2;
-
- inline$storm_KeAcquireSpinLock$0$anon8_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$0$Return#2;
-
- inline$storm_KeAcquireSpinLock$0$anon7_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$0$Return#2;
-
- inline$storm_KeAcquireSpinLock$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon30_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon30_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon30_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon5#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_56#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_56#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_57#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_57#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_62#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_62#2:
- goto inline$storm_IoSetCancelRoutine$0$Entry#2;
-
- inline$storm_IoSetCancelRoutine$0$Entry#2:
- inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := I8xSysButtonCancelRoutine;
- goto inline$storm_IoSetCancelRoutine$0$start#2;
-
- inline$storm_IoSetCancelRoutine$0$start#2:
- inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
- inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
- goto inline$storm_IoSetCancelRoutine$0$label_3#2;
-
- inline$storm_IoSetCancelRoutine$0$label_3#2:
- goto inline$storm_IoSetCancelRoutine$0$label_4#2;
-
- inline$storm_IoSetCancelRoutine$0$label_4#2:
- call inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ := storm_nondet();
- goto inline$storm_IoSetCancelRoutine$0$label_7#2;
-
- inline$storm_IoSetCancelRoutine$0$label_7#2:
- goto inline$storm_IoSetCancelRoutine$0$label_7_true#2, inline$storm_IoSetCancelRoutine$0$label_7_false#2;
-
- inline$storm_IoSetCancelRoutine$0$label_7_false#2:
- assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ == 0;
- goto inline$storm_IoSetCancelRoutine$0$label_8#2;
-
- inline$storm_IoSetCancelRoutine$0$label_7_true#2:
- assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ != 0;
- goto inline$storm_IoSetCancelRoutine$0$label_11#2;
-
- inline$storm_IoSetCancelRoutine$0$label_11#2:
- havoc raiseException;
- goto inline$storm_IoSetCancelRoutine$0$anon5_Then#2, inline$storm_IoSetCancelRoutine$0$anon5_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon5_Else#2:
- assume !raiseException;
- goto inline$storm_IoSetCancelRoutine$0$anon1#2;
-
- inline$storm_IoSetCancelRoutine$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_12#2;
-
- inline$storm_IoSetCancelRoutine$0$label_12#2:
- goto inline$storm_IoSetCancelRoutine$0$label_12_true#2, inline$storm_IoSetCancelRoutine$0$label_12_false#2;
-
- inline$storm_IoSetCancelRoutine$0$label_12_false#2:
- assume 0 == 0;
- goto inline$storm_IoSetCancelRoutine$0$label_13#2;
-
- inline$storm_IoSetCancelRoutine$0$label_13#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCancelRoutine$0$label_1#2;
-
- inline$storm_IoSetCancelRoutine$0$label_12_true#2:
- assume 0 != 0;
- goto inline$storm_IoSetCancelRoutine$0$label_8#2;
-
- inline$storm_IoSetCancelRoutine$0$label_8#2:
- __storm_atomic := true;
- goto inline$storm_IoSetCancelRoutine$0$label_16#2;
-
- inline$storm_IoSetCancelRoutine$0$label_16#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_17#2;
-
- inline$storm_IoSetCancelRoutine$0$label_17#2:
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_18#2;
-
- inline$storm_IoSetCancelRoutine$0$label_18#2:
- goto inline$storm_IoSetCancelRoutine$0$anon6_Then#2, inline$storm_IoSetCancelRoutine$0$anon6_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon6_Else#2:
- assume __storm_init;
- goto inline$storm_IoSetCancelRoutine$0$anon4#2;
-
- inline$storm_IoSetCancelRoutine$0$anon6_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoSetCancelRoutine$0$anon4#2;
-
- inline$storm_IoSetCancelRoutine$0$anon4#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_21#2;
-
- inline$storm_IoSetCancelRoutine$0$label_21#2:
- goto inline$storm_IoSetCancelRoutine$0$label_1#2;
-
- inline$storm_IoSetCancelRoutine$0$label_1#2:
- goto inline$storm_IoSetCancelRoutine$0$Return#2;
-
- inline$storm_IoSetCancelRoutine$0$anon5_Then#2:
- assume raiseException;
- goto inline$storm_IoSetCancelRoutine$0$Return#2;
-
- inline$storm_IoSetCancelRoutine$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon21#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon21#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_65#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_65#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2:
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
- call contextSwitch();
- assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_66#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_66#2:
- goto inline$storm_IoMarkIrpPending$1$Entry#2;
-
- inline$storm_IoMarkIrpPending$1$Entry#2:
- inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoMarkIrpPending$1$start#2;
-
- inline$storm_IoMarkIrpPending$1$start#2:
- inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
- goto inline$storm_IoMarkIrpPending$1$label_3#2;
-
- inline$storm_IoMarkIrpPending$1$label_3#2:
- call inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ := storm_nondet();
- goto inline$storm_IoMarkIrpPending$1$label_6#2;
-
- inline$storm_IoMarkIrpPending$1$label_6#2:
- goto inline$storm_IoMarkIrpPending$1$label_6_true#2, inline$storm_IoMarkIrpPending$1$label_6_false#2;
-
- inline$storm_IoMarkIrpPending$1$label_6_false#2:
- assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ == 0;
- goto inline$storm_IoMarkIrpPending$1$label_1#2;
-
- inline$storm_IoMarkIrpPending$1$label_6_true#2:
- assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ != 0;
- goto inline$storm_IoMarkIrpPending$1$label_7#2;
-
- inline$storm_IoMarkIrpPending$1$label_7#2:
- havoc raiseException;
- goto inline$storm_IoMarkIrpPending$1$anon3_Then#2, inline$storm_IoMarkIrpPending$1$anon3_Else#2;
-
- inline$storm_IoMarkIrpPending$1$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoMarkIrpPending$1$anon1#2;
-
- inline$storm_IoMarkIrpPending$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- call contextSwitch();
- goto inline$storm_IoMarkIrpPending$1$label_8#2;
-
- inline$storm_IoMarkIrpPending$1$label_8#2:
- goto inline$storm_IoMarkIrpPending$1$label_8_true#2, inline$storm_IoMarkIrpPending$1$label_8_false#2;
-
- inline$storm_IoMarkIrpPending$1$label_8_false#2:
- assume 0 == 0;
- goto inline$storm_IoMarkIrpPending$1$label_9#2;
-
- inline$storm_IoMarkIrpPending$1$label_9#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoMarkIrpPending$1$label_1#2;
-
- inline$storm_IoMarkIrpPending$1$label_8_true#2:
- assume 0 != 0;
- goto inline$storm_IoMarkIrpPending$1$label_1#2;
-
- inline$storm_IoMarkIrpPending$1$label_1#2:
- goto inline$storm_IoMarkIrpPending$1$Return#2;
-
- inline$storm_IoMarkIrpPending$1$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoMarkIrpPending$1$Return#2;
-
- inline$storm_IoMarkIrpPending$1$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon23#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon23#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_82#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_82#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2:
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
- call contextSwitch();
- assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_69#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_69#2:
- goto inline$storm_IoSetCancelRoutine$1$Entry#2;
-
- inline$storm_IoSetCancelRoutine$1$Entry#2:
- inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := 0;
- goto inline$storm_IoSetCancelRoutine$1$start#2;
-
- inline$storm_IoSetCancelRoutine$1$start#2:
- inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
- inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
- goto inline$storm_IoSetCancelRoutine$1$label_3#2;
-
- inline$storm_IoSetCancelRoutine$1$label_3#2:
- goto inline$storm_IoSetCancelRoutine$1$label_4#2;
-
- inline$storm_IoSetCancelRoutine$1$label_4#2:
- call inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ := storm_nondet();
- goto inline$storm_IoSetCancelRoutine$1$label_7#2;
-
- inline$storm_IoSetCancelRoutine$1$label_7#2:
- goto inline$storm_IoSetCancelRoutine$1$label_7_true#2, inline$storm_IoSetCancelRoutine$1$label_7_false#2;
-
- inline$storm_IoSetCancelRoutine$1$label_7_false#2:
- assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ == 0;
- goto inline$storm_IoSetCancelRoutine$1$label_8#2;
-
- inline$storm_IoSetCancelRoutine$1$label_7_true#2:
- assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ != 0;
- goto inline$storm_IoSetCancelRoutine$1$label_11#2;
-
- inline$storm_IoSetCancelRoutine$1$label_11#2:
- havoc raiseException;
- goto inline$storm_IoSetCancelRoutine$1$anon5_Then#2, inline$storm_IoSetCancelRoutine$1$anon5_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon5_Else#2:
- assume !raiseException;
- goto inline$storm_IoSetCancelRoutine$1$anon1#2;
-
- inline$storm_IoSetCancelRoutine$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$1$label_12#2;
-
- inline$storm_IoSetCancelRoutine$1$label_12#2:
- goto inline$storm_IoSetCancelRoutine$1$label_12_true#2, inline$storm_IoSetCancelRoutine$1$label_12_false#2;
-
- inline$storm_IoSetCancelRoutine$1$label_12_false#2:
- assume 0 == 0;
- goto inline$storm_IoSetCancelRoutine$1$label_13#2;
-
- inline$storm_IoSetCancelRoutine$1$label_13#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCancelRoutine$1$label_1#2;
-
- inline$storm_IoSetCancelRoutine$1$label_12_true#2:
- assume 0 != 0;
- goto inline$storm_IoSetCancelRoutine$1$label_8#2;
-
- inline$storm_IoSetCancelRoutine$1$label_8#2:
- __storm_atomic := true;
- goto inline$storm_IoSetCancelRoutine$1$label_16#2;
-
- inline$storm_IoSetCancelRoutine$1$label_16#2:
- inline$storm_IoSetCancelRoutine$1$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine)];
- call contextSwitch();
- inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$myVar_0;
- goto inline$storm_IoSetCancelRoutine$1$label_17#2;
-
- inline$storm_IoSetCancelRoutine$1$label_17#2:
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$1$label_18#2;
-
- inline$storm_IoSetCancelRoutine$1$label_18#2:
- goto inline$storm_IoSetCancelRoutine$1$anon6_Then#2, inline$storm_IoSetCancelRoutine$1$anon6_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon6_Else#2:
- assume __storm_init;
- goto inline$storm_IoSetCancelRoutine$1$anon4#2;
-
- inline$storm_IoSetCancelRoutine$1$anon6_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoSetCancelRoutine$1$anon4#2;
-
- inline$storm_IoSetCancelRoutine$1$anon4#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$1$label_21#2;
-
- inline$storm_IoSetCancelRoutine$1$label_21#2:
- inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$ := inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine;
- goto inline$storm_IoSetCancelRoutine$1$label_1#2;
-
- inline$storm_IoSetCancelRoutine$1$label_1#2:
- goto inline$storm_IoSetCancelRoutine$1$Return#2;
-
- inline$storm_IoSetCancelRoutine$1$anon5_Then#2:
- assume raiseException;
- goto inline$storm_IoSetCancelRoutine$1$Return#2;
-
- inline$storm_IoSetCancelRoutine$1$Return#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ := inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon25#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon25#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_72#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_72#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_73#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_73#2:
- goto inline$storm_IoMarkIrpPending$2$Entry#2;
-
- inline$storm_IoMarkIrpPending$2$Entry#2:
- inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoMarkIrpPending$2$start#2;
-
- inline$storm_IoMarkIrpPending$2$start#2:
- inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
- goto inline$storm_IoMarkIrpPending$2$label_3#2;
-
- inline$storm_IoMarkIrpPending$2$label_3#2:
- call inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ := storm_nondet();
- goto inline$storm_IoMarkIrpPending$2$label_6#2;
-
- inline$storm_IoMarkIrpPending$2$label_6#2:
- goto inline$storm_IoMarkIrpPending$2$label_6_true#2, inline$storm_IoMarkIrpPending$2$label_6_false#2;
-
- inline$storm_IoMarkIrpPending$2$label_6_false#2:
- assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ == 0;
- goto inline$storm_IoMarkIrpPending$2$label_1#2;
-
- inline$storm_IoMarkIrpPending$2$label_6_true#2:
- assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ != 0;
- goto inline$storm_IoMarkIrpPending$2$label_7#2;
-
- inline$storm_IoMarkIrpPending$2$label_7#2:
- havoc raiseException;
- goto inline$storm_IoMarkIrpPending$2$anon3_Then#2, inline$storm_IoMarkIrpPending$2$anon3_Else#2;
-
- inline$storm_IoMarkIrpPending$2$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoMarkIrpPending$2$anon1#2;
-
- inline$storm_IoMarkIrpPending$2$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- call contextSwitch();
- goto inline$storm_IoMarkIrpPending$2$label_8#2;
-
- inline$storm_IoMarkIrpPending$2$label_8#2:
- goto inline$storm_IoMarkIrpPending$2$label_8_true#2, inline$storm_IoMarkIrpPending$2$label_8_false#2;
-
- inline$storm_IoMarkIrpPending$2$label_8_false#2:
- assume 0 == 0;
- goto inline$storm_IoMarkIrpPending$2$label_9#2;
-
- inline$storm_IoMarkIrpPending$2$label_9#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoMarkIrpPending$2$label_1#2;
-
- inline$storm_IoMarkIrpPending$2$label_8_true#2:
- assume 0 != 0;
- goto inline$storm_IoMarkIrpPending$2$label_1#2;
-
- inline$storm_IoMarkIrpPending$2$label_1#2:
- goto inline$storm_IoMarkIrpPending$2$Return#2;
-
- inline$storm_IoMarkIrpPending$2$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoMarkIrpPending$2$Return#2;
-
- inline$storm_IoMarkIrpPending$2$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon27#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_78#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_78#2:
- call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$ := storm_nondet();
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_81#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_81#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_76#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_76#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_77#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_77#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741536;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_58#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_58#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741823;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_59#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$0$Entry#2;
-
- inline$storm_KeReleaseSpinLock$0$Entry#2:
- inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
- goto inline$storm_KeReleaseSpinLock$0$start#2;
-
- inline$storm_KeReleaseSpinLock$0$start#2:
- inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
- goto inline$storm_KeReleaseSpinLock$0$label_3#2;
-
- inline$storm_KeReleaseSpinLock$0$label_3#2:
- goto inline$storm_KeReleaseSpinLock$0$label_4#2;
-
- inline$storm_KeReleaseSpinLock$0$label_4#2:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$0$label_7#2;
-
- inline$storm_KeReleaseSpinLock$0$label_7#2:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$0$anon5_Then#2, inline$storm_KeReleaseSpinLock$0$anon5_Else#2;
-
- inline$storm_KeReleaseSpinLock$0$anon5_Else#2:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$0$anon1#2;
-
- inline$storm_KeReleaseSpinLock$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_8#2;
-
- inline$storm_KeReleaseSpinLock$0$label_8#2:
- goto inline$storm_getThreadID$1$Entry#2;
-
- inline$storm_getThreadID$1$Entry#2:
- goto inline$storm_getThreadID$1$anon0#2;
-
- inline$storm_getThreadID$1$anon0#2:
- inline$storm_getThreadID$1$tidRet := tid;
- goto inline$storm_getThreadID$1$Return#2;
-
- inline$storm_getThreadID$1$Return#2:
- inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$1$tidRet;
- goto inline$storm_KeReleaseSpinLock$0$label_8$1#2;
-
- inline$storm_KeReleaseSpinLock$0$label_8$1#2:
- goto inline$storm_KeReleaseSpinLock$0$label_11#2;
-
- inline$storm_KeReleaseSpinLock$0$label_11#2:
- goto inline$storm_KeReleaseSpinLock$0$label_11_true#2, inline$storm_KeReleaseSpinLock$0$label_11_false#2;
-
- inline$storm_KeReleaseSpinLock$0$label_11_false#2:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$0$label_12#2;
-
- inline$storm_KeReleaseSpinLock$0$label_12#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$0$label_1#2;
-
- inline$storm_KeReleaseSpinLock$0$label_11_true#2:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$0$label_15#2;
-
- inline$storm_KeReleaseSpinLock$0$label_15#2:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_16#2;
-
- inline$storm_KeReleaseSpinLock$0$label_16#2:
- goto inline$storm_KeReleaseSpinLock$0$anon6_Then#2, inline$storm_KeReleaseSpinLock$0$anon6_Else#2;
-
- inline$storm_KeReleaseSpinLock$0$anon6_Else#2:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$0$anon4#2;
-
- inline$storm_KeReleaseSpinLock$0$anon6_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$0$anon4#2;
-
- inline$storm_KeReleaseSpinLock$0$anon4#2:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_1#2;
-
- inline$storm_KeReleaseSpinLock$0$label_1#2:
- goto inline$storm_KeReleaseSpinLock$0$Return#2;
-
- inline$storm_KeReleaseSpinLock$0$anon5_Then#2:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$0$Return#2;
-
- inline$storm_KeReleaseSpinLock$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon19#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon19#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon30_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_26#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_26#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_27#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_27#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741670;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_28#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_28#2:
- goto inline$storm_ExAllocatePoolWithTag$0$Entry#2;
-
- inline$storm_ExAllocatePoolWithTag$0$Entry#2:
- inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1 := 12;
- goto inline$storm_ExAllocatePoolWithTag$0$start#2;
-
- inline$storm_ExAllocatePoolWithTag$0$start#2:
- inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag := inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1;
- goto inline$storm_ExAllocatePoolWithTag$0$label_3#2;
-
- inline$storm_ExAllocatePoolWithTag$0$label_3#2:
- call inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$ := __HAVOC_malloc(inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag);
- goto inline$storm_ExAllocatePoolWithTag$0$label_6#2;
-
- inline$storm_ExAllocatePoolWithTag$0$label_6#2:
- inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$ := inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$;
- goto inline$storm_ExAllocatePoolWithTag$0$label_1#2;
-
- inline$storm_ExAllocatePoolWithTag$0$label_1#2:
- goto inline$storm_ExAllocatePoolWithTag$0$Return#2;
-
- inline$storm_ExAllocatePoolWithTag$0$Return#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$ := inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon31_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon31_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon31_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon7#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon7#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_31#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_31#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_32#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_32#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_34#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_34#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- call inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$ := IoAllocateWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0);
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon32_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon32_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon32_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon9#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon9#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_37#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_37#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_38#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_38#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_39#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_39#2:
- call ExFreePoolWithTag(inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent, 0);
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon33_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon33_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon33_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon11#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon11#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon33_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_42#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_42#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_43#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_43#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_44#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_44#2:
- goto inline$storm_IoMarkIrpPending$0$Entry#2;
-
- inline$storm_IoMarkIrpPending$0$Entry#2:
- inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoMarkIrpPending$0$start#2;
-
- inline$storm_IoMarkIrpPending$0$start#2:
- inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
- goto inline$storm_IoMarkIrpPending$0$label_3#2;
-
- inline$storm_IoMarkIrpPending$0$label_3#2:
- call inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ := storm_nondet();
- goto inline$storm_IoMarkIrpPending$0$label_6#2;
-
- inline$storm_IoMarkIrpPending$0$label_6#2:
- goto inline$storm_IoMarkIrpPending$0$label_6_true#2, inline$storm_IoMarkIrpPending$0$label_6_false#2;
-
- inline$storm_IoMarkIrpPending$0$label_6_false#2:
- assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ == 0;
- goto inline$storm_IoMarkIrpPending$0$label_1#2;
-
- inline$storm_IoMarkIrpPending$0$label_6_true#2:
- assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ != 0;
- goto inline$storm_IoMarkIrpPending$0$label_7#2;
-
- inline$storm_IoMarkIrpPending$0$label_7#2:
- havoc raiseException;
- goto inline$storm_IoMarkIrpPending$0$anon3_Then#2, inline$storm_IoMarkIrpPending$0$anon3_Else#2;
-
- inline$storm_IoMarkIrpPending$0$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoMarkIrpPending$0$anon1#2;
-
- inline$storm_IoMarkIrpPending$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- call contextSwitch();
- goto inline$storm_IoMarkIrpPending$0$label_8#2;
-
- inline$storm_IoMarkIrpPending$0$label_8#2:
- goto inline$storm_IoMarkIrpPending$0$label_8_true#2, inline$storm_IoMarkIrpPending$0$label_8_false#2;
-
- inline$storm_IoMarkIrpPending$0$label_8_false#2:
- assume 0 == 0;
- goto inline$storm_IoMarkIrpPending$0$label_9#2;
-
- inline$storm_IoMarkIrpPending$0$label_9#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoMarkIrpPending$0$label_1#2;
-
- inline$storm_IoMarkIrpPending$0$label_8_true#2:
- assume 0 != 0;
- goto inline$storm_IoMarkIrpPending$0$label_1#2;
-
- inline$storm_IoMarkIrpPending$0$label_1#2:
- goto inline$storm_IoMarkIrpPending$0$Return#2;
-
- inline$storm_IoMarkIrpPending$0$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoMarkIrpPending$0$Return#2;
-
- inline$storm_IoMarkIrpPending$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon13#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon13#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_47#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_47#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- call IoQueueWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, I8xCompleteSysButtonEventWorker, 1, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent);
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon15#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon15#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_50#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_50#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_33#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_51#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2:
- assume !INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2:
- assume INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_53#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_53#2:
- goto inline$I8xCompleteSysButtonIrp$0$Entry#2;
-
- inline$I8xCompleteSysButtonIrp$0$Entry#2:
- inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$I8xCompleteSysButtonIrp$0$start#2;
-
- inline$I8xCompleteSysButtonIrp$0$start#2:
- inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1;
- goto inline$I8xCompleteSysButtonIrp$0$label_3#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_3#2:
- havoc inline$I8xCompleteSysButtonIrp$0$myNondetVar_0;
- goto inline$I8xCompleteSysButtonIrp$0$label_4#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_4#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_5#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_5#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_6#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_6#2:
- goto inline$storm_IoCompleteRequest$2$Entry#2;
-
- inline$storm_IoCompleteRequest$2$Entry#2:
- inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp;
- goto inline$storm_IoCompleteRequest$2$start#2;
-
- inline$storm_IoCompleteRequest$2$start#2:
- inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$2$label_3#2;
-
- inline$storm_IoCompleteRequest$2$label_3#2:
- call inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$2$label_6#2;
-
- inline$storm_IoCompleteRequest$2$label_6#2:
- goto inline$storm_IoCompleteRequest$2$label_6_true#2, inline$storm_IoCompleteRequest$2$label_6_false#2;
-
- inline$storm_IoCompleteRequest$2$label_6_false#2:
- assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$2$label_7#2;
-
- inline$storm_IoCompleteRequest$2$label_6_true#2:
- assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$2$label_8#2;
-
- inline$storm_IoCompleteRequest$2$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$2$anon3_Then#2, inline$storm_IoCompleteRequest$2$anon3_Else#2;
-
- inline$storm_IoCompleteRequest$2$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$2$anon1#2;
-
- inline$storm_IoCompleteRequest$2$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$2$label_9#2;
-
- inline$storm_IoCompleteRequest$2$label_9#2:
- goto inline$storm_IoCompleteRequest$2$label_9_true#2, inline$storm_IoCompleteRequest$2$label_9_false#2;
-
- inline$storm_IoCompleteRequest$2$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$2$label_10#2;
-
- inline$storm_IoCompleteRequest$2$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$2$label_1#2;
-
- inline$storm_IoCompleteRequest$2$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$2$label_7#2;
-
- inline$storm_IoCompleteRequest$2$label_7#2:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$2$label_1#2;
-
- inline$storm_IoCompleteRequest$2$label_1#2:
- goto inline$storm_IoCompleteRequest$2$Return#2;
-
- inline$storm_IoCompleteRequest$2$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$2$Return#2;
-
- inline$storm_IoCompleteRequest$2$Return#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_6$1#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_6$1#2:
- goto inline$I8xCompleteSysButtonIrp$0$anon2_Then#2, inline$I8xCompleteSysButtonIrp$0$anon2_Else#2;
-
- inline$I8xCompleteSysButtonIrp$0$anon2_Else#2:
- assume !raiseException;
- goto inline$I8xCompleteSysButtonIrp$0$anon1#2;
-
- inline$I8xCompleteSysButtonIrp$0$anon1#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_1#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_1#2:
- goto inline$I8xCompleteSysButtonIrp$0$Return#2;
-
- inline$I8xCompleteSysButtonIrp$0$anon2_Then#2:
- assume raiseException;
- goto inline$I8xCompleteSysButtonIrp$0$Return#2;
-
- inline$I8xCompleteSysButtonIrp$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon17#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon17#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_52#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon32_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon31_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_16#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_16#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741306;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_17#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_17#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_18#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_18#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_19#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_19#2:
- goto inline$storm_IoCompleteRequest$1$Entry#2;
-
- inline$storm_IoCompleteRequest$1$Entry#2:
- inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoCompleteRequest$1$start#2;
-
- inline$storm_IoCompleteRequest$1$start#2:
- inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$1$label_3#2;
-
- inline$storm_IoCompleteRequest$1$label_3#2:
- call inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$1$label_6#2;
-
- inline$storm_IoCompleteRequest$1$label_6#2:
- goto inline$storm_IoCompleteRequest$1$label_6_true#2, inline$storm_IoCompleteRequest$1$label_6_false#2;
-
- inline$storm_IoCompleteRequest$1$label_6_false#2:
- assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$1$label_7#2;
-
- inline$storm_IoCompleteRequest$1$label_6_true#2:
- assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$1$label_8#2;
-
- inline$storm_IoCompleteRequest$1$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$1$anon3_Then#2, inline$storm_IoCompleteRequest$1$anon3_Else#2;
-
- inline$storm_IoCompleteRequest$1$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$1$anon1#2;
-
- inline$storm_IoCompleteRequest$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$1$label_9#2;
-
- inline$storm_IoCompleteRequest$1$label_9#2:
- goto inline$storm_IoCompleteRequest$1$label_9_true#2, inline$storm_IoCompleteRequest$1$label_9_false#2;
-
- inline$storm_IoCompleteRequest$1$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$1$label_10#2;
-
- inline$storm_IoCompleteRequest$1$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$1$label_1#2;
-
- inline$storm_IoCompleteRequest$1$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$1$label_7#2;
-
- inline$storm_IoCompleteRequest$1$label_7#2:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$1$label_1#2;
-
- inline$storm_IoCompleteRequest$1$label_1#2:
- goto inline$storm_IoCompleteRequest$1$Return#2;
-
- inline$storm_IoCompleteRequest$1$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$1$Return#2;
-
- inline$storm_IoCompleteRequest$1$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon29_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon29_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon29_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon3#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon3#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_22#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_22#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_1#2:
- call __HAVOC_free(inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent);
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon29_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon28_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$Return#2:
- goto inline$I8xDeviceControl$0$label_24$1#2;
-
- inline$I8xDeviceControl$0$label_24$1#2:
- goto inline$I8xDeviceControl$0$anon13_Then#2, inline$I8xDeviceControl$0$anon13_Else#2;
-
- inline$I8xDeviceControl$0$anon13_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon7#2;
-
- inline$I8xDeviceControl$0$anon7#2:
- goto inline$I8xDeviceControl$0$label_27#2;
-
- inline$I8xDeviceControl$0$label_27#2:
- goto inline$I8xDeviceControl$0$label_1#2;
-
- inline$I8xDeviceControl$0$anon13_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$label_19_case_1#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703680;
- goto inline$I8xDeviceControl$0$label_21#2;
-
- inline$I8xDeviceControl$0$label_21#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$Entry#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$Entry#2:
- inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
- goto inline$I8xKeyboardGetSysButtonCaps$0$start#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$start#2:
- inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_3#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_3#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_4#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_4#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_5#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_5#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_6#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_6#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_7#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_7#2:
- call __PREfastPagedCode();
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_10#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_10#2:
- goto inline$IoGetCurrentIrpStackLocation$3$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$3$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$3$start#2;
-
- inline$IoGetCurrentIrpStackLocation$3$start#2:
- goto inline$IoGetCurrentIrpStackLocation$3$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$3$label_3#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$3$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$3$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$3$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$3$Return#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon3#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon3#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_13#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_13#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_14#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_14#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_15#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_15#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume !INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_16#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_16#2:
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_24#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_24#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_25#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_25#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) == 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) != 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_27#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_27#2:
- inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 1);
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_26#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) == 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) != 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_29#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_29#2:
- inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 2);
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_28#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) == 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) != 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_31#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_31#2:
- inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, BOOGIE_LARGE_INT_2147483648);
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_30#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_32#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_32#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_17#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_17#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_18#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_19#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_19#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_20#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_20#2:
- goto inline$storm_IoCompleteRequest$0$Entry#2;
-
- inline$storm_IoCompleteRequest$0$Entry#2:
- inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps;
- goto inline$storm_IoCompleteRequest$0$start#2;
-
- inline$storm_IoCompleteRequest$0$start#2:
- inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$0$label_3#2;
-
- inline$storm_IoCompleteRequest$0$label_3#2:
- call inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$0$label_6#2;
-
- inline$storm_IoCompleteRequest$0$label_6#2:
- goto inline$storm_IoCompleteRequest$0$label_6_true#2, inline$storm_IoCompleteRequest$0$label_6_false#2;
-
- inline$storm_IoCompleteRequest$0$label_6_false#2:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$0$label_7#2;
-
- inline$storm_IoCompleteRequest$0$label_6_true#2:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$0$label_8#2;
-
- inline$storm_IoCompleteRequest$0$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$0$anon3_Then#2, inline$storm_IoCompleteRequest$0$anon3_Else#2;
-
- inline$storm_IoCompleteRequest$0$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$0$anon1#2;
-
- inline$storm_IoCompleteRequest$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_9#2;
-
- inline$storm_IoCompleteRequest$0$label_9#2:
- goto inline$storm_IoCompleteRequest$0$label_9_true#2, inline$storm_IoCompleteRequest$0$label_9_false#2;
-
- inline$storm_IoCompleteRequest$0$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$0$label_10#2;
-
- inline$storm_IoCompleteRequest$0$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$0$label_1#2;
-
- inline$storm_IoCompleteRequest$0$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$0$label_7#2;
-
- inline$storm_IoCompleteRequest$0$label_7#2:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_1#2;
-
- inline$storm_IoCompleteRequest$0$label_1#2:
- goto inline$storm_IoCompleteRequest$0$Return#2;
-
- inline$storm_IoCompleteRequest$0$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$0$Return#2;
-
- inline$storm_IoCompleteRequest$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon5#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon5#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_23#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_23#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$Return#2:
- goto inline$I8xDeviceControl$0$label_21$1#2;
-
- inline$I8xDeviceControl$0$label_21$1#2:
- goto inline$I8xDeviceControl$0$anon12_Then#2, inline$I8xDeviceControl$0$anon12_Else#2;
-
- inline$I8xDeviceControl$0$anon12_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon5#2;
-
- inline$I8xDeviceControl$0$anon5#2:
- goto inline$I8xDeviceControl$0$label_28#2;
-
- inline$I8xDeviceControl$0$label_28#2:
- goto inline$I8xDeviceControl$0$label_1#2;
-
- inline$I8xDeviceControl$0$anon12_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$label_19_case_0#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703680;
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703684;
- goto inline$I8xDeviceControl$0$label_20#2;
-
- inline$I8xDeviceControl$0$label_20#2:
- goto inline$I8xDeviceControl$0$label_29#2;
-
- inline$I8xDeviceControl$0$anon11_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$label_14_true#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) != 0;
- goto inline$I8xDeviceControl$0$label_12#2;
-
- inline$I8xDeviceControl$0$label_12#2:
- goto inline$I8xDeviceControl$0$label_29#2;
-
- inline$I8xDeviceControl$0$label_29#2:
- goto inline$I8xDeviceControl$0$label_30#2;
-
- inline$I8xDeviceControl$0$label_30#2:
- goto inline$storm_IoCompleteRequest$3$Entry#2;
-
- inline$storm_IoCompleteRequest$3$Entry#2:
- inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
- goto inline$storm_IoCompleteRequest$3$start#2;
-
- inline$storm_IoCompleteRequest$3$start#2:
- inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$3$label_3#2;
-
- inline$storm_IoCompleteRequest$3$label_3#2:
- call inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$3$label_6#2;
-
- inline$storm_IoCompleteRequest$3$label_6#2:
- goto inline$storm_IoCompleteRequest$3$label_6_true#2, inline$storm_IoCompleteRequest$3$label_6_false#2;
-
- inline$storm_IoCompleteRequest$3$label_6_false#2:
- assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$3$label_7#2;
-
- inline$storm_IoCompleteRequest$3$label_6_true#2:
- assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$3$label_8#2;
-
- inline$storm_IoCompleteRequest$3$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$3$anon3_Then#2, inline$storm_IoCompleteRequest$3$anon3_Else#2;
-
- inline$storm_IoCompleteRequest$3$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$3$anon1#2;
-
- inline$storm_IoCompleteRequest$3$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$3$label_9#2;
-
- inline$storm_IoCompleteRequest$3$label_9#2:
- goto inline$storm_IoCompleteRequest$3$label_9_true#2, inline$storm_IoCompleteRequest$3$label_9_false#2;
-
- inline$storm_IoCompleteRequest$3$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$3$label_10#2;
-
- inline$storm_IoCompleteRequest$3$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$3$label_1#2;
-
- inline$storm_IoCompleteRequest$3$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$3$label_7#2;
-
- inline$storm_IoCompleteRequest$3$label_7#2:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$3$label_1#2;
-
- inline$storm_IoCompleteRequest$3$label_1#2:
- goto inline$storm_IoCompleteRequest$3$Return#2;
-
- inline$storm_IoCompleteRequest$3$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$3$Return#2;
-
- inline$storm_IoCompleteRequest$3$Return#2:
- goto inline$I8xDeviceControl$0$label_30$1#2;
-
- inline$I8xDeviceControl$0$label_30$1#2:
- goto inline$I8xDeviceControl$0$anon14_Then#2, inline$I8xDeviceControl$0$anon14_Else#2;
-
- inline$I8xDeviceControl$0$anon14_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon9#2;
-
- inline$I8xDeviceControl$0$anon9#2:
- goto inline$I8xDeviceControl$0$label_33#2;
-
- inline$I8xDeviceControl$0$label_33#2:
- goto inline$I8xDeviceControl$0$label_1#2;
-
- inline$I8xDeviceControl$0$label_1#2:
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$anon14_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$anon10_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$Return#2:
- goto inline$dispatch$0$label_8$1#2;
-
- inline$dispatch$0$label_8$1#2:
- goto inline$dispatch$0$anon5_Then#2, inline$dispatch$0$anon5_Else#2;
-
- inline$dispatch$0$anon5_Else#2:
- assume !raiseException;
- goto inline$dispatch$0$anon3#2;
-
- inline$dispatch$0$anon3#2:
- goto inline$dispatch$0$label_11#2;
-
- inline$dispatch$0$label_11#2:
- goto inline$dispatch$0$label_1#2;
-
- inline$dispatch$0$label_1#2:
- goto inline$dispatch$0$Return#2;
-
- inline$dispatch$0$anon5_Then#2:
- assume raiseException;
- goto inline$dispatch$0$Return#2;
-
- inline$dispatch$0$anon4_Then#2:
- assume raiseException;
- goto inline$dispatch$0$Return#2;
-
- inline$dispatch$0$Return#2:
- goto label_23$1#2;
-
- label_23$1#2:
- goto anon21_Then#2, anon21_Else#2;
-
- anon21_Else#2:
- assume !(errorReached || !raiseException);
- goto anon11#2;
-
- anon21_Then#2:
- assume errorReached || !raiseException;
- __storm_thread_done_1 := true;
- goto anon11#2;
-
- anon11#2:
- k := k_old_0;
- tid := tid_old_0;
- goto label_26#2;
-
- label_26#2:
- goto label_27#2;
-
- label_27#2:
- k_old_1 := k;
- tid_old_1 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$cancel$0$Entry#2;
-
- inline$cancel$0$Entry#2:
- inline$cancel$0$$Irp$1$64.17$cancel_.1 := $irp$1$91.7$storm_main;
- goto inline$cancel$0$start#2;
-
- inline$cancel$0$start#2:
- inline$cancel$0$$Irp$1$64.17$cancel := inline$cancel$0$$Irp$1$64.17$cancel_.1;
- goto inline$cancel$0$label_3#2;
-
- inline$cancel$0$label_3#2:
- goto inline$storm_IoCancelIrp$0$Entry#2;
-
- inline$storm_IoCancelIrp$0$Entry#2:
- inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1 := inline$cancel$0$$Irp$1$64.17$cancel;
- goto inline$storm_IoCancelIrp$0$start#2;
-
- inline$storm_IoCancelIrp$0$start#2:
- inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1;
- goto inline$storm_IoCancelIrp$0$label_3#2;
-
- inline$storm_IoCancelIrp$0$label_3#2:
- goto inline$storm_IoCancelIrp$0$label_4#2;
-
- inline$storm_IoCancelIrp$0$label_4#2:
- Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_5#2;
-
- inline$storm_IoCancelIrp$0$label_5#2:
- __storm_atomic := true;
- goto inline$storm_IoCancelIrp$0$label_8#2;
-
- inline$storm_IoCancelIrp$0$label_8#2:
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
- call contextSwitch();
- inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$myVar_0;
- goto inline$storm_IoCancelIrp$0$label_9#2;
-
- inline$storm_IoCancelIrp$0$label_9#2:
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_10#2;
-
- inline$storm_IoCancelIrp$0$label_10#2:
- goto inline$storm_IoCancelIrp$0$anon11_Then#2, inline$storm_IoCancelIrp$0$anon11_Else#2;
-
- inline$storm_IoCancelIrp$0$anon11_Else#2:
- assume __storm_init;
- goto inline$storm_IoCancelIrp$0$anon1#2;
-
- inline$storm_IoCancelIrp$0$anon11_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoCancelIrp$0$anon1#2;
-
- inline$storm_IoCancelIrp$0$anon1#2:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_13#2;
-
- inline$storm_IoCancelIrp$0$label_13#2:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
- assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
- goto inline$storm_IoAcquireCancelSpinLock$0$Entry#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$Entry#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$start#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$start#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_3#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_3#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_4#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_4#2:
- goto inline$storm_getThreadID$2$Entry#2;
-
- inline$storm_getThreadID$2$Entry#2:
- goto inline$storm_getThreadID$2$anon0#2;
-
- inline$storm_getThreadID$2$anon0#2:
- inline$storm_getThreadID$2$tidRet := tid;
- goto inline$storm_getThreadID$2$Return#2;
-
- inline$storm_getThreadID$2$Return#2:
- inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$ := inline$storm_getThreadID$2$tidRet;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_7#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_7#2:
- inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock := inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_8#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_8#2:
- __storm_atomic := true;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_11#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2, inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2:
- assume k == 0 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_12#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_12#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2:
- assume k == 0 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_15#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_15#2:
- havoc raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#2:
- assume !raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon2#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon2#2:
- assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_16#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_16#2:
- cancelLockStatus_0 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_17#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_17#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#2:
- assume __storm_init;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon4#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon4#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon4#2:
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_1#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#2:
- assume raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$Return#2:
- goto inline$storm_IoCancelIrp$0$label_13$1#2;
-
- inline$storm_IoCancelIrp$0$label_13$1#2:
- goto inline$storm_IoCancelIrp$0$anon12_Then#2, inline$storm_IoCancelIrp$0$anon12_Else#2;
-
- inline$storm_IoCancelIrp$0$anon12_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon3#2;
-
- inline$storm_IoCancelIrp$0$anon3#2:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- goto inline$storm_IoCancelIrp$0$label_16#2;
-
- inline$storm_IoCancelIrp$0$label_16#2:
- goto inline$storm_IoCancelIrp$0$label_16_true#2, inline$storm_IoCancelIrp$0$label_16_false#2;
-
- inline$storm_IoCancelIrp$0$label_16_false#2:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == 0;
- goto inline$storm_IoCancelIrp$0$label_17#2;
-
- inline$storm_IoCancelIrp$0$label_17#2:
- goto inline$storm_IoCancelIrp$0$label_1#2;
-
- inline$storm_IoCancelIrp$0$label_16_true#2:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp != 0;
- goto inline$storm_IoCancelIrp$0$label_18#2;
-
- inline$storm_IoCancelIrp$0$label_18#2:
- goto inline$storm_IoCancelIrp$0$label_19#2;
-
- inline$storm_IoCancelIrp$0$label_19#2:
- call inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ := storm_nondet();
- goto inline$storm_IoCancelIrp$0$label_22#2;
-
- inline$storm_IoCancelIrp$0$label_22#2:
- goto inline$storm_IoCancelIrp$0$label_22_true#2, inline$storm_IoCancelIrp$0$label_22_false#2;
-
- inline$storm_IoCancelIrp$0$label_22_false#2:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ == 0;
- goto inline$storm_IoCancelIrp$0$label_23#2;
-
- inline$storm_IoCancelIrp$0$label_22_true#2:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ != 0;
- goto inline$storm_IoCancelIrp$0$label_26#2;
-
- inline$storm_IoCancelIrp$0$label_26#2:
- havoc raiseException;
- goto inline$storm_IoCancelIrp$0$anon14_Then#2, inline$storm_IoCancelIrp$0$anon14_Else#2;
-
- inline$storm_IoCancelIrp$0$anon14_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon7#2;
-
- inline$storm_IoCancelIrp$0$anon7#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_27#2;
-
- inline$storm_IoCancelIrp$0$label_27#2:
- goto inline$storm_IoCancelIrp$0$label_27_true#2, inline$storm_IoCancelIrp$0$label_27_false#2;
-
- inline$storm_IoCancelIrp$0$label_27_false#2:
- assume 0 == 0;
- goto inline$storm_IoCancelIrp$0$label_28#2;
-
- inline$storm_IoCancelIrp$0$label_28#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCancelIrp$0$label_1#2;
-
- inline$storm_IoCancelIrp$0$label_27_true#2:
- assume 0 != 0;
- goto inline$storm_IoCancelIrp$0$label_23#2;
-
- inline$storm_IoCancelIrp$0$label_23#2:
- goto inline$IoGetCurrentIrpStackLocation$5$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$5$Entry#2:
- inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
- goto inline$IoGetCurrentIrpStackLocation$5$start#2;
-
- inline$IoGetCurrentIrpStackLocation$5$start#2:
- inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
- goto inline$IoGetCurrentIrpStackLocation$5$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$5$label_3#2:
- inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$5$myVar_0;
- goto inline$IoGetCurrentIrpStackLocation$5$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$5$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$5$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$5$Return#2:
- inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$ := inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
- goto inline$storm_IoCancelIrp$0$label_23$1#2;
-
- inline$storm_IoCancelIrp$0$label_23$1#2:
- goto inline$storm_IoCancelIrp$0$anon13_Then#2, inline$storm_IoCancelIrp$0$anon13_Else#2;
-
- inline$storm_IoCancelIrp$0$anon13_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon5#2;
-
- inline$storm_IoCancelIrp$0$anon5#2:
- goto inline$storm_IoCancelIrp$0$label_31#2;
-
- inline$storm_IoCancelIrp$0$label_31#2:
- inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$;
- goto inline$storm_IoCancelIrp$0$label_32#2;
-
- inline$storm_IoCancelIrp$0$label_32#2:
- goto inline$storm_IoCancelIrp$0$label_32_icall_1#2;
-
- inline$storm_IoCancelIrp$0$label_32_icall_1#2:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == I8xSysButtonCancelRoutine;
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION(inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp)];
- call contextSwitch();
- goto inline$I8xSysButtonCancelRoutine$0$Entry#2;
-
- inline$I8xSysButtonCancelRoutine$0$Entry#2:
- inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$myVar_0;
- inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
- goto inline$I8xSysButtonCancelRoutine$0$start#2;
-
- inline$I8xSysButtonCancelRoutine$0$start#2:
- call inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine := __HAVOC_malloc(1);
- inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1;
- inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1;
- goto inline$I8xSysButtonCancelRoutine$0$label_3#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_3#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_4#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_4#2:
- inline$I8xSysButtonCancelRoutine$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine)];
- call contextSwitch();
- inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$myVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_5#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_5#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_6#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_6#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_7#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_7#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$1$Entry#2;
-
- inline$storm_KeAcquireSpinLock$1$Entry#2:
- inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
- goto inline$storm_KeAcquireSpinLock$1$start#2;
-
- inline$storm_KeAcquireSpinLock$1$start#2:
- inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
- goto inline$storm_KeAcquireSpinLock$1$label_3#2;
-
- inline$storm_KeAcquireSpinLock$1$label_3#2:
- goto inline$storm_KeAcquireSpinLock$1$label_4#2;
-
- inline$storm_KeAcquireSpinLock$1$label_4#2:
- goto inline$storm_getThreadID$3$Entry#2;
-
- inline$storm_getThreadID$3$Entry#2:
- goto inline$storm_getThreadID$3$anon0#2;
-
- inline$storm_getThreadID$3$anon0#2:
- inline$storm_getThreadID$3$tidRet := tid;
- goto inline$storm_getThreadID$3$Return#2;
-
- inline$storm_getThreadID$3$Return#2:
- inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$3$tidRet;
- goto inline$storm_KeAcquireSpinLock$1$label_4$1#2;
-
- inline$storm_KeAcquireSpinLock$1$label_4$1#2:
- goto inline$storm_KeAcquireSpinLock$1$label_7#2;
-
- inline$storm_KeAcquireSpinLock$1$label_7#2:
- inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$1$label_8#2;
-
- inline$storm_KeAcquireSpinLock$1$label_8#2:
- goto inline$storm_KeAcquireSpinLock$1$label_9#2;
-
- inline$storm_KeAcquireSpinLock$1$label_9#2:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$1$label_12#2;
-
- inline$storm_KeAcquireSpinLock$1$label_12#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon7_Then#2, inline$storm_KeAcquireSpinLock$1$anon7_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon7_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon1#2;
-
- inline$storm_KeAcquireSpinLock$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_13#2;
-
- inline$storm_KeAcquireSpinLock$1$label_13#2:
- goto inline$storm_KeAcquireSpinLock$1$label_13_true#2, inline$storm_KeAcquireSpinLock$1$label_13_false#2;
-
- inline$storm_KeAcquireSpinLock$1$label_13_false#2:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$1$label_14#2;
-
- inline$storm_KeAcquireSpinLock$1$label_14#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$1$label_1#2;
-
- inline$storm_KeAcquireSpinLock$1$label_13_true#2:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$1$label_17#2;
-
- inline$storm_KeAcquireSpinLock$1$label_17#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon8_Then#2, inline$storm_KeAcquireSpinLock$1$anon8_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon4#2;
-
- inline$storm_KeAcquireSpinLock$1$anon4#2:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
- goto inline$storm_KeAcquireSpinLock$1$label_18#2;
-
- inline$storm_KeAcquireSpinLock$1$label_18#2:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock];
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_19#2;
-
- inline$storm_KeAcquireSpinLock$1$label_19#2:
- goto inline$storm_KeAcquireSpinLock$1$anon9_Then#2, inline$storm_KeAcquireSpinLock$1$anon9_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon9_Else#2:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$1$anon6#2;
-
- inline$storm_KeAcquireSpinLock$1$anon9_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$1$anon6#2;
-
- inline$storm_KeAcquireSpinLock$1$anon6#2:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_1#2;
-
- inline$storm_KeAcquireSpinLock$1$label_1#2:
- goto inline$storm_KeAcquireSpinLock$1$Return#2;
-
- inline$storm_KeAcquireSpinLock$1$anon8_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$1$Return#2;
-
- inline$storm_KeAcquireSpinLock$1$anon7_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$1$Return#2;
-
- inline$storm_KeAcquireSpinLock$1$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_7$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_7$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon8_Then#2, inline$I8xSysButtonCancelRoutine$0$anon8_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon8_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon1#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon1#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_10#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_10#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_11#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_11#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_12#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_12#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$1$Entry#2;
-
- inline$storm_KeReleaseSpinLock$1$Entry#2:
- inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
- goto inline$storm_KeReleaseSpinLock$1$start#2;
-
- inline$storm_KeReleaseSpinLock$1$start#2:
- inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
- goto inline$storm_KeReleaseSpinLock$1$label_3#2;
-
- inline$storm_KeReleaseSpinLock$1$label_3#2:
- goto inline$storm_KeReleaseSpinLock$1$label_4#2;
-
- inline$storm_KeReleaseSpinLock$1$label_4#2:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$1$label_7#2;
-
- inline$storm_KeReleaseSpinLock$1$label_7#2:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$1$anon5_Then#2, inline$storm_KeReleaseSpinLock$1$anon5_Else#2;
-
- inline$storm_KeReleaseSpinLock$1$anon5_Else#2:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$1$anon1#2;
-
- inline$storm_KeReleaseSpinLock$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_8#2;
-
- inline$storm_KeReleaseSpinLock$1$label_8#2:
- goto inline$storm_getThreadID$4$Entry#2;
-
- inline$storm_getThreadID$4$Entry#2:
- goto inline$storm_getThreadID$4$anon0#2;
-
- inline$storm_getThreadID$4$anon0#2:
- inline$storm_getThreadID$4$tidRet := tid;
- goto inline$storm_getThreadID$4$Return#2;
-
- inline$storm_getThreadID$4$Return#2:
- inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$4$tidRet;
- goto inline$storm_KeReleaseSpinLock$1$label_8$1#2;
-
- inline$storm_KeReleaseSpinLock$1$label_8$1#2:
- goto inline$storm_KeReleaseSpinLock$1$label_11#2;
-
- inline$storm_KeReleaseSpinLock$1$label_11#2:
- goto inline$storm_KeReleaseSpinLock$1$label_11_true#2, inline$storm_KeReleaseSpinLock$1$label_11_false#2;
-
- inline$storm_KeReleaseSpinLock$1$label_11_false#2:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$1$label_12#2;
-
- inline$storm_KeReleaseSpinLock$1$label_12#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$1$label_1#2;
-
- inline$storm_KeReleaseSpinLock$1$label_11_true#2:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$1$label_15#2;
-
- inline$storm_KeReleaseSpinLock$1$label_15#2:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_16#2;
-
- inline$storm_KeReleaseSpinLock$1$label_16#2:
- goto inline$storm_KeReleaseSpinLock$1$anon6_Then#2, inline$storm_KeReleaseSpinLock$1$anon6_Else#2;
-
- inline$storm_KeReleaseSpinLock$1$anon6_Else#2:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$1$anon4#2;
-
- inline$storm_KeReleaseSpinLock$1$anon6_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$1$anon4#2;
-
- inline$storm_KeReleaseSpinLock$1$anon4#2:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_1#2;
-
- inline$storm_KeReleaseSpinLock$1$label_1#2:
- goto inline$storm_KeReleaseSpinLock$1$Return#2;
-
- inline$storm_KeReleaseSpinLock$1$anon5_Then#2:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$1$Return#2;
-
- inline$storm_KeReleaseSpinLock$1$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_12$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_12$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon9_Then#2, inline$I8xSysButtonCancelRoutine$0$anon9_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon9_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon3#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon3#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_15#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_15#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$storm_IoReleaseCancelSpinLock$0$Entry#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$Entry#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$start#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$start#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$label_3#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_3#2:
- __storm_atomic := true;
- goto inline$storm_IoReleaseCancelSpinLock$0$label_6#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_6#2:
- goto inline$storm_getThreadID$5$Entry#2;
-
- inline$storm_getThreadID$5$Entry#2:
- goto inline$storm_getThreadID$5$anon0#2;
-
- inline$storm_getThreadID$5$anon0#2:
- inline$storm_getThreadID$5$tidRet := tid;
- goto inline$storm_getThreadID$5$Return#2;
-
- inline$storm_getThreadID$5$Return#2:
- inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$ := inline$storm_getThreadID$5$tidRet;
- goto inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$label_9#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_9#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2, inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2:
- assume k == 0 ==> !INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_10#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2:
- assume k == 0 ==> INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_13#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_13#2:
- cancelLockStatus_0 := 0;
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_14#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_14#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$anon3_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon3_Else#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon3_Else#2:
- assume __storm_init;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon2#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon3_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon2#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon2#2:
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_1#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$Return#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_15$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_15$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon10_Then#2, inline$I8xSysButtonCancelRoutine$0$anon10_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon10_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon5#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon5#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_18#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_18#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_19#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_19#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_20#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_20#2:
- goto inline$storm_IoCompleteRequest$4$Entry#2;
-
- inline$storm_IoCompleteRequest$4$Entry#2:
- inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine;
- goto inline$storm_IoCompleteRequest$4$start#2;
-
- inline$storm_IoCompleteRequest$4$start#2:
- inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$4$label_3#2;
-
- inline$storm_IoCompleteRequest$4$label_3#2:
- call inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$4$label_6#2;
-
- inline$storm_IoCompleteRequest$4$label_6#2:
- goto inline$storm_IoCompleteRequest$4$label_6_true#2, inline$storm_IoCompleteRequest$4$label_6_false#2;
-
- inline$storm_IoCompleteRequest$4$label_6_false#2:
- assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$4$label_7#2;
-
- inline$storm_IoCompleteRequest$4$label_6_true#2:
- assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$4$label_8#2;
-
- inline$storm_IoCompleteRequest$4$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$4$anon3_Then#2, inline$storm_IoCompleteRequest$4$anon3_Else#2;
-
- inline$storm_IoCompleteRequest$4$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$4$anon1#2;
-
- inline$storm_IoCompleteRequest$4$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$4$label_9#2;
-
- inline$storm_IoCompleteRequest$4$label_9#2:
- goto inline$storm_IoCompleteRequest$4$label_9_true#2, inline$storm_IoCompleteRequest$4$label_9_false#2;
-
- inline$storm_IoCompleteRequest$4$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$4$label_10#2;
-
- inline$storm_IoCompleteRequest$4$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$4$label_1#2;
-
- inline$storm_IoCompleteRequest$4$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$4$label_7#2;
-
- inline$storm_IoCompleteRequest$4$label_7#2:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$4$label_1#2;
-
- inline$storm_IoCompleteRequest$4$label_1#2:
- goto inline$storm_IoCompleteRequest$4$Return#2;
-
- inline$storm_IoCompleteRequest$4$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$4$Return#2;
-
- inline$storm_IoCompleteRequest$4$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_20$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_20$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon11_Then#2, inline$I8xSysButtonCancelRoutine$0$anon11_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon11_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon7#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon7#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_1#2:
- call __HAVOC_free(inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine);
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon11_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon10_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon9_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon8_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$Return#2:
- goto inline$storm_IoCancelIrp$0$label_32_icall_1$1#2;
-
- inline$storm_IoCancelIrp$0$label_32_icall_1$1#2:
- goto inline$storm_IoCancelIrp$0$anon15_Then#2, inline$storm_IoCancelIrp$0$anon15_Else#2;
-
- inline$storm_IoCancelIrp$0$anon15_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon10#2;
-
- inline$storm_IoCancelIrp$0$anon10#2:
- goto inline$storm_IoCancelIrp$0$label_32_icall_return#2;
-
- inline$storm_IoCancelIrp$0$label_32_icall_return#2:
- goto inline$storm_IoCancelIrp$0$label_35#2;
-
- inline$storm_IoCancelIrp$0$label_35#2:
- goto inline$storm_IoCancelIrp$0$label_1#2;
-
- inline$storm_IoCancelIrp$0$label_1#2:
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon15_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon13_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon14_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon12_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$Return#2:
- goto inline$cancel$0$label_3$1#2;
-
- inline$cancel$0$label_3$1#2:
- goto inline$cancel$0$anon2_Then#2, inline$cancel$0$anon2_Else#2;
-
- inline$cancel$0$anon2_Else#2:
- assume !raiseException;
- goto inline$cancel$0$anon1#2;
-
- inline$cancel$0$anon1#2:
- goto inline$cancel$0$label_1#2;
-
- inline$cancel$0$label_1#2:
- goto inline$cancel$0$Return#2;
-
- inline$cancel$0$anon2_Then#2:
- assume raiseException;
- goto inline$cancel$0$Return#2;
-
- inline$cancel$0$Return#2:
- goto label_27$1#2;
-
- label_27$1#2:
- goto anon22_Then#2, anon22_Else#2;
-
- anon22_Else#2:
- assume !(errorReached || !raiseException);
- goto anon13#2;
-
- anon22_Then#2:
- assume errorReached || !raiseException;
- __storm_thread_done_2 := true;
- goto anon13#2;
-
- anon13#2:
- k := k_old_1;
- tid := tid_old_1;
- goto label_30#2;
-
- label_30#2:
- goto label_31#2;
-
- label_31#2:
- k_old_2 := k;
- tid_old_2 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$dpc$0$Entry#2;
-
- inline$dpc$0$Entry#2:
- goto inline$dpc$0$start#2;
-
- inline$dpc$0$start#2:
- goto inline$dpc$0$label_1#2;
-
- inline$dpc$0$label_1#2:
- goto inline$dpc$0$Return#2;
-
- inline$dpc$0$Return#2:
- goto label_31$1#2;
-
- label_31$1#2:
- goto anon23_Then#2, anon23_Else#2;
-
- anon23_Else#2:
- assume !(errorReached || !raiseException);
- goto anon15#2;
-
- anon23_Then#2:
- assume errorReached || !raiseException;
- __storm_thread_done_3 := true;
- goto anon15#2;
-
- anon15#2:
- k := k_old_2;
- tid := tid_old_2;
- goto label_1#2;
-
- label_1#2:
- assert !errorReached;
- return;
-
- anon20_Then#2:
- assume raiseException;
- return;
-
- anon19_Then#2:
- assume raiseException;
- return;
-
- anon18_Then#2:
- assume raiseException;
- return;
-
- anon17_Then#2:
- assume raiseException;
- return;
-
- anon16_Then#2:
- assume raiseException;
- return;
-}
-
-
-
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var __storm_thread_done_0 : bool;
+var __storm_thread_done_1 : bool;
+var __storm_thread_done_2 : bool;
+var __storm_thread_done_3 : bool;
+
+var raiseException : bool;
+var errorReached : bool;
+var k : int;
+var __storm_atomic : bool;
+var __storm_init : bool;
+var tid : int;
+var tidCount : int;
+
+procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tidRet:int)
+{
+ tidRet := tid;
+ return;
+}
+
+
+procedure storm_context_0();
+
+procedure contextSwitch();
+modifies k;
+ensures __storm_atomic ==> old(k) == k;
+ensures(old(k) <= k);
+ensures(k < 1);
+
+
+
+// Memory model
+
+// Mutable
+var alloc:int;
+
+// Immutable
+
+var Mem_0_T.CancelRoutine__IRP : [int]int;
+var Mem_0_T.Cancel__IRP : [int]int;
+var Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
+var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_0_T.DeviceObject__IO_STACK_LOCATION : [int]int;
+
+
+// Field declarations
+
+
+// Type declarations
+
+
+// Field offset definitions
+
+function AssociatedIrp__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == x + 12);
+axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function COMMON_DATA__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelIrql__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
+axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelRoutine__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
+axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Cancel__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
+axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
+axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Context__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
+axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Control__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
+axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControllerData__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == x + 0);
+axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentLocation__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
+axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentStackLocation___unnamed_4_3c640f23(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == x + 0);
+axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceIoControl___unnamed_16_afe81cff(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == x + 0);
+axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceObject__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
+axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(int) returns (int);
+
+
+//axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == x + 2);
+axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == INT_ADD(x, 2));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Information__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
+axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Initialized_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == x + 323);
+axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == INT_ADD(x, 323));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function InterruptDescriptor_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == x + 300);
+axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == INT_ADD(x, 300));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function InterruptObject_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == x + 4);
+axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IoControlCode___unnamed_16_ae81ad04(int) returns (int);
+
+
+//axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == x + 8);
+axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IoStatus__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
+axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Irp__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == x + 8);
+axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IsKeyboard_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == x + 325);
+axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == INT_ADD(x, 325));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Item__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == x + 0);
+axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Item__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == x + 0);
+axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function KeyboardExtension__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == x + 8);
+axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function KeyboardPowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == x + 8);
+axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MajorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
+axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MakeCode__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == x + 4);
+axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MinorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
+axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MouseExtension__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MousePowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == x + 4);
+axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function OutputBufferLength___unnamed_16_ae81ad04(int) returns (int);
+
+
+//axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == x + 0);
+axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function OutstandingPowerIrp_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == x + 44);
+axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == INT_ADD(x, 44));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Overlay___unnamed_48_e2bbfb0b(int) returns (int);
+
+
+//axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == x + 0);
+axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Parameters__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
+axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PendingReturned__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
+axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PnpDeviceState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == x + 316);
+axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == INT_ADD(x, 316));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerCaps__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == x + 328);
+axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 328));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerEvent__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == x + 329);
+axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 329));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerFlags__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == x + 40);
+axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == INT_ADD(x, 40));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerSpinLock__CONTROLLER_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == x + 116);
+axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == INT_ADD(x, 116));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == x + 48);
+axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == INT_ADD(x, 48));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Power___unnamed_16_afe81cff(int) returns (int);
+
+
+//axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == x + 0);
+axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function RemoveLock_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == x + 20);
+axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Self_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == x + 0);
+axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ShutdownType_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == x + 56);
+axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == INT_ADD(x, 56));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ShutdownType___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == x + 12);
+axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Started_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == x + 326);
+axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == INT_ADD(x, 326));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function State___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == x + 8);
+axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Status___unnamed_4_d4b13373(int) returns (int);
+
+
+//axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == x + 0);
+axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == x + 332);
+axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 332));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == x + 368);
+axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 368));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemBuffer___unnamed_4_99f86ad5(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == x + 0);
+axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == x + 52);
+axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == INT_ADD(x, 52));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Tail__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
+axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function TopOfStack_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == x + 12);
+axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Type___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == x + 4);
+axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_12_41c62b26___unnamed_40_32307de2(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == x + 24);
+axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_4_3c640f23___unnamed_12_41c62b26(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == x + 8);
+axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_4_d4b13373__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+
+///////////////////////////////////
+// will be replaced by:
+// "//" when using bv mode
+// "" when using int mode
+// main reason is to avoid using bv for constants
+// or avoid translating lines that are complex or unsound
+//////////////////////////////////
+
+////////////////////////////////////////////
+/////// functions for int type /////////////
+// Theorem prover does not see INT_ADD etc.
+////////////////////////////////////////////
+function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
+function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
+
+function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
+function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
+function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
+function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
+function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
+function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
+
+
+////////////////////////////////////////////
+/////// functions for bv32 type /////////////
+// Theorem prover does not see INT_ADD etc.
+// we are treating unsigned ops now
+////////////////////////////////////////////
+function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
+function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
+
+function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
+
+//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
+//only enabled with bv theory
+// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
+
+//////////////////////////////////
+// Generic C Arithmetic operations
+/////////////////////////////////
+
+//Is this sound for bv32?
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+ axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+ INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
+
+//we just keep this axiom for size = 1
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
+
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
+
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
+
+function MULT(a:int, b:int) returns (int); // a*b
+//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+// Not sure if these axioms hold for BV too, just commet them for BV
+
+
+
+//uninterpreted binary op
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+
+//////////////////////////////////////////
+//// Bitwise ops (uninterpreted, used with int)
+//////////////////////////////////////////
+
+
+ function BIT_BAND(a:int, b:int) returns (x:int);
+
+
+ function BIT_BOR(a:int, b:int) returns (x:int);
+ function BIT_BXOR(a:int, b:int) returns (x:int);
+ function BIT_BNOT(a:int) returns (int);
+
+
+
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function PTR_NOT(a:int) returns (int);
+axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
+axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+
+function NewAlloc(x:int, y:int) returns (z:int);
+
+//Comments below make HAVOC_malloc deterministic
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+//requires obj_size >= 0;
+free requires INT_GEQ(obj_size, 0);
+modifies alloc;
+ensures new == old(alloc);
+//ensures alloc > new + obj_size;
+ensures INT_GT(alloc, INT_ADD(new, obj_size));
+//ensures alloc == NewAlloc(old(alloc), obj_size);
+
+
+
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+
+/*
+//bv functions
+function bv8ToInt(bv8) returns (int);
+function bv16ToInt(bv16) returns (int);
+function bv32ToInt(bv32) returns (int);
+function bv64ToInt(bv64) returns (int);
+
+function intToBv8(int) returns (bv8);
+function intToBv16(int) returns (bv16);
+function intToBv32(int) returns (bv32);
+function intToBv64(int) returns (bv64);
+
+axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
+axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
+axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
+axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
+
+axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
+axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
+axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
+axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
+*/
+
+
+
+var Res_0_COMPLETED : [int]int;
+var Res_KERNEL_SOURCE:[int]int;
+var Res_0_LOCK : [int]int;
+var Res_PROBED:[int]int;
+
+//Pointer constants
+
+//Function pointer constants
+
+
+const unique Globals : int;
+axiom(Globals != 0);
+const unique I8xCompleteSysButtonEventWorker : int;
+axiom(I8xCompleteSysButtonEventWorker != 0);
+const unique I8xPowerUpToD0Complete : int;
+axiom(I8xPowerUpToD0Complete != 0);
+const unique I8xReinitializeHardware : int;
+axiom(I8xReinitializeHardware != 0);
+const unique I8xSysButtonCancelRoutine : int;
+axiom(I8xSysButtonCancelRoutine != 0);
+var cancelLockStatus_0 : int;
+
+const unique hdevobj : int;
+axiom(hdevobj != 0);
+// the set of constants for 64 bit integers that Boogie doesn't parse
+const unique BOOGIE_LARGE_INT_2147483648:int;
+
+
+
+procedure DRIVER_CANCEL(a0:int, a1:int);
+
+
+
+procedure ExFreePoolWithTag(a0:int, a1:int);
+
+
+
+procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
+
+
+
+procedure IoAllocateWorkItem(a0:int) returns (ret:int);
+
+
+
+procedure IoDisconnectInterrupt(a0:int);
+
+
+
+procedure IoFreeWorkItem(a0:int);
+
+
+
+procedure IoQueueWorkItem(a0:int, a1:int, a2:int, a3:int);
+
+
+
+procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
+
+
+
+procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure PoStartNextPowerIrp(a0:int);
+
+
+
+procedure __PREfastPagedCode();
+
+
+
+procedure __storm_assert_dummy();
+
+
+
+procedure __storm_atomic_begin_dummy();
+
+
+
+procedure __storm_atomic_end_dummy();
+
+
+
+procedure memcpy(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure memset(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+
+
+
+procedure storm_nondet() returns (ret:int);
+
+
+
+procedure storm_main();
+ free requires 0 < alloc;
+ free requires 0 < tid;
+ free requires tid < tidCount;
+ requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
+ modifies tidCount, alloc, raiseException, __storm_init, __storm_atomic, errorReached, cancelLockStatus_0, __storm_thread_done_3, __storm_thread_done_2, __storm_thread_done_1, __storm_thread_done_0, tid, k, Res_0_COMPLETED, Res_KERNEL_SOURCE, Res_0_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_0_T.Cancel__IRP, Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.DeviceObject__IO_STACK_LOCATION;
+
+
+
+implementation storm_main()
+{
+ var inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, $irpSp$2$92.21$storm_main: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp: int, inline$storm_getThreadID$5$tidRet: int, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$: int, inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$: int, inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$5$myVar_0: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1: int, inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, $result.IoGetCurrentIrpStackLocation$99.38$2$: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$dispatch$0$$Irp$1$8.19$dispatch_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$storm_getThreadID$0$tidRet: int, inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver: int, inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$: int, inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0: int, inline$storm_getThreadID$1$tidRet: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$cancel$0$$Irp$1$64.17$cancel: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$cancel$0$$Irp$1$64.17$cancel_.1: int, $irp$1$91.7$storm_main: int, inline$myInitDriver$0$myNondetVar_0: int, inline$myInitDriver$0$myNondetVar_1: int, inline$storm_getThreadID$4$tidRet: int, inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$: int, inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$: int, inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$: int, inline$I8xSysButtonCancelRoutine$0$myVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest: int, k_old_2: int, inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine: int, inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$: int, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$: int, inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1: int, k_old_1: int, k_old_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$myVar_0: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1: int, inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine: int, inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_1: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_0: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$: int, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$: int, inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0: int, inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine: int, inline$I8xDeviceControl$0$myVar_0: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_IoSetCancelRoutine$1$myVar_0: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1: int, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1: int, inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock: int, inline$storm_getThreadID$3$tidRet: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$: int, inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock: int, inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$: int, inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_getThreadID$2$tidRet: int, inline$I8xDeviceControl$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation: int, inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent: int, inline$dispatch$0$$Irp$1$8.19$dispatch: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp: int, $result.storm_IoAllocateIrp$96.21$1$: int, tidCount_old: int, inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1: int, inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xCompleteSysButtonIrp$0$myNondetVar_0: int, inline$myInitDriver$0$myVar_0: int, tid_old_1: int, tid_old_0: int, tid_old_2: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1: int, inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$: int, inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$: int;
+
+ start#2:
+ __storm_thread_done_0 := false;
+ __storm_thread_done_1 := false;
+ __storm_thread_done_2 := false;
+ __storm_thread_done_3 := false;
+ k := 0;
+ errorReached := false;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto label_3#2;
+
+ label_3#2:
+ goto label_4#2;
+
+ label_4#2:
+ goto label_5#2;
+
+ label_5#2:
+ cancelLockStatus_0 := 0;
+ call contextSwitch();
+ goto label_6#2;
+
+ label_6#2:
+ goto inline$storm_IoAllocateIrp$0$Entry#2;
+
+ inline$storm_IoAllocateIrp$0$Entry#2:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1 := 2;
+ goto inline$storm_IoAllocateIrp$0$start#2;
+
+ inline$storm_IoAllocateIrp$0$start#2:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1;
+ goto inline$storm_IoAllocateIrp$0$label_3#2;
+
+ inline$storm_IoAllocateIrp$0$label_3#2:
+ goto inline$storm_IoAllocateIrp$0$label_4#2;
+
+ inline$storm_IoAllocateIrp$0$label_4#2:
+ goto inline$storm_IoAllocateIrp$0$label_5#2;
+
+ inline$storm_IoAllocateIrp$0$label_5#2:
+ call inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ := storm_nondet();
+ goto inline$storm_IoAllocateIrp$0$label_8#2;
+
+ inline$storm_IoAllocateIrp$0$label_8#2:
+ goto inline$storm_IoAllocateIrp$0$label_8_case_0#2, inline$storm_IoAllocateIrp$0$label_8_case_1#2;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_1#2:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ == 0;
+ goto inline$storm_IoAllocateIrp$0$label_10#2;
+
+ inline$storm_IoAllocateIrp$0$label_10#2:
+ __storm_atomic := true;
+ goto inline$storm_IoAllocateIrp$0$label_13#2;
+
+ inline$storm_IoAllocateIrp$0$label_13#2:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$ := __HAVOC_malloc(112);
+ goto inline$storm_IoAllocateIrp$0$label_16#2;
+
+ inline$storm_IoAllocateIrp$0$label_16#2:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$;
+ goto inline$storm_IoAllocateIrp$0$label_17#2;
+
+ inline$storm_IoAllocateIrp$0$label_17#2:
+ Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_18#2;
+
+ inline$storm_IoAllocateIrp$0$label_18#2:
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_19#2;
+
+ inline$storm_IoAllocateIrp$0$label_19#2:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_20#2;
+
+ inline$storm_IoAllocateIrp$0$label_20#2:
+ havoc raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon6_Then#2, inline$storm_IoAllocateIrp$0$anon6_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon6_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon1#2;
+
+ inline$storm_IoAllocateIrp$0$anon1#2:
+ assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp);
+ goto inline$storm_IoAllocateIrp$0$label_21#2;
+
+ inline$storm_IoAllocateIrp$0$label_21#2:
+ inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp, 36);
+ goto inline$storm_IoAllocateIrp$0$label_22#2;
+
+ inline$storm_IoAllocateIrp$0$label_22#2:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
+ goto inline$storm_IoAllocateIrp$0$label_25#2;
+
+ inline$storm_IoAllocateIrp$0$label_25#2:
+ inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$;
+ goto inline$storm_IoAllocateIrp$0$label_26#2;
+
+ inline$storm_IoAllocateIrp$0$label_26#2:
+ Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_27#2;
+
+ inline$storm_IoAllocateIrp$0$label_27#2:
+ goto inline$IoGetNextIrpStackLocation$0$Entry#2;
+
+ inline$IoGetNextIrpStackLocation$0$Entry#2:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
+ goto inline$IoGetNextIrpStackLocation$0$start#2;
+
+ inline$IoGetNextIrpStackLocation$0$start#2:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation := inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1;
+ goto inline$IoGetNextIrpStackLocation$0$label_3#2;
+
+ inline$IoGetNextIrpStackLocation$0$label_3#2:
+ inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
+ call contextSwitch();
+ inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$ := MINUS_LEFT_PTR(inline$IoGetNextIrpStackLocation$0$myVar_0, 36, 1);
+ goto inline$IoGetNextIrpStackLocation$0$label_1#2;
+
+ inline$IoGetNextIrpStackLocation$0$label_1#2:
+ goto inline$IoGetNextIrpStackLocation$0$Return#2;
+
+ inline$IoGetNextIrpStackLocation$0$Return#2:
+ inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$ := inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$;
+ goto inline$storm_IoAllocateIrp$0$label_27$1#2;
+
+ inline$storm_IoAllocateIrp$0$label_27$1#2:
+ goto inline$storm_IoAllocateIrp$0$anon7_Then#2, inline$storm_IoAllocateIrp$0$anon7_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon7_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon3#2;
+
+ inline$storm_IoAllocateIrp$0$anon3#2:
+ goto inline$storm_IoAllocateIrp$0$label_30#2;
+
+ inline$storm_IoAllocateIrp$0$label_30#2:
+ inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$;
+ goto inline$storm_IoAllocateIrp$0$label_31#2;
+
+ inline$storm_IoAllocateIrp$0$label_31#2:
+ goto inline$storm_IoAllocateIrp$0$label_32#2;
+
+ inline$storm_IoAllocateIrp$0$label_32#2:
+ goto inline$storm_IoAllocateIrp$0$label_33#2;
+
+ inline$storm_IoAllocateIrp$0$label_33#2:
+ goto inline$storm_IoAllocateIrp$0$anon8_Then#2, inline$storm_IoAllocateIrp$0$anon8_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon8_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoAllocateIrp$0$anon5#2;
+
+ inline$storm_IoAllocateIrp$0$anon8_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAllocateIrp$0$anon5#2;
+
+ inline$storm_IoAllocateIrp$0$anon5#2:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_36#2;
+
+ inline$storm_IoAllocateIrp$0$anon7_Then#2:
+ assume raiseException;
+ goto inline$storm_IoAllocateIrp$0$Return#2;
+
+ inline$storm_IoAllocateIrp$0$anon6_Then#2:
+ assume raiseException;
+ goto inline$storm_IoAllocateIrp$0$Return#2;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_0#2:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ != 0;
+ goto inline$storm_IoAllocateIrp$0$label_9#2;
+
+ inline$storm_IoAllocateIrp$0$label_9#2:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0;
+ goto inline$storm_IoAllocateIrp$0$label_36#2;
+
+ inline$storm_IoAllocateIrp$0$label_36#2:
+ inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
+ goto inline$storm_IoAllocateIrp$0$label_1#2;
+
+ inline$storm_IoAllocateIrp$0$label_1#2:
+ goto inline$storm_IoAllocateIrp$0$Return#2;
+
+ inline$storm_IoAllocateIrp$0$Return#2:
+ $result.storm_IoAllocateIrp$96.21$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$;
+ goto label_6$1#2;
+
+ label_6$1#2:
+ goto anon16_Then#2, anon16_Else#2;
+
+ anon16_Else#2:
+ assume !raiseException;
+ goto anon1#2;
+
+ anon1#2:
+ goto label_9#2;
+
+ label_9#2:
+ $irp$1$91.7$storm_main := $result.storm_IoAllocateIrp$96.21$1$;
+ goto label_10#2;
+
+ label_10#2:
+ havoc raiseException;
+ goto anon17_Then#2, anon17_Else#2;
+
+ anon17_Else#2:
+ assume !raiseException;
+ goto anon3#2;
+
+ anon3#2:
+ assume INT_NEQ($irp$1$91.7$storm_main, 0);
+ goto label_11#2;
+
+ label_11#2:
+ goto inline$IoSetNextIrpStackLocation$0$Entry#2;
+
+ inline$IoSetNextIrpStackLocation$0$Entry#2:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1 := $irp$1$91.7$storm_main;
+ goto inline$IoSetNextIrpStackLocation$0$start#2;
+
+ inline$IoSetNextIrpStackLocation$0$start#2:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation := inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1;
+ goto inline$IoSetNextIrpStackLocation$0$label_3#2;
+
+ inline$IoSetNextIrpStackLocation$0$label_3#2:
+ havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 1, 1);
+ goto inline$IoSetNextIrpStackLocation$0$label_4#2;
+
+ inline$IoSetNextIrpStackLocation$0$label_4#2:
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myVar_0, 36, 1);
+ Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$0$label_1#2;
+
+ inline$IoSetNextIrpStackLocation$0$label_1#2:
+ goto inline$IoSetNextIrpStackLocation$0$Return#2;
+
+ inline$IoSetNextIrpStackLocation$0$Return#2:
+ goto label_11$1#2;
+
+ label_11$1#2:
+ goto anon18_Then#2, anon18_Else#2;
+
+ anon18_Else#2:
+ assume !raiseException;
+ goto anon5#2;
+
+ anon5#2:
+ goto label_14#2;
+
+ label_14#2:
+ goto inline$IoGetCurrentIrpStackLocation$0$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$Entry#2:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := $irp$1$91.7$storm_main;
+ goto inline$IoGetCurrentIrpStackLocation$0$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$start#2:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_3#2:
+ inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$0$myVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$0$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$Return#2:
+ $result.IoGetCurrentIrpStackLocation$99.38$2$ := inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
+ goto label_14$1#2;
+
+ label_14$1#2:
+ goto anon19_Then#2, anon19_Else#2;
+
+ anon19_Else#2:
+ assume !raiseException;
+ goto anon7#2;
+
+ anon7#2:
+ goto label_17#2;
+
+ label_17#2:
+ $irpSp$2$92.21$storm_main := $result.IoGetCurrentIrpStackLocation$99.38$2$;
+ goto label_18#2;
+
+ label_18#2:
+ Mem_0_T.DeviceObject__IO_STACK_LOCATION := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
+ call contextSwitch();
+ goto label_19#2;
+
+ label_19#2:
+ goto inline$myInitDriver$0$Entry#2;
+
+ inline$myInitDriver$0$Entry#2:
+ goto inline$myInitDriver$0$start#2;
+
+ inline$myInitDriver$0$start#2:
+ goto inline$myInitDriver$0$label_3#2;
+
+ inline$myInitDriver$0$label_3#2:
+ goto inline$myInitDriver$0$label_4#2;
+
+ inline$myInitDriver$0$label_4#2:
+ inline$myInitDriver$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
+ call contextSwitch();
+ inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver := inline$myInitDriver$0$myVar_0;
+ goto inline$myInitDriver$0$label_5#2;
+
+ inline$myInitDriver$0$label_5#2:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ havoc inline$myInitDriver$0$myNondetVar_1;
+ assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
+ goto inline$storm_KeInitializeSpinLock$0$Entry#2;
+
+ inline$storm_KeInitializeSpinLock$0$Entry#2:
+ inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver);
+ goto inline$storm_KeInitializeSpinLock$0$start#2;
+
+ inline$storm_KeInitializeSpinLock$0$start#2:
+ inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1;
+ goto inline$storm_KeInitializeSpinLock$0$label_3#2;
+
+ inline$storm_KeInitializeSpinLock$0$label_3#2:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := 0];
+ call contextSwitch();
+ goto inline$storm_KeInitializeSpinLock$0$label_1#2;
+
+ inline$storm_KeInitializeSpinLock$0$label_1#2:
+ goto inline$storm_KeInitializeSpinLock$0$Return#2;
+
+ inline$storm_KeInitializeSpinLock$0$Return#2:
+ goto inline$myInitDriver$0$label_5$1#2;
+
+ inline$myInitDriver$0$label_5$1#2:
+ goto inline$myInitDriver$0$anon2_Then#2, inline$myInitDriver$0$anon2_Else#2;
+
+ inline$myInitDriver$0$anon2_Else#2:
+ assume !raiseException;
+ goto inline$myInitDriver$0$anon1#2;
+
+ inline$myInitDriver$0$anon1#2:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ goto inline$myInitDriver$0$label_1#2;
+
+ inline$myInitDriver$0$label_1#2:
+ goto inline$myInitDriver$0$Return#2;
+
+ inline$myInitDriver$0$anon2_Then#2:
+ assume raiseException;
+ goto inline$myInitDriver$0$Return#2;
+
+ inline$myInitDriver$0$Return#2:
+ goto label_19$1#2;
+
+ label_19$1#2:
+ goto anon20_Then#2, anon20_Else#2;
+
+ anon20_Else#2:
+ assume !raiseException;
+ goto anon9#2;
+
+ anon9#2:
+ goto label_22#2;
+
+ label_22#2:
+ goto label_23#2;
+
+ label_23#2:
+ k_old_0 := k;
+ tid_old_0 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$dispatch$0$Entry#2;
+
+ inline$dispatch$0$Entry#2:
+ inline$dispatch$0$$Irp$1$8.19$dispatch_.1 := $irp$1$91.7$storm_main;
+ goto inline$dispatch$0$start#2;
+
+ inline$dispatch$0$start#2:
+ inline$dispatch$0$$Irp$1$8.19$dispatch := inline$dispatch$0$$Irp$1$8.19$dispatch_.1;
+ goto inline$dispatch$0$label_3#2;
+
+ inline$dispatch$0$label_3#2:
+ goto inline$dispatch$0$label_4#2;
+
+ inline$dispatch$0$label_4#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_3#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$1$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$Return#2:
+ goto inline$dispatch$0$label_4$1#2;
+
+ inline$dispatch$0$label_4$1#2:
+ goto inline$dispatch$0$anon4_Then#2, inline$dispatch$0$anon4_Else#2;
+
+ inline$dispatch$0$anon4_Else#2:
+ assume !raiseException;
+ goto inline$dispatch$0$anon1#2;
+
+ inline$dispatch$0$anon1#2:
+ goto inline$dispatch$0$label_7#2;
+
+ inline$dispatch$0$label_7#2:
+ goto inline$dispatch$0$label_8#2;
+
+ inline$dispatch$0$label_8#2:
+ goto inline$I8xDeviceControl$0$Entry#2;
+
+ inline$I8xDeviceControl$0$Entry#2:
+ inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1 := hdevobj;
+ inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1 := inline$dispatch$0$$Irp$1$8.19$dispatch;
+ goto inline$I8xDeviceControl$0$start#2;
+
+ inline$I8xDeviceControl$0$start#2:
+ inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl := inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1;
+ inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1;
+ goto inline$I8xDeviceControl$0$label_3#2;
+
+ inline$I8xDeviceControl$0$label_3#2:
+ goto inline$I8xDeviceControl$0$label_4#2;
+
+ inline$I8xDeviceControl$0$label_4#2:
+ goto inline$I8xDeviceControl$0$label_5#2;
+
+ inline$I8xDeviceControl$0$label_5#2:
+ goto inline$I8xDeviceControl$0$label_6#2;
+
+ inline$I8xDeviceControl$0$label_6#2:
+ goto inline$I8xDeviceControl$0$label_7#2;
+
+ inline$I8xDeviceControl$0$label_7#2:
+ call __PREfastPagedCode();
+ goto inline$I8xDeviceControl$0$anon10_Then#2, inline$I8xDeviceControl$0$anon10_Else#2;
+
+ inline$I8xDeviceControl$0$anon10_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon1#2;
+
+ inline$I8xDeviceControl$0$anon1#2:
+ goto inline$I8xDeviceControl$0$label_10#2;
+
+ inline$I8xDeviceControl$0$label_10#2:
+ inline$I8xDeviceControl$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl)];
+ call contextSwitch();
+ inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl := inline$I8xDeviceControl$0$myVar_0;
+ goto inline$I8xDeviceControl$0$label_11#2;
+
+ inline$I8xDeviceControl$0$label_11#2:
+ goto inline$I8xDeviceControl$0$label_11_true#2, inline$I8xDeviceControl$0$label_11_false#2;
+
+ inline$I8xDeviceControl$0$label_11_false#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
+ goto inline$I8xDeviceControl$0$label_12#2;
+
+ inline$I8xDeviceControl$0$label_11_true#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
+ goto inline$I8xDeviceControl$0$label_13#2;
+
+ inline$I8xDeviceControl$0$label_13#2:
+ goto inline$I8xDeviceControl$0$label_13_true#2, inline$I8xDeviceControl$0$label_13_false#2;
+
+ inline$I8xDeviceControl$0$label_13_false#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
+ goto inline$I8xDeviceControl$0$label_12#2;
+
+ inline$I8xDeviceControl$0$label_13_true#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
+ goto inline$I8xDeviceControl$0$label_14#2;
+
+ inline$I8xDeviceControl$0$label_14#2:
+ goto inline$I8xDeviceControl$0$label_14_true#2, inline$I8xDeviceControl$0$label_14_false#2;
+
+ inline$I8xDeviceControl$0$label_14_false#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) == 0;
+ goto inline$I8xDeviceControl$0$label_15#2;
+
+ inline$I8xDeviceControl$0$label_15#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_3#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$2$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$Return#2:
+ goto inline$I8xDeviceControl$0$label_15$1#2;
+
+ inline$I8xDeviceControl$0$label_15$1#2:
+ goto inline$I8xDeviceControl$0$anon11_Then#2, inline$I8xDeviceControl$0$anon11_Else#2;
+
+ inline$I8xDeviceControl$0$anon11_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon3#2;
+
+ inline$I8xDeviceControl$0$anon3#2:
+ goto inline$I8xDeviceControl$0$label_18#2;
+
+ inline$I8xDeviceControl$0$label_18#2:
+ goto inline$I8xDeviceControl$0$label_19#2;
+
+ inline$I8xDeviceControl$0$label_19#2:
+ goto inline$I8xDeviceControl$0$label_19_case_0#2, inline$I8xDeviceControl$0$label_19_case_1#2, inline$I8xDeviceControl$0$label_19_case_2#2;
+
+ inline$I8xDeviceControl$0$label_19_case_2#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703684;
+ goto inline$I8xDeviceControl$0$label_24#2;
+
+ inline$I8xDeviceControl$0$label_24#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Entry#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$Entry#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl;
+ inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$start#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$start#2:
+ call inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent := __HAVOC_malloc(1);
+ inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1;
+ inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_3#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_3#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_4#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_4#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_5#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_5#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_6#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_6#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_7#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_7#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_8#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_8#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_9#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_9#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_10#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_10#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_3#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$4$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon28_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon28_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon28_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_13#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_14#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume !INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_15#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_23#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_23#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$0$Entry#2;
+
+ inline$storm_KeAcquireSpinLock$0$Entry#2:
+ inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
+ goto inline$storm_KeAcquireSpinLock$0$start#2;
+
+ inline$storm_KeAcquireSpinLock$0$start#2:
+ inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
+ goto inline$storm_KeAcquireSpinLock$0$label_3#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_3#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_4#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_4#2:
+ goto inline$storm_getThreadID$0$Entry#2;
+
+ inline$storm_getThreadID$0$Entry#2:
+ goto inline$storm_getThreadID$0$anon0#2;
+
+ inline$storm_getThreadID$0$anon0#2:
+ inline$storm_getThreadID$0$tidRet := tid;
+ goto inline$storm_getThreadID$0$Return#2;
+
+ inline$storm_getThreadID$0$Return#2:
+ inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$0$tidRet;
+ goto inline$storm_KeAcquireSpinLock$0$label_4$1#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_4$1#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_7#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_7#2:
+ inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$0$label_8#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_8#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_9#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_9#2:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$0$label_12#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_12#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon7_Then#2, inline$storm_KeAcquireSpinLock$0$anon7_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon7_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon1#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_13#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_13#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_13_true#2, inline$storm_KeAcquireSpinLock$0$label_13_false#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_13_false#2:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$0$label_14#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_14#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$0$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_13_true#2:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$0$label_17#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_17#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon8_Then#2, inline$storm_KeAcquireSpinLock$0$anon8_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon4#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon4#2:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
+ goto inline$storm_KeAcquireSpinLock$0$label_18#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_18#2:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock];
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_19#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_19#2:
+ goto inline$storm_KeAcquireSpinLock$0$anon9_Then#2, inline$storm_KeAcquireSpinLock$0$anon9_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon9_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$0$anon6#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon9_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$0$anon6#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon6#2:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_1#2:
+ goto inline$storm_KeAcquireSpinLock$0$Return#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$Return#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon7_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$Return#2;
+
+ inline$storm_KeAcquireSpinLock$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon30_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon30_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon30_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon5#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_56#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_56#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_57#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_57#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_62#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_62#2:
+ goto inline$storm_IoSetCancelRoutine$0$Entry#2;
+
+ inline$storm_IoSetCancelRoutine$0$Entry#2:
+ inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := I8xSysButtonCancelRoutine;
+ goto inline$storm_IoSetCancelRoutine$0$start#2;
+
+ inline$storm_IoSetCancelRoutine$0$start#2:
+ inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
+ inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
+ goto inline$storm_IoSetCancelRoutine$0$label_3#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_3#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_4#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_4#2:
+ call inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ := storm_nondet();
+ goto inline$storm_IoSetCancelRoutine$0$label_7#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_7#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_7_true#2, inline$storm_IoSetCancelRoutine$0$label_7_false#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_7_false#2:
+ assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ == 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_7_true#2:
+ assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ != 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_11#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_11#2:
+ havoc raiseException;
+ goto inline$storm_IoSetCancelRoutine$0$anon5_Then#2, inline$storm_IoSetCancelRoutine$0$anon5_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon5_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoSetCancelRoutine$0$anon1#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_12#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_12#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_12_true#2, inline$storm_IoSetCancelRoutine$0$label_12_false#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_12_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_13#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_13#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCancelRoutine$0$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_12_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_8#2:
+ __storm_atomic := true;
+ goto inline$storm_IoSetCancelRoutine$0$label_16#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_16#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_17#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_17#2:
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_18#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_18#2:
+ goto inline$storm_IoSetCancelRoutine$0$anon6_Then#2, inline$storm_IoSetCancelRoutine$0$anon6_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon6_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoSetCancelRoutine$0$anon4#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon6_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoSetCancelRoutine$0$anon4#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon4#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_21#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_21#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_1#2:
+ goto inline$storm_IoSetCancelRoutine$0$Return#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon5_Then#2:
+ assume raiseException;
+ goto inline$storm_IoSetCancelRoutine$0$Return#2;
+
+ inline$storm_IoSetCancelRoutine$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon21#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon21#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_65#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_65#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
+ call contextSwitch();
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_66#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_66#2:
+ goto inline$storm_IoMarkIrpPending$1$Entry#2;
+
+ inline$storm_IoMarkIrpPending$1$Entry#2:
+ inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoMarkIrpPending$1$start#2;
+
+ inline$storm_IoMarkIrpPending$1$start#2:
+ inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
+ goto inline$storm_IoMarkIrpPending$1$label_3#2;
+
+ inline$storm_IoMarkIrpPending$1$label_3#2:
+ call inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ := storm_nondet();
+ goto inline$storm_IoMarkIrpPending$1$label_6#2;
+
+ inline$storm_IoMarkIrpPending$1$label_6#2:
+ goto inline$storm_IoMarkIrpPending$1$label_6_true#2, inline$storm_IoMarkIrpPending$1$label_6_false#2;
+
+ inline$storm_IoMarkIrpPending$1$label_6_false#2:
+ assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ == 0;
+ goto inline$storm_IoMarkIrpPending$1$label_1#2;
+
+ inline$storm_IoMarkIrpPending$1$label_6_true#2:
+ assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ != 0;
+ goto inline$storm_IoMarkIrpPending$1$label_7#2;
+
+ inline$storm_IoMarkIrpPending$1$label_7#2:
+ havoc raiseException;
+ goto inline$storm_IoMarkIrpPending$1$anon3_Then#2, inline$storm_IoMarkIrpPending$1$anon3_Else#2;
+
+ inline$storm_IoMarkIrpPending$1$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoMarkIrpPending$1$anon1#2;
+
+ inline$storm_IoMarkIrpPending$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ call contextSwitch();
+ goto inline$storm_IoMarkIrpPending$1$label_8#2;
+
+ inline$storm_IoMarkIrpPending$1$label_8#2:
+ goto inline$storm_IoMarkIrpPending$1$label_8_true#2, inline$storm_IoMarkIrpPending$1$label_8_false#2;
+
+ inline$storm_IoMarkIrpPending$1$label_8_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoMarkIrpPending$1$label_9#2;
+
+ inline$storm_IoMarkIrpPending$1$label_9#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoMarkIrpPending$1$label_1#2;
+
+ inline$storm_IoMarkIrpPending$1$label_8_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoMarkIrpPending$1$label_1#2;
+
+ inline$storm_IoMarkIrpPending$1$label_1#2:
+ goto inline$storm_IoMarkIrpPending$1$Return#2;
+
+ inline$storm_IoMarkIrpPending$1$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoMarkIrpPending$1$Return#2;
+
+ inline$storm_IoMarkIrpPending$1$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon23#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon23#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_82#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_82#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
+ call contextSwitch();
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_69#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_69#2:
+ goto inline$storm_IoSetCancelRoutine$1$Entry#2;
+
+ inline$storm_IoSetCancelRoutine$1$Entry#2:
+ inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := 0;
+ goto inline$storm_IoSetCancelRoutine$1$start#2;
+
+ inline$storm_IoSetCancelRoutine$1$start#2:
+ inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
+ inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
+ goto inline$storm_IoSetCancelRoutine$1$label_3#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_3#2:
+ goto inline$storm_IoSetCancelRoutine$1$label_4#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_4#2:
+ call inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ := storm_nondet();
+ goto inline$storm_IoSetCancelRoutine$1$label_7#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_7#2:
+ goto inline$storm_IoSetCancelRoutine$1$label_7_true#2, inline$storm_IoSetCancelRoutine$1$label_7_false#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_7_false#2:
+ assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ == 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_7_true#2:
+ assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ != 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_11#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_11#2:
+ havoc raiseException;
+ goto inline$storm_IoSetCancelRoutine$1$anon5_Then#2, inline$storm_IoSetCancelRoutine$1$anon5_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon5_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoSetCancelRoutine$1$anon1#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$1$label_12#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_12#2:
+ goto inline$storm_IoSetCancelRoutine$1$label_12_true#2, inline$storm_IoSetCancelRoutine$1$label_12_false#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_12_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_13#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_13#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCancelRoutine$1$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_12_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_8#2:
+ __storm_atomic := true;
+ goto inline$storm_IoSetCancelRoutine$1$label_16#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_16#2:
+ inline$storm_IoSetCancelRoutine$1$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine)];
+ call contextSwitch();
+ inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$myVar_0;
+ goto inline$storm_IoSetCancelRoutine$1$label_17#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_17#2:
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$1$label_18#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_18#2:
+ goto inline$storm_IoSetCancelRoutine$1$anon6_Then#2, inline$storm_IoSetCancelRoutine$1$anon6_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon6_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoSetCancelRoutine$1$anon4#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon6_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoSetCancelRoutine$1$anon4#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon4#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$1$label_21#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_21#2:
+ inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$ := inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine;
+ goto inline$storm_IoSetCancelRoutine$1$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_1#2:
+ goto inline$storm_IoSetCancelRoutine$1$Return#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon5_Then#2:
+ assume raiseException;
+ goto inline$storm_IoSetCancelRoutine$1$Return#2;
+
+ inline$storm_IoSetCancelRoutine$1$Return#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ := inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon25#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon25#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_72#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_72#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_73#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_73#2:
+ goto inline$storm_IoMarkIrpPending$2$Entry#2;
+
+ inline$storm_IoMarkIrpPending$2$Entry#2:
+ inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoMarkIrpPending$2$start#2;
+
+ inline$storm_IoMarkIrpPending$2$start#2:
+ inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
+ goto inline$storm_IoMarkIrpPending$2$label_3#2;
+
+ inline$storm_IoMarkIrpPending$2$label_3#2:
+ call inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ := storm_nondet();
+ goto inline$storm_IoMarkIrpPending$2$label_6#2;
+
+ inline$storm_IoMarkIrpPending$2$label_6#2:
+ goto inline$storm_IoMarkIrpPending$2$label_6_true#2, inline$storm_IoMarkIrpPending$2$label_6_false#2;
+
+ inline$storm_IoMarkIrpPending$2$label_6_false#2:
+ assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ == 0;
+ goto inline$storm_IoMarkIrpPending$2$label_1#2;
+
+ inline$storm_IoMarkIrpPending$2$label_6_true#2:
+ assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ != 0;
+ goto inline$storm_IoMarkIrpPending$2$label_7#2;
+
+ inline$storm_IoMarkIrpPending$2$label_7#2:
+ havoc raiseException;
+ goto inline$storm_IoMarkIrpPending$2$anon3_Then#2, inline$storm_IoMarkIrpPending$2$anon3_Else#2;
+
+ inline$storm_IoMarkIrpPending$2$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoMarkIrpPending$2$anon1#2;
+
+ inline$storm_IoMarkIrpPending$2$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ call contextSwitch();
+ goto inline$storm_IoMarkIrpPending$2$label_8#2;
+
+ inline$storm_IoMarkIrpPending$2$label_8#2:
+ goto inline$storm_IoMarkIrpPending$2$label_8_true#2, inline$storm_IoMarkIrpPending$2$label_8_false#2;
+
+ inline$storm_IoMarkIrpPending$2$label_8_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoMarkIrpPending$2$label_9#2;
+
+ inline$storm_IoMarkIrpPending$2$label_9#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoMarkIrpPending$2$label_1#2;
+
+ inline$storm_IoMarkIrpPending$2$label_8_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoMarkIrpPending$2$label_1#2;
+
+ inline$storm_IoMarkIrpPending$2$label_1#2:
+ goto inline$storm_IoMarkIrpPending$2$Return#2;
+
+ inline$storm_IoMarkIrpPending$2$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoMarkIrpPending$2$Return#2;
+
+ inline$storm_IoMarkIrpPending$2$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon27#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_78#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_78#2:
+ call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$ := storm_nondet();
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_81#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_81#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_76#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_76#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_77#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_77#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741536;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_58#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_58#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741823;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_59#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$0$Entry#2;
+
+ inline$storm_KeReleaseSpinLock$0$Entry#2:
+ inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
+ goto inline$storm_KeReleaseSpinLock$0$start#2;
+
+ inline$storm_KeReleaseSpinLock$0$start#2:
+ inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
+ goto inline$storm_KeReleaseSpinLock$0$label_3#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_3#2:
+ goto inline$storm_KeReleaseSpinLock$0$label_4#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_4#2:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$0$label_7#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_7#2:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$anon5_Then#2, inline$storm_KeReleaseSpinLock$0$anon5_Else#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon5_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$anon1#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_8#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_8#2:
+ goto inline$storm_getThreadID$1$Entry#2;
+
+ inline$storm_getThreadID$1$Entry#2:
+ goto inline$storm_getThreadID$1$anon0#2;
+
+ inline$storm_getThreadID$1$anon0#2:
+ inline$storm_getThreadID$1$tidRet := tid;
+ goto inline$storm_getThreadID$1$Return#2;
+
+ inline$storm_getThreadID$1$Return#2:
+ inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$1$tidRet;
+ goto inline$storm_KeReleaseSpinLock$0$label_8$1#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_8$1#2:
+ goto inline$storm_KeReleaseSpinLock$0$label_11#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_11#2:
+ goto inline$storm_KeReleaseSpinLock$0$label_11_true#2, inline$storm_KeReleaseSpinLock$0$label_11_false#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_11_false#2:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$0$label_12#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_12#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$0$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_11_true#2:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$0$label_15#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_15#2:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_16#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_16#2:
+ goto inline$storm_KeReleaseSpinLock$0$anon6_Then#2, inline$storm_KeReleaseSpinLock$0$anon6_Else#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon6_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$0$anon4#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon6_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$0$anon4#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon4#2:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_1#2:
+ goto inline$storm_KeReleaseSpinLock$0$Return#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon5_Then#2:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$Return#2;
+
+ inline$storm_KeReleaseSpinLock$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon19#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon19#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon30_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_26#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_26#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_27#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_27#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741670;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_28#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_28#2:
+ goto inline$storm_ExAllocatePoolWithTag$0$Entry#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$Entry#2:
+ inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1 := 12;
+ goto inline$storm_ExAllocatePoolWithTag$0$start#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$start#2:
+ inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag := inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1;
+ goto inline$storm_ExAllocatePoolWithTag$0$label_3#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$label_3#2:
+ call inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$ := __HAVOC_malloc(inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag);
+ goto inline$storm_ExAllocatePoolWithTag$0$label_6#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$label_6#2:
+ inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$ := inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$;
+ goto inline$storm_ExAllocatePoolWithTag$0$label_1#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$label_1#2:
+ goto inline$storm_ExAllocatePoolWithTag$0$Return#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$Return#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$ := inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon31_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon31_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon31_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon7#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon7#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_31#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_31#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_32#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_32#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_34#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_34#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ call inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$ := IoAllocateWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon32_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon32_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon32_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon9#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon9#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_37#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_37#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_38#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_38#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_39#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_39#2:
+ call ExFreePoolWithTag(inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent, 0);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon33_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon33_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon33_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon11#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon11#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon33_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_42#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_42#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_43#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_43#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_44#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_44#2:
+ goto inline$storm_IoMarkIrpPending$0$Entry#2;
+
+ inline$storm_IoMarkIrpPending$0$Entry#2:
+ inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoMarkIrpPending$0$start#2;
+
+ inline$storm_IoMarkIrpPending$0$start#2:
+ inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
+ goto inline$storm_IoMarkIrpPending$0$label_3#2;
+
+ inline$storm_IoMarkIrpPending$0$label_3#2:
+ call inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ := storm_nondet();
+ goto inline$storm_IoMarkIrpPending$0$label_6#2;
+
+ inline$storm_IoMarkIrpPending$0$label_6#2:
+ goto inline$storm_IoMarkIrpPending$0$label_6_true#2, inline$storm_IoMarkIrpPending$0$label_6_false#2;
+
+ inline$storm_IoMarkIrpPending$0$label_6_false#2:
+ assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ == 0;
+ goto inline$storm_IoMarkIrpPending$0$label_1#2;
+
+ inline$storm_IoMarkIrpPending$0$label_6_true#2:
+ assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ != 0;
+ goto inline$storm_IoMarkIrpPending$0$label_7#2;
+
+ inline$storm_IoMarkIrpPending$0$label_7#2:
+ havoc raiseException;
+ goto inline$storm_IoMarkIrpPending$0$anon3_Then#2, inline$storm_IoMarkIrpPending$0$anon3_Else#2;
+
+ inline$storm_IoMarkIrpPending$0$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoMarkIrpPending$0$anon1#2;
+
+ inline$storm_IoMarkIrpPending$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ call contextSwitch();
+ goto inline$storm_IoMarkIrpPending$0$label_8#2;
+
+ inline$storm_IoMarkIrpPending$0$label_8#2:
+ goto inline$storm_IoMarkIrpPending$0$label_8_true#2, inline$storm_IoMarkIrpPending$0$label_8_false#2;
+
+ inline$storm_IoMarkIrpPending$0$label_8_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoMarkIrpPending$0$label_9#2;
+
+ inline$storm_IoMarkIrpPending$0$label_9#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoMarkIrpPending$0$label_1#2;
+
+ inline$storm_IoMarkIrpPending$0$label_8_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoMarkIrpPending$0$label_1#2;
+
+ inline$storm_IoMarkIrpPending$0$label_1#2:
+ goto inline$storm_IoMarkIrpPending$0$Return#2;
+
+ inline$storm_IoMarkIrpPending$0$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoMarkIrpPending$0$Return#2;
+
+ inline$storm_IoMarkIrpPending$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon13#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon13#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_47#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_47#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ call IoQueueWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, I8xCompleteSysButtonEventWorker, 1, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon15#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon15#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_50#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_50#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_33#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_51#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2:
+ assume !INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2:
+ assume INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_53#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_53#2:
+ goto inline$I8xCompleteSysButtonIrp$0$Entry#2;
+
+ inline$I8xCompleteSysButtonIrp$0$Entry#2:
+ inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$I8xCompleteSysButtonIrp$0$start#2;
+
+ inline$I8xCompleteSysButtonIrp$0$start#2:
+ inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1;
+ goto inline$I8xCompleteSysButtonIrp$0$label_3#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_3#2:
+ havoc inline$I8xCompleteSysButtonIrp$0$myNondetVar_0;
+ goto inline$I8xCompleteSysButtonIrp$0$label_4#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_4#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_5#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_5#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_6#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_6#2:
+ goto inline$storm_IoCompleteRequest$2$Entry#2;
+
+ inline$storm_IoCompleteRequest$2$Entry#2:
+ inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp;
+ goto inline$storm_IoCompleteRequest$2$start#2;
+
+ inline$storm_IoCompleteRequest$2$start#2:
+ inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$2$label_3#2;
+
+ inline$storm_IoCompleteRequest$2$label_3#2:
+ call inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$2$label_6#2;
+
+ inline$storm_IoCompleteRequest$2$label_6#2:
+ goto inline$storm_IoCompleteRequest$2$label_6_true#2, inline$storm_IoCompleteRequest$2$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$2$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$2$label_7#2;
+
+ inline$storm_IoCompleteRequest$2$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$2$label_8#2;
+
+ inline$storm_IoCompleteRequest$2$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$2$anon3_Then#2, inline$storm_IoCompleteRequest$2$anon3_Else#2;
+
+ inline$storm_IoCompleteRequest$2$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$2$anon1#2;
+
+ inline$storm_IoCompleteRequest$2$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$2$label_9#2;
+
+ inline$storm_IoCompleteRequest$2$label_9#2:
+ goto inline$storm_IoCompleteRequest$2$label_9_true#2, inline$storm_IoCompleteRequest$2$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$2$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$2$label_10#2;
+
+ inline$storm_IoCompleteRequest$2$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$2$label_1#2;
+
+ inline$storm_IoCompleteRequest$2$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$2$label_7#2;
+
+ inline$storm_IoCompleteRequest$2$label_7#2:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$2$label_1#2;
+
+ inline$storm_IoCompleteRequest$2$label_1#2:
+ goto inline$storm_IoCompleteRequest$2$Return#2;
+
+ inline$storm_IoCompleteRequest$2$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$2$Return#2;
+
+ inline$storm_IoCompleteRequest$2$Return#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_6$1#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_6$1#2:
+ goto inline$I8xCompleteSysButtonIrp$0$anon2_Then#2, inline$I8xCompleteSysButtonIrp$0$anon2_Else#2;
+
+ inline$I8xCompleteSysButtonIrp$0$anon2_Else#2:
+ assume !raiseException;
+ goto inline$I8xCompleteSysButtonIrp$0$anon1#2;
+
+ inline$I8xCompleteSysButtonIrp$0$anon1#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_1#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_1#2:
+ goto inline$I8xCompleteSysButtonIrp$0$Return#2;
+
+ inline$I8xCompleteSysButtonIrp$0$anon2_Then#2:
+ assume raiseException;
+ goto inline$I8xCompleteSysButtonIrp$0$Return#2;
+
+ inline$I8xCompleteSysButtonIrp$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon17#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon17#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_52#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon32_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon31_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_16#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_16#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741306;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_17#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_17#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_18#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_18#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_19#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_19#2:
+ goto inline$storm_IoCompleteRequest$1$Entry#2;
+
+ inline$storm_IoCompleteRequest$1$Entry#2:
+ inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoCompleteRequest$1$start#2;
+
+ inline$storm_IoCompleteRequest$1$start#2:
+ inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$1$label_3#2;
+
+ inline$storm_IoCompleteRequest$1$label_3#2:
+ call inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$1$label_6#2;
+
+ inline$storm_IoCompleteRequest$1$label_6#2:
+ goto inline$storm_IoCompleteRequest$1$label_6_true#2, inline$storm_IoCompleteRequest$1$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$1$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$1$label_7#2;
+
+ inline$storm_IoCompleteRequest$1$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$1$label_8#2;
+
+ inline$storm_IoCompleteRequest$1$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$1$anon3_Then#2, inline$storm_IoCompleteRequest$1$anon3_Else#2;
+
+ inline$storm_IoCompleteRequest$1$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$1$anon1#2;
+
+ inline$storm_IoCompleteRequest$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$1$label_9#2;
+
+ inline$storm_IoCompleteRequest$1$label_9#2:
+ goto inline$storm_IoCompleteRequest$1$label_9_true#2, inline$storm_IoCompleteRequest$1$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$1$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$1$label_10#2;
+
+ inline$storm_IoCompleteRequest$1$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$1$label_1#2;
+
+ inline$storm_IoCompleteRequest$1$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$1$label_7#2;
+
+ inline$storm_IoCompleteRequest$1$label_7#2:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$1$label_1#2;
+
+ inline$storm_IoCompleteRequest$1$label_1#2:
+ goto inline$storm_IoCompleteRequest$1$Return#2;
+
+ inline$storm_IoCompleteRequest$1$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$1$Return#2;
+
+ inline$storm_IoCompleteRequest$1$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon29_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon29_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon29_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon3#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon3#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_22#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_22#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_1#2:
+ call __HAVOC_free(inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon29_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon28_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$Return#2:
+ goto inline$I8xDeviceControl$0$label_24$1#2;
+
+ inline$I8xDeviceControl$0$label_24$1#2:
+ goto inline$I8xDeviceControl$0$anon13_Then#2, inline$I8xDeviceControl$0$anon13_Else#2;
+
+ inline$I8xDeviceControl$0$anon13_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon7#2;
+
+ inline$I8xDeviceControl$0$anon7#2:
+ goto inline$I8xDeviceControl$0$label_27#2;
+
+ inline$I8xDeviceControl$0$label_27#2:
+ goto inline$I8xDeviceControl$0$label_1#2;
+
+ inline$I8xDeviceControl$0$anon13_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$label_19_case_1#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703680;
+ goto inline$I8xDeviceControl$0$label_21#2;
+
+ inline$I8xDeviceControl$0$label_21#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Entry#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$Entry#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$start#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$start#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_3#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_3#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_4#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_4#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_5#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_5#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_6#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_6#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_7#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_7#2:
+ call __PREfastPagedCode();
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_10#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_10#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_3#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$3$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$Return#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon3#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon3#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_13#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_13#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_14#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_14#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_15#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_15#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume !INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_16#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_16#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_24#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_24#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_25#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_25#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) == 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) != 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_27#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_27#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 1);
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_26#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) == 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) != 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_29#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_29#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 2);
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_28#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) == 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) != 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_31#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_31#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, BOOGIE_LARGE_INT_2147483648);
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_30#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_32#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_32#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_17#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_17#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_18#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_19#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_19#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_20#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_20#2:
+ goto inline$storm_IoCompleteRequest$0$Entry#2;
+
+ inline$storm_IoCompleteRequest$0$Entry#2:
+ inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps;
+ goto inline$storm_IoCompleteRequest$0$start#2;
+
+ inline$storm_IoCompleteRequest$0$start#2:
+ inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$0$label_3#2;
+
+ inline$storm_IoCompleteRequest$0$label_3#2:
+ call inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$0$label_6#2;
+
+ inline$storm_IoCompleteRequest$0$label_6#2:
+ goto inline$storm_IoCompleteRequest$0$label_6_true#2, inline$storm_IoCompleteRequest$0$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$0$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#2;
+
+ inline$storm_IoCompleteRequest$0$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$0$label_8#2;
+
+ inline$storm_IoCompleteRequest$0$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$0$anon3_Then#2, inline$storm_IoCompleteRequest$0$anon3_Else#2;
+
+ inline$storm_IoCompleteRequest$0$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$0$anon1#2;
+
+ inline$storm_IoCompleteRequest$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_9#2;
+
+ inline$storm_IoCompleteRequest$0$label_9#2:
+ goto inline$storm_IoCompleteRequest$0$label_9_true#2, inline$storm_IoCompleteRequest$0$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$0$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$0$label_10#2;
+
+ inline$storm_IoCompleteRequest$0$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$0$label_1#2;
+
+ inline$storm_IoCompleteRequest$0$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#2;
+
+ inline$storm_IoCompleteRequest$0$label_7#2:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_1#2;
+
+ inline$storm_IoCompleteRequest$0$label_1#2:
+ goto inline$storm_IoCompleteRequest$0$Return#2;
+
+ inline$storm_IoCompleteRequest$0$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$0$Return#2;
+
+ inline$storm_IoCompleteRequest$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon5#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon5#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_23#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_23#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$Return#2:
+ goto inline$I8xDeviceControl$0$label_21$1#2;
+
+ inline$I8xDeviceControl$0$label_21$1#2:
+ goto inline$I8xDeviceControl$0$anon12_Then#2, inline$I8xDeviceControl$0$anon12_Else#2;
+
+ inline$I8xDeviceControl$0$anon12_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon5#2;
+
+ inline$I8xDeviceControl$0$anon5#2:
+ goto inline$I8xDeviceControl$0$label_28#2;
+
+ inline$I8xDeviceControl$0$label_28#2:
+ goto inline$I8xDeviceControl$0$label_1#2;
+
+ inline$I8xDeviceControl$0$anon12_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$label_19_case_0#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703680;
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703684;
+ goto inline$I8xDeviceControl$0$label_20#2;
+
+ inline$I8xDeviceControl$0$label_20#2:
+ goto inline$I8xDeviceControl$0$label_29#2;
+
+ inline$I8xDeviceControl$0$anon11_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$label_14_true#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) != 0;
+ goto inline$I8xDeviceControl$0$label_12#2;
+
+ inline$I8xDeviceControl$0$label_12#2:
+ goto inline$I8xDeviceControl$0$label_29#2;
+
+ inline$I8xDeviceControl$0$label_29#2:
+ goto inline$I8xDeviceControl$0$label_30#2;
+
+ inline$I8xDeviceControl$0$label_30#2:
+ goto inline$storm_IoCompleteRequest$3$Entry#2;
+
+ inline$storm_IoCompleteRequest$3$Entry#2:
+ inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
+ goto inline$storm_IoCompleteRequest$3$start#2;
+
+ inline$storm_IoCompleteRequest$3$start#2:
+ inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$3$label_3#2;
+
+ inline$storm_IoCompleteRequest$3$label_3#2:
+ call inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$3$label_6#2;
+
+ inline$storm_IoCompleteRequest$3$label_6#2:
+ goto inline$storm_IoCompleteRequest$3$label_6_true#2, inline$storm_IoCompleteRequest$3$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$3$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$3$label_7#2;
+
+ inline$storm_IoCompleteRequest$3$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$3$label_8#2;
+
+ inline$storm_IoCompleteRequest$3$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$3$anon3_Then#2, inline$storm_IoCompleteRequest$3$anon3_Else#2;
+
+ inline$storm_IoCompleteRequest$3$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$3$anon1#2;
+
+ inline$storm_IoCompleteRequest$3$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$3$label_9#2;
+
+ inline$storm_IoCompleteRequest$3$label_9#2:
+ goto inline$storm_IoCompleteRequest$3$label_9_true#2, inline$storm_IoCompleteRequest$3$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$3$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$3$label_10#2;
+
+ inline$storm_IoCompleteRequest$3$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$3$label_1#2;
+
+ inline$storm_IoCompleteRequest$3$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$3$label_7#2;
+
+ inline$storm_IoCompleteRequest$3$label_7#2:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$3$label_1#2;
+
+ inline$storm_IoCompleteRequest$3$label_1#2:
+ goto inline$storm_IoCompleteRequest$3$Return#2;
+
+ inline$storm_IoCompleteRequest$3$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$3$Return#2;
+
+ inline$storm_IoCompleteRequest$3$Return#2:
+ goto inline$I8xDeviceControl$0$label_30$1#2;
+
+ inline$I8xDeviceControl$0$label_30$1#2:
+ goto inline$I8xDeviceControl$0$anon14_Then#2, inline$I8xDeviceControl$0$anon14_Else#2;
+
+ inline$I8xDeviceControl$0$anon14_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon9#2;
+
+ inline$I8xDeviceControl$0$anon9#2:
+ goto inline$I8xDeviceControl$0$label_33#2;
+
+ inline$I8xDeviceControl$0$label_33#2:
+ goto inline$I8xDeviceControl$0$label_1#2;
+
+ inline$I8xDeviceControl$0$label_1#2:
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$anon14_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$anon10_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$Return#2:
+ goto inline$dispatch$0$label_8$1#2;
+
+ inline$dispatch$0$label_8$1#2:
+ goto inline$dispatch$0$anon5_Then#2, inline$dispatch$0$anon5_Else#2;
+
+ inline$dispatch$0$anon5_Else#2:
+ assume !raiseException;
+ goto inline$dispatch$0$anon3#2;
+
+ inline$dispatch$0$anon3#2:
+ goto inline$dispatch$0$label_11#2;
+
+ inline$dispatch$0$label_11#2:
+ goto inline$dispatch$0$label_1#2;
+
+ inline$dispatch$0$label_1#2:
+ goto inline$dispatch$0$Return#2;
+
+ inline$dispatch$0$anon5_Then#2:
+ assume raiseException;
+ goto inline$dispatch$0$Return#2;
+
+ inline$dispatch$0$anon4_Then#2:
+ assume raiseException;
+ goto inline$dispatch$0$Return#2;
+
+ inline$dispatch$0$Return#2:
+ goto label_23$1#2;
+
+ label_23$1#2:
+ goto anon21_Then#2, anon21_Else#2;
+
+ anon21_Else#2:
+ assume !(errorReached || !raiseException);
+ goto anon11#2;
+
+ anon21_Then#2:
+ assume errorReached || !raiseException;
+ __storm_thread_done_1 := true;
+ goto anon11#2;
+
+ anon11#2:
+ k := k_old_0;
+ tid := tid_old_0;
+ goto label_26#2;
+
+ label_26#2:
+ goto label_27#2;
+
+ label_27#2:
+ k_old_1 := k;
+ tid_old_1 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$cancel$0$Entry#2;
+
+ inline$cancel$0$Entry#2:
+ inline$cancel$0$$Irp$1$64.17$cancel_.1 := $irp$1$91.7$storm_main;
+ goto inline$cancel$0$start#2;
+
+ inline$cancel$0$start#2:
+ inline$cancel$0$$Irp$1$64.17$cancel := inline$cancel$0$$Irp$1$64.17$cancel_.1;
+ goto inline$cancel$0$label_3#2;
+
+ inline$cancel$0$label_3#2:
+ goto inline$storm_IoCancelIrp$0$Entry#2;
+
+ inline$storm_IoCancelIrp$0$Entry#2:
+ inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1 := inline$cancel$0$$Irp$1$64.17$cancel;
+ goto inline$storm_IoCancelIrp$0$start#2;
+
+ inline$storm_IoCancelIrp$0$start#2:
+ inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1;
+ goto inline$storm_IoCancelIrp$0$label_3#2;
+
+ inline$storm_IoCancelIrp$0$label_3#2:
+ goto inline$storm_IoCancelIrp$0$label_4#2;
+
+ inline$storm_IoCancelIrp$0$label_4#2:
+ Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_5#2;
+
+ inline$storm_IoCancelIrp$0$label_5#2:
+ __storm_atomic := true;
+ goto inline$storm_IoCancelIrp$0$label_8#2;
+
+ inline$storm_IoCancelIrp$0$label_8#2:
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
+ call contextSwitch();
+ inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$myVar_0;
+ goto inline$storm_IoCancelIrp$0$label_9#2;
+
+ inline$storm_IoCancelIrp$0$label_9#2:
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_10#2;
+
+ inline$storm_IoCancelIrp$0$label_10#2:
+ goto inline$storm_IoCancelIrp$0$anon11_Then#2, inline$storm_IoCancelIrp$0$anon11_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon11_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoCancelIrp$0$anon1#2;
+
+ inline$storm_IoCancelIrp$0$anon11_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoCancelIrp$0$anon1#2;
+
+ inline$storm_IoCancelIrp$0$anon1#2:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_13#2;
+
+ inline$storm_IoCancelIrp$0$label_13#2:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
+ assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
+ goto inline$storm_IoAcquireCancelSpinLock$0$Entry#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Entry#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$start#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$start#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_3#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_3#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_4#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_4#2:
+ goto inline$storm_getThreadID$2$Entry#2;
+
+ inline$storm_getThreadID$2$Entry#2:
+ goto inline$storm_getThreadID$2$anon0#2;
+
+ inline$storm_getThreadID$2$anon0#2:
+ inline$storm_getThreadID$2$tidRet := tid;
+ goto inline$storm_getThreadID$2$Return#2;
+
+ inline$storm_getThreadID$2$Return#2:
+ inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$ := inline$storm_getThreadID$2$tidRet;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_7#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_7#2:
+ inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock := inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_8#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_8#2:
+ __storm_atomic := true;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_11#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2, inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2:
+ assume k == 0 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_12#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_12#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2:
+ assume k == 0 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_15#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_15#2:
+ havoc raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon2#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon2#2:
+ assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_16#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_16#2:
+ cancelLockStatus_0 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_17#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_17#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon6_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon4#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon6_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon4#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon4#2:
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_1#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#2:
+ assume raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Return#2:
+ goto inline$storm_IoCancelIrp$0$label_13$1#2;
+
+ inline$storm_IoCancelIrp$0$label_13$1#2:
+ goto inline$storm_IoCancelIrp$0$anon12_Then#2, inline$storm_IoCancelIrp$0$anon12_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon12_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon3#2;
+
+ inline$storm_IoCancelIrp$0$anon3#2:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ goto inline$storm_IoCancelIrp$0$label_16#2;
+
+ inline$storm_IoCancelIrp$0$label_16#2:
+ goto inline$storm_IoCancelIrp$0$label_16_true#2, inline$storm_IoCancelIrp$0$label_16_false#2;
+
+ inline$storm_IoCancelIrp$0$label_16_false#2:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == 0;
+ goto inline$storm_IoCancelIrp$0$label_17#2;
+
+ inline$storm_IoCancelIrp$0$label_17#2:
+ goto inline$storm_IoCancelIrp$0$label_1#2;
+
+ inline$storm_IoCancelIrp$0$label_16_true#2:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp != 0;
+ goto inline$storm_IoCancelIrp$0$label_18#2;
+
+ inline$storm_IoCancelIrp$0$label_18#2:
+ goto inline$storm_IoCancelIrp$0$label_19#2;
+
+ inline$storm_IoCancelIrp$0$label_19#2:
+ call inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ := storm_nondet();
+ goto inline$storm_IoCancelIrp$0$label_22#2;
+
+ inline$storm_IoCancelIrp$0$label_22#2:
+ goto inline$storm_IoCancelIrp$0$label_22_true#2, inline$storm_IoCancelIrp$0$label_22_false#2;
+
+ inline$storm_IoCancelIrp$0$label_22_false#2:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ == 0;
+ goto inline$storm_IoCancelIrp$0$label_23#2;
+
+ inline$storm_IoCancelIrp$0$label_22_true#2:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ != 0;
+ goto inline$storm_IoCancelIrp$0$label_26#2;
+
+ inline$storm_IoCancelIrp$0$label_26#2:
+ havoc raiseException;
+ goto inline$storm_IoCancelIrp$0$anon14_Then#2, inline$storm_IoCancelIrp$0$anon14_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon14_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon7#2;
+
+ inline$storm_IoCancelIrp$0$anon7#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_27#2;
+
+ inline$storm_IoCancelIrp$0$label_27#2:
+ goto inline$storm_IoCancelIrp$0$label_27_true#2, inline$storm_IoCancelIrp$0$label_27_false#2;
+
+ inline$storm_IoCancelIrp$0$label_27_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCancelIrp$0$label_28#2;
+
+ inline$storm_IoCancelIrp$0$label_28#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCancelIrp$0$label_1#2;
+
+ inline$storm_IoCancelIrp$0$label_27_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCancelIrp$0$label_23#2;
+
+ inline$storm_IoCancelIrp$0$label_23#2:
+ goto inline$IoGetCurrentIrpStackLocation$5$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$Entry#2:
+ inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
+ goto inline$IoGetCurrentIrpStackLocation$5$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$start#2:
+ inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
+ goto inline$IoGetCurrentIrpStackLocation$5$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_3#2:
+ inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$5$myVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$5$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$5$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$Return#2:
+ inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$ := inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
+ goto inline$storm_IoCancelIrp$0$label_23$1#2;
+
+ inline$storm_IoCancelIrp$0$label_23$1#2:
+ goto inline$storm_IoCancelIrp$0$anon13_Then#2, inline$storm_IoCancelIrp$0$anon13_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon13_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon5#2;
+
+ inline$storm_IoCancelIrp$0$anon5#2:
+ goto inline$storm_IoCancelIrp$0$label_31#2;
+
+ inline$storm_IoCancelIrp$0$label_31#2:
+ inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$;
+ goto inline$storm_IoCancelIrp$0$label_32#2;
+
+ inline$storm_IoCancelIrp$0$label_32#2:
+ goto inline$storm_IoCancelIrp$0$label_32_icall_1#2;
+
+ inline$storm_IoCancelIrp$0$label_32_icall_1#2:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == I8xSysButtonCancelRoutine;
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION(inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp)];
+ call contextSwitch();
+ goto inline$I8xSysButtonCancelRoutine$0$Entry#2;
+
+ inline$I8xSysButtonCancelRoutine$0$Entry#2:
+ inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$myVar_0;
+ inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
+ goto inline$I8xSysButtonCancelRoutine$0$start#2;
+
+ inline$I8xSysButtonCancelRoutine$0$start#2:
+ call inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine := __HAVOC_malloc(1);
+ inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1;
+ inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1;
+ goto inline$I8xSysButtonCancelRoutine$0$label_3#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_3#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_4#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_4#2:
+ inline$I8xSysButtonCancelRoutine$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine)];
+ call contextSwitch();
+ inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$myVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_5#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_5#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_6#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_6#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_7#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_7#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$1$Entry#2;
+
+ inline$storm_KeAcquireSpinLock$1$Entry#2:
+ inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
+ goto inline$storm_KeAcquireSpinLock$1$start#2;
+
+ inline$storm_KeAcquireSpinLock$1$start#2:
+ inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
+ goto inline$storm_KeAcquireSpinLock$1$label_3#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_3#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_4#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_4#2:
+ goto inline$storm_getThreadID$3$Entry#2;
+
+ inline$storm_getThreadID$3$Entry#2:
+ goto inline$storm_getThreadID$3$anon0#2;
+
+ inline$storm_getThreadID$3$anon0#2:
+ inline$storm_getThreadID$3$tidRet := tid;
+ goto inline$storm_getThreadID$3$Return#2;
+
+ inline$storm_getThreadID$3$Return#2:
+ inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$3$tidRet;
+ goto inline$storm_KeAcquireSpinLock$1$label_4$1#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_4$1#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_7#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_7#2:
+ inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$1$label_8#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_8#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_9#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_9#2:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$1$label_12#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_12#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon7_Then#2, inline$storm_KeAcquireSpinLock$1$anon7_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon7_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon1#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_13#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_13#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_13_true#2, inline$storm_KeAcquireSpinLock$1$label_13_false#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_13_false#2:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$1$label_14#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_14#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$1$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_13_true#2:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$1$label_17#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_17#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon8_Then#2, inline$storm_KeAcquireSpinLock$1$anon8_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon4#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon4#2:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
+ goto inline$storm_KeAcquireSpinLock$1$label_18#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_18#2:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock];
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_19#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_19#2:
+ goto inline$storm_KeAcquireSpinLock$1$anon9_Then#2, inline$storm_KeAcquireSpinLock$1$anon9_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon9_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$1$anon6#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon9_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$1$anon6#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon6#2:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_1#2:
+ goto inline$storm_KeAcquireSpinLock$1$Return#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$Return#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon7_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$Return#2;
+
+ inline$storm_KeAcquireSpinLock$1$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_7$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_7$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon8_Then#2, inline$I8xSysButtonCancelRoutine$0$anon8_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon8_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon1#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_10#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_10#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_11#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_11#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_12#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_12#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$1$Entry#2;
+
+ inline$storm_KeReleaseSpinLock$1$Entry#2:
+ inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
+ goto inline$storm_KeReleaseSpinLock$1$start#2;
+
+ inline$storm_KeReleaseSpinLock$1$start#2:
+ inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
+ goto inline$storm_KeReleaseSpinLock$1$label_3#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_3#2:
+ goto inline$storm_KeReleaseSpinLock$1$label_4#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_4#2:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$1$label_7#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_7#2:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$anon5_Then#2, inline$storm_KeReleaseSpinLock$1$anon5_Else#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon5_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$anon1#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_8#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_8#2:
+ goto inline$storm_getThreadID$4$Entry#2;
+
+ inline$storm_getThreadID$4$Entry#2:
+ goto inline$storm_getThreadID$4$anon0#2;
+
+ inline$storm_getThreadID$4$anon0#2:
+ inline$storm_getThreadID$4$tidRet := tid;
+ goto inline$storm_getThreadID$4$Return#2;
+
+ inline$storm_getThreadID$4$Return#2:
+ inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$4$tidRet;
+ goto inline$storm_KeReleaseSpinLock$1$label_8$1#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_8$1#2:
+ goto inline$storm_KeReleaseSpinLock$1$label_11#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_11#2:
+ goto inline$storm_KeReleaseSpinLock$1$label_11_true#2, inline$storm_KeReleaseSpinLock$1$label_11_false#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_11_false#2:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$1$label_12#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_12#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$1$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_11_true#2:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$1$label_15#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_15#2:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_16#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_16#2:
+ goto inline$storm_KeReleaseSpinLock$1$anon6_Then#2, inline$storm_KeReleaseSpinLock$1$anon6_Else#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon6_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$1$anon4#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon6_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$1$anon4#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon4#2:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_1#2:
+ goto inline$storm_KeReleaseSpinLock$1$Return#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon5_Then#2:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$Return#2;
+
+ inline$storm_KeReleaseSpinLock$1$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_12$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_12$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon9_Then#2, inline$I8xSysButtonCancelRoutine$0$anon9_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon9_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon3#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon3#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_15#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_15#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$storm_IoReleaseCancelSpinLock$0$Entry#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$Entry#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$start#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$start#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_3#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_3#2:
+ __storm_atomic := true;
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_6#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_6#2:
+ goto inline$storm_getThreadID$5$Entry#2;
+
+ inline$storm_getThreadID$5$Entry#2:
+ goto inline$storm_getThreadID$5$anon0#2;
+
+ inline$storm_getThreadID$5$anon0#2:
+ inline$storm_getThreadID$5$tidRet := tid;
+ goto inline$storm_getThreadID$5$Return#2;
+
+ inline$storm_getThreadID$5$Return#2:
+ inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$ := inline$storm_getThreadID$5$tidRet;
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_9#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_9#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2, inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2:
+ assume k == 0 ==> !INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_10#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2:
+ assume k == 0 ==> INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_13#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_13#2:
+ cancelLockStatus_0 := 0;
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_14#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_14#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon3_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon3_Else#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon3_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon2#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon3_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon2#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_1#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$Return#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_15$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_15$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon10_Then#2, inline$I8xSysButtonCancelRoutine$0$anon10_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon10_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon5#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon5#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_18#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_18#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_19#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_19#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_20#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_20#2:
+ goto inline$storm_IoCompleteRequest$4$Entry#2;
+
+ inline$storm_IoCompleteRequest$4$Entry#2:
+ inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine;
+ goto inline$storm_IoCompleteRequest$4$start#2;
+
+ inline$storm_IoCompleteRequest$4$start#2:
+ inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$4$label_3#2;
+
+ inline$storm_IoCompleteRequest$4$label_3#2:
+ call inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$4$label_6#2;
+
+ inline$storm_IoCompleteRequest$4$label_6#2:
+ goto inline$storm_IoCompleteRequest$4$label_6_true#2, inline$storm_IoCompleteRequest$4$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$4$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$4$label_7#2;
+
+ inline$storm_IoCompleteRequest$4$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$4$label_8#2;
+
+ inline$storm_IoCompleteRequest$4$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$4$anon3_Then#2, inline$storm_IoCompleteRequest$4$anon3_Else#2;
+
+ inline$storm_IoCompleteRequest$4$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$4$anon1#2;
+
+ inline$storm_IoCompleteRequest$4$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$4$label_9#2;
+
+ inline$storm_IoCompleteRequest$4$label_9#2:
+ goto inline$storm_IoCompleteRequest$4$label_9_true#2, inline$storm_IoCompleteRequest$4$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$4$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$4$label_10#2;
+
+ inline$storm_IoCompleteRequest$4$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$4$label_1#2;
+
+ inline$storm_IoCompleteRequest$4$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$4$label_7#2;
+
+ inline$storm_IoCompleteRequest$4$label_7#2:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$4$label_1#2;
+
+ inline$storm_IoCompleteRequest$4$label_1#2:
+ goto inline$storm_IoCompleteRequest$4$Return#2;
+
+ inline$storm_IoCompleteRequest$4$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$4$Return#2;
+
+ inline$storm_IoCompleteRequest$4$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_20$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_20$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon11_Then#2, inline$I8xSysButtonCancelRoutine$0$anon11_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon11_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon7#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon7#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_1#2:
+ call __HAVOC_free(inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine);
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon11_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon10_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon9_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon8_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$Return#2:
+ goto inline$storm_IoCancelIrp$0$label_32_icall_1$1#2;
+
+ inline$storm_IoCancelIrp$0$label_32_icall_1$1#2:
+ goto inline$storm_IoCancelIrp$0$anon15_Then#2, inline$storm_IoCancelIrp$0$anon15_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon15_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon10#2;
+
+ inline$storm_IoCancelIrp$0$anon10#2:
+ goto inline$storm_IoCancelIrp$0$label_32_icall_return#2;
+
+ inline$storm_IoCancelIrp$0$label_32_icall_return#2:
+ goto inline$storm_IoCancelIrp$0$label_35#2;
+
+ inline$storm_IoCancelIrp$0$label_35#2:
+ goto inline$storm_IoCancelIrp$0$label_1#2;
+
+ inline$storm_IoCancelIrp$0$label_1#2:
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon15_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon13_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon14_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon12_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$Return#2:
+ goto inline$cancel$0$label_3$1#2;
+
+ inline$cancel$0$label_3$1#2:
+ goto inline$cancel$0$anon2_Then#2, inline$cancel$0$anon2_Else#2;
+
+ inline$cancel$0$anon2_Else#2:
+ assume !raiseException;
+ goto inline$cancel$0$anon1#2;
+
+ inline$cancel$0$anon1#2:
+ goto inline$cancel$0$label_1#2;
+
+ inline$cancel$0$label_1#2:
+ goto inline$cancel$0$Return#2;
+
+ inline$cancel$0$anon2_Then#2:
+ assume raiseException;
+ goto inline$cancel$0$Return#2;
+
+ inline$cancel$0$Return#2:
+ goto label_27$1#2;
+
+ label_27$1#2:
+ goto anon22_Then#2, anon22_Else#2;
+
+ anon22_Else#2:
+ assume !(errorReached || !raiseException);
+ goto anon13#2;
+
+ anon22_Then#2:
+ assume errorReached || !raiseException;
+ __storm_thread_done_2 := true;
+ goto anon13#2;
+
+ anon13#2:
+ k := k_old_1;
+ tid := tid_old_1;
+ goto label_30#2;
+
+ label_30#2:
+ goto label_31#2;
+
+ label_31#2:
+ k_old_2 := k;
+ tid_old_2 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$dpc$0$Entry#2;
+
+ inline$dpc$0$Entry#2:
+ goto inline$dpc$0$start#2;
+
+ inline$dpc$0$start#2:
+ goto inline$dpc$0$label_1#2;
+
+ inline$dpc$0$label_1#2:
+ goto inline$dpc$0$Return#2;
+
+ inline$dpc$0$Return#2:
+ goto label_31$1#2;
+
+ label_31$1#2:
+ goto anon23_Then#2, anon23_Else#2;
+
+ anon23_Else#2:
+ assume !(errorReached || !raiseException);
+ goto anon15#2;
+
+ anon23_Then#2:
+ assume errorReached || !raiseException;
+ __storm_thread_done_3 := true;
+ goto anon15#2;
+
+ anon15#2:
+ k := k_old_2;
+ tid := tid_old_2;
+ goto label_1#2;
+
+ label_1#2:
+ assert !errorReached;
+ return;
+
+ anon20_Then#2:
+ assume raiseException;
+ return;
+
+ anon19_Then#2:
+ assume raiseException;
+ return;
+
+ anon18_Then#2:
+ assume raiseException;
+ return;
+
+ anon17_Then#2:
+ assume raiseException;
+ return;
+
+ anon16_Then#2:
+ assume raiseException;
+ return;
+}
+
+
+
diff --git a/Test/livevars/daytona_bug2_ioctl_example_2.bpl b/Test/livevars/daytona_bug2_ioctl_example_2.bpl
index e170cda7..925edf91 100644
--- a/Test/livevars/daytona_bug2_ioctl_example_2.bpl
+++ b/Test/livevars/daytona_bug2_ioctl_example_2.bpl
@@ -1,4860 +1,4860 @@
-// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var __storm_thread_done_0 : bool;
-var __storm_thread_done_1 : bool;
-var __storm_thread_done_2 : bool;
-var __storm_thread_done_3 : bool;
-
-var raiseException : bool;
-var errorReached : bool;
-var k : int;
-var __storm_atomic : bool;
-var __storm_init : bool;
-var tid : int;
-var tidCount : int;
-
-procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tidRet:int)
-{
- tidRet := tid;
- return;
-}
-
-
-procedure storm_context_0();
-procedure storm_context_1();
-
-procedure contextSwitch();
-modifies k;
-ensures __storm_atomic ==> old(k) == k;
-ensures(old(k) <= k);
-ensures(k < 2);
-
-
-
-// Memory model
-
-// Mutable
-var alloc:int;
-
-// Immutable
-
-var Mem_0_T.CancelRoutine__IRP : [int]int;
-var Mem_1_T.CancelRoutine__IRP : [int]int;
-var Mem_s_1_T.CancelRoutine__IRP : [int]int;
-var Mem_0_T.Cancel__IRP : [int]int;
-var Mem_1_T.Cancel__IRP : [int]int;
-var Mem_s_1_T.Cancel__IRP : [int]int;
-var Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
-var Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
-var Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
-var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_s_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_0_T.DeviceObject__IO_STACK_LOCATION : [int]int;
-var Mem_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
-var Mem_s_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
-
-
-// Field declarations
-
-
-// Type declarations
-
-
-// Field offset definitions
-
-function AssociatedIrp__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == x + 12);
-axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function COMMON_DATA__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelIrql__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
-axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelRoutine__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
-axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Cancel__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
-axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
-axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Context__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
-axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Control__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
-axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControllerData__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == x + 0);
-axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentLocation__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
-axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentStackLocation___unnamed_4_3c640f23(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == x + 0);
-axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceIoControl___unnamed_16_afe81cff(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == x + 0);
-axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceObject__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
-axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(int) returns (int);
-
-
-//axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == x + 2);
-axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == INT_ADD(x, 2));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Information__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
-axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Initialized_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == x + 323);
-axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == INT_ADD(x, 323));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function InterruptDescriptor_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == x + 300);
-axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == INT_ADD(x, 300));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function InterruptObject_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == x + 4);
-axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IoControlCode___unnamed_16_ae81ad04(int) returns (int);
-
-
-//axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == x + 8);
-axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IoStatus__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
-axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Irp__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == x + 8);
-axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IsKeyboard_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == x + 325);
-axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == INT_ADD(x, 325));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Item__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == x + 0);
-axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Item__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == x + 0);
-axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function KeyboardExtension__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == x + 8);
-axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function KeyboardPowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == x + 8);
-axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MajorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
-axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MakeCode__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == x + 4);
-axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MinorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
-axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MouseExtension__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == x + 4);
-axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MousePowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == x + 4);
-axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function OutputBufferLength___unnamed_16_ae81ad04(int) returns (int);
-
-
-//axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == x + 0);
-axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function OutstandingPowerIrp_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == x + 44);
-axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == INT_ADD(x, 44));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Overlay___unnamed_48_e2bbfb0b(int) returns (int);
-
-
-//axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == x + 0);
-axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Parameters__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
-axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PendingReturned__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
-axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PnpDeviceState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == x + 316);
-axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == INT_ADD(x, 316));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerCaps__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == x + 328);
-axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 328));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerEvent__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == x + 329);
-axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 329));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerFlags__GLOBALS(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == x + 40);
-axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == INT_ADD(x, 40));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerSpinLock__CONTROLLER_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == x + 116);
-axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == INT_ADD(x, 116));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == x + 48);
-axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == INT_ADD(x, 48));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Power___unnamed_16_afe81cff(int) returns (int);
-
-
-//axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == x + 0);
-axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function RemoveLock_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == x + 20);
-axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Self_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == x + 0);
-axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ShutdownType_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == x + 56);
-axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == INT_ADD(x, 56));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ShutdownType___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == x + 12);
-axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Started_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == x + 326);
-axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == INT_ADD(x, 326));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function State___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == x + 8);
-axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Status___unnamed_4_d4b13373(int) returns (int);
-
-
-//axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == x + 0);
-axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == x + 332);
-axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 332));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == x + 368);
-axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 368));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemBuffer___unnamed_4_99f86ad5(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == x + 0);
-axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemState_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == x + 52);
-axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == INT_ADD(x, 52));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Tail__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
-axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function TopOfStack_COMMON_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == x + 12);
-axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Type___unnamed_16_57972375(int) returns (int);
-
-
-//axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == x + 4);
-axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_12_41c62b26___unnamed_40_32307de2(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == x + 24);
-axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_4_3c640f23___unnamed_12_41c62b26(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == x + 8);
-axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_4_d4b13373__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-
-///////////////////////////////////
-// will be replaced by:
-// "//" when using bv mode
-// "" when using int mode
-// main reason is to avoid using bv for constants
-// or avoid translating lines that are complex or unsound
-//////////////////////////////////
-
-////////////////////////////////////////////
-/////// functions for int type /////////////
-// Theorem prover does not see INT_ADD etc.
-////////////////////////////////////////////
-function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
-function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
-
-function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
-function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
-function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
-function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
-function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
-function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
-
-
-////////////////////////////////////////////
-/////// functions for bv32 type /////////////
-// Theorem prover does not see INT_ADD etc.
-// we are treating unsigned ops now
-////////////////////////////////////////////
-function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
-function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
-
-function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
-
-//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
-//only enabled with bv theory
-// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
-
-//////////////////////////////////
-// Generic C Arithmetic operations
-/////////////////////////////////
-
-//Is this sound for bv32?
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
- axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
- INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
-
-//we just keep this axiom for size = 1
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
-
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
-
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
-
-function MULT(a:int, b:int) returns (int); // a*b
-//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-// Not sure if these axioms hold for BV too, just commet them for BV
-
-
-
-//uninterpreted binary op
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-
-//////////////////////////////////////////
-//// Bitwise ops (uninterpreted, used with int)
-//////////////////////////////////////////
-
-
- function BIT_BAND(a:int, b:int) returns (x:int);
-
-
- function BIT_BOR(a:int, b:int) returns (x:int);
- function BIT_BXOR(a:int, b:int) returns (x:int);
- function BIT_BNOT(a:int) returns (int);
-
-
-
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function PTR_NOT(a:int) returns (int);
-axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
-axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-
-function NewAlloc(x:int, y:int) returns (z:int);
-
-//Comments below make HAVOC_malloc deterministic
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-//requires obj_size >= 0;
-free requires INT_GEQ(obj_size, 0);
-modifies alloc;
-ensures new == old(alloc);
-//ensures alloc > new + obj_size;
-ensures INT_GT(alloc, INT_ADD(new, obj_size));
-//ensures alloc == NewAlloc(old(alloc), obj_size);
-
-
-
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-
-/*
-//bv functions
-function bv8ToInt(bv8) returns (int);
-function bv16ToInt(bv16) returns (int);
-function bv32ToInt(bv32) returns (int);
-function bv64ToInt(bv64) returns (int);
-
-function intToBv8(int) returns (bv8);
-function intToBv16(int) returns (bv16);
-function intToBv32(int) returns (bv32);
-function intToBv64(int) returns (bv64);
-
-axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
-axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
-axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
-axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
-
-axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
-axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
-axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
-axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
-*/
-
-
-
-var Res_0_COMPLETED : [int]int;
-var Res_1_COMPLETED : [int]int;
-var Res_s_1_COMPLETED : [int]int;
-var Res_KERNEL_SOURCE:[int]int;
-var Res_0_LOCK : [int]int;
-var Res_1_LOCK : [int]int;
-var Res_s_1_LOCK : [int]int;
-var Res_PROBED:[int]int;
-
-//Pointer constants
-
-//Function pointer constants
-
-
-const unique Globals : int;
-axiom(Globals != 0);
-const unique I8xCompleteSysButtonEventWorker : int;
-axiom(I8xCompleteSysButtonEventWorker != 0);
-const unique I8xPowerUpToD0Complete : int;
-axiom(I8xPowerUpToD0Complete != 0);
-const unique I8xReinitializeHardware : int;
-axiom(I8xReinitializeHardware != 0);
-const unique I8xSysButtonCancelRoutine : int;
-axiom(I8xSysButtonCancelRoutine != 0);
-var cancelLockStatus_0 : int;
-var cancelLockStatus_1 : int;
-var cancelLockStatus_s_1 : int;
-
-const unique hdevobj : int;
-axiom(hdevobj != 0);
-// the set of constants for 64 bit integers that Boogie doesn't parse
-const unique BOOGIE_LARGE_INT_2147483648:int;
-
-
-
-procedure DRIVER_CANCEL(a0:int, a1:int);
-
-
-
-procedure ExFreePoolWithTag(a0:int, a1:int);
-
-
-
-procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
-
-
-
-procedure IoAllocateWorkItem(a0:int) returns (ret:int);
-
-
-
-procedure IoDisconnectInterrupt(a0:int);
-
-
-
-procedure IoFreeWorkItem(a0:int);
-
-
-
-procedure IoQueueWorkItem(a0:int, a1:int, a2:int, a3:int);
-
-
-
-procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
-
-
-
-procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure PoStartNextPowerIrp(a0:int);
-
-
-
-procedure __PREfastPagedCode();
-
-
-
-procedure __storm_assert_dummy();
-
-
-
-procedure __storm_atomic_begin_dummy();
-
-
-
-procedure __storm_atomic_end_dummy();
-
-
-
-procedure memcpy(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure memset(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-
-
-
-procedure storm_nondet() returns (ret:int);
-
-
-
-procedure storm_main();
- free requires 0 < alloc;
- free requires 0 < tid;
- free requires tid < tidCount;
- requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
- modifies tidCount, alloc, raiseException, cancelLockStatus_s_1, __storm_init, __storm_atomic, errorReached, cancelLockStatus_0, cancelLockStatus_1, __storm_thread_done_3, __storm_thread_done_2, __storm_thread_done_1, __storm_thread_done_0, tid, k, Res_0_COMPLETED, Res_1_COMPLETED, Res_KERNEL_SOURCE, Res_0_LOCK, Res_1_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_1_T.CancelRoutine__IRP, Mem_0_T.Cancel__IRP, Mem_1_T.Cancel__IRP, Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_1_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.DeviceObject__IO_STACK_LOCATION, Mem_1_T.DeviceObject__IO_STACK_LOCATION;
-
-
-
-implementation storm_main()
-{
- var inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, $irpSp$2$92.21$storm_main: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp: int, inline$storm_getThreadID$5$tidRet: int, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$: int, inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$: int, inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$5$myVar_0: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1: int, inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, $result.IoGetCurrentIrpStackLocation$99.38$2$: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$dispatch$0$$Irp$1$8.19$dispatch_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$storm_getThreadID$0$tidRet: int, inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver: int, inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$: int, inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0: int, inline$storm_getThreadID$1$tidRet: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$cancel$0$$Irp$1$64.17$cancel: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$cancel$0$$Irp$1$64.17$cancel_.1: int, $irp$1$91.7$storm_main: int, inline$myInitDriver$0$myNondetVar_0: int, inline$myInitDriver$0$myNondetVar_1: int, inline$storm_getThreadID$4$tidRet: int, inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$: int, inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$: int, inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$: int, inline$I8xSysButtonCancelRoutine$0$myVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest: int, k_old_2: int, inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine: int, inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$: int, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$: int, inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1: int, k_old_1: int, k_old_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$myVar_0: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1: int, inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine: int, inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_1: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_0: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$: int, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$: int, inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0: int, inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine: int, inline$I8xDeviceControl$0$myVar_0: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_IoSetCancelRoutine$1$myVar_0: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1: int, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1: int, inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock: int, inline$storm_getThreadID$3$tidRet: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$: int, inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock: int, inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$: int, inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_getThreadID$2$tidRet: int, inline$I8xDeviceControl$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation: int, inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent: int, inline$dispatch$0$$Irp$1$8.19$dispatch: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp: int, $result.storm_IoAllocateIrp$96.21$1$: int, tidCount_old: int, inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1: int, inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xCompleteSysButtonIrp$0$myNondetVar_0: int, inline$myInitDriver$0$myVar_0: int, tid_old_1: int, tid_old_0: int, tid_old_2: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1: int, inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$: int, inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$: int;
-
- start#2:
- assume Res_1_COMPLETED == Res_s_1_COMPLETED;
- assume Res_1_LOCK == Res_s_1_LOCK;
- assume Mem_1_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
- assume Mem_1_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
- assume Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
- assume Mem_1_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
- assume Mem_1_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
- assume cancelLockStatus_1 == cancelLockStatus_s_1;
- __storm_thread_done_0 := false;
- __storm_thread_done_1 := false;
- __storm_thread_done_2 := false;
- __storm_thread_done_3 := false;
- k := 0;
- errorReached := false;
- __storm_atomic := false;
- __storm_init := false;
- goto label_3#2;
-
- label_3#2:
- goto label_4#2;
-
- label_4#2:
- goto label_5#2;
-
- label_5#2:
- goto anon22_Then#2, anon22_Else#2;
-
- anon22_Else#2:
- assume k != 0;
- goto anon23_Then#2, anon23_Else#2;
-
- anon23_Else#2:
- assume k != 1;
- goto anon2#2;
-
- anon23_Then#2:
- assume k == 1;
- cancelLockStatus_1 := 0;
- goto anon2#2;
-
- anon22_Then#2:
- assume k == 0;
- cancelLockStatus_0 := 0;
- goto anon2#2;
-
- anon2#2:
- call contextSwitch();
- goto label_6#2;
-
- label_6#2:
- goto inline$storm_IoAllocateIrp$0$Entry#2;
-
- inline$storm_IoAllocateIrp$0$Entry#2:
- inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1 := 2;
- goto inline$storm_IoAllocateIrp$0$start#2;
-
- inline$storm_IoAllocateIrp$0$start#2:
- inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1;
- goto inline$storm_IoAllocateIrp$0$label_3#2;
-
- inline$storm_IoAllocateIrp$0$label_3#2:
- goto inline$storm_IoAllocateIrp$0$label_4#2;
-
- inline$storm_IoAllocateIrp$0$label_4#2:
- goto inline$storm_IoAllocateIrp$0$label_5#2;
-
- inline$storm_IoAllocateIrp$0$label_5#2:
- call inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ := storm_nondet();
- goto inline$storm_IoAllocateIrp$0$label_8#2;
-
- inline$storm_IoAllocateIrp$0$label_8#2:
- goto inline$storm_IoAllocateIrp$0$label_8_case_0#2, inline$storm_IoAllocateIrp$0$label_8_case_1#2;
-
- inline$storm_IoAllocateIrp$0$label_8_case_1#2:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ == 0;
- goto inline$storm_IoAllocateIrp$0$label_10#2;
-
- inline$storm_IoAllocateIrp$0$label_10#2:
- __storm_atomic := true;
- goto inline$storm_IoAllocateIrp$0$label_13#2;
-
- inline$storm_IoAllocateIrp$0$label_13#2:
- call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$ := __HAVOC_malloc(112);
- goto inline$storm_IoAllocateIrp$0$label_16#2;
-
- inline$storm_IoAllocateIrp$0$label_16#2:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$;
- goto inline$storm_IoAllocateIrp$0$label_17#2;
-
- inline$storm_IoAllocateIrp$0$label_17#2:
- goto inline$storm_IoAllocateIrp$0$anon18_Then#2, inline$storm_IoAllocateIrp$0$anon18_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon18_Else#2:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon19_Then#2, inline$storm_IoAllocateIrp$0$anon19_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon19_Else#2:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon2#2;
-
- inline$storm_IoAllocateIrp$0$anon19_Then#2:
- assume k == 1;
- Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon2#2;
-
- inline$storm_IoAllocateIrp$0$anon18_Then#2:
- assume k == 0;
- Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon2#2;
-
- inline$storm_IoAllocateIrp$0$anon2#2:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_18#2;
-
- inline$storm_IoAllocateIrp$0$label_18#2:
- goto inline$storm_IoAllocateIrp$0$anon20_Then#2, inline$storm_IoAllocateIrp$0$anon20_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon20_Else#2:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon21_Then#2, inline$storm_IoAllocateIrp$0$anon21_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon21_Else#2:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon5#2;
-
- inline$storm_IoAllocateIrp$0$anon21_Then#2:
- assume k == 1;
- Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon5#2;
-
- inline$storm_IoAllocateIrp$0$anon20_Then#2:
- assume k == 0;
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
- goto inline$storm_IoAllocateIrp$0$anon5#2;
-
- inline$storm_IoAllocateIrp$0$anon5#2:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_19#2;
-
- inline$storm_IoAllocateIrp$0$label_19#2:
- goto inline$storm_IoAllocateIrp$0$anon22_Then#2, inline$storm_IoAllocateIrp$0$anon22_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon22_Else#2:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon23_Then#2, inline$storm_IoAllocateIrp$0$anon23_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon23_Else#2:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon8#2;
-
- inline$storm_IoAllocateIrp$0$anon23_Then#2:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
- goto inline$storm_IoAllocateIrp$0$anon8#2;
-
- inline$storm_IoAllocateIrp$0$anon22_Then#2:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
- goto inline$storm_IoAllocateIrp$0$anon8#2;
-
- inline$storm_IoAllocateIrp$0$anon8#2:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_20#2;
-
- inline$storm_IoAllocateIrp$0$label_20#2:
- havoc raiseException;
- goto inline$storm_IoAllocateIrp$0$anon24_Then#2, inline$storm_IoAllocateIrp$0$anon24_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon24_Else#2:
- assume !raiseException;
- goto inline$storm_IoAllocateIrp$0$anon10#2;
-
- inline$storm_IoAllocateIrp$0$anon10#2:
- assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp);
- goto inline$storm_IoAllocateIrp$0$label_21#2;
-
- inline$storm_IoAllocateIrp$0$label_21#2:
- inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp, 36);
- goto inline$storm_IoAllocateIrp$0$label_22#2;
-
- inline$storm_IoAllocateIrp$0$label_22#2:
- call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
- goto inline$storm_IoAllocateIrp$0$label_25#2;
-
- inline$storm_IoAllocateIrp$0$label_25#2:
- inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$;
- goto inline$storm_IoAllocateIrp$0$label_26#2;
-
- inline$storm_IoAllocateIrp$0$label_26#2:
- goto inline$storm_IoAllocateIrp$0$anon25_Then#2, inline$storm_IoAllocateIrp$0$anon25_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon25_Else#2:
- assume k != 0;
- goto inline$storm_IoAllocateIrp$0$anon26_Then#2, inline$storm_IoAllocateIrp$0$anon26_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon26_Else#2:
- assume k != 1;
- goto inline$storm_IoAllocateIrp$0$anon13#2;
-
- inline$storm_IoAllocateIrp$0$anon26_Then#2:
- assume k == 1;
- Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
- goto inline$storm_IoAllocateIrp$0$anon13#2;
-
- inline$storm_IoAllocateIrp$0$anon25_Then#2:
- assume k == 0;
- Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
- goto inline$storm_IoAllocateIrp$0$anon13#2;
-
- inline$storm_IoAllocateIrp$0$anon13#2:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_27#2;
-
- inline$storm_IoAllocateIrp$0$label_27#2:
- goto inline$IoGetNextIrpStackLocation$0$Entry#2;
-
- inline$IoGetNextIrpStackLocation$0$Entry#2:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
- goto inline$IoGetNextIrpStackLocation$0$start#2;
-
- inline$IoGetNextIrpStackLocation$0$start#2:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation := inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1;
- goto inline$IoGetNextIrpStackLocation$0$label_3#2;
-
- inline$IoGetNextIrpStackLocation$0$label_3#2:
- goto inline$IoGetNextIrpStackLocation$0$anon3_Then#2, inline$IoGetNextIrpStackLocation$0$anon3_Else#2;
-
- inline$IoGetNextIrpStackLocation$0$anon3_Else#2:
- assume k != 0;
- goto inline$IoGetNextIrpStackLocation$0$anon4_Then#2, inline$IoGetNextIrpStackLocation$0$anon4_Else#2;
-
- inline$IoGetNextIrpStackLocation$0$anon4_Else#2:
- assume k != 1;
- goto inline$IoGetNextIrpStackLocation$0$anon2#2;
-
- inline$IoGetNextIrpStackLocation$0$anon4_Then#2:
- assume k == 1;
- inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
- goto inline$IoGetNextIrpStackLocation$0$anon2#2;
-
- inline$IoGetNextIrpStackLocation$0$anon3_Then#2:
- assume k == 0;
- inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
- goto inline$IoGetNextIrpStackLocation$0$anon2#2;
-
- inline$IoGetNextIrpStackLocation$0$anon2#2:
- call contextSwitch();
- inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$ := MINUS_LEFT_PTR(inline$IoGetNextIrpStackLocation$0$myVar_0, 36, 1);
- goto inline$IoGetNextIrpStackLocation$0$label_1#2;
-
- inline$IoGetNextIrpStackLocation$0$label_1#2:
- goto inline$IoGetNextIrpStackLocation$0$Return#2;
-
- inline$IoGetNextIrpStackLocation$0$Return#2:
- inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$ := inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$;
- goto inline$storm_IoAllocateIrp$0$label_27$1#2;
-
- inline$storm_IoAllocateIrp$0$label_27$1#2:
- goto inline$storm_IoAllocateIrp$0$anon27_Then#2, inline$storm_IoAllocateIrp$0$anon27_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon27_Else#2:
- assume !raiseException;
- goto inline$storm_IoAllocateIrp$0$anon15#2;
-
- inline$storm_IoAllocateIrp$0$anon15#2:
- goto inline$storm_IoAllocateIrp$0$label_30#2;
-
- inline$storm_IoAllocateIrp$0$label_30#2:
- inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$;
- goto inline$storm_IoAllocateIrp$0$label_31#2;
-
- inline$storm_IoAllocateIrp$0$label_31#2:
- goto inline$storm_IoAllocateIrp$0$label_32#2;
-
- inline$storm_IoAllocateIrp$0$label_32#2:
- goto inline$storm_IoAllocateIrp$0$label_33#2;
-
- inline$storm_IoAllocateIrp$0$label_33#2:
- goto inline$storm_IoAllocateIrp$0$anon28_Then#2, inline$storm_IoAllocateIrp$0$anon28_Else#2;
-
- inline$storm_IoAllocateIrp$0$anon28_Else#2:
- assume __storm_init;
- goto inline$storm_IoAllocateIrp$0$anon17#2;
-
- inline$storm_IoAllocateIrp$0$anon28_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAllocateIrp$0$anon17#2;
-
- inline$storm_IoAllocateIrp$0$anon17#2:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_36#2;
-
- inline$storm_IoAllocateIrp$0$anon27_Then#2:
- assume raiseException;
- goto inline$storm_IoAllocateIrp$0$Return#2;
-
- inline$storm_IoAllocateIrp$0$anon24_Then#2:
- assume raiseException;
- goto inline$storm_IoAllocateIrp$0$Return#2;
-
- inline$storm_IoAllocateIrp$0$label_8_case_0#2:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ != 0;
- goto inline$storm_IoAllocateIrp$0$label_9#2;
-
- inline$storm_IoAllocateIrp$0$label_9#2:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0;
- goto inline$storm_IoAllocateIrp$0$label_36#2;
-
- inline$storm_IoAllocateIrp$0$label_36#2:
- inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
- goto inline$storm_IoAllocateIrp$0$label_1#2;
-
- inline$storm_IoAllocateIrp$0$label_1#2:
- goto inline$storm_IoAllocateIrp$0$Return#2;
-
- inline$storm_IoAllocateIrp$0$Return#2:
- $result.storm_IoAllocateIrp$96.21$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$;
- goto label_6$1#2;
-
- label_6$1#2:
- goto anon24_Then#2, anon24_Else#2;
-
- anon24_Else#2:
- assume !raiseException;
- goto anon4#2;
-
- anon4#2:
- goto label_9#2;
-
- label_9#2:
- $irp$1$91.7$storm_main := $result.storm_IoAllocateIrp$96.21$1$;
- goto label_10#2;
-
- label_10#2:
- havoc raiseException;
- goto anon25_Then#2, anon25_Else#2;
-
- anon25_Else#2:
- assume !raiseException;
- goto anon6#2;
-
- anon6#2:
- assume INT_NEQ($irp$1$91.7$storm_main, 0);
- goto label_11#2;
-
- label_11#2:
- goto inline$IoSetNextIrpStackLocation$0$Entry#2;
-
- inline$IoSetNextIrpStackLocation$0$Entry#2:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1 := $irp$1$91.7$storm_main;
- goto inline$IoSetNextIrpStackLocation$0$start#2;
-
- inline$IoSetNextIrpStackLocation$0$start#2:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation := inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1;
- goto inline$IoSetNextIrpStackLocation$0$label_3#2;
-
- inline$IoSetNextIrpStackLocation$0$label_3#2:
- havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 1, 1);
- goto inline$IoSetNextIrpStackLocation$0$label_4#2;
-
- inline$IoSetNextIrpStackLocation$0$label_4#2:
- goto inline$IoSetNextIrpStackLocation$0$anon6_Then#2, inline$IoSetNextIrpStackLocation$0$anon6_Else#2;
-
- inline$IoSetNextIrpStackLocation$0$anon6_Else#2:
- assume k != 0;
- goto inline$IoSetNextIrpStackLocation$0$anon7_Then#2, inline$IoSetNextIrpStackLocation$0$anon7_Else#2;
-
- inline$IoSetNextIrpStackLocation$0$anon7_Else#2:
- assume k != 1;
- goto inline$IoSetNextIrpStackLocation$0$anon2#2;
-
- inline$IoSetNextIrpStackLocation$0$anon7_Then#2:
- assume k == 1;
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
- goto inline$IoSetNextIrpStackLocation$0$anon2#2;
-
- inline$IoSetNextIrpStackLocation$0$anon6_Then#2:
- assume k == 0;
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
- goto inline$IoSetNextIrpStackLocation$0$anon2#2;
-
- inline$IoSetNextIrpStackLocation$0$anon2#2:
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$0$anon8_Then#2, inline$IoSetNextIrpStackLocation$0$anon8_Else#2;
-
- inline$IoSetNextIrpStackLocation$0$anon8_Else#2:
- assume k != 0;
- goto inline$IoSetNextIrpStackLocation$0$anon9_Then#2, inline$IoSetNextIrpStackLocation$0$anon9_Else#2;
-
- inline$IoSetNextIrpStackLocation$0$anon9_Else#2:
- assume k != 1;
- goto inline$IoSetNextIrpStackLocation$0$anon5#2;
-
- inline$IoSetNextIrpStackLocation$0$anon9_Then#2:
- assume k == 1;
- Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
- goto inline$IoSetNextIrpStackLocation$0$anon5#2;
-
- inline$IoSetNextIrpStackLocation$0$anon8_Then#2:
- assume k == 0;
- Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
- goto inline$IoSetNextIrpStackLocation$0$anon5#2;
-
- inline$IoSetNextIrpStackLocation$0$anon5#2:
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$0$label_1#2;
-
- inline$IoSetNextIrpStackLocation$0$label_1#2:
- goto inline$IoSetNextIrpStackLocation$0$Return#2;
-
- inline$IoSetNextIrpStackLocation$0$Return#2:
- goto label_11$1#2;
-
- label_11$1#2:
- goto anon26_Then#2, anon26_Else#2;
-
- anon26_Else#2:
- assume !raiseException;
- goto anon8#2;
-
- anon8#2:
- goto label_14#2;
-
- label_14#2:
- goto inline$IoGetCurrentIrpStackLocation$0$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$0$Entry#2:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := $irp$1$91.7$storm_main;
- goto inline$IoGetCurrentIrpStackLocation$0$start#2;
-
- inline$IoGetCurrentIrpStackLocation$0$start#2:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
- goto inline$IoGetCurrentIrpStackLocation$0$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$0$label_3#2:
- goto inline$IoGetCurrentIrpStackLocation$0$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$0$anon3_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$0$anon3_Else#2:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$0$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$0$anon4_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$0$anon4_Else#2:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$0$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$0$anon4_Then#2:
- assume k == 1;
- inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- goto inline$IoGetCurrentIrpStackLocation$0$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$0$anon3_Then#2:
- assume k == 0;
- inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- goto inline$IoGetCurrentIrpStackLocation$0$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$0$anon2#2:
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$0$myVar_0;
- goto inline$IoGetCurrentIrpStackLocation$0$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$0$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$0$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$0$Return#2:
- $result.IoGetCurrentIrpStackLocation$99.38$2$ := inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
- goto label_14$1#2;
-
- label_14$1#2:
- goto anon27_Then#2, anon27_Else#2;
-
- anon27_Else#2:
- assume !raiseException;
- goto anon10#2;
-
- anon10#2:
- goto label_17#2;
-
- label_17#2:
- $irpSp$2$92.21$storm_main := $result.IoGetCurrentIrpStackLocation$99.38$2$;
- goto label_18#2;
-
- label_18#2:
- goto anon28_Then#2, anon28_Else#2;
-
- anon28_Else#2:
- assume k != 0;
- goto anon29_Then#2, anon29_Else#2;
-
- anon29_Else#2:
- assume k != 1;
- goto anon13#2;
-
- anon29_Then#2:
- assume k == 1;
- Mem_1_T.DeviceObject__IO_STACK_LOCATION := Mem_1_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
- goto anon13#2;
-
- anon28_Then#2:
- assume k == 0;
- Mem_0_T.DeviceObject__IO_STACK_LOCATION := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
- goto anon13#2;
-
- anon13#2:
- call contextSwitch();
- goto label_19#2;
-
- label_19#2:
- goto inline$myInitDriver$0$Entry#2;
-
- inline$myInitDriver$0$Entry#2:
- goto inline$myInitDriver$0$start#2;
-
- inline$myInitDriver$0$start#2:
- goto inline$myInitDriver$0$label_3#2;
-
- inline$myInitDriver$0$label_3#2:
- goto inline$myInitDriver$0$label_4#2;
-
- inline$myInitDriver$0$label_4#2:
- goto inline$myInitDriver$0$anon5_Then#2, inline$myInitDriver$0$anon5_Else#2;
-
- inline$myInitDriver$0$anon5_Else#2:
- assume k != 0;
- goto inline$myInitDriver$0$anon6_Then#2, inline$myInitDriver$0$anon6_Else#2;
-
- inline$myInitDriver$0$anon6_Else#2:
- assume k != 1;
- goto inline$myInitDriver$0$anon2#2;
-
- inline$myInitDriver$0$anon6_Then#2:
- assume k == 1;
- inline$myInitDriver$0$myVar_0 := Mem_1_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
- goto inline$myInitDriver$0$anon2#2;
-
- inline$myInitDriver$0$anon5_Then#2:
- assume k == 0;
- inline$myInitDriver$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
- goto inline$myInitDriver$0$anon2#2;
-
- inline$myInitDriver$0$anon2#2:
- call contextSwitch();
- inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver := inline$myInitDriver$0$myVar_0;
- goto inline$myInitDriver$0$label_5#2;
-
- inline$myInitDriver$0$label_5#2:
- havoc inline$myInitDriver$0$myNondetVar_0;
- havoc inline$myInitDriver$0$myNondetVar_1;
- assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
- goto inline$storm_KeInitializeSpinLock$0$Entry#2;
-
- inline$storm_KeInitializeSpinLock$0$Entry#2:
- inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver);
- goto inline$storm_KeInitializeSpinLock$0$start#2;
-
- inline$storm_KeInitializeSpinLock$0$start#2:
- inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1;
- goto inline$storm_KeInitializeSpinLock$0$label_3#2;
-
- inline$storm_KeInitializeSpinLock$0$label_3#2:
- goto inline$storm_KeInitializeSpinLock$0$anon3_Then#2, inline$storm_KeInitializeSpinLock$0$anon3_Else#2;
-
- inline$storm_KeInitializeSpinLock$0$anon3_Else#2:
- assume k != 0;
- goto inline$storm_KeInitializeSpinLock$0$anon4_Then#2, inline$storm_KeInitializeSpinLock$0$anon4_Else#2;
-
- inline$storm_KeInitializeSpinLock$0$anon4_Else#2:
- assume k != 1;
- goto inline$storm_KeInitializeSpinLock$0$anon2#2;
-
- inline$storm_KeInitializeSpinLock$0$anon4_Then#2:
- assume k == 1;
- Res_1_LOCK := Res_1_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := 0];
- goto inline$storm_KeInitializeSpinLock$0$anon2#2;
-
- inline$storm_KeInitializeSpinLock$0$anon3_Then#2:
- assume k == 0;
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := 0];
- goto inline$storm_KeInitializeSpinLock$0$anon2#2;
-
- inline$storm_KeInitializeSpinLock$0$anon2#2:
- call contextSwitch();
- goto inline$storm_KeInitializeSpinLock$0$label_1#2;
-
- inline$storm_KeInitializeSpinLock$0$label_1#2:
- goto inline$storm_KeInitializeSpinLock$0$Return#2;
-
- inline$storm_KeInitializeSpinLock$0$Return#2:
- goto inline$myInitDriver$0$label_5$1#2;
-
- inline$myInitDriver$0$label_5$1#2:
- goto inline$myInitDriver$0$anon7_Then#2, inline$myInitDriver$0$anon7_Else#2;
-
- inline$myInitDriver$0$anon7_Else#2:
- assume !raiseException;
- goto inline$myInitDriver$0$anon4#2;
-
- inline$myInitDriver$0$anon4#2:
- havoc inline$myInitDriver$0$myNondetVar_0;
- goto inline$myInitDriver$0$label_1#2;
-
- inline$myInitDriver$0$label_1#2:
- goto inline$myInitDriver$0$Return#2;
-
- inline$myInitDriver$0$anon7_Then#2:
- assume raiseException;
- goto inline$myInitDriver$0$Return#2;
-
- inline$myInitDriver$0$Return#2:
- goto label_19$1#2;
-
- label_19$1#2:
- goto anon30_Then#2, anon30_Else#2;
-
- anon30_Else#2:
- assume !raiseException;
- goto anon15#2;
-
- anon15#2:
- goto label_22#2;
-
- label_22#2:
- goto label_23#2;
-
- label_23#2:
- k_old_0 := k;
- tid_old_0 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$dispatch$0$Entry#2;
-
- inline$dispatch$0$Entry#2:
- inline$dispatch$0$$Irp$1$8.19$dispatch_.1 := $irp$1$91.7$storm_main;
- goto inline$dispatch$0$start#2;
-
- inline$dispatch$0$start#2:
- inline$dispatch$0$$Irp$1$8.19$dispatch := inline$dispatch$0$$Irp$1$8.19$dispatch_.1;
- goto inline$dispatch$0$label_3#2;
-
- inline$dispatch$0$label_3#2:
- goto inline$dispatch$0$label_4#2;
-
- inline$dispatch$0$label_4#2:
- goto inline$IoGetCurrentIrpStackLocation$1$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$1$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$1$start#2;
-
- inline$IoGetCurrentIrpStackLocation$1$start#2:
- goto inline$IoGetCurrentIrpStackLocation$1$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$1$label_3#2:
- goto inline$IoGetCurrentIrpStackLocation$1$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$1$anon3_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$1$anon3_Else#2:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$1$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$1$anon4_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$1$anon4_Else#2:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$1$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$1$anon4_Then#2:
- assume k == 1;
- goto inline$IoGetCurrentIrpStackLocation$1$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$1$anon3_Then#2:
- assume k == 0;
- goto inline$IoGetCurrentIrpStackLocation$1$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$1$anon2#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$1$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$1$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$1$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$1$Return#2:
- goto inline$dispatch$0$label_4$1#2;
-
- inline$dispatch$0$label_4$1#2:
- goto inline$dispatch$0$anon4_Then#2, inline$dispatch$0$anon4_Else#2;
-
- inline$dispatch$0$anon4_Else#2:
- assume !raiseException;
- goto inline$dispatch$0$anon1#2;
-
- inline$dispatch$0$anon1#2:
- goto inline$dispatch$0$label_7#2;
-
- inline$dispatch$0$label_7#2:
- goto inline$dispatch$0$label_8#2;
-
- inline$dispatch$0$label_8#2:
- goto inline$I8xDeviceControl$0$Entry#2;
-
- inline$I8xDeviceControl$0$Entry#2:
- inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1 := hdevobj;
- inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1 := inline$dispatch$0$$Irp$1$8.19$dispatch;
- goto inline$I8xDeviceControl$0$start#2;
-
- inline$I8xDeviceControl$0$start#2:
- inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl := inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1;
- inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1;
- goto inline$I8xDeviceControl$0$label_3#2;
-
- inline$I8xDeviceControl$0$label_3#2:
- goto inline$I8xDeviceControl$0$label_4#2;
-
- inline$I8xDeviceControl$0$label_4#2:
- goto inline$I8xDeviceControl$0$label_5#2;
-
- inline$I8xDeviceControl$0$label_5#2:
- goto inline$I8xDeviceControl$0$label_6#2;
-
- inline$I8xDeviceControl$0$label_6#2:
- goto inline$I8xDeviceControl$0$label_7#2;
-
- inline$I8xDeviceControl$0$label_7#2:
- call __PREfastPagedCode();
- goto inline$I8xDeviceControl$0$anon13_Then#2, inline$I8xDeviceControl$0$anon13_Else#2;
-
- inline$I8xDeviceControl$0$anon13_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon1#2;
-
- inline$I8xDeviceControl$0$anon1#2:
- goto inline$I8xDeviceControl$0$label_10#2;
-
- inline$I8xDeviceControl$0$label_10#2:
- goto inline$I8xDeviceControl$0$anon14_Then#2, inline$I8xDeviceControl$0$anon14_Else#2;
-
- inline$I8xDeviceControl$0$anon14_Else#2:
- assume k != 0;
- goto inline$I8xDeviceControl$0$anon15_Then#2, inline$I8xDeviceControl$0$anon15_Else#2;
-
- inline$I8xDeviceControl$0$anon15_Else#2:
- assume k != 1;
- goto inline$I8xDeviceControl$0$anon4#2;
-
- inline$I8xDeviceControl$0$anon15_Then#2:
- assume k == 1;
- inline$I8xDeviceControl$0$myVar_0 := Mem_1_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl)];
- goto inline$I8xDeviceControl$0$anon4#2;
-
- inline$I8xDeviceControl$0$anon14_Then#2:
- assume k == 0;
- inline$I8xDeviceControl$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl)];
- goto inline$I8xDeviceControl$0$anon4#2;
-
- inline$I8xDeviceControl$0$anon4#2:
- call contextSwitch();
- inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl := inline$I8xDeviceControl$0$myVar_0;
- goto inline$I8xDeviceControl$0$label_11#2;
-
- inline$I8xDeviceControl$0$label_11#2:
- goto inline$I8xDeviceControl$0$label_11_true#2, inline$I8xDeviceControl$0$label_11_false#2;
-
- inline$I8xDeviceControl$0$label_11_false#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
- goto inline$I8xDeviceControl$0$label_12#2;
-
- inline$I8xDeviceControl$0$label_11_true#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
- goto inline$I8xDeviceControl$0$label_13#2;
-
- inline$I8xDeviceControl$0$label_13#2:
- goto inline$I8xDeviceControl$0$label_13_true#2, inline$I8xDeviceControl$0$label_13_false#2;
-
- inline$I8xDeviceControl$0$label_13_false#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
- goto inline$I8xDeviceControl$0$label_12#2;
-
- inline$I8xDeviceControl$0$label_13_true#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
- goto inline$I8xDeviceControl$0$label_14#2;
-
- inline$I8xDeviceControl$0$label_14#2:
- goto inline$I8xDeviceControl$0$label_14_true#2, inline$I8xDeviceControl$0$label_14_false#2;
-
- inline$I8xDeviceControl$0$label_14_false#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) == 0;
- goto inline$I8xDeviceControl$0$label_15#2;
-
- inline$I8xDeviceControl$0$label_15#2:
- goto inline$IoGetCurrentIrpStackLocation$2$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$2$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$2$start#2;
-
- inline$IoGetCurrentIrpStackLocation$2$start#2:
- goto inline$IoGetCurrentIrpStackLocation$2$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$2$label_3#2:
- goto inline$IoGetCurrentIrpStackLocation$2$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$2$anon3_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$2$anon3_Else#2:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$2$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$2$anon4_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$2$anon4_Else#2:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$2$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$2$anon4_Then#2:
- assume k == 1;
- goto inline$IoGetCurrentIrpStackLocation$2$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$2$anon3_Then#2:
- assume k == 0;
- goto inline$IoGetCurrentIrpStackLocation$2$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$2$anon2#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$2$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$2$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$2$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$2$Return#2:
- goto inline$I8xDeviceControl$0$label_15$1#2;
-
- inline$I8xDeviceControl$0$label_15$1#2:
- goto inline$I8xDeviceControl$0$anon16_Then#2, inline$I8xDeviceControl$0$anon16_Else#2;
-
- inline$I8xDeviceControl$0$anon16_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon6#2;
-
- inline$I8xDeviceControl$0$anon6#2:
- goto inline$I8xDeviceControl$0$label_18#2;
-
- inline$I8xDeviceControl$0$label_18#2:
- goto inline$I8xDeviceControl$0$label_19#2;
-
- inline$I8xDeviceControl$0$label_19#2:
- goto inline$I8xDeviceControl$0$label_19_case_0#2, inline$I8xDeviceControl$0$label_19_case_1#2, inline$I8xDeviceControl$0$label_19_case_2#2;
-
- inline$I8xDeviceControl$0$label_19_case_2#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703684;
- goto inline$I8xDeviceControl$0$label_24#2;
-
- inline$I8xDeviceControl$0$label_24#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$Entry#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$Entry#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl;
- inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
- goto inline$I8xKeyboardGetSysButtonEvent$0$start#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$start#2:
- call inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent := __HAVOC_malloc(1);
- inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1;
- inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_3#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_3#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_4#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_4#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_5#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_5#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_6#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_6#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_7#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_7#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_8#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_8#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_9#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_9#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_10#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_10#2:
- goto inline$IoGetCurrentIrpStackLocation$4$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$4$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$4$start#2;
-
- inline$IoGetCurrentIrpStackLocation$4$start#2:
- goto inline$IoGetCurrentIrpStackLocation$4$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$4$label_3#2:
- goto inline$IoGetCurrentIrpStackLocation$4$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$4$anon3_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$4$anon3_Else#2:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$4$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$4$anon4_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$4$anon4_Else#2:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$4$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$4$anon4_Then#2:
- assume k == 1;
- goto inline$IoGetCurrentIrpStackLocation$4$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$4$anon3_Then#2:
- assume k == 0;
- goto inline$IoGetCurrentIrpStackLocation$4$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$4$anon2#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$4$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$4$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$4$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$4$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_13#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_14#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume !INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_15#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_23#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_23#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$0$Entry#2;
-
- inline$storm_KeAcquireSpinLock$0$Entry#2:
- inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
- goto inline$storm_KeAcquireSpinLock$0$start#2;
-
- inline$storm_KeAcquireSpinLock$0$start#2:
- inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
- goto inline$storm_KeAcquireSpinLock$0$label_3#2;
-
- inline$storm_KeAcquireSpinLock$0$label_3#2:
- goto inline$storm_KeAcquireSpinLock$0$label_4#2;
-
- inline$storm_KeAcquireSpinLock$0$label_4#2:
- goto inline$storm_getThreadID$0$Entry#2;
-
- inline$storm_getThreadID$0$Entry#2:
- goto inline$storm_getThreadID$0$anon0#2;
-
- inline$storm_getThreadID$0$anon0#2:
- inline$storm_getThreadID$0$tidRet := tid;
- goto inline$storm_getThreadID$0$Return#2;
-
- inline$storm_getThreadID$0$Return#2:
- inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$0$tidRet;
- goto inline$storm_KeAcquireSpinLock$0$label_4$1#2;
-
- inline$storm_KeAcquireSpinLock$0$label_4$1#2:
- goto inline$storm_KeAcquireSpinLock$0$label_7#2;
-
- inline$storm_KeAcquireSpinLock$0$label_7#2:
- inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$0$label_8#2;
-
- inline$storm_KeAcquireSpinLock$0$label_8#2:
- goto inline$storm_KeAcquireSpinLock$0$label_9#2;
-
- inline$storm_KeAcquireSpinLock$0$label_9#2:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$0$label_12#2;
-
- inline$storm_KeAcquireSpinLock$0$label_12#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon10_Then#2, inline$storm_KeAcquireSpinLock$0$anon10_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon10_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon1#2;
-
- inline$storm_KeAcquireSpinLock$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_13#2;
-
- inline$storm_KeAcquireSpinLock$0$label_13#2:
- goto inline$storm_KeAcquireSpinLock$0$label_13_true#2, inline$storm_KeAcquireSpinLock$0$label_13_false#2;
-
- inline$storm_KeAcquireSpinLock$0$label_13_false#2:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$0$label_14#2;
-
- inline$storm_KeAcquireSpinLock$0$label_14#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$0$label_1#2;
-
- inline$storm_KeAcquireSpinLock$0$label_13_true#2:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$0$label_17#2;
-
- inline$storm_KeAcquireSpinLock$0$label_17#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon11_Then#2, inline$storm_KeAcquireSpinLock$0$anon11_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon11_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon4#2;
-
- inline$storm_KeAcquireSpinLock$0$anon4#2:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
- goto inline$storm_KeAcquireSpinLock$0$label_18#2;
-
- inline$storm_KeAcquireSpinLock$0$label_18#2:
- goto inline$storm_KeAcquireSpinLock$0$anon12_Then#2, inline$storm_KeAcquireSpinLock$0$anon12_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon12_Else#2:
- assume k != 0;
- goto inline$storm_KeAcquireSpinLock$0$anon13_Then#2, inline$storm_KeAcquireSpinLock$0$anon13_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon13_Else#2:
- assume k != 1;
- goto inline$storm_KeAcquireSpinLock$0$anon7#2;
-
- inline$storm_KeAcquireSpinLock$0$anon13_Then#2:
- assume k == 1;
- Res_1_LOCK := Res_1_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock];
- goto inline$storm_KeAcquireSpinLock$0$anon7#2;
-
- inline$storm_KeAcquireSpinLock$0$anon12_Then#2:
- assume k == 0;
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock];
- goto inline$storm_KeAcquireSpinLock$0$anon7#2;
-
- inline$storm_KeAcquireSpinLock$0$anon7#2:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_19#2;
-
- inline$storm_KeAcquireSpinLock$0$label_19#2:
- goto inline$storm_KeAcquireSpinLock$0$anon14_Then#2, inline$storm_KeAcquireSpinLock$0$anon14_Else#2;
-
- inline$storm_KeAcquireSpinLock$0$anon14_Else#2:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$0$anon9#2;
-
- inline$storm_KeAcquireSpinLock$0$anon14_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$0$anon9#2;
-
- inline$storm_KeAcquireSpinLock$0$anon9#2:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_1#2;
-
- inline$storm_KeAcquireSpinLock$0$label_1#2:
- goto inline$storm_KeAcquireSpinLock$0$Return#2;
-
- inline$storm_KeAcquireSpinLock$0$anon11_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$0$Return#2;
-
- inline$storm_KeAcquireSpinLock$0$anon10_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$0$Return#2;
-
- inline$storm_KeAcquireSpinLock$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon5#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_56#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_56#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_57#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_57#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_62#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_62#2:
- goto inline$storm_IoSetCancelRoutine$0$Entry#2;
-
- inline$storm_IoSetCancelRoutine$0$Entry#2:
- inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := I8xSysButtonCancelRoutine;
- goto inline$storm_IoSetCancelRoutine$0$start#2;
-
- inline$storm_IoSetCancelRoutine$0$start#2:
- inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
- inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
- goto inline$storm_IoSetCancelRoutine$0$label_3#2;
-
- inline$storm_IoSetCancelRoutine$0$label_3#2:
- goto inline$storm_IoSetCancelRoutine$0$label_4#2;
-
- inline$storm_IoSetCancelRoutine$0$label_4#2:
- call inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ := storm_nondet();
- goto inline$storm_IoSetCancelRoutine$0$label_7#2;
-
- inline$storm_IoSetCancelRoutine$0$label_7#2:
- goto inline$storm_IoSetCancelRoutine$0$label_7_true#2, inline$storm_IoSetCancelRoutine$0$label_7_false#2;
-
- inline$storm_IoSetCancelRoutine$0$label_7_false#2:
- assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ == 0;
- goto inline$storm_IoSetCancelRoutine$0$label_8#2;
-
- inline$storm_IoSetCancelRoutine$0$label_7_true#2:
- assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ != 0;
- goto inline$storm_IoSetCancelRoutine$0$label_11#2;
-
- inline$storm_IoSetCancelRoutine$0$label_11#2:
- havoc raiseException;
- goto inline$storm_IoSetCancelRoutine$0$anon11_Then#2, inline$storm_IoSetCancelRoutine$0$anon11_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon11_Else#2:
- assume !raiseException;
- goto inline$storm_IoSetCancelRoutine$0$anon1#2;
-
- inline$storm_IoSetCancelRoutine$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_12#2;
-
- inline$storm_IoSetCancelRoutine$0$label_12#2:
- goto inline$storm_IoSetCancelRoutine$0$label_12_true#2, inline$storm_IoSetCancelRoutine$0$label_12_false#2;
-
- inline$storm_IoSetCancelRoutine$0$label_12_false#2:
- assume 0 == 0;
- goto inline$storm_IoSetCancelRoutine$0$label_13#2;
-
- inline$storm_IoSetCancelRoutine$0$label_13#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCancelRoutine$0$label_1#2;
-
- inline$storm_IoSetCancelRoutine$0$label_12_true#2:
- assume 0 != 0;
- goto inline$storm_IoSetCancelRoutine$0$label_8#2;
-
- inline$storm_IoSetCancelRoutine$0$label_8#2:
- __storm_atomic := true;
- goto inline$storm_IoSetCancelRoutine$0$label_16#2;
-
- inline$storm_IoSetCancelRoutine$0$label_16#2:
- goto inline$storm_IoSetCancelRoutine$0$anon12_Then#2, inline$storm_IoSetCancelRoutine$0$anon12_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon12_Else#2:
- assume k != 0;
- goto inline$storm_IoSetCancelRoutine$0$anon13_Then#2, inline$storm_IoSetCancelRoutine$0$anon13_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon13_Else#2:
- assume k != 1;
- goto inline$storm_IoSetCancelRoutine$0$anon5#2;
-
- inline$storm_IoSetCancelRoutine$0$anon13_Then#2:
- assume k == 1;
- goto inline$storm_IoSetCancelRoutine$0$anon5#2;
-
- inline$storm_IoSetCancelRoutine$0$anon12_Then#2:
- assume k == 0;
- goto inline$storm_IoSetCancelRoutine$0$anon5#2;
-
- inline$storm_IoSetCancelRoutine$0$anon5#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_17#2;
-
- inline$storm_IoSetCancelRoutine$0$label_17#2:
- goto inline$storm_IoSetCancelRoutine$0$anon14_Then#2, inline$storm_IoSetCancelRoutine$0$anon14_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon14_Else#2:
- assume k != 0;
- goto inline$storm_IoSetCancelRoutine$0$anon15_Then#2, inline$storm_IoSetCancelRoutine$0$anon15_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon15_Else#2:
- assume k != 1;
- goto inline$storm_IoSetCancelRoutine$0$anon8#2;
-
- inline$storm_IoSetCancelRoutine$0$anon15_Then#2:
- assume k == 1;
- Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
- goto inline$storm_IoSetCancelRoutine$0$anon8#2;
-
- inline$storm_IoSetCancelRoutine$0$anon14_Then#2:
- assume k == 0;
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
- goto inline$storm_IoSetCancelRoutine$0$anon8#2;
-
- inline$storm_IoSetCancelRoutine$0$anon8#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_18#2;
-
- inline$storm_IoSetCancelRoutine$0$label_18#2:
- goto inline$storm_IoSetCancelRoutine$0$anon16_Then#2, inline$storm_IoSetCancelRoutine$0$anon16_Else#2;
-
- inline$storm_IoSetCancelRoutine$0$anon16_Else#2:
- assume __storm_init;
- goto inline$storm_IoSetCancelRoutine$0$anon10#2;
-
- inline$storm_IoSetCancelRoutine$0$anon16_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoSetCancelRoutine$0$anon10#2;
-
- inline$storm_IoSetCancelRoutine$0$anon10#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$0$label_21#2;
-
- inline$storm_IoSetCancelRoutine$0$label_21#2:
- goto inline$storm_IoSetCancelRoutine$0$label_1#2;
-
- inline$storm_IoSetCancelRoutine$0$label_1#2:
- goto inline$storm_IoSetCancelRoutine$0$Return#2;
-
- inline$storm_IoSetCancelRoutine$0$anon11_Then#2:
- assume raiseException;
- goto inline$storm_IoSetCancelRoutine$0$Return#2;
-
- inline$storm_IoSetCancelRoutine$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon44_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon44_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon44_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon21#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon21#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_65#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_65#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon47_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon47_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon47_Else#2:
- assume k != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon48_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon48_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon48_Else#2:
- assume k != 1;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon48_Then#2:
- assume k == 1;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon47_Then#2:
- assume k == 0;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon27#2:
- call contextSwitch();
- assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_66#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_66#2:
- goto inline$storm_IoMarkIrpPending$1$Entry#2;
-
- inline$storm_IoMarkIrpPending$1$Entry#2:
- inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoMarkIrpPending$1$start#2;
-
- inline$storm_IoMarkIrpPending$1$start#2:
- inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
- goto inline$storm_IoMarkIrpPending$1$label_3#2;
-
- inline$storm_IoMarkIrpPending$1$label_3#2:
- call inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ := storm_nondet();
- goto inline$storm_IoMarkIrpPending$1$label_6#2;
-
- inline$storm_IoMarkIrpPending$1$label_6#2:
- goto inline$storm_IoMarkIrpPending$1$label_6_true#2, inline$storm_IoMarkIrpPending$1$label_6_false#2;
-
- inline$storm_IoMarkIrpPending$1$label_6_false#2:
- assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ == 0;
- goto inline$storm_IoMarkIrpPending$1$label_1#2;
-
- inline$storm_IoMarkIrpPending$1$label_6_true#2:
- assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ != 0;
- goto inline$storm_IoMarkIrpPending$1$label_7#2;
-
- inline$storm_IoMarkIrpPending$1$label_7#2:
- havoc raiseException;
- goto inline$storm_IoMarkIrpPending$1$anon3_Then#2, inline$storm_IoMarkIrpPending$1$anon3_Else#2;
-
- inline$storm_IoMarkIrpPending$1$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoMarkIrpPending$1$anon1#2;
-
- inline$storm_IoMarkIrpPending$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- call contextSwitch();
- goto inline$storm_IoMarkIrpPending$1$label_8#2;
-
- inline$storm_IoMarkIrpPending$1$label_8#2:
- goto inline$storm_IoMarkIrpPending$1$label_8_true#2, inline$storm_IoMarkIrpPending$1$label_8_false#2;
-
- inline$storm_IoMarkIrpPending$1$label_8_false#2:
- assume 0 == 0;
- goto inline$storm_IoMarkIrpPending$1$label_9#2;
-
- inline$storm_IoMarkIrpPending$1$label_9#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoMarkIrpPending$1$label_1#2;
-
- inline$storm_IoMarkIrpPending$1$label_8_true#2:
- assume 0 != 0;
- goto inline$storm_IoMarkIrpPending$1$label_1#2;
-
- inline$storm_IoMarkIrpPending$1$label_1#2:
- goto inline$storm_IoMarkIrpPending$1$Return#2;
-
- inline$storm_IoMarkIrpPending$1$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoMarkIrpPending$1$Return#2;
-
- inline$storm_IoMarkIrpPending$1$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon49_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon49_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon49_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon29#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon29#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_82#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_82#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon49_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon45_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon45_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon45_Else#2:
- assume k != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon46_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon46_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon46_Else#2:
- assume k != 1;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon24#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon46_Then#2:
- assume k == 1;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon24#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon45_Then#2:
- assume k == 0;
- inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon24#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon24#2:
- call contextSwitch();
- assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_69#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_69#2:
- goto inline$storm_IoSetCancelRoutine$1$Entry#2;
-
- inline$storm_IoSetCancelRoutine$1$Entry#2:
- inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := 0;
- goto inline$storm_IoSetCancelRoutine$1$start#2;
-
- inline$storm_IoSetCancelRoutine$1$start#2:
- inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
- inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
- goto inline$storm_IoSetCancelRoutine$1$label_3#2;
-
- inline$storm_IoSetCancelRoutine$1$label_3#2:
- goto inline$storm_IoSetCancelRoutine$1$label_4#2;
-
- inline$storm_IoSetCancelRoutine$1$label_4#2:
- call inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ := storm_nondet();
- goto inline$storm_IoSetCancelRoutine$1$label_7#2;
-
- inline$storm_IoSetCancelRoutine$1$label_7#2:
- goto inline$storm_IoSetCancelRoutine$1$label_7_true#2, inline$storm_IoSetCancelRoutine$1$label_7_false#2;
-
- inline$storm_IoSetCancelRoutine$1$label_7_false#2:
- assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ == 0;
- goto inline$storm_IoSetCancelRoutine$1$label_8#2;
-
- inline$storm_IoSetCancelRoutine$1$label_7_true#2:
- assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ != 0;
- goto inline$storm_IoSetCancelRoutine$1$label_11#2;
-
- inline$storm_IoSetCancelRoutine$1$label_11#2:
- havoc raiseException;
- goto inline$storm_IoSetCancelRoutine$1$anon11_Then#2, inline$storm_IoSetCancelRoutine$1$anon11_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon11_Else#2:
- assume !raiseException;
- goto inline$storm_IoSetCancelRoutine$1$anon1#2;
-
- inline$storm_IoSetCancelRoutine$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$1$label_12#2;
-
- inline$storm_IoSetCancelRoutine$1$label_12#2:
- goto inline$storm_IoSetCancelRoutine$1$label_12_true#2, inline$storm_IoSetCancelRoutine$1$label_12_false#2;
-
- inline$storm_IoSetCancelRoutine$1$label_12_false#2:
- assume 0 == 0;
- goto inline$storm_IoSetCancelRoutine$1$label_13#2;
-
- inline$storm_IoSetCancelRoutine$1$label_13#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCancelRoutine$1$label_1#2;
-
- inline$storm_IoSetCancelRoutine$1$label_12_true#2:
- assume 0 != 0;
- goto inline$storm_IoSetCancelRoutine$1$label_8#2;
-
- inline$storm_IoSetCancelRoutine$1$label_8#2:
- __storm_atomic := true;
- goto inline$storm_IoSetCancelRoutine$1$label_16#2;
-
- inline$storm_IoSetCancelRoutine$1$label_16#2:
- goto inline$storm_IoSetCancelRoutine$1$anon12_Then#2, inline$storm_IoSetCancelRoutine$1$anon12_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon12_Else#2:
- assume k != 0;
- goto inline$storm_IoSetCancelRoutine$1$anon13_Then#2, inline$storm_IoSetCancelRoutine$1$anon13_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon13_Else#2:
- assume k != 1;
- goto inline$storm_IoSetCancelRoutine$1$anon5#2;
-
- inline$storm_IoSetCancelRoutine$1$anon13_Then#2:
- assume k == 1;
- inline$storm_IoSetCancelRoutine$1$myVar_0 := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine)];
- goto inline$storm_IoSetCancelRoutine$1$anon5#2;
-
- inline$storm_IoSetCancelRoutine$1$anon12_Then#2:
- assume k == 0;
- inline$storm_IoSetCancelRoutine$1$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine)];
- goto inline$storm_IoSetCancelRoutine$1$anon5#2;
-
- inline$storm_IoSetCancelRoutine$1$anon5#2:
- call contextSwitch();
- inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$myVar_0;
- goto inline$storm_IoSetCancelRoutine$1$label_17#2;
-
- inline$storm_IoSetCancelRoutine$1$label_17#2:
- goto inline$storm_IoSetCancelRoutine$1$anon14_Then#2, inline$storm_IoSetCancelRoutine$1$anon14_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon14_Else#2:
- assume k != 0;
- goto inline$storm_IoSetCancelRoutine$1$anon15_Then#2, inline$storm_IoSetCancelRoutine$1$anon15_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon15_Else#2:
- assume k != 1;
- goto inline$storm_IoSetCancelRoutine$1$anon8#2;
-
- inline$storm_IoSetCancelRoutine$1$anon15_Then#2:
- assume k == 1;
- Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
- goto inline$storm_IoSetCancelRoutine$1$anon8#2;
-
- inline$storm_IoSetCancelRoutine$1$anon14_Then#2:
- assume k == 0;
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
- goto inline$storm_IoSetCancelRoutine$1$anon8#2;
-
- inline$storm_IoSetCancelRoutine$1$anon8#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$1$label_18#2;
-
- inline$storm_IoSetCancelRoutine$1$label_18#2:
- goto inline$storm_IoSetCancelRoutine$1$anon16_Then#2, inline$storm_IoSetCancelRoutine$1$anon16_Else#2;
-
- inline$storm_IoSetCancelRoutine$1$anon16_Else#2:
- assume __storm_init;
- goto inline$storm_IoSetCancelRoutine$1$anon10#2;
-
- inline$storm_IoSetCancelRoutine$1$anon16_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoSetCancelRoutine$1$anon10#2;
-
- inline$storm_IoSetCancelRoutine$1$anon10#2:
- call contextSwitch();
- goto inline$storm_IoSetCancelRoutine$1$label_21#2;
-
- inline$storm_IoSetCancelRoutine$1$label_21#2:
- inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$ := inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine;
- goto inline$storm_IoSetCancelRoutine$1$label_1#2;
-
- inline$storm_IoSetCancelRoutine$1$label_1#2:
- goto inline$storm_IoSetCancelRoutine$1$Return#2;
-
- inline$storm_IoSetCancelRoutine$1$anon11_Then#2:
- assume raiseException;
- goto inline$storm_IoSetCancelRoutine$1$Return#2;
-
- inline$storm_IoSetCancelRoutine$1$Return#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ := inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon50_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon50_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon50_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon31#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon31#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_72#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_72#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_73#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_73#2:
- goto inline$storm_IoMarkIrpPending$2$Entry#2;
-
- inline$storm_IoMarkIrpPending$2$Entry#2:
- inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoMarkIrpPending$2$start#2;
-
- inline$storm_IoMarkIrpPending$2$start#2:
- inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
- goto inline$storm_IoMarkIrpPending$2$label_3#2;
-
- inline$storm_IoMarkIrpPending$2$label_3#2:
- call inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ := storm_nondet();
- goto inline$storm_IoMarkIrpPending$2$label_6#2;
-
- inline$storm_IoMarkIrpPending$2$label_6#2:
- goto inline$storm_IoMarkIrpPending$2$label_6_true#2, inline$storm_IoMarkIrpPending$2$label_6_false#2;
-
- inline$storm_IoMarkIrpPending$2$label_6_false#2:
- assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ == 0;
- goto inline$storm_IoMarkIrpPending$2$label_1#2;
-
- inline$storm_IoMarkIrpPending$2$label_6_true#2:
- assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ != 0;
- goto inline$storm_IoMarkIrpPending$2$label_7#2;
-
- inline$storm_IoMarkIrpPending$2$label_7#2:
- havoc raiseException;
- goto inline$storm_IoMarkIrpPending$2$anon3_Then#2, inline$storm_IoMarkIrpPending$2$anon3_Else#2;
-
- inline$storm_IoMarkIrpPending$2$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoMarkIrpPending$2$anon1#2;
-
- inline$storm_IoMarkIrpPending$2$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- call contextSwitch();
- goto inline$storm_IoMarkIrpPending$2$label_8#2;
-
- inline$storm_IoMarkIrpPending$2$label_8#2:
- goto inline$storm_IoMarkIrpPending$2$label_8_true#2, inline$storm_IoMarkIrpPending$2$label_8_false#2;
-
- inline$storm_IoMarkIrpPending$2$label_8_false#2:
- assume 0 == 0;
- goto inline$storm_IoMarkIrpPending$2$label_9#2;
-
- inline$storm_IoMarkIrpPending$2$label_9#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoMarkIrpPending$2$label_1#2;
-
- inline$storm_IoMarkIrpPending$2$label_8_true#2:
- assume 0 != 0;
- goto inline$storm_IoMarkIrpPending$2$label_1#2;
-
- inline$storm_IoMarkIrpPending$2$label_1#2:
- goto inline$storm_IoMarkIrpPending$2$Return#2;
-
- inline$storm_IoMarkIrpPending$2$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoMarkIrpPending$2$Return#2;
-
- inline$storm_IoMarkIrpPending$2$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon51_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon51_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon51_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon33#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon33#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_78#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_78#2:
- call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$ := storm_nondet();
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_81#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_81#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon51_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_76#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_76#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_77#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_77#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741536;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon50_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon44_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_58#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_58#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741823;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_59#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$0$Entry#2;
-
- inline$storm_KeReleaseSpinLock$0$Entry#2:
- inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
- goto inline$storm_KeReleaseSpinLock$0$start#2;
-
- inline$storm_KeReleaseSpinLock$0$start#2:
- inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
- goto inline$storm_KeReleaseSpinLock$0$label_3#2;
-
- inline$storm_KeReleaseSpinLock$0$label_3#2:
- goto inline$storm_KeReleaseSpinLock$0$label_4#2;
-
- inline$storm_KeReleaseSpinLock$0$label_4#2:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$0$label_7#2;
-
- inline$storm_KeReleaseSpinLock$0$label_7#2:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$0$anon8_Then#2, inline$storm_KeReleaseSpinLock$0$anon8_Else#2;
-
- inline$storm_KeReleaseSpinLock$0$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$0$anon1#2;
-
- inline$storm_KeReleaseSpinLock$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
- assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_8#2;
-
- inline$storm_KeReleaseSpinLock$0$label_8#2:
- goto inline$storm_getThreadID$1$Entry#2;
-
- inline$storm_getThreadID$1$Entry#2:
- goto inline$storm_getThreadID$1$anon0#2;
-
- inline$storm_getThreadID$1$anon0#2:
- inline$storm_getThreadID$1$tidRet := tid;
- goto inline$storm_getThreadID$1$Return#2;
-
- inline$storm_getThreadID$1$Return#2:
- inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$1$tidRet;
- goto inline$storm_KeReleaseSpinLock$0$label_8$1#2;
-
- inline$storm_KeReleaseSpinLock$0$label_8$1#2:
- goto inline$storm_KeReleaseSpinLock$0$label_11#2;
-
- inline$storm_KeReleaseSpinLock$0$label_11#2:
- goto inline$storm_KeReleaseSpinLock$0$label_11_true#2, inline$storm_KeReleaseSpinLock$0$label_11_false#2;
-
- inline$storm_KeReleaseSpinLock$0$label_11_false#2:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$0$label_12#2;
-
- inline$storm_KeReleaseSpinLock$0$label_12#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$0$label_1#2;
-
- inline$storm_KeReleaseSpinLock$0$label_11_true#2:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$0$label_15#2;
-
- inline$storm_KeReleaseSpinLock$0$label_15#2:
- goto inline$storm_KeReleaseSpinLock$0$anon9_Then#2, inline$storm_KeReleaseSpinLock$0$anon9_Else#2;
-
- inline$storm_KeReleaseSpinLock$0$anon9_Else#2:
- assume k != 0;
- goto inline$storm_KeReleaseSpinLock$0$anon10_Then#2, inline$storm_KeReleaseSpinLock$0$anon10_Else#2;
-
- inline$storm_KeReleaseSpinLock$0$anon10_Else#2:
- assume k != 1;
- goto inline$storm_KeReleaseSpinLock$0$anon5#2;
-
- inline$storm_KeReleaseSpinLock$0$anon10_Then#2:
- assume k == 1;
- Res_1_LOCK := Res_1_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
- goto inline$storm_KeReleaseSpinLock$0$anon5#2;
-
- inline$storm_KeReleaseSpinLock$0$anon9_Then#2:
- assume k == 0;
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
- goto inline$storm_KeReleaseSpinLock$0$anon5#2;
-
- inline$storm_KeReleaseSpinLock$0$anon5#2:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_16#2;
-
- inline$storm_KeReleaseSpinLock$0$label_16#2:
- goto inline$storm_KeReleaseSpinLock$0$anon11_Then#2, inline$storm_KeReleaseSpinLock$0$anon11_Else#2;
-
- inline$storm_KeReleaseSpinLock$0$anon11_Else#2:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$0$anon7#2;
-
- inline$storm_KeReleaseSpinLock$0$anon11_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$0$anon7#2;
-
- inline$storm_KeReleaseSpinLock$0$anon7#2:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_1#2;
-
- inline$storm_KeReleaseSpinLock$0$label_1#2:
- goto inline$storm_KeReleaseSpinLock$0$Return#2;
-
- inline$storm_KeReleaseSpinLock$0$anon8_Then#2:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$0$Return#2;
-
- inline$storm_KeReleaseSpinLock$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon43_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon43_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon43_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon19#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon19#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon43_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_26#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_26#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_27#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_27#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741670;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_28#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_28#2:
- goto inline$storm_ExAllocatePoolWithTag$0$Entry#2;
-
- inline$storm_ExAllocatePoolWithTag$0$Entry#2:
- inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1 := 12;
- goto inline$storm_ExAllocatePoolWithTag$0$start#2;
-
- inline$storm_ExAllocatePoolWithTag$0$start#2:
- inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag := inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1;
- goto inline$storm_ExAllocatePoolWithTag$0$label_3#2;
-
- inline$storm_ExAllocatePoolWithTag$0$label_3#2:
- call inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$ := __HAVOC_malloc(inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag);
- goto inline$storm_ExAllocatePoolWithTag$0$label_6#2;
-
- inline$storm_ExAllocatePoolWithTag$0$label_6#2:
- inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$ := inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$;
- goto inline$storm_ExAllocatePoolWithTag$0$label_1#2;
-
- inline$storm_ExAllocatePoolWithTag$0$label_1#2:
- goto inline$storm_ExAllocatePoolWithTag$0$Return#2;
-
- inline$storm_ExAllocatePoolWithTag$0$Return#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$ := inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon7#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon7#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_31#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_31#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_32#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_32#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2:
- assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_34#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_34#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- call inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$ := IoAllocateWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0);
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon9#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon9#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_37#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_37#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_38#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_38#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_39#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_39#2:
- call ExFreePoolWithTag(inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent, 0);
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon11#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon11#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_42#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_42#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_43#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_43#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_44#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_44#2:
- goto inline$storm_IoMarkIrpPending$0$Entry#2;
-
- inline$storm_IoMarkIrpPending$0$Entry#2:
- inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoMarkIrpPending$0$start#2;
-
- inline$storm_IoMarkIrpPending$0$start#2:
- inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
- goto inline$storm_IoMarkIrpPending$0$label_3#2;
-
- inline$storm_IoMarkIrpPending$0$label_3#2:
- call inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ := storm_nondet();
- goto inline$storm_IoMarkIrpPending$0$label_6#2;
-
- inline$storm_IoMarkIrpPending$0$label_6#2:
- goto inline$storm_IoMarkIrpPending$0$label_6_true#2, inline$storm_IoMarkIrpPending$0$label_6_false#2;
-
- inline$storm_IoMarkIrpPending$0$label_6_false#2:
- assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ == 0;
- goto inline$storm_IoMarkIrpPending$0$label_1#2;
-
- inline$storm_IoMarkIrpPending$0$label_6_true#2:
- assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ != 0;
- goto inline$storm_IoMarkIrpPending$0$label_7#2;
-
- inline$storm_IoMarkIrpPending$0$label_7#2:
- havoc raiseException;
- goto inline$storm_IoMarkIrpPending$0$anon3_Then#2, inline$storm_IoMarkIrpPending$0$anon3_Else#2;
-
- inline$storm_IoMarkIrpPending$0$anon3_Else#2:
- assume !raiseException;
- goto inline$storm_IoMarkIrpPending$0$anon1#2;
-
- inline$storm_IoMarkIrpPending$0$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
- call contextSwitch();
- goto inline$storm_IoMarkIrpPending$0$label_8#2;
-
- inline$storm_IoMarkIrpPending$0$label_8#2:
- goto inline$storm_IoMarkIrpPending$0$label_8_true#2, inline$storm_IoMarkIrpPending$0$label_8_false#2;
-
- inline$storm_IoMarkIrpPending$0$label_8_false#2:
- assume 0 == 0;
- goto inline$storm_IoMarkIrpPending$0$label_9#2;
-
- inline$storm_IoMarkIrpPending$0$label_9#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoMarkIrpPending$0$label_1#2;
-
- inline$storm_IoMarkIrpPending$0$label_8_true#2:
- assume 0 != 0;
- goto inline$storm_IoMarkIrpPending$0$label_1#2;
-
- inline$storm_IoMarkIrpPending$0$label_1#2:
- goto inline$storm_IoMarkIrpPending$0$Return#2;
-
- inline$storm_IoMarkIrpPending$0$anon3_Then#2:
- assume raiseException;
- goto inline$storm_IoMarkIrpPending$0$Return#2;
-
- inline$storm_IoMarkIrpPending$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon13#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon13#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_47#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_47#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- call IoQueueWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, I8xCompleteSysButtonEventWorker, 1, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent);
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon15#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon15#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_50#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_50#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_33#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_51#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2:
- assume !INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2:
- assume INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_53#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_53#2:
- goto inline$I8xCompleteSysButtonIrp$0$Entry#2;
-
- inline$I8xCompleteSysButtonIrp$0$Entry#2:
- inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$I8xCompleteSysButtonIrp$0$start#2;
-
- inline$I8xCompleteSysButtonIrp$0$start#2:
- inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1;
- goto inline$I8xCompleteSysButtonIrp$0$label_3#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_3#2:
- havoc inline$I8xCompleteSysButtonIrp$0$myNondetVar_0;
- goto inline$I8xCompleteSysButtonIrp$0$label_4#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_4#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_5#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_5#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_6#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_6#2:
- goto inline$storm_IoCompleteRequest$2$Entry#2;
-
- inline$storm_IoCompleteRequest$2$Entry#2:
- inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp;
- goto inline$storm_IoCompleteRequest$2$start#2;
-
- inline$storm_IoCompleteRequest$2$start#2:
- inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$2$label_3#2;
-
- inline$storm_IoCompleteRequest$2$label_3#2:
- call inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$2$label_6#2;
-
- inline$storm_IoCompleteRequest$2$label_6#2:
- goto inline$storm_IoCompleteRequest$2$label_6_true#2, inline$storm_IoCompleteRequest$2$label_6_false#2;
-
- inline$storm_IoCompleteRequest$2$label_6_false#2:
- assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$2$label_7#2;
-
- inline$storm_IoCompleteRequest$2$label_6_true#2:
- assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$2$label_8#2;
-
- inline$storm_IoCompleteRequest$2$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$2$anon8_Then#2, inline$storm_IoCompleteRequest$2$anon8_Else#2;
-
- inline$storm_IoCompleteRequest$2$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$2$anon4#2;
-
- inline$storm_IoCompleteRequest$2$anon4#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$2$label_9#2;
-
- inline$storm_IoCompleteRequest$2$label_9#2:
- goto inline$storm_IoCompleteRequest$2$label_9_true#2, inline$storm_IoCompleteRequest$2$label_9_false#2;
-
- inline$storm_IoCompleteRequest$2$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$2$label_10#2;
-
- inline$storm_IoCompleteRequest$2$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$2$label_1#2;
-
- inline$storm_IoCompleteRequest$2$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$2$label_7#2;
-
- inline$storm_IoCompleteRequest$2$label_7#2:
- goto inline$storm_IoCompleteRequest$2$anon6_Then#2, inline$storm_IoCompleteRequest$2$anon6_Else#2;
-
- inline$storm_IoCompleteRequest$2$anon6_Else#2:
- assume k != 0;
- goto inline$storm_IoCompleteRequest$2$anon7_Then#2, inline$storm_IoCompleteRequest$2$anon7_Else#2;
-
- inline$storm_IoCompleteRequest$2$anon7_Else#2:
- assume k != 1;
- goto inline$storm_IoCompleteRequest$2$anon2#2;
-
- inline$storm_IoCompleteRequest$2$anon7_Then#2:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$2$anon2#2;
-
- inline$storm_IoCompleteRequest$2$anon6_Then#2:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$2$anon2#2;
-
- inline$storm_IoCompleteRequest$2$anon2#2:
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$2$label_1#2;
-
- inline$storm_IoCompleteRequest$2$label_1#2:
- goto inline$storm_IoCompleteRequest$2$Return#2;
-
- inline$storm_IoCompleteRequest$2$anon8_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$2$Return#2;
-
- inline$storm_IoCompleteRequest$2$Return#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_6$1#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_6$1#2:
- goto inline$I8xCompleteSysButtonIrp$0$anon2_Then#2, inline$I8xCompleteSysButtonIrp$0$anon2_Else#2;
-
- inline$I8xCompleteSysButtonIrp$0$anon2_Else#2:
- assume !raiseException;
- goto inline$I8xCompleteSysButtonIrp$0$anon1#2;
-
- inline$I8xCompleteSysButtonIrp$0$anon1#2:
- goto inline$I8xCompleteSysButtonIrp$0$label_1#2;
-
- inline$I8xCompleteSysButtonIrp$0$label_1#2:
- goto inline$I8xCompleteSysButtonIrp$0$Return#2;
-
- inline$I8xCompleteSysButtonIrp$0$anon2_Then#2:
- assume raiseException;
- goto inline$I8xCompleteSysButtonIrp$0$Return#2;
-
- inline$I8xCompleteSysButtonIrp$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon42_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon42_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon42_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon17#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon17#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_52#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon42_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2:
- havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
- assume INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_16#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_16#2:
- inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741306;
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_17#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_17#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_18#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_18#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_19#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_19#2:
- goto inline$storm_IoCompleteRequest$1$Entry#2;
-
- inline$storm_IoCompleteRequest$1$Entry#2:
- inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
- goto inline$storm_IoCompleteRequest$1$start#2;
-
- inline$storm_IoCompleteRequest$1$start#2:
- inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$1$label_3#2;
-
- inline$storm_IoCompleteRequest$1$label_3#2:
- call inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$1$label_6#2;
-
- inline$storm_IoCompleteRequest$1$label_6#2:
- goto inline$storm_IoCompleteRequest$1$label_6_true#2, inline$storm_IoCompleteRequest$1$label_6_false#2;
-
- inline$storm_IoCompleteRequest$1$label_6_false#2:
- assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$1$label_7#2;
-
- inline$storm_IoCompleteRequest$1$label_6_true#2:
- assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$1$label_8#2;
-
- inline$storm_IoCompleteRequest$1$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$1$anon8_Then#2, inline$storm_IoCompleteRequest$1$anon8_Else#2;
-
- inline$storm_IoCompleteRequest$1$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$1$anon4#2;
-
- inline$storm_IoCompleteRequest$1$anon4#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$1$label_9#2;
-
- inline$storm_IoCompleteRequest$1$label_9#2:
- goto inline$storm_IoCompleteRequest$1$label_9_true#2, inline$storm_IoCompleteRequest$1$label_9_false#2;
-
- inline$storm_IoCompleteRequest$1$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$1$label_10#2;
-
- inline$storm_IoCompleteRequest$1$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$1$label_1#2;
-
- inline$storm_IoCompleteRequest$1$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$1$label_7#2;
-
- inline$storm_IoCompleteRequest$1$label_7#2:
- goto inline$storm_IoCompleteRequest$1$anon6_Then#2, inline$storm_IoCompleteRequest$1$anon6_Else#2;
-
- inline$storm_IoCompleteRequest$1$anon6_Else#2:
- assume k != 0;
- goto inline$storm_IoCompleteRequest$1$anon7_Then#2, inline$storm_IoCompleteRequest$1$anon7_Else#2;
-
- inline$storm_IoCompleteRequest$1$anon7_Else#2:
- assume k != 1;
- goto inline$storm_IoCompleteRequest$1$anon2#2;
-
- inline$storm_IoCompleteRequest$1$anon7_Then#2:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$1$anon2#2;
-
- inline$storm_IoCompleteRequest$1$anon6_Then#2:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$1$anon2#2;
-
- inline$storm_IoCompleteRequest$1$anon2#2:
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$1$label_1#2;
-
- inline$storm_IoCompleteRequest$1$label_1#2:
- goto inline$storm_IoCompleteRequest$1$Return#2;
-
- inline$storm_IoCompleteRequest$1$anon8_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$1$Return#2;
-
- inline$storm_IoCompleteRequest$1$Return#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$anon3#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon3#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_22#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_22#2:
- goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$label_1#2:
- call __HAVOC_free(inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent);
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonEvent$0$Return#2:
- goto inline$I8xDeviceControl$0$label_24$1#2;
-
- inline$I8xDeviceControl$0$label_24$1#2:
- goto inline$I8xDeviceControl$0$anon18_Then#2, inline$I8xDeviceControl$0$anon18_Else#2;
-
- inline$I8xDeviceControl$0$anon18_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon10#2;
-
- inline$I8xDeviceControl$0$anon10#2:
- goto inline$I8xDeviceControl$0$label_27#2;
-
- inline$I8xDeviceControl$0$label_27#2:
- goto inline$I8xDeviceControl$0$label_1#2;
-
- inline$I8xDeviceControl$0$anon18_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$label_19_case_1#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703680;
- goto inline$I8xDeviceControl$0$label_21#2;
-
- inline$I8xDeviceControl$0$label_21#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$Entry#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$Entry#2:
- inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
- goto inline$I8xKeyboardGetSysButtonCaps$0$start#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$start#2:
- inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_3#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_3#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_4#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_4#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_5#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_5#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_6#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_6#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_7#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_7#2:
- call __PREfastPagedCode();
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_10#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_10#2:
- goto inline$IoGetCurrentIrpStackLocation$3$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$3$Entry#2:
- goto inline$IoGetCurrentIrpStackLocation$3$start#2;
-
- inline$IoGetCurrentIrpStackLocation$3$start#2:
- goto inline$IoGetCurrentIrpStackLocation$3$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$3$label_3#2:
- goto inline$IoGetCurrentIrpStackLocation$3$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$3$anon3_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$3$anon3_Else#2:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$3$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$3$anon4_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$3$anon4_Else#2:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$3$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$3$anon4_Then#2:
- assume k == 1;
- goto inline$IoGetCurrentIrpStackLocation$3$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$3$anon3_Then#2:
- assume k == 0;
- goto inline$IoGetCurrentIrpStackLocation$3$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$3$anon2#2:
- call contextSwitch();
- goto inline$IoGetCurrentIrpStackLocation$3$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$3$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$3$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$3$Return#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon3#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon3#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_13#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_13#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_14#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_14#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_15#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_15#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume !INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_16#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_16#2:
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_24#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_24#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_25#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_25#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) == 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) != 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_27#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_27#2:
- inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 1);
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_26#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) == 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) != 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_29#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_29#2:
- inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 2);
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_28#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) == 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) != 0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_31#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_31#2:
- inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, BOOGIE_LARGE_INT_2147483648);
- inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_30#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_32#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_32#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2:
- havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
- assume INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_17#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_17#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_18#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_19#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_19#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_20#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_20#2:
- goto inline$storm_IoCompleteRequest$0$Entry#2;
-
- inline$storm_IoCompleteRequest$0$Entry#2:
- inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps;
- goto inline$storm_IoCompleteRequest$0$start#2;
-
- inline$storm_IoCompleteRequest$0$start#2:
- inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$0$label_3#2;
-
- inline$storm_IoCompleteRequest$0$label_3#2:
- call inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$0$label_6#2;
-
- inline$storm_IoCompleteRequest$0$label_6#2:
- goto inline$storm_IoCompleteRequest$0$label_6_true#2, inline$storm_IoCompleteRequest$0$label_6_false#2;
-
- inline$storm_IoCompleteRequest$0$label_6_false#2:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$0$label_7#2;
-
- inline$storm_IoCompleteRequest$0$label_6_true#2:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$0$label_8#2;
-
- inline$storm_IoCompleteRequest$0$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$0$anon8_Then#2, inline$storm_IoCompleteRequest$0$anon8_Else#2;
-
- inline$storm_IoCompleteRequest$0$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$0$anon4#2;
-
- inline$storm_IoCompleteRequest$0$anon4#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_9#2;
-
- inline$storm_IoCompleteRequest$0$label_9#2:
- goto inline$storm_IoCompleteRequest$0$label_9_true#2, inline$storm_IoCompleteRequest$0$label_9_false#2;
-
- inline$storm_IoCompleteRequest$0$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$0$label_10#2;
-
- inline$storm_IoCompleteRequest$0$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$0$label_1#2;
-
- inline$storm_IoCompleteRequest$0$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$0$label_7#2;
-
- inline$storm_IoCompleteRequest$0$label_7#2:
- goto inline$storm_IoCompleteRequest$0$anon6_Then#2, inline$storm_IoCompleteRequest$0$anon6_Else#2;
-
- inline$storm_IoCompleteRequest$0$anon6_Else#2:
- assume k != 0;
- goto inline$storm_IoCompleteRequest$0$anon7_Then#2, inline$storm_IoCompleteRequest$0$anon7_Else#2;
-
- inline$storm_IoCompleteRequest$0$anon7_Else#2:
- assume k != 1;
- goto inline$storm_IoCompleteRequest$0$anon2#2;
-
- inline$storm_IoCompleteRequest$0$anon7_Then#2:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$0$anon2#2;
-
- inline$storm_IoCompleteRequest$0$anon6_Then#2:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$0$anon2#2;
-
- inline$storm_IoCompleteRequest$0$anon2#2:
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_1#2;
-
- inline$storm_IoCompleteRequest$0$label_1#2:
- goto inline$storm_IoCompleteRequest$0$Return#2;
-
- inline$storm_IoCompleteRequest$0$anon8_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$0$Return#2;
-
- inline$storm_IoCompleteRequest$0$Return#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2:
- assume !raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$anon5#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon5#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_23#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_23#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$label_1#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$label_1#2:
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2:
- assume raiseException;
- goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
-
- inline$I8xKeyboardGetSysButtonCaps$0$Return#2:
- goto inline$I8xDeviceControl$0$label_21$1#2;
-
- inline$I8xDeviceControl$0$label_21$1#2:
- goto inline$I8xDeviceControl$0$anon17_Then#2, inline$I8xDeviceControl$0$anon17_Else#2;
-
- inline$I8xDeviceControl$0$anon17_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon8#2;
-
- inline$I8xDeviceControl$0$anon8#2:
- goto inline$I8xDeviceControl$0$label_28#2;
-
- inline$I8xDeviceControl$0$label_28#2:
- goto inline$I8xDeviceControl$0$label_1#2;
-
- inline$I8xDeviceControl$0$anon17_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$label_19_case_0#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703680;
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703684;
- goto inline$I8xDeviceControl$0$label_20#2;
-
- inline$I8xDeviceControl$0$label_20#2:
- goto inline$I8xDeviceControl$0$label_29#2;
-
- inline$I8xDeviceControl$0$anon16_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$label_14_true#2:
- havoc inline$I8xDeviceControl$0$myNondetVar_0;
- assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) != 0;
- goto inline$I8xDeviceControl$0$label_12#2;
-
- inline$I8xDeviceControl$0$label_12#2:
- goto inline$I8xDeviceControl$0$label_29#2;
-
- inline$I8xDeviceControl$0$label_29#2:
- goto inline$I8xDeviceControl$0$label_30#2;
-
- inline$I8xDeviceControl$0$label_30#2:
- goto inline$storm_IoCompleteRequest$3$Entry#2;
-
- inline$storm_IoCompleteRequest$3$Entry#2:
- inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
- goto inline$storm_IoCompleteRequest$3$start#2;
-
- inline$storm_IoCompleteRequest$3$start#2:
- inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$3$label_3#2;
-
- inline$storm_IoCompleteRequest$3$label_3#2:
- call inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$3$label_6#2;
-
- inline$storm_IoCompleteRequest$3$label_6#2:
- goto inline$storm_IoCompleteRequest$3$label_6_true#2, inline$storm_IoCompleteRequest$3$label_6_false#2;
-
- inline$storm_IoCompleteRequest$3$label_6_false#2:
- assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$3$label_7#2;
-
- inline$storm_IoCompleteRequest$3$label_6_true#2:
- assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$3$label_8#2;
-
- inline$storm_IoCompleteRequest$3$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$3$anon8_Then#2, inline$storm_IoCompleteRequest$3$anon8_Else#2;
-
- inline$storm_IoCompleteRequest$3$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$3$anon4#2;
-
- inline$storm_IoCompleteRequest$3$anon4#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$3$label_9#2;
-
- inline$storm_IoCompleteRequest$3$label_9#2:
- goto inline$storm_IoCompleteRequest$3$label_9_true#2, inline$storm_IoCompleteRequest$3$label_9_false#2;
-
- inline$storm_IoCompleteRequest$3$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$3$label_10#2;
-
- inline$storm_IoCompleteRequest$3$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$3$label_1#2;
-
- inline$storm_IoCompleteRequest$3$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$3$label_7#2;
-
- inline$storm_IoCompleteRequest$3$label_7#2:
- goto inline$storm_IoCompleteRequest$3$anon6_Then#2, inline$storm_IoCompleteRequest$3$anon6_Else#2;
-
- inline$storm_IoCompleteRequest$3$anon6_Else#2:
- assume k != 0;
- goto inline$storm_IoCompleteRequest$3$anon7_Then#2, inline$storm_IoCompleteRequest$3$anon7_Else#2;
-
- inline$storm_IoCompleteRequest$3$anon7_Else#2:
- assume k != 1;
- goto inline$storm_IoCompleteRequest$3$anon2#2;
-
- inline$storm_IoCompleteRequest$3$anon7_Then#2:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$3$anon2#2;
-
- inline$storm_IoCompleteRequest$3$anon6_Then#2:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$3$anon2#2;
-
- inline$storm_IoCompleteRequest$3$anon2#2:
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$3$label_1#2;
-
- inline$storm_IoCompleteRequest$3$label_1#2:
- goto inline$storm_IoCompleteRequest$3$Return#2;
-
- inline$storm_IoCompleteRequest$3$anon8_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$3$Return#2;
-
- inline$storm_IoCompleteRequest$3$Return#2:
- goto inline$I8xDeviceControl$0$label_30$1#2;
-
- inline$I8xDeviceControl$0$label_30$1#2:
- goto inline$I8xDeviceControl$0$anon19_Then#2, inline$I8xDeviceControl$0$anon19_Else#2;
-
- inline$I8xDeviceControl$0$anon19_Else#2:
- assume !raiseException;
- goto inline$I8xDeviceControl$0$anon12#2;
-
- inline$I8xDeviceControl$0$anon12#2:
- goto inline$I8xDeviceControl$0$label_33#2;
-
- inline$I8xDeviceControl$0$label_33#2:
- goto inline$I8xDeviceControl$0$label_1#2;
-
- inline$I8xDeviceControl$0$label_1#2:
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$anon19_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$anon13_Then#2:
- assume raiseException;
- goto inline$I8xDeviceControl$0$Return#2;
-
- inline$I8xDeviceControl$0$Return#2:
- goto inline$dispatch$0$label_8$1#2;
-
- inline$dispatch$0$label_8$1#2:
- goto inline$dispatch$0$anon5_Then#2, inline$dispatch$0$anon5_Else#2;
-
- inline$dispatch$0$anon5_Else#2:
- assume !raiseException;
- goto inline$dispatch$0$anon3#2;
-
- inline$dispatch$0$anon3#2:
- goto inline$dispatch$0$label_11#2;
-
- inline$dispatch$0$label_11#2:
- goto inline$dispatch$0$label_1#2;
-
- inline$dispatch$0$label_1#2:
- goto inline$dispatch$0$Return#2;
-
- inline$dispatch$0$anon5_Then#2:
- assume raiseException;
- goto inline$dispatch$0$Return#2;
-
- inline$dispatch$0$anon4_Then#2:
- assume raiseException;
- goto inline$dispatch$0$Return#2;
-
- inline$dispatch$0$Return#2:
- goto label_23$1#2;
-
- label_23$1#2:
- goto anon31_Then#2, anon31_Else#2;
-
- anon31_Else#2:
- assume !(errorReached || !raiseException);
- goto anon17#2;
-
- anon31_Then#2:
- assume errorReached || !raiseException;
- __storm_thread_done_1 := true;
- goto anon17#2;
-
- anon17#2:
- k := k_old_0;
- tid := tid_old_0;
- goto label_26#2;
-
- label_26#2:
- goto label_27#2;
-
- label_27#2:
- k_old_1 := k;
- tid_old_1 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$cancel$0$Entry#2;
-
- inline$cancel$0$Entry#2:
- inline$cancel$0$$Irp$1$64.17$cancel_.1 := $irp$1$91.7$storm_main;
- goto inline$cancel$0$start#2;
-
- inline$cancel$0$start#2:
- inline$cancel$0$$Irp$1$64.17$cancel := inline$cancel$0$$Irp$1$64.17$cancel_.1;
- goto inline$cancel$0$label_3#2;
-
- inline$cancel$0$label_3#2:
- goto inline$storm_IoCancelIrp$0$Entry#2;
-
- inline$storm_IoCancelIrp$0$Entry#2:
- inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1 := inline$cancel$0$$Irp$1$64.17$cancel;
- goto inline$storm_IoCancelIrp$0$start#2;
-
- inline$storm_IoCancelIrp$0$start#2:
- inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1;
- goto inline$storm_IoCancelIrp$0$label_3#2;
-
- inline$storm_IoCancelIrp$0$label_3#2:
- goto inline$storm_IoCancelIrp$0$label_4#2;
-
- inline$storm_IoCancelIrp$0$label_4#2:
- goto inline$storm_IoCancelIrp$0$anon23_Then#2, inline$storm_IoCancelIrp$0$anon23_Else#2;
-
- inline$storm_IoCancelIrp$0$anon23_Else#2:
- assume k != 0;
- goto inline$storm_IoCancelIrp$0$anon24_Then#2, inline$storm_IoCancelIrp$0$anon24_Else#2;
-
- inline$storm_IoCancelIrp$0$anon24_Else#2:
- assume k != 1;
- goto inline$storm_IoCancelIrp$0$anon2#2;
-
- inline$storm_IoCancelIrp$0$anon24_Then#2:
- assume k == 1;
- Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
- goto inline$storm_IoCancelIrp$0$anon2#2;
-
- inline$storm_IoCancelIrp$0$anon23_Then#2:
- assume k == 0;
- Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
- goto inline$storm_IoCancelIrp$0$anon2#2;
-
- inline$storm_IoCancelIrp$0$anon2#2:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_5#2;
-
- inline$storm_IoCancelIrp$0$label_5#2:
- __storm_atomic := true;
- goto inline$storm_IoCancelIrp$0$label_8#2;
-
- inline$storm_IoCancelIrp$0$label_8#2:
- goto inline$storm_IoCancelIrp$0$anon25_Then#2, inline$storm_IoCancelIrp$0$anon25_Else#2;
-
- inline$storm_IoCancelIrp$0$anon25_Else#2:
- assume k != 0;
- goto inline$storm_IoCancelIrp$0$anon26_Then#2, inline$storm_IoCancelIrp$0$anon26_Else#2;
-
- inline$storm_IoCancelIrp$0$anon26_Else#2:
- assume k != 1;
- goto inline$storm_IoCancelIrp$0$anon5#2;
-
- inline$storm_IoCancelIrp$0$anon26_Then#2:
- assume k == 1;
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
- goto inline$storm_IoCancelIrp$0$anon5#2;
-
- inline$storm_IoCancelIrp$0$anon25_Then#2:
- assume k == 0;
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
- goto inline$storm_IoCancelIrp$0$anon5#2;
-
- inline$storm_IoCancelIrp$0$anon5#2:
- call contextSwitch();
- inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$myVar_0;
- goto inline$storm_IoCancelIrp$0$label_9#2;
-
- inline$storm_IoCancelIrp$0$label_9#2:
- goto inline$storm_IoCancelIrp$0$anon27_Then#2, inline$storm_IoCancelIrp$0$anon27_Else#2;
-
- inline$storm_IoCancelIrp$0$anon27_Else#2:
- assume k != 0;
- goto inline$storm_IoCancelIrp$0$anon28_Then#2, inline$storm_IoCancelIrp$0$anon28_Else#2;
-
- inline$storm_IoCancelIrp$0$anon28_Else#2:
- assume k != 1;
- goto inline$storm_IoCancelIrp$0$anon8#2;
-
- inline$storm_IoCancelIrp$0$anon28_Then#2:
- assume k == 1;
- Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
- goto inline$storm_IoCancelIrp$0$anon8#2;
-
- inline$storm_IoCancelIrp$0$anon27_Then#2:
- assume k == 0;
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
- goto inline$storm_IoCancelIrp$0$anon8#2;
-
- inline$storm_IoCancelIrp$0$anon8#2:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_10#2;
-
- inline$storm_IoCancelIrp$0$label_10#2:
- goto inline$storm_IoCancelIrp$0$anon29_Then#2, inline$storm_IoCancelIrp$0$anon29_Else#2;
-
- inline$storm_IoCancelIrp$0$anon29_Else#2:
- assume __storm_init;
- goto inline$storm_IoCancelIrp$0$anon10#2;
-
- inline$storm_IoCancelIrp$0$anon29_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoCancelIrp$0$anon10#2;
-
- inline$storm_IoCancelIrp$0$anon10#2:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_13#2;
-
- inline$storm_IoCancelIrp$0$label_13#2:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
- assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
- goto inline$storm_IoAcquireCancelSpinLock$0$Entry#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$Entry#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$start#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$start#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_3#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_3#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_4#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_4#2:
- goto inline$storm_getThreadID$2$Entry#2;
-
- inline$storm_getThreadID$2$Entry#2:
- goto inline$storm_getThreadID$2$anon0#2;
-
- inline$storm_getThreadID$2$anon0#2:
- inline$storm_getThreadID$2$tidRet := tid;
- goto inline$storm_getThreadID$2$Return#2;
-
- inline$storm_getThreadID$2$Return#2:
- inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$ := inline$storm_getThreadID$2$tidRet;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_7#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_7#2:
- inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock := inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_8#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_8#2:
- __storm_atomic := true;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_11#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2, inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2:
- assume k == 0 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
- assume k == 1 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_12#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_12#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2:
- assume k == 0 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
- assume k == 1 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_15#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_15#2:
- havoc raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon2#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon2#2:
- assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
- assume k == 1 ==> INT_EQ(cancelLockStatus_1, 0);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_16#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_16#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$anon9_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon9_Else#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon9_Else#2:
- assume k != 0;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon10_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon10_Else#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon10_Else#2:
- assume k != 1;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon5#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon10_Then#2:
- assume k == 1;
- cancelLockStatus_1 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon5#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon9_Then#2:
- assume k == 0;
- cancelLockStatus_0 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon5#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon5#2:
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_17#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_17#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$anon11_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon11_Else#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon11_Else#2:
- assume __storm_init;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon7#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon11_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon7#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon7#2:
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_1#2:
- goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#2:
- assume raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
-
- inline$storm_IoAcquireCancelSpinLock$0$Return#2:
- goto inline$storm_IoCancelIrp$0$label_13$1#2;
-
- inline$storm_IoCancelIrp$0$label_13$1#2:
- goto inline$storm_IoCancelIrp$0$anon30_Then#2, inline$storm_IoCancelIrp$0$anon30_Else#2;
-
- inline$storm_IoCancelIrp$0$anon30_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon12#2;
-
- inline$storm_IoCancelIrp$0$anon12#2:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- goto inline$storm_IoCancelIrp$0$label_16#2;
-
- inline$storm_IoCancelIrp$0$label_16#2:
- goto inline$storm_IoCancelIrp$0$label_16_true#2, inline$storm_IoCancelIrp$0$label_16_false#2;
-
- inline$storm_IoCancelIrp$0$label_16_false#2:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == 0;
- goto inline$storm_IoCancelIrp$0$label_17#2;
-
- inline$storm_IoCancelIrp$0$label_17#2:
- goto inline$storm_IoCancelIrp$0$label_1#2;
-
- inline$storm_IoCancelIrp$0$label_16_true#2:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp != 0;
- goto inline$storm_IoCancelIrp$0$label_18#2;
-
- inline$storm_IoCancelIrp$0$label_18#2:
- goto inline$storm_IoCancelIrp$0$label_19#2;
-
- inline$storm_IoCancelIrp$0$label_19#2:
- call inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ := storm_nondet();
- goto inline$storm_IoCancelIrp$0$label_22#2;
-
- inline$storm_IoCancelIrp$0$label_22#2:
- goto inline$storm_IoCancelIrp$0$label_22_true#2, inline$storm_IoCancelIrp$0$label_22_false#2;
-
- inline$storm_IoCancelIrp$0$label_22_false#2:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ == 0;
- goto inline$storm_IoCancelIrp$0$label_23#2;
-
- inline$storm_IoCancelIrp$0$label_22_true#2:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ != 0;
- goto inline$storm_IoCancelIrp$0$label_26#2;
-
- inline$storm_IoCancelIrp$0$label_26#2:
- havoc raiseException;
- goto inline$storm_IoCancelIrp$0$anon32_Then#2, inline$storm_IoCancelIrp$0$anon32_Else#2;
-
- inline$storm_IoCancelIrp$0$anon32_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon16#2;
-
- inline$storm_IoCancelIrp$0$anon16#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_27#2;
-
- inline$storm_IoCancelIrp$0$label_27#2:
- goto inline$storm_IoCancelIrp$0$label_27_true#2, inline$storm_IoCancelIrp$0$label_27_false#2;
-
- inline$storm_IoCancelIrp$0$label_27_false#2:
- assume 0 == 0;
- goto inline$storm_IoCancelIrp$0$label_28#2;
-
- inline$storm_IoCancelIrp$0$label_28#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCancelIrp$0$label_1#2;
-
- inline$storm_IoCancelIrp$0$label_27_true#2:
- assume 0 != 0;
- goto inline$storm_IoCancelIrp$0$label_23#2;
-
- inline$storm_IoCancelIrp$0$label_23#2:
- goto inline$IoGetCurrentIrpStackLocation$5$Entry#2;
-
- inline$IoGetCurrentIrpStackLocation$5$Entry#2:
- inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
- goto inline$IoGetCurrentIrpStackLocation$5$start#2;
-
- inline$IoGetCurrentIrpStackLocation$5$start#2:
- inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
- goto inline$IoGetCurrentIrpStackLocation$5$label_3#2;
-
- inline$IoGetCurrentIrpStackLocation$5$label_3#2:
- goto inline$IoGetCurrentIrpStackLocation$5$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$5$anon3_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$5$anon3_Else#2:
- assume k != 0;
- goto inline$IoGetCurrentIrpStackLocation$5$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$5$anon4_Else#2;
-
- inline$IoGetCurrentIrpStackLocation$5$anon4_Else#2:
- assume k != 1;
- goto inline$IoGetCurrentIrpStackLocation$5$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$5$anon4_Then#2:
- assume k == 1;
- inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- goto inline$IoGetCurrentIrpStackLocation$5$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$5$anon3_Then#2:
- assume k == 0;
- inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
- goto inline$IoGetCurrentIrpStackLocation$5$anon2#2;
-
- inline$IoGetCurrentIrpStackLocation$5$anon2#2:
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$5$myVar_0;
- goto inline$IoGetCurrentIrpStackLocation$5$label_1#2;
-
- inline$IoGetCurrentIrpStackLocation$5$label_1#2:
- goto inline$IoGetCurrentIrpStackLocation$5$Return#2;
-
- inline$IoGetCurrentIrpStackLocation$5$Return#2:
- inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$ := inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
- goto inline$storm_IoCancelIrp$0$label_23$1#2;
-
- inline$storm_IoCancelIrp$0$label_23$1#2:
- goto inline$storm_IoCancelIrp$0$anon31_Then#2, inline$storm_IoCancelIrp$0$anon31_Else#2;
-
- inline$storm_IoCancelIrp$0$anon31_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon14#2;
-
- inline$storm_IoCancelIrp$0$anon14#2:
- goto inline$storm_IoCancelIrp$0$label_31#2;
-
- inline$storm_IoCancelIrp$0$label_31#2:
- inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$;
- goto inline$storm_IoCancelIrp$0$label_32#2;
-
- inline$storm_IoCancelIrp$0$label_32#2:
- goto inline$storm_IoCancelIrp$0$label_32_icall_1#2;
-
- inline$storm_IoCancelIrp$0$label_32_icall_1#2:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == I8xSysButtonCancelRoutine;
- goto inline$storm_IoCancelIrp$0$anon33_Then#2, inline$storm_IoCancelIrp$0$anon33_Else#2;
-
- inline$storm_IoCancelIrp$0$anon33_Else#2:
- assume k != 0;
- goto inline$storm_IoCancelIrp$0$anon34_Then#2, inline$storm_IoCancelIrp$0$anon34_Else#2;
-
- inline$storm_IoCancelIrp$0$anon34_Else#2:
- assume k != 1;
- goto inline$storm_IoCancelIrp$0$anon20#2;
-
- inline$storm_IoCancelIrp$0$anon34_Then#2:
- assume k == 1;
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_1_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION(inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp)];
- goto inline$storm_IoCancelIrp$0$anon20#2;
-
- inline$storm_IoCancelIrp$0$anon33_Then#2:
- assume k == 0;
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION(inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp)];
- goto inline$storm_IoCancelIrp$0$anon20#2;
-
- inline$storm_IoCancelIrp$0$anon20#2:
- call contextSwitch();
- goto inline$I8xSysButtonCancelRoutine$0$Entry#2;
-
- inline$I8xSysButtonCancelRoutine$0$Entry#2:
- inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$myVar_0;
- inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
- goto inline$I8xSysButtonCancelRoutine$0$start#2;
-
- inline$I8xSysButtonCancelRoutine$0$start#2:
- call inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine := __HAVOC_malloc(1);
- inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1;
- inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1;
- goto inline$I8xSysButtonCancelRoutine$0$label_3#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_3#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_4#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_4#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon11_Then#2, inline$I8xSysButtonCancelRoutine$0$anon11_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon11_Else#2:
- assume k != 0;
- goto inline$I8xSysButtonCancelRoutine$0$anon12_Then#2, inline$I8xSysButtonCancelRoutine$0$anon12_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon12_Else#2:
- assume k != 1;
- goto inline$I8xSysButtonCancelRoutine$0$anon2#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon12_Then#2:
- assume k == 1;
- inline$I8xSysButtonCancelRoutine$0$myVar_0 := Mem_1_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine)];
- goto inline$I8xSysButtonCancelRoutine$0$anon2#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon11_Then#2:
- assume k == 0;
- inline$I8xSysButtonCancelRoutine$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine)];
- goto inline$I8xSysButtonCancelRoutine$0$anon2#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon2#2:
- call contextSwitch();
- inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$myVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_5#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_5#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_6#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_6#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_7#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_7#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$1$Entry#2;
-
- inline$storm_KeAcquireSpinLock$1$Entry#2:
- inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
- goto inline$storm_KeAcquireSpinLock$1$start#2;
-
- inline$storm_KeAcquireSpinLock$1$start#2:
- inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
- goto inline$storm_KeAcquireSpinLock$1$label_3#2;
-
- inline$storm_KeAcquireSpinLock$1$label_3#2:
- goto inline$storm_KeAcquireSpinLock$1$label_4#2;
-
- inline$storm_KeAcquireSpinLock$1$label_4#2:
- goto inline$storm_getThreadID$3$Entry#2;
-
- inline$storm_getThreadID$3$Entry#2:
- goto inline$storm_getThreadID$3$anon0#2;
-
- inline$storm_getThreadID$3$anon0#2:
- inline$storm_getThreadID$3$tidRet := tid;
- goto inline$storm_getThreadID$3$Return#2;
-
- inline$storm_getThreadID$3$Return#2:
- inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$3$tidRet;
- goto inline$storm_KeAcquireSpinLock$1$label_4$1#2;
-
- inline$storm_KeAcquireSpinLock$1$label_4$1#2:
- goto inline$storm_KeAcquireSpinLock$1$label_7#2;
-
- inline$storm_KeAcquireSpinLock$1$label_7#2:
- inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$1$label_8#2;
-
- inline$storm_KeAcquireSpinLock$1$label_8#2:
- goto inline$storm_KeAcquireSpinLock$1$label_9#2;
-
- inline$storm_KeAcquireSpinLock$1$label_9#2:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$1$label_12#2;
-
- inline$storm_KeAcquireSpinLock$1$label_12#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon10_Then#2, inline$storm_KeAcquireSpinLock$1$anon10_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon10_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon1#2;
-
- inline$storm_KeAcquireSpinLock$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_13#2;
-
- inline$storm_KeAcquireSpinLock$1$label_13#2:
- goto inline$storm_KeAcquireSpinLock$1$label_13_true#2, inline$storm_KeAcquireSpinLock$1$label_13_false#2;
-
- inline$storm_KeAcquireSpinLock$1$label_13_false#2:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$1$label_14#2;
-
- inline$storm_KeAcquireSpinLock$1$label_14#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$1$label_1#2;
-
- inline$storm_KeAcquireSpinLock$1$label_13_true#2:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
- goto inline$storm_KeAcquireSpinLock$1$label_17#2;
-
- inline$storm_KeAcquireSpinLock$1$label_17#2:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon11_Then#2, inline$storm_KeAcquireSpinLock$1$anon11_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon11_Else#2:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon4#2;
-
- inline$storm_KeAcquireSpinLock$1$anon4#2:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
- goto inline$storm_KeAcquireSpinLock$1$label_18#2;
-
- inline$storm_KeAcquireSpinLock$1$label_18#2:
- goto inline$storm_KeAcquireSpinLock$1$anon12_Then#2, inline$storm_KeAcquireSpinLock$1$anon12_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon12_Else#2:
- assume k != 0;
- goto inline$storm_KeAcquireSpinLock$1$anon13_Then#2, inline$storm_KeAcquireSpinLock$1$anon13_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon13_Else#2:
- assume k != 1;
- goto inline$storm_KeAcquireSpinLock$1$anon7#2;
-
- inline$storm_KeAcquireSpinLock$1$anon13_Then#2:
- assume k == 1;
- Res_1_LOCK := Res_1_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock];
- goto inline$storm_KeAcquireSpinLock$1$anon7#2;
-
- inline$storm_KeAcquireSpinLock$1$anon12_Then#2:
- assume k == 0;
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock];
- goto inline$storm_KeAcquireSpinLock$1$anon7#2;
-
- inline$storm_KeAcquireSpinLock$1$anon7#2:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_19#2;
-
- inline$storm_KeAcquireSpinLock$1$label_19#2:
- goto inline$storm_KeAcquireSpinLock$1$anon14_Then#2, inline$storm_KeAcquireSpinLock$1$anon14_Else#2;
-
- inline$storm_KeAcquireSpinLock$1$anon14_Else#2:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$1$anon9#2;
-
- inline$storm_KeAcquireSpinLock$1$anon14_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$1$anon9#2;
-
- inline$storm_KeAcquireSpinLock$1$anon9#2:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_1#2;
-
- inline$storm_KeAcquireSpinLock$1$label_1#2:
- goto inline$storm_KeAcquireSpinLock$1$Return#2;
-
- inline$storm_KeAcquireSpinLock$1$anon11_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$1$Return#2;
-
- inline$storm_KeAcquireSpinLock$1$anon10_Then#2:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$1$Return#2;
-
- inline$storm_KeAcquireSpinLock$1$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_7$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_7$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon13_Then#2, inline$I8xSysButtonCancelRoutine$0$anon13_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon13_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon4#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon4#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_10#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_10#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_11#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_11#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_12#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_12#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$1$Entry#2;
-
- inline$storm_KeReleaseSpinLock$1$Entry#2:
- inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
- goto inline$storm_KeReleaseSpinLock$1$start#2;
-
- inline$storm_KeReleaseSpinLock$1$start#2:
- inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
- goto inline$storm_KeReleaseSpinLock$1$label_3#2;
-
- inline$storm_KeReleaseSpinLock$1$label_3#2:
- goto inline$storm_KeReleaseSpinLock$1$label_4#2;
-
- inline$storm_KeReleaseSpinLock$1$label_4#2:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$1$label_7#2;
-
- inline$storm_KeReleaseSpinLock$1$label_7#2:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$1$anon8_Then#2, inline$storm_KeReleaseSpinLock$1$anon8_Else#2;
-
- inline$storm_KeReleaseSpinLock$1$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$1$anon1#2;
-
- inline$storm_KeReleaseSpinLock$1$anon1#2:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
- assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_8#2;
-
- inline$storm_KeReleaseSpinLock$1$label_8#2:
- goto inline$storm_getThreadID$4$Entry#2;
-
- inline$storm_getThreadID$4$Entry#2:
- goto inline$storm_getThreadID$4$anon0#2;
-
- inline$storm_getThreadID$4$anon0#2:
- inline$storm_getThreadID$4$tidRet := tid;
- goto inline$storm_getThreadID$4$Return#2;
-
- inline$storm_getThreadID$4$Return#2:
- inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$4$tidRet;
- goto inline$storm_KeReleaseSpinLock$1$label_8$1#2;
-
- inline$storm_KeReleaseSpinLock$1$label_8$1#2:
- goto inline$storm_KeReleaseSpinLock$1$label_11#2;
-
- inline$storm_KeReleaseSpinLock$1$label_11#2:
- goto inline$storm_KeReleaseSpinLock$1$label_11_true#2, inline$storm_KeReleaseSpinLock$1$label_11_false#2;
-
- inline$storm_KeReleaseSpinLock$1$label_11_false#2:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$1$label_12#2;
-
- inline$storm_KeReleaseSpinLock$1$label_12#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$1$label_1#2;
-
- inline$storm_KeReleaseSpinLock$1$label_11_true#2:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$1$label_15#2;
-
- inline$storm_KeReleaseSpinLock$1$label_15#2:
- goto inline$storm_KeReleaseSpinLock$1$anon9_Then#2, inline$storm_KeReleaseSpinLock$1$anon9_Else#2;
-
- inline$storm_KeReleaseSpinLock$1$anon9_Else#2:
- assume k != 0;
- goto inline$storm_KeReleaseSpinLock$1$anon10_Then#2, inline$storm_KeReleaseSpinLock$1$anon10_Else#2;
-
- inline$storm_KeReleaseSpinLock$1$anon10_Else#2:
- assume k != 1;
- goto inline$storm_KeReleaseSpinLock$1$anon5#2;
-
- inline$storm_KeReleaseSpinLock$1$anon10_Then#2:
- assume k == 1;
- Res_1_LOCK := Res_1_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
- goto inline$storm_KeReleaseSpinLock$1$anon5#2;
-
- inline$storm_KeReleaseSpinLock$1$anon9_Then#2:
- assume k == 0;
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
- goto inline$storm_KeReleaseSpinLock$1$anon5#2;
-
- inline$storm_KeReleaseSpinLock$1$anon5#2:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_16#2;
-
- inline$storm_KeReleaseSpinLock$1$label_16#2:
- goto inline$storm_KeReleaseSpinLock$1$anon11_Then#2, inline$storm_KeReleaseSpinLock$1$anon11_Else#2;
-
- inline$storm_KeReleaseSpinLock$1$anon11_Else#2:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$1$anon7#2;
-
- inline$storm_KeReleaseSpinLock$1$anon11_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$1$anon7#2;
-
- inline$storm_KeReleaseSpinLock$1$anon7#2:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_1#2;
-
- inline$storm_KeReleaseSpinLock$1$label_1#2:
- goto inline$storm_KeReleaseSpinLock$1$Return#2;
-
- inline$storm_KeReleaseSpinLock$1$anon8_Then#2:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$1$Return#2;
-
- inline$storm_KeReleaseSpinLock$1$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_12$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_12$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon14_Then#2, inline$I8xSysButtonCancelRoutine$0$anon14_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon14_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon6#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon6#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$I8xSysButtonCancelRoutine$0$label_15#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_15#2:
- havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
- goto inline$storm_IoReleaseCancelSpinLock$0$Entry#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$Entry#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$start#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$start#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$label_3#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_3#2:
- __storm_atomic := true;
- goto inline$storm_IoReleaseCancelSpinLock$0$label_6#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_6#2:
- goto inline$storm_getThreadID$5$Entry#2;
-
- inline$storm_getThreadID$5$Entry#2:
- goto inline$storm_getThreadID$5$anon0#2;
-
- inline$storm_getThreadID$5$anon0#2:
- inline$storm_getThreadID$5$tidRet := tid;
- goto inline$storm_getThreadID$5$Return#2;
-
- inline$storm_getThreadID$5$Return#2:
- inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$ := inline$storm_getThreadID$5$tidRet;
- goto inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$label_9#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_9#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2, inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2:
- assume k == 0 ==> !INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
- assume k == 1 ==> !INT_EQ(cancelLockStatus_1, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_10#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2:
- assume k == 0 ==> INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
- assume k == 1 ==> INT_EQ(cancelLockStatus_1, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_13#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_13#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$anon6_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon6_Else#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon6_Else#2:
- assume k != 0;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon7_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon7_Else#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon7_Else#2:
- assume k != 1;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon3#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon7_Then#2:
- assume k == 1;
- cancelLockStatus_1 := 0;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon3#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon6_Then#2:
- assume k == 0;
- cancelLockStatus_0 := 0;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon3#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon3#2:
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_14#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_14#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$anon8_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon8_Else#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon8_Else#2:
- assume __storm_init;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon5#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon8_Then#2:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoReleaseCancelSpinLock$0$anon5#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$anon5#2:
- call contextSwitch();
- goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$label_1#2:
- goto inline$storm_IoReleaseCancelSpinLock$0$Return#2;
-
- inline$storm_IoReleaseCancelSpinLock$0$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_15$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_15$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon15_Then#2, inline$I8xSysButtonCancelRoutine$0$anon15_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon15_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon8#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon8#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_18#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_18#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_19#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_19#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_20#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_20#2:
- goto inline$storm_IoCompleteRequest$4$Entry#2;
-
- inline$storm_IoCompleteRequest$4$Entry#2:
- inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine;
- goto inline$storm_IoCompleteRequest$4$start#2;
-
- inline$storm_IoCompleteRequest$4$start#2:
- inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1;
- goto inline$storm_IoCompleteRequest$4$label_3#2;
-
- inline$storm_IoCompleteRequest$4$label_3#2:
- call inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$4$label_6#2;
-
- inline$storm_IoCompleteRequest$4$label_6#2:
- goto inline$storm_IoCompleteRequest$4$label_6_true#2, inline$storm_IoCompleteRequest$4$label_6_false#2;
-
- inline$storm_IoCompleteRequest$4$label_6_false#2:
- assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$4$label_7#2;
-
- inline$storm_IoCompleteRequest$4$label_6_true#2:
- assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$4$label_8#2;
-
- inline$storm_IoCompleteRequest$4$label_8#2:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$4$anon8_Then#2, inline$storm_IoCompleteRequest$4$anon8_Else#2;
-
- inline$storm_IoCompleteRequest$4$anon8_Else#2:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$4$anon4#2;
-
- inline$storm_IoCompleteRequest$4$anon4#2:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$4$label_9#2;
-
- inline$storm_IoCompleteRequest$4$label_9#2:
- goto inline$storm_IoCompleteRequest$4$label_9_true#2, inline$storm_IoCompleteRequest$4$label_9_false#2;
-
- inline$storm_IoCompleteRequest$4$label_9_false#2:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$4$label_10#2;
-
- inline$storm_IoCompleteRequest$4$label_10#2:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$4$label_1#2;
-
- inline$storm_IoCompleteRequest$4$label_9_true#2:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$4$label_7#2;
-
- inline$storm_IoCompleteRequest$4$label_7#2:
- goto inline$storm_IoCompleteRequest$4$anon6_Then#2, inline$storm_IoCompleteRequest$4$anon6_Else#2;
-
- inline$storm_IoCompleteRequest$4$anon6_Else#2:
- assume k != 0;
- goto inline$storm_IoCompleteRequest$4$anon7_Then#2, inline$storm_IoCompleteRequest$4$anon7_Else#2;
-
- inline$storm_IoCompleteRequest$4$anon7_Else#2:
- assume k != 1;
- goto inline$storm_IoCompleteRequest$4$anon2#2;
-
- inline$storm_IoCompleteRequest$4$anon7_Then#2:
- assume k == 1;
- Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$4$anon2#2;
-
- inline$storm_IoCompleteRequest$4$anon6_Then#2:
- assume k == 0;
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := 1];
- goto inline$storm_IoCompleteRequest$4$anon2#2;
-
- inline$storm_IoCompleteRequest$4$anon2#2:
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$4$label_1#2;
-
- inline$storm_IoCompleteRequest$4$label_1#2:
- goto inline$storm_IoCompleteRequest$4$Return#2;
-
- inline$storm_IoCompleteRequest$4$anon8_Then#2:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$4$Return#2;
-
- inline$storm_IoCompleteRequest$4$Return#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_20$1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_20$1#2:
- goto inline$I8xSysButtonCancelRoutine$0$anon16_Then#2, inline$I8xSysButtonCancelRoutine$0$anon16_Else#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon16_Else#2:
- assume !raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$anon10#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon10#2:
- goto inline$I8xSysButtonCancelRoutine$0$label_1#2;
-
- inline$I8xSysButtonCancelRoutine$0$label_1#2:
- call __HAVOC_free(inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine);
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon16_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon15_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon14_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$anon13_Then#2:
- assume raiseException;
- goto inline$I8xSysButtonCancelRoutine$0$Return#2;
-
- inline$I8xSysButtonCancelRoutine$0$Return#2:
- goto inline$storm_IoCancelIrp$0$anon20$1#2;
-
- inline$storm_IoCancelIrp$0$anon20$1#2:
- goto inline$storm_IoCancelIrp$0$anon35_Then#2, inline$storm_IoCancelIrp$0$anon35_Else#2;
-
- inline$storm_IoCancelIrp$0$anon35_Else#2:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon22#2;
-
- inline$storm_IoCancelIrp$0$anon22#2:
- goto inline$storm_IoCancelIrp$0$label_32_icall_return#2;
-
- inline$storm_IoCancelIrp$0$label_32_icall_return#2:
- goto inline$storm_IoCancelIrp$0$label_35#2;
-
- inline$storm_IoCancelIrp$0$label_35#2:
- goto inline$storm_IoCancelIrp$0$label_1#2;
-
- inline$storm_IoCancelIrp$0$label_1#2:
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon35_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon31_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon32_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$anon30_Then#2:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#2;
-
- inline$storm_IoCancelIrp$0$Return#2:
- goto inline$cancel$0$label_3$1#2;
-
- inline$cancel$0$label_3$1#2:
- goto inline$cancel$0$anon2_Then#2, inline$cancel$0$anon2_Else#2;
-
- inline$cancel$0$anon2_Else#2:
- assume !raiseException;
- goto inline$cancel$0$anon1#2;
-
- inline$cancel$0$anon1#2:
- goto inline$cancel$0$label_1#2;
-
- inline$cancel$0$label_1#2:
- goto inline$cancel$0$Return#2;
-
- inline$cancel$0$anon2_Then#2:
- assume raiseException;
- goto inline$cancel$0$Return#2;
-
- inline$cancel$0$Return#2:
- goto label_27$1#2;
-
- label_27$1#2:
- goto anon32_Then#2, anon32_Else#2;
-
- anon32_Else#2:
- assume !(errorReached || !raiseException);
- goto anon19#2;
-
- anon32_Then#2:
- assume errorReached || !raiseException;
- __storm_thread_done_2 := true;
- goto anon19#2;
-
- anon19#2:
- k := k_old_1;
- tid := tid_old_1;
- goto label_30#2;
-
- label_30#2:
- goto label_31#2;
-
- label_31#2:
- k_old_2 := k;
- tid_old_2 := tid;
- tidCount_old := tidCount;
- havoc tidCount;
- assume tidCount_old < tidCount;
- tid := tidCount;
- raiseException := false;
- call contextSwitch();
- goto inline$dpc$0$Entry#2;
-
- inline$dpc$0$Entry#2:
- goto inline$dpc$0$start#2;
-
- inline$dpc$0$start#2:
- goto inline$dpc$0$label_1#2;
-
- inline$dpc$0$label_1#2:
- goto inline$dpc$0$Return#2;
-
- inline$dpc$0$Return#2:
- goto label_31$1#2;
-
- label_31$1#2:
- goto anon33_Then#2, anon33_Else#2;
-
- anon33_Else#2:
- assume !(errorReached || !raiseException);
- goto anon21#2;
-
- anon33_Then#2:
- assume errorReached || !raiseException;
- __storm_thread_done_3 := true;
- goto anon21#2;
-
- anon21#2:
- k := k_old_2;
- tid := tid_old_2;
- goto label_1#2;
-
- label_1#2:
- assume Mem_0_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
- assume Mem_0_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
- assume Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
- assume Mem_0_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
- assume Mem_0_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
- assume cancelLockStatus_0 == cancelLockStatus_s_1;
- assume Res_0_COMPLETED == Res_s_1_COMPLETED;
- assume Res_0_LOCK == Res_s_1_LOCK;
- assert !errorReached;
- return;
-
- anon30_Then#2:
- assume raiseException;
- return;
-
- anon27_Then#2:
- assume raiseException;
- return;
-
- anon26_Then#2:
- assume raiseException;
- return;
-
- anon25_Then#2:
- assume raiseException;
- return;
-
- anon24_Then#2:
- assume raiseException;
- return;
-}
-
-
-
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var __storm_thread_done_0 : bool;
+var __storm_thread_done_1 : bool;
+var __storm_thread_done_2 : bool;
+var __storm_thread_done_3 : bool;
+
+var raiseException : bool;
+var errorReached : bool;
+var k : int;
+var __storm_atomic : bool;
+var __storm_init : bool;
+var tid : int;
+var tidCount : int;
+
+procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tidRet:int)
+{
+ tidRet := tid;
+ return;
+}
+
+
+procedure storm_context_0();
+procedure storm_context_1();
+
+procedure contextSwitch();
+modifies k;
+ensures __storm_atomic ==> old(k) == k;
+ensures(old(k) <= k);
+ensures(k < 2);
+
+
+
+// Memory model
+
+// Mutable
+var alloc:int;
+
+// Immutable
+
+var Mem_0_T.CancelRoutine__IRP : [int]int;
+var Mem_1_T.CancelRoutine__IRP : [int]int;
+var Mem_s_1_T.CancelRoutine__IRP : [int]int;
+var Mem_0_T.Cancel__IRP : [int]int;
+var Mem_1_T.Cancel__IRP : [int]int;
+var Mem_s_1_T.Cancel__IRP : [int]int;
+var Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
+var Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
+var Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23 : [int]int;
+var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_s_1_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_0_T.DeviceObject__IO_STACK_LOCATION : [int]int;
+var Mem_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
+var Mem_s_1_T.DeviceObject__IO_STACK_LOCATION : [int]int;
+
+
+// Field declarations
+
+
+// Type declarations
+
+
+// Field offset definitions
+
+function AssociatedIrp__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == x + 12);
+axiom (forall x:int :: {AssociatedIrp__IRP(x)} AssociatedIrp__IRP(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function COMMON_DATA__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {COMMON_DATA__PORT_KEYBOARD_EXTENSION(x)} COMMON_DATA__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelIrql__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
+axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelRoutine__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
+axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Cancel__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
+axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
+axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Context__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
+axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Control__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
+axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControllerData__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == x + 0);
+axiom (forall x:int :: {ControllerData__GLOBALS(x)} ControllerData__GLOBALS(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentLocation__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
+axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentStackLocation___unnamed_4_3c640f23(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == x + 0);
+axiom (forall x:int :: {CurrentStackLocation___unnamed_4_3c640f23(x)} CurrentStackLocation___unnamed_4_3c640f23(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceIoControl___unnamed_16_afe81cff(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == x + 0);
+axiom (forall x:int :: {DeviceIoControl___unnamed_16_afe81cff(x)} DeviceIoControl___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceObject__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
+axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(int) returns (int);
+
+
+//axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == x + 2);
+axiom (forall x:int :: {Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x)} Flags__CM_PARTIAL_RESOURCE_DESCRIPTOR(x) == INT_ADD(x, 2));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Information__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
+axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Initialized_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == x + 323);
+axiom (forall x:int :: {Initialized_COMMON_DATA(x)} Initialized_COMMON_DATA(x) == INT_ADD(x, 323));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function InterruptDescriptor_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == x + 300);
+axiom (forall x:int :: {InterruptDescriptor_COMMON_DATA(x)} InterruptDescriptor_COMMON_DATA(x) == INT_ADD(x, 300));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function InterruptObject_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == x + 4);
+axiom (forall x:int :: {InterruptObject_COMMON_DATA(x)} InterruptObject_COMMON_DATA(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IoControlCode___unnamed_16_ae81ad04(int) returns (int);
+
+
+//axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == x + 8);
+axiom (forall x:int :: {IoControlCode___unnamed_16_ae81ad04(x)} IoControlCode___unnamed_16_ae81ad04(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IoStatus__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
+axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Irp__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == x + 8);
+axiom (forall x:int :: {Irp__I8X_KEYBOARD_WORK_ITEM(x)} Irp__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IsKeyboard_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == x + 325);
+axiom (forall x:int :: {IsKeyboard_COMMON_DATA(x)} IsKeyboard_COMMON_DATA(x) == INT_ADD(x, 325));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Item__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == x + 0);
+axiom (forall x:int :: {Item__I8X_KEYBOARD_WORK_ITEM(x)} Item__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Item__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == x + 0);
+axiom (forall x:int :: {Item__POWER_UP_WORK_ITEM(x)} Item__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function KeyboardExtension__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == x + 8);
+axiom (forall x:int :: {KeyboardExtension__GLOBALS(x)} KeyboardExtension__GLOBALS(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function KeyboardPowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == x + 8);
+axiom (forall x:int :: {KeyboardPowerIrp__POWER_UP_WORK_ITEM(x)} KeyboardPowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MajorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
+axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MakeCode__I8X_KEYBOARD_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == x + 4);
+axiom (forall x:int :: {MakeCode__I8X_KEYBOARD_WORK_ITEM(x)} MakeCode__I8X_KEYBOARD_WORK_ITEM(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MinorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
+axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MouseExtension__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == x + 4);
+axiom (forall x:int :: {MouseExtension__GLOBALS(x)} MouseExtension__GLOBALS(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MousePowerIrp__POWER_UP_WORK_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == x + 4);
+axiom (forall x:int :: {MousePowerIrp__POWER_UP_WORK_ITEM(x)} MousePowerIrp__POWER_UP_WORK_ITEM(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function OutputBufferLength___unnamed_16_ae81ad04(int) returns (int);
+
+
+//axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == x + 0);
+axiom (forall x:int :: {OutputBufferLength___unnamed_16_ae81ad04(x)} OutputBufferLength___unnamed_16_ae81ad04(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function OutstandingPowerIrp_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == x + 44);
+axiom (forall x:int :: {OutstandingPowerIrp_COMMON_DATA(x)} OutstandingPowerIrp_COMMON_DATA(x) == INT_ADD(x, 44));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Overlay___unnamed_48_e2bbfb0b(int) returns (int);
+
+
+//axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == x + 0);
+axiom (forall x:int :: {Overlay___unnamed_48_e2bbfb0b(x)} Overlay___unnamed_48_e2bbfb0b(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Parameters__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
+axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PendingReturned__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
+axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PnpDeviceState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == x + 316);
+axiom (forall x:int :: {PnpDeviceState_COMMON_DATA(x)} PnpDeviceState_COMMON_DATA(x) == INT_ADD(x, 316));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerCaps__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == x + 328);
+axiom (forall x:int :: {PowerCaps__PORT_KEYBOARD_EXTENSION(x)} PowerCaps__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 328));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerEvent__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == x + 329);
+axiom (forall x:int :: {PowerEvent__PORT_KEYBOARD_EXTENSION(x)} PowerEvent__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 329));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerFlags__GLOBALS(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == x + 40);
+axiom (forall x:int :: {PowerFlags__GLOBALS(x)} PowerFlags__GLOBALS(x) == INT_ADD(x, 40));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerSpinLock__CONTROLLER_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == x + 116);
+axiom (forall x:int :: {PowerSpinLock__CONTROLLER_DATA(x)} PowerSpinLock__CONTROLLER_DATA(x) == INT_ADD(x, 116));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == x + 48);
+axiom (forall x:int :: {PowerState_COMMON_DATA(x)} PowerState_COMMON_DATA(x) == INT_ADD(x, 48));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Power___unnamed_16_afe81cff(int) returns (int);
+
+
+//axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == x + 0);
+axiom (forall x:int :: {Power___unnamed_16_afe81cff(x)} Power___unnamed_16_afe81cff(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function RemoveLock_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == x + 20);
+axiom (forall x:int :: {RemoveLock_COMMON_DATA(x)} RemoveLock_COMMON_DATA(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Self_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == x + 0);
+axiom (forall x:int :: {Self_COMMON_DATA(x)} Self_COMMON_DATA(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ShutdownType_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == x + 56);
+axiom (forall x:int :: {ShutdownType_COMMON_DATA(x)} ShutdownType_COMMON_DATA(x) == INT_ADD(x, 56));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ShutdownType___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == x + 12);
+axiom (forall x:int :: {ShutdownType___unnamed_16_57972375(x)} ShutdownType___unnamed_16_57972375(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Started_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == x + 326);
+axiom (forall x:int :: {Started_COMMON_DATA(x)} Started_COMMON_DATA(x) == INT_ADD(x, 326));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function State___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == x + 8);
+axiom (forall x:int :: {State___unnamed_16_57972375(x)} State___unnamed_16_57972375(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Status___unnamed_4_d4b13373(int) returns (int);
+
+
+//axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == x + 0);
+axiom (forall x:int :: {Status___unnamed_4_d4b13373(x)} Status___unnamed_4_d4b13373(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == x + 332);
+axiom (forall x:int :: {SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x)} SysButtonEventIrp__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 332));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == x + 368);
+axiom (forall x:int :: {SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x)} SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(x) == INT_ADD(x, 368));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemBuffer___unnamed_4_99f86ad5(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == x + 0);
+axiom (forall x:int :: {SystemBuffer___unnamed_4_99f86ad5(x)} SystemBuffer___unnamed_4_99f86ad5(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemState_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == x + 52);
+axiom (forall x:int :: {SystemState_COMMON_DATA(x)} SystemState_COMMON_DATA(x) == INT_ADD(x, 52));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Tail__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
+axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function TopOfStack_COMMON_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == x + 12);
+axiom (forall x:int :: {TopOfStack_COMMON_DATA(x)} TopOfStack_COMMON_DATA(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Type___unnamed_16_57972375(int) returns (int);
+
+
+//axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == x + 4);
+axiom (forall x:int :: {Type___unnamed_16_57972375(x)} Type___unnamed_16_57972375(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_12_41c62b26___unnamed_40_32307de2(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == x + 24);
+axiom (forall x:int :: {__unnamed_12_41c62b26___unnamed_40_32307de2(x)} __unnamed_12_41c62b26___unnamed_40_32307de2(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_4_3c640f23___unnamed_12_41c62b26(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == x + 8);
+axiom (forall x:int :: {__unnamed_4_3c640f23___unnamed_12_41c62b26(x)} __unnamed_4_3c640f23___unnamed_12_41c62b26(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_4_d4b13373__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_d4b13373__IO_STATUS_BLOCK(x)} __unnamed_4_d4b13373__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+
+///////////////////////////////////
+// will be replaced by:
+// "//" when using bv mode
+// "" when using int mode
+// main reason is to avoid using bv for constants
+// or avoid translating lines that are complex or unsound
+//////////////////////////////////
+
+////////////////////////////////////////////
+/////// functions for int type /////////////
+// Theorem prover does not see INT_ADD etc.
+////////////////////////////////////////////
+function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
+function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
+
+function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
+function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
+function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
+function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
+function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
+function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
+
+
+////////////////////////////////////////////
+/////// functions for bv32 type /////////////
+// Theorem prover does not see INT_ADD etc.
+// we are treating unsigned ops now
+////////////////////////////////////////////
+function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
+function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
+
+function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
+
+//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
+//only enabled with bv theory
+// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
+
+//////////////////////////////////
+// Generic C Arithmetic operations
+/////////////////////////////////
+
+//Is this sound for bv32?
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+ axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+ INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
+
+//we just keep this axiom for size = 1
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
+
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
+
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
+
+function MULT(a:int, b:int) returns (int); // a*b
+//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+// Not sure if these axioms hold for BV too, just commet them for BV
+
+
+
+//uninterpreted binary op
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+
+//////////////////////////////////////////
+//// Bitwise ops (uninterpreted, used with int)
+//////////////////////////////////////////
+
+
+ function BIT_BAND(a:int, b:int) returns (x:int);
+
+
+ function BIT_BOR(a:int, b:int) returns (x:int);
+ function BIT_BXOR(a:int, b:int) returns (x:int);
+ function BIT_BNOT(a:int) returns (int);
+
+
+
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function PTR_NOT(a:int) returns (int);
+axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
+axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+
+function NewAlloc(x:int, y:int) returns (z:int);
+
+//Comments below make HAVOC_malloc deterministic
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+//requires obj_size >= 0;
+free requires INT_GEQ(obj_size, 0);
+modifies alloc;
+ensures new == old(alloc);
+//ensures alloc > new + obj_size;
+ensures INT_GT(alloc, INT_ADD(new, obj_size));
+//ensures alloc == NewAlloc(old(alloc), obj_size);
+
+
+
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+
+/*
+//bv functions
+function bv8ToInt(bv8) returns (int);
+function bv16ToInt(bv16) returns (int);
+function bv32ToInt(bv32) returns (int);
+function bv64ToInt(bv64) returns (int);
+
+function intToBv8(int) returns (bv8);
+function intToBv16(int) returns (bv16);
+function intToBv32(int) returns (bv32);
+function intToBv64(int) returns (bv64);
+
+axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
+axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
+axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
+axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
+
+axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
+axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
+axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
+axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
+*/
+
+
+
+var Res_0_COMPLETED : [int]int;
+var Res_1_COMPLETED : [int]int;
+var Res_s_1_COMPLETED : [int]int;
+var Res_KERNEL_SOURCE:[int]int;
+var Res_0_LOCK : [int]int;
+var Res_1_LOCK : [int]int;
+var Res_s_1_LOCK : [int]int;
+var Res_PROBED:[int]int;
+
+//Pointer constants
+
+//Function pointer constants
+
+
+const unique Globals : int;
+axiom(Globals != 0);
+const unique I8xCompleteSysButtonEventWorker : int;
+axiom(I8xCompleteSysButtonEventWorker != 0);
+const unique I8xPowerUpToD0Complete : int;
+axiom(I8xPowerUpToD0Complete != 0);
+const unique I8xReinitializeHardware : int;
+axiom(I8xReinitializeHardware != 0);
+const unique I8xSysButtonCancelRoutine : int;
+axiom(I8xSysButtonCancelRoutine != 0);
+var cancelLockStatus_0 : int;
+var cancelLockStatus_1 : int;
+var cancelLockStatus_s_1 : int;
+
+const unique hdevobj : int;
+axiom(hdevobj != 0);
+// the set of constants for 64 bit integers that Boogie doesn't parse
+const unique BOOGIE_LARGE_INT_2147483648:int;
+
+
+
+procedure DRIVER_CANCEL(a0:int, a1:int);
+
+
+
+procedure ExFreePoolWithTag(a0:int, a1:int);
+
+
+
+procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
+
+
+
+procedure IoAllocateWorkItem(a0:int) returns (ret:int);
+
+
+
+procedure IoDisconnectInterrupt(a0:int);
+
+
+
+procedure IoFreeWorkItem(a0:int);
+
+
+
+procedure IoQueueWorkItem(a0:int, a1:int, a2:int, a3:int);
+
+
+
+procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
+
+
+
+procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure PoStartNextPowerIrp(a0:int);
+
+
+
+procedure __PREfastPagedCode();
+
+
+
+procedure __storm_assert_dummy();
+
+
+
+procedure __storm_atomic_begin_dummy();
+
+
+
+procedure __storm_atomic_end_dummy();
+
+
+
+procedure memcpy(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure memset(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+
+
+
+procedure storm_nondet() returns (ret:int);
+
+
+
+procedure storm_main();
+ free requires 0 < alloc;
+ free requires 0 < tid;
+ free requires tid < tidCount;
+ requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
+ modifies tidCount, alloc, raiseException, cancelLockStatus_s_1, __storm_init, __storm_atomic, errorReached, cancelLockStatus_0, cancelLockStatus_1, __storm_thread_done_3, __storm_thread_done_2, __storm_thread_done_1, __storm_thread_done_0, tid, k, Res_0_COMPLETED, Res_1_COMPLETED, Res_KERNEL_SOURCE, Res_0_LOCK, Res_1_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_1_T.CancelRoutine__IRP, Mem_0_T.Cancel__IRP, Mem_1_T.Cancel__IRP, Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_1_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.DeviceObject__IO_STACK_LOCATION, Mem_1_T.DeviceObject__IO_STACK_LOCATION;
+
+
+
+implementation storm_main()
+{
+ var inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, $irpSp$2$92.21$storm_main: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp: int, inline$storm_getThreadID$5$tidRet: int, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$: int, inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$: int, inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$5$myVar_0: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1: int, inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, $result.IoGetCurrentIrpStackLocation$99.38$2$: int, inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$dispatch$0$$Irp$1$8.19$dispatch_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending: int, inline$storm_getThreadID$0$tidRet: int, inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver: int, inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1: int, inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$: int, inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0: int, inline$storm_getThreadID$1$tidRet: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock: int, inline$cancel$0$$Irp$1$64.17$cancel: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine: int, inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$: int, inline$cancel$0$$Irp$1$64.17$cancel_.1: int, $irp$1$91.7$storm_main: int, inline$myInitDriver$0$myNondetVar_0: int, inline$myInitDriver$0$myNondetVar_1: int, inline$storm_getThreadID$4$tidRet: int, inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$: int, inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$: int, inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$: int, inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$: int, inline$I8xSysButtonCancelRoutine$0$myVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest: int, k_old_2: int, inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$: int, inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1: int, inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine: int, inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$: int, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$: int, inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1: int, k_old_1: int, k_old_0: int, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$I8xKeyboardGetSysButtonEvent$0$myVar_0: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps: int, inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1: int, inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1: int, inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine: int, inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1: int, inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$: int, inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_1: int, inline$I8xSysButtonCancelRoutine$0$myNondetVar_0: int, inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1: int, inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$: int, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$: int, inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0: int, inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine: int, inline$I8xDeviceControl$0$myVar_0: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_IoSetCancelRoutine$1$myVar_0: int, inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1: int, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock: int, inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1: int, inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock: int, inline$storm_getThreadID$3$tidRet: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1: int, inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$: int, inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock: int, inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$: int, inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent: int, inline$storm_getThreadID$2$tidRet: int, inline$I8xDeviceControl$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation: int, inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent: int, inline$dispatch$0$$Irp$1$8.19$dispatch: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1: int, inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine: int, inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp: int, $result.storm_IoAllocateIrp$96.21$1$: int, tidCount_old: int, inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine: int, inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1: int, inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation: int, inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1: int, inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock: int, inline$I8xCompleteSysButtonIrp$0$myNondetVar_0: int, inline$myInitDriver$0$myVar_0: int, tid_old_1: int, tid_old_0: int, tid_old_2: int, inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1: int, inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$: int, inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$: int, inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1: int, inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$: int;
+
+ start#2:
+ assume Res_1_COMPLETED == Res_s_1_COMPLETED;
+ assume Res_1_LOCK == Res_s_1_LOCK;
+ assume Mem_1_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
+ assume Mem_1_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
+ assume Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
+ assume Mem_1_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
+ assume Mem_1_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
+ assume cancelLockStatus_1 == cancelLockStatus_s_1;
+ __storm_thread_done_0 := false;
+ __storm_thread_done_1 := false;
+ __storm_thread_done_2 := false;
+ __storm_thread_done_3 := false;
+ k := 0;
+ errorReached := false;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto label_3#2;
+
+ label_3#2:
+ goto label_4#2;
+
+ label_4#2:
+ goto label_5#2;
+
+ label_5#2:
+ goto anon22_Then#2, anon22_Else#2;
+
+ anon22_Else#2:
+ assume k != 0;
+ goto anon23_Then#2, anon23_Else#2;
+
+ anon23_Else#2:
+ assume k != 1;
+ goto anon2#2;
+
+ anon23_Then#2:
+ assume k == 1;
+ cancelLockStatus_1 := 0;
+ goto anon2#2;
+
+ anon22_Then#2:
+ assume k == 0;
+ cancelLockStatus_0 := 0;
+ goto anon2#2;
+
+ anon2#2:
+ call contextSwitch();
+ goto label_6#2;
+
+ label_6#2:
+ goto inline$storm_IoAllocateIrp$0$Entry#2;
+
+ inline$storm_IoAllocateIrp$0$Entry#2:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1 := 2;
+ goto inline$storm_IoAllocateIrp$0$start#2;
+
+ inline$storm_IoAllocateIrp$0$start#2:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp_.1;
+ goto inline$storm_IoAllocateIrp$0$label_3#2;
+
+ inline$storm_IoAllocateIrp$0$label_3#2:
+ goto inline$storm_IoAllocateIrp$0$label_4#2;
+
+ inline$storm_IoAllocateIrp$0$label_4#2:
+ goto inline$storm_IoAllocateIrp$0$label_5#2;
+
+ inline$storm_IoAllocateIrp$0$label_5#2:
+ call inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ := storm_nondet();
+ goto inline$storm_IoAllocateIrp$0$label_8#2;
+
+ inline$storm_IoAllocateIrp$0$label_8#2:
+ goto inline$storm_IoAllocateIrp$0$label_8_case_0#2, inline$storm_IoAllocateIrp$0$label_8_case_1#2;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_1#2:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ == 0;
+ goto inline$storm_IoAllocateIrp$0$label_10#2;
+
+ inline$storm_IoAllocateIrp$0$label_10#2:
+ __storm_atomic := true;
+ goto inline$storm_IoAllocateIrp$0$label_13#2;
+
+ inline$storm_IoAllocateIrp$0$label_13#2:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$ := __HAVOC_malloc(112);
+ goto inline$storm_IoAllocateIrp$0$label_16#2;
+
+ inline$storm_IoAllocateIrp$0$label_16#2:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$3$;
+ goto inline$storm_IoAllocateIrp$0$label_17#2;
+
+ inline$storm_IoAllocateIrp$0$label_17#2:
+ goto inline$storm_IoAllocateIrp$0$anon18_Then#2, inline$storm_IoAllocateIrp$0$anon18_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon18_Else#2:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon19_Then#2, inline$storm_IoAllocateIrp$0$anon19_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon19_Else#2:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon2#2;
+
+ inline$storm_IoAllocateIrp$0$anon19_Then#2:
+ assume k == 1;
+ Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon2#2;
+
+ inline$storm_IoAllocateIrp$0$anon18_Then#2:
+ assume k == 0;
+ Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon2#2;
+
+ inline$storm_IoAllocateIrp$0$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_18#2;
+
+ inline$storm_IoAllocateIrp$0$label_18#2:
+ goto inline$storm_IoAllocateIrp$0$anon20_Then#2, inline$storm_IoAllocateIrp$0$anon20_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon20_Else#2:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon21_Then#2, inline$storm_IoAllocateIrp$0$anon21_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon21_Else#2:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon5#2;
+
+ inline$storm_IoAllocateIrp$0$anon21_Then#2:
+ assume k == 1;
+ Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon5#2;
+
+ inline$storm_IoAllocateIrp$0$anon20_Then#2:
+ assume k == 0;
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp) := 0];
+ goto inline$storm_IoAllocateIrp$0$anon5#2;
+
+ inline$storm_IoAllocateIrp$0$anon5#2:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_19#2;
+
+ inline$storm_IoAllocateIrp$0$label_19#2:
+ goto inline$storm_IoAllocateIrp$0$anon22_Then#2, inline$storm_IoAllocateIrp$0$anon22_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon22_Else#2:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon23_Then#2, inline$storm_IoAllocateIrp$0$anon23_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon23_Else#2:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon8#2;
+
+ inline$storm_IoAllocateIrp$0$anon23_Then#2:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
+ goto inline$storm_IoAllocateIrp$0$anon8#2;
+
+ inline$storm_IoAllocateIrp$0$anon22_Then#2:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0];
+ goto inline$storm_IoAllocateIrp$0$anon8#2;
+
+ inline$storm_IoAllocateIrp$0$anon8#2:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_20#2;
+
+ inline$storm_IoAllocateIrp$0$label_20#2:
+ havoc raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon24_Then#2, inline$storm_IoAllocateIrp$0$anon24_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon24_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon10#2;
+
+ inline$storm_IoAllocateIrp$0$anon10#2:
+ assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp);
+ goto inline$storm_IoAllocateIrp$0$label_21#2;
+
+ inline$storm_IoAllocateIrp$0$label_21#2:
+ inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp, 36);
+ goto inline$storm_IoAllocateIrp$0$label_22#2;
+
+ inline$storm_IoAllocateIrp$0$label_22#2:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
+ goto inline$storm_IoAllocateIrp$0$label_25#2;
+
+ inline$storm_IoAllocateIrp$0$label_25#2:
+ inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.malloc$284.0$4$;
+ goto inline$storm_IoAllocateIrp$0$label_26#2;
+
+ inline$storm_IoAllocateIrp$0$label_26#2:
+ goto inline$storm_IoAllocateIrp$0$anon25_Then#2, inline$storm_IoAllocateIrp$0$anon25_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon25_Else#2:
+ assume k != 0;
+ goto inline$storm_IoAllocateIrp$0$anon26_Then#2, inline$storm_IoAllocateIrp$0$anon26_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon26_Else#2:
+ assume k != 1;
+ goto inline$storm_IoAllocateIrp$0$anon13#2;
+
+ inline$storm_IoAllocateIrp$0$anon26_Then#2:
+ assume k == 1;
+ Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
+ goto inline$storm_IoAllocateIrp$0$anon13#2;
+
+ inline$storm_IoAllocateIrp$0$anon25_Then#2:
+ assume k == 0;
+ Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp))))) := PLUS(inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp, 36, inline$storm_IoAllocateIrp$0$$StackSize$1$276.11$storm_IoAllocateIrp)];
+ goto inline$storm_IoAllocateIrp$0$anon13#2;
+
+ inline$storm_IoAllocateIrp$0$anon13#2:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_27#2;
+
+ inline$storm_IoAllocateIrp$0$label_27#2:
+ goto inline$IoGetNextIrpStackLocation$0$Entry#2;
+
+ inline$IoGetNextIrpStackLocation$0$Entry#2:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
+ goto inline$IoGetNextIrpStackLocation$0$start#2;
+
+ inline$IoGetNextIrpStackLocation$0$start#2:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation := inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation_.1;
+ goto inline$IoGetNextIrpStackLocation$0$label_3#2;
+
+ inline$IoGetNextIrpStackLocation$0$label_3#2:
+ goto inline$IoGetNextIrpStackLocation$0$anon3_Then#2, inline$IoGetNextIrpStackLocation$0$anon3_Else#2;
+
+ inline$IoGetNextIrpStackLocation$0$anon3_Else#2:
+ assume k != 0;
+ goto inline$IoGetNextIrpStackLocation$0$anon4_Then#2, inline$IoGetNextIrpStackLocation$0$anon4_Else#2;
+
+ inline$IoGetNextIrpStackLocation$0$anon4_Else#2:
+ assume k != 1;
+ goto inline$IoGetNextIrpStackLocation$0$anon2#2;
+
+ inline$IoGetNextIrpStackLocation$0$anon4_Then#2:
+ assume k == 1;
+ inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
+ goto inline$IoGetNextIrpStackLocation$0$anon2#2;
+
+ inline$IoGetNextIrpStackLocation$0$anon3_Then#2:
+ assume k == 0;
+ inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$23463.14$IoGetNextIrpStackLocation)))))];
+ goto inline$IoGetNextIrpStackLocation$0$anon2#2;
+
+ inline$IoGetNextIrpStackLocation$0$anon2#2:
+ call contextSwitch();
+ inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$ := MINUS_LEFT_PTR(inline$IoGetNextIrpStackLocation$0$myVar_0, 36, 1);
+ goto inline$IoGetNextIrpStackLocation$0$label_1#2;
+
+ inline$IoGetNextIrpStackLocation$0$label_1#2:
+ goto inline$IoGetNextIrpStackLocation$0$Return#2;
+
+ inline$IoGetNextIrpStackLocation$0$Return#2:
+ inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$ := inline$IoGetNextIrpStackLocation$0$$result.IoGetNextIrpStackLocation$23462.0$1$;
+ goto inline$storm_IoAllocateIrp$0$label_27$1#2;
+
+ inline$storm_IoAllocateIrp$0$label_27$1#2:
+ goto inline$storm_IoAllocateIrp$0$anon27_Then#2, inline$storm_IoAllocateIrp$0$anon27_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon27_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon15#2;
+
+ inline$storm_IoAllocateIrp$0$anon15#2:
+ goto inline$storm_IoAllocateIrp$0$label_30#2;
+
+ inline$storm_IoAllocateIrp$0$label_30#2:
+ inline$storm_IoAllocateIrp$0$$irpSp$4$281.21$storm_IoAllocateIrp := inline$storm_IoAllocateIrp$0$$result.IoGetNextIrpStackLocation$284.0$6$;
+ goto inline$storm_IoAllocateIrp$0$label_31#2;
+
+ inline$storm_IoAllocateIrp$0$label_31#2:
+ goto inline$storm_IoAllocateIrp$0$label_32#2;
+
+ inline$storm_IoAllocateIrp$0$label_32#2:
+ goto inline$storm_IoAllocateIrp$0$label_33#2;
+
+ inline$storm_IoAllocateIrp$0$label_33#2:
+ goto inline$storm_IoAllocateIrp$0$anon28_Then#2, inline$storm_IoAllocateIrp$0$anon28_Else#2;
+
+ inline$storm_IoAllocateIrp$0$anon28_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoAllocateIrp$0$anon17#2;
+
+ inline$storm_IoAllocateIrp$0$anon28_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAllocateIrp$0$anon17#2;
+
+ inline$storm_IoAllocateIrp$0$anon17#2:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_36#2;
+
+ inline$storm_IoAllocateIrp$0$anon27_Then#2:
+ assume raiseException;
+ goto inline$storm_IoAllocateIrp$0$Return#2;
+
+ inline$storm_IoAllocateIrp$0$anon24_Then#2:
+ assume raiseException;
+ goto inline$storm_IoAllocateIrp$0$Return#2;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_0#2:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$282.22$2$ != 0;
+ goto inline$storm_IoAllocateIrp$0$label_9#2;
+
+ inline$storm_IoAllocateIrp$0$label_9#2:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp := 0;
+ goto inline$storm_IoAllocateIrp$0$label_36#2;
+
+ inline$storm_IoAllocateIrp$0$label_36#2:
+ inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$280.7$storm_IoAllocateIrp;
+ goto inline$storm_IoAllocateIrp$0$label_1#2;
+
+ inline$storm_IoAllocateIrp$0$label_1#2:
+ goto inline$storm_IoAllocateIrp$0$Return#2;
+
+ inline$storm_IoAllocateIrp$0$Return#2:
+ $result.storm_IoAllocateIrp$96.21$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$275.0$1$;
+ goto label_6$1#2;
+
+ label_6$1#2:
+ goto anon24_Then#2, anon24_Else#2;
+
+ anon24_Else#2:
+ assume !raiseException;
+ goto anon4#2;
+
+ anon4#2:
+ goto label_9#2;
+
+ label_9#2:
+ $irp$1$91.7$storm_main := $result.storm_IoAllocateIrp$96.21$1$;
+ goto label_10#2;
+
+ label_10#2:
+ havoc raiseException;
+ goto anon25_Then#2, anon25_Else#2;
+
+ anon25_Else#2:
+ assume !raiseException;
+ goto anon6#2;
+
+ anon6#2:
+ assume INT_NEQ($irp$1$91.7$storm_main, 0);
+ goto label_11#2;
+
+ label_11#2:
+ goto inline$IoSetNextIrpStackLocation$0$Entry#2;
+
+ inline$IoSetNextIrpStackLocation$0$Entry#2:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1 := $irp$1$91.7$storm_main;
+ goto inline$IoSetNextIrpStackLocation$0$start#2;
+
+ inline$IoSetNextIrpStackLocation$0$start#2:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation := inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation_.1;
+ goto inline$IoSetNextIrpStackLocation$0$label_3#2;
+
+ inline$IoSetNextIrpStackLocation$0$label_3#2:
+ havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 1, 1);
+ goto inline$IoSetNextIrpStackLocation$0$label_4#2;
+
+ inline$IoSetNextIrpStackLocation$0$label_4#2:
+ goto inline$IoSetNextIrpStackLocation$0$anon6_Then#2, inline$IoSetNextIrpStackLocation$0$anon6_Else#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon6_Else#2:
+ assume k != 0;
+ goto inline$IoSetNextIrpStackLocation$0$anon7_Then#2, inline$IoSetNextIrpStackLocation$0$anon7_Else#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon7_Else#2:
+ assume k != 1;
+ goto inline$IoSetNextIrpStackLocation$0$anon2#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon7_Then#2:
+ assume k == 1;
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
+ goto inline$IoSetNextIrpStackLocation$0$anon2#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon6_Then#2:
+ assume k == 0;
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation)))))];
+ goto inline$IoSetNextIrpStackLocation$0$anon2#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon2#2:
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$0$anon8_Then#2, inline$IoSetNextIrpStackLocation$0$anon8_Else#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon8_Else#2:
+ assume k != 0;
+ goto inline$IoSetNextIrpStackLocation$0$anon9_Then#2, inline$IoSetNextIrpStackLocation$0$anon9_Else#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon9_Else#2:
+ assume k != 1;
+ goto inline$IoSetNextIrpStackLocation$0$anon5#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon9_Then#2:
+ assume k == 1;
+ Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
+ goto inline$IoSetNextIrpStackLocation$0$anon5#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon8_Then#2:
+ assume k == 0;
+ Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$23862.16$IoSetNextIrpStackLocation))))) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
+ goto inline$IoSetNextIrpStackLocation$0$anon5#2;
+
+ inline$IoSetNextIrpStackLocation$0$anon5#2:
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$0$label_1#2;
+
+ inline$IoSetNextIrpStackLocation$0$label_1#2:
+ goto inline$IoSetNextIrpStackLocation$0$Return#2;
+
+ inline$IoSetNextIrpStackLocation$0$Return#2:
+ goto label_11$1#2;
+
+ label_11$1#2:
+ goto anon26_Then#2, anon26_Else#2;
+
+ anon26_Else#2:
+ assume !raiseException;
+ goto anon8#2;
+
+ anon8#2:
+ goto label_14#2;
+
+ label_14#2:
+ goto inline$IoGetCurrentIrpStackLocation$0$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$Entry#2:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := $irp$1$91.7$storm_main;
+ goto inline$IoGetCurrentIrpStackLocation$0$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$start#2:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_3#2:
+ goto inline$IoGetCurrentIrpStackLocation$0$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$0$anon3_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon3_Else#2:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$0$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$0$anon4_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon4_Else#2:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$0$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon4_Then#2:
+ assume k == 1;
+ inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ goto inline$IoGetCurrentIrpStackLocation$0$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon3_Then#2:
+ assume k == 0;
+ inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ goto inline$IoGetCurrentIrpStackLocation$0$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$anon2#2:
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$0$myVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$0$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$0$Return#2:
+ $result.IoGetCurrentIrpStackLocation$99.38$2$ := inline$IoGetCurrentIrpStackLocation$0$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
+ goto label_14$1#2;
+
+ label_14$1#2:
+ goto anon27_Then#2, anon27_Else#2;
+
+ anon27_Else#2:
+ assume !raiseException;
+ goto anon10#2;
+
+ anon10#2:
+ goto label_17#2;
+
+ label_17#2:
+ $irpSp$2$92.21$storm_main := $result.IoGetCurrentIrpStackLocation$99.38$2$;
+ goto label_18#2;
+
+ label_18#2:
+ goto anon28_Then#2, anon28_Else#2;
+
+ anon28_Else#2:
+ assume k != 0;
+ goto anon29_Then#2, anon29_Else#2;
+
+ anon29_Else#2:
+ assume k != 1;
+ goto anon13#2;
+
+ anon29_Then#2:
+ assume k == 1;
+ Mem_1_T.DeviceObject__IO_STACK_LOCATION := Mem_1_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
+ goto anon13#2;
+
+ anon28_Then#2:
+ assume k == 0;
+ Mem_0_T.DeviceObject__IO_STACK_LOCATION := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION($irpSp$2$92.21$storm_main) := hdevobj];
+ goto anon13#2;
+
+ anon13#2:
+ call contextSwitch();
+ goto label_19#2;
+
+ label_19#2:
+ goto inline$myInitDriver$0$Entry#2;
+
+ inline$myInitDriver$0$Entry#2:
+ goto inline$myInitDriver$0$start#2;
+
+ inline$myInitDriver$0$start#2:
+ goto inline$myInitDriver$0$label_3#2;
+
+ inline$myInitDriver$0$label_3#2:
+ goto inline$myInitDriver$0$label_4#2;
+
+ inline$myInitDriver$0$label_4#2:
+ goto inline$myInitDriver$0$anon5_Then#2, inline$myInitDriver$0$anon5_Else#2;
+
+ inline$myInitDriver$0$anon5_Else#2:
+ assume k != 0;
+ goto inline$myInitDriver$0$anon6_Then#2, inline$myInitDriver$0$anon6_Else#2;
+
+ inline$myInitDriver$0$anon6_Else#2:
+ assume k != 1;
+ goto inline$myInitDriver$0$anon2#2;
+
+ inline$myInitDriver$0$anon6_Then#2:
+ assume k == 1;
+ inline$myInitDriver$0$myVar_0 := Mem_1_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
+ goto inline$myInitDriver$0$anon2#2;
+
+ inline$myInitDriver$0$anon5_Then#2:
+ assume k == 0;
+ inline$myInitDriver$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
+ goto inline$myInitDriver$0$anon2#2;
+
+ inline$myInitDriver$0$anon2#2:
+ call contextSwitch();
+ inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver := inline$myInitDriver$0$myVar_0;
+ goto inline$myInitDriver$0$label_5#2;
+
+ inline$myInitDriver$0$label_5#2:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ havoc inline$myInitDriver$0$myNondetVar_1;
+ assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
+ goto inline$storm_KeInitializeSpinLock$0$Entry#2;
+
+ inline$storm_KeInitializeSpinLock$0$Entry#2:
+ inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$myInitDriver$0$$kbExtension$2$5.27$myInitDriver);
+ goto inline$storm_KeInitializeSpinLock$0$start#2;
+
+ inline$storm_KeInitializeSpinLock$0$start#2:
+ inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock_.1;
+ goto inline$storm_KeInitializeSpinLock$0$label_3#2;
+
+ inline$storm_KeInitializeSpinLock$0$label_3#2:
+ goto inline$storm_KeInitializeSpinLock$0$anon3_Then#2, inline$storm_KeInitializeSpinLock$0$anon3_Else#2;
+
+ inline$storm_KeInitializeSpinLock$0$anon3_Else#2:
+ assume k != 0;
+ goto inline$storm_KeInitializeSpinLock$0$anon4_Then#2, inline$storm_KeInitializeSpinLock$0$anon4_Else#2;
+
+ inline$storm_KeInitializeSpinLock$0$anon4_Else#2:
+ assume k != 1;
+ goto inline$storm_KeInitializeSpinLock$0$anon2#2;
+
+ inline$storm_KeInitializeSpinLock$0$anon4_Then#2:
+ assume k == 1;
+ Res_1_LOCK := Res_1_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := 0];
+ goto inline$storm_KeInitializeSpinLock$0$anon2#2;
+
+ inline$storm_KeInitializeSpinLock$0$anon3_Then#2:
+ assume k == 0;
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock := 0];
+ goto inline$storm_KeInitializeSpinLock$0$anon2#2;
+
+ inline$storm_KeInitializeSpinLock$0$anon2#2:
+ call contextSwitch();
+ goto inline$storm_KeInitializeSpinLock$0$label_1#2;
+
+ inline$storm_KeInitializeSpinLock$0$label_1#2:
+ goto inline$storm_KeInitializeSpinLock$0$Return#2;
+
+ inline$storm_KeInitializeSpinLock$0$Return#2:
+ goto inline$myInitDriver$0$label_5$1#2;
+
+ inline$myInitDriver$0$label_5$1#2:
+ goto inline$myInitDriver$0$anon7_Then#2, inline$myInitDriver$0$anon7_Else#2;
+
+ inline$myInitDriver$0$anon7_Else#2:
+ assume !raiseException;
+ goto inline$myInitDriver$0$anon4#2;
+
+ inline$myInitDriver$0$anon4#2:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ goto inline$myInitDriver$0$label_1#2;
+
+ inline$myInitDriver$0$label_1#2:
+ goto inline$myInitDriver$0$Return#2;
+
+ inline$myInitDriver$0$anon7_Then#2:
+ assume raiseException;
+ goto inline$myInitDriver$0$Return#2;
+
+ inline$myInitDriver$0$Return#2:
+ goto label_19$1#2;
+
+ label_19$1#2:
+ goto anon30_Then#2, anon30_Else#2;
+
+ anon30_Else#2:
+ assume !raiseException;
+ goto anon15#2;
+
+ anon15#2:
+ goto label_22#2;
+
+ label_22#2:
+ goto label_23#2;
+
+ label_23#2:
+ k_old_0 := k;
+ tid_old_0 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$dispatch$0$Entry#2;
+
+ inline$dispatch$0$Entry#2:
+ inline$dispatch$0$$Irp$1$8.19$dispatch_.1 := $irp$1$91.7$storm_main;
+ goto inline$dispatch$0$start#2;
+
+ inline$dispatch$0$start#2:
+ inline$dispatch$0$$Irp$1$8.19$dispatch := inline$dispatch$0$$Irp$1$8.19$dispatch_.1;
+ goto inline$dispatch$0$label_3#2;
+
+ inline$dispatch$0$label_3#2:
+ goto inline$dispatch$0$label_4#2;
+
+ inline$dispatch$0$label_4#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_3#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$1$anon3_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon3_Else#2:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$1$anon4_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon4_Else#2:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon4_Then#2:
+ assume k == 1;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon3_Then#2:
+ assume k == 0;
+ goto inline$IoGetCurrentIrpStackLocation$1$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$anon2#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$1$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$1$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$1$Return#2:
+ goto inline$dispatch$0$label_4$1#2;
+
+ inline$dispatch$0$label_4$1#2:
+ goto inline$dispatch$0$anon4_Then#2, inline$dispatch$0$anon4_Else#2;
+
+ inline$dispatch$0$anon4_Else#2:
+ assume !raiseException;
+ goto inline$dispatch$0$anon1#2;
+
+ inline$dispatch$0$anon1#2:
+ goto inline$dispatch$0$label_7#2;
+
+ inline$dispatch$0$label_7#2:
+ goto inline$dispatch$0$label_8#2;
+
+ inline$dispatch$0$label_8#2:
+ goto inline$I8xDeviceControl$0$Entry#2;
+
+ inline$I8xDeviceControl$0$Entry#2:
+ inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1 := hdevobj;
+ inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1 := inline$dispatch$0$$Irp$1$8.19$dispatch;
+ goto inline$I8xDeviceControl$0$start#2;
+
+ inline$I8xDeviceControl$0$start#2:
+ inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl := inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl_.1;
+ inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl_.1;
+ goto inline$I8xDeviceControl$0$label_3#2;
+
+ inline$I8xDeviceControl$0$label_3#2:
+ goto inline$I8xDeviceControl$0$label_4#2;
+
+ inline$I8xDeviceControl$0$label_4#2:
+ goto inline$I8xDeviceControl$0$label_5#2;
+
+ inline$I8xDeviceControl$0$label_5#2:
+ goto inline$I8xDeviceControl$0$label_6#2;
+
+ inline$I8xDeviceControl$0$label_6#2:
+ goto inline$I8xDeviceControl$0$label_7#2;
+
+ inline$I8xDeviceControl$0$label_7#2:
+ call __PREfastPagedCode();
+ goto inline$I8xDeviceControl$0$anon13_Then#2, inline$I8xDeviceControl$0$anon13_Else#2;
+
+ inline$I8xDeviceControl$0$anon13_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon1#2;
+
+ inline$I8xDeviceControl$0$anon1#2:
+ goto inline$I8xDeviceControl$0$label_10#2;
+
+ inline$I8xDeviceControl$0$label_10#2:
+ goto inline$I8xDeviceControl$0$anon14_Then#2, inline$I8xDeviceControl$0$anon14_Else#2;
+
+ inline$I8xDeviceControl$0$anon14_Else#2:
+ assume k != 0;
+ goto inline$I8xDeviceControl$0$anon15_Then#2, inline$I8xDeviceControl$0$anon15_Else#2;
+
+ inline$I8xDeviceControl$0$anon15_Else#2:
+ assume k != 1;
+ goto inline$I8xDeviceControl$0$anon4#2;
+
+ inline$I8xDeviceControl$0$anon15_Then#2:
+ assume k == 1;
+ inline$I8xDeviceControl$0$myVar_0 := Mem_1_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl)];
+ goto inline$I8xDeviceControl$0$anon4#2;
+
+ inline$I8xDeviceControl$0$anon14_Then#2:
+ assume k == 0;
+ inline$I8xDeviceControl$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xDeviceControl$0$$DeviceObject$1$464.22$I8xDeviceControl)];
+ goto inline$I8xDeviceControl$0$anon4#2;
+
+ inline$I8xDeviceControl$0$anon4#2:
+ call contextSwitch();
+ inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl := inline$I8xDeviceControl$0$myVar_0;
+ goto inline$I8xDeviceControl$0$label_11#2;
+
+ inline$I8xDeviceControl$0$label_11#2:
+ goto inline$I8xDeviceControl$0$label_11_true#2, inline$I8xDeviceControl$0$label_11_false#2;
+
+ inline$I8xDeviceControl$0$label_11_false#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
+ goto inline$I8xDeviceControl$0$label_12#2;
+
+ inline$I8xDeviceControl$0$label_11_true#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
+ goto inline$I8xDeviceControl$0$label_13#2;
+
+ inline$I8xDeviceControl$0$label_13#2:
+ goto inline$I8xDeviceControl$0$label_13_true#2, inline$I8xDeviceControl$0$label_13_false#2;
+
+ inline$I8xDeviceControl$0$label_13_false#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 0;
+ goto inline$I8xDeviceControl$0$label_12#2;
+
+ inline$I8xDeviceControl$0$label_13_true#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 0;
+ goto inline$I8xDeviceControl$0$label_14#2;
+
+ inline$I8xDeviceControl$0$label_14#2:
+ goto inline$I8xDeviceControl$0$label_14_true#2, inline$I8xDeviceControl$0$label_14_false#2;
+
+ inline$I8xDeviceControl$0$label_14_false#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) == 0;
+ goto inline$I8xDeviceControl$0$label_15#2;
+
+ inline$I8xDeviceControl$0$label_15#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_3#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$2$anon3_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$anon3_Else#2:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$2$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$2$anon4_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$anon4_Else#2:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$2$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$anon4_Then#2:
+ assume k == 1;
+ goto inline$IoGetCurrentIrpStackLocation$2$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$anon3_Then#2:
+ assume k == 0;
+ goto inline$IoGetCurrentIrpStackLocation$2$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$anon2#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$2$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$2$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$2$Return#2:
+ goto inline$I8xDeviceControl$0$label_15$1#2;
+
+ inline$I8xDeviceControl$0$label_15$1#2:
+ goto inline$I8xDeviceControl$0$anon16_Then#2, inline$I8xDeviceControl$0$anon16_Else#2;
+
+ inline$I8xDeviceControl$0$anon16_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon6#2;
+
+ inline$I8xDeviceControl$0$anon6#2:
+ goto inline$I8xDeviceControl$0$label_18#2;
+
+ inline$I8xDeviceControl$0$label_18#2:
+ goto inline$I8xDeviceControl$0$label_19#2;
+
+ inline$I8xDeviceControl$0$label_19#2:
+ goto inline$I8xDeviceControl$0$label_19_case_0#2, inline$I8xDeviceControl$0$label_19_case_1#2, inline$I8xDeviceControl$0$label_19_case_2#2;
+
+ inline$I8xDeviceControl$0$label_19_case_2#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703684;
+ goto inline$I8xDeviceControl$0$label_24#2;
+
+ inline$I8xDeviceControl$0$label_24#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Entry#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$Entry#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$kbExtension$3$468.32$I8xDeviceControl;
+ inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$start#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$start#2:
+ call inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent := __HAVOC_malloc(1);
+ inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent_.1;
+ inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent_.1;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_3#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_3#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_4#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_4#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_5#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_5#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_6#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_6#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_7#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_7#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_8#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_8#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_9#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_9#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_10#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_10#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_3#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$4$anon3_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$anon3_Else#2:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$4$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$4$anon4_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$anon4_Else#2:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$4$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$anon4_Then#2:
+ assume k == 1;
+ goto inline$IoGetCurrentIrpStackLocation$4$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$anon3_Then#2:
+ assume k == 0;
+ goto inline$IoGetCurrentIrpStackLocation$4$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$anon2#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$4$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$4$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$4$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_10$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon34_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_13#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_13#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_14#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_14#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_14_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume !INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_15#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_23#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_23#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$0$Entry#2;
+
+ inline$storm_KeAcquireSpinLock$0$Entry#2:
+ inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
+ goto inline$storm_KeAcquireSpinLock$0$start#2;
+
+ inline$storm_KeAcquireSpinLock$0$start#2:
+ inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
+ goto inline$storm_KeAcquireSpinLock$0$label_3#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_3#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_4#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_4#2:
+ goto inline$storm_getThreadID$0$Entry#2;
+
+ inline$storm_getThreadID$0$Entry#2:
+ goto inline$storm_getThreadID$0$anon0#2;
+
+ inline$storm_getThreadID$0$anon0#2:
+ inline$storm_getThreadID$0$tidRet := tid;
+ goto inline$storm_getThreadID$0$Return#2;
+
+ inline$storm_getThreadID$0$Return#2:
+ inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$0$tidRet;
+ goto inline$storm_KeAcquireSpinLock$0$label_4$1#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_4$1#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_7#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_7#2:
+ inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$0$label_8#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_8#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_9#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_9#2:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$0$label_12#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_12#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon10_Then#2, inline$storm_KeAcquireSpinLock$0$anon10_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon10_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon1#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_13#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_13#2:
+ goto inline$storm_KeAcquireSpinLock$0$label_13_true#2, inline$storm_KeAcquireSpinLock$0$label_13_false#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_13_false#2:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$0$label_14#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_14#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$0$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_13_true#2:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$0$label_17#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_17#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon11_Then#2, inline$storm_KeAcquireSpinLock$0$anon11_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon11_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon4#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon4#2:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
+ goto inline$storm_KeAcquireSpinLock$0$label_18#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_18#2:
+ goto inline$storm_KeAcquireSpinLock$0$anon12_Then#2, inline$storm_KeAcquireSpinLock$0$anon12_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon12_Else#2:
+ assume k != 0;
+ goto inline$storm_KeAcquireSpinLock$0$anon13_Then#2, inline$storm_KeAcquireSpinLock$0$anon13_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon13_Else#2:
+ assume k != 1;
+ goto inline$storm_KeAcquireSpinLock$0$anon7#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon13_Then#2:
+ assume k == 1;
+ Res_1_LOCK := Res_1_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock];
+ goto inline$storm_KeAcquireSpinLock$0$anon7#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon12_Then#2:
+ assume k == 0;
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock];
+ goto inline$storm_KeAcquireSpinLock$0$anon7#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon7#2:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_19#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_19#2:
+ goto inline$storm_KeAcquireSpinLock$0$anon14_Then#2, inline$storm_KeAcquireSpinLock$0$anon14_Else#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon14_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$0$anon9#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon14_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$0$anon9#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon9#2:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$0$label_1#2:
+ goto inline$storm_KeAcquireSpinLock$0$Return#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon11_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$Return#2;
+
+ inline$storm_KeAcquireSpinLock$0$anon10_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$Return#2;
+
+ inline$storm_KeAcquireSpinLock$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_23$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon36_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon5#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon5#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_56#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_56#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_56_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_57#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_57#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_62#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_62#2:
+ goto inline$storm_IoSetCancelRoutine$0$Entry#2;
+
+ inline$storm_IoSetCancelRoutine$0$Entry#2:
+ inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := I8xSysButtonCancelRoutine;
+ goto inline$storm_IoSetCancelRoutine$0$start#2;
+
+ inline$storm_IoSetCancelRoutine$0$start#2:
+ inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
+ inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
+ goto inline$storm_IoSetCancelRoutine$0$label_3#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_3#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_4#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_4#2:
+ call inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ := storm_nondet();
+ goto inline$storm_IoSetCancelRoutine$0$label_7#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_7#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_7_true#2, inline$storm_IoSetCancelRoutine$0$label_7_false#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_7_false#2:
+ assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ == 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_7_true#2:
+ assume inline$storm_IoSetCancelRoutine$0$$result.storm_nondet$391.2$2$ != 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_11#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_11#2:
+ havoc raiseException;
+ goto inline$storm_IoSetCancelRoutine$0$anon11_Then#2, inline$storm_IoSetCancelRoutine$0$anon11_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon11_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoSetCancelRoutine$0$anon1#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_12#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_12#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_12_true#2, inline$storm_IoSetCancelRoutine$0$label_12_false#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_12_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_13#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_13#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCancelRoutine$0$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_12_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoSetCancelRoutine$0$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_8#2:
+ __storm_atomic := true;
+ goto inline$storm_IoSetCancelRoutine$0$label_16#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_16#2:
+ goto inline$storm_IoSetCancelRoutine$0$anon12_Then#2, inline$storm_IoSetCancelRoutine$0$anon12_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon12_Else#2:
+ assume k != 0;
+ goto inline$storm_IoSetCancelRoutine$0$anon13_Then#2, inline$storm_IoSetCancelRoutine$0$anon13_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon13_Else#2:
+ assume k != 1;
+ goto inline$storm_IoSetCancelRoutine$0$anon5#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon13_Then#2:
+ assume k == 1;
+ goto inline$storm_IoSetCancelRoutine$0$anon5#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon12_Then#2:
+ assume k == 0;
+ goto inline$storm_IoSetCancelRoutine$0$anon5#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon5#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_17#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_17#2:
+ goto inline$storm_IoSetCancelRoutine$0$anon14_Then#2, inline$storm_IoSetCancelRoutine$0$anon14_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon14_Else#2:
+ assume k != 0;
+ goto inline$storm_IoSetCancelRoutine$0$anon15_Then#2, inline$storm_IoSetCancelRoutine$0$anon15_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon15_Else#2:
+ assume k != 1;
+ goto inline$storm_IoSetCancelRoutine$0$anon8#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon15_Then#2:
+ assume k == 1;
+ Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
+ goto inline$storm_IoSetCancelRoutine$0$anon8#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon14_Then#2:
+ assume k == 0;
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$0$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$0$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
+ goto inline$storm_IoSetCancelRoutine$0$anon8#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon8#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_18#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_18#2:
+ goto inline$storm_IoSetCancelRoutine$0$anon16_Then#2, inline$storm_IoSetCancelRoutine$0$anon16_Else#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon16_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoSetCancelRoutine$0$anon10#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon16_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoSetCancelRoutine$0$anon10#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon10#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$0$label_21#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_21#2:
+ goto inline$storm_IoSetCancelRoutine$0$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$0$label_1#2:
+ goto inline$storm_IoSetCancelRoutine$0$Return#2;
+
+ inline$storm_IoSetCancelRoutine$0$anon11_Then#2:
+ assume raiseException;
+ goto inline$storm_IoSetCancelRoutine$0$Return#2;
+
+ inline$storm_IoSetCancelRoutine$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_62$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon44_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon44_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon44_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon21#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon21#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_65#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_65#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_65_false#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon47_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon47_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon47_Else#2:
+ assume k != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon48_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon48_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon48_Else#2:
+ assume k != 1;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon48_Then#2:
+ assume k == 1;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon47_Then#2:
+ assume k == 0;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon27#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon27#2:
+ call contextSwitch();
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_66#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_66#2:
+ goto inline$storm_IoMarkIrpPending$1$Entry#2;
+
+ inline$storm_IoMarkIrpPending$1$Entry#2:
+ inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoMarkIrpPending$1$start#2;
+
+ inline$storm_IoMarkIrpPending$1$start#2:
+ inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
+ goto inline$storm_IoMarkIrpPending$1$label_3#2;
+
+ inline$storm_IoMarkIrpPending$1$label_3#2:
+ call inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ := storm_nondet();
+ goto inline$storm_IoMarkIrpPending$1$label_6#2;
+
+ inline$storm_IoMarkIrpPending$1$label_6#2:
+ goto inline$storm_IoMarkIrpPending$1$label_6_true#2, inline$storm_IoMarkIrpPending$1$label_6_false#2;
+
+ inline$storm_IoMarkIrpPending$1$label_6_false#2:
+ assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ == 0;
+ goto inline$storm_IoMarkIrpPending$1$label_1#2;
+
+ inline$storm_IoMarkIrpPending$1$label_6_true#2:
+ assume inline$storm_IoMarkIrpPending$1$$result.storm_nondet$379.2$1$ != 0;
+ goto inline$storm_IoMarkIrpPending$1$label_7#2;
+
+ inline$storm_IoMarkIrpPending$1$label_7#2:
+ havoc raiseException;
+ goto inline$storm_IoMarkIrpPending$1$anon3_Then#2, inline$storm_IoMarkIrpPending$1$anon3_Else#2;
+
+ inline$storm_IoMarkIrpPending$1$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoMarkIrpPending$1$anon1#2;
+
+ inline$storm_IoMarkIrpPending$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoMarkIrpPending$1$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ call contextSwitch();
+ goto inline$storm_IoMarkIrpPending$1$label_8#2;
+
+ inline$storm_IoMarkIrpPending$1$label_8#2:
+ goto inline$storm_IoMarkIrpPending$1$label_8_true#2, inline$storm_IoMarkIrpPending$1$label_8_false#2;
+
+ inline$storm_IoMarkIrpPending$1$label_8_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoMarkIrpPending$1$label_9#2;
+
+ inline$storm_IoMarkIrpPending$1$label_9#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoMarkIrpPending$1$label_1#2;
+
+ inline$storm_IoMarkIrpPending$1$label_8_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoMarkIrpPending$1$label_1#2;
+
+ inline$storm_IoMarkIrpPending$1$label_1#2:
+ goto inline$storm_IoMarkIrpPending$1$Return#2;
+
+ inline$storm_IoMarkIrpPending$1$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoMarkIrpPending$1$Return#2;
+
+ inline$storm_IoMarkIrpPending$1$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_66$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon49_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon49_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon49_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon29#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon29#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_82#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_82#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon49_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_65_true#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon45_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon45_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon45_Else#2:
+ assume k != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon46_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon46_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon46_Else#2:
+ assume k != 1;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon24#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon46_Then#2:
+ assume k == 1;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon24#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon45_Then#2:
+ assume k == 0;
+ inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent)];
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon24#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon24#2:
+ call contextSwitch();
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_69#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_69#2:
+ goto inline$storm_IoSetCancelRoutine$1$Entry#2;
+
+ inline$storm_IoSetCancelRoutine$1$Entry#2:
+ inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1 := 0;
+ goto inline$storm_IoSetCancelRoutine$1$start#2;
+
+ inline$storm_IoSetCancelRoutine$1$start#2:
+ inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine_.1;
+ inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine_.1;
+ goto inline$storm_IoSetCancelRoutine$1$label_3#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_3#2:
+ goto inline$storm_IoSetCancelRoutine$1$label_4#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_4#2:
+ call inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ := storm_nondet();
+ goto inline$storm_IoSetCancelRoutine$1$label_7#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_7#2:
+ goto inline$storm_IoSetCancelRoutine$1$label_7_true#2, inline$storm_IoSetCancelRoutine$1$label_7_false#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_7_false#2:
+ assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ == 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_7_true#2:
+ assume inline$storm_IoSetCancelRoutine$1$$result.storm_nondet$391.2$2$ != 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_11#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_11#2:
+ havoc raiseException;
+ goto inline$storm_IoSetCancelRoutine$1$anon11_Then#2, inline$storm_IoSetCancelRoutine$1$anon11_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon11_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoSetCancelRoutine$1$anon1#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$1$label_12#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_12#2:
+ goto inline$storm_IoSetCancelRoutine$1$label_12_true#2, inline$storm_IoSetCancelRoutine$1$label_12_false#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_12_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_13#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_13#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCancelRoutine$1$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_12_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoSetCancelRoutine$1$label_8#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_8#2:
+ __storm_atomic := true;
+ goto inline$storm_IoSetCancelRoutine$1$label_16#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_16#2:
+ goto inline$storm_IoSetCancelRoutine$1$anon12_Then#2, inline$storm_IoSetCancelRoutine$1$anon12_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon12_Else#2:
+ assume k != 0;
+ goto inline$storm_IoSetCancelRoutine$1$anon13_Then#2, inline$storm_IoSetCancelRoutine$1$anon13_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon13_Else#2:
+ assume k != 1;
+ goto inline$storm_IoSetCancelRoutine$1$anon5#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon13_Then#2:
+ assume k == 1;
+ inline$storm_IoSetCancelRoutine$1$myVar_0 := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine)];
+ goto inline$storm_IoSetCancelRoutine$1$anon5#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon12_Then#2:
+ assume k == 0;
+ inline$storm_IoSetCancelRoutine$1$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine)];
+ goto inline$storm_IoSetCancelRoutine$1$anon5#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon5#2:
+ call contextSwitch();
+ inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine := inline$storm_IoSetCancelRoutine$1$myVar_0;
+ goto inline$storm_IoSetCancelRoutine$1$label_17#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_17#2:
+ goto inline$storm_IoSetCancelRoutine$1$anon14_Then#2, inline$storm_IoSetCancelRoutine$1$anon14_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon14_Else#2:
+ assume k != 0;
+ goto inline$storm_IoSetCancelRoutine$1$anon15_Then#2, inline$storm_IoSetCancelRoutine$1$anon15_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon15_Else#2:
+ assume k != 1;
+ goto inline$storm_IoSetCancelRoutine$1$anon8#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon15_Then#2:
+ assume k == 1;
+ Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
+ goto inline$storm_IoSetCancelRoutine$1$anon8#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon14_Then#2:
+ assume k == 0;
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoSetCancelRoutine$1$$pirp$1$386.10$storm_IoSetCancelRoutine) := inline$storm_IoSetCancelRoutine$1$$CancelRoutine$2$387.20$storm_IoSetCancelRoutine];
+ goto inline$storm_IoSetCancelRoutine$1$anon8#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon8#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$1$label_18#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_18#2:
+ goto inline$storm_IoSetCancelRoutine$1$anon16_Then#2, inline$storm_IoSetCancelRoutine$1$anon16_Else#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon16_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoSetCancelRoutine$1$anon10#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon16_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoSetCancelRoutine$1$anon10#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon10#2:
+ call contextSwitch();
+ goto inline$storm_IoSetCancelRoutine$1$label_21#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_21#2:
+ inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$ := inline$storm_IoSetCancelRoutine$1$$oldCancelRoutine$3$390.17$storm_IoSetCancelRoutine;
+ goto inline$storm_IoSetCancelRoutine$1$label_1#2;
+
+ inline$storm_IoSetCancelRoutine$1$label_1#2:
+ goto inline$storm_IoSetCancelRoutine$1$Return#2;
+
+ inline$storm_IoSetCancelRoutine$1$anon11_Then#2:
+ assume raiseException;
+ goto inline$storm_IoSetCancelRoutine$1$Return#2;
+
+ inline$storm_IoSetCancelRoutine$1$Return#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ := inline$storm_IoSetCancelRoutine$1$$result.storm_IoSetCancelRoutine$385.0$1$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_69$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon50_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon50_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon50_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon31#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon31#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_72#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_72#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_72_false#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_73#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_73#2:
+ goto inline$storm_IoMarkIrpPending$2$Entry#2;
+
+ inline$storm_IoMarkIrpPending$2$Entry#2:
+ inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoMarkIrpPending$2$start#2;
+
+ inline$storm_IoMarkIrpPending$2$start#2:
+ inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
+ goto inline$storm_IoMarkIrpPending$2$label_3#2;
+
+ inline$storm_IoMarkIrpPending$2$label_3#2:
+ call inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ := storm_nondet();
+ goto inline$storm_IoMarkIrpPending$2$label_6#2;
+
+ inline$storm_IoMarkIrpPending$2$label_6#2:
+ goto inline$storm_IoMarkIrpPending$2$label_6_true#2, inline$storm_IoMarkIrpPending$2$label_6_false#2;
+
+ inline$storm_IoMarkIrpPending$2$label_6_false#2:
+ assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ == 0;
+ goto inline$storm_IoMarkIrpPending$2$label_1#2;
+
+ inline$storm_IoMarkIrpPending$2$label_6_true#2:
+ assume inline$storm_IoMarkIrpPending$2$$result.storm_nondet$379.2$1$ != 0;
+ goto inline$storm_IoMarkIrpPending$2$label_7#2;
+
+ inline$storm_IoMarkIrpPending$2$label_7#2:
+ havoc raiseException;
+ goto inline$storm_IoMarkIrpPending$2$anon3_Then#2, inline$storm_IoMarkIrpPending$2$anon3_Else#2;
+
+ inline$storm_IoMarkIrpPending$2$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoMarkIrpPending$2$anon1#2;
+
+ inline$storm_IoMarkIrpPending$2$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoMarkIrpPending$2$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ call contextSwitch();
+ goto inline$storm_IoMarkIrpPending$2$label_8#2;
+
+ inline$storm_IoMarkIrpPending$2$label_8#2:
+ goto inline$storm_IoMarkIrpPending$2$label_8_true#2, inline$storm_IoMarkIrpPending$2$label_8_false#2;
+
+ inline$storm_IoMarkIrpPending$2$label_8_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoMarkIrpPending$2$label_9#2;
+
+ inline$storm_IoMarkIrpPending$2$label_9#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoMarkIrpPending$2$label_1#2;
+
+ inline$storm_IoMarkIrpPending$2$label_8_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoMarkIrpPending$2$label_1#2;
+
+ inline$storm_IoMarkIrpPending$2$label_1#2:
+ goto inline$storm_IoMarkIrpPending$2$Return#2;
+
+ inline$storm_IoMarkIrpPending$2$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoMarkIrpPending$2$Return#2;
+
+ inline$storm_IoMarkIrpPending$2$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_73$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon51_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon51_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon51_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon33#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon33#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_78#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_78#2:
+ call inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$ := storm_nondet();
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_81#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_81#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_nondet$257.41$7$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon51_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_72_true#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_IoSetCancelRoutine$237.37$6$ != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_76#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_76#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_77#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_77#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741536;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon50_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon44_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_56_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_58#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_58#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741823;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_59#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_1;
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$0$Entry#2;
+
+ inline$storm_KeReleaseSpinLock$0$Entry#2:
+ inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xKeyboardGetSysButtonEvent$0$$KeyboardExtension$1$148.29$I8xKeyboardGetSysButtonEvent);
+ goto inline$storm_KeReleaseSpinLock$0$start#2;
+
+ inline$storm_KeReleaseSpinLock$0$start#2:
+ inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
+ goto inline$storm_KeReleaseSpinLock$0$label_3#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_3#2:
+ goto inline$storm_KeReleaseSpinLock$0$label_4#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_4#2:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$0$label_7#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_7#2:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$anon8_Then#2, inline$storm_KeReleaseSpinLock$0$anon8_Else#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$anon1#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
+ assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_8#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_8#2:
+ goto inline$storm_getThreadID$1$Entry#2;
+
+ inline$storm_getThreadID$1$Entry#2:
+ goto inline$storm_getThreadID$1$anon0#2;
+
+ inline$storm_getThreadID$1$anon0#2:
+ inline$storm_getThreadID$1$tidRet := tid;
+ goto inline$storm_getThreadID$1$Return#2;
+
+ inline$storm_getThreadID$1$Return#2:
+ inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$1$tidRet;
+ goto inline$storm_KeReleaseSpinLock$0$label_8$1#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_8$1#2:
+ goto inline$storm_KeReleaseSpinLock$0$label_11#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_11#2:
+ goto inline$storm_KeReleaseSpinLock$0$label_11_true#2, inline$storm_KeReleaseSpinLock$0$label_11_false#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_11_false#2:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$0$label_12#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_12#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$0$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_11_true#2:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$0$label_15#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_15#2:
+ goto inline$storm_KeReleaseSpinLock$0$anon9_Then#2, inline$storm_KeReleaseSpinLock$0$anon9_Else#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon9_Else#2:
+ assume k != 0;
+ goto inline$storm_KeReleaseSpinLock$0$anon10_Then#2, inline$storm_KeReleaseSpinLock$0$anon10_Else#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon10_Else#2:
+ assume k != 1;
+ goto inline$storm_KeReleaseSpinLock$0$anon5#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon10_Then#2:
+ assume k == 1;
+ Res_1_LOCK := Res_1_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
+ goto inline$storm_KeReleaseSpinLock$0$anon5#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon9_Then#2:
+ assume k == 0;
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
+ goto inline$storm_KeReleaseSpinLock$0$anon5#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon5#2:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_16#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_16#2:
+ goto inline$storm_KeReleaseSpinLock$0$anon11_Then#2, inline$storm_KeReleaseSpinLock$0$anon11_Else#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon11_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$0$anon7#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon11_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$0$anon7#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon7#2:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$0$label_1#2:
+ goto inline$storm_KeReleaseSpinLock$0$Return#2;
+
+ inline$storm_KeReleaseSpinLock$0$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$Return#2;
+
+ inline$storm_KeReleaseSpinLock$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_59$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon43_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon43_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon43_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon19#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon19#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon43_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon36_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_15_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_26#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_26#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_27#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_27#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741670;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_28#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_28#2:
+ goto inline$storm_ExAllocatePoolWithTag$0$Entry#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$Entry#2:
+ inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1 := 12;
+ goto inline$storm_ExAllocatePoolWithTag$0$start#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$start#2:
+ inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag := inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag_.1;
+ goto inline$storm_ExAllocatePoolWithTag$0$label_3#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$label_3#2:
+ call inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$ := __HAVOC_malloc(inline$storm_ExAllocatePoolWithTag$0$$NumberOfBytes$2$511.12$storm_ExAllocatePoolWithTag);
+ goto inline$storm_ExAllocatePoolWithTag$0$label_6#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$label_6#2:
+ inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$ := inline$storm_ExAllocatePoolWithTag$0$$result.malloc$515.15$2$;
+ goto inline$storm_ExAllocatePoolWithTag$0$label_1#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$label_1#2:
+ goto inline$storm_ExAllocatePoolWithTag$0$Return#2;
+
+ inline$storm_ExAllocatePoolWithTag$0$Return#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$ := inline$storm_ExAllocatePoolWithTag$0$$result.storm_ExAllocatePoolWithTag$509.0$1$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_28$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon37_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon7#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon7#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_31#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_31#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent := inline$I8xKeyboardGetSysButtonEvent$0$$result.storm_ExAllocatePoolWithTag$177.12$3$;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_32#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_32#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_32_false#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_32_true#2:
+ assume inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_34#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_34#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ call inline$I8xKeyboardGetSysButtonEvent$0$$result.IoAllocateWorkItem$180.43$4$ := IoAllocateWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon38_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon9#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon9#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_37#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_37#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_38#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_38#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_38_false#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 == 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_39#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_39#2:
+ call ExFreePoolWithTag(inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent, 0);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon39_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon11#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon11#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon39_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_38_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0 != 0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_42#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_42#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_43#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_43#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_44#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_44#2:
+ goto inline$storm_IoMarkIrpPending$0$Entry#2;
+
+ inline$storm_IoMarkIrpPending$0$Entry#2:
+ inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoMarkIrpPending$0$start#2;
+
+ inline$storm_IoMarkIrpPending$0$start#2:
+ inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending := inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending_.1;
+ goto inline$storm_IoMarkIrpPending$0$label_3#2;
+
+ inline$storm_IoMarkIrpPending$0$label_3#2:
+ call inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ := storm_nondet();
+ goto inline$storm_IoMarkIrpPending$0$label_6#2;
+
+ inline$storm_IoMarkIrpPending$0$label_6#2:
+ goto inline$storm_IoMarkIrpPending$0$label_6_true#2, inline$storm_IoMarkIrpPending$0$label_6_false#2;
+
+ inline$storm_IoMarkIrpPending$0$label_6_false#2:
+ assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ == 0;
+ goto inline$storm_IoMarkIrpPending$0$label_1#2;
+
+ inline$storm_IoMarkIrpPending$0$label_6_true#2:
+ assume inline$storm_IoMarkIrpPending$0$$result.storm_nondet$379.2$1$ != 0;
+ goto inline$storm_IoMarkIrpPending$0$label_7#2;
+
+ inline$storm_IoMarkIrpPending$0$label_7#2:
+ havoc raiseException;
+ goto inline$storm_IoMarkIrpPending$0$anon3_Then#2, inline$storm_IoMarkIrpPending$0$anon3_Else#2;
+
+ inline$storm_IoMarkIrpPending$0$anon3_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoMarkIrpPending$0$anon1#2;
+
+ inline$storm_IoMarkIrpPending$0$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoMarkIrpPending$0$$pirp$1$376.14$storm_IoMarkIrpPending], 1);
+ call contextSwitch();
+ goto inline$storm_IoMarkIrpPending$0$label_8#2;
+
+ inline$storm_IoMarkIrpPending$0$label_8#2:
+ goto inline$storm_IoMarkIrpPending$0$label_8_true#2, inline$storm_IoMarkIrpPending$0$label_8_false#2;
+
+ inline$storm_IoMarkIrpPending$0$label_8_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoMarkIrpPending$0$label_9#2;
+
+ inline$storm_IoMarkIrpPending$0$label_9#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoMarkIrpPending$0$label_1#2;
+
+ inline$storm_IoMarkIrpPending$0$label_8_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoMarkIrpPending$0$label_1#2;
+
+ inline$storm_IoMarkIrpPending$0$label_1#2:
+ goto inline$storm_IoMarkIrpPending$0$Return#2;
+
+ inline$storm_IoMarkIrpPending$0$anon3_Then#2:
+ assume raiseException;
+ goto inline$storm_IoMarkIrpPending$0$Return#2;
+
+ inline$storm_IoMarkIrpPending$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_44$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon40_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon13#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon13#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_47#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_47#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ call IoQueueWorkItem(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, I8xCompleteSysButtonEventWorker, 1, inline$I8xKeyboardGetSysButtonEvent$0$$item$9$172.32$I8xKeyboardGetSysButtonEvent);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon41_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon15#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon15#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_50#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_50#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 259;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_33#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_33#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_51#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_51#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2, inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_51_false#2:
+ assume !INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_51_true#2:
+ assume INT_NEQ(inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent, 259);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_53#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_53#2:
+ goto inline$I8xCompleteSysButtonIrp$0$Entry#2;
+
+ inline$I8xCompleteSysButtonIrp$0$Entry#2:
+ inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$I8xCompleteSysButtonIrp$0$start#2;
+
+ inline$I8xCompleteSysButtonIrp$0$start#2:
+ inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp_.1;
+ goto inline$I8xCompleteSysButtonIrp$0$label_3#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_3#2:
+ havoc inline$I8xCompleteSysButtonIrp$0$myNondetVar_0;
+ goto inline$I8xCompleteSysButtonIrp$0$label_4#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_4#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_5#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_5#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_6#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_6#2:
+ goto inline$storm_IoCompleteRequest$2$Entry#2;
+
+ inline$storm_IoCompleteRequest$2$Entry#2:
+ inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xCompleteSysButtonIrp$0$$Irp$1$50.9$I8xCompleteSysButtonIrp;
+ goto inline$storm_IoCompleteRequest$2$start#2;
+
+ inline$storm_IoCompleteRequest$2$start#2:
+ inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$2$label_3#2;
+
+ inline$storm_IoCompleteRequest$2$label_3#2:
+ call inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$2$label_6#2;
+
+ inline$storm_IoCompleteRequest$2$label_6#2:
+ goto inline$storm_IoCompleteRequest$2$label_6_true#2, inline$storm_IoCompleteRequest$2$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$2$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$2$label_7#2;
+
+ inline$storm_IoCompleteRequest$2$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$2$label_8#2;
+
+ inline$storm_IoCompleteRequest$2$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$2$anon8_Then#2, inline$storm_IoCompleteRequest$2$anon8_Else#2;
+
+ inline$storm_IoCompleteRequest$2$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$2$anon4#2;
+
+ inline$storm_IoCompleteRequest$2$anon4#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$2$label_9#2;
+
+ inline$storm_IoCompleteRequest$2$label_9#2:
+ goto inline$storm_IoCompleteRequest$2$label_9_true#2, inline$storm_IoCompleteRequest$2$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$2$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$2$label_10#2;
+
+ inline$storm_IoCompleteRequest$2$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$2$label_1#2;
+
+ inline$storm_IoCompleteRequest$2$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$2$label_7#2;
+
+ inline$storm_IoCompleteRequest$2$label_7#2:
+ goto inline$storm_IoCompleteRequest$2$anon6_Then#2, inline$storm_IoCompleteRequest$2$anon6_Else#2;
+
+ inline$storm_IoCompleteRequest$2$anon6_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCompleteRequest$2$anon7_Then#2, inline$storm_IoCompleteRequest$2$anon7_Else#2;
+
+ inline$storm_IoCompleteRequest$2$anon7_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCompleteRequest$2$anon2#2;
+
+ inline$storm_IoCompleteRequest$2$anon7_Then#2:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$2$anon2#2;
+
+ inline$storm_IoCompleteRequest$2$anon6_Then#2:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$2$anon2#2;
+
+ inline$storm_IoCompleteRequest$2$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$2$label_1#2;
+
+ inline$storm_IoCompleteRequest$2$label_1#2:
+ goto inline$storm_IoCompleteRequest$2$Return#2;
+
+ inline$storm_IoCompleteRequest$2$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$2$Return#2;
+
+ inline$storm_IoCompleteRequest$2$Return#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_6$1#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_6$1#2:
+ goto inline$I8xCompleteSysButtonIrp$0$anon2_Then#2, inline$I8xCompleteSysButtonIrp$0$anon2_Else#2;
+
+ inline$I8xCompleteSysButtonIrp$0$anon2_Else#2:
+ assume !raiseException;
+ goto inline$I8xCompleteSysButtonIrp$0$anon1#2;
+
+ inline$I8xCompleteSysButtonIrp$0$anon1#2:
+ goto inline$I8xCompleteSysButtonIrp$0$label_1#2;
+
+ inline$I8xCompleteSysButtonIrp$0$label_1#2:
+ goto inline$I8xCompleteSysButtonIrp$0$Return#2;
+
+ inline$I8xCompleteSysButtonIrp$0$anon2_Then#2:
+ assume raiseException;
+ goto inline$I8xCompleteSysButtonIrp$0$Return#2;
+
+ inline$I8xCompleteSysButtonIrp$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_53$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon42_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon42_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon42_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon17#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon17#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_52#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_52#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon42_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon41_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon40_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon38_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon37_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_14_true#2:
+ havoc inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0;
+ assume INT_ULT(inline$I8xKeyboardGetSysButtonEvent$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_16#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_16#2:
+ inline$I8xKeyboardGetSysButtonEvent$0$$status$6$154.24$I8xKeyboardGetSysButtonEvent := 0 - 1073741306;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_17#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_17#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_18#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_18#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_19#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_19#2:
+ goto inline$storm_IoCompleteRequest$1$Entry#2;
+
+ inline$storm_IoCompleteRequest$1$Entry#2:
+ inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonEvent$0$$Irp$2$149.9$I8xKeyboardGetSysButtonEvent;
+ goto inline$storm_IoCompleteRequest$1$start#2;
+
+ inline$storm_IoCompleteRequest$1$start#2:
+ inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$1$label_3#2;
+
+ inline$storm_IoCompleteRequest$1$label_3#2:
+ call inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$1$label_6#2;
+
+ inline$storm_IoCompleteRequest$1$label_6#2:
+ goto inline$storm_IoCompleteRequest$1$label_6_true#2, inline$storm_IoCompleteRequest$1$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$1$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$1$label_7#2;
+
+ inline$storm_IoCompleteRequest$1$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$1$label_8#2;
+
+ inline$storm_IoCompleteRequest$1$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$1$anon8_Then#2, inline$storm_IoCompleteRequest$1$anon8_Else#2;
+
+ inline$storm_IoCompleteRequest$1$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$1$anon4#2;
+
+ inline$storm_IoCompleteRequest$1$anon4#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$1$label_9#2;
+
+ inline$storm_IoCompleteRequest$1$label_9#2:
+ goto inline$storm_IoCompleteRequest$1$label_9_true#2, inline$storm_IoCompleteRequest$1$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$1$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$1$label_10#2;
+
+ inline$storm_IoCompleteRequest$1$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$1$label_1#2;
+
+ inline$storm_IoCompleteRequest$1$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$1$label_7#2;
+
+ inline$storm_IoCompleteRequest$1$label_7#2:
+ goto inline$storm_IoCompleteRequest$1$anon6_Then#2, inline$storm_IoCompleteRequest$1$anon6_Else#2;
+
+ inline$storm_IoCompleteRequest$1$anon6_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCompleteRequest$1$anon7_Then#2, inline$storm_IoCompleteRequest$1$anon7_Else#2;
+
+ inline$storm_IoCompleteRequest$1$anon7_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCompleteRequest$1$anon2#2;
+
+ inline$storm_IoCompleteRequest$1$anon7_Then#2:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$1$anon2#2;
+
+ inline$storm_IoCompleteRequest$1$anon6_Then#2:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$1$anon2#2;
+
+ inline$storm_IoCompleteRequest$1$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$1$label_1#2;
+
+ inline$storm_IoCompleteRequest$1$label_1#2:
+ goto inline$storm_IoCompleteRequest$1$Return#2;
+
+ inline$storm_IoCompleteRequest$1$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$1$Return#2;
+
+ inline$storm_IoCompleteRequest$1$Return#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_19$1#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2, inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon35_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$anon3#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon3#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_22#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_22#2:
+ goto inline$I8xKeyboardGetSysButtonEvent$0$label_1#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$label_1#2:
+ call __HAVOC_free(inline$I8xKeyboardGetSysButtonEvent$0$$irql$8$156.24$I8xKeyboardGetSysButtonEvent);
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon35_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$anon34_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonEvent$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonEvent$0$Return#2:
+ goto inline$I8xDeviceControl$0$label_24$1#2;
+
+ inline$I8xDeviceControl$0$label_24$1#2:
+ goto inline$I8xDeviceControl$0$anon18_Then#2, inline$I8xDeviceControl$0$anon18_Else#2;
+
+ inline$I8xDeviceControl$0$anon18_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon10#2;
+
+ inline$I8xDeviceControl$0$anon10#2:
+ goto inline$I8xDeviceControl$0$label_27#2;
+
+ inline$I8xDeviceControl$0$label_27#2:
+ goto inline$I8xDeviceControl$0$label_1#2;
+
+ inline$I8xDeviceControl$0$anon18_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$label_19_case_1#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 == 2703680;
+ goto inline$I8xDeviceControl$0$label_21#2;
+
+ inline$I8xDeviceControl$0$label_21#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Entry#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$Entry#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$start#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$start#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps_.1;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_3#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_3#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_4#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_4#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_5#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_5#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_6#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_6#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_7#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_7#2:
+ call __PREfastPagedCode();
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon6_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_10#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_10#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$Entry#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$start#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_3#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$3$anon3_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$anon3_Else#2:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$3$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$3$anon4_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$anon4_Else#2:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$3$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$anon4_Then#2:
+ assume k == 1;
+ goto inline$IoGetCurrentIrpStackLocation$3$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$anon3_Then#2:
+ assume k == 0;
+ goto inline$IoGetCurrentIrpStackLocation$3$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$anon2#2:
+ call contextSwitch();
+ goto inline$IoGetCurrentIrpStackLocation$3$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$3$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$3$Return#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_10$1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon7_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon3#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon3#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_13#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_13#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_14#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_14#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_15#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_15#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_15_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume !INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_16#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_16#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_24#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_24#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_25#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_25#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_25_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) == 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_25_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 1) != 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_27#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_27#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 1);
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_26#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_26#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_26_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) == 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_26_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 2) != 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_29#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_29#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, 2);
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_28#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_28#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2, inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_28_false#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) == 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_28_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4) != 0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_31#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_31#2:
+ inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0 := BIT_BOR(inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps, BOOGIE_LARGE_INT_2147483648);
+ inline$I8xKeyboardGetSysButtonCaps$0$$caps$5$75.24$I8xKeyboardGetSysButtonCaps := inline$I8xKeyboardGetSysButtonCaps$0$tempBoogie0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_30#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_30#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_32#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_32#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_15_true#2:
+ havoc inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0;
+ assume INT_ULT(inline$I8xKeyboardGetSysButtonCaps$0$myNondetVar_0, 4);
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_17#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_17#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_18#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_18#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_19#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_19#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_20#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_20#2:
+ goto inline$storm_IoCompleteRequest$0$Entry#2;
+
+ inline$storm_IoCompleteRequest$0$Entry#2:
+ inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xKeyboardGetSysButtonCaps$0$$Irp$2$70.9$I8xKeyboardGetSysButtonCaps;
+ goto inline$storm_IoCompleteRequest$0$start#2;
+
+ inline$storm_IoCompleteRequest$0$start#2:
+ inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$0$label_3#2;
+
+ inline$storm_IoCompleteRequest$0$label_3#2:
+ call inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$0$label_6#2;
+
+ inline$storm_IoCompleteRequest$0$label_6#2:
+ goto inline$storm_IoCompleteRequest$0$label_6_true#2, inline$storm_IoCompleteRequest$0$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$0$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#2;
+
+ inline$storm_IoCompleteRequest$0$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$0$label_8#2;
+
+ inline$storm_IoCompleteRequest$0$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$0$anon8_Then#2, inline$storm_IoCompleteRequest$0$anon8_Else#2;
+
+ inline$storm_IoCompleteRequest$0$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$0$anon4#2;
+
+ inline$storm_IoCompleteRequest$0$anon4#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_9#2;
+
+ inline$storm_IoCompleteRequest$0$label_9#2:
+ goto inline$storm_IoCompleteRequest$0$label_9_true#2, inline$storm_IoCompleteRequest$0$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$0$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$0$label_10#2;
+
+ inline$storm_IoCompleteRequest$0$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$0$label_1#2;
+
+ inline$storm_IoCompleteRequest$0$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#2;
+
+ inline$storm_IoCompleteRequest$0$label_7#2:
+ goto inline$storm_IoCompleteRequest$0$anon6_Then#2, inline$storm_IoCompleteRequest$0$anon6_Else#2;
+
+ inline$storm_IoCompleteRequest$0$anon6_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCompleteRequest$0$anon7_Then#2, inline$storm_IoCompleteRequest$0$anon7_Else#2;
+
+ inline$storm_IoCompleteRequest$0$anon7_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCompleteRequest$0$anon2#2;
+
+ inline$storm_IoCompleteRequest$0$anon7_Then#2:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$0$anon2#2;
+
+ inline$storm_IoCompleteRequest$0$anon6_Then#2:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$0$anon2#2;
+
+ inline$storm_IoCompleteRequest$0$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_1#2;
+
+ inline$storm_IoCompleteRequest$0$label_1#2:
+ goto inline$storm_IoCompleteRequest$0$Return#2;
+
+ inline$storm_IoCompleteRequest$0$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$0$Return#2;
+
+ inline$storm_IoCompleteRequest$0$Return#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_20$1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2, inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon8_Else#2:
+ assume !raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$anon5#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon5#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_23#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_23#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$label_1#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$label_1#2:
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon8_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon7_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$anon6_Then#2:
+ assume raiseException;
+ goto inline$I8xKeyboardGetSysButtonCaps$0$Return#2;
+
+ inline$I8xKeyboardGetSysButtonCaps$0$Return#2:
+ goto inline$I8xDeviceControl$0$label_21$1#2;
+
+ inline$I8xDeviceControl$0$label_21$1#2:
+ goto inline$I8xDeviceControl$0$anon17_Then#2, inline$I8xDeviceControl$0$anon17_Else#2;
+
+ inline$I8xDeviceControl$0$anon17_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon8#2;
+
+ inline$I8xDeviceControl$0$anon8#2:
+ goto inline$I8xDeviceControl$0$label_28#2;
+
+ inline$I8xDeviceControl$0$label_28#2:
+ goto inline$I8xDeviceControl$0$label_1#2;
+
+ inline$I8xDeviceControl$0$anon17_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$label_19_case_0#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703680;
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume inline$I8xDeviceControl$0$myNondetVar_0 != 2703684;
+ goto inline$I8xDeviceControl$0$label_20#2;
+
+ inline$I8xDeviceControl$0$label_20#2:
+ goto inline$I8xDeviceControl$0$label_29#2;
+
+ inline$I8xDeviceControl$0$anon16_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$label_14_true#2:
+ havoc inline$I8xDeviceControl$0$myNondetVar_0;
+ assume BIT_BAND(inline$I8xDeviceControl$0$myNondetVar_0, 8) != 0;
+ goto inline$I8xDeviceControl$0$label_12#2;
+
+ inline$I8xDeviceControl$0$label_12#2:
+ goto inline$I8xDeviceControl$0$label_29#2;
+
+ inline$I8xDeviceControl$0$label_29#2:
+ goto inline$I8xDeviceControl$0$label_30#2;
+
+ inline$I8xDeviceControl$0$label_30#2:
+ goto inline$storm_IoCompleteRequest$3$Entry#2;
+
+ inline$storm_IoCompleteRequest$3$Entry#2:
+ inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xDeviceControl$0$$Irp$2$465.12$I8xDeviceControl;
+ goto inline$storm_IoCompleteRequest$3$start#2;
+
+ inline$storm_IoCompleteRequest$3$start#2:
+ inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$3$label_3#2;
+
+ inline$storm_IoCompleteRequest$3$label_3#2:
+ call inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$3$label_6#2;
+
+ inline$storm_IoCompleteRequest$3$label_6#2:
+ goto inline$storm_IoCompleteRequest$3$label_6_true#2, inline$storm_IoCompleteRequest$3$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$3$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$3$label_7#2;
+
+ inline$storm_IoCompleteRequest$3$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$3$label_8#2;
+
+ inline$storm_IoCompleteRequest$3$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$3$anon8_Then#2, inline$storm_IoCompleteRequest$3$anon8_Else#2;
+
+ inline$storm_IoCompleteRequest$3$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$3$anon4#2;
+
+ inline$storm_IoCompleteRequest$3$anon4#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$3$label_9#2;
+
+ inline$storm_IoCompleteRequest$3$label_9#2:
+ goto inline$storm_IoCompleteRequest$3$label_9_true#2, inline$storm_IoCompleteRequest$3$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$3$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$3$label_10#2;
+
+ inline$storm_IoCompleteRequest$3$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$3$label_1#2;
+
+ inline$storm_IoCompleteRequest$3$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$3$label_7#2;
+
+ inline$storm_IoCompleteRequest$3$label_7#2:
+ goto inline$storm_IoCompleteRequest$3$anon6_Then#2, inline$storm_IoCompleteRequest$3$anon6_Else#2;
+
+ inline$storm_IoCompleteRequest$3$anon6_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCompleteRequest$3$anon7_Then#2, inline$storm_IoCompleteRequest$3$anon7_Else#2;
+
+ inline$storm_IoCompleteRequest$3$anon7_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCompleteRequest$3$anon2#2;
+
+ inline$storm_IoCompleteRequest$3$anon7_Then#2:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$3$anon2#2;
+
+ inline$storm_IoCompleteRequest$3$anon6_Then#2:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$3$anon2#2;
+
+ inline$storm_IoCompleteRequest$3$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$3$label_1#2;
+
+ inline$storm_IoCompleteRequest$3$label_1#2:
+ goto inline$storm_IoCompleteRequest$3$Return#2;
+
+ inline$storm_IoCompleteRequest$3$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$3$Return#2;
+
+ inline$storm_IoCompleteRequest$3$Return#2:
+ goto inline$I8xDeviceControl$0$label_30$1#2;
+
+ inline$I8xDeviceControl$0$label_30$1#2:
+ goto inline$I8xDeviceControl$0$anon19_Then#2, inline$I8xDeviceControl$0$anon19_Else#2;
+
+ inline$I8xDeviceControl$0$anon19_Else#2:
+ assume !raiseException;
+ goto inline$I8xDeviceControl$0$anon12#2;
+
+ inline$I8xDeviceControl$0$anon12#2:
+ goto inline$I8xDeviceControl$0$label_33#2;
+
+ inline$I8xDeviceControl$0$label_33#2:
+ goto inline$I8xDeviceControl$0$label_1#2;
+
+ inline$I8xDeviceControl$0$label_1#2:
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$anon19_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$anon13_Then#2:
+ assume raiseException;
+ goto inline$I8xDeviceControl$0$Return#2;
+
+ inline$I8xDeviceControl$0$Return#2:
+ goto inline$dispatch$0$label_8$1#2;
+
+ inline$dispatch$0$label_8$1#2:
+ goto inline$dispatch$0$anon5_Then#2, inline$dispatch$0$anon5_Else#2;
+
+ inline$dispatch$0$anon5_Else#2:
+ assume !raiseException;
+ goto inline$dispatch$0$anon3#2;
+
+ inline$dispatch$0$anon3#2:
+ goto inline$dispatch$0$label_11#2;
+
+ inline$dispatch$0$label_11#2:
+ goto inline$dispatch$0$label_1#2;
+
+ inline$dispatch$0$label_1#2:
+ goto inline$dispatch$0$Return#2;
+
+ inline$dispatch$0$anon5_Then#2:
+ assume raiseException;
+ goto inline$dispatch$0$Return#2;
+
+ inline$dispatch$0$anon4_Then#2:
+ assume raiseException;
+ goto inline$dispatch$0$Return#2;
+
+ inline$dispatch$0$Return#2:
+ goto label_23$1#2;
+
+ label_23$1#2:
+ goto anon31_Then#2, anon31_Else#2;
+
+ anon31_Else#2:
+ assume !(errorReached || !raiseException);
+ goto anon17#2;
+
+ anon31_Then#2:
+ assume errorReached || !raiseException;
+ __storm_thread_done_1 := true;
+ goto anon17#2;
+
+ anon17#2:
+ k := k_old_0;
+ tid := tid_old_0;
+ goto label_26#2;
+
+ label_26#2:
+ goto label_27#2;
+
+ label_27#2:
+ k_old_1 := k;
+ tid_old_1 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$cancel$0$Entry#2;
+
+ inline$cancel$0$Entry#2:
+ inline$cancel$0$$Irp$1$64.17$cancel_.1 := $irp$1$91.7$storm_main;
+ goto inline$cancel$0$start#2;
+
+ inline$cancel$0$start#2:
+ inline$cancel$0$$Irp$1$64.17$cancel := inline$cancel$0$$Irp$1$64.17$cancel_.1;
+ goto inline$cancel$0$label_3#2;
+
+ inline$cancel$0$label_3#2:
+ goto inline$storm_IoCancelIrp$0$Entry#2;
+
+ inline$storm_IoCancelIrp$0$Entry#2:
+ inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1 := inline$cancel$0$$Irp$1$64.17$cancel;
+ goto inline$storm_IoCancelIrp$0$start#2;
+
+ inline$storm_IoCancelIrp$0$start#2:
+ inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp_.1;
+ goto inline$storm_IoCancelIrp$0$label_3#2;
+
+ inline$storm_IoCancelIrp$0$label_3#2:
+ goto inline$storm_IoCancelIrp$0$label_4#2;
+
+ inline$storm_IoCancelIrp$0$label_4#2:
+ goto inline$storm_IoCancelIrp$0$anon23_Then#2, inline$storm_IoCancelIrp$0$anon23_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon23_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCancelIrp$0$anon24_Then#2, inline$storm_IoCancelIrp$0$anon24_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon24_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCancelIrp$0$anon2#2;
+
+ inline$storm_IoCancelIrp$0$anon24_Then#2:
+ assume k == 1;
+ Mem_1_T.Cancel__IRP := Mem_1_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
+ goto inline$storm_IoCancelIrp$0$anon2#2;
+
+ inline$storm_IoCancelIrp$0$anon23_Then#2:
+ assume k == 0;
+ Mem_0_T.Cancel__IRP := Mem_0_T.Cancel__IRP[Cancel__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 1];
+ goto inline$storm_IoCancelIrp$0$anon2#2;
+
+ inline$storm_IoCancelIrp$0$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_5#2;
+
+ inline$storm_IoCancelIrp$0$label_5#2:
+ __storm_atomic := true;
+ goto inline$storm_IoCancelIrp$0$label_8#2;
+
+ inline$storm_IoCancelIrp$0$label_8#2:
+ goto inline$storm_IoCancelIrp$0$anon25_Then#2, inline$storm_IoCancelIrp$0$anon25_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon25_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCancelIrp$0$anon26_Then#2, inline$storm_IoCancelIrp$0$anon26_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon26_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCancelIrp$0$anon5#2;
+
+ inline$storm_IoCancelIrp$0$anon26_Then#2:
+ assume k == 1;
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
+ goto inline$storm_IoCancelIrp$0$anon5#2;
+
+ inline$storm_IoCancelIrp$0$anon25_Then#2:
+ assume k == 0;
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp)];
+ goto inline$storm_IoCancelIrp$0$anon5#2;
+
+ inline$storm_IoCancelIrp$0$anon5#2:
+ call contextSwitch();
+ inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$myVar_0;
+ goto inline$storm_IoCancelIrp$0$label_9#2;
+
+ inline$storm_IoCancelIrp$0$label_9#2:
+ goto inline$storm_IoCancelIrp$0$anon27_Then#2, inline$storm_IoCancelIrp$0$anon27_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon27_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCancelIrp$0$anon28_Then#2, inline$storm_IoCancelIrp$0$anon28_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon28_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCancelIrp$0$anon8#2;
+
+ inline$storm_IoCancelIrp$0$anon28_Then#2:
+ assume k == 1;
+ Mem_1_T.CancelRoutine__IRP := Mem_1_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
+ goto inline$storm_IoCancelIrp$0$anon8#2;
+
+ inline$storm_IoCancelIrp$0$anon27_Then#2:
+ assume k == 0;
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp) := 0];
+ goto inline$storm_IoCancelIrp$0$anon8#2;
+
+ inline$storm_IoCancelIrp$0$anon8#2:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_10#2;
+
+ inline$storm_IoCancelIrp$0$label_10#2:
+ goto inline$storm_IoCancelIrp$0$anon29_Then#2, inline$storm_IoCancelIrp$0$anon29_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon29_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoCancelIrp$0$anon10#2;
+
+ inline$storm_IoCancelIrp$0$anon29_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoCancelIrp$0$anon10#2;
+
+ inline$storm_IoCancelIrp$0$anon10#2:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_13#2;
+
+ inline$storm_IoCancelIrp$0$label_13#2:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
+ assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
+ goto inline$storm_IoAcquireCancelSpinLock$0$Entry#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Entry#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$start#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$start#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_3#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_3#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_4#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_4#2:
+ goto inline$storm_getThreadID$2$Entry#2;
+
+ inline$storm_getThreadID$2$Entry#2:
+ goto inline$storm_getThreadID$2$anon0#2;
+
+ inline$storm_getThreadID$2$anon0#2:
+ inline$storm_getThreadID$2$tidRet := tid;
+ goto inline$storm_getThreadID$2$Return#2;
+
+ inline$storm_getThreadID$2$Return#2:
+ inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$ := inline$storm_getThreadID$2$tidRet;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_4$1#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_7#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_7#2:
+ inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock := inline$storm_IoAcquireCancelSpinLock$0$$result.storm_getThreadID$185.29$1$;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_8#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_8#2:
+ __storm_atomic := true;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_11#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2, inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11_false#2:
+ assume k == 0 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
+ assume k == 1 ==> !INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_12#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_12#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2:
+ assume k == 0 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_0);
+ assume k == 1 ==> INT_NEQ(inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock, cancelLockStatus_1);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_15#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_15#2:
+ havoc raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon2#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon2#2:
+ assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
+ assume k == 1 ==> INT_EQ(cancelLockStatus_1, 0);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_16#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_16#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon9_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon9_Else#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon9_Else#2:
+ assume k != 0;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon10_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon10_Else#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon10_Else#2:
+ assume k != 1;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon5#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon10_Then#2:
+ assume k == 1;
+ cancelLockStatus_1 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon5#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon9_Then#2:
+ assume k == 0;
+ cancelLockStatus_0 := inline$storm_IoAcquireCancelSpinLock$0$$tid$2$185.6$storm_IoAcquireCancelSpinLock;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon5#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon5#2:
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_17#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_17#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon11_Then#2, inline$storm_IoAcquireCancelSpinLock$0$anon11_Else#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon11_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon7#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon11_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon7#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon7#2:
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_1#2:
+ goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$Return#2;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Return#2:
+ goto inline$storm_IoCancelIrp$0$label_13$1#2;
+
+ inline$storm_IoCancelIrp$0$label_13$1#2:
+ goto inline$storm_IoCancelIrp$0$anon30_Then#2, inline$storm_IoCancelIrp$0$anon30_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon30_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon12#2;
+
+ inline$storm_IoCancelIrp$0$anon12#2:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ goto inline$storm_IoCancelIrp$0$label_16#2;
+
+ inline$storm_IoCancelIrp$0$label_16#2:
+ goto inline$storm_IoCancelIrp$0$label_16_true#2, inline$storm_IoCancelIrp$0$label_16_false#2;
+
+ inline$storm_IoCancelIrp$0$label_16_false#2:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == 0;
+ goto inline$storm_IoCancelIrp$0$label_17#2;
+
+ inline$storm_IoCancelIrp$0$label_17#2:
+ goto inline$storm_IoCancelIrp$0$label_1#2;
+
+ inline$storm_IoCancelIrp$0$label_16_true#2:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp != 0;
+ goto inline$storm_IoCancelIrp$0$label_18#2;
+
+ inline$storm_IoCancelIrp$0$label_18#2:
+ goto inline$storm_IoCancelIrp$0$label_19#2;
+
+ inline$storm_IoCancelIrp$0$label_19#2:
+ call inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ := storm_nondet();
+ goto inline$storm_IoCancelIrp$0$label_22#2;
+
+ inline$storm_IoCancelIrp$0$label_22#2:
+ goto inline$storm_IoCancelIrp$0$label_22_true#2, inline$storm_IoCancelIrp$0$label_22_false#2;
+
+ inline$storm_IoCancelIrp$0$label_22_false#2:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ == 0;
+ goto inline$storm_IoCancelIrp$0$label_23#2;
+
+ inline$storm_IoCancelIrp$0$label_22_true#2:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$365.4$2$ != 0;
+ goto inline$storm_IoCancelIrp$0$label_26#2;
+
+ inline$storm_IoCancelIrp$0$label_26#2:
+ havoc raiseException;
+ goto inline$storm_IoCancelIrp$0$anon32_Then#2, inline$storm_IoCancelIrp$0$anon32_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon32_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon16#2;
+
+ inline$storm_IoCancelIrp$0$anon16#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp], 1);
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_27#2;
+
+ inline$storm_IoCancelIrp$0$label_27#2:
+ goto inline$storm_IoCancelIrp$0$label_27_true#2, inline$storm_IoCancelIrp$0$label_27_false#2;
+
+ inline$storm_IoCancelIrp$0$label_27_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCancelIrp$0$label_28#2;
+
+ inline$storm_IoCancelIrp$0$label_28#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCancelIrp$0$label_1#2;
+
+ inline$storm_IoCancelIrp$0$label_27_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCancelIrp$0$label_23#2;
+
+ inline$storm_IoCancelIrp$0$label_23#2:
+ goto inline$IoGetCurrentIrpStackLocation$5$Entry#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$Entry#2:
+ inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
+ goto inline$IoGetCurrentIrpStackLocation$5$start#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$start#2:
+ inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation := inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation_.1;
+ goto inline$IoGetCurrentIrpStackLocation$5$label_3#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_3#2:
+ goto inline$IoGetCurrentIrpStackLocation$5$anon3_Then#2, inline$IoGetCurrentIrpStackLocation$5$anon3_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$anon3_Else#2:
+ assume k != 0;
+ goto inline$IoGetCurrentIrpStackLocation$5$anon4_Then#2, inline$IoGetCurrentIrpStackLocation$5$anon4_Else#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$anon4_Else#2:
+ assume k != 1;
+ goto inline$IoGetCurrentIrpStackLocation$5$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$anon4_Then#2:
+ assume k == 1;
+ inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_1_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ goto inline$IoGetCurrentIrpStackLocation$5$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$anon3_Then#2:
+ assume k == 0;
+ inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23[CurrentStackLocation___unnamed_4_3c640f23(__unnamed_4_3c640f23___unnamed_12_41c62b26(__unnamed_12_41c62b26___unnamed_40_32307de2(Overlay___unnamed_48_e2bbfb0b(Tail__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$23298.14$IoGetCurrentIrpStackLocation)))))];
+ goto inline$IoGetCurrentIrpStackLocation$5$anon2#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$anon2#2:
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$ := inline$IoGetCurrentIrpStackLocation$5$myVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$5$label_1#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_1#2:
+ goto inline$IoGetCurrentIrpStackLocation$5$Return#2;
+
+ inline$IoGetCurrentIrpStackLocation$5$Return#2:
+ inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$ := inline$IoGetCurrentIrpStackLocation$5$$result.IoGetCurrentIrpStackLocation$23297.0$1$;
+ goto inline$storm_IoCancelIrp$0$label_23$1#2;
+
+ inline$storm_IoCancelIrp$0$label_23$1#2:
+ goto inline$storm_IoCancelIrp$0$anon31_Then#2, inline$storm_IoCancelIrp$0$anon31_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon31_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon14#2;
+
+ inline$storm_IoCancelIrp$0$anon14#2:
+ goto inline$storm_IoCancelIrp$0$label_31#2;
+
+ inline$storm_IoCancelIrp$0$label_31#2:
+ inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp := inline$storm_IoCancelIrp$0$$result.IoGetCurrentIrpStackLocation$366.40$3$;
+ goto inline$storm_IoCancelIrp$0$label_32#2;
+
+ inline$storm_IoCancelIrp$0$label_32#2:
+ goto inline$storm_IoCancelIrp$0$label_32_icall_1#2;
+
+ inline$storm_IoCancelIrp$0$label_32_icall_1#2:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$352.17$storm_IoCancelIrp == I8xSysButtonCancelRoutine;
+ goto inline$storm_IoCancelIrp$0$anon33_Then#2, inline$storm_IoCancelIrp$0$anon33_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon33_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCancelIrp$0$anon34_Then#2, inline$storm_IoCancelIrp$0$anon34_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon34_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCancelIrp$0$anon20#2;
+
+ inline$storm_IoCancelIrp$0$anon34_Then#2:
+ assume k == 1;
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_1_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION(inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp)];
+ goto inline$storm_IoCancelIrp$0$anon20#2;
+
+ inline$storm_IoCancelIrp$0$anon33_Then#2:
+ assume k == 0;
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.DeviceObject__IO_STACK_LOCATION[DeviceObject__IO_STACK_LOCATION(inline$storm_IoCancelIrp$0$$irpSp$3$364.23$storm_IoCancelIrp)];
+ goto inline$storm_IoCancelIrp$0$anon20#2;
+
+ inline$storm_IoCancelIrp$0$anon20#2:
+ call contextSwitch();
+ goto inline$I8xSysButtonCancelRoutine$0$Entry#2;
+
+ inline$I8xSysButtonCancelRoutine$0$Entry#2:
+ inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$myVar_0;
+ inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1 := inline$storm_IoCancelIrp$0$$Irp$1$349.10$storm_IoCancelIrp;
+ goto inline$I8xSysButtonCancelRoutine$0$start#2;
+
+ inline$I8xSysButtonCancelRoutine$0$start#2:
+ call inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine := __HAVOC_malloc(1);
+ inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine_.1;
+ inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine_.1;
+ goto inline$I8xSysButtonCancelRoutine$0$label_3#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_3#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_4#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_4#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon11_Then#2, inline$I8xSysButtonCancelRoutine$0$anon11_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon11_Else#2:
+ assume k != 0;
+ goto inline$I8xSysButtonCancelRoutine$0$anon12_Then#2, inline$I8xSysButtonCancelRoutine$0$anon12_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon12_Else#2:
+ assume k != 1;
+ goto inline$I8xSysButtonCancelRoutine$0$anon2#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon12_Then#2:
+ assume k == 1;
+ inline$I8xSysButtonCancelRoutine$0$myVar_0 := Mem_1_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine)];
+ goto inline$I8xSysButtonCancelRoutine$0$anon2#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon11_Then#2:
+ assume k == 0;
+ inline$I8xSysButtonCancelRoutine$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$I8xSysButtonCancelRoutine$0$$DeviceObject$1$373.22$I8xSysButtonCancelRoutine)];
+ goto inline$I8xSysButtonCancelRoutine$0$anon2#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon2#2:
+ call contextSwitch();
+ inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine := inline$I8xSysButtonCancelRoutine$0$myVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_5#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_5#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_6#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_6#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_7#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_7#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$1$Entry#2;
+
+ inline$storm_KeAcquireSpinLock$1$Entry#2:
+ inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
+ goto inline$storm_KeAcquireSpinLock$1$start#2;
+
+ inline$storm_KeAcquireSpinLock$1$start#2:
+ inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock_.1;
+ goto inline$storm_KeAcquireSpinLock$1$label_3#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_3#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_4#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_4#2:
+ goto inline$storm_getThreadID$3$Entry#2;
+
+ inline$storm_getThreadID$3$Entry#2:
+ goto inline$storm_getThreadID$3$anon0#2;
+
+ inline$storm_getThreadID$3$anon0#2:
+ inline$storm_getThreadID$3$tidRet := tid;
+ goto inline$storm_getThreadID$3$Return#2;
+
+ inline$storm_getThreadID$3$Return#2:
+ inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$3$tidRet;
+ goto inline$storm_KeAcquireSpinLock$1$label_4$1#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_4$1#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_7#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_7#2:
+ inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$1$label_8#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_8#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_9#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_9#2:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$1$label_12#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_12#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon10_Then#2, inline$storm_KeAcquireSpinLock$1$anon10_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon10_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon1#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_13#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_13#2:
+ goto inline$storm_KeAcquireSpinLock$1$label_13_true#2, inline$storm_KeAcquireSpinLock$1$label_13_false#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_13_false#2:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$1$label_14#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_14#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$1$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_13_true#2:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock);
+ goto inline$storm_KeAcquireSpinLock$1$label_17#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_17#2:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon11_Then#2, inline$storm_KeAcquireSpinLock$1$anon11_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon11_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon4#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon4#2:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock, 0);
+ goto inline$storm_KeAcquireSpinLock$1$label_18#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_18#2:
+ goto inline$storm_KeAcquireSpinLock$1$anon12_Then#2, inline$storm_KeAcquireSpinLock$1$anon12_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon12_Else#2:
+ assume k != 0;
+ goto inline$storm_KeAcquireSpinLock$1$anon13_Then#2, inline$storm_KeAcquireSpinLock$1$anon13_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon13_Else#2:
+ assume k != 1;
+ goto inline$storm_KeAcquireSpinLock$1$anon7#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon13_Then#2:
+ assume k == 1;
+ Res_1_LOCK := Res_1_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock];
+ goto inline$storm_KeAcquireSpinLock$1$anon7#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon12_Then#2:
+ assume k == 0;
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock];
+ goto inline$storm_KeAcquireSpinLock$1$anon7#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon7#2:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_19#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_19#2:
+ goto inline$storm_KeAcquireSpinLock$1$anon14_Then#2, inline$storm_KeAcquireSpinLock$1$anon14_Else#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon14_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$1$anon9#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon14_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$1$anon9#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon9#2:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_1#2;
+
+ inline$storm_KeAcquireSpinLock$1$label_1#2:
+ goto inline$storm_KeAcquireSpinLock$1$Return#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon11_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$Return#2;
+
+ inline$storm_KeAcquireSpinLock$1$anon10_Then#2:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$Return#2;
+
+ inline$storm_KeAcquireSpinLock$1$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_7$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_7$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon13_Then#2, inline$I8xSysButtonCancelRoutine$0$anon13_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon13_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon4#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon4#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_10#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_10#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_11#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_11#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_12#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_12#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ assume inline$I8xSysButtonCancelRoutine$0$myNondetVar_0 == inline$I8xSysButtonCancelRoutine$0$myNondetVar_1;
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$1$Entry#2;
+
+ inline$storm_KeReleaseSpinLock$1$Entry#2:
+ inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1 := SysButtonSpinLock__PORT_KEYBOARD_EXTENSION(inline$I8xSysButtonCancelRoutine$0$$kbExtension$3$377.29$I8xSysButtonCancelRoutine);
+ goto inline$storm_KeReleaseSpinLock$1$start#2;
+
+ inline$storm_KeReleaseSpinLock$1$start#2:
+ inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock_.1;
+ goto inline$storm_KeReleaseSpinLock$1$label_3#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_3#2:
+ goto inline$storm_KeReleaseSpinLock$1$label_4#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_4#2:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$1$label_7#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_7#2:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$anon8_Then#2, inline$storm_KeReleaseSpinLock$1$anon8_Else#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$anon1#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon1#2:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
+ assume k == 1 ==> INT_EQ(Res_1_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_8#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_8#2:
+ goto inline$storm_getThreadID$4$Entry#2;
+
+ inline$storm_getThreadID$4$Entry#2:
+ goto inline$storm_getThreadID$4$anon0#2;
+
+ inline$storm_getThreadID$4$anon0#2:
+ inline$storm_getThreadID$4$tidRet := tid;
+ goto inline$storm_getThreadID$4$Return#2;
+
+ inline$storm_getThreadID$4$Return#2:
+ inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$4$tidRet;
+ goto inline$storm_KeReleaseSpinLock$1$label_8$1#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_8$1#2:
+ goto inline$storm_KeReleaseSpinLock$1$label_11#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_11#2:
+ goto inline$storm_KeReleaseSpinLock$1$label_11_true#2, inline$storm_KeReleaseSpinLock$1$label_11_false#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_11_false#2:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$1$label_12#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_12#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$1$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_11_true#2:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$1$label_15#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_15#2:
+ goto inline$storm_KeReleaseSpinLock$1$anon9_Then#2, inline$storm_KeReleaseSpinLock$1$anon9_Else#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon9_Else#2:
+ assume k != 0;
+ goto inline$storm_KeReleaseSpinLock$1$anon10_Then#2, inline$storm_KeReleaseSpinLock$1$anon10_Else#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon10_Else#2:
+ assume k != 1;
+ goto inline$storm_KeReleaseSpinLock$1$anon5#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon10_Then#2:
+ assume k == 1;
+ Res_1_LOCK := Res_1_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
+ goto inline$storm_KeReleaseSpinLock$1$anon5#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon9_Then#2:
+ assume k == 0;
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock := 0];
+ goto inline$storm_KeReleaseSpinLock$1$anon5#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon5#2:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_16#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_16#2:
+ goto inline$storm_KeReleaseSpinLock$1$anon11_Then#2, inline$storm_KeReleaseSpinLock$1$anon11_Else#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon11_Else#2:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$1$anon7#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon11_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$1$anon7#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon7#2:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_1#2;
+
+ inline$storm_KeReleaseSpinLock$1$label_1#2:
+ goto inline$storm_KeReleaseSpinLock$1$Return#2;
+
+ inline$storm_KeReleaseSpinLock$1$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$Return#2;
+
+ inline$storm_KeReleaseSpinLock$1$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_12$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_12$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon14_Then#2, inline$I8xSysButtonCancelRoutine$0$anon14_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon14_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon6#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon6#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$I8xSysButtonCancelRoutine$0$label_15#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_15#2:
+ havoc inline$I8xSysButtonCancelRoutine$0$myNondetVar_0;
+ goto inline$storm_IoReleaseCancelSpinLock$0$Entry#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$Entry#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$start#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$start#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_3#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_3#2:
+ __storm_atomic := true;
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_6#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_6#2:
+ goto inline$storm_getThreadID$5$Entry#2;
+
+ inline$storm_getThreadID$5$Entry#2:
+ goto inline$storm_getThreadID$5$anon0#2;
+
+ inline$storm_getThreadID$5$anon0#2:
+ inline$storm_getThreadID$5$tidRet := tid;
+ goto inline$storm_getThreadID$5$Return#2;
+
+ inline$storm_getThreadID$5$Return#2:
+ inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$ := inline$storm_getThreadID$5$tidRet;
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_6$1#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_9#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_9#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2, inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_9_false#2:
+ assume k == 0 ==> !INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
+ assume k == 1 ==> !INT_EQ(cancelLockStatus_1, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_10#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_9_true#2:
+ assume k == 0 ==> INT_EQ(cancelLockStatus_0, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
+ assume k == 1 ==> INT_EQ(cancelLockStatus_1, inline$storm_IoReleaseCancelSpinLock$0$$result.storm_getThreadID$198.0$1$);
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_13#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_13#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon6_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon6_Else#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon6_Else#2:
+ assume k != 0;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon7_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon7_Else#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon7_Else#2:
+ assume k != 1;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon3#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon7_Then#2:
+ assume k == 1;
+ cancelLockStatus_1 := 0;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon3#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon6_Then#2:
+ assume k == 0;
+ cancelLockStatus_0 := 0;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon3#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon3#2:
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_14#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_14#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon8_Then#2, inline$storm_IoReleaseCancelSpinLock$0$anon8_Else#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon8_Else#2:
+ assume __storm_init;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon5#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon8_Then#2:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoReleaseCancelSpinLock$0$anon5#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$anon5#2:
+ call contextSwitch();
+ goto inline$storm_IoReleaseCancelSpinLock$0$label_1#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$label_1#2:
+ goto inline$storm_IoReleaseCancelSpinLock$0$Return#2;
+
+ inline$storm_IoReleaseCancelSpinLock$0$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_15$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_15$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon15_Then#2, inline$I8xSysButtonCancelRoutine$0$anon15_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon15_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon8#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon8#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_18#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_18#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_19#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_19#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_20#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_20#2:
+ goto inline$storm_IoCompleteRequest$4$Entry#2;
+
+ inline$storm_IoCompleteRequest$4$Entry#2:
+ inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1 := inline$I8xSysButtonCancelRoutine$0$$Irp$2$374.12$I8xSysButtonCancelRoutine;
+ goto inline$storm_IoCompleteRequest$4$start#2;
+
+ inline$storm_IoCompleteRequest$4$start#2:
+ inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest_.1;
+ goto inline$storm_IoCompleteRequest$4$label_3#2;
+
+ inline$storm_IoCompleteRequest$4$label_3#2:
+ call inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$4$label_6#2;
+
+ inline$storm_IoCompleteRequest$4$label_6#2:
+ goto inline$storm_IoCompleteRequest$4$label_6_true#2, inline$storm_IoCompleteRequest$4$label_6_false#2;
+
+ inline$storm_IoCompleteRequest$4$label_6_false#2:
+ assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$4$label_7#2;
+
+ inline$storm_IoCompleteRequest$4$label_6_true#2:
+ assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$343.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$4$label_8#2;
+
+ inline$storm_IoCompleteRequest$4$label_8#2:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$4$anon8_Then#2, inline$storm_IoCompleteRequest$4$anon8_Else#2;
+
+ inline$storm_IoCompleteRequest$4$anon8_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$4$anon4#2;
+
+ inline$storm_IoCompleteRequest$4$anon4#2:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ assume k == 1 ==> INT_EQ(Res_1_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$4$label_9#2;
+
+ inline$storm_IoCompleteRequest$4$label_9#2:
+ goto inline$storm_IoCompleteRequest$4$label_9_true#2, inline$storm_IoCompleteRequest$4$label_9_false#2;
+
+ inline$storm_IoCompleteRequest$4$label_9_false#2:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$4$label_10#2;
+
+ inline$storm_IoCompleteRequest$4$label_10#2:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$4$label_1#2;
+
+ inline$storm_IoCompleteRequest$4$label_9_true#2:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$4$label_7#2;
+
+ inline$storm_IoCompleteRequest$4$label_7#2:
+ goto inline$storm_IoCompleteRequest$4$anon6_Then#2, inline$storm_IoCompleteRequest$4$anon6_Else#2;
+
+ inline$storm_IoCompleteRequest$4$anon6_Else#2:
+ assume k != 0;
+ goto inline$storm_IoCompleteRequest$4$anon7_Then#2, inline$storm_IoCompleteRequest$4$anon7_Else#2;
+
+ inline$storm_IoCompleteRequest$4$anon7_Else#2:
+ assume k != 1;
+ goto inline$storm_IoCompleteRequest$4$anon2#2;
+
+ inline$storm_IoCompleteRequest$4$anon7_Then#2:
+ assume k == 1;
+ Res_1_COMPLETED := Res_1_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$4$anon2#2;
+
+ inline$storm_IoCompleteRequest$4$anon6_Then#2:
+ assume k == 0;
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$339.10$storm_IoCompleteRequest := 1];
+ goto inline$storm_IoCompleteRequest$4$anon2#2;
+
+ inline$storm_IoCompleteRequest$4$anon2#2:
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$4$label_1#2;
+
+ inline$storm_IoCompleteRequest$4$label_1#2:
+ goto inline$storm_IoCompleteRequest$4$Return#2;
+
+ inline$storm_IoCompleteRequest$4$anon8_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$4$Return#2;
+
+ inline$storm_IoCompleteRequest$4$Return#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_20$1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_20$1#2:
+ goto inline$I8xSysButtonCancelRoutine$0$anon16_Then#2, inline$I8xSysButtonCancelRoutine$0$anon16_Else#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon16_Else#2:
+ assume !raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$anon10#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon10#2:
+ goto inline$I8xSysButtonCancelRoutine$0$label_1#2;
+
+ inline$I8xSysButtonCancelRoutine$0$label_1#2:
+ call __HAVOC_free(inline$I8xSysButtonCancelRoutine$0$$irql$5$379.10$I8xSysButtonCancelRoutine);
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon16_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon15_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon14_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$anon13_Then#2:
+ assume raiseException;
+ goto inline$I8xSysButtonCancelRoutine$0$Return#2;
+
+ inline$I8xSysButtonCancelRoutine$0$Return#2:
+ goto inline$storm_IoCancelIrp$0$anon20$1#2;
+
+ inline$storm_IoCancelIrp$0$anon20$1#2:
+ goto inline$storm_IoCancelIrp$0$anon35_Then#2, inline$storm_IoCancelIrp$0$anon35_Else#2;
+
+ inline$storm_IoCancelIrp$0$anon35_Else#2:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon22#2;
+
+ inline$storm_IoCancelIrp$0$anon22#2:
+ goto inline$storm_IoCancelIrp$0$label_32_icall_return#2;
+
+ inline$storm_IoCancelIrp$0$label_32_icall_return#2:
+ goto inline$storm_IoCancelIrp$0$label_35#2;
+
+ inline$storm_IoCancelIrp$0$label_35#2:
+ goto inline$storm_IoCancelIrp$0$label_1#2;
+
+ inline$storm_IoCancelIrp$0$label_1#2:
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon35_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon31_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon32_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$anon30_Then#2:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#2;
+
+ inline$storm_IoCancelIrp$0$Return#2:
+ goto inline$cancel$0$label_3$1#2;
+
+ inline$cancel$0$label_3$1#2:
+ goto inline$cancel$0$anon2_Then#2, inline$cancel$0$anon2_Else#2;
+
+ inline$cancel$0$anon2_Else#2:
+ assume !raiseException;
+ goto inline$cancel$0$anon1#2;
+
+ inline$cancel$0$anon1#2:
+ goto inline$cancel$0$label_1#2;
+
+ inline$cancel$0$label_1#2:
+ goto inline$cancel$0$Return#2;
+
+ inline$cancel$0$anon2_Then#2:
+ assume raiseException;
+ goto inline$cancel$0$Return#2;
+
+ inline$cancel$0$Return#2:
+ goto label_27$1#2;
+
+ label_27$1#2:
+ goto anon32_Then#2, anon32_Else#2;
+
+ anon32_Else#2:
+ assume !(errorReached || !raiseException);
+ goto anon19#2;
+
+ anon32_Then#2:
+ assume errorReached || !raiseException;
+ __storm_thread_done_2 := true;
+ goto anon19#2;
+
+ anon19#2:
+ k := k_old_1;
+ tid := tid_old_1;
+ goto label_30#2;
+
+ label_30#2:
+ goto label_31#2;
+
+ label_31#2:
+ k_old_2 := k;
+ tid_old_2 := tid;
+ tidCount_old := tidCount;
+ havoc tidCount;
+ assume tidCount_old < tidCount;
+ tid := tidCount;
+ raiseException := false;
+ call contextSwitch();
+ goto inline$dpc$0$Entry#2;
+
+ inline$dpc$0$Entry#2:
+ goto inline$dpc$0$start#2;
+
+ inline$dpc$0$start#2:
+ goto inline$dpc$0$label_1#2;
+
+ inline$dpc$0$label_1#2:
+ goto inline$dpc$0$Return#2;
+
+ inline$dpc$0$Return#2:
+ goto label_31$1#2;
+
+ label_31$1#2:
+ goto anon33_Then#2, anon33_Else#2;
+
+ anon33_Else#2:
+ assume !(errorReached || !raiseException);
+ goto anon21#2;
+
+ anon33_Then#2:
+ assume errorReached || !raiseException;
+ __storm_thread_done_3 := true;
+ goto anon21#2;
+
+ anon21#2:
+ k := k_old_2;
+ tid := tid_old_2;
+ goto label_1#2;
+
+ label_1#2:
+ assume Mem_0_T.CancelRoutine__IRP == Mem_s_1_T.CancelRoutine__IRP;
+ assume Mem_0_T.Cancel__IRP == Mem_s_1_T.Cancel__IRP;
+ assume Mem_0_T.CurrentStackLocation___unnamed_4_3c640f23 == Mem_s_1_T.CurrentStackLocation___unnamed_4_3c640f23;
+ assume Mem_0_T.DeviceExtension__DEVICE_OBJECT == Mem_s_1_T.DeviceExtension__DEVICE_OBJECT;
+ assume Mem_0_T.DeviceObject__IO_STACK_LOCATION == Mem_s_1_T.DeviceObject__IO_STACK_LOCATION;
+ assume cancelLockStatus_0 == cancelLockStatus_s_1;
+ assume Res_0_COMPLETED == Res_s_1_COMPLETED;
+ assume Res_0_LOCK == Res_s_1_LOCK;
+ assert !errorReached;
+ return;
+
+ anon30_Then#2:
+ assume raiseException;
+ return;
+
+ anon27_Then#2:
+ assume raiseException;
+ return;
+
+ anon26_Then#2:
+ assume raiseException;
+ return;
+
+ anon25_Then#2:
+ assume raiseException;
+ return;
+
+ anon24_Then#2:
+ assume raiseException;
+ return;
+}
+
+
+
diff --git a/Test/livevars/daytona_bug2_ioctl_example_2.bpl.expect b/Test/livevars/daytona_bug2_ioctl_example_2.bpl.expect
index 9f960f26..3c0d0b20 100644
--- a/Test/livevars/daytona_bug2_ioctl_example_2.bpl.expect
+++ b/Test/livevars/daytona_bug2_ioctl_example_2.bpl.expect
@@ -127,7 +127,8 @@ Execution trace:
daytona_bug2_ioctl_example_2.bpl(3832,3): inline$storm_IoCancelIrp$0$anon10#2
daytona_bug2_ioctl_example_2.bpl(3892,3): inline$storm_IoAcquireCancelSpinLock$0$label_11_true#2
daytona_bug2_ioctl_example_2.bpl(3902,3): inline$storm_IoAcquireCancelSpinLock$0$anon8_Else#2
- daytona_bug2_ioctl_example_2.bpl(3928,3): inline$storm_IoAcquireCancelSpinLock$0$anon9_Then#2
+ daytona_bug2_ioctl_example_2.bpl(3915,3): inline$storm_IoAcquireCancelSpinLock$0$anon9_Else#2
+ daytona_bug2_ioctl_example_2.bpl(3923,3): inline$storm_IoAcquireCancelSpinLock$0$anon10_Then#2
daytona_bug2_ioctl_example_2.bpl(3933,3): inline$storm_IoAcquireCancelSpinLock$0$anon5#2
daytona_bug2_ioctl_example_2.bpl(3944,3): inline$storm_IoAcquireCancelSpinLock$0$anon11_Then#2
daytona_bug2_ioctl_example_2.bpl(3949,3): inline$storm_IoAcquireCancelSpinLock$0$anon7#2
diff --git a/Test/livevars/stack_overflow.bpl b/Test/livevars/stack_overflow.bpl
index aec86556..a8687e0a 100644
--- a/Test/livevars/stack_overflow.bpl
+++ b/Test/livevars/stack_overflow.bpl
@@ -1,97969 +1,97969 @@
-// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-var raiseException : bool;
-var errorReached : bool;
-var k : int;
-var __storm_atomic : bool;
-var __storm_init : bool;
-var __storm_thread_id : int;
-var __storm_thread_done_1 : bool;
-var __storm_thread_done_2 : bool;
-var __storm_thread_done_3 : bool;
-var __storm_thread_done_4 : bool;
-var __storm_thread_done_5 : bool;
-var __storm_thread_done_6 : bool;
-
-procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tid:int)
-{
- tid := __storm_thread_id;
- return;
-}
-
-procedure storm_context_0();
-
-procedure contextSwitch();
-modifies k;
-ensures __storm_atomic ==> old(k) == k;
-ensures(old(k) <= k);
-ensures(k < 1);
-
-
-
-// Memory model
-
-// Mutable
-var alloc:int;
-
-// Immutable
-
-var Mem_0_T.CancelRoutine__IRP : [int]int;
-var Mem_0_T.CurrentLocation__IRP : [int]int;
-var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
-var Mem_0_T.StackCount__IRP : [int]int;
-
-
-// Field declarations
-
-
-// Type declarations
-
-
-// Field offset definitions
-
-function AllocatedResourcesTranslated___unnamed_8_634fb90c(int) returns (int);
-
-
-//axiom (forall x:int :: {AllocatedResourcesTranslated___unnamed_8_634fb90c(x)} AllocatedResourcesTranslated___unnamed_8_634fb90c(x) == x + 4);
-axiom (forall x:int :: {AllocatedResourcesTranslated___unnamed_8_634fb90c(x)} AllocatedResourcesTranslated___unnamed_8_634fb90c(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function AllocatedResources___unnamed_8_634fb90c(int) returns (int);
-
-
-//axiom (forall x:int :: {AllocatedResources___unnamed_8_634fb90c(x)} AllocatedResources___unnamed_8_634fb90c(x) == x + 0);
-axiom (forall x:int :: {AllocatedResources___unnamed_8_634fb90c(x)} AllocatedResources___unnamed_8_634fb90c(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1364);
-axiom (forall x:int :: {BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1364));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function BDDBuildNumber__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {BDDBuildNumber__BDSI_INITIALIZERESOURCES(x)} BDDBuildNumber__BDSI_INITIALIZERESOURCES(x) == x + 544);
-axiom (forall x:int :: {BDDBuildNumber__BDSI_INITIALIZERESOURCES(x)} BDDBuildNumber__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 544));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1356);
-axiom (forall x:int :: {BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1356));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function BDDVersionMajor__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {BDDVersionMajor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMajor__BDSI_INITIALIZERESOURCES(x) == x + 536);
-axiom (forall x:int :: {BDDVersionMajor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMajor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 536));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1360);
-axiom (forall x:int :: {BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1360));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function BDDVersionMinor__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {BDDVersionMinor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMinor__BDSI_INITIALIZERESOURCES(x) == x + 540);
-axiom (forall x:int :: {BDDVersionMinor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMinor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 540));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x)} BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x)} BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Blink__LIST_ENTRY(int) returns (int);
-
-
-//axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == x + 4);
-axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Block__BDDI_ITEM_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Block__BDDI_ITEM_DATA(x)} Block__BDDI_ITEM_DATA(x) == x + 0);
-axiom (forall x:int :: {Block__BDDI_ITEM_DATA(x)} Block__BDDI_ITEM_DATA(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelIrql__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
-axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CancelRoutine__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
-axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Cancel__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
-axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ChannelId__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
-
-
-//axiom (forall x:int :: {ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x)} ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 12);
-axiom (forall x:int :: {ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x)} ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(int) returns (int);
-
-
-//axiom (forall x:int :: {ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x) == x + 4);
-axiom (forall x:int :: {ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
-axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ComponentId__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
-
-
-//axiom (forall x:int :: {ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x)} ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 8);
-axiom (forall x:int :: {ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x)} ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(int) returns (int);
-
-
-//axiom (forall x:int :: {ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x) == x + 0);
-axiom (forall x:int :: {ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Context__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
-axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
-
-
-//axiom (forall x:int :: {ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == x + 620);
-axiom (forall x:int :: {ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 620));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
-
-
-//axiom (forall x:int :: {ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x) == x + 636);
-axiom (forall x:int :: {ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 636));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x)} ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 160);
-axiom (forall x:int :: {ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x)} ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 160));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControlId__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
-
-
-//axiom (forall x:int :: {ControlId__BDDI_PARAMS_REGISTERNOTIFY(x)} ControlId__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 16);
-axiom (forall x:int :: {ControlId__BDDI_PARAMS_REGISTERNOTIFY(x)} ControlId__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 16));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ControlId__BDL_CONTROL_CHANGE_REGISTRATION(int) returns (int);
-
-
-//axiom (forall x:int :: {ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x) == x + 8);
-axiom (forall x:int :: {ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Control__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
-axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentLocation__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
-axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function CurrentStackLocation___unnamed_12_3a099e68(int) returns (int);
-
-
-//axiom (forall x:int :: {CurrentStackLocation___unnamed_12_3a099e68(x)} CurrentStackLocation___unnamed_12_3a099e68(x) == x + 8);
-axiom (forall x:int :: {CurrentStackLocation___unnamed_12_3a099e68(x)} CurrentStackLocation___unnamed_12_3a099e68(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Data__BDDI_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Data__BDDI_ITEM(x)} Data__BDDI_ITEM(x) == x + 4);
-axiom (forall x:int :: {Data__BDDI_ITEM(x)} Data__BDDI_ITEM(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 140);
-axiom (forall x:int :: {DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 140));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceExtension__DEVICE_OBJECT(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
-axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceObject__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
-axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 136);
-axiom (forall x:int :: {DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 136));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 28);
-axiom (forall x:int :: {DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 28));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function DeviceState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Flink__LIST_ENTRY(int) returns (int);
-
-
-//axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
-axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1352);
-axiom (forall x:int :: {HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1352));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HWBuildNumber__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {HWBuildNumber__BDSI_INITIALIZERESOURCES(x)} HWBuildNumber__BDSI_INITIALIZERESOURCES(x) == x + 532);
-axiom (forall x:int :: {HWBuildNumber__BDSI_INITIALIZERESOURCES(x)} HWBuildNumber__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 532));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1344);
-axiom (forall x:int :: {HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1344));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HWVersionMajor__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {HWVersionMajor__BDSI_INITIALIZERESOURCES(x)} HWVersionMajor__BDSI_INITIALIZERESOURCES(x) == x + 524);
-axiom (forall x:int :: {HWVersionMajor__BDSI_INITIALIZERESOURCES(x)} HWVersionMajor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 524));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1348);
-axiom (forall x:int :: {HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1348));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HWVersionMinor__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {HWVersionMinor__BDSI_INITIALIZERESOURCES(x)} HWVersionMinor__BDSI_INITIALIZERESOURCES(x) == x + 528);
-axiom (forall x:int :: {HWVersionMinor__BDSI_INITIALIZERESOURCES(x)} HWVersionMinor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 528));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 816);
-axiom (forall x:int :: {HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 816));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function HandleList__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 820);
-axiom (forall x:int :: {HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 820));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Handle__BDDI_ITEM_DATA(int) returns (int);
-
-
-//axiom (forall x:int :: {Handle__BDDI_ITEM_DATA(x)} Handle__BDDI_ITEM_DATA(x) == x + 0);
-axiom (forall x:int :: {Handle__BDDI_ITEM_DATA(x)} Handle__BDDI_ITEM_DATA(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
-
-
-//axiom (forall x:int :: {IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == x + 624);
-axiom (forall x:int :: {IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 624));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
-
-
-//axiom (forall x:int :: {ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == x + 0);
-axiom (forall x:int :: {ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
-
-
-//axiom (forall x:int :: {ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == x + 36);
-axiom (forall x:int :: {ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 36));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Information__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
-axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IoCount__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x)} IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 44);
-axiom (forall x:int :: {IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x)} IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 44));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function IoStatus__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
-axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MajorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
-axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function MinorFunction__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
-axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function NumChannels__BDL_COMPONENT(int) returns (int);
-
-
-//axiom (forall x:int :: {NumChannels__BDL_COMPONENT(x)} NumChannels__BDL_COMPONENT(x) == x + 12);
-axiom (forall x:int :: {NumChannels__BDL_COMPONENT(x)} NumChannels__BDL_COMPONENT(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function NumComponents__BDL_DEVICE_CAPABILITIES(int) returns (int);
-
-
-//axiom (forall x:int :: {NumComponents__BDL_DEVICE_CAPABILITIES(x)} NumComponents__BDL_DEVICE_CAPABILITIES(x) == x + 8);
-axiom (forall x:int :: {NumComponents__BDL_DEVICE_CAPABILITIES(x)} NumComponents__BDL_DEVICE_CAPABILITIES(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function NumHandles_HANDLELIST_(int) returns (int);
-
-
-//axiom (forall x:int :: {NumHandles_HANDLELIST_(x)} NumHandles_HANDLELIST_(x) == x + 8);
-axiom (forall x:int :: {NumHandles_HANDLELIST_(x)} NumHandles_HANDLELIST_(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Overlay___unnamed_48_7c673e0a(int) returns (int);
-
-
-//axiom (forall x:int :: {Overlay___unnamed_48_7c673e0a(x)} Overlay___unnamed_48_7c673e0a(x) == x + 0);
-axiom (forall x:int :: {Overlay___unnamed_48_7c673e0a(x)} Overlay___unnamed_48_7c673e0a(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Parameters__IO_STACK_LOCATION(int) returns (int);
-
-
-//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
-axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PendingReturned__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
-axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function PowerState__BDSI_SETPOWERSTATE(int) returns (int);
-
-
-//axiom (forall x:int :: {PowerState__BDSI_SETPOWERSTATE(x)} PowerState__BDSI_SETPOWERSTATE(x) == x + 4);
-axiom (forall x:int :: {PowerState__BDSI_SETPOWERSTATE(x)} PowerState__BDSI_SETPOWERSTATE(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Power___unnamed_16_357c4db4(int) returns (int);
-
-
-//axiom (forall x:int :: {Power___unnamed_16_357c4db4(x)} Power___unnamed_16_357c4db4(x) == x + 0);
-axiom (forall x:int :: {Power___unnamed_16_357c4db4(x)} Power___unnamed_16_357c4db4(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 48);
-axiom (forall x:int :: {RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 48));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Size__BDDI_PARAMS_CLOSEHANDLE(int) returns (int);
-
-
-//axiom (forall x:int :: {Size__BDDI_PARAMS_CLOSEHANDLE(x)} Size__BDDI_PARAMS_CLOSEHANDLE(x) == x + 0);
-axiom (forall x:int :: {Size__BDDI_PARAMS_CLOSEHANDLE(x)} Size__BDDI_PARAMS_CLOSEHANDLE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Size__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {Size__BDSI_INITIALIZERESOURCES(x)} Size__BDSI_INITIALIZERESOURCES(x) == x + 0);
-axiom (forall x:int :: {Size__BDSI_INITIALIZERESOURCES(x)} Size__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Size__BDSI_SETPOWERSTATE(int) returns (int);
-
-
-//axiom (forall x:int :: {Size__BDSI_SETPOWERSTATE(x)} Size__BDSI_SETPOWERSTATE(x) == x + 0);
-axiom (forall x:int :: {Size__BDSI_SETPOWERSTATE(x)} Size__BDSI_SETPOWERSTATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 24);
-axiom (forall x:int :: {SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function StackCount__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {StackCount__IRP(x)} StackCount__IRP(x) == x + 34);
-axiom (forall x:int :: {StackCount__IRP(x)} StackCount__IRP(x) == INT_ADD(x, 34));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function StartDevice___unnamed_16_357c4db4(int) returns (int);
-
-
-//axiom (forall x:int :: {StartDevice___unnamed_16_357c4db4(x)} StartDevice___unnamed_16_357c4db4(x) == x + 0);
-axiom (forall x:int :: {StartDevice___unnamed_16_357c4db4(x)} StartDevice___unnamed_16_357c4db4(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function State___unnamed_16_72a8bca0(int) returns (int);
-
-
-//axiom (forall x:int :: {State___unnamed_16_72a8bca0(x)} State___unnamed_16_72a8bca0(x) == x + 8);
-axiom (forall x:int :: {State___unnamed_16_72a8bca0(x)} State___unnamed_16_72a8bca0(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Status___unnamed_4_46d45f1c(int) returns (int);
-
-
-//axiom (forall x:int :: {Status___unnamed_4_46d45f1c(x)} Status___unnamed_4_46d45f1c(x) == x + 0);
-axiom (forall x:int :: {Status___unnamed_4_46d45f1c(x)} Status___unnamed_4_46d45f1c(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x)} SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 16);
-axiom (forall x:int :: {SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x)} SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 16));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function SystemState__POWER_STATE(int) returns (int);
-
-
-//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
-axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Tail__IRP(int) returns (int);
-
-
-//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
-axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function Type__BDDI_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {Type__BDDI_ITEM(x)} Type__BDDI_ITEM(x) == x + 0);
-axiom (forall x:int :: {Type__BDDI_ITEM(x)} Type__BDDI_ITEM(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_12_3a099e68___unnamed_40_3fd77f3c(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_12_3a099e68___unnamed_40_3fd77f3c(x)} __unnamed_12_3a099e68___unnamed_40_3fd77f3c(x) == x + 24);
-axiom (forall x:int :: {__unnamed_12_3a099e68___unnamed_40_3fd77f3c(x)} __unnamed_12_3a099e68___unnamed_40_3fd77f3c(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function __unnamed_4_46d45f1c__IO_STATUS_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {__unnamed_4_46d45f1c__IO_STATUS_BLOCK(x)} __unnamed_4_46d45f1c__IO_STATUS_BLOCK(x) == x + 0);
-axiom (forall x:int :: {__unnamed_4_46d45f1c__IO_STATUS_BLOCK(x)} __unnamed_4_46d45f1c__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function bddiFunctions__BDL_DRIVER_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {bddiFunctions__BDL_DRIVER_EXTENSION(x)} bddiFunctions__BDL_DRIVER_EXTENSION(x) == x + 0);
-axiom (forall x:int :: {bddiFunctions__BDL_DRIVER_EXTENSION(x)} bddiFunctions__BDL_DRIVER_EXTENSION(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function bdsiFunctions__BDL_DRIVER_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {bdsiFunctions__BDL_DRIVER_EXTENSION(x)} bdsiFunctions__BDL_DRIVER_EXTENSION(x) == x + 32);
-axiom (forall x:int :: {bdsiFunctions__BDL_DRIVER_EXTENSION(x)} bdsiFunctions__BDL_DRIVER_EXTENSION(x) == INT_ADD(x, 32));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x)} fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 813);
-axiom (forall x:int :: {fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x)} fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 813));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function fRegister__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
-
-
-//axiom (forall x:int :: {fRegister__BDDI_PARAMS_REGISTERNOTIFY(x)} fRegister__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 4);
-axiom (forall x:int :: {fRegister__BDDI_PARAMS_REGISTERNOTIFY(x)} fRegister__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x)} fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 812);
-axiom (forall x:int :: {fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x)} fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 812));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(int) returns (int);
-
-
-//axiom (forall x:int :: {fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x)} fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x) == x + 24);
-axiom (forall x:int :: {fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x)} fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function hData__BDDI_PARAMS_CLOSEHANDLE(int) returns (int);
-
-
-//axiom (forall x:int :: {hData__BDDI_PARAMS_CLOSEHANDLE(x)} hData__BDDI_PARAMS_CLOSEHANDLE(x) == x + 4);
-axiom (forall x:int :: {hData__BDDI_PARAMS_CLOSEHANDLE(x)} hData__BDDI_PARAMS_CLOSEHANDLE(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function handle_LIST_NODE_(int) returns (int);
-
-
-//axiom (forall x:int :: {handle_LIST_NODE_(x)} handle_LIST_NODE_(x) == x + 4);
-axiom (forall x:int :: {handle_LIST_NODE_(x)} handle_LIST_NODE_(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x)} pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x) == x + 8);
-axiom (forall x:int :: {pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x)} pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pAllocatedResources__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {pAllocatedResources__BDSI_INITIALIZERESOURCES(x)} pAllocatedResources__BDSI_INITIALIZERESOURCES(x) == x + 4);
-axiom (forall x:int :: {pAllocatedResources__BDSI_INITIALIZERESOURCES(x)} pAllocatedResources__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pAttachedDeviceObject__BDL_DEVICEEXT(int) returns (int);
-
-
-//axiom (forall x:int :: {pAttachedDeviceObject__BDL_DEVICEEXT(x)} pAttachedDeviceObject__BDL_DEVICEEXT(x) == x + 4);
-axiom (forall x:int :: {pAttachedDeviceObject__BDL_DEVICEEXT(x)} pAttachedDeviceObject__BDL_DEVICEEXT(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pBDLExtension__POWER_IRP_CONTEXT(int) returns (int);
-
-
-//axiom (forall x:int :: {pBDLExtension__POWER_IRP_CONTEXT(x)} pBDLExtension__POWER_IRP_CONTEXT(x) == x + 0);
-axiom (forall x:int :: {pBDLExtension__POWER_IRP_CONTEXT(x)} pBDLExtension__POWER_IRP_CONTEXT(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pBuffer__BDDI_ITEM_DATA_BLOCK(int) returns (int);
-
-
-//axiom (forall x:int :: {pBuffer__BDDI_ITEM_DATA_BLOCK(x)} pBuffer__BDDI_ITEM_DATA_BLOCK(x) == x + 4);
-axiom (forall x:int :: {pBuffer__BDDI_ITEM_DATA_BLOCK(x)} pBuffer__BDDI_ITEM_DATA_BLOCK(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x)} pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 12);
-axiom (forall x:int :: {pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x)} pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pHead_HANDLELIST_(int) returns (int);
-
-
-//axiom (forall x:int :: {pHead_HANDLELIST_(x)} pHead_HANDLELIST_(x) == x + 0);
-axiom (forall x:int :: {pHead_HANDLELIST_(x)} pHead_HANDLELIST_(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pIrp__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
-
-
-//axiom (forall x:int :: {pIrp__BDL_CONTROL_CHANGE_STRUCT(x)} pIrp__BDL_CONTROL_CHANGE_STRUCT(x) == x + 632);
-axiom (forall x:int :: {pIrp__BDL_CONTROL_CHANGE_STRUCT(x)} pIrp__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 632));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pNext_LIST_NODE_(int) returns (int);
-
-
-//axiom (forall x:int :: {pNext_LIST_NODE_(x)} pNext_LIST_NODE_(x) == x + 0);
-axiom (forall x:int :: {pNext_LIST_NODE_(x)} pNext_LIST_NODE_(x) == INT_ADD(x, 0));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pTail_HANDLELIST_(int) returns (int);
-
-
-//axiom (forall x:int :: {pTail_HANDLELIST_(x)} pTail_HANDLELIST_(x) == x + 4);
-axiom (forall x:int :: {pTail_HANDLELIST_(x)} pTail_HANDLELIST_(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(int) returns (int);
-
-
-//axiom (forall x:int :: {pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x)} pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x) == x + 24);
-axiom (forall x:int :: {pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x)} pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x) == INT_ADD(x, 24));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(int) returns (int);
-
-
-//axiom (forall x:int :: {pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x)} pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x) == x + 4);
-axiom (forall x:int :: {pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x)} pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(int) returns (int);
-
-
-//axiom (forall x:int :: {pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x) == x + 12);
-axiom (forall x:int :: {pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(int) returns (int);
-
-
-//axiom (forall x:int :: {pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x) == x + 16);
-axiom (forall x:int :: {pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 16));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(int) returns (int);
-
-
-//axiom (forall x:int :: {pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x)} pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x) == x + 8);
-axiom (forall x:int :: {pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x)} pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(int) returns (int);
-
-
-//axiom (forall x:int :: {pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x)} pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x) == x + 32);
-axiom (forall x:int :: {pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x)} pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 32));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function rgChannels__BDL_COMPONENT(int) returns (int);
-
-
-//axiom (forall x:int :: {rgChannels__BDL_COMPONENT(x)} rgChannels__BDL_COMPONENT(x) == x + 16);
-axiom (forall x:int :: {rgChannels__BDL_COMPONENT(x)} rgChannels__BDL_COMPONENT(x) == INT_ADD(x, 16));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function rgComponents__BDL_DEVICE_CAPABILITIES(int) returns (int);
-
-
-//axiom (forall x:int :: {rgComponents__BDL_DEVICE_CAPABILITIES(x)} rgComponents__BDL_DEVICE_CAPABILITIES(x) == x + 12);
-axiom (forall x:int :: {rgComponents__BDL_DEVICE_CAPABILITIES(x)} rgComponents__BDL_DEVICE_CAPABILITIES(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function rgControls__BDL_CHANNEL(int) returns (int);
-
-
-//axiom (forall x:int :: {rgControls__BDL_CHANNEL(x)} rgControls__BDL_CHANNEL(x) == x + 8);
-axiom (forall x:int :: {rgControls__BDL_CHANNEL(x)} rgControls__BDL_CHANNEL(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function rgControls__BDL_COMPONENT(int) returns (int);
-
-
-//axiom (forall x:int :: {rgControls__BDL_COMPONENT(x)} rgControls__BDL_COMPONENT(x) == x + 8);
-axiom (forall x:int :: {rgControls__BDL_COMPONENT(x)} rgControls__BDL_COMPONENT(x) == INT_ADD(x, 8));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function rgControls__BDL_DEVICE_CAPABILITIES(int) returns (int);
-
-
-//axiom (forall x:int :: {rgControls__BDL_DEVICE_CAPABILITIES(x)} rgControls__BDL_DEVICE_CAPABILITIES(x) == x + 4);
-axiom (forall x:int :: {rgControls__BDL_DEVICE_CAPABILITIES(x)} rgControls__BDL_DEVICE_CAPABILITIES(x) == INT_ADD(x, 4));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function rgProducts__BDL_CHANNEL(int) returns (int);
-
-
-//axiom (forall x:int :: {rgProducts__BDL_CHANNEL(x)} rgProducts__BDL_CHANNEL(x) == x + 28);
-axiom (forall x:int :: {rgProducts__BDL_CHANNEL(x)} rgProducts__BDL_CHANNEL(x) == INT_ADD(x, 28));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function rgSourceLists__BDL_CHANNEL(int) returns (int);
-
-
-//axiom (forall x:int :: {rgSourceLists__BDL_CHANNEL(x)} rgSourceLists__BDL_CHANNEL(x) == x + 20);
-axiom (forall x:int :: {rgSourceLists__BDL_CHANNEL(x)} rgSourceLists__BDL_CHANNEL(x) == INT_ADD(x, 20));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
-
-
-//axiom (forall x:int :: {wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 832);
-axiom (forall x:int :: {wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 832));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-function wszSerialNumber__BDSI_INITIALIZERESOURCES(int) returns (int);
-
-
-//axiom (forall x:int :: {wszSerialNumber__BDSI_INITIALIZERESOURCES(x)} wszSerialNumber__BDSI_INITIALIZERESOURCES(x) == x + 12);
-axiom (forall x:int :: {wszSerialNumber__BDSI_INITIALIZERESOURCES(x)} wszSerialNumber__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 12));
-//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
-
-
-///////////////////////////////////
-// will be replaced by:
-// "//" when using bv mode
-// "" when using int mode
-// main reason is to avoid using bv for constants
-// or avoid translating lines that are complex or unsound
-//////////////////////////////////
-
-////////////////////////////////////////////
-/////// functions for int type /////////////
-// Theorem prover does not see INT_ADD etc.
-////////////////////////////////////////////
-function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
-function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
-
-function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
-function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
-function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
-function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
-function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
-function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
-function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
-function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
-function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
-
-
-////////////////////////////////////////////
-/////// functions for bv32 type /////////////
-// Theorem prover does not see INT_ADD etc.
-// we are treating unsigned ops now
-////////////////////////////////////////////
-function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
-function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
-
-function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
-function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
-function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
-
-//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
-//only enabled with bv theory
-// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
-// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
-
-//////////////////////////////////
-// Generic C Arithmetic operations
-/////////////////////////////////
-
-//Is this sound for bv32?
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
- axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
- INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
-
-//we just keep this axiom for size = 1
-axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
-
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
-
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
-
-function MULT(a:int, b:int) returns (int); // a*b
-//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-// Not sure if these axioms hold for BV too, just commet them for BV
-
-
-
-//uninterpreted binary op
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-
-//////////////////////////////////////////
-//// Bitwise ops (uninterpreted, used with int)
-//////////////////////////////////////////
-
-
- function BIT_BAND(a:int, b:int) returns (x:int);
-
-
- function BIT_BOR(a:int, b:int) returns (x:int);
- function BIT_BXOR(a:int, b:int) returns (x:int);
- function BIT_BNOT(a:int) returns (int);
-
-
-
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function PTR_NOT(a:int) returns (int);
-axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
-axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-
-function NewAlloc(x:int, y:int) returns (z:int);
-
-//Comments below make HAVOC_malloc deterministic
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-//requires obj_size >= 0;
-free requires INT_GEQ(obj_size, 0);
-modifies alloc;
-ensures new == old(alloc);
-//ensures alloc > new + obj_size;
-ensures INT_GT(alloc, INT_ADD(new, obj_size));
-//ensures alloc == NewAlloc(old(alloc), obj_size);
-
-
-
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-
-/*
-//bv functions
-function bv8ToInt(bv8) returns (int);
-function bv16ToInt(bv16) returns (int);
-function bv32ToInt(bv32) returns (int);
-function bv64ToInt(bv64) returns (int);
-
-function intToBv8(int) returns (bv8);
-function intToBv16(int) returns (bv16);
-function intToBv32(int) returns (bv32);
-function intToBv64(int) returns (bv64);
-
-axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
-axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
-axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
-axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
-
-axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
-axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
-axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
-axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
-*/
-
-
-
-var Res_0_COMPLETED : [int]int;
-var Res_0_EVENT : [int]int;
-var Res_KERNEL_SOURCE:[int]int;
-var Res_0_LOCK : [int]int;
-var Res_PROBED:[int]int;
-
-//Pointer constants
-
-//Function pointer constants
-const unique BDLCallDriverCompletionRoutine : int;
-const unique BDLDevicePowerIoCompletion : int;
-const unique BDLSystemPowerIoCompletion : int;
-
-
-axiom(BDLCallDriverCompletionRoutine != 0);
-const unique BDLSystemPowerCompleted : int;
-axiom(BDLSystemPowerCompleted != 0);
-var cancelLockStatus_0 : int;
-
-var created_irp_0 : int;
-
-const unique g_DebugLevel : int;
-axiom(g_DebugLevel != 0);
-const unique hdevobj : int;
-axiom(hdevobj != 0);
-
-
-procedure DRIVER_CANCEL(a0:int, a1:int);
-
-
-
-procedure ExFreePoolWithTag(a0:int, a1:int);
-
-
-
-procedure FN_BDDI_CLOSEHANDLE(a0:int, a1:int) returns (ret:int);
-
-
-
-procedure FN_BDDI_REGISTERNOTIFY(a0:int, a1:int) returns (ret:int);
-
-
-
-procedure FN_BDSI_INITIALIZERESOURCES(a0:int, a1:int) returns (ret:int);
-
-
-
-procedure FN_BDSI_RELEASERESOURCES(a0:int) returns (ret:int);
-
-
-
-procedure FN_BDSI_REMOVEDEVICE(a0:int) returns (ret:int);
-
-
-
-procedure FN_BDSI_SETPOWERSTATE(a0:int, a1:int) returns (ret:int);
-
-
-
-procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
-
-
-
-procedure IoDeleteDevice(a0:int);
-
-
-
-procedure IoDetachDevice(a0:int);
-
-
-
-procedure IoReleaseRemoveLockAndWaitEx(a0:int, a1:int, a2:int);
-
-
-
-procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
-
-
-
-procedure IoSetDeviceInterfaceState(a0:int, a1:int) returns (ret:int);
-
-
-
-procedure KfLowerIrql(a0:int);
-
-
-
-procedure KfRaiseIrql(a0:int) returns (ret:int);
-
-
-
-procedure PoRequestPowerIrp(a0:int, a1:int, a2:int, a3:int, a4:int, a5:int) returns (ret:int);
-
-
-
-procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
-
-
-
-procedure PoStartNextPowerIrp(a0:int);
-
-
-
-procedure RtlFreeUnicodeString(a0:int);
-
-
-
-procedure __storm_assert_dummy();
-
-
-
-procedure __storm_atomic_begin_dummy();
-
-
-
-procedure __storm_atomic_end_dummy();
-
-
-
-procedure __storm_init_begin_dummy();
-
-
-
-procedure __storm_init_end_dummy();
-
-
-
-
-
-
-procedure storm_nondet() returns (ret:int);
-
-
-
-procedure storm_main();
- free requires 0 < alloc;
- requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
- modifies alloc, k, errorReached, raiseException, __storm_atomic, __storm_init, cancelLockStatus_0, created_irp_0, alloc, __storm_thread_id, __storm_thread_done_1, __storm_thread_done_2, __storm_thread_done_3, __storm_thread_done_4, Res_0_COMPLETED, Res_0_EVENT, Res_KERNEL_SOURCE, Res_0_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_0_T.CurrentLocation__IRP, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.StackCount__IRP;
-
-
-
-implementation storm_main()
-{
- var inline$BDLGetDebugLevel$398$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$407$myNondetVar_0: int, inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$: int, inline$BDLGetDebugLevel$681$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$55$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$2$: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$4$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$21$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$487$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$57$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$567$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$584$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$: int, inline$BDLGetDebugLevel$475$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$375$myNondetVar_0: int, inline$BDLGetDebugLevel$525$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$548$myNondetVar_0: int, inline$BDLGetDebugLevel$49$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$result.memset$1683.8$14$: int, inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$596$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$167$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$601$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$31$myVar_0: int, inline$IoGetCurrentIrpStackLocation$31$myVar_1: int, inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$529$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$6$havoc_stringTemp: int, inline$CallCompletionRoutine$28$myNondetVar_0: int, inline$BDLGetDebugLevel$239$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$result.BDLPnPStop$2180.0$1$: int, inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$storm_PoCallDriver$1$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLGetDebugLevel$8$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$71$myVar_0: int, inline$IoGetCurrentIrpStackLocation$71$myVar_1: int, inline$BDLCallDriverCompletionRoutine$22$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetNextIrpStackLocation$8$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$10$havoc_stringTemp: int, inline$RemoveHeadList$5$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLGetDebugLevel$394$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$84$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$520$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$702$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$792$myNondetVar_0: int, inline$BDLGetDebugLevel$733$myNondetVar_0: int, inline$BDLGetDebugLevel$317$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.memset$1683.8$14$: int, inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$10$myNondetVar_0: int, inline$BDLGetDebugLevel$508$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLSystemPowerIoCompletion$28$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$343$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$555$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$79$myVar_0: int, inline$IoGetCurrentIrpStackLocation$79$myVar_1: int, inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$: int, inline$IoGetCurrentIrpStackLocation$52$havoc_stringTemp: int, inline$BDLGetDebugLevel$27$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$341$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$CallCompletionRoutine$30$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$: int, inline$IoGetCurrentIrpStackLocation$53$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$34$: int, inline$BDLDevicePowerIoCompletion$1$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$113$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$4$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$737$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16_.1: int, inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$315$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$47$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$284$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$6$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$421$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$49$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$7$$result.memset$1683.8$14$: int, inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$41$myNondetVar_0: int, inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$125$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$44$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetNextIrpStackLocation$5$myNondetVar_0: int, inline$BDLGetDebugLevel$418$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$21$: int, inline$IoSetNextIrpStackLocation$9$havoc_stringTemp: int, inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$289$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$22$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$519$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp: int, inline$BDLGetDebugLevel$530$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$650$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$210$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$: int, inline$BDLGetDebugLevel$471$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$2$myVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$26$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$3$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$305$myNondetVar_0: int, inline$BDLGetDebugLevel$506$myNondetVar_0: int, inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$46$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetCurrentIrpStackLocation$147$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$636$myNondetVar_0: int, inline$BDLGetDebugLevel$493$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$111$myNondetVar_0: int, inline$BDLGetDebugLevel$388$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$483$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$43$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$BDLGetDebugLevel$778$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$3$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$42$myVar_0: int, inline$IoGetCurrentIrpStackLocation$42$myVar_1: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$299$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$309$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$24$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$22$myNondetVar_0: int, inline$BDLGetDebugLevel$319$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$18$: int, inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$352$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$BDLGetDebugLevel$120$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12_.1: int, inline$BDLGetDebugLevel$100$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetNextIrpStackLocation$6$myVar_0: int, inline$IoGetCurrentIrpStackLocation$23$myVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$143$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$72$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$107$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoSetNextIrpStackLocation$14$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$28$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$35$myNondetVar_0: int, inline$BDLGetDebugLevel$624$myNondetVar_0: int, inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$: int, inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$360$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$56$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$38$myVar_1: int, inline$IoGetCurrentIrpStackLocation$38$myVar_0: int, inline$BDLGetDebugLevel$525$myNondetVar_0: int, inline$BDLGetDebugLevel$450$myNondetVar_0: int, inline$BDLGetDebugLevel$363$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$153$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$771$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$26$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$54$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPQueryStop$0$$result.BDLPnPQueryStop$2074.0$1$: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLGetDebugLevel$578$myNondetVar_0: int, inline$BDLGetDebugLevel$235$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$29$myNondetVar_0: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$: int, inline$BDLGetDebugLevel$382$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$581$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_getThreadID$3$tid: int, inline$BDLCallDriverCompletionRoutine$24$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoSetNextIrpStackLocation$12$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$: int, inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$670$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$50$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$96$myVar_1: int, inline$IoGetCurrentIrpStackLocation$96$myVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$23$: int, inline$BDLPnP$0$$result.BDLPnPQueryStop$916.32$29$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$799$myNondetVar_0: int, inline$BDLGetDebugLevel$610$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$: int, inline$IoGetCurrentIrpStackLocation$47$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$618$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$303$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$11$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IsListEmpty$2$$result.IsListEmpty$8096.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$: int, inline$BDLGetDebugLevel$60$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$640$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp: int, inline$RemoveHeadList$0$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$148$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$743$myNondetVar_0: int, inline$BDLGetDebugLevel$770$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$41$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$99$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$30$$result.memset$1683.8$14$: int, inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$: int, inline$BDLCallDriverCompletionRoutine$20$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$561$myNondetVar_0: int, inline$BDLGetDebugLevel$56$myNondetVar_0: int, inline$BDLGetDebugLevel$583$myNondetVar_0: int, inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$0$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$41$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$477$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$: int, inline$IoSetNextIrpStackLocation$13$myVar_0: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$681$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$34$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$421$myNondetVar_0: int, inline$BDLGetDebugLevel$59$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$47$myNondetVar_0: int, inline$BDLGetDebugLevel$530$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$690$myNondetVar_0: int, inline$BDLGetDebugLevel$426$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$: int, inline$BDLGetDebugLevel$165$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$112$myNondetVar_0: int, inline$BDLGetDebugLevel$458$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$261$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$20$: int, inline$IsListEmpty$5$myNondetVar_0: int, inline$BDLGetDebugLevel$324$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$17$: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$29$: int, inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12_.1: int, inline$BDLGetDebugLevel$309$myNondetVar_0: int, inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$: int, inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$126$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$395$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$580$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$25$myNondetVar_0: int, inline$BDLGetDebugLevel$527$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$766$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$88$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$94$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$473$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLHandleRemove$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$3$myVar_0: int, inline$IoGetCurrentIrpStackLocation$3$myVar_1: int, inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$10$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$437$myNondetVar_0: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLPnP$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$8$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$550$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$576$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$12$myVar_1: int, inline$IoGetCurrentIrpStackLocation$12$myVar_0: int, inline$BDLGetDebugLevel$633$myNondetVar_0: int, inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$144$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$63$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$80$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$649$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$14$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$27$: int, inline$BDLGetDebugLevel$729$myNondetVar_0: int, inline$BDLGetDebugLevel$274$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$144$myVar_0: int, inline$IoGetCurrentIrpStackLocation$144$myVar_1: int, inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLPnP$0$$result.DbgPrint$987.0$42$: int, inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$73$myVar_0: int, inline$IoGetCurrentIrpStackLocation$73$myVar_1: int, inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$57$myVar_0: int, inline$RemoveHeadList$0$$result.RemoveHeadList$8121.0$1$: int, inline$BDLGetDebugLevel$657$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.DbgPrint$2037.0$48$: int, inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$25$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$465$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$5$tempBoogie0: int, inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$401$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$644$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$: int, inline$IoGetCurrentIrpStackLocation$86$myVar_0: int, inline$IoGetCurrentIrpStackLocation$86$myVar_1: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$4$: int, inline$CallCompletionRoutine$9$myNondetVar_0: int, inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$803$myNondetVar_0: int, inline$BDLGetDebugLevel$137$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$280$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$326$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$77$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$108$havoc_stringTemp: int, inline$BDLGetDebugLevel$434$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$146$havoc_stringTemp: int, inline$BDLCallLowerLevelDriverAndWait$1$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$260$myNondetVar_0: int, inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3153.26$14$: int, inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$0$$result.storm_IoCallDriver$2453.25$39$: int, inline$BDLGetDebugLevel$567$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$241$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$148$myNondetVar_0: int, inline$myInitDriver$0$myVar_0: int, inline$BDLGetDebugLevel$794$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0: int, inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$3$: int, inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$630$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$8$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$250$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp: int, inline$storm_IoCallDriver$4$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$283$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$147$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$725$myNondetVar_0: int, inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLGetDebugLevel$161$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$586$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$177$$result.BDLGetDebugLevel$39.0$1$: int, inline$IsListEmpty$3$$result.IsListEmpty$8096.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$: int, inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$603$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$75$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$0$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$82$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$511$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$788$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$8$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$118$myVar_1: int, inline$IoGetCurrentIrpStackLocation$118$myVar_0: int, inline$BDLGetDebugLevel$633$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$9$: int, inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$7$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$IoGetCurrentIrpStackLocation$112$myVar_1: int, inline$IoGetCurrentIrpStackLocation$112$myVar_0: int, inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$19$myNondetVar_0: int, inline$BDLGetDebugLevel$617$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$80$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$114$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$326$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$416$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$83$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$33$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$23$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$: int, inline$BDLGetDebugLevel$612$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$289$myNondetVar_0: int, inline$BDLGetDebugLevel$572$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$501$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$31$havoc_stringTemp: int, inline$BDLGetDebugLevel$16$myNondetVar_0: int, inline$storm_IoCallDriver$2$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$151$myVar_0: int, inline$IoGetCurrentIrpStackLocation$151$myVar_1: int, inline$BDLDevicePowerIoCompletion$28$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$665$myNondetVar_0: int, inline$BDLGetDebugLevel$272$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$: int, inline$BDLGetDebugLevel$214$myNondetVar_0: int, inline$BDLGetDebugLevel$77$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$83$myNondetVar_0: int, inline$BDLGetDebugLevel$80$myNondetVar_0: int, inline$BDLGetDebugLevel$664$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$12$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4: int, inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$: int, inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$601$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$34$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$61$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$17$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$IoGetCurrentIrpStackLocation$65$myVar_0: int, inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8: int, inline$BDLGetDebugLevel$205$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$109$myVar_1: int, inline$IoGetCurrentIrpStackLocation$109$myVar_0: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$34$: int, inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$: int, inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$8$: int, inline$IoGetCurrentIrpStackLocation$28$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoGetCurrentIrpStackLocation$50$myVar_1: int, inline$IoGetCurrentIrpStackLocation$50$myVar_0: int, inline$BDLGetDebugLevel$133$myNondetVar_0: int, inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$51$myNondetVar_0: int, inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8: int, inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_PoCallDriver$4$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLGetDebugLevel$166$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$1$havoc_stringTemp: int, inline$BDLGetDebugLevel$310$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$145$myNondetVar_0: int, inline$BDLGetDebugLevel$128$myNondetVar_0: int, inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$349$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$21$: int, inline$BDLGetDebugLevel$72$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetNextIrpStackLocation$10$myVar_0: int, inline$BDLGetDebugLevel$160$myNondetVar_0: int, inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$513$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$75$havoc_stringTemp: int, inline$BDLGetDebugLevel$314$myNondetVar_0: int, inline$BDLGetDebugLevel$696$myNondetVar_0: int, inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$654$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$14$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$635$myNondetVar_0: int, inline$BDLGetDebugLevel$85$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$204$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$3$myNondetVar_0: int, inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$474$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1: int, inline$BDLDevicePowerIoCompletion$23$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$102$myVar_1: int, inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$628$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$: int, inline$BDLGetDebugLevel$590$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$478$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$123$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$153$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$142$havoc_stringTemp: int, inline$BDLGetDebugLevel$652$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$643$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$129$myNondetVar_0: int, inline$BDLGetDebugLevel$515$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$9$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$5$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$2$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$92$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$myVar_1: int, inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$2$: int, inline$IoGetCurrentIrpStackLocation$48$myVar_0: int, inline$IoGetCurrentIrpStackLocation$48$myVar_1: int, inline$BDLGetDebugLevel$316$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$20$: int, inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$70$havoc_stringTemp: int, inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$56$havoc_stringTemp: int, inline$BDLHandleRemove$0$$callresult.$2437.63$27$: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$29$: int, inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0: int, inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$17$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$0$myVar_1: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$BDLGetDebugLevel$58$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$25$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$564$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$139$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4: int, inline$RemoveHeadList$3$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLGetDebugLevel$491$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$310$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$122$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0: int, inline$BDLGetDebugLevel$729$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$377$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12: int, inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$20$: int, inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCallDriver$0$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$11$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$41$: int, inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$: int, inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$169$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$: int, inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLPnPQueryRemove$0$havoc_stringTemp: int, inline$storm_getThreadID$8$tid: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$20$: int, inline$IoGetCurrentIrpStackLocation$34$havoc_stringTemp: int, inline$BDLGetDebugLevel$676$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$88$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$4$: int, inline$BDLDevicePowerIoCompletion$10$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetCurrentIrpStackLocation$62$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$35$havoc_stringTemp: int, inline$IoGetNextIrpStackLocation$2$myNondetVar_0: int, inline$BDLGetDebugLevel$659$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$740$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$9$myVar_0: int, inline$BDLGetDebugLevel$523$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$177$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$8$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$25$$callresult.$1687.68$15$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$23$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16: int, inline$IoGetCurrentIrpStackLocation$23$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$256$myNondetVar_0: int, inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$294$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$24$myNondetVar_0: int, inline$BDLGetDebugLevel$485$myNondetVar_0: int, inline$BDLGetDebugLevel$2$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$: int, inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$BDLGetDebugLevel$475$myNondetVar_0: int, inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$97$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$12$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$196$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$28$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$9$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$573$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$381$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoSetNextIrpStackLocation$1$havoc_stringTemp: int, inline$BDLGetDebugLevel$87$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$9$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$IoGetCurrentIrpStackLocation$14$myNondetVar_0: int, inline$BDLGetDebugLevel$173$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$283$myNondetVar_0: int, inline$BDLGetDebugLevel$298$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$647$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$myNondetVar_0: int, inline$BDLGetDebugLevel$194$myNondetVar_0: int, inline$BDLGetDebugLevel$610$myNondetVar_0: int, inline$BDLGetDebugLevel$772$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$178$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$622$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$: int, inline$IoGetCurrentIrpStackLocation$148$myVar_0: int, inline$IoGetCurrentIrpStackLocation$148$myVar_1: int, inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$536$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$30$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$: int, inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0: int, inline$BDLPnP$0$$result.BDLPnPStop$934.27$31$: int, inline$BDLGetDebugLevel$715$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp: int, inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12_.1: int, inline$IoGetCurrentIrpStackLocation$51$myVar_0: int, inline$IoGetCurrentIrpStackLocation$51$myVar_1: int, inline$BDLDevicePowerIoCompletion$2$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$149$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$30$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$549$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$779$myNondetVar_0: int, inline$BDLGetDebugLevel$168$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$311$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$419$myNondetVar_0: int, inline$BDLGetDebugLevel$651$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLCleanupDataHandles$1$$irql$6$3249.28$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetNextIrpStackLocation$11$myVar_0: int, inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$433$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$8$: int, inline$BDLGetDebugLevel$374$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$524$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$595$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$IoGetCurrentIrpStackLocation$58$myVar_0: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$799$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$232$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$IoGetCurrentIrpStackLocation$28$myVar_1: int, inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$409$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$114$myVar_1: int, inline$IoGetCurrentIrpStackLocation$114$myVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$: int, inline$IoGetCurrentIrpStackLocation$58$havoc_stringTemp: int, inline$BDLGetDebugLevel$21$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$660$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$23$: int, inline$IoSetNextIrpStackLocation$15$myVar_0: int, inline$BDLGetDebugLevel$683$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$17$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$23$: int, inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8: int, inline$IoSkipCurrentIrpStackLocation$0$myNondetVar_0: int, inline$BDLGetDebugLevel$64$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$8$: int, inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$storm_KeAcquireSpinLock$2$$result.storm_getThreadID$128.29$1$: int, inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$: int, inline$BDLDevicePowerIoCompletion$9$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$673$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$282$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$714$myNondetVar_0: int, inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLGetDebugLevel$299$myNondetVar_0: int, inline$BDLGetDebugLevel$380$myNondetVar_0: int, inline$BDLGetDebugLevel$774$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$97$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4: int, inline$BDLGetDebugLevel$322$myNondetVar_0: int, inline$BDLGetDebugLevel$202$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$3$: int, inline$BDLGetDebugLevel$197$myNondetVar_0: int, inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$22$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$607$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$: int, inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$: int, inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$531$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$118$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$: int, inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$9$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$213$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$36$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoSetNextIrpStackLocation$3$tempBoogie0: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLCallDriverCompletionRoutine$0$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$12$tempBoogie0: int, inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$: int, inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_IoCallDriver$9$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8: int, inline$IoGetCurrentIrpStackLocation$129$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$: int, inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoSetNextIrpStackLocation$10$tempBoogie0: int, inline$BDLGetDebugLevel$287$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$22$myNondetVar_0: int, inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$29$: int, inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$28$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$15$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$32$: int, inline$BDLGetDebugLevel$767$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$604$myNondetVar_0: int, inline$BDLGetDebugLevel$223$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$753$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$780$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$52$myVar_1: int, inline$IoGetCurrentIrpStackLocation$52$myVar_0: int, inline$IoGetCurrentIrpStackLocation$71$myNondetVar_0: int, inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$752$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$: int, inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$485$$result.BDLGetDebugLevel$39.0$1$: int, inline$RemoveHeadList$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$500$myNondetVar_0: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$: int, inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$775$myNondetVar_0: int, inline$BDLGetDebugLevel$266$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$4$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$16$: int, inline$BDLDevicePowerIoCompletion$15$$result.memset$1683.8$14$: int, inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$69$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLDevicePowerIoCompletion$1$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$652$myNondetVar_0: int, inline$BDLGetDebugLevel$110$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$20$: int, inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$2$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$: int, inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$76$havoc_stringTemp: int, inline$BDLGetDebugLevel$685$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$61$myVar_1: int, inline$IoGetCurrentIrpStackLocation$61$myVar_0: int, inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$599$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$308$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$775$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$11$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$15$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$417$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$96$havoc_stringTemp: int, inline$BDLGetDebugLevel$273$myNondetVar_0: int, inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$636$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$125$myNondetVar_0: int, inline$CallCompletionRoutine$21$myNondetVar_0: int, inline$BDLGetDebugLevel$28$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$155$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetNextIrpStackLocation$4$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$238$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$137$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$138$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$252$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$: int, inline$BDLGetDebugLevel$776$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$190$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$803$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$65$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$23$myVar_1: int, inline$BDLGetDebugLevel$712$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$24$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$446$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$133$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$712$myNondetVar_0: int, inline$BDLGetDebugLevel$717$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$18$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$128$havoc_stringTemp: int, inline$BDLGetDebugLevel$323$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$762$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$43$myVar_1: int, inline$IoGetCurrentIrpStackLocation$43$myVar_0: int, inline$BDLDevicePowerIoCompletion$12$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$BDLGetDebugLevel$428$myNondetVar_0: int, inline$BDLGetDebugLevel$447$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$337$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$737$myNondetVar_0: int, inline$BDLGetDebugLevel$208$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$743$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$320$myNondetVar_0: int, inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$7$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$451$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8: int, inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$229$myNondetVar_0: int, inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$23$: int, inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$100$myVar_0: int, inline$IoGetCurrentIrpStackLocation$100$myVar_1: int, inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLCallDriverCompletionRoutine$15$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8: int, inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$12$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$759$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$12$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$591$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$: int, inline$BDLGetDebugLevel$505$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0: int, inline$BDLGetDebugLevel$716$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$: int, inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$91$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$292$myNondetVar_0: int, inline$BDLGetDebugLevel$749$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$84$myNondetVar_0: int, inline$BDLGetDebugLevel$250$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$40$: int, inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$66$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$551$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$35$myNondetVar_0: int, inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$2$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$6$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$103$myVar_1: int, inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$662$myNondetVar_0: int, inline$BDLGetDebugLevel$726$myNondetVar_0: int, inline$BDLGetDebugLevel$403$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$668$myNondetVar_0: int, inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$9$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$756$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$256$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$: int, inline$IoGetCurrentIrpStackLocation$73$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$: int, inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$29$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$122$myVar_0: int, inline$IoGetCurrentIrpStackLocation$122$myVar_1: int, inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$: int, inline$IoGetCurrentIrpStackLocation$13$myVar_0: int, inline$IoGetCurrentIrpStackLocation$13$myVar_1: int, inline$BDLGetDebugLevel$123$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0: int, inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$36$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$230$myNondetVar_0: int, inline$BDLGetDebugLevel$415$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$117$havoc_stringTemp: int, inline$BDLGetDebugLevel$787$myNondetVar_0: int, inline$BDLGetDebugLevel$74$myNondetVar_0: int, inline$BDLGetDebugLevel$672$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$3$: int, inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1: int, inline$BDLGetDebugLevel$359$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$81$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IsListEmpty$1$$result.IsListEmpty$8096.0$1$: int, inline$BDLGetDebugLevel$502$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4: int, inline$IoGetCurrentIrpStackLocation$13$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$5$myVar_1: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$: int, inline$BDLGetDebugLevel$105$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$688$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$109$havoc_stringTemp: int, inline$BDLGetDebugLevel$516$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$380$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$535$myNondetVar_0: int, inline$BDLGetDebugLevel$403$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$135$myNondetVar_0: int, inline$BDLGetDebugLevel$620$myNondetVar_0: int, inline$BDLGetDebugLevel$247$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$189$myNondetVar_0: int, inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$: int, inline$BDLDevicePowerIoCompletion$8$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$148$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$32$: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$18$: int, inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$: int, inline$BDLGetDebugLevel$399$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoCopyCurrentIrpStackLocationToNext$3$$result.memcpy$25110.4$3$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$700$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$287$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$1$tempBoogie0: int, inline$BDLGetDebugLevel$109$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$193$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$115$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$: int, inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$22$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$4$myNondetVar_0: int, inline$BDLGetDebugLevel$664$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLGetDebugLevel$141$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$495$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$BDLGetDebugLevel$18$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$2$$result.memcpy$25110.4$3$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$52$: int, inline$IoGetCurrentIrpStackLocation$14$myVar_1: int, inline$IoGetCurrentIrpStackLocation$14$myVar_0: int, inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$26$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$94$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$579$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$499$myNondetVar_0: int, inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$631$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$60$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$279$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12: int, inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$139$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12_.1: int, inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$595$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$callresult.$3172.84$15$: int, inline$BDLGetDebugLevel$275$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$: int, inline$storm_IoCallDriver$11$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLPnPStop$0$$result.DbgPrint$2190.0$3$: int, inline$IoGetCurrentIrpStackLocation$10$myVar_1: int, inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$129$myVar_1: int, inline$IoGetCurrentIrpStackLocation$129$myVar_0: int, inline$IoGetCurrentIrpStackLocation$60$havoc_stringTemp: int, inline$BDLGetDebugLevel$227$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.BDLCallLowerLevelDriverAndWait$1975.43$13$: int, inline$IoGetCurrentIrpStackLocation$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$452$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16_.1: int, inline$BDLGetDebugLevel$224$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$347$myNondetVar_0: int, inline$BDLGetDebugLevel$150$myNondetVar_0: int, inline$BDLGetDebugLevel$510$myNondetVar_0: int, inline$BDLGetDebugLevel$369$myNondetVar_0: int, inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$21$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$125$myNondetVar_0: int, inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$74$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$233$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$201$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$547$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$7$myNondetVar_0: int, inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$: int, inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$12$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$20$: int, inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnP$0$$result.question.16$: int, inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$151$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$17$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$580$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$457$myNondetVar_0: int, inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$: int, inline$BDLDevicePowerIoCompletion$24$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$747$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$29$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$512$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$551$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$50$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$8$: int, inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$231$myNondetVar_0: int, inline$BDLGetDebugLevel$619$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$211$myNondetVar_0: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$: int, inline$IoGetCurrentIrpStackLocation$54$myVar_1: int, inline$IoGetCurrentIrpStackLocation$54$myVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$29$: int, inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$64$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$226$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$5$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$146$myNondetVar_0: int, inline$BDLGetDebugLevel$321$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$status$3$859.36$BDLPnP$8: int, inline$BDLGetDebugLevel$791$myNondetVar_0: int, inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetNextIrpStackLocation$9$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$1$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$596$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$51$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$111$myVar_0: int, inline$IoGetCurrentIrpStackLocation$111$myVar_1: int, inline$BDLDevicePowerIoCompletion$0$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoSetNextIrpStackLocation$11$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$52$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$237$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$17$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$107$myVar_1: int, inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$23$: int, inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$2$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLCallDriverCompletionRoutine$30$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$582$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$364$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$: int, inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$: int, inline$BDLGetDebugLevel$371$myNondetVar_0: int, inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$: int, inline$BDLPnP$0$$result.IoAcquireRemoveLockEx$879.0$14$: int, inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$CallCompletionRoutine$3$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$: int, inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4: int, inline$IoSetNextIrpStackLocation$15$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$23$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp: int, inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$27$: int, inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$: int, inline$BDLGetDebugLevel$723$myNondetVar_0: int, inline$BDLGetDebugLevel$414$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$88$myVar_0: int, inline$IoGetCurrentIrpStackLocation$88$myVar_1: int, inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$174$myNondetVar_0: int, inline$BDLGetDebugLevel$415$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$562$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$533$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$710$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$115$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$17$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$494$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$122$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$: int, inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16_.1: int, inline$BDLGetDebugLevel$436$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$98$myNondetVar_0: int, inline$BDLGetDebugLevel$634$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoSetNextIrpStackLocation$11$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$15$myVar_0: int, inline$IoGetCurrentIrpStackLocation$15$myVar_1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLHandleRemove$0$myNondetVar_0: int, inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$91$havoc_stringTemp: int, inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$: int, inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$509$myNondetVar_0: int, inline$BDLGetDebugLevel$278$myNondetVar_0: int, inline$BDLGetDebugLevel$489$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$12$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$: int, inline$IoGetCurrentIrpStackLocation$146$myVar_1: int, inline$BDLDevicePowerIoCompletion$17$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$110$myNondetVar_0: int, inline$BDLGetDebugLevel$773$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$29$: int, inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$89$myVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$26$myNondetVar_0: int, inline$BDLLockHandleList$0$myNondetVar_0: int, inline$BDLLockHandleList$0$myNondetVar_1: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$140$myNondetVar_0: int, inline$BDLGetDebugLevel$609$myNondetVar_0: int, inline$BDLGetDebugLevel$728$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$97$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$351$myNondetVar_0: int, inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$9$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$15$: int, inline$BDLGetDebugLevel$18$myNondetVar_0: int, inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$574$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$435$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$126$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$RemoveHeadList$2$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetNextIrpStackLocation$11$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$59$myNondetVar_0: int, inline$BDLGetDebugLevel$788$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$476$myNondetVar_0: int, inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$108$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$92$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$682$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$458$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$20$: int, inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$: int, inline$RemoveHeadList$5$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLGetDebugLevel$179$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetNextIrpStackLocation$5$havoc_stringTemp: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$: int, inline$BDLGetDebugLevel$107$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$100$myNondetVar_0: int, inline$BDLGetDebugLevel$27$myNondetVar_0: int, inline$BDLGetDebugLevel$609$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$588$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$: int, inline$BDLGetDebugLevel$62$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$127$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCleanupNotificationStruct$0$$result.KfRaiseIrql$3141.8$12$: int, inline$BDLDevicePowerIoCompletion$18$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$44$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$29$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$: int, inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$260$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$45$: int, inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$: int, inline$IoGetCurrentIrpStackLocation$80$myNondetVar_0: int, inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$516$myNondetVar_0: int, inline$BDLGetDebugLevel$302$myNondetVar_0: int, inline$BDLGetDebugLevel$754$myNondetVar_0: int, inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$12$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$276$myNondetVar_0: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$: int, inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$: int, inline$BDLGetDebugLevel$105$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$29$: int, inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12: int, inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$355$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$190$myNondetVar_0: int, inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$312$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$697$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$3$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$29$: int, inline$BDLCleanupNotificationStruct$1$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$80$myVar_1: int, inline$BDLDevicePowerIoCompletion$25$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$4$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$142$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoSetNextIrpStackLocation$11$myVar_0: int, inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$425$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$604$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$510$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$141$myVar_1: int, inline$IoGetCurrentIrpStackLocation$141$myVar_0: int, inline$BDLGetDebugLevel$733$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$40$: int, inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$48$myNondetVar_0: int, inline$BDLGetDebugLevel$564$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$411$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$142$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$353$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$180$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$374$myNondetVar_0: int, inline$BDLGetDebugLevel$637$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$756$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$440$myNondetVar_0: int, inline$BDLGetDebugLevel$143$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$166$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$782$myNondetVar_0: int, inline$BDLGetDebugLevel$455$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$31$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$124$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$656$myNondetVar_0: int, inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$27$: int, inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$: int, inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12: int, inline$BDLGetDebugLevel$348$myNondetVar_0: int, inline$IoCopyCurrentIrpStackLocationToNext$1$$result.memcpy$25110.4$3$: int, inline$BDLGetDebugLevel$503$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$317$myNondetVar_0: int, inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$494$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnP$0$$result.DbgPrint$886.0$23$: int, inline$IoGetCurrentIrpStackLocation$53$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$11$myNondetVar_0: int, inline$BDLGetDebugLevel$602$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$116$havoc_stringTemp: int, inline$BDLPnPRemove$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp: int, inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$481$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$: int, inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$255$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$: int, inline$BDLGetDebugLevel$669$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$4$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$: int, inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4: int, inline$storm_PoCallDriver$3$$result.storm_PoCallDriver$494.0$1$: int, inline$CallCompletionRoutine$11$myNondetVar_0: int, inline$RemoveHeadList$2$$result.RemoveHeadList$8121.0$1$: int, inline$BDLGetDebugLevel$364$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0: int, inline$BDLGetDebugLevel$768$myNondetVar_0: int, inline$BDLGetDebugLevel$556$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$16$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$43$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$538$myNondetVar_0: int, inline$BDLGetDebugLevel$666$myNondetVar_0: int, inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetNextIrpStackLocation$3$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$: int, inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoGetNextIrpStackLocation$7$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$18$: int, inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12: int, inline$IoGetCurrentIrpStackLocation$108$myNondetVar_0: int, inline$BDLGetDebugLevel$17$myNondetVar_0: int, inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0: int, inline$BDLGetDebugLevel$311$myNondetVar_0: int, inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$430$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$10$havoc_stringTemp: int, inline$BDLGetDebugLevel$584$myNondetVar_0: int, inline$BDLPnPStop$0$$result.DbgPrint$2208.0$21$: int, inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$394$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$14$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$129$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$517$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$30$havoc_stringTemp: int, inline$BDLPnP$0$$result.BDLPnPCancelRemove$952.35$33$: int, inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$329$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$130$myNondetVar_0: int, inline$BDLGetDebugLevel$709$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$275$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$780$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$187$myNondetVar_0: int, inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12_.1: int, inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0: int, inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp: int, inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$614$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$41$myVar_1: int, inline$IoGetCurrentIrpStackLocation$41$myVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$: int, inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$686$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$59$havoc_stringTemp: int, inline$BDLGetDebugLevel$170$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$: int, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8_.1: int, inline$BDLGetDebugLevel$774$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$412$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$105$myVar_1: int, inline$IoGetCurrentIrpStackLocation$105$myVar_0: int, inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoCallDriver$6$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$73$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$552$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$701$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$587$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLPnP$0$$result.BDLPnPCancelStop$925.33$30$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$105$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$3$$result.storm_getThreadID$128.29$1$: int, inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLGetDebugLevel$472$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$396$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$63$myVar_1: int, inline$IoGetCurrentIrpStackLocation$63$myVar_0: int, inline$BDLGetDebugLevel$428$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$7$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$342$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$639$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$323$myNondetVar_0: int, inline$BDLGetDebugLevel$296$myNondetVar_0: int, inline$BDLGetDebugLevel$300$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1: int, inline$BDLDevicePowerIoCompletion$6$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$303$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$93$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$115$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$220$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$6$$callresult.$1687.68$15$: int, inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12: int, inline$BDLGetDebugLevel$158$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$74$myVar_0: int, inline$BDLGetDebugLevel$322$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$451$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$81$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$26$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$120$myVar_0: int, inline$IoGetCurrentIrpStackLocation$120$myVar_1: int, inline$BDLGetDebugLevel$619$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12: int, inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$782$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$623$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$39$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$168$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$: int, inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLGetDebugLevel$101$myNondetVar_0: int, inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$42$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$36$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$22$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$147$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$139$myVar_0: int, inline$IoGetCurrentIrpStackLocation$139$myVar_1: int, inline$IoGetNextIrpStackLocation$8$havoc_stringTemp: int, inline$BDLGetDebugLevel$640$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$212$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$93$myVar_0: int, inline$IoGetCurrentIrpStackLocation$93$myVar_1: int, inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$15$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$192$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLCleanupNotificationStruct$0$$irql$3$3113.45$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$8$myNondetVar_0: int, inline$BDLGetDebugLevel$734$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$: int, inline$BDLCleanupNotificationStruct$1$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$: int, inline$BDLGetDebugLevel$438$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$6$myNondetVar_0: int, inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$731$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$340$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$185$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$368$myNondetVar_0: int, inline$BDLGetDebugLevel$345$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12: int, inline$BDLGetDebugLevel$34$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$: int, inline$RemoveHeadList$3$$result.RemoveHeadList$8121.0$1$: int, inline$BDLGetDebugLevel$461$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$myNondetVar_0: int, inline$BDLGetDebugLevel$481$myNondetVar_0: int, inline$BDLGetDebugLevel$339$myNondetVar_0: int, inline$BDLGetDebugLevel$488$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$246$myNondetVar_0: int, inline$BDLGetDebugLevel$400$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$20$: int, inline$IoGetNextIrpStackLocation$12$havoc_stringTemp: int, inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$: int, inline$IoGetCurrentIrpStackLocation$3$havoc_stringTemp: int, inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$: int, inline$BDLGetDebugLevel$20$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$124$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$2$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$3$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$665$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$2$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$44$myNondetVar_0: int, inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoSetNextIrpStackLocation$6$myVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$24$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCleanupDataHandles$1$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$83$myVar_1: int, inline$IoGetCurrentIrpStackLocation$83$myVar_0: int, inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$29$: int, inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLPnPStop$0$$result.DbgPrint$2243.0$39$: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$136$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$29$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$33$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$519$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$152$myVar_1: int, inline$IoGetCurrentIrpStackLocation$152$myVar_0: int, inline$BDLGetDebugLevel$698$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$7$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$25$myNondetVar_0: int, inline$BDLGetDebugLevel$435$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$518$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$89$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$16$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$21$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$279$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$70$myNondetVar_0: int, inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$597$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$35$myVar_0: int, inline$IoGetCurrentIrpStackLocation$35$myVar_1: int, inline$BDLGetDebugLevel$611$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$45$: int, inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$125$myVar_1: int, inline$IoGetCurrentIrpStackLocation$125$myVar_0: int, inline$BDLGetDebugLevel$281$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$427$$result.BDLGetDebugLevel$39.0$1$: int, inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$9$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$103$myVar_0: int, inline$BDLCallDriverCompletionRoutine$21$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$771$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$272$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$0$myNondetVar_0: int, inline$BDLGetDebugLevel$692$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$42$havoc_stringTemp: int, inline$BDLGetDebugLevel$550$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$11$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$747$myNondetVar_0: int, inline$BDLGetDebugLevel$259$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$16$myVar_1: int, inline$IoGetCurrentIrpStackLocation$16$myVar_0: int, inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoGetCurrentIrpStackLocation$37$havoc_stringTemp: int, inline$BDLGetDebugLevel$25$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$: int, inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$430$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$: int, inline$IoGetCurrentIrpStackLocation$103$myNondetVar_0: int, inline$BDLGetDebugLevel$378$myNondetVar_0: int, inline$BDLGetDebugLevel$202$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$43$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$26$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$9$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$: int, inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$: int, inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLCallDriverCompletionRoutine$28$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$127$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$233$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$223$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$175$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$18$: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$: int, inline$BDLGetDebugLevel$163$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$662$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$: int, inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$105$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$55$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$57$myVar_1: int, inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12_.1: int, inline$BDLPnPSurpriseRemoval$0$$status$4$2534.16$BDLPnPSurpriseRemoval$12: int, inline$BDLGetDebugLevel$384$myNondetVar_0: int, inline$BDLPnP$0$$result.BDLPnPRemove$961.29$34$: int, inline$BDLGetDebugLevel$69$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$678$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$193$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$632$myNondetVar_0: int, inline$BDLGetDebugLevel$445$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$174$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$183$myNondetVar_0: int, inline$BDLGetDebugLevel$196$myNondetVar_0: int, inline$BDLGetDebugLevel$117$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoSkipCurrentIrpStackLocation$1$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$: int, inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$751$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$208$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$: int, inline$BDLPnPStop$0$$result.DbgPrint$2231.0$33$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$15$: int, inline$BDLPnP$0$$result.DbgPrint$865.0$3$: int, inline$BDLCleanupDataHandles$1$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4: int, inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$786$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$44$myVar_0: int, inline$IoGetCurrentIrpStackLocation$44$myVar_1: int, inline$BDLGetDebugLevel$629$myNondetVar_0: int, inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12_.1: int, inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$96$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$258$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$50$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_PoCallDriver$3$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLGetDebugLevel$338$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$29$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$: int, inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$4$: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$507$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$131$myVar_0: int, inline$IoGetCurrentIrpStackLocation$131$myVar_1: int, inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$22$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$72$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupDataHandles$0$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4: int, inline$BDLGetDebugLevel$7$myNondetVar_0: int, inline$BDLGetDebugLevel$792$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$447$myNondetVar_0: int, inline$BDLPnPStart$0$$result.memset$1992.4$25$: int, inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$261$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$608$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$252$myNondetVar_0: int, inline$BDLGetDebugLevel$769$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$553$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$727$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$71$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$40$myVar_0: int, inline$IoGetCurrentIrpStackLocation$40$myVar_1: int, inline$BDLGetDebugLevel$253$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$249$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$10$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$124$myNondetVar_0: int, inline$BDLGetDebugLevel$209$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$470$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$95$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0: int, inline$BDLGetDebugLevel$478$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$143$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$772$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$: int, inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$26$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$: int, inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$758$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$433$myNondetVar_0: int, inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8: int, inline$CallCompletionRoutine$20$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$266$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$4$: int, inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$151$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$784$myNondetVar_0: int, inline$BDLGetDebugLevel$422$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$callresult.$1687.68$15$: int, inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$64$myVar_0: int, inline$IoGetCurrentIrpStackLocation$64$myVar_1: int, inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$480$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$111$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$566$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$350$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$23$: int, inline$IoGetCurrentIrpStackLocation$25$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$20$: int, inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0: int, inline$BDLGetDebugLevel$40$myNondetVar_0: int, inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$35$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$42$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoCopyCurrentIrpStackLocationToNext$5$$result.memcpy$25110.4$3$: int, inline$BDLGetDebugLevel$286$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$17$myVar_0: int, inline$IoGetCurrentIrpStackLocation$17$myVar_1: int, inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$: int, inline$BDLGetDebugLevel$90$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$138$myVar_1: int, inline$IoGetCurrentIrpStackLocation$138$myVar_0: int, inline$IoGetCurrentIrpStackLocation$127$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$754$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$: int, inline$BDLGetDebugLevel$498$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$0$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$158$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$385$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$140$havoc_stringTemp: int, inline$BDLPnPCancelRemove$0$$result.BDLCallLowerLevelDriverAndWait$2332.43$13$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$15$: int, inline$IoSetNextIrpStackLocation$5$myVar_0: int, inline$BDLGetDebugLevel$697$myNondetVar_0: int, inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$347$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$99$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$86$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$90$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$74$havoc_stringTemp: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$: int, inline$IoGetCurrentIrpStackLocation$89$havoc_stringTemp: int, inline$BDLGetDebugLevel$116$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$254$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$783$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$713$myNondetVar_0: int, inline$CallCompletionRoutine$19$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$188$myNondetVar_0: int, inline$BDLGetDebugLevel$330$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLPnPQueryStop$0$$result.BDLCallLowerLevelDriverAndWait$2116.47$13$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$139$havoc_stringTemp: int, inline$BDLGetDebugLevel$0$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$781$$result.BDLGetDebugLevel$39.0$1$: int, $result.storm_IoAllocateIrp$100.0$1$: int, inline$BDLGetDebugLevel$683$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$680$myNondetVar_0: int, inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$: int, inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$195$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$198$myNondetVar_0: int, inline$BDLGetDebugLevel$492$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3153.26$14$: int, inline$IoGetCurrentIrpStackLocation$66$havoc_stringTemp: int, inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$8$: int, inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$14$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$189$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$218$myNondetVar_0: int, inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp: int, inline$BDLGetDebugLevel$437$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$32$: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$18$: int, inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$153$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$: int, inline$storm_IoCallDriver$10$$result.storm_IoCallDriver$456.0$1$: int, inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$211$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$108$myVar_0: int, inline$IoGetCurrentIrpStackLocation$108$myVar_1: int, inline$BDLGetDebugLevel$424$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$325$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$4$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$568$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$22$: int, inline$IoSetNextIrpStackLocation$12$myVar_0: int, inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$548$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$649$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$96$myNondetVar_0: int, inline$BDLGetDebugLevel$414$myNondetVar_0: int, inline$BDLGetDebugLevel$95$myNondetVar_0: int, inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$673$myNondetVar_0: int, inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$553$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$7$: int, inline$BDLGetDebugLevel$732$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$294$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$222$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$150$myNondetVar_0: int, inline$BDLGetDebugLevel$112$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$21$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$16$: int, inline$BDLGetDebugLevel$344$myNondetVar_0: int, inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$7$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp: int, inline$BDLGetDebugLevel$307$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$34$: int, inline$BDLRemoveHandleFromList$0$myNondetVar_1: int, inline$BDLRemoveHandleFromList$0$myNondetVar_0: int, inline$BDLGetDebugLevel$578$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$748$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$: int, inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$131$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$534$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$450$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$5$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$8$: int, inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$20$: int, inline$BDLGetDebugLevel$766$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$34$: int, inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$768$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$659$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$719$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$509$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$763$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$626$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$257$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$: int, inline$BDLGetDebugLevel$671$myNondetVar_0: int, inline$BDLGetDebugLevel$786$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$371$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$131$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$528$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$61$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$793$myNondetVar_0: int, inline$BDLGetDebugLevel$453$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$538$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$308$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$: int, inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$477$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$502$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$2$: int, inline$IoGetCurrentIrpStackLocation$33$myVar_0: int, inline$IoGetCurrentIrpStackLocation$33$myVar_1: int, inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLGetDebugLevel$668$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$472$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$243$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$15$myNondetVar_0: int, inline$BDLGetDebugLevel$240$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$582$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$482$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$: int, inline$BDLDevicePowerIoCompletion$3$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$404$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$634$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$63$havoc_stringTemp: int, inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4_.1: int, inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$666$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLDevicePowerIoCompletion$20$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPStart$0$$result.DbgPrint$2037.0$43$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$742$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$20$: int, inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$8$$result.memset$1683.8$14$: int, inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$87$havoc_stringTemp: int, inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$57$: int, inline$BDLGetDebugLevel$130$myNondetVar_0: int, inline$BDLGetDebugLevel$62$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$23$: int, inline$IsListEmpty$4$myNondetVar_0: int, inline$BDLGetDebugLevel$417$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$246$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$236$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryRemove$0$$result.BDLPnPQueryRemove$2254.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$441$myNondetVar_0: int, inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IsListEmpty$2$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$104$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$639$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$IoGetCurrentIrpStackLocation$107$myVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$184$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$7$: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$224$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$12$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$IoGetCurrentIrpStackLocation$48$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoSkipCurrentIrpStackLocation$2$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$270.0$1$: int, inline$BDLGetDebugLevel$39$myNondetVar_0: int, inline$RemoveHeadList$2$myNondetVar_0: int, inline$BDLGetDebugLevel$373$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$: int, inline$BDLGetDebugLevel$332$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$679$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$21$myNondetVar_0: int, inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$69$myVar_0: int, inline$IoGetCurrentIrpStackLocation$2$myNondetVar_0: int, inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16: int, inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$620$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$486$myNondetVar_0: int, inline$BDLGetDebugLevel$460$myNondetVar_0: int, inline$BDLPnP$0$$result.DbgPrint$865.0$8$: int, inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$714$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$734$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$151$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$145$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$401$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$704$myNondetVar_0: int, inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp: int, inline$BDLGetDebugLevel$442$myNondetVar_0: int, inline$BDLGetDebugLevel$432$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$23$: int, inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$236$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$1$myNondetVar_0: int, inline$BDLGetDebugLevel$375$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$41$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoSkipCurrentIrpStackLocation$2$myNondetVar_0: int, inline$BDLGetDebugLevel$717$myNondetVar_0: int, inline$BDLGetDebugLevel$346$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$: int, inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$BDLSystemPowerIoCompletion$17$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$13$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$207$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$116$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$70$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$: int, inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$11$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$: int, inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$141$havoc_stringTemp: int, inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16_.1: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$755$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$24$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$32$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$581$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$15$: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$: int, inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$304$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$96$myNondetVar_0: int, inline$BDLGetDebugLevel$730$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$: int, inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$231$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$589$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$131$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$: int, inline$BDLSystemPowerIoCompletion$4$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$37$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$127$myVar_1: int, inline$IoGetCurrentIrpStackLocation$127$myVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$598$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$85$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$53$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$: int, inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLPnPStart$0$$result.DbgPrint$2063.0$56$: int, inline$BDLDevicePowerIoCompletion$11$myNondetVar_0: int, inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLCallDriverCompletionRoutine$6$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$268$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4_.1: int, inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$416$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$: int, inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$19$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$0$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$BDLPnPStop$0$$result.DbgPrint$2208.0$16$: int, inline$BDLDevicePowerIoCompletion$20$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLCleanupNotificationStruct$1$$irql$3$3113.45$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$133$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$4$: int, inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$40$: int, inline$IoGetCurrentIrpStackLocation$135$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLSystemPowerIoCompletion$2$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$186$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$27$: int, inline$BDLGetDebugLevel$205$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$result.memset$1683.8$14$: int, inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$50$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$28$havoc_stringTemp: int, inline$BDLGetDebugLevel$689$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$505$myNondetVar_0: int, inline$BDLGetDebugLevel$156$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$262$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$: int, inline$IoGetCurrentIrpStackLocation$130$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$334$myNondetVar_0: int, inline$BDLGetDebugLevel$185$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$513$myNondetVar_0: int, inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16: int, inline$BDLGetDebugLevel$643$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$210$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.memcpy$2018.0$38$: int, inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$606$myNondetVar_0: int, inline$BDLGetDebugLevel$442$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$: int, inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$356$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$: int, inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$storm_getThreadID$9$tid: int, inline$storm_PoCallDriver$5$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$18$: int, inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_getThreadID$6$tid: int, inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$: int, inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$329$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$33$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$132$havoc_stringTemp: int, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$: int, inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4: int, inline$BDLGetDebugLevel$431$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$26$myNondetVar_0: int, inline$BDLGetDebugLevel$176$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$104$myVar_0: int, inline$IoGetCurrentIrpStackLocation$104$myVar_1: int, inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16_.1: int, inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$29$: int, inline$BDLGetDebugLevel$293$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$94$myVar_1: int, inline$IoGetCurrentIrpStackLocation$94$myVar_0: int, inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$344$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$426$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$739$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$27$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$75$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$751$myNondetVar_0: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$: int, inline$BDLGetDebugLevel$539$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$490$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$68$myVar_0: int, inline$IoGetCurrentIrpStackLocation$68$myVar_1: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$40$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$38$myNondetVar_0: int, inline$BDLGetDebugLevel$621$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$98$myVar_1: int, inline$IoGetCurrentIrpStackLocation$98$myVar_0: int, inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$20$myVar_0: int, inline$IoGetCurrentIrpStackLocation$20$myVar_1: int, inline$BDLCallLowerLevelDriverAndWait$5$havoc_stringTemp: int, inline$BDLGetDebugLevel$64$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$400$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$557$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$28$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$29$: int, inline$IoGetCurrentIrpStackLocation$81$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$3$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$15$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoSetNextIrpStackLocation$7$tempBoogie0: int, inline$BDLPnPStart$0$$result.BDLPnPStart$1954.0$1$: int, inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$413$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$4$tempBoogie0: int, inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4: int, inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$541$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$119$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$796$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$128$myVar_0: int, inline$IoGetCurrentIrpStackLocation$128$myVar_1: int, inline$IoGetCurrentIrpStackLocation$151$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$75$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$139$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$: int, inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$351$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$81$myVar_1: int, inline$IoGetCurrentIrpStackLocation$81$myVar_0: int, inline$BDLGetDebugLevel$306$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$787$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$249$myNondetVar_0: int, inline$BDLGetDebugLevel$789$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$387$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$13$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$144$myNondetVar_0: int, inline$BDLGetDebugLevel$51$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$34$: int, inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$651$myNondetVar_0: int, inline$BDLGetDebugLevel$521$myNondetVar_0: int, inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$65$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$794$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$97$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$140$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12: int, inline$IoGetCurrentIrpStackLocation$103$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$23$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$130$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$13$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$135$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$386$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$55$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$2$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$: int, inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLHandleRemove$1$$result.storm_IoCallDriver$2453.25$39$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$: int, inline$IoGetCurrentIrpStackLocation$90$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$225$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$99$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$555$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$367$myNondetVar_0: int, inline$BDLLockHandleList$1$myNondetVar_1: int, inline$BDLLockHandleList$1$myNondetVar_0: int, inline$BDLGetDebugLevel$120$myNondetVar_0: int, inline$BDLGetDebugLevel$118$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$110$myVar_1: int, inline$IoGetCurrentIrpStackLocation$110$myVar_0: int, inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$119$myVar_0: int, inline$IoGetCurrentIrpStackLocation$119$myVar_1: int, inline$BDLGetDebugLevel$197$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$72$myVar_1: int, inline$IoGetCurrentIrpStackLocation$72$myVar_0: int, inline$BDLGetDebugLevel$391$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$100$havoc_stringTemp: int, inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$114$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$103$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$708$myNondetVar_0: int, inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$5$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$78$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$33$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$93$havoc_stringTemp: int, inline$BDLGetDebugLevel$537$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$750$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$12$$result.memset$1683.8$14$: int, inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLGetDebugLevel$544$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$3$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$456$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoCallDriver$12$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$709$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$: int, inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$11$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$219$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$115$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$18$: int, inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLPnP$0$$result.BDLPnPStart$906.28$28$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$149$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$558$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$20$havoc_stringTemp: int, inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$667$myNondetVar_0: int, inline$BDLGetDebugLevel$267$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$IoGetCurrentIrpStackLocation$40$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$90$myNondetVar_0: int, inline$BDLGetDebugLevel$104$myNondetVar_0: int, inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0: int, inline$BDLDevicePowerIoCompletion$8$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$761$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$515$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$5$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$291$myNondetVar_0: int, inline$BDLGetDebugLevel$736$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$: int, inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$75$myVar_0: int, inline$IoGetCurrentIrpStackLocation$75$myVar_1: int, inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$789$myNondetVar_0: int, inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4_.1: int, inline$BDLGetDebugLevel$354$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$23$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$22$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$741$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$187$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$IoGetNextIrpStackLocation$1$myVar_0: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$4$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$85$havoc_stringTemp: int, inline$BDLGetDebugLevel$624$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$11$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$159$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$54$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$: int, inline$BDLGetDebugLevel$658$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLGetDebugLevel$541$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$85$myVar_1: int, inline$IoGetCurrentIrpStackLocation$85$myVar_0: int, inline$IoGetCurrentIrpStackLocation$78$myVar_1: int, inline$IoGetCurrentIrpStackLocation$78$myVar_0: int, inline$BDLDevicePowerIoCompletion$5$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp: int, inline$BDLGetDebugLevel$365$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$130$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$86$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoSetNextIrpStackLocation$4$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$132$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$3$myNondetVar_0: int, inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLCallLowerLevelDriverAndWait$3$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$73$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$: int, inline$BDLGetDebugLevel$575$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$424$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$20$$result.memset$1683.8$14$: int, inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4: int, inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$: int, inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$29$: int, inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$82$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$228$myNondetVar_0: int, inline$BDLGetDebugLevel$397$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$161$myNondetVar_0: int, inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$718$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$37$: int, inline$IoGetCurrentIrpStackLocation$39$myNondetVar_0: int, inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_PoCallDriver$104.29$3$: int, inline$IoGetCurrentIrpStackLocation$69$myVar_1: int, inline$BDLGetDebugLevel$790$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$642$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$611$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$8$myNondetVar_0: int, inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$49$myVar_1: int, inline$IoGetCurrentIrpStackLocation$49$myVar_0: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$240$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$565$myNondetVar_0: int, inline$BDLGetDebugLevel$573$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$412$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$625$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$11$myVar_1: int, inline$BDLGetDebugLevel$201$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$798$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$8$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$45$havoc_stringTemp: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$3$: int, inline$BDLGetDebugLevel$227$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$307$myNondetVar_0: int, inline$BDLGetDebugLevel$801$myNondetVar_0: int, inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$328$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$65$myVar_1: int, inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$376$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$7$myVar_0: int, inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$17$myNondetVar_0: int, inline$BDLGetDebugLevel$53$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$349$myNondetVar_0: int, inline$BDLGetDebugLevel$163$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$182$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$30$myVar_1: int, inline$IoGetCurrentIrpStackLocation$30$myVar_0: int, inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$23$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$30$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_PoCallDriver$4$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$20$: int, inline$BDLPnPStart$0$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$callresult.$3284.85$14$: int, inline$storm_PoCallDriver$2$$result.storm_PoCallDriver$494.0$1$: int, inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$532$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$22$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$593$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$540$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$171$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$335$myNondetVar_0: int, inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$57$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPStart$0$$result.DbgPrint$2063.0$61$: int, inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$15$: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$23$: int, inline$BDLPnP$0$$result.BDLPnPQueryRemove$943.34$32$: int, inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_getThreadID$7$tid: int, inline$BDLGetDebugLevel$785$myNondetVar_0: int, inline$BDLGetDebugLevel$630$myNondetVar_0: int, inline$BDLGetDebugLevel$503$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$46$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$18$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$: int, inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$: int, inline$CallCompletionRoutine$2$myNondetVar_0: int, inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$79$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$120$myNondetVar_0: int, inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12: int, inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$: int, inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$8$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$6$tempBoogie0: int, inline$BDLGetDebugLevel$171$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$277$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12_.1: int, inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$3$: int, inline$BDLGetDebugLevel$554$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$15$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$30$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$760$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$5$myVar_0: int, inline$IoGetNextIrpStackLocation$1$havoc_stringTemp: int, inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$110$myNondetVar_0: int, inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4: int, inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8_.1: int, inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$623$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$102$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$379$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$65$myNondetVar_0: int, inline$BDLGetDebugLevel$350$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$12$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$153$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$563$myNondetVar_0: int, inline$BDLGetDebugLevel$200$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$366$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$140$myVar_0: int, inline$IoGetCurrentIrpStackLocation$140$myVar_1: int, inline$BDLDevicePowerIoCompletion$5$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLGetDebugLevel$692$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$556$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$callresult.$1999.70$26$: int, inline$IoGetCurrentIrpStackLocation$46$myVar_0: int, inline$IoGetCurrentIrpStackLocation$46$myVar_1: int, inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$512$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoGetCurrentIrpStackLocation$70$myVar_1: int, inline$IoGetCurrentIrpStackLocation$70$myVar_0: int, inline$BDLDevicePowerIoCompletion$5$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$124$myVar_0: int, inline$IoGetCurrentIrpStackLocation$124$myVar_1: int, inline$BDLGetDebugLevel$357$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$32$: int, inline$IoSkipCurrentIrpStackLocation$1$myNondetVar_0: int, inline$BDLGetDebugLevel$617$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$: int, inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1: int, inline$storm_getThreadID$2$tid: int, inline$IoGetCurrentIrpStackLocation$146$myVar_0: int, inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoGetCurrentIrpStackLocation$89$myVar_1: int, inline$BDLGetDebugLevel$722$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$746$myNondetVar_0: int, inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$641$myNondetVar_0: int, inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$95$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$500$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$myNondetVar_0: int, inline$BDLGetDebugLevel$705$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$600$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$638$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$result.malloc$279.0$3$: int, inline$BDLGetDebugLevel$331$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$203$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$84$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$544$myNondetVar_0: int, inline$BDLGetDebugLevel$83$myNondetVar_0: int, inline$BDLGetDebugLevel$569$myNondetVar_0: int, inline$BDLGetDebugLevel$479$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$4$: int, inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$34$: int, inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$144$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$3$myVar_0: int, inline$IoGetCurrentIrpStackLocation$37$myNondetVar_0: int, inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLSystemPowerIoCompletion$25$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp: int, inline$BDLGetDebugLevel$444$myNondetVar_0: int, inline$BDLGetDebugLevel$19$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$143$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$613$myNondetVar_0: int, inline$BDLGetDebugLevel$345$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$119$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp: int, inline$BDLGetDebugLevel$657$myNondetVar_0: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$1$: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$497$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$10$myVar_0: int, inline$BDLGetDebugLevel$545$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$: int, inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12: int, inline$BDLGetDebugLevel$69$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$547$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLPnP$0$$result.DbgPrint$886.0$18$: int, inline$BDLGetDebugLevel$690$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$318$myNondetVar_0: int, inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$IoSkipCurrentIrpStackLocation$0$havoc_stringTemp: int, inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$6$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$40$: int, inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$: int, inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$410$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$605$myNondetVar_0: int, inline$BDLGetDebugLevel$142$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$167$myNondetVar_0: int, inline$BDLGetDebugLevel$613$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$8$: int, inline$IoGetCurrentIrpStackLocation$12$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$696$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$41$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$15$havoc_stringTemp: int, inline$BDLGetDebugLevel$420$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLCleanupDataHandles$1$$callresult.$3284.85$14$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$546$myNondetVar_0: int, inline$BDLGetDebugLevel$399$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$22$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$myNondetVar_0: int, inline$BDLGetDebugLevel$216$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$20$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$577$myNondetVar_0: int, inline$BDLGetDebugLevel$752$myNondetVar_0: int, inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$606$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$301$myNondetVar_0: int, inline$BDLGetDebugLevel$732$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$217$myNondetVar_0: int, inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8_.1: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$: int, inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$10$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$153$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$506$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$386$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$281$myNondetVar_0: int, inline$BDLGetDebugLevel$52$myNondetVar_0: int, inline$BDLGetDebugLevel$296$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$29$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$: int, inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp: int, inline$BDLGetDebugLevel$454$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$20$: int, inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$24$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$: int, inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$687$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$229$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16_.1: int, inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$141$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$62$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$34$: int, inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$: int, inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$23$: int, inline$IoSetNextIrpStackLocation$10$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$31$myNondetVar_0: int, inline$BDLGetDebugLevel$54$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$76$myVar_1: int, inline$IoGetCurrentIrpStackLocation$76$myVar_0: int, inline$BDLGetDebugLevel$647$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$314$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$66$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$295$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$18$: int, inline$BDLDevicePowerIoCompletion$1$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$765$myNondetVar_0: int, inline$BDLGetDebugLevel$238$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$9$myVar_0: int, inline$IoGetCurrentIrpStackLocation$9$myVar_1: int, inline$BDLGetDebugLevel$297$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$135$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$676$myNondetVar_0: int, inline$BDLGetDebugLevel$453$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$20$: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$15$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$0$myNondetVar_0: int, inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$429$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$127$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$109$myNondetVar_0: int, inline$BDLGetDebugLevel$589$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$: int, inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$63$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$745$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$9$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$: int, inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$: int, inline$IoSkipCurrentIrpStackLocation$2$myVar_1: int, inline$IoSkipCurrentIrpStackLocation$2$myVar_0: int, inline$BDLGetDebugLevel$469$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$134$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLPnPStart$0$$bdsiInitializeResourcesParams$7$1964.32$BDLPnPStart$16: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$107$havoc_stringTemp: int, inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$687$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLPnPCancelRemove$2314.0$1$: int, inline$BDLGetDebugLevel$29$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$89$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$98$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$43$: int, inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$104$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$0$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$12$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$18$: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$20$: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$3$: int, inline$BDLGetDebugLevel$392$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$myNondetVar_0: int, inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IsListEmpty$3$myNondetVar_0: int, inline$BDLGetDebugLevel$496$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$244$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$769$myNondetVar_0: int, inline$BDLGetDebugLevel$738$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$38$havoc_stringTemp: int, inline$BDLGetDebugLevel$574$myNondetVar_0: int, inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12_.1: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoGetCurrentIrpStackLocation$113$myNondetVar_0: int, inline$BDLGetDebugLevel$92$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$194$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$7$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$67$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$: int, inline$BDLGetDebugLevel$629$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLGetDebugLevel$276$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$585$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$464$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$370$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$384$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$800$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$38$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$618$myNondetVar_0: int, inline$BDLGetDebugLevel$593$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$14$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$126$myVar_0: int, inline$IoGetCurrentIrpStackLocation$126$myVar_1: int, inline$BDLGetDebugLevel$463$myNondetVar_0: int, inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$718$myNondetVar_0: int, inline$CallCompletionRoutine$12$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLPnP$0$$result.BDLPnPSurpriseRemoval$973.38$35$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$: int, inline$storm_getThreadID$12$tid: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$: int, inline$BDLSystemPowerIoCompletion$1$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$457$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetCurrentIrpStackLocation$58$myNondetVar_0: int, inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$15$: int, inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$102$havoc_stringTemp: int, inline$storm_IoCallDriver$7$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$576$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$18$: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IsListEmpty$0$$result.IsListEmpty$8096.0$1$: int, inline$BDLGetDebugLevel$262$myNondetVar_0: int, inline$BDLGetDebugLevel$761$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$86$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$17$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$40$: int, inline$IoSetNextIrpStackLocation$14$myVar_0: int, inline$BDLGetDebugLevel$8$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$363$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$234$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$myInitDriver$0$myNondetVar_0: int, inline$myInitDriver$0$myNondetVar_1: int, inline$BDLGetDebugLevel$694$myNondetVar_0: int, inline$BDLGetDebugLevel$66$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$88$havoc_stringTemp: int, inline$BDLGetDebugLevel$607$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$312$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$361$myNondetVar_0: int, inline$BDLGetDebugLevel$221$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$: int, inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8: int, inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$405$myNondetVar_0: int, inline$BDLGetDebugLevel$570$myNondetVar_0: int, inline$BDLGetDebugLevel$409$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$6$havoc_stringTemp: int, inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$117$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$6$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$77$havoc_stringTemp: int, inline$BDLGetDebugLevel$71$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$: int, inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$461$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$: int, inline$BDLGetDebugLevel$247$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$109$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$: int, inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$: int, inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$: int, inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$258$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$285$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$152$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$94$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$20$: int, inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$27$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$99$havoc_stringTemp: int, inline$BDLGetDebugLevel$377$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$: int, inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$779$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$152$myNondetVar_0: int, inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$783$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$: int, inline$IoSetNextIrpStackLocation$5$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$: int, inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$20$: int, inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$434$myNondetVar_0: int, inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$25$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$455$myNondetVar_0: int, inline$BDLGetDebugLevel$615$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$575$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$140$myNondetVar_0: int, inline$storm_getThreadID$0$tid: int, inline$IoGetCurrentIrpStackLocation$117$myNondetVar_0: int, inline$BDLGetDebugLevel$183$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$143$myVar_1: int, inline$BDLGetDebugLevel$448$myNondetVar_0: int, inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$172$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$34$: int, inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$191$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$18$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$68$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$332$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$3$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$102$myVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$: int, inline$BDLGetDebugLevel$423$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$148$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$64$myNondetVar_0: int, inline$BDLGetDebugLevel$45$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryRemove$0$$result.IoSetDeviceInterfaceState$2272.29$13$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLPnPStop$0$$callresult.$2204.67$14$: int, inline$CallCompletionRoutine$8$myNondetVar_0: int, inline$BDLPnPStart$0$havoc_stringTemp: int, inline$BDLGetDebugLevel$288$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12: int, inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$37$myNondetVar_0: int, inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLPnPStop$0$havoc_stringTemp: int, inline$BDLGetDebugLevel$269$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$: int, inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$8$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$679$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$19$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$254$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLCallDriverCompletionRoutine$7$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$7$: int, inline$BDLGetDebugLevel$797$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$215$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$176$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$4$havoc_stringTemp: int, inline$BDLGetDebugLevel$165$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$251$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$800$myNondetVar_0: int, inline$BDLGetDebugLevel$735$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$99$myVar_0: int, inline$IoGetCurrentIrpStackLocation$99$myVar_1: int, inline$BDLGetDebugLevel$121$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$492$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$767$myNondetVar_0: int, inline$IsListEmpty$5$$result.IsListEmpty$8096.0$1$: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$31$myNondetVar_0: int, inline$BDLGetDebugLevel$522$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$30$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$669$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$153$myVar_0: int, inline$IoGetCurrentIrpStackLocation$153$myVar_1: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$4$: int, inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLPnP$0$$result.storm_IoCallDriver$995.29$47$: int, inline$BDLGetDebugLevel$86$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$8$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_IoCallDriver$108.29$4$: int, inline$IoGetCurrentIrpStackLocation$111$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$265$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$420$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$723$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$86$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLDevicePowerIoCompletion$6$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$: int, inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$122$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$16$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$24$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$23$: int, inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetCurrentIrpStackLocation$20$myNondetVar_0: int, inline$CallCompletionRoutine$5$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$136$myVar_1: int, inline$IoGetCurrentIrpStackLocation$136$myVar_0: int, inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$439$myNondetVar_0: int, inline$BDLGetDebugLevel$594$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.DbgPrint$1966.0$3$: int, inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$241$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$8$tempBoogie0: int, inline$BDLGetDebugLevel$343$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$128$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$result.DbgPrint$1023.0$49$: int, inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$542$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetNextIrpStackLocation$3$myVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$591$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$560$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$59$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4: int, inline$BDLGetDebugLevel$225$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$26$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$32$: int, inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$228$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$67$myVar_1: int, inline$IoGetCurrentIrpStackLocation$67$myVar_0: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$15$: int, inline$IsListEmpty$4$$result.IsListEmpty$8096.0$1$: int, inline$BDLHandleRemove$0$havoc_stringTemp: int, inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$313$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4: int, inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp: int, inline$BDLGetDebugLevel$405$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$602$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.DbgPrint$1979.0$20$: int, inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$154$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$: int, inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$: int, inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$65$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$3$: int, inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$700$myNondetVar_0: int, inline$BDLGetDebugLevel$427$myNondetVar_0: int, inline$BDLGetDebugLevel$170$myNondetVar_0: int, inline$BDLGetDebugLevel$470$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$19$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$15$: int, inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$716$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$699$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$80$myVar_0: int, inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$483$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$16$: int, inline$BDLGetDebugLevel$216$myNondetVar_0: int, inline$BDLGetDebugLevel$379$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$102$myNondetVar_0: int, inline$BDLGetDebugLevel$793$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$670$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$13$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$378$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$41$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$21$myVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$15$: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$667$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$217$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$4$: int, inline$BDLCleanupNotificationStruct$1$myNondetVar_1: int, inline$BDLCleanupNotificationStruct$1$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$725$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$471$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$BDLDevicePowerIoCompletion$27$$callresult.$1687.68$15$: int, inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$263$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$739$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$34$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$695$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$67$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$22$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$: int, inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$23$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$23$: int, inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$20$: int, inline$BDLDevicePowerIoCompletion$20$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$69$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0: int, inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$: int, inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$290$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$628$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$: int, inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$263$myNondetVar_0: int, inline$BDLGetDebugLevel$603$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$: int, inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$9$: int, inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$764$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLReleaseHandleList$1$myNondetVar_0: int, inline$BDLReleaseHandleList$1$myNondetVar_1: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$38$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$467$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$402$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$316$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$79$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp: int, inline$BDLGetDebugLevel$626$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$: int, inline$BDLGetDebugLevel$501$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$2$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLPnPRemove$0$$result.BDLPnPRemove$2476.0$1$: int, inline$BDLGetDebugLevel$638$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$36$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$71$havoc_stringTemp: int, inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$27$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$6$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$648$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$126$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$: int, inline$BDLGetDebugLevel$540$myNondetVar_0: int, inline$BDLGetDebugLevel$755$myNondetVar_0: int, inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$489$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$: int, inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$269$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$259$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$29$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$23$$result.memset$1683.8$14$: int, inline$IoGetCurrentIrpStackLocation$120$havoc_stringTemp: int, inline$BDLGetDebugLevel$526$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$22$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$464$myNondetVar_0: int, inline$BDLGetDebugLevel$616$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$67$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$8$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$76$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_getThreadID$11$tid: int, inline$BDLGetDebugLevel$731$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$32$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$20$: int, inline$BDLDevicePowerIoCompletion$9$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoSkipCurrentIrpStackLocation$0$myVar_1: int, inline$IoSkipCurrentIrpStackLocation$0$myVar_0: int, inline$BDLSystemPowerIoCompletion$7$myNondetVar_0: int, inline$BDLGetDebugLevel$200$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$98$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$302$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$IoGetCurrentIrpStackLocation$67$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$13$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$8$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$53$myVar_0: int, inline$IoGetCurrentIrpStackLocation$53$myVar_1: int, inline$BDLGetDebugLevel$432$myNondetVar_0: int, inline$BDLGetDebugLevel$367$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$132$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$188$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$: int, inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$138$myNondetVar_0: int, inline$BDLGetDebugLevel$157$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$532$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$14$myNondetVar_0: int, inline$BDLGetDebugLevel$468$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$119$myNondetVar_0: int, inline$BDLGetDebugLevel$214$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$56$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$706$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$333$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$: int, inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$587$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$605$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$5$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$84$myVar_0: int, inline$IoGetCurrentIrpStackLocation$84$myVar_1: int, inline$BDLGetDebugLevel$122$myNondetVar_0: int, inline$BDLGetDebugLevel$79$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$: int, inline$IoGetCurrentIrpStackLocation$116$myVar_1: int, inline$IoGetCurrentIrpStackLocation$116$myVar_0: int, inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$29$: int, inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$40$: int, inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$763$myNondetVar_0: int, inline$BDLGetDebugLevel$73$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4_.1: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$: int, inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$45$myNondetVar_0: int, inline$BDLGetDebugLevel$490$myNondetVar_0: int, inline$BDLGetDebugLevel$675$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$27$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$577$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$539$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$16$$result.memset$1683.8$14$: int, inline$IoGetNextIrpStackLocation$10$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$397$myNondetVar_0: int, inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$724$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$615$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$306$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$785$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$: int, inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$77$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$callresult.$1687.68$15$: int, inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$288$myNondetVar_0: int, inline$BDLGetDebugLevel$597$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$663$myNondetVar_0: int, inline$BDLGetDebugLevel$499$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$27$myNondetVar_0: int, inline$CallCompletionRoutine$4$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$28$myVar_0: int, inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$395$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12: int, inline$BDLDevicePowerIoCompletion$28$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$29$$result.memset$1683.8$14$: int, inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$62$myVar_0: int, inline$IoGetCurrentIrpStackLocation$62$myVar_1: int, inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$143$myVar_0: int, inline$IoGetCurrentIrpStackLocation$136$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$134$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$68$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$131$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$54$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$29$: int, inline$CallCompletionRoutine$7$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp: int, inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$18$: int, inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$150$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$3$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IsListEmpty$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$myNondetVar_0: int, inline$BDLGetDebugLevel$523$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPQueryStop$0$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.KfRaiseIrql$3141.8$12$: int, inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$90$myVar_1: int, inline$IoGetCurrentIrpStackLocation$90$myVar_0: int, inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12_.1: int, inline$BDLGetDebugLevel$776$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$18$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$: int, inline$BDLGetDebugLevel$521$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$28$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$749$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLDevicePowerIoCompletion$11$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$331$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$192$myNondetVar_0: int, inline$BDLGetDebugLevel$232$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$storm_getThreadID$5$tid: int, inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetNextIrpStackLocation$4$myVar_0: int, inline$BDLGetDebugLevel$297$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$641$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$66$myVar_0: int, inline$IoGetCurrentIrpStackLocation$66$myVar_1: int, inline$BDLGetDebugLevel$402$myNondetVar_0: int, inline$BDLGetDebugLevel$586$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$184$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$408$myNondetVar_0: int, inline$storm_getThreadID$10$tid: int, inline$BDLDevicePowerIoCompletion$30$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoGetCurrentIrpStackLocation$91$myVar_1: int, inline$BDLGetDebugLevel$284$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12_.1: int, inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$29$: int, inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$678$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12: int, inline$IoGetCurrentIrpStackLocation$147$havoc_stringTemp: int, inline$BDLGetDebugLevel$38$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$473$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$699$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoSetNextIrpStackLocation$2$myNondetVar_0: int, inline$BDLGetDebugLevel$328$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$429$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$48$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$270$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$150$myVar_1: int, inline$IoGetCurrentIrpStackLocation$150$myVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLPnP$0$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$14$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$66$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$527$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$29$: int, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$318$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$1$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLGetDebugLevel$493$myNondetVar_0: int, inline$BDLGetDebugLevel$362$myNondetVar_0: int, inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16: int, inline$BDLGetDebugLevel$119$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$3$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$354$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$10$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$355$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$147$myVar_1: int, inline$IoGetCurrentIrpStackLocation$147$myVar_0: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$390$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$207$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$439$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$98$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$23$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$569$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$113$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$720$myNondetVar_0: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$: int, inline$BDLGetDebugLevel$637$myNondetVar_0: int, inline$BDLGetDebugLevel$369$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$: int, inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$26$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$579$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLCallDriverCompletionRoutine$23$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$446$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$68$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLCallDriverCompletionRoutine$13$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$15$: int, inline$BDLPnPQueryStop$0$myNondetVar_1: int, inline$BDLPnPQueryStop$0$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$74$myVar_1: int, inline$BDLGetDebugLevel$491$myNondetVar_0: int, inline$BDLGetDebugLevel$348$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$storm_PoCallDriver$0$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLGetDebugLevel$358$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$callresult.$2419.71$15$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$362$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$404$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$101$myVar_1: int, inline$IoGetCurrentIrpStackLocation$101$myVar_0: int, inline$BDLGetDebugLevel$408$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3218.26$30$: int, inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$235$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$264$myNondetVar_0: int, inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$389$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$: int, inline$BDLGetDebugLevel$172$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$26$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$742$myNondetVar_0: int, inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$319$myNondetVar_0: int, inline$BDLGetDebugLevel$497$myNondetVar_0: int, inline$BDLRemoveHandleFromList$1$myNondetVar_0: int, inline$BDLRemoveHandleFromList$1$myNondetVar_1: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$222$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$myNondetVar_0: int, inline$BDLGetDebugLevel$239$myNondetVar_0: int, inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$18$havoc_stringTemp: int, inline$BDLHandleRemove$1$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$82$havoc_stringTemp: int, inline$BDLGetDebugLevel$146$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$: int, inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$406$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$495$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$94$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$721$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$722$myNondetVar_0: int, inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3218.26$30$: int, inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$504$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$: int, inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$59$myVar_0: int, inline$IoGetCurrentIrpStackLocation$59$myVar_1: int, inline$BDLGetDebugLevel$511$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$: int, inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$9$: int, inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$25$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$24$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$693$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$27$: int, inline$BDLGetDebugLevel$689$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoSetNextIrpStackLocation$8$myVar_0: int, inline$BDLGetDebugLevel$459$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12: int, inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoSetNextIrpStackLocation$2$myVar_0: int, inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$: int, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8: int, inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$132$myVar_1: int, inline$IoGetCurrentIrpStackLocation$132$myVar_0: int, inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLGetDebugLevel$46$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$115$myVar_0: int, inline$IoGetCurrentIrpStackLocation$115$myVar_1: int, inline$BDLGetDebugLevel$370$myNondetVar_0: int, inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLSystemPowerIoCompletion$27$myNondetVar_0: int, inline$BDLGetDebugLevel$13$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$61$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$1$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$82$myVar_0: int, inline$IoGetCurrentIrpStackLocation$82$myVar_1: int, inline$BDLGetDebugLevel$740$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$419$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$770$myNondetVar_0: int, inline$BDLGetDebugLevel$327$myNondetVar_0: int, inline$BDLGetDebugLevel$139$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$29$: int, inline$BDLPnPStart$0$$result.DbgPrint$2005.0$28$: int, inline$BDLGetDebugLevel$162$myNondetVar_0: int, inline$BDLGetDebugLevel$440$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$707$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$IoSetNextIrpStackLocation$15$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLSystemPowerIoCompletion$5$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetNextIrpStackLocation$6$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.IoSetDeviceInterfaceState$2406.29$14$: int, inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$63$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLGetDebugLevel$790$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$25$myVar_1: int, inline$IoGetCurrentIrpStackLocation$25$myVar_0: int, inline$IoGetCurrentIrpStackLocation$18$myNondetVar_0: int, inline$BDLGetDebugLevel$292$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4: int, inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$storm_PoCallDriver$5$$result.storm_IoCallDriver$499.27$2$: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$372$myNondetVar_0: int, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0: int, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1: int, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2: int, inline$BDLGetDebugLevel$646$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$268$myNondetVar_0: int, inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$3$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$707$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLPnPCancelStop$0$$result.BDLCallLowerLevelDriverAndWait$2148.43$13$: int, inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStop$0$$result.DbgPrint$2231.0$28$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$55$myVar_0: int, inline$IoGetCurrentIrpStackLocation$55$myVar_1: int, inline$BDLGetDebugLevel$720$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12: int, inline$BDLCleanupDataHandles$1$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$10$myNondetVar_0: int, inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$154$havoc_stringTemp: int, inline$BDLGetDebugLevel$531$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$20$: int, inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$106$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$130$myVar_1: int, inline$BDLGetDebugLevel$801$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$694$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$382$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$126$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$43$havoc_stringTemp: int, inline$BDLGetDebugLevel$616$myNondetVar_0: int, inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$: int, inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$301$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$425$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$264$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$129$myNondetVar_0: int, inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$12$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$22$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_PoCallDriver$104.29$3$: int, inline$IoGetNextIrpStackLocation$9$myVar_0: int, inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0: int, inline$BDLGetDebugLevel$356$myNondetVar_0: int, inline$BDLGetDebugLevel$182$myNondetVar_0: int, inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$23$: int, inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$16$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$121$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$callresult.$1687.68$15$: int, inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$: int, inline$BDLGetDebugLevel$274$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLGetDebugLevel$203$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$661$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$713$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$: int, inline$IoSetNextIrpStackLocation$7$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$206$myNondetVar_0: int, inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$15$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$9$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$4$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$: int, inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$36$myVar_1: int, inline$IoGetCurrentIrpStackLocation$36$myVar_0: int, inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$353$myNondetVar_0: int, inline$BDLGetDebugLevel$753$myNondetVar_0: int, inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLPnPStop$0$$result.BDLCallLowerLevelDriverAndWait$2227.43$26$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$562$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$61$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$132$myNondetVar_0: int, inline$BDLGetDebugLevel$654$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$748$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$: int, inline$BDLGetDebugLevel$234$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$209$myNondetVar_0: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$: int, inline$BDLGetDebugLevel$104$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$154$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$: int, inline$IoGetCurrentIrpStackLocation$126$havoc_stringTemp: int, inline$RemoveHeadList$1$myNondetVar_0: int, inline$BDLPnPStop$0$myNondetVar_0: int, inline$BDLGetDebugLevel$271$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$3$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$57$: int, inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$: int, inline$BDLGetDebugLevel$149$myNondetVar_0: int, inline$BDLGetDebugLevel$645$myNondetVar_0: int, inline$BDLGetDebugLevel$764$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$423$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$715$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$149$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$112$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$726$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$106$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$154$myVar_1: int, inline$IoGetCurrentIrpStackLocation$154$myVar_0: int, inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$21$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$RemoveHeadList$5$$result.RemoveHeadList$8121.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$102$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$469$myNondetVar_0: int, inline$BDLGetDebugLevel$588$myNondetVar_0: int, inline$BDLGetDebugLevel$514$myNondetVar_0: int, inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$291$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$: int, inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$273$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$22$myVar_0: int, inline$IoGetCurrentIrpStackLocation$22$myVar_1: int, inline$BDLGetFirstHandle$1$myNondetVar_0: int, inline$BDLGetFirstHandle$1$myNondetVar_1: int, inline$BDLSystemPowerIoCompletion$16$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$750$myNondetVar_0: int, inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$: int, inline$BDLPnP$0$$result.DbgPrint$987.0$37$: int, inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLGetDebugLevel$599$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$157$myNondetVar_0: int, inline$BDLGetDebugLevel$528$myNondetVar_0: int, inline$BDLGetDebugLevel$106$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$359$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$230$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$RemoveHeadList$3$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$callresult.$1687.68$15$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$: int, inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$441$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$710$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$92$myVar_1: int, inline$IoGetCurrentIrpStackLocation$92$myVar_0: int, inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$34$: int, inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$410$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$136$myNondetVar_0: int, inline$BDLPnPRemove$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$243$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$20$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$: int, inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$145$myVar_1: int, inline$IoGetCurrentIrpStackLocation$145$myVar_0: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$40$: int, inline$IoGetCurrentIrpStackLocation$24$myVar_0: int, inline$IoGetCurrentIrpStackLocation$24$myVar_1: int, inline$BDLGetDebugLevel$113$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$20$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$: int, inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$798$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$15$: int, inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$2$tempBoogie0: int, inline$IoSetNextIrpStackLocation$13$tempBoogie0: int, inline$BDLCallDriverCompletionRoutine$3$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$0$$result.memcpy$25110.4$3$: int, inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLGetDebugLevel$456$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$40$: int, inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$92$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$686$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$571$myNondetVar_0: int, inline$BDLGetDebugLevel$198$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$650$myNondetVar_0: int, inline$BDLGetDebugLevel$724$myNondetVar_0: int, inline$BDLGetDebugLevel$164$myNondetVar_0: int, inline$BDLGetDebugLevel$393$myNondetVar_0: int, inline$BDLGetDebugLevel$376$myNondetVar_0: int, inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$11$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$570$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$9$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$206$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$18$myVar_1: int, inline$IoGetCurrentIrpStackLocation$18$myVar_0: int, inline$BDLGetDebugLevel$549$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$myNondetVar_0: int, inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$BDLGetDebugLevel$388$myNondetVar_0: int, inline$BDLGetDebugLevel$529$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$144$myNondetVar_0: int, inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$204$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$91$myVar_0: int, inline$IoGetCurrentIrpStackLocation$121$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$15$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$138$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$277$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$4$myVar_0: int, inline$IoSetNextIrpStackLocation$10$havoc_stringTemp: int, inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$77$myVar_0: int, inline$IoGetCurrentIrpStackLocation$77$myVar_1: int, inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1: int, inline$IoGetCurrentIrpStackLocation$135$myVar_0: int, inline$IoGetCurrentIrpStackLocation$135$myVar_1: int, inline$BDLGetDebugLevel$614$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$49$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$285$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$93$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetNextIrpStackLocation$8$myVar_0: int, inline$BDLGetDebugLevel$672$myNondetVar_0: int, inline$BDLGetDebugLevel$762$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$4$: int, inline$IoSetNextIrpStackLocation$6$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$26$myNondetVar_0: int, inline$BDLGetDebugLevel$730$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLGetDebugLevel$727$myNondetVar_0: int, inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8: int, inline$BDLGetDebugLevel$304$myNondetVar_0: int, inline$BDLGetDebugLevel$393$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelStop$0$havoc_stringTemp: int, inline$BDLGetDebugLevel$612$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$130$myVar_0: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$: int, inline$BDLGetDebugLevel$392$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$result.DbgPrint$2243.0$44$: int, inline$storm_getThreadID$4$tid: int, inline$BDLDevicePowerIoCompletion$17$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$522$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$30$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$543$myNondetVar_0: int, inline$BDLGetDebugLevel$335$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$436$myNondetVar_0: int, inline$BDLGetDebugLevel$390$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$22$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoSetNextIrpStackLocation$14$tempBoogie0: int, inline$IoGetCurrentIrpStackLocation$37$myVar_0: int, inline$IoGetCurrentIrpStackLocation$37$myVar_1: int, inline$BDLGetDebugLevel$39$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$result.IoSetDeviceInterfaceState$2406.29$14$: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$0$myNondetVar_0: int, inline$BDLGetDebugLevel$84$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$51$myNondetVar_0: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$: int, inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$16$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$: int, inline$BDLGetDebugLevel$462$myNondetVar_0: int, inline$BDLGetDebugLevel$32$myNondetVar_0: int, inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4_.1: int, inline$BDLCleanupNotificationStruct$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$15$: int, inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$245$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$: int, inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp: int, inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPRemove$0$$status$5$2484.16$BDLPnPRemove$16: int, inline$BDLGetDebugLevel$631$myNondetVar_0: int, inline$BDLGetDebugLevel$52$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$181$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$10$$result.memset$1683.8$14$: int, inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$32$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$324$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$336$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$358$myNondetVar_0: int, inline$BDLGetDebugLevel$406$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$17$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$116$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$: int, inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$46$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$702$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$290$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0: int, inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$: int, inline$IoGetCurrentIrpStackLocation$9$havoc_stringTemp: int, inline$BDLGetDebugLevel$338$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp: int, inline$BDLPnPStop$0$$result.DbgPrint$2190.0$8$: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$23$: int, inline$BDLPnPQueryRemove$0$$result.BDLCallLowerLevelDriverAndWait$2287.43$14$: int, inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4: int, inline$BDLGetDebugLevel$658$myNondetVar_0: int, inline$BDLGetDebugLevel$30$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$219$myNondetVar_0: int, inline$BDLGetFirstHandle$0$myNondetVar_1: int, inline$BDLGetFirstHandle$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$802$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$520$myNondetVar_0: int, inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$508$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$2$myVar_1: int, inline$IoGetCurrentIrpStackLocation$2$myVar_0: int, inline$BDLGetDebugLevel$195$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$: int, inline$storm_getThreadID$1$tid: int, inline$BDLGetDebugLevel$559$myNondetVar_0: int, inline$BDLGetDebugLevel$169$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$474$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$124$myNondetVar_0: int, inline$BDLGetDebugLevel$305$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$12$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$660$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$103$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$271$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$: int, inline$BDLGetDebugLevel$12$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$: int, inline$BDLGetDebugLevel$444$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$78$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$39$myVar_0: int, inline$IoGetCurrentIrpStackLocation$39$myVar_1: int, inline$BDLDevicePowerIoCompletion$28$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$19$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$133$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$186$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$27$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$796$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$117$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$459$myNondetVar_0: int, inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$13$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$19$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$114$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$havoc_stringTemp: int, inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$37$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$110$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$571$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$: int, inline$IoGetCurrentIrpStackLocation$34$myVar_1: int, inline$IoGetCurrentIrpStackLocation$34$myVar_0: int, inline$IoGetCurrentIrpStackLocation$7$myNondetVar_0: int, inline$BDLGetDebugLevel$76$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$389$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetCurrentIrpStackLocation$57$myNondetVar_0: int, inline$BDLGetDebugLevel$655$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$: int, inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$133$myVar_0: int, inline$IoGetCurrentIrpStackLocation$133$myVar_1: int, inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp: int, inline$BDLGetDebugLevel$653$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$684$myNondetVar_0: int, inline$BDLGetDebugLevel$784$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$703$myNondetVar_0: int, inline$BDLGetDebugLevel$212$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$13$myNondetVar_0: int, inline$BDLGetDebugLevel$213$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$479$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$745$myNondetVar_0: int, inline$BDLGetDebugLevel$443$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$: int, inline$IoGetCurrentIrpStackLocation$47$myVar_1: int, inline$IoGetCurrentIrpStackLocation$47$myVar_0: int, inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$396$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$150$havoc_stringTemp: int, inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$765$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$70$myNondetVar_0: int, inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$29$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetCurrentIrpStackLocation$87$myVar_1: int, inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$91$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$58$myVar_1: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$422$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$37$: int, inline$BDLDevicePowerIoCompletion$6$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$123$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$298$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$95$myVar_0: int, inline$IoGetCurrentIrpStackLocation$95$myVar_1: int, inline$BDLGetDebugLevel$693$myNondetVar_0: int, inline$BDLGetDebugLevel$559$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$445$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$118$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$68$myNondetVar_0: int, inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$267$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp: int, inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$callresult.$1687.68$15$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$: int, inline$IoGetCurrentIrpStackLocation$128$myNondetVar_0: int, inline$BDLGetDebugLevel$248$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$791$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$221$myNondetVar_0: int, inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$10$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$: int, inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12: int, inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$3$: int, inline$BDLGetDebugLevel$795$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$: int, inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$: int, inline$BDLGetDebugLevel$625$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$29$myVar_1: int, inline$IoGetCurrentIrpStackLocation$29$myVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$20$: int, inline$BDLDevicePowerIoCompletion$23$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$24$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$691$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$: int, inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetNextIrpStackLocation$0$havoc_stringTemp: int, inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$20$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$320$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$746$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$295$myNondetVar_0: int, inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$72$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$34$: int, inline$IoSetNextIrpStackLocation$6$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$4$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$558$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$244$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetNextIrpStackLocation$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$4$: int, inline$BDLPnPCancelRemove$0$$result.IoSetDeviceInterfaceState$2349.38$25$: int, inline$IoGetCurrentIrpStackLocation$2$havoc_stringTemp: int, inline$BDLGetDebugLevel$218$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$5$havoc_stringTemp: int, inline$BDLPnPStart$0$$result.DbgPrint$2005.0$33$: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLGetDebugLevel$385$myNondetVar_0: int, inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1: int, inline$IoGetCurrentIrpStackLocation$125$havoc_stringTemp: int, inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$627$myNondetVar_0: int, inline$BDLGetDebugLevel$568$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$5$myVar_0: int, inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$0$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$myNondetVar_1: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$334$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$136$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$330$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$677$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8: int, inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12_.1: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$443$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$50$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$17$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$4$: int, inline$BDLCallDriverCompletionRoutine$29$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$15$: int, inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$29$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$15$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$4$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$23$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$253$myNondetVar_0: int, inline$BDLGetDebugLevel$498$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$: int, inline$BDLGetDebugLevel$85$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$9$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$336$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$138$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$27$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$26$myVar_0: int, inline$IoGetCurrentIrpStackLocation$26$myVar_1: int, inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$372$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$653$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$4$: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$642$myNondetVar_0: int, inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$: int, inline$IoGetCurrentIrpStackLocation$56$myVar_1: int, inline$IoGetCurrentIrpStackLocation$56$myVar_0: int, inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$1$$callresult.$2419.71$15$: int, inline$BDLGetDebugLevel$418$myNondetVar_0: int, inline$BDLGetDebugLevel$49$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$543$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$106$myVar_0: int, inline$IoGetCurrentIrpStackLocation$106$myVar_1: int, inline$BDLGetDebugLevel$452$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$387$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$101$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$627$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$: int, inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp: int, inline$BDLGetDebugLevel$557$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$360$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$: int, inline$BDLGetDebugLevel$251$myNondetVar_0: int, inline$BDLGetDebugLevel$460$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$383$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$0$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoGetCurrentIrpStackLocation$27$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$144$havoc_stringTemp: int, inline$BDLGetDebugLevel$449$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$546$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$5$havoc_stringTemp: int, inline$BDLGetDebugLevel$383$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$134$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoCopyCurrentIrpStackLocationToNext$4$$result.memcpy$25110.4$3$: int, inline$BDLDevicePowerIoCompletion$25$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$237$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$325$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$199$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$4$: int, inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$121$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$795$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$17$: int, inline$BDLGetDebugLevel$16$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$327$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoGetCurrentIrpStackLocation$87$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$48$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$117$myVar_0: int, inline$IoGetCurrentIrpStackLocation$117$myVar_1: int, inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$711$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$701$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$142$myVar_0: int, inline$IoGetCurrentIrpStackLocation$142$myVar_1: int, inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$57$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$29$: int, inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$663$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$123$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$26$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$17$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$29$: int, inline$IoGetCurrentIrpStackLocation$15$myNondetVar_0: int, inline$BDLGetDebugLevel$60$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$545$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$757$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$: int, inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$1$$callresult.$2437.63$27$: int, inline$BDLGetDebugLevel$339$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$19$myVar_0: int, inline$IoGetCurrentIrpStackLocation$19$myVar_1: int, inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$5$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$60$myVar_0: int, inline$IoGetCurrentIrpStackLocation$60$myVar_1: int, inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$1$myVar_0: int, inline$BDLGetDebugLevel$674$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$695$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$27$myVar_1: int, inline$IoGetCurrentIrpStackLocation$27$myVar_0: int, inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$293$myNondetVar_0: int, inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCleanupDataHandles$0$$irql$6$3249.28$BDLCleanupDataHandles$4: int, inline$IoGetCurrentIrpStackLocation$95$myNondetVar_0: int, inline$BDLGetDebugLevel$680$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$482$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$466$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$685$myNondetVar_0: int, inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCallDriverCompletionRoutine$27$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$592$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$524$myNondetVar_0: int, inline$BDLGetDebugLevel$282$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$15$: int, inline$BDLCleanupNotificationStruct$1$$callresult.$3172.84$15$: int, inline$BDLSystemPowerIoCompletion$2$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$438$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$4$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$220$myNondetVar_0: int, inline$BDLGetDebugLevel$366$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$: int, inline$BDLGetDebugLevel$111$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$14$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$: int, inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$123$myVar_1: int, inline$IoGetCurrentIrpStackLocation$123$myVar_0: int, inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12_.1: int, inline$BDLGetDebugLevel$300$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLPnPStop$0$$result.IoSetDeviceInterfaceState$2199.29$13$: int, $irp$1$96.7$storm_main$0: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$: int, inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$18$: int, inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$341$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$121$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$137$myVar_0: int, inline$IoGetCurrentIrpStackLocation$137$myVar_1: int, inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4: int, inline$BDLSystemPowerIoCompletion$15$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLSystemPowerIoCompletion$8$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$191$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$11$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$19$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$90$myNondetVar_0: int, inline$BDLGetDebugLevel$278$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$156$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp: int, inline$BDLGetDebugLevel$486$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$IoAcquireRemoveLockEx.arg.3$15$: int, inline$BDLGetDebugLevel$10$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$160$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IsListEmpty$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$677$myNondetVar_0: int, inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$32$myVar_1: int, inline$IoGetCurrentIrpStackLocation$32$myVar_0: int, inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$270$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$16$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$: int, inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$242$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$IoGetCurrentIrpStackLocation$16$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$97$myVar_0: int, inline$IoGetCurrentIrpStackLocation$97$myVar_1: int, inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$83$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$18$: int, inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoSetNextIrpStackLocation$12$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$34$: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$8$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLCallDriverCompletionRoutine$16$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$18$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$88$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$: int, inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$735$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$: int, inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$77$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$496$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$621$myNondetVar_0: int, inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$: int, inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4: int, inline$BDLPnP$0$myVar_0: int, inline$BDLGetDebugLevel$255$myNondetVar_0: int, inline$BDLGetDebugLevel$487$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$413$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$10$myVar_0: int, inline$BDLGetDebugLevel$333$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$592$myNondetVar_0: int, inline$BDLGetDebugLevel$632$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$484$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$484$myNondetVar_0: int, inline$BDLGetDebugLevel$245$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$24$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$113$myVar_0: int, inline$IoGetCurrentIrpStackLocation$113$myVar_1: int, inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$598$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$: int, inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$719$myNondetVar_0: int, inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$CallCompletionRoutine$13$myNondetVar_0: int, inline$BDLGetDebugLevel$162$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$: int, inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$552$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$29$: int, inline$BDLGetDebugLevel$257$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$: int, inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$6$myVar_1: int, inline$IoGetCurrentIrpStackLocation$6$myVar_0: int, inline$IoGetCurrentIrpStackLocation$110$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$600$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$449$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$30$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$78$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$25$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$27$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4: int, inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$81$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$661$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$79$havoc_stringTemp: int, inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12: int, inline$BDLSystemPowerIoCompletion$24$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$622$myNondetVar_0: int, inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$: int, inline$IoSkipCurrentIrpStackLocation$1$myVar_0: int, inline$IoSkipCurrentIrpStackLocation$1$myVar_1: int, inline$BDLGetDebugLevel$164$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4: int, inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$61$havoc_stringTemp: int, inline$BDLGetDebugLevel$411$myNondetVar_0: int, inline$BDLGetDebugLevel$526$myNondetVar_0: int, inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4: int, inline$IoSetNextIrpStackLocation$9$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$6$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$: int, inline$IoGetCurrentIrpStackLocation$8$myVar_1: int, inline$IoGetCurrentIrpStackLocation$8$myVar_0: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp: int, inline$BDLGetDebugLevel$87$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$15$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$: int, inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$721$myNondetVar_0: int, inline$BDLGetDebugLevel$802$myNondetVar_0: int, inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$IoGetCurrentIrpStackLocation$76$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$89$myNondetVar_0: int, inline$BDLGetDebugLevel$467$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$736$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$: int, inline$BDLSystemPowerIoCompletion$18$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$IoGetCurrentIrpStackLocation$11$myVar_0: int, inline$BDLGetDebugLevel$608$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4: int, inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$454$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$101$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$22$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$2$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoAllocateIrp$0$$result.malloc$279.0$4$: int, inline$BDLGetDebugLevel$179$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$514$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$215$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$23$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$741$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$738$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$34$: int, inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$173$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$: int, inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$34$: int, inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$757$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$674$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$675$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$705$myNondetVar_0: int, inline$BDLGetDebugLevel$778$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$759$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$BDLSystemPowerIoCompletion$13$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$744$myNondetVar_0: int, inline$BDLGetDebugLevel$315$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$711$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$226$myNondetVar_0: int, inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$46$: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$554$myNondetVar_0: int, inline$BDLGetDebugLevel$594$myNondetVar_0: int, inline$BDLGetDebugLevel$12$myNondetVar_0: int, inline$BDLGetDebugLevel$704$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$: int, inline$BDLDevicePowerIoCompletion$1$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$14$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$656$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$15$: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$21$: int, inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$storm_IoCallDriver$13$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$34$: int, inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$134$myVar_1: int, inline$IoGetCurrentIrpStackLocation$134$myVar_0: int, inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$180$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$107$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$52$: int, inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$82$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLPnPCancelStop$0$$result.BDLPnPCancelStop$2130.0$1$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$4$myNondetVar_0: int, inline$BDLPnPStart$0$$result.DbgPrint$1966.0$8$: int, inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$152$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$537$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$23$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$590$myNondetVar_0: int, inline$BDLGetDebugLevel$655$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$40$myNondetVar_0: int, inline$BDLGetDebugLevel$137$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$646$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$78$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$: int, inline$IoGetCurrentIrpStackLocation$46$havoc_stringTemp: int, inline$CallCompletionRoutine$16$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$114$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$21$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$342$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$: int, inline$BDLGetDebugLevel$688$myNondetVar_0: int, inline$BDLGetDebugLevel$42$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$: int, inline$BDLGetDebugLevel$682$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$106$havoc_stringTemp: int, inline$CallCompletionRoutine$29$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$2$: int, inline$BDLGetDebugLevel$381$myNondetVar_0: int, inline$BDLGetDebugLevel$760$myNondetVar_0: int, inline$storm_IoCallDriver$1$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$708$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$135$havoc_stringTemp: int, inline$RemoveHeadList$4$myNondetVar_0: int, inline$BDLGetDebugLevel$280$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$583$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$18$: int, inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$728$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$4$$result.storm_getThreadID$128.29$1$: int, inline$BDLDevicePowerIoCompletion$27$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$5$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$74$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.memset$1683.8$14$: int, inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$47$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$27$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$7$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$97$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$3$myNondetVar_0: int, inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLCallDriverCompletionRoutine$2$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$100$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$45$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$566$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$773$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$101$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$340$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$199$myNondetVar_0: int, inline$BDLGetDebugLevel$365$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$684$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$32$: int, inline$BDLGetDebugLevel$152$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$58$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$118$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$535$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$265$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$572$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp: int, inline$BDLGetDebugLevel$462$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLGetDebugLevel$781$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$9$myNondetVar_0: int, inline$BDLGetDebugLevel$55$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$373$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$myNondetVar_0: int, inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$44$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$466$myNondetVar_0: int, inline$BDLGetDebugLevel$744$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$34$: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$23$: int, inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$: int, inline$IoSetNextIrpStackLocation$13$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$7$: int, inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$175$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$565$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$1$myVar_0: int, inline$IoGetCurrentIrpStackLocation$1$myVar_1: int, inline$BDLGetDebugLevel$671$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$533$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLCleanupDataHandles$0$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$758$myNondetVar_0: int, inline$BDLPnPStart$0$$result.DbgPrint$1979.0$15$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$45$myVar_1: int, inline$IoGetCurrentIrpStackLocation$45$myVar_0: int, inline$BDLDevicePowerIoCompletion$18$$callresult.$1687.68$15$: int, inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$635$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$407$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$507$myNondetVar_0: int, inline$BDLGetDebugLevel$286$myNondetVar_0: int, inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$101$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$87$myVar_0: int, inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$: int, inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12_.1: int, inline$BDLGetDebugLevel$585$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$4$myVar_1: int, inline$IoGetCurrentIrpStackLocation$4$myVar_0: int, inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$3$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$46$myNondetVar_0: int, inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$248$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$29$: int, inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$: int, inline$BDLGetDebugLevel$242$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$154$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int, inline$CallCompletionRoutine$22$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$7$myVar_1: int, inline$BDLGetDebugLevel$337$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$40$: int, inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$797$myNondetVar_0: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$20$: int, inline$IoGetNextIrpStackLocation$7$myVar_0: int, inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$8$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$368$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$703$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$27$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$504$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetNextIrpStackLocation$12$myVar_0: int, inline$BDLGetDebugLevel$448$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$137$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$106$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLGetDebugLevel$321$myNondetVar_0: int, inline$BDLGetDebugLevel$518$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$536$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$25$myNondetVar_0: int, inline$BDLGetDebugLevel$463$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$14$havoc_stringTemp: int, inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$BDLGetDebugLevel$698$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$561$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$645$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$145$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$108$myNondetVar_0: int, inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStart$0$$result.IoSetDeviceInterfaceState$2033.38$41$: int, inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$313$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$2$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$: int, inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$17$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$29$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$40$: int, inline$IoGetCurrentIrpStackLocation$81$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$7$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$178$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$callresult.$1687.68$15$: int, inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$121$myVar_1: int, inline$IoGetCurrentIrpStackLocation$121$myVar_0: int, inline$BDLGetDebugLevel$361$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$149$myVar_1: int, inline$IoGetCurrentIrpStackLocation$149$myVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$4$: int, inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$159$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$777$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$431$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$15$: int, inline$CallCompletionRoutine$10$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$148$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$17$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$534$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$9$: int, inline$BDLCallLowerLevelDriverAndWait$2$havoc_stringTemp: int, inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8_.1: int, inline$BDLSystemPowerIoCompletion$26$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$391$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$: int, inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12: int, inline$IoGetCurrentIrpStackLocation$57$havoc_stringTemp: int, inline$BDLGetDebugLevel$134$myNondetVar_0: int, inline$BDLGetDebugLevel$346$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0: int, inline$BDLGetDebugLevel$706$myNondetVar_0: int, inline$BDLGetDebugLevel$476$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$398$myNondetVar_0: int, inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$storm_PoCallDriver$2$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$: int, inline$BDLGetDebugLevel$112$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$648$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$25$$result.PoRequestPowerIrp$1410.31$27$: int, inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$70$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$560$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$32$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$1$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$18$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$34$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$145$havoc_stringTemp: int, inline$BDLGetDebugLevel$777$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$563$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLReleaseHandleList$0$myNondetVar_1: int, inline$BDLReleaseHandleList$0$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLDevicePowerIoCompletion$21$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLPnPQueryStop$0$$irql$5$2082.16$BDLPnPQueryStop$12: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$93$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$: int, inline$BDLGetDebugLevel$517$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1: int, inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$480$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$181$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$352$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$542$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$691$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$357$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLPnP$0$$result.DbgPrint$1023.0$54$: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLPnPSurpriseRemoval$2527.0$1$: int, inline$BDLCallDriverCompletionRoutine$18$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$32$: int, inline$BDLGetDebugLevel$644$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$7$myVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$465$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$91$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$141$myNondetVar_0: int, inline$BDLGetDebugLevel$488$myNondetVar_0: int, inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$146$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$468$myNondetVar_0: int, inline$BDLGetDebugLevel$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$22$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$23$: int, inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$26$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$155$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$9$: int;
-
- start#1:
- __storm_thread_done_1 := false;
- __storm_thread_done_2 := false;
- __storm_thread_done_3 := false;
- __storm_thread_done_4 := false;
- k := 0;
- errorReached := false;
- __storm_atomic := false;
- __storm_init := false;
- goto label_3#1;
-
- label_3#1:
- goto label_4#1;
-
- label_4#1:
- goto label_5#1;
-
- label_5#1:
- __storm_atomic := true;
- __storm_init := true;
- goto label_8#1;
-
- label_8#1:
- cancelLockStatus_0 := 0;
- call contextSwitch();
- goto label_9#1;
-
- label_9#1:
- created_irp_0 := 0;
- call contextSwitch();
- goto label_10#1;
-
- label_10#1:
- goto inline$storm_IoAllocateIrp$0$Entry#1;
-
- inline$storm_IoAllocateIrp$0$Entry#1:
- inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8_.1 := 2;
- goto inline$storm_IoAllocateIrp$0$start#1;
-
- inline$storm_IoAllocateIrp$0$start#1:
- inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8 := inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8_.1;
- goto inline$storm_IoAllocateIrp$0$label_3#1;
-
- inline$storm_IoAllocateIrp$0$label_3#1:
- goto inline$storm_IoAllocateIrp$0$label_4#1;
-
- inline$storm_IoAllocateIrp$0$label_4#1:
- goto inline$storm_IoAllocateIrp$0$label_5#1;
-
- inline$storm_IoAllocateIrp$0$label_5#1:
- call inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$ := storm_nondet();
- goto inline$storm_IoAllocateIrp$0$label_8#1;
-
- inline$storm_IoAllocateIrp$0$label_8#1:
- goto inline$storm_IoAllocateIrp$0$label_8_case_0#1, inline$storm_IoAllocateIrp$0$label_8_case_1#1;
-
- inline$storm_IoAllocateIrp$0$label_8_case_1#1:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$ == 0;
- goto inline$storm_IoAllocateIrp$0$label_10#1;
-
- inline$storm_IoAllocateIrp$0$label_10#1:
- __storm_atomic := true;
- goto inline$storm_IoAllocateIrp$0$label_13#1;
-
- inline$storm_IoAllocateIrp$0$label_13#1:
- call inline$storm_IoAllocateIrp$0$$result.malloc$279.0$3$ := __HAVOC_malloc(112);
- goto inline$storm_IoAllocateIrp$0$label_16#1;
-
- inline$storm_IoAllocateIrp$0$label_16#1:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8 := inline$storm_IoAllocateIrp$0$$result.malloc$279.0$3$;
- goto inline$storm_IoAllocateIrp$0$label_17#1;
-
- inline$storm_IoAllocateIrp$0$label_17#1:
- goto inline$storm_IoAllocateIrp$0$label_18#1;
-
- inline$storm_IoAllocateIrp$0$label_18#1:
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8) := 0];
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_19#1;
-
- inline$storm_IoAllocateIrp$0$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8 := 0];
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_20#1;
-
- inline$storm_IoAllocateIrp$0$label_20#1:
- havoc raiseException;
- goto inline$storm_IoAllocateIrp$0$anon6_Then#1, inline$storm_IoAllocateIrp$0$anon6_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_IoAllocateIrp$0$anon1#1;
-
- inline$storm_IoAllocateIrp$0$anon1#1:
- assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8);
- goto inline$storm_IoAllocateIrp$0$label_21#1;
-
- inline$storm_IoAllocateIrp$0$label_21#1:
- inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8, 36);
- goto inline$storm_IoAllocateIrp$0$label_22#1;
-
- inline$storm_IoAllocateIrp$0$label_22#1:
- call inline$storm_IoAllocateIrp$0$$result.malloc$279.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
- goto inline$storm_IoAllocateIrp$0$label_25#1;
-
- inline$storm_IoAllocateIrp$0$label_25#1:
- goto inline$storm_IoAllocateIrp$0$label_26#1;
-
- inline$storm_IoAllocateIrp$0$label_26#1:
- goto inline$storm_IoAllocateIrp$0$label_27#1;
-
- inline$storm_IoAllocateIrp$0$label_27#1:
- goto inline$IoGetNextIrpStackLocation$0$Entry#1;
-
- inline$IoGetNextIrpStackLocation$0$Entry#1:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8;
- goto inline$IoGetNextIrpStackLocation$0$start#1;
-
- inline$IoGetNextIrpStackLocation$0$start#1:
- inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$0$label_3#1;
-
- inline$IoGetNextIrpStackLocation$0$label_3#1:
- goto inline$IoGetNextIrpStackLocation$0$label_3_true#1, inline$IoGetNextIrpStackLocation$0$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$0$label_3_false#1:
- inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$0$myVar_0);
- goto inline$IoGetNextIrpStackLocation$0$label_4#1;
-
- inline$IoGetNextIrpStackLocation$0$label_4#1:
- call inline$IoGetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$0$label_6#1;
-
- inline$IoGetNextIrpStackLocation$0$label_6#1:
- call inline$IoGetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$0$label_7#1;
-
- inline$IoGetNextIrpStackLocation$0$label_7#1:
- goto inline$IoGetNextIrpStackLocation$0$label_5#1;
-
- inline$IoGetNextIrpStackLocation$0$label_3_true#1:
- inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$0$myVar_0);
- goto inline$IoGetNextIrpStackLocation$0$label_5#1;
-
- inline$IoGetNextIrpStackLocation$0$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$0$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$0$label_1#1;
-
- inline$IoGetNextIrpStackLocation$0$label_1#1:
- goto inline$IoGetNextIrpStackLocation$0$Return#1;
-
- inline$IoGetNextIrpStackLocation$0$Return#1:
- goto inline$storm_IoAllocateIrp$0$label_27$1#1;
-
- inline$storm_IoAllocateIrp$0$label_27$1#1:
- goto inline$storm_IoAllocateIrp$0$anon7_Then#1, inline$storm_IoAllocateIrp$0$anon7_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_IoAllocateIrp$0$anon3#1;
-
- inline$storm_IoAllocateIrp$0$anon3#1:
- goto inline$storm_IoAllocateIrp$0$label_30#1;
-
- inline$storm_IoAllocateIrp$0$label_30#1:
- goto inline$storm_IoAllocateIrp$0$label_31#1;
-
- inline$storm_IoAllocateIrp$0$label_31#1:
- goto inline$storm_IoAllocateIrp$0$label_32#1;
-
- inline$storm_IoAllocateIrp$0$label_32#1:
- goto inline$storm_IoAllocateIrp$0$label_33#1;
-
- inline$storm_IoAllocateIrp$0$label_33#1:
- goto inline$storm_IoAllocateIrp$0$anon8_Then#1, inline$storm_IoAllocateIrp$0$anon8_Else#1;
-
- inline$storm_IoAllocateIrp$0$anon8_Else#1:
- assume __storm_init;
- goto inline$storm_IoAllocateIrp$0$anon5#1;
-
- inline$storm_IoAllocateIrp$0$anon8_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAllocateIrp$0$anon5#1;
-
- inline$storm_IoAllocateIrp$0$anon5#1:
- call contextSwitch();
- goto inline$storm_IoAllocateIrp$0$label_36#1;
-
- inline$storm_IoAllocateIrp$0$anon7_Then#1:
- assume raiseException;
- goto inline$storm_IoAllocateIrp$0$Return#1;
-
- inline$storm_IoAllocateIrp$0$anon6_Then#1:
- assume raiseException;
- goto inline$storm_IoAllocateIrp$0$Return#1;
-
- inline$storm_IoAllocateIrp$0$label_8_case_0#1:
- assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$ != 0;
- goto inline$storm_IoAllocateIrp$0$label_9#1;
-
- inline$storm_IoAllocateIrp$0$label_9#1:
- inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8 := 0;
- goto inline$storm_IoAllocateIrp$0$label_36#1;
-
- inline$storm_IoAllocateIrp$0$label_36#1:
- inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$270.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8;
- goto inline$storm_IoAllocateIrp$0$label_1#1;
-
- inline$storm_IoAllocateIrp$0$label_1#1:
- goto inline$storm_IoAllocateIrp$0$Return#1;
-
- inline$storm_IoAllocateIrp$0$Return#1:
- $result.storm_IoAllocateIrp$100.0$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$270.0$1$;
- goto label_10$1#1;
-
- label_10$1#1:
- goto anon10_Then#1, anon10_Else#1;
-
- anon10_Else#1:
- assume !raiseException;
- goto anon1#1;
-
- anon1#1:
- goto label_13#1;
-
- label_13#1:
- $irp$1$96.7$storm_main$0 := $result.storm_IoAllocateIrp$100.0$1$;
- goto label_14#1;
-
- label_14#1:
- havoc raiseException;
- goto anon11_Then#1, anon11_Else#1;
-
- anon11_Else#1:
- assume !raiseException;
- goto anon3#1;
-
- anon3#1:
- assume INT_NEQ($irp$1$96.7$storm_main$0, 0);
- goto label_15#1;
-
- label_15#1:
- goto inline$IoSetNextIrpStackLocation$0$Entry#1;
-
- inline$IoSetNextIrpStackLocation$0$Entry#1:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := $irp$1$96.7$storm_main$0;
- goto inline$IoSetNextIrpStackLocation$0$start#1;
-
- inline$IoSetNextIrpStackLocation$0$start#1:
- inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$0$label_3#1;
-
- inline$IoSetNextIrpStackLocation$0$label_3#1:
- goto inline$IoSetNextIrpStackLocation$0$label_3_true#1, inline$IoSetNextIrpStackLocation$0$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$0$label_3_false#1:
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$0$myVar_0);
- goto inline$IoSetNextIrpStackLocation$0$label_4#1;
-
- inline$IoSetNextIrpStackLocation$0$label_4#1:
- call inline$IoSetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$0$label_7#1;
-
- inline$IoSetNextIrpStackLocation$0$label_7#1:
- call inline$IoSetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$0$label_8#1;
-
- inline$IoSetNextIrpStackLocation$0$label_8#1:
- goto inline$IoSetNextIrpStackLocation$0$label_5#1;
-
- inline$IoSetNextIrpStackLocation$0$label_3_true#1:
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$0$myVar_0);
- goto inline$IoSetNextIrpStackLocation$0$label_5#1;
-
- inline$IoSetNextIrpStackLocation$0$label_5#1:
- inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$0$label_6#1;
-
- inline$IoSetNextIrpStackLocation$0$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$0$label_1#1;
-
- inline$IoSetNextIrpStackLocation$0$label_1#1:
- goto inline$IoSetNextIrpStackLocation$0$Return#1;
-
- inline$IoSetNextIrpStackLocation$0$Return#1:
- goto label_15$1#1;
-
- label_15$1#1:
- goto anon12_Then#1, anon12_Else#1;
-
- anon12_Else#1:
- assume !raiseException;
- goto anon5#1;
-
- anon5#1:
- goto label_18#1;
-
- label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$0$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$0$Entry#1:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := $irp$1$96.7$storm_main$0;
- goto inline$IoGetCurrentIrpStackLocation$0$start#1;
-
- inline$IoGetCurrentIrpStackLocation$0$start#1:
- inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$0$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$0$label_3_true#1, inline$IoGetCurrentIrpStackLocation$0$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$0$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$0$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$0$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$0$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$0$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$0$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$0$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$0$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$0$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$0$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$0$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$0$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$0$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$0$Return#1:
- goto label_18$1#1;
-
- label_18$1#1:
- goto anon13_Then#1, anon13_Else#1;
-
- anon13_Else#1:
- assume !raiseException;
- goto anon7#1;
-
- anon7#1:
- goto label_21#1;
-
- label_21#1:
- goto label_22#1;
-
- label_22#1:
- goto label_23#1;
-
- label_23#1:
- goto inline$myInitDriver$0$Entry#1;
-
- inline$myInitDriver$0$Entry#1:
- goto inline$myInitDriver$0$start#1;
-
- inline$myInitDriver$0$start#1:
- goto inline$myInitDriver$0$label_3#1;
-
- inline$myInitDriver$0$label_3#1:
- goto inline$myInitDriver$0$label_4#1;
-
- inline$myInitDriver$0$label_4#1:
- inline$myInitDriver$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
- call contextSwitch();
- inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4 := inline$myInitDriver$0$myVar_0;
- goto inline$myInitDriver$0$label_5#1;
-
- inline$myInitDriver$0$label_5#1:
- goto inline$myInitDriver$0$label_6#1;
-
- inline$myInitDriver$0$label_6#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- havoc inline$myInitDriver$0$myNondetVar_1;
- assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
- goto inline$storm_KeInitializeSpinLock$0$Entry#1;
-
- inline$storm_KeInitializeSpinLock$0$Entry#1:
- inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4);
- goto inline$storm_KeInitializeSpinLock$0$start#1;
-
- inline$storm_KeInitializeSpinLock$0$start#1:
- inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
- goto inline$storm_KeInitializeSpinLock$0$label_3#1;
-
- inline$storm_KeInitializeSpinLock$0$label_3#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
- call contextSwitch();
- goto inline$storm_KeInitializeSpinLock$0$label_1#1;
-
- inline$storm_KeInitializeSpinLock$0$label_1#1:
- goto inline$storm_KeInitializeSpinLock$0$Return#1;
-
- inline$storm_KeInitializeSpinLock$0$Return#1:
- goto inline$myInitDriver$0$label_6$1#1;
-
- inline$myInitDriver$0$label_6$1#1:
- goto inline$myInitDriver$0$anon8_Then#1, inline$myInitDriver$0$anon8_Else#1;
-
- inline$myInitDriver$0$anon8_Else#1:
- assume !raiseException;
- goto inline$myInitDriver$0$anon1#1;
-
- inline$myInitDriver$0$anon1#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- goto inline$myInitDriver$0$label_9#1;
-
- inline$myInitDriver$0$label_9#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- havoc inline$myInitDriver$0$myNondetVar_1;
- assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
- goto inline$storm_KeInitializeSpinLock$1$Entry#1;
-
- inline$storm_KeInitializeSpinLock$1$Entry#1:
- inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4));
- goto inline$storm_KeInitializeSpinLock$1$start#1;
-
- inline$storm_KeInitializeSpinLock$1$start#1:
- inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
- goto inline$storm_KeInitializeSpinLock$1$label_3#1;
-
- inline$storm_KeInitializeSpinLock$1$label_3#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
- call contextSwitch();
- goto inline$storm_KeInitializeSpinLock$1$label_1#1;
-
- inline$storm_KeInitializeSpinLock$1$label_1#1:
- goto inline$storm_KeInitializeSpinLock$1$Return#1;
-
- inline$storm_KeInitializeSpinLock$1$Return#1:
- goto inline$myInitDriver$0$label_9$1#1;
-
- inline$myInitDriver$0$label_9$1#1:
- goto inline$myInitDriver$0$anon9_Then#1, inline$myInitDriver$0$anon9_Else#1;
-
- inline$myInitDriver$0$anon9_Else#1:
- assume !raiseException;
- goto inline$myInitDriver$0$anon3#1;
-
- inline$myInitDriver$0$anon3#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- goto inline$myInitDriver$0$label_12#1;
-
- inline$myInitDriver$0$label_12#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- havoc inline$myInitDriver$0$myNondetVar_1;
- assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
- goto inline$storm_KeInitializeSpinLock$2$Entry#1;
-
- inline$storm_KeInitializeSpinLock$2$Entry#1:
- inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4));
- goto inline$storm_KeInitializeSpinLock$2$start#1;
-
- inline$storm_KeInitializeSpinLock$2$start#1:
- inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
- goto inline$storm_KeInitializeSpinLock$2$label_3#1;
-
- inline$storm_KeInitializeSpinLock$2$label_3#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
- call contextSwitch();
- goto inline$storm_KeInitializeSpinLock$2$label_1#1;
-
- inline$storm_KeInitializeSpinLock$2$label_1#1:
- goto inline$storm_KeInitializeSpinLock$2$Return#1;
-
- inline$storm_KeInitializeSpinLock$2$Return#1:
- goto inline$myInitDriver$0$label_12$1#1;
-
- inline$myInitDriver$0$label_12$1#1:
- goto inline$myInitDriver$0$anon10_Then#1, inline$myInitDriver$0$anon10_Else#1;
-
- inline$myInitDriver$0$anon10_Else#1:
- assume !raiseException;
- goto inline$myInitDriver$0$anon5#1;
-
- inline$myInitDriver$0$anon5#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- goto inline$myInitDriver$0$label_15#1;
-
- inline$myInitDriver$0$label_15#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- havoc inline$myInitDriver$0$myNondetVar_1;
- assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
- goto inline$storm_KeInitializeSpinLock$3$Entry#1;
-
- inline$storm_KeInitializeSpinLock$3$Entry#1:
- inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4);
- goto inline$storm_KeInitializeSpinLock$3$start#1;
-
- inline$storm_KeInitializeSpinLock$3$start#1:
- inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
- goto inline$storm_KeInitializeSpinLock$3$label_3#1;
-
- inline$storm_KeInitializeSpinLock$3$label_3#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
- call contextSwitch();
- goto inline$storm_KeInitializeSpinLock$3$label_1#1;
-
- inline$storm_KeInitializeSpinLock$3$label_1#1:
- goto inline$storm_KeInitializeSpinLock$3$Return#1;
-
- inline$storm_KeInitializeSpinLock$3$Return#1:
- goto inline$myInitDriver$0$label_15$1#1;
-
- inline$myInitDriver$0$label_15$1#1:
- goto inline$myInitDriver$0$anon11_Then#1, inline$myInitDriver$0$anon11_Else#1;
-
- inline$myInitDriver$0$anon11_Else#1:
- assume !raiseException;
- goto inline$myInitDriver$0$anon7#1;
-
- inline$myInitDriver$0$anon7#1:
- havoc inline$myInitDriver$0$myNondetVar_0;
- goto inline$myInitDriver$0$label_1#1;
-
- inline$myInitDriver$0$label_1#1:
- goto inline$myInitDriver$0$Return#1;
-
- inline$myInitDriver$0$anon11_Then#1:
- assume raiseException;
- goto inline$myInitDriver$0$Return#1;
-
- inline$myInitDriver$0$anon10_Then#1:
- assume raiseException;
- goto inline$myInitDriver$0$Return#1;
-
- inline$myInitDriver$0$anon9_Then#1:
- assume raiseException;
- goto inline$myInitDriver$0$Return#1;
-
- inline$myInitDriver$0$anon8_Then#1:
- assume raiseException;
- goto inline$myInitDriver$0$Return#1;
-
- inline$myInitDriver$0$Return#1:
- goto label_23$1#1;
-
- label_23$1#1:
- goto anon14_Then#1, anon14_Else#1;
-
- anon14_Else#1:
- assume !raiseException;
- goto anon9#1;
-
- anon9#1:
- goto label_26#1;
-
- label_26#1:
- __storm_atomic := false;
- __storm_init := false;
- goto label_29#1;
-
- label_29#1:
- goto inline$storm_thread_dispatch$0$Entry#1;
-
- inline$storm_thread_dispatch$0$Entry#1:
- inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4_.1 := $irp$1$96.7$storm_main$0;
- goto inline$storm_thread_dispatch$0$start#1;
-
- inline$storm_thread_dispatch$0$start#1:
- k := 0;
- raiseException := false;
- __storm_thread_id := 3;
- call contextSwitch();
- inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4 := inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4_.1;
- goto inline$storm_thread_dispatch$0$label_3#1;
-
- inline$storm_thread_dispatch$0$label_3#1:
- goto inline$storm_thread_dispatch$0$label_4#1;
-
- inline$storm_thread_dispatch$0$label_4#1:
- goto inline$IoGetCurrentIrpStackLocation$1$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$1$Entry#1:
- inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4;
- goto inline$IoGetCurrentIrpStackLocation$1$start#1;
-
- inline$IoGetCurrentIrpStackLocation$1$start#1:
- inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$1$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$1$label_3_true#1, inline$IoGetCurrentIrpStackLocation$1$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$1$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$1$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$1$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$1$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$1$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$1$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$1$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$1$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$1$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$1$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$1$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$1$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$1$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$1$Return#1:
- goto inline$storm_thread_dispatch$0$label_4$1#1;
-
- inline$storm_thread_dispatch$0$label_4$1#1:
- goto inline$storm_thread_dispatch$0$anon4_Then#1, inline$storm_thread_dispatch$0$anon4_Else#1;
-
- inline$storm_thread_dispatch$0$anon4_Else#1:
- assume !raiseException;
- goto inline$storm_thread_dispatch$0$anon1#1;
-
- inline$storm_thread_dispatch$0$anon1#1:
- goto inline$storm_thread_dispatch$0$label_7#1;
-
- inline$storm_thread_dispatch$0$label_7#1:
- goto inline$storm_thread_dispatch$0$label_8#1;
-
- inline$storm_thread_dispatch$0$label_8#1:
- goto inline$BDLPnP$0$Entry#1;
-
- inline$BDLPnP$0$Entry#1:
- inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8_.1 := hdevobj;
- inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8_.1 := inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4;
- goto inline$BDLPnP$0$start#1;
-
- inline$BDLPnP$0$start#1:
- inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8 := inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8_.1;
- inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8_.1;
- goto inline$BDLPnP$0$label_3#1;
-
- inline$BDLPnP$0$label_3#1:
- goto inline$BDLPnP$0$label_4#1;
-
- inline$BDLPnP$0$label_4#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := 0;
- goto inline$BDLPnP$0$label_5#1;
-
- inline$BDLPnP$0$label_5#1:
- goto inline$BDLPnP$0$label_6#1;
-
- inline$BDLPnP$0$label_6#1:
- inline$BDLPnP$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8)];
- call contextSwitch();
- inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8 := inline$BDLPnP$0$myVar_0;
- goto inline$BDLPnP$0$label_7#1;
-
- inline$BDLPnP$0$label_7#1:
- goto inline$BDLPnP$0$label_8#1;
-
- inline$BDLPnP$0$label_8#1:
- goto inline$BDLPnP$0$label_9#1;
-
- inline$BDLPnP$0$label_9#1:
- goto inline$BDLPnP$0$label_10#1;
-
- inline$BDLPnP$0$label_10#1:
- inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8 := 0;
- goto inline$BDLPnP$0$label_11#1;
-
- inline$BDLPnP$0$label_11#1:
- goto inline$BDLPnP$0$label_12#1;
-
- inline$BDLPnP$0$label_12#1:
- inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 1;
- goto inline$BDLPnP$0$label_13#1;
-
- inline$BDLPnP$0$label_13#1:
- goto inline$BDLGetDebugLevel$0$Entry#1;
-
- inline$BDLGetDebugLevel$0$Entry#1:
- goto inline$BDLGetDebugLevel$0$start#1;
-
- inline$BDLGetDebugLevel$0$start#1:
- goto inline$BDLGetDebugLevel$0$label_3#1;
-
- inline$BDLGetDebugLevel$0$label_3#1:
- havoc inline$BDLGetDebugLevel$0$myNondetVar_0;
- inline$BDLGetDebugLevel$0$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$0$myNondetVar_0;
- goto inline$BDLGetDebugLevel$0$label_1#1;
-
- inline$BDLGetDebugLevel$0$label_1#1:
- goto inline$BDLGetDebugLevel$0$Return#1;
-
- inline$BDLGetDebugLevel$0$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$ := inline$BDLGetDebugLevel$0$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_13$1#1;
-
- inline$BDLPnP$0$label_13$1#1:
- goto inline$BDLPnP$0$anon54_Then#1, inline$BDLPnP$0$anon54_Else#1;
-
- inline$BDLPnP$0$anon54_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon1#1;
-
- inline$BDLPnP$0$anon1#1:
- goto inline$BDLPnP$0$label_16#1;
-
- inline$BDLPnP$0$label_16#1:
- goto inline$BDLPnP$0$label_16_true#1, inline$BDLPnP$0$label_16_false#1;
-
- inline$BDLPnP$0$label_16_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$) == 0;
- goto inline$BDLPnP$0$label_17#1;
-
- inline$BDLPnP$0$label_16_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$) != 0;
- goto inline$BDLPnP$0$label_20#1;
-
- inline$BDLPnP$0$label_20#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_21#1;
-
- inline$BDLPnP$0$label_21#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_22#1;
-
- inline$BDLPnP$0$label_22#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_23#1;
-
- inline$BDLPnP$0$label_23#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$865.0$3$;
- goto inline$BDLPnP$0$label_17#1;
-
- inline$BDLPnP$0$label_17#1:
- goto inline$BDLGetDebugLevel$1$Entry#1;
-
- inline$BDLGetDebugLevel$1$Entry#1:
- goto inline$BDLGetDebugLevel$1$start#1;
-
- inline$BDLGetDebugLevel$1$start#1:
- goto inline$BDLGetDebugLevel$1$label_3#1;
-
- inline$BDLGetDebugLevel$1$label_3#1:
- havoc inline$BDLGetDebugLevel$1$myNondetVar_0;
- inline$BDLGetDebugLevel$1$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$1$myNondetVar_0;
- goto inline$BDLGetDebugLevel$1$label_1#1;
-
- inline$BDLGetDebugLevel$1$label_1#1:
- goto inline$BDLGetDebugLevel$1$Return#1;
-
- inline$BDLGetDebugLevel$1$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$ := inline$BDLGetDebugLevel$1$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_17$1#1;
-
- inline$BDLPnP$0$label_17$1#1:
- goto inline$BDLPnP$0$anon55_Then#1, inline$BDLPnP$0$anon55_Else#1;
-
- inline$BDLPnP$0$anon55_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon3#1;
-
- inline$BDLPnP$0$anon3#1:
- goto inline$BDLPnP$0$label_26#1;
-
- inline$BDLPnP$0$label_26#1:
- goto inline$BDLPnP$0$label_26_true#1, inline$BDLPnP$0$label_26_false#1;
-
- inline$BDLPnP$0$label_26_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$) == 0;
- goto inline$BDLPnP$0$label_27#1;
-
- inline$BDLPnP$0$label_26_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$) != 0;
- goto inline$BDLPnP$0$label_30#1;
-
- inline$BDLPnP$0$label_30#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_31#1;
-
- inline$BDLPnP$0$label_31#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_32#1;
-
- inline$BDLPnP$0$label_32#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_33#1;
-
- inline$BDLPnP$0$label_33#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$865.0$8$;
- goto inline$BDLPnP$0$label_27#1;
-
- inline$BDLPnP$0$label_27#1:
- goto inline$BDLGetDebugLevel$2$Entry#1;
-
- inline$BDLGetDebugLevel$2$Entry#1:
- goto inline$BDLGetDebugLevel$2$start#1;
-
- inline$BDLGetDebugLevel$2$start#1:
- goto inline$BDLGetDebugLevel$2$label_3#1;
-
- inline$BDLGetDebugLevel$2$label_3#1:
- havoc inline$BDLGetDebugLevel$2$myNondetVar_0;
- inline$BDLGetDebugLevel$2$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$2$myNondetVar_0;
- goto inline$BDLGetDebugLevel$2$label_1#1;
-
- inline$BDLGetDebugLevel$2$label_1#1:
- goto inline$BDLGetDebugLevel$2$Return#1;
-
- inline$BDLGetDebugLevel$2$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$ := inline$BDLGetDebugLevel$2$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_27$1#1;
-
- inline$BDLPnP$0$label_27$1#1:
- goto inline$BDLPnP$0$anon56_Then#1, inline$BDLPnP$0$anon56_Else#1;
-
- inline$BDLPnP$0$anon56_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon5#1;
-
- inline$BDLPnP$0$anon5#1:
- goto inline$BDLPnP$0$label_36#1;
-
- inline$BDLPnP$0$label_36#1:
- goto inline$BDLPnP$0$label_36_true#1, inline$BDLPnP$0$label_36_false#1;
-
- inline$BDLPnP$0$label_36_false#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$, 4) == 0;
- goto inline$BDLPnP$0$label_37#1;
-
- inline$BDLPnP$0$label_36_true#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$, 4) != 0;
- goto inline$BDLPnP$0$label_38#1;
-
- inline$BDLPnP$0$label_38#1:
- goto inline$BDLPnP$0$label_37#1;
-
- inline$BDLPnP$0$label_37#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8 := inline$BDLPnP$0$myNondetVar_0;
- goto inline$BDLPnP$0$label_39#1;
-
- inline$BDLPnP$0$label_39#1:
- goto inline$IoGetCurrentIrpStackLocation$2$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$2$Entry#1:
- inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$IoGetCurrentIrpStackLocation$2$start#1;
-
- inline$IoGetCurrentIrpStackLocation$2$start#1:
- inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$2$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$2$label_3_true#1, inline$IoGetCurrentIrpStackLocation$2$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$2$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$2$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$2$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$2$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$2$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$2$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$2$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$2$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$2$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$2$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$2$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$2$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$2$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$2$Return#1:
- goto inline$BDLPnP$0$label_39$1#1;
-
- inline$BDLPnP$0$label_39$1#1:
- goto inline$BDLPnP$0$anon57_Then#1, inline$BDLPnP$0$anon57_Else#1;
-
- inline$BDLPnP$0$anon57_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon7#1;
-
- inline$BDLPnP$0$anon7#1:
- goto inline$BDLPnP$0$label_42#1;
-
- inline$BDLPnP$0$label_42#1:
- goto inline$BDLPnP$0$label_43#1;
-
- inline$BDLPnP$0$label_43#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- inline$BDLPnP$0$$IoAcquireRemoveLockEx.arg.3$15$ := inline$BDLPnP$0$havoc_stringTemp;
- goto inline$BDLPnP$0$label_44#1;
-
- inline$BDLPnP$0$label_44#1:
- goto inline$BDLPnP$0$label_44_true#1, inline$BDLPnP$0$label_44_false#1;
-
- inline$BDLPnP$0$label_44_false#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume !INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
- goto inline$BDLPnP$0$label_45#1;
-
- inline$BDLPnP$0$label_45#1:
- inline$BDLPnP$0$$result.question.16$ := 544632146;
- goto inline$BDLPnP$0$label_47#1;
-
- inline$BDLPnP$0$label_44_true#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
- goto inline$BDLPnP$0$label_46#1;
-
- inline$BDLPnP$0$label_46#1:
- inline$BDLPnP$0$$result.question.16$ := 542142032;
- goto inline$BDLPnP$0$label_47#1;
-
- inline$BDLPnP$0$label_47#1:
- call inline$BDLPnP$0$$result.IoAcquireRemoveLockEx$879.0$14$ := IoAcquireRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8), inline$BDLPnP$0$$result.question.16$, inline$BDLPnP$0$$IoAcquireRemoveLockEx.arg.3$15$, 882, 88);
- goto inline$BDLPnP$0$anon58_Then#1, inline$BDLPnP$0$anon58_Else#1;
-
- inline$BDLPnP$0$anon58_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon9#1;
-
- inline$BDLPnP$0$anon9#1:
- goto inline$BDLPnP$0$label_50#1;
-
- inline$BDLPnP$0$label_50#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.IoAcquireRemoveLockEx$879.0$14$;
- goto inline$BDLPnP$0$label_51#1;
-
- inline$BDLPnP$0$label_51#1:
- goto inline$BDLPnP$0$label_51_true#1, inline$BDLPnP$0$label_51_false#1;
-
- inline$BDLPnP$0$label_51_false#1:
- assume inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 == 0;
- goto inline$BDLPnP$0$label_52#1;
-
- inline$BDLPnP$0$label_52#1:
- goto inline$BDLPnP$0$label_52_case_0#1, inline$BDLPnP$0$label_52_case_1#1, inline$BDLPnP$0$label_52_case_2#1, inline$BDLPnP$0$label_52_case_3#1, inline$BDLPnP$0$label_52_case_4#1, inline$BDLPnP$0$label_52_case_5#1, inline$BDLPnP$0$label_52_case_6#1, inline$BDLPnP$0$label_52_case_7#1, inline$BDLPnP$0$label_52_case_8#1;
-
- inline$BDLPnP$0$label_52_case_8#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 23;
- goto inline$BDLPnP$0$label_134#1;
-
- inline$BDLPnP$0$label_134#1:
- goto inline$BDLPnPSurpriseRemoval$0$Entry#1;
-
- inline$BDLPnPSurpriseRemoval$0$Entry#1:
- inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPSurpriseRemoval$0$start#1;
-
- inline$BDLPnPSurpriseRemoval$0$start#1:
- inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12 := inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12_.1;
- inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12 := inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12_.1;
- goto inline$BDLPnPSurpriseRemoval$0$label_3#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_3#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_4#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_4#1:
- inline$BDLPnPSurpriseRemoval$0$$status$4$2534.16$BDLPnPSurpriseRemoval$12 := 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_5#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_5#1:
- goto inline$BDLGetDebugLevel$658$Entry#1;
-
- inline$BDLGetDebugLevel$658$Entry#1:
- goto inline$BDLGetDebugLevel$658$start#1;
-
- inline$BDLGetDebugLevel$658$start#1:
- goto inline$BDLGetDebugLevel$658$label_3#1;
-
- inline$BDLGetDebugLevel$658$label_3#1:
- havoc inline$BDLGetDebugLevel$658$myNondetVar_0;
- inline$BDLGetDebugLevel$658$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$658$myNondetVar_0;
- goto inline$BDLGetDebugLevel$658$label_1#1;
-
- inline$BDLGetDebugLevel$658$label_1#1:
- goto inline$BDLGetDebugLevel$658$Return#1;
-
- inline$BDLGetDebugLevel$658$Return#1:
- inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$ := inline$BDLGetDebugLevel$658$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPSurpriseRemoval$0$label_5$1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_5$1#1:
- goto inline$BDLPnPSurpriseRemoval$0$anon14_Then#1, inline$BDLPnPSurpriseRemoval$0$anon14_Else#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon14_Else#1:
- assume !raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$anon1#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon1#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_8#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_8#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_8_true#1, inline$BDLPnPSurpriseRemoval$0$label_8_false#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_8_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$) == 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_9#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_8_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$) != 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_12#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_12#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_13#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_13#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_14#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_14#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_15#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_15#1:
- havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$3$;
- goto inline$BDLPnPSurpriseRemoval$0$label_9#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_9#1:
- goto inline$BDLGetDebugLevel$659$Entry#1;
-
- inline$BDLGetDebugLevel$659$Entry#1:
- goto inline$BDLGetDebugLevel$659$start#1;
-
- inline$BDLGetDebugLevel$659$start#1:
- goto inline$BDLGetDebugLevel$659$label_3#1;
-
- inline$BDLGetDebugLevel$659$label_3#1:
- havoc inline$BDLGetDebugLevel$659$myNondetVar_0;
- inline$BDLGetDebugLevel$659$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$659$myNondetVar_0;
- goto inline$BDLGetDebugLevel$659$label_1#1;
-
- inline$BDLGetDebugLevel$659$label_1#1:
- goto inline$BDLGetDebugLevel$659$Return#1;
-
- inline$BDLGetDebugLevel$659$Return#1:
- inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$ := inline$BDLGetDebugLevel$659$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPSurpriseRemoval$0$label_9$1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_9$1#1:
- goto inline$BDLPnPSurpriseRemoval$0$anon15_Then#1, inline$BDLPnPSurpriseRemoval$0$anon15_Else#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon15_Else#1:
- assume !raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$anon3#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon3#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_18#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_18#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_18_true#1, inline$BDLPnPSurpriseRemoval$0$label_18_false#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$) == 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_19#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$) != 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_22#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_22#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_23#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_23#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_24#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_24#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_25#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_25#1:
- havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$8$;
- goto inline$BDLPnPSurpriseRemoval$0$label_19#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_19#1:
- goto inline$BDLGetDebugLevel$660$Entry#1;
-
- inline$BDLGetDebugLevel$660$Entry#1:
- goto inline$BDLGetDebugLevel$660$start#1;
-
- inline$BDLGetDebugLevel$660$start#1:
- goto inline$BDLGetDebugLevel$660$label_3#1;
-
- inline$BDLGetDebugLevel$660$label_3#1:
- havoc inline$BDLGetDebugLevel$660$myNondetVar_0;
- inline$BDLGetDebugLevel$660$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$660$myNondetVar_0;
- goto inline$BDLGetDebugLevel$660$label_1#1;
-
- inline$BDLGetDebugLevel$660$label_1#1:
- goto inline$BDLGetDebugLevel$660$Return#1;
-
- inline$BDLGetDebugLevel$660$Return#1:
- inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$ := inline$BDLGetDebugLevel$660$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPSurpriseRemoval$0$label_19$1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_19$1#1:
- goto inline$BDLPnPSurpriseRemoval$0$anon16_Then#1, inline$BDLPnPSurpriseRemoval$0$anon16_Else#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$anon5#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon5#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_28#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_28#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_28_true#1, inline$BDLPnPSurpriseRemoval$0$label_28_false#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_28_false#1:
- assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$, 4) == 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_29#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_28_true#1:
- assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$, 4) != 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_30#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_30#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_29#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_29#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_31#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_31#1:
- goto inline$BDLHandleRemove$1$Entry#1;
-
- inline$BDLHandleRemove$1$Entry#1:
- inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1 := inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12;
- inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12_.1 := inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12;
- goto inline$BDLHandleRemove$1$start#1;
-
- inline$BDLHandleRemove$1$start#1:
- inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1;
- inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12_.1;
- goto inline$BDLHandleRemove$1$label_3#1;
-
- inline$BDLHandleRemove$1$label_3#1:
- goto inline$BDLHandleRemove$1$label_4#1;
-
- inline$BDLHandleRemove$1$label_4#1:
- inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := 0;
- goto inline$BDLHandleRemove$1$label_5#1;
-
- inline$BDLHandleRemove$1$label_5#1:
- goto inline$BDLHandleRemove$1$label_6#1;
-
- inline$BDLHandleRemove$1$label_6#1:
- havoc inline$BDLHandleRemove$1$myNondetVar_0;
- goto inline$BDLHandleRemove$1$label_7#1;
-
- inline$BDLHandleRemove$1$label_7#1:
- goto inline$BDLGetDebugLevel$661$Entry#1;
-
- inline$BDLGetDebugLevel$661$Entry#1:
- goto inline$BDLGetDebugLevel$661$start#1;
-
- inline$BDLGetDebugLevel$661$start#1:
- goto inline$BDLGetDebugLevel$661$label_3#1;
-
- inline$BDLGetDebugLevel$661$label_3#1:
- havoc inline$BDLGetDebugLevel$661$myNondetVar_0;
- inline$BDLGetDebugLevel$661$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$661$myNondetVar_0;
- goto inline$BDLGetDebugLevel$661$label_1#1;
-
- inline$BDLGetDebugLevel$661$label_1#1:
- goto inline$BDLGetDebugLevel$661$Return#1;
-
- inline$BDLGetDebugLevel$661$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$ := inline$BDLGetDebugLevel$661$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_7$1#1;
-
- inline$BDLHandleRemove$1$label_7$1#1:
- goto inline$BDLHandleRemove$1$anon42_Then#1, inline$BDLHandleRemove$1$anon42_Else#1;
-
- inline$BDLHandleRemove$1$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon1#1;
-
- inline$BDLHandleRemove$1$anon1#1:
- goto inline$BDLHandleRemove$1$label_10#1;
-
- inline$BDLHandleRemove$1$label_10#1:
- goto inline$BDLHandleRemove$1$label_10_true#1, inline$BDLHandleRemove$1$label_10_false#1;
-
- inline$BDLHandleRemove$1$label_10_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$) == 0;
- goto inline$BDLHandleRemove$1$label_11#1;
-
- inline$BDLHandleRemove$1$label_10_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$) != 0;
- goto inline$BDLHandleRemove$1$label_14#1;
-
- inline$BDLHandleRemove$1$label_14#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_15#1;
-
- inline$BDLHandleRemove$1$label_15#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_16#1;
-
- inline$BDLHandleRemove$1$label_16#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_17#1;
-
- inline$BDLHandleRemove$1$label_17#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$3$;
- goto inline$BDLHandleRemove$1$label_11#1;
-
- inline$BDLHandleRemove$1$label_11#1:
- goto inline$BDLGetDebugLevel$662$Entry#1;
-
- inline$BDLGetDebugLevel$662$Entry#1:
- goto inline$BDLGetDebugLevel$662$start#1;
-
- inline$BDLGetDebugLevel$662$start#1:
- goto inline$BDLGetDebugLevel$662$label_3#1;
-
- inline$BDLGetDebugLevel$662$label_3#1:
- havoc inline$BDLGetDebugLevel$662$myNondetVar_0;
- inline$BDLGetDebugLevel$662$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$662$myNondetVar_0;
- goto inline$BDLGetDebugLevel$662$label_1#1;
-
- inline$BDLGetDebugLevel$662$label_1#1:
- goto inline$BDLGetDebugLevel$662$Return#1;
-
- inline$BDLGetDebugLevel$662$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$ := inline$BDLGetDebugLevel$662$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_11$1#1;
-
- inline$BDLHandleRemove$1$label_11$1#1:
- goto inline$BDLHandleRemove$1$anon43_Then#1, inline$BDLHandleRemove$1$anon43_Else#1;
-
- inline$BDLHandleRemove$1$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon3#1;
-
- inline$BDLHandleRemove$1$anon3#1:
- goto inline$BDLHandleRemove$1$label_20#1;
-
- inline$BDLHandleRemove$1$label_20#1:
- goto inline$BDLHandleRemove$1$label_20_true#1, inline$BDLHandleRemove$1$label_20_false#1;
-
- inline$BDLHandleRemove$1$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$) == 0;
- goto inline$BDLHandleRemove$1$label_21#1;
-
- inline$BDLHandleRemove$1$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$) != 0;
- goto inline$BDLHandleRemove$1$label_24#1;
-
- inline$BDLHandleRemove$1$label_24#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_25#1;
-
- inline$BDLHandleRemove$1$label_25#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_26#1;
-
- inline$BDLHandleRemove$1$label_26#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_27#1;
-
- inline$BDLHandleRemove$1$label_27#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$8$;
- goto inline$BDLHandleRemove$1$label_21#1;
-
- inline$BDLHandleRemove$1$label_21#1:
- goto inline$BDLGetDebugLevel$663$Entry#1;
-
- inline$BDLGetDebugLevel$663$Entry#1:
- goto inline$BDLGetDebugLevel$663$start#1;
-
- inline$BDLGetDebugLevel$663$start#1:
- goto inline$BDLGetDebugLevel$663$label_3#1;
-
- inline$BDLGetDebugLevel$663$label_3#1:
- havoc inline$BDLGetDebugLevel$663$myNondetVar_0;
- inline$BDLGetDebugLevel$663$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$663$myNondetVar_0;
- goto inline$BDLGetDebugLevel$663$label_1#1;
-
- inline$BDLGetDebugLevel$663$label_1#1:
- goto inline$BDLGetDebugLevel$663$Return#1;
-
- inline$BDLGetDebugLevel$663$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$ := inline$BDLGetDebugLevel$663$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_21$1#1;
-
- inline$BDLHandleRemove$1$label_21$1#1:
- goto inline$BDLHandleRemove$1$anon44_Then#1, inline$BDLHandleRemove$1$anon44_Else#1;
-
- inline$BDLHandleRemove$1$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon5#1;
-
- inline$BDLHandleRemove$1$anon5#1:
- goto inline$BDLHandleRemove$1$label_30#1;
-
- inline$BDLHandleRemove$1$label_30#1:
- goto inline$BDLHandleRemove$1$label_30_true#1, inline$BDLHandleRemove$1$label_30_false#1;
-
- inline$BDLHandleRemove$1$label_30_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$, 4) == 0;
- goto inline$BDLHandleRemove$1$label_31#1;
-
- inline$BDLHandleRemove$1$label_30_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$, 4) != 0;
- goto inline$BDLHandleRemove$1$label_34#1;
-
- inline$BDLHandleRemove$1$label_34#1:
- goto inline$BDLHandleRemove$1$label_31#1;
-
- inline$BDLHandleRemove$1$label_31#1:
- goto inline$storm_KeSetEvent$29$Entry#1;
-
- inline$storm_KeSetEvent$29$Entry#1:
- inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12);
- goto inline$storm_KeSetEvent$29$start#1;
-
- inline$storm_KeSetEvent$29$start#1:
- inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$29$label_3#1;
-
- inline$storm_KeSetEvent$29$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$29$label_1#1;
-
- inline$storm_KeSetEvent$29$label_1#1:
- goto inline$storm_KeSetEvent$29$Return#1;
-
- inline$storm_KeSetEvent$29$Return#1:
- goto inline$BDLHandleRemove$1$label_31$1#1;
-
- inline$BDLHandleRemove$1$label_31$1#1:
- goto inline$BDLHandleRemove$1$anon45_Then#1, inline$BDLHandleRemove$1$anon45_Else#1;
-
- inline$BDLHandleRemove$1$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon7#1;
-
- inline$BDLHandleRemove$1$anon7#1:
- goto inline$BDLHandleRemove$1$label_35#1;
-
- inline$BDLHandleRemove$1$label_35#1:
- call inline$BDLHandleRemove$1$$result.IoSetDeviceInterfaceState$2406.29$14$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12), 0);
- goto inline$BDLHandleRemove$1$anon46_Then#1, inline$BDLHandleRemove$1$anon46_Else#1;
-
- inline$BDLHandleRemove$1$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon9#1;
-
- inline$BDLHandleRemove$1$anon9#1:
- goto inline$BDLHandleRemove$1$label_38#1;
-
- inline$BDLHandleRemove$1$label_38#1:
- goto inline$BDLCleanupNotificationStruct$1$Entry#1;
-
- inline$BDLCleanupNotificationStruct$1$Entry#1:
- inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1 := inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
- goto inline$BDLCleanupNotificationStruct$1$start#1;
-
- inline$BDLCleanupNotificationStruct$1$start#1:
- call inline$BDLCleanupNotificationStruct$1$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(20);
- call inline$BDLCleanupNotificationStruct$1$$irql$3$3113.45$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(1);
- inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1;
- goto inline$BDLCleanupNotificationStruct$1$label_3#1;
-
- inline$BDLCleanupNotificationStruct$1$label_3#1:
- goto inline$BDLCleanupNotificationStruct$1$label_4#1;
-
- inline$BDLCleanupNotificationStruct$1$label_4#1:
- goto inline$BDLCleanupNotificationStruct$1$label_5#1;
-
- inline$BDLCleanupNotificationStruct$1$label_5#1:
- goto inline$BDLCleanupNotificationStruct$1$label_6#1;
-
- inline$BDLCleanupNotificationStruct$1$label_6#1:
- goto inline$BDLCleanupNotificationStruct$1$label_7#1;
-
- inline$BDLCleanupNotificationStruct$1$label_7#1:
- goto inline$BDLCleanupNotificationStruct$1$label_8#1;
-
- inline$BDLCleanupNotificationStruct$1$label_8#1:
- goto inline$BDLCleanupNotificationStruct$1$label_9#1;
-
- inline$BDLCleanupNotificationStruct$1$label_9#1:
- goto inline$BDLCleanupNotificationStruct$1$label_10#1;
-
- inline$BDLCleanupNotificationStruct$1$label_10#1:
- inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$1$label_11#1;
-
- inline$BDLCleanupNotificationStruct$1$label_11#1:
- goto inline$BDLCleanupNotificationStruct$1$label_12#1;
-
- inline$BDLCleanupNotificationStruct$1$label_12#1:
- inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$1$label_13#1;
-
- inline$BDLCleanupNotificationStruct$1$label_13#1:
- goto inline$BDLCleanupNotificationStruct$1$label_14#1;
-
- inline$BDLCleanupNotificationStruct$1$label_14#1:
- inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$1$label_15#1;
-
- inline$BDLCleanupNotificationStruct$1$label_15#1:
- goto inline$BDLCleanupNotificationStruct$1$label_16#1;
-
- inline$BDLCleanupNotificationStruct$1$label_16#1:
- inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$1$label_17#1;
-
- inline$BDLCleanupNotificationStruct$1$label_17#1:
- goto inline$BDLCleanupNotificationStruct$1$label_18#1;
-
- inline$BDLCleanupNotificationStruct$1$label_18#1:
- goto inline$BDLCleanupNotificationStruct$1$label_19#1;
-
- inline$BDLCleanupNotificationStruct$1$label_19#1:
- goto inline$BDLGetDebugLevel$664$Entry#1;
-
- inline$BDLGetDebugLevel$664$Entry#1:
- goto inline$BDLGetDebugLevel$664$start#1;
-
- inline$BDLGetDebugLevel$664$start#1:
- goto inline$BDLGetDebugLevel$664$label_3#1;
-
- inline$BDLGetDebugLevel$664$label_3#1:
- havoc inline$BDLGetDebugLevel$664$myNondetVar_0;
- inline$BDLGetDebugLevel$664$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$664$myNondetVar_0;
- goto inline$BDLGetDebugLevel$664$label_1#1;
-
- inline$BDLGetDebugLevel$664$label_1#1:
- goto inline$BDLGetDebugLevel$664$Return#1;
-
- inline$BDLGetDebugLevel$664$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$ := inline$BDLGetDebugLevel$664$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_19$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_19$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon46_Then#1, inline$BDLCleanupNotificationStruct$1$anon46_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon1#1;
-
- inline$BDLCleanupNotificationStruct$1$anon1#1:
- goto inline$BDLCleanupNotificationStruct$1$label_22#1;
-
- inline$BDLCleanupNotificationStruct$1$label_22#1:
- goto inline$BDLCleanupNotificationStruct$1$label_22_true#1, inline$BDLCleanupNotificationStruct$1$label_22_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_22_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_23#1;
-
- inline$BDLCleanupNotificationStruct$1$label_22_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_26#1;
-
- inline$BDLCleanupNotificationStruct$1$label_26#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_27#1;
-
- inline$BDLCleanupNotificationStruct$1$label_27#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_28#1;
-
- inline$BDLCleanupNotificationStruct$1$label_28#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_29#1;
-
- inline$BDLCleanupNotificationStruct$1$label_29#1:
- havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$2$;
- goto inline$BDLCleanupNotificationStruct$1$label_23#1;
-
- inline$BDLCleanupNotificationStruct$1$label_23#1:
- goto inline$BDLGetDebugLevel$665$Entry#1;
-
- inline$BDLGetDebugLevel$665$Entry#1:
- goto inline$BDLGetDebugLevel$665$start#1;
-
- inline$BDLGetDebugLevel$665$start#1:
- goto inline$BDLGetDebugLevel$665$label_3#1;
-
- inline$BDLGetDebugLevel$665$label_3#1:
- havoc inline$BDLGetDebugLevel$665$myNondetVar_0;
- inline$BDLGetDebugLevel$665$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$665$myNondetVar_0;
- goto inline$BDLGetDebugLevel$665$label_1#1;
-
- inline$BDLGetDebugLevel$665$label_1#1:
- goto inline$BDLGetDebugLevel$665$Return#1;
-
- inline$BDLGetDebugLevel$665$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$ := inline$BDLGetDebugLevel$665$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_23$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_23$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon47_Then#1, inline$BDLCleanupNotificationStruct$1$anon47_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon3#1;
-
- inline$BDLCleanupNotificationStruct$1$anon3#1:
- goto inline$BDLCleanupNotificationStruct$1$label_32#1;
-
- inline$BDLCleanupNotificationStruct$1$label_32#1:
- goto inline$BDLCleanupNotificationStruct$1$label_32_true#1, inline$BDLCleanupNotificationStruct$1$label_32_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_32_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_33#1;
-
- inline$BDLCleanupNotificationStruct$1$label_32_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_36#1;
-
- inline$BDLCleanupNotificationStruct$1$label_36#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_37#1;
-
- inline$BDLCleanupNotificationStruct$1$label_37#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_38#1;
-
- inline$BDLCleanupNotificationStruct$1$label_38#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_39#1;
-
- inline$BDLCleanupNotificationStruct$1$label_39#1:
- havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$7$;
- goto inline$BDLCleanupNotificationStruct$1$label_33#1;
-
- inline$BDLCleanupNotificationStruct$1$label_33#1:
- goto inline$BDLGetDebugLevel$666$Entry#1;
-
- inline$BDLGetDebugLevel$666$Entry#1:
- goto inline$BDLGetDebugLevel$666$start#1;
-
- inline$BDLGetDebugLevel$666$start#1:
- goto inline$BDLGetDebugLevel$666$label_3#1;
-
- inline$BDLGetDebugLevel$666$label_3#1:
- havoc inline$BDLGetDebugLevel$666$myNondetVar_0;
- inline$BDLGetDebugLevel$666$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$666$myNondetVar_0;
- goto inline$BDLGetDebugLevel$666$label_1#1;
-
- inline$BDLGetDebugLevel$666$label_1#1:
- goto inline$BDLGetDebugLevel$666$Return#1;
-
- inline$BDLGetDebugLevel$666$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$ := inline$BDLGetDebugLevel$666$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_33$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_33$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon48_Then#1, inline$BDLCleanupNotificationStruct$1$anon48_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon5#1;
-
- inline$BDLCleanupNotificationStruct$1$anon5#1:
- goto inline$BDLCleanupNotificationStruct$1$label_42#1;
-
- inline$BDLCleanupNotificationStruct$1$label_42#1:
- goto inline$BDLCleanupNotificationStruct$1$label_42_true#1, inline$BDLCleanupNotificationStruct$1$label_42_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_42_false#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$, 4) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_43#1;
-
- inline$BDLCleanupNotificationStruct$1$label_42_true#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$, 4) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_44#1;
-
- inline$BDLCleanupNotificationStruct$1$label_44#1:
- goto inline$BDLCleanupNotificationStruct$1$label_43#1;
-
- inline$BDLCleanupNotificationStruct$1$label_43#1:
- goto inline$BDLCleanupNotificationStruct$1$label_45#1;
-
- inline$BDLCleanupNotificationStruct$1$label_45#1:
- goto inline$BDLCleanupNotificationStruct$1$label_45_head#1;
-
- inline$BDLCleanupNotificationStruct$1$label_45_head#1:
- goto inline$BDLCleanupNotificationStruct$1$label_45_true#1, inline$BDLCleanupNotificationStruct$1$label_45_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_45_false#1:
- assume 1 == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_46#1;
-
- inline$BDLCleanupNotificationStruct$1$label_45_true#1:
- assume 1 != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_49#1;
-
- inline$BDLCleanupNotificationStruct$1$label_49#1:
- call inline$BDLCleanupNotificationStruct$1$$result.KfRaiseIrql$3141.8$12$ := KfRaiseIrql(2);
- goto inline$BDLCleanupNotificationStruct$1$anon50_Then#1, inline$BDLCleanupNotificationStruct$1$anon50_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon9#1;
-
- inline$BDLCleanupNotificationStruct$1$anon9#1:
- goto inline$BDLCleanupNotificationStruct$1$label_52#1;
-
- inline$BDLCleanupNotificationStruct$1$label_52#1:
- inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$result.KfRaiseIrql$3141.8$12$;
- goto inline$BDLCleanupNotificationStruct$1$label_53#1;
-
- inline$BDLCleanupNotificationStruct$1$label_53#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
- assume inline$BDLCleanupNotificationStruct$1$myNondetVar_0 == inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$3$Entry#1;
-
- inline$storm_KeAcquireSpinLock$3$Entry#1:
- inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$storm_KeAcquireSpinLock$3$start#1;
-
- inline$storm_KeAcquireSpinLock$3$start#1:
- inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
- goto inline$storm_KeAcquireSpinLock$3$label_3#1;
-
- inline$storm_KeAcquireSpinLock$3$label_3#1:
- goto inline$storm_KeAcquireSpinLock$3$label_4#1;
-
- inline$storm_KeAcquireSpinLock$3$label_4#1:
- goto inline$storm_getThreadID$8$Entry#1;
-
- inline$storm_getThreadID$8$Entry#1:
- goto inline$storm_getThreadID$8$anon0#1;
-
- inline$storm_getThreadID$8$anon0#1:
- inline$storm_getThreadID$8$tid := __storm_thread_id;
- goto inline$storm_getThreadID$8$Return#1;
-
- inline$storm_getThreadID$8$Return#1:
- inline$storm_KeAcquireSpinLock$3$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$8$tid;
- goto inline$storm_KeAcquireSpinLock$3$label_4$1#1;
-
- inline$storm_KeAcquireSpinLock$3$label_4$1#1:
- goto inline$storm_KeAcquireSpinLock$3$label_7#1;
-
- inline$storm_KeAcquireSpinLock$3$label_7#1:
- inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$3$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$3$label_8#1;
-
- inline$storm_KeAcquireSpinLock$3$label_8#1:
- goto inline$storm_KeAcquireSpinLock$3$label_9#1;
-
- inline$storm_KeAcquireSpinLock$3$label_9#1:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$3$label_12#1;
-
- inline$storm_KeAcquireSpinLock$3$label_12#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$3$anon7_Then#1, inline$storm_KeAcquireSpinLock$3$anon7_Else#1;
-
- inline$storm_KeAcquireSpinLock$3$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$3$anon1#1;
-
- inline$storm_KeAcquireSpinLock$3$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$3$label_13#1;
-
- inline$storm_KeAcquireSpinLock$3$label_13#1:
- goto inline$storm_KeAcquireSpinLock$3$label_13_true#1, inline$storm_KeAcquireSpinLock$3$label_13_false#1;
-
- inline$storm_KeAcquireSpinLock$3$label_13_false#1:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$3$label_14#1;
-
- inline$storm_KeAcquireSpinLock$3$label_14#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$3$label_1#1;
-
- inline$storm_KeAcquireSpinLock$3$label_13_true#1:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$3$label_17#1;
-
- inline$storm_KeAcquireSpinLock$3$label_17#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$3$anon8_Then#1, inline$storm_KeAcquireSpinLock$3$anon8_Else#1;
-
- inline$storm_KeAcquireSpinLock$3$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$3$anon4#1;
-
- inline$storm_KeAcquireSpinLock$3$anon4#1:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
- goto inline$storm_KeAcquireSpinLock$3$label_18#1;
-
- inline$storm_KeAcquireSpinLock$3$label_18#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8];
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$3$label_19#1;
-
- inline$storm_KeAcquireSpinLock$3$label_19#1:
- goto inline$storm_KeAcquireSpinLock$3$anon9_Then#1, inline$storm_KeAcquireSpinLock$3$anon9_Else#1;
-
- inline$storm_KeAcquireSpinLock$3$anon9_Else#1:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$3$anon6#1;
-
- inline$storm_KeAcquireSpinLock$3$anon9_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$3$anon6#1;
-
- inline$storm_KeAcquireSpinLock$3$anon6#1:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$3$label_1#1;
-
- inline$storm_KeAcquireSpinLock$3$label_1#1:
- goto inline$storm_KeAcquireSpinLock$3$Return#1;
-
- inline$storm_KeAcquireSpinLock$3$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$3$Return#1;
-
- inline$storm_KeAcquireSpinLock$3$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$3$Return#1;
-
- inline$storm_KeAcquireSpinLock$3$Return#1:
- goto inline$BDLCleanupNotificationStruct$1$label_53$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_53$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon51_Then#1, inline$BDLCleanupNotificationStruct$1$anon51_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon11#1;
-
- inline$BDLCleanupNotificationStruct$1$anon11#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$1$label_56#1;
-
- inline$BDLCleanupNotificationStruct$1$label_56#1:
- goto inline$IsListEmpty$4$Entry#1;
-
- inline$IsListEmpty$4$Entry#1:
- inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4_.1 := ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$IsListEmpty$4$start#1;
-
- inline$IsListEmpty$4$start#1:
- inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4_.1;
- goto inline$IsListEmpty$4$label_3#1;
-
- inline$IsListEmpty$4$label_3#1:
- havoc inline$IsListEmpty$4$myNondetVar_0;
- inline$IsListEmpty$4$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$4$myNondetVar_0, inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4));
- goto inline$IsListEmpty$4$label_1#1;
-
- inline$IsListEmpty$4$label_1#1:
- goto inline$IsListEmpty$4$Return#1;
-
- inline$IsListEmpty$4$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$ := inline$IsListEmpty$4$$result.IsListEmpty$8096.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_56$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_56$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon52_Then#1, inline$BDLCleanupNotificationStruct$1$anon52_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon13#1;
-
- inline$BDLCleanupNotificationStruct$1$anon13#1:
- goto inline$BDLCleanupNotificationStruct$1$label_59#1;
-
- inline$BDLCleanupNotificationStruct$1$label_59#1:
- goto inline$BDLCleanupNotificationStruct$1$label_59_true#1, inline$BDLCleanupNotificationStruct$1$label_59_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_59_false#1:
- assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$ == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_60#1;
-
- inline$BDLCleanupNotificationStruct$1$label_60#1:
- goto inline$RemoveHeadList$3$Entry#1;
-
- inline$RemoveHeadList$3$Entry#1:
- goto inline$RemoveHeadList$3$start#1;
-
- inline$RemoveHeadList$3$start#1:
- goto inline$RemoveHeadList$3$label_3#1;
-
- inline$RemoveHeadList$3$label_3#1:
- goto inline$RemoveHeadList$3$label_4#1;
-
- inline$RemoveHeadList$3$label_4#1:
- goto inline$RemoveHeadList$3$label_5#1;
-
- inline$RemoveHeadList$3$label_5#1:
- havoc inline$RemoveHeadList$3$myNondetVar_0;
- inline$RemoveHeadList$3$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$3$myNondetVar_0;
- goto inline$RemoveHeadList$3$label_6#1;
-
- inline$RemoveHeadList$3$label_6#1:
- havoc inline$RemoveHeadList$3$myNondetVar_0;
- goto inline$RemoveHeadList$3$label_7#1;
-
- inline$RemoveHeadList$3$label_7#1:
- goto inline$RemoveHeadList$3$label_8#1;
-
- inline$RemoveHeadList$3$label_8#1:
- goto inline$RemoveHeadList$3$label_9#1;
-
- inline$RemoveHeadList$3$label_9#1:
- inline$RemoveHeadList$3$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$3$$Entry$3$8126.16$RemoveHeadList$4;
- goto inline$RemoveHeadList$3$label_1#1;
-
- inline$RemoveHeadList$3$label_1#1:
- goto inline$RemoveHeadList$3$Return#1;
-
- inline$RemoveHeadList$3$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3153.26$14$ := inline$RemoveHeadList$3$$result.RemoveHeadList$8121.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_60$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_60$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon53_Then#1, inline$BDLCleanupNotificationStruct$1$anon53_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon15#1;
-
- inline$BDLCleanupNotificationStruct$1$anon15#1:
- goto inline$BDLCleanupNotificationStruct$1$label_63#1;
-
- inline$BDLCleanupNotificationStruct$1$label_63#1:
- inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3153.26$14$;
- goto inline$BDLCleanupNotificationStruct$1$label_64#1;
-
- inline$BDLCleanupNotificationStruct$1$label_64#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
- assume inline$BDLCleanupNotificationStruct$1$myNondetVar_0 == inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$5$Entry#1;
-
- inline$storm_KeReleaseSpinLock$5$Entry#1:
- inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$storm_KeReleaseSpinLock$5$start#1;
-
- inline$storm_KeReleaseSpinLock$5$start#1:
- inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$5$label_3#1;
-
- inline$storm_KeReleaseSpinLock$5$label_3#1:
- goto inline$storm_KeReleaseSpinLock$5$label_4#1;
-
- inline$storm_KeReleaseSpinLock$5$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$5$label_7#1;
-
- inline$storm_KeReleaseSpinLock$5$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$5$anon5_Then#1, inline$storm_KeReleaseSpinLock$5$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$5$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$5$anon1#1;
-
- inline$storm_KeReleaseSpinLock$5$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$5$label_8#1;
-
- inline$storm_KeReleaseSpinLock$5$label_8#1:
- goto inline$storm_getThreadID$9$Entry#1;
-
- inline$storm_getThreadID$9$Entry#1:
- goto inline$storm_getThreadID$9$anon0#1;
-
- inline$storm_getThreadID$9$anon0#1:
- inline$storm_getThreadID$9$tid := __storm_thread_id;
- goto inline$storm_getThreadID$9$Return#1;
-
- inline$storm_getThreadID$9$Return#1:
- inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$9$tid;
- goto inline$storm_KeReleaseSpinLock$5$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$5$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$5$label_11#1;
-
- inline$storm_KeReleaseSpinLock$5$label_11#1:
- goto inline$storm_KeReleaseSpinLock$5$label_11_true#1, inline$storm_KeReleaseSpinLock$5$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$5$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$5$label_12#1;
-
- inline$storm_KeReleaseSpinLock$5$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$5$label_1#1;
-
- inline$storm_KeReleaseSpinLock$5$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$5$label_15#1;
-
- inline$storm_KeReleaseSpinLock$5$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$5$label_16#1;
-
- inline$storm_KeReleaseSpinLock$5$label_16#1:
- goto inline$storm_KeReleaseSpinLock$5$anon6_Then#1, inline$storm_KeReleaseSpinLock$5$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$5$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$5$anon4#1;
-
- inline$storm_KeReleaseSpinLock$5$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$5$anon4#1;
-
- inline$storm_KeReleaseSpinLock$5$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$5$label_1#1;
-
- inline$storm_KeReleaseSpinLock$5$label_1#1:
- goto inline$storm_KeReleaseSpinLock$5$Return#1;
-
- inline$storm_KeReleaseSpinLock$5$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$5$Return#1;
-
- inline$storm_KeReleaseSpinLock$5$Return#1:
- goto inline$BDLCleanupNotificationStruct$1$label_64$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_64$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon54_Then#1, inline$BDLCleanupNotificationStruct$1$anon54_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon54_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon17#1;
-
- inline$BDLCleanupNotificationStruct$1$anon17#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$1$label_67#1;
-
- inline$BDLCleanupNotificationStruct$1$label_67#1:
- call KfLowerIrql(inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
- goto inline$BDLCleanupNotificationStruct$1$anon55_Then#1, inline$BDLCleanupNotificationStruct$1$anon55_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon55_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon19#1;
-
- inline$BDLCleanupNotificationStruct$1$anon19#1:
- goto inline$BDLCleanupNotificationStruct$1$label_70#1;
-
- inline$BDLCleanupNotificationStruct$1$label_70#1:
- inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4, 1, 12);
- goto inline$BDLCleanupNotificationStruct$1$label_71#1;
-
- inline$BDLCleanupNotificationStruct$1$label_71#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$1$label_72#1;
-
- inline$BDLCleanupNotificationStruct$1$label_72#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$1$label_73#1;
-
- inline$BDLCleanupNotificationStruct$1$label_73#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$1$label_74#1;
-
- inline$BDLCleanupNotificationStruct$1$label_74#1:
- call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4, 541869122);
- goto inline$BDLCleanupNotificationStruct$1$anon56_Then#1, inline$BDLCleanupNotificationStruct$1$anon56_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon56_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon21#1;
-
- inline$BDLCleanupNotificationStruct$1$anon21#1:
- goto inline$BDLCleanupNotificationStruct$1$label_77#1;
-
- inline$BDLCleanupNotificationStruct$1$label_77#1:
- goto inline$BDLCleanupNotificationStruct$1$label_80#1;
-
- inline$BDLCleanupNotificationStruct$1$label_80#1:
- inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$callresult.$3172.84$15$;
- goto inline$BDLCleanupNotificationStruct$1$label_81#1;
-
- inline$BDLCleanupNotificationStruct$1$label_81#1:
- goto inline$BDLCleanupNotificationStruct$1$label_81_true#1, inline$BDLCleanupNotificationStruct$1$label_81_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_81_false#1:
- assume inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4 == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_45_head#0;
-
- inline$BDLCleanupNotificationStruct$1$label_81_true#1:
- assume inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4 != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_82#1;
-
- inline$BDLCleanupNotificationStruct$1$label_82#1:
- goto inline$BDLGetDebugLevel$667$Entry#1;
-
- inline$BDLGetDebugLevel$667$Entry#1:
- goto inline$BDLGetDebugLevel$667$start#1;
-
- inline$BDLGetDebugLevel$667$start#1:
- goto inline$BDLGetDebugLevel$667$label_3#1;
-
- inline$BDLGetDebugLevel$667$label_3#1:
- havoc inline$BDLGetDebugLevel$667$myNondetVar_0;
- inline$BDLGetDebugLevel$667$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$667$myNondetVar_0;
- goto inline$BDLGetDebugLevel$667$label_1#1;
-
- inline$BDLGetDebugLevel$667$label_1#1:
- goto inline$BDLGetDebugLevel$667$Return#1;
-
- inline$BDLGetDebugLevel$667$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$ := inline$BDLGetDebugLevel$667$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_82$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_82$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon57_Then#1, inline$BDLCleanupNotificationStruct$1$anon57_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon57_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon23#1;
-
- inline$BDLCleanupNotificationStruct$1$anon23#1:
- goto inline$BDLCleanupNotificationStruct$1$label_85#1;
-
- inline$BDLCleanupNotificationStruct$1$label_85#1:
- goto inline$BDLCleanupNotificationStruct$1$label_85_true#1, inline$BDLCleanupNotificationStruct$1$label_85_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_85_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_86#1;
-
- inline$BDLCleanupNotificationStruct$1$label_85_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_89#1;
-
- inline$BDLCleanupNotificationStruct$1$label_89#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_90#1;
-
- inline$BDLCleanupNotificationStruct$1$label_90#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_91#1;
-
- inline$BDLCleanupNotificationStruct$1$label_91#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_92#1;
-
- inline$BDLCleanupNotificationStruct$1$label_92#1:
- havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$17$;
- goto inline$BDLCleanupNotificationStruct$1$label_86#1;
-
- inline$BDLCleanupNotificationStruct$1$label_86#1:
- goto inline$BDLGetDebugLevel$668$Entry#1;
-
- inline$BDLGetDebugLevel$668$Entry#1:
- goto inline$BDLGetDebugLevel$668$start#1;
-
- inline$BDLGetDebugLevel$668$start#1:
- goto inline$BDLGetDebugLevel$668$label_3#1;
-
- inline$BDLGetDebugLevel$668$label_3#1:
- havoc inline$BDLGetDebugLevel$668$myNondetVar_0;
- inline$BDLGetDebugLevel$668$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$668$myNondetVar_0;
- goto inline$BDLGetDebugLevel$668$label_1#1;
-
- inline$BDLGetDebugLevel$668$label_1#1:
- goto inline$BDLGetDebugLevel$668$Return#1;
-
- inline$BDLGetDebugLevel$668$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$ := inline$BDLGetDebugLevel$668$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_86$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_86$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon58_Then#1, inline$BDLCleanupNotificationStruct$1$anon58_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon58_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon25#1;
-
- inline$BDLCleanupNotificationStruct$1$anon25#1:
- goto inline$BDLCleanupNotificationStruct$1$label_95#1;
-
- inline$BDLCleanupNotificationStruct$1$label_95#1:
- goto inline$BDLCleanupNotificationStruct$1$label_95_true#1, inline$BDLCleanupNotificationStruct$1$label_95_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_95_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_96#1;
-
- inline$BDLCleanupNotificationStruct$1$label_95_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_99#1;
-
- inline$BDLCleanupNotificationStruct$1$label_99#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_100#1;
-
- inline$BDLCleanupNotificationStruct$1$label_100#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_101#1;
-
- inline$BDLCleanupNotificationStruct$1$label_101#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_102#1;
-
- inline$BDLCleanupNotificationStruct$1$label_102#1:
- havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$22$;
- goto inline$BDLCleanupNotificationStruct$1$label_96#1;
-
- inline$BDLCleanupNotificationStruct$1$label_96#1:
- goto inline$BDLGetDebugLevel$669$Entry#1;
-
- inline$BDLGetDebugLevel$669$Entry#1:
- goto inline$BDLGetDebugLevel$669$start#1;
-
- inline$BDLGetDebugLevel$669$start#1:
- goto inline$BDLGetDebugLevel$669$label_3#1;
-
- inline$BDLGetDebugLevel$669$label_3#1:
- havoc inline$BDLGetDebugLevel$669$myNondetVar_0;
- inline$BDLGetDebugLevel$669$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$669$myNondetVar_0;
- goto inline$BDLGetDebugLevel$669$label_1#1;
-
- inline$BDLGetDebugLevel$669$label_1#1:
- goto inline$BDLGetDebugLevel$669$Return#1;
-
- inline$BDLGetDebugLevel$669$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$ := inline$BDLGetDebugLevel$669$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_96$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_96$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon59_Then#1, inline$BDLCleanupNotificationStruct$1$anon59_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon59_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon27#1;
-
- inline$BDLCleanupNotificationStruct$1$anon27#1:
- goto inline$BDLCleanupNotificationStruct$1$label_105#1;
-
- inline$BDLCleanupNotificationStruct$1$label_105#1:
- goto inline$BDLCleanupNotificationStruct$1$label_105_true#1, inline$BDLCleanupNotificationStruct$1$label_105_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_105_false#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$, 4) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_45_head#0;
-
- inline$BDLCleanupNotificationStruct$1$label_105_true#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$, 4) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_106#1;
-
- inline$BDLCleanupNotificationStruct$1$label_106#1:
- goto inline$BDLCleanupNotificationStruct$1$label_45_head#0;
-
- inline$BDLCleanupNotificationStruct$1$label_45_head#0:
- assume false;
- return;
-
- inline$BDLCleanupNotificationStruct$1$anon59_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon58_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon57_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon56_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon55_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon54_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon53_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$label_59_true#1:
- assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$ != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_46#1;
-
- inline$BDLCleanupNotificationStruct$1$label_46#1:
- goto inline$BDLCleanupNotificationStruct$1$label_46_head#1;
-
- inline$BDLCleanupNotificationStruct$1$label_46_head#1:
- goto inline$IsListEmpty$3$Entry#1;
-
- inline$IsListEmpty$3$Entry#1:
- inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4_.1 := ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$IsListEmpty$3$start#1;
-
- inline$IsListEmpty$3$start#1:
- inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4_.1;
- goto inline$IsListEmpty$3$label_3#1;
-
- inline$IsListEmpty$3$label_3#1:
- havoc inline$IsListEmpty$3$myNondetVar_0;
- inline$IsListEmpty$3$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$3$myNondetVar_0, inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4));
- goto inline$IsListEmpty$3$label_1#1;
-
- inline$IsListEmpty$3$label_1#1:
- goto inline$IsListEmpty$3$Return#1;
-
- inline$IsListEmpty$3$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$ := inline$IsListEmpty$3$$result.IsListEmpty$8096.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_46_head$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_46_head$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon49_Then#1, inline$BDLCleanupNotificationStruct$1$anon49_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon7#1;
-
- inline$BDLCleanupNotificationStruct$1$anon7#1:
- goto inline$BDLCleanupNotificationStruct$1$label_107#1;
-
- inline$BDLCleanupNotificationStruct$1$label_107#1:
- goto inline$BDLCleanupNotificationStruct$1$label_107_true#1, inline$BDLCleanupNotificationStruct$1$label_107_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_107_false#1:
- assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$ == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_108#1;
-
- inline$BDLCleanupNotificationStruct$1$label_108#1:
- goto inline$RemoveHeadList$4$Entry#1;
-
- inline$RemoveHeadList$4$Entry#1:
- goto inline$RemoveHeadList$4$start#1;
-
- inline$RemoveHeadList$4$start#1:
- goto inline$RemoveHeadList$4$label_3#1;
-
- inline$RemoveHeadList$4$label_3#1:
- goto inline$RemoveHeadList$4$label_4#1;
-
- inline$RemoveHeadList$4$label_4#1:
- goto inline$RemoveHeadList$4$label_5#1;
-
- inline$RemoveHeadList$4$label_5#1:
- havoc inline$RemoveHeadList$4$myNondetVar_0;
- goto inline$RemoveHeadList$4$label_6#1;
-
- inline$RemoveHeadList$4$label_6#1:
- havoc inline$RemoveHeadList$4$myNondetVar_0;
- goto inline$RemoveHeadList$4$label_7#1;
-
- inline$RemoveHeadList$4$label_7#1:
- goto inline$RemoveHeadList$4$label_8#1;
-
- inline$RemoveHeadList$4$label_8#1:
- goto inline$RemoveHeadList$4$label_9#1;
-
- inline$RemoveHeadList$4$label_9#1:
- goto inline$RemoveHeadList$4$label_1#1;
-
- inline$RemoveHeadList$4$label_1#1:
- goto inline$RemoveHeadList$4$Return#1;
-
- inline$RemoveHeadList$4$Return#1:
- goto inline$BDLCleanupNotificationStruct$1$label_108$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_108$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon60_Then#1, inline$BDLCleanupNotificationStruct$1$anon60_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon60_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon29#1;
-
- inline$BDLCleanupNotificationStruct$1$anon29#1:
- goto inline$BDLCleanupNotificationStruct$1$label_154#1;
-
- inline$BDLCleanupNotificationStruct$1$label_154#1:
- goto inline$BDLCleanupNotificationStruct$1$label_155#1;
-
- inline$BDLCleanupNotificationStruct$1$label_155#1:
- goto inline$BDLCleanupNotificationStruct$1$label_156#1;
-
- inline$BDLCleanupNotificationStruct$1$label_156#1:
- goto inline$BDLCleanupNotificationStruct$1$label_46_head#0;
-
- inline$BDLCleanupNotificationStruct$1$label_46_head#0:
- assume false;
- return;
-
- inline$BDLCleanupNotificationStruct$1$anon60_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$label_107_true#1:
- assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$ != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_111#1;
-
- inline$BDLCleanupNotificationStruct$1$label_111#1:
- goto inline$BDLCleanupNotificationStruct$1$label_111_head#1;
-
- inline$BDLCleanupNotificationStruct$1$label_111_head#1:
- goto inline$IsListEmpty$5$Entry#1;
-
- inline$IsListEmpty$5$Entry#1:
- inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4_.1 := IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$IsListEmpty$5$start#1;
-
- inline$IsListEmpty$5$start#1:
- inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4_.1;
- goto inline$IsListEmpty$5$label_3#1;
-
- inline$IsListEmpty$5$label_3#1:
- havoc inline$IsListEmpty$5$myNondetVar_0;
- inline$IsListEmpty$5$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$5$myNondetVar_0, inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4));
- goto inline$IsListEmpty$5$label_1#1;
-
- inline$IsListEmpty$5$label_1#1:
- goto inline$IsListEmpty$5$Return#1;
-
- inline$IsListEmpty$5$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$ := inline$IsListEmpty$5$$result.IsListEmpty$8096.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_111_head$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_111_head$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon61_Then#1, inline$BDLCleanupNotificationStruct$1$anon61_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon61_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon31#1;
-
- inline$BDLCleanupNotificationStruct$1$anon31#1:
- goto inline$BDLCleanupNotificationStruct$1$label_114#1;
-
- inline$BDLCleanupNotificationStruct$1$label_114#1:
- goto inline$BDLCleanupNotificationStruct$1$label_114_true#1, inline$BDLCleanupNotificationStruct$1$label_114_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_114_false#1:
- assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$ == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_115#1;
-
- inline$BDLCleanupNotificationStruct$1$label_115#1:
- goto inline$RemoveHeadList$5$Entry#1;
-
- inline$RemoveHeadList$5$Entry#1:
- goto inline$RemoveHeadList$5$start#1;
-
- inline$RemoveHeadList$5$start#1:
- goto inline$RemoveHeadList$5$label_3#1;
-
- inline$RemoveHeadList$5$label_3#1:
- goto inline$RemoveHeadList$5$label_4#1;
-
- inline$RemoveHeadList$5$label_4#1:
- goto inline$RemoveHeadList$5$label_5#1;
-
- inline$RemoveHeadList$5$label_5#1:
- havoc inline$RemoveHeadList$5$myNondetVar_0;
- inline$RemoveHeadList$5$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$5$myNondetVar_0;
- goto inline$RemoveHeadList$5$label_6#1;
-
- inline$RemoveHeadList$5$label_6#1:
- havoc inline$RemoveHeadList$5$myNondetVar_0;
- goto inline$RemoveHeadList$5$label_7#1;
-
- inline$RemoveHeadList$5$label_7#1:
- goto inline$RemoveHeadList$5$label_8#1;
-
- inline$RemoveHeadList$5$label_8#1:
- goto inline$RemoveHeadList$5$label_9#1;
-
- inline$RemoveHeadList$5$label_9#1:
- inline$RemoveHeadList$5$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$5$$Entry$3$8126.16$RemoveHeadList$4;
- goto inline$RemoveHeadList$5$label_1#1;
-
- inline$RemoveHeadList$5$label_1#1:
- goto inline$RemoveHeadList$5$Return#1;
-
- inline$RemoveHeadList$5$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3218.26$30$ := inline$RemoveHeadList$5$$result.RemoveHeadList$8121.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_115$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_115$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon62_Then#1, inline$BDLCleanupNotificationStruct$1$anon62_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon62_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon33#1;
-
- inline$BDLCleanupNotificationStruct$1$anon33#1:
- goto inline$BDLCleanupNotificationStruct$1$label_149#1;
-
- inline$BDLCleanupNotificationStruct$1$label_149#1:
- inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3218.26$30$;
- goto inline$BDLCleanupNotificationStruct$1$label_150#1;
-
- inline$BDLCleanupNotificationStruct$1$label_150#1:
- inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4, 1, 16);
- goto inline$BDLCleanupNotificationStruct$1$label_151#1;
-
- inline$BDLCleanupNotificationStruct$1$label_151#1:
- call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4, 541869122);
- goto inline$BDLCleanupNotificationStruct$1$anon68_Then#1, inline$BDLCleanupNotificationStruct$1$anon68_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon68_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon45#1;
-
- inline$BDLCleanupNotificationStruct$1$anon45#1:
- goto inline$BDLCleanupNotificationStruct$1$label_111_head#0;
-
- inline$BDLCleanupNotificationStruct$1$label_111_head#0:
- assume false;
- return;
-
- inline$BDLCleanupNotificationStruct$1$anon68_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon62_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$label_114_true#1:
- assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$ != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_118#1;
-
- inline$BDLCleanupNotificationStruct$1$label_118#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
- assume inline$BDLCleanupNotificationStruct$1$myNondetVar_0 == inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$6$Entry#1;
-
- inline$storm_KeReleaseSpinLock$6$Entry#1:
- inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$storm_KeReleaseSpinLock$6$start#1;
-
- inline$storm_KeReleaseSpinLock$6$start#1:
- inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$6$label_3#1;
-
- inline$storm_KeReleaseSpinLock$6$label_3#1:
- goto inline$storm_KeReleaseSpinLock$6$label_4#1;
-
- inline$storm_KeReleaseSpinLock$6$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$6$label_7#1;
-
- inline$storm_KeReleaseSpinLock$6$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$6$anon5_Then#1, inline$storm_KeReleaseSpinLock$6$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$6$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$6$anon1#1;
-
- inline$storm_KeReleaseSpinLock$6$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$6$label_8#1;
-
- inline$storm_KeReleaseSpinLock$6$label_8#1:
- goto inline$storm_getThreadID$10$Entry#1;
-
- inline$storm_getThreadID$10$Entry#1:
- goto inline$storm_getThreadID$10$anon0#1;
-
- inline$storm_getThreadID$10$anon0#1:
- inline$storm_getThreadID$10$tid := __storm_thread_id;
- goto inline$storm_getThreadID$10$Return#1;
-
- inline$storm_getThreadID$10$Return#1:
- inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$10$tid;
- goto inline$storm_KeReleaseSpinLock$6$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$6$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$6$label_11#1;
-
- inline$storm_KeReleaseSpinLock$6$label_11#1:
- goto inline$storm_KeReleaseSpinLock$6$label_11_true#1, inline$storm_KeReleaseSpinLock$6$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$6$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$6$label_12#1;
-
- inline$storm_KeReleaseSpinLock$6$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$6$label_1#1;
-
- inline$storm_KeReleaseSpinLock$6$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$6$label_15#1;
-
- inline$storm_KeReleaseSpinLock$6$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$6$label_16#1;
-
- inline$storm_KeReleaseSpinLock$6$label_16#1:
- goto inline$storm_KeReleaseSpinLock$6$anon6_Then#1, inline$storm_KeReleaseSpinLock$6$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$6$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$6$anon4#1;
-
- inline$storm_KeReleaseSpinLock$6$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$6$anon4#1;
-
- inline$storm_KeReleaseSpinLock$6$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$6$label_1#1;
-
- inline$storm_KeReleaseSpinLock$6$label_1#1:
- goto inline$storm_KeReleaseSpinLock$6$Return#1;
-
- inline$storm_KeReleaseSpinLock$6$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$6$Return#1;
-
- inline$storm_KeReleaseSpinLock$6$Return#1:
- goto inline$BDLCleanupNotificationStruct$1$label_118$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_118$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon63_Then#1, inline$BDLCleanupNotificationStruct$1$anon63_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon63_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon35#1;
-
- inline$BDLCleanupNotificationStruct$1$anon35#1:
- havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$1$label_121#1;
-
- inline$BDLCleanupNotificationStruct$1$label_121#1:
- call KfLowerIrql(inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
- goto inline$BDLCleanupNotificationStruct$1$anon64_Then#1, inline$BDLCleanupNotificationStruct$1$anon64_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon64_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon37#1;
-
- inline$BDLCleanupNotificationStruct$1$anon37#1:
- goto inline$BDLCleanupNotificationStruct$1$label_124#1;
-
- inline$BDLCleanupNotificationStruct$1$label_124#1:
- goto inline$BDLGetDebugLevel$670$Entry#1;
-
- inline$BDLGetDebugLevel$670$Entry#1:
- goto inline$BDLGetDebugLevel$670$start#1;
-
- inline$BDLGetDebugLevel$670$start#1:
- goto inline$BDLGetDebugLevel$670$label_3#1;
-
- inline$BDLGetDebugLevel$670$label_3#1:
- havoc inline$BDLGetDebugLevel$670$myNondetVar_0;
- inline$BDLGetDebugLevel$670$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$670$myNondetVar_0;
- goto inline$BDLGetDebugLevel$670$label_1#1;
-
- inline$BDLGetDebugLevel$670$label_1#1:
- goto inline$BDLGetDebugLevel$670$Return#1;
-
- inline$BDLGetDebugLevel$670$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$ := inline$BDLGetDebugLevel$670$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_124$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_124$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon65_Then#1, inline$BDLCleanupNotificationStruct$1$anon65_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon65_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon39#1;
-
- inline$BDLCleanupNotificationStruct$1$anon39#1:
- goto inline$BDLCleanupNotificationStruct$1$label_127#1;
-
- inline$BDLCleanupNotificationStruct$1$label_127#1:
- goto inline$BDLCleanupNotificationStruct$1$label_127_true#1, inline$BDLCleanupNotificationStruct$1$label_127_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_127_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_128#1;
-
- inline$BDLCleanupNotificationStruct$1$label_127_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_131#1;
-
- inline$BDLCleanupNotificationStruct$1$label_131#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_132#1;
-
- inline$BDLCleanupNotificationStruct$1$label_132#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_133#1;
-
- inline$BDLCleanupNotificationStruct$1$label_133#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_134#1;
-
- inline$BDLCleanupNotificationStruct$1$label_134#1:
- havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$32$;
- goto inline$BDLCleanupNotificationStruct$1$label_128#1;
-
- inline$BDLCleanupNotificationStruct$1$label_128#1:
- goto inline$BDLGetDebugLevel$671$Entry#1;
-
- inline$BDLGetDebugLevel$671$Entry#1:
- goto inline$BDLGetDebugLevel$671$start#1;
-
- inline$BDLGetDebugLevel$671$start#1:
- goto inline$BDLGetDebugLevel$671$label_3#1;
-
- inline$BDLGetDebugLevel$671$label_3#1:
- havoc inline$BDLGetDebugLevel$671$myNondetVar_0;
- inline$BDLGetDebugLevel$671$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$671$myNondetVar_0;
- goto inline$BDLGetDebugLevel$671$label_1#1;
-
- inline$BDLGetDebugLevel$671$label_1#1:
- goto inline$BDLGetDebugLevel$671$Return#1;
-
- inline$BDLGetDebugLevel$671$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$ := inline$BDLGetDebugLevel$671$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_128$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_128$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon66_Then#1, inline$BDLCleanupNotificationStruct$1$anon66_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon66_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon41#1;
-
- inline$BDLCleanupNotificationStruct$1$anon41#1:
- goto inline$BDLCleanupNotificationStruct$1$label_137#1;
-
- inline$BDLCleanupNotificationStruct$1$label_137#1:
- goto inline$BDLCleanupNotificationStruct$1$label_137_true#1, inline$BDLCleanupNotificationStruct$1$label_137_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_137_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_138#1;
-
- inline$BDLCleanupNotificationStruct$1$label_137_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_141#1;
-
- inline$BDLCleanupNotificationStruct$1$label_141#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_142#1;
-
- inline$BDLCleanupNotificationStruct$1$label_142#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_143#1;
-
- inline$BDLCleanupNotificationStruct$1$label_143#1:
- call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$1$label_144#1;
-
- inline$BDLCleanupNotificationStruct$1$label_144#1:
- havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$37$;
- goto inline$BDLCleanupNotificationStruct$1$label_138#1;
-
- inline$BDLCleanupNotificationStruct$1$label_138#1:
- goto inline$BDLGetDebugLevel$672$Entry#1;
-
- inline$BDLGetDebugLevel$672$Entry#1:
- goto inline$BDLGetDebugLevel$672$start#1;
-
- inline$BDLGetDebugLevel$672$start#1:
- goto inline$BDLGetDebugLevel$672$label_3#1;
-
- inline$BDLGetDebugLevel$672$label_3#1:
- havoc inline$BDLGetDebugLevel$672$myNondetVar_0;
- inline$BDLGetDebugLevel$672$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$672$myNondetVar_0;
- goto inline$BDLGetDebugLevel$672$label_1#1;
-
- inline$BDLGetDebugLevel$672$label_1#1:
- goto inline$BDLGetDebugLevel$672$Return#1;
-
- inline$BDLGetDebugLevel$672$Return#1:
- inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$ := inline$BDLGetDebugLevel$672$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$1$label_138$1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_138$1#1:
- goto inline$BDLCleanupNotificationStruct$1$anon67_Then#1, inline$BDLCleanupNotificationStruct$1$anon67_Else#1;
-
- inline$BDLCleanupNotificationStruct$1$anon67_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$1$anon43#1;
-
- inline$BDLCleanupNotificationStruct$1$anon43#1:
- goto inline$BDLCleanupNotificationStruct$1$label_147#1;
-
- inline$BDLCleanupNotificationStruct$1$label_147#1:
- goto inline$BDLCleanupNotificationStruct$1$label_147_true#1, inline$BDLCleanupNotificationStruct$1$label_147_false#1;
-
- inline$BDLCleanupNotificationStruct$1$label_147_false#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$, 4) == 0;
- goto inline$BDLCleanupNotificationStruct$1$label_1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_147_true#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$, 4) != 0;
- goto inline$BDLCleanupNotificationStruct$1$label_148#1;
-
- inline$BDLCleanupNotificationStruct$1$label_148#1:
- goto inline$BDLCleanupNotificationStruct$1$label_1#1;
-
- inline$BDLCleanupNotificationStruct$1$label_1#1:
- call __HAVOC_free(inline$BDLCleanupNotificationStruct$1$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4);
- call __HAVOC_free(inline$BDLCleanupNotificationStruct$1$$irql$3$3113.45$BDLCleanupNotificationStruct$4);
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon67_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon66_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon65_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon64_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon63_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon61_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon49_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon52_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon51_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon50_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon48_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon47_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$anon46_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$1$Return#1;
-
- inline$BDLCleanupNotificationStruct$1$Return#1:
- goto inline$BDLHandleRemove$1$label_38$1#1;
-
- inline$BDLHandleRemove$1$label_38$1#1:
- goto inline$BDLHandleRemove$1$anon47_Then#1, inline$BDLHandleRemove$1$anon47_Else#1;
-
- inline$BDLHandleRemove$1$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon11#1;
-
- inline$BDLHandleRemove$1$anon11#1:
- goto inline$BDLHandleRemove$1$label_41#1;
-
- inline$BDLHandleRemove$1$label_41#1:
- goto inline$BDLCleanupDataHandles$1$Entry#1;
-
- inline$BDLCleanupDataHandles$1$Entry#1:
- inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1 := inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
- goto inline$BDLCleanupDataHandles$1$start#1;
-
- inline$BDLCleanupDataHandles$1$start#1:
- call inline$BDLCleanupDataHandles$1$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(4);
- call inline$BDLCleanupDataHandles$1$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(8);
- call inline$BDLCleanupDataHandles$1$$irql$6$3249.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(1);
- inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1;
- goto inline$BDLCleanupDataHandles$1$label_3#1;
-
- inline$BDLCleanupDataHandles$1$label_3#1:
- goto inline$BDLCleanupDataHandles$1$label_4#1;
-
- inline$BDLCleanupDataHandles$1$label_4#1:
- goto inline$BDLCleanupDataHandles$1$label_5#1;
-
- inline$BDLCleanupDataHandles$1$label_5#1:
- inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := 0;
- goto inline$BDLCleanupDataHandles$1$label_6#1;
-
- inline$BDLCleanupDataHandles$1$label_6#1:
- goto inline$BDLCleanupDataHandles$1$label_7#1;
-
- inline$BDLCleanupDataHandles$1$label_7#1:
- goto inline$BDLCleanupDataHandles$1$label_8#1;
-
- inline$BDLCleanupDataHandles$1$label_8#1:
- goto inline$BDLCleanupDataHandles$1$label_9#1;
-
- inline$BDLCleanupDataHandles$1$label_9#1:
- goto inline$BDLGetDebugLevel$673$Entry#1;
-
- inline$BDLGetDebugLevel$673$Entry#1:
- goto inline$BDLGetDebugLevel$673$start#1;
-
- inline$BDLGetDebugLevel$673$start#1:
- goto inline$BDLGetDebugLevel$673$label_3#1;
-
- inline$BDLGetDebugLevel$673$label_3#1:
- havoc inline$BDLGetDebugLevel$673$myNondetVar_0;
- inline$BDLGetDebugLevel$673$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$673$myNondetVar_0;
- goto inline$BDLGetDebugLevel$673$label_1#1;
-
- inline$BDLGetDebugLevel$673$label_1#1:
- goto inline$BDLGetDebugLevel$673$Return#1;
-
- inline$BDLGetDebugLevel$673$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$ := inline$BDLGetDebugLevel$673$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_9$1#1;
-
- inline$BDLCleanupDataHandles$1$label_9$1#1:
- goto inline$BDLCleanupDataHandles$1$anon30_Then#1, inline$BDLCleanupDataHandles$1$anon30_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon1#1;
-
- inline$BDLCleanupDataHandles$1$anon1#1:
- goto inline$BDLCleanupDataHandles$1$label_12#1;
-
- inline$BDLCleanupDataHandles$1$label_12#1:
- goto inline$BDLCleanupDataHandles$1$label_12_true#1, inline$BDLCleanupDataHandles$1$label_12_false#1;
-
- inline$BDLCleanupDataHandles$1$label_12_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$) == 0;
- goto inline$BDLCleanupDataHandles$1$label_13#1;
-
- inline$BDLCleanupDataHandles$1$label_12_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$) != 0;
- goto inline$BDLCleanupDataHandles$1$label_16#1;
-
- inline$BDLCleanupDataHandles$1$label_16#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_17#1;
-
- inline$BDLCleanupDataHandles$1$label_17#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_18#1;
-
- inline$BDLCleanupDataHandles$1$label_18#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_19#1;
-
- inline$BDLCleanupDataHandles$1$label_19#1:
- havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$2$;
- goto inline$BDLCleanupDataHandles$1$label_13#1;
-
- inline$BDLCleanupDataHandles$1$label_13#1:
- goto inline$BDLGetDebugLevel$674$Entry#1;
-
- inline$BDLGetDebugLevel$674$Entry#1:
- goto inline$BDLGetDebugLevel$674$start#1;
-
- inline$BDLGetDebugLevel$674$start#1:
- goto inline$BDLGetDebugLevel$674$label_3#1;
-
- inline$BDLGetDebugLevel$674$label_3#1:
- havoc inline$BDLGetDebugLevel$674$myNondetVar_0;
- inline$BDLGetDebugLevel$674$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$674$myNondetVar_0;
- goto inline$BDLGetDebugLevel$674$label_1#1;
-
- inline$BDLGetDebugLevel$674$label_1#1:
- goto inline$BDLGetDebugLevel$674$Return#1;
-
- inline$BDLGetDebugLevel$674$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$ := inline$BDLGetDebugLevel$674$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_13$1#1;
-
- inline$BDLCleanupDataHandles$1$label_13$1#1:
- goto inline$BDLCleanupDataHandles$1$anon31_Then#1, inline$BDLCleanupDataHandles$1$anon31_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon3#1;
-
- inline$BDLCleanupDataHandles$1$anon3#1:
- goto inline$BDLCleanupDataHandles$1$label_22#1;
-
- inline$BDLCleanupDataHandles$1$label_22#1:
- goto inline$BDLCleanupDataHandles$1$label_22_true#1, inline$BDLCleanupDataHandles$1$label_22_false#1;
-
- inline$BDLCleanupDataHandles$1$label_22_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$) == 0;
- goto inline$BDLCleanupDataHandles$1$label_23#1;
-
- inline$BDLCleanupDataHandles$1$label_22_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$) != 0;
- goto inline$BDLCleanupDataHandles$1$label_26#1;
-
- inline$BDLCleanupDataHandles$1$label_26#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_27#1;
-
- inline$BDLCleanupDataHandles$1$label_27#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_28#1;
-
- inline$BDLCleanupDataHandles$1$label_28#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_29#1;
-
- inline$BDLCleanupDataHandles$1$label_29#1:
- havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$7$;
- goto inline$BDLCleanupDataHandles$1$label_23#1;
-
- inline$BDLCleanupDataHandles$1$label_23#1:
- goto inline$BDLGetDebugLevel$675$Entry#1;
-
- inline$BDLGetDebugLevel$675$Entry#1:
- goto inline$BDLGetDebugLevel$675$start#1;
-
- inline$BDLGetDebugLevel$675$start#1:
- goto inline$BDLGetDebugLevel$675$label_3#1;
-
- inline$BDLGetDebugLevel$675$label_3#1:
- havoc inline$BDLGetDebugLevel$675$myNondetVar_0;
- inline$BDLGetDebugLevel$675$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$675$myNondetVar_0;
- goto inline$BDLGetDebugLevel$675$label_1#1;
-
- inline$BDLGetDebugLevel$675$label_1#1:
- goto inline$BDLGetDebugLevel$675$Return#1;
-
- inline$BDLGetDebugLevel$675$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$ := inline$BDLGetDebugLevel$675$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_23$1#1;
-
- inline$BDLCleanupDataHandles$1$label_23$1#1:
- goto inline$BDLCleanupDataHandles$1$anon32_Then#1, inline$BDLCleanupDataHandles$1$anon32_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon5#1;
-
- inline$BDLCleanupDataHandles$1$anon5#1:
- goto inline$BDLCleanupDataHandles$1$label_32#1;
-
- inline$BDLCleanupDataHandles$1$label_32#1:
- goto inline$BDLCleanupDataHandles$1$label_32_true#1, inline$BDLCleanupDataHandles$1$label_32_false#1;
-
- inline$BDLCleanupDataHandles$1$label_32_false#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$, 4) == 0;
- goto inline$BDLCleanupDataHandles$1$label_33#1;
-
- inline$BDLCleanupDataHandles$1$label_32_true#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$, 4) != 0;
- goto inline$BDLCleanupDataHandles$1$label_34#1;
-
- inline$BDLCleanupDataHandles$1$label_34#1:
- goto inline$BDLCleanupDataHandles$1$label_33#1;
-
- inline$BDLCleanupDataHandles$1$label_33#1:
- goto inline$BDLCleanupDataHandles$1$label_35#1;
-
- inline$BDLCleanupDataHandles$1$label_35#1:
- goto inline$BDLLockHandleList$1$Entry#1;
-
- inline$BDLLockHandleList$1$Entry#1:
- inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1 := inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
- goto inline$BDLLockHandleList$1$start#1;
-
- inline$BDLLockHandleList$1$start#1:
- inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8 := inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1;
- goto inline$BDLLockHandleList$1$label_3#1;
-
- inline$BDLLockHandleList$1$label_3#1:
- havoc inline$BDLLockHandleList$1$myNondetVar_0;
- havoc inline$BDLLockHandleList$1$myNondetVar_1;
- assume inline$BDLLockHandleList$1$myNondetVar_0 == inline$BDLLockHandleList$1$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$4$Entry#1;
-
- inline$storm_KeAcquireSpinLock$4$Entry#1:
- inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8);
- goto inline$storm_KeAcquireSpinLock$4$start#1;
-
- inline$storm_KeAcquireSpinLock$4$start#1:
- inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
- goto inline$storm_KeAcquireSpinLock$4$label_3#1;
-
- inline$storm_KeAcquireSpinLock$4$label_3#1:
- goto inline$storm_KeAcquireSpinLock$4$label_4#1;
-
- inline$storm_KeAcquireSpinLock$4$label_4#1:
- goto inline$storm_getThreadID$11$Entry#1;
-
- inline$storm_getThreadID$11$Entry#1:
- goto inline$storm_getThreadID$11$anon0#1;
-
- inline$storm_getThreadID$11$anon0#1:
- inline$storm_getThreadID$11$tid := __storm_thread_id;
- goto inline$storm_getThreadID$11$Return#1;
-
- inline$storm_getThreadID$11$Return#1:
- inline$storm_KeAcquireSpinLock$4$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$11$tid;
- goto inline$storm_KeAcquireSpinLock$4$label_4$1#1;
-
- inline$storm_KeAcquireSpinLock$4$label_4$1#1:
- goto inline$storm_KeAcquireSpinLock$4$label_7#1;
-
- inline$storm_KeAcquireSpinLock$4$label_7#1:
- inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$4$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$4$label_8#1;
-
- inline$storm_KeAcquireSpinLock$4$label_8#1:
- goto inline$storm_KeAcquireSpinLock$4$label_9#1;
-
- inline$storm_KeAcquireSpinLock$4$label_9#1:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$4$label_12#1;
-
- inline$storm_KeAcquireSpinLock$4$label_12#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$4$anon7_Then#1, inline$storm_KeAcquireSpinLock$4$anon7_Else#1;
-
- inline$storm_KeAcquireSpinLock$4$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$4$anon1#1;
-
- inline$storm_KeAcquireSpinLock$4$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$4$label_13#1;
-
- inline$storm_KeAcquireSpinLock$4$label_13#1:
- goto inline$storm_KeAcquireSpinLock$4$label_13_true#1, inline$storm_KeAcquireSpinLock$4$label_13_false#1;
-
- inline$storm_KeAcquireSpinLock$4$label_13_false#1:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$4$label_14#1;
-
- inline$storm_KeAcquireSpinLock$4$label_14#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$4$label_1#1;
-
- inline$storm_KeAcquireSpinLock$4$label_13_true#1:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$4$label_17#1;
-
- inline$storm_KeAcquireSpinLock$4$label_17#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$4$anon8_Then#1, inline$storm_KeAcquireSpinLock$4$anon8_Else#1;
-
- inline$storm_KeAcquireSpinLock$4$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$4$anon4#1;
-
- inline$storm_KeAcquireSpinLock$4$anon4#1:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
- goto inline$storm_KeAcquireSpinLock$4$label_18#1;
-
- inline$storm_KeAcquireSpinLock$4$label_18#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8];
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$4$label_19#1;
-
- inline$storm_KeAcquireSpinLock$4$label_19#1:
- goto inline$storm_KeAcquireSpinLock$4$anon9_Then#1, inline$storm_KeAcquireSpinLock$4$anon9_Else#1;
-
- inline$storm_KeAcquireSpinLock$4$anon9_Else#1:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$4$anon6#1;
-
- inline$storm_KeAcquireSpinLock$4$anon9_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$4$anon6#1;
-
- inline$storm_KeAcquireSpinLock$4$anon6#1:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$4$label_1#1;
-
- inline$storm_KeAcquireSpinLock$4$label_1#1:
- goto inline$storm_KeAcquireSpinLock$4$Return#1;
-
- inline$storm_KeAcquireSpinLock$4$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$4$Return#1;
-
- inline$storm_KeAcquireSpinLock$4$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$4$Return#1;
-
- inline$storm_KeAcquireSpinLock$4$Return#1:
- goto inline$BDLLockHandleList$1$label_3$1#1;
-
- inline$BDLLockHandleList$1$label_3$1#1:
- goto inline$BDLLockHandleList$1$anon2_Then#1, inline$BDLLockHandleList$1$anon2_Else#1;
-
- inline$BDLLockHandleList$1$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLLockHandleList$1$anon1#1;
-
- inline$BDLLockHandleList$1$anon1#1:
- havoc inline$BDLLockHandleList$1$myNondetVar_0;
- goto inline$BDLLockHandleList$1$label_1#1;
-
- inline$BDLLockHandleList$1$label_1#1:
- goto inline$BDLLockHandleList$1$Return#1;
-
- inline$BDLLockHandleList$1$anon2_Then#1:
- assume raiseException;
- goto inline$BDLLockHandleList$1$Return#1;
-
- inline$BDLLockHandleList$1$Return#1:
- goto inline$BDLCleanupDataHandles$1$label_35$1#1;
-
- inline$BDLCleanupDataHandles$1$label_35$1#1:
- goto inline$BDLCleanupDataHandles$1$anon33_Then#1, inline$BDLCleanupDataHandles$1$anon33_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon7#1;
-
- inline$BDLCleanupDataHandles$1$anon7#1:
- goto inline$BDLCleanupDataHandles$1$label_38#1;
-
- inline$BDLCleanupDataHandles$1$label_38#1:
- goto inline$BDLCleanupDataHandles$1$label_38_head#1;
-
- inline$BDLCleanupDataHandles$1$label_38_head#1:
- goto inline$BDLGetFirstHandle$1$Entry#1;
-
- inline$BDLGetFirstHandle$1$Entry#1:
- goto inline$BDLGetFirstHandle$1$start#1;
-
- inline$BDLGetFirstHandle$1$start#1:
- goto inline$BDLGetFirstHandle$1$label_3#1;
-
- inline$BDLGetFirstHandle$1$label_3#1:
- goto inline$BDLGetFirstHandle$1$label_3_true#1, inline$BDLGetFirstHandle$1$label_3_false#1;
-
- inline$BDLGetFirstHandle$1$label_3_false#1:
- havoc inline$BDLGetFirstHandle$1$myNondetVar_0;
- assume inline$BDLGetFirstHandle$1$myNondetVar_0 == 0;
- goto inline$BDLGetFirstHandle$1$label_4#1;
-
- inline$BDLGetFirstHandle$1$label_4#1:
- inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$ := 0;
- goto inline$BDLGetFirstHandle$1$label_1#1;
-
- inline$BDLGetFirstHandle$1$label_3_true#1:
- havoc inline$BDLGetFirstHandle$1$myNondetVar_0;
- assume inline$BDLGetFirstHandle$1$myNondetVar_0 != 0;
- goto inline$BDLGetFirstHandle$1$label_5#1;
-
- inline$BDLGetFirstHandle$1$label_5#1:
- havoc inline$BDLGetFirstHandle$1$myNondetVar_0;
- havoc inline$BDLGetFirstHandle$1$myNondetVar_1;
- goto inline$BDLGetFirstHandle$1$label_6#1;
-
- inline$BDLGetFirstHandle$1$label_6#1:
- inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$ := 1;
- goto inline$BDLGetFirstHandle$1$label_1#1;
-
- inline$BDLGetFirstHandle$1$label_1#1:
- goto inline$BDLGetFirstHandle$1$Return#1;
-
- inline$BDLGetFirstHandle$1$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$ := inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_38_head$1#1;
-
- inline$BDLCleanupDataHandles$1$label_38_head$1#1:
- goto inline$BDLCleanupDataHandles$1$anon34_Then#1, inline$BDLCleanupDataHandles$1$anon34_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon9#1;
-
- inline$BDLCleanupDataHandles$1$anon9#1:
- goto inline$BDLCleanupDataHandles$1$label_41#1;
-
- inline$BDLCleanupDataHandles$1$label_41#1:
- goto inline$BDLCleanupDataHandles$1$label_41_true#1, inline$BDLCleanupDataHandles$1$label_41_false#1;
-
- inline$BDLCleanupDataHandles$1$label_41_false#1:
- assume !INT_EQ(inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$, 1);
- goto inline$BDLCleanupDataHandles$1$label_42#1;
-
- inline$BDLCleanupDataHandles$1$label_42#1:
- havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
- goto inline$BDLReleaseHandleList$1$Entry#1;
-
- inline$BDLReleaseHandleList$1$Entry#1:
- inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1 := inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
- goto inline$BDLReleaseHandleList$1$start#1;
-
- inline$BDLReleaseHandleList$1$start#1:
- inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8 := inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1;
- goto inline$BDLReleaseHandleList$1$label_3#1;
-
- inline$BDLReleaseHandleList$1$label_3#1:
- havoc inline$BDLReleaseHandleList$1$myNondetVar_0;
- havoc inline$BDLReleaseHandleList$1$myNondetVar_1;
- assume inline$BDLReleaseHandleList$1$myNondetVar_0 == inline$BDLReleaseHandleList$1$myNondetVar_1;
- goto inline$storm_KeReleaseSpinLock$7$Entry#1;
-
- inline$storm_KeReleaseSpinLock$7$Entry#1:
- inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8);
- goto inline$storm_KeReleaseSpinLock$7$start#1;
-
- inline$storm_KeReleaseSpinLock$7$start#1:
- inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$7$label_3#1;
-
- inline$storm_KeReleaseSpinLock$7$label_3#1:
- goto inline$storm_KeReleaseSpinLock$7$label_4#1;
-
- inline$storm_KeReleaseSpinLock$7$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$7$label_7#1;
-
- inline$storm_KeReleaseSpinLock$7$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$7$anon5_Then#1, inline$storm_KeReleaseSpinLock$7$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$7$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$7$anon1#1;
-
- inline$storm_KeReleaseSpinLock$7$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$7$label_8#1;
-
- inline$storm_KeReleaseSpinLock$7$label_8#1:
- goto inline$storm_getThreadID$12$Entry#1;
-
- inline$storm_getThreadID$12$Entry#1:
- goto inline$storm_getThreadID$12$anon0#1;
-
- inline$storm_getThreadID$12$anon0#1:
- inline$storm_getThreadID$12$tid := __storm_thread_id;
- goto inline$storm_getThreadID$12$Return#1;
-
- inline$storm_getThreadID$12$Return#1:
- inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$12$tid;
- goto inline$storm_KeReleaseSpinLock$7$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$7$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$7$label_11#1;
-
- inline$storm_KeReleaseSpinLock$7$label_11#1:
- goto inline$storm_KeReleaseSpinLock$7$label_11_true#1, inline$storm_KeReleaseSpinLock$7$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$7$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$7$label_12#1;
-
- inline$storm_KeReleaseSpinLock$7$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$7$label_1#1;
-
- inline$storm_KeReleaseSpinLock$7$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$7$label_15#1;
-
- inline$storm_KeReleaseSpinLock$7$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$7$label_16#1;
-
- inline$storm_KeReleaseSpinLock$7$label_16#1:
- goto inline$storm_KeReleaseSpinLock$7$anon6_Then#1, inline$storm_KeReleaseSpinLock$7$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$7$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$7$anon4#1;
-
- inline$storm_KeReleaseSpinLock$7$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$7$anon4#1;
-
- inline$storm_KeReleaseSpinLock$7$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$7$label_1#1;
-
- inline$storm_KeReleaseSpinLock$7$label_1#1:
- goto inline$storm_KeReleaseSpinLock$7$Return#1;
-
- inline$storm_KeReleaseSpinLock$7$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$7$Return#1;
-
- inline$storm_KeReleaseSpinLock$7$Return#1:
- goto inline$BDLReleaseHandleList$1$label_3$1#1;
-
- inline$BDLReleaseHandleList$1$label_3$1#1:
- goto inline$BDLReleaseHandleList$1$anon2_Then#1, inline$BDLReleaseHandleList$1$anon2_Else#1;
-
- inline$BDLReleaseHandleList$1$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLReleaseHandleList$1$anon1#1;
-
- inline$BDLReleaseHandleList$1$anon1#1:
- havoc inline$BDLReleaseHandleList$1$myNondetVar_0;
- goto inline$BDLReleaseHandleList$1$label_1#1;
-
- inline$BDLReleaseHandleList$1$label_1#1:
- goto inline$BDLReleaseHandleList$1$Return#1;
-
- inline$BDLReleaseHandleList$1$anon2_Then#1:
- assume raiseException;
- goto inline$BDLReleaseHandleList$1$Return#1;
-
- inline$BDLReleaseHandleList$1$Return#1:
- goto inline$BDLCleanupDataHandles$1$label_42$1#1;
-
- inline$BDLCleanupDataHandles$1$label_42$1#1:
- goto inline$BDLCleanupDataHandles$1$anon35_Then#1, inline$BDLCleanupDataHandles$1$anon35_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon11#1;
-
- inline$BDLCleanupDataHandles$1$anon11#1:
- goto inline$BDLCleanupDataHandles$1$label_87#1;
-
- inline$BDLCleanupDataHandles$1$label_87#1:
- goto inline$BDLGetDebugLevel$679$Entry#1;
-
- inline$BDLGetDebugLevel$679$Entry#1:
- goto inline$BDLGetDebugLevel$679$start#1;
-
- inline$BDLGetDebugLevel$679$start#1:
- goto inline$BDLGetDebugLevel$679$label_3#1;
-
- inline$BDLGetDebugLevel$679$label_3#1:
- havoc inline$BDLGetDebugLevel$679$myNondetVar_0;
- inline$BDLGetDebugLevel$679$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$679$myNondetVar_0;
- goto inline$BDLGetDebugLevel$679$label_1#1;
-
- inline$BDLGetDebugLevel$679$label_1#1:
- goto inline$BDLGetDebugLevel$679$Return#1;
-
- inline$BDLGetDebugLevel$679$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$ := inline$BDLGetDebugLevel$679$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_87$1#1;
-
- inline$BDLCleanupDataHandles$1$label_87$1#1:
- goto inline$BDLCleanupDataHandles$1$anon42_Then#1, inline$BDLCleanupDataHandles$1$anon42_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon25#1;
-
- inline$BDLCleanupDataHandles$1$anon25#1:
- goto inline$BDLCleanupDataHandles$1$label_90#1;
-
- inline$BDLCleanupDataHandles$1$label_90#1:
- goto inline$BDLCleanupDataHandles$1$label_90_true#1, inline$BDLCleanupDataHandles$1$label_90_false#1;
-
- inline$BDLCleanupDataHandles$1$label_90_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$) == 0;
- goto inline$BDLCleanupDataHandles$1$label_91#1;
-
- inline$BDLCleanupDataHandles$1$label_90_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$) != 0;
- goto inline$BDLCleanupDataHandles$1$label_94#1;
-
- inline$BDLCleanupDataHandles$1$label_94#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_95#1;
-
- inline$BDLCleanupDataHandles$1$label_95#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_96#1;
-
- inline$BDLCleanupDataHandles$1$label_96#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_97#1;
-
- inline$BDLCleanupDataHandles$1$label_97#1:
- havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$27$;
- goto inline$BDLCleanupDataHandles$1$label_91#1;
-
- inline$BDLCleanupDataHandles$1$label_91#1:
- goto inline$BDLGetDebugLevel$680$Entry#1;
-
- inline$BDLGetDebugLevel$680$Entry#1:
- goto inline$BDLGetDebugLevel$680$start#1;
-
- inline$BDLGetDebugLevel$680$start#1:
- goto inline$BDLGetDebugLevel$680$label_3#1;
-
- inline$BDLGetDebugLevel$680$label_3#1:
- havoc inline$BDLGetDebugLevel$680$myNondetVar_0;
- inline$BDLGetDebugLevel$680$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$680$myNondetVar_0;
- goto inline$BDLGetDebugLevel$680$label_1#1;
-
- inline$BDLGetDebugLevel$680$label_1#1:
- goto inline$BDLGetDebugLevel$680$Return#1;
-
- inline$BDLGetDebugLevel$680$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$ := inline$BDLGetDebugLevel$680$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_91$1#1;
-
- inline$BDLCleanupDataHandles$1$label_91$1#1:
- goto inline$BDLCleanupDataHandles$1$anon43_Then#1, inline$BDLCleanupDataHandles$1$anon43_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon27#1;
-
- inline$BDLCleanupDataHandles$1$anon27#1:
- goto inline$BDLCleanupDataHandles$1$label_100#1;
-
- inline$BDLCleanupDataHandles$1$label_100#1:
- goto inline$BDLCleanupDataHandles$1$label_100_true#1, inline$BDLCleanupDataHandles$1$label_100_false#1;
-
- inline$BDLCleanupDataHandles$1$label_100_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$) == 0;
- goto inline$BDLCleanupDataHandles$1$label_101#1;
-
- inline$BDLCleanupDataHandles$1$label_100_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$) != 0;
- goto inline$BDLCleanupDataHandles$1$label_104#1;
-
- inline$BDLCleanupDataHandles$1$label_104#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_105#1;
-
- inline$BDLCleanupDataHandles$1$label_105#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_106#1;
-
- inline$BDLCleanupDataHandles$1$label_106#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_107#1;
-
- inline$BDLCleanupDataHandles$1$label_107#1:
- havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$32$;
- goto inline$BDLCleanupDataHandles$1$label_101#1;
-
- inline$BDLCleanupDataHandles$1$label_101#1:
- goto inline$BDLGetDebugLevel$681$Entry#1;
-
- inline$BDLGetDebugLevel$681$Entry#1:
- goto inline$BDLGetDebugLevel$681$start#1;
-
- inline$BDLGetDebugLevel$681$start#1:
- goto inline$BDLGetDebugLevel$681$label_3#1;
-
- inline$BDLGetDebugLevel$681$label_3#1:
- havoc inline$BDLGetDebugLevel$681$myNondetVar_0;
- inline$BDLGetDebugLevel$681$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$681$myNondetVar_0;
- goto inline$BDLGetDebugLevel$681$label_1#1;
-
- inline$BDLGetDebugLevel$681$label_1#1:
- goto inline$BDLGetDebugLevel$681$Return#1;
-
- inline$BDLGetDebugLevel$681$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$ := inline$BDLGetDebugLevel$681$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_101$1#1;
-
- inline$BDLCleanupDataHandles$1$label_101$1#1:
- goto inline$BDLCleanupDataHandles$1$anon44_Then#1, inline$BDLCleanupDataHandles$1$anon44_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon29#1;
-
- inline$BDLCleanupDataHandles$1$anon29#1:
- goto inline$BDLCleanupDataHandles$1$label_110#1;
-
- inline$BDLCleanupDataHandles$1$label_110#1:
- goto inline$BDLCleanupDataHandles$1$label_110_true#1, inline$BDLCleanupDataHandles$1$label_110_false#1;
-
- inline$BDLCleanupDataHandles$1$label_110_false#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$, 4) == 0;
- goto inline$BDLCleanupDataHandles$1$label_1#1;
-
- inline$BDLCleanupDataHandles$1$label_110_true#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$, 4) != 0;
- goto inline$BDLCleanupDataHandles$1$label_111#1;
-
- inline$BDLCleanupDataHandles$1$label_111#1:
- goto inline$BDLCleanupDataHandles$1$label_1#1;
-
- inline$BDLCleanupDataHandles$1$label_1#1:
- call __HAVOC_free(inline$BDLCleanupDataHandles$1$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4);
- call __HAVOC_free(inline$BDLCleanupDataHandles$1$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4);
- call __HAVOC_free(inline$BDLCleanupDataHandles$1$$irql$6$3249.28$BDLCleanupDataHandles$4);
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon44_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon43_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon42_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon35_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$label_41_true#1:
- assume INT_EQ(inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$, 1);
- goto inline$BDLCleanupDataHandles$1$label_45#1;
-
- inline$BDLCleanupDataHandles$1$label_45#1:
- havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$Entry#1;
-
- inline$BDLRemoveHandleFromList$1$Entry#1:
- inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8_.1 := inline$BDLCleanupDataHandles$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$start#1;
-
- inline$BDLRemoveHandleFromList$1$start#1:
- inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8_.1;
- goto inline$BDLRemoveHandleFromList$1$label_3#1;
-
- inline$BDLRemoveHandleFromList$1$label_3#1:
- goto inline$BDLRemoveHandleFromList$1$label_4#1;
-
- inline$BDLRemoveHandleFromList$1$label_4#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_5#1;
-
- inline$BDLRemoveHandleFromList$1$label_5#1:
- goto inline$BDLRemoveHandleFromList$1$label_6#1;
-
- inline$BDLRemoveHandleFromList$1$label_6#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_7#1;
-
- inline$BDLRemoveHandleFromList$1$label_7#1:
- goto inline$BDLRemoveHandleFromList$1$label_7_true#1, inline$BDLRemoveHandleFromList$1$label_7_false#1;
-
- inline$BDLRemoveHandleFromList$1$label_7_false#1:
- assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
- goto inline$BDLRemoveHandleFromList$1$label_8#1;
-
- inline$BDLRemoveHandleFromList$1$label_8#1:
- goto inline$BDLRemoveHandleFromList$1$label_1#1;
-
- inline$BDLRemoveHandleFromList$1$label_7_true#1:
- assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
- goto inline$BDLRemoveHandleFromList$1$label_9#1;
-
- inline$BDLRemoveHandleFromList$1$label_9#1:
- goto inline$BDLRemoveHandleFromList$1$label_9_true#1, inline$BDLRemoveHandleFromList$1$label_9_false#1;
-
- inline$BDLRemoveHandleFromList$1$label_9_false#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$1$label_10#1;
-
- inline$BDLRemoveHandleFromList$1$label_10#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_20#1;
-
- inline$BDLRemoveHandleFromList$1$label_20#1:
- goto inline$BDLRemoveHandleFromList$1$label_20_head#1;
-
- inline$BDLRemoveHandleFromList$1$label_20_head#1:
- goto inline$BDLRemoveHandleFromList$1$label_20_true#1, inline$BDLRemoveHandleFromList$1$label_20_false#1;
-
- inline$BDLRemoveHandleFromList$1$label_20_false#1:
- assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
- goto inline$BDLRemoveHandleFromList$1$label_21#1;
-
- inline$BDLRemoveHandleFromList$1$label_20_true#1:
- assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
- goto inline$BDLRemoveHandleFromList$1$label_22#1;
-
- inline$BDLRemoveHandleFromList$1$label_22#1:
- goto inline$BDLRemoveHandleFromList$1$label_22_true#1, inline$BDLRemoveHandleFromList$1$label_22_false#1;
-
- inline$BDLRemoveHandleFromList$1$label_22_false#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- assume !INT_NEQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$1$label_21#1;
-
- inline$BDLRemoveHandleFromList$1$label_21#1:
- goto inline$BDLRemoveHandleFromList$1$label_21_true#1, inline$BDLRemoveHandleFromList$1$label_21_false#1;
-
- inline$BDLRemoveHandleFromList$1$label_21_false#1:
- assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
- goto inline$BDLRemoveHandleFromList$1$label_25#1;
-
- inline$BDLRemoveHandleFromList$1$label_25#1:
- goto inline$BDLRemoveHandleFromList$1$label_1#1;
-
- inline$BDLRemoveHandleFromList$1$label_21_true#1:
- assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
- goto inline$BDLRemoveHandleFromList$1$label_26#1;
-
- inline$BDLRemoveHandleFromList$1$label_26#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_27#1;
-
- inline$BDLRemoveHandleFromList$1$label_27#1:
- goto inline$BDLRemoveHandleFromList$1$label_27_true#1, inline$BDLRemoveHandleFromList$1$label_27_false#1;
-
- inline$BDLRemoveHandleFromList$1$label_27_false#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$1$label_15#1;
-
- inline$BDLRemoveHandleFromList$1$label_27_true#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- assume INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$1$label_28#1;
-
- inline$BDLRemoveHandleFromList$1$label_28#1:
- goto inline$BDLRemoveHandleFromList$1$label_15#1;
-
- inline$BDLRemoveHandleFromList$1$label_22_true#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- assume INT_NEQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$1$label_23#1;
-
- inline$BDLRemoveHandleFromList$1$label_23#1:
- goto inline$BDLRemoveHandleFromList$1$label_24#1;
-
- inline$BDLRemoveHandleFromList$1$label_24#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_20_head#0;
-
- inline$BDLRemoveHandleFromList$1$label_20_head#0:
- assume false;
- return;
-
- inline$BDLRemoveHandleFromList$1$label_9_true#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- assume INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$1$label_11#1;
-
- inline$BDLRemoveHandleFromList$1$label_11#1:
- goto inline$BDLRemoveHandleFromList$1$label_11_true#1, inline$BDLRemoveHandleFromList$1$label_11_false#1;
-
- inline$BDLRemoveHandleFromList$1$label_11_false#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_1;
- assume !INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$myNondetVar_1);
- goto inline$BDLRemoveHandleFromList$1$label_12#1;
-
- inline$BDLRemoveHandleFromList$1$label_12#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_15#1;
-
- inline$BDLRemoveHandleFromList$1$label_11_true#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_1;
- assume INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$myNondetVar_1);
- goto inline$BDLRemoveHandleFromList$1$label_13#1;
-
- inline$BDLRemoveHandleFromList$1$label_13#1:
- goto inline$BDLRemoveHandleFromList$1$label_14#1;
-
- inline$BDLRemoveHandleFromList$1$label_14#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_15#1;
-
- inline$BDLRemoveHandleFromList$1$label_15#1:
- havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$1$label_16#1;
-
- inline$BDLRemoveHandleFromList$1$label_16#1:
- call ExFreePoolWithTag(inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8, 1280066626);
- goto inline$BDLRemoveHandleFromList$1$anon2_Then#1, inline$BDLRemoveHandleFromList$1$anon2_Else#1;
-
- inline$BDLRemoveHandleFromList$1$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLRemoveHandleFromList$1$anon1#1;
-
- inline$BDLRemoveHandleFromList$1$anon1#1:
- goto inline$BDLRemoveHandleFromList$1$label_19#1;
-
- inline$BDLRemoveHandleFromList$1$label_19#1:
- goto inline$BDLRemoveHandleFromList$1$label_1#1;
-
- inline$BDLRemoveHandleFromList$1$label_1#1:
- goto inline$BDLRemoveHandleFromList$1$Return#1;
-
- inline$BDLRemoveHandleFromList$1$anon2_Then#1:
- assume raiseException;
- goto inline$BDLRemoveHandleFromList$1$Return#1;
-
- inline$BDLRemoveHandleFromList$1$Return#1:
- goto inline$BDLCleanupDataHandles$1$label_45$1#1;
-
- inline$BDLCleanupDataHandles$1$label_45$1#1:
- goto inline$BDLCleanupDataHandles$1$anon36_Then#1, inline$BDLCleanupDataHandles$1$anon36_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon13#1;
-
- inline$BDLCleanupDataHandles$1$anon13#1:
- goto inline$BDLCleanupDataHandles$1$label_48#1;
-
- inline$BDLCleanupDataHandles$1$label_48#1:
- havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
- inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$1$myNondetVar_0;
- goto inline$BDLCleanupDataHandles$1$label_49#1;
-
- inline$BDLCleanupDataHandles$1$label_49#1:
- goto inline$BDLCleanupDataHandles$1$label_49_true#1, inline$BDLCleanupDataHandles$1$label_49_false#1;
-
- inline$BDLCleanupDataHandles$1$label_49_false#1:
- havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLCleanupDataHandles$1$myNondetVar_0, 2);
- goto inline$BDLCleanupDataHandles$1$label_50#1;
-
- inline$BDLCleanupDataHandles$1$label_50#1:
- havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
- goto inline$BDLCleanupDataHandles$1$label_57#1;
-
- inline$BDLCleanupDataHandles$1$label_57#1:
- goto inline$BDLCleanupDataHandles$1$label_60#1;
-
- inline$BDLCleanupDataHandles$1$label_60#1:
- inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$1$$callresult.$3284.85$14$;
- goto inline$BDLCleanupDataHandles$1$label_61#1;
-
- inline$BDLCleanupDataHandles$1$label_61#1:
- goto inline$BDLCleanupDataHandles$1$label_61_true#1, inline$BDLCleanupDataHandles$1$label_61_false#1;
-
- inline$BDLCleanupDataHandles$1$label_61_false#1:
- assume inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4 == 0;
- goto inline$BDLCleanupDataHandles$1$label_54#1;
-
- inline$BDLCleanupDataHandles$1$label_61_true#1:
- assume inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4 != 0;
- goto inline$BDLCleanupDataHandles$1$label_62#1;
-
- inline$BDLCleanupDataHandles$1$label_62#1:
- goto inline$BDLGetDebugLevel$676$Entry#1;
-
- inline$BDLGetDebugLevel$676$Entry#1:
- goto inline$BDLGetDebugLevel$676$start#1;
-
- inline$BDLGetDebugLevel$676$start#1:
- goto inline$BDLGetDebugLevel$676$label_3#1;
-
- inline$BDLGetDebugLevel$676$label_3#1:
- havoc inline$BDLGetDebugLevel$676$myNondetVar_0;
- inline$BDLGetDebugLevel$676$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$676$myNondetVar_0;
- goto inline$BDLGetDebugLevel$676$label_1#1;
-
- inline$BDLGetDebugLevel$676$label_1#1:
- goto inline$BDLGetDebugLevel$676$Return#1;
-
- inline$BDLGetDebugLevel$676$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$ := inline$BDLGetDebugLevel$676$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_62$1#1;
-
- inline$BDLCleanupDataHandles$1$label_62$1#1:
- goto inline$BDLCleanupDataHandles$1$anon39_Then#1, inline$BDLCleanupDataHandles$1$anon39_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon19#1;
-
- inline$BDLCleanupDataHandles$1$anon19#1:
- goto inline$BDLCleanupDataHandles$1$label_65#1;
-
- inline$BDLCleanupDataHandles$1$label_65#1:
- goto inline$BDLCleanupDataHandles$1$label_65_true#1, inline$BDLCleanupDataHandles$1$label_65_false#1;
-
- inline$BDLCleanupDataHandles$1$label_65_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$) == 0;
- goto inline$BDLCleanupDataHandles$1$label_66#1;
-
- inline$BDLCleanupDataHandles$1$label_65_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$) != 0;
- goto inline$BDLCleanupDataHandles$1$label_69#1;
-
- inline$BDLCleanupDataHandles$1$label_69#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_70#1;
-
- inline$BDLCleanupDataHandles$1$label_70#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_71#1;
-
- inline$BDLCleanupDataHandles$1$label_71#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_72#1;
-
- inline$BDLCleanupDataHandles$1$label_72#1:
- havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$16$;
- goto inline$BDLCleanupDataHandles$1$label_66#1;
-
- inline$BDLCleanupDataHandles$1$label_66#1:
- goto inline$BDLGetDebugLevel$677$Entry#1;
-
- inline$BDLGetDebugLevel$677$Entry#1:
- goto inline$BDLGetDebugLevel$677$start#1;
-
- inline$BDLGetDebugLevel$677$start#1:
- goto inline$BDLGetDebugLevel$677$label_3#1;
-
- inline$BDLGetDebugLevel$677$label_3#1:
- havoc inline$BDLGetDebugLevel$677$myNondetVar_0;
- inline$BDLGetDebugLevel$677$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$677$myNondetVar_0;
- goto inline$BDLGetDebugLevel$677$label_1#1;
-
- inline$BDLGetDebugLevel$677$label_1#1:
- goto inline$BDLGetDebugLevel$677$Return#1;
-
- inline$BDLGetDebugLevel$677$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$ := inline$BDLGetDebugLevel$677$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_66$1#1;
-
- inline$BDLCleanupDataHandles$1$label_66$1#1:
- goto inline$BDLCleanupDataHandles$1$anon40_Then#1, inline$BDLCleanupDataHandles$1$anon40_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon21#1;
-
- inline$BDLCleanupDataHandles$1$anon21#1:
- goto inline$BDLCleanupDataHandles$1$label_75#1;
-
- inline$BDLCleanupDataHandles$1$label_75#1:
- goto inline$BDLCleanupDataHandles$1$label_75_true#1, inline$BDLCleanupDataHandles$1$label_75_false#1;
-
- inline$BDLCleanupDataHandles$1$label_75_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$) == 0;
- goto inline$BDLCleanupDataHandles$1$label_76#1;
-
- inline$BDLCleanupDataHandles$1$label_75_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$) != 0;
- goto inline$BDLCleanupDataHandles$1$label_79#1;
-
- inline$BDLCleanupDataHandles$1$label_79#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_80#1;
-
- inline$BDLCleanupDataHandles$1$label_80#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_81#1;
-
- inline$BDLCleanupDataHandles$1$label_81#1:
- call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$1$label_82#1;
-
- inline$BDLCleanupDataHandles$1$label_82#1:
- havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$21$;
- goto inline$BDLCleanupDataHandles$1$label_76#1;
-
- inline$BDLCleanupDataHandles$1$label_76#1:
- goto inline$BDLGetDebugLevel$678$Entry#1;
-
- inline$BDLGetDebugLevel$678$Entry#1:
- goto inline$BDLGetDebugLevel$678$start#1;
-
- inline$BDLGetDebugLevel$678$start#1:
- goto inline$BDLGetDebugLevel$678$label_3#1;
-
- inline$BDLGetDebugLevel$678$label_3#1:
- havoc inline$BDLGetDebugLevel$678$myNondetVar_0;
- inline$BDLGetDebugLevel$678$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$678$myNondetVar_0;
- goto inline$BDLGetDebugLevel$678$label_1#1;
-
- inline$BDLGetDebugLevel$678$label_1#1:
- goto inline$BDLGetDebugLevel$678$Return#1;
-
- inline$BDLGetDebugLevel$678$Return#1:
- inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$ := inline$BDLGetDebugLevel$678$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$1$label_76$1#1;
-
- inline$BDLCleanupDataHandles$1$label_76$1#1:
- goto inline$BDLCleanupDataHandles$1$anon41_Then#1, inline$BDLCleanupDataHandles$1$anon41_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon23#1;
-
- inline$BDLCleanupDataHandles$1$anon23#1:
- goto inline$BDLCleanupDataHandles$1$label_85#1;
-
- inline$BDLCleanupDataHandles$1$label_85#1:
- goto inline$BDLCleanupDataHandles$1$label_85_true#1, inline$BDLCleanupDataHandles$1$label_85_false#1;
-
- inline$BDLCleanupDataHandles$1$label_85_false#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$, 4) == 0;
- goto inline$BDLCleanupDataHandles$1$label_54#1;
-
- inline$BDLCleanupDataHandles$1$label_85_true#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$, 4) != 0;
- goto inline$BDLCleanupDataHandles$1$label_86#1;
-
- inline$BDLCleanupDataHandles$1$label_86#1:
- goto inline$BDLCleanupDataHandles$1$label_54#1;
-
- inline$BDLCleanupDataHandles$1$anon41_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon40_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon39_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$label_49_true#1:
- havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
- assume INT_EQ(inline$BDLCleanupDataHandles$1$myNondetVar_0, 2);
- goto inline$BDLCleanupDataHandles$1$label_51#1;
-
- inline$BDLCleanupDataHandles$1$label_51#1:
- havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
- goto inline$bdliFree$1$Entry#1;
-
- inline$bdliFree$1$Entry#1:
- inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4_.1 := inline$BDLCleanupDataHandles$1$myNondetVar_0;
- goto inline$bdliFree$1$start#1;
-
- inline$bdliFree$1$start#1:
- inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4 := inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4_.1;
- goto inline$bdliFree$1$label_3#1;
-
- inline$bdliFree$1$label_3#1:
- call ExFreePoolWithTag(inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4, 1229734978);
- goto inline$bdliFree$1$anon2_Then#1, inline$bdliFree$1$anon2_Else#1;
-
- inline$bdliFree$1$anon2_Else#1:
- assume !raiseException;
- goto inline$bdliFree$1$anon1#1;
-
- inline$bdliFree$1$anon1#1:
- goto inline$bdliFree$1$label_1#1;
-
- inline$bdliFree$1$label_1#1:
- goto inline$bdliFree$1$Return#1;
-
- inline$bdliFree$1$anon2_Then#1:
- assume raiseException;
- goto inline$bdliFree$1$Return#1;
-
- inline$bdliFree$1$Return#1:
- goto inline$BDLCleanupDataHandles$1$label_51$1#1;
-
- inline$BDLCleanupDataHandles$1$label_51$1#1:
- goto inline$BDLCleanupDataHandles$1$anon37_Then#1, inline$BDLCleanupDataHandles$1$anon37_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon15#1;
-
- inline$BDLCleanupDataHandles$1$anon15#1:
- goto inline$BDLCleanupDataHandles$1$label_54#1;
-
- inline$BDLCleanupDataHandles$1$label_54#1:
- call ExFreePoolWithTag(inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4, 541869122);
- goto inline$BDLCleanupDataHandles$1$anon38_Then#1, inline$BDLCleanupDataHandles$1$anon38_Else#1;
-
- inline$BDLCleanupDataHandles$1$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$1$anon17#1;
-
- inline$BDLCleanupDataHandles$1$anon17#1:
- goto inline$BDLCleanupDataHandles$1$label_38_head#0;
-
- inline$BDLCleanupDataHandles$1$label_38_head#0:
- assume false;
- return;
-
- inline$BDLCleanupDataHandles$1$anon38_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon37_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon36_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon34_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon33_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon32_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon31_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$anon30_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$1$Return#1;
-
- inline$BDLCleanupDataHandles$1$Return#1:
- goto inline$BDLHandleRemove$1$label_41$1#1;
-
- inline$BDLHandleRemove$1$label_41$1#1:
- goto inline$BDLHandleRemove$1$anon48_Then#1, inline$BDLHandleRemove$1$anon48_Else#1;
-
- inline$BDLHandleRemove$1$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon13#1;
-
- inline$BDLHandleRemove$1$anon13#1:
- goto inline$BDLHandleRemove$1$label_44#1;
-
- inline$BDLHandleRemove$1$label_44#1:
- goto inline$BDLHandleRemove$1$label_44_true#1, inline$BDLHandleRemove$1$label_44_false#1;
-
- inline$BDLHandleRemove$1$label_44_false#1:
- havoc inline$BDLHandleRemove$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLHandleRemove$1$myNondetVar_0, 1);
- goto inline$BDLHandleRemove$1$label_45#1;
-
- inline$BDLHandleRemove$1$label_44_true#1:
- havoc inline$BDLHandleRemove$1$myNondetVar_0;
- assume INT_EQ(inline$BDLHandleRemove$1$myNondetVar_0, 1);
- goto inline$BDLHandleRemove$1$label_48#1;
-
- inline$BDLHandleRemove$1$label_48#1:
- goto inline$BDLHandleRemove$1$label_51#1;
-
- inline$BDLHandleRemove$1$label_51#1:
- inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$callresult.$2419.71$15$;
- goto inline$BDLHandleRemove$1$label_52#1;
-
- inline$BDLHandleRemove$1$label_52#1:
- goto inline$BDLHandleRemove$1$label_52_true#1, inline$BDLHandleRemove$1$label_52_false#1;
-
- inline$BDLHandleRemove$1$label_52_false#1:
- assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 == 0;
- goto inline$BDLHandleRemove$1$label_53#1;
-
- inline$BDLHandleRemove$1$label_52_true#1:
- assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 != 0;
- goto inline$BDLHandleRemove$1$label_54#1;
-
- inline$BDLHandleRemove$1$label_54#1:
- goto inline$BDLGetDebugLevel$682$Entry#1;
-
- inline$BDLGetDebugLevel$682$Entry#1:
- goto inline$BDLGetDebugLevel$682$start#1;
-
- inline$BDLGetDebugLevel$682$start#1:
- goto inline$BDLGetDebugLevel$682$label_3#1;
-
- inline$BDLGetDebugLevel$682$label_3#1:
- havoc inline$BDLGetDebugLevel$682$myNondetVar_0;
- inline$BDLGetDebugLevel$682$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$682$myNondetVar_0;
- goto inline$BDLGetDebugLevel$682$label_1#1;
-
- inline$BDLGetDebugLevel$682$label_1#1:
- goto inline$BDLGetDebugLevel$682$Return#1;
-
- inline$BDLGetDebugLevel$682$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$ := inline$BDLGetDebugLevel$682$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_54$1#1;
-
- inline$BDLHandleRemove$1$label_54$1#1:
- goto inline$BDLHandleRemove$1$anon49_Then#1, inline$BDLHandleRemove$1$anon49_Else#1;
-
- inline$BDLHandleRemove$1$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon15#1;
-
- inline$BDLHandleRemove$1$anon15#1:
- goto inline$BDLHandleRemove$1$label_57#1;
-
- inline$BDLHandleRemove$1$label_57#1:
- goto inline$BDLHandleRemove$1$label_57_true#1, inline$BDLHandleRemove$1$label_57_false#1;
-
- inline$BDLHandleRemove$1$label_57_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$) == 0;
- goto inline$BDLHandleRemove$1$label_58#1;
-
- inline$BDLHandleRemove$1$label_57_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$) != 0;
- goto inline$BDLHandleRemove$1$label_61#1;
-
- inline$BDLHandleRemove$1$label_61#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_62#1;
-
- inline$BDLHandleRemove$1$label_62#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_63#1;
-
- inline$BDLHandleRemove$1$label_63#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_64#1;
-
- inline$BDLHandleRemove$1$label_64#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$17$;
- goto inline$BDLHandleRemove$1$label_58#1;
-
- inline$BDLHandleRemove$1$label_58#1:
- goto inline$BDLGetDebugLevel$683$Entry#1;
-
- inline$BDLGetDebugLevel$683$Entry#1:
- goto inline$BDLGetDebugLevel$683$start#1;
-
- inline$BDLGetDebugLevel$683$start#1:
- goto inline$BDLGetDebugLevel$683$label_3#1;
-
- inline$BDLGetDebugLevel$683$label_3#1:
- havoc inline$BDLGetDebugLevel$683$myNondetVar_0;
- inline$BDLGetDebugLevel$683$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$683$myNondetVar_0;
- goto inline$BDLGetDebugLevel$683$label_1#1;
-
- inline$BDLGetDebugLevel$683$label_1#1:
- goto inline$BDLGetDebugLevel$683$Return#1;
-
- inline$BDLGetDebugLevel$683$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$ := inline$BDLGetDebugLevel$683$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_58$1#1;
-
- inline$BDLHandleRemove$1$label_58$1#1:
- goto inline$BDLHandleRemove$1$anon50_Then#1, inline$BDLHandleRemove$1$anon50_Else#1;
-
- inline$BDLHandleRemove$1$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon17#1;
-
- inline$BDLHandleRemove$1$anon17#1:
- goto inline$BDLHandleRemove$1$label_67#1;
-
- inline$BDLHandleRemove$1$label_67#1:
- goto inline$BDLHandleRemove$1$label_67_true#1, inline$BDLHandleRemove$1$label_67_false#1;
-
- inline$BDLHandleRemove$1$label_67_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$) == 0;
- goto inline$BDLHandleRemove$1$label_68#1;
-
- inline$BDLHandleRemove$1$label_67_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$) != 0;
- goto inline$BDLHandleRemove$1$label_71#1;
-
- inline$BDLHandleRemove$1$label_71#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_72#1;
-
- inline$BDLHandleRemove$1$label_72#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_73#1;
-
- inline$BDLHandleRemove$1$label_73#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_74#1;
-
- inline$BDLHandleRemove$1$label_74#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$22$;
- goto inline$BDLHandleRemove$1$label_68#1;
-
- inline$BDLHandleRemove$1$label_68#1:
- goto inline$BDLGetDebugLevel$684$Entry#1;
-
- inline$BDLGetDebugLevel$684$Entry#1:
- goto inline$BDLGetDebugLevel$684$start#1;
-
- inline$BDLGetDebugLevel$684$start#1:
- goto inline$BDLGetDebugLevel$684$label_3#1;
-
- inline$BDLGetDebugLevel$684$label_3#1:
- havoc inline$BDLGetDebugLevel$684$myNondetVar_0;
- inline$BDLGetDebugLevel$684$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$684$myNondetVar_0;
- goto inline$BDLGetDebugLevel$684$label_1#1;
-
- inline$BDLGetDebugLevel$684$label_1#1:
- goto inline$BDLGetDebugLevel$684$Return#1;
-
- inline$BDLGetDebugLevel$684$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$ := inline$BDLGetDebugLevel$684$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_68$1#1;
-
- inline$BDLHandleRemove$1$label_68$1#1:
- goto inline$BDLHandleRemove$1$anon51_Then#1, inline$BDLHandleRemove$1$anon51_Else#1;
-
- inline$BDLHandleRemove$1$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon19#1;
-
- inline$BDLHandleRemove$1$anon19#1:
- goto inline$BDLHandleRemove$1$label_77#1;
-
- inline$BDLHandleRemove$1$label_77#1:
- goto inline$BDLHandleRemove$1$label_77_true#1, inline$BDLHandleRemove$1$label_77_false#1;
-
- inline$BDLHandleRemove$1$label_77_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$, 4) == 0;
- goto inline$BDLHandleRemove$1$label_53#1;
-
- inline$BDLHandleRemove$1$label_77_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$, 4) != 0;
- goto inline$BDLHandleRemove$1$label_78#1;
-
- inline$BDLHandleRemove$1$label_78#1:
- goto inline$BDLHandleRemove$1$label_53#1;
-
- inline$BDLHandleRemove$1$label_53#1:
- goto inline$BDLHandleRemove$1$label_45#1;
-
- inline$BDLHandleRemove$1$label_45#1:
- goto inline$BDLHandleRemove$1$label_79#1;
-
- inline$BDLHandleRemove$1$label_79#1:
- inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$callresult.$2437.63$27$;
- goto inline$BDLHandleRemove$1$label_80#1;
-
- inline$BDLHandleRemove$1$label_80#1:
- goto inline$BDLHandleRemove$1$label_80_true#1, inline$BDLHandleRemove$1$label_80_false#1;
-
- inline$BDLHandleRemove$1$label_80_false#1:
- assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 == 0;
- goto inline$BDLHandleRemove$1$label_81#1;
-
- inline$BDLHandleRemove$1$label_80_true#1:
- assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 != 0;
- goto inline$BDLHandleRemove$1$label_84#1;
-
- inline$BDLHandleRemove$1$label_84#1:
- goto inline$BDLGetDebugLevel$685$Entry#1;
-
- inline$BDLGetDebugLevel$685$Entry#1:
- goto inline$BDLGetDebugLevel$685$start#1;
-
- inline$BDLGetDebugLevel$685$start#1:
- goto inline$BDLGetDebugLevel$685$label_3#1;
-
- inline$BDLGetDebugLevel$685$label_3#1:
- havoc inline$BDLGetDebugLevel$685$myNondetVar_0;
- inline$BDLGetDebugLevel$685$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$685$myNondetVar_0;
- goto inline$BDLGetDebugLevel$685$label_1#1;
-
- inline$BDLGetDebugLevel$685$label_1#1:
- goto inline$BDLGetDebugLevel$685$Return#1;
-
- inline$BDLGetDebugLevel$685$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$ := inline$BDLGetDebugLevel$685$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_84$1#1;
-
- inline$BDLHandleRemove$1$label_84$1#1:
- goto inline$BDLHandleRemove$1$anon53_Then#1, inline$BDLHandleRemove$1$anon53_Else#1;
-
- inline$BDLHandleRemove$1$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon23#1;
-
- inline$BDLHandleRemove$1$anon23#1:
- goto inline$BDLHandleRemove$1$label_87#1;
-
- inline$BDLHandleRemove$1$label_87#1:
- goto inline$BDLHandleRemove$1$label_87_true#1, inline$BDLHandleRemove$1$label_87_false#1;
-
- inline$BDLHandleRemove$1$label_87_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$) == 0;
- goto inline$BDLHandleRemove$1$label_88#1;
-
- inline$BDLHandleRemove$1$label_87_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$) != 0;
- goto inline$BDLHandleRemove$1$label_91#1;
-
- inline$BDLHandleRemove$1$label_91#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_92#1;
-
- inline$BDLHandleRemove$1$label_92#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_93#1;
-
- inline$BDLHandleRemove$1$label_93#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_94#1;
-
- inline$BDLHandleRemove$1$label_94#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$29$;
- goto inline$BDLHandleRemove$1$label_88#1;
-
- inline$BDLHandleRemove$1$label_88#1:
- goto inline$BDLGetDebugLevel$686$Entry#1;
-
- inline$BDLGetDebugLevel$686$Entry#1:
- goto inline$BDLGetDebugLevel$686$start#1;
-
- inline$BDLGetDebugLevel$686$start#1:
- goto inline$BDLGetDebugLevel$686$label_3#1;
-
- inline$BDLGetDebugLevel$686$label_3#1:
- havoc inline$BDLGetDebugLevel$686$myNondetVar_0;
- inline$BDLGetDebugLevel$686$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$686$myNondetVar_0;
- goto inline$BDLGetDebugLevel$686$label_1#1;
-
- inline$BDLGetDebugLevel$686$label_1#1:
- goto inline$BDLGetDebugLevel$686$Return#1;
-
- inline$BDLGetDebugLevel$686$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$ := inline$BDLGetDebugLevel$686$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_88$1#1;
-
- inline$BDLHandleRemove$1$label_88$1#1:
- goto inline$BDLHandleRemove$1$anon54_Then#1, inline$BDLHandleRemove$1$anon54_Else#1;
-
- inline$BDLHandleRemove$1$anon54_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon25#1;
-
- inline$BDLHandleRemove$1$anon25#1:
- goto inline$BDLHandleRemove$1$label_97#1;
-
- inline$BDLHandleRemove$1$label_97#1:
- goto inline$BDLHandleRemove$1$label_97_true#1, inline$BDLHandleRemove$1$label_97_false#1;
-
- inline$BDLHandleRemove$1$label_97_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$) == 0;
- goto inline$BDLHandleRemove$1$label_98#1;
-
- inline$BDLHandleRemove$1$label_97_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$) != 0;
- goto inline$BDLHandleRemove$1$label_101#1;
-
- inline$BDLHandleRemove$1$label_101#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_102#1;
-
- inline$BDLHandleRemove$1$label_102#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_103#1;
-
- inline$BDLHandleRemove$1$label_103#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_104#1;
-
- inline$BDLHandleRemove$1$label_104#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$34$;
- goto inline$BDLHandleRemove$1$label_98#1;
-
- inline$BDLHandleRemove$1$label_98#1:
- goto inline$BDLGetDebugLevel$687$Entry#1;
-
- inline$BDLGetDebugLevel$687$Entry#1:
- goto inline$BDLGetDebugLevel$687$start#1;
-
- inline$BDLGetDebugLevel$687$start#1:
- goto inline$BDLGetDebugLevel$687$label_3#1;
-
- inline$BDLGetDebugLevel$687$label_3#1:
- havoc inline$BDLGetDebugLevel$687$myNondetVar_0;
- inline$BDLGetDebugLevel$687$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$687$myNondetVar_0;
- goto inline$BDLGetDebugLevel$687$label_1#1;
-
- inline$BDLGetDebugLevel$687$label_1#1:
- goto inline$BDLGetDebugLevel$687$Return#1;
-
- inline$BDLGetDebugLevel$687$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$ := inline$BDLGetDebugLevel$687$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_98$1#1;
-
- inline$BDLHandleRemove$1$label_98$1#1:
- goto inline$BDLHandleRemove$1$anon55_Then#1, inline$BDLHandleRemove$1$anon55_Else#1;
-
- inline$BDLHandleRemove$1$anon55_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon27#1;
-
- inline$BDLHandleRemove$1$anon27#1:
- goto inline$BDLHandleRemove$1$label_107#1;
-
- inline$BDLHandleRemove$1$label_107#1:
- goto inline$BDLHandleRemove$1$label_107_true#1, inline$BDLHandleRemove$1$label_107_false#1;
-
- inline$BDLHandleRemove$1$label_107_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$, 4) == 0;
- goto inline$BDLHandleRemove$1$label_81#1;
-
- inline$BDLHandleRemove$1$label_107_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$, 4) != 0;
- goto inline$BDLHandleRemove$1$label_108#1;
-
- inline$BDLHandleRemove$1$label_108#1:
- goto inline$BDLHandleRemove$1$label_81#1;
-
- inline$BDLHandleRemove$1$label_81#1:
- goto inline$IoSkipCurrentIrpStackLocation$1$Entry#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$Entry#1:
- inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1 := inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12;
- goto inline$IoSkipCurrentIrpStackLocation$1$start#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$start#1:
- inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4 := inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1;
- goto inline$IoSkipCurrentIrpStackLocation$1$label_3#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_3#1:
- goto inline$IoSkipCurrentIrpStackLocation$1$label_3_true#1, inline$IoSkipCurrentIrpStackLocation$1$label_3_false#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_3_false#1:
- inline$IoSkipCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoSkipCurrentIrpStackLocation$1$myVar_0, inline$IoSkipCurrentIrpStackLocation$1$myVar_1);
- goto inline$IoSkipCurrentIrpStackLocation$1$label_4#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_4#1:
- call inline$IoSkipCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSkipCurrentIrpStackLocation$1$label_7#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_7#1:
- call inline$IoSkipCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSkipCurrentIrpStackLocation$1$label_8#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_8#1:
- goto inline$IoSkipCurrentIrpStackLocation$1$label_5#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_3_true#1:
- inline$IoSkipCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoSkipCurrentIrpStackLocation$1$myVar_0, inline$IoSkipCurrentIrpStackLocation$1$myVar_1);
- goto inline$IoSkipCurrentIrpStackLocation$1$label_5#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_5#1:
- inline$IoSkipCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$1$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4) := inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0];
- call contextSwitch();
- goto inline$IoSkipCurrentIrpStackLocation$1$label_6#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_6#1:
- havoc inline$IoSkipCurrentIrpStackLocation$1$myNondetVar_0;
- inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$1$myNondetVar_0, 36, 1);
- goto inline$IoSkipCurrentIrpStackLocation$1$label_1#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$label_1#1:
- goto inline$IoSkipCurrentIrpStackLocation$1$Return#1;
-
- inline$IoSkipCurrentIrpStackLocation$1$Return#1:
- goto inline$BDLHandleRemove$1$label_81$1#1;
-
- inline$BDLHandleRemove$1$label_81$1#1:
- goto inline$BDLHandleRemove$1$anon52_Then#1, inline$BDLHandleRemove$1$anon52_Else#1;
-
- inline$BDLHandleRemove$1$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon21#1;
-
- inline$BDLHandleRemove$1$anon21#1:
- goto inline$BDLHandleRemove$1$label_109#1;
-
- inline$BDLHandleRemove$1$label_109#1:
- goto inline$storm_IoCallDriver$13$Entry#1;
-
- inline$storm_IoCallDriver$13$Entry#1:
- inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12;
- goto inline$storm_IoCallDriver$13$start#1;
-
- inline$storm_IoCallDriver$13$start#1:
- inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$13$label_3#1;
-
- inline$storm_IoCallDriver$13$label_3#1:
- goto inline$storm_IoCallDriver$13$label_4#1;
-
- inline$storm_IoCallDriver$13$label_4#1:
- goto inline$storm_IoCallDriver$13$label_5#1;
-
- inline$storm_IoCallDriver$13$label_5#1:
- goto inline$storm_IoCallDriver$13$label_6#1;
-
- inline$storm_IoCallDriver$13$label_6#1:
- call inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$13$label_9#1;
-
- inline$storm_IoCallDriver$13$label_9#1:
- goto inline$storm_IoCallDriver$13$label_9_true#1, inline$storm_IoCallDriver$13$label_9_false#1;
-
- inline$storm_IoCallDriver$13$label_9_false#1:
- assume inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$13$label_10#1;
-
- inline$storm_IoCallDriver$13$label_9_true#1:
- assume inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$13$label_13#1;
-
- inline$storm_IoCallDriver$13$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$13$anon12_Then#1, inline$storm_IoCallDriver$13$anon12_Else#1;
-
- inline$storm_IoCallDriver$13$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$13$anon3#1;
-
- inline$storm_IoCallDriver$13$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$13$label_14#1;
-
- inline$storm_IoCallDriver$13$label_14#1:
- goto inline$storm_IoCallDriver$13$label_14_true#1, inline$storm_IoCallDriver$13$label_14_false#1;
-
- inline$storm_IoCallDriver$13$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$13$label_15#1;
-
- inline$storm_IoCallDriver$13$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$13$label_1#1;
-
- inline$storm_IoCallDriver$13$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$13$label_10#1;
-
- inline$storm_IoCallDriver$13$label_10#1:
- goto inline$IoSetNextIrpStackLocation$14$Entry#1;
-
- inline$IoSetNextIrpStackLocation$14$Entry#1:
- inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$14$start#1;
-
- inline$IoSetNextIrpStackLocation$14$start#1:
- inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$14$label_3#1;
-
- inline$IoSetNextIrpStackLocation$14$label_3#1:
- goto inline$IoSetNextIrpStackLocation$14$label_3_true#1, inline$IoSetNextIrpStackLocation$14$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$14$label_3_false#1:
- inline$IoSetNextIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$14$myVar_0);
- goto inline$IoSetNextIrpStackLocation$14$label_4#1;
-
- inline$IoSetNextIrpStackLocation$14$label_4#1:
- call inline$IoSetNextIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$14$label_7#1;
-
- inline$IoSetNextIrpStackLocation$14$label_7#1:
- call inline$IoSetNextIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$14$label_8#1;
-
- inline$IoSetNextIrpStackLocation$14$label_8#1:
- goto inline$IoSetNextIrpStackLocation$14$label_5#1;
-
- inline$IoSetNextIrpStackLocation$14$label_3_true#1:
- inline$IoSetNextIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$14$myVar_0);
- goto inline$IoSetNextIrpStackLocation$14$label_5#1;
-
- inline$IoSetNextIrpStackLocation$14$label_5#1:
- inline$IoSetNextIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$14$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$14$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$14$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$14$label_6#1;
-
- inline$IoSetNextIrpStackLocation$14$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$14$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$14$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$14$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$14$label_1#1;
-
- inline$IoSetNextIrpStackLocation$14$label_1#1:
- goto inline$IoSetNextIrpStackLocation$14$Return#1;
-
- inline$IoSetNextIrpStackLocation$14$Return#1:
- goto inline$storm_IoCallDriver$13$label_10$1#1;
-
- inline$storm_IoCallDriver$13$label_10$1#1:
- goto inline$storm_IoCallDriver$13$anon11_Then#1, inline$storm_IoCallDriver$13$anon11_Else#1;
-
- inline$storm_IoCallDriver$13$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$13$anon1#1;
-
- inline$storm_IoCallDriver$13$anon1#1:
- goto inline$storm_IoCallDriver$13$label_18#1;
-
- inline$storm_IoCallDriver$13$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$132$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$132$Entry#1:
- inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$132$start#1;
-
- inline$IoGetCurrentIrpStackLocation$132$start#1:
- inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$132$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$132$label_3_true#1, inline$IoGetCurrentIrpStackLocation$132$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$132$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$132$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$132$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$132$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$132$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$132$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$132$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$132$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$132$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$132$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$132$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$132$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$132$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$132$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$132$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$132$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$132$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$132$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$132$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$132$Return#1:
- goto inline$storm_IoCallDriver$13$label_18$1#1;
-
- inline$storm_IoCallDriver$13$label_18$1#1:
- goto inline$storm_IoCallDriver$13$anon13_Then#1, inline$storm_IoCallDriver$13$anon13_Else#1;
-
- inline$storm_IoCallDriver$13$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$13$anon6#1;
-
- inline$storm_IoCallDriver$13$anon6#1:
- goto inline$storm_IoCallDriver$13$label_21#1;
-
- inline$storm_IoCallDriver$13$label_21#1:
- goto inline$storm_IoCallDriver$13$label_22#1;
-
- inline$storm_IoCallDriver$13$label_22#1:
- goto inline$storm_IoCallDriver$13$label_23#1;
-
- inline$storm_IoCallDriver$13$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$13$label_24#1;
-
- inline$storm_IoCallDriver$13$label_24#1:
- call inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$13$label_27#1;
-
- inline$storm_IoCallDriver$13$label_27#1:
- goto inline$storm_IoCallDriver$13$label_27_case_0#1, inline$storm_IoCallDriver$13$label_27_case_1#1, inline$storm_IoCallDriver$13$label_27_case_2#1;
-
- inline$storm_IoCallDriver$13$label_27_case_2#1:
- assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$13$label_30#1;
-
- inline$storm_IoCallDriver$13$label_30#1:
- inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$13$label_31#1;
-
- inline$storm_IoCallDriver$13$label_31#1:
- goto inline$storm_IoCallDriver$13$label_32#1;
-
- inline$storm_IoCallDriver$13$label_32#1:
- goto inline$storm_IoCallDriver$13$label_33#1;
-
- inline$storm_IoCallDriver$13$label_33#1:
- goto inline$CallCompletionRoutine$26$Entry#1;
-
- inline$CallCompletionRoutine$26$Entry#1:
- inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$26$start#1;
-
- inline$CallCompletionRoutine$26$start#1:
- inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$26$label_3#1;
-
- inline$CallCompletionRoutine$26$label_3#1:
- goto inline$CallCompletionRoutine$26$label_4#1;
-
- inline$CallCompletionRoutine$26$label_4#1:
- goto inline$CallCompletionRoutine$26$label_5#1;
-
- inline$CallCompletionRoutine$26$label_5#1:
- goto inline$CallCompletionRoutine$26$label_6#1;
-
- inline$CallCompletionRoutine$26$label_6#1:
- goto inline$CallCompletionRoutine$26$label_7#1;
-
- inline$CallCompletionRoutine$26$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$133$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$133$Entry#1:
- inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$133$start#1;
-
- inline$IoGetCurrentIrpStackLocation$133$start#1:
- inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$133$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$133$label_3_true#1, inline$IoGetCurrentIrpStackLocation$133$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$133$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$133$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$133$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$133$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$133$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$133$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$133$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$133$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$133$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$133$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$133$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$133$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$133$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$133$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$133$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$133$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$133$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$133$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$133$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$133$Return#1:
- goto inline$CallCompletionRoutine$26$label_7$1#1;
-
- inline$CallCompletionRoutine$26$label_7$1#1:
- goto inline$CallCompletionRoutine$26$anon10_Then#1, inline$CallCompletionRoutine$26$anon10_Else#1;
-
- inline$CallCompletionRoutine$26$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$26$anon1#1;
-
- inline$CallCompletionRoutine$26$anon1#1:
- goto inline$CallCompletionRoutine$26$label_10#1;
-
- inline$CallCompletionRoutine$26$label_10#1:
- goto inline$CallCompletionRoutine$26$label_11#1;
-
- inline$CallCompletionRoutine$26$label_11#1:
- havoc inline$CallCompletionRoutine$26$myNondetVar_0;
- inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$myNondetVar_0;
- goto inline$CallCompletionRoutine$26$label_12#1;
-
- inline$CallCompletionRoutine$26$label_12#1:
- havoc inline$CallCompletionRoutine$26$myNondetVar_0;
- inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$myNondetVar_0;
- goto inline$CallCompletionRoutine$26$label_13#1;
-
- inline$CallCompletionRoutine$26$label_13#1:
- havoc inline$CallCompletionRoutine$26$myNondetVar_0;
- goto inline$CallCompletionRoutine$26$label_14#1;
-
- inline$CallCompletionRoutine$26$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$134$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$134$Entry#1:
- inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$134$start#1;
-
- inline$IoGetCurrentIrpStackLocation$134$start#1:
- inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$134$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$134$label_3_true#1, inline$IoGetCurrentIrpStackLocation$134$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$134$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$134$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$134$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$134$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$134$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$134$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$134$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$134$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$134$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$134$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$134$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$134$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$134$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$134$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$134$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$134$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$134$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$134$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$134$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$134$Return#1:
- goto inline$CallCompletionRoutine$26$label_14$1#1;
-
- inline$CallCompletionRoutine$26$label_14$1#1:
- goto inline$CallCompletionRoutine$26$anon11_Then#1, inline$CallCompletionRoutine$26$anon11_Else#1;
-
- inline$CallCompletionRoutine$26$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$26$anon3#1;
-
- inline$CallCompletionRoutine$26$anon3#1:
- goto inline$CallCompletionRoutine$26$label_17#1;
-
- inline$CallCompletionRoutine$26$label_17#1:
- goto inline$CallCompletionRoutine$26$label_18#1;
-
- inline$CallCompletionRoutine$26$label_18#1:
- goto inline$CallCompletionRoutine$26$label_18_true#1, inline$CallCompletionRoutine$26$label_18_false#1;
-
- inline$CallCompletionRoutine$26$label_18_false#1:
- assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$26$label_1#1;
-
- inline$CallCompletionRoutine$26$label_18_true#1:
- assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$26$label_19#1;
-
- inline$CallCompletionRoutine$26$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$26$label_20#1;
-
- inline$CallCompletionRoutine$26$label_20#1:
- goto inline$CallCompletionRoutine$26$label_20_icall_1#1, inline$CallCompletionRoutine$26$label_20_icall_2#1, inline$CallCompletionRoutine$26$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$26$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$26$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$26$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$26$Entry#1:
- inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$26$start#1;
-
- inline$BDLSystemPowerIoCompletion$26$start#1:
- call inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$26$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_4#1:
- inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_6#1:
- inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$26$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$26$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$26$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$136$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$136$Entry#1:
- inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$136$start#1;
-
- inline$IoGetCurrentIrpStackLocation$136$start#1:
- inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$136$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$136$label_3_true#1, inline$IoGetCurrentIrpStackLocation$136$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$136$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$136$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$136$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$136$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$136$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$136$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$136$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$136$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$136$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$136$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$136$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$136$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$136$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$136$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$136$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$136$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$136$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$136$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$136$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$136$Return#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon36_Then#1, inline$BDLSystemPowerIoCompletion$26$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_15#1:
- goto inline$BDLGetDebugLevel$697$Entry#1;
-
- inline$BDLGetDebugLevel$697$Entry#1:
- goto inline$BDLGetDebugLevel$697$start#1;
-
- inline$BDLGetDebugLevel$697$start#1:
- goto inline$BDLGetDebugLevel$697$label_3#1;
-
- inline$BDLGetDebugLevel$697$label_3#1:
- havoc inline$BDLGetDebugLevel$697$myNondetVar_0;
- inline$BDLGetDebugLevel$697$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$697$myNondetVar_0;
- goto inline$BDLGetDebugLevel$697$label_1#1;
-
- inline$BDLGetDebugLevel$697$label_1#1:
- goto inline$BDLGetDebugLevel$697$Return#1;
-
- inline$BDLGetDebugLevel$697$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$697$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon37_Then#1, inline$BDLSystemPowerIoCompletion$26$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_18_true#1, inline$BDLSystemPowerIoCompletion$26$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_22#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_23#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_24#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$26$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_19#1:
- goto inline$BDLGetDebugLevel$698$Entry#1;
-
- inline$BDLGetDebugLevel$698$Entry#1:
- goto inline$BDLGetDebugLevel$698$start#1;
-
- inline$BDLGetDebugLevel$698$start#1:
- goto inline$BDLGetDebugLevel$698$label_3#1;
-
- inline$BDLGetDebugLevel$698$label_3#1:
- havoc inline$BDLGetDebugLevel$698$myNondetVar_0;
- inline$BDLGetDebugLevel$698$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$698$myNondetVar_0;
- goto inline$BDLGetDebugLevel$698$label_1#1;
-
- inline$BDLGetDebugLevel$698$label_1#1:
- goto inline$BDLGetDebugLevel$698$Return#1;
-
- inline$BDLGetDebugLevel$698$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$698$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon38_Then#1, inline$BDLSystemPowerIoCompletion$26$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_28_true#1, inline$BDLSystemPowerIoCompletion$26$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_32#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_33#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_34#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$26$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_29#1:
- goto inline$BDLGetDebugLevel$699$Entry#1;
-
- inline$BDLGetDebugLevel$699$Entry#1:
- goto inline$BDLGetDebugLevel$699$start#1;
-
- inline$BDLGetDebugLevel$699$start#1:
- goto inline$BDLGetDebugLevel$699$label_3#1;
-
- inline$BDLGetDebugLevel$699$label_3#1:
- havoc inline$BDLGetDebugLevel$699$myNondetVar_0;
- inline$BDLGetDebugLevel$699$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$699$myNondetVar_0;
- goto inline$BDLGetDebugLevel$699$label_1#1;
-
- inline$BDLGetDebugLevel$699$label_1#1:
- goto inline$BDLGetDebugLevel$699$Return#1;
-
- inline$BDLGetDebugLevel$699$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$699$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon39_Then#1, inline$BDLSystemPowerIoCompletion$26$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_38_true#1, inline$BDLSystemPowerIoCompletion$26$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_39_true#1, inline$BDLSystemPowerIoCompletion$26$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$26$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$26$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$26$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_106_true#1, inline$BDLSystemPowerIoCompletion$26$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_142#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_143#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$26$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$26$myNondetVar_0, inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$26$anon50_Then#1, inline$BDLSystemPowerIoCompletion$26$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_112#1:
- inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$26$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_113_true#1, inline$BDLSystemPowerIoCompletion$26$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$26$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_117#1:
- goto inline$BDLGetDebugLevel$706$Entry#1;
-
- inline$BDLGetDebugLevel$706$Entry#1:
- goto inline$BDLGetDebugLevel$706$start#1;
-
- inline$BDLGetDebugLevel$706$start#1:
- goto inline$BDLGetDebugLevel$706$label_3#1;
-
- inline$BDLGetDebugLevel$706$label_3#1:
- havoc inline$BDLGetDebugLevel$706$myNondetVar_0;
- inline$BDLGetDebugLevel$706$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$706$myNondetVar_0;
- goto inline$BDLGetDebugLevel$706$label_1#1;
-
- inline$BDLGetDebugLevel$706$label_1#1:
- goto inline$BDLGetDebugLevel$706$Return#1;
-
- inline$BDLGetDebugLevel$706$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$706$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon51_Then#1, inline$BDLSystemPowerIoCompletion$26$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_120_true#1, inline$BDLSystemPowerIoCompletion$26$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_124#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_125#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_126#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$26$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_121#1:
- goto inline$BDLGetDebugLevel$707$Entry#1;
-
- inline$BDLGetDebugLevel$707$Entry#1:
- goto inline$BDLGetDebugLevel$707$start#1;
-
- inline$BDLGetDebugLevel$707$start#1:
- goto inline$BDLGetDebugLevel$707$label_3#1;
-
- inline$BDLGetDebugLevel$707$label_3#1:
- havoc inline$BDLGetDebugLevel$707$myNondetVar_0;
- inline$BDLGetDebugLevel$707$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$707$myNondetVar_0;
- goto inline$BDLGetDebugLevel$707$label_1#1;
-
- inline$BDLGetDebugLevel$707$label_1#1:
- goto inline$BDLGetDebugLevel$707$Return#1;
-
- inline$BDLGetDebugLevel$707$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$707$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon52_Then#1, inline$BDLSystemPowerIoCompletion$26$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_130_true#1, inline$BDLSystemPowerIoCompletion$26$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_134#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_135#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_136#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$26$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_131#1:
- goto inline$BDLGetDebugLevel$708$Entry#1;
-
- inline$BDLGetDebugLevel$708$Entry#1:
- goto inline$BDLGetDebugLevel$708$start#1;
-
- inline$BDLGetDebugLevel$708$start#1:
- goto inline$BDLGetDebugLevel$708$label_3#1;
-
- inline$BDLGetDebugLevel$708$label_3#1:
- havoc inline$BDLGetDebugLevel$708$myNondetVar_0;
- inline$BDLGetDebugLevel$708$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$708$myNondetVar_0;
- goto inline$BDLGetDebugLevel$708$label_1#1;
-
- inline$BDLGetDebugLevel$708$label_1#1:
- goto inline$BDLGetDebugLevel$708$Return#1;
-
- inline$BDLGetDebugLevel$708$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$708$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon53_Then#1, inline$BDLSystemPowerIoCompletion$26$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_140_true#1, inline$BDLSystemPowerIoCompletion$26$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$26$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_115#1:
- inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$26$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$26$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_43#1:
- goto inline$BDLGetDebugLevel$700$Entry#1;
-
- inline$BDLGetDebugLevel$700$Entry#1:
- goto inline$BDLGetDebugLevel$700$start#1;
-
- inline$BDLGetDebugLevel$700$start#1:
- goto inline$BDLGetDebugLevel$700$label_3#1;
-
- inline$BDLGetDebugLevel$700$label_3#1:
- havoc inline$BDLGetDebugLevel$700$myNondetVar_0;
- inline$BDLGetDebugLevel$700$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$700$myNondetVar_0;
- goto inline$BDLGetDebugLevel$700$label_1#1;
-
- inline$BDLGetDebugLevel$700$label_1#1:
- goto inline$BDLGetDebugLevel$700$Return#1;
-
- inline$BDLGetDebugLevel$700$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$700$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon40_Then#1, inline$BDLSystemPowerIoCompletion$26$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_46_true#1, inline$BDLSystemPowerIoCompletion$26$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_50#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_51#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_52#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$26$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_47#1:
- goto inline$BDLGetDebugLevel$701$Entry#1;
-
- inline$BDLGetDebugLevel$701$Entry#1:
- goto inline$BDLGetDebugLevel$701$start#1;
-
- inline$BDLGetDebugLevel$701$start#1:
- goto inline$BDLGetDebugLevel$701$label_3#1;
-
- inline$BDLGetDebugLevel$701$label_3#1:
- havoc inline$BDLGetDebugLevel$701$myNondetVar_0;
- inline$BDLGetDebugLevel$701$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$701$myNondetVar_0;
- goto inline$BDLGetDebugLevel$701$label_1#1;
-
- inline$BDLGetDebugLevel$701$label_1#1:
- goto inline$BDLGetDebugLevel$701$Return#1;
-
- inline$BDLGetDebugLevel$701$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$701$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon41_Then#1, inline$BDLSystemPowerIoCompletion$26$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_56_true#1, inline$BDLSystemPowerIoCompletion$26$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_60#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_61#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_62#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$26$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_57#1:
- goto inline$BDLGetDebugLevel$702$Entry#1;
-
- inline$BDLGetDebugLevel$702$Entry#1:
- goto inline$BDLGetDebugLevel$702$start#1;
-
- inline$BDLGetDebugLevel$702$start#1:
- goto inline$BDLGetDebugLevel$702$label_3#1;
-
- inline$BDLGetDebugLevel$702$label_3#1:
- havoc inline$BDLGetDebugLevel$702$myNondetVar_0;
- inline$BDLGetDebugLevel$702$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$702$myNondetVar_0;
- goto inline$BDLGetDebugLevel$702$label_1#1;
-
- inline$BDLGetDebugLevel$702$label_1#1:
- goto inline$BDLGetDebugLevel$702$Return#1;
-
- inline$BDLGetDebugLevel$702$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$702$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon42_Then#1, inline$BDLSystemPowerIoCompletion$26$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_66_true#1, inline$BDLSystemPowerIoCompletion$26$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$26$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$26$anon43_Then#1, inline$BDLSystemPowerIoCompletion$26$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$26$anon44_Then#1, inline$BDLSystemPowerIoCompletion$26$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_74#1:
- goto inline$storm_IoCompleteRequest$54$Entry#1;
-
- inline$storm_IoCompleteRequest$54$Entry#1:
- inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$54$start#1;
-
- inline$storm_IoCompleteRequest$54$start#1:
- inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$54$label_3#1;
-
- inline$storm_IoCompleteRequest$54$label_3#1:
- call inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$54$label_6#1;
-
- inline$storm_IoCompleteRequest$54$label_6#1:
- goto inline$storm_IoCompleteRequest$54$label_6_true#1, inline$storm_IoCompleteRequest$54$label_6_false#1;
-
- inline$storm_IoCompleteRequest$54$label_6_false#1:
- assume inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$54$label_7#1;
-
- inline$storm_IoCompleteRequest$54$label_6_true#1:
- assume inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$54$label_8#1;
-
- inline$storm_IoCompleteRequest$54$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$54$anon3_Then#1, inline$storm_IoCompleteRequest$54$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$54$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$54$anon1#1;
-
- inline$storm_IoCompleteRequest$54$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$54$label_9#1;
-
- inline$storm_IoCompleteRequest$54$label_9#1:
- goto inline$storm_IoCompleteRequest$54$label_9_true#1, inline$storm_IoCompleteRequest$54$label_9_false#1;
-
- inline$storm_IoCompleteRequest$54$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$54$label_10#1;
-
- inline$storm_IoCompleteRequest$54$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$54$label_1#1;
-
- inline$storm_IoCompleteRequest$54$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$54$label_7#1;
-
- inline$storm_IoCompleteRequest$54$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$54$label_1#1;
-
- inline$storm_IoCompleteRequest$54$label_1#1:
- goto inline$storm_IoCompleteRequest$54$Return#1;
-
- inline$storm_IoCompleteRequest$54$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$54$Return#1;
-
- inline$storm_IoCompleteRequest$54$Return#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon45_Then#1, inline$BDLSystemPowerIoCompletion$26$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$26$anon46_Then#1, inline$BDLSystemPowerIoCompletion$26$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_80#1:
- goto inline$BDLGetDebugLevel$703$Entry#1;
-
- inline$BDLGetDebugLevel$703$Entry#1:
- goto inline$BDLGetDebugLevel$703$start#1;
-
- inline$BDLGetDebugLevel$703$start#1:
- goto inline$BDLGetDebugLevel$703$label_3#1;
-
- inline$BDLGetDebugLevel$703$label_3#1:
- havoc inline$BDLGetDebugLevel$703$myNondetVar_0;
- inline$BDLGetDebugLevel$703$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$703$myNondetVar_0;
- goto inline$BDLGetDebugLevel$703$label_1#1;
-
- inline$BDLGetDebugLevel$703$label_1#1:
- goto inline$BDLGetDebugLevel$703$Return#1;
-
- inline$BDLGetDebugLevel$703$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$703$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon47_Then#1, inline$BDLSystemPowerIoCompletion$26$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_83_true#1, inline$BDLSystemPowerIoCompletion$26$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_87#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_88#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_89#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$26$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_84#1:
- goto inline$BDLGetDebugLevel$704$Entry#1;
-
- inline$BDLGetDebugLevel$704$Entry#1:
- goto inline$BDLGetDebugLevel$704$start#1;
-
- inline$BDLGetDebugLevel$704$start#1:
- goto inline$BDLGetDebugLevel$704$label_3#1;
-
- inline$BDLGetDebugLevel$704$label_3#1:
- havoc inline$BDLGetDebugLevel$704$myNondetVar_0;
- inline$BDLGetDebugLevel$704$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$704$myNondetVar_0;
- goto inline$BDLGetDebugLevel$704$label_1#1;
-
- inline$BDLGetDebugLevel$704$label_1#1:
- goto inline$BDLGetDebugLevel$704$Return#1;
-
- inline$BDLGetDebugLevel$704$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$704$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon48_Then#1, inline$BDLSystemPowerIoCompletion$26$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_93_true#1, inline$BDLSystemPowerIoCompletion$26$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_97#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_98#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_99#1:
- call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$26$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$26$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_94#1:
- goto inline$BDLGetDebugLevel$705$Entry#1;
-
- inline$BDLGetDebugLevel$705$Entry#1:
- goto inline$BDLGetDebugLevel$705$start#1;
-
- inline$BDLGetDebugLevel$705$start#1:
- goto inline$BDLGetDebugLevel$705$label_3#1;
-
- inline$BDLGetDebugLevel$705$label_3#1:
- havoc inline$BDLGetDebugLevel$705$myNondetVar_0;
- inline$BDLGetDebugLevel$705$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$705$myNondetVar_0;
- goto inline$BDLGetDebugLevel$705$label_1#1;
-
- inline$BDLGetDebugLevel$705$label_1#1:
- goto inline$BDLGetDebugLevel$705$Return#1;
-
- inline$BDLGetDebugLevel$705$Return#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$705$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$26$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$26$anon49_Then#1, inline$BDLSystemPowerIoCompletion$26$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_103_true#1, inline$BDLSystemPowerIoCompletion$26$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$26$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$26$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_104#1:
- inline$BDLSystemPowerIoCompletion$26$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$26$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$26$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$26$Return#1;
-
- inline$BDLSystemPowerIoCompletion$26$Return#1:
- inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$26$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$26$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$26$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$26$anon14_Then#1, inline$CallCompletionRoutine$26$anon14_Else#1;
-
- inline$CallCompletionRoutine$26$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$26$anon9#1;
-
- inline$CallCompletionRoutine$26$anon9#1:
- goto inline$CallCompletionRoutine$26$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$26$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$26$Return#1;
-
- inline$CallCompletionRoutine$26$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$26$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$26$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$26$Entry#1:
- inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$26$start#1;
-
- inline$BDLDevicePowerIoCompletion$26$start#1:
- call inline$BDLDevicePowerIoCompletion$26$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$26$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_4#1:
- inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_6#1:
- inline$BDLDevicePowerIoCompletion$26$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$26$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$26$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$26$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$135$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$135$Entry#1:
- inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$135$start#1;
-
- inline$IoGetCurrentIrpStackLocation$135$start#1:
- inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$135$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$135$label_3_true#1, inline$IoGetCurrentIrpStackLocation$135$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$135$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$135$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$135$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$135$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$135$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$135$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$135$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$135$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$135$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$135$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$135$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$135$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$135$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$135$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$135$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$135$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$135$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$135$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$135$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$135$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$135$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$135$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$135$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon30_Then#1, inline$BDLDevicePowerIoCompletion$26$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_13#1:
- inline$BDLDevicePowerIoCompletion$26$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$26$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$26$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_17#1:
- goto inline$BDLGetDebugLevel$688$Entry#1;
-
- inline$BDLGetDebugLevel$688$Entry#1:
- goto inline$BDLGetDebugLevel$688$start#1;
-
- inline$BDLGetDebugLevel$688$start#1:
- goto inline$BDLGetDebugLevel$688$label_3#1;
-
- inline$BDLGetDebugLevel$688$label_3#1:
- havoc inline$BDLGetDebugLevel$688$myNondetVar_0;
- inline$BDLGetDebugLevel$688$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$688$myNondetVar_0;
- goto inline$BDLGetDebugLevel$688$label_1#1;
-
- inline$BDLGetDebugLevel$688$label_1#1:
- goto inline$BDLGetDebugLevel$688$Return#1;
-
- inline$BDLGetDebugLevel$688$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$688$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon31_Then#1, inline$BDLDevicePowerIoCompletion$26$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_20_true#1, inline$BDLDevicePowerIoCompletion$26$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_24#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_25#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_26#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$26$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_21#1:
- goto inline$BDLGetDebugLevel$689$Entry#1;
-
- inline$BDLGetDebugLevel$689$Entry#1:
- goto inline$BDLGetDebugLevel$689$start#1;
-
- inline$BDLGetDebugLevel$689$start#1:
- goto inline$BDLGetDebugLevel$689$label_3#1;
-
- inline$BDLGetDebugLevel$689$label_3#1:
- havoc inline$BDLGetDebugLevel$689$myNondetVar_0;
- inline$BDLGetDebugLevel$689$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$689$myNondetVar_0;
- goto inline$BDLGetDebugLevel$689$label_1#1;
-
- inline$BDLGetDebugLevel$689$label_1#1:
- goto inline$BDLGetDebugLevel$689$Return#1;
-
- inline$BDLGetDebugLevel$689$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$689$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon32_Then#1, inline$BDLDevicePowerIoCompletion$26$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_30_true#1, inline$BDLDevicePowerIoCompletion$26$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_34#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_35#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_36#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$26$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_31#1:
- goto inline$BDLGetDebugLevel$690$Entry#1;
-
- inline$BDLGetDebugLevel$690$Entry#1:
- goto inline$BDLGetDebugLevel$690$start#1;
-
- inline$BDLGetDebugLevel$690$start#1:
- goto inline$BDLGetDebugLevel$690$label_3#1;
-
- inline$BDLGetDebugLevel$690$label_3#1:
- havoc inline$BDLGetDebugLevel$690$myNondetVar_0;
- inline$BDLGetDebugLevel$690$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$690$myNondetVar_0;
- goto inline$BDLGetDebugLevel$690$label_1#1;
-
- inline$BDLGetDebugLevel$690$label_1#1:
- goto inline$BDLGetDebugLevel$690$Return#1;
-
- inline$BDLGetDebugLevel$690$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$690$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon33_Then#1, inline$BDLDevicePowerIoCompletion$26$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_40_true#1, inline$BDLDevicePowerIoCompletion$26$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_41_true#1, inline$BDLDevicePowerIoCompletion$26$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$26$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$26$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_44_true#1, inline$BDLDevicePowerIoCompletion$26$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$26$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_45_true#1, inline$BDLDevicePowerIoCompletion$26$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$26$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$26$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$26$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$26$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$26$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$26$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_54#1:
- inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$26$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_55_true#1, inline$BDLDevicePowerIoCompletion$26$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_56#1:
- call inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$26$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$26$anon34_Then#1, inline$BDLDevicePowerIoCompletion$26$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_59#1:
- goto inline$BDLGetDebugLevel$691$Entry#1;
-
- inline$BDLGetDebugLevel$691$Entry#1:
- goto inline$BDLGetDebugLevel$691$start#1;
-
- inline$BDLGetDebugLevel$691$start#1:
- goto inline$BDLGetDebugLevel$691$label_3#1;
-
- inline$BDLGetDebugLevel$691$label_3#1:
- havoc inline$BDLGetDebugLevel$691$myNondetVar_0;
- inline$BDLGetDebugLevel$691$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$691$myNondetVar_0;
- goto inline$BDLGetDebugLevel$691$label_1#1;
-
- inline$BDLGetDebugLevel$691$label_1#1:
- goto inline$BDLGetDebugLevel$691$Return#1;
-
- inline$BDLGetDebugLevel$691$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$691$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon35_Then#1, inline$BDLDevicePowerIoCompletion$26$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_62_true#1, inline$BDLDevicePowerIoCompletion$26$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_66#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_67#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_68#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$26$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_63#1:
- goto inline$BDLGetDebugLevel$692$Entry#1;
-
- inline$BDLGetDebugLevel$692$Entry#1:
- goto inline$BDLGetDebugLevel$692$start#1;
-
- inline$BDLGetDebugLevel$692$start#1:
- goto inline$BDLGetDebugLevel$692$label_3#1;
-
- inline$BDLGetDebugLevel$692$label_3#1:
- havoc inline$BDLGetDebugLevel$692$myNondetVar_0;
- inline$BDLGetDebugLevel$692$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$692$myNondetVar_0;
- goto inline$BDLGetDebugLevel$692$label_1#1;
-
- inline$BDLGetDebugLevel$692$label_1#1:
- goto inline$BDLGetDebugLevel$692$Return#1;
-
- inline$BDLGetDebugLevel$692$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$692$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon36_Then#1, inline$BDLDevicePowerIoCompletion$26$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_72_true#1, inline$BDLDevicePowerIoCompletion$26$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_76#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_77#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_78#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$26$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_73#1:
- goto inline$BDLGetDebugLevel$693$Entry#1;
-
- inline$BDLGetDebugLevel$693$Entry#1:
- goto inline$BDLGetDebugLevel$693$start#1;
-
- inline$BDLGetDebugLevel$693$start#1:
- goto inline$BDLGetDebugLevel$693$label_3#1;
-
- inline$BDLGetDebugLevel$693$label_3#1:
- havoc inline$BDLGetDebugLevel$693$myNondetVar_0;
- inline$BDLGetDebugLevel$693$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$693$myNondetVar_0;
- goto inline$BDLGetDebugLevel$693$label_1#1;
-
- inline$BDLGetDebugLevel$693$label_1#1:
- goto inline$BDLGetDebugLevel$693$Return#1;
-
- inline$BDLGetDebugLevel$693$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$693$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon37_Then#1, inline$BDLDevicePowerIoCompletion$26$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_82_true#1, inline$BDLDevicePowerIoCompletion$26$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$26$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$26$anon38_Then#1, inline$BDLDevicePowerIoCompletion$26$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$26$anon39_Then#1, inline$BDLDevicePowerIoCompletion$26$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_92#1:
- goto inline$storm_IoCompleteRequest$53$Entry#1;
-
- inline$storm_IoCompleteRequest$53$Entry#1:
- inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$53$start#1;
-
- inline$storm_IoCompleteRequest$53$start#1:
- inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$53$label_3#1;
-
- inline$storm_IoCompleteRequest$53$label_3#1:
- call inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$53$label_6#1;
-
- inline$storm_IoCompleteRequest$53$label_6#1:
- goto inline$storm_IoCompleteRequest$53$label_6_true#1, inline$storm_IoCompleteRequest$53$label_6_false#1;
-
- inline$storm_IoCompleteRequest$53$label_6_false#1:
- assume inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$53$label_7#1;
-
- inline$storm_IoCompleteRequest$53$label_6_true#1:
- assume inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$53$label_8#1;
-
- inline$storm_IoCompleteRequest$53$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$53$anon3_Then#1, inline$storm_IoCompleteRequest$53$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$53$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$53$anon1#1;
-
- inline$storm_IoCompleteRequest$53$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$53$label_9#1;
-
- inline$storm_IoCompleteRequest$53$label_9#1:
- goto inline$storm_IoCompleteRequest$53$label_9_true#1, inline$storm_IoCompleteRequest$53$label_9_false#1;
-
- inline$storm_IoCompleteRequest$53$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$53$label_10#1;
-
- inline$storm_IoCompleteRequest$53$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$53$label_1#1;
-
- inline$storm_IoCompleteRequest$53$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$53$label_7#1;
-
- inline$storm_IoCompleteRequest$53$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$53$label_1#1;
-
- inline$storm_IoCompleteRequest$53$label_1#1:
- goto inline$storm_IoCompleteRequest$53$Return#1;
-
- inline$storm_IoCompleteRequest$53$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$53$Return#1;
-
- inline$storm_IoCompleteRequest$53$Return#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon40_Then#1, inline$BDLDevicePowerIoCompletion$26$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$26$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$26$anon41_Then#1, inline$BDLDevicePowerIoCompletion$26$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_98#1:
- goto inline$BDLGetDebugLevel$694$Entry#1;
-
- inline$BDLGetDebugLevel$694$Entry#1:
- goto inline$BDLGetDebugLevel$694$start#1;
-
- inline$BDLGetDebugLevel$694$start#1:
- goto inline$BDLGetDebugLevel$694$label_3#1;
-
- inline$BDLGetDebugLevel$694$label_3#1:
- havoc inline$BDLGetDebugLevel$694$myNondetVar_0;
- inline$BDLGetDebugLevel$694$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$694$myNondetVar_0;
- goto inline$BDLGetDebugLevel$694$label_1#1;
-
- inline$BDLGetDebugLevel$694$label_1#1:
- goto inline$BDLGetDebugLevel$694$Return#1;
-
- inline$BDLGetDebugLevel$694$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$694$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon42_Then#1, inline$BDLDevicePowerIoCompletion$26$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_101_true#1, inline$BDLDevicePowerIoCompletion$26$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_105#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_106#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_107#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$26$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_102#1:
- goto inline$BDLGetDebugLevel$695$Entry#1;
-
- inline$BDLGetDebugLevel$695$Entry#1:
- goto inline$BDLGetDebugLevel$695$start#1;
-
- inline$BDLGetDebugLevel$695$start#1:
- goto inline$BDLGetDebugLevel$695$label_3#1;
-
- inline$BDLGetDebugLevel$695$label_3#1:
- havoc inline$BDLGetDebugLevel$695$myNondetVar_0;
- inline$BDLGetDebugLevel$695$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$695$myNondetVar_0;
- goto inline$BDLGetDebugLevel$695$label_1#1;
-
- inline$BDLGetDebugLevel$695$label_1#1:
- goto inline$BDLGetDebugLevel$695$Return#1;
-
- inline$BDLGetDebugLevel$695$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$695$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon43_Then#1, inline$BDLDevicePowerIoCompletion$26$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_111_true#1, inline$BDLDevicePowerIoCompletion$26$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_115#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_116#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_117#1:
- call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$26$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$26$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_112#1:
- goto inline$BDLGetDebugLevel$696$Entry#1;
-
- inline$BDLGetDebugLevel$696$Entry#1:
- goto inline$BDLGetDebugLevel$696$start#1;
-
- inline$BDLGetDebugLevel$696$start#1:
- goto inline$BDLGetDebugLevel$696$label_3#1;
-
- inline$BDLGetDebugLevel$696$label_3#1:
- havoc inline$BDLGetDebugLevel$696$myNondetVar_0;
- inline$BDLGetDebugLevel$696$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$696$myNondetVar_0;
- goto inline$BDLGetDebugLevel$696$label_1#1;
-
- inline$BDLGetDebugLevel$696$label_1#1:
- goto inline$BDLGetDebugLevel$696$Return#1;
-
- inline$BDLGetDebugLevel$696$Return#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$696$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$26$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$26$anon44_Then#1, inline$BDLDevicePowerIoCompletion$26$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_121_true#1, inline$BDLDevicePowerIoCompletion$26$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$26$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$26$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_122#1:
- inline$BDLDevicePowerIoCompletion$26$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$26$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$26$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$26$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$26$Return#1;
-
- inline$BDLDevicePowerIoCompletion$26$Return#1:
- inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$26$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$26$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$26$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$26$anon13_Then#1, inline$CallCompletionRoutine$26$anon13_Else#1;
-
- inline$CallCompletionRoutine$26$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$26$anon7#1;
-
- inline$CallCompletionRoutine$26$anon7#1:
- goto inline$CallCompletionRoutine$26$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$26$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$26$Return#1;
-
- inline$CallCompletionRoutine$26$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$26$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$26$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$26$Entry#1:
- inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$26$start#1;
-
- inline$BDLCallDriverCompletionRoutine$26$start#1:
- inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$26$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$26$label_3_true#1, inline$BDLCallDriverCompletionRoutine$26$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$26$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$26$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$26$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$26$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_6#1:
- goto inline$storm_KeSetEvent$30$Entry#1;
-
- inline$storm_KeSetEvent$30$Entry#1:
- inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$30$start#1;
-
- inline$storm_KeSetEvent$30$start#1:
- inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$30$label_3#1;
-
- inline$storm_KeSetEvent$30$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$30$label_1#1;
-
- inline$storm_KeSetEvent$30$label_1#1:
- goto inline$storm_KeSetEvent$30$Return#1;
-
- inline$storm_KeSetEvent$30$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$26$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$26$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$26$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$26$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$26$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$26$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$26$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_9#1:
- inline$BDLCallDriverCompletionRoutine$26$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$26$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$26$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$26$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$26$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$26$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$26$Return#1:
- inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$26$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$26$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$26$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$26$anon12_Then#1, inline$CallCompletionRoutine$26$anon12_Else#1;
-
- inline$CallCompletionRoutine$26$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$26$anon5#1;
-
- inline$CallCompletionRoutine$26$anon5#1:
- goto inline$CallCompletionRoutine$26$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$26$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$26$label_23#1;
-
- inline$CallCompletionRoutine$26$label_23#1:
- inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$26$label_24#1;
-
- inline$CallCompletionRoutine$26$label_24#1:
- goto inline$CallCompletionRoutine$26$label_24_true#1, inline$CallCompletionRoutine$26$label_24_false#1;
-
- inline$CallCompletionRoutine$26$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$26$label_1#1;
-
- inline$CallCompletionRoutine$26$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$26$label_25#1;
-
- inline$CallCompletionRoutine$26$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$26$label_1#1;
-
- inline$CallCompletionRoutine$26$label_1#1:
- goto inline$CallCompletionRoutine$26$Return#1;
-
- inline$CallCompletionRoutine$26$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$26$Return#1;
-
- inline$CallCompletionRoutine$26$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$26$Return#1;
-
- inline$CallCompletionRoutine$26$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$26$Return#1;
-
- inline$CallCompletionRoutine$26$Return#1:
- goto inline$storm_IoCallDriver$13$label_33$1#1;
-
- inline$storm_IoCallDriver$13$label_33$1#1:
- goto inline$storm_IoCallDriver$13$anon14_Then#1, inline$storm_IoCallDriver$13$anon14_Else#1;
-
- inline$storm_IoCallDriver$13$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$13$anon8#1;
-
- inline$storm_IoCallDriver$13$anon8#1:
- goto inline$storm_IoCallDriver$13$label_36#1;
-
- inline$storm_IoCallDriver$13$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$13$Return#1;
-
- inline$storm_IoCallDriver$13$label_27_case_1#1:
- assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$13$label_29#1;
-
- inline$storm_IoCallDriver$13$label_29#1:
- inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$13$label_37#1;
-
- inline$storm_IoCallDriver$13$label_37#1:
- goto inline$storm_IoCallDriver$13$label_38#1;
-
- inline$storm_IoCallDriver$13$label_38#1:
- goto inline$storm_IoCallDriver$13$label_39#1;
-
- inline$storm_IoCallDriver$13$label_39#1:
- goto inline$CallCompletionRoutine$27$Entry#1;
-
- inline$CallCompletionRoutine$27$Entry#1:
- inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$27$start#1;
-
- inline$CallCompletionRoutine$27$start#1:
- inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$27$label_3#1;
-
- inline$CallCompletionRoutine$27$label_3#1:
- goto inline$CallCompletionRoutine$27$label_4#1;
-
- inline$CallCompletionRoutine$27$label_4#1:
- goto inline$CallCompletionRoutine$27$label_5#1;
-
- inline$CallCompletionRoutine$27$label_5#1:
- goto inline$CallCompletionRoutine$27$label_6#1;
-
- inline$CallCompletionRoutine$27$label_6#1:
- goto inline$CallCompletionRoutine$27$label_7#1;
-
- inline$CallCompletionRoutine$27$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$137$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$137$Entry#1:
- inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$137$start#1;
-
- inline$IoGetCurrentIrpStackLocation$137$start#1:
- inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$137$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$137$label_3_true#1, inline$IoGetCurrentIrpStackLocation$137$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$137$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$137$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$137$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$137$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$137$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$137$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$137$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$137$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$137$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$137$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$137$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$137$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$137$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$137$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$137$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$137$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$137$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$137$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$137$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$137$Return#1:
- goto inline$CallCompletionRoutine$27$label_7$1#1;
-
- inline$CallCompletionRoutine$27$label_7$1#1:
- goto inline$CallCompletionRoutine$27$anon10_Then#1, inline$CallCompletionRoutine$27$anon10_Else#1;
-
- inline$CallCompletionRoutine$27$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$27$anon1#1;
-
- inline$CallCompletionRoutine$27$anon1#1:
- goto inline$CallCompletionRoutine$27$label_10#1;
-
- inline$CallCompletionRoutine$27$label_10#1:
- goto inline$CallCompletionRoutine$27$label_11#1;
-
- inline$CallCompletionRoutine$27$label_11#1:
- havoc inline$CallCompletionRoutine$27$myNondetVar_0;
- inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$myNondetVar_0;
- goto inline$CallCompletionRoutine$27$label_12#1;
-
- inline$CallCompletionRoutine$27$label_12#1:
- havoc inline$CallCompletionRoutine$27$myNondetVar_0;
- inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$myNondetVar_0;
- goto inline$CallCompletionRoutine$27$label_13#1;
-
- inline$CallCompletionRoutine$27$label_13#1:
- havoc inline$CallCompletionRoutine$27$myNondetVar_0;
- goto inline$CallCompletionRoutine$27$label_14#1;
-
- inline$CallCompletionRoutine$27$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$138$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$138$Entry#1:
- inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$138$start#1;
-
- inline$IoGetCurrentIrpStackLocation$138$start#1:
- inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$138$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$138$label_3_true#1, inline$IoGetCurrentIrpStackLocation$138$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$138$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$138$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$138$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$138$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$138$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$138$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$138$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$138$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$138$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$138$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$138$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$138$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$138$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$138$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$138$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$138$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$138$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$138$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$138$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$138$Return#1:
- goto inline$CallCompletionRoutine$27$label_14$1#1;
-
- inline$CallCompletionRoutine$27$label_14$1#1:
- goto inline$CallCompletionRoutine$27$anon11_Then#1, inline$CallCompletionRoutine$27$anon11_Else#1;
-
- inline$CallCompletionRoutine$27$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$27$anon3#1;
-
- inline$CallCompletionRoutine$27$anon3#1:
- goto inline$CallCompletionRoutine$27$label_17#1;
-
- inline$CallCompletionRoutine$27$label_17#1:
- goto inline$CallCompletionRoutine$27$label_18#1;
-
- inline$CallCompletionRoutine$27$label_18#1:
- goto inline$CallCompletionRoutine$27$label_18_true#1, inline$CallCompletionRoutine$27$label_18_false#1;
-
- inline$CallCompletionRoutine$27$label_18_false#1:
- assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$27$label_1#1;
-
- inline$CallCompletionRoutine$27$label_18_true#1:
- assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$27$label_19#1;
-
- inline$CallCompletionRoutine$27$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$27$label_20#1;
-
- inline$CallCompletionRoutine$27$label_20#1:
- goto inline$CallCompletionRoutine$27$label_20_icall_1#1, inline$CallCompletionRoutine$27$label_20_icall_2#1, inline$CallCompletionRoutine$27$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$27$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$27$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$27$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$27$Entry#1:
- inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$27$start#1;
-
- inline$BDLSystemPowerIoCompletion$27$start#1:
- call inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$27$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_4#1:
- inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_6#1:
- inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$27$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$27$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$27$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$140$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$140$Entry#1:
- inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$140$start#1;
-
- inline$IoGetCurrentIrpStackLocation$140$start#1:
- inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$140$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$140$label_3_true#1, inline$IoGetCurrentIrpStackLocation$140$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$140$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$140$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$140$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$140$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$140$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$140$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$140$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$140$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$140$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$140$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$140$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$140$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$140$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$140$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$140$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$140$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$140$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$140$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$140$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$140$Return#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon36_Then#1, inline$BDLSystemPowerIoCompletion$27$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_15#1:
- goto inline$BDLGetDebugLevel$718$Entry#1;
-
- inline$BDLGetDebugLevel$718$Entry#1:
- goto inline$BDLGetDebugLevel$718$start#1;
-
- inline$BDLGetDebugLevel$718$start#1:
- goto inline$BDLGetDebugLevel$718$label_3#1;
-
- inline$BDLGetDebugLevel$718$label_3#1:
- havoc inline$BDLGetDebugLevel$718$myNondetVar_0;
- inline$BDLGetDebugLevel$718$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$718$myNondetVar_0;
- goto inline$BDLGetDebugLevel$718$label_1#1;
-
- inline$BDLGetDebugLevel$718$label_1#1:
- goto inline$BDLGetDebugLevel$718$Return#1;
-
- inline$BDLGetDebugLevel$718$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$718$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon37_Then#1, inline$BDLSystemPowerIoCompletion$27$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_18_true#1, inline$BDLSystemPowerIoCompletion$27$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_22#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_23#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_24#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$27$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_19#1:
- goto inline$BDLGetDebugLevel$719$Entry#1;
-
- inline$BDLGetDebugLevel$719$Entry#1:
- goto inline$BDLGetDebugLevel$719$start#1;
-
- inline$BDLGetDebugLevel$719$start#1:
- goto inline$BDLGetDebugLevel$719$label_3#1;
-
- inline$BDLGetDebugLevel$719$label_3#1:
- havoc inline$BDLGetDebugLevel$719$myNondetVar_0;
- inline$BDLGetDebugLevel$719$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$719$myNondetVar_0;
- goto inline$BDLGetDebugLevel$719$label_1#1;
-
- inline$BDLGetDebugLevel$719$label_1#1:
- goto inline$BDLGetDebugLevel$719$Return#1;
-
- inline$BDLGetDebugLevel$719$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$719$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon38_Then#1, inline$BDLSystemPowerIoCompletion$27$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_28_true#1, inline$BDLSystemPowerIoCompletion$27$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_32#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_33#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_34#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$27$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_29#1:
- goto inline$BDLGetDebugLevel$720$Entry#1;
-
- inline$BDLGetDebugLevel$720$Entry#1:
- goto inline$BDLGetDebugLevel$720$start#1;
-
- inline$BDLGetDebugLevel$720$start#1:
- goto inline$BDLGetDebugLevel$720$label_3#1;
-
- inline$BDLGetDebugLevel$720$label_3#1:
- havoc inline$BDLGetDebugLevel$720$myNondetVar_0;
- inline$BDLGetDebugLevel$720$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$720$myNondetVar_0;
- goto inline$BDLGetDebugLevel$720$label_1#1;
-
- inline$BDLGetDebugLevel$720$label_1#1:
- goto inline$BDLGetDebugLevel$720$Return#1;
-
- inline$BDLGetDebugLevel$720$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$720$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon39_Then#1, inline$BDLSystemPowerIoCompletion$27$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_38_true#1, inline$BDLSystemPowerIoCompletion$27$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_39_true#1, inline$BDLSystemPowerIoCompletion$27$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$27$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$27$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$27$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_106_true#1, inline$BDLSystemPowerIoCompletion$27$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_142#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_143#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$27$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$27$myNondetVar_0, inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$27$anon50_Then#1, inline$BDLSystemPowerIoCompletion$27$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_112#1:
- inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$27$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_113_true#1, inline$BDLSystemPowerIoCompletion$27$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$27$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_117#1:
- goto inline$BDLGetDebugLevel$727$Entry#1;
-
- inline$BDLGetDebugLevel$727$Entry#1:
- goto inline$BDLGetDebugLevel$727$start#1;
-
- inline$BDLGetDebugLevel$727$start#1:
- goto inline$BDLGetDebugLevel$727$label_3#1;
-
- inline$BDLGetDebugLevel$727$label_3#1:
- havoc inline$BDLGetDebugLevel$727$myNondetVar_0;
- inline$BDLGetDebugLevel$727$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$727$myNondetVar_0;
- goto inline$BDLGetDebugLevel$727$label_1#1;
-
- inline$BDLGetDebugLevel$727$label_1#1:
- goto inline$BDLGetDebugLevel$727$Return#1;
-
- inline$BDLGetDebugLevel$727$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$727$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon51_Then#1, inline$BDLSystemPowerIoCompletion$27$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_120_true#1, inline$BDLSystemPowerIoCompletion$27$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_124#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_125#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_126#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$27$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_121#1:
- goto inline$BDLGetDebugLevel$728$Entry#1;
-
- inline$BDLGetDebugLevel$728$Entry#1:
- goto inline$BDLGetDebugLevel$728$start#1;
-
- inline$BDLGetDebugLevel$728$start#1:
- goto inline$BDLGetDebugLevel$728$label_3#1;
-
- inline$BDLGetDebugLevel$728$label_3#1:
- havoc inline$BDLGetDebugLevel$728$myNondetVar_0;
- inline$BDLGetDebugLevel$728$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$728$myNondetVar_0;
- goto inline$BDLGetDebugLevel$728$label_1#1;
-
- inline$BDLGetDebugLevel$728$label_1#1:
- goto inline$BDLGetDebugLevel$728$Return#1;
-
- inline$BDLGetDebugLevel$728$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$728$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon52_Then#1, inline$BDLSystemPowerIoCompletion$27$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_130_true#1, inline$BDLSystemPowerIoCompletion$27$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_134#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_135#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_136#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$27$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_131#1:
- goto inline$BDLGetDebugLevel$729$Entry#1;
-
- inline$BDLGetDebugLevel$729$Entry#1:
- goto inline$BDLGetDebugLevel$729$start#1;
-
- inline$BDLGetDebugLevel$729$start#1:
- goto inline$BDLGetDebugLevel$729$label_3#1;
-
- inline$BDLGetDebugLevel$729$label_3#1:
- havoc inline$BDLGetDebugLevel$729$myNondetVar_0;
- inline$BDLGetDebugLevel$729$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$729$myNondetVar_0;
- goto inline$BDLGetDebugLevel$729$label_1#1;
-
- inline$BDLGetDebugLevel$729$label_1#1:
- goto inline$BDLGetDebugLevel$729$Return#1;
-
- inline$BDLGetDebugLevel$729$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$729$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon53_Then#1, inline$BDLSystemPowerIoCompletion$27$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_140_true#1, inline$BDLSystemPowerIoCompletion$27$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$27$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_115#1:
- inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$27$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$27$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_43#1:
- goto inline$BDLGetDebugLevel$721$Entry#1;
-
- inline$BDLGetDebugLevel$721$Entry#1:
- goto inline$BDLGetDebugLevel$721$start#1;
-
- inline$BDLGetDebugLevel$721$start#1:
- goto inline$BDLGetDebugLevel$721$label_3#1;
-
- inline$BDLGetDebugLevel$721$label_3#1:
- havoc inline$BDLGetDebugLevel$721$myNondetVar_0;
- inline$BDLGetDebugLevel$721$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$721$myNondetVar_0;
- goto inline$BDLGetDebugLevel$721$label_1#1;
-
- inline$BDLGetDebugLevel$721$label_1#1:
- goto inline$BDLGetDebugLevel$721$Return#1;
-
- inline$BDLGetDebugLevel$721$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$721$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon40_Then#1, inline$BDLSystemPowerIoCompletion$27$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_46_true#1, inline$BDLSystemPowerIoCompletion$27$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_50#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_51#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_52#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$27$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_47#1:
- goto inline$BDLGetDebugLevel$722$Entry#1;
-
- inline$BDLGetDebugLevel$722$Entry#1:
- goto inline$BDLGetDebugLevel$722$start#1;
-
- inline$BDLGetDebugLevel$722$start#1:
- goto inline$BDLGetDebugLevel$722$label_3#1;
-
- inline$BDLGetDebugLevel$722$label_3#1:
- havoc inline$BDLGetDebugLevel$722$myNondetVar_0;
- inline$BDLGetDebugLevel$722$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$722$myNondetVar_0;
- goto inline$BDLGetDebugLevel$722$label_1#1;
-
- inline$BDLGetDebugLevel$722$label_1#1:
- goto inline$BDLGetDebugLevel$722$Return#1;
-
- inline$BDLGetDebugLevel$722$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$722$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon41_Then#1, inline$BDLSystemPowerIoCompletion$27$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_56_true#1, inline$BDLSystemPowerIoCompletion$27$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_60#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_61#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_62#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$27$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_57#1:
- goto inline$BDLGetDebugLevel$723$Entry#1;
-
- inline$BDLGetDebugLevel$723$Entry#1:
- goto inline$BDLGetDebugLevel$723$start#1;
-
- inline$BDLGetDebugLevel$723$start#1:
- goto inline$BDLGetDebugLevel$723$label_3#1;
-
- inline$BDLGetDebugLevel$723$label_3#1:
- havoc inline$BDLGetDebugLevel$723$myNondetVar_0;
- inline$BDLGetDebugLevel$723$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$723$myNondetVar_0;
- goto inline$BDLGetDebugLevel$723$label_1#1;
-
- inline$BDLGetDebugLevel$723$label_1#1:
- goto inline$BDLGetDebugLevel$723$Return#1;
-
- inline$BDLGetDebugLevel$723$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$723$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon42_Then#1, inline$BDLSystemPowerIoCompletion$27$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_66_true#1, inline$BDLSystemPowerIoCompletion$27$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$27$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$27$anon43_Then#1, inline$BDLSystemPowerIoCompletion$27$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$27$anon44_Then#1, inline$BDLSystemPowerIoCompletion$27$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_74#1:
- goto inline$storm_IoCompleteRequest$56$Entry#1;
-
- inline$storm_IoCompleteRequest$56$Entry#1:
- inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$56$start#1;
-
- inline$storm_IoCompleteRequest$56$start#1:
- inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$56$label_3#1;
-
- inline$storm_IoCompleteRequest$56$label_3#1:
- call inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$56$label_6#1;
-
- inline$storm_IoCompleteRequest$56$label_6#1:
- goto inline$storm_IoCompleteRequest$56$label_6_true#1, inline$storm_IoCompleteRequest$56$label_6_false#1;
-
- inline$storm_IoCompleteRequest$56$label_6_false#1:
- assume inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$56$label_7#1;
-
- inline$storm_IoCompleteRequest$56$label_6_true#1:
- assume inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$56$label_8#1;
-
- inline$storm_IoCompleteRequest$56$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$56$anon3_Then#1, inline$storm_IoCompleteRequest$56$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$56$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$56$anon1#1;
-
- inline$storm_IoCompleteRequest$56$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$56$label_9#1;
-
- inline$storm_IoCompleteRequest$56$label_9#1:
- goto inline$storm_IoCompleteRequest$56$label_9_true#1, inline$storm_IoCompleteRequest$56$label_9_false#1;
-
- inline$storm_IoCompleteRequest$56$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$56$label_10#1;
-
- inline$storm_IoCompleteRequest$56$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$56$label_1#1;
-
- inline$storm_IoCompleteRequest$56$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$56$label_7#1;
-
- inline$storm_IoCompleteRequest$56$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$56$label_1#1;
-
- inline$storm_IoCompleteRequest$56$label_1#1:
- goto inline$storm_IoCompleteRequest$56$Return#1;
-
- inline$storm_IoCompleteRequest$56$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$56$Return#1;
-
- inline$storm_IoCompleteRequest$56$Return#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon45_Then#1, inline$BDLSystemPowerIoCompletion$27$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$27$anon46_Then#1, inline$BDLSystemPowerIoCompletion$27$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_80#1:
- goto inline$BDLGetDebugLevel$724$Entry#1;
-
- inline$BDLGetDebugLevel$724$Entry#1:
- goto inline$BDLGetDebugLevel$724$start#1;
-
- inline$BDLGetDebugLevel$724$start#1:
- goto inline$BDLGetDebugLevel$724$label_3#1;
-
- inline$BDLGetDebugLevel$724$label_3#1:
- havoc inline$BDLGetDebugLevel$724$myNondetVar_0;
- inline$BDLGetDebugLevel$724$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$724$myNondetVar_0;
- goto inline$BDLGetDebugLevel$724$label_1#1;
-
- inline$BDLGetDebugLevel$724$label_1#1:
- goto inline$BDLGetDebugLevel$724$Return#1;
-
- inline$BDLGetDebugLevel$724$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$724$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon47_Then#1, inline$BDLSystemPowerIoCompletion$27$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_83_true#1, inline$BDLSystemPowerIoCompletion$27$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_87#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_88#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_89#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$27$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_84#1:
- goto inline$BDLGetDebugLevel$725$Entry#1;
-
- inline$BDLGetDebugLevel$725$Entry#1:
- goto inline$BDLGetDebugLevel$725$start#1;
-
- inline$BDLGetDebugLevel$725$start#1:
- goto inline$BDLGetDebugLevel$725$label_3#1;
-
- inline$BDLGetDebugLevel$725$label_3#1:
- havoc inline$BDLGetDebugLevel$725$myNondetVar_0;
- inline$BDLGetDebugLevel$725$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$725$myNondetVar_0;
- goto inline$BDLGetDebugLevel$725$label_1#1;
-
- inline$BDLGetDebugLevel$725$label_1#1:
- goto inline$BDLGetDebugLevel$725$Return#1;
-
- inline$BDLGetDebugLevel$725$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$725$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon48_Then#1, inline$BDLSystemPowerIoCompletion$27$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_93_true#1, inline$BDLSystemPowerIoCompletion$27$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_97#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_98#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_99#1:
- call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$27$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$27$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_94#1:
- goto inline$BDLGetDebugLevel$726$Entry#1;
-
- inline$BDLGetDebugLevel$726$Entry#1:
- goto inline$BDLGetDebugLevel$726$start#1;
-
- inline$BDLGetDebugLevel$726$start#1:
- goto inline$BDLGetDebugLevel$726$label_3#1;
-
- inline$BDLGetDebugLevel$726$label_3#1:
- havoc inline$BDLGetDebugLevel$726$myNondetVar_0;
- inline$BDLGetDebugLevel$726$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$726$myNondetVar_0;
- goto inline$BDLGetDebugLevel$726$label_1#1;
-
- inline$BDLGetDebugLevel$726$label_1#1:
- goto inline$BDLGetDebugLevel$726$Return#1;
-
- inline$BDLGetDebugLevel$726$Return#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$726$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$27$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$27$anon49_Then#1, inline$BDLSystemPowerIoCompletion$27$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_103_true#1, inline$BDLSystemPowerIoCompletion$27$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$27$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$27$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_104#1:
- inline$BDLSystemPowerIoCompletion$27$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$27$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$27$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$27$Return#1;
-
- inline$BDLSystemPowerIoCompletion$27$Return#1:
- inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$27$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$27$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$27$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$27$anon14_Then#1, inline$CallCompletionRoutine$27$anon14_Else#1;
-
- inline$CallCompletionRoutine$27$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$27$anon9#1;
-
- inline$CallCompletionRoutine$27$anon9#1:
- goto inline$CallCompletionRoutine$27$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$27$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$27$Return#1;
-
- inline$CallCompletionRoutine$27$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$27$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$27$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$27$Entry#1:
- inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$27$start#1;
-
- inline$BDLDevicePowerIoCompletion$27$start#1:
- call inline$BDLDevicePowerIoCompletion$27$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$27$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_4#1:
- inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_6#1:
- inline$BDLDevicePowerIoCompletion$27$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$27$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$27$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$27$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$139$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$139$Entry#1:
- inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$139$start#1;
-
- inline$IoGetCurrentIrpStackLocation$139$start#1:
- inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$139$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$139$label_3_true#1, inline$IoGetCurrentIrpStackLocation$139$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$139$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$139$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$139$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$139$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$139$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$139$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$139$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$139$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$139$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$139$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$139$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$139$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$139$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$139$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$139$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$139$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$139$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$139$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$139$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$139$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$139$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$139$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$139$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon30_Then#1, inline$BDLDevicePowerIoCompletion$27$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_13#1:
- inline$BDLDevicePowerIoCompletion$27$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$27$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$27$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_17#1:
- goto inline$BDLGetDebugLevel$709$Entry#1;
-
- inline$BDLGetDebugLevel$709$Entry#1:
- goto inline$BDLGetDebugLevel$709$start#1;
-
- inline$BDLGetDebugLevel$709$start#1:
- goto inline$BDLGetDebugLevel$709$label_3#1;
-
- inline$BDLGetDebugLevel$709$label_3#1:
- havoc inline$BDLGetDebugLevel$709$myNondetVar_0;
- inline$BDLGetDebugLevel$709$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$709$myNondetVar_0;
- goto inline$BDLGetDebugLevel$709$label_1#1;
-
- inline$BDLGetDebugLevel$709$label_1#1:
- goto inline$BDLGetDebugLevel$709$Return#1;
-
- inline$BDLGetDebugLevel$709$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$709$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon31_Then#1, inline$BDLDevicePowerIoCompletion$27$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_20_true#1, inline$BDLDevicePowerIoCompletion$27$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_24#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_25#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_26#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$27$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_21#1:
- goto inline$BDLGetDebugLevel$710$Entry#1;
-
- inline$BDLGetDebugLevel$710$Entry#1:
- goto inline$BDLGetDebugLevel$710$start#1;
-
- inline$BDLGetDebugLevel$710$start#1:
- goto inline$BDLGetDebugLevel$710$label_3#1;
-
- inline$BDLGetDebugLevel$710$label_3#1:
- havoc inline$BDLGetDebugLevel$710$myNondetVar_0;
- inline$BDLGetDebugLevel$710$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$710$myNondetVar_0;
- goto inline$BDLGetDebugLevel$710$label_1#1;
-
- inline$BDLGetDebugLevel$710$label_1#1:
- goto inline$BDLGetDebugLevel$710$Return#1;
-
- inline$BDLGetDebugLevel$710$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$710$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon32_Then#1, inline$BDLDevicePowerIoCompletion$27$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_30_true#1, inline$BDLDevicePowerIoCompletion$27$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_34#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_35#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_36#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$27$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_31#1:
- goto inline$BDLGetDebugLevel$711$Entry#1;
-
- inline$BDLGetDebugLevel$711$Entry#1:
- goto inline$BDLGetDebugLevel$711$start#1;
-
- inline$BDLGetDebugLevel$711$start#1:
- goto inline$BDLGetDebugLevel$711$label_3#1;
-
- inline$BDLGetDebugLevel$711$label_3#1:
- havoc inline$BDLGetDebugLevel$711$myNondetVar_0;
- inline$BDLGetDebugLevel$711$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$711$myNondetVar_0;
- goto inline$BDLGetDebugLevel$711$label_1#1;
-
- inline$BDLGetDebugLevel$711$label_1#1:
- goto inline$BDLGetDebugLevel$711$Return#1;
-
- inline$BDLGetDebugLevel$711$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$711$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon33_Then#1, inline$BDLDevicePowerIoCompletion$27$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_40_true#1, inline$BDLDevicePowerIoCompletion$27$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_41_true#1, inline$BDLDevicePowerIoCompletion$27$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$27$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$27$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_44_true#1, inline$BDLDevicePowerIoCompletion$27$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$27$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_45_true#1, inline$BDLDevicePowerIoCompletion$27$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$27$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$27$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$27$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$27$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$27$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$27$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_54#1:
- inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$27$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_55_true#1, inline$BDLDevicePowerIoCompletion$27$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_56#1:
- call inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$27$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$27$anon34_Then#1, inline$BDLDevicePowerIoCompletion$27$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_59#1:
- goto inline$BDLGetDebugLevel$712$Entry#1;
-
- inline$BDLGetDebugLevel$712$Entry#1:
- goto inline$BDLGetDebugLevel$712$start#1;
-
- inline$BDLGetDebugLevel$712$start#1:
- goto inline$BDLGetDebugLevel$712$label_3#1;
-
- inline$BDLGetDebugLevel$712$label_3#1:
- havoc inline$BDLGetDebugLevel$712$myNondetVar_0;
- inline$BDLGetDebugLevel$712$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$712$myNondetVar_0;
- goto inline$BDLGetDebugLevel$712$label_1#1;
-
- inline$BDLGetDebugLevel$712$label_1#1:
- goto inline$BDLGetDebugLevel$712$Return#1;
-
- inline$BDLGetDebugLevel$712$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$712$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon35_Then#1, inline$BDLDevicePowerIoCompletion$27$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_62_true#1, inline$BDLDevicePowerIoCompletion$27$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_66#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_67#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_68#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$27$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_63#1:
- goto inline$BDLGetDebugLevel$713$Entry#1;
-
- inline$BDLGetDebugLevel$713$Entry#1:
- goto inline$BDLGetDebugLevel$713$start#1;
-
- inline$BDLGetDebugLevel$713$start#1:
- goto inline$BDLGetDebugLevel$713$label_3#1;
-
- inline$BDLGetDebugLevel$713$label_3#1:
- havoc inline$BDLGetDebugLevel$713$myNondetVar_0;
- inline$BDLGetDebugLevel$713$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$713$myNondetVar_0;
- goto inline$BDLGetDebugLevel$713$label_1#1;
-
- inline$BDLGetDebugLevel$713$label_1#1:
- goto inline$BDLGetDebugLevel$713$Return#1;
-
- inline$BDLGetDebugLevel$713$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$713$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon36_Then#1, inline$BDLDevicePowerIoCompletion$27$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_72_true#1, inline$BDLDevicePowerIoCompletion$27$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_76#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_77#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_78#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$27$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_73#1:
- goto inline$BDLGetDebugLevel$714$Entry#1;
-
- inline$BDLGetDebugLevel$714$Entry#1:
- goto inline$BDLGetDebugLevel$714$start#1;
-
- inline$BDLGetDebugLevel$714$start#1:
- goto inline$BDLGetDebugLevel$714$label_3#1;
-
- inline$BDLGetDebugLevel$714$label_3#1:
- havoc inline$BDLGetDebugLevel$714$myNondetVar_0;
- inline$BDLGetDebugLevel$714$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$714$myNondetVar_0;
- goto inline$BDLGetDebugLevel$714$label_1#1;
-
- inline$BDLGetDebugLevel$714$label_1#1:
- goto inline$BDLGetDebugLevel$714$Return#1;
-
- inline$BDLGetDebugLevel$714$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$714$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon37_Then#1, inline$BDLDevicePowerIoCompletion$27$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_82_true#1, inline$BDLDevicePowerIoCompletion$27$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$27$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$27$anon38_Then#1, inline$BDLDevicePowerIoCompletion$27$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$27$anon39_Then#1, inline$BDLDevicePowerIoCompletion$27$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_92#1:
- goto inline$storm_IoCompleteRequest$55$Entry#1;
-
- inline$storm_IoCompleteRequest$55$Entry#1:
- inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$55$start#1;
-
- inline$storm_IoCompleteRequest$55$start#1:
- inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$55$label_3#1;
-
- inline$storm_IoCompleteRequest$55$label_3#1:
- call inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$55$label_6#1;
-
- inline$storm_IoCompleteRequest$55$label_6#1:
- goto inline$storm_IoCompleteRequest$55$label_6_true#1, inline$storm_IoCompleteRequest$55$label_6_false#1;
-
- inline$storm_IoCompleteRequest$55$label_6_false#1:
- assume inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$55$label_7#1;
-
- inline$storm_IoCompleteRequest$55$label_6_true#1:
- assume inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$55$label_8#1;
-
- inline$storm_IoCompleteRequest$55$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$55$anon3_Then#1, inline$storm_IoCompleteRequest$55$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$55$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$55$anon1#1;
-
- inline$storm_IoCompleteRequest$55$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$55$label_9#1;
-
- inline$storm_IoCompleteRequest$55$label_9#1:
- goto inline$storm_IoCompleteRequest$55$label_9_true#1, inline$storm_IoCompleteRequest$55$label_9_false#1;
-
- inline$storm_IoCompleteRequest$55$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$55$label_10#1;
-
- inline$storm_IoCompleteRequest$55$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$55$label_1#1;
-
- inline$storm_IoCompleteRequest$55$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$55$label_7#1;
-
- inline$storm_IoCompleteRequest$55$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$55$label_1#1;
-
- inline$storm_IoCompleteRequest$55$label_1#1:
- goto inline$storm_IoCompleteRequest$55$Return#1;
-
- inline$storm_IoCompleteRequest$55$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$55$Return#1;
-
- inline$storm_IoCompleteRequest$55$Return#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon40_Then#1, inline$BDLDevicePowerIoCompletion$27$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$27$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$27$anon41_Then#1, inline$BDLDevicePowerIoCompletion$27$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_98#1:
- goto inline$BDLGetDebugLevel$715$Entry#1;
-
- inline$BDLGetDebugLevel$715$Entry#1:
- goto inline$BDLGetDebugLevel$715$start#1;
-
- inline$BDLGetDebugLevel$715$start#1:
- goto inline$BDLGetDebugLevel$715$label_3#1;
-
- inline$BDLGetDebugLevel$715$label_3#1:
- havoc inline$BDLGetDebugLevel$715$myNondetVar_0;
- inline$BDLGetDebugLevel$715$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$715$myNondetVar_0;
- goto inline$BDLGetDebugLevel$715$label_1#1;
-
- inline$BDLGetDebugLevel$715$label_1#1:
- goto inline$BDLGetDebugLevel$715$Return#1;
-
- inline$BDLGetDebugLevel$715$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$715$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon42_Then#1, inline$BDLDevicePowerIoCompletion$27$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_101_true#1, inline$BDLDevicePowerIoCompletion$27$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_105#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_106#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_107#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$27$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_102#1:
- goto inline$BDLGetDebugLevel$716$Entry#1;
-
- inline$BDLGetDebugLevel$716$Entry#1:
- goto inline$BDLGetDebugLevel$716$start#1;
-
- inline$BDLGetDebugLevel$716$start#1:
- goto inline$BDLGetDebugLevel$716$label_3#1;
-
- inline$BDLGetDebugLevel$716$label_3#1:
- havoc inline$BDLGetDebugLevel$716$myNondetVar_0;
- inline$BDLGetDebugLevel$716$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$716$myNondetVar_0;
- goto inline$BDLGetDebugLevel$716$label_1#1;
-
- inline$BDLGetDebugLevel$716$label_1#1:
- goto inline$BDLGetDebugLevel$716$Return#1;
-
- inline$BDLGetDebugLevel$716$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$716$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon43_Then#1, inline$BDLDevicePowerIoCompletion$27$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_111_true#1, inline$BDLDevicePowerIoCompletion$27$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_115#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_116#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_117#1:
- call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$27$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$27$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_112#1:
- goto inline$BDLGetDebugLevel$717$Entry#1;
-
- inline$BDLGetDebugLevel$717$Entry#1:
- goto inline$BDLGetDebugLevel$717$start#1;
-
- inline$BDLGetDebugLevel$717$start#1:
- goto inline$BDLGetDebugLevel$717$label_3#1;
-
- inline$BDLGetDebugLevel$717$label_3#1:
- havoc inline$BDLGetDebugLevel$717$myNondetVar_0;
- inline$BDLGetDebugLevel$717$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$717$myNondetVar_0;
- goto inline$BDLGetDebugLevel$717$label_1#1;
-
- inline$BDLGetDebugLevel$717$label_1#1:
- goto inline$BDLGetDebugLevel$717$Return#1;
-
- inline$BDLGetDebugLevel$717$Return#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$717$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$27$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$27$anon44_Then#1, inline$BDLDevicePowerIoCompletion$27$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_121_true#1, inline$BDLDevicePowerIoCompletion$27$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$27$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$27$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_122#1:
- inline$BDLDevicePowerIoCompletion$27$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$27$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$27$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$27$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$27$Return#1;
-
- inline$BDLDevicePowerIoCompletion$27$Return#1:
- inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$27$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$27$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$27$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$27$anon13_Then#1, inline$CallCompletionRoutine$27$anon13_Else#1;
-
- inline$CallCompletionRoutine$27$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$27$anon7#1;
-
- inline$CallCompletionRoutine$27$anon7#1:
- goto inline$CallCompletionRoutine$27$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$27$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$27$Return#1;
-
- inline$CallCompletionRoutine$27$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$27$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$27$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$27$Entry#1:
- inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$27$start#1;
-
- inline$BDLCallDriverCompletionRoutine$27$start#1:
- inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$27$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$27$label_3_true#1, inline$BDLCallDriverCompletionRoutine$27$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$27$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$27$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$27$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$27$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_6#1:
- goto inline$storm_KeSetEvent$31$Entry#1;
-
- inline$storm_KeSetEvent$31$Entry#1:
- inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$31$start#1;
-
- inline$storm_KeSetEvent$31$start#1:
- inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$31$label_3#1;
-
- inline$storm_KeSetEvent$31$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$31$label_1#1;
-
- inline$storm_KeSetEvent$31$label_1#1:
- goto inline$storm_KeSetEvent$31$Return#1;
-
- inline$storm_KeSetEvent$31$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$27$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$27$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$27$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$27$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$27$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$27$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$27$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_9#1:
- inline$BDLCallDriverCompletionRoutine$27$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$27$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$27$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$27$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$27$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$27$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$27$Return#1:
- inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$27$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$27$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$27$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$27$anon12_Then#1, inline$CallCompletionRoutine$27$anon12_Else#1;
-
- inline$CallCompletionRoutine$27$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$27$anon5#1;
-
- inline$CallCompletionRoutine$27$anon5#1:
- goto inline$CallCompletionRoutine$27$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$27$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$27$label_23#1;
-
- inline$CallCompletionRoutine$27$label_23#1:
- inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$27$label_24#1;
-
- inline$CallCompletionRoutine$27$label_24#1:
- goto inline$CallCompletionRoutine$27$label_24_true#1, inline$CallCompletionRoutine$27$label_24_false#1;
-
- inline$CallCompletionRoutine$27$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$27$label_1#1;
-
- inline$CallCompletionRoutine$27$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$27$label_25#1;
-
- inline$CallCompletionRoutine$27$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$27$label_1#1;
-
- inline$CallCompletionRoutine$27$label_1#1:
- goto inline$CallCompletionRoutine$27$Return#1;
-
- inline$CallCompletionRoutine$27$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$27$Return#1;
-
- inline$CallCompletionRoutine$27$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$27$Return#1;
-
- inline$CallCompletionRoutine$27$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$27$Return#1;
-
- inline$CallCompletionRoutine$27$Return#1:
- goto inline$storm_IoCallDriver$13$label_39$1#1;
-
- inline$storm_IoCallDriver$13$label_39$1#1:
- goto inline$storm_IoCallDriver$13$anon15_Then#1, inline$storm_IoCallDriver$13$anon15_Else#1;
-
- inline$storm_IoCallDriver$13$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$13$anon10#1;
-
- inline$storm_IoCallDriver$13$anon10#1:
- goto inline$storm_IoCallDriver$13$label_36#1;
-
- inline$storm_IoCallDriver$13$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$13$Return#1;
-
- inline$storm_IoCallDriver$13$label_27_case_0#1:
- assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$13$label_28#1;
-
- inline$storm_IoCallDriver$13$label_28#1:
- inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$13$label_42#1;
-
- inline$storm_IoCallDriver$13$label_42#1:
- goto inline$storm_IoCallDriver$13$label_43#1;
-
- inline$storm_IoCallDriver$13$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$13$label_36#1;
-
- inline$storm_IoCallDriver$13$label_36#1:
- inline$storm_IoCallDriver$13$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$13$label_1#1;
-
- inline$storm_IoCallDriver$13$label_1#1:
- goto inline$storm_IoCallDriver$13$Return#1;
-
- inline$storm_IoCallDriver$13$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$13$Return#1;
-
- inline$storm_IoCallDriver$13$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$13$Return#1;
-
- inline$storm_IoCallDriver$13$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$13$Return#1;
-
- inline$storm_IoCallDriver$13$Return#1:
- inline$BDLHandleRemove$1$$result.storm_IoCallDriver$2453.25$39$ := inline$storm_IoCallDriver$13$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLHandleRemove$1$label_109$1#1;
-
- inline$BDLHandleRemove$1$label_109$1#1:
- goto inline$BDLHandleRemove$1$anon56_Then#1, inline$BDLHandleRemove$1$anon56_Else#1;
-
- inline$BDLHandleRemove$1$anon56_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon29#1;
-
- inline$BDLHandleRemove$1$anon29#1:
- goto inline$BDLHandleRemove$1$label_112#1;
-
- inline$BDLHandleRemove$1$label_112#1:
- inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$result.storm_IoCallDriver$2453.25$39$;
- goto inline$BDLHandleRemove$1$label_113#1;
-
- inline$BDLHandleRemove$1$label_113#1:
- goto inline$BDLHandleRemove$1$label_113_true#1, inline$BDLHandleRemove$1$label_113_false#1;
-
- inline$BDLHandleRemove$1$label_113_false#1:
- assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 == 0;
- goto inline$BDLHandleRemove$1$label_114#1;
-
- inline$BDLHandleRemove$1$label_113_true#1:
- assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 != 0;
- goto inline$BDLHandleRemove$1$label_117#1;
-
- inline$BDLHandleRemove$1$label_117#1:
- goto inline$BDLGetDebugLevel$731$Entry#1;
-
- inline$BDLGetDebugLevel$731$Entry#1:
- goto inline$BDLGetDebugLevel$731$start#1;
-
- inline$BDLGetDebugLevel$731$start#1:
- goto inline$BDLGetDebugLevel$731$label_3#1;
-
- inline$BDLGetDebugLevel$731$label_3#1:
- havoc inline$BDLGetDebugLevel$731$myNondetVar_0;
- inline$BDLGetDebugLevel$731$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$731$myNondetVar_0;
- goto inline$BDLGetDebugLevel$731$label_1#1;
-
- inline$BDLGetDebugLevel$731$label_1#1:
- goto inline$BDLGetDebugLevel$731$Return#1;
-
- inline$BDLGetDebugLevel$731$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$ := inline$BDLGetDebugLevel$731$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_117$1#1;
-
- inline$BDLHandleRemove$1$label_117$1#1:
- goto inline$BDLHandleRemove$1$anon58_Then#1, inline$BDLHandleRemove$1$anon58_Else#1;
-
- inline$BDLHandleRemove$1$anon58_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon33#1;
-
- inline$BDLHandleRemove$1$anon33#1:
- goto inline$BDLHandleRemove$1$label_120#1;
-
- inline$BDLHandleRemove$1$label_120#1:
- goto inline$BDLHandleRemove$1$label_120_true#1, inline$BDLHandleRemove$1$label_120_false#1;
-
- inline$BDLHandleRemove$1$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$) == 0;
- goto inline$BDLHandleRemove$1$label_121#1;
-
- inline$BDLHandleRemove$1$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$) != 0;
- goto inline$BDLHandleRemove$1$label_124#1;
-
- inline$BDLHandleRemove$1$label_124#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_125#1;
-
- inline$BDLHandleRemove$1$label_125#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_126#1;
-
- inline$BDLHandleRemove$1$label_126#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_127#1;
-
- inline$BDLHandleRemove$1$label_127#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$41$;
- goto inline$BDLHandleRemove$1$label_121#1;
-
- inline$BDLHandleRemove$1$label_121#1:
- goto inline$BDLGetDebugLevel$732$Entry#1;
-
- inline$BDLGetDebugLevel$732$Entry#1:
- goto inline$BDLGetDebugLevel$732$start#1;
-
- inline$BDLGetDebugLevel$732$start#1:
- goto inline$BDLGetDebugLevel$732$label_3#1;
-
- inline$BDLGetDebugLevel$732$label_3#1:
- havoc inline$BDLGetDebugLevel$732$myNondetVar_0;
- inline$BDLGetDebugLevel$732$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$732$myNondetVar_0;
- goto inline$BDLGetDebugLevel$732$label_1#1;
-
- inline$BDLGetDebugLevel$732$label_1#1:
- goto inline$BDLGetDebugLevel$732$Return#1;
-
- inline$BDLGetDebugLevel$732$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$ := inline$BDLGetDebugLevel$732$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_121$1#1;
-
- inline$BDLHandleRemove$1$label_121$1#1:
- goto inline$BDLHandleRemove$1$anon59_Then#1, inline$BDLHandleRemove$1$anon59_Else#1;
-
- inline$BDLHandleRemove$1$anon59_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon35#1;
-
- inline$BDLHandleRemove$1$anon35#1:
- goto inline$BDLHandleRemove$1$label_130#1;
-
- inline$BDLHandleRemove$1$label_130#1:
- goto inline$BDLHandleRemove$1$label_130_true#1, inline$BDLHandleRemove$1$label_130_false#1;
-
- inline$BDLHandleRemove$1$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$) == 0;
- goto inline$BDLHandleRemove$1$label_131#1;
-
- inline$BDLHandleRemove$1$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$) != 0;
- goto inline$BDLHandleRemove$1$label_134#1;
-
- inline$BDLHandleRemove$1$label_134#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_135#1;
-
- inline$BDLHandleRemove$1$label_135#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_136#1;
-
- inline$BDLHandleRemove$1$label_136#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_137#1;
-
- inline$BDLHandleRemove$1$label_137#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$46$;
- goto inline$BDLHandleRemove$1$label_131#1;
-
- inline$BDLHandleRemove$1$label_131#1:
- goto inline$BDLGetDebugLevel$733$Entry#1;
-
- inline$BDLGetDebugLevel$733$Entry#1:
- goto inline$BDLGetDebugLevel$733$start#1;
-
- inline$BDLGetDebugLevel$733$start#1:
- goto inline$BDLGetDebugLevel$733$label_3#1;
-
- inline$BDLGetDebugLevel$733$label_3#1:
- havoc inline$BDLGetDebugLevel$733$myNondetVar_0;
- inline$BDLGetDebugLevel$733$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$733$myNondetVar_0;
- goto inline$BDLGetDebugLevel$733$label_1#1;
-
- inline$BDLGetDebugLevel$733$label_1#1:
- goto inline$BDLGetDebugLevel$733$Return#1;
-
- inline$BDLGetDebugLevel$733$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$ := inline$BDLGetDebugLevel$733$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_131$1#1;
-
- inline$BDLHandleRemove$1$label_131$1#1:
- goto inline$BDLHandleRemove$1$anon60_Then#1, inline$BDLHandleRemove$1$anon60_Else#1;
-
- inline$BDLHandleRemove$1$anon60_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon37#1;
-
- inline$BDLHandleRemove$1$anon37#1:
- goto inline$BDLHandleRemove$1$label_140#1;
-
- inline$BDLHandleRemove$1$label_140#1:
- goto inline$BDLHandleRemove$1$label_140_true#1, inline$BDLHandleRemove$1$label_140_false#1;
-
- inline$BDLHandleRemove$1$label_140_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$, 4) == 0;
- goto inline$BDLHandleRemove$1$label_114#1;
-
- inline$BDLHandleRemove$1$label_140_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$, 4) != 0;
- goto inline$BDLHandleRemove$1$label_141#1;
-
- inline$BDLHandleRemove$1$label_141#1:
- goto inline$BDLHandleRemove$1$label_114#1;
-
- inline$BDLHandleRemove$1$label_114#1:
- goto inline$BDLGetDebugLevel$730$Entry#1;
-
- inline$BDLGetDebugLevel$730$Entry#1:
- goto inline$BDLGetDebugLevel$730$start#1;
-
- inline$BDLGetDebugLevel$730$start#1:
- goto inline$BDLGetDebugLevel$730$label_3#1;
-
- inline$BDLGetDebugLevel$730$label_3#1:
- havoc inline$BDLGetDebugLevel$730$myNondetVar_0;
- inline$BDLGetDebugLevel$730$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$730$myNondetVar_0;
- goto inline$BDLGetDebugLevel$730$label_1#1;
-
- inline$BDLGetDebugLevel$730$label_1#1:
- goto inline$BDLGetDebugLevel$730$Return#1;
-
- inline$BDLGetDebugLevel$730$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$ := inline$BDLGetDebugLevel$730$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_114$1#1;
-
- inline$BDLHandleRemove$1$label_114$1#1:
- goto inline$BDLHandleRemove$1$anon57_Then#1, inline$BDLHandleRemove$1$anon57_Else#1;
-
- inline$BDLHandleRemove$1$anon57_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon31#1;
-
- inline$BDLHandleRemove$1$anon31#1:
- goto inline$BDLHandleRemove$1$label_142#1;
-
- inline$BDLHandleRemove$1$label_142#1:
- goto inline$BDLHandleRemove$1$label_142_true#1, inline$BDLHandleRemove$1$label_142_false#1;
-
- inline$BDLHandleRemove$1$label_142_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$) == 0;
- goto inline$BDLHandleRemove$1$label_143#1;
-
- inline$BDLHandleRemove$1$label_142_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$) != 0;
- goto inline$BDLHandleRemove$1$label_146#1;
-
- inline$BDLHandleRemove$1$label_146#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_147#1;
-
- inline$BDLHandleRemove$1$label_147#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_148#1;
-
- inline$BDLHandleRemove$1$label_148#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_149#1;
-
- inline$BDLHandleRemove$1$label_149#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$52$;
- goto inline$BDLHandleRemove$1$label_143#1;
-
- inline$BDLHandleRemove$1$label_143#1:
- goto inline$BDLGetDebugLevel$734$Entry#1;
-
- inline$BDLGetDebugLevel$734$Entry#1:
- goto inline$BDLGetDebugLevel$734$start#1;
-
- inline$BDLGetDebugLevel$734$start#1:
- goto inline$BDLGetDebugLevel$734$label_3#1;
-
- inline$BDLGetDebugLevel$734$label_3#1:
- havoc inline$BDLGetDebugLevel$734$myNondetVar_0;
- inline$BDLGetDebugLevel$734$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$734$myNondetVar_0;
- goto inline$BDLGetDebugLevel$734$label_1#1;
-
- inline$BDLGetDebugLevel$734$label_1#1:
- goto inline$BDLGetDebugLevel$734$Return#1;
-
- inline$BDLGetDebugLevel$734$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$ := inline$BDLGetDebugLevel$734$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_143$1#1;
-
- inline$BDLHandleRemove$1$label_143$1#1:
- goto inline$BDLHandleRemove$1$anon61_Then#1, inline$BDLHandleRemove$1$anon61_Else#1;
-
- inline$BDLHandleRemove$1$anon61_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon39#1;
-
- inline$BDLHandleRemove$1$anon39#1:
- goto inline$BDLHandleRemove$1$label_152#1;
-
- inline$BDLHandleRemove$1$label_152#1:
- goto inline$BDLHandleRemove$1$label_152_true#1, inline$BDLHandleRemove$1$label_152_false#1;
-
- inline$BDLHandleRemove$1$label_152_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$) == 0;
- goto inline$BDLHandleRemove$1$label_153#1;
-
- inline$BDLHandleRemove$1$label_152_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$) != 0;
- goto inline$BDLHandleRemove$1$label_156#1;
-
- inline$BDLHandleRemove$1$label_156#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_157#1;
-
- inline$BDLHandleRemove$1$label_157#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_158#1;
-
- inline$BDLHandleRemove$1$label_158#1:
- call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$1$label_159#1;
-
- inline$BDLHandleRemove$1$label_159#1:
- havoc inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$57$;
- goto inline$BDLHandleRemove$1$label_153#1;
-
- inline$BDLHandleRemove$1$label_153#1:
- goto inline$BDLGetDebugLevel$735$Entry#1;
-
- inline$BDLGetDebugLevel$735$Entry#1:
- goto inline$BDLGetDebugLevel$735$start#1;
-
- inline$BDLGetDebugLevel$735$start#1:
- goto inline$BDLGetDebugLevel$735$label_3#1;
-
- inline$BDLGetDebugLevel$735$label_3#1:
- havoc inline$BDLGetDebugLevel$735$myNondetVar_0;
- inline$BDLGetDebugLevel$735$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$735$myNondetVar_0;
- goto inline$BDLGetDebugLevel$735$label_1#1;
-
- inline$BDLGetDebugLevel$735$label_1#1:
- goto inline$BDLGetDebugLevel$735$Return#1;
-
- inline$BDLGetDebugLevel$735$Return#1:
- inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$ := inline$BDLGetDebugLevel$735$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$1$label_153$1#1;
-
- inline$BDLHandleRemove$1$label_153$1#1:
- goto inline$BDLHandleRemove$1$anon62_Then#1, inline$BDLHandleRemove$1$anon62_Else#1;
-
- inline$BDLHandleRemove$1$anon62_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$1$anon41#1;
-
- inline$BDLHandleRemove$1$anon41#1:
- goto inline$BDLHandleRemove$1$label_162#1;
-
- inline$BDLHandleRemove$1$label_162#1:
- goto inline$BDLHandleRemove$1$label_162_true#1, inline$BDLHandleRemove$1$label_162_false#1;
-
- inline$BDLHandleRemove$1$label_162_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$, 4) == 0;
- goto inline$BDLHandleRemove$1$label_163#1;
-
- inline$BDLHandleRemove$1$label_162_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$, 4) != 0;
- goto inline$BDLHandleRemove$1$label_164#1;
-
- inline$BDLHandleRemove$1$label_164#1:
- goto inline$BDLHandleRemove$1$label_163#1;
-
- inline$BDLHandleRemove$1$label_163#1:
- goto inline$BDLHandleRemove$1$label_1#1;
-
- inline$BDLHandleRemove$1$label_1#1:
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon62_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon61_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon57_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon60_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon59_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon58_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon56_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon52_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon55_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon54_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon53_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon51_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon50_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon49_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon48_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon47_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon46_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon45_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon44_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon43_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$anon42_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$1$Return#1;
-
- inline$BDLHandleRemove$1$Return#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_31$1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_31$1#1:
- goto inline$BDLPnPSurpriseRemoval$0$anon17_Then#1, inline$BDLPnPSurpriseRemoval$0$anon17_Else#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$anon7#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon7#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_34#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_34#1:
- goto inline$BDLGetDebugLevel$736$Entry#1;
-
- inline$BDLGetDebugLevel$736$Entry#1:
- goto inline$BDLGetDebugLevel$736$start#1;
-
- inline$BDLGetDebugLevel$736$start#1:
- goto inline$BDLGetDebugLevel$736$label_3#1;
-
- inline$BDLGetDebugLevel$736$label_3#1:
- havoc inline$BDLGetDebugLevel$736$myNondetVar_0;
- inline$BDLGetDebugLevel$736$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$736$myNondetVar_0;
- goto inline$BDLGetDebugLevel$736$label_1#1;
-
- inline$BDLGetDebugLevel$736$label_1#1:
- goto inline$BDLGetDebugLevel$736$Return#1;
-
- inline$BDLGetDebugLevel$736$Return#1:
- inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$ := inline$BDLGetDebugLevel$736$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPSurpriseRemoval$0$label_34$1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_34$1#1:
- goto inline$BDLPnPSurpriseRemoval$0$anon18_Then#1, inline$BDLPnPSurpriseRemoval$0$anon18_Else#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$anon9#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon9#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_37#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_37#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_37_true#1, inline$BDLPnPSurpriseRemoval$0$label_37_false#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_37_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$) == 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_38#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_37_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$) != 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_41#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_41#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_42#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_42#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_43#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_43#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_44#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_44#1:
- havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$15$;
- goto inline$BDLPnPSurpriseRemoval$0$label_38#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_38#1:
- goto inline$BDLGetDebugLevel$737$Entry#1;
-
- inline$BDLGetDebugLevel$737$Entry#1:
- goto inline$BDLGetDebugLevel$737$start#1;
-
- inline$BDLGetDebugLevel$737$start#1:
- goto inline$BDLGetDebugLevel$737$label_3#1;
-
- inline$BDLGetDebugLevel$737$label_3#1:
- havoc inline$BDLGetDebugLevel$737$myNondetVar_0;
- inline$BDLGetDebugLevel$737$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$737$myNondetVar_0;
- goto inline$BDLGetDebugLevel$737$label_1#1;
-
- inline$BDLGetDebugLevel$737$label_1#1:
- goto inline$BDLGetDebugLevel$737$Return#1;
-
- inline$BDLGetDebugLevel$737$Return#1:
- inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$ := inline$BDLGetDebugLevel$737$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPSurpriseRemoval$0$label_38$1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_38$1#1:
- goto inline$BDLPnPSurpriseRemoval$0$anon19_Then#1, inline$BDLPnPSurpriseRemoval$0$anon19_Else#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$anon11#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon11#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_47#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_47#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_47_true#1, inline$BDLPnPSurpriseRemoval$0$label_47_false#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_47_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$) == 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_48#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_47_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$) != 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_51#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_51#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_52#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_52#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_53#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_53#1:
- call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPSurpriseRemoval$0$label_54#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_54#1:
- havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$20$;
- goto inline$BDLPnPSurpriseRemoval$0$label_48#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_48#1:
- goto inline$BDLGetDebugLevel$738$Entry#1;
-
- inline$BDLGetDebugLevel$738$Entry#1:
- goto inline$BDLGetDebugLevel$738$start#1;
-
- inline$BDLGetDebugLevel$738$start#1:
- goto inline$BDLGetDebugLevel$738$label_3#1;
-
- inline$BDLGetDebugLevel$738$label_3#1:
- havoc inline$BDLGetDebugLevel$738$myNondetVar_0;
- inline$BDLGetDebugLevel$738$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$738$myNondetVar_0;
- goto inline$BDLGetDebugLevel$738$label_1#1;
-
- inline$BDLGetDebugLevel$738$label_1#1:
- goto inline$BDLGetDebugLevel$738$Return#1;
-
- inline$BDLGetDebugLevel$738$Return#1:
- inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$ := inline$BDLGetDebugLevel$738$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPSurpriseRemoval$0$label_48$1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_48$1#1:
- goto inline$BDLPnPSurpriseRemoval$0$anon20_Then#1, inline$BDLPnPSurpriseRemoval$0$anon20_Else#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$anon13#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon13#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_57#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_57#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_57_true#1, inline$BDLPnPSurpriseRemoval$0$label_57_false#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_57_false#1:
- assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$, 4) == 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_58#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_57_true#1:
- assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$, 4) != 0;
- goto inline$BDLPnPSurpriseRemoval$0$label_59#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_59#1:
- goto inline$BDLPnPSurpriseRemoval$0$label_58#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_58#1:
- inline$BDLPnPSurpriseRemoval$0$$result.BDLPnPSurpriseRemoval$2527.0$1$ := inline$BDLPnPSurpriseRemoval$0$$status$4$2534.16$BDLPnPSurpriseRemoval$12;
- goto inline$BDLPnPSurpriseRemoval$0$label_1#1;
-
- inline$BDLPnPSurpriseRemoval$0$label_1#1:
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon20_Then#1:
- assume raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon19_Then#1:
- assume raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon18_Then#1:
- assume raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon17_Then#1:
- assume raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon16_Then#1:
- assume raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon15_Then#1:
- assume raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$anon14_Then#1:
- assume raiseException;
- goto inline$BDLPnPSurpriseRemoval$0$Return#1;
-
- inline$BDLPnPSurpriseRemoval$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPSurpriseRemoval$973.38$35$ := inline$BDLPnPSurpriseRemoval$0$$result.BDLPnPSurpriseRemoval$2527.0$1$;
- goto inline$BDLPnP$0$label_134$1#1;
-
- inline$BDLPnP$0$label_134$1#1:
- goto inline$BDLPnP$0$anon74_Then#1, inline$BDLPnP$0$anon74_Else#1;
-
- inline$BDLPnP$0$anon74_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon41#1;
-
- inline$BDLPnP$0$anon41#1:
- goto inline$BDLPnP$0$label_137#1;
-
- inline$BDLPnP$0$label_137#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPSurpriseRemoval$973.38$35$;
- goto inline$BDLPnP$0$label_138#1;
-
- inline$BDLPnP$0$label_138#1:
- inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 0;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon74_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_7#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 6;
- goto inline$BDLPnP$0$label_131#1;
-
- inline$BDLPnP$0$label_131#1:
- goto inline$BDLPnPCancelStop$0$Entry#1;
-
- inline$BDLPnPCancelStop$0$Entry#1:
- inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPCancelStop$0$start#1;
-
- inline$BDLPnPCancelStop$0$start#1:
- inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12 := inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12_.1;
- inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12 := inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12_.1;
- goto inline$BDLPnPCancelStop$0$label_3#1;
-
- inline$BDLPnPCancelStop$0$label_3#1:
- goto inline$BDLPnPCancelStop$0$label_4#1;
-
- inline$BDLPnPCancelStop$0$label_4#1:
- inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 := 0;
- goto inline$BDLPnPCancelStop$0$label_5#1;
-
- inline$BDLPnPCancelStop$0$label_5#1:
- goto inline$BDLGetDebugLevel$565$Entry#1;
-
- inline$BDLGetDebugLevel$565$Entry#1:
- goto inline$BDLGetDebugLevel$565$start#1;
-
- inline$BDLGetDebugLevel$565$start#1:
- goto inline$BDLGetDebugLevel$565$label_3#1;
-
- inline$BDLGetDebugLevel$565$label_3#1:
- havoc inline$BDLGetDebugLevel$565$myNondetVar_0;
- inline$BDLGetDebugLevel$565$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$565$myNondetVar_0;
- goto inline$BDLGetDebugLevel$565$label_1#1;
-
- inline$BDLGetDebugLevel$565$label_1#1:
- goto inline$BDLGetDebugLevel$565$Return#1;
-
- inline$BDLGetDebugLevel$565$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$ := inline$BDLGetDebugLevel$565$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_5$1#1;
-
- inline$BDLPnPCancelStop$0$label_5$1#1:
- goto inline$BDLPnPCancelStop$0$anon22_Then#1, inline$BDLPnPCancelStop$0$anon22_Else#1;
-
- inline$BDLPnPCancelStop$0$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon1#1;
-
- inline$BDLPnPCancelStop$0$anon1#1:
- goto inline$BDLPnPCancelStop$0$label_8#1;
-
- inline$BDLPnPCancelStop$0$label_8#1:
- goto inline$BDLPnPCancelStop$0$label_8_true#1, inline$BDLPnPCancelStop$0$label_8_false#1;
-
- inline$BDLPnPCancelStop$0$label_8_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$) == 0;
- goto inline$BDLPnPCancelStop$0$label_9#1;
-
- inline$BDLPnPCancelStop$0$label_8_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$) != 0;
- goto inline$BDLPnPCancelStop$0$label_12#1;
-
- inline$BDLPnPCancelStop$0$label_12#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_13#1;
-
- inline$BDLPnPCancelStop$0$label_13#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_14#1;
-
- inline$BDLPnPCancelStop$0$label_14#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_15#1;
-
- inline$BDLPnPCancelStop$0$label_15#1:
- havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$3$;
- goto inline$BDLPnPCancelStop$0$label_9#1;
-
- inline$BDLPnPCancelStop$0$label_9#1:
- goto inline$BDLGetDebugLevel$566$Entry#1;
-
- inline$BDLGetDebugLevel$566$Entry#1:
- goto inline$BDLGetDebugLevel$566$start#1;
-
- inline$BDLGetDebugLevel$566$start#1:
- goto inline$BDLGetDebugLevel$566$label_3#1;
-
- inline$BDLGetDebugLevel$566$label_3#1:
- havoc inline$BDLGetDebugLevel$566$myNondetVar_0;
- inline$BDLGetDebugLevel$566$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$566$myNondetVar_0;
- goto inline$BDLGetDebugLevel$566$label_1#1;
-
- inline$BDLGetDebugLevel$566$label_1#1:
- goto inline$BDLGetDebugLevel$566$Return#1;
-
- inline$BDLGetDebugLevel$566$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$ := inline$BDLGetDebugLevel$566$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_9$1#1;
-
- inline$BDLPnPCancelStop$0$label_9$1#1:
- goto inline$BDLPnPCancelStop$0$anon23_Then#1, inline$BDLPnPCancelStop$0$anon23_Else#1;
-
- inline$BDLPnPCancelStop$0$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon3#1;
-
- inline$BDLPnPCancelStop$0$anon3#1:
- goto inline$BDLPnPCancelStop$0$label_18#1;
-
- inline$BDLPnPCancelStop$0$label_18#1:
- goto inline$BDLPnPCancelStop$0$label_18_true#1, inline$BDLPnPCancelStop$0$label_18_false#1;
-
- inline$BDLPnPCancelStop$0$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$) == 0;
- goto inline$BDLPnPCancelStop$0$label_19#1;
-
- inline$BDLPnPCancelStop$0$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$) != 0;
- goto inline$BDLPnPCancelStop$0$label_22#1;
-
- inline$BDLPnPCancelStop$0$label_22#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_23#1;
-
- inline$BDLPnPCancelStop$0$label_23#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_24#1;
-
- inline$BDLPnPCancelStop$0$label_24#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_25#1;
-
- inline$BDLPnPCancelStop$0$label_25#1:
- havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$8$;
- goto inline$BDLPnPCancelStop$0$label_19#1;
-
- inline$BDLPnPCancelStop$0$label_19#1:
- goto inline$BDLGetDebugLevel$567$Entry#1;
-
- inline$BDLGetDebugLevel$567$Entry#1:
- goto inline$BDLGetDebugLevel$567$start#1;
-
- inline$BDLGetDebugLevel$567$start#1:
- goto inline$BDLGetDebugLevel$567$label_3#1;
-
- inline$BDLGetDebugLevel$567$label_3#1:
- havoc inline$BDLGetDebugLevel$567$myNondetVar_0;
- inline$BDLGetDebugLevel$567$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$567$myNondetVar_0;
- goto inline$BDLGetDebugLevel$567$label_1#1;
-
- inline$BDLGetDebugLevel$567$label_1#1:
- goto inline$BDLGetDebugLevel$567$Return#1;
-
- inline$BDLGetDebugLevel$567$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$ := inline$BDLGetDebugLevel$567$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_19$1#1;
-
- inline$BDLPnPCancelStop$0$label_19$1#1:
- goto inline$BDLPnPCancelStop$0$anon24_Then#1, inline$BDLPnPCancelStop$0$anon24_Else#1;
-
- inline$BDLPnPCancelStop$0$anon24_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon5#1;
-
- inline$BDLPnPCancelStop$0$anon5#1:
- goto inline$BDLPnPCancelStop$0$label_28#1;
-
- inline$BDLPnPCancelStop$0$label_28#1:
- goto inline$BDLPnPCancelStop$0$label_28_true#1, inline$BDLPnPCancelStop$0$label_28_false#1;
-
- inline$BDLPnPCancelStop$0$label_28_false#1:
- assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$, 4) == 0;
- goto inline$BDLPnPCancelStop$0$label_29#1;
-
- inline$BDLPnPCancelStop$0$label_28_true#1:
- assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$, 4) != 0;
- goto inline$BDLPnPCancelStop$0$label_32#1;
-
- inline$BDLPnPCancelStop$0$label_32#1:
- goto inline$BDLPnPCancelStop$0$label_29#1;
-
- inline$BDLPnPCancelStop$0$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$Entry#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$Entry#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12;
- goto inline$BDLCallLowerLevelDriverAndWait$5$start#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$start#1:
- call inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
- inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_4#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_4#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_6#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_6#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$Entry#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$Entry#1:
- inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$start#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$start#1:
- inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_4#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_4#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_5#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_5#1:
- goto inline$IoGetCurrentIrpStackLocation$112$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$112$Entry#1:
- inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetCurrentIrpStackLocation$112$start#1;
-
- inline$IoGetCurrentIrpStackLocation$112$start#1:
- inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$112$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$112$label_3_true#1, inline$IoGetCurrentIrpStackLocation$112$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$112$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$112$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$112$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$112$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$112$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$112$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$112$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$112$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$112$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$112$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$112$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$112$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$112$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$112$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$112$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$112$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$112$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$112$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$112$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$112$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_5$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_5$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$anon1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_8#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_8#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_9#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_9#1:
- goto inline$IoGetNextIrpStackLocation$11$Entry#1;
-
- inline$IoGetNextIrpStackLocation$11$Entry#1:
- inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetNextIrpStackLocation$11$start#1;
-
- inline$IoGetNextIrpStackLocation$11$start#1:
- inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$11$label_3#1;
-
- inline$IoGetNextIrpStackLocation$11$label_3#1:
- goto inline$IoGetNextIrpStackLocation$11$label_3_true#1, inline$IoGetNextIrpStackLocation$11$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$11$label_3_false#1:
- inline$IoGetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$11$myVar_0);
- goto inline$IoGetNextIrpStackLocation$11$label_4#1;
-
- inline$IoGetNextIrpStackLocation$11$label_4#1:
- call inline$IoGetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$11$label_6#1;
-
- inline$IoGetNextIrpStackLocation$11$label_6#1:
- call inline$IoGetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$11$label_7#1;
-
- inline$IoGetNextIrpStackLocation$11$label_7#1:
- goto inline$IoGetNextIrpStackLocation$11$label_5#1;
-
- inline$IoGetNextIrpStackLocation$11$label_3_true#1:
- inline$IoGetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$11$myVar_0);
- goto inline$IoGetNextIrpStackLocation$11$label_5#1;
-
- inline$IoGetNextIrpStackLocation$11$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$11$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$11$label_1#1;
-
- inline$IoGetNextIrpStackLocation$11$label_1#1:
- goto inline$IoGetNextIrpStackLocation$11$Return#1;
-
- inline$IoGetNextIrpStackLocation$11$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_9$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_9$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$anon3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_12#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_12#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_13#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_13#1:
- havoc inline$IoCopyCurrentIrpStackLocationToNext$5$$result.memcpy$25110.4$3$;
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_16#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_16#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$label_1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_6$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_6$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon16_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_9#1:
- goto inline$storm_KeInitializeEvent$5$Entry#1;
-
- inline$storm_KeInitializeEvent$5$Entry#1:
- inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
- goto inline$storm_KeInitializeEvent$5$start#1;
-
- inline$storm_KeInitializeEvent$5$start#1:
- inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
- inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12_.1;
- goto inline$storm_KeInitializeEvent$5$label_3#1;
-
- inline$storm_KeInitializeEvent$5$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12];
- call contextSwitch();
- goto inline$storm_KeInitializeEvent$5$label_1#1;
-
- inline$storm_KeInitializeEvent$5$label_1#1:
- goto inline$storm_KeInitializeEvent$5$Return#1;
-
- inline$storm_KeInitializeEvent$5$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_9$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_9$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon17_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_12#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$5$Entry#1;
-
- inline$storm_IoSetCompletionRoutine$5$Entry#1:
- inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoSetCompletionRoutine$5$start#1;
-
- inline$storm_IoSetCompletionRoutine$5$start#1:
- inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
- goto inline$storm_IoSetCompletionRoutine$5$label_3#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_3#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_4#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_4#1:
- call inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$ := storm_nondet();
- goto inline$storm_IoSetCompletionRoutine$5$label_7#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_7#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_7_true#1, inline$storm_IoSetCompletionRoutine$5$label_7_false#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_7_false#1:
- assume inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$ == 0;
- goto inline$storm_IoSetCompletionRoutine$5$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_7_true#1:
- assume inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$ != 0;
- goto inline$storm_IoSetCompletionRoutine$5$label_11#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_11#1:
- havoc raiseException;
- goto inline$storm_IoSetCompletionRoutine$5$anon6_Then#1, inline$storm_IoSetCompletionRoutine$5$anon6_Else#1;
-
- inline$storm_IoSetCompletionRoutine$5$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$5$anon3#1;
-
- inline$storm_IoSetCompletionRoutine$5$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
- call contextSwitch();
- goto inline$storm_IoSetCompletionRoutine$5$label_12#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_12_true#1, inline$storm_IoSetCompletionRoutine$5$label_12_false#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_12_false#1:
- assume 0 == 0;
- goto inline$storm_IoSetCompletionRoutine$5$label_13#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_13#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCompletionRoutine$5$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_12_true#1:
- assume 0 != 0;
- goto inline$storm_IoSetCompletionRoutine$5$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_8#1:
- goto inline$IoGetNextIrpStackLocation$12$Entry#1;
-
- inline$IoGetNextIrpStackLocation$12$Entry#1:
- inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
- goto inline$IoGetNextIrpStackLocation$12$start#1;
-
- inline$IoGetNextIrpStackLocation$12$start#1:
- inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$12$label_3#1;
-
- inline$IoGetNextIrpStackLocation$12$label_3#1:
- goto inline$IoGetNextIrpStackLocation$12$label_3_true#1, inline$IoGetNextIrpStackLocation$12$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$12$label_3_false#1:
- inline$IoGetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$12$myVar_0);
- goto inline$IoGetNextIrpStackLocation$12$label_4#1;
-
- inline$IoGetNextIrpStackLocation$12$label_4#1:
- call inline$IoGetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$12$label_6#1;
-
- inline$IoGetNextIrpStackLocation$12$label_6#1:
- call inline$IoGetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$12$label_7#1;
-
- inline$IoGetNextIrpStackLocation$12$label_7#1:
- goto inline$IoGetNextIrpStackLocation$12$label_5#1;
-
- inline$IoGetNextIrpStackLocation$12$label_3_true#1:
- inline$IoGetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$12$myVar_0);
- goto inline$IoGetNextIrpStackLocation$12$label_5#1;
-
- inline$IoGetNextIrpStackLocation$12$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$12$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$12$label_1#1;
-
- inline$IoGetNextIrpStackLocation$12$label_1#1:
- goto inline$IoGetNextIrpStackLocation$12$Return#1;
-
- inline$IoGetNextIrpStackLocation$12$Return#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_8$1#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_8$1#1:
- goto inline$storm_IoSetCompletionRoutine$5$anon5_Then#1, inline$storm_IoSetCompletionRoutine$5$anon5_Else#1;
-
- inline$storm_IoSetCompletionRoutine$5$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$5$anon1#1;
-
- inline$storm_IoSetCompletionRoutine$5$anon1#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_16#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_16#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_17#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_17#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_18#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_18#1:
- goto inline$storm_IoSetCompletionRoutine$5$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$5$label_1#1:
- goto inline$storm_IoSetCompletionRoutine$5$Return#1;
-
- inline$storm_IoSetCompletionRoutine$5$anon5_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$5$Return#1;
-
- inline$storm_IoSetCompletionRoutine$5$anon6_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$5$Return#1;
-
- inline$storm_IoSetCompletionRoutine$5$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_12$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_12$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon18_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_15#1:
- goto inline$IoGetCurrentIrpStackLocation$113$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$113$Entry#1:
- inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoGetCurrentIrpStackLocation$113$start#1;
-
- inline$IoGetCurrentIrpStackLocation$113$start#1:
- inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$113$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$113$label_3_true#1, inline$IoGetCurrentIrpStackLocation$113$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$113$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$113$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$113$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$113$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$113$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$113$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$113$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$113$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$113$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$113$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$113$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$113$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$113$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$113$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$113$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$113$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$113$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$113$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$113$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$113$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_15$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_15$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon19_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon7#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon7#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_18#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_18#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$5$label_18_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_18_false#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_19#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_19#1:
- goto inline$storm_IoCallDriver$11$Entry#1;
-
- inline$storm_IoCallDriver$11$Entry#1:
- inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoCallDriver$11$start#1;
-
- inline$storm_IoCallDriver$11$start#1:
- inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$11$label_3#1;
-
- inline$storm_IoCallDriver$11$label_3#1:
- goto inline$storm_IoCallDriver$11$label_4#1;
-
- inline$storm_IoCallDriver$11$label_4#1:
- goto inline$storm_IoCallDriver$11$label_5#1;
-
- inline$storm_IoCallDriver$11$label_5#1:
- goto inline$storm_IoCallDriver$11$label_6#1;
-
- inline$storm_IoCallDriver$11$label_6#1:
- call inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$11$label_9#1;
-
- inline$storm_IoCallDriver$11$label_9#1:
- goto inline$storm_IoCallDriver$11$label_9_true#1, inline$storm_IoCallDriver$11$label_9_false#1;
-
- inline$storm_IoCallDriver$11$label_9_false#1:
- assume inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$11$label_10#1;
-
- inline$storm_IoCallDriver$11$label_9_true#1:
- assume inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$11$label_13#1;
-
- inline$storm_IoCallDriver$11$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$11$anon12_Then#1, inline$storm_IoCallDriver$11$anon12_Else#1;
-
- inline$storm_IoCallDriver$11$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$11$anon3#1;
-
- inline$storm_IoCallDriver$11$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$11$label_14#1;
-
- inline$storm_IoCallDriver$11$label_14#1:
- goto inline$storm_IoCallDriver$11$label_14_true#1, inline$storm_IoCallDriver$11$label_14_false#1;
-
- inline$storm_IoCallDriver$11$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$11$label_15#1;
-
- inline$storm_IoCallDriver$11$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$11$label_1#1;
-
- inline$storm_IoCallDriver$11$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$11$label_10#1;
-
- inline$storm_IoCallDriver$11$label_10#1:
- goto inline$IoSetNextIrpStackLocation$12$Entry#1;
-
- inline$IoSetNextIrpStackLocation$12$Entry#1:
- inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$12$start#1;
-
- inline$IoSetNextIrpStackLocation$12$start#1:
- inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$12$label_3#1;
-
- inline$IoSetNextIrpStackLocation$12$label_3#1:
- goto inline$IoSetNextIrpStackLocation$12$label_3_true#1, inline$IoSetNextIrpStackLocation$12$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$12$label_3_false#1:
- inline$IoSetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$12$myVar_0);
- goto inline$IoSetNextIrpStackLocation$12$label_4#1;
-
- inline$IoSetNextIrpStackLocation$12$label_4#1:
- call inline$IoSetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$12$label_7#1;
-
- inline$IoSetNextIrpStackLocation$12$label_7#1:
- call inline$IoSetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$12$label_8#1;
-
- inline$IoSetNextIrpStackLocation$12$label_8#1:
- goto inline$IoSetNextIrpStackLocation$12$label_5#1;
-
- inline$IoSetNextIrpStackLocation$12$label_3_true#1:
- inline$IoSetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$12$myVar_0);
- goto inline$IoSetNextIrpStackLocation$12$label_5#1;
-
- inline$IoSetNextIrpStackLocation$12$label_5#1:
- inline$IoSetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$12$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$12$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$12$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$12$label_6#1;
-
- inline$IoSetNextIrpStackLocation$12$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$12$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$12$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$12$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$12$label_1#1;
-
- inline$IoSetNextIrpStackLocation$12$label_1#1:
- goto inline$IoSetNextIrpStackLocation$12$Return#1;
-
- inline$IoSetNextIrpStackLocation$12$Return#1:
- goto inline$storm_IoCallDriver$11$label_10$1#1;
-
- inline$storm_IoCallDriver$11$label_10$1#1:
- goto inline$storm_IoCallDriver$11$anon11_Then#1, inline$storm_IoCallDriver$11$anon11_Else#1;
-
- inline$storm_IoCallDriver$11$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$11$anon1#1;
-
- inline$storm_IoCallDriver$11$anon1#1:
- goto inline$storm_IoCallDriver$11$label_18#1;
-
- inline$storm_IoCallDriver$11$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$114$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$114$Entry#1:
- inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$114$start#1;
-
- inline$IoGetCurrentIrpStackLocation$114$start#1:
- inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$114$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$114$label_3_true#1, inline$IoGetCurrentIrpStackLocation$114$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$114$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$114$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$114$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$114$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$114$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$114$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$114$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$114$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$114$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$114$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$114$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$114$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$114$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$114$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$114$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$114$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$114$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$114$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$114$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$114$Return#1:
- goto inline$storm_IoCallDriver$11$label_18$1#1;
-
- inline$storm_IoCallDriver$11$label_18$1#1:
- goto inline$storm_IoCallDriver$11$anon13_Then#1, inline$storm_IoCallDriver$11$anon13_Else#1;
-
- inline$storm_IoCallDriver$11$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$11$anon6#1;
-
- inline$storm_IoCallDriver$11$anon6#1:
- goto inline$storm_IoCallDriver$11$label_21#1;
-
- inline$storm_IoCallDriver$11$label_21#1:
- goto inline$storm_IoCallDriver$11$label_22#1;
-
- inline$storm_IoCallDriver$11$label_22#1:
- goto inline$storm_IoCallDriver$11$label_23#1;
-
- inline$storm_IoCallDriver$11$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$11$label_24#1;
-
- inline$storm_IoCallDriver$11$label_24#1:
- call inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$11$label_27#1;
-
- inline$storm_IoCallDriver$11$label_27#1:
- goto inline$storm_IoCallDriver$11$label_27_case_0#1, inline$storm_IoCallDriver$11$label_27_case_1#1, inline$storm_IoCallDriver$11$label_27_case_2#1;
-
- inline$storm_IoCallDriver$11$label_27_case_2#1:
- assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$11$label_30#1;
-
- inline$storm_IoCallDriver$11$label_30#1:
- inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$11$label_31#1;
-
- inline$storm_IoCallDriver$11$label_31#1:
- goto inline$storm_IoCallDriver$11$label_32#1;
-
- inline$storm_IoCallDriver$11$label_32#1:
- goto inline$storm_IoCallDriver$11$label_33#1;
-
- inline$storm_IoCallDriver$11$label_33#1:
- goto inline$CallCompletionRoutine$22$Entry#1;
-
- inline$CallCompletionRoutine$22$Entry#1:
- inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$22$start#1;
-
- inline$CallCompletionRoutine$22$start#1:
- inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$22$label_3#1;
-
- inline$CallCompletionRoutine$22$label_3#1:
- goto inline$CallCompletionRoutine$22$label_4#1;
-
- inline$CallCompletionRoutine$22$label_4#1:
- goto inline$CallCompletionRoutine$22$label_5#1;
-
- inline$CallCompletionRoutine$22$label_5#1:
- goto inline$CallCompletionRoutine$22$label_6#1;
-
- inline$CallCompletionRoutine$22$label_6#1:
- goto inline$CallCompletionRoutine$22$label_7#1;
-
- inline$CallCompletionRoutine$22$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$115$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$115$Entry#1:
- inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$115$start#1;
-
- inline$IoGetCurrentIrpStackLocation$115$start#1:
- inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$115$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$115$label_3_true#1, inline$IoGetCurrentIrpStackLocation$115$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$115$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$115$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$115$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$115$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$115$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$115$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$115$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$115$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$115$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$115$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$115$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$115$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$115$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$115$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$115$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$115$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$115$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$115$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$115$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$115$Return#1:
- goto inline$CallCompletionRoutine$22$label_7$1#1;
-
- inline$CallCompletionRoutine$22$label_7$1#1:
- goto inline$CallCompletionRoutine$22$anon10_Then#1, inline$CallCompletionRoutine$22$anon10_Else#1;
-
- inline$CallCompletionRoutine$22$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$22$anon1#1;
-
- inline$CallCompletionRoutine$22$anon1#1:
- goto inline$CallCompletionRoutine$22$label_10#1;
-
- inline$CallCompletionRoutine$22$label_10#1:
- goto inline$CallCompletionRoutine$22$label_11#1;
-
- inline$CallCompletionRoutine$22$label_11#1:
- havoc inline$CallCompletionRoutine$22$myNondetVar_0;
- inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$myNondetVar_0;
- goto inline$CallCompletionRoutine$22$label_12#1;
-
- inline$CallCompletionRoutine$22$label_12#1:
- havoc inline$CallCompletionRoutine$22$myNondetVar_0;
- inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$myNondetVar_0;
- goto inline$CallCompletionRoutine$22$label_13#1;
-
- inline$CallCompletionRoutine$22$label_13#1:
- havoc inline$CallCompletionRoutine$22$myNondetVar_0;
- goto inline$CallCompletionRoutine$22$label_14#1;
-
- inline$CallCompletionRoutine$22$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$116$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$116$Entry#1:
- inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$116$start#1;
-
- inline$IoGetCurrentIrpStackLocation$116$start#1:
- inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$116$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$116$label_3_true#1, inline$IoGetCurrentIrpStackLocation$116$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$116$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$116$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$116$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$116$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$116$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$116$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$116$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$116$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$116$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$116$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$116$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$116$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$116$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$116$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$116$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$116$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$116$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$116$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$116$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$116$Return#1:
- goto inline$CallCompletionRoutine$22$label_14$1#1;
-
- inline$CallCompletionRoutine$22$label_14$1#1:
- goto inline$CallCompletionRoutine$22$anon11_Then#1, inline$CallCompletionRoutine$22$anon11_Else#1;
-
- inline$CallCompletionRoutine$22$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$22$anon3#1;
-
- inline$CallCompletionRoutine$22$anon3#1:
- goto inline$CallCompletionRoutine$22$label_17#1;
-
- inline$CallCompletionRoutine$22$label_17#1:
- goto inline$CallCompletionRoutine$22$label_18#1;
-
- inline$CallCompletionRoutine$22$label_18#1:
- goto inline$CallCompletionRoutine$22$label_18_true#1, inline$CallCompletionRoutine$22$label_18_false#1;
-
- inline$CallCompletionRoutine$22$label_18_false#1:
- assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$22$label_1#1;
-
- inline$CallCompletionRoutine$22$label_18_true#1:
- assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$22$label_19#1;
-
- inline$CallCompletionRoutine$22$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$22$label_20#1;
-
- inline$CallCompletionRoutine$22$label_20#1:
- goto inline$CallCompletionRoutine$22$label_20_icall_1#1, inline$CallCompletionRoutine$22$label_20_icall_2#1, inline$CallCompletionRoutine$22$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$22$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$22$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$22$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$22$Entry#1:
- inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$22$start#1;
-
- inline$BDLSystemPowerIoCompletion$22$start#1:
- call inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$22$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_4#1:
- inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_6#1:
- inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$22$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$22$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$22$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$118$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$118$Entry#1:
- inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$118$start#1;
-
- inline$IoGetCurrentIrpStackLocation$118$start#1:
- inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$118$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$118$label_3_true#1, inline$IoGetCurrentIrpStackLocation$118$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$118$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$118$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$118$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$118$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$118$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$118$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$118$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$118$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$118$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$118$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$118$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$118$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$118$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$118$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$118$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$118$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$118$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$118$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$118$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$118$Return#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon36_Then#1, inline$BDLSystemPowerIoCompletion$22$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_15#1:
- goto inline$BDLGetDebugLevel$577$Entry#1;
-
- inline$BDLGetDebugLevel$577$Entry#1:
- goto inline$BDLGetDebugLevel$577$start#1;
-
- inline$BDLGetDebugLevel$577$start#1:
- goto inline$BDLGetDebugLevel$577$label_3#1;
-
- inline$BDLGetDebugLevel$577$label_3#1:
- havoc inline$BDLGetDebugLevel$577$myNondetVar_0;
- inline$BDLGetDebugLevel$577$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$577$myNondetVar_0;
- goto inline$BDLGetDebugLevel$577$label_1#1;
-
- inline$BDLGetDebugLevel$577$label_1#1:
- goto inline$BDLGetDebugLevel$577$Return#1;
-
- inline$BDLGetDebugLevel$577$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$577$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon37_Then#1, inline$BDLSystemPowerIoCompletion$22$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_18_true#1, inline$BDLSystemPowerIoCompletion$22$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_22#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_23#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_24#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$22$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_19#1:
- goto inline$BDLGetDebugLevel$578$Entry#1;
-
- inline$BDLGetDebugLevel$578$Entry#1:
- goto inline$BDLGetDebugLevel$578$start#1;
-
- inline$BDLGetDebugLevel$578$start#1:
- goto inline$BDLGetDebugLevel$578$label_3#1;
-
- inline$BDLGetDebugLevel$578$label_3#1:
- havoc inline$BDLGetDebugLevel$578$myNondetVar_0;
- inline$BDLGetDebugLevel$578$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$578$myNondetVar_0;
- goto inline$BDLGetDebugLevel$578$label_1#1;
-
- inline$BDLGetDebugLevel$578$label_1#1:
- goto inline$BDLGetDebugLevel$578$Return#1;
-
- inline$BDLGetDebugLevel$578$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$578$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon38_Then#1, inline$BDLSystemPowerIoCompletion$22$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_28_true#1, inline$BDLSystemPowerIoCompletion$22$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_32#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_33#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_34#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$22$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_29#1:
- goto inline$BDLGetDebugLevel$579$Entry#1;
-
- inline$BDLGetDebugLevel$579$Entry#1:
- goto inline$BDLGetDebugLevel$579$start#1;
-
- inline$BDLGetDebugLevel$579$start#1:
- goto inline$BDLGetDebugLevel$579$label_3#1;
-
- inline$BDLGetDebugLevel$579$label_3#1:
- havoc inline$BDLGetDebugLevel$579$myNondetVar_0;
- inline$BDLGetDebugLevel$579$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$579$myNondetVar_0;
- goto inline$BDLGetDebugLevel$579$label_1#1;
-
- inline$BDLGetDebugLevel$579$label_1#1:
- goto inline$BDLGetDebugLevel$579$Return#1;
-
- inline$BDLGetDebugLevel$579$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$579$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon39_Then#1, inline$BDLSystemPowerIoCompletion$22$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_38_true#1, inline$BDLSystemPowerIoCompletion$22$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_39_true#1, inline$BDLSystemPowerIoCompletion$22$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$22$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$22$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$22$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_106_true#1, inline$BDLSystemPowerIoCompletion$22$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_142#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_143#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$22$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$22$myNondetVar_0, inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$22$anon50_Then#1, inline$BDLSystemPowerIoCompletion$22$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_112#1:
- inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$22$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_113_true#1, inline$BDLSystemPowerIoCompletion$22$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$22$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_117#1:
- goto inline$BDLGetDebugLevel$586$Entry#1;
-
- inline$BDLGetDebugLevel$586$Entry#1:
- goto inline$BDLGetDebugLevel$586$start#1;
-
- inline$BDLGetDebugLevel$586$start#1:
- goto inline$BDLGetDebugLevel$586$label_3#1;
-
- inline$BDLGetDebugLevel$586$label_3#1:
- havoc inline$BDLGetDebugLevel$586$myNondetVar_0;
- inline$BDLGetDebugLevel$586$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$586$myNondetVar_0;
- goto inline$BDLGetDebugLevel$586$label_1#1;
-
- inline$BDLGetDebugLevel$586$label_1#1:
- goto inline$BDLGetDebugLevel$586$Return#1;
-
- inline$BDLGetDebugLevel$586$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$586$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon51_Then#1, inline$BDLSystemPowerIoCompletion$22$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_120_true#1, inline$BDLSystemPowerIoCompletion$22$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_124#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_125#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_126#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$22$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_121#1:
- goto inline$BDLGetDebugLevel$587$Entry#1;
-
- inline$BDLGetDebugLevel$587$Entry#1:
- goto inline$BDLGetDebugLevel$587$start#1;
-
- inline$BDLGetDebugLevel$587$start#1:
- goto inline$BDLGetDebugLevel$587$label_3#1;
-
- inline$BDLGetDebugLevel$587$label_3#1:
- havoc inline$BDLGetDebugLevel$587$myNondetVar_0;
- inline$BDLGetDebugLevel$587$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$587$myNondetVar_0;
- goto inline$BDLGetDebugLevel$587$label_1#1;
-
- inline$BDLGetDebugLevel$587$label_1#1:
- goto inline$BDLGetDebugLevel$587$Return#1;
-
- inline$BDLGetDebugLevel$587$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$587$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon52_Then#1, inline$BDLSystemPowerIoCompletion$22$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_130_true#1, inline$BDLSystemPowerIoCompletion$22$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_134#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_135#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_136#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$22$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_131#1:
- goto inline$BDLGetDebugLevel$588$Entry#1;
-
- inline$BDLGetDebugLevel$588$Entry#1:
- goto inline$BDLGetDebugLevel$588$start#1;
-
- inline$BDLGetDebugLevel$588$start#1:
- goto inline$BDLGetDebugLevel$588$label_3#1;
-
- inline$BDLGetDebugLevel$588$label_3#1:
- havoc inline$BDLGetDebugLevel$588$myNondetVar_0;
- inline$BDLGetDebugLevel$588$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$588$myNondetVar_0;
- goto inline$BDLGetDebugLevel$588$label_1#1;
-
- inline$BDLGetDebugLevel$588$label_1#1:
- goto inline$BDLGetDebugLevel$588$Return#1;
-
- inline$BDLGetDebugLevel$588$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$588$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon53_Then#1, inline$BDLSystemPowerIoCompletion$22$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_140_true#1, inline$BDLSystemPowerIoCompletion$22$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$22$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_115#1:
- inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$22$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$22$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_43#1:
- goto inline$BDLGetDebugLevel$580$Entry#1;
-
- inline$BDLGetDebugLevel$580$Entry#1:
- goto inline$BDLGetDebugLevel$580$start#1;
-
- inline$BDLGetDebugLevel$580$start#1:
- goto inline$BDLGetDebugLevel$580$label_3#1;
-
- inline$BDLGetDebugLevel$580$label_3#1:
- havoc inline$BDLGetDebugLevel$580$myNondetVar_0;
- inline$BDLGetDebugLevel$580$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$580$myNondetVar_0;
- goto inline$BDLGetDebugLevel$580$label_1#1;
-
- inline$BDLGetDebugLevel$580$label_1#1:
- goto inline$BDLGetDebugLevel$580$Return#1;
-
- inline$BDLGetDebugLevel$580$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$580$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon40_Then#1, inline$BDLSystemPowerIoCompletion$22$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_46_true#1, inline$BDLSystemPowerIoCompletion$22$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_50#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_51#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_52#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$22$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_47#1:
- goto inline$BDLGetDebugLevel$581$Entry#1;
-
- inline$BDLGetDebugLevel$581$Entry#1:
- goto inline$BDLGetDebugLevel$581$start#1;
-
- inline$BDLGetDebugLevel$581$start#1:
- goto inline$BDLGetDebugLevel$581$label_3#1;
-
- inline$BDLGetDebugLevel$581$label_3#1:
- havoc inline$BDLGetDebugLevel$581$myNondetVar_0;
- inline$BDLGetDebugLevel$581$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$581$myNondetVar_0;
- goto inline$BDLGetDebugLevel$581$label_1#1;
-
- inline$BDLGetDebugLevel$581$label_1#1:
- goto inline$BDLGetDebugLevel$581$Return#1;
-
- inline$BDLGetDebugLevel$581$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$581$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon41_Then#1, inline$BDLSystemPowerIoCompletion$22$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_56_true#1, inline$BDLSystemPowerIoCompletion$22$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_60#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_61#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_62#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$22$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_57#1:
- goto inline$BDLGetDebugLevel$582$Entry#1;
-
- inline$BDLGetDebugLevel$582$Entry#1:
- goto inline$BDLGetDebugLevel$582$start#1;
-
- inline$BDLGetDebugLevel$582$start#1:
- goto inline$BDLGetDebugLevel$582$label_3#1;
-
- inline$BDLGetDebugLevel$582$label_3#1:
- havoc inline$BDLGetDebugLevel$582$myNondetVar_0;
- inline$BDLGetDebugLevel$582$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$582$myNondetVar_0;
- goto inline$BDLGetDebugLevel$582$label_1#1;
-
- inline$BDLGetDebugLevel$582$label_1#1:
- goto inline$BDLGetDebugLevel$582$Return#1;
-
- inline$BDLGetDebugLevel$582$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$582$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon42_Then#1, inline$BDLSystemPowerIoCompletion$22$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_66_true#1, inline$BDLSystemPowerIoCompletion$22$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$22$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$22$anon43_Then#1, inline$BDLSystemPowerIoCompletion$22$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$22$anon44_Then#1, inline$BDLSystemPowerIoCompletion$22$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_74#1:
- goto inline$storm_IoCompleteRequest$46$Entry#1;
-
- inline$storm_IoCompleteRequest$46$Entry#1:
- inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$46$start#1;
-
- inline$storm_IoCompleteRequest$46$start#1:
- inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$46$label_3#1;
-
- inline$storm_IoCompleteRequest$46$label_3#1:
- call inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$46$label_6#1;
-
- inline$storm_IoCompleteRequest$46$label_6#1:
- goto inline$storm_IoCompleteRequest$46$label_6_true#1, inline$storm_IoCompleteRequest$46$label_6_false#1;
-
- inline$storm_IoCompleteRequest$46$label_6_false#1:
- assume inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$46$label_7#1;
-
- inline$storm_IoCompleteRequest$46$label_6_true#1:
- assume inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$46$label_8#1;
-
- inline$storm_IoCompleteRequest$46$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$46$anon3_Then#1, inline$storm_IoCompleteRequest$46$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$46$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$46$anon1#1;
-
- inline$storm_IoCompleteRequest$46$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$46$label_9#1;
-
- inline$storm_IoCompleteRequest$46$label_9#1:
- goto inline$storm_IoCompleteRequest$46$label_9_true#1, inline$storm_IoCompleteRequest$46$label_9_false#1;
-
- inline$storm_IoCompleteRequest$46$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$46$label_10#1;
-
- inline$storm_IoCompleteRequest$46$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$46$label_1#1;
-
- inline$storm_IoCompleteRequest$46$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$46$label_7#1;
-
- inline$storm_IoCompleteRequest$46$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$46$label_1#1;
-
- inline$storm_IoCompleteRequest$46$label_1#1:
- goto inline$storm_IoCompleteRequest$46$Return#1;
-
- inline$storm_IoCompleteRequest$46$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$46$Return#1;
-
- inline$storm_IoCompleteRequest$46$Return#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon45_Then#1, inline$BDLSystemPowerIoCompletion$22$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$22$anon46_Then#1, inline$BDLSystemPowerIoCompletion$22$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_80#1:
- goto inline$BDLGetDebugLevel$583$Entry#1;
-
- inline$BDLGetDebugLevel$583$Entry#1:
- goto inline$BDLGetDebugLevel$583$start#1;
-
- inline$BDLGetDebugLevel$583$start#1:
- goto inline$BDLGetDebugLevel$583$label_3#1;
-
- inline$BDLGetDebugLevel$583$label_3#1:
- havoc inline$BDLGetDebugLevel$583$myNondetVar_0;
- inline$BDLGetDebugLevel$583$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$583$myNondetVar_0;
- goto inline$BDLGetDebugLevel$583$label_1#1;
-
- inline$BDLGetDebugLevel$583$label_1#1:
- goto inline$BDLGetDebugLevel$583$Return#1;
-
- inline$BDLGetDebugLevel$583$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$583$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon47_Then#1, inline$BDLSystemPowerIoCompletion$22$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_83_true#1, inline$BDLSystemPowerIoCompletion$22$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_87#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_88#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_89#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$22$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_84#1:
- goto inline$BDLGetDebugLevel$584$Entry#1;
-
- inline$BDLGetDebugLevel$584$Entry#1:
- goto inline$BDLGetDebugLevel$584$start#1;
-
- inline$BDLGetDebugLevel$584$start#1:
- goto inline$BDLGetDebugLevel$584$label_3#1;
-
- inline$BDLGetDebugLevel$584$label_3#1:
- havoc inline$BDLGetDebugLevel$584$myNondetVar_0;
- inline$BDLGetDebugLevel$584$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$584$myNondetVar_0;
- goto inline$BDLGetDebugLevel$584$label_1#1;
-
- inline$BDLGetDebugLevel$584$label_1#1:
- goto inline$BDLGetDebugLevel$584$Return#1;
-
- inline$BDLGetDebugLevel$584$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$584$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon48_Then#1, inline$BDLSystemPowerIoCompletion$22$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_93_true#1, inline$BDLSystemPowerIoCompletion$22$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_97#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_98#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_99#1:
- call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$22$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$22$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_94#1:
- goto inline$BDLGetDebugLevel$585$Entry#1;
-
- inline$BDLGetDebugLevel$585$Entry#1:
- goto inline$BDLGetDebugLevel$585$start#1;
-
- inline$BDLGetDebugLevel$585$start#1:
- goto inline$BDLGetDebugLevel$585$label_3#1;
-
- inline$BDLGetDebugLevel$585$label_3#1:
- havoc inline$BDLGetDebugLevel$585$myNondetVar_0;
- inline$BDLGetDebugLevel$585$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$585$myNondetVar_0;
- goto inline$BDLGetDebugLevel$585$label_1#1;
-
- inline$BDLGetDebugLevel$585$label_1#1:
- goto inline$BDLGetDebugLevel$585$Return#1;
-
- inline$BDLGetDebugLevel$585$Return#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$585$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$22$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$22$anon49_Then#1, inline$BDLSystemPowerIoCompletion$22$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_103_true#1, inline$BDLSystemPowerIoCompletion$22$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$22$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$22$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_104#1:
- inline$BDLSystemPowerIoCompletion$22$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$22$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$22$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$22$Return#1;
-
- inline$BDLSystemPowerIoCompletion$22$Return#1:
- inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$22$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$22$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$22$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$22$anon14_Then#1, inline$CallCompletionRoutine$22$anon14_Else#1;
-
- inline$CallCompletionRoutine$22$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$22$anon9#1;
-
- inline$CallCompletionRoutine$22$anon9#1:
- goto inline$CallCompletionRoutine$22$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$22$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$22$Return#1;
-
- inline$CallCompletionRoutine$22$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$22$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$22$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$22$Entry#1:
- inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$22$start#1;
-
- inline$BDLDevicePowerIoCompletion$22$start#1:
- call inline$BDLDevicePowerIoCompletion$22$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$22$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_4#1:
- inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_6#1:
- inline$BDLDevicePowerIoCompletion$22$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$22$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$22$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$22$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$117$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$117$Entry#1:
- inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$117$start#1;
-
- inline$IoGetCurrentIrpStackLocation$117$start#1:
- inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$117$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$117$label_3_true#1, inline$IoGetCurrentIrpStackLocation$117$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$117$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$117$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$117$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$117$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$117$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$117$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$117$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$117$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$117$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$117$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$117$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$117$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$117$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$117$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$117$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$117$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$117$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$117$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$117$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$117$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$117$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$117$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$117$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon30_Then#1, inline$BDLDevicePowerIoCompletion$22$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_13#1:
- inline$BDLDevicePowerIoCompletion$22$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$22$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$22$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_17#1:
- goto inline$BDLGetDebugLevel$568$Entry#1;
-
- inline$BDLGetDebugLevel$568$Entry#1:
- goto inline$BDLGetDebugLevel$568$start#1;
-
- inline$BDLGetDebugLevel$568$start#1:
- goto inline$BDLGetDebugLevel$568$label_3#1;
-
- inline$BDLGetDebugLevel$568$label_3#1:
- havoc inline$BDLGetDebugLevel$568$myNondetVar_0;
- inline$BDLGetDebugLevel$568$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$568$myNondetVar_0;
- goto inline$BDLGetDebugLevel$568$label_1#1;
-
- inline$BDLGetDebugLevel$568$label_1#1:
- goto inline$BDLGetDebugLevel$568$Return#1;
-
- inline$BDLGetDebugLevel$568$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$568$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon31_Then#1, inline$BDLDevicePowerIoCompletion$22$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_20_true#1, inline$BDLDevicePowerIoCompletion$22$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_24#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_25#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_26#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$22$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_21#1:
- goto inline$BDLGetDebugLevel$569$Entry#1;
-
- inline$BDLGetDebugLevel$569$Entry#1:
- goto inline$BDLGetDebugLevel$569$start#1;
-
- inline$BDLGetDebugLevel$569$start#1:
- goto inline$BDLGetDebugLevel$569$label_3#1;
-
- inline$BDLGetDebugLevel$569$label_3#1:
- havoc inline$BDLGetDebugLevel$569$myNondetVar_0;
- inline$BDLGetDebugLevel$569$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$569$myNondetVar_0;
- goto inline$BDLGetDebugLevel$569$label_1#1;
-
- inline$BDLGetDebugLevel$569$label_1#1:
- goto inline$BDLGetDebugLevel$569$Return#1;
-
- inline$BDLGetDebugLevel$569$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$569$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon32_Then#1, inline$BDLDevicePowerIoCompletion$22$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_30_true#1, inline$BDLDevicePowerIoCompletion$22$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_34#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_35#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_36#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$22$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_31#1:
- goto inline$BDLGetDebugLevel$570$Entry#1;
-
- inline$BDLGetDebugLevel$570$Entry#1:
- goto inline$BDLGetDebugLevel$570$start#1;
-
- inline$BDLGetDebugLevel$570$start#1:
- goto inline$BDLGetDebugLevel$570$label_3#1;
-
- inline$BDLGetDebugLevel$570$label_3#1:
- havoc inline$BDLGetDebugLevel$570$myNondetVar_0;
- inline$BDLGetDebugLevel$570$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$570$myNondetVar_0;
- goto inline$BDLGetDebugLevel$570$label_1#1;
-
- inline$BDLGetDebugLevel$570$label_1#1:
- goto inline$BDLGetDebugLevel$570$Return#1;
-
- inline$BDLGetDebugLevel$570$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$570$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon33_Then#1, inline$BDLDevicePowerIoCompletion$22$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_40_true#1, inline$BDLDevicePowerIoCompletion$22$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_41_true#1, inline$BDLDevicePowerIoCompletion$22$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$22$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$22$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_44_true#1, inline$BDLDevicePowerIoCompletion$22$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$22$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_45_true#1, inline$BDLDevicePowerIoCompletion$22$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$22$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$22$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$22$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$22$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$22$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$22$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_54#1:
- inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$22$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_55_true#1, inline$BDLDevicePowerIoCompletion$22$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_56#1:
- call inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$22$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$22$anon34_Then#1, inline$BDLDevicePowerIoCompletion$22$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_59#1:
- goto inline$BDLGetDebugLevel$571$Entry#1;
-
- inline$BDLGetDebugLevel$571$Entry#1:
- goto inline$BDLGetDebugLevel$571$start#1;
-
- inline$BDLGetDebugLevel$571$start#1:
- goto inline$BDLGetDebugLevel$571$label_3#1;
-
- inline$BDLGetDebugLevel$571$label_3#1:
- havoc inline$BDLGetDebugLevel$571$myNondetVar_0;
- inline$BDLGetDebugLevel$571$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$571$myNondetVar_0;
- goto inline$BDLGetDebugLevel$571$label_1#1;
-
- inline$BDLGetDebugLevel$571$label_1#1:
- goto inline$BDLGetDebugLevel$571$Return#1;
-
- inline$BDLGetDebugLevel$571$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$571$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon35_Then#1, inline$BDLDevicePowerIoCompletion$22$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_62_true#1, inline$BDLDevicePowerIoCompletion$22$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_66#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_67#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_68#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$22$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_63#1:
- goto inline$BDLGetDebugLevel$572$Entry#1;
-
- inline$BDLGetDebugLevel$572$Entry#1:
- goto inline$BDLGetDebugLevel$572$start#1;
-
- inline$BDLGetDebugLevel$572$start#1:
- goto inline$BDLGetDebugLevel$572$label_3#1;
-
- inline$BDLGetDebugLevel$572$label_3#1:
- havoc inline$BDLGetDebugLevel$572$myNondetVar_0;
- inline$BDLGetDebugLevel$572$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$572$myNondetVar_0;
- goto inline$BDLGetDebugLevel$572$label_1#1;
-
- inline$BDLGetDebugLevel$572$label_1#1:
- goto inline$BDLGetDebugLevel$572$Return#1;
-
- inline$BDLGetDebugLevel$572$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$572$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon36_Then#1, inline$BDLDevicePowerIoCompletion$22$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_72_true#1, inline$BDLDevicePowerIoCompletion$22$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_76#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_77#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_78#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$22$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_73#1:
- goto inline$BDLGetDebugLevel$573$Entry#1;
-
- inline$BDLGetDebugLevel$573$Entry#1:
- goto inline$BDLGetDebugLevel$573$start#1;
-
- inline$BDLGetDebugLevel$573$start#1:
- goto inline$BDLGetDebugLevel$573$label_3#1;
-
- inline$BDLGetDebugLevel$573$label_3#1:
- havoc inline$BDLGetDebugLevel$573$myNondetVar_0;
- inline$BDLGetDebugLevel$573$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$573$myNondetVar_0;
- goto inline$BDLGetDebugLevel$573$label_1#1;
-
- inline$BDLGetDebugLevel$573$label_1#1:
- goto inline$BDLGetDebugLevel$573$Return#1;
-
- inline$BDLGetDebugLevel$573$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$573$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon37_Then#1, inline$BDLDevicePowerIoCompletion$22$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_82_true#1, inline$BDLDevicePowerIoCompletion$22$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$22$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$22$anon38_Then#1, inline$BDLDevicePowerIoCompletion$22$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$22$anon39_Then#1, inline$BDLDevicePowerIoCompletion$22$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_92#1:
- goto inline$storm_IoCompleteRequest$45$Entry#1;
-
- inline$storm_IoCompleteRequest$45$Entry#1:
- inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$45$start#1;
-
- inline$storm_IoCompleteRequest$45$start#1:
- inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$45$label_3#1;
-
- inline$storm_IoCompleteRequest$45$label_3#1:
- call inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$45$label_6#1;
-
- inline$storm_IoCompleteRequest$45$label_6#1:
- goto inline$storm_IoCompleteRequest$45$label_6_true#1, inline$storm_IoCompleteRequest$45$label_6_false#1;
-
- inline$storm_IoCompleteRequest$45$label_6_false#1:
- assume inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$45$label_7#1;
-
- inline$storm_IoCompleteRequest$45$label_6_true#1:
- assume inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$45$label_8#1;
-
- inline$storm_IoCompleteRequest$45$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$45$anon3_Then#1, inline$storm_IoCompleteRequest$45$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$45$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$45$anon1#1;
-
- inline$storm_IoCompleteRequest$45$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$45$label_9#1;
-
- inline$storm_IoCompleteRequest$45$label_9#1:
- goto inline$storm_IoCompleteRequest$45$label_9_true#1, inline$storm_IoCompleteRequest$45$label_9_false#1;
-
- inline$storm_IoCompleteRequest$45$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$45$label_10#1;
-
- inline$storm_IoCompleteRequest$45$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$45$label_1#1;
-
- inline$storm_IoCompleteRequest$45$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$45$label_7#1;
-
- inline$storm_IoCompleteRequest$45$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$45$label_1#1;
-
- inline$storm_IoCompleteRequest$45$label_1#1:
- goto inline$storm_IoCompleteRequest$45$Return#1;
-
- inline$storm_IoCompleteRequest$45$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$45$Return#1;
-
- inline$storm_IoCompleteRequest$45$Return#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon40_Then#1, inline$BDLDevicePowerIoCompletion$22$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$22$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$22$anon41_Then#1, inline$BDLDevicePowerIoCompletion$22$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_98#1:
- goto inline$BDLGetDebugLevel$574$Entry#1;
-
- inline$BDLGetDebugLevel$574$Entry#1:
- goto inline$BDLGetDebugLevel$574$start#1;
-
- inline$BDLGetDebugLevel$574$start#1:
- goto inline$BDLGetDebugLevel$574$label_3#1;
-
- inline$BDLGetDebugLevel$574$label_3#1:
- havoc inline$BDLGetDebugLevel$574$myNondetVar_0;
- inline$BDLGetDebugLevel$574$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$574$myNondetVar_0;
- goto inline$BDLGetDebugLevel$574$label_1#1;
-
- inline$BDLGetDebugLevel$574$label_1#1:
- goto inline$BDLGetDebugLevel$574$Return#1;
-
- inline$BDLGetDebugLevel$574$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$574$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon42_Then#1, inline$BDLDevicePowerIoCompletion$22$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_101_true#1, inline$BDLDevicePowerIoCompletion$22$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_105#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_106#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_107#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$22$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_102#1:
- goto inline$BDLGetDebugLevel$575$Entry#1;
-
- inline$BDLGetDebugLevel$575$Entry#1:
- goto inline$BDLGetDebugLevel$575$start#1;
-
- inline$BDLGetDebugLevel$575$start#1:
- goto inline$BDLGetDebugLevel$575$label_3#1;
-
- inline$BDLGetDebugLevel$575$label_3#1:
- havoc inline$BDLGetDebugLevel$575$myNondetVar_0;
- inline$BDLGetDebugLevel$575$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$575$myNondetVar_0;
- goto inline$BDLGetDebugLevel$575$label_1#1;
-
- inline$BDLGetDebugLevel$575$label_1#1:
- goto inline$BDLGetDebugLevel$575$Return#1;
-
- inline$BDLGetDebugLevel$575$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$575$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon43_Then#1, inline$BDLDevicePowerIoCompletion$22$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_111_true#1, inline$BDLDevicePowerIoCompletion$22$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_115#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_116#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_117#1:
- call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$22$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$22$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_112#1:
- goto inline$BDLGetDebugLevel$576$Entry#1;
-
- inline$BDLGetDebugLevel$576$Entry#1:
- goto inline$BDLGetDebugLevel$576$start#1;
-
- inline$BDLGetDebugLevel$576$start#1:
- goto inline$BDLGetDebugLevel$576$label_3#1;
-
- inline$BDLGetDebugLevel$576$label_3#1:
- havoc inline$BDLGetDebugLevel$576$myNondetVar_0;
- inline$BDLGetDebugLevel$576$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$576$myNondetVar_0;
- goto inline$BDLGetDebugLevel$576$label_1#1;
-
- inline$BDLGetDebugLevel$576$label_1#1:
- goto inline$BDLGetDebugLevel$576$Return#1;
-
- inline$BDLGetDebugLevel$576$Return#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$576$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$22$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$22$anon44_Then#1, inline$BDLDevicePowerIoCompletion$22$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_121_true#1, inline$BDLDevicePowerIoCompletion$22$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$22$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$22$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_122#1:
- inline$BDLDevicePowerIoCompletion$22$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$22$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$22$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$22$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$22$Return#1;
-
- inline$BDLDevicePowerIoCompletion$22$Return#1:
- inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$22$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$22$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$22$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$22$anon13_Then#1, inline$CallCompletionRoutine$22$anon13_Else#1;
-
- inline$CallCompletionRoutine$22$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$22$anon7#1;
-
- inline$CallCompletionRoutine$22$anon7#1:
- goto inline$CallCompletionRoutine$22$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$22$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$22$Return#1;
-
- inline$CallCompletionRoutine$22$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$22$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$22$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$22$Entry#1:
- inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$22$start#1;
-
- inline$BDLCallDriverCompletionRoutine$22$start#1:
- inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$22$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$22$label_3_true#1, inline$BDLCallDriverCompletionRoutine$22$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$22$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$22$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$22$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$22$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_6#1:
- goto inline$storm_KeSetEvent$24$Entry#1;
-
- inline$storm_KeSetEvent$24$Entry#1:
- inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$24$start#1;
-
- inline$storm_KeSetEvent$24$start#1:
- inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$24$label_3#1;
-
- inline$storm_KeSetEvent$24$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$24$label_1#1;
-
- inline$storm_KeSetEvent$24$label_1#1:
- goto inline$storm_KeSetEvent$24$Return#1;
-
- inline$storm_KeSetEvent$24$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$22$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$22$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$22$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$22$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$22$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$22$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$22$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_9#1:
- inline$BDLCallDriverCompletionRoutine$22$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$22$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$22$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$22$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$22$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$22$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$22$Return#1:
- inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$22$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$22$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$22$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$22$anon12_Then#1, inline$CallCompletionRoutine$22$anon12_Else#1;
-
- inline$CallCompletionRoutine$22$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$22$anon5#1;
-
- inline$CallCompletionRoutine$22$anon5#1:
- goto inline$CallCompletionRoutine$22$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$22$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$22$label_23#1;
-
- inline$CallCompletionRoutine$22$label_23#1:
- inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$22$label_24#1;
-
- inline$CallCompletionRoutine$22$label_24#1:
- goto inline$CallCompletionRoutine$22$label_24_true#1, inline$CallCompletionRoutine$22$label_24_false#1;
-
- inline$CallCompletionRoutine$22$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$22$label_1#1;
-
- inline$CallCompletionRoutine$22$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$22$label_25#1;
-
- inline$CallCompletionRoutine$22$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$22$label_1#1;
-
- inline$CallCompletionRoutine$22$label_1#1:
- goto inline$CallCompletionRoutine$22$Return#1;
-
- inline$CallCompletionRoutine$22$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$22$Return#1;
-
- inline$CallCompletionRoutine$22$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$22$Return#1;
-
- inline$CallCompletionRoutine$22$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$22$Return#1;
-
- inline$CallCompletionRoutine$22$Return#1:
- goto inline$storm_IoCallDriver$11$label_33$1#1;
-
- inline$storm_IoCallDriver$11$label_33$1#1:
- goto inline$storm_IoCallDriver$11$anon14_Then#1, inline$storm_IoCallDriver$11$anon14_Else#1;
-
- inline$storm_IoCallDriver$11$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$11$anon8#1;
-
- inline$storm_IoCallDriver$11$anon8#1:
- goto inline$storm_IoCallDriver$11$label_36#1;
-
- inline$storm_IoCallDriver$11$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$11$Return#1;
-
- inline$storm_IoCallDriver$11$label_27_case_1#1:
- assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$11$label_29#1;
-
- inline$storm_IoCallDriver$11$label_29#1:
- inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$11$label_37#1;
-
- inline$storm_IoCallDriver$11$label_37#1:
- goto inline$storm_IoCallDriver$11$label_38#1;
-
- inline$storm_IoCallDriver$11$label_38#1:
- goto inline$storm_IoCallDriver$11$label_39#1;
-
- inline$storm_IoCallDriver$11$label_39#1:
- goto inline$CallCompletionRoutine$23$Entry#1;
-
- inline$CallCompletionRoutine$23$Entry#1:
- inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$23$start#1;
-
- inline$CallCompletionRoutine$23$start#1:
- inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$23$label_3#1;
-
- inline$CallCompletionRoutine$23$label_3#1:
- goto inline$CallCompletionRoutine$23$label_4#1;
-
- inline$CallCompletionRoutine$23$label_4#1:
- goto inline$CallCompletionRoutine$23$label_5#1;
-
- inline$CallCompletionRoutine$23$label_5#1:
- goto inline$CallCompletionRoutine$23$label_6#1;
-
- inline$CallCompletionRoutine$23$label_6#1:
- goto inline$CallCompletionRoutine$23$label_7#1;
-
- inline$CallCompletionRoutine$23$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$119$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$119$Entry#1:
- inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$119$start#1;
-
- inline$IoGetCurrentIrpStackLocation$119$start#1:
- inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$119$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$119$label_3_true#1, inline$IoGetCurrentIrpStackLocation$119$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$119$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$119$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$119$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$119$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$119$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$119$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$119$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$119$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$119$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$119$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$119$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$119$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$119$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$119$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$119$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$119$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$119$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$119$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$119$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$119$Return#1:
- goto inline$CallCompletionRoutine$23$label_7$1#1;
-
- inline$CallCompletionRoutine$23$label_7$1#1:
- goto inline$CallCompletionRoutine$23$anon10_Then#1, inline$CallCompletionRoutine$23$anon10_Else#1;
-
- inline$CallCompletionRoutine$23$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$23$anon1#1;
-
- inline$CallCompletionRoutine$23$anon1#1:
- goto inline$CallCompletionRoutine$23$label_10#1;
-
- inline$CallCompletionRoutine$23$label_10#1:
- goto inline$CallCompletionRoutine$23$label_11#1;
-
- inline$CallCompletionRoutine$23$label_11#1:
- havoc inline$CallCompletionRoutine$23$myNondetVar_0;
- inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$myNondetVar_0;
- goto inline$CallCompletionRoutine$23$label_12#1;
-
- inline$CallCompletionRoutine$23$label_12#1:
- havoc inline$CallCompletionRoutine$23$myNondetVar_0;
- inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$myNondetVar_0;
- goto inline$CallCompletionRoutine$23$label_13#1;
-
- inline$CallCompletionRoutine$23$label_13#1:
- havoc inline$CallCompletionRoutine$23$myNondetVar_0;
- goto inline$CallCompletionRoutine$23$label_14#1;
-
- inline$CallCompletionRoutine$23$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$120$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$120$Entry#1:
- inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$120$start#1;
-
- inline$IoGetCurrentIrpStackLocation$120$start#1:
- inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$120$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$120$label_3_true#1, inline$IoGetCurrentIrpStackLocation$120$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$120$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$120$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$120$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$120$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$120$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$120$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$120$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$120$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$120$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$120$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$120$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$120$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$120$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$120$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$120$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$120$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$120$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$120$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$120$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$120$Return#1:
- goto inline$CallCompletionRoutine$23$label_14$1#1;
-
- inline$CallCompletionRoutine$23$label_14$1#1:
- goto inline$CallCompletionRoutine$23$anon11_Then#1, inline$CallCompletionRoutine$23$anon11_Else#1;
-
- inline$CallCompletionRoutine$23$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$23$anon3#1;
-
- inline$CallCompletionRoutine$23$anon3#1:
- goto inline$CallCompletionRoutine$23$label_17#1;
-
- inline$CallCompletionRoutine$23$label_17#1:
- goto inline$CallCompletionRoutine$23$label_18#1;
-
- inline$CallCompletionRoutine$23$label_18#1:
- goto inline$CallCompletionRoutine$23$label_18_true#1, inline$CallCompletionRoutine$23$label_18_false#1;
-
- inline$CallCompletionRoutine$23$label_18_false#1:
- assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$23$label_1#1;
-
- inline$CallCompletionRoutine$23$label_18_true#1:
- assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$23$label_19#1;
-
- inline$CallCompletionRoutine$23$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$23$label_20#1;
-
- inline$CallCompletionRoutine$23$label_20#1:
- goto inline$CallCompletionRoutine$23$label_20_icall_1#1, inline$CallCompletionRoutine$23$label_20_icall_2#1, inline$CallCompletionRoutine$23$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$23$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$23$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$23$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$23$Entry#1:
- inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$23$start#1;
-
- inline$BDLSystemPowerIoCompletion$23$start#1:
- call inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$23$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_4#1:
- inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_6#1:
- inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$23$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$23$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$23$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$122$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$122$Entry#1:
- inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$122$start#1;
-
- inline$IoGetCurrentIrpStackLocation$122$start#1:
- inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$122$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$122$label_3_true#1, inline$IoGetCurrentIrpStackLocation$122$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$122$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$122$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$122$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$122$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$122$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$122$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$122$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$122$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$122$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$122$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$122$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$122$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$122$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$122$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$122$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$122$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$122$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$122$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$122$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$122$Return#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon36_Then#1, inline$BDLSystemPowerIoCompletion$23$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_15#1:
- goto inline$BDLGetDebugLevel$598$Entry#1;
-
- inline$BDLGetDebugLevel$598$Entry#1:
- goto inline$BDLGetDebugLevel$598$start#1;
-
- inline$BDLGetDebugLevel$598$start#1:
- goto inline$BDLGetDebugLevel$598$label_3#1;
-
- inline$BDLGetDebugLevel$598$label_3#1:
- havoc inline$BDLGetDebugLevel$598$myNondetVar_0;
- inline$BDLGetDebugLevel$598$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$598$myNondetVar_0;
- goto inline$BDLGetDebugLevel$598$label_1#1;
-
- inline$BDLGetDebugLevel$598$label_1#1:
- goto inline$BDLGetDebugLevel$598$Return#1;
-
- inline$BDLGetDebugLevel$598$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$598$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon37_Then#1, inline$BDLSystemPowerIoCompletion$23$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_18_true#1, inline$BDLSystemPowerIoCompletion$23$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_22#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_23#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_24#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$23$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_19#1:
- goto inline$BDLGetDebugLevel$599$Entry#1;
-
- inline$BDLGetDebugLevel$599$Entry#1:
- goto inline$BDLGetDebugLevel$599$start#1;
-
- inline$BDLGetDebugLevel$599$start#1:
- goto inline$BDLGetDebugLevel$599$label_3#1;
-
- inline$BDLGetDebugLevel$599$label_3#1:
- havoc inline$BDLGetDebugLevel$599$myNondetVar_0;
- inline$BDLGetDebugLevel$599$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$599$myNondetVar_0;
- goto inline$BDLGetDebugLevel$599$label_1#1;
-
- inline$BDLGetDebugLevel$599$label_1#1:
- goto inline$BDLGetDebugLevel$599$Return#1;
-
- inline$BDLGetDebugLevel$599$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$599$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon38_Then#1, inline$BDLSystemPowerIoCompletion$23$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_28_true#1, inline$BDLSystemPowerIoCompletion$23$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_32#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_33#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_34#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$23$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_29#1:
- goto inline$BDLGetDebugLevel$600$Entry#1;
-
- inline$BDLGetDebugLevel$600$Entry#1:
- goto inline$BDLGetDebugLevel$600$start#1;
-
- inline$BDLGetDebugLevel$600$start#1:
- goto inline$BDLGetDebugLevel$600$label_3#1;
-
- inline$BDLGetDebugLevel$600$label_3#1:
- havoc inline$BDLGetDebugLevel$600$myNondetVar_0;
- inline$BDLGetDebugLevel$600$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$600$myNondetVar_0;
- goto inline$BDLGetDebugLevel$600$label_1#1;
-
- inline$BDLGetDebugLevel$600$label_1#1:
- goto inline$BDLGetDebugLevel$600$Return#1;
-
- inline$BDLGetDebugLevel$600$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$600$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon39_Then#1, inline$BDLSystemPowerIoCompletion$23$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_38_true#1, inline$BDLSystemPowerIoCompletion$23$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_39_true#1, inline$BDLSystemPowerIoCompletion$23$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$23$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$23$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$23$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_106_true#1, inline$BDLSystemPowerIoCompletion$23$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_142#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_143#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$23$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$23$myNondetVar_0, inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$23$anon50_Then#1, inline$BDLSystemPowerIoCompletion$23$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_112#1:
- inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$23$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_113_true#1, inline$BDLSystemPowerIoCompletion$23$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$23$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_117#1:
- goto inline$BDLGetDebugLevel$607$Entry#1;
-
- inline$BDLGetDebugLevel$607$Entry#1:
- goto inline$BDLGetDebugLevel$607$start#1;
-
- inline$BDLGetDebugLevel$607$start#1:
- goto inline$BDLGetDebugLevel$607$label_3#1;
-
- inline$BDLGetDebugLevel$607$label_3#1:
- havoc inline$BDLGetDebugLevel$607$myNondetVar_0;
- inline$BDLGetDebugLevel$607$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$607$myNondetVar_0;
- goto inline$BDLGetDebugLevel$607$label_1#1;
-
- inline$BDLGetDebugLevel$607$label_1#1:
- goto inline$BDLGetDebugLevel$607$Return#1;
-
- inline$BDLGetDebugLevel$607$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$607$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon51_Then#1, inline$BDLSystemPowerIoCompletion$23$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_120_true#1, inline$BDLSystemPowerIoCompletion$23$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_124#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_125#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_126#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$23$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_121#1:
- goto inline$BDLGetDebugLevel$608$Entry#1;
-
- inline$BDLGetDebugLevel$608$Entry#1:
- goto inline$BDLGetDebugLevel$608$start#1;
-
- inline$BDLGetDebugLevel$608$start#1:
- goto inline$BDLGetDebugLevel$608$label_3#1;
-
- inline$BDLGetDebugLevel$608$label_3#1:
- havoc inline$BDLGetDebugLevel$608$myNondetVar_0;
- inline$BDLGetDebugLevel$608$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$608$myNondetVar_0;
- goto inline$BDLGetDebugLevel$608$label_1#1;
-
- inline$BDLGetDebugLevel$608$label_1#1:
- goto inline$BDLGetDebugLevel$608$Return#1;
-
- inline$BDLGetDebugLevel$608$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$608$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon52_Then#1, inline$BDLSystemPowerIoCompletion$23$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_130_true#1, inline$BDLSystemPowerIoCompletion$23$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_134#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_135#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_136#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$23$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_131#1:
- goto inline$BDLGetDebugLevel$609$Entry#1;
-
- inline$BDLGetDebugLevel$609$Entry#1:
- goto inline$BDLGetDebugLevel$609$start#1;
-
- inline$BDLGetDebugLevel$609$start#1:
- goto inline$BDLGetDebugLevel$609$label_3#1;
-
- inline$BDLGetDebugLevel$609$label_3#1:
- havoc inline$BDLGetDebugLevel$609$myNondetVar_0;
- inline$BDLGetDebugLevel$609$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$609$myNondetVar_0;
- goto inline$BDLGetDebugLevel$609$label_1#1;
-
- inline$BDLGetDebugLevel$609$label_1#1:
- goto inline$BDLGetDebugLevel$609$Return#1;
-
- inline$BDLGetDebugLevel$609$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$609$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon53_Then#1, inline$BDLSystemPowerIoCompletion$23$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_140_true#1, inline$BDLSystemPowerIoCompletion$23$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$23$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_115#1:
- inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$23$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$23$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_43#1:
- goto inline$BDLGetDebugLevel$601$Entry#1;
-
- inline$BDLGetDebugLevel$601$Entry#1:
- goto inline$BDLGetDebugLevel$601$start#1;
-
- inline$BDLGetDebugLevel$601$start#1:
- goto inline$BDLGetDebugLevel$601$label_3#1;
-
- inline$BDLGetDebugLevel$601$label_3#1:
- havoc inline$BDLGetDebugLevel$601$myNondetVar_0;
- inline$BDLGetDebugLevel$601$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$601$myNondetVar_0;
- goto inline$BDLGetDebugLevel$601$label_1#1;
-
- inline$BDLGetDebugLevel$601$label_1#1:
- goto inline$BDLGetDebugLevel$601$Return#1;
-
- inline$BDLGetDebugLevel$601$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$601$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon40_Then#1, inline$BDLSystemPowerIoCompletion$23$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_46_true#1, inline$BDLSystemPowerIoCompletion$23$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_50#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_51#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_52#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$23$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_47#1:
- goto inline$BDLGetDebugLevel$602$Entry#1;
-
- inline$BDLGetDebugLevel$602$Entry#1:
- goto inline$BDLGetDebugLevel$602$start#1;
-
- inline$BDLGetDebugLevel$602$start#1:
- goto inline$BDLGetDebugLevel$602$label_3#1;
-
- inline$BDLGetDebugLevel$602$label_3#1:
- havoc inline$BDLGetDebugLevel$602$myNondetVar_0;
- inline$BDLGetDebugLevel$602$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$602$myNondetVar_0;
- goto inline$BDLGetDebugLevel$602$label_1#1;
-
- inline$BDLGetDebugLevel$602$label_1#1:
- goto inline$BDLGetDebugLevel$602$Return#1;
-
- inline$BDLGetDebugLevel$602$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$602$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon41_Then#1, inline$BDLSystemPowerIoCompletion$23$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_56_true#1, inline$BDLSystemPowerIoCompletion$23$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_60#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_61#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_62#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$23$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_57#1:
- goto inline$BDLGetDebugLevel$603$Entry#1;
-
- inline$BDLGetDebugLevel$603$Entry#1:
- goto inline$BDLGetDebugLevel$603$start#1;
-
- inline$BDLGetDebugLevel$603$start#1:
- goto inline$BDLGetDebugLevel$603$label_3#1;
-
- inline$BDLGetDebugLevel$603$label_3#1:
- havoc inline$BDLGetDebugLevel$603$myNondetVar_0;
- inline$BDLGetDebugLevel$603$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$603$myNondetVar_0;
- goto inline$BDLGetDebugLevel$603$label_1#1;
-
- inline$BDLGetDebugLevel$603$label_1#1:
- goto inline$BDLGetDebugLevel$603$Return#1;
-
- inline$BDLGetDebugLevel$603$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$603$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon42_Then#1, inline$BDLSystemPowerIoCompletion$23$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_66_true#1, inline$BDLSystemPowerIoCompletion$23$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$23$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$23$anon43_Then#1, inline$BDLSystemPowerIoCompletion$23$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$23$anon44_Then#1, inline$BDLSystemPowerIoCompletion$23$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_74#1:
- goto inline$storm_IoCompleteRequest$48$Entry#1;
-
- inline$storm_IoCompleteRequest$48$Entry#1:
- inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$48$start#1;
-
- inline$storm_IoCompleteRequest$48$start#1:
- inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$48$label_3#1;
-
- inline$storm_IoCompleteRequest$48$label_3#1:
- call inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$48$label_6#1;
-
- inline$storm_IoCompleteRequest$48$label_6#1:
- goto inline$storm_IoCompleteRequest$48$label_6_true#1, inline$storm_IoCompleteRequest$48$label_6_false#1;
-
- inline$storm_IoCompleteRequest$48$label_6_false#1:
- assume inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$48$label_7#1;
-
- inline$storm_IoCompleteRequest$48$label_6_true#1:
- assume inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$48$label_8#1;
-
- inline$storm_IoCompleteRequest$48$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$48$anon3_Then#1, inline$storm_IoCompleteRequest$48$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$48$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$48$anon1#1;
-
- inline$storm_IoCompleteRequest$48$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$48$label_9#1;
-
- inline$storm_IoCompleteRequest$48$label_9#1:
- goto inline$storm_IoCompleteRequest$48$label_9_true#1, inline$storm_IoCompleteRequest$48$label_9_false#1;
-
- inline$storm_IoCompleteRequest$48$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$48$label_10#1;
-
- inline$storm_IoCompleteRequest$48$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$48$label_1#1;
-
- inline$storm_IoCompleteRequest$48$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$48$label_7#1;
-
- inline$storm_IoCompleteRequest$48$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$48$label_1#1;
-
- inline$storm_IoCompleteRequest$48$label_1#1:
- goto inline$storm_IoCompleteRequest$48$Return#1;
-
- inline$storm_IoCompleteRequest$48$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$48$Return#1;
-
- inline$storm_IoCompleteRequest$48$Return#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon45_Then#1, inline$BDLSystemPowerIoCompletion$23$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$23$anon46_Then#1, inline$BDLSystemPowerIoCompletion$23$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_80#1:
- goto inline$BDLGetDebugLevel$604$Entry#1;
-
- inline$BDLGetDebugLevel$604$Entry#1:
- goto inline$BDLGetDebugLevel$604$start#1;
-
- inline$BDLGetDebugLevel$604$start#1:
- goto inline$BDLGetDebugLevel$604$label_3#1;
-
- inline$BDLGetDebugLevel$604$label_3#1:
- havoc inline$BDLGetDebugLevel$604$myNondetVar_0;
- inline$BDLGetDebugLevel$604$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$604$myNondetVar_0;
- goto inline$BDLGetDebugLevel$604$label_1#1;
-
- inline$BDLGetDebugLevel$604$label_1#1:
- goto inline$BDLGetDebugLevel$604$Return#1;
-
- inline$BDLGetDebugLevel$604$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$604$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon47_Then#1, inline$BDLSystemPowerIoCompletion$23$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_83_true#1, inline$BDLSystemPowerIoCompletion$23$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_87#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_88#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_89#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$23$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_84#1:
- goto inline$BDLGetDebugLevel$605$Entry#1;
-
- inline$BDLGetDebugLevel$605$Entry#1:
- goto inline$BDLGetDebugLevel$605$start#1;
-
- inline$BDLGetDebugLevel$605$start#1:
- goto inline$BDLGetDebugLevel$605$label_3#1;
-
- inline$BDLGetDebugLevel$605$label_3#1:
- havoc inline$BDLGetDebugLevel$605$myNondetVar_0;
- inline$BDLGetDebugLevel$605$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$605$myNondetVar_0;
- goto inline$BDLGetDebugLevel$605$label_1#1;
-
- inline$BDLGetDebugLevel$605$label_1#1:
- goto inline$BDLGetDebugLevel$605$Return#1;
-
- inline$BDLGetDebugLevel$605$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$605$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon48_Then#1, inline$BDLSystemPowerIoCompletion$23$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_93_true#1, inline$BDLSystemPowerIoCompletion$23$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_97#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_98#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_99#1:
- call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$23$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$23$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_94#1:
- goto inline$BDLGetDebugLevel$606$Entry#1;
-
- inline$BDLGetDebugLevel$606$Entry#1:
- goto inline$BDLGetDebugLevel$606$start#1;
-
- inline$BDLGetDebugLevel$606$start#1:
- goto inline$BDLGetDebugLevel$606$label_3#1;
-
- inline$BDLGetDebugLevel$606$label_3#1:
- havoc inline$BDLGetDebugLevel$606$myNondetVar_0;
- inline$BDLGetDebugLevel$606$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$606$myNondetVar_0;
- goto inline$BDLGetDebugLevel$606$label_1#1;
-
- inline$BDLGetDebugLevel$606$label_1#1:
- goto inline$BDLGetDebugLevel$606$Return#1;
-
- inline$BDLGetDebugLevel$606$Return#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$606$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$23$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$23$anon49_Then#1, inline$BDLSystemPowerIoCompletion$23$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_103_true#1, inline$BDLSystemPowerIoCompletion$23$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$23$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$23$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_104#1:
- inline$BDLSystemPowerIoCompletion$23$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$23$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$23$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$23$Return#1;
-
- inline$BDLSystemPowerIoCompletion$23$Return#1:
- inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$23$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$23$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$23$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$23$anon14_Then#1, inline$CallCompletionRoutine$23$anon14_Else#1;
-
- inline$CallCompletionRoutine$23$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$23$anon9#1;
-
- inline$CallCompletionRoutine$23$anon9#1:
- goto inline$CallCompletionRoutine$23$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$23$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$23$Return#1;
-
- inline$CallCompletionRoutine$23$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$23$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$23$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$23$Entry#1:
- inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$23$start#1;
-
- inline$BDLDevicePowerIoCompletion$23$start#1:
- call inline$BDLDevicePowerIoCompletion$23$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$23$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_4#1:
- inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_6#1:
- inline$BDLDevicePowerIoCompletion$23$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$23$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$23$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$23$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$121$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$121$Entry#1:
- inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$121$start#1;
-
- inline$IoGetCurrentIrpStackLocation$121$start#1:
- inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$121$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$121$label_3_true#1, inline$IoGetCurrentIrpStackLocation$121$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$121$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$121$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$121$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$121$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$121$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$121$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$121$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$121$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$121$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$121$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$121$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$121$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$121$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$121$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$121$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$121$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$121$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$121$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$121$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$121$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$121$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$121$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$121$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon30_Then#1, inline$BDLDevicePowerIoCompletion$23$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_13#1:
- inline$BDLDevicePowerIoCompletion$23$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$23$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$23$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_17#1:
- goto inline$BDLGetDebugLevel$589$Entry#1;
-
- inline$BDLGetDebugLevel$589$Entry#1:
- goto inline$BDLGetDebugLevel$589$start#1;
-
- inline$BDLGetDebugLevel$589$start#1:
- goto inline$BDLGetDebugLevel$589$label_3#1;
-
- inline$BDLGetDebugLevel$589$label_3#1:
- havoc inline$BDLGetDebugLevel$589$myNondetVar_0;
- inline$BDLGetDebugLevel$589$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$589$myNondetVar_0;
- goto inline$BDLGetDebugLevel$589$label_1#1;
-
- inline$BDLGetDebugLevel$589$label_1#1:
- goto inline$BDLGetDebugLevel$589$Return#1;
-
- inline$BDLGetDebugLevel$589$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$589$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon31_Then#1, inline$BDLDevicePowerIoCompletion$23$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_20_true#1, inline$BDLDevicePowerIoCompletion$23$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_24#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_25#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_26#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$23$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_21#1:
- goto inline$BDLGetDebugLevel$590$Entry#1;
-
- inline$BDLGetDebugLevel$590$Entry#1:
- goto inline$BDLGetDebugLevel$590$start#1;
-
- inline$BDLGetDebugLevel$590$start#1:
- goto inline$BDLGetDebugLevel$590$label_3#1;
-
- inline$BDLGetDebugLevel$590$label_3#1:
- havoc inline$BDLGetDebugLevel$590$myNondetVar_0;
- inline$BDLGetDebugLevel$590$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$590$myNondetVar_0;
- goto inline$BDLGetDebugLevel$590$label_1#1;
-
- inline$BDLGetDebugLevel$590$label_1#1:
- goto inline$BDLGetDebugLevel$590$Return#1;
-
- inline$BDLGetDebugLevel$590$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$590$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon32_Then#1, inline$BDLDevicePowerIoCompletion$23$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_30_true#1, inline$BDLDevicePowerIoCompletion$23$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_34#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_35#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_36#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$23$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_31#1:
- goto inline$BDLGetDebugLevel$591$Entry#1;
-
- inline$BDLGetDebugLevel$591$Entry#1:
- goto inline$BDLGetDebugLevel$591$start#1;
-
- inline$BDLGetDebugLevel$591$start#1:
- goto inline$BDLGetDebugLevel$591$label_3#1;
-
- inline$BDLGetDebugLevel$591$label_3#1:
- havoc inline$BDLGetDebugLevel$591$myNondetVar_0;
- inline$BDLGetDebugLevel$591$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$591$myNondetVar_0;
- goto inline$BDLGetDebugLevel$591$label_1#1;
-
- inline$BDLGetDebugLevel$591$label_1#1:
- goto inline$BDLGetDebugLevel$591$Return#1;
-
- inline$BDLGetDebugLevel$591$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$591$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon33_Then#1, inline$BDLDevicePowerIoCompletion$23$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_40_true#1, inline$BDLDevicePowerIoCompletion$23$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_41_true#1, inline$BDLDevicePowerIoCompletion$23$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$23$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$23$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_44_true#1, inline$BDLDevicePowerIoCompletion$23$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$23$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_45_true#1, inline$BDLDevicePowerIoCompletion$23$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$23$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$23$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$23$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$23$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$23$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$23$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_54#1:
- inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$23$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_55_true#1, inline$BDLDevicePowerIoCompletion$23$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_56#1:
- call inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$23$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$23$anon34_Then#1, inline$BDLDevicePowerIoCompletion$23$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_59#1:
- goto inline$BDLGetDebugLevel$592$Entry#1;
-
- inline$BDLGetDebugLevel$592$Entry#1:
- goto inline$BDLGetDebugLevel$592$start#1;
-
- inline$BDLGetDebugLevel$592$start#1:
- goto inline$BDLGetDebugLevel$592$label_3#1;
-
- inline$BDLGetDebugLevel$592$label_3#1:
- havoc inline$BDLGetDebugLevel$592$myNondetVar_0;
- inline$BDLGetDebugLevel$592$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$592$myNondetVar_0;
- goto inline$BDLGetDebugLevel$592$label_1#1;
-
- inline$BDLGetDebugLevel$592$label_1#1:
- goto inline$BDLGetDebugLevel$592$Return#1;
-
- inline$BDLGetDebugLevel$592$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$592$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon35_Then#1, inline$BDLDevicePowerIoCompletion$23$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_62_true#1, inline$BDLDevicePowerIoCompletion$23$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_66#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_67#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_68#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$23$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_63#1:
- goto inline$BDLGetDebugLevel$593$Entry#1;
-
- inline$BDLGetDebugLevel$593$Entry#1:
- goto inline$BDLGetDebugLevel$593$start#1;
-
- inline$BDLGetDebugLevel$593$start#1:
- goto inline$BDLGetDebugLevel$593$label_3#1;
-
- inline$BDLGetDebugLevel$593$label_3#1:
- havoc inline$BDLGetDebugLevel$593$myNondetVar_0;
- inline$BDLGetDebugLevel$593$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$593$myNondetVar_0;
- goto inline$BDLGetDebugLevel$593$label_1#1;
-
- inline$BDLGetDebugLevel$593$label_1#1:
- goto inline$BDLGetDebugLevel$593$Return#1;
-
- inline$BDLGetDebugLevel$593$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$593$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon36_Then#1, inline$BDLDevicePowerIoCompletion$23$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_72_true#1, inline$BDLDevicePowerIoCompletion$23$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_76#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_77#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_78#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$23$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_73#1:
- goto inline$BDLGetDebugLevel$594$Entry#1;
-
- inline$BDLGetDebugLevel$594$Entry#1:
- goto inline$BDLGetDebugLevel$594$start#1;
-
- inline$BDLGetDebugLevel$594$start#1:
- goto inline$BDLGetDebugLevel$594$label_3#1;
-
- inline$BDLGetDebugLevel$594$label_3#1:
- havoc inline$BDLGetDebugLevel$594$myNondetVar_0;
- inline$BDLGetDebugLevel$594$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$594$myNondetVar_0;
- goto inline$BDLGetDebugLevel$594$label_1#1;
-
- inline$BDLGetDebugLevel$594$label_1#1:
- goto inline$BDLGetDebugLevel$594$Return#1;
-
- inline$BDLGetDebugLevel$594$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$594$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon37_Then#1, inline$BDLDevicePowerIoCompletion$23$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_82_true#1, inline$BDLDevicePowerIoCompletion$23$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$23$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$23$anon38_Then#1, inline$BDLDevicePowerIoCompletion$23$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$23$anon39_Then#1, inline$BDLDevicePowerIoCompletion$23$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_92#1:
- goto inline$storm_IoCompleteRequest$47$Entry#1;
-
- inline$storm_IoCompleteRequest$47$Entry#1:
- inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$47$start#1;
-
- inline$storm_IoCompleteRequest$47$start#1:
- inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$47$label_3#1;
-
- inline$storm_IoCompleteRequest$47$label_3#1:
- call inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$47$label_6#1;
-
- inline$storm_IoCompleteRequest$47$label_6#1:
- goto inline$storm_IoCompleteRequest$47$label_6_true#1, inline$storm_IoCompleteRequest$47$label_6_false#1;
-
- inline$storm_IoCompleteRequest$47$label_6_false#1:
- assume inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$47$label_7#1;
-
- inline$storm_IoCompleteRequest$47$label_6_true#1:
- assume inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$47$label_8#1;
-
- inline$storm_IoCompleteRequest$47$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$47$anon3_Then#1, inline$storm_IoCompleteRequest$47$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$47$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$47$anon1#1;
-
- inline$storm_IoCompleteRequest$47$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$47$label_9#1;
-
- inline$storm_IoCompleteRequest$47$label_9#1:
- goto inline$storm_IoCompleteRequest$47$label_9_true#1, inline$storm_IoCompleteRequest$47$label_9_false#1;
-
- inline$storm_IoCompleteRequest$47$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$47$label_10#1;
-
- inline$storm_IoCompleteRequest$47$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$47$label_1#1;
-
- inline$storm_IoCompleteRequest$47$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$47$label_7#1;
-
- inline$storm_IoCompleteRequest$47$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$47$label_1#1;
-
- inline$storm_IoCompleteRequest$47$label_1#1:
- goto inline$storm_IoCompleteRequest$47$Return#1;
-
- inline$storm_IoCompleteRequest$47$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$47$Return#1;
-
- inline$storm_IoCompleteRequest$47$Return#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon40_Then#1, inline$BDLDevicePowerIoCompletion$23$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$23$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$23$anon41_Then#1, inline$BDLDevicePowerIoCompletion$23$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_98#1:
- goto inline$BDLGetDebugLevel$595$Entry#1;
-
- inline$BDLGetDebugLevel$595$Entry#1:
- goto inline$BDLGetDebugLevel$595$start#1;
-
- inline$BDLGetDebugLevel$595$start#1:
- goto inline$BDLGetDebugLevel$595$label_3#1;
-
- inline$BDLGetDebugLevel$595$label_3#1:
- havoc inline$BDLGetDebugLevel$595$myNondetVar_0;
- inline$BDLGetDebugLevel$595$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$595$myNondetVar_0;
- goto inline$BDLGetDebugLevel$595$label_1#1;
-
- inline$BDLGetDebugLevel$595$label_1#1:
- goto inline$BDLGetDebugLevel$595$Return#1;
-
- inline$BDLGetDebugLevel$595$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$595$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon42_Then#1, inline$BDLDevicePowerIoCompletion$23$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_101_true#1, inline$BDLDevicePowerIoCompletion$23$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_105#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_106#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_107#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$23$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_102#1:
- goto inline$BDLGetDebugLevel$596$Entry#1;
-
- inline$BDLGetDebugLevel$596$Entry#1:
- goto inline$BDLGetDebugLevel$596$start#1;
-
- inline$BDLGetDebugLevel$596$start#1:
- goto inline$BDLGetDebugLevel$596$label_3#1;
-
- inline$BDLGetDebugLevel$596$label_3#1:
- havoc inline$BDLGetDebugLevel$596$myNondetVar_0;
- inline$BDLGetDebugLevel$596$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$596$myNondetVar_0;
- goto inline$BDLGetDebugLevel$596$label_1#1;
-
- inline$BDLGetDebugLevel$596$label_1#1:
- goto inline$BDLGetDebugLevel$596$Return#1;
-
- inline$BDLGetDebugLevel$596$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$596$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon43_Then#1, inline$BDLDevicePowerIoCompletion$23$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_111_true#1, inline$BDLDevicePowerIoCompletion$23$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_115#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_116#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_117#1:
- call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$23$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$23$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_112#1:
- goto inline$BDLGetDebugLevel$597$Entry#1;
-
- inline$BDLGetDebugLevel$597$Entry#1:
- goto inline$BDLGetDebugLevel$597$start#1;
-
- inline$BDLGetDebugLevel$597$start#1:
- goto inline$BDLGetDebugLevel$597$label_3#1;
-
- inline$BDLGetDebugLevel$597$label_3#1:
- havoc inline$BDLGetDebugLevel$597$myNondetVar_0;
- inline$BDLGetDebugLevel$597$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$597$myNondetVar_0;
- goto inline$BDLGetDebugLevel$597$label_1#1;
-
- inline$BDLGetDebugLevel$597$label_1#1:
- goto inline$BDLGetDebugLevel$597$Return#1;
-
- inline$BDLGetDebugLevel$597$Return#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$597$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$23$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$23$anon44_Then#1, inline$BDLDevicePowerIoCompletion$23$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_121_true#1, inline$BDLDevicePowerIoCompletion$23$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$23$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$23$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_122#1:
- inline$BDLDevicePowerIoCompletion$23$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$23$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$23$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$23$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$23$Return#1;
-
- inline$BDLDevicePowerIoCompletion$23$Return#1:
- inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$23$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$23$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$23$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$23$anon13_Then#1, inline$CallCompletionRoutine$23$anon13_Else#1;
-
- inline$CallCompletionRoutine$23$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$23$anon7#1;
-
- inline$CallCompletionRoutine$23$anon7#1:
- goto inline$CallCompletionRoutine$23$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$23$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$23$Return#1;
-
- inline$CallCompletionRoutine$23$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$23$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$23$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$23$Entry#1:
- inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$23$start#1;
-
- inline$BDLCallDriverCompletionRoutine$23$start#1:
- inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$23$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$23$label_3_true#1, inline$BDLCallDriverCompletionRoutine$23$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$23$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$23$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$23$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$23$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_6#1:
- goto inline$storm_KeSetEvent$25$Entry#1;
-
- inline$storm_KeSetEvent$25$Entry#1:
- inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$25$start#1;
-
- inline$storm_KeSetEvent$25$start#1:
- inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$25$label_3#1;
-
- inline$storm_KeSetEvent$25$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$25$label_1#1;
-
- inline$storm_KeSetEvent$25$label_1#1:
- goto inline$storm_KeSetEvent$25$Return#1;
-
- inline$storm_KeSetEvent$25$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$23$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$23$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$23$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$23$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$23$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$23$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$23$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_9#1:
- inline$BDLCallDriverCompletionRoutine$23$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$23$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$23$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$23$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$23$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$23$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$23$Return#1:
- inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$23$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$23$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$23$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$23$anon12_Then#1, inline$CallCompletionRoutine$23$anon12_Else#1;
-
- inline$CallCompletionRoutine$23$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$23$anon5#1;
-
- inline$CallCompletionRoutine$23$anon5#1:
- goto inline$CallCompletionRoutine$23$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$23$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$23$label_23#1;
-
- inline$CallCompletionRoutine$23$label_23#1:
- inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$23$label_24#1;
-
- inline$CallCompletionRoutine$23$label_24#1:
- goto inline$CallCompletionRoutine$23$label_24_true#1, inline$CallCompletionRoutine$23$label_24_false#1;
-
- inline$CallCompletionRoutine$23$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$23$label_1#1;
-
- inline$CallCompletionRoutine$23$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$23$label_25#1;
-
- inline$CallCompletionRoutine$23$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$23$label_1#1;
-
- inline$CallCompletionRoutine$23$label_1#1:
- goto inline$CallCompletionRoutine$23$Return#1;
-
- inline$CallCompletionRoutine$23$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$23$Return#1;
-
- inline$CallCompletionRoutine$23$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$23$Return#1;
-
- inline$CallCompletionRoutine$23$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$23$Return#1;
-
- inline$CallCompletionRoutine$23$Return#1:
- goto inline$storm_IoCallDriver$11$label_39$1#1;
-
- inline$storm_IoCallDriver$11$label_39$1#1:
- goto inline$storm_IoCallDriver$11$anon15_Then#1, inline$storm_IoCallDriver$11$anon15_Else#1;
-
- inline$storm_IoCallDriver$11$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$11$anon10#1;
-
- inline$storm_IoCallDriver$11$anon10#1:
- goto inline$storm_IoCallDriver$11$label_36#1;
-
- inline$storm_IoCallDriver$11$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$11$Return#1;
-
- inline$storm_IoCallDriver$11$label_27_case_0#1:
- assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$11$label_28#1;
-
- inline$storm_IoCallDriver$11$label_28#1:
- inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$11$label_42#1;
-
- inline$storm_IoCallDriver$11$label_42#1:
- goto inline$storm_IoCallDriver$11$label_43#1;
-
- inline$storm_IoCallDriver$11$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$11$label_36#1;
-
- inline$storm_IoCallDriver$11$label_36#1:
- inline$storm_IoCallDriver$11$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$11$label_1#1;
-
- inline$storm_IoCallDriver$11$label_1#1:
- goto inline$storm_IoCallDriver$11$Return#1;
-
- inline$storm_IoCallDriver$11$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$11$Return#1;
-
- inline$storm_IoCallDriver$11$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$11$Return#1;
-
- inline$storm_IoCallDriver$11$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$11$Return#1;
-
- inline$storm_IoCallDriver$11$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$11$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_19$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_19$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon20_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon9#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_42#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_42#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_IoCallDriver$108.29$4$;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon20_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_18_true#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_22#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_22#1:
- call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon21_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon21_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon11#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon11#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_25#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_25#1:
- goto inline$storm_PoCallDriver$5$Entry#1;
-
- inline$storm_PoCallDriver$5$Entry#1:
- inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_PoCallDriver$5$start#1;
-
- inline$storm_PoCallDriver$5$start#1:
- inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8_.1;
- goto inline$storm_PoCallDriver$5$label_3#1;
-
- inline$storm_PoCallDriver$5$label_3#1:
- goto inline$storm_IoCallDriver$12$Entry#1;
-
- inline$storm_IoCallDriver$12$Entry#1:
- inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8;
- goto inline$storm_IoCallDriver$12$start#1;
-
- inline$storm_IoCallDriver$12$start#1:
- inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$12$label_3#1;
-
- inline$storm_IoCallDriver$12$label_3#1:
- goto inline$storm_IoCallDriver$12$label_4#1;
-
- inline$storm_IoCallDriver$12$label_4#1:
- goto inline$storm_IoCallDriver$12$label_5#1;
-
- inline$storm_IoCallDriver$12$label_5#1:
- goto inline$storm_IoCallDriver$12$label_6#1;
-
- inline$storm_IoCallDriver$12$label_6#1:
- call inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$12$label_9#1;
-
- inline$storm_IoCallDriver$12$label_9#1:
- goto inline$storm_IoCallDriver$12$label_9_true#1, inline$storm_IoCallDriver$12$label_9_false#1;
-
- inline$storm_IoCallDriver$12$label_9_false#1:
- assume inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$12$label_10#1;
-
- inline$storm_IoCallDriver$12$label_9_true#1:
- assume inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$12$label_13#1;
-
- inline$storm_IoCallDriver$12$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$12$anon12_Then#1, inline$storm_IoCallDriver$12$anon12_Else#1;
-
- inline$storm_IoCallDriver$12$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$12$anon3#1;
-
- inline$storm_IoCallDriver$12$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$12$label_14#1;
-
- inline$storm_IoCallDriver$12$label_14#1:
- goto inline$storm_IoCallDriver$12$label_14_true#1, inline$storm_IoCallDriver$12$label_14_false#1;
-
- inline$storm_IoCallDriver$12$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$12$label_15#1;
-
- inline$storm_IoCallDriver$12$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$12$label_1#1;
-
- inline$storm_IoCallDriver$12$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$12$label_10#1;
-
- inline$storm_IoCallDriver$12$label_10#1:
- goto inline$IoSetNextIrpStackLocation$13$Entry#1;
-
- inline$IoSetNextIrpStackLocation$13$Entry#1:
- inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$13$start#1;
-
- inline$IoSetNextIrpStackLocation$13$start#1:
- inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$13$label_3#1;
-
- inline$IoSetNextIrpStackLocation$13$label_3#1:
- goto inline$IoSetNextIrpStackLocation$13$label_3_true#1, inline$IoSetNextIrpStackLocation$13$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$13$label_3_false#1:
- inline$IoSetNextIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$13$myVar_0);
- goto inline$IoSetNextIrpStackLocation$13$label_4#1;
-
- inline$IoSetNextIrpStackLocation$13$label_4#1:
- call inline$IoSetNextIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$13$label_7#1;
-
- inline$IoSetNextIrpStackLocation$13$label_7#1:
- call inline$IoSetNextIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$13$label_8#1;
-
- inline$IoSetNextIrpStackLocation$13$label_8#1:
- goto inline$IoSetNextIrpStackLocation$13$label_5#1;
-
- inline$IoSetNextIrpStackLocation$13$label_3_true#1:
- inline$IoSetNextIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$13$myVar_0);
- goto inline$IoSetNextIrpStackLocation$13$label_5#1;
-
- inline$IoSetNextIrpStackLocation$13$label_5#1:
- inline$IoSetNextIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$13$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$13$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$13$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$13$label_6#1;
-
- inline$IoSetNextIrpStackLocation$13$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$13$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$13$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$13$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$13$label_1#1;
-
- inline$IoSetNextIrpStackLocation$13$label_1#1:
- goto inline$IoSetNextIrpStackLocation$13$Return#1;
-
- inline$IoSetNextIrpStackLocation$13$Return#1:
- goto inline$storm_IoCallDriver$12$label_10$1#1;
-
- inline$storm_IoCallDriver$12$label_10$1#1:
- goto inline$storm_IoCallDriver$12$anon11_Then#1, inline$storm_IoCallDriver$12$anon11_Else#1;
-
- inline$storm_IoCallDriver$12$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$12$anon1#1;
-
- inline$storm_IoCallDriver$12$anon1#1:
- goto inline$storm_IoCallDriver$12$label_18#1;
-
- inline$storm_IoCallDriver$12$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$123$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$123$Entry#1:
- inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$123$start#1;
-
- inline$IoGetCurrentIrpStackLocation$123$start#1:
- inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$123$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$123$label_3_true#1, inline$IoGetCurrentIrpStackLocation$123$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$123$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$123$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$123$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$123$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$123$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$123$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$123$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$123$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$123$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$123$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$123$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$123$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$123$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$123$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$123$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$123$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$123$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$123$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$123$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$123$Return#1:
- goto inline$storm_IoCallDriver$12$label_18$1#1;
-
- inline$storm_IoCallDriver$12$label_18$1#1:
- goto inline$storm_IoCallDriver$12$anon13_Then#1, inline$storm_IoCallDriver$12$anon13_Else#1;
-
- inline$storm_IoCallDriver$12$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$12$anon6#1;
-
- inline$storm_IoCallDriver$12$anon6#1:
- goto inline$storm_IoCallDriver$12$label_21#1;
-
- inline$storm_IoCallDriver$12$label_21#1:
- goto inline$storm_IoCallDriver$12$label_22#1;
-
- inline$storm_IoCallDriver$12$label_22#1:
- goto inline$storm_IoCallDriver$12$label_23#1;
-
- inline$storm_IoCallDriver$12$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$12$label_24#1;
-
- inline$storm_IoCallDriver$12$label_24#1:
- call inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$12$label_27#1;
-
- inline$storm_IoCallDriver$12$label_27#1:
- goto inline$storm_IoCallDriver$12$label_27_case_0#1, inline$storm_IoCallDriver$12$label_27_case_1#1, inline$storm_IoCallDriver$12$label_27_case_2#1;
-
- inline$storm_IoCallDriver$12$label_27_case_2#1:
- assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$12$label_30#1;
-
- inline$storm_IoCallDriver$12$label_30#1:
- inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$12$label_31#1;
-
- inline$storm_IoCallDriver$12$label_31#1:
- goto inline$storm_IoCallDriver$12$label_32#1;
-
- inline$storm_IoCallDriver$12$label_32#1:
- goto inline$storm_IoCallDriver$12$label_33#1;
-
- inline$storm_IoCallDriver$12$label_33#1:
- goto inline$CallCompletionRoutine$24$Entry#1;
-
- inline$CallCompletionRoutine$24$Entry#1:
- inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$24$start#1;
-
- inline$CallCompletionRoutine$24$start#1:
- inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$24$label_3#1;
-
- inline$CallCompletionRoutine$24$label_3#1:
- goto inline$CallCompletionRoutine$24$label_4#1;
-
- inline$CallCompletionRoutine$24$label_4#1:
- goto inline$CallCompletionRoutine$24$label_5#1;
-
- inline$CallCompletionRoutine$24$label_5#1:
- goto inline$CallCompletionRoutine$24$label_6#1;
-
- inline$CallCompletionRoutine$24$label_6#1:
- goto inline$CallCompletionRoutine$24$label_7#1;
-
- inline$CallCompletionRoutine$24$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$124$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$124$Entry#1:
- inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$124$start#1;
-
- inline$IoGetCurrentIrpStackLocation$124$start#1:
- inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$124$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$124$label_3_true#1, inline$IoGetCurrentIrpStackLocation$124$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$124$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$124$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$124$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$124$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$124$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$124$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$124$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$124$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$124$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$124$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$124$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$124$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$124$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$124$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$124$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$124$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$124$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$124$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$124$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$124$Return#1:
- goto inline$CallCompletionRoutine$24$label_7$1#1;
-
- inline$CallCompletionRoutine$24$label_7$1#1:
- goto inline$CallCompletionRoutine$24$anon10_Then#1, inline$CallCompletionRoutine$24$anon10_Else#1;
-
- inline$CallCompletionRoutine$24$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$24$anon1#1;
-
- inline$CallCompletionRoutine$24$anon1#1:
- goto inline$CallCompletionRoutine$24$label_10#1;
-
- inline$CallCompletionRoutine$24$label_10#1:
- goto inline$CallCompletionRoutine$24$label_11#1;
-
- inline$CallCompletionRoutine$24$label_11#1:
- havoc inline$CallCompletionRoutine$24$myNondetVar_0;
- inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$myNondetVar_0;
- goto inline$CallCompletionRoutine$24$label_12#1;
-
- inline$CallCompletionRoutine$24$label_12#1:
- havoc inline$CallCompletionRoutine$24$myNondetVar_0;
- inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$myNondetVar_0;
- goto inline$CallCompletionRoutine$24$label_13#1;
-
- inline$CallCompletionRoutine$24$label_13#1:
- havoc inline$CallCompletionRoutine$24$myNondetVar_0;
- goto inline$CallCompletionRoutine$24$label_14#1;
-
- inline$CallCompletionRoutine$24$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$125$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$125$Entry#1:
- inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$125$start#1;
-
- inline$IoGetCurrentIrpStackLocation$125$start#1:
- inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$125$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$125$label_3_true#1, inline$IoGetCurrentIrpStackLocation$125$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$125$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$125$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$125$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$125$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$125$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$125$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$125$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$125$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$125$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$125$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$125$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$125$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$125$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$125$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$125$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$125$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$125$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$125$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$125$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$125$Return#1:
- goto inline$CallCompletionRoutine$24$label_14$1#1;
-
- inline$CallCompletionRoutine$24$label_14$1#1:
- goto inline$CallCompletionRoutine$24$anon11_Then#1, inline$CallCompletionRoutine$24$anon11_Else#1;
-
- inline$CallCompletionRoutine$24$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$24$anon3#1;
-
- inline$CallCompletionRoutine$24$anon3#1:
- goto inline$CallCompletionRoutine$24$label_17#1;
-
- inline$CallCompletionRoutine$24$label_17#1:
- goto inline$CallCompletionRoutine$24$label_18#1;
-
- inline$CallCompletionRoutine$24$label_18#1:
- goto inline$CallCompletionRoutine$24$label_18_true#1, inline$CallCompletionRoutine$24$label_18_false#1;
-
- inline$CallCompletionRoutine$24$label_18_false#1:
- assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$24$label_1#1;
-
- inline$CallCompletionRoutine$24$label_18_true#1:
- assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$24$label_19#1;
-
- inline$CallCompletionRoutine$24$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$24$label_20#1;
-
- inline$CallCompletionRoutine$24$label_20#1:
- goto inline$CallCompletionRoutine$24$label_20_icall_1#1, inline$CallCompletionRoutine$24$label_20_icall_2#1, inline$CallCompletionRoutine$24$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$24$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$24$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$24$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$24$Entry#1:
- inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$24$start#1;
-
- inline$BDLSystemPowerIoCompletion$24$start#1:
- call inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$24$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_4#1:
- inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_6#1:
- inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$24$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$24$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$24$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$127$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$127$Entry#1:
- inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$127$start#1;
-
- inline$IoGetCurrentIrpStackLocation$127$start#1:
- inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$127$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$127$label_3_true#1, inline$IoGetCurrentIrpStackLocation$127$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$127$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$127$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$127$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$127$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$127$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$127$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$127$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$127$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$127$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$127$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$127$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$127$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$127$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$127$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$127$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$127$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$127$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$127$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$127$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$127$Return#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon36_Then#1, inline$BDLSystemPowerIoCompletion$24$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_15#1:
- goto inline$BDLGetDebugLevel$619$Entry#1;
-
- inline$BDLGetDebugLevel$619$Entry#1:
- goto inline$BDLGetDebugLevel$619$start#1;
-
- inline$BDLGetDebugLevel$619$start#1:
- goto inline$BDLGetDebugLevel$619$label_3#1;
-
- inline$BDLGetDebugLevel$619$label_3#1:
- havoc inline$BDLGetDebugLevel$619$myNondetVar_0;
- inline$BDLGetDebugLevel$619$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$619$myNondetVar_0;
- goto inline$BDLGetDebugLevel$619$label_1#1;
-
- inline$BDLGetDebugLevel$619$label_1#1:
- goto inline$BDLGetDebugLevel$619$Return#1;
-
- inline$BDLGetDebugLevel$619$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$619$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon37_Then#1, inline$BDLSystemPowerIoCompletion$24$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_18_true#1, inline$BDLSystemPowerIoCompletion$24$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_22#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_23#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_24#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$24$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_19#1:
- goto inline$BDLGetDebugLevel$620$Entry#1;
-
- inline$BDLGetDebugLevel$620$Entry#1:
- goto inline$BDLGetDebugLevel$620$start#1;
-
- inline$BDLGetDebugLevel$620$start#1:
- goto inline$BDLGetDebugLevel$620$label_3#1;
-
- inline$BDLGetDebugLevel$620$label_3#1:
- havoc inline$BDLGetDebugLevel$620$myNondetVar_0;
- inline$BDLGetDebugLevel$620$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$620$myNondetVar_0;
- goto inline$BDLGetDebugLevel$620$label_1#1;
-
- inline$BDLGetDebugLevel$620$label_1#1:
- goto inline$BDLGetDebugLevel$620$Return#1;
-
- inline$BDLGetDebugLevel$620$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$620$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon38_Then#1, inline$BDLSystemPowerIoCompletion$24$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_28_true#1, inline$BDLSystemPowerIoCompletion$24$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_32#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_33#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_34#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$24$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_29#1:
- goto inline$BDLGetDebugLevel$621$Entry#1;
-
- inline$BDLGetDebugLevel$621$Entry#1:
- goto inline$BDLGetDebugLevel$621$start#1;
-
- inline$BDLGetDebugLevel$621$start#1:
- goto inline$BDLGetDebugLevel$621$label_3#1;
-
- inline$BDLGetDebugLevel$621$label_3#1:
- havoc inline$BDLGetDebugLevel$621$myNondetVar_0;
- inline$BDLGetDebugLevel$621$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$621$myNondetVar_0;
- goto inline$BDLGetDebugLevel$621$label_1#1;
-
- inline$BDLGetDebugLevel$621$label_1#1:
- goto inline$BDLGetDebugLevel$621$Return#1;
-
- inline$BDLGetDebugLevel$621$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$621$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon39_Then#1, inline$BDLSystemPowerIoCompletion$24$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_38_true#1, inline$BDLSystemPowerIoCompletion$24$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_39_true#1, inline$BDLSystemPowerIoCompletion$24$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$24$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$24$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$24$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_106_true#1, inline$BDLSystemPowerIoCompletion$24$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_142#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_143#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$24$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$24$myNondetVar_0, inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$24$anon50_Then#1, inline$BDLSystemPowerIoCompletion$24$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_112#1:
- inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$24$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_113_true#1, inline$BDLSystemPowerIoCompletion$24$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$24$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_117#1:
- goto inline$BDLGetDebugLevel$628$Entry#1;
-
- inline$BDLGetDebugLevel$628$Entry#1:
- goto inline$BDLGetDebugLevel$628$start#1;
-
- inline$BDLGetDebugLevel$628$start#1:
- goto inline$BDLGetDebugLevel$628$label_3#1;
-
- inline$BDLGetDebugLevel$628$label_3#1:
- havoc inline$BDLGetDebugLevel$628$myNondetVar_0;
- inline$BDLGetDebugLevel$628$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$628$myNondetVar_0;
- goto inline$BDLGetDebugLevel$628$label_1#1;
-
- inline$BDLGetDebugLevel$628$label_1#1:
- goto inline$BDLGetDebugLevel$628$Return#1;
-
- inline$BDLGetDebugLevel$628$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$628$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon51_Then#1, inline$BDLSystemPowerIoCompletion$24$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_120_true#1, inline$BDLSystemPowerIoCompletion$24$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_124#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_125#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_126#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$24$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_121#1:
- goto inline$BDLGetDebugLevel$629$Entry#1;
-
- inline$BDLGetDebugLevel$629$Entry#1:
- goto inline$BDLGetDebugLevel$629$start#1;
-
- inline$BDLGetDebugLevel$629$start#1:
- goto inline$BDLGetDebugLevel$629$label_3#1;
-
- inline$BDLGetDebugLevel$629$label_3#1:
- havoc inline$BDLGetDebugLevel$629$myNondetVar_0;
- inline$BDLGetDebugLevel$629$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$629$myNondetVar_0;
- goto inline$BDLGetDebugLevel$629$label_1#1;
-
- inline$BDLGetDebugLevel$629$label_1#1:
- goto inline$BDLGetDebugLevel$629$Return#1;
-
- inline$BDLGetDebugLevel$629$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$629$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon52_Then#1, inline$BDLSystemPowerIoCompletion$24$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_130_true#1, inline$BDLSystemPowerIoCompletion$24$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_134#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_135#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_136#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$24$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_131#1:
- goto inline$BDLGetDebugLevel$630$Entry#1;
-
- inline$BDLGetDebugLevel$630$Entry#1:
- goto inline$BDLGetDebugLevel$630$start#1;
-
- inline$BDLGetDebugLevel$630$start#1:
- goto inline$BDLGetDebugLevel$630$label_3#1;
-
- inline$BDLGetDebugLevel$630$label_3#1:
- havoc inline$BDLGetDebugLevel$630$myNondetVar_0;
- inline$BDLGetDebugLevel$630$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$630$myNondetVar_0;
- goto inline$BDLGetDebugLevel$630$label_1#1;
-
- inline$BDLGetDebugLevel$630$label_1#1:
- goto inline$BDLGetDebugLevel$630$Return#1;
-
- inline$BDLGetDebugLevel$630$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$630$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon53_Then#1, inline$BDLSystemPowerIoCompletion$24$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_140_true#1, inline$BDLSystemPowerIoCompletion$24$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$24$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_115#1:
- inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$24$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$24$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_43#1:
- goto inline$BDLGetDebugLevel$622$Entry#1;
-
- inline$BDLGetDebugLevel$622$Entry#1:
- goto inline$BDLGetDebugLevel$622$start#1;
-
- inline$BDLGetDebugLevel$622$start#1:
- goto inline$BDLGetDebugLevel$622$label_3#1;
-
- inline$BDLGetDebugLevel$622$label_3#1:
- havoc inline$BDLGetDebugLevel$622$myNondetVar_0;
- inline$BDLGetDebugLevel$622$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$622$myNondetVar_0;
- goto inline$BDLGetDebugLevel$622$label_1#1;
-
- inline$BDLGetDebugLevel$622$label_1#1:
- goto inline$BDLGetDebugLevel$622$Return#1;
-
- inline$BDLGetDebugLevel$622$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$622$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon40_Then#1, inline$BDLSystemPowerIoCompletion$24$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_46_true#1, inline$BDLSystemPowerIoCompletion$24$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_50#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_51#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_52#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$24$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_47#1:
- goto inline$BDLGetDebugLevel$623$Entry#1;
-
- inline$BDLGetDebugLevel$623$Entry#1:
- goto inline$BDLGetDebugLevel$623$start#1;
-
- inline$BDLGetDebugLevel$623$start#1:
- goto inline$BDLGetDebugLevel$623$label_3#1;
-
- inline$BDLGetDebugLevel$623$label_3#1:
- havoc inline$BDLGetDebugLevel$623$myNondetVar_0;
- inline$BDLGetDebugLevel$623$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$623$myNondetVar_0;
- goto inline$BDLGetDebugLevel$623$label_1#1;
-
- inline$BDLGetDebugLevel$623$label_1#1:
- goto inline$BDLGetDebugLevel$623$Return#1;
-
- inline$BDLGetDebugLevel$623$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$623$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon41_Then#1, inline$BDLSystemPowerIoCompletion$24$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_56_true#1, inline$BDLSystemPowerIoCompletion$24$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_60#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_61#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_62#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$24$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_57#1:
- goto inline$BDLGetDebugLevel$624$Entry#1;
-
- inline$BDLGetDebugLevel$624$Entry#1:
- goto inline$BDLGetDebugLevel$624$start#1;
-
- inline$BDLGetDebugLevel$624$start#1:
- goto inline$BDLGetDebugLevel$624$label_3#1;
-
- inline$BDLGetDebugLevel$624$label_3#1:
- havoc inline$BDLGetDebugLevel$624$myNondetVar_0;
- inline$BDLGetDebugLevel$624$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$624$myNondetVar_0;
- goto inline$BDLGetDebugLevel$624$label_1#1;
-
- inline$BDLGetDebugLevel$624$label_1#1:
- goto inline$BDLGetDebugLevel$624$Return#1;
-
- inline$BDLGetDebugLevel$624$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$624$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon42_Then#1, inline$BDLSystemPowerIoCompletion$24$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_66_true#1, inline$BDLSystemPowerIoCompletion$24$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$24$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$24$anon43_Then#1, inline$BDLSystemPowerIoCompletion$24$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$24$anon44_Then#1, inline$BDLSystemPowerIoCompletion$24$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_74#1:
- goto inline$storm_IoCompleteRequest$50$Entry#1;
-
- inline$storm_IoCompleteRequest$50$Entry#1:
- inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$50$start#1;
-
- inline$storm_IoCompleteRequest$50$start#1:
- inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$50$label_3#1;
-
- inline$storm_IoCompleteRequest$50$label_3#1:
- call inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$50$label_6#1;
-
- inline$storm_IoCompleteRequest$50$label_6#1:
- goto inline$storm_IoCompleteRequest$50$label_6_true#1, inline$storm_IoCompleteRequest$50$label_6_false#1;
-
- inline$storm_IoCompleteRequest$50$label_6_false#1:
- assume inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$50$label_7#1;
-
- inline$storm_IoCompleteRequest$50$label_6_true#1:
- assume inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$50$label_8#1;
-
- inline$storm_IoCompleteRequest$50$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$50$anon3_Then#1, inline$storm_IoCompleteRequest$50$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$50$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$50$anon1#1;
-
- inline$storm_IoCompleteRequest$50$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$50$label_9#1;
-
- inline$storm_IoCompleteRequest$50$label_9#1:
- goto inline$storm_IoCompleteRequest$50$label_9_true#1, inline$storm_IoCompleteRequest$50$label_9_false#1;
-
- inline$storm_IoCompleteRequest$50$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$50$label_10#1;
-
- inline$storm_IoCompleteRequest$50$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$50$label_1#1;
-
- inline$storm_IoCompleteRequest$50$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$50$label_7#1;
-
- inline$storm_IoCompleteRequest$50$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$50$label_1#1;
-
- inline$storm_IoCompleteRequest$50$label_1#1:
- goto inline$storm_IoCompleteRequest$50$Return#1;
-
- inline$storm_IoCompleteRequest$50$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$50$Return#1;
-
- inline$storm_IoCompleteRequest$50$Return#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon45_Then#1, inline$BDLSystemPowerIoCompletion$24$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$24$anon46_Then#1, inline$BDLSystemPowerIoCompletion$24$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_80#1:
- goto inline$BDLGetDebugLevel$625$Entry#1;
-
- inline$BDLGetDebugLevel$625$Entry#1:
- goto inline$BDLGetDebugLevel$625$start#1;
-
- inline$BDLGetDebugLevel$625$start#1:
- goto inline$BDLGetDebugLevel$625$label_3#1;
-
- inline$BDLGetDebugLevel$625$label_3#1:
- havoc inline$BDLGetDebugLevel$625$myNondetVar_0;
- inline$BDLGetDebugLevel$625$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$625$myNondetVar_0;
- goto inline$BDLGetDebugLevel$625$label_1#1;
-
- inline$BDLGetDebugLevel$625$label_1#1:
- goto inline$BDLGetDebugLevel$625$Return#1;
-
- inline$BDLGetDebugLevel$625$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$625$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon47_Then#1, inline$BDLSystemPowerIoCompletion$24$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_83_true#1, inline$BDLSystemPowerIoCompletion$24$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_87#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_88#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_89#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$24$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_84#1:
- goto inline$BDLGetDebugLevel$626$Entry#1;
-
- inline$BDLGetDebugLevel$626$Entry#1:
- goto inline$BDLGetDebugLevel$626$start#1;
-
- inline$BDLGetDebugLevel$626$start#1:
- goto inline$BDLGetDebugLevel$626$label_3#1;
-
- inline$BDLGetDebugLevel$626$label_3#1:
- havoc inline$BDLGetDebugLevel$626$myNondetVar_0;
- inline$BDLGetDebugLevel$626$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$626$myNondetVar_0;
- goto inline$BDLGetDebugLevel$626$label_1#1;
-
- inline$BDLGetDebugLevel$626$label_1#1:
- goto inline$BDLGetDebugLevel$626$Return#1;
-
- inline$BDLGetDebugLevel$626$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$626$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon48_Then#1, inline$BDLSystemPowerIoCompletion$24$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_93_true#1, inline$BDLSystemPowerIoCompletion$24$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_97#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_98#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_99#1:
- call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$24$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$24$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_94#1:
- goto inline$BDLGetDebugLevel$627$Entry#1;
-
- inline$BDLGetDebugLevel$627$Entry#1:
- goto inline$BDLGetDebugLevel$627$start#1;
-
- inline$BDLGetDebugLevel$627$start#1:
- goto inline$BDLGetDebugLevel$627$label_3#1;
-
- inline$BDLGetDebugLevel$627$label_3#1:
- havoc inline$BDLGetDebugLevel$627$myNondetVar_0;
- inline$BDLGetDebugLevel$627$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$627$myNondetVar_0;
- goto inline$BDLGetDebugLevel$627$label_1#1;
-
- inline$BDLGetDebugLevel$627$label_1#1:
- goto inline$BDLGetDebugLevel$627$Return#1;
-
- inline$BDLGetDebugLevel$627$Return#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$627$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$24$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$24$anon49_Then#1, inline$BDLSystemPowerIoCompletion$24$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_103_true#1, inline$BDLSystemPowerIoCompletion$24$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$24$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$24$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_104#1:
- inline$BDLSystemPowerIoCompletion$24$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$24$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$24$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$24$Return#1;
-
- inline$BDLSystemPowerIoCompletion$24$Return#1:
- inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$24$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$24$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$24$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$24$anon14_Then#1, inline$CallCompletionRoutine$24$anon14_Else#1;
-
- inline$CallCompletionRoutine$24$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$24$anon9#1;
-
- inline$CallCompletionRoutine$24$anon9#1:
- goto inline$CallCompletionRoutine$24$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$24$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$24$Return#1;
-
- inline$CallCompletionRoutine$24$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$24$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$24$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$24$Entry#1:
- inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$24$start#1;
-
- inline$BDLDevicePowerIoCompletion$24$start#1:
- call inline$BDLDevicePowerIoCompletion$24$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$24$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_4#1:
- inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_6#1:
- inline$BDLDevicePowerIoCompletion$24$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$24$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$24$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$24$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$126$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$126$Entry#1:
- inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$126$start#1;
-
- inline$IoGetCurrentIrpStackLocation$126$start#1:
- inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$126$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$126$label_3_true#1, inline$IoGetCurrentIrpStackLocation$126$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$126$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$126$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$126$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$126$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$126$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$126$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$126$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$126$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$126$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$126$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$126$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$126$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$126$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$126$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$126$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$126$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$126$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$126$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$126$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$126$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$126$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$126$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$126$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon30_Then#1, inline$BDLDevicePowerIoCompletion$24$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_13#1:
- inline$BDLDevicePowerIoCompletion$24$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$24$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$24$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_17#1:
- goto inline$BDLGetDebugLevel$610$Entry#1;
-
- inline$BDLGetDebugLevel$610$Entry#1:
- goto inline$BDLGetDebugLevel$610$start#1;
-
- inline$BDLGetDebugLevel$610$start#1:
- goto inline$BDLGetDebugLevel$610$label_3#1;
-
- inline$BDLGetDebugLevel$610$label_3#1:
- havoc inline$BDLGetDebugLevel$610$myNondetVar_0;
- inline$BDLGetDebugLevel$610$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$610$myNondetVar_0;
- goto inline$BDLGetDebugLevel$610$label_1#1;
-
- inline$BDLGetDebugLevel$610$label_1#1:
- goto inline$BDLGetDebugLevel$610$Return#1;
-
- inline$BDLGetDebugLevel$610$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$610$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon31_Then#1, inline$BDLDevicePowerIoCompletion$24$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_20_true#1, inline$BDLDevicePowerIoCompletion$24$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_24#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_25#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_26#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$24$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_21#1:
- goto inline$BDLGetDebugLevel$611$Entry#1;
-
- inline$BDLGetDebugLevel$611$Entry#1:
- goto inline$BDLGetDebugLevel$611$start#1;
-
- inline$BDLGetDebugLevel$611$start#1:
- goto inline$BDLGetDebugLevel$611$label_3#1;
-
- inline$BDLGetDebugLevel$611$label_3#1:
- havoc inline$BDLGetDebugLevel$611$myNondetVar_0;
- inline$BDLGetDebugLevel$611$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$611$myNondetVar_0;
- goto inline$BDLGetDebugLevel$611$label_1#1;
-
- inline$BDLGetDebugLevel$611$label_1#1:
- goto inline$BDLGetDebugLevel$611$Return#1;
-
- inline$BDLGetDebugLevel$611$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$611$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon32_Then#1, inline$BDLDevicePowerIoCompletion$24$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_30_true#1, inline$BDLDevicePowerIoCompletion$24$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_34#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_35#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_36#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$24$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_31#1:
- goto inline$BDLGetDebugLevel$612$Entry#1;
-
- inline$BDLGetDebugLevel$612$Entry#1:
- goto inline$BDLGetDebugLevel$612$start#1;
-
- inline$BDLGetDebugLevel$612$start#1:
- goto inline$BDLGetDebugLevel$612$label_3#1;
-
- inline$BDLGetDebugLevel$612$label_3#1:
- havoc inline$BDLGetDebugLevel$612$myNondetVar_0;
- inline$BDLGetDebugLevel$612$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$612$myNondetVar_0;
- goto inline$BDLGetDebugLevel$612$label_1#1;
-
- inline$BDLGetDebugLevel$612$label_1#1:
- goto inline$BDLGetDebugLevel$612$Return#1;
-
- inline$BDLGetDebugLevel$612$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$612$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon33_Then#1, inline$BDLDevicePowerIoCompletion$24$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_40_true#1, inline$BDLDevicePowerIoCompletion$24$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_41_true#1, inline$BDLDevicePowerIoCompletion$24$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$24$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$24$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_44_true#1, inline$BDLDevicePowerIoCompletion$24$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$24$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_45_true#1, inline$BDLDevicePowerIoCompletion$24$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$24$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$24$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$24$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$24$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$24$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$24$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_54#1:
- inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$24$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_55_true#1, inline$BDLDevicePowerIoCompletion$24$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_56#1:
- call inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$24$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$24$anon34_Then#1, inline$BDLDevicePowerIoCompletion$24$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_59#1:
- goto inline$BDLGetDebugLevel$613$Entry#1;
-
- inline$BDLGetDebugLevel$613$Entry#1:
- goto inline$BDLGetDebugLevel$613$start#1;
-
- inline$BDLGetDebugLevel$613$start#1:
- goto inline$BDLGetDebugLevel$613$label_3#1;
-
- inline$BDLGetDebugLevel$613$label_3#1:
- havoc inline$BDLGetDebugLevel$613$myNondetVar_0;
- inline$BDLGetDebugLevel$613$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$613$myNondetVar_0;
- goto inline$BDLGetDebugLevel$613$label_1#1;
-
- inline$BDLGetDebugLevel$613$label_1#1:
- goto inline$BDLGetDebugLevel$613$Return#1;
-
- inline$BDLGetDebugLevel$613$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$613$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon35_Then#1, inline$BDLDevicePowerIoCompletion$24$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_62_true#1, inline$BDLDevicePowerIoCompletion$24$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_66#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_67#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_68#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$24$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_63#1:
- goto inline$BDLGetDebugLevel$614$Entry#1;
-
- inline$BDLGetDebugLevel$614$Entry#1:
- goto inline$BDLGetDebugLevel$614$start#1;
-
- inline$BDLGetDebugLevel$614$start#1:
- goto inline$BDLGetDebugLevel$614$label_3#1;
-
- inline$BDLGetDebugLevel$614$label_3#1:
- havoc inline$BDLGetDebugLevel$614$myNondetVar_0;
- inline$BDLGetDebugLevel$614$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$614$myNondetVar_0;
- goto inline$BDLGetDebugLevel$614$label_1#1;
-
- inline$BDLGetDebugLevel$614$label_1#1:
- goto inline$BDLGetDebugLevel$614$Return#1;
-
- inline$BDLGetDebugLevel$614$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$614$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon36_Then#1, inline$BDLDevicePowerIoCompletion$24$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_72_true#1, inline$BDLDevicePowerIoCompletion$24$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_76#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_77#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_78#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$24$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_73#1:
- goto inline$BDLGetDebugLevel$615$Entry#1;
-
- inline$BDLGetDebugLevel$615$Entry#1:
- goto inline$BDLGetDebugLevel$615$start#1;
-
- inline$BDLGetDebugLevel$615$start#1:
- goto inline$BDLGetDebugLevel$615$label_3#1;
-
- inline$BDLGetDebugLevel$615$label_3#1:
- havoc inline$BDLGetDebugLevel$615$myNondetVar_0;
- inline$BDLGetDebugLevel$615$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$615$myNondetVar_0;
- goto inline$BDLGetDebugLevel$615$label_1#1;
-
- inline$BDLGetDebugLevel$615$label_1#1:
- goto inline$BDLGetDebugLevel$615$Return#1;
-
- inline$BDLGetDebugLevel$615$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$615$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon37_Then#1, inline$BDLDevicePowerIoCompletion$24$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_82_true#1, inline$BDLDevicePowerIoCompletion$24$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$24$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$24$anon38_Then#1, inline$BDLDevicePowerIoCompletion$24$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$24$anon39_Then#1, inline$BDLDevicePowerIoCompletion$24$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_92#1:
- goto inline$storm_IoCompleteRequest$49$Entry#1;
-
- inline$storm_IoCompleteRequest$49$Entry#1:
- inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$49$start#1;
-
- inline$storm_IoCompleteRequest$49$start#1:
- inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$49$label_3#1;
-
- inline$storm_IoCompleteRequest$49$label_3#1:
- call inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$49$label_6#1;
-
- inline$storm_IoCompleteRequest$49$label_6#1:
- goto inline$storm_IoCompleteRequest$49$label_6_true#1, inline$storm_IoCompleteRequest$49$label_6_false#1;
-
- inline$storm_IoCompleteRequest$49$label_6_false#1:
- assume inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$49$label_7#1;
-
- inline$storm_IoCompleteRequest$49$label_6_true#1:
- assume inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$49$label_8#1;
-
- inline$storm_IoCompleteRequest$49$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$49$anon3_Then#1, inline$storm_IoCompleteRequest$49$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$49$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$49$anon1#1;
-
- inline$storm_IoCompleteRequest$49$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$49$label_9#1;
-
- inline$storm_IoCompleteRequest$49$label_9#1:
- goto inline$storm_IoCompleteRequest$49$label_9_true#1, inline$storm_IoCompleteRequest$49$label_9_false#1;
-
- inline$storm_IoCompleteRequest$49$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$49$label_10#1;
-
- inline$storm_IoCompleteRequest$49$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$49$label_1#1;
-
- inline$storm_IoCompleteRequest$49$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$49$label_7#1;
-
- inline$storm_IoCompleteRequest$49$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$49$label_1#1;
-
- inline$storm_IoCompleteRequest$49$label_1#1:
- goto inline$storm_IoCompleteRequest$49$Return#1;
-
- inline$storm_IoCompleteRequest$49$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$49$Return#1;
-
- inline$storm_IoCompleteRequest$49$Return#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon40_Then#1, inline$BDLDevicePowerIoCompletion$24$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$24$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$24$anon41_Then#1, inline$BDLDevicePowerIoCompletion$24$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_98#1:
- goto inline$BDLGetDebugLevel$616$Entry#1;
-
- inline$BDLGetDebugLevel$616$Entry#1:
- goto inline$BDLGetDebugLevel$616$start#1;
-
- inline$BDLGetDebugLevel$616$start#1:
- goto inline$BDLGetDebugLevel$616$label_3#1;
-
- inline$BDLGetDebugLevel$616$label_3#1:
- havoc inline$BDLGetDebugLevel$616$myNondetVar_0;
- inline$BDLGetDebugLevel$616$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$616$myNondetVar_0;
- goto inline$BDLGetDebugLevel$616$label_1#1;
-
- inline$BDLGetDebugLevel$616$label_1#1:
- goto inline$BDLGetDebugLevel$616$Return#1;
-
- inline$BDLGetDebugLevel$616$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$616$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon42_Then#1, inline$BDLDevicePowerIoCompletion$24$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_101_true#1, inline$BDLDevicePowerIoCompletion$24$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_105#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_106#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_107#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$24$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_102#1:
- goto inline$BDLGetDebugLevel$617$Entry#1;
-
- inline$BDLGetDebugLevel$617$Entry#1:
- goto inline$BDLGetDebugLevel$617$start#1;
-
- inline$BDLGetDebugLevel$617$start#1:
- goto inline$BDLGetDebugLevel$617$label_3#1;
-
- inline$BDLGetDebugLevel$617$label_3#1:
- havoc inline$BDLGetDebugLevel$617$myNondetVar_0;
- inline$BDLGetDebugLevel$617$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$617$myNondetVar_0;
- goto inline$BDLGetDebugLevel$617$label_1#1;
-
- inline$BDLGetDebugLevel$617$label_1#1:
- goto inline$BDLGetDebugLevel$617$Return#1;
-
- inline$BDLGetDebugLevel$617$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$617$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon43_Then#1, inline$BDLDevicePowerIoCompletion$24$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_111_true#1, inline$BDLDevicePowerIoCompletion$24$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_115#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_116#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_117#1:
- call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$24$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$24$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_112#1:
- goto inline$BDLGetDebugLevel$618$Entry#1;
-
- inline$BDLGetDebugLevel$618$Entry#1:
- goto inline$BDLGetDebugLevel$618$start#1;
-
- inline$BDLGetDebugLevel$618$start#1:
- goto inline$BDLGetDebugLevel$618$label_3#1;
-
- inline$BDLGetDebugLevel$618$label_3#1:
- havoc inline$BDLGetDebugLevel$618$myNondetVar_0;
- inline$BDLGetDebugLevel$618$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$618$myNondetVar_0;
- goto inline$BDLGetDebugLevel$618$label_1#1;
-
- inline$BDLGetDebugLevel$618$label_1#1:
- goto inline$BDLGetDebugLevel$618$Return#1;
-
- inline$BDLGetDebugLevel$618$Return#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$618$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$24$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$24$anon44_Then#1, inline$BDLDevicePowerIoCompletion$24$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_121_true#1, inline$BDLDevicePowerIoCompletion$24$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$24$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$24$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_122#1:
- inline$BDLDevicePowerIoCompletion$24$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$24$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$24$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$24$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$24$Return#1;
-
- inline$BDLDevicePowerIoCompletion$24$Return#1:
- inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$24$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$24$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$24$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$24$anon13_Then#1, inline$CallCompletionRoutine$24$anon13_Else#1;
-
- inline$CallCompletionRoutine$24$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$24$anon7#1;
-
- inline$CallCompletionRoutine$24$anon7#1:
- goto inline$CallCompletionRoutine$24$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$24$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$24$Return#1;
-
- inline$CallCompletionRoutine$24$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$24$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$24$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$24$Entry#1:
- inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$24$start#1;
-
- inline$BDLCallDriverCompletionRoutine$24$start#1:
- inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$24$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$24$label_3_true#1, inline$BDLCallDriverCompletionRoutine$24$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$24$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$24$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$24$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$24$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_6#1:
- goto inline$storm_KeSetEvent$26$Entry#1;
-
- inline$storm_KeSetEvent$26$Entry#1:
- inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$26$start#1;
-
- inline$storm_KeSetEvent$26$start#1:
- inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$26$label_3#1;
-
- inline$storm_KeSetEvent$26$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$26$label_1#1;
-
- inline$storm_KeSetEvent$26$label_1#1:
- goto inline$storm_KeSetEvent$26$Return#1;
-
- inline$storm_KeSetEvent$26$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$24$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$24$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$24$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$24$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$24$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$24$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$24$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_9#1:
- inline$BDLCallDriverCompletionRoutine$24$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$24$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$24$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$24$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$24$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$24$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$24$Return#1:
- inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$24$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$24$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$24$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$24$anon12_Then#1, inline$CallCompletionRoutine$24$anon12_Else#1;
-
- inline$CallCompletionRoutine$24$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$24$anon5#1;
-
- inline$CallCompletionRoutine$24$anon5#1:
- goto inline$CallCompletionRoutine$24$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$24$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$24$label_23#1;
-
- inline$CallCompletionRoutine$24$label_23#1:
- inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$24$label_24#1;
-
- inline$CallCompletionRoutine$24$label_24#1:
- goto inline$CallCompletionRoutine$24$label_24_true#1, inline$CallCompletionRoutine$24$label_24_false#1;
-
- inline$CallCompletionRoutine$24$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$24$label_1#1;
-
- inline$CallCompletionRoutine$24$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$24$label_25#1;
-
- inline$CallCompletionRoutine$24$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$24$label_1#1;
-
- inline$CallCompletionRoutine$24$label_1#1:
- goto inline$CallCompletionRoutine$24$Return#1;
-
- inline$CallCompletionRoutine$24$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$24$Return#1;
-
- inline$CallCompletionRoutine$24$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$24$Return#1;
-
- inline$CallCompletionRoutine$24$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$24$Return#1;
-
- inline$CallCompletionRoutine$24$Return#1:
- goto inline$storm_IoCallDriver$12$label_33$1#1;
-
- inline$storm_IoCallDriver$12$label_33$1#1:
- goto inline$storm_IoCallDriver$12$anon14_Then#1, inline$storm_IoCallDriver$12$anon14_Else#1;
-
- inline$storm_IoCallDriver$12$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$12$anon8#1;
-
- inline$storm_IoCallDriver$12$anon8#1:
- goto inline$storm_IoCallDriver$12$label_36#1;
-
- inline$storm_IoCallDriver$12$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$12$Return#1;
-
- inline$storm_IoCallDriver$12$label_27_case_1#1:
- assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$12$label_29#1;
-
- inline$storm_IoCallDriver$12$label_29#1:
- inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$12$label_37#1;
-
- inline$storm_IoCallDriver$12$label_37#1:
- goto inline$storm_IoCallDriver$12$label_38#1;
-
- inline$storm_IoCallDriver$12$label_38#1:
- goto inline$storm_IoCallDriver$12$label_39#1;
-
- inline$storm_IoCallDriver$12$label_39#1:
- goto inline$CallCompletionRoutine$25$Entry#1;
-
- inline$CallCompletionRoutine$25$Entry#1:
- inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$25$start#1;
-
- inline$CallCompletionRoutine$25$start#1:
- inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$25$label_3#1;
-
- inline$CallCompletionRoutine$25$label_3#1:
- goto inline$CallCompletionRoutine$25$label_4#1;
-
- inline$CallCompletionRoutine$25$label_4#1:
- goto inline$CallCompletionRoutine$25$label_5#1;
-
- inline$CallCompletionRoutine$25$label_5#1:
- goto inline$CallCompletionRoutine$25$label_6#1;
-
- inline$CallCompletionRoutine$25$label_6#1:
- goto inline$CallCompletionRoutine$25$label_7#1;
-
- inline$CallCompletionRoutine$25$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$128$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$128$Entry#1:
- inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$128$start#1;
-
- inline$IoGetCurrentIrpStackLocation$128$start#1:
- inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$128$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$128$label_3_true#1, inline$IoGetCurrentIrpStackLocation$128$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$128$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$128$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$128$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$128$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$128$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$128$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$128$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$128$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$128$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$128$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$128$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$128$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$128$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$128$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$128$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$128$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$128$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$128$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$128$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$128$Return#1:
- goto inline$CallCompletionRoutine$25$label_7$1#1;
-
- inline$CallCompletionRoutine$25$label_7$1#1:
- goto inline$CallCompletionRoutine$25$anon10_Then#1, inline$CallCompletionRoutine$25$anon10_Else#1;
-
- inline$CallCompletionRoutine$25$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$25$anon1#1;
-
- inline$CallCompletionRoutine$25$anon1#1:
- goto inline$CallCompletionRoutine$25$label_10#1;
-
- inline$CallCompletionRoutine$25$label_10#1:
- goto inline$CallCompletionRoutine$25$label_11#1;
-
- inline$CallCompletionRoutine$25$label_11#1:
- havoc inline$CallCompletionRoutine$25$myNondetVar_0;
- inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$myNondetVar_0;
- goto inline$CallCompletionRoutine$25$label_12#1;
-
- inline$CallCompletionRoutine$25$label_12#1:
- havoc inline$CallCompletionRoutine$25$myNondetVar_0;
- inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$myNondetVar_0;
- goto inline$CallCompletionRoutine$25$label_13#1;
-
- inline$CallCompletionRoutine$25$label_13#1:
- havoc inline$CallCompletionRoutine$25$myNondetVar_0;
- goto inline$CallCompletionRoutine$25$label_14#1;
-
- inline$CallCompletionRoutine$25$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$129$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$129$Entry#1:
- inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$129$start#1;
-
- inline$IoGetCurrentIrpStackLocation$129$start#1:
- inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$129$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$129$label_3_true#1, inline$IoGetCurrentIrpStackLocation$129$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$129$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$129$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$129$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$129$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$129$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$129$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$129$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$129$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$129$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$129$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$129$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$129$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$129$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$129$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$129$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$129$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$129$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$129$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$129$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$129$Return#1:
- goto inline$CallCompletionRoutine$25$label_14$1#1;
-
- inline$CallCompletionRoutine$25$label_14$1#1:
- goto inline$CallCompletionRoutine$25$anon11_Then#1, inline$CallCompletionRoutine$25$anon11_Else#1;
-
- inline$CallCompletionRoutine$25$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$25$anon3#1;
-
- inline$CallCompletionRoutine$25$anon3#1:
- goto inline$CallCompletionRoutine$25$label_17#1;
-
- inline$CallCompletionRoutine$25$label_17#1:
- goto inline$CallCompletionRoutine$25$label_18#1;
-
- inline$CallCompletionRoutine$25$label_18#1:
- goto inline$CallCompletionRoutine$25$label_18_true#1, inline$CallCompletionRoutine$25$label_18_false#1;
-
- inline$CallCompletionRoutine$25$label_18_false#1:
- assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$25$label_1#1;
-
- inline$CallCompletionRoutine$25$label_18_true#1:
- assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$25$label_19#1;
-
- inline$CallCompletionRoutine$25$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$25$label_20#1;
-
- inline$CallCompletionRoutine$25$label_20#1:
- goto inline$CallCompletionRoutine$25$label_20_icall_1#1, inline$CallCompletionRoutine$25$label_20_icall_2#1, inline$CallCompletionRoutine$25$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$25$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$25$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$25$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$25$Entry#1:
- inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$25$start#1;
-
- inline$BDLSystemPowerIoCompletion$25$start#1:
- call inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$25$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_4#1:
- inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_6#1:
- inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$25$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$25$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$25$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$131$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$131$Entry#1:
- inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$131$start#1;
-
- inline$IoGetCurrentIrpStackLocation$131$start#1:
- inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$131$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$131$label_3_true#1, inline$IoGetCurrentIrpStackLocation$131$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$131$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$131$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$131$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$131$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$131$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$131$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$131$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$131$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$131$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$131$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$131$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$131$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$131$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$131$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$131$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$131$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$131$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$131$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$131$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$131$Return#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon36_Then#1, inline$BDLSystemPowerIoCompletion$25$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_15#1:
- goto inline$BDLGetDebugLevel$640$Entry#1;
-
- inline$BDLGetDebugLevel$640$Entry#1:
- goto inline$BDLGetDebugLevel$640$start#1;
-
- inline$BDLGetDebugLevel$640$start#1:
- goto inline$BDLGetDebugLevel$640$label_3#1;
-
- inline$BDLGetDebugLevel$640$label_3#1:
- havoc inline$BDLGetDebugLevel$640$myNondetVar_0;
- inline$BDLGetDebugLevel$640$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$640$myNondetVar_0;
- goto inline$BDLGetDebugLevel$640$label_1#1;
-
- inline$BDLGetDebugLevel$640$label_1#1:
- goto inline$BDLGetDebugLevel$640$Return#1;
-
- inline$BDLGetDebugLevel$640$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$640$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon37_Then#1, inline$BDLSystemPowerIoCompletion$25$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_18_true#1, inline$BDLSystemPowerIoCompletion$25$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_22#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_23#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_24#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$25$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_19#1:
- goto inline$BDLGetDebugLevel$641$Entry#1;
-
- inline$BDLGetDebugLevel$641$Entry#1:
- goto inline$BDLGetDebugLevel$641$start#1;
-
- inline$BDLGetDebugLevel$641$start#1:
- goto inline$BDLGetDebugLevel$641$label_3#1;
-
- inline$BDLGetDebugLevel$641$label_3#1:
- havoc inline$BDLGetDebugLevel$641$myNondetVar_0;
- inline$BDLGetDebugLevel$641$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$641$myNondetVar_0;
- goto inline$BDLGetDebugLevel$641$label_1#1;
-
- inline$BDLGetDebugLevel$641$label_1#1:
- goto inline$BDLGetDebugLevel$641$Return#1;
-
- inline$BDLGetDebugLevel$641$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$641$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon38_Then#1, inline$BDLSystemPowerIoCompletion$25$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_28_true#1, inline$BDLSystemPowerIoCompletion$25$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_32#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_33#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_34#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$25$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_29#1:
- goto inline$BDLGetDebugLevel$642$Entry#1;
-
- inline$BDLGetDebugLevel$642$Entry#1:
- goto inline$BDLGetDebugLevel$642$start#1;
-
- inline$BDLGetDebugLevel$642$start#1:
- goto inline$BDLGetDebugLevel$642$label_3#1;
-
- inline$BDLGetDebugLevel$642$label_3#1:
- havoc inline$BDLGetDebugLevel$642$myNondetVar_0;
- inline$BDLGetDebugLevel$642$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$642$myNondetVar_0;
- goto inline$BDLGetDebugLevel$642$label_1#1;
-
- inline$BDLGetDebugLevel$642$label_1#1:
- goto inline$BDLGetDebugLevel$642$Return#1;
-
- inline$BDLGetDebugLevel$642$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$642$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon39_Then#1, inline$BDLSystemPowerIoCompletion$25$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_38_true#1, inline$BDLSystemPowerIoCompletion$25$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_39_true#1, inline$BDLSystemPowerIoCompletion$25$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$25$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$25$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$25$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_106_true#1, inline$BDLSystemPowerIoCompletion$25$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_142#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_143#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$25$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$25$myNondetVar_0, inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$25$anon50_Then#1, inline$BDLSystemPowerIoCompletion$25$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_112#1:
- inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$25$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_113_true#1, inline$BDLSystemPowerIoCompletion$25$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$25$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_117#1:
- goto inline$BDLGetDebugLevel$649$Entry#1;
-
- inline$BDLGetDebugLevel$649$Entry#1:
- goto inline$BDLGetDebugLevel$649$start#1;
-
- inline$BDLGetDebugLevel$649$start#1:
- goto inline$BDLGetDebugLevel$649$label_3#1;
-
- inline$BDLGetDebugLevel$649$label_3#1:
- havoc inline$BDLGetDebugLevel$649$myNondetVar_0;
- inline$BDLGetDebugLevel$649$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$649$myNondetVar_0;
- goto inline$BDLGetDebugLevel$649$label_1#1;
-
- inline$BDLGetDebugLevel$649$label_1#1:
- goto inline$BDLGetDebugLevel$649$Return#1;
-
- inline$BDLGetDebugLevel$649$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$649$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon51_Then#1, inline$BDLSystemPowerIoCompletion$25$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_120_true#1, inline$BDLSystemPowerIoCompletion$25$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_124#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_125#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_126#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$25$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_121#1:
- goto inline$BDLGetDebugLevel$650$Entry#1;
-
- inline$BDLGetDebugLevel$650$Entry#1:
- goto inline$BDLGetDebugLevel$650$start#1;
-
- inline$BDLGetDebugLevel$650$start#1:
- goto inline$BDLGetDebugLevel$650$label_3#1;
-
- inline$BDLGetDebugLevel$650$label_3#1:
- havoc inline$BDLGetDebugLevel$650$myNondetVar_0;
- inline$BDLGetDebugLevel$650$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$650$myNondetVar_0;
- goto inline$BDLGetDebugLevel$650$label_1#1;
-
- inline$BDLGetDebugLevel$650$label_1#1:
- goto inline$BDLGetDebugLevel$650$Return#1;
-
- inline$BDLGetDebugLevel$650$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$650$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon52_Then#1, inline$BDLSystemPowerIoCompletion$25$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_130_true#1, inline$BDLSystemPowerIoCompletion$25$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_134#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_135#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_136#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$25$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_131#1:
- goto inline$BDLGetDebugLevel$651$Entry#1;
-
- inline$BDLGetDebugLevel$651$Entry#1:
- goto inline$BDLGetDebugLevel$651$start#1;
-
- inline$BDLGetDebugLevel$651$start#1:
- goto inline$BDLGetDebugLevel$651$label_3#1;
-
- inline$BDLGetDebugLevel$651$label_3#1:
- havoc inline$BDLGetDebugLevel$651$myNondetVar_0;
- inline$BDLGetDebugLevel$651$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$651$myNondetVar_0;
- goto inline$BDLGetDebugLevel$651$label_1#1;
-
- inline$BDLGetDebugLevel$651$label_1#1:
- goto inline$BDLGetDebugLevel$651$Return#1;
-
- inline$BDLGetDebugLevel$651$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$651$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon53_Then#1, inline$BDLSystemPowerIoCompletion$25$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_140_true#1, inline$BDLSystemPowerIoCompletion$25$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$25$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_115#1:
- inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$25$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$25$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_43#1:
- goto inline$BDLGetDebugLevel$643$Entry#1;
-
- inline$BDLGetDebugLevel$643$Entry#1:
- goto inline$BDLGetDebugLevel$643$start#1;
-
- inline$BDLGetDebugLevel$643$start#1:
- goto inline$BDLGetDebugLevel$643$label_3#1;
-
- inline$BDLGetDebugLevel$643$label_3#1:
- havoc inline$BDLGetDebugLevel$643$myNondetVar_0;
- inline$BDLGetDebugLevel$643$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$643$myNondetVar_0;
- goto inline$BDLGetDebugLevel$643$label_1#1;
-
- inline$BDLGetDebugLevel$643$label_1#1:
- goto inline$BDLGetDebugLevel$643$Return#1;
-
- inline$BDLGetDebugLevel$643$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$643$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon40_Then#1, inline$BDLSystemPowerIoCompletion$25$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_46_true#1, inline$BDLSystemPowerIoCompletion$25$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_50#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_51#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_52#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$25$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_47#1:
- goto inline$BDLGetDebugLevel$644$Entry#1;
-
- inline$BDLGetDebugLevel$644$Entry#1:
- goto inline$BDLGetDebugLevel$644$start#1;
-
- inline$BDLGetDebugLevel$644$start#1:
- goto inline$BDLGetDebugLevel$644$label_3#1;
-
- inline$BDLGetDebugLevel$644$label_3#1:
- havoc inline$BDLGetDebugLevel$644$myNondetVar_0;
- inline$BDLGetDebugLevel$644$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$644$myNondetVar_0;
- goto inline$BDLGetDebugLevel$644$label_1#1;
-
- inline$BDLGetDebugLevel$644$label_1#1:
- goto inline$BDLGetDebugLevel$644$Return#1;
-
- inline$BDLGetDebugLevel$644$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$644$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon41_Then#1, inline$BDLSystemPowerIoCompletion$25$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_56_true#1, inline$BDLSystemPowerIoCompletion$25$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_60#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_61#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_62#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$25$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_57#1:
- goto inline$BDLGetDebugLevel$645$Entry#1;
-
- inline$BDLGetDebugLevel$645$Entry#1:
- goto inline$BDLGetDebugLevel$645$start#1;
-
- inline$BDLGetDebugLevel$645$start#1:
- goto inline$BDLGetDebugLevel$645$label_3#1;
-
- inline$BDLGetDebugLevel$645$label_3#1:
- havoc inline$BDLGetDebugLevel$645$myNondetVar_0;
- inline$BDLGetDebugLevel$645$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$645$myNondetVar_0;
- goto inline$BDLGetDebugLevel$645$label_1#1;
-
- inline$BDLGetDebugLevel$645$label_1#1:
- goto inline$BDLGetDebugLevel$645$Return#1;
-
- inline$BDLGetDebugLevel$645$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$645$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon42_Then#1, inline$BDLSystemPowerIoCompletion$25$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_66_true#1, inline$BDLSystemPowerIoCompletion$25$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$25$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$25$anon43_Then#1, inline$BDLSystemPowerIoCompletion$25$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$25$anon44_Then#1, inline$BDLSystemPowerIoCompletion$25$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_74#1:
- goto inline$storm_IoCompleteRequest$52$Entry#1;
-
- inline$storm_IoCompleteRequest$52$Entry#1:
- inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$52$start#1;
-
- inline$storm_IoCompleteRequest$52$start#1:
- inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$52$label_3#1;
-
- inline$storm_IoCompleteRequest$52$label_3#1:
- call inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$52$label_6#1;
-
- inline$storm_IoCompleteRequest$52$label_6#1:
- goto inline$storm_IoCompleteRequest$52$label_6_true#1, inline$storm_IoCompleteRequest$52$label_6_false#1;
-
- inline$storm_IoCompleteRequest$52$label_6_false#1:
- assume inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$52$label_7#1;
-
- inline$storm_IoCompleteRequest$52$label_6_true#1:
- assume inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$52$label_8#1;
-
- inline$storm_IoCompleteRequest$52$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$52$anon3_Then#1, inline$storm_IoCompleteRequest$52$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$52$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$52$anon1#1;
-
- inline$storm_IoCompleteRequest$52$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$52$label_9#1;
-
- inline$storm_IoCompleteRequest$52$label_9#1:
- goto inline$storm_IoCompleteRequest$52$label_9_true#1, inline$storm_IoCompleteRequest$52$label_9_false#1;
-
- inline$storm_IoCompleteRequest$52$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$52$label_10#1;
-
- inline$storm_IoCompleteRequest$52$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$52$label_1#1;
-
- inline$storm_IoCompleteRequest$52$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$52$label_7#1;
-
- inline$storm_IoCompleteRequest$52$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$52$label_1#1;
-
- inline$storm_IoCompleteRequest$52$label_1#1:
- goto inline$storm_IoCompleteRequest$52$Return#1;
-
- inline$storm_IoCompleteRequest$52$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$52$Return#1;
-
- inline$storm_IoCompleteRequest$52$Return#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon45_Then#1, inline$BDLSystemPowerIoCompletion$25$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$25$anon46_Then#1, inline$BDLSystemPowerIoCompletion$25$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_80#1:
- goto inline$BDLGetDebugLevel$646$Entry#1;
-
- inline$BDLGetDebugLevel$646$Entry#1:
- goto inline$BDLGetDebugLevel$646$start#1;
-
- inline$BDLGetDebugLevel$646$start#1:
- goto inline$BDLGetDebugLevel$646$label_3#1;
-
- inline$BDLGetDebugLevel$646$label_3#1:
- havoc inline$BDLGetDebugLevel$646$myNondetVar_0;
- inline$BDLGetDebugLevel$646$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$646$myNondetVar_0;
- goto inline$BDLGetDebugLevel$646$label_1#1;
-
- inline$BDLGetDebugLevel$646$label_1#1:
- goto inline$BDLGetDebugLevel$646$Return#1;
-
- inline$BDLGetDebugLevel$646$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$646$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon47_Then#1, inline$BDLSystemPowerIoCompletion$25$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_83_true#1, inline$BDLSystemPowerIoCompletion$25$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_87#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_88#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_89#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$25$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_84#1:
- goto inline$BDLGetDebugLevel$647$Entry#1;
-
- inline$BDLGetDebugLevel$647$Entry#1:
- goto inline$BDLGetDebugLevel$647$start#1;
-
- inline$BDLGetDebugLevel$647$start#1:
- goto inline$BDLGetDebugLevel$647$label_3#1;
-
- inline$BDLGetDebugLevel$647$label_3#1:
- havoc inline$BDLGetDebugLevel$647$myNondetVar_0;
- inline$BDLGetDebugLevel$647$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$647$myNondetVar_0;
- goto inline$BDLGetDebugLevel$647$label_1#1;
-
- inline$BDLGetDebugLevel$647$label_1#1:
- goto inline$BDLGetDebugLevel$647$Return#1;
-
- inline$BDLGetDebugLevel$647$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$647$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon48_Then#1, inline$BDLSystemPowerIoCompletion$25$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_93_true#1, inline$BDLSystemPowerIoCompletion$25$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_97#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_98#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_99#1:
- call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$25$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$25$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_94#1:
- goto inline$BDLGetDebugLevel$648$Entry#1;
-
- inline$BDLGetDebugLevel$648$Entry#1:
- goto inline$BDLGetDebugLevel$648$start#1;
-
- inline$BDLGetDebugLevel$648$start#1:
- goto inline$BDLGetDebugLevel$648$label_3#1;
-
- inline$BDLGetDebugLevel$648$label_3#1:
- havoc inline$BDLGetDebugLevel$648$myNondetVar_0;
- inline$BDLGetDebugLevel$648$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$648$myNondetVar_0;
- goto inline$BDLGetDebugLevel$648$label_1#1;
-
- inline$BDLGetDebugLevel$648$label_1#1:
- goto inline$BDLGetDebugLevel$648$Return#1;
-
- inline$BDLGetDebugLevel$648$Return#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$648$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$25$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$25$anon49_Then#1, inline$BDLSystemPowerIoCompletion$25$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_103_true#1, inline$BDLSystemPowerIoCompletion$25$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$25$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$25$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_104#1:
- inline$BDLSystemPowerIoCompletion$25$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$25$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$25$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$25$Return#1;
-
- inline$BDLSystemPowerIoCompletion$25$Return#1:
- inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$25$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$25$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$25$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$25$anon14_Then#1, inline$CallCompletionRoutine$25$anon14_Else#1;
-
- inline$CallCompletionRoutine$25$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$25$anon9#1;
-
- inline$CallCompletionRoutine$25$anon9#1:
- goto inline$CallCompletionRoutine$25$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$25$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$25$Return#1;
-
- inline$CallCompletionRoutine$25$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$25$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$25$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$25$Entry#1:
- inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$25$start#1;
-
- inline$BDLDevicePowerIoCompletion$25$start#1:
- call inline$BDLDevicePowerIoCompletion$25$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$25$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_4#1:
- inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_6#1:
- inline$BDLDevicePowerIoCompletion$25$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$25$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$25$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$25$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$130$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$130$Entry#1:
- inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$130$start#1;
-
- inline$IoGetCurrentIrpStackLocation$130$start#1:
- inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$130$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$130$label_3_true#1, inline$IoGetCurrentIrpStackLocation$130$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$130$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$130$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$130$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$130$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$130$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$130$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$130$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$130$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$130$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$130$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$130$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$130$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$130$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$130$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$130$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$130$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$130$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$130$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$130$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$130$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$130$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$130$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$130$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon30_Then#1, inline$BDLDevicePowerIoCompletion$25$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_13#1:
- inline$BDLDevicePowerIoCompletion$25$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$25$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$25$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_17#1:
- goto inline$BDLGetDebugLevel$631$Entry#1;
-
- inline$BDLGetDebugLevel$631$Entry#1:
- goto inline$BDLGetDebugLevel$631$start#1;
-
- inline$BDLGetDebugLevel$631$start#1:
- goto inline$BDLGetDebugLevel$631$label_3#1;
-
- inline$BDLGetDebugLevel$631$label_3#1:
- havoc inline$BDLGetDebugLevel$631$myNondetVar_0;
- inline$BDLGetDebugLevel$631$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$631$myNondetVar_0;
- goto inline$BDLGetDebugLevel$631$label_1#1;
-
- inline$BDLGetDebugLevel$631$label_1#1:
- goto inline$BDLGetDebugLevel$631$Return#1;
-
- inline$BDLGetDebugLevel$631$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$631$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon31_Then#1, inline$BDLDevicePowerIoCompletion$25$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_20_true#1, inline$BDLDevicePowerIoCompletion$25$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_24#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_25#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_26#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$25$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_21#1:
- goto inline$BDLGetDebugLevel$632$Entry#1;
-
- inline$BDLGetDebugLevel$632$Entry#1:
- goto inline$BDLGetDebugLevel$632$start#1;
-
- inline$BDLGetDebugLevel$632$start#1:
- goto inline$BDLGetDebugLevel$632$label_3#1;
-
- inline$BDLGetDebugLevel$632$label_3#1:
- havoc inline$BDLGetDebugLevel$632$myNondetVar_0;
- inline$BDLGetDebugLevel$632$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$632$myNondetVar_0;
- goto inline$BDLGetDebugLevel$632$label_1#1;
-
- inline$BDLGetDebugLevel$632$label_1#1:
- goto inline$BDLGetDebugLevel$632$Return#1;
-
- inline$BDLGetDebugLevel$632$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$632$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon32_Then#1, inline$BDLDevicePowerIoCompletion$25$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_30_true#1, inline$BDLDevicePowerIoCompletion$25$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_34#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_35#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_36#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$25$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_31#1:
- goto inline$BDLGetDebugLevel$633$Entry#1;
-
- inline$BDLGetDebugLevel$633$Entry#1:
- goto inline$BDLGetDebugLevel$633$start#1;
-
- inline$BDLGetDebugLevel$633$start#1:
- goto inline$BDLGetDebugLevel$633$label_3#1;
-
- inline$BDLGetDebugLevel$633$label_3#1:
- havoc inline$BDLGetDebugLevel$633$myNondetVar_0;
- inline$BDLGetDebugLevel$633$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$633$myNondetVar_0;
- goto inline$BDLGetDebugLevel$633$label_1#1;
-
- inline$BDLGetDebugLevel$633$label_1#1:
- goto inline$BDLGetDebugLevel$633$Return#1;
-
- inline$BDLGetDebugLevel$633$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$633$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon33_Then#1, inline$BDLDevicePowerIoCompletion$25$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_40_true#1, inline$BDLDevicePowerIoCompletion$25$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_41_true#1, inline$BDLDevicePowerIoCompletion$25$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$25$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$25$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_44_true#1, inline$BDLDevicePowerIoCompletion$25$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$25$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_45_true#1, inline$BDLDevicePowerIoCompletion$25$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$25$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$25$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$25$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$25$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$25$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$25$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_54#1:
- inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$25$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_55_true#1, inline$BDLDevicePowerIoCompletion$25$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_56#1:
- call inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$25$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$25$anon34_Then#1, inline$BDLDevicePowerIoCompletion$25$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_59#1:
- goto inline$BDLGetDebugLevel$634$Entry#1;
-
- inline$BDLGetDebugLevel$634$Entry#1:
- goto inline$BDLGetDebugLevel$634$start#1;
-
- inline$BDLGetDebugLevel$634$start#1:
- goto inline$BDLGetDebugLevel$634$label_3#1;
-
- inline$BDLGetDebugLevel$634$label_3#1:
- havoc inline$BDLGetDebugLevel$634$myNondetVar_0;
- inline$BDLGetDebugLevel$634$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$634$myNondetVar_0;
- goto inline$BDLGetDebugLevel$634$label_1#1;
-
- inline$BDLGetDebugLevel$634$label_1#1:
- goto inline$BDLGetDebugLevel$634$Return#1;
-
- inline$BDLGetDebugLevel$634$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$634$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon35_Then#1, inline$BDLDevicePowerIoCompletion$25$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_62_true#1, inline$BDLDevicePowerIoCompletion$25$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_66#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_67#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_68#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$25$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_63#1:
- goto inline$BDLGetDebugLevel$635$Entry#1;
-
- inline$BDLGetDebugLevel$635$Entry#1:
- goto inline$BDLGetDebugLevel$635$start#1;
-
- inline$BDLGetDebugLevel$635$start#1:
- goto inline$BDLGetDebugLevel$635$label_3#1;
-
- inline$BDLGetDebugLevel$635$label_3#1:
- havoc inline$BDLGetDebugLevel$635$myNondetVar_0;
- inline$BDLGetDebugLevel$635$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$635$myNondetVar_0;
- goto inline$BDLGetDebugLevel$635$label_1#1;
-
- inline$BDLGetDebugLevel$635$label_1#1:
- goto inline$BDLGetDebugLevel$635$Return#1;
-
- inline$BDLGetDebugLevel$635$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$635$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon36_Then#1, inline$BDLDevicePowerIoCompletion$25$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_72_true#1, inline$BDLDevicePowerIoCompletion$25$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_76#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_77#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_78#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$25$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_73#1:
- goto inline$BDLGetDebugLevel$636$Entry#1;
-
- inline$BDLGetDebugLevel$636$Entry#1:
- goto inline$BDLGetDebugLevel$636$start#1;
-
- inline$BDLGetDebugLevel$636$start#1:
- goto inline$BDLGetDebugLevel$636$label_3#1;
-
- inline$BDLGetDebugLevel$636$label_3#1:
- havoc inline$BDLGetDebugLevel$636$myNondetVar_0;
- inline$BDLGetDebugLevel$636$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$636$myNondetVar_0;
- goto inline$BDLGetDebugLevel$636$label_1#1;
-
- inline$BDLGetDebugLevel$636$label_1#1:
- goto inline$BDLGetDebugLevel$636$Return#1;
-
- inline$BDLGetDebugLevel$636$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$636$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon37_Then#1, inline$BDLDevicePowerIoCompletion$25$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_82_true#1, inline$BDLDevicePowerIoCompletion$25$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$25$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$25$anon38_Then#1, inline$BDLDevicePowerIoCompletion$25$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$25$anon39_Then#1, inline$BDLDevicePowerIoCompletion$25$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_92#1:
- goto inline$storm_IoCompleteRequest$51$Entry#1;
-
- inline$storm_IoCompleteRequest$51$Entry#1:
- inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$51$start#1;
-
- inline$storm_IoCompleteRequest$51$start#1:
- inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$51$label_3#1;
-
- inline$storm_IoCompleteRequest$51$label_3#1:
- call inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$51$label_6#1;
-
- inline$storm_IoCompleteRequest$51$label_6#1:
- goto inline$storm_IoCompleteRequest$51$label_6_true#1, inline$storm_IoCompleteRequest$51$label_6_false#1;
-
- inline$storm_IoCompleteRequest$51$label_6_false#1:
- assume inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$51$label_7#1;
-
- inline$storm_IoCompleteRequest$51$label_6_true#1:
- assume inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$51$label_8#1;
-
- inline$storm_IoCompleteRequest$51$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$51$anon3_Then#1, inline$storm_IoCompleteRequest$51$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$51$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$51$anon1#1;
-
- inline$storm_IoCompleteRequest$51$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$51$label_9#1;
-
- inline$storm_IoCompleteRequest$51$label_9#1:
- goto inline$storm_IoCompleteRequest$51$label_9_true#1, inline$storm_IoCompleteRequest$51$label_9_false#1;
-
- inline$storm_IoCompleteRequest$51$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$51$label_10#1;
-
- inline$storm_IoCompleteRequest$51$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$51$label_1#1;
-
- inline$storm_IoCompleteRequest$51$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$51$label_7#1;
-
- inline$storm_IoCompleteRequest$51$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$51$label_1#1;
-
- inline$storm_IoCompleteRequest$51$label_1#1:
- goto inline$storm_IoCompleteRequest$51$Return#1;
-
- inline$storm_IoCompleteRequest$51$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$51$Return#1;
-
- inline$storm_IoCompleteRequest$51$Return#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon40_Then#1, inline$BDLDevicePowerIoCompletion$25$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$25$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$25$anon41_Then#1, inline$BDLDevicePowerIoCompletion$25$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_98#1:
- goto inline$BDLGetDebugLevel$637$Entry#1;
-
- inline$BDLGetDebugLevel$637$Entry#1:
- goto inline$BDLGetDebugLevel$637$start#1;
-
- inline$BDLGetDebugLevel$637$start#1:
- goto inline$BDLGetDebugLevel$637$label_3#1;
-
- inline$BDLGetDebugLevel$637$label_3#1:
- havoc inline$BDLGetDebugLevel$637$myNondetVar_0;
- inline$BDLGetDebugLevel$637$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$637$myNondetVar_0;
- goto inline$BDLGetDebugLevel$637$label_1#1;
-
- inline$BDLGetDebugLevel$637$label_1#1:
- goto inline$BDLGetDebugLevel$637$Return#1;
-
- inline$BDLGetDebugLevel$637$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$637$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon42_Then#1, inline$BDLDevicePowerIoCompletion$25$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_101_true#1, inline$BDLDevicePowerIoCompletion$25$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_105#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_106#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_107#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$25$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_102#1:
- goto inline$BDLGetDebugLevel$638$Entry#1;
-
- inline$BDLGetDebugLevel$638$Entry#1:
- goto inline$BDLGetDebugLevel$638$start#1;
-
- inline$BDLGetDebugLevel$638$start#1:
- goto inline$BDLGetDebugLevel$638$label_3#1;
-
- inline$BDLGetDebugLevel$638$label_3#1:
- havoc inline$BDLGetDebugLevel$638$myNondetVar_0;
- inline$BDLGetDebugLevel$638$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$638$myNondetVar_0;
- goto inline$BDLGetDebugLevel$638$label_1#1;
-
- inline$BDLGetDebugLevel$638$label_1#1:
- goto inline$BDLGetDebugLevel$638$Return#1;
-
- inline$BDLGetDebugLevel$638$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$638$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon43_Then#1, inline$BDLDevicePowerIoCompletion$25$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_111_true#1, inline$BDLDevicePowerIoCompletion$25$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_115#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_116#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_117#1:
- call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$25$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$25$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_112#1:
- goto inline$BDLGetDebugLevel$639$Entry#1;
-
- inline$BDLGetDebugLevel$639$Entry#1:
- goto inline$BDLGetDebugLevel$639$start#1;
-
- inline$BDLGetDebugLevel$639$start#1:
- goto inline$BDLGetDebugLevel$639$label_3#1;
-
- inline$BDLGetDebugLevel$639$label_3#1:
- havoc inline$BDLGetDebugLevel$639$myNondetVar_0;
- inline$BDLGetDebugLevel$639$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$639$myNondetVar_0;
- goto inline$BDLGetDebugLevel$639$label_1#1;
-
- inline$BDLGetDebugLevel$639$label_1#1:
- goto inline$BDLGetDebugLevel$639$Return#1;
-
- inline$BDLGetDebugLevel$639$Return#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$639$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$25$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$25$anon44_Then#1, inline$BDLDevicePowerIoCompletion$25$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_121_true#1, inline$BDLDevicePowerIoCompletion$25$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$25$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$25$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_122#1:
- inline$BDLDevicePowerIoCompletion$25$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$25$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$25$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$25$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$25$Return#1;
-
- inline$BDLDevicePowerIoCompletion$25$Return#1:
- inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$25$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$25$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$25$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$25$anon13_Then#1, inline$CallCompletionRoutine$25$anon13_Else#1;
-
- inline$CallCompletionRoutine$25$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$25$anon7#1;
-
- inline$CallCompletionRoutine$25$anon7#1:
- goto inline$CallCompletionRoutine$25$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$25$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$25$Return#1;
-
- inline$CallCompletionRoutine$25$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$25$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$25$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$25$Entry#1:
- inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$25$start#1;
-
- inline$BDLCallDriverCompletionRoutine$25$start#1:
- inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$25$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$25$label_3_true#1, inline$BDLCallDriverCompletionRoutine$25$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$25$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$25$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$25$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$25$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_6#1:
- goto inline$storm_KeSetEvent$27$Entry#1;
-
- inline$storm_KeSetEvent$27$Entry#1:
- inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$27$start#1;
-
- inline$storm_KeSetEvent$27$start#1:
- inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$27$label_3#1;
-
- inline$storm_KeSetEvent$27$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$27$label_1#1;
-
- inline$storm_KeSetEvent$27$label_1#1:
- goto inline$storm_KeSetEvent$27$Return#1;
-
- inline$storm_KeSetEvent$27$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$25$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$25$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$25$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$25$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$25$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$25$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$25$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_9#1:
- inline$BDLCallDriverCompletionRoutine$25$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$25$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$25$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$25$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$25$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$25$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$25$Return#1:
- inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$25$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$25$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$25$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$25$anon12_Then#1, inline$CallCompletionRoutine$25$anon12_Else#1;
-
- inline$CallCompletionRoutine$25$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$25$anon5#1;
-
- inline$CallCompletionRoutine$25$anon5#1:
- goto inline$CallCompletionRoutine$25$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$25$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$25$label_23#1;
-
- inline$CallCompletionRoutine$25$label_23#1:
- inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$25$label_24#1;
-
- inline$CallCompletionRoutine$25$label_24#1:
- goto inline$CallCompletionRoutine$25$label_24_true#1, inline$CallCompletionRoutine$25$label_24_false#1;
-
- inline$CallCompletionRoutine$25$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$25$label_1#1;
-
- inline$CallCompletionRoutine$25$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$25$label_25#1;
-
- inline$CallCompletionRoutine$25$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$25$label_1#1;
-
- inline$CallCompletionRoutine$25$label_1#1:
- goto inline$CallCompletionRoutine$25$Return#1;
-
- inline$CallCompletionRoutine$25$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$25$Return#1;
-
- inline$CallCompletionRoutine$25$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$25$Return#1;
-
- inline$CallCompletionRoutine$25$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$25$Return#1;
-
- inline$CallCompletionRoutine$25$Return#1:
- goto inline$storm_IoCallDriver$12$label_39$1#1;
-
- inline$storm_IoCallDriver$12$label_39$1#1:
- goto inline$storm_IoCallDriver$12$anon15_Then#1, inline$storm_IoCallDriver$12$anon15_Else#1;
-
- inline$storm_IoCallDriver$12$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$12$anon10#1;
-
- inline$storm_IoCallDriver$12$anon10#1:
- goto inline$storm_IoCallDriver$12$label_36#1;
-
- inline$storm_IoCallDriver$12$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$12$Return#1;
-
- inline$storm_IoCallDriver$12$label_27_case_0#1:
- assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$12$label_28#1;
-
- inline$storm_IoCallDriver$12$label_28#1:
- inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$12$label_42#1;
-
- inline$storm_IoCallDriver$12$label_42#1:
- goto inline$storm_IoCallDriver$12$label_43#1;
-
- inline$storm_IoCallDriver$12$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$12$label_36#1;
-
- inline$storm_IoCallDriver$12$label_36#1:
- inline$storm_IoCallDriver$12$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$12$label_1#1;
-
- inline$storm_IoCallDriver$12$label_1#1:
- goto inline$storm_IoCallDriver$12$Return#1;
-
- inline$storm_IoCallDriver$12$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$12$Return#1;
-
- inline$storm_IoCallDriver$12$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$12$Return#1;
-
- inline$storm_IoCallDriver$12$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$12$Return#1;
-
- inline$storm_IoCallDriver$12$Return#1:
- inline$storm_PoCallDriver$5$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$12$$result.storm_IoCallDriver$456.0$1$;
- goto inline$storm_PoCallDriver$5$label_3$1#1;
-
- inline$storm_PoCallDriver$5$label_3$1#1:
- goto inline$storm_PoCallDriver$5$anon2_Then#1, inline$storm_PoCallDriver$5$anon2_Else#1;
-
- inline$storm_PoCallDriver$5$anon2_Else#1:
- assume !raiseException;
- goto inline$storm_PoCallDriver$5$anon1#1;
-
- inline$storm_PoCallDriver$5$anon1#1:
- goto inline$storm_PoCallDriver$5$label_6#1;
-
- inline$storm_PoCallDriver$5$label_6#1:
- inline$storm_PoCallDriver$5$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$5$$result.storm_IoCallDriver$499.27$2$;
- goto inline$storm_PoCallDriver$5$label_1#1;
-
- inline$storm_PoCallDriver$5$label_1#1:
- goto inline$storm_PoCallDriver$5$Return#1;
-
- inline$storm_PoCallDriver$5$anon2_Then#1:
- assume raiseException;
- goto inline$storm_PoCallDriver$5$Return#1;
-
- inline$storm_PoCallDriver$5$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$5$$result.storm_PoCallDriver$494.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_25$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_25$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon22_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon13#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon13#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_28#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_28#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_PoCallDriver$104.29$3$;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$5$label_29_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_29_false#1:
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_29_true#1:
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_31#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_31#1:
- goto inline$storm_KeWaitForSingleObject$5$Entry#1;
-
- inline$storm_KeWaitForSingleObject$5$Entry#1:
- inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
- goto inline$storm_KeWaitForSingleObject$5$start#1;
-
- inline$storm_KeWaitForSingleObject$5$start#1:
- inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
- inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
- goto inline$storm_KeWaitForSingleObject$5$label_3#1;
-
- inline$storm_KeWaitForSingleObject$5$label_3#1:
- goto inline$storm_KeWaitForSingleObject$5$label_3_true#1, inline$storm_KeWaitForSingleObject$5$label_3_false#1;
-
- inline$storm_KeWaitForSingleObject$5$label_3_false#1:
- assume inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
- goto inline$storm_KeWaitForSingleObject$5$label_4#1;
-
- inline$storm_KeWaitForSingleObject$5$label_4#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$5$anon6_Then#1, inline$storm_KeWaitForSingleObject$5$anon6_Else#1;
-
- inline$storm_KeWaitForSingleObject$5$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$5$anon1#1;
-
- inline$storm_KeWaitForSingleObject$5$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$5$label_13#1;
-
- inline$storm_KeWaitForSingleObject$5$label_13#1:
- inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$5$label_1#1;
-
- inline$storm_KeWaitForSingleObject$5$anon6_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$5$Return#1;
-
- inline$storm_KeWaitForSingleObject$5$label_3_true#1:
- assume inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
- goto inline$storm_KeWaitForSingleObject$5$label_5#1;
-
- inline$storm_KeWaitForSingleObject$5$label_5#1:
- call inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$ := storm_nondet();
- goto inline$storm_KeWaitForSingleObject$5$label_8#1;
-
- inline$storm_KeWaitForSingleObject$5$label_8#1:
- goto inline$storm_KeWaitForSingleObject$5$label_8_true#1, inline$storm_KeWaitForSingleObject$5$label_8_false#1;
-
- inline$storm_KeWaitForSingleObject$5$label_8_false#1:
- assume inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$ == 0;
- goto inline$storm_KeWaitForSingleObject$5$label_9#1;
-
- inline$storm_KeWaitForSingleObject$5$label_9#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$5$anon7_Then#1, inline$storm_KeWaitForSingleObject$5$anon7_Else#1;
-
- inline$storm_KeWaitForSingleObject$5$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$5$anon3#1;
-
- inline$storm_KeWaitForSingleObject$5$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$5$label_12#1;
-
- inline$storm_KeWaitForSingleObject$5$label_12#1:
- inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
- goto inline$storm_KeWaitForSingleObject$5$label_1#1;
-
- inline$storm_KeWaitForSingleObject$5$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$5$Return#1;
-
- inline$storm_KeWaitForSingleObject$5$label_8_true#1:
- assume inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$ != 0;
- goto inline$storm_KeWaitForSingleObject$5$label_10#1;
-
- inline$storm_KeWaitForSingleObject$5$label_10#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$5$anon8_Then#1, inline$storm_KeWaitForSingleObject$5$anon8_Else#1;
-
- inline$storm_KeWaitForSingleObject$5$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$5$anon5#1;
-
- inline$storm_KeWaitForSingleObject$5$anon5#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$5$label_11#1;
-
- inline$storm_KeWaitForSingleObject$5$label_11#1:
- inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$5$label_1#1;
-
- inline$storm_KeWaitForSingleObject$5$label_1#1:
- goto inline$storm_KeWaitForSingleObject$5$Return#1;
-
- inline$storm_KeWaitForSingleObject$5$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$5$Return#1;
-
- inline$storm_KeWaitForSingleObject$5$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_31$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_31$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon23_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$anon15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon15#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_34#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_34#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_KeWaitForSingleObject$116.38$5$;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_35#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_35#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$5$label_35_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_35_false#1:
- assume inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_35_true#1:
- assume inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_37#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_37#1:
- call inline$BDLCallLowerLevelDriverAndWait$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_38#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_38#1:
- call inline$BDLCallLowerLevelDriverAndWait$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_39#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_39#1:
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_36#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
- inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_30#1:
- inline$BDLCallLowerLevelDriverAndWait$5$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
- goto inline$BDLCallLowerLevelDriverAndWait$5$label_1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$label_1#1:
- call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon23_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon22_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon21_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon19_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon18_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon17_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$anon16_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$5$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLCallLowerLevelDriverAndWait$2148.43$13$ := inline$BDLCallLowerLevelDriverAndWait$5$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
- goto inline$BDLPnPCancelStop$0$label_29$1#1;
-
- inline$BDLPnPCancelStop$0$label_29$1#1:
- goto inline$BDLPnPCancelStop$0$anon25_Then#1, inline$BDLPnPCancelStop$0$anon25_Else#1;
-
- inline$BDLPnPCancelStop$0$anon25_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon7#1;
-
- inline$BDLPnPCancelStop$0$anon7#1:
- goto inline$BDLPnPCancelStop$0$label_33#1;
-
- inline$BDLPnPCancelStop$0$label_33#1:
- inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 := inline$BDLPnPCancelStop$0$$result.BDLCallLowerLevelDriverAndWait$2148.43$13$;
- goto inline$BDLPnPCancelStop$0$label_34#1;
-
- inline$BDLPnPCancelStop$0$label_34#1:
- goto inline$BDLPnPCancelStop$0$label_34_true#1, inline$BDLPnPCancelStop$0$label_34_false#1;
-
- inline$BDLPnPCancelStop$0$label_34_false#1:
- assume inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 == 0;
- goto inline$BDLPnPCancelStop$0$label_35#1;
-
- inline$BDLPnPCancelStop$0$label_35#1:
- goto inline$storm_KeSetEvent$28$Entry#1;
-
- inline$storm_KeSetEvent$28$Entry#1:
- inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12);
- goto inline$storm_KeSetEvent$28$start#1;
-
- inline$storm_KeSetEvent$28$start#1:
- inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$28$label_3#1;
-
- inline$storm_KeSetEvent$28$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$28$label_1#1;
-
- inline$storm_KeSetEvent$28$label_1#1:
- goto inline$storm_KeSetEvent$28$Return#1;
-
- inline$storm_KeSetEvent$28$Return#1:
- goto inline$BDLPnPCancelStop$0$label_35$1#1;
-
- inline$BDLPnPCancelStop$0$label_35$1#1:
- goto inline$BDLPnPCancelStop$0$anon26_Then#1, inline$BDLPnPCancelStop$0$anon26_Else#1;
-
- inline$BDLPnPCancelStop$0$anon26_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon9#1;
-
- inline$BDLPnPCancelStop$0$anon9#1:
- goto inline$BDLPnPCancelStop$0$label_62#1;
-
- inline$BDLPnPCancelStop$0$anon26_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$label_34_true#1:
- assume inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 != 0;
- goto inline$BDLPnPCancelStop$0$label_38#1;
-
- inline$BDLPnPCancelStop$0$label_38#1:
- goto inline$BDLGetDebugLevel$652$Entry#1;
-
- inline$BDLGetDebugLevel$652$Entry#1:
- goto inline$BDLGetDebugLevel$652$start#1;
-
- inline$BDLGetDebugLevel$652$start#1:
- goto inline$BDLGetDebugLevel$652$label_3#1;
-
- inline$BDLGetDebugLevel$652$label_3#1:
- havoc inline$BDLGetDebugLevel$652$myNondetVar_0;
- inline$BDLGetDebugLevel$652$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$652$myNondetVar_0;
- goto inline$BDLGetDebugLevel$652$label_1#1;
-
- inline$BDLGetDebugLevel$652$label_1#1:
- goto inline$BDLGetDebugLevel$652$Return#1;
-
- inline$BDLGetDebugLevel$652$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$ := inline$BDLGetDebugLevel$652$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_38$1#1;
-
- inline$BDLPnPCancelStop$0$label_38$1#1:
- goto inline$BDLPnPCancelStop$0$anon27_Then#1, inline$BDLPnPCancelStop$0$anon27_Else#1;
-
- inline$BDLPnPCancelStop$0$anon27_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon11#1;
-
- inline$BDLPnPCancelStop$0$anon11#1:
- goto inline$BDLPnPCancelStop$0$label_41#1;
-
- inline$BDLPnPCancelStop$0$label_41#1:
- goto inline$BDLPnPCancelStop$0$label_41_true#1, inline$BDLPnPCancelStop$0$label_41_false#1;
-
- inline$BDLPnPCancelStop$0$label_41_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$) == 0;
- goto inline$BDLPnPCancelStop$0$label_42#1;
-
- inline$BDLPnPCancelStop$0$label_41_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$) != 0;
- goto inline$BDLPnPCancelStop$0$label_45#1;
-
- inline$BDLPnPCancelStop$0$label_45#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_46#1;
-
- inline$BDLPnPCancelStop$0$label_46#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_47#1;
-
- inline$BDLPnPCancelStop$0$label_47#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_48#1;
-
- inline$BDLPnPCancelStop$0$label_48#1:
- havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$15$;
- goto inline$BDLPnPCancelStop$0$label_42#1;
-
- inline$BDLPnPCancelStop$0$label_42#1:
- goto inline$BDLGetDebugLevel$653$Entry#1;
-
- inline$BDLGetDebugLevel$653$Entry#1:
- goto inline$BDLGetDebugLevel$653$start#1;
-
- inline$BDLGetDebugLevel$653$start#1:
- goto inline$BDLGetDebugLevel$653$label_3#1;
-
- inline$BDLGetDebugLevel$653$label_3#1:
- havoc inline$BDLGetDebugLevel$653$myNondetVar_0;
- inline$BDLGetDebugLevel$653$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$653$myNondetVar_0;
- goto inline$BDLGetDebugLevel$653$label_1#1;
-
- inline$BDLGetDebugLevel$653$label_1#1:
- goto inline$BDLGetDebugLevel$653$Return#1;
-
- inline$BDLGetDebugLevel$653$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$ := inline$BDLGetDebugLevel$653$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_42$1#1;
-
- inline$BDLPnPCancelStop$0$label_42$1#1:
- goto inline$BDLPnPCancelStop$0$anon28_Then#1, inline$BDLPnPCancelStop$0$anon28_Else#1;
-
- inline$BDLPnPCancelStop$0$anon28_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon13#1;
-
- inline$BDLPnPCancelStop$0$anon13#1:
- goto inline$BDLPnPCancelStop$0$label_51#1;
-
- inline$BDLPnPCancelStop$0$label_51#1:
- goto inline$BDLPnPCancelStop$0$label_51_true#1, inline$BDLPnPCancelStop$0$label_51_false#1;
-
- inline$BDLPnPCancelStop$0$label_51_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$) == 0;
- goto inline$BDLPnPCancelStop$0$label_52#1;
-
- inline$BDLPnPCancelStop$0$label_51_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$) != 0;
- goto inline$BDLPnPCancelStop$0$label_55#1;
-
- inline$BDLPnPCancelStop$0$label_55#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_56#1;
-
- inline$BDLPnPCancelStop$0$label_56#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_57#1;
-
- inline$BDLPnPCancelStop$0$label_57#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_58#1;
-
- inline$BDLPnPCancelStop$0$label_58#1:
- havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$20$;
- goto inline$BDLPnPCancelStop$0$label_52#1;
-
- inline$BDLPnPCancelStop$0$label_52#1:
- goto inline$BDLGetDebugLevel$654$Entry#1;
-
- inline$BDLGetDebugLevel$654$Entry#1:
- goto inline$BDLGetDebugLevel$654$start#1;
-
- inline$BDLGetDebugLevel$654$start#1:
- goto inline$BDLGetDebugLevel$654$label_3#1;
-
- inline$BDLGetDebugLevel$654$label_3#1:
- havoc inline$BDLGetDebugLevel$654$myNondetVar_0;
- inline$BDLGetDebugLevel$654$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$654$myNondetVar_0;
- goto inline$BDLGetDebugLevel$654$label_1#1;
-
- inline$BDLGetDebugLevel$654$label_1#1:
- goto inline$BDLGetDebugLevel$654$Return#1;
-
- inline$BDLGetDebugLevel$654$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$ := inline$BDLGetDebugLevel$654$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_52$1#1;
-
- inline$BDLPnPCancelStop$0$label_52$1#1:
- goto inline$BDLPnPCancelStop$0$anon29_Then#1, inline$BDLPnPCancelStop$0$anon29_Else#1;
-
- inline$BDLPnPCancelStop$0$anon29_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon15#1;
-
- inline$BDLPnPCancelStop$0$anon15#1:
- goto inline$BDLPnPCancelStop$0$label_61#1;
-
- inline$BDLPnPCancelStop$0$label_61#1:
- goto inline$BDLPnPCancelStop$0$label_61_true#1, inline$BDLPnPCancelStop$0$label_61_false#1;
-
- inline$BDLPnPCancelStop$0$label_61_false#1:
- assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$, 4) == 0;
- goto inline$BDLPnPCancelStop$0$label_62#1;
-
- inline$BDLPnPCancelStop$0$label_61_true#1:
- assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$, 4) != 0;
- goto inline$BDLPnPCancelStop$0$label_65#1;
-
- inline$BDLPnPCancelStop$0$label_65#1:
- goto inline$BDLPnPCancelStop$0$label_62#1;
-
- inline$BDLPnPCancelStop$0$label_62#1:
- goto inline$BDLGetDebugLevel$655$Entry#1;
-
- inline$BDLGetDebugLevel$655$Entry#1:
- goto inline$BDLGetDebugLevel$655$start#1;
-
- inline$BDLGetDebugLevel$655$start#1:
- goto inline$BDLGetDebugLevel$655$label_3#1;
-
- inline$BDLGetDebugLevel$655$label_3#1:
- havoc inline$BDLGetDebugLevel$655$myNondetVar_0;
- inline$BDLGetDebugLevel$655$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$655$myNondetVar_0;
- goto inline$BDLGetDebugLevel$655$label_1#1;
-
- inline$BDLGetDebugLevel$655$label_1#1:
- goto inline$BDLGetDebugLevel$655$Return#1;
-
- inline$BDLGetDebugLevel$655$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$ := inline$BDLGetDebugLevel$655$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_62$1#1;
-
- inline$BDLPnPCancelStop$0$label_62$1#1:
- goto inline$BDLPnPCancelStop$0$anon30_Then#1, inline$BDLPnPCancelStop$0$anon30_Else#1;
-
- inline$BDLPnPCancelStop$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon17#1;
-
- inline$BDLPnPCancelStop$0$anon17#1:
- goto inline$BDLPnPCancelStop$0$label_66#1;
-
- inline$BDLPnPCancelStop$0$label_66#1:
- goto inline$BDLPnPCancelStop$0$label_66_true#1, inline$BDLPnPCancelStop$0$label_66_false#1;
-
- inline$BDLPnPCancelStop$0$label_66_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$) == 0;
- goto inline$BDLPnPCancelStop$0$label_67#1;
-
- inline$BDLPnPCancelStop$0$label_66_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$) != 0;
- goto inline$BDLPnPCancelStop$0$label_70#1;
-
- inline$BDLPnPCancelStop$0$label_70#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_71#1;
-
- inline$BDLPnPCancelStop$0$label_71#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_72#1;
-
- inline$BDLPnPCancelStop$0$label_72#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_73#1;
-
- inline$BDLPnPCancelStop$0$label_73#1:
- havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$27$;
- goto inline$BDLPnPCancelStop$0$label_67#1;
-
- inline$BDLPnPCancelStop$0$label_67#1:
- goto inline$BDLGetDebugLevel$656$Entry#1;
-
- inline$BDLGetDebugLevel$656$Entry#1:
- goto inline$BDLGetDebugLevel$656$start#1;
-
- inline$BDLGetDebugLevel$656$start#1:
- goto inline$BDLGetDebugLevel$656$label_3#1;
-
- inline$BDLGetDebugLevel$656$label_3#1:
- havoc inline$BDLGetDebugLevel$656$myNondetVar_0;
- inline$BDLGetDebugLevel$656$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$656$myNondetVar_0;
- goto inline$BDLGetDebugLevel$656$label_1#1;
-
- inline$BDLGetDebugLevel$656$label_1#1:
- goto inline$BDLGetDebugLevel$656$Return#1;
-
- inline$BDLGetDebugLevel$656$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$ := inline$BDLGetDebugLevel$656$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_67$1#1;
-
- inline$BDLPnPCancelStop$0$label_67$1#1:
- goto inline$BDLPnPCancelStop$0$anon31_Then#1, inline$BDLPnPCancelStop$0$anon31_Else#1;
-
- inline$BDLPnPCancelStop$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon19#1;
-
- inline$BDLPnPCancelStop$0$anon19#1:
- goto inline$BDLPnPCancelStop$0$label_76#1;
-
- inline$BDLPnPCancelStop$0$label_76#1:
- goto inline$BDLPnPCancelStop$0$label_76_true#1, inline$BDLPnPCancelStop$0$label_76_false#1;
-
- inline$BDLPnPCancelStop$0$label_76_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$) == 0;
- goto inline$BDLPnPCancelStop$0$label_77#1;
-
- inline$BDLPnPCancelStop$0$label_76_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$) != 0;
- goto inline$BDLPnPCancelStop$0$label_80#1;
-
- inline$BDLPnPCancelStop$0$label_80#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_81#1;
-
- inline$BDLPnPCancelStop$0$label_81#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_82#1;
-
- inline$BDLPnPCancelStop$0$label_82#1:
- call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelStop$0$label_83#1;
-
- inline$BDLPnPCancelStop$0$label_83#1:
- havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$32$;
- goto inline$BDLPnPCancelStop$0$label_77#1;
-
- inline$BDLPnPCancelStop$0$label_77#1:
- goto inline$BDLGetDebugLevel$657$Entry#1;
-
- inline$BDLGetDebugLevel$657$Entry#1:
- goto inline$BDLGetDebugLevel$657$start#1;
-
- inline$BDLGetDebugLevel$657$start#1:
- goto inline$BDLGetDebugLevel$657$label_3#1;
-
- inline$BDLGetDebugLevel$657$label_3#1:
- havoc inline$BDLGetDebugLevel$657$myNondetVar_0;
- inline$BDLGetDebugLevel$657$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$657$myNondetVar_0;
- goto inline$BDLGetDebugLevel$657$label_1#1;
-
- inline$BDLGetDebugLevel$657$label_1#1:
- goto inline$BDLGetDebugLevel$657$Return#1;
-
- inline$BDLGetDebugLevel$657$Return#1:
- inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$ := inline$BDLGetDebugLevel$657$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelStop$0$label_77$1#1;
-
- inline$BDLPnPCancelStop$0$label_77$1#1:
- goto inline$BDLPnPCancelStop$0$anon32_Then#1, inline$BDLPnPCancelStop$0$anon32_Else#1;
-
- inline$BDLPnPCancelStop$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelStop$0$anon21#1;
-
- inline$BDLPnPCancelStop$0$anon21#1:
- goto inline$BDLPnPCancelStop$0$label_86#1;
-
- inline$BDLPnPCancelStop$0$label_86#1:
- goto inline$BDLPnPCancelStop$0$label_86_true#1, inline$BDLPnPCancelStop$0$label_86_false#1;
-
- inline$BDLPnPCancelStop$0$label_86_false#1:
- assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$, 4) == 0;
- goto inline$BDLPnPCancelStop$0$label_87#1;
-
- inline$BDLPnPCancelStop$0$label_86_true#1:
- assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$, 4) != 0;
- goto inline$BDLPnPCancelStop$0$label_88#1;
-
- inline$BDLPnPCancelStop$0$label_88#1:
- goto inline$BDLPnPCancelStop$0$label_87#1;
-
- inline$BDLPnPCancelStop$0$label_87#1:
- inline$BDLPnPCancelStop$0$$result.BDLPnPCancelStop$2130.0$1$ := inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12;
- goto inline$BDLPnPCancelStop$0$label_1#1;
-
- inline$BDLPnPCancelStop$0$label_1#1:
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon29_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon28_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon27_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon25_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon24_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon23_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$anon22_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelStop$0$Return#1;
-
- inline$BDLPnPCancelStop$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPCancelStop$925.33$30$ := inline$BDLPnPCancelStop$0$$result.BDLPnPCancelStop$2130.0$1$;
- goto inline$BDLPnP$0$label_131$1#1;
-
- inline$BDLPnP$0$label_131$1#1:
- goto inline$BDLPnP$0$anon73_Then#1, inline$BDLPnP$0$anon73_Else#1;
-
- inline$BDLPnP$0$anon73_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon39#1;
-
- inline$BDLPnP$0$anon39#1:
- goto inline$BDLPnP$0$label_148#1;
-
- inline$BDLPnP$0$label_148#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPCancelStop$925.33$30$;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon73_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_6#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 5;
- goto inline$BDLPnP$0$label_128#1;
-
- inline$BDLPnP$0$label_128#1:
- goto inline$BDLPnPQueryStop$0$Entry#1;
-
- inline$BDLPnPQueryStop$0$Entry#1:
- inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPQueryStop$0$start#1;
-
- inline$BDLPnPQueryStop$0$start#1:
- call inline$BDLPnPQueryStop$0$$irql$5$2082.16$BDLPnPQueryStop$12 := __HAVOC_malloc(1);
- inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12 := inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12_.1;
- inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12 := inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12_.1;
- goto inline$BDLPnPQueryStop$0$label_3#1;
-
- inline$BDLPnPQueryStop$0$label_3#1:
- goto inline$BDLPnPQueryStop$0$label_4#1;
-
- inline$BDLPnPQueryStop$0$label_4#1:
- inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12 := 0;
- goto inline$BDLPnPQueryStop$0$label_5#1;
-
- inline$BDLPnPQueryStop$0$label_5#1:
- goto inline$BDLPnPQueryStop$0$label_6#1;
-
- inline$BDLPnPQueryStop$0$label_6#1:
- goto inline$BDLGetDebugLevel$475$Entry#1;
-
- inline$BDLGetDebugLevel$475$Entry#1:
- goto inline$BDLGetDebugLevel$475$start#1;
-
- inline$BDLGetDebugLevel$475$start#1:
- goto inline$BDLGetDebugLevel$475$label_3#1;
-
- inline$BDLGetDebugLevel$475$label_3#1:
- havoc inline$BDLGetDebugLevel$475$myNondetVar_0;
- inline$BDLGetDebugLevel$475$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$475$myNondetVar_0;
- goto inline$BDLGetDebugLevel$475$label_1#1;
-
- inline$BDLGetDebugLevel$475$label_1#1:
- goto inline$BDLGetDebugLevel$475$Return#1;
-
- inline$BDLGetDebugLevel$475$Return#1:
- inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$ := inline$BDLGetDebugLevel$475$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryStop$0$label_6$1#1;
-
- inline$BDLPnPQueryStop$0$label_6$1#1:
- goto inline$BDLPnPQueryStop$0$anon22_Then#1, inline$BDLPnPQueryStop$0$anon22_Else#1;
-
- inline$BDLPnPQueryStop$0$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon1#1;
-
- inline$BDLPnPQueryStop$0$anon1#1:
- goto inline$BDLPnPQueryStop$0$label_9#1;
-
- inline$BDLPnPQueryStop$0$label_9#1:
- goto inline$BDLPnPQueryStop$0$label_9_true#1, inline$BDLPnPQueryStop$0$label_9_false#1;
-
- inline$BDLPnPQueryStop$0$label_9_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$) == 0;
- goto inline$BDLPnPQueryStop$0$label_10#1;
-
- inline$BDLPnPQueryStop$0$label_9_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$) != 0;
- goto inline$BDLPnPQueryStop$0$label_13#1;
-
- inline$BDLPnPQueryStop$0$label_13#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_14#1;
-
- inline$BDLPnPQueryStop$0$label_14#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_15#1;
-
- inline$BDLPnPQueryStop$0$label_15#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_16#1;
-
- inline$BDLPnPQueryStop$0$label_16#1:
- havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$3$;
- goto inline$BDLPnPQueryStop$0$label_10#1;
-
- inline$BDLPnPQueryStop$0$label_10#1:
- goto inline$BDLGetDebugLevel$476$Entry#1;
-
- inline$BDLGetDebugLevel$476$Entry#1:
- goto inline$BDLGetDebugLevel$476$start#1;
-
- inline$BDLGetDebugLevel$476$start#1:
- goto inline$BDLGetDebugLevel$476$label_3#1;
-
- inline$BDLGetDebugLevel$476$label_3#1:
- havoc inline$BDLGetDebugLevel$476$myNondetVar_0;
- inline$BDLGetDebugLevel$476$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$476$myNondetVar_0;
- goto inline$BDLGetDebugLevel$476$label_1#1;
-
- inline$BDLGetDebugLevel$476$label_1#1:
- goto inline$BDLGetDebugLevel$476$Return#1;
-
- inline$BDLGetDebugLevel$476$Return#1:
- inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$ := inline$BDLGetDebugLevel$476$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryStop$0$label_10$1#1;
-
- inline$BDLPnPQueryStop$0$label_10$1#1:
- goto inline$BDLPnPQueryStop$0$anon23_Then#1, inline$BDLPnPQueryStop$0$anon23_Else#1;
-
- inline$BDLPnPQueryStop$0$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon3#1;
-
- inline$BDLPnPQueryStop$0$anon3#1:
- goto inline$BDLPnPQueryStop$0$label_19#1;
-
- inline$BDLPnPQueryStop$0$label_19#1:
- goto inline$BDLPnPQueryStop$0$label_19_true#1, inline$BDLPnPQueryStop$0$label_19_false#1;
-
- inline$BDLPnPQueryStop$0$label_19_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$) == 0;
- goto inline$BDLPnPQueryStop$0$label_20#1;
-
- inline$BDLPnPQueryStop$0$label_19_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$) != 0;
- goto inline$BDLPnPQueryStop$0$label_23#1;
-
- inline$BDLPnPQueryStop$0$label_23#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_24#1;
-
- inline$BDLPnPQueryStop$0$label_24#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_25#1;
-
- inline$BDLPnPQueryStop$0$label_25#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_26#1;
-
- inline$BDLPnPQueryStop$0$label_26#1:
- havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$8$;
- goto inline$BDLPnPQueryStop$0$label_20#1;
-
- inline$BDLPnPQueryStop$0$label_20#1:
- goto inline$BDLGetDebugLevel$477$Entry#1;
-
- inline$BDLGetDebugLevel$477$Entry#1:
- goto inline$BDLGetDebugLevel$477$start#1;
-
- inline$BDLGetDebugLevel$477$start#1:
- goto inline$BDLGetDebugLevel$477$label_3#1;
-
- inline$BDLGetDebugLevel$477$label_3#1:
- havoc inline$BDLGetDebugLevel$477$myNondetVar_0;
- inline$BDLGetDebugLevel$477$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$477$myNondetVar_0;
- goto inline$BDLGetDebugLevel$477$label_1#1;
-
- inline$BDLGetDebugLevel$477$label_1#1:
- goto inline$BDLGetDebugLevel$477$Return#1;
-
- inline$BDLGetDebugLevel$477$Return#1:
- inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$ := inline$BDLGetDebugLevel$477$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryStop$0$label_20$1#1;
-
- inline$BDLPnPQueryStop$0$label_20$1#1:
- goto inline$BDLPnPQueryStop$0$anon24_Then#1, inline$BDLPnPQueryStop$0$anon24_Else#1;
-
- inline$BDLPnPQueryStop$0$anon24_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon5#1;
-
- inline$BDLPnPQueryStop$0$anon5#1:
- goto inline$BDLPnPQueryStop$0$label_29#1;
-
- inline$BDLPnPQueryStop$0$label_29#1:
- goto inline$BDLPnPQueryStop$0$label_29_true#1, inline$BDLPnPQueryStop$0$label_29_false#1;
-
- inline$BDLPnPQueryStop$0$label_29_false#1:
- assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$, 4) == 0;
- goto inline$BDLPnPQueryStop$0$label_30#1;
-
- inline$BDLPnPQueryStop$0$label_29_true#1:
- assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$, 4) != 0;
- goto inline$BDLPnPQueryStop$0$label_33#1;
-
- inline$BDLPnPQueryStop$0$label_33#1:
- goto inline$BDLPnPQueryStop$0$label_30#1;
-
- inline$BDLPnPQueryStop$0$label_30#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- havoc inline$BDLPnPQueryStop$0$myNondetVar_1;
- assume inline$BDLPnPQueryStop$0$myNondetVar_0 == inline$BDLPnPQueryStop$0$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$2$Entry#1;
-
- inline$storm_KeAcquireSpinLock$2$Entry#1:
- inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
- goto inline$storm_KeAcquireSpinLock$2$start#1;
-
- inline$storm_KeAcquireSpinLock$2$start#1:
- inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
- goto inline$storm_KeAcquireSpinLock$2$label_3#1;
-
- inline$storm_KeAcquireSpinLock$2$label_3#1:
- goto inline$storm_KeAcquireSpinLock$2$label_4#1;
-
- inline$storm_KeAcquireSpinLock$2$label_4#1:
- goto inline$storm_getThreadID$5$Entry#1;
-
- inline$storm_getThreadID$5$Entry#1:
- goto inline$storm_getThreadID$5$anon0#1;
-
- inline$storm_getThreadID$5$anon0#1:
- inline$storm_getThreadID$5$tid := __storm_thread_id;
- goto inline$storm_getThreadID$5$Return#1;
-
- inline$storm_getThreadID$5$Return#1:
- inline$storm_KeAcquireSpinLock$2$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$5$tid;
- goto inline$storm_KeAcquireSpinLock$2$label_4$1#1;
-
- inline$storm_KeAcquireSpinLock$2$label_4$1#1:
- goto inline$storm_KeAcquireSpinLock$2$label_7#1;
-
- inline$storm_KeAcquireSpinLock$2$label_7#1:
- inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$2$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$2$label_8#1;
-
- inline$storm_KeAcquireSpinLock$2$label_8#1:
- goto inline$storm_KeAcquireSpinLock$2$label_9#1;
-
- inline$storm_KeAcquireSpinLock$2$label_9#1:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$2$label_12#1;
-
- inline$storm_KeAcquireSpinLock$2$label_12#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$2$anon7_Then#1, inline$storm_KeAcquireSpinLock$2$anon7_Else#1;
-
- inline$storm_KeAcquireSpinLock$2$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$2$anon1#1;
-
- inline$storm_KeAcquireSpinLock$2$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$2$label_13#1;
-
- inline$storm_KeAcquireSpinLock$2$label_13#1:
- goto inline$storm_KeAcquireSpinLock$2$label_13_true#1, inline$storm_KeAcquireSpinLock$2$label_13_false#1;
-
- inline$storm_KeAcquireSpinLock$2$label_13_false#1:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$2$label_14#1;
-
- inline$storm_KeAcquireSpinLock$2$label_14#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$2$label_1#1;
-
- inline$storm_KeAcquireSpinLock$2$label_13_true#1:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$2$label_17#1;
-
- inline$storm_KeAcquireSpinLock$2$label_17#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$2$anon8_Then#1, inline$storm_KeAcquireSpinLock$2$anon8_Else#1;
-
- inline$storm_KeAcquireSpinLock$2$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$2$anon4#1;
-
- inline$storm_KeAcquireSpinLock$2$anon4#1:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
- goto inline$storm_KeAcquireSpinLock$2$label_18#1;
-
- inline$storm_KeAcquireSpinLock$2$label_18#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8];
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$2$label_19#1;
-
- inline$storm_KeAcquireSpinLock$2$label_19#1:
- goto inline$storm_KeAcquireSpinLock$2$anon9_Then#1, inline$storm_KeAcquireSpinLock$2$anon9_Else#1;
-
- inline$storm_KeAcquireSpinLock$2$anon9_Else#1:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$2$anon6#1;
-
- inline$storm_KeAcquireSpinLock$2$anon9_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$2$anon6#1;
-
- inline$storm_KeAcquireSpinLock$2$anon6#1:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$2$label_1#1;
-
- inline$storm_KeAcquireSpinLock$2$label_1#1:
- goto inline$storm_KeAcquireSpinLock$2$Return#1;
-
- inline$storm_KeAcquireSpinLock$2$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$2$Return#1;
-
- inline$storm_KeAcquireSpinLock$2$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$2$Return#1;
-
- inline$storm_KeAcquireSpinLock$2$Return#1:
- goto inline$BDLPnPQueryStop$0$label_30$1#1;
-
- inline$BDLPnPQueryStop$0$label_30$1#1:
- goto inline$BDLPnPQueryStop$0$anon25_Then#1, inline$BDLPnPQueryStop$0$anon25_Else#1;
-
- inline$BDLPnPQueryStop$0$anon25_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon7#1;
-
- inline$BDLPnPQueryStop$0$anon7#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- goto inline$BDLPnPQueryStop$0$label_34#1;
-
- inline$BDLPnPQueryStop$0$label_34#1:
- goto inline$BDLPnPQueryStop$0$label_34_true#1, inline$BDLPnPQueryStop$0$label_34_false#1;
-
- inline$BDLPnPQueryStop$0$label_34_false#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- assume !INT_ULT(0, inline$BDLPnPQueryStop$0$myNondetVar_0);
- goto inline$BDLPnPQueryStop$0$label_35#1;
-
- inline$BDLPnPQueryStop$0$label_35#1:
- goto inline$storm_KeClearEvent$0$Entry#1;
-
- inline$storm_KeClearEvent$0$Entry#1:
- inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
- goto inline$storm_KeClearEvent$0$start#1;
-
- inline$storm_KeClearEvent$0$start#1:
- inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4 := inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4_.1;
- goto inline$storm_KeClearEvent$0$label_3#1;
-
- inline$storm_KeClearEvent$0$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4 := 0];
- call contextSwitch();
- goto inline$storm_KeClearEvent$0$label_1#1;
-
- inline$storm_KeClearEvent$0$label_1#1:
- goto inline$storm_KeClearEvent$0$Return#1;
-
- inline$storm_KeClearEvent$0$Return#1:
- goto inline$BDLPnPQueryStop$0$label_35$1#1;
-
- inline$BDLPnPQueryStop$0$label_35$1#1:
- goto inline$BDLPnPQueryStop$0$anon26_Then#1, inline$BDLPnPQueryStop$0$anon26_Else#1;
-
- inline$BDLPnPQueryStop$0$anon26_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon9#1;
-
- inline$BDLPnPQueryStop$0$anon9#1:
- goto inline$BDLPnPQueryStop$0$label_68#1;
-
- inline$BDLPnPQueryStop$0$label_68#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- havoc inline$BDLPnPQueryStop$0$myNondetVar_1;
- assume inline$BDLPnPQueryStop$0$myNondetVar_0 == inline$BDLPnPQueryStop$0$myNondetVar_1;
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$4$Entry#1;
-
- inline$storm_KeReleaseSpinLock$4$Entry#1:
- inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
- goto inline$storm_KeReleaseSpinLock$4$start#1;
-
- inline$storm_KeReleaseSpinLock$4$start#1:
- inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$4$label_3#1;
-
- inline$storm_KeReleaseSpinLock$4$label_3#1:
- goto inline$storm_KeReleaseSpinLock$4$label_4#1;
-
- inline$storm_KeReleaseSpinLock$4$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$4$label_7#1;
-
- inline$storm_KeReleaseSpinLock$4$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$4$anon5_Then#1, inline$storm_KeReleaseSpinLock$4$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$4$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$4$anon1#1;
-
- inline$storm_KeReleaseSpinLock$4$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$4$label_8#1;
-
- inline$storm_KeReleaseSpinLock$4$label_8#1:
- goto inline$storm_getThreadID$7$Entry#1;
-
- inline$storm_getThreadID$7$Entry#1:
- goto inline$storm_getThreadID$7$anon0#1;
-
- inline$storm_getThreadID$7$anon0#1:
- inline$storm_getThreadID$7$tid := __storm_thread_id;
- goto inline$storm_getThreadID$7$Return#1;
-
- inline$storm_getThreadID$7$Return#1:
- inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$7$tid;
- goto inline$storm_KeReleaseSpinLock$4$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$4$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$4$label_11#1;
-
- inline$storm_KeReleaseSpinLock$4$label_11#1:
- goto inline$storm_KeReleaseSpinLock$4$label_11_true#1, inline$storm_KeReleaseSpinLock$4$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$4$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$4$label_12#1;
-
- inline$storm_KeReleaseSpinLock$4$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$4$label_1#1;
-
- inline$storm_KeReleaseSpinLock$4$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$4$label_15#1;
-
- inline$storm_KeReleaseSpinLock$4$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$4$label_16#1;
-
- inline$storm_KeReleaseSpinLock$4$label_16#1:
- goto inline$storm_KeReleaseSpinLock$4$anon6_Then#1, inline$storm_KeReleaseSpinLock$4$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$4$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$4$anon4#1;
-
- inline$storm_KeReleaseSpinLock$4$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$4$anon4#1;
-
- inline$storm_KeReleaseSpinLock$4$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$4$label_1#1;
-
- inline$storm_KeReleaseSpinLock$4$label_1#1:
- goto inline$storm_KeReleaseSpinLock$4$Return#1;
-
- inline$storm_KeReleaseSpinLock$4$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$4$Return#1;
-
- inline$storm_KeReleaseSpinLock$4$Return#1:
- goto inline$BDLPnPQueryStop$0$label_68$1#1;
-
- inline$BDLPnPQueryStop$0$label_68$1#1:
- goto inline$BDLPnPQueryStop$0$anon31_Then#1, inline$BDLPnPQueryStop$0$anon31_Else#1;
-
- inline$BDLPnPQueryStop$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon19#1;
-
- inline$BDLPnPQueryStop$0$anon19#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- goto inline$BDLPnPQueryStop$0$label_71#1;
-
- inline$BDLPnPQueryStop$0$label_71#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$Entry#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$Entry#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12;
- goto inline$BDLCallLowerLevelDriverAndWait$4$start#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$start#1:
- call inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
- inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_4#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_4#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_6#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_6#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$Entry#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$Entry#1:
- inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$start#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$start#1:
- inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_4#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_4#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_5#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_5#1:
- goto inline$IoGetCurrentIrpStackLocation$92$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$92$Entry#1:
- inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetCurrentIrpStackLocation$92$start#1;
-
- inline$IoGetCurrentIrpStackLocation$92$start#1:
- inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$92$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$92$label_3_true#1, inline$IoGetCurrentIrpStackLocation$92$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$92$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$92$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$92$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$92$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$92$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$92$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$92$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$92$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$92$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$92$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$92$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$92$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$92$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$92$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$92$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$92$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$92$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$92$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$92$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$92$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_5$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_5$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$anon1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_8#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_8#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_9#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_9#1:
- goto inline$IoGetNextIrpStackLocation$9$Entry#1;
-
- inline$IoGetNextIrpStackLocation$9$Entry#1:
- inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetNextIrpStackLocation$9$start#1;
-
- inline$IoGetNextIrpStackLocation$9$start#1:
- inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$9$label_3#1;
-
- inline$IoGetNextIrpStackLocation$9$label_3#1:
- goto inline$IoGetNextIrpStackLocation$9$label_3_true#1, inline$IoGetNextIrpStackLocation$9$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$9$label_3_false#1:
- inline$IoGetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$9$myVar_0);
- goto inline$IoGetNextIrpStackLocation$9$label_4#1;
-
- inline$IoGetNextIrpStackLocation$9$label_4#1:
- call inline$IoGetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$9$label_6#1;
-
- inline$IoGetNextIrpStackLocation$9$label_6#1:
- call inline$IoGetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$9$label_7#1;
-
- inline$IoGetNextIrpStackLocation$9$label_7#1:
- goto inline$IoGetNextIrpStackLocation$9$label_5#1;
-
- inline$IoGetNextIrpStackLocation$9$label_3_true#1:
- inline$IoGetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$9$myVar_0);
- goto inline$IoGetNextIrpStackLocation$9$label_5#1;
-
- inline$IoGetNextIrpStackLocation$9$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$9$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$9$label_1#1;
-
- inline$IoGetNextIrpStackLocation$9$label_1#1:
- goto inline$IoGetNextIrpStackLocation$9$Return#1;
-
- inline$IoGetNextIrpStackLocation$9$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_9$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_9$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$anon3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_12#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_12#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_13#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_13#1:
- havoc inline$IoCopyCurrentIrpStackLocationToNext$4$$result.memcpy$25110.4$3$;
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_16#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_16#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$label_1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_6$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_6$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon16_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_9#1:
- goto inline$storm_KeInitializeEvent$4$Entry#1;
-
- inline$storm_KeInitializeEvent$4$Entry#1:
- inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
- goto inline$storm_KeInitializeEvent$4$start#1;
-
- inline$storm_KeInitializeEvent$4$start#1:
- inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
- inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12_.1;
- goto inline$storm_KeInitializeEvent$4$label_3#1;
-
- inline$storm_KeInitializeEvent$4$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12];
- call contextSwitch();
- goto inline$storm_KeInitializeEvent$4$label_1#1;
-
- inline$storm_KeInitializeEvent$4$label_1#1:
- goto inline$storm_KeInitializeEvent$4$Return#1;
-
- inline$storm_KeInitializeEvent$4$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_9$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_9$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon17_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_12#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$4$Entry#1;
-
- inline$storm_IoSetCompletionRoutine$4$Entry#1:
- inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoSetCompletionRoutine$4$start#1;
-
- inline$storm_IoSetCompletionRoutine$4$start#1:
- inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
- goto inline$storm_IoSetCompletionRoutine$4$label_3#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_3#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_4#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_4#1:
- call inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$ := storm_nondet();
- goto inline$storm_IoSetCompletionRoutine$4$label_7#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_7#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_7_true#1, inline$storm_IoSetCompletionRoutine$4$label_7_false#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_7_false#1:
- assume inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$ == 0;
- goto inline$storm_IoSetCompletionRoutine$4$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_7_true#1:
- assume inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$ != 0;
- goto inline$storm_IoSetCompletionRoutine$4$label_11#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_11#1:
- havoc raiseException;
- goto inline$storm_IoSetCompletionRoutine$4$anon6_Then#1, inline$storm_IoSetCompletionRoutine$4$anon6_Else#1;
-
- inline$storm_IoSetCompletionRoutine$4$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$4$anon3#1;
-
- inline$storm_IoSetCompletionRoutine$4$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
- call contextSwitch();
- goto inline$storm_IoSetCompletionRoutine$4$label_12#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_12_true#1, inline$storm_IoSetCompletionRoutine$4$label_12_false#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_12_false#1:
- assume 0 == 0;
- goto inline$storm_IoSetCompletionRoutine$4$label_13#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_13#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCompletionRoutine$4$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_12_true#1:
- assume 0 != 0;
- goto inline$storm_IoSetCompletionRoutine$4$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_8#1:
- goto inline$IoGetNextIrpStackLocation$10$Entry#1;
-
- inline$IoGetNextIrpStackLocation$10$Entry#1:
- inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
- goto inline$IoGetNextIrpStackLocation$10$start#1;
-
- inline$IoGetNextIrpStackLocation$10$start#1:
- inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$10$label_3#1;
-
- inline$IoGetNextIrpStackLocation$10$label_3#1:
- goto inline$IoGetNextIrpStackLocation$10$label_3_true#1, inline$IoGetNextIrpStackLocation$10$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$10$label_3_false#1:
- inline$IoGetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$10$myVar_0);
- goto inline$IoGetNextIrpStackLocation$10$label_4#1;
-
- inline$IoGetNextIrpStackLocation$10$label_4#1:
- call inline$IoGetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$10$label_6#1;
-
- inline$IoGetNextIrpStackLocation$10$label_6#1:
- call inline$IoGetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$10$label_7#1;
-
- inline$IoGetNextIrpStackLocation$10$label_7#1:
- goto inline$IoGetNextIrpStackLocation$10$label_5#1;
-
- inline$IoGetNextIrpStackLocation$10$label_3_true#1:
- inline$IoGetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$10$myVar_0);
- goto inline$IoGetNextIrpStackLocation$10$label_5#1;
-
- inline$IoGetNextIrpStackLocation$10$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$10$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$10$label_1#1;
-
- inline$IoGetNextIrpStackLocation$10$label_1#1:
- goto inline$IoGetNextIrpStackLocation$10$Return#1;
-
- inline$IoGetNextIrpStackLocation$10$Return#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_8$1#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_8$1#1:
- goto inline$storm_IoSetCompletionRoutine$4$anon5_Then#1, inline$storm_IoSetCompletionRoutine$4$anon5_Else#1;
-
- inline$storm_IoSetCompletionRoutine$4$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$4$anon1#1;
-
- inline$storm_IoSetCompletionRoutine$4$anon1#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_16#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_16#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_17#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_17#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_18#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_18#1:
- goto inline$storm_IoSetCompletionRoutine$4$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$4$label_1#1:
- goto inline$storm_IoSetCompletionRoutine$4$Return#1;
-
- inline$storm_IoSetCompletionRoutine$4$anon5_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$4$Return#1;
-
- inline$storm_IoSetCompletionRoutine$4$anon6_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$4$Return#1;
-
- inline$storm_IoSetCompletionRoutine$4$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_12$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_12$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon18_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_15#1:
- goto inline$IoGetCurrentIrpStackLocation$93$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$93$Entry#1:
- inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoGetCurrentIrpStackLocation$93$start#1;
-
- inline$IoGetCurrentIrpStackLocation$93$start#1:
- inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$93$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$93$label_3_true#1, inline$IoGetCurrentIrpStackLocation$93$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$93$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$93$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$93$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$93$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$93$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$93$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$93$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$93$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$93$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$93$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$93$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$93$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$93$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$93$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$93$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$93$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$93$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$93$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$93$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$93$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_15$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_15$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon19_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon7#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon7#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_18#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_18#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$4$label_18_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_18_false#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_19#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_19#1:
- goto inline$storm_IoCallDriver$9$Entry#1;
-
- inline$storm_IoCallDriver$9$Entry#1:
- inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoCallDriver$9$start#1;
-
- inline$storm_IoCallDriver$9$start#1:
- inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$9$label_3#1;
-
- inline$storm_IoCallDriver$9$label_3#1:
- goto inline$storm_IoCallDriver$9$label_4#1;
-
- inline$storm_IoCallDriver$9$label_4#1:
- goto inline$storm_IoCallDriver$9$label_5#1;
-
- inline$storm_IoCallDriver$9$label_5#1:
- goto inline$storm_IoCallDriver$9$label_6#1;
-
- inline$storm_IoCallDriver$9$label_6#1:
- call inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$9$label_9#1;
-
- inline$storm_IoCallDriver$9$label_9#1:
- goto inline$storm_IoCallDriver$9$label_9_true#1, inline$storm_IoCallDriver$9$label_9_false#1;
-
- inline$storm_IoCallDriver$9$label_9_false#1:
- assume inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$9$label_10#1;
-
- inline$storm_IoCallDriver$9$label_9_true#1:
- assume inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$9$label_13#1;
-
- inline$storm_IoCallDriver$9$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$9$anon12_Then#1, inline$storm_IoCallDriver$9$anon12_Else#1;
-
- inline$storm_IoCallDriver$9$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$9$anon3#1;
-
- inline$storm_IoCallDriver$9$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$9$label_14#1;
-
- inline$storm_IoCallDriver$9$label_14#1:
- goto inline$storm_IoCallDriver$9$label_14_true#1, inline$storm_IoCallDriver$9$label_14_false#1;
-
- inline$storm_IoCallDriver$9$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$9$label_15#1;
-
- inline$storm_IoCallDriver$9$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$9$label_1#1;
-
- inline$storm_IoCallDriver$9$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$9$label_10#1;
-
- inline$storm_IoCallDriver$9$label_10#1:
- goto inline$IoSetNextIrpStackLocation$10$Entry#1;
-
- inline$IoSetNextIrpStackLocation$10$Entry#1:
- inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$10$start#1;
-
- inline$IoSetNextIrpStackLocation$10$start#1:
- inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$10$label_3#1;
-
- inline$IoSetNextIrpStackLocation$10$label_3#1:
- goto inline$IoSetNextIrpStackLocation$10$label_3_true#1, inline$IoSetNextIrpStackLocation$10$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$10$label_3_false#1:
- inline$IoSetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$10$myVar_0);
- goto inline$IoSetNextIrpStackLocation$10$label_4#1;
-
- inline$IoSetNextIrpStackLocation$10$label_4#1:
- call inline$IoSetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$10$label_7#1;
-
- inline$IoSetNextIrpStackLocation$10$label_7#1:
- call inline$IoSetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$10$label_8#1;
-
- inline$IoSetNextIrpStackLocation$10$label_8#1:
- goto inline$IoSetNextIrpStackLocation$10$label_5#1;
-
- inline$IoSetNextIrpStackLocation$10$label_3_true#1:
- inline$IoSetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$10$myVar_0);
- goto inline$IoSetNextIrpStackLocation$10$label_5#1;
-
- inline$IoSetNextIrpStackLocation$10$label_5#1:
- inline$IoSetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$10$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$10$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$10$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$10$label_6#1;
-
- inline$IoSetNextIrpStackLocation$10$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$10$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$10$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$10$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$10$label_1#1;
-
- inline$IoSetNextIrpStackLocation$10$label_1#1:
- goto inline$IoSetNextIrpStackLocation$10$Return#1;
-
- inline$IoSetNextIrpStackLocation$10$Return#1:
- goto inline$storm_IoCallDriver$9$label_10$1#1;
-
- inline$storm_IoCallDriver$9$label_10$1#1:
- goto inline$storm_IoCallDriver$9$anon11_Then#1, inline$storm_IoCallDriver$9$anon11_Else#1;
-
- inline$storm_IoCallDriver$9$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$9$anon1#1;
-
- inline$storm_IoCallDriver$9$anon1#1:
- goto inline$storm_IoCallDriver$9$label_18#1;
-
- inline$storm_IoCallDriver$9$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$94$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$94$Entry#1:
- inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$94$start#1;
-
- inline$IoGetCurrentIrpStackLocation$94$start#1:
- inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$94$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$94$label_3_true#1, inline$IoGetCurrentIrpStackLocation$94$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$94$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$94$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$94$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$94$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$94$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$94$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$94$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$94$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$94$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$94$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$94$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$94$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$94$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$94$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$94$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$94$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$94$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$94$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$94$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$94$Return#1:
- goto inline$storm_IoCallDriver$9$label_18$1#1;
-
- inline$storm_IoCallDriver$9$label_18$1#1:
- goto inline$storm_IoCallDriver$9$anon13_Then#1, inline$storm_IoCallDriver$9$anon13_Else#1;
-
- inline$storm_IoCallDriver$9$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$9$anon6#1;
-
- inline$storm_IoCallDriver$9$anon6#1:
- goto inline$storm_IoCallDriver$9$label_21#1;
-
- inline$storm_IoCallDriver$9$label_21#1:
- goto inline$storm_IoCallDriver$9$label_22#1;
-
- inline$storm_IoCallDriver$9$label_22#1:
- goto inline$storm_IoCallDriver$9$label_23#1;
-
- inline$storm_IoCallDriver$9$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$9$label_24#1;
-
- inline$storm_IoCallDriver$9$label_24#1:
- call inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$9$label_27#1;
-
- inline$storm_IoCallDriver$9$label_27#1:
- goto inline$storm_IoCallDriver$9$label_27_case_0#1, inline$storm_IoCallDriver$9$label_27_case_1#1, inline$storm_IoCallDriver$9$label_27_case_2#1;
-
- inline$storm_IoCallDriver$9$label_27_case_2#1:
- assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$9$label_30#1;
-
- inline$storm_IoCallDriver$9$label_30#1:
- inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$9$label_31#1;
-
- inline$storm_IoCallDriver$9$label_31#1:
- goto inline$storm_IoCallDriver$9$label_32#1;
-
- inline$storm_IoCallDriver$9$label_32#1:
- goto inline$storm_IoCallDriver$9$label_33#1;
-
- inline$storm_IoCallDriver$9$label_33#1:
- goto inline$CallCompletionRoutine$18$Entry#1;
-
- inline$CallCompletionRoutine$18$Entry#1:
- inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$18$start#1;
-
- inline$CallCompletionRoutine$18$start#1:
- inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$18$label_3#1;
-
- inline$CallCompletionRoutine$18$label_3#1:
- goto inline$CallCompletionRoutine$18$label_4#1;
-
- inline$CallCompletionRoutine$18$label_4#1:
- goto inline$CallCompletionRoutine$18$label_5#1;
-
- inline$CallCompletionRoutine$18$label_5#1:
- goto inline$CallCompletionRoutine$18$label_6#1;
-
- inline$CallCompletionRoutine$18$label_6#1:
- goto inline$CallCompletionRoutine$18$label_7#1;
-
- inline$CallCompletionRoutine$18$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$95$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$95$Entry#1:
- inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$95$start#1;
-
- inline$IoGetCurrentIrpStackLocation$95$start#1:
- inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$95$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$95$label_3_true#1, inline$IoGetCurrentIrpStackLocation$95$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$95$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$95$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$95$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$95$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$95$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$95$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$95$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$95$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$95$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$95$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$95$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$95$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$95$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$95$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$95$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$95$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$95$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$95$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$95$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$95$Return#1:
- goto inline$CallCompletionRoutine$18$label_7$1#1;
-
- inline$CallCompletionRoutine$18$label_7$1#1:
- goto inline$CallCompletionRoutine$18$anon10_Then#1, inline$CallCompletionRoutine$18$anon10_Else#1;
-
- inline$CallCompletionRoutine$18$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$18$anon1#1;
-
- inline$CallCompletionRoutine$18$anon1#1:
- goto inline$CallCompletionRoutine$18$label_10#1;
-
- inline$CallCompletionRoutine$18$label_10#1:
- goto inline$CallCompletionRoutine$18$label_11#1;
-
- inline$CallCompletionRoutine$18$label_11#1:
- havoc inline$CallCompletionRoutine$18$myNondetVar_0;
- inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$myNondetVar_0;
- goto inline$CallCompletionRoutine$18$label_12#1;
-
- inline$CallCompletionRoutine$18$label_12#1:
- havoc inline$CallCompletionRoutine$18$myNondetVar_0;
- inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$myNondetVar_0;
- goto inline$CallCompletionRoutine$18$label_13#1;
-
- inline$CallCompletionRoutine$18$label_13#1:
- havoc inline$CallCompletionRoutine$18$myNondetVar_0;
- goto inline$CallCompletionRoutine$18$label_14#1;
-
- inline$CallCompletionRoutine$18$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$96$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$96$Entry#1:
- inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$96$start#1;
-
- inline$IoGetCurrentIrpStackLocation$96$start#1:
- inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$96$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$96$label_3_true#1, inline$IoGetCurrentIrpStackLocation$96$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$96$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$96$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$96$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$96$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$96$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$96$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$96$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$96$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$96$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$96$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$96$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$96$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$96$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$96$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$96$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$96$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$96$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$96$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$96$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$96$Return#1:
- goto inline$CallCompletionRoutine$18$label_14$1#1;
-
- inline$CallCompletionRoutine$18$label_14$1#1:
- goto inline$CallCompletionRoutine$18$anon11_Then#1, inline$CallCompletionRoutine$18$anon11_Else#1;
-
- inline$CallCompletionRoutine$18$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$18$anon3#1;
-
- inline$CallCompletionRoutine$18$anon3#1:
- goto inline$CallCompletionRoutine$18$label_17#1;
-
- inline$CallCompletionRoutine$18$label_17#1:
- goto inline$CallCompletionRoutine$18$label_18#1;
-
- inline$CallCompletionRoutine$18$label_18#1:
- goto inline$CallCompletionRoutine$18$label_18_true#1, inline$CallCompletionRoutine$18$label_18_false#1;
-
- inline$CallCompletionRoutine$18$label_18_false#1:
- assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$18$label_1#1;
-
- inline$CallCompletionRoutine$18$label_18_true#1:
- assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$18$label_19#1;
-
- inline$CallCompletionRoutine$18$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$18$label_20#1;
-
- inline$CallCompletionRoutine$18$label_20#1:
- goto inline$CallCompletionRoutine$18$label_20_icall_1#1, inline$CallCompletionRoutine$18$label_20_icall_2#1, inline$CallCompletionRoutine$18$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$18$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$18$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$18$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$18$Entry#1:
- inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$18$start#1;
-
- inline$BDLSystemPowerIoCompletion$18$start#1:
- call inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$18$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_4#1:
- inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_6#1:
- inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$18$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$18$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$18$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$98$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$98$Entry#1:
- inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$98$start#1;
-
- inline$IoGetCurrentIrpStackLocation$98$start#1:
- inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$98$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$98$label_3_true#1, inline$IoGetCurrentIrpStackLocation$98$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$98$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$98$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$98$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$98$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$98$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$98$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$98$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$98$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$98$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$98$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$98$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$98$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$98$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$98$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$98$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$98$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$98$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$98$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$98$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$98$Return#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon36_Then#1, inline$BDLSystemPowerIoCompletion$18$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_15#1:
- goto inline$BDLGetDebugLevel$490$Entry#1;
-
- inline$BDLGetDebugLevel$490$Entry#1:
- goto inline$BDLGetDebugLevel$490$start#1;
-
- inline$BDLGetDebugLevel$490$start#1:
- goto inline$BDLGetDebugLevel$490$label_3#1;
-
- inline$BDLGetDebugLevel$490$label_3#1:
- havoc inline$BDLGetDebugLevel$490$myNondetVar_0;
- inline$BDLGetDebugLevel$490$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$490$myNondetVar_0;
- goto inline$BDLGetDebugLevel$490$label_1#1;
-
- inline$BDLGetDebugLevel$490$label_1#1:
- goto inline$BDLGetDebugLevel$490$Return#1;
-
- inline$BDLGetDebugLevel$490$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$490$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon37_Then#1, inline$BDLSystemPowerIoCompletion$18$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_18_true#1, inline$BDLSystemPowerIoCompletion$18$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_22#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_23#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_24#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$18$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_19#1:
- goto inline$BDLGetDebugLevel$491$Entry#1;
-
- inline$BDLGetDebugLevel$491$Entry#1:
- goto inline$BDLGetDebugLevel$491$start#1;
-
- inline$BDLGetDebugLevel$491$start#1:
- goto inline$BDLGetDebugLevel$491$label_3#1;
-
- inline$BDLGetDebugLevel$491$label_3#1:
- havoc inline$BDLGetDebugLevel$491$myNondetVar_0;
- inline$BDLGetDebugLevel$491$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$491$myNondetVar_0;
- goto inline$BDLGetDebugLevel$491$label_1#1;
-
- inline$BDLGetDebugLevel$491$label_1#1:
- goto inline$BDLGetDebugLevel$491$Return#1;
-
- inline$BDLGetDebugLevel$491$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$491$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon38_Then#1, inline$BDLSystemPowerIoCompletion$18$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_28_true#1, inline$BDLSystemPowerIoCompletion$18$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_32#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_33#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_34#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$18$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_29#1:
- goto inline$BDLGetDebugLevel$492$Entry#1;
-
- inline$BDLGetDebugLevel$492$Entry#1:
- goto inline$BDLGetDebugLevel$492$start#1;
-
- inline$BDLGetDebugLevel$492$start#1:
- goto inline$BDLGetDebugLevel$492$label_3#1;
-
- inline$BDLGetDebugLevel$492$label_3#1:
- havoc inline$BDLGetDebugLevel$492$myNondetVar_0;
- inline$BDLGetDebugLevel$492$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$492$myNondetVar_0;
- goto inline$BDLGetDebugLevel$492$label_1#1;
-
- inline$BDLGetDebugLevel$492$label_1#1:
- goto inline$BDLGetDebugLevel$492$Return#1;
-
- inline$BDLGetDebugLevel$492$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$492$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon39_Then#1, inline$BDLSystemPowerIoCompletion$18$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_38_true#1, inline$BDLSystemPowerIoCompletion$18$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_39_true#1, inline$BDLSystemPowerIoCompletion$18$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$18$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$18$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$18$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_106_true#1, inline$BDLSystemPowerIoCompletion$18$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_142#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_143#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$18$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$18$myNondetVar_0, inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$18$anon50_Then#1, inline$BDLSystemPowerIoCompletion$18$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_112#1:
- inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$18$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_113_true#1, inline$BDLSystemPowerIoCompletion$18$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$18$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_117#1:
- goto inline$BDLGetDebugLevel$499$Entry#1;
-
- inline$BDLGetDebugLevel$499$Entry#1:
- goto inline$BDLGetDebugLevel$499$start#1;
-
- inline$BDLGetDebugLevel$499$start#1:
- goto inline$BDLGetDebugLevel$499$label_3#1;
-
- inline$BDLGetDebugLevel$499$label_3#1:
- havoc inline$BDLGetDebugLevel$499$myNondetVar_0;
- inline$BDLGetDebugLevel$499$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$499$myNondetVar_0;
- goto inline$BDLGetDebugLevel$499$label_1#1;
-
- inline$BDLGetDebugLevel$499$label_1#1:
- goto inline$BDLGetDebugLevel$499$Return#1;
-
- inline$BDLGetDebugLevel$499$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$499$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon51_Then#1, inline$BDLSystemPowerIoCompletion$18$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_120_true#1, inline$BDLSystemPowerIoCompletion$18$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_124#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_125#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_126#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$18$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_121#1:
- goto inline$BDLGetDebugLevel$500$Entry#1;
-
- inline$BDLGetDebugLevel$500$Entry#1:
- goto inline$BDLGetDebugLevel$500$start#1;
-
- inline$BDLGetDebugLevel$500$start#1:
- goto inline$BDLGetDebugLevel$500$label_3#1;
-
- inline$BDLGetDebugLevel$500$label_3#1:
- havoc inline$BDLGetDebugLevel$500$myNondetVar_0;
- inline$BDLGetDebugLevel$500$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$500$myNondetVar_0;
- goto inline$BDLGetDebugLevel$500$label_1#1;
-
- inline$BDLGetDebugLevel$500$label_1#1:
- goto inline$BDLGetDebugLevel$500$Return#1;
-
- inline$BDLGetDebugLevel$500$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$500$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon52_Then#1, inline$BDLSystemPowerIoCompletion$18$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_130_true#1, inline$BDLSystemPowerIoCompletion$18$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_134#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_135#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_136#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$18$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_131#1:
- goto inline$BDLGetDebugLevel$501$Entry#1;
-
- inline$BDLGetDebugLevel$501$Entry#1:
- goto inline$BDLGetDebugLevel$501$start#1;
-
- inline$BDLGetDebugLevel$501$start#1:
- goto inline$BDLGetDebugLevel$501$label_3#1;
-
- inline$BDLGetDebugLevel$501$label_3#1:
- havoc inline$BDLGetDebugLevel$501$myNondetVar_0;
- inline$BDLGetDebugLevel$501$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$501$myNondetVar_0;
- goto inline$BDLGetDebugLevel$501$label_1#1;
-
- inline$BDLGetDebugLevel$501$label_1#1:
- goto inline$BDLGetDebugLevel$501$Return#1;
-
- inline$BDLGetDebugLevel$501$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$501$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon53_Then#1, inline$BDLSystemPowerIoCompletion$18$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_140_true#1, inline$BDLSystemPowerIoCompletion$18$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$18$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_115#1:
- inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$18$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$18$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_43#1:
- goto inline$BDLGetDebugLevel$493$Entry#1;
-
- inline$BDLGetDebugLevel$493$Entry#1:
- goto inline$BDLGetDebugLevel$493$start#1;
-
- inline$BDLGetDebugLevel$493$start#1:
- goto inline$BDLGetDebugLevel$493$label_3#1;
-
- inline$BDLGetDebugLevel$493$label_3#1:
- havoc inline$BDLGetDebugLevel$493$myNondetVar_0;
- inline$BDLGetDebugLevel$493$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$493$myNondetVar_0;
- goto inline$BDLGetDebugLevel$493$label_1#1;
-
- inline$BDLGetDebugLevel$493$label_1#1:
- goto inline$BDLGetDebugLevel$493$Return#1;
-
- inline$BDLGetDebugLevel$493$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$493$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon40_Then#1, inline$BDLSystemPowerIoCompletion$18$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_46_true#1, inline$BDLSystemPowerIoCompletion$18$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_50#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_51#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_52#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$18$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_47#1:
- goto inline$BDLGetDebugLevel$494$Entry#1;
-
- inline$BDLGetDebugLevel$494$Entry#1:
- goto inline$BDLGetDebugLevel$494$start#1;
-
- inline$BDLGetDebugLevel$494$start#1:
- goto inline$BDLGetDebugLevel$494$label_3#1;
-
- inline$BDLGetDebugLevel$494$label_3#1:
- havoc inline$BDLGetDebugLevel$494$myNondetVar_0;
- inline$BDLGetDebugLevel$494$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$494$myNondetVar_0;
- goto inline$BDLGetDebugLevel$494$label_1#1;
-
- inline$BDLGetDebugLevel$494$label_1#1:
- goto inline$BDLGetDebugLevel$494$Return#1;
-
- inline$BDLGetDebugLevel$494$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$494$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon41_Then#1, inline$BDLSystemPowerIoCompletion$18$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_56_true#1, inline$BDLSystemPowerIoCompletion$18$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_60#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_61#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_62#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$18$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_57#1:
- goto inline$BDLGetDebugLevel$495$Entry#1;
-
- inline$BDLGetDebugLevel$495$Entry#1:
- goto inline$BDLGetDebugLevel$495$start#1;
-
- inline$BDLGetDebugLevel$495$start#1:
- goto inline$BDLGetDebugLevel$495$label_3#1;
-
- inline$BDLGetDebugLevel$495$label_3#1:
- havoc inline$BDLGetDebugLevel$495$myNondetVar_0;
- inline$BDLGetDebugLevel$495$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$495$myNondetVar_0;
- goto inline$BDLGetDebugLevel$495$label_1#1;
-
- inline$BDLGetDebugLevel$495$label_1#1:
- goto inline$BDLGetDebugLevel$495$Return#1;
-
- inline$BDLGetDebugLevel$495$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$495$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon42_Then#1, inline$BDLSystemPowerIoCompletion$18$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_66_true#1, inline$BDLSystemPowerIoCompletion$18$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$18$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$18$anon43_Then#1, inline$BDLSystemPowerIoCompletion$18$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$18$anon44_Then#1, inline$BDLSystemPowerIoCompletion$18$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_74#1:
- goto inline$storm_IoCompleteRequest$38$Entry#1;
-
- inline$storm_IoCompleteRequest$38$Entry#1:
- inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$38$start#1;
-
- inline$storm_IoCompleteRequest$38$start#1:
- inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$38$label_3#1;
-
- inline$storm_IoCompleteRequest$38$label_3#1:
- call inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$38$label_6#1;
-
- inline$storm_IoCompleteRequest$38$label_6#1:
- goto inline$storm_IoCompleteRequest$38$label_6_true#1, inline$storm_IoCompleteRequest$38$label_6_false#1;
-
- inline$storm_IoCompleteRequest$38$label_6_false#1:
- assume inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$38$label_7#1;
-
- inline$storm_IoCompleteRequest$38$label_6_true#1:
- assume inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$38$label_8#1;
-
- inline$storm_IoCompleteRequest$38$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$38$anon3_Then#1, inline$storm_IoCompleteRequest$38$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$38$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$38$anon1#1;
-
- inline$storm_IoCompleteRequest$38$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$38$label_9#1;
-
- inline$storm_IoCompleteRequest$38$label_9#1:
- goto inline$storm_IoCompleteRequest$38$label_9_true#1, inline$storm_IoCompleteRequest$38$label_9_false#1;
-
- inline$storm_IoCompleteRequest$38$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$38$label_10#1;
-
- inline$storm_IoCompleteRequest$38$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$38$label_1#1;
-
- inline$storm_IoCompleteRequest$38$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$38$label_7#1;
-
- inline$storm_IoCompleteRequest$38$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$38$label_1#1;
-
- inline$storm_IoCompleteRequest$38$label_1#1:
- goto inline$storm_IoCompleteRequest$38$Return#1;
-
- inline$storm_IoCompleteRequest$38$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$38$Return#1;
-
- inline$storm_IoCompleteRequest$38$Return#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon45_Then#1, inline$BDLSystemPowerIoCompletion$18$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$18$anon46_Then#1, inline$BDLSystemPowerIoCompletion$18$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_80#1:
- goto inline$BDLGetDebugLevel$496$Entry#1;
-
- inline$BDLGetDebugLevel$496$Entry#1:
- goto inline$BDLGetDebugLevel$496$start#1;
-
- inline$BDLGetDebugLevel$496$start#1:
- goto inline$BDLGetDebugLevel$496$label_3#1;
-
- inline$BDLGetDebugLevel$496$label_3#1:
- havoc inline$BDLGetDebugLevel$496$myNondetVar_0;
- inline$BDLGetDebugLevel$496$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$496$myNondetVar_0;
- goto inline$BDLGetDebugLevel$496$label_1#1;
-
- inline$BDLGetDebugLevel$496$label_1#1:
- goto inline$BDLGetDebugLevel$496$Return#1;
-
- inline$BDLGetDebugLevel$496$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$496$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon47_Then#1, inline$BDLSystemPowerIoCompletion$18$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_83_true#1, inline$BDLSystemPowerIoCompletion$18$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_87#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_88#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_89#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$18$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_84#1:
- goto inline$BDLGetDebugLevel$497$Entry#1;
-
- inline$BDLGetDebugLevel$497$Entry#1:
- goto inline$BDLGetDebugLevel$497$start#1;
-
- inline$BDLGetDebugLevel$497$start#1:
- goto inline$BDLGetDebugLevel$497$label_3#1;
-
- inline$BDLGetDebugLevel$497$label_3#1:
- havoc inline$BDLGetDebugLevel$497$myNondetVar_0;
- inline$BDLGetDebugLevel$497$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$497$myNondetVar_0;
- goto inline$BDLGetDebugLevel$497$label_1#1;
-
- inline$BDLGetDebugLevel$497$label_1#1:
- goto inline$BDLGetDebugLevel$497$Return#1;
-
- inline$BDLGetDebugLevel$497$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$497$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon48_Then#1, inline$BDLSystemPowerIoCompletion$18$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_93_true#1, inline$BDLSystemPowerIoCompletion$18$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_97#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_98#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_99#1:
- call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$18$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$18$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_94#1:
- goto inline$BDLGetDebugLevel$498$Entry#1;
-
- inline$BDLGetDebugLevel$498$Entry#1:
- goto inline$BDLGetDebugLevel$498$start#1;
-
- inline$BDLGetDebugLevel$498$start#1:
- goto inline$BDLGetDebugLevel$498$label_3#1;
-
- inline$BDLGetDebugLevel$498$label_3#1:
- havoc inline$BDLGetDebugLevel$498$myNondetVar_0;
- inline$BDLGetDebugLevel$498$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$498$myNondetVar_0;
- goto inline$BDLGetDebugLevel$498$label_1#1;
-
- inline$BDLGetDebugLevel$498$label_1#1:
- goto inline$BDLGetDebugLevel$498$Return#1;
-
- inline$BDLGetDebugLevel$498$Return#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$498$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$18$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$18$anon49_Then#1, inline$BDLSystemPowerIoCompletion$18$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_103_true#1, inline$BDLSystemPowerIoCompletion$18$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$18$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$18$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_104#1:
- inline$BDLSystemPowerIoCompletion$18$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$18$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$18$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$18$Return#1;
-
- inline$BDLSystemPowerIoCompletion$18$Return#1:
- inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$18$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$18$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$18$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$18$anon14_Then#1, inline$CallCompletionRoutine$18$anon14_Else#1;
-
- inline$CallCompletionRoutine$18$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$18$anon9#1;
-
- inline$CallCompletionRoutine$18$anon9#1:
- goto inline$CallCompletionRoutine$18$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$18$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$18$Return#1;
-
- inline$CallCompletionRoutine$18$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$18$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$18$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$18$Entry#1:
- inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$18$start#1;
-
- inline$BDLDevicePowerIoCompletion$18$start#1:
- call inline$BDLDevicePowerIoCompletion$18$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$18$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_4#1:
- inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_6#1:
- inline$BDLDevicePowerIoCompletion$18$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$18$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$18$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$18$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$97$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$97$Entry#1:
- inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$97$start#1;
-
- inline$IoGetCurrentIrpStackLocation$97$start#1:
- inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$97$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$97$label_3_true#1, inline$IoGetCurrentIrpStackLocation$97$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$97$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$97$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$97$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$97$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$97$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$97$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$97$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$97$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$97$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$97$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$97$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$97$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$97$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$97$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$97$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$97$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$97$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$97$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$97$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$97$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$97$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$97$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$97$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon30_Then#1, inline$BDLDevicePowerIoCompletion$18$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_13#1:
- inline$BDLDevicePowerIoCompletion$18$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$18$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$18$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_17#1:
- goto inline$BDLGetDebugLevel$481$Entry#1;
-
- inline$BDLGetDebugLevel$481$Entry#1:
- goto inline$BDLGetDebugLevel$481$start#1;
-
- inline$BDLGetDebugLevel$481$start#1:
- goto inline$BDLGetDebugLevel$481$label_3#1;
-
- inline$BDLGetDebugLevel$481$label_3#1:
- havoc inline$BDLGetDebugLevel$481$myNondetVar_0;
- inline$BDLGetDebugLevel$481$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$481$myNondetVar_0;
- goto inline$BDLGetDebugLevel$481$label_1#1;
-
- inline$BDLGetDebugLevel$481$label_1#1:
- goto inline$BDLGetDebugLevel$481$Return#1;
-
- inline$BDLGetDebugLevel$481$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$481$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon31_Then#1, inline$BDLDevicePowerIoCompletion$18$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_20_true#1, inline$BDLDevicePowerIoCompletion$18$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_24#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_25#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_26#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$18$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_21#1:
- goto inline$BDLGetDebugLevel$482$Entry#1;
-
- inline$BDLGetDebugLevel$482$Entry#1:
- goto inline$BDLGetDebugLevel$482$start#1;
-
- inline$BDLGetDebugLevel$482$start#1:
- goto inline$BDLGetDebugLevel$482$label_3#1;
-
- inline$BDLGetDebugLevel$482$label_3#1:
- havoc inline$BDLGetDebugLevel$482$myNondetVar_0;
- inline$BDLGetDebugLevel$482$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$482$myNondetVar_0;
- goto inline$BDLGetDebugLevel$482$label_1#1;
-
- inline$BDLGetDebugLevel$482$label_1#1:
- goto inline$BDLGetDebugLevel$482$Return#1;
-
- inline$BDLGetDebugLevel$482$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$482$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon32_Then#1, inline$BDLDevicePowerIoCompletion$18$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_30_true#1, inline$BDLDevicePowerIoCompletion$18$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_34#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_35#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_36#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$18$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_31#1:
- goto inline$BDLGetDebugLevel$483$Entry#1;
-
- inline$BDLGetDebugLevel$483$Entry#1:
- goto inline$BDLGetDebugLevel$483$start#1;
-
- inline$BDLGetDebugLevel$483$start#1:
- goto inline$BDLGetDebugLevel$483$label_3#1;
-
- inline$BDLGetDebugLevel$483$label_3#1:
- havoc inline$BDLGetDebugLevel$483$myNondetVar_0;
- inline$BDLGetDebugLevel$483$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$483$myNondetVar_0;
- goto inline$BDLGetDebugLevel$483$label_1#1;
-
- inline$BDLGetDebugLevel$483$label_1#1:
- goto inline$BDLGetDebugLevel$483$Return#1;
-
- inline$BDLGetDebugLevel$483$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$483$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon33_Then#1, inline$BDLDevicePowerIoCompletion$18$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_40_true#1, inline$BDLDevicePowerIoCompletion$18$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_41_true#1, inline$BDLDevicePowerIoCompletion$18$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$18$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$18$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_44_true#1, inline$BDLDevicePowerIoCompletion$18$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$18$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_45_true#1, inline$BDLDevicePowerIoCompletion$18$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$18$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$18$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$18$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$18$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$18$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$18$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_54#1:
- inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$18$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_55_true#1, inline$BDLDevicePowerIoCompletion$18$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_56#1:
- call inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$18$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$18$anon34_Then#1, inline$BDLDevicePowerIoCompletion$18$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_59#1:
- goto inline$BDLGetDebugLevel$484$Entry#1;
-
- inline$BDLGetDebugLevel$484$Entry#1:
- goto inline$BDLGetDebugLevel$484$start#1;
-
- inline$BDLGetDebugLevel$484$start#1:
- goto inline$BDLGetDebugLevel$484$label_3#1;
-
- inline$BDLGetDebugLevel$484$label_3#1:
- havoc inline$BDLGetDebugLevel$484$myNondetVar_0;
- inline$BDLGetDebugLevel$484$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$484$myNondetVar_0;
- goto inline$BDLGetDebugLevel$484$label_1#1;
-
- inline$BDLGetDebugLevel$484$label_1#1:
- goto inline$BDLGetDebugLevel$484$Return#1;
-
- inline$BDLGetDebugLevel$484$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$484$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon35_Then#1, inline$BDLDevicePowerIoCompletion$18$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_62_true#1, inline$BDLDevicePowerIoCompletion$18$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_66#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_67#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_68#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$18$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_63#1:
- goto inline$BDLGetDebugLevel$485$Entry#1;
-
- inline$BDLGetDebugLevel$485$Entry#1:
- goto inline$BDLGetDebugLevel$485$start#1;
-
- inline$BDLGetDebugLevel$485$start#1:
- goto inline$BDLGetDebugLevel$485$label_3#1;
-
- inline$BDLGetDebugLevel$485$label_3#1:
- havoc inline$BDLGetDebugLevel$485$myNondetVar_0;
- inline$BDLGetDebugLevel$485$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$485$myNondetVar_0;
- goto inline$BDLGetDebugLevel$485$label_1#1;
-
- inline$BDLGetDebugLevel$485$label_1#1:
- goto inline$BDLGetDebugLevel$485$Return#1;
-
- inline$BDLGetDebugLevel$485$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$485$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon36_Then#1, inline$BDLDevicePowerIoCompletion$18$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_72_true#1, inline$BDLDevicePowerIoCompletion$18$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_76#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_77#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_78#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$18$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_73#1:
- goto inline$BDLGetDebugLevel$486$Entry#1;
-
- inline$BDLGetDebugLevel$486$Entry#1:
- goto inline$BDLGetDebugLevel$486$start#1;
-
- inline$BDLGetDebugLevel$486$start#1:
- goto inline$BDLGetDebugLevel$486$label_3#1;
-
- inline$BDLGetDebugLevel$486$label_3#1:
- havoc inline$BDLGetDebugLevel$486$myNondetVar_0;
- inline$BDLGetDebugLevel$486$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$486$myNondetVar_0;
- goto inline$BDLGetDebugLevel$486$label_1#1;
-
- inline$BDLGetDebugLevel$486$label_1#1:
- goto inline$BDLGetDebugLevel$486$Return#1;
-
- inline$BDLGetDebugLevel$486$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$486$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon37_Then#1, inline$BDLDevicePowerIoCompletion$18$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_82_true#1, inline$BDLDevicePowerIoCompletion$18$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$18$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$18$anon38_Then#1, inline$BDLDevicePowerIoCompletion$18$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$18$anon39_Then#1, inline$BDLDevicePowerIoCompletion$18$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_92#1:
- goto inline$storm_IoCompleteRequest$37$Entry#1;
-
- inline$storm_IoCompleteRequest$37$Entry#1:
- inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$37$start#1;
-
- inline$storm_IoCompleteRequest$37$start#1:
- inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$37$label_3#1;
-
- inline$storm_IoCompleteRequest$37$label_3#1:
- call inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$37$label_6#1;
-
- inline$storm_IoCompleteRequest$37$label_6#1:
- goto inline$storm_IoCompleteRequest$37$label_6_true#1, inline$storm_IoCompleteRequest$37$label_6_false#1;
-
- inline$storm_IoCompleteRequest$37$label_6_false#1:
- assume inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$37$label_7#1;
-
- inline$storm_IoCompleteRequest$37$label_6_true#1:
- assume inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$37$label_8#1;
-
- inline$storm_IoCompleteRequest$37$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$37$anon3_Then#1, inline$storm_IoCompleteRequest$37$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$37$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$37$anon1#1;
-
- inline$storm_IoCompleteRequest$37$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$37$label_9#1;
-
- inline$storm_IoCompleteRequest$37$label_9#1:
- goto inline$storm_IoCompleteRequest$37$label_9_true#1, inline$storm_IoCompleteRequest$37$label_9_false#1;
-
- inline$storm_IoCompleteRequest$37$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$37$label_10#1;
-
- inline$storm_IoCompleteRequest$37$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$37$label_1#1;
-
- inline$storm_IoCompleteRequest$37$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$37$label_7#1;
-
- inline$storm_IoCompleteRequest$37$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$37$label_1#1;
-
- inline$storm_IoCompleteRequest$37$label_1#1:
- goto inline$storm_IoCompleteRequest$37$Return#1;
-
- inline$storm_IoCompleteRequest$37$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$37$Return#1;
-
- inline$storm_IoCompleteRequest$37$Return#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon40_Then#1, inline$BDLDevicePowerIoCompletion$18$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$18$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$18$anon41_Then#1, inline$BDLDevicePowerIoCompletion$18$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_98#1:
- goto inline$BDLGetDebugLevel$487$Entry#1;
-
- inline$BDLGetDebugLevel$487$Entry#1:
- goto inline$BDLGetDebugLevel$487$start#1;
-
- inline$BDLGetDebugLevel$487$start#1:
- goto inline$BDLGetDebugLevel$487$label_3#1;
-
- inline$BDLGetDebugLevel$487$label_3#1:
- havoc inline$BDLGetDebugLevel$487$myNondetVar_0;
- inline$BDLGetDebugLevel$487$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$487$myNondetVar_0;
- goto inline$BDLGetDebugLevel$487$label_1#1;
-
- inline$BDLGetDebugLevel$487$label_1#1:
- goto inline$BDLGetDebugLevel$487$Return#1;
-
- inline$BDLGetDebugLevel$487$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$487$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon42_Then#1, inline$BDLDevicePowerIoCompletion$18$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_101_true#1, inline$BDLDevicePowerIoCompletion$18$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_105#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_106#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_107#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$18$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_102#1:
- goto inline$BDLGetDebugLevel$488$Entry#1;
-
- inline$BDLGetDebugLevel$488$Entry#1:
- goto inline$BDLGetDebugLevel$488$start#1;
-
- inline$BDLGetDebugLevel$488$start#1:
- goto inline$BDLGetDebugLevel$488$label_3#1;
-
- inline$BDLGetDebugLevel$488$label_3#1:
- havoc inline$BDLGetDebugLevel$488$myNondetVar_0;
- inline$BDLGetDebugLevel$488$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$488$myNondetVar_0;
- goto inline$BDLGetDebugLevel$488$label_1#1;
-
- inline$BDLGetDebugLevel$488$label_1#1:
- goto inline$BDLGetDebugLevel$488$Return#1;
-
- inline$BDLGetDebugLevel$488$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$488$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon43_Then#1, inline$BDLDevicePowerIoCompletion$18$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_111_true#1, inline$BDLDevicePowerIoCompletion$18$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_115#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_116#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_117#1:
- call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$18$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$18$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_112#1:
- goto inline$BDLGetDebugLevel$489$Entry#1;
-
- inline$BDLGetDebugLevel$489$Entry#1:
- goto inline$BDLGetDebugLevel$489$start#1;
-
- inline$BDLGetDebugLevel$489$start#1:
- goto inline$BDLGetDebugLevel$489$label_3#1;
-
- inline$BDLGetDebugLevel$489$label_3#1:
- havoc inline$BDLGetDebugLevel$489$myNondetVar_0;
- inline$BDLGetDebugLevel$489$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$489$myNondetVar_0;
- goto inline$BDLGetDebugLevel$489$label_1#1;
-
- inline$BDLGetDebugLevel$489$label_1#1:
- goto inline$BDLGetDebugLevel$489$Return#1;
-
- inline$BDLGetDebugLevel$489$Return#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$489$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$18$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$18$anon44_Then#1, inline$BDLDevicePowerIoCompletion$18$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_121_true#1, inline$BDLDevicePowerIoCompletion$18$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$18$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$18$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_122#1:
- inline$BDLDevicePowerIoCompletion$18$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$18$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$18$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$18$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$18$Return#1;
-
- inline$BDLDevicePowerIoCompletion$18$Return#1:
- inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$18$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$18$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$18$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$18$anon13_Then#1, inline$CallCompletionRoutine$18$anon13_Else#1;
-
- inline$CallCompletionRoutine$18$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$18$anon7#1;
-
- inline$CallCompletionRoutine$18$anon7#1:
- goto inline$CallCompletionRoutine$18$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$18$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$18$Return#1;
-
- inline$CallCompletionRoutine$18$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$18$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$18$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$18$Entry#1:
- inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$18$start#1;
-
- inline$BDLCallDriverCompletionRoutine$18$start#1:
- inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$18$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$18$label_3_true#1, inline$BDLCallDriverCompletionRoutine$18$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$18$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$18$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$18$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$18$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_6#1:
- goto inline$storm_KeSetEvent$20$Entry#1;
-
- inline$storm_KeSetEvent$20$Entry#1:
- inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$20$start#1;
-
- inline$storm_KeSetEvent$20$start#1:
- inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$20$label_3#1;
-
- inline$storm_KeSetEvent$20$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$20$label_1#1;
-
- inline$storm_KeSetEvent$20$label_1#1:
- goto inline$storm_KeSetEvent$20$Return#1;
-
- inline$storm_KeSetEvent$20$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$18$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$18$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$18$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$18$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$18$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$18$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$18$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_9#1:
- inline$BDLCallDriverCompletionRoutine$18$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$18$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$18$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$18$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$18$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$18$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$18$Return#1:
- inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$18$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$18$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$18$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$18$anon12_Then#1, inline$CallCompletionRoutine$18$anon12_Else#1;
-
- inline$CallCompletionRoutine$18$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$18$anon5#1;
-
- inline$CallCompletionRoutine$18$anon5#1:
- goto inline$CallCompletionRoutine$18$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$18$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$18$label_23#1;
-
- inline$CallCompletionRoutine$18$label_23#1:
- inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$18$label_24#1;
-
- inline$CallCompletionRoutine$18$label_24#1:
- goto inline$CallCompletionRoutine$18$label_24_true#1, inline$CallCompletionRoutine$18$label_24_false#1;
-
- inline$CallCompletionRoutine$18$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$18$label_1#1;
-
- inline$CallCompletionRoutine$18$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$18$label_25#1;
-
- inline$CallCompletionRoutine$18$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$18$label_1#1;
-
- inline$CallCompletionRoutine$18$label_1#1:
- goto inline$CallCompletionRoutine$18$Return#1;
-
- inline$CallCompletionRoutine$18$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$18$Return#1;
-
- inline$CallCompletionRoutine$18$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$18$Return#1;
-
- inline$CallCompletionRoutine$18$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$18$Return#1;
-
- inline$CallCompletionRoutine$18$Return#1:
- goto inline$storm_IoCallDriver$9$label_33$1#1;
-
- inline$storm_IoCallDriver$9$label_33$1#1:
- goto inline$storm_IoCallDriver$9$anon14_Then#1, inline$storm_IoCallDriver$9$anon14_Else#1;
-
- inline$storm_IoCallDriver$9$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$9$anon8#1;
-
- inline$storm_IoCallDriver$9$anon8#1:
- goto inline$storm_IoCallDriver$9$label_36#1;
-
- inline$storm_IoCallDriver$9$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$9$Return#1;
-
- inline$storm_IoCallDriver$9$label_27_case_1#1:
- assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$9$label_29#1;
-
- inline$storm_IoCallDriver$9$label_29#1:
- inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$9$label_37#1;
-
- inline$storm_IoCallDriver$9$label_37#1:
- goto inline$storm_IoCallDriver$9$label_38#1;
-
- inline$storm_IoCallDriver$9$label_38#1:
- goto inline$storm_IoCallDriver$9$label_39#1;
-
- inline$storm_IoCallDriver$9$label_39#1:
- goto inline$CallCompletionRoutine$19$Entry#1;
-
- inline$CallCompletionRoutine$19$Entry#1:
- inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$19$start#1;
-
- inline$CallCompletionRoutine$19$start#1:
- inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$19$label_3#1;
-
- inline$CallCompletionRoutine$19$label_3#1:
- goto inline$CallCompletionRoutine$19$label_4#1;
-
- inline$CallCompletionRoutine$19$label_4#1:
- goto inline$CallCompletionRoutine$19$label_5#1;
-
- inline$CallCompletionRoutine$19$label_5#1:
- goto inline$CallCompletionRoutine$19$label_6#1;
-
- inline$CallCompletionRoutine$19$label_6#1:
- goto inline$CallCompletionRoutine$19$label_7#1;
-
- inline$CallCompletionRoutine$19$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$99$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$99$Entry#1:
- inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$99$start#1;
-
- inline$IoGetCurrentIrpStackLocation$99$start#1:
- inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$99$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$99$label_3_true#1, inline$IoGetCurrentIrpStackLocation$99$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$99$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$99$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$99$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$99$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$99$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$99$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$99$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$99$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$99$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$99$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$99$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$99$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$99$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$99$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$99$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$99$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$99$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$99$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$99$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$99$Return#1:
- goto inline$CallCompletionRoutine$19$label_7$1#1;
-
- inline$CallCompletionRoutine$19$label_7$1#1:
- goto inline$CallCompletionRoutine$19$anon10_Then#1, inline$CallCompletionRoutine$19$anon10_Else#1;
-
- inline$CallCompletionRoutine$19$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$19$anon1#1;
-
- inline$CallCompletionRoutine$19$anon1#1:
- goto inline$CallCompletionRoutine$19$label_10#1;
-
- inline$CallCompletionRoutine$19$label_10#1:
- goto inline$CallCompletionRoutine$19$label_11#1;
-
- inline$CallCompletionRoutine$19$label_11#1:
- havoc inline$CallCompletionRoutine$19$myNondetVar_0;
- inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$myNondetVar_0;
- goto inline$CallCompletionRoutine$19$label_12#1;
-
- inline$CallCompletionRoutine$19$label_12#1:
- havoc inline$CallCompletionRoutine$19$myNondetVar_0;
- inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$myNondetVar_0;
- goto inline$CallCompletionRoutine$19$label_13#1;
-
- inline$CallCompletionRoutine$19$label_13#1:
- havoc inline$CallCompletionRoutine$19$myNondetVar_0;
- goto inline$CallCompletionRoutine$19$label_14#1;
-
- inline$CallCompletionRoutine$19$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$100$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$100$Entry#1:
- inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$100$start#1;
-
- inline$IoGetCurrentIrpStackLocation$100$start#1:
- inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$100$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$100$label_3_true#1, inline$IoGetCurrentIrpStackLocation$100$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$100$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$100$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$100$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$100$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$100$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$100$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$100$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$100$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$100$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$100$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$100$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$100$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$100$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$100$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$100$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$100$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$100$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$100$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$100$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$100$Return#1:
- goto inline$CallCompletionRoutine$19$label_14$1#1;
-
- inline$CallCompletionRoutine$19$label_14$1#1:
- goto inline$CallCompletionRoutine$19$anon11_Then#1, inline$CallCompletionRoutine$19$anon11_Else#1;
-
- inline$CallCompletionRoutine$19$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$19$anon3#1;
-
- inline$CallCompletionRoutine$19$anon3#1:
- goto inline$CallCompletionRoutine$19$label_17#1;
-
- inline$CallCompletionRoutine$19$label_17#1:
- goto inline$CallCompletionRoutine$19$label_18#1;
-
- inline$CallCompletionRoutine$19$label_18#1:
- goto inline$CallCompletionRoutine$19$label_18_true#1, inline$CallCompletionRoutine$19$label_18_false#1;
-
- inline$CallCompletionRoutine$19$label_18_false#1:
- assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$19$label_1#1;
-
- inline$CallCompletionRoutine$19$label_18_true#1:
- assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$19$label_19#1;
-
- inline$CallCompletionRoutine$19$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$19$label_20#1;
-
- inline$CallCompletionRoutine$19$label_20#1:
- goto inline$CallCompletionRoutine$19$label_20_icall_1#1, inline$CallCompletionRoutine$19$label_20_icall_2#1, inline$CallCompletionRoutine$19$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$19$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$19$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$19$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$19$Entry#1:
- inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$19$start#1;
-
- inline$BDLSystemPowerIoCompletion$19$start#1:
- call inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$19$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_4#1:
- inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_6#1:
- inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$19$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$19$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$19$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$102$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$102$Entry#1:
- inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$102$start#1;
-
- inline$IoGetCurrentIrpStackLocation$102$start#1:
- inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$102$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$102$label_3_true#1, inline$IoGetCurrentIrpStackLocation$102$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$102$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$102$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$102$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$102$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$102$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$102$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$102$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$102$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$102$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$102$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$102$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$102$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$102$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$102$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$102$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$102$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$102$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$102$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$102$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$102$Return#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon36_Then#1, inline$BDLSystemPowerIoCompletion$19$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_15#1:
- goto inline$BDLGetDebugLevel$511$Entry#1;
-
- inline$BDLGetDebugLevel$511$Entry#1:
- goto inline$BDLGetDebugLevel$511$start#1;
-
- inline$BDLGetDebugLevel$511$start#1:
- goto inline$BDLGetDebugLevel$511$label_3#1;
-
- inline$BDLGetDebugLevel$511$label_3#1:
- havoc inline$BDLGetDebugLevel$511$myNondetVar_0;
- inline$BDLGetDebugLevel$511$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$511$myNondetVar_0;
- goto inline$BDLGetDebugLevel$511$label_1#1;
-
- inline$BDLGetDebugLevel$511$label_1#1:
- goto inline$BDLGetDebugLevel$511$Return#1;
-
- inline$BDLGetDebugLevel$511$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$511$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon37_Then#1, inline$BDLSystemPowerIoCompletion$19$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_18_true#1, inline$BDLSystemPowerIoCompletion$19$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_22#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_23#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_24#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$19$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_19#1:
- goto inline$BDLGetDebugLevel$512$Entry#1;
-
- inline$BDLGetDebugLevel$512$Entry#1:
- goto inline$BDLGetDebugLevel$512$start#1;
-
- inline$BDLGetDebugLevel$512$start#1:
- goto inline$BDLGetDebugLevel$512$label_3#1;
-
- inline$BDLGetDebugLevel$512$label_3#1:
- havoc inline$BDLGetDebugLevel$512$myNondetVar_0;
- inline$BDLGetDebugLevel$512$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$512$myNondetVar_0;
- goto inline$BDLGetDebugLevel$512$label_1#1;
-
- inline$BDLGetDebugLevel$512$label_1#1:
- goto inline$BDLGetDebugLevel$512$Return#1;
-
- inline$BDLGetDebugLevel$512$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$512$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon38_Then#1, inline$BDLSystemPowerIoCompletion$19$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_28_true#1, inline$BDLSystemPowerIoCompletion$19$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_32#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_33#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_34#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$19$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_29#1:
- goto inline$BDLGetDebugLevel$513$Entry#1;
-
- inline$BDLGetDebugLevel$513$Entry#1:
- goto inline$BDLGetDebugLevel$513$start#1;
-
- inline$BDLGetDebugLevel$513$start#1:
- goto inline$BDLGetDebugLevel$513$label_3#1;
-
- inline$BDLGetDebugLevel$513$label_3#1:
- havoc inline$BDLGetDebugLevel$513$myNondetVar_0;
- inline$BDLGetDebugLevel$513$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$513$myNondetVar_0;
- goto inline$BDLGetDebugLevel$513$label_1#1;
-
- inline$BDLGetDebugLevel$513$label_1#1:
- goto inline$BDLGetDebugLevel$513$Return#1;
-
- inline$BDLGetDebugLevel$513$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$513$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon39_Then#1, inline$BDLSystemPowerIoCompletion$19$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_38_true#1, inline$BDLSystemPowerIoCompletion$19$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_39_true#1, inline$BDLSystemPowerIoCompletion$19$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$19$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$19$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$19$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_106_true#1, inline$BDLSystemPowerIoCompletion$19$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_142#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_143#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$19$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$19$myNondetVar_0, inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$19$anon50_Then#1, inline$BDLSystemPowerIoCompletion$19$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_112#1:
- inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$19$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_113_true#1, inline$BDLSystemPowerIoCompletion$19$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$19$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_117#1:
- goto inline$BDLGetDebugLevel$520$Entry#1;
-
- inline$BDLGetDebugLevel$520$Entry#1:
- goto inline$BDLGetDebugLevel$520$start#1;
-
- inline$BDLGetDebugLevel$520$start#1:
- goto inline$BDLGetDebugLevel$520$label_3#1;
-
- inline$BDLGetDebugLevel$520$label_3#1:
- havoc inline$BDLGetDebugLevel$520$myNondetVar_0;
- inline$BDLGetDebugLevel$520$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$520$myNondetVar_0;
- goto inline$BDLGetDebugLevel$520$label_1#1;
-
- inline$BDLGetDebugLevel$520$label_1#1:
- goto inline$BDLGetDebugLevel$520$Return#1;
-
- inline$BDLGetDebugLevel$520$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$520$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon51_Then#1, inline$BDLSystemPowerIoCompletion$19$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_120_true#1, inline$BDLSystemPowerIoCompletion$19$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_124#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_125#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_126#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$19$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_121#1:
- goto inline$BDLGetDebugLevel$521$Entry#1;
-
- inline$BDLGetDebugLevel$521$Entry#1:
- goto inline$BDLGetDebugLevel$521$start#1;
-
- inline$BDLGetDebugLevel$521$start#1:
- goto inline$BDLGetDebugLevel$521$label_3#1;
-
- inline$BDLGetDebugLevel$521$label_3#1:
- havoc inline$BDLGetDebugLevel$521$myNondetVar_0;
- inline$BDLGetDebugLevel$521$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$521$myNondetVar_0;
- goto inline$BDLGetDebugLevel$521$label_1#1;
-
- inline$BDLGetDebugLevel$521$label_1#1:
- goto inline$BDLGetDebugLevel$521$Return#1;
-
- inline$BDLGetDebugLevel$521$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$521$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon52_Then#1, inline$BDLSystemPowerIoCompletion$19$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_130_true#1, inline$BDLSystemPowerIoCompletion$19$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_134#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_135#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_136#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$19$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_131#1:
- goto inline$BDLGetDebugLevel$522$Entry#1;
-
- inline$BDLGetDebugLevel$522$Entry#1:
- goto inline$BDLGetDebugLevel$522$start#1;
-
- inline$BDLGetDebugLevel$522$start#1:
- goto inline$BDLGetDebugLevel$522$label_3#1;
-
- inline$BDLGetDebugLevel$522$label_3#1:
- havoc inline$BDLGetDebugLevel$522$myNondetVar_0;
- inline$BDLGetDebugLevel$522$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$522$myNondetVar_0;
- goto inline$BDLGetDebugLevel$522$label_1#1;
-
- inline$BDLGetDebugLevel$522$label_1#1:
- goto inline$BDLGetDebugLevel$522$Return#1;
-
- inline$BDLGetDebugLevel$522$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$522$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon53_Then#1, inline$BDLSystemPowerIoCompletion$19$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_140_true#1, inline$BDLSystemPowerIoCompletion$19$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$19$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_115#1:
- inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$19$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$19$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_43#1:
- goto inline$BDLGetDebugLevel$514$Entry#1;
-
- inline$BDLGetDebugLevel$514$Entry#1:
- goto inline$BDLGetDebugLevel$514$start#1;
-
- inline$BDLGetDebugLevel$514$start#1:
- goto inline$BDLGetDebugLevel$514$label_3#1;
-
- inline$BDLGetDebugLevel$514$label_3#1:
- havoc inline$BDLGetDebugLevel$514$myNondetVar_0;
- inline$BDLGetDebugLevel$514$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$514$myNondetVar_0;
- goto inline$BDLGetDebugLevel$514$label_1#1;
-
- inline$BDLGetDebugLevel$514$label_1#1:
- goto inline$BDLGetDebugLevel$514$Return#1;
-
- inline$BDLGetDebugLevel$514$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$514$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon40_Then#1, inline$BDLSystemPowerIoCompletion$19$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_46_true#1, inline$BDLSystemPowerIoCompletion$19$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_50#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_51#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_52#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$19$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_47#1:
- goto inline$BDLGetDebugLevel$515$Entry#1;
-
- inline$BDLGetDebugLevel$515$Entry#1:
- goto inline$BDLGetDebugLevel$515$start#1;
-
- inline$BDLGetDebugLevel$515$start#1:
- goto inline$BDLGetDebugLevel$515$label_3#1;
-
- inline$BDLGetDebugLevel$515$label_3#1:
- havoc inline$BDLGetDebugLevel$515$myNondetVar_0;
- inline$BDLGetDebugLevel$515$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$515$myNondetVar_0;
- goto inline$BDLGetDebugLevel$515$label_1#1;
-
- inline$BDLGetDebugLevel$515$label_1#1:
- goto inline$BDLGetDebugLevel$515$Return#1;
-
- inline$BDLGetDebugLevel$515$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$515$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon41_Then#1, inline$BDLSystemPowerIoCompletion$19$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_56_true#1, inline$BDLSystemPowerIoCompletion$19$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_60#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_61#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_62#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$19$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_57#1:
- goto inline$BDLGetDebugLevel$516$Entry#1;
-
- inline$BDLGetDebugLevel$516$Entry#1:
- goto inline$BDLGetDebugLevel$516$start#1;
-
- inline$BDLGetDebugLevel$516$start#1:
- goto inline$BDLGetDebugLevel$516$label_3#1;
-
- inline$BDLGetDebugLevel$516$label_3#1:
- havoc inline$BDLGetDebugLevel$516$myNondetVar_0;
- inline$BDLGetDebugLevel$516$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$516$myNondetVar_0;
- goto inline$BDLGetDebugLevel$516$label_1#1;
-
- inline$BDLGetDebugLevel$516$label_1#1:
- goto inline$BDLGetDebugLevel$516$Return#1;
-
- inline$BDLGetDebugLevel$516$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$516$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon42_Then#1, inline$BDLSystemPowerIoCompletion$19$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_66_true#1, inline$BDLSystemPowerIoCompletion$19$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$19$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$19$anon43_Then#1, inline$BDLSystemPowerIoCompletion$19$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$19$anon44_Then#1, inline$BDLSystemPowerIoCompletion$19$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_74#1:
- goto inline$storm_IoCompleteRequest$40$Entry#1;
-
- inline$storm_IoCompleteRequest$40$Entry#1:
- inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$40$start#1;
-
- inline$storm_IoCompleteRequest$40$start#1:
- inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$40$label_3#1;
-
- inline$storm_IoCompleteRequest$40$label_3#1:
- call inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$40$label_6#1;
-
- inline$storm_IoCompleteRequest$40$label_6#1:
- goto inline$storm_IoCompleteRequest$40$label_6_true#1, inline$storm_IoCompleteRequest$40$label_6_false#1;
-
- inline$storm_IoCompleteRequest$40$label_6_false#1:
- assume inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$40$label_7#1;
-
- inline$storm_IoCompleteRequest$40$label_6_true#1:
- assume inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$40$label_8#1;
-
- inline$storm_IoCompleteRequest$40$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$40$anon3_Then#1, inline$storm_IoCompleteRequest$40$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$40$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$40$anon1#1;
-
- inline$storm_IoCompleteRequest$40$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$40$label_9#1;
-
- inline$storm_IoCompleteRequest$40$label_9#1:
- goto inline$storm_IoCompleteRequest$40$label_9_true#1, inline$storm_IoCompleteRequest$40$label_9_false#1;
-
- inline$storm_IoCompleteRequest$40$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$40$label_10#1;
-
- inline$storm_IoCompleteRequest$40$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$40$label_1#1;
-
- inline$storm_IoCompleteRequest$40$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$40$label_7#1;
-
- inline$storm_IoCompleteRequest$40$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$40$label_1#1;
-
- inline$storm_IoCompleteRequest$40$label_1#1:
- goto inline$storm_IoCompleteRequest$40$Return#1;
-
- inline$storm_IoCompleteRequest$40$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$40$Return#1;
-
- inline$storm_IoCompleteRequest$40$Return#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon45_Then#1, inline$BDLSystemPowerIoCompletion$19$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$19$anon46_Then#1, inline$BDLSystemPowerIoCompletion$19$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_80#1:
- goto inline$BDLGetDebugLevel$517$Entry#1;
-
- inline$BDLGetDebugLevel$517$Entry#1:
- goto inline$BDLGetDebugLevel$517$start#1;
-
- inline$BDLGetDebugLevel$517$start#1:
- goto inline$BDLGetDebugLevel$517$label_3#1;
-
- inline$BDLGetDebugLevel$517$label_3#1:
- havoc inline$BDLGetDebugLevel$517$myNondetVar_0;
- inline$BDLGetDebugLevel$517$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$517$myNondetVar_0;
- goto inline$BDLGetDebugLevel$517$label_1#1;
-
- inline$BDLGetDebugLevel$517$label_1#1:
- goto inline$BDLGetDebugLevel$517$Return#1;
-
- inline$BDLGetDebugLevel$517$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$517$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon47_Then#1, inline$BDLSystemPowerIoCompletion$19$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_83_true#1, inline$BDLSystemPowerIoCompletion$19$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_87#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_88#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_89#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$19$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_84#1:
- goto inline$BDLGetDebugLevel$518$Entry#1;
-
- inline$BDLGetDebugLevel$518$Entry#1:
- goto inline$BDLGetDebugLevel$518$start#1;
-
- inline$BDLGetDebugLevel$518$start#1:
- goto inline$BDLGetDebugLevel$518$label_3#1;
-
- inline$BDLGetDebugLevel$518$label_3#1:
- havoc inline$BDLGetDebugLevel$518$myNondetVar_0;
- inline$BDLGetDebugLevel$518$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$518$myNondetVar_0;
- goto inline$BDLGetDebugLevel$518$label_1#1;
-
- inline$BDLGetDebugLevel$518$label_1#1:
- goto inline$BDLGetDebugLevel$518$Return#1;
-
- inline$BDLGetDebugLevel$518$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$518$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon48_Then#1, inline$BDLSystemPowerIoCompletion$19$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_93_true#1, inline$BDLSystemPowerIoCompletion$19$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_97#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_98#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_99#1:
- call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$19$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$19$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_94#1:
- goto inline$BDLGetDebugLevel$519$Entry#1;
-
- inline$BDLGetDebugLevel$519$Entry#1:
- goto inline$BDLGetDebugLevel$519$start#1;
-
- inline$BDLGetDebugLevel$519$start#1:
- goto inline$BDLGetDebugLevel$519$label_3#1;
-
- inline$BDLGetDebugLevel$519$label_3#1:
- havoc inline$BDLGetDebugLevel$519$myNondetVar_0;
- inline$BDLGetDebugLevel$519$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$519$myNondetVar_0;
- goto inline$BDLGetDebugLevel$519$label_1#1;
-
- inline$BDLGetDebugLevel$519$label_1#1:
- goto inline$BDLGetDebugLevel$519$Return#1;
-
- inline$BDLGetDebugLevel$519$Return#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$519$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$19$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$19$anon49_Then#1, inline$BDLSystemPowerIoCompletion$19$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_103_true#1, inline$BDLSystemPowerIoCompletion$19$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$19$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$19$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_104#1:
- inline$BDLSystemPowerIoCompletion$19$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$19$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$19$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$19$Return#1;
-
- inline$BDLSystemPowerIoCompletion$19$Return#1:
- inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$19$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$19$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$19$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$19$anon14_Then#1, inline$CallCompletionRoutine$19$anon14_Else#1;
-
- inline$CallCompletionRoutine$19$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$19$anon9#1;
-
- inline$CallCompletionRoutine$19$anon9#1:
- goto inline$CallCompletionRoutine$19$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$19$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$19$Return#1;
-
- inline$CallCompletionRoutine$19$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$19$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$19$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$19$Entry#1:
- inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$19$start#1;
-
- inline$BDLDevicePowerIoCompletion$19$start#1:
- call inline$BDLDevicePowerIoCompletion$19$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$19$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_4#1:
- inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_6#1:
- inline$BDLDevicePowerIoCompletion$19$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$19$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$19$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$19$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$101$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$101$Entry#1:
- inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$101$start#1;
-
- inline$IoGetCurrentIrpStackLocation$101$start#1:
- inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$101$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$101$label_3_true#1, inline$IoGetCurrentIrpStackLocation$101$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$101$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$101$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$101$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$101$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$101$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$101$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$101$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$101$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$101$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$101$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$101$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$101$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$101$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$101$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$101$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$101$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$101$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$101$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$101$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$101$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$101$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$101$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$101$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon30_Then#1, inline$BDLDevicePowerIoCompletion$19$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_13#1:
- inline$BDLDevicePowerIoCompletion$19$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$19$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$19$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_17#1:
- goto inline$BDLGetDebugLevel$502$Entry#1;
-
- inline$BDLGetDebugLevel$502$Entry#1:
- goto inline$BDLGetDebugLevel$502$start#1;
-
- inline$BDLGetDebugLevel$502$start#1:
- goto inline$BDLGetDebugLevel$502$label_3#1;
-
- inline$BDLGetDebugLevel$502$label_3#1:
- havoc inline$BDLGetDebugLevel$502$myNondetVar_0;
- inline$BDLGetDebugLevel$502$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$502$myNondetVar_0;
- goto inline$BDLGetDebugLevel$502$label_1#1;
-
- inline$BDLGetDebugLevel$502$label_1#1:
- goto inline$BDLGetDebugLevel$502$Return#1;
-
- inline$BDLGetDebugLevel$502$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$502$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon31_Then#1, inline$BDLDevicePowerIoCompletion$19$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_20_true#1, inline$BDLDevicePowerIoCompletion$19$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_24#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_25#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_26#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$19$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_21#1:
- goto inline$BDLGetDebugLevel$503$Entry#1;
-
- inline$BDLGetDebugLevel$503$Entry#1:
- goto inline$BDLGetDebugLevel$503$start#1;
-
- inline$BDLGetDebugLevel$503$start#1:
- goto inline$BDLGetDebugLevel$503$label_3#1;
-
- inline$BDLGetDebugLevel$503$label_3#1:
- havoc inline$BDLGetDebugLevel$503$myNondetVar_0;
- inline$BDLGetDebugLevel$503$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$503$myNondetVar_0;
- goto inline$BDLGetDebugLevel$503$label_1#1;
-
- inline$BDLGetDebugLevel$503$label_1#1:
- goto inline$BDLGetDebugLevel$503$Return#1;
-
- inline$BDLGetDebugLevel$503$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$503$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon32_Then#1, inline$BDLDevicePowerIoCompletion$19$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_30_true#1, inline$BDLDevicePowerIoCompletion$19$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_34#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_35#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_36#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$19$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_31#1:
- goto inline$BDLGetDebugLevel$504$Entry#1;
-
- inline$BDLGetDebugLevel$504$Entry#1:
- goto inline$BDLGetDebugLevel$504$start#1;
-
- inline$BDLGetDebugLevel$504$start#1:
- goto inline$BDLGetDebugLevel$504$label_3#1;
-
- inline$BDLGetDebugLevel$504$label_3#1:
- havoc inline$BDLGetDebugLevel$504$myNondetVar_0;
- inline$BDLGetDebugLevel$504$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$504$myNondetVar_0;
- goto inline$BDLGetDebugLevel$504$label_1#1;
-
- inline$BDLGetDebugLevel$504$label_1#1:
- goto inline$BDLGetDebugLevel$504$Return#1;
-
- inline$BDLGetDebugLevel$504$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$504$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon33_Then#1, inline$BDLDevicePowerIoCompletion$19$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_40_true#1, inline$BDLDevicePowerIoCompletion$19$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_41_true#1, inline$BDLDevicePowerIoCompletion$19$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$19$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$19$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_44_true#1, inline$BDLDevicePowerIoCompletion$19$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$19$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_45_true#1, inline$BDLDevicePowerIoCompletion$19$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$19$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$19$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$19$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$19$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$19$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$19$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_54#1:
- inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$19$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_55_true#1, inline$BDLDevicePowerIoCompletion$19$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_56#1:
- call inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$19$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$19$anon34_Then#1, inline$BDLDevicePowerIoCompletion$19$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_59#1:
- goto inline$BDLGetDebugLevel$505$Entry#1;
-
- inline$BDLGetDebugLevel$505$Entry#1:
- goto inline$BDLGetDebugLevel$505$start#1;
-
- inline$BDLGetDebugLevel$505$start#1:
- goto inline$BDLGetDebugLevel$505$label_3#1;
-
- inline$BDLGetDebugLevel$505$label_3#1:
- havoc inline$BDLGetDebugLevel$505$myNondetVar_0;
- inline$BDLGetDebugLevel$505$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$505$myNondetVar_0;
- goto inline$BDLGetDebugLevel$505$label_1#1;
-
- inline$BDLGetDebugLevel$505$label_1#1:
- goto inline$BDLGetDebugLevel$505$Return#1;
-
- inline$BDLGetDebugLevel$505$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$505$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon35_Then#1, inline$BDLDevicePowerIoCompletion$19$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_62_true#1, inline$BDLDevicePowerIoCompletion$19$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_66#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_67#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_68#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$19$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_63#1:
- goto inline$BDLGetDebugLevel$506$Entry#1;
-
- inline$BDLGetDebugLevel$506$Entry#1:
- goto inline$BDLGetDebugLevel$506$start#1;
-
- inline$BDLGetDebugLevel$506$start#1:
- goto inline$BDLGetDebugLevel$506$label_3#1;
-
- inline$BDLGetDebugLevel$506$label_3#1:
- havoc inline$BDLGetDebugLevel$506$myNondetVar_0;
- inline$BDLGetDebugLevel$506$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$506$myNondetVar_0;
- goto inline$BDLGetDebugLevel$506$label_1#1;
-
- inline$BDLGetDebugLevel$506$label_1#1:
- goto inline$BDLGetDebugLevel$506$Return#1;
-
- inline$BDLGetDebugLevel$506$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$506$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon36_Then#1, inline$BDLDevicePowerIoCompletion$19$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_72_true#1, inline$BDLDevicePowerIoCompletion$19$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_76#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_77#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_78#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$19$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_73#1:
- goto inline$BDLGetDebugLevel$507$Entry#1;
-
- inline$BDLGetDebugLevel$507$Entry#1:
- goto inline$BDLGetDebugLevel$507$start#1;
-
- inline$BDLGetDebugLevel$507$start#1:
- goto inline$BDLGetDebugLevel$507$label_3#1;
-
- inline$BDLGetDebugLevel$507$label_3#1:
- havoc inline$BDLGetDebugLevel$507$myNondetVar_0;
- inline$BDLGetDebugLevel$507$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$507$myNondetVar_0;
- goto inline$BDLGetDebugLevel$507$label_1#1;
-
- inline$BDLGetDebugLevel$507$label_1#1:
- goto inline$BDLGetDebugLevel$507$Return#1;
-
- inline$BDLGetDebugLevel$507$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$507$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon37_Then#1, inline$BDLDevicePowerIoCompletion$19$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_82_true#1, inline$BDLDevicePowerIoCompletion$19$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$19$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$19$anon38_Then#1, inline$BDLDevicePowerIoCompletion$19$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$19$anon39_Then#1, inline$BDLDevicePowerIoCompletion$19$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_92#1:
- goto inline$storm_IoCompleteRequest$39$Entry#1;
-
- inline$storm_IoCompleteRequest$39$Entry#1:
- inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$39$start#1;
-
- inline$storm_IoCompleteRequest$39$start#1:
- inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$39$label_3#1;
-
- inline$storm_IoCompleteRequest$39$label_3#1:
- call inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$39$label_6#1;
-
- inline$storm_IoCompleteRequest$39$label_6#1:
- goto inline$storm_IoCompleteRequest$39$label_6_true#1, inline$storm_IoCompleteRequest$39$label_6_false#1;
-
- inline$storm_IoCompleteRequest$39$label_6_false#1:
- assume inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$39$label_7#1;
-
- inline$storm_IoCompleteRequest$39$label_6_true#1:
- assume inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$39$label_8#1;
-
- inline$storm_IoCompleteRequest$39$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$39$anon3_Then#1, inline$storm_IoCompleteRequest$39$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$39$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$39$anon1#1;
-
- inline$storm_IoCompleteRequest$39$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$39$label_9#1;
-
- inline$storm_IoCompleteRequest$39$label_9#1:
- goto inline$storm_IoCompleteRequest$39$label_9_true#1, inline$storm_IoCompleteRequest$39$label_9_false#1;
-
- inline$storm_IoCompleteRequest$39$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$39$label_10#1;
-
- inline$storm_IoCompleteRequest$39$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$39$label_1#1;
-
- inline$storm_IoCompleteRequest$39$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$39$label_7#1;
-
- inline$storm_IoCompleteRequest$39$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$39$label_1#1;
-
- inline$storm_IoCompleteRequest$39$label_1#1:
- goto inline$storm_IoCompleteRequest$39$Return#1;
-
- inline$storm_IoCompleteRequest$39$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$39$Return#1;
-
- inline$storm_IoCompleteRequest$39$Return#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon40_Then#1, inline$BDLDevicePowerIoCompletion$19$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$19$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$19$anon41_Then#1, inline$BDLDevicePowerIoCompletion$19$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_98#1:
- goto inline$BDLGetDebugLevel$508$Entry#1;
-
- inline$BDLGetDebugLevel$508$Entry#1:
- goto inline$BDLGetDebugLevel$508$start#1;
-
- inline$BDLGetDebugLevel$508$start#1:
- goto inline$BDLGetDebugLevel$508$label_3#1;
-
- inline$BDLGetDebugLevel$508$label_3#1:
- havoc inline$BDLGetDebugLevel$508$myNondetVar_0;
- inline$BDLGetDebugLevel$508$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$508$myNondetVar_0;
- goto inline$BDLGetDebugLevel$508$label_1#1;
-
- inline$BDLGetDebugLevel$508$label_1#1:
- goto inline$BDLGetDebugLevel$508$Return#1;
-
- inline$BDLGetDebugLevel$508$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$508$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon42_Then#1, inline$BDLDevicePowerIoCompletion$19$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_101_true#1, inline$BDLDevicePowerIoCompletion$19$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_105#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_106#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_107#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$19$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_102#1:
- goto inline$BDLGetDebugLevel$509$Entry#1;
-
- inline$BDLGetDebugLevel$509$Entry#1:
- goto inline$BDLGetDebugLevel$509$start#1;
-
- inline$BDLGetDebugLevel$509$start#1:
- goto inline$BDLGetDebugLevel$509$label_3#1;
-
- inline$BDLGetDebugLevel$509$label_3#1:
- havoc inline$BDLGetDebugLevel$509$myNondetVar_0;
- inline$BDLGetDebugLevel$509$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$509$myNondetVar_0;
- goto inline$BDLGetDebugLevel$509$label_1#1;
-
- inline$BDLGetDebugLevel$509$label_1#1:
- goto inline$BDLGetDebugLevel$509$Return#1;
-
- inline$BDLGetDebugLevel$509$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$509$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon43_Then#1, inline$BDLDevicePowerIoCompletion$19$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_111_true#1, inline$BDLDevicePowerIoCompletion$19$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_115#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_116#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_117#1:
- call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$19$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$19$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_112#1:
- goto inline$BDLGetDebugLevel$510$Entry#1;
-
- inline$BDLGetDebugLevel$510$Entry#1:
- goto inline$BDLGetDebugLevel$510$start#1;
-
- inline$BDLGetDebugLevel$510$start#1:
- goto inline$BDLGetDebugLevel$510$label_3#1;
-
- inline$BDLGetDebugLevel$510$label_3#1:
- havoc inline$BDLGetDebugLevel$510$myNondetVar_0;
- inline$BDLGetDebugLevel$510$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$510$myNondetVar_0;
- goto inline$BDLGetDebugLevel$510$label_1#1;
-
- inline$BDLGetDebugLevel$510$label_1#1:
- goto inline$BDLGetDebugLevel$510$Return#1;
-
- inline$BDLGetDebugLevel$510$Return#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$510$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$19$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$19$anon44_Then#1, inline$BDLDevicePowerIoCompletion$19$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_121_true#1, inline$BDLDevicePowerIoCompletion$19$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$19$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$19$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_122#1:
- inline$BDLDevicePowerIoCompletion$19$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$19$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$19$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$19$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$19$Return#1;
-
- inline$BDLDevicePowerIoCompletion$19$Return#1:
- inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$19$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$19$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$19$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$19$anon13_Then#1, inline$CallCompletionRoutine$19$anon13_Else#1;
-
- inline$CallCompletionRoutine$19$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$19$anon7#1;
-
- inline$CallCompletionRoutine$19$anon7#1:
- goto inline$CallCompletionRoutine$19$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$19$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$19$Return#1;
-
- inline$CallCompletionRoutine$19$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$19$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$19$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$19$Entry#1:
- inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$19$start#1;
-
- inline$BDLCallDriverCompletionRoutine$19$start#1:
- inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$19$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$19$label_3_true#1, inline$BDLCallDriverCompletionRoutine$19$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$19$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$19$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$19$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$19$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_6#1:
- goto inline$storm_KeSetEvent$21$Entry#1;
-
- inline$storm_KeSetEvent$21$Entry#1:
- inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$21$start#1;
-
- inline$storm_KeSetEvent$21$start#1:
- inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$21$label_3#1;
-
- inline$storm_KeSetEvent$21$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$21$label_1#1;
-
- inline$storm_KeSetEvent$21$label_1#1:
- goto inline$storm_KeSetEvent$21$Return#1;
-
- inline$storm_KeSetEvent$21$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$19$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$19$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$19$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$19$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$19$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$19$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$19$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_9#1:
- inline$BDLCallDriverCompletionRoutine$19$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$19$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$19$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$19$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$19$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$19$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$19$Return#1:
- inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$19$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$19$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$19$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$19$anon12_Then#1, inline$CallCompletionRoutine$19$anon12_Else#1;
-
- inline$CallCompletionRoutine$19$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$19$anon5#1;
-
- inline$CallCompletionRoutine$19$anon5#1:
- goto inline$CallCompletionRoutine$19$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$19$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$19$label_23#1;
-
- inline$CallCompletionRoutine$19$label_23#1:
- inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$19$label_24#1;
-
- inline$CallCompletionRoutine$19$label_24#1:
- goto inline$CallCompletionRoutine$19$label_24_true#1, inline$CallCompletionRoutine$19$label_24_false#1;
-
- inline$CallCompletionRoutine$19$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$19$label_1#1;
-
- inline$CallCompletionRoutine$19$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$19$label_25#1;
-
- inline$CallCompletionRoutine$19$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$19$label_1#1;
-
- inline$CallCompletionRoutine$19$label_1#1:
- goto inline$CallCompletionRoutine$19$Return#1;
-
- inline$CallCompletionRoutine$19$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$19$Return#1;
-
- inline$CallCompletionRoutine$19$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$19$Return#1;
-
- inline$CallCompletionRoutine$19$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$19$Return#1;
-
- inline$CallCompletionRoutine$19$Return#1:
- goto inline$storm_IoCallDriver$9$label_39$1#1;
-
- inline$storm_IoCallDriver$9$label_39$1#1:
- goto inline$storm_IoCallDriver$9$anon15_Then#1, inline$storm_IoCallDriver$9$anon15_Else#1;
-
- inline$storm_IoCallDriver$9$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$9$anon10#1;
-
- inline$storm_IoCallDriver$9$anon10#1:
- goto inline$storm_IoCallDriver$9$label_36#1;
-
- inline$storm_IoCallDriver$9$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$9$Return#1;
-
- inline$storm_IoCallDriver$9$label_27_case_0#1:
- assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$9$label_28#1;
-
- inline$storm_IoCallDriver$9$label_28#1:
- inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$9$label_42#1;
-
- inline$storm_IoCallDriver$9$label_42#1:
- goto inline$storm_IoCallDriver$9$label_43#1;
-
- inline$storm_IoCallDriver$9$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$9$label_36#1;
-
- inline$storm_IoCallDriver$9$label_36#1:
- inline$storm_IoCallDriver$9$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$9$label_1#1;
-
- inline$storm_IoCallDriver$9$label_1#1:
- goto inline$storm_IoCallDriver$9$Return#1;
-
- inline$storm_IoCallDriver$9$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$9$Return#1;
-
- inline$storm_IoCallDriver$9$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$9$Return#1;
-
- inline$storm_IoCallDriver$9$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$9$Return#1;
-
- inline$storm_IoCallDriver$9$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$9$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_19$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_19$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon20_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon9#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_42#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_42#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_IoCallDriver$108.29$4$;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon20_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_18_true#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_22#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_22#1:
- call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon21_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon21_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon11#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon11#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_25#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_25#1:
- goto inline$storm_PoCallDriver$4$Entry#1;
-
- inline$storm_PoCallDriver$4$Entry#1:
- inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_PoCallDriver$4$start#1;
-
- inline$storm_PoCallDriver$4$start#1:
- inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8_.1;
- goto inline$storm_PoCallDriver$4$label_3#1;
-
- inline$storm_PoCallDriver$4$label_3#1:
- goto inline$storm_IoCallDriver$10$Entry#1;
-
- inline$storm_IoCallDriver$10$Entry#1:
- inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8;
- goto inline$storm_IoCallDriver$10$start#1;
-
- inline$storm_IoCallDriver$10$start#1:
- inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$10$label_3#1;
-
- inline$storm_IoCallDriver$10$label_3#1:
- goto inline$storm_IoCallDriver$10$label_4#1;
-
- inline$storm_IoCallDriver$10$label_4#1:
- goto inline$storm_IoCallDriver$10$label_5#1;
-
- inline$storm_IoCallDriver$10$label_5#1:
- goto inline$storm_IoCallDriver$10$label_6#1;
-
- inline$storm_IoCallDriver$10$label_6#1:
- call inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$10$label_9#1;
-
- inline$storm_IoCallDriver$10$label_9#1:
- goto inline$storm_IoCallDriver$10$label_9_true#1, inline$storm_IoCallDriver$10$label_9_false#1;
-
- inline$storm_IoCallDriver$10$label_9_false#1:
- assume inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$10$label_10#1;
-
- inline$storm_IoCallDriver$10$label_9_true#1:
- assume inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$10$label_13#1;
-
- inline$storm_IoCallDriver$10$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$10$anon12_Then#1, inline$storm_IoCallDriver$10$anon12_Else#1;
-
- inline$storm_IoCallDriver$10$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$10$anon3#1;
-
- inline$storm_IoCallDriver$10$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$10$label_14#1;
-
- inline$storm_IoCallDriver$10$label_14#1:
- goto inline$storm_IoCallDriver$10$label_14_true#1, inline$storm_IoCallDriver$10$label_14_false#1;
-
- inline$storm_IoCallDriver$10$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$10$label_15#1;
-
- inline$storm_IoCallDriver$10$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$10$label_1#1;
-
- inline$storm_IoCallDriver$10$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$10$label_10#1;
-
- inline$storm_IoCallDriver$10$label_10#1:
- goto inline$IoSetNextIrpStackLocation$11$Entry#1;
-
- inline$IoSetNextIrpStackLocation$11$Entry#1:
- inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$11$start#1;
-
- inline$IoSetNextIrpStackLocation$11$start#1:
- inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$11$label_3#1;
-
- inline$IoSetNextIrpStackLocation$11$label_3#1:
- goto inline$IoSetNextIrpStackLocation$11$label_3_true#1, inline$IoSetNextIrpStackLocation$11$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$11$label_3_false#1:
- inline$IoSetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$11$myVar_0);
- goto inline$IoSetNextIrpStackLocation$11$label_4#1;
-
- inline$IoSetNextIrpStackLocation$11$label_4#1:
- call inline$IoSetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$11$label_7#1;
-
- inline$IoSetNextIrpStackLocation$11$label_7#1:
- call inline$IoSetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$11$label_8#1;
-
- inline$IoSetNextIrpStackLocation$11$label_8#1:
- goto inline$IoSetNextIrpStackLocation$11$label_5#1;
-
- inline$IoSetNextIrpStackLocation$11$label_3_true#1:
- inline$IoSetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$11$myVar_0);
- goto inline$IoSetNextIrpStackLocation$11$label_5#1;
-
- inline$IoSetNextIrpStackLocation$11$label_5#1:
- inline$IoSetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$11$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$11$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$11$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$11$label_6#1;
-
- inline$IoSetNextIrpStackLocation$11$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$11$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$11$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$11$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$11$label_1#1;
-
- inline$IoSetNextIrpStackLocation$11$label_1#1:
- goto inline$IoSetNextIrpStackLocation$11$Return#1;
-
- inline$IoSetNextIrpStackLocation$11$Return#1:
- goto inline$storm_IoCallDriver$10$label_10$1#1;
-
- inline$storm_IoCallDriver$10$label_10$1#1:
- goto inline$storm_IoCallDriver$10$anon11_Then#1, inline$storm_IoCallDriver$10$anon11_Else#1;
-
- inline$storm_IoCallDriver$10$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$10$anon1#1;
-
- inline$storm_IoCallDriver$10$anon1#1:
- goto inline$storm_IoCallDriver$10$label_18#1;
-
- inline$storm_IoCallDriver$10$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$103$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$103$Entry#1:
- inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$103$start#1;
-
- inline$IoGetCurrentIrpStackLocation$103$start#1:
- inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$103$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$103$label_3_true#1, inline$IoGetCurrentIrpStackLocation$103$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$103$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$103$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$103$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$103$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$103$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$103$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$103$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$103$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$103$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$103$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$103$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$103$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$103$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$103$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$103$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$103$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$103$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$103$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$103$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$103$Return#1:
- goto inline$storm_IoCallDriver$10$label_18$1#1;
-
- inline$storm_IoCallDriver$10$label_18$1#1:
- goto inline$storm_IoCallDriver$10$anon13_Then#1, inline$storm_IoCallDriver$10$anon13_Else#1;
-
- inline$storm_IoCallDriver$10$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$10$anon6#1;
-
- inline$storm_IoCallDriver$10$anon6#1:
- goto inline$storm_IoCallDriver$10$label_21#1;
-
- inline$storm_IoCallDriver$10$label_21#1:
- goto inline$storm_IoCallDriver$10$label_22#1;
-
- inline$storm_IoCallDriver$10$label_22#1:
- goto inline$storm_IoCallDriver$10$label_23#1;
-
- inline$storm_IoCallDriver$10$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$10$label_24#1;
-
- inline$storm_IoCallDriver$10$label_24#1:
- call inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$10$label_27#1;
-
- inline$storm_IoCallDriver$10$label_27#1:
- goto inline$storm_IoCallDriver$10$label_27_case_0#1, inline$storm_IoCallDriver$10$label_27_case_1#1, inline$storm_IoCallDriver$10$label_27_case_2#1;
-
- inline$storm_IoCallDriver$10$label_27_case_2#1:
- assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$10$label_30#1;
-
- inline$storm_IoCallDriver$10$label_30#1:
- inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$10$label_31#1;
-
- inline$storm_IoCallDriver$10$label_31#1:
- goto inline$storm_IoCallDriver$10$label_32#1;
-
- inline$storm_IoCallDriver$10$label_32#1:
- goto inline$storm_IoCallDriver$10$label_33#1;
-
- inline$storm_IoCallDriver$10$label_33#1:
- goto inline$CallCompletionRoutine$20$Entry#1;
-
- inline$CallCompletionRoutine$20$Entry#1:
- inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$20$start#1;
-
- inline$CallCompletionRoutine$20$start#1:
- inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$20$label_3#1;
-
- inline$CallCompletionRoutine$20$label_3#1:
- goto inline$CallCompletionRoutine$20$label_4#1;
-
- inline$CallCompletionRoutine$20$label_4#1:
- goto inline$CallCompletionRoutine$20$label_5#1;
-
- inline$CallCompletionRoutine$20$label_5#1:
- goto inline$CallCompletionRoutine$20$label_6#1;
-
- inline$CallCompletionRoutine$20$label_6#1:
- goto inline$CallCompletionRoutine$20$label_7#1;
-
- inline$CallCompletionRoutine$20$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$104$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$104$Entry#1:
- inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$104$start#1;
-
- inline$IoGetCurrentIrpStackLocation$104$start#1:
- inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$104$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$104$label_3_true#1, inline$IoGetCurrentIrpStackLocation$104$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$104$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$104$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$104$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$104$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$104$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$104$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$104$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$104$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$104$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$104$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$104$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$104$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$104$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$104$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$104$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$104$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$104$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$104$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$104$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$104$Return#1:
- goto inline$CallCompletionRoutine$20$label_7$1#1;
-
- inline$CallCompletionRoutine$20$label_7$1#1:
- goto inline$CallCompletionRoutine$20$anon10_Then#1, inline$CallCompletionRoutine$20$anon10_Else#1;
-
- inline$CallCompletionRoutine$20$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$20$anon1#1;
-
- inline$CallCompletionRoutine$20$anon1#1:
- goto inline$CallCompletionRoutine$20$label_10#1;
-
- inline$CallCompletionRoutine$20$label_10#1:
- goto inline$CallCompletionRoutine$20$label_11#1;
-
- inline$CallCompletionRoutine$20$label_11#1:
- havoc inline$CallCompletionRoutine$20$myNondetVar_0;
- inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$myNondetVar_0;
- goto inline$CallCompletionRoutine$20$label_12#1;
-
- inline$CallCompletionRoutine$20$label_12#1:
- havoc inline$CallCompletionRoutine$20$myNondetVar_0;
- inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$myNondetVar_0;
- goto inline$CallCompletionRoutine$20$label_13#1;
-
- inline$CallCompletionRoutine$20$label_13#1:
- havoc inline$CallCompletionRoutine$20$myNondetVar_0;
- goto inline$CallCompletionRoutine$20$label_14#1;
-
- inline$CallCompletionRoutine$20$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$105$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$105$Entry#1:
- inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$105$start#1;
-
- inline$IoGetCurrentIrpStackLocation$105$start#1:
- inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$105$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$105$label_3_true#1, inline$IoGetCurrentIrpStackLocation$105$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$105$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$105$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$105$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$105$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$105$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$105$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$105$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$105$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$105$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$105$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$105$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$105$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$105$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$105$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$105$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$105$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$105$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$105$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$105$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$105$Return#1:
- goto inline$CallCompletionRoutine$20$label_14$1#1;
-
- inline$CallCompletionRoutine$20$label_14$1#1:
- goto inline$CallCompletionRoutine$20$anon11_Then#1, inline$CallCompletionRoutine$20$anon11_Else#1;
-
- inline$CallCompletionRoutine$20$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$20$anon3#1;
-
- inline$CallCompletionRoutine$20$anon3#1:
- goto inline$CallCompletionRoutine$20$label_17#1;
-
- inline$CallCompletionRoutine$20$label_17#1:
- goto inline$CallCompletionRoutine$20$label_18#1;
-
- inline$CallCompletionRoutine$20$label_18#1:
- goto inline$CallCompletionRoutine$20$label_18_true#1, inline$CallCompletionRoutine$20$label_18_false#1;
-
- inline$CallCompletionRoutine$20$label_18_false#1:
- assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$20$label_1#1;
-
- inline$CallCompletionRoutine$20$label_18_true#1:
- assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$20$label_19#1;
-
- inline$CallCompletionRoutine$20$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$20$label_20#1;
-
- inline$CallCompletionRoutine$20$label_20#1:
- goto inline$CallCompletionRoutine$20$label_20_icall_1#1, inline$CallCompletionRoutine$20$label_20_icall_2#1, inline$CallCompletionRoutine$20$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$20$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$20$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$20$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$20$Entry#1:
- inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$20$start#1;
-
- inline$BDLSystemPowerIoCompletion$20$start#1:
- call inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$20$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_4#1:
- inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_6#1:
- inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$20$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$20$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$20$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$107$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$107$Entry#1:
- inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$107$start#1;
-
- inline$IoGetCurrentIrpStackLocation$107$start#1:
- inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$107$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$107$label_3_true#1, inline$IoGetCurrentIrpStackLocation$107$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$107$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$107$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$107$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$107$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$107$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$107$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$107$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$107$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$107$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$107$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$107$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$107$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$107$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$107$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$107$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$107$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$107$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$107$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$107$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$107$Return#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon36_Then#1, inline$BDLSystemPowerIoCompletion$20$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_15#1:
- goto inline$BDLGetDebugLevel$532$Entry#1;
-
- inline$BDLGetDebugLevel$532$Entry#1:
- goto inline$BDLGetDebugLevel$532$start#1;
-
- inline$BDLGetDebugLevel$532$start#1:
- goto inline$BDLGetDebugLevel$532$label_3#1;
-
- inline$BDLGetDebugLevel$532$label_3#1:
- havoc inline$BDLGetDebugLevel$532$myNondetVar_0;
- inline$BDLGetDebugLevel$532$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$532$myNondetVar_0;
- goto inline$BDLGetDebugLevel$532$label_1#1;
-
- inline$BDLGetDebugLevel$532$label_1#1:
- goto inline$BDLGetDebugLevel$532$Return#1;
-
- inline$BDLGetDebugLevel$532$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$532$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon37_Then#1, inline$BDLSystemPowerIoCompletion$20$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_18_true#1, inline$BDLSystemPowerIoCompletion$20$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_22#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_23#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_24#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$20$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_19#1:
- goto inline$BDLGetDebugLevel$533$Entry#1;
-
- inline$BDLGetDebugLevel$533$Entry#1:
- goto inline$BDLGetDebugLevel$533$start#1;
-
- inline$BDLGetDebugLevel$533$start#1:
- goto inline$BDLGetDebugLevel$533$label_3#1;
-
- inline$BDLGetDebugLevel$533$label_3#1:
- havoc inline$BDLGetDebugLevel$533$myNondetVar_0;
- inline$BDLGetDebugLevel$533$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$533$myNondetVar_0;
- goto inline$BDLGetDebugLevel$533$label_1#1;
-
- inline$BDLGetDebugLevel$533$label_1#1:
- goto inline$BDLGetDebugLevel$533$Return#1;
-
- inline$BDLGetDebugLevel$533$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$533$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon38_Then#1, inline$BDLSystemPowerIoCompletion$20$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_28_true#1, inline$BDLSystemPowerIoCompletion$20$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_32#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_33#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_34#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$20$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_29#1:
- goto inline$BDLGetDebugLevel$534$Entry#1;
-
- inline$BDLGetDebugLevel$534$Entry#1:
- goto inline$BDLGetDebugLevel$534$start#1;
-
- inline$BDLGetDebugLevel$534$start#1:
- goto inline$BDLGetDebugLevel$534$label_3#1;
-
- inline$BDLGetDebugLevel$534$label_3#1:
- havoc inline$BDLGetDebugLevel$534$myNondetVar_0;
- inline$BDLGetDebugLevel$534$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$534$myNondetVar_0;
- goto inline$BDLGetDebugLevel$534$label_1#1;
-
- inline$BDLGetDebugLevel$534$label_1#1:
- goto inline$BDLGetDebugLevel$534$Return#1;
-
- inline$BDLGetDebugLevel$534$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$534$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon39_Then#1, inline$BDLSystemPowerIoCompletion$20$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_38_true#1, inline$BDLSystemPowerIoCompletion$20$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_39_true#1, inline$BDLSystemPowerIoCompletion$20$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$20$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$20$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$20$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_106_true#1, inline$BDLSystemPowerIoCompletion$20$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_142#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_143#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$20$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$20$myNondetVar_0, inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$20$anon50_Then#1, inline$BDLSystemPowerIoCompletion$20$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_112#1:
- inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$20$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_113_true#1, inline$BDLSystemPowerIoCompletion$20$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$20$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_117#1:
- goto inline$BDLGetDebugLevel$541$Entry#1;
-
- inline$BDLGetDebugLevel$541$Entry#1:
- goto inline$BDLGetDebugLevel$541$start#1;
-
- inline$BDLGetDebugLevel$541$start#1:
- goto inline$BDLGetDebugLevel$541$label_3#1;
-
- inline$BDLGetDebugLevel$541$label_3#1:
- havoc inline$BDLGetDebugLevel$541$myNondetVar_0;
- inline$BDLGetDebugLevel$541$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$541$myNondetVar_0;
- goto inline$BDLGetDebugLevel$541$label_1#1;
-
- inline$BDLGetDebugLevel$541$label_1#1:
- goto inline$BDLGetDebugLevel$541$Return#1;
-
- inline$BDLGetDebugLevel$541$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$541$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon51_Then#1, inline$BDLSystemPowerIoCompletion$20$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_120_true#1, inline$BDLSystemPowerIoCompletion$20$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_124#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_125#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_126#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$20$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_121#1:
- goto inline$BDLGetDebugLevel$542$Entry#1;
-
- inline$BDLGetDebugLevel$542$Entry#1:
- goto inline$BDLGetDebugLevel$542$start#1;
-
- inline$BDLGetDebugLevel$542$start#1:
- goto inline$BDLGetDebugLevel$542$label_3#1;
-
- inline$BDLGetDebugLevel$542$label_3#1:
- havoc inline$BDLGetDebugLevel$542$myNondetVar_0;
- inline$BDLGetDebugLevel$542$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$542$myNondetVar_0;
- goto inline$BDLGetDebugLevel$542$label_1#1;
-
- inline$BDLGetDebugLevel$542$label_1#1:
- goto inline$BDLGetDebugLevel$542$Return#1;
-
- inline$BDLGetDebugLevel$542$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$542$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon52_Then#1, inline$BDLSystemPowerIoCompletion$20$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_130_true#1, inline$BDLSystemPowerIoCompletion$20$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_134#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_135#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_136#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$20$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_131#1:
- goto inline$BDLGetDebugLevel$543$Entry#1;
-
- inline$BDLGetDebugLevel$543$Entry#1:
- goto inline$BDLGetDebugLevel$543$start#1;
-
- inline$BDLGetDebugLevel$543$start#1:
- goto inline$BDLGetDebugLevel$543$label_3#1;
-
- inline$BDLGetDebugLevel$543$label_3#1:
- havoc inline$BDLGetDebugLevel$543$myNondetVar_0;
- inline$BDLGetDebugLevel$543$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$543$myNondetVar_0;
- goto inline$BDLGetDebugLevel$543$label_1#1;
-
- inline$BDLGetDebugLevel$543$label_1#1:
- goto inline$BDLGetDebugLevel$543$Return#1;
-
- inline$BDLGetDebugLevel$543$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$543$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon53_Then#1, inline$BDLSystemPowerIoCompletion$20$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_140_true#1, inline$BDLSystemPowerIoCompletion$20$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$20$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_115#1:
- inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$20$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$20$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_43#1:
- goto inline$BDLGetDebugLevel$535$Entry#1;
-
- inline$BDLGetDebugLevel$535$Entry#1:
- goto inline$BDLGetDebugLevel$535$start#1;
-
- inline$BDLGetDebugLevel$535$start#1:
- goto inline$BDLGetDebugLevel$535$label_3#1;
-
- inline$BDLGetDebugLevel$535$label_3#1:
- havoc inline$BDLGetDebugLevel$535$myNondetVar_0;
- inline$BDLGetDebugLevel$535$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$535$myNondetVar_0;
- goto inline$BDLGetDebugLevel$535$label_1#1;
-
- inline$BDLGetDebugLevel$535$label_1#1:
- goto inline$BDLGetDebugLevel$535$Return#1;
-
- inline$BDLGetDebugLevel$535$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$535$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon40_Then#1, inline$BDLSystemPowerIoCompletion$20$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_46_true#1, inline$BDLSystemPowerIoCompletion$20$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_50#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_51#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_52#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$20$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_47#1:
- goto inline$BDLGetDebugLevel$536$Entry#1;
-
- inline$BDLGetDebugLevel$536$Entry#1:
- goto inline$BDLGetDebugLevel$536$start#1;
-
- inline$BDLGetDebugLevel$536$start#1:
- goto inline$BDLGetDebugLevel$536$label_3#1;
-
- inline$BDLGetDebugLevel$536$label_3#1:
- havoc inline$BDLGetDebugLevel$536$myNondetVar_0;
- inline$BDLGetDebugLevel$536$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$536$myNondetVar_0;
- goto inline$BDLGetDebugLevel$536$label_1#1;
-
- inline$BDLGetDebugLevel$536$label_1#1:
- goto inline$BDLGetDebugLevel$536$Return#1;
-
- inline$BDLGetDebugLevel$536$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$536$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon41_Then#1, inline$BDLSystemPowerIoCompletion$20$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_56_true#1, inline$BDLSystemPowerIoCompletion$20$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_60#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_61#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_62#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$20$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_57#1:
- goto inline$BDLGetDebugLevel$537$Entry#1;
-
- inline$BDLGetDebugLevel$537$Entry#1:
- goto inline$BDLGetDebugLevel$537$start#1;
-
- inline$BDLGetDebugLevel$537$start#1:
- goto inline$BDLGetDebugLevel$537$label_3#1;
-
- inline$BDLGetDebugLevel$537$label_3#1:
- havoc inline$BDLGetDebugLevel$537$myNondetVar_0;
- inline$BDLGetDebugLevel$537$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$537$myNondetVar_0;
- goto inline$BDLGetDebugLevel$537$label_1#1;
-
- inline$BDLGetDebugLevel$537$label_1#1:
- goto inline$BDLGetDebugLevel$537$Return#1;
-
- inline$BDLGetDebugLevel$537$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$537$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon42_Then#1, inline$BDLSystemPowerIoCompletion$20$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_66_true#1, inline$BDLSystemPowerIoCompletion$20$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$20$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$20$anon43_Then#1, inline$BDLSystemPowerIoCompletion$20$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$20$anon44_Then#1, inline$BDLSystemPowerIoCompletion$20$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_74#1:
- goto inline$storm_IoCompleteRequest$42$Entry#1;
-
- inline$storm_IoCompleteRequest$42$Entry#1:
- inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$42$start#1;
-
- inline$storm_IoCompleteRequest$42$start#1:
- inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$42$label_3#1;
-
- inline$storm_IoCompleteRequest$42$label_3#1:
- call inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$42$label_6#1;
-
- inline$storm_IoCompleteRequest$42$label_6#1:
- goto inline$storm_IoCompleteRequest$42$label_6_true#1, inline$storm_IoCompleteRequest$42$label_6_false#1;
-
- inline$storm_IoCompleteRequest$42$label_6_false#1:
- assume inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$42$label_7#1;
-
- inline$storm_IoCompleteRequest$42$label_6_true#1:
- assume inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$42$label_8#1;
-
- inline$storm_IoCompleteRequest$42$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$42$anon3_Then#1, inline$storm_IoCompleteRequest$42$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$42$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$42$anon1#1;
-
- inline$storm_IoCompleteRequest$42$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$42$label_9#1;
-
- inline$storm_IoCompleteRequest$42$label_9#1:
- goto inline$storm_IoCompleteRequest$42$label_9_true#1, inline$storm_IoCompleteRequest$42$label_9_false#1;
-
- inline$storm_IoCompleteRequest$42$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$42$label_10#1;
-
- inline$storm_IoCompleteRequest$42$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$42$label_1#1;
-
- inline$storm_IoCompleteRequest$42$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$42$label_7#1;
-
- inline$storm_IoCompleteRequest$42$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$42$label_1#1;
-
- inline$storm_IoCompleteRequest$42$label_1#1:
- goto inline$storm_IoCompleteRequest$42$Return#1;
-
- inline$storm_IoCompleteRequest$42$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$42$Return#1;
-
- inline$storm_IoCompleteRequest$42$Return#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon45_Then#1, inline$BDLSystemPowerIoCompletion$20$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$20$anon46_Then#1, inline$BDLSystemPowerIoCompletion$20$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_80#1:
- goto inline$BDLGetDebugLevel$538$Entry#1;
-
- inline$BDLGetDebugLevel$538$Entry#1:
- goto inline$BDLGetDebugLevel$538$start#1;
-
- inline$BDLGetDebugLevel$538$start#1:
- goto inline$BDLGetDebugLevel$538$label_3#1;
-
- inline$BDLGetDebugLevel$538$label_3#1:
- havoc inline$BDLGetDebugLevel$538$myNondetVar_0;
- inline$BDLGetDebugLevel$538$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$538$myNondetVar_0;
- goto inline$BDLGetDebugLevel$538$label_1#1;
-
- inline$BDLGetDebugLevel$538$label_1#1:
- goto inline$BDLGetDebugLevel$538$Return#1;
-
- inline$BDLGetDebugLevel$538$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$538$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon47_Then#1, inline$BDLSystemPowerIoCompletion$20$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_83_true#1, inline$BDLSystemPowerIoCompletion$20$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_87#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_88#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_89#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$20$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_84#1:
- goto inline$BDLGetDebugLevel$539$Entry#1;
-
- inline$BDLGetDebugLevel$539$Entry#1:
- goto inline$BDLGetDebugLevel$539$start#1;
-
- inline$BDLGetDebugLevel$539$start#1:
- goto inline$BDLGetDebugLevel$539$label_3#1;
-
- inline$BDLGetDebugLevel$539$label_3#1:
- havoc inline$BDLGetDebugLevel$539$myNondetVar_0;
- inline$BDLGetDebugLevel$539$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$539$myNondetVar_0;
- goto inline$BDLGetDebugLevel$539$label_1#1;
-
- inline$BDLGetDebugLevel$539$label_1#1:
- goto inline$BDLGetDebugLevel$539$Return#1;
-
- inline$BDLGetDebugLevel$539$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$539$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon48_Then#1, inline$BDLSystemPowerIoCompletion$20$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_93_true#1, inline$BDLSystemPowerIoCompletion$20$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_97#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_98#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_99#1:
- call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$20$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$20$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_94#1:
- goto inline$BDLGetDebugLevel$540$Entry#1;
-
- inline$BDLGetDebugLevel$540$Entry#1:
- goto inline$BDLGetDebugLevel$540$start#1;
-
- inline$BDLGetDebugLevel$540$start#1:
- goto inline$BDLGetDebugLevel$540$label_3#1;
-
- inline$BDLGetDebugLevel$540$label_3#1:
- havoc inline$BDLGetDebugLevel$540$myNondetVar_0;
- inline$BDLGetDebugLevel$540$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$540$myNondetVar_0;
- goto inline$BDLGetDebugLevel$540$label_1#1;
-
- inline$BDLGetDebugLevel$540$label_1#1:
- goto inline$BDLGetDebugLevel$540$Return#1;
-
- inline$BDLGetDebugLevel$540$Return#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$540$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$20$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$20$anon49_Then#1, inline$BDLSystemPowerIoCompletion$20$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_103_true#1, inline$BDLSystemPowerIoCompletion$20$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$20$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$20$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_104#1:
- inline$BDLSystemPowerIoCompletion$20$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$20$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$20$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$20$Return#1;
-
- inline$BDLSystemPowerIoCompletion$20$Return#1:
- inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$20$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$20$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$20$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$20$anon14_Then#1, inline$CallCompletionRoutine$20$anon14_Else#1;
-
- inline$CallCompletionRoutine$20$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$20$anon9#1;
-
- inline$CallCompletionRoutine$20$anon9#1:
- goto inline$CallCompletionRoutine$20$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$20$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$20$Return#1;
-
- inline$CallCompletionRoutine$20$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$20$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$20$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$20$Entry#1:
- inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$20$start#1;
-
- inline$BDLDevicePowerIoCompletion$20$start#1:
- call inline$BDLDevicePowerIoCompletion$20$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$20$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_4#1:
- inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_6#1:
- inline$BDLDevicePowerIoCompletion$20$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$20$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$20$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$20$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$106$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$106$Entry#1:
- inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$106$start#1;
-
- inline$IoGetCurrentIrpStackLocation$106$start#1:
- inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$106$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$106$label_3_true#1, inline$IoGetCurrentIrpStackLocation$106$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$106$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$106$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$106$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$106$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$106$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$106$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$106$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$106$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$106$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$106$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$106$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$106$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$106$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$106$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$106$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$106$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$106$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$106$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$106$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$106$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$106$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$106$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$106$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon30_Then#1, inline$BDLDevicePowerIoCompletion$20$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_13#1:
- inline$BDLDevicePowerIoCompletion$20$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$20$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$20$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_17#1:
- goto inline$BDLGetDebugLevel$523$Entry#1;
-
- inline$BDLGetDebugLevel$523$Entry#1:
- goto inline$BDLGetDebugLevel$523$start#1;
-
- inline$BDLGetDebugLevel$523$start#1:
- goto inline$BDLGetDebugLevel$523$label_3#1;
-
- inline$BDLGetDebugLevel$523$label_3#1:
- havoc inline$BDLGetDebugLevel$523$myNondetVar_0;
- inline$BDLGetDebugLevel$523$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$523$myNondetVar_0;
- goto inline$BDLGetDebugLevel$523$label_1#1;
-
- inline$BDLGetDebugLevel$523$label_1#1:
- goto inline$BDLGetDebugLevel$523$Return#1;
-
- inline$BDLGetDebugLevel$523$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$523$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon31_Then#1, inline$BDLDevicePowerIoCompletion$20$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_20_true#1, inline$BDLDevicePowerIoCompletion$20$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_24#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_25#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_26#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$20$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_21#1:
- goto inline$BDLGetDebugLevel$524$Entry#1;
-
- inline$BDLGetDebugLevel$524$Entry#1:
- goto inline$BDLGetDebugLevel$524$start#1;
-
- inline$BDLGetDebugLevel$524$start#1:
- goto inline$BDLGetDebugLevel$524$label_3#1;
-
- inline$BDLGetDebugLevel$524$label_3#1:
- havoc inline$BDLGetDebugLevel$524$myNondetVar_0;
- inline$BDLGetDebugLevel$524$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$524$myNondetVar_0;
- goto inline$BDLGetDebugLevel$524$label_1#1;
-
- inline$BDLGetDebugLevel$524$label_1#1:
- goto inline$BDLGetDebugLevel$524$Return#1;
-
- inline$BDLGetDebugLevel$524$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$524$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon32_Then#1, inline$BDLDevicePowerIoCompletion$20$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_30_true#1, inline$BDLDevicePowerIoCompletion$20$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_34#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_35#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_36#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$20$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_31#1:
- goto inline$BDLGetDebugLevel$525$Entry#1;
-
- inline$BDLGetDebugLevel$525$Entry#1:
- goto inline$BDLGetDebugLevel$525$start#1;
-
- inline$BDLGetDebugLevel$525$start#1:
- goto inline$BDLGetDebugLevel$525$label_3#1;
-
- inline$BDLGetDebugLevel$525$label_3#1:
- havoc inline$BDLGetDebugLevel$525$myNondetVar_0;
- inline$BDLGetDebugLevel$525$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$525$myNondetVar_0;
- goto inline$BDLGetDebugLevel$525$label_1#1;
-
- inline$BDLGetDebugLevel$525$label_1#1:
- goto inline$BDLGetDebugLevel$525$Return#1;
-
- inline$BDLGetDebugLevel$525$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$525$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon33_Then#1, inline$BDLDevicePowerIoCompletion$20$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_40_true#1, inline$BDLDevicePowerIoCompletion$20$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_41_true#1, inline$BDLDevicePowerIoCompletion$20$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$20$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$20$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_44_true#1, inline$BDLDevicePowerIoCompletion$20$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$20$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_45_true#1, inline$BDLDevicePowerIoCompletion$20$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$20$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$20$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$20$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$20$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$20$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$20$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_54#1:
- inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$20$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_55_true#1, inline$BDLDevicePowerIoCompletion$20$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_56#1:
- call inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$20$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$20$anon34_Then#1, inline$BDLDevicePowerIoCompletion$20$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_59#1:
- goto inline$BDLGetDebugLevel$526$Entry#1;
-
- inline$BDLGetDebugLevel$526$Entry#1:
- goto inline$BDLGetDebugLevel$526$start#1;
-
- inline$BDLGetDebugLevel$526$start#1:
- goto inline$BDLGetDebugLevel$526$label_3#1;
-
- inline$BDLGetDebugLevel$526$label_3#1:
- havoc inline$BDLGetDebugLevel$526$myNondetVar_0;
- inline$BDLGetDebugLevel$526$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$526$myNondetVar_0;
- goto inline$BDLGetDebugLevel$526$label_1#1;
-
- inline$BDLGetDebugLevel$526$label_1#1:
- goto inline$BDLGetDebugLevel$526$Return#1;
-
- inline$BDLGetDebugLevel$526$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$526$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon35_Then#1, inline$BDLDevicePowerIoCompletion$20$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_62_true#1, inline$BDLDevicePowerIoCompletion$20$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_66#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_67#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_68#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$20$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_63#1:
- goto inline$BDLGetDebugLevel$527$Entry#1;
-
- inline$BDLGetDebugLevel$527$Entry#1:
- goto inline$BDLGetDebugLevel$527$start#1;
-
- inline$BDLGetDebugLevel$527$start#1:
- goto inline$BDLGetDebugLevel$527$label_3#1;
-
- inline$BDLGetDebugLevel$527$label_3#1:
- havoc inline$BDLGetDebugLevel$527$myNondetVar_0;
- inline$BDLGetDebugLevel$527$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$527$myNondetVar_0;
- goto inline$BDLGetDebugLevel$527$label_1#1;
-
- inline$BDLGetDebugLevel$527$label_1#1:
- goto inline$BDLGetDebugLevel$527$Return#1;
-
- inline$BDLGetDebugLevel$527$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$527$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon36_Then#1, inline$BDLDevicePowerIoCompletion$20$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_72_true#1, inline$BDLDevicePowerIoCompletion$20$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_76#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_77#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_78#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$20$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_73#1:
- goto inline$BDLGetDebugLevel$528$Entry#1;
-
- inline$BDLGetDebugLevel$528$Entry#1:
- goto inline$BDLGetDebugLevel$528$start#1;
-
- inline$BDLGetDebugLevel$528$start#1:
- goto inline$BDLGetDebugLevel$528$label_3#1;
-
- inline$BDLGetDebugLevel$528$label_3#1:
- havoc inline$BDLGetDebugLevel$528$myNondetVar_0;
- inline$BDLGetDebugLevel$528$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$528$myNondetVar_0;
- goto inline$BDLGetDebugLevel$528$label_1#1;
-
- inline$BDLGetDebugLevel$528$label_1#1:
- goto inline$BDLGetDebugLevel$528$Return#1;
-
- inline$BDLGetDebugLevel$528$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$528$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon37_Then#1, inline$BDLDevicePowerIoCompletion$20$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_82_true#1, inline$BDLDevicePowerIoCompletion$20$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$20$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$20$anon38_Then#1, inline$BDLDevicePowerIoCompletion$20$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$20$anon39_Then#1, inline$BDLDevicePowerIoCompletion$20$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_92#1:
- goto inline$storm_IoCompleteRequest$41$Entry#1;
-
- inline$storm_IoCompleteRequest$41$Entry#1:
- inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$41$start#1;
-
- inline$storm_IoCompleteRequest$41$start#1:
- inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$41$label_3#1;
-
- inline$storm_IoCompleteRequest$41$label_3#1:
- call inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$41$label_6#1;
-
- inline$storm_IoCompleteRequest$41$label_6#1:
- goto inline$storm_IoCompleteRequest$41$label_6_true#1, inline$storm_IoCompleteRequest$41$label_6_false#1;
-
- inline$storm_IoCompleteRequest$41$label_6_false#1:
- assume inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$41$label_7#1;
-
- inline$storm_IoCompleteRequest$41$label_6_true#1:
- assume inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$41$label_8#1;
-
- inline$storm_IoCompleteRequest$41$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$41$anon3_Then#1, inline$storm_IoCompleteRequest$41$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$41$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$41$anon1#1;
-
- inline$storm_IoCompleteRequest$41$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$41$label_9#1;
-
- inline$storm_IoCompleteRequest$41$label_9#1:
- goto inline$storm_IoCompleteRequest$41$label_9_true#1, inline$storm_IoCompleteRequest$41$label_9_false#1;
-
- inline$storm_IoCompleteRequest$41$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$41$label_10#1;
-
- inline$storm_IoCompleteRequest$41$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$41$label_1#1;
-
- inline$storm_IoCompleteRequest$41$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$41$label_7#1;
-
- inline$storm_IoCompleteRequest$41$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$41$label_1#1;
-
- inline$storm_IoCompleteRequest$41$label_1#1:
- goto inline$storm_IoCompleteRequest$41$Return#1;
-
- inline$storm_IoCompleteRequest$41$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$41$Return#1;
-
- inline$storm_IoCompleteRequest$41$Return#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon40_Then#1, inline$BDLDevicePowerIoCompletion$20$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$20$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$20$anon41_Then#1, inline$BDLDevicePowerIoCompletion$20$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_98#1:
- goto inline$BDLGetDebugLevel$529$Entry#1;
-
- inline$BDLGetDebugLevel$529$Entry#1:
- goto inline$BDLGetDebugLevel$529$start#1;
-
- inline$BDLGetDebugLevel$529$start#1:
- goto inline$BDLGetDebugLevel$529$label_3#1;
-
- inline$BDLGetDebugLevel$529$label_3#1:
- havoc inline$BDLGetDebugLevel$529$myNondetVar_0;
- inline$BDLGetDebugLevel$529$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$529$myNondetVar_0;
- goto inline$BDLGetDebugLevel$529$label_1#1;
-
- inline$BDLGetDebugLevel$529$label_1#1:
- goto inline$BDLGetDebugLevel$529$Return#1;
-
- inline$BDLGetDebugLevel$529$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$529$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon42_Then#1, inline$BDLDevicePowerIoCompletion$20$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_101_true#1, inline$BDLDevicePowerIoCompletion$20$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_105#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_106#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_107#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$20$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_102#1:
- goto inline$BDLGetDebugLevel$530$Entry#1;
-
- inline$BDLGetDebugLevel$530$Entry#1:
- goto inline$BDLGetDebugLevel$530$start#1;
-
- inline$BDLGetDebugLevel$530$start#1:
- goto inline$BDLGetDebugLevel$530$label_3#1;
-
- inline$BDLGetDebugLevel$530$label_3#1:
- havoc inline$BDLGetDebugLevel$530$myNondetVar_0;
- inline$BDLGetDebugLevel$530$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$530$myNondetVar_0;
- goto inline$BDLGetDebugLevel$530$label_1#1;
-
- inline$BDLGetDebugLevel$530$label_1#1:
- goto inline$BDLGetDebugLevel$530$Return#1;
-
- inline$BDLGetDebugLevel$530$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$530$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon43_Then#1, inline$BDLDevicePowerIoCompletion$20$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_111_true#1, inline$BDLDevicePowerIoCompletion$20$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_115#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_116#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_117#1:
- call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$20$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$20$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_112#1:
- goto inline$BDLGetDebugLevel$531$Entry#1;
-
- inline$BDLGetDebugLevel$531$Entry#1:
- goto inline$BDLGetDebugLevel$531$start#1;
-
- inline$BDLGetDebugLevel$531$start#1:
- goto inline$BDLGetDebugLevel$531$label_3#1;
-
- inline$BDLGetDebugLevel$531$label_3#1:
- havoc inline$BDLGetDebugLevel$531$myNondetVar_0;
- inline$BDLGetDebugLevel$531$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$531$myNondetVar_0;
- goto inline$BDLGetDebugLevel$531$label_1#1;
-
- inline$BDLGetDebugLevel$531$label_1#1:
- goto inline$BDLGetDebugLevel$531$Return#1;
-
- inline$BDLGetDebugLevel$531$Return#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$531$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$20$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$20$anon44_Then#1, inline$BDLDevicePowerIoCompletion$20$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_121_true#1, inline$BDLDevicePowerIoCompletion$20$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$20$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$20$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_122#1:
- inline$BDLDevicePowerIoCompletion$20$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$20$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$20$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$20$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$20$Return#1;
-
- inline$BDLDevicePowerIoCompletion$20$Return#1:
- inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$20$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$20$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$20$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$20$anon13_Then#1, inline$CallCompletionRoutine$20$anon13_Else#1;
-
- inline$CallCompletionRoutine$20$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$20$anon7#1;
-
- inline$CallCompletionRoutine$20$anon7#1:
- goto inline$CallCompletionRoutine$20$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$20$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$20$Return#1;
-
- inline$CallCompletionRoutine$20$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$20$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$20$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$20$Entry#1:
- inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$20$start#1;
-
- inline$BDLCallDriverCompletionRoutine$20$start#1:
- inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$20$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$20$label_3_true#1, inline$BDLCallDriverCompletionRoutine$20$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$20$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$20$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$20$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$20$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_6#1:
- goto inline$storm_KeSetEvent$22$Entry#1;
-
- inline$storm_KeSetEvent$22$Entry#1:
- inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$22$start#1;
-
- inline$storm_KeSetEvent$22$start#1:
- inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$22$label_3#1;
-
- inline$storm_KeSetEvent$22$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$22$label_1#1;
-
- inline$storm_KeSetEvent$22$label_1#1:
- goto inline$storm_KeSetEvent$22$Return#1;
-
- inline$storm_KeSetEvent$22$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$20$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$20$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$20$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$20$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$20$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$20$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$20$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_9#1:
- inline$BDLCallDriverCompletionRoutine$20$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$20$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$20$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$20$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$20$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$20$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$20$Return#1:
- inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$20$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$20$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$20$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$20$anon12_Then#1, inline$CallCompletionRoutine$20$anon12_Else#1;
-
- inline$CallCompletionRoutine$20$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$20$anon5#1;
-
- inline$CallCompletionRoutine$20$anon5#1:
- goto inline$CallCompletionRoutine$20$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$20$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$20$label_23#1;
-
- inline$CallCompletionRoutine$20$label_23#1:
- inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$20$label_24#1;
-
- inline$CallCompletionRoutine$20$label_24#1:
- goto inline$CallCompletionRoutine$20$label_24_true#1, inline$CallCompletionRoutine$20$label_24_false#1;
-
- inline$CallCompletionRoutine$20$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$20$label_1#1;
-
- inline$CallCompletionRoutine$20$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$20$label_25#1;
-
- inline$CallCompletionRoutine$20$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$20$label_1#1;
-
- inline$CallCompletionRoutine$20$label_1#1:
- goto inline$CallCompletionRoutine$20$Return#1;
-
- inline$CallCompletionRoutine$20$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$20$Return#1;
-
- inline$CallCompletionRoutine$20$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$20$Return#1;
-
- inline$CallCompletionRoutine$20$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$20$Return#1;
-
- inline$CallCompletionRoutine$20$Return#1:
- goto inline$storm_IoCallDriver$10$label_33$1#1;
-
- inline$storm_IoCallDriver$10$label_33$1#1:
- goto inline$storm_IoCallDriver$10$anon14_Then#1, inline$storm_IoCallDriver$10$anon14_Else#1;
-
- inline$storm_IoCallDriver$10$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$10$anon8#1;
-
- inline$storm_IoCallDriver$10$anon8#1:
- goto inline$storm_IoCallDriver$10$label_36#1;
-
- inline$storm_IoCallDriver$10$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$10$Return#1;
-
- inline$storm_IoCallDriver$10$label_27_case_1#1:
- assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$10$label_29#1;
-
- inline$storm_IoCallDriver$10$label_29#1:
- inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$10$label_37#1;
-
- inline$storm_IoCallDriver$10$label_37#1:
- goto inline$storm_IoCallDriver$10$label_38#1;
-
- inline$storm_IoCallDriver$10$label_38#1:
- goto inline$storm_IoCallDriver$10$label_39#1;
-
- inline$storm_IoCallDriver$10$label_39#1:
- goto inline$CallCompletionRoutine$21$Entry#1;
-
- inline$CallCompletionRoutine$21$Entry#1:
- inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$21$start#1;
-
- inline$CallCompletionRoutine$21$start#1:
- inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$21$label_3#1;
-
- inline$CallCompletionRoutine$21$label_3#1:
- goto inline$CallCompletionRoutine$21$label_4#1;
-
- inline$CallCompletionRoutine$21$label_4#1:
- goto inline$CallCompletionRoutine$21$label_5#1;
-
- inline$CallCompletionRoutine$21$label_5#1:
- goto inline$CallCompletionRoutine$21$label_6#1;
-
- inline$CallCompletionRoutine$21$label_6#1:
- goto inline$CallCompletionRoutine$21$label_7#1;
-
- inline$CallCompletionRoutine$21$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$108$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$108$Entry#1:
- inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$108$start#1;
-
- inline$IoGetCurrentIrpStackLocation$108$start#1:
- inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$108$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$108$label_3_true#1, inline$IoGetCurrentIrpStackLocation$108$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$108$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$108$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$108$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$108$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$108$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$108$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$108$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$108$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$108$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$108$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$108$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$108$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$108$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$108$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$108$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$108$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$108$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$108$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$108$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$108$Return#1:
- goto inline$CallCompletionRoutine$21$label_7$1#1;
-
- inline$CallCompletionRoutine$21$label_7$1#1:
- goto inline$CallCompletionRoutine$21$anon10_Then#1, inline$CallCompletionRoutine$21$anon10_Else#1;
-
- inline$CallCompletionRoutine$21$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$21$anon1#1;
-
- inline$CallCompletionRoutine$21$anon1#1:
- goto inline$CallCompletionRoutine$21$label_10#1;
-
- inline$CallCompletionRoutine$21$label_10#1:
- goto inline$CallCompletionRoutine$21$label_11#1;
-
- inline$CallCompletionRoutine$21$label_11#1:
- havoc inline$CallCompletionRoutine$21$myNondetVar_0;
- inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$myNondetVar_0;
- goto inline$CallCompletionRoutine$21$label_12#1;
-
- inline$CallCompletionRoutine$21$label_12#1:
- havoc inline$CallCompletionRoutine$21$myNondetVar_0;
- inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$myNondetVar_0;
- goto inline$CallCompletionRoutine$21$label_13#1;
-
- inline$CallCompletionRoutine$21$label_13#1:
- havoc inline$CallCompletionRoutine$21$myNondetVar_0;
- goto inline$CallCompletionRoutine$21$label_14#1;
-
- inline$CallCompletionRoutine$21$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$109$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$109$Entry#1:
- inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$109$start#1;
-
- inline$IoGetCurrentIrpStackLocation$109$start#1:
- inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$109$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$109$label_3_true#1, inline$IoGetCurrentIrpStackLocation$109$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$109$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$109$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$109$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$109$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$109$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$109$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$109$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$109$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$109$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$109$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$109$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$109$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$109$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$109$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$109$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$109$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$109$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$109$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$109$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$109$Return#1:
- goto inline$CallCompletionRoutine$21$label_14$1#1;
-
- inline$CallCompletionRoutine$21$label_14$1#1:
- goto inline$CallCompletionRoutine$21$anon11_Then#1, inline$CallCompletionRoutine$21$anon11_Else#1;
-
- inline$CallCompletionRoutine$21$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$21$anon3#1;
-
- inline$CallCompletionRoutine$21$anon3#1:
- goto inline$CallCompletionRoutine$21$label_17#1;
-
- inline$CallCompletionRoutine$21$label_17#1:
- goto inline$CallCompletionRoutine$21$label_18#1;
-
- inline$CallCompletionRoutine$21$label_18#1:
- goto inline$CallCompletionRoutine$21$label_18_true#1, inline$CallCompletionRoutine$21$label_18_false#1;
-
- inline$CallCompletionRoutine$21$label_18_false#1:
- assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$21$label_1#1;
-
- inline$CallCompletionRoutine$21$label_18_true#1:
- assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$21$label_19#1;
-
- inline$CallCompletionRoutine$21$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$21$label_20#1;
-
- inline$CallCompletionRoutine$21$label_20#1:
- goto inline$CallCompletionRoutine$21$label_20_icall_1#1, inline$CallCompletionRoutine$21$label_20_icall_2#1, inline$CallCompletionRoutine$21$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$21$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$21$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$21$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$21$Entry#1:
- inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$21$start#1;
-
- inline$BDLSystemPowerIoCompletion$21$start#1:
- call inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$21$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_4#1:
- inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_6#1:
- inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$21$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$21$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$21$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$111$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$111$Entry#1:
- inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$111$start#1;
-
- inline$IoGetCurrentIrpStackLocation$111$start#1:
- inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$111$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$111$label_3_true#1, inline$IoGetCurrentIrpStackLocation$111$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$111$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$111$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$111$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$111$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$111$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$111$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$111$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$111$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$111$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$111$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$111$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$111$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$111$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$111$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$111$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$111$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$111$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$111$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$111$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$111$Return#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon36_Then#1, inline$BDLSystemPowerIoCompletion$21$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_15#1:
- goto inline$BDLGetDebugLevel$553$Entry#1;
-
- inline$BDLGetDebugLevel$553$Entry#1:
- goto inline$BDLGetDebugLevel$553$start#1;
-
- inline$BDLGetDebugLevel$553$start#1:
- goto inline$BDLGetDebugLevel$553$label_3#1;
-
- inline$BDLGetDebugLevel$553$label_3#1:
- havoc inline$BDLGetDebugLevel$553$myNondetVar_0;
- inline$BDLGetDebugLevel$553$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$553$myNondetVar_0;
- goto inline$BDLGetDebugLevel$553$label_1#1;
-
- inline$BDLGetDebugLevel$553$label_1#1:
- goto inline$BDLGetDebugLevel$553$Return#1;
-
- inline$BDLGetDebugLevel$553$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$553$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon37_Then#1, inline$BDLSystemPowerIoCompletion$21$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_18_true#1, inline$BDLSystemPowerIoCompletion$21$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_22#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_23#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_24#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$21$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_19#1:
- goto inline$BDLGetDebugLevel$554$Entry#1;
-
- inline$BDLGetDebugLevel$554$Entry#1:
- goto inline$BDLGetDebugLevel$554$start#1;
-
- inline$BDLGetDebugLevel$554$start#1:
- goto inline$BDLGetDebugLevel$554$label_3#1;
-
- inline$BDLGetDebugLevel$554$label_3#1:
- havoc inline$BDLGetDebugLevel$554$myNondetVar_0;
- inline$BDLGetDebugLevel$554$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$554$myNondetVar_0;
- goto inline$BDLGetDebugLevel$554$label_1#1;
-
- inline$BDLGetDebugLevel$554$label_1#1:
- goto inline$BDLGetDebugLevel$554$Return#1;
-
- inline$BDLGetDebugLevel$554$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$554$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon38_Then#1, inline$BDLSystemPowerIoCompletion$21$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_28_true#1, inline$BDLSystemPowerIoCompletion$21$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_32#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_33#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_34#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$21$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_29#1:
- goto inline$BDLGetDebugLevel$555$Entry#1;
-
- inline$BDLGetDebugLevel$555$Entry#1:
- goto inline$BDLGetDebugLevel$555$start#1;
-
- inline$BDLGetDebugLevel$555$start#1:
- goto inline$BDLGetDebugLevel$555$label_3#1;
-
- inline$BDLGetDebugLevel$555$label_3#1:
- havoc inline$BDLGetDebugLevel$555$myNondetVar_0;
- inline$BDLGetDebugLevel$555$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$555$myNondetVar_0;
- goto inline$BDLGetDebugLevel$555$label_1#1;
-
- inline$BDLGetDebugLevel$555$label_1#1:
- goto inline$BDLGetDebugLevel$555$Return#1;
-
- inline$BDLGetDebugLevel$555$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$555$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon39_Then#1, inline$BDLSystemPowerIoCompletion$21$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_38_true#1, inline$BDLSystemPowerIoCompletion$21$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_39_true#1, inline$BDLSystemPowerIoCompletion$21$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$21$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$21$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$21$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_106_true#1, inline$BDLSystemPowerIoCompletion$21$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_142#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_143#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$21$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$21$myNondetVar_0, inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$21$anon50_Then#1, inline$BDLSystemPowerIoCompletion$21$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_112#1:
- inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$21$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_113_true#1, inline$BDLSystemPowerIoCompletion$21$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$21$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_117#1:
- goto inline$BDLGetDebugLevel$562$Entry#1;
-
- inline$BDLGetDebugLevel$562$Entry#1:
- goto inline$BDLGetDebugLevel$562$start#1;
-
- inline$BDLGetDebugLevel$562$start#1:
- goto inline$BDLGetDebugLevel$562$label_3#1;
-
- inline$BDLGetDebugLevel$562$label_3#1:
- havoc inline$BDLGetDebugLevel$562$myNondetVar_0;
- inline$BDLGetDebugLevel$562$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$562$myNondetVar_0;
- goto inline$BDLGetDebugLevel$562$label_1#1;
-
- inline$BDLGetDebugLevel$562$label_1#1:
- goto inline$BDLGetDebugLevel$562$Return#1;
-
- inline$BDLGetDebugLevel$562$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$562$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon51_Then#1, inline$BDLSystemPowerIoCompletion$21$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_120_true#1, inline$BDLSystemPowerIoCompletion$21$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_124#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_125#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_126#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$21$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_121#1:
- goto inline$BDLGetDebugLevel$563$Entry#1;
-
- inline$BDLGetDebugLevel$563$Entry#1:
- goto inline$BDLGetDebugLevel$563$start#1;
-
- inline$BDLGetDebugLevel$563$start#1:
- goto inline$BDLGetDebugLevel$563$label_3#1;
-
- inline$BDLGetDebugLevel$563$label_3#1:
- havoc inline$BDLGetDebugLevel$563$myNondetVar_0;
- inline$BDLGetDebugLevel$563$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$563$myNondetVar_0;
- goto inline$BDLGetDebugLevel$563$label_1#1;
-
- inline$BDLGetDebugLevel$563$label_1#1:
- goto inline$BDLGetDebugLevel$563$Return#1;
-
- inline$BDLGetDebugLevel$563$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$563$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon52_Then#1, inline$BDLSystemPowerIoCompletion$21$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_130_true#1, inline$BDLSystemPowerIoCompletion$21$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_134#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_135#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_136#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$21$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_131#1:
- goto inline$BDLGetDebugLevel$564$Entry#1;
-
- inline$BDLGetDebugLevel$564$Entry#1:
- goto inline$BDLGetDebugLevel$564$start#1;
-
- inline$BDLGetDebugLevel$564$start#1:
- goto inline$BDLGetDebugLevel$564$label_3#1;
-
- inline$BDLGetDebugLevel$564$label_3#1:
- havoc inline$BDLGetDebugLevel$564$myNondetVar_0;
- inline$BDLGetDebugLevel$564$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$564$myNondetVar_0;
- goto inline$BDLGetDebugLevel$564$label_1#1;
-
- inline$BDLGetDebugLevel$564$label_1#1:
- goto inline$BDLGetDebugLevel$564$Return#1;
-
- inline$BDLGetDebugLevel$564$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$564$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon53_Then#1, inline$BDLSystemPowerIoCompletion$21$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_140_true#1, inline$BDLSystemPowerIoCompletion$21$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$21$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_115#1:
- inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$21$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$21$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_43#1:
- goto inline$BDLGetDebugLevel$556$Entry#1;
-
- inline$BDLGetDebugLevel$556$Entry#1:
- goto inline$BDLGetDebugLevel$556$start#1;
-
- inline$BDLGetDebugLevel$556$start#1:
- goto inline$BDLGetDebugLevel$556$label_3#1;
-
- inline$BDLGetDebugLevel$556$label_3#1:
- havoc inline$BDLGetDebugLevel$556$myNondetVar_0;
- inline$BDLGetDebugLevel$556$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$556$myNondetVar_0;
- goto inline$BDLGetDebugLevel$556$label_1#1;
-
- inline$BDLGetDebugLevel$556$label_1#1:
- goto inline$BDLGetDebugLevel$556$Return#1;
-
- inline$BDLGetDebugLevel$556$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$556$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon40_Then#1, inline$BDLSystemPowerIoCompletion$21$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_46_true#1, inline$BDLSystemPowerIoCompletion$21$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_50#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_51#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_52#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$21$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_47#1:
- goto inline$BDLGetDebugLevel$557$Entry#1;
-
- inline$BDLGetDebugLevel$557$Entry#1:
- goto inline$BDLGetDebugLevel$557$start#1;
-
- inline$BDLGetDebugLevel$557$start#1:
- goto inline$BDLGetDebugLevel$557$label_3#1;
-
- inline$BDLGetDebugLevel$557$label_3#1:
- havoc inline$BDLGetDebugLevel$557$myNondetVar_0;
- inline$BDLGetDebugLevel$557$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$557$myNondetVar_0;
- goto inline$BDLGetDebugLevel$557$label_1#1;
-
- inline$BDLGetDebugLevel$557$label_1#1:
- goto inline$BDLGetDebugLevel$557$Return#1;
-
- inline$BDLGetDebugLevel$557$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$557$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon41_Then#1, inline$BDLSystemPowerIoCompletion$21$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_56_true#1, inline$BDLSystemPowerIoCompletion$21$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_60#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_61#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_62#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$21$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_57#1:
- goto inline$BDLGetDebugLevel$558$Entry#1;
-
- inline$BDLGetDebugLevel$558$Entry#1:
- goto inline$BDLGetDebugLevel$558$start#1;
-
- inline$BDLGetDebugLevel$558$start#1:
- goto inline$BDLGetDebugLevel$558$label_3#1;
-
- inline$BDLGetDebugLevel$558$label_3#1:
- havoc inline$BDLGetDebugLevel$558$myNondetVar_0;
- inline$BDLGetDebugLevel$558$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$558$myNondetVar_0;
- goto inline$BDLGetDebugLevel$558$label_1#1;
-
- inline$BDLGetDebugLevel$558$label_1#1:
- goto inline$BDLGetDebugLevel$558$Return#1;
-
- inline$BDLGetDebugLevel$558$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$558$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon42_Then#1, inline$BDLSystemPowerIoCompletion$21$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_66_true#1, inline$BDLSystemPowerIoCompletion$21$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$21$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$21$anon43_Then#1, inline$BDLSystemPowerIoCompletion$21$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$21$anon44_Then#1, inline$BDLSystemPowerIoCompletion$21$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_74#1:
- goto inline$storm_IoCompleteRequest$44$Entry#1;
-
- inline$storm_IoCompleteRequest$44$Entry#1:
- inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$44$start#1;
-
- inline$storm_IoCompleteRequest$44$start#1:
- inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$44$label_3#1;
-
- inline$storm_IoCompleteRequest$44$label_3#1:
- call inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$44$label_6#1;
-
- inline$storm_IoCompleteRequest$44$label_6#1:
- goto inline$storm_IoCompleteRequest$44$label_6_true#1, inline$storm_IoCompleteRequest$44$label_6_false#1;
-
- inline$storm_IoCompleteRequest$44$label_6_false#1:
- assume inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$44$label_7#1;
-
- inline$storm_IoCompleteRequest$44$label_6_true#1:
- assume inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$44$label_8#1;
-
- inline$storm_IoCompleteRequest$44$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$44$anon3_Then#1, inline$storm_IoCompleteRequest$44$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$44$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$44$anon1#1;
-
- inline$storm_IoCompleteRequest$44$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$44$label_9#1;
-
- inline$storm_IoCompleteRequest$44$label_9#1:
- goto inline$storm_IoCompleteRequest$44$label_9_true#1, inline$storm_IoCompleteRequest$44$label_9_false#1;
-
- inline$storm_IoCompleteRequest$44$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$44$label_10#1;
-
- inline$storm_IoCompleteRequest$44$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$44$label_1#1;
-
- inline$storm_IoCompleteRequest$44$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$44$label_7#1;
-
- inline$storm_IoCompleteRequest$44$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$44$label_1#1;
-
- inline$storm_IoCompleteRequest$44$label_1#1:
- goto inline$storm_IoCompleteRequest$44$Return#1;
-
- inline$storm_IoCompleteRequest$44$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$44$Return#1;
-
- inline$storm_IoCompleteRequest$44$Return#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon45_Then#1, inline$BDLSystemPowerIoCompletion$21$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$21$anon46_Then#1, inline$BDLSystemPowerIoCompletion$21$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_80#1:
- goto inline$BDLGetDebugLevel$559$Entry#1;
-
- inline$BDLGetDebugLevel$559$Entry#1:
- goto inline$BDLGetDebugLevel$559$start#1;
-
- inline$BDLGetDebugLevel$559$start#1:
- goto inline$BDLGetDebugLevel$559$label_3#1;
-
- inline$BDLGetDebugLevel$559$label_3#1:
- havoc inline$BDLGetDebugLevel$559$myNondetVar_0;
- inline$BDLGetDebugLevel$559$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$559$myNondetVar_0;
- goto inline$BDLGetDebugLevel$559$label_1#1;
-
- inline$BDLGetDebugLevel$559$label_1#1:
- goto inline$BDLGetDebugLevel$559$Return#1;
-
- inline$BDLGetDebugLevel$559$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$559$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon47_Then#1, inline$BDLSystemPowerIoCompletion$21$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_83_true#1, inline$BDLSystemPowerIoCompletion$21$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_87#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_88#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_89#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$21$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_84#1:
- goto inline$BDLGetDebugLevel$560$Entry#1;
-
- inline$BDLGetDebugLevel$560$Entry#1:
- goto inline$BDLGetDebugLevel$560$start#1;
-
- inline$BDLGetDebugLevel$560$start#1:
- goto inline$BDLGetDebugLevel$560$label_3#1;
-
- inline$BDLGetDebugLevel$560$label_3#1:
- havoc inline$BDLGetDebugLevel$560$myNondetVar_0;
- inline$BDLGetDebugLevel$560$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$560$myNondetVar_0;
- goto inline$BDLGetDebugLevel$560$label_1#1;
-
- inline$BDLGetDebugLevel$560$label_1#1:
- goto inline$BDLGetDebugLevel$560$Return#1;
-
- inline$BDLGetDebugLevel$560$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$560$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon48_Then#1, inline$BDLSystemPowerIoCompletion$21$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_93_true#1, inline$BDLSystemPowerIoCompletion$21$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_97#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_98#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_99#1:
- call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$21$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$21$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_94#1:
- goto inline$BDLGetDebugLevel$561$Entry#1;
-
- inline$BDLGetDebugLevel$561$Entry#1:
- goto inline$BDLGetDebugLevel$561$start#1;
-
- inline$BDLGetDebugLevel$561$start#1:
- goto inline$BDLGetDebugLevel$561$label_3#1;
-
- inline$BDLGetDebugLevel$561$label_3#1:
- havoc inline$BDLGetDebugLevel$561$myNondetVar_0;
- inline$BDLGetDebugLevel$561$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$561$myNondetVar_0;
- goto inline$BDLGetDebugLevel$561$label_1#1;
-
- inline$BDLGetDebugLevel$561$label_1#1:
- goto inline$BDLGetDebugLevel$561$Return#1;
-
- inline$BDLGetDebugLevel$561$Return#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$561$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$21$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$21$anon49_Then#1, inline$BDLSystemPowerIoCompletion$21$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_103_true#1, inline$BDLSystemPowerIoCompletion$21$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$21$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$21$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_104#1:
- inline$BDLSystemPowerIoCompletion$21$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$21$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$21$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$21$Return#1;
-
- inline$BDLSystemPowerIoCompletion$21$Return#1:
- inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$21$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$21$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$21$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$21$anon14_Then#1, inline$CallCompletionRoutine$21$anon14_Else#1;
-
- inline$CallCompletionRoutine$21$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$21$anon9#1;
-
- inline$CallCompletionRoutine$21$anon9#1:
- goto inline$CallCompletionRoutine$21$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$21$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$21$Return#1;
-
- inline$CallCompletionRoutine$21$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$21$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$21$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$21$Entry#1:
- inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$21$start#1;
-
- inline$BDLDevicePowerIoCompletion$21$start#1:
- call inline$BDLDevicePowerIoCompletion$21$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$21$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_4#1:
- inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_6#1:
- inline$BDLDevicePowerIoCompletion$21$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$21$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$21$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$21$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$110$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$110$Entry#1:
- inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$110$start#1;
-
- inline$IoGetCurrentIrpStackLocation$110$start#1:
- inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$110$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$110$label_3_true#1, inline$IoGetCurrentIrpStackLocation$110$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$110$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$110$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$110$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$110$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$110$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$110$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$110$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$110$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$110$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$110$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$110$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$110$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$110$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$110$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$110$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$110$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$110$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$110$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$110$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$110$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$110$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$110$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$110$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon30_Then#1, inline$BDLDevicePowerIoCompletion$21$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_13#1:
- inline$BDLDevicePowerIoCompletion$21$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$21$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$21$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_17#1:
- goto inline$BDLGetDebugLevel$544$Entry#1;
-
- inline$BDLGetDebugLevel$544$Entry#1:
- goto inline$BDLGetDebugLevel$544$start#1;
-
- inline$BDLGetDebugLevel$544$start#1:
- goto inline$BDLGetDebugLevel$544$label_3#1;
-
- inline$BDLGetDebugLevel$544$label_3#1:
- havoc inline$BDLGetDebugLevel$544$myNondetVar_0;
- inline$BDLGetDebugLevel$544$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$544$myNondetVar_0;
- goto inline$BDLGetDebugLevel$544$label_1#1;
-
- inline$BDLGetDebugLevel$544$label_1#1:
- goto inline$BDLGetDebugLevel$544$Return#1;
-
- inline$BDLGetDebugLevel$544$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$544$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon31_Then#1, inline$BDLDevicePowerIoCompletion$21$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_20_true#1, inline$BDLDevicePowerIoCompletion$21$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_24#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_25#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_26#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$21$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_21#1:
- goto inline$BDLGetDebugLevel$545$Entry#1;
-
- inline$BDLGetDebugLevel$545$Entry#1:
- goto inline$BDLGetDebugLevel$545$start#1;
-
- inline$BDLGetDebugLevel$545$start#1:
- goto inline$BDLGetDebugLevel$545$label_3#1;
-
- inline$BDLGetDebugLevel$545$label_3#1:
- havoc inline$BDLGetDebugLevel$545$myNondetVar_0;
- inline$BDLGetDebugLevel$545$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$545$myNondetVar_0;
- goto inline$BDLGetDebugLevel$545$label_1#1;
-
- inline$BDLGetDebugLevel$545$label_1#1:
- goto inline$BDLGetDebugLevel$545$Return#1;
-
- inline$BDLGetDebugLevel$545$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$545$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon32_Then#1, inline$BDLDevicePowerIoCompletion$21$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_30_true#1, inline$BDLDevicePowerIoCompletion$21$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_34#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_35#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_36#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$21$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_31#1:
- goto inline$BDLGetDebugLevel$546$Entry#1;
-
- inline$BDLGetDebugLevel$546$Entry#1:
- goto inline$BDLGetDebugLevel$546$start#1;
-
- inline$BDLGetDebugLevel$546$start#1:
- goto inline$BDLGetDebugLevel$546$label_3#1;
-
- inline$BDLGetDebugLevel$546$label_3#1:
- havoc inline$BDLGetDebugLevel$546$myNondetVar_0;
- inline$BDLGetDebugLevel$546$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$546$myNondetVar_0;
- goto inline$BDLGetDebugLevel$546$label_1#1;
-
- inline$BDLGetDebugLevel$546$label_1#1:
- goto inline$BDLGetDebugLevel$546$Return#1;
-
- inline$BDLGetDebugLevel$546$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$546$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon33_Then#1, inline$BDLDevicePowerIoCompletion$21$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_40_true#1, inline$BDLDevicePowerIoCompletion$21$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_41_true#1, inline$BDLDevicePowerIoCompletion$21$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$21$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$21$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_44_true#1, inline$BDLDevicePowerIoCompletion$21$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$21$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_45_true#1, inline$BDLDevicePowerIoCompletion$21$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$21$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$21$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$21$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$21$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$21$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$21$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_54#1:
- inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$21$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_55_true#1, inline$BDLDevicePowerIoCompletion$21$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_56#1:
- call inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$21$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$21$anon34_Then#1, inline$BDLDevicePowerIoCompletion$21$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_59#1:
- goto inline$BDLGetDebugLevel$547$Entry#1;
-
- inline$BDLGetDebugLevel$547$Entry#1:
- goto inline$BDLGetDebugLevel$547$start#1;
-
- inline$BDLGetDebugLevel$547$start#1:
- goto inline$BDLGetDebugLevel$547$label_3#1;
-
- inline$BDLGetDebugLevel$547$label_3#1:
- havoc inline$BDLGetDebugLevel$547$myNondetVar_0;
- inline$BDLGetDebugLevel$547$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$547$myNondetVar_0;
- goto inline$BDLGetDebugLevel$547$label_1#1;
-
- inline$BDLGetDebugLevel$547$label_1#1:
- goto inline$BDLGetDebugLevel$547$Return#1;
-
- inline$BDLGetDebugLevel$547$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$547$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon35_Then#1, inline$BDLDevicePowerIoCompletion$21$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_62_true#1, inline$BDLDevicePowerIoCompletion$21$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_66#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_67#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_68#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$21$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_63#1:
- goto inline$BDLGetDebugLevel$548$Entry#1;
-
- inline$BDLGetDebugLevel$548$Entry#1:
- goto inline$BDLGetDebugLevel$548$start#1;
-
- inline$BDLGetDebugLevel$548$start#1:
- goto inline$BDLGetDebugLevel$548$label_3#1;
-
- inline$BDLGetDebugLevel$548$label_3#1:
- havoc inline$BDLGetDebugLevel$548$myNondetVar_0;
- inline$BDLGetDebugLevel$548$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$548$myNondetVar_0;
- goto inline$BDLGetDebugLevel$548$label_1#1;
-
- inline$BDLGetDebugLevel$548$label_1#1:
- goto inline$BDLGetDebugLevel$548$Return#1;
-
- inline$BDLGetDebugLevel$548$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$548$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon36_Then#1, inline$BDLDevicePowerIoCompletion$21$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_72_true#1, inline$BDLDevicePowerIoCompletion$21$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_76#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_77#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_78#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$21$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_73#1:
- goto inline$BDLGetDebugLevel$549$Entry#1;
-
- inline$BDLGetDebugLevel$549$Entry#1:
- goto inline$BDLGetDebugLevel$549$start#1;
-
- inline$BDLGetDebugLevel$549$start#1:
- goto inline$BDLGetDebugLevel$549$label_3#1;
-
- inline$BDLGetDebugLevel$549$label_3#1:
- havoc inline$BDLGetDebugLevel$549$myNondetVar_0;
- inline$BDLGetDebugLevel$549$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$549$myNondetVar_0;
- goto inline$BDLGetDebugLevel$549$label_1#1;
-
- inline$BDLGetDebugLevel$549$label_1#1:
- goto inline$BDLGetDebugLevel$549$Return#1;
-
- inline$BDLGetDebugLevel$549$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$549$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon37_Then#1, inline$BDLDevicePowerIoCompletion$21$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_82_true#1, inline$BDLDevicePowerIoCompletion$21$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$21$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$21$anon38_Then#1, inline$BDLDevicePowerIoCompletion$21$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$21$anon39_Then#1, inline$BDLDevicePowerIoCompletion$21$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_92#1:
- goto inline$storm_IoCompleteRequest$43$Entry#1;
-
- inline$storm_IoCompleteRequest$43$Entry#1:
- inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$43$start#1;
-
- inline$storm_IoCompleteRequest$43$start#1:
- inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$43$label_3#1;
-
- inline$storm_IoCompleteRequest$43$label_3#1:
- call inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$43$label_6#1;
-
- inline$storm_IoCompleteRequest$43$label_6#1:
- goto inline$storm_IoCompleteRequest$43$label_6_true#1, inline$storm_IoCompleteRequest$43$label_6_false#1;
-
- inline$storm_IoCompleteRequest$43$label_6_false#1:
- assume inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$43$label_7#1;
-
- inline$storm_IoCompleteRequest$43$label_6_true#1:
- assume inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$43$label_8#1;
-
- inline$storm_IoCompleteRequest$43$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$43$anon3_Then#1, inline$storm_IoCompleteRequest$43$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$43$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$43$anon1#1;
-
- inline$storm_IoCompleteRequest$43$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$43$label_9#1;
-
- inline$storm_IoCompleteRequest$43$label_9#1:
- goto inline$storm_IoCompleteRequest$43$label_9_true#1, inline$storm_IoCompleteRequest$43$label_9_false#1;
-
- inline$storm_IoCompleteRequest$43$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$43$label_10#1;
-
- inline$storm_IoCompleteRequest$43$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$43$label_1#1;
-
- inline$storm_IoCompleteRequest$43$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$43$label_7#1;
-
- inline$storm_IoCompleteRequest$43$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$43$label_1#1;
-
- inline$storm_IoCompleteRequest$43$label_1#1:
- goto inline$storm_IoCompleteRequest$43$Return#1;
-
- inline$storm_IoCompleteRequest$43$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$43$Return#1;
-
- inline$storm_IoCompleteRequest$43$Return#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon40_Then#1, inline$BDLDevicePowerIoCompletion$21$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$21$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$21$anon41_Then#1, inline$BDLDevicePowerIoCompletion$21$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_98#1:
- goto inline$BDLGetDebugLevel$550$Entry#1;
-
- inline$BDLGetDebugLevel$550$Entry#1:
- goto inline$BDLGetDebugLevel$550$start#1;
-
- inline$BDLGetDebugLevel$550$start#1:
- goto inline$BDLGetDebugLevel$550$label_3#1;
-
- inline$BDLGetDebugLevel$550$label_3#1:
- havoc inline$BDLGetDebugLevel$550$myNondetVar_0;
- inline$BDLGetDebugLevel$550$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$550$myNondetVar_0;
- goto inline$BDLGetDebugLevel$550$label_1#1;
-
- inline$BDLGetDebugLevel$550$label_1#1:
- goto inline$BDLGetDebugLevel$550$Return#1;
-
- inline$BDLGetDebugLevel$550$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$550$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon42_Then#1, inline$BDLDevicePowerIoCompletion$21$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_101_true#1, inline$BDLDevicePowerIoCompletion$21$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_105#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_106#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_107#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$21$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_102#1:
- goto inline$BDLGetDebugLevel$551$Entry#1;
-
- inline$BDLGetDebugLevel$551$Entry#1:
- goto inline$BDLGetDebugLevel$551$start#1;
-
- inline$BDLGetDebugLevel$551$start#1:
- goto inline$BDLGetDebugLevel$551$label_3#1;
-
- inline$BDLGetDebugLevel$551$label_3#1:
- havoc inline$BDLGetDebugLevel$551$myNondetVar_0;
- inline$BDLGetDebugLevel$551$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$551$myNondetVar_0;
- goto inline$BDLGetDebugLevel$551$label_1#1;
-
- inline$BDLGetDebugLevel$551$label_1#1:
- goto inline$BDLGetDebugLevel$551$Return#1;
-
- inline$BDLGetDebugLevel$551$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$551$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon43_Then#1, inline$BDLDevicePowerIoCompletion$21$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_111_true#1, inline$BDLDevicePowerIoCompletion$21$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_115#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_116#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_117#1:
- call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$21$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$21$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_112#1:
- goto inline$BDLGetDebugLevel$552$Entry#1;
-
- inline$BDLGetDebugLevel$552$Entry#1:
- goto inline$BDLGetDebugLevel$552$start#1;
-
- inline$BDLGetDebugLevel$552$start#1:
- goto inline$BDLGetDebugLevel$552$label_3#1;
-
- inline$BDLGetDebugLevel$552$label_3#1:
- havoc inline$BDLGetDebugLevel$552$myNondetVar_0;
- inline$BDLGetDebugLevel$552$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$552$myNondetVar_0;
- goto inline$BDLGetDebugLevel$552$label_1#1;
-
- inline$BDLGetDebugLevel$552$label_1#1:
- goto inline$BDLGetDebugLevel$552$Return#1;
-
- inline$BDLGetDebugLevel$552$Return#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$552$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$21$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$21$anon44_Then#1, inline$BDLDevicePowerIoCompletion$21$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_121_true#1, inline$BDLDevicePowerIoCompletion$21$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$21$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$21$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_122#1:
- inline$BDLDevicePowerIoCompletion$21$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$21$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$21$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$21$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$21$Return#1;
-
- inline$BDLDevicePowerIoCompletion$21$Return#1:
- inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$21$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$21$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$21$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$21$anon13_Then#1, inline$CallCompletionRoutine$21$anon13_Else#1;
-
- inline$CallCompletionRoutine$21$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$21$anon7#1;
-
- inline$CallCompletionRoutine$21$anon7#1:
- goto inline$CallCompletionRoutine$21$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$21$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$21$Return#1;
-
- inline$CallCompletionRoutine$21$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$21$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$21$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$21$Entry#1:
- inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$21$start#1;
-
- inline$BDLCallDriverCompletionRoutine$21$start#1:
- inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$21$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$21$label_3_true#1, inline$BDLCallDriverCompletionRoutine$21$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$21$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$21$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$21$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$21$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_6#1:
- goto inline$storm_KeSetEvent$23$Entry#1;
-
- inline$storm_KeSetEvent$23$Entry#1:
- inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$23$start#1;
-
- inline$storm_KeSetEvent$23$start#1:
- inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$23$label_3#1;
-
- inline$storm_KeSetEvent$23$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$23$label_1#1;
-
- inline$storm_KeSetEvent$23$label_1#1:
- goto inline$storm_KeSetEvent$23$Return#1;
-
- inline$storm_KeSetEvent$23$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$21$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$21$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$21$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$21$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$21$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$21$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$21$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_9#1:
- inline$BDLCallDriverCompletionRoutine$21$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$21$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$21$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$21$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$21$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$21$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$21$Return#1:
- inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$21$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$21$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$21$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$21$anon12_Then#1, inline$CallCompletionRoutine$21$anon12_Else#1;
-
- inline$CallCompletionRoutine$21$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$21$anon5#1;
-
- inline$CallCompletionRoutine$21$anon5#1:
- goto inline$CallCompletionRoutine$21$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$21$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$21$label_23#1;
-
- inline$CallCompletionRoutine$21$label_23#1:
- inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$21$label_24#1;
-
- inline$CallCompletionRoutine$21$label_24#1:
- goto inline$CallCompletionRoutine$21$label_24_true#1, inline$CallCompletionRoutine$21$label_24_false#1;
-
- inline$CallCompletionRoutine$21$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$21$label_1#1;
-
- inline$CallCompletionRoutine$21$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$21$label_25#1;
-
- inline$CallCompletionRoutine$21$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$21$label_1#1;
-
- inline$CallCompletionRoutine$21$label_1#1:
- goto inline$CallCompletionRoutine$21$Return#1;
-
- inline$CallCompletionRoutine$21$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$21$Return#1;
-
- inline$CallCompletionRoutine$21$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$21$Return#1;
-
- inline$CallCompletionRoutine$21$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$21$Return#1;
-
- inline$CallCompletionRoutine$21$Return#1:
- goto inline$storm_IoCallDriver$10$label_39$1#1;
-
- inline$storm_IoCallDriver$10$label_39$1#1:
- goto inline$storm_IoCallDriver$10$anon15_Then#1, inline$storm_IoCallDriver$10$anon15_Else#1;
-
- inline$storm_IoCallDriver$10$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$10$anon10#1;
-
- inline$storm_IoCallDriver$10$anon10#1:
- goto inline$storm_IoCallDriver$10$label_36#1;
-
- inline$storm_IoCallDriver$10$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$10$Return#1;
-
- inline$storm_IoCallDriver$10$label_27_case_0#1:
- assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$10$label_28#1;
-
- inline$storm_IoCallDriver$10$label_28#1:
- inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$10$label_42#1;
-
- inline$storm_IoCallDriver$10$label_42#1:
- goto inline$storm_IoCallDriver$10$label_43#1;
-
- inline$storm_IoCallDriver$10$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$10$label_36#1;
-
- inline$storm_IoCallDriver$10$label_36#1:
- inline$storm_IoCallDriver$10$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$10$label_1#1;
-
- inline$storm_IoCallDriver$10$label_1#1:
- goto inline$storm_IoCallDriver$10$Return#1;
-
- inline$storm_IoCallDriver$10$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$10$Return#1;
-
- inline$storm_IoCallDriver$10$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$10$Return#1;
-
- inline$storm_IoCallDriver$10$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$10$Return#1;
-
- inline$storm_IoCallDriver$10$Return#1:
- inline$storm_PoCallDriver$4$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$10$$result.storm_IoCallDriver$456.0$1$;
- goto inline$storm_PoCallDriver$4$label_3$1#1;
-
- inline$storm_PoCallDriver$4$label_3$1#1:
- goto inline$storm_PoCallDriver$4$anon2_Then#1, inline$storm_PoCallDriver$4$anon2_Else#1;
-
- inline$storm_PoCallDriver$4$anon2_Else#1:
- assume !raiseException;
- goto inline$storm_PoCallDriver$4$anon1#1;
-
- inline$storm_PoCallDriver$4$anon1#1:
- goto inline$storm_PoCallDriver$4$label_6#1;
-
- inline$storm_PoCallDriver$4$label_6#1:
- inline$storm_PoCallDriver$4$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$4$$result.storm_IoCallDriver$499.27$2$;
- goto inline$storm_PoCallDriver$4$label_1#1;
-
- inline$storm_PoCallDriver$4$label_1#1:
- goto inline$storm_PoCallDriver$4$Return#1;
-
- inline$storm_PoCallDriver$4$anon2_Then#1:
- assume raiseException;
- goto inline$storm_PoCallDriver$4$Return#1;
-
- inline$storm_PoCallDriver$4$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$4$$result.storm_PoCallDriver$494.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_25$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_25$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon22_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon13#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon13#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_28#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_28#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_PoCallDriver$104.29$3$;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$4$label_29_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_29_false#1:
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_29_true#1:
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_31#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_31#1:
- goto inline$storm_KeWaitForSingleObject$4$Entry#1;
-
- inline$storm_KeWaitForSingleObject$4$Entry#1:
- inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
- goto inline$storm_KeWaitForSingleObject$4$start#1;
-
- inline$storm_KeWaitForSingleObject$4$start#1:
- inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
- inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
- goto inline$storm_KeWaitForSingleObject$4$label_3#1;
-
- inline$storm_KeWaitForSingleObject$4$label_3#1:
- goto inline$storm_KeWaitForSingleObject$4$label_3_true#1, inline$storm_KeWaitForSingleObject$4$label_3_false#1;
-
- inline$storm_KeWaitForSingleObject$4$label_3_false#1:
- assume inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
- goto inline$storm_KeWaitForSingleObject$4$label_4#1;
-
- inline$storm_KeWaitForSingleObject$4$label_4#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$4$anon6_Then#1, inline$storm_KeWaitForSingleObject$4$anon6_Else#1;
-
- inline$storm_KeWaitForSingleObject$4$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$4$anon1#1;
-
- inline$storm_KeWaitForSingleObject$4$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$4$label_13#1;
-
- inline$storm_KeWaitForSingleObject$4$label_13#1:
- inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$4$label_1#1;
-
- inline$storm_KeWaitForSingleObject$4$anon6_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$4$Return#1;
-
- inline$storm_KeWaitForSingleObject$4$label_3_true#1:
- assume inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
- goto inline$storm_KeWaitForSingleObject$4$label_5#1;
-
- inline$storm_KeWaitForSingleObject$4$label_5#1:
- call inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$ := storm_nondet();
- goto inline$storm_KeWaitForSingleObject$4$label_8#1;
-
- inline$storm_KeWaitForSingleObject$4$label_8#1:
- goto inline$storm_KeWaitForSingleObject$4$label_8_true#1, inline$storm_KeWaitForSingleObject$4$label_8_false#1;
-
- inline$storm_KeWaitForSingleObject$4$label_8_false#1:
- assume inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$ == 0;
- goto inline$storm_KeWaitForSingleObject$4$label_9#1;
-
- inline$storm_KeWaitForSingleObject$4$label_9#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$4$anon7_Then#1, inline$storm_KeWaitForSingleObject$4$anon7_Else#1;
-
- inline$storm_KeWaitForSingleObject$4$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$4$anon3#1;
-
- inline$storm_KeWaitForSingleObject$4$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$4$label_12#1;
-
- inline$storm_KeWaitForSingleObject$4$label_12#1:
- inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
- goto inline$storm_KeWaitForSingleObject$4$label_1#1;
-
- inline$storm_KeWaitForSingleObject$4$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$4$Return#1;
-
- inline$storm_KeWaitForSingleObject$4$label_8_true#1:
- assume inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$ != 0;
- goto inline$storm_KeWaitForSingleObject$4$label_10#1;
-
- inline$storm_KeWaitForSingleObject$4$label_10#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$4$anon8_Then#1, inline$storm_KeWaitForSingleObject$4$anon8_Else#1;
-
- inline$storm_KeWaitForSingleObject$4$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$4$anon5#1;
-
- inline$storm_KeWaitForSingleObject$4$anon5#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$4$label_11#1;
-
- inline$storm_KeWaitForSingleObject$4$label_11#1:
- inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$4$label_1#1;
-
- inline$storm_KeWaitForSingleObject$4$label_1#1:
- goto inline$storm_KeWaitForSingleObject$4$Return#1;
-
- inline$storm_KeWaitForSingleObject$4$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$4$Return#1;
-
- inline$storm_KeWaitForSingleObject$4$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_31$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_31$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon23_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$anon15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon15#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_34#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_34#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_KeWaitForSingleObject$116.38$5$;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_35#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_35#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$4$label_35_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_35_false#1:
- assume inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_35_true#1:
- assume inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_37#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_37#1:
- call inline$BDLCallLowerLevelDriverAndWait$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_38#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_38#1:
- call inline$BDLCallLowerLevelDriverAndWait$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_39#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_39#1:
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_36#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
- inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_30#1:
- inline$BDLCallLowerLevelDriverAndWait$4$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
- goto inline$BDLCallLowerLevelDriverAndWait$4$label_1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$label_1#1:
- call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon23_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon22_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon21_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon19_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon18_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon17_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$anon16_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$4$Return#1:
- inline$BDLPnPQueryStop$0$$result.BDLCallLowerLevelDriverAndWait$2116.47$13$ := inline$BDLCallLowerLevelDriverAndWait$4$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
- goto inline$BDLPnPQueryStop$0$label_71$1#1;
-
- inline$BDLPnPQueryStop$0$label_71$1#1:
- goto inline$BDLPnPQueryStop$0$anon32_Then#1, inline$BDLPnPQueryStop$0$anon32_Else#1;
-
- inline$BDLPnPQueryStop$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon21#1;
-
- inline$BDLPnPQueryStop$0$anon21#1:
- goto inline$BDLPnPQueryStop$0$label_74#1;
-
- inline$BDLPnPQueryStop$0$label_74#1:
- inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12 := inline$BDLPnPQueryStop$0$$result.BDLCallLowerLevelDriverAndWait$2116.47$13$;
- goto inline$BDLPnPQueryStop$0$label_42#1;
-
- inline$BDLPnPQueryStop$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon26_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$label_34_true#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- assume INT_ULT(0, inline$BDLPnPQueryStop$0$myNondetVar_0);
- goto inline$BDLPnPQueryStop$0$label_38#1;
-
- inline$BDLPnPQueryStop$0$label_38#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- havoc inline$BDLPnPQueryStop$0$myNondetVar_1;
- assume inline$BDLPnPQueryStop$0$myNondetVar_0 == inline$BDLPnPQueryStop$0$myNondetVar_1;
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$3$Entry#1;
-
- inline$storm_KeReleaseSpinLock$3$Entry#1:
- inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
- goto inline$storm_KeReleaseSpinLock$3$start#1;
-
- inline$storm_KeReleaseSpinLock$3$start#1:
- inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$3$label_3#1;
-
- inline$storm_KeReleaseSpinLock$3$label_3#1:
- goto inline$storm_KeReleaseSpinLock$3$label_4#1;
-
- inline$storm_KeReleaseSpinLock$3$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$3$label_7#1;
-
- inline$storm_KeReleaseSpinLock$3$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$3$anon5_Then#1, inline$storm_KeReleaseSpinLock$3$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$3$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$3$anon1#1;
-
- inline$storm_KeReleaseSpinLock$3$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$3$label_8#1;
-
- inline$storm_KeReleaseSpinLock$3$label_8#1:
- goto inline$storm_getThreadID$6$Entry#1;
-
- inline$storm_getThreadID$6$Entry#1:
- goto inline$storm_getThreadID$6$anon0#1;
-
- inline$storm_getThreadID$6$anon0#1:
- inline$storm_getThreadID$6$tid := __storm_thread_id;
- goto inline$storm_getThreadID$6$Return#1;
-
- inline$storm_getThreadID$6$Return#1:
- inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$6$tid;
- goto inline$storm_KeReleaseSpinLock$3$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$3$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$3$label_11#1;
-
- inline$storm_KeReleaseSpinLock$3$label_11#1:
- goto inline$storm_KeReleaseSpinLock$3$label_11_true#1, inline$storm_KeReleaseSpinLock$3$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$3$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$3$label_12#1;
-
- inline$storm_KeReleaseSpinLock$3$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$3$label_1#1;
-
- inline$storm_KeReleaseSpinLock$3$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$3$label_15#1;
-
- inline$storm_KeReleaseSpinLock$3$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$3$label_16#1;
-
- inline$storm_KeReleaseSpinLock$3$label_16#1:
- goto inline$storm_KeReleaseSpinLock$3$anon6_Then#1, inline$storm_KeReleaseSpinLock$3$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$3$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$3$anon4#1;
-
- inline$storm_KeReleaseSpinLock$3$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$3$anon4#1;
-
- inline$storm_KeReleaseSpinLock$3$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$3$label_1#1;
-
- inline$storm_KeReleaseSpinLock$3$label_1#1:
- goto inline$storm_KeReleaseSpinLock$3$Return#1;
-
- inline$storm_KeReleaseSpinLock$3$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$3$Return#1;
-
- inline$storm_KeReleaseSpinLock$3$Return#1:
- goto inline$BDLPnPQueryStop$0$label_38$1#1;
-
- inline$BDLPnPQueryStop$0$label_38$1#1:
- goto inline$BDLPnPQueryStop$0$anon27_Then#1, inline$BDLPnPQueryStop$0$anon27_Else#1;
-
- inline$BDLPnPQueryStop$0$anon27_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon11#1;
-
- inline$BDLPnPQueryStop$0$anon11#1:
- havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
- goto inline$BDLPnPQueryStop$0$label_41#1;
-
- inline$BDLPnPQueryStop$0$label_41#1:
- inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12 := 0 - 2147483631;
- goto inline$BDLPnPQueryStop$0$label_42#1;
-
- inline$BDLPnPQueryStop$0$label_42#1:
- goto inline$BDLGetDebugLevel$478$Entry#1;
-
- inline$BDLGetDebugLevel$478$Entry#1:
- goto inline$BDLGetDebugLevel$478$start#1;
-
- inline$BDLGetDebugLevel$478$start#1:
- goto inline$BDLGetDebugLevel$478$label_3#1;
-
- inline$BDLGetDebugLevel$478$label_3#1:
- havoc inline$BDLGetDebugLevel$478$myNondetVar_0;
- inline$BDLGetDebugLevel$478$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$478$myNondetVar_0;
- goto inline$BDLGetDebugLevel$478$label_1#1;
-
- inline$BDLGetDebugLevel$478$label_1#1:
- goto inline$BDLGetDebugLevel$478$Return#1;
-
- inline$BDLGetDebugLevel$478$Return#1:
- inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$ := inline$BDLGetDebugLevel$478$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryStop$0$label_42$1#1;
-
- inline$BDLPnPQueryStop$0$label_42$1#1:
- goto inline$BDLPnPQueryStop$0$anon28_Then#1, inline$BDLPnPQueryStop$0$anon28_Else#1;
-
- inline$BDLPnPQueryStop$0$anon28_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon13#1;
-
- inline$BDLPnPQueryStop$0$anon13#1:
- goto inline$BDLPnPQueryStop$0$label_45#1;
-
- inline$BDLPnPQueryStop$0$label_45#1:
- goto inline$BDLPnPQueryStop$0$label_45_true#1, inline$BDLPnPQueryStop$0$label_45_false#1;
-
- inline$BDLPnPQueryStop$0$label_45_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$) == 0;
- goto inline$BDLPnPQueryStop$0$label_46#1;
-
- inline$BDLPnPQueryStop$0$label_45_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$) != 0;
- goto inline$BDLPnPQueryStop$0$label_49#1;
-
- inline$BDLPnPQueryStop$0$label_49#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_50#1;
-
- inline$BDLPnPQueryStop$0$label_50#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_51#1;
-
- inline$BDLPnPQueryStop$0$label_51#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_52#1;
-
- inline$BDLPnPQueryStop$0$label_52#1:
- havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$15$;
- goto inline$BDLPnPQueryStop$0$label_46#1;
-
- inline$BDLPnPQueryStop$0$label_46#1:
- goto inline$BDLGetDebugLevel$479$Entry#1;
-
- inline$BDLGetDebugLevel$479$Entry#1:
- goto inline$BDLGetDebugLevel$479$start#1;
-
- inline$BDLGetDebugLevel$479$start#1:
- goto inline$BDLGetDebugLevel$479$label_3#1;
-
- inline$BDLGetDebugLevel$479$label_3#1:
- havoc inline$BDLGetDebugLevel$479$myNondetVar_0;
- inline$BDLGetDebugLevel$479$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$479$myNondetVar_0;
- goto inline$BDLGetDebugLevel$479$label_1#1;
-
- inline$BDLGetDebugLevel$479$label_1#1:
- goto inline$BDLGetDebugLevel$479$Return#1;
-
- inline$BDLGetDebugLevel$479$Return#1:
- inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$ := inline$BDLGetDebugLevel$479$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryStop$0$label_46$1#1;
-
- inline$BDLPnPQueryStop$0$label_46$1#1:
- goto inline$BDLPnPQueryStop$0$anon29_Then#1, inline$BDLPnPQueryStop$0$anon29_Else#1;
-
- inline$BDLPnPQueryStop$0$anon29_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon15#1;
-
- inline$BDLPnPQueryStop$0$anon15#1:
- goto inline$BDLPnPQueryStop$0$label_55#1;
-
- inline$BDLPnPQueryStop$0$label_55#1:
- goto inline$BDLPnPQueryStop$0$label_55_true#1, inline$BDLPnPQueryStop$0$label_55_false#1;
-
- inline$BDLPnPQueryStop$0$label_55_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$) == 0;
- goto inline$BDLPnPQueryStop$0$label_56#1;
-
- inline$BDLPnPQueryStop$0$label_55_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$) != 0;
- goto inline$BDLPnPQueryStop$0$label_59#1;
-
- inline$BDLPnPQueryStop$0$label_59#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_60#1;
-
- inline$BDLPnPQueryStop$0$label_60#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_61#1;
-
- inline$BDLPnPQueryStop$0$label_61#1:
- call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryStop$0$label_62#1;
-
- inline$BDLPnPQueryStop$0$label_62#1:
- havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$20$;
- goto inline$BDLPnPQueryStop$0$label_56#1;
-
- inline$BDLPnPQueryStop$0$label_56#1:
- goto inline$BDLGetDebugLevel$480$Entry#1;
-
- inline$BDLGetDebugLevel$480$Entry#1:
- goto inline$BDLGetDebugLevel$480$start#1;
-
- inline$BDLGetDebugLevel$480$start#1:
- goto inline$BDLGetDebugLevel$480$label_3#1;
-
- inline$BDLGetDebugLevel$480$label_3#1:
- havoc inline$BDLGetDebugLevel$480$myNondetVar_0;
- inline$BDLGetDebugLevel$480$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$480$myNondetVar_0;
- goto inline$BDLGetDebugLevel$480$label_1#1;
-
- inline$BDLGetDebugLevel$480$label_1#1:
- goto inline$BDLGetDebugLevel$480$Return#1;
-
- inline$BDLGetDebugLevel$480$Return#1:
- inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$ := inline$BDLGetDebugLevel$480$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryStop$0$label_56$1#1;
-
- inline$BDLPnPQueryStop$0$label_56$1#1:
- goto inline$BDLPnPQueryStop$0$anon30_Then#1, inline$BDLPnPQueryStop$0$anon30_Else#1;
-
- inline$BDLPnPQueryStop$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryStop$0$anon17#1;
-
- inline$BDLPnPQueryStop$0$anon17#1:
- goto inline$BDLPnPQueryStop$0$label_65#1;
-
- inline$BDLPnPQueryStop$0$label_65#1:
- goto inline$BDLPnPQueryStop$0$label_65_true#1, inline$BDLPnPQueryStop$0$label_65_false#1;
-
- inline$BDLPnPQueryStop$0$label_65_false#1:
- assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$, 4) == 0;
- goto inline$BDLPnPQueryStop$0$label_66#1;
-
- inline$BDLPnPQueryStop$0$label_65_true#1:
- assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$, 4) != 0;
- goto inline$BDLPnPQueryStop$0$label_67#1;
-
- inline$BDLPnPQueryStop$0$label_67#1:
- goto inline$BDLPnPQueryStop$0$label_66#1;
-
- inline$BDLPnPQueryStop$0$label_66#1:
- inline$BDLPnPQueryStop$0$$result.BDLPnPQueryStop$2074.0$1$ := inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12;
- goto inline$BDLPnPQueryStop$0$label_1#1;
-
- inline$BDLPnPQueryStop$0$label_1#1:
- call __HAVOC_free(inline$BDLPnPQueryStop$0$$irql$5$2082.16$BDLPnPQueryStop$12);
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon29_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon28_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon27_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon25_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon24_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon23_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$anon22_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryStop$0$Return#1;
-
- inline$BDLPnPQueryStop$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPQueryStop$916.32$29$ := inline$BDLPnPQueryStop$0$$result.BDLPnPQueryStop$2074.0$1$;
- goto inline$BDLPnP$0$label_128$1#1;
-
- inline$BDLPnP$0$label_128$1#1:
- goto inline$BDLPnP$0$anon72_Then#1, inline$BDLPnP$0$anon72_Else#1;
-
- inline$BDLPnP$0$anon72_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon37#1;
-
- inline$BDLPnP$0$anon37#1:
- goto inline$BDLPnP$0$label_149#1;
-
- inline$BDLPnP$0$label_149#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPQueryStop$916.32$29$;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon72_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_5#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 4;
- goto inline$BDLPnP$0$label_125#1;
-
- inline$BDLPnP$0$label_125#1:
- goto inline$BDLPnPStop$0$Entry#1;
-
- inline$BDLPnPStop$0$Entry#1:
- inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPStop$0$start#1;
-
- inline$BDLPnPStop$0$start#1:
- inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12 := inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12_.1;
- inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12 := inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12_.1;
- goto inline$BDLPnPStop$0$label_3#1;
-
- inline$BDLPnPStop$0$label_3#1:
- goto inline$BDLPnPStop$0$label_4#1;
-
- inline$BDLPnPStop$0$label_4#1:
- inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 := 0;
- goto inline$BDLPnPStop$0$label_5#1;
-
- inline$BDLPnPStop$0$label_5#1:
- goto inline$BDLPnPStop$0$label_6#1;
-
- inline$BDLPnPStop$0$label_6#1:
- havoc inline$BDLPnPStop$0$myNondetVar_0;
- goto inline$BDLPnPStop$0$label_7#1;
-
- inline$BDLPnPStop$0$label_7#1:
- goto inline$BDLGetDebugLevel$379$Entry#1;
-
- inline$BDLGetDebugLevel$379$Entry#1:
- goto inline$BDLGetDebugLevel$379$start#1;
-
- inline$BDLGetDebugLevel$379$start#1:
- goto inline$BDLGetDebugLevel$379$label_3#1;
-
- inline$BDLGetDebugLevel$379$label_3#1:
- havoc inline$BDLGetDebugLevel$379$myNondetVar_0;
- inline$BDLGetDebugLevel$379$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$379$myNondetVar_0;
- goto inline$BDLGetDebugLevel$379$label_1#1;
-
- inline$BDLGetDebugLevel$379$label_1#1:
- goto inline$BDLGetDebugLevel$379$Return#1;
-
- inline$BDLGetDebugLevel$379$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$ := inline$BDLGetDebugLevel$379$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_7$1#1;
-
- inline$BDLPnPStop$0$label_7$1#1:
- goto inline$BDLPnPStop$0$anon28_Then#1, inline$BDLPnPStop$0$anon28_Else#1;
-
- inline$BDLPnPStop$0$anon28_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon1#1;
-
- inline$BDLPnPStop$0$anon1#1:
- goto inline$BDLPnPStop$0$label_10#1;
-
- inline$BDLPnPStop$0$label_10#1:
- goto inline$BDLPnPStop$0$label_10_true#1, inline$BDLPnPStop$0$label_10_false#1;
-
- inline$BDLPnPStop$0$label_10_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$) == 0;
- goto inline$BDLPnPStop$0$label_11#1;
-
- inline$BDLPnPStop$0$label_10_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$) != 0;
- goto inline$BDLPnPStop$0$label_14#1;
-
- inline$BDLPnPStop$0$label_14#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_15#1;
-
- inline$BDLPnPStop$0$label_15#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_16#1;
-
- inline$BDLPnPStop$0$label_16#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_17#1;
-
- inline$BDLPnPStop$0$label_17#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2190.0$3$;
- goto inline$BDLPnPStop$0$label_11#1;
-
- inline$BDLPnPStop$0$label_11#1:
- goto inline$BDLGetDebugLevel$380$Entry#1;
-
- inline$BDLGetDebugLevel$380$Entry#1:
- goto inline$BDLGetDebugLevel$380$start#1;
-
- inline$BDLGetDebugLevel$380$start#1:
- goto inline$BDLGetDebugLevel$380$label_3#1;
-
- inline$BDLGetDebugLevel$380$label_3#1:
- havoc inline$BDLGetDebugLevel$380$myNondetVar_0;
- inline$BDLGetDebugLevel$380$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$380$myNondetVar_0;
- goto inline$BDLGetDebugLevel$380$label_1#1;
-
- inline$BDLGetDebugLevel$380$label_1#1:
- goto inline$BDLGetDebugLevel$380$Return#1;
-
- inline$BDLGetDebugLevel$380$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$ := inline$BDLGetDebugLevel$380$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_11$1#1;
-
- inline$BDLPnPStop$0$label_11$1#1:
- goto inline$BDLPnPStop$0$anon29_Then#1, inline$BDLPnPStop$0$anon29_Else#1;
-
- inline$BDLPnPStop$0$anon29_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon3#1;
-
- inline$BDLPnPStop$0$anon3#1:
- goto inline$BDLPnPStop$0$label_20#1;
-
- inline$BDLPnPStop$0$label_20#1:
- goto inline$BDLPnPStop$0$label_20_true#1, inline$BDLPnPStop$0$label_20_false#1;
-
- inline$BDLPnPStop$0$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$) == 0;
- goto inline$BDLPnPStop$0$label_21#1;
-
- inline$BDLPnPStop$0$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$) != 0;
- goto inline$BDLPnPStop$0$label_24#1;
-
- inline$BDLPnPStop$0$label_24#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_25#1;
-
- inline$BDLPnPStop$0$label_25#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_26#1;
-
- inline$BDLPnPStop$0$label_26#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_27#1;
-
- inline$BDLPnPStop$0$label_27#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2190.0$8$;
- goto inline$BDLPnPStop$0$label_21#1;
-
- inline$BDLPnPStop$0$label_21#1:
- goto inline$BDLGetDebugLevel$381$Entry#1;
-
- inline$BDLGetDebugLevel$381$Entry#1:
- goto inline$BDLGetDebugLevel$381$start#1;
-
- inline$BDLGetDebugLevel$381$start#1:
- goto inline$BDLGetDebugLevel$381$label_3#1;
-
- inline$BDLGetDebugLevel$381$label_3#1:
- havoc inline$BDLGetDebugLevel$381$myNondetVar_0;
- inline$BDLGetDebugLevel$381$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$381$myNondetVar_0;
- goto inline$BDLGetDebugLevel$381$label_1#1;
-
- inline$BDLGetDebugLevel$381$label_1#1:
- goto inline$BDLGetDebugLevel$381$Return#1;
-
- inline$BDLGetDebugLevel$381$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$ := inline$BDLGetDebugLevel$381$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_21$1#1;
-
- inline$BDLPnPStop$0$label_21$1#1:
- goto inline$BDLPnPStop$0$anon30_Then#1, inline$BDLPnPStop$0$anon30_Else#1;
-
- inline$BDLPnPStop$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon5#1;
-
- inline$BDLPnPStop$0$anon5#1:
- goto inline$BDLPnPStop$0$label_30#1;
-
- inline$BDLPnPStop$0$label_30#1:
- goto inline$BDLPnPStop$0$label_30_true#1, inline$BDLPnPStop$0$label_30_false#1;
-
- inline$BDLPnPStop$0$label_30_false#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$, 4) == 0;
- goto inline$BDLPnPStop$0$label_31#1;
-
- inline$BDLPnPStop$0$label_30_true#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$, 4) != 0;
- goto inline$BDLPnPStop$0$label_34#1;
-
- inline$BDLPnPStop$0$label_34#1:
- goto inline$BDLPnPStop$0$label_31#1;
-
- inline$BDLPnPStop$0$label_31#1:
- call inline$BDLPnPStop$0$$result.IoSetDeviceInterfaceState$2199.29$13$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12), 0);
- goto inline$BDLPnPStop$0$anon31_Then#1, inline$BDLPnPStop$0$anon31_Else#1;
-
- inline$BDLPnPStop$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon7#1;
-
- inline$BDLPnPStop$0$anon7#1:
- goto inline$BDLPnPStop$0$label_35#1;
-
- inline$BDLPnPStop$0$label_35#1:
- goto inline$BDLPnPStop$0$label_38#1;
-
- inline$BDLPnPStop$0$label_38#1:
- inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 := inline$BDLPnPStop$0$$callresult.$2204.67$14$;
- goto inline$BDLPnPStop$0$label_39#1;
-
- inline$BDLPnPStop$0$label_39#1:
- goto inline$BDLPnPStop$0$label_39_true#1, inline$BDLPnPStop$0$label_39_false#1;
-
- inline$BDLPnPStop$0$label_39_false#1:
- assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 == 0;
- goto inline$BDLPnPStop$0$label_40#1;
-
- inline$BDLPnPStop$0$label_40#1:
- goto inline$BDLPnPStop$0$label_92#1;
-
- inline$BDLPnPStop$0$label_92#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$Entry#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$Entry#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12;
- goto inline$BDLCallLowerLevelDriverAndWait$3$start#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$start#1:
- call inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
- inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_4#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_4#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_6#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_6#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$Entry#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$Entry#1:
- inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$start#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$start#1:
- inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_4#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_4#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_5#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_5#1:
- goto inline$IoGetCurrentIrpStackLocation$72$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$72$Entry#1:
- inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetCurrentIrpStackLocation$72$start#1;
-
- inline$IoGetCurrentIrpStackLocation$72$start#1:
- inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$72$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$72$label_3_true#1, inline$IoGetCurrentIrpStackLocation$72$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$72$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$72$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$72$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$72$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$72$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$72$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$72$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$72$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$72$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$72$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$72$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$72$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$72$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$72$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$72$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$72$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$72$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$72$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$72$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$72$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_5$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_5$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$anon1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_8#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_8#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_9#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_9#1:
- goto inline$IoGetNextIrpStackLocation$7$Entry#1;
-
- inline$IoGetNextIrpStackLocation$7$Entry#1:
- inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetNextIrpStackLocation$7$start#1;
-
- inline$IoGetNextIrpStackLocation$7$start#1:
- inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$7$label_3#1;
-
- inline$IoGetNextIrpStackLocation$7$label_3#1:
- goto inline$IoGetNextIrpStackLocation$7$label_3_true#1, inline$IoGetNextIrpStackLocation$7$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$7$label_3_false#1:
- inline$IoGetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$7$myVar_0);
- goto inline$IoGetNextIrpStackLocation$7$label_4#1;
-
- inline$IoGetNextIrpStackLocation$7$label_4#1:
- call inline$IoGetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$7$label_6#1;
-
- inline$IoGetNextIrpStackLocation$7$label_6#1:
- call inline$IoGetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$7$label_7#1;
-
- inline$IoGetNextIrpStackLocation$7$label_7#1:
- goto inline$IoGetNextIrpStackLocation$7$label_5#1;
-
- inline$IoGetNextIrpStackLocation$7$label_3_true#1:
- inline$IoGetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$7$myVar_0);
- goto inline$IoGetNextIrpStackLocation$7$label_5#1;
-
- inline$IoGetNextIrpStackLocation$7$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$7$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$7$label_1#1;
-
- inline$IoGetNextIrpStackLocation$7$label_1#1:
- goto inline$IoGetNextIrpStackLocation$7$Return#1;
-
- inline$IoGetNextIrpStackLocation$7$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_9$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_9$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$anon3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_12#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_12#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_13#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_13#1:
- havoc inline$IoCopyCurrentIrpStackLocationToNext$3$$result.memcpy$25110.4$3$;
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_16#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_16#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$label_1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_6$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_6$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon16_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_9#1:
- goto inline$storm_KeInitializeEvent$3$Entry#1;
-
- inline$storm_KeInitializeEvent$3$Entry#1:
- inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
- goto inline$storm_KeInitializeEvent$3$start#1;
-
- inline$storm_KeInitializeEvent$3$start#1:
- inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
- inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12_.1;
- goto inline$storm_KeInitializeEvent$3$label_3#1;
-
- inline$storm_KeInitializeEvent$3$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12];
- call contextSwitch();
- goto inline$storm_KeInitializeEvent$3$label_1#1;
-
- inline$storm_KeInitializeEvent$3$label_1#1:
- goto inline$storm_KeInitializeEvent$3$Return#1;
-
- inline$storm_KeInitializeEvent$3$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_9$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_9$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon17_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_12#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$3$Entry#1;
-
- inline$storm_IoSetCompletionRoutine$3$Entry#1:
- inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoSetCompletionRoutine$3$start#1;
-
- inline$storm_IoSetCompletionRoutine$3$start#1:
- inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
- goto inline$storm_IoSetCompletionRoutine$3$label_3#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_3#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_4#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_4#1:
- call inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$ := storm_nondet();
- goto inline$storm_IoSetCompletionRoutine$3$label_7#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_7#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_7_true#1, inline$storm_IoSetCompletionRoutine$3$label_7_false#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_7_false#1:
- assume inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$ == 0;
- goto inline$storm_IoSetCompletionRoutine$3$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_7_true#1:
- assume inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$ != 0;
- goto inline$storm_IoSetCompletionRoutine$3$label_11#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_11#1:
- havoc raiseException;
- goto inline$storm_IoSetCompletionRoutine$3$anon6_Then#1, inline$storm_IoSetCompletionRoutine$3$anon6_Else#1;
-
- inline$storm_IoSetCompletionRoutine$3$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$3$anon3#1;
-
- inline$storm_IoSetCompletionRoutine$3$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
- call contextSwitch();
- goto inline$storm_IoSetCompletionRoutine$3$label_12#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_12_true#1, inline$storm_IoSetCompletionRoutine$3$label_12_false#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_12_false#1:
- assume 0 == 0;
- goto inline$storm_IoSetCompletionRoutine$3$label_13#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_13#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCompletionRoutine$3$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_12_true#1:
- assume 0 != 0;
- goto inline$storm_IoSetCompletionRoutine$3$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_8#1:
- goto inline$IoGetNextIrpStackLocation$8$Entry#1;
-
- inline$IoGetNextIrpStackLocation$8$Entry#1:
- inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
- goto inline$IoGetNextIrpStackLocation$8$start#1;
-
- inline$IoGetNextIrpStackLocation$8$start#1:
- inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$8$label_3#1;
-
- inline$IoGetNextIrpStackLocation$8$label_3#1:
- goto inline$IoGetNextIrpStackLocation$8$label_3_true#1, inline$IoGetNextIrpStackLocation$8$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$8$label_3_false#1:
- inline$IoGetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$8$myVar_0);
- goto inline$IoGetNextIrpStackLocation$8$label_4#1;
-
- inline$IoGetNextIrpStackLocation$8$label_4#1:
- call inline$IoGetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$8$label_6#1;
-
- inline$IoGetNextIrpStackLocation$8$label_6#1:
- call inline$IoGetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$8$label_7#1;
-
- inline$IoGetNextIrpStackLocation$8$label_7#1:
- goto inline$IoGetNextIrpStackLocation$8$label_5#1;
-
- inline$IoGetNextIrpStackLocation$8$label_3_true#1:
- inline$IoGetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$8$myVar_0);
- goto inline$IoGetNextIrpStackLocation$8$label_5#1;
-
- inline$IoGetNextIrpStackLocation$8$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$8$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$8$label_1#1;
-
- inline$IoGetNextIrpStackLocation$8$label_1#1:
- goto inline$IoGetNextIrpStackLocation$8$Return#1;
-
- inline$IoGetNextIrpStackLocation$8$Return#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_8$1#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_8$1#1:
- goto inline$storm_IoSetCompletionRoutine$3$anon5_Then#1, inline$storm_IoSetCompletionRoutine$3$anon5_Else#1;
-
- inline$storm_IoSetCompletionRoutine$3$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$3$anon1#1;
-
- inline$storm_IoSetCompletionRoutine$3$anon1#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_16#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_16#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_17#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_17#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_18#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_18#1:
- goto inline$storm_IoSetCompletionRoutine$3$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$3$label_1#1:
- goto inline$storm_IoSetCompletionRoutine$3$Return#1;
-
- inline$storm_IoSetCompletionRoutine$3$anon5_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$3$Return#1;
-
- inline$storm_IoSetCompletionRoutine$3$anon6_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$3$Return#1;
-
- inline$storm_IoSetCompletionRoutine$3$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_12$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_12$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon18_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_15#1:
- goto inline$IoGetCurrentIrpStackLocation$73$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$73$Entry#1:
- inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoGetCurrentIrpStackLocation$73$start#1;
-
- inline$IoGetCurrentIrpStackLocation$73$start#1:
- inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$73$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$73$label_3_true#1, inline$IoGetCurrentIrpStackLocation$73$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$73$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$73$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$73$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$73$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$73$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$73$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$73$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$73$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$73$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$73$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$73$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$73$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$73$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$73$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$73$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$73$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$73$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$73$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$73$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$73$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_15$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_15$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon19_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon7#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon7#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_18#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_18#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$3$label_18_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_18_false#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_19#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_19#1:
- goto inline$storm_IoCallDriver$7$Entry#1;
-
- inline$storm_IoCallDriver$7$Entry#1:
- inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoCallDriver$7$start#1;
-
- inline$storm_IoCallDriver$7$start#1:
- inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$7$label_3#1;
-
- inline$storm_IoCallDriver$7$label_3#1:
- goto inline$storm_IoCallDriver$7$label_4#1;
-
- inline$storm_IoCallDriver$7$label_4#1:
- goto inline$storm_IoCallDriver$7$label_5#1;
-
- inline$storm_IoCallDriver$7$label_5#1:
- goto inline$storm_IoCallDriver$7$label_6#1;
-
- inline$storm_IoCallDriver$7$label_6#1:
- call inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$7$label_9#1;
-
- inline$storm_IoCallDriver$7$label_9#1:
- goto inline$storm_IoCallDriver$7$label_9_true#1, inline$storm_IoCallDriver$7$label_9_false#1;
-
- inline$storm_IoCallDriver$7$label_9_false#1:
- assume inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$7$label_10#1;
-
- inline$storm_IoCallDriver$7$label_9_true#1:
- assume inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$7$label_13#1;
-
- inline$storm_IoCallDriver$7$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$7$anon12_Then#1, inline$storm_IoCallDriver$7$anon12_Else#1;
-
- inline$storm_IoCallDriver$7$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$7$anon3#1;
-
- inline$storm_IoCallDriver$7$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$7$label_14#1;
-
- inline$storm_IoCallDriver$7$label_14#1:
- goto inline$storm_IoCallDriver$7$label_14_true#1, inline$storm_IoCallDriver$7$label_14_false#1;
-
- inline$storm_IoCallDriver$7$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$7$label_15#1;
-
- inline$storm_IoCallDriver$7$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$7$label_1#1;
-
- inline$storm_IoCallDriver$7$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$7$label_10#1;
-
- inline$storm_IoCallDriver$7$label_10#1:
- goto inline$IoSetNextIrpStackLocation$8$Entry#1;
-
- inline$IoSetNextIrpStackLocation$8$Entry#1:
- inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$8$start#1;
-
- inline$IoSetNextIrpStackLocation$8$start#1:
- inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$8$label_3#1;
-
- inline$IoSetNextIrpStackLocation$8$label_3#1:
- goto inline$IoSetNextIrpStackLocation$8$label_3_true#1, inline$IoSetNextIrpStackLocation$8$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$8$label_3_false#1:
- inline$IoSetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$8$myVar_0);
- goto inline$IoSetNextIrpStackLocation$8$label_4#1;
-
- inline$IoSetNextIrpStackLocation$8$label_4#1:
- call inline$IoSetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$8$label_7#1;
-
- inline$IoSetNextIrpStackLocation$8$label_7#1:
- call inline$IoSetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$8$label_8#1;
-
- inline$IoSetNextIrpStackLocation$8$label_8#1:
- goto inline$IoSetNextIrpStackLocation$8$label_5#1;
-
- inline$IoSetNextIrpStackLocation$8$label_3_true#1:
- inline$IoSetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$8$myVar_0);
- goto inline$IoSetNextIrpStackLocation$8$label_5#1;
-
- inline$IoSetNextIrpStackLocation$8$label_5#1:
- inline$IoSetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$8$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$8$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$8$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$8$label_6#1;
-
- inline$IoSetNextIrpStackLocation$8$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$8$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$8$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$8$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$8$label_1#1;
-
- inline$IoSetNextIrpStackLocation$8$label_1#1:
- goto inline$IoSetNextIrpStackLocation$8$Return#1;
-
- inline$IoSetNextIrpStackLocation$8$Return#1:
- goto inline$storm_IoCallDriver$7$label_10$1#1;
-
- inline$storm_IoCallDriver$7$label_10$1#1:
- goto inline$storm_IoCallDriver$7$anon11_Then#1, inline$storm_IoCallDriver$7$anon11_Else#1;
-
- inline$storm_IoCallDriver$7$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$7$anon1#1;
-
- inline$storm_IoCallDriver$7$anon1#1:
- goto inline$storm_IoCallDriver$7$label_18#1;
-
- inline$storm_IoCallDriver$7$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$74$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$74$Entry#1:
- inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$74$start#1;
-
- inline$IoGetCurrentIrpStackLocation$74$start#1:
- inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$74$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$74$label_3_true#1, inline$IoGetCurrentIrpStackLocation$74$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$74$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$74$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$74$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$74$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$74$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$74$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$74$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$74$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$74$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$74$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$74$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$74$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$74$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$74$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$74$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$74$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$74$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$74$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$74$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$74$Return#1:
- goto inline$storm_IoCallDriver$7$label_18$1#1;
-
- inline$storm_IoCallDriver$7$label_18$1#1:
- goto inline$storm_IoCallDriver$7$anon13_Then#1, inline$storm_IoCallDriver$7$anon13_Else#1;
-
- inline$storm_IoCallDriver$7$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$7$anon6#1;
-
- inline$storm_IoCallDriver$7$anon6#1:
- goto inline$storm_IoCallDriver$7$label_21#1;
-
- inline$storm_IoCallDriver$7$label_21#1:
- goto inline$storm_IoCallDriver$7$label_22#1;
-
- inline$storm_IoCallDriver$7$label_22#1:
- goto inline$storm_IoCallDriver$7$label_23#1;
-
- inline$storm_IoCallDriver$7$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$7$label_24#1;
-
- inline$storm_IoCallDriver$7$label_24#1:
- call inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$7$label_27#1;
-
- inline$storm_IoCallDriver$7$label_27#1:
- goto inline$storm_IoCallDriver$7$label_27_case_0#1, inline$storm_IoCallDriver$7$label_27_case_1#1, inline$storm_IoCallDriver$7$label_27_case_2#1;
-
- inline$storm_IoCallDriver$7$label_27_case_2#1:
- assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$7$label_30#1;
-
- inline$storm_IoCallDriver$7$label_30#1:
- inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$7$label_31#1;
-
- inline$storm_IoCallDriver$7$label_31#1:
- goto inline$storm_IoCallDriver$7$label_32#1;
-
- inline$storm_IoCallDriver$7$label_32#1:
- goto inline$storm_IoCallDriver$7$label_33#1;
-
- inline$storm_IoCallDriver$7$label_33#1:
- goto inline$CallCompletionRoutine$14$Entry#1;
-
- inline$CallCompletionRoutine$14$Entry#1:
- inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$14$start#1;
-
- inline$CallCompletionRoutine$14$start#1:
- inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$14$label_3#1;
-
- inline$CallCompletionRoutine$14$label_3#1:
- goto inline$CallCompletionRoutine$14$label_4#1;
-
- inline$CallCompletionRoutine$14$label_4#1:
- goto inline$CallCompletionRoutine$14$label_5#1;
-
- inline$CallCompletionRoutine$14$label_5#1:
- goto inline$CallCompletionRoutine$14$label_6#1;
-
- inline$CallCompletionRoutine$14$label_6#1:
- goto inline$CallCompletionRoutine$14$label_7#1;
-
- inline$CallCompletionRoutine$14$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$75$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$75$Entry#1:
- inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$75$start#1;
-
- inline$IoGetCurrentIrpStackLocation$75$start#1:
- inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$75$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$75$label_3_true#1, inline$IoGetCurrentIrpStackLocation$75$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$75$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$75$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$75$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$75$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$75$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$75$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$75$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$75$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$75$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$75$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$75$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$75$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$75$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$75$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$75$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$75$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$75$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$75$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$75$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$75$Return#1:
- goto inline$CallCompletionRoutine$14$label_7$1#1;
-
- inline$CallCompletionRoutine$14$label_7$1#1:
- goto inline$CallCompletionRoutine$14$anon10_Then#1, inline$CallCompletionRoutine$14$anon10_Else#1;
-
- inline$CallCompletionRoutine$14$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$14$anon1#1;
-
- inline$CallCompletionRoutine$14$anon1#1:
- goto inline$CallCompletionRoutine$14$label_10#1;
-
- inline$CallCompletionRoutine$14$label_10#1:
- goto inline$CallCompletionRoutine$14$label_11#1;
-
- inline$CallCompletionRoutine$14$label_11#1:
- havoc inline$CallCompletionRoutine$14$myNondetVar_0;
- inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$myNondetVar_0;
- goto inline$CallCompletionRoutine$14$label_12#1;
-
- inline$CallCompletionRoutine$14$label_12#1:
- havoc inline$CallCompletionRoutine$14$myNondetVar_0;
- inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$myNondetVar_0;
- goto inline$CallCompletionRoutine$14$label_13#1;
-
- inline$CallCompletionRoutine$14$label_13#1:
- havoc inline$CallCompletionRoutine$14$myNondetVar_0;
- goto inline$CallCompletionRoutine$14$label_14#1;
-
- inline$CallCompletionRoutine$14$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$76$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$76$Entry#1:
- inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$76$start#1;
-
- inline$IoGetCurrentIrpStackLocation$76$start#1:
- inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$76$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$76$label_3_true#1, inline$IoGetCurrentIrpStackLocation$76$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$76$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$76$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$76$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$76$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$76$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$76$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$76$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$76$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$76$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$76$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$76$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$76$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$76$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$76$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$76$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$76$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$76$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$76$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$76$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$76$Return#1:
- goto inline$CallCompletionRoutine$14$label_14$1#1;
-
- inline$CallCompletionRoutine$14$label_14$1#1:
- goto inline$CallCompletionRoutine$14$anon11_Then#1, inline$CallCompletionRoutine$14$anon11_Else#1;
-
- inline$CallCompletionRoutine$14$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$14$anon3#1;
-
- inline$CallCompletionRoutine$14$anon3#1:
- goto inline$CallCompletionRoutine$14$label_17#1;
-
- inline$CallCompletionRoutine$14$label_17#1:
- goto inline$CallCompletionRoutine$14$label_18#1;
-
- inline$CallCompletionRoutine$14$label_18#1:
- goto inline$CallCompletionRoutine$14$label_18_true#1, inline$CallCompletionRoutine$14$label_18_false#1;
-
- inline$CallCompletionRoutine$14$label_18_false#1:
- assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$14$label_1#1;
-
- inline$CallCompletionRoutine$14$label_18_true#1:
- assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$14$label_19#1;
-
- inline$CallCompletionRoutine$14$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$14$label_20#1;
-
- inline$CallCompletionRoutine$14$label_20#1:
- goto inline$CallCompletionRoutine$14$label_20_icall_1#1, inline$CallCompletionRoutine$14$label_20_icall_2#1, inline$CallCompletionRoutine$14$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$14$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$14$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$14$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$14$Entry#1:
- inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$14$start#1;
-
- inline$BDLSystemPowerIoCompletion$14$start#1:
- call inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$14$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_4#1:
- inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_6#1:
- inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$14$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$14$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$14$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$78$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$78$Entry#1:
- inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$78$start#1;
-
- inline$IoGetCurrentIrpStackLocation$78$start#1:
- inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$78$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$78$label_3_true#1, inline$IoGetCurrentIrpStackLocation$78$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$78$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$78$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$78$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$78$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$78$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$78$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$78$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$78$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$78$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$78$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$78$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$78$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$78$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$78$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$78$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$78$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$78$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$78$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$78$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$78$Return#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon36_Then#1, inline$BDLSystemPowerIoCompletion$14$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_15#1:
- goto inline$BDLGetDebugLevel$397$Entry#1;
-
- inline$BDLGetDebugLevel$397$Entry#1:
- goto inline$BDLGetDebugLevel$397$start#1;
-
- inline$BDLGetDebugLevel$397$start#1:
- goto inline$BDLGetDebugLevel$397$label_3#1;
-
- inline$BDLGetDebugLevel$397$label_3#1:
- havoc inline$BDLGetDebugLevel$397$myNondetVar_0;
- inline$BDLGetDebugLevel$397$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$397$myNondetVar_0;
- goto inline$BDLGetDebugLevel$397$label_1#1;
-
- inline$BDLGetDebugLevel$397$label_1#1:
- goto inline$BDLGetDebugLevel$397$Return#1;
-
- inline$BDLGetDebugLevel$397$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$397$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon37_Then#1, inline$BDLSystemPowerIoCompletion$14$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_18_true#1, inline$BDLSystemPowerIoCompletion$14$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_22#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_23#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_24#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$14$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_19#1:
- goto inline$BDLGetDebugLevel$398$Entry#1;
-
- inline$BDLGetDebugLevel$398$Entry#1:
- goto inline$BDLGetDebugLevel$398$start#1;
-
- inline$BDLGetDebugLevel$398$start#1:
- goto inline$BDLGetDebugLevel$398$label_3#1;
-
- inline$BDLGetDebugLevel$398$label_3#1:
- havoc inline$BDLGetDebugLevel$398$myNondetVar_0;
- inline$BDLGetDebugLevel$398$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$398$myNondetVar_0;
- goto inline$BDLGetDebugLevel$398$label_1#1;
-
- inline$BDLGetDebugLevel$398$label_1#1:
- goto inline$BDLGetDebugLevel$398$Return#1;
-
- inline$BDLGetDebugLevel$398$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$398$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon38_Then#1, inline$BDLSystemPowerIoCompletion$14$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_28_true#1, inline$BDLSystemPowerIoCompletion$14$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_32#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_33#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_34#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$14$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_29#1:
- goto inline$BDLGetDebugLevel$399$Entry#1;
-
- inline$BDLGetDebugLevel$399$Entry#1:
- goto inline$BDLGetDebugLevel$399$start#1;
-
- inline$BDLGetDebugLevel$399$start#1:
- goto inline$BDLGetDebugLevel$399$label_3#1;
-
- inline$BDLGetDebugLevel$399$label_3#1:
- havoc inline$BDLGetDebugLevel$399$myNondetVar_0;
- inline$BDLGetDebugLevel$399$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$399$myNondetVar_0;
- goto inline$BDLGetDebugLevel$399$label_1#1;
-
- inline$BDLGetDebugLevel$399$label_1#1:
- goto inline$BDLGetDebugLevel$399$Return#1;
-
- inline$BDLGetDebugLevel$399$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$399$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon39_Then#1, inline$BDLSystemPowerIoCompletion$14$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_38_true#1, inline$BDLSystemPowerIoCompletion$14$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_39_true#1, inline$BDLSystemPowerIoCompletion$14$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$14$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$14$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$14$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_106_true#1, inline$BDLSystemPowerIoCompletion$14$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_142#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_143#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$14$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$14$myNondetVar_0, inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$14$anon50_Then#1, inline$BDLSystemPowerIoCompletion$14$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_112#1:
- inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$14$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_113_true#1, inline$BDLSystemPowerIoCompletion$14$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$14$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_117#1:
- goto inline$BDLGetDebugLevel$406$Entry#1;
-
- inline$BDLGetDebugLevel$406$Entry#1:
- goto inline$BDLGetDebugLevel$406$start#1;
-
- inline$BDLGetDebugLevel$406$start#1:
- goto inline$BDLGetDebugLevel$406$label_3#1;
-
- inline$BDLGetDebugLevel$406$label_3#1:
- havoc inline$BDLGetDebugLevel$406$myNondetVar_0;
- inline$BDLGetDebugLevel$406$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$406$myNondetVar_0;
- goto inline$BDLGetDebugLevel$406$label_1#1;
-
- inline$BDLGetDebugLevel$406$label_1#1:
- goto inline$BDLGetDebugLevel$406$Return#1;
-
- inline$BDLGetDebugLevel$406$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$406$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon51_Then#1, inline$BDLSystemPowerIoCompletion$14$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_120_true#1, inline$BDLSystemPowerIoCompletion$14$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_124#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_125#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_126#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$14$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_121#1:
- goto inline$BDLGetDebugLevel$407$Entry#1;
-
- inline$BDLGetDebugLevel$407$Entry#1:
- goto inline$BDLGetDebugLevel$407$start#1;
-
- inline$BDLGetDebugLevel$407$start#1:
- goto inline$BDLGetDebugLevel$407$label_3#1;
-
- inline$BDLGetDebugLevel$407$label_3#1:
- havoc inline$BDLGetDebugLevel$407$myNondetVar_0;
- inline$BDLGetDebugLevel$407$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$407$myNondetVar_0;
- goto inline$BDLGetDebugLevel$407$label_1#1;
-
- inline$BDLGetDebugLevel$407$label_1#1:
- goto inline$BDLGetDebugLevel$407$Return#1;
-
- inline$BDLGetDebugLevel$407$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$407$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon52_Then#1, inline$BDLSystemPowerIoCompletion$14$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_130_true#1, inline$BDLSystemPowerIoCompletion$14$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_134#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_135#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_136#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$14$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_131#1:
- goto inline$BDLGetDebugLevel$408$Entry#1;
-
- inline$BDLGetDebugLevel$408$Entry#1:
- goto inline$BDLGetDebugLevel$408$start#1;
-
- inline$BDLGetDebugLevel$408$start#1:
- goto inline$BDLGetDebugLevel$408$label_3#1;
-
- inline$BDLGetDebugLevel$408$label_3#1:
- havoc inline$BDLGetDebugLevel$408$myNondetVar_0;
- inline$BDLGetDebugLevel$408$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$408$myNondetVar_0;
- goto inline$BDLGetDebugLevel$408$label_1#1;
-
- inline$BDLGetDebugLevel$408$label_1#1:
- goto inline$BDLGetDebugLevel$408$Return#1;
-
- inline$BDLGetDebugLevel$408$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$408$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon53_Then#1, inline$BDLSystemPowerIoCompletion$14$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_140_true#1, inline$BDLSystemPowerIoCompletion$14$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$14$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_115#1:
- inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$14$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$14$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_43#1:
- goto inline$BDLGetDebugLevel$400$Entry#1;
-
- inline$BDLGetDebugLevel$400$Entry#1:
- goto inline$BDLGetDebugLevel$400$start#1;
-
- inline$BDLGetDebugLevel$400$start#1:
- goto inline$BDLGetDebugLevel$400$label_3#1;
-
- inline$BDLGetDebugLevel$400$label_3#1:
- havoc inline$BDLGetDebugLevel$400$myNondetVar_0;
- inline$BDLGetDebugLevel$400$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$400$myNondetVar_0;
- goto inline$BDLGetDebugLevel$400$label_1#1;
-
- inline$BDLGetDebugLevel$400$label_1#1:
- goto inline$BDLGetDebugLevel$400$Return#1;
-
- inline$BDLGetDebugLevel$400$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$400$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon40_Then#1, inline$BDLSystemPowerIoCompletion$14$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_46_true#1, inline$BDLSystemPowerIoCompletion$14$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_50#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_51#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_52#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$14$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_47#1:
- goto inline$BDLGetDebugLevel$401$Entry#1;
-
- inline$BDLGetDebugLevel$401$Entry#1:
- goto inline$BDLGetDebugLevel$401$start#1;
-
- inline$BDLGetDebugLevel$401$start#1:
- goto inline$BDLGetDebugLevel$401$label_3#1;
-
- inline$BDLGetDebugLevel$401$label_3#1:
- havoc inline$BDLGetDebugLevel$401$myNondetVar_0;
- inline$BDLGetDebugLevel$401$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$401$myNondetVar_0;
- goto inline$BDLGetDebugLevel$401$label_1#1;
-
- inline$BDLGetDebugLevel$401$label_1#1:
- goto inline$BDLGetDebugLevel$401$Return#1;
-
- inline$BDLGetDebugLevel$401$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$401$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon41_Then#1, inline$BDLSystemPowerIoCompletion$14$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_56_true#1, inline$BDLSystemPowerIoCompletion$14$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_60#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_61#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_62#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$14$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_57#1:
- goto inline$BDLGetDebugLevel$402$Entry#1;
-
- inline$BDLGetDebugLevel$402$Entry#1:
- goto inline$BDLGetDebugLevel$402$start#1;
-
- inline$BDLGetDebugLevel$402$start#1:
- goto inline$BDLGetDebugLevel$402$label_3#1;
-
- inline$BDLGetDebugLevel$402$label_3#1:
- havoc inline$BDLGetDebugLevel$402$myNondetVar_0;
- inline$BDLGetDebugLevel$402$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$402$myNondetVar_0;
- goto inline$BDLGetDebugLevel$402$label_1#1;
-
- inline$BDLGetDebugLevel$402$label_1#1:
- goto inline$BDLGetDebugLevel$402$Return#1;
-
- inline$BDLGetDebugLevel$402$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$402$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon42_Then#1, inline$BDLSystemPowerIoCompletion$14$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_66_true#1, inline$BDLSystemPowerIoCompletion$14$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$14$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$14$anon43_Then#1, inline$BDLSystemPowerIoCompletion$14$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$14$anon44_Then#1, inline$BDLSystemPowerIoCompletion$14$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_74#1:
- goto inline$storm_IoCompleteRequest$30$Entry#1;
-
- inline$storm_IoCompleteRequest$30$Entry#1:
- inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$30$start#1;
-
- inline$storm_IoCompleteRequest$30$start#1:
- inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$30$label_3#1;
-
- inline$storm_IoCompleteRequest$30$label_3#1:
- call inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$30$label_6#1;
-
- inline$storm_IoCompleteRequest$30$label_6#1:
- goto inline$storm_IoCompleteRequest$30$label_6_true#1, inline$storm_IoCompleteRequest$30$label_6_false#1;
-
- inline$storm_IoCompleteRequest$30$label_6_false#1:
- assume inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$30$label_7#1;
-
- inline$storm_IoCompleteRequest$30$label_6_true#1:
- assume inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$30$label_8#1;
-
- inline$storm_IoCompleteRequest$30$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$30$anon3_Then#1, inline$storm_IoCompleteRequest$30$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$30$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$30$anon1#1;
-
- inline$storm_IoCompleteRequest$30$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$30$label_9#1;
-
- inline$storm_IoCompleteRequest$30$label_9#1:
- goto inline$storm_IoCompleteRequest$30$label_9_true#1, inline$storm_IoCompleteRequest$30$label_9_false#1;
-
- inline$storm_IoCompleteRequest$30$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$30$label_10#1;
-
- inline$storm_IoCompleteRequest$30$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$30$label_1#1;
-
- inline$storm_IoCompleteRequest$30$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$30$label_7#1;
-
- inline$storm_IoCompleteRequest$30$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$30$label_1#1;
-
- inline$storm_IoCompleteRequest$30$label_1#1:
- goto inline$storm_IoCompleteRequest$30$Return#1;
-
- inline$storm_IoCompleteRequest$30$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$30$Return#1;
-
- inline$storm_IoCompleteRequest$30$Return#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon45_Then#1, inline$BDLSystemPowerIoCompletion$14$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$14$anon46_Then#1, inline$BDLSystemPowerIoCompletion$14$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_80#1:
- goto inline$BDLGetDebugLevel$403$Entry#1;
-
- inline$BDLGetDebugLevel$403$Entry#1:
- goto inline$BDLGetDebugLevel$403$start#1;
-
- inline$BDLGetDebugLevel$403$start#1:
- goto inline$BDLGetDebugLevel$403$label_3#1;
-
- inline$BDLGetDebugLevel$403$label_3#1:
- havoc inline$BDLGetDebugLevel$403$myNondetVar_0;
- inline$BDLGetDebugLevel$403$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$403$myNondetVar_0;
- goto inline$BDLGetDebugLevel$403$label_1#1;
-
- inline$BDLGetDebugLevel$403$label_1#1:
- goto inline$BDLGetDebugLevel$403$Return#1;
-
- inline$BDLGetDebugLevel$403$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$403$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon47_Then#1, inline$BDLSystemPowerIoCompletion$14$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_83_true#1, inline$BDLSystemPowerIoCompletion$14$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_87#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_88#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_89#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$14$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_84#1:
- goto inline$BDLGetDebugLevel$404$Entry#1;
-
- inline$BDLGetDebugLevel$404$Entry#1:
- goto inline$BDLGetDebugLevel$404$start#1;
-
- inline$BDLGetDebugLevel$404$start#1:
- goto inline$BDLGetDebugLevel$404$label_3#1;
-
- inline$BDLGetDebugLevel$404$label_3#1:
- havoc inline$BDLGetDebugLevel$404$myNondetVar_0;
- inline$BDLGetDebugLevel$404$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$404$myNondetVar_0;
- goto inline$BDLGetDebugLevel$404$label_1#1;
-
- inline$BDLGetDebugLevel$404$label_1#1:
- goto inline$BDLGetDebugLevel$404$Return#1;
-
- inline$BDLGetDebugLevel$404$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$404$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon48_Then#1, inline$BDLSystemPowerIoCompletion$14$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_93_true#1, inline$BDLSystemPowerIoCompletion$14$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_97#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_98#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_99#1:
- call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$14$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$14$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_94#1:
- goto inline$BDLGetDebugLevel$405$Entry#1;
-
- inline$BDLGetDebugLevel$405$Entry#1:
- goto inline$BDLGetDebugLevel$405$start#1;
-
- inline$BDLGetDebugLevel$405$start#1:
- goto inline$BDLGetDebugLevel$405$label_3#1;
-
- inline$BDLGetDebugLevel$405$label_3#1:
- havoc inline$BDLGetDebugLevel$405$myNondetVar_0;
- inline$BDLGetDebugLevel$405$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$405$myNondetVar_0;
- goto inline$BDLGetDebugLevel$405$label_1#1;
-
- inline$BDLGetDebugLevel$405$label_1#1:
- goto inline$BDLGetDebugLevel$405$Return#1;
-
- inline$BDLGetDebugLevel$405$Return#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$405$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$14$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$14$anon49_Then#1, inline$BDLSystemPowerIoCompletion$14$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_103_true#1, inline$BDLSystemPowerIoCompletion$14$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$14$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$14$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_104#1:
- inline$BDLSystemPowerIoCompletion$14$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$14$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$14$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$14$Return#1;
-
- inline$BDLSystemPowerIoCompletion$14$Return#1:
- inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$14$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$14$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$14$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$14$anon14_Then#1, inline$CallCompletionRoutine$14$anon14_Else#1;
-
- inline$CallCompletionRoutine$14$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$14$anon9#1;
-
- inline$CallCompletionRoutine$14$anon9#1:
- goto inline$CallCompletionRoutine$14$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$14$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$14$Return#1;
-
- inline$CallCompletionRoutine$14$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$14$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$14$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$14$Entry#1:
- inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$14$start#1;
-
- inline$BDLDevicePowerIoCompletion$14$start#1:
- call inline$BDLDevicePowerIoCompletion$14$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$14$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_4#1:
- inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_6#1:
- inline$BDLDevicePowerIoCompletion$14$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$14$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$14$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$14$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$77$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$77$Entry#1:
- inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$77$start#1;
-
- inline$IoGetCurrentIrpStackLocation$77$start#1:
- inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$77$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$77$label_3_true#1, inline$IoGetCurrentIrpStackLocation$77$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$77$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$77$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$77$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$77$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$77$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$77$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$77$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$77$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$77$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$77$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$77$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$77$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$77$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$77$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$77$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$77$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$77$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$77$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$77$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$77$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$77$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$77$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$77$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon30_Then#1, inline$BDLDevicePowerIoCompletion$14$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_13#1:
- inline$BDLDevicePowerIoCompletion$14$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$14$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$14$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_17#1:
- goto inline$BDLGetDebugLevel$388$Entry#1;
-
- inline$BDLGetDebugLevel$388$Entry#1:
- goto inline$BDLGetDebugLevel$388$start#1;
-
- inline$BDLGetDebugLevel$388$start#1:
- goto inline$BDLGetDebugLevel$388$label_3#1;
-
- inline$BDLGetDebugLevel$388$label_3#1:
- havoc inline$BDLGetDebugLevel$388$myNondetVar_0;
- inline$BDLGetDebugLevel$388$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$388$myNondetVar_0;
- goto inline$BDLGetDebugLevel$388$label_1#1;
-
- inline$BDLGetDebugLevel$388$label_1#1:
- goto inline$BDLGetDebugLevel$388$Return#1;
-
- inline$BDLGetDebugLevel$388$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$388$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon31_Then#1, inline$BDLDevicePowerIoCompletion$14$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_20_true#1, inline$BDLDevicePowerIoCompletion$14$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_24#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_25#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_26#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$14$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_21#1:
- goto inline$BDLGetDebugLevel$389$Entry#1;
-
- inline$BDLGetDebugLevel$389$Entry#1:
- goto inline$BDLGetDebugLevel$389$start#1;
-
- inline$BDLGetDebugLevel$389$start#1:
- goto inline$BDLGetDebugLevel$389$label_3#1;
-
- inline$BDLGetDebugLevel$389$label_3#1:
- havoc inline$BDLGetDebugLevel$389$myNondetVar_0;
- inline$BDLGetDebugLevel$389$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$389$myNondetVar_0;
- goto inline$BDLGetDebugLevel$389$label_1#1;
-
- inline$BDLGetDebugLevel$389$label_1#1:
- goto inline$BDLGetDebugLevel$389$Return#1;
-
- inline$BDLGetDebugLevel$389$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$389$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon32_Then#1, inline$BDLDevicePowerIoCompletion$14$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_30_true#1, inline$BDLDevicePowerIoCompletion$14$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_34#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_35#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_36#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$14$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_31#1:
- goto inline$BDLGetDebugLevel$390$Entry#1;
-
- inline$BDLGetDebugLevel$390$Entry#1:
- goto inline$BDLGetDebugLevel$390$start#1;
-
- inline$BDLGetDebugLevel$390$start#1:
- goto inline$BDLGetDebugLevel$390$label_3#1;
-
- inline$BDLGetDebugLevel$390$label_3#1:
- havoc inline$BDLGetDebugLevel$390$myNondetVar_0;
- inline$BDLGetDebugLevel$390$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$390$myNondetVar_0;
- goto inline$BDLGetDebugLevel$390$label_1#1;
-
- inline$BDLGetDebugLevel$390$label_1#1:
- goto inline$BDLGetDebugLevel$390$Return#1;
-
- inline$BDLGetDebugLevel$390$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$390$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon33_Then#1, inline$BDLDevicePowerIoCompletion$14$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_40_true#1, inline$BDLDevicePowerIoCompletion$14$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_41_true#1, inline$BDLDevicePowerIoCompletion$14$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$14$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$14$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_44_true#1, inline$BDLDevicePowerIoCompletion$14$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$14$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_45_true#1, inline$BDLDevicePowerIoCompletion$14$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$14$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$14$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$14$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$14$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$14$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$14$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_54#1:
- inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$14$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_55_true#1, inline$BDLDevicePowerIoCompletion$14$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_56#1:
- call inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$14$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$14$anon34_Then#1, inline$BDLDevicePowerIoCompletion$14$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_59#1:
- goto inline$BDLGetDebugLevel$391$Entry#1;
-
- inline$BDLGetDebugLevel$391$Entry#1:
- goto inline$BDLGetDebugLevel$391$start#1;
-
- inline$BDLGetDebugLevel$391$start#1:
- goto inline$BDLGetDebugLevel$391$label_3#1;
-
- inline$BDLGetDebugLevel$391$label_3#1:
- havoc inline$BDLGetDebugLevel$391$myNondetVar_0;
- inline$BDLGetDebugLevel$391$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$391$myNondetVar_0;
- goto inline$BDLGetDebugLevel$391$label_1#1;
-
- inline$BDLGetDebugLevel$391$label_1#1:
- goto inline$BDLGetDebugLevel$391$Return#1;
-
- inline$BDLGetDebugLevel$391$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$391$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon35_Then#1, inline$BDLDevicePowerIoCompletion$14$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_62_true#1, inline$BDLDevicePowerIoCompletion$14$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_66#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_67#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_68#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$14$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_63#1:
- goto inline$BDLGetDebugLevel$392$Entry#1;
-
- inline$BDLGetDebugLevel$392$Entry#1:
- goto inline$BDLGetDebugLevel$392$start#1;
-
- inline$BDLGetDebugLevel$392$start#1:
- goto inline$BDLGetDebugLevel$392$label_3#1;
-
- inline$BDLGetDebugLevel$392$label_3#1:
- havoc inline$BDLGetDebugLevel$392$myNondetVar_0;
- inline$BDLGetDebugLevel$392$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$392$myNondetVar_0;
- goto inline$BDLGetDebugLevel$392$label_1#1;
-
- inline$BDLGetDebugLevel$392$label_1#1:
- goto inline$BDLGetDebugLevel$392$Return#1;
-
- inline$BDLGetDebugLevel$392$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$392$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon36_Then#1, inline$BDLDevicePowerIoCompletion$14$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_72_true#1, inline$BDLDevicePowerIoCompletion$14$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_76#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_77#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_78#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$14$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_73#1:
- goto inline$BDLGetDebugLevel$393$Entry#1;
-
- inline$BDLGetDebugLevel$393$Entry#1:
- goto inline$BDLGetDebugLevel$393$start#1;
-
- inline$BDLGetDebugLevel$393$start#1:
- goto inline$BDLGetDebugLevel$393$label_3#1;
-
- inline$BDLGetDebugLevel$393$label_3#1:
- havoc inline$BDLGetDebugLevel$393$myNondetVar_0;
- inline$BDLGetDebugLevel$393$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$393$myNondetVar_0;
- goto inline$BDLGetDebugLevel$393$label_1#1;
-
- inline$BDLGetDebugLevel$393$label_1#1:
- goto inline$BDLGetDebugLevel$393$Return#1;
-
- inline$BDLGetDebugLevel$393$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$393$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon37_Then#1, inline$BDLDevicePowerIoCompletion$14$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_82_true#1, inline$BDLDevicePowerIoCompletion$14$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$14$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$14$anon38_Then#1, inline$BDLDevicePowerIoCompletion$14$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$14$anon39_Then#1, inline$BDLDevicePowerIoCompletion$14$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_92#1:
- goto inline$storm_IoCompleteRequest$29$Entry#1;
-
- inline$storm_IoCompleteRequest$29$Entry#1:
- inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$29$start#1;
-
- inline$storm_IoCompleteRequest$29$start#1:
- inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$29$label_3#1;
-
- inline$storm_IoCompleteRequest$29$label_3#1:
- call inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$29$label_6#1;
-
- inline$storm_IoCompleteRequest$29$label_6#1:
- goto inline$storm_IoCompleteRequest$29$label_6_true#1, inline$storm_IoCompleteRequest$29$label_6_false#1;
-
- inline$storm_IoCompleteRequest$29$label_6_false#1:
- assume inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$29$label_7#1;
-
- inline$storm_IoCompleteRequest$29$label_6_true#1:
- assume inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$29$label_8#1;
-
- inline$storm_IoCompleteRequest$29$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$29$anon3_Then#1, inline$storm_IoCompleteRequest$29$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$29$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$29$anon1#1;
-
- inline$storm_IoCompleteRequest$29$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$29$label_9#1;
-
- inline$storm_IoCompleteRequest$29$label_9#1:
- goto inline$storm_IoCompleteRequest$29$label_9_true#1, inline$storm_IoCompleteRequest$29$label_9_false#1;
-
- inline$storm_IoCompleteRequest$29$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$29$label_10#1;
-
- inline$storm_IoCompleteRequest$29$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$29$label_1#1;
-
- inline$storm_IoCompleteRequest$29$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$29$label_7#1;
-
- inline$storm_IoCompleteRequest$29$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$29$label_1#1;
-
- inline$storm_IoCompleteRequest$29$label_1#1:
- goto inline$storm_IoCompleteRequest$29$Return#1;
-
- inline$storm_IoCompleteRequest$29$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$29$Return#1;
-
- inline$storm_IoCompleteRequest$29$Return#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon40_Then#1, inline$BDLDevicePowerIoCompletion$14$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$14$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$14$anon41_Then#1, inline$BDLDevicePowerIoCompletion$14$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_98#1:
- goto inline$BDLGetDebugLevel$394$Entry#1;
-
- inline$BDLGetDebugLevel$394$Entry#1:
- goto inline$BDLGetDebugLevel$394$start#1;
-
- inline$BDLGetDebugLevel$394$start#1:
- goto inline$BDLGetDebugLevel$394$label_3#1;
-
- inline$BDLGetDebugLevel$394$label_3#1:
- havoc inline$BDLGetDebugLevel$394$myNondetVar_0;
- inline$BDLGetDebugLevel$394$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$394$myNondetVar_0;
- goto inline$BDLGetDebugLevel$394$label_1#1;
-
- inline$BDLGetDebugLevel$394$label_1#1:
- goto inline$BDLGetDebugLevel$394$Return#1;
-
- inline$BDLGetDebugLevel$394$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$394$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon42_Then#1, inline$BDLDevicePowerIoCompletion$14$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_101_true#1, inline$BDLDevicePowerIoCompletion$14$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_105#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_106#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_107#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$14$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_102#1:
- goto inline$BDLGetDebugLevel$395$Entry#1;
-
- inline$BDLGetDebugLevel$395$Entry#1:
- goto inline$BDLGetDebugLevel$395$start#1;
-
- inline$BDLGetDebugLevel$395$start#1:
- goto inline$BDLGetDebugLevel$395$label_3#1;
-
- inline$BDLGetDebugLevel$395$label_3#1:
- havoc inline$BDLGetDebugLevel$395$myNondetVar_0;
- inline$BDLGetDebugLevel$395$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$395$myNondetVar_0;
- goto inline$BDLGetDebugLevel$395$label_1#1;
-
- inline$BDLGetDebugLevel$395$label_1#1:
- goto inline$BDLGetDebugLevel$395$Return#1;
-
- inline$BDLGetDebugLevel$395$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$395$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon43_Then#1, inline$BDLDevicePowerIoCompletion$14$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_111_true#1, inline$BDLDevicePowerIoCompletion$14$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_115#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_116#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_117#1:
- call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$14$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$14$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_112#1:
- goto inline$BDLGetDebugLevel$396$Entry#1;
-
- inline$BDLGetDebugLevel$396$Entry#1:
- goto inline$BDLGetDebugLevel$396$start#1;
-
- inline$BDLGetDebugLevel$396$start#1:
- goto inline$BDLGetDebugLevel$396$label_3#1;
-
- inline$BDLGetDebugLevel$396$label_3#1:
- havoc inline$BDLGetDebugLevel$396$myNondetVar_0;
- inline$BDLGetDebugLevel$396$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$396$myNondetVar_0;
- goto inline$BDLGetDebugLevel$396$label_1#1;
-
- inline$BDLGetDebugLevel$396$label_1#1:
- goto inline$BDLGetDebugLevel$396$Return#1;
-
- inline$BDLGetDebugLevel$396$Return#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$396$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$14$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$14$anon44_Then#1, inline$BDLDevicePowerIoCompletion$14$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_121_true#1, inline$BDLDevicePowerIoCompletion$14$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$14$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$14$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_122#1:
- inline$BDLDevicePowerIoCompletion$14$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$14$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$14$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$14$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$14$Return#1;
-
- inline$BDLDevicePowerIoCompletion$14$Return#1:
- inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$14$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$14$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$14$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$14$anon13_Then#1, inline$CallCompletionRoutine$14$anon13_Else#1;
-
- inline$CallCompletionRoutine$14$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$14$anon7#1;
-
- inline$CallCompletionRoutine$14$anon7#1:
- goto inline$CallCompletionRoutine$14$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$14$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$14$Return#1;
-
- inline$CallCompletionRoutine$14$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$14$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$14$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$14$Entry#1:
- inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$14$start#1;
-
- inline$BDLCallDriverCompletionRoutine$14$start#1:
- inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$14$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$14$label_3_true#1, inline$BDLCallDriverCompletionRoutine$14$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$14$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$14$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$14$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$14$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_6#1:
- goto inline$storm_KeSetEvent$16$Entry#1;
-
- inline$storm_KeSetEvent$16$Entry#1:
- inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$16$start#1;
-
- inline$storm_KeSetEvent$16$start#1:
- inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$16$label_3#1;
-
- inline$storm_KeSetEvent$16$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$16$label_1#1;
-
- inline$storm_KeSetEvent$16$label_1#1:
- goto inline$storm_KeSetEvent$16$Return#1;
-
- inline$storm_KeSetEvent$16$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$14$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$14$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$14$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$14$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$14$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$14$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$14$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_9#1:
- inline$BDLCallDriverCompletionRoutine$14$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$14$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$14$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$14$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$14$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$14$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$14$Return#1:
- inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$14$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$14$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$14$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$14$anon12_Then#1, inline$CallCompletionRoutine$14$anon12_Else#1;
-
- inline$CallCompletionRoutine$14$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$14$anon5#1;
-
- inline$CallCompletionRoutine$14$anon5#1:
- goto inline$CallCompletionRoutine$14$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$14$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$14$label_23#1;
-
- inline$CallCompletionRoutine$14$label_23#1:
- inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$14$label_24#1;
-
- inline$CallCompletionRoutine$14$label_24#1:
- goto inline$CallCompletionRoutine$14$label_24_true#1, inline$CallCompletionRoutine$14$label_24_false#1;
-
- inline$CallCompletionRoutine$14$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$14$label_1#1;
-
- inline$CallCompletionRoutine$14$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$14$label_25#1;
-
- inline$CallCompletionRoutine$14$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$14$label_1#1;
-
- inline$CallCompletionRoutine$14$label_1#1:
- goto inline$CallCompletionRoutine$14$Return#1;
-
- inline$CallCompletionRoutine$14$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$14$Return#1;
-
- inline$CallCompletionRoutine$14$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$14$Return#1;
-
- inline$CallCompletionRoutine$14$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$14$Return#1;
-
- inline$CallCompletionRoutine$14$Return#1:
- goto inline$storm_IoCallDriver$7$label_33$1#1;
-
- inline$storm_IoCallDriver$7$label_33$1#1:
- goto inline$storm_IoCallDriver$7$anon14_Then#1, inline$storm_IoCallDriver$7$anon14_Else#1;
-
- inline$storm_IoCallDriver$7$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$7$anon8#1;
-
- inline$storm_IoCallDriver$7$anon8#1:
- goto inline$storm_IoCallDriver$7$label_36#1;
-
- inline$storm_IoCallDriver$7$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$7$Return#1;
-
- inline$storm_IoCallDriver$7$label_27_case_1#1:
- assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$7$label_29#1;
-
- inline$storm_IoCallDriver$7$label_29#1:
- inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$7$label_37#1;
-
- inline$storm_IoCallDriver$7$label_37#1:
- goto inline$storm_IoCallDriver$7$label_38#1;
-
- inline$storm_IoCallDriver$7$label_38#1:
- goto inline$storm_IoCallDriver$7$label_39#1;
-
- inline$storm_IoCallDriver$7$label_39#1:
- goto inline$CallCompletionRoutine$15$Entry#1;
-
- inline$CallCompletionRoutine$15$Entry#1:
- inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$15$start#1;
-
- inline$CallCompletionRoutine$15$start#1:
- inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$15$label_3#1;
-
- inline$CallCompletionRoutine$15$label_3#1:
- goto inline$CallCompletionRoutine$15$label_4#1;
-
- inline$CallCompletionRoutine$15$label_4#1:
- goto inline$CallCompletionRoutine$15$label_5#1;
-
- inline$CallCompletionRoutine$15$label_5#1:
- goto inline$CallCompletionRoutine$15$label_6#1;
-
- inline$CallCompletionRoutine$15$label_6#1:
- goto inline$CallCompletionRoutine$15$label_7#1;
-
- inline$CallCompletionRoutine$15$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$79$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$79$Entry#1:
- inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$79$start#1;
-
- inline$IoGetCurrentIrpStackLocation$79$start#1:
- inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$79$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$79$label_3_true#1, inline$IoGetCurrentIrpStackLocation$79$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$79$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$79$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$79$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$79$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$79$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$79$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$79$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$79$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$79$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$79$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$79$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$79$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$79$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$79$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$79$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$79$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$79$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$79$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$79$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$79$Return#1:
- goto inline$CallCompletionRoutine$15$label_7$1#1;
-
- inline$CallCompletionRoutine$15$label_7$1#1:
- goto inline$CallCompletionRoutine$15$anon10_Then#1, inline$CallCompletionRoutine$15$anon10_Else#1;
-
- inline$CallCompletionRoutine$15$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$15$anon1#1;
-
- inline$CallCompletionRoutine$15$anon1#1:
- goto inline$CallCompletionRoutine$15$label_10#1;
-
- inline$CallCompletionRoutine$15$label_10#1:
- goto inline$CallCompletionRoutine$15$label_11#1;
-
- inline$CallCompletionRoutine$15$label_11#1:
- havoc inline$CallCompletionRoutine$15$myNondetVar_0;
- inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$myNondetVar_0;
- goto inline$CallCompletionRoutine$15$label_12#1;
-
- inline$CallCompletionRoutine$15$label_12#1:
- havoc inline$CallCompletionRoutine$15$myNondetVar_0;
- inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$myNondetVar_0;
- goto inline$CallCompletionRoutine$15$label_13#1;
-
- inline$CallCompletionRoutine$15$label_13#1:
- havoc inline$CallCompletionRoutine$15$myNondetVar_0;
- goto inline$CallCompletionRoutine$15$label_14#1;
-
- inline$CallCompletionRoutine$15$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$80$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$80$Entry#1:
- inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$80$start#1;
-
- inline$IoGetCurrentIrpStackLocation$80$start#1:
- inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$80$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$80$label_3_true#1, inline$IoGetCurrentIrpStackLocation$80$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$80$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$80$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$80$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$80$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$80$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$80$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$80$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$80$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$80$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$80$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$80$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$80$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$80$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$80$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$80$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$80$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$80$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$80$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$80$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$80$Return#1:
- goto inline$CallCompletionRoutine$15$label_14$1#1;
-
- inline$CallCompletionRoutine$15$label_14$1#1:
- goto inline$CallCompletionRoutine$15$anon11_Then#1, inline$CallCompletionRoutine$15$anon11_Else#1;
-
- inline$CallCompletionRoutine$15$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$15$anon3#1;
-
- inline$CallCompletionRoutine$15$anon3#1:
- goto inline$CallCompletionRoutine$15$label_17#1;
-
- inline$CallCompletionRoutine$15$label_17#1:
- goto inline$CallCompletionRoutine$15$label_18#1;
-
- inline$CallCompletionRoutine$15$label_18#1:
- goto inline$CallCompletionRoutine$15$label_18_true#1, inline$CallCompletionRoutine$15$label_18_false#1;
-
- inline$CallCompletionRoutine$15$label_18_false#1:
- assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$15$label_1#1;
-
- inline$CallCompletionRoutine$15$label_18_true#1:
- assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$15$label_19#1;
-
- inline$CallCompletionRoutine$15$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$15$label_20#1;
-
- inline$CallCompletionRoutine$15$label_20#1:
- goto inline$CallCompletionRoutine$15$label_20_icall_1#1, inline$CallCompletionRoutine$15$label_20_icall_2#1, inline$CallCompletionRoutine$15$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$15$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$15$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$15$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$15$Entry#1:
- inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$15$start#1;
-
- inline$BDLSystemPowerIoCompletion$15$start#1:
- call inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$15$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_4#1:
- inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_6#1:
- inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$15$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$15$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$15$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$82$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$82$Entry#1:
- inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$82$start#1;
-
- inline$IoGetCurrentIrpStackLocation$82$start#1:
- inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$82$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$82$label_3_true#1, inline$IoGetCurrentIrpStackLocation$82$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$82$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$82$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$82$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$82$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$82$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$82$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$82$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$82$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$82$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$82$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$82$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$82$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$82$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$82$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$82$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$82$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$82$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$82$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$82$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$82$Return#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon36_Then#1, inline$BDLSystemPowerIoCompletion$15$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_15#1:
- goto inline$BDLGetDebugLevel$418$Entry#1;
-
- inline$BDLGetDebugLevel$418$Entry#1:
- goto inline$BDLGetDebugLevel$418$start#1;
-
- inline$BDLGetDebugLevel$418$start#1:
- goto inline$BDLGetDebugLevel$418$label_3#1;
-
- inline$BDLGetDebugLevel$418$label_3#1:
- havoc inline$BDLGetDebugLevel$418$myNondetVar_0;
- inline$BDLGetDebugLevel$418$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$418$myNondetVar_0;
- goto inline$BDLGetDebugLevel$418$label_1#1;
-
- inline$BDLGetDebugLevel$418$label_1#1:
- goto inline$BDLGetDebugLevel$418$Return#1;
-
- inline$BDLGetDebugLevel$418$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$418$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon37_Then#1, inline$BDLSystemPowerIoCompletion$15$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_18_true#1, inline$BDLSystemPowerIoCompletion$15$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_22#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_23#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_24#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$15$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_19#1:
- goto inline$BDLGetDebugLevel$419$Entry#1;
-
- inline$BDLGetDebugLevel$419$Entry#1:
- goto inline$BDLGetDebugLevel$419$start#1;
-
- inline$BDLGetDebugLevel$419$start#1:
- goto inline$BDLGetDebugLevel$419$label_3#1;
-
- inline$BDLGetDebugLevel$419$label_3#1:
- havoc inline$BDLGetDebugLevel$419$myNondetVar_0;
- inline$BDLGetDebugLevel$419$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$419$myNondetVar_0;
- goto inline$BDLGetDebugLevel$419$label_1#1;
-
- inline$BDLGetDebugLevel$419$label_1#1:
- goto inline$BDLGetDebugLevel$419$Return#1;
-
- inline$BDLGetDebugLevel$419$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$419$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon38_Then#1, inline$BDLSystemPowerIoCompletion$15$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_28_true#1, inline$BDLSystemPowerIoCompletion$15$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_32#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_33#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_34#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$15$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_29#1:
- goto inline$BDLGetDebugLevel$420$Entry#1;
-
- inline$BDLGetDebugLevel$420$Entry#1:
- goto inline$BDLGetDebugLevel$420$start#1;
-
- inline$BDLGetDebugLevel$420$start#1:
- goto inline$BDLGetDebugLevel$420$label_3#1;
-
- inline$BDLGetDebugLevel$420$label_3#1:
- havoc inline$BDLGetDebugLevel$420$myNondetVar_0;
- inline$BDLGetDebugLevel$420$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$420$myNondetVar_0;
- goto inline$BDLGetDebugLevel$420$label_1#1;
-
- inline$BDLGetDebugLevel$420$label_1#1:
- goto inline$BDLGetDebugLevel$420$Return#1;
-
- inline$BDLGetDebugLevel$420$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$420$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon39_Then#1, inline$BDLSystemPowerIoCompletion$15$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_38_true#1, inline$BDLSystemPowerIoCompletion$15$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_39_true#1, inline$BDLSystemPowerIoCompletion$15$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$15$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$15$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$15$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_106_true#1, inline$BDLSystemPowerIoCompletion$15$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_142#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_143#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$15$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$15$myNondetVar_0, inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$15$anon50_Then#1, inline$BDLSystemPowerIoCompletion$15$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_112#1:
- inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$15$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_113_true#1, inline$BDLSystemPowerIoCompletion$15$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$15$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_117#1:
- goto inline$BDLGetDebugLevel$427$Entry#1;
-
- inline$BDLGetDebugLevel$427$Entry#1:
- goto inline$BDLGetDebugLevel$427$start#1;
-
- inline$BDLGetDebugLevel$427$start#1:
- goto inline$BDLGetDebugLevel$427$label_3#1;
-
- inline$BDLGetDebugLevel$427$label_3#1:
- havoc inline$BDLGetDebugLevel$427$myNondetVar_0;
- inline$BDLGetDebugLevel$427$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$427$myNondetVar_0;
- goto inline$BDLGetDebugLevel$427$label_1#1;
-
- inline$BDLGetDebugLevel$427$label_1#1:
- goto inline$BDLGetDebugLevel$427$Return#1;
-
- inline$BDLGetDebugLevel$427$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$427$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon51_Then#1, inline$BDLSystemPowerIoCompletion$15$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_120_true#1, inline$BDLSystemPowerIoCompletion$15$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_124#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_125#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_126#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$15$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_121#1:
- goto inline$BDLGetDebugLevel$428$Entry#1;
-
- inline$BDLGetDebugLevel$428$Entry#1:
- goto inline$BDLGetDebugLevel$428$start#1;
-
- inline$BDLGetDebugLevel$428$start#1:
- goto inline$BDLGetDebugLevel$428$label_3#1;
-
- inline$BDLGetDebugLevel$428$label_3#1:
- havoc inline$BDLGetDebugLevel$428$myNondetVar_0;
- inline$BDLGetDebugLevel$428$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$428$myNondetVar_0;
- goto inline$BDLGetDebugLevel$428$label_1#1;
-
- inline$BDLGetDebugLevel$428$label_1#1:
- goto inline$BDLGetDebugLevel$428$Return#1;
-
- inline$BDLGetDebugLevel$428$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$428$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon52_Then#1, inline$BDLSystemPowerIoCompletion$15$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_130_true#1, inline$BDLSystemPowerIoCompletion$15$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_134#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_135#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_136#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$15$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_131#1:
- goto inline$BDLGetDebugLevel$429$Entry#1;
-
- inline$BDLGetDebugLevel$429$Entry#1:
- goto inline$BDLGetDebugLevel$429$start#1;
-
- inline$BDLGetDebugLevel$429$start#1:
- goto inline$BDLGetDebugLevel$429$label_3#1;
-
- inline$BDLGetDebugLevel$429$label_3#1:
- havoc inline$BDLGetDebugLevel$429$myNondetVar_0;
- inline$BDLGetDebugLevel$429$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$429$myNondetVar_0;
- goto inline$BDLGetDebugLevel$429$label_1#1;
-
- inline$BDLGetDebugLevel$429$label_1#1:
- goto inline$BDLGetDebugLevel$429$Return#1;
-
- inline$BDLGetDebugLevel$429$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$429$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon53_Then#1, inline$BDLSystemPowerIoCompletion$15$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_140_true#1, inline$BDLSystemPowerIoCompletion$15$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$15$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_115#1:
- inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$15$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$15$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_43#1:
- goto inline$BDLGetDebugLevel$421$Entry#1;
-
- inline$BDLGetDebugLevel$421$Entry#1:
- goto inline$BDLGetDebugLevel$421$start#1;
-
- inline$BDLGetDebugLevel$421$start#1:
- goto inline$BDLGetDebugLevel$421$label_3#1;
-
- inline$BDLGetDebugLevel$421$label_3#1:
- havoc inline$BDLGetDebugLevel$421$myNondetVar_0;
- inline$BDLGetDebugLevel$421$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$421$myNondetVar_0;
- goto inline$BDLGetDebugLevel$421$label_1#1;
-
- inline$BDLGetDebugLevel$421$label_1#1:
- goto inline$BDLGetDebugLevel$421$Return#1;
-
- inline$BDLGetDebugLevel$421$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$421$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon40_Then#1, inline$BDLSystemPowerIoCompletion$15$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_46_true#1, inline$BDLSystemPowerIoCompletion$15$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_50#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_51#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_52#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$15$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_47#1:
- goto inline$BDLGetDebugLevel$422$Entry#1;
-
- inline$BDLGetDebugLevel$422$Entry#1:
- goto inline$BDLGetDebugLevel$422$start#1;
-
- inline$BDLGetDebugLevel$422$start#1:
- goto inline$BDLGetDebugLevel$422$label_3#1;
-
- inline$BDLGetDebugLevel$422$label_3#1:
- havoc inline$BDLGetDebugLevel$422$myNondetVar_0;
- inline$BDLGetDebugLevel$422$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$422$myNondetVar_0;
- goto inline$BDLGetDebugLevel$422$label_1#1;
-
- inline$BDLGetDebugLevel$422$label_1#1:
- goto inline$BDLGetDebugLevel$422$Return#1;
-
- inline$BDLGetDebugLevel$422$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$422$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon41_Then#1, inline$BDLSystemPowerIoCompletion$15$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_56_true#1, inline$BDLSystemPowerIoCompletion$15$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_60#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_61#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_62#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$15$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_57#1:
- goto inline$BDLGetDebugLevel$423$Entry#1;
-
- inline$BDLGetDebugLevel$423$Entry#1:
- goto inline$BDLGetDebugLevel$423$start#1;
-
- inline$BDLGetDebugLevel$423$start#1:
- goto inline$BDLGetDebugLevel$423$label_3#1;
-
- inline$BDLGetDebugLevel$423$label_3#1:
- havoc inline$BDLGetDebugLevel$423$myNondetVar_0;
- inline$BDLGetDebugLevel$423$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$423$myNondetVar_0;
- goto inline$BDLGetDebugLevel$423$label_1#1;
-
- inline$BDLGetDebugLevel$423$label_1#1:
- goto inline$BDLGetDebugLevel$423$Return#1;
-
- inline$BDLGetDebugLevel$423$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$423$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon42_Then#1, inline$BDLSystemPowerIoCompletion$15$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_66_true#1, inline$BDLSystemPowerIoCompletion$15$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$15$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$15$anon43_Then#1, inline$BDLSystemPowerIoCompletion$15$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$15$anon44_Then#1, inline$BDLSystemPowerIoCompletion$15$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_74#1:
- goto inline$storm_IoCompleteRequest$32$Entry#1;
-
- inline$storm_IoCompleteRequest$32$Entry#1:
- inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$32$start#1;
-
- inline$storm_IoCompleteRequest$32$start#1:
- inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$32$label_3#1;
-
- inline$storm_IoCompleteRequest$32$label_3#1:
- call inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$32$label_6#1;
-
- inline$storm_IoCompleteRequest$32$label_6#1:
- goto inline$storm_IoCompleteRequest$32$label_6_true#1, inline$storm_IoCompleteRequest$32$label_6_false#1;
-
- inline$storm_IoCompleteRequest$32$label_6_false#1:
- assume inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$32$label_7#1;
-
- inline$storm_IoCompleteRequest$32$label_6_true#1:
- assume inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$32$label_8#1;
-
- inline$storm_IoCompleteRequest$32$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$32$anon3_Then#1, inline$storm_IoCompleteRequest$32$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$32$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$32$anon1#1;
-
- inline$storm_IoCompleteRequest$32$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$32$label_9#1;
-
- inline$storm_IoCompleteRequest$32$label_9#1:
- goto inline$storm_IoCompleteRequest$32$label_9_true#1, inline$storm_IoCompleteRequest$32$label_9_false#1;
-
- inline$storm_IoCompleteRequest$32$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$32$label_10#1;
-
- inline$storm_IoCompleteRequest$32$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$32$label_1#1;
-
- inline$storm_IoCompleteRequest$32$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$32$label_7#1;
-
- inline$storm_IoCompleteRequest$32$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$32$label_1#1;
-
- inline$storm_IoCompleteRequest$32$label_1#1:
- goto inline$storm_IoCompleteRequest$32$Return#1;
-
- inline$storm_IoCompleteRequest$32$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$32$Return#1;
-
- inline$storm_IoCompleteRequest$32$Return#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon45_Then#1, inline$BDLSystemPowerIoCompletion$15$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$15$anon46_Then#1, inline$BDLSystemPowerIoCompletion$15$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_80#1:
- goto inline$BDLGetDebugLevel$424$Entry#1;
-
- inline$BDLGetDebugLevel$424$Entry#1:
- goto inline$BDLGetDebugLevel$424$start#1;
-
- inline$BDLGetDebugLevel$424$start#1:
- goto inline$BDLGetDebugLevel$424$label_3#1;
-
- inline$BDLGetDebugLevel$424$label_3#1:
- havoc inline$BDLGetDebugLevel$424$myNondetVar_0;
- inline$BDLGetDebugLevel$424$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$424$myNondetVar_0;
- goto inline$BDLGetDebugLevel$424$label_1#1;
-
- inline$BDLGetDebugLevel$424$label_1#1:
- goto inline$BDLGetDebugLevel$424$Return#1;
-
- inline$BDLGetDebugLevel$424$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$424$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon47_Then#1, inline$BDLSystemPowerIoCompletion$15$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_83_true#1, inline$BDLSystemPowerIoCompletion$15$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_87#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_88#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_89#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$15$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_84#1:
- goto inline$BDLGetDebugLevel$425$Entry#1;
-
- inline$BDLGetDebugLevel$425$Entry#1:
- goto inline$BDLGetDebugLevel$425$start#1;
-
- inline$BDLGetDebugLevel$425$start#1:
- goto inline$BDLGetDebugLevel$425$label_3#1;
-
- inline$BDLGetDebugLevel$425$label_3#1:
- havoc inline$BDLGetDebugLevel$425$myNondetVar_0;
- inline$BDLGetDebugLevel$425$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$425$myNondetVar_0;
- goto inline$BDLGetDebugLevel$425$label_1#1;
-
- inline$BDLGetDebugLevel$425$label_1#1:
- goto inline$BDLGetDebugLevel$425$Return#1;
-
- inline$BDLGetDebugLevel$425$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$425$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon48_Then#1, inline$BDLSystemPowerIoCompletion$15$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_93_true#1, inline$BDLSystemPowerIoCompletion$15$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_97#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_98#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_99#1:
- call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$15$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$15$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_94#1:
- goto inline$BDLGetDebugLevel$426$Entry#1;
-
- inline$BDLGetDebugLevel$426$Entry#1:
- goto inline$BDLGetDebugLevel$426$start#1;
-
- inline$BDLGetDebugLevel$426$start#1:
- goto inline$BDLGetDebugLevel$426$label_3#1;
-
- inline$BDLGetDebugLevel$426$label_3#1:
- havoc inline$BDLGetDebugLevel$426$myNondetVar_0;
- inline$BDLGetDebugLevel$426$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$426$myNondetVar_0;
- goto inline$BDLGetDebugLevel$426$label_1#1;
-
- inline$BDLGetDebugLevel$426$label_1#1:
- goto inline$BDLGetDebugLevel$426$Return#1;
-
- inline$BDLGetDebugLevel$426$Return#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$426$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$15$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$15$anon49_Then#1, inline$BDLSystemPowerIoCompletion$15$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_103_true#1, inline$BDLSystemPowerIoCompletion$15$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$15$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$15$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_104#1:
- inline$BDLSystemPowerIoCompletion$15$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$15$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$15$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$15$Return#1;
-
- inline$BDLSystemPowerIoCompletion$15$Return#1:
- inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$15$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$15$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$15$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$15$anon14_Then#1, inline$CallCompletionRoutine$15$anon14_Else#1;
-
- inline$CallCompletionRoutine$15$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$15$anon9#1;
-
- inline$CallCompletionRoutine$15$anon9#1:
- goto inline$CallCompletionRoutine$15$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$15$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$15$Return#1;
-
- inline$CallCompletionRoutine$15$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$15$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$15$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$15$Entry#1:
- inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$15$start#1;
-
- inline$BDLDevicePowerIoCompletion$15$start#1:
- call inline$BDLDevicePowerIoCompletion$15$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$15$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_4#1:
- inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_6#1:
- inline$BDLDevicePowerIoCompletion$15$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$15$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$15$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$15$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$81$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$81$Entry#1:
- inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$81$start#1;
-
- inline$IoGetCurrentIrpStackLocation$81$start#1:
- inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$81$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$81$label_3_true#1, inline$IoGetCurrentIrpStackLocation$81$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$81$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$81$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$81$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$81$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$81$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$81$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$81$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$81$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$81$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$81$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$81$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$81$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$81$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$81$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$81$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$81$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$81$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$81$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$81$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$81$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$81$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$81$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$81$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon30_Then#1, inline$BDLDevicePowerIoCompletion$15$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_13#1:
- inline$BDLDevicePowerIoCompletion$15$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$15$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$15$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_17#1:
- goto inline$BDLGetDebugLevel$409$Entry#1;
-
- inline$BDLGetDebugLevel$409$Entry#1:
- goto inline$BDLGetDebugLevel$409$start#1;
-
- inline$BDLGetDebugLevel$409$start#1:
- goto inline$BDLGetDebugLevel$409$label_3#1;
-
- inline$BDLGetDebugLevel$409$label_3#1:
- havoc inline$BDLGetDebugLevel$409$myNondetVar_0;
- inline$BDLGetDebugLevel$409$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$409$myNondetVar_0;
- goto inline$BDLGetDebugLevel$409$label_1#1;
-
- inline$BDLGetDebugLevel$409$label_1#1:
- goto inline$BDLGetDebugLevel$409$Return#1;
-
- inline$BDLGetDebugLevel$409$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$409$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon31_Then#1, inline$BDLDevicePowerIoCompletion$15$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_20_true#1, inline$BDLDevicePowerIoCompletion$15$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_24#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_25#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_26#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$15$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_21#1:
- goto inline$BDLGetDebugLevel$410$Entry#1;
-
- inline$BDLGetDebugLevel$410$Entry#1:
- goto inline$BDLGetDebugLevel$410$start#1;
-
- inline$BDLGetDebugLevel$410$start#1:
- goto inline$BDLGetDebugLevel$410$label_3#1;
-
- inline$BDLGetDebugLevel$410$label_3#1:
- havoc inline$BDLGetDebugLevel$410$myNondetVar_0;
- inline$BDLGetDebugLevel$410$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$410$myNondetVar_0;
- goto inline$BDLGetDebugLevel$410$label_1#1;
-
- inline$BDLGetDebugLevel$410$label_1#1:
- goto inline$BDLGetDebugLevel$410$Return#1;
-
- inline$BDLGetDebugLevel$410$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$410$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon32_Then#1, inline$BDLDevicePowerIoCompletion$15$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_30_true#1, inline$BDLDevicePowerIoCompletion$15$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_34#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_35#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_36#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$15$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_31#1:
- goto inline$BDLGetDebugLevel$411$Entry#1;
-
- inline$BDLGetDebugLevel$411$Entry#1:
- goto inline$BDLGetDebugLevel$411$start#1;
-
- inline$BDLGetDebugLevel$411$start#1:
- goto inline$BDLGetDebugLevel$411$label_3#1;
-
- inline$BDLGetDebugLevel$411$label_3#1:
- havoc inline$BDLGetDebugLevel$411$myNondetVar_0;
- inline$BDLGetDebugLevel$411$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$411$myNondetVar_0;
- goto inline$BDLGetDebugLevel$411$label_1#1;
-
- inline$BDLGetDebugLevel$411$label_1#1:
- goto inline$BDLGetDebugLevel$411$Return#1;
-
- inline$BDLGetDebugLevel$411$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$411$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon33_Then#1, inline$BDLDevicePowerIoCompletion$15$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_40_true#1, inline$BDLDevicePowerIoCompletion$15$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_41_true#1, inline$BDLDevicePowerIoCompletion$15$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$15$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$15$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_44_true#1, inline$BDLDevicePowerIoCompletion$15$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$15$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_45_true#1, inline$BDLDevicePowerIoCompletion$15$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$15$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$15$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$15$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$15$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$15$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$15$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_54#1:
- inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$15$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_55_true#1, inline$BDLDevicePowerIoCompletion$15$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_56#1:
- call inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$15$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$15$anon34_Then#1, inline$BDLDevicePowerIoCompletion$15$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_59#1:
- goto inline$BDLGetDebugLevel$412$Entry#1;
-
- inline$BDLGetDebugLevel$412$Entry#1:
- goto inline$BDLGetDebugLevel$412$start#1;
-
- inline$BDLGetDebugLevel$412$start#1:
- goto inline$BDLGetDebugLevel$412$label_3#1;
-
- inline$BDLGetDebugLevel$412$label_3#1:
- havoc inline$BDLGetDebugLevel$412$myNondetVar_0;
- inline$BDLGetDebugLevel$412$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$412$myNondetVar_0;
- goto inline$BDLGetDebugLevel$412$label_1#1;
-
- inline$BDLGetDebugLevel$412$label_1#1:
- goto inline$BDLGetDebugLevel$412$Return#1;
-
- inline$BDLGetDebugLevel$412$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$412$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon35_Then#1, inline$BDLDevicePowerIoCompletion$15$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_62_true#1, inline$BDLDevicePowerIoCompletion$15$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_66#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_67#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_68#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$15$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_63#1:
- goto inline$BDLGetDebugLevel$413$Entry#1;
-
- inline$BDLGetDebugLevel$413$Entry#1:
- goto inline$BDLGetDebugLevel$413$start#1;
-
- inline$BDLGetDebugLevel$413$start#1:
- goto inline$BDLGetDebugLevel$413$label_3#1;
-
- inline$BDLGetDebugLevel$413$label_3#1:
- havoc inline$BDLGetDebugLevel$413$myNondetVar_0;
- inline$BDLGetDebugLevel$413$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$413$myNondetVar_0;
- goto inline$BDLGetDebugLevel$413$label_1#1;
-
- inline$BDLGetDebugLevel$413$label_1#1:
- goto inline$BDLGetDebugLevel$413$Return#1;
-
- inline$BDLGetDebugLevel$413$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$413$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon36_Then#1, inline$BDLDevicePowerIoCompletion$15$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_72_true#1, inline$BDLDevicePowerIoCompletion$15$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_76#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_77#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_78#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$15$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_73#1:
- goto inline$BDLGetDebugLevel$414$Entry#1;
-
- inline$BDLGetDebugLevel$414$Entry#1:
- goto inline$BDLGetDebugLevel$414$start#1;
-
- inline$BDLGetDebugLevel$414$start#1:
- goto inline$BDLGetDebugLevel$414$label_3#1;
-
- inline$BDLGetDebugLevel$414$label_3#1:
- havoc inline$BDLGetDebugLevel$414$myNondetVar_0;
- inline$BDLGetDebugLevel$414$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$414$myNondetVar_0;
- goto inline$BDLGetDebugLevel$414$label_1#1;
-
- inline$BDLGetDebugLevel$414$label_1#1:
- goto inline$BDLGetDebugLevel$414$Return#1;
-
- inline$BDLGetDebugLevel$414$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$414$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon37_Then#1, inline$BDLDevicePowerIoCompletion$15$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_82_true#1, inline$BDLDevicePowerIoCompletion$15$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$15$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$15$anon38_Then#1, inline$BDLDevicePowerIoCompletion$15$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$15$anon39_Then#1, inline$BDLDevicePowerIoCompletion$15$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_92#1:
- goto inline$storm_IoCompleteRequest$31$Entry#1;
-
- inline$storm_IoCompleteRequest$31$Entry#1:
- inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$31$start#1;
-
- inline$storm_IoCompleteRequest$31$start#1:
- inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$31$label_3#1;
-
- inline$storm_IoCompleteRequest$31$label_3#1:
- call inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$31$label_6#1;
-
- inline$storm_IoCompleteRequest$31$label_6#1:
- goto inline$storm_IoCompleteRequest$31$label_6_true#1, inline$storm_IoCompleteRequest$31$label_6_false#1;
-
- inline$storm_IoCompleteRequest$31$label_6_false#1:
- assume inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$31$label_7#1;
-
- inline$storm_IoCompleteRequest$31$label_6_true#1:
- assume inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$31$label_8#1;
-
- inline$storm_IoCompleteRequest$31$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$31$anon3_Then#1, inline$storm_IoCompleteRequest$31$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$31$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$31$anon1#1;
-
- inline$storm_IoCompleteRequest$31$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$31$label_9#1;
-
- inline$storm_IoCompleteRequest$31$label_9#1:
- goto inline$storm_IoCompleteRequest$31$label_9_true#1, inline$storm_IoCompleteRequest$31$label_9_false#1;
-
- inline$storm_IoCompleteRequest$31$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$31$label_10#1;
-
- inline$storm_IoCompleteRequest$31$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$31$label_1#1;
-
- inline$storm_IoCompleteRequest$31$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$31$label_7#1;
-
- inline$storm_IoCompleteRequest$31$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$31$label_1#1;
-
- inline$storm_IoCompleteRequest$31$label_1#1:
- goto inline$storm_IoCompleteRequest$31$Return#1;
-
- inline$storm_IoCompleteRequest$31$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$31$Return#1;
-
- inline$storm_IoCompleteRequest$31$Return#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon40_Then#1, inline$BDLDevicePowerIoCompletion$15$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$15$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$15$anon41_Then#1, inline$BDLDevicePowerIoCompletion$15$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_98#1:
- goto inline$BDLGetDebugLevel$415$Entry#1;
-
- inline$BDLGetDebugLevel$415$Entry#1:
- goto inline$BDLGetDebugLevel$415$start#1;
-
- inline$BDLGetDebugLevel$415$start#1:
- goto inline$BDLGetDebugLevel$415$label_3#1;
-
- inline$BDLGetDebugLevel$415$label_3#1:
- havoc inline$BDLGetDebugLevel$415$myNondetVar_0;
- inline$BDLGetDebugLevel$415$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$415$myNondetVar_0;
- goto inline$BDLGetDebugLevel$415$label_1#1;
-
- inline$BDLGetDebugLevel$415$label_1#1:
- goto inline$BDLGetDebugLevel$415$Return#1;
-
- inline$BDLGetDebugLevel$415$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$415$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon42_Then#1, inline$BDLDevicePowerIoCompletion$15$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_101_true#1, inline$BDLDevicePowerIoCompletion$15$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_105#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_106#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_107#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$15$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_102#1:
- goto inline$BDLGetDebugLevel$416$Entry#1;
-
- inline$BDLGetDebugLevel$416$Entry#1:
- goto inline$BDLGetDebugLevel$416$start#1;
-
- inline$BDLGetDebugLevel$416$start#1:
- goto inline$BDLGetDebugLevel$416$label_3#1;
-
- inline$BDLGetDebugLevel$416$label_3#1:
- havoc inline$BDLGetDebugLevel$416$myNondetVar_0;
- inline$BDLGetDebugLevel$416$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$416$myNondetVar_0;
- goto inline$BDLGetDebugLevel$416$label_1#1;
-
- inline$BDLGetDebugLevel$416$label_1#1:
- goto inline$BDLGetDebugLevel$416$Return#1;
-
- inline$BDLGetDebugLevel$416$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$416$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon43_Then#1, inline$BDLDevicePowerIoCompletion$15$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_111_true#1, inline$BDLDevicePowerIoCompletion$15$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_115#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_116#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_117#1:
- call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$15$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$15$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_112#1:
- goto inline$BDLGetDebugLevel$417$Entry#1;
-
- inline$BDLGetDebugLevel$417$Entry#1:
- goto inline$BDLGetDebugLevel$417$start#1;
-
- inline$BDLGetDebugLevel$417$start#1:
- goto inline$BDLGetDebugLevel$417$label_3#1;
-
- inline$BDLGetDebugLevel$417$label_3#1:
- havoc inline$BDLGetDebugLevel$417$myNondetVar_0;
- inline$BDLGetDebugLevel$417$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$417$myNondetVar_0;
- goto inline$BDLGetDebugLevel$417$label_1#1;
-
- inline$BDLGetDebugLevel$417$label_1#1:
- goto inline$BDLGetDebugLevel$417$Return#1;
-
- inline$BDLGetDebugLevel$417$Return#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$417$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$15$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$15$anon44_Then#1, inline$BDLDevicePowerIoCompletion$15$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_121_true#1, inline$BDLDevicePowerIoCompletion$15$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$15$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$15$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_122#1:
- inline$BDLDevicePowerIoCompletion$15$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$15$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$15$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$15$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$15$Return#1;
-
- inline$BDLDevicePowerIoCompletion$15$Return#1:
- inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$15$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$15$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$15$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$15$anon13_Then#1, inline$CallCompletionRoutine$15$anon13_Else#1;
-
- inline$CallCompletionRoutine$15$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$15$anon7#1;
-
- inline$CallCompletionRoutine$15$anon7#1:
- goto inline$CallCompletionRoutine$15$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$15$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$15$Return#1;
-
- inline$CallCompletionRoutine$15$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$15$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$15$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$15$Entry#1:
- inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$15$start#1;
-
- inline$BDLCallDriverCompletionRoutine$15$start#1:
- inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$15$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$15$label_3_true#1, inline$BDLCallDriverCompletionRoutine$15$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$15$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$15$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$15$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$15$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_6#1:
- goto inline$storm_KeSetEvent$17$Entry#1;
-
- inline$storm_KeSetEvent$17$Entry#1:
- inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$17$start#1;
-
- inline$storm_KeSetEvent$17$start#1:
- inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$17$label_3#1;
-
- inline$storm_KeSetEvent$17$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$17$label_1#1;
-
- inline$storm_KeSetEvent$17$label_1#1:
- goto inline$storm_KeSetEvent$17$Return#1;
-
- inline$storm_KeSetEvent$17$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$15$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$15$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$15$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$15$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$15$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$15$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$15$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_9#1:
- inline$BDLCallDriverCompletionRoutine$15$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$15$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$15$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$15$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$15$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$15$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$15$Return#1:
- inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$15$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$15$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$15$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$15$anon12_Then#1, inline$CallCompletionRoutine$15$anon12_Else#1;
-
- inline$CallCompletionRoutine$15$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$15$anon5#1;
-
- inline$CallCompletionRoutine$15$anon5#1:
- goto inline$CallCompletionRoutine$15$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$15$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$15$label_23#1;
-
- inline$CallCompletionRoutine$15$label_23#1:
- inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$15$label_24#1;
-
- inline$CallCompletionRoutine$15$label_24#1:
- goto inline$CallCompletionRoutine$15$label_24_true#1, inline$CallCompletionRoutine$15$label_24_false#1;
-
- inline$CallCompletionRoutine$15$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$15$label_1#1;
-
- inline$CallCompletionRoutine$15$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$15$label_25#1;
-
- inline$CallCompletionRoutine$15$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$15$label_1#1;
-
- inline$CallCompletionRoutine$15$label_1#1:
- goto inline$CallCompletionRoutine$15$Return#1;
-
- inline$CallCompletionRoutine$15$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$15$Return#1;
-
- inline$CallCompletionRoutine$15$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$15$Return#1;
-
- inline$CallCompletionRoutine$15$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$15$Return#1;
-
- inline$CallCompletionRoutine$15$Return#1:
- goto inline$storm_IoCallDriver$7$label_39$1#1;
-
- inline$storm_IoCallDriver$7$label_39$1#1:
- goto inline$storm_IoCallDriver$7$anon15_Then#1, inline$storm_IoCallDriver$7$anon15_Else#1;
-
- inline$storm_IoCallDriver$7$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$7$anon10#1;
-
- inline$storm_IoCallDriver$7$anon10#1:
- goto inline$storm_IoCallDriver$7$label_36#1;
-
- inline$storm_IoCallDriver$7$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$7$Return#1;
-
- inline$storm_IoCallDriver$7$label_27_case_0#1:
- assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$7$label_28#1;
-
- inline$storm_IoCallDriver$7$label_28#1:
- inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$7$label_42#1;
-
- inline$storm_IoCallDriver$7$label_42#1:
- goto inline$storm_IoCallDriver$7$label_43#1;
-
- inline$storm_IoCallDriver$7$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$7$label_36#1;
-
- inline$storm_IoCallDriver$7$label_36#1:
- inline$storm_IoCallDriver$7$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$7$label_1#1;
-
- inline$storm_IoCallDriver$7$label_1#1:
- goto inline$storm_IoCallDriver$7$Return#1;
-
- inline$storm_IoCallDriver$7$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$7$Return#1;
-
- inline$storm_IoCallDriver$7$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$7$Return#1;
-
- inline$storm_IoCallDriver$7$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$7$Return#1;
-
- inline$storm_IoCallDriver$7$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$7$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_19$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_19$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon20_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon9#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_42#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_42#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_IoCallDriver$108.29$4$;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon20_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_18_true#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_22#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_22#1:
- call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon21_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon21_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon11#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon11#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_25#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_25#1:
- goto inline$storm_PoCallDriver$3$Entry#1;
-
- inline$storm_PoCallDriver$3$Entry#1:
- inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_PoCallDriver$3$start#1;
-
- inline$storm_PoCallDriver$3$start#1:
- inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8_.1;
- goto inline$storm_PoCallDriver$3$label_3#1;
-
- inline$storm_PoCallDriver$3$label_3#1:
- goto inline$storm_IoCallDriver$8$Entry#1;
-
- inline$storm_IoCallDriver$8$Entry#1:
- inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8;
- goto inline$storm_IoCallDriver$8$start#1;
-
- inline$storm_IoCallDriver$8$start#1:
- inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$8$label_3#1;
-
- inline$storm_IoCallDriver$8$label_3#1:
- goto inline$storm_IoCallDriver$8$label_4#1;
-
- inline$storm_IoCallDriver$8$label_4#1:
- goto inline$storm_IoCallDriver$8$label_5#1;
-
- inline$storm_IoCallDriver$8$label_5#1:
- goto inline$storm_IoCallDriver$8$label_6#1;
-
- inline$storm_IoCallDriver$8$label_6#1:
- call inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$8$label_9#1;
-
- inline$storm_IoCallDriver$8$label_9#1:
- goto inline$storm_IoCallDriver$8$label_9_true#1, inline$storm_IoCallDriver$8$label_9_false#1;
-
- inline$storm_IoCallDriver$8$label_9_false#1:
- assume inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$8$label_10#1;
-
- inline$storm_IoCallDriver$8$label_9_true#1:
- assume inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$8$label_13#1;
-
- inline$storm_IoCallDriver$8$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$8$anon12_Then#1, inline$storm_IoCallDriver$8$anon12_Else#1;
-
- inline$storm_IoCallDriver$8$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$8$anon3#1;
-
- inline$storm_IoCallDriver$8$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$8$label_14#1;
-
- inline$storm_IoCallDriver$8$label_14#1:
- goto inline$storm_IoCallDriver$8$label_14_true#1, inline$storm_IoCallDriver$8$label_14_false#1;
-
- inline$storm_IoCallDriver$8$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$8$label_15#1;
-
- inline$storm_IoCallDriver$8$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$8$label_1#1;
-
- inline$storm_IoCallDriver$8$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$8$label_10#1;
-
- inline$storm_IoCallDriver$8$label_10#1:
- goto inline$IoSetNextIrpStackLocation$9$Entry#1;
-
- inline$IoSetNextIrpStackLocation$9$Entry#1:
- inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$9$start#1;
-
- inline$IoSetNextIrpStackLocation$9$start#1:
- inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$9$label_3#1;
-
- inline$IoSetNextIrpStackLocation$9$label_3#1:
- goto inline$IoSetNextIrpStackLocation$9$label_3_true#1, inline$IoSetNextIrpStackLocation$9$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$9$label_3_false#1:
- inline$IoSetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$9$myVar_0);
- goto inline$IoSetNextIrpStackLocation$9$label_4#1;
-
- inline$IoSetNextIrpStackLocation$9$label_4#1:
- call inline$IoSetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$9$label_7#1;
-
- inline$IoSetNextIrpStackLocation$9$label_7#1:
- call inline$IoSetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$9$label_8#1;
-
- inline$IoSetNextIrpStackLocation$9$label_8#1:
- goto inline$IoSetNextIrpStackLocation$9$label_5#1;
-
- inline$IoSetNextIrpStackLocation$9$label_3_true#1:
- inline$IoSetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$9$myVar_0);
- goto inline$IoSetNextIrpStackLocation$9$label_5#1;
-
- inline$IoSetNextIrpStackLocation$9$label_5#1:
- inline$IoSetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$9$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$9$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$9$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$9$label_6#1;
-
- inline$IoSetNextIrpStackLocation$9$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$9$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$9$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$9$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$9$label_1#1;
-
- inline$IoSetNextIrpStackLocation$9$label_1#1:
- goto inline$IoSetNextIrpStackLocation$9$Return#1;
-
- inline$IoSetNextIrpStackLocation$9$Return#1:
- goto inline$storm_IoCallDriver$8$label_10$1#1;
-
- inline$storm_IoCallDriver$8$label_10$1#1:
- goto inline$storm_IoCallDriver$8$anon11_Then#1, inline$storm_IoCallDriver$8$anon11_Else#1;
-
- inline$storm_IoCallDriver$8$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$8$anon1#1;
-
- inline$storm_IoCallDriver$8$anon1#1:
- goto inline$storm_IoCallDriver$8$label_18#1;
-
- inline$storm_IoCallDriver$8$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$83$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$83$Entry#1:
- inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$83$start#1;
-
- inline$IoGetCurrentIrpStackLocation$83$start#1:
- inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$83$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$83$label_3_true#1, inline$IoGetCurrentIrpStackLocation$83$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$83$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$83$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$83$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$83$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$83$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$83$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$83$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$83$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$83$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$83$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$83$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$83$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$83$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$83$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$83$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$83$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$83$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$83$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$83$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$83$Return#1:
- goto inline$storm_IoCallDriver$8$label_18$1#1;
-
- inline$storm_IoCallDriver$8$label_18$1#1:
- goto inline$storm_IoCallDriver$8$anon13_Then#1, inline$storm_IoCallDriver$8$anon13_Else#1;
-
- inline$storm_IoCallDriver$8$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$8$anon6#1;
-
- inline$storm_IoCallDriver$8$anon6#1:
- goto inline$storm_IoCallDriver$8$label_21#1;
-
- inline$storm_IoCallDriver$8$label_21#1:
- goto inline$storm_IoCallDriver$8$label_22#1;
-
- inline$storm_IoCallDriver$8$label_22#1:
- goto inline$storm_IoCallDriver$8$label_23#1;
-
- inline$storm_IoCallDriver$8$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$8$label_24#1;
-
- inline$storm_IoCallDriver$8$label_24#1:
- call inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$8$label_27#1;
-
- inline$storm_IoCallDriver$8$label_27#1:
- goto inline$storm_IoCallDriver$8$label_27_case_0#1, inline$storm_IoCallDriver$8$label_27_case_1#1, inline$storm_IoCallDriver$8$label_27_case_2#1;
-
- inline$storm_IoCallDriver$8$label_27_case_2#1:
- assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$8$label_30#1;
-
- inline$storm_IoCallDriver$8$label_30#1:
- inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$8$label_31#1;
-
- inline$storm_IoCallDriver$8$label_31#1:
- goto inline$storm_IoCallDriver$8$label_32#1;
-
- inline$storm_IoCallDriver$8$label_32#1:
- goto inline$storm_IoCallDriver$8$label_33#1;
-
- inline$storm_IoCallDriver$8$label_33#1:
- goto inline$CallCompletionRoutine$16$Entry#1;
-
- inline$CallCompletionRoutine$16$Entry#1:
- inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$16$start#1;
-
- inline$CallCompletionRoutine$16$start#1:
- inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$16$label_3#1;
-
- inline$CallCompletionRoutine$16$label_3#1:
- goto inline$CallCompletionRoutine$16$label_4#1;
-
- inline$CallCompletionRoutine$16$label_4#1:
- goto inline$CallCompletionRoutine$16$label_5#1;
-
- inline$CallCompletionRoutine$16$label_5#1:
- goto inline$CallCompletionRoutine$16$label_6#1;
-
- inline$CallCompletionRoutine$16$label_6#1:
- goto inline$CallCompletionRoutine$16$label_7#1;
-
- inline$CallCompletionRoutine$16$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$84$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$84$Entry#1:
- inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$84$start#1;
-
- inline$IoGetCurrentIrpStackLocation$84$start#1:
- inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$84$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$84$label_3_true#1, inline$IoGetCurrentIrpStackLocation$84$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$84$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$84$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$84$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$84$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$84$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$84$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$84$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$84$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$84$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$84$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$84$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$84$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$84$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$84$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$84$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$84$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$84$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$84$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$84$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$84$Return#1:
- goto inline$CallCompletionRoutine$16$label_7$1#1;
-
- inline$CallCompletionRoutine$16$label_7$1#1:
- goto inline$CallCompletionRoutine$16$anon10_Then#1, inline$CallCompletionRoutine$16$anon10_Else#1;
-
- inline$CallCompletionRoutine$16$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$16$anon1#1;
-
- inline$CallCompletionRoutine$16$anon1#1:
- goto inline$CallCompletionRoutine$16$label_10#1;
-
- inline$CallCompletionRoutine$16$label_10#1:
- goto inline$CallCompletionRoutine$16$label_11#1;
-
- inline$CallCompletionRoutine$16$label_11#1:
- havoc inline$CallCompletionRoutine$16$myNondetVar_0;
- inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$myNondetVar_0;
- goto inline$CallCompletionRoutine$16$label_12#1;
-
- inline$CallCompletionRoutine$16$label_12#1:
- havoc inline$CallCompletionRoutine$16$myNondetVar_0;
- inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$myNondetVar_0;
- goto inline$CallCompletionRoutine$16$label_13#1;
-
- inline$CallCompletionRoutine$16$label_13#1:
- havoc inline$CallCompletionRoutine$16$myNondetVar_0;
- goto inline$CallCompletionRoutine$16$label_14#1;
-
- inline$CallCompletionRoutine$16$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$85$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$85$Entry#1:
- inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$85$start#1;
-
- inline$IoGetCurrentIrpStackLocation$85$start#1:
- inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$85$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$85$label_3_true#1, inline$IoGetCurrentIrpStackLocation$85$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$85$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$85$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$85$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$85$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$85$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$85$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$85$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$85$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$85$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$85$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$85$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$85$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$85$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$85$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$85$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$85$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$85$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$85$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$85$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$85$Return#1:
- goto inline$CallCompletionRoutine$16$label_14$1#1;
-
- inline$CallCompletionRoutine$16$label_14$1#1:
- goto inline$CallCompletionRoutine$16$anon11_Then#1, inline$CallCompletionRoutine$16$anon11_Else#1;
-
- inline$CallCompletionRoutine$16$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$16$anon3#1;
-
- inline$CallCompletionRoutine$16$anon3#1:
- goto inline$CallCompletionRoutine$16$label_17#1;
-
- inline$CallCompletionRoutine$16$label_17#1:
- goto inline$CallCompletionRoutine$16$label_18#1;
-
- inline$CallCompletionRoutine$16$label_18#1:
- goto inline$CallCompletionRoutine$16$label_18_true#1, inline$CallCompletionRoutine$16$label_18_false#1;
-
- inline$CallCompletionRoutine$16$label_18_false#1:
- assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$16$label_1#1;
-
- inline$CallCompletionRoutine$16$label_18_true#1:
- assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$16$label_19#1;
-
- inline$CallCompletionRoutine$16$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$16$label_20#1;
-
- inline$CallCompletionRoutine$16$label_20#1:
- goto inline$CallCompletionRoutine$16$label_20_icall_1#1, inline$CallCompletionRoutine$16$label_20_icall_2#1, inline$CallCompletionRoutine$16$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$16$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$16$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$16$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$16$Entry#1:
- inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$16$start#1;
-
- inline$BDLSystemPowerIoCompletion$16$start#1:
- call inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$16$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_4#1:
- inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_6#1:
- inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$16$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$16$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$16$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$87$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$87$Entry#1:
- inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$87$start#1;
-
- inline$IoGetCurrentIrpStackLocation$87$start#1:
- inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$87$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$87$label_3_true#1, inline$IoGetCurrentIrpStackLocation$87$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$87$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$87$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$87$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$87$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$87$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$87$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$87$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$87$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$87$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$87$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$87$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$87$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$87$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$87$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$87$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$87$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$87$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$87$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$87$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$87$Return#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon36_Then#1, inline$BDLSystemPowerIoCompletion$16$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_15#1:
- goto inline$BDLGetDebugLevel$439$Entry#1;
-
- inline$BDLGetDebugLevel$439$Entry#1:
- goto inline$BDLGetDebugLevel$439$start#1;
-
- inline$BDLGetDebugLevel$439$start#1:
- goto inline$BDLGetDebugLevel$439$label_3#1;
-
- inline$BDLGetDebugLevel$439$label_3#1:
- havoc inline$BDLGetDebugLevel$439$myNondetVar_0;
- inline$BDLGetDebugLevel$439$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$439$myNondetVar_0;
- goto inline$BDLGetDebugLevel$439$label_1#1;
-
- inline$BDLGetDebugLevel$439$label_1#1:
- goto inline$BDLGetDebugLevel$439$Return#1;
-
- inline$BDLGetDebugLevel$439$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$439$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon37_Then#1, inline$BDLSystemPowerIoCompletion$16$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_18_true#1, inline$BDLSystemPowerIoCompletion$16$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_22#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_23#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_24#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$16$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_19#1:
- goto inline$BDLGetDebugLevel$440$Entry#1;
-
- inline$BDLGetDebugLevel$440$Entry#1:
- goto inline$BDLGetDebugLevel$440$start#1;
-
- inline$BDLGetDebugLevel$440$start#1:
- goto inline$BDLGetDebugLevel$440$label_3#1;
-
- inline$BDLGetDebugLevel$440$label_3#1:
- havoc inline$BDLGetDebugLevel$440$myNondetVar_0;
- inline$BDLGetDebugLevel$440$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$440$myNondetVar_0;
- goto inline$BDLGetDebugLevel$440$label_1#1;
-
- inline$BDLGetDebugLevel$440$label_1#1:
- goto inline$BDLGetDebugLevel$440$Return#1;
-
- inline$BDLGetDebugLevel$440$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$440$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon38_Then#1, inline$BDLSystemPowerIoCompletion$16$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_28_true#1, inline$BDLSystemPowerIoCompletion$16$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_32#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_33#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_34#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$16$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_29#1:
- goto inline$BDLGetDebugLevel$441$Entry#1;
-
- inline$BDLGetDebugLevel$441$Entry#1:
- goto inline$BDLGetDebugLevel$441$start#1;
-
- inline$BDLGetDebugLevel$441$start#1:
- goto inline$BDLGetDebugLevel$441$label_3#1;
-
- inline$BDLGetDebugLevel$441$label_3#1:
- havoc inline$BDLGetDebugLevel$441$myNondetVar_0;
- inline$BDLGetDebugLevel$441$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$441$myNondetVar_0;
- goto inline$BDLGetDebugLevel$441$label_1#1;
-
- inline$BDLGetDebugLevel$441$label_1#1:
- goto inline$BDLGetDebugLevel$441$Return#1;
-
- inline$BDLGetDebugLevel$441$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$441$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon39_Then#1, inline$BDLSystemPowerIoCompletion$16$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_38_true#1, inline$BDLSystemPowerIoCompletion$16$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_39_true#1, inline$BDLSystemPowerIoCompletion$16$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$16$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$16$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$16$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_106_true#1, inline$BDLSystemPowerIoCompletion$16$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_142#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_143#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$16$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$16$myNondetVar_0, inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$16$anon50_Then#1, inline$BDLSystemPowerIoCompletion$16$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_112#1:
- inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$16$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_113_true#1, inline$BDLSystemPowerIoCompletion$16$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$16$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_117#1:
- goto inline$BDLGetDebugLevel$448$Entry#1;
-
- inline$BDLGetDebugLevel$448$Entry#1:
- goto inline$BDLGetDebugLevel$448$start#1;
-
- inline$BDLGetDebugLevel$448$start#1:
- goto inline$BDLGetDebugLevel$448$label_3#1;
-
- inline$BDLGetDebugLevel$448$label_3#1:
- havoc inline$BDLGetDebugLevel$448$myNondetVar_0;
- inline$BDLGetDebugLevel$448$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$448$myNondetVar_0;
- goto inline$BDLGetDebugLevel$448$label_1#1;
-
- inline$BDLGetDebugLevel$448$label_1#1:
- goto inline$BDLGetDebugLevel$448$Return#1;
-
- inline$BDLGetDebugLevel$448$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$448$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon51_Then#1, inline$BDLSystemPowerIoCompletion$16$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_120_true#1, inline$BDLSystemPowerIoCompletion$16$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_124#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_125#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_126#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$16$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_121#1:
- goto inline$BDLGetDebugLevel$449$Entry#1;
-
- inline$BDLGetDebugLevel$449$Entry#1:
- goto inline$BDLGetDebugLevel$449$start#1;
-
- inline$BDLGetDebugLevel$449$start#1:
- goto inline$BDLGetDebugLevel$449$label_3#1;
-
- inline$BDLGetDebugLevel$449$label_3#1:
- havoc inline$BDLGetDebugLevel$449$myNondetVar_0;
- inline$BDLGetDebugLevel$449$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$449$myNondetVar_0;
- goto inline$BDLGetDebugLevel$449$label_1#1;
-
- inline$BDLGetDebugLevel$449$label_1#1:
- goto inline$BDLGetDebugLevel$449$Return#1;
-
- inline$BDLGetDebugLevel$449$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$449$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon52_Then#1, inline$BDLSystemPowerIoCompletion$16$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_130_true#1, inline$BDLSystemPowerIoCompletion$16$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_134#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_135#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_136#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$16$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_131#1:
- goto inline$BDLGetDebugLevel$450$Entry#1;
-
- inline$BDLGetDebugLevel$450$Entry#1:
- goto inline$BDLGetDebugLevel$450$start#1;
-
- inline$BDLGetDebugLevel$450$start#1:
- goto inline$BDLGetDebugLevel$450$label_3#1;
-
- inline$BDLGetDebugLevel$450$label_3#1:
- havoc inline$BDLGetDebugLevel$450$myNondetVar_0;
- inline$BDLGetDebugLevel$450$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$450$myNondetVar_0;
- goto inline$BDLGetDebugLevel$450$label_1#1;
-
- inline$BDLGetDebugLevel$450$label_1#1:
- goto inline$BDLGetDebugLevel$450$Return#1;
-
- inline$BDLGetDebugLevel$450$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$450$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon53_Then#1, inline$BDLSystemPowerIoCompletion$16$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_140_true#1, inline$BDLSystemPowerIoCompletion$16$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$16$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_115#1:
- inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$16$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$16$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_43#1:
- goto inline$BDLGetDebugLevel$442$Entry#1;
-
- inline$BDLGetDebugLevel$442$Entry#1:
- goto inline$BDLGetDebugLevel$442$start#1;
-
- inline$BDLGetDebugLevel$442$start#1:
- goto inline$BDLGetDebugLevel$442$label_3#1;
-
- inline$BDLGetDebugLevel$442$label_3#1:
- havoc inline$BDLGetDebugLevel$442$myNondetVar_0;
- inline$BDLGetDebugLevel$442$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$442$myNondetVar_0;
- goto inline$BDLGetDebugLevel$442$label_1#1;
-
- inline$BDLGetDebugLevel$442$label_1#1:
- goto inline$BDLGetDebugLevel$442$Return#1;
-
- inline$BDLGetDebugLevel$442$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$442$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon40_Then#1, inline$BDLSystemPowerIoCompletion$16$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_46_true#1, inline$BDLSystemPowerIoCompletion$16$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_50#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_51#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_52#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$16$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_47#1:
- goto inline$BDLGetDebugLevel$443$Entry#1;
-
- inline$BDLGetDebugLevel$443$Entry#1:
- goto inline$BDLGetDebugLevel$443$start#1;
-
- inline$BDLGetDebugLevel$443$start#1:
- goto inline$BDLGetDebugLevel$443$label_3#1;
-
- inline$BDLGetDebugLevel$443$label_3#1:
- havoc inline$BDLGetDebugLevel$443$myNondetVar_0;
- inline$BDLGetDebugLevel$443$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$443$myNondetVar_0;
- goto inline$BDLGetDebugLevel$443$label_1#1;
-
- inline$BDLGetDebugLevel$443$label_1#1:
- goto inline$BDLGetDebugLevel$443$Return#1;
-
- inline$BDLGetDebugLevel$443$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$443$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon41_Then#1, inline$BDLSystemPowerIoCompletion$16$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_56_true#1, inline$BDLSystemPowerIoCompletion$16$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_60#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_61#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_62#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$16$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_57#1:
- goto inline$BDLGetDebugLevel$444$Entry#1;
-
- inline$BDLGetDebugLevel$444$Entry#1:
- goto inline$BDLGetDebugLevel$444$start#1;
-
- inline$BDLGetDebugLevel$444$start#1:
- goto inline$BDLGetDebugLevel$444$label_3#1;
-
- inline$BDLGetDebugLevel$444$label_3#1:
- havoc inline$BDLGetDebugLevel$444$myNondetVar_0;
- inline$BDLGetDebugLevel$444$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$444$myNondetVar_0;
- goto inline$BDLGetDebugLevel$444$label_1#1;
-
- inline$BDLGetDebugLevel$444$label_1#1:
- goto inline$BDLGetDebugLevel$444$Return#1;
-
- inline$BDLGetDebugLevel$444$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$444$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon42_Then#1, inline$BDLSystemPowerIoCompletion$16$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_66_true#1, inline$BDLSystemPowerIoCompletion$16$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$16$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$16$anon43_Then#1, inline$BDLSystemPowerIoCompletion$16$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$16$anon44_Then#1, inline$BDLSystemPowerIoCompletion$16$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_74#1:
- goto inline$storm_IoCompleteRequest$34$Entry#1;
-
- inline$storm_IoCompleteRequest$34$Entry#1:
- inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$34$start#1;
-
- inline$storm_IoCompleteRequest$34$start#1:
- inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$34$label_3#1;
-
- inline$storm_IoCompleteRequest$34$label_3#1:
- call inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$34$label_6#1;
-
- inline$storm_IoCompleteRequest$34$label_6#1:
- goto inline$storm_IoCompleteRequest$34$label_6_true#1, inline$storm_IoCompleteRequest$34$label_6_false#1;
-
- inline$storm_IoCompleteRequest$34$label_6_false#1:
- assume inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$34$label_7#1;
-
- inline$storm_IoCompleteRequest$34$label_6_true#1:
- assume inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$34$label_8#1;
-
- inline$storm_IoCompleteRequest$34$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$34$anon3_Then#1, inline$storm_IoCompleteRequest$34$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$34$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$34$anon1#1;
-
- inline$storm_IoCompleteRequest$34$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$34$label_9#1;
-
- inline$storm_IoCompleteRequest$34$label_9#1:
- goto inline$storm_IoCompleteRequest$34$label_9_true#1, inline$storm_IoCompleteRequest$34$label_9_false#1;
-
- inline$storm_IoCompleteRequest$34$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$34$label_10#1;
-
- inline$storm_IoCompleteRequest$34$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$34$label_1#1;
-
- inline$storm_IoCompleteRequest$34$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$34$label_7#1;
-
- inline$storm_IoCompleteRequest$34$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$34$label_1#1;
-
- inline$storm_IoCompleteRequest$34$label_1#1:
- goto inline$storm_IoCompleteRequest$34$Return#1;
-
- inline$storm_IoCompleteRequest$34$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$34$Return#1;
-
- inline$storm_IoCompleteRequest$34$Return#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon45_Then#1, inline$BDLSystemPowerIoCompletion$16$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$16$anon46_Then#1, inline$BDLSystemPowerIoCompletion$16$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_80#1:
- goto inline$BDLGetDebugLevel$445$Entry#1;
-
- inline$BDLGetDebugLevel$445$Entry#1:
- goto inline$BDLGetDebugLevel$445$start#1;
-
- inline$BDLGetDebugLevel$445$start#1:
- goto inline$BDLGetDebugLevel$445$label_3#1;
-
- inline$BDLGetDebugLevel$445$label_3#1:
- havoc inline$BDLGetDebugLevel$445$myNondetVar_0;
- inline$BDLGetDebugLevel$445$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$445$myNondetVar_0;
- goto inline$BDLGetDebugLevel$445$label_1#1;
-
- inline$BDLGetDebugLevel$445$label_1#1:
- goto inline$BDLGetDebugLevel$445$Return#1;
-
- inline$BDLGetDebugLevel$445$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$445$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon47_Then#1, inline$BDLSystemPowerIoCompletion$16$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_83_true#1, inline$BDLSystemPowerIoCompletion$16$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_87#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_88#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_89#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$16$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_84#1:
- goto inline$BDLGetDebugLevel$446$Entry#1;
-
- inline$BDLGetDebugLevel$446$Entry#1:
- goto inline$BDLGetDebugLevel$446$start#1;
-
- inline$BDLGetDebugLevel$446$start#1:
- goto inline$BDLGetDebugLevel$446$label_3#1;
-
- inline$BDLGetDebugLevel$446$label_3#1:
- havoc inline$BDLGetDebugLevel$446$myNondetVar_0;
- inline$BDLGetDebugLevel$446$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$446$myNondetVar_0;
- goto inline$BDLGetDebugLevel$446$label_1#1;
-
- inline$BDLGetDebugLevel$446$label_1#1:
- goto inline$BDLGetDebugLevel$446$Return#1;
-
- inline$BDLGetDebugLevel$446$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$446$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon48_Then#1, inline$BDLSystemPowerIoCompletion$16$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_93_true#1, inline$BDLSystemPowerIoCompletion$16$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_97#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_98#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_99#1:
- call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$16$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$16$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_94#1:
- goto inline$BDLGetDebugLevel$447$Entry#1;
-
- inline$BDLGetDebugLevel$447$Entry#1:
- goto inline$BDLGetDebugLevel$447$start#1;
-
- inline$BDLGetDebugLevel$447$start#1:
- goto inline$BDLGetDebugLevel$447$label_3#1;
-
- inline$BDLGetDebugLevel$447$label_3#1:
- havoc inline$BDLGetDebugLevel$447$myNondetVar_0;
- inline$BDLGetDebugLevel$447$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$447$myNondetVar_0;
- goto inline$BDLGetDebugLevel$447$label_1#1;
-
- inline$BDLGetDebugLevel$447$label_1#1:
- goto inline$BDLGetDebugLevel$447$Return#1;
-
- inline$BDLGetDebugLevel$447$Return#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$447$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$16$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$16$anon49_Then#1, inline$BDLSystemPowerIoCompletion$16$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_103_true#1, inline$BDLSystemPowerIoCompletion$16$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$16$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$16$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_104#1:
- inline$BDLSystemPowerIoCompletion$16$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$16$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$16$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$16$Return#1;
-
- inline$BDLSystemPowerIoCompletion$16$Return#1:
- inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$16$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$16$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$16$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$16$anon14_Then#1, inline$CallCompletionRoutine$16$anon14_Else#1;
-
- inline$CallCompletionRoutine$16$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$16$anon9#1;
-
- inline$CallCompletionRoutine$16$anon9#1:
- goto inline$CallCompletionRoutine$16$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$16$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$16$Return#1;
-
- inline$CallCompletionRoutine$16$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$16$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$16$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$16$Entry#1:
- inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$16$start#1;
-
- inline$BDLDevicePowerIoCompletion$16$start#1:
- call inline$BDLDevicePowerIoCompletion$16$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$16$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_4#1:
- inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_6#1:
- inline$BDLDevicePowerIoCompletion$16$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$16$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$16$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$16$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$86$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$86$Entry#1:
- inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$86$start#1;
-
- inline$IoGetCurrentIrpStackLocation$86$start#1:
- inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$86$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$86$label_3_true#1, inline$IoGetCurrentIrpStackLocation$86$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$86$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$86$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$86$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$86$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$86$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$86$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$86$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$86$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$86$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$86$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$86$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$86$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$86$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$86$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$86$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$86$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$86$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$86$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$86$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$86$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$86$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$86$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$86$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon30_Then#1, inline$BDLDevicePowerIoCompletion$16$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_13#1:
- inline$BDLDevicePowerIoCompletion$16$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$16$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$16$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_17#1:
- goto inline$BDLGetDebugLevel$430$Entry#1;
-
- inline$BDLGetDebugLevel$430$Entry#1:
- goto inline$BDLGetDebugLevel$430$start#1;
-
- inline$BDLGetDebugLevel$430$start#1:
- goto inline$BDLGetDebugLevel$430$label_3#1;
-
- inline$BDLGetDebugLevel$430$label_3#1:
- havoc inline$BDLGetDebugLevel$430$myNondetVar_0;
- inline$BDLGetDebugLevel$430$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$430$myNondetVar_0;
- goto inline$BDLGetDebugLevel$430$label_1#1;
-
- inline$BDLGetDebugLevel$430$label_1#1:
- goto inline$BDLGetDebugLevel$430$Return#1;
-
- inline$BDLGetDebugLevel$430$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$430$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon31_Then#1, inline$BDLDevicePowerIoCompletion$16$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_20_true#1, inline$BDLDevicePowerIoCompletion$16$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_24#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_25#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_26#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$16$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_21#1:
- goto inline$BDLGetDebugLevel$431$Entry#1;
-
- inline$BDLGetDebugLevel$431$Entry#1:
- goto inline$BDLGetDebugLevel$431$start#1;
-
- inline$BDLGetDebugLevel$431$start#1:
- goto inline$BDLGetDebugLevel$431$label_3#1;
-
- inline$BDLGetDebugLevel$431$label_3#1:
- havoc inline$BDLGetDebugLevel$431$myNondetVar_0;
- inline$BDLGetDebugLevel$431$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$431$myNondetVar_0;
- goto inline$BDLGetDebugLevel$431$label_1#1;
-
- inline$BDLGetDebugLevel$431$label_1#1:
- goto inline$BDLGetDebugLevel$431$Return#1;
-
- inline$BDLGetDebugLevel$431$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$431$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon32_Then#1, inline$BDLDevicePowerIoCompletion$16$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_30_true#1, inline$BDLDevicePowerIoCompletion$16$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_34#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_35#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_36#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$16$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_31#1:
- goto inline$BDLGetDebugLevel$432$Entry#1;
-
- inline$BDLGetDebugLevel$432$Entry#1:
- goto inline$BDLGetDebugLevel$432$start#1;
-
- inline$BDLGetDebugLevel$432$start#1:
- goto inline$BDLGetDebugLevel$432$label_3#1;
-
- inline$BDLGetDebugLevel$432$label_3#1:
- havoc inline$BDLGetDebugLevel$432$myNondetVar_0;
- inline$BDLGetDebugLevel$432$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$432$myNondetVar_0;
- goto inline$BDLGetDebugLevel$432$label_1#1;
-
- inline$BDLGetDebugLevel$432$label_1#1:
- goto inline$BDLGetDebugLevel$432$Return#1;
-
- inline$BDLGetDebugLevel$432$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$432$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon33_Then#1, inline$BDLDevicePowerIoCompletion$16$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_40_true#1, inline$BDLDevicePowerIoCompletion$16$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_41_true#1, inline$BDLDevicePowerIoCompletion$16$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$16$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$16$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_44_true#1, inline$BDLDevicePowerIoCompletion$16$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$16$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_45_true#1, inline$BDLDevicePowerIoCompletion$16$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$16$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$16$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$16$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$16$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$16$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$16$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_54#1:
- inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$16$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_55_true#1, inline$BDLDevicePowerIoCompletion$16$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_56#1:
- call inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$16$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$16$anon34_Then#1, inline$BDLDevicePowerIoCompletion$16$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_59#1:
- goto inline$BDLGetDebugLevel$433$Entry#1;
-
- inline$BDLGetDebugLevel$433$Entry#1:
- goto inline$BDLGetDebugLevel$433$start#1;
-
- inline$BDLGetDebugLevel$433$start#1:
- goto inline$BDLGetDebugLevel$433$label_3#1;
-
- inline$BDLGetDebugLevel$433$label_3#1:
- havoc inline$BDLGetDebugLevel$433$myNondetVar_0;
- inline$BDLGetDebugLevel$433$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$433$myNondetVar_0;
- goto inline$BDLGetDebugLevel$433$label_1#1;
-
- inline$BDLGetDebugLevel$433$label_1#1:
- goto inline$BDLGetDebugLevel$433$Return#1;
-
- inline$BDLGetDebugLevel$433$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$433$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon35_Then#1, inline$BDLDevicePowerIoCompletion$16$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_62_true#1, inline$BDLDevicePowerIoCompletion$16$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_66#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_67#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_68#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$16$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_63#1:
- goto inline$BDLGetDebugLevel$434$Entry#1;
-
- inline$BDLGetDebugLevel$434$Entry#1:
- goto inline$BDLGetDebugLevel$434$start#1;
-
- inline$BDLGetDebugLevel$434$start#1:
- goto inline$BDLGetDebugLevel$434$label_3#1;
-
- inline$BDLGetDebugLevel$434$label_3#1:
- havoc inline$BDLGetDebugLevel$434$myNondetVar_0;
- inline$BDLGetDebugLevel$434$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$434$myNondetVar_0;
- goto inline$BDLGetDebugLevel$434$label_1#1;
-
- inline$BDLGetDebugLevel$434$label_1#1:
- goto inline$BDLGetDebugLevel$434$Return#1;
-
- inline$BDLGetDebugLevel$434$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$434$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon36_Then#1, inline$BDLDevicePowerIoCompletion$16$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_72_true#1, inline$BDLDevicePowerIoCompletion$16$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_76#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_77#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_78#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$16$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_73#1:
- goto inline$BDLGetDebugLevel$435$Entry#1;
-
- inline$BDLGetDebugLevel$435$Entry#1:
- goto inline$BDLGetDebugLevel$435$start#1;
-
- inline$BDLGetDebugLevel$435$start#1:
- goto inline$BDLGetDebugLevel$435$label_3#1;
-
- inline$BDLGetDebugLevel$435$label_3#1:
- havoc inline$BDLGetDebugLevel$435$myNondetVar_0;
- inline$BDLGetDebugLevel$435$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$435$myNondetVar_0;
- goto inline$BDLGetDebugLevel$435$label_1#1;
-
- inline$BDLGetDebugLevel$435$label_1#1:
- goto inline$BDLGetDebugLevel$435$Return#1;
-
- inline$BDLGetDebugLevel$435$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$435$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon37_Then#1, inline$BDLDevicePowerIoCompletion$16$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_82_true#1, inline$BDLDevicePowerIoCompletion$16$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$16$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$16$anon38_Then#1, inline$BDLDevicePowerIoCompletion$16$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$16$anon39_Then#1, inline$BDLDevicePowerIoCompletion$16$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_92#1:
- goto inline$storm_IoCompleteRequest$33$Entry#1;
-
- inline$storm_IoCompleteRequest$33$Entry#1:
- inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$33$start#1;
-
- inline$storm_IoCompleteRequest$33$start#1:
- inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$33$label_3#1;
-
- inline$storm_IoCompleteRequest$33$label_3#1:
- call inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$33$label_6#1;
-
- inline$storm_IoCompleteRequest$33$label_6#1:
- goto inline$storm_IoCompleteRequest$33$label_6_true#1, inline$storm_IoCompleteRequest$33$label_6_false#1;
-
- inline$storm_IoCompleteRequest$33$label_6_false#1:
- assume inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$33$label_7#1;
-
- inline$storm_IoCompleteRequest$33$label_6_true#1:
- assume inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$33$label_8#1;
-
- inline$storm_IoCompleteRequest$33$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$33$anon3_Then#1, inline$storm_IoCompleteRequest$33$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$33$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$33$anon1#1;
-
- inline$storm_IoCompleteRequest$33$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$33$label_9#1;
-
- inline$storm_IoCompleteRequest$33$label_9#1:
- goto inline$storm_IoCompleteRequest$33$label_9_true#1, inline$storm_IoCompleteRequest$33$label_9_false#1;
-
- inline$storm_IoCompleteRequest$33$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$33$label_10#1;
-
- inline$storm_IoCompleteRequest$33$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$33$label_1#1;
-
- inline$storm_IoCompleteRequest$33$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$33$label_7#1;
-
- inline$storm_IoCompleteRequest$33$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$33$label_1#1;
-
- inline$storm_IoCompleteRequest$33$label_1#1:
- goto inline$storm_IoCompleteRequest$33$Return#1;
-
- inline$storm_IoCompleteRequest$33$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$33$Return#1;
-
- inline$storm_IoCompleteRequest$33$Return#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon40_Then#1, inline$BDLDevicePowerIoCompletion$16$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$16$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$16$anon41_Then#1, inline$BDLDevicePowerIoCompletion$16$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_98#1:
- goto inline$BDLGetDebugLevel$436$Entry#1;
-
- inline$BDLGetDebugLevel$436$Entry#1:
- goto inline$BDLGetDebugLevel$436$start#1;
-
- inline$BDLGetDebugLevel$436$start#1:
- goto inline$BDLGetDebugLevel$436$label_3#1;
-
- inline$BDLGetDebugLevel$436$label_3#1:
- havoc inline$BDLGetDebugLevel$436$myNondetVar_0;
- inline$BDLGetDebugLevel$436$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$436$myNondetVar_0;
- goto inline$BDLGetDebugLevel$436$label_1#1;
-
- inline$BDLGetDebugLevel$436$label_1#1:
- goto inline$BDLGetDebugLevel$436$Return#1;
-
- inline$BDLGetDebugLevel$436$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$436$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon42_Then#1, inline$BDLDevicePowerIoCompletion$16$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_101_true#1, inline$BDLDevicePowerIoCompletion$16$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_105#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_106#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_107#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$16$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_102#1:
- goto inline$BDLGetDebugLevel$437$Entry#1;
-
- inline$BDLGetDebugLevel$437$Entry#1:
- goto inline$BDLGetDebugLevel$437$start#1;
-
- inline$BDLGetDebugLevel$437$start#1:
- goto inline$BDLGetDebugLevel$437$label_3#1;
-
- inline$BDLGetDebugLevel$437$label_3#1:
- havoc inline$BDLGetDebugLevel$437$myNondetVar_0;
- inline$BDLGetDebugLevel$437$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$437$myNondetVar_0;
- goto inline$BDLGetDebugLevel$437$label_1#1;
-
- inline$BDLGetDebugLevel$437$label_1#1:
- goto inline$BDLGetDebugLevel$437$Return#1;
-
- inline$BDLGetDebugLevel$437$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$437$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon43_Then#1, inline$BDLDevicePowerIoCompletion$16$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_111_true#1, inline$BDLDevicePowerIoCompletion$16$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_115#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_116#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_117#1:
- call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$16$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$16$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_112#1:
- goto inline$BDLGetDebugLevel$438$Entry#1;
-
- inline$BDLGetDebugLevel$438$Entry#1:
- goto inline$BDLGetDebugLevel$438$start#1;
-
- inline$BDLGetDebugLevel$438$start#1:
- goto inline$BDLGetDebugLevel$438$label_3#1;
-
- inline$BDLGetDebugLevel$438$label_3#1:
- havoc inline$BDLGetDebugLevel$438$myNondetVar_0;
- inline$BDLGetDebugLevel$438$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$438$myNondetVar_0;
- goto inline$BDLGetDebugLevel$438$label_1#1;
-
- inline$BDLGetDebugLevel$438$label_1#1:
- goto inline$BDLGetDebugLevel$438$Return#1;
-
- inline$BDLGetDebugLevel$438$Return#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$438$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$16$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$16$anon44_Then#1, inline$BDLDevicePowerIoCompletion$16$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_121_true#1, inline$BDLDevicePowerIoCompletion$16$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$16$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$16$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_122#1:
- inline$BDLDevicePowerIoCompletion$16$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$16$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$16$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$16$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$16$Return#1;
-
- inline$BDLDevicePowerIoCompletion$16$Return#1:
- inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$16$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$16$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$16$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$16$anon13_Then#1, inline$CallCompletionRoutine$16$anon13_Else#1;
-
- inline$CallCompletionRoutine$16$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$16$anon7#1;
-
- inline$CallCompletionRoutine$16$anon7#1:
- goto inline$CallCompletionRoutine$16$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$16$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$16$Return#1;
-
- inline$CallCompletionRoutine$16$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$16$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$16$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$16$Entry#1:
- inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$16$start#1;
-
- inline$BDLCallDriverCompletionRoutine$16$start#1:
- inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$16$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$16$label_3_true#1, inline$BDLCallDriverCompletionRoutine$16$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$16$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$16$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$16$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$16$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_6#1:
- goto inline$storm_KeSetEvent$18$Entry#1;
-
- inline$storm_KeSetEvent$18$Entry#1:
- inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$18$start#1;
-
- inline$storm_KeSetEvent$18$start#1:
- inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$18$label_3#1;
-
- inline$storm_KeSetEvent$18$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$18$label_1#1;
-
- inline$storm_KeSetEvent$18$label_1#1:
- goto inline$storm_KeSetEvent$18$Return#1;
-
- inline$storm_KeSetEvent$18$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$16$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$16$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$16$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$16$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$16$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$16$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$16$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_9#1:
- inline$BDLCallDriverCompletionRoutine$16$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$16$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$16$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$16$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$16$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$16$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$16$Return#1:
- inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$16$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$16$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$16$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$16$anon12_Then#1, inline$CallCompletionRoutine$16$anon12_Else#1;
-
- inline$CallCompletionRoutine$16$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$16$anon5#1;
-
- inline$CallCompletionRoutine$16$anon5#1:
- goto inline$CallCompletionRoutine$16$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$16$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$16$label_23#1;
-
- inline$CallCompletionRoutine$16$label_23#1:
- inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$16$label_24#1;
-
- inline$CallCompletionRoutine$16$label_24#1:
- goto inline$CallCompletionRoutine$16$label_24_true#1, inline$CallCompletionRoutine$16$label_24_false#1;
-
- inline$CallCompletionRoutine$16$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$16$label_1#1;
-
- inline$CallCompletionRoutine$16$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$16$label_25#1;
-
- inline$CallCompletionRoutine$16$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$16$label_1#1;
-
- inline$CallCompletionRoutine$16$label_1#1:
- goto inline$CallCompletionRoutine$16$Return#1;
-
- inline$CallCompletionRoutine$16$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$16$Return#1;
-
- inline$CallCompletionRoutine$16$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$16$Return#1;
-
- inline$CallCompletionRoutine$16$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$16$Return#1;
-
- inline$CallCompletionRoutine$16$Return#1:
- goto inline$storm_IoCallDriver$8$label_33$1#1;
-
- inline$storm_IoCallDriver$8$label_33$1#1:
- goto inline$storm_IoCallDriver$8$anon14_Then#1, inline$storm_IoCallDriver$8$anon14_Else#1;
-
- inline$storm_IoCallDriver$8$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$8$anon8#1;
-
- inline$storm_IoCallDriver$8$anon8#1:
- goto inline$storm_IoCallDriver$8$label_36#1;
-
- inline$storm_IoCallDriver$8$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$8$Return#1;
-
- inline$storm_IoCallDriver$8$label_27_case_1#1:
- assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$8$label_29#1;
-
- inline$storm_IoCallDriver$8$label_29#1:
- inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$8$label_37#1;
-
- inline$storm_IoCallDriver$8$label_37#1:
- goto inline$storm_IoCallDriver$8$label_38#1;
-
- inline$storm_IoCallDriver$8$label_38#1:
- goto inline$storm_IoCallDriver$8$label_39#1;
-
- inline$storm_IoCallDriver$8$label_39#1:
- goto inline$CallCompletionRoutine$17$Entry#1;
-
- inline$CallCompletionRoutine$17$Entry#1:
- inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$17$start#1;
-
- inline$CallCompletionRoutine$17$start#1:
- inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$17$label_3#1;
-
- inline$CallCompletionRoutine$17$label_3#1:
- goto inline$CallCompletionRoutine$17$label_4#1;
-
- inline$CallCompletionRoutine$17$label_4#1:
- goto inline$CallCompletionRoutine$17$label_5#1;
-
- inline$CallCompletionRoutine$17$label_5#1:
- goto inline$CallCompletionRoutine$17$label_6#1;
-
- inline$CallCompletionRoutine$17$label_6#1:
- goto inline$CallCompletionRoutine$17$label_7#1;
-
- inline$CallCompletionRoutine$17$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$88$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$88$Entry#1:
- inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$88$start#1;
-
- inline$IoGetCurrentIrpStackLocation$88$start#1:
- inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$88$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$88$label_3_true#1, inline$IoGetCurrentIrpStackLocation$88$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$88$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$88$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$88$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$88$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$88$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$88$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$88$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$88$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$88$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$88$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$88$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$88$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$88$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$88$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$88$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$88$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$88$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$88$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$88$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$88$Return#1:
- goto inline$CallCompletionRoutine$17$label_7$1#1;
-
- inline$CallCompletionRoutine$17$label_7$1#1:
- goto inline$CallCompletionRoutine$17$anon10_Then#1, inline$CallCompletionRoutine$17$anon10_Else#1;
-
- inline$CallCompletionRoutine$17$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$17$anon1#1;
-
- inline$CallCompletionRoutine$17$anon1#1:
- goto inline$CallCompletionRoutine$17$label_10#1;
-
- inline$CallCompletionRoutine$17$label_10#1:
- goto inline$CallCompletionRoutine$17$label_11#1;
-
- inline$CallCompletionRoutine$17$label_11#1:
- havoc inline$CallCompletionRoutine$17$myNondetVar_0;
- inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$myNondetVar_0;
- goto inline$CallCompletionRoutine$17$label_12#1;
-
- inline$CallCompletionRoutine$17$label_12#1:
- havoc inline$CallCompletionRoutine$17$myNondetVar_0;
- inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$myNondetVar_0;
- goto inline$CallCompletionRoutine$17$label_13#1;
-
- inline$CallCompletionRoutine$17$label_13#1:
- havoc inline$CallCompletionRoutine$17$myNondetVar_0;
- goto inline$CallCompletionRoutine$17$label_14#1;
-
- inline$CallCompletionRoutine$17$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$89$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$89$Entry#1:
- inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$89$start#1;
-
- inline$IoGetCurrentIrpStackLocation$89$start#1:
- inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$89$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$89$label_3_true#1, inline$IoGetCurrentIrpStackLocation$89$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$89$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$89$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$89$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$89$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$89$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$89$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$89$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$89$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$89$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$89$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$89$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$89$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$89$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$89$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$89$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$89$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$89$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$89$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$89$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$89$Return#1:
- goto inline$CallCompletionRoutine$17$label_14$1#1;
-
- inline$CallCompletionRoutine$17$label_14$1#1:
- goto inline$CallCompletionRoutine$17$anon11_Then#1, inline$CallCompletionRoutine$17$anon11_Else#1;
-
- inline$CallCompletionRoutine$17$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$17$anon3#1;
-
- inline$CallCompletionRoutine$17$anon3#1:
- goto inline$CallCompletionRoutine$17$label_17#1;
-
- inline$CallCompletionRoutine$17$label_17#1:
- goto inline$CallCompletionRoutine$17$label_18#1;
-
- inline$CallCompletionRoutine$17$label_18#1:
- goto inline$CallCompletionRoutine$17$label_18_true#1, inline$CallCompletionRoutine$17$label_18_false#1;
-
- inline$CallCompletionRoutine$17$label_18_false#1:
- assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$17$label_1#1;
-
- inline$CallCompletionRoutine$17$label_18_true#1:
- assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$17$label_19#1;
-
- inline$CallCompletionRoutine$17$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$17$label_20#1;
-
- inline$CallCompletionRoutine$17$label_20#1:
- goto inline$CallCompletionRoutine$17$label_20_icall_1#1, inline$CallCompletionRoutine$17$label_20_icall_2#1, inline$CallCompletionRoutine$17$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$17$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$17$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$17$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$17$Entry#1:
- inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$17$start#1;
-
- inline$BDLSystemPowerIoCompletion$17$start#1:
- call inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$17$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_4#1:
- inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_6#1:
- inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$17$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$17$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$17$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$91$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$91$Entry#1:
- inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$91$start#1;
-
- inline$IoGetCurrentIrpStackLocation$91$start#1:
- inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$91$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$91$label_3_true#1, inline$IoGetCurrentIrpStackLocation$91$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$91$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$91$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$91$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$91$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$91$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$91$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$91$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$91$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$91$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$91$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$91$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$91$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$91$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$91$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$91$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$91$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$91$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$91$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$91$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$91$Return#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon36_Then#1, inline$BDLSystemPowerIoCompletion$17$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_15#1:
- goto inline$BDLGetDebugLevel$460$Entry#1;
-
- inline$BDLGetDebugLevel$460$Entry#1:
- goto inline$BDLGetDebugLevel$460$start#1;
-
- inline$BDLGetDebugLevel$460$start#1:
- goto inline$BDLGetDebugLevel$460$label_3#1;
-
- inline$BDLGetDebugLevel$460$label_3#1:
- havoc inline$BDLGetDebugLevel$460$myNondetVar_0;
- inline$BDLGetDebugLevel$460$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$460$myNondetVar_0;
- goto inline$BDLGetDebugLevel$460$label_1#1;
-
- inline$BDLGetDebugLevel$460$label_1#1:
- goto inline$BDLGetDebugLevel$460$Return#1;
-
- inline$BDLGetDebugLevel$460$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$460$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon37_Then#1, inline$BDLSystemPowerIoCompletion$17$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_18_true#1, inline$BDLSystemPowerIoCompletion$17$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_22#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_23#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_24#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$17$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_19#1:
- goto inline$BDLGetDebugLevel$461$Entry#1;
-
- inline$BDLGetDebugLevel$461$Entry#1:
- goto inline$BDLGetDebugLevel$461$start#1;
-
- inline$BDLGetDebugLevel$461$start#1:
- goto inline$BDLGetDebugLevel$461$label_3#1;
-
- inline$BDLGetDebugLevel$461$label_3#1:
- havoc inline$BDLGetDebugLevel$461$myNondetVar_0;
- inline$BDLGetDebugLevel$461$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$461$myNondetVar_0;
- goto inline$BDLGetDebugLevel$461$label_1#1;
-
- inline$BDLGetDebugLevel$461$label_1#1:
- goto inline$BDLGetDebugLevel$461$Return#1;
-
- inline$BDLGetDebugLevel$461$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$461$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon38_Then#1, inline$BDLSystemPowerIoCompletion$17$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_28_true#1, inline$BDLSystemPowerIoCompletion$17$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_32#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_33#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_34#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$17$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_29#1:
- goto inline$BDLGetDebugLevel$462$Entry#1;
-
- inline$BDLGetDebugLevel$462$Entry#1:
- goto inline$BDLGetDebugLevel$462$start#1;
-
- inline$BDLGetDebugLevel$462$start#1:
- goto inline$BDLGetDebugLevel$462$label_3#1;
-
- inline$BDLGetDebugLevel$462$label_3#1:
- havoc inline$BDLGetDebugLevel$462$myNondetVar_0;
- inline$BDLGetDebugLevel$462$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$462$myNondetVar_0;
- goto inline$BDLGetDebugLevel$462$label_1#1;
-
- inline$BDLGetDebugLevel$462$label_1#1:
- goto inline$BDLGetDebugLevel$462$Return#1;
-
- inline$BDLGetDebugLevel$462$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$462$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon39_Then#1, inline$BDLSystemPowerIoCompletion$17$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_38_true#1, inline$BDLSystemPowerIoCompletion$17$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_39_true#1, inline$BDLSystemPowerIoCompletion$17$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$17$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$17$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$17$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_106_true#1, inline$BDLSystemPowerIoCompletion$17$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_142#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_143#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$17$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$17$myNondetVar_0, inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$17$anon50_Then#1, inline$BDLSystemPowerIoCompletion$17$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_112#1:
- inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$17$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_113_true#1, inline$BDLSystemPowerIoCompletion$17$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$17$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_117#1:
- goto inline$BDLGetDebugLevel$469$Entry#1;
-
- inline$BDLGetDebugLevel$469$Entry#1:
- goto inline$BDLGetDebugLevel$469$start#1;
-
- inline$BDLGetDebugLevel$469$start#1:
- goto inline$BDLGetDebugLevel$469$label_3#1;
-
- inline$BDLGetDebugLevel$469$label_3#1:
- havoc inline$BDLGetDebugLevel$469$myNondetVar_0;
- inline$BDLGetDebugLevel$469$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$469$myNondetVar_0;
- goto inline$BDLGetDebugLevel$469$label_1#1;
-
- inline$BDLGetDebugLevel$469$label_1#1:
- goto inline$BDLGetDebugLevel$469$Return#1;
-
- inline$BDLGetDebugLevel$469$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$469$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon51_Then#1, inline$BDLSystemPowerIoCompletion$17$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_120_true#1, inline$BDLSystemPowerIoCompletion$17$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_124#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_125#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_126#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$17$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_121#1:
- goto inline$BDLGetDebugLevel$470$Entry#1;
-
- inline$BDLGetDebugLevel$470$Entry#1:
- goto inline$BDLGetDebugLevel$470$start#1;
-
- inline$BDLGetDebugLevel$470$start#1:
- goto inline$BDLGetDebugLevel$470$label_3#1;
-
- inline$BDLGetDebugLevel$470$label_3#1:
- havoc inline$BDLGetDebugLevel$470$myNondetVar_0;
- inline$BDLGetDebugLevel$470$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$470$myNondetVar_0;
- goto inline$BDLGetDebugLevel$470$label_1#1;
-
- inline$BDLGetDebugLevel$470$label_1#1:
- goto inline$BDLGetDebugLevel$470$Return#1;
-
- inline$BDLGetDebugLevel$470$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$470$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon52_Then#1, inline$BDLSystemPowerIoCompletion$17$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_130_true#1, inline$BDLSystemPowerIoCompletion$17$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_134#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_135#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_136#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$17$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_131#1:
- goto inline$BDLGetDebugLevel$471$Entry#1;
-
- inline$BDLGetDebugLevel$471$Entry#1:
- goto inline$BDLGetDebugLevel$471$start#1;
-
- inline$BDLGetDebugLevel$471$start#1:
- goto inline$BDLGetDebugLevel$471$label_3#1;
-
- inline$BDLGetDebugLevel$471$label_3#1:
- havoc inline$BDLGetDebugLevel$471$myNondetVar_0;
- inline$BDLGetDebugLevel$471$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$471$myNondetVar_0;
- goto inline$BDLGetDebugLevel$471$label_1#1;
-
- inline$BDLGetDebugLevel$471$label_1#1:
- goto inline$BDLGetDebugLevel$471$Return#1;
-
- inline$BDLGetDebugLevel$471$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$471$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon53_Then#1, inline$BDLSystemPowerIoCompletion$17$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_140_true#1, inline$BDLSystemPowerIoCompletion$17$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$17$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_115#1:
- inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$17$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$17$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_43#1:
- goto inline$BDLGetDebugLevel$463$Entry#1;
-
- inline$BDLGetDebugLevel$463$Entry#1:
- goto inline$BDLGetDebugLevel$463$start#1;
-
- inline$BDLGetDebugLevel$463$start#1:
- goto inline$BDLGetDebugLevel$463$label_3#1;
-
- inline$BDLGetDebugLevel$463$label_3#1:
- havoc inline$BDLGetDebugLevel$463$myNondetVar_0;
- inline$BDLGetDebugLevel$463$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$463$myNondetVar_0;
- goto inline$BDLGetDebugLevel$463$label_1#1;
-
- inline$BDLGetDebugLevel$463$label_1#1:
- goto inline$BDLGetDebugLevel$463$Return#1;
-
- inline$BDLGetDebugLevel$463$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$463$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon40_Then#1, inline$BDLSystemPowerIoCompletion$17$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_46_true#1, inline$BDLSystemPowerIoCompletion$17$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_50#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_51#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_52#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$17$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_47#1:
- goto inline$BDLGetDebugLevel$464$Entry#1;
-
- inline$BDLGetDebugLevel$464$Entry#1:
- goto inline$BDLGetDebugLevel$464$start#1;
-
- inline$BDLGetDebugLevel$464$start#1:
- goto inline$BDLGetDebugLevel$464$label_3#1;
-
- inline$BDLGetDebugLevel$464$label_3#1:
- havoc inline$BDLGetDebugLevel$464$myNondetVar_0;
- inline$BDLGetDebugLevel$464$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$464$myNondetVar_0;
- goto inline$BDLGetDebugLevel$464$label_1#1;
-
- inline$BDLGetDebugLevel$464$label_1#1:
- goto inline$BDLGetDebugLevel$464$Return#1;
-
- inline$BDLGetDebugLevel$464$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$464$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon41_Then#1, inline$BDLSystemPowerIoCompletion$17$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_56_true#1, inline$BDLSystemPowerIoCompletion$17$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_60#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_61#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_62#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$17$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_57#1:
- goto inline$BDLGetDebugLevel$465$Entry#1;
-
- inline$BDLGetDebugLevel$465$Entry#1:
- goto inline$BDLGetDebugLevel$465$start#1;
-
- inline$BDLGetDebugLevel$465$start#1:
- goto inline$BDLGetDebugLevel$465$label_3#1;
-
- inline$BDLGetDebugLevel$465$label_3#1:
- havoc inline$BDLGetDebugLevel$465$myNondetVar_0;
- inline$BDLGetDebugLevel$465$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$465$myNondetVar_0;
- goto inline$BDLGetDebugLevel$465$label_1#1;
-
- inline$BDLGetDebugLevel$465$label_1#1:
- goto inline$BDLGetDebugLevel$465$Return#1;
-
- inline$BDLGetDebugLevel$465$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$465$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon42_Then#1, inline$BDLSystemPowerIoCompletion$17$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_66_true#1, inline$BDLSystemPowerIoCompletion$17$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$17$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$17$anon43_Then#1, inline$BDLSystemPowerIoCompletion$17$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$17$anon44_Then#1, inline$BDLSystemPowerIoCompletion$17$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_74#1:
- goto inline$storm_IoCompleteRequest$36$Entry#1;
-
- inline$storm_IoCompleteRequest$36$Entry#1:
- inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$36$start#1;
-
- inline$storm_IoCompleteRequest$36$start#1:
- inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$36$label_3#1;
-
- inline$storm_IoCompleteRequest$36$label_3#1:
- call inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$36$label_6#1;
-
- inline$storm_IoCompleteRequest$36$label_6#1:
- goto inline$storm_IoCompleteRequest$36$label_6_true#1, inline$storm_IoCompleteRequest$36$label_6_false#1;
-
- inline$storm_IoCompleteRequest$36$label_6_false#1:
- assume inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$36$label_7#1;
-
- inline$storm_IoCompleteRequest$36$label_6_true#1:
- assume inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$36$label_8#1;
-
- inline$storm_IoCompleteRequest$36$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$36$anon3_Then#1, inline$storm_IoCompleteRequest$36$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$36$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$36$anon1#1;
-
- inline$storm_IoCompleteRequest$36$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$36$label_9#1;
-
- inline$storm_IoCompleteRequest$36$label_9#1:
- goto inline$storm_IoCompleteRequest$36$label_9_true#1, inline$storm_IoCompleteRequest$36$label_9_false#1;
-
- inline$storm_IoCompleteRequest$36$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$36$label_10#1;
-
- inline$storm_IoCompleteRequest$36$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$36$label_1#1;
-
- inline$storm_IoCompleteRequest$36$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$36$label_7#1;
-
- inline$storm_IoCompleteRequest$36$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$36$label_1#1;
-
- inline$storm_IoCompleteRequest$36$label_1#1:
- goto inline$storm_IoCompleteRequest$36$Return#1;
-
- inline$storm_IoCompleteRequest$36$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$36$Return#1;
-
- inline$storm_IoCompleteRequest$36$Return#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon45_Then#1, inline$BDLSystemPowerIoCompletion$17$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$17$anon46_Then#1, inline$BDLSystemPowerIoCompletion$17$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_80#1:
- goto inline$BDLGetDebugLevel$466$Entry#1;
-
- inline$BDLGetDebugLevel$466$Entry#1:
- goto inline$BDLGetDebugLevel$466$start#1;
-
- inline$BDLGetDebugLevel$466$start#1:
- goto inline$BDLGetDebugLevel$466$label_3#1;
-
- inline$BDLGetDebugLevel$466$label_3#1:
- havoc inline$BDLGetDebugLevel$466$myNondetVar_0;
- inline$BDLGetDebugLevel$466$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$466$myNondetVar_0;
- goto inline$BDLGetDebugLevel$466$label_1#1;
-
- inline$BDLGetDebugLevel$466$label_1#1:
- goto inline$BDLGetDebugLevel$466$Return#1;
-
- inline$BDLGetDebugLevel$466$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$466$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon47_Then#1, inline$BDLSystemPowerIoCompletion$17$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_83_true#1, inline$BDLSystemPowerIoCompletion$17$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_87#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_88#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_89#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$17$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_84#1:
- goto inline$BDLGetDebugLevel$467$Entry#1;
-
- inline$BDLGetDebugLevel$467$Entry#1:
- goto inline$BDLGetDebugLevel$467$start#1;
-
- inline$BDLGetDebugLevel$467$start#1:
- goto inline$BDLGetDebugLevel$467$label_3#1;
-
- inline$BDLGetDebugLevel$467$label_3#1:
- havoc inline$BDLGetDebugLevel$467$myNondetVar_0;
- inline$BDLGetDebugLevel$467$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$467$myNondetVar_0;
- goto inline$BDLGetDebugLevel$467$label_1#1;
-
- inline$BDLGetDebugLevel$467$label_1#1:
- goto inline$BDLGetDebugLevel$467$Return#1;
-
- inline$BDLGetDebugLevel$467$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$467$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon48_Then#1, inline$BDLSystemPowerIoCompletion$17$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_93_true#1, inline$BDLSystemPowerIoCompletion$17$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_97#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_98#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_99#1:
- call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$17$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$17$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_94#1:
- goto inline$BDLGetDebugLevel$468$Entry#1;
-
- inline$BDLGetDebugLevel$468$Entry#1:
- goto inline$BDLGetDebugLevel$468$start#1;
-
- inline$BDLGetDebugLevel$468$start#1:
- goto inline$BDLGetDebugLevel$468$label_3#1;
-
- inline$BDLGetDebugLevel$468$label_3#1:
- havoc inline$BDLGetDebugLevel$468$myNondetVar_0;
- inline$BDLGetDebugLevel$468$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$468$myNondetVar_0;
- goto inline$BDLGetDebugLevel$468$label_1#1;
-
- inline$BDLGetDebugLevel$468$label_1#1:
- goto inline$BDLGetDebugLevel$468$Return#1;
-
- inline$BDLGetDebugLevel$468$Return#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$468$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$17$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$17$anon49_Then#1, inline$BDLSystemPowerIoCompletion$17$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_103_true#1, inline$BDLSystemPowerIoCompletion$17$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$17$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$17$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_104#1:
- inline$BDLSystemPowerIoCompletion$17$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$17$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$17$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$17$Return#1;
-
- inline$BDLSystemPowerIoCompletion$17$Return#1:
- inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$17$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$17$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$17$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$17$anon14_Then#1, inline$CallCompletionRoutine$17$anon14_Else#1;
-
- inline$CallCompletionRoutine$17$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$17$anon9#1;
-
- inline$CallCompletionRoutine$17$anon9#1:
- goto inline$CallCompletionRoutine$17$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$17$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$17$Return#1;
-
- inline$CallCompletionRoutine$17$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$17$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$17$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$17$Entry#1:
- inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$17$start#1;
-
- inline$BDLDevicePowerIoCompletion$17$start#1:
- call inline$BDLDevicePowerIoCompletion$17$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$17$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_4#1:
- inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_6#1:
- inline$BDLDevicePowerIoCompletion$17$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$17$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$17$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$17$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$90$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$90$Entry#1:
- inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$90$start#1;
-
- inline$IoGetCurrentIrpStackLocation$90$start#1:
- inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$90$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$90$label_3_true#1, inline$IoGetCurrentIrpStackLocation$90$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$90$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$90$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$90$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$90$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$90$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$90$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$90$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$90$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$90$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$90$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$90$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$90$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$90$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$90$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$90$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$90$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$90$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$90$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$90$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$90$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$90$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$90$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$90$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon30_Then#1, inline$BDLDevicePowerIoCompletion$17$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_13#1:
- inline$BDLDevicePowerIoCompletion$17$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$17$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$17$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_17#1:
- goto inline$BDLGetDebugLevel$451$Entry#1;
-
- inline$BDLGetDebugLevel$451$Entry#1:
- goto inline$BDLGetDebugLevel$451$start#1;
-
- inline$BDLGetDebugLevel$451$start#1:
- goto inline$BDLGetDebugLevel$451$label_3#1;
-
- inline$BDLGetDebugLevel$451$label_3#1:
- havoc inline$BDLGetDebugLevel$451$myNondetVar_0;
- inline$BDLGetDebugLevel$451$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$451$myNondetVar_0;
- goto inline$BDLGetDebugLevel$451$label_1#1;
-
- inline$BDLGetDebugLevel$451$label_1#1:
- goto inline$BDLGetDebugLevel$451$Return#1;
-
- inline$BDLGetDebugLevel$451$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$451$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon31_Then#1, inline$BDLDevicePowerIoCompletion$17$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_20_true#1, inline$BDLDevicePowerIoCompletion$17$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_24#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_25#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_26#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$17$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_21#1:
- goto inline$BDLGetDebugLevel$452$Entry#1;
-
- inline$BDLGetDebugLevel$452$Entry#1:
- goto inline$BDLGetDebugLevel$452$start#1;
-
- inline$BDLGetDebugLevel$452$start#1:
- goto inline$BDLGetDebugLevel$452$label_3#1;
-
- inline$BDLGetDebugLevel$452$label_3#1:
- havoc inline$BDLGetDebugLevel$452$myNondetVar_0;
- inline$BDLGetDebugLevel$452$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$452$myNondetVar_0;
- goto inline$BDLGetDebugLevel$452$label_1#1;
-
- inline$BDLGetDebugLevel$452$label_1#1:
- goto inline$BDLGetDebugLevel$452$Return#1;
-
- inline$BDLGetDebugLevel$452$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$452$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon32_Then#1, inline$BDLDevicePowerIoCompletion$17$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_30_true#1, inline$BDLDevicePowerIoCompletion$17$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_34#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_35#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_36#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$17$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_31#1:
- goto inline$BDLGetDebugLevel$453$Entry#1;
-
- inline$BDLGetDebugLevel$453$Entry#1:
- goto inline$BDLGetDebugLevel$453$start#1;
-
- inline$BDLGetDebugLevel$453$start#1:
- goto inline$BDLGetDebugLevel$453$label_3#1;
-
- inline$BDLGetDebugLevel$453$label_3#1:
- havoc inline$BDLGetDebugLevel$453$myNondetVar_0;
- inline$BDLGetDebugLevel$453$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$453$myNondetVar_0;
- goto inline$BDLGetDebugLevel$453$label_1#1;
-
- inline$BDLGetDebugLevel$453$label_1#1:
- goto inline$BDLGetDebugLevel$453$Return#1;
-
- inline$BDLGetDebugLevel$453$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$453$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon33_Then#1, inline$BDLDevicePowerIoCompletion$17$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_40_true#1, inline$BDLDevicePowerIoCompletion$17$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_41_true#1, inline$BDLDevicePowerIoCompletion$17$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$17$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$17$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_44_true#1, inline$BDLDevicePowerIoCompletion$17$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$17$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_45_true#1, inline$BDLDevicePowerIoCompletion$17$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$17$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$17$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$17$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$17$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$17$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$17$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_54#1:
- inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$17$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_55_true#1, inline$BDLDevicePowerIoCompletion$17$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_56#1:
- call inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$17$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$17$anon34_Then#1, inline$BDLDevicePowerIoCompletion$17$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_59#1:
- goto inline$BDLGetDebugLevel$454$Entry#1;
-
- inline$BDLGetDebugLevel$454$Entry#1:
- goto inline$BDLGetDebugLevel$454$start#1;
-
- inline$BDLGetDebugLevel$454$start#1:
- goto inline$BDLGetDebugLevel$454$label_3#1;
-
- inline$BDLGetDebugLevel$454$label_3#1:
- havoc inline$BDLGetDebugLevel$454$myNondetVar_0;
- inline$BDLGetDebugLevel$454$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$454$myNondetVar_0;
- goto inline$BDLGetDebugLevel$454$label_1#1;
-
- inline$BDLGetDebugLevel$454$label_1#1:
- goto inline$BDLGetDebugLevel$454$Return#1;
-
- inline$BDLGetDebugLevel$454$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$454$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon35_Then#1, inline$BDLDevicePowerIoCompletion$17$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_62_true#1, inline$BDLDevicePowerIoCompletion$17$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_66#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_67#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_68#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$17$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_63#1:
- goto inline$BDLGetDebugLevel$455$Entry#1;
-
- inline$BDLGetDebugLevel$455$Entry#1:
- goto inline$BDLGetDebugLevel$455$start#1;
-
- inline$BDLGetDebugLevel$455$start#1:
- goto inline$BDLGetDebugLevel$455$label_3#1;
-
- inline$BDLGetDebugLevel$455$label_3#1:
- havoc inline$BDLGetDebugLevel$455$myNondetVar_0;
- inline$BDLGetDebugLevel$455$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$455$myNondetVar_0;
- goto inline$BDLGetDebugLevel$455$label_1#1;
-
- inline$BDLGetDebugLevel$455$label_1#1:
- goto inline$BDLGetDebugLevel$455$Return#1;
-
- inline$BDLGetDebugLevel$455$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$455$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon36_Then#1, inline$BDLDevicePowerIoCompletion$17$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_72_true#1, inline$BDLDevicePowerIoCompletion$17$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_76#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_77#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_78#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$17$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_73#1:
- goto inline$BDLGetDebugLevel$456$Entry#1;
-
- inline$BDLGetDebugLevel$456$Entry#1:
- goto inline$BDLGetDebugLevel$456$start#1;
-
- inline$BDLGetDebugLevel$456$start#1:
- goto inline$BDLGetDebugLevel$456$label_3#1;
-
- inline$BDLGetDebugLevel$456$label_3#1:
- havoc inline$BDLGetDebugLevel$456$myNondetVar_0;
- inline$BDLGetDebugLevel$456$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$456$myNondetVar_0;
- goto inline$BDLGetDebugLevel$456$label_1#1;
-
- inline$BDLGetDebugLevel$456$label_1#1:
- goto inline$BDLGetDebugLevel$456$Return#1;
-
- inline$BDLGetDebugLevel$456$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$456$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon37_Then#1, inline$BDLDevicePowerIoCompletion$17$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_82_true#1, inline$BDLDevicePowerIoCompletion$17$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$17$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$17$anon38_Then#1, inline$BDLDevicePowerIoCompletion$17$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$17$anon39_Then#1, inline$BDLDevicePowerIoCompletion$17$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_92#1:
- goto inline$storm_IoCompleteRequest$35$Entry#1;
-
- inline$storm_IoCompleteRequest$35$Entry#1:
- inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$35$start#1;
-
- inline$storm_IoCompleteRequest$35$start#1:
- inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$35$label_3#1;
-
- inline$storm_IoCompleteRequest$35$label_3#1:
- call inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$35$label_6#1;
-
- inline$storm_IoCompleteRequest$35$label_6#1:
- goto inline$storm_IoCompleteRequest$35$label_6_true#1, inline$storm_IoCompleteRequest$35$label_6_false#1;
-
- inline$storm_IoCompleteRequest$35$label_6_false#1:
- assume inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$35$label_7#1;
-
- inline$storm_IoCompleteRequest$35$label_6_true#1:
- assume inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$35$label_8#1;
-
- inline$storm_IoCompleteRequest$35$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$35$anon3_Then#1, inline$storm_IoCompleteRequest$35$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$35$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$35$anon1#1;
-
- inline$storm_IoCompleteRequest$35$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$35$label_9#1;
-
- inline$storm_IoCompleteRequest$35$label_9#1:
- goto inline$storm_IoCompleteRequest$35$label_9_true#1, inline$storm_IoCompleteRequest$35$label_9_false#1;
-
- inline$storm_IoCompleteRequest$35$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$35$label_10#1;
-
- inline$storm_IoCompleteRequest$35$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$35$label_1#1;
-
- inline$storm_IoCompleteRequest$35$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$35$label_7#1;
-
- inline$storm_IoCompleteRequest$35$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$35$label_1#1;
-
- inline$storm_IoCompleteRequest$35$label_1#1:
- goto inline$storm_IoCompleteRequest$35$Return#1;
-
- inline$storm_IoCompleteRequest$35$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$35$Return#1;
-
- inline$storm_IoCompleteRequest$35$Return#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon40_Then#1, inline$BDLDevicePowerIoCompletion$17$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$17$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$17$anon41_Then#1, inline$BDLDevicePowerIoCompletion$17$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_98#1:
- goto inline$BDLGetDebugLevel$457$Entry#1;
-
- inline$BDLGetDebugLevel$457$Entry#1:
- goto inline$BDLGetDebugLevel$457$start#1;
-
- inline$BDLGetDebugLevel$457$start#1:
- goto inline$BDLGetDebugLevel$457$label_3#1;
-
- inline$BDLGetDebugLevel$457$label_3#1:
- havoc inline$BDLGetDebugLevel$457$myNondetVar_0;
- inline$BDLGetDebugLevel$457$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$457$myNondetVar_0;
- goto inline$BDLGetDebugLevel$457$label_1#1;
-
- inline$BDLGetDebugLevel$457$label_1#1:
- goto inline$BDLGetDebugLevel$457$Return#1;
-
- inline$BDLGetDebugLevel$457$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$457$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon42_Then#1, inline$BDLDevicePowerIoCompletion$17$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_101_true#1, inline$BDLDevicePowerIoCompletion$17$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_105#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_106#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_107#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$17$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_102#1:
- goto inline$BDLGetDebugLevel$458$Entry#1;
-
- inline$BDLGetDebugLevel$458$Entry#1:
- goto inline$BDLGetDebugLevel$458$start#1;
-
- inline$BDLGetDebugLevel$458$start#1:
- goto inline$BDLGetDebugLevel$458$label_3#1;
-
- inline$BDLGetDebugLevel$458$label_3#1:
- havoc inline$BDLGetDebugLevel$458$myNondetVar_0;
- inline$BDLGetDebugLevel$458$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$458$myNondetVar_0;
- goto inline$BDLGetDebugLevel$458$label_1#1;
-
- inline$BDLGetDebugLevel$458$label_1#1:
- goto inline$BDLGetDebugLevel$458$Return#1;
-
- inline$BDLGetDebugLevel$458$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$458$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon43_Then#1, inline$BDLDevicePowerIoCompletion$17$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_111_true#1, inline$BDLDevicePowerIoCompletion$17$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_115#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_116#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_117#1:
- call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$17$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$17$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_112#1:
- goto inline$BDLGetDebugLevel$459$Entry#1;
-
- inline$BDLGetDebugLevel$459$Entry#1:
- goto inline$BDLGetDebugLevel$459$start#1;
-
- inline$BDLGetDebugLevel$459$start#1:
- goto inline$BDLGetDebugLevel$459$label_3#1;
-
- inline$BDLGetDebugLevel$459$label_3#1:
- havoc inline$BDLGetDebugLevel$459$myNondetVar_0;
- inline$BDLGetDebugLevel$459$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$459$myNondetVar_0;
- goto inline$BDLGetDebugLevel$459$label_1#1;
-
- inline$BDLGetDebugLevel$459$label_1#1:
- goto inline$BDLGetDebugLevel$459$Return#1;
-
- inline$BDLGetDebugLevel$459$Return#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$459$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$17$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$17$anon44_Then#1, inline$BDLDevicePowerIoCompletion$17$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_121_true#1, inline$BDLDevicePowerIoCompletion$17$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$17$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$17$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_122#1:
- inline$BDLDevicePowerIoCompletion$17$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$17$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$17$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$17$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$17$Return#1;
-
- inline$BDLDevicePowerIoCompletion$17$Return#1:
- inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$17$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$17$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$17$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$17$anon13_Then#1, inline$CallCompletionRoutine$17$anon13_Else#1;
-
- inline$CallCompletionRoutine$17$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$17$anon7#1;
-
- inline$CallCompletionRoutine$17$anon7#1:
- goto inline$CallCompletionRoutine$17$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$17$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$17$Return#1;
-
- inline$CallCompletionRoutine$17$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$17$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$17$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$17$Entry#1:
- inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$17$start#1;
-
- inline$BDLCallDriverCompletionRoutine$17$start#1:
- inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$17$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$17$label_3_true#1, inline$BDLCallDriverCompletionRoutine$17$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$17$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$17$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$17$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$17$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_6#1:
- goto inline$storm_KeSetEvent$19$Entry#1;
-
- inline$storm_KeSetEvent$19$Entry#1:
- inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$19$start#1;
-
- inline$storm_KeSetEvent$19$start#1:
- inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$19$label_3#1;
-
- inline$storm_KeSetEvent$19$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$19$label_1#1;
-
- inline$storm_KeSetEvent$19$label_1#1:
- goto inline$storm_KeSetEvent$19$Return#1;
-
- inline$storm_KeSetEvent$19$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$17$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$17$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$17$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$17$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$17$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$17$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$17$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_9#1:
- inline$BDLCallDriverCompletionRoutine$17$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$17$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$17$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$17$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$17$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$17$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$17$Return#1:
- inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$17$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$17$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$17$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$17$anon12_Then#1, inline$CallCompletionRoutine$17$anon12_Else#1;
-
- inline$CallCompletionRoutine$17$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$17$anon5#1;
-
- inline$CallCompletionRoutine$17$anon5#1:
- goto inline$CallCompletionRoutine$17$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$17$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$17$label_23#1;
-
- inline$CallCompletionRoutine$17$label_23#1:
- inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$17$label_24#1;
-
- inline$CallCompletionRoutine$17$label_24#1:
- goto inline$CallCompletionRoutine$17$label_24_true#1, inline$CallCompletionRoutine$17$label_24_false#1;
-
- inline$CallCompletionRoutine$17$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$17$label_1#1;
-
- inline$CallCompletionRoutine$17$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$17$label_25#1;
-
- inline$CallCompletionRoutine$17$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$17$label_1#1;
-
- inline$CallCompletionRoutine$17$label_1#1:
- goto inline$CallCompletionRoutine$17$Return#1;
-
- inline$CallCompletionRoutine$17$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$17$Return#1;
-
- inline$CallCompletionRoutine$17$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$17$Return#1;
-
- inline$CallCompletionRoutine$17$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$17$Return#1;
-
- inline$CallCompletionRoutine$17$Return#1:
- goto inline$storm_IoCallDriver$8$label_39$1#1;
-
- inline$storm_IoCallDriver$8$label_39$1#1:
- goto inline$storm_IoCallDriver$8$anon15_Then#1, inline$storm_IoCallDriver$8$anon15_Else#1;
-
- inline$storm_IoCallDriver$8$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$8$anon10#1;
-
- inline$storm_IoCallDriver$8$anon10#1:
- goto inline$storm_IoCallDriver$8$label_36#1;
-
- inline$storm_IoCallDriver$8$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$8$Return#1;
-
- inline$storm_IoCallDriver$8$label_27_case_0#1:
- assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$8$label_28#1;
-
- inline$storm_IoCallDriver$8$label_28#1:
- inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$8$label_42#1;
-
- inline$storm_IoCallDriver$8$label_42#1:
- goto inline$storm_IoCallDriver$8$label_43#1;
-
- inline$storm_IoCallDriver$8$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$8$label_36#1;
-
- inline$storm_IoCallDriver$8$label_36#1:
- inline$storm_IoCallDriver$8$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$8$label_1#1;
-
- inline$storm_IoCallDriver$8$label_1#1:
- goto inline$storm_IoCallDriver$8$Return#1;
-
- inline$storm_IoCallDriver$8$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$8$Return#1;
-
- inline$storm_IoCallDriver$8$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$8$Return#1;
-
- inline$storm_IoCallDriver$8$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$8$Return#1;
-
- inline$storm_IoCallDriver$8$Return#1:
- inline$storm_PoCallDriver$3$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$8$$result.storm_IoCallDriver$456.0$1$;
- goto inline$storm_PoCallDriver$3$label_3$1#1;
-
- inline$storm_PoCallDriver$3$label_3$1#1:
- goto inline$storm_PoCallDriver$3$anon2_Then#1, inline$storm_PoCallDriver$3$anon2_Else#1;
-
- inline$storm_PoCallDriver$3$anon2_Else#1:
- assume !raiseException;
- goto inline$storm_PoCallDriver$3$anon1#1;
-
- inline$storm_PoCallDriver$3$anon1#1:
- goto inline$storm_PoCallDriver$3$label_6#1;
-
- inline$storm_PoCallDriver$3$label_6#1:
- inline$storm_PoCallDriver$3$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$3$$result.storm_IoCallDriver$499.27$2$;
- goto inline$storm_PoCallDriver$3$label_1#1;
-
- inline$storm_PoCallDriver$3$label_1#1:
- goto inline$storm_PoCallDriver$3$Return#1;
-
- inline$storm_PoCallDriver$3$anon2_Then#1:
- assume raiseException;
- goto inline$storm_PoCallDriver$3$Return#1;
-
- inline$storm_PoCallDriver$3$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$3$$result.storm_PoCallDriver$494.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_25$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_25$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon22_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon13#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon13#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_28#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_28#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_PoCallDriver$104.29$3$;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$3$label_29_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_29_false#1:
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_29_true#1:
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_31#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_31#1:
- goto inline$storm_KeWaitForSingleObject$3$Entry#1;
-
- inline$storm_KeWaitForSingleObject$3$Entry#1:
- inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
- goto inline$storm_KeWaitForSingleObject$3$start#1;
-
- inline$storm_KeWaitForSingleObject$3$start#1:
- inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
- inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
- goto inline$storm_KeWaitForSingleObject$3$label_3#1;
-
- inline$storm_KeWaitForSingleObject$3$label_3#1:
- goto inline$storm_KeWaitForSingleObject$3$label_3_true#1, inline$storm_KeWaitForSingleObject$3$label_3_false#1;
-
- inline$storm_KeWaitForSingleObject$3$label_3_false#1:
- assume inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
- goto inline$storm_KeWaitForSingleObject$3$label_4#1;
-
- inline$storm_KeWaitForSingleObject$3$label_4#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$3$anon6_Then#1, inline$storm_KeWaitForSingleObject$3$anon6_Else#1;
-
- inline$storm_KeWaitForSingleObject$3$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$3$anon1#1;
-
- inline$storm_KeWaitForSingleObject$3$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$3$label_13#1;
-
- inline$storm_KeWaitForSingleObject$3$label_13#1:
- inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$3$label_1#1;
-
- inline$storm_KeWaitForSingleObject$3$anon6_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$3$Return#1;
-
- inline$storm_KeWaitForSingleObject$3$label_3_true#1:
- assume inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
- goto inline$storm_KeWaitForSingleObject$3$label_5#1;
-
- inline$storm_KeWaitForSingleObject$3$label_5#1:
- call inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$ := storm_nondet();
- goto inline$storm_KeWaitForSingleObject$3$label_8#1;
-
- inline$storm_KeWaitForSingleObject$3$label_8#1:
- goto inline$storm_KeWaitForSingleObject$3$label_8_true#1, inline$storm_KeWaitForSingleObject$3$label_8_false#1;
-
- inline$storm_KeWaitForSingleObject$3$label_8_false#1:
- assume inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$ == 0;
- goto inline$storm_KeWaitForSingleObject$3$label_9#1;
-
- inline$storm_KeWaitForSingleObject$3$label_9#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$3$anon7_Then#1, inline$storm_KeWaitForSingleObject$3$anon7_Else#1;
-
- inline$storm_KeWaitForSingleObject$3$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$3$anon3#1;
-
- inline$storm_KeWaitForSingleObject$3$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$3$label_12#1;
-
- inline$storm_KeWaitForSingleObject$3$label_12#1:
- inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
- goto inline$storm_KeWaitForSingleObject$3$label_1#1;
-
- inline$storm_KeWaitForSingleObject$3$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$3$Return#1;
-
- inline$storm_KeWaitForSingleObject$3$label_8_true#1:
- assume inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$ != 0;
- goto inline$storm_KeWaitForSingleObject$3$label_10#1;
-
- inline$storm_KeWaitForSingleObject$3$label_10#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$3$anon8_Then#1, inline$storm_KeWaitForSingleObject$3$anon8_Else#1;
-
- inline$storm_KeWaitForSingleObject$3$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$3$anon5#1;
-
- inline$storm_KeWaitForSingleObject$3$anon5#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$3$label_11#1;
-
- inline$storm_KeWaitForSingleObject$3$label_11#1:
- inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$3$label_1#1;
-
- inline$storm_KeWaitForSingleObject$3$label_1#1:
- goto inline$storm_KeWaitForSingleObject$3$Return#1;
-
- inline$storm_KeWaitForSingleObject$3$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$3$Return#1;
-
- inline$storm_KeWaitForSingleObject$3$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_31$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_31$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon23_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$anon15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon15#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_34#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_34#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_KeWaitForSingleObject$116.38$5$;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_35#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_35#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$3$label_35_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_35_false#1:
- assume inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_35_true#1:
- assume inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_37#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_37#1:
- call inline$BDLCallLowerLevelDriverAndWait$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_38#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_38#1:
- call inline$BDLCallLowerLevelDriverAndWait$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_39#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_39#1:
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_36#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
- inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_30#1:
- inline$BDLCallLowerLevelDriverAndWait$3$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
- goto inline$BDLCallLowerLevelDriverAndWait$3$label_1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$label_1#1:
- call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon23_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon22_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon21_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon19_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon18_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon17_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$anon16_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$3$Return#1:
- inline$BDLPnPStop$0$$result.BDLCallLowerLevelDriverAndWait$2227.43$26$ := inline$BDLCallLowerLevelDriverAndWait$3$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
- goto inline$BDLPnPStop$0$label_92$1#1;
-
- inline$BDLPnPStop$0$label_92$1#1:
- goto inline$BDLPnPStop$0$anon38_Then#1, inline$BDLPnPStop$0$anon38_Else#1;
-
- inline$BDLPnPStop$0$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon21#1;
-
- inline$BDLPnPStop$0$anon21#1:
- goto inline$BDLPnPStop$0$label_95#1;
-
- inline$BDLPnPStop$0$label_95#1:
- inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 := inline$BDLPnPStop$0$$result.BDLCallLowerLevelDriverAndWait$2227.43$26$;
- goto inline$BDLPnPStop$0$label_96#1;
-
- inline$BDLPnPStop$0$label_96#1:
- goto inline$BDLPnPStop$0$label_96_true#1, inline$BDLPnPStop$0$label_96_false#1;
-
- inline$BDLPnPStop$0$label_96_false#1:
- assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 == 0;
- goto inline$BDLPnPStop$0$label_65#1;
-
- inline$BDLPnPStop$0$label_96_true#1:
- assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 != 0;
- goto inline$BDLPnPStop$0$label_97#1;
-
- inline$BDLPnPStop$0$label_97#1:
- goto inline$BDLGetDebugLevel$472$Entry#1;
-
- inline$BDLGetDebugLevel$472$Entry#1:
- goto inline$BDLGetDebugLevel$472$start#1;
-
- inline$BDLGetDebugLevel$472$start#1:
- goto inline$BDLGetDebugLevel$472$label_3#1;
-
- inline$BDLGetDebugLevel$472$label_3#1:
- havoc inline$BDLGetDebugLevel$472$myNondetVar_0;
- inline$BDLGetDebugLevel$472$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$472$myNondetVar_0;
- goto inline$BDLGetDebugLevel$472$label_1#1;
-
- inline$BDLGetDebugLevel$472$label_1#1:
- goto inline$BDLGetDebugLevel$472$Return#1;
-
- inline$BDLGetDebugLevel$472$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$ := inline$BDLGetDebugLevel$472$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_97$1#1;
-
- inline$BDLPnPStop$0$label_97$1#1:
- goto inline$BDLPnPStop$0$anon39_Then#1, inline$BDLPnPStop$0$anon39_Else#1;
-
- inline$BDLPnPStop$0$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon23#1;
-
- inline$BDLPnPStop$0$anon23#1:
- goto inline$BDLPnPStop$0$label_100#1;
-
- inline$BDLPnPStop$0$label_100#1:
- goto inline$BDLPnPStop$0$label_100_true#1, inline$BDLPnPStop$0$label_100_false#1;
-
- inline$BDLPnPStop$0$label_100_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$) == 0;
- goto inline$BDLPnPStop$0$label_101#1;
-
- inline$BDLPnPStop$0$label_100_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$) != 0;
- goto inline$BDLPnPStop$0$label_104#1;
-
- inline$BDLPnPStop$0$label_104#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_105#1;
-
- inline$BDLPnPStop$0$label_105#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_106#1;
-
- inline$BDLPnPStop$0$label_106#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_107#1;
-
- inline$BDLPnPStop$0$label_107#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2231.0$28$;
- goto inline$BDLPnPStop$0$label_101#1;
-
- inline$BDLPnPStop$0$label_101#1:
- goto inline$BDLGetDebugLevel$473$Entry#1;
-
- inline$BDLGetDebugLevel$473$Entry#1:
- goto inline$BDLGetDebugLevel$473$start#1;
-
- inline$BDLGetDebugLevel$473$start#1:
- goto inline$BDLGetDebugLevel$473$label_3#1;
-
- inline$BDLGetDebugLevel$473$label_3#1:
- havoc inline$BDLGetDebugLevel$473$myNondetVar_0;
- inline$BDLGetDebugLevel$473$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$473$myNondetVar_0;
- goto inline$BDLGetDebugLevel$473$label_1#1;
-
- inline$BDLGetDebugLevel$473$label_1#1:
- goto inline$BDLGetDebugLevel$473$Return#1;
-
- inline$BDLGetDebugLevel$473$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$ := inline$BDLGetDebugLevel$473$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_101$1#1;
-
- inline$BDLPnPStop$0$label_101$1#1:
- goto inline$BDLPnPStop$0$anon40_Then#1, inline$BDLPnPStop$0$anon40_Else#1;
-
- inline$BDLPnPStop$0$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon25#1;
-
- inline$BDLPnPStop$0$anon25#1:
- goto inline$BDLPnPStop$0$label_110#1;
-
- inline$BDLPnPStop$0$label_110#1:
- goto inline$BDLPnPStop$0$label_110_true#1, inline$BDLPnPStop$0$label_110_false#1;
-
- inline$BDLPnPStop$0$label_110_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$) == 0;
- goto inline$BDLPnPStop$0$label_111#1;
-
- inline$BDLPnPStop$0$label_110_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$) != 0;
- goto inline$BDLPnPStop$0$label_114#1;
-
- inline$BDLPnPStop$0$label_114#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_115#1;
-
- inline$BDLPnPStop$0$label_115#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_116#1;
-
- inline$BDLPnPStop$0$label_116#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_117#1;
-
- inline$BDLPnPStop$0$label_117#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2231.0$33$;
- goto inline$BDLPnPStop$0$label_111#1;
-
- inline$BDLPnPStop$0$label_111#1:
- goto inline$BDLGetDebugLevel$474$Entry#1;
-
- inline$BDLGetDebugLevel$474$Entry#1:
- goto inline$BDLGetDebugLevel$474$start#1;
-
- inline$BDLGetDebugLevel$474$start#1:
- goto inline$BDLGetDebugLevel$474$label_3#1;
-
- inline$BDLGetDebugLevel$474$label_3#1:
- havoc inline$BDLGetDebugLevel$474$myNondetVar_0;
- inline$BDLGetDebugLevel$474$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$474$myNondetVar_0;
- goto inline$BDLGetDebugLevel$474$label_1#1;
-
- inline$BDLGetDebugLevel$474$label_1#1:
- goto inline$BDLGetDebugLevel$474$Return#1;
-
- inline$BDLGetDebugLevel$474$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$ := inline$BDLGetDebugLevel$474$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_111$1#1;
-
- inline$BDLPnPStop$0$label_111$1#1:
- goto inline$BDLPnPStop$0$anon41_Then#1, inline$BDLPnPStop$0$anon41_Else#1;
-
- inline$BDLPnPStop$0$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon27#1;
-
- inline$BDLPnPStop$0$anon27#1:
- goto inline$BDLPnPStop$0$label_120#1;
-
- inline$BDLPnPStop$0$label_120#1:
- goto inline$BDLPnPStop$0$label_120_true#1, inline$BDLPnPStop$0$label_120_false#1;
-
- inline$BDLPnPStop$0$label_120_false#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$, 4) == 0;
- goto inline$BDLPnPStop$0$label_65#1;
-
- inline$BDLPnPStop$0$label_120_true#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$, 4) != 0;
- goto inline$BDLPnPStop$0$label_121#1;
-
- inline$BDLPnPStop$0$label_121#1:
- goto inline$BDLPnPStop$0$label_65#1;
-
- inline$BDLPnPStop$0$anon41_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon40_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon39_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon38_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$label_39_true#1:
- assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 != 0;
- goto inline$BDLPnPStop$0$label_41#1;
-
- inline$BDLPnPStop$0$label_41#1:
- goto inline$BDLGetDebugLevel$382$Entry#1;
-
- inline$BDLGetDebugLevel$382$Entry#1:
- goto inline$BDLGetDebugLevel$382$start#1;
-
- inline$BDLGetDebugLevel$382$start#1:
- goto inline$BDLGetDebugLevel$382$label_3#1;
-
- inline$BDLGetDebugLevel$382$label_3#1:
- havoc inline$BDLGetDebugLevel$382$myNondetVar_0;
- inline$BDLGetDebugLevel$382$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$382$myNondetVar_0;
- goto inline$BDLGetDebugLevel$382$label_1#1;
-
- inline$BDLGetDebugLevel$382$label_1#1:
- goto inline$BDLGetDebugLevel$382$Return#1;
-
- inline$BDLGetDebugLevel$382$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$ := inline$BDLGetDebugLevel$382$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_41$1#1;
-
- inline$BDLPnPStop$0$label_41$1#1:
- goto inline$BDLPnPStop$0$anon32_Then#1, inline$BDLPnPStop$0$anon32_Else#1;
-
- inline$BDLPnPStop$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon9#1;
-
- inline$BDLPnPStop$0$anon9#1:
- goto inline$BDLPnPStop$0$label_44#1;
-
- inline$BDLPnPStop$0$label_44#1:
- goto inline$BDLPnPStop$0$label_44_true#1, inline$BDLPnPStop$0$label_44_false#1;
-
- inline$BDLPnPStop$0$label_44_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$) == 0;
- goto inline$BDLPnPStop$0$label_45#1;
-
- inline$BDLPnPStop$0$label_44_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$) != 0;
- goto inline$BDLPnPStop$0$label_48#1;
-
- inline$BDLPnPStop$0$label_48#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_49#1;
-
- inline$BDLPnPStop$0$label_49#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_50#1;
-
- inline$BDLPnPStop$0$label_50#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_51#1;
-
- inline$BDLPnPStop$0$label_51#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2208.0$16$;
- goto inline$BDLPnPStop$0$label_45#1;
-
- inline$BDLPnPStop$0$label_45#1:
- goto inline$BDLGetDebugLevel$383$Entry#1;
-
- inline$BDLGetDebugLevel$383$Entry#1:
- goto inline$BDLGetDebugLevel$383$start#1;
-
- inline$BDLGetDebugLevel$383$start#1:
- goto inline$BDLGetDebugLevel$383$label_3#1;
-
- inline$BDLGetDebugLevel$383$label_3#1:
- havoc inline$BDLGetDebugLevel$383$myNondetVar_0;
- inline$BDLGetDebugLevel$383$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$383$myNondetVar_0;
- goto inline$BDLGetDebugLevel$383$label_1#1;
-
- inline$BDLGetDebugLevel$383$label_1#1:
- goto inline$BDLGetDebugLevel$383$Return#1;
-
- inline$BDLGetDebugLevel$383$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$ := inline$BDLGetDebugLevel$383$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_45$1#1;
-
- inline$BDLPnPStop$0$label_45$1#1:
- goto inline$BDLPnPStop$0$anon33_Then#1, inline$BDLPnPStop$0$anon33_Else#1;
-
- inline$BDLPnPStop$0$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon11#1;
-
- inline$BDLPnPStop$0$anon11#1:
- goto inline$BDLPnPStop$0$label_54#1;
-
- inline$BDLPnPStop$0$label_54#1:
- goto inline$BDLPnPStop$0$label_54_true#1, inline$BDLPnPStop$0$label_54_false#1;
-
- inline$BDLPnPStop$0$label_54_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$) == 0;
- goto inline$BDLPnPStop$0$label_55#1;
-
- inline$BDLPnPStop$0$label_54_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$) != 0;
- goto inline$BDLPnPStop$0$label_58#1;
-
- inline$BDLPnPStop$0$label_58#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_59#1;
-
- inline$BDLPnPStop$0$label_59#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_60#1;
-
- inline$BDLPnPStop$0$label_60#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_61#1;
-
- inline$BDLPnPStop$0$label_61#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2208.0$21$;
- goto inline$BDLPnPStop$0$label_55#1;
-
- inline$BDLPnPStop$0$label_55#1:
- goto inline$BDLGetDebugLevel$384$Entry#1;
-
- inline$BDLGetDebugLevel$384$Entry#1:
- goto inline$BDLGetDebugLevel$384$start#1;
-
- inline$BDLGetDebugLevel$384$start#1:
- goto inline$BDLGetDebugLevel$384$label_3#1;
-
- inline$BDLGetDebugLevel$384$label_3#1:
- havoc inline$BDLGetDebugLevel$384$myNondetVar_0;
- inline$BDLGetDebugLevel$384$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$384$myNondetVar_0;
- goto inline$BDLGetDebugLevel$384$label_1#1;
-
- inline$BDLGetDebugLevel$384$label_1#1:
- goto inline$BDLGetDebugLevel$384$Return#1;
-
- inline$BDLGetDebugLevel$384$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$ := inline$BDLGetDebugLevel$384$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_55$1#1;
-
- inline$BDLPnPStop$0$label_55$1#1:
- goto inline$BDLPnPStop$0$anon34_Then#1, inline$BDLPnPStop$0$anon34_Else#1;
-
- inline$BDLPnPStop$0$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon13#1;
-
- inline$BDLPnPStop$0$anon13#1:
- goto inline$BDLPnPStop$0$label_64#1;
-
- inline$BDLPnPStop$0$label_64#1:
- goto inline$BDLPnPStop$0$label_64_true#1, inline$BDLPnPStop$0$label_64_false#1;
-
- inline$BDLPnPStop$0$label_64_false#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$, 4) == 0;
- goto inline$BDLPnPStop$0$label_65#1;
-
- inline$BDLPnPStop$0$label_64_true#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$, 4) != 0;
- goto inline$BDLPnPStop$0$label_68#1;
-
- inline$BDLPnPStop$0$label_68#1:
- goto inline$BDLPnPStop$0$label_65#1;
-
- inline$BDLPnPStop$0$label_65#1:
- goto inline$BDLGetDebugLevel$385$Entry#1;
-
- inline$BDLGetDebugLevel$385$Entry#1:
- goto inline$BDLGetDebugLevel$385$start#1;
-
- inline$BDLGetDebugLevel$385$start#1:
- goto inline$BDLGetDebugLevel$385$label_3#1;
-
- inline$BDLGetDebugLevel$385$label_3#1:
- havoc inline$BDLGetDebugLevel$385$myNondetVar_0;
- inline$BDLGetDebugLevel$385$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$385$myNondetVar_0;
- goto inline$BDLGetDebugLevel$385$label_1#1;
-
- inline$BDLGetDebugLevel$385$label_1#1:
- goto inline$BDLGetDebugLevel$385$Return#1;
-
- inline$BDLGetDebugLevel$385$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$ := inline$BDLGetDebugLevel$385$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_65$1#1;
-
- inline$BDLPnPStop$0$label_65$1#1:
- goto inline$BDLPnPStop$0$anon35_Then#1, inline$BDLPnPStop$0$anon35_Else#1;
-
- inline$BDLPnPStop$0$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon15#1;
-
- inline$BDLPnPStop$0$anon15#1:
- goto inline$BDLPnPStop$0$label_69#1;
-
- inline$BDLPnPStop$0$label_69#1:
- goto inline$BDLPnPStop$0$label_69_true#1, inline$BDLPnPStop$0$label_69_false#1;
-
- inline$BDLPnPStop$0$label_69_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$) == 0;
- goto inline$BDLPnPStop$0$label_70#1;
-
- inline$BDLPnPStop$0$label_69_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$) != 0;
- goto inline$BDLPnPStop$0$label_73#1;
-
- inline$BDLPnPStop$0$label_73#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_74#1;
-
- inline$BDLPnPStop$0$label_74#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_75#1;
-
- inline$BDLPnPStop$0$label_75#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_76#1;
-
- inline$BDLPnPStop$0$label_76#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2243.0$39$;
- goto inline$BDLPnPStop$0$label_70#1;
-
- inline$BDLPnPStop$0$label_70#1:
- goto inline$BDLGetDebugLevel$386$Entry#1;
-
- inline$BDLGetDebugLevel$386$Entry#1:
- goto inline$BDLGetDebugLevel$386$start#1;
-
- inline$BDLGetDebugLevel$386$start#1:
- goto inline$BDLGetDebugLevel$386$label_3#1;
-
- inline$BDLGetDebugLevel$386$label_3#1:
- havoc inline$BDLGetDebugLevel$386$myNondetVar_0;
- inline$BDLGetDebugLevel$386$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$386$myNondetVar_0;
- goto inline$BDLGetDebugLevel$386$label_1#1;
-
- inline$BDLGetDebugLevel$386$label_1#1:
- goto inline$BDLGetDebugLevel$386$Return#1;
-
- inline$BDLGetDebugLevel$386$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$ := inline$BDLGetDebugLevel$386$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_70$1#1;
-
- inline$BDLPnPStop$0$label_70$1#1:
- goto inline$BDLPnPStop$0$anon36_Then#1, inline$BDLPnPStop$0$anon36_Else#1;
-
- inline$BDLPnPStop$0$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon17#1;
-
- inline$BDLPnPStop$0$anon17#1:
- goto inline$BDLPnPStop$0$label_79#1;
-
- inline$BDLPnPStop$0$label_79#1:
- goto inline$BDLPnPStop$0$label_79_true#1, inline$BDLPnPStop$0$label_79_false#1;
-
- inline$BDLPnPStop$0$label_79_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$) == 0;
- goto inline$BDLPnPStop$0$label_80#1;
-
- inline$BDLPnPStop$0$label_79_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$) != 0;
- goto inline$BDLPnPStop$0$label_83#1;
-
- inline$BDLPnPStop$0$label_83#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_84#1;
-
- inline$BDLPnPStop$0$label_84#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_85#1;
-
- inline$BDLPnPStop$0$label_85#1:
- call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStop$0$label_86#1;
-
- inline$BDLPnPStop$0$label_86#1:
- havoc inline$BDLPnPStop$0$$result.DbgPrint$2243.0$44$;
- goto inline$BDLPnPStop$0$label_80#1;
-
- inline$BDLPnPStop$0$label_80#1:
- goto inline$BDLGetDebugLevel$387$Entry#1;
-
- inline$BDLGetDebugLevel$387$Entry#1:
- goto inline$BDLGetDebugLevel$387$start#1;
-
- inline$BDLGetDebugLevel$387$start#1:
- goto inline$BDLGetDebugLevel$387$label_3#1;
-
- inline$BDLGetDebugLevel$387$label_3#1:
- havoc inline$BDLGetDebugLevel$387$myNondetVar_0;
- inline$BDLGetDebugLevel$387$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$387$myNondetVar_0;
- goto inline$BDLGetDebugLevel$387$label_1#1;
-
- inline$BDLGetDebugLevel$387$label_1#1:
- goto inline$BDLGetDebugLevel$387$Return#1;
-
- inline$BDLGetDebugLevel$387$Return#1:
- inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$ := inline$BDLGetDebugLevel$387$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStop$0$label_80$1#1;
-
- inline$BDLPnPStop$0$label_80$1#1:
- goto inline$BDLPnPStop$0$anon37_Then#1, inline$BDLPnPStop$0$anon37_Else#1;
-
- inline$BDLPnPStop$0$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStop$0$anon19#1;
-
- inline$BDLPnPStop$0$anon19#1:
- goto inline$BDLPnPStop$0$label_89#1;
-
- inline$BDLPnPStop$0$label_89#1:
- goto inline$BDLPnPStop$0$label_89_true#1, inline$BDLPnPStop$0$label_89_false#1;
-
- inline$BDLPnPStop$0$label_89_false#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$, 4) == 0;
- goto inline$BDLPnPStop$0$label_90#1;
-
- inline$BDLPnPStop$0$label_89_true#1:
- assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$, 4) != 0;
- goto inline$BDLPnPStop$0$label_91#1;
-
- inline$BDLPnPStop$0$label_91#1:
- goto inline$BDLPnPStop$0$label_90#1;
-
- inline$BDLPnPStop$0$label_90#1:
- inline$BDLPnPStop$0$$result.BDLPnPStop$2180.0$1$ := inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12;
- goto inline$BDLPnPStop$0$label_1#1;
-
- inline$BDLPnPStop$0$label_1#1:
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon37_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon36_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon35_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon34_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon33_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon29_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$anon28_Then#1:
- assume raiseException;
- goto inline$BDLPnPStop$0$Return#1;
-
- inline$BDLPnPStop$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPStop$934.27$31$ := inline$BDLPnPStop$0$$result.BDLPnPStop$2180.0$1$;
- goto inline$BDLPnP$0$label_125$1#1;
-
- inline$BDLPnP$0$label_125$1#1:
- goto inline$BDLPnP$0$anon71_Then#1, inline$BDLPnP$0$anon71_Else#1;
-
- inline$BDLPnP$0$anon71_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon35#1;
-
- inline$BDLPnP$0$anon35#1:
- goto inline$BDLPnP$0$label_150#1;
-
- inline$BDLPnP$0$label_150#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPStop$934.27$31$;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon71_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_4#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 3;
- goto inline$BDLPnP$0$label_122#1;
-
- inline$BDLPnP$0$label_122#1:
- goto inline$BDLPnPCancelRemove$0$Entry#1;
-
- inline$BDLPnPCancelRemove$0$Entry#1:
- inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPCancelRemove$0$start#1;
-
- inline$BDLPnPCancelRemove$0$start#1:
- inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12_.1;
- inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12_.1;
- goto inline$BDLPnPCancelRemove$0$label_3#1;
-
- inline$BDLPnPCancelRemove$0$label_3#1:
- goto inline$BDLPnPCancelRemove$0$label_4#1;
-
- inline$BDLPnPCancelRemove$0$label_4#1:
- inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 := 0;
- goto inline$BDLPnPCancelRemove$0$label_5#1;
-
- inline$BDLPnPCancelRemove$0$label_5#1:
- goto inline$BDLGetDebugLevel$283$Entry#1;
-
- inline$BDLGetDebugLevel$283$Entry#1:
- goto inline$BDLGetDebugLevel$283$start#1;
-
- inline$BDLGetDebugLevel$283$start#1:
- goto inline$BDLGetDebugLevel$283$label_3#1;
-
- inline$BDLGetDebugLevel$283$label_3#1:
- havoc inline$BDLGetDebugLevel$283$myNondetVar_0;
- inline$BDLGetDebugLevel$283$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$283$myNondetVar_0;
- goto inline$BDLGetDebugLevel$283$label_1#1;
-
- inline$BDLGetDebugLevel$283$label_1#1:
- goto inline$BDLGetDebugLevel$283$Return#1;
-
- inline$BDLGetDebugLevel$283$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$ := inline$BDLGetDebugLevel$283$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_5$1#1;
-
- inline$BDLPnPCancelRemove$0$label_5$1#1:
- goto inline$BDLPnPCancelRemove$0$anon28_Then#1, inline$BDLPnPCancelRemove$0$anon28_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon28_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon1#1;
-
- inline$BDLPnPCancelRemove$0$anon1#1:
- goto inline$BDLPnPCancelRemove$0$label_8#1;
-
- inline$BDLPnPCancelRemove$0$label_8#1:
- goto inline$BDLPnPCancelRemove$0$label_8_true#1, inline$BDLPnPCancelRemove$0$label_8_false#1;
-
- inline$BDLPnPCancelRemove$0$label_8_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_9#1;
-
- inline$BDLPnPCancelRemove$0$label_8_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_12#1;
-
- inline$BDLPnPCancelRemove$0$label_12#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_13#1;
-
- inline$BDLPnPCancelRemove$0$label_13#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_14#1;
-
- inline$BDLPnPCancelRemove$0$label_14#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_15#1;
-
- inline$BDLPnPCancelRemove$0$label_15#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$3$;
- goto inline$BDLPnPCancelRemove$0$label_9#1;
-
- inline$BDLPnPCancelRemove$0$label_9#1:
- goto inline$BDLGetDebugLevel$284$Entry#1;
-
- inline$BDLGetDebugLevel$284$Entry#1:
- goto inline$BDLGetDebugLevel$284$start#1;
-
- inline$BDLGetDebugLevel$284$start#1:
- goto inline$BDLGetDebugLevel$284$label_3#1;
-
- inline$BDLGetDebugLevel$284$label_3#1:
- havoc inline$BDLGetDebugLevel$284$myNondetVar_0;
- inline$BDLGetDebugLevel$284$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$284$myNondetVar_0;
- goto inline$BDLGetDebugLevel$284$label_1#1;
-
- inline$BDLGetDebugLevel$284$label_1#1:
- goto inline$BDLGetDebugLevel$284$Return#1;
-
- inline$BDLGetDebugLevel$284$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$ := inline$BDLGetDebugLevel$284$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_9$1#1;
-
- inline$BDLPnPCancelRemove$0$label_9$1#1:
- goto inline$BDLPnPCancelRemove$0$anon29_Then#1, inline$BDLPnPCancelRemove$0$anon29_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon29_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon3#1;
-
- inline$BDLPnPCancelRemove$0$anon3#1:
- goto inline$BDLPnPCancelRemove$0$label_18#1;
-
- inline$BDLPnPCancelRemove$0$label_18#1:
- goto inline$BDLPnPCancelRemove$0$label_18_true#1, inline$BDLPnPCancelRemove$0$label_18_false#1;
-
- inline$BDLPnPCancelRemove$0$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_19#1;
-
- inline$BDLPnPCancelRemove$0$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_22#1;
-
- inline$BDLPnPCancelRemove$0$label_22#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_23#1;
-
- inline$BDLPnPCancelRemove$0$label_23#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_24#1;
-
- inline$BDLPnPCancelRemove$0$label_24#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_25#1;
-
- inline$BDLPnPCancelRemove$0$label_25#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$8$;
- goto inline$BDLPnPCancelRemove$0$label_19#1;
-
- inline$BDLPnPCancelRemove$0$label_19#1:
- goto inline$BDLGetDebugLevel$285$Entry#1;
-
- inline$BDLGetDebugLevel$285$Entry#1:
- goto inline$BDLGetDebugLevel$285$start#1;
-
- inline$BDLGetDebugLevel$285$start#1:
- goto inline$BDLGetDebugLevel$285$label_3#1;
-
- inline$BDLGetDebugLevel$285$label_3#1:
- havoc inline$BDLGetDebugLevel$285$myNondetVar_0;
- inline$BDLGetDebugLevel$285$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$285$myNondetVar_0;
- goto inline$BDLGetDebugLevel$285$label_1#1;
-
- inline$BDLGetDebugLevel$285$label_1#1:
- goto inline$BDLGetDebugLevel$285$Return#1;
-
- inline$BDLGetDebugLevel$285$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$ := inline$BDLGetDebugLevel$285$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_19$1#1;
-
- inline$BDLPnPCancelRemove$0$label_19$1#1:
- goto inline$BDLPnPCancelRemove$0$anon30_Then#1, inline$BDLPnPCancelRemove$0$anon30_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon5#1;
-
- inline$BDLPnPCancelRemove$0$anon5#1:
- goto inline$BDLPnPCancelRemove$0$label_28#1;
-
- inline$BDLPnPCancelRemove$0$label_28#1:
- goto inline$BDLPnPCancelRemove$0$label_28_true#1, inline$BDLPnPCancelRemove$0$label_28_false#1;
-
- inline$BDLPnPCancelRemove$0$label_28_false#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$, 4) == 0;
- goto inline$BDLPnPCancelRemove$0$label_29#1;
-
- inline$BDLPnPCancelRemove$0$label_28_true#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$, 4) != 0;
- goto inline$BDLPnPCancelRemove$0$label_32#1;
-
- inline$BDLPnPCancelRemove$0$label_32#1:
- goto inline$BDLPnPCancelRemove$0$label_29#1;
-
- inline$BDLPnPCancelRemove$0$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$Entry#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$Entry#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12;
- goto inline$BDLCallLowerLevelDriverAndWait$2$start#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$start#1:
- call inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
- inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_4#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_4#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_6#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_6#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$Entry#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$Entry#1:
- inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$start#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$start#1:
- inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_4#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_4#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_5#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_5#1:
- goto inline$IoGetCurrentIrpStackLocation$52$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$52$Entry#1:
- inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetCurrentIrpStackLocation$52$start#1;
-
- inline$IoGetCurrentIrpStackLocation$52$start#1:
- inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$52$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$52$label_3_true#1, inline$IoGetCurrentIrpStackLocation$52$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$52$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$52$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$52$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$52$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$52$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$52$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$52$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$52$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$52$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$52$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$52$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$52$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$52$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$52$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$52$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$52$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$52$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$52$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$52$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$52$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_5$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_5$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$anon1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_8#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_8#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_9#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_9#1:
- goto inline$IoGetNextIrpStackLocation$5$Entry#1;
-
- inline$IoGetNextIrpStackLocation$5$Entry#1:
- inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetNextIrpStackLocation$5$start#1;
-
- inline$IoGetNextIrpStackLocation$5$start#1:
- inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$5$label_3#1;
-
- inline$IoGetNextIrpStackLocation$5$label_3#1:
- goto inline$IoGetNextIrpStackLocation$5$label_3_true#1, inline$IoGetNextIrpStackLocation$5$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$5$label_3_false#1:
- inline$IoGetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$5$myVar_0);
- goto inline$IoGetNextIrpStackLocation$5$label_4#1;
-
- inline$IoGetNextIrpStackLocation$5$label_4#1:
- call inline$IoGetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$5$label_6#1;
-
- inline$IoGetNextIrpStackLocation$5$label_6#1:
- call inline$IoGetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$5$label_7#1;
-
- inline$IoGetNextIrpStackLocation$5$label_7#1:
- goto inline$IoGetNextIrpStackLocation$5$label_5#1;
-
- inline$IoGetNextIrpStackLocation$5$label_3_true#1:
- inline$IoGetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$5$myVar_0);
- goto inline$IoGetNextIrpStackLocation$5$label_5#1;
-
- inline$IoGetNextIrpStackLocation$5$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$5$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$5$label_1#1;
-
- inline$IoGetNextIrpStackLocation$5$label_1#1:
- goto inline$IoGetNextIrpStackLocation$5$Return#1;
-
- inline$IoGetNextIrpStackLocation$5$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_9$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_9$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$anon3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_12#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_12#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_13#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_13#1:
- havoc inline$IoCopyCurrentIrpStackLocationToNext$2$$result.memcpy$25110.4$3$;
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_16#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_16#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$label_1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_6$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_6$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon16_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_9#1:
- goto inline$storm_KeInitializeEvent$2$Entry#1;
-
- inline$storm_KeInitializeEvent$2$Entry#1:
- inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
- goto inline$storm_KeInitializeEvent$2$start#1;
-
- inline$storm_KeInitializeEvent$2$start#1:
- inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
- inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12_.1;
- goto inline$storm_KeInitializeEvent$2$label_3#1;
-
- inline$storm_KeInitializeEvent$2$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12];
- call contextSwitch();
- goto inline$storm_KeInitializeEvent$2$label_1#1;
-
- inline$storm_KeInitializeEvent$2$label_1#1:
- goto inline$storm_KeInitializeEvent$2$Return#1;
-
- inline$storm_KeInitializeEvent$2$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_9$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_9$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon17_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_12#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$2$Entry#1;
-
- inline$storm_IoSetCompletionRoutine$2$Entry#1:
- inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoSetCompletionRoutine$2$start#1;
-
- inline$storm_IoSetCompletionRoutine$2$start#1:
- inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
- goto inline$storm_IoSetCompletionRoutine$2$label_3#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_3#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_4#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_4#1:
- call inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$ := storm_nondet();
- goto inline$storm_IoSetCompletionRoutine$2$label_7#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_7#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_7_true#1, inline$storm_IoSetCompletionRoutine$2$label_7_false#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_7_false#1:
- assume inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$ == 0;
- goto inline$storm_IoSetCompletionRoutine$2$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_7_true#1:
- assume inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$ != 0;
- goto inline$storm_IoSetCompletionRoutine$2$label_11#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_11#1:
- havoc raiseException;
- goto inline$storm_IoSetCompletionRoutine$2$anon6_Then#1, inline$storm_IoSetCompletionRoutine$2$anon6_Else#1;
-
- inline$storm_IoSetCompletionRoutine$2$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$2$anon3#1;
-
- inline$storm_IoSetCompletionRoutine$2$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
- call contextSwitch();
- goto inline$storm_IoSetCompletionRoutine$2$label_12#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_12_true#1, inline$storm_IoSetCompletionRoutine$2$label_12_false#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_12_false#1:
- assume 0 == 0;
- goto inline$storm_IoSetCompletionRoutine$2$label_13#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_13#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCompletionRoutine$2$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_12_true#1:
- assume 0 != 0;
- goto inline$storm_IoSetCompletionRoutine$2$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_8#1:
- goto inline$IoGetNextIrpStackLocation$6$Entry#1;
-
- inline$IoGetNextIrpStackLocation$6$Entry#1:
- inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
- goto inline$IoGetNextIrpStackLocation$6$start#1;
-
- inline$IoGetNextIrpStackLocation$6$start#1:
- inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$6$label_3#1;
-
- inline$IoGetNextIrpStackLocation$6$label_3#1:
- goto inline$IoGetNextIrpStackLocation$6$label_3_true#1, inline$IoGetNextIrpStackLocation$6$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$6$label_3_false#1:
- inline$IoGetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$6$myVar_0);
- goto inline$IoGetNextIrpStackLocation$6$label_4#1;
-
- inline$IoGetNextIrpStackLocation$6$label_4#1:
- call inline$IoGetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$6$label_6#1;
-
- inline$IoGetNextIrpStackLocation$6$label_6#1:
- call inline$IoGetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$6$label_7#1;
-
- inline$IoGetNextIrpStackLocation$6$label_7#1:
- goto inline$IoGetNextIrpStackLocation$6$label_5#1;
-
- inline$IoGetNextIrpStackLocation$6$label_3_true#1:
- inline$IoGetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$6$myVar_0);
- goto inline$IoGetNextIrpStackLocation$6$label_5#1;
-
- inline$IoGetNextIrpStackLocation$6$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$6$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$6$label_1#1;
-
- inline$IoGetNextIrpStackLocation$6$label_1#1:
- goto inline$IoGetNextIrpStackLocation$6$Return#1;
-
- inline$IoGetNextIrpStackLocation$6$Return#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_8$1#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_8$1#1:
- goto inline$storm_IoSetCompletionRoutine$2$anon5_Then#1, inline$storm_IoSetCompletionRoutine$2$anon5_Else#1;
-
- inline$storm_IoSetCompletionRoutine$2$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$2$anon1#1;
-
- inline$storm_IoSetCompletionRoutine$2$anon1#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_16#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_16#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_17#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_17#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_18#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_18#1:
- goto inline$storm_IoSetCompletionRoutine$2$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$2$label_1#1:
- goto inline$storm_IoSetCompletionRoutine$2$Return#1;
-
- inline$storm_IoSetCompletionRoutine$2$anon5_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$2$Return#1;
-
- inline$storm_IoSetCompletionRoutine$2$anon6_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$2$Return#1;
-
- inline$storm_IoSetCompletionRoutine$2$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_12$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_12$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon18_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_15#1:
- goto inline$IoGetCurrentIrpStackLocation$53$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$53$Entry#1:
- inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoGetCurrentIrpStackLocation$53$start#1;
-
- inline$IoGetCurrentIrpStackLocation$53$start#1:
- inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$53$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$53$label_3_true#1, inline$IoGetCurrentIrpStackLocation$53$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$53$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$53$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$53$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$53$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$53$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$53$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$53$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$53$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$53$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$53$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$53$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$53$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$53$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$53$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$53$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$53$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$53$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$53$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$53$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$53$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_15$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_15$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon19_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon7#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon7#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_18#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_18#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$2$label_18_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_18_false#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_19#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_19#1:
- goto inline$storm_IoCallDriver$5$Entry#1;
-
- inline$storm_IoCallDriver$5$Entry#1:
- inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoCallDriver$5$start#1;
-
- inline$storm_IoCallDriver$5$start#1:
- inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$5$label_3#1;
-
- inline$storm_IoCallDriver$5$label_3#1:
- goto inline$storm_IoCallDriver$5$label_4#1;
-
- inline$storm_IoCallDriver$5$label_4#1:
- goto inline$storm_IoCallDriver$5$label_5#1;
-
- inline$storm_IoCallDriver$5$label_5#1:
- goto inline$storm_IoCallDriver$5$label_6#1;
-
- inline$storm_IoCallDriver$5$label_6#1:
- call inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$5$label_9#1;
-
- inline$storm_IoCallDriver$5$label_9#1:
- goto inline$storm_IoCallDriver$5$label_9_true#1, inline$storm_IoCallDriver$5$label_9_false#1;
-
- inline$storm_IoCallDriver$5$label_9_false#1:
- assume inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$5$label_10#1;
-
- inline$storm_IoCallDriver$5$label_9_true#1:
- assume inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$5$label_13#1;
-
- inline$storm_IoCallDriver$5$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$5$anon12_Then#1, inline$storm_IoCallDriver$5$anon12_Else#1;
-
- inline$storm_IoCallDriver$5$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$5$anon3#1;
-
- inline$storm_IoCallDriver$5$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$5$label_14#1;
-
- inline$storm_IoCallDriver$5$label_14#1:
- goto inline$storm_IoCallDriver$5$label_14_true#1, inline$storm_IoCallDriver$5$label_14_false#1;
-
- inline$storm_IoCallDriver$5$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$5$label_15#1;
-
- inline$storm_IoCallDriver$5$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$5$label_1#1;
-
- inline$storm_IoCallDriver$5$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$5$label_10#1;
-
- inline$storm_IoCallDriver$5$label_10#1:
- goto inline$IoSetNextIrpStackLocation$6$Entry#1;
-
- inline$IoSetNextIrpStackLocation$6$Entry#1:
- inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$6$start#1;
-
- inline$IoSetNextIrpStackLocation$6$start#1:
- inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$6$label_3#1;
-
- inline$IoSetNextIrpStackLocation$6$label_3#1:
- goto inline$IoSetNextIrpStackLocation$6$label_3_true#1, inline$IoSetNextIrpStackLocation$6$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$6$label_3_false#1:
- inline$IoSetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$6$myVar_0);
- goto inline$IoSetNextIrpStackLocation$6$label_4#1;
-
- inline$IoSetNextIrpStackLocation$6$label_4#1:
- call inline$IoSetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$6$label_7#1;
-
- inline$IoSetNextIrpStackLocation$6$label_7#1:
- call inline$IoSetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$6$label_8#1;
-
- inline$IoSetNextIrpStackLocation$6$label_8#1:
- goto inline$IoSetNextIrpStackLocation$6$label_5#1;
-
- inline$IoSetNextIrpStackLocation$6$label_3_true#1:
- inline$IoSetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$6$myVar_0);
- goto inline$IoSetNextIrpStackLocation$6$label_5#1;
-
- inline$IoSetNextIrpStackLocation$6$label_5#1:
- inline$IoSetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$6$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$6$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$6$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$6$label_6#1;
-
- inline$IoSetNextIrpStackLocation$6$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$6$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$6$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$6$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$6$label_1#1;
-
- inline$IoSetNextIrpStackLocation$6$label_1#1:
- goto inline$IoSetNextIrpStackLocation$6$Return#1;
-
- inline$IoSetNextIrpStackLocation$6$Return#1:
- goto inline$storm_IoCallDriver$5$label_10$1#1;
-
- inline$storm_IoCallDriver$5$label_10$1#1:
- goto inline$storm_IoCallDriver$5$anon11_Then#1, inline$storm_IoCallDriver$5$anon11_Else#1;
-
- inline$storm_IoCallDriver$5$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$5$anon1#1;
-
- inline$storm_IoCallDriver$5$anon1#1:
- goto inline$storm_IoCallDriver$5$label_18#1;
-
- inline$storm_IoCallDriver$5$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$54$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$54$Entry#1:
- inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$54$start#1;
-
- inline$IoGetCurrentIrpStackLocation$54$start#1:
- inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$54$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$54$label_3_true#1, inline$IoGetCurrentIrpStackLocation$54$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$54$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$54$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$54$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$54$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$54$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$54$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$54$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$54$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$54$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$54$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$54$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$54$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$54$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$54$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$54$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$54$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$54$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$54$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$54$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$54$Return#1:
- goto inline$storm_IoCallDriver$5$label_18$1#1;
-
- inline$storm_IoCallDriver$5$label_18$1#1:
- goto inline$storm_IoCallDriver$5$anon13_Then#1, inline$storm_IoCallDriver$5$anon13_Else#1;
-
- inline$storm_IoCallDriver$5$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$5$anon6#1;
-
- inline$storm_IoCallDriver$5$anon6#1:
- goto inline$storm_IoCallDriver$5$label_21#1;
-
- inline$storm_IoCallDriver$5$label_21#1:
- goto inline$storm_IoCallDriver$5$label_22#1;
-
- inline$storm_IoCallDriver$5$label_22#1:
- goto inline$storm_IoCallDriver$5$label_23#1;
-
- inline$storm_IoCallDriver$5$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$5$label_24#1;
-
- inline$storm_IoCallDriver$5$label_24#1:
- call inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$5$label_27#1;
-
- inline$storm_IoCallDriver$5$label_27#1:
- goto inline$storm_IoCallDriver$5$label_27_case_0#1, inline$storm_IoCallDriver$5$label_27_case_1#1, inline$storm_IoCallDriver$5$label_27_case_2#1;
-
- inline$storm_IoCallDriver$5$label_27_case_2#1:
- assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$5$label_30#1;
-
- inline$storm_IoCallDriver$5$label_30#1:
- inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$5$label_31#1;
-
- inline$storm_IoCallDriver$5$label_31#1:
- goto inline$storm_IoCallDriver$5$label_32#1;
-
- inline$storm_IoCallDriver$5$label_32#1:
- goto inline$storm_IoCallDriver$5$label_33#1;
-
- inline$storm_IoCallDriver$5$label_33#1:
- goto inline$CallCompletionRoutine$10$Entry#1;
-
- inline$CallCompletionRoutine$10$Entry#1:
- inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$10$start#1;
-
- inline$CallCompletionRoutine$10$start#1:
- inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$10$label_3#1;
-
- inline$CallCompletionRoutine$10$label_3#1:
- goto inline$CallCompletionRoutine$10$label_4#1;
-
- inline$CallCompletionRoutine$10$label_4#1:
- goto inline$CallCompletionRoutine$10$label_5#1;
-
- inline$CallCompletionRoutine$10$label_5#1:
- goto inline$CallCompletionRoutine$10$label_6#1;
-
- inline$CallCompletionRoutine$10$label_6#1:
- goto inline$CallCompletionRoutine$10$label_7#1;
-
- inline$CallCompletionRoutine$10$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$55$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$55$Entry#1:
- inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$55$start#1;
-
- inline$IoGetCurrentIrpStackLocation$55$start#1:
- inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$55$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$55$label_3_true#1, inline$IoGetCurrentIrpStackLocation$55$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$55$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$55$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$55$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$55$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$55$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$55$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$55$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$55$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$55$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$55$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$55$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$55$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$55$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$55$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$55$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$55$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$55$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$55$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$55$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$55$Return#1:
- goto inline$CallCompletionRoutine$10$label_7$1#1;
-
- inline$CallCompletionRoutine$10$label_7$1#1:
- goto inline$CallCompletionRoutine$10$anon10_Then#1, inline$CallCompletionRoutine$10$anon10_Else#1;
-
- inline$CallCompletionRoutine$10$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$10$anon1#1;
-
- inline$CallCompletionRoutine$10$anon1#1:
- goto inline$CallCompletionRoutine$10$label_10#1;
-
- inline$CallCompletionRoutine$10$label_10#1:
- goto inline$CallCompletionRoutine$10$label_11#1;
-
- inline$CallCompletionRoutine$10$label_11#1:
- havoc inline$CallCompletionRoutine$10$myNondetVar_0;
- inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$myNondetVar_0;
- goto inline$CallCompletionRoutine$10$label_12#1;
-
- inline$CallCompletionRoutine$10$label_12#1:
- havoc inline$CallCompletionRoutine$10$myNondetVar_0;
- inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$myNondetVar_0;
- goto inline$CallCompletionRoutine$10$label_13#1;
-
- inline$CallCompletionRoutine$10$label_13#1:
- havoc inline$CallCompletionRoutine$10$myNondetVar_0;
- goto inline$CallCompletionRoutine$10$label_14#1;
-
- inline$CallCompletionRoutine$10$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$56$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$56$Entry#1:
- inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$56$start#1;
-
- inline$IoGetCurrentIrpStackLocation$56$start#1:
- inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$56$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$56$label_3_true#1, inline$IoGetCurrentIrpStackLocation$56$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$56$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$56$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$56$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$56$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$56$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$56$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$56$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$56$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$56$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$56$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$56$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$56$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$56$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$56$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$56$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$56$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$56$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$56$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$56$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$56$Return#1:
- goto inline$CallCompletionRoutine$10$label_14$1#1;
-
- inline$CallCompletionRoutine$10$label_14$1#1:
- goto inline$CallCompletionRoutine$10$anon11_Then#1, inline$CallCompletionRoutine$10$anon11_Else#1;
-
- inline$CallCompletionRoutine$10$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$10$anon3#1;
-
- inline$CallCompletionRoutine$10$anon3#1:
- goto inline$CallCompletionRoutine$10$label_17#1;
-
- inline$CallCompletionRoutine$10$label_17#1:
- goto inline$CallCompletionRoutine$10$label_18#1;
-
- inline$CallCompletionRoutine$10$label_18#1:
- goto inline$CallCompletionRoutine$10$label_18_true#1, inline$CallCompletionRoutine$10$label_18_false#1;
-
- inline$CallCompletionRoutine$10$label_18_false#1:
- assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$10$label_1#1;
-
- inline$CallCompletionRoutine$10$label_18_true#1:
- assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$10$label_19#1;
-
- inline$CallCompletionRoutine$10$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$10$label_20#1;
-
- inline$CallCompletionRoutine$10$label_20#1:
- goto inline$CallCompletionRoutine$10$label_20_icall_1#1, inline$CallCompletionRoutine$10$label_20_icall_2#1, inline$CallCompletionRoutine$10$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$10$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$10$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$10$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$10$Entry#1:
- inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$10$start#1;
-
- inline$BDLSystemPowerIoCompletion$10$start#1:
- call inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$10$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_4#1:
- inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_6#1:
- inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$10$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$10$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$10$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$58$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$58$Entry#1:
- inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$58$start#1;
-
- inline$IoGetCurrentIrpStackLocation$58$start#1:
- inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$58$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$58$label_3_true#1, inline$IoGetCurrentIrpStackLocation$58$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$58$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$58$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$58$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$58$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$58$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$58$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$58$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$58$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$58$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$58$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$58$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$58$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$58$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$58$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$58$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$58$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$58$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$58$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$58$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$58$Return#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon36_Then#1, inline$BDLSystemPowerIoCompletion$10$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_15#1:
- goto inline$BDLGetDebugLevel$295$Entry#1;
-
- inline$BDLGetDebugLevel$295$Entry#1:
- goto inline$BDLGetDebugLevel$295$start#1;
-
- inline$BDLGetDebugLevel$295$start#1:
- goto inline$BDLGetDebugLevel$295$label_3#1;
-
- inline$BDLGetDebugLevel$295$label_3#1:
- havoc inline$BDLGetDebugLevel$295$myNondetVar_0;
- inline$BDLGetDebugLevel$295$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$295$myNondetVar_0;
- goto inline$BDLGetDebugLevel$295$label_1#1;
-
- inline$BDLGetDebugLevel$295$label_1#1:
- goto inline$BDLGetDebugLevel$295$Return#1;
-
- inline$BDLGetDebugLevel$295$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$295$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon37_Then#1, inline$BDLSystemPowerIoCompletion$10$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_18_true#1, inline$BDLSystemPowerIoCompletion$10$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_22#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_23#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_24#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$10$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_19#1:
- goto inline$BDLGetDebugLevel$296$Entry#1;
-
- inline$BDLGetDebugLevel$296$Entry#1:
- goto inline$BDLGetDebugLevel$296$start#1;
-
- inline$BDLGetDebugLevel$296$start#1:
- goto inline$BDLGetDebugLevel$296$label_3#1;
-
- inline$BDLGetDebugLevel$296$label_3#1:
- havoc inline$BDLGetDebugLevel$296$myNondetVar_0;
- inline$BDLGetDebugLevel$296$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$296$myNondetVar_0;
- goto inline$BDLGetDebugLevel$296$label_1#1;
-
- inline$BDLGetDebugLevel$296$label_1#1:
- goto inline$BDLGetDebugLevel$296$Return#1;
-
- inline$BDLGetDebugLevel$296$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$296$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon38_Then#1, inline$BDLSystemPowerIoCompletion$10$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_28_true#1, inline$BDLSystemPowerIoCompletion$10$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_32#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_33#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_34#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$10$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_29#1:
- goto inline$BDLGetDebugLevel$297$Entry#1;
-
- inline$BDLGetDebugLevel$297$Entry#1:
- goto inline$BDLGetDebugLevel$297$start#1;
-
- inline$BDLGetDebugLevel$297$start#1:
- goto inline$BDLGetDebugLevel$297$label_3#1;
-
- inline$BDLGetDebugLevel$297$label_3#1:
- havoc inline$BDLGetDebugLevel$297$myNondetVar_0;
- inline$BDLGetDebugLevel$297$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$297$myNondetVar_0;
- goto inline$BDLGetDebugLevel$297$label_1#1;
-
- inline$BDLGetDebugLevel$297$label_1#1:
- goto inline$BDLGetDebugLevel$297$Return#1;
-
- inline$BDLGetDebugLevel$297$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$297$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon39_Then#1, inline$BDLSystemPowerIoCompletion$10$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_38_true#1, inline$BDLSystemPowerIoCompletion$10$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_39_true#1, inline$BDLSystemPowerIoCompletion$10$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$10$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$10$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$10$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_106_true#1, inline$BDLSystemPowerIoCompletion$10$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_142#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_143#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$10$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$10$myNondetVar_0, inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$10$anon50_Then#1, inline$BDLSystemPowerIoCompletion$10$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_112#1:
- inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$10$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_113_true#1, inline$BDLSystemPowerIoCompletion$10$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$10$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_117#1:
- goto inline$BDLGetDebugLevel$304$Entry#1;
-
- inline$BDLGetDebugLevel$304$Entry#1:
- goto inline$BDLGetDebugLevel$304$start#1;
-
- inline$BDLGetDebugLevel$304$start#1:
- goto inline$BDLGetDebugLevel$304$label_3#1;
-
- inline$BDLGetDebugLevel$304$label_3#1:
- havoc inline$BDLGetDebugLevel$304$myNondetVar_0;
- inline$BDLGetDebugLevel$304$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$304$myNondetVar_0;
- goto inline$BDLGetDebugLevel$304$label_1#1;
-
- inline$BDLGetDebugLevel$304$label_1#1:
- goto inline$BDLGetDebugLevel$304$Return#1;
-
- inline$BDLGetDebugLevel$304$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$304$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon51_Then#1, inline$BDLSystemPowerIoCompletion$10$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_120_true#1, inline$BDLSystemPowerIoCompletion$10$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_124#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_125#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_126#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$10$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_121#1:
- goto inline$BDLGetDebugLevel$305$Entry#1;
-
- inline$BDLGetDebugLevel$305$Entry#1:
- goto inline$BDLGetDebugLevel$305$start#1;
-
- inline$BDLGetDebugLevel$305$start#1:
- goto inline$BDLGetDebugLevel$305$label_3#1;
-
- inline$BDLGetDebugLevel$305$label_3#1:
- havoc inline$BDLGetDebugLevel$305$myNondetVar_0;
- inline$BDLGetDebugLevel$305$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$305$myNondetVar_0;
- goto inline$BDLGetDebugLevel$305$label_1#1;
-
- inline$BDLGetDebugLevel$305$label_1#1:
- goto inline$BDLGetDebugLevel$305$Return#1;
-
- inline$BDLGetDebugLevel$305$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$305$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon52_Then#1, inline$BDLSystemPowerIoCompletion$10$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_130_true#1, inline$BDLSystemPowerIoCompletion$10$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_134#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_135#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_136#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$10$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_131#1:
- goto inline$BDLGetDebugLevel$306$Entry#1;
-
- inline$BDLGetDebugLevel$306$Entry#1:
- goto inline$BDLGetDebugLevel$306$start#1;
-
- inline$BDLGetDebugLevel$306$start#1:
- goto inline$BDLGetDebugLevel$306$label_3#1;
-
- inline$BDLGetDebugLevel$306$label_3#1:
- havoc inline$BDLGetDebugLevel$306$myNondetVar_0;
- inline$BDLGetDebugLevel$306$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$306$myNondetVar_0;
- goto inline$BDLGetDebugLevel$306$label_1#1;
-
- inline$BDLGetDebugLevel$306$label_1#1:
- goto inline$BDLGetDebugLevel$306$Return#1;
-
- inline$BDLGetDebugLevel$306$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$306$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon53_Then#1, inline$BDLSystemPowerIoCompletion$10$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_140_true#1, inline$BDLSystemPowerIoCompletion$10$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$10$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_115#1:
- inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$10$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$10$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_43#1:
- goto inline$BDLGetDebugLevel$298$Entry#1;
-
- inline$BDLGetDebugLevel$298$Entry#1:
- goto inline$BDLGetDebugLevel$298$start#1;
-
- inline$BDLGetDebugLevel$298$start#1:
- goto inline$BDLGetDebugLevel$298$label_3#1;
-
- inline$BDLGetDebugLevel$298$label_3#1:
- havoc inline$BDLGetDebugLevel$298$myNondetVar_0;
- inline$BDLGetDebugLevel$298$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$298$myNondetVar_0;
- goto inline$BDLGetDebugLevel$298$label_1#1;
-
- inline$BDLGetDebugLevel$298$label_1#1:
- goto inline$BDLGetDebugLevel$298$Return#1;
-
- inline$BDLGetDebugLevel$298$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$298$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon40_Then#1, inline$BDLSystemPowerIoCompletion$10$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_46_true#1, inline$BDLSystemPowerIoCompletion$10$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_50#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_51#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_52#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$10$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_47#1:
- goto inline$BDLGetDebugLevel$299$Entry#1;
-
- inline$BDLGetDebugLevel$299$Entry#1:
- goto inline$BDLGetDebugLevel$299$start#1;
-
- inline$BDLGetDebugLevel$299$start#1:
- goto inline$BDLGetDebugLevel$299$label_3#1;
-
- inline$BDLGetDebugLevel$299$label_3#1:
- havoc inline$BDLGetDebugLevel$299$myNondetVar_0;
- inline$BDLGetDebugLevel$299$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$299$myNondetVar_0;
- goto inline$BDLGetDebugLevel$299$label_1#1;
-
- inline$BDLGetDebugLevel$299$label_1#1:
- goto inline$BDLGetDebugLevel$299$Return#1;
-
- inline$BDLGetDebugLevel$299$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$299$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon41_Then#1, inline$BDLSystemPowerIoCompletion$10$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_56_true#1, inline$BDLSystemPowerIoCompletion$10$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_60#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_61#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_62#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$10$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_57#1:
- goto inline$BDLGetDebugLevel$300$Entry#1;
-
- inline$BDLGetDebugLevel$300$Entry#1:
- goto inline$BDLGetDebugLevel$300$start#1;
-
- inline$BDLGetDebugLevel$300$start#1:
- goto inline$BDLGetDebugLevel$300$label_3#1;
-
- inline$BDLGetDebugLevel$300$label_3#1:
- havoc inline$BDLGetDebugLevel$300$myNondetVar_0;
- inline$BDLGetDebugLevel$300$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$300$myNondetVar_0;
- goto inline$BDLGetDebugLevel$300$label_1#1;
-
- inline$BDLGetDebugLevel$300$label_1#1:
- goto inline$BDLGetDebugLevel$300$Return#1;
-
- inline$BDLGetDebugLevel$300$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$300$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon42_Then#1, inline$BDLSystemPowerIoCompletion$10$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_66_true#1, inline$BDLSystemPowerIoCompletion$10$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$10$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$10$anon43_Then#1, inline$BDLSystemPowerIoCompletion$10$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$10$anon44_Then#1, inline$BDLSystemPowerIoCompletion$10$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_74#1:
- goto inline$storm_IoCompleteRequest$22$Entry#1;
-
- inline$storm_IoCompleteRequest$22$Entry#1:
- inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$22$start#1;
-
- inline$storm_IoCompleteRequest$22$start#1:
- inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$22$label_3#1;
-
- inline$storm_IoCompleteRequest$22$label_3#1:
- call inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$22$label_6#1;
-
- inline$storm_IoCompleteRequest$22$label_6#1:
- goto inline$storm_IoCompleteRequest$22$label_6_true#1, inline$storm_IoCompleteRequest$22$label_6_false#1;
-
- inline$storm_IoCompleteRequest$22$label_6_false#1:
- assume inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$22$label_7#1;
-
- inline$storm_IoCompleteRequest$22$label_6_true#1:
- assume inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$22$label_8#1;
-
- inline$storm_IoCompleteRequest$22$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$22$anon3_Then#1, inline$storm_IoCompleteRequest$22$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$22$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$22$anon1#1;
-
- inline$storm_IoCompleteRequest$22$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$22$label_9#1;
-
- inline$storm_IoCompleteRequest$22$label_9#1:
- goto inline$storm_IoCompleteRequest$22$label_9_true#1, inline$storm_IoCompleteRequest$22$label_9_false#1;
-
- inline$storm_IoCompleteRequest$22$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$22$label_10#1;
-
- inline$storm_IoCompleteRequest$22$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$22$label_1#1;
-
- inline$storm_IoCompleteRequest$22$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$22$label_7#1;
-
- inline$storm_IoCompleteRequest$22$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$22$label_1#1;
-
- inline$storm_IoCompleteRequest$22$label_1#1:
- goto inline$storm_IoCompleteRequest$22$Return#1;
-
- inline$storm_IoCompleteRequest$22$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$22$Return#1;
-
- inline$storm_IoCompleteRequest$22$Return#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon45_Then#1, inline$BDLSystemPowerIoCompletion$10$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$10$anon46_Then#1, inline$BDLSystemPowerIoCompletion$10$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_80#1:
- goto inline$BDLGetDebugLevel$301$Entry#1;
-
- inline$BDLGetDebugLevel$301$Entry#1:
- goto inline$BDLGetDebugLevel$301$start#1;
-
- inline$BDLGetDebugLevel$301$start#1:
- goto inline$BDLGetDebugLevel$301$label_3#1;
-
- inline$BDLGetDebugLevel$301$label_3#1:
- havoc inline$BDLGetDebugLevel$301$myNondetVar_0;
- inline$BDLGetDebugLevel$301$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$301$myNondetVar_0;
- goto inline$BDLGetDebugLevel$301$label_1#1;
-
- inline$BDLGetDebugLevel$301$label_1#1:
- goto inline$BDLGetDebugLevel$301$Return#1;
-
- inline$BDLGetDebugLevel$301$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$301$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon47_Then#1, inline$BDLSystemPowerIoCompletion$10$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_83_true#1, inline$BDLSystemPowerIoCompletion$10$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_87#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_88#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_89#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$10$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_84#1:
- goto inline$BDLGetDebugLevel$302$Entry#1;
-
- inline$BDLGetDebugLevel$302$Entry#1:
- goto inline$BDLGetDebugLevel$302$start#1;
-
- inline$BDLGetDebugLevel$302$start#1:
- goto inline$BDLGetDebugLevel$302$label_3#1;
-
- inline$BDLGetDebugLevel$302$label_3#1:
- havoc inline$BDLGetDebugLevel$302$myNondetVar_0;
- inline$BDLGetDebugLevel$302$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$302$myNondetVar_0;
- goto inline$BDLGetDebugLevel$302$label_1#1;
-
- inline$BDLGetDebugLevel$302$label_1#1:
- goto inline$BDLGetDebugLevel$302$Return#1;
-
- inline$BDLGetDebugLevel$302$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$302$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon48_Then#1, inline$BDLSystemPowerIoCompletion$10$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_93_true#1, inline$BDLSystemPowerIoCompletion$10$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_97#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_98#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_99#1:
- call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$10$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$10$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_94#1:
- goto inline$BDLGetDebugLevel$303$Entry#1;
-
- inline$BDLGetDebugLevel$303$Entry#1:
- goto inline$BDLGetDebugLevel$303$start#1;
-
- inline$BDLGetDebugLevel$303$start#1:
- goto inline$BDLGetDebugLevel$303$label_3#1;
-
- inline$BDLGetDebugLevel$303$label_3#1:
- havoc inline$BDLGetDebugLevel$303$myNondetVar_0;
- inline$BDLGetDebugLevel$303$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$303$myNondetVar_0;
- goto inline$BDLGetDebugLevel$303$label_1#1;
-
- inline$BDLGetDebugLevel$303$label_1#1:
- goto inline$BDLGetDebugLevel$303$Return#1;
-
- inline$BDLGetDebugLevel$303$Return#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$303$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$10$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$10$anon49_Then#1, inline$BDLSystemPowerIoCompletion$10$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_103_true#1, inline$BDLSystemPowerIoCompletion$10$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$10$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$10$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_104#1:
- inline$BDLSystemPowerIoCompletion$10$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$10$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$10$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$10$Return#1;
-
- inline$BDLSystemPowerIoCompletion$10$Return#1:
- inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$10$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$10$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$10$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$10$anon14_Then#1, inline$CallCompletionRoutine$10$anon14_Else#1;
-
- inline$CallCompletionRoutine$10$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$10$anon9#1;
-
- inline$CallCompletionRoutine$10$anon9#1:
- goto inline$CallCompletionRoutine$10$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$10$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$10$Return#1;
-
- inline$CallCompletionRoutine$10$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$10$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$10$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$10$Entry#1:
- inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$10$start#1;
-
- inline$BDLDevicePowerIoCompletion$10$start#1:
- call inline$BDLDevicePowerIoCompletion$10$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$10$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_4#1:
- inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_6#1:
- inline$BDLDevicePowerIoCompletion$10$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$10$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$10$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$10$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$57$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$57$Entry#1:
- inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$57$start#1;
-
- inline$IoGetCurrentIrpStackLocation$57$start#1:
- inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$57$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$57$label_3_true#1, inline$IoGetCurrentIrpStackLocation$57$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$57$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$57$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$57$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$57$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$57$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$57$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$57$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$57$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$57$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$57$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$57$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$57$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$57$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$57$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$57$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$57$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$57$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$57$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$57$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$57$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$57$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$57$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$57$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon30_Then#1, inline$BDLDevicePowerIoCompletion$10$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_13#1:
- inline$BDLDevicePowerIoCompletion$10$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$10$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$10$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_17#1:
- goto inline$BDLGetDebugLevel$286$Entry#1;
-
- inline$BDLGetDebugLevel$286$Entry#1:
- goto inline$BDLGetDebugLevel$286$start#1;
-
- inline$BDLGetDebugLevel$286$start#1:
- goto inline$BDLGetDebugLevel$286$label_3#1;
-
- inline$BDLGetDebugLevel$286$label_3#1:
- havoc inline$BDLGetDebugLevel$286$myNondetVar_0;
- inline$BDLGetDebugLevel$286$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$286$myNondetVar_0;
- goto inline$BDLGetDebugLevel$286$label_1#1;
-
- inline$BDLGetDebugLevel$286$label_1#1:
- goto inline$BDLGetDebugLevel$286$Return#1;
-
- inline$BDLGetDebugLevel$286$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$286$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon31_Then#1, inline$BDLDevicePowerIoCompletion$10$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_20_true#1, inline$BDLDevicePowerIoCompletion$10$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_24#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_25#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_26#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$10$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_21#1:
- goto inline$BDLGetDebugLevel$287$Entry#1;
-
- inline$BDLGetDebugLevel$287$Entry#1:
- goto inline$BDLGetDebugLevel$287$start#1;
-
- inline$BDLGetDebugLevel$287$start#1:
- goto inline$BDLGetDebugLevel$287$label_3#1;
-
- inline$BDLGetDebugLevel$287$label_3#1:
- havoc inline$BDLGetDebugLevel$287$myNondetVar_0;
- inline$BDLGetDebugLevel$287$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$287$myNondetVar_0;
- goto inline$BDLGetDebugLevel$287$label_1#1;
-
- inline$BDLGetDebugLevel$287$label_1#1:
- goto inline$BDLGetDebugLevel$287$Return#1;
-
- inline$BDLGetDebugLevel$287$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$287$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon32_Then#1, inline$BDLDevicePowerIoCompletion$10$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_30_true#1, inline$BDLDevicePowerIoCompletion$10$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_34#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_35#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_36#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$10$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_31#1:
- goto inline$BDLGetDebugLevel$288$Entry#1;
-
- inline$BDLGetDebugLevel$288$Entry#1:
- goto inline$BDLGetDebugLevel$288$start#1;
-
- inline$BDLGetDebugLevel$288$start#1:
- goto inline$BDLGetDebugLevel$288$label_3#1;
-
- inline$BDLGetDebugLevel$288$label_3#1:
- havoc inline$BDLGetDebugLevel$288$myNondetVar_0;
- inline$BDLGetDebugLevel$288$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$288$myNondetVar_0;
- goto inline$BDLGetDebugLevel$288$label_1#1;
-
- inline$BDLGetDebugLevel$288$label_1#1:
- goto inline$BDLGetDebugLevel$288$Return#1;
-
- inline$BDLGetDebugLevel$288$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$288$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon33_Then#1, inline$BDLDevicePowerIoCompletion$10$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_40_true#1, inline$BDLDevicePowerIoCompletion$10$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_41_true#1, inline$BDLDevicePowerIoCompletion$10$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$10$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$10$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_44_true#1, inline$BDLDevicePowerIoCompletion$10$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$10$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_45_true#1, inline$BDLDevicePowerIoCompletion$10$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$10$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$10$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$10$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$10$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$10$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$10$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_54#1:
- inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$10$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_55_true#1, inline$BDLDevicePowerIoCompletion$10$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_56#1:
- call inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$10$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$10$anon34_Then#1, inline$BDLDevicePowerIoCompletion$10$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_59#1:
- goto inline$BDLGetDebugLevel$289$Entry#1;
-
- inline$BDLGetDebugLevel$289$Entry#1:
- goto inline$BDLGetDebugLevel$289$start#1;
-
- inline$BDLGetDebugLevel$289$start#1:
- goto inline$BDLGetDebugLevel$289$label_3#1;
-
- inline$BDLGetDebugLevel$289$label_3#1:
- havoc inline$BDLGetDebugLevel$289$myNondetVar_0;
- inline$BDLGetDebugLevel$289$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$289$myNondetVar_0;
- goto inline$BDLGetDebugLevel$289$label_1#1;
-
- inline$BDLGetDebugLevel$289$label_1#1:
- goto inline$BDLGetDebugLevel$289$Return#1;
-
- inline$BDLGetDebugLevel$289$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$289$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon35_Then#1, inline$BDLDevicePowerIoCompletion$10$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_62_true#1, inline$BDLDevicePowerIoCompletion$10$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_66#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_67#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_68#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$10$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_63#1:
- goto inline$BDLGetDebugLevel$290$Entry#1;
-
- inline$BDLGetDebugLevel$290$Entry#1:
- goto inline$BDLGetDebugLevel$290$start#1;
-
- inline$BDLGetDebugLevel$290$start#1:
- goto inline$BDLGetDebugLevel$290$label_3#1;
-
- inline$BDLGetDebugLevel$290$label_3#1:
- havoc inline$BDLGetDebugLevel$290$myNondetVar_0;
- inline$BDLGetDebugLevel$290$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$290$myNondetVar_0;
- goto inline$BDLGetDebugLevel$290$label_1#1;
-
- inline$BDLGetDebugLevel$290$label_1#1:
- goto inline$BDLGetDebugLevel$290$Return#1;
-
- inline$BDLGetDebugLevel$290$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$290$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon36_Then#1, inline$BDLDevicePowerIoCompletion$10$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_72_true#1, inline$BDLDevicePowerIoCompletion$10$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_76#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_77#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_78#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$10$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_73#1:
- goto inline$BDLGetDebugLevel$291$Entry#1;
-
- inline$BDLGetDebugLevel$291$Entry#1:
- goto inline$BDLGetDebugLevel$291$start#1;
-
- inline$BDLGetDebugLevel$291$start#1:
- goto inline$BDLGetDebugLevel$291$label_3#1;
-
- inline$BDLGetDebugLevel$291$label_3#1:
- havoc inline$BDLGetDebugLevel$291$myNondetVar_0;
- inline$BDLGetDebugLevel$291$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$291$myNondetVar_0;
- goto inline$BDLGetDebugLevel$291$label_1#1;
-
- inline$BDLGetDebugLevel$291$label_1#1:
- goto inline$BDLGetDebugLevel$291$Return#1;
-
- inline$BDLGetDebugLevel$291$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$291$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon37_Then#1, inline$BDLDevicePowerIoCompletion$10$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_82_true#1, inline$BDLDevicePowerIoCompletion$10$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$10$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$10$anon38_Then#1, inline$BDLDevicePowerIoCompletion$10$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$10$anon39_Then#1, inline$BDLDevicePowerIoCompletion$10$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_92#1:
- goto inline$storm_IoCompleteRequest$21$Entry#1;
-
- inline$storm_IoCompleteRequest$21$Entry#1:
- inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$21$start#1;
-
- inline$storm_IoCompleteRequest$21$start#1:
- inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$21$label_3#1;
-
- inline$storm_IoCompleteRequest$21$label_3#1:
- call inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$21$label_6#1;
-
- inline$storm_IoCompleteRequest$21$label_6#1:
- goto inline$storm_IoCompleteRequest$21$label_6_true#1, inline$storm_IoCompleteRequest$21$label_6_false#1;
-
- inline$storm_IoCompleteRequest$21$label_6_false#1:
- assume inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$21$label_7#1;
-
- inline$storm_IoCompleteRequest$21$label_6_true#1:
- assume inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$21$label_8#1;
-
- inline$storm_IoCompleteRequest$21$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$21$anon3_Then#1, inline$storm_IoCompleteRequest$21$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$21$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$21$anon1#1;
-
- inline$storm_IoCompleteRequest$21$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$21$label_9#1;
-
- inline$storm_IoCompleteRequest$21$label_9#1:
- goto inline$storm_IoCompleteRequest$21$label_9_true#1, inline$storm_IoCompleteRequest$21$label_9_false#1;
-
- inline$storm_IoCompleteRequest$21$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$21$label_10#1;
-
- inline$storm_IoCompleteRequest$21$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$21$label_1#1;
-
- inline$storm_IoCompleteRequest$21$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$21$label_7#1;
-
- inline$storm_IoCompleteRequest$21$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$21$label_1#1;
-
- inline$storm_IoCompleteRequest$21$label_1#1:
- goto inline$storm_IoCompleteRequest$21$Return#1;
-
- inline$storm_IoCompleteRequest$21$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$21$Return#1;
-
- inline$storm_IoCompleteRequest$21$Return#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon40_Then#1, inline$BDLDevicePowerIoCompletion$10$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$10$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$10$anon41_Then#1, inline$BDLDevicePowerIoCompletion$10$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_98#1:
- goto inline$BDLGetDebugLevel$292$Entry#1;
-
- inline$BDLGetDebugLevel$292$Entry#1:
- goto inline$BDLGetDebugLevel$292$start#1;
-
- inline$BDLGetDebugLevel$292$start#1:
- goto inline$BDLGetDebugLevel$292$label_3#1;
-
- inline$BDLGetDebugLevel$292$label_3#1:
- havoc inline$BDLGetDebugLevel$292$myNondetVar_0;
- inline$BDLGetDebugLevel$292$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$292$myNondetVar_0;
- goto inline$BDLGetDebugLevel$292$label_1#1;
-
- inline$BDLGetDebugLevel$292$label_1#1:
- goto inline$BDLGetDebugLevel$292$Return#1;
-
- inline$BDLGetDebugLevel$292$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$292$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon42_Then#1, inline$BDLDevicePowerIoCompletion$10$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_101_true#1, inline$BDLDevicePowerIoCompletion$10$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_105#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_106#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_107#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$10$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_102#1:
- goto inline$BDLGetDebugLevel$293$Entry#1;
-
- inline$BDLGetDebugLevel$293$Entry#1:
- goto inline$BDLGetDebugLevel$293$start#1;
-
- inline$BDLGetDebugLevel$293$start#1:
- goto inline$BDLGetDebugLevel$293$label_3#1;
-
- inline$BDLGetDebugLevel$293$label_3#1:
- havoc inline$BDLGetDebugLevel$293$myNondetVar_0;
- inline$BDLGetDebugLevel$293$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$293$myNondetVar_0;
- goto inline$BDLGetDebugLevel$293$label_1#1;
-
- inline$BDLGetDebugLevel$293$label_1#1:
- goto inline$BDLGetDebugLevel$293$Return#1;
-
- inline$BDLGetDebugLevel$293$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$293$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon43_Then#1, inline$BDLDevicePowerIoCompletion$10$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_111_true#1, inline$BDLDevicePowerIoCompletion$10$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_115#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_116#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_117#1:
- call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$10$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$10$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_112#1:
- goto inline$BDLGetDebugLevel$294$Entry#1;
-
- inline$BDLGetDebugLevel$294$Entry#1:
- goto inline$BDLGetDebugLevel$294$start#1;
-
- inline$BDLGetDebugLevel$294$start#1:
- goto inline$BDLGetDebugLevel$294$label_3#1;
-
- inline$BDLGetDebugLevel$294$label_3#1:
- havoc inline$BDLGetDebugLevel$294$myNondetVar_0;
- inline$BDLGetDebugLevel$294$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$294$myNondetVar_0;
- goto inline$BDLGetDebugLevel$294$label_1#1;
-
- inline$BDLGetDebugLevel$294$label_1#1:
- goto inline$BDLGetDebugLevel$294$Return#1;
-
- inline$BDLGetDebugLevel$294$Return#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$294$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$10$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$10$anon44_Then#1, inline$BDLDevicePowerIoCompletion$10$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_121_true#1, inline$BDLDevicePowerIoCompletion$10$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$10$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$10$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_122#1:
- inline$BDLDevicePowerIoCompletion$10$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$10$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$10$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$10$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$10$Return#1;
-
- inline$BDLDevicePowerIoCompletion$10$Return#1:
- inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$10$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$10$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$10$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$10$anon13_Then#1, inline$CallCompletionRoutine$10$anon13_Else#1;
-
- inline$CallCompletionRoutine$10$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$10$anon7#1;
-
- inline$CallCompletionRoutine$10$anon7#1:
- goto inline$CallCompletionRoutine$10$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$10$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$10$Return#1;
-
- inline$CallCompletionRoutine$10$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$10$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$10$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$10$Entry#1:
- inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$10$start#1;
-
- inline$BDLCallDriverCompletionRoutine$10$start#1:
- inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$10$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$10$label_3_true#1, inline$BDLCallDriverCompletionRoutine$10$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$10$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$10$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$10$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$10$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_6#1:
- goto inline$storm_KeSetEvent$12$Entry#1;
-
- inline$storm_KeSetEvent$12$Entry#1:
- inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$12$start#1;
-
- inline$storm_KeSetEvent$12$start#1:
- inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$12$label_3#1;
-
- inline$storm_KeSetEvent$12$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$12$label_1#1;
-
- inline$storm_KeSetEvent$12$label_1#1:
- goto inline$storm_KeSetEvent$12$Return#1;
-
- inline$storm_KeSetEvent$12$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$10$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$10$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$10$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$10$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$10$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$10$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$10$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_9#1:
- inline$BDLCallDriverCompletionRoutine$10$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$10$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$10$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$10$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$10$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$10$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$10$Return#1:
- inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$10$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$10$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$10$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$10$anon12_Then#1, inline$CallCompletionRoutine$10$anon12_Else#1;
-
- inline$CallCompletionRoutine$10$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$10$anon5#1;
-
- inline$CallCompletionRoutine$10$anon5#1:
- goto inline$CallCompletionRoutine$10$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$10$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$10$label_23#1;
-
- inline$CallCompletionRoutine$10$label_23#1:
- inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$10$label_24#1;
-
- inline$CallCompletionRoutine$10$label_24#1:
- goto inline$CallCompletionRoutine$10$label_24_true#1, inline$CallCompletionRoutine$10$label_24_false#1;
-
- inline$CallCompletionRoutine$10$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$10$label_1#1;
-
- inline$CallCompletionRoutine$10$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$10$label_25#1;
-
- inline$CallCompletionRoutine$10$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$10$label_1#1;
-
- inline$CallCompletionRoutine$10$label_1#1:
- goto inline$CallCompletionRoutine$10$Return#1;
-
- inline$CallCompletionRoutine$10$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$10$Return#1;
-
- inline$CallCompletionRoutine$10$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$10$Return#1;
-
- inline$CallCompletionRoutine$10$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$10$Return#1;
-
- inline$CallCompletionRoutine$10$Return#1:
- goto inline$storm_IoCallDriver$5$label_33$1#1;
-
- inline$storm_IoCallDriver$5$label_33$1#1:
- goto inline$storm_IoCallDriver$5$anon14_Then#1, inline$storm_IoCallDriver$5$anon14_Else#1;
-
- inline$storm_IoCallDriver$5$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$5$anon8#1;
-
- inline$storm_IoCallDriver$5$anon8#1:
- goto inline$storm_IoCallDriver$5$label_36#1;
-
- inline$storm_IoCallDriver$5$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$5$Return#1;
-
- inline$storm_IoCallDriver$5$label_27_case_1#1:
- assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$5$label_29#1;
-
- inline$storm_IoCallDriver$5$label_29#1:
- inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$5$label_37#1;
-
- inline$storm_IoCallDriver$5$label_37#1:
- goto inline$storm_IoCallDriver$5$label_38#1;
-
- inline$storm_IoCallDriver$5$label_38#1:
- goto inline$storm_IoCallDriver$5$label_39#1;
-
- inline$storm_IoCallDriver$5$label_39#1:
- goto inline$CallCompletionRoutine$11$Entry#1;
-
- inline$CallCompletionRoutine$11$Entry#1:
- inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$11$start#1;
-
- inline$CallCompletionRoutine$11$start#1:
- inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$11$label_3#1;
-
- inline$CallCompletionRoutine$11$label_3#1:
- goto inline$CallCompletionRoutine$11$label_4#1;
-
- inline$CallCompletionRoutine$11$label_4#1:
- goto inline$CallCompletionRoutine$11$label_5#1;
-
- inline$CallCompletionRoutine$11$label_5#1:
- goto inline$CallCompletionRoutine$11$label_6#1;
-
- inline$CallCompletionRoutine$11$label_6#1:
- goto inline$CallCompletionRoutine$11$label_7#1;
-
- inline$CallCompletionRoutine$11$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$59$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$59$Entry#1:
- inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$59$start#1;
-
- inline$IoGetCurrentIrpStackLocation$59$start#1:
- inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$59$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$59$label_3_true#1, inline$IoGetCurrentIrpStackLocation$59$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$59$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$59$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$59$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$59$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$59$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$59$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$59$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$59$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$59$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$59$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$59$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$59$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$59$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$59$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$59$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$59$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$59$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$59$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$59$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$59$Return#1:
- goto inline$CallCompletionRoutine$11$label_7$1#1;
-
- inline$CallCompletionRoutine$11$label_7$1#1:
- goto inline$CallCompletionRoutine$11$anon10_Then#1, inline$CallCompletionRoutine$11$anon10_Else#1;
-
- inline$CallCompletionRoutine$11$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$11$anon1#1;
-
- inline$CallCompletionRoutine$11$anon1#1:
- goto inline$CallCompletionRoutine$11$label_10#1;
-
- inline$CallCompletionRoutine$11$label_10#1:
- goto inline$CallCompletionRoutine$11$label_11#1;
-
- inline$CallCompletionRoutine$11$label_11#1:
- havoc inline$CallCompletionRoutine$11$myNondetVar_0;
- inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$myNondetVar_0;
- goto inline$CallCompletionRoutine$11$label_12#1;
-
- inline$CallCompletionRoutine$11$label_12#1:
- havoc inline$CallCompletionRoutine$11$myNondetVar_0;
- inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$myNondetVar_0;
- goto inline$CallCompletionRoutine$11$label_13#1;
-
- inline$CallCompletionRoutine$11$label_13#1:
- havoc inline$CallCompletionRoutine$11$myNondetVar_0;
- goto inline$CallCompletionRoutine$11$label_14#1;
-
- inline$CallCompletionRoutine$11$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$60$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$60$Entry#1:
- inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$60$start#1;
-
- inline$IoGetCurrentIrpStackLocation$60$start#1:
- inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$60$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$60$label_3_true#1, inline$IoGetCurrentIrpStackLocation$60$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$60$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$60$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$60$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$60$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$60$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$60$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$60$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$60$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$60$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$60$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$60$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$60$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$60$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$60$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$60$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$60$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$60$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$60$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$60$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$60$Return#1:
- goto inline$CallCompletionRoutine$11$label_14$1#1;
-
- inline$CallCompletionRoutine$11$label_14$1#1:
- goto inline$CallCompletionRoutine$11$anon11_Then#1, inline$CallCompletionRoutine$11$anon11_Else#1;
-
- inline$CallCompletionRoutine$11$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$11$anon3#1;
-
- inline$CallCompletionRoutine$11$anon3#1:
- goto inline$CallCompletionRoutine$11$label_17#1;
-
- inline$CallCompletionRoutine$11$label_17#1:
- goto inline$CallCompletionRoutine$11$label_18#1;
-
- inline$CallCompletionRoutine$11$label_18#1:
- goto inline$CallCompletionRoutine$11$label_18_true#1, inline$CallCompletionRoutine$11$label_18_false#1;
-
- inline$CallCompletionRoutine$11$label_18_false#1:
- assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$11$label_1#1;
-
- inline$CallCompletionRoutine$11$label_18_true#1:
- assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$11$label_19#1;
-
- inline$CallCompletionRoutine$11$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$11$label_20#1;
-
- inline$CallCompletionRoutine$11$label_20#1:
- goto inline$CallCompletionRoutine$11$label_20_icall_1#1, inline$CallCompletionRoutine$11$label_20_icall_2#1, inline$CallCompletionRoutine$11$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$11$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$11$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$11$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$11$Entry#1:
- inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$11$start#1;
-
- inline$BDLSystemPowerIoCompletion$11$start#1:
- call inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$11$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_4#1:
- inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_6#1:
- inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$11$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$11$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$11$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$62$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$62$Entry#1:
- inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$62$start#1;
-
- inline$IoGetCurrentIrpStackLocation$62$start#1:
- inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$62$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$62$label_3_true#1, inline$IoGetCurrentIrpStackLocation$62$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$62$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$62$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$62$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$62$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$62$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$62$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$62$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$62$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$62$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$62$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$62$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$62$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$62$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$62$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$62$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$62$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$62$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$62$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$62$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$62$Return#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon36_Then#1, inline$BDLSystemPowerIoCompletion$11$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_15#1:
- goto inline$BDLGetDebugLevel$316$Entry#1;
-
- inline$BDLGetDebugLevel$316$Entry#1:
- goto inline$BDLGetDebugLevel$316$start#1;
-
- inline$BDLGetDebugLevel$316$start#1:
- goto inline$BDLGetDebugLevel$316$label_3#1;
-
- inline$BDLGetDebugLevel$316$label_3#1:
- havoc inline$BDLGetDebugLevel$316$myNondetVar_0;
- inline$BDLGetDebugLevel$316$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$316$myNondetVar_0;
- goto inline$BDLGetDebugLevel$316$label_1#1;
-
- inline$BDLGetDebugLevel$316$label_1#1:
- goto inline$BDLGetDebugLevel$316$Return#1;
-
- inline$BDLGetDebugLevel$316$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$316$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon37_Then#1, inline$BDLSystemPowerIoCompletion$11$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_18_true#1, inline$BDLSystemPowerIoCompletion$11$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_22#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_23#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_24#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$11$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_19#1:
- goto inline$BDLGetDebugLevel$317$Entry#1;
-
- inline$BDLGetDebugLevel$317$Entry#1:
- goto inline$BDLGetDebugLevel$317$start#1;
-
- inline$BDLGetDebugLevel$317$start#1:
- goto inline$BDLGetDebugLevel$317$label_3#1;
-
- inline$BDLGetDebugLevel$317$label_3#1:
- havoc inline$BDLGetDebugLevel$317$myNondetVar_0;
- inline$BDLGetDebugLevel$317$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$317$myNondetVar_0;
- goto inline$BDLGetDebugLevel$317$label_1#1;
-
- inline$BDLGetDebugLevel$317$label_1#1:
- goto inline$BDLGetDebugLevel$317$Return#1;
-
- inline$BDLGetDebugLevel$317$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$317$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon38_Then#1, inline$BDLSystemPowerIoCompletion$11$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_28_true#1, inline$BDLSystemPowerIoCompletion$11$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_32#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_33#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_34#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$11$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_29#1:
- goto inline$BDLGetDebugLevel$318$Entry#1;
-
- inline$BDLGetDebugLevel$318$Entry#1:
- goto inline$BDLGetDebugLevel$318$start#1;
-
- inline$BDLGetDebugLevel$318$start#1:
- goto inline$BDLGetDebugLevel$318$label_3#1;
-
- inline$BDLGetDebugLevel$318$label_3#1:
- havoc inline$BDLGetDebugLevel$318$myNondetVar_0;
- inline$BDLGetDebugLevel$318$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$318$myNondetVar_0;
- goto inline$BDLGetDebugLevel$318$label_1#1;
-
- inline$BDLGetDebugLevel$318$label_1#1:
- goto inline$BDLGetDebugLevel$318$Return#1;
-
- inline$BDLGetDebugLevel$318$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$318$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon39_Then#1, inline$BDLSystemPowerIoCompletion$11$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_38_true#1, inline$BDLSystemPowerIoCompletion$11$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_39_true#1, inline$BDLSystemPowerIoCompletion$11$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$11$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$11$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$11$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_106_true#1, inline$BDLSystemPowerIoCompletion$11$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_142#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_143#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$11$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$11$myNondetVar_0, inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$11$anon50_Then#1, inline$BDLSystemPowerIoCompletion$11$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_112#1:
- inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$11$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_113_true#1, inline$BDLSystemPowerIoCompletion$11$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$11$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_117#1:
- goto inline$BDLGetDebugLevel$325$Entry#1;
-
- inline$BDLGetDebugLevel$325$Entry#1:
- goto inline$BDLGetDebugLevel$325$start#1;
-
- inline$BDLGetDebugLevel$325$start#1:
- goto inline$BDLGetDebugLevel$325$label_3#1;
-
- inline$BDLGetDebugLevel$325$label_3#1:
- havoc inline$BDLGetDebugLevel$325$myNondetVar_0;
- inline$BDLGetDebugLevel$325$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$325$myNondetVar_0;
- goto inline$BDLGetDebugLevel$325$label_1#1;
-
- inline$BDLGetDebugLevel$325$label_1#1:
- goto inline$BDLGetDebugLevel$325$Return#1;
-
- inline$BDLGetDebugLevel$325$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$325$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon51_Then#1, inline$BDLSystemPowerIoCompletion$11$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_120_true#1, inline$BDLSystemPowerIoCompletion$11$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_124#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_125#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_126#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$11$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_121#1:
- goto inline$BDLGetDebugLevel$326$Entry#1;
-
- inline$BDLGetDebugLevel$326$Entry#1:
- goto inline$BDLGetDebugLevel$326$start#1;
-
- inline$BDLGetDebugLevel$326$start#1:
- goto inline$BDLGetDebugLevel$326$label_3#1;
-
- inline$BDLGetDebugLevel$326$label_3#1:
- havoc inline$BDLGetDebugLevel$326$myNondetVar_0;
- inline$BDLGetDebugLevel$326$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$326$myNondetVar_0;
- goto inline$BDLGetDebugLevel$326$label_1#1;
-
- inline$BDLGetDebugLevel$326$label_1#1:
- goto inline$BDLGetDebugLevel$326$Return#1;
-
- inline$BDLGetDebugLevel$326$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$326$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon52_Then#1, inline$BDLSystemPowerIoCompletion$11$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_130_true#1, inline$BDLSystemPowerIoCompletion$11$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_134#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_135#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_136#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$11$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_131#1:
- goto inline$BDLGetDebugLevel$327$Entry#1;
-
- inline$BDLGetDebugLevel$327$Entry#1:
- goto inline$BDLGetDebugLevel$327$start#1;
-
- inline$BDLGetDebugLevel$327$start#1:
- goto inline$BDLGetDebugLevel$327$label_3#1;
-
- inline$BDLGetDebugLevel$327$label_3#1:
- havoc inline$BDLGetDebugLevel$327$myNondetVar_0;
- inline$BDLGetDebugLevel$327$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$327$myNondetVar_0;
- goto inline$BDLGetDebugLevel$327$label_1#1;
-
- inline$BDLGetDebugLevel$327$label_1#1:
- goto inline$BDLGetDebugLevel$327$Return#1;
-
- inline$BDLGetDebugLevel$327$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$327$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon53_Then#1, inline$BDLSystemPowerIoCompletion$11$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_140_true#1, inline$BDLSystemPowerIoCompletion$11$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$11$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_115#1:
- inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$11$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$11$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_43#1:
- goto inline$BDLGetDebugLevel$319$Entry#1;
-
- inline$BDLGetDebugLevel$319$Entry#1:
- goto inline$BDLGetDebugLevel$319$start#1;
-
- inline$BDLGetDebugLevel$319$start#1:
- goto inline$BDLGetDebugLevel$319$label_3#1;
-
- inline$BDLGetDebugLevel$319$label_3#1:
- havoc inline$BDLGetDebugLevel$319$myNondetVar_0;
- inline$BDLGetDebugLevel$319$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$319$myNondetVar_0;
- goto inline$BDLGetDebugLevel$319$label_1#1;
-
- inline$BDLGetDebugLevel$319$label_1#1:
- goto inline$BDLGetDebugLevel$319$Return#1;
-
- inline$BDLGetDebugLevel$319$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$319$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon40_Then#1, inline$BDLSystemPowerIoCompletion$11$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_46_true#1, inline$BDLSystemPowerIoCompletion$11$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_50#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_51#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_52#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$11$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_47#1:
- goto inline$BDLGetDebugLevel$320$Entry#1;
-
- inline$BDLGetDebugLevel$320$Entry#1:
- goto inline$BDLGetDebugLevel$320$start#1;
-
- inline$BDLGetDebugLevel$320$start#1:
- goto inline$BDLGetDebugLevel$320$label_3#1;
-
- inline$BDLGetDebugLevel$320$label_3#1:
- havoc inline$BDLGetDebugLevel$320$myNondetVar_0;
- inline$BDLGetDebugLevel$320$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$320$myNondetVar_0;
- goto inline$BDLGetDebugLevel$320$label_1#1;
-
- inline$BDLGetDebugLevel$320$label_1#1:
- goto inline$BDLGetDebugLevel$320$Return#1;
-
- inline$BDLGetDebugLevel$320$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$320$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon41_Then#1, inline$BDLSystemPowerIoCompletion$11$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_56_true#1, inline$BDLSystemPowerIoCompletion$11$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_60#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_61#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_62#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$11$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_57#1:
- goto inline$BDLGetDebugLevel$321$Entry#1;
-
- inline$BDLGetDebugLevel$321$Entry#1:
- goto inline$BDLGetDebugLevel$321$start#1;
-
- inline$BDLGetDebugLevel$321$start#1:
- goto inline$BDLGetDebugLevel$321$label_3#1;
-
- inline$BDLGetDebugLevel$321$label_3#1:
- havoc inline$BDLGetDebugLevel$321$myNondetVar_0;
- inline$BDLGetDebugLevel$321$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$321$myNondetVar_0;
- goto inline$BDLGetDebugLevel$321$label_1#1;
-
- inline$BDLGetDebugLevel$321$label_1#1:
- goto inline$BDLGetDebugLevel$321$Return#1;
-
- inline$BDLGetDebugLevel$321$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$321$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon42_Then#1, inline$BDLSystemPowerIoCompletion$11$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_66_true#1, inline$BDLSystemPowerIoCompletion$11$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$11$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$11$anon43_Then#1, inline$BDLSystemPowerIoCompletion$11$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$11$anon44_Then#1, inline$BDLSystemPowerIoCompletion$11$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_74#1:
- goto inline$storm_IoCompleteRequest$24$Entry#1;
-
- inline$storm_IoCompleteRequest$24$Entry#1:
- inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$24$start#1;
-
- inline$storm_IoCompleteRequest$24$start#1:
- inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$24$label_3#1;
-
- inline$storm_IoCompleteRequest$24$label_3#1:
- call inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$24$label_6#1;
-
- inline$storm_IoCompleteRequest$24$label_6#1:
- goto inline$storm_IoCompleteRequest$24$label_6_true#1, inline$storm_IoCompleteRequest$24$label_6_false#1;
-
- inline$storm_IoCompleteRequest$24$label_6_false#1:
- assume inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$24$label_7#1;
-
- inline$storm_IoCompleteRequest$24$label_6_true#1:
- assume inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$24$label_8#1;
-
- inline$storm_IoCompleteRequest$24$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$24$anon3_Then#1, inline$storm_IoCompleteRequest$24$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$24$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$24$anon1#1;
-
- inline$storm_IoCompleteRequest$24$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$24$label_9#1;
-
- inline$storm_IoCompleteRequest$24$label_9#1:
- goto inline$storm_IoCompleteRequest$24$label_9_true#1, inline$storm_IoCompleteRequest$24$label_9_false#1;
-
- inline$storm_IoCompleteRequest$24$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$24$label_10#1;
-
- inline$storm_IoCompleteRequest$24$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$24$label_1#1;
-
- inline$storm_IoCompleteRequest$24$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$24$label_7#1;
-
- inline$storm_IoCompleteRequest$24$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$24$label_1#1;
-
- inline$storm_IoCompleteRequest$24$label_1#1:
- goto inline$storm_IoCompleteRequest$24$Return#1;
-
- inline$storm_IoCompleteRequest$24$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$24$Return#1;
-
- inline$storm_IoCompleteRequest$24$Return#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon45_Then#1, inline$BDLSystemPowerIoCompletion$11$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$11$anon46_Then#1, inline$BDLSystemPowerIoCompletion$11$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_80#1:
- goto inline$BDLGetDebugLevel$322$Entry#1;
-
- inline$BDLGetDebugLevel$322$Entry#1:
- goto inline$BDLGetDebugLevel$322$start#1;
-
- inline$BDLGetDebugLevel$322$start#1:
- goto inline$BDLGetDebugLevel$322$label_3#1;
-
- inline$BDLGetDebugLevel$322$label_3#1:
- havoc inline$BDLGetDebugLevel$322$myNondetVar_0;
- inline$BDLGetDebugLevel$322$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$322$myNondetVar_0;
- goto inline$BDLGetDebugLevel$322$label_1#1;
-
- inline$BDLGetDebugLevel$322$label_1#1:
- goto inline$BDLGetDebugLevel$322$Return#1;
-
- inline$BDLGetDebugLevel$322$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$322$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon47_Then#1, inline$BDLSystemPowerIoCompletion$11$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_83_true#1, inline$BDLSystemPowerIoCompletion$11$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_87#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_88#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_89#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$11$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_84#1:
- goto inline$BDLGetDebugLevel$323$Entry#1;
-
- inline$BDLGetDebugLevel$323$Entry#1:
- goto inline$BDLGetDebugLevel$323$start#1;
-
- inline$BDLGetDebugLevel$323$start#1:
- goto inline$BDLGetDebugLevel$323$label_3#1;
-
- inline$BDLGetDebugLevel$323$label_3#1:
- havoc inline$BDLGetDebugLevel$323$myNondetVar_0;
- inline$BDLGetDebugLevel$323$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$323$myNondetVar_0;
- goto inline$BDLGetDebugLevel$323$label_1#1;
-
- inline$BDLGetDebugLevel$323$label_1#1:
- goto inline$BDLGetDebugLevel$323$Return#1;
-
- inline$BDLGetDebugLevel$323$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$323$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon48_Then#1, inline$BDLSystemPowerIoCompletion$11$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_93_true#1, inline$BDLSystemPowerIoCompletion$11$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_97#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_98#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_99#1:
- call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$11$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$11$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_94#1:
- goto inline$BDLGetDebugLevel$324$Entry#1;
-
- inline$BDLGetDebugLevel$324$Entry#1:
- goto inline$BDLGetDebugLevel$324$start#1;
-
- inline$BDLGetDebugLevel$324$start#1:
- goto inline$BDLGetDebugLevel$324$label_3#1;
-
- inline$BDLGetDebugLevel$324$label_3#1:
- havoc inline$BDLGetDebugLevel$324$myNondetVar_0;
- inline$BDLGetDebugLevel$324$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$324$myNondetVar_0;
- goto inline$BDLGetDebugLevel$324$label_1#1;
-
- inline$BDLGetDebugLevel$324$label_1#1:
- goto inline$BDLGetDebugLevel$324$Return#1;
-
- inline$BDLGetDebugLevel$324$Return#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$324$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$11$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$11$anon49_Then#1, inline$BDLSystemPowerIoCompletion$11$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_103_true#1, inline$BDLSystemPowerIoCompletion$11$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$11$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$11$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_104#1:
- inline$BDLSystemPowerIoCompletion$11$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$11$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$11$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$11$Return#1;
-
- inline$BDLSystemPowerIoCompletion$11$Return#1:
- inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$11$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$11$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$11$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$11$anon14_Then#1, inline$CallCompletionRoutine$11$anon14_Else#1;
-
- inline$CallCompletionRoutine$11$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$11$anon9#1;
-
- inline$CallCompletionRoutine$11$anon9#1:
- goto inline$CallCompletionRoutine$11$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$11$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$11$Return#1;
-
- inline$CallCompletionRoutine$11$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$11$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$11$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$11$Entry#1:
- inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$11$start#1;
-
- inline$BDLDevicePowerIoCompletion$11$start#1:
- call inline$BDLDevicePowerIoCompletion$11$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$11$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_4#1:
- inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_6#1:
- inline$BDLDevicePowerIoCompletion$11$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$11$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$11$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$11$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$61$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$61$Entry#1:
- inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$61$start#1;
-
- inline$IoGetCurrentIrpStackLocation$61$start#1:
- inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$61$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$61$label_3_true#1, inline$IoGetCurrentIrpStackLocation$61$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$61$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$61$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$61$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$61$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$61$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$61$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$61$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$61$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$61$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$61$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$61$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$61$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$61$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$61$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$61$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$61$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$61$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$61$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$61$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$61$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$61$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$61$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$61$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon30_Then#1, inline$BDLDevicePowerIoCompletion$11$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_13#1:
- inline$BDLDevicePowerIoCompletion$11$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$11$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$11$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_17#1:
- goto inline$BDLGetDebugLevel$307$Entry#1;
-
- inline$BDLGetDebugLevel$307$Entry#1:
- goto inline$BDLGetDebugLevel$307$start#1;
-
- inline$BDLGetDebugLevel$307$start#1:
- goto inline$BDLGetDebugLevel$307$label_3#1;
-
- inline$BDLGetDebugLevel$307$label_3#1:
- havoc inline$BDLGetDebugLevel$307$myNondetVar_0;
- inline$BDLGetDebugLevel$307$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$307$myNondetVar_0;
- goto inline$BDLGetDebugLevel$307$label_1#1;
-
- inline$BDLGetDebugLevel$307$label_1#1:
- goto inline$BDLGetDebugLevel$307$Return#1;
-
- inline$BDLGetDebugLevel$307$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$307$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon31_Then#1, inline$BDLDevicePowerIoCompletion$11$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_20_true#1, inline$BDLDevicePowerIoCompletion$11$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_24#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_25#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_26#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$11$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_21#1:
- goto inline$BDLGetDebugLevel$308$Entry#1;
-
- inline$BDLGetDebugLevel$308$Entry#1:
- goto inline$BDLGetDebugLevel$308$start#1;
-
- inline$BDLGetDebugLevel$308$start#1:
- goto inline$BDLGetDebugLevel$308$label_3#1;
-
- inline$BDLGetDebugLevel$308$label_3#1:
- havoc inline$BDLGetDebugLevel$308$myNondetVar_0;
- inline$BDLGetDebugLevel$308$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$308$myNondetVar_0;
- goto inline$BDLGetDebugLevel$308$label_1#1;
-
- inline$BDLGetDebugLevel$308$label_1#1:
- goto inline$BDLGetDebugLevel$308$Return#1;
-
- inline$BDLGetDebugLevel$308$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$308$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon32_Then#1, inline$BDLDevicePowerIoCompletion$11$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_30_true#1, inline$BDLDevicePowerIoCompletion$11$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_34#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_35#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_36#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$11$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_31#1:
- goto inline$BDLGetDebugLevel$309$Entry#1;
-
- inline$BDLGetDebugLevel$309$Entry#1:
- goto inline$BDLGetDebugLevel$309$start#1;
-
- inline$BDLGetDebugLevel$309$start#1:
- goto inline$BDLGetDebugLevel$309$label_3#1;
-
- inline$BDLGetDebugLevel$309$label_3#1:
- havoc inline$BDLGetDebugLevel$309$myNondetVar_0;
- inline$BDLGetDebugLevel$309$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$309$myNondetVar_0;
- goto inline$BDLGetDebugLevel$309$label_1#1;
-
- inline$BDLGetDebugLevel$309$label_1#1:
- goto inline$BDLGetDebugLevel$309$Return#1;
-
- inline$BDLGetDebugLevel$309$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$309$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon33_Then#1, inline$BDLDevicePowerIoCompletion$11$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_40_true#1, inline$BDLDevicePowerIoCompletion$11$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_41_true#1, inline$BDLDevicePowerIoCompletion$11$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$11$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$11$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_44_true#1, inline$BDLDevicePowerIoCompletion$11$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$11$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_45_true#1, inline$BDLDevicePowerIoCompletion$11$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$11$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$11$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$11$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$11$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$11$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$11$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_54#1:
- inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$11$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_55_true#1, inline$BDLDevicePowerIoCompletion$11$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_56#1:
- call inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$11$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$11$anon34_Then#1, inline$BDLDevicePowerIoCompletion$11$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_59#1:
- goto inline$BDLGetDebugLevel$310$Entry#1;
-
- inline$BDLGetDebugLevel$310$Entry#1:
- goto inline$BDLGetDebugLevel$310$start#1;
-
- inline$BDLGetDebugLevel$310$start#1:
- goto inline$BDLGetDebugLevel$310$label_3#1;
-
- inline$BDLGetDebugLevel$310$label_3#1:
- havoc inline$BDLGetDebugLevel$310$myNondetVar_0;
- inline$BDLGetDebugLevel$310$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$310$myNondetVar_0;
- goto inline$BDLGetDebugLevel$310$label_1#1;
-
- inline$BDLGetDebugLevel$310$label_1#1:
- goto inline$BDLGetDebugLevel$310$Return#1;
-
- inline$BDLGetDebugLevel$310$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$310$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon35_Then#1, inline$BDLDevicePowerIoCompletion$11$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_62_true#1, inline$BDLDevicePowerIoCompletion$11$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_66#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_67#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_68#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$11$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_63#1:
- goto inline$BDLGetDebugLevel$311$Entry#1;
-
- inline$BDLGetDebugLevel$311$Entry#1:
- goto inline$BDLGetDebugLevel$311$start#1;
-
- inline$BDLGetDebugLevel$311$start#1:
- goto inline$BDLGetDebugLevel$311$label_3#1;
-
- inline$BDLGetDebugLevel$311$label_3#1:
- havoc inline$BDLGetDebugLevel$311$myNondetVar_0;
- inline$BDLGetDebugLevel$311$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$311$myNondetVar_0;
- goto inline$BDLGetDebugLevel$311$label_1#1;
-
- inline$BDLGetDebugLevel$311$label_1#1:
- goto inline$BDLGetDebugLevel$311$Return#1;
-
- inline$BDLGetDebugLevel$311$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$311$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon36_Then#1, inline$BDLDevicePowerIoCompletion$11$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_72_true#1, inline$BDLDevicePowerIoCompletion$11$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_76#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_77#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_78#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$11$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_73#1:
- goto inline$BDLGetDebugLevel$312$Entry#1;
-
- inline$BDLGetDebugLevel$312$Entry#1:
- goto inline$BDLGetDebugLevel$312$start#1;
-
- inline$BDLGetDebugLevel$312$start#1:
- goto inline$BDLGetDebugLevel$312$label_3#1;
-
- inline$BDLGetDebugLevel$312$label_3#1:
- havoc inline$BDLGetDebugLevel$312$myNondetVar_0;
- inline$BDLGetDebugLevel$312$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$312$myNondetVar_0;
- goto inline$BDLGetDebugLevel$312$label_1#1;
-
- inline$BDLGetDebugLevel$312$label_1#1:
- goto inline$BDLGetDebugLevel$312$Return#1;
-
- inline$BDLGetDebugLevel$312$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$312$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon37_Then#1, inline$BDLDevicePowerIoCompletion$11$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_82_true#1, inline$BDLDevicePowerIoCompletion$11$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$11$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$11$anon38_Then#1, inline$BDLDevicePowerIoCompletion$11$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$11$anon39_Then#1, inline$BDLDevicePowerIoCompletion$11$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_92#1:
- goto inline$storm_IoCompleteRequest$23$Entry#1;
-
- inline$storm_IoCompleteRequest$23$Entry#1:
- inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$23$start#1;
-
- inline$storm_IoCompleteRequest$23$start#1:
- inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$23$label_3#1;
-
- inline$storm_IoCompleteRequest$23$label_3#1:
- call inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$23$label_6#1;
-
- inline$storm_IoCompleteRequest$23$label_6#1:
- goto inline$storm_IoCompleteRequest$23$label_6_true#1, inline$storm_IoCompleteRequest$23$label_6_false#1;
-
- inline$storm_IoCompleteRequest$23$label_6_false#1:
- assume inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$23$label_7#1;
-
- inline$storm_IoCompleteRequest$23$label_6_true#1:
- assume inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$23$label_8#1;
-
- inline$storm_IoCompleteRequest$23$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$23$anon3_Then#1, inline$storm_IoCompleteRequest$23$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$23$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$23$anon1#1;
-
- inline$storm_IoCompleteRequest$23$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$23$label_9#1;
-
- inline$storm_IoCompleteRequest$23$label_9#1:
- goto inline$storm_IoCompleteRequest$23$label_9_true#1, inline$storm_IoCompleteRequest$23$label_9_false#1;
-
- inline$storm_IoCompleteRequest$23$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$23$label_10#1;
-
- inline$storm_IoCompleteRequest$23$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$23$label_1#1;
-
- inline$storm_IoCompleteRequest$23$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$23$label_7#1;
-
- inline$storm_IoCompleteRequest$23$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$23$label_1#1;
-
- inline$storm_IoCompleteRequest$23$label_1#1:
- goto inline$storm_IoCompleteRequest$23$Return#1;
-
- inline$storm_IoCompleteRequest$23$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$23$Return#1;
-
- inline$storm_IoCompleteRequest$23$Return#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon40_Then#1, inline$BDLDevicePowerIoCompletion$11$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$11$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$11$anon41_Then#1, inline$BDLDevicePowerIoCompletion$11$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_98#1:
- goto inline$BDLGetDebugLevel$313$Entry#1;
-
- inline$BDLGetDebugLevel$313$Entry#1:
- goto inline$BDLGetDebugLevel$313$start#1;
-
- inline$BDLGetDebugLevel$313$start#1:
- goto inline$BDLGetDebugLevel$313$label_3#1;
-
- inline$BDLGetDebugLevel$313$label_3#1:
- havoc inline$BDLGetDebugLevel$313$myNondetVar_0;
- inline$BDLGetDebugLevel$313$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$313$myNondetVar_0;
- goto inline$BDLGetDebugLevel$313$label_1#1;
-
- inline$BDLGetDebugLevel$313$label_1#1:
- goto inline$BDLGetDebugLevel$313$Return#1;
-
- inline$BDLGetDebugLevel$313$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$313$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon42_Then#1, inline$BDLDevicePowerIoCompletion$11$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_101_true#1, inline$BDLDevicePowerIoCompletion$11$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_105#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_106#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_107#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$11$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_102#1:
- goto inline$BDLGetDebugLevel$314$Entry#1;
-
- inline$BDLGetDebugLevel$314$Entry#1:
- goto inline$BDLGetDebugLevel$314$start#1;
-
- inline$BDLGetDebugLevel$314$start#1:
- goto inline$BDLGetDebugLevel$314$label_3#1;
-
- inline$BDLGetDebugLevel$314$label_3#1:
- havoc inline$BDLGetDebugLevel$314$myNondetVar_0;
- inline$BDLGetDebugLevel$314$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$314$myNondetVar_0;
- goto inline$BDLGetDebugLevel$314$label_1#1;
-
- inline$BDLGetDebugLevel$314$label_1#1:
- goto inline$BDLGetDebugLevel$314$Return#1;
-
- inline$BDLGetDebugLevel$314$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$314$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon43_Then#1, inline$BDLDevicePowerIoCompletion$11$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_111_true#1, inline$BDLDevicePowerIoCompletion$11$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_115#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_116#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_117#1:
- call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$11$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$11$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_112#1:
- goto inline$BDLGetDebugLevel$315$Entry#1;
-
- inline$BDLGetDebugLevel$315$Entry#1:
- goto inline$BDLGetDebugLevel$315$start#1;
-
- inline$BDLGetDebugLevel$315$start#1:
- goto inline$BDLGetDebugLevel$315$label_3#1;
-
- inline$BDLGetDebugLevel$315$label_3#1:
- havoc inline$BDLGetDebugLevel$315$myNondetVar_0;
- inline$BDLGetDebugLevel$315$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$315$myNondetVar_0;
- goto inline$BDLGetDebugLevel$315$label_1#1;
-
- inline$BDLGetDebugLevel$315$label_1#1:
- goto inline$BDLGetDebugLevel$315$Return#1;
-
- inline$BDLGetDebugLevel$315$Return#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$315$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$11$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$11$anon44_Then#1, inline$BDLDevicePowerIoCompletion$11$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_121_true#1, inline$BDLDevicePowerIoCompletion$11$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$11$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$11$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_122#1:
- inline$BDLDevicePowerIoCompletion$11$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$11$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$11$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$11$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$11$Return#1;
-
- inline$BDLDevicePowerIoCompletion$11$Return#1:
- inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$11$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$11$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$11$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$11$anon13_Then#1, inline$CallCompletionRoutine$11$anon13_Else#1;
-
- inline$CallCompletionRoutine$11$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$11$anon7#1;
-
- inline$CallCompletionRoutine$11$anon7#1:
- goto inline$CallCompletionRoutine$11$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$11$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$11$Return#1;
-
- inline$CallCompletionRoutine$11$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$11$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$11$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$11$Entry#1:
- inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$11$start#1;
-
- inline$BDLCallDriverCompletionRoutine$11$start#1:
- inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$11$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$11$label_3_true#1, inline$BDLCallDriverCompletionRoutine$11$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$11$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$11$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$11$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$11$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_6#1:
- goto inline$storm_KeSetEvent$13$Entry#1;
-
- inline$storm_KeSetEvent$13$Entry#1:
- inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$13$start#1;
-
- inline$storm_KeSetEvent$13$start#1:
- inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$13$label_3#1;
-
- inline$storm_KeSetEvent$13$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$13$label_1#1;
-
- inline$storm_KeSetEvent$13$label_1#1:
- goto inline$storm_KeSetEvent$13$Return#1;
-
- inline$storm_KeSetEvent$13$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$11$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$11$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$11$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$11$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$11$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$11$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$11$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_9#1:
- inline$BDLCallDriverCompletionRoutine$11$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$11$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$11$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$11$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$11$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$11$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$11$Return#1:
- inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$11$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$11$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$11$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$11$anon12_Then#1, inline$CallCompletionRoutine$11$anon12_Else#1;
-
- inline$CallCompletionRoutine$11$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$11$anon5#1;
-
- inline$CallCompletionRoutine$11$anon5#1:
- goto inline$CallCompletionRoutine$11$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$11$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$11$label_23#1;
-
- inline$CallCompletionRoutine$11$label_23#1:
- inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$11$label_24#1;
-
- inline$CallCompletionRoutine$11$label_24#1:
- goto inline$CallCompletionRoutine$11$label_24_true#1, inline$CallCompletionRoutine$11$label_24_false#1;
-
- inline$CallCompletionRoutine$11$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$11$label_1#1;
-
- inline$CallCompletionRoutine$11$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$11$label_25#1;
-
- inline$CallCompletionRoutine$11$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$11$label_1#1;
-
- inline$CallCompletionRoutine$11$label_1#1:
- goto inline$CallCompletionRoutine$11$Return#1;
-
- inline$CallCompletionRoutine$11$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$11$Return#1;
-
- inline$CallCompletionRoutine$11$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$11$Return#1;
-
- inline$CallCompletionRoutine$11$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$11$Return#1;
-
- inline$CallCompletionRoutine$11$Return#1:
- goto inline$storm_IoCallDriver$5$label_39$1#1;
-
- inline$storm_IoCallDriver$5$label_39$1#1:
- goto inline$storm_IoCallDriver$5$anon15_Then#1, inline$storm_IoCallDriver$5$anon15_Else#1;
-
- inline$storm_IoCallDriver$5$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$5$anon10#1;
-
- inline$storm_IoCallDriver$5$anon10#1:
- goto inline$storm_IoCallDriver$5$label_36#1;
-
- inline$storm_IoCallDriver$5$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$5$Return#1;
-
- inline$storm_IoCallDriver$5$label_27_case_0#1:
- assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$5$label_28#1;
-
- inline$storm_IoCallDriver$5$label_28#1:
- inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$5$label_42#1;
-
- inline$storm_IoCallDriver$5$label_42#1:
- goto inline$storm_IoCallDriver$5$label_43#1;
-
- inline$storm_IoCallDriver$5$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$5$label_36#1;
-
- inline$storm_IoCallDriver$5$label_36#1:
- inline$storm_IoCallDriver$5$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$5$label_1#1;
-
- inline$storm_IoCallDriver$5$label_1#1:
- goto inline$storm_IoCallDriver$5$Return#1;
-
- inline$storm_IoCallDriver$5$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$5$Return#1;
-
- inline$storm_IoCallDriver$5$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$5$Return#1;
-
- inline$storm_IoCallDriver$5$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$5$Return#1;
-
- inline$storm_IoCallDriver$5$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$5$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_19$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_19$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon20_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon9#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_42#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_42#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_IoCallDriver$108.29$4$;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon20_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_18_true#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_22#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_22#1:
- call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon21_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon21_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon11#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon11#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_25#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_25#1:
- goto inline$storm_PoCallDriver$2$Entry#1;
-
- inline$storm_PoCallDriver$2$Entry#1:
- inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_PoCallDriver$2$start#1;
-
- inline$storm_PoCallDriver$2$start#1:
- inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8_.1;
- goto inline$storm_PoCallDriver$2$label_3#1;
-
- inline$storm_PoCallDriver$2$label_3#1:
- goto inline$storm_IoCallDriver$6$Entry#1;
-
- inline$storm_IoCallDriver$6$Entry#1:
- inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8;
- goto inline$storm_IoCallDriver$6$start#1;
-
- inline$storm_IoCallDriver$6$start#1:
- inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$6$label_3#1;
-
- inline$storm_IoCallDriver$6$label_3#1:
- goto inline$storm_IoCallDriver$6$label_4#1;
-
- inline$storm_IoCallDriver$6$label_4#1:
- goto inline$storm_IoCallDriver$6$label_5#1;
-
- inline$storm_IoCallDriver$6$label_5#1:
- goto inline$storm_IoCallDriver$6$label_6#1;
-
- inline$storm_IoCallDriver$6$label_6#1:
- call inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$6$label_9#1;
-
- inline$storm_IoCallDriver$6$label_9#1:
- goto inline$storm_IoCallDriver$6$label_9_true#1, inline$storm_IoCallDriver$6$label_9_false#1;
-
- inline$storm_IoCallDriver$6$label_9_false#1:
- assume inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$6$label_10#1;
-
- inline$storm_IoCallDriver$6$label_9_true#1:
- assume inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$6$label_13#1;
-
- inline$storm_IoCallDriver$6$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$6$anon12_Then#1, inline$storm_IoCallDriver$6$anon12_Else#1;
-
- inline$storm_IoCallDriver$6$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$6$anon3#1;
-
- inline$storm_IoCallDriver$6$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$6$label_14#1;
-
- inline$storm_IoCallDriver$6$label_14#1:
- goto inline$storm_IoCallDriver$6$label_14_true#1, inline$storm_IoCallDriver$6$label_14_false#1;
-
- inline$storm_IoCallDriver$6$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$6$label_15#1;
-
- inline$storm_IoCallDriver$6$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$6$label_1#1;
-
- inline$storm_IoCallDriver$6$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$6$label_10#1;
-
- inline$storm_IoCallDriver$6$label_10#1:
- goto inline$IoSetNextIrpStackLocation$7$Entry#1;
-
- inline$IoSetNextIrpStackLocation$7$Entry#1:
- inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$7$start#1;
-
- inline$IoSetNextIrpStackLocation$7$start#1:
- inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$7$label_3#1;
-
- inline$IoSetNextIrpStackLocation$7$label_3#1:
- goto inline$IoSetNextIrpStackLocation$7$label_3_true#1, inline$IoSetNextIrpStackLocation$7$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$7$label_3_false#1:
- inline$IoSetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$7$myVar_0);
- goto inline$IoSetNextIrpStackLocation$7$label_4#1;
-
- inline$IoSetNextIrpStackLocation$7$label_4#1:
- call inline$IoSetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$7$label_7#1;
-
- inline$IoSetNextIrpStackLocation$7$label_7#1:
- call inline$IoSetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$7$label_8#1;
-
- inline$IoSetNextIrpStackLocation$7$label_8#1:
- goto inline$IoSetNextIrpStackLocation$7$label_5#1;
-
- inline$IoSetNextIrpStackLocation$7$label_3_true#1:
- inline$IoSetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$7$myVar_0);
- goto inline$IoSetNextIrpStackLocation$7$label_5#1;
-
- inline$IoSetNextIrpStackLocation$7$label_5#1:
- inline$IoSetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$7$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$7$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$7$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$7$label_6#1;
-
- inline$IoSetNextIrpStackLocation$7$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$7$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$7$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$7$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$7$label_1#1;
-
- inline$IoSetNextIrpStackLocation$7$label_1#1:
- goto inline$IoSetNextIrpStackLocation$7$Return#1;
-
- inline$IoSetNextIrpStackLocation$7$Return#1:
- goto inline$storm_IoCallDriver$6$label_10$1#1;
-
- inline$storm_IoCallDriver$6$label_10$1#1:
- goto inline$storm_IoCallDriver$6$anon11_Then#1, inline$storm_IoCallDriver$6$anon11_Else#1;
-
- inline$storm_IoCallDriver$6$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$6$anon1#1;
-
- inline$storm_IoCallDriver$6$anon1#1:
- goto inline$storm_IoCallDriver$6$label_18#1;
-
- inline$storm_IoCallDriver$6$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$63$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$63$Entry#1:
- inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$63$start#1;
-
- inline$IoGetCurrentIrpStackLocation$63$start#1:
- inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$63$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$63$label_3_true#1, inline$IoGetCurrentIrpStackLocation$63$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$63$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$63$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$63$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$63$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$63$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$63$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$63$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$63$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$63$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$63$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$63$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$63$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$63$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$63$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$63$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$63$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$63$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$63$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$63$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$63$Return#1:
- goto inline$storm_IoCallDriver$6$label_18$1#1;
-
- inline$storm_IoCallDriver$6$label_18$1#1:
- goto inline$storm_IoCallDriver$6$anon13_Then#1, inline$storm_IoCallDriver$6$anon13_Else#1;
-
- inline$storm_IoCallDriver$6$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$6$anon6#1;
-
- inline$storm_IoCallDriver$6$anon6#1:
- goto inline$storm_IoCallDriver$6$label_21#1;
-
- inline$storm_IoCallDriver$6$label_21#1:
- goto inline$storm_IoCallDriver$6$label_22#1;
-
- inline$storm_IoCallDriver$6$label_22#1:
- goto inline$storm_IoCallDriver$6$label_23#1;
-
- inline$storm_IoCallDriver$6$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$6$label_24#1;
-
- inline$storm_IoCallDriver$6$label_24#1:
- call inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$6$label_27#1;
-
- inline$storm_IoCallDriver$6$label_27#1:
- goto inline$storm_IoCallDriver$6$label_27_case_0#1, inline$storm_IoCallDriver$6$label_27_case_1#1, inline$storm_IoCallDriver$6$label_27_case_2#1;
-
- inline$storm_IoCallDriver$6$label_27_case_2#1:
- assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$6$label_30#1;
-
- inline$storm_IoCallDriver$6$label_30#1:
- inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$6$label_31#1;
-
- inline$storm_IoCallDriver$6$label_31#1:
- goto inline$storm_IoCallDriver$6$label_32#1;
-
- inline$storm_IoCallDriver$6$label_32#1:
- goto inline$storm_IoCallDriver$6$label_33#1;
-
- inline$storm_IoCallDriver$6$label_33#1:
- goto inline$CallCompletionRoutine$12$Entry#1;
-
- inline$CallCompletionRoutine$12$Entry#1:
- inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$12$start#1;
-
- inline$CallCompletionRoutine$12$start#1:
- inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$12$label_3#1;
-
- inline$CallCompletionRoutine$12$label_3#1:
- goto inline$CallCompletionRoutine$12$label_4#1;
-
- inline$CallCompletionRoutine$12$label_4#1:
- goto inline$CallCompletionRoutine$12$label_5#1;
-
- inline$CallCompletionRoutine$12$label_5#1:
- goto inline$CallCompletionRoutine$12$label_6#1;
-
- inline$CallCompletionRoutine$12$label_6#1:
- goto inline$CallCompletionRoutine$12$label_7#1;
-
- inline$CallCompletionRoutine$12$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$64$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$64$Entry#1:
- inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$64$start#1;
-
- inline$IoGetCurrentIrpStackLocation$64$start#1:
- inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$64$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$64$label_3_true#1, inline$IoGetCurrentIrpStackLocation$64$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$64$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$64$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$64$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$64$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$64$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$64$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$64$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$64$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$64$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$64$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$64$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$64$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$64$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$64$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$64$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$64$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$64$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$64$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$64$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$64$Return#1:
- goto inline$CallCompletionRoutine$12$label_7$1#1;
-
- inline$CallCompletionRoutine$12$label_7$1#1:
- goto inline$CallCompletionRoutine$12$anon10_Then#1, inline$CallCompletionRoutine$12$anon10_Else#1;
-
- inline$CallCompletionRoutine$12$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$12$anon1#1;
-
- inline$CallCompletionRoutine$12$anon1#1:
- goto inline$CallCompletionRoutine$12$label_10#1;
-
- inline$CallCompletionRoutine$12$label_10#1:
- goto inline$CallCompletionRoutine$12$label_11#1;
-
- inline$CallCompletionRoutine$12$label_11#1:
- havoc inline$CallCompletionRoutine$12$myNondetVar_0;
- inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$myNondetVar_0;
- goto inline$CallCompletionRoutine$12$label_12#1;
-
- inline$CallCompletionRoutine$12$label_12#1:
- havoc inline$CallCompletionRoutine$12$myNondetVar_0;
- inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$myNondetVar_0;
- goto inline$CallCompletionRoutine$12$label_13#1;
-
- inline$CallCompletionRoutine$12$label_13#1:
- havoc inline$CallCompletionRoutine$12$myNondetVar_0;
- goto inline$CallCompletionRoutine$12$label_14#1;
-
- inline$CallCompletionRoutine$12$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$65$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$65$Entry#1:
- inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$65$start#1;
-
- inline$IoGetCurrentIrpStackLocation$65$start#1:
- inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$65$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$65$label_3_true#1, inline$IoGetCurrentIrpStackLocation$65$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$65$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$65$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$65$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$65$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$65$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$65$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$65$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$65$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$65$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$65$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$65$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$65$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$65$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$65$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$65$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$65$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$65$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$65$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$65$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$65$Return#1:
- goto inline$CallCompletionRoutine$12$label_14$1#1;
-
- inline$CallCompletionRoutine$12$label_14$1#1:
- goto inline$CallCompletionRoutine$12$anon11_Then#1, inline$CallCompletionRoutine$12$anon11_Else#1;
-
- inline$CallCompletionRoutine$12$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$12$anon3#1;
-
- inline$CallCompletionRoutine$12$anon3#1:
- goto inline$CallCompletionRoutine$12$label_17#1;
-
- inline$CallCompletionRoutine$12$label_17#1:
- goto inline$CallCompletionRoutine$12$label_18#1;
-
- inline$CallCompletionRoutine$12$label_18#1:
- goto inline$CallCompletionRoutine$12$label_18_true#1, inline$CallCompletionRoutine$12$label_18_false#1;
-
- inline$CallCompletionRoutine$12$label_18_false#1:
- assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$12$label_1#1;
-
- inline$CallCompletionRoutine$12$label_18_true#1:
- assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$12$label_19#1;
-
- inline$CallCompletionRoutine$12$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$12$label_20#1;
-
- inline$CallCompletionRoutine$12$label_20#1:
- goto inline$CallCompletionRoutine$12$label_20_icall_1#1, inline$CallCompletionRoutine$12$label_20_icall_2#1, inline$CallCompletionRoutine$12$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$12$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$12$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$12$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$12$Entry#1:
- inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$12$start#1;
-
- inline$BDLSystemPowerIoCompletion$12$start#1:
- call inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$12$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_4#1:
- inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_6#1:
- inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$12$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$12$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$12$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$67$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$67$Entry#1:
- inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$67$start#1;
-
- inline$IoGetCurrentIrpStackLocation$67$start#1:
- inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$67$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$67$label_3_true#1, inline$IoGetCurrentIrpStackLocation$67$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$67$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$67$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$67$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$67$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$67$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$67$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$67$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$67$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$67$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$67$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$67$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$67$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$67$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$67$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$67$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$67$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$67$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$67$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$67$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$67$Return#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon36_Then#1, inline$BDLSystemPowerIoCompletion$12$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_15#1:
- goto inline$BDLGetDebugLevel$337$Entry#1;
-
- inline$BDLGetDebugLevel$337$Entry#1:
- goto inline$BDLGetDebugLevel$337$start#1;
-
- inline$BDLGetDebugLevel$337$start#1:
- goto inline$BDLGetDebugLevel$337$label_3#1;
-
- inline$BDLGetDebugLevel$337$label_3#1:
- havoc inline$BDLGetDebugLevel$337$myNondetVar_0;
- inline$BDLGetDebugLevel$337$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$337$myNondetVar_0;
- goto inline$BDLGetDebugLevel$337$label_1#1;
-
- inline$BDLGetDebugLevel$337$label_1#1:
- goto inline$BDLGetDebugLevel$337$Return#1;
-
- inline$BDLGetDebugLevel$337$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$337$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon37_Then#1, inline$BDLSystemPowerIoCompletion$12$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_18_true#1, inline$BDLSystemPowerIoCompletion$12$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_22#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_23#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_24#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$12$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_19#1:
- goto inline$BDLGetDebugLevel$338$Entry#1;
-
- inline$BDLGetDebugLevel$338$Entry#1:
- goto inline$BDLGetDebugLevel$338$start#1;
-
- inline$BDLGetDebugLevel$338$start#1:
- goto inline$BDLGetDebugLevel$338$label_3#1;
-
- inline$BDLGetDebugLevel$338$label_3#1:
- havoc inline$BDLGetDebugLevel$338$myNondetVar_0;
- inline$BDLGetDebugLevel$338$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$338$myNondetVar_0;
- goto inline$BDLGetDebugLevel$338$label_1#1;
-
- inline$BDLGetDebugLevel$338$label_1#1:
- goto inline$BDLGetDebugLevel$338$Return#1;
-
- inline$BDLGetDebugLevel$338$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$338$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon38_Then#1, inline$BDLSystemPowerIoCompletion$12$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_28_true#1, inline$BDLSystemPowerIoCompletion$12$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_32#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_33#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_34#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$12$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_29#1:
- goto inline$BDLGetDebugLevel$339$Entry#1;
-
- inline$BDLGetDebugLevel$339$Entry#1:
- goto inline$BDLGetDebugLevel$339$start#1;
-
- inline$BDLGetDebugLevel$339$start#1:
- goto inline$BDLGetDebugLevel$339$label_3#1;
-
- inline$BDLGetDebugLevel$339$label_3#1:
- havoc inline$BDLGetDebugLevel$339$myNondetVar_0;
- inline$BDLGetDebugLevel$339$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$339$myNondetVar_0;
- goto inline$BDLGetDebugLevel$339$label_1#1;
-
- inline$BDLGetDebugLevel$339$label_1#1:
- goto inline$BDLGetDebugLevel$339$Return#1;
-
- inline$BDLGetDebugLevel$339$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$339$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon39_Then#1, inline$BDLSystemPowerIoCompletion$12$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_38_true#1, inline$BDLSystemPowerIoCompletion$12$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_39_true#1, inline$BDLSystemPowerIoCompletion$12$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$12$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$12$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$12$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_106_true#1, inline$BDLSystemPowerIoCompletion$12$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_142#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_143#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$12$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$12$myNondetVar_0, inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$12$anon50_Then#1, inline$BDLSystemPowerIoCompletion$12$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_112#1:
- inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$12$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_113_true#1, inline$BDLSystemPowerIoCompletion$12$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$12$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_117#1:
- goto inline$BDLGetDebugLevel$346$Entry#1;
-
- inline$BDLGetDebugLevel$346$Entry#1:
- goto inline$BDLGetDebugLevel$346$start#1;
-
- inline$BDLGetDebugLevel$346$start#1:
- goto inline$BDLGetDebugLevel$346$label_3#1;
-
- inline$BDLGetDebugLevel$346$label_3#1:
- havoc inline$BDLGetDebugLevel$346$myNondetVar_0;
- inline$BDLGetDebugLevel$346$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$346$myNondetVar_0;
- goto inline$BDLGetDebugLevel$346$label_1#1;
-
- inline$BDLGetDebugLevel$346$label_1#1:
- goto inline$BDLGetDebugLevel$346$Return#1;
-
- inline$BDLGetDebugLevel$346$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$346$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon51_Then#1, inline$BDLSystemPowerIoCompletion$12$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_120_true#1, inline$BDLSystemPowerIoCompletion$12$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_124#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_125#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_126#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$12$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_121#1:
- goto inline$BDLGetDebugLevel$347$Entry#1;
-
- inline$BDLGetDebugLevel$347$Entry#1:
- goto inline$BDLGetDebugLevel$347$start#1;
-
- inline$BDLGetDebugLevel$347$start#1:
- goto inline$BDLGetDebugLevel$347$label_3#1;
-
- inline$BDLGetDebugLevel$347$label_3#1:
- havoc inline$BDLGetDebugLevel$347$myNondetVar_0;
- inline$BDLGetDebugLevel$347$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$347$myNondetVar_0;
- goto inline$BDLGetDebugLevel$347$label_1#1;
-
- inline$BDLGetDebugLevel$347$label_1#1:
- goto inline$BDLGetDebugLevel$347$Return#1;
-
- inline$BDLGetDebugLevel$347$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$347$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon52_Then#1, inline$BDLSystemPowerIoCompletion$12$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_130_true#1, inline$BDLSystemPowerIoCompletion$12$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_134#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_135#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_136#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$12$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_131#1:
- goto inline$BDLGetDebugLevel$348$Entry#1;
-
- inline$BDLGetDebugLevel$348$Entry#1:
- goto inline$BDLGetDebugLevel$348$start#1;
-
- inline$BDLGetDebugLevel$348$start#1:
- goto inline$BDLGetDebugLevel$348$label_3#1;
-
- inline$BDLGetDebugLevel$348$label_3#1:
- havoc inline$BDLGetDebugLevel$348$myNondetVar_0;
- inline$BDLGetDebugLevel$348$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$348$myNondetVar_0;
- goto inline$BDLGetDebugLevel$348$label_1#1;
-
- inline$BDLGetDebugLevel$348$label_1#1:
- goto inline$BDLGetDebugLevel$348$Return#1;
-
- inline$BDLGetDebugLevel$348$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$348$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon53_Then#1, inline$BDLSystemPowerIoCompletion$12$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_140_true#1, inline$BDLSystemPowerIoCompletion$12$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$12$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_115#1:
- inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$12$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$12$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_43#1:
- goto inline$BDLGetDebugLevel$340$Entry#1;
-
- inline$BDLGetDebugLevel$340$Entry#1:
- goto inline$BDLGetDebugLevel$340$start#1;
-
- inline$BDLGetDebugLevel$340$start#1:
- goto inline$BDLGetDebugLevel$340$label_3#1;
-
- inline$BDLGetDebugLevel$340$label_3#1:
- havoc inline$BDLGetDebugLevel$340$myNondetVar_0;
- inline$BDLGetDebugLevel$340$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$340$myNondetVar_0;
- goto inline$BDLGetDebugLevel$340$label_1#1;
-
- inline$BDLGetDebugLevel$340$label_1#1:
- goto inline$BDLGetDebugLevel$340$Return#1;
-
- inline$BDLGetDebugLevel$340$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$340$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon40_Then#1, inline$BDLSystemPowerIoCompletion$12$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_46_true#1, inline$BDLSystemPowerIoCompletion$12$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_50#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_51#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_52#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$12$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_47#1:
- goto inline$BDLGetDebugLevel$341$Entry#1;
-
- inline$BDLGetDebugLevel$341$Entry#1:
- goto inline$BDLGetDebugLevel$341$start#1;
-
- inline$BDLGetDebugLevel$341$start#1:
- goto inline$BDLGetDebugLevel$341$label_3#1;
-
- inline$BDLGetDebugLevel$341$label_3#1:
- havoc inline$BDLGetDebugLevel$341$myNondetVar_0;
- inline$BDLGetDebugLevel$341$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$341$myNondetVar_0;
- goto inline$BDLGetDebugLevel$341$label_1#1;
-
- inline$BDLGetDebugLevel$341$label_1#1:
- goto inline$BDLGetDebugLevel$341$Return#1;
-
- inline$BDLGetDebugLevel$341$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$341$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon41_Then#1, inline$BDLSystemPowerIoCompletion$12$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_56_true#1, inline$BDLSystemPowerIoCompletion$12$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_60#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_61#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_62#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$12$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_57#1:
- goto inline$BDLGetDebugLevel$342$Entry#1;
-
- inline$BDLGetDebugLevel$342$Entry#1:
- goto inline$BDLGetDebugLevel$342$start#1;
-
- inline$BDLGetDebugLevel$342$start#1:
- goto inline$BDLGetDebugLevel$342$label_3#1;
-
- inline$BDLGetDebugLevel$342$label_3#1:
- havoc inline$BDLGetDebugLevel$342$myNondetVar_0;
- inline$BDLGetDebugLevel$342$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$342$myNondetVar_0;
- goto inline$BDLGetDebugLevel$342$label_1#1;
-
- inline$BDLGetDebugLevel$342$label_1#1:
- goto inline$BDLGetDebugLevel$342$Return#1;
-
- inline$BDLGetDebugLevel$342$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$342$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon42_Then#1, inline$BDLSystemPowerIoCompletion$12$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_66_true#1, inline$BDLSystemPowerIoCompletion$12$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$12$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$12$anon43_Then#1, inline$BDLSystemPowerIoCompletion$12$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$12$anon44_Then#1, inline$BDLSystemPowerIoCompletion$12$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_74#1:
- goto inline$storm_IoCompleteRequest$26$Entry#1;
-
- inline$storm_IoCompleteRequest$26$Entry#1:
- inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$26$start#1;
-
- inline$storm_IoCompleteRequest$26$start#1:
- inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$26$label_3#1;
-
- inline$storm_IoCompleteRequest$26$label_3#1:
- call inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$26$label_6#1;
-
- inline$storm_IoCompleteRequest$26$label_6#1:
- goto inline$storm_IoCompleteRequest$26$label_6_true#1, inline$storm_IoCompleteRequest$26$label_6_false#1;
-
- inline$storm_IoCompleteRequest$26$label_6_false#1:
- assume inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$26$label_7#1;
-
- inline$storm_IoCompleteRequest$26$label_6_true#1:
- assume inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$26$label_8#1;
-
- inline$storm_IoCompleteRequest$26$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$26$anon3_Then#1, inline$storm_IoCompleteRequest$26$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$26$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$26$anon1#1;
-
- inline$storm_IoCompleteRequest$26$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$26$label_9#1;
-
- inline$storm_IoCompleteRequest$26$label_9#1:
- goto inline$storm_IoCompleteRequest$26$label_9_true#1, inline$storm_IoCompleteRequest$26$label_9_false#1;
-
- inline$storm_IoCompleteRequest$26$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$26$label_10#1;
-
- inline$storm_IoCompleteRequest$26$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$26$label_1#1;
-
- inline$storm_IoCompleteRequest$26$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$26$label_7#1;
-
- inline$storm_IoCompleteRequest$26$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$26$label_1#1;
-
- inline$storm_IoCompleteRequest$26$label_1#1:
- goto inline$storm_IoCompleteRequest$26$Return#1;
-
- inline$storm_IoCompleteRequest$26$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$26$Return#1;
-
- inline$storm_IoCompleteRequest$26$Return#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon45_Then#1, inline$BDLSystemPowerIoCompletion$12$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$12$anon46_Then#1, inline$BDLSystemPowerIoCompletion$12$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_80#1:
- goto inline$BDLGetDebugLevel$343$Entry#1;
-
- inline$BDLGetDebugLevel$343$Entry#1:
- goto inline$BDLGetDebugLevel$343$start#1;
-
- inline$BDLGetDebugLevel$343$start#1:
- goto inline$BDLGetDebugLevel$343$label_3#1;
-
- inline$BDLGetDebugLevel$343$label_3#1:
- havoc inline$BDLGetDebugLevel$343$myNondetVar_0;
- inline$BDLGetDebugLevel$343$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$343$myNondetVar_0;
- goto inline$BDLGetDebugLevel$343$label_1#1;
-
- inline$BDLGetDebugLevel$343$label_1#1:
- goto inline$BDLGetDebugLevel$343$Return#1;
-
- inline$BDLGetDebugLevel$343$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$343$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon47_Then#1, inline$BDLSystemPowerIoCompletion$12$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_83_true#1, inline$BDLSystemPowerIoCompletion$12$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_87#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_88#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_89#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$12$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_84#1:
- goto inline$BDLGetDebugLevel$344$Entry#1;
-
- inline$BDLGetDebugLevel$344$Entry#1:
- goto inline$BDLGetDebugLevel$344$start#1;
-
- inline$BDLGetDebugLevel$344$start#1:
- goto inline$BDLGetDebugLevel$344$label_3#1;
-
- inline$BDLGetDebugLevel$344$label_3#1:
- havoc inline$BDLGetDebugLevel$344$myNondetVar_0;
- inline$BDLGetDebugLevel$344$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$344$myNondetVar_0;
- goto inline$BDLGetDebugLevel$344$label_1#1;
-
- inline$BDLGetDebugLevel$344$label_1#1:
- goto inline$BDLGetDebugLevel$344$Return#1;
-
- inline$BDLGetDebugLevel$344$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$344$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon48_Then#1, inline$BDLSystemPowerIoCompletion$12$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_93_true#1, inline$BDLSystemPowerIoCompletion$12$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_97#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_98#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_99#1:
- call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$12$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$12$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_94#1:
- goto inline$BDLGetDebugLevel$345$Entry#1;
-
- inline$BDLGetDebugLevel$345$Entry#1:
- goto inline$BDLGetDebugLevel$345$start#1;
-
- inline$BDLGetDebugLevel$345$start#1:
- goto inline$BDLGetDebugLevel$345$label_3#1;
-
- inline$BDLGetDebugLevel$345$label_3#1:
- havoc inline$BDLGetDebugLevel$345$myNondetVar_0;
- inline$BDLGetDebugLevel$345$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$345$myNondetVar_0;
- goto inline$BDLGetDebugLevel$345$label_1#1;
-
- inline$BDLGetDebugLevel$345$label_1#1:
- goto inline$BDLGetDebugLevel$345$Return#1;
-
- inline$BDLGetDebugLevel$345$Return#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$345$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$12$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$12$anon49_Then#1, inline$BDLSystemPowerIoCompletion$12$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_103_true#1, inline$BDLSystemPowerIoCompletion$12$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$12$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$12$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_104#1:
- inline$BDLSystemPowerIoCompletion$12$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$12$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$12$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$12$Return#1;
-
- inline$BDLSystemPowerIoCompletion$12$Return#1:
- inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$12$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$12$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$12$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$12$anon14_Then#1, inline$CallCompletionRoutine$12$anon14_Else#1;
-
- inline$CallCompletionRoutine$12$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$12$anon9#1;
-
- inline$CallCompletionRoutine$12$anon9#1:
- goto inline$CallCompletionRoutine$12$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$12$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$12$Return#1;
-
- inline$CallCompletionRoutine$12$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$12$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$12$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$12$Entry#1:
- inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$12$start#1;
-
- inline$BDLDevicePowerIoCompletion$12$start#1:
- call inline$BDLDevicePowerIoCompletion$12$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$12$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_4#1:
- inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_6#1:
- inline$BDLDevicePowerIoCompletion$12$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$12$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$12$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$12$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$66$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$66$Entry#1:
- inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$66$start#1;
-
- inline$IoGetCurrentIrpStackLocation$66$start#1:
- inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$66$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$66$label_3_true#1, inline$IoGetCurrentIrpStackLocation$66$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$66$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$66$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$66$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$66$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$66$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$66$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$66$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$66$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$66$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$66$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$66$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$66$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$66$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$66$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$66$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$66$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$66$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$66$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$66$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$66$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$66$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$66$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$66$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon30_Then#1, inline$BDLDevicePowerIoCompletion$12$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_13#1:
- inline$BDLDevicePowerIoCompletion$12$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$12$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$12$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_17#1:
- goto inline$BDLGetDebugLevel$328$Entry#1;
-
- inline$BDLGetDebugLevel$328$Entry#1:
- goto inline$BDLGetDebugLevel$328$start#1;
-
- inline$BDLGetDebugLevel$328$start#1:
- goto inline$BDLGetDebugLevel$328$label_3#1;
-
- inline$BDLGetDebugLevel$328$label_3#1:
- havoc inline$BDLGetDebugLevel$328$myNondetVar_0;
- inline$BDLGetDebugLevel$328$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$328$myNondetVar_0;
- goto inline$BDLGetDebugLevel$328$label_1#1;
-
- inline$BDLGetDebugLevel$328$label_1#1:
- goto inline$BDLGetDebugLevel$328$Return#1;
-
- inline$BDLGetDebugLevel$328$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$328$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon31_Then#1, inline$BDLDevicePowerIoCompletion$12$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_20_true#1, inline$BDLDevicePowerIoCompletion$12$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_24#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_25#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_26#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$12$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_21#1:
- goto inline$BDLGetDebugLevel$329$Entry#1;
-
- inline$BDLGetDebugLevel$329$Entry#1:
- goto inline$BDLGetDebugLevel$329$start#1;
-
- inline$BDLGetDebugLevel$329$start#1:
- goto inline$BDLGetDebugLevel$329$label_3#1;
-
- inline$BDLGetDebugLevel$329$label_3#1:
- havoc inline$BDLGetDebugLevel$329$myNondetVar_0;
- inline$BDLGetDebugLevel$329$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$329$myNondetVar_0;
- goto inline$BDLGetDebugLevel$329$label_1#1;
-
- inline$BDLGetDebugLevel$329$label_1#1:
- goto inline$BDLGetDebugLevel$329$Return#1;
-
- inline$BDLGetDebugLevel$329$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$329$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon32_Then#1, inline$BDLDevicePowerIoCompletion$12$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_30_true#1, inline$BDLDevicePowerIoCompletion$12$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_34#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_35#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_36#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$12$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_31#1:
- goto inline$BDLGetDebugLevel$330$Entry#1;
-
- inline$BDLGetDebugLevel$330$Entry#1:
- goto inline$BDLGetDebugLevel$330$start#1;
-
- inline$BDLGetDebugLevel$330$start#1:
- goto inline$BDLGetDebugLevel$330$label_3#1;
-
- inline$BDLGetDebugLevel$330$label_3#1:
- havoc inline$BDLGetDebugLevel$330$myNondetVar_0;
- inline$BDLGetDebugLevel$330$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$330$myNondetVar_0;
- goto inline$BDLGetDebugLevel$330$label_1#1;
-
- inline$BDLGetDebugLevel$330$label_1#1:
- goto inline$BDLGetDebugLevel$330$Return#1;
-
- inline$BDLGetDebugLevel$330$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$330$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon33_Then#1, inline$BDLDevicePowerIoCompletion$12$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_40_true#1, inline$BDLDevicePowerIoCompletion$12$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_41_true#1, inline$BDLDevicePowerIoCompletion$12$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$12$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$12$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_44_true#1, inline$BDLDevicePowerIoCompletion$12$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$12$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_45_true#1, inline$BDLDevicePowerIoCompletion$12$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$12$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$12$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$12$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$12$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$12$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$12$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_54#1:
- inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$12$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_55_true#1, inline$BDLDevicePowerIoCompletion$12$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_56#1:
- call inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$12$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$12$anon34_Then#1, inline$BDLDevicePowerIoCompletion$12$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_59#1:
- goto inline$BDLGetDebugLevel$331$Entry#1;
-
- inline$BDLGetDebugLevel$331$Entry#1:
- goto inline$BDLGetDebugLevel$331$start#1;
-
- inline$BDLGetDebugLevel$331$start#1:
- goto inline$BDLGetDebugLevel$331$label_3#1;
-
- inline$BDLGetDebugLevel$331$label_3#1:
- havoc inline$BDLGetDebugLevel$331$myNondetVar_0;
- inline$BDLGetDebugLevel$331$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$331$myNondetVar_0;
- goto inline$BDLGetDebugLevel$331$label_1#1;
-
- inline$BDLGetDebugLevel$331$label_1#1:
- goto inline$BDLGetDebugLevel$331$Return#1;
-
- inline$BDLGetDebugLevel$331$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$331$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon35_Then#1, inline$BDLDevicePowerIoCompletion$12$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_62_true#1, inline$BDLDevicePowerIoCompletion$12$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_66#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_67#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_68#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$12$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_63#1:
- goto inline$BDLGetDebugLevel$332$Entry#1;
-
- inline$BDLGetDebugLevel$332$Entry#1:
- goto inline$BDLGetDebugLevel$332$start#1;
-
- inline$BDLGetDebugLevel$332$start#1:
- goto inline$BDLGetDebugLevel$332$label_3#1;
-
- inline$BDLGetDebugLevel$332$label_3#1:
- havoc inline$BDLGetDebugLevel$332$myNondetVar_0;
- inline$BDLGetDebugLevel$332$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$332$myNondetVar_0;
- goto inline$BDLGetDebugLevel$332$label_1#1;
-
- inline$BDLGetDebugLevel$332$label_1#1:
- goto inline$BDLGetDebugLevel$332$Return#1;
-
- inline$BDLGetDebugLevel$332$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$332$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon36_Then#1, inline$BDLDevicePowerIoCompletion$12$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_72_true#1, inline$BDLDevicePowerIoCompletion$12$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_76#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_77#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_78#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$12$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_73#1:
- goto inline$BDLGetDebugLevel$333$Entry#1;
-
- inline$BDLGetDebugLevel$333$Entry#1:
- goto inline$BDLGetDebugLevel$333$start#1;
-
- inline$BDLGetDebugLevel$333$start#1:
- goto inline$BDLGetDebugLevel$333$label_3#1;
-
- inline$BDLGetDebugLevel$333$label_3#1:
- havoc inline$BDLGetDebugLevel$333$myNondetVar_0;
- inline$BDLGetDebugLevel$333$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$333$myNondetVar_0;
- goto inline$BDLGetDebugLevel$333$label_1#1;
-
- inline$BDLGetDebugLevel$333$label_1#1:
- goto inline$BDLGetDebugLevel$333$Return#1;
-
- inline$BDLGetDebugLevel$333$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$333$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon37_Then#1, inline$BDLDevicePowerIoCompletion$12$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_82_true#1, inline$BDLDevicePowerIoCompletion$12$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$12$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$12$anon38_Then#1, inline$BDLDevicePowerIoCompletion$12$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$12$anon39_Then#1, inline$BDLDevicePowerIoCompletion$12$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_92#1:
- goto inline$storm_IoCompleteRequest$25$Entry#1;
-
- inline$storm_IoCompleteRequest$25$Entry#1:
- inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$25$start#1;
-
- inline$storm_IoCompleteRequest$25$start#1:
- inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$25$label_3#1;
-
- inline$storm_IoCompleteRequest$25$label_3#1:
- call inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$25$label_6#1;
-
- inline$storm_IoCompleteRequest$25$label_6#1:
- goto inline$storm_IoCompleteRequest$25$label_6_true#1, inline$storm_IoCompleteRequest$25$label_6_false#1;
-
- inline$storm_IoCompleteRequest$25$label_6_false#1:
- assume inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$25$label_7#1;
-
- inline$storm_IoCompleteRequest$25$label_6_true#1:
- assume inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$25$label_8#1;
-
- inline$storm_IoCompleteRequest$25$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$25$anon3_Then#1, inline$storm_IoCompleteRequest$25$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$25$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$25$anon1#1;
-
- inline$storm_IoCompleteRequest$25$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$25$label_9#1;
-
- inline$storm_IoCompleteRequest$25$label_9#1:
- goto inline$storm_IoCompleteRequest$25$label_9_true#1, inline$storm_IoCompleteRequest$25$label_9_false#1;
-
- inline$storm_IoCompleteRequest$25$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$25$label_10#1;
-
- inline$storm_IoCompleteRequest$25$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$25$label_1#1;
-
- inline$storm_IoCompleteRequest$25$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$25$label_7#1;
-
- inline$storm_IoCompleteRequest$25$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$25$label_1#1;
-
- inline$storm_IoCompleteRequest$25$label_1#1:
- goto inline$storm_IoCompleteRequest$25$Return#1;
-
- inline$storm_IoCompleteRequest$25$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$25$Return#1;
-
- inline$storm_IoCompleteRequest$25$Return#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon40_Then#1, inline$BDLDevicePowerIoCompletion$12$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$12$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$12$anon41_Then#1, inline$BDLDevicePowerIoCompletion$12$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_98#1:
- goto inline$BDLGetDebugLevel$334$Entry#1;
-
- inline$BDLGetDebugLevel$334$Entry#1:
- goto inline$BDLGetDebugLevel$334$start#1;
-
- inline$BDLGetDebugLevel$334$start#1:
- goto inline$BDLGetDebugLevel$334$label_3#1;
-
- inline$BDLGetDebugLevel$334$label_3#1:
- havoc inline$BDLGetDebugLevel$334$myNondetVar_0;
- inline$BDLGetDebugLevel$334$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$334$myNondetVar_0;
- goto inline$BDLGetDebugLevel$334$label_1#1;
-
- inline$BDLGetDebugLevel$334$label_1#1:
- goto inline$BDLGetDebugLevel$334$Return#1;
-
- inline$BDLGetDebugLevel$334$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$334$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon42_Then#1, inline$BDLDevicePowerIoCompletion$12$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_101_true#1, inline$BDLDevicePowerIoCompletion$12$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_105#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_106#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_107#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$12$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_102#1:
- goto inline$BDLGetDebugLevel$335$Entry#1;
-
- inline$BDLGetDebugLevel$335$Entry#1:
- goto inline$BDLGetDebugLevel$335$start#1;
-
- inline$BDLGetDebugLevel$335$start#1:
- goto inline$BDLGetDebugLevel$335$label_3#1;
-
- inline$BDLGetDebugLevel$335$label_3#1:
- havoc inline$BDLGetDebugLevel$335$myNondetVar_0;
- inline$BDLGetDebugLevel$335$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$335$myNondetVar_0;
- goto inline$BDLGetDebugLevel$335$label_1#1;
-
- inline$BDLGetDebugLevel$335$label_1#1:
- goto inline$BDLGetDebugLevel$335$Return#1;
-
- inline$BDLGetDebugLevel$335$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$335$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon43_Then#1, inline$BDLDevicePowerIoCompletion$12$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_111_true#1, inline$BDLDevicePowerIoCompletion$12$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_115#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_116#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_117#1:
- call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$12$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$12$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_112#1:
- goto inline$BDLGetDebugLevel$336$Entry#1;
-
- inline$BDLGetDebugLevel$336$Entry#1:
- goto inline$BDLGetDebugLevel$336$start#1;
-
- inline$BDLGetDebugLevel$336$start#1:
- goto inline$BDLGetDebugLevel$336$label_3#1;
-
- inline$BDLGetDebugLevel$336$label_3#1:
- havoc inline$BDLGetDebugLevel$336$myNondetVar_0;
- inline$BDLGetDebugLevel$336$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$336$myNondetVar_0;
- goto inline$BDLGetDebugLevel$336$label_1#1;
-
- inline$BDLGetDebugLevel$336$label_1#1:
- goto inline$BDLGetDebugLevel$336$Return#1;
-
- inline$BDLGetDebugLevel$336$Return#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$336$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$12$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$12$anon44_Then#1, inline$BDLDevicePowerIoCompletion$12$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_121_true#1, inline$BDLDevicePowerIoCompletion$12$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$12$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$12$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_122#1:
- inline$BDLDevicePowerIoCompletion$12$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$12$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$12$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$12$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$12$Return#1;
-
- inline$BDLDevicePowerIoCompletion$12$Return#1:
- inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$12$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$12$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$12$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$12$anon13_Then#1, inline$CallCompletionRoutine$12$anon13_Else#1;
-
- inline$CallCompletionRoutine$12$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$12$anon7#1;
-
- inline$CallCompletionRoutine$12$anon7#1:
- goto inline$CallCompletionRoutine$12$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$12$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$12$Return#1;
-
- inline$CallCompletionRoutine$12$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$12$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$12$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$12$Entry#1:
- inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$12$start#1;
-
- inline$BDLCallDriverCompletionRoutine$12$start#1:
- inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$12$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$12$label_3_true#1, inline$BDLCallDriverCompletionRoutine$12$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$12$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$12$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$12$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$12$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_6#1:
- goto inline$storm_KeSetEvent$14$Entry#1;
-
- inline$storm_KeSetEvent$14$Entry#1:
- inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$14$start#1;
-
- inline$storm_KeSetEvent$14$start#1:
- inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$14$label_3#1;
-
- inline$storm_KeSetEvent$14$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$14$label_1#1;
-
- inline$storm_KeSetEvent$14$label_1#1:
- goto inline$storm_KeSetEvent$14$Return#1;
-
- inline$storm_KeSetEvent$14$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$12$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$12$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$12$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$12$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$12$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$12$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$12$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_9#1:
- inline$BDLCallDriverCompletionRoutine$12$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$12$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$12$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$12$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$12$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$12$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$12$Return#1:
- inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$12$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$12$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$12$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$12$anon12_Then#1, inline$CallCompletionRoutine$12$anon12_Else#1;
-
- inline$CallCompletionRoutine$12$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$12$anon5#1;
-
- inline$CallCompletionRoutine$12$anon5#1:
- goto inline$CallCompletionRoutine$12$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$12$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$12$label_23#1;
-
- inline$CallCompletionRoutine$12$label_23#1:
- inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$12$label_24#1;
-
- inline$CallCompletionRoutine$12$label_24#1:
- goto inline$CallCompletionRoutine$12$label_24_true#1, inline$CallCompletionRoutine$12$label_24_false#1;
-
- inline$CallCompletionRoutine$12$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$12$label_1#1;
-
- inline$CallCompletionRoutine$12$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$12$label_25#1;
-
- inline$CallCompletionRoutine$12$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$12$label_1#1;
-
- inline$CallCompletionRoutine$12$label_1#1:
- goto inline$CallCompletionRoutine$12$Return#1;
-
- inline$CallCompletionRoutine$12$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$12$Return#1;
-
- inline$CallCompletionRoutine$12$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$12$Return#1;
-
- inline$CallCompletionRoutine$12$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$12$Return#1;
-
- inline$CallCompletionRoutine$12$Return#1:
- goto inline$storm_IoCallDriver$6$label_33$1#1;
-
- inline$storm_IoCallDriver$6$label_33$1#1:
- goto inline$storm_IoCallDriver$6$anon14_Then#1, inline$storm_IoCallDriver$6$anon14_Else#1;
-
- inline$storm_IoCallDriver$6$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$6$anon8#1;
-
- inline$storm_IoCallDriver$6$anon8#1:
- goto inline$storm_IoCallDriver$6$label_36#1;
-
- inline$storm_IoCallDriver$6$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$6$Return#1;
-
- inline$storm_IoCallDriver$6$label_27_case_1#1:
- assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$6$label_29#1;
-
- inline$storm_IoCallDriver$6$label_29#1:
- inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$6$label_37#1;
-
- inline$storm_IoCallDriver$6$label_37#1:
- goto inline$storm_IoCallDriver$6$label_38#1;
-
- inline$storm_IoCallDriver$6$label_38#1:
- goto inline$storm_IoCallDriver$6$label_39#1;
-
- inline$storm_IoCallDriver$6$label_39#1:
- goto inline$CallCompletionRoutine$13$Entry#1;
-
- inline$CallCompletionRoutine$13$Entry#1:
- inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$13$start#1;
-
- inline$CallCompletionRoutine$13$start#1:
- inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$13$label_3#1;
-
- inline$CallCompletionRoutine$13$label_3#1:
- goto inline$CallCompletionRoutine$13$label_4#1;
-
- inline$CallCompletionRoutine$13$label_4#1:
- goto inline$CallCompletionRoutine$13$label_5#1;
-
- inline$CallCompletionRoutine$13$label_5#1:
- goto inline$CallCompletionRoutine$13$label_6#1;
-
- inline$CallCompletionRoutine$13$label_6#1:
- goto inline$CallCompletionRoutine$13$label_7#1;
-
- inline$CallCompletionRoutine$13$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$68$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$68$Entry#1:
- inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$68$start#1;
-
- inline$IoGetCurrentIrpStackLocation$68$start#1:
- inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$68$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$68$label_3_true#1, inline$IoGetCurrentIrpStackLocation$68$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$68$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$68$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$68$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$68$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$68$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$68$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$68$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$68$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$68$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$68$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$68$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$68$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$68$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$68$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$68$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$68$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$68$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$68$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$68$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$68$Return#1:
- goto inline$CallCompletionRoutine$13$label_7$1#1;
-
- inline$CallCompletionRoutine$13$label_7$1#1:
- goto inline$CallCompletionRoutine$13$anon10_Then#1, inline$CallCompletionRoutine$13$anon10_Else#1;
-
- inline$CallCompletionRoutine$13$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$13$anon1#1;
-
- inline$CallCompletionRoutine$13$anon1#1:
- goto inline$CallCompletionRoutine$13$label_10#1;
-
- inline$CallCompletionRoutine$13$label_10#1:
- goto inline$CallCompletionRoutine$13$label_11#1;
-
- inline$CallCompletionRoutine$13$label_11#1:
- havoc inline$CallCompletionRoutine$13$myNondetVar_0;
- inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$myNondetVar_0;
- goto inline$CallCompletionRoutine$13$label_12#1;
-
- inline$CallCompletionRoutine$13$label_12#1:
- havoc inline$CallCompletionRoutine$13$myNondetVar_0;
- inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$myNondetVar_0;
- goto inline$CallCompletionRoutine$13$label_13#1;
-
- inline$CallCompletionRoutine$13$label_13#1:
- havoc inline$CallCompletionRoutine$13$myNondetVar_0;
- goto inline$CallCompletionRoutine$13$label_14#1;
-
- inline$CallCompletionRoutine$13$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$69$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$69$Entry#1:
- inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$69$start#1;
-
- inline$IoGetCurrentIrpStackLocation$69$start#1:
- inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$69$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$69$label_3_true#1, inline$IoGetCurrentIrpStackLocation$69$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$69$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$69$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$69$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$69$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$69$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$69$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$69$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$69$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$69$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$69$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$69$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$69$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$69$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$69$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$69$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$69$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$69$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$69$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$69$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$69$Return#1:
- goto inline$CallCompletionRoutine$13$label_14$1#1;
-
- inline$CallCompletionRoutine$13$label_14$1#1:
- goto inline$CallCompletionRoutine$13$anon11_Then#1, inline$CallCompletionRoutine$13$anon11_Else#1;
-
- inline$CallCompletionRoutine$13$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$13$anon3#1;
-
- inline$CallCompletionRoutine$13$anon3#1:
- goto inline$CallCompletionRoutine$13$label_17#1;
-
- inline$CallCompletionRoutine$13$label_17#1:
- goto inline$CallCompletionRoutine$13$label_18#1;
-
- inline$CallCompletionRoutine$13$label_18#1:
- goto inline$CallCompletionRoutine$13$label_18_true#1, inline$CallCompletionRoutine$13$label_18_false#1;
-
- inline$CallCompletionRoutine$13$label_18_false#1:
- assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$13$label_1#1;
-
- inline$CallCompletionRoutine$13$label_18_true#1:
- assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$13$label_19#1;
-
- inline$CallCompletionRoutine$13$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$13$label_20#1;
-
- inline$CallCompletionRoutine$13$label_20#1:
- goto inline$CallCompletionRoutine$13$label_20_icall_1#1, inline$CallCompletionRoutine$13$label_20_icall_2#1, inline$CallCompletionRoutine$13$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$13$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$13$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$13$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$13$Entry#1:
- inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$13$start#1;
-
- inline$BDLSystemPowerIoCompletion$13$start#1:
- call inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$13$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_4#1:
- inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_6#1:
- inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$13$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$13$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$13$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$71$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$71$Entry#1:
- inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$71$start#1;
-
- inline$IoGetCurrentIrpStackLocation$71$start#1:
- inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$71$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$71$label_3_true#1, inline$IoGetCurrentIrpStackLocation$71$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$71$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$71$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$71$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$71$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$71$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$71$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$71$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$71$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$71$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$71$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$71$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$71$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$71$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$71$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$71$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$71$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$71$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$71$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$71$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$71$Return#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon36_Then#1, inline$BDLSystemPowerIoCompletion$13$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_15#1:
- goto inline$BDLGetDebugLevel$358$Entry#1;
-
- inline$BDLGetDebugLevel$358$Entry#1:
- goto inline$BDLGetDebugLevel$358$start#1;
-
- inline$BDLGetDebugLevel$358$start#1:
- goto inline$BDLGetDebugLevel$358$label_3#1;
-
- inline$BDLGetDebugLevel$358$label_3#1:
- havoc inline$BDLGetDebugLevel$358$myNondetVar_0;
- inline$BDLGetDebugLevel$358$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$358$myNondetVar_0;
- goto inline$BDLGetDebugLevel$358$label_1#1;
-
- inline$BDLGetDebugLevel$358$label_1#1:
- goto inline$BDLGetDebugLevel$358$Return#1;
-
- inline$BDLGetDebugLevel$358$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$358$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon37_Then#1, inline$BDLSystemPowerIoCompletion$13$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_18_true#1, inline$BDLSystemPowerIoCompletion$13$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_22#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_23#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_24#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$13$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_19#1:
- goto inline$BDLGetDebugLevel$359$Entry#1;
-
- inline$BDLGetDebugLevel$359$Entry#1:
- goto inline$BDLGetDebugLevel$359$start#1;
-
- inline$BDLGetDebugLevel$359$start#1:
- goto inline$BDLGetDebugLevel$359$label_3#1;
-
- inline$BDLGetDebugLevel$359$label_3#1:
- havoc inline$BDLGetDebugLevel$359$myNondetVar_0;
- inline$BDLGetDebugLevel$359$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$359$myNondetVar_0;
- goto inline$BDLGetDebugLevel$359$label_1#1;
-
- inline$BDLGetDebugLevel$359$label_1#1:
- goto inline$BDLGetDebugLevel$359$Return#1;
-
- inline$BDLGetDebugLevel$359$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$359$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon38_Then#1, inline$BDLSystemPowerIoCompletion$13$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_28_true#1, inline$BDLSystemPowerIoCompletion$13$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_32#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_33#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_34#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$13$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_29#1:
- goto inline$BDLGetDebugLevel$360$Entry#1;
-
- inline$BDLGetDebugLevel$360$Entry#1:
- goto inline$BDLGetDebugLevel$360$start#1;
-
- inline$BDLGetDebugLevel$360$start#1:
- goto inline$BDLGetDebugLevel$360$label_3#1;
-
- inline$BDLGetDebugLevel$360$label_3#1:
- havoc inline$BDLGetDebugLevel$360$myNondetVar_0;
- inline$BDLGetDebugLevel$360$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$360$myNondetVar_0;
- goto inline$BDLGetDebugLevel$360$label_1#1;
-
- inline$BDLGetDebugLevel$360$label_1#1:
- goto inline$BDLGetDebugLevel$360$Return#1;
-
- inline$BDLGetDebugLevel$360$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$360$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon39_Then#1, inline$BDLSystemPowerIoCompletion$13$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_38_true#1, inline$BDLSystemPowerIoCompletion$13$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_39_true#1, inline$BDLSystemPowerIoCompletion$13$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$13$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$13$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$13$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_106_true#1, inline$BDLSystemPowerIoCompletion$13$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_142#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_143#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$13$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$13$myNondetVar_0, inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$13$anon50_Then#1, inline$BDLSystemPowerIoCompletion$13$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_112#1:
- inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$13$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_113_true#1, inline$BDLSystemPowerIoCompletion$13$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$13$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_117#1:
- goto inline$BDLGetDebugLevel$367$Entry#1;
-
- inline$BDLGetDebugLevel$367$Entry#1:
- goto inline$BDLGetDebugLevel$367$start#1;
-
- inline$BDLGetDebugLevel$367$start#1:
- goto inline$BDLGetDebugLevel$367$label_3#1;
-
- inline$BDLGetDebugLevel$367$label_3#1:
- havoc inline$BDLGetDebugLevel$367$myNondetVar_0;
- inline$BDLGetDebugLevel$367$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$367$myNondetVar_0;
- goto inline$BDLGetDebugLevel$367$label_1#1;
-
- inline$BDLGetDebugLevel$367$label_1#1:
- goto inline$BDLGetDebugLevel$367$Return#1;
-
- inline$BDLGetDebugLevel$367$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$367$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon51_Then#1, inline$BDLSystemPowerIoCompletion$13$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_120_true#1, inline$BDLSystemPowerIoCompletion$13$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_124#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_125#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_126#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$13$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_121#1:
- goto inline$BDLGetDebugLevel$368$Entry#1;
-
- inline$BDLGetDebugLevel$368$Entry#1:
- goto inline$BDLGetDebugLevel$368$start#1;
-
- inline$BDLGetDebugLevel$368$start#1:
- goto inline$BDLGetDebugLevel$368$label_3#1;
-
- inline$BDLGetDebugLevel$368$label_3#1:
- havoc inline$BDLGetDebugLevel$368$myNondetVar_0;
- inline$BDLGetDebugLevel$368$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$368$myNondetVar_0;
- goto inline$BDLGetDebugLevel$368$label_1#1;
-
- inline$BDLGetDebugLevel$368$label_1#1:
- goto inline$BDLGetDebugLevel$368$Return#1;
-
- inline$BDLGetDebugLevel$368$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$368$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon52_Then#1, inline$BDLSystemPowerIoCompletion$13$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_130_true#1, inline$BDLSystemPowerIoCompletion$13$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_134#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_135#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_136#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$13$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_131#1:
- goto inline$BDLGetDebugLevel$369$Entry#1;
-
- inline$BDLGetDebugLevel$369$Entry#1:
- goto inline$BDLGetDebugLevel$369$start#1;
-
- inline$BDLGetDebugLevel$369$start#1:
- goto inline$BDLGetDebugLevel$369$label_3#1;
-
- inline$BDLGetDebugLevel$369$label_3#1:
- havoc inline$BDLGetDebugLevel$369$myNondetVar_0;
- inline$BDLGetDebugLevel$369$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$369$myNondetVar_0;
- goto inline$BDLGetDebugLevel$369$label_1#1;
-
- inline$BDLGetDebugLevel$369$label_1#1:
- goto inline$BDLGetDebugLevel$369$Return#1;
-
- inline$BDLGetDebugLevel$369$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$369$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon53_Then#1, inline$BDLSystemPowerIoCompletion$13$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_140_true#1, inline$BDLSystemPowerIoCompletion$13$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$13$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_115#1:
- inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$13$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$13$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_43#1:
- goto inline$BDLGetDebugLevel$361$Entry#1;
-
- inline$BDLGetDebugLevel$361$Entry#1:
- goto inline$BDLGetDebugLevel$361$start#1;
-
- inline$BDLGetDebugLevel$361$start#1:
- goto inline$BDLGetDebugLevel$361$label_3#1;
-
- inline$BDLGetDebugLevel$361$label_3#1:
- havoc inline$BDLGetDebugLevel$361$myNondetVar_0;
- inline$BDLGetDebugLevel$361$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$361$myNondetVar_0;
- goto inline$BDLGetDebugLevel$361$label_1#1;
-
- inline$BDLGetDebugLevel$361$label_1#1:
- goto inline$BDLGetDebugLevel$361$Return#1;
-
- inline$BDLGetDebugLevel$361$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$361$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon40_Then#1, inline$BDLSystemPowerIoCompletion$13$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_46_true#1, inline$BDLSystemPowerIoCompletion$13$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_50#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_51#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_52#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$13$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_47#1:
- goto inline$BDLGetDebugLevel$362$Entry#1;
-
- inline$BDLGetDebugLevel$362$Entry#1:
- goto inline$BDLGetDebugLevel$362$start#1;
-
- inline$BDLGetDebugLevel$362$start#1:
- goto inline$BDLGetDebugLevel$362$label_3#1;
-
- inline$BDLGetDebugLevel$362$label_3#1:
- havoc inline$BDLGetDebugLevel$362$myNondetVar_0;
- inline$BDLGetDebugLevel$362$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$362$myNondetVar_0;
- goto inline$BDLGetDebugLevel$362$label_1#1;
-
- inline$BDLGetDebugLevel$362$label_1#1:
- goto inline$BDLGetDebugLevel$362$Return#1;
-
- inline$BDLGetDebugLevel$362$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$362$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon41_Then#1, inline$BDLSystemPowerIoCompletion$13$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_56_true#1, inline$BDLSystemPowerIoCompletion$13$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_60#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_61#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_62#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$13$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_57#1:
- goto inline$BDLGetDebugLevel$363$Entry#1;
-
- inline$BDLGetDebugLevel$363$Entry#1:
- goto inline$BDLGetDebugLevel$363$start#1;
-
- inline$BDLGetDebugLevel$363$start#1:
- goto inline$BDLGetDebugLevel$363$label_3#1;
-
- inline$BDLGetDebugLevel$363$label_3#1:
- havoc inline$BDLGetDebugLevel$363$myNondetVar_0;
- inline$BDLGetDebugLevel$363$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$363$myNondetVar_0;
- goto inline$BDLGetDebugLevel$363$label_1#1;
-
- inline$BDLGetDebugLevel$363$label_1#1:
- goto inline$BDLGetDebugLevel$363$Return#1;
-
- inline$BDLGetDebugLevel$363$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$363$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon42_Then#1, inline$BDLSystemPowerIoCompletion$13$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_66_true#1, inline$BDLSystemPowerIoCompletion$13$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$13$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$13$anon43_Then#1, inline$BDLSystemPowerIoCompletion$13$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$13$anon44_Then#1, inline$BDLSystemPowerIoCompletion$13$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_74#1:
- goto inline$storm_IoCompleteRequest$28$Entry#1;
-
- inline$storm_IoCompleteRequest$28$Entry#1:
- inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$28$start#1;
-
- inline$storm_IoCompleteRequest$28$start#1:
- inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$28$label_3#1;
-
- inline$storm_IoCompleteRequest$28$label_3#1:
- call inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$28$label_6#1;
-
- inline$storm_IoCompleteRequest$28$label_6#1:
- goto inline$storm_IoCompleteRequest$28$label_6_true#1, inline$storm_IoCompleteRequest$28$label_6_false#1;
-
- inline$storm_IoCompleteRequest$28$label_6_false#1:
- assume inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$28$label_7#1;
-
- inline$storm_IoCompleteRequest$28$label_6_true#1:
- assume inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$28$label_8#1;
-
- inline$storm_IoCompleteRequest$28$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$28$anon3_Then#1, inline$storm_IoCompleteRequest$28$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$28$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$28$anon1#1;
-
- inline$storm_IoCompleteRequest$28$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$28$label_9#1;
-
- inline$storm_IoCompleteRequest$28$label_9#1:
- goto inline$storm_IoCompleteRequest$28$label_9_true#1, inline$storm_IoCompleteRequest$28$label_9_false#1;
-
- inline$storm_IoCompleteRequest$28$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$28$label_10#1;
-
- inline$storm_IoCompleteRequest$28$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$28$label_1#1;
-
- inline$storm_IoCompleteRequest$28$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$28$label_7#1;
-
- inline$storm_IoCompleteRequest$28$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$28$label_1#1;
-
- inline$storm_IoCompleteRequest$28$label_1#1:
- goto inline$storm_IoCompleteRequest$28$Return#1;
-
- inline$storm_IoCompleteRequest$28$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$28$Return#1;
-
- inline$storm_IoCompleteRequest$28$Return#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon45_Then#1, inline$BDLSystemPowerIoCompletion$13$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$13$anon46_Then#1, inline$BDLSystemPowerIoCompletion$13$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_80#1:
- goto inline$BDLGetDebugLevel$364$Entry#1;
-
- inline$BDLGetDebugLevel$364$Entry#1:
- goto inline$BDLGetDebugLevel$364$start#1;
-
- inline$BDLGetDebugLevel$364$start#1:
- goto inline$BDLGetDebugLevel$364$label_3#1;
-
- inline$BDLGetDebugLevel$364$label_3#1:
- havoc inline$BDLGetDebugLevel$364$myNondetVar_0;
- inline$BDLGetDebugLevel$364$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$364$myNondetVar_0;
- goto inline$BDLGetDebugLevel$364$label_1#1;
-
- inline$BDLGetDebugLevel$364$label_1#1:
- goto inline$BDLGetDebugLevel$364$Return#1;
-
- inline$BDLGetDebugLevel$364$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$364$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon47_Then#1, inline$BDLSystemPowerIoCompletion$13$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_83_true#1, inline$BDLSystemPowerIoCompletion$13$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_87#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_88#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_89#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$13$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_84#1:
- goto inline$BDLGetDebugLevel$365$Entry#1;
-
- inline$BDLGetDebugLevel$365$Entry#1:
- goto inline$BDLGetDebugLevel$365$start#1;
-
- inline$BDLGetDebugLevel$365$start#1:
- goto inline$BDLGetDebugLevel$365$label_3#1;
-
- inline$BDLGetDebugLevel$365$label_3#1:
- havoc inline$BDLGetDebugLevel$365$myNondetVar_0;
- inline$BDLGetDebugLevel$365$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$365$myNondetVar_0;
- goto inline$BDLGetDebugLevel$365$label_1#1;
-
- inline$BDLGetDebugLevel$365$label_1#1:
- goto inline$BDLGetDebugLevel$365$Return#1;
-
- inline$BDLGetDebugLevel$365$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$365$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon48_Then#1, inline$BDLSystemPowerIoCompletion$13$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_93_true#1, inline$BDLSystemPowerIoCompletion$13$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_97#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_98#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_99#1:
- call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$13$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$13$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_94#1:
- goto inline$BDLGetDebugLevel$366$Entry#1;
-
- inline$BDLGetDebugLevel$366$Entry#1:
- goto inline$BDLGetDebugLevel$366$start#1;
-
- inline$BDLGetDebugLevel$366$start#1:
- goto inline$BDLGetDebugLevel$366$label_3#1;
-
- inline$BDLGetDebugLevel$366$label_3#1:
- havoc inline$BDLGetDebugLevel$366$myNondetVar_0;
- inline$BDLGetDebugLevel$366$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$366$myNondetVar_0;
- goto inline$BDLGetDebugLevel$366$label_1#1;
-
- inline$BDLGetDebugLevel$366$label_1#1:
- goto inline$BDLGetDebugLevel$366$Return#1;
-
- inline$BDLGetDebugLevel$366$Return#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$366$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$13$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$13$anon49_Then#1, inline$BDLSystemPowerIoCompletion$13$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_103_true#1, inline$BDLSystemPowerIoCompletion$13$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$13$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$13$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_104#1:
- inline$BDLSystemPowerIoCompletion$13$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$13$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$13$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$13$Return#1;
-
- inline$BDLSystemPowerIoCompletion$13$Return#1:
- inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$13$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$13$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$13$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$13$anon14_Then#1, inline$CallCompletionRoutine$13$anon14_Else#1;
-
- inline$CallCompletionRoutine$13$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$13$anon9#1;
-
- inline$CallCompletionRoutine$13$anon9#1:
- goto inline$CallCompletionRoutine$13$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$13$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$13$Return#1;
-
- inline$CallCompletionRoutine$13$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$13$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$13$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$13$Entry#1:
- inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$13$start#1;
-
- inline$BDLDevicePowerIoCompletion$13$start#1:
- call inline$BDLDevicePowerIoCompletion$13$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$13$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_4#1:
- inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_6#1:
- inline$BDLDevicePowerIoCompletion$13$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$13$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$13$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$13$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$70$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$70$Entry#1:
- inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$70$start#1;
-
- inline$IoGetCurrentIrpStackLocation$70$start#1:
- inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$70$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$70$label_3_true#1, inline$IoGetCurrentIrpStackLocation$70$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$70$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$70$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$70$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$70$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$70$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$70$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$70$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$70$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$70$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$70$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$70$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$70$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$70$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$70$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$70$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$70$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$70$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$70$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$70$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$70$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$70$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$70$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$70$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon30_Then#1, inline$BDLDevicePowerIoCompletion$13$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_13#1:
- inline$BDLDevicePowerIoCompletion$13$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$13$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$13$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_17#1:
- goto inline$BDLGetDebugLevel$349$Entry#1;
-
- inline$BDLGetDebugLevel$349$Entry#1:
- goto inline$BDLGetDebugLevel$349$start#1;
-
- inline$BDLGetDebugLevel$349$start#1:
- goto inline$BDLGetDebugLevel$349$label_3#1;
-
- inline$BDLGetDebugLevel$349$label_3#1:
- havoc inline$BDLGetDebugLevel$349$myNondetVar_0;
- inline$BDLGetDebugLevel$349$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$349$myNondetVar_0;
- goto inline$BDLGetDebugLevel$349$label_1#1;
-
- inline$BDLGetDebugLevel$349$label_1#1:
- goto inline$BDLGetDebugLevel$349$Return#1;
-
- inline$BDLGetDebugLevel$349$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$349$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon31_Then#1, inline$BDLDevicePowerIoCompletion$13$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_20_true#1, inline$BDLDevicePowerIoCompletion$13$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_24#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_25#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_26#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$13$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_21#1:
- goto inline$BDLGetDebugLevel$350$Entry#1;
-
- inline$BDLGetDebugLevel$350$Entry#1:
- goto inline$BDLGetDebugLevel$350$start#1;
-
- inline$BDLGetDebugLevel$350$start#1:
- goto inline$BDLGetDebugLevel$350$label_3#1;
-
- inline$BDLGetDebugLevel$350$label_3#1:
- havoc inline$BDLGetDebugLevel$350$myNondetVar_0;
- inline$BDLGetDebugLevel$350$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$350$myNondetVar_0;
- goto inline$BDLGetDebugLevel$350$label_1#1;
-
- inline$BDLGetDebugLevel$350$label_1#1:
- goto inline$BDLGetDebugLevel$350$Return#1;
-
- inline$BDLGetDebugLevel$350$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$350$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon32_Then#1, inline$BDLDevicePowerIoCompletion$13$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_30_true#1, inline$BDLDevicePowerIoCompletion$13$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_34#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_35#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_36#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$13$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_31#1:
- goto inline$BDLGetDebugLevel$351$Entry#1;
-
- inline$BDLGetDebugLevel$351$Entry#1:
- goto inline$BDLGetDebugLevel$351$start#1;
-
- inline$BDLGetDebugLevel$351$start#1:
- goto inline$BDLGetDebugLevel$351$label_3#1;
-
- inline$BDLGetDebugLevel$351$label_3#1:
- havoc inline$BDLGetDebugLevel$351$myNondetVar_0;
- inline$BDLGetDebugLevel$351$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$351$myNondetVar_0;
- goto inline$BDLGetDebugLevel$351$label_1#1;
-
- inline$BDLGetDebugLevel$351$label_1#1:
- goto inline$BDLGetDebugLevel$351$Return#1;
-
- inline$BDLGetDebugLevel$351$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$351$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon33_Then#1, inline$BDLDevicePowerIoCompletion$13$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_40_true#1, inline$BDLDevicePowerIoCompletion$13$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_41_true#1, inline$BDLDevicePowerIoCompletion$13$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$13$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$13$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_44_true#1, inline$BDLDevicePowerIoCompletion$13$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$13$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_45_true#1, inline$BDLDevicePowerIoCompletion$13$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$13$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$13$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$13$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$13$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$13$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$13$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_54#1:
- inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$13$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_55_true#1, inline$BDLDevicePowerIoCompletion$13$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_56#1:
- call inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$13$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$13$anon34_Then#1, inline$BDLDevicePowerIoCompletion$13$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_59#1:
- goto inline$BDLGetDebugLevel$352$Entry#1;
-
- inline$BDLGetDebugLevel$352$Entry#1:
- goto inline$BDLGetDebugLevel$352$start#1;
-
- inline$BDLGetDebugLevel$352$start#1:
- goto inline$BDLGetDebugLevel$352$label_3#1;
-
- inline$BDLGetDebugLevel$352$label_3#1:
- havoc inline$BDLGetDebugLevel$352$myNondetVar_0;
- inline$BDLGetDebugLevel$352$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$352$myNondetVar_0;
- goto inline$BDLGetDebugLevel$352$label_1#1;
-
- inline$BDLGetDebugLevel$352$label_1#1:
- goto inline$BDLGetDebugLevel$352$Return#1;
-
- inline$BDLGetDebugLevel$352$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$352$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon35_Then#1, inline$BDLDevicePowerIoCompletion$13$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_62_true#1, inline$BDLDevicePowerIoCompletion$13$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_66#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_67#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_68#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$13$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_63#1:
- goto inline$BDLGetDebugLevel$353$Entry#1;
-
- inline$BDLGetDebugLevel$353$Entry#1:
- goto inline$BDLGetDebugLevel$353$start#1;
-
- inline$BDLGetDebugLevel$353$start#1:
- goto inline$BDLGetDebugLevel$353$label_3#1;
-
- inline$BDLGetDebugLevel$353$label_3#1:
- havoc inline$BDLGetDebugLevel$353$myNondetVar_0;
- inline$BDLGetDebugLevel$353$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$353$myNondetVar_0;
- goto inline$BDLGetDebugLevel$353$label_1#1;
-
- inline$BDLGetDebugLevel$353$label_1#1:
- goto inline$BDLGetDebugLevel$353$Return#1;
-
- inline$BDLGetDebugLevel$353$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$353$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon36_Then#1, inline$BDLDevicePowerIoCompletion$13$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_72_true#1, inline$BDLDevicePowerIoCompletion$13$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_76#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_77#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_78#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$13$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_73#1:
- goto inline$BDLGetDebugLevel$354$Entry#1;
-
- inline$BDLGetDebugLevel$354$Entry#1:
- goto inline$BDLGetDebugLevel$354$start#1;
-
- inline$BDLGetDebugLevel$354$start#1:
- goto inline$BDLGetDebugLevel$354$label_3#1;
-
- inline$BDLGetDebugLevel$354$label_3#1:
- havoc inline$BDLGetDebugLevel$354$myNondetVar_0;
- inline$BDLGetDebugLevel$354$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$354$myNondetVar_0;
- goto inline$BDLGetDebugLevel$354$label_1#1;
-
- inline$BDLGetDebugLevel$354$label_1#1:
- goto inline$BDLGetDebugLevel$354$Return#1;
-
- inline$BDLGetDebugLevel$354$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$354$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon37_Then#1, inline$BDLDevicePowerIoCompletion$13$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_82_true#1, inline$BDLDevicePowerIoCompletion$13$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$13$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$13$anon38_Then#1, inline$BDLDevicePowerIoCompletion$13$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$13$anon39_Then#1, inline$BDLDevicePowerIoCompletion$13$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_92#1:
- goto inline$storm_IoCompleteRequest$27$Entry#1;
-
- inline$storm_IoCompleteRequest$27$Entry#1:
- inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$27$start#1;
-
- inline$storm_IoCompleteRequest$27$start#1:
- inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$27$label_3#1;
-
- inline$storm_IoCompleteRequest$27$label_3#1:
- call inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$27$label_6#1;
-
- inline$storm_IoCompleteRequest$27$label_6#1:
- goto inline$storm_IoCompleteRequest$27$label_6_true#1, inline$storm_IoCompleteRequest$27$label_6_false#1;
-
- inline$storm_IoCompleteRequest$27$label_6_false#1:
- assume inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$27$label_7#1;
-
- inline$storm_IoCompleteRequest$27$label_6_true#1:
- assume inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$27$label_8#1;
-
- inline$storm_IoCompleteRequest$27$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$27$anon3_Then#1, inline$storm_IoCompleteRequest$27$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$27$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$27$anon1#1;
-
- inline$storm_IoCompleteRequest$27$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$27$label_9#1;
-
- inline$storm_IoCompleteRequest$27$label_9#1:
- goto inline$storm_IoCompleteRequest$27$label_9_true#1, inline$storm_IoCompleteRequest$27$label_9_false#1;
-
- inline$storm_IoCompleteRequest$27$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$27$label_10#1;
-
- inline$storm_IoCompleteRequest$27$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$27$label_1#1;
-
- inline$storm_IoCompleteRequest$27$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$27$label_7#1;
-
- inline$storm_IoCompleteRequest$27$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$27$label_1#1;
-
- inline$storm_IoCompleteRequest$27$label_1#1:
- goto inline$storm_IoCompleteRequest$27$Return#1;
-
- inline$storm_IoCompleteRequest$27$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$27$Return#1;
-
- inline$storm_IoCompleteRequest$27$Return#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon40_Then#1, inline$BDLDevicePowerIoCompletion$13$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$13$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$13$anon41_Then#1, inline$BDLDevicePowerIoCompletion$13$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_98#1:
- goto inline$BDLGetDebugLevel$355$Entry#1;
-
- inline$BDLGetDebugLevel$355$Entry#1:
- goto inline$BDLGetDebugLevel$355$start#1;
-
- inline$BDLGetDebugLevel$355$start#1:
- goto inline$BDLGetDebugLevel$355$label_3#1;
-
- inline$BDLGetDebugLevel$355$label_3#1:
- havoc inline$BDLGetDebugLevel$355$myNondetVar_0;
- inline$BDLGetDebugLevel$355$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$355$myNondetVar_0;
- goto inline$BDLGetDebugLevel$355$label_1#1;
-
- inline$BDLGetDebugLevel$355$label_1#1:
- goto inline$BDLGetDebugLevel$355$Return#1;
-
- inline$BDLGetDebugLevel$355$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$355$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon42_Then#1, inline$BDLDevicePowerIoCompletion$13$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_101_true#1, inline$BDLDevicePowerIoCompletion$13$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_105#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_106#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_107#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$13$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_102#1:
- goto inline$BDLGetDebugLevel$356$Entry#1;
-
- inline$BDLGetDebugLevel$356$Entry#1:
- goto inline$BDLGetDebugLevel$356$start#1;
-
- inline$BDLGetDebugLevel$356$start#1:
- goto inline$BDLGetDebugLevel$356$label_3#1;
-
- inline$BDLGetDebugLevel$356$label_3#1:
- havoc inline$BDLGetDebugLevel$356$myNondetVar_0;
- inline$BDLGetDebugLevel$356$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$356$myNondetVar_0;
- goto inline$BDLGetDebugLevel$356$label_1#1;
-
- inline$BDLGetDebugLevel$356$label_1#1:
- goto inline$BDLGetDebugLevel$356$Return#1;
-
- inline$BDLGetDebugLevel$356$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$356$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon43_Then#1, inline$BDLDevicePowerIoCompletion$13$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_111_true#1, inline$BDLDevicePowerIoCompletion$13$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_115#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_116#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_117#1:
- call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$13$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$13$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_112#1:
- goto inline$BDLGetDebugLevel$357$Entry#1;
-
- inline$BDLGetDebugLevel$357$Entry#1:
- goto inline$BDLGetDebugLevel$357$start#1;
-
- inline$BDLGetDebugLevel$357$start#1:
- goto inline$BDLGetDebugLevel$357$label_3#1;
-
- inline$BDLGetDebugLevel$357$label_3#1:
- havoc inline$BDLGetDebugLevel$357$myNondetVar_0;
- inline$BDLGetDebugLevel$357$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$357$myNondetVar_0;
- goto inline$BDLGetDebugLevel$357$label_1#1;
-
- inline$BDLGetDebugLevel$357$label_1#1:
- goto inline$BDLGetDebugLevel$357$Return#1;
-
- inline$BDLGetDebugLevel$357$Return#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$357$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$13$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$13$anon44_Then#1, inline$BDLDevicePowerIoCompletion$13$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_121_true#1, inline$BDLDevicePowerIoCompletion$13$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$13$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$13$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_122#1:
- inline$BDLDevicePowerIoCompletion$13$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$13$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$13$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$13$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$13$Return#1;
-
- inline$BDLDevicePowerIoCompletion$13$Return#1:
- inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$13$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$13$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$13$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$13$anon13_Then#1, inline$CallCompletionRoutine$13$anon13_Else#1;
-
- inline$CallCompletionRoutine$13$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$13$anon7#1;
-
- inline$CallCompletionRoutine$13$anon7#1:
- goto inline$CallCompletionRoutine$13$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$13$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$13$Return#1;
-
- inline$CallCompletionRoutine$13$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$13$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$13$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$13$Entry#1:
- inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$13$start#1;
-
- inline$BDLCallDriverCompletionRoutine$13$start#1:
- inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$13$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$13$label_3_true#1, inline$BDLCallDriverCompletionRoutine$13$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$13$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$13$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$13$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$13$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_6#1:
- goto inline$storm_KeSetEvent$15$Entry#1;
-
- inline$storm_KeSetEvent$15$Entry#1:
- inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$15$start#1;
-
- inline$storm_KeSetEvent$15$start#1:
- inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$15$label_3#1;
-
- inline$storm_KeSetEvent$15$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$15$label_1#1;
-
- inline$storm_KeSetEvent$15$label_1#1:
- goto inline$storm_KeSetEvent$15$Return#1;
-
- inline$storm_KeSetEvent$15$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$13$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$13$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$13$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$13$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$13$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$13$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$13$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_9#1:
- inline$BDLCallDriverCompletionRoutine$13$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$13$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$13$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$13$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$13$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$13$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$13$Return#1:
- inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$13$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$13$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$13$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$13$anon12_Then#1, inline$CallCompletionRoutine$13$anon12_Else#1;
-
- inline$CallCompletionRoutine$13$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$13$anon5#1;
-
- inline$CallCompletionRoutine$13$anon5#1:
- goto inline$CallCompletionRoutine$13$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$13$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$13$label_23#1;
-
- inline$CallCompletionRoutine$13$label_23#1:
- inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$13$label_24#1;
-
- inline$CallCompletionRoutine$13$label_24#1:
- goto inline$CallCompletionRoutine$13$label_24_true#1, inline$CallCompletionRoutine$13$label_24_false#1;
-
- inline$CallCompletionRoutine$13$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$13$label_1#1;
-
- inline$CallCompletionRoutine$13$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$13$label_25#1;
-
- inline$CallCompletionRoutine$13$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$13$label_1#1;
-
- inline$CallCompletionRoutine$13$label_1#1:
- goto inline$CallCompletionRoutine$13$Return#1;
-
- inline$CallCompletionRoutine$13$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$13$Return#1;
-
- inline$CallCompletionRoutine$13$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$13$Return#1;
-
- inline$CallCompletionRoutine$13$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$13$Return#1;
-
- inline$CallCompletionRoutine$13$Return#1:
- goto inline$storm_IoCallDriver$6$label_39$1#1;
-
- inline$storm_IoCallDriver$6$label_39$1#1:
- goto inline$storm_IoCallDriver$6$anon15_Then#1, inline$storm_IoCallDriver$6$anon15_Else#1;
-
- inline$storm_IoCallDriver$6$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$6$anon10#1;
-
- inline$storm_IoCallDriver$6$anon10#1:
- goto inline$storm_IoCallDriver$6$label_36#1;
-
- inline$storm_IoCallDriver$6$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$6$Return#1;
-
- inline$storm_IoCallDriver$6$label_27_case_0#1:
- assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$6$label_28#1;
-
- inline$storm_IoCallDriver$6$label_28#1:
- inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$6$label_42#1;
-
- inline$storm_IoCallDriver$6$label_42#1:
- goto inline$storm_IoCallDriver$6$label_43#1;
-
- inline$storm_IoCallDriver$6$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$6$label_36#1;
-
- inline$storm_IoCallDriver$6$label_36#1:
- inline$storm_IoCallDriver$6$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$6$label_1#1;
-
- inline$storm_IoCallDriver$6$label_1#1:
- goto inline$storm_IoCallDriver$6$Return#1;
-
- inline$storm_IoCallDriver$6$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$6$Return#1;
-
- inline$storm_IoCallDriver$6$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$6$Return#1;
-
- inline$storm_IoCallDriver$6$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$6$Return#1;
-
- inline$storm_IoCallDriver$6$Return#1:
- inline$storm_PoCallDriver$2$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$6$$result.storm_IoCallDriver$456.0$1$;
- goto inline$storm_PoCallDriver$2$label_3$1#1;
-
- inline$storm_PoCallDriver$2$label_3$1#1:
- goto inline$storm_PoCallDriver$2$anon2_Then#1, inline$storm_PoCallDriver$2$anon2_Else#1;
-
- inline$storm_PoCallDriver$2$anon2_Else#1:
- assume !raiseException;
- goto inline$storm_PoCallDriver$2$anon1#1;
-
- inline$storm_PoCallDriver$2$anon1#1:
- goto inline$storm_PoCallDriver$2$label_6#1;
-
- inline$storm_PoCallDriver$2$label_6#1:
- inline$storm_PoCallDriver$2$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$2$$result.storm_IoCallDriver$499.27$2$;
- goto inline$storm_PoCallDriver$2$label_1#1;
-
- inline$storm_PoCallDriver$2$label_1#1:
- goto inline$storm_PoCallDriver$2$Return#1;
-
- inline$storm_PoCallDriver$2$anon2_Then#1:
- assume raiseException;
- goto inline$storm_PoCallDriver$2$Return#1;
-
- inline$storm_PoCallDriver$2$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$2$$result.storm_PoCallDriver$494.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_25$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_25$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon22_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon13#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon13#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_28#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_28#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_PoCallDriver$104.29$3$;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$2$label_29_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_29_false#1:
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_29_true#1:
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_31#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_31#1:
- goto inline$storm_KeWaitForSingleObject$2$Entry#1;
-
- inline$storm_KeWaitForSingleObject$2$Entry#1:
- inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
- goto inline$storm_KeWaitForSingleObject$2$start#1;
-
- inline$storm_KeWaitForSingleObject$2$start#1:
- inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
- inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
- goto inline$storm_KeWaitForSingleObject$2$label_3#1;
-
- inline$storm_KeWaitForSingleObject$2$label_3#1:
- goto inline$storm_KeWaitForSingleObject$2$label_3_true#1, inline$storm_KeWaitForSingleObject$2$label_3_false#1;
-
- inline$storm_KeWaitForSingleObject$2$label_3_false#1:
- assume inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
- goto inline$storm_KeWaitForSingleObject$2$label_4#1;
-
- inline$storm_KeWaitForSingleObject$2$label_4#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$2$anon6_Then#1, inline$storm_KeWaitForSingleObject$2$anon6_Else#1;
-
- inline$storm_KeWaitForSingleObject$2$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$2$anon1#1;
-
- inline$storm_KeWaitForSingleObject$2$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$2$label_13#1;
-
- inline$storm_KeWaitForSingleObject$2$label_13#1:
- inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$2$label_1#1;
-
- inline$storm_KeWaitForSingleObject$2$anon6_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$2$Return#1;
-
- inline$storm_KeWaitForSingleObject$2$label_3_true#1:
- assume inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
- goto inline$storm_KeWaitForSingleObject$2$label_5#1;
-
- inline$storm_KeWaitForSingleObject$2$label_5#1:
- call inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$ := storm_nondet();
- goto inline$storm_KeWaitForSingleObject$2$label_8#1;
-
- inline$storm_KeWaitForSingleObject$2$label_8#1:
- goto inline$storm_KeWaitForSingleObject$2$label_8_true#1, inline$storm_KeWaitForSingleObject$2$label_8_false#1;
-
- inline$storm_KeWaitForSingleObject$2$label_8_false#1:
- assume inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$ == 0;
- goto inline$storm_KeWaitForSingleObject$2$label_9#1;
-
- inline$storm_KeWaitForSingleObject$2$label_9#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$2$anon7_Then#1, inline$storm_KeWaitForSingleObject$2$anon7_Else#1;
-
- inline$storm_KeWaitForSingleObject$2$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$2$anon3#1;
-
- inline$storm_KeWaitForSingleObject$2$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$2$label_12#1;
-
- inline$storm_KeWaitForSingleObject$2$label_12#1:
- inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
- goto inline$storm_KeWaitForSingleObject$2$label_1#1;
-
- inline$storm_KeWaitForSingleObject$2$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$2$Return#1;
-
- inline$storm_KeWaitForSingleObject$2$label_8_true#1:
- assume inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$ != 0;
- goto inline$storm_KeWaitForSingleObject$2$label_10#1;
-
- inline$storm_KeWaitForSingleObject$2$label_10#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$2$anon8_Then#1, inline$storm_KeWaitForSingleObject$2$anon8_Else#1;
-
- inline$storm_KeWaitForSingleObject$2$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$2$anon5#1;
-
- inline$storm_KeWaitForSingleObject$2$anon5#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$2$label_11#1;
-
- inline$storm_KeWaitForSingleObject$2$label_11#1:
- inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$2$label_1#1;
-
- inline$storm_KeWaitForSingleObject$2$label_1#1:
- goto inline$storm_KeWaitForSingleObject$2$Return#1;
-
- inline$storm_KeWaitForSingleObject$2$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$2$Return#1;
-
- inline$storm_KeWaitForSingleObject$2$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_31$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_31$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon23_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$anon15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon15#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_34#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_34#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_KeWaitForSingleObject$116.38$5$;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_35#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_35#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$2$label_35_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_35_false#1:
- assume inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_35_true#1:
- assume inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_37#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_37#1:
- call inline$BDLCallLowerLevelDriverAndWait$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_38#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_38#1:
- call inline$BDLCallLowerLevelDriverAndWait$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_39#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_39#1:
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_36#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
- inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_30#1:
- inline$BDLCallLowerLevelDriverAndWait$2$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
- goto inline$BDLCallLowerLevelDriverAndWait$2$label_1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$label_1#1:
- call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon23_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon22_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon21_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon19_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon18_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon17_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$anon16_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$2$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLCallLowerLevelDriverAndWait$2332.43$13$ := inline$BDLCallLowerLevelDriverAndWait$2$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_29$1#1;
-
- inline$BDLPnPCancelRemove$0$label_29$1#1:
- goto inline$BDLPnPCancelRemove$0$anon31_Then#1, inline$BDLPnPCancelRemove$0$anon31_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon7#1;
-
- inline$BDLPnPCancelRemove$0$anon7#1:
- goto inline$BDLPnPCancelRemove$0$label_33#1;
-
- inline$BDLPnPCancelRemove$0$label_33#1:
- inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$result.BDLCallLowerLevelDriverAndWait$2332.43$13$;
- goto inline$BDLPnPCancelRemove$0$label_34#1;
-
- inline$BDLPnPCancelRemove$0$label_34#1:
- goto inline$BDLPnPCancelRemove$0$label_34_true#1, inline$BDLPnPCancelRemove$0$label_34_false#1;
-
- inline$BDLPnPCancelRemove$0$label_34_false#1:
- assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 == 0;
- goto inline$BDLPnPCancelRemove$0$label_35#1;
-
- inline$BDLPnPCancelRemove$0$label_35#1:
- call inline$BDLPnPCancelRemove$0$$result.IoSetDeviceInterfaceState$2349.38$25$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12), 1);
- goto inline$BDLPnPCancelRemove$0$anon32_Then#1, inline$BDLPnPCancelRemove$0$anon32_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon9#1;
-
- inline$BDLPnPCancelRemove$0$anon9#1:
- goto inline$BDLPnPCancelRemove$0$label_89#1;
-
- inline$BDLPnPCancelRemove$0$label_89#1:
- inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$result.IoSetDeviceInterfaceState$2349.38$25$;
- goto inline$BDLPnPCancelRemove$0$label_90#1;
-
- inline$BDLPnPCancelRemove$0$label_90#1:
- goto inline$BDLPnPCancelRemove$0$label_90_true#1, inline$BDLPnPCancelRemove$0$label_90_false#1;
-
- inline$BDLPnPCancelRemove$0$label_90_false#1:
- assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 == 0;
- goto inline$BDLPnPCancelRemove$0$label_62#1;
-
- inline$BDLPnPCancelRemove$0$label_90_true#1:
- assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 != 0;
- goto inline$BDLPnPCancelRemove$0$label_91#1;
-
- inline$BDLPnPCancelRemove$0$label_91#1:
- goto inline$BDLGetDebugLevel$376$Entry#1;
-
- inline$BDLGetDebugLevel$376$Entry#1:
- goto inline$BDLGetDebugLevel$376$start#1;
-
- inline$BDLGetDebugLevel$376$start#1:
- goto inline$BDLGetDebugLevel$376$label_3#1;
-
- inline$BDLGetDebugLevel$376$label_3#1:
- havoc inline$BDLGetDebugLevel$376$myNondetVar_0;
- inline$BDLGetDebugLevel$376$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$376$myNondetVar_0;
- goto inline$BDLGetDebugLevel$376$label_1#1;
-
- inline$BDLGetDebugLevel$376$label_1#1:
- goto inline$BDLGetDebugLevel$376$Return#1;
-
- inline$BDLGetDebugLevel$376$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$ := inline$BDLGetDebugLevel$376$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_91$1#1;
-
- inline$BDLPnPCancelRemove$0$label_91$1#1:
- goto inline$BDLPnPCancelRemove$0$anon39_Then#1, inline$BDLPnPCancelRemove$0$anon39_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon23#1;
-
- inline$BDLPnPCancelRemove$0$anon23#1:
- goto inline$BDLPnPCancelRemove$0$label_94#1;
-
- inline$BDLPnPCancelRemove$0$label_94#1:
- goto inline$BDLPnPCancelRemove$0$label_94_true#1, inline$BDLPnPCancelRemove$0$label_94_false#1;
-
- inline$BDLPnPCancelRemove$0$label_94_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_95#1;
-
- inline$BDLPnPCancelRemove$0$label_94_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_98#1;
-
- inline$BDLPnPCancelRemove$0$label_98#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_99#1;
-
- inline$BDLPnPCancelRemove$0$label_99#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_100#1;
-
- inline$BDLPnPCancelRemove$0$label_100#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_101#1;
-
- inline$BDLPnPCancelRemove$0$label_101#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$27$;
- goto inline$BDLPnPCancelRemove$0$label_95#1;
-
- inline$BDLPnPCancelRemove$0$label_95#1:
- goto inline$BDLGetDebugLevel$377$Entry#1;
-
- inline$BDLGetDebugLevel$377$Entry#1:
- goto inline$BDLGetDebugLevel$377$start#1;
-
- inline$BDLGetDebugLevel$377$start#1:
- goto inline$BDLGetDebugLevel$377$label_3#1;
-
- inline$BDLGetDebugLevel$377$label_3#1:
- havoc inline$BDLGetDebugLevel$377$myNondetVar_0;
- inline$BDLGetDebugLevel$377$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$377$myNondetVar_0;
- goto inline$BDLGetDebugLevel$377$label_1#1;
-
- inline$BDLGetDebugLevel$377$label_1#1:
- goto inline$BDLGetDebugLevel$377$Return#1;
-
- inline$BDLGetDebugLevel$377$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$ := inline$BDLGetDebugLevel$377$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_95$1#1;
-
- inline$BDLPnPCancelRemove$0$label_95$1#1:
- goto inline$BDLPnPCancelRemove$0$anon40_Then#1, inline$BDLPnPCancelRemove$0$anon40_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon25#1;
-
- inline$BDLPnPCancelRemove$0$anon25#1:
- goto inline$BDLPnPCancelRemove$0$label_104#1;
-
- inline$BDLPnPCancelRemove$0$label_104#1:
- goto inline$BDLPnPCancelRemove$0$label_104_true#1, inline$BDLPnPCancelRemove$0$label_104_false#1;
-
- inline$BDLPnPCancelRemove$0$label_104_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_105#1;
-
- inline$BDLPnPCancelRemove$0$label_104_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_108#1;
-
- inline$BDLPnPCancelRemove$0$label_108#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_109#1;
-
- inline$BDLPnPCancelRemove$0$label_109#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_110#1;
-
- inline$BDLPnPCancelRemove$0$label_110#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_111#1;
-
- inline$BDLPnPCancelRemove$0$label_111#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$32$;
- goto inline$BDLPnPCancelRemove$0$label_105#1;
-
- inline$BDLPnPCancelRemove$0$label_105#1:
- goto inline$BDLGetDebugLevel$378$Entry#1;
-
- inline$BDLGetDebugLevel$378$Entry#1:
- goto inline$BDLGetDebugLevel$378$start#1;
-
- inline$BDLGetDebugLevel$378$start#1:
- goto inline$BDLGetDebugLevel$378$label_3#1;
-
- inline$BDLGetDebugLevel$378$label_3#1:
- havoc inline$BDLGetDebugLevel$378$myNondetVar_0;
- inline$BDLGetDebugLevel$378$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$378$myNondetVar_0;
- goto inline$BDLGetDebugLevel$378$label_1#1;
-
- inline$BDLGetDebugLevel$378$label_1#1:
- goto inline$BDLGetDebugLevel$378$Return#1;
-
- inline$BDLGetDebugLevel$378$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$ := inline$BDLGetDebugLevel$378$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_105$1#1;
-
- inline$BDLPnPCancelRemove$0$label_105$1#1:
- goto inline$BDLPnPCancelRemove$0$anon41_Then#1, inline$BDLPnPCancelRemove$0$anon41_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon27#1;
-
- inline$BDLPnPCancelRemove$0$anon27#1:
- goto inline$BDLPnPCancelRemove$0$label_114#1;
-
- inline$BDLPnPCancelRemove$0$label_114#1:
- goto inline$BDLPnPCancelRemove$0$label_114_true#1, inline$BDLPnPCancelRemove$0$label_114_false#1;
-
- inline$BDLPnPCancelRemove$0$label_114_false#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$, 4) == 0;
- goto inline$BDLPnPCancelRemove$0$label_62#1;
-
- inline$BDLPnPCancelRemove$0$label_114_true#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$, 4) != 0;
- goto inline$BDLPnPCancelRemove$0$label_115#1;
-
- inline$BDLPnPCancelRemove$0$label_115#1:
- goto inline$BDLPnPCancelRemove$0$label_62#1;
-
- inline$BDLPnPCancelRemove$0$anon41_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon40_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon39_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$label_34_true#1:
- assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 != 0;
- goto inline$BDLPnPCancelRemove$0$label_38#1;
-
- inline$BDLPnPCancelRemove$0$label_38#1:
- goto inline$BDLGetDebugLevel$370$Entry#1;
-
- inline$BDLGetDebugLevel$370$Entry#1:
- goto inline$BDLGetDebugLevel$370$start#1;
-
- inline$BDLGetDebugLevel$370$start#1:
- goto inline$BDLGetDebugLevel$370$label_3#1;
-
- inline$BDLGetDebugLevel$370$label_3#1:
- havoc inline$BDLGetDebugLevel$370$myNondetVar_0;
- inline$BDLGetDebugLevel$370$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$370$myNondetVar_0;
- goto inline$BDLGetDebugLevel$370$label_1#1;
-
- inline$BDLGetDebugLevel$370$label_1#1:
- goto inline$BDLGetDebugLevel$370$Return#1;
-
- inline$BDLGetDebugLevel$370$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$ := inline$BDLGetDebugLevel$370$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_38$1#1;
-
- inline$BDLPnPCancelRemove$0$label_38$1#1:
- goto inline$BDLPnPCancelRemove$0$anon33_Then#1, inline$BDLPnPCancelRemove$0$anon33_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon11#1;
-
- inline$BDLPnPCancelRemove$0$anon11#1:
- goto inline$BDLPnPCancelRemove$0$label_41#1;
-
- inline$BDLPnPCancelRemove$0$label_41#1:
- goto inline$BDLPnPCancelRemove$0$label_41_true#1, inline$BDLPnPCancelRemove$0$label_41_false#1;
-
- inline$BDLPnPCancelRemove$0$label_41_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_42#1;
-
- inline$BDLPnPCancelRemove$0$label_41_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_45#1;
-
- inline$BDLPnPCancelRemove$0$label_45#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_46#1;
-
- inline$BDLPnPCancelRemove$0$label_46#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_47#1;
-
- inline$BDLPnPCancelRemove$0$label_47#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_48#1;
-
- inline$BDLPnPCancelRemove$0$label_48#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$15$;
- goto inline$BDLPnPCancelRemove$0$label_42#1;
-
- inline$BDLPnPCancelRemove$0$label_42#1:
- goto inline$BDLGetDebugLevel$371$Entry#1;
-
- inline$BDLGetDebugLevel$371$Entry#1:
- goto inline$BDLGetDebugLevel$371$start#1;
-
- inline$BDLGetDebugLevel$371$start#1:
- goto inline$BDLGetDebugLevel$371$label_3#1;
-
- inline$BDLGetDebugLevel$371$label_3#1:
- havoc inline$BDLGetDebugLevel$371$myNondetVar_0;
- inline$BDLGetDebugLevel$371$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$371$myNondetVar_0;
- goto inline$BDLGetDebugLevel$371$label_1#1;
-
- inline$BDLGetDebugLevel$371$label_1#1:
- goto inline$BDLGetDebugLevel$371$Return#1;
-
- inline$BDLGetDebugLevel$371$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$ := inline$BDLGetDebugLevel$371$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_42$1#1;
-
- inline$BDLPnPCancelRemove$0$label_42$1#1:
- goto inline$BDLPnPCancelRemove$0$anon34_Then#1, inline$BDLPnPCancelRemove$0$anon34_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon13#1;
-
- inline$BDLPnPCancelRemove$0$anon13#1:
- goto inline$BDLPnPCancelRemove$0$label_51#1;
-
- inline$BDLPnPCancelRemove$0$label_51#1:
- goto inline$BDLPnPCancelRemove$0$label_51_true#1, inline$BDLPnPCancelRemove$0$label_51_false#1;
-
- inline$BDLPnPCancelRemove$0$label_51_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_52#1;
-
- inline$BDLPnPCancelRemove$0$label_51_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_55#1;
-
- inline$BDLPnPCancelRemove$0$label_55#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_56#1;
-
- inline$BDLPnPCancelRemove$0$label_56#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_57#1;
-
- inline$BDLPnPCancelRemove$0$label_57#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_58#1;
-
- inline$BDLPnPCancelRemove$0$label_58#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$20$;
- goto inline$BDLPnPCancelRemove$0$label_52#1;
-
- inline$BDLPnPCancelRemove$0$label_52#1:
- goto inline$BDLGetDebugLevel$372$Entry#1;
-
- inline$BDLGetDebugLevel$372$Entry#1:
- goto inline$BDLGetDebugLevel$372$start#1;
-
- inline$BDLGetDebugLevel$372$start#1:
- goto inline$BDLGetDebugLevel$372$label_3#1;
-
- inline$BDLGetDebugLevel$372$label_3#1:
- havoc inline$BDLGetDebugLevel$372$myNondetVar_0;
- inline$BDLGetDebugLevel$372$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$372$myNondetVar_0;
- goto inline$BDLGetDebugLevel$372$label_1#1;
-
- inline$BDLGetDebugLevel$372$label_1#1:
- goto inline$BDLGetDebugLevel$372$Return#1;
-
- inline$BDLGetDebugLevel$372$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$ := inline$BDLGetDebugLevel$372$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_52$1#1;
-
- inline$BDLPnPCancelRemove$0$label_52$1#1:
- goto inline$BDLPnPCancelRemove$0$anon35_Then#1, inline$BDLPnPCancelRemove$0$anon35_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon15#1;
-
- inline$BDLPnPCancelRemove$0$anon15#1:
- goto inline$BDLPnPCancelRemove$0$label_61#1;
-
- inline$BDLPnPCancelRemove$0$label_61#1:
- goto inline$BDLPnPCancelRemove$0$label_61_true#1, inline$BDLPnPCancelRemove$0$label_61_false#1;
-
- inline$BDLPnPCancelRemove$0$label_61_false#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$, 4) == 0;
- goto inline$BDLPnPCancelRemove$0$label_62#1;
-
- inline$BDLPnPCancelRemove$0$label_61_true#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$, 4) != 0;
- goto inline$BDLPnPCancelRemove$0$label_65#1;
-
- inline$BDLPnPCancelRemove$0$label_65#1:
- goto inline$BDLPnPCancelRemove$0$label_62#1;
-
- inline$BDLPnPCancelRemove$0$label_62#1:
- goto inline$BDLGetDebugLevel$373$Entry#1;
-
- inline$BDLGetDebugLevel$373$Entry#1:
- goto inline$BDLGetDebugLevel$373$start#1;
-
- inline$BDLGetDebugLevel$373$start#1:
- goto inline$BDLGetDebugLevel$373$label_3#1;
-
- inline$BDLGetDebugLevel$373$label_3#1:
- havoc inline$BDLGetDebugLevel$373$myNondetVar_0;
- inline$BDLGetDebugLevel$373$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$373$myNondetVar_0;
- goto inline$BDLGetDebugLevel$373$label_1#1;
-
- inline$BDLGetDebugLevel$373$label_1#1:
- goto inline$BDLGetDebugLevel$373$Return#1;
-
- inline$BDLGetDebugLevel$373$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$ := inline$BDLGetDebugLevel$373$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_62$1#1;
-
- inline$BDLPnPCancelRemove$0$label_62$1#1:
- goto inline$BDLPnPCancelRemove$0$anon36_Then#1, inline$BDLPnPCancelRemove$0$anon36_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon17#1;
-
- inline$BDLPnPCancelRemove$0$anon17#1:
- goto inline$BDLPnPCancelRemove$0$label_66#1;
-
- inline$BDLPnPCancelRemove$0$label_66#1:
- goto inline$BDLPnPCancelRemove$0$label_66_true#1, inline$BDLPnPCancelRemove$0$label_66_false#1;
-
- inline$BDLPnPCancelRemove$0$label_66_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_67#1;
-
- inline$BDLPnPCancelRemove$0$label_66_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_70#1;
-
- inline$BDLPnPCancelRemove$0$label_70#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_71#1;
-
- inline$BDLPnPCancelRemove$0$label_71#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_72#1;
-
- inline$BDLPnPCancelRemove$0$label_72#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_73#1;
-
- inline$BDLPnPCancelRemove$0$label_73#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$38$;
- goto inline$BDLPnPCancelRemove$0$label_67#1;
-
- inline$BDLPnPCancelRemove$0$label_67#1:
- goto inline$BDLGetDebugLevel$374$Entry#1;
-
- inline$BDLGetDebugLevel$374$Entry#1:
- goto inline$BDLGetDebugLevel$374$start#1;
-
- inline$BDLGetDebugLevel$374$start#1:
- goto inline$BDLGetDebugLevel$374$label_3#1;
-
- inline$BDLGetDebugLevel$374$label_3#1:
- havoc inline$BDLGetDebugLevel$374$myNondetVar_0;
- inline$BDLGetDebugLevel$374$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$374$myNondetVar_0;
- goto inline$BDLGetDebugLevel$374$label_1#1;
-
- inline$BDLGetDebugLevel$374$label_1#1:
- goto inline$BDLGetDebugLevel$374$Return#1;
-
- inline$BDLGetDebugLevel$374$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$ := inline$BDLGetDebugLevel$374$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_67$1#1;
-
- inline$BDLPnPCancelRemove$0$label_67$1#1:
- goto inline$BDLPnPCancelRemove$0$anon37_Then#1, inline$BDLPnPCancelRemove$0$anon37_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon19#1;
-
- inline$BDLPnPCancelRemove$0$anon19#1:
- goto inline$BDLPnPCancelRemove$0$label_76#1;
-
- inline$BDLPnPCancelRemove$0$label_76#1:
- goto inline$BDLPnPCancelRemove$0$label_76_true#1, inline$BDLPnPCancelRemove$0$label_76_false#1;
-
- inline$BDLPnPCancelRemove$0$label_76_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$) == 0;
- goto inline$BDLPnPCancelRemove$0$label_77#1;
-
- inline$BDLPnPCancelRemove$0$label_76_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$) != 0;
- goto inline$BDLPnPCancelRemove$0$label_80#1;
-
- inline$BDLPnPCancelRemove$0$label_80#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_81#1;
-
- inline$BDLPnPCancelRemove$0$label_81#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_82#1;
-
- inline$BDLPnPCancelRemove$0$label_82#1:
- call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPCancelRemove$0$label_83#1;
-
- inline$BDLPnPCancelRemove$0$label_83#1:
- havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$43$;
- goto inline$BDLPnPCancelRemove$0$label_77#1;
-
- inline$BDLPnPCancelRemove$0$label_77#1:
- goto inline$BDLGetDebugLevel$375$Entry#1;
-
- inline$BDLGetDebugLevel$375$Entry#1:
- goto inline$BDLGetDebugLevel$375$start#1;
-
- inline$BDLGetDebugLevel$375$start#1:
- goto inline$BDLGetDebugLevel$375$label_3#1;
-
- inline$BDLGetDebugLevel$375$label_3#1:
- havoc inline$BDLGetDebugLevel$375$myNondetVar_0;
- inline$BDLGetDebugLevel$375$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$375$myNondetVar_0;
- goto inline$BDLGetDebugLevel$375$label_1#1;
-
- inline$BDLGetDebugLevel$375$label_1#1:
- goto inline$BDLGetDebugLevel$375$Return#1;
-
- inline$BDLGetDebugLevel$375$Return#1:
- inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$ := inline$BDLGetDebugLevel$375$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPCancelRemove$0$label_77$1#1;
-
- inline$BDLPnPCancelRemove$0$label_77$1#1:
- goto inline$BDLPnPCancelRemove$0$anon38_Then#1, inline$BDLPnPCancelRemove$0$anon38_Else#1;
-
- inline$BDLPnPCancelRemove$0$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLPnPCancelRemove$0$anon21#1;
-
- inline$BDLPnPCancelRemove$0$anon21#1:
- goto inline$BDLPnPCancelRemove$0$label_86#1;
-
- inline$BDLPnPCancelRemove$0$label_86#1:
- goto inline$BDLPnPCancelRemove$0$label_86_true#1, inline$BDLPnPCancelRemove$0$label_86_false#1;
-
- inline$BDLPnPCancelRemove$0$label_86_false#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$, 4) == 0;
- goto inline$BDLPnPCancelRemove$0$label_87#1;
-
- inline$BDLPnPCancelRemove$0$label_86_true#1:
- assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$, 4) != 0;
- goto inline$BDLPnPCancelRemove$0$label_88#1;
-
- inline$BDLPnPCancelRemove$0$label_88#1:
- goto inline$BDLPnPCancelRemove$0$label_87#1;
-
- inline$BDLPnPCancelRemove$0$label_87#1:
- inline$BDLPnPCancelRemove$0$$result.BDLPnPCancelRemove$2314.0$1$ := inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12;
- goto inline$BDLPnPCancelRemove$0$label_1#1;
-
- inline$BDLPnPCancelRemove$0$label_1#1:
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon38_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon37_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon36_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon35_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon34_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon33_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon29_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$anon28_Then#1:
- assume raiseException;
- goto inline$BDLPnPCancelRemove$0$Return#1;
-
- inline$BDLPnPCancelRemove$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPCancelRemove$952.35$33$ := inline$BDLPnPCancelRemove$0$$result.BDLPnPCancelRemove$2314.0$1$;
- goto inline$BDLPnP$0$label_122$1#1;
-
- inline$BDLPnP$0$label_122$1#1:
- goto inline$BDLPnP$0$anon70_Then#1, inline$BDLPnP$0$anon70_Else#1;
-
- inline$BDLPnP$0$anon70_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon33#1;
-
- inline$BDLPnP$0$anon33#1:
- goto inline$BDLPnP$0$label_151#1;
-
- inline$BDLPnP$0$label_151#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPCancelRemove$952.35$33$;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon70_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_3#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 2;
- goto inline$BDLPnP$0$label_119#1;
-
- inline$BDLPnP$0$label_119#1:
- goto inline$BDLPnPRemove$0$Entry#1;
-
- inline$BDLPnPRemove$0$Entry#1:
- inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8;
- inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8;
- inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPRemove$0$start#1;
-
- inline$BDLPnPRemove$0$start#1:
- inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16_.1;
- inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16_.1;
- inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16_.1;
- inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16_.1;
- goto inline$BDLPnPRemove$0$label_3#1;
-
- inline$BDLPnPRemove$0$label_3#1:
- goto inline$BDLPnPRemove$0$label_4#1;
-
- inline$BDLPnPRemove$0$label_4#1:
- inline$BDLPnPRemove$0$$status$5$2484.16$BDLPnPRemove$16 := 0;
- goto inline$BDLPnPRemove$0$label_5#1;
-
- inline$BDLPnPRemove$0$label_5#1:
- goto inline$BDLGetDebugLevel$202$Entry#1;
-
- inline$BDLGetDebugLevel$202$Entry#1:
- goto inline$BDLGetDebugLevel$202$start#1;
-
- inline$BDLGetDebugLevel$202$start#1:
- goto inline$BDLGetDebugLevel$202$label_3#1;
-
- inline$BDLGetDebugLevel$202$label_3#1:
- havoc inline$BDLGetDebugLevel$202$myNondetVar_0;
- inline$BDLGetDebugLevel$202$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$202$myNondetVar_0;
- goto inline$BDLGetDebugLevel$202$label_1#1;
-
- inline$BDLGetDebugLevel$202$label_1#1:
- goto inline$BDLGetDebugLevel$202$Return#1;
-
- inline$BDLGetDebugLevel$202$Return#1:
- inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$ := inline$BDLGetDebugLevel$202$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPRemove$0$label_5$1#1;
-
- inline$BDLPnPRemove$0$label_5$1#1:
- goto inline$BDLPnPRemove$0$anon24_Then#1, inline$BDLPnPRemove$0$anon24_Else#1;
-
- inline$BDLPnPRemove$0$anon24_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon1#1;
-
- inline$BDLPnPRemove$0$anon1#1:
- goto inline$BDLPnPRemove$0$label_8#1;
-
- inline$BDLPnPRemove$0$label_8#1:
- goto inline$BDLPnPRemove$0$label_8_true#1, inline$BDLPnPRemove$0$label_8_false#1;
-
- inline$BDLPnPRemove$0$label_8_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$) == 0;
- goto inline$BDLPnPRemove$0$label_9#1;
-
- inline$BDLPnPRemove$0$label_8_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$) != 0;
- goto inline$BDLPnPRemove$0$label_12#1;
-
- inline$BDLPnPRemove$0$label_12#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_13#1;
-
- inline$BDLPnPRemove$0$label_13#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_14#1;
-
- inline$BDLPnPRemove$0$label_14#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_15#1;
-
- inline$BDLPnPRemove$0$label_15#1:
- havoc inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$3$;
- goto inline$BDLPnPRemove$0$label_9#1;
-
- inline$BDLPnPRemove$0$label_9#1:
- goto inline$BDLGetDebugLevel$203$Entry#1;
-
- inline$BDLGetDebugLevel$203$Entry#1:
- goto inline$BDLGetDebugLevel$203$start#1;
-
- inline$BDLGetDebugLevel$203$start#1:
- goto inline$BDLGetDebugLevel$203$label_3#1;
-
- inline$BDLGetDebugLevel$203$label_3#1:
- havoc inline$BDLGetDebugLevel$203$myNondetVar_0;
- inline$BDLGetDebugLevel$203$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$203$myNondetVar_0;
- goto inline$BDLGetDebugLevel$203$label_1#1;
-
- inline$BDLGetDebugLevel$203$label_1#1:
- goto inline$BDLGetDebugLevel$203$Return#1;
-
- inline$BDLGetDebugLevel$203$Return#1:
- inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$ := inline$BDLGetDebugLevel$203$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPRemove$0$label_9$1#1;
-
- inline$BDLPnPRemove$0$label_9$1#1:
- goto inline$BDLPnPRemove$0$anon25_Then#1, inline$BDLPnPRemove$0$anon25_Else#1;
-
- inline$BDLPnPRemove$0$anon25_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon3#1;
-
- inline$BDLPnPRemove$0$anon3#1:
- goto inline$BDLPnPRemove$0$label_18#1;
-
- inline$BDLPnPRemove$0$label_18#1:
- goto inline$BDLPnPRemove$0$label_18_true#1, inline$BDLPnPRemove$0$label_18_false#1;
-
- inline$BDLPnPRemove$0$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$) == 0;
- goto inline$BDLPnPRemove$0$label_19#1;
-
- inline$BDLPnPRemove$0$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$) != 0;
- goto inline$BDLPnPRemove$0$label_22#1;
-
- inline$BDLPnPRemove$0$label_22#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_23#1;
-
- inline$BDLPnPRemove$0$label_23#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_24#1;
-
- inline$BDLPnPRemove$0$label_24#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_25#1;
-
- inline$BDLPnPRemove$0$label_25#1:
- havoc inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$8$;
- goto inline$BDLPnPRemove$0$label_19#1;
-
- inline$BDLPnPRemove$0$label_19#1:
- goto inline$BDLGetDebugLevel$204$Entry#1;
-
- inline$BDLGetDebugLevel$204$Entry#1:
- goto inline$BDLGetDebugLevel$204$start#1;
-
- inline$BDLGetDebugLevel$204$start#1:
- goto inline$BDLGetDebugLevel$204$label_3#1;
-
- inline$BDLGetDebugLevel$204$label_3#1:
- havoc inline$BDLGetDebugLevel$204$myNondetVar_0;
- inline$BDLGetDebugLevel$204$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$204$myNondetVar_0;
- goto inline$BDLGetDebugLevel$204$label_1#1;
-
- inline$BDLGetDebugLevel$204$label_1#1:
- goto inline$BDLGetDebugLevel$204$Return#1;
-
- inline$BDLGetDebugLevel$204$Return#1:
- inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$ := inline$BDLGetDebugLevel$204$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPRemove$0$label_19$1#1;
-
- inline$BDLPnPRemove$0$label_19$1#1:
- goto inline$BDLPnPRemove$0$anon26_Then#1, inline$BDLPnPRemove$0$anon26_Else#1;
-
- inline$BDLPnPRemove$0$anon26_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon5#1;
-
- inline$BDLPnPRemove$0$anon5#1:
- goto inline$BDLPnPRemove$0$label_28#1;
-
- inline$BDLPnPRemove$0$label_28#1:
- goto inline$BDLPnPRemove$0$label_28_true#1, inline$BDLPnPRemove$0$label_28_false#1;
-
- inline$BDLPnPRemove$0$label_28_false#1:
- assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$, 4) == 0;
- goto inline$BDLPnPRemove$0$label_29#1;
-
- inline$BDLPnPRemove$0$label_28_true#1:
- assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$, 4) != 0;
- goto inline$BDLPnPRemove$0$label_30#1;
-
- inline$BDLPnPRemove$0$label_30#1:
- goto inline$BDLPnPRemove$0$label_29#1;
-
- inline$BDLPnPRemove$0$label_29#1:
- goto inline$BDLPnPRemove$0$label_29_true#1, inline$BDLPnPRemove$0$label_29_false#1;
-
- inline$BDLPnPRemove$0$label_29_false#1:
- havoc inline$BDLPnPRemove$0$myNondetVar_0;
- assume inline$BDLPnPRemove$0$myNondetVar_0 == 0;
- goto inline$BDLPnPRemove$0$label_31#1;
-
- inline$BDLPnPRemove$0$label_31#1:
- goto inline$BDLPnPRemove$0$label_73#1;
-
- inline$BDLPnPRemove$0$label_73#1:
- goto inline$BDLHandleRemove$0$Entry#1;
-
- inline$BDLHandleRemove$0$Entry#1:
- inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1 := inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16;
- inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12_.1 := inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16;
- goto inline$BDLHandleRemove$0$start#1;
-
- inline$BDLHandleRemove$0$start#1:
- inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1;
- inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12_.1;
- goto inline$BDLHandleRemove$0$label_3#1;
-
- inline$BDLHandleRemove$0$label_3#1:
- goto inline$BDLHandleRemove$0$label_4#1;
-
- inline$BDLHandleRemove$0$label_4#1:
- inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := 0;
- goto inline$BDLHandleRemove$0$label_5#1;
-
- inline$BDLHandleRemove$0$label_5#1:
- goto inline$BDLHandleRemove$0$label_6#1;
-
- inline$BDLHandleRemove$0$label_6#1:
- havoc inline$BDLHandleRemove$0$myNondetVar_0;
- goto inline$BDLHandleRemove$0$label_7#1;
-
- inline$BDLHandleRemove$0$label_7#1:
- goto inline$BDLGetDebugLevel$208$Entry#1;
-
- inline$BDLGetDebugLevel$208$Entry#1:
- goto inline$BDLGetDebugLevel$208$start#1;
-
- inline$BDLGetDebugLevel$208$start#1:
- goto inline$BDLGetDebugLevel$208$label_3#1;
-
- inline$BDLGetDebugLevel$208$label_3#1:
- havoc inline$BDLGetDebugLevel$208$myNondetVar_0;
- inline$BDLGetDebugLevel$208$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$208$myNondetVar_0;
- goto inline$BDLGetDebugLevel$208$label_1#1;
-
- inline$BDLGetDebugLevel$208$label_1#1:
- goto inline$BDLGetDebugLevel$208$Return#1;
-
- inline$BDLGetDebugLevel$208$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$ := inline$BDLGetDebugLevel$208$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_7$1#1;
-
- inline$BDLHandleRemove$0$label_7$1#1:
- goto inline$BDLHandleRemove$0$anon42_Then#1, inline$BDLHandleRemove$0$anon42_Else#1;
-
- inline$BDLHandleRemove$0$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon1#1;
-
- inline$BDLHandleRemove$0$anon1#1:
- goto inline$BDLHandleRemove$0$label_10#1;
-
- inline$BDLHandleRemove$0$label_10#1:
- goto inline$BDLHandleRemove$0$label_10_true#1, inline$BDLHandleRemove$0$label_10_false#1;
-
- inline$BDLHandleRemove$0$label_10_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$) == 0;
- goto inline$BDLHandleRemove$0$label_11#1;
-
- inline$BDLHandleRemove$0$label_10_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$) != 0;
- goto inline$BDLHandleRemove$0$label_14#1;
-
- inline$BDLHandleRemove$0$label_14#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_15#1;
-
- inline$BDLHandleRemove$0$label_15#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_16#1;
-
- inline$BDLHandleRemove$0$label_16#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_17#1;
-
- inline$BDLHandleRemove$0$label_17#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$3$;
- goto inline$BDLHandleRemove$0$label_11#1;
-
- inline$BDLHandleRemove$0$label_11#1:
- goto inline$BDLGetDebugLevel$209$Entry#1;
-
- inline$BDLGetDebugLevel$209$Entry#1:
- goto inline$BDLGetDebugLevel$209$start#1;
-
- inline$BDLGetDebugLevel$209$start#1:
- goto inline$BDLGetDebugLevel$209$label_3#1;
-
- inline$BDLGetDebugLevel$209$label_3#1:
- havoc inline$BDLGetDebugLevel$209$myNondetVar_0;
- inline$BDLGetDebugLevel$209$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$209$myNondetVar_0;
- goto inline$BDLGetDebugLevel$209$label_1#1;
-
- inline$BDLGetDebugLevel$209$label_1#1:
- goto inline$BDLGetDebugLevel$209$Return#1;
-
- inline$BDLGetDebugLevel$209$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$ := inline$BDLGetDebugLevel$209$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_11$1#1;
-
- inline$BDLHandleRemove$0$label_11$1#1:
- goto inline$BDLHandleRemove$0$anon43_Then#1, inline$BDLHandleRemove$0$anon43_Else#1;
-
- inline$BDLHandleRemove$0$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon3#1;
-
- inline$BDLHandleRemove$0$anon3#1:
- goto inline$BDLHandleRemove$0$label_20#1;
-
- inline$BDLHandleRemove$0$label_20#1:
- goto inline$BDLHandleRemove$0$label_20_true#1, inline$BDLHandleRemove$0$label_20_false#1;
-
- inline$BDLHandleRemove$0$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$) == 0;
- goto inline$BDLHandleRemove$0$label_21#1;
-
- inline$BDLHandleRemove$0$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$) != 0;
- goto inline$BDLHandleRemove$0$label_24#1;
-
- inline$BDLHandleRemove$0$label_24#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_25#1;
-
- inline$BDLHandleRemove$0$label_25#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_26#1;
-
- inline$BDLHandleRemove$0$label_26#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_27#1;
-
- inline$BDLHandleRemove$0$label_27#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$8$;
- goto inline$BDLHandleRemove$0$label_21#1;
-
- inline$BDLHandleRemove$0$label_21#1:
- goto inline$BDLGetDebugLevel$210$Entry#1;
-
- inline$BDLGetDebugLevel$210$Entry#1:
- goto inline$BDLGetDebugLevel$210$start#1;
-
- inline$BDLGetDebugLevel$210$start#1:
- goto inline$BDLGetDebugLevel$210$label_3#1;
-
- inline$BDLGetDebugLevel$210$label_3#1:
- havoc inline$BDLGetDebugLevel$210$myNondetVar_0;
- inline$BDLGetDebugLevel$210$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$210$myNondetVar_0;
- goto inline$BDLGetDebugLevel$210$label_1#1;
-
- inline$BDLGetDebugLevel$210$label_1#1:
- goto inline$BDLGetDebugLevel$210$Return#1;
-
- inline$BDLGetDebugLevel$210$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$ := inline$BDLGetDebugLevel$210$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_21$1#1;
-
- inline$BDLHandleRemove$0$label_21$1#1:
- goto inline$BDLHandleRemove$0$anon44_Then#1, inline$BDLHandleRemove$0$anon44_Else#1;
-
- inline$BDLHandleRemove$0$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon5#1;
-
- inline$BDLHandleRemove$0$anon5#1:
- goto inline$BDLHandleRemove$0$label_30#1;
-
- inline$BDLHandleRemove$0$label_30#1:
- goto inline$BDLHandleRemove$0$label_30_true#1, inline$BDLHandleRemove$0$label_30_false#1;
-
- inline$BDLHandleRemove$0$label_30_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$, 4) == 0;
- goto inline$BDLHandleRemove$0$label_31#1;
-
- inline$BDLHandleRemove$0$label_30_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$, 4) != 0;
- goto inline$BDLHandleRemove$0$label_34#1;
-
- inline$BDLHandleRemove$0$label_34#1:
- goto inline$BDLHandleRemove$0$label_31#1;
-
- inline$BDLHandleRemove$0$label_31#1:
- goto inline$storm_KeSetEvent$9$Entry#1;
-
- inline$storm_KeSetEvent$9$Entry#1:
- inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12);
- goto inline$storm_KeSetEvent$9$start#1;
-
- inline$storm_KeSetEvent$9$start#1:
- inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$9$label_3#1;
-
- inline$storm_KeSetEvent$9$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$9$label_1#1;
-
- inline$storm_KeSetEvent$9$label_1#1:
- goto inline$storm_KeSetEvent$9$Return#1;
-
- inline$storm_KeSetEvent$9$Return#1:
- goto inline$BDLHandleRemove$0$label_31$1#1;
-
- inline$BDLHandleRemove$0$label_31$1#1:
- goto inline$BDLHandleRemove$0$anon45_Then#1, inline$BDLHandleRemove$0$anon45_Else#1;
-
- inline$BDLHandleRemove$0$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon7#1;
-
- inline$BDLHandleRemove$0$anon7#1:
- goto inline$BDLHandleRemove$0$label_35#1;
-
- inline$BDLHandleRemove$0$label_35#1:
- call inline$BDLHandleRemove$0$$result.IoSetDeviceInterfaceState$2406.29$14$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12), 0);
- goto inline$BDLHandleRemove$0$anon46_Then#1, inline$BDLHandleRemove$0$anon46_Else#1;
-
- inline$BDLHandleRemove$0$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon9#1;
-
- inline$BDLHandleRemove$0$anon9#1:
- goto inline$BDLHandleRemove$0$label_38#1;
-
- inline$BDLHandleRemove$0$label_38#1:
- goto inline$BDLCleanupNotificationStruct$0$Entry#1;
-
- inline$BDLCleanupNotificationStruct$0$Entry#1:
- inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1 := inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
- goto inline$BDLCleanupNotificationStruct$0$start#1;
-
- inline$BDLCleanupNotificationStruct$0$start#1:
- call inline$BDLCleanupNotificationStruct$0$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(20);
- call inline$BDLCleanupNotificationStruct$0$$irql$3$3113.45$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(1);
- inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1;
- goto inline$BDLCleanupNotificationStruct$0$label_3#1;
-
- inline$BDLCleanupNotificationStruct$0$label_3#1:
- goto inline$BDLCleanupNotificationStruct$0$label_4#1;
-
- inline$BDLCleanupNotificationStruct$0$label_4#1:
- goto inline$BDLCleanupNotificationStruct$0$label_5#1;
-
- inline$BDLCleanupNotificationStruct$0$label_5#1:
- goto inline$BDLCleanupNotificationStruct$0$label_6#1;
-
- inline$BDLCleanupNotificationStruct$0$label_6#1:
- goto inline$BDLCleanupNotificationStruct$0$label_7#1;
-
- inline$BDLCleanupNotificationStruct$0$label_7#1:
- goto inline$BDLCleanupNotificationStruct$0$label_8#1;
-
- inline$BDLCleanupNotificationStruct$0$label_8#1:
- goto inline$BDLCleanupNotificationStruct$0$label_9#1;
-
- inline$BDLCleanupNotificationStruct$0$label_9#1:
- goto inline$BDLCleanupNotificationStruct$0$label_10#1;
-
- inline$BDLCleanupNotificationStruct$0$label_10#1:
- inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$0$label_11#1;
-
- inline$BDLCleanupNotificationStruct$0$label_11#1:
- goto inline$BDLCleanupNotificationStruct$0$label_12#1;
-
- inline$BDLCleanupNotificationStruct$0$label_12#1:
- inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$0$label_13#1;
-
- inline$BDLCleanupNotificationStruct$0$label_13#1:
- goto inline$BDLCleanupNotificationStruct$0$label_14#1;
-
- inline$BDLCleanupNotificationStruct$0$label_14#1:
- inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$0$label_15#1;
-
- inline$BDLCleanupNotificationStruct$0$label_15#1:
- goto inline$BDLCleanupNotificationStruct$0$label_16#1;
-
- inline$BDLCleanupNotificationStruct$0$label_16#1:
- inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := 0;
- goto inline$BDLCleanupNotificationStruct$0$label_17#1;
-
- inline$BDLCleanupNotificationStruct$0$label_17#1:
- goto inline$BDLCleanupNotificationStruct$0$label_18#1;
-
- inline$BDLCleanupNotificationStruct$0$label_18#1:
- goto inline$BDLCleanupNotificationStruct$0$label_19#1;
-
- inline$BDLCleanupNotificationStruct$0$label_19#1:
- goto inline$BDLGetDebugLevel$211$Entry#1;
-
- inline$BDLGetDebugLevel$211$Entry#1:
- goto inline$BDLGetDebugLevel$211$start#1;
-
- inline$BDLGetDebugLevel$211$start#1:
- goto inline$BDLGetDebugLevel$211$label_3#1;
-
- inline$BDLGetDebugLevel$211$label_3#1:
- havoc inline$BDLGetDebugLevel$211$myNondetVar_0;
- inline$BDLGetDebugLevel$211$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$211$myNondetVar_0;
- goto inline$BDLGetDebugLevel$211$label_1#1;
-
- inline$BDLGetDebugLevel$211$label_1#1:
- goto inline$BDLGetDebugLevel$211$Return#1;
-
- inline$BDLGetDebugLevel$211$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$ := inline$BDLGetDebugLevel$211$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_19$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_19$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon46_Then#1, inline$BDLCleanupNotificationStruct$0$anon46_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon1#1;
-
- inline$BDLCleanupNotificationStruct$0$anon1#1:
- goto inline$BDLCleanupNotificationStruct$0$label_22#1;
-
- inline$BDLCleanupNotificationStruct$0$label_22#1:
- goto inline$BDLCleanupNotificationStruct$0$label_22_true#1, inline$BDLCleanupNotificationStruct$0$label_22_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_22_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_23#1;
-
- inline$BDLCleanupNotificationStruct$0$label_22_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_26#1;
-
- inline$BDLCleanupNotificationStruct$0$label_26#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_27#1;
-
- inline$BDLCleanupNotificationStruct$0$label_27#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_28#1;
-
- inline$BDLCleanupNotificationStruct$0$label_28#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_29#1;
-
- inline$BDLCleanupNotificationStruct$0$label_29#1:
- havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$2$;
- goto inline$BDLCleanupNotificationStruct$0$label_23#1;
-
- inline$BDLCleanupNotificationStruct$0$label_23#1:
- goto inline$BDLGetDebugLevel$212$Entry#1;
-
- inline$BDLGetDebugLevel$212$Entry#1:
- goto inline$BDLGetDebugLevel$212$start#1;
-
- inline$BDLGetDebugLevel$212$start#1:
- goto inline$BDLGetDebugLevel$212$label_3#1;
-
- inline$BDLGetDebugLevel$212$label_3#1:
- havoc inline$BDLGetDebugLevel$212$myNondetVar_0;
- inline$BDLGetDebugLevel$212$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$212$myNondetVar_0;
- goto inline$BDLGetDebugLevel$212$label_1#1;
-
- inline$BDLGetDebugLevel$212$label_1#1:
- goto inline$BDLGetDebugLevel$212$Return#1;
-
- inline$BDLGetDebugLevel$212$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$ := inline$BDLGetDebugLevel$212$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_23$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_23$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon47_Then#1, inline$BDLCleanupNotificationStruct$0$anon47_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon3#1;
-
- inline$BDLCleanupNotificationStruct$0$anon3#1:
- goto inline$BDLCleanupNotificationStruct$0$label_32#1;
-
- inline$BDLCleanupNotificationStruct$0$label_32#1:
- goto inline$BDLCleanupNotificationStruct$0$label_32_true#1, inline$BDLCleanupNotificationStruct$0$label_32_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_32_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_33#1;
-
- inline$BDLCleanupNotificationStruct$0$label_32_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_36#1;
-
- inline$BDLCleanupNotificationStruct$0$label_36#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_37#1;
-
- inline$BDLCleanupNotificationStruct$0$label_37#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_38#1;
-
- inline$BDLCleanupNotificationStruct$0$label_38#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_39#1;
-
- inline$BDLCleanupNotificationStruct$0$label_39#1:
- havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$7$;
- goto inline$BDLCleanupNotificationStruct$0$label_33#1;
-
- inline$BDLCleanupNotificationStruct$0$label_33#1:
- goto inline$BDLGetDebugLevel$213$Entry#1;
-
- inline$BDLGetDebugLevel$213$Entry#1:
- goto inline$BDLGetDebugLevel$213$start#1;
-
- inline$BDLGetDebugLevel$213$start#1:
- goto inline$BDLGetDebugLevel$213$label_3#1;
-
- inline$BDLGetDebugLevel$213$label_3#1:
- havoc inline$BDLGetDebugLevel$213$myNondetVar_0;
- inline$BDLGetDebugLevel$213$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$213$myNondetVar_0;
- goto inline$BDLGetDebugLevel$213$label_1#1;
-
- inline$BDLGetDebugLevel$213$label_1#1:
- goto inline$BDLGetDebugLevel$213$Return#1;
-
- inline$BDLGetDebugLevel$213$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$ := inline$BDLGetDebugLevel$213$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_33$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_33$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon48_Then#1, inline$BDLCleanupNotificationStruct$0$anon48_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon5#1;
-
- inline$BDLCleanupNotificationStruct$0$anon5#1:
- goto inline$BDLCleanupNotificationStruct$0$label_42#1;
-
- inline$BDLCleanupNotificationStruct$0$label_42#1:
- goto inline$BDLCleanupNotificationStruct$0$label_42_true#1, inline$BDLCleanupNotificationStruct$0$label_42_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_42_false#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$, 4) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_43#1;
-
- inline$BDLCleanupNotificationStruct$0$label_42_true#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$, 4) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_44#1;
-
- inline$BDLCleanupNotificationStruct$0$label_44#1:
- goto inline$BDLCleanupNotificationStruct$0$label_43#1;
-
- inline$BDLCleanupNotificationStruct$0$label_43#1:
- goto inline$BDLCleanupNotificationStruct$0$label_45#1;
-
- inline$BDLCleanupNotificationStruct$0$label_45#1:
- goto inline$BDLCleanupNotificationStruct$0$label_45_head#1;
-
- inline$BDLCleanupNotificationStruct$0$label_45_head#1:
- goto inline$BDLCleanupNotificationStruct$0$label_45_true#1, inline$BDLCleanupNotificationStruct$0$label_45_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_45_false#1:
- assume 1 == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_46#1;
-
- inline$BDLCleanupNotificationStruct$0$label_45_true#1:
- assume 1 != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_49#1;
-
- inline$BDLCleanupNotificationStruct$0$label_49#1:
- call inline$BDLCleanupNotificationStruct$0$$result.KfRaiseIrql$3141.8$12$ := KfRaiseIrql(2);
- goto inline$BDLCleanupNotificationStruct$0$anon50_Then#1, inline$BDLCleanupNotificationStruct$0$anon50_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon9#1;
-
- inline$BDLCleanupNotificationStruct$0$anon9#1:
- goto inline$BDLCleanupNotificationStruct$0$label_52#1;
-
- inline$BDLCleanupNotificationStruct$0$label_52#1:
- inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$result.KfRaiseIrql$3141.8$12$;
- goto inline$BDLCleanupNotificationStruct$0$label_53#1;
-
- inline$BDLCleanupNotificationStruct$0$label_53#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
- assume inline$BDLCleanupNotificationStruct$0$myNondetVar_0 == inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$0$Entry#1;
-
- inline$storm_KeAcquireSpinLock$0$Entry#1:
- inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$storm_KeAcquireSpinLock$0$start#1;
-
- inline$storm_KeAcquireSpinLock$0$start#1:
- inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
- goto inline$storm_KeAcquireSpinLock$0$label_3#1;
-
- inline$storm_KeAcquireSpinLock$0$label_3#1:
- goto inline$storm_KeAcquireSpinLock$0$label_4#1;
-
- inline$storm_KeAcquireSpinLock$0$label_4#1:
- goto inline$storm_getThreadID$0$Entry#1;
-
- inline$storm_getThreadID$0$Entry#1:
- goto inline$storm_getThreadID$0$anon0#1;
-
- inline$storm_getThreadID$0$anon0#1:
- inline$storm_getThreadID$0$tid := __storm_thread_id;
- goto inline$storm_getThreadID$0$Return#1;
-
- inline$storm_getThreadID$0$Return#1:
- inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$0$tid;
- goto inline$storm_KeAcquireSpinLock$0$label_4$1#1;
-
- inline$storm_KeAcquireSpinLock$0$label_4$1#1:
- goto inline$storm_KeAcquireSpinLock$0$label_7#1;
-
- inline$storm_KeAcquireSpinLock$0$label_7#1:
- inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$0$label_8#1;
-
- inline$storm_KeAcquireSpinLock$0$label_8#1:
- goto inline$storm_KeAcquireSpinLock$0$label_9#1;
-
- inline$storm_KeAcquireSpinLock$0$label_9#1:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$0$label_12#1;
-
- inline$storm_KeAcquireSpinLock$0$label_12#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon7_Then#1, inline$storm_KeAcquireSpinLock$0$anon7_Else#1;
-
- inline$storm_KeAcquireSpinLock$0$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon1#1;
-
- inline$storm_KeAcquireSpinLock$0$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_13#1;
-
- inline$storm_KeAcquireSpinLock$0$label_13#1:
- goto inline$storm_KeAcquireSpinLock$0$label_13_true#1, inline$storm_KeAcquireSpinLock$0$label_13_false#1;
-
- inline$storm_KeAcquireSpinLock$0$label_13_false#1:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$0$label_14#1;
-
- inline$storm_KeAcquireSpinLock$0$label_14#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$0$label_1#1;
-
- inline$storm_KeAcquireSpinLock$0$label_13_true#1:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$0$label_17#1;
-
- inline$storm_KeAcquireSpinLock$0$label_17#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon8_Then#1, inline$storm_KeAcquireSpinLock$0$anon8_Else#1;
-
- inline$storm_KeAcquireSpinLock$0$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$0$anon4#1;
-
- inline$storm_KeAcquireSpinLock$0$anon4#1:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
- goto inline$storm_KeAcquireSpinLock$0$label_18#1;
-
- inline$storm_KeAcquireSpinLock$0$label_18#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8];
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_19#1;
-
- inline$storm_KeAcquireSpinLock$0$label_19#1:
- goto inline$storm_KeAcquireSpinLock$0$anon9_Then#1, inline$storm_KeAcquireSpinLock$0$anon9_Else#1;
-
- inline$storm_KeAcquireSpinLock$0$anon9_Else#1:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$0$anon6#1;
-
- inline$storm_KeAcquireSpinLock$0$anon9_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$0$anon6#1;
-
- inline$storm_KeAcquireSpinLock$0$anon6#1:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$0$label_1#1;
-
- inline$storm_KeAcquireSpinLock$0$label_1#1:
- goto inline$storm_KeAcquireSpinLock$0$Return#1;
-
- inline$storm_KeAcquireSpinLock$0$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$0$Return#1;
-
- inline$storm_KeAcquireSpinLock$0$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$0$Return#1;
-
- inline$storm_KeAcquireSpinLock$0$Return#1:
- goto inline$BDLCleanupNotificationStruct$0$label_53$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_53$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon51_Then#1, inline$BDLCleanupNotificationStruct$0$anon51_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon11#1;
-
- inline$BDLCleanupNotificationStruct$0$anon11#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$0$label_56#1;
-
- inline$BDLCleanupNotificationStruct$0$label_56#1:
- goto inline$IsListEmpty$1$Entry#1;
-
- inline$IsListEmpty$1$Entry#1:
- inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4_.1 := ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$IsListEmpty$1$start#1;
-
- inline$IsListEmpty$1$start#1:
- inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4_.1;
- goto inline$IsListEmpty$1$label_3#1;
-
- inline$IsListEmpty$1$label_3#1:
- havoc inline$IsListEmpty$1$myNondetVar_0;
- inline$IsListEmpty$1$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$1$myNondetVar_0, inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4));
- goto inline$IsListEmpty$1$label_1#1;
-
- inline$IsListEmpty$1$label_1#1:
- goto inline$IsListEmpty$1$Return#1;
-
- inline$IsListEmpty$1$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$ := inline$IsListEmpty$1$$result.IsListEmpty$8096.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_56$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_56$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon52_Then#1, inline$BDLCleanupNotificationStruct$0$anon52_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon13#1;
-
- inline$BDLCleanupNotificationStruct$0$anon13#1:
- goto inline$BDLCleanupNotificationStruct$0$label_59#1;
-
- inline$BDLCleanupNotificationStruct$0$label_59#1:
- goto inline$BDLCleanupNotificationStruct$0$label_59_true#1, inline$BDLCleanupNotificationStruct$0$label_59_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_59_false#1:
- assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$ == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_60#1;
-
- inline$BDLCleanupNotificationStruct$0$label_60#1:
- goto inline$RemoveHeadList$0$Entry#1;
-
- inline$RemoveHeadList$0$Entry#1:
- goto inline$RemoveHeadList$0$start#1;
-
- inline$RemoveHeadList$0$start#1:
- goto inline$RemoveHeadList$0$label_3#1;
-
- inline$RemoveHeadList$0$label_3#1:
- goto inline$RemoveHeadList$0$label_4#1;
-
- inline$RemoveHeadList$0$label_4#1:
- goto inline$RemoveHeadList$0$label_5#1;
-
- inline$RemoveHeadList$0$label_5#1:
- havoc inline$RemoveHeadList$0$myNondetVar_0;
- inline$RemoveHeadList$0$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$0$myNondetVar_0;
- goto inline$RemoveHeadList$0$label_6#1;
-
- inline$RemoveHeadList$0$label_6#1:
- havoc inline$RemoveHeadList$0$myNondetVar_0;
- goto inline$RemoveHeadList$0$label_7#1;
-
- inline$RemoveHeadList$0$label_7#1:
- goto inline$RemoveHeadList$0$label_8#1;
-
- inline$RemoveHeadList$0$label_8#1:
- goto inline$RemoveHeadList$0$label_9#1;
-
- inline$RemoveHeadList$0$label_9#1:
- inline$RemoveHeadList$0$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$0$$Entry$3$8126.16$RemoveHeadList$4;
- goto inline$RemoveHeadList$0$label_1#1;
-
- inline$RemoveHeadList$0$label_1#1:
- goto inline$RemoveHeadList$0$Return#1;
-
- inline$RemoveHeadList$0$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3153.26$14$ := inline$RemoveHeadList$0$$result.RemoveHeadList$8121.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_60$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_60$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon53_Then#1, inline$BDLCleanupNotificationStruct$0$anon53_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon15#1;
-
- inline$BDLCleanupNotificationStruct$0$anon15#1:
- goto inline$BDLCleanupNotificationStruct$0$label_63#1;
-
- inline$BDLCleanupNotificationStruct$0$label_63#1:
- inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3153.26$14$;
- goto inline$BDLCleanupNotificationStruct$0$label_64#1;
-
- inline$BDLCleanupNotificationStruct$0$label_64#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
- assume inline$BDLCleanupNotificationStruct$0$myNondetVar_0 == inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$0$Entry#1;
-
- inline$storm_KeReleaseSpinLock$0$Entry#1:
- inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$storm_KeReleaseSpinLock$0$start#1;
-
- inline$storm_KeReleaseSpinLock$0$start#1:
- inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$0$label_3#1;
-
- inline$storm_KeReleaseSpinLock$0$label_3#1:
- goto inline$storm_KeReleaseSpinLock$0$label_4#1;
-
- inline$storm_KeReleaseSpinLock$0$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$0$label_7#1;
-
- inline$storm_KeReleaseSpinLock$0$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$0$anon5_Then#1, inline$storm_KeReleaseSpinLock$0$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$0$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$0$anon1#1;
-
- inline$storm_KeReleaseSpinLock$0$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_8#1;
-
- inline$storm_KeReleaseSpinLock$0$label_8#1:
- goto inline$storm_getThreadID$1$Entry#1;
-
- inline$storm_getThreadID$1$Entry#1:
- goto inline$storm_getThreadID$1$anon0#1;
-
- inline$storm_getThreadID$1$anon0#1:
- inline$storm_getThreadID$1$tid := __storm_thread_id;
- goto inline$storm_getThreadID$1$Return#1;
-
- inline$storm_getThreadID$1$Return#1:
- inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$1$tid;
- goto inline$storm_KeReleaseSpinLock$0$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$0$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$0$label_11#1;
-
- inline$storm_KeReleaseSpinLock$0$label_11#1:
- goto inline$storm_KeReleaseSpinLock$0$label_11_true#1, inline$storm_KeReleaseSpinLock$0$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$0$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$0$label_12#1;
-
- inline$storm_KeReleaseSpinLock$0$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$0$label_1#1;
-
- inline$storm_KeReleaseSpinLock$0$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$0$label_15#1;
-
- inline$storm_KeReleaseSpinLock$0$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_16#1;
-
- inline$storm_KeReleaseSpinLock$0$label_16#1:
- goto inline$storm_KeReleaseSpinLock$0$anon6_Then#1, inline$storm_KeReleaseSpinLock$0$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$0$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$0$anon4#1;
-
- inline$storm_KeReleaseSpinLock$0$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$0$anon4#1;
-
- inline$storm_KeReleaseSpinLock$0$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$0$label_1#1;
-
- inline$storm_KeReleaseSpinLock$0$label_1#1:
- goto inline$storm_KeReleaseSpinLock$0$Return#1;
-
- inline$storm_KeReleaseSpinLock$0$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$0$Return#1;
-
- inline$storm_KeReleaseSpinLock$0$Return#1:
- goto inline$BDLCleanupNotificationStruct$0$label_64$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_64$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon54_Then#1, inline$BDLCleanupNotificationStruct$0$anon54_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon54_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon17#1;
-
- inline$BDLCleanupNotificationStruct$0$anon17#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$0$label_67#1;
-
- inline$BDLCleanupNotificationStruct$0$label_67#1:
- call KfLowerIrql(inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
- goto inline$BDLCleanupNotificationStruct$0$anon55_Then#1, inline$BDLCleanupNotificationStruct$0$anon55_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon55_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon19#1;
-
- inline$BDLCleanupNotificationStruct$0$anon19#1:
- goto inline$BDLCleanupNotificationStruct$0$label_70#1;
-
- inline$BDLCleanupNotificationStruct$0$label_70#1:
- inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4, 1, 12);
- goto inline$BDLCleanupNotificationStruct$0$label_71#1;
-
- inline$BDLCleanupNotificationStruct$0$label_71#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$0$label_72#1;
-
- inline$BDLCleanupNotificationStruct$0$label_72#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$0$label_73#1;
-
- inline$BDLCleanupNotificationStruct$0$label_73#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$0$label_74#1;
-
- inline$BDLCleanupNotificationStruct$0$label_74#1:
- call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4, 541869122);
- goto inline$BDLCleanupNotificationStruct$0$anon56_Then#1, inline$BDLCleanupNotificationStruct$0$anon56_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon56_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon21#1;
-
- inline$BDLCleanupNotificationStruct$0$anon21#1:
- goto inline$BDLCleanupNotificationStruct$0$label_77#1;
-
- inline$BDLCleanupNotificationStruct$0$label_77#1:
- goto inline$BDLCleanupNotificationStruct$0$label_80#1;
-
- inline$BDLCleanupNotificationStruct$0$label_80#1:
- inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$callresult.$3172.84$15$;
- goto inline$BDLCleanupNotificationStruct$0$label_81#1;
-
- inline$BDLCleanupNotificationStruct$0$label_81#1:
- goto inline$BDLCleanupNotificationStruct$0$label_81_true#1, inline$BDLCleanupNotificationStruct$0$label_81_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_81_false#1:
- assume inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4 == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_45_head#0;
-
- inline$BDLCleanupNotificationStruct$0$label_81_true#1:
- assume inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4 != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_82#1;
-
- inline$BDLCleanupNotificationStruct$0$label_82#1:
- goto inline$BDLGetDebugLevel$214$Entry#1;
-
- inline$BDLGetDebugLevel$214$Entry#1:
- goto inline$BDLGetDebugLevel$214$start#1;
-
- inline$BDLGetDebugLevel$214$start#1:
- goto inline$BDLGetDebugLevel$214$label_3#1;
-
- inline$BDLGetDebugLevel$214$label_3#1:
- havoc inline$BDLGetDebugLevel$214$myNondetVar_0;
- inline$BDLGetDebugLevel$214$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$214$myNondetVar_0;
- goto inline$BDLGetDebugLevel$214$label_1#1;
-
- inline$BDLGetDebugLevel$214$label_1#1:
- goto inline$BDLGetDebugLevel$214$Return#1;
-
- inline$BDLGetDebugLevel$214$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$ := inline$BDLGetDebugLevel$214$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_82$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_82$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon57_Then#1, inline$BDLCleanupNotificationStruct$0$anon57_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon57_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon23#1;
-
- inline$BDLCleanupNotificationStruct$0$anon23#1:
- goto inline$BDLCleanupNotificationStruct$0$label_85#1;
-
- inline$BDLCleanupNotificationStruct$0$label_85#1:
- goto inline$BDLCleanupNotificationStruct$0$label_85_true#1, inline$BDLCleanupNotificationStruct$0$label_85_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_85_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_86#1;
-
- inline$BDLCleanupNotificationStruct$0$label_85_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_89#1;
-
- inline$BDLCleanupNotificationStruct$0$label_89#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_90#1;
-
- inline$BDLCleanupNotificationStruct$0$label_90#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_91#1;
-
- inline$BDLCleanupNotificationStruct$0$label_91#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_92#1;
-
- inline$BDLCleanupNotificationStruct$0$label_92#1:
- havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$17$;
- goto inline$BDLCleanupNotificationStruct$0$label_86#1;
-
- inline$BDLCleanupNotificationStruct$0$label_86#1:
- goto inline$BDLGetDebugLevel$215$Entry#1;
-
- inline$BDLGetDebugLevel$215$Entry#1:
- goto inline$BDLGetDebugLevel$215$start#1;
-
- inline$BDLGetDebugLevel$215$start#1:
- goto inline$BDLGetDebugLevel$215$label_3#1;
-
- inline$BDLGetDebugLevel$215$label_3#1:
- havoc inline$BDLGetDebugLevel$215$myNondetVar_0;
- inline$BDLGetDebugLevel$215$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$215$myNondetVar_0;
- goto inline$BDLGetDebugLevel$215$label_1#1;
-
- inline$BDLGetDebugLevel$215$label_1#1:
- goto inline$BDLGetDebugLevel$215$Return#1;
-
- inline$BDLGetDebugLevel$215$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$ := inline$BDLGetDebugLevel$215$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_86$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_86$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon58_Then#1, inline$BDLCleanupNotificationStruct$0$anon58_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon58_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon25#1;
-
- inline$BDLCleanupNotificationStruct$0$anon25#1:
- goto inline$BDLCleanupNotificationStruct$0$label_95#1;
-
- inline$BDLCleanupNotificationStruct$0$label_95#1:
- goto inline$BDLCleanupNotificationStruct$0$label_95_true#1, inline$BDLCleanupNotificationStruct$0$label_95_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_95_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_96#1;
-
- inline$BDLCleanupNotificationStruct$0$label_95_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_99#1;
-
- inline$BDLCleanupNotificationStruct$0$label_99#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_100#1;
-
- inline$BDLCleanupNotificationStruct$0$label_100#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_101#1;
-
- inline$BDLCleanupNotificationStruct$0$label_101#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_102#1;
-
- inline$BDLCleanupNotificationStruct$0$label_102#1:
- havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$22$;
- goto inline$BDLCleanupNotificationStruct$0$label_96#1;
-
- inline$BDLCleanupNotificationStruct$0$label_96#1:
- goto inline$BDLGetDebugLevel$216$Entry#1;
-
- inline$BDLGetDebugLevel$216$Entry#1:
- goto inline$BDLGetDebugLevel$216$start#1;
-
- inline$BDLGetDebugLevel$216$start#1:
- goto inline$BDLGetDebugLevel$216$label_3#1;
-
- inline$BDLGetDebugLevel$216$label_3#1:
- havoc inline$BDLGetDebugLevel$216$myNondetVar_0;
- inline$BDLGetDebugLevel$216$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$216$myNondetVar_0;
- goto inline$BDLGetDebugLevel$216$label_1#1;
-
- inline$BDLGetDebugLevel$216$label_1#1:
- goto inline$BDLGetDebugLevel$216$Return#1;
-
- inline$BDLGetDebugLevel$216$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$ := inline$BDLGetDebugLevel$216$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_96$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_96$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon59_Then#1, inline$BDLCleanupNotificationStruct$0$anon59_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon59_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon27#1;
-
- inline$BDLCleanupNotificationStruct$0$anon27#1:
- goto inline$BDLCleanupNotificationStruct$0$label_105#1;
-
- inline$BDLCleanupNotificationStruct$0$label_105#1:
- goto inline$BDLCleanupNotificationStruct$0$label_105_true#1, inline$BDLCleanupNotificationStruct$0$label_105_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_105_false#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$, 4) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_45_head#0;
-
- inline$BDLCleanupNotificationStruct$0$label_105_true#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$, 4) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_106#1;
-
- inline$BDLCleanupNotificationStruct$0$label_106#1:
- goto inline$BDLCleanupNotificationStruct$0$label_45_head#0;
-
- inline$BDLCleanupNotificationStruct$0$label_45_head#0:
- assume false;
- return;
-
- inline$BDLCleanupNotificationStruct$0$anon59_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon58_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon57_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon56_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon55_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon54_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon53_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$label_59_true#1:
- assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$ != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_46#1;
-
- inline$BDLCleanupNotificationStruct$0$label_46#1:
- goto inline$BDLCleanupNotificationStruct$0$label_46_head#1;
-
- inline$BDLCleanupNotificationStruct$0$label_46_head#1:
- goto inline$IsListEmpty$0$Entry#1;
-
- inline$IsListEmpty$0$Entry#1:
- inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4_.1 := ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$IsListEmpty$0$start#1;
-
- inline$IsListEmpty$0$start#1:
- inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4_.1;
- goto inline$IsListEmpty$0$label_3#1;
-
- inline$IsListEmpty$0$label_3#1:
- havoc inline$IsListEmpty$0$myNondetVar_0;
- inline$IsListEmpty$0$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$0$myNondetVar_0, inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4));
- goto inline$IsListEmpty$0$label_1#1;
-
- inline$IsListEmpty$0$label_1#1:
- goto inline$IsListEmpty$0$Return#1;
-
- inline$IsListEmpty$0$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$ := inline$IsListEmpty$0$$result.IsListEmpty$8096.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_46_head$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_46_head$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon49_Then#1, inline$BDLCleanupNotificationStruct$0$anon49_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon7#1;
-
- inline$BDLCleanupNotificationStruct$0$anon7#1:
- goto inline$BDLCleanupNotificationStruct$0$label_107#1;
-
- inline$BDLCleanupNotificationStruct$0$label_107#1:
- goto inline$BDLCleanupNotificationStruct$0$label_107_true#1, inline$BDLCleanupNotificationStruct$0$label_107_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_107_false#1:
- assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$ == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_108#1;
-
- inline$BDLCleanupNotificationStruct$0$label_108#1:
- goto inline$RemoveHeadList$1$Entry#1;
-
- inline$RemoveHeadList$1$Entry#1:
- goto inline$RemoveHeadList$1$start#1;
-
- inline$RemoveHeadList$1$start#1:
- goto inline$RemoveHeadList$1$label_3#1;
-
- inline$RemoveHeadList$1$label_3#1:
- goto inline$RemoveHeadList$1$label_4#1;
-
- inline$RemoveHeadList$1$label_4#1:
- goto inline$RemoveHeadList$1$label_5#1;
-
- inline$RemoveHeadList$1$label_5#1:
- havoc inline$RemoveHeadList$1$myNondetVar_0;
- goto inline$RemoveHeadList$1$label_6#1;
-
- inline$RemoveHeadList$1$label_6#1:
- havoc inline$RemoveHeadList$1$myNondetVar_0;
- goto inline$RemoveHeadList$1$label_7#1;
-
- inline$RemoveHeadList$1$label_7#1:
- goto inline$RemoveHeadList$1$label_8#1;
-
- inline$RemoveHeadList$1$label_8#1:
- goto inline$RemoveHeadList$1$label_9#1;
-
- inline$RemoveHeadList$1$label_9#1:
- goto inline$RemoveHeadList$1$label_1#1;
-
- inline$RemoveHeadList$1$label_1#1:
- goto inline$RemoveHeadList$1$Return#1;
-
- inline$RemoveHeadList$1$Return#1:
- goto inline$BDLCleanupNotificationStruct$0$label_108$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_108$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon60_Then#1, inline$BDLCleanupNotificationStruct$0$anon60_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon60_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon29#1;
-
- inline$BDLCleanupNotificationStruct$0$anon29#1:
- goto inline$BDLCleanupNotificationStruct$0$label_154#1;
-
- inline$BDLCleanupNotificationStruct$0$label_154#1:
- goto inline$BDLCleanupNotificationStruct$0$label_155#1;
-
- inline$BDLCleanupNotificationStruct$0$label_155#1:
- goto inline$BDLCleanupNotificationStruct$0$label_156#1;
-
- inline$BDLCleanupNotificationStruct$0$label_156#1:
- goto inline$BDLCleanupNotificationStruct$0$label_46_head#0;
-
- inline$BDLCleanupNotificationStruct$0$label_46_head#0:
- assume false;
- return;
-
- inline$BDLCleanupNotificationStruct$0$anon60_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$label_107_true#1:
- assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$ != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_111#1;
-
- inline$BDLCleanupNotificationStruct$0$label_111#1:
- goto inline$BDLCleanupNotificationStruct$0$label_111_head#1;
-
- inline$BDLCleanupNotificationStruct$0$label_111_head#1:
- goto inline$IsListEmpty$2$Entry#1;
-
- inline$IsListEmpty$2$Entry#1:
- inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4_.1 := IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$IsListEmpty$2$start#1;
-
- inline$IsListEmpty$2$start#1:
- inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4_.1;
- goto inline$IsListEmpty$2$label_3#1;
-
- inline$IsListEmpty$2$label_3#1:
- havoc inline$IsListEmpty$2$myNondetVar_0;
- inline$IsListEmpty$2$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$2$myNondetVar_0, inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4));
- goto inline$IsListEmpty$2$label_1#1;
-
- inline$IsListEmpty$2$label_1#1:
- goto inline$IsListEmpty$2$Return#1;
-
- inline$IsListEmpty$2$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$ := inline$IsListEmpty$2$$result.IsListEmpty$8096.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_111_head$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_111_head$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon61_Then#1, inline$BDLCleanupNotificationStruct$0$anon61_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon61_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon31#1;
-
- inline$BDLCleanupNotificationStruct$0$anon31#1:
- goto inline$BDLCleanupNotificationStruct$0$label_114#1;
-
- inline$BDLCleanupNotificationStruct$0$label_114#1:
- goto inline$BDLCleanupNotificationStruct$0$label_114_true#1, inline$BDLCleanupNotificationStruct$0$label_114_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_114_false#1:
- assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$ == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_115#1;
-
- inline$BDLCleanupNotificationStruct$0$label_115#1:
- goto inline$RemoveHeadList$2$Entry#1;
-
- inline$RemoveHeadList$2$Entry#1:
- goto inline$RemoveHeadList$2$start#1;
-
- inline$RemoveHeadList$2$start#1:
- goto inline$RemoveHeadList$2$label_3#1;
-
- inline$RemoveHeadList$2$label_3#1:
- goto inline$RemoveHeadList$2$label_4#1;
-
- inline$RemoveHeadList$2$label_4#1:
- goto inline$RemoveHeadList$2$label_5#1;
-
- inline$RemoveHeadList$2$label_5#1:
- havoc inline$RemoveHeadList$2$myNondetVar_0;
- inline$RemoveHeadList$2$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$2$myNondetVar_0;
- goto inline$RemoveHeadList$2$label_6#1;
-
- inline$RemoveHeadList$2$label_6#1:
- havoc inline$RemoveHeadList$2$myNondetVar_0;
- goto inline$RemoveHeadList$2$label_7#1;
-
- inline$RemoveHeadList$2$label_7#1:
- goto inline$RemoveHeadList$2$label_8#1;
-
- inline$RemoveHeadList$2$label_8#1:
- goto inline$RemoveHeadList$2$label_9#1;
-
- inline$RemoveHeadList$2$label_9#1:
- inline$RemoveHeadList$2$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$2$$Entry$3$8126.16$RemoveHeadList$4;
- goto inline$RemoveHeadList$2$label_1#1;
-
- inline$RemoveHeadList$2$label_1#1:
- goto inline$RemoveHeadList$2$Return#1;
-
- inline$RemoveHeadList$2$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3218.26$30$ := inline$RemoveHeadList$2$$result.RemoveHeadList$8121.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_115$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_115$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon62_Then#1, inline$BDLCleanupNotificationStruct$0$anon62_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon62_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon33#1;
-
- inline$BDLCleanupNotificationStruct$0$anon33#1:
- goto inline$BDLCleanupNotificationStruct$0$label_149#1;
-
- inline$BDLCleanupNotificationStruct$0$label_149#1:
- inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3218.26$30$;
- goto inline$BDLCleanupNotificationStruct$0$label_150#1;
-
- inline$BDLCleanupNotificationStruct$0$label_150#1:
- inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4, 1, 16);
- goto inline$BDLCleanupNotificationStruct$0$label_151#1;
-
- inline$BDLCleanupNotificationStruct$0$label_151#1:
- call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4, 541869122);
- goto inline$BDLCleanupNotificationStruct$0$anon68_Then#1, inline$BDLCleanupNotificationStruct$0$anon68_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon68_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon45#1;
-
- inline$BDLCleanupNotificationStruct$0$anon45#1:
- goto inline$BDLCleanupNotificationStruct$0$label_111_head#0;
-
- inline$BDLCleanupNotificationStruct$0$label_111_head#0:
- assume false;
- return;
-
- inline$BDLCleanupNotificationStruct$0$anon68_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon62_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$label_114_true#1:
- assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$ != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_118#1;
-
- inline$BDLCleanupNotificationStruct$0$label_118#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
- assume inline$BDLCleanupNotificationStruct$0$myNondetVar_0 == inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$storm_KeReleaseSpinLock$1$Entry#1;
-
- inline$storm_KeReleaseSpinLock$1$Entry#1:
- inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
- goto inline$storm_KeReleaseSpinLock$1$start#1;
-
- inline$storm_KeReleaseSpinLock$1$start#1:
- inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$1$label_3#1;
-
- inline$storm_KeReleaseSpinLock$1$label_3#1:
- goto inline$storm_KeReleaseSpinLock$1$label_4#1;
-
- inline$storm_KeReleaseSpinLock$1$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$1$label_7#1;
-
- inline$storm_KeReleaseSpinLock$1$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$1$anon5_Then#1, inline$storm_KeReleaseSpinLock$1$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$1$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$1$anon1#1;
-
- inline$storm_KeReleaseSpinLock$1$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_8#1;
-
- inline$storm_KeReleaseSpinLock$1$label_8#1:
- goto inline$storm_getThreadID$2$Entry#1;
-
- inline$storm_getThreadID$2$Entry#1:
- goto inline$storm_getThreadID$2$anon0#1;
-
- inline$storm_getThreadID$2$anon0#1:
- inline$storm_getThreadID$2$tid := __storm_thread_id;
- goto inline$storm_getThreadID$2$Return#1;
-
- inline$storm_getThreadID$2$Return#1:
- inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$2$tid;
- goto inline$storm_KeReleaseSpinLock$1$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$1$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$1$label_11#1;
-
- inline$storm_KeReleaseSpinLock$1$label_11#1:
- goto inline$storm_KeReleaseSpinLock$1$label_11_true#1, inline$storm_KeReleaseSpinLock$1$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$1$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$1$label_12#1;
-
- inline$storm_KeReleaseSpinLock$1$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$1$label_1#1;
-
- inline$storm_KeReleaseSpinLock$1$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$1$label_15#1;
-
- inline$storm_KeReleaseSpinLock$1$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_16#1;
-
- inline$storm_KeReleaseSpinLock$1$label_16#1:
- goto inline$storm_KeReleaseSpinLock$1$anon6_Then#1, inline$storm_KeReleaseSpinLock$1$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$1$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$1$anon4#1;
-
- inline$storm_KeReleaseSpinLock$1$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$1$anon4#1;
-
- inline$storm_KeReleaseSpinLock$1$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$1$label_1#1;
-
- inline$storm_KeReleaseSpinLock$1$label_1#1:
- goto inline$storm_KeReleaseSpinLock$1$Return#1;
-
- inline$storm_KeReleaseSpinLock$1$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$1$Return#1;
-
- inline$storm_KeReleaseSpinLock$1$Return#1:
- goto inline$BDLCleanupNotificationStruct$0$label_118$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_118$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon63_Then#1, inline$BDLCleanupNotificationStruct$0$anon63_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon63_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon35#1;
-
- inline$BDLCleanupNotificationStruct$0$anon35#1:
- havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
- goto inline$BDLCleanupNotificationStruct$0$label_121#1;
-
- inline$BDLCleanupNotificationStruct$0$label_121#1:
- call KfLowerIrql(inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
- goto inline$BDLCleanupNotificationStruct$0$anon64_Then#1, inline$BDLCleanupNotificationStruct$0$anon64_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon64_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon37#1;
-
- inline$BDLCleanupNotificationStruct$0$anon37#1:
- goto inline$BDLCleanupNotificationStruct$0$label_124#1;
-
- inline$BDLCleanupNotificationStruct$0$label_124#1:
- goto inline$BDLGetDebugLevel$217$Entry#1;
-
- inline$BDLGetDebugLevel$217$Entry#1:
- goto inline$BDLGetDebugLevel$217$start#1;
-
- inline$BDLGetDebugLevel$217$start#1:
- goto inline$BDLGetDebugLevel$217$label_3#1;
-
- inline$BDLGetDebugLevel$217$label_3#1:
- havoc inline$BDLGetDebugLevel$217$myNondetVar_0;
- inline$BDLGetDebugLevel$217$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$217$myNondetVar_0;
- goto inline$BDLGetDebugLevel$217$label_1#1;
-
- inline$BDLGetDebugLevel$217$label_1#1:
- goto inline$BDLGetDebugLevel$217$Return#1;
-
- inline$BDLGetDebugLevel$217$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$ := inline$BDLGetDebugLevel$217$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_124$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_124$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon65_Then#1, inline$BDLCleanupNotificationStruct$0$anon65_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon65_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon39#1;
-
- inline$BDLCleanupNotificationStruct$0$anon39#1:
- goto inline$BDLCleanupNotificationStruct$0$label_127#1;
-
- inline$BDLCleanupNotificationStruct$0$label_127#1:
- goto inline$BDLCleanupNotificationStruct$0$label_127_true#1, inline$BDLCleanupNotificationStruct$0$label_127_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_127_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_128#1;
-
- inline$BDLCleanupNotificationStruct$0$label_127_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_131#1;
-
- inline$BDLCleanupNotificationStruct$0$label_131#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_132#1;
-
- inline$BDLCleanupNotificationStruct$0$label_132#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_133#1;
-
- inline$BDLCleanupNotificationStruct$0$label_133#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_134#1;
-
- inline$BDLCleanupNotificationStruct$0$label_134#1:
- havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$32$;
- goto inline$BDLCleanupNotificationStruct$0$label_128#1;
-
- inline$BDLCleanupNotificationStruct$0$label_128#1:
- goto inline$BDLGetDebugLevel$218$Entry#1;
-
- inline$BDLGetDebugLevel$218$Entry#1:
- goto inline$BDLGetDebugLevel$218$start#1;
-
- inline$BDLGetDebugLevel$218$start#1:
- goto inline$BDLGetDebugLevel$218$label_3#1;
-
- inline$BDLGetDebugLevel$218$label_3#1:
- havoc inline$BDLGetDebugLevel$218$myNondetVar_0;
- inline$BDLGetDebugLevel$218$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$218$myNondetVar_0;
- goto inline$BDLGetDebugLevel$218$label_1#1;
-
- inline$BDLGetDebugLevel$218$label_1#1:
- goto inline$BDLGetDebugLevel$218$Return#1;
-
- inline$BDLGetDebugLevel$218$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$ := inline$BDLGetDebugLevel$218$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_128$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_128$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon66_Then#1, inline$BDLCleanupNotificationStruct$0$anon66_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon66_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon41#1;
-
- inline$BDLCleanupNotificationStruct$0$anon41#1:
- goto inline$BDLCleanupNotificationStruct$0$label_137#1;
-
- inline$BDLCleanupNotificationStruct$0$label_137#1:
- goto inline$BDLCleanupNotificationStruct$0$label_137_true#1, inline$BDLCleanupNotificationStruct$0$label_137_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_137_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_138#1;
-
- inline$BDLCleanupNotificationStruct$0$label_137_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_141#1;
-
- inline$BDLCleanupNotificationStruct$0$label_141#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_142#1;
-
- inline$BDLCleanupNotificationStruct$0$label_142#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_143#1;
-
- inline$BDLCleanupNotificationStruct$0$label_143#1:
- call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupNotificationStruct$0$label_144#1;
-
- inline$BDLCleanupNotificationStruct$0$label_144#1:
- havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$37$;
- goto inline$BDLCleanupNotificationStruct$0$label_138#1;
-
- inline$BDLCleanupNotificationStruct$0$label_138#1:
- goto inline$BDLGetDebugLevel$219$Entry#1;
-
- inline$BDLGetDebugLevel$219$Entry#1:
- goto inline$BDLGetDebugLevel$219$start#1;
-
- inline$BDLGetDebugLevel$219$start#1:
- goto inline$BDLGetDebugLevel$219$label_3#1;
-
- inline$BDLGetDebugLevel$219$label_3#1:
- havoc inline$BDLGetDebugLevel$219$myNondetVar_0;
- inline$BDLGetDebugLevel$219$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$219$myNondetVar_0;
- goto inline$BDLGetDebugLevel$219$label_1#1;
-
- inline$BDLGetDebugLevel$219$label_1#1:
- goto inline$BDLGetDebugLevel$219$Return#1;
-
- inline$BDLGetDebugLevel$219$Return#1:
- inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$ := inline$BDLGetDebugLevel$219$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupNotificationStruct$0$label_138$1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_138$1#1:
- goto inline$BDLCleanupNotificationStruct$0$anon67_Then#1, inline$BDLCleanupNotificationStruct$0$anon67_Else#1;
-
- inline$BDLCleanupNotificationStruct$0$anon67_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupNotificationStruct$0$anon43#1;
-
- inline$BDLCleanupNotificationStruct$0$anon43#1:
- goto inline$BDLCleanupNotificationStruct$0$label_147#1;
-
- inline$BDLCleanupNotificationStruct$0$label_147#1:
- goto inline$BDLCleanupNotificationStruct$0$label_147_true#1, inline$BDLCleanupNotificationStruct$0$label_147_false#1;
-
- inline$BDLCleanupNotificationStruct$0$label_147_false#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$, 4) == 0;
- goto inline$BDLCleanupNotificationStruct$0$label_1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_147_true#1:
- assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$, 4) != 0;
- goto inline$BDLCleanupNotificationStruct$0$label_148#1;
-
- inline$BDLCleanupNotificationStruct$0$label_148#1:
- goto inline$BDLCleanupNotificationStruct$0$label_1#1;
-
- inline$BDLCleanupNotificationStruct$0$label_1#1:
- call __HAVOC_free(inline$BDLCleanupNotificationStruct$0$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4);
- call __HAVOC_free(inline$BDLCleanupNotificationStruct$0$$irql$3$3113.45$BDLCleanupNotificationStruct$4);
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon67_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon66_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon65_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon64_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon63_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon61_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon49_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon52_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon51_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon50_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon48_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon47_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$anon46_Then#1:
- assume raiseException;
- goto inline$BDLCleanupNotificationStruct$0$Return#1;
-
- inline$BDLCleanupNotificationStruct$0$Return#1:
- goto inline$BDLHandleRemove$0$label_38$1#1;
-
- inline$BDLHandleRemove$0$label_38$1#1:
- goto inline$BDLHandleRemove$0$anon47_Then#1, inline$BDLHandleRemove$0$anon47_Else#1;
-
- inline$BDLHandleRemove$0$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon11#1;
-
- inline$BDLHandleRemove$0$anon11#1:
- goto inline$BDLHandleRemove$0$label_41#1;
-
- inline$BDLHandleRemove$0$label_41#1:
- goto inline$BDLCleanupDataHandles$0$Entry#1;
-
- inline$BDLCleanupDataHandles$0$Entry#1:
- inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1 := inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
- goto inline$BDLCleanupDataHandles$0$start#1;
-
- inline$BDLCleanupDataHandles$0$start#1:
- call inline$BDLCleanupDataHandles$0$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(4);
- call inline$BDLCleanupDataHandles$0$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(8);
- call inline$BDLCleanupDataHandles$0$$irql$6$3249.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(1);
- inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1;
- goto inline$BDLCleanupDataHandles$0$label_3#1;
-
- inline$BDLCleanupDataHandles$0$label_3#1:
- goto inline$BDLCleanupDataHandles$0$label_4#1;
-
- inline$BDLCleanupDataHandles$0$label_4#1:
- goto inline$BDLCleanupDataHandles$0$label_5#1;
-
- inline$BDLCleanupDataHandles$0$label_5#1:
- inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := 0;
- goto inline$BDLCleanupDataHandles$0$label_6#1;
-
- inline$BDLCleanupDataHandles$0$label_6#1:
- goto inline$BDLCleanupDataHandles$0$label_7#1;
-
- inline$BDLCleanupDataHandles$0$label_7#1:
- goto inline$BDLCleanupDataHandles$0$label_8#1;
-
- inline$BDLCleanupDataHandles$0$label_8#1:
- goto inline$BDLCleanupDataHandles$0$label_9#1;
-
- inline$BDLCleanupDataHandles$0$label_9#1:
- goto inline$BDLGetDebugLevel$220$Entry#1;
-
- inline$BDLGetDebugLevel$220$Entry#1:
- goto inline$BDLGetDebugLevel$220$start#1;
-
- inline$BDLGetDebugLevel$220$start#1:
- goto inline$BDLGetDebugLevel$220$label_3#1;
-
- inline$BDLGetDebugLevel$220$label_3#1:
- havoc inline$BDLGetDebugLevel$220$myNondetVar_0;
- inline$BDLGetDebugLevel$220$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$220$myNondetVar_0;
- goto inline$BDLGetDebugLevel$220$label_1#1;
-
- inline$BDLGetDebugLevel$220$label_1#1:
- goto inline$BDLGetDebugLevel$220$Return#1;
-
- inline$BDLGetDebugLevel$220$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$ := inline$BDLGetDebugLevel$220$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_9$1#1;
-
- inline$BDLCleanupDataHandles$0$label_9$1#1:
- goto inline$BDLCleanupDataHandles$0$anon30_Then#1, inline$BDLCleanupDataHandles$0$anon30_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon1#1;
-
- inline$BDLCleanupDataHandles$0$anon1#1:
- goto inline$BDLCleanupDataHandles$0$label_12#1;
-
- inline$BDLCleanupDataHandles$0$label_12#1:
- goto inline$BDLCleanupDataHandles$0$label_12_true#1, inline$BDLCleanupDataHandles$0$label_12_false#1;
-
- inline$BDLCleanupDataHandles$0$label_12_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$) == 0;
- goto inline$BDLCleanupDataHandles$0$label_13#1;
-
- inline$BDLCleanupDataHandles$0$label_12_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$) != 0;
- goto inline$BDLCleanupDataHandles$0$label_16#1;
-
- inline$BDLCleanupDataHandles$0$label_16#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_17#1;
-
- inline$BDLCleanupDataHandles$0$label_17#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_18#1;
-
- inline$BDLCleanupDataHandles$0$label_18#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_19#1;
-
- inline$BDLCleanupDataHandles$0$label_19#1:
- havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$2$;
- goto inline$BDLCleanupDataHandles$0$label_13#1;
-
- inline$BDLCleanupDataHandles$0$label_13#1:
- goto inline$BDLGetDebugLevel$221$Entry#1;
-
- inline$BDLGetDebugLevel$221$Entry#1:
- goto inline$BDLGetDebugLevel$221$start#1;
-
- inline$BDLGetDebugLevel$221$start#1:
- goto inline$BDLGetDebugLevel$221$label_3#1;
-
- inline$BDLGetDebugLevel$221$label_3#1:
- havoc inline$BDLGetDebugLevel$221$myNondetVar_0;
- inline$BDLGetDebugLevel$221$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$221$myNondetVar_0;
- goto inline$BDLGetDebugLevel$221$label_1#1;
-
- inline$BDLGetDebugLevel$221$label_1#1:
- goto inline$BDLGetDebugLevel$221$Return#1;
-
- inline$BDLGetDebugLevel$221$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$ := inline$BDLGetDebugLevel$221$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_13$1#1;
-
- inline$BDLCleanupDataHandles$0$label_13$1#1:
- goto inline$BDLCleanupDataHandles$0$anon31_Then#1, inline$BDLCleanupDataHandles$0$anon31_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon3#1;
-
- inline$BDLCleanupDataHandles$0$anon3#1:
- goto inline$BDLCleanupDataHandles$0$label_22#1;
-
- inline$BDLCleanupDataHandles$0$label_22#1:
- goto inline$BDLCleanupDataHandles$0$label_22_true#1, inline$BDLCleanupDataHandles$0$label_22_false#1;
-
- inline$BDLCleanupDataHandles$0$label_22_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$) == 0;
- goto inline$BDLCleanupDataHandles$0$label_23#1;
-
- inline$BDLCleanupDataHandles$0$label_22_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$) != 0;
- goto inline$BDLCleanupDataHandles$0$label_26#1;
-
- inline$BDLCleanupDataHandles$0$label_26#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_27#1;
-
- inline$BDLCleanupDataHandles$0$label_27#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_28#1;
-
- inline$BDLCleanupDataHandles$0$label_28#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_29#1;
-
- inline$BDLCleanupDataHandles$0$label_29#1:
- havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$7$;
- goto inline$BDLCleanupDataHandles$0$label_23#1;
-
- inline$BDLCleanupDataHandles$0$label_23#1:
- goto inline$BDLGetDebugLevel$222$Entry#1;
-
- inline$BDLGetDebugLevel$222$Entry#1:
- goto inline$BDLGetDebugLevel$222$start#1;
-
- inline$BDLGetDebugLevel$222$start#1:
- goto inline$BDLGetDebugLevel$222$label_3#1;
-
- inline$BDLGetDebugLevel$222$label_3#1:
- havoc inline$BDLGetDebugLevel$222$myNondetVar_0;
- inline$BDLGetDebugLevel$222$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$222$myNondetVar_0;
- goto inline$BDLGetDebugLevel$222$label_1#1;
-
- inline$BDLGetDebugLevel$222$label_1#1:
- goto inline$BDLGetDebugLevel$222$Return#1;
-
- inline$BDLGetDebugLevel$222$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$ := inline$BDLGetDebugLevel$222$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_23$1#1;
-
- inline$BDLCleanupDataHandles$0$label_23$1#1:
- goto inline$BDLCleanupDataHandles$0$anon32_Then#1, inline$BDLCleanupDataHandles$0$anon32_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon5#1;
-
- inline$BDLCleanupDataHandles$0$anon5#1:
- goto inline$BDLCleanupDataHandles$0$label_32#1;
-
- inline$BDLCleanupDataHandles$0$label_32#1:
- goto inline$BDLCleanupDataHandles$0$label_32_true#1, inline$BDLCleanupDataHandles$0$label_32_false#1;
-
- inline$BDLCleanupDataHandles$0$label_32_false#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$, 4) == 0;
- goto inline$BDLCleanupDataHandles$0$label_33#1;
-
- inline$BDLCleanupDataHandles$0$label_32_true#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$, 4) != 0;
- goto inline$BDLCleanupDataHandles$0$label_34#1;
-
- inline$BDLCleanupDataHandles$0$label_34#1:
- goto inline$BDLCleanupDataHandles$0$label_33#1;
-
- inline$BDLCleanupDataHandles$0$label_33#1:
- goto inline$BDLCleanupDataHandles$0$label_35#1;
-
- inline$BDLCleanupDataHandles$0$label_35#1:
- goto inline$BDLLockHandleList$0$Entry#1;
-
- inline$BDLLockHandleList$0$Entry#1:
- inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1 := inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
- goto inline$BDLLockHandleList$0$start#1;
-
- inline$BDLLockHandleList$0$start#1:
- inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8 := inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1;
- goto inline$BDLLockHandleList$0$label_3#1;
-
- inline$BDLLockHandleList$0$label_3#1:
- havoc inline$BDLLockHandleList$0$myNondetVar_0;
- havoc inline$BDLLockHandleList$0$myNondetVar_1;
- assume inline$BDLLockHandleList$0$myNondetVar_0 == inline$BDLLockHandleList$0$myNondetVar_1;
- goto inline$storm_KeAcquireSpinLock$1$Entry#1;
-
- inline$storm_KeAcquireSpinLock$1$Entry#1:
- inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8);
- goto inline$storm_KeAcquireSpinLock$1$start#1;
-
- inline$storm_KeAcquireSpinLock$1$start#1:
- inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
- goto inline$storm_KeAcquireSpinLock$1$label_3#1;
-
- inline$storm_KeAcquireSpinLock$1$label_3#1:
- goto inline$storm_KeAcquireSpinLock$1$label_4#1;
-
- inline$storm_KeAcquireSpinLock$1$label_4#1:
- goto inline$storm_getThreadID$3$Entry#1;
-
- inline$storm_getThreadID$3$Entry#1:
- goto inline$storm_getThreadID$3$anon0#1;
-
- inline$storm_getThreadID$3$anon0#1:
- inline$storm_getThreadID$3$tid := __storm_thread_id;
- goto inline$storm_getThreadID$3$Return#1;
-
- inline$storm_getThreadID$3$Return#1:
- inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$3$tid;
- goto inline$storm_KeAcquireSpinLock$1$label_4$1#1;
-
- inline$storm_KeAcquireSpinLock$1$label_4$1#1:
- goto inline$storm_KeAcquireSpinLock$1$label_7#1;
-
- inline$storm_KeAcquireSpinLock$1$label_7#1:
- inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$;
- goto inline$storm_KeAcquireSpinLock$1$label_8#1;
-
- inline$storm_KeAcquireSpinLock$1$label_8#1:
- goto inline$storm_KeAcquireSpinLock$1$label_9#1;
-
- inline$storm_KeAcquireSpinLock$1$label_9#1:
- __storm_atomic := true;
- goto inline$storm_KeAcquireSpinLock$1$label_12#1;
-
- inline$storm_KeAcquireSpinLock$1$label_12#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon7_Then#1, inline$storm_KeAcquireSpinLock$1$anon7_Else#1;
-
- inline$storm_KeAcquireSpinLock$1$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon1#1;
-
- inline$storm_KeAcquireSpinLock$1$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_13#1;
-
- inline$storm_KeAcquireSpinLock$1$label_13#1:
- goto inline$storm_KeAcquireSpinLock$1$label_13_true#1, inline$storm_KeAcquireSpinLock$1$label_13_false#1;
-
- inline$storm_KeAcquireSpinLock$1$label_13_false#1:
- assume !INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$1$label_14#1;
-
- inline$storm_KeAcquireSpinLock$1$label_14#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeAcquireSpinLock$1$label_1#1;
-
- inline$storm_KeAcquireSpinLock$1$label_13_true#1:
- assume INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
- goto inline$storm_KeAcquireSpinLock$1$label_17#1;
-
- inline$storm_KeAcquireSpinLock$1$label_17#1:
- havoc raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon8_Then#1, inline$storm_KeAcquireSpinLock$1$anon8_Else#1;
-
- inline$storm_KeAcquireSpinLock$1$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeAcquireSpinLock$1$anon4#1;
-
- inline$storm_KeAcquireSpinLock$1$anon4#1:
- assume INT_EQ(inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
- goto inline$storm_KeAcquireSpinLock$1$label_18#1;
-
- inline$storm_KeAcquireSpinLock$1$label_18#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8];
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_19#1;
-
- inline$storm_KeAcquireSpinLock$1$label_19#1:
- goto inline$storm_KeAcquireSpinLock$1$anon9_Then#1, inline$storm_KeAcquireSpinLock$1$anon9_Else#1;
-
- inline$storm_KeAcquireSpinLock$1$anon9_Else#1:
- assume __storm_init;
- goto inline$storm_KeAcquireSpinLock$1$anon6#1;
-
- inline$storm_KeAcquireSpinLock$1$anon9_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeAcquireSpinLock$1$anon6#1;
-
- inline$storm_KeAcquireSpinLock$1$anon6#1:
- call contextSwitch();
- goto inline$storm_KeAcquireSpinLock$1$label_1#1;
-
- inline$storm_KeAcquireSpinLock$1$label_1#1:
- goto inline$storm_KeAcquireSpinLock$1$Return#1;
-
- inline$storm_KeAcquireSpinLock$1$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$1$Return#1;
-
- inline$storm_KeAcquireSpinLock$1$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeAcquireSpinLock$1$Return#1;
-
- inline$storm_KeAcquireSpinLock$1$Return#1:
- goto inline$BDLLockHandleList$0$label_3$1#1;
-
- inline$BDLLockHandleList$0$label_3$1#1:
- goto inline$BDLLockHandleList$0$anon2_Then#1, inline$BDLLockHandleList$0$anon2_Else#1;
-
- inline$BDLLockHandleList$0$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLLockHandleList$0$anon1#1;
-
- inline$BDLLockHandleList$0$anon1#1:
- havoc inline$BDLLockHandleList$0$myNondetVar_0;
- goto inline$BDLLockHandleList$0$label_1#1;
-
- inline$BDLLockHandleList$0$label_1#1:
- goto inline$BDLLockHandleList$0$Return#1;
-
- inline$BDLLockHandleList$0$anon2_Then#1:
- assume raiseException;
- goto inline$BDLLockHandleList$0$Return#1;
-
- inline$BDLLockHandleList$0$Return#1:
- goto inline$BDLCleanupDataHandles$0$label_35$1#1;
-
- inline$BDLCleanupDataHandles$0$label_35$1#1:
- goto inline$BDLCleanupDataHandles$0$anon33_Then#1, inline$BDLCleanupDataHandles$0$anon33_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon7#1;
-
- inline$BDLCleanupDataHandles$0$anon7#1:
- goto inline$BDLCleanupDataHandles$0$label_38#1;
-
- inline$BDLCleanupDataHandles$0$label_38#1:
- goto inline$BDLCleanupDataHandles$0$label_38_head#1;
-
- inline$BDLCleanupDataHandles$0$label_38_head#1:
- goto inline$BDLGetFirstHandle$0$Entry#1;
-
- inline$BDLGetFirstHandle$0$Entry#1:
- goto inline$BDLGetFirstHandle$0$start#1;
-
- inline$BDLGetFirstHandle$0$start#1:
- goto inline$BDLGetFirstHandle$0$label_3#1;
-
- inline$BDLGetFirstHandle$0$label_3#1:
- goto inline$BDLGetFirstHandle$0$label_3_true#1, inline$BDLGetFirstHandle$0$label_3_false#1;
-
- inline$BDLGetFirstHandle$0$label_3_false#1:
- havoc inline$BDLGetFirstHandle$0$myNondetVar_0;
- assume inline$BDLGetFirstHandle$0$myNondetVar_0 == 0;
- goto inline$BDLGetFirstHandle$0$label_4#1;
-
- inline$BDLGetFirstHandle$0$label_4#1:
- inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$ := 0;
- goto inline$BDLGetFirstHandle$0$label_1#1;
-
- inline$BDLGetFirstHandle$0$label_3_true#1:
- havoc inline$BDLGetFirstHandle$0$myNondetVar_0;
- assume inline$BDLGetFirstHandle$0$myNondetVar_0 != 0;
- goto inline$BDLGetFirstHandle$0$label_5#1;
-
- inline$BDLGetFirstHandle$0$label_5#1:
- havoc inline$BDLGetFirstHandle$0$myNondetVar_0;
- havoc inline$BDLGetFirstHandle$0$myNondetVar_1;
- goto inline$BDLGetFirstHandle$0$label_6#1;
-
- inline$BDLGetFirstHandle$0$label_6#1:
- inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$ := 1;
- goto inline$BDLGetFirstHandle$0$label_1#1;
-
- inline$BDLGetFirstHandle$0$label_1#1:
- goto inline$BDLGetFirstHandle$0$Return#1;
-
- inline$BDLGetFirstHandle$0$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$ := inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_38_head$1#1;
-
- inline$BDLCleanupDataHandles$0$label_38_head$1#1:
- goto inline$BDLCleanupDataHandles$0$anon34_Then#1, inline$BDLCleanupDataHandles$0$anon34_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon9#1;
-
- inline$BDLCleanupDataHandles$0$anon9#1:
- goto inline$BDLCleanupDataHandles$0$label_41#1;
-
- inline$BDLCleanupDataHandles$0$label_41#1:
- goto inline$BDLCleanupDataHandles$0$label_41_true#1, inline$BDLCleanupDataHandles$0$label_41_false#1;
-
- inline$BDLCleanupDataHandles$0$label_41_false#1:
- assume !INT_EQ(inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$, 1);
- goto inline$BDLCleanupDataHandles$0$label_42#1;
-
- inline$BDLCleanupDataHandles$0$label_42#1:
- havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
- goto inline$BDLReleaseHandleList$0$Entry#1;
-
- inline$BDLReleaseHandleList$0$Entry#1:
- inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1 := inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
- goto inline$BDLReleaseHandleList$0$start#1;
-
- inline$BDLReleaseHandleList$0$start#1:
- inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8 := inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1;
- goto inline$BDLReleaseHandleList$0$label_3#1;
-
- inline$BDLReleaseHandleList$0$label_3#1:
- havoc inline$BDLReleaseHandleList$0$myNondetVar_0;
- havoc inline$BDLReleaseHandleList$0$myNondetVar_1;
- assume inline$BDLReleaseHandleList$0$myNondetVar_0 == inline$BDLReleaseHandleList$0$myNondetVar_1;
- goto inline$storm_KeReleaseSpinLock$2$Entry#1;
-
- inline$storm_KeReleaseSpinLock$2$Entry#1:
- inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8);
- goto inline$storm_KeReleaseSpinLock$2$start#1;
-
- inline$storm_KeReleaseSpinLock$2$start#1:
- inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
- goto inline$storm_KeReleaseSpinLock$2$label_3#1;
-
- inline$storm_KeReleaseSpinLock$2$label_3#1:
- goto inline$storm_KeReleaseSpinLock$2$label_4#1;
-
- inline$storm_KeReleaseSpinLock$2$label_4#1:
- __storm_atomic := true;
- goto inline$storm_KeReleaseSpinLock$2$label_7#1;
-
- inline$storm_KeReleaseSpinLock$2$label_7#1:
- havoc raiseException;
- goto inline$storm_KeReleaseSpinLock$2$anon5_Then#1, inline$storm_KeReleaseSpinLock$2$anon5_Else#1;
-
- inline$storm_KeReleaseSpinLock$2$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_KeReleaseSpinLock$2$anon1#1;
-
- inline$storm_KeReleaseSpinLock$2$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$2$label_8#1;
-
- inline$storm_KeReleaseSpinLock$2$label_8#1:
- goto inline$storm_getThreadID$4$Entry#1;
-
- inline$storm_getThreadID$4$Entry#1:
- goto inline$storm_getThreadID$4$anon0#1;
-
- inline$storm_getThreadID$4$anon0#1:
- inline$storm_getThreadID$4$tid := __storm_thread_id;
- goto inline$storm_getThreadID$4$Return#1;
-
- inline$storm_getThreadID$4$Return#1:
- inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$4$tid;
- goto inline$storm_KeReleaseSpinLock$2$label_8$1#1;
-
- inline$storm_KeReleaseSpinLock$2$label_8$1#1:
- goto inline$storm_KeReleaseSpinLock$2$label_11#1;
-
- inline$storm_KeReleaseSpinLock$2$label_11#1:
- goto inline$storm_KeReleaseSpinLock$2$label_11_true#1, inline$storm_KeReleaseSpinLock$2$label_11_false#1;
-
- inline$storm_KeReleaseSpinLock$2$label_11_false#1:
- assume !INT_EQ(inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$2$label_12#1;
-
- inline$storm_KeReleaseSpinLock$2$label_12#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_KeReleaseSpinLock$2$label_1#1;
-
- inline$storm_KeReleaseSpinLock$2$label_11_true#1:
- assume INT_EQ(inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$);
- goto inline$storm_KeReleaseSpinLock$2$label_15#1;
-
- inline$storm_KeReleaseSpinLock$2$label_15#1:
- Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$2$label_16#1;
-
- inline$storm_KeReleaseSpinLock$2$label_16#1:
- goto inline$storm_KeReleaseSpinLock$2$anon6_Then#1, inline$storm_KeReleaseSpinLock$2$anon6_Else#1;
-
- inline$storm_KeReleaseSpinLock$2$anon6_Else#1:
- assume __storm_init;
- goto inline$storm_KeReleaseSpinLock$2$anon4#1;
-
- inline$storm_KeReleaseSpinLock$2$anon6_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_KeReleaseSpinLock$2$anon4#1;
-
- inline$storm_KeReleaseSpinLock$2$anon4#1:
- call contextSwitch();
- goto inline$storm_KeReleaseSpinLock$2$label_1#1;
-
- inline$storm_KeReleaseSpinLock$2$label_1#1:
- goto inline$storm_KeReleaseSpinLock$2$Return#1;
-
- inline$storm_KeReleaseSpinLock$2$anon5_Then#1:
- assume raiseException;
- goto inline$storm_KeReleaseSpinLock$2$Return#1;
-
- inline$storm_KeReleaseSpinLock$2$Return#1:
- goto inline$BDLReleaseHandleList$0$label_3$1#1;
-
- inline$BDLReleaseHandleList$0$label_3$1#1:
- goto inline$BDLReleaseHandleList$0$anon2_Then#1, inline$BDLReleaseHandleList$0$anon2_Else#1;
-
- inline$BDLReleaseHandleList$0$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLReleaseHandleList$0$anon1#1;
-
- inline$BDLReleaseHandleList$0$anon1#1:
- havoc inline$BDLReleaseHandleList$0$myNondetVar_0;
- goto inline$BDLReleaseHandleList$0$label_1#1;
-
- inline$BDLReleaseHandleList$0$label_1#1:
- goto inline$BDLReleaseHandleList$0$Return#1;
-
- inline$BDLReleaseHandleList$0$anon2_Then#1:
- assume raiseException;
- goto inline$BDLReleaseHandleList$0$Return#1;
-
- inline$BDLReleaseHandleList$0$Return#1:
- goto inline$BDLCleanupDataHandles$0$label_42$1#1;
-
- inline$BDLCleanupDataHandles$0$label_42$1#1:
- goto inline$BDLCleanupDataHandles$0$anon35_Then#1, inline$BDLCleanupDataHandles$0$anon35_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon11#1;
-
- inline$BDLCleanupDataHandles$0$anon11#1:
- goto inline$BDLCleanupDataHandles$0$label_87#1;
-
- inline$BDLCleanupDataHandles$0$label_87#1:
- goto inline$BDLGetDebugLevel$226$Entry#1;
-
- inline$BDLGetDebugLevel$226$Entry#1:
- goto inline$BDLGetDebugLevel$226$start#1;
-
- inline$BDLGetDebugLevel$226$start#1:
- goto inline$BDLGetDebugLevel$226$label_3#1;
-
- inline$BDLGetDebugLevel$226$label_3#1:
- havoc inline$BDLGetDebugLevel$226$myNondetVar_0;
- inline$BDLGetDebugLevel$226$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$226$myNondetVar_0;
- goto inline$BDLGetDebugLevel$226$label_1#1;
-
- inline$BDLGetDebugLevel$226$label_1#1:
- goto inline$BDLGetDebugLevel$226$Return#1;
-
- inline$BDLGetDebugLevel$226$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$ := inline$BDLGetDebugLevel$226$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_87$1#1;
-
- inline$BDLCleanupDataHandles$0$label_87$1#1:
- goto inline$BDLCleanupDataHandles$0$anon42_Then#1, inline$BDLCleanupDataHandles$0$anon42_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon25#1;
-
- inline$BDLCleanupDataHandles$0$anon25#1:
- goto inline$BDLCleanupDataHandles$0$label_90#1;
-
- inline$BDLCleanupDataHandles$0$label_90#1:
- goto inline$BDLCleanupDataHandles$0$label_90_true#1, inline$BDLCleanupDataHandles$0$label_90_false#1;
-
- inline$BDLCleanupDataHandles$0$label_90_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$) == 0;
- goto inline$BDLCleanupDataHandles$0$label_91#1;
-
- inline$BDLCleanupDataHandles$0$label_90_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$) != 0;
- goto inline$BDLCleanupDataHandles$0$label_94#1;
-
- inline$BDLCleanupDataHandles$0$label_94#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_95#1;
-
- inline$BDLCleanupDataHandles$0$label_95#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_96#1;
-
- inline$BDLCleanupDataHandles$0$label_96#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_97#1;
-
- inline$BDLCleanupDataHandles$0$label_97#1:
- havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$27$;
- goto inline$BDLCleanupDataHandles$0$label_91#1;
-
- inline$BDLCleanupDataHandles$0$label_91#1:
- goto inline$BDLGetDebugLevel$227$Entry#1;
-
- inline$BDLGetDebugLevel$227$Entry#1:
- goto inline$BDLGetDebugLevel$227$start#1;
-
- inline$BDLGetDebugLevel$227$start#1:
- goto inline$BDLGetDebugLevel$227$label_3#1;
-
- inline$BDLGetDebugLevel$227$label_3#1:
- havoc inline$BDLGetDebugLevel$227$myNondetVar_0;
- inline$BDLGetDebugLevel$227$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$227$myNondetVar_0;
- goto inline$BDLGetDebugLevel$227$label_1#1;
-
- inline$BDLGetDebugLevel$227$label_1#1:
- goto inline$BDLGetDebugLevel$227$Return#1;
-
- inline$BDLGetDebugLevel$227$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$ := inline$BDLGetDebugLevel$227$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_91$1#1;
-
- inline$BDLCleanupDataHandles$0$label_91$1#1:
- goto inline$BDLCleanupDataHandles$0$anon43_Then#1, inline$BDLCleanupDataHandles$0$anon43_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon27#1;
-
- inline$BDLCleanupDataHandles$0$anon27#1:
- goto inline$BDLCleanupDataHandles$0$label_100#1;
-
- inline$BDLCleanupDataHandles$0$label_100#1:
- goto inline$BDLCleanupDataHandles$0$label_100_true#1, inline$BDLCleanupDataHandles$0$label_100_false#1;
-
- inline$BDLCleanupDataHandles$0$label_100_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$) == 0;
- goto inline$BDLCleanupDataHandles$0$label_101#1;
-
- inline$BDLCleanupDataHandles$0$label_100_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$) != 0;
- goto inline$BDLCleanupDataHandles$0$label_104#1;
-
- inline$BDLCleanupDataHandles$0$label_104#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_105#1;
-
- inline$BDLCleanupDataHandles$0$label_105#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_106#1;
-
- inline$BDLCleanupDataHandles$0$label_106#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_107#1;
-
- inline$BDLCleanupDataHandles$0$label_107#1:
- havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$32$;
- goto inline$BDLCleanupDataHandles$0$label_101#1;
-
- inline$BDLCleanupDataHandles$0$label_101#1:
- goto inline$BDLGetDebugLevel$228$Entry#1;
-
- inline$BDLGetDebugLevel$228$Entry#1:
- goto inline$BDLGetDebugLevel$228$start#1;
-
- inline$BDLGetDebugLevel$228$start#1:
- goto inline$BDLGetDebugLevel$228$label_3#1;
-
- inline$BDLGetDebugLevel$228$label_3#1:
- havoc inline$BDLGetDebugLevel$228$myNondetVar_0;
- inline$BDLGetDebugLevel$228$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$228$myNondetVar_0;
- goto inline$BDLGetDebugLevel$228$label_1#1;
-
- inline$BDLGetDebugLevel$228$label_1#1:
- goto inline$BDLGetDebugLevel$228$Return#1;
-
- inline$BDLGetDebugLevel$228$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$ := inline$BDLGetDebugLevel$228$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_101$1#1;
-
- inline$BDLCleanupDataHandles$0$label_101$1#1:
- goto inline$BDLCleanupDataHandles$0$anon44_Then#1, inline$BDLCleanupDataHandles$0$anon44_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon29#1;
-
- inline$BDLCleanupDataHandles$0$anon29#1:
- goto inline$BDLCleanupDataHandles$0$label_110#1;
-
- inline$BDLCleanupDataHandles$0$label_110#1:
- goto inline$BDLCleanupDataHandles$0$label_110_true#1, inline$BDLCleanupDataHandles$0$label_110_false#1;
-
- inline$BDLCleanupDataHandles$0$label_110_false#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$, 4) == 0;
- goto inline$BDLCleanupDataHandles$0$label_1#1;
-
- inline$BDLCleanupDataHandles$0$label_110_true#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$, 4) != 0;
- goto inline$BDLCleanupDataHandles$0$label_111#1;
-
- inline$BDLCleanupDataHandles$0$label_111#1:
- goto inline$BDLCleanupDataHandles$0$label_1#1;
-
- inline$BDLCleanupDataHandles$0$label_1#1:
- call __HAVOC_free(inline$BDLCleanupDataHandles$0$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4);
- call __HAVOC_free(inline$BDLCleanupDataHandles$0$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4);
- call __HAVOC_free(inline$BDLCleanupDataHandles$0$$irql$6$3249.28$BDLCleanupDataHandles$4);
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon44_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon43_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon42_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon35_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$label_41_true#1:
- assume INT_EQ(inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$, 1);
- goto inline$BDLCleanupDataHandles$0$label_45#1;
-
- inline$BDLCleanupDataHandles$0$label_45#1:
- havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$Entry#1;
-
- inline$BDLRemoveHandleFromList$0$Entry#1:
- inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8_.1 := inline$BDLCleanupDataHandles$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$start#1;
-
- inline$BDLRemoveHandleFromList$0$start#1:
- inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8_.1;
- goto inline$BDLRemoveHandleFromList$0$label_3#1;
-
- inline$BDLRemoveHandleFromList$0$label_3#1:
- goto inline$BDLRemoveHandleFromList$0$label_4#1;
-
- inline$BDLRemoveHandleFromList$0$label_4#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_5#1;
-
- inline$BDLRemoveHandleFromList$0$label_5#1:
- goto inline$BDLRemoveHandleFromList$0$label_6#1;
-
- inline$BDLRemoveHandleFromList$0$label_6#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_7#1;
-
- inline$BDLRemoveHandleFromList$0$label_7#1:
- goto inline$BDLRemoveHandleFromList$0$label_7_true#1, inline$BDLRemoveHandleFromList$0$label_7_false#1;
-
- inline$BDLRemoveHandleFromList$0$label_7_false#1:
- assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
- goto inline$BDLRemoveHandleFromList$0$label_8#1;
-
- inline$BDLRemoveHandleFromList$0$label_8#1:
- goto inline$BDLRemoveHandleFromList$0$label_1#1;
-
- inline$BDLRemoveHandleFromList$0$label_7_true#1:
- assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
- goto inline$BDLRemoveHandleFromList$0$label_9#1;
-
- inline$BDLRemoveHandleFromList$0$label_9#1:
- goto inline$BDLRemoveHandleFromList$0$label_9_true#1, inline$BDLRemoveHandleFromList$0$label_9_false#1;
-
- inline$BDLRemoveHandleFromList$0$label_9_false#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$0$label_10#1;
-
- inline$BDLRemoveHandleFromList$0$label_10#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_20#1;
-
- inline$BDLRemoveHandleFromList$0$label_20#1:
- goto inline$BDLRemoveHandleFromList$0$label_20_head#1;
-
- inline$BDLRemoveHandleFromList$0$label_20_head#1:
- goto inline$BDLRemoveHandleFromList$0$label_20_true#1, inline$BDLRemoveHandleFromList$0$label_20_false#1;
-
- inline$BDLRemoveHandleFromList$0$label_20_false#1:
- assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
- goto inline$BDLRemoveHandleFromList$0$label_21#1;
-
- inline$BDLRemoveHandleFromList$0$label_20_true#1:
- assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
- goto inline$BDLRemoveHandleFromList$0$label_22#1;
-
- inline$BDLRemoveHandleFromList$0$label_22#1:
- goto inline$BDLRemoveHandleFromList$0$label_22_true#1, inline$BDLRemoveHandleFromList$0$label_22_false#1;
-
- inline$BDLRemoveHandleFromList$0$label_22_false#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- assume !INT_NEQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$0$label_21#1;
-
- inline$BDLRemoveHandleFromList$0$label_21#1:
- goto inline$BDLRemoveHandleFromList$0$label_21_true#1, inline$BDLRemoveHandleFromList$0$label_21_false#1;
-
- inline$BDLRemoveHandleFromList$0$label_21_false#1:
- assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
- goto inline$BDLRemoveHandleFromList$0$label_25#1;
-
- inline$BDLRemoveHandleFromList$0$label_25#1:
- goto inline$BDLRemoveHandleFromList$0$label_1#1;
-
- inline$BDLRemoveHandleFromList$0$label_21_true#1:
- assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
- goto inline$BDLRemoveHandleFromList$0$label_26#1;
-
- inline$BDLRemoveHandleFromList$0$label_26#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_27#1;
-
- inline$BDLRemoveHandleFromList$0$label_27#1:
- goto inline$BDLRemoveHandleFromList$0$label_27_true#1, inline$BDLRemoveHandleFromList$0$label_27_false#1;
-
- inline$BDLRemoveHandleFromList$0$label_27_false#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$0$label_15#1;
-
- inline$BDLRemoveHandleFromList$0$label_27_true#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- assume INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$0$label_28#1;
-
- inline$BDLRemoveHandleFromList$0$label_28#1:
- goto inline$BDLRemoveHandleFromList$0$label_15#1;
-
- inline$BDLRemoveHandleFromList$0$label_22_true#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- assume INT_NEQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$0$label_23#1;
-
- inline$BDLRemoveHandleFromList$0$label_23#1:
- goto inline$BDLRemoveHandleFromList$0$label_24#1;
-
- inline$BDLRemoveHandleFromList$0$label_24#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_20_head#0;
-
- inline$BDLRemoveHandleFromList$0$label_20_head#0:
- assume false;
- return;
-
- inline$BDLRemoveHandleFromList$0$label_9_true#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- assume INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
- goto inline$BDLRemoveHandleFromList$0$label_11#1;
-
- inline$BDLRemoveHandleFromList$0$label_11#1:
- goto inline$BDLRemoveHandleFromList$0$label_11_true#1, inline$BDLRemoveHandleFromList$0$label_11_false#1;
-
- inline$BDLRemoveHandleFromList$0$label_11_false#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_1;
- assume !INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$myNondetVar_1);
- goto inline$BDLRemoveHandleFromList$0$label_12#1;
-
- inline$BDLRemoveHandleFromList$0$label_12#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_15#1;
-
- inline$BDLRemoveHandleFromList$0$label_11_true#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_1;
- assume INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$myNondetVar_1);
- goto inline$BDLRemoveHandleFromList$0$label_13#1;
-
- inline$BDLRemoveHandleFromList$0$label_13#1:
- goto inline$BDLRemoveHandleFromList$0$label_14#1;
-
- inline$BDLRemoveHandleFromList$0$label_14#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_15#1;
-
- inline$BDLRemoveHandleFromList$0$label_15#1:
- havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
- goto inline$BDLRemoveHandleFromList$0$label_16#1;
-
- inline$BDLRemoveHandleFromList$0$label_16#1:
- call ExFreePoolWithTag(inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8, 1280066626);
- goto inline$BDLRemoveHandleFromList$0$anon2_Then#1, inline$BDLRemoveHandleFromList$0$anon2_Else#1;
-
- inline$BDLRemoveHandleFromList$0$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLRemoveHandleFromList$0$anon1#1;
-
- inline$BDLRemoveHandleFromList$0$anon1#1:
- goto inline$BDLRemoveHandleFromList$0$label_19#1;
-
- inline$BDLRemoveHandleFromList$0$label_19#1:
- goto inline$BDLRemoveHandleFromList$0$label_1#1;
-
- inline$BDLRemoveHandleFromList$0$label_1#1:
- goto inline$BDLRemoveHandleFromList$0$Return#1;
-
- inline$BDLRemoveHandleFromList$0$anon2_Then#1:
- assume raiseException;
- goto inline$BDLRemoveHandleFromList$0$Return#1;
-
- inline$BDLRemoveHandleFromList$0$Return#1:
- goto inline$BDLCleanupDataHandles$0$label_45$1#1;
-
- inline$BDLCleanupDataHandles$0$label_45$1#1:
- goto inline$BDLCleanupDataHandles$0$anon36_Then#1, inline$BDLCleanupDataHandles$0$anon36_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon13#1;
-
- inline$BDLCleanupDataHandles$0$anon13#1:
- goto inline$BDLCleanupDataHandles$0$label_48#1;
-
- inline$BDLCleanupDataHandles$0$label_48#1:
- havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
- inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$0$myNondetVar_0;
- goto inline$BDLCleanupDataHandles$0$label_49#1;
-
- inline$BDLCleanupDataHandles$0$label_49#1:
- goto inline$BDLCleanupDataHandles$0$label_49_true#1, inline$BDLCleanupDataHandles$0$label_49_false#1;
-
- inline$BDLCleanupDataHandles$0$label_49_false#1:
- havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLCleanupDataHandles$0$myNondetVar_0, 2);
- goto inline$BDLCleanupDataHandles$0$label_50#1;
-
- inline$BDLCleanupDataHandles$0$label_50#1:
- havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
- goto inline$BDLCleanupDataHandles$0$label_57#1;
-
- inline$BDLCleanupDataHandles$0$label_57#1:
- goto inline$BDLCleanupDataHandles$0$label_60#1;
-
- inline$BDLCleanupDataHandles$0$label_60#1:
- inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$0$$callresult.$3284.85$14$;
- goto inline$BDLCleanupDataHandles$0$label_61#1;
-
- inline$BDLCleanupDataHandles$0$label_61#1:
- goto inline$BDLCleanupDataHandles$0$label_61_true#1, inline$BDLCleanupDataHandles$0$label_61_false#1;
-
- inline$BDLCleanupDataHandles$0$label_61_false#1:
- assume inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4 == 0;
- goto inline$BDLCleanupDataHandles$0$label_54#1;
-
- inline$BDLCleanupDataHandles$0$label_61_true#1:
- assume inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4 != 0;
- goto inline$BDLCleanupDataHandles$0$label_62#1;
-
- inline$BDLCleanupDataHandles$0$label_62#1:
- goto inline$BDLGetDebugLevel$223$Entry#1;
-
- inline$BDLGetDebugLevel$223$Entry#1:
- goto inline$BDLGetDebugLevel$223$start#1;
-
- inline$BDLGetDebugLevel$223$start#1:
- goto inline$BDLGetDebugLevel$223$label_3#1;
-
- inline$BDLGetDebugLevel$223$label_3#1:
- havoc inline$BDLGetDebugLevel$223$myNondetVar_0;
- inline$BDLGetDebugLevel$223$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$223$myNondetVar_0;
- goto inline$BDLGetDebugLevel$223$label_1#1;
-
- inline$BDLGetDebugLevel$223$label_1#1:
- goto inline$BDLGetDebugLevel$223$Return#1;
-
- inline$BDLGetDebugLevel$223$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$ := inline$BDLGetDebugLevel$223$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_62$1#1;
-
- inline$BDLCleanupDataHandles$0$label_62$1#1:
- goto inline$BDLCleanupDataHandles$0$anon39_Then#1, inline$BDLCleanupDataHandles$0$anon39_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon19#1;
-
- inline$BDLCleanupDataHandles$0$anon19#1:
- goto inline$BDLCleanupDataHandles$0$label_65#1;
-
- inline$BDLCleanupDataHandles$0$label_65#1:
- goto inline$BDLCleanupDataHandles$0$label_65_true#1, inline$BDLCleanupDataHandles$0$label_65_false#1;
-
- inline$BDLCleanupDataHandles$0$label_65_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$) == 0;
- goto inline$BDLCleanupDataHandles$0$label_66#1;
-
- inline$BDLCleanupDataHandles$0$label_65_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$) != 0;
- goto inline$BDLCleanupDataHandles$0$label_69#1;
-
- inline$BDLCleanupDataHandles$0$label_69#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_70#1;
-
- inline$BDLCleanupDataHandles$0$label_70#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_71#1;
-
- inline$BDLCleanupDataHandles$0$label_71#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_72#1;
-
- inline$BDLCleanupDataHandles$0$label_72#1:
- havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$16$;
- goto inline$BDLCleanupDataHandles$0$label_66#1;
-
- inline$BDLCleanupDataHandles$0$label_66#1:
- goto inline$BDLGetDebugLevel$224$Entry#1;
-
- inline$BDLGetDebugLevel$224$Entry#1:
- goto inline$BDLGetDebugLevel$224$start#1;
-
- inline$BDLGetDebugLevel$224$start#1:
- goto inline$BDLGetDebugLevel$224$label_3#1;
-
- inline$BDLGetDebugLevel$224$label_3#1:
- havoc inline$BDLGetDebugLevel$224$myNondetVar_0;
- inline$BDLGetDebugLevel$224$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$224$myNondetVar_0;
- goto inline$BDLGetDebugLevel$224$label_1#1;
-
- inline$BDLGetDebugLevel$224$label_1#1:
- goto inline$BDLGetDebugLevel$224$Return#1;
-
- inline$BDLGetDebugLevel$224$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$ := inline$BDLGetDebugLevel$224$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_66$1#1;
-
- inline$BDLCleanupDataHandles$0$label_66$1#1:
- goto inline$BDLCleanupDataHandles$0$anon40_Then#1, inline$BDLCleanupDataHandles$0$anon40_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon21#1;
-
- inline$BDLCleanupDataHandles$0$anon21#1:
- goto inline$BDLCleanupDataHandles$0$label_75#1;
-
- inline$BDLCleanupDataHandles$0$label_75#1:
- goto inline$BDLCleanupDataHandles$0$label_75_true#1, inline$BDLCleanupDataHandles$0$label_75_false#1;
-
- inline$BDLCleanupDataHandles$0$label_75_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$) == 0;
- goto inline$BDLCleanupDataHandles$0$label_76#1;
-
- inline$BDLCleanupDataHandles$0$label_75_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$) != 0;
- goto inline$BDLCleanupDataHandles$0$label_79#1;
-
- inline$BDLCleanupDataHandles$0$label_79#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_80#1;
-
- inline$BDLCleanupDataHandles$0$label_80#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_81#1;
-
- inline$BDLCleanupDataHandles$0$label_81#1:
- call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCleanupDataHandles$0$label_82#1;
-
- inline$BDLCleanupDataHandles$0$label_82#1:
- havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$21$;
- goto inline$BDLCleanupDataHandles$0$label_76#1;
-
- inline$BDLCleanupDataHandles$0$label_76#1:
- goto inline$BDLGetDebugLevel$225$Entry#1;
-
- inline$BDLGetDebugLevel$225$Entry#1:
- goto inline$BDLGetDebugLevel$225$start#1;
-
- inline$BDLGetDebugLevel$225$start#1:
- goto inline$BDLGetDebugLevel$225$label_3#1;
-
- inline$BDLGetDebugLevel$225$label_3#1:
- havoc inline$BDLGetDebugLevel$225$myNondetVar_0;
- inline$BDLGetDebugLevel$225$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$225$myNondetVar_0;
- goto inline$BDLGetDebugLevel$225$label_1#1;
-
- inline$BDLGetDebugLevel$225$label_1#1:
- goto inline$BDLGetDebugLevel$225$Return#1;
-
- inline$BDLGetDebugLevel$225$Return#1:
- inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$ := inline$BDLGetDebugLevel$225$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLCleanupDataHandles$0$label_76$1#1;
-
- inline$BDLCleanupDataHandles$0$label_76$1#1:
- goto inline$BDLCleanupDataHandles$0$anon41_Then#1, inline$BDLCleanupDataHandles$0$anon41_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon23#1;
-
- inline$BDLCleanupDataHandles$0$anon23#1:
- goto inline$BDLCleanupDataHandles$0$label_85#1;
-
- inline$BDLCleanupDataHandles$0$label_85#1:
- goto inline$BDLCleanupDataHandles$0$label_85_true#1, inline$BDLCleanupDataHandles$0$label_85_false#1;
-
- inline$BDLCleanupDataHandles$0$label_85_false#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$, 4) == 0;
- goto inline$BDLCleanupDataHandles$0$label_54#1;
-
- inline$BDLCleanupDataHandles$0$label_85_true#1:
- assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$, 4) != 0;
- goto inline$BDLCleanupDataHandles$0$label_86#1;
-
- inline$BDLCleanupDataHandles$0$label_86#1:
- goto inline$BDLCleanupDataHandles$0$label_54#1;
-
- inline$BDLCleanupDataHandles$0$anon41_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon40_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon39_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$label_49_true#1:
- havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
- assume INT_EQ(inline$BDLCleanupDataHandles$0$myNondetVar_0, 2);
- goto inline$BDLCleanupDataHandles$0$label_51#1;
-
- inline$BDLCleanupDataHandles$0$label_51#1:
- havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
- goto inline$bdliFree$0$Entry#1;
-
- inline$bdliFree$0$Entry#1:
- inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4_.1 := inline$BDLCleanupDataHandles$0$myNondetVar_0;
- goto inline$bdliFree$0$start#1;
-
- inline$bdliFree$0$start#1:
- inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4 := inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4_.1;
- goto inline$bdliFree$0$label_3#1;
-
- inline$bdliFree$0$label_3#1:
- call ExFreePoolWithTag(inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4, 1229734978);
- goto inline$bdliFree$0$anon2_Then#1, inline$bdliFree$0$anon2_Else#1;
-
- inline$bdliFree$0$anon2_Else#1:
- assume !raiseException;
- goto inline$bdliFree$0$anon1#1;
-
- inline$bdliFree$0$anon1#1:
- goto inline$bdliFree$0$label_1#1;
-
- inline$bdliFree$0$label_1#1:
- goto inline$bdliFree$0$Return#1;
-
- inline$bdliFree$0$anon2_Then#1:
- assume raiseException;
- goto inline$bdliFree$0$Return#1;
-
- inline$bdliFree$0$Return#1:
- goto inline$BDLCleanupDataHandles$0$label_51$1#1;
-
- inline$BDLCleanupDataHandles$0$label_51$1#1:
- goto inline$BDLCleanupDataHandles$0$anon37_Then#1, inline$BDLCleanupDataHandles$0$anon37_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon15#1;
-
- inline$BDLCleanupDataHandles$0$anon15#1:
- goto inline$BDLCleanupDataHandles$0$label_54#1;
-
- inline$BDLCleanupDataHandles$0$label_54#1:
- call ExFreePoolWithTag(inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4, 541869122);
- goto inline$BDLCleanupDataHandles$0$anon38_Then#1, inline$BDLCleanupDataHandles$0$anon38_Else#1;
-
- inline$BDLCleanupDataHandles$0$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDataHandles$0$anon17#1;
-
- inline$BDLCleanupDataHandles$0$anon17#1:
- goto inline$BDLCleanupDataHandles$0$label_38_head#0;
-
- inline$BDLCleanupDataHandles$0$label_38_head#0:
- assume false;
- return;
-
- inline$BDLCleanupDataHandles$0$anon38_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon37_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon36_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon34_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon33_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDataHandles$0$Return#1;
-
- inline$BDLCleanupDataHandles$0$Return#1:
- goto inline$BDLHandleRemove$0$label_41$1#1;
-
- inline$BDLHandleRemove$0$label_41$1#1:
- goto inline$BDLHandleRemove$0$anon48_Then#1, inline$BDLHandleRemove$0$anon48_Else#1;
-
- inline$BDLHandleRemove$0$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon13#1;
-
- inline$BDLHandleRemove$0$anon13#1:
- goto inline$BDLHandleRemove$0$label_44#1;
-
- inline$BDLHandleRemove$0$label_44#1:
- goto inline$BDLHandleRemove$0$label_44_true#1, inline$BDLHandleRemove$0$label_44_false#1;
-
- inline$BDLHandleRemove$0$label_44_false#1:
- havoc inline$BDLHandleRemove$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLHandleRemove$0$myNondetVar_0, 1);
- goto inline$BDLHandleRemove$0$label_45#1;
-
- inline$BDLHandleRemove$0$label_44_true#1:
- havoc inline$BDLHandleRemove$0$myNondetVar_0;
- assume INT_EQ(inline$BDLHandleRemove$0$myNondetVar_0, 1);
- goto inline$BDLHandleRemove$0$label_48#1;
-
- inline$BDLHandleRemove$0$label_48#1:
- goto inline$BDLHandleRemove$0$label_51#1;
-
- inline$BDLHandleRemove$0$label_51#1:
- inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$callresult.$2419.71$15$;
- goto inline$BDLHandleRemove$0$label_52#1;
-
- inline$BDLHandleRemove$0$label_52#1:
- goto inline$BDLHandleRemove$0$label_52_true#1, inline$BDLHandleRemove$0$label_52_false#1;
-
- inline$BDLHandleRemove$0$label_52_false#1:
- assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 == 0;
- goto inline$BDLHandleRemove$0$label_53#1;
-
- inline$BDLHandleRemove$0$label_52_true#1:
- assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 != 0;
- goto inline$BDLHandleRemove$0$label_54#1;
-
- inline$BDLHandleRemove$0$label_54#1:
- goto inline$BDLGetDebugLevel$229$Entry#1;
-
- inline$BDLGetDebugLevel$229$Entry#1:
- goto inline$BDLGetDebugLevel$229$start#1;
-
- inline$BDLGetDebugLevel$229$start#1:
- goto inline$BDLGetDebugLevel$229$label_3#1;
-
- inline$BDLGetDebugLevel$229$label_3#1:
- havoc inline$BDLGetDebugLevel$229$myNondetVar_0;
- inline$BDLGetDebugLevel$229$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$229$myNondetVar_0;
- goto inline$BDLGetDebugLevel$229$label_1#1;
-
- inline$BDLGetDebugLevel$229$label_1#1:
- goto inline$BDLGetDebugLevel$229$Return#1;
-
- inline$BDLGetDebugLevel$229$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$ := inline$BDLGetDebugLevel$229$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_54$1#1;
-
- inline$BDLHandleRemove$0$label_54$1#1:
- goto inline$BDLHandleRemove$0$anon49_Then#1, inline$BDLHandleRemove$0$anon49_Else#1;
-
- inline$BDLHandleRemove$0$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon15#1;
-
- inline$BDLHandleRemove$0$anon15#1:
- goto inline$BDLHandleRemove$0$label_57#1;
-
- inline$BDLHandleRemove$0$label_57#1:
- goto inline$BDLHandleRemove$0$label_57_true#1, inline$BDLHandleRemove$0$label_57_false#1;
-
- inline$BDLHandleRemove$0$label_57_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$) == 0;
- goto inline$BDLHandleRemove$0$label_58#1;
-
- inline$BDLHandleRemove$0$label_57_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$) != 0;
- goto inline$BDLHandleRemove$0$label_61#1;
-
- inline$BDLHandleRemove$0$label_61#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_62#1;
-
- inline$BDLHandleRemove$0$label_62#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_63#1;
-
- inline$BDLHandleRemove$0$label_63#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_64#1;
-
- inline$BDLHandleRemove$0$label_64#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$17$;
- goto inline$BDLHandleRemove$0$label_58#1;
-
- inline$BDLHandleRemove$0$label_58#1:
- goto inline$BDLGetDebugLevel$230$Entry#1;
-
- inline$BDLGetDebugLevel$230$Entry#1:
- goto inline$BDLGetDebugLevel$230$start#1;
-
- inline$BDLGetDebugLevel$230$start#1:
- goto inline$BDLGetDebugLevel$230$label_3#1;
-
- inline$BDLGetDebugLevel$230$label_3#1:
- havoc inline$BDLGetDebugLevel$230$myNondetVar_0;
- inline$BDLGetDebugLevel$230$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$230$myNondetVar_0;
- goto inline$BDLGetDebugLevel$230$label_1#1;
-
- inline$BDLGetDebugLevel$230$label_1#1:
- goto inline$BDLGetDebugLevel$230$Return#1;
-
- inline$BDLGetDebugLevel$230$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$ := inline$BDLGetDebugLevel$230$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_58$1#1;
-
- inline$BDLHandleRemove$0$label_58$1#1:
- goto inline$BDLHandleRemove$0$anon50_Then#1, inline$BDLHandleRemove$0$anon50_Else#1;
-
- inline$BDLHandleRemove$0$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon17#1;
-
- inline$BDLHandleRemove$0$anon17#1:
- goto inline$BDLHandleRemove$0$label_67#1;
-
- inline$BDLHandleRemove$0$label_67#1:
- goto inline$BDLHandleRemove$0$label_67_true#1, inline$BDLHandleRemove$0$label_67_false#1;
-
- inline$BDLHandleRemove$0$label_67_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$) == 0;
- goto inline$BDLHandleRemove$0$label_68#1;
-
- inline$BDLHandleRemove$0$label_67_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$) != 0;
- goto inline$BDLHandleRemove$0$label_71#1;
-
- inline$BDLHandleRemove$0$label_71#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_72#1;
-
- inline$BDLHandleRemove$0$label_72#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_73#1;
-
- inline$BDLHandleRemove$0$label_73#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_74#1;
-
- inline$BDLHandleRemove$0$label_74#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$22$;
- goto inline$BDLHandleRemove$0$label_68#1;
-
- inline$BDLHandleRemove$0$label_68#1:
- goto inline$BDLGetDebugLevel$231$Entry#1;
-
- inline$BDLGetDebugLevel$231$Entry#1:
- goto inline$BDLGetDebugLevel$231$start#1;
-
- inline$BDLGetDebugLevel$231$start#1:
- goto inline$BDLGetDebugLevel$231$label_3#1;
-
- inline$BDLGetDebugLevel$231$label_3#1:
- havoc inline$BDLGetDebugLevel$231$myNondetVar_0;
- inline$BDLGetDebugLevel$231$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$231$myNondetVar_0;
- goto inline$BDLGetDebugLevel$231$label_1#1;
-
- inline$BDLGetDebugLevel$231$label_1#1:
- goto inline$BDLGetDebugLevel$231$Return#1;
-
- inline$BDLGetDebugLevel$231$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$ := inline$BDLGetDebugLevel$231$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_68$1#1;
-
- inline$BDLHandleRemove$0$label_68$1#1:
- goto inline$BDLHandleRemove$0$anon51_Then#1, inline$BDLHandleRemove$0$anon51_Else#1;
-
- inline$BDLHandleRemove$0$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon19#1;
-
- inline$BDLHandleRemove$0$anon19#1:
- goto inline$BDLHandleRemove$0$label_77#1;
-
- inline$BDLHandleRemove$0$label_77#1:
- goto inline$BDLHandleRemove$0$label_77_true#1, inline$BDLHandleRemove$0$label_77_false#1;
-
- inline$BDLHandleRemove$0$label_77_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$, 4) == 0;
- goto inline$BDLHandleRemove$0$label_53#1;
-
- inline$BDLHandleRemove$0$label_77_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$, 4) != 0;
- goto inline$BDLHandleRemove$0$label_78#1;
-
- inline$BDLHandleRemove$0$label_78#1:
- goto inline$BDLHandleRemove$0$label_53#1;
-
- inline$BDLHandleRemove$0$label_53#1:
- goto inline$BDLHandleRemove$0$label_45#1;
-
- inline$BDLHandleRemove$0$label_45#1:
- goto inline$BDLHandleRemove$0$label_79#1;
-
- inline$BDLHandleRemove$0$label_79#1:
- inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$callresult.$2437.63$27$;
- goto inline$BDLHandleRemove$0$label_80#1;
-
- inline$BDLHandleRemove$0$label_80#1:
- goto inline$BDLHandleRemove$0$label_80_true#1, inline$BDLHandleRemove$0$label_80_false#1;
-
- inline$BDLHandleRemove$0$label_80_false#1:
- assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 == 0;
- goto inline$BDLHandleRemove$0$label_81#1;
-
- inline$BDLHandleRemove$0$label_80_true#1:
- assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 != 0;
- goto inline$BDLHandleRemove$0$label_84#1;
-
- inline$BDLHandleRemove$0$label_84#1:
- goto inline$BDLGetDebugLevel$232$Entry#1;
-
- inline$BDLGetDebugLevel$232$Entry#1:
- goto inline$BDLGetDebugLevel$232$start#1;
-
- inline$BDLGetDebugLevel$232$start#1:
- goto inline$BDLGetDebugLevel$232$label_3#1;
-
- inline$BDLGetDebugLevel$232$label_3#1:
- havoc inline$BDLGetDebugLevel$232$myNondetVar_0;
- inline$BDLGetDebugLevel$232$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$232$myNondetVar_0;
- goto inline$BDLGetDebugLevel$232$label_1#1;
-
- inline$BDLGetDebugLevel$232$label_1#1:
- goto inline$BDLGetDebugLevel$232$Return#1;
-
- inline$BDLGetDebugLevel$232$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$ := inline$BDLGetDebugLevel$232$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_84$1#1;
-
- inline$BDLHandleRemove$0$label_84$1#1:
- goto inline$BDLHandleRemove$0$anon53_Then#1, inline$BDLHandleRemove$0$anon53_Else#1;
-
- inline$BDLHandleRemove$0$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon23#1;
-
- inline$BDLHandleRemove$0$anon23#1:
- goto inline$BDLHandleRemove$0$label_87#1;
-
- inline$BDLHandleRemove$0$label_87#1:
- goto inline$BDLHandleRemove$0$label_87_true#1, inline$BDLHandleRemove$0$label_87_false#1;
-
- inline$BDLHandleRemove$0$label_87_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$) == 0;
- goto inline$BDLHandleRemove$0$label_88#1;
-
- inline$BDLHandleRemove$0$label_87_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$) != 0;
- goto inline$BDLHandleRemove$0$label_91#1;
-
- inline$BDLHandleRemove$0$label_91#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_92#1;
-
- inline$BDLHandleRemove$0$label_92#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_93#1;
-
- inline$BDLHandleRemove$0$label_93#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_94#1;
-
- inline$BDLHandleRemove$0$label_94#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$29$;
- goto inline$BDLHandleRemove$0$label_88#1;
-
- inline$BDLHandleRemove$0$label_88#1:
- goto inline$BDLGetDebugLevel$233$Entry#1;
-
- inline$BDLGetDebugLevel$233$Entry#1:
- goto inline$BDLGetDebugLevel$233$start#1;
-
- inline$BDLGetDebugLevel$233$start#1:
- goto inline$BDLGetDebugLevel$233$label_3#1;
-
- inline$BDLGetDebugLevel$233$label_3#1:
- havoc inline$BDLGetDebugLevel$233$myNondetVar_0;
- inline$BDLGetDebugLevel$233$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$233$myNondetVar_0;
- goto inline$BDLGetDebugLevel$233$label_1#1;
-
- inline$BDLGetDebugLevel$233$label_1#1:
- goto inline$BDLGetDebugLevel$233$Return#1;
-
- inline$BDLGetDebugLevel$233$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$ := inline$BDLGetDebugLevel$233$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_88$1#1;
-
- inline$BDLHandleRemove$0$label_88$1#1:
- goto inline$BDLHandleRemove$0$anon54_Then#1, inline$BDLHandleRemove$0$anon54_Else#1;
-
- inline$BDLHandleRemove$0$anon54_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon25#1;
-
- inline$BDLHandleRemove$0$anon25#1:
- goto inline$BDLHandleRemove$0$label_97#1;
-
- inline$BDLHandleRemove$0$label_97#1:
- goto inline$BDLHandleRemove$0$label_97_true#1, inline$BDLHandleRemove$0$label_97_false#1;
-
- inline$BDLHandleRemove$0$label_97_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$) == 0;
- goto inline$BDLHandleRemove$0$label_98#1;
-
- inline$BDLHandleRemove$0$label_97_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$) != 0;
- goto inline$BDLHandleRemove$0$label_101#1;
-
- inline$BDLHandleRemove$0$label_101#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_102#1;
-
- inline$BDLHandleRemove$0$label_102#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_103#1;
-
- inline$BDLHandleRemove$0$label_103#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_104#1;
-
- inline$BDLHandleRemove$0$label_104#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$34$;
- goto inline$BDLHandleRemove$0$label_98#1;
-
- inline$BDLHandleRemove$0$label_98#1:
- goto inline$BDLGetDebugLevel$234$Entry#1;
-
- inline$BDLGetDebugLevel$234$Entry#1:
- goto inline$BDLGetDebugLevel$234$start#1;
-
- inline$BDLGetDebugLevel$234$start#1:
- goto inline$BDLGetDebugLevel$234$label_3#1;
-
- inline$BDLGetDebugLevel$234$label_3#1:
- havoc inline$BDLGetDebugLevel$234$myNondetVar_0;
- inline$BDLGetDebugLevel$234$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$234$myNondetVar_0;
- goto inline$BDLGetDebugLevel$234$label_1#1;
-
- inline$BDLGetDebugLevel$234$label_1#1:
- goto inline$BDLGetDebugLevel$234$Return#1;
-
- inline$BDLGetDebugLevel$234$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$ := inline$BDLGetDebugLevel$234$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_98$1#1;
-
- inline$BDLHandleRemove$0$label_98$1#1:
- goto inline$BDLHandleRemove$0$anon55_Then#1, inline$BDLHandleRemove$0$anon55_Else#1;
-
- inline$BDLHandleRemove$0$anon55_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon27#1;
-
- inline$BDLHandleRemove$0$anon27#1:
- goto inline$BDLHandleRemove$0$label_107#1;
-
- inline$BDLHandleRemove$0$label_107#1:
- goto inline$BDLHandleRemove$0$label_107_true#1, inline$BDLHandleRemove$0$label_107_false#1;
-
- inline$BDLHandleRemove$0$label_107_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$, 4) == 0;
- goto inline$BDLHandleRemove$0$label_81#1;
-
- inline$BDLHandleRemove$0$label_107_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$, 4) != 0;
- goto inline$BDLHandleRemove$0$label_108#1;
-
- inline$BDLHandleRemove$0$label_108#1:
- goto inline$BDLHandleRemove$0$label_81#1;
-
- inline$BDLHandleRemove$0$label_81#1:
- goto inline$IoSkipCurrentIrpStackLocation$0$Entry#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$Entry#1:
- inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1 := inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12;
- goto inline$IoSkipCurrentIrpStackLocation$0$start#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$start#1:
- inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4 := inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1;
- goto inline$IoSkipCurrentIrpStackLocation$0$label_3#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_3#1:
- goto inline$IoSkipCurrentIrpStackLocation$0$label_3_true#1, inline$IoSkipCurrentIrpStackLocation$0$label_3_false#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_3_false#1:
- inline$IoSkipCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoSkipCurrentIrpStackLocation$0$myVar_0, inline$IoSkipCurrentIrpStackLocation$0$myVar_1);
- goto inline$IoSkipCurrentIrpStackLocation$0$label_4#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_4#1:
- call inline$IoSkipCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSkipCurrentIrpStackLocation$0$label_7#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_7#1:
- call inline$IoSkipCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSkipCurrentIrpStackLocation$0$label_8#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_8#1:
- goto inline$IoSkipCurrentIrpStackLocation$0$label_5#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_3_true#1:
- inline$IoSkipCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoSkipCurrentIrpStackLocation$0$myVar_0, inline$IoSkipCurrentIrpStackLocation$0$myVar_1);
- goto inline$IoSkipCurrentIrpStackLocation$0$label_5#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_5#1:
- inline$IoSkipCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$0$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4) := inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0];
- call contextSwitch();
- goto inline$IoSkipCurrentIrpStackLocation$0$label_6#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_6#1:
- havoc inline$IoSkipCurrentIrpStackLocation$0$myNondetVar_0;
- inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$0$myNondetVar_0, 36, 1);
- goto inline$IoSkipCurrentIrpStackLocation$0$label_1#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$label_1#1:
- goto inline$IoSkipCurrentIrpStackLocation$0$Return#1;
-
- inline$IoSkipCurrentIrpStackLocation$0$Return#1:
- goto inline$BDLHandleRemove$0$label_81$1#1;
-
- inline$BDLHandleRemove$0$label_81$1#1:
- goto inline$BDLHandleRemove$0$anon52_Then#1, inline$BDLHandleRemove$0$anon52_Else#1;
-
- inline$BDLHandleRemove$0$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon21#1;
-
- inline$BDLHandleRemove$0$anon21#1:
- goto inline$BDLHandleRemove$0$label_109#1;
-
- inline$BDLHandleRemove$0$label_109#1:
- goto inline$storm_IoCallDriver$4$Entry#1;
-
- inline$storm_IoCallDriver$4$Entry#1:
- inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12;
- goto inline$storm_IoCallDriver$4$start#1;
-
- inline$storm_IoCallDriver$4$start#1:
- inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$4$label_3#1;
-
- inline$storm_IoCallDriver$4$label_3#1:
- goto inline$storm_IoCallDriver$4$label_4#1;
-
- inline$storm_IoCallDriver$4$label_4#1:
- goto inline$storm_IoCallDriver$4$label_5#1;
-
- inline$storm_IoCallDriver$4$label_5#1:
- goto inline$storm_IoCallDriver$4$label_6#1;
-
- inline$storm_IoCallDriver$4$label_6#1:
- call inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$4$label_9#1;
-
- inline$storm_IoCallDriver$4$label_9#1:
- goto inline$storm_IoCallDriver$4$label_9_true#1, inline$storm_IoCallDriver$4$label_9_false#1;
-
- inline$storm_IoCallDriver$4$label_9_false#1:
- assume inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$4$label_10#1;
-
- inline$storm_IoCallDriver$4$label_9_true#1:
- assume inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$4$label_13#1;
-
- inline$storm_IoCallDriver$4$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$4$anon12_Then#1, inline$storm_IoCallDriver$4$anon12_Else#1;
-
- inline$storm_IoCallDriver$4$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$4$anon3#1;
-
- inline$storm_IoCallDriver$4$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$4$label_14#1;
-
- inline$storm_IoCallDriver$4$label_14#1:
- goto inline$storm_IoCallDriver$4$label_14_true#1, inline$storm_IoCallDriver$4$label_14_false#1;
-
- inline$storm_IoCallDriver$4$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$4$label_15#1;
-
- inline$storm_IoCallDriver$4$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$4$label_1#1;
-
- inline$storm_IoCallDriver$4$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$4$label_10#1;
-
- inline$storm_IoCallDriver$4$label_10#1:
- goto inline$IoSetNextIrpStackLocation$5$Entry#1;
-
- inline$IoSetNextIrpStackLocation$5$Entry#1:
- inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$5$start#1;
-
- inline$IoSetNextIrpStackLocation$5$start#1:
- inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$5$label_3#1;
-
- inline$IoSetNextIrpStackLocation$5$label_3#1:
- goto inline$IoSetNextIrpStackLocation$5$label_3_true#1, inline$IoSetNextIrpStackLocation$5$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$5$label_3_false#1:
- inline$IoSetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$5$myVar_0);
- goto inline$IoSetNextIrpStackLocation$5$label_4#1;
-
- inline$IoSetNextIrpStackLocation$5$label_4#1:
- call inline$IoSetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$5$label_7#1;
-
- inline$IoSetNextIrpStackLocation$5$label_7#1:
- call inline$IoSetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$5$label_8#1;
-
- inline$IoSetNextIrpStackLocation$5$label_8#1:
- goto inline$IoSetNextIrpStackLocation$5$label_5#1;
-
- inline$IoSetNextIrpStackLocation$5$label_3_true#1:
- inline$IoSetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$5$myVar_0);
- goto inline$IoSetNextIrpStackLocation$5$label_5#1;
-
- inline$IoSetNextIrpStackLocation$5$label_5#1:
- inline$IoSetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$5$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$5$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$5$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$5$label_6#1;
-
- inline$IoSetNextIrpStackLocation$5$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$5$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$5$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$5$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$5$label_1#1;
-
- inline$IoSetNextIrpStackLocation$5$label_1#1:
- goto inline$IoSetNextIrpStackLocation$5$Return#1;
-
- inline$IoSetNextIrpStackLocation$5$Return#1:
- goto inline$storm_IoCallDriver$4$label_10$1#1;
-
- inline$storm_IoCallDriver$4$label_10$1#1:
- goto inline$storm_IoCallDriver$4$anon11_Then#1, inline$storm_IoCallDriver$4$anon11_Else#1;
-
- inline$storm_IoCallDriver$4$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$4$anon1#1;
-
- inline$storm_IoCallDriver$4$anon1#1:
- goto inline$storm_IoCallDriver$4$label_18#1;
-
- inline$storm_IoCallDriver$4$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$43$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$43$Entry#1:
- inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$43$start#1;
-
- inline$IoGetCurrentIrpStackLocation$43$start#1:
- inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$43$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$43$label_3_true#1, inline$IoGetCurrentIrpStackLocation$43$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$43$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$43$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$43$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$43$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$43$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$43$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$43$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$43$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$43$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$43$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$43$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$43$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$43$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$43$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$43$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$43$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$43$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$43$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$43$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$43$Return#1:
- goto inline$storm_IoCallDriver$4$label_18$1#1;
-
- inline$storm_IoCallDriver$4$label_18$1#1:
- goto inline$storm_IoCallDriver$4$anon13_Then#1, inline$storm_IoCallDriver$4$anon13_Else#1;
-
- inline$storm_IoCallDriver$4$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$4$anon6#1;
-
- inline$storm_IoCallDriver$4$anon6#1:
- goto inline$storm_IoCallDriver$4$label_21#1;
-
- inline$storm_IoCallDriver$4$label_21#1:
- goto inline$storm_IoCallDriver$4$label_22#1;
-
- inline$storm_IoCallDriver$4$label_22#1:
- goto inline$storm_IoCallDriver$4$label_23#1;
-
- inline$storm_IoCallDriver$4$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$4$label_24#1;
-
- inline$storm_IoCallDriver$4$label_24#1:
- call inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$4$label_27#1;
-
- inline$storm_IoCallDriver$4$label_27#1:
- goto inline$storm_IoCallDriver$4$label_27_case_0#1, inline$storm_IoCallDriver$4$label_27_case_1#1, inline$storm_IoCallDriver$4$label_27_case_2#1;
-
- inline$storm_IoCallDriver$4$label_27_case_2#1:
- assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$4$label_30#1;
-
- inline$storm_IoCallDriver$4$label_30#1:
- inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$4$label_31#1;
-
- inline$storm_IoCallDriver$4$label_31#1:
- goto inline$storm_IoCallDriver$4$label_32#1;
-
- inline$storm_IoCallDriver$4$label_32#1:
- goto inline$storm_IoCallDriver$4$label_33#1;
-
- inline$storm_IoCallDriver$4$label_33#1:
- goto inline$CallCompletionRoutine$8$Entry#1;
-
- inline$CallCompletionRoutine$8$Entry#1:
- inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$8$start#1;
-
- inline$CallCompletionRoutine$8$start#1:
- inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$8$label_3#1;
-
- inline$CallCompletionRoutine$8$label_3#1:
- goto inline$CallCompletionRoutine$8$label_4#1;
-
- inline$CallCompletionRoutine$8$label_4#1:
- goto inline$CallCompletionRoutine$8$label_5#1;
-
- inline$CallCompletionRoutine$8$label_5#1:
- goto inline$CallCompletionRoutine$8$label_6#1;
-
- inline$CallCompletionRoutine$8$label_6#1:
- goto inline$CallCompletionRoutine$8$label_7#1;
-
- inline$CallCompletionRoutine$8$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$44$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$44$Entry#1:
- inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$44$start#1;
-
- inline$IoGetCurrentIrpStackLocation$44$start#1:
- inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$44$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$44$label_3_true#1, inline$IoGetCurrentIrpStackLocation$44$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$44$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$44$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$44$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$44$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$44$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$44$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$44$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$44$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$44$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$44$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$44$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$44$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$44$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$44$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$44$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$44$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$44$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$44$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$44$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$44$Return#1:
- goto inline$CallCompletionRoutine$8$label_7$1#1;
-
- inline$CallCompletionRoutine$8$label_7$1#1:
- goto inline$CallCompletionRoutine$8$anon10_Then#1, inline$CallCompletionRoutine$8$anon10_Else#1;
-
- inline$CallCompletionRoutine$8$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$8$anon1#1;
-
- inline$CallCompletionRoutine$8$anon1#1:
- goto inline$CallCompletionRoutine$8$label_10#1;
-
- inline$CallCompletionRoutine$8$label_10#1:
- goto inline$CallCompletionRoutine$8$label_11#1;
-
- inline$CallCompletionRoutine$8$label_11#1:
- havoc inline$CallCompletionRoutine$8$myNondetVar_0;
- inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$myNondetVar_0;
- goto inline$CallCompletionRoutine$8$label_12#1;
-
- inline$CallCompletionRoutine$8$label_12#1:
- havoc inline$CallCompletionRoutine$8$myNondetVar_0;
- inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$myNondetVar_0;
- goto inline$CallCompletionRoutine$8$label_13#1;
-
- inline$CallCompletionRoutine$8$label_13#1:
- havoc inline$CallCompletionRoutine$8$myNondetVar_0;
- goto inline$CallCompletionRoutine$8$label_14#1;
-
- inline$CallCompletionRoutine$8$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$45$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$45$Entry#1:
- inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$45$start#1;
-
- inline$IoGetCurrentIrpStackLocation$45$start#1:
- inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$45$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$45$label_3_true#1, inline$IoGetCurrentIrpStackLocation$45$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$45$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$45$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$45$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$45$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$45$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$45$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$45$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$45$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$45$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$45$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$45$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$45$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$45$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$45$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$45$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$45$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$45$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$45$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$45$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$45$Return#1:
- goto inline$CallCompletionRoutine$8$label_14$1#1;
-
- inline$CallCompletionRoutine$8$label_14$1#1:
- goto inline$CallCompletionRoutine$8$anon11_Then#1, inline$CallCompletionRoutine$8$anon11_Else#1;
-
- inline$CallCompletionRoutine$8$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$8$anon3#1;
-
- inline$CallCompletionRoutine$8$anon3#1:
- goto inline$CallCompletionRoutine$8$label_17#1;
-
- inline$CallCompletionRoutine$8$label_17#1:
- goto inline$CallCompletionRoutine$8$label_18#1;
-
- inline$CallCompletionRoutine$8$label_18#1:
- goto inline$CallCompletionRoutine$8$label_18_true#1, inline$CallCompletionRoutine$8$label_18_false#1;
-
- inline$CallCompletionRoutine$8$label_18_false#1:
- assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$8$label_1#1;
-
- inline$CallCompletionRoutine$8$label_18_true#1:
- assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$8$label_19#1;
-
- inline$CallCompletionRoutine$8$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$8$label_20#1;
-
- inline$CallCompletionRoutine$8$label_20#1:
- goto inline$CallCompletionRoutine$8$label_20_icall_1#1, inline$CallCompletionRoutine$8$label_20_icall_2#1, inline$CallCompletionRoutine$8$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$8$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$8$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$8$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$8$Entry#1:
- inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$8$start#1;
-
- inline$BDLSystemPowerIoCompletion$8$start#1:
- call inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$8$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_4#1:
- inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_6#1:
- inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$8$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$8$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$8$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$47$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$47$Entry#1:
- inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$47$start#1;
-
- inline$IoGetCurrentIrpStackLocation$47$start#1:
- inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$47$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$47$label_3_true#1, inline$IoGetCurrentIrpStackLocation$47$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$47$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$47$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$47$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$47$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$47$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$47$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$47$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$47$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$47$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$47$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$47$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$47$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$47$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$47$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$47$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$47$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$47$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$47$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$47$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$47$Return#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon36_Then#1, inline$BDLSystemPowerIoCompletion$8$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_15#1:
- goto inline$BDLGetDebugLevel$244$Entry#1;
-
- inline$BDLGetDebugLevel$244$Entry#1:
- goto inline$BDLGetDebugLevel$244$start#1;
-
- inline$BDLGetDebugLevel$244$start#1:
- goto inline$BDLGetDebugLevel$244$label_3#1;
-
- inline$BDLGetDebugLevel$244$label_3#1:
- havoc inline$BDLGetDebugLevel$244$myNondetVar_0;
- inline$BDLGetDebugLevel$244$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$244$myNondetVar_0;
- goto inline$BDLGetDebugLevel$244$label_1#1;
-
- inline$BDLGetDebugLevel$244$label_1#1:
- goto inline$BDLGetDebugLevel$244$Return#1;
-
- inline$BDLGetDebugLevel$244$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$244$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon37_Then#1, inline$BDLSystemPowerIoCompletion$8$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_18_true#1, inline$BDLSystemPowerIoCompletion$8$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_22#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_23#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_24#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$8$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_19#1:
- goto inline$BDLGetDebugLevel$245$Entry#1;
-
- inline$BDLGetDebugLevel$245$Entry#1:
- goto inline$BDLGetDebugLevel$245$start#1;
-
- inline$BDLGetDebugLevel$245$start#1:
- goto inline$BDLGetDebugLevel$245$label_3#1;
-
- inline$BDLGetDebugLevel$245$label_3#1:
- havoc inline$BDLGetDebugLevel$245$myNondetVar_0;
- inline$BDLGetDebugLevel$245$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$245$myNondetVar_0;
- goto inline$BDLGetDebugLevel$245$label_1#1;
-
- inline$BDLGetDebugLevel$245$label_1#1:
- goto inline$BDLGetDebugLevel$245$Return#1;
-
- inline$BDLGetDebugLevel$245$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$245$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon38_Then#1, inline$BDLSystemPowerIoCompletion$8$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_28_true#1, inline$BDLSystemPowerIoCompletion$8$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_32#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_33#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_34#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$8$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_29#1:
- goto inline$BDLGetDebugLevel$246$Entry#1;
-
- inline$BDLGetDebugLevel$246$Entry#1:
- goto inline$BDLGetDebugLevel$246$start#1;
-
- inline$BDLGetDebugLevel$246$start#1:
- goto inline$BDLGetDebugLevel$246$label_3#1;
-
- inline$BDLGetDebugLevel$246$label_3#1:
- havoc inline$BDLGetDebugLevel$246$myNondetVar_0;
- inline$BDLGetDebugLevel$246$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$246$myNondetVar_0;
- goto inline$BDLGetDebugLevel$246$label_1#1;
-
- inline$BDLGetDebugLevel$246$label_1#1:
- goto inline$BDLGetDebugLevel$246$Return#1;
-
- inline$BDLGetDebugLevel$246$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$246$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon39_Then#1, inline$BDLSystemPowerIoCompletion$8$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_38_true#1, inline$BDLSystemPowerIoCompletion$8$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_39_true#1, inline$BDLSystemPowerIoCompletion$8$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$8$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$8$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$8$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_106_true#1, inline$BDLSystemPowerIoCompletion$8$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_142#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_143#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$8$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$8$myNondetVar_0, inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$8$anon50_Then#1, inline$BDLSystemPowerIoCompletion$8$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_112#1:
- inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$8$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_113_true#1, inline$BDLSystemPowerIoCompletion$8$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$8$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_117#1:
- goto inline$BDLGetDebugLevel$253$Entry#1;
-
- inline$BDLGetDebugLevel$253$Entry#1:
- goto inline$BDLGetDebugLevel$253$start#1;
-
- inline$BDLGetDebugLevel$253$start#1:
- goto inline$BDLGetDebugLevel$253$label_3#1;
-
- inline$BDLGetDebugLevel$253$label_3#1:
- havoc inline$BDLGetDebugLevel$253$myNondetVar_0;
- inline$BDLGetDebugLevel$253$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$253$myNondetVar_0;
- goto inline$BDLGetDebugLevel$253$label_1#1;
-
- inline$BDLGetDebugLevel$253$label_1#1:
- goto inline$BDLGetDebugLevel$253$Return#1;
-
- inline$BDLGetDebugLevel$253$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$253$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon51_Then#1, inline$BDLSystemPowerIoCompletion$8$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_120_true#1, inline$BDLSystemPowerIoCompletion$8$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_124#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_125#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_126#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$8$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_121#1:
- goto inline$BDLGetDebugLevel$254$Entry#1;
-
- inline$BDLGetDebugLevel$254$Entry#1:
- goto inline$BDLGetDebugLevel$254$start#1;
-
- inline$BDLGetDebugLevel$254$start#1:
- goto inline$BDLGetDebugLevel$254$label_3#1;
-
- inline$BDLGetDebugLevel$254$label_3#1:
- havoc inline$BDLGetDebugLevel$254$myNondetVar_0;
- inline$BDLGetDebugLevel$254$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$254$myNondetVar_0;
- goto inline$BDLGetDebugLevel$254$label_1#1;
-
- inline$BDLGetDebugLevel$254$label_1#1:
- goto inline$BDLGetDebugLevel$254$Return#1;
-
- inline$BDLGetDebugLevel$254$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$254$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon52_Then#1, inline$BDLSystemPowerIoCompletion$8$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_130_true#1, inline$BDLSystemPowerIoCompletion$8$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_134#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_135#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_136#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$8$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_131#1:
- goto inline$BDLGetDebugLevel$255$Entry#1;
-
- inline$BDLGetDebugLevel$255$Entry#1:
- goto inline$BDLGetDebugLevel$255$start#1;
-
- inline$BDLGetDebugLevel$255$start#1:
- goto inline$BDLGetDebugLevel$255$label_3#1;
-
- inline$BDLGetDebugLevel$255$label_3#1:
- havoc inline$BDLGetDebugLevel$255$myNondetVar_0;
- inline$BDLGetDebugLevel$255$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$255$myNondetVar_0;
- goto inline$BDLGetDebugLevel$255$label_1#1;
-
- inline$BDLGetDebugLevel$255$label_1#1:
- goto inline$BDLGetDebugLevel$255$Return#1;
-
- inline$BDLGetDebugLevel$255$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$255$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon53_Then#1, inline$BDLSystemPowerIoCompletion$8$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_140_true#1, inline$BDLSystemPowerIoCompletion$8$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$8$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_115#1:
- inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$8$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$8$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_43#1:
- goto inline$BDLGetDebugLevel$247$Entry#1;
-
- inline$BDLGetDebugLevel$247$Entry#1:
- goto inline$BDLGetDebugLevel$247$start#1;
-
- inline$BDLGetDebugLevel$247$start#1:
- goto inline$BDLGetDebugLevel$247$label_3#1;
-
- inline$BDLGetDebugLevel$247$label_3#1:
- havoc inline$BDLGetDebugLevel$247$myNondetVar_0;
- inline$BDLGetDebugLevel$247$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$247$myNondetVar_0;
- goto inline$BDLGetDebugLevel$247$label_1#1;
-
- inline$BDLGetDebugLevel$247$label_1#1:
- goto inline$BDLGetDebugLevel$247$Return#1;
-
- inline$BDLGetDebugLevel$247$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$247$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon40_Then#1, inline$BDLSystemPowerIoCompletion$8$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_46_true#1, inline$BDLSystemPowerIoCompletion$8$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_50#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_51#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_52#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$8$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_47#1:
- goto inline$BDLGetDebugLevel$248$Entry#1;
-
- inline$BDLGetDebugLevel$248$Entry#1:
- goto inline$BDLGetDebugLevel$248$start#1;
-
- inline$BDLGetDebugLevel$248$start#1:
- goto inline$BDLGetDebugLevel$248$label_3#1;
-
- inline$BDLGetDebugLevel$248$label_3#1:
- havoc inline$BDLGetDebugLevel$248$myNondetVar_0;
- inline$BDLGetDebugLevel$248$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$248$myNondetVar_0;
- goto inline$BDLGetDebugLevel$248$label_1#1;
-
- inline$BDLGetDebugLevel$248$label_1#1:
- goto inline$BDLGetDebugLevel$248$Return#1;
-
- inline$BDLGetDebugLevel$248$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$248$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon41_Then#1, inline$BDLSystemPowerIoCompletion$8$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_56_true#1, inline$BDLSystemPowerIoCompletion$8$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_60#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_61#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_62#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$8$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_57#1:
- goto inline$BDLGetDebugLevel$249$Entry#1;
-
- inline$BDLGetDebugLevel$249$Entry#1:
- goto inline$BDLGetDebugLevel$249$start#1;
-
- inline$BDLGetDebugLevel$249$start#1:
- goto inline$BDLGetDebugLevel$249$label_3#1;
-
- inline$BDLGetDebugLevel$249$label_3#1:
- havoc inline$BDLGetDebugLevel$249$myNondetVar_0;
- inline$BDLGetDebugLevel$249$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$249$myNondetVar_0;
- goto inline$BDLGetDebugLevel$249$label_1#1;
-
- inline$BDLGetDebugLevel$249$label_1#1:
- goto inline$BDLGetDebugLevel$249$Return#1;
-
- inline$BDLGetDebugLevel$249$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$249$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon42_Then#1, inline$BDLSystemPowerIoCompletion$8$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_66_true#1, inline$BDLSystemPowerIoCompletion$8$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$8$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$8$anon43_Then#1, inline$BDLSystemPowerIoCompletion$8$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$8$anon44_Then#1, inline$BDLSystemPowerIoCompletion$8$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_74#1:
- goto inline$storm_IoCompleteRequest$18$Entry#1;
-
- inline$storm_IoCompleteRequest$18$Entry#1:
- inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$18$start#1;
-
- inline$storm_IoCompleteRequest$18$start#1:
- inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$18$label_3#1;
-
- inline$storm_IoCompleteRequest$18$label_3#1:
- call inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$18$label_6#1;
-
- inline$storm_IoCompleteRequest$18$label_6#1:
- goto inline$storm_IoCompleteRequest$18$label_6_true#1, inline$storm_IoCompleteRequest$18$label_6_false#1;
-
- inline$storm_IoCompleteRequest$18$label_6_false#1:
- assume inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$18$label_7#1;
-
- inline$storm_IoCompleteRequest$18$label_6_true#1:
- assume inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$18$label_8#1;
-
- inline$storm_IoCompleteRequest$18$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$18$anon3_Then#1, inline$storm_IoCompleteRequest$18$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$18$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$18$anon1#1;
-
- inline$storm_IoCompleteRequest$18$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$18$label_9#1;
-
- inline$storm_IoCompleteRequest$18$label_9#1:
- goto inline$storm_IoCompleteRequest$18$label_9_true#1, inline$storm_IoCompleteRequest$18$label_9_false#1;
-
- inline$storm_IoCompleteRequest$18$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$18$label_10#1;
-
- inline$storm_IoCompleteRequest$18$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$18$label_1#1;
-
- inline$storm_IoCompleteRequest$18$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$18$label_7#1;
-
- inline$storm_IoCompleteRequest$18$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$18$label_1#1;
-
- inline$storm_IoCompleteRequest$18$label_1#1:
- goto inline$storm_IoCompleteRequest$18$Return#1;
-
- inline$storm_IoCompleteRequest$18$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$18$Return#1;
-
- inline$storm_IoCompleteRequest$18$Return#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon45_Then#1, inline$BDLSystemPowerIoCompletion$8$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$8$anon46_Then#1, inline$BDLSystemPowerIoCompletion$8$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_80#1:
- goto inline$BDLGetDebugLevel$250$Entry#1;
-
- inline$BDLGetDebugLevel$250$Entry#1:
- goto inline$BDLGetDebugLevel$250$start#1;
-
- inline$BDLGetDebugLevel$250$start#1:
- goto inline$BDLGetDebugLevel$250$label_3#1;
-
- inline$BDLGetDebugLevel$250$label_3#1:
- havoc inline$BDLGetDebugLevel$250$myNondetVar_0;
- inline$BDLGetDebugLevel$250$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$250$myNondetVar_0;
- goto inline$BDLGetDebugLevel$250$label_1#1;
-
- inline$BDLGetDebugLevel$250$label_1#1:
- goto inline$BDLGetDebugLevel$250$Return#1;
-
- inline$BDLGetDebugLevel$250$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$250$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon47_Then#1, inline$BDLSystemPowerIoCompletion$8$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_83_true#1, inline$BDLSystemPowerIoCompletion$8$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_87#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_88#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_89#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$8$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_84#1:
- goto inline$BDLGetDebugLevel$251$Entry#1;
-
- inline$BDLGetDebugLevel$251$Entry#1:
- goto inline$BDLGetDebugLevel$251$start#1;
-
- inline$BDLGetDebugLevel$251$start#1:
- goto inline$BDLGetDebugLevel$251$label_3#1;
-
- inline$BDLGetDebugLevel$251$label_3#1:
- havoc inline$BDLGetDebugLevel$251$myNondetVar_0;
- inline$BDLGetDebugLevel$251$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$251$myNondetVar_0;
- goto inline$BDLGetDebugLevel$251$label_1#1;
-
- inline$BDLGetDebugLevel$251$label_1#1:
- goto inline$BDLGetDebugLevel$251$Return#1;
-
- inline$BDLGetDebugLevel$251$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$251$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon48_Then#1, inline$BDLSystemPowerIoCompletion$8$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_93_true#1, inline$BDLSystemPowerIoCompletion$8$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_97#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_98#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_99#1:
- call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$8$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$8$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_94#1:
- goto inline$BDLGetDebugLevel$252$Entry#1;
-
- inline$BDLGetDebugLevel$252$Entry#1:
- goto inline$BDLGetDebugLevel$252$start#1;
-
- inline$BDLGetDebugLevel$252$start#1:
- goto inline$BDLGetDebugLevel$252$label_3#1;
-
- inline$BDLGetDebugLevel$252$label_3#1:
- havoc inline$BDLGetDebugLevel$252$myNondetVar_0;
- inline$BDLGetDebugLevel$252$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$252$myNondetVar_0;
- goto inline$BDLGetDebugLevel$252$label_1#1;
-
- inline$BDLGetDebugLevel$252$label_1#1:
- goto inline$BDLGetDebugLevel$252$Return#1;
-
- inline$BDLGetDebugLevel$252$Return#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$252$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$8$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$8$anon49_Then#1, inline$BDLSystemPowerIoCompletion$8$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_103_true#1, inline$BDLSystemPowerIoCompletion$8$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$8$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$8$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_104#1:
- inline$BDLSystemPowerIoCompletion$8$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$8$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$8$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$8$Return#1;
-
- inline$BDLSystemPowerIoCompletion$8$Return#1:
- inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$8$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$8$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$8$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$8$anon14_Then#1, inline$CallCompletionRoutine$8$anon14_Else#1;
-
- inline$CallCompletionRoutine$8$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$8$anon9#1;
-
- inline$CallCompletionRoutine$8$anon9#1:
- goto inline$CallCompletionRoutine$8$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$8$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$8$Return#1;
-
- inline$CallCompletionRoutine$8$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$8$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$8$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$8$Entry#1:
- inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$8$start#1;
-
- inline$BDLDevicePowerIoCompletion$8$start#1:
- call inline$BDLDevicePowerIoCompletion$8$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$8$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_4#1:
- inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_6#1:
- inline$BDLDevicePowerIoCompletion$8$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$8$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$8$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$8$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$46$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$46$Entry#1:
- inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$46$start#1;
-
- inline$IoGetCurrentIrpStackLocation$46$start#1:
- inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$46$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$46$label_3_true#1, inline$IoGetCurrentIrpStackLocation$46$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$46$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$46$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$46$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$46$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$46$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$46$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$46$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$46$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$46$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$46$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$46$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$46$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$46$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$46$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$46$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$46$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$46$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$46$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$46$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$46$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$46$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$46$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$46$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon30_Then#1, inline$BDLDevicePowerIoCompletion$8$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_13#1:
- inline$BDLDevicePowerIoCompletion$8$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$8$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$8$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_17#1:
- goto inline$BDLGetDebugLevel$235$Entry#1;
-
- inline$BDLGetDebugLevel$235$Entry#1:
- goto inline$BDLGetDebugLevel$235$start#1;
-
- inline$BDLGetDebugLevel$235$start#1:
- goto inline$BDLGetDebugLevel$235$label_3#1;
-
- inline$BDLGetDebugLevel$235$label_3#1:
- havoc inline$BDLGetDebugLevel$235$myNondetVar_0;
- inline$BDLGetDebugLevel$235$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$235$myNondetVar_0;
- goto inline$BDLGetDebugLevel$235$label_1#1;
-
- inline$BDLGetDebugLevel$235$label_1#1:
- goto inline$BDLGetDebugLevel$235$Return#1;
-
- inline$BDLGetDebugLevel$235$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$235$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon31_Then#1, inline$BDLDevicePowerIoCompletion$8$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_20_true#1, inline$BDLDevicePowerIoCompletion$8$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_24#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_25#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_26#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$8$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_21#1:
- goto inline$BDLGetDebugLevel$236$Entry#1;
-
- inline$BDLGetDebugLevel$236$Entry#1:
- goto inline$BDLGetDebugLevel$236$start#1;
-
- inline$BDLGetDebugLevel$236$start#1:
- goto inline$BDLGetDebugLevel$236$label_3#1;
-
- inline$BDLGetDebugLevel$236$label_3#1:
- havoc inline$BDLGetDebugLevel$236$myNondetVar_0;
- inline$BDLGetDebugLevel$236$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$236$myNondetVar_0;
- goto inline$BDLGetDebugLevel$236$label_1#1;
-
- inline$BDLGetDebugLevel$236$label_1#1:
- goto inline$BDLGetDebugLevel$236$Return#1;
-
- inline$BDLGetDebugLevel$236$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$236$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon32_Then#1, inline$BDLDevicePowerIoCompletion$8$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_30_true#1, inline$BDLDevicePowerIoCompletion$8$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_34#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_35#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_36#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$8$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_31#1:
- goto inline$BDLGetDebugLevel$237$Entry#1;
-
- inline$BDLGetDebugLevel$237$Entry#1:
- goto inline$BDLGetDebugLevel$237$start#1;
-
- inline$BDLGetDebugLevel$237$start#1:
- goto inline$BDLGetDebugLevel$237$label_3#1;
-
- inline$BDLGetDebugLevel$237$label_3#1:
- havoc inline$BDLGetDebugLevel$237$myNondetVar_0;
- inline$BDLGetDebugLevel$237$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$237$myNondetVar_0;
- goto inline$BDLGetDebugLevel$237$label_1#1;
-
- inline$BDLGetDebugLevel$237$label_1#1:
- goto inline$BDLGetDebugLevel$237$Return#1;
-
- inline$BDLGetDebugLevel$237$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$237$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon33_Then#1, inline$BDLDevicePowerIoCompletion$8$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_40_true#1, inline$BDLDevicePowerIoCompletion$8$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_41_true#1, inline$BDLDevicePowerIoCompletion$8$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$8$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$8$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_44_true#1, inline$BDLDevicePowerIoCompletion$8$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$8$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_45_true#1, inline$BDLDevicePowerIoCompletion$8$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$8$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$8$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$8$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$8$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$8$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$8$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_54#1:
- inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$8$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_55_true#1, inline$BDLDevicePowerIoCompletion$8$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_56#1:
- call inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$8$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$8$anon34_Then#1, inline$BDLDevicePowerIoCompletion$8$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_59#1:
- goto inline$BDLGetDebugLevel$238$Entry#1;
-
- inline$BDLGetDebugLevel$238$Entry#1:
- goto inline$BDLGetDebugLevel$238$start#1;
-
- inline$BDLGetDebugLevel$238$start#1:
- goto inline$BDLGetDebugLevel$238$label_3#1;
-
- inline$BDLGetDebugLevel$238$label_3#1:
- havoc inline$BDLGetDebugLevel$238$myNondetVar_0;
- inline$BDLGetDebugLevel$238$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$238$myNondetVar_0;
- goto inline$BDLGetDebugLevel$238$label_1#1;
-
- inline$BDLGetDebugLevel$238$label_1#1:
- goto inline$BDLGetDebugLevel$238$Return#1;
-
- inline$BDLGetDebugLevel$238$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$238$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon35_Then#1, inline$BDLDevicePowerIoCompletion$8$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_62_true#1, inline$BDLDevicePowerIoCompletion$8$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_66#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_67#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_68#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$8$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_63#1:
- goto inline$BDLGetDebugLevel$239$Entry#1;
-
- inline$BDLGetDebugLevel$239$Entry#1:
- goto inline$BDLGetDebugLevel$239$start#1;
-
- inline$BDLGetDebugLevel$239$start#1:
- goto inline$BDLGetDebugLevel$239$label_3#1;
-
- inline$BDLGetDebugLevel$239$label_3#1:
- havoc inline$BDLGetDebugLevel$239$myNondetVar_0;
- inline$BDLGetDebugLevel$239$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$239$myNondetVar_0;
- goto inline$BDLGetDebugLevel$239$label_1#1;
-
- inline$BDLGetDebugLevel$239$label_1#1:
- goto inline$BDLGetDebugLevel$239$Return#1;
-
- inline$BDLGetDebugLevel$239$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$239$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon36_Then#1, inline$BDLDevicePowerIoCompletion$8$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_72_true#1, inline$BDLDevicePowerIoCompletion$8$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_76#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_77#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_78#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$8$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_73#1:
- goto inline$BDLGetDebugLevel$240$Entry#1;
-
- inline$BDLGetDebugLevel$240$Entry#1:
- goto inline$BDLGetDebugLevel$240$start#1;
-
- inline$BDLGetDebugLevel$240$start#1:
- goto inline$BDLGetDebugLevel$240$label_3#1;
-
- inline$BDLGetDebugLevel$240$label_3#1:
- havoc inline$BDLGetDebugLevel$240$myNondetVar_0;
- inline$BDLGetDebugLevel$240$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$240$myNondetVar_0;
- goto inline$BDLGetDebugLevel$240$label_1#1;
-
- inline$BDLGetDebugLevel$240$label_1#1:
- goto inline$BDLGetDebugLevel$240$Return#1;
-
- inline$BDLGetDebugLevel$240$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$240$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon37_Then#1, inline$BDLDevicePowerIoCompletion$8$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_82_true#1, inline$BDLDevicePowerIoCompletion$8$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$8$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$8$anon38_Then#1, inline$BDLDevicePowerIoCompletion$8$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$8$anon39_Then#1, inline$BDLDevicePowerIoCompletion$8$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_92#1:
- goto inline$storm_IoCompleteRequest$17$Entry#1;
-
- inline$storm_IoCompleteRequest$17$Entry#1:
- inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$17$start#1;
-
- inline$storm_IoCompleteRequest$17$start#1:
- inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$17$label_3#1;
-
- inline$storm_IoCompleteRequest$17$label_3#1:
- call inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$17$label_6#1;
-
- inline$storm_IoCompleteRequest$17$label_6#1:
- goto inline$storm_IoCompleteRequest$17$label_6_true#1, inline$storm_IoCompleteRequest$17$label_6_false#1;
-
- inline$storm_IoCompleteRequest$17$label_6_false#1:
- assume inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$17$label_7#1;
-
- inline$storm_IoCompleteRequest$17$label_6_true#1:
- assume inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$17$label_8#1;
-
- inline$storm_IoCompleteRequest$17$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$17$anon3_Then#1, inline$storm_IoCompleteRequest$17$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$17$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$17$anon1#1;
-
- inline$storm_IoCompleteRequest$17$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$17$label_9#1;
-
- inline$storm_IoCompleteRequest$17$label_9#1:
- goto inline$storm_IoCompleteRequest$17$label_9_true#1, inline$storm_IoCompleteRequest$17$label_9_false#1;
-
- inline$storm_IoCompleteRequest$17$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$17$label_10#1;
-
- inline$storm_IoCompleteRequest$17$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$17$label_1#1;
-
- inline$storm_IoCompleteRequest$17$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$17$label_7#1;
-
- inline$storm_IoCompleteRequest$17$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$17$label_1#1;
-
- inline$storm_IoCompleteRequest$17$label_1#1:
- goto inline$storm_IoCompleteRequest$17$Return#1;
-
- inline$storm_IoCompleteRequest$17$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$17$Return#1;
-
- inline$storm_IoCompleteRequest$17$Return#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon40_Then#1, inline$BDLDevicePowerIoCompletion$8$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$8$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$8$anon41_Then#1, inline$BDLDevicePowerIoCompletion$8$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_98#1:
- goto inline$BDLGetDebugLevel$241$Entry#1;
-
- inline$BDLGetDebugLevel$241$Entry#1:
- goto inline$BDLGetDebugLevel$241$start#1;
-
- inline$BDLGetDebugLevel$241$start#1:
- goto inline$BDLGetDebugLevel$241$label_3#1;
-
- inline$BDLGetDebugLevel$241$label_3#1:
- havoc inline$BDLGetDebugLevel$241$myNondetVar_0;
- inline$BDLGetDebugLevel$241$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$241$myNondetVar_0;
- goto inline$BDLGetDebugLevel$241$label_1#1;
-
- inline$BDLGetDebugLevel$241$label_1#1:
- goto inline$BDLGetDebugLevel$241$Return#1;
-
- inline$BDLGetDebugLevel$241$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$241$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon42_Then#1, inline$BDLDevicePowerIoCompletion$8$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_101_true#1, inline$BDLDevicePowerIoCompletion$8$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_105#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_106#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_107#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$8$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_102#1:
- goto inline$BDLGetDebugLevel$242$Entry#1;
-
- inline$BDLGetDebugLevel$242$Entry#1:
- goto inline$BDLGetDebugLevel$242$start#1;
-
- inline$BDLGetDebugLevel$242$start#1:
- goto inline$BDLGetDebugLevel$242$label_3#1;
-
- inline$BDLGetDebugLevel$242$label_3#1:
- havoc inline$BDLGetDebugLevel$242$myNondetVar_0;
- inline$BDLGetDebugLevel$242$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$242$myNondetVar_0;
- goto inline$BDLGetDebugLevel$242$label_1#1;
-
- inline$BDLGetDebugLevel$242$label_1#1:
- goto inline$BDLGetDebugLevel$242$Return#1;
-
- inline$BDLGetDebugLevel$242$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$242$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon43_Then#1, inline$BDLDevicePowerIoCompletion$8$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_111_true#1, inline$BDLDevicePowerIoCompletion$8$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_115#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_116#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_117#1:
- call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$8$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$8$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_112#1:
- goto inline$BDLGetDebugLevel$243$Entry#1;
-
- inline$BDLGetDebugLevel$243$Entry#1:
- goto inline$BDLGetDebugLevel$243$start#1;
-
- inline$BDLGetDebugLevel$243$start#1:
- goto inline$BDLGetDebugLevel$243$label_3#1;
-
- inline$BDLGetDebugLevel$243$label_3#1:
- havoc inline$BDLGetDebugLevel$243$myNondetVar_0;
- inline$BDLGetDebugLevel$243$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$243$myNondetVar_0;
- goto inline$BDLGetDebugLevel$243$label_1#1;
-
- inline$BDLGetDebugLevel$243$label_1#1:
- goto inline$BDLGetDebugLevel$243$Return#1;
-
- inline$BDLGetDebugLevel$243$Return#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$243$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$8$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$8$anon44_Then#1, inline$BDLDevicePowerIoCompletion$8$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_121_true#1, inline$BDLDevicePowerIoCompletion$8$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$8$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$8$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_122#1:
- inline$BDLDevicePowerIoCompletion$8$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$8$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$8$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$8$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$8$Return#1;
-
- inline$BDLDevicePowerIoCompletion$8$Return#1:
- inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$8$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$8$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$8$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$8$anon13_Then#1, inline$CallCompletionRoutine$8$anon13_Else#1;
-
- inline$CallCompletionRoutine$8$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$8$anon7#1;
-
- inline$CallCompletionRoutine$8$anon7#1:
- goto inline$CallCompletionRoutine$8$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$8$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$8$Return#1;
-
- inline$CallCompletionRoutine$8$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$8$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$8$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$8$Entry#1:
- inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$8$start#1;
-
- inline$BDLCallDriverCompletionRoutine$8$start#1:
- inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$8$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$8$label_3_true#1, inline$BDLCallDriverCompletionRoutine$8$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$8$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$8$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$8$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$8$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_6#1:
- goto inline$storm_KeSetEvent$10$Entry#1;
-
- inline$storm_KeSetEvent$10$Entry#1:
- inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$10$start#1;
-
- inline$storm_KeSetEvent$10$start#1:
- inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$10$label_3#1;
-
- inline$storm_KeSetEvent$10$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$10$label_1#1;
-
- inline$storm_KeSetEvent$10$label_1#1:
- goto inline$storm_KeSetEvent$10$Return#1;
-
- inline$storm_KeSetEvent$10$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$8$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$8$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$8$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$8$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$8$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$8$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$8$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_9#1:
- inline$BDLCallDriverCompletionRoutine$8$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$8$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$8$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$8$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$8$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$8$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$8$Return#1:
- inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$8$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$8$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$8$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$8$anon12_Then#1, inline$CallCompletionRoutine$8$anon12_Else#1;
-
- inline$CallCompletionRoutine$8$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$8$anon5#1;
-
- inline$CallCompletionRoutine$8$anon5#1:
- goto inline$CallCompletionRoutine$8$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$8$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$8$label_23#1;
-
- inline$CallCompletionRoutine$8$label_23#1:
- inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$8$label_24#1;
-
- inline$CallCompletionRoutine$8$label_24#1:
- goto inline$CallCompletionRoutine$8$label_24_true#1, inline$CallCompletionRoutine$8$label_24_false#1;
-
- inline$CallCompletionRoutine$8$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$8$label_1#1;
-
- inline$CallCompletionRoutine$8$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$8$label_25#1;
-
- inline$CallCompletionRoutine$8$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$8$label_1#1;
-
- inline$CallCompletionRoutine$8$label_1#1:
- goto inline$CallCompletionRoutine$8$Return#1;
-
- inline$CallCompletionRoutine$8$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$8$Return#1;
-
- inline$CallCompletionRoutine$8$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$8$Return#1;
-
- inline$CallCompletionRoutine$8$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$8$Return#1;
-
- inline$CallCompletionRoutine$8$Return#1:
- goto inline$storm_IoCallDriver$4$label_33$1#1;
-
- inline$storm_IoCallDriver$4$label_33$1#1:
- goto inline$storm_IoCallDriver$4$anon14_Then#1, inline$storm_IoCallDriver$4$anon14_Else#1;
-
- inline$storm_IoCallDriver$4$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$4$anon8#1;
-
- inline$storm_IoCallDriver$4$anon8#1:
- goto inline$storm_IoCallDriver$4$label_36#1;
-
- inline$storm_IoCallDriver$4$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$4$Return#1;
-
- inline$storm_IoCallDriver$4$label_27_case_1#1:
- assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$4$label_29#1;
-
- inline$storm_IoCallDriver$4$label_29#1:
- inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$4$label_37#1;
-
- inline$storm_IoCallDriver$4$label_37#1:
- goto inline$storm_IoCallDriver$4$label_38#1;
-
- inline$storm_IoCallDriver$4$label_38#1:
- goto inline$storm_IoCallDriver$4$label_39#1;
-
- inline$storm_IoCallDriver$4$label_39#1:
- goto inline$CallCompletionRoutine$9$Entry#1;
-
- inline$CallCompletionRoutine$9$Entry#1:
- inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$9$start#1;
-
- inline$CallCompletionRoutine$9$start#1:
- inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$9$label_3#1;
-
- inline$CallCompletionRoutine$9$label_3#1:
- goto inline$CallCompletionRoutine$9$label_4#1;
-
- inline$CallCompletionRoutine$9$label_4#1:
- goto inline$CallCompletionRoutine$9$label_5#1;
-
- inline$CallCompletionRoutine$9$label_5#1:
- goto inline$CallCompletionRoutine$9$label_6#1;
-
- inline$CallCompletionRoutine$9$label_6#1:
- goto inline$CallCompletionRoutine$9$label_7#1;
-
- inline$CallCompletionRoutine$9$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$48$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$48$Entry#1:
- inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$48$start#1;
-
- inline$IoGetCurrentIrpStackLocation$48$start#1:
- inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$48$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$48$label_3_true#1, inline$IoGetCurrentIrpStackLocation$48$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$48$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$48$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$48$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$48$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$48$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$48$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$48$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$48$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$48$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$48$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$48$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$48$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$48$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$48$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$48$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$48$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$48$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$48$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$48$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$48$Return#1:
- goto inline$CallCompletionRoutine$9$label_7$1#1;
-
- inline$CallCompletionRoutine$9$label_7$1#1:
- goto inline$CallCompletionRoutine$9$anon10_Then#1, inline$CallCompletionRoutine$9$anon10_Else#1;
-
- inline$CallCompletionRoutine$9$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$9$anon1#1;
-
- inline$CallCompletionRoutine$9$anon1#1:
- goto inline$CallCompletionRoutine$9$label_10#1;
-
- inline$CallCompletionRoutine$9$label_10#1:
- goto inline$CallCompletionRoutine$9$label_11#1;
-
- inline$CallCompletionRoutine$9$label_11#1:
- havoc inline$CallCompletionRoutine$9$myNondetVar_0;
- inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$myNondetVar_0;
- goto inline$CallCompletionRoutine$9$label_12#1;
-
- inline$CallCompletionRoutine$9$label_12#1:
- havoc inline$CallCompletionRoutine$9$myNondetVar_0;
- inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$myNondetVar_0;
- goto inline$CallCompletionRoutine$9$label_13#1;
-
- inline$CallCompletionRoutine$9$label_13#1:
- havoc inline$CallCompletionRoutine$9$myNondetVar_0;
- goto inline$CallCompletionRoutine$9$label_14#1;
-
- inline$CallCompletionRoutine$9$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$49$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$49$Entry#1:
- inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$49$start#1;
-
- inline$IoGetCurrentIrpStackLocation$49$start#1:
- inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$49$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$49$label_3_true#1, inline$IoGetCurrentIrpStackLocation$49$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$49$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$49$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$49$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$49$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$49$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$49$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$49$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$49$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$49$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$49$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$49$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$49$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$49$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$49$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$49$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$49$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$49$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$49$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$49$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$49$Return#1:
- goto inline$CallCompletionRoutine$9$label_14$1#1;
-
- inline$CallCompletionRoutine$9$label_14$1#1:
- goto inline$CallCompletionRoutine$9$anon11_Then#1, inline$CallCompletionRoutine$9$anon11_Else#1;
-
- inline$CallCompletionRoutine$9$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$9$anon3#1;
-
- inline$CallCompletionRoutine$9$anon3#1:
- goto inline$CallCompletionRoutine$9$label_17#1;
-
- inline$CallCompletionRoutine$9$label_17#1:
- goto inline$CallCompletionRoutine$9$label_18#1;
-
- inline$CallCompletionRoutine$9$label_18#1:
- goto inline$CallCompletionRoutine$9$label_18_true#1, inline$CallCompletionRoutine$9$label_18_false#1;
-
- inline$CallCompletionRoutine$9$label_18_false#1:
- assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$9$label_1#1;
-
- inline$CallCompletionRoutine$9$label_18_true#1:
- assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$9$label_19#1;
-
- inline$CallCompletionRoutine$9$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$9$label_20#1;
-
- inline$CallCompletionRoutine$9$label_20#1:
- goto inline$CallCompletionRoutine$9$label_20_icall_1#1, inline$CallCompletionRoutine$9$label_20_icall_2#1, inline$CallCompletionRoutine$9$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$9$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$9$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$9$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$9$Entry#1:
- inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$9$start#1;
-
- inline$BDLSystemPowerIoCompletion$9$start#1:
- call inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$9$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_4#1:
- inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_6#1:
- inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$9$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$9$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$9$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$51$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$51$Entry#1:
- inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$51$start#1;
-
- inline$IoGetCurrentIrpStackLocation$51$start#1:
- inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$51$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$51$label_3_true#1, inline$IoGetCurrentIrpStackLocation$51$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$51$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$51$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$51$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$51$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$51$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$51$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$51$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$51$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$51$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$51$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$51$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$51$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$51$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$51$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$51$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$51$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$51$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$51$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$51$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$51$Return#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon36_Then#1, inline$BDLSystemPowerIoCompletion$9$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_15#1:
- goto inline$BDLGetDebugLevel$265$Entry#1;
-
- inline$BDLGetDebugLevel$265$Entry#1:
- goto inline$BDLGetDebugLevel$265$start#1;
-
- inline$BDLGetDebugLevel$265$start#1:
- goto inline$BDLGetDebugLevel$265$label_3#1;
-
- inline$BDLGetDebugLevel$265$label_3#1:
- havoc inline$BDLGetDebugLevel$265$myNondetVar_0;
- inline$BDLGetDebugLevel$265$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$265$myNondetVar_0;
- goto inline$BDLGetDebugLevel$265$label_1#1;
-
- inline$BDLGetDebugLevel$265$label_1#1:
- goto inline$BDLGetDebugLevel$265$Return#1;
-
- inline$BDLGetDebugLevel$265$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$265$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon37_Then#1, inline$BDLSystemPowerIoCompletion$9$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_18_true#1, inline$BDLSystemPowerIoCompletion$9$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_22#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_23#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_24#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$9$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_19#1:
- goto inline$BDLGetDebugLevel$266$Entry#1;
-
- inline$BDLGetDebugLevel$266$Entry#1:
- goto inline$BDLGetDebugLevel$266$start#1;
-
- inline$BDLGetDebugLevel$266$start#1:
- goto inline$BDLGetDebugLevel$266$label_3#1;
-
- inline$BDLGetDebugLevel$266$label_3#1:
- havoc inline$BDLGetDebugLevel$266$myNondetVar_0;
- inline$BDLGetDebugLevel$266$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$266$myNondetVar_0;
- goto inline$BDLGetDebugLevel$266$label_1#1;
-
- inline$BDLGetDebugLevel$266$label_1#1:
- goto inline$BDLGetDebugLevel$266$Return#1;
-
- inline$BDLGetDebugLevel$266$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$266$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon38_Then#1, inline$BDLSystemPowerIoCompletion$9$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_28_true#1, inline$BDLSystemPowerIoCompletion$9$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_32#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_33#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_34#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$9$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_29#1:
- goto inline$BDLGetDebugLevel$267$Entry#1;
-
- inline$BDLGetDebugLevel$267$Entry#1:
- goto inline$BDLGetDebugLevel$267$start#1;
-
- inline$BDLGetDebugLevel$267$start#1:
- goto inline$BDLGetDebugLevel$267$label_3#1;
-
- inline$BDLGetDebugLevel$267$label_3#1:
- havoc inline$BDLGetDebugLevel$267$myNondetVar_0;
- inline$BDLGetDebugLevel$267$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$267$myNondetVar_0;
- goto inline$BDLGetDebugLevel$267$label_1#1;
-
- inline$BDLGetDebugLevel$267$label_1#1:
- goto inline$BDLGetDebugLevel$267$Return#1;
-
- inline$BDLGetDebugLevel$267$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$267$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon39_Then#1, inline$BDLSystemPowerIoCompletion$9$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_38_true#1, inline$BDLSystemPowerIoCompletion$9$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_39_true#1, inline$BDLSystemPowerIoCompletion$9$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$9$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$9$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$9$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_106_true#1, inline$BDLSystemPowerIoCompletion$9$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_142#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_143#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$9$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$9$myNondetVar_0, inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$9$anon50_Then#1, inline$BDLSystemPowerIoCompletion$9$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_112#1:
- inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$9$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_113_true#1, inline$BDLSystemPowerIoCompletion$9$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$9$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_117#1:
- goto inline$BDLGetDebugLevel$274$Entry#1;
-
- inline$BDLGetDebugLevel$274$Entry#1:
- goto inline$BDLGetDebugLevel$274$start#1;
-
- inline$BDLGetDebugLevel$274$start#1:
- goto inline$BDLGetDebugLevel$274$label_3#1;
-
- inline$BDLGetDebugLevel$274$label_3#1:
- havoc inline$BDLGetDebugLevel$274$myNondetVar_0;
- inline$BDLGetDebugLevel$274$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$274$myNondetVar_0;
- goto inline$BDLGetDebugLevel$274$label_1#1;
-
- inline$BDLGetDebugLevel$274$label_1#1:
- goto inline$BDLGetDebugLevel$274$Return#1;
-
- inline$BDLGetDebugLevel$274$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$274$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon51_Then#1, inline$BDLSystemPowerIoCompletion$9$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_120_true#1, inline$BDLSystemPowerIoCompletion$9$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_124#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_125#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_126#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$9$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_121#1:
- goto inline$BDLGetDebugLevel$275$Entry#1;
-
- inline$BDLGetDebugLevel$275$Entry#1:
- goto inline$BDLGetDebugLevel$275$start#1;
-
- inline$BDLGetDebugLevel$275$start#1:
- goto inline$BDLGetDebugLevel$275$label_3#1;
-
- inline$BDLGetDebugLevel$275$label_3#1:
- havoc inline$BDLGetDebugLevel$275$myNondetVar_0;
- inline$BDLGetDebugLevel$275$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$275$myNondetVar_0;
- goto inline$BDLGetDebugLevel$275$label_1#1;
-
- inline$BDLGetDebugLevel$275$label_1#1:
- goto inline$BDLGetDebugLevel$275$Return#1;
-
- inline$BDLGetDebugLevel$275$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$275$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon52_Then#1, inline$BDLSystemPowerIoCompletion$9$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_130_true#1, inline$BDLSystemPowerIoCompletion$9$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_134#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_135#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_136#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$9$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_131#1:
- goto inline$BDLGetDebugLevel$276$Entry#1;
-
- inline$BDLGetDebugLevel$276$Entry#1:
- goto inline$BDLGetDebugLevel$276$start#1;
-
- inline$BDLGetDebugLevel$276$start#1:
- goto inline$BDLGetDebugLevel$276$label_3#1;
-
- inline$BDLGetDebugLevel$276$label_3#1:
- havoc inline$BDLGetDebugLevel$276$myNondetVar_0;
- inline$BDLGetDebugLevel$276$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$276$myNondetVar_0;
- goto inline$BDLGetDebugLevel$276$label_1#1;
-
- inline$BDLGetDebugLevel$276$label_1#1:
- goto inline$BDLGetDebugLevel$276$Return#1;
-
- inline$BDLGetDebugLevel$276$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$276$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon53_Then#1, inline$BDLSystemPowerIoCompletion$9$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_140_true#1, inline$BDLSystemPowerIoCompletion$9$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$9$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_115#1:
- inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$9$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$9$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_43#1:
- goto inline$BDLGetDebugLevel$268$Entry#1;
-
- inline$BDLGetDebugLevel$268$Entry#1:
- goto inline$BDLGetDebugLevel$268$start#1;
-
- inline$BDLGetDebugLevel$268$start#1:
- goto inline$BDLGetDebugLevel$268$label_3#1;
-
- inline$BDLGetDebugLevel$268$label_3#1:
- havoc inline$BDLGetDebugLevel$268$myNondetVar_0;
- inline$BDLGetDebugLevel$268$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$268$myNondetVar_0;
- goto inline$BDLGetDebugLevel$268$label_1#1;
-
- inline$BDLGetDebugLevel$268$label_1#1:
- goto inline$BDLGetDebugLevel$268$Return#1;
-
- inline$BDLGetDebugLevel$268$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$268$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon40_Then#1, inline$BDLSystemPowerIoCompletion$9$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_46_true#1, inline$BDLSystemPowerIoCompletion$9$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_50#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_51#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_52#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$9$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_47#1:
- goto inline$BDLGetDebugLevel$269$Entry#1;
-
- inline$BDLGetDebugLevel$269$Entry#1:
- goto inline$BDLGetDebugLevel$269$start#1;
-
- inline$BDLGetDebugLevel$269$start#1:
- goto inline$BDLGetDebugLevel$269$label_3#1;
-
- inline$BDLGetDebugLevel$269$label_3#1:
- havoc inline$BDLGetDebugLevel$269$myNondetVar_0;
- inline$BDLGetDebugLevel$269$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$269$myNondetVar_0;
- goto inline$BDLGetDebugLevel$269$label_1#1;
-
- inline$BDLGetDebugLevel$269$label_1#1:
- goto inline$BDLGetDebugLevel$269$Return#1;
-
- inline$BDLGetDebugLevel$269$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$269$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon41_Then#1, inline$BDLSystemPowerIoCompletion$9$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_56_true#1, inline$BDLSystemPowerIoCompletion$9$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_60#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_61#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_62#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$9$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_57#1:
- goto inline$BDLGetDebugLevel$270$Entry#1;
-
- inline$BDLGetDebugLevel$270$Entry#1:
- goto inline$BDLGetDebugLevel$270$start#1;
-
- inline$BDLGetDebugLevel$270$start#1:
- goto inline$BDLGetDebugLevel$270$label_3#1;
-
- inline$BDLGetDebugLevel$270$label_3#1:
- havoc inline$BDLGetDebugLevel$270$myNondetVar_0;
- inline$BDLGetDebugLevel$270$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$270$myNondetVar_0;
- goto inline$BDLGetDebugLevel$270$label_1#1;
-
- inline$BDLGetDebugLevel$270$label_1#1:
- goto inline$BDLGetDebugLevel$270$Return#1;
-
- inline$BDLGetDebugLevel$270$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$270$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon42_Then#1, inline$BDLSystemPowerIoCompletion$9$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_66_true#1, inline$BDLSystemPowerIoCompletion$9$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$9$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$9$anon43_Then#1, inline$BDLSystemPowerIoCompletion$9$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$9$anon44_Then#1, inline$BDLSystemPowerIoCompletion$9$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_74#1:
- goto inline$storm_IoCompleteRequest$20$Entry#1;
-
- inline$storm_IoCompleteRequest$20$Entry#1:
- inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$20$start#1;
-
- inline$storm_IoCompleteRequest$20$start#1:
- inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$20$label_3#1;
-
- inline$storm_IoCompleteRequest$20$label_3#1:
- call inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$20$label_6#1;
-
- inline$storm_IoCompleteRequest$20$label_6#1:
- goto inline$storm_IoCompleteRequest$20$label_6_true#1, inline$storm_IoCompleteRequest$20$label_6_false#1;
-
- inline$storm_IoCompleteRequest$20$label_6_false#1:
- assume inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$20$label_7#1;
-
- inline$storm_IoCompleteRequest$20$label_6_true#1:
- assume inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$20$label_8#1;
-
- inline$storm_IoCompleteRequest$20$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$20$anon3_Then#1, inline$storm_IoCompleteRequest$20$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$20$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$20$anon1#1;
-
- inline$storm_IoCompleteRequest$20$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$20$label_9#1;
-
- inline$storm_IoCompleteRequest$20$label_9#1:
- goto inline$storm_IoCompleteRequest$20$label_9_true#1, inline$storm_IoCompleteRequest$20$label_9_false#1;
-
- inline$storm_IoCompleteRequest$20$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$20$label_10#1;
-
- inline$storm_IoCompleteRequest$20$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$20$label_1#1;
-
- inline$storm_IoCompleteRequest$20$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$20$label_7#1;
-
- inline$storm_IoCompleteRequest$20$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$20$label_1#1;
-
- inline$storm_IoCompleteRequest$20$label_1#1:
- goto inline$storm_IoCompleteRequest$20$Return#1;
-
- inline$storm_IoCompleteRequest$20$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$20$Return#1;
-
- inline$storm_IoCompleteRequest$20$Return#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon45_Then#1, inline$BDLSystemPowerIoCompletion$9$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$9$anon46_Then#1, inline$BDLSystemPowerIoCompletion$9$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_80#1:
- goto inline$BDLGetDebugLevel$271$Entry#1;
-
- inline$BDLGetDebugLevel$271$Entry#1:
- goto inline$BDLGetDebugLevel$271$start#1;
-
- inline$BDLGetDebugLevel$271$start#1:
- goto inline$BDLGetDebugLevel$271$label_3#1;
-
- inline$BDLGetDebugLevel$271$label_3#1:
- havoc inline$BDLGetDebugLevel$271$myNondetVar_0;
- inline$BDLGetDebugLevel$271$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$271$myNondetVar_0;
- goto inline$BDLGetDebugLevel$271$label_1#1;
-
- inline$BDLGetDebugLevel$271$label_1#1:
- goto inline$BDLGetDebugLevel$271$Return#1;
-
- inline$BDLGetDebugLevel$271$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$271$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon47_Then#1, inline$BDLSystemPowerIoCompletion$9$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_83_true#1, inline$BDLSystemPowerIoCompletion$9$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_87#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_88#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_89#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$9$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_84#1:
- goto inline$BDLGetDebugLevel$272$Entry#1;
-
- inline$BDLGetDebugLevel$272$Entry#1:
- goto inline$BDLGetDebugLevel$272$start#1;
-
- inline$BDLGetDebugLevel$272$start#1:
- goto inline$BDLGetDebugLevel$272$label_3#1;
-
- inline$BDLGetDebugLevel$272$label_3#1:
- havoc inline$BDLGetDebugLevel$272$myNondetVar_0;
- inline$BDLGetDebugLevel$272$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$272$myNondetVar_0;
- goto inline$BDLGetDebugLevel$272$label_1#1;
-
- inline$BDLGetDebugLevel$272$label_1#1:
- goto inline$BDLGetDebugLevel$272$Return#1;
-
- inline$BDLGetDebugLevel$272$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$272$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon48_Then#1, inline$BDLSystemPowerIoCompletion$9$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_93_true#1, inline$BDLSystemPowerIoCompletion$9$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_97#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_98#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_99#1:
- call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$9$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$9$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_94#1:
- goto inline$BDLGetDebugLevel$273$Entry#1;
-
- inline$BDLGetDebugLevel$273$Entry#1:
- goto inline$BDLGetDebugLevel$273$start#1;
-
- inline$BDLGetDebugLevel$273$start#1:
- goto inline$BDLGetDebugLevel$273$label_3#1;
-
- inline$BDLGetDebugLevel$273$label_3#1:
- havoc inline$BDLGetDebugLevel$273$myNondetVar_0;
- inline$BDLGetDebugLevel$273$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$273$myNondetVar_0;
- goto inline$BDLGetDebugLevel$273$label_1#1;
-
- inline$BDLGetDebugLevel$273$label_1#1:
- goto inline$BDLGetDebugLevel$273$Return#1;
-
- inline$BDLGetDebugLevel$273$Return#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$273$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$9$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$9$anon49_Then#1, inline$BDLSystemPowerIoCompletion$9$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_103_true#1, inline$BDLSystemPowerIoCompletion$9$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$9$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$9$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_104#1:
- inline$BDLSystemPowerIoCompletion$9$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$9$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$9$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$9$Return#1;
-
- inline$BDLSystemPowerIoCompletion$9$Return#1:
- inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$9$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$9$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$9$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$9$anon14_Then#1, inline$CallCompletionRoutine$9$anon14_Else#1;
-
- inline$CallCompletionRoutine$9$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$9$anon9#1;
-
- inline$CallCompletionRoutine$9$anon9#1:
- goto inline$CallCompletionRoutine$9$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$9$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$9$Return#1;
-
- inline$CallCompletionRoutine$9$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$9$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$9$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$9$Entry#1:
- inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$9$start#1;
-
- inline$BDLDevicePowerIoCompletion$9$start#1:
- call inline$BDLDevicePowerIoCompletion$9$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$9$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_4#1:
- inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_6#1:
- inline$BDLDevicePowerIoCompletion$9$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$9$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$9$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$9$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$50$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$50$Entry#1:
- inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$50$start#1;
-
- inline$IoGetCurrentIrpStackLocation$50$start#1:
- inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$50$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$50$label_3_true#1, inline$IoGetCurrentIrpStackLocation$50$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$50$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$50$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$50$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$50$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$50$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$50$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$50$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$50$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$50$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$50$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$50$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$50$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$50$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$50$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$50$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$50$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$50$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$50$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$50$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$50$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$50$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$50$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$50$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon30_Then#1, inline$BDLDevicePowerIoCompletion$9$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_13#1:
- inline$BDLDevicePowerIoCompletion$9$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$9$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$9$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_17#1:
- goto inline$BDLGetDebugLevel$256$Entry#1;
-
- inline$BDLGetDebugLevel$256$Entry#1:
- goto inline$BDLGetDebugLevel$256$start#1;
-
- inline$BDLGetDebugLevel$256$start#1:
- goto inline$BDLGetDebugLevel$256$label_3#1;
-
- inline$BDLGetDebugLevel$256$label_3#1:
- havoc inline$BDLGetDebugLevel$256$myNondetVar_0;
- inline$BDLGetDebugLevel$256$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$256$myNondetVar_0;
- goto inline$BDLGetDebugLevel$256$label_1#1;
-
- inline$BDLGetDebugLevel$256$label_1#1:
- goto inline$BDLGetDebugLevel$256$Return#1;
-
- inline$BDLGetDebugLevel$256$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$256$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon31_Then#1, inline$BDLDevicePowerIoCompletion$9$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_20_true#1, inline$BDLDevicePowerIoCompletion$9$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_24#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_25#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_26#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$9$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_21#1:
- goto inline$BDLGetDebugLevel$257$Entry#1;
-
- inline$BDLGetDebugLevel$257$Entry#1:
- goto inline$BDLGetDebugLevel$257$start#1;
-
- inline$BDLGetDebugLevel$257$start#1:
- goto inline$BDLGetDebugLevel$257$label_3#1;
-
- inline$BDLGetDebugLevel$257$label_3#1:
- havoc inline$BDLGetDebugLevel$257$myNondetVar_0;
- inline$BDLGetDebugLevel$257$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$257$myNondetVar_0;
- goto inline$BDLGetDebugLevel$257$label_1#1;
-
- inline$BDLGetDebugLevel$257$label_1#1:
- goto inline$BDLGetDebugLevel$257$Return#1;
-
- inline$BDLGetDebugLevel$257$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$257$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon32_Then#1, inline$BDLDevicePowerIoCompletion$9$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_30_true#1, inline$BDLDevicePowerIoCompletion$9$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_34#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_35#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_36#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$9$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_31#1:
- goto inline$BDLGetDebugLevel$258$Entry#1;
-
- inline$BDLGetDebugLevel$258$Entry#1:
- goto inline$BDLGetDebugLevel$258$start#1;
-
- inline$BDLGetDebugLevel$258$start#1:
- goto inline$BDLGetDebugLevel$258$label_3#1;
-
- inline$BDLGetDebugLevel$258$label_3#1:
- havoc inline$BDLGetDebugLevel$258$myNondetVar_0;
- inline$BDLGetDebugLevel$258$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$258$myNondetVar_0;
- goto inline$BDLGetDebugLevel$258$label_1#1;
-
- inline$BDLGetDebugLevel$258$label_1#1:
- goto inline$BDLGetDebugLevel$258$Return#1;
-
- inline$BDLGetDebugLevel$258$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$258$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon33_Then#1, inline$BDLDevicePowerIoCompletion$9$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_40_true#1, inline$BDLDevicePowerIoCompletion$9$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_41_true#1, inline$BDLDevicePowerIoCompletion$9$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$9$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$9$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_44_true#1, inline$BDLDevicePowerIoCompletion$9$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$9$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_45_true#1, inline$BDLDevicePowerIoCompletion$9$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$9$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$9$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$9$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$9$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$9$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$9$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_54#1:
- inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$9$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_55_true#1, inline$BDLDevicePowerIoCompletion$9$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_56#1:
- call inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$9$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$9$anon34_Then#1, inline$BDLDevicePowerIoCompletion$9$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_59#1:
- goto inline$BDLGetDebugLevel$259$Entry#1;
-
- inline$BDLGetDebugLevel$259$Entry#1:
- goto inline$BDLGetDebugLevel$259$start#1;
-
- inline$BDLGetDebugLevel$259$start#1:
- goto inline$BDLGetDebugLevel$259$label_3#1;
-
- inline$BDLGetDebugLevel$259$label_3#1:
- havoc inline$BDLGetDebugLevel$259$myNondetVar_0;
- inline$BDLGetDebugLevel$259$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$259$myNondetVar_0;
- goto inline$BDLGetDebugLevel$259$label_1#1;
-
- inline$BDLGetDebugLevel$259$label_1#1:
- goto inline$BDLGetDebugLevel$259$Return#1;
-
- inline$BDLGetDebugLevel$259$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$259$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon35_Then#1, inline$BDLDevicePowerIoCompletion$9$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_62_true#1, inline$BDLDevicePowerIoCompletion$9$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_66#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_67#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_68#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$9$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_63#1:
- goto inline$BDLGetDebugLevel$260$Entry#1;
-
- inline$BDLGetDebugLevel$260$Entry#1:
- goto inline$BDLGetDebugLevel$260$start#1;
-
- inline$BDLGetDebugLevel$260$start#1:
- goto inline$BDLGetDebugLevel$260$label_3#1;
-
- inline$BDLGetDebugLevel$260$label_3#1:
- havoc inline$BDLGetDebugLevel$260$myNondetVar_0;
- inline$BDLGetDebugLevel$260$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$260$myNondetVar_0;
- goto inline$BDLGetDebugLevel$260$label_1#1;
-
- inline$BDLGetDebugLevel$260$label_1#1:
- goto inline$BDLGetDebugLevel$260$Return#1;
-
- inline$BDLGetDebugLevel$260$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$260$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon36_Then#1, inline$BDLDevicePowerIoCompletion$9$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_72_true#1, inline$BDLDevicePowerIoCompletion$9$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_76#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_77#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_78#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$9$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_73#1:
- goto inline$BDLGetDebugLevel$261$Entry#1;
-
- inline$BDLGetDebugLevel$261$Entry#1:
- goto inline$BDLGetDebugLevel$261$start#1;
-
- inline$BDLGetDebugLevel$261$start#1:
- goto inline$BDLGetDebugLevel$261$label_3#1;
-
- inline$BDLGetDebugLevel$261$label_3#1:
- havoc inline$BDLGetDebugLevel$261$myNondetVar_0;
- inline$BDLGetDebugLevel$261$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$261$myNondetVar_0;
- goto inline$BDLGetDebugLevel$261$label_1#1;
-
- inline$BDLGetDebugLevel$261$label_1#1:
- goto inline$BDLGetDebugLevel$261$Return#1;
-
- inline$BDLGetDebugLevel$261$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$261$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon37_Then#1, inline$BDLDevicePowerIoCompletion$9$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_82_true#1, inline$BDLDevicePowerIoCompletion$9$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$9$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$9$anon38_Then#1, inline$BDLDevicePowerIoCompletion$9$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$9$anon39_Then#1, inline$BDLDevicePowerIoCompletion$9$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_92#1:
- goto inline$storm_IoCompleteRequest$19$Entry#1;
-
- inline$storm_IoCompleteRequest$19$Entry#1:
- inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$19$start#1;
-
- inline$storm_IoCompleteRequest$19$start#1:
- inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$19$label_3#1;
-
- inline$storm_IoCompleteRequest$19$label_3#1:
- call inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$19$label_6#1;
-
- inline$storm_IoCompleteRequest$19$label_6#1:
- goto inline$storm_IoCompleteRequest$19$label_6_true#1, inline$storm_IoCompleteRequest$19$label_6_false#1;
-
- inline$storm_IoCompleteRequest$19$label_6_false#1:
- assume inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$19$label_7#1;
-
- inline$storm_IoCompleteRequest$19$label_6_true#1:
- assume inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$19$label_8#1;
-
- inline$storm_IoCompleteRequest$19$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$19$anon3_Then#1, inline$storm_IoCompleteRequest$19$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$19$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$19$anon1#1;
-
- inline$storm_IoCompleteRequest$19$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$19$label_9#1;
-
- inline$storm_IoCompleteRequest$19$label_9#1:
- goto inline$storm_IoCompleteRequest$19$label_9_true#1, inline$storm_IoCompleteRequest$19$label_9_false#1;
-
- inline$storm_IoCompleteRequest$19$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$19$label_10#1;
-
- inline$storm_IoCompleteRequest$19$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$19$label_1#1;
-
- inline$storm_IoCompleteRequest$19$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$19$label_7#1;
-
- inline$storm_IoCompleteRequest$19$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$19$label_1#1;
-
- inline$storm_IoCompleteRequest$19$label_1#1:
- goto inline$storm_IoCompleteRequest$19$Return#1;
-
- inline$storm_IoCompleteRequest$19$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$19$Return#1;
-
- inline$storm_IoCompleteRequest$19$Return#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon40_Then#1, inline$BDLDevicePowerIoCompletion$9$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$9$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$9$anon41_Then#1, inline$BDLDevicePowerIoCompletion$9$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_98#1:
- goto inline$BDLGetDebugLevel$262$Entry#1;
-
- inline$BDLGetDebugLevel$262$Entry#1:
- goto inline$BDLGetDebugLevel$262$start#1;
-
- inline$BDLGetDebugLevel$262$start#1:
- goto inline$BDLGetDebugLevel$262$label_3#1;
-
- inline$BDLGetDebugLevel$262$label_3#1:
- havoc inline$BDLGetDebugLevel$262$myNondetVar_0;
- inline$BDLGetDebugLevel$262$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$262$myNondetVar_0;
- goto inline$BDLGetDebugLevel$262$label_1#1;
-
- inline$BDLGetDebugLevel$262$label_1#1:
- goto inline$BDLGetDebugLevel$262$Return#1;
-
- inline$BDLGetDebugLevel$262$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$262$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon42_Then#1, inline$BDLDevicePowerIoCompletion$9$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_101_true#1, inline$BDLDevicePowerIoCompletion$9$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_105#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_106#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_107#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$9$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_102#1:
- goto inline$BDLGetDebugLevel$263$Entry#1;
-
- inline$BDLGetDebugLevel$263$Entry#1:
- goto inline$BDLGetDebugLevel$263$start#1;
-
- inline$BDLGetDebugLevel$263$start#1:
- goto inline$BDLGetDebugLevel$263$label_3#1;
-
- inline$BDLGetDebugLevel$263$label_3#1:
- havoc inline$BDLGetDebugLevel$263$myNondetVar_0;
- inline$BDLGetDebugLevel$263$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$263$myNondetVar_0;
- goto inline$BDLGetDebugLevel$263$label_1#1;
-
- inline$BDLGetDebugLevel$263$label_1#1:
- goto inline$BDLGetDebugLevel$263$Return#1;
-
- inline$BDLGetDebugLevel$263$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$263$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon43_Then#1, inline$BDLDevicePowerIoCompletion$9$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_111_true#1, inline$BDLDevicePowerIoCompletion$9$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_115#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_116#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_117#1:
- call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$9$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$9$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_112#1:
- goto inline$BDLGetDebugLevel$264$Entry#1;
-
- inline$BDLGetDebugLevel$264$Entry#1:
- goto inline$BDLGetDebugLevel$264$start#1;
-
- inline$BDLGetDebugLevel$264$start#1:
- goto inline$BDLGetDebugLevel$264$label_3#1;
-
- inline$BDLGetDebugLevel$264$label_3#1:
- havoc inline$BDLGetDebugLevel$264$myNondetVar_0;
- inline$BDLGetDebugLevel$264$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$264$myNondetVar_0;
- goto inline$BDLGetDebugLevel$264$label_1#1;
-
- inline$BDLGetDebugLevel$264$label_1#1:
- goto inline$BDLGetDebugLevel$264$Return#1;
-
- inline$BDLGetDebugLevel$264$Return#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$264$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$9$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$9$anon44_Then#1, inline$BDLDevicePowerIoCompletion$9$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_121_true#1, inline$BDLDevicePowerIoCompletion$9$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$9$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$9$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_122#1:
- inline$BDLDevicePowerIoCompletion$9$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$9$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$9$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$9$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$9$Return#1;
-
- inline$BDLDevicePowerIoCompletion$9$Return#1:
- inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$9$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$9$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$9$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$9$anon13_Then#1, inline$CallCompletionRoutine$9$anon13_Else#1;
-
- inline$CallCompletionRoutine$9$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$9$anon7#1;
-
- inline$CallCompletionRoutine$9$anon7#1:
- goto inline$CallCompletionRoutine$9$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$9$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$9$Return#1;
-
- inline$CallCompletionRoutine$9$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$9$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$9$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$9$Entry#1:
- inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$9$start#1;
-
- inline$BDLCallDriverCompletionRoutine$9$start#1:
- inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$9$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$9$label_3_true#1, inline$BDLCallDriverCompletionRoutine$9$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$9$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$9$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$9$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$9$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_6#1:
- goto inline$storm_KeSetEvent$11$Entry#1;
-
- inline$storm_KeSetEvent$11$Entry#1:
- inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$11$start#1;
-
- inline$storm_KeSetEvent$11$start#1:
- inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$11$label_3#1;
-
- inline$storm_KeSetEvent$11$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$11$label_1#1;
-
- inline$storm_KeSetEvent$11$label_1#1:
- goto inline$storm_KeSetEvent$11$Return#1;
-
- inline$storm_KeSetEvent$11$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$9$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$9$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$9$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$9$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$9$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$9$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$9$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_9#1:
- inline$BDLCallDriverCompletionRoutine$9$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$9$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$9$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$9$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$9$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$9$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$9$Return#1:
- inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$9$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$9$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$9$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$9$anon12_Then#1, inline$CallCompletionRoutine$9$anon12_Else#1;
-
- inline$CallCompletionRoutine$9$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$9$anon5#1;
-
- inline$CallCompletionRoutine$9$anon5#1:
- goto inline$CallCompletionRoutine$9$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$9$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$9$label_23#1;
-
- inline$CallCompletionRoutine$9$label_23#1:
- inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$9$label_24#1;
-
- inline$CallCompletionRoutine$9$label_24#1:
- goto inline$CallCompletionRoutine$9$label_24_true#1, inline$CallCompletionRoutine$9$label_24_false#1;
-
- inline$CallCompletionRoutine$9$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$9$label_1#1;
-
- inline$CallCompletionRoutine$9$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$9$label_25#1;
-
- inline$CallCompletionRoutine$9$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$9$label_1#1;
-
- inline$CallCompletionRoutine$9$label_1#1:
- goto inline$CallCompletionRoutine$9$Return#1;
-
- inline$CallCompletionRoutine$9$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$9$Return#1;
-
- inline$CallCompletionRoutine$9$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$9$Return#1;
-
- inline$CallCompletionRoutine$9$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$9$Return#1;
-
- inline$CallCompletionRoutine$9$Return#1:
- goto inline$storm_IoCallDriver$4$label_39$1#1;
-
- inline$storm_IoCallDriver$4$label_39$1#1:
- goto inline$storm_IoCallDriver$4$anon15_Then#1, inline$storm_IoCallDriver$4$anon15_Else#1;
-
- inline$storm_IoCallDriver$4$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$4$anon10#1;
-
- inline$storm_IoCallDriver$4$anon10#1:
- goto inline$storm_IoCallDriver$4$label_36#1;
-
- inline$storm_IoCallDriver$4$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$4$Return#1;
-
- inline$storm_IoCallDriver$4$label_27_case_0#1:
- assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$4$label_28#1;
-
- inline$storm_IoCallDriver$4$label_28#1:
- inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$4$label_42#1;
-
- inline$storm_IoCallDriver$4$label_42#1:
- goto inline$storm_IoCallDriver$4$label_43#1;
-
- inline$storm_IoCallDriver$4$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$4$label_36#1;
-
- inline$storm_IoCallDriver$4$label_36#1:
- inline$storm_IoCallDriver$4$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$4$label_1#1;
-
- inline$storm_IoCallDriver$4$label_1#1:
- goto inline$storm_IoCallDriver$4$Return#1;
-
- inline$storm_IoCallDriver$4$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$4$Return#1;
-
- inline$storm_IoCallDriver$4$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$4$Return#1;
-
- inline$storm_IoCallDriver$4$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$4$Return#1;
-
- inline$storm_IoCallDriver$4$Return#1:
- inline$BDLHandleRemove$0$$result.storm_IoCallDriver$2453.25$39$ := inline$storm_IoCallDriver$4$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLHandleRemove$0$label_109$1#1;
-
- inline$BDLHandleRemove$0$label_109$1#1:
- goto inline$BDLHandleRemove$0$anon56_Then#1, inline$BDLHandleRemove$0$anon56_Else#1;
-
- inline$BDLHandleRemove$0$anon56_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon29#1;
-
- inline$BDLHandleRemove$0$anon29#1:
- goto inline$BDLHandleRemove$0$label_112#1;
-
- inline$BDLHandleRemove$0$label_112#1:
- inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$result.storm_IoCallDriver$2453.25$39$;
- goto inline$BDLHandleRemove$0$label_113#1;
-
- inline$BDLHandleRemove$0$label_113#1:
- goto inline$BDLHandleRemove$0$label_113_true#1, inline$BDLHandleRemove$0$label_113_false#1;
-
- inline$BDLHandleRemove$0$label_113_false#1:
- assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 == 0;
- goto inline$BDLHandleRemove$0$label_114#1;
-
- inline$BDLHandleRemove$0$label_113_true#1:
- assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 != 0;
- goto inline$BDLHandleRemove$0$label_117#1;
-
- inline$BDLHandleRemove$0$label_117#1:
- goto inline$BDLGetDebugLevel$278$Entry#1;
-
- inline$BDLGetDebugLevel$278$Entry#1:
- goto inline$BDLGetDebugLevel$278$start#1;
-
- inline$BDLGetDebugLevel$278$start#1:
- goto inline$BDLGetDebugLevel$278$label_3#1;
-
- inline$BDLGetDebugLevel$278$label_3#1:
- havoc inline$BDLGetDebugLevel$278$myNondetVar_0;
- inline$BDLGetDebugLevel$278$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$278$myNondetVar_0;
- goto inline$BDLGetDebugLevel$278$label_1#1;
-
- inline$BDLGetDebugLevel$278$label_1#1:
- goto inline$BDLGetDebugLevel$278$Return#1;
-
- inline$BDLGetDebugLevel$278$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$ := inline$BDLGetDebugLevel$278$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_117$1#1;
-
- inline$BDLHandleRemove$0$label_117$1#1:
- goto inline$BDLHandleRemove$0$anon58_Then#1, inline$BDLHandleRemove$0$anon58_Else#1;
-
- inline$BDLHandleRemove$0$anon58_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon33#1;
-
- inline$BDLHandleRemove$0$anon33#1:
- goto inline$BDLHandleRemove$0$label_120#1;
-
- inline$BDLHandleRemove$0$label_120#1:
- goto inline$BDLHandleRemove$0$label_120_true#1, inline$BDLHandleRemove$0$label_120_false#1;
-
- inline$BDLHandleRemove$0$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$) == 0;
- goto inline$BDLHandleRemove$0$label_121#1;
-
- inline$BDLHandleRemove$0$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$) != 0;
- goto inline$BDLHandleRemove$0$label_124#1;
-
- inline$BDLHandleRemove$0$label_124#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_125#1;
-
- inline$BDLHandleRemove$0$label_125#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_126#1;
-
- inline$BDLHandleRemove$0$label_126#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_127#1;
-
- inline$BDLHandleRemove$0$label_127#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$41$;
- goto inline$BDLHandleRemove$0$label_121#1;
-
- inline$BDLHandleRemove$0$label_121#1:
- goto inline$BDLGetDebugLevel$279$Entry#1;
-
- inline$BDLGetDebugLevel$279$Entry#1:
- goto inline$BDLGetDebugLevel$279$start#1;
-
- inline$BDLGetDebugLevel$279$start#1:
- goto inline$BDLGetDebugLevel$279$label_3#1;
-
- inline$BDLGetDebugLevel$279$label_3#1:
- havoc inline$BDLGetDebugLevel$279$myNondetVar_0;
- inline$BDLGetDebugLevel$279$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$279$myNondetVar_0;
- goto inline$BDLGetDebugLevel$279$label_1#1;
-
- inline$BDLGetDebugLevel$279$label_1#1:
- goto inline$BDLGetDebugLevel$279$Return#1;
-
- inline$BDLGetDebugLevel$279$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$ := inline$BDLGetDebugLevel$279$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_121$1#1;
-
- inline$BDLHandleRemove$0$label_121$1#1:
- goto inline$BDLHandleRemove$0$anon59_Then#1, inline$BDLHandleRemove$0$anon59_Else#1;
-
- inline$BDLHandleRemove$0$anon59_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon35#1;
-
- inline$BDLHandleRemove$0$anon35#1:
- goto inline$BDLHandleRemove$0$label_130#1;
-
- inline$BDLHandleRemove$0$label_130#1:
- goto inline$BDLHandleRemove$0$label_130_true#1, inline$BDLHandleRemove$0$label_130_false#1;
-
- inline$BDLHandleRemove$0$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$) == 0;
- goto inline$BDLHandleRemove$0$label_131#1;
-
- inline$BDLHandleRemove$0$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$) != 0;
- goto inline$BDLHandleRemove$0$label_134#1;
-
- inline$BDLHandleRemove$0$label_134#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_135#1;
-
- inline$BDLHandleRemove$0$label_135#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_136#1;
-
- inline$BDLHandleRemove$0$label_136#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_137#1;
-
- inline$BDLHandleRemove$0$label_137#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$46$;
- goto inline$BDLHandleRemove$0$label_131#1;
-
- inline$BDLHandleRemove$0$label_131#1:
- goto inline$BDLGetDebugLevel$280$Entry#1;
-
- inline$BDLGetDebugLevel$280$Entry#1:
- goto inline$BDLGetDebugLevel$280$start#1;
-
- inline$BDLGetDebugLevel$280$start#1:
- goto inline$BDLGetDebugLevel$280$label_3#1;
-
- inline$BDLGetDebugLevel$280$label_3#1:
- havoc inline$BDLGetDebugLevel$280$myNondetVar_0;
- inline$BDLGetDebugLevel$280$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$280$myNondetVar_0;
- goto inline$BDLGetDebugLevel$280$label_1#1;
-
- inline$BDLGetDebugLevel$280$label_1#1:
- goto inline$BDLGetDebugLevel$280$Return#1;
-
- inline$BDLGetDebugLevel$280$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$ := inline$BDLGetDebugLevel$280$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_131$1#1;
-
- inline$BDLHandleRemove$0$label_131$1#1:
- goto inline$BDLHandleRemove$0$anon60_Then#1, inline$BDLHandleRemove$0$anon60_Else#1;
-
- inline$BDLHandleRemove$0$anon60_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon37#1;
-
- inline$BDLHandleRemove$0$anon37#1:
- goto inline$BDLHandleRemove$0$label_140#1;
-
- inline$BDLHandleRemove$0$label_140#1:
- goto inline$BDLHandleRemove$0$label_140_true#1, inline$BDLHandleRemove$0$label_140_false#1;
-
- inline$BDLHandleRemove$0$label_140_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$, 4) == 0;
- goto inline$BDLHandleRemove$0$label_114#1;
-
- inline$BDLHandleRemove$0$label_140_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$, 4) != 0;
- goto inline$BDLHandleRemove$0$label_141#1;
-
- inline$BDLHandleRemove$0$label_141#1:
- goto inline$BDLHandleRemove$0$label_114#1;
-
- inline$BDLHandleRemove$0$label_114#1:
- goto inline$BDLGetDebugLevel$277$Entry#1;
-
- inline$BDLGetDebugLevel$277$Entry#1:
- goto inline$BDLGetDebugLevel$277$start#1;
-
- inline$BDLGetDebugLevel$277$start#1:
- goto inline$BDLGetDebugLevel$277$label_3#1;
-
- inline$BDLGetDebugLevel$277$label_3#1:
- havoc inline$BDLGetDebugLevel$277$myNondetVar_0;
- inline$BDLGetDebugLevel$277$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$277$myNondetVar_0;
- goto inline$BDLGetDebugLevel$277$label_1#1;
-
- inline$BDLGetDebugLevel$277$label_1#1:
- goto inline$BDLGetDebugLevel$277$Return#1;
-
- inline$BDLGetDebugLevel$277$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$ := inline$BDLGetDebugLevel$277$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_114$1#1;
-
- inline$BDLHandleRemove$0$label_114$1#1:
- goto inline$BDLHandleRemove$0$anon57_Then#1, inline$BDLHandleRemove$0$anon57_Else#1;
-
- inline$BDLHandleRemove$0$anon57_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon31#1;
-
- inline$BDLHandleRemove$0$anon31#1:
- goto inline$BDLHandleRemove$0$label_142#1;
-
- inline$BDLHandleRemove$0$label_142#1:
- goto inline$BDLHandleRemove$0$label_142_true#1, inline$BDLHandleRemove$0$label_142_false#1;
-
- inline$BDLHandleRemove$0$label_142_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$) == 0;
- goto inline$BDLHandleRemove$0$label_143#1;
-
- inline$BDLHandleRemove$0$label_142_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$) != 0;
- goto inline$BDLHandleRemove$0$label_146#1;
-
- inline$BDLHandleRemove$0$label_146#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_147#1;
-
- inline$BDLHandleRemove$0$label_147#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_148#1;
-
- inline$BDLHandleRemove$0$label_148#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_149#1;
-
- inline$BDLHandleRemove$0$label_149#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$52$;
- goto inline$BDLHandleRemove$0$label_143#1;
-
- inline$BDLHandleRemove$0$label_143#1:
- goto inline$BDLGetDebugLevel$281$Entry#1;
-
- inline$BDLGetDebugLevel$281$Entry#1:
- goto inline$BDLGetDebugLevel$281$start#1;
-
- inline$BDLGetDebugLevel$281$start#1:
- goto inline$BDLGetDebugLevel$281$label_3#1;
-
- inline$BDLGetDebugLevel$281$label_3#1:
- havoc inline$BDLGetDebugLevel$281$myNondetVar_0;
- inline$BDLGetDebugLevel$281$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$281$myNondetVar_0;
- goto inline$BDLGetDebugLevel$281$label_1#1;
-
- inline$BDLGetDebugLevel$281$label_1#1:
- goto inline$BDLGetDebugLevel$281$Return#1;
-
- inline$BDLGetDebugLevel$281$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$ := inline$BDLGetDebugLevel$281$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_143$1#1;
-
- inline$BDLHandleRemove$0$label_143$1#1:
- goto inline$BDLHandleRemove$0$anon61_Then#1, inline$BDLHandleRemove$0$anon61_Else#1;
-
- inline$BDLHandleRemove$0$anon61_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon39#1;
-
- inline$BDLHandleRemove$0$anon39#1:
- goto inline$BDLHandleRemove$0$label_152#1;
-
- inline$BDLHandleRemove$0$label_152#1:
- goto inline$BDLHandleRemove$0$label_152_true#1, inline$BDLHandleRemove$0$label_152_false#1;
-
- inline$BDLHandleRemove$0$label_152_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$) == 0;
- goto inline$BDLHandleRemove$0$label_153#1;
-
- inline$BDLHandleRemove$0$label_152_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$) != 0;
- goto inline$BDLHandleRemove$0$label_156#1;
-
- inline$BDLHandleRemove$0$label_156#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_157#1;
-
- inline$BDLHandleRemove$0$label_157#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_158#1;
-
- inline$BDLHandleRemove$0$label_158#1:
- call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLHandleRemove$0$label_159#1;
-
- inline$BDLHandleRemove$0$label_159#1:
- havoc inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$57$;
- goto inline$BDLHandleRemove$0$label_153#1;
-
- inline$BDLHandleRemove$0$label_153#1:
- goto inline$BDLGetDebugLevel$282$Entry#1;
-
- inline$BDLGetDebugLevel$282$Entry#1:
- goto inline$BDLGetDebugLevel$282$start#1;
-
- inline$BDLGetDebugLevel$282$start#1:
- goto inline$BDLGetDebugLevel$282$label_3#1;
-
- inline$BDLGetDebugLevel$282$label_3#1:
- havoc inline$BDLGetDebugLevel$282$myNondetVar_0;
- inline$BDLGetDebugLevel$282$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$282$myNondetVar_0;
- goto inline$BDLGetDebugLevel$282$label_1#1;
-
- inline$BDLGetDebugLevel$282$label_1#1:
- goto inline$BDLGetDebugLevel$282$Return#1;
-
- inline$BDLGetDebugLevel$282$Return#1:
- inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$ := inline$BDLGetDebugLevel$282$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLHandleRemove$0$label_153$1#1;
-
- inline$BDLHandleRemove$0$label_153$1#1:
- goto inline$BDLHandleRemove$0$anon62_Then#1, inline$BDLHandleRemove$0$anon62_Else#1;
-
- inline$BDLHandleRemove$0$anon62_Else#1:
- assume !raiseException;
- goto inline$BDLHandleRemove$0$anon41#1;
-
- inline$BDLHandleRemove$0$anon41#1:
- goto inline$BDLHandleRemove$0$label_162#1;
-
- inline$BDLHandleRemove$0$label_162#1:
- goto inline$BDLHandleRemove$0$label_162_true#1, inline$BDLHandleRemove$0$label_162_false#1;
-
- inline$BDLHandleRemove$0$label_162_false#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$, 4) == 0;
- goto inline$BDLHandleRemove$0$label_163#1;
-
- inline$BDLHandleRemove$0$label_162_true#1:
- assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$, 4) != 0;
- goto inline$BDLHandleRemove$0$label_164#1;
-
- inline$BDLHandleRemove$0$label_164#1:
- goto inline$BDLHandleRemove$0$label_163#1;
-
- inline$BDLHandleRemove$0$label_163#1:
- goto inline$BDLHandleRemove$0$label_1#1;
-
- inline$BDLHandleRemove$0$label_1#1:
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon62_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon61_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon57_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon60_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon59_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon58_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon56_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon52_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon55_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon54_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon53_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon51_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon50_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon49_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon48_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon47_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon46_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon45_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon44_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon43_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$anon42_Then#1:
- assume raiseException;
- goto inline$BDLHandleRemove$0$Return#1;
-
- inline$BDLHandleRemove$0$Return#1:
- goto inline$BDLPnPRemove$0$label_73$1#1;
-
- inline$BDLPnPRemove$0$label_73$1#1:
- goto inline$BDLPnPRemove$0$anon35_Then#1, inline$BDLPnPRemove$0$anon35_Else#1;
-
- inline$BDLPnPRemove$0$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon23#1;
-
- inline$BDLPnPRemove$0$anon23#1:
- goto inline$BDLPnPRemove$0$label_32#1;
-
- inline$BDLPnPRemove$0$anon35_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$label_29_true#1:
- havoc inline$BDLPnPRemove$0$myNondetVar_0;
- assume inline$BDLPnPRemove$0$myNondetVar_0 != 0;
- goto inline$BDLPnPRemove$0$label_32#1;
-
- inline$BDLPnPRemove$0$label_32#1:
- call IoReleaseRemoveLockAndWaitEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16), 544632146, 88);
- goto inline$BDLPnPRemove$0$anon27_Then#1, inline$BDLPnPRemove$0$anon27_Else#1;
-
- inline$BDLPnPRemove$0$anon27_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon7#1;
-
- inline$BDLPnPRemove$0$anon7#1:
- goto inline$BDLPnPRemove$0$label_35#1;
-
- inline$BDLPnPRemove$0$label_35#1:
- goto inline$BDLCleanupDeviceCapabilities$0$Entry#1;
-
- inline$BDLCleanupDeviceCapabilities$0$Entry#1:
- goto inline$BDLCleanupDeviceCapabilities$0$start#1;
-
- inline$BDLCleanupDeviceCapabilities$0$start#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_3#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_3#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_4#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_4#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_5#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_5#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_6#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_6#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_7#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_7#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_7_true#1, inline$BDLCleanupDeviceCapabilities$0$label_7_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_7_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 == 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_8#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_7_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 != 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_9#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_9#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0, 541869122);
- goto inline$BDLCleanupDeviceCapabilities$0$anon14_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon14_Else#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon14_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$anon1#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon1#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_12#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_12#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_8#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_8#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_8_true#1, inline$BDLCleanupDeviceCapabilities$0$label_8_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_8_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 == 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_1#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_8_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 != 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_13#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_13#1:
- inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4 := 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_14#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_14#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_14_head#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_14_head#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_14_true#1, inline$BDLCleanupDeviceCapabilities$0$label_14_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_14_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- assume !INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0);
- goto inline$BDLCleanupDeviceCapabilities$0$label_15#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_15#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0, 541869122);
- goto inline$BDLCleanupDeviceCapabilities$0$anon15_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon15_Else#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon15_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$anon3#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon3#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_47#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_47#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_1#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_1#1:
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon15_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_14_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- assume INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0);
- goto inline$BDLCleanupDeviceCapabilities$0$label_18#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_18#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_18_true#1, inline$BDLCleanupDeviceCapabilities$0$label_18_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_18_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 == 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_19#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_18_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 != 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_20#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_20#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$1$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- goto inline$BDLCleanupDeviceCapabilities$0$label_21#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_21#1:
- call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$1$, 541869122);
- goto inline$BDLCleanupDeviceCapabilities$0$anon16_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon16_Else#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$anon5#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon5#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_19#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_19#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_19_true#1, inline$BDLCleanupDeviceCapabilities$0$label_19_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_19_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 == 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_24#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_19_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 != 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_25#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_25#1:
- inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4 := 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_26#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_26#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_26_head#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_26_head#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_26_true#1, inline$BDLCleanupDeviceCapabilities$0$label_26_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_26_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- assume !INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1);
- goto inline$BDLCleanupDeviceCapabilities$0$label_27#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_27#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$5$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- goto inline$BDLCleanupDeviceCapabilities$0$label_44#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_44#1:
- call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$5$, 541869122);
- goto inline$BDLCleanupDeviceCapabilities$0$anon20_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon20_Else#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$anon13#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon13#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_24#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_24#1:
- inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4 := PLUS(inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4, 1, 1);
- goto inline$BDLCleanupDeviceCapabilities$0$label_14_head#0;
-
- inline$BDLCleanupDeviceCapabilities$0$label_14_head#0:
- assume false;
- return;
-
- inline$BDLCleanupDeviceCapabilities$0$anon20_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_26_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- assume INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1);
- goto inline$BDLCleanupDeviceCapabilities$0$label_28#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_28#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_28_true#1, inline$BDLCleanupDeviceCapabilities$0$label_28_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_28_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 == 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_29#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_28_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 != 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_30#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_30#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$2$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- goto inline$BDLCleanupDeviceCapabilities$0$label_31#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_31#1:
- call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$2$, 541869122);
- goto inline$BDLCleanupDeviceCapabilities$0$anon17_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon17_Else#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$anon7#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon7#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_29#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_29#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_29_true#1, inline$BDLCleanupDeviceCapabilities$0$label_29_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_29_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 == 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_34#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_29_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 != 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_35#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_35#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$3$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- goto inline$BDLCleanupDeviceCapabilities$0$label_36#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_36#1:
- call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$3$, 541869122);
- goto inline$BDLCleanupDeviceCapabilities$0$anon18_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon18_Else#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$anon9#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon9#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_34#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_34#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_34_true#1, inline$BDLCleanupDeviceCapabilities$0$label_34_false#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_34_false#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 == 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_39#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_34_true#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 != 0;
- goto inline$BDLCleanupDeviceCapabilities$0$label_40#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_40#1:
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
- havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$4$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
- goto inline$BDLCleanupDeviceCapabilities$0$label_41#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_41#1:
- call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$4$, 541869122);
- goto inline$BDLCleanupDeviceCapabilities$0$anon19_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon19_Else#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$anon11#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon11#1:
- goto inline$BDLCleanupDeviceCapabilities$0$label_39#1;
-
- inline$BDLCleanupDeviceCapabilities$0$label_39#1:
- inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4 := PLUS(inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4, 1, 1);
- goto inline$BDLCleanupDeviceCapabilities$0$label_26_head#0;
-
- inline$BDLCleanupDeviceCapabilities$0$label_26_head#0:
- assume false;
- return;
-
- inline$BDLCleanupDeviceCapabilities$0$anon19_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon18_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon17_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon16_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$anon14_Then#1:
- assume raiseException;
- goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
-
- inline$BDLCleanupDeviceCapabilities$0$Return#1:
- goto inline$BDLPnPRemove$0$label_35$1#1;
-
- inline$BDLPnPRemove$0$label_35$1#1:
- goto inline$BDLPnPRemove$0$anon28_Then#1, inline$BDLPnPRemove$0$anon28_Else#1;
-
- inline$BDLPnPRemove$0$anon28_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon9#1;
-
- inline$BDLPnPRemove$0$anon9#1:
- goto inline$BDLPnPRemove$0$label_38#1;
-
- inline$BDLPnPRemove$0$label_38#1:
- call IoDetachDevice(inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16);
- goto inline$BDLPnPRemove$0$anon29_Then#1, inline$BDLPnPRemove$0$anon29_Else#1;
-
- inline$BDLPnPRemove$0$anon29_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon11#1;
-
- inline$BDLPnPRemove$0$anon11#1:
- goto inline$BDLPnPRemove$0$label_41#1;
-
- inline$BDLPnPRemove$0$label_41#1:
- call RtlFreeUnicodeString(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16));
- goto inline$BDLPnPRemove$0$anon30_Then#1, inline$BDLPnPRemove$0$anon30_Else#1;
-
- inline$BDLPnPRemove$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon13#1;
-
- inline$BDLPnPRemove$0$anon13#1:
- goto inline$BDLPnPRemove$0$label_44#1;
-
- inline$BDLPnPRemove$0$label_44#1:
- call IoDeleteDevice(inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16);
- goto inline$BDLPnPRemove$0$anon31_Then#1, inline$BDLPnPRemove$0$anon31_Else#1;
-
- inline$BDLPnPRemove$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon15#1;
-
- inline$BDLPnPRemove$0$anon15#1:
- goto inline$BDLPnPRemove$0$label_47#1;
-
- inline$BDLPnPRemove$0$label_47#1:
- goto inline$BDLGetDebugLevel$205$Entry#1;
-
- inline$BDLGetDebugLevel$205$Entry#1:
- goto inline$BDLGetDebugLevel$205$start#1;
-
- inline$BDLGetDebugLevel$205$start#1:
- goto inline$BDLGetDebugLevel$205$label_3#1;
-
- inline$BDLGetDebugLevel$205$label_3#1:
- havoc inline$BDLGetDebugLevel$205$myNondetVar_0;
- inline$BDLGetDebugLevel$205$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$205$myNondetVar_0;
- goto inline$BDLGetDebugLevel$205$label_1#1;
-
- inline$BDLGetDebugLevel$205$label_1#1:
- goto inline$BDLGetDebugLevel$205$Return#1;
-
- inline$BDLGetDebugLevel$205$Return#1:
- inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$ := inline$BDLGetDebugLevel$205$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPRemove$0$label_47$1#1;
-
- inline$BDLPnPRemove$0$label_47$1#1:
- goto inline$BDLPnPRemove$0$anon32_Then#1, inline$BDLPnPRemove$0$anon32_Else#1;
-
- inline$BDLPnPRemove$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon17#1;
-
- inline$BDLPnPRemove$0$anon17#1:
- goto inline$BDLPnPRemove$0$label_50#1;
-
- inline$BDLPnPRemove$0$label_50#1:
- goto inline$BDLPnPRemove$0$label_50_true#1, inline$BDLPnPRemove$0$label_50_false#1;
-
- inline$BDLPnPRemove$0$label_50_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$) == 0;
- goto inline$BDLPnPRemove$0$label_51#1;
-
- inline$BDLPnPRemove$0$label_50_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$) != 0;
- goto inline$BDLPnPRemove$0$label_54#1;
-
- inline$BDLPnPRemove$0$label_54#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_55#1;
-
- inline$BDLPnPRemove$0$label_55#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_56#1;
-
- inline$BDLPnPRemove$0$label_56#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_57#1;
-
- inline$BDLPnPRemove$0$label_57#1:
- havoc inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$15$;
- goto inline$BDLPnPRemove$0$label_51#1;
-
- inline$BDLPnPRemove$0$label_51#1:
- goto inline$BDLGetDebugLevel$206$Entry#1;
-
- inline$BDLGetDebugLevel$206$Entry#1:
- goto inline$BDLGetDebugLevel$206$start#1;
-
- inline$BDLGetDebugLevel$206$start#1:
- goto inline$BDLGetDebugLevel$206$label_3#1;
-
- inline$BDLGetDebugLevel$206$label_3#1:
- havoc inline$BDLGetDebugLevel$206$myNondetVar_0;
- inline$BDLGetDebugLevel$206$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$206$myNondetVar_0;
- goto inline$BDLGetDebugLevel$206$label_1#1;
-
- inline$BDLGetDebugLevel$206$label_1#1:
- goto inline$BDLGetDebugLevel$206$Return#1;
-
- inline$BDLGetDebugLevel$206$Return#1:
- inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$ := inline$BDLGetDebugLevel$206$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPRemove$0$label_51$1#1;
-
- inline$BDLPnPRemove$0$label_51$1#1:
- goto inline$BDLPnPRemove$0$anon33_Then#1, inline$BDLPnPRemove$0$anon33_Else#1;
-
- inline$BDLPnPRemove$0$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon19#1;
-
- inline$BDLPnPRemove$0$anon19#1:
- goto inline$BDLPnPRemove$0$label_60#1;
-
- inline$BDLPnPRemove$0$label_60#1:
- goto inline$BDLPnPRemove$0$label_60_true#1, inline$BDLPnPRemove$0$label_60_false#1;
-
- inline$BDLPnPRemove$0$label_60_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$) == 0;
- goto inline$BDLPnPRemove$0$label_61#1;
-
- inline$BDLPnPRemove$0$label_60_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$) != 0;
- goto inline$BDLPnPRemove$0$label_64#1;
-
- inline$BDLPnPRemove$0$label_64#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_65#1;
-
- inline$BDLPnPRemove$0$label_65#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_66#1;
-
- inline$BDLPnPRemove$0$label_66#1:
- call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPRemove$0$label_67#1;
-
- inline$BDLPnPRemove$0$label_67#1:
- havoc inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$20$;
- goto inline$BDLPnPRemove$0$label_61#1;
-
- inline$BDLPnPRemove$0$label_61#1:
- goto inline$BDLGetDebugLevel$207$Entry#1;
-
- inline$BDLGetDebugLevel$207$Entry#1:
- goto inline$BDLGetDebugLevel$207$start#1;
-
- inline$BDLGetDebugLevel$207$start#1:
- goto inline$BDLGetDebugLevel$207$label_3#1;
-
- inline$BDLGetDebugLevel$207$label_3#1:
- havoc inline$BDLGetDebugLevel$207$myNondetVar_0;
- inline$BDLGetDebugLevel$207$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$207$myNondetVar_0;
- goto inline$BDLGetDebugLevel$207$label_1#1;
-
- inline$BDLGetDebugLevel$207$label_1#1:
- goto inline$BDLGetDebugLevel$207$Return#1;
-
- inline$BDLGetDebugLevel$207$Return#1:
- inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$ := inline$BDLGetDebugLevel$207$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPRemove$0$label_61$1#1;
-
- inline$BDLPnPRemove$0$label_61$1#1:
- goto inline$BDLPnPRemove$0$anon34_Then#1, inline$BDLPnPRemove$0$anon34_Else#1;
-
- inline$BDLPnPRemove$0$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLPnPRemove$0$anon21#1;
-
- inline$BDLPnPRemove$0$anon21#1:
- goto inline$BDLPnPRemove$0$label_70#1;
-
- inline$BDLPnPRemove$0$label_70#1:
- goto inline$BDLPnPRemove$0$label_70_true#1, inline$BDLPnPRemove$0$label_70_false#1;
-
- inline$BDLPnPRemove$0$label_70_false#1:
- assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$, 4) == 0;
- goto inline$BDLPnPRemove$0$label_71#1;
-
- inline$BDLPnPRemove$0$label_70_true#1:
- assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$, 4) != 0;
- goto inline$BDLPnPRemove$0$label_72#1;
-
- inline$BDLPnPRemove$0$label_72#1:
- goto inline$BDLPnPRemove$0$label_71#1;
-
- inline$BDLPnPRemove$0$label_71#1:
- inline$BDLPnPRemove$0$$result.BDLPnPRemove$2476.0$1$ := inline$BDLPnPRemove$0$$status$5$2484.16$BDLPnPRemove$16;
- goto inline$BDLPnPRemove$0$label_1#1;
-
- inline$BDLPnPRemove$0$label_1#1:
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon34_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon33_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon29_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon28_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon27_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon26_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon25_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$anon24_Then#1:
- assume raiseException;
- goto inline$BDLPnPRemove$0$Return#1;
-
- inline$BDLPnPRemove$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPRemove$961.29$34$ := inline$BDLPnPRemove$0$$result.BDLPnPRemove$2476.0$1$;
- goto inline$BDLPnP$0$label_119$1#1;
-
- inline$BDLPnP$0$label_119$1#1:
- goto inline$BDLPnP$0$anon69_Then#1, inline$BDLPnP$0$anon69_Else#1;
-
- inline$BDLPnP$0$anon69_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon31#1;
-
- inline$BDLPnP$0$anon31#1:
- goto inline$BDLPnP$0$label_152#1;
-
- inline$BDLPnP$0$label_152#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPRemove$961.29$34$;
- goto inline$BDLPnP$0$label_153#1;
-
- inline$BDLPnP$0$label_153#1:
- inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 0;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon69_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_2#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 1;
- goto inline$BDLPnP$0$label_116#1;
-
- inline$BDLPnP$0$label_116#1:
- goto inline$BDLPnPQueryRemove$0$Entry#1;
-
- inline$BDLPnPQueryRemove$0$Entry#1:
- inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPQueryRemove$0$start#1;
-
- inline$BDLPnPQueryRemove$0$start#1:
- inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12 := inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12_.1;
- inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12 := inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12_.1;
- goto inline$BDLPnPQueryRemove$0$label_3#1;
-
- inline$BDLPnPQueryRemove$0$label_3#1:
- goto inline$BDLPnPQueryRemove$0$label_4#1;
-
- inline$BDLPnPQueryRemove$0$label_4#1:
- inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 := 0;
- goto inline$BDLPnPQueryRemove$0$label_5#1;
-
- inline$BDLPnPQueryRemove$0$label_5#1:
- goto inline$BDLGetDebugLevel$109$Entry#1;
-
- inline$BDLGetDebugLevel$109$Entry#1:
- goto inline$BDLGetDebugLevel$109$start#1;
-
- inline$BDLGetDebugLevel$109$start#1:
- goto inline$BDLGetDebugLevel$109$label_3#1;
-
- inline$BDLGetDebugLevel$109$label_3#1:
- havoc inline$BDLGetDebugLevel$109$myNondetVar_0;
- inline$BDLGetDebugLevel$109$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$109$myNondetVar_0;
- goto inline$BDLGetDebugLevel$109$label_1#1;
-
- inline$BDLGetDebugLevel$109$label_1#1:
- goto inline$BDLGetDebugLevel$109$Return#1;
-
- inline$BDLGetDebugLevel$109$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$ := inline$BDLGetDebugLevel$109$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_5$1#1;
-
- inline$BDLPnPQueryRemove$0$label_5$1#1:
- goto inline$BDLPnPQueryRemove$0$anon22_Then#1, inline$BDLPnPQueryRemove$0$anon22_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon1#1;
-
- inline$BDLPnPQueryRemove$0$anon1#1:
- goto inline$BDLPnPQueryRemove$0$label_8#1;
-
- inline$BDLPnPQueryRemove$0$label_8#1:
- goto inline$BDLPnPQueryRemove$0$label_8_true#1, inline$BDLPnPQueryRemove$0$label_8_false#1;
-
- inline$BDLPnPQueryRemove$0$label_8_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$) == 0;
- goto inline$BDLPnPQueryRemove$0$label_9#1;
-
- inline$BDLPnPQueryRemove$0$label_8_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$) != 0;
- goto inline$BDLPnPQueryRemove$0$label_12#1;
-
- inline$BDLPnPQueryRemove$0$label_12#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_13#1;
-
- inline$BDLPnPQueryRemove$0$label_13#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_14#1;
-
- inline$BDLPnPQueryRemove$0$label_14#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_15#1;
-
- inline$BDLPnPQueryRemove$0$label_15#1:
- havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$3$;
- goto inline$BDLPnPQueryRemove$0$label_9#1;
-
- inline$BDLPnPQueryRemove$0$label_9#1:
- goto inline$BDLGetDebugLevel$110$Entry#1;
-
- inline$BDLGetDebugLevel$110$Entry#1:
- goto inline$BDLGetDebugLevel$110$start#1;
-
- inline$BDLGetDebugLevel$110$start#1:
- goto inline$BDLGetDebugLevel$110$label_3#1;
-
- inline$BDLGetDebugLevel$110$label_3#1:
- havoc inline$BDLGetDebugLevel$110$myNondetVar_0;
- inline$BDLGetDebugLevel$110$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$110$myNondetVar_0;
- goto inline$BDLGetDebugLevel$110$label_1#1;
-
- inline$BDLGetDebugLevel$110$label_1#1:
- goto inline$BDLGetDebugLevel$110$Return#1;
-
- inline$BDLGetDebugLevel$110$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$ := inline$BDLGetDebugLevel$110$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_9$1#1;
-
- inline$BDLPnPQueryRemove$0$label_9$1#1:
- goto inline$BDLPnPQueryRemove$0$anon23_Then#1, inline$BDLPnPQueryRemove$0$anon23_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon3#1;
-
- inline$BDLPnPQueryRemove$0$anon3#1:
- goto inline$BDLPnPQueryRemove$0$label_18#1;
-
- inline$BDLPnPQueryRemove$0$label_18#1:
- goto inline$BDLPnPQueryRemove$0$label_18_true#1, inline$BDLPnPQueryRemove$0$label_18_false#1;
-
- inline$BDLPnPQueryRemove$0$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$) == 0;
- goto inline$BDLPnPQueryRemove$0$label_19#1;
-
- inline$BDLPnPQueryRemove$0$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$) != 0;
- goto inline$BDLPnPQueryRemove$0$label_22#1;
-
- inline$BDLPnPQueryRemove$0$label_22#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_23#1;
-
- inline$BDLPnPQueryRemove$0$label_23#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_24#1;
-
- inline$BDLPnPQueryRemove$0$label_24#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_25#1;
-
- inline$BDLPnPQueryRemove$0$label_25#1:
- havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$8$;
- goto inline$BDLPnPQueryRemove$0$label_19#1;
-
- inline$BDLPnPQueryRemove$0$label_19#1:
- goto inline$BDLGetDebugLevel$111$Entry#1;
-
- inline$BDLGetDebugLevel$111$Entry#1:
- goto inline$BDLGetDebugLevel$111$start#1;
-
- inline$BDLGetDebugLevel$111$start#1:
- goto inline$BDLGetDebugLevel$111$label_3#1;
-
- inline$BDLGetDebugLevel$111$label_3#1:
- havoc inline$BDLGetDebugLevel$111$myNondetVar_0;
- inline$BDLGetDebugLevel$111$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$111$myNondetVar_0;
- goto inline$BDLGetDebugLevel$111$label_1#1;
-
- inline$BDLGetDebugLevel$111$label_1#1:
- goto inline$BDLGetDebugLevel$111$Return#1;
-
- inline$BDLGetDebugLevel$111$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$ := inline$BDLGetDebugLevel$111$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_19$1#1;
-
- inline$BDLPnPQueryRemove$0$label_19$1#1:
- goto inline$BDLPnPQueryRemove$0$anon24_Then#1, inline$BDLPnPQueryRemove$0$anon24_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon24_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon5#1;
-
- inline$BDLPnPQueryRemove$0$anon5#1:
- goto inline$BDLPnPQueryRemove$0$label_28#1;
-
- inline$BDLPnPQueryRemove$0$label_28#1:
- goto inline$BDLPnPQueryRemove$0$label_28_true#1, inline$BDLPnPQueryRemove$0$label_28_false#1;
-
- inline$BDLPnPQueryRemove$0$label_28_false#1:
- assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$, 4) == 0;
- goto inline$BDLPnPQueryRemove$0$label_29#1;
-
- inline$BDLPnPQueryRemove$0$label_28_true#1:
- assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$, 4) != 0;
- goto inline$BDLPnPQueryRemove$0$label_32#1;
-
- inline$BDLPnPQueryRemove$0$label_32#1:
- goto inline$BDLPnPQueryRemove$0$label_29#1;
-
- inline$BDLPnPQueryRemove$0$label_29#1:
- call inline$BDLPnPQueryRemove$0$$result.IoSetDeviceInterfaceState$2272.29$13$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12), 0);
- goto inline$BDLPnPQueryRemove$0$anon25_Then#1, inline$BDLPnPQueryRemove$0$anon25_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon25_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon7#1;
-
- inline$BDLPnPQueryRemove$0$anon7#1:
- goto inline$BDLPnPQueryRemove$0$label_33#1;
-
- inline$BDLPnPQueryRemove$0$label_33#1:
- goto inline$BDLPnPQueryRemove$0$label_33_true#1, inline$BDLPnPQueryRemove$0$label_33_false#1;
-
- inline$BDLPnPQueryRemove$0$label_33_false#1:
- havoc inline$BDLPnPQueryRemove$0$myNondetVar_0;
- assume inline$BDLPnPQueryRemove$0$myNondetVar_0 == 0;
- goto inline$BDLPnPQueryRemove$0$label_34#1;
-
- inline$BDLPnPQueryRemove$0$label_34#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$Entry#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$Entry#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12;
- goto inline$BDLCallLowerLevelDriverAndWait$1$start#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$start#1:
- call inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
- inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_4#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_4#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_6#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_6#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$Entry#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$Entry#1:
- inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$start#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$start#1:
- inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_4#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_4#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_5#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_5#1:
- goto inline$IoGetCurrentIrpStackLocation$23$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$23$Entry#1:
- inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetCurrentIrpStackLocation$23$start#1;
-
- inline$IoGetCurrentIrpStackLocation$23$start#1:
- inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$23$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$23$label_3_true#1, inline$IoGetCurrentIrpStackLocation$23$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$23$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$23$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$23$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$23$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$23$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$23$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$23$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$23$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$23$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$23$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$23$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$23$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$23$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$23$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$23$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$23$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$23$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$23$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$23$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_5$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_5$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$anon1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_8#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_8#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_9#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_9#1:
- goto inline$IoGetNextIrpStackLocation$3$Entry#1;
-
- inline$IoGetNextIrpStackLocation$3$Entry#1:
- inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetNextIrpStackLocation$3$start#1;
-
- inline$IoGetNextIrpStackLocation$3$start#1:
- inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$3$label_3#1;
-
- inline$IoGetNextIrpStackLocation$3$label_3#1:
- goto inline$IoGetNextIrpStackLocation$3$label_3_true#1, inline$IoGetNextIrpStackLocation$3$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$3$label_3_false#1:
- inline$IoGetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$3$myVar_0);
- goto inline$IoGetNextIrpStackLocation$3$label_4#1;
-
- inline$IoGetNextIrpStackLocation$3$label_4#1:
- call inline$IoGetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$3$label_6#1;
-
- inline$IoGetNextIrpStackLocation$3$label_6#1:
- call inline$IoGetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$3$label_7#1;
-
- inline$IoGetNextIrpStackLocation$3$label_7#1:
- goto inline$IoGetNextIrpStackLocation$3$label_5#1;
-
- inline$IoGetNextIrpStackLocation$3$label_3_true#1:
- inline$IoGetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$3$myVar_0);
- goto inline$IoGetNextIrpStackLocation$3$label_5#1;
-
- inline$IoGetNextIrpStackLocation$3$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$3$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$3$label_1#1;
-
- inline$IoGetNextIrpStackLocation$3$label_1#1:
- goto inline$IoGetNextIrpStackLocation$3$Return#1;
-
- inline$IoGetNextIrpStackLocation$3$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_9$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_9$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$anon3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_12#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_12#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_13#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_13#1:
- havoc inline$IoCopyCurrentIrpStackLocationToNext$1$$result.memcpy$25110.4$3$;
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_16#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_16#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$label_1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_6$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_6$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon16_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_9#1:
- goto inline$storm_KeInitializeEvent$1$Entry#1;
-
- inline$storm_KeInitializeEvent$1$Entry#1:
- inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
- goto inline$storm_KeInitializeEvent$1$start#1;
-
- inline$storm_KeInitializeEvent$1$start#1:
- inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
- inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12_.1;
- goto inline$storm_KeInitializeEvent$1$label_3#1;
-
- inline$storm_KeInitializeEvent$1$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12];
- call contextSwitch();
- goto inline$storm_KeInitializeEvent$1$label_1#1;
-
- inline$storm_KeInitializeEvent$1$label_1#1:
- goto inline$storm_KeInitializeEvent$1$Return#1;
-
- inline$storm_KeInitializeEvent$1$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_9$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_9$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon17_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_12#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$1$Entry#1;
-
- inline$storm_IoSetCompletionRoutine$1$Entry#1:
- inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoSetCompletionRoutine$1$start#1;
-
- inline$storm_IoSetCompletionRoutine$1$start#1:
- inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
- goto inline$storm_IoSetCompletionRoutine$1$label_3#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_3#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_4#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_4#1:
- call inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$ := storm_nondet();
- goto inline$storm_IoSetCompletionRoutine$1$label_7#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_7#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_7_true#1, inline$storm_IoSetCompletionRoutine$1$label_7_false#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_7_false#1:
- assume inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$ == 0;
- goto inline$storm_IoSetCompletionRoutine$1$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_7_true#1:
- assume inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$ != 0;
- goto inline$storm_IoSetCompletionRoutine$1$label_11#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_11#1:
- havoc raiseException;
- goto inline$storm_IoSetCompletionRoutine$1$anon6_Then#1, inline$storm_IoSetCompletionRoutine$1$anon6_Else#1;
-
- inline$storm_IoSetCompletionRoutine$1$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$1$anon3#1;
-
- inline$storm_IoSetCompletionRoutine$1$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
- call contextSwitch();
- goto inline$storm_IoSetCompletionRoutine$1$label_12#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_12_true#1, inline$storm_IoSetCompletionRoutine$1$label_12_false#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_12_false#1:
- assume 0 == 0;
- goto inline$storm_IoSetCompletionRoutine$1$label_13#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_13#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCompletionRoutine$1$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_12_true#1:
- assume 0 != 0;
- goto inline$storm_IoSetCompletionRoutine$1$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_8#1:
- goto inline$IoGetNextIrpStackLocation$4$Entry#1;
-
- inline$IoGetNextIrpStackLocation$4$Entry#1:
- inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
- goto inline$IoGetNextIrpStackLocation$4$start#1;
-
- inline$IoGetNextIrpStackLocation$4$start#1:
- inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$4$label_3#1;
-
- inline$IoGetNextIrpStackLocation$4$label_3#1:
- goto inline$IoGetNextIrpStackLocation$4$label_3_true#1, inline$IoGetNextIrpStackLocation$4$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$4$label_3_false#1:
- inline$IoGetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$4$myVar_0);
- goto inline$IoGetNextIrpStackLocation$4$label_4#1;
-
- inline$IoGetNextIrpStackLocation$4$label_4#1:
- call inline$IoGetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$4$label_6#1;
-
- inline$IoGetNextIrpStackLocation$4$label_6#1:
- call inline$IoGetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$4$label_7#1;
-
- inline$IoGetNextIrpStackLocation$4$label_7#1:
- goto inline$IoGetNextIrpStackLocation$4$label_5#1;
-
- inline$IoGetNextIrpStackLocation$4$label_3_true#1:
- inline$IoGetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$4$myVar_0);
- goto inline$IoGetNextIrpStackLocation$4$label_5#1;
-
- inline$IoGetNextIrpStackLocation$4$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$4$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$4$label_1#1;
-
- inline$IoGetNextIrpStackLocation$4$label_1#1:
- goto inline$IoGetNextIrpStackLocation$4$Return#1;
-
- inline$IoGetNextIrpStackLocation$4$Return#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_8$1#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_8$1#1:
- goto inline$storm_IoSetCompletionRoutine$1$anon5_Then#1, inline$storm_IoSetCompletionRoutine$1$anon5_Else#1;
-
- inline$storm_IoSetCompletionRoutine$1$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$1$anon1#1;
-
- inline$storm_IoSetCompletionRoutine$1$anon1#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_16#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_16#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_17#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_17#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_18#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_18#1:
- goto inline$storm_IoSetCompletionRoutine$1$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$1$label_1#1:
- goto inline$storm_IoSetCompletionRoutine$1$Return#1;
-
- inline$storm_IoSetCompletionRoutine$1$anon5_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$1$Return#1;
-
- inline$storm_IoSetCompletionRoutine$1$anon6_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$1$Return#1;
-
- inline$storm_IoSetCompletionRoutine$1$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_12$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_12$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon18_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_15#1:
- goto inline$IoGetCurrentIrpStackLocation$24$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$24$Entry#1:
- inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoGetCurrentIrpStackLocation$24$start#1;
-
- inline$IoGetCurrentIrpStackLocation$24$start#1:
- inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$24$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$24$label_3_true#1, inline$IoGetCurrentIrpStackLocation$24$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$24$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$24$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$24$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$24$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$24$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$24$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$24$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$24$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$24$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$24$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$24$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$24$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$24$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$24$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$24$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$24$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$24$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$24$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$24$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_15$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_15$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon19_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon7#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon7#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_18#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_18#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$1$label_18_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_18_false#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_19#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_19#1:
- goto inline$storm_IoCallDriver$2$Entry#1;
-
- inline$storm_IoCallDriver$2$Entry#1:
- inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoCallDriver$2$start#1;
-
- inline$storm_IoCallDriver$2$start#1:
- inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$2$label_3#1;
-
- inline$storm_IoCallDriver$2$label_3#1:
- goto inline$storm_IoCallDriver$2$label_4#1;
-
- inline$storm_IoCallDriver$2$label_4#1:
- goto inline$storm_IoCallDriver$2$label_5#1;
-
- inline$storm_IoCallDriver$2$label_5#1:
- goto inline$storm_IoCallDriver$2$label_6#1;
-
- inline$storm_IoCallDriver$2$label_6#1:
- call inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$2$label_9#1;
-
- inline$storm_IoCallDriver$2$label_9#1:
- goto inline$storm_IoCallDriver$2$label_9_true#1, inline$storm_IoCallDriver$2$label_9_false#1;
-
- inline$storm_IoCallDriver$2$label_9_false#1:
- assume inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$2$label_10#1;
-
- inline$storm_IoCallDriver$2$label_9_true#1:
- assume inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$2$label_13#1;
-
- inline$storm_IoCallDriver$2$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$2$anon12_Then#1, inline$storm_IoCallDriver$2$anon12_Else#1;
-
- inline$storm_IoCallDriver$2$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$2$anon3#1;
-
- inline$storm_IoCallDriver$2$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$2$label_14#1;
-
- inline$storm_IoCallDriver$2$label_14#1:
- goto inline$storm_IoCallDriver$2$label_14_true#1, inline$storm_IoCallDriver$2$label_14_false#1;
-
- inline$storm_IoCallDriver$2$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$2$label_15#1;
-
- inline$storm_IoCallDriver$2$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$2$label_1#1;
-
- inline$storm_IoCallDriver$2$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$2$label_10#1;
-
- inline$storm_IoCallDriver$2$label_10#1:
- goto inline$IoSetNextIrpStackLocation$3$Entry#1;
-
- inline$IoSetNextIrpStackLocation$3$Entry#1:
- inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$3$start#1;
-
- inline$IoSetNextIrpStackLocation$3$start#1:
- inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$3$label_3#1;
-
- inline$IoSetNextIrpStackLocation$3$label_3#1:
- goto inline$IoSetNextIrpStackLocation$3$label_3_true#1, inline$IoSetNextIrpStackLocation$3$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$3$label_3_false#1:
- inline$IoSetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$3$myVar_0);
- goto inline$IoSetNextIrpStackLocation$3$label_4#1;
-
- inline$IoSetNextIrpStackLocation$3$label_4#1:
- call inline$IoSetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$3$label_7#1;
-
- inline$IoSetNextIrpStackLocation$3$label_7#1:
- call inline$IoSetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$3$label_8#1;
-
- inline$IoSetNextIrpStackLocation$3$label_8#1:
- goto inline$IoSetNextIrpStackLocation$3$label_5#1;
-
- inline$IoSetNextIrpStackLocation$3$label_3_true#1:
- inline$IoSetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$3$myVar_0);
- goto inline$IoSetNextIrpStackLocation$3$label_5#1;
-
- inline$IoSetNextIrpStackLocation$3$label_5#1:
- inline$IoSetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$3$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$3$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$3$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$3$label_6#1;
-
- inline$IoSetNextIrpStackLocation$3$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$3$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$3$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$3$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$3$label_1#1;
-
- inline$IoSetNextIrpStackLocation$3$label_1#1:
- goto inline$IoSetNextIrpStackLocation$3$Return#1;
-
- inline$IoSetNextIrpStackLocation$3$Return#1:
- goto inline$storm_IoCallDriver$2$label_10$1#1;
-
- inline$storm_IoCallDriver$2$label_10$1#1:
- goto inline$storm_IoCallDriver$2$anon11_Then#1, inline$storm_IoCallDriver$2$anon11_Else#1;
-
- inline$storm_IoCallDriver$2$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$2$anon1#1;
-
- inline$storm_IoCallDriver$2$anon1#1:
- goto inline$storm_IoCallDriver$2$label_18#1;
-
- inline$storm_IoCallDriver$2$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$25$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$25$Entry#1:
- inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$25$start#1;
-
- inline$IoGetCurrentIrpStackLocation$25$start#1:
- inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$25$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$25$label_3_true#1, inline$IoGetCurrentIrpStackLocation$25$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$25$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$25$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$25$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$25$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$25$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$25$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$25$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$25$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$25$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$25$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$25$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$25$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$25$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$25$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$25$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$25$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$25$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$25$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$25$Return#1:
- goto inline$storm_IoCallDriver$2$label_18$1#1;
-
- inline$storm_IoCallDriver$2$label_18$1#1:
- goto inline$storm_IoCallDriver$2$anon13_Then#1, inline$storm_IoCallDriver$2$anon13_Else#1;
-
- inline$storm_IoCallDriver$2$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$2$anon6#1;
-
- inline$storm_IoCallDriver$2$anon6#1:
- goto inline$storm_IoCallDriver$2$label_21#1;
-
- inline$storm_IoCallDriver$2$label_21#1:
- goto inline$storm_IoCallDriver$2$label_22#1;
-
- inline$storm_IoCallDriver$2$label_22#1:
- goto inline$storm_IoCallDriver$2$label_23#1;
-
- inline$storm_IoCallDriver$2$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$2$label_24#1;
-
- inline$storm_IoCallDriver$2$label_24#1:
- call inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$2$label_27#1;
-
- inline$storm_IoCallDriver$2$label_27#1:
- goto inline$storm_IoCallDriver$2$label_27_case_0#1, inline$storm_IoCallDriver$2$label_27_case_1#1, inline$storm_IoCallDriver$2$label_27_case_2#1;
-
- inline$storm_IoCallDriver$2$label_27_case_2#1:
- assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$2$label_30#1;
-
- inline$storm_IoCallDriver$2$label_30#1:
- inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$2$label_31#1;
-
- inline$storm_IoCallDriver$2$label_31#1:
- goto inline$storm_IoCallDriver$2$label_32#1;
-
- inline$storm_IoCallDriver$2$label_32#1:
- goto inline$storm_IoCallDriver$2$label_33#1;
-
- inline$storm_IoCallDriver$2$label_33#1:
- goto inline$CallCompletionRoutine$4$Entry#1;
-
- inline$CallCompletionRoutine$4$Entry#1:
- inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$4$start#1;
-
- inline$CallCompletionRoutine$4$start#1:
- inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$4$label_3#1;
-
- inline$CallCompletionRoutine$4$label_3#1:
- goto inline$CallCompletionRoutine$4$label_4#1;
-
- inline$CallCompletionRoutine$4$label_4#1:
- goto inline$CallCompletionRoutine$4$label_5#1;
-
- inline$CallCompletionRoutine$4$label_5#1:
- goto inline$CallCompletionRoutine$4$label_6#1;
-
- inline$CallCompletionRoutine$4$label_6#1:
- goto inline$CallCompletionRoutine$4$label_7#1;
-
- inline$CallCompletionRoutine$4$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$26$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$26$Entry#1:
- inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$26$start#1;
-
- inline$IoGetCurrentIrpStackLocation$26$start#1:
- inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$26$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$26$label_3_true#1, inline$IoGetCurrentIrpStackLocation$26$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$26$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$26$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$26$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$26$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$26$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$26$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$26$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$26$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$26$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$26$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$26$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$26$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$26$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$26$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$26$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$26$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$26$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$26$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$26$Return#1:
- goto inline$CallCompletionRoutine$4$label_7$1#1;
-
- inline$CallCompletionRoutine$4$label_7$1#1:
- goto inline$CallCompletionRoutine$4$anon10_Then#1, inline$CallCompletionRoutine$4$anon10_Else#1;
-
- inline$CallCompletionRoutine$4$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$4$anon1#1;
-
- inline$CallCompletionRoutine$4$anon1#1:
- goto inline$CallCompletionRoutine$4$label_10#1;
-
- inline$CallCompletionRoutine$4$label_10#1:
- goto inline$CallCompletionRoutine$4$label_11#1;
-
- inline$CallCompletionRoutine$4$label_11#1:
- havoc inline$CallCompletionRoutine$4$myNondetVar_0;
- inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$myNondetVar_0;
- goto inline$CallCompletionRoutine$4$label_12#1;
-
- inline$CallCompletionRoutine$4$label_12#1:
- havoc inline$CallCompletionRoutine$4$myNondetVar_0;
- inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$myNondetVar_0;
- goto inline$CallCompletionRoutine$4$label_13#1;
-
- inline$CallCompletionRoutine$4$label_13#1:
- havoc inline$CallCompletionRoutine$4$myNondetVar_0;
- goto inline$CallCompletionRoutine$4$label_14#1;
-
- inline$CallCompletionRoutine$4$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$27$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$27$Entry#1:
- inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$27$start#1;
-
- inline$IoGetCurrentIrpStackLocation$27$start#1:
- inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$27$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$27$label_3_true#1, inline$IoGetCurrentIrpStackLocation$27$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$27$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$27$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$27$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$27$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$27$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$27$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$27$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$27$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$27$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$27$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$27$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$27$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$27$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$27$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$27$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$27$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$27$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$27$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$27$Return#1:
- goto inline$CallCompletionRoutine$4$label_14$1#1;
-
- inline$CallCompletionRoutine$4$label_14$1#1:
- goto inline$CallCompletionRoutine$4$anon11_Then#1, inline$CallCompletionRoutine$4$anon11_Else#1;
-
- inline$CallCompletionRoutine$4$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$4$anon3#1;
-
- inline$CallCompletionRoutine$4$anon3#1:
- goto inline$CallCompletionRoutine$4$label_17#1;
-
- inline$CallCompletionRoutine$4$label_17#1:
- goto inline$CallCompletionRoutine$4$label_18#1;
-
- inline$CallCompletionRoutine$4$label_18#1:
- goto inline$CallCompletionRoutine$4$label_18_true#1, inline$CallCompletionRoutine$4$label_18_false#1;
-
- inline$CallCompletionRoutine$4$label_18_false#1:
- assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$4$label_1#1;
-
- inline$CallCompletionRoutine$4$label_18_true#1:
- assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$4$label_19#1;
-
- inline$CallCompletionRoutine$4$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$4$label_20#1;
-
- inline$CallCompletionRoutine$4$label_20#1:
- goto inline$CallCompletionRoutine$4$label_20_icall_1#1, inline$CallCompletionRoutine$4$label_20_icall_2#1, inline$CallCompletionRoutine$4$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$4$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$4$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$4$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$4$Entry#1:
- inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$4$start#1;
-
- inline$BDLSystemPowerIoCompletion$4$start#1:
- call inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$4$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_4#1:
- inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_6#1:
- inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$4$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$4$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$4$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$29$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$29$Entry#1:
- inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$29$start#1;
-
- inline$IoGetCurrentIrpStackLocation$29$start#1:
- inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$29$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$29$label_3_true#1, inline$IoGetCurrentIrpStackLocation$29$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$29$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$29$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$29$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$29$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$29$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$29$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$29$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$29$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$29$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$29$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$29$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$29$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$29$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$29$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$29$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$29$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$29$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$29$Return#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon36_Then#1, inline$BDLSystemPowerIoCompletion$4$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_15#1:
- goto inline$BDLGetDebugLevel$121$Entry#1;
-
- inline$BDLGetDebugLevel$121$Entry#1:
- goto inline$BDLGetDebugLevel$121$start#1;
-
- inline$BDLGetDebugLevel$121$start#1:
- goto inline$BDLGetDebugLevel$121$label_3#1;
-
- inline$BDLGetDebugLevel$121$label_3#1:
- havoc inline$BDLGetDebugLevel$121$myNondetVar_0;
- inline$BDLGetDebugLevel$121$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$121$myNondetVar_0;
- goto inline$BDLGetDebugLevel$121$label_1#1;
-
- inline$BDLGetDebugLevel$121$label_1#1:
- goto inline$BDLGetDebugLevel$121$Return#1;
-
- inline$BDLGetDebugLevel$121$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$121$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon37_Then#1, inline$BDLSystemPowerIoCompletion$4$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_18_true#1, inline$BDLSystemPowerIoCompletion$4$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_22#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_23#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_24#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$4$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_19#1:
- goto inline$BDLGetDebugLevel$122$Entry#1;
-
- inline$BDLGetDebugLevel$122$Entry#1:
- goto inline$BDLGetDebugLevel$122$start#1;
-
- inline$BDLGetDebugLevel$122$start#1:
- goto inline$BDLGetDebugLevel$122$label_3#1;
-
- inline$BDLGetDebugLevel$122$label_3#1:
- havoc inline$BDLGetDebugLevel$122$myNondetVar_0;
- inline$BDLGetDebugLevel$122$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$122$myNondetVar_0;
- goto inline$BDLGetDebugLevel$122$label_1#1;
-
- inline$BDLGetDebugLevel$122$label_1#1:
- goto inline$BDLGetDebugLevel$122$Return#1;
-
- inline$BDLGetDebugLevel$122$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$122$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon38_Then#1, inline$BDLSystemPowerIoCompletion$4$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_28_true#1, inline$BDLSystemPowerIoCompletion$4$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_32#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_33#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_34#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$4$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_29#1:
- goto inline$BDLGetDebugLevel$123$Entry#1;
-
- inline$BDLGetDebugLevel$123$Entry#1:
- goto inline$BDLGetDebugLevel$123$start#1;
-
- inline$BDLGetDebugLevel$123$start#1:
- goto inline$BDLGetDebugLevel$123$label_3#1;
-
- inline$BDLGetDebugLevel$123$label_3#1:
- havoc inline$BDLGetDebugLevel$123$myNondetVar_0;
- inline$BDLGetDebugLevel$123$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$123$myNondetVar_0;
- goto inline$BDLGetDebugLevel$123$label_1#1;
-
- inline$BDLGetDebugLevel$123$label_1#1:
- goto inline$BDLGetDebugLevel$123$Return#1;
-
- inline$BDLGetDebugLevel$123$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$123$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon39_Then#1, inline$BDLSystemPowerIoCompletion$4$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_38_true#1, inline$BDLSystemPowerIoCompletion$4$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_39_true#1, inline$BDLSystemPowerIoCompletion$4$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$4$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$4$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$4$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_106_true#1, inline$BDLSystemPowerIoCompletion$4$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_142#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_143#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$4$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$4$myNondetVar_0, inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$4$anon50_Then#1, inline$BDLSystemPowerIoCompletion$4$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_112#1:
- inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$4$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_113_true#1, inline$BDLSystemPowerIoCompletion$4$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$4$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_117#1:
- goto inline$BDLGetDebugLevel$130$Entry#1;
-
- inline$BDLGetDebugLevel$130$Entry#1:
- goto inline$BDLGetDebugLevel$130$start#1;
-
- inline$BDLGetDebugLevel$130$start#1:
- goto inline$BDLGetDebugLevel$130$label_3#1;
-
- inline$BDLGetDebugLevel$130$label_3#1:
- havoc inline$BDLGetDebugLevel$130$myNondetVar_0;
- inline$BDLGetDebugLevel$130$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$130$myNondetVar_0;
- goto inline$BDLGetDebugLevel$130$label_1#1;
-
- inline$BDLGetDebugLevel$130$label_1#1:
- goto inline$BDLGetDebugLevel$130$Return#1;
-
- inline$BDLGetDebugLevel$130$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$130$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon51_Then#1, inline$BDLSystemPowerIoCompletion$4$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_120_true#1, inline$BDLSystemPowerIoCompletion$4$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_124#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_125#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_126#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$4$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_121#1:
- goto inline$BDLGetDebugLevel$131$Entry#1;
-
- inline$BDLGetDebugLevel$131$Entry#1:
- goto inline$BDLGetDebugLevel$131$start#1;
-
- inline$BDLGetDebugLevel$131$start#1:
- goto inline$BDLGetDebugLevel$131$label_3#1;
-
- inline$BDLGetDebugLevel$131$label_3#1:
- havoc inline$BDLGetDebugLevel$131$myNondetVar_0;
- inline$BDLGetDebugLevel$131$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$131$myNondetVar_0;
- goto inline$BDLGetDebugLevel$131$label_1#1;
-
- inline$BDLGetDebugLevel$131$label_1#1:
- goto inline$BDLGetDebugLevel$131$Return#1;
-
- inline$BDLGetDebugLevel$131$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$131$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon52_Then#1, inline$BDLSystemPowerIoCompletion$4$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_130_true#1, inline$BDLSystemPowerIoCompletion$4$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_134#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_135#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_136#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$4$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_131#1:
- goto inline$BDLGetDebugLevel$132$Entry#1;
-
- inline$BDLGetDebugLevel$132$Entry#1:
- goto inline$BDLGetDebugLevel$132$start#1;
-
- inline$BDLGetDebugLevel$132$start#1:
- goto inline$BDLGetDebugLevel$132$label_3#1;
-
- inline$BDLGetDebugLevel$132$label_3#1:
- havoc inline$BDLGetDebugLevel$132$myNondetVar_0;
- inline$BDLGetDebugLevel$132$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$132$myNondetVar_0;
- goto inline$BDLGetDebugLevel$132$label_1#1;
-
- inline$BDLGetDebugLevel$132$label_1#1:
- goto inline$BDLGetDebugLevel$132$Return#1;
-
- inline$BDLGetDebugLevel$132$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$132$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon53_Then#1, inline$BDLSystemPowerIoCompletion$4$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_140_true#1, inline$BDLSystemPowerIoCompletion$4$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$4$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_115#1:
- inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$4$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$4$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_43#1:
- goto inline$BDLGetDebugLevel$124$Entry#1;
-
- inline$BDLGetDebugLevel$124$Entry#1:
- goto inline$BDLGetDebugLevel$124$start#1;
-
- inline$BDLGetDebugLevel$124$start#1:
- goto inline$BDLGetDebugLevel$124$label_3#1;
-
- inline$BDLGetDebugLevel$124$label_3#1:
- havoc inline$BDLGetDebugLevel$124$myNondetVar_0;
- inline$BDLGetDebugLevel$124$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$124$myNondetVar_0;
- goto inline$BDLGetDebugLevel$124$label_1#1;
-
- inline$BDLGetDebugLevel$124$label_1#1:
- goto inline$BDLGetDebugLevel$124$Return#1;
-
- inline$BDLGetDebugLevel$124$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$124$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon40_Then#1, inline$BDLSystemPowerIoCompletion$4$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_46_true#1, inline$BDLSystemPowerIoCompletion$4$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_50#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_51#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_52#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$4$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_47#1:
- goto inline$BDLGetDebugLevel$125$Entry#1;
-
- inline$BDLGetDebugLevel$125$Entry#1:
- goto inline$BDLGetDebugLevel$125$start#1;
-
- inline$BDLGetDebugLevel$125$start#1:
- goto inline$BDLGetDebugLevel$125$label_3#1;
-
- inline$BDLGetDebugLevel$125$label_3#1:
- havoc inline$BDLGetDebugLevel$125$myNondetVar_0;
- inline$BDLGetDebugLevel$125$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$125$myNondetVar_0;
- goto inline$BDLGetDebugLevel$125$label_1#1;
-
- inline$BDLGetDebugLevel$125$label_1#1:
- goto inline$BDLGetDebugLevel$125$Return#1;
-
- inline$BDLGetDebugLevel$125$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$125$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon41_Then#1, inline$BDLSystemPowerIoCompletion$4$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_56_true#1, inline$BDLSystemPowerIoCompletion$4$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_60#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_61#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_62#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$4$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_57#1:
- goto inline$BDLGetDebugLevel$126$Entry#1;
-
- inline$BDLGetDebugLevel$126$Entry#1:
- goto inline$BDLGetDebugLevel$126$start#1;
-
- inline$BDLGetDebugLevel$126$start#1:
- goto inline$BDLGetDebugLevel$126$label_3#1;
-
- inline$BDLGetDebugLevel$126$label_3#1:
- havoc inline$BDLGetDebugLevel$126$myNondetVar_0;
- inline$BDLGetDebugLevel$126$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$126$myNondetVar_0;
- goto inline$BDLGetDebugLevel$126$label_1#1;
-
- inline$BDLGetDebugLevel$126$label_1#1:
- goto inline$BDLGetDebugLevel$126$Return#1;
-
- inline$BDLGetDebugLevel$126$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$126$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon42_Then#1, inline$BDLSystemPowerIoCompletion$4$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_66_true#1, inline$BDLSystemPowerIoCompletion$4$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$4$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$4$anon43_Then#1, inline$BDLSystemPowerIoCompletion$4$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$4$anon44_Then#1, inline$BDLSystemPowerIoCompletion$4$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_74#1:
- goto inline$storm_IoCompleteRequest$10$Entry#1;
-
- inline$storm_IoCompleteRequest$10$Entry#1:
- inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$10$start#1;
-
- inline$storm_IoCompleteRequest$10$start#1:
- inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$10$label_3#1;
-
- inline$storm_IoCompleteRequest$10$label_3#1:
- call inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$10$label_6#1;
-
- inline$storm_IoCompleteRequest$10$label_6#1:
- goto inline$storm_IoCompleteRequest$10$label_6_true#1, inline$storm_IoCompleteRequest$10$label_6_false#1;
-
- inline$storm_IoCompleteRequest$10$label_6_false#1:
- assume inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$10$label_7#1;
-
- inline$storm_IoCompleteRequest$10$label_6_true#1:
- assume inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$10$label_8#1;
-
- inline$storm_IoCompleteRequest$10$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$10$anon3_Then#1, inline$storm_IoCompleteRequest$10$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$10$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$10$anon1#1;
-
- inline$storm_IoCompleteRequest$10$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$10$label_9#1;
-
- inline$storm_IoCompleteRequest$10$label_9#1:
- goto inline$storm_IoCompleteRequest$10$label_9_true#1, inline$storm_IoCompleteRequest$10$label_9_false#1;
-
- inline$storm_IoCompleteRequest$10$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$10$label_10#1;
-
- inline$storm_IoCompleteRequest$10$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$10$label_1#1;
-
- inline$storm_IoCompleteRequest$10$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$10$label_7#1;
-
- inline$storm_IoCompleteRequest$10$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$10$label_1#1;
-
- inline$storm_IoCompleteRequest$10$label_1#1:
- goto inline$storm_IoCompleteRequest$10$Return#1;
-
- inline$storm_IoCompleteRequest$10$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$10$Return#1;
-
- inline$storm_IoCompleteRequest$10$Return#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon45_Then#1, inline$BDLSystemPowerIoCompletion$4$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$4$anon46_Then#1, inline$BDLSystemPowerIoCompletion$4$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_80#1:
- goto inline$BDLGetDebugLevel$127$Entry#1;
-
- inline$BDLGetDebugLevel$127$Entry#1:
- goto inline$BDLGetDebugLevel$127$start#1;
-
- inline$BDLGetDebugLevel$127$start#1:
- goto inline$BDLGetDebugLevel$127$label_3#1;
-
- inline$BDLGetDebugLevel$127$label_3#1:
- havoc inline$BDLGetDebugLevel$127$myNondetVar_0;
- inline$BDLGetDebugLevel$127$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$127$myNondetVar_0;
- goto inline$BDLGetDebugLevel$127$label_1#1;
-
- inline$BDLGetDebugLevel$127$label_1#1:
- goto inline$BDLGetDebugLevel$127$Return#1;
-
- inline$BDLGetDebugLevel$127$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$127$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon47_Then#1, inline$BDLSystemPowerIoCompletion$4$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_83_true#1, inline$BDLSystemPowerIoCompletion$4$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_87#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_88#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_89#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$4$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_84#1:
- goto inline$BDLGetDebugLevel$128$Entry#1;
-
- inline$BDLGetDebugLevel$128$Entry#1:
- goto inline$BDLGetDebugLevel$128$start#1;
-
- inline$BDLGetDebugLevel$128$start#1:
- goto inline$BDLGetDebugLevel$128$label_3#1;
-
- inline$BDLGetDebugLevel$128$label_3#1:
- havoc inline$BDLGetDebugLevel$128$myNondetVar_0;
- inline$BDLGetDebugLevel$128$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$128$myNondetVar_0;
- goto inline$BDLGetDebugLevel$128$label_1#1;
-
- inline$BDLGetDebugLevel$128$label_1#1:
- goto inline$BDLGetDebugLevel$128$Return#1;
-
- inline$BDLGetDebugLevel$128$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$128$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon48_Then#1, inline$BDLSystemPowerIoCompletion$4$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_93_true#1, inline$BDLSystemPowerIoCompletion$4$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_97#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_98#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_99#1:
- call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$4$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$4$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_94#1:
- goto inline$BDLGetDebugLevel$129$Entry#1;
-
- inline$BDLGetDebugLevel$129$Entry#1:
- goto inline$BDLGetDebugLevel$129$start#1;
-
- inline$BDLGetDebugLevel$129$start#1:
- goto inline$BDLGetDebugLevel$129$label_3#1;
-
- inline$BDLGetDebugLevel$129$label_3#1:
- havoc inline$BDLGetDebugLevel$129$myNondetVar_0;
- inline$BDLGetDebugLevel$129$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$129$myNondetVar_0;
- goto inline$BDLGetDebugLevel$129$label_1#1;
-
- inline$BDLGetDebugLevel$129$label_1#1:
- goto inline$BDLGetDebugLevel$129$Return#1;
-
- inline$BDLGetDebugLevel$129$Return#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$129$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$4$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$4$anon49_Then#1, inline$BDLSystemPowerIoCompletion$4$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_103_true#1, inline$BDLSystemPowerIoCompletion$4$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$4$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$4$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_104#1:
- inline$BDLSystemPowerIoCompletion$4$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$4$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$4$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$4$Return#1;
-
- inline$BDLSystemPowerIoCompletion$4$Return#1:
- inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$4$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$4$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$4$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$4$anon14_Then#1, inline$CallCompletionRoutine$4$anon14_Else#1;
-
- inline$CallCompletionRoutine$4$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$4$anon9#1;
-
- inline$CallCompletionRoutine$4$anon9#1:
- goto inline$CallCompletionRoutine$4$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$4$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$4$Return#1;
-
- inline$CallCompletionRoutine$4$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$4$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$4$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$4$Entry#1:
- inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$4$start#1;
-
- inline$BDLDevicePowerIoCompletion$4$start#1:
- call inline$BDLDevicePowerIoCompletion$4$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$4$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_4#1:
- inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_6#1:
- inline$BDLDevicePowerIoCompletion$4$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$4$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$4$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$4$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$28$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$28$Entry#1:
- inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$28$start#1;
-
- inline$IoGetCurrentIrpStackLocation$28$start#1:
- inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$28$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$28$label_3_true#1, inline$IoGetCurrentIrpStackLocation$28$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$28$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$28$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$28$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$28$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$28$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$28$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$28$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$28$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$28$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$28$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$28$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$28$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$28$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$28$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$28$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$28$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$28$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$28$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$28$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$28$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$28$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon30_Then#1, inline$BDLDevicePowerIoCompletion$4$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_13#1:
- inline$BDLDevicePowerIoCompletion$4$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$4$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$4$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_17#1:
- goto inline$BDLGetDebugLevel$112$Entry#1;
-
- inline$BDLGetDebugLevel$112$Entry#1:
- goto inline$BDLGetDebugLevel$112$start#1;
-
- inline$BDLGetDebugLevel$112$start#1:
- goto inline$BDLGetDebugLevel$112$label_3#1;
-
- inline$BDLGetDebugLevel$112$label_3#1:
- havoc inline$BDLGetDebugLevel$112$myNondetVar_0;
- inline$BDLGetDebugLevel$112$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$112$myNondetVar_0;
- goto inline$BDLGetDebugLevel$112$label_1#1;
-
- inline$BDLGetDebugLevel$112$label_1#1:
- goto inline$BDLGetDebugLevel$112$Return#1;
-
- inline$BDLGetDebugLevel$112$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$112$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon31_Then#1, inline$BDLDevicePowerIoCompletion$4$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_20_true#1, inline$BDLDevicePowerIoCompletion$4$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_24#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_25#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_26#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$4$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_21#1:
- goto inline$BDLGetDebugLevel$113$Entry#1;
-
- inline$BDLGetDebugLevel$113$Entry#1:
- goto inline$BDLGetDebugLevel$113$start#1;
-
- inline$BDLGetDebugLevel$113$start#1:
- goto inline$BDLGetDebugLevel$113$label_3#1;
-
- inline$BDLGetDebugLevel$113$label_3#1:
- havoc inline$BDLGetDebugLevel$113$myNondetVar_0;
- inline$BDLGetDebugLevel$113$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$113$myNondetVar_0;
- goto inline$BDLGetDebugLevel$113$label_1#1;
-
- inline$BDLGetDebugLevel$113$label_1#1:
- goto inline$BDLGetDebugLevel$113$Return#1;
-
- inline$BDLGetDebugLevel$113$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$113$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon32_Then#1, inline$BDLDevicePowerIoCompletion$4$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_30_true#1, inline$BDLDevicePowerIoCompletion$4$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_34#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_35#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_36#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$4$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_31#1:
- goto inline$BDLGetDebugLevel$114$Entry#1;
-
- inline$BDLGetDebugLevel$114$Entry#1:
- goto inline$BDLGetDebugLevel$114$start#1;
-
- inline$BDLGetDebugLevel$114$start#1:
- goto inline$BDLGetDebugLevel$114$label_3#1;
-
- inline$BDLGetDebugLevel$114$label_3#1:
- havoc inline$BDLGetDebugLevel$114$myNondetVar_0;
- inline$BDLGetDebugLevel$114$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$114$myNondetVar_0;
- goto inline$BDLGetDebugLevel$114$label_1#1;
-
- inline$BDLGetDebugLevel$114$label_1#1:
- goto inline$BDLGetDebugLevel$114$Return#1;
-
- inline$BDLGetDebugLevel$114$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$114$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon33_Then#1, inline$BDLDevicePowerIoCompletion$4$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_40_true#1, inline$BDLDevicePowerIoCompletion$4$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_41_true#1, inline$BDLDevicePowerIoCompletion$4$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$4$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$4$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_44_true#1, inline$BDLDevicePowerIoCompletion$4$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$4$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_45_true#1, inline$BDLDevicePowerIoCompletion$4$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$4$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$4$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$4$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$4$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$4$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$4$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_54#1:
- inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$4$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_55_true#1, inline$BDLDevicePowerIoCompletion$4$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_56#1:
- call inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$4$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$4$anon34_Then#1, inline$BDLDevicePowerIoCompletion$4$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_59#1:
- goto inline$BDLGetDebugLevel$115$Entry#1;
-
- inline$BDLGetDebugLevel$115$Entry#1:
- goto inline$BDLGetDebugLevel$115$start#1;
-
- inline$BDLGetDebugLevel$115$start#1:
- goto inline$BDLGetDebugLevel$115$label_3#1;
-
- inline$BDLGetDebugLevel$115$label_3#1:
- havoc inline$BDLGetDebugLevel$115$myNondetVar_0;
- inline$BDLGetDebugLevel$115$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$115$myNondetVar_0;
- goto inline$BDLGetDebugLevel$115$label_1#1;
-
- inline$BDLGetDebugLevel$115$label_1#1:
- goto inline$BDLGetDebugLevel$115$Return#1;
-
- inline$BDLGetDebugLevel$115$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$115$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon35_Then#1, inline$BDLDevicePowerIoCompletion$4$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_62_true#1, inline$BDLDevicePowerIoCompletion$4$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_66#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_67#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_68#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$4$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_63#1:
- goto inline$BDLGetDebugLevel$116$Entry#1;
-
- inline$BDLGetDebugLevel$116$Entry#1:
- goto inline$BDLGetDebugLevel$116$start#1;
-
- inline$BDLGetDebugLevel$116$start#1:
- goto inline$BDLGetDebugLevel$116$label_3#1;
-
- inline$BDLGetDebugLevel$116$label_3#1:
- havoc inline$BDLGetDebugLevel$116$myNondetVar_0;
- inline$BDLGetDebugLevel$116$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$116$myNondetVar_0;
- goto inline$BDLGetDebugLevel$116$label_1#1;
-
- inline$BDLGetDebugLevel$116$label_1#1:
- goto inline$BDLGetDebugLevel$116$Return#1;
-
- inline$BDLGetDebugLevel$116$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$116$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon36_Then#1, inline$BDLDevicePowerIoCompletion$4$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_72_true#1, inline$BDLDevicePowerIoCompletion$4$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_76#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_77#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_78#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$4$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_73#1:
- goto inline$BDLGetDebugLevel$117$Entry#1;
-
- inline$BDLGetDebugLevel$117$Entry#1:
- goto inline$BDLGetDebugLevel$117$start#1;
-
- inline$BDLGetDebugLevel$117$start#1:
- goto inline$BDLGetDebugLevel$117$label_3#1;
-
- inline$BDLGetDebugLevel$117$label_3#1:
- havoc inline$BDLGetDebugLevel$117$myNondetVar_0;
- inline$BDLGetDebugLevel$117$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$117$myNondetVar_0;
- goto inline$BDLGetDebugLevel$117$label_1#1;
-
- inline$BDLGetDebugLevel$117$label_1#1:
- goto inline$BDLGetDebugLevel$117$Return#1;
-
- inline$BDLGetDebugLevel$117$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$117$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon37_Then#1, inline$BDLDevicePowerIoCompletion$4$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_82_true#1, inline$BDLDevicePowerIoCompletion$4$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$4$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$4$anon38_Then#1, inline$BDLDevicePowerIoCompletion$4$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$4$anon39_Then#1, inline$BDLDevicePowerIoCompletion$4$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_92#1:
- goto inline$storm_IoCompleteRequest$9$Entry#1;
-
- inline$storm_IoCompleteRequest$9$Entry#1:
- inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$9$start#1;
-
- inline$storm_IoCompleteRequest$9$start#1:
- inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$9$label_3#1;
-
- inline$storm_IoCompleteRequest$9$label_3#1:
- call inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$9$label_6#1;
-
- inline$storm_IoCompleteRequest$9$label_6#1:
- goto inline$storm_IoCompleteRequest$9$label_6_true#1, inline$storm_IoCompleteRequest$9$label_6_false#1;
-
- inline$storm_IoCompleteRequest$9$label_6_false#1:
- assume inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$9$label_7#1;
-
- inline$storm_IoCompleteRequest$9$label_6_true#1:
- assume inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$9$label_8#1;
-
- inline$storm_IoCompleteRequest$9$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$9$anon3_Then#1, inline$storm_IoCompleteRequest$9$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$9$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$9$anon1#1;
-
- inline$storm_IoCompleteRequest$9$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$9$label_9#1;
-
- inline$storm_IoCompleteRequest$9$label_9#1:
- goto inline$storm_IoCompleteRequest$9$label_9_true#1, inline$storm_IoCompleteRequest$9$label_9_false#1;
-
- inline$storm_IoCompleteRequest$9$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$9$label_10#1;
-
- inline$storm_IoCompleteRequest$9$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$9$label_1#1;
-
- inline$storm_IoCompleteRequest$9$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$9$label_7#1;
-
- inline$storm_IoCompleteRequest$9$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$9$label_1#1;
-
- inline$storm_IoCompleteRequest$9$label_1#1:
- goto inline$storm_IoCompleteRequest$9$Return#1;
-
- inline$storm_IoCompleteRequest$9$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$9$Return#1;
-
- inline$storm_IoCompleteRequest$9$Return#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon40_Then#1, inline$BDLDevicePowerIoCompletion$4$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$4$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$4$anon41_Then#1, inline$BDLDevicePowerIoCompletion$4$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_98#1:
- goto inline$BDLGetDebugLevel$118$Entry#1;
-
- inline$BDLGetDebugLevel$118$Entry#1:
- goto inline$BDLGetDebugLevel$118$start#1;
-
- inline$BDLGetDebugLevel$118$start#1:
- goto inline$BDLGetDebugLevel$118$label_3#1;
-
- inline$BDLGetDebugLevel$118$label_3#1:
- havoc inline$BDLGetDebugLevel$118$myNondetVar_0;
- inline$BDLGetDebugLevel$118$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$118$myNondetVar_0;
- goto inline$BDLGetDebugLevel$118$label_1#1;
-
- inline$BDLGetDebugLevel$118$label_1#1:
- goto inline$BDLGetDebugLevel$118$Return#1;
-
- inline$BDLGetDebugLevel$118$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$118$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon42_Then#1, inline$BDLDevicePowerIoCompletion$4$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_101_true#1, inline$BDLDevicePowerIoCompletion$4$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_105#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_106#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_107#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$4$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_102#1:
- goto inline$BDLGetDebugLevel$119$Entry#1;
-
- inline$BDLGetDebugLevel$119$Entry#1:
- goto inline$BDLGetDebugLevel$119$start#1;
-
- inline$BDLGetDebugLevel$119$start#1:
- goto inline$BDLGetDebugLevel$119$label_3#1;
-
- inline$BDLGetDebugLevel$119$label_3#1:
- havoc inline$BDLGetDebugLevel$119$myNondetVar_0;
- inline$BDLGetDebugLevel$119$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$119$myNondetVar_0;
- goto inline$BDLGetDebugLevel$119$label_1#1;
-
- inline$BDLGetDebugLevel$119$label_1#1:
- goto inline$BDLGetDebugLevel$119$Return#1;
-
- inline$BDLGetDebugLevel$119$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$119$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon43_Then#1, inline$BDLDevicePowerIoCompletion$4$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_111_true#1, inline$BDLDevicePowerIoCompletion$4$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_115#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_116#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_117#1:
- call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$4$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$4$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_112#1:
- goto inline$BDLGetDebugLevel$120$Entry#1;
-
- inline$BDLGetDebugLevel$120$Entry#1:
- goto inline$BDLGetDebugLevel$120$start#1;
-
- inline$BDLGetDebugLevel$120$start#1:
- goto inline$BDLGetDebugLevel$120$label_3#1;
-
- inline$BDLGetDebugLevel$120$label_3#1:
- havoc inline$BDLGetDebugLevel$120$myNondetVar_0;
- inline$BDLGetDebugLevel$120$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$120$myNondetVar_0;
- goto inline$BDLGetDebugLevel$120$label_1#1;
-
- inline$BDLGetDebugLevel$120$label_1#1:
- goto inline$BDLGetDebugLevel$120$Return#1;
-
- inline$BDLGetDebugLevel$120$Return#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$120$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$4$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$4$anon44_Then#1, inline$BDLDevicePowerIoCompletion$4$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_121_true#1, inline$BDLDevicePowerIoCompletion$4$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$4$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$4$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_122#1:
- inline$BDLDevicePowerIoCompletion$4$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$4$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$4$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$4$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$4$Return#1;
-
- inline$BDLDevicePowerIoCompletion$4$Return#1:
- inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$4$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$4$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$4$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$4$anon13_Then#1, inline$CallCompletionRoutine$4$anon13_Else#1;
-
- inline$CallCompletionRoutine$4$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$4$anon7#1;
-
- inline$CallCompletionRoutine$4$anon7#1:
- goto inline$CallCompletionRoutine$4$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$4$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$4$Return#1;
-
- inline$CallCompletionRoutine$4$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$4$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$4$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$4$Entry#1:
- inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$4$start#1;
-
- inline$BDLCallDriverCompletionRoutine$4$start#1:
- inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$4$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$4$label_3_true#1, inline$BDLCallDriverCompletionRoutine$4$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$4$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$4$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$4$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$4$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_6#1:
- goto inline$storm_KeSetEvent$5$Entry#1;
-
- inline$storm_KeSetEvent$5$Entry#1:
- inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$5$start#1;
-
- inline$storm_KeSetEvent$5$start#1:
- inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$5$label_3#1;
-
- inline$storm_KeSetEvent$5$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$5$label_1#1;
-
- inline$storm_KeSetEvent$5$label_1#1:
- goto inline$storm_KeSetEvent$5$Return#1;
-
- inline$storm_KeSetEvent$5$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$4$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$4$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$4$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$4$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$4$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$4$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$4$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_9#1:
- inline$BDLCallDriverCompletionRoutine$4$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$4$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$4$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$4$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$4$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$4$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$4$Return#1:
- inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$4$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$4$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$4$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$4$anon12_Then#1, inline$CallCompletionRoutine$4$anon12_Else#1;
-
- inline$CallCompletionRoutine$4$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$4$anon5#1;
-
- inline$CallCompletionRoutine$4$anon5#1:
- goto inline$CallCompletionRoutine$4$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$4$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$4$label_23#1;
-
- inline$CallCompletionRoutine$4$label_23#1:
- inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$4$label_24#1;
-
- inline$CallCompletionRoutine$4$label_24#1:
- goto inline$CallCompletionRoutine$4$label_24_true#1, inline$CallCompletionRoutine$4$label_24_false#1;
-
- inline$CallCompletionRoutine$4$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$4$label_1#1;
-
- inline$CallCompletionRoutine$4$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$4$label_25#1;
-
- inline$CallCompletionRoutine$4$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$4$label_1#1;
-
- inline$CallCompletionRoutine$4$label_1#1:
- goto inline$CallCompletionRoutine$4$Return#1;
-
- inline$CallCompletionRoutine$4$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$4$Return#1;
-
- inline$CallCompletionRoutine$4$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$4$Return#1;
-
- inline$CallCompletionRoutine$4$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$4$Return#1;
-
- inline$CallCompletionRoutine$4$Return#1:
- goto inline$storm_IoCallDriver$2$label_33$1#1;
-
- inline$storm_IoCallDriver$2$label_33$1#1:
- goto inline$storm_IoCallDriver$2$anon14_Then#1, inline$storm_IoCallDriver$2$anon14_Else#1;
-
- inline$storm_IoCallDriver$2$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$2$anon8#1;
-
- inline$storm_IoCallDriver$2$anon8#1:
- goto inline$storm_IoCallDriver$2$label_36#1;
-
- inline$storm_IoCallDriver$2$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$2$Return#1;
-
- inline$storm_IoCallDriver$2$label_27_case_1#1:
- assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$2$label_29#1;
-
- inline$storm_IoCallDriver$2$label_29#1:
- inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$2$label_37#1;
-
- inline$storm_IoCallDriver$2$label_37#1:
- goto inline$storm_IoCallDriver$2$label_38#1;
-
- inline$storm_IoCallDriver$2$label_38#1:
- goto inline$storm_IoCallDriver$2$label_39#1;
-
- inline$storm_IoCallDriver$2$label_39#1:
- goto inline$CallCompletionRoutine$5$Entry#1;
-
- inline$CallCompletionRoutine$5$Entry#1:
- inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$5$start#1;
-
- inline$CallCompletionRoutine$5$start#1:
- inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$5$label_3#1;
-
- inline$CallCompletionRoutine$5$label_3#1:
- goto inline$CallCompletionRoutine$5$label_4#1;
-
- inline$CallCompletionRoutine$5$label_4#1:
- goto inline$CallCompletionRoutine$5$label_5#1;
-
- inline$CallCompletionRoutine$5$label_5#1:
- goto inline$CallCompletionRoutine$5$label_6#1;
-
- inline$CallCompletionRoutine$5$label_6#1:
- goto inline$CallCompletionRoutine$5$label_7#1;
-
- inline$CallCompletionRoutine$5$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$30$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$30$Entry#1:
- inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$30$start#1;
-
- inline$IoGetCurrentIrpStackLocation$30$start#1:
- inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$30$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$30$label_3_true#1, inline$IoGetCurrentIrpStackLocation$30$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$30$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$30$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$30$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$30$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$30$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$30$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$30$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$30$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$30$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$30$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$30$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$30$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$30$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$30$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$30$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$30$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$30$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$30$Return#1:
- goto inline$CallCompletionRoutine$5$label_7$1#1;
-
- inline$CallCompletionRoutine$5$label_7$1#1:
- goto inline$CallCompletionRoutine$5$anon10_Then#1, inline$CallCompletionRoutine$5$anon10_Else#1;
-
- inline$CallCompletionRoutine$5$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$5$anon1#1;
-
- inline$CallCompletionRoutine$5$anon1#1:
- goto inline$CallCompletionRoutine$5$label_10#1;
-
- inline$CallCompletionRoutine$5$label_10#1:
- goto inline$CallCompletionRoutine$5$label_11#1;
-
- inline$CallCompletionRoutine$5$label_11#1:
- havoc inline$CallCompletionRoutine$5$myNondetVar_0;
- inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$myNondetVar_0;
- goto inline$CallCompletionRoutine$5$label_12#1;
-
- inline$CallCompletionRoutine$5$label_12#1:
- havoc inline$CallCompletionRoutine$5$myNondetVar_0;
- inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$myNondetVar_0;
- goto inline$CallCompletionRoutine$5$label_13#1;
-
- inline$CallCompletionRoutine$5$label_13#1:
- havoc inline$CallCompletionRoutine$5$myNondetVar_0;
- goto inline$CallCompletionRoutine$5$label_14#1;
-
- inline$CallCompletionRoutine$5$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$31$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$31$Entry#1:
- inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$31$start#1;
-
- inline$IoGetCurrentIrpStackLocation$31$start#1:
- inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$31$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$31$label_3_true#1, inline$IoGetCurrentIrpStackLocation$31$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$31$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$31$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$31$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$31$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$31$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$31$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$31$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$31$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$31$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$31$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$31$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$31$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$31$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$31$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$31$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$31$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$31$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$31$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$31$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$31$Return#1:
- goto inline$CallCompletionRoutine$5$label_14$1#1;
-
- inline$CallCompletionRoutine$5$label_14$1#1:
- goto inline$CallCompletionRoutine$5$anon11_Then#1, inline$CallCompletionRoutine$5$anon11_Else#1;
-
- inline$CallCompletionRoutine$5$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$5$anon3#1;
-
- inline$CallCompletionRoutine$5$anon3#1:
- goto inline$CallCompletionRoutine$5$label_17#1;
-
- inline$CallCompletionRoutine$5$label_17#1:
- goto inline$CallCompletionRoutine$5$label_18#1;
-
- inline$CallCompletionRoutine$5$label_18#1:
- goto inline$CallCompletionRoutine$5$label_18_true#1, inline$CallCompletionRoutine$5$label_18_false#1;
-
- inline$CallCompletionRoutine$5$label_18_false#1:
- assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$5$label_1#1;
-
- inline$CallCompletionRoutine$5$label_18_true#1:
- assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$5$label_19#1;
-
- inline$CallCompletionRoutine$5$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$5$label_20#1;
-
- inline$CallCompletionRoutine$5$label_20#1:
- goto inline$CallCompletionRoutine$5$label_20_icall_1#1, inline$CallCompletionRoutine$5$label_20_icall_2#1, inline$CallCompletionRoutine$5$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$5$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$5$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$5$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$5$Entry#1:
- inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$5$start#1;
-
- inline$BDLSystemPowerIoCompletion$5$start#1:
- call inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$5$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_4#1:
- inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_6#1:
- inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$5$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$5$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$5$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$33$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$33$Entry#1:
- inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$33$start#1;
-
- inline$IoGetCurrentIrpStackLocation$33$start#1:
- inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$33$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$33$label_3_true#1, inline$IoGetCurrentIrpStackLocation$33$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$33$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$33$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$33$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$33$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$33$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$33$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$33$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$33$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$33$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$33$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$33$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$33$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$33$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$33$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$33$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$33$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$33$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$33$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$33$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$33$Return#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon36_Then#1, inline$BDLSystemPowerIoCompletion$5$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_15#1:
- goto inline$BDLGetDebugLevel$142$Entry#1;
-
- inline$BDLGetDebugLevel$142$Entry#1:
- goto inline$BDLGetDebugLevel$142$start#1;
-
- inline$BDLGetDebugLevel$142$start#1:
- goto inline$BDLGetDebugLevel$142$label_3#1;
-
- inline$BDLGetDebugLevel$142$label_3#1:
- havoc inline$BDLGetDebugLevel$142$myNondetVar_0;
- inline$BDLGetDebugLevel$142$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$142$myNondetVar_0;
- goto inline$BDLGetDebugLevel$142$label_1#1;
-
- inline$BDLGetDebugLevel$142$label_1#1:
- goto inline$BDLGetDebugLevel$142$Return#1;
-
- inline$BDLGetDebugLevel$142$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$142$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon37_Then#1, inline$BDLSystemPowerIoCompletion$5$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_18_true#1, inline$BDLSystemPowerIoCompletion$5$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_22#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_23#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_24#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$5$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_19#1:
- goto inline$BDLGetDebugLevel$143$Entry#1;
-
- inline$BDLGetDebugLevel$143$Entry#1:
- goto inline$BDLGetDebugLevel$143$start#1;
-
- inline$BDLGetDebugLevel$143$start#1:
- goto inline$BDLGetDebugLevel$143$label_3#1;
-
- inline$BDLGetDebugLevel$143$label_3#1:
- havoc inline$BDLGetDebugLevel$143$myNondetVar_0;
- inline$BDLGetDebugLevel$143$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$143$myNondetVar_0;
- goto inline$BDLGetDebugLevel$143$label_1#1;
-
- inline$BDLGetDebugLevel$143$label_1#1:
- goto inline$BDLGetDebugLevel$143$Return#1;
-
- inline$BDLGetDebugLevel$143$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$143$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon38_Then#1, inline$BDLSystemPowerIoCompletion$5$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_28_true#1, inline$BDLSystemPowerIoCompletion$5$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_32#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_33#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_34#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$5$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_29#1:
- goto inline$BDLGetDebugLevel$144$Entry#1;
-
- inline$BDLGetDebugLevel$144$Entry#1:
- goto inline$BDLGetDebugLevel$144$start#1;
-
- inline$BDLGetDebugLevel$144$start#1:
- goto inline$BDLGetDebugLevel$144$label_3#1;
-
- inline$BDLGetDebugLevel$144$label_3#1:
- havoc inline$BDLGetDebugLevel$144$myNondetVar_0;
- inline$BDLGetDebugLevel$144$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$144$myNondetVar_0;
- goto inline$BDLGetDebugLevel$144$label_1#1;
-
- inline$BDLGetDebugLevel$144$label_1#1:
- goto inline$BDLGetDebugLevel$144$Return#1;
-
- inline$BDLGetDebugLevel$144$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$144$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon39_Then#1, inline$BDLSystemPowerIoCompletion$5$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_38_true#1, inline$BDLSystemPowerIoCompletion$5$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_39_true#1, inline$BDLSystemPowerIoCompletion$5$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$5$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$5$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$5$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_106_true#1, inline$BDLSystemPowerIoCompletion$5$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_142#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_143#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$5$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$5$myNondetVar_0, inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$5$anon50_Then#1, inline$BDLSystemPowerIoCompletion$5$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_112#1:
- inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$5$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_113_true#1, inline$BDLSystemPowerIoCompletion$5$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$5$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_117#1:
- goto inline$BDLGetDebugLevel$151$Entry#1;
-
- inline$BDLGetDebugLevel$151$Entry#1:
- goto inline$BDLGetDebugLevel$151$start#1;
-
- inline$BDLGetDebugLevel$151$start#1:
- goto inline$BDLGetDebugLevel$151$label_3#1;
-
- inline$BDLGetDebugLevel$151$label_3#1:
- havoc inline$BDLGetDebugLevel$151$myNondetVar_0;
- inline$BDLGetDebugLevel$151$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$151$myNondetVar_0;
- goto inline$BDLGetDebugLevel$151$label_1#1;
-
- inline$BDLGetDebugLevel$151$label_1#1:
- goto inline$BDLGetDebugLevel$151$Return#1;
-
- inline$BDLGetDebugLevel$151$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$151$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon51_Then#1, inline$BDLSystemPowerIoCompletion$5$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_120_true#1, inline$BDLSystemPowerIoCompletion$5$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_124#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_125#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_126#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$5$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_121#1:
- goto inline$BDLGetDebugLevel$152$Entry#1;
-
- inline$BDLGetDebugLevel$152$Entry#1:
- goto inline$BDLGetDebugLevel$152$start#1;
-
- inline$BDLGetDebugLevel$152$start#1:
- goto inline$BDLGetDebugLevel$152$label_3#1;
-
- inline$BDLGetDebugLevel$152$label_3#1:
- havoc inline$BDLGetDebugLevel$152$myNondetVar_0;
- inline$BDLGetDebugLevel$152$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$152$myNondetVar_0;
- goto inline$BDLGetDebugLevel$152$label_1#1;
-
- inline$BDLGetDebugLevel$152$label_1#1:
- goto inline$BDLGetDebugLevel$152$Return#1;
-
- inline$BDLGetDebugLevel$152$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$152$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon52_Then#1, inline$BDLSystemPowerIoCompletion$5$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_130_true#1, inline$BDLSystemPowerIoCompletion$5$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_134#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_135#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_136#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$5$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_131#1:
- goto inline$BDLGetDebugLevel$153$Entry#1;
-
- inline$BDLGetDebugLevel$153$Entry#1:
- goto inline$BDLGetDebugLevel$153$start#1;
-
- inline$BDLGetDebugLevel$153$start#1:
- goto inline$BDLGetDebugLevel$153$label_3#1;
-
- inline$BDLGetDebugLevel$153$label_3#1:
- havoc inline$BDLGetDebugLevel$153$myNondetVar_0;
- inline$BDLGetDebugLevel$153$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$153$myNondetVar_0;
- goto inline$BDLGetDebugLevel$153$label_1#1;
-
- inline$BDLGetDebugLevel$153$label_1#1:
- goto inline$BDLGetDebugLevel$153$Return#1;
-
- inline$BDLGetDebugLevel$153$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$153$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon53_Then#1, inline$BDLSystemPowerIoCompletion$5$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_140_true#1, inline$BDLSystemPowerIoCompletion$5$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$5$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_115#1:
- inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$5$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$5$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_43#1:
- goto inline$BDLGetDebugLevel$145$Entry#1;
-
- inline$BDLGetDebugLevel$145$Entry#1:
- goto inline$BDLGetDebugLevel$145$start#1;
-
- inline$BDLGetDebugLevel$145$start#1:
- goto inline$BDLGetDebugLevel$145$label_3#1;
-
- inline$BDLGetDebugLevel$145$label_3#1:
- havoc inline$BDLGetDebugLevel$145$myNondetVar_0;
- inline$BDLGetDebugLevel$145$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$145$myNondetVar_0;
- goto inline$BDLGetDebugLevel$145$label_1#1;
-
- inline$BDLGetDebugLevel$145$label_1#1:
- goto inline$BDLGetDebugLevel$145$Return#1;
-
- inline$BDLGetDebugLevel$145$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$145$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon40_Then#1, inline$BDLSystemPowerIoCompletion$5$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_46_true#1, inline$BDLSystemPowerIoCompletion$5$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_50#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_51#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_52#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$5$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_47#1:
- goto inline$BDLGetDebugLevel$146$Entry#1;
-
- inline$BDLGetDebugLevel$146$Entry#1:
- goto inline$BDLGetDebugLevel$146$start#1;
-
- inline$BDLGetDebugLevel$146$start#1:
- goto inline$BDLGetDebugLevel$146$label_3#1;
-
- inline$BDLGetDebugLevel$146$label_3#1:
- havoc inline$BDLGetDebugLevel$146$myNondetVar_0;
- inline$BDLGetDebugLevel$146$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$146$myNondetVar_0;
- goto inline$BDLGetDebugLevel$146$label_1#1;
-
- inline$BDLGetDebugLevel$146$label_1#1:
- goto inline$BDLGetDebugLevel$146$Return#1;
-
- inline$BDLGetDebugLevel$146$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$146$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon41_Then#1, inline$BDLSystemPowerIoCompletion$5$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_56_true#1, inline$BDLSystemPowerIoCompletion$5$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_60#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_61#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_62#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$5$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_57#1:
- goto inline$BDLGetDebugLevel$147$Entry#1;
-
- inline$BDLGetDebugLevel$147$Entry#1:
- goto inline$BDLGetDebugLevel$147$start#1;
-
- inline$BDLGetDebugLevel$147$start#1:
- goto inline$BDLGetDebugLevel$147$label_3#1;
-
- inline$BDLGetDebugLevel$147$label_3#1:
- havoc inline$BDLGetDebugLevel$147$myNondetVar_0;
- inline$BDLGetDebugLevel$147$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$147$myNondetVar_0;
- goto inline$BDLGetDebugLevel$147$label_1#1;
-
- inline$BDLGetDebugLevel$147$label_1#1:
- goto inline$BDLGetDebugLevel$147$Return#1;
-
- inline$BDLGetDebugLevel$147$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$147$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon42_Then#1, inline$BDLSystemPowerIoCompletion$5$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_66_true#1, inline$BDLSystemPowerIoCompletion$5$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$5$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$5$anon43_Then#1, inline$BDLSystemPowerIoCompletion$5$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$5$anon44_Then#1, inline$BDLSystemPowerIoCompletion$5$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_74#1:
- goto inline$storm_IoCompleteRequest$12$Entry#1;
-
- inline$storm_IoCompleteRequest$12$Entry#1:
- inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$12$start#1;
-
- inline$storm_IoCompleteRequest$12$start#1:
- inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$12$label_3#1;
-
- inline$storm_IoCompleteRequest$12$label_3#1:
- call inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$12$label_6#1;
-
- inline$storm_IoCompleteRequest$12$label_6#1:
- goto inline$storm_IoCompleteRequest$12$label_6_true#1, inline$storm_IoCompleteRequest$12$label_6_false#1;
-
- inline$storm_IoCompleteRequest$12$label_6_false#1:
- assume inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$12$label_7#1;
-
- inline$storm_IoCompleteRequest$12$label_6_true#1:
- assume inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$12$label_8#1;
-
- inline$storm_IoCompleteRequest$12$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$12$anon3_Then#1, inline$storm_IoCompleteRequest$12$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$12$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$12$anon1#1;
-
- inline$storm_IoCompleteRequest$12$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$12$label_9#1;
-
- inline$storm_IoCompleteRequest$12$label_9#1:
- goto inline$storm_IoCompleteRequest$12$label_9_true#1, inline$storm_IoCompleteRequest$12$label_9_false#1;
-
- inline$storm_IoCompleteRequest$12$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$12$label_10#1;
-
- inline$storm_IoCompleteRequest$12$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$12$label_1#1;
-
- inline$storm_IoCompleteRequest$12$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$12$label_7#1;
-
- inline$storm_IoCompleteRequest$12$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$12$label_1#1;
-
- inline$storm_IoCompleteRequest$12$label_1#1:
- goto inline$storm_IoCompleteRequest$12$Return#1;
-
- inline$storm_IoCompleteRequest$12$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$12$Return#1;
-
- inline$storm_IoCompleteRequest$12$Return#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon45_Then#1, inline$BDLSystemPowerIoCompletion$5$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$5$anon46_Then#1, inline$BDLSystemPowerIoCompletion$5$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_80#1:
- goto inline$BDLGetDebugLevel$148$Entry#1;
-
- inline$BDLGetDebugLevel$148$Entry#1:
- goto inline$BDLGetDebugLevel$148$start#1;
-
- inline$BDLGetDebugLevel$148$start#1:
- goto inline$BDLGetDebugLevel$148$label_3#1;
-
- inline$BDLGetDebugLevel$148$label_3#1:
- havoc inline$BDLGetDebugLevel$148$myNondetVar_0;
- inline$BDLGetDebugLevel$148$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$148$myNondetVar_0;
- goto inline$BDLGetDebugLevel$148$label_1#1;
-
- inline$BDLGetDebugLevel$148$label_1#1:
- goto inline$BDLGetDebugLevel$148$Return#1;
-
- inline$BDLGetDebugLevel$148$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$148$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon47_Then#1, inline$BDLSystemPowerIoCompletion$5$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_83_true#1, inline$BDLSystemPowerIoCompletion$5$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_87#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_88#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_89#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$5$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_84#1:
- goto inline$BDLGetDebugLevel$149$Entry#1;
-
- inline$BDLGetDebugLevel$149$Entry#1:
- goto inline$BDLGetDebugLevel$149$start#1;
-
- inline$BDLGetDebugLevel$149$start#1:
- goto inline$BDLGetDebugLevel$149$label_3#1;
-
- inline$BDLGetDebugLevel$149$label_3#1:
- havoc inline$BDLGetDebugLevel$149$myNondetVar_0;
- inline$BDLGetDebugLevel$149$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$149$myNondetVar_0;
- goto inline$BDLGetDebugLevel$149$label_1#1;
-
- inline$BDLGetDebugLevel$149$label_1#1:
- goto inline$BDLGetDebugLevel$149$Return#1;
-
- inline$BDLGetDebugLevel$149$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$149$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon48_Then#1, inline$BDLSystemPowerIoCompletion$5$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_93_true#1, inline$BDLSystemPowerIoCompletion$5$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_97#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_98#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_99#1:
- call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$5$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$5$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_94#1:
- goto inline$BDLGetDebugLevel$150$Entry#1;
-
- inline$BDLGetDebugLevel$150$Entry#1:
- goto inline$BDLGetDebugLevel$150$start#1;
-
- inline$BDLGetDebugLevel$150$start#1:
- goto inline$BDLGetDebugLevel$150$label_3#1;
-
- inline$BDLGetDebugLevel$150$label_3#1:
- havoc inline$BDLGetDebugLevel$150$myNondetVar_0;
- inline$BDLGetDebugLevel$150$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$150$myNondetVar_0;
- goto inline$BDLGetDebugLevel$150$label_1#1;
-
- inline$BDLGetDebugLevel$150$label_1#1:
- goto inline$BDLGetDebugLevel$150$Return#1;
-
- inline$BDLGetDebugLevel$150$Return#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$150$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$5$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$5$anon49_Then#1, inline$BDLSystemPowerIoCompletion$5$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_103_true#1, inline$BDLSystemPowerIoCompletion$5$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$5$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$5$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_104#1:
- inline$BDLSystemPowerIoCompletion$5$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$5$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$5$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$5$Return#1;
-
- inline$BDLSystemPowerIoCompletion$5$Return#1:
- inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$5$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$5$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$5$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$5$anon14_Then#1, inline$CallCompletionRoutine$5$anon14_Else#1;
-
- inline$CallCompletionRoutine$5$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$5$anon9#1;
-
- inline$CallCompletionRoutine$5$anon9#1:
- goto inline$CallCompletionRoutine$5$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$5$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$5$Return#1;
-
- inline$CallCompletionRoutine$5$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$5$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$5$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$5$Entry#1:
- inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$5$start#1;
-
- inline$BDLDevicePowerIoCompletion$5$start#1:
- call inline$BDLDevicePowerIoCompletion$5$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$5$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_4#1:
- inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_6#1:
- inline$BDLDevicePowerIoCompletion$5$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$5$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$5$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$5$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$32$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$32$Entry#1:
- inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$32$start#1;
-
- inline$IoGetCurrentIrpStackLocation$32$start#1:
- inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$32$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$32$label_3_true#1, inline$IoGetCurrentIrpStackLocation$32$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$32$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$32$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$32$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$32$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$32$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$32$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$32$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$32$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$32$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$32$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$32$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$32$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$32$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$32$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$32$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$32$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$32$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$32$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$32$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$32$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$32$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$32$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$32$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon30_Then#1, inline$BDLDevicePowerIoCompletion$5$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_13#1:
- inline$BDLDevicePowerIoCompletion$5$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$5$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$5$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_17#1:
- goto inline$BDLGetDebugLevel$133$Entry#1;
-
- inline$BDLGetDebugLevel$133$Entry#1:
- goto inline$BDLGetDebugLevel$133$start#1;
-
- inline$BDLGetDebugLevel$133$start#1:
- goto inline$BDLGetDebugLevel$133$label_3#1;
-
- inline$BDLGetDebugLevel$133$label_3#1:
- havoc inline$BDLGetDebugLevel$133$myNondetVar_0;
- inline$BDLGetDebugLevel$133$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$133$myNondetVar_0;
- goto inline$BDLGetDebugLevel$133$label_1#1;
-
- inline$BDLGetDebugLevel$133$label_1#1:
- goto inline$BDLGetDebugLevel$133$Return#1;
-
- inline$BDLGetDebugLevel$133$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$133$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon31_Then#1, inline$BDLDevicePowerIoCompletion$5$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_20_true#1, inline$BDLDevicePowerIoCompletion$5$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_24#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_25#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_26#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$5$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_21#1:
- goto inline$BDLGetDebugLevel$134$Entry#1;
-
- inline$BDLGetDebugLevel$134$Entry#1:
- goto inline$BDLGetDebugLevel$134$start#1;
-
- inline$BDLGetDebugLevel$134$start#1:
- goto inline$BDLGetDebugLevel$134$label_3#1;
-
- inline$BDLGetDebugLevel$134$label_3#1:
- havoc inline$BDLGetDebugLevel$134$myNondetVar_0;
- inline$BDLGetDebugLevel$134$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$134$myNondetVar_0;
- goto inline$BDLGetDebugLevel$134$label_1#1;
-
- inline$BDLGetDebugLevel$134$label_1#1:
- goto inline$BDLGetDebugLevel$134$Return#1;
-
- inline$BDLGetDebugLevel$134$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$134$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon32_Then#1, inline$BDLDevicePowerIoCompletion$5$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_30_true#1, inline$BDLDevicePowerIoCompletion$5$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_34#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_35#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_36#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$5$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_31#1:
- goto inline$BDLGetDebugLevel$135$Entry#1;
-
- inline$BDLGetDebugLevel$135$Entry#1:
- goto inline$BDLGetDebugLevel$135$start#1;
-
- inline$BDLGetDebugLevel$135$start#1:
- goto inline$BDLGetDebugLevel$135$label_3#1;
-
- inline$BDLGetDebugLevel$135$label_3#1:
- havoc inline$BDLGetDebugLevel$135$myNondetVar_0;
- inline$BDLGetDebugLevel$135$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$135$myNondetVar_0;
- goto inline$BDLGetDebugLevel$135$label_1#1;
-
- inline$BDLGetDebugLevel$135$label_1#1:
- goto inline$BDLGetDebugLevel$135$Return#1;
-
- inline$BDLGetDebugLevel$135$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$135$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon33_Then#1, inline$BDLDevicePowerIoCompletion$5$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_40_true#1, inline$BDLDevicePowerIoCompletion$5$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_41_true#1, inline$BDLDevicePowerIoCompletion$5$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$5$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$5$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_44_true#1, inline$BDLDevicePowerIoCompletion$5$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$5$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_45_true#1, inline$BDLDevicePowerIoCompletion$5$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$5$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$5$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$5$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$5$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$5$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$5$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_54#1:
- inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$5$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_55_true#1, inline$BDLDevicePowerIoCompletion$5$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_56#1:
- call inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$5$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$5$anon34_Then#1, inline$BDLDevicePowerIoCompletion$5$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_59#1:
- goto inline$BDLGetDebugLevel$136$Entry#1;
-
- inline$BDLGetDebugLevel$136$Entry#1:
- goto inline$BDLGetDebugLevel$136$start#1;
-
- inline$BDLGetDebugLevel$136$start#1:
- goto inline$BDLGetDebugLevel$136$label_3#1;
-
- inline$BDLGetDebugLevel$136$label_3#1:
- havoc inline$BDLGetDebugLevel$136$myNondetVar_0;
- inline$BDLGetDebugLevel$136$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$136$myNondetVar_0;
- goto inline$BDLGetDebugLevel$136$label_1#1;
-
- inline$BDLGetDebugLevel$136$label_1#1:
- goto inline$BDLGetDebugLevel$136$Return#1;
-
- inline$BDLGetDebugLevel$136$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$136$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon35_Then#1, inline$BDLDevicePowerIoCompletion$5$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_62_true#1, inline$BDLDevicePowerIoCompletion$5$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_66#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_67#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_68#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$5$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_63#1:
- goto inline$BDLGetDebugLevel$137$Entry#1;
-
- inline$BDLGetDebugLevel$137$Entry#1:
- goto inline$BDLGetDebugLevel$137$start#1;
-
- inline$BDLGetDebugLevel$137$start#1:
- goto inline$BDLGetDebugLevel$137$label_3#1;
-
- inline$BDLGetDebugLevel$137$label_3#1:
- havoc inline$BDLGetDebugLevel$137$myNondetVar_0;
- inline$BDLGetDebugLevel$137$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$137$myNondetVar_0;
- goto inline$BDLGetDebugLevel$137$label_1#1;
-
- inline$BDLGetDebugLevel$137$label_1#1:
- goto inline$BDLGetDebugLevel$137$Return#1;
-
- inline$BDLGetDebugLevel$137$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$137$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon36_Then#1, inline$BDLDevicePowerIoCompletion$5$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_72_true#1, inline$BDLDevicePowerIoCompletion$5$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_76#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_77#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_78#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$5$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_73#1:
- goto inline$BDLGetDebugLevel$138$Entry#1;
-
- inline$BDLGetDebugLevel$138$Entry#1:
- goto inline$BDLGetDebugLevel$138$start#1;
-
- inline$BDLGetDebugLevel$138$start#1:
- goto inline$BDLGetDebugLevel$138$label_3#1;
-
- inline$BDLGetDebugLevel$138$label_3#1:
- havoc inline$BDLGetDebugLevel$138$myNondetVar_0;
- inline$BDLGetDebugLevel$138$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$138$myNondetVar_0;
- goto inline$BDLGetDebugLevel$138$label_1#1;
-
- inline$BDLGetDebugLevel$138$label_1#1:
- goto inline$BDLGetDebugLevel$138$Return#1;
-
- inline$BDLGetDebugLevel$138$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$138$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon37_Then#1, inline$BDLDevicePowerIoCompletion$5$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_82_true#1, inline$BDLDevicePowerIoCompletion$5$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$5$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$5$anon38_Then#1, inline$BDLDevicePowerIoCompletion$5$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$5$anon39_Then#1, inline$BDLDevicePowerIoCompletion$5$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_92#1:
- goto inline$storm_IoCompleteRequest$11$Entry#1;
-
- inline$storm_IoCompleteRequest$11$Entry#1:
- inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$11$start#1;
-
- inline$storm_IoCompleteRequest$11$start#1:
- inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$11$label_3#1;
-
- inline$storm_IoCompleteRequest$11$label_3#1:
- call inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$11$label_6#1;
-
- inline$storm_IoCompleteRequest$11$label_6#1:
- goto inline$storm_IoCompleteRequest$11$label_6_true#1, inline$storm_IoCompleteRequest$11$label_6_false#1;
-
- inline$storm_IoCompleteRequest$11$label_6_false#1:
- assume inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$11$label_7#1;
-
- inline$storm_IoCompleteRequest$11$label_6_true#1:
- assume inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$11$label_8#1;
-
- inline$storm_IoCompleteRequest$11$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$11$anon3_Then#1, inline$storm_IoCompleteRequest$11$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$11$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$11$anon1#1;
-
- inline$storm_IoCompleteRequest$11$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$11$label_9#1;
-
- inline$storm_IoCompleteRequest$11$label_9#1:
- goto inline$storm_IoCompleteRequest$11$label_9_true#1, inline$storm_IoCompleteRequest$11$label_9_false#1;
-
- inline$storm_IoCompleteRequest$11$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$11$label_10#1;
-
- inline$storm_IoCompleteRequest$11$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$11$label_1#1;
-
- inline$storm_IoCompleteRequest$11$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$11$label_7#1;
-
- inline$storm_IoCompleteRequest$11$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$11$label_1#1;
-
- inline$storm_IoCompleteRequest$11$label_1#1:
- goto inline$storm_IoCompleteRequest$11$Return#1;
-
- inline$storm_IoCompleteRequest$11$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$11$Return#1;
-
- inline$storm_IoCompleteRequest$11$Return#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon40_Then#1, inline$BDLDevicePowerIoCompletion$5$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$5$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$5$anon41_Then#1, inline$BDLDevicePowerIoCompletion$5$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_98#1:
- goto inline$BDLGetDebugLevel$139$Entry#1;
-
- inline$BDLGetDebugLevel$139$Entry#1:
- goto inline$BDLGetDebugLevel$139$start#1;
-
- inline$BDLGetDebugLevel$139$start#1:
- goto inline$BDLGetDebugLevel$139$label_3#1;
-
- inline$BDLGetDebugLevel$139$label_3#1:
- havoc inline$BDLGetDebugLevel$139$myNondetVar_0;
- inline$BDLGetDebugLevel$139$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$139$myNondetVar_0;
- goto inline$BDLGetDebugLevel$139$label_1#1;
-
- inline$BDLGetDebugLevel$139$label_1#1:
- goto inline$BDLGetDebugLevel$139$Return#1;
-
- inline$BDLGetDebugLevel$139$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$139$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon42_Then#1, inline$BDLDevicePowerIoCompletion$5$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_101_true#1, inline$BDLDevicePowerIoCompletion$5$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_105#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_106#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_107#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$5$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_102#1:
- goto inline$BDLGetDebugLevel$140$Entry#1;
-
- inline$BDLGetDebugLevel$140$Entry#1:
- goto inline$BDLGetDebugLevel$140$start#1;
-
- inline$BDLGetDebugLevel$140$start#1:
- goto inline$BDLGetDebugLevel$140$label_3#1;
-
- inline$BDLGetDebugLevel$140$label_3#1:
- havoc inline$BDLGetDebugLevel$140$myNondetVar_0;
- inline$BDLGetDebugLevel$140$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$140$myNondetVar_0;
- goto inline$BDLGetDebugLevel$140$label_1#1;
-
- inline$BDLGetDebugLevel$140$label_1#1:
- goto inline$BDLGetDebugLevel$140$Return#1;
-
- inline$BDLGetDebugLevel$140$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$140$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon43_Then#1, inline$BDLDevicePowerIoCompletion$5$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_111_true#1, inline$BDLDevicePowerIoCompletion$5$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_115#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_116#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_117#1:
- call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$5$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$5$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_112#1:
- goto inline$BDLGetDebugLevel$141$Entry#1;
-
- inline$BDLGetDebugLevel$141$Entry#1:
- goto inline$BDLGetDebugLevel$141$start#1;
-
- inline$BDLGetDebugLevel$141$start#1:
- goto inline$BDLGetDebugLevel$141$label_3#1;
-
- inline$BDLGetDebugLevel$141$label_3#1:
- havoc inline$BDLGetDebugLevel$141$myNondetVar_0;
- inline$BDLGetDebugLevel$141$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$141$myNondetVar_0;
- goto inline$BDLGetDebugLevel$141$label_1#1;
-
- inline$BDLGetDebugLevel$141$label_1#1:
- goto inline$BDLGetDebugLevel$141$Return#1;
-
- inline$BDLGetDebugLevel$141$Return#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$141$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$5$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$5$anon44_Then#1, inline$BDLDevicePowerIoCompletion$5$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_121_true#1, inline$BDLDevicePowerIoCompletion$5$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$5$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$5$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_122#1:
- inline$BDLDevicePowerIoCompletion$5$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$5$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$5$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$5$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$5$Return#1;
-
- inline$BDLDevicePowerIoCompletion$5$Return#1:
- inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$5$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$5$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$5$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$5$anon13_Then#1, inline$CallCompletionRoutine$5$anon13_Else#1;
-
- inline$CallCompletionRoutine$5$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$5$anon7#1;
-
- inline$CallCompletionRoutine$5$anon7#1:
- goto inline$CallCompletionRoutine$5$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$5$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$5$Return#1;
-
- inline$CallCompletionRoutine$5$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$5$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$5$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$5$Entry#1:
- inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$5$start#1;
-
- inline$BDLCallDriverCompletionRoutine$5$start#1:
- inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$5$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$5$label_3_true#1, inline$BDLCallDriverCompletionRoutine$5$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$5$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$5$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$5$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$5$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_6#1:
- goto inline$storm_KeSetEvent$6$Entry#1;
-
- inline$storm_KeSetEvent$6$Entry#1:
- inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$6$start#1;
-
- inline$storm_KeSetEvent$6$start#1:
- inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$6$label_3#1;
-
- inline$storm_KeSetEvent$6$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$6$label_1#1;
-
- inline$storm_KeSetEvent$6$label_1#1:
- goto inline$storm_KeSetEvent$6$Return#1;
-
- inline$storm_KeSetEvent$6$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$5$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$5$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$5$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$5$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$5$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$5$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$5$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_9#1:
- inline$BDLCallDriverCompletionRoutine$5$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$5$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$5$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$5$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$5$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$5$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$5$Return#1:
- inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$5$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$5$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$5$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$5$anon12_Then#1, inline$CallCompletionRoutine$5$anon12_Else#1;
-
- inline$CallCompletionRoutine$5$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$5$anon5#1;
-
- inline$CallCompletionRoutine$5$anon5#1:
- goto inline$CallCompletionRoutine$5$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$5$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$5$label_23#1;
-
- inline$CallCompletionRoutine$5$label_23#1:
- inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$5$label_24#1;
-
- inline$CallCompletionRoutine$5$label_24#1:
- goto inline$CallCompletionRoutine$5$label_24_true#1, inline$CallCompletionRoutine$5$label_24_false#1;
-
- inline$CallCompletionRoutine$5$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$5$label_1#1;
-
- inline$CallCompletionRoutine$5$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$5$label_25#1;
-
- inline$CallCompletionRoutine$5$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$5$label_1#1;
-
- inline$CallCompletionRoutine$5$label_1#1:
- goto inline$CallCompletionRoutine$5$Return#1;
-
- inline$CallCompletionRoutine$5$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$5$Return#1;
-
- inline$CallCompletionRoutine$5$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$5$Return#1;
-
- inline$CallCompletionRoutine$5$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$5$Return#1;
-
- inline$CallCompletionRoutine$5$Return#1:
- goto inline$storm_IoCallDriver$2$label_39$1#1;
-
- inline$storm_IoCallDriver$2$label_39$1#1:
- goto inline$storm_IoCallDriver$2$anon15_Then#1, inline$storm_IoCallDriver$2$anon15_Else#1;
-
- inline$storm_IoCallDriver$2$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$2$anon10#1;
-
- inline$storm_IoCallDriver$2$anon10#1:
- goto inline$storm_IoCallDriver$2$label_36#1;
-
- inline$storm_IoCallDriver$2$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$2$Return#1;
-
- inline$storm_IoCallDriver$2$label_27_case_0#1:
- assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$2$label_28#1;
-
- inline$storm_IoCallDriver$2$label_28#1:
- inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$2$label_42#1;
-
- inline$storm_IoCallDriver$2$label_42#1:
- goto inline$storm_IoCallDriver$2$label_43#1;
-
- inline$storm_IoCallDriver$2$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$2$label_36#1;
-
- inline$storm_IoCallDriver$2$label_36#1:
- inline$storm_IoCallDriver$2$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$2$label_1#1;
-
- inline$storm_IoCallDriver$2$label_1#1:
- goto inline$storm_IoCallDriver$2$Return#1;
-
- inline$storm_IoCallDriver$2$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$2$Return#1;
-
- inline$storm_IoCallDriver$2$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$2$Return#1;
-
- inline$storm_IoCallDriver$2$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$2$Return#1;
-
- inline$storm_IoCallDriver$2$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$2$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_19$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_19$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon20_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon9#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_42#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_42#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_IoCallDriver$108.29$4$;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon20_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_18_true#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_22#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_22#1:
- call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon21_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon21_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon11#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon11#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_25#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_25#1:
- goto inline$storm_PoCallDriver$1$Entry#1;
-
- inline$storm_PoCallDriver$1$Entry#1:
- inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_PoCallDriver$1$start#1;
-
- inline$storm_PoCallDriver$1$start#1:
- inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8_.1;
- goto inline$storm_PoCallDriver$1$label_3#1;
-
- inline$storm_PoCallDriver$1$label_3#1:
- goto inline$storm_IoCallDriver$3$Entry#1;
-
- inline$storm_IoCallDriver$3$Entry#1:
- inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8;
- goto inline$storm_IoCallDriver$3$start#1;
-
- inline$storm_IoCallDriver$3$start#1:
- inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$3$label_3#1;
-
- inline$storm_IoCallDriver$3$label_3#1:
- goto inline$storm_IoCallDriver$3$label_4#1;
-
- inline$storm_IoCallDriver$3$label_4#1:
- goto inline$storm_IoCallDriver$3$label_5#1;
-
- inline$storm_IoCallDriver$3$label_5#1:
- goto inline$storm_IoCallDriver$3$label_6#1;
-
- inline$storm_IoCallDriver$3$label_6#1:
- call inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$3$label_9#1;
-
- inline$storm_IoCallDriver$3$label_9#1:
- goto inline$storm_IoCallDriver$3$label_9_true#1, inline$storm_IoCallDriver$3$label_9_false#1;
-
- inline$storm_IoCallDriver$3$label_9_false#1:
- assume inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$3$label_10#1;
-
- inline$storm_IoCallDriver$3$label_9_true#1:
- assume inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$3$label_13#1;
-
- inline$storm_IoCallDriver$3$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$3$anon12_Then#1, inline$storm_IoCallDriver$3$anon12_Else#1;
-
- inline$storm_IoCallDriver$3$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$3$anon3#1;
-
- inline$storm_IoCallDriver$3$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$3$label_14#1;
-
- inline$storm_IoCallDriver$3$label_14#1:
- goto inline$storm_IoCallDriver$3$label_14_true#1, inline$storm_IoCallDriver$3$label_14_false#1;
-
- inline$storm_IoCallDriver$3$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$3$label_15#1;
-
- inline$storm_IoCallDriver$3$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$3$label_1#1;
-
- inline$storm_IoCallDriver$3$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$3$label_10#1;
-
- inline$storm_IoCallDriver$3$label_10#1:
- goto inline$IoSetNextIrpStackLocation$4$Entry#1;
-
- inline$IoSetNextIrpStackLocation$4$Entry#1:
- inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$4$start#1;
-
- inline$IoSetNextIrpStackLocation$4$start#1:
- inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$4$label_3#1;
-
- inline$IoSetNextIrpStackLocation$4$label_3#1:
- goto inline$IoSetNextIrpStackLocation$4$label_3_true#1, inline$IoSetNextIrpStackLocation$4$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$4$label_3_false#1:
- inline$IoSetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$4$myVar_0);
- goto inline$IoSetNextIrpStackLocation$4$label_4#1;
-
- inline$IoSetNextIrpStackLocation$4$label_4#1:
- call inline$IoSetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$4$label_7#1;
-
- inline$IoSetNextIrpStackLocation$4$label_7#1:
- call inline$IoSetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$4$label_8#1;
-
- inline$IoSetNextIrpStackLocation$4$label_8#1:
- goto inline$IoSetNextIrpStackLocation$4$label_5#1;
-
- inline$IoSetNextIrpStackLocation$4$label_3_true#1:
- inline$IoSetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$4$myVar_0);
- goto inline$IoSetNextIrpStackLocation$4$label_5#1;
-
- inline$IoSetNextIrpStackLocation$4$label_5#1:
- inline$IoSetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$4$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$4$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$4$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$4$label_6#1;
-
- inline$IoSetNextIrpStackLocation$4$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$4$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$4$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$4$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$4$label_1#1;
-
- inline$IoSetNextIrpStackLocation$4$label_1#1:
- goto inline$IoSetNextIrpStackLocation$4$Return#1;
-
- inline$IoSetNextIrpStackLocation$4$Return#1:
- goto inline$storm_IoCallDriver$3$label_10$1#1;
-
- inline$storm_IoCallDriver$3$label_10$1#1:
- goto inline$storm_IoCallDriver$3$anon11_Then#1, inline$storm_IoCallDriver$3$anon11_Else#1;
-
- inline$storm_IoCallDriver$3$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$3$anon1#1;
-
- inline$storm_IoCallDriver$3$anon1#1:
- goto inline$storm_IoCallDriver$3$label_18#1;
-
- inline$storm_IoCallDriver$3$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$34$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$34$Entry#1:
- inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$34$start#1;
-
- inline$IoGetCurrentIrpStackLocation$34$start#1:
- inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$34$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$34$label_3_true#1, inline$IoGetCurrentIrpStackLocation$34$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$34$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$34$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$34$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$34$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$34$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$34$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$34$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$34$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$34$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$34$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$34$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$34$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$34$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$34$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$34$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$34$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$34$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$34$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$34$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$34$Return#1:
- goto inline$storm_IoCallDriver$3$label_18$1#1;
-
- inline$storm_IoCallDriver$3$label_18$1#1:
- goto inline$storm_IoCallDriver$3$anon13_Then#1, inline$storm_IoCallDriver$3$anon13_Else#1;
-
- inline$storm_IoCallDriver$3$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$3$anon6#1;
-
- inline$storm_IoCallDriver$3$anon6#1:
- goto inline$storm_IoCallDriver$3$label_21#1;
-
- inline$storm_IoCallDriver$3$label_21#1:
- goto inline$storm_IoCallDriver$3$label_22#1;
-
- inline$storm_IoCallDriver$3$label_22#1:
- goto inline$storm_IoCallDriver$3$label_23#1;
-
- inline$storm_IoCallDriver$3$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$3$label_24#1;
-
- inline$storm_IoCallDriver$3$label_24#1:
- call inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$3$label_27#1;
-
- inline$storm_IoCallDriver$3$label_27#1:
- goto inline$storm_IoCallDriver$3$label_27_case_0#1, inline$storm_IoCallDriver$3$label_27_case_1#1, inline$storm_IoCallDriver$3$label_27_case_2#1;
-
- inline$storm_IoCallDriver$3$label_27_case_2#1:
- assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$3$label_30#1;
-
- inline$storm_IoCallDriver$3$label_30#1:
- inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$3$label_31#1;
-
- inline$storm_IoCallDriver$3$label_31#1:
- goto inline$storm_IoCallDriver$3$label_32#1;
-
- inline$storm_IoCallDriver$3$label_32#1:
- goto inline$storm_IoCallDriver$3$label_33#1;
-
- inline$storm_IoCallDriver$3$label_33#1:
- goto inline$CallCompletionRoutine$6$Entry#1;
-
- inline$CallCompletionRoutine$6$Entry#1:
- inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$6$start#1;
-
- inline$CallCompletionRoutine$6$start#1:
- inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$6$label_3#1;
-
- inline$CallCompletionRoutine$6$label_3#1:
- goto inline$CallCompletionRoutine$6$label_4#1;
-
- inline$CallCompletionRoutine$6$label_4#1:
- goto inline$CallCompletionRoutine$6$label_5#1;
-
- inline$CallCompletionRoutine$6$label_5#1:
- goto inline$CallCompletionRoutine$6$label_6#1;
-
- inline$CallCompletionRoutine$6$label_6#1:
- goto inline$CallCompletionRoutine$6$label_7#1;
-
- inline$CallCompletionRoutine$6$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$35$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$35$Entry#1:
- inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$35$start#1;
-
- inline$IoGetCurrentIrpStackLocation$35$start#1:
- inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$35$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$35$label_3_true#1, inline$IoGetCurrentIrpStackLocation$35$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$35$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$35$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$35$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$35$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$35$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$35$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$35$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$35$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$35$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$35$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$35$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$35$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$35$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$35$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$35$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$35$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$35$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$35$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$35$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$35$Return#1:
- goto inline$CallCompletionRoutine$6$label_7$1#1;
-
- inline$CallCompletionRoutine$6$label_7$1#1:
- goto inline$CallCompletionRoutine$6$anon10_Then#1, inline$CallCompletionRoutine$6$anon10_Else#1;
-
- inline$CallCompletionRoutine$6$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$6$anon1#1;
-
- inline$CallCompletionRoutine$6$anon1#1:
- goto inline$CallCompletionRoutine$6$label_10#1;
-
- inline$CallCompletionRoutine$6$label_10#1:
- goto inline$CallCompletionRoutine$6$label_11#1;
-
- inline$CallCompletionRoutine$6$label_11#1:
- havoc inline$CallCompletionRoutine$6$myNondetVar_0;
- inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$myNondetVar_0;
- goto inline$CallCompletionRoutine$6$label_12#1;
-
- inline$CallCompletionRoutine$6$label_12#1:
- havoc inline$CallCompletionRoutine$6$myNondetVar_0;
- inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$myNondetVar_0;
- goto inline$CallCompletionRoutine$6$label_13#1;
-
- inline$CallCompletionRoutine$6$label_13#1:
- havoc inline$CallCompletionRoutine$6$myNondetVar_0;
- goto inline$CallCompletionRoutine$6$label_14#1;
-
- inline$CallCompletionRoutine$6$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$36$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$36$Entry#1:
- inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$36$start#1;
-
- inline$IoGetCurrentIrpStackLocation$36$start#1:
- inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$36$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$36$label_3_true#1, inline$IoGetCurrentIrpStackLocation$36$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$36$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$36$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$36$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$36$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$36$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$36$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$36$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$36$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$36$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$36$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$36$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$36$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$36$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$36$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$36$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$36$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$36$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$36$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$36$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$36$Return#1:
- goto inline$CallCompletionRoutine$6$label_14$1#1;
-
- inline$CallCompletionRoutine$6$label_14$1#1:
- goto inline$CallCompletionRoutine$6$anon11_Then#1, inline$CallCompletionRoutine$6$anon11_Else#1;
-
- inline$CallCompletionRoutine$6$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$6$anon3#1;
-
- inline$CallCompletionRoutine$6$anon3#1:
- goto inline$CallCompletionRoutine$6$label_17#1;
-
- inline$CallCompletionRoutine$6$label_17#1:
- goto inline$CallCompletionRoutine$6$label_18#1;
-
- inline$CallCompletionRoutine$6$label_18#1:
- goto inline$CallCompletionRoutine$6$label_18_true#1, inline$CallCompletionRoutine$6$label_18_false#1;
-
- inline$CallCompletionRoutine$6$label_18_false#1:
- assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$6$label_1#1;
-
- inline$CallCompletionRoutine$6$label_18_true#1:
- assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$6$label_19#1;
-
- inline$CallCompletionRoutine$6$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$6$label_20#1;
-
- inline$CallCompletionRoutine$6$label_20#1:
- goto inline$CallCompletionRoutine$6$label_20_icall_1#1, inline$CallCompletionRoutine$6$label_20_icall_2#1, inline$CallCompletionRoutine$6$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$6$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$6$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$6$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$6$Entry#1:
- inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$6$start#1;
-
- inline$BDLSystemPowerIoCompletion$6$start#1:
- call inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$6$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_4#1:
- inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_6#1:
- inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$6$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$6$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$6$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$38$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$38$Entry#1:
- inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$38$start#1;
-
- inline$IoGetCurrentIrpStackLocation$38$start#1:
- inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$38$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$38$label_3_true#1, inline$IoGetCurrentIrpStackLocation$38$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$38$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$38$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$38$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$38$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$38$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$38$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$38$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$38$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$38$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$38$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$38$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$38$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$38$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$38$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$38$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$38$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$38$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$38$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$38$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$38$Return#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon36_Then#1, inline$BDLSystemPowerIoCompletion$6$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_15#1:
- goto inline$BDLGetDebugLevel$163$Entry#1;
-
- inline$BDLGetDebugLevel$163$Entry#1:
- goto inline$BDLGetDebugLevel$163$start#1;
-
- inline$BDLGetDebugLevel$163$start#1:
- goto inline$BDLGetDebugLevel$163$label_3#1;
-
- inline$BDLGetDebugLevel$163$label_3#1:
- havoc inline$BDLGetDebugLevel$163$myNondetVar_0;
- inline$BDLGetDebugLevel$163$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$163$myNondetVar_0;
- goto inline$BDLGetDebugLevel$163$label_1#1;
-
- inline$BDLGetDebugLevel$163$label_1#1:
- goto inline$BDLGetDebugLevel$163$Return#1;
-
- inline$BDLGetDebugLevel$163$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$163$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon37_Then#1, inline$BDLSystemPowerIoCompletion$6$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_18_true#1, inline$BDLSystemPowerIoCompletion$6$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_22#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_23#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_24#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$6$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_19#1:
- goto inline$BDLGetDebugLevel$164$Entry#1;
-
- inline$BDLGetDebugLevel$164$Entry#1:
- goto inline$BDLGetDebugLevel$164$start#1;
-
- inline$BDLGetDebugLevel$164$start#1:
- goto inline$BDLGetDebugLevel$164$label_3#1;
-
- inline$BDLGetDebugLevel$164$label_3#1:
- havoc inline$BDLGetDebugLevel$164$myNondetVar_0;
- inline$BDLGetDebugLevel$164$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$164$myNondetVar_0;
- goto inline$BDLGetDebugLevel$164$label_1#1;
-
- inline$BDLGetDebugLevel$164$label_1#1:
- goto inline$BDLGetDebugLevel$164$Return#1;
-
- inline$BDLGetDebugLevel$164$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$164$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon38_Then#1, inline$BDLSystemPowerIoCompletion$6$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_28_true#1, inline$BDLSystemPowerIoCompletion$6$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_32#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_33#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_34#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$6$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_29#1:
- goto inline$BDLGetDebugLevel$165$Entry#1;
-
- inline$BDLGetDebugLevel$165$Entry#1:
- goto inline$BDLGetDebugLevel$165$start#1;
-
- inline$BDLGetDebugLevel$165$start#1:
- goto inline$BDLGetDebugLevel$165$label_3#1;
-
- inline$BDLGetDebugLevel$165$label_3#1:
- havoc inline$BDLGetDebugLevel$165$myNondetVar_0;
- inline$BDLGetDebugLevel$165$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$165$myNondetVar_0;
- goto inline$BDLGetDebugLevel$165$label_1#1;
-
- inline$BDLGetDebugLevel$165$label_1#1:
- goto inline$BDLGetDebugLevel$165$Return#1;
-
- inline$BDLGetDebugLevel$165$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$165$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon39_Then#1, inline$BDLSystemPowerIoCompletion$6$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_38_true#1, inline$BDLSystemPowerIoCompletion$6$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_39_true#1, inline$BDLSystemPowerIoCompletion$6$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$6$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$6$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$6$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_106_true#1, inline$BDLSystemPowerIoCompletion$6$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_142#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_143#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$6$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$6$myNondetVar_0, inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$6$anon50_Then#1, inline$BDLSystemPowerIoCompletion$6$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_112#1:
- inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$6$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_113_true#1, inline$BDLSystemPowerIoCompletion$6$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$6$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_117#1:
- goto inline$BDLGetDebugLevel$172$Entry#1;
-
- inline$BDLGetDebugLevel$172$Entry#1:
- goto inline$BDLGetDebugLevel$172$start#1;
-
- inline$BDLGetDebugLevel$172$start#1:
- goto inline$BDLGetDebugLevel$172$label_3#1;
-
- inline$BDLGetDebugLevel$172$label_3#1:
- havoc inline$BDLGetDebugLevel$172$myNondetVar_0;
- inline$BDLGetDebugLevel$172$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$172$myNondetVar_0;
- goto inline$BDLGetDebugLevel$172$label_1#1;
-
- inline$BDLGetDebugLevel$172$label_1#1:
- goto inline$BDLGetDebugLevel$172$Return#1;
-
- inline$BDLGetDebugLevel$172$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$172$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon51_Then#1, inline$BDLSystemPowerIoCompletion$6$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_120_true#1, inline$BDLSystemPowerIoCompletion$6$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_124#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_125#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_126#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$6$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_121#1:
- goto inline$BDLGetDebugLevel$173$Entry#1;
-
- inline$BDLGetDebugLevel$173$Entry#1:
- goto inline$BDLGetDebugLevel$173$start#1;
-
- inline$BDLGetDebugLevel$173$start#1:
- goto inline$BDLGetDebugLevel$173$label_3#1;
-
- inline$BDLGetDebugLevel$173$label_3#1:
- havoc inline$BDLGetDebugLevel$173$myNondetVar_0;
- inline$BDLGetDebugLevel$173$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$173$myNondetVar_0;
- goto inline$BDLGetDebugLevel$173$label_1#1;
-
- inline$BDLGetDebugLevel$173$label_1#1:
- goto inline$BDLGetDebugLevel$173$Return#1;
-
- inline$BDLGetDebugLevel$173$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$173$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon52_Then#1, inline$BDLSystemPowerIoCompletion$6$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_130_true#1, inline$BDLSystemPowerIoCompletion$6$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_134#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_135#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_136#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$6$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_131#1:
- goto inline$BDLGetDebugLevel$174$Entry#1;
-
- inline$BDLGetDebugLevel$174$Entry#1:
- goto inline$BDLGetDebugLevel$174$start#1;
-
- inline$BDLGetDebugLevel$174$start#1:
- goto inline$BDLGetDebugLevel$174$label_3#1;
-
- inline$BDLGetDebugLevel$174$label_3#1:
- havoc inline$BDLGetDebugLevel$174$myNondetVar_0;
- inline$BDLGetDebugLevel$174$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$174$myNondetVar_0;
- goto inline$BDLGetDebugLevel$174$label_1#1;
-
- inline$BDLGetDebugLevel$174$label_1#1:
- goto inline$BDLGetDebugLevel$174$Return#1;
-
- inline$BDLGetDebugLevel$174$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$174$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon53_Then#1, inline$BDLSystemPowerIoCompletion$6$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_140_true#1, inline$BDLSystemPowerIoCompletion$6$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$6$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_115#1:
- inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$6$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$6$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_43#1:
- goto inline$BDLGetDebugLevel$166$Entry#1;
-
- inline$BDLGetDebugLevel$166$Entry#1:
- goto inline$BDLGetDebugLevel$166$start#1;
-
- inline$BDLGetDebugLevel$166$start#1:
- goto inline$BDLGetDebugLevel$166$label_3#1;
-
- inline$BDLGetDebugLevel$166$label_3#1:
- havoc inline$BDLGetDebugLevel$166$myNondetVar_0;
- inline$BDLGetDebugLevel$166$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$166$myNondetVar_0;
- goto inline$BDLGetDebugLevel$166$label_1#1;
-
- inline$BDLGetDebugLevel$166$label_1#1:
- goto inline$BDLGetDebugLevel$166$Return#1;
-
- inline$BDLGetDebugLevel$166$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$166$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon40_Then#1, inline$BDLSystemPowerIoCompletion$6$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_46_true#1, inline$BDLSystemPowerIoCompletion$6$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_50#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_51#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_52#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$6$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_47#1:
- goto inline$BDLGetDebugLevel$167$Entry#1;
-
- inline$BDLGetDebugLevel$167$Entry#1:
- goto inline$BDLGetDebugLevel$167$start#1;
-
- inline$BDLGetDebugLevel$167$start#1:
- goto inline$BDLGetDebugLevel$167$label_3#1;
-
- inline$BDLGetDebugLevel$167$label_3#1:
- havoc inline$BDLGetDebugLevel$167$myNondetVar_0;
- inline$BDLGetDebugLevel$167$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$167$myNondetVar_0;
- goto inline$BDLGetDebugLevel$167$label_1#1;
-
- inline$BDLGetDebugLevel$167$label_1#1:
- goto inline$BDLGetDebugLevel$167$Return#1;
-
- inline$BDLGetDebugLevel$167$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$167$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon41_Then#1, inline$BDLSystemPowerIoCompletion$6$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_56_true#1, inline$BDLSystemPowerIoCompletion$6$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_60#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_61#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_62#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$6$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_57#1:
- goto inline$BDLGetDebugLevel$168$Entry#1;
-
- inline$BDLGetDebugLevel$168$Entry#1:
- goto inline$BDLGetDebugLevel$168$start#1;
-
- inline$BDLGetDebugLevel$168$start#1:
- goto inline$BDLGetDebugLevel$168$label_3#1;
-
- inline$BDLGetDebugLevel$168$label_3#1:
- havoc inline$BDLGetDebugLevel$168$myNondetVar_0;
- inline$BDLGetDebugLevel$168$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$168$myNondetVar_0;
- goto inline$BDLGetDebugLevel$168$label_1#1;
-
- inline$BDLGetDebugLevel$168$label_1#1:
- goto inline$BDLGetDebugLevel$168$Return#1;
-
- inline$BDLGetDebugLevel$168$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$168$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon42_Then#1, inline$BDLSystemPowerIoCompletion$6$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_66_true#1, inline$BDLSystemPowerIoCompletion$6$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$6$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$6$anon43_Then#1, inline$BDLSystemPowerIoCompletion$6$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$6$anon44_Then#1, inline$BDLSystemPowerIoCompletion$6$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_74#1:
- goto inline$storm_IoCompleteRequest$14$Entry#1;
-
- inline$storm_IoCompleteRequest$14$Entry#1:
- inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$14$start#1;
-
- inline$storm_IoCompleteRequest$14$start#1:
- inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$14$label_3#1;
-
- inline$storm_IoCompleteRequest$14$label_3#1:
- call inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$14$label_6#1;
-
- inline$storm_IoCompleteRequest$14$label_6#1:
- goto inline$storm_IoCompleteRequest$14$label_6_true#1, inline$storm_IoCompleteRequest$14$label_6_false#1;
-
- inline$storm_IoCompleteRequest$14$label_6_false#1:
- assume inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$14$label_7#1;
-
- inline$storm_IoCompleteRequest$14$label_6_true#1:
- assume inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$14$label_8#1;
-
- inline$storm_IoCompleteRequest$14$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$14$anon3_Then#1, inline$storm_IoCompleteRequest$14$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$14$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$14$anon1#1;
-
- inline$storm_IoCompleteRequest$14$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$14$label_9#1;
-
- inline$storm_IoCompleteRequest$14$label_9#1:
- goto inline$storm_IoCompleteRequest$14$label_9_true#1, inline$storm_IoCompleteRequest$14$label_9_false#1;
-
- inline$storm_IoCompleteRequest$14$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$14$label_10#1;
-
- inline$storm_IoCompleteRequest$14$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$14$label_1#1;
-
- inline$storm_IoCompleteRequest$14$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$14$label_7#1;
-
- inline$storm_IoCompleteRequest$14$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$14$label_1#1;
-
- inline$storm_IoCompleteRequest$14$label_1#1:
- goto inline$storm_IoCompleteRequest$14$Return#1;
-
- inline$storm_IoCompleteRequest$14$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$14$Return#1;
-
- inline$storm_IoCompleteRequest$14$Return#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon45_Then#1, inline$BDLSystemPowerIoCompletion$6$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$6$anon46_Then#1, inline$BDLSystemPowerIoCompletion$6$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_80#1:
- goto inline$BDLGetDebugLevel$169$Entry#1;
-
- inline$BDLGetDebugLevel$169$Entry#1:
- goto inline$BDLGetDebugLevel$169$start#1;
-
- inline$BDLGetDebugLevel$169$start#1:
- goto inline$BDLGetDebugLevel$169$label_3#1;
-
- inline$BDLGetDebugLevel$169$label_3#1:
- havoc inline$BDLGetDebugLevel$169$myNondetVar_0;
- inline$BDLGetDebugLevel$169$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$169$myNondetVar_0;
- goto inline$BDLGetDebugLevel$169$label_1#1;
-
- inline$BDLGetDebugLevel$169$label_1#1:
- goto inline$BDLGetDebugLevel$169$Return#1;
-
- inline$BDLGetDebugLevel$169$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$169$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon47_Then#1, inline$BDLSystemPowerIoCompletion$6$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_83_true#1, inline$BDLSystemPowerIoCompletion$6$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_87#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_88#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_89#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$6$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_84#1:
- goto inline$BDLGetDebugLevel$170$Entry#1;
-
- inline$BDLGetDebugLevel$170$Entry#1:
- goto inline$BDLGetDebugLevel$170$start#1;
-
- inline$BDLGetDebugLevel$170$start#1:
- goto inline$BDLGetDebugLevel$170$label_3#1;
-
- inline$BDLGetDebugLevel$170$label_3#1:
- havoc inline$BDLGetDebugLevel$170$myNondetVar_0;
- inline$BDLGetDebugLevel$170$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$170$myNondetVar_0;
- goto inline$BDLGetDebugLevel$170$label_1#1;
-
- inline$BDLGetDebugLevel$170$label_1#1:
- goto inline$BDLGetDebugLevel$170$Return#1;
-
- inline$BDLGetDebugLevel$170$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$170$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon48_Then#1, inline$BDLSystemPowerIoCompletion$6$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_93_true#1, inline$BDLSystemPowerIoCompletion$6$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_97#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_98#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_99#1:
- call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$6$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$6$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_94#1:
- goto inline$BDLGetDebugLevel$171$Entry#1;
-
- inline$BDLGetDebugLevel$171$Entry#1:
- goto inline$BDLGetDebugLevel$171$start#1;
-
- inline$BDLGetDebugLevel$171$start#1:
- goto inline$BDLGetDebugLevel$171$label_3#1;
-
- inline$BDLGetDebugLevel$171$label_3#1:
- havoc inline$BDLGetDebugLevel$171$myNondetVar_0;
- inline$BDLGetDebugLevel$171$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$171$myNondetVar_0;
- goto inline$BDLGetDebugLevel$171$label_1#1;
-
- inline$BDLGetDebugLevel$171$label_1#1:
- goto inline$BDLGetDebugLevel$171$Return#1;
-
- inline$BDLGetDebugLevel$171$Return#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$171$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$6$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$6$anon49_Then#1, inline$BDLSystemPowerIoCompletion$6$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_103_true#1, inline$BDLSystemPowerIoCompletion$6$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$6$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$6$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_104#1:
- inline$BDLSystemPowerIoCompletion$6$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$6$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$6$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$6$Return#1;
-
- inline$BDLSystemPowerIoCompletion$6$Return#1:
- inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$6$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$6$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$6$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$6$anon14_Then#1, inline$CallCompletionRoutine$6$anon14_Else#1;
-
- inline$CallCompletionRoutine$6$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$6$anon9#1;
-
- inline$CallCompletionRoutine$6$anon9#1:
- goto inline$CallCompletionRoutine$6$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$6$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$6$Return#1;
-
- inline$CallCompletionRoutine$6$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$6$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$6$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$6$Entry#1:
- inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$6$start#1;
-
- inline$BDLDevicePowerIoCompletion$6$start#1:
- call inline$BDLDevicePowerIoCompletion$6$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$6$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_4#1:
- inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_6#1:
- inline$BDLDevicePowerIoCompletion$6$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$6$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$6$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$6$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$37$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$37$Entry#1:
- inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$37$start#1;
-
- inline$IoGetCurrentIrpStackLocation$37$start#1:
- inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$37$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$37$label_3_true#1, inline$IoGetCurrentIrpStackLocation$37$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$37$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$37$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$37$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$37$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$37$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$37$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$37$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$37$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$37$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$37$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$37$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$37$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$37$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$37$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$37$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$37$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$37$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$37$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$37$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$37$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$37$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$37$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$37$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon30_Then#1, inline$BDLDevicePowerIoCompletion$6$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_13#1:
- inline$BDLDevicePowerIoCompletion$6$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$6$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$6$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_17#1:
- goto inline$BDLGetDebugLevel$154$Entry#1;
-
- inline$BDLGetDebugLevel$154$Entry#1:
- goto inline$BDLGetDebugLevel$154$start#1;
-
- inline$BDLGetDebugLevel$154$start#1:
- goto inline$BDLGetDebugLevel$154$label_3#1;
-
- inline$BDLGetDebugLevel$154$label_3#1:
- havoc inline$BDLGetDebugLevel$154$myNondetVar_0;
- inline$BDLGetDebugLevel$154$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$154$myNondetVar_0;
- goto inline$BDLGetDebugLevel$154$label_1#1;
-
- inline$BDLGetDebugLevel$154$label_1#1:
- goto inline$BDLGetDebugLevel$154$Return#1;
-
- inline$BDLGetDebugLevel$154$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$154$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon31_Then#1, inline$BDLDevicePowerIoCompletion$6$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_20_true#1, inline$BDLDevicePowerIoCompletion$6$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_24#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_25#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_26#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$6$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_21#1:
- goto inline$BDLGetDebugLevel$155$Entry#1;
-
- inline$BDLGetDebugLevel$155$Entry#1:
- goto inline$BDLGetDebugLevel$155$start#1;
-
- inline$BDLGetDebugLevel$155$start#1:
- goto inline$BDLGetDebugLevel$155$label_3#1;
-
- inline$BDLGetDebugLevel$155$label_3#1:
- havoc inline$BDLGetDebugLevel$155$myNondetVar_0;
- inline$BDLGetDebugLevel$155$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$155$myNondetVar_0;
- goto inline$BDLGetDebugLevel$155$label_1#1;
-
- inline$BDLGetDebugLevel$155$label_1#1:
- goto inline$BDLGetDebugLevel$155$Return#1;
-
- inline$BDLGetDebugLevel$155$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$155$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon32_Then#1, inline$BDLDevicePowerIoCompletion$6$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_30_true#1, inline$BDLDevicePowerIoCompletion$6$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_34#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_35#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_36#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$6$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_31#1:
- goto inline$BDLGetDebugLevel$156$Entry#1;
-
- inline$BDLGetDebugLevel$156$Entry#1:
- goto inline$BDLGetDebugLevel$156$start#1;
-
- inline$BDLGetDebugLevel$156$start#1:
- goto inline$BDLGetDebugLevel$156$label_3#1;
-
- inline$BDLGetDebugLevel$156$label_3#1:
- havoc inline$BDLGetDebugLevel$156$myNondetVar_0;
- inline$BDLGetDebugLevel$156$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$156$myNondetVar_0;
- goto inline$BDLGetDebugLevel$156$label_1#1;
-
- inline$BDLGetDebugLevel$156$label_1#1:
- goto inline$BDLGetDebugLevel$156$Return#1;
-
- inline$BDLGetDebugLevel$156$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$156$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon33_Then#1, inline$BDLDevicePowerIoCompletion$6$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_40_true#1, inline$BDLDevicePowerIoCompletion$6$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_41_true#1, inline$BDLDevicePowerIoCompletion$6$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$6$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$6$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_44_true#1, inline$BDLDevicePowerIoCompletion$6$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$6$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_45_true#1, inline$BDLDevicePowerIoCompletion$6$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$6$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$6$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$6$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$6$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$6$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$6$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_54#1:
- inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$6$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_55_true#1, inline$BDLDevicePowerIoCompletion$6$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_56#1:
- call inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$6$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$6$anon34_Then#1, inline$BDLDevicePowerIoCompletion$6$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_59#1:
- goto inline$BDLGetDebugLevel$157$Entry#1;
-
- inline$BDLGetDebugLevel$157$Entry#1:
- goto inline$BDLGetDebugLevel$157$start#1;
-
- inline$BDLGetDebugLevel$157$start#1:
- goto inline$BDLGetDebugLevel$157$label_3#1;
-
- inline$BDLGetDebugLevel$157$label_3#1:
- havoc inline$BDLGetDebugLevel$157$myNondetVar_0;
- inline$BDLGetDebugLevel$157$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$157$myNondetVar_0;
- goto inline$BDLGetDebugLevel$157$label_1#1;
-
- inline$BDLGetDebugLevel$157$label_1#1:
- goto inline$BDLGetDebugLevel$157$Return#1;
-
- inline$BDLGetDebugLevel$157$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$157$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon35_Then#1, inline$BDLDevicePowerIoCompletion$6$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_62_true#1, inline$BDLDevicePowerIoCompletion$6$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_66#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_67#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_68#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$6$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_63#1:
- goto inline$BDLGetDebugLevel$158$Entry#1;
-
- inline$BDLGetDebugLevel$158$Entry#1:
- goto inline$BDLGetDebugLevel$158$start#1;
-
- inline$BDLGetDebugLevel$158$start#1:
- goto inline$BDLGetDebugLevel$158$label_3#1;
-
- inline$BDLGetDebugLevel$158$label_3#1:
- havoc inline$BDLGetDebugLevel$158$myNondetVar_0;
- inline$BDLGetDebugLevel$158$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$158$myNondetVar_0;
- goto inline$BDLGetDebugLevel$158$label_1#1;
-
- inline$BDLGetDebugLevel$158$label_1#1:
- goto inline$BDLGetDebugLevel$158$Return#1;
-
- inline$BDLGetDebugLevel$158$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$158$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon36_Then#1, inline$BDLDevicePowerIoCompletion$6$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_72_true#1, inline$BDLDevicePowerIoCompletion$6$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_76#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_77#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_78#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$6$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_73#1:
- goto inline$BDLGetDebugLevel$159$Entry#1;
-
- inline$BDLGetDebugLevel$159$Entry#1:
- goto inline$BDLGetDebugLevel$159$start#1;
-
- inline$BDLGetDebugLevel$159$start#1:
- goto inline$BDLGetDebugLevel$159$label_3#1;
-
- inline$BDLGetDebugLevel$159$label_3#1:
- havoc inline$BDLGetDebugLevel$159$myNondetVar_0;
- inline$BDLGetDebugLevel$159$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$159$myNondetVar_0;
- goto inline$BDLGetDebugLevel$159$label_1#1;
-
- inline$BDLGetDebugLevel$159$label_1#1:
- goto inline$BDLGetDebugLevel$159$Return#1;
-
- inline$BDLGetDebugLevel$159$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$159$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon37_Then#1, inline$BDLDevicePowerIoCompletion$6$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_82_true#1, inline$BDLDevicePowerIoCompletion$6$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$6$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$6$anon38_Then#1, inline$BDLDevicePowerIoCompletion$6$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$6$anon39_Then#1, inline$BDLDevicePowerIoCompletion$6$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_92#1:
- goto inline$storm_IoCompleteRequest$13$Entry#1;
-
- inline$storm_IoCompleteRequest$13$Entry#1:
- inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$13$start#1;
-
- inline$storm_IoCompleteRequest$13$start#1:
- inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$13$label_3#1;
-
- inline$storm_IoCompleteRequest$13$label_3#1:
- call inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$13$label_6#1;
-
- inline$storm_IoCompleteRequest$13$label_6#1:
- goto inline$storm_IoCompleteRequest$13$label_6_true#1, inline$storm_IoCompleteRequest$13$label_6_false#1;
-
- inline$storm_IoCompleteRequest$13$label_6_false#1:
- assume inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$13$label_7#1;
-
- inline$storm_IoCompleteRequest$13$label_6_true#1:
- assume inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$13$label_8#1;
-
- inline$storm_IoCompleteRequest$13$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$13$anon3_Then#1, inline$storm_IoCompleteRequest$13$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$13$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$13$anon1#1;
-
- inline$storm_IoCompleteRequest$13$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$13$label_9#1;
-
- inline$storm_IoCompleteRequest$13$label_9#1:
- goto inline$storm_IoCompleteRequest$13$label_9_true#1, inline$storm_IoCompleteRequest$13$label_9_false#1;
-
- inline$storm_IoCompleteRequest$13$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$13$label_10#1;
-
- inline$storm_IoCompleteRequest$13$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$13$label_1#1;
-
- inline$storm_IoCompleteRequest$13$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$13$label_7#1;
-
- inline$storm_IoCompleteRequest$13$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$13$label_1#1;
-
- inline$storm_IoCompleteRequest$13$label_1#1:
- goto inline$storm_IoCompleteRequest$13$Return#1;
-
- inline$storm_IoCompleteRequest$13$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$13$Return#1;
-
- inline$storm_IoCompleteRequest$13$Return#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon40_Then#1, inline$BDLDevicePowerIoCompletion$6$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$6$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$6$anon41_Then#1, inline$BDLDevicePowerIoCompletion$6$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_98#1:
- goto inline$BDLGetDebugLevel$160$Entry#1;
-
- inline$BDLGetDebugLevel$160$Entry#1:
- goto inline$BDLGetDebugLevel$160$start#1;
-
- inline$BDLGetDebugLevel$160$start#1:
- goto inline$BDLGetDebugLevel$160$label_3#1;
-
- inline$BDLGetDebugLevel$160$label_3#1:
- havoc inline$BDLGetDebugLevel$160$myNondetVar_0;
- inline$BDLGetDebugLevel$160$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$160$myNondetVar_0;
- goto inline$BDLGetDebugLevel$160$label_1#1;
-
- inline$BDLGetDebugLevel$160$label_1#1:
- goto inline$BDLGetDebugLevel$160$Return#1;
-
- inline$BDLGetDebugLevel$160$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$160$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon42_Then#1, inline$BDLDevicePowerIoCompletion$6$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_101_true#1, inline$BDLDevicePowerIoCompletion$6$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_105#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_106#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_107#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$6$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_102#1:
- goto inline$BDLGetDebugLevel$161$Entry#1;
-
- inline$BDLGetDebugLevel$161$Entry#1:
- goto inline$BDLGetDebugLevel$161$start#1;
-
- inline$BDLGetDebugLevel$161$start#1:
- goto inline$BDLGetDebugLevel$161$label_3#1;
-
- inline$BDLGetDebugLevel$161$label_3#1:
- havoc inline$BDLGetDebugLevel$161$myNondetVar_0;
- inline$BDLGetDebugLevel$161$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$161$myNondetVar_0;
- goto inline$BDLGetDebugLevel$161$label_1#1;
-
- inline$BDLGetDebugLevel$161$label_1#1:
- goto inline$BDLGetDebugLevel$161$Return#1;
-
- inline$BDLGetDebugLevel$161$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$161$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon43_Then#1, inline$BDLDevicePowerIoCompletion$6$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_111_true#1, inline$BDLDevicePowerIoCompletion$6$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_115#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_116#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_117#1:
- call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$6$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$6$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_112#1:
- goto inline$BDLGetDebugLevel$162$Entry#1;
-
- inline$BDLGetDebugLevel$162$Entry#1:
- goto inline$BDLGetDebugLevel$162$start#1;
-
- inline$BDLGetDebugLevel$162$start#1:
- goto inline$BDLGetDebugLevel$162$label_3#1;
-
- inline$BDLGetDebugLevel$162$label_3#1:
- havoc inline$BDLGetDebugLevel$162$myNondetVar_0;
- inline$BDLGetDebugLevel$162$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$162$myNondetVar_0;
- goto inline$BDLGetDebugLevel$162$label_1#1;
-
- inline$BDLGetDebugLevel$162$label_1#1:
- goto inline$BDLGetDebugLevel$162$Return#1;
-
- inline$BDLGetDebugLevel$162$Return#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$162$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$6$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$6$anon44_Then#1, inline$BDLDevicePowerIoCompletion$6$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_121_true#1, inline$BDLDevicePowerIoCompletion$6$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$6$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$6$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_122#1:
- inline$BDLDevicePowerIoCompletion$6$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$6$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$6$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$6$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$6$Return#1;
-
- inline$BDLDevicePowerIoCompletion$6$Return#1:
- inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$6$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$6$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$6$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$6$anon13_Then#1, inline$CallCompletionRoutine$6$anon13_Else#1;
-
- inline$CallCompletionRoutine$6$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$6$anon7#1;
-
- inline$CallCompletionRoutine$6$anon7#1:
- goto inline$CallCompletionRoutine$6$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$6$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$6$Return#1;
-
- inline$CallCompletionRoutine$6$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$6$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$6$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$6$Entry#1:
- inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$6$start#1;
-
- inline$BDLCallDriverCompletionRoutine$6$start#1:
- inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$6$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$6$label_3_true#1, inline$BDLCallDriverCompletionRoutine$6$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$6$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$6$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$6$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$6$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_6#1:
- goto inline$storm_KeSetEvent$7$Entry#1;
-
- inline$storm_KeSetEvent$7$Entry#1:
- inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$7$start#1;
-
- inline$storm_KeSetEvent$7$start#1:
- inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$7$label_3#1;
-
- inline$storm_KeSetEvent$7$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$7$label_1#1;
-
- inline$storm_KeSetEvent$7$label_1#1:
- goto inline$storm_KeSetEvent$7$Return#1;
-
- inline$storm_KeSetEvent$7$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$6$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$6$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$6$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$6$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$6$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$6$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$6$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_9#1:
- inline$BDLCallDriverCompletionRoutine$6$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$6$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$6$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$6$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$6$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$6$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$6$Return#1:
- inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$6$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$6$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$6$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$6$anon12_Then#1, inline$CallCompletionRoutine$6$anon12_Else#1;
-
- inline$CallCompletionRoutine$6$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$6$anon5#1;
-
- inline$CallCompletionRoutine$6$anon5#1:
- goto inline$CallCompletionRoutine$6$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$6$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$6$label_23#1;
-
- inline$CallCompletionRoutine$6$label_23#1:
- inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$6$label_24#1;
-
- inline$CallCompletionRoutine$6$label_24#1:
- goto inline$CallCompletionRoutine$6$label_24_true#1, inline$CallCompletionRoutine$6$label_24_false#1;
-
- inline$CallCompletionRoutine$6$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$6$label_1#1;
-
- inline$CallCompletionRoutine$6$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$6$label_25#1;
-
- inline$CallCompletionRoutine$6$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$6$label_1#1;
-
- inline$CallCompletionRoutine$6$label_1#1:
- goto inline$CallCompletionRoutine$6$Return#1;
-
- inline$CallCompletionRoutine$6$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$6$Return#1;
-
- inline$CallCompletionRoutine$6$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$6$Return#1;
-
- inline$CallCompletionRoutine$6$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$6$Return#1;
-
- inline$CallCompletionRoutine$6$Return#1:
- goto inline$storm_IoCallDriver$3$label_33$1#1;
-
- inline$storm_IoCallDriver$3$label_33$1#1:
- goto inline$storm_IoCallDriver$3$anon14_Then#1, inline$storm_IoCallDriver$3$anon14_Else#1;
-
- inline$storm_IoCallDriver$3$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$3$anon8#1;
-
- inline$storm_IoCallDriver$3$anon8#1:
- goto inline$storm_IoCallDriver$3$label_36#1;
-
- inline$storm_IoCallDriver$3$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$3$Return#1;
-
- inline$storm_IoCallDriver$3$label_27_case_1#1:
- assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$3$label_29#1;
-
- inline$storm_IoCallDriver$3$label_29#1:
- inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$3$label_37#1;
-
- inline$storm_IoCallDriver$3$label_37#1:
- goto inline$storm_IoCallDriver$3$label_38#1;
-
- inline$storm_IoCallDriver$3$label_38#1:
- goto inline$storm_IoCallDriver$3$label_39#1;
-
- inline$storm_IoCallDriver$3$label_39#1:
- goto inline$CallCompletionRoutine$7$Entry#1;
-
- inline$CallCompletionRoutine$7$Entry#1:
- inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$7$start#1;
-
- inline$CallCompletionRoutine$7$start#1:
- inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$7$label_3#1;
-
- inline$CallCompletionRoutine$7$label_3#1:
- goto inline$CallCompletionRoutine$7$label_4#1;
-
- inline$CallCompletionRoutine$7$label_4#1:
- goto inline$CallCompletionRoutine$7$label_5#1;
-
- inline$CallCompletionRoutine$7$label_5#1:
- goto inline$CallCompletionRoutine$7$label_6#1;
-
- inline$CallCompletionRoutine$7$label_6#1:
- goto inline$CallCompletionRoutine$7$label_7#1;
-
- inline$CallCompletionRoutine$7$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$39$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$39$Entry#1:
- inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$39$start#1;
-
- inline$IoGetCurrentIrpStackLocation$39$start#1:
- inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$39$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$39$label_3_true#1, inline$IoGetCurrentIrpStackLocation$39$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$39$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$39$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$39$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$39$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$39$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$39$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$39$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$39$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$39$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$39$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$39$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$39$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$39$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$39$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$39$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$39$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$39$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$39$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$39$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$39$Return#1:
- goto inline$CallCompletionRoutine$7$label_7$1#1;
-
- inline$CallCompletionRoutine$7$label_7$1#1:
- goto inline$CallCompletionRoutine$7$anon10_Then#1, inline$CallCompletionRoutine$7$anon10_Else#1;
-
- inline$CallCompletionRoutine$7$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$7$anon1#1;
-
- inline$CallCompletionRoutine$7$anon1#1:
- goto inline$CallCompletionRoutine$7$label_10#1;
-
- inline$CallCompletionRoutine$7$label_10#1:
- goto inline$CallCompletionRoutine$7$label_11#1;
-
- inline$CallCompletionRoutine$7$label_11#1:
- havoc inline$CallCompletionRoutine$7$myNondetVar_0;
- inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$myNondetVar_0;
- goto inline$CallCompletionRoutine$7$label_12#1;
-
- inline$CallCompletionRoutine$7$label_12#1:
- havoc inline$CallCompletionRoutine$7$myNondetVar_0;
- inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$myNondetVar_0;
- goto inline$CallCompletionRoutine$7$label_13#1;
-
- inline$CallCompletionRoutine$7$label_13#1:
- havoc inline$CallCompletionRoutine$7$myNondetVar_0;
- goto inline$CallCompletionRoutine$7$label_14#1;
-
- inline$CallCompletionRoutine$7$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$40$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$40$Entry#1:
- inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$40$start#1;
-
- inline$IoGetCurrentIrpStackLocation$40$start#1:
- inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$40$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$40$label_3_true#1, inline$IoGetCurrentIrpStackLocation$40$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$40$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$40$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$40$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$40$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$40$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$40$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$40$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$40$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$40$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$40$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$40$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$40$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$40$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$40$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$40$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$40$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$40$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$40$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$40$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$40$Return#1:
- goto inline$CallCompletionRoutine$7$label_14$1#1;
-
- inline$CallCompletionRoutine$7$label_14$1#1:
- goto inline$CallCompletionRoutine$7$anon11_Then#1, inline$CallCompletionRoutine$7$anon11_Else#1;
-
- inline$CallCompletionRoutine$7$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$7$anon3#1;
-
- inline$CallCompletionRoutine$7$anon3#1:
- goto inline$CallCompletionRoutine$7$label_17#1;
-
- inline$CallCompletionRoutine$7$label_17#1:
- goto inline$CallCompletionRoutine$7$label_18#1;
-
- inline$CallCompletionRoutine$7$label_18#1:
- goto inline$CallCompletionRoutine$7$label_18_true#1, inline$CallCompletionRoutine$7$label_18_false#1;
-
- inline$CallCompletionRoutine$7$label_18_false#1:
- assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$7$label_1#1;
-
- inline$CallCompletionRoutine$7$label_18_true#1:
- assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$7$label_19#1;
-
- inline$CallCompletionRoutine$7$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$7$label_20#1;
-
- inline$CallCompletionRoutine$7$label_20#1:
- goto inline$CallCompletionRoutine$7$label_20_icall_1#1, inline$CallCompletionRoutine$7$label_20_icall_2#1, inline$CallCompletionRoutine$7$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$7$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$7$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$7$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$7$Entry#1:
- inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$7$start#1;
-
- inline$BDLSystemPowerIoCompletion$7$start#1:
- call inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$7$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_4#1:
- inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_6#1:
- inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$7$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$7$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$7$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$42$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$42$Entry#1:
- inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$42$start#1;
-
- inline$IoGetCurrentIrpStackLocation$42$start#1:
- inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$42$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$42$label_3_true#1, inline$IoGetCurrentIrpStackLocation$42$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$42$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$42$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$42$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$42$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$42$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$42$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$42$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$42$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$42$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$42$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$42$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$42$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$42$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$42$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$42$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$42$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$42$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$42$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$42$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$42$Return#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon36_Then#1, inline$BDLSystemPowerIoCompletion$7$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_15#1:
- goto inline$BDLGetDebugLevel$184$Entry#1;
-
- inline$BDLGetDebugLevel$184$Entry#1:
- goto inline$BDLGetDebugLevel$184$start#1;
-
- inline$BDLGetDebugLevel$184$start#1:
- goto inline$BDLGetDebugLevel$184$label_3#1;
-
- inline$BDLGetDebugLevel$184$label_3#1:
- havoc inline$BDLGetDebugLevel$184$myNondetVar_0;
- inline$BDLGetDebugLevel$184$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$184$myNondetVar_0;
- goto inline$BDLGetDebugLevel$184$label_1#1;
-
- inline$BDLGetDebugLevel$184$label_1#1:
- goto inline$BDLGetDebugLevel$184$Return#1;
-
- inline$BDLGetDebugLevel$184$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$184$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon37_Then#1, inline$BDLSystemPowerIoCompletion$7$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_18_true#1, inline$BDLSystemPowerIoCompletion$7$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_22#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_23#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_24#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$7$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_19#1:
- goto inline$BDLGetDebugLevel$185$Entry#1;
-
- inline$BDLGetDebugLevel$185$Entry#1:
- goto inline$BDLGetDebugLevel$185$start#1;
-
- inline$BDLGetDebugLevel$185$start#1:
- goto inline$BDLGetDebugLevel$185$label_3#1;
-
- inline$BDLGetDebugLevel$185$label_3#1:
- havoc inline$BDLGetDebugLevel$185$myNondetVar_0;
- inline$BDLGetDebugLevel$185$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$185$myNondetVar_0;
- goto inline$BDLGetDebugLevel$185$label_1#1;
-
- inline$BDLGetDebugLevel$185$label_1#1:
- goto inline$BDLGetDebugLevel$185$Return#1;
-
- inline$BDLGetDebugLevel$185$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$185$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon38_Then#1, inline$BDLSystemPowerIoCompletion$7$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_28_true#1, inline$BDLSystemPowerIoCompletion$7$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_32#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_33#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_34#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$7$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_29#1:
- goto inline$BDLGetDebugLevel$186$Entry#1;
-
- inline$BDLGetDebugLevel$186$Entry#1:
- goto inline$BDLGetDebugLevel$186$start#1;
-
- inline$BDLGetDebugLevel$186$start#1:
- goto inline$BDLGetDebugLevel$186$label_3#1;
-
- inline$BDLGetDebugLevel$186$label_3#1:
- havoc inline$BDLGetDebugLevel$186$myNondetVar_0;
- inline$BDLGetDebugLevel$186$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$186$myNondetVar_0;
- goto inline$BDLGetDebugLevel$186$label_1#1;
-
- inline$BDLGetDebugLevel$186$label_1#1:
- goto inline$BDLGetDebugLevel$186$Return#1;
-
- inline$BDLGetDebugLevel$186$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$186$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon39_Then#1, inline$BDLSystemPowerIoCompletion$7$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_38_true#1, inline$BDLSystemPowerIoCompletion$7$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_39_true#1, inline$BDLSystemPowerIoCompletion$7$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$7$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$7$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$7$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_106_true#1, inline$BDLSystemPowerIoCompletion$7$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_142#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_143#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$7$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$7$myNondetVar_0, inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$7$anon50_Then#1, inline$BDLSystemPowerIoCompletion$7$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_112#1:
- inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$7$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_113_true#1, inline$BDLSystemPowerIoCompletion$7$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$7$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_117#1:
- goto inline$BDLGetDebugLevel$193$Entry#1;
-
- inline$BDLGetDebugLevel$193$Entry#1:
- goto inline$BDLGetDebugLevel$193$start#1;
-
- inline$BDLGetDebugLevel$193$start#1:
- goto inline$BDLGetDebugLevel$193$label_3#1;
-
- inline$BDLGetDebugLevel$193$label_3#1:
- havoc inline$BDLGetDebugLevel$193$myNondetVar_0;
- inline$BDLGetDebugLevel$193$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$193$myNondetVar_0;
- goto inline$BDLGetDebugLevel$193$label_1#1;
-
- inline$BDLGetDebugLevel$193$label_1#1:
- goto inline$BDLGetDebugLevel$193$Return#1;
-
- inline$BDLGetDebugLevel$193$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$193$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon51_Then#1, inline$BDLSystemPowerIoCompletion$7$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_120_true#1, inline$BDLSystemPowerIoCompletion$7$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_124#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_125#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_126#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$7$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_121#1:
- goto inline$BDLGetDebugLevel$194$Entry#1;
-
- inline$BDLGetDebugLevel$194$Entry#1:
- goto inline$BDLGetDebugLevel$194$start#1;
-
- inline$BDLGetDebugLevel$194$start#1:
- goto inline$BDLGetDebugLevel$194$label_3#1;
-
- inline$BDLGetDebugLevel$194$label_3#1:
- havoc inline$BDLGetDebugLevel$194$myNondetVar_0;
- inline$BDLGetDebugLevel$194$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$194$myNondetVar_0;
- goto inline$BDLGetDebugLevel$194$label_1#1;
-
- inline$BDLGetDebugLevel$194$label_1#1:
- goto inline$BDLGetDebugLevel$194$Return#1;
-
- inline$BDLGetDebugLevel$194$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$194$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon52_Then#1, inline$BDLSystemPowerIoCompletion$7$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_130_true#1, inline$BDLSystemPowerIoCompletion$7$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_134#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_135#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_136#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$7$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_131#1:
- goto inline$BDLGetDebugLevel$195$Entry#1;
-
- inline$BDLGetDebugLevel$195$Entry#1:
- goto inline$BDLGetDebugLevel$195$start#1;
-
- inline$BDLGetDebugLevel$195$start#1:
- goto inline$BDLGetDebugLevel$195$label_3#1;
-
- inline$BDLGetDebugLevel$195$label_3#1:
- havoc inline$BDLGetDebugLevel$195$myNondetVar_0;
- inline$BDLGetDebugLevel$195$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$195$myNondetVar_0;
- goto inline$BDLGetDebugLevel$195$label_1#1;
-
- inline$BDLGetDebugLevel$195$label_1#1:
- goto inline$BDLGetDebugLevel$195$Return#1;
-
- inline$BDLGetDebugLevel$195$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$195$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon53_Then#1, inline$BDLSystemPowerIoCompletion$7$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_140_true#1, inline$BDLSystemPowerIoCompletion$7$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$7$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_115#1:
- inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$7$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$7$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_43#1:
- goto inline$BDLGetDebugLevel$187$Entry#1;
-
- inline$BDLGetDebugLevel$187$Entry#1:
- goto inline$BDLGetDebugLevel$187$start#1;
-
- inline$BDLGetDebugLevel$187$start#1:
- goto inline$BDLGetDebugLevel$187$label_3#1;
-
- inline$BDLGetDebugLevel$187$label_3#1:
- havoc inline$BDLGetDebugLevel$187$myNondetVar_0;
- inline$BDLGetDebugLevel$187$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$187$myNondetVar_0;
- goto inline$BDLGetDebugLevel$187$label_1#1;
-
- inline$BDLGetDebugLevel$187$label_1#1:
- goto inline$BDLGetDebugLevel$187$Return#1;
-
- inline$BDLGetDebugLevel$187$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$187$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon40_Then#1, inline$BDLSystemPowerIoCompletion$7$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_46_true#1, inline$BDLSystemPowerIoCompletion$7$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_50#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_51#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_52#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$7$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_47#1:
- goto inline$BDLGetDebugLevel$188$Entry#1;
-
- inline$BDLGetDebugLevel$188$Entry#1:
- goto inline$BDLGetDebugLevel$188$start#1;
-
- inline$BDLGetDebugLevel$188$start#1:
- goto inline$BDLGetDebugLevel$188$label_3#1;
-
- inline$BDLGetDebugLevel$188$label_3#1:
- havoc inline$BDLGetDebugLevel$188$myNondetVar_0;
- inline$BDLGetDebugLevel$188$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$188$myNondetVar_0;
- goto inline$BDLGetDebugLevel$188$label_1#1;
-
- inline$BDLGetDebugLevel$188$label_1#1:
- goto inline$BDLGetDebugLevel$188$Return#1;
-
- inline$BDLGetDebugLevel$188$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$188$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon41_Then#1, inline$BDLSystemPowerIoCompletion$7$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_56_true#1, inline$BDLSystemPowerIoCompletion$7$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_60#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_61#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_62#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$7$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_57#1:
- goto inline$BDLGetDebugLevel$189$Entry#1;
-
- inline$BDLGetDebugLevel$189$Entry#1:
- goto inline$BDLGetDebugLevel$189$start#1;
-
- inline$BDLGetDebugLevel$189$start#1:
- goto inline$BDLGetDebugLevel$189$label_3#1;
-
- inline$BDLGetDebugLevel$189$label_3#1:
- havoc inline$BDLGetDebugLevel$189$myNondetVar_0;
- inline$BDLGetDebugLevel$189$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$189$myNondetVar_0;
- goto inline$BDLGetDebugLevel$189$label_1#1;
-
- inline$BDLGetDebugLevel$189$label_1#1:
- goto inline$BDLGetDebugLevel$189$Return#1;
-
- inline$BDLGetDebugLevel$189$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$189$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon42_Then#1, inline$BDLSystemPowerIoCompletion$7$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_66_true#1, inline$BDLSystemPowerIoCompletion$7$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$7$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$7$anon43_Then#1, inline$BDLSystemPowerIoCompletion$7$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$7$anon44_Then#1, inline$BDLSystemPowerIoCompletion$7$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_74#1:
- goto inline$storm_IoCompleteRequest$16$Entry#1;
-
- inline$storm_IoCompleteRequest$16$Entry#1:
- inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$16$start#1;
-
- inline$storm_IoCompleteRequest$16$start#1:
- inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$16$label_3#1;
-
- inline$storm_IoCompleteRequest$16$label_3#1:
- call inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$16$label_6#1;
-
- inline$storm_IoCompleteRequest$16$label_6#1:
- goto inline$storm_IoCompleteRequest$16$label_6_true#1, inline$storm_IoCompleteRequest$16$label_6_false#1;
-
- inline$storm_IoCompleteRequest$16$label_6_false#1:
- assume inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$16$label_7#1;
-
- inline$storm_IoCompleteRequest$16$label_6_true#1:
- assume inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$16$label_8#1;
-
- inline$storm_IoCompleteRequest$16$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$16$anon3_Then#1, inline$storm_IoCompleteRequest$16$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$16$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$16$anon1#1;
-
- inline$storm_IoCompleteRequest$16$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$16$label_9#1;
-
- inline$storm_IoCompleteRequest$16$label_9#1:
- goto inline$storm_IoCompleteRequest$16$label_9_true#1, inline$storm_IoCompleteRequest$16$label_9_false#1;
-
- inline$storm_IoCompleteRequest$16$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$16$label_10#1;
-
- inline$storm_IoCompleteRequest$16$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$16$label_1#1;
-
- inline$storm_IoCompleteRequest$16$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$16$label_7#1;
-
- inline$storm_IoCompleteRequest$16$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$16$label_1#1;
-
- inline$storm_IoCompleteRequest$16$label_1#1:
- goto inline$storm_IoCompleteRequest$16$Return#1;
-
- inline$storm_IoCompleteRequest$16$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$16$Return#1;
-
- inline$storm_IoCompleteRequest$16$Return#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon45_Then#1, inline$BDLSystemPowerIoCompletion$7$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$7$anon46_Then#1, inline$BDLSystemPowerIoCompletion$7$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_80#1:
- goto inline$BDLGetDebugLevel$190$Entry#1;
-
- inline$BDLGetDebugLevel$190$Entry#1:
- goto inline$BDLGetDebugLevel$190$start#1;
-
- inline$BDLGetDebugLevel$190$start#1:
- goto inline$BDLGetDebugLevel$190$label_3#1;
-
- inline$BDLGetDebugLevel$190$label_3#1:
- havoc inline$BDLGetDebugLevel$190$myNondetVar_0;
- inline$BDLGetDebugLevel$190$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$190$myNondetVar_0;
- goto inline$BDLGetDebugLevel$190$label_1#1;
-
- inline$BDLGetDebugLevel$190$label_1#1:
- goto inline$BDLGetDebugLevel$190$Return#1;
-
- inline$BDLGetDebugLevel$190$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$190$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon47_Then#1, inline$BDLSystemPowerIoCompletion$7$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_83_true#1, inline$BDLSystemPowerIoCompletion$7$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_87#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_88#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_89#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$7$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_84#1:
- goto inline$BDLGetDebugLevel$191$Entry#1;
-
- inline$BDLGetDebugLevel$191$Entry#1:
- goto inline$BDLGetDebugLevel$191$start#1;
-
- inline$BDLGetDebugLevel$191$start#1:
- goto inline$BDLGetDebugLevel$191$label_3#1;
-
- inline$BDLGetDebugLevel$191$label_3#1:
- havoc inline$BDLGetDebugLevel$191$myNondetVar_0;
- inline$BDLGetDebugLevel$191$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$191$myNondetVar_0;
- goto inline$BDLGetDebugLevel$191$label_1#1;
-
- inline$BDLGetDebugLevel$191$label_1#1:
- goto inline$BDLGetDebugLevel$191$Return#1;
-
- inline$BDLGetDebugLevel$191$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$191$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon48_Then#1, inline$BDLSystemPowerIoCompletion$7$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_93_true#1, inline$BDLSystemPowerIoCompletion$7$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_97#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_98#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_99#1:
- call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$7$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$7$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_94#1:
- goto inline$BDLGetDebugLevel$192$Entry#1;
-
- inline$BDLGetDebugLevel$192$Entry#1:
- goto inline$BDLGetDebugLevel$192$start#1;
-
- inline$BDLGetDebugLevel$192$start#1:
- goto inline$BDLGetDebugLevel$192$label_3#1;
-
- inline$BDLGetDebugLevel$192$label_3#1:
- havoc inline$BDLGetDebugLevel$192$myNondetVar_0;
- inline$BDLGetDebugLevel$192$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$192$myNondetVar_0;
- goto inline$BDLGetDebugLevel$192$label_1#1;
-
- inline$BDLGetDebugLevel$192$label_1#1:
- goto inline$BDLGetDebugLevel$192$Return#1;
-
- inline$BDLGetDebugLevel$192$Return#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$192$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$7$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$7$anon49_Then#1, inline$BDLSystemPowerIoCompletion$7$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_103_true#1, inline$BDLSystemPowerIoCompletion$7$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$7$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$7$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_104#1:
- inline$BDLSystemPowerIoCompletion$7$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$7$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$7$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$7$Return#1;
-
- inline$BDLSystemPowerIoCompletion$7$Return#1:
- inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$7$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$7$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$7$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$7$anon14_Then#1, inline$CallCompletionRoutine$7$anon14_Else#1;
-
- inline$CallCompletionRoutine$7$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$7$anon9#1;
-
- inline$CallCompletionRoutine$7$anon9#1:
- goto inline$CallCompletionRoutine$7$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$7$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$7$Return#1;
-
- inline$CallCompletionRoutine$7$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$7$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$7$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$7$Entry#1:
- inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$7$start#1;
-
- inline$BDLDevicePowerIoCompletion$7$start#1:
- call inline$BDLDevicePowerIoCompletion$7$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$7$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_4#1:
- inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_6#1:
- inline$BDLDevicePowerIoCompletion$7$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$7$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$7$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$7$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$41$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$41$Entry#1:
- inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$41$start#1;
-
- inline$IoGetCurrentIrpStackLocation$41$start#1:
- inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$41$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$41$label_3_true#1, inline$IoGetCurrentIrpStackLocation$41$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$41$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$41$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$41$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$41$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$41$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$41$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$41$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$41$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$41$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$41$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$41$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$41$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$41$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$41$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$41$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$41$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$41$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$41$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$41$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$41$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$41$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$41$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$41$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon30_Then#1, inline$BDLDevicePowerIoCompletion$7$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_13#1:
- inline$BDLDevicePowerIoCompletion$7$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$7$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$7$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_17#1:
- goto inline$BDLGetDebugLevel$175$Entry#1;
-
- inline$BDLGetDebugLevel$175$Entry#1:
- goto inline$BDLGetDebugLevel$175$start#1;
-
- inline$BDLGetDebugLevel$175$start#1:
- goto inline$BDLGetDebugLevel$175$label_3#1;
-
- inline$BDLGetDebugLevel$175$label_3#1:
- havoc inline$BDLGetDebugLevel$175$myNondetVar_0;
- inline$BDLGetDebugLevel$175$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$175$myNondetVar_0;
- goto inline$BDLGetDebugLevel$175$label_1#1;
-
- inline$BDLGetDebugLevel$175$label_1#1:
- goto inline$BDLGetDebugLevel$175$Return#1;
-
- inline$BDLGetDebugLevel$175$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$175$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon31_Then#1, inline$BDLDevicePowerIoCompletion$7$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_20_true#1, inline$BDLDevicePowerIoCompletion$7$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_24#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_25#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_26#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$7$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_21#1:
- goto inline$BDLGetDebugLevel$176$Entry#1;
-
- inline$BDLGetDebugLevel$176$Entry#1:
- goto inline$BDLGetDebugLevel$176$start#1;
-
- inline$BDLGetDebugLevel$176$start#1:
- goto inline$BDLGetDebugLevel$176$label_3#1;
-
- inline$BDLGetDebugLevel$176$label_3#1:
- havoc inline$BDLGetDebugLevel$176$myNondetVar_0;
- inline$BDLGetDebugLevel$176$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$176$myNondetVar_0;
- goto inline$BDLGetDebugLevel$176$label_1#1;
-
- inline$BDLGetDebugLevel$176$label_1#1:
- goto inline$BDLGetDebugLevel$176$Return#1;
-
- inline$BDLGetDebugLevel$176$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$176$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon32_Then#1, inline$BDLDevicePowerIoCompletion$7$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_30_true#1, inline$BDLDevicePowerIoCompletion$7$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_34#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_35#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_36#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$7$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_31#1:
- goto inline$BDLGetDebugLevel$177$Entry#1;
-
- inline$BDLGetDebugLevel$177$Entry#1:
- goto inline$BDLGetDebugLevel$177$start#1;
-
- inline$BDLGetDebugLevel$177$start#1:
- goto inline$BDLGetDebugLevel$177$label_3#1;
-
- inline$BDLGetDebugLevel$177$label_3#1:
- havoc inline$BDLGetDebugLevel$177$myNondetVar_0;
- inline$BDLGetDebugLevel$177$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$177$myNondetVar_0;
- goto inline$BDLGetDebugLevel$177$label_1#1;
-
- inline$BDLGetDebugLevel$177$label_1#1:
- goto inline$BDLGetDebugLevel$177$Return#1;
-
- inline$BDLGetDebugLevel$177$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$177$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon33_Then#1, inline$BDLDevicePowerIoCompletion$7$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_40_true#1, inline$BDLDevicePowerIoCompletion$7$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_41_true#1, inline$BDLDevicePowerIoCompletion$7$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$7$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$7$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_44_true#1, inline$BDLDevicePowerIoCompletion$7$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$7$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_45_true#1, inline$BDLDevicePowerIoCompletion$7$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$7$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$7$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$7$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$7$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$7$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$7$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_54#1:
- inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$7$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_55_true#1, inline$BDLDevicePowerIoCompletion$7$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_56#1:
- call inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$7$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$7$anon34_Then#1, inline$BDLDevicePowerIoCompletion$7$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_59#1:
- goto inline$BDLGetDebugLevel$178$Entry#1;
-
- inline$BDLGetDebugLevel$178$Entry#1:
- goto inline$BDLGetDebugLevel$178$start#1;
-
- inline$BDLGetDebugLevel$178$start#1:
- goto inline$BDLGetDebugLevel$178$label_3#1;
-
- inline$BDLGetDebugLevel$178$label_3#1:
- havoc inline$BDLGetDebugLevel$178$myNondetVar_0;
- inline$BDLGetDebugLevel$178$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$178$myNondetVar_0;
- goto inline$BDLGetDebugLevel$178$label_1#1;
-
- inline$BDLGetDebugLevel$178$label_1#1:
- goto inline$BDLGetDebugLevel$178$Return#1;
-
- inline$BDLGetDebugLevel$178$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$178$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon35_Then#1, inline$BDLDevicePowerIoCompletion$7$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_62_true#1, inline$BDLDevicePowerIoCompletion$7$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_66#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_67#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_68#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$7$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_63#1:
- goto inline$BDLGetDebugLevel$179$Entry#1;
-
- inline$BDLGetDebugLevel$179$Entry#1:
- goto inline$BDLGetDebugLevel$179$start#1;
-
- inline$BDLGetDebugLevel$179$start#1:
- goto inline$BDLGetDebugLevel$179$label_3#1;
-
- inline$BDLGetDebugLevel$179$label_3#1:
- havoc inline$BDLGetDebugLevel$179$myNondetVar_0;
- inline$BDLGetDebugLevel$179$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$179$myNondetVar_0;
- goto inline$BDLGetDebugLevel$179$label_1#1;
-
- inline$BDLGetDebugLevel$179$label_1#1:
- goto inline$BDLGetDebugLevel$179$Return#1;
-
- inline$BDLGetDebugLevel$179$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$179$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon36_Then#1, inline$BDLDevicePowerIoCompletion$7$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_72_true#1, inline$BDLDevicePowerIoCompletion$7$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_76#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_77#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_78#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$7$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_73#1:
- goto inline$BDLGetDebugLevel$180$Entry#1;
-
- inline$BDLGetDebugLevel$180$Entry#1:
- goto inline$BDLGetDebugLevel$180$start#1;
-
- inline$BDLGetDebugLevel$180$start#1:
- goto inline$BDLGetDebugLevel$180$label_3#1;
-
- inline$BDLGetDebugLevel$180$label_3#1:
- havoc inline$BDLGetDebugLevel$180$myNondetVar_0;
- inline$BDLGetDebugLevel$180$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$180$myNondetVar_0;
- goto inline$BDLGetDebugLevel$180$label_1#1;
-
- inline$BDLGetDebugLevel$180$label_1#1:
- goto inline$BDLGetDebugLevel$180$Return#1;
-
- inline$BDLGetDebugLevel$180$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$180$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon37_Then#1, inline$BDLDevicePowerIoCompletion$7$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_82_true#1, inline$BDLDevicePowerIoCompletion$7$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$7$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$7$anon38_Then#1, inline$BDLDevicePowerIoCompletion$7$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$7$anon39_Then#1, inline$BDLDevicePowerIoCompletion$7$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_92#1:
- goto inline$storm_IoCompleteRequest$15$Entry#1;
-
- inline$storm_IoCompleteRequest$15$Entry#1:
- inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$15$start#1;
-
- inline$storm_IoCompleteRequest$15$start#1:
- inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$15$label_3#1;
-
- inline$storm_IoCompleteRequest$15$label_3#1:
- call inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$15$label_6#1;
-
- inline$storm_IoCompleteRequest$15$label_6#1:
- goto inline$storm_IoCompleteRequest$15$label_6_true#1, inline$storm_IoCompleteRequest$15$label_6_false#1;
-
- inline$storm_IoCompleteRequest$15$label_6_false#1:
- assume inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$15$label_7#1;
-
- inline$storm_IoCompleteRequest$15$label_6_true#1:
- assume inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$15$label_8#1;
-
- inline$storm_IoCompleteRequest$15$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$15$anon3_Then#1, inline$storm_IoCompleteRequest$15$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$15$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$15$anon1#1;
-
- inline$storm_IoCompleteRequest$15$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$15$label_9#1;
-
- inline$storm_IoCompleteRequest$15$label_9#1:
- goto inline$storm_IoCompleteRequest$15$label_9_true#1, inline$storm_IoCompleteRequest$15$label_9_false#1;
-
- inline$storm_IoCompleteRequest$15$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$15$label_10#1;
-
- inline$storm_IoCompleteRequest$15$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$15$label_1#1;
-
- inline$storm_IoCompleteRequest$15$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$15$label_7#1;
-
- inline$storm_IoCompleteRequest$15$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$15$label_1#1;
-
- inline$storm_IoCompleteRequest$15$label_1#1:
- goto inline$storm_IoCompleteRequest$15$Return#1;
-
- inline$storm_IoCompleteRequest$15$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$15$Return#1;
-
- inline$storm_IoCompleteRequest$15$Return#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon40_Then#1, inline$BDLDevicePowerIoCompletion$7$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$7$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$7$anon41_Then#1, inline$BDLDevicePowerIoCompletion$7$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_98#1:
- goto inline$BDLGetDebugLevel$181$Entry#1;
-
- inline$BDLGetDebugLevel$181$Entry#1:
- goto inline$BDLGetDebugLevel$181$start#1;
-
- inline$BDLGetDebugLevel$181$start#1:
- goto inline$BDLGetDebugLevel$181$label_3#1;
-
- inline$BDLGetDebugLevel$181$label_3#1:
- havoc inline$BDLGetDebugLevel$181$myNondetVar_0;
- inline$BDLGetDebugLevel$181$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$181$myNondetVar_0;
- goto inline$BDLGetDebugLevel$181$label_1#1;
-
- inline$BDLGetDebugLevel$181$label_1#1:
- goto inline$BDLGetDebugLevel$181$Return#1;
-
- inline$BDLGetDebugLevel$181$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$181$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon42_Then#1, inline$BDLDevicePowerIoCompletion$7$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_101_true#1, inline$BDLDevicePowerIoCompletion$7$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_105#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_106#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_107#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$7$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_102#1:
- goto inline$BDLGetDebugLevel$182$Entry#1;
-
- inline$BDLGetDebugLevel$182$Entry#1:
- goto inline$BDLGetDebugLevel$182$start#1;
-
- inline$BDLGetDebugLevel$182$start#1:
- goto inline$BDLGetDebugLevel$182$label_3#1;
-
- inline$BDLGetDebugLevel$182$label_3#1:
- havoc inline$BDLGetDebugLevel$182$myNondetVar_0;
- inline$BDLGetDebugLevel$182$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$182$myNondetVar_0;
- goto inline$BDLGetDebugLevel$182$label_1#1;
-
- inline$BDLGetDebugLevel$182$label_1#1:
- goto inline$BDLGetDebugLevel$182$Return#1;
-
- inline$BDLGetDebugLevel$182$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$182$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon43_Then#1, inline$BDLDevicePowerIoCompletion$7$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_111_true#1, inline$BDLDevicePowerIoCompletion$7$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_115#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_116#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_117#1:
- call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$7$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$7$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_112#1:
- goto inline$BDLGetDebugLevel$183$Entry#1;
-
- inline$BDLGetDebugLevel$183$Entry#1:
- goto inline$BDLGetDebugLevel$183$start#1;
-
- inline$BDLGetDebugLevel$183$start#1:
- goto inline$BDLGetDebugLevel$183$label_3#1;
-
- inline$BDLGetDebugLevel$183$label_3#1:
- havoc inline$BDLGetDebugLevel$183$myNondetVar_0;
- inline$BDLGetDebugLevel$183$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$183$myNondetVar_0;
- goto inline$BDLGetDebugLevel$183$label_1#1;
-
- inline$BDLGetDebugLevel$183$label_1#1:
- goto inline$BDLGetDebugLevel$183$Return#1;
-
- inline$BDLGetDebugLevel$183$Return#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$183$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$7$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$7$anon44_Then#1, inline$BDLDevicePowerIoCompletion$7$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_121_true#1, inline$BDLDevicePowerIoCompletion$7$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$7$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$7$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_122#1:
- inline$BDLDevicePowerIoCompletion$7$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$7$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$7$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$7$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$7$Return#1;
-
- inline$BDLDevicePowerIoCompletion$7$Return#1:
- inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$7$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$7$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$7$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$7$anon13_Then#1, inline$CallCompletionRoutine$7$anon13_Else#1;
-
- inline$CallCompletionRoutine$7$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$7$anon7#1;
-
- inline$CallCompletionRoutine$7$anon7#1:
- goto inline$CallCompletionRoutine$7$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$7$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$7$Return#1;
-
- inline$CallCompletionRoutine$7$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$7$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$7$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$7$Entry#1:
- inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$7$start#1;
-
- inline$BDLCallDriverCompletionRoutine$7$start#1:
- inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$7$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$7$label_3_true#1, inline$BDLCallDriverCompletionRoutine$7$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$7$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$7$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$7$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$7$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_6#1:
- goto inline$storm_KeSetEvent$8$Entry#1;
-
- inline$storm_KeSetEvent$8$Entry#1:
- inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$8$start#1;
-
- inline$storm_KeSetEvent$8$start#1:
- inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$8$label_3#1;
-
- inline$storm_KeSetEvent$8$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$8$label_1#1;
-
- inline$storm_KeSetEvent$8$label_1#1:
- goto inline$storm_KeSetEvent$8$Return#1;
-
- inline$storm_KeSetEvent$8$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$7$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$7$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$7$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$7$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$7$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$7$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$7$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_9#1:
- inline$BDLCallDriverCompletionRoutine$7$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$7$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$7$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$7$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$7$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$7$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$7$Return#1:
- inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$7$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$7$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$7$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$7$anon12_Then#1, inline$CallCompletionRoutine$7$anon12_Else#1;
-
- inline$CallCompletionRoutine$7$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$7$anon5#1;
-
- inline$CallCompletionRoutine$7$anon5#1:
- goto inline$CallCompletionRoutine$7$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$7$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$7$label_23#1;
-
- inline$CallCompletionRoutine$7$label_23#1:
- inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$7$label_24#1;
-
- inline$CallCompletionRoutine$7$label_24#1:
- goto inline$CallCompletionRoutine$7$label_24_true#1, inline$CallCompletionRoutine$7$label_24_false#1;
-
- inline$CallCompletionRoutine$7$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$7$label_1#1;
-
- inline$CallCompletionRoutine$7$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$7$label_25#1;
-
- inline$CallCompletionRoutine$7$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$7$label_1#1;
-
- inline$CallCompletionRoutine$7$label_1#1:
- goto inline$CallCompletionRoutine$7$Return#1;
-
- inline$CallCompletionRoutine$7$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$7$Return#1;
-
- inline$CallCompletionRoutine$7$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$7$Return#1;
-
- inline$CallCompletionRoutine$7$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$7$Return#1;
-
- inline$CallCompletionRoutine$7$Return#1:
- goto inline$storm_IoCallDriver$3$label_39$1#1;
-
- inline$storm_IoCallDriver$3$label_39$1#1:
- goto inline$storm_IoCallDriver$3$anon15_Then#1, inline$storm_IoCallDriver$3$anon15_Else#1;
-
- inline$storm_IoCallDriver$3$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$3$anon10#1;
-
- inline$storm_IoCallDriver$3$anon10#1:
- goto inline$storm_IoCallDriver$3$label_36#1;
-
- inline$storm_IoCallDriver$3$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$3$Return#1;
-
- inline$storm_IoCallDriver$3$label_27_case_0#1:
- assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$3$label_28#1;
-
- inline$storm_IoCallDriver$3$label_28#1:
- inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$3$label_42#1;
-
- inline$storm_IoCallDriver$3$label_42#1:
- goto inline$storm_IoCallDriver$3$label_43#1;
-
- inline$storm_IoCallDriver$3$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$3$label_36#1;
-
- inline$storm_IoCallDriver$3$label_36#1:
- inline$storm_IoCallDriver$3$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$3$label_1#1;
-
- inline$storm_IoCallDriver$3$label_1#1:
- goto inline$storm_IoCallDriver$3$Return#1;
-
- inline$storm_IoCallDriver$3$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$3$Return#1;
-
- inline$storm_IoCallDriver$3$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$3$Return#1;
-
- inline$storm_IoCallDriver$3$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$3$Return#1;
-
- inline$storm_IoCallDriver$3$Return#1:
- inline$storm_PoCallDriver$1$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$3$$result.storm_IoCallDriver$456.0$1$;
- goto inline$storm_PoCallDriver$1$label_3$1#1;
-
- inline$storm_PoCallDriver$1$label_3$1#1:
- goto inline$storm_PoCallDriver$1$anon2_Then#1, inline$storm_PoCallDriver$1$anon2_Else#1;
-
- inline$storm_PoCallDriver$1$anon2_Else#1:
- assume !raiseException;
- goto inline$storm_PoCallDriver$1$anon1#1;
-
- inline$storm_PoCallDriver$1$anon1#1:
- goto inline$storm_PoCallDriver$1$label_6#1;
-
- inline$storm_PoCallDriver$1$label_6#1:
- inline$storm_PoCallDriver$1$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$1$$result.storm_IoCallDriver$499.27$2$;
- goto inline$storm_PoCallDriver$1$label_1#1;
-
- inline$storm_PoCallDriver$1$label_1#1:
- goto inline$storm_PoCallDriver$1$Return#1;
-
- inline$storm_PoCallDriver$1$anon2_Then#1:
- assume raiseException;
- goto inline$storm_PoCallDriver$1$Return#1;
-
- inline$storm_PoCallDriver$1$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$1$$result.storm_PoCallDriver$494.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_25$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_25$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon22_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon13#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon13#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_28#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_28#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_PoCallDriver$104.29$3$;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$1$label_29_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_29_false#1:
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_29_true#1:
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_31#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_31#1:
- goto inline$storm_KeWaitForSingleObject$1$Entry#1;
-
- inline$storm_KeWaitForSingleObject$1$Entry#1:
- inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
- goto inline$storm_KeWaitForSingleObject$1$start#1;
-
- inline$storm_KeWaitForSingleObject$1$start#1:
- inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
- inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
- goto inline$storm_KeWaitForSingleObject$1$label_3#1;
-
- inline$storm_KeWaitForSingleObject$1$label_3#1:
- goto inline$storm_KeWaitForSingleObject$1$label_3_true#1, inline$storm_KeWaitForSingleObject$1$label_3_false#1;
-
- inline$storm_KeWaitForSingleObject$1$label_3_false#1:
- assume inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
- goto inline$storm_KeWaitForSingleObject$1$label_4#1;
-
- inline$storm_KeWaitForSingleObject$1$label_4#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$1$anon6_Then#1, inline$storm_KeWaitForSingleObject$1$anon6_Else#1;
-
- inline$storm_KeWaitForSingleObject$1$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$1$anon1#1;
-
- inline$storm_KeWaitForSingleObject$1$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$1$label_13#1;
-
- inline$storm_KeWaitForSingleObject$1$label_13#1:
- inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$1$label_1#1;
-
- inline$storm_KeWaitForSingleObject$1$anon6_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$1$Return#1;
-
- inline$storm_KeWaitForSingleObject$1$label_3_true#1:
- assume inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
- goto inline$storm_KeWaitForSingleObject$1$label_5#1;
-
- inline$storm_KeWaitForSingleObject$1$label_5#1:
- call inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$ := storm_nondet();
- goto inline$storm_KeWaitForSingleObject$1$label_8#1;
-
- inline$storm_KeWaitForSingleObject$1$label_8#1:
- goto inline$storm_KeWaitForSingleObject$1$label_8_true#1, inline$storm_KeWaitForSingleObject$1$label_8_false#1;
-
- inline$storm_KeWaitForSingleObject$1$label_8_false#1:
- assume inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$ == 0;
- goto inline$storm_KeWaitForSingleObject$1$label_9#1;
-
- inline$storm_KeWaitForSingleObject$1$label_9#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$1$anon7_Then#1, inline$storm_KeWaitForSingleObject$1$anon7_Else#1;
-
- inline$storm_KeWaitForSingleObject$1$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$1$anon3#1;
-
- inline$storm_KeWaitForSingleObject$1$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$1$label_12#1;
-
- inline$storm_KeWaitForSingleObject$1$label_12#1:
- inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
- goto inline$storm_KeWaitForSingleObject$1$label_1#1;
-
- inline$storm_KeWaitForSingleObject$1$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$1$Return#1;
-
- inline$storm_KeWaitForSingleObject$1$label_8_true#1:
- assume inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$ != 0;
- goto inline$storm_KeWaitForSingleObject$1$label_10#1;
-
- inline$storm_KeWaitForSingleObject$1$label_10#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$1$anon8_Then#1, inline$storm_KeWaitForSingleObject$1$anon8_Else#1;
-
- inline$storm_KeWaitForSingleObject$1$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$1$anon5#1;
-
- inline$storm_KeWaitForSingleObject$1$anon5#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$1$label_11#1;
-
- inline$storm_KeWaitForSingleObject$1$label_11#1:
- inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$1$label_1#1;
-
- inline$storm_KeWaitForSingleObject$1$label_1#1:
- goto inline$storm_KeWaitForSingleObject$1$Return#1;
-
- inline$storm_KeWaitForSingleObject$1$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$1$Return#1;
-
- inline$storm_KeWaitForSingleObject$1$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_31$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_31$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon23_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$anon15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon15#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_34#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_34#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_KeWaitForSingleObject$116.38$5$;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_35#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_35#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$1$label_35_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_35_false#1:
- assume inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_35_true#1:
- assume inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_37#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_37#1:
- call inline$BDLCallLowerLevelDriverAndWait$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_38#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_38#1:
- call inline$BDLCallLowerLevelDriverAndWait$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_39#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_39#1:
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_36#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
- inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_30#1:
- inline$BDLCallLowerLevelDriverAndWait$1$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
- goto inline$BDLCallLowerLevelDriverAndWait$1$label_1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$label_1#1:
- call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon23_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon22_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon21_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon19_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon18_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon17_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$anon16_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$1$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLCallLowerLevelDriverAndWait$2287.43$14$ := inline$BDLCallLowerLevelDriverAndWait$1$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_34$1#1;
-
- inline$BDLPnPQueryRemove$0$label_34$1#1:
- goto inline$BDLPnPQueryRemove$0$anon26_Then#1, inline$BDLPnPQueryRemove$0$anon26_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon26_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon9#1;
-
- inline$BDLPnPQueryRemove$0$anon9#1:
- goto inline$BDLPnPQueryRemove$0$label_64#1;
-
- inline$BDLPnPQueryRemove$0$label_64#1:
- inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 := inline$BDLPnPQueryRemove$0$$result.BDLCallLowerLevelDriverAndWait$2287.43$14$;
- goto inline$BDLPnPQueryRemove$0$label_65#1;
-
- inline$BDLPnPQueryRemove$0$label_65#1:
- goto inline$BDLPnPQueryRemove$0$label_65_true#1, inline$BDLPnPQueryRemove$0$label_65_false#1;
-
- inline$BDLPnPQueryRemove$0$label_65_false#1:
- assume inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 == 0;
- goto inline$BDLPnPQueryRemove$0$label_38#1;
-
- inline$BDLPnPQueryRemove$0$label_65_true#1:
- assume inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 != 0;
- goto inline$BDLPnPQueryRemove$0$label_66#1;
-
- inline$BDLPnPQueryRemove$0$label_66#1:
- goto inline$BDLGetDebugLevel$199$Entry#1;
-
- inline$BDLGetDebugLevel$199$Entry#1:
- goto inline$BDLGetDebugLevel$199$start#1;
-
- inline$BDLGetDebugLevel$199$start#1:
- goto inline$BDLGetDebugLevel$199$label_3#1;
-
- inline$BDLGetDebugLevel$199$label_3#1:
- havoc inline$BDLGetDebugLevel$199$myNondetVar_0;
- inline$BDLGetDebugLevel$199$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$199$myNondetVar_0;
- goto inline$BDLGetDebugLevel$199$label_1#1;
-
- inline$BDLGetDebugLevel$199$label_1#1:
- goto inline$BDLGetDebugLevel$199$Return#1;
-
- inline$BDLGetDebugLevel$199$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$ := inline$BDLGetDebugLevel$199$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_66$1#1;
-
- inline$BDLPnPQueryRemove$0$label_66$1#1:
- goto inline$BDLPnPQueryRemove$0$anon30_Then#1, inline$BDLPnPQueryRemove$0$anon30_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon17#1;
-
- inline$BDLPnPQueryRemove$0$anon17#1:
- goto inline$BDLPnPQueryRemove$0$label_69#1;
-
- inline$BDLPnPQueryRemove$0$label_69#1:
- goto inline$BDLPnPQueryRemove$0$label_69_true#1, inline$BDLPnPQueryRemove$0$label_69_false#1;
-
- inline$BDLPnPQueryRemove$0$label_69_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$) == 0;
- goto inline$BDLPnPQueryRemove$0$label_70#1;
-
- inline$BDLPnPQueryRemove$0$label_69_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$) != 0;
- goto inline$BDLPnPQueryRemove$0$label_73#1;
-
- inline$BDLPnPQueryRemove$0$label_73#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_74#1;
-
- inline$BDLPnPQueryRemove$0$label_74#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_75#1;
-
- inline$BDLPnPQueryRemove$0$label_75#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_76#1;
-
- inline$BDLPnPQueryRemove$0$label_76#1:
- havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$16$;
- goto inline$BDLPnPQueryRemove$0$label_70#1;
-
- inline$BDLPnPQueryRemove$0$label_70#1:
- goto inline$BDLGetDebugLevel$200$Entry#1;
-
- inline$BDLGetDebugLevel$200$Entry#1:
- goto inline$BDLGetDebugLevel$200$start#1;
-
- inline$BDLGetDebugLevel$200$start#1:
- goto inline$BDLGetDebugLevel$200$label_3#1;
-
- inline$BDLGetDebugLevel$200$label_3#1:
- havoc inline$BDLGetDebugLevel$200$myNondetVar_0;
- inline$BDLGetDebugLevel$200$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$200$myNondetVar_0;
- goto inline$BDLGetDebugLevel$200$label_1#1;
-
- inline$BDLGetDebugLevel$200$label_1#1:
- goto inline$BDLGetDebugLevel$200$Return#1;
-
- inline$BDLGetDebugLevel$200$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$ := inline$BDLGetDebugLevel$200$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_70$1#1;
-
- inline$BDLPnPQueryRemove$0$label_70$1#1:
- goto inline$BDLPnPQueryRemove$0$anon31_Then#1, inline$BDLPnPQueryRemove$0$anon31_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon19#1;
-
- inline$BDLPnPQueryRemove$0$anon19#1:
- goto inline$BDLPnPQueryRemove$0$label_79#1;
-
- inline$BDLPnPQueryRemove$0$label_79#1:
- goto inline$BDLPnPQueryRemove$0$label_79_true#1, inline$BDLPnPQueryRemove$0$label_79_false#1;
-
- inline$BDLPnPQueryRemove$0$label_79_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$) == 0;
- goto inline$BDLPnPQueryRemove$0$label_80#1;
-
- inline$BDLPnPQueryRemove$0$label_79_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$) != 0;
- goto inline$BDLPnPQueryRemove$0$label_83#1;
-
- inline$BDLPnPQueryRemove$0$label_83#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_84#1;
-
- inline$BDLPnPQueryRemove$0$label_84#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_85#1;
-
- inline$BDLPnPQueryRemove$0$label_85#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_86#1;
-
- inline$BDLPnPQueryRemove$0$label_86#1:
- havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$21$;
- goto inline$BDLPnPQueryRemove$0$label_80#1;
-
- inline$BDLPnPQueryRemove$0$label_80#1:
- goto inline$BDLGetDebugLevel$201$Entry#1;
-
- inline$BDLGetDebugLevel$201$Entry#1:
- goto inline$BDLGetDebugLevel$201$start#1;
-
- inline$BDLGetDebugLevel$201$start#1:
- goto inline$BDLGetDebugLevel$201$label_3#1;
-
- inline$BDLGetDebugLevel$201$label_3#1:
- havoc inline$BDLGetDebugLevel$201$myNondetVar_0;
- inline$BDLGetDebugLevel$201$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$201$myNondetVar_0;
- goto inline$BDLGetDebugLevel$201$label_1#1;
-
- inline$BDLGetDebugLevel$201$label_1#1:
- goto inline$BDLGetDebugLevel$201$Return#1;
-
- inline$BDLGetDebugLevel$201$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$ := inline$BDLGetDebugLevel$201$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_80$1#1;
-
- inline$BDLPnPQueryRemove$0$label_80$1#1:
- goto inline$BDLPnPQueryRemove$0$anon32_Then#1, inline$BDLPnPQueryRemove$0$anon32_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon21#1;
-
- inline$BDLPnPQueryRemove$0$anon21#1:
- goto inline$BDLPnPQueryRemove$0$label_89#1;
-
- inline$BDLPnPQueryRemove$0$label_89#1:
- goto inline$BDLPnPQueryRemove$0$label_89_true#1, inline$BDLPnPQueryRemove$0$label_89_false#1;
-
- inline$BDLPnPQueryRemove$0$label_89_false#1:
- assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$, 4) == 0;
- goto inline$BDLPnPQueryRemove$0$label_38#1;
-
- inline$BDLPnPQueryRemove$0$label_89_true#1:
- assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$, 4) != 0;
- goto inline$BDLPnPQueryRemove$0$label_90#1;
-
- inline$BDLPnPQueryRemove$0$label_90#1:
- goto inline$BDLPnPQueryRemove$0$label_38#1;
-
- inline$BDLPnPQueryRemove$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon26_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$label_33_true#1:
- havoc inline$BDLPnPQueryRemove$0$myNondetVar_0;
- assume inline$BDLPnPQueryRemove$0$myNondetVar_0 != 0;
- goto inline$BDLPnPQueryRemove$0$label_37#1;
-
- inline$BDLPnPQueryRemove$0$label_37#1:
- inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 := 0 - 1073741823;
- goto inline$BDLPnPQueryRemove$0$label_38#1;
-
- inline$BDLPnPQueryRemove$0$label_38#1:
- goto inline$BDLGetDebugLevel$196$Entry#1;
-
- inline$BDLGetDebugLevel$196$Entry#1:
- goto inline$BDLGetDebugLevel$196$start#1;
-
- inline$BDLGetDebugLevel$196$start#1:
- goto inline$BDLGetDebugLevel$196$label_3#1;
-
- inline$BDLGetDebugLevel$196$label_3#1:
- havoc inline$BDLGetDebugLevel$196$myNondetVar_0;
- inline$BDLGetDebugLevel$196$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$196$myNondetVar_0;
- goto inline$BDLGetDebugLevel$196$label_1#1;
-
- inline$BDLGetDebugLevel$196$label_1#1:
- goto inline$BDLGetDebugLevel$196$Return#1;
-
- inline$BDLGetDebugLevel$196$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$ := inline$BDLGetDebugLevel$196$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_38$1#1;
-
- inline$BDLPnPQueryRemove$0$label_38$1#1:
- goto inline$BDLPnPQueryRemove$0$anon27_Then#1, inline$BDLPnPQueryRemove$0$anon27_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon27_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon11#1;
-
- inline$BDLPnPQueryRemove$0$anon11#1:
- goto inline$BDLPnPQueryRemove$0$label_41#1;
-
- inline$BDLPnPQueryRemove$0$label_41#1:
- goto inline$BDLPnPQueryRemove$0$label_41_true#1, inline$BDLPnPQueryRemove$0$label_41_false#1;
-
- inline$BDLPnPQueryRemove$0$label_41_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$) == 0;
- goto inline$BDLPnPQueryRemove$0$label_42#1;
-
- inline$BDLPnPQueryRemove$0$label_41_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$) != 0;
- goto inline$BDLPnPQueryRemove$0$label_45#1;
-
- inline$BDLPnPQueryRemove$0$label_45#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_46#1;
-
- inline$BDLPnPQueryRemove$0$label_46#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_47#1;
-
- inline$BDLPnPQueryRemove$0$label_47#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_48#1;
-
- inline$BDLPnPQueryRemove$0$label_48#1:
- havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$27$;
- goto inline$BDLPnPQueryRemove$0$label_42#1;
-
- inline$BDLPnPQueryRemove$0$label_42#1:
- goto inline$BDLGetDebugLevel$197$Entry#1;
-
- inline$BDLGetDebugLevel$197$Entry#1:
- goto inline$BDLGetDebugLevel$197$start#1;
-
- inline$BDLGetDebugLevel$197$start#1:
- goto inline$BDLGetDebugLevel$197$label_3#1;
-
- inline$BDLGetDebugLevel$197$label_3#1:
- havoc inline$BDLGetDebugLevel$197$myNondetVar_0;
- inline$BDLGetDebugLevel$197$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$197$myNondetVar_0;
- goto inline$BDLGetDebugLevel$197$label_1#1;
-
- inline$BDLGetDebugLevel$197$label_1#1:
- goto inline$BDLGetDebugLevel$197$Return#1;
-
- inline$BDLGetDebugLevel$197$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$ := inline$BDLGetDebugLevel$197$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_42$1#1;
-
- inline$BDLPnPQueryRemove$0$label_42$1#1:
- goto inline$BDLPnPQueryRemove$0$anon28_Then#1, inline$BDLPnPQueryRemove$0$anon28_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon28_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon13#1;
-
- inline$BDLPnPQueryRemove$0$anon13#1:
- goto inline$BDLPnPQueryRemove$0$label_51#1;
-
- inline$BDLPnPQueryRemove$0$label_51#1:
- goto inline$BDLPnPQueryRemove$0$label_51_true#1, inline$BDLPnPQueryRemove$0$label_51_false#1;
-
- inline$BDLPnPQueryRemove$0$label_51_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$) == 0;
- goto inline$BDLPnPQueryRemove$0$label_52#1;
-
- inline$BDLPnPQueryRemove$0$label_51_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$) != 0;
- goto inline$BDLPnPQueryRemove$0$label_55#1;
-
- inline$BDLPnPQueryRemove$0$label_55#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_56#1;
-
- inline$BDLPnPQueryRemove$0$label_56#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_57#1;
-
- inline$BDLPnPQueryRemove$0$label_57#1:
- call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPQueryRemove$0$label_58#1;
-
- inline$BDLPnPQueryRemove$0$label_58#1:
- havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$32$;
- goto inline$BDLPnPQueryRemove$0$label_52#1;
-
- inline$BDLPnPQueryRemove$0$label_52#1:
- goto inline$BDLGetDebugLevel$198$Entry#1;
-
- inline$BDLGetDebugLevel$198$Entry#1:
- goto inline$BDLGetDebugLevel$198$start#1;
-
- inline$BDLGetDebugLevel$198$start#1:
- goto inline$BDLGetDebugLevel$198$label_3#1;
-
- inline$BDLGetDebugLevel$198$label_3#1:
- havoc inline$BDLGetDebugLevel$198$myNondetVar_0;
- inline$BDLGetDebugLevel$198$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$198$myNondetVar_0;
- goto inline$BDLGetDebugLevel$198$label_1#1;
-
- inline$BDLGetDebugLevel$198$label_1#1:
- goto inline$BDLGetDebugLevel$198$Return#1;
-
- inline$BDLGetDebugLevel$198$Return#1:
- inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$ := inline$BDLGetDebugLevel$198$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPQueryRemove$0$label_52$1#1;
-
- inline$BDLPnPQueryRemove$0$label_52$1#1:
- goto inline$BDLPnPQueryRemove$0$anon29_Then#1, inline$BDLPnPQueryRemove$0$anon29_Else#1;
-
- inline$BDLPnPQueryRemove$0$anon29_Else#1:
- assume !raiseException;
- goto inline$BDLPnPQueryRemove$0$anon15#1;
-
- inline$BDLPnPQueryRemove$0$anon15#1:
- goto inline$BDLPnPQueryRemove$0$label_61#1;
-
- inline$BDLPnPQueryRemove$0$label_61#1:
- goto inline$BDLPnPQueryRemove$0$label_61_true#1, inline$BDLPnPQueryRemove$0$label_61_false#1;
-
- inline$BDLPnPQueryRemove$0$label_61_false#1:
- assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$, 4) == 0;
- goto inline$BDLPnPQueryRemove$0$label_62#1;
-
- inline$BDLPnPQueryRemove$0$label_61_true#1:
- assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$, 4) != 0;
- goto inline$BDLPnPQueryRemove$0$label_63#1;
-
- inline$BDLPnPQueryRemove$0$label_63#1:
- goto inline$BDLPnPQueryRemove$0$label_62#1;
-
- inline$BDLPnPQueryRemove$0$label_62#1:
- inline$BDLPnPQueryRemove$0$$result.BDLPnPQueryRemove$2254.0$1$ := inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12;
- goto inline$BDLPnPQueryRemove$0$label_1#1;
-
- inline$BDLPnPQueryRemove$0$label_1#1:
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon29_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon28_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon27_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon25_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon24_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon23_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$anon22_Then#1:
- assume raiseException;
- goto inline$BDLPnPQueryRemove$0$Return#1;
-
- inline$BDLPnPQueryRemove$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPQueryRemove$943.34$32$ := inline$BDLPnPQueryRemove$0$$result.BDLPnPQueryRemove$2254.0$1$;
- goto inline$BDLPnP$0$label_116$1#1;
-
- inline$BDLPnP$0$label_116$1#1:
- goto inline$BDLPnP$0$anon68_Then#1, inline$BDLPnP$0$anon68_Else#1;
-
- inline$BDLPnP$0$anon68_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon29#1;
-
- inline$BDLPnP$0$anon29#1:
- goto inline$BDLPnP$0$label_154#1;
-
- inline$BDLPnP$0$label_154#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPQueryRemove$943.34$32$;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon68_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_1#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 == 0;
- goto inline$BDLPnP$0$label_113#1;
-
- inline$BDLPnP$0$label_113#1:
- goto inline$BDLPnPStart$0$Entry#1;
-
- inline$BDLPnPStart$0$Entry#1:
- inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
- inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$BDLPnPStart$0$start#1;
-
- inline$BDLPnPStart$0$start#1:
- call inline$BDLPnPStart$0$$bdsiInitializeResourcesParams$7$1964.32$BDLPnPStart$16 := __HAVOC_malloc(548);
- inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16 := inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16_.1;
- inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16 := inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16_.1;
- goto inline$BDLPnPStart$0$label_3#1;
-
- inline$BDLPnPStart$0$label_3#1:
- goto inline$BDLPnPStart$0$label_4#1;
-
- inline$BDLPnPStart$0$label_4#1:
- inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := 0;
- goto inline$BDLPnPStart$0$label_5#1;
-
- inline$BDLPnPStart$0$label_5#1:
- goto inline$BDLPnPStart$0$label_6#1;
-
- inline$BDLPnPStart$0$label_6#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_7#1;
-
- inline$BDLPnPStart$0$label_7#1:
- goto inline$BDLPnPStart$0$label_8#1;
-
- inline$BDLPnPStart$0$label_8#1:
- goto inline$BDLGetDebugLevel$10$Entry#1;
-
- inline$BDLGetDebugLevel$10$Entry#1:
- goto inline$BDLGetDebugLevel$10$start#1;
-
- inline$BDLGetDebugLevel$10$start#1:
- goto inline$BDLGetDebugLevel$10$label_3#1;
-
- inline$BDLGetDebugLevel$10$label_3#1:
- havoc inline$BDLGetDebugLevel$10$myNondetVar_0;
- inline$BDLGetDebugLevel$10$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$10$myNondetVar_0;
- goto inline$BDLGetDebugLevel$10$label_1#1;
-
- inline$BDLGetDebugLevel$10$label_1#1:
- goto inline$BDLGetDebugLevel$10$Return#1;
-
- inline$BDLGetDebugLevel$10$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$ := inline$BDLGetDebugLevel$10$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_8$1#1;
-
- inline$BDLPnPStart$0$label_8$1#1:
- goto inline$BDLPnPStart$0$anon36_Then#1, inline$BDLPnPStart$0$anon36_Else#1;
-
- inline$BDLPnPStart$0$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon1#1;
-
- inline$BDLPnPStart$0$anon1#1:
- goto inline$BDLPnPStart$0$label_11#1;
-
- inline$BDLPnPStart$0$label_11#1:
- goto inline$BDLPnPStart$0$label_11_true#1, inline$BDLPnPStart$0$label_11_false#1;
-
- inline$BDLPnPStart$0$label_11_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$) == 0;
- goto inline$BDLPnPStart$0$label_12#1;
-
- inline$BDLPnPStart$0$label_11_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$) != 0;
- goto inline$BDLPnPStart$0$label_15#1;
-
- inline$BDLPnPStart$0$label_15#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_16#1;
-
- inline$BDLPnPStart$0$label_16#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_17#1;
-
- inline$BDLPnPStart$0$label_17#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_18#1;
-
- inline$BDLPnPStart$0$label_18#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$1966.0$3$;
- goto inline$BDLPnPStart$0$label_12#1;
-
- inline$BDLPnPStart$0$label_12#1:
- goto inline$BDLGetDebugLevel$11$Entry#1;
-
- inline$BDLGetDebugLevel$11$Entry#1:
- goto inline$BDLGetDebugLevel$11$start#1;
-
- inline$BDLGetDebugLevel$11$start#1:
- goto inline$BDLGetDebugLevel$11$label_3#1;
-
- inline$BDLGetDebugLevel$11$label_3#1:
- havoc inline$BDLGetDebugLevel$11$myNondetVar_0;
- inline$BDLGetDebugLevel$11$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$11$myNondetVar_0;
- goto inline$BDLGetDebugLevel$11$label_1#1;
-
- inline$BDLGetDebugLevel$11$label_1#1:
- goto inline$BDLGetDebugLevel$11$Return#1;
-
- inline$BDLGetDebugLevel$11$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$ := inline$BDLGetDebugLevel$11$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_12$1#1;
-
- inline$BDLPnPStart$0$label_12$1#1:
- goto inline$BDLPnPStart$0$anon37_Then#1, inline$BDLPnPStart$0$anon37_Else#1;
-
- inline$BDLPnPStart$0$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon3#1;
-
- inline$BDLPnPStart$0$anon3#1:
- goto inline$BDLPnPStart$0$label_21#1;
-
- inline$BDLPnPStart$0$label_21#1:
- goto inline$BDLPnPStart$0$label_21_true#1, inline$BDLPnPStart$0$label_21_false#1;
-
- inline$BDLPnPStart$0$label_21_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$) == 0;
- goto inline$BDLPnPStart$0$label_22#1;
-
- inline$BDLPnPStart$0$label_21_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$) != 0;
- goto inline$BDLPnPStart$0$label_25#1;
-
- inline$BDLPnPStart$0$label_25#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_26#1;
-
- inline$BDLPnPStart$0$label_26#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_27#1;
-
- inline$BDLPnPStart$0$label_27#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_28#1;
-
- inline$BDLPnPStart$0$label_28#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$1966.0$8$;
- goto inline$BDLPnPStart$0$label_22#1;
-
- inline$BDLPnPStart$0$label_22#1:
- goto inline$BDLGetDebugLevel$12$Entry#1;
-
- inline$BDLGetDebugLevel$12$Entry#1:
- goto inline$BDLGetDebugLevel$12$start#1;
-
- inline$BDLGetDebugLevel$12$start#1:
- goto inline$BDLGetDebugLevel$12$label_3#1;
-
- inline$BDLGetDebugLevel$12$label_3#1:
- havoc inline$BDLGetDebugLevel$12$myNondetVar_0;
- inline$BDLGetDebugLevel$12$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$12$myNondetVar_0;
- goto inline$BDLGetDebugLevel$12$label_1#1;
-
- inline$BDLGetDebugLevel$12$label_1#1:
- goto inline$BDLGetDebugLevel$12$Return#1;
-
- inline$BDLGetDebugLevel$12$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$ := inline$BDLGetDebugLevel$12$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_22$1#1;
-
- inline$BDLPnPStart$0$label_22$1#1:
- goto inline$BDLPnPStart$0$anon38_Then#1, inline$BDLPnPStart$0$anon38_Else#1;
-
- inline$BDLPnPStart$0$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon5#1;
-
- inline$BDLPnPStart$0$anon5#1:
- goto inline$BDLPnPStart$0$label_31#1;
-
- inline$BDLPnPStart$0$label_31#1:
- goto inline$BDLPnPStart$0$label_31_true#1, inline$BDLPnPStart$0$label_31_false#1;
-
- inline$BDLPnPStart$0$label_31_false#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$, 4) == 0;
- goto inline$BDLPnPStart$0$label_32#1;
-
- inline$BDLPnPStart$0$label_31_true#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$, 4) != 0;
- goto inline$BDLPnPStart$0$label_35#1;
-
- inline$BDLPnPStart$0$label_35#1:
- goto inline$BDLPnPStart$0$label_32#1;
-
- inline$BDLPnPStart$0$label_32#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$Entry#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$Entry#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16;
- goto inline$BDLCallLowerLevelDriverAndWait$0$start#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$start#1:
- call inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
- inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_4#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_4#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_6#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_6#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$Entry#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$Entry#1:
- inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$start#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$start#1:
- inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_4#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_4#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_5#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_5#1:
- goto inline$IoGetCurrentIrpStackLocation$3$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$3$Entry#1:
- inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetCurrentIrpStackLocation$3$start#1;
-
- inline$IoGetCurrentIrpStackLocation$3$start#1:
- inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$3$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$3$label_3_true#1, inline$IoGetCurrentIrpStackLocation$3$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$3$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$3$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$3$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$3$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$3$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$3$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$3$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$3$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$3$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$3$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$3$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$3$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$3$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$3$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$3$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$3$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_5$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_5$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$anon1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_8#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_8#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_9#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_9#1:
- goto inline$IoGetNextIrpStackLocation$1$Entry#1;
-
- inline$IoGetNextIrpStackLocation$1$Entry#1:
- inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
- goto inline$IoGetNextIrpStackLocation$1$start#1;
-
- inline$IoGetNextIrpStackLocation$1$start#1:
- inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$1$label_3#1;
-
- inline$IoGetNextIrpStackLocation$1$label_3#1:
- goto inline$IoGetNextIrpStackLocation$1$label_3_true#1, inline$IoGetNextIrpStackLocation$1$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$1$label_3_false#1:
- inline$IoGetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$1$myVar_0);
- goto inline$IoGetNextIrpStackLocation$1$label_4#1;
-
- inline$IoGetNextIrpStackLocation$1$label_4#1:
- call inline$IoGetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$1$label_6#1;
-
- inline$IoGetNextIrpStackLocation$1$label_6#1:
- call inline$IoGetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$1$label_7#1;
-
- inline$IoGetNextIrpStackLocation$1$label_7#1:
- goto inline$IoGetNextIrpStackLocation$1$label_5#1;
-
- inline$IoGetNextIrpStackLocation$1$label_3_true#1:
- inline$IoGetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$1$myVar_0);
- goto inline$IoGetNextIrpStackLocation$1$label_5#1;
-
- inline$IoGetNextIrpStackLocation$1$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$1$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$1$label_1#1;
-
- inline$IoGetNextIrpStackLocation$1$label_1#1:
- goto inline$IoGetNextIrpStackLocation$1$Return#1;
-
- inline$IoGetNextIrpStackLocation$1$Return#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_9$1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_9$1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Else#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Else#1:
- assume !raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon3#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$anon3#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_12#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_12#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_13#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_13#1:
- havoc inline$IoCopyCurrentIrpStackLocationToNext$0$$result.memcpy$25110.4$3$;
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_16#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_16#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_1#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$label_1#1:
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Then#1:
- assume raiseException;
- goto inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1;
-
- inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_6$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_6$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon16_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon16_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_9#1:
- goto inline$storm_KeInitializeEvent$0$Entry#1;
-
- inline$storm_KeInitializeEvent$0$Entry#1:
- inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
- goto inline$storm_KeInitializeEvent$0$start#1;
-
- inline$storm_KeInitializeEvent$0$start#1:
- inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
- inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12_.1;
- goto inline$storm_KeInitializeEvent$0$label_3#1;
-
- inline$storm_KeInitializeEvent$0$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12];
- call contextSwitch();
- goto inline$storm_KeInitializeEvent$0$label_1#1;
-
- inline$storm_KeInitializeEvent$0$label_1#1:
- goto inline$storm_KeInitializeEvent$0$Return#1;
-
- inline$storm_KeInitializeEvent$0$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_9$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_9$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon17_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon17_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon3#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon3#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_12#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$0$Entry#1;
-
- inline$storm_IoSetCompletionRoutine$0$Entry#1:
- inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoSetCompletionRoutine$0$start#1;
-
- inline$storm_IoSetCompletionRoutine$0$start#1:
- inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
- goto inline$storm_IoSetCompletionRoutine$0$label_3#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_3#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_4#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_4#1:
- call inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$ := storm_nondet();
- goto inline$storm_IoSetCompletionRoutine$0$label_7#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_7#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_7_true#1, inline$storm_IoSetCompletionRoutine$0$label_7_false#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_7_false#1:
- assume inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$ == 0;
- goto inline$storm_IoSetCompletionRoutine$0$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_7_true#1:
- assume inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$ != 0;
- goto inline$storm_IoSetCompletionRoutine$0$label_11#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_11#1:
- havoc raiseException;
- goto inline$storm_IoSetCompletionRoutine$0$anon6_Then#1, inline$storm_IoSetCompletionRoutine$0$anon6_Else#1;
-
- inline$storm_IoSetCompletionRoutine$0$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$0$anon3#1;
-
- inline$storm_IoSetCompletionRoutine$0$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
- call contextSwitch();
- goto inline$storm_IoSetCompletionRoutine$0$label_12#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_12#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_12_true#1, inline$storm_IoSetCompletionRoutine$0$label_12_false#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_12_false#1:
- assume 0 == 0;
- goto inline$storm_IoSetCompletionRoutine$0$label_13#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_13#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoSetCompletionRoutine$0$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_12_true#1:
- assume 0 != 0;
- goto inline$storm_IoSetCompletionRoutine$0$label_8#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_8#1:
- goto inline$IoGetNextIrpStackLocation$2$Entry#1;
-
- inline$IoGetNextIrpStackLocation$2$Entry#1:
- inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
- goto inline$IoGetNextIrpStackLocation$2$start#1;
-
- inline$IoGetNextIrpStackLocation$2$start#1:
- inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
- goto inline$IoGetNextIrpStackLocation$2$label_3#1;
-
- inline$IoGetNextIrpStackLocation$2$label_3#1:
- goto inline$IoGetNextIrpStackLocation$2$label_3_true#1, inline$IoGetNextIrpStackLocation$2$label_3_false#1;
-
- inline$IoGetNextIrpStackLocation$2$label_3_false#1:
- inline$IoGetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoGetNextIrpStackLocation$2$myVar_0);
- goto inline$IoGetNextIrpStackLocation$2$label_4#1;
-
- inline$IoGetNextIrpStackLocation$2$label_4#1:
- call inline$IoGetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$2$label_6#1;
-
- inline$IoGetNextIrpStackLocation$2$label_6#1:
- call inline$IoGetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetNextIrpStackLocation$2$label_7#1;
-
- inline$IoGetNextIrpStackLocation$2$label_7#1:
- goto inline$IoGetNextIrpStackLocation$2$label_5#1;
-
- inline$IoGetNextIrpStackLocation$2$label_3_true#1:
- inline$IoGetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoGetNextIrpStackLocation$2$myVar_0);
- goto inline$IoGetNextIrpStackLocation$2$label_5#1;
-
- inline$IoGetNextIrpStackLocation$2$label_5#1:
- havoc inline$IoGetNextIrpStackLocation$2$myNondetVar_0;
- goto inline$IoGetNextIrpStackLocation$2$label_1#1;
-
- inline$IoGetNextIrpStackLocation$2$label_1#1:
- goto inline$IoGetNextIrpStackLocation$2$Return#1;
-
- inline$IoGetNextIrpStackLocation$2$Return#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_8$1#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_8$1#1:
- goto inline$storm_IoSetCompletionRoutine$0$anon5_Then#1, inline$storm_IoSetCompletionRoutine$0$anon5_Else#1;
-
- inline$storm_IoSetCompletionRoutine$0$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_IoSetCompletionRoutine$0$anon1#1;
-
- inline$storm_IoSetCompletionRoutine$0$anon1#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_16#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_16#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_17#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_17#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_18#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_18#1:
- goto inline$storm_IoSetCompletionRoutine$0$label_1#1;
-
- inline$storm_IoSetCompletionRoutine$0$label_1#1:
- goto inline$storm_IoSetCompletionRoutine$0$Return#1;
-
- inline$storm_IoSetCompletionRoutine$0$anon5_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$0$Return#1;
-
- inline$storm_IoSetCompletionRoutine$0$anon6_Then#1:
- assume raiseException;
- goto inline$storm_IoSetCompletionRoutine$0$Return#1;
-
- inline$storm_IoSetCompletionRoutine$0$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_12$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_12$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon18_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon18_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon5#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon5#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_15#1:
- goto inline$IoGetCurrentIrpStackLocation$4$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$4$Entry#1:
- inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$IoGetCurrentIrpStackLocation$4$start#1;
-
- inline$IoGetCurrentIrpStackLocation$4$start#1:
- inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$4$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$4$label_3_true#1, inline$IoGetCurrentIrpStackLocation$4$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$4$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$4$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$4$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$4$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$4$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$4$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$4$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$4$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$4$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$4$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$4$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$4$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$4$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$4$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$4$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$4$Return#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_15$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_15$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon19_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon19_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon7#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon7#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_18#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_18#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$0$label_18_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_18_false#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_19#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_19#1:
- goto inline$storm_IoCallDriver$0$Entry#1;
-
- inline$storm_IoCallDriver$0$Entry#1:
- inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_IoCallDriver$0$start#1;
-
- inline$storm_IoCallDriver$0$start#1:
- inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$0$label_3#1;
-
- inline$storm_IoCallDriver$0$label_3#1:
- goto inline$storm_IoCallDriver$0$label_4#1;
-
- inline$storm_IoCallDriver$0$label_4#1:
- goto inline$storm_IoCallDriver$0$label_5#1;
-
- inline$storm_IoCallDriver$0$label_5#1:
- goto inline$storm_IoCallDriver$0$label_6#1;
-
- inline$storm_IoCallDriver$0$label_6#1:
- call inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$0$label_9#1;
-
- inline$storm_IoCallDriver$0$label_9#1:
- goto inline$storm_IoCallDriver$0$label_9_true#1, inline$storm_IoCallDriver$0$label_9_false#1;
-
- inline$storm_IoCallDriver$0$label_9_false#1:
- assume inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$0$label_10#1;
-
- inline$storm_IoCallDriver$0$label_9_true#1:
- assume inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$0$label_13#1;
-
- inline$storm_IoCallDriver$0$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$0$anon12_Then#1, inline$storm_IoCallDriver$0$anon12_Else#1;
-
- inline$storm_IoCallDriver$0$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$0$anon3#1;
-
- inline$storm_IoCallDriver$0$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$0$label_14#1;
-
- inline$storm_IoCallDriver$0$label_14#1:
- goto inline$storm_IoCallDriver$0$label_14_true#1, inline$storm_IoCallDriver$0$label_14_false#1;
-
- inline$storm_IoCallDriver$0$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$0$label_15#1;
-
- inline$storm_IoCallDriver$0$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$0$label_1#1;
-
- inline$storm_IoCallDriver$0$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$0$label_10#1;
-
- inline$storm_IoCallDriver$0$label_10#1:
- goto inline$IoSetNextIrpStackLocation$1$Entry#1;
-
- inline$IoSetNextIrpStackLocation$1$Entry#1:
- inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$1$start#1;
-
- inline$IoSetNextIrpStackLocation$1$start#1:
- inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$1$label_3#1;
-
- inline$IoSetNextIrpStackLocation$1$label_3#1:
- goto inline$IoSetNextIrpStackLocation$1$label_3_true#1, inline$IoSetNextIrpStackLocation$1$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$1$label_3_false#1:
- inline$IoSetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$1$myVar_0);
- goto inline$IoSetNextIrpStackLocation$1$label_4#1;
-
- inline$IoSetNextIrpStackLocation$1$label_4#1:
- call inline$IoSetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$1$label_7#1;
-
- inline$IoSetNextIrpStackLocation$1$label_7#1:
- call inline$IoSetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$1$label_8#1;
-
- inline$IoSetNextIrpStackLocation$1$label_8#1:
- goto inline$IoSetNextIrpStackLocation$1$label_5#1;
-
- inline$IoSetNextIrpStackLocation$1$label_3_true#1:
- inline$IoSetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$1$myVar_0);
- goto inline$IoSetNextIrpStackLocation$1$label_5#1;
-
- inline$IoSetNextIrpStackLocation$1$label_5#1:
- inline$IoSetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$1$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$1$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$1$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$1$label_6#1;
-
- inline$IoSetNextIrpStackLocation$1$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$1$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$1$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$1$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$1$label_1#1;
-
- inline$IoSetNextIrpStackLocation$1$label_1#1:
- goto inline$IoSetNextIrpStackLocation$1$Return#1;
-
- inline$IoSetNextIrpStackLocation$1$Return#1:
- goto inline$storm_IoCallDriver$0$label_10$1#1;
-
- inline$storm_IoCallDriver$0$label_10$1#1:
- goto inline$storm_IoCallDriver$0$anon11_Then#1, inline$storm_IoCallDriver$0$anon11_Else#1;
-
- inline$storm_IoCallDriver$0$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$0$anon1#1;
-
- inline$storm_IoCallDriver$0$anon1#1:
- goto inline$storm_IoCallDriver$0$label_18#1;
-
- inline$storm_IoCallDriver$0$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$5$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$5$Entry#1:
- inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$5$start#1;
-
- inline$IoGetCurrentIrpStackLocation$5$start#1:
- inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$5$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$5$label_3_true#1, inline$IoGetCurrentIrpStackLocation$5$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$5$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$5$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$5$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$5$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$5$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$5$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$5$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$5$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$5$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$5$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$5$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$5$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$5$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$5$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$5$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$5$Return#1:
- goto inline$storm_IoCallDriver$0$label_18$1#1;
-
- inline$storm_IoCallDriver$0$label_18$1#1:
- goto inline$storm_IoCallDriver$0$anon13_Then#1, inline$storm_IoCallDriver$0$anon13_Else#1;
-
- inline$storm_IoCallDriver$0$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$0$anon6#1;
-
- inline$storm_IoCallDriver$0$anon6#1:
- goto inline$storm_IoCallDriver$0$label_21#1;
-
- inline$storm_IoCallDriver$0$label_21#1:
- goto inline$storm_IoCallDriver$0$label_22#1;
-
- inline$storm_IoCallDriver$0$label_22#1:
- goto inline$storm_IoCallDriver$0$label_23#1;
-
- inline$storm_IoCallDriver$0$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$0$label_24#1;
-
- inline$storm_IoCallDriver$0$label_24#1:
- call inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$0$label_27#1;
-
- inline$storm_IoCallDriver$0$label_27#1:
- goto inline$storm_IoCallDriver$0$label_27_case_0#1, inline$storm_IoCallDriver$0$label_27_case_1#1, inline$storm_IoCallDriver$0$label_27_case_2#1;
-
- inline$storm_IoCallDriver$0$label_27_case_2#1:
- assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$0$label_30#1;
-
- inline$storm_IoCallDriver$0$label_30#1:
- inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$0$label_31#1;
-
- inline$storm_IoCallDriver$0$label_31#1:
- goto inline$storm_IoCallDriver$0$label_32#1;
-
- inline$storm_IoCallDriver$0$label_32#1:
- goto inline$storm_IoCallDriver$0$label_33#1;
-
- inline$storm_IoCallDriver$0$label_33#1:
- goto inline$CallCompletionRoutine$0$Entry#1;
-
- inline$CallCompletionRoutine$0$Entry#1:
- inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$0$start#1;
-
- inline$CallCompletionRoutine$0$start#1:
- inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$0$label_3#1;
-
- inline$CallCompletionRoutine$0$label_3#1:
- goto inline$CallCompletionRoutine$0$label_4#1;
-
- inline$CallCompletionRoutine$0$label_4#1:
- goto inline$CallCompletionRoutine$0$label_5#1;
-
- inline$CallCompletionRoutine$0$label_5#1:
- goto inline$CallCompletionRoutine$0$label_6#1;
-
- inline$CallCompletionRoutine$0$label_6#1:
- goto inline$CallCompletionRoutine$0$label_7#1;
-
- inline$CallCompletionRoutine$0$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$6$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$6$Entry#1:
- inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$6$start#1;
-
- inline$IoGetCurrentIrpStackLocation$6$start#1:
- inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$6$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$6$label_3_true#1, inline$IoGetCurrentIrpStackLocation$6$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$6$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$6$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$6$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$6$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$6$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$6$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$6$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$6$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$6$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$6$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$6$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$6$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$6$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$6$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$6$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$6$Return#1:
- goto inline$CallCompletionRoutine$0$label_7$1#1;
-
- inline$CallCompletionRoutine$0$label_7$1#1:
- goto inline$CallCompletionRoutine$0$anon10_Then#1, inline$CallCompletionRoutine$0$anon10_Else#1;
-
- inline$CallCompletionRoutine$0$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$0$anon1#1;
-
- inline$CallCompletionRoutine$0$anon1#1:
- goto inline$CallCompletionRoutine$0$label_10#1;
-
- inline$CallCompletionRoutine$0$label_10#1:
- goto inline$CallCompletionRoutine$0$label_11#1;
-
- inline$CallCompletionRoutine$0$label_11#1:
- havoc inline$CallCompletionRoutine$0$myNondetVar_0;
- inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$myNondetVar_0;
- goto inline$CallCompletionRoutine$0$label_12#1;
-
- inline$CallCompletionRoutine$0$label_12#1:
- havoc inline$CallCompletionRoutine$0$myNondetVar_0;
- inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$myNondetVar_0;
- goto inline$CallCompletionRoutine$0$label_13#1;
-
- inline$CallCompletionRoutine$0$label_13#1:
- havoc inline$CallCompletionRoutine$0$myNondetVar_0;
- goto inline$CallCompletionRoutine$0$label_14#1;
-
- inline$CallCompletionRoutine$0$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$7$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$7$Entry#1:
- inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$7$start#1;
-
- inline$IoGetCurrentIrpStackLocation$7$start#1:
- inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$7$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$7$label_3_true#1, inline$IoGetCurrentIrpStackLocation$7$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$7$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$7$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$7$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$7$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$7$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$7$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$7$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$7$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$7$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$7$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$7$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$7$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$7$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$7$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$7$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$7$Return#1:
- goto inline$CallCompletionRoutine$0$label_14$1#1;
-
- inline$CallCompletionRoutine$0$label_14$1#1:
- goto inline$CallCompletionRoutine$0$anon11_Then#1, inline$CallCompletionRoutine$0$anon11_Else#1;
-
- inline$CallCompletionRoutine$0$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$0$anon3#1;
-
- inline$CallCompletionRoutine$0$anon3#1:
- goto inline$CallCompletionRoutine$0$label_17#1;
-
- inline$CallCompletionRoutine$0$label_17#1:
- goto inline$CallCompletionRoutine$0$label_18#1;
-
- inline$CallCompletionRoutine$0$label_18#1:
- goto inline$CallCompletionRoutine$0$label_18_true#1, inline$CallCompletionRoutine$0$label_18_false#1;
-
- inline$CallCompletionRoutine$0$label_18_false#1:
- assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$0$label_1#1;
-
- inline$CallCompletionRoutine$0$label_18_true#1:
- assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$0$label_19#1;
-
- inline$CallCompletionRoutine$0$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$0$label_20#1;
-
- inline$CallCompletionRoutine$0$label_20#1:
- goto inline$CallCompletionRoutine$0$label_20_icall_1#1, inline$CallCompletionRoutine$0$label_20_icall_2#1, inline$CallCompletionRoutine$0$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$0$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$0$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$0$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$0$Entry#1:
- inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$0$start#1;
-
- inline$BDLSystemPowerIoCompletion$0$start#1:
- call inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$0$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_4#1:
- inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_6#1:
- inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$0$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$0$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$0$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$9$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$9$Entry#1:
- inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$9$start#1;
-
- inline$IoGetCurrentIrpStackLocation$9$start#1:
- inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$9$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$9$label_3_true#1, inline$IoGetCurrentIrpStackLocation$9$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$9$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$9$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$9$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$9$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$9$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$9$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$9$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$9$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$9$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$9$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$9$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$9$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$9$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$9$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$9$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$9$Return#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon36_Then#1, inline$BDLSystemPowerIoCompletion$0$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_15#1:
- goto inline$BDLGetDebugLevel$22$Entry#1;
-
- inline$BDLGetDebugLevel$22$Entry#1:
- goto inline$BDLGetDebugLevel$22$start#1;
-
- inline$BDLGetDebugLevel$22$start#1:
- goto inline$BDLGetDebugLevel$22$label_3#1;
-
- inline$BDLGetDebugLevel$22$label_3#1:
- havoc inline$BDLGetDebugLevel$22$myNondetVar_0;
- inline$BDLGetDebugLevel$22$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$22$myNondetVar_0;
- goto inline$BDLGetDebugLevel$22$label_1#1;
-
- inline$BDLGetDebugLevel$22$label_1#1:
- goto inline$BDLGetDebugLevel$22$Return#1;
-
- inline$BDLGetDebugLevel$22$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$22$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon37_Then#1, inline$BDLSystemPowerIoCompletion$0$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_18_true#1, inline$BDLSystemPowerIoCompletion$0$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_22#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_23#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_24#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$0$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_19#1:
- goto inline$BDLGetDebugLevel$23$Entry#1;
-
- inline$BDLGetDebugLevel$23$Entry#1:
- goto inline$BDLGetDebugLevel$23$start#1;
-
- inline$BDLGetDebugLevel$23$start#1:
- goto inline$BDLGetDebugLevel$23$label_3#1;
-
- inline$BDLGetDebugLevel$23$label_3#1:
- havoc inline$BDLGetDebugLevel$23$myNondetVar_0;
- inline$BDLGetDebugLevel$23$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$23$myNondetVar_0;
- goto inline$BDLGetDebugLevel$23$label_1#1;
-
- inline$BDLGetDebugLevel$23$label_1#1:
- goto inline$BDLGetDebugLevel$23$Return#1;
-
- inline$BDLGetDebugLevel$23$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$23$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon38_Then#1, inline$BDLSystemPowerIoCompletion$0$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_28_true#1, inline$BDLSystemPowerIoCompletion$0$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_32#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_33#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_34#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$0$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_29#1:
- goto inline$BDLGetDebugLevel$24$Entry#1;
-
- inline$BDLGetDebugLevel$24$Entry#1:
- goto inline$BDLGetDebugLevel$24$start#1;
-
- inline$BDLGetDebugLevel$24$start#1:
- goto inline$BDLGetDebugLevel$24$label_3#1;
-
- inline$BDLGetDebugLevel$24$label_3#1:
- havoc inline$BDLGetDebugLevel$24$myNondetVar_0;
- inline$BDLGetDebugLevel$24$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$24$myNondetVar_0;
- goto inline$BDLGetDebugLevel$24$label_1#1;
-
- inline$BDLGetDebugLevel$24$label_1#1:
- goto inline$BDLGetDebugLevel$24$Return#1;
-
- inline$BDLGetDebugLevel$24$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$24$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon39_Then#1, inline$BDLSystemPowerIoCompletion$0$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_38_true#1, inline$BDLSystemPowerIoCompletion$0$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_39_true#1, inline$BDLSystemPowerIoCompletion$0$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$0$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$0$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$0$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_106_true#1, inline$BDLSystemPowerIoCompletion$0$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_142#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_143#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$0$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$0$myNondetVar_0, inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$0$anon50_Then#1, inline$BDLSystemPowerIoCompletion$0$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_112#1:
- inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$0$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_113_true#1, inline$BDLSystemPowerIoCompletion$0$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$0$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_117#1:
- goto inline$BDLGetDebugLevel$31$Entry#1;
-
- inline$BDLGetDebugLevel$31$Entry#1:
- goto inline$BDLGetDebugLevel$31$start#1;
-
- inline$BDLGetDebugLevel$31$start#1:
- goto inline$BDLGetDebugLevel$31$label_3#1;
-
- inline$BDLGetDebugLevel$31$label_3#1:
- havoc inline$BDLGetDebugLevel$31$myNondetVar_0;
- inline$BDLGetDebugLevel$31$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$31$myNondetVar_0;
- goto inline$BDLGetDebugLevel$31$label_1#1;
-
- inline$BDLGetDebugLevel$31$label_1#1:
- goto inline$BDLGetDebugLevel$31$Return#1;
-
- inline$BDLGetDebugLevel$31$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$31$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon51_Then#1, inline$BDLSystemPowerIoCompletion$0$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_120_true#1, inline$BDLSystemPowerIoCompletion$0$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_124#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_125#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_126#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$0$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_121#1:
- goto inline$BDLGetDebugLevel$32$Entry#1;
-
- inline$BDLGetDebugLevel$32$Entry#1:
- goto inline$BDLGetDebugLevel$32$start#1;
-
- inline$BDLGetDebugLevel$32$start#1:
- goto inline$BDLGetDebugLevel$32$label_3#1;
-
- inline$BDLGetDebugLevel$32$label_3#1:
- havoc inline$BDLGetDebugLevel$32$myNondetVar_0;
- inline$BDLGetDebugLevel$32$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$32$myNondetVar_0;
- goto inline$BDLGetDebugLevel$32$label_1#1;
-
- inline$BDLGetDebugLevel$32$label_1#1:
- goto inline$BDLGetDebugLevel$32$Return#1;
-
- inline$BDLGetDebugLevel$32$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$32$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon52_Then#1, inline$BDLSystemPowerIoCompletion$0$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_130_true#1, inline$BDLSystemPowerIoCompletion$0$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_134#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_135#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_136#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$0$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_131#1:
- goto inline$BDLGetDebugLevel$33$Entry#1;
-
- inline$BDLGetDebugLevel$33$Entry#1:
- goto inline$BDLGetDebugLevel$33$start#1;
-
- inline$BDLGetDebugLevel$33$start#1:
- goto inline$BDLGetDebugLevel$33$label_3#1;
-
- inline$BDLGetDebugLevel$33$label_3#1:
- havoc inline$BDLGetDebugLevel$33$myNondetVar_0;
- inline$BDLGetDebugLevel$33$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$33$myNondetVar_0;
- goto inline$BDLGetDebugLevel$33$label_1#1;
-
- inline$BDLGetDebugLevel$33$label_1#1:
- goto inline$BDLGetDebugLevel$33$Return#1;
-
- inline$BDLGetDebugLevel$33$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$33$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon53_Then#1, inline$BDLSystemPowerIoCompletion$0$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_140_true#1, inline$BDLSystemPowerIoCompletion$0$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$0$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_115#1:
- inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$0$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$0$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_43#1:
- goto inline$BDLGetDebugLevel$25$Entry#1;
-
- inline$BDLGetDebugLevel$25$Entry#1:
- goto inline$BDLGetDebugLevel$25$start#1;
-
- inline$BDLGetDebugLevel$25$start#1:
- goto inline$BDLGetDebugLevel$25$label_3#1;
-
- inline$BDLGetDebugLevel$25$label_3#1:
- havoc inline$BDLGetDebugLevel$25$myNondetVar_0;
- inline$BDLGetDebugLevel$25$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$25$myNondetVar_0;
- goto inline$BDLGetDebugLevel$25$label_1#1;
-
- inline$BDLGetDebugLevel$25$label_1#1:
- goto inline$BDLGetDebugLevel$25$Return#1;
-
- inline$BDLGetDebugLevel$25$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$25$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon40_Then#1, inline$BDLSystemPowerIoCompletion$0$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_46_true#1, inline$BDLSystemPowerIoCompletion$0$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_50#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_51#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_52#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$0$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_47#1:
- goto inline$BDLGetDebugLevel$26$Entry#1;
-
- inline$BDLGetDebugLevel$26$Entry#1:
- goto inline$BDLGetDebugLevel$26$start#1;
-
- inline$BDLGetDebugLevel$26$start#1:
- goto inline$BDLGetDebugLevel$26$label_3#1;
-
- inline$BDLGetDebugLevel$26$label_3#1:
- havoc inline$BDLGetDebugLevel$26$myNondetVar_0;
- inline$BDLGetDebugLevel$26$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$26$myNondetVar_0;
- goto inline$BDLGetDebugLevel$26$label_1#1;
-
- inline$BDLGetDebugLevel$26$label_1#1:
- goto inline$BDLGetDebugLevel$26$Return#1;
-
- inline$BDLGetDebugLevel$26$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$26$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon41_Then#1, inline$BDLSystemPowerIoCompletion$0$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_56_true#1, inline$BDLSystemPowerIoCompletion$0$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_60#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_61#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_62#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$0$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_57#1:
- goto inline$BDLGetDebugLevel$27$Entry#1;
-
- inline$BDLGetDebugLevel$27$Entry#1:
- goto inline$BDLGetDebugLevel$27$start#1;
-
- inline$BDLGetDebugLevel$27$start#1:
- goto inline$BDLGetDebugLevel$27$label_3#1;
-
- inline$BDLGetDebugLevel$27$label_3#1:
- havoc inline$BDLGetDebugLevel$27$myNondetVar_0;
- inline$BDLGetDebugLevel$27$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$27$myNondetVar_0;
- goto inline$BDLGetDebugLevel$27$label_1#1;
-
- inline$BDLGetDebugLevel$27$label_1#1:
- goto inline$BDLGetDebugLevel$27$Return#1;
-
- inline$BDLGetDebugLevel$27$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$27$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon42_Then#1, inline$BDLSystemPowerIoCompletion$0$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_66_true#1, inline$BDLSystemPowerIoCompletion$0$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$0$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$0$anon43_Then#1, inline$BDLSystemPowerIoCompletion$0$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$0$anon44_Then#1, inline$BDLSystemPowerIoCompletion$0$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_74#1:
- goto inline$storm_IoCompleteRequest$2$Entry#1;
-
- inline$storm_IoCompleteRequest$2$Entry#1:
- inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$2$start#1;
-
- inline$storm_IoCompleteRequest$2$start#1:
- inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$2$label_3#1;
-
- inline$storm_IoCompleteRequest$2$label_3#1:
- call inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$2$label_6#1;
-
- inline$storm_IoCompleteRequest$2$label_6#1:
- goto inline$storm_IoCompleteRequest$2$label_6_true#1, inline$storm_IoCompleteRequest$2$label_6_false#1;
-
- inline$storm_IoCompleteRequest$2$label_6_false#1:
- assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$2$label_7#1;
-
- inline$storm_IoCompleteRequest$2$label_6_true#1:
- assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$2$label_8#1;
-
- inline$storm_IoCompleteRequest$2$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$2$anon3_Then#1, inline$storm_IoCompleteRequest$2$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$2$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$2$anon1#1;
-
- inline$storm_IoCompleteRequest$2$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$2$label_9#1;
-
- inline$storm_IoCompleteRequest$2$label_9#1:
- goto inline$storm_IoCompleteRequest$2$label_9_true#1, inline$storm_IoCompleteRequest$2$label_9_false#1;
-
- inline$storm_IoCompleteRequest$2$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$2$label_10#1;
-
- inline$storm_IoCompleteRequest$2$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$2$label_1#1;
-
- inline$storm_IoCompleteRequest$2$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$2$label_7#1;
-
- inline$storm_IoCompleteRequest$2$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$2$label_1#1;
-
- inline$storm_IoCompleteRequest$2$label_1#1:
- goto inline$storm_IoCompleteRequest$2$Return#1;
-
- inline$storm_IoCompleteRequest$2$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$2$Return#1;
-
- inline$storm_IoCompleteRequest$2$Return#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon45_Then#1, inline$BDLSystemPowerIoCompletion$0$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$0$anon46_Then#1, inline$BDLSystemPowerIoCompletion$0$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_80#1:
- goto inline$BDLGetDebugLevel$28$Entry#1;
-
- inline$BDLGetDebugLevel$28$Entry#1:
- goto inline$BDLGetDebugLevel$28$start#1;
-
- inline$BDLGetDebugLevel$28$start#1:
- goto inline$BDLGetDebugLevel$28$label_3#1;
-
- inline$BDLGetDebugLevel$28$label_3#1:
- havoc inline$BDLGetDebugLevel$28$myNondetVar_0;
- inline$BDLGetDebugLevel$28$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$28$myNondetVar_0;
- goto inline$BDLGetDebugLevel$28$label_1#1;
-
- inline$BDLGetDebugLevel$28$label_1#1:
- goto inline$BDLGetDebugLevel$28$Return#1;
-
- inline$BDLGetDebugLevel$28$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$28$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon47_Then#1, inline$BDLSystemPowerIoCompletion$0$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_83_true#1, inline$BDLSystemPowerIoCompletion$0$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_87#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_88#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_89#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$0$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_84#1:
- goto inline$BDLGetDebugLevel$29$Entry#1;
-
- inline$BDLGetDebugLevel$29$Entry#1:
- goto inline$BDLGetDebugLevel$29$start#1;
-
- inline$BDLGetDebugLevel$29$start#1:
- goto inline$BDLGetDebugLevel$29$label_3#1;
-
- inline$BDLGetDebugLevel$29$label_3#1:
- havoc inline$BDLGetDebugLevel$29$myNondetVar_0;
- inline$BDLGetDebugLevel$29$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$29$myNondetVar_0;
- goto inline$BDLGetDebugLevel$29$label_1#1;
-
- inline$BDLGetDebugLevel$29$label_1#1:
- goto inline$BDLGetDebugLevel$29$Return#1;
-
- inline$BDLGetDebugLevel$29$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$29$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon48_Then#1, inline$BDLSystemPowerIoCompletion$0$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_93_true#1, inline$BDLSystemPowerIoCompletion$0$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_97#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_98#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_99#1:
- call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$0$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$0$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_94#1:
- goto inline$BDLGetDebugLevel$30$Entry#1;
-
- inline$BDLGetDebugLevel$30$Entry#1:
- goto inline$BDLGetDebugLevel$30$start#1;
-
- inline$BDLGetDebugLevel$30$start#1:
- goto inline$BDLGetDebugLevel$30$label_3#1;
-
- inline$BDLGetDebugLevel$30$label_3#1:
- havoc inline$BDLGetDebugLevel$30$myNondetVar_0;
- inline$BDLGetDebugLevel$30$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$30$myNondetVar_0;
- goto inline$BDLGetDebugLevel$30$label_1#1;
-
- inline$BDLGetDebugLevel$30$label_1#1:
- goto inline$BDLGetDebugLevel$30$Return#1;
-
- inline$BDLGetDebugLevel$30$Return#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$30$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$0$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$0$anon49_Then#1, inline$BDLSystemPowerIoCompletion$0$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_103_true#1, inline$BDLSystemPowerIoCompletion$0$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$0$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$0$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_104#1:
- inline$BDLSystemPowerIoCompletion$0$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$0$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$0$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$0$Return#1;
-
- inline$BDLSystemPowerIoCompletion$0$Return#1:
- inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$0$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$0$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$0$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$0$anon14_Then#1, inline$CallCompletionRoutine$0$anon14_Else#1;
-
- inline$CallCompletionRoutine$0$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$0$anon9#1;
-
- inline$CallCompletionRoutine$0$anon9#1:
- goto inline$CallCompletionRoutine$0$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$0$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$0$Return#1;
-
- inline$CallCompletionRoutine$0$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$0$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$0$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$0$Entry#1:
- inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$0$start#1;
-
- inline$BDLDevicePowerIoCompletion$0$start#1:
- call inline$BDLDevicePowerIoCompletion$0$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$0$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_4#1:
- inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_6#1:
- inline$BDLDevicePowerIoCompletion$0$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$0$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$0$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$0$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$8$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$8$Entry#1:
- inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$8$start#1;
-
- inline$IoGetCurrentIrpStackLocation$8$start#1:
- inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$8$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$8$label_3_true#1, inline$IoGetCurrentIrpStackLocation$8$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$8$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$8$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$8$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$8$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$8$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$8$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$8$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$8$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$8$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$8$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$8$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$8$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$8$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$8$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$8$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$8$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$8$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$8$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$8$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon30_Then#1, inline$BDLDevicePowerIoCompletion$0$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_13#1:
- inline$BDLDevicePowerIoCompletion$0$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$0$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$0$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_17#1:
- goto inline$BDLGetDebugLevel$13$Entry#1;
-
- inline$BDLGetDebugLevel$13$Entry#1:
- goto inline$BDLGetDebugLevel$13$start#1;
-
- inline$BDLGetDebugLevel$13$start#1:
- goto inline$BDLGetDebugLevel$13$label_3#1;
-
- inline$BDLGetDebugLevel$13$label_3#1:
- havoc inline$BDLGetDebugLevel$13$myNondetVar_0;
- inline$BDLGetDebugLevel$13$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$13$myNondetVar_0;
- goto inline$BDLGetDebugLevel$13$label_1#1;
-
- inline$BDLGetDebugLevel$13$label_1#1:
- goto inline$BDLGetDebugLevel$13$Return#1;
-
- inline$BDLGetDebugLevel$13$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$13$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon31_Then#1, inline$BDLDevicePowerIoCompletion$0$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_20_true#1, inline$BDLDevicePowerIoCompletion$0$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_24#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_25#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_26#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$0$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_21#1:
- goto inline$BDLGetDebugLevel$14$Entry#1;
-
- inline$BDLGetDebugLevel$14$Entry#1:
- goto inline$BDLGetDebugLevel$14$start#1;
-
- inline$BDLGetDebugLevel$14$start#1:
- goto inline$BDLGetDebugLevel$14$label_3#1;
-
- inline$BDLGetDebugLevel$14$label_3#1:
- havoc inline$BDLGetDebugLevel$14$myNondetVar_0;
- inline$BDLGetDebugLevel$14$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$14$myNondetVar_0;
- goto inline$BDLGetDebugLevel$14$label_1#1;
-
- inline$BDLGetDebugLevel$14$label_1#1:
- goto inline$BDLGetDebugLevel$14$Return#1;
-
- inline$BDLGetDebugLevel$14$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$14$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon32_Then#1, inline$BDLDevicePowerIoCompletion$0$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_30_true#1, inline$BDLDevicePowerIoCompletion$0$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_34#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_35#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_36#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$0$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_31#1:
- goto inline$BDLGetDebugLevel$15$Entry#1;
-
- inline$BDLGetDebugLevel$15$Entry#1:
- goto inline$BDLGetDebugLevel$15$start#1;
-
- inline$BDLGetDebugLevel$15$start#1:
- goto inline$BDLGetDebugLevel$15$label_3#1;
-
- inline$BDLGetDebugLevel$15$label_3#1:
- havoc inline$BDLGetDebugLevel$15$myNondetVar_0;
- inline$BDLGetDebugLevel$15$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$15$myNondetVar_0;
- goto inline$BDLGetDebugLevel$15$label_1#1;
-
- inline$BDLGetDebugLevel$15$label_1#1:
- goto inline$BDLGetDebugLevel$15$Return#1;
-
- inline$BDLGetDebugLevel$15$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$15$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon33_Then#1, inline$BDLDevicePowerIoCompletion$0$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_40_true#1, inline$BDLDevicePowerIoCompletion$0$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_41_true#1, inline$BDLDevicePowerIoCompletion$0$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$0$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$0$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_44_true#1, inline$BDLDevicePowerIoCompletion$0$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$0$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_45_true#1, inline$BDLDevicePowerIoCompletion$0$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$0$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$0$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$0$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$0$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$0$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$0$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_54#1:
- inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$0$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_55_true#1, inline$BDLDevicePowerIoCompletion$0$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_56#1:
- call inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$0$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$0$anon34_Then#1, inline$BDLDevicePowerIoCompletion$0$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_59#1:
- goto inline$BDLGetDebugLevel$16$Entry#1;
-
- inline$BDLGetDebugLevel$16$Entry#1:
- goto inline$BDLGetDebugLevel$16$start#1;
-
- inline$BDLGetDebugLevel$16$start#1:
- goto inline$BDLGetDebugLevel$16$label_3#1;
-
- inline$BDLGetDebugLevel$16$label_3#1:
- havoc inline$BDLGetDebugLevel$16$myNondetVar_0;
- inline$BDLGetDebugLevel$16$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$16$myNondetVar_0;
- goto inline$BDLGetDebugLevel$16$label_1#1;
-
- inline$BDLGetDebugLevel$16$label_1#1:
- goto inline$BDLGetDebugLevel$16$Return#1;
-
- inline$BDLGetDebugLevel$16$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$16$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon35_Then#1, inline$BDLDevicePowerIoCompletion$0$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_62_true#1, inline$BDLDevicePowerIoCompletion$0$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_66#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_67#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_68#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$0$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_63#1:
- goto inline$BDLGetDebugLevel$17$Entry#1;
-
- inline$BDLGetDebugLevel$17$Entry#1:
- goto inline$BDLGetDebugLevel$17$start#1;
-
- inline$BDLGetDebugLevel$17$start#1:
- goto inline$BDLGetDebugLevel$17$label_3#1;
-
- inline$BDLGetDebugLevel$17$label_3#1:
- havoc inline$BDLGetDebugLevel$17$myNondetVar_0;
- inline$BDLGetDebugLevel$17$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$17$myNondetVar_0;
- goto inline$BDLGetDebugLevel$17$label_1#1;
-
- inline$BDLGetDebugLevel$17$label_1#1:
- goto inline$BDLGetDebugLevel$17$Return#1;
-
- inline$BDLGetDebugLevel$17$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$17$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon36_Then#1, inline$BDLDevicePowerIoCompletion$0$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_72_true#1, inline$BDLDevicePowerIoCompletion$0$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_76#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_77#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_78#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$0$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_73#1:
- goto inline$BDLGetDebugLevel$18$Entry#1;
-
- inline$BDLGetDebugLevel$18$Entry#1:
- goto inline$BDLGetDebugLevel$18$start#1;
-
- inline$BDLGetDebugLevel$18$start#1:
- goto inline$BDLGetDebugLevel$18$label_3#1;
-
- inline$BDLGetDebugLevel$18$label_3#1:
- havoc inline$BDLGetDebugLevel$18$myNondetVar_0;
- inline$BDLGetDebugLevel$18$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$18$myNondetVar_0;
- goto inline$BDLGetDebugLevel$18$label_1#1;
-
- inline$BDLGetDebugLevel$18$label_1#1:
- goto inline$BDLGetDebugLevel$18$Return#1;
-
- inline$BDLGetDebugLevel$18$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$18$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon37_Then#1, inline$BDLDevicePowerIoCompletion$0$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_82_true#1, inline$BDLDevicePowerIoCompletion$0$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$0$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$0$anon38_Then#1, inline$BDLDevicePowerIoCompletion$0$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$0$anon39_Then#1, inline$BDLDevicePowerIoCompletion$0$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_92#1:
- goto inline$storm_IoCompleteRequest$1$Entry#1;
-
- inline$storm_IoCompleteRequest$1$Entry#1:
- inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$1$start#1;
-
- inline$storm_IoCompleteRequest$1$start#1:
- inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$1$label_3#1;
-
- inline$storm_IoCompleteRequest$1$label_3#1:
- call inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$1$label_6#1;
-
- inline$storm_IoCompleteRequest$1$label_6#1:
- goto inline$storm_IoCompleteRequest$1$label_6_true#1, inline$storm_IoCompleteRequest$1$label_6_false#1;
-
- inline$storm_IoCompleteRequest$1$label_6_false#1:
- assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$1$label_7#1;
-
- inline$storm_IoCompleteRequest$1$label_6_true#1:
- assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$1$label_8#1;
-
- inline$storm_IoCompleteRequest$1$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$1$anon3_Then#1, inline$storm_IoCompleteRequest$1$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$1$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$1$anon1#1;
-
- inline$storm_IoCompleteRequest$1$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$1$label_9#1;
-
- inline$storm_IoCompleteRequest$1$label_9#1:
- goto inline$storm_IoCompleteRequest$1$label_9_true#1, inline$storm_IoCompleteRequest$1$label_9_false#1;
-
- inline$storm_IoCompleteRequest$1$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$1$label_10#1;
-
- inline$storm_IoCompleteRequest$1$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$1$label_1#1;
-
- inline$storm_IoCompleteRequest$1$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$1$label_7#1;
-
- inline$storm_IoCompleteRequest$1$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$1$label_1#1;
-
- inline$storm_IoCompleteRequest$1$label_1#1:
- goto inline$storm_IoCompleteRequest$1$Return#1;
-
- inline$storm_IoCompleteRequest$1$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$1$Return#1;
-
- inline$storm_IoCompleteRequest$1$Return#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon40_Then#1, inline$BDLDevicePowerIoCompletion$0$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$0$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$0$anon41_Then#1, inline$BDLDevicePowerIoCompletion$0$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_98#1:
- goto inline$BDLGetDebugLevel$19$Entry#1;
-
- inline$BDLGetDebugLevel$19$Entry#1:
- goto inline$BDLGetDebugLevel$19$start#1;
-
- inline$BDLGetDebugLevel$19$start#1:
- goto inline$BDLGetDebugLevel$19$label_3#1;
-
- inline$BDLGetDebugLevel$19$label_3#1:
- havoc inline$BDLGetDebugLevel$19$myNondetVar_0;
- inline$BDLGetDebugLevel$19$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$19$myNondetVar_0;
- goto inline$BDLGetDebugLevel$19$label_1#1;
-
- inline$BDLGetDebugLevel$19$label_1#1:
- goto inline$BDLGetDebugLevel$19$Return#1;
-
- inline$BDLGetDebugLevel$19$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$19$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon42_Then#1, inline$BDLDevicePowerIoCompletion$0$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_101_true#1, inline$BDLDevicePowerIoCompletion$0$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_105#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_106#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_107#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$0$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_102#1:
- goto inline$BDLGetDebugLevel$20$Entry#1;
-
- inline$BDLGetDebugLevel$20$Entry#1:
- goto inline$BDLGetDebugLevel$20$start#1;
-
- inline$BDLGetDebugLevel$20$start#1:
- goto inline$BDLGetDebugLevel$20$label_3#1;
-
- inline$BDLGetDebugLevel$20$label_3#1:
- havoc inline$BDLGetDebugLevel$20$myNondetVar_0;
- inline$BDLGetDebugLevel$20$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$20$myNondetVar_0;
- goto inline$BDLGetDebugLevel$20$label_1#1;
-
- inline$BDLGetDebugLevel$20$label_1#1:
- goto inline$BDLGetDebugLevel$20$Return#1;
-
- inline$BDLGetDebugLevel$20$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$20$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon43_Then#1, inline$BDLDevicePowerIoCompletion$0$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_111_true#1, inline$BDLDevicePowerIoCompletion$0$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_115#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_116#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_117#1:
- call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$0$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$0$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_112#1:
- goto inline$BDLGetDebugLevel$21$Entry#1;
-
- inline$BDLGetDebugLevel$21$Entry#1:
- goto inline$BDLGetDebugLevel$21$start#1;
-
- inline$BDLGetDebugLevel$21$start#1:
- goto inline$BDLGetDebugLevel$21$label_3#1;
-
- inline$BDLGetDebugLevel$21$label_3#1:
- havoc inline$BDLGetDebugLevel$21$myNondetVar_0;
- inline$BDLGetDebugLevel$21$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$21$myNondetVar_0;
- goto inline$BDLGetDebugLevel$21$label_1#1;
-
- inline$BDLGetDebugLevel$21$label_1#1:
- goto inline$BDLGetDebugLevel$21$Return#1;
-
- inline$BDLGetDebugLevel$21$Return#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$21$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$0$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$0$anon44_Then#1, inline$BDLDevicePowerIoCompletion$0$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_121_true#1, inline$BDLDevicePowerIoCompletion$0$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$0$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$0$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_122#1:
- inline$BDLDevicePowerIoCompletion$0$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$0$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$0$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$0$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$0$Return#1;
-
- inline$BDLDevicePowerIoCompletion$0$Return#1:
- inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$0$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$0$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$0$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$0$anon13_Then#1, inline$CallCompletionRoutine$0$anon13_Else#1;
-
- inline$CallCompletionRoutine$0$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$0$anon7#1;
-
- inline$CallCompletionRoutine$0$anon7#1:
- goto inline$CallCompletionRoutine$0$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$0$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$0$Return#1;
-
- inline$CallCompletionRoutine$0$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$0$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$0$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$0$Entry#1:
- inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$0$start#1;
-
- inline$BDLCallDriverCompletionRoutine$0$start#1:
- inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$0$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$0$label_3_true#1, inline$BDLCallDriverCompletionRoutine$0$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$0$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$0$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$0$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$0$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_6#1:
- goto inline$storm_KeSetEvent$0$Entry#1;
-
- inline$storm_KeSetEvent$0$Entry#1:
- inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$0$start#1;
-
- inline$storm_KeSetEvent$0$start#1:
- inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$0$label_3#1;
-
- inline$storm_KeSetEvent$0$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$0$label_1#1;
-
- inline$storm_KeSetEvent$0$label_1#1:
- goto inline$storm_KeSetEvent$0$Return#1;
-
- inline$storm_KeSetEvent$0$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$0$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$0$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$0$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$0$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$0$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$0$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$0$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_9#1:
- inline$BDLCallDriverCompletionRoutine$0$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$0$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$0$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$0$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$0$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$0$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$0$Return#1:
- inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$0$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$0$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$0$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$0$anon12_Then#1, inline$CallCompletionRoutine$0$anon12_Else#1;
-
- inline$CallCompletionRoutine$0$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$0$anon5#1;
-
- inline$CallCompletionRoutine$0$anon5#1:
- goto inline$CallCompletionRoutine$0$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$0$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$0$label_23#1;
-
- inline$CallCompletionRoutine$0$label_23#1:
- inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$0$label_24#1;
-
- inline$CallCompletionRoutine$0$label_24#1:
- goto inline$CallCompletionRoutine$0$label_24_true#1, inline$CallCompletionRoutine$0$label_24_false#1;
-
- inline$CallCompletionRoutine$0$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$0$label_1#1;
-
- inline$CallCompletionRoutine$0$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$0$label_25#1;
-
- inline$CallCompletionRoutine$0$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$0$label_1#1;
-
- inline$CallCompletionRoutine$0$label_1#1:
- goto inline$CallCompletionRoutine$0$Return#1;
-
- inline$CallCompletionRoutine$0$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$0$Return#1;
-
- inline$CallCompletionRoutine$0$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$0$Return#1;
-
- inline$CallCompletionRoutine$0$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$0$Return#1;
-
- inline$CallCompletionRoutine$0$Return#1:
- goto inline$storm_IoCallDriver$0$label_33$1#1;
-
- inline$storm_IoCallDriver$0$label_33$1#1:
- goto inline$storm_IoCallDriver$0$anon14_Then#1, inline$storm_IoCallDriver$0$anon14_Else#1;
-
- inline$storm_IoCallDriver$0$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$0$anon8#1;
-
- inline$storm_IoCallDriver$0$anon8#1:
- goto inline$storm_IoCallDriver$0$label_36#1;
-
- inline$storm_IoCallDriver$0$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$0$Return#1;
-
- inline$storm_IoCallDriver$0$label_27_case_1#1:
- assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$0$label_29#1;
-
- inline$storm_IoCallDriver$0$label_29#1:
- inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$0$label_37#1;
-
- inline$storm_IoCallDriver$0$label_37#1:
- goto inline$storm_IoCallDriver$0$label_38#1;
-
- inline$storm_IoCallDriver$0$label_38#1:
- goto inline$storm_IoCallDriver$0$label_39#1;
-
- inline$storm_IoCallDriver$0$label_39#1:
- goto inline$CallCompletionRoutine$1$Entry#1;
-
- inline$CallCompletionRoutine$1$Entry#1:
- inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$1$start#1;
-
- inline$CallCompletionRoutine$1$start#1:
- inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$1$label_3#1;
-
- inline$CallCompletionRoutine$1$label_3#1:
- goto inline$CallCompletionRoutine$1$label_4#1;
-
- inline$CallCompletionRoutine$1$label_4#1:
- goto inline$CallCompletionRoutine$1$label_5#1;
-
- inline$CallCompletionRoutine$1$label_5#1:
- goto inline$CallCompletionRoutine$1$label_6#1;
-
- inline$CallCompletionRoutine$1$label_6#1:
- goto inline$CallCompletionRoutine$1$label_7#1;
-
- inline$CallCompletionRoutine$1$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$10$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$10$Entry#1:
- inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$10$start#1;
-
- inline$IoGetCurrentIrpStackLocation$10$start#1:
- inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$10$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$10$label_3_true#1, inline$IoGetCurrentIrpStackLocation$10$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$10$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$10$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$10$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$10$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$10$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$10$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$10$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$10$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$10$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$10$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$10$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$10$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$10$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$10$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$10$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$10$Return#1:
- goto inline$CallCompletionRoutine$1$label_7$1#1;
-
- inline$CallCompletionRoutine$1$label_7$1#1:
- goto inline$CallCompletionRoutine$1$anon10_Then#1, inline$CallCompletionRoutine$1$anon10_Else#1;
-
- inline$CallCompletionRoutine$1$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$1$anon1#1;
-
- inline$CallCompletionRoutine$1$anon1#1:
- goto inline$CallCompletionRoutine$1$label_10#1;
-
- inline$CallCompletionRoutine$1$label_10#1:
- goto inline$CallCompletionRoutine$1$label_11#1;
-
- inline$CallCompletionRoutine$1$label_11#1:
- havoc inline$CallCompletionRoutine$1$myNondetVar_0;
- inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$myNondetVar_0;
- goto inline$CallCompletionRoutine$1$label_12#1;
-
- inline$CallCompletionRoutine$1$label_12#1:
- havoc inline$CallCompletionRoutine$1$myNondetVar_0;
- inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$myNondetVar_0;
- goto inline$CallCompletionRoutine$1$label_13#1;
-
- inline$CallCompletionRoutine$1$label_13#1:
- havoc inline$CallCompletionRoutine$1$myNondetVar_0;
- goto inline$CallCompletionRoutine$1$label_14#1;
-
- inline$CallCompletionRoutine$1$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$11$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$11$Entry#1:
- inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$11$start#1;
-
- inline$IoGetCurrentIrpStackLocation$11$start#1:
- inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$11$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$11$label_3_true#1, inline$IoGetCurrentIrpStackLocation$11$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$11$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$11$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$11$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$11$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$11$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$11$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$11$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$11$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$11$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$11$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$11$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$11$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$11$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$11$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$11$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$11$Return#1:
- goto inline$CallCompletionRoutine$1$label_14$1#1;
-
- inline$CallCompletionRoutine$1$label_14$1#1:
- goto inline$CallCompletionRoutine$1$anon11_Then#1, inline$CallCompletionRoutine$1$anon11_Else#1;
-
- inline$CallCompletionRoutine$1$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$1$anon3#1;
-
- inline$CallCompletionRoutine$1$anon3#1:
- goto inline$CallCompletionRoutine$1$label_17#1;
-
- inline$CallCompletionRoutine$1$label_17#1:
- goto inline$CallCompletionRoutine$1$label_18#1;
-
- inline$CallCompletionRoutine$1$label_18#1:
- goto inline$CallCompletionRoutine$1$label_18_true#1, inline$CallCompletionRoutine$1$label_18_false#1;
-
- inline$CallCompletionRoutine$1$label_18_false#1:
- assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$1$label_1#1;
-
- inline$CallCompletionRoutine$1$label_18_true#1:
- assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$1$label_19#1;
-
- inline$CallCompletionRoutine$1$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$1$label_20#1;
-
- inline$CallCompletionRoutine$1$label_20#1:
- goto inline$CallCompletionRoutine$1$label_20_icall_1#1, inline$CallCompletionRoutine$1$label_20_icall_2#1, inline$CallCompletionRoutine$1$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$1$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$1$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$1$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$1$Entry#1:
- inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$1$start#1;
-
- inline$BDLSystemPowerIoCompletion$1$start#1:
- call inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$1$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_4#1:
- inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_6#1:
- inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$1$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$1$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$1$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$13$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$13$Entry#1:
- inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$13$start#1;
-
- inline$IoGetCurrentIrpStackLocation$13$start#1:
- inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$13$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$13$label_3_true#1, inline$IoGetCurrentIrpStackLocation$13$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$13$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$13$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$13$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$13$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$13$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$13$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$13$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$13$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$13$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$13$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$13$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$13$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$13$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$13$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$13$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$13$Return#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon36_Then#1, inline$BDLSystemPowerIoCompletion$1$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_15#1:
- goto inline$BDLGetDebugLevel$43$Entry#1;
-
- inline$BDLGetDebugLevel$43$Entry#1:
- goto inline$BDLGetDebugLevel$43$start#1;
-
- inline$BDLGetDebugLevel$43$start#1:
- goto inline$BDLGetDebugLevel$43$label_3#1;
-
- inline$BDLGetDebugLevel$43$label_3#1:
- havoc inline$BDLGetDebugLevel$43$myNondetVar_0;
- inline$BDLGetDebugLevel$43$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$43$myNondetVar_0;
- goto inline$BDLGetDebugLevel$43$label_1#1;
-
- inline$BDLGetDebugLevel$43$label_1#1:
- goto inline$BDLGetDebugLevel$43$Return#1;
-
- inline$BDLGetDebugLevel$43$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$43$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon37_Then#1, inline$BDLSystemPowerIoCompletion$1$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_18_true#1, inline$BDLSystemPowerIoCompletion$1$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_22#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_23#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_24#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$1$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_19#1:
- goto inline$BDLGetDebugLevel$44$Entry#1;
-
- inline$BDLGetDebugLevel$44$Entry#1:
- goto inline$BDLGetDebugLevel$44$start#1;
-
- inline$BDLGetDebugLevel$44$start#1:
- goto inline$BDLGetDebugLevel$44$label_3#1;
-
- inline$BDLGetDebugLevel$44$label_3#1:
- havoc inline$BDLGetDebugLevel$44$myNondetVar_0;
- inline$BDLGetDebugLevel$44$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$44$myNondetVar_0;
- goto inline$BDLGetDebugLevel$44$label_1#1;
-
- inline$BDLGetDebugLevel$44$label_1#1:
- goto inline$BDLGetDebugLevel$44$Return#1;
-
- inline$BDLGetDebugLevel$44$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$44$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon38_Then#1, inline$BDLSystemPowerIoCompletion$1$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_28_true#1, inline$BDLSystemPowerIoCompletion$1$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_32#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_33#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_34#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$1$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_29#1:
- goto inline$BDLGetDebugLevel$45$Entry#1;
-
- inline$BDLGetDebugLevel$45$Entry#1:
- goto inline$BDLGetDebugLevel$45$start#1;
-
- inline$BDLGetDebugLevel$45$start#1:
- goto inline$BDLGetDebugLevel$45$label_3#1;
-
- inline$BDLGetDebugLevel$45$label_3#1:
- havoc inline$BDLGetDebugLevel$45$myNondetVar_0;
- inline$BDLGetDebugLevel$45$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$45$myNondetVar_0;
- goto inline$BDLGetDebugLevel$45$label_1#1;
-
- inline$BDLGetDebugLevel$45$label_1#1:
- goto inline$BDLGetDebugLevel$45$Return#1;
-
- inline$BDLGetDebugLevel$45$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$45$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon39_Then#1, inline$BDLSystemPowerIoCompletion$1$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_38_true#1, inline$BDLSystemPowerIoCompletion$1$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_39_true#1, inline$BDLSystemPowerIoCompletion$1$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$1$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$1$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$1$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_106_true#1, inline$BDLSystemPowerIoCompletion$1$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_142#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_143#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$1$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$1$myNondetVar_0, inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$1$anon50_Then#1, inline$BDLSystemPowerIoCompletion$1$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_112#1:
- inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$1$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_113_true#1, inline$BDLSystemPowerIoCompletion$1$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$1$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_117#1:
- goto inline$BDLGetDebugLevel$52$Entry#1;
-
- inline$BDLGetDebugLevel$52$Entry#1:
- goto inline$BDLGetDebugLevel$52$start#1;
-
- inline$BDLGetDebugLevel$52$start#1:
- goto inline$BDLGetDebugLevel$52$label_3#1;
-
- inline$BDLGetDebugLevel$52$label_3#1:
- havoc inline$BDLGetDebugLevel$52$myNondetVar_0;
- inline$BDLGetDebugLevel$52$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$52$myNondetVar_0;
- goto inline$BDLGetDebugLevel$52$label_1#1;
-
- inline$BDLGetDebugLevel$52$label_1#1:
- goto inline$BDLGetDebugLevel$52$Return#1;
-
- inline$BDLGetDebugLevel$52$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$52$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon51_Then#1, inline$BDLSystemPowerIoCompletion$1$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_120_true#1, inline$BDLSystemPowerIoCompletion$1$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_124#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_125#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_126#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$1$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_121#1:
- goto inline$BDLGetDebugLevel$53$Entry#1;
-
- inline$BDLGetDebugLevel$53$Entry#1:
- goto inline$BDLGetDebugLevel$53$start#1;
-
- inline$BDLGetDebugLevel$53$start#1:
- goto inline$BDLGetDebugLevel$53$label_3#1;
-
- inline$BDLGetDebugLevel$53$label_3#1:
- havoc inline$BDLGetDebugLevel$53$myNondetVar_0;
- inline$BDLGetDebugLevel$53$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$53$myNondetVar_0;
- goto inline$BDLGetDebugLevel$53$label_1#1;
-
- inline$BDLGetDebugLevel$53$label_1#1:
- goto inline$BDLGetDebugLevel$53$Return#1;
-
- inline$BDLGetDebugLevel$53$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$53$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon52_Then#1, inline$BDLSystemPowerIoCompletion$1$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_130_true#1, inline$BDLSystemPowerIoCompletion$1$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_134#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_135#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_136#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$1$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_131#1:
- goto inline$BDLGetDebugLevel$54$Entry#1;
-
- inline$BDLGetDebugLevel$54$Entry#1:
- goto inline$BDLGetDebugLevel$54$start#1;
-
- inline$BDLGetDebugLevel$54$start#1:
- goto inline$BDLGetDebugLevel$54$label_3#1;
-
- inline$BDLGetDebugLevel$54$label_3#1:
- havoc inline$BDLGetDebugLevel$54$myNondetVar_0;
- inline$BDLGetDebugLevel$54$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$54$myNondetVar_0;
- goto inline$BDLGetDebugLevel$54$label_1#1;
-
- inline$BDLGetDebugLevel$54$label_1#1:
- goto inline$BDLGetDebugLevel$54$Return#1;
-
- inline$BDLGetDebugLevel$54$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$54$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon53_Then#1, inline$BDLSystemPowerIoCompletion$1$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_140_true#1, inline$BDLSystemPowerIoCompletion$1$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$1$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_115#1:
- inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$1$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$1$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_43#1:
- goto inline$BDLGetDebugLevel$46$Entry#1;
-
- inline$BDLGetDebugLevel$46$Entry#1:
- goto inline$BDLGetDebugLevel$46$start#1;
-
- inline$BDLGetDebugLevel$46$start#1:
- goto inline$BDLGetDebugLevel$46$label_3#1;
-
- inline$BDLGetDebugLevel$46$label_3#1:
- havoc inline$BDLGetDebugLevel$46$myNondetVar_0;
- inline$BDLGetDebugLevel$46$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$46$myNondetVar_0;
- goto inline$BDLGetDebugLevel$46$label_1#1;
-
- inline$BDLGetDebugLevel$46$label_1#1:
- goto inline$BDLGetDebugLevel$46$Return#1;
-
- inline$BDLGetDebugLevel$46$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$46$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon40_Then#1, inline$BDLSystemPowerIoCompletion$1$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_46_true#1, inline$BDLSystemPowerIoCompletion$1$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_50#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_51#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_52#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$1$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_47#1:
- goto inline$BDLGetDebugLevel$47$Entry#1;
-
- inline$BDLGetDebugLevel$47$Entry#1:
- goto inline$BDLGetDebugLevel$47$start#1;
-
- inline$BDLGetDebugLevel$47$start#1:
- goto inline$BDLGetDebugLevel$47$label_3#1;
-
- inline$BDLGetDebugLevel$47$label_3#1:
- havoc inline$BDLGetDebugLevel$47$myNondetVar_0;
- inline$BDLGetDebugLevel$47$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$47$myNondetVar_0;
- goto inline$BDLGetDebugLevel$47$label_1#1;
-
- inline$BDLGetDebugLevel$47$label_1#1:
- goto inline$BDLGetDebugLevel$47$Return#1;
-
- inline$BDLGetDebugLevel$47$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$47$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon41_Then#1, inline$BDLSystemPowerIoCompletion$1$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_56_true#1, inline$BDLSystemPowerIoCompletion$1$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_60#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_61#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_62#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$1$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_57#1:
- goto inline$BDLGetDebugLevel$48$Entry#1;
-
- inline$BDLGetDebugLevel$48$Entry#1:
- goto inline$BDLGetDebugLevel$48$start#1;
-
- inline$BDLGetDebugLevel$48$start#1:
- goto inline$BDLGetDebugLevel$48$label_3#1;
-
- inline$BDLGetDebugLevel$48$label_3#1:
- havoc inline$BDLGetDebugLevel$48$myNondetVar_0;
- inline$BDLGetDebugLevel$48$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$48$myNondetVar_0;
- goto inline$BDLGetDebugLevel$48$label_1#1;
-
- inline$BDLGetDebugLevel$48$label_1#1:
- goto inline$BDLGetDebugLevel$48$Return#1;
-
- inline$BDLGetDebugLevel$48$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$48$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon42_Then#1, inline$BDLSystemPowerIoCompletion$1$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_66_true#1, inline$BDLSystemPowerIoCompletion$1$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$1$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$1$anon43_Then#1, inline$BDLSystemPowerIoCompletion$1$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$1$anon44_Then#1, inline$BDLSystemPowerIoCompletion$1$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_74#1:
- goto inline$storm_IoCompleteRequest$4$Entry#1;
-
- inline$storm_IoCompleteRequest$4$Entry#1:
- inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$4$start#1;
-
- inline$storm_IoCompleteRequest$4$start#1:
- inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$4$label_3#1;
-
- inline$storm_IoCompleteRequest$4$label_3#1:
- call inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$4$label_6#1;
-
- inline$storm_IoCompleteRequest$4$label_6#1:
- goto inline$storm_IoCompleteRequest$4$label_6_true#1, inline$storm_IoCompleteRequest$4$label_6_false#1;
-
- inline$storm_IoCompleteRequest$4$label_6_false#1:
- assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$4$label_7#1;
-
- inline$storm_IoCompleteRequest$4$label_6_true#1:
- assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$4$label_8#1;
-
- inline$storm_IoCompleteRequest$4$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$4$anon3_Then#1, inline$storm_IoCompleteRequest$4$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$4$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$4$anon1#1;
-
- inline$storm_IoCompleteRequest$4$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$4$label_9#1;
-
- inline$storm_IoCompleteRequest$4$label_9#1:
- goto inline$storm_IoCompleteRequest$4$label_9_true#1, inline$storm_IoCompleteRequest$4$label_9_false#1;
-
- inline$storm_IoCompleteRequest$4$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$4$label_10#1;
-
- inline$storm_IoCompleteRequest$4$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$4$label_1#1;
-
- inline$storm_IoCompleteRequest$4$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$4$label_7#1;
-
- inline$storm_IoCompleteRequest$4$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$4$label_1#1;
-
- inline$storm_IoCompleteRequest$4$label_1#1:
- goto inline$storm_IoCompleteRequest$4$Return#1;
-
- inline$storm_IoCompleteRequest$4$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$4$Return#1;
-
- inline$storm_IoCompleteRequest$4$Return#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon45_Then#1, inline$BDLSystemPowerIoCompletion$1$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$1$anon46_Then#1, inline$BDLSystemPowerIoCompletion$1$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_80#1:
- goto inline$BDLGetDebugLevel$49$Entry#1;
-
- inline$BDLGetDebugLevel$49$Entry#1:
- goto inline$BDLGetDebugLevel$49$start#1;
-
- inline$BDLGetDebugLevel$49$start#1:
- goto inline$BDLGetDebugLevel$49$label_3#1;
-
- inline$BDLGetDebugLevel$49$label_3#1:
- havoc inline$BDLGetDebugLevel$49$myNondetVar_0;
- inline$BDLGetDebugLevel$49$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$49$myNondetVar_0;
- goto inline$BDLGetDebugLevel$49$label_1#1;
-
- inline$BDLGetDebugLevel$49$label_1#1:
- goto inline$BDLGetDebugLevel$49$Return#1;
-
- inline$BDLGetDebugLevel$49$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$49$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon47_Then#1, inline$BDLSystemPowerIoCompletion$1$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_83_true#1, inline$BDLSystemPowerIoCompletion$1$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_87#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_88#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_89#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$1$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_84#1:
- goto inline$BDLGetDebugLevel$50$Entry#1;
-
- inline$BDLGetDebugLevel$50$Entry#1:
- goto inline$BDLGetDebugLevel$50$start#1;
-
- inline$BDLGetDebugLevel$50$start#1:
- goto inline$BDLGetDebugLevel$50$label_3#1;
-
- inline$BDLGetDebugLevel$50$label_3#1:
- havoc inline$BDLGetDebugLevel$50$myNondetVar_0;
- inline$BDLGetDebugLevel$50$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$50$myNondetVar_0;
- goto inline$BDLGetDebugLevel$50$label_1#1;
-
- inline$BDLGetDebugLevel$50$label_1#1:
- goto inline$BDLGetDebugLevel$50$Return#1;
-
- inline$BDLGetDebugLevel$50$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$50$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon48_Then#1, inline$BDLSystemPowerIoCompletion$1$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_93_true#1, inline$BDLSystemPowerIoCompletion$1$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_97#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_98#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_99#1:
- call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$1$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$1$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_94#1:
- goto inline$BDLGetDebugLevel$51$Entry#1;
-
- inline$BDLGetDebugLevel$51$Entry#1:
- goto inline$BDLGetDebugLevel$51$start#1;
-
- inline$BDLGetDebugLevel$51$start#1:
- goto inline$BDLGetDebugLevel$51$label_3#1;
-
- inline$BDLGetDebugLevel$51$label_3#1:
- havoc inline$BDLGetDebugLevel$51$myNondetVar_0;
- inline$BDLGetDebugLevel$51$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$51$myNondetVar_0;
- goto inline$BDLGetDebugLevel$51$label_1#1;
-
- inline$BDLGetDebugLevel$51$label_1#1:
- goto inline$BDLGetDebugLevel$51$Return#1;
-
- inline$BDLGetDebugLevel$51$Return#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$51$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$1$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$1$anon49_Then#1, inline$BDLSystemPowerIoCompletion$1$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_103_true#1, inline$BDLSystemPowerIoCompletion$1$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$1$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$1$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_104#1:
- inline$BDLSystemPowerIoCompletion$1$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$1$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$1$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$1$Return#1;
-
- inline$BDLSystemPowerIoCompletion$1$Return#1:
- inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$1$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$1$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$1$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$1$anon14_Then#1, inline$CallCompletionRoutine$1$anon14_Else#1;
-
- inline$CallCompletionRoutine$1$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$1$anon9#1;
-
- inline$CallCompletionRoutine$1$anon9#1:
- goto inline$CallCompletionRoutine$1$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$1$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$1$Return#1;
-
- inline$CallCompletionRoutine$1$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$1$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$1$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$1$Entry#1:
- inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$1$start#1;
-
- inline$BDLDevicePowerIoCompletion$1$start#1:
- call inline$BDLDevicePowerIoCompletion$1$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$1$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_4#1:
- inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_6#1:
- inline$BDLDevicePowerIoCompletion$1$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$1$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$1$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$1$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$12$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$12$Entry#1:
- inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$12$start#1;
-
- inline$IoGetCurrentIrpStackLocation$12$start#1:
- inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$12$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$12$label_3_true#1, inline$IoGetCurrentIrpStackLocation$12$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$12$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$12$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$12$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$12$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$12$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$12$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$12$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$12$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$12$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$12$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$12$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$12$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$12$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$12$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$12$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$12$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$12$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$12$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$12$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon30_Then#1, inline$BDLDevicePowerIoCompletion$1$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_13#1:
- inline$BDLDevicePowerIoCompletion$1$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$1$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$1$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_17#1:
- goto inline$BDLGetDebugLevel$34$Entry#1;
-
- inline$BDLGetDebugLevel$34$Entry#1:
- goto inline$BDLGetDebugLevel$34$start#1;
-
- inline$BDLGetDebugLevel$34$start#1:
- goto inline$BDLGetDebugLevel$34$label_3#1;
-
- inline$BDLGetDebugLevel$34$label_3#1:
- havoc inline$BDLGetDebugLevel$34$myNondetVar_0;
- inline$BDLGetDebugLevel$34$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$34$myNondetVar_0;
- goto inline$BDLGetDebugLevel$34$label_1#1;
-
- inline$BDLGetDebugLevel$34$label_1#1:
- goto inline$BDLGetDebugLevel$34$Return#1;
-
- inline$BDLGetDebugLevel$34$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$34$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon31_Then#1, inline$BDLDevicePowerIoCompletion$1$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_20_true#1, inline$BDLDevicePowerIoCompletion$1$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_24#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_25#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_26#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$1$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_21#1:
- goto inline$BDLGetDebugLevel$35$Entry#1;
-
- inline$BDLGetDebugLevel$35$Entry#1:
- goto inline$BDLGetDebugLevel$35$start#1;
-
- inline$BDLGetDebugLevel$35$start#1:
- goto inline$BDLGetDebugLevel$35$label_3#1;
-
- inline$BDLGetDebugLevel$35$label_3#1:
- havoc inline$BDLGetDebugLevel$35$myNondetVar_0;
- inline$BDLGetDebugLevel$35$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$35$myNondetVar_0;
- goto inline$BDLGetDebugLevel$35$label_1#1;
-
- inline$BDLGetDebugLevel$35$label_1#1:
- goto inline$BDLGetDebugLevel$35$Return#1;
-
- inline$BDLGetDebugLevel$35$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$35$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon32_Then#1, inline$BDLDevicePowerIoCompletion$1$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_30_true#1, inline$BDLDevicePowerIoCompletion$1$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_34#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_35#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_36#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$1$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_31#1:
- goto inline$BDLGetDebugLevel$36$Entry#1;
-
- inline$BDLGetDebugLevel$36$Entry#1:
- goto inline$BDLGetDebugLevel$36$start#1;
-
- inline$BDLGetDebugLevel$36$start#1:
- goto inline$BDLGetDebugLevel$36$label_3#1;
-
- inline$BDLGetDebugLevel$36$label_3#1:
- havoc inline$BDLGetDebugLevel$36$myNondetVar_0;
- inline$BDLGetDebugLevel$36$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$36$myNondetVar_0;
- goto inline$BDLGetDebugLevel$36$label_1#1;
-
- inline$BDLGetDebugLevel$36$label_1#1:
- goto inline$BDLGetDebugLevel$36$Return#1;
-
- inline$BDLGetDebugLevel$36$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$36$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon33_Then#1, inline$BDLDevicePowerIoCompletion$1$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_40_true#1, inline$BDLDevicePowerIoCompletion$1$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_41_true#1, inline$BDLDevicePowerIoCompletion$1$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$1$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$1$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_44_true#1, inline$BDLDevicePowerIoCompletion$1$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$1$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_45_true#1, inline$BDLDevicePowerIoCompletion$1$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$1$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$1$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$1$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$1$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$1$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$1$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_54#1:
- inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$1$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_55_true#1, inline$BDLDevicePowerIoCompletion$1$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_56#1:
- call inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$1$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$1$anon34_Then#1, inline$BDLDevicePowerIoCompletion$1$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_59#1:
- goto inline$BDLGetDebugLevel$37$Entry#1;
-
- inline$BDLGetDebugLevel$37$Entry#1:
- goto inline$BDLGetDebugLevel$37$start#1;
-
- inline$BDLGetDebugLevel$37$start#1:
- goto inline$BDLGetDebugLevel$37$label_3#1;
-
- inline$BDLGetDebugLevel$37$label_3#1:
- havoc inline$BDLGetDebugLevel$37$myNondetVar_0;
- inline$BDLGetDebugLevel$37$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$37$myNondetVar_0;
- goto inline$BDLGetDebugLevel$37$label_1#1;
-
- inline$BDLGetDebugLevel$37$label_1#1:
- goto inline$BDLGetDebugLevel$37$Return#1;
-
- inline$BDLGetDebugLevel$37$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$37$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon35_Then#1, inline$BDLDevicePowerIoCompletion$1$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_62_true#1, inline$BDLDevicePowerIoCompletion$1$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_66#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_67#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_68#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$1$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_63#1:
- goto inline$BDLGetDebugLevel$38$Entry#1;
-
- inline$BDLGetDebugLevel$38$Entry#1:
- goto inline$BDLGetDebugLevel$38$start#1;
-
- inline$BDLGetDebugLevel$38$start#1:
- goto inline$BDLGetDebugLevel$38$label_3#1;
-
- inline$BDLGetDebugLevel$38$label_3#1:
- havoc inline$BDLGetDebugLevel$38$myNondetVar_0;
- inline$BDLGetDebugLevel$38$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$38$myNondetVar_0;
- goto inline$BDLGetDebugLevel$38$label_1#1;
-
- inline$BDLGetDebugLevel$38$label_1#1:
- goto inline$BDLGetDebugLevel$38$Return#1;
-
- inline$BDLGetDebugLevel$38$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$38$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon36_Then#1, inline$BDLDevicePowerIoCompletion$1$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_72_true#1, inline$BDLDevicePowerIoCompletion$1$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_76#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_77#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_78#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$1$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_73#1:
- goto inline$BDLGetDebugLevel$39$Entry#1;
-
- inline$BDLGetDebugLevel$39$Entry#1:
- goto inline$BDLGetDebugLevel$39$start#1;
-
- inline$BDLGetDebugLevel$39$start#1:
- goto inline$BDLGetDebugLevel$39$label_3#1;
-
- inline$BDLGetDebugLevel$39$label_3#1:
- havoc inline$BDLGetDebugLevel$39$myNondetVar_0;
- inline$BDLGetDebugLevel$39$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$39$myNondetVar_0;
- goto inline$BDLGetDebugLevel$39$label_1#1;
-
- inline$BDLGetDebugLevel$39$label_1#1:
- goto inline$BDLGetDebugLevel$39$Return#1;
-
- inline$BDLGetDebugLevel$39$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$39$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon37_Then#1, inline$BDLDevicePowerIoCompletion$1$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_82_true#1, inline$BDLDevicePowerIoCompletion$1$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$1$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$1$anon38_Then#1, inline$BDLDevicePowerIoCompletion$1$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$1$anon39_Then#1, inline$BDLDevicePowerIoCompletion$1$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_92#1:
- goto inline$storm_IoCompleteRequest$3$Entry#1;
-
- inline$storm_IoCompleteRequest$3$Entry#1:
- inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$3$start#1;
-
- inline$storm_IoCompleteRequest$3$start#1:
- inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$3$label_3#1;
-
- inline$storm_IoCompleteRequest$3$label_3#1:
- call inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$3$label_6#1;
-
- inline$storm_IoCompleteRequest$3$label_6#1:
- goto inline$storm_IoCompleteRequest$3$label_6_true#1, inline$storm_IoCompleteRequest$3$label_6_false#1;
-
- inline$storm_IoCompleteRequest$3$label_6_false#1:
- assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$3$label_7#1;
-
- inline$storm_IoCompleteRequest$3$label_6_true#1:
- assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$3$label_8#1;
-
- inline$storm_IoCompleteRequest$3$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$3$anon3_Then#1, inline$storm_IoCompleteRequest$3$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$3$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$3$anon1#1;
-
- inline$storm_IoCompleteRequest$3$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$3$label_9#1;
-
- inline$storm_IoCompleteRequest$3$label_9#1:
- goto inline$storm_IoCompleteRequest$3$label_9_true#1, inline$storm_IoCompleteRequest$3$label_9_false#1;
-
- inline$storm_IoCompleteRequest$3$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$3$label_10#1;
-
- inline$storm_IoCompleteRequest$3$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$3$label_1#1;
-
- inline$storm_IoCompleteRequest$3$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$3$label_7#1;
-
- inline$storm_IoCompleteRequest$3$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$3$label_1#1;
-
- inline$storm_IoCompleteRequest$3$label_1#1:
- goto inline$storm_IoCompleteRequest$3$Return#1;
-
- inline$storm_IoCompleteRequest$3$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$3$Return#1;
-
- inline$storm_IoCompleteRequest$3$Return#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon40_Then#1, inline$BDLDevicePowerIoCompletion$1$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$1$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$1$anon41_Then#1, inline$BDLDevicePowerIoCompletion$1$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_98#1:
- goto inline$BDLGetDebugLevel$40$Entry#1;
-
- inline$BDLGetDebugLevel$40$Entry#1:
- goto inline$BDLGetDebugLevel$40$start#1;
-
- inline$BDLGetDebugLevel$40$start#1:
- goto inline$BDLGetDebugLevel$40$label_3#1;
-
- inline$BDLGetDebugLevel$40$label_3#1:
- havoc inline$BDLGetDebugLevel$40$myNondetVar_0;
- inline$BDLGetDebugLevel$40$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$40$myNondetVar_0;
- goto inline$BDLGetDebugLevel$40$label_1#1;
-
- inline$BDLGetDebugLevel$40$label_1#1:
- goto inline$BDLGetDebugLevel$40$Return#1;
-
- inline$BDLGetDebugLevel$40$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$40$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon42_Then#1, inline$BDLDevicePowerIoCompletion$1$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_101_true#1, inline$BDLDevicePowerIoCompletion$1$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_105#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_106#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_107#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$1$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_102#1:
- goto inline$BDLGetDebugLevel$41$Entry#1;
-
- inline$BDLGetDebugLevel$41$Entry#1:
- goto inline$BDLGetDebugLevel$41$start#1;
-
- inline$BDLGetDebugLevel$41$start#1:
- goto inline$BDLGetDebugLevel$41$label_3#1;
-
- inline$BDLGetDebugLevel$41$label_3#1:
- havoc inline$BDLGetDebugLevel$41$myNondetVar_0;
- inline$BDLGetDebugLevel$41$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$41$myNondetVar_0;
- goto inline$BDLGetDebugLevel$41$label_1#1;
-
- inline$BDLGetDebugLevel$41$label_1#1:
- goto inline$BDLGetDebugLevel$41$Return#1;
-
- inline$BDLGetDebugLevel$41$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$41$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon43_Then#1, inline$BDLDevicePowerIoCompletion$1$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_111_true#1, inline$BDLDevicePowerIoCompletion$1$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_115#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_116#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_117#1:
- call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$1$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$1$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_112#1:
- goto inline$BDLGetDebugLevel$42$Entry#1;
-
- inline$BDLGetDebugLevel$42$Entry#1:
- goto inline$BDLGetDebugLevel$42$start#1;
-
- inline$BDLGetDebugLevel$42$start#1:
- goto inline$BDLGetDebugLevel$42$label_3#1;
-
- inline$BDLGetDebugLevel$42$label_3#1:
- havoc inline$BDLGetDebugLevel$42$myNondetVar_0;
- inline$BDLGetDebugLevel$42$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$42$myNondetVar_0;
- goto inline$BDLGetDebugLevel$42$label_1#1;
-
- inline$BDLGetDebugLevel$42$label_1#1:
- goto inline$BDLGetDebugLevel$42$Return#1;
-
- inline$BDLGetDebugLevel$42$Return#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$42$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$1$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$1$anon44_Then#1, inline$BDLDevicePowerIoCompletion$1$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_121_true#1, inline$BDLDevicePowerIoCompletion$1$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$1$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$1$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_122#1:
- inline$BDLDevicePowerIoCompletion$1$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$1$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$1$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$1$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$1$Return#1;
-
- inline$BDLDevicePowerIoCompletion$1$Return#1:
- inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$1$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$1$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$1$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$1$anon13_Then#1, inline$CallCompletionRoutine$1$anon13_Else#1;
-
- inline$CallCompletionRoutine$1$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$1$anon7#1;
-
- inline$CallCompletionRoutine$1$anon7#1:
- goto inline$CallCompletionRoutine$1$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$1$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$1$Return#1;
-
- inline$CallCompletionRoutine$1$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$1$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$1$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$1$Entry#1:
- inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$1$start#1;
-
- inline$BDLCallDriverCompletionRoutine$1$start#1:
- inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$1$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$1$label_3_true#1, inline$BDLCallDriverCompletionRoutine$1$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$1$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$1$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$1$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$1$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_6#1:
- goto inline$storm_KeSetEvent$1$Entry#1;
-
- inline$storm_KeSetEvent$1$Entry#1:
- inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$1$start#1;
-
- inline$storm_KeSetEvent$1$start#1:
- inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$1$label_3#1;
-
- inline$storm_KeSetEvent$1$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$1$label_1#1;
-
- inline$storm_KeSetEvent$1$label_1#1:
- goto inline$storm_KeSetEvent$1$Return#1;
-
- inline$storm_KeSetEvent$1$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$1$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$1$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$1$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$1$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$1$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$1$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$1$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_9#1:
- inline$BDLCallDriverCompletionRoutine$1$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$1$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$1$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$1$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$1$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$1$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$1$Return#1:
- inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$1$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$1$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$1$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$1$anon12_Then#1, inline$CallCompletionRoutine$1$anon12_Else#1;
-
- inline$CallCompletionRoutine$1$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$1$anon5#1;
-
- inline$CallCompletionRoutine$1$anon5#1:
- goto inline$CallCompletionRoutine$1$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$1$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$1$label_23#1;
-
- inline$CallCompletionRoutine$1$label_23#1:
- inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$1$label_24#1;
-
- inline$CallCompletionRoutine$1$label_24#1:
- goto inline$CallCompletionRoutine$1$label_24_true#1, inline$CallCompletionRoutine$1$label_24_false#1;
-
- inline$CallCompletionRoutine$1$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$1$label_1#1;
-
- inline$CallCompletionRoutine$1$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$1$label_25#1;
-
- inline$CallCompletionRoutine$1$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$1$label_1#1;
-
- inline$CallCompletionRoutine$1$label_1#1:
- goto inline$CallCompletionRoutine$1$Return#1;
-
- inline$CallCompletionRoutine$1$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$1$Return#1;
-
- inline$CallCompletionRoutine$1$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$1$Return#1;
-
- inline$CallCompletionRoutine$1$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$1$Return#1;
-
- inline$CallCompletionRoutine$1$Return#1:
- goto inline$storm_IoCallDriver$0$label_39$1#1;
-
- inline$storm_IoCallDriver$0$label_39$1#1:
- goto inline$storm_IoCallDriver$0$anon15_Then#1, inline$storm_IoCallDriver$0$anon15_Else#1;
-
- inline$storm_IoCallDriver$0$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$0$anon10#1;
-
- inline$storm_IoCallDriver$0$anon10#1:
- goto inline$storm_IoCallDriver$0$label_36#1;
-
- inline$storm_IoCallDriver$0$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$0$Return#1;
-
- inline$storm_IoCallDriver$0$label_27_case_0#1:
- assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$0$label_28#1;
-
- inline$storm_IoCallDriver$0$label_28#1:
- inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$0$label_42#1;
-
- inline$storm_IoCallDriver$0$label_42#1:
- goto inline$storm_IoCallDriver$0$label_43#1;
-
- inline$storm_IoCallDriver$0$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$0$label_36#1;
-
- inline$storm_IoCallDriver$0$label_36#1:
- inline$storm_IoCallDriver$0$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$0$label_1#1;
-
- inline$storm_IoCallDriver$0$label_1#1:
- goto inline$storm_IoCallDriver$0$Return#1;
-
- inline$storm_IoCallDriver$0$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$0$Return#1;
-
- inline$storm_IoCallDriver$0$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$0$Return#1;
-
- inline$storm_IoCallDriver$0$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$0$Return#1;
-
- inline$storm_IoCallDriver$0$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$0$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_19$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_19$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon20_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon20_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon9#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon9#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_42#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_42#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_IoCallDriver$108.29$4$;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon20_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_18_true#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0, 22);
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_22#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_22#1:
- call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon21_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon21_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon11#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon11#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_25#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_25#1:
- goto inline$storm_PoCallDriver$0$Entry#1;
-
- inline$storm_PoCallDriver$0$Entry#1:
- inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
- goto inline$storm_PoCallDriver$0$start#1;
-
- inline$storm_PoCallDriver$0$start#1:
- inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8_.1;
- goto inline$storm_PoCallDriver$0$label_3#1;
-
- inline$storm_PoCallDriver$0$label_3#1:
- goto inline$storm_IoCallDriver$1$Entry#1;
-
- inline$storm_IoCallDriver$1$Entry#1:
- inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8;
- goto inline$storm_IoCallDriver$1$start#1;
-
- inline$storm_IoCallDriver$1$start#1:
- inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$1$label_3#1;
-
- inline$storm_IoCallDriver$1$label_3#1:
- goto inline$storm_IoCallDriver$1$label_4#1;
-
- inline$storm_IoCallDriver$1$label_4#1:
- goto inline$storm_IoCallDriver$1$label_5#1;
-
- inline$storm_IoCallDriver$1$label_5#1:
- goto inline$storm_IoCallDriver$1$label_6#1;
-
- inline$storm_IoCallDriver$1$label_6#1:
- call inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$1$label_9#1;
-
- inline$storm_IoCallDriver$1$label_9#1:
- goto inline$storm_IoCallDriver$1$label_9_true#1, inline$storm_IoCallDriver$1$label_9_false#1;
-
- inline$storm_IoCallDriver$1$label_9_false#1:
- assume inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$1$label_10#1;
-
- inline$storm_IoCallDriver$1$label_9_true#1:
- assume inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$1$label_13#1;
-
- inline$storm_IoCallDriver$1$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$1$anon12_Then#1, inline$storm_IoCallDriver$1$anon12_Else#1;
-
- inline$storm_IoCallDriver$1$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$1$anon3#1;
-
- inline$storm_IoCallDriver$1$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$1$label_14#1;
-
- inline$storm_IoCallDriver$1$label_14#1:
- goto inline$storm_IoCallDriver$1$label_14_true#1, inline$storm_IoCallDriver$1$label_14_false#1;
-
- inline$storm_IoCallDriver$1$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$1$label_15#1;
-
- inline$storm_IoCallDriver$1$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$1$label_1#1;
-
- inline$storm_IoCallDriver$1$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$1$label_10#1;
-
- inline$storm_IoCallDriver$1$label_10#1:
- goto inline$IoSetNextIrpStackLocation$2$Entry#1;
-
- inline$IoSetNextIrpStackLocation$2$Entry#1:
- inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$2$start#1;
-
- inline$IoSetNextIrpStackLocation$2$start#1:
- inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$2$label_3#1;
-
- inline$IoSetNextIrpStackLocation$2$label_3#1:
- goto inline$IoSetNextIrpStackLocation$2$label_3_true#1, inline$IoSetNextIrpStackLocation$2$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$2$label_3_false#1:
- inline$IoSetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$2$myVar_0);
- goto inline$IoSetNextIrpStackLocation$2$label_4#1;
-
- inline$IoSetNextIrpStackLocation$2$label_4#1:
- call inline$IoSetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$2$label_7#1;
-
- inline$IoSetNextIrpStackLocation$2$label_7#1:
- call inline$IoSetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$2$label_8#1;
-
- inline$IoSetNextIrpStackLocation$2$label_8#1:
- goto inline$IoSetNextIrpStackLocation$2$label_5#1;
-
- inline$IoSetNextIrpStackLocation$2$label_3_true#1:
- inline$IoSetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$2$myVar_0);
- goto inline$IoSetNextIrpStackLocation$2$label_5#1;
-
- inline$IoSetNextIrpStackLocation$2$label_5#1:
- inline$IoSetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$2$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$2$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$2$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$2$label_6#1;
-
- inline$IoSetNextIrpStackLocation$2$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$2$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$2$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$2$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$2$label_1#1;
-
- inline$IoSetNextIrpStackLocation$2$label_1#1:
- goto inline$IoSetNextIrpStackLocation$2$Return#1;
-
- inline$IoSetNextIrpStackLocation$2$Return#1:
- goto inline$storm_IoCallDriver$1$label_10$1#1;
-
- inline$storm_IoCallDriver$1$label_10$1#1:
- goto inline$storm_IoCallDriver$1$anon11_Then#1, inline$storm_IoCallDriver$1$anon11_Else#1;
-
- inline$storm_IoCallDriver$1$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$1$anon1#1;
-
- inline$storm_IoCallDriver$1$anon1#1:
- goto inline$storm_IoCallDriver$1$label_18#1;
-
- inline$storm_IoCallDriver$1$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$14$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$14$Entry#1:
- inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$14$start#1;
-
- inline$IoGetCurrentIrpStackLocation$14$start#1:
- inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$14$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$14$label_3_true#1, inline$IoGetCurrentIrpStackLocation$14$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$14$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$14$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$14$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$14$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$14$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$14$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$14$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$14$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$14$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$14$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$14$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$14$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$14$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$14$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$14$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$14$Return#1:
- goto inline$storm_IoCallDriver$1$label_18$1#1;
-
- inline$storm_IoCallDriver$1$label_18$1#1:
- goto inline$storm_IoCallDriver$1$anon13_Then#1, inline$storm_IoCallDriver$1$anon13_Else#1;
-
- inline$storm_IoCallDriver$1$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$1$anon6#1;
-
- inline$storm_IoCallDriver$1$anon6#1:
- goto inline$storm_IoCallDriver$1$label_21#1;
-
- inline$storm_IoCallDriver$1$label_21#1:
- goto inline$storm_IoCallDriver$1$label_22#1;
-
- inline$storm_IoCallDriver$1$label_22#1:
- goto inline$storm_IoCallDriver$1$label_23#1;
-
- inline$storm_IoCallDriver$1$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$1$label_24#1;
-
- inline$storm_IoCallDriver$1$label_24#1:
- call inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$1$label_27#1;
-
- inline$storm_IoCallDriver$1$label_27#1:
- goto inline$storm_IoCallDriver$1$label_27_case_0#1, inline$storm_IoCallDriver$1$label_27_case_1#1, inline$storm_IoCallDriver$1$label_27_case_2#1;
-
- inline$storm_IoCallDriver$1$label_27_case_2#1:
- assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$1$label_30#1;
-
- inline$storm_IoCallDriver$1$label_30#1:
- inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$1$label_31#1;
-
- inline$storm_IoCallDriver$1$label_31#1:
- goto inline$storm_IoCallDriver$1$label_32#1;
-
- inline$storm_IoCallDriver$1$label_32#1:
- goto inline$storm_IoCallDriver$1$label_33#1;
-
- inline$storm_IoCallDriver$1$label_33#1:
- goto inline$CallCompletionRoutine$2$Entry#1;
-
- inline$CallCompletionRoutine$2$Entry#1:
- inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$2$start#1;
-
- inline$CallCompletionRoutine$2$start#1:
- inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$2$label_3#1;
-
- inline$CallCompletionRoutine$2$label_3#1:
- goto inline$CallCompletionRoutine$2$label_4#1;
-
- inline$CallCompletionRoutine$2$label_4#1:
- goto inline$CallCompletionRoutine$2$label_5#1;
-
- inline$CallCompletionRoutine$2$label_5#1:
- goto inline$CallCompletionRoutine$2$label_6#1;
-
- inline$CallCompletionRoutine$2$label_6#1:
- goto inline$CallCompletionRoutine$2$label_7#1;
-
- inline$CallCompletionRoutine$2$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$15$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$15$Entry#1:
- inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$15$start#1;
-
- inline$IoGetCurrentIrpStackLocation$15$start#1:
- inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$15$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$15$label_3_true#1, inline$IoGetCurrentIrpStackLocation$15$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$15$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$15$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$15$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$15$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$15$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$15$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$15$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$15$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$15$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$15$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$15$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$15$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$15$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$15$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$15$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$15$Return#1:
- goto inline$CallCompletionRoutine$2$label_7$1#1;
-
- inline$CallCompletionRoutine$2$label_7$1#1:
- goto inline$CallCompletionRoutine$2$anon10_Then#1, inline$CallCompletionRoutine$2$anon10_Else#1;
-
- inline$CallCompletionRoutine$2$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$2$anon1#1;
-
- inline$CallCompletionRoutine$2$anon1#1:
- goto inline$CallCompletionRoutine$2$label_10#1;
-
- inline$CallCompletionRoutine$2$label_10#1:
- goto inline$CallCompletionRoutine$2$label_11#1;
-
- inline$CallCompletionRoutine$2$label_11#1:
- havoc inline$CallCompletionRoutine$2$myNondetVar_0;
- inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$myNondetVar_0;
- goto inline$CallCompletionRoutine$2$label_12#1;
-
- inline$CallCompletionRoutine$2$label_12#1:
- havoc inline$CallCompletionRoutine$2$myNondetVar_0;
- inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$myNondetVar_0;
- goto inline$CallCompletionRoutine$2$label_13#1;
-
- inline$CallCompletionRoutine$2$label_13#1:
- havoc inline$CallCompletionRoutine$2$myNondetVar_0;
- goto inline$CallCompletionRoutine$2$label_14#1;
-
- inline$CallCompletionRoutine$2$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$16$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$16$Entry#1:
- inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$16$start#1;
-
- inline$IoGetCurrentIrpStackLocation$16$start#1:
- inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$16$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$16$label_3_true#1, inline$IoGetCurrentIrpStackLocation$16$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$16$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$16$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$16$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$16$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$16$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$16$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$16$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$16$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$16$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$16$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$16$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$16$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$16$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$16$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$16$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$16$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$16$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$16$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$16$Return#1:
- goto inline$CallCompletionRoutine$2$label_14$1#1;
-
- inline$CallCompletionRoutine$2$label_14$1#1:
- goto inline$CallCompletionRoutine$2$anon11_Then#1, inline$CallCompletionRoutine$2$anon11_Else#1;
-
- inline$CallCompletionRoutine$2$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$2$anon3#1;
-
- inline$CallCompletionRoutine$2$anon3#1:
- goto inline$CallCompletionRoutine$2$label_17#1;
-
- inline$CallCompletionRoutine$2$label_17#1:
- goto inline$CallCompletionRoutine$2$label_18#1;
-
- inline$CallCompletionRoutine$2$label_18#1:
- goto inline$CallCompletionRoutine$2$label_18_true#1, inline$CallCompletionRoutine$2$label_18_false#1;
-
- inline$CallCompletionRoutine$2$label_18_false#1:
- assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$2$label_1#1;
-
- inline$CallCompletionRoutine$2$label_18_true#1:
- assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$2$label_19#1;
-
- inline$CallCompletionRoutine$2$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$2$label_20#1;
-
- inline$CallCompletionRoutine$2$label_20#1:
- goto inline$CallCompletionRoutine$2$label_20_icall_1#1, inline$CallCompletionRoutine$2$label_20_icall_2#1, inline$CallCompletionRoutine$2$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$2$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$2$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$2$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$2$Entry#1:
- inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$2$start#1;
-
- inline$BDLSystemPowerIoCompletion$2$start#1:
- call inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$2$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_4#1:
- inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_6#1:
- inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$2$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$2$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$2$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$18$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$18$Entry#1:
- inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$18$start#1;
-
- inline$IoGetCurrentIrpStackLocation$18$start#1:
- inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$18$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$18$label_3_true#1, inline$IoGetCurrentIrpStackLocation$18$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$18$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$18$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$18$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$18$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$18$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$18$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$18$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$18$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$18$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$18$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$18$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$18$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$18$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$18$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$18$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$18$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$18$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$18$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$18$Return#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon36_Then#1, inline$BDLSystemPowerIoCompletion$2$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_15#1:
- goto inline$BDLGetDebugLevel$64$Entry#1;
-
- inline$BDLGetDebugLevel$64$Entry#1:
- goto inline$BDLGetDebugLevel$64$start#1;
-
- inline$BDLGetDebugLevel$64$start#1:
- goto inline$BDLGetDebugLevel$64$label_3#1;
-
- inline$BDLGetDebugLevel$64$label_3#1:
- havoc inline$BDLGetDebugLevel$64$myNondetVar_0;
- inline$BDLGetDebugLevel$64$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$64$myNondetVar_0;
- goto inline$BDLGetDebugLevel$64$label_1#1;
-
- inline$BDLGetDebugLevel$64$label_1#1:
- goto inline$BDLGetDebugLevel$64$Return#1;
-
- inline$BDLGetDebugLevel$64$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$64$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon37_Then#1, inline$BDLSystemPowerIoCompletion$2$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_18_true#1, inline$BDLSystemPowerIoCompletion$2$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_22#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_23#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_24#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$2$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_19#1:
- goto inline$BDLGetDebugLevel$65$Entry#1;
-
- inline$BDLGetDebugLevel$65$Entry#1:
- goto inline$BDLGetDebugLevel$65$start#1;
-
- inline$BDLGetDebugLevel$65$start#1:
- goto inline$BDLGetDebugLevel$65$label_3#1;
-
- inline$BDLGetDebugLevel$65$label_3#1:
- havoc inline$BDLGetDebugLevel$65$myNondetVar_0;
- inline$BDLGetDebugLevel$65$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$65$myNondetVar_0;
- goto inline$BDLGetDebugLevel$65$label_1#1;
-
- inline$BDLGetDebugLevel$65$label_1#1:
- goto inline$BDLGetDebugLevel$65$Return#1;
-
- inline$BDLGetDebugLevel$65$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$65$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon38_Then#1, inline$BDLSystemPowerIoCompletion$2$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_28_true#1, inline$BDLSystemPowerIoCompletion$2$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_32#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_33#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_34#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$2$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_29#1:
- goto inline$BDLGetDebugLevel$66$Entry#1;
-
- inline$BDLGetDebugLevel$66$Entry#1:
- goto inline$BDLGetDebugLevel$66$start#1;
-
- inline$BDLGetDebugLevel$66$start#1:
- goto inline$BDLGetDebugLevel$66$label_3#1;
-
- inline$BDLGetDebugLevel$66$label_3#1:
- havoc inline$BDLGetDebugLevel$66$myNondetVar_0;
- inline$BDLGetDebugLevel$66$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$66$myNondetVar_0;
- goto inline$BDLGetDebugLevel$66$label_1#1;
-
- inline$BDLGetDebugLevel$66$label_1#1:
- goto inline$BDLGetDebugLevel$66$Return#1;
-
- inline$BDLGetDebugLevel$66$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$66$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon39_Then#1, inline$BDLSystemPowerIoCompletion$2$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_38_true#1, inline$BDLSystemPowerIoCompletion$2$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_39_true#1, inline$BDLSystemPowerIoCompletion$2$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$2$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$2$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$2$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_106_true#1, inline$BDLSystemPowerIoCompletion$2$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_142#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_143#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$2$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$2$myNondetVar_0, inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$2$anon50_Then#1, inline$BDLSystemPowerIoCompletion$2$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_112#1:
- inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$2$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_113_true#1, inline$BDLSystemPowerIoCompletion$2$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$2$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_117#1:
- goto inline$BDLGetDebugLevel$73$Entry#1;
-
- inline$BDLGetDebugLevel$73$Entry#1:
- goto inline$BDLGetDebugLevel$73$start#1;
-
- inline$BDLGetDebugLevel$73$start#1:
- goto inline$BDLGetDebugLevel$73$label_3#1;
-
- inline$BDLGetDebugLevel$73$label_3#1:
- havoc inline$BDLGetDebugLevel$73$myNondetVar_0;
- inline$BDLGetDebugLevel$73$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$73$myNondetVar_0;
- goto inline$BDLGetDebugLevel$73$label_1#1;
-
- inline$BDLGetDebugLevel$73$label_1#1:
- goto inline$BDLGetDebugLevel$73$Return#1;
-
- inline$BDLGetDebugLevel$73$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$73$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon51_Then#1, inline$BDLSystemPowerIoCompletion$2$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_120_true#1, inline$BDLSystemPowerIoCompletion$2$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_124#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_125#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_126#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$2$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_121#1:
- goto inline$BDLGetDebugLevel$74$Entry#1;
-
- inline$BDLGetDebugLevel$74$Entry#1:
- goto inline$BDLGetDebugLevel$74$start#1;
-
- inline$BDLGetDebugLevel$74$start#1:
- goto inline$BDLGetDebugLevel$74$label_3#1;
-
- inline$BDLGetDebugLevel$74$label_3#1:
- havoc inline$BDLGetDebugLevel$74$myNondetVar_0;
- inline$BDLGetDebugLevel$74$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$74$myNondetVar_0;
- goto inline$BDLGetDebugLevel$74$label_1#1;
-
- inline$BDLGetDebugLevel$74$label_1#1:
- goto inline$BDLGetDebugLevel$74$Return#1;
-
- inline$BDLGetDebugLevel$74$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$74$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon52_Then#1, inline$BDLSystemPowerIoCompletion$2$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_130_true#1, inline$BDLSystemPowerIoCompletion$2$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_134#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_135#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_136#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$2$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_131#1:
- goto inline$BDLGetDebugLevel$75$Entry#1;
-
- inline$BDLGetDebugLevel$75$Entry#1:
- goto inline$BDLGetDebugLevel$75$start#1;
-
- inline$BDLGetDebugLevel$75$start#1:
- goto inline$BDLGetDebugLevel$75$label_3#1;
-
- inline$BDLGetDebugLevel$75$label_3#1:
- havoc inline$BDLGetDebugLevel$75$myNondetVar_0;
- inline$BDLGetDebugLevel$75$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$75$myNondetVar_0;
- goto inline$BDLGetDebugLevel$75$label_1#1;
-
- inline$BDLGetDebugLevel$75$label_1#1:
- goto inline$BDLGetDebugLevel$75$Return#1;
-
- inline$BDLGetDebugLevel$75$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$75$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon53_Then#1, inline$BDLSystemPowerIoCompletion$2$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_140_true#1, inline$BDLSystemPowerIoCompletion$2$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$2$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_115#1:
- inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$2$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$2$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_43#1:
- goto inline$BDLGetDebugLevel$67$Entry#1;
-
- inline$BDLGetDebugLevel$67$Entry#1:
- goto inline$BDLGetDebugLevel$67$start#1;
-
- inline$BDLGetDebugLevel$67$start#1:
- goto inline$BDLGetDebugLevel$67$label_3#1;
-
- inline$BDLGetDebugLevel$67$label_3#1:
- havoc inline$BDLGetDebugLevel$67$myNondetVar_0;
- inline$BDLGetDebugLevel$67$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$67$myNondetVar_0;
- goto inline$BDLGetDebugLevel$67$label_1#1;
-
- inline$BDLGetDebugLevel$67$label_1#1:
- goto inline$BDLGetDebugLevel$67$Return#1;
-
- inline$BDLGetDebugLevel$67$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$67$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon40_Then#1, inline$BDLSystemPowerIoCompletion$2$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_46_true#1, inline$BDLSystemPowerIoCompletion$2$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_50#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_51#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_52#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$2$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_47#1:
- goto inline$BDLGetDebugLevel$68$Entry#1;
-
- inline$BDLGetDebugLevel$68$Entry#1:
- goto inline$BDLGetDebugLevel$68$start#1;
-
- inline$BDLGetDebugLevel$68$start#1:
- goto inline$BDLGetDebugLevel$68$label_3#1;
-
- inline$BDLGetDebugLevel$68$label_3#1:
- havoc inline$BDLGetDebugLevel$68$myNondetVar_0;
- inline$BDLGetDebugLevel$68$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$68$myNondetVar_0;
- goto inline$BDLGetDebugLevel$68$label_1#1;
-
- inline$BDLGetDebugLevel$68$label_1#1:
- goto inline$BDLGetDebugLevel$68$Return#1;
-
- inline$BDLGetDebugLevel$68$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$68$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon41_Then#1, inline$BDLSystemPowerIoCompletion$2$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_56_true#1, inline$BDLSystemPowerIoCompletion$2$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_60#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_61#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_62#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$2$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_57#1:
- goto inline$BDLGetDebugLevel$69$Entry#1;
-
- inline$BDLGetDebugLevel$69$Entry#1:
- goto inline$BDLGetDebugLevel$69$start#1;
-
- inline$BDLGetDebugLevel$69$start#1:
- goto inline$BDLGetDebugLevel$69$label_3#1;
-
- inline$BDLGetDebugLevel$69$label_3#1:
- havoc inline$BDLGetDebugLevel$69$myNondetVar_0;
- inline$BDLGetDebugLevel$69$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$69$myNondetVar_0;
- goto inline$BDLGetDebugLevel$69$label_1#1;
-
- inline$BDLGetDebugLevel$69$label_1#1:
- goto inline$BDLGetDebugLevel$69$Return#1;
-
- inline$BDLGetDebugLevel$69$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$69$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon42_Then#1, inline$BDLSystemPowerIoCompletion$2$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_66_true#1, inline$BDLSystemPowerIoCompletion$2$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$2$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$2$anon43_Then#1, inline$BDLSystemPowerIoCompletion$2$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$2$anon44_Then#1, inline$BDLSystemPowerIoCompletion$2$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_74#1:
- goto inline$storm_IoCompleteRequest$6$Entry#1;
-
- inline$storm_IoCompleteRequest$6$Entry#1:
- inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$6$start#1;
-
- inline$storm_IoCompleteRequest$6$start#1:
- inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$6$label_3#1;
-
- inline$storm_IoCompleteRequest$6$label_3#1:
- call inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$6$label_6#1;
-
- inline$storm_IoCompleteRequest$6$label_6#1:
- goto inline$storm_IoCompleteRequest$6$label_6_true#1, inline$storm_IoCompleteRequest$6$label_6_false#1;
-
- inline$storm_IoCompleteRequest$6$label_6_false#1:
- assume inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$6$label_7#1;
-
- inline$storm_IoCompleteRequest$6$label_6_true#1:
- assume inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$6$label_8#1;
-
- inline$storm_IoCompleteRequest$6$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$6$anon3_Then#1, inline$storm_IoCompleteRequest$6$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$6$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$6$anon1#1;
-
- inline$storm_IoCompleteRequest$6$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$6$label_9#1;
-
- inline$storm_IoCompleteRequest$6$label_9#1:
- goto inline$storm_IoCompleteRequest$6$label_9_true#1, inline$storm_IoCompleteRequest$6$label_9_false#1;
-
- inline$storm_IoCompleteRequest$6$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$6$label_10#1;
-
- inline$storm_IoCompleteRequest$6$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$6$label_1#1;
-
- inline$storm_IoCompleteRequest$6$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$6$label_7#1;
-
- inline$storm_IoCompleteRequest$6$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$6$label_1#1;
-
- inline$storm_IoCompleteRequest$6$label_1#1:
- goto inline$storm_IoCompleteRequest$6$Return#1;
-
- inline$storm_IoCompleteRequest$6$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$6$Return#1;
-
- inline$storm_IoCompleteRequest$6$Return#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon45_Then#1, inline$BDLSystemPowerIoCompletion$2$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$2$anon46_Then#1, inline$BDLSystemPowerIoCompletion$2$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_80#1:
- goto inline$BDLGetDebugLevel$70$Entry#1;
-
- inline$BDLGetDebugLevel$70$Entry#1:
- goto inline$BDLGetDebugLevel$70$start#1;
-
- inline$BDLGetDebugLevel$70$start#1:
- goto inline$BDLGetDebugLevel$70$label_3#1;
-
- inline$BDLGetDebugLevel$70$label_3#1:
- havoc inline$BDLGetDebugLevel$70$myNondetVar_0;
- inline$BDLGetDebugLevel$70$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$70$myNondetVar_0;
- goto inline$BDLGetDebugLevel$70$label_1#1;
-
- inline$BDLGetDebugLevel$70$label_1#1:
- goto inline$BDLGetDebugLevel$70$Return#1;
-
- inline$BDLGetDebugLevel$70$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$70$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon47_Then#1, inline$BDLSystemPowerIoCompletion$2$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_83_true#1, inline$BDLSystemPowerIoCompletion$2$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_87#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_88#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_89#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$2$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_84#1:
- goto inline$BDLGetDebugLevel$71$Entry#1;
-
- inline$BDLGetDebugLevel$71$Entry#1:
- goto inline$BDLGetDebugLevel$71$start#1;
-
- inline$BDLGetDebugLevel$71$start#1:
- goto inline$BDLGetDebugLevel$71$label_3#1;
-
- inline$BDLGetDebugLevel$71$label_3#1:
- havoc inline$BDLGetDebugLevel$71$myNondetVar_0;
- inline$BDLGetDebugLevel$71$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$71$myNondetVar_0;
- goto inline$BDLGetDebugLevel$71$label_1#1;
-
- inline$BDLGetDebugLevel$71$label_1#1:
- goto inline$BDLGetDebugLevel$71$Return#1;
-
- inline$BDLGetDebugLevel$71$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$71$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon48_Then#1, inline$BDLSystemPowerIoCompletion$2$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_93_true#1, inline$BDLSystemPowerIoCompletion$2$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_97#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_98#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_99#1:
- call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$2$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$2$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_94#1:
- goto inline$BDLGetDebugLevel$72$Entry#1;
-
- inline$BDLGetDebugLevel$72$Entry#1:
- goto inline$BDLGetDebugLevel$72$start#1;
-
- inline$BDLGetDebugLevel$72$start#1:
- goto inline$BDLGetDebugLevel$72$label_3#1;
-
- inline$BDLGetDebugLevel$72$label_3#1:
- havoc inline$BDLGetDebugLevel$72$myNondetVar_0;
- inline$BDLGetDebugLevel$72$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$72$myNondetVar_0;
- goto inline$BDLGetDebugLevel$72$label_1#1;
-
- inline$BDLGetDebugLevel$72$label_1#1:
- goto inline$BDLGetDebugLevel$72$Return#1;
-
- inline$BDLGetDebugLevel$72$Return#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$72$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$2$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$2$anon49_Then#1, inline$BDLSystemPowerIoCompletion$2$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_103_true#1, inline$BDLSystemPowerIoCompletion$2$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$2$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$2$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_104#1:
- inline$BDLSystemPowerIoCompletion$2$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$2$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$2$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$2$Return#1;
-
- inline$BDLSystemPowerIoCompletion$2$Return#1:
- inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$2$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$2$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$2$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$2$anon14_Then#1, inline$CallCompletionRoutine$2$anon14_Else#1;
-
- inline$CallCompletionRoutine$2$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$2$anon9#1;
-
- inline$CallCompletionRoutine$2$anon9#1:
- goto inline$CallCompletionRoutine$2$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$2$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$2$Return#1;
-
- inline$CallCompletionRoutine$2$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$2$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$2$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$2$Entry#1:
- inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$2$start#1;
-
- inline$BDLDevicePowerIoCompletion$2$start#1:
- call inline$BDLDevicePowerIoCompletion$2$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$2$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_4#1:
- inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_6#1:
- inline$BDLDevicePowerIoCompletion$2$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$2$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$2$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$2$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$17$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$17$Entry#1:
- inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$17$start#1;
-
- inline$IoGetCurrentIrpStackLocation$17$start#1:
- inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$17$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$17$label_3_true#1, inline$IoGetCurrentIrpStackLocation$17$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$17$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$17$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$17$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$17$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$17$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$17$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$17$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$17$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$17$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$17$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$17$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$17$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$17$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$17$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$17$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$17$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$17$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$17$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$17$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$17$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$17$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$17$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon30_Then#1, inline$BDLDevicePowerIoCompletion$2$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_13#1:
- inline$BDLDevicePowerIoCompletion$2$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$2$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$2$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_17#1:
- goto inline$BDLGetDebugLevel$55$Entry#1;
-
- inline$BDLGetDebugLevel$55$Entry#1:
- goto inline$BDLGetDebugLevel$55$start#1;
-
- inline$BDLGetDebugLevel$55$start#1:
- goto inline$BDLGetDebugLevel$55$label_3#1;
-
- inline$BDLGetDebugLevel$55$label_3#1:
- havoc inline$BDLGetDebugLevel$55$myNondetVar_0;
- inline$BDLGetDebugLevel$55$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$55$myNondetVar_0;
- goto inline$BDLGetDebugLevel$55$label_1#1;
-
- inline$BDLGetDebugLevel$55$label_1#1:
- goto inline$BDLGetDebugLevel$55$Return#1;
-
- inline$BDLGetDebugLevel$55$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$55$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon31_Then#1, inline$BDLDevicePowerIoCompletion$2$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_20_true#1, inline$BDLDevicePowerIoCompletion$2$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_24#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_25#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_26#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$2$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_21#1:
- goto inline$BDLGetDebugLevel$56$Entry#1;
-
- inline$BDLGetDebugLevel$56$Entry#1:
- goto inline$BDLGetDebugLevel$56$start#1;
-
- inline$BDLGetDebugLevel$56$start#1:
- goto inline$BDLGetDebugLevel$56$label_3#1;
-
- inline$BDLGetDebugLevel$56$label_3#1:
- havoc inline$BDLGetDebugLevel$56$myNondetVar_0;
- inline$BDLGetDebugLevel$56$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$56$myNondetVar_0;
- goto inline$BDLGetDebugLevel$56$label_1#1;
-
- inline$BDLGetDebugLevel$56$label_1#1:
- goto inline$BDLGetDebugLevel$56$Return#1;
-
- inline$BDLGetDebugLevel$56$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$56$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon32_Then#1, inline$BDLDevicePowerIoCompletion$2$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_30_true#1, inline$BDLDevicePowerIoCompletion$2$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_34#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_35#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_36#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$2$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_31#1:
- goto inline$BDLGetDebugLevel$57$Entry#1;
-
- inline$BDLGetDebugLevel$57$Entry#1:
- goto inline$BDLGetDebugLevel$57$start#1;
-
- inline$BDLGetDebugLevel$57$start#1:
- goto inline$BDLGetDebugLevel$57$label_3#1;
-
- inline$BDLGetDebugLevel$57$label_3#1:
- havoc inline$BDLGetDebugLevel$57$myNondetVar_0;
- inline$BDLGetDebugLevel$57$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$57$myNondetVar_0;
- goto inline$BDLGetDebugLevel$57$label_1#1;
-
- inline$BDLGetDebugLevel$57$label_1#1:
- goto inline$BDLGetDebugLevel$57$Return#1;
-
- inline$BDLGetDebugLevel$57$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$57$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon33_Then#1, inline$BDLDevicePowerIoCompletion$2$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_40_true#1, inline$BDLDevicePowerIoCompletion$2$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_41_true#1, inline$BDLDevicePowerIoCompletion$2$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$2$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$2$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_44_true#1, inline$BDLDevicePowerIoCompletion$2$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$2$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_45_true#1, inline$BDLDevicePowerIoCompletion$2$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$2$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$2$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$2$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$2$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$2$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$2$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_54#1:
- inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$2$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_55_true#1, inline$BDLDevicePowerIoCompletion$2$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_56#1:
- call inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$2$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$2$anon34_Then#1, inline$BDLDevicePowerIoCompletion$2$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_59#1:
- goto inline$BDLGetDebugLevel$58$Entry#1;
-
- inline$BDLGetDebugLevel$58$Entry#1:
- goto inline$BDLGetDebugLevel$58$start#1;
-
- inline$BDLGetDebugLevel$58$start#1:
- goto inline$BDLGetDebugLevel$58$label_3#1;
-
- inline$BDLGetDebugLevel$58$label_3#1:
- havoc inline$BDLGetDebugLevel$58$myNondetVar_0;
- inline$BDLGetDebugLevel$58$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$58$myNondetVar_0;
- goto inline$BDLGetDebugLevel$58$label_1#1;
-
- inline$BDLGetDebugLevel$58$label_1#1:
- goto inline$BDLGetDebugLevel$58$Return#1;
-
- inline$BDLGetDebugLevel$58$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$58$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon35_Then#1, inline$BDLDevicePowerIoCompletion$2$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_62_true#1, inline$BDLDevicePowerIoCompletion$2$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_66#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_67#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_68#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$2$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_63#1:
- goto inline$BDLGetDebugLevel$59$Entry#1;
-
- inline$BDLGetDebugLevel$59$Entry#1:
- goto inline$BDLGetDebugLevel$59$start#1;
-
- inline$BDLGetDebugLevel$59$start#1:
- goto inline$BDLGetDebugLevel$59$label_3#1;
-
- inline$BDLGetDebugLevel$59$label_3#1:
- havoc inline$BDLGetDebugLevel$59$myNondetVar_0;
- inline$BDLGetDebugLevel$59$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$59$myNondetVar_0;
- goto inline$BDLGetDebugLevel$59$label_1#1;
-
- inline$BDLGetDebugLevel$59$label_1#1:
- goto inline$BDLGetDebugLevel$59$Return#1;
-
- inline$BDLGetDebugLevel$59$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$59$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon36_Then#1, inline$BDLDevicePowerIoCompletion$2$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_72_true#1, inline$BDLDevicePowerIoCompletion$2$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_76#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_77#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_78#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$2$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_73#1:
- goto inline$BDLGetDebugLevel$60$Entry#1;
-
- inline$BDLGetDebugLevel$60$Entry#1:
- goto inline$BDLGetDebugLevel$60$start#1;
-
- inline$BDLGetDebugLevel$60$start#1:
- goto inline$BDLGetDebugLevel$60$label_3#1;
-
- inline$BDLGetDebugLevel$60$label_3#1:
- havoc inline$BDLGetDebugLevel$60$myNondetVar_0;
- inline$BDLGetDebugLevel$60$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$60$myNondetVar_0;
- goto inline$BDLGetDebugLevel$60$label_1#1;
-
- inline$BDLGetDebugLevel$60$label_1#1:
- goto inline$BDLGetDebugLevel$60$Return#1;
-
- inline$BDLGetDebugLevel$60$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$60$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon37_Then#1, inline$BDLDevicePowerIoCompletion$2$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_82_true#1, inline$BDLDevicePowerIoCompletion$2$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$2$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$2$anon38_Then#1, inline$BDLDevicePowerIoCompletion$2$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$2$anon39_Then#1, inline$BDLDevicePowerIoCompletion$2$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_92#1:
- goto inline$storm_IoCompleteRequest$5$Entry#1;
-
- inline$storm_IoCompleteRequest$5$Entry#1:
- inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$5$start#1;
-
- inline$storm_IoCompleteRequest$5$start#1:
- inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$5$label_3#1;
-
- inline$storm_IoCompleteRequest$5$label_3#1:
- call inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$5$label_6#1;
-
- inline$storm_IoCompleteRequest$5$label_6#1:
- goto inline$storm_IoCompleteRequest$5$label_6_true#1, inline$storm_IoCompleteRequest$5$label_6_false#1;
-
- inline$storm_IoCompleteRequest$5$label_6_false#1:
- assume inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$5$label_7#1;
-
- inline$storm_IoCompleteRequest$5$label_6_true#1:
- assume inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$5$label_8#1;
-
- inline$storm_IoCompleteRequest$5$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$5$anon3_Then#1, inline$storm_IoCompleteRequest$5$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$5$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$5$anon1#1;
-
- inline$storm_IoCompleteRequest$5$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$5$label_9#1;
-
- inline$storm_IoCompleteRequest$5$label_9#1:
- goto inline$storm_IoCompleteRequest$5$label_9_true#1, inline$storm_IoCompleteRequest$5$label_9_false#1;
-
- inline$storm_IoCompleteRequest$5$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$5$label_10#1;
-
- inline$storm_IoCompleteRequest$5$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$5$label_1#1;
-
- inline$storm_IoCompleteRequest$5$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$5$label_7#1;
-
- inline$storm_IoCompleteRequest$5$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$5$label_1#1;
-
- inline$storm_IoCompleteRequest$5$label_1#1:
- goto inline$storm_IoCompleteRequest$5$Return#1;
-
- inline$storm_IoCompleteRequest$5$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$5$Return#1;
-
- inline$storm_IoCompleteRequest$5$Return#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon40_Then#1, inline$BDLDevicePowerIoCompletion$2$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$2$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$2$anon41_Then#1, inline$BDLDevicePowerIoCompletion$2$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_98#1:
- goto inline$BDLGetDebugLevel$61$Entry#1;
-
- inline$BDLGetDebugLevel$61$Entry#1:
- goto inline$BDLGetDebugLevel$61$start#1;
-
- inline$BDLGetDebugLevel$61$start#1:
- goto inline$BDLGetDebugLevel$61$label_3#1;
-
- inline$BDLGetDebugLevel$61$label_3#1:
- havoc inline$BDLGetDebugLevel$61$myNondetVar_0;
- inline$BDLGetDebugLevel$61$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$61$myNondetVar_0;
- goto inline$BDLGetDebugLevel$61$label_1#1;
-
- inline$BDLGetDebugLevel$61$label_1#1:
- goto inline$BDLGetDebugLevel$61$Return#1;
-
- inline$BDLGetDebugLevel$61$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$61$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon42_Then#1, inline$BDLDevicePowerIoCompletion$2$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_101_true#1, inline$BDLDevicePowerIoCompletion$2$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_105#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_106#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_107#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$2$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_102#1:
- goto inline$BDLGetDebugLevel$62$Entry#1;
-
- inline$BDLGetDebugLevel$62$Entry#1:
- goto inline$BDLGetDebugLevel$62$start#1;
-
- inline$BDLGetDebugLevel$62$start#1:
- goto inline$BDLGetDebugLevel$62$label_3#1;
-
- inline$BDLGetDebugLevel$62$label_3#1:
- havoc inline$BDLGetDebugLevel$62$myNondetVar_0;
- inline$BDLGetDebugLevel$62$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$62$myNondetVar_0;
- goto inline$BDLGetDebugLevel$62$label_1#1;
-
- inline$BDLGetDebugLevel$62$label_1#1:
- goto inline$BDLGetDebugLevel$62$Return#1;
-
- inline$BDLGetDebugLevel$62$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$62$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon43_Then#1, inline$BDLDevicePowerIoCompletion$2$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_111_true#1, inline$BDLDevicePowerIoCompletion$2$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_115#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_116#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_117#1:
- call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$2$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$2$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_112#1:
- goto inline$BDLGetDebugLevel$63$Entry#1;
-
- inline$BDLGetDebugLevel$63$Entry#1:
- goto inline$BDLGetDebugLevel$63$start#1;
-
- inline$BDLGetDebugLevel$63$start#1:
- goto inline$BDLGetDebugLevel$63$label_3#1;
-
- inline$BDLGetDebugLevel$63$label_3#1:
- havoc inline$BDLGetDebugLevel$63$myNondetVar_0;
- inline$BDLGetDebugLevel$63$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$63$myNondetVar_0;
- goto inline$BDLGetDebugLevel$63$label_1#1;
-
- inline$BDLGetDebugLevel$63$label_1#1:
- goto inline$BDLGetDebugLevel$63$Return#1;
-
- inline$BDLGetDebugLevel$63$Return#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$63$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$2$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$2$anon44_Then#1, inline$BDLDevicePowerIoCompletion$2$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_121_true#1, inline$BDLDevicePowerIoCompletion$2$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$2$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$2$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_122#1:
- inline$BDLDevicePowerIoCompletion$2$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$2$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$2$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$2$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$2$Return#1;
-
- inline$BDLDevicePowerIoCompletion$2$Return#1:
- inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$2$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$2$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$2$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$2$anon13_Then#1, inline$CallCompletionRoutine$2$anon13_Else#1;
-
- inline$CallCompletionRoutine$2$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$2$anon7#1;
-
- inline$CallCompletionRoutine$2$anon7#1:
- goto inline$CallCompletionRoutine$2$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$2$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$2$Return#1;
-
- inline$CallCompletionRoutine$2$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$2$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$2$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$2$Entry#1:
- inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$2$start#1;
-
- inline$BDLCallDriverCompletionRoutine$2$start#1:
- inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$2$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$2$label_3_true#1, inline$BDLCallDriverCompletionRoutine$2$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$2$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$2$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$2$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$2$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_6#1:
- goto inline$storm_KeSetEvent$2$Entry#1;
-
- inline$storm_KeSetEvent$2$Entry#1:
- inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$2$start#1;
-
- inline$storm_KeSetEvent$2$start#1:
- inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$2$label_3#1;
-
- inline$storm_KeSetEvent$2$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$2$label_1#1;
-
- inline$storm_KeSetEvent$2$label_1#1:
- goto inline$storm_KeSetEvent$2$Return#1;
-
- inline$storm_KeSetEvent$2$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$2$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$2$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$2$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$2$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$2$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$2$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$2$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_9#1:
- inline$BDLCallDriverCompletionRoutine$2$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$2$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$2$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$2$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$2$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$2$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$2$Return#1:
- inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$2$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$2$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$2$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$2$anon12_Then#1, inline$CallCompletionRoutine$2$anon12_Else#1;
-
- inline$CallCompletionRoutine$2$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$2$anon5#1;
-
- inline$CallCompletionRoutine$2$anon5#1:
- goto inline$CallCompletionRoutine$2$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$2$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$2$label_23#1;
-
- inline$CallCompletionRoutine$2$label_23#1:
- inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$2$label_24#1;
-
- inline$CallCompletionRoutine$2$label_24#1:
- goto inline$CallCompletionRoutine$2$label_24_true#1, inline$CallCompletionRoutine$2$label_24_false#1;
-
- inline$CallCompletionRoutine$2$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$2$label_1#1;
-
- inline$CallCompletionRoutine$2$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$2$label_25#1;
-
- inline$CallCompletionRoutine$2$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$2$label_1#1;
-
- inline$CallCompletionRoutine$2$label_1#1:
- goto inline$CallCompletionRoutine$2$Return#1;
-
- inline$CallCompletionRoutine$2$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$2$Return#1;
-
- inline$CallCompletionRoutine$2$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$2$Return#1;
-
- inline$CallCompletionRoutine$2$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$2$Return#1;
-
- inline$CallCompletionRoutine$2$Return#1:
- goto inline$storm_IoCallDriver$1$label_33$1#1;
-
- inline$storm_IoCallDriver$1$label_33$1#1:
- goto inline$storm_IoCallDriver$1$anon14_Then#1, inline$storm_IoCallDriver$1$anon14_Else#1;
-
- inline$storm_IoCallDriver$1$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$1$anon8#1;
-
- inline$storm_IoCallDriver$1$anon8#1:
- goto inline$storm_IoCallDriver$1$label_36#1;
-
- inline$storm_IoCallDriver$1$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$1$Return#1;
-
- inline$storm_IoCallDriver$1$label_27_case_1#1:
- assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$1$label_29#1;
-
- inline$storm_IoCallDriver$1$label_29#1:
- inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$1$label_37#1;
-
- inline$storm_IoCallDriver$1$label_37#1:
- goto inline$storm_IoCallDriver$1$label_38#1;
-
- inline$storm_IoCallDriver$1$label_38#1:
- goto inline$storm_IoCallDriver$1$label_39#1;
-
- inline$storm_IoCallDriver$1$label_39#1:
- goto inline$CallCompletionRoutine$3$Entry#1;
-
- inline$CallCompletionRoutine$3$Entry#1:
- inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$3$start#1;
-
- inline$CallCompletionRoutine$3$start#1:
- inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$3$label_3#1;
-
- inline$CallCompletionRoutine$3$label_3#1:
- goto inline$CallCompletionRoutine$3$label_4#1;
-
- inline$CallCompletionRoutine$3$label_4#1:
- goto inline$CallCompletionRoutine$3$label_5#1;
-
- inline$CallCompletionRoutine$3$label_5#1:
- goto inline$CallCompletionRoutine$3$label_6#1;
-
- inline$CallCompletionRoutine$3$label_6#1:
- goto inline$CallCompletionRoutine$3$label_7#1;
-
- inline$CallCompletionRoutine$3$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$19$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$19$Entry#1:
- inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$19$start#1;
-
- inline$IoGetCurrentIrpStackLocation$19$start#1:
- inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$19$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$19$label_3_true#1, inline$IoGetCurrentIrpStackLocation$19$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$19$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$19$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$19$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$19$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$19$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$19$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$19$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$19$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$19$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$19$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$19$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$19$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$19$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$19$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$19$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$19$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$19$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$19$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$19$Return#1:
- goto inline$CallCompletionRoutine$3$label_7$1#1;
-
- inline$CallCompletionRoutine$3$label_7$1#1:
- goto inline$CallCompletionRoutine$3$anon10_Then#1, inline$CallCompletionRoutine$3$anon10_Else#1;
-
- inline$CallCompletionRoutine$3$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$3$anon1#1;
-
- inline$CallCompletionRoutine$3$anon1#1:
- goto inline$CallCompletionRoutine$3$label_10#1;
-
- inline$CallCompletionRoutine$3$label_10#1:
- goto inline$CallCompletionRoutine$3$label_11#1;
-
- inline$CallCompletionRoutine$3$label_11#1:
- havoc inline$CallCompletionRoutine$3$myNondetVar_0;
- inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$myNondetVar_0;
- goto inline$CallCompletionRoutine$3$label_12#1;
-
- inline$CallCompletionRoutine$3$label_12#1:
- havoc inline$CallCompletionRoutine$3$myNondetVar_0;
- inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$myNondetVar_0;
- goto inline$CallCompletionRoutine$3$label_13#1;
-
- inline$CallCompletionRoutine$3$label_13#1:
- havoc inline$CallCompletionRoutine$3$myNondetVar_0;
- goto inline$CallCompletionRoutine$3$label_14#1;
-
- inline$CallCompletionRoutine$3$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$20$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$20$Entry#1:
- inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$20$start#1;
-
- inline$IoGetCurrentIrpStackLocation$20$start#1:
- inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$20$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$20$label_3_true#1, inline$IoGetCurrentIrpStackLocation$20$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$20$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$20$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$20$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$20$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$20$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$20$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$20$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$20$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$20$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$20$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$20$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$20$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$20$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$20$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$20$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$20$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$20$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$20$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$20$Return#1:
- goto inline$CallCompletionRoutine$3$label_14$1#1;
-
- inline$CallCompletionRoutine$3$label_14$1#1:
- goto inline$CallCompletionRoutine$3$anon11_Then#1, inline$CallCompletionRoutine$3$anon11_Else#1;
-
- inline$CallCompletionRoutine$3$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$3$anon3#1;
-
- inline$CallCompletionRoutine$3$anon3#1:
- goto inline$CallCompletionRoutine$3$label_17#1;
-
- inline$CallCompletionRoutine$3$label_17#1:
- goto inline$CallCompletionRoutine$3$label_18#1;
-
- inline$CallCompletionRoutine$3$label_18#1:
- goto inline$CallCompletionRoutine$3$label_18_true#1, inline$CallCompletionRoutine$3$label_18_false#1;
-
- inline$CallCompletionRoutine$3$label_18_false#1:
- assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$3$label_1#1;
-
- inline$CallCompletionRoutine$3$label_18_true#1:
- assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$3$label_19#1;
-
- inline$CallCompletionRoutine$3$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$3$label_20#1;
-
- inline$CallCompletionRoutine$3$label_20#1:
- goto inline$CallCompletionRoutine$3$label_20_icall_1#1, inline$CallCompletionRoutine$3$label_20_icall_2#1, inline$CallCompletionRoutine$3$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$3$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$3$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$3$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$3$Entry#1:
- inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$3$start#1;
-
- inline$BDLSystemPowerIoCompletion$3$start#1:
- call inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$3$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_4#1:
- inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_6#1:
- inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$3$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$3$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$3$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$22$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$22$Entry#1:
- inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$22$start#1;
-
- inline$IoGetCurrentIrpStackLocation$22$start#1:
- inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$22$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$22$label_3_true#1, inline$IoGetCurrentIrpStackLocation$22$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$22$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$22$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$22$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$22$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$22$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$22$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$22$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$22$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$22$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$22$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$22$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$22$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$22$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$22$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$22$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$22$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$22$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$22$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$22$Return#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon36_Then#1, inline$BDLSystemPowerIoCompletion$3$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_15#1:
- goto inline$BDLGetDebugLevel$85$Entry#1;
-
- inline$BDLGetDebugLevel$85$Entry#1:
- goto inline$BDLGetDebugLevel$85$start#1;
-
- inline$BDLGetDebugLevel$85$start#1:
- goto inline$BDLGetDebugLevel$85$label_3#1;
-
- inline$BDLGetDebugLevel$85$label_3#1:
- havoc inline$BDLGetDebugLevel$85$myNondetVar_0;
- inline$BDLGetDebugLevel$85$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$85$myNondetVar_0;
- goto inline$BDLGetDebugLevel$85$label_1#1;
-
- inline$BDLGetDebugLevel$85$label_1#1:
- goto inline$BDLGetDebugLevel$85$Return#1;
-
- inline$BDLGetDebugLevel$85$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$85$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon37_Then#1, inline$BDLSystemPowerIoCompletion$3$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_18_true#1, inline$BDLSystemPowerIoCompletion$3$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_22#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_23#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_24#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$3$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_19#1:
- goto inline$BDLGetDebugLevel$86$Entry#1;
-
- inline$BDLGetDebugLevel$86$Entry#1:
- goto inline$BDLGetDebugLevel$86$start#1;
-
- inline$BDLGetDebugLevel$86$start#1:
- goto inline$BDLGetDebugLevel$86$label_3#1;
-
- inline$BDLGetDebugLevel$86$label_3#1:
- havoc inline$BDLGetDebugLevel$86$myNondetVar_0;
- inline$BDLGetDebugLevel$86$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$86$myNondetVar_0;
- goto inline$BDLGetDebugLevel$86$label_1#1;
-
- inline$BDLGetDebugLevel$86$label_1#1:
- goto inline$BDLGetDebugLevel$86$Return#1;
-
- inline$BDLGetDebugLevel$86$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$86$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon38_Then#1, inline$BDLSystemPowerIoCompletion$3$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_28_true#1, inline$BDLSystemPowerIoCompletion$3$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_32#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_33#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_34#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$3$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_29#1:
- goto inline$BDLGetDebugLevel$87$Entry#1;
-
- inline$BDLGetDebugLevel$87$Entry#1:
- goto inline$BDLGetDebugLevel$87$start#1;
-
- inline$BDLGetDebugLevel$87$start#1:
- goto inline$BDLGetDebugLevel$87$label_3#1;
-
- inline$BDLGetDebugLevel$87$label_3#1:
- havoc inline$BDLGetDebugLevel$87$myNondetVar_0;
- inline$BDLGetDebugLevel$87$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$87$myNondetVar_0;
- goto inline$BDLGetDebugLevel$87$label_1#1;
-
- inline$BDLGetDebugLevel$87$label_1#1:
- goto inline$BDLGetDebugLevel$87$Return#1;
-
- inline$BDLGetDebugLevel$87$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$87$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon39_Then#1, inline$BDLSystemPowerIoCompletion$3$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_38_true#1, inline$BDLSystemPowerIoCompletion$3$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_39_true#1, inline$BDLSystemPowerIoCompletion$3$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$3$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$3$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$3$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_106_true#1, inline$BDLSystemPowerIoCompletion$3$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_142#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_143#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$3$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$3$myNondetVar_0, inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$3$anon50_Then#1, inline$BDLSystemPowerIoCompletion$3$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_112#1:
- inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$3$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_113_true#1, inline$BDLSystemPowerIoCompletion$3$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$3$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_117#1:
- goto inline$BDLGetDebugLevel$94$Entry#1;
-
- inline$BDLGetDebugLevel$94$Entry#1:
- goto inline$BDLGetDebugLevel$94$start#1;
-
- inline$BDLGetDebugLevel$94$start#1:
- goto inline$BDLGetDebugLevel$94$label_3#1;
-
- inline$BDLGetDebugLevel$94$label_3#1:
- havoc inline$BDLGetDebugLevel$94$myNondetVar_0;
- inline$BDLGetDebugLevel$94$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$94$myNondetVar_0;
- goto inline$BDLGetDebugLevel$94$label_1#1;
-
- inline$BDLGetDebugLevel$94$label_1#1:
- goto inline$BDLGetDebugLevel$94$Return#1;
-
- inline$BDLGetDebugLevel$94$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$94$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon51_Then#1, inline$BDLSystemPowerIoCompletion$3$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_120_true#1, inline$BDLSystemPowerIoCompletion$3$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_124#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_125#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_126#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$3$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_121#1:
- goto inline$BDLGetDebugLevel$95$Entry#1;
-
- inline$BDLGetDebugLevel$95$Entry#1:
- goto inline$BDLGetDebugLevel$95$start#1;
-
- inline$BDLGetDebugLevel$95$start#1:
- goto inline$BDLGetDebugLevel$95$label_3#1;
-
- inline$BDLGetDebugLevel$95$label_3#1:
- havoc inline$BDLGetDebugLevel$95$myNondetVar_0;
- inline$BDLGetDebugLevel$95$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$95$myNondetVar_0;
- goto inline$BDLGetDebugLevel$95$label_1#1;
-
- inline$BDLGetDebugLevel$95$label_1#1:
- goto inline$BDLGetDebugLevel$95$Return#1;
-
- inline$BDLGetDebugLevel$95$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$95$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon52_Then#1, inline$BDLSystemPowerIoCompletion$3$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_130_true#1, inline$BDLSystemPowerIoCompletion$3$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_134#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_135#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_136#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$3$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_131#1:
- goto inline$BDLGetDebugLevel$96$Entry#1;
-
- inline$BDLGetDebugLevel$96$Entry#1:
- goto inline$BDLGetDebugLevel$96$start#1;
-
- inline$BDLGetDebugLevel$96$start#1:
- goto inline$BDLGetDebugLevel$96$label_3#1;
-
- inline$BDLGetDebugLevel$96$label_3#1:
- havoc inline$BDLGetDebugLevel$96$myNondetVar_0;
- inline$BDLGetDebugLevel$96$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$96$myNondetVar_0;
- goto inline$BDLGetDebugLevel$96$label_1#1;
-
- inline$BDLGetDebugLevel$96$label_1#1:
- goto inline$BDLGetDebugLevel$96$Return#1;
-
- inline$BDLGetDebugLevel$96$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$96$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon53_Then#1, inline$BDLSystemPowerIoCompletion$3$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_140_true#1, inline$BDLSystemPowerIoCompletion$3$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$3$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_115#1:
- inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$3$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$3$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_43#1:
- goto inline$BDLGetDebugLevel$88$Entry#1;
-
- inline$BDLGetDebugLevel$88$Entry#1:
- goto inline$BDLGetDebugLevel$88$start#1;
-
- inline$BDLGetDebugLevel$88$start#1:
- goto inline$BDLGetDebugLevel$88$label_3#1;
-
- inline$BDLGetDebugLevel$88$label_3#1:
- havoc inline$BDLGetDebugLevel$88$myNondetVar_0;
- inline$BDLGetDebugLevel$88$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$88$myNondetVar_0;
- goto inline$BDLGetDebugLevel$88$label_1#1;
-
- inline$BDLGetDebugLevel$88$label_1#1:
- goto inline$BDLGetDebugLevel$88$Return#1;
-
- inline$BDLGetDebugLevel$88$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$88$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon40_Then#1, inline$BDLSystemPowerIoCompletion$3$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_46_true#1, inline$BDLSystemPowerIoCompletion$3$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_50#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_51#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_52#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$3$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_47#1:
- goto inline$BDLGetDebugLevel$89$Entry#1;
-
- inline$BDLGetDebugLevel$89$Entry#1:
- goto inline$BDLGetDebugLevel$89$start#1;
-
- inline$BDLGetDebugLevel$89$start#1:
- goto inline$BDLGetDebugLevel$89$label_3#1;
-
- inline$BDLGetDebugLevel$89$label_3#1:
- havoc inline$BDLGetDebugLevel$89$myNondetVar_0;
- inline$BDLGetDebugLevel$89$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$89$myNondetVar_0;
- goto inline$BDLGetDebugLevel$89$label_1#1;
-
- inline$BDLGetDebugLevel$89$label_1#1:
- goto inline$BDLGetDebugLevel$89$Return#1;
-
- inline$BDLGetDebugLevel$89$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$89$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon41_Then#1, inline$BDLSystemPowerIoCompletion$3$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_56_true#1, inline$BDLSystemPowerIoCompletion$3$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_60#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_61#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_62#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$3$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_57#1:
- goto inline$BDLGetDebugLevel$90$Entry#1;
-
- inline$BDLGetDebugLevel$90$Entry#1:
- goto inline$BDLGetDebugLevel$90$start#1;
-
- inline$BDLGetDebugLevel$90$start#1:
- goto inline$BDLGetDebugLevel$90$label_3#1;
-
- inline$BDLGetDebugLevel$90$label_3#1:
- havoc inline$BDLGetDebugLevel$90$myNondetVar_0;
- inline$BDLGetDebugLevel$90$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$90$myNondetVar_0;
- goto inline$BDLGetDebugLevel$90$label_1#1;
-
- inline$BDLGetDebugLevel$90$label_1#1:
- goto inline$BDLGetDebugLevel$90$Return#1;
-
- inline$BDLGetDebugLevel$90$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$90$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon42_Then#1, inline$BDLSystemPowerIoCompletion$3$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_66_true#1, inline$BDLSystemPowerIoCompletion$3$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$3$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$3$anon43_Then#1, inline$BDLSystemPowerIoCompletion$3$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$3$anon44_Then#1, inline$BDLSystemPowerIoCompletion$3$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_74#1:
- goto inline$storm_IoCompleteRequest$8$Entry#1;
-
- inline$storm_IoCompleteRequest$8$Entry#1:
- inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$8$start#1;
-
- inline$storm_IoCompleteRequest$8$start#1:
- inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$8$label_3#1;
-
- inline$storm_IoCompleteRequest$8$label_3#1:
- call inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$8$label_6#1;
-
- inline$storm_IoCompleteRequest$8$label_6#1:
- goto inline$storm_IoCompleteRequest$8$label_6_true#1, inline$storm_IoCompleteRequest$8$label_6_false#1;
-
- inline$storm_IoCompleteRequest$8$label_6_false#1:
- assume inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$8$label_7#1;
-
- inline$storm_IoCompleteRequest$8$label_6_true#1:
- assume inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$8$label_8#1;
-
- inline$storm_IoCompleteRequest$8$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$8$anon3_Then#1, inline$storm_IoCompleteRequest$8$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$8$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$8$anon1#1;
-
- inline$storm_IoCompleteRequest$8$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$8$label_9#1;
-
- inline$storm_IoCompleteRequest$8$label_9#1:
- goto inline$storm_IoCompleteRequest$8$label_9_true#1, inline$storm_IoCompleteRequest$8$label_9_false#1;
-
- inline$storm_IoCompleteRequest$8$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$8$label_10#1;
-
- inline$storm_IoCompleteRequest$8$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$8$label_1#1;
-
- inline$storm_IoCompleteRequest$8$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$8$label_7#1;
-
- inline$storm_IoCompleteRequest$8$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$8$label_1#1;
-
- inline$storm_IoCompleteRequest$8$label_1#1:
- goto inline$storm_IoCompleteRequest$8$Return#1;
-
- inline$storm_IoCompleteRequest$8$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$8$Return#1;
-
- inline$storm_IoCompleteRequest$8$Return#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon45_Then#1, inline$BDLSystemPowerIoCompletion$3$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$3$anon46_Then#1, inline$BDLSystemPowerIoCompletion$3$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_80#1:
- goto inline$BDLGetDebugLevel$91$Entry#1;
-
- inline$BDLGetDebugLevel$91$Entry#1:
- goto inline$BDLGetDebugLevel$91$start#1;
-
- inline$BDLGetDebugLevel$91$start#1:
- goto inline$BDLGetDebugLevel$91$label_3#1;
-
- inline$BDLGetDebugLevel$91$label_3#1:
- havoc inline$BDLGetDebugLevel$91$myNondetVar_0;
- inline$BDLGetDebugLevel$91$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$91$myNondetVar_0;
- goto inline$BDLGetDebugLevel$91$label_1#1;
-
- inline$BDLGetDebugLevel$91$label_1#1:
- goto inline$BDLGetDebugLevel$91$Return#1;
-
- inline$BDLGetDebugLevel$91$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$91$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon47_Then#1, inline$BDLSystemPowerIoCompletion$3$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_83_true#1, inline$BDLSystemPowerIoCompletion$3$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_87#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_88#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_89#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$3$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_84#1:
- goto inline$BDLGetDebugLevel$92$Entry#1;
-
- inline$BDLGetDebugLevel$92$Entry#1:
- goto inline$BDLGetDebugLevel$92$start#1;
-
- inline$BDLGetDebugLevel$92$start#1:
- goto inline$BDLGetDebugLevel$92$label_3#1;
-
- inline$BDLGetDebugLevel$92$label_3#1:
- havoc inline$BDLGetDebugLevel$92$myNondetVar_0;
- inline$BDLGetDebugLevel$92$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$92$myNondetVar_0;
- goto inline$BDLGetDebugLevel$92$label_1#1;
-
- inline$BDLGetDebugLevel$92$label_1#1:
- goto inline$BDLGetDebugLevel$92$Return#1;
-
- inline$BDLGetDebugLevel$92$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$92$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon48_Then#1, inline$BDLSystemPowerIoCompletion$3$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_93_true#1, inline$BDLSystemPowerIoCompletion$3$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_97#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_98#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_99#1:
- call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$3$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$3$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_94#1:
- goto inline$BDLGetDebugLevel$93$Entry#1;
-
- inline$BDLGetDebugLevel$93$Entry#1:
- goto inline$BDLGetDebugLevel$93$start#1;
-
- inline$BDLGetDebugLevel$93$start#1:
- goto inline$BDLGetDebugLevel$93$label_3#1;
-
- inline$BDLGetDebugLevel$93$label_3#1:
- havoc inline$BDLGetDebugLevel$93$myNondetVar_0;
- inline$BDLGetDebugLevel$93$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$93$myNondetVar_0;
- goto inline$BDLGetDebugLevel$93$label_1#1;
-
- inline$BDLGetDebugLevel$93$label_1#1:
- goto inline$BDLGetDebugLevel$93$Return#1;
-
- inline$BDLGetDebugLevel$93$Return#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$93$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$3$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$3$anon49_Then#1, inline$BDLSystemPowerIoCompletion$3$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_103_true#1, inline$BDLSystemPowerIoCompletion$3$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$3$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$3$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_104#1:
- inline$BDLSystemPowerIoCompletion$3$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$3$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$3$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$3$Return#1;
-
- inline$BDLSystemPowerIoCompletion$3$Return#1:
- inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$3$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$3$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$3$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$3$anon14_Then#1, inline$CallCompletionRoutine$3$anon14_Else#1;
-
- inline$CallCompletionRoutine$3$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$3$anon9#1;
-
- inline$CallCompletionRoutine$3$anon9#1:
- goto inline$CallCompletionRoutine$3$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$3$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$3$Return#1;
-
- inline$CallCompletionRoutine$3$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$3$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$3$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$3$Entry#1:
- inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$3$start#1;
-
- inline$BDLDevicePowerIoCompletion$3$start#1:
- call inline$BDLDevicePowerIoCompletion$3$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$3$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_4#1:
- inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_6#1:
- inline$BDLDevicePowerIoCompletion$3$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$3$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$3$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$3$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$21$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$21$Entry#1:
- inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$21$start#1;
-
- inline$IoGetCurrentIrpStackLocation$21$start#1:
- inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$21$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$21$label_3_true#1, inline$IoGetCurrentIrpStackLocation$21$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$21$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$21$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$21$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$21$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$21$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$21$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$21$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$21$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$21$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$21$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$21$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$21$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$21$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$21$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$21$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$21$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$21$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$21$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$21$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$21$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$21$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$21$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon30_Then#1, inline$BDLDevicePowerIoCompletion$3$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_13#1:
- inline$BDLDevicePowerIoCompletion$3$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$3$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$3$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_17#1:
- goto inline$BDLGetDebugLevel$76$Entry#1;
-
- inline$BDLGetDebugLevel$76$Entry#1:
- goto inline$BDLGetDebugLevel$76$start#1;
-
- inline$BDLGetDebugLevel$76$start#1:
- goto inline$BDLGetDebugLevel$76$label_3#1;
-
- inline$BDLGetDebugLevel$76$label_3#1:
- havoc inline$BDLGetDebugLevel$76$myNondetVar_0;
- inline$BDLGetDebugLevel$76$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$76$myNondetVar_0;
- goto inline$BDLGetDebugLevel$76$label_1#1;
-
- inline$BDLGetDebugLevel$76$label_1#1:
- goto inline$BDLGetDebugLevel$76$Return#1;
-
- inline$BDLGetDebugLevel$76$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$76$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon31_Then#1, inline$BDLDevicePowerIoCompletion$3$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_20_true#1, inline$BDLDevicePowerIoCompletion$3$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_24#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_25#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_26#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$3$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_21#1:
- goto inline$BDLGetDebugLevel$77$Entry#1;
-
- inline$BDLGetDebugLevel$77$Entry#1:
- goto inline$BDLGetDebugLevel$77$start#1;
-
- inline$BDLGetDebugLevel$77$start#1:
- goto inline$BDLGetDebugLevel$77$label_3#1;
-
- inline$BDLGetDebugLevel$77$label_3#1:
- havoc inline$BDLGetDebugLevel$77$myNondetVar_0;
- inline$BDLGetDebugLevel$77$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$77$myNondetVar_0;
- goto inline$BDLGetDebugLevel$77$label_1#1;
-
- inline$BDLGetDebugLevel$77$label_1#1:
- goto inline$BDLGetDebugLevel$77$Return#1;
-
- inline$BDLGetDebugLevel$77$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$77$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon32_Then#1, inline$BDLDevicePowerIoCompletion$3$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_30_true#1, inline$BDLDevicePowerIoCompletion$3$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_34#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_35#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_36#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$3$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_31#1:
- goto inline$BDLGetDebugLevel$78$Entry#1;
-
- inline$BDLGetDebugLevel$78$Entry#1:
- goto inline$BDLGetDebugLevel$78$start#1;
-
- inline$BDLGetDebugLevel$78$start#1:
- goto inline$BDLGetDebugLevel$78$label_3#1;
-
- inline$BDLGetDebugLevel$78$label_3#1:
- havoc inline$BDLGetDebugLevel$78$myNondetVar_0;
- inline$BDLGetDebugLevel$78$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$78$myNondetVar_0;
- goto inline$BDLGetDebugLevel$78$label_1#1;
-
- inline$BDLGetDebugLevel$78$label_1#1:
- goto inline$BDLGetDebugLevel$78$Return#1;
-
- inline$BDLGetDebugLevel$78$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$78$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon33_Then#1, inline$BDLDevicePowerIoCompletion$3$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_40_true#1, inline$BDLDevicePowerIoCompletion$3$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_41_true#1, inline$BDLDevicePowerIoCompletion$3$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$3$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$3$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_44_true#1, inline$BDLDevicePowerIoCompletion$3$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$3$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_45_true#1, inline$BDLDevicePowerIoCompletion$3$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$3$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$3$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$3$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$3$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$3$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$3$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_54#1:
- inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$3$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_55_true#1, inline$BDLDevicePowerIoCompletion$3$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_56#1:
- call inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$3$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$3$anon34_Then#1, inline$BDLDevicePowerIoCompletion$3$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_59#1:
- goto inline$BDLGetDebugLevel$79$Entry#1;
-
- inline$BDLGetDebugLevel$79$Entry#1:
- goto inline$BDLGetDebugLevel$79$start#1;
-
- inline$BDLGetDebugLevel$79$start#1:
- goto inline$BDLGetDebugLevel$79$label_3#1;
-
- inline$BDLGetDebugLevel$79$label_3#1:
- havoc inline$BDLGetDebugLevel$79$myNondetVar_0;
- inline$BDLGetDebugLevel$79$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$79$myNondetVar_0;
- goto inline$BDLGetDebugLevel$79$label_1#1;
-
- inline$BDLGetDebugLevel$79$label_1#1:
- goto inline$BDLGetDebugLevel$79$Return#1;
-
- inline$BDLGetDebugLevel$79$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$79$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon35_Then#1, inline$BDLDevicePowerIoCompletion$3$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_62_true#1, inline$BDLDevicePowerIoCompletion$3$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_66#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_67#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_68#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$3$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_63#1:
- goto inline$BDLGetDebugLevel$80$Entry#1;
-
- inline$BDLGetDebugLevel$80$Entry#1:
- goto inline$BDLGetDebugLevel$80$start#1;
-
- inline$BDLGetDebugLevel$80$start#1:
- goto inline$BDLGetDebugLevel$80$label_3#1;
-
- inline$BDLGetDebugLevel$80$label_3#1:
- havoc inline$BDLGetDebugLevel$80$myNondetVar_0;
- inline$BDLGetDebugLevel$80$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$80$myNondetVar_0;
- goto inline$BDLGetDebugLevel$80$label_1#1;
-
- inline$BDLGetDebugLevel$80$label_1#1:
- goto inline$BDLGetDebugLevel$80$Return#1;
-
- inline$BDLGetDebugLevel$80$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$80$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon36_Then#1, inline$BDLDevicePowerIoCompletion$3$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_72_true#1, inline$BDLDevicePowerIoCompletion$3$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_76#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_77#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_78#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$3$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_73#1:
- goto inline$BDLGetDebugLevel$81$Entry#1;
-
- inline$BDLGetDebugLevel$81$Entry#1:
- goto inline$BDLGetDebugLevel$81$start#1;
-
- inline$BDLGetDebugLevel$81$start#1:
- goto inline$BDLGetDebugLevel$81$label_3#1;
-
- inline$BDLGetDebugLevel$81$label_3#1:
- havoc inline$BDLGetDebugLevel$81$myNondetVar_0;
- inline$BDLGetDebugLevel$81$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$81$myNondetVar_0;
- goto inline$BDLGetDebugLevel$81$label_1#1;
-
- inline$BDLGetDebugLevel$81$label_1#1:
- goto inline$BDLGetDebugLevel$81$Return#1;
-
- inline$BDLGetDebugLevel$81$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$81$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon37_Then#1, inline$BDLDevicePowerIoCompletion$3$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_82_true#1, inline$BDLDevicePowerIoCompletion$3$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$3$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$3$anon38_Then#1, inline$BDLDevicePowerIoCompletion$3$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$3$anon39_Then#1, inline$BDLDevicePowerIoCompletion$3$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_92#1:
- goto inline$storm_IoCompleteRequest$7$Entry#1;
-
- inline$storm_IoCompleteRequest$7$Entry#1:
- inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$7$start#1;
-
- inline$storm_IoCompleteRequest$7$start#1:
- inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$7$label_3#1;
-
- inline$storm_IoCompleteRequest$7$label_3#1:
- call inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$7$label_6#1;
-
- inline$storm_IoCompleteRequest$7$label_6#1:
- goto inline$storm_IoCompleteRequest$7$label_6_true#1, inline$storm_IoCompleteRequest$7$label_6_false#1;
-
- inline$storm_IoCompleteRequest$7$label_6_false#1:
- assume inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$7$label_7#1;
-
- inline$storm_IoCompleteRequest$7$label_6_true#1:
- assume inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$7$label_8#1;
-
- inline$storm_IoCompleteRequest$7$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$7$anon3_Then#1, inline$storm_IoCompleteRequest$7$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$7$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$7$anon1#1;
-
- inline$storm_IoCompleteRequest$7$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$7$label_9#1;
-
- inline$storm_IoCompleteRequest$7$label_9#1:
- goto inline$storm_IoCompleteRequest$7$label_9_true#1, inline$storm_IoCompleteRequest$7$label_9_false#1;
-
- inline$storm_IoCompleteRequest$7$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$7$label_10#1;
-
- inline$storm_IoCompleteRequest$7$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$7$label_1#1;
-
- inline$storm_IoCompleteRequest$7$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$7$label_7#1;
-
- inline$storm_IoCompleteRequest$7$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$7$label_1#1;
-
- inline$storm_IoCompleteRequest$7$label_1#1:
- goto inline$storm_IoCompleteRequest$7$Return#1;
-
- inline$storm_IoCompleteRequest$7$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$7$Return#1;
-
- inline$storm_IoCompleteRequest$7$Return#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon40_Then#1, inline$BDLDevicePowerIoCompletion$3$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$3$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$3$anon41_Then#1, inline$BDLDevicePowerIoCompletion$3$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_98#1:
- goto inline$BDLGetDebugLevel$82$Entry#1;
-
- inline$BDLGetDebugLevel$82$Entry#1:
- goto inline$BDLGetDebugLevel$82$start#1;
-
- inline$BDLGetDebugLevel$82$start#1:
- goto inline$BDLGetDebugLevel$82$label_3#1;
-
- inline$BDLGetDebugLevel$82$label_3#1:
- havoc inline$BDLGetDebugLevel$82$myNondetVar_0;
- inline$BDLGetDebugLevel$82$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$82$myNondetVar_0;
- goto inline$BDLGetDebugLevel$82$label_1#1;
-
- inline$BDLGetDebugLevel$82$label_1#1:
- goto inline$BDLGetDebugLevel$82$Return#1;
-
- inline$BDLGetDebugLevel$82$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$82$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon42_Then#1, inline$BDLDevicePowerIoCompletion$3$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_101_true#1, inline$BDLDevicePowerIoCompletion$3$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_105#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_106#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_107#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$3$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_102#1:
- goto inline$BDLGetDebugLevel$83$Entry#1;
-
- inline$BDLGetDebugLevel$83$Entry#1:
- goto inline$BDLGetDebugLevel$83$start#1;
-
- inline$BDLGetDebugLevel$83$start#1:
- goto inline$BDLGetDebugLevel$83$label_3#1;
-
- inline$BDLGetDebugLevel$83$label_3#1:
- havoc inline$BDLGetDebugLevel$83$myNondetVar_0;
- inline$BDLGetDebugLevel$83$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$83$myNondetVar_0;
- goto inline$BDLGetDebugLevel$83$label_1#1;
-
- inline$BDLGetDebugLevel$83$label_1#1:
- goto inline$BDLGetDebugLevel$83$Return#1;
-
- inline$BDLGetDebugLevel$83$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$83$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon43_Then#1, inline$BDLDevicePowerIoCompletion$3$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_111_true#1, inline$BDLDevicePowerIoCompletion$3$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_115#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_116#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_117#1:
- call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$3$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$3$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_112#1:
- goto inline$BDLGetDebugLevel$84$Entry#1;
-
- inline$BDLGetDebugLevel$84$Entry#1:
- goto inline$BDLGetDebugLevel$84$start#1;
-
- inline$BDLGetDebugLevel$84$start#1:
- goto inline$BDLGetDebugLevel$84$label_3#1;
-
- inline$BDLGetDebugLevel$84$label_3#1:
- havoc inline$BDLGetDebugLevel$84$myNondetVar_0;
- inline$BDLGetDebugLevel$84$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$84$myNondetVar_0;
- goto inline$BDLGetDebugLevel$84$label_1#1;
-
- inline$BDLGetDebugLevel$84$label_1#1:
- goto inline$BDLGetDebugLevel$84$Return#1;
-
- inline$BDLGetDebugLevel$84$Return#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$84$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$3$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$3$anon44_Then#1, inline$BDLDevicePowerIoCompletion$3$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_121_true#1, inline$BDLDevicePowerIoCompletion$3$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$3$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$3$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_122#1:
- inline$BDLDevicePowerIoCompletion$3$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$3$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$3$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$3$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$3$Return#1;
-
- inline$BDLDevicePowerIoCompletion$3$Return#1:
- inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$3$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$3$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$3$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$3$anon13_Then#1, inline$CallCompletionRoutine$3$anon13_Else#1;
-
- inline$CallCompletionRoutine$3$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$3$anon7#1;
-
- inline$CallCompletionRoutine$3$anon7#1:
- goto inline$CallCompletionRoutine$3$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$3$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$3$Return#1;
-
- inline$CallCompletionRoutine$3$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$3$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$3$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$3$Entry#1:
- inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$3$start#1;
-
- inline$BDLCallDriverCompletionRoutine$3$start#1:
- inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$3$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$3$label_3_true#1, inline$BDLCallDriverCompletionRoutine$3$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$3$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$3$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$3$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$3$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_6#1:
- goto inline$storm_KeSetEvent$3$Entry#1;
-
- inline$storm_KeSetEvent$3$Entry#1:
- inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$3$start#1;
-
- inline$storm_KeSetEvent$3$start#1:
- inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$3$label_3#1;
-
- inline$storm_KeSetEvent$3$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$3$label_1#1;
-
- inline$storm_KeSetEvent$3$label_1#1:
- goto inline$storm_KeSetEvent$3$Return#1;
-
- inline$storm_KeSetEvent$3$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$3$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$3$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$3$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$3$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$3$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$3$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$3$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_9#1:
- inline$BDLCallDriverCompletionRoutine$3$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$3$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$3$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$3$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$3$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$3$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$3$Return#1:
- inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$3$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$3$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$3$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$3$anon12_Then#1, inline$CallCompletionRoutine$3$anon12_Else#1;
-
- inline$CallCompletionRoutine$3$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$3$anon5#1;
-
- inline$CallCompletionRoutine$3$anon5#1:
- goto inline$CallCompletionRoutine$3$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$3$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$3$label_23#1;
-
- inline$CallCompletionRoutine$3$label_23#1:
- inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$3$label_24#1;
-
- inline$CallCompletionRoutine$3$label_24#1:
- goto inline$CallCompletionRoutine$3$label_24_true#1, inline$CallCompletionRoutine$3$label_24_false#1;
-
- inline$CallCompletionRoutine$3$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$3$label_1#1;
-
- inline$CallCompletionRoutine$3$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$3$label_25#1;
-
- inline$CallCompletionRoutine$3$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$3$label_1#1;
-
- inline$CallCompletionRoutine$3$label_1#1:
- goto inline$CallCompletionRoutine$3$Return#1;
-
- inline$CallCompletionRoutine$3$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$3$Return#1;
-
- inline$CallCompletionRoutine$3$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$3$Return#1;
-
- inline$CallCompletionRoutine$3$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$3$Return#1;
-
- inline$CallCompletionRoutine$3$Return#1:
- goto inline$storm_IoCallDriver$1$label_39$1#1;
-
- inline$storm_IoCallDriver$1$label_39$1#1:
- goto inline$storm_IoCallDriver$1$anon15_Then#1, inline$storm_IoCallDriver$1$anon15_Else#1;
-
- inline$storm_IoCallDriver$1$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$1$anon10#1;
-
- inline$storm_IoCallDriver$1$anon10#1:
- goto inline$storm_IoCallDriver$1$label_36#1;
-
- inline$storm_IoCallDriver$1$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$1$Return#1;
-
- inline$storm_IoCallDriver$1$label_27_case_0#1:
- assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$1$label_28#1;
-
- inline$storm_IoCallDriver$1$label_28#1:
- inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$1$label_42#1;
-
- inline$storm_IoCallDriver$1$label_42#1:
- goto inline$storm_IoCallDriver$1$label_43#1;
-
- inline$storm_IoCallDriver$1$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$1$label_36#1;
-
- inline$storm_IoCallDriver$1$label_36#1:
- inline$storm_IoCallDriver$1$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$1$label_1#1;
-
- inline$storm_IoCallDriver$1$label_1#1:
- goto inline$storm_IoCallDriver$1$Return#1;
-
- inline$storm_IoCallDriver$1$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$1$Return#1;
-
- inline$storm_IoCallDriver$1$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$1$Return#1;
-
- inline$storm_IoCallDriver$1$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$1$Return#1;
-
- inline$storm_IoCallDriver$1$Return#1:
- inline$storm_PoCallDriver$0$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$1$$result.storm_IoCallDriver$456.0$1$;
- goto inline$storm_PoCallDriver$0$label_3$1#1;
-
- inline$storm_PoCallDriver$0$label_3$1#1:
- goto inline$storm_PoCallDriver$0$anon2_Then#1, inline$storm_PoCallDriver$0$anon2_Else#1;
-
- inline$storm_PoCallDriver$0$anon2_Else#1:
- assume !raiseException;
- goto inline$storm_PoCallDriver$0$anon1#1;
-
- inline$storm_PoCallDriver$0$anon1#1:
- goto inline$storm_PoCallDriver$0$label_6#1;
-
- inline$storm_PoCallDriver$0$label_6#1:
- inline$storm_PoCallDriver$0$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$0$$result.storm_IoCallDriver$499.27$2$;
- goto inline$storm_PoCallDriver$0$label_1#1;
-
- inline$storm_PoCallDriver$0$label_1#1:
- goto inline$storm_PoCallDriver$0$Return#1;
-
- inline$storm_PoCallDriver$0$anon2_Then#1:
- assume raiseException;
- goto inline$storm_PoCallDriver$0$Return#1;
-
- inline$storm_PoCallDriver$0$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$0$$result.storm_PoCallDriver$494.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_25$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_25$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon22_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon22_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon13#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon13#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_28#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_28#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_PoCallDriver$104.29$3$;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_29#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_29#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$0$label_29_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_29_false#1:
- assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_29_true#1:
- assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_31#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_31#1:
- goto inline$storm_KeWaitForSingleObject$0$Entry#1;
-
- inline$storm_KeWaitForSingleObject$0$Entry#1:
- inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
- inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
- goto inline$storm_KeWaitForSingleObject$0$start#1;
-
- inline$storm_KeWaitForSingleObject$0$start#1:
- inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
- inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
- goto inline$storm_KeWaitForSingleObject$0$label_3#1;
-
- inline$storm_KeWaitForSingleObject$0$label_3#1:
- goto inline$storm_KeWaitForSingleObject$0$label_3_true#1, inline$storm_KeWaitForSingleObject$0$label_3_false#1;
-
- inline$storm_KeWaitForSingleObject$0$label_3_false#1:
- assume inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
- goto inline$storm_KeWaitForSingleObject$0$label_4#1;
-
- inline$storm_KeWaitForSingleObject$0$label_4#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$0$anon6_Then#1, inline$storm_KeWaitForSingleObject$0$anon6_Else#1;
-
- inline$storm_KeWaitForSingleObject$0$anon6_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$0$anon1#1;
-
- inline$storm_KeWaitForSingleObject$0$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$0$label_13#1;
-
- inline$storm_KeWaitForSingleObject$0$label_13#1:
- inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$0$label_1#1;
-
- inline$storm_KeWaitForSingleObject$0$anon6_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$0$Return#1;
-
- inline$storm_KeWaitForSingleObject$0$label_3_true#1:
- assume inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
- goto inline$storm_KeWaitForSingleObject$0$label_5#1;
-
- inline$storm_KeWaitForSingleObject$0$label_5#1:
- call inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$ := storm_nondet();
- goto inline$storm_KeWaitForSingleObject$0$label_8#1;
-
- inline$storm_KeWaitForSingleObject$0$label_8#1:
- goto inline$storm_KeWaitForSingleObject$0$label_8_true#1, inline$storm_KeWaitForSingleObject$0$label_8_false#1;
-
- inline$storm_KeWaitForSingleObject$0$label_8_false#1:
- assume inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$ == 0;
- goto inline$storm_KeWaitForSingleObject$0$label_9#1;
-
- inline$storm_KeWaitForSingleObject$0$label_9#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$0$anon7_Then#1, inline$storm_KeWaitForSingleObject$0$anon7_Else#1;
-
- inline$storm_KeWaitForSingleObject$0$anon7_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$0$anon3#1;
-
- inline$storm_KeWaitForSingleObject$0$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$0$label_12#1;
-
- inline$storm_KeWaitForSingleObject$0$label_12#1:
- inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
- goto inline$storm_KeWaitForSingleObject$0$label_1#1;
-
- inline$storm_KeWaitForSingleObject$0$anon7_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$0$Return#1;
-
- inline$storm_KeWaitForSingleObject$0$label_8_true#1:
- assume inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$ != 0;
- goto inline$storm_KeWaitForSingleObject$0$label_10#1;
-
- inline$storm_KeWaitForSingleObject$0$label_10#1:
- havoc raiseException;
- goto inline$storm_KeWaitForSingleObject$0$anon8_Then#1, inline$storm_KeWaitForSingleObject$0$anon8_Else#1;
-
- inline$storm_KeWaitForSingleObject$0$anon8_Else#1:
- assume !raiseException;
- goto inline$storm_KeWaitForSingleObject$0$anon5#1;
-
- inline$storm_KeWaitForSingleObject$0$anon5#1:
- assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
- call contextSwitch();
- goto inline$storm_KeWaitForSingleObject$0$label_11#1;
-
- inline$storm_KeWaitForSingleObject$0$label_11#1:
- inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
- goto inline$storm_KeWaitForSingleObject$0$label_1#1;
-
- inline$storm_KeWaitForSingleObject$0$label_1#1:
- goto inline$storm_KeWaitForSingleObject$0$Return#1;
-
- inline$storm_KeWaitForSingleObject$0$anon8_Then#1:
- assume raiseException;
- goto inline$storm_KeWaitForSingleObject$0$Return#1;
-
- inline$storm_KeWaitForSingleObject$0$Return#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_31$1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_31$1#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon23_Else#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon23_Else#1:
- assume !raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$anon15#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon15#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_34#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_34#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_KeWaitForSingleObject$116.38$5$;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_35#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_35#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$0$label_35_false#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_35_false#1:
- assume inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_35_true#1:
- assume inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_37#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_37#1:
- call inline$BDLCallLowerLevelDriverAndWait$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_38#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_38#1:
- call inline$BDLCallLowerLevelDriverAndWait$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_39#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_39#1:
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_36#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_36#1:
- havoc inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
- inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_30#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_30#1:
- inline$BDLCallLowerLevelDriverAndWait$0$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
- goto inline$BDLCallLowerLevelDriverAndWait$0$label_1#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$label_1#1:
- call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon23_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon22_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon21_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon19_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon18_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon17_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$anon16_Then#1:
- assume raiseException;
- goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
-
- inline$BDLCallLowerLevelDriverAndWait$0$Return#1:
- inline$BDLPnPStart$0$$result.BDLCallLowerLevelDriverAndWait$1975.43$13$ := inline$BDLCallLowerLevelDriverAndWait$0$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
- goto inline$BDLPnPStart$0$label_32$1#1;
-
- inline$BDLPnPStart$0$label_32$1#1:
- goto inline$BDLPnPStart$0$anon39_Then#1, inline$BDLPnPStart$0$anon39_Else#1;
-
- inline$BDLPnPStart$0$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon7#1;
-
- inline$BDLPnPStart$0$anon7#1:
- goto inline$BDLPnPStart$0$label_36#1;
-
- inline$BDLPnPStart$0$label_36#1:
- inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := inline$BDLPnPStart$0$$result.BDLCallLowerLevelDriverAndWait$1975.43$13$;
- goto inline$BDLPnPStart$0$label_37#1;
-
- inline$BDLPnPStart$0$label_37#1:
- goto inline$BDLPnPStart$0$label_37_true#1, inline$BDLPnPStart$0$label_37_false#1;
-
- inline$BDLPnPStart$0$label_37_false#1:
- assume !INT_LEQ(0, inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16);
- goto inline$BDLPnPStart$0$label_38#1;
-
- inline$BDLPnPStart$0$label_38#1:
- goto inline$BDLGetDebugLevel$97$Entry#1;
-
- inline$BDLGetDebugLevel$97$Entry#1:
- goto inline$BDLGetDebugLevel$97$start#1;
-
- inline$BDLGetDebugLevel$97$start#1:
- goto inline$BDLGetDebugLevel$97$label_3#1;
-
- inline$BDLGetDebugLevel$97$label_3#1:
- havoc inline$BDLGetDebugLevel$97$myNondetVar_0;
- inline$BDLGetDebugLevel$97$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$97$myNondetVar_0;
- goto inline$BDLGetDebugLevel$97$label_1#1;
-
- inline$BDLGetDebugLevel$97$label_1#1:
- goto inline$BDLGetDebugLevel$97$Return#1;
-
- inline$BDLGetDebugLevel$97$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$ := inline$BDLGetDebugLevel$97$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_38$1#1;
-
- inline$BDLPnPStart$0$label_38$1#1:
- goto inline$BDLPnPStart$0$anon40_Then#1, inline$BDLPnPStart$0$anon40_Else#1;
-
- inline$BDLPnPStart$0$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon9#1;
-
- inline$BDLPnPStart$0$anon9#1:
- goto inline$BDLPnPStart$0$label_151#1;
-
- inline$BDLPnPStart$0$label_151#1:
- goto inline$BDLPnPStart$0$label_151_true#1, inline$BDLPnPStart$0$label_151_false#1;
-
- inline$BDLPnPStart$0$label_151_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$) == 0;
- goto inline$BDLPnPStart$0$label_152#1;
-
- inline$BDLPnPStart$0$label_151_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$) != 0;
- goto inline$BDLPnPStart$0$label_155#1;
-
- inline$BDLPnPStart$0$label_155#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_156#1;
-
- inline$BDLPnPStart$0$label_156#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_157#1;
-
- inline$BDLPnPStart$0$label_157#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_158#1;
-
- inline$BDLPnPStart$0$label_158#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$1979.0$15$;
- goto inline$BDLPnPStart$0$label_152#1;
-
- inline$BDLPnPStart$0$label_152#1:
- goto inline$BDLGetDebugLevel$107$Entry#1;
-
- inline$BDLGetDebugLevel$107$Entry#1:
- goto inline$BDLGetDebugLevel$107$start#1;
-
- inline$BDLGetDebugLevel$107$start#1:
- goto inline$BDLGetDebugLevel$107$label_3#1;
-
- inline$BDLGetDebugLevel$107$label_3#1:
- havoc inline$BDLGetDebugLevel$107$myNondetVar_0;
- inline$BDLGetDebugLevel$107$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$107$myNondetVar_0;
- goto inline$BDLGetDebugLevel$107$label_1#1;
-
- inline$BDLGetDebugLevel$107$label_1#1:
- goto inline$BDLGetDebugLevel$107$Return#1;
-
- inline$BDLGetDebugLevel$107$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$ := inline$BDLGetDebugLevel$107$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_152$1#1;
-
- inline$BDLPnPStart$0$label_152$1#1:
- goto inline$BDLPnPStart$0$anon52_Then#1, inline$BDLPnPStart$0$anon52_Else#1;
-
- inline$BDLPnPStart$0$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon33#1;
-
- inline$BDLPnPStart$0$anon33#1:
- goto inline$BDLPnPStart$0$label_161#1;
-
- inline$BDLPnPStart$0$label_161#1:
- goto inline$BDLPnPStart$0$label_161_true#1, inline$BDLPnPStart$0$label_161_false#1;
-
- inline$BDLPnPStart$0$label_161_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$) == 0;
- goto inline$BDLPnPStart$0$label_162#1;
-
- inline$BDLPnPStart$0$label_161_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$) != 0;
- goto inline$BDLPnPStart$0$label_165#1;
-
- inline$BDLPnPStart$0$label_165#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_166#1;
-
- inline$BDLPnPStart$0$label_166#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_167#1;
-
- inline$BDLPnPStart$0$label_167#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_168#1;
-
- inline$BDLPnPStart$0$label_168#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$1979.0$20$;
- goto inline$BDLPnPStart$0$label_162#1;
-
- inline$BDLPnPStart$0$label_162#1:
- goto inline$BDLGetDebugLevel$108$Entry#1;
-
- inline$BDLGetDebugLevel$108$Entry#1:
- goto inline$BDLGetDebugLevel$108$start#1;
-
- inline$BDLGetDebugLevel$108$start#1:
- goto inline$BDLGetDebugLevel$108$label_3#1;
-
- inline$BDLGetDebugLevel$108$label_3#1:
- havoc inline$BDLGetDebugLevel$108$myNondetVar_0;
- inline$BDLGetDebugLevel$108$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$108$myNondetVar_0;
- goto inline$BDLGetDebugLevel$108$label_1#1;
-
- inline$BDLGetDebugLevel$108$label_1#1:
- goto inline$BDLGetDebugLevel$108$Return#1;
-
- inline$BDLGetDebugLevel$108$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$ := inline$BDLGetDebugLevel$108$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_162$1#1;
-
- inline$BDLPnPStart$0$label_162$1#1:
- goto inline$BDLPnPStart$0$anon53_Then#1, inline$BDLPnPStart$0$anon53_Else#1;
-
- inline$BDLPnPStart$0$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon35#1;
-
- inline$BDLPnPStart$0$anon35#1:
- goto inline$BDLPnPStart$0$label_171#1;
-
- inline$BDLPnPStart$0$label_171#1:
- goto inline$BDLPnPStart$0$label_171_true#1, inline$BDLPnPStart$0$label_171_false#1;
-
- inline$BDLPnPStart$0$label_171_false#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$, 4) == 0;
- goto inline$BDLPnPStart$0$label_77#1;
-
- inline$BDLPnPStart$0$label_171_true#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$, 4) != 0;
- goto inline$BDLPnPStart$0$label_172#1;
-
- inline$BDLPnPStart$0$label_172#1:
- goto inline$BDLPnPStart$0$label_77#1;
-
- inline$BDLPnPStart$0$anon53_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon52_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon40_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$label_37_true#1:
- assume INT_LEQ(0, inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16);
- goto inline$BDLPnPStart$0$label_41#1;
-
- inline$BDLPnPStart$0$label_41#1:
- havoc inline$BDLPnPStart$0$$result.memset$1992.4$25$;
- goto inline$BDLPnPStart$0$label_44#1;
-
- inline$BDLPnPStart$0$label_44#1:
- goto inline$BDLPnPStart$0$label_45#1;
-
- inline$BDLPnPStart$0$label_45#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_46#1;
-
- inline$BDLPnPStart$0$label_46#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_47#1;
-
- inline$BDLPnPStart$0$label_47#1:
- goto inline$BDLPnPStart$0$label_50#1;
-
- inline$BDLPnPStart$0$label_50#1:
- inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := inline$BDLPnPStart$0$$callresult.$1999.70$26$;
- goto inline$BDLPnPStart$0$label_51#1;
-
- inline$BDLPnPStart$0$label_51#1:
- goto inline$BDLPnPStart$0$label_51_true#1, inline$BDLPnPStart$0$label_51_false#1;
-
- inline$BDLPnPStart$0$label_51_false#1:
- assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 == 0;
- goto inline$BDLPnPStart$0$label_52#1;
-
- inline$BDLPnPStart$0$label_52#1:
- goto inline$BDLPnPStart$0$label_104#1;
-
- inline$BDLPnPStart$0$label_104#1:
- goto inline$BDLPnPStart$0$label_105#1;
-
- inline$BDLPnPStart$0$label_105#1:
- havoc inline$BDLPnPStart$0$$result.memcpy$2018.0$38$;
- goto inline$BDLPnPStart$0$label_108#1;
-
- inline$BDLPnPStart$0$label_108#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_109#1;
-
- inline$BDLPnPStart$0$label_109#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_110#1;
-
- inline$BDLPnPStart$0$label_110#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_111#1;
-
- inline$BDLPnPStart$0$label_111#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_112#1;
-
- inline$BDLPnPStart$0$label_112#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_113#1;
-
- inline$BDLPnPStart$0$label_113#1:
- havoc inline$BDLPnPStart$0$myNondetVar_0;
- goto inline$BDLPnPStart$0$label_114#1;
-
- inline$BDLPnPStart$0$label_114#1:
- call inline$BDLPnPStart$0$$result.IoSetDeviceInterfaceState$2033.38$41$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16), 1);
- goto inline$BDLPnPStart$0$anon47_Then#1, inline$BDLPnPStart$0$anon47_Else#1;
-
- inline$BDLPnPStart$0$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon23#1;
-
- inline$BDLPnPStart$0$anon23#1:
- goto inline$BDLPnPStart$0$label_117#1;
-
- inline$BDLPnPStart$0$label_117#1:
- inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := inline$BDLPnPStart$0$$result.IoSetDeviceInterfaceState$2033.38$41$;
- goto inline$BDLPnPStart$0$label_118#1;
-
- inline$BDLPnPStart$0$label_118#1:
- goto inline$BDLPnPStart$0$label_118_true#1, inline$BDLPnPStart$0$label_118_false#1;
-
- inline$BDLPnPStart$0$label_118_false#1:
- assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 == 0;
- goto inline$BDLPnPStart$0$label_119#1;
-
- inline$BDLPnPStart$0$label_119#1:
- goto inline$BDLPnPStart$0$label_148#1;
-
- inline$BDLPnPStart$0$label_148#1:
- goto inline$storm_KeSetEvent$4$Entry#1;
-
- inline$storm_KeSetEvent$4$Entry#1:
- inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16);
- goto inline$storm_KeSetEvent$4$start#1;
-
- inline$storm_KeSetEvent$4$start#1:
- inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$4$label_3#1;
-
- inline$storm_KeSetEvent$4$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$4$label_1#1;
-
- inline$storm_KeSetEvent$4$label_1#1:
- goto inline$storm_KeSetEvent$4$Return#1;
-
- inline$storm_KeSetEvent$4$Return#1:
- goto inline$BDLPnPStart$0$label_148$1#1;
-
- inline$BDLPnPStart$0$label_148$1#1:
- goto inline$BDLPnPStart$0$anon51_Then#1, inline$BDLPnPStart$0$anon51_Else#1;
-
- inline$BDLPnPStart$0$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon31#1;
-
- inline$BDLPnPStart$0$anon31#1:
- goto inline$BDLPnPStart$0$label_77#1;
-
- inline$BDLPnPStart$0$anon51_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$label_118_true#1:
- assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 != 0;
- goto inline$BDLPnPStart$0$label_120#1;
-
- inline$BDLPnPStart$0$label_120#1:
- goto inline$BDLGetDebugLevel$104$Entry#1;
-
- inline$BDLGetDebugLevel$104$Entry#1:
- goto inline$BDLGetDebugLevel$104$start#1;
-
- inline$BDLGetDebugLevel$104$start#1:
- goto inline$BDLGetDebugLevel$104$label_3#1;
-
- inline$BDLGetDebugLevel$104$label_3#1:
- havoc inline$BDLGetDebugLevel$104$myNondetVar_0;
- inline$BDLGetDebugLevel$104$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$104$myNondetVar_0;
- goto inline$BDLGetDebugLevel$104$label_1#1;
-
- inline$BDLGetDebugLevel$104$label_1#1:
- goto inline$BDLGetDebugLevel$104$Return#1;
-
- inline$BDLGetDebugLevel$104$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$ := inline$BDLGetDebugLevel$104$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_120$1#1;
-
- inline$BDLPnPStart$0$label_120$1#1:
- goto inline$BDLPnPStart$0$anon48_Then#1, inline$BDLPnPStart$0$anon48_Else#1;
-
- inline$BDLPnPStart$0$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon25#1;
-
- inline$BDLPnPStart$0$anon25#1:
- goto inline$BDLPnPStart$0$label_123#1;
-
- inline$BDLPnPStart$0$label_123#1:
- goto inline$BDLPnPStart$0$label_123_true#1, inline$BDLPnPStart$0$label_123_false#1;
-
- inline$BDLPnPStart$0$label_123_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$) == 0;
- goto inline$BDLPnPStart$0$label_124#1;
-
- inline$BDLPnPStart$0$label_123_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$) != 0;
- goto inline$BDLPnPStart$0$label_127#1;
-
- inline$BDLPnPStart$0$label_127#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_128#1;
-
- inline$BDLPnPStart$0$label_128#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_129#1;
-
- inline$BDLPnPStart$0$label_129#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_130#1;
-
- inline$BDLPnPStart$0$label_130#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$2037.0$43$;
- goto inline$BDLPnPStart$0$label_124#1;
-
- inline$BDLPnPStart$0$label_124#1:
- goto inline$BDLGetDebugLevel$105$Entry#1;
-
- inline$BDLGetDebugLevel$105$Entry#1:
- goto inline$BDLGetDebugLevel$105$start#1;
-
- inline$BDLGetDebugLevel$105$start#1:
- goto inline$BDLGetDebugLevel$105$label_3#1;
-
- inline$BDLGetDebugLevel$105$label_3#1:
- havoc inline$BDLGetDebugLevel$105$myNondetVar_0;
- inline$BDLGetDebugLevel$105$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$105$myNondetVar_0;
- goto inline$BDLGetDebugLevel$105$label_1#1;
-
- inline$BDLGetDebugLevel$105$label_1#1:
- goto inline$BDLGetDebugLevel$105$Return#1;
-
- inline$BDLGetDebugLevel$105$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$ := inline$BDLGetDebugLevel$105$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_124$1#1;
-
- inline$BDLPnPStart$0$label_124$1#1:
- goto inline$BDLPnPStart$0$anon49_Then#1, inline$BDLPnPStart$0$anon49_Else#1;
-
- inline$BDLPnPStart$0$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon27#1;
-
- inline$BDLPnPStart$0$anon27#1:
- goto inline$BDLPnPStart$0$label_133#1;
-
- inline$BDLPnPStart$0$label_133#1:
- goto inline$BDLPnPStart$0$label_133_true#1, inline$BDLPnPStart$0$label_133_false#1;
-
- inline$BDLPnPStart$0$label_133_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$) == 0;
- goto inline$BDLPnPStart$0$label_134#1;
-
- inline$BDLPnPStart$0$label_133_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$) != 0;
- goto inline$BDLPnPStart$0$label_137#1;
-
- inline$BDLPnPStart$0$label_137#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_138#1;
-
- inline$BDLPnPStart$0$label_138#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_139#1;
-
- inline$BDLPnPStart$0$label_139#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_140#1;
-
- inline$BDLPnPStart$0$label_140#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$2037.0$48$;
- goto inline$BDLPnPStart$0$label_134#1;
-
- inline$BDLPnPStart$0$label_134#1:
- goto inline$BDLGetDebugLevel$106$Entry#1;
-
- inline$BDLGetDebugLevel$106$Entry#1:
- goto inline$BDLGetDebugLevel$106$start#1;
-
- inline$BDLGetDebugLevel$106$start#1:
- goto inline$BDLGetDebugLevel$106$label_3#1;
-
- inline$BDLGetDebugLevel$106$label_3#1:
- havoc inline$BDLGetDebugLevel$106$myNondetVar_0;
- inline$BDLGetDebugLevel$106$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$106$myNondetVar_0;
- goto inline$BDLGetDebugLevel$106$label_1#1;
-
- inline$BDLGetDebugLevel$106$label_1#1:
- goto inline$BDLGetDebugLevel$106$Return#1;
-
- inline$BDLGetDebugLevel$106$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$ := inline$BDLGetDebugLevel$106$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_134$1#1;
-
- inline$BDLPnPStart$0$label_134$1#1:
- goto inline$BDLPnPStart$0$anon50_Then#1, inline$BDLPnPStart$0$anon50_Else#1;
-
- inline$BDLPnPStart$0$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon29#1;
-
- inline$BDLPnPStart$0$anon29#1:
- goto inline$BDLPnPStart$0$label_143#1;
-
- inline$BDLPnPStart$0$label_143#1:
- goto inline$BDLPnPStart$0$label_143_true#1, inline$BDLPnPStart$0$label_143_false#1;
-
- inline$BDLPnPStart$0$label_143_false#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$, 4) == 0;
- goto inline$BDLPnPStart$0$label_144#1;
-
- inline$BDLPnPStart$0$label_143_true#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$, 4) != 0;
- goto inline$BDLPnPStart$0$label_147#1;
-
- inline$BDLPnPStart$0$label_147#1:
- goto inline$BDLPnPStart$0$label_144#1;
-
- inline$BDLPnPStart$0$label_144#1:
- goto inline$BDLPnPStart$0$label_77#1;
-
- inline$BDLPnPStart$0$anon50_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon49_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon48_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon47_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$label_51_true#1:
- assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 != 0;
- goto inline$BDLPnPStart$0$label_53#1;
-
- inline$BDLPnPStart$0$label_53#1:
- goto inline$BDLGetDebugLevel$98$Entry#1;
-
- inline$BDLGetDebugLevel$98$Entry#1:
- goto inline$BDLGetDebugLevel$98$start#1;
-
- inline$BDLGetDebugLevel$98$start#1:
- goto inline$BDLGetDebugLevel$98$label_3#1;
-
- inline$BDLGetDebugLevel$98$label_3#1:
- havoc inline$BDLGetDebugLevel$98$myNondetVar_0;
- inline$BDLGetDebugLevel$98$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$98$myNondetVar_0;
- goto inline$BDLGetDebugLevel$98$label_1#1;
-
- inline$BDLGetDebugLevel$98$label_1#1:
- goto inline$BDLGetDebugLevel$98$Return#1;
-
- inline$BDLGetDebugLevel$98$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$ := inline$BDLGetDebugLevel$98$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_53$1#1;
-
- inline$BDLPnPStart$0$label_53$1#1:
- goto inline$BDLPnPStart$0$anon41_Then#1, inline$BDLPnPStart$0$anon41_Else#1;
-
- inline$BDLPnPStart$0$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon11#1;
-
- inline$BDLPnPStart$0$anon11#1:
- goto inline$BDLPnPStart$0$label_56#1;
-
- inline$BDLPnPStart$0$label_56#1:
- goto inline$BDLPnPStart$0$label_56_true#1, inline$BDLPnPStart$0$label_56_false#1;
-
- inline$BDLPnPStart$0$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$) == 0;
- goto inline$BDLPnPStart$0$label_57#1;
-
- inline$BDLPnPStart$0$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$) != 0;
- goto inline$BDLPnPStart$0$label_60#1;
-
- inline$BDLPnPStart$0$label_60#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_61#1;
-
- inline$BDLPnPStart$0$label_61#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_62#1;
-
- inline$BDLPnPStart$0$label_62#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_63#1;
-
- inline$BDLPnPStart$0$label_63#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$2005.0$28$;
- goto inline$BDLPnPStart$0$label_57#1;
-
- inline$BDLPnPStart$0$label_57#1:
- goto inline$BDLGetDebugLevel$99$Entry#1;
-
- inline$BDLGetDebugLevel$99$Entry#1:
- goto inline$BDLGetDebugLevel$99$start#1;
-
- inline$BDLGetDebugLevel$99$start#1:
- goto inline$BDLGetDebugLevel$99$label_3#1;
-
- inline$BDLGetDebugLevel$99$label_3#1:
- havoc inline$BDLGetDebugLevel$99$myNondetVar_0;
- inline$BDLGetDebugLevel$99$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$99$myNondetVar_0;
- goto inline$BDLGetDebugLevel$99$label_1#1;
-
- inline$BDLGetDebugLevel$99$label_1#1:
- goto inline$BDLGetDebugLevel$99$Return#1;
-
- inline$BDLGetDebugLevel$99$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$ := inline$BDLGetDebugLevel$99$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_57$1#1;
-
- inline$BDLPnPStart$0$label_57$1#1:
- goto inline$BDLPnPStart$0$anon42_Then#1, inline$BDLPnPStart$0$anon42_Else#1;
-
- inline$BDLPnPStart$0$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon13#1;
-
- inline$BDLPnPStart$0$anon13#1:
- goto inline$BDLPnPStart$0$label_66#1;
-
- inline$BDLPnPStart$0$label_66#1:
- goto inline$BDLPnPStart$0$label_66_true#1, inline$BDLPnPStart$0$label_66_false#1;
-
- inline$BDLPnPStart$0$label_66_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$) == 0;
- goto inline$BDLPnPStart$0$label_67#1;
-
- inline$BDLPnPStart$0$label_66_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$) != 0;
- goto inline$BDLPnPStart$0$label_70#1;
-
- inline$BDLPnPStart$0$label_70#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_71#1;
-
- inline$BDLPnPStart$0$label_71#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_72#1;
-
- inline$BDLPnPStart$0$label_72#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_73#1;
-
- inline$BDLPnPStart$0$label_73#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$2005.0$33$;
- goto inline$BDLPnPStart$0$label_67#1;
-
- inline$BDLPnPStart$0$label_67#1:
- goto inline$BDLGetDebugLevel$100$Entry#1;
-
- inline$BDLGetDebugLevel$100$Entry#1:
- goto inline$BDLGetDebugLevel$100$start#1;
-
- inline$BDLGetDebugLevel$100$start#1:
- goto inline$BDLGetDebugLevel$100$label_3#1;
-
- inline$BDLGetDebugLevel$100$label_3#1:
- havoc inline$BDLGetDebugLevel$100$myNondetVar_0;
- inline$BDLGetDebugLevel$100$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$100$myNondetVar_0;
- goto inline$BDLGetDebugLevel$100$label_1#1;
-
- inline$BDLGetDebugLevel$100$label_1#1:
- goto inline$BDLGetDebugLevel$100$Return#1;
-
- inline$BDLGetDebugLevel$100$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$ := inline$BDLGetDebugLevel$100$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_67$1#1;
-
- inline$BDLPnPStart$0$label_67$1#1:
- goto inline$BDLPnPStart$0$anon43_Then#1, inline$BDLPnPStart$0$anon43_Else#1;
-
- inline$BDLPnPStart$0$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon15#1;
-
- inline$BDLPnPStart$0$anon15#1:
- goto inline$BDLPnPStart$0$label_76#1;
-
- inline$BDLPnPStart$0$label_76#1:
- goto inline$BDLPnPStart$0$label_76_true#1, inline$BDLPnPStart$0$label_76_false#1;
-
- inline$BDLPnPStart$0$label_76_false#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$, 4) == 0;
- goto inline$BDLPnPStart$0$label_77#1;
-
- inline$BDLPnPStart$0$label_76_true#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$, 4) != 0;
- goto inline$BDLPnPStart$0$label_80#1;
-
- inline$BDLPnPStart$0$label_80#1:
- goto inline$BDLPnPStart$0$label_77#1;
-
- inline$BDLPnPStart$0$label_77#1:
- goto inline$BDLGetDebugLevel$101$Entry#1;
-
- inline$BDLGetDebugLevel$101$Entry#1:
- goto inline$BDLGetDebugLevel$101$start#1;
-
- inline$BDLGetDebugLevel$101$start#1:
- goto inline$BDLGetDebugLevel$101$label_3#1;
-
- inline$BDLGetDebugLevel$101$label_3#1:
- havoc inline$BDLGetDebugLevel$101$myNondetVar_0;
- inline$BDLGetDebugLevel$101$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$101$myNondetVar_0;
- goto inline$BDLGetDebugLevel$101$label_1#1;
-
- inline$BDLGetDebugLevel$101$label_1#1:
- goto inline$BDLGetDebugLevel$101$Return#1;
-
- inline$BDLGetDebugLevel$101$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$ := inline$BDLGetDebugLevel$101$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_77$1#1;
-
- inline$BDLPnPStart$0$label_77$1#1:
- goto inline$BDLPnPStart$0$anon44_Then#1, inline$BDLPnPStart$0$anon44_Else#1;
-
- inline$BDLPnPStart$0$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon17#1;
-
- inline$BDLPnPStart$0$anon17#1:
- goto inline$BDLPnPStart$0$label_81#1;
-
- inline$BDLPnPStart$0$label_81#1:
- goto inline$BDLPnPStart$0$label_81_true#1, inline$BDLPnPStart$0$label_81_false#1;
-
- inline$BDLPnPStart$0$label_81_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$) == 0;
- goto inline$BDLPnPStart$0$label_82#1;
-
- inline$BDLPnPStart$0$label_81_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$) != 0;
- goto inline$BDLPnPStart$0$label_85#1;
-
- inline$BDLPnPStart$0$label_85#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_86#1;
-
- inline$BDLPnPStart$0$label_86#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_87#1;
-
- inline$BDLPnPStart$0$label_87#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_88#1;
-
- inline$BDLPnPStart$0$label_88#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$2063.0$56$;
- goto inline$BDLPnPStart$0$label_82#1;
-
- inline$BDLPnPStart$0$label_82#1:
- goto inline$BDLGetDebugLevel$102$Entry#1;
-
- inline$BDLGetDebugLevel$102$Entry#1:
- goto inline$BDLGetDebugLevel$102$start#1;
-
- inline$BDLGetDebugLevel$102$start#1:
- goto inline$BDLGetDebugLevel$102$label_3#1;
-
- inline$BDLGetDebugLevel$102$label_3#1:
- havoc inline$BDLGetDebugLevel$102$myNondetVar_0;
- inline$BDLGetDebugLevel$102$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$102$myNondetVar_0;
- goto inline$BDLGetDebugLevel$102$label_1#1;
-
- inline$BDLGetDebugLevel$102$label_1#1:
- goto inline$BDLGetDebugLevel$102$Return#1;
-
- inline$BDLGetDebugLevel$102$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$ := inline$BDLGetDebugLevel$102$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_82$1#1;
-
- inline$BDLPnPStart$0$label_82$1#1:
- goto inline$BDLPnPStart$0$anon45_Then#1, inline$BDLPnPStart$0$anon45_Else#1;
-
- inline$BDLPnPStart$0$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon19#1;
-
- inline$BDLPnPStart$0$anon19#1:
- goto inline$BDLPnPStart$0$label_91#1;
-
- inline$BDLPnPStart$0$label_91#1:
- goto inline$BDLPnPStart$0$label_91_true#1, inline$BDLPnPStart$0$label_91_false#1;
-
- inline$BDLPnPStart$0$label_91_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$) == 0;
- goto inline$BDLPnPStart$0$label_92#1;
-
- inline$BDLPnPStart$0$label_91_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$) != 0;
- goto inline$BDLPnPStart$0$label_95#1;
-
- inline$BDLPnPStart$0$label_95#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_96#1;
-
- inline$BDLPnPStart$0$label_96#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_97#1;
-
- inline$BDLPnPStart$0$label_97#1:
- call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnPStart$0$label_98#1;
-
- inline$BDLPnPStart$0$label_98#1:
- havoc inline$BDLPnPStart$0$$result.DbgPrint$2063.0$61$;
- goto inline$BDLPnPStart$0$label_92#1;
-
- inline$BDLPnPStart$0$label_92#1:
- goto inline$BDLGetDebugLevel$103$Entry#1;
-
- inline$BDLGetDebugLevel$103$Entry#1:
- goto inline$BDLGetDebugLevel$103$start#1;
-
- inline$BDLGetDebugLevel$103$start#1:
- goto inline$BDLGetDebugLevel$103$label_3#1;
-
- inline$BDLGetDebugLevel$103$label_3#1:
- havoc inline$BDLGetDebugLevel$103$myNondetVar_0;
- inline$BDLGetDebugLevel$103$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$103$myNondetVar_0;
- goto inline$BDLGetDebugLevel$103$label_1#1;
-
- inline$BDLGetDebugLevel$103$label_1#1:
- goto inline$BDLGetDebugLevel$103$Return#1;
-
- inline$BDLGetDebugLevel$103$Return#1:
- inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$ := inline$BDLGetDebugLevel$103$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnPStart$0$label_92$1#1;
-
- inline$BDLPnPStart$0$label_92$1#1:
- goto inline$BDLPnPStart$0$anon46_Then#1, inline$BDLPnPStart$0$anon46_Else#1;
-
- inline$BDLPnPStart$0$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLPnPStart$0$anon21#1;
-
- inline$BDLPnPStart$0$anon21#1:
- goto inline$BDLPnPStart$0$label_101#1;
-
- inline$BDLPnPStart$0$label_101#1:
- goto inline$BDLPnPStart$0$label_101_true#1, inline$BDLPnPStart$0$label_101_false#1;
-
- inline$BDLPnPStart$0$label_101_false#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$, 4) == 0;
- goto inline$BDLPnPStart$0$label_102#1;
-
- inline$BDLPnPStart$0$label_101_true#1:
- assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$, 4) != 0;
- goto inline$BDLPnPStart$0$label_103#1;
-
- inline$BDLPnPStart$0$label_103#1:
- goto inline$BDLPnPStart$0$label_102#1;
-
- inline$BDLPnPStart$0$label_102#1:
- inline$BDLPnPStart$0$$result.BDLPnPStart$1954.0$1$ := inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16;
- goto inline$BDLPnPStart$0$label_1#1;
-
- inline$BDLPnPStart$0$label_1#1:
- call __HAVOC_free(inline$BDLPnPStart$0$$bdsiInitializeResourcesParams$7$1964.32$BDLPnPStart$16);
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon46_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon45_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon44_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon43_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon42_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon41_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon39_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon38_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon37_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$anon36_Then#1:
- assume raiseException;
- goto inline$BDLPnPStart$0$Return#1;
-
- inline$BDLPnPStart$0$Return#1:
- inline$BDLPnP$0$$result.BDLPnPStart$906.28$28$ := inline$BDLPnPStart$0$$result.BDLPnPStart$1954.0$1$;
- goto inline$BDLPnP$0$label_113$1#1;
-
- inline$BDLPnP$0$label_113$1#1:
- goto inline$BDLPnP$0$anon67_Then#1, inline$BDLPnP$0$anon67_Else#1;
-
- inline$BDLPnP$0$anon67_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon27#1;
-
- inline$BDLPnP$0$anon27#1:
- goto inline$BDLPnP$0$label_155#1;
-
- inline$BDLPnP$0$label_155#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPStart$906.28$28$;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$anon67_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_52_case_0#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 0;
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 1;
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 2;
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 3;
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 4;
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 5;
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 6;
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume inline$BDLPnP$0$myNondetVar_0 != 23;
- goto inline$BDLPnP$0$label_110#1;
-
- inline$BDLPnP$0$label_110#1:
- goto inline$BDLGetDebugLevel$9$Entry#1;
-
- inline$BDLGetDebugLevel$9$Entry#1:
- goto inline$BDLGetDebugLevel$9$start#1;
-
- inline$BDLGetDebugLevel$9$start#1:
- goto inline$BDLGetDebugLevel$9$label_3#1;
-
- inline$BDLGetDebugLevel$9$label_3#1:
- havoc inline$BDLGetDebugLevel$9$myNondetVar_0;
- inline$BDLGetDebugLevel$9$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$9$myNondetVar_0;
- goto inline$BDLGetDebugLevel$9$label_1#1;
-
- inline$BDLGetDebugLevel$9$label_1#1:
- goto inline$BDLGetDebugLevel$9$Return#1;
-
- inline$BDLGetDebugLevel$9$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$ := inline$BDLGetDebugLevel$9$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_110$1#1;
-
- inline$BDLPnP$0$label_110$1#1:
- goto inline$BDLPnP$0$anon66_Then#1, inline$BDLPnP$0$anon66_Else#1;
-
- inline$BDLPnP$0$anon66_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon25#1;
-
- inline$BDLPnP$0$anon25#1:
- goto inline$BDLPnP$0$label_156#1;
-
- inline$BDLPnP$0$label_156#1:
- goto inline$BDLPnP$0$label_156_true#1, inline$BDLPnP$0$label_156_false#1;
-
- inline$BDLPnP$0$label_156_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$) == 0;
- goto inline$BDLPnP$0$label_157#1;
-
- inline$BDLPnP$0$label_156_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$) != 0;
- goto inline$BDLPnP$0$label_160#1;
-
- inline$BDLPnP$0$label_160#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_161#1;
-
- inline$BDLPnP$0$label_161#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_162#1;
-
- inline$BDLPnP$0$label_162#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_163#1;
-
- inline$BDLPnP$0$label_163#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$987.0$37$;
- goto inline$BDLPnP$0$label_157#1;
-
- inline$BDLPnP$0$label_157#1:
- goto inline$BDLGetDebugLevel$739$Entry#1;
-
- inline$BDLGetDebugLevel$739$Entry#1:
- goto inline$BDLGetDebugLevel$739$start#1;
-
- inline$BDLGetDebugLevel$739$start#1:
- goto inline$BDLGetDebugLevel$739$label_3#1;
-
- inline$BDLGetDebugLevel$739$label_3#1:
- havoc inline$BDLGetDebugLevel$739$myNondetVar_0;
- inline$BDLGetDebugLevel$739$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$739$myNondetVar_0;
- goto inline$BDLGetDebugLevel$739$label_1#1;
-
- inline$BDLGetDebugLevel$739$label_1#1:
- goto inline$BDLGetDebugLevel$739$Return#1;
-
- inline$BDLGetDebugLevel$739$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$ := inline$BDLGetDebugLevel$739$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_157$1#1;
-
- inline$BDLPnP$0$label_157$1#1:
- goto inline$BDLPnP$0$anon77_Then#1, inline$BDLPnP$0$anon77_Else#1;
-
- inline$BDLPnP$0$anon77_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon47#1;
-
- inline$BDLPnP$0$anon47#1:
- goto inline$BDLPnP$0$label_166#1;
-
- inline$BDLPnP$0$label_166#1:
- goto inline$BDLPnP$0$label_166_true#1, inline$BDLPnP$0$label_166_false#1;
-
- inline$BDLPnP$0$label_166_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$) == 0;
- goto inline$BDLPnP$0$label_167#1;
-
- inline$BDLPnP$0$label_166_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$) != 0;
- goto inline$BDLPnP$0$label_170#1;
-
- inline$BDLPnP$0$label_170#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_171#1;
-
- inline$BDLPnP$0$label_171#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_172#1;
-
- inline$BDLPnP$0$label_172#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_173#1;
-
- inline$BDLPnP$0$label_173#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$987.0$42$;
- goto inline$BDLPnP$0$label_167#1;
-
- inline$BDLPnP$0$label_167#1:
- goto inline$BDLGetDebugLevel$740$Entry#1;
-
- inline$BDLGetDebugLevel$740$Entry#1:
- goto inline$BDLGetDebugLevel$740$start#1;
-
- inline$BDLGetDebugLevel$740$start#1:
- goto inline$BDLGetDebugLevel$740$label_3#1;
-
- inline$BDLGetDebugLevel$740$label_3#1:
- havoc inline$BDLGetDebugLevel$740$myNondetVar_0;
- inline$BDLGetDebugLevel$740$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$740$myNondetVar_0;
- goto inline$BDLGetDebugLevel$740$label_1#1;
-
- inline$BDLGetDebugLevel$740$label_1#1:
- goto inline$BDLGetDebugLevel$740$Return#1;
-
- inline$BDLGetDebugLevel$740$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$ := inline$BDLGetDebugLevel$740$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_167$1#1;
-
- inline$BDLPnP$0$label_167$1#1:
- goto inline$BDLPnP$0$anon78_Then#1, inline$BDLPnP$0$anon78_Else#1;
-
- inline$BDLPnP$0$anon78_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon49#1;
-
- inline$BDLPnP$0$anon49#1:
- goto inline$BDLPnP$0$label_176#1;
-
- inline$BDLPnP$0$label_176#1:
- goto inline$BDLPnP$0$label_176_true#1, inline$BDLPnP$0$label_176_false#1;
-
- inline$BDLPnP$0$label_176_false#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$, 4) == 0;
- goto inline$BDLPnP$0$label_177#1;
-
- inline$BDLPnP$0$label_176_true#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$, 4) != 0;
- goto inline$BDLPnP$0$label_180#1;
-
- inline$BDLPnP$0$label_180#1:
- goto inline$BDLPnP$0$label_177#1;
-
- inline$BDLPnP$0$label_177#1:
- goto inline$IoSkipCurrentIrpStackLocation$2$Entry#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$Entry#1:
- inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$IoSkipCurrentIrpStackLocation$2$start#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$start#1:
- inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4 := inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1;
- goto inline$IoSkipCurrentIrpStackLocation$2$label_3#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_3#1:
- goto inline$IoSkipCurrentIrpStackLocation$2$label_3_true#1, inline$IoSkipCurrentIrpStackLocation$2$label_3_false#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_3_false#1:
- inline$IoSkipCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoSkipCurrentIrpStackLocation$2$myVar_0, inline$IoSkipCurrentIrpStackLocation$2$myVar_1);
- goto inline$IoSkipCurrentIrpStackLocation$2$label_4#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_4#1:
- call inline$IoSkipCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSkipCurrentIrpStackLocation$2$label_7#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_7#1:
- call inline$IoSkipCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSkipCurrentIrpStackLocation$2$label_8#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_8#1:
- goto inline$IoSkipCurrentIrpStackLocation$2$label_5#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_3_true#1:
- inline$IoSkipCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoSkipCurrentIrpStackLocation$2$myVar_0, inline$IoSkipCurrentIrpStackLocation$2$myVar_1);
- goto inline$IoSkipCurrentIrpStackLocation$2$label_5#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_5#1:
- inline$IoSkipCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$2$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4) := inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0];
- call contextSwitch();
- goto inline$IoSkipCurrentIrpStackLocation$2$label_6#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_6#1:
- havoc inline$IoSkipCurrentIrpStackLocation$2$myNondetVar_0;
- inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$2$myNondetVar_0, 36, 1);
- goto inline$IoSkipCurrentIrpStackLocation$2$label_1#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$label_1#1:
- goto inline$IoSkipCurrentIrpStackLocation$2$Return#1;
-
- inline$IoSkipCurrentIrpStackLocation$2$Return#1:
- goto inline$BDLPnP$0$label_177$1#1;
-
- inline$BDLPnP$0$label_177$1#1:
- goto inline$BDLPnP$0$anon79_Then#1, inline$BDLPnP$0$anon79_Else#1;
-
- inline$BDLPnP$0$anon79_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon51#1;
-
- inline$BDLPnP$0$anon51#1:
- goto inline$BDLPnP$0$label_181#1;
-
- inline$BDLPnP$0$label_181#1:
- goto inline$storm_IoCallDriver$14$Entry#1;
-
- inline$storm_IoCallDriver$14$Entry#1:
- inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$storm_IoCallDriver$14$start#1;
-
- inline$storm_IoCallDriver$14$start#1:
- inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8_.1;
- goto inline$storm_IoCallDriver$14$label_3#1;
-
- inline$storm_IoCallDriver$14$label_3#1:
- goto inline$storm_IoCallDriver$14$label_4#1;
-
- inline$storm_IoCallDriver$14$label_4#1:
- goto inline$storm_IoCallDriver$14$label_5#1;
-
- inline$storm_IoCallDriver$14$label_5#1:
- goto inline$storm_IoCallDriver$14$label_6#1;
-
- inline$storm_IoCallDriver$14$label_6#1:
- call inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$ := storm_nondet();
- goto inline$storm_IoCallDriver$14$label_9#1;
-
- inline$storm_IoCallDriver$14$label_9#1:
- goto inline$storm_IoCallDriver$14$label_9_true#1, inline$storm_IoCallDriver$14$label_9_false#1;
-
- inline$storm_IoCallDriver$14$label_9_false#1:
- assume inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$ == 0;
- goto inline$storm_IoCallDriver$14$label_10#1;
-
- inline$storm_IoCallDriver$14$label_9_true#1:
- assume inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$ != 0;
- goto inline$storm_IoCallDriver$14$label_13#1;
-
- inline$storm_IoCallDriver$14$label_13#1:
- havoc raiseException;
- goto inline$storm_IoCallDriver$14$anon12_Then#1, inline$storm_IoCallDriver$14$anon12_Else#1;
-
- inline$storm_IoCallDriver$14$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$14$anon3#1;
-
- inline$storm_IoCallDriver$14$anon3#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8], 1);
- call contextSwitch();
- goto inline$storm_IoCallDriver$14$label_14#1;
-
- inline$storm_IoCallDriver$14$label_14#1:
- goto inline$storm_IoCallDriver$14$label_14_true#1, inline$storm_IoCallDriver$14$label_14_false#1;
-
- inline$storm_IoCallDriver$14$label_14_false#1:
- assume 0 == 0;
- goto inline$storm_IoCallDriver$14$label_15#1;
-
- inline$storm_IoCallDriver$14$label_15#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCallDriver$14$label_1#1;
-
- inline$storm_IoCallDriver$14$label_14_true#1:
- assume 0 != 0;
- goto inline$storm_IoCallDriver$14$label_10#1;
-
- inline$storm_IoCallDriver$14$label_10#1:
- goto inline$IoSetNextIrpStackLocation$15$Entry#1;
-
- inline$IoSetNextIrpStackLocation$15$Entry#1:
- inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoSetNextIrpStackLocation$15$start#1;
-
- inline$IoSetNextIrpStackLocation$15$start#1:
- inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
- goto inline$IoSetNextIrpStackLocation$15$label_3#1;
-
- inline$IoSetNextIrpStackLocation$15$label_3#1:
- goto inline$IoSetNextIrpStackLocation$15$label_3_true#1, inline$IoSetNextIrpStackLocation$15$label_3_false#1;
-
- inline$IoSetNextIrpStackLocation$15$label_3_false#1:
- inline$IoSetNextIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LT(0, inline$IoSetNextIrpStackLocation$15$myVar_0);
- goto inline$IoSetNextIrpStackLocation$15$label_4#1;
-
- inline$IoSetNextIrpStackLocation$15$label_4#1:
- call inline$IoSetNextIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$15$label_7#1;
-
- inline$IoSetNextIrpStackLocation$15$label_7#1:
- call inline$IoSetNextIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoSetNextIrpStackLocation$15$label_8#1;
-
- inline$IoSetNextIrpStackLocation$15$label_8#1:
- goto inline$IoSetNextIrpStackLocation$15$label_5#1;
-
- inline$IoSetNextIrpStackLocation$15$label_3_true#1:
- inline$IoSetNextIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LT(0, inline$IoSetNextIrpStackLocation$15$myVar_0);
- goto inline$IoSetNextIrpStackLocation$15$label_5#1;
-
- inline$IoSetNextIrpStackLocation$15$label_5#1:
- inline$IoSetNextIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
- call contextSwitch();
- inline$IoSetNextIrpStackLocation$15$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$15$myVar_0, 1, 1);
- Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$15$tempBoogie0];
- call contextSwitch();
- goto inline$IoSetNextIrpStackLocation$15$label_6#1;
-
- inline$IoSetNextIrpStackLocation$15$label_6#1:
- havoc inline$IoSetNextIrpStackLocation$15$myNondetVar_0;
- inline$IoSetNextIrpStackLocation$15$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$15$myNondetVar_0, 36, 1);
- goto inline$IoSetNextIrpStackLocation$15$label_1#1;
-
- inline$IoSetNextIrpStackLocation$15$label_1#1:
- goto inline$IoSetNextIrpStackLocation$15$Return#1;
-
- inline$IoSetNextIrpStackLocation$15$Return#1:
- goto inline$storm_IoCallDriver$14$label_10$1#1;
-
- inline$storm_IoCallDriver$14$label_10$1#1:
- goto inline$storm_IoCallDriver$14$anon11_Then#1, inline$storm_IoCallDriver$14$anon11_Else#1;
-
- inline$storm_IoCallDriver$14$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$14$anon1#1;
-
- inline$storm_IoCallDriver$14$anon1#1:
- goto inline$storm_IoCallDriver$14$label_18#1;
-
- inline$storm_IoCallDriver$14$label_18#1:
- goto inline$IoGetCurrentIrpStackLocation$141$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$141$Entry#1:
- inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$IoGetCurrentIrpStackLocation$141$start#1;
-
- inline$IoGetCurrentIrpStackLocation$141$start#1:
- inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$141$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$141$label_3_true#1, inline$IoGetCurrentIrpStackLocation$141$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$141$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$141$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$141$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$141$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$141$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$141$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$141$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$141$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$141$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$141$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$141$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$141$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$141$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$141$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$141$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$141$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$141$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$141$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$141$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$141$Return#1:
- goto inline$storm_IoCallDriver$14$label_18$1#1;
-
- inline$storm_IoCallDriver$14$label_18$1#1:
- goto inline$storm_IoCallDriver$14$anon13_Then#1, inline$storm_IoCallDriver$14$anon13_Else#1;
-
- inline$storm_IoCallDriver$14$anon13_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$14$anon6#1;
-
- inline$storm_IoCallDriver$14$anon6#1:
- goto inline$storm_IoCallDriver$14$label_21#1;
-
- inline$storm_IoCallDriver$14$label_21#1:
- goto inline$storm_IoCallDriver$14$label_22#1;
-
- inline$storm_IoCallDriver$14$label_22#1:
- goto inline$storm_IoCallDriver$14$label_23#1;
-
- inline$storm_IoCallDriver$14$label_23#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCallDriver$14$label_24#1;
-
- inline$storm_IoCallDriver$14$label_24#1:
- call inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ := storm_nondet();
- goto inline$storm_IoCallDriver$14$label_27#1;
-
- inline$storm_IoCallDriver$14$label_27#1:
- goto inline$storm_IoCallDriver$14$label_27_case_0#1, inline$storm_IoCallDriver$14$label_27_case_1#1, inline$storm_IoCallDriver$14$label_27_case_2#1;
-
- inline$storm_IoCallDriver$14$label_27_case_2#1:
- assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ == 1;
- goto inline$storm_IoCallDriver$14$label_30#1;
-
- inline$storm_IoCallDriver$14$label_30#1:
- inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
- goto inline$storm_IoCallDriver$14$label_31#1;
-
- inline$storm_IoCallDriver$14$label_31#1:
- goto inline$storm_IoCallDriver$14$label_32#1;
-
- inline$storm_IoCallDriver$14$label_32#1:
- goto inline$storm_IoCallDriver$14$label_33#1;
-
- inline$storm_IoCallDriver$14$label_33#1:
- goto inline$CallCompletionRoutine$28$Entry#1;
-
- inline$CallCompletionRoutine$28$Entry#1:
- inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$28$start#1;
-
- inline$CallCompletionRoutine$28$start#1:
- inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$28$label_3#1;
-
- inline$CallCompletionRoutine$28$label_3#1:
- goto inline$CallCompletionRoutine$28$label_4#1;
-
- inline$CallCompletionRoutine$28$label_4#1:
- goto inline$CallCompletionRoutine$28$label_5#1;
-
- inline$CallCompletionRoutine$28$label_5#1:
- goto inline$CallCompletionRoutine$28$label_6#1;
-
- inline$CallCompletionRoutine$28$label_6#1:
- goto inline$CallCompletionRoutine$28$label_7#1;
-
- inline$CallCompletionRoutine$28$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$142$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$142$Entry#1:
- inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$142$start#1;
-
- inline$IoGetCurrentIrpStackLocation$142$start#1:
- inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$142$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$142$label_3_true#1, inline$IoGetCurrentIrpStackLocation$142$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$142$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$142$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$142$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$142$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$142$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$142$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$142$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$142$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$142$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$142$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$142$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$142$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$142$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$142$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$142$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$142$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$142$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$142$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$142$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$142$Return#1:
- goto inline$CallCompletionRoutine$28$label_7$1#1;
-
- inline$CallCompletionRoutine$28$label_7$1#1:
- goto inline$CallCompletionRoutine$28$anon10_Then#1, inline$CallCompletionRoutine$28$anon10_Else#1;
-
- inline$CallCompletionRoutine$28$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$28$anon1#1;
-
- inline$CallCompletionRoutine$28$anon1#1:
- goto inline$CallCompletionRoutine$28$label_10#1;
-
- inline$CallCompletionRoutine$28$label_10#1:
- goto inline$CallCompletionRoutine$28$label_11#1;
-
- inline$CallCompletionRoutine$28$label_11#1:
- havoc inline$CallCompletionRoutine$28$myNondetVar_0;
- inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$myNondetVar_0;
- goto inline$CallCompletionRoutine$28$label_12#1;
-
- inline$CallCompletionRoutine$28$label_12#1:
- havoc inline$CallCompletionRoutine$28$myNondetVar_0;
- inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$myNondetVar_0;
- goto inline$CallCompletionRoutine$28$label_13#1;
-
- inline$CallCompletionRoutine$28$label_13#1:
- havoc inline$CallCompletionRoutine$28$myNondetVar_0;
- goto inline$CallCompletionRoutine$28$label_14#1;
-
- inline$CallCompletionRoutine$28$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$143$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$143$Entry#1:
- inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$143$start#1;
-
- inline$IoGetCurrentIrpStackLocation$143$start#1:
- inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$143$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$143$label_3_true#1, inline$IoGetCurrentIrpStackLocation$143$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$143$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$143$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$143$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$143$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$143$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$143$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$143$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$143$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$143$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$143$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$143$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$143$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$143$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$143$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$143$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$143$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$143$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$143$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$143$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$143$Return#1:
- goto inline$CallCompletionRoutine$28$label_14$1#1;
-
- inline$CallCompletionRoutine$28$label_14$1#1:
- goto inline$CallCompletionRoutine$28$anon11_Then#1, inline$CallCompletionRoutine$28$anon11_Else#1;
-
- inline$CallCompletionRoutine$28$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$28$anon3#1;
-
- inline$CallCompletionRoutine$28$anon3#1:
- goto inline$CallCompletionRoutine$28$label_17#1;
-
- inline$CallCompletionRoutine$28$label_17#1:
- goto inline$CallCompletionRoutine$28$label_18#1;
-
- inline$CallCompletionRoutine$28$label_18#1:
- goto inline$CallCompletionRoutine$28$label_18_true#1, inline$CallCompletionRoutine$28$label_18_false#1;
-
- inline$CallCompletionRoutine$28$label_18_false#1:
- assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$28$label_1#1;
-
- inline$CallCompletionRoutine$28$label_18_true#1:
- assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$28$label_19#1;
-
- inline$CallCompletionRoutine$28$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$28$label_20#1;
-
- inline$CallCompletionRoutine$28$label_20#1:
- goto inline$CallCompletionRoutine$28$label_20_icall_1#1, inline$CallCompletionRoutine$28$label_20_icall_2#1, inline$CallCompletionRoutine$28$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$28$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$28$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$28$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$28$Entry#1:
- inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$28$start#1;
-
- inline$BDLSystemPowerIoCompletion$28$start#1:
- call inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$28$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_4#1:
- inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_6#1:
- inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$28$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$28$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$28$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$145$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$145$Entry#1:
- inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$145$start#1;
-
- inline$IoGetCurrentIrpStackLocation$145$start#1:
- inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$145$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$145$label_3_true#1, inline$IoGetCurrentIrpStackLocation$145$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$145$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$145$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$145$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$145$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$145$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$145$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$145$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$145$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$145$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$145$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$145$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$145$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$145$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$145$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$145$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$145$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$145$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$145$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$145$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$145$Return#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon36_Then#1, inline$BDLSystemPowerIoCompletion$28$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_15#1:
- goto inline$BDLGetDebugLevel$750$Entry#1;
-
- inline$BDLGetDebugLevel$750$Entry#1:
- goto inline$BDLGetDebugLevel$750$start#1;
-
- inline$BDLGetDebugLevel$750$start#1:
- goto inline$BDLGetDebugLevel$750$label_3#1;
-
- inline$BDLGetDebugLevel$750$label_3#1:
- havoc inline$BDLGetDebugLevel$750$myNondetVar_0;
- inline$BDLGetDebugLevel$750$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$750$myNondetVar_0;
- goto inline$BDLGetDebugLevel$750$label_1#1;
-
- inline$BDLGetDebugLevel$750$label_1#1:
- goto inline$BDLGetDebugLevel$750$Return#1;
-
- inline$BDLGetDebugLevel$750$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$750$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon37_Then#1, inline$BDLSystemPowerIoCompletion$28$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_18_true#1, inline$BDLSystemPowerIoCompletion$28$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_22#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_23#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_24#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$28$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_19#1:
- goto inline$BDLGetDebugLevel$751$Entry#1;
-
- inline$BDLGetDebugLevel$751$Entry#1:
- goto inline$BDLGetDebugLevel$751$start#1;
-
- inline$BDLGetDebugLevel$751$start#1:
- goto inline$BDLGetDebugLevel$751$label_3#1;
-
- inline$BDLGetDebugLevel$751$label_3#1:
- havoc inline$BDLGetDebugLevel$751$myNondetVar_0;
- inline$BDLGetDebugLevel$751$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$751$myNondetVar_0;
- goto inline$BDLGetDebugLevel$751$label_1#1;
-
- inline$BDLGetDebugLevel$751$label_1#1:
- goto inline$BDLGetDebugLevel$751$Return#1;
-
- inline$BDLGetDebugLevel$751$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$751$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon38_Then#1, inline$BDLSystemPowerIoCompletion$28$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_28_true#1, inline$BDLSystemPowerIoCompletion$28$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_32#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_33#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_34#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$28$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_29#1:
- goto inline$BDLGetDebugLevel$752$Entry#1;
-
- inline$BDLGetDebugLevel$752$Entry#1:
- goto inline$BDLGetDebugLevel$752$start#1;
-
- inline$BDLGetDebugLevel$752$start#1:
- goto inline$BDLGetDebugLevel$752$label_3#1;
-
- inline$BDLGetDebugLevel$752$label_3#1:
- havoc inline$BDLGetDebugLevel$752$myNondetVar_0;
- inline$BDLGetDebugLevel$752$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$752$myNondetVar_0;
- goto inline$BDLGetDebugLevel$752$label_1#1;
-
- inline$BDLGetDebugLevel$752$label_1#1:
- goto inline$BDLGetDebugLevel$752$Return#1;
-
- inline$BDLGetDebugLevel$752$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$752$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon39_Then#1, inline$BDLSystemPowerIoCompletion$28$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_38_true#1, inline$BDLSystemPowerIoCompletion$28$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_39_true#1, inline$BDLSystemPowerIoCompletion$28$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$28$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$28$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$28$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_106_true#1, inline$BDLSystemPowerIoCompletion$28$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_142#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_143#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$28$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$28$myNondetVar_0, inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$28$anon50_Then#1, inline$BDLSystemPowerIoCompletion$28$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_112#1:
- inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$28$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_113_true#1, inline$BDLSystemPowerIoCompletion$28$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$28$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_117#1:
- goto inline$BDLGetDebugLevel$759$Entry#1;
-
- inline$BDLGetDebugLevel$759$Entry#1:
- goto inline$BDLGetDebugLevel$759$start#1;
-
- inline$BDLGetDebugLevel$759$start#1:
- goto inline$BDLGetDebugLevel$759$label_3#1;
-
- inline$BDLGetDebugLevel$759$label_3#1:
- havoc inline$BDLGetDebugLevel$759$myNondetVar_0;
- inline$BDLGetDebugLevel$759$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$759$myNondetVar_0;
- goto inline$BDLGetDebugLevel$759$label_1#1;
-
- inline$BDLGetDebugLevel$759$label_1#1:
- goto inline$BDLGetDebugLevel$759$Return#1;
-
- inline$BDLGetDebugLevel$759$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$759$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon51_Then#1, inline$BDLSystemPowerIoCompletion$28$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_120_true#1, inline$BDLSystemPowerIoCompletion$28$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_124#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_125#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_126#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$28$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_121#1:
- goto inline$BDLGetDebugLevel$760$Entry#1;
-
- inline$BDLGetDebugLevel$760$Entry#1:
- goto inline$BDLGetDebugLevel$760$start#1;
-
- inline$BDLGetDebugLevel$760$start#1:
- goto inline$BDLGetDebugLevel$760$label_3#1;
-
- inline$BDLGetDebugLevel$760$label_3#1:
- havoc inline$BDLGetDebugLevel$760$myNondetVar_0;
- inline$BDLGetDebugLevel$760$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$760$myNondetVar_0;
- goto inline$BDLGetDebugLevel$760$label_1#1;
-
- inline$BDLGetDebugLevel$760$label_1#1:
- goto inline$BDLGetDebugLevel$760$Return#1;
-
- inline$BDLGetDebugLevel$760$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$760$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon52_Then#1, inline$BDLSystemPowerIoCompletion$28$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_130_true#1, inline$BDLSystemPowerIoCompletion$28$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_134#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_135#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_136#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$28$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_131#1:
- goto inline$BDLGetDebugLevel$761$Entry#1;
-
- inline$BDLGetDebugLevel$761$Entry#1:
- goto inline$BDLGetDebugLevel$761$start#1;
-
- inline$BDLGetDebugLevel$761$start#1:
- goto inline$BDLGetDebugLevel$761$label_3#1;
-
- inline$BDLGetDebugLevel$761$label_3#1:
- havoc inline$BDLGetDebugLevel$761$myNondetVar_0;
- inline$BDLGetDebugLevel$761$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$761$myNondetVar_0;
- goto inline$BDLGetDebugLevel$761$label_1#1;
-
- inline$BDLGetDebugLevel$761$label_1#1:
- goto inline$BDLGetDebugLevel$761$Return#1;
-
- inline$BDLGetDebugLevel$761$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$761$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon53_Then#1, inline$BDLSystemPowerIoCompletion$28$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_140_true#1, inline$BDLSystemPowerIoCompletion$28$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$28$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_115#1:
- inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$28$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$28$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_43#1:
- goto inline$BDLGetDebugLevel$753$Entry#1;
-
- inline$BDLGetDebugLevel$753$Entry#1:
- goto inline$BDLGetDebugLevel$753$start#1;
-
- inline$BDLGetDebugLevel$753$start#1:
- goto inline$BDLGetDebugLevel$753$label_3#1;
-
- inline$BDLGetDebugLevel$753$label_3#1:
- havoc inline$BDLGetDebugLevel$753$myNondetVar_0;
- inline$BDLGetDebugLevel$753$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$753$myNondetVar_0;
- goto inline$BDLGetDebugLevel$753$label_1#1;
-
- inline$BDLGetDebugLevel$753$label_1#1:
- goto inline$BDLGetDebugLevel$753$Return#1;
-
- inline$BDLGetDebugLevel$753$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$753$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon40_Then#1, inline$BDLSystemPowerIoCompletion$28$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_46_true#1, inline$BDLSystemPowerIoCompletion$28$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_50#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_51#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_52#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$28$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_47#1:
- goto inline$BDLGetDebugLevel$754$Entry#1;
-
- inline$BDLGetDebugLevel$754$Entry#1:
- goto inline$BDLGetDebugLevel$754$start#1;
-
- inline$BDLGetDebugLevel$754$start#1:
- goto inline$BDLGetDebugLevel$754$label_3#1;
-
- inline$BDLGetDebugLevel$754$label_3#1:
- havoc inline$BDLGetDebugLevel$754$myNondetVar_0;
- inline$BDLGetDebugLevel$754$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$754$myNondetVar_0;
- goto inline$BDLGetDebugLevel$754$label_1#1;
-
- inline$BDLGetDebugLevel$754$label_1#1:
- goto inline$BDLGetDebugLevel$754$Return#1;
-
- inline$BDLGetDebugLevel$754$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$754$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon41_Then#1, inline$BDLSystemPowerIoCompletion$28$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_56_true#1, inline$BDLSystemPowerIoCompletion$28$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_60#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_61#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_62#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$28$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_57#1:
- goto inline$BDLGetDebugLevel$755$Entry#1;
-
- inline$BDLGetDebugLevel$755$Entry#1:
- goto inline$BDLGetDebugLevel$755$start#1;
-
- inline$BDLGetDebugLevel$755$start#1:
- goto inline$BDLGetDebugLevel$755$label_3#1;
-
- inline$BDLGetDebugLevel$755$label_3#1:
- havoc inline$BDLGetDebugLevel$755$myNondetVar_0;
- inline$BDLGetDebugLevel$755$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$755$myNondetVar_0;
- goto inline$BDLGetDebugLevel$755$label_1#1;
-
- inline$BDLGetDebugLevel$755$label_1#1:
- goto inline$BDLGetDebugLevel$755$Return#1;
-
- inline$BDLGetDebugLevel$755$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$755$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon42_Then#1, inline$BDLSystemPowerIoCompletion$28$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_66_true#1, inline$BDLSystemPowerIoCompletion$28$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$28$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$28$anon43_Then#1, inline$BDLSystemPowerIoCompletion$28$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$28$anon44_Then#1, inline$BDLSystemPowerIoCompletion$28$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_74#1:
- goto inline$storm_IoCompleteRequest$59$Entry#1;
-
- inline$storm_IoCompleteRequest$59$Entry#1:
- inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$59$start#1;
-
- inline$storm_IoCompleteRequest$59$start#1:
- inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$59$label_3#1;
-
- inline$storm_IoCompleteRequest$59$label_3#1:
- call inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$59$label_6#1;
-
- inline$storm_IoCompleteRequest$59$label_6#1:
- goto inline$storm_IoCompleteRequest$59$label_6_true#1, inline$storm_IoCompleteRequest$59$label_6_false#1;
-
- inline$storm_IoCompleteRequest$59$label_6_false#1:
- assume inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$59$label_7#1;
-
- inline$storm_IoCompleteRequest$59$label_6_true#1:
- assume inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$59$label_8#1;
-
- inline$storm_IoCompleteRequest$59$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$59$anon3_Then#1, inline$storm_IoCompleteRequest$59$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$59$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$59$anon1#1;
-
- inline$storm_IoCompleteRequest$59$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$59$label_9#1;
-
- inline$storm_IoCompleteRequest$59$label_9#1:
- goto inline$storm_IoCompleteRequest$59$label_9_true#1, inline$storm_IoCompleteRequest$59$label_9_false#1;
-
- inline$storm_IoCompleteRequest$59$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$59$label_10#1;
-
- inline$storm_IoCompleteRequest$59$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$59$label_1#1;
-
- inline$storm_IoCompleteRequest$59$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$59$label_7#1;
-
- inline$storm_IoCompleteRequest$59$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$59$label_1#1;
-
- inline$storm_IoCompleteRequest$59$label_1#1:
- goto inline$storm_IoCompleteRequest$59$Return#1;
-
- inline$storm_IoCompleteRequest$59$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$59$Return#1;
-
- inline$storm_IoCompleteRequest$59$Return#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon45_Then#1, inline$BDLSystemPowerIoCompletion$28$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$28$anon46_Then#1, inline$BDLSystemPowerIoCompletion$28$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_80#1:
- goto inline$BDLGetDebugLevel$756$Entry#1;
-
- inline$BDLGetDebugLevel$756$Entry#1:
- goto inline$BDLGetDebugLevel$756$start#1;
-
- inline$BDLGetDebugLevel$756$start#1:
- goto inline$BDLGetDebugLevel$756$label_3#1;
-
- inline$BDLGetDebugLevel$756$label_3#1:
- havoc inline$BDLGetDebugLevel$756$myNondetVar_0;
- inline$BDLGetDebugLevel$756$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$756$myNondetVar_0;
- goto inline$BDLGetDebugLevel$756$label_1#1;
-
- inline$BDLGetDebugLevel$756$label_1#1:
- goto inline$BDLGetDebugLevel$756$Return#1;
-
- inline$BDLGetDebugLevel$756$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$756$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon47_Then#1, inline$BDLSystemPowerIoCompletion$28$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_83_true#1, inline$BDLSystemPowerIoCompletion$28$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_87#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_88#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_89#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$28$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_84#1:
- goto inline$BDLGetDebugLevel$757$Entry#1;
-
- inline$BDLGetDebugLevel$757$Entry#1:
- goto inline$BDLGetDebugLevel$757$start#1;
-
- inline$BDLGetDebugLevel$757$start#1:
- goto inline$BDLGetDebugLevel$757$label_3#1;
-
- inline$BDLGetDebugLevel$757$label_3#1:
- havoc inline$BDLGetDebugLevel$757$myNondetVar_0;
- inline$BDLGetDebugLevel$757$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$757$myNondetVar_0;
- goto inline$BDLGetDebugLevel$757$label_1#1;
-
- inline$BDLGetDebugLevel$757$label_1#1:
- goto inline$BDLGetDebugLevel$757$Return#1;
-
- inline$BDLGetDebugLevel$757$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$757$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon48_Then#1, inline$BDLSystemPowerIoCompletion$28$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_93_true#1, inline$BDLSystemPowerIoCompletion$28$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_97#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_98#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_99#1:
- call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$28$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$28$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_94#1:
- goto inline$BDLGetDebugLevel$758$Entry#1;
-
- inline$BDLGetDebugLevel$758$Entry#1:
- goto inline$BDLGetDebugLevel$758$start#1;
-
- inline$BDLGetDebugLevel$758$start#1:
- goto inline$BDLGetDebugLevel$758$label_3#1;
-
- inline$BDLGetDebugLevel$758$label_3#1:
- havoc inline$BDLGetDebugLevel$758$myNondetVar_0;
- inline$BDLGetDebugLevel$758$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$758$myNondetVar_0;
- goto inline$BDLGetDebugLevel$758$label_1#1;
-
- inline$BDLGetDebugLevel$758$label_1#1:
- goto inline$BDLGetDebugLevel$758$Return#1;
-
- inline$BDLGetDebugLevel$758$Return#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$758$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$28$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$28$anon49_Then#1, inline$BDLSystemPowerIoCompletion$28$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_103_true#1, inline$BDLSystemPowerIoCompletion$28$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$28$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$28$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_104#1:
- inline$BDLSystemPowerIoCompletion$28$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$28$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$28$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$28$Return#1;
-
- inline$BDLSystemPowerIoCompletion$28$Return#1:
- inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$28$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$28$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$28$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$28$anon14_Then#1, inline$CallCompletionRoutine$28$anon14_Else#1;
-
- inline$CallCompletionRoutine$28$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$28$anon9#1;
-
- inline$CallCompletionRoutine$28$anon9#1:
- goto inline$CallCompletionRoutine$28$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$28$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$28$Return#1;
-
- inline$CallCompletionRoutine$28$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$28$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$28$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$28$Entry#1:
- inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$28$start#1;
-
- inline$BDLDevicePowerIoCompletion$28$start#1:
- call inline$BDLDevicePowerIoCompletion$28$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$28$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_4#1:
- inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_6#1:
- inline$BDLDevicePowerIoCompletion$28$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$28$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$28$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$28$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$144$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$144$Entry#1:
- inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$144$start#1;
-
- inline$IoGetCurrentIrpStackLocation$144$start#1:
- inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$144$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$144$label_3_true#1, inline$IoGetCurrentIrpStackLocation$144$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$144$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$144$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$144$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$144$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$144$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$144$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$144$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$144$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$144$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$144$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$144$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$144$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$144$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$144$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$144$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$144$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$144$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$144$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$144$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$144$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$144$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$144$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$144$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon30_Then#1, inline$BDLDevicePowerIoCompletion$28$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_13#1:
- inline$BDLDevicePowerIoCompletion$28$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$28$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$28$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_17#1:
- goto inline$BDLGetDebugLevel$741$Entry#1;
-
- inline$BDLGetDebugLevel$741$Entry#1:
- goto inline$BDLGetDebugLevel$741$start#1;
-
- inline$BDLGetDebugLevel$741$start#1:
- goto inline$BDLGetDebugLevel$741$label_3#1;
-
- inline$BDLGetDebugLevel$741$label_3#1:
- havoc inline$BDLGetDebugLevel$741$myNondetVar_0;
- inline$BDLGetDebugLevel$741$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$741$myNondetVar_0;
- goto inline$BDLGetDebugLevel$741$label_1#1;
-
- inline$BDLGetDebugLevel$741$label_1#1:
- goto inline$BDLGetDebugLevel$741$Return#1;
-
- inline$BDLGetDebugLevel$741$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$741$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon31_Then#1, inline$BDLDevicePowerIoCompletion$28$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_20_true#1, inline$BDLDevicePowerIoCompletion$28$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_24#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_25#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_26#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$28$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_21#1:
- goto inline$BDLGetDebugLevel$742$Entry#1;
-
- inline$BDLGetDebugLevel$742$Entry#1:
- goto inline$BDLGetDebugLevel$742$start#1;
-
- inline$BDLGetDebugLevel$742$start#1:
- goto inline$BDLGetDebugLevel$742$label_3#1;
-
- inline$BDLGetDebugLevel$742$label_3#1:
- havoc inline$BDLGetDebugLevel$742$myNondetVar_0;
- inline$BDLGetDebugLevel$742$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$742$myNondetVar_0;
- goto inline$BDLGetDebugLevel$742$label_1#1;
-
- inline$BDLGetDebugLevel$742$label_1#1:
- goto inline$BDLGetDebugLevel$742$Return#1;
-
- inline$BDLGetDebugLevel$742$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$742$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon32_Then#1, inline$BDLDevicePowerIoCompletion$28$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_30_true#1, inline$BDLDevicePowerIoCompletion$28$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_34#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_35#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_36#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$28$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_31#1:
- goto inline$BDLGetDebugLevel$743$Entry#1;
-
- inline$BDLGetDebugLevel$743$Entry#1:
- goto inline$BDLGetDebugLevel$743$start#1;
-
- inline$BDLGetDebugLevel$743$start#1:
- goto inline$BDLGetDebugLevel$743$label_3#1;
-
- inline$BDLGetDebugLevel$743$label_3#1:
- havoc inline$BDLGetDebugLevel$743$myNondetVar_0;
- inline$BDLGetDebugLevel$743$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$743$myNondetVar_0;
- goto inline$BDLGetDebugLevel$743$label_1#1;
-
- inline$BDLGetDebugLevel$743$label_1#1:
- goto inline$BDLGetDebugLevel$743$Return#1;
-
- inline$BDLGetDebugLevel$743$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$743$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon33_Then#1, inline$BDLDevicePowerIoCompletion$28$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_40_true#1, inline$BDLDevicePowerIoCompletion$28$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_41_true#1, inline$BDLDevicePowerIoCompletion$28$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$28$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$28$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_44_true#1, inline$BDLDevicePowerIoCompletion$28$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$28$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_45_true#1, inline$BDLDevicePowerIoCompletion$28$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$28$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$28$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$28$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$28$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$28$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$28$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_54#1:
- inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$28$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_55_true#1, inline$BDLDevicePowerIoCompletion$28$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_56#1:
- call inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$28$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$28$anon34_Then#1, inline$BDLDevicePowerIoCompletion$28$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_59#1:
- goto inline$BDLGetDebugLevel$744$Entry#1;
-
- inline$BDLGetDebugLevel$744$Entry#1:
- goto inline$BDLGetDebugLevel$744$start#1;
-
- inline$BDLGetDebugLevel$744$start#1:
- goto inline$BDLGetDebugLevel$744$label_3#1;
-
- inline$BDLGetDebugLevel$744$label_3#1:
- havoc inline$BDLGetDebugLevel$744$myNondetVar_0;
- inline$BDLGetDebugLevel$744$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$744$myNondetVar_0;
- goto inline$BDLGetDebugLevel$744$label_1#1;
-
- inline$BDLGetDebugLevel$744$label_1#1:
- goto inline$BDLGetDebugLevel$744$Return#1;
-
- inline$BDLGetDebugLevel$744$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$744$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon35_Then#1, inline$BDLDevicePowerIoCompletion$28$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_62_true#1, inline$BDLDevicePowerIoCompletion$28$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_66#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_67#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_68#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$28$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_63#1:
- goto inline$BDLGetDebugLevel$745$Entry#1;
-
- inline$BDLGetDebugLevel$745$Entry#1:
- goto inline$BDLGetDebugLevel$745$start#1;
-
- inline$BDLGetDebugLevel$745$start#1:
- goto inline$BDLGetDebugLevel$745$label_3#1;
-
- inline$BDLGetDebugLevel$745$label_3#1:
- havoc inline$BDLGetDebugLevel$745$myNondetVar_0;
- inline$BDLGetDebugLevel$745$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$745$myNondetVar_0;
- goto inline$BDLGetDebugLevel$745$label_1#1;
-
- inline$BDLGetDebugLevel$745$label_1#1:
- goto inline$BDLGetDebugLevel$745$Return#1;
-
- inline$BDLGetDebugLevel$745$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$745$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon36_Then#1, inline$BDLDevicePowerIoCompletion$28$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_72_true#1, inline$BDLDevicePowerIoCompletion$28$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_76#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_77#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_78#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$28$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_73#1:
- goto inline$BDLGetDebugLevel$746$Entry#1;
-
- inline$BDLGetDebugLevel$746$Entry#1:
- goto inline$BDLGetDebugLevel$746$start#1;
-
- inline$BDLGetDebugLevel$746$start#1:
- goto inline$BDLGetDebugLevel$746$label_3#1;
-
- inline$BDLGetDebugLevel$746$label_3#1:
- havoc inline$BDLGetDebugLevel$746$myNondetVar_0;
- inline$BDLGetDebugLevel$746$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$746$myNondetVar_0;
- goto inline$BDLGetDebugLevel$746$label_1#1;
-
- inline$BDLGetDebugLevel$746$label_1#1:
- goto inline$BDLGetDebugLevel$746$Return#1;
-
- inline$BDLGetDebugLevel$746$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$746$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon37_Then#1, inline$BDLDevicePowerIoCompletion$28$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_82_true#1, inline$BDLDevicePowerIoCompletion$28$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$28$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$28$anon38_Then#1, inline$BDLDevicePowerIoCompletion$28$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$28$anon39_Then#1, inline$BDLDevicePowerIoCompletion$28$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_92#1:
- goto inline$storm_IoCompleteRequest$58$Entry#1;
-
- inline$storm_IoCompleteRequest$58$Entry#1:
- inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$58$start#1;
-
- inline$storm_IoCompleteRequest$58$start#1:
- inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$58$label_3#1;
-
- inline$storm_IoCompleteRequest$58$label_3#1:
- call inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$58$label_6#1;
-
- inline$storm_IoCompleteRequest$58$label_6#1:
- goto inline$storm_IoCompleteRequest$58$label_6_true#1, inline$storm_IoCompleteRequest$58$label_6_false#1;
-
- inline$storm_IoCompleteRequest$58$label_6_false#1:
- assume inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$58$label_7#1;
-
- inline$storm_IoCompleteRequest$58$label_6_true#1:
- assume inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$58$label_8#1;
-
- inline$storm_IoCompleteRequest$58$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$58$anon3_Then#1, inline$storm_IoCompleteRequest$58$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$58$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$58$anon1#1;
-
- inline$storm_IoCompleteRequest$58$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$58$label_9#1;
-
- inline$storm_IoCompleteRequest$58$label_9#1:
- goto inline$storm_IoCompleteRequest$58$label_9_true#1, inline$storm_IoCompleteRequest$58$label_9_false#1;
-
- inline$storm_IoCompleteRequest$58$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$58$label_10#1;
-
- inline$storm_IoCompleteRequest$58$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$58$label_1#1;
-
- inline$storm_IoCompleteRequest$58$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$58$label_7#1;
-
- inline$storm_IoCompleteRequest$58$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$58$label_1#1;
-
- inline$storm_IoCompleteRequest$58$label_1#1:
- goto inline$storm_IoCompleteRequest$58$Return#1;
-
- inline$storm_IoCompleteRequest$58$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$58$Return#1;
-
- inline$storm_IoCompleteRequest$58$Return#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon40_Then#1, inline$BDLDevicePowerIoCompletion$28$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$28$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$28$anon41_Then#1, inline$BDLDevicePowerIoCompletion$28$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_98#1:
- goto inline$BDLGetDebugLevel$747$Entry#1;
-
- inline$BDLGetDebugLevel$747$Entry#1:
- goto inline$BDLGetDebugLevel$747$start#1;
-
- inline$BDLGetDebugLevel$747$start#1:
- goto inline$BDLGetDebugLevel$747$label_3#1;
-
- inline$BDLGetDebugLevel$747$label_3#1:
- havoc inline$BDLGetDebugLevel$747$myNondetVar_0;
- inline$BDLGetDebugLevel$747$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$747$myNondetVar_0;
- goto inline$BDLGetDebugLevel$747$label_1#1;
-
- inline$BDLGetDebugLevel$747$label_1#1:
- goto inline$BDLGetDebugLevel$747$Return#1;
-
- inline$BDLGetDebugLevel$747$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$747$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon42_Then#1, inline$BDLDevicePowerIoCompletion$28$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_101_true#1, inline$BDLDevicePowerIoCompletion$28$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_105#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_106#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_107#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$28$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_102#1:
- goto inline$BDLGetDebugLevel$748$Entry#1;
-
- inline$BDLGetDebugLevel$748$Entry#1:
- goto inline$BDLGetDebugLevel$748$start#1;
-
- inline$BDLGetDebugLevel$748$start#1:
- goto inline$BDLGetDebugLevel$748$label_3#1;
-
- inline$BDLGetDebugLevel$748$label_3#1:
- havoc inline$BDLGetDebugLevel$748$myNondetVar_0;
- inline$BDLGetDebugLevel$748$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$748$myNondetVar_0;
- goto inline$BDLGetDebugLevel$748$label_1#1;
-
- inline$BDLGetDebugLevel$748$label_1#1:
- goto inline$BDLGetDebugLevel$748$Return#1;
-
- inline$BDLGetDebugLevel$748$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$748$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon43_Then#1, inline$BDLDevicePowerIoCompletion$28$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_111_true#1, inline$BDLDevicePowerIoCompletion$28$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_115#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_116#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_117#1:
- call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$28$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$28$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_112#1:
- goto inline$BDLGetDebugLevel$749$Entry#1;
-
- inline$BDLGetDebugLevel$749$Entry#1:
- goto inline$BDLGetDebugLevel$749$start#1;
-
- inline$BDLGetDebugLevel$749$start#1:
- goto inline$BDLGetDebugLevel$749$label_3#1;
-
- inline$BDLGetDebugLevel$749$label_3#1:
- havoc inline$BDLGetDebugLevel$749$myNondetVar_0;
- inline$BDLGetDebugLevel$749$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$749$myNondetVar_0;
- goto inline$BDLGetDebugLevel$749$label_1#1;
-
- inline$BDLGetDebugLevel$749$label_1#1:
- goto inline$BDLGetDebugLevel$749$Return#1;
-
- inline$BDLGetDebugLevel$749$Return#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$749$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$28$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$28$anon44_Then#1, inline$BDLDevicePowerIoCompletion$28$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_121_true#1, inline$BDLDevicePowerIoCompletion$28$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$28$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$28$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_122#1:
- inline$BDLDevicePowerIoCompletion$28$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$28$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$28$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$28$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$28$Return#1;
-
- inline$BDLDevicePowerIoCompletion$28$Return#1:
- inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$28$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$28$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$28$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$28$anon13_Then#1, inline$CallCompletionRoutine$28$anon13_Else#1;
-
- inline$CallCompletionRoutine$28$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$28$anon7#1;
-
- inline$CallCompletionRoutine$28$anon7#1:
- goto inline$CallCompletionRoutine$28$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$28$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$28$Return#1;
-
- inline$CallCompletionRoutine$28$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$28$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$28$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$28$Entry#1:
- inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$28$start#1;
-
- inline$BDLCallDriverCompletionRoutine$28$start#1:
- inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$28$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$28$label_3_true#1, inline$BDLCallDriverCompletionRoutine$28$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$28$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$28$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$28$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$28$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_6#1:
- goto inline$storm_KeSetEvent$32$Entry#1;
-
- inline$storm_KeSetEvent$32$Entry#1:
- inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$32$start#1;
-
- inline$storm_KeSetEvent$32$start#1:
- inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$32$label_3#1;
-
- inline$storm_KeSetEvent$32$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$32$label_1#1;
-
- inline$storm_KeSetEvent$32$label_1#1:
- goto inline$storm_KeSetEvent$32$Return#1;
-
- inline$storm_KeSetEvent$32$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$28$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$28$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$28$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$28$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$28$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$28$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$28$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_9#1:
- inline$BDLCallDriverCompletionRoutine$28$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$28$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$28$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$28$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$28$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$28$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$28$Return#1:
- inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$28$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$28$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$28$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$28$anon12_Then#1, inline$CallCompletionRoutine$28$anon12_Else#1;
-
- inline$CallCompletionRoutine$28$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$28$anon5#1;
-
- inline$CallCompletionRoutine$28$anon5#1:
- goto inline$CallCompletionRoutine$28$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$28$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$28$label_23#1;
-
- inline$CallCompletionRoutine$28$label_23#1:
- inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$28$label_24#1;
-
- inline$CallCompletionRoutine$28$label_24#1:
- goto inline$CallCompletionRoutine$28$label_24_true#1, inline$CallCompletionRoutine$28$label_24_false#1;
-
- inline$CallCompletionRoutine$28$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$28$label_1#1;
-
- inline$CallCompletionRoutine$28$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$28$label_25#1;
-
- inline$CallCompletionRoutine$28$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$28$label_1#1;
-
- inline$CallCompletionRoutine$28$label_1#1:
- goto inline$CallCompletionRoutine$28$Return#1;
-
- inline$CallCompletionRoutine$28$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$28$Return#1;
-
- inline$CallCompletionRoutine$28$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$28$Return#1;
-
- inline$CallCompletionRoutine$28$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$28$Return#1;
-
- inline$CallCompletionRoutine$28$Return#1:
- goto inline$storm_IoCallDriver$14$label_33$1#1;
-
- inline$storm_IoCallDriver$14$label_33$1#1:
- goto inline$storm_IoCallDriver$14$anon14_Then#1, inline$storm_IoCallDriver$14$anon14_Else#1;
-
- inline$storm_IoCallDriver$14$anon14_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$14$anon8#1;
-
- inline$storm_IoCallDriver$14$anon8#1:
- goto inline$storm_IoCallDriver$14$label_36#1;
-
- inline$storm_IoCallDriver$14$anon14_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$14$Return#1;
-
- inline$storm_IoCallDriver$14$label_27_case_1#1:
- assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ == 0;
- goto inline$storm_IoCallDriver$14$label_29#1;
-
- inline$storm_IoCallDriver$14$label_29#1:
- inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8 := 0;
- goto inline$storm_IoCallDriver$14$label_37#1;
-
- inline$storm_IoCallDriver$14$label_37#1:
- goto inline$storm_IoCallDriver$14$label_38#1;
-
- inline$storm_IoCallDriver$14$label_38#1:
- goto inline$storm_IoCallDriver$14$label_39#1;
-
- inline$storm_IoCallDriver$14$label_39#1:
- goto inline$CallCompletionRoutine$29$Entry#1;
-
- inline$CallCompletionRoutine$29$Entry#1:
- inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
- goto inline$CallCompletionRoutine$29$start#1;
-
- inline$CallCompletionRoutine$29$start#1:
- inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$29$label_3#1;
-
- inline$CallCompletionRoutine$29$label_3#1:
- goto inline$CallCompletionRoutine$29$label_4#1;
-
- inline$CallCompletionRoutine$29$label_4#1:
- goto inline$CallCompletionRoutine$29$label_5#1;
-
- inline$CallCompletionRoutine$29$label_5#1:
- goto inline$CallCompletionRoutine$29$label_6#1;
-
- inline$CallCompletionRoutine$29$label_6#1:
- goto inline$CallCompletionRoutine$29$label_7#1;
-
- inline$CallCompletionRoutine$29$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$146$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$146$Entry#1:
- inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$146$start#1;
-
- inline$IoGetCurrentIrpStackLocation$146$start#1:
- inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$146$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$146$label_3_true#1, inline$IoGetCurrentIrpStackLocation$146$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$146$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$146$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$146$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$146$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$146$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$146$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$146$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$146$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$146$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$146$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$146$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$146$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$146$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$146$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$146$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$146$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$146$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$146$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$146$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$146$Return#1:
- goto inline$CallCompletionRoutine$29$label_7$1#1;
-
- inline$CallCompletionRoutine$29$label_7$1#1:
- goto inline$CallCompletionRoutine$29$anon10_Then#1, inline$CallCompletionRoutine$29$anon10_Else#1;
-
- inline$CallCompletionRoutine$29$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$29$anon1#1;
-
- inline$CallCompletionRoutine$29$anon1#1:
- goto inline$CallCompletionRoutine$29$label_10#1;
-
- inline$CallCompletionRoutine$29$label_10#1:
- goto inline$CallCompletionRoutine$29$label_11#1;
-
- inline$CallCompletionRoutine$29$label_11#1:
- havoc inline$CallCompletionRoutine$29$myNondetVar_0;
- inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$myNondetVar_0;
- goto inline$CallCompletionRoutine$29$label_12#1;
-
- inline$CallCompletionRoutine$29$label_12#1:
- havoc inline$CallCompletionRoutine$29$myNondetVar_0;
- inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$myNondetVar_0;
- goto inline$CallCompletionRoutine$29$label_13#1;
-
- inline$CallCompletionRoutine$29$label_13#1:
- havoc inline$CallCompletionRoutine$29$myNondetVar_0;
- goto inline$CallCompletionRoutine$29$label_14#1;
-
- inline$CallCompletionRoutine$29$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$147$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$147$Entry#1:
- inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$147$start#1;
-
- inline$IoGetCurrentIrpStackLocation$147$start#1:
- inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$147$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$147$label_3_true#1, inline$IoGetCurrentIrpStackLocation$147$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$147$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$147$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$147$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$147$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$147$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$147$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$147$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$147$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$147$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$147$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$147$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$147$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$147$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$147$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$147$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$147$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$147$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$147$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$147$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$147$Return#1:
- goto inline$CallCompletionRoutine$29$label_14$1#1;
-
- inline$CallCompletionRoutine$29$label_14$1#1:
- goto inline$CallCompletionRoutine$29$anon11_Then#1, inline$CallCompletionRoutine$29$anon11_Else#1;
-
- inline$CallCompletionRoutine$29$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$29$anon3#1;
-
- inline$CallCompletionRoutine$29$anon3#1:
- goto inline$CallCompletionRoutine$29$label_17#1;
-
- inline$CallCompletionRoutine$29$label_17#1:
- goto inline$CallCompletionRoutine$29$label_18#1;
-
- inline$CallCompletionRoutine$29$label_18#1:
- goto inline$CallCompletionRoutine$29$label_18_true#1, inline$CallCompletionRoutine$29$label_18_false#1;
-
- inline$CallCompletionRoutine$29$label_18_false#1:
- assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$29$label_1#1;
-
- inline$CallCompletionRoutine$29$label_18_true#1:
- assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$29$label_19#1;
-
- inline$CallCompletionRoutine$29$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$29$label_20#1;
-
- inline$CallCompletionRoutine$29$label_20#1:
- goto inline$CallCompletionRoutine$29$label_20_icall_1#1, inline$CallCompletionRoutine$29$label_20_icall_2#1, inline$CallCompletionRoutine$29$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$29$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$29$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$29$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$29$Entry#1:
- inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$29$start#1;
-
- inline$BDLSystemPowerIoCompletion$29$start#1:
- call inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$29$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_4#1:
- inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_6#1:
- inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$29$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$29$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$29$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$149$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$149$Entry#1:
- inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$149$start#1;
-
- inline$IoGetCurrentIrpStackLocation$149$start#1:
- inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$149$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$149$label_3_true#1, inline$IoGetCurrentIrpStackLocation$149$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$149$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$149$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$149$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$149$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$149$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$149$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$149$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$149$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$149$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$149$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$149$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$149$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$149$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$149$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$149$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$149$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$149$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$149$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$149$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$149$Return#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon36_Then#1, inline$BDLSystemPowerIoCompletion$29$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_15#1:
- goto inline$BDLGetDebugLevel$771$Entry#1;
-
- inline$BDLGetDebugLevel$771$Entry#1:
- goto inline$BDLGetDebugLevel$771$start#1;
-
- inline$BDLGetDebugLevel$771$start#1:
- goto inline$BDLGetDebugLevel$771$label_3#1;
-
- inline$BDLGetDebugLevel$771$label_3#1:
- havoc inline$BDLGetDebugLevel$771$myNondetVar_0;
- inline$BDLGetDebugLevel$771$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$771$myNondetVar_0;
- goto inline$BDLGetDebugLevel$771$label_1#1;
-
- inline$BDLGetDebugLevel$771$label_1#1:
- goto inline$BDLGetDebugLevel$771$Return#1;
-
- inline$BDLGetDebugLevel$771$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$771$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon37_Then#1, inline$BDLSystemPowerIoCompletion$29$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_18_true#1, inline$BDLSystemPowerIoCompletion$29$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_22#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_23#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_24#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$29$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_19#1:
- goto inline$BDLGetDebugLevel$772$Entry#1;
-
- inline$BDLGetDebugLevel$772$Entry#1:
- goto inline$BDLGetDebugLevel$772$start#1;
-
- inline$BDLGetDebugLevel$772$start#1:
- goto inline$BDLGetDebugLevel$772$label_3#1;
-
- inline$BDLGetDebugLevel$772$label_3#1:
- havoc inline$BDLGetDebugLevel$772$myNondetVar_0;
- inline$BDLGetDebugLevel$772$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$772$myNondetVar_0;
- goto inline$BDLGetDebugLevel$772$label_1#1;
-
- inline$BDLGetDebugLevel$772$label_1#1:
- goto inline$BDLGetDebugLevel$772$Return#1;
-
- inline$BDLGetDebugLevel$772$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$772$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon38_Then#1, inline$BDLSystemPowerIoCompletion$29$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_28_true#1, inline$BDLSystemPowerIoCompletion$29$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_32#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_33#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_34#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$29$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_29#1:
- goto inline$BDLGetDebugLevel$773$Entry#1;
-
- inline$BDLGetDebugLevel$773$Entry#1:
- goto inline$BDLGetDebugLevel$773$start#1;
-
- inline$BDLGetDebugLevel$773$start#1:
- goto inline$BDLGetDebugLevel$773$label_3#1;
-
- inline$BDLGetDebugLevel$773$label_3#1:
- havoc inline$BDLGetDebugLevel$773$myNondetVar_0;
- inline$BDLGetDebugLevel$773$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$773$myNondetVar_0;
- goto inline$BDLGetDebugLevel$773$label_1#1;
-
- inline$BDLGetDebugLevel$773$label_1#1:
- goto inline$BDLGetDebugLevel$773$Return#1;
-
- inline$BDLGetDebugLevel$773$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$773$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon39_Then#1, inline$BDLSystemPowerIoCompletion$29$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_38_true#1, inline$BDLSystemPowerIoCompletion$29$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_39_true#1, inline$BDLSystemPowerIoCompletion$29$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$29$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$29$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$29$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_106_true#1, inline$BDLSystemPowerIoCompletion$29$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_142#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_143#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$29$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$29$myNondetVar_0, inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$29$anon50_Then#1, inline$BDLSystemPowerIoCompletion$29$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_112#1:
- inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$29$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_113_true#1, inline$BDLSystemPowerIoCompletion$29$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$29$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_117#1:
- goto inline$BDLGetDebugLevel$780$Entry#1;
-
- inline$BDLGetDebugLevel$780$Entry#1:
- goto inline$BDLGetDebugLevel$780$start#1;
-
- inline$BDLGetDebugLevel$780$start#1:
- goto inline$BDLGetDebugLevel$780$label_3#1;
-
- inline$BDLGetDebugLevel$780$label_3#1:
- havoc inline$BDLGetDebugLevel$780$myNondetVar_0;
- inline$BDLGetDebugLevel$780$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$780$myNondetVar_0;
- goto inline$BDLGetDebugLevel$780$label_1#1;
-
- inline$BDLGetDebugLevel$780$label_1#1:
- goto inline$BDLGetDebugLevel$780$Return#1;
-
- inline$BDLGetDebugLevel$780$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$780$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon51_Then#1, inline$BDLSystemPowerIoCompletion$29$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_120_true#1, inline$BDLSystemPowerIoCompletion$29$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_124#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_125#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_126#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$29$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_121#1:
- goto inline$BDLGetDebugLevel$781$Entry#1;
-
- inline$BDLGetDebugLevel$781$Entry#1:
- goto inline$BDLGetDebugLevel$781$start#1;
-
- inline$BDLGetDebugLevel$781$start#1:
- goto inline$BDLGetDebugLevel$781$label_3#1;
-
- inline$BDLGetDebugLevel$781$label_3#1:
- havoc inline$BDLGetDebugLevel$781$myNondetVar_0;
- inline$BDLGetDebugLevel$781$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$781$myNondetVar_0;
- goto inline$BDLGetDebugLevel$781$label_1#1;
-
- inline$BDLGetDebugLevel$781$label_1#1:
- goto inline$BDLGetDebugLevel$781$Return#1;
-
- inline$BDLGetDebugLevel$781$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$781$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon52_Then#1, inline$BDLSystemPowerIoCompletion$29$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_130_true#1, inline$BDLSystemPowerIoCompletion$29$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_134#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_135#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_136#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$29$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_131#1:
- goto inline$BDLGetDebugLevel$782$Entry#1;
-
- inline$BDLGetDebugLevel$782$Entry#1:
- goto inline$BDLGetDebugLevel$782$start#1;
-
- inline$BDLGetDebugLevel$782$start#1:
- goto inline$BDLGetDebugLevel$782$label_3#1;
-
- inline$BDLGetDebugLevel$782$label_3#1:
- havoc inline$BDLGetDebugLevel$782$myNondetVar_0;
- inline$BDLGetDebugLevel$782$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$782$myNondetVar_0;
- goto inline$BDLGetDebugLevel$782$label_1#1;
-
- inline$BDLGetDebugLevel$782$label_1#1:
- goto inline$BDLGetDebugLevel$782$Return#1;
-
- inline$BDLGetDebugLevel$782$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$782$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon53_Then#1, inline$BDLSystemPowerIoCompletion$29$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_140_true#1, inline$BDLSystemPowerIoCompletion$29$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$29$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_115#1:
- inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$29$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$29$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_43#1:
- goto inline$BDLGetDebugLevel$774$Entry#1;
-
- inline$BDLGetDebugLevel$774$Entry#1:
- goto inline$BDLGetDebugLevel$774$start#1;
-
- inline$BDLGetDebugLevel$774$start#1:
- goto inline$BDLGetDebugLevel$774$label_3#1;
-
- inline$BDLGetDebugLevel$774$label_3#1:
- havoc inline$BDLGetDebugLevel$774$myNondetVar_0;
- inline$BDLGetDebugLevel$774$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$774$myNondetVar_0;
- goto inline$BDLGetDebugLevel$774$label_1#1;
-
- inline$BDLGetDebugLevel$774$label_1#1:
- goto inline$BDLGetDebugLevel$774$Return#1;
-
- inline$BDLGetDebugLevel$774$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$774$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon40_Then#1, inline$BDLSystemPowerIoCompletion$29$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_46_true#1, inline$BDLSystemPowerIoCompletion$29$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_50#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_51#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_52#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$29$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_47#1:
- goto inline$BDLGetDebugLevel$775$Entry#1;
-
- inline$BDLGetDebugLevel$775$Entry#1:
- goto inline$BDLGetDebugLevel$775$start#1;
-
- inline$BDLGetDebugLevel$775$start#1:
- goto inline$BDLGetDebugLevel$775$label_3#1;
-
- inline$BDLGetDebugLevel$775$label_3#1:
- havoc inline$BDLGetDebugLevel$775$myNondetVar_0;
- inline$BDLGetDebugLevel$775$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$775$myNondetVar_0;
- goto inline$BDLGetDebugLevel$775$label_1#1;
-
- inline$BDLGetDebugLevel$775$label_1#1:
- goto inline$BDLGetDebugLevel$775$Return#1;
-
- inline$BDLGetDebugLevel$775$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$775$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon41_Then#1, inline$BDLSystemPowerIoCompletion$29$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_56_true#1, inline$BDLSystemPowerIoCompletion$29$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_60#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_61#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_62#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$29$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_57#1:
- goto inline$BDLGetDebugLevel$776$Entry#1;
-
- inline$BDLGetDebugLevel$776$Entry#1:
- goto inline$BDLGetDebugLevel$776$start#1;
-
- inline$BDLGetDebugLevel$776$start#1:
- goto inline$BDLGetDebugLevel$776$label_3#1;
-
- inline$BDLGetDebugLevel$776$label_3#1:
- havoc inline$BDLGetDebugLevel$776$myNondetVar_0;
- inline$BDLGetDebugLevel$776$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$776$myNondetVar_0;
- goto inline$BDLGetDebugLevel$776$label_1#1;
-
- inline$BDLGetDebugLevel$776$label_1#1:
- goto inline$BDLGetDebugLevel$776$Return#1;
-
- inline$BDLGetDebugLevel$776$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$776$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon42_Then#1, inline$BDLSystemPowerIoCompletion$29$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_66_true#1, inline$BDLSystemPowerIoCompletion$29$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$29$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$29$anon43_Then#1, inline$BDLSystemPowerIoCompletion$29$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$29$anon44_Then#1, inline$BDLSystemPowerIoCompletion$29$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_74#1:
- goto inline$storm_IoCompleteRequest$61$Entry#1;
-
- inline$storm_IoCompleteRequest$61$Entry#1:
- inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$61$start#1;
-
- inline$storm_IoCompleteRequest$61$start#1:
- inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$61$label_3#1;
-
- inline$storm_IoCompleteRequest$61$label_3#1:
- call inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$61$label_6#1;
-
- inline$storm_IoCompleteRequest$61$label_6#1:
- goto inline$storm_IoCompleteRequest$61$label_6_true#1, inline$storm_IoCompleteRequest$61$label_6_false#1;
-
- inline$storm_IoCompleteRequest$61$label_6_false#1:
- assume inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$61$label_7#1;
-
- inline$storm_IoCompleteRequest$61$label_6_true#1:
- assume inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$61$label_8#1;
-
- inline$storm_IoCompleteRequest$61$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$61$anon3_Then#1, inline$storm_IoCompleteRequest$61$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$61$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$61$anon1#1;
-
- inline$storm_IoCompleteRequest$61$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$61$label_9#1;
-
- inline$storm_IoCompleteRequest$61$label_9#1:
- goto inline$storm_IoCompleteRequest$61$label_9_true#1, inline$storm_IoCompleteRequest$61$label_9_false#1;
-
- inline$storm_IoCompleteRequest$61$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$61$label_10#1;
-
- inline$storm_IoCompleteRequest$61$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$61$label_1#1;
-
- inline$storm_IoCompleteRequest$61$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$61$label_7#1;
-
- inline$storm_IoCompleteRequest$61$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$61$label_1#1;
-
- inline$storm_IoCompleteRequest$61$label_1#1:
- goto inline$storm_IoCompleteRequest$61$Return#1;
-
- inline$storm_IoCompleteRequest$61$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$61$Return#1;
-
- inline$storm_IoCompleteRequest$61$Return#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon45_Then#1, inline$BDLSystemPowerIoCompletion$29$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$29$anon46_Then#1, inline$BDLSystemPowerIoCompletion$29$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_80#1:
- goto inline$BDLGetDebugLevel$777$Entry#1;
-
- inline$BDLGetDebugLevel$777$Entry#1:
- goto inline$BDLGetDebugLevel$777$start#1;
-
- inline$BDLGetDebugLevel$777$start#1:
- goto inline$BDLGetDebugLevel$777$label_3#1;
-
- inline$BDLGetDebugLevel$777$label_3#1:
- havoc inline$BDLGetDebugLevel$777$myNondetVar_0;
- inline$BDLGetDebugLevel$777$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$777$myNondetVar_0;
- goto inline$BDLGetDebugLevel$777$label_1#1;
-
- inline$BDLGetDebugLevel$777$label_1#1:
- goto inline$BDLGetDebugLevel$777$Return#1;
-
- inline$BDLGetDebugLevel$777$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$777$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon47_Then#1, inline$BDLSystemPowerIoCompletion$29$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_83_true#1, inline$BDLSystemPowerIoCompletion$29$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_87#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_88#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_89#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$29$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_84#1:
- goto inline$BDLGetDebugLevel$778$Entry#1;
-
- inline$BDLGetDebugLevel$778$Entry#1:
- goto inline$BDLGetDebugLevel$778$start#1;
-
- inline$BDLGetDebugLevel$778$start#1:
- goto inline$BDLGetDebugLevel$778$label_3#1;
-
- inline$BDLGetDebugLevel$778$label_3#1:
- havoc inline$BDLGetDebugLevel$778$myNondetVar_0;
- inline$BDLGetDebugLevel$778$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$778$myNondetVar_0;
- goto inline$BDLGetDebugLevel$778$label_1#1;
-
- inline$BDLGetDebugLevel$778$label_1#1:
- goto inline$BDLGetDebugLevel$778$Return#1;
-
- inline$BDLGetDebugLevel$778$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$778$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon48_Then#1, inline$BDLSystemPowerIoCompletion$29$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_93_true#1, inline$BDLSystemPowerIoCompletion$29$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_97#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_98#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_99#1:
- call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$29$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$29$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_94#1:
- goto inline$BDLGetDebugLevel$779$Entry#1;
-
- inline$BDLGetDebugLevel$779$Entry#1:
- goto inline$BDLGetDebugLevel$779$start#1;
-
- inline$BDLGetDebugLevel$779$start#1:
- goto inline$BDLGetDebugLevel$779$label_3#1;
-
- inline$BDLGetDebugLevel$779$label_3#1:
- havoc inline$BDLGetDebugLevel$779$myNondetVar_0;
- inline$BDLGetDebugLevel$779$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$779$myNondetVar_0;
- goto inline$BDLGetDebugLevel$779$label_1#1;
-
- inline$BDLGetDebugLevel$779$label_1#1:
- goto inline$BDLGetDebugLevel$779$Return#1;
-
- inline$BDLGetDebugLevel$779$Return#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$779$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$29$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$29$anon49_Then#1, inline$BDLSystemPowerIoCompletion$29$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_103_true#1, inline$BDLSystemPowerIoCompletion$29$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$29$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$29$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_104#1:
- inline$BDLSystemPowerIoCompletion$29$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$29$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$29$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$29$Return#1;
-
- inline$BDLSystemPowerIoCompletion$29$Return#1:
- inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$29$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$29$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$29$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$29$anon14_Then#1, inline$CallCompletionRoutine$29$anon14_Else#1;
-
- inline$CallCompletionRoutine$29$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$29$anon9#1;
-
- inline$CallCompletionRoutine$29$anon9#1:
- goto inline$CallCompletionRoutine$29$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$29$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$29$Return#1;
-
- inline$CallCompletionRoutine$29$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$29$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$29$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$29$Entry#1:
- inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$29$start#1;
-
- inline$BDLDevicePowerIoCompletion$29$start#1:
- call inline$BDLDevicePowerIoCompletion$29$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$29$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_4#1:
- inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_6#1:
- inline$BDLDevicePowerIoCompletion$29$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$29$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$29$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$29$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$148$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$148$Entry#1:
- inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$148$start#1;
-
- inline$IoGetCurrentIrpStackLocation$148$start#1:
- inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$148$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$148$label_3_true#1, inline$IoGetCurrentIrpStackLocation$148$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$148$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$148$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$148$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$148$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$148$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$148$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$148$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$148$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$148$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$148$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$148$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$148$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$148$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$148$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$148$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$148$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$148$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$148$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$148$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$148$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$148$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$148$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$148$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon30_Then#1, inline$BDLDevicePowerIoCompletion$29$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_13#1:
- inline$BDLDevicePowerIoCompletion$29$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$29$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$29$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_17#1:
- goto inline$BDLGetDebugLevel$762$Entry#1;
-
- inline$BDLGetDebugLevel$762$Entry#1:
- goto inline$BDLGetDebugLevel$762$start#1;
-
- inline$BDLGetDebugLevel$762$start#1:
- goto inline$BDLGetDebugLevel$762$label_3#1;
-
- inline$BDLGetDebugLevel$762$label_3#1:
- havoc inline$BDLGetDebugLevel$762$myNondetVar_0;
- inline$BDLGetDebugLevel$762$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$762$myNondetVar_0;
- goto inline$BDLGetDebugLevel$762$label_1#1;
-
- inline$BDLGetDebugLevel$762$label_1#1:
- goto inline$BDLGetDebugLevel$762$Return#1;
-
- inline$BDLGetDebugLevel$762$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$762$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon31_Then#1, inline$BDLDevicePowerIoCompletion$29$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_20_true#1, inline$BDLDevicePowerIoCompletion$29$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_24#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_25#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_26#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$29$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_21#1:
- goto inline$BDLGetDebugLevel$763$Entry#1;
-
- inline$BDLGetDebugLevel$763$Entry#1:
- goto inline$BDLGetDebugLevel$763$start#1;
-
- inline$BDLGetDebugLevel$763$start#1:
- goto inline$BDLGetDebugLevel$763$label_3#1;
-
- inline$BDLGetDebugLevel$763$label_3#1:
- havoc inline$BDLGetDebugLevel$763$myNondetVar_0;
- inline$BDLGetDebugLevel$763$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$763$myNondetVar_0;
- goto inline$BDLGetDebugLevel$763$label_1#1;
-
- inline$BDLGetDebugLevel$763$label_1#1:
- goto inline$BDLGetDebugLevel$763$Return#1;
-
- inline$BDLGetDebugLevel$763$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$763$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon32_Then#1, inline$BDLDevicePowerIoCompletion$29$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_30_true#1, inline$BDLDevicePowerIoCompletion$29$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_34#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_35#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_36#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$29$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_31#1:
- goto inline$BDLGetDebugLevel$764$Entry#1;
-
- inline$BDLGetDebugLevel$764$Entry#1:
- goto inline$BDLGetDebugLevel$764$start#1;
-
- inline$BDLGetDebugLevel$764$start#1:
- goto inline$BDLGetDebugLevel$764$label_3#1;
-
- inline$BDLGetDebugLevel$764$label_3#1:
- havoc inline$BDLGetDebugLevel$764$myNondetVar_0;
- inline$BDLGetDebugLevel$764$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$764$myNondetVar_0;
- goto inline$BDLGetDebugLevel$764$label_1#1;
-
- inline$BDLGetDebugLevel$764$label_1#1:
- goto inline$BDLGetDebugLevel$764$Return#1;
-
- inline$BDLGetDebugLevel$764$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$764$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon33_Then#1, inline$BDLDevicePowerIoCompletion$29$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_40_true#1, inline$BDLDevicePowerIoCompletion$29$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_41_true#1, inline$BDLDevicePowerIoCompletion$29$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$29$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$29$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_44_true#1, inline$BDLDevicePowerIoCompletion$29$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$29$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_45_true#1, inline$BDLDevicePowerIoCompletion$29$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$29$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$29$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$29$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$29$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$29$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$29$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_54#1:
- inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$29$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_55_true#1, inline$BDLDevicePowerIoCompletion$29$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_56#1:
- call inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$29$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$29$anon34_Then#1, inline$BDLDevicePowerIoCompletion$29$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_59#1:
- goto inline$BDLGetDebugLevel$765$Entry#1;
-
- inline$BDLGetDebugLevel$765$Entry#1:
- goto inline$BDLGetDebugLevel$765$start#1;
-
- inline$BDLGetDebugLevel$765$start#1:
- goto inline$BDLGetDebugLevel$765$label_3#1;
-
- inline$BDLGetDebugLevel$765$label_3#1:
- havoc inline$BDLGetDebugLevel$765$myNondetVar_0;
- inline$BDLGetDebugLevel$765$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$765$myNondetVar_0;
- goto inline$BDLGetDebugLevel$765$label_1#1;
-
- inline$BDLGetDebugLevel$765$label_1#1:
- goto inline$BDLGetDebugLevel$765$Return#1;
-
- inline$BDLGetDebugLevel$765$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$765$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon35_Then#1, inline$BDLDevicePowerIoCompletion$29$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_62_true#1, inline$BDLDevicePowerIoCompletion$29$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_66#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_67#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_68#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$29$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_63#1:
- goto inline$BDLGetDebugLevel$766$Entry#1;
-
- inline$BDLGetDebugLevel$766$Entry#1:
- goto inline$BDLGetDebugLevel$766$start#1;
-
- inline$BDLGetDebugLevel$766$start#1:
- goto inline$BDLGetDebugLevel$766$label_3#1;
-
- inline$BDLGetDebugLevel$766$label_3#1:
- havoc inline$BDLGetDebugLevel$766$myNondetVar_0;
- inline$BDLGetDebugLevel$766$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$766$myNondetVar_0;
- goto inline$BDLGetDebugLevel$766$label_1#1;
-
- inline$BDLGetDebugLevel$766$label_1#1:
- goto inline$BDLGetDebugLevel$766$Return#1;
-
- inline$BDLGetDebugLevel$766$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$766$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon36_Then#1, inline$BDLDevicePowerIoCompletion$29$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_72_true#1, inline$BDLDevicePowerIoCompletion$29$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_76#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_77#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_78#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$29$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_73#1:
- goto inline$BDLGetDebugLevel$767$Entry#1;
-
- inline$BDLGetDebugLevel$767$Entry#1:
- goto inline$BDLGetDebugLevel$767$start#1;
-
- inline$BDLGetDebugLevel$767$start#1:
- goto inline$BDLGetDebugLevel$767$label_3#1;
-
- inline$BDLGetDebugLevel$767$label_3#1:
- havoc inline$BDLGetDebugLevel$767$myNondetVar_0;
- inline$BDLGetDebugLevel$767$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$767$myNondetVar_0;
- goto inline$BDLGetDebugLevel$767$label_1#1;
-
- inline$BDLGetDebugLevel$767$label_1#1:
- goto inline$BDLGetDebugLevel$767$Return#1;
-
- inline$BDLGetDebugLevel$767$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$767$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon37_Then#1, inline$BDLDevicePowerIoCompletion$29$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_82_true#1, inline$BDLDevicePowerIoCompletion$29$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$29$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$29$anon38_Then#1, inline$BDLDevicePowerIoCompletion$29$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$29$anon39_Then#1, inline$BDLDevicePowerIoCompletion$29$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_92#1:
- goto inline$storm_IoCompleteRequest$60$Entry#1;
-
- inline$storm_IoCompleteRequest$60$Entry#1:
- inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$60$start#1;
-
- inline$storm_IoCompleteRequest$60$start#1:
- inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$60$label_3#1;
-
- inline$storm_IoCompleteRequest$60$label_3#1:
- call inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$60$label_6#1;
-
- inline$storm_IoCompleteRequest$60$label_6#1:
- goto inline$storm_IoCompleteRequest$60$label_6_true#1, inline$storm_IoCompleteRequest$60$label_6_false#1;
-
- inline$storm_IoCompleteRequest$60$label_6_false#1:
- assume inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$60$label_7#1;
-
- inline$storm_IoCompleteRequest$60$label_6_true#1:
- assume inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$60$label_8#1;
-
- inline$storm_IoCompleteRequest$60$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$60$anon3_Then#1, inline$storm_IoCompleteRequest$60$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$60$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$60$anon1#1;
-
- inline$storm_IoCompleteRequest$60$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$60$label_9#1;
-
- inline$storm_IoCompleteRequest$60$label_9#1:
- goto inline$storm_IoCompleteRequest$60$label_9_true#1, inline$storm_IoCompleteRequest$60$label_9_false#1;
-
- inline$storm_IoCompleteRequest$60$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$60$label_10#1;
-
- inline$storm_IoCompleteRequest$60$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$60$label_1#1;
-
- inline$storm_IoCompleteRequest$60$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$60$label_7#1;
-
- inline$storm_IoCompleteRequest$60$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$60$label_1#1;
-
- inline$storm_IoCompleteRequest$60$label_1#1:
- goto inline$storm_IoCompleteRequest$60$Return#1;
-
- inline$storm_IoCompleteRequest$60$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$60$Return#1;
-
- inline$storm_IoCompleteRequest$60$Return#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon40_Then#1, inline$BDLDevicePowerIoCompletion$29$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$29$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$29$anon41_Then#1, inline$BDLDevicePowerIoCompletion$29$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_98#1:
- goto inline$BDLGetDebugLevel$768$Entry#1;
-
- inline$BDLGetDebugLevel$768$Entry#1:
- goto inline$BDLGetDebugLevel$768$start#1;
-
- inline$BDLGetDebugLevel$768$start#1:
- goto inline$BDLGetDebugLevel$768$label_3#1;
-
- inline$BDLGetDebugLevel$768$label_3#1:
- havoc inline$BDLGetDebugLevel$768$myNondetVar_0;
- inline$BDLGetDebugLevel$768$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$768$myNondetVar_0;
- goto inline$BDLGetDebugLevel$768$label_1#1;
-
- inline$BDLGetDebugLevel$768$label_1#1:
- goto inline$BDLGetDebugLevel$768$Return#1;
-
- inline$BDLGetDebugLevel$768$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$768$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon42_Then#1, inline$BDLDevicePowerIoCompletion$29$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_101_true#1, inline$BDLDevicePowerIoCompletion$29$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_105#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_106#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_107#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$29$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_102#1:
- goto inline$BDLGetDebugLevel$769$Entry#1;
-
- inline$BDLGetDebugLevel$769$Entry#1:
- goto inline$BDLGetDebugLevel$769$start#1;
-
- inline$BDLGetDebugLevel$769$start#1:
- goto inline$BDLGetDebugLevel$769$label_3#1;
-
- inline$BDLGetDebugLevel$769$label_3#1:
- havoc inline$BDLGetDebugLevel$769$myNondetVar_0;
- inline$BDLGetDebugLevel$769$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$769$myNondetVar_0;
- goto inline$BDLGetDebugLevel$769$label_1#1;
-
- inline$BDLGetDebugLevel$769$label_1#1:
- goto inline$BDLGetDebugLevel$769$Return#1;
-
- inline$BDLGetDebugLevel$769$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$769$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon43_Then#1, inline$BDLDevicePowerIoCompletion$29$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_111_true#1, inline$BDLDevicePowerIoCompletion$29$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_115#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_116#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_117#1:
- call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$29$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$29$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_112#1:
- goto inline$BDLGetDebugLevel$770$Entry#1;
-
- inline$BDLGetDebugLevel$770$Entry#1:
- goto inline$BDLGetDebugLevel$770$start#1;
-
- inline$BDLGetDebugLevel$770$start#1:
- goto inline$BDLGetDebugLevel$770$label_3#1;
-
- inline$BDLGetDebugLevel$770$label_3#1:
- havoc inline$BDLGetDebugLevel$770$myNondetVar_0;
- inline$BDLGetDebugLevel$770$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$770$myNondetVar_0;
- goto inline$BDLGetDebugLevel$770$label_1#1;
-
- inline$BDLGetDebugLevel$770$label_1#1:
- goto inline$BDLGetDebugLevel$770$Return#1;
-
- inline$BDLGetDebugLevel$770$Return#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$770$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$29$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$29$anon44_Then#1, inline$BDLDevicePowerIoCompletion$29$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_121_true#1, inline$BDLDevicePowerIoCompletion$29$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$29$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$29$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_122#1:
- inline$BDLDevicePowerIoCompletion$29$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$29$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$29$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$29$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$29$Return#1;
-
- inline$BDLDevicePowerIoCompletion$29$Return#1:
- inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$29$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$29$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$29$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$29$anon13_Then#1, inline$CallCompletionRoutine$29$anon13_Else#1;
-
- inline$CallCompletionRoutine$29$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$29$anon7#1;
-
- inline$CallCompletionRoutine$29$anon7#1:
- goto inline$CallCompletionRoutine$29$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$29$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$29$Return#1;
-
- inline$CallCompletionRoutine$29$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$29$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$29$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$29$Entry#1:
- inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$29$start#1;
-
- inline$BDLCallDriverCompletionRoutine$29$start#1:
- inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$29$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$29$label_3_true#1, inline$BDLCallDriverCompletionRoutine$29$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$29$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$29$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$29$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$29$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_6#1:
- goto inline$storm_KeSetEvent$33$Entry#1;
-
- inline$storm_KeSetEvent$33$Entry#1:
- inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$33$start#1;
-
- inline$storm_KeSetEvent$33$start#1:
- inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$33$label_3#1;
-
- inline$storm_KeSetEvent$33$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$33$label_1#1;
-
- inline$storm_KeSetEvent$33$label_1#1:
- goto inline$storm_KeSetEvent$33$Return#1;
-
- inline$storm_KeSetEvent$33$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$29$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$29$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$29$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$29$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$29$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$29$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$29$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_9#1:
- inline$BDLCallDriverCompletionRoutine$29$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$29$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$29$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$29$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$29$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$29$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$29$Return#1:
- inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$29$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$29$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$29$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$29$anon12_Then#1, inline$CallCompletionRoutine$29$anon12_Else#1;
-
- inline$CallCompletionRoutine$29$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$29$anon5#1;
-
- inline$CallCompletionRoutine$29$anon5#1:
- goto inline$CallCompletionRoutine$29$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$29$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$29$label_23#1;
-
- inline$CallCompletionRoutine$29$label_23#1:
- inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$29$label_24#1;
-
- inline$CallCompletionRoutine$29$label_24#1:
- goto inline$CallCompletionRoutine$29$label_24_true#1, inline$CallCompletionRoutine$29$label_24_false#1;
-
- inline$CallCompletionRoutine$29$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$29$label_1#1;
-
- inline$CallCompletionRoutine$29$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$29$label_25#1;
-
- inline$CallCompletionRoutine$29$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$29$label_1#1;
-
- inline$CallCompletionRoutine$29$label_1#1:
- goto inline$CallCompletionRoutine$29$Return#1;
-
- inline$CallCompletionRoutine$29$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$29$Return#1;
-
- inline$CallCompletionRoutine$29$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$29$Return#1;
-
- inline$CallCompletionRoutine$29$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$29$Return#1;
-
- inline$CallCompletionRoutine$29$Return#1:
- goto inline$storm_IoCallDriver$14$label_39$1#1;
-
- inline$storm_IoCallDriver$14$label_39$1#1:
- goto inline$storm_IoCallDriver$14$anon15_Then#1, inline$storm_IoCallDriver$14$anon15_Else#1;
-
- inline$storm_IoCallDriver$14$anon15_Else#1:
- assume !raiseException;
- goto inline$storm_IoCallDriver$14$anon10#1;
-
- inline$storm_IoCallDriver$14$anon10#1:
- goto inline$storm_IoCallDriver$14$label_36#1;
-
- inline$storm_IoCallDriver$14$anon15_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$14$Return#1;
-
- inline$storm_IoCallDriver$14$label_27_case_0#1:
- assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ != 0;
- assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ != 1;
- goto inline$storm_IoCallDriver$14$label_28#1;
-
- inline$storm_IoCallDriver$14$label_28#1:
- inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8 := 259;
- goto inline$storm_IoCallDriver$14$label_42#1;
-
- inline$storm_IoCallDriver$14$label_42#1:
- goto inline$storm_IoCallDriver$14$label_43#1;
-
- inline$storm_IoCallDriver$14$label_43#1:
- created_irp_0 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
- call contextSwitch();
- goto inline$storm_IoCallDriver$14$label_36#1;
-
- inline$storm_IoCallDriver$14$label_36#1:
- inline$storm_IoCallDriver$14$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8;
- goto inline$storm_IoCallDriver$14$label_1#1;
-
- inline$storm_IoCallDriver$14$label_1#1:
- goto inline$storm_IoCallDriver$14$Return#1;
-
- inline$storm_IoCallDriver$14$anon13_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$14$Return#1;
-
- inline$storm_IoCallDriver$14$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$14$Return#1;
-
- inline$storm_IoCallDriver$14$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCallDriver$14$Return#1;
-
- inline$storm_IoCallDriver$14$Return#1:
- inline$BDLPnP$0$$result.storm_IoCallDriver$995.29$47$ := inline$storm_IoCallDriver$14$$result.storm_IoCallDriver$456.0$1$;
- goto inline$BDLPnP$0$label_181$1#1;
-
- inline$BDLPnP$0$label_181$1#1:
- goto inline$BDLPnP$0$anon80_Then#1, inline$BDLPnP$0$anon80_Else#1;
-
- inline$BDLPnP$0$anon80_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon53#1;
-
- inline$BDLPnP$0$anon53#1:
- goto inline$BDLPnP$0$label_184#1;
-
- inline$BDLPnP$0$label_184#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.storm_IoCallDriver$995.29$47$;
- goto inline$BDLPnP$0$label_185#1;
-
- inline$BDLPnP$0$label_185#1:
- inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 0;
- goto inline$BDLPnP$0$label_139#1;
-
- inline$BDLPnP$0$label_139#1:
- goto inline$BDLPnP$0$label_139_true#1, inline$BDLPnP$0$label_139_false#1;
-
- inline$BDLPnP$0$label_139_false#1:
- assume !INT_EQ(inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8, 1);
- goto inline$BDLPnP$0$label_140#1;
-
- inline$BDLPnP$0$label_139_true#1:
- assume INT_EQ(inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8, 1);
- goto inline$BDLPnP$0$label_141#1;
-
- inline$BDLPnP$0$label_141#1:
- goto inline$BDLPnP$0$label_142#1;
-
- inline$BDLPnP$0$label_142#1:
- goto inline$storm_IoCompleteRequest$57$Entry#1;
-
- inline$storm_IoCompleteRequest$57$Entry#1:
- inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$storm_IoCompleteRequest$57$start#1;
-
- inline$storm_IoCompleteRequest$57$start#1:
- inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$57$label_3#1;
-
- inline$storm_IoCompleteRequest$57$label_3#1:
- call inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$57$label_6#1;
-
- inline$storm_IoCompleteRequest$57$label_6#1:
- goto inline$storm_IoCompleteRequest$57$label_6_true#1, inline$storm_IoCompleteRequest$57$label_6_false#1;
-
- inline$storm_IoCompleteRequest$57$label_6_false#1:
- assume inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$57$label_7#1;
-
- inline$storm_IoCompleteRequest$57$label_6_true#1:
- assume inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$57$label_8#1;
-
- inline$storm_IoCompleteRequest$57$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$57$anon3_Then#1, inline$storm_IoCompleteRequest$57$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$57$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$57$anon1#1;
-
- inline$storm_IoCompleteRequest$57$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$57$label_9#1;
-
- inline$storm_IoCompleteRequest$57$label_9#1:
- goto inline$storm_IoCompleteRequest$57$label_9_true#1, inline$storm_IoCompleteRequest$57$label_9_false#1;
-
- inline$storm_IoCompleteRequest$57$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$57$label_10#1;
-
- inline$storm_IoCompleteRequest$57$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$57$label_1#1;
-
- inline$storm_IoCompleteRequest$57$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$57$label_7#1;
-
- inline$storm_IoCompleteRequest$57$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$57$label_1#1;
-
- inline$storm_IoCompleteRequest$57$label_1#1:
- goto inline$storm_IoCompleteRequest$57$Return#1;
-
- inline$storm_IoCompleteRequest$57$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$57$Return#1;
-
- inline$storm_IoCompleteRequest$57$Return#1:
- goto inline$BDLPnP$0$label_142$1#1;
-
- inline$BDLPnP$0$label_142$1#1:
- goto inline$BDLPnP$0$anon75_Then#1, inline$BDLPnP$0$anon75_Else#1;
-
- inline$BDLPnP$0$anon75_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon43#1;
-
- inline$BDLPnP$0$anon43#1:
- goto inline$BDLPnP$0$label_140#1;
-
- inline$BDLPnP$0$label_140#1:
- goto inline$BDLPnP$0$label_140_true#1, inline$BDLPnP$0$label_140_false#1;
-
- inline$BDLPnP$0$label_140_false#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume !INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
- goto inline$BDLPnP$0$label_84#1;
-
- inline$BDLPnP$0$label_140_true#1:
- havoc inline$BDLPnP$0$myNondetVar_0;
- assume INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
- goto inline$BDLPnP$0$label_145#1;
-
- inline$BDLPnP$0$label_145#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8), 542142032, 88);
- goto inline$BDLPnP$0$anon76_Then#1, inline$BDLPnP$0$anon76_Else#1;
-
- inline$BDLPnP$0$anon76_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon45#1;
-
- inline$BDLPnP$0$anon45#1:
- goto inline$BDLPnP$0$label_84#1;
-
- inline$BDLPnP$0$anon76_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon75_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon80_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon79_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon78_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon77_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon66_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$label_51_true#1:
- assume inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 != 0;
- goto inline$BDLPnP$0$label_53#1;
-
- inline$BDLPnP$0$label_53#1:
- goto inline$BDLGetDebugLevel$3$Entry#1;
-
- inline$BDLGetDebugLevel$3$Entry#1:
- goto inline$BDLGetDebugLevel$3$start#1;
-
- inline$BDLGetDebugLevel$3$start#1:
- goto inline$BDLGetDebugLevel$3$label_3#1;
-
- inline$BDLGetDebugLevel$3$label_3#1:
- havoc inline$BDLGetDebugLevel$3$myNondetVar_0;
- inline$BDLGetDebugLevel$3$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$3$myNondetVar_0;
- goto inline$BDLGetDebugLevel$3$label_1#1;
-
- inline$BDLGetDebugLevel$3$label_1#1:
- goto inline$BDLGetDebugLevel$3$Return#1;
-
- inline$BDLGetDebugLevel$3$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$ := inline$BDLGetDebugLevel$3$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_53$1#1;
-
- inline$BDLPnP$0$label_53$1#1:
- goto inline$BDLPnP$0$anon59_Then#1, inline$BDLPnP$0$anon59_Else#1;
-
- inline$BDLPnP$0$anon59_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon11#1;
-
- inline$BDLPnP$0$anon11#1:
- goto inline$BDLPnP$0$label_56#1;
-
- inline$BDLPnP$0$label_56#1:
- goto inline$BDLPnP$0$label_56_true#1, inline$BDLPnP$0$label_56_false#1;
-
- inline$BDLPnP$0$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$) == 0;
- goto inline$BDLPnP$0$label_57#1;
-
- inline$BDLPnP$0$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$) != 0;
- goto inline$BDLPnP$0$label_60#1;
-
- inline$BDLPnP$0$label_60#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_61#1;
-
- inline$BDLPnP$0$label_61#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_62#1;
-
- inline$BDLPnP$0$label_62#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_63#1;
-
- inline$BDLPnP$0$label_63#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$886.0$18$;
- goto inline$BDLPnP$0$label_57#1;
-
- inline$BDLPnP$0$label_57#1:
- goto inline$BDLGetDebugLevel$4$Entry#1;
-
- inline$BDLGetDebugLevel$4$Entry#1:
- goto inline$BDLGetDebugLevel$4$start#1;
-
- inline$BDLGetDebugLevel$4$start#1:
- goto inline$BDLGetDebugLevel$4$label_3#1;
-
- inline$BDLGetDebugLevel$4$label_3#1:
- havoc inline$BDLGetDebugLevel$4$myNondetVar_0;
- inline$BDLGetDebugLevel$4$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$4$myNondetVar_0;
- goto inline$BDLGetDebugLevel$4$label_1#1;
-
- inline$BDLGetDebugLevel$4$label_1#1:
- goto inline$BDLGetDebugLevel$4$Return#1;
-
- inline$BDLGetDebugLevel$4$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$ := inline$BDLGetDebugLevel$4$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_57$1#1;
-
- inline$BDLPnP$0$label_57$1#1:
- goto inline$BDLPnP$0$anon60_Then#1, inline$BDLPnP$0$anon60_Else#1;
-
- inline$BDLPnP$0$anon60_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon13#1;
-
- inline$BDLPnP$0$anon13#1:
- goto inline$BDLPnP$0$label_66#1;
-
- inline$BDLPnP$0$label_66#1:
- goto inline$BDLPnP$0$label_66_true#1, inline$BDLPnP$0$label_66_false#1;
-
- inline$BDLPnP$0$label_66_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$) == 0;
- goto inline$BDLPnP$0$label_67#1;
-
- inline$BDLPnP$0$label_66_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$) != 0;
- goto inline$BDLPnP$0$label_70#1;
-
- inline$BDLPnP$0$label_70#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_71#1;
-
- inline$BDLPnP$0$label_71#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_72#1;
-
- inline$BDLPnP$0$label_72#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_73#1;
-
- inline$BDLPnP$0$label_73#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$886.0$23$;
- goto inline$BDLPnP$0$label_67#1;
-
- inline$BDLPnP$0$label_67#1:
- goto inline$BDLGetDebugLevel$5$Entry#1;
-
- inline$BDLGetDebugLevel$5$Entry#1:
- goto inline$BDLGetDebugLevel$5$start#1;
-
- inline$BDLGetDebugLevel$5$start#1:
- goto inline$BDLGetDebugLevel$5$label_3#1;
-
- inline$BDLGetDebugLevel$5$label_3#1:
- havoc inline$BDLGetDebugLevel$5$myNondetVar_0;
- inline$BDLGetDebugLevel$5$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$5$myNondetVar_0;
- goto inline$BDLGetDebugLevel$5$label_1#1;
-
- inline$BDLGetDebugLevel$5$label_1#1:
- goto inline$BDLGetDebugLevel$5$Return#1;
-
- inline$BDLGetDebugLevel$5$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$ := inline$BDLGetDebugLevel$5$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_67$1#1;
-
- inline$BDLPnP$0$label_67$1#1:
- goto inline$BDLPnP$0$anon61_Then#1, inline$BDLPnP$0$anon61_Else#1;
-
- inline$BDLPnP$0$anon61_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon15#1;
-
- inline$BDLPnP$0$anon15#1:
- goto inline$BDLPnP$0$label_76#1;
-
- inline$BDLPnP$0$label_76#1:
- goto inline$BDLPnP$0$label_76_true#1, inline$BDLPnP$0$label_76_false#1;
-
- inline$BDLPnP$0$label_76_false#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$, 4) == 0;
- goto inline$BDLPnP$0$label_77#1;
-
- inline$BDLPnP$0$label_76_true#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$, 4) != 0;
- goto inline$BDLPnP$0$label_78#1;
-
- inline$BDLPnP$0$label_78#1:
- goto inline$BDLPnP$0$label_77#1;
-
- inline$BDLPnP$0$label_77#1:
- goto inline$BDLPnP$0$label_79#1;
-
- inline$BDLPnP$0$label_79#1:
- goto inline$BDLPnP$0$label_80#1;
-
- inline$BDLPnP$0$label_80#1:
- goto inline$storm_IoCompleteRequest$0$Entry#1;
-
- inline$storm_IoCompleteRequest$0$Entry#1:
- inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
- goto inline$storm_IoCompleteRequest$0$start#1;
-
- inline$storm_IoCompleteRequest$0$start#1:
- inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$0$label_3#1;
-
- inline$storm_IoCompleteRequest$0$label_3#1:
- call inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$0$label_6#1;
-
- inline$storm_IoCompleteRequest$0$label_6#1:
- goto inline$storm_IoCompleteRequest$0$label_6_true#1, inline$storm_IoCompleteRequest$0$label_6_false#1;
-
- inline$storm_IoCompleteRequest$0$label_6_false#1:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$0$label_7#1;
-
- inline$storm_IoCompleteRequest$0$label_6_true#1:
- assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$0$label_8#1;
-
- inline$storm_IoCompleteRequest$0$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$0$anon3_Then#1, inline$storm_IoCompleteRequest$0$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$0$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$0$anon1#1;
-
- inline$storm_IoCompleteRequest$0$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_9#1;
-
- inline$storm_IoCompleteRequest$0$label_9#1:
- goto inline$storm_IoCompleteRequest$0$label_9_true#1, inline$storm_IoCompleteRequest$0$label_9_false#1;
-
- inline$storm_IoCompleteRequest$0$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$0$label_10#1;
-
- inline$storm_IoCompleteRequest$0$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$0$label_1#1;
-
- inline$storm_IoCompleteRequest$0$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$0$label_7#1;
-
- inline$storm_IoCompleteRequest$0$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$0$label_1#1;
-
- inline$storm_IoCompleteRequest$0$label_1#1:
- goto inline$storm_IoCompleteRequest$0$Return#1;
-
- inline$storm_IoCompleteRequest$0$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$0$Return#1;
-
- inline$storm_IoCompleteRequest$0$Return#1:
- goto inline$BDLPnP$0$label_80$1#1;
-
- inline$BDLPnP$0$label_80$1#1:
- goto inline$BDLPnP$0$anon62_Then#1, inline$BDLPnP$0$anon62_Else#1;
-
- inline$BDLPnP$0$anon62_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon17#1;
-
- inline$BDLPnP$0$anon17#1:
- goto inline$BDLPnP$0$label_83#1;
-
- inline$BDLPnP$0$label_83#1:
- inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := 0 - 1073741130;
- goto inline$BDLPnP$0$label_84#1;
-
- inline$BDLPnP$0$label_84#1:
- goto inline$BDLGetDebugLevel$6$Entry#1;
-
- inline$BDLGetDebugLevel$6$Entry#1:
- goto inline$BDLGetDebugLevel$6$start#1;
-
- inline$BDLGetDebugLevel$6$start#1:
- goto inline$BDLGetDebugLevel$6$label_3#1;
-
- inline$BDLGetDebugLevel$6$label_3#1:
- havoc inline$BDLGetDebugLevel$6$myNondetVar_0;
- inline$BDLGetDebugLevel$6$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$6$myNondetVar_0;
- goto inline$BDLGetDebugLevel$6$label_1#1;
-
- inline$BDLGetDebugLevel$6$label_1#1:
- goto inline$BDLGetDebugLevel$6$Return#1;
-
- inline$BDLGetDebugLevel$6$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$ := inline$BDLGetDebugLevel$6$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_84$1#1;
-
- inline$BDLPnP$0$label_84$1#1:
- goto inline$BDLPnP$0$anon63_Then#1, inline$BDLPnP$0$anon63_Else#1;
-
- inline$BDLPnP$0$anon63_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon19#1;
-
- inline$BDLPnP$0$anon19#1:
- goto inline$BDLPnP$0$label_87#1;
-
- inline$BDLPnP$0$label_87#1:
- goto inline$BDLPnP$0$label_87_true#1, inline$BDLPnP$0$label_87_false#1;
-
- inline$BDLPnP$0$label_87_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$) == 0;
- goto inline$BDLPnP$0$label_88#1;
-
- inline$BDLPnP$0$label_87_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$) != 0;
- goto inline$BDLPnP$0$label_91#1;
-
- inline$BDLPnP$0$label_91#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_92#1;
-
- inline$BDLPnP$0$label_92#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_93#1;
-
- inline$BDLPnP$0$label_93#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_94#1;
-
- inline$BDLPnP$0$label_94#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$1023.0$49$;
- goto inline$BDLPnP$0$label_88#1;
-
- inline$BDLPnP$0$label_88#1:
- goto inline$BDLGetDebugLevel$7$Entry#1;
-
- inline$BDLGetDebugLevel$7$Entry#1:
- goto inline$BDLGetDebugLevel$7$start#1;
-
- inline$BDLGetDebugLevel$7$start#1:
- goto inline$BDLGetDebugLevel$7$label_3#1;
-
- inline$BDLGetDebugLevel$7$label_3#1:
- havoc inline$BDLGetDebugLevel$7$myNondetVar_0;
- inline$BDLGetDebugLevel$7$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$7$myNondetVar_0;
- goto inline$BDLGetDebugLevel$7$label_1#1;
-
- inline$BDLGetDebugLevel$7$label_1#1:
- goto inline$BDLGetDebugLevel$7$Return#1;
-
- inline$BDLGetDebugLevel$7$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$ := inline$BDLGetDebugLevel$7$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_88$1#1;
-
- inline$BDLPnP$0$label_88$1#1:
- goto inline$BDLPnP$0$anon64_Then#1, inline$BDLPnP$0$anon64_Else#1;
-
- inline$BDLPnP$0$anon64_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon21#1;
-
- inline$BDLPnP$0$anon21#1:
- goto inline$BDLPnP$0$label_97#1;
-
- inline$BDLPnP$0$label_97#1:
- goto inline$BDLPnP$0$label_97_true#1, inline$BDLPnP$0$label_97_false#1;
-
- inline$BDLPnP$0$label_97_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$) == 0;
- goto inline$BDLPnP$0$label_98#1;
-
- inline$BDLPnP$0$label_97_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$) != 0;
- goto inline$BDLPnP$0$label_101#1;
-
- inline$BDLPnP$0$label_101#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_102#1;
-
- inline$BDLPnP$0$label_102#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_103#1;
-
- inline$BDLPnP$0$label_103#1:
- call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLPnP$0$label_104#1;
-
- inline$BDLPnP$0$label_104#1:
- havoc inline$BDLPnP$0$$result.DbgPrint$1023.0$54$;
- goto inline$BDLPnP$0$label_98#1;
-
- inline$BDLPnP$0$label_98#1:
- goto inline$BDLGetDebugLevel$8$Entry#1;
-
- inline$BDLGetDebugLevel$8$Entry#1:
- goto inline$BDLGetDebugLevel$8$start#1;
-
- inline$BDLGetDebugLevel$8$start#1:
- goto inline$BDLGetDebugLevel$8$label_3#1;
-
- inline$BDLGetDebugLevel$8$label_3#1:
- havoc inline$BDLGetDebugLevel$8$myNondetVar_0;
- inline$BDLGetDebugLevel$8$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$8$myNondetVar_0;
- goto inline$BDLGetDebugLevel$8$label_1#1;
-
- inline$BDLGetDebugLevel$8$label_1#1:
- goto inline$BDLGetDebugLevel$8$Return#1;
-
- inline$BDLGetDebugLevel$8$Return#1:
- inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$ := inline$BDLGetDebugLevel$8$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLPnP$0$label_98$1#1;
-
- inline$BDLPnP$0$label_98$1#1:
- goto inline$BDLPnP$0$anon65_Then#1, inline$BDLPnP$0$anon65_Else#1;
-
- inline$BDLPnP$0$anon65_Else#1:
- assume !raiseException;
- goto inline$BDLPnP$0$anon23#1;
-
- inline$BDLPnP$0$anon23#1:
- goto inline$BDLPnP$0$label_107#1;
-
- inline$BDLPnP$0$label_107#1:
- goto inline$BDLPnP$0$label_107_true#1, inline$BDLPnP$0$label_107_false#1;
-
- inline$BDLPnP$0$label_107_false#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$, 4) == 0;
- goto inline$BDLPnP$0$label_108#1;
-
- inline$BDLPnP$0$label_107_true#1:
- assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$, 4) != 0;
- goto inline$BDLPnP$0$label_109#1;
-
- inline$BDLPnP$0$label_109#1:
- goto inline$BDLPnP$0$label_108#1;
-
- inline$BDLPnP$0$label_108#1:
- goto inline$BDLPnP$0$label_1#1;
-
- inline$BDLPnP$0$label_1#1:
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon65_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon64_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon63_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon62_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon61_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon60_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon59_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon58_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon57_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon56_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon55_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$anon54_Then#1:
- assume raiseException;
- goto inline$BDLPnP$0$Return#1;
-
- inline$BDLPnP$0$Return#1:
- goto inline$storm_thread_dispatch$0$label_8$1#1;
-
- inline$storm_thread_dispatch$0$label_8$1#1:
- goto inline$storm_thread_dispatch$0$anon5_Then#1, inline$storm_thread_dispatch$0$anon5_Else#1;
-
- inline$storm_thread_dispatch$0$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_thread_dispatch$0$anon3#1;
-
- inline$storm_thread_dispatch$0$anon3#1:
- goto inline$storm_thread_dispatch$0$label_11#1;
-
- inline$storm_thread_dispatch$0$label_11#1:
- goto inline$storm_thread_dispatch$0$label_1#1;
-
- inline$storm_thread_dispatch$0$label_1#1:
- __storm_thread_done_3 := true;
- goto inline$storm_thread_dispatch$0$Return#1;
-
- inline$storm_thread_dispatch$0$anon5_Then#1:
- assume raiseException;
- goto inline$storm_thread_dispatch$0$Return#1;
-
- inline$storm_thread_dispatch$0$anon4_Then#1:
- assume raiseException;
- goto inline$storm_thread_dispatch$0$Return#1;
-
- inline$storm_thread_dispatch$0$Return#1:
- goto label_29$1#1;
-
- label_29$1#1:
- goto label_32#1;
-
- label_32#1:
- goto inline$storm_thread_cancel$0$Entry#1;
-
- inline$storm_thread_cancel$0$Entry#1:
- inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4_.1 := $irp$1$96.7$storm_main$0;
- goto inline$storm_thread_cancel$0$start#1;
-
- inline$storm_thread_cancel$0$start#1:
- k := 0;
- raiseException := false;
- __storm_thread_id := 1;
- call contextSwitch();
- inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4 := inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4_.1;
- goto inline$storm_thread_cancel$0$label_3#1;
-
- inline$storm_thread_cancel$0$label_3#1:
- goto inline$storm_IoCancelIrp$0$Entry#1;
-
- inline$storm_IoCancelIrp$0$Entry#1:
- inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4_.1 := inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4;
- goto inline$storm_IoCancelIrp$0$start#1;
-
- inline$storm_IoCancelIrp$0$start#1:
- inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4 := inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4_.1;
- goto inline$storm_IoCancelIrp$0$label_3#1;
-
- inline$storm_IoCancelIrp$0$label_3#1:
- goto inline$storm_IoCancelIrp$0$label_4#1;
-
- inline$storm_IoCancelIrp$0$label_4#1:
- goto inline$storm_IoCancelIrp$0$label_5#1;
-
- inline$storm_IoCancelIrp$0$label_5#1:
- __storm_atomic := true;
- goto inline$storm_IoCancelIrp$0$label_8#1;
-
- inline$storm_IoCancelIrp$0$label_8#1:
- inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4)];
- call contextSwitch();
- inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4 := inline$storm_IoCancelIrp$0$myVar_0;
- goto inline$storm_IoCancelIrp$0$label_9#1;
-
- inline$storm_IoCancelIrp$0$label_9#1:
- Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4) := 0];
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_10#1;
-
- inline$storm_IoCancelIrp$0$label_10#1:
- goto inline$storm_IoCancelIrp$0$anon9_Then#1, inline$storm_IoCancelIrp$0$anon9_Else#1;
-
- inline$storm_IoCancelIrp$0$anon9_Else#1:
- assume __storm_init;
- goto inline$storm_IoCancelIrp$0$anon1#1;
-
- inline$storm_IoCancelIrp$0$anon9_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoCancelIrp$0$anon1#1;
-
- inline$storm_IoCancelIrp$0$anon1#1:
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_13#1;
-
- inline$storm_IoCancelIrp$0$label_13#1:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
- assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
- goto inline$storm_IoAcquireCancelSpinLock$0$Entry#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$Entry#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$start#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$start#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$label_3#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_3#1:
- __storm_atomic := true;
- goto inline$storm_IoAcquireCancelSpinLock$0$label_6#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_6#1:
- havoc raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon4_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon4_Else#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon4_Else#1:
- assume !raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon1#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon1#1:
- assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_7#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_7#1:
- cancelLockStatus_0 := 1;
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_8#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_8#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#1:
- assume __storm_init;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#1:
- assume !__storm_init;
- __storm_atomic := false;
- goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon3#1:
- call contextSwitch();
- goto inline$storm_IoAcquireCancelSpinLock$0$label_1#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$label_1#1:
- goto inline$storm_IoAcquireCancelSpinLock$0$Return#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$anon4_Then#1:
- assume raiseException;
- goto inline$storm_IoAcquireCancelSpinLock$0$Return#1;
-
- inline$storm_IoAcquireCancelSpinLock$0$Return#1:
- goto inline$storm_IoCancelIrp$0$label_13$1#1;
-
- inline$storm_IoCancelIrp$0$label_13$1#1:
- goto inline$storm_IoCancelIrp$0$anon10_Then#1, inline$storm_IoCancelIrp$0$anon10_Else#1;
-
- inline$storm_IoCancelIrp$0$anon10_Else#1:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon3#1;
-
- inline$storm_IoCancelIrp$0$anon3#1:
- havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
- goto inline$storm_IoCancelIrp$0$label_16#1;
-
- inline$storm_IoCancelIrp$0$label_16#1:
- goto inline$storm_IoCancelIrp$0$label_16_true#1, inline$storm_IoCancelIrp$0$label_16_false#1;
-
- inline$storm_IoCancelIrp$0$label_16_false#1:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4 == 0;
- goto inline$storm_IoCancelIrp$0$label_17#1;
-
- inline$storm_IoCancelIrp$0$label_17#1:
- goto inline$storm_IoCancelIrp$0$label_1#1;
-
- inline$storm_IoCancelIrp$0$label_16_true#1:
- assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4 != 0;
- goto inline$storm_IoCancelIrp$0$label_18#1;
-
- inline$storm_IoCancelIrp$0$label_18#1:
- goto inline$storm_IoCancelIrp$0$label_19#1;
-
- inline$storm_IoCancelIrp$0$label_19#1:
- call inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$ := storm_nondet();
- goto inline$storm_IoCancelIrp$0$label_22#1;
-
- inline$storm_IoCancelIrp$0$label_22#1:
- goto inline$storm_IoCancelIrp$0$label_22_true#1, inline$storm_IoCancelIrp$0$label_22_false#1;
-
- inline$storm_IoCancelIrp$0$label_22_false#1:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$ == 0;
- goto inline$storm_IoCancelIrp$0$label_23#1;
-
- inline$storm_IoCancelIrp$0$label_22_true#1:
- assume inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$ != 0;
- goto inline$storm_IoCancelIrp$0$label_26#1;
-
- inline$storm_IoCancelIrp$0$label_26#1:
- havoc raiseException;
- goto inline$storm_IoCancelIrp$0$anon12_Then#1, inline$storm_IoCancelIrp$0$anon12_Else#1;
-
- inline$storm_IoCancelIrp$0$anon12_Else#1:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon7#1;
-
- inline$storm_IoCancelIrp$0$anon7#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4], 1);
- call contextSwitch();
- goto inline$storm_IoCancelIrp$0$label_27#1;
-
- inline$storm_IoCancelIrp$0$label_27#1:
- goto inline$storm_IoCancelIrp$0$label_27_true#1, inline$storm_IoCancelIrp$0$label_27_false#1;
-
- inline$storm_IoCancelIrp$0$label_27_false#1:
- assume 0 == 0;
- goto inline$storm_IoCancelIrp$0$label_28#1;
-
- inline$storm_IoCancelIrp$0$label_28#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCancelIrp$0$label_1#1;
-
- inline$storm_IoCancelIrp$0$label_27_true#1:
- assume 0 != 0;
- goto inline$storm_IoCancelIrp$0$label_23#1;
-
- inline$storm_IoCancelIrp$0$label_23#1:
- goto inline$IoGetCurrentIrpStackLocation$150$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$150$Entry#1:
- inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4;
- goto inline$IoGetCurrentIrpStackLocation$150$start#1;
-
- inline$IoGetCurrentIrpStackLocation$150$start#1:
- inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$150$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$150$label_3_true#1, inline$IoGetCurrentIrpStackLocation$150$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$150$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$150$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$150$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$150$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$150$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$150$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$150$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$150$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$150$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$150$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$150$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$150$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$150$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$150$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$150$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$150$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$150$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$150$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$150$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$150$Return#1:
- goto inline$storm_IoCancelIrp$0$label_23$1#1;
-
- inline$storm_IoCancelIrp$0$label_23$1#1:
- goto inline$storm_IoCancelIrp$0$anon11_Then#1, inline$storm_IoCancelIrp$0$anon11_Else#1;
-
- inline$storm_IoCancelIrp$0$anon11_Else#1:
- assume !raiseException;
- goto inline$storm_IoCancelIrp$0$anon5#1;
-
- inline$storm_IoCancelIrp$0$anon5#1:
- goto inline$storm_IoCancelIrp$0$label_31#1;
-
- inline$storm_IoCancelIrp$0$label_31#1:
- goto inline$storm_IoCancelIrp$0$label_32#1;
-
- inline$storm_IoCancelIrp$0$label_32#1:
- goto inline$storm_IoCancelIrp$0$label_35#1;
-
- inline$storm_IoCancelIrp$0$label_35#1:
- goto inline$storm_IoCancelIrp$0$label_1#1;
-
- inline$storm_IoCancelIrp$0$label_1#1:
- goto inline$storm_IoCancelIrp$0$Return#1;
-
- inline$storm_IoCancelIrp$0$anon11_Then#1:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#1;
-
- inline$storm_IoCancelIrp$0$anon12_Then#1:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#1;
-
- inline$storm_IoCancelIrp$0$anon10_Then#1:
- assume raiseException;
- goto inline$storm_IoCancelIrp$0$Return#1;
-
- inline$storm_IoCancelIrp$0$Return#1:
- goto inline$storm_thread_cancel$0$label_3$1#1;
-
- inline$storm_thread_cancel$0$label_3$1#1:
- goto inline$storm_thread_cancel$0$anon2_Then#1, inline$storm_thread_cancel$0$anon2_Else#1;
-
- inline$storm_thread_cancel$0$anon2_Else#1:
- assume !raiseException;
- goto inline$storm_thread_cancel$0$anon1#1;
-
- inline$storm_thread_cancel$0$anon1#1:
- goto inline$storm_thread_cancel$0$label_1#1;
-
- inline$storm_thread_cancel$0$label_1#1:
- __storm_thread_done_1 := true;
- goto inline$storm_thread_cancel$0$Return#1;
-
- inline$storm_thread_cancel$0$anon2_Then#1:
- assume raiseException;
- goto inline$storm_thread_cancel$0$Return#1;
-
- inline$storm_thread_cancel$0$Return#1:
- goto label_32$1#1;
-
- label_32$1#1:
- goto label_35#1;
-
- label_35#1:
- goto inline$storm_thread_dpc$0$Entry#1;
-
- inline$storm_thread_dpc$0$Entry#1:
- goto inline$storm_thread_dpc$0$start#1;
-
- inline$storm_thread_dpc$0$start#1:
- k := 0;
- raiseException := false;
- __storm_thread_id := 4;
- call contextSwitch();
- goto inline$storm_thread_dpc$0$label_1#1;
-
- inline$storm_thread_dpc$0$label_1#1:
- __storm_thread_done_4 := true;
- goto inline$storm_thread_dpc$0$Return#1;
-
- inline$storm_thread_dpc$0$Return#1:
- goto label_35$1#1;
-
- label_35$1#1:
- goto label_38#1;
-
- label_38#1:
- goto inline$storm_thread_completion$0$Entry#1;
-
- inline$storm_thread_completion$0$Entry#1:
- goto inline$storm_thread_completion$0$start#1;
-
- inline$storm_thread_completion$0$start#1:
- k := 0;
- raiseException := false;
- __storm_thread_id := 2;
- call contextSwitch();
- goto inline$storm_thread_completion$0$label_3#1;
-
- inline$storm_thread_completion$0$label_3#1:
- havoc raiseException;
- goto inline$storm_thread_completion$0$anon4_Then#1, inline$storm_thread_completion$0$anon4_Else#1;
-
- inline$storm_thread_completion$0$anon4_Else#1:
- assume !raiseException;
- goto inline$storm_thread_completion$0$anon1#1;
-
- inline$storm_thread_completion$0$anon1#1:
- assume k == 0 ==> INT_NEQ(created_irp_0, 0);
- call contextSwitch();
- goto inline$storm_thread_completion$0$label_4#1;
-
- inline$storm_thread_completion$0$label_4#1:
- goto inline$CallCompletionRoutine$30$Entry#1;
-
- inline$CallCompletionRoutine$30$Entry#1:
- inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4_.1 := created_irp_0;
- goto inline$CallCompletionRoutine$30$start#1;
-
- inline$CallCompletionRoutine$30$start#1:
- inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4_.1;
- goto inline$CallCompletionRoutine$30$label_3#1;
-
- inline$CallCompletionRoutine$30$label_3#1:
- goto inline$CallCompletionRoutine$30$label_4#1;
-
- inline$CallCompletionRoutine$30$label_4#1:
- goto inline$CallCompletionRoutine$30$label_5#1;
-
- inline$CallCompletionRoutine$30$label_5#1:
- goto inline$CallCompletionRoutine$30$label_6#1;
-
- inline$CallCompletionRoutine$30$label_6#1:
- goto inline$CallCompletionRoutine$30$label_7#1;
-
- inline$CallCompletionRoutine$30$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$151$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$151$Entry#1:
- inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$151$start#1;
-
- inline$IoGetCurrentIrpStackLocation$151$start#1:
- inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$151$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$151$label_3_true#1, inline$IoGetCurrentIrpStackLocation$151$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$151$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$151$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$151$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$151$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$151$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$151$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$151$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$151$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$151$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$151$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$151$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$151$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$151$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$151$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$151$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$151$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$151$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$151$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$151$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$151$Return#1:
- goto inline$CallCompletionRoutine$30$label_7$1#1;
-
- inline$CallCompletionRoutine$30$label_7$1#1:
- goto inline$CallCompletionRoutine$30$anon10_Then#1, inline$CallCompletionRoutine$30$anon10_Else#1;
-
- inline$CallCompletionRoutine$30$anon10_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$30$anon1#1;
-
- inline$CallCompletionRoutine$30$anon1#1:
- goto inline$CallCompletionRoutine$30$label_10#1;
-
- inline$CallCompletionRoutine$30$label_10#1:
- goto inline$CallCompletionRoutine$30$label_11#1;
-
- inline$CallCompletionRoutine$30$label_11#1:
- havoc inline$CallCompletionRoutine$30$myNondetVar_0;
- inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$myNondetVar_0;
- goto inline$CallCompletionRoutine$30$label_12#1;
-
- inline$CallCompletionRoutine$30$label_12#1:
- havoc inline$CallCompletionRoutine$30$myNondetVar_0;
- inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$myNondetVar_0;
- goto inline$CallCompletionRoutine$30$label_13#1;
-
- inline$CallCompletionRoutine$30$label_13#1:
- havoc inline$CallCompletionRoutine$30$myNondetVar_0;
- goto inline$CallCompletionRoutine$30$label_14#1;
-
- inline$CallCompletionRoutine$30$label_14#1:
- goto inline$IoGetCurrentIrpStackLocation$152$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$152$Entry#1:
- inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
- goto inline$IoGetCurrentIrpStackLocation$152$start#1;
-
- inline$IoGetCurrentIrpStackLocation$152$start#1:
- inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$152$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$152$label_3_true#1, inline$IoGetCurrentIrpStackLocation$152$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$152$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$152$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$152$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$152$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$152$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$152$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$152$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$152$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$152$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$152$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$152$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$152$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$152$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$152$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$152$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$152$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$152$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$152$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$152$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$152$Return#1:
- goto inline$CallCompletionRoutine$30$label_14$1#1;
-
- inline$CallCompletionRoutine$30$label_14$1#1:
- goto inline$CallCompletionRoutine$30$anon11_Then#1, inline$CallCompletionRoutine$30$anon11_Else#1;
-
- inline$CallCompletionRoutine$30$anon11_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$30$anon3#1;
-
- inline$CallCompletionRoutine$30$anon3#1:
- goto inline$CallCompletionRoutine$30$label_17#1;
-
- inline$CallCompletionRoutine$30$label_17#1:
- goto inline$CallCompletionRoutine$30$label_18#1;
-
- inline$CallCompletionRoutine$30$label_18#1:
- goto inline$CallCompletionRoutine$30$label_18_true#1, inline$CallCompletionRoutine$30$label_18_false#1;
-
- inline$CallCompletionRoutine$30$label_18_false#1:
- assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
- goto inline$CallCompletionRoutine$30$label_1#1;
-
- inline$CallCompletionRoutine$30$label_18_true#1:
- assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
- goto inline$CallCompletionRoutine$30$label_19#1;
-
- inline$CallCompletionRoutine$30$label_19#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
- call contextSwitch();
- goto inline$CallCompletionRoutine$30$label_20#1;
-
- inline$CallCompletionRoutine$30$label_20#1:
- goto inline$CallCompletionRoutine$30$label_20_icall_1#1, inline$CallCompletionRoutine$30$label_20_icall_2#1, inline$CallCompletionRoutine$30$label_20_icall_3#1;
-
- inline$CallCompletionRoutine$30$label_20_icall_3#1:
- assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
- havoc inline$CallCompletionRoutine$30$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$30$Entry#1;
-
- inline$BDLSystemPowerIoCompletion$30$Entry#1:
- inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLSystemPowerIoCompletion$30$start#1;
-
- inline$BDLSystemPowerIoCompletion$30$start#1:
- call inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
- inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
- inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
- goto inline$BDLSystemPowerIoCompletion$30$label_3#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_3#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_4#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_4#1:
- inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_5#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_5#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_6#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_6#1:
- inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$30$label_7#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_7#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_8#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_8#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$30$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$30$label_9#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_9#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_10#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$154$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$154$Entry#1:
- inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$154$start#1;
-
- inline$IoGetCurrentIrpStackLocation$154$start#1:
- inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$154$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$154$label_3_true#1, inline$IoGetCurrentIrpStackLocation$154$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$154$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$154$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$154$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$154$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$154$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$154$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$154$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$154$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$154$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$154$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$154$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$154$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$154$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$154$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$154$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$154$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$154$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$154$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$154$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$154$Return#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_10$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_10$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon36_Then#1, inline$BDLSystemPowerIoCompletion$30$anon36_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon1#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon1#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_13#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_13#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_14#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_14#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_15#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_15#1:
- goto inline$BDLGetDebugLevel$792$Entry#1;
-
- inline$BDLGetDebugLevel$792$Entry#1:
- goto inline$BDLGetDebugLevel$792$start#1;
-
- inline$BDLGetDebugLevel$792$start#1:
- goto inline$BDLGetDebugLevel$792$label_3#1;
-
- inline$BDLGetDebugLevel$792$label_3#1:
- havoc inline$BDLGetDebugLevel$792$myNondetVar_0;
- inline$BDLGetDebugLevel$792$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$792$myNondetVar_0;
- goto inline$BDLGetDebugLevel$792$label_1#1;
-
- inline$BDLGetDebugLevel$792$label_1#1:
- goto inline$BDLGetDebugLevel$792$Return#1;
-
- inline$BDLGetDebugLevel$792$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$792$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_15$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_15$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon37_Then#1, inline$BDLSystemPowerIoCompletion$30$anon37_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon3#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon3#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_18#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_18#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_18_true#1, inline$BDLSystemPowerIoCompletion$30$label_18_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_18_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_18_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_22#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_22#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_23#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_23#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_24#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_24#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_25#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_25#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$4$;
- goto inline$BDLSystemPowerIoCompletion$30$label_19#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_19#1:
- goto inline$BDLGetDebugLevel$793$Entry#1;
-
- inline$BDLGetDebugLevel$793$Entry#1:
- goto inline$BDLGetDebugLevel$793$start#1;
-
- inline$BDLGetDebugLevel$793$start#1:
- goto inline$BDLGetDebugLevel$793$label_3#1;
-
- inline$BDLGetDebugLevel$793$label_3#1:
- havoc inline$BDLGetDebugLevel$793$myNondetVar_0;
- inline$BDLGetDebugLevel$793$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$793$myNondetVar_0;
- goto inline$BDLGetDebugLevel$793$label_1#1;
-
- inline$BDLGetDebugLevel$793$label_1#1:
- goto inline$BDLGetDebugLevel$793$Return#1;
-
- inline$BDLGetDebugLevel$793$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$793$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_19$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_19$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon38_Then#1, inline$BDLSystemPowerIoCompletion$30$anon38_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon5#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon5#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_28#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_28#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_28_true#1, inline$BDLSystemPowerIoCompletion$30$label_28_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_28_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_28_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_32#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_32#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_33#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_33#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_34#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_34#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_35#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_35#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$9$;
- goto inline$BDLSystemPowerIoCompletion$30$label_29#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_29#1:
- goto inline$BDLGetDebugLevel$794$Entry#1;
-
- inline$BDLGetDebugLevel$794$Entry#1:
- goto inline$BDLGetDebugLevel$794$start#1;
-
- inline$BDLGetDebugLevel$794$start#1:
- goto inline$BDLGetDebugLevel$794$label_3#1;
-
- inline$BDLGetDebugLevel$794$label_3#1:
- havoc inline$BDLGetDebugLevel$794$myNondetVar_0;
- inline$BDLGetDebugLevel$794$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$794$myNondetVar_0;
- goto inline$BDLGetDebugLevel$794$label_1#1;
-
- inline$BDLGetDebugLevel$794$label_1#1:
- goto inline$BDLGetDebugLevel$794$Return#1;
-
- inline$BDLGetDebugLevel$794$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$794$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_29$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_29$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon39_Then#1, inline$BDLSystemPowerIoCompletion$30$anon39_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon7#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon7#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_38#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_38#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_38_true#1, inline$BDLSystemPowerIoCompletion$30$label_38_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_38_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_38_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_40#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_40#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_39#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_39#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_39_true#1, inline$BDLSystemPowerIoCompletion$30$label_39_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_39_false#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_41#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_7#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_7#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 7;
- goto inline$BDLSystemPowerIoCompletion$30$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_6#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 6;
- goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_5#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 5;
- goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_4#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 4;
- goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_3#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 3;
- goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_2#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 2;
- goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_108#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_1#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 1;
- goto inline$BDLSystemPowerIoCompletion$30$label_107#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_107#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_41_case_0#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 1;
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 2;
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 3;
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 4;
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 5;
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 6;
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 7;
- goto inline$BDLSystemPowerIoCompletion$30$label_106#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_106#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_106_true#1, inline$BDLSystemPowerIoCompletion$30$label_106_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_106_false#1:
- assume 0 == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_142#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_142#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_143#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_143#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_144#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_144#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_106_true#1:
- assume 0 != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_109#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- call inline$BDLSystemPowerIoCompletion$30$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$30$myNondetVar_0, inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
- goto inline$BDLSystemPowerIoCompletion$30$anon50_Then#1, inline$BDLSystemPowerIoCompletion$30$anon50_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon50_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon29#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon29#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_112#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_112#1:
- inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$result.PoRequestPowerIrp$1410.31$27$;
- goto inline$BDLSystemPowerIoCompletion$30$label_113#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_113#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_113_true#1, inline$BDLSystemPowerIoCompletion$30$label_113_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_113_false#1:
- assume !INT_EQ(inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$30$label_114#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_114#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_116#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_116#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_117#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_117#1:
- goto inline$BDLGetDebugLevel$801$Entry#1;
-
- inline$BDLGetDebugLevel$801$Entry#1:
- goto inline$BDLGetDebugLevel$801$start#1;
-
- inline$BDLGetDebugLevel$801$start#1:
- goto inline$BDLGetDebugLevel$801$label_3#1;
-
- inline$BDLGetDebugLevel$801$label_3#1:
- havoc inline$BDLGetDebugLevel$801$myNondetVar_0;
- inline$BDLGetDebugLevel$801$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$801$myNondetVar_0;
- goto inline$BDLGetDebugLevel$801$label_1#1;
-
- inline$BDLGetDebugLevel$801$label_1#1:
- goto inline$BDLGetDebugLevel$801$Return#1;
-
- inline$BDLGetDebugLevel$801$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$801$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_117$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_117$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon51_Then#1, inline$BDLSystemPowerIoCompletion$30$anon51_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon51_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon31#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon31#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_120#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_120#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_120_true#1, inline$BDLSystemPowerIoCompletion$30$label_120_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_120_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_120_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_124#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_124#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_125#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_125#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_126#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_126#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_127#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_127#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$29$;
- goto inline$BDLSystemPowerIoCompletion$30$label_121#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_121#1:
- goto inline$BDLGetDebugLevel$802$Entry#1;
-
- inline$BDLGetDebugLevel$802$Entry#1:
- goto inline$BDLGetDebugLevel$802$start#1;
-
- inline$BDLGetDebugLevel$802$start#1:
- goto inline$BDLGetDebugLevel$802$label_3#1;
-
- inline$BDLGetDebugLevel$802$label_3#1:
- havoc inline$BDLGetDebugLevel$802$myNondetVar_0;
- inline$BDLGetDebugLevel$802$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$802$myNondetVar_0;
- goto inline$BDLGetDebugLevel$802$label_1#1;
-
- inline$BDLGetDebugLevel$802$label_1#1:
- goto inline$BDLGetDebugLevel$802$Return#1;
-
- inline$BDLGetDebugLevel$802$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$802$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_121$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_121$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon52_Then#1, inline$BDLSystemPowerIoCompletion$30$anon52_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon52_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon33#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon33#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_130#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_130#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_130_true#1, inline$BDLSystemPowerIoCompletion$30$label_130_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_130_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_130_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_134#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_134#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_135#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_135#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_136#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_136#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_137#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_137#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$34$;
- goto inline$BDLSystemPowerIoCompletion$30$label_131#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_131#1:
- goto inline$BDLGetDebugLevel$803$Entry#1;
-
- inline$BDLGetDebugLevel$803$Entry#1:
- goto inline$BDLGetDebugLevel$803$start#1;
-
- inline$BDLGetDebugLevel$803$start#1:
- goto inline$BDLGetDebugLevel$803$label_3#1;
-
- inline$BDLGetDebugLevel$803$label_3#1:
- havoc inline$BDLGetDebugLevel$803$myNondetVar_0;
- inline$BDLGetDebugLevel$803$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$803$myNondetVar_0;
- goto inline$BDLGetDebugLevel$803$label_1#1;
-
- inline$BDLGetDebugLevel$803$label_1#1:
- goto inline$BDLGetDebugLevel$803$Return#1;
-
- inline$BDLGetDebugLevel$803$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$803$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_131$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_131$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon53_Then#1, inline$BDLSystemPowerIoCompletion$30$anon53_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon53_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon35#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon35#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_140#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_140#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_140_true#1, inline$BDLSystemPowerIoCompletion$30$label_140_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_140_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_140_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_141#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_141#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon53_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon52_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon51_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_113_true#1:
- assume INT_EQ(inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
- goto inline$BDLSystemPowerIoCompletion$30$label_115#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_115#1:
- inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
- goto inline$BDLSystemPowerIoCompletion$30$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon50_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_39_true#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_42#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_42#1:
- havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
- goto inline$BDLSystemPowerIoCompletion$30$label_43#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_43#1:
- goto inline$BDLGetDebugLevel$795$Entry#1;
-
- inline$BDLGetDebugLevel$795$Entry#1:
- goto inline$BDLGetDebugLevel$795$start#1;
-
- inline$BDLGetDebugLevel$795$start#1:
- goto inline$BDLGetDebugLevel$795$label_3#1;
-
- inline$BDLGetDebugLevel$795$label_3#1:
- havoc inline$BDLGetDebugLevel$795$myNondetVar_0;
- inline$BDLGetDebugLevel$795$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$795$myNondetVar_0;
- goto inline$BDLGetDebugLevel$795$label_1#1;
-
- inline$BDLGetDebugLevel$795$label_1#1:
- goto inline$BDLGetDebugLevel$795$Return#1;
-
- inline$BDLGetDebugLevel$795$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$795$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_43$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_43$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon40_Then#1, inline$BDLSystemPowerIoCompletion$30$anon40_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon9#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon9#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_46#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_46#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_46_true#1, inline$BDLSystemPowerIoCompletion$30$label_46_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_46_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_46_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_50#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_50#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_51#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_51#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_52#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_52#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_53#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_53#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$15$;
- goto inline$BDLSystemPowerIoCompletion$30$label_47#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_47#1:
- goto inline$BDLGetDebugLevel$796$Entry#1;
-
- inline$BDLGetDebugLevel$796$Entry#1:
- goto inline$BDLGetDebugLevel$796$start#1;
-
- inline$BDLGetDebugLevel$796$start#1:
- goto inline$BDLGetDebugLevel$796$label_3#1;
-
- inline$BDLGetDebugLevel$796$label_3#1:
- havoc inline$BDLGetDebugLevel$796$myNondetVar_0;
- inline$BDLGetDebugLevel$796$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$796$myNondetVar_0;
- goto inline$BDLGetDebugLevel$796$label_1#1;
-
- inline$BDLGetDebugLevel$796$label_1#1:
- goto inline$BDLGetDebugLevel$796$Return#1;
-
- inline$BDLGetDebugLevel$796$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$796$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_47$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_47$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon41_Then#1, inline$BDLSystemPowerIoCompletion$30$anon41_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon11#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon11#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_56#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_56#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_56_true#1, inline$BDLSystemPowerIoCompletion$30$label_56_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_56_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_56_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_60#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_60#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_61#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_61#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_62#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_62#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_63#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_63#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$20$;
- goto inline$BDLSystemPowerIoCompletion$30$label_57#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_57#1:
- goto inline$BDLGetDebugLevel$797$Entry#1;
-
- inline$BDLGetDebugLevel$797$Entry#1:
- goto inline$BDLGetDebugLevel$797$start#1;
-
- inline$BDLGetDebugLevel$797$start#1:
- goto inline$BDLGetDebugLevel$797$label_3#1;
-
- inline$BDLGetDebugLevel$797$label_3#1:
- havoc inline$BDLGetDebugLevel$797$myNondetVar_0;
- inline$BDLGetDebugLevel$797$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$797$myNondetVar_0;
- goto inline$BDLGetDebugLevel$797$label_1#1;
-
- inline$BDLGetDebugLevel$797$label_1#1:
- goto inline$BDLGetDebugLevel$797$Return#1;
-
- inline$BDLGetDebugLevel$797$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$797$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_57$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_57$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon42_Then#1, inline$BDLSystemPowerIoCompletion$30$anon42_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon13#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon13#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_66#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_66#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_66_true#1, inline$BDLSystemPowerIoCompletion$30$label_66_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_66_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_66_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_70#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_70#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_67#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$30$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLSystemPowerIoCompletion$30$anon43_Then#1, inline$BDLSystemPowerIoCompletion$30$anon43_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon15#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon15#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_71#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_71#1:
- call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$30$anon44_Then#1, inline$BDLSystemPowerIoCompletion$30$anon44_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon17#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon17#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_74#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_74#1:
- goto inline$storm_IoCompleteRequest$63$Entry#1;
-
- inline$storm_IoCompleteRequest$63$Entry#1:
- inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$63$start#1;
-
- inline$storm_IoCompleteRequest$63$start#1:
- inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$63$label_3#1;
-
- inline$storm_IoCompleteRequest$63$label_3#1:
- call inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$63$label_6#1;
-
- inline$storm_IoCompleteRequest$63$label_6#1:
- goto inline$storm_IoCompleteRequest$63$label_6_true#1, inline$storm_IoCompleteRequest$63$label_6_false#1;
-
- inline$storm_IoCompleteRequest$63$label_6_false#1:
- assume inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$63$label_7#1;
-
- inline$storm_IoCompleteRequest$63$label_6_true#1:
- assume inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$63$label_8#1;
-
- inline$storm_IoCompleteRequest$63$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$63$anon3_Then#1, inline$storm_IoCompleteRequest$63$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$63$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$63$anon1#1;
-
- inline$storm_IoCompleteRequest$63$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$63$label_9#1;
-
- inline$storm_IoCompleteRequest$63$label_9#1:
- goto inline$storm_IoCompleteRequest$63$label_9_true#1, inline$storm_IoCompleteRequest$63$label_9_false#1;
-
- inline$storm_IoCompleteRequest$63$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$63$label_10#1;
-
- inline$storm_IoCompleteRequest$63$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$63$label_1#1;
-
- inline$storm_IoCompleteRequest$63$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$63$label_7#1;
-
- inline$storm_IoCompleteRequest$63$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$63$label_1#1;
-
- inline$storm_IoCompleteRequest$63$label_1#1:
- goto inline$storm_IoCompleteRequest$63$Return#1;
-
- inline$storm_IoCompleteRequest$63$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$63$Return#1;
-
- inline$storm_IoCompleteRequest$63$Return#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_74$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_74$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon45_Then#1, inline$BDLSystemPowerIoCompletion$30$anon45_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon45_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon19#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon19#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_77#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_77#1:
- call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
- goto inline$BDLSystemPowerIoCompletion$30$anon46_Then#1, inline$BDLSystemPowerIoCompletion$30$anon46_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon46_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon21#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon21#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_80#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_80#1:
- goto inline$BDLGetDebugLevel$798$Entry#1;
-
- inline$BDLGetDebugLevel$798$Entry#1:
- goto inline$BDLGetDebugLevel$798$start#1;
-
- inline$BDLGetDebugLevel$798$start#1:
- goto inline$BDLGetDebugLevel$798$label_3#1;
-
- inline$BDLGetDebugLevel$798$label_3#1:
- havoc inline$BDLGetDebugLevel$798$myNondetVar_0;
- inline$BDLGetDebugLevel$798$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$798$myNondetVar_0;
- goto inline$BDLGetDebugLevel$798$label_1#1;
-
- inline$BDLGetDebugLevel$798$label_1#1:
- goto inline$BDLGetDebugLevel$798$Return#1;
-
- inline$BDLGetDebugLevel$798$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$798$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_80$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_80$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon47_Then#1, inline$BDLSystemPowerIoCompletion$30$anon47_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon47_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon23#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon23#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_83#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_83#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_83_true#1, inline$BDLSystemPowerIoCompletion$30$label_83_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_83_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_83_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_87#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_87#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_88#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_88#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_89#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_89#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_90#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_90#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$40$;
- goto inline$BDLSystemPowerIoCompletion$30$label_84#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_84#1:
- goto inline$BDLGetDebugLevel$799$Entry#1;
-
- inline$BDLGetDebugLevel$799$Entry#1:
- goto inline$BDLGetDebugLevel$799$start#1;
-
- inline$BDLGetDebugLevel$799$start#1:
- goto inline$BDLGetDebugLevel$799$label_3#1;
-
- inline$BDLGetDebugLevel$799$label_3#1:
- havoc inline$BDLGetDebugLevel$799$myNondetVar_0;
- inline$BDLGetDebugLevel$799$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$799$myNondetVar_0;
- goto inline$BDLGetDebugLevel$799$label_1#1;
-
- inline$BDLGetDebugLevel$799$label_1#1:
- goto inline$BDLGetDebugLevel$799$Return#1;
-
- inline$BDLGetDebugLevel$799$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$799$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_84$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_84$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon48_Then#1, inline$BDLSystemPowerIoCompletion$30$anon48_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon48_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon25#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon25#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_93#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_93#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_93_true#1, inline$BDLSystemPowerIoCompletion$30$label_93_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_93_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_93_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_97#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_97#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_98#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_98#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_99#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_99#1:
- call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLSystemPowerIoCompletion$30$label_100#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_100#1:
- havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$45$;
- goto inline$BDLSystemPowerIoCompletion$30$label_94#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_94#1:
- goto inline$BDLGetDebugLevel$800$Entry#1;
-
- inline$BDLGetDebugLevel$800$Entry#1:
- goto inline$BDLGetDebugLevel$800$start#1;
-
- inline$BDLGetDebugLevel$800$start#1:
- goto inline$BDLGetDebugLevel$800$label_3#1;
-
- inline$BDLGetDebugLevel$800$label_3#1:
- havoc inline$BDLGetDebugLevel$800$myNondetVar_0;
- inline$BDLGetDebugLevel$800$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$800$myNondetVar_0;
- goto inline$BDLGetDebugLevel$800$label_1#1;
-
- inline$BDLGetDebugLevel$800$label_1#1:
- goto inline$BDLGetDebugLevel$800$Return#1;
-
- inline$BDLGetDebugLevel$800$Return#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$800$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLSystemPowerIoCompletion$30$label_94$1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_94$1#1:
- goto inline$BDLSystemPowerIoCompletion$30$anon49_Then#1, inline$BDLSystemPowerIoCompletion$30$anon49_Else#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon49_Else#1:
- assume !raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$anon27#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon27#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_103#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_103#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_103_true#1, inline$BDLSystemPowerIoCompletion$30$label_103_false#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_103_false#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_103_true#1:
- assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
- goto inline$BDLSystemPowerIoCompletion$30$label_105#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_105#1:
- goto inline$BDLSystemPowerIoCompletion$30$label_104#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_104#1:
- inline$BDLSystemPowerIoCompletion$30$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
- goto inline$BDLSystemPowerIoCompletion$30$label_1#1;
-
- inline$BDLSystemPowerIoCompletion$30$label_1#1:
- call __HAVOC_free(inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon49_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon48_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon47_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon46_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon45_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon44_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon43_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon42_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon41_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon40_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon39_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon38_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon37_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$anon36_Then#1:
- assume raiseException;
- goto inline$BDLSystemPowerIoCompletion$30$Return#1;
-
- inline$BDLSystemPowerIoCompletion$30$Return#1:
- inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$30$$result.BDLSystemPowerIoCompletion$1331.0$1$;
- goto inline$CallCompletionRoutine$30$label_20_icall_3$1#1;
-
- inline$CallCompletionRoutine$30$label_20_icall_3$1#1:
- goto inline$CallCompletionRoutine$30$anon14_Then#1, inline$CallCompletionRoutine$30$anon14_Else#1;
-
- inline$CallCompletionRoutine$30$anon14_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$30$anon9#1;
-
- inline$CallCompletionRoutine$30$anon9#1:
- goto inline$CallCompletionRoutine$30$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$30$anon14_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$30$Return#1;
-
- inline$CallCompletionRoutine$30$label_20_icall_2#1:
- assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
- havoc inline$CallCompletionRoutine$30$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$30$Entry#1;
-
- inline$BDLDevicePowerIoCompletion$30$Entry#1:
- inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
- inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLDevicePowerIoCompletion$30$start#1;
-
- inline$BDLDevicePowerIoCompletion$30$start#1:
- call inline$BDLDevicePowerIoCompletion$30$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
- call inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
- inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
- inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
- goto inline$BDLDevicePowerIoCompletion$30$label_3#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_3#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_4#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_4#1:
- inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_5#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_5#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_6#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_6#1:
- inline$BDLDevicePowerIoCompletion$30$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$30$label_7#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_7#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_8#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_8#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$30$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$30$label_9#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_9#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_10#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_10#1:
- goto inline$IoGetCurrentIrpStackLocation$153$Entry#1;
-
- inline$IoGetCurrentIrpStackLocation$153$Entry#1:
- inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$IoGetCurrentIrpStackLocation$153$start#1;
-
- inline$IoGetCurrentIrpStackLocation$153$start#1:
- inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
- goto inline$IoGetCurrentIrpStackLocation$153$label_3#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_3#1:
- goto inline$IoGetCurrentIrpStackLocation$153$label_3_true#1, inline$IoGetCurrentIrpStackLocation$153$label_3_false#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_3_false#1:
- inline$IoGetCurrentIrpStackLocation$153$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$153$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$153$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$153$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$153$label_4#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_4#1:
- call inline$IoGetCurrentIrpStackLocation$153$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$153$label_6#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_6#1:
- call inline$IoGetCurrentIrpStackLocation$153$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$IoGetCurrentIrpStackLocation$153$label_7#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_7#1:
- goto inline$IoGetCurrentIrpStackLocation$153$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_3_true#1:
- inline$IoGetCurrentIrpStackLocation$153$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- inline$IoGetCurrentIrpStackLocation$153$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
- call contextSwitch();
- assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$153$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$153$myVar_1, 1, 1));
- goto inline$IoGetCurrentIrpStackLocation$153$label_5#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_5#1:
- havoc inline$IoGetCurrentIrpStackLocation$153$myNondetVar_0;
- inline$IoGetCurrentIrpStackLocation$153$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$153$myNondetVar_0;
- goto inline$IoGetCurrentIrpStackLocation$153$label_1#1;
-
- inline$IoGetCurrentIrpStackLocation$153$label_1#1:
- goto inline$IoGetCurrentIrpStackLocation$153$Return#1;
-
- inline$IoGetCurrentIrpStackLocation$153$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$153$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_10$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_10$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon30_Then#1, inline$BDLDevicePowerIoCompletion$30$anon30_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon30_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon1#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon1#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_13#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_13#1:
- inline$BDLDevicePowerIoCompletion$30$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
- goto inline$BDLDevicePowerIoCompletion$30$label_14#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_14#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_15#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_15#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$30$label_16#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_16#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_17#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_17#1:
- goto inline$BDLGetDebugLevel$783$Entry#1;
-
- inline$BDLGetDebugLevel$783$Entry#1:
- goto inline$BDLGetDebugLevel$783$start#1;
-
- inline$BDLGetDebugLevel$783$start#1:
- goto inline$BDLGetDebugLevel$783$label_3#1;
-
- inline$BDLGetDebugLevel$783$label_3#1:
- havoc inline$BDLGetDebugLevel$783$myNondetVar_0;
- inline$BDLGetDebugLevel$783$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$783$myNondetVar_0;
- goto inline$BDLGetDebugLevel$783$label_1#1;
-
- inline$BDLGetDebugLevel$783$label_1#1:
- goto inline$BDLGetDebugLevel$783$Return#1;
-
- inline$BDLGetDebugLevel$783$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$783$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_17$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_17$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon31_Then#1, inline$BDLDevicePowerIoCompletion$30$anon31_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon31_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon3#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon3#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_20#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_20#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_20_true#1, inline$BDLDevicePowerIoCompletion$30$label_20_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_20_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_20_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_24#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_24#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_25#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_25#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_26#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_26#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_27#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_27#1:
- havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$4$;
- goto inline$BDLDevicePowerIoCompletion$30$label_21#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_21#1:
- goto inline$BDLGetDebugLevel$784$Entry#1;
-
- inline$BDLGetDebugLevel$784$Entry#1:
- goto inline$BDLGetDebugLevel$784$start#1;
-
- inline$BDLGetDebugLevel$784$start#1:
- goto inline$BDLGetDebugLevel$784$label_3#1;
-
- inline$BDLGetDebugLevel$784$label_3#1:
- havoc inline$BDLGetDebugLevel$784$myNondetVar_0;
- inline$BDLGetDebugLevel$784$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$784$myNondetVar_0;
- goto inline$BDLGetDebugLevel$784$label_1#1;
-
- inline$BDLGetDebugLevel$784$label_1#1:
- goto inline$BDLGetDebugLevel$784$Return#1;
-
- inline$BDLGetDebugLevel$784$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$784$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_21$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_21$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon32_Then#1, inline$BDLDevicePowerIoCompletion$30$anon32_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon32_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon5#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon5#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_30#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_30#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_30_true#1, inline$BDLDevicePowerIoCompletion$30$label_30_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_30_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_30_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_34#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_34#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_35#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_35#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_36#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_36#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_37#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_37#1:
- havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$9$;
- goto inline$BDLDevicePowerIoCompletion$30$label_31#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_31#1:
- goto inline$BDLGetDebugLevel$785$Entry#1;
-
- inline$BDLGetDebugLevel$785$Entry#1:
- goto inline$BDLGetDebugLevel$785$start#1;
-
- inline$BDLGetDebugLevel$785$start#1:
- goto inline$BDLGetDebugLevel$785$label_3#1;
-
- inline$BDLGetDebugLevel$785$label_3#1:
- havoc inline$BDLGetDebugLevel$785$myNondetVar_0;
- inline$BDLGetDebugLevel$785$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$785$myNondetVar_0;
- goto inline$BDLGetDebugLevel$785$label_1#1;
-
- inline$BDLGetDebugLevel$785$label_1#1:
- goto inline$BDLGetDebugLevel$785$Return#1;
-
- inline$BDLGetDebugLevel$785$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$785$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_31$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_31$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon33_Then#1, inline$BDLDevicePowerIoCompletion$30$anon33_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon33_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon7#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon7#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_40#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_40#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_40_true#1, inline$BDLDevicePowerIoCompletion$30$label_40_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_40_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_40_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_42#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_42#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_41#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_41#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_41_true#1, inline$BDLDevicePowerIoCompletion$30$label_41_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_41_false#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$30$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_41_true#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 2);
- goto inline$BDLDevicePowerIoCompletion$30$label_44#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_44#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_44_true#1, inline$BDLDevicePowerIoCompletion$30$label_44_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_44_false#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$30$label_45#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_45#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_45_true#1, inline$BDLDevicePowerIoCompletion$30$label_45_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_45_false#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- assume !INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$30$label_43#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_43#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- goto inline$BDLDevicePowerIoCompletion$30$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_45_true#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 5);
- goto inline$BDLDevicePowerIoCompletion$30$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_44_true#1:
- havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
- assume INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 1);
- goto inline$BDLDevicePowerIoCompletion$30$label_46#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_46#1:
- havoc inline$BDLDevicePowerIoCompletion$30$$result.memset$1683.8$14$;
- goto inline$BDLDevicePowerIoCompletion$30$label_49#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_49#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_50#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_50#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_51#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_51#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_54#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_54#1:
- inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$callresult.$1687.68$15$;
- goto inline$BDLDevicePowerIoCompletion$30$label_55#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_55#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_55_true#1, inline$BDLDevicePowerIoCompletion$30$label_55_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_55_false#1:
- assume inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_56#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_56#1:
- call inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$30$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
- goto inline$BDLDevicePowerIoCompletion$30$anon34_Then#1, inline$BDLDevicePowerIoCompletion$30$anon34_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon34_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon9#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon9#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon34_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_55_true#1:
- assume inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_59#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_59#1:
- goto inline$BDLGetDebugLevel$786$Entry#1;
-
- inline$BDLGetDebugLevel$786$Entry#1:
- goto inline$BDLGetDebugLevel$786$start#1;
-
- inline$BDLGetDebugLevel$786$start#1:
- goto inline$BDLGetDebugLevel$786$label_3#1;
-
- inline$BDLGetDebugLevel$786$label_3#1:
- havoc inline$BDLGetDebugLevel$786$myNondetVar_0;
- inline$BDLGetDebugLevel$786$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$786$myNondetVar_0;
- goto inline$BDLGetDebugLevel$786$label_1#1;
-
- inline$BDLGetDebugLevel$786$label_1#1:
- goto inline$BDLGetDebugLevel$786$Return#1;
-
- inline$BDLGetDebugLevel$786$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$786$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_59$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_59$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon35_Then#1, inline$BDLDevicePowerIoCompletion$30$anon35_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon35_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon11#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon11#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_62#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_62#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_62_true#1, inline$BDLDevicePowerIoCompletion$30$label_62_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_62_false#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_62_true#1:
- assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_66#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_66#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_67#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_67#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_68#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_68#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_69#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_69#1:
- havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$18$;
- goto inline$BDLDevicePowerIoCompletion$30$label_63#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_63#1:
- goto inline$BDLGetDebugLevel$787$Entry#1;
-
- inline$BDLGetDebugLevel$787$Entry#1:
- goto inline$BDLGetDebugLevel$787$start#1;
-
- inline$BDLGetDebugLevel$787$start#1:
- goto inline$BDLGetDebugLevel$787$label_3#1;
-
- inline$BDLGetDebugLevel$787$label_3#1:
- havoc inline$BDLGetDebugLevel$787$myNondetVar_0;
- inline$BDLGetDebugLevel$787$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$787$myNondetVar_0;
- goto inline$BDLGetDebugLevel$787$label_1#1;
-
- inline$BDLGetDebugLevel$787$label_1#1:
- goto inline$BDLGetDebugLevel$787$Return#1;
-
- inline$BDLGetDebugLevel$787$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$787$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_63$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_63$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon36_Then#1, inline$BDLDevicePowerIoCompletion$30$anon36_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon36_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon13#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon13#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_72#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_72#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_72_true#1, inline$BDLDevicePowerIoCompletion$30$label_72_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_72_false#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_72_true#1:
- assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_76#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_76#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_77#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_77#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_78#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_78#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_79#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_79#1:
- havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$23$;
- goto inline$BDLDevicePowerIoCompletion$30$label_73#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_73#1:
- goto inline$BDLGetDebugLevel$788$Entry#1;
-
- inline$BDLGetDebugLevel$788$Entry#1:
- goto inline$BDLGetDebugLevel$788$start#1;
-
- inline$BDLGetDebugLevel$788$start#1:
- goto inline$BDLGetDebugLevel$788$label_3#1;
-
- inline$BDLGetDebugLevel$788$label_3#1:
- havoc inline$BDLGetDebugLevel$788$myNondetVar_0;
- inline$BDLGetDebugLevel$788$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$788$myNondetVar_0;
- goto inline$BDLGetDebugLevel$788$label_1#1;
-
- inline$BDLGetDebugLevel$788$label_1#1:
- goto inline$BDLGetDebugLevel$788$Return#1;
-
- inline$BDLGetDebugLevel$788$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$788$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_73$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_73$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon37_Then#1, inline$BDLDevicePowerIoCompletion$30$anon37_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon37_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon15#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon15#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_82#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_82#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_82_true#1, inline$BDLDevicePowerIoCompletion$30$label_82_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_82_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_82_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_84#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_84#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_83#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_83#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_85#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_85#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_86#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_86#1:
- call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$30$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
- goto inline$BDLDevicePowerIoCompletion$30$anon38_Then#1, inline$BDLDevicePowerIoCompletion$30$anon38_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon38_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon17#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon17#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_89#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_89#1:
- call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
- goto inline$BDLDevicePowerIoCompletion$30$anon39_Then#1, inline$BDLDevicePowerIoCompletion$30$anon39_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon39_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon19#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon19#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_92#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_92#1:
- goto inline$storm_IoCompleteRequest$62$Entry#1;
-
- inline$storm_IoCompleteRequest$62$Entry#1:
- inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
- goto inline$storm_IoCompleteRequest$62$start#1;
-
- inline$storm_IoCompleteRequest$62$start#1:
- inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
- goto inline$storm_IoCompleteRequest$62$label_3#1;
-
- inline$storm_IoCompleteRequest$62$label_3#1:
- call inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$ := storm_nondet();
- goto inline$storm_IoCompleteRequest$62$label_6#1;
-
- inline$storm_IoCompleteRequest$62$label_6#1:
- goto inline$storm_IoCompleteRequest$62$label_6_true#1, inline$storm_IoCompleteRequest$62$label_6_false#1;
-
- inline$storm_IoCompleteRequest$62$label_6_false#1:
- assume inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$ == 0;
- goto inline$storm_IoCompleteRequest$62$label_7#1;
-
- inline$storm_IoCompleteRequest$62$label_6_true#1:
- assume inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$ != 0;
- goto inline$storm_IoCompleteRequest$62$label_8#1;
-
- inline$storm_IoCompleteRequest$62$label_8#1:
- havoc raiseException;
- goto inline$storm_IoCompleteRequest$62$anon3_Then#1, inline$storm_IoCompleteRequest$62$anon3_Else#1;
-
- inline$storm_IoCompleteRequest$62$anon3_Else#1:
- assume !raiseException;
- goto inline$storm_IoCompleteRequest$62$anon1#1;
-
- inline$storm_IoCompleteRequest$62$anon1#1:
- assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$62$label_9#1;
-
- inline$storm_IoCompleteRequest$62$label_9#1:
- goto inline$storm_IoCompleteRequest$62$label_9_true#1, inline$storm_IoCompleteRequest$62$label_9_false#1;
-
- inline$storm_IoCompleteRequest$62$label_9_false#1:
- assume 0 == 0;
- goto inline$storm_IoCompleteRequest$62$label_10#1;
-
- inline$storm_IoCompleteRequest$62$label_10#1:
- errorReached := true;
- raiseException := true;
- __storm_atomic := false;
- __storm_init := false;
- goto inline$storm_IoCompleteRequest$62$label_1#1;
-
- inline$storm_IoCompleteRequest$62$label_9_true#1:
- assume 0 != 0;
- goto inline$storm_IoCompleteRequest$62$label_7#1;
-
- inline$storm_IoCompleteRequest$62$label_7#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
- call contextSwitch();
- goto inline$storm_IoCompleteRequest$62$label_1#1;
-
- inline$storm_IoCompleteRequest$62$label_1#1:
- goto inline$storm_IoCompleteRequest$62$Return#1;
-
- inline$storm_IoCompleteRequest$62$anon3_Then#1:
- assume raiseException;
- goto inline$storm_IoCompleteRequest$62$Return#1;
-
- inline$storm_IoCompleteRequest$62$Return#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_92$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_92$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon40_Then#1, inline$BDLDevicePowerIoCompletion$30$anon40_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon40_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon21#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon21#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_95#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_95#1:
- call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$30$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
- goto inline$BDLDevicePowerIoCompletion$30$anon41_Then#1, inline$BDLDevicePowerIoCompletion$30$anon41_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon41_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon23#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon23#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_98#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_98#1:
- goto inline$BDLGetDebugLevel$789$Entry#1;
-
- inline$BDLGetDebugLevel$789$Entry#1:
- goto inline$BDLGetDebugLevel$789$start#1;
-
- inline$BDLGetDebugLevel$789$start#1:
- goto inline$BDLGetDebugLevel$789$label_3#1;
-
- inline$BDLGetDebugLevel$789$label_3#1:
- havoc inline$BDLGetDebugLevel$789$myNondetVar_0;
- inline$BDLGetDebugLevel$789$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$789$myNondetVar_0;
- goto inline$BDLGetDebugLevel$789$label_1#1;
-
- inline$BDLGetDebugLevel$789$label_1#1:
- goto inline$BDLGetDebugLevel$789$Return#1;
-
- inline$BDLGetDebugLevel$789$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$789$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_98$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_98$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon42_Then#1, inline$BDLDevicePowerIoCompletion$30$anon42_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon42_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon25#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon25#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_101#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_101#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_101_true#1, inline$BDLDevicePowerIoCompletion$30$label_101_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_101_false#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_101_true#1:
- assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_105#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_105#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_106#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_106#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_107#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_107#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_108#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_108#1:
- havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$29$;
- goto inline$BDLDevicePowerIoCompletion$30$label_102#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_102#1:
- goto inline$BDLGetDebugLevel$790$Entry#1;
-
- inline$BDLGetDebugLevel$790$Entry#1:
- goto inline$BDLGetDebugLevel$790$start#1;
-
- inline$BDLGetDebugLevel$790$start#1:
- goto inline$BDLGetDebugLevel$790$label_3#1;
-
- inline$BDLGetDebugLevel$790$label_3#1:
- havoc inline$BDLGetDebugLevel$790$myNondetVar_0;
- inline$BDLGetDebugLevel$790$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$790$myNondetVar_0;
- goto inline$BDLGetDebugLevel$790$label_1#1;
-
- inline$BDLGetDebugLevel$790$label_1#1:
- goto inline$BDLGetDebugLevel$790$Return#1;
-
- inline$BDLGetDebugLevel$790$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$790$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_102$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_102$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon43_Then#1, inline$BDLDevicePowerIoCompletion$30$anon43_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon43_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon27#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon27#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_111#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_111#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_111_true#1, inline$BDLDevicePowerIoCompletion$30$label_111_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_111_false#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_111_true#1:
- assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_115#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_115#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_116#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_116#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_117#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_117#1:
- call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
- goto inline$BDLDevicePowerIoCompletion$30$label_118#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_118#1:
- havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$34$;
- goto inline$BDLDevicePowerIoCompletion$30$label_112#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_112#1:
- goto inline$BDLGetDebugLevel$791$Entry#1;
-
- inline$BDLGetDebugLevel$791$Entry#1:
- goto inline$BDLGetDebugLevel$791$start#1;
-
- inline$BDLGetDebugLevel$791$start#1:
- goto inline$BDLGetDebugLevel$791$label_3#1;
-
- inline$BDLGetDebugLevel$791$label_3#1:
- havoc inline$BDLGetDebugLevel$791$myNondetVar_0;
- inline$BDLGetDebugLevel$791$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$791$myNondetVar_0;
- goto inline$BDLGetDebugLevel$791$label_1#1;
-
- inline$BDLGetDebugLevel$791$label_1#1:
- goto inline$BDLGetDebugLevel$791$Return#1;
-
- inline$BDLGetDebugLevel$791$Return#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$791$$result.BDLGetDebugLevel$39.0$1$;
- goto inline$BDLDevicePowerIoCompletion$30$label_112$1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_112$1#1:
- goto inline$BDLDevicePowerIoCompletion$30$anon44_Then#1, inline$BDLDevicePowerIoCompletion$30$anon44_Else#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon44_Else#1:
- assume !raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$anon29#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon29#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_121#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_121#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_121_true#1, inline$BDLDevicePowerIoCompletion$30$label_121_false#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_121_false#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_121_true#1:
- assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
- goto inline$BDLDevicePowerIoCompletion$30$label_123#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_123#1:
- goto inline$BDLDevicePowerIoCompletion$30$label_122#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_122#1:
- inline$BDLDevicePowerIoCompletion$30$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
- goto inline$BDLDevicePowerIoCompletion$30$label_1#1;
-
- inline$BDLDevicePowerIoCompletion$30$label_1#1:
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$30$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
- call __HAVOC_free(inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$);
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon44_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon43_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon42_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon41_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon40_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon39_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon38_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon37_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon36_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon35_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon33_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon32_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon31_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$anon30_Then#1:
- assume raiseException;
- goto inline$BDLDevicePowerIoCompletion$30$Return#1;
-
- inline$BDLDevicePowerIoCompletion$30$Return#1:
- inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$30$$result.BDLDevicePowerIoCompletion$1651.0$1$;
- goto inline$CallCompletionRoutine$30$label_20_icall_2$1#1;
-
- inline$CallCompletionRoutine$30$label_20_icall_2$1#1:
- goto inline$CallCompletionRoutine$30$anon13_Then#1, inline$CallCompletionRoutine$30$anon13_Else#1;
-
- inline$CallCompletionRoutine$30$anon13_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$30$anon7#1;
-
- inline$CallCompletionRoutine$30$anon7#1:
- goto inline$CallCompletionRoutine$30$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$30$anon13_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$30$Return#1;
-
- inline$CallCompletionRoutine$30$label_20_icall_1#1:
- assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
- havoc inline$CallCompletionRoutine$30$myNondetVar_0;
- goto inline$BDLCallDriverCompletionRoutine$30$Entry#1;
-
- inline$BDLCallDriverCompletionRoutine$30$Entry#1:
- inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4;
- goto inline$BDLCallDriverCompletionRoutine$30$start#1;
-
- inline$BDLCallDriverCompletionRoutine$30$start#1:
- inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
- goto inline$BDLCallDriverCompletionRoutine$30$label_3#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_3#1:
- goto inline$BDLCallDriverCompletionRoutine$30$label_3_true#1, inline$BDLCallDriverCompletionRoutine$30$label_3_false#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_3_false#1:
- havoc inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0 == 0;
- goto inline$BDLCallDriverCompletionRoutine$30$label_4#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_4#1:
- goto inline$BDLCallDriverCompletionRoutine$30$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_3_true#1:
- havoc inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0;
- assume inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0 != 0;
- goto inline$BDLCallDriverCompletionRoutine$30$label_5#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_5#1:
- goto inline$BDLCallDriverCompletionRoutine$30$label_6#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_6#1:
- goto inline$storm_KeSetEvent$34$Entry#1;
-
- inline$storm_KeSetEvent$34$Entry#1:
- inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
- goto inline$storm_KeSetEvent$34$start#1;
-
- inline$storm_KeSetEvent$34$start#1:
- inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12_.1;
- goto inline$storm_KeSetEvent$34$label_3#1;
-
- inline$storm_KeSetEvent$34$label_3#1:
- Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12 := 1];
- call contextSwitch();
- goto inline$storm_KeSetEvent$34$label_1#1;
-
- inline$storm_KeSetEvent$34$label_1#1:
- goto inline$storm_KeSetEvent$34$Return#1;
-
- inline$storm_KeSetEvent$34$Return#1:
- goto inline$BDLCallDriverCompletionRoutine$30$label_6$1#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_6$1#1:
- goto inline$BDLCallDriverCompletionRoutine$30$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$30$anon2_Else#1;
-
- inline$BDLCallDriverCompletionRoutine$30$anon2_Else#1:
- assume !raiseException;
- goto inline$BDLCallDriverCompletionRoutine$30$anon1#1;
-
- inline$BDLCallDriverCompletionRoutine$30$anon1#1:
- goto inline$BDLCallDriverCompletionRoutine$30$label_9#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_9#1:
- inline$BDLCallDriverCompletionRoutine$30$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
- goto inline$BDLCallDriverCompletionRoutine$30$label_1#1;
-
- inline$BDLCallDriverCompletionRoutine$30$label_1#1:
- goto inline$BDLCallDriverCompletionRoutine$30$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$30$anon2_Then#1:
- assume raiseException;
- goto inline$BDLCallDriverCompletionRoutine$30$Return#1;
-
- inline$BDLCallDriverCompletionRoutine$30$Return#1:
- inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$30$$result.BDLCallDriverCompletionRoutine$46.0$1$;
- goto inline$CallCompletionRoutine$30$label_20_icall_1$1#1;
-
- inline$CallCompletionRoutine$30$label_20_icall_1$1#1:
- goto inline$CallCompletionRoutine$30$anon12_Then#1, inline$CallCompletionRoutine$30$anon12_Else#1;
-
- inline$CallCompletionRoutine$30$anon12_Else#1:
- assume !raiseException;
- goto inline$CallCompletionRoutine$30$anon5#1;
-
- inline$CallCompletionRoutine$30$anon5#1:
- goto inline$CallCompletionRoutine$30$label_20_icall_return#1;
-
- inline$CallCompletionRoutine$30$label_20_icall_return#1:
- goto inline$CallCompletionRoutine$30$label_23#1;
-
- inline$CallCompletionRoutine$30$label_23#1:
- inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$;
- goto inline$CallCompletionRoutine$30$label_24#1;
-
- inline$CallCompletionRoutine$30$label_24#1:
- goto inline$CallCompletionRoutine$30$label_24_true#1, inline$CallCompletionRoutine$30$label_24_false#1;
-
- inline$CallCompletionRoutine$30$label_24_false#1:
- assume !INT_NEQ(inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$30$label_1#1;
-
- inline$CallCompletionRoutine$30$label_24_true#1:
- assume INT_NEQ(inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
- goto inline$CallCompletionRoutine$30$label_25#1;
-
- inline$CallCompletionRoutine$30$label_25#1:
- Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
- call contextSwitch();
- goto inline$CallCompletionRoutine$30$label_1#1;
-
- inline$CallCompletionRoutine$30$label_1#1:
- goto inline$CallCompletionRoutine$30$Return#1;
-
- inline$CallCompletionRoutine$30$anon12_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$30$Return#1;
-
- inline$CallCompletionRoutine$30$anon11_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$30$Return#1;
-
- inline$CallCompletionRoutine$30$anon10_Then#1:
- assume raiseException;
- goto inline$CallCompletionRoutine$30$Return#1;
-
- inline$CallCompletionRoutine$30$Return#1:
- goto inline$storm_thread_completion$0$label_4$1#1;
-
- inline$storm_thread_completion$0$label_4$1#1:
- call contextSwitch();
- goto inline$storm_thread_completion$0$anon5_Then#1, inline$storm_thread_completion$0$anon5_Else#1;
-
- inline$storm_thread_completion$0$anon5_Else#1:
- assume !raiseException;
- goto inline$storm_thread_completion$0$anon3#1;
-
- inline$storm_thread_completion$0$anon3#1:
- goto inline$storm_thread_completion$0$label_1#1;
-
- inline$storm_thread_completion$0$label_1#1:
- __storm_thread_done_2 := true;
- goto inline$storm_thread_completion$0$Return#1;
-
- inline$storm_thread_completion$0$anon5_Then#1:
- assume raiseException;
- goto inline$storm_thread_completion$0$Return#1;
-
- inline$storm_thread_completion$0$anon4_Then#1:
- assume raiseException;
- goto inline$storm_thread_completion$0$Return#1;
-
- inline$storm_thread_completion$0$Return#1:
- goto label_38$1#1;
-
- label_38$1#1:
- goto label_1#1;
-
- label_1#1:
- assert !errorReached;
- return;
-
- anon14_Then#1:
- assume raiseException;
- return;
-
- anon13_Then#1:
- assume raiseException;
- return;
-
- anon12_Then#1:
- assume raiseException;
- return;
-
- anon11_Then#1:
- assume raiseException;
- return;
-
- anon10_Then#1:
- assume raiseException;
- return;
-}
-
-
-
+// RUN: %boogie -noinfer -useArrayTheory "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var raiseException : bool;
+var errorReached : bool;
+var k : int;
+var __storm_atomic : bool;
+var __storm_init : bool;
+var __storm_thread_id : int;
+var __storm_thread_done_1 : bool;
+var __storm_thread_done_2 : bool;
+var __storm_thread_done_3 : bool;
+var __storm_thread_done_4 : bool;
+var __storm_thread_done_5 : bool;
+var __storm_thread_done_6 : bool;
+
+procedure /* dummy comment */ {:inline 1} storm_getThreadID() returns (tid:int)
+{
+ tid := __storm_thread_id;
+ return;
+}
+
+procedure storm_context_0();
+
+procedure contextSwitch();
+modifies k;
+ensures __storm_atomic ==> old(k) == k;
+ensures(old(k) <= k);
+ensures(k < 1);
+
+
+
+// Memory model
+
+// Mutable
+var alloc:int;
+
+// Immutable
+
+var Mem_0_T.CancelRoutine__IRP : [int]int;
+var Mem_0_T.CurrentLocation__IRP : [int]int;
+var Mem_0_T.DeviceExtension__DEVICE_OBJECT : [int]int;
+var Mem_0_T.StackCount__IRP : [int]int;
+
+
+// Field declarations
+
+
+// Type declarations
+
+
+// Field offset definitions
+
+function AllocatedResourcesTranslated___unnamed_8_634fb90c(int) returns (int);
+
+
+//axiom (forall x:int :: {AllocatedResourcesTranslated___unnamed_8_634fb90c(x)} AllocatedResourcesTranslated___unnamed_8_634fb90c(x) == x + 4);
+axiom (forall x:int :: {AllocatedResourcesTranslated___unnamed_8_634fb90c(x)} AllocatedResourcesTranslated___unnamed_8_634fb90c(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function AllocatedResources___unnamed_8_634fb90c(int) returns (int);
+
+
+//axiom (forall x:int :: {AllocatedResources___unnamed_8_634fb90c(x)} AllocatedResources___unnamed_8_634fb90c(x) == x + 0);
+axiom (forall x:int :: {AllocatedResources___unnamed_8_634fb90c(x)} AllocatedResources___unnamed_8_634fb90c(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1364);
+axiom (forall x:int :: {BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1364));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function BDDBuildNumber__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {BDDBuildNumber__BDSI_INITIALIZERESOURCES(x)} BDDBuildNumber__BDSI_INITIALIZERESOURCES(x) == x + 544);
+axiom (forall x:int :: {BDDBuildNumber__BDSI_INITIALIZERESOURCES(x)} BDDBuildNumber__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 544));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1356);
+axiom (forall x:int :: {BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1356));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function BDDVersionMajor__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {BDDVersionMajor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMajor__BDSI_INITIALIZERESOURCES(x) == x + 536);
+axiom (forall x:int :: {BDDVersionMajor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMajor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 536));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1360);
+axiom (forall x:int :: {BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} BDDVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1360));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function BDDVersionMinor__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {BDDVersionMinor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMinor__BDSI_INITIALIZERESOURCES(x) == x + 540);
+axiom (forall x:int :: {BDDVersionMinor__BDSI_INITIALIZERESOURCES(x)} BDDVersionMinor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 540));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x)} BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x)} BdlExtenstion__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Blink__LIST_ENTRY(int) returns (int);
+
+
+//axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == x + 4);
+axiom (forall x:int :: {Blink__LIST_ENTRY(x)} Blink__LIST_ENTRY(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Block__BDDI_ITEM_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Block__BDDI_ITEM_DATA(x)} Block__BDDI_ITEM_DATA(x) == x + 0);
+axiom (forall x:int :: {Block__BDDI_ITEM_DATA(x)} Block__BDDI_ITEM_DATA(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelIrql__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == x + 37);
+axiom (forall x:int :: {CancelIrql__IRP(x)} CancelIrql__IRP(x) == INT_ADD(x, 37));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CancelRoutine__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == x + 56);
+axiom (forall x:int :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == INT_ADD(x, 56));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Cancel__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == x + 36);
+axiom (forall x:int :: {Cancel__IRP(x)} Cancel__IRP(x) == INT_ADD(x, 36));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ChannelId__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
+
+
+//axiom (forall x:int :: {ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x)} ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 12);
+axiom (forall x:int :: {ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x)} ChannelId__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(int) returns (int);
+
+
+//axiom (forall x:int :: {ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x) == x + 4);
+axiom (forall x:int :: {ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ChannelId__BDL_CONTROL_CHANGE_REGISTRATION(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CompletionRoutine__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == x + 28);
+axiom (forall x:int :: {CompletionRoutine__IO_STACK_LOCATION(x)} CompletionRoutine__IO_STACK_LOCATION(x) == INT_ADD(x, 28));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ComponentId__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
+
+
+//axiom (forall x:int :: {ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x)} ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 8);
+axiom (forall x:int :: {ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x)} ComponentId__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(int) returns (int);
+
+
+//axiom (forall x:int :: {ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x) == x + 0);
+axiom (forall x:int :: {ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ComponentId__BDL_CONTROL_CHANGE_REGISTRATION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Context__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == x + 32);
+axiom (forall x:int :: {Context__IO_STACK_LOCATION(x)} Context__IO_STACK_LOCATION(x) == INT_ADD(x, 32));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
+
+
+//axiom (forall x:int :: {ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == x + 620);
+axiom (forall x:int :: {ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 620));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
+
+
+//axiom (forall x:int :: {ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x) == x + 636);
+axiom (forall x:int :: {ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x)} ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 636));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x)} ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 160);
+axiom (forall x:int :: {ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x)} ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 160));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControlId__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
+
+
+//axiom (forall x:int :: {ControlId__BDDI_PARAMS_REGISTERNOTIFY(x)} ControlId__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 16);
+axiom (forall x:int :: {ControlId__BDDI_PARAMS_REGISTERNOTIFY(x)} ControlId__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 16));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ControlId__BDL_CONTROL_CHANGE_REGISTRATION(int) returns (int);
+
+
+//axiom (forall x:int :: {ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x) == x + 8);
+axiom (forall x:int :: {ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x)} ControlId__BDL_CONTROL_CHANGE_REGISTRATION(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Control__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == x + 3);
+axiom (forall x:int :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == INT_ADD(x, 3));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentLocation__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == x + 35);
+axiom (forall x:int :: {CurrentLocation__IRP(x)} CurrentLocation__IRP(x) == INT_ADD(x, 35));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function CurrentStackLocation___unnamed_12_3a099e68(int) returns (int);
+
+
+//axiom (forall x:int :: {CurrentStackLocation___unnamed_12_3a099e68(x)} CurrentStackLocation___unnamed_12_3a099e68(x) == x + 8);
+axiom (forall x:int :: {CurrentStackLocation___unnamed_12_3a099e68(x)} CurrentStackLocation___unnamed_12_3a099e68(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Data__BDDI_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Data__BDDI_ITEM(x)} Data__BDDI_ITEM(x) == x + 4);
+axiom (forall x:int :: {Data__BDDI_ITEM(x)} Data__BDDI_ITEM(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 140);
+axiom (forall x:int :: {DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceCapabilities__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 140));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceExtension__DEVICE_OBJECT(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == x + 40);
+axiom (forall x:int :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == INT_ADD(x, 40));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceObject__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == x + 20);
+axiom (forall x:int :: {DeviceObject__IO_STACK_LOCATION(x)} DeviceObject__IO_STACK_LOCATION(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 136);
+axiom (forall x:int :: {DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceOpen__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 136));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 28);
+axiom (forall x:int :: {DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x)} DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 28));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function DeviceState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {DeviceState__POWER_STATE(x)} DeviceState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Flink__LIST_ENTRY(int) returns (int);
+
+
+//axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == x + 0);
+axiom (forall x:int :: {Flink__LIST_ENTRY(x)} Flink__LIST_ENTRY(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1352);
+axiom (forall x:int :: {HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWBuildNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1352));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HWBuildNumber__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {HWBuildNumber__BDSI_INITIALIZERESOURCES(x)} HWBuildNumber__BDSI_INITIALIZERESOURCES(x) == x + 532);
+axiom (forall x:int :: {HWBuildNumber__BDSI_INITIALIZERESOURCES(x)} HWBuildNumber__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 532));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1344);
+axiom (forall x:int :: {HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMajor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1344));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HWVersionMajor__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {HWVersionMajor__BDSI_INITIALIZERESOURCES(x)} HWVersionMajor__BDSI_INITIALIZERESOURCES(x) == x + 524);
+axiom (forall x:int :: {HWVersionMajor__BDSI_INITIALIZERESOURCES(x)} HWVersionMajor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 524));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 1348);
+axiom (forall x:int :: {HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x)} HWVersionMinor__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 1348));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HWVersionMinor__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {HWVersionMinor__BDSI_INITIALIZERESOURCES(x)} HWVersionMinor__BDSI_INITIALIZERESOURCES(x) == x + 528);
+axiom (forall x:int :: {HWVersionMinor__BDSI_INITIALIZERESOURCES(x)} HWVersionMinor__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 528));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 816);
+axiom (forall x:int :: {HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 816));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function HandleList__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 820);
+axiom (forall x:int :: {HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x)} HandleList__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 820));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Handle__BDDI_ITEM_DATA(int) returns (int);
+
+
+//axiom (forall x:int :: {Handle__BDDI_ITEM_DATA(x)} Handle__BDDI_ITEM_DATA(x) == x + 0);
+axiom (forall x:int :: {Handle__BDDI_ITEM_DATA(x)} Handle__BDDI_ITEM_DATA(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
+
+
+//axiom (forall x:int :: {IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == x + 624);
+axiom (forall x:int :: {IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 624));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
+
+
+//axiom (forall x:int :: {ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == x + 0);
+axiom (forall x:int :: {ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
+
+
+//axiom (forall x:int :: {ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == x + 36);
+axiom (forall x:int :: {ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x)} ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 36));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Information__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == x + 4);
+axiom (forall x:int :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IoCount__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x)} IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 44);
+axiom (forall x:int :: {IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x)} IoCount__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 44));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function IoStatus__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == x + 24);
+axiom (forall x:int :: {IoStatus__IRP(x)} IoStatus__IRP(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MajorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == x + 0);
+axiom (forall x:int :: {MajorFunction__IO_STACK_LOCATION(x)} MajorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function MinorFunction__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == x + 1);
+axiom (forall x:int :: {MinorFunction__IO_STACK_LOCATION(x)} MinorFunction__IO_STACK_LOCATION(x) == INT_ADD(x, 1));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function NumChannels__BDL_COMPONENT(int) returns (int);
+
+
+//axiom (forall x:int :: {NumChannels__BDL_COMPONENT(x)} NumChannels__BDL_COMPONENT(x) == x + 12);
+axiom (forall x:int :: {NumChannels__BDL_COMPONENT(x)} NumChannels__BDL_COMPONENT(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function NumComponents__BDL_DEVICE_CAPABILITIES(int) returns (int);
+
+
+//axiom (forall x:int :: {NumComponents__BDL_DEVICE_CAPABILITIES(x)} NumComponents__BDL_DEVICE_CAPABILITIES(x) == x + 8);
+axiom (forall x:int :: {NumComponents__BDL_DEVICE_CAPABILITIES(x)} NumComponents__BDL_DEVICE_CAPABILITIES(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function NumHandles_HANDLELIST_(int) returns (int);
+
+
+//axiom (forall x:int :: {NumHandles_HANDLELIST_(x)} NumHandles_HANDLELIST_(x) == x + 8);
+axiom (forall x:int :: {NumHandles_HANDLELIST_(x)} NumHandles_HANDLELIST_(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Overlay___unnamed_48_7c673e0a(int) returns (int);
+
+
+//axiom (forall x:int :: {Overlay___unnamed_48_7c673e0a(x)} Overlay___unnamed_48_7c673e0a(x) == x + 0);
+axiom (forall x:int :: {Overlay___unnamed_48_7c673e0a(x)} Overlay___unnamed_48_7c673e0a(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Parameters__IO_STACK_LOCATION(int) returns (int);
+
+
+//axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == x + 4);
+axiom (forall x:int :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PendingReturned__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == x + 33);
+axiom (forall x:int :: {PendingReturned__IRP(x)} PendingReturned__IRP(x) == INT_ADD(x, 33));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function PowerState__BDSI_SETPOWERSTATE(int) returns (int);
+
+
+//axiom (forall x:int :: {PowerState__BDSI_SETPOWERSTATE(x)} PowerState__BDSI_SETPOWERSTATE(x) == x + 4);
+axiom (forall x:int :: {PowerState__BDSI_SETPOWERSTATE(x)} PowerState__BDSI_SETPOWERSTATE(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Power___unnamed_16_357c4db4(int) returns (int);
+
+
+//axiom (forall x:int :: {Power___unnamed_16_357c4db4(x)} Power___unnamed_16_357c4db4(x) == x + 0);
+axiom (forall x:int :: {Power___unnamed_16_357c4db4(x)} Power___unnamed_16_357c4db4(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 48);
+axiom (forall x:int :: {RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 48));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Size__BDDI_PARAMS_CLOSEHANDLE(int) returns (int);
+
+
+//axiom (forall x:int :: {Size__BDDI_PARAMS_CLOSEHANDLE(x)} Size__BDDI_PARAMS_CLOSEHANDLE(x) == x + 0);
+axiom (forall x:int :: {Size__BDDI_PARAMS_CLOSEHANDLE(x)} Size__BDDI_PARAMS_CLOSEHANDLE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Size__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {Size__BDSI_INITIALIZERESOURCES(x)} Size__BDSI_INITIALIZERESOURCES(x) == x + 0);
+axiom (forall x:int :: {Size__BDSI_INITIALIZERESOURCES(x)} Size__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Size__BDSI_SETPOWERSTATE(int) returns (int);
+
+
+//axiom (forall x:int :: {Size__BDSI_SETPOWERSTATE(x)} Size__BDSI_SETPOWERSTATE(x) == x + 0);
+axiom (forall x:int :: {Size__BDSI_SETPOWERSTATE(x)} Size__BDSI_SETPOWERSTATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 24);
+axiom (forall x:int :: {SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x)} SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function StackCount__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {StackCount__IRP(x)} StackCount__IRP(x) == x + 34);
+axiom (forall x:int :: {StackCount__IRP(x)} StackCount__IRP(x) == INT_ADD(x, 34));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function StartDevice___unnamed_16_357c4db4(int) returns (int);
+
+
+//axiom (forall x:int :: {StartDevice___unnamed_16_357c4db4(x)} StartDevice___unnamed_16_357c4db4(x) == x + 0);
+axiom (forall x:int :: {StartDevice___unnamed_16_357c4db4(x)} StartDevice___unnamed_16_357c4db4(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function State___unnamed_16_72a8bca0(int) returns (int);
+
+
+//axiom (forall x:int :: {State___unnamed_16_72a8bca0(x)} State___unnamed_16_72a8bca0(x) == x + 8);
+axiom (forall x:int :: {State___unnamed_16_72a8bca0(x)} State___unnamed_16_72a8bca0(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Status___unnamed_4_46d45f1c(int) returns (int);
+
+
+//axiom (forall x:int :: {Status___unnamed_4_46d45f1c(x)} Status___unnamed_4_46d45f1c(x) == x + 0);
+axiom (forall x:int :: {Status___unnamed_4_46d45f1c(x)} Status___unnamed_4_46d45f1c(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x)} SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 16);
+axiom (forall x:int :: {SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x)} SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 16));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function SystemState__POWER_STATE(int) returns (int);
+
+
+//axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == x + 0);
+axiom (forall x:int :: {SystemState__POWER_STATE(x)} SystemState__POWER_STATE(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Tail__IRP(int) returns (int);
+
+
+//axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == x + 64);
+axiom (forall x:int :: {Tail__IRP(x)} Tail__IRP(x) == INT_ADD(x, 64));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function Type__BDDI_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {Type__BDDI_ITEM(x)} Type__BDDI_ITEM(x) == x + 0);
+axiom (forall x:int :: {Type__BDDI_ITEM(x)} Type__BDDI_ITEM(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_12_3a099e68___unnamed_40_3fd77f3c(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_12_3a099e68___unnamed_40_3fd77f3c(x)} __unnamed_12_3a099e68___unnamed_40_3fd77f3c(x) == x + 24);
+axiom (forall x:int :: {__unnamed_12_3a099e68___unnamed_40_3fd77f3c(x)} __unnamed_12_3a099e68___unnamed_40_3fd77f3c(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function __unnamed_4_46d45f1c__IO_STATUS_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {__unnamed_4_46d45f1c__IO_STATUS_BLOCK(x)} __unnamed_4_46d45f1c__IO_STATUS_BLOCK(x) == x + 0);
+axiom (forall x:int :: {__unnamed_4_46d45f1c__IO_STATUS_BLOCK(x)} __unnamed_4_46d45f1c__IO_STATUS_BLOCK(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function bddiFunctions__BDL_DRIVER_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {bddiFunctions__BDL_DRIVER_EXTENSION(x)} bddiFunctions__BDL_DRIVER_EXTENSION(x) == x + 0);
+axiom (forall x:int :: {bddiFunctions__BDL_DRIVER_EXTENSION(x)} bddiFunctions__BDL_DRIVER_EXTENSION(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function bdsiFunctions__BDL_DRIVER_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {bdsiFunctions__BDL_DRIVER_EXTENSION(x)} bdsiFunctions__BDL_DRIVER_EXTENSION(x) == x + 32);
+axiom (forall x:int :: {bdsiFunctions__BDL_DRIVER_EXTENSION(x)} bdsiFunctions__BDL_DRIVER_EXTENSION(x) == INT_ADD(x, 32));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x)} fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 813);
+axiom (forall x:int :: {fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x)} fDeviceRemoved__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 813));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function fRegister__BDDI_PARAMS_REGISTERNOTIFY(int) returns (int);
+
+
+//axiom (forall x:int :: {fRegister__BDDI_PARAMS_REGISTERNOTIFY(x)} fRegister__BDDI_PARAMS_REGISTERNOTIFY(x) == x + 4);
+axiom (forall x:int :: {fRegister__BDDI_PARAMS_REGISTERNOTIFY(x)} fRegister__BDDI_PARAMS_REGISTERNOTIFY(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x)} fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 812);
+axiom (forall x:int :: {fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x)} fStartSucceeded__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 812));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(int) returns (int);
+
+
+//axiom (forall x:int :: {fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x)} fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x) == x + 24);
+axiom (forall x:int :: {fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x)} fUsed__BDL_ISR_CONTROL_CHANGE_ITEM(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function hData__BDDI_PARAMS_CLOSEHANDLE(int) returns (int);
+
+
+//axiom (forall x:int :: {hData__BDDI_PARAMS_CLOSEHANDLE(x)} hData__BDDI_PARAMS_CLOSEHANDLE(x) == x + 4);
+axiom (forall x:int :: {hData__BDDI_PARAMS_CLOSEHANDLE(x)} hData__BDDI_PARAMS_CLOSEHANDLE(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function handle_LIST_NODE_(int) returns (int);
+
+
+//axiom (forall x:int :: {handle_LIST_NODE_(x)} handle_LIST_NODE_(x) == x + 4);
+axiom (forall x:int :: {handle_LIST_NODE_(x)} handle_LIST_NODE_(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x)} pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x) == x + 8);
+axiom (forall x:int :: {pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x)} pAllocatedResourcesTranslated__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pAllocatedResources__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {pAllocatedResources__BDSI_INITIALIZERESOURCES(x)} pAllocatedResources__BDSI_INITIALIZERESOURCES(x) == x + 4);
+axiom (forall x:int :: {pAllocatedResources__BDSI_INITIALIZERESOURCES(x)} pAllocatedResources__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pAttachedDeviceObject__BDL_DEVICEEXT(int) returns (int);
+
+
+//axiom (forall x:int :: {pAttachedDeviceObject__BDL_DEVICEEXT(x)} pAttachedDeviceObject__BDL_DEVICEEXT(x) == x + 4);
+axiom (forall x:int :: {pAttachedDeviceObject__BDL_DEVICEEXT(x)} pAttachedDeviceObject__BDL_DEVICEEXT(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pBDLExtension__POWER_IRP_CONTEXT(int) returns (int);
+
+
+//axiom (forall x:int :: {pBDLExtension__POWER_IRP_CONTEXT(x)} pBDLExtension__POWER_IRP_CONTEXT(x) == x + 0);
+axiom (forall x:int :: {pBDLExtension__POWER_IRP_CONTEXT(x)} pBDLExtension__POWER_IRP_CONTEXT(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pBuffer__BDDI_ITEM_DATA_BLOCK(int) returns (int);
+
+
+//axiom (forall x:int :: {pBuffer__BDDI_ITEM_DATA_BLOCK(x)} pBuffer__BDDI_ITEM_DATA_BLOCK(x) == x + 4);
+axiom (forall x:int :: {pBuffer__BDDI_ITEM_DATA_BLOCK(x)} pBuffer__BDDI_ITEM_DATA_BLOCK(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x)} pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 12);
+axiom (forall x:int :: {pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x)} pDriverExtension__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pHead_HANDLELIST_(int) returns (int);
+
+
+//axiom (forall x:int :: {pHead_HANDLELIST_(x)} pHead_HANDLELIST_(x) == x + 0);
+axiom (forall x:int :: {pHead_HANDLELIST_(x)} pHead_HANDLELIST_(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pIrp__BDL_CONTROL_CHANGE_STRUCT(int) returns (int);
+
+
+//axiom (forall x:int :: {pIrp__BDL_CONTROL_CHANGE_STRUCT(x)} pIrp__BDL_CONTROL_CHANGE_STRUCT(x) == x + 632);
+axiom (forall x:int :: {pIrp__BDL_CONTROL_CHANGE_STRUCT(x)} pIrp__BDL_CONTROL_CHANGE_STRUCT(x) == INT_ADD(x, 632));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pNext_LIST_NODE_(int) returns (int);
+
+
+//axiom (forall x:int :: {pNext_LIST_NODE_(x)} pNext_LIST_NODE_(x) == x + 0);
+axiom (forall x:int :: {pNext_LIST_NODE_(x)} pNext_LIST_NODE_(x) == INT_ADD(x, 0));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pTail_HANDLELIST_(int) returns (int);
+
+
+//axiom (forall x:int :: {pTail_HANDLELIST_(x)} pTail_HANDLELIST_(x) == x + 4);
+axiom (forall x:int :: {pTail_HANDLELIST_(x)} pTail_HANDLELIST_(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(int) returns (int);
+
+
+//axiom (forall x:int :: {pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x)} pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x) == x + 24);
+axiom (forall x:int :: {pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x)} pfbddiCloseHandle__BDLI_BDDIFUNCTIONS(x) == INT_ADD(x, 24));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(int) returns (int);
+
+
+//axiom (forall x:int :: {pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x)} pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x) == x + 4);
+axiom (forall x:int :: {pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x)} pfbddiRegisterNotify__BDLI_BDDIFUNCTIONS(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(int) returns (int);
+
+
+//axiom (forall x:int :: {pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x) == x + 12);
+axiom (forall x:int :: {pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiInitializeResources__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(int) returns (int);
+
+
+//axiom (forall x:int :: {pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x) == x + 16);
+axiom (forall x:int :: {pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x)} pfbdsiReleaseResources__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 16));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(int) returns (int);
+
+
+//axiom (forall x:int :: {pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x)} pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x) == x + 8);
+axiom (forall x:int :: {pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x)} pfbdsiRemoveDevice__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(int) returns (int);
+
+
+//axiom (forall x:int :: {pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x)} pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x) == x + 32);
+axiom (forall x:int :: {pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x)} pfbdsiSetPowerState__BDLI_BDSIFUNCTIONS(x) == INT_ADD(x, 32));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function rgChannels__BDL_COMPONENT(int) returns (int);
+
+
+//axiom (forall x:int :: {rgChannels__BDL_COMPONENT(x)} rgChannels__BDL_COMPONENT(x) == x + 16);
+axiom (forall x:int :: {rgChannels__BDL_COMPONENT(x)} rgChannels__BDL_COMPONENT(x) == INT_ADD(x, 16));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function rgComponents__BDL_DEVICE_CAPABILITIES(int) returns (int);
+
+
+//axiom (forall x:int :: {rgComponents__BDL_DEVICE_CAPABILITIES(x)} rgComponents__BDL_DEVICE_CAPABILITIES(x) == x + 12);
+axiom (forall x:int :: {rgComponents__BDL_DEVICE_CAPABILITIES(x)} rgComponents__BDL_DEVICE_CAPABILITIES(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function rgControls__BDL_CHANNEL(int) returns (int);
+
+
+//axiom (forall x:int :: {rgControls__BDL_CHANNEL(x)} rgControls__BDL_CHANNEL(x) == x + 8);
+axiom (forall x:int :: {rgControls__BDL_CHANNEL(x)} rgControls__BDL_CHANNEL(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function rgControls__BDL_COMPONENT(int) returns (int);
+
+
+//axiom (forall x:int :: {rgControls__BDL_COMPONENT(x)} rgControls__BDL_COMPONENT(x) == x + 8);
+axiom (forall x:int :: {rgControls__BDL_COMPONENT(x)} rgControls__BDL_COMPONENT(x) == INT_ADD(x, 8));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function rgControls__BDL_DEVICE_CAPABILITIES(int) returns (int);
+
+
+//axiom (forall x:int :: {rgControls__BDL_DEVICE_CAPABILITIES(x)} rgControls__BDL_DEVICE_CAPABILITIES(x) == x + 4);
+axiom (forall x:int :: {rgControls__BDL_DEVICE_CAPABILITIES(x)} rgControls__BDL_DEVICE_CAPABILITIES(x) == INT_ADD(x, 4));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function rgProducts__BDL_CHANNEL(int) returns (int);
+
+
+//axiom (forall x:int :: {rgProducts__BDL_CHANNEL(x)} rgProducts__BDL_CHANNEL(x) == x + 28);
+axiom (forall x:int :: {rgProducts__BDL_CHANNEL(x)} rgProducts__BDL_CHANNEL(x) == INT_ADD(x, 28));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function rgSourceLists__BDL_CHANNEL(int) returns (int);
+
+
+//axiom (forall x:int :: {rgSourceLists__BDL_CHANNEL(x)} rgSourceLists__BDL_CHANNEL(x) == x + 20);
+axiom (forall x:int :: {rgSourceLists__BDL_CHANNEL(x)} rgSourceLists__BDL_CHANNEL(x) == INT_ADD(x, 20));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(int) returns (int);
+
+
+//axiom (forall x:int :: {wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == x + 832);
+axiom (forall x:int :: {wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x)} wszSerialNumber__BDL_INTERNAL_DEVICE_EXTENSION(x) == INT_ADD(x, 832));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+function wszSerialNumber__BDSI_INITIALIZERESOURCES(int) returns (int);
+
+
+//axiom (forall x:int :: {wszSerialNumber__BDSI_INITIALIZERESOURCES(x)} wszSerialNumber__BDSI_INITIALIZERESOURCES(x) == x + 12);
+axiom (forall x:int :: {wszSerialNumber__BDSI_INITIALIZERESOURCES(x)} wszSerialNumber__BDSI_INITIALIZERESOURCES(x) == INT_ADD(x, 12));
+//adding this additional axiom since to show Array(x, 1, n)[f(x)], we need f(x) to be a PLUS
+
+
+///////////////////////////////////
+// will be replaced by:
+// "//" when using bv mode
+// "" when using int mode
+// main reason is to avoid using bv for constants
+// or avoid translating lines that are complex or unsound
+//////////////////////////////////
+
+////////////////////////////////////////////
+/////// functions for int type /////////////
+// Theorem prover does not see INT_ADD etc.
+////////////////////////////////////////////
+function {:inline true} INT_EQ(x:int, y:int) returns (bool) {x == y}
+function {:inline true} INT_NEQ(x:int, y:int) returns (bool) {x != y}
+
+function {:inline true} INT_ADD(x:int, y:int) returns (int) {x + y}
+function {:inline true} INT_SUB(x:int, y:int) returns (int) {x - y}
+function {:inline true} INT_MULT(x:int, y:int) returns (int) {x * y}
+function {:inline true} INT_DIV(x:int, y:int) returns (int) {x div y}
+function {:inline true} INT_LT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_ULT(x:int, y:int) returns (bool) {x < y}
+function {:inline true} INT_LEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_ULEQ(x:int, y:int) returns (bool) {x <= y}
+function {:inline true} INT_GT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_UGT(x:int, y:int) returns (bool) {x > y}
+function {:inline true} INT_GEQ(x:int, y:int) returns (bool) {x >= y}
+function {:inline true} INT_UGEQ(x:int, y:int) returns (bool) {x >= y}
+
+
+////////////////////////////////////////////
+/////// functions for bv32 type /////////////
+// Theorem prover does not see INT_ADD etc.
+// we are treating unsigned ops now
+////////////////////////////////////////////
+function {:inline true} BV32_EQ(x:bv32, y:bv32) returns (bool) {x == y}
+function {:inline true} BV32_NEQ(x:bv32, y:bv32) returns (bool) {x != y}
+
+function {:bvbuiltin "bvadd"} BV32_ADD(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvsub"} BV32_SUB(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvmul"} BV32_MULT(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvudiv"} BV32_DIV(x:bv32, y:bv32) returns (bv32);
+function {:bvbuiltin "bvult"} BV32_ULT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvslt"} BV32_LT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvule"} BV32_ULEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsle"} BV32_LEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvugt"} BV32_UGT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsgt"} BV32_GT(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvuge"} BV32_UGEQ(x:bv32, y:bv32) returns (bool);
+function {:bvbuiltin "bvsge"} BV32_GEQ(x:bv32, y:bv32) returns (bool);
+
+//what about bitwise ops {BIT_AND, BIT_OR, BIT_NOT, ..}
+//only enabled with bv theory
+// function {:bvbuiltin "bvand"} BIT_BAND(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvor"} BIT_BOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvxor"} BIT_BXOR(a:int, b:int) returns (x:int);
+// function {:bvbuiltin "bvnot"} BIT_BNOT(a:int) returns (x:int);
+
+//////////////////////////////////
+// Generic C Arithmetic operations
+/////////////////////////////////
+
+//Is this sound for bv32?
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+ axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+//size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+ INT_LEQ( INT_MULT(size, MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)), INT_SUB(a, b)) && INT_LT( INT_SUB(a, b), INT_MULT(size, (INT_ADD(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size), 1)))));
+
+//we just keep this axiom for size = 1
+axiom (forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)} MINUS_BOTH_PTR_OR_BOTH_INT(a,b,1) == INT_SUB(a,b));
+
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+//axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == INT_SUB(a, INT_MULT(a_size, b)));
+
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+//axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+axiom (forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == INT_ADD(a, INT_MULT(a_size, b)));
+
+function MULT(a:int, b:int) returns (int); // a*b
+//axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == INT_MULT(a, b));
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+// Not sure if these axioms hold for BV too, just commet them for BV
+
+
+
+//uninterpreted binary op
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+
+//////////////////////////////////////////
+//// Bitwise ops (uninterpreted, used with int)
+//////////////////////////////////////////
+
+
+ function BIT_BAND(a:int, b:int) returns (x:int);
+
+
+ function BIT_BOR(a:int, b:int) returns (x:int);
+ function BIT_BXOR(a:int, b:int) returns (x:int);
+ function BIT_BNOT(a:int) returns (int);
+
+
+
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function PTR_NOT(a:int) returns (int);
+axiom(forall a:int :: {PTR_NOT(a)} a == 0 ==> PTR_NOT(a) != 0);
+axiom(forall a:int :: {PTR_NOT(a)} a != 0 ==> PTR_NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+
+function NewAlloc(x:int, y:int) returns (z:int);
+
+//Comments below make HAVOC_malloc deterministic
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+//requires obj_size >= 0;
+free requires INT_GEQ(obj_size, 0);
+modifies alloc;
+ensures new == old(alloc);
+//ensures alloc > new + obj_size;
+ensures INT_GT(alloc, INT_ADD(new, obj_size));
+//ensures alloc == NewAlloc(old(alloc), obj_size);
+
+
+
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+
+/*
+//bv functions
+function bv8ToInt(bv8) returns (int);
+function bv16ToInt(bv16) returns (int);
+function bv32ToInt(bv32) returns (int);
+function bv64ToInt(bv64) returns (int);
+
+function intToBv8(int) returns (bv8);
+function intToBv16(int) returns (bv16);
+function intToBv32(int) returns (bv32);
+function intToBv64(int) returns (bv64);
+
+axiom(forall a:int :: {intToBv8(a)} bv8ToInt(intToBv8(a)) == a);
+axiom(forall a:int :: {intToBv16(a)} bv16ToInt(intToBv16(a)) == a);
+axiom(forall a:int :: {intToBv32(a)} bv32ToInt(intToBv32(a)) == a);
+axiom(forall a:int :: {intToBv64(a)} bv64ToInt(intToBv64(a)) == a);
+
+axiom(forall b:bv8 :: {bv8ToInt(b)} intToBv8(bv8ToInt(b)) == b);
+axiom(forall b:bv16 :: {bv16ToInt(b)} intToBv16(bv16ToInt(b)) == b);
+axiom(forall b:bv32 :: {bv32ToInt(b)} intToBv32(bv32ToInt(b)) == b);
+axiom(forall b:bv64 :: {bv64ToInt(b)} intToBv64(bv64ToInt(b)) == b);
+*/
+
+
+
+var Res_0_COMPLETED : [int]int;
+var Res_0_EVENT : [int]int;
+var Res_KERNEL_SOURCE:[int]int;
+var Res_0_LOCK : [int]int;
+var Res_PROBED:[int]int;
+
+//Pointer constants
+
+//Function pointer constants
+const unique BDLCallDriverCompletionRoutine : int;
+const unique BDLDevicePowerIoCompletion : int;
+const unique BDLSystemPowerIoCompletion : int;
+
+
+axiom(BDLCallDriverCompletionRoutine != 0);
+const unique BDLSystemPowerCompleted : int;
+axiom(BDLSystemPowerCompleted != 0);
+var cancelLockStatus_0 : int;
+
+var created_irp_0 : int;
+
+const unique g_DebugLevel : int;
+axiom(g_DebugLevel != 0);
+const unique hdevobj : int;
+axiom(hdevobj != 0);
+
+
+procedure DRIVER_CANCEL(a0:int, a1:int);
+
+
+
+procedure ExFreePoolWithTag(a0:int, a1:int);
+
+
+
+procedure FN_BDDI_CLOSEHANDLE(a0:int, a1:int) returns (ret:int);
+
+
+
+procedure FN_BDDI_REGISTERNOTIFY(a0:int, a1:int) returns (ret:int);
+
+
+
+procedure FN_BDSI_INITIALIZERESOURCES(a0:int, a1:int) returns (ret:int);
+
+
+
+procedure FN_BDSI_RELEASERESOURCES(a0:int) returns (ret:int);
+
+
+
+procedure FN_BDSI_REMOVEDEVICE(a0:int) returns (ret:int);
+
+
+
+procedure FN_BDSI_SETPOWERSTATE(a0:int, a1:int) returns (ret:int);
+
+
+
+procedure IO_COMPLETION_ROUTINE(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure IoAcquireRemoveLockEx(a0:int, a1:int, a2:int, a3:int, a4:int) returns (ret:int);
+
+
+
+procedure IoDeleteDevice(a0:int);
+
+
+
+procedure IoDetachDevice(a0:int);
+
+
+
+procedure IoReleaseRemoveLockAndWaitEx(a0:int, a1:int, a2:int);
+
+
+
+procedure IoReleaseRemoveLockEx(a0:int, a1:int, a2:int);
+
+
+
+procedure IoSetDeviceInterfaceState(a0:int, a1:int) returns (ret:int);
+
+
+
+procedure KfLowerIrql(a0:int);
+
+
+
+procedure KfRaiseIrql(a0:int) returns (ret:int);
+
+
+
+procedure PoRequestPowerIrp(a0:int, a1:int, a2:int, a3:int, a4:int, a5:int) returns (ret:int);
+
+
+
+procedure PoSetPowerState(a0:int, a1:int, a2:int) returns (ret:int);
+
+
+
+procedure PoStartNextPowerIrp(a0:int);
+
+
+
+procedure RtlFreeUnicodeString(a0:int);
+
+
+
+procedure __storm_assert_dummy();
+
+
+
+procedure __storm_atomic_begin_dummy();
+
+
+
+procedure __storm_atomic_end_dummy();
+
+
+
+procedure __storm_init_begin_dummy();
+
+
+
+procedure __storm_init_end_dummy();
+
+
+
+
+
+
+procedure storm_nondet() returns (ret:int);
+
+
+
+procedure storm_main();
+ free requires 0 < alloc;
+ requires INT_LT(PLUS(hdevobj, 1, 184), alloc);
+ modifies alloc, k, errorReached, raiseException, __storm_atomic, __storm_init, cancelLockStatus_0, created_irp_0, alloc, __storm_thread_id, __storm_thread_done_1, __storm_thread_done_2, __storm_thread_done_3, __storm_thread_done_4, Res_0_COMPLETED, Res_0_EVENT, Res_KERNEL_SOURCE, Res_0_LOCK, Res_PROBED, Mem_0_T.CancelRoutine__IRP, Mem_0_T.CurrentLocation__IRP, Mem_0_T.DeviceExtension__DEVICE_OBJECT, Mem_0_T.StackCount__IRP;
+
+
+
+implementation storm_main()
+{
+ var inline$BDLGetDebugLevel$398$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$407$myNondetVar_0: int, inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$: int, inline$BDLGetDebugLevel$681$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$55$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$2$: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$4$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$21$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$487$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$57$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$567$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$584$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$: int, inline$BDLGetDebugLevel$475$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$375$myNondetVar_0: int, inline$BDLGetDebugLevel$525$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$548$myNondetVar_0: int, inline$BDLGetDebugLevel$49$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$result.memset$1683.8$14$: int, inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$596$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$167$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$601$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$31$myVar_0: int, inline$IoGetCurrentIrpStackLocation$31$myVar_1: int, inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$529$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$6$havoc_stringTemp: int, inline$CallCompletionRoutine$28$myNondetVar_0: int, inline$BDLGetDebugLevel$239$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$result.BDLPnPStop$2180.0$1$: int, inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$storm_PoCallDriver$1$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLGetDebugLevel$8$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$71$myVar_0: int, inline$IoGetCurrentIrpStackLocation$71$myVar_1: int, inline$BDLCallDriverCompletionRoutine$22$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetNextIrpStackLocation$8$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$10$havoc_stringTemp: int, inline$RemoveHeadList$5$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLGetDebugLevel$394$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$84$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$520$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$702$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$792$myNondetVar_0: int, inline$BDLGetDebugLevel$733$myNondetVar_0: int, inline$BDLGetDebugLevel$317$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.memset$1683.8$14$: int, inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$10$myNondetVar_0: int, inline$BDLGetDebugLevel$508$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLSystemPowerIoCompletion$28$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$343$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$555$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$79$myVar_0: int, inline$IoGetCurrentIrpStackLocation$79$myVar_1: int, inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$: int, inline$IoGetCurrentIrpStackLocation$52$havoc_stringTemp: int, inline$BDLGetDebugLevel$27$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$341$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$CallCompletionRoutine$30$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$: int, inline$IoGetCurrentIrpStackLocation$53$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$34$: int, inline$BDLDevicePowerIoCompletion$1$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$113$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$4$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$737$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16_.1: int, inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$315$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$47$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$284$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$6$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$421$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$49$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$7$$result.memset$1683.8$14$: int, inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$41$myNondetVar_0: int, inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$125$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$44$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetNextIrpStackLocation$5$myNondetVar_0: int, inline$BDLGetDebugLevel$418$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$21$: int, inline$IoSetNextIrpStackLocation$9$havoc_stringTemp: int, inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$289$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$22$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$519$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp: int, inline$BDLGetDebugLevel$530$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$650$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$210$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$: int, inline$BDLGetDebugLevel$471$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$2$myVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$26$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$3$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$305$myNondetVar_0: int, inline$BDLGetDebugLevel$506$myNondetVar_0: int, inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$46$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetCurrentIrpStackLocation$147$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$636$myNondetVar_0: int, inline$BDLGetDebugLevel$493$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$111$myNondetVar_0: int, inline$BDLGetDebugLevel$388$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$483$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$43$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$BDLGetDebugLevel$778$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$3$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$42$myVar_0: int, inline$IoGetCurrentIrpStackLocation$42$myVar_1: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$299$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$309$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$24$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$22$myNondetVar_0: int, inline$BDLGetDebugLevel$319$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$18$: int, inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$352$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$0$tempBoogie0: int, inline$BDLGetDebugLevel$120$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12_.1: int, inline$BDLGetDebugLevel$100$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetNextIrpStackLocation$6$myVar_0: int, inline$IoGetCurrentIrpStackLocation$23$myVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$143$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$72$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$107$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoSetNextIrpStackLocation$14$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$28$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$35$myNondetVar_0: int, inline$BDLGetDebugLevel$624$myNondetVar_0: int, inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$: int, inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$360$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$56$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$38$myVar_1: int, inline$IoGetCurrentIrpStackLocation$38$myVar_0: int, inline$BDLGetDebugLevel$525$myNondetVar_0: int, inline$BDLGetDebugLevel$450$myNondetVar_0: int, inline$BDLGetDebugLevel$363$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$153$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$771$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$26$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$54$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPQueryStop$0$$result.BDLPnPQueryStop$2074.0$1$: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLGetDebugLevel$578$myNondetVar_0: int, inline$BDLGetDebugLevel$235$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$29$myNondetVar_0: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$: int, inline$BDLGetDebugLevel$382$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$581$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_getThreadID$3$tid: int, inline$BDLCallDriverCompletionRoutine$24$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoSetNextIrpStackLocation$12$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$: int, inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$670$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$50$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$96$myVar_1: int, inline$IoGetCurrentIrpStackLocation$96$myVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$23$: int, inline$BDLPnP$0$$result.BDLPnPQueryStop$916.32$29$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$799$myNondetVar_0: int, inline$BDLGetDebugLevel$610$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$: int, inline$IoGetCurrentIrpStackLocation$47$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$618$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$303$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$11$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IsListEmpty$2$$result.IsListEmpty$8096.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$: int, inline$BDLGetDebugLevel$60$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$640$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp: int, inline$RemoveHeadList$0$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$148$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$743$myNondetVar_0: int, inline$BDLGetDebugLevel$770$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$41$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$99$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$30$$result.memset$1683.8$14$: int, inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$: int, inline$BDLCallDriverCompletionRoutine$20$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$561$myNondetVar_0: int, inline$BDLGetDebugLevel$56$myNondetVar_0: int, inline$BDLGetDebugLevel$583$myNondetVar_0: int, inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$0$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$41$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$477$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$: int, inline$IoSetNextIrpStackLocation$13$myVar_0: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$681$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$34$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$421$myNondetVar_0: int, inline$BDLGetDebugLevel$59$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$47$myNondetVar_0: int, inline$BDLGetDebugLevel$530$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$690$myNondetVar_0: int, inline$BDLGetDebugLevel$426$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$: int, inline$BDLGetDebugLevel$165$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$112$myNondetVar_0: int, inline$BDLGetDebugLevel$458$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$261$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$20$: int, inline$IsListEmpty$5$myNondetVar_0: int, inline$BDLGetDebugLevel$324$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$17$: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$29$: int, inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12_.1: int, inline$BDLGetDebugLevel$309$myNondetVar_0: int, inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$: int, inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$126$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$395$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$580$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$25$myNondetVar_0: int, inline$BDLGetDebugLevel$527$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$766$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$88$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$94$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$473$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLHandleRemove$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$3$myVar_0: int, inline$IoGetCurrentIrpStackLocation$3$myVar_1: int, inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$10$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$437$myNondetVar_0: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLPnP$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$8$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$550$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$576$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$12$myVar_1: int, inline$IoGetCurrentIrpStackLocation$12$myVar_0: int, inline$BDLGetDebugLevel$633$myNondetVar_0: int, inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$144$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$63$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$80$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$649$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$14$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$27$: int, inline$BDLGetDebugLevel$729$myNondetVar_0: int, inline$BDLGetDebugLevel$274$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$144$myVar_0: int, inline$IoGetCurrentIrpStackLocation$144$myVar_1: int, inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLPnP$0$$result.DbgPrint$987.0$42$: int, inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$73$myVar_0: int, inline$IoGetCurrentIrpStackLocation$73$myVar_1: int, inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$57$myVar_0: int, inline$RemoveHeadList$0$$result.RemoveHeadList$8121.0$1$: int, inline$BDLGetDebugLevel$657$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.DbgPrint$2037.0$48$: int, inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$25$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$465$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$5$tempBoogie0: int, inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$401$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$644$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$: int, inline$IoGetCurrentIrpStackLocation$86$myVar_0: int, inline$IoGetCurrentIrpStackLocation$86$myVar_1: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$4$: int, inline$CallCompletionRoutine$9$myNondetVar_0: int, inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$803$myNondetVar_0: int, inline$BDLGetDebugLevel$137$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$280$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$326$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$77$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$108$havoc_stringTemp: int, inline$BDLGetDebugLevel$434$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$146$havoc_stringTemp: int, inline$BDLCallLowerLevelDriverAndWait$1$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$260$myNondetVar_0: int, inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3153.26$14$: int, inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$0$$result.storm_IoCallDriver$2453.25$39$: int, inline$BDLGetDebugLevel$567$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$241$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$148$myNondetVar_0: int, inline$myInitDriver$0$myVar_0: int, inline$BDLGetDebugLevel$794$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0: int, inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$3$: int, inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$630$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$8$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$250$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp: int, inline$storm_IoCallDriver$4$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$283$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$147$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$725$myNondetVar_0: int, inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLGetDebugLevel$161$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$586$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$177$$result.BDLGetDebugLevel$39.0$1$: int, inline$IsListEmpty$3$$result.IsListEmpty$8096.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$: int, inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$603$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$75$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$0$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$82$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$511$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$788$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$8$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$118$myVar_1: int, inline$IoGetCurrentIrpStackLocation$118$myVar_0: int, inline$BDLGetDebugLevel$633$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$9$: int, inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$7$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$IoGetCurrentIrpStackLocation$112$myVar_1: int, inline$IoGetCurrentIrpStackLocation$112$myVar_0: int, inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$19$myNondetVar_0: int, inline$BDLGetDebugLevel$617$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$80$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$114$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$326$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$416$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$83$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$33$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$23$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$: int, inline$BDLGetDebugLevel$612$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$289$myNondetVar_0: int, inline$BDLGetDebugLevel$572$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$501$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$31$havoc_stringTemp: int, inline$BDLGetDebugLevel$16$myNondetVar_0: int, inline$storm_IoCallDriver$2$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$151$myVar_0: int, inline$IoGetCurrentIrpStackLocation$151$myVar_1: int, inline$BDLDevicePowerIoCompletion$28$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$665$myNondetVar_0: int, inline$BDLGetDebugLevel$272$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$: int, inline$BDLGetDebugLevel$214$myNondetVar_0: int, inline$BDLGetDebugLevel$77$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$83$myNondetVar_0: int, inline$BDLGetDebugLevel$80$myNondetVar_0: int, inline$BDLGetDebugLevel$664$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$12$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4: int, inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$: int, inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$601$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$34$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$61$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$17$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$IoGetCurrentIrpStackLocation$65$myVar_0: int, inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8: int, inline$BDLGetDebugLevel$205$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$109$myVar_1: int, inline$IoGetCurrentIrpStackLocation$109$myVar_0: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$34$: int, inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$: int, inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$8$: int, inline$IoGetCurrentIrpStackLocation$28$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoGetCurrentIrpStackLocation$50$myVar_1: int, inline$IoGetCurrentIrpStackLocation$50$myVar_0: int, inline$BDLGetDebugLevel$133$myNondetVar_0: int, inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$51$myNondetVar_0: int, inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8: int, inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_PoCallDriver$4$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLGetDebugLevel$166$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$1$havoc_stringTemp: int, inline$BDLGetDebugLevel$310$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$145$myNondetVar_0: int, inline$BDLGetDebugLevel$128$myNondetVar_0: int, inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$349$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$21$: int, inline$BDLGetDebugLevel$72$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetNextIrpStackLocation$10$myVar_0: int, inline$BDLGetDebugLevel$160$myNondetVar_0: int, inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$513$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$75$havoc_stringTemp: int, inline$BDLGetDebugLevel$314$myNondetVar_0: int, inline$BDLGetDebugLevel$696$myNondetVar_0: int, inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$654$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$14$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$635$myNondetVar_0: int, inline$BDLGetDebugLevel$85$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$204$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$3$myNondetVar_0: int, inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$474$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1: int, inline$BDLDevicePowerIoCompletion$23$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$102$myVar_1: int, inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$628$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$: int, inline$BDLGetDebugLevel$590$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$478$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$123$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$153$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$142$havoc_stringTemp: int, inline$BDLGetDebugLevel$652$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$643$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$129$myNondetVar_0: int, inline$BDLGetDebugLevel$515$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$9$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$5$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$2$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$92$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$myVar_1: int, inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$2$: int, inline$IoGetCurrentIrpStackLocation$48$myVar_0: int, inline$IoGetCurrentIrpStackLocation$48$myVar_1: int, inline$BDLGetDebugLevel$316$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$20$: int, inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$70$havoc_stringTemp: int, inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$56$havoc_stringTemp: int, inline$BDLHandleRemove$0$$callresult.$2437.63$27$: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$29$: int, inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0: int, inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$17$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$0$myVar_1: int, inline$IoGetCurrentIrpStackLocation$0$myVar_0: int, inline$BDLGetDebugLevel$58$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$25$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$564$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$139$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4: int, inline$RemoveHeadList$3$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLGetDebugLevel$491$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$310$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$122$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0: int, inline$BDLGetDebugLevel$729$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$377$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12: int, inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$20$: int, inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCallDriver$0$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$11$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$41$: int, inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$: int, inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$169$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$: int, inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLPnPQueryRemove$0$havoc_stringTemp: int, inline$storm_getThreadID$8$tid: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$20$: int, inline$IoGetCurrentIrpStackLocation$34$havoc_stringTemp: int, inline$BDLGetDebugLevel$676$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$88$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$4$: int, inline$BDLDevicePowerIoCompletion$10$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetCurrentIrpStackLocation$62$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$35$havoc_stringTemp: int, inline$IoGetNextIrpStackLocation$2$myNondetVar_0: int, inline$BDLGetDebugLevel$659$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$740$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$0$myVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$9$myVar_0: int, inline$BDLGetDebugLevel$523$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$177$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$8$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$25$$callresult.$1687.68$15$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$23$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16: int, inline$IoGetCurrentIrpStackLocation$23$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$256$myNondetVar_0: int, inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$294$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$24$myNondetVar_0: int, inline$BDLGetDebugLevel$485$myNondetVar_0: int, inline$BDLGetDebugLevel$2$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$: int, inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$BDLGetDebugLevel$475$myNondetVar_0: int, inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$97$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$12$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$196$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$28$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$9$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$573$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$381$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoSetNextIrpStackLocation$1$havoc_stringTemp: int, inline$BDLGetDebugLevel$87$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$9$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$IoGetCurrentIrpStackLocation$14$myNondetVar_0: int, inline$BDLGetDebugLevel$173$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$283$myNondetVar_0: int, inline$BDLGetDebugLevel$298$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$647$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$myNondetVar_0: int, inline$BDLGetDebugLevel$194$myNondetVar_0: int, inline$BDLGetDebugLevel$610$myNondetVar_0: int, inline$BDLGetDebugLevel$772$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$178$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$622$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$: int, inline$IoGetCurrentIrpStackLocation$148$myVar_0: int, inline$IoGetCurrentIrpStackLocation$148$myVar_1: int, inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$536$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$30$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$: int, inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0: int, inline$BDLPnP$0$$result.BDLPnPStop$934.27$31$: int, inline$BDLGetDebugLevel$715$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp: int, inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12_.1: int, inline$IoGetCurrentIrpStackLocation$51$myVar_0: int, inline$IoGetCurrentIrpStackLocation$51$myVar_1: int, inline$BDLDevicePowerIoCompletion$2$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$149$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$30$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$549$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$779$myNondetVar_0: int, inline$BDLGetDebugLevel$168$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$311$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$419$myNondetVar_0: int, inline$BDLGetDebugLevel$651$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLCleanupDataHandles$1$$irql$6$3249.28$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetNextIrpStackLocation$11$myVar_0: int, inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$433$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$8$: int, inline$BDLGetDebugLevel$374$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$524$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$595$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$IoGetCurrentIrpStackLocation$58$myVar_0: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$799$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$232$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$IoGetCurrentIrpStackLocation$28$myVar_1: int, inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$409$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$114$myVar_1: int, inline$IoGetCurrentIrpStackLocation$114$myVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$: int, inline$IoGetCurrentIrpStackLocation$58$havoc_stringTemp: int, inline$BDLGetDebugLevel$21$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$660$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$23$: int, inline$IoSetNextIrpStackLocation$15$myVar_0: int, inline$BDLGetDebugLevel$683$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$17$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$23$: int, inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8: int, inline$IoSkipCurrentIrpStackLocation$0$myNondetVar_0: int, inline$BDLGetDebugLevel$64$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$8$: int, inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$storm_KeAcquireSpinLock$2$$result.storm_getThreadID$128.29$1$: int, inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$: int, inline$BDLDevicePowerIoCompletion$9$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$673$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$282$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$714$myNondetVar_0: int, inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLGetDebugLevel$299$myNondetVar_0: int, inline$BDLGetDebugLevel$380$myNondetVar_0: int, inline$BDLGetDebugLevel$774$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$97$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$: int, inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4: int, inline$BDLGetDebugLevel$322$myNondetVar_0: int, inline$BDLGetDebugLevel$202$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$3$: int, inline$BDLGetDebugLevel$197$myNondetVar_0: int, inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$22$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$607$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$: int, inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$: int, inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$531$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$118$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$: int, inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$9$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$213$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$36$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoSetNextIrpStackLocation$3$tempBoogie0: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLCallDriverCompletionRoutine$0$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$12$tempBoogie0: int, inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$: int, inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_IoCallDriver$9$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8: int, inline$IoGetCurrentIrpStackLocation$129$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$: int, inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoSetNextIrpStackLocation$10$tempBoogie0: int, inline$BDLGetDebugLevel$287$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$22$myNondetVar_0: int, inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$29$: int, inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$28$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$15$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$32$: int, inline$BDLGetDebugLevel$767$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$604$myNondetVar_0: int, inline$BDLGetDebugLevel$223$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$753$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$780$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$52$myVar_1: int, inline$IoGetCurrentIrpStackLocation$52$myVar_0: int, inline$IoGetCurrentIrpStackLocation$71$myNondetVar_0: int, inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$752$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$: int, inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$485$$result.BDLGetDebugLevel$39.0$1$: int, inline$RemoveHeadList$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$500$myNondetVar_0: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$: int, inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$775$myNondetVar_0: int, inline$BDLGetDebugLevel$266$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$4$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$16$: int, inline$BDLDevicePowerIoCompletion$15$$result.memset$1683.8$14$: int, inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$69$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLDevicePowerIoCompletion$1$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$652$myNondetVar_0: int, inline$BDLGetDebugLevel$110$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$20$: int, inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$2$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$: int, inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$76$havoc_stringTemp: int, inline$BDLGetDebugLevel$685$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$61$myVar_1: int, inline$IoGetCurrentIrpStackLocation$61$myVar_0: int, inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$599$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$308$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$775$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$11$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$15$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$417$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$96$havoc_stringTemp: int, inline$BDLGetDebugLevel$273$myNondetVar_0: int, inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$636$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$125$myNondetVar_0: int, inline$CallCompletionRoutine$21$myNondetVar_0: int, inline$BDLGetDebugLevel$28$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$155$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetNextIrpStackLocation$4$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$238$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$137$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$138$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$252$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$: int, inline$BDLGetDebugLevel$776$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$190$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$803$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$65$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$23$myVar_1: int, inline$BDLGetDebugLevel$712$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$24$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$446$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$133$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$712$myNondetVar_0: int, inline$BDLGetDebugLevel$717$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$18$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$128$havoc_stringTemp: int, inline$BDLGetDebugLevel$323$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$762$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$43$myVar_1: int, inline$IoGetCurrentIrpStackLocation$43$myVar_0: int, inline$BDLDevicePowerIoCompletion$12$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$BDLGetDebugLevel$428$myNondetVar_0: int, inline$BDLGetDebugLevel$447$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$337$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$737$myNondetVar_0: int, inline$BDLGetDebugLevel$208$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$743$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$320$myNondetVar_0: int, inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$7$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$451$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8: int, inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$229$myNondetVar_0: int, inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$23$: int, inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$100$myVar_0: int, inline$IoGetCurrentIrpStackLocation$100$myVar_1: int, inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLCallDriverCompletionRoutine$15$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8: int, inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$12$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$759$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$12$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$591$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$: int, inline$BDLGetDebugLevel$505$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0: int, inline$BDLGetDebugLevel$716$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$: int, inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$91$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$292$myNondetVar_0: int, inline$BDLGetDebugLevel$749$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$84$myNondetVar_0: int, inline$BDLGetDebugLevel$250$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$40$: int, inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$66$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$551$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$35$myNondetVar_0: int, inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$2$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$6$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$103$myVar_1: int, inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$662$myNondetVar_0: int, inline$BDLGetDebugLevel$726$myNondetVar_0: int, inline$BDLGetDebugLevel$403$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$668$myNondetVar_0: int, inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$9$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$756$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$256$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$: int, inline$IoGetCurrentIrpStackLocation$73$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$: int, inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$29$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$122$myVar_0: int, inline$IoGetCurrentIrpStackLocation$122$myVar_1: int, inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$: int, inline$IoGetCurrentIrpStackLocation$13$myVar_0: int, inline$IoGetCurrentIrpStackLocation$13$myVar_1: int, inline$BDLGetDebugLevel$123$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0: int, inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$36$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$230$myNondetVar_0: int, inline$BDLGetDebugLevel$415$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$117$havoc_stringTemp: int, inline$BDLGetDebugLevel$787$myNondetVar_0: int, inline$BDLGetDebugLevel$74$myNondetVar_0: int, inline$BDLGetDebugLevel$672$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$3$: int, inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1: int, inline$BDLGetDebugLevel$359$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$81$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IsListEmpty$1$$result.IsListEmpty$8096.0$1$: int, inline$BDLGetDebugLevel$502$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4: int, inline$IoGetCurrentIrpStackLocation$13$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$5$myVar_1: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$: int, inline$BDLGetDebugLevel$105$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$688$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$109$havoc_stringTemp: int, inline$BDLGetDebugLevel$516$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$380$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$535$myNondetVar_0: int, inline$BDLGetDebugLevel$403$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$135$myNondetVar_0: int, inline$BDLGetDebugLevel$620$myNondetVar_0: int, inline$BDLGetDebugLevel$247$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$189$myNondetVar_0: int, inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$: int, inline$BDLDevicePowerIoCompletion$8$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$148$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$32$: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$18$: int, inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$: int, inline$BDLGetDebugLevel$399$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoCopyCurrentIrpStackLocationToNext$3$$result.memcpy$25110.4$3$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$700$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$287$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$1$tempBoogie0: int, inline$BDLGetDebugLevel$109$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$193$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$115$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp: int, inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$: int, inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$22$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$4$myNondetVar_0: int, inline$BDLGetDebugLevel$664$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLGetDebugLevel$141$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$495$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$myVar_0: int, inline$BDLGetDebugLevel$18$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$2$$result.memcpy$25110.4$3$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$52$: int, inline$IoGetCurrentIrpStackLocation$14$myVar_1: int, inline$IoGetCurrentIrpStackLocation$14$myVar_0: int, inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$: int, inline$storm_IoCancelIrp$0$myVar_0: int, inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$26$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$94$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$579$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$499$myNondetVar_0: int, inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$631$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$60$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$279$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12: int, inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$139$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12_.1: int, inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$595$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$callresult.$3172.84$15$: int, inline$BDLGetDebugLevel$275$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$: int, inline$storm_IoCallDriver$11$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLPnPStop$0$$result.DbgPrint$2190.0$3$: int, inline$IoGetCurrentIrpStackLocation$10$myVar_1: int, inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$129$myVar_1: int, inline$IoGetCurrentIrpStackLocation$129$myVar_0: int, inline$IoGetCurrentIrpStackLocation$60$havoc_stringTemp: int, inline$BDLGetDebugLevel$227$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.BDLCallLowerLevelDriverAndWait$1975.43$13$: int, inline$IoGetCurrentIrpStackLocation$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$452$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16_.1: int, inline$BDLGetDebugLevel$224$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$347$myNondetVar_0: int, inline$BDLGetDebugLevel$150$myNondetVar_0: int, inline$BDLGetDebugLevel$510$myNondetVar_0: int, inline$BDLGetDebugLevel$369$myNondetVar_0: int, inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$21$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$125$myNondetVar_0: int, inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$74$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$233$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$201$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$547$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$7$myNondetVar_0: int, inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$: int, inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$12$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$20$: int, inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnP$0$$result.question.16$: int, inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$151$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$17$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$580$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$457$myNondetVar_0: int, inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$: int, inline$BDLDevicePowerIoCompletion$24$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$747$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$29$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$512$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$551$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$50$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$8$: int, inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$231$myNondetVar_0: int, inline$BDLGetDebugLevel$619$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$211$myNondetVar_0: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$: int, inline$IoGetCurrentIrpStackLocation$54$myVar_1: int, inline$IoGetCurrentIrpStackLocation$54$myVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$29$: int, inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$64$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$226$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$5$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$146$myNondetVar_0: int, inline$BDLGetDebugLevel$321$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$status$3$859.36$BDLPnP$8: int, inline$BDLGetDebugLevel$791$myNondetVar_0: int, inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetNextIrpStackLocation$9$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$1$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$596$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$51$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$111$myVar_0: int, inline$IoGetCurrentIrpStackLocation$111$myVar_1: int, inline$BDLDevicePowerIoCompletion$0$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoSetNextIrpStackLocation$11$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$52$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$237$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$17$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$107$myVar_1: int, inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$23$: int, inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$2$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLCallDriverCompletionRoutine$30$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$582$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$364$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$: int, inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$: int, inline$BDLGetDebugLevel$371$myNondetVar_0: int, inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$: int, inline$BDLPnP$0$$result.IoAcquireRemoveLockEx$879.0$14$: int, inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$CallCompletionRoutine$3$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$: int, inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4: int, inline$IoSetNextIrpStackLocation$15$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$23$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp: int, inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$27$: int, inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$: int, inline$BDLGetDebugLevel$723$myNondetVar_0: int, inline$BDLGetDebugLevel$414$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$88$myVar_0: int, inline$IoGetCurrentIrpStackLocation$88$myVar_1: int, inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$174$myNondetVar_0: int, inline$BDLGetDebugLevel$415$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$562$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$533$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$710$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$115$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$17$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$494$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$122$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$: int, inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16_.1: int, inline$BDLGetDebugLevel$436$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$98$myNondetVar_0: int, inline$BDLGetDebugLevel$634$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoSetNextIrpStackLocation$11$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$15$myVar_0: int, inline$IoGetCurrentIrpStackLocation$15$myVar_1: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLHandleRemove$0$myNondetVar_0: int, inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$91$havoc_stringTemp: int, inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$: int, inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$509$myNondetVar_0: int, inline$BDLGetDebugLevel$278$myNondetVar_0: int, inline$BDLGetDebugLevel$489$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$12$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$: int, inline$IoGetCurrentIrpStackLocation$146$myVar_1: int, inline$BDLDevicePowerIoCompletion$17$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$110$myNondetVar_0: int, inline$BDLGetDebugLevel$773$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$29$: int, inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$89$myVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$26$myNondetVar_0: int, inline$BDLLockHandleList$0$myNondetVar_0: int, inline$BDLLockHandleList$0$myNondetVar_1: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$140$myNondetVar_0: int, inline$BDLGetDebugLevel$609$myNondetVar_0: int, inline$BDLGetDebugLevel$728$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$97$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$351$myNondetVar_0: int, inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$9$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$15$: int, inline$BDLGetDebugLevel$18$myNondetVar_0: int, inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$574$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$435$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$126$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$RemoveHeadList$2$$Entry$3$8126.16$RemoveHeadList$4: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetNextIrpStackLocation$11$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$59$myNondetVar_0: int, inline$BDLGetDebugLevel$788$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$476$myNondetVar_0: int, inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$108$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$92$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$682$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$458$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$20$: int, inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$: int, inline$RemoveHeadList$5$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLGetDebugLevel$179$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetNextIrpStackLocation$5$havoc_stringTemp: int, inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$: int, inline$BDLGetDebugLevel$107$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$100$myNondetVar_0: int, inline$BDLGetDebugLevel$27$myNondetVar_0: int, inline$BDLGetDebugLevel$609$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$588$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$: int, inline$BDLGetDebugLevel$62$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$127$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCleanupNotificationStruct$0$$result.KfRaiseIrql$3141.8$12$: int, inline$BDLDevicePowerIoCompletion$18$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$44$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$29$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$: int, inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$260$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$45$: int, inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$: int, inline$IoGetCurrentIrpStackLocation$80$myNondetVar_0: int, inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$516$myNondetVar_0: int, inline$BDLGetDebugLevel$302$myNondetVar_0: int, inline$BDLGetDebugLevel$754$myNondetVar_0: int, inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$12$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$276$myNondetVar_0: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$: int, inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$: int, inline$BDLGetDebugLevel$105$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$29$: int, inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12: int, inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$355$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$190$myNondetVar_0: int, inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$312$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$697$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$3$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$29$: int, inline$BDLCleanupNotificationStruct$1$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$80$myVar_1: int, inline$BDLDevicePowerIoCompletion$25$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$4$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$142$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoSetNextIrpStackLocation$11$myVar_0: int, inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$425$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$604$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$510$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$141$myVar_1: int, inline$IoGetCurrentIrpStackLocation$141$myVar_0: int, inline$BDLGetDebugLevel$733$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$40$: int, inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$48$myNondetVar_0: int, inline$BDLGetDebugLevel$564$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$411$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$142$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$353$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$180$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$374$myNondetVar_0: int, inline$BDLGetDebugLevel$637$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$756$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$440$myNondetVar_0: int, inline$BDLGetDebugLevel$143$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$166$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$782$myNondetVar_0: int, inline$BDLGetDebugLevel$455$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$31$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$124$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$656$myNondetVar_0: int, inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$27$: int, inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$: int, inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12: int, inline$BDLGetDebugLevel$348$myNondetVar_0: int, inline$IoCopyCurrentIrpStackLocationToNext$1$$result.memcpy$25110.4$3$: int, inline$BDLGetDebugLevel$503$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$317$myNondetVar_0: int, inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$494$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnP$0$$result.DbgPrint$886.0$23$: int, inline$IoGetCurrentIrpStackLocation$53$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$11$myNondetVar_0: int, inline$BDLGetDebugLevel$602$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$116$havoc_stringTemp: int, inline$BDLPnPRemove$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp: int, inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$481$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$: int, inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$255$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$: int, inline$BDLGetDebugLevel$669$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$4$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$: int, inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4: int, inline$storm_PoCallDriver$3$$result.storm_PoCallDriver$494.0$1$: int, inline$CallCompletionRoutine$11$myNondetVar_0: int, inline$RemoveHeadList$2$$result.RemoveHeadList$8121.0$1$: int, inline$BDLGetDebugLevel$364$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0: int, inline$BDLGetDebugLevel$768$myNondetVar_0: int, inline$BDLGetDebugLevel$556$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$16$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$43$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$538$myNondetVar_0: int, inline$BDLGetDebugLevel$666$myNondetVar_0: int, inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetNextIrpStackLocation$3$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$: int, inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoGetNextIrpStackLocation$7$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$18$: int, inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12: int, inline$IoGetCurrentIrpStackLocation$108$myNondetVar_0: int, inline$BDLGetDebugLevel$17$myNondetVar_0: int, inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0: int, inline$BDLGetDebugLevel$311$myNondetVar_0: int, inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$430$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$10$havoc_stringTemp: int, inline$BDLGetDebugLevel$584$myNondetVar_0: int, inline$BDLPnPStop$0$$result.DbgPrint$2208.0$21$: int, inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$394$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$14$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$129$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$517$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$30$havoc_stringTemp: int, inline$BDLPnP$0$$result.BDLPnPCancelRemove$952.35$33$: int, inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$329$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$130$myNondetVar_0: int, inline$BDLGetDebugLevel$709$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$275$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$780$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$187$myNondetVar_0: int, inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12_.1: int, inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0: int, inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp: int, inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$614$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$41$myVar_1: int, inline$IoGetCurrentIrpStackLocation$41$myVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$: int, inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$686$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$59$havoc_stringTemp: int, inline$BDLGetDebugLevel$170$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$: int, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8_.1: int, inline$BDLGetDebugLevel$774$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$412$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$105$myVar_1: int, inline$IoGetCurrentIrpStackLocation$105$myVar_0: int, inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoCallDriver$6$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$73$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$552$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$701$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$587$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLPnP$0$$result.BDLPnPCancelStop$925.33$30$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$105$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$3$$result.storm_getThreadID$128.29$1$: int, inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLGetDebugLevel$472$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$396$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$63$myVar_1: int, inline$IoGetCurrentIrpStackLocation$63$myVar_0: int, inline$BDLGetDebugLevel$428$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$7$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$342$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$639$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$323$myNondetVar_0: int, inline$BDLGetDebugLevel$296$myNondetVar_0: int, inline$BDLGetDebugLevel$300$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1: int, inline$BDLDevicePowerIoCompletion$6$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$303$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$93$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$115$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$220$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$6$$callresult.$1687.68$15$: int, inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12: int, inline$BDLGetDebugLevel$158$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$74$myVar_0: int, inline$BDLGetDebugLevel$322$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$451$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$81$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$26$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$120$myVar_0: int, inline$IoGetCurrentIrpStackLocation$120$myVar_1: int, inline$BDLGetDebugLevel$619$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12: int, inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$782$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$623$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$39$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$168$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$: int, inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLGetDebugLevel$101$myNondetVar_0: int, inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$42$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$36$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$22$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$147$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$139$myVar_0: int, inline$IoGetCurrentIrpStackLocation$139$myVar_1: int, inline$IoGetNextIrpStackLocation$8$havoc_stringTemp: int, inline$BDLGetDebugLevel$640$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$212$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$93$myVar_0: int, inline$IoGetCurrentIrpStackLocation$93$myVar_1: int, inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$15$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$192$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLCleanupNotificationStruct$0$$irql$3$3113.45$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$8$myNondetVar_0: int, inline$BDLGetDebugLevel$734$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$: int, inline$BDLCleanupNotificationStruct$1$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$: int, inline$BDLGetDebugLevel$438$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$6$myNondetVar_0: int, inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$731$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$340$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$185$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$368$myNondetVar_0: int, inline$BDLGetDebugLevel$345$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12: int, inline$BDLGetDebugLevel$34$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$: int, inline$RemoveHeadList$3$$result.RemoveHeadList$8121.0$1$: int, inline$BDLGetDebugLevel$461$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$myNondetVar_0: int, inline$BDLGetDebugLevel$481$myNondetVar_0: int, inline$BDLGetDebugLevel$339$myNondetVar_0: int, inline$BDLGetDebugLevel$488$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$246$myNondetVar_0: int, inline$BDLGetDebugLevel$400$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$20$: int, inline$IoGetNextIrpStackLocation$12$havoc_stringTemp: int, inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$: int, inline$IoGetCurrentIrpStackLocation$3$havoc_stringTemp: int, inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$: int, inline$BDLGetDebugLevel$20$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$124$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$2$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$3$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$665$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$2$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$44$myNondetVar_0: int, inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoSetNextIrpStackLocation$6$myVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$24$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCleanupDataHandles$1$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$83$myVar_1: int, inline$IoGetCurrentIrpStackLocation$83$myVar_0: int, inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$29$: int, inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLPnPStop$0$$result.DbgPrint$2243.0$39$: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$136$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$29$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$33$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$519$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$152$myVar_1: int, inline$IoGetCurrentIrpStackLocation$152$myVar_0: int, inline$BDLGetDebugLevel$698$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$7$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$25$myNondetVar_0: int, inline$BDLGetDebugLevel$435$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$518$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$89$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$16$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$21$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$279$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$70$myNondetVar_0: int, inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$597$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$35$myVar_0: int, inline$IoGetCurrentIrpStackLocation$35$myVar_1: int, inline$BDLGetDebugLevel$611$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$45$: int, inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$125$myVar_1: int, inline$IoGetCurrentIrpStackLocation$125$myVar_0: int, inline$BDLGetDebugLevel$281$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$427$$result.BDLGetDebugLevel$39.0$1$: int, inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$9$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$103$myVar_0: int, inline$BDLCallDriverCompletionRoutine$21$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$771$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$272$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$0$myNondetVar_0: int, inline$BDLGetDebugLevel$692$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$42$havoc_stringTemp: int, inline$BDLGetDebugLevel$550$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$11$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$747$myNondetVar_0: int, inline$BDLGetDebugLevel$259$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$16$myVar_1: int, inline$IoGetCurrentIrpStackLocation$16$myVar_0: int, inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoGetCurrentIrpStackLocation$37$havoc_stringTemp: int, inline$BDLGetDebugLevel$25$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$: int, inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$430$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$: int, inline$IoGetCurrentIrpStackLocation$103$myNondetVar_0: int, inline$BDLGetDebugLevel$378$myNondetVar_0: int, inline$BDLGetDebugLevel$202$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$43$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$26$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$9$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$: int, inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$: int, inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLCallDriverCompletionRoutine$28$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$127$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$233$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$223$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$175$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$18$: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$: int, inline$BDLGetDebugLevel$163$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$662$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$: int, inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$105$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$55$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$57$myVar_1: int, inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12_.1: int, inline$BDLPnPSurpriseRemoval$0$$status$4$2534.16$BDLPnPSurpriseRemoval$12: int, inline$BDLGetDebugLevel$384$myNondetVar_0: int, inline$BDLPnP$0$$result.BDLPnPRemove$961.29$34$: int, inline$BDLGetDebugLevel$69$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$678$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$193$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$632$myNondetVar_0: int, inline$BDLGetDebugLevel$445$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$174$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$183$myNondetVar_0: int, inline$BDLGetDebugLevel$196$myNondetVar_0: int, inline$BDLGetDebugLevel$117$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoSkipCurrentIrpStackLocation$1$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$: int, inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$751$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$208$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$: int, inline$BDLPnPStop$0$$result.DbgPrint$2231.0$33$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$15$: int, inline$BDLPnP$0$$result.DbgPrint$865.0$3$: int, inline$BDLCleanupDataHandles$1$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4: int, inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$786$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$44$myVar_0: int, inline$IoGetCurrentIrpStackLocation$44$myVar_1: int, inline$BDLGetDebugLevel$629$myNondetVar_0: int, inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12_.1: int, inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$96$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$258$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$50$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_PoCallDriver$3$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLGetDebugLevel$338$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$29$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$: int, inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$20$: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$4$: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$507$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$131$myVar_0: int, inline$IoGetCurrentIrpStackLocation$131$myVar_1: int, inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$22$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$72$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupDataHandles$0$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4: int, inline$BDLGetDebugLevel$7$myNondetVar_0: int, inline$BDLGetDebugLevel$792$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$447$myNondetVar_0: int, inline$BDLPnPStart$0$$result.memset$1992.4$25$: int, inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$261$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$608$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$252$myNondetVar_0: int, inline$BDLGetDebugLevel$769$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$553$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$727$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$71$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$40$myVar_0: int, inline$IoGetCurrentIrpStackLocation$40$myVar_1: int, inline$BDLGetDebugLevel$253$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$249$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$10$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$124$myNondetVar_0: int, inline$BDLGetDebugLevel$209$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$470$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$95$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0: int, inline$BDLGetDebugLevel$478$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$143$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$772$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$: int, inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$26$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$: int, inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$758$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$433$myNondetVar_0: int, inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8: int, inline$CallCompletionRoutine$20$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$266$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$4$: int, inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$151$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$784$myNondetVar_0: int, inline$BDLGetDebugLevel$422$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$callresult.$1687.68$15$: int, inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$64$myVar_0: int, inline$IoGetCurrentIrpStackLocation$64$myVar_1: int, inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$480$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$111$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$566$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$350$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$23$: int, inline$IoGetCurrentIrpStackLocation$25$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$20$: int, inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0: int, inline$BDLGetDebugLevel$40$myNondetVar_0: int, inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$35$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$42$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoCopyCurrentIrpStackLocationToNext$5$$result.memcpy$25110.4$3$: int, inline$BDLGetDebugLevel$286$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$17$myVar_0: int, inline$IoGetCurrentIrpStackLocation$17$myVar_1: int, inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$: int, inline$BDLGetDebugLevel$90$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$138$myVar_1: int, inline$IoGetCurrentIrpStackLocation$138$myVar_0: int, inline$IoGetCurrentIrpStackLocation$127$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$754$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$: int, inline$BDLGetDebugLevel$498$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$0$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$158$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$385$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$140$havoc_stringTemp: int, inline$BDLPnPCancelRemove$0$$result.BDLCallLowerLevelDriverAndWait$2332.43$13$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$15$: int, inline$IoSetNextIrpStackLocation$5$myVar_0: int, inline$BDLGetDebugLevel$697$myNondetVar_0: int, inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$347$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$99$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$86$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$90$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$74$havoc_stringTemp: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$: int, inline$IoGetCurrentIrpStackLocation$89$havoc_stringTemp: int, inline$BDLGetDebugLevel$116$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$254$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$783$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$713$myNondetVar_0: int, inline$CallCompletionRoutine$19$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$188$myNondetVar_0: int, inline$BDLGetDebugLevel$330$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLPnPQueryStop$0$$result.BDLCallLowerLevelDriverAndWait$2116.47$13$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$139$havoc_stringTemp: int, inline$BDLGetDebugLevel$0$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$781$$result.BDLGetDebugLevel$39.0$1$: int, $result.storm_IoAllocateIrp$100.0$1$: int, inline$BDLGetDebugLevel$683$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$680$myNondetVar_0: int, inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$: int, inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$195$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$198$myNondetVar_0: int, inline$BDLGetDebugLevel$492$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3153.26$14$: int, inline$IoGetCurrentIrpStackLocation$66$havoc_stringTemp: int, inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$8$: int, inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$14$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$189$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$218$myNondetVar_0: int, inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp: int, inline$BDLGetDebugLevel$437$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$32$: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$18$: int, inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$153$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$: int, inline$storm_IoCallDriver$10$$result.storm_IoCallDriver$456.0$1$: int, inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$211$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$108$myVar_0: int, inline$IoGetCurrentIrpStackLocation$108$myVar_1: int, inline$BDLGetDebugLevel$424$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$325$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$4$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$568$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$22$: int, inline$IoSetNextIrpStackLocation$12$myVar_0: int, inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$548$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$649$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$96$myNondetVar_0: int, inline$BDLGetDebugLevel$414$myNondetVar_0: int, inline$BDLGetDebugLevel$95$myNondetVar_0: int, inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$673$myNondetVar_0: int, inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$553$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$7$: int, inline$BDLGetDebugLevel$732$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$294$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$222$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$150$myNondetVar_0: int, inline$BDLGetDebugLevel$112$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$21$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$16$: int, inline$BDLGetDebugLevel$344$myNondetVar_0: int, inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$7$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp: int, inline$BDLGetDebugLevel$307$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$34$: int, inline$BDLRemoveHandleFromList$0$myNondetVar_1: int, inline$BDLRemoveHandleFromList$0$myNondetVar_0: int, inline$BDLGetDebugLevel$578$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$748$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$: int, inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$131$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$534$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$450$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$5$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$8$: int, inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$20$: int, inline$BDLGetDebugLevel$766$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$34$: int, inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$768$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$659$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$719$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$509$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$763$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$626$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$257$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$: int, inline$BDLGetDebugLevel$671$myNondetVar_0: int, inline$BDLGetDebugLevel$786$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$371$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$131$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$528$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$61$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$793$myNondetVar_0: int, inline$BDLGetDebugLevel$453$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$538$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$308$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$: int, inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$477$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$502$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$2$: int, inline$IoGetCurrentIrpStackLocation$33$myVar_0: int, inline$IoGetCurrentIrpStackLocation$33$myVar_1: int, inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLGetDebugLevel$668$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$472$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$243$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$15$myNondetVar_0: int, inline$BDLGetDebugLevel$240$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$582$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$482$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$: int, inline$BDLDevicePowerIoCompletion$3$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$404$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$634$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$63$havoc_stringTemp: int, inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4_.1: int, inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$666$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLDevicePowerIoCompletion$20$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLPnPStart$0$$result.DbgPrint$2037.0$43$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$742$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$20$: int, inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$8$$result.memset$1683.8$14$: int, inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$87$havoc_stringTemp: int, inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$57$: int, inline$BDLGetDebugLevel$130$myNondetVar_0: int, inline$BDLGetDebugLevel$62$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$23$: int, inline$IsListEmpty$4$myNondetVar_0: int, inline$BDLGetDebugLevel$417$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$246$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$236$myNondetVar_0: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryRemove$0$$result.BDLPnPQueryRemove$2254.0$1$: int, inline$BDLDevicePowerIoCompletion$16$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$441$myNondetVar_0: int, inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IsListEmpty$2$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$104$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$639$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$IoGetCurrentIrpStackLocation$107$myVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$184$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$7$: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$224$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$12$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$IoGetCurrentIrpStackLocation$48$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoSkipCurrentIrpStackLocation$2$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$270.0$1$: int, inline$BDLGetDebugLevel$39$myNondetVar_0: int, inline$RemoveHeadList$2$myNondetVar_0: int, inline$BDLGetDebugLevel$373$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$: int, inline$BDLGetDebugLevel$332$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$679$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$21$myNondetVar_0: int, inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$69$myVar_0: int, inline$IoGetCurrentIrpStackLocation$2$myNondetVar_0: int, inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16: int, inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$620$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$486$myNondetVar_0: int, inline$BDLGetDebugLevel$460$myNondetVar_0: int, inline$BDLPnP$0$$result.DbgPrint$865.0$8$: int, inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$714$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$734$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$151$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$145$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$401$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$704$myNondetVar_0: int, inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp: int, inline$BDLGetDebugLevel$442$myNondetVar_0: int, inline$BDLGetDebugLevel$432$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$23$: int, inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$236$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$1$myNondetVar_0: int, inline$BDLGetDebugLevel$375$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$41$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoSkipCurrentIrpStackLocation$2$myNondetVar_0: int, inline$BDLGetDebugLevel$717$myNondetVar_0: int, inline$BDLGetDebugLevel$346$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$: int, inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$BDLSystemPowerIoCompletion$17$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$13$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$207$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$116$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$70$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$: int, inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$11$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$: int, inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$141$havoc_stringTemp: int, inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16_.1: int, inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$755$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$24$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$32$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$581$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$15$: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$: int, inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$304$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$96$myNondetVar_0: int, inline$BDLGetDebugLevel$730$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$: int, inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$231$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$589$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$131$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$: int, inline$BDLSystemPowerIoCompletion$4$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$37$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$127$myVar_1: int, inline$IoGetCurrentIrpStackLocation$127$myVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$598$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$85$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$53$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$: int, inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLPnPStart$0$$result.DbgPrint$2063.0$56$: int, inline$BDLDevicePowerIoCompletion$11$myNondetVar_0: int, inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLCallDriverCompletionRoutine$6$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$268$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4_.1: int, inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$416$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$: int, inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$19$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$0$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$BDLPnPStop$0$$result.DbgPrint$2208.0$16$: int, inline$BDLDevicePowerIoCompletion$20$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLCleanupNotificationStruct$1$$irql$3$3113.45$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$133$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$4$: int, inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$40$: int, inline$IoGetCurrentIrpStackLocation$135$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLSystemPowerIoCompletion$2$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$186$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$27$: int, inline$BDLGetDebugLevel$205$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$result.memset$1683.8$14$: int, inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$50$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$28$havoc_stringTemp: int, inline$BDLGetDebugLevel$689$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$505$myNondetVar_0: int, inline$BDLGetDebugLevel$156$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$262$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$: int, inline$IoGetCurrentIrpStackLocation$130$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$334$myNondetVar_0: int, inline$BDLGetDebugLevel$185$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$513$myNondetVar_0: int, inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16: int, inline$BDLGetDebugLevel$643$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$210$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.memcpy$2018.0$38$: int, inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$606$myNondetVar_0: int, inline$BDLGetDebugLevel$442$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$: int, inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$356$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$: int, inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$storm_getThreadID$9$tid: int, inline$storm_PoCallDriver$5$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$18$: int, inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_getThreadID$6$tid: int, inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$: int, inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$329$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$33$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$132$havoc_stringTemp: int, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$: int, inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4: int, inline$BDLGetDebugLevel$431$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$26$myNondetVar_0: int, inline$BDLGetDebugLevel$176$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$104$myVar_0: int, inline$IoGetCurrentIrpStackLocation$104$myVar_1: int, inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16_.1: int, inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$29$: int, inline$BDLGetDebugLevel$293$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$94$myVar_1: int, inline$IoGetCurrentIrpStackLocation$94$myVar_0: int, inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$344$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$426$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$739$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$27$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$75$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$751$myNondetVar_0: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$: int, inline$BDLGetDebugLevel$539$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$490$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$68$myVar_0: int, inline$IoGetCurrentIrpStackLocation$68$myVar_1: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$40$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$38$myNondetVar_0: int, inline$BDLGetDebugLevel$621$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$98$myVar_1: int, inline$IoGetCurrentIrpStackLocation$98$myVar_0: int, inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$20$myVar_0: int, inline$IoGetCurrentIrpStackLocation$20$myVar_1: int, inline$BDLCallLowerLevelDriverAndWait$5$havoc_stringTemp: int, inline$BDLGetDebugLevel$64$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$400$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$557$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$28$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$29$: int, inline$IoGetCurrentIrpStackLocation$81$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$3$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$15$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoSetNextIrpStackLocation$7$tempBoogie0: int, inline$BDLPnPStart$0$$result.BDLPnPStart$1954.0$1$: int, inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$413$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$4$tempBoogie0: int, inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4: int, inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$541$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$119$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLGetDebugLevel$796$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$128$myVar_0: int, inline$IoGetCurrentIrpStackLocation$128$myVar_1: int, inline$IoGetCurrentIrpStackLocation$151$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$75$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$139$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$: int, inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$351$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$81$myVar_1: int, inline$IoGetCurrentIrpStackLocation$81$myVar_0: int, inline$BDLGetDebugLevel$306$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$787$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$249$myNondetVar_0: int, inline$BDLGetDebugLevel$789$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$387$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$13$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$144$myNondetVar_0: int, inline$BDLGetDebugLevel$51$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$34$: int, inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$651$myNondetVar_0: int, inline$BDLGetDebugLevel$521$myNondetVar_0: int, inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$65$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$794$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$97$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$140$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12: int, inline$IoGetCurrentIrpStackLocation$103$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$23$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$130$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$13$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$135$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$386$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$9$: int, inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$55$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$2$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$: int, inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLHandleRemove$1$$result.storm_IoCallDriver$2453.25$39$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$: int, inline$IoGetCurrentIrpStackLocation$90$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$225$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$99$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$555$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$367$myNondetVar_0: int, inline$BDLLockHandleList$1$myNondetVar_1: int, inline$BDLLockHandleList$1$myNondetVar_0: int, inline$BDLGetDebugLevel$120$myNondetVar_0: int, inline$BDLGetDebugLevel$118$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$110$myVar_1: int, inline$IoGetCurrentIrpStackLocation$110$myVar_0: int, inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$119$myVar_0: int, inline$IoGetCurrentIrpStackLocation$119$myVar_1: int, inline$BDLGetDebugLevel$197$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$72$myVar_1: int, inline$IoGetCurrentIrpStackLocation$72$myVar_0: int, inline$BDLGetDebugLevel$391$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$100$havoc_stringTemp: int, inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$114$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$103$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$708$myNondetVar_0: int, inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$5$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$78$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$33$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$93$havoc_stringTemp: int, inline$BDLGetDebugLevel$537$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$750$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$12$$result.memset$1683.8$14$: int, inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLGetDebugLevel$544$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$3$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$456$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoCallDriver$12$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$709$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$: int, inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$11$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$219$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$115$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$18$: int, inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLPnP$0$$result.BDLPnPStart$906.28$28$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$149$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$558$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$20$havoc_stringTemp: int, inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$667$myNondetVar_0: int, inline$BDLGetDebugLevel$267$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$IoGetCurrentIrpStackLocation$40$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$90$myNondetVar_0: int, inline$BDLGetDebugLevel$104$myNondetVar_0: int, inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0: int, inline$BDLDevicePowerIoCompletion$8$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$761$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$515$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$5$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$291$myNondetVar_0: int, inline$BDLGetDebugLevel$736$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$: int, inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$75$myVar_0: int, inline$IoGetCurrentIrpStackLocation$75$myVar_1: int, inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$789$myNondetVar_0: int, inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4_.1: int, inline$BDLGetDebugLevel$354$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$23$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$22$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$741$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$187$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$IoGetNextIrpStackLocation$1$myVar_0: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$4$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$85$havoc_stringTemp: int, inline$BDLGetDebugLevel$624$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$11$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$159$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$54$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$: int, inline$BDLGetDebugLevel$658$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLGetDebugLevel$541$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$85$myVar_1: int, inline$IoGetCurrentIrpStackLocation$85$myVar_0: int, inline$IoGetCurrentIrpStackLocation$78$myVar_1: int, inline$IoGetCurrentIrpStackLocation$78$myVar_0: int, inline$BDLDevicePowerIoCompletion$5$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp: int, inline$BDLGetDebugLevel$365$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$130$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$86$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoSetNextIrpStackLocation$4$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$132$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$3$myNondetVar_0: int, inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLCallLowerLevelDriverAndWait$3$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$73$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$: int, inline$BDLGetDebugLevel$575$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$424$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$20$$result.memset$1683.8$14$: int, inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4: int, inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$: int, inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$29$: int, inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$82$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$228$myNondetVar_0: int, inline$BDLGetDebugLevel$397$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$161$myNondetVar_0: int, inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$718$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$37$: int, inline$IoGetCurrentIrpStackLocation$39$myNondetVar_0: int, inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_PoCallDriver$104.29$3$: int, inline$IoGetCurrentIrpStackLocation$69$myVar_1: int, inline$BDLGetDebugLevel$790$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$642$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$611$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$8$myNondetVar_0: int, inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$49$myVar_1: int, inline$IoGetCurrentIrpStackLocation$49$myVar_0: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$240$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$565$myNondetVar_0: int, inline$BDLGetDebugLevel$573$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$412$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$625$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$11$myVar_1: int, inline$BDLGetDebugLevel$201$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$798$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$8$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$45$havoc_stringTemp: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$3$: int, inline$BDLGetDebugLevel$227$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$307$myNondetVar_0: int, inline$BDLGetDebugLevel$801$myNondetVar_0: int, inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$328$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$65$myVar_1: int, inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$376$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$7$myVar_0: int, inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$17$myNondetVar_0: int, inline$BDLGetDebugLevel$53$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$349$myNondetVar_0: int, inline$BDLGetDebugLevel$163$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$182$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$30$myVar_1: int, inline$IoGetCurrentIrpStackLocation$30$myVar_0: int, inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$23$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$30$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_PoCallDriver$4$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$20$: int, inline$BDLPnPStart$0$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$callresult.$3284.85$14$: int, inline$storm_PoCallDriver$2$$result.storm_PoCallDriver$494.0$1$: int, inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12: int, inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$532$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$22$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$593$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$540$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$171$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$335$myNondetVar_0: int, inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$57$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPStart$0$$result.DbgPrint$2063.0$61$: int, inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$15$: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$23$: int, inline$BDLPnP$0$$result.BDLPnPQueryRemove$943.34$32$: int, inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_getThreadID$7$tid: int, inline$BDLGetDebugLevel$785$myNondetVar_0: int, inline$BDLGetDebugLevel$630$myNondetVar_0: int, inline$BDLGetDebugLevel$503$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$46$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$18$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$: int, inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$: int, inline$CallCompletionRoutine$2$myNondetVar_0: int, inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$79$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$120$myNondetVar_0: int, inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12: int, inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$: int, inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$8$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$6$tempBoogie0: int, inline$BDLGetDebugLevel$171$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$277$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12_.1: int, inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$3$: int, inline$BDLGetDebugLevel$554$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$15$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$30$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$760$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$5$myVar_0: int, inline$IoGetNextIrpStackLocation$1$havoc_stringTemp: int, inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$110$myNondetVar_0: int, inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4: int, inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8_.1: int, inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$623$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$102$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$379$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$65$myNondetVar_0: int, inline$BDLGetDebugLevel$350$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$12$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$153$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$563$myNondetVar_0: int, inline$BDLGetDebugLevel$200$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$366$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$140$myVar_0: int, inline$IoGetCurrentIrpStackLocation$140$myVar_1: int, inline$BDLDevicePowerIoCompletion$5$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLGetDebugLevel$692$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$556$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$callresult.$1999.70$26$: int, inline$IoGetCurrentIrpStackLocation$46$myVar_0: int, inline$IoGetCurrentIrpStackLocation$46$myVar_1: int, inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$512$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoGetCurrentIrpStackLocation$70$myVar_1: int, inline$IoGetCurrentIrpStackLocation$70$myVar_0: int, inline$BDLDevicePowerIoCompletion$5$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$124$myVar_0: int, inline$IoGetCurrentIrpStackLocation$124$myVar_1: int, inline$BDLGetDebugLevel$357$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$32$: int, inline$IoSkipCurrentIrpStackLocation$1$myNondetVar_0: int, inline$BDLGetDebugLevel$617$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$: int, inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1: int, inline$storm_getThreadID$2$tid: int, inline$IoGetCurrentIrpStackLocation$146$myVar_0: int, inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoGetCurrentIrpStackLocation$89$myVar_1: int, inline$BDLGetDebugLevel$722$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$746$myNondetVar_0: int, inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$641$myNondetVar_0: int, inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$95$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$500$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$0$myNondetVar_0: int, inline$BDLGetDebugLevel$705$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$600$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$638$myNondetVar_0: int, inline$storm_IoAllocateIrp$0$$result.malloc$279.0$3$: int, inline$BDLGetDebugLevel$331$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$203$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$84$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$544$myNondetVar_0: int, inline$BDLGetDebugLevel$83$myNondetVar_0: int, inline$BDLGetDebugLevel$569$myNondetVar_0: int, inline$BDLGetDebugLevel$479$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$4$: int, inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$34$: int, inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$144$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$3$myVar_0: int, inline$IoGetCurrentIrpStackLocation$37$myNondetVar_0: int, inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLSystemPowerIoCompletion$25$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp: int, inline$BDLGetDebugLevel$444$myNondetVar_0: int, inline$BDLGetDebugLevel$19$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$143$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$613$myNondetVar_0: int, inline$BDLGetDebugLevel$345$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$119$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp: int, inline$BDLGetDebugLevel$657$myNondetVar_0: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$1$: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$497$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$10$myVar_0: int, inline$BDLGetDebugLevel$545$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$: int, inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12: int, inline$BDLGetDebugLevel$69$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$547$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLPnP$0$$result.DbgPrint$886.0$18$: int, inline$BDLGetDebugLevel$690$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$318$myNondetVar_0: int, inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$IoSkipCurrentIrpStackLocation$0$havoc_stringTemp: int, inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$6$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$40$: int, inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$: int, inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$410$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$605$myNondetVar_0: int, inline$BDLGetDebugLevel$142$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$167$myNondetVar_0: int, inline$BDLGetDebugLevel$613$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$8$: int, inline$IoGetCurrentIrpStackLocation$12$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$696$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$41$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$15$havoc_stringTemp: int, inline$BDLGetDebugLevel$420$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$BDLCleanupDataHandles$1$$callresult.$3284.85$14$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$546$myNondetVar_0: int, inline$BDLGetDebugLevel$399$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$22$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$myNondetVar_0: int, inline$BDLGetDebugLevel$216$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$20$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$577$myNondetVar_0: int, inline$BDLGetDebugLevel$752$myNondetVar_0: int, inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$606$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$301$myNondetVar_0: int, inline$BDLGetDebugLevel$732$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$217$myNondetVar_0: int, inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8_.1: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$: int, inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$10$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$153$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$506$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$386$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$281$myNondetVar_0: int, inline$BDLGetDebugLevel$52$myNondetVar_0: int, inline$BDLGetDebugLevel$296$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$29$: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$: int, inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp: int, inline$BDLGetDebugLevel$454$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$20$: int, inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$24$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$: int, inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$687$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$229$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16_.1: int, inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$141$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$62$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$34$: int, inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$: int, inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$23$: int, inline$IoSetNextIrpStackLocation$10$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$31$myNondetVar_0: int, inline$BDLGetDebugLevel$54$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$76$myVar_1: int, inline$IoGetCurrentIrpStackLocation$76$myVar_0: int, inline$BDLGetDebugLevel$647$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$314$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$66$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$295$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$18$: int, inline$BDLDevicePowerIoCompletion$1$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$765$myNondetVar_0: int, inline$BDLGetDebugLevel$238$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$9$myVar_0: int, inline$IoGetCurrentIrpStackLocation$9$myVar_1: int, inline$BDLGetDebugLevel$297$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$135$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$676$myNondetVar_0: int, inline$BDLGetDebugLevel$453$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$20$: int, inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$15$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$0$myNondetVar_0: int, inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$429$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$127$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$109$myNondetVar_0: int, inline$BDLGetDebugLevel$589$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$: int, inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$63$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$745$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$9$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$: int, inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$: int, inline$IoSkipCurrentIrpStackLocation$2$myVar_1: int, inline$IoSkipCurrentIrpStackLocation$2$myVar_0: int, inline$BDLGetDebugLevel$469$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$134$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLPnPStart$0$$bdsiInitializeResourcesParams$7$1964.32$BDLPnPStart$16: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$107$havoc_stringTemp: int, inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$687$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLPnPCancelRemove$2314.0$1$: int, inline$BDLGetDebugLevel$29$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$89$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$98$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$43$: int, inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$104$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$0$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$12$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$18$: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$20$: int, inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$3$: int, inline$BDLGetDebugLevel$392$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$myNondetVar_0: int, inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IsListEmpty$3$myNondetVar_0: int, inline$BDLGetDebugLevel$496$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$244$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$769$myNondetVar_0: int, inline$BDLGetDebugLevel$738$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$38$havoc_stringTemp: int, inline$BDLGetDebugLevel$574$myNondetVar_0: int, inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12_.1: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoGetCurrentIrpStackLocation$113$myNondetVar_0: int, inline$BDLGetDebugLevel$92$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$194$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$7$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$67$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$: int, inline$BDLGetDebugLevel$629$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLGetDebugLevel$276$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$585$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$464$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$370$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$384$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$800$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$38$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$618$myNondetVar_0: int, inline$BDLGetDebugLevel$593$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$14$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$126$myVar_0: int, inline$IoGetCurrentIrpStackLocation$126$myVar_1: int, inline$BDLGetDebugLevel$463$myNondetVar_0: int, inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$718$myNondetVar_0: int, inline$CallCompletionRoutine$12$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLPnP$0$$result.BDLPnPSurpriseRemoval$973.38$35$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$: int, inline$storm_getThreadID$12$tid: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$: int, inline$BDLSystemPowerIoCompletion$1$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$457$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetCurrentIrpStackLocation$58$myNondetVar_0: int, inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$15$: int, inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$102$havoc_stringTemp: int, inline$storm_IoCallDriver$7$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$576$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$18$: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IsListEmpty$0$$result.IsListEmpty$8096.0$1$: int, inline$BDLGetDebugLevel$262$myNondetVar_0: int, inline$BDLGetDebugLevel$761$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$86$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$17$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$40$: int, inline$IoSetNextIrpStackLocation$14$myVar_0: int, inline$BDLGetDebugLevel$8$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$363$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$234$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$myInitDriver$0$myNondetVar_0: int, inline$myInitDriver$0$myNondetVar_1: int, inline$BDLGetDebugLevel$694$myNondetVar_0: int, inline$BDLGetDebugLevel$66$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$88$havoc_stringTemp: int, inline$BDLGetDebugLevel$607$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$312$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$361$myNondetVar_0: int, inline$BDLGetDebugLevel$221$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$: int, inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8: int, inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$405$myNondetVar_0: int, inline$BDLGetDebugLevel$570$myNondetVar_0: int, inline$BDLGetDebugLevel$409$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$6$havoc_stringTemp: int, inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$4$: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$117$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$6$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$77$havoc_stringTemp: int, inline$BDLGetDebugLevel$71$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$: int, inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$461$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$: int, inline$BDLGetDebugLevel$247$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$109$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$: int, inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$: int, inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$: int, inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$258$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$285$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$152$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$94$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$20$: int, inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$27$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$99$havoc_stringTemp: int, inline$BDLGetDebugLevel$377$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$: int, inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$779$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$152$myNondetVar_0: int, inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$783$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$: int, inline$IoSetNextIrpStackLocation$5$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$: int, inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$20$: int, inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$434$myNondetVar_0: int, inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$25$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$455$myNondetVar_0: int, inline$BDLGetDebugLevel$615$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$575$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$140$myNondetVar_0: int, inline$storm_getThreadID$0$tid: int, inline$IoGetCurrentIrpStackLocation$117$myNondetVar_0: int, inline$BDLGetDebugLevel$183$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$143$myVar_1: int, inline$BDLGetDebugLevel$448$myNondetVar_0: int, inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$172$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$34$: int, inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$191$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$18$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$68$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$332$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$3$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$102$myVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$: int, inline$BDLGetDebugLevel$423$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$148$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$64$myNondetVar_0: int, inline$BDLGetDebugLevel$45$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryRemove$0$$result.IoSetDeviceInterfaceState$2272.29$13$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLPnPStop$0$$callresult.$2204.67$14$: int, inline$CallCompletionRoutine$8$myNondetVar_0: int, inline$BDLPnPStart$0$havoc_stringTemp: int, inline$BDLGetDebugLevel$288$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12: int, inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$37$myNondetVar_0: int, inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLPnPStop$0$havoc_stringTemp: int, inline$BDLGetDebugLevel$269$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$: int, inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$8$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$679$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$19$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$254$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLCallDriverCompletionRoutine$7$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$7$: int, inline$BDLGetDebugLevel$797$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$215$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$21$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$176$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$4$havoc_stringTemp: int, inline$BDLGetDebugLevel$165$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$251$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$800$myNondetVar_0: int, inline$BDLGetDebugLevel$735$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$99$myVar_0: int, inline$IoGetCurrentIrpStackLocation$99$myVar_1: int, inline$BDLGetDebugLevel$121$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$492$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$767$myNondetVar_0: int, inline$IsListEmpty$5$$result.IsListEmpty$8096.0$1$: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$31$myNondetVar_0: int, inline$BDLGetDebugLevel$522$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$30$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$669$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$153$myVar_0: int, inline$IoGetCurrentIrpStackLocation$153$myVar_1: int, inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$4$: int, inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLPnP$0$$result.storm_IoCallDriver$995.29$47$: int, inline$BDLGetDebugLevel$86$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLDevicePowerIoCompletion$8$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_IoCallDriver$108.29$4$: int, inline$IoGetCurrentIrpStackLocation$111$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$265$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$420$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$723$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$86$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLDevicePowerIoCompletion$6$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$: int, inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$122$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$16$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$24$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$23$: int, inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetCurrentIrpStackLocation$20$myNondetVar_0: int, inline$CallCompletionRoutine$5$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$136$myVar_1: int, inline$IoGetCurrentIrpStackLocation$136$myVar_0: int, inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$439$myNondetVar_0: int, inline$BDLGetDebugLevel$594$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.DbgPrint$1966.0$3$: int, inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4: int, inline$BDLGetDebugLevel$241$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$8$tempBoogie0: int, inline$BDLGetDebugLevel$343$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$128$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$result.DbgPrint$1023.0$49$: int, inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$542$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetNextIrpStackLocation$3$myVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$591$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$560$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$59$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4: int, inline$BDLGetDebugLevel$225$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$26$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$32$: int, inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1: int, inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$228$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$67$myVar_1: int, inline$IoGetCurrentIrpStackLocation$67$myVar_0: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$15$: int, inline$IsListEmpty$4$$result.IsListEmpty$8096.0$1$: int, inline$BDLHandleRemove$0$havoc_stringTemp: int, inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$313$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4: int, inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp: int, inline$BDLGetDebugLevel$405$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$602$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStart$0$$result.DbgPrint$1979.0$20$: int, inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$154$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$: int, inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.BDLCallLowerLevelDriverAndWait$71.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$: int, inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$65$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$3$: int, inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$700$myNondetVar_0: int, inline$BDLGetDebugLevel$427$myNondetVar_0: int, inline$BDLGetDebugLevel$170$myNondetVar_0: int, inline$BDLGetDebugLevel$470$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$19$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$15$: int, inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$716$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$699$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$80$myVar_0: int, inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$483$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$16$: int, inline$BDLGetDebugLevel$216$myNondetVar_0: int, inline$BDLGetDebugLevel$379$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$102$myNondetVar_0: int, inline$BDLGetDebugLevel$793$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$670$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$13$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$378$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$41$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$21$myVar_0: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$15$: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$667$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$217$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$16$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$4$: int, inline$BDLCleanupNotificationStruct$1$myNondetVar_1: int, inline$BDLCleanupNotificationStruct$1$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$725$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$471$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$BDLDevicePowerIoCompletion$27$$callresult.$1687.68$15$: int, inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$263$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$739$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$34$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$695$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$67$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$22$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$: int, inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$23$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$23$: int, inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$20$: int, inline$BDLDevicePowerIoCompletion$20$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$69$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0: int, inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$: int, inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$290$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$628$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$: int, inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$263$myNondetVar_0: int, inline$BDLGetDebugLevel$603$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$: int, inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$9$: int, inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$764$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLReleaseHandleList$1$myNondetVar_0: int, inline$BDLReleaseHandleList$1$myNondetVar_1: int, inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$38$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$467$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$402$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$316$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$79$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp: int, inline$BDLGetDebugLevel$626$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$: int, inline$BDLGetDebugLevel$501$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$2$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLPnPRemove$0$$result.BDLPnPRemove$2476.0$1$: int, inline$BDLGetDebugLevel$638$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$36$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$71$havoc_stringTemp: int, inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$27$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$6$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$648$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$126$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$: int, inline$BDLGetDebugLevel$540$myNondetVar_0: int, inline$BDLGetDebugLevel$755$myNondetVar_0: int, inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$489$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$: int, inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$: int, inline$BDLGetDebugLevel$269$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$259$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$29$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$23$$result.memset$1683.8$14$: int, inline$IoGetCurrentIrpStackLocation$120$havoc_stringTemp: int, inline$BDLGetDebugLevel$526$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$22$: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$464$myNondetVar_0: int, inline$BDLGetDebugLevel$616$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$67$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$8$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$76$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_getThreadID$11$tid: int, inline$BDLGetDebugLevel$731$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$32$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$20$: int, inline$BDLDevicePowerIoCompletion$9$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoSkipCurrentIrpStackLocation$0$myVar_1: int, inline$IoSkipCurrentIrpStackLocation$0$myVar_0: int, inline$BDLSystemPowerIoCompletion$7$myNondetVar_0: int, inline$BDLGetDebugLevel$200$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$15$: int, inline$IoGetCurrentIrpStackLocation$98$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$302$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$IoGetCurrentIrpStackLocation$67$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$4$: int, inline$IoGetCurrentIrpStackLocation$13$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$8$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$53$myVar_0: int, inline$IoGetCurrentIrpStackLocation$53$myVar_1: int, inline$BDLGetDebugLevel$432$myNondetVar_0: int, inline$BDLGetDebugLevel$367$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$132$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$188$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$: int, inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$138$myNondetVar_0: int, inline$BDLGetDebugLevel$157$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$532$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$14$myNondetVar_0: int, inline$BDLGetDebugLevel$468$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$119$myNondetVar_0: int, inline$BDLGetDebugLevel$214$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$56$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$706$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$333$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$: int, inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$587$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$605$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$5$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$84$myVar_0: int, inline$IoGetCurrentIrpStackLocation$84$myVar_1: int, inline$BDLGetDebugLevel$122$myNondetVar_0: int, inline$BDLGetDebugLevel$79$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$: int, inline$IoGetCurrentIrpStackLocation$116$myVar_1: int, inline$IoGetCurrentIrpStackLocation$116$myVar_0: int, inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$29$: int, inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$40$: int, inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$763$myNondetVar_0: int, inline$BDLGetDebugLevel$73$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4_.1: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$: int, inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$45$myNondetVar_0: int, inline$BDLGetDebugLevel$490$myNondetVar_0: int, inline$BDLGetDebugLevel$675$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$27$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$577$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$539$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$16$$result.memset$1683.8$14$: int, inline$IoGetNextIrpStackLocation$10$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$397$myNondetVar_0: int, inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$724$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$615$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$306$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$785$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$: int, inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$77$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$callresult.$1687.68$15$: int, inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$288$myNondetVar_0: int, inline$BDLGetDebugLevel$597$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$663$myNondetVar_0: int, inline$BDLGetDebugLevel$499$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$27$myNondetVar_0: int, inline$CallCompletionRoutine$4$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$28$myVar_0: int, inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$395$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12: int, inline$BDLDevicePowerIoCompletion$28$$callresult.$1687.68$15$: int, inline$BDLDevicePowerIoCompletion$29$$result.memset$1683.8$14$: int, inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$62$myVar_0: int, inline$IoGetCurrentIrpStackLocation$62$myVar_1: int, inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$143$myVar_0: int, inline$IoGetCurrentIrpStackLocation$136$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$134$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$68$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$131$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$54$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$23$: int, inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$29$: int, inline$CallCompletionRoutine$7$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp: int, inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$18$: int, inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$150$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$3$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IsListEmpty$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$myNondetVar_0: int, inline$BDLGetDebugLevel$523$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPQueryStop$0$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLCleanupNotificationStruct$1$$result.KfRaiseIrql$3141.8$12$: int, inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$90$myVar_1: int, inline$IoGetCurrentIrpStackLocation$90$myVar_0: int, inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12_.1: int, inline$BDLGetDebugLevel$776$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$18$: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$: int, inline$BDLGetDebugLevel$521$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$28$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$749$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$21$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLDevicePowerIoCompletion$11$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$331$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$: int, inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$192$myNondetVar_0: int, inline$BDLGetDebugLevel$232$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$storm_getThreadID$5$tid: int, inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$: int, inline$IoGetNextIrpStackLocation$4$myVar_0: int, inline$BDLGetDebugLevel$297$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$641$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$66$myVar_0: int, inline$IoGetCurrentIrpStackLocation$66$myVar_1: int, inline$BDLGetDebugLevel$402$myNondetVar_0: int, inline$BDLGetDebugLevel$586$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$184$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$408$myNondetVar_0: int, inline$storm_getThreadID$10$tid: int, inline$BDLDevicePowerIoCompletion$30$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoGetCurrentIrpStackLocation$91$myVar_1: int, inline$BDLGetDebugLevel$284$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12_.1: int, inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$29$: int, inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$678$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12: int, inline$IoGetCurrentIrpStackLocation$147$havoc_stringTemp: int, inline$BDLGetDebugLevel$38$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$473$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$699$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoSetNextIrpStackLocation$2$myNondetVar_0: int, inline$BDLGetDebugLevel$328$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$429$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$48$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$270$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$150$myVar_1: int, inline$IoGetCurrentIrpStackLocation$150$myVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLPnP$0$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$14$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$66$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$527$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$29$: int, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$318$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_PoCallDriver$1$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLGetDebugLevel$493$myNondetVar_0: int, inline$BDLGetDebugLevel$362$myNondetVar_0: int, inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16: int, inline$BDLGetDebugLevel$119$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$3$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$354$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$10$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$355$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$147$myVar_1: int, inline$IoGetCurrentIrpStackLocation$147$myVar_0: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$390$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$207$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$439$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$98$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$23$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$569$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$113$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$720$myNondetVar_0: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$: int, inline$BDLGetDebugLevel$637$myNondetVar_0: int, inline$BDLGetDebugLevel$369$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$: int, inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$26$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$579$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLCallDriverCompletionRoutine$23$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$446$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$68$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$45$: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLCallDriverCompletionRoutine$13$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$15$: int, inline$BDLPnPQueryStop$0$myNondetVar_1: int, inline$BDLPnPQueryStop$0$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$74$myVar_1: int, inline$BDLGetDebugLevel$491$myNondetVar_0: int, inline$BDLGetDebugLevel$348$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$storm_PoCallDriver$0$$result.storm_PoCallDriver$494.0$1$: int, inline$BDLGetDebugLevel$358$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$callresult.$2419.71$15$: int, inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$362$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$404$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$101$myVar_1: int, inline$IoGetCurrentIrpStackLocation$101$myVar_0: int, inline$BDLGetDebugLevel$408$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3218.26$30$: int, inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$235$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$264$myNondetVar_0: int, inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$389$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$: int, inline$BDLGetDebugLevel$172$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$26$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$742$myNondetVar_0: int, inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$319$myNondetVar_0: int, inline$BDLGetDebugLevel$497$myNondetVar_0: int, inline$BDLRemoveHandleFromList$1$myNondetVar_0: int, inline$BDLRemoveHandleFromList$1$myNondetVar_1: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$222$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$myNondetVar_0: int, inline$BDLGetDebugLevel$239$myNondetVar_0: int, inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4: int, inline$IoGetCurrentIrpStackLocation$18$havoc_stringTemp: int, inline$BDLHandleRemove$1$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$82$havoc_stringTemp: int, inline$BDLGetDebugLevel$146$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$: int, inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$406$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$495$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$94$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$721$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$722$myNondetVar_0: int, inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3218.26$30$: int, inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$504$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$: int, inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$59$myVar_0: int, inline$IoGetCurrentIrpStackLocation$59$myVar_1: int, inline$BDLGetDebugLevel$511$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$: int, inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$9$: int, inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$25$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$24$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$693$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$27$: int, inline$BDLGetDebugLevel$689$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoSetNextIrpStackLocation$8$myVar_0: int, inline$BDLGetDebugLevel$459$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12: int, inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IoSetNextIrpStackLocation$2$myVar_0: int, inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$: int, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8: int, inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$132$myVar_1: int, inline$IoGetCurrentIrpStackLocation$132$myVar_0: int, inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$BDLGetDebugLevel$46$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetCurrentIrpStackLocation$115$myVar_0: int, inline$IoGetCurrentIrpStackLocation$115$myVar_1: int, inline$BDLGetDebugLevel$370$myNondetVar_0: int, inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLSystemPowerIoCompletion$27$myNondetVar_0: int, inline$BDLGetDebugLevel$13$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$61$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$1$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$: int, inline$IoGetCurrentIrpStackLocation$82$myVar_0: int, inline$IoGetCurrentIrpStackLocation$82$myVar_1: int, inline$BDLGetDebugLevel$740$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$419$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$770$myNondetVar_0: int, inline$BDLGetDebugLevel$327$myNondetVar_0: int, inline$BDLGetDebugLevel$139$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$29$: int, inline$BDLPnPStart$0$$result.DbgPrint$2005.0$28$: int, inline$BDLGetDebugLevel$162$myNondetVar_0: int, inline$BDLGetDebugLevel$440$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$707$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1: int, inline$IoSetNextIrpStackLocation$15$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLSystemPowerIoCompletion$5$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetNextIrpStackLocation$6$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.IoSetDeviceInterfaceState$2406.29$14$: int, inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$63$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLGetDebugLevel$790$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$25$myVar_1: int, inline$IoGetCurrentIrpStackLocation$25$myVar_0: int, inline$IoGetCurrentIrpStackLocation$18$myNondetVar_0: int, inline$BDLGetDebugLevel$292$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4: int, inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8: int, inline$storm_PoCallDriver$5$$result.storm_IoCallDriver$499.27$2$: int, inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$372$myNondetVar_0: int, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0: int, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1: int, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2: int, inline$BDLGetDebugLevel$646$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$268$myNondetVar_0: int, inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$3$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$707$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLPnPCancelStop$0$$result.BDLCallLowerLevelDriverAndWait$2148.43$13$: int, inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStop$0$$result.DbgPrint$2231.0$28$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$55$myVar_0: int, inline$IoGetCurrentIrpStackLocation$55$myVar_1: int, inline$BDLGetDebugLevel$720$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12: int, inline$BDLCleanupDataHandles$1$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$10$myNondetVar_0: int, inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$154$havoc_stringTemp: int, inline$BDLGetDebugLevel$531$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$9$: int, inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$20$: int, inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$106$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$130$myVar_1: int, inline$BDLGetDebugLevel$801$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$694$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$382$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$126$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$43$havoc_stringTemp: int, inline$BDLGetDebugLevel$616$myNondetVar_0: int, inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$: int, inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$301$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$425$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$264$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$129$myNondetVar_0: int, inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$12$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$22$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_PoCallDriver$104.29$3$: int, inline$IoGetNextIrpStackLocation$9$myVar_0: int, inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0: int, inline$BDLGetDebugLevel$356$myNondetVar_0: int, inline$BDLGetDebugLevel$182$myNondetVar_0: int, inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$23$: int, inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$16$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$121$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$29$$callresult.$1687.68$15$: int, inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$: int, inline$BDLGetDebugLevel$274$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLGetDebugLevel$203$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$661$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$713$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$: int, inline$IoSetNextIrpStackLocation$7$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$206$myNondetVar_0: int, inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$15$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$9$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$4$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$: int, inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$36$myVar_1: int, inline$IoGetCurrentIrpStackLocation$36$myVar_0: int, inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$353$myNondetVar_0: int, inline$BDLGetDebugLevel$753$myNondetVar_0: int, inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLPnPStop$0$$result.BDLCallLowerLevelDriverAndWait$2227.43$26$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$562$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$61$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$132$myNondetVar_0: int, inline$BDLGetDebugLevel$654$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$748$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$: int, inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$: int, inline$BDLGetDebugLevel$234$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$25$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$209$myNondetVar_0: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$: int, inline$BDLGetDebugLevel$104$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$154$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$: int, inline$IoGetCurrentIrpStackLocation$126$havoc_stringTemp: int, inline$RemoveHeadList$1$myNondetVar_0: int, inline$BDLPnPStop$0$myNondetVar_0: int, inline$BDLGetDebugLevel$271$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$3$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$57$: int, inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$: int, inline$BDLGetDebugLevel$149$myNondetVar_0: int, inline$BDLGetDebugLevel$645$myNondetVar_0: int, inline$BDLGetDebugLevel$764$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$423$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$715$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$149$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$0$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$112$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$726$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$106$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$154$myVar_1: int, inline$IoGetCurrentIrpStackLocation$154$myVar_0: int, inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$: int, inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLDevicePowerIoCompletion$21$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$RemoveHeadList$5$$result.RemoveHeadList$8121.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$102$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$4$: int, inline$BDLGetDebugLevel$469$myNondetVar_0: int, inline$BDLGetDebugLevel$588$myNondetVar_0: int, inline$BDLGetDebugLevel$514$myNondetVar_0: int, inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLGetDebugLevel$291$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$: int, inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$273$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$22$myVar_0: int, inline$IoGetCurrentIrpStackLocation$22$myVar_1: int, inline$BDLGetFirstHandle$1$myNondetVar_0: int, inline$BDLGetFirstHandle$1$myNondetVar_1: int, inline$BDLSystemPowerIoCompletion$16$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$750$myNondetVar_0: int, inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$: int, inline$BDLPnP$0$$result.DbgPrint$987.0$37$: int, inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$: int, inline$BDLGetDebugLevel$599$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$157$myNondetVar_0: int, inline$BDLGetDebugLevel$528$myNondetVar_0: int, inline$BDLGetDebugLevel$106$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$359$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$230$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$RemoveHeadList$3$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$13$$callresult.$1687.68$15$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$: int, inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$441$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$710$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$92$myVar_1: int, inline$IoGetCurrentIrpStackLocation$92$myVar_0: int, inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$34$: int, inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8_.1: int, inline$BDLGetDebugLevel$410$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$136$myNondetVar_0: int, inline$BDLPnPRemove$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$243$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$20$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$: int, inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$145$myVar_1: int, inline$IoGetCurrentIrpStackLocation$145$myVar_0: int, inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$34$: int, inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$40$: int, inline$IoGetCurrentIrpStackLocation$24$myVar_0: int, inline$IoGetCurrentIrpStackLocation$24$myVar_1: int, inline$BDLGetDebugLevel$113$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$20$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$: int, inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$798$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$15$: int, inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$2$tempBoogie0: int, inline$IoSetNextIrpStackLocation$13$tempBoogie0: int, inline$BDLCallDriverCompletionRoutine$3$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$0$$result.memcpy$25110.4$3$: int, inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLGetDebugLevel$456$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$40$: int, inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$92$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$686$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$571$myNondetVar_0: int, inline$BDLGetDebugLevel$198$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$650$myNondetVar_0: int, inline$BDLGetDebugLevel$724$myNondetVar_0: int, inline$BDLGetDebugLevel$164$myNondetVar_0: int, inline$BDLGetDebugLevel$393$myNondetVar_0: int, inline$BDLGetDebugLevel$376$myNondetVar_0: int, inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$11$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$570$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$9$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$206$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$18$myVar_1: int, inline$IoGetCurrentIrpStackLocation$18$myVar_0: int, inline$BDLGetDebugLevel$549$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$myNondetVar_0: int, inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$BDLGetDebugLevel$388$myNondetVar_0: int, inline$BDLGetDebugLevel$529$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$144$myNondetVar_0: int, inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$204$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$91$myVar_0: int, inline$IoGetCurrentIrpStackLocation$121$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$15$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$138$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$277$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$4$myVar_0: int, inline$IoSetNextIrpStackLocation$10$havoc_stringTemp: int, inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$77$myVar_0: int, inline$IoGetCurrentIrpStackLocation$77$myVar_1: int, inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1: int, inline$IoGetCurrentIrpStackLocation$135$myVar_0: int, inline$IoGetCurrentIrpStackLocation$135$myVar_1: int, inline$BDLGetDebugLevel$614$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$49$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$285$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$93$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$IoGetNextIrpStackLocation$8$myVar_0: int, inline$BDLGetDebugLevel$672$myNondetVar_0: int, inline$BDLGetDebugLevel$762$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$4$: int, inline$IoSetNextIrpStackLocation$6$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$26$myNondetVar_0: int, inline$BDLGetDebugLevel$730$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLGetDebugLevel$727$myNondetVar_0: int, inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8: int, inline$BDLGetDebugLevel$304$myNondetVar_0: int, inline$BDLGetDebugLevel$393$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelStop$0$havoc_stringTemp: int, inline$BDLGetDebugLevel$612$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$130$myVar_0: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$: int, inline$BDLGetDebugLevel$392$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPStop$0$$result.DbgPrint$2243.0$44$: int, inline$storm_getThreadID$4$tid: int, inline$BDLDevicePowerIoCompletion$17$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$522$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$30$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$543$myNondetVar_0: int, inline$BDLGetDebugLevel$335$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$436$myNondetVar_0: int, inline$BDLGetDebugLevel$390$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$22$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoSetNextIrpStackLocation$14$tempBoogie0: int, inline$IoGetCurrentIrpStackLocation$37$myVar_0: int, inline$IoGetCurrentIrpStackLocation$37$myVar_1: int, inline$BDLGetDebugLevel$39$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$0$$result.IoSetDeviceInterfaceState$2406.29$14$: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$0$myNondetVar_0: int, inline$BDLGetDebugLevel$84$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$51$myNondetVar_0: int, inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$: int, inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$16$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$: int, inline$BDLGetDebugLevel$462$myNondetVar_0: int, inline$BDLGetDebugLevel$32$myNondetVar_0: int, inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4_.1: int, inline$BDLCleanupNotificationStruct$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$15$: int, inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$245$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$: int, inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp: int, inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLSystemPowerIoCompletion$7$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPRemove$0$$status$5$2484.16$BDLPnPRemove$16: int, inline$BDLGetDebugLevel$631$myNondetVar_0: int, inline$BDLGetDebugLevel$52$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLGetDebugLevel$181$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLDevicePowerIoCompletion$10$$result.memset$1683.8$14$: int, inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_IoCallDriver$108.29$4$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$32$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$324$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$336$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$358$myNondetVar_0: int, inline$BDLGetDebugLevel$406$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$17$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$116$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$: int, inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$46$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$702$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$290$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0: int, inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$: int, inline$IoGetCurrentIrpStackLocation$9$havoc_stringTemp: int, inline$BDLGetDebugLevel$338$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp: int, inline$BDLPnPStop$0$$result.DbgPrint$2190.0$8$: int, inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$23$: int, inline$BDLPnPQueryRemove$0$$result.BDLCallLowerLevelDriverAndWait$2287.43$14$: int, inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4: int, inline$BDLGetDebugLevel$658$myNondetVar_0: int, inline$BDLGetDebugLevel$30$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$: int, inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$219$myNondetVar_0: int, inline$BDLGetFirstHandle$0$myNondetVar_1: int, inline$BDLGetFirstHandle$0$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$802$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$520$myNondetVar_0: int, inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$508$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$2$myVar_1: int, inline$IoGetCurrentIrpStackLocation$2$myVar_0: int, inline$BDLGetDebugLevel$195$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$: int, inline$storm_getThreadID$1$tid: int, inline$BDLGetDebugLevel$559$myNondetVar_0: int, inline$BDLGetDebugLevel$169$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$474$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLGetDebugLevel$124$myNondetVar_0: int, inline$BDLGetDebugLevel$305$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$12$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$660$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$103$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$271$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$: int, inline$BDLGetDebugLevel$12$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$: int, inline$BDLGetDebugLevel$444$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$78$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$39$myVar_0: int, inline$IoGetCurrentIrpStackLocation$39$myVar_1: int, inline$BDLDevicePowerIoCompletion$28$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$19$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$133$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$186$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$: int, inline$IoGetCurrentIrpStackLocation$27$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLGetDebugLevel$796$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$117$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$459$myNondetVar_0: int, inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$: int, inline$BDLDevicePowerIoCompletion$13$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$19$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$9$: int, inline$BDLGetDebugLevel$114$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$21$havoc_stringTemp: int, inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$: int, inline$IoGetCurrentIrpStackLocation$37$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$110$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$: int, inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$571$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$: int, inline$IoGetCurrentIrpStackLocation$34$myVar_1: int, inline$IoGetCurrentIrpStackLocation$34$myVar_0: int, inline$IoGetCurrentIrpStackLocation$7$myNondetVar_0: int, inline$BDLGetDebugLevel$76$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$389$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$IoGetCurrentIrpStackLocation$57$myNondetVar_0: int, inline$BDLGetDebugLevel$655$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$: int, inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$133$myVar_0: int, inline$IoGetCurrentIrpStackLocation$133$myVar_1: int, inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp: int, inline$BDLGetDebugLevel$653$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$684$myNondetVar_0: int, inline$BDLGetDebugLevel$784$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$703$myNondetVar_0: int, inline$BDLGetDebugLevel$212$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLDevicePowerIoCompletion$13$myNondetVar_0: int, inline$BDLGetDebugLevel$213$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$479$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$745$myNondetVar_0: int, inline$BDLGetDebugLevel$443$myNondetVar_0: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$: int, inline$IoGetCurrentIrpStackLocation$47$myVar_1: int, inline$IoGetCurrentIrpStackLocation$47$myVar_0: int, inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$4$$result.memset$1683.8$14$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$396$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$150$havoc_stringTemp: int, inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$765$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IoGetCurrentIrpStackLocation$70$myNondetVar_0: int, inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$29$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$4$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$: int, inline$IoGetCurrentIrpStackLocation$87$myVar_1: int, inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$91$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$58$myVar_1: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$34$: int, inline$BDLGetDebugLevel$422$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$37$: int, inline$BDLDevicePowerIoCompletion$6$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$123$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$298$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$95$myVar_0: int, inline$IoGetCurrentIrpStackLocation$95$myVar_1: int, inline$BDLGetDebugLevel$693$myNondetVar_0: int, inline$BDLGetDebugLevel$559$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$445$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$118$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$68$myNondetVar_0: int, inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$267$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp: int, inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4_.1: int, inline$BDLDevicePowerIoCompletion$4$$callresult.$1687.68$15$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$: int, inline$IoGetCurrentIrpStackLocation$128$myNondetVar_0: int, inline$BDLGetDebugLevel$248$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$791$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$221$myNondetVar_0: int, inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$10$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8: int, inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$: int, inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12: int, inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$3$: int, inline$BDLGetDebugLevel$795$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$: int, inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$: int, inline$BDLGetDebugLevel$625$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$29$myVar_1: int, inline$IoGetCurrentIrpStackLocation$29$myVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$20$: int, inline$BDLDevicePowerIoCompletion$23$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$24$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$691$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8: int, inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$: int, inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetNextIrpStackLocation$0$havoc_stringTemp: int, inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$20$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$320$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$746$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$295$myNondetVar_0: int, inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$72$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$34$: int, inline$IoSetNextIrpStackLocation$6$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$4$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$558$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$244$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetNextIrpStackLocation$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$4$: int, inline$BDLPnPCancelRemove$0$$result.IoSetDeviceInterfaceState$2349.38$25$: int, inline$IoGetCurrentIrpStackLocation$2$havoc_stringTemp: int, inline$BDLGetDebugLevel$218$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$18$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$34$: int, inline$IoGetCurrentIrpStackLocation$5$havoc_stringTemp: int, inline$BDLPnPStart$0$$result.DbgPrint$2005.0$33$: int, inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLGetDebugLevel$385$myNondetVar_0: int, inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1: int, inline$IoGetCurrentIrpStackLocation$125$havoc_stringTemp: int, inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$627$myNondetVar_0: int, inline$BDLGetDebugLevel$568$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$5$myVar_0: int, inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$0$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$myNondetVar_1: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$334$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$: int, inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$: int, inline$BDLGetDebugLevel$136$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp: int, inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$330$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$677$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8: int, inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12_.1: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$443$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$50$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$17$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$4$: int, inline$BDLCallDriverCompletionRoutine$29$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$29$: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$15$: int, inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$29$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$15$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$IoGetNextIrpStackLocation$4$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$23$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$253$myNondetVar_0: int, inline$BDLGetDebugLevel$498$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$: int, inline$BDLGetDebugLevel$85$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$9$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$336$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$: int, inline$IoGetCurrentIrpStackLocation$138$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$27$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$: int, inline$IoGetCurrentIrpStackLocation$26$myVar_0: int, inline$IoGetCurrentIrpStackLocation$26$myVar_1: int, inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$15$: int, inline$BDLGetDebugLevel$372$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$653$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$4$: int, inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4: int, inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$: int, inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$642$myNondetVar_0: int, inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12: int, inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$: int, inline$IoGetCurrentIrpStackLocation$56$myVar_1: int, inline$IoGetCurrentIrpStackLocation$56$myVar_0: int, inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$6$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLHandleRemove$1$$callresult.$2419.71$15$: int, inline$BDLGetDebugLevel$418$myNondetVar_0: int, inline$BDLGetDebugLevel$49$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$543$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$106$myVar_0: int, inline$IoGetCurrentIrpStackLocation$106$myVar_1: int, inline$BDLGetDebugLevel$452$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$45$: int, inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$387$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$101$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$627$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$: int, inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp: int, inline$BDLGetDebugLevel$557$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$360$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$: int, inline$BDLGetDebugLevel$251$myNondetVar_0: int, inline$BDLGetDebugLevel$460$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$29$: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$: int, inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$383$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$0$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24: int, inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoGetCurrentIrpStackLocation$27$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$26$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$: int, inline$IoGetCurrentIrpStackLocation$144$havoc_stringTemp: int, inline$BDLGetDebugLevel$449$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$3$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$546$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$5$havoc_stringTemp: int, inline$BDLGetDebugLevel$383$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$134$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$: int, inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoCopyCurrentIrpStackLocationToNext$4$$result.memcpy$25110.4$3$: int, inline$BDLDevicePowerIoCompletion$25$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$237$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$325$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$199$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$4$: int, inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4: int, inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLGetDebugLevel$121$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$795$myNondetVar_0: int, inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$17$: int, inline$BDLGetDebugLevel$16$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$327$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$: int, inline$IoGetCurrentIrpStackLocation$87$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$48$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$117$myVar_0: int, inline$IoGetCurrentIrpStackLocation$117$myVar_1: int, inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$711$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$: int, inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$701$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$142$myVar_0: int, inline$IoGetCurrentIrpStackLocation$142$myVar_1: int, inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$57$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$29$: int, inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$663$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$123$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$26$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$17$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$4$: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$29$: int, inline$IoGetCurrentIrpStackLocation$15$myNondetVar_0: int, inline$BDLGetDebugLevel$60$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$545$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLGetDebugLevel$757$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$: int, inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLHandleRemove$1$$callresult.$2437.63$27$: int, inline$BDLGetDebugLevel$339$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$19$myVar_0: int, inline$IoGetCurrentIrpStackLocation$19$myVar_1: int, inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$5$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$60$myVar_0: int, inline$IoGetCurrentIrpStackLocation$60$myVar_1: int, inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$: int, inline$IoSetNextIrpStackLocation$1$myVar_0: int, inline$BDLGetDebugLevel$674$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$695$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$27$myVar_1: int, inline$IoGetCurrentIrpStackLocation$27$myVar_0: int, inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$293$myNondetVar_0: int, inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLCleanupDataHandles$0$$irql$6$3249.28$BDLCleanupDataHandles$4: int, inline$IoGetCurrentIrpStackLocation$95$myNondetVar_0: int, inline$BDLGetDebugLevel$680$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$482$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$466$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$685$myNondetVar_0: int, inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLCallDriverCompletionRoutine$27$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$592$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLGetDebugLevel$524$myNondetVar_0: int, inline$BDLGetDebugLevel$282$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$15$: int, inline$BDLCleanupNotificationStruct$1$$callresult.$3172.84$15$: int, inline$BDLSystemPowerIoCompletion$2$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$438$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$4$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$220$myNondetVar_0: int, inline$BDLGetDebugLevel$366$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$: int, inline$BDLGetDebugLevel$111$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$14$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$: int, inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$123$myVar_1: int, inline$IoGetCurrentIrpStackLocation$123$myVar_0: int, inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12_.1: int, inline$BDLGetDebugLevel$300$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLPnPStop$0$$result.IoSetDeviceInterfaceState$2199.29$13$: int, $irp$1$96.7$storm_main$0: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$: int, inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$18$: int, inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$341$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$121$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$137$myVar_0: int, inline$IoGetCurrentIrpStackLocation$137$myVar_1: int, inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4: int, inline$BDLSystemPowerIoCompletion$15$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLSystemPowerIoCompletion$8$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLGetDebugLevel$191$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetNextIrpStackLocation$11$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$19$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$90$myNondetVar_0: int, inline$BDLGetDebugLevel$278$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$156$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp: int, inline$BDLGetDebugLevel$486$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnP$0$$IoAcquireRemoveLockEx.arg.3$15$: int, inline$BDLGetDebugLevel$10$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$160$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$IsListEmpty$1$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$20$: int, inline$BDLGetDebugLevel$677$myNondetVar_0: int, inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$32$myVar_1: int, inline$IoGetCurrentIrpStackLocation$32$myVar_0: int, inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$270$myNondetVar_0: int, inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$16$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$: int, inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$: int, inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$18$: int, inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$242$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$IoGetCurrentIrpStackLocation$16$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$97$myVar_0: int, inline$IoGetCurrentIrpStackLocation$97$myVar_1: int, inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$83$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$18$: int, inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$IoSetNextIrpStackLocation$12$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$34$: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$8$: int, inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLCallDriverCompletionRoutine$16$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$18$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoSetNextIrpStackLocation$0$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLGetDebugLevel$88$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$17$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$: int, inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$: int, inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$735$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$: int, inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLGetDebugLevel$77$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$496$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$45$: int, inline$BDLGetDebugLevel$621$myNondetVar_0: int, inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$: int, inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4: int, inline$BDLPnP$0$myVar_0: int, inline$BDLGetDebugLevel$255$myNondetVar_0: int, inline$BDLGetDebugLevel$487$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$413$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$10$myVar_0: int, inline$BDLGetDebugLevel$333$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$592$myNondetVar_0: int, inline$BDLGetDebugLevel$632$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$15$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$: int, inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4_.1: int, inline$BDLGetDebugLevel$484$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$484$myNondetVar_0: int, inline$BDLGetDebugLevel$245$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$24$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$113$myVar_0: int, inline$IoGetCurrentIrpStackLocation$113$myVar_1: int, inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$598$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$: int, inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$719$myNondetVar_0: int, inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$CallCompletionRoutine$13$myNondetVar_0: int, inline$BDLGetDebugLevel$162$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$: int, inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$: int, inline$BDLGetDebugLevel$552$myNondetVar_0: int, inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$29$: int, inline$BDLGetDebugLevel$257$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$: int, inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$: int, inline$IoGetCurrentIrpStackLocation$6$myVar_1: int, inline$IoGetCurrentIrpStackLocation$6$myVar_0: int, inline$IoGetCurrentIrpStackLocation$110$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLGetDebugLevel$600$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$15$: int, inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$449$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$30$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$78$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLCallDriverCompletionRoutine$25$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$27$$result.PoRequestPowerIrp$1410.31$27$: int, inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4: int, inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$81$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$661$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$79$havoc_stringTemp: int, inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12: int, inline$BDLSystemPowerIoCompletion$24$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$622$myNondetVar_0: int, inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$: int, inline$IoSkipCurrentIrpStackLocation$1$myVar_0: int, inline$IoSkipCurrentIrpStackLocation$1$myVar_1: int, inline$BDLGetDebugLevel$164$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4: int, inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$61$havoc_stringTemp: int, inline$BDLGetDebugLevel$411$myNondetVar_0: int, inline$BDLGetDebugLevel$526$myNondetVar_0: int, inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4: int, inline$IoSetNextIrpStackLocation$9$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$9$: int, inline$BDLSystemPowerIoCompletion$6$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$: int, inline$IoGetCurrentIrpStackLocation$8$myVar_1: int, inline$IoGetCurrentIrpStackLocation$8$myVar_0: int, inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$BDLDevicePowerIoCompletion$13$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp: int, inline$BDLGetDebugLevel$87$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$18$: int, inline$BDLGetDebugLevel$15$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$: int, inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12: int, inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$721$myNondetVar_0: int, inline$BDLGetDebugLevel$802$myNondetVar_0: int, inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$IoGetCurrentIrpStackLocation$76$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$89$myNondetVar_0: int, inline$BDLGetDebugLevel$467$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$736$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$: int, inline$BDLSystemPowerIoCompletion$18$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8: int, inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$: int, inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12_.1: int, inline$IoGetCurrentIrpStackLocation$11$myVar_0: int, inline$BDLGetDebugLevel$608$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4: int, inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$454$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$101$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$: int, inline$BDLDevicePowerIoCompletion$22$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLDevicePowerIoCompletion$2$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$storm_IoAllocateIrp$0$$result.malloc$279.0$4$: int, inline$BDLGetDebugLevel$179$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$: int, inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$514$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1: int, inline$BDLGetDebugLevel$215$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$21$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$23$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$: int, inline$BDLGetDebugLevel$741$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$738$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$34$: int, inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$173$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$29$: int, inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$9$: int, inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$: int, inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12: int, inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$34$: int, inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$757$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$: int, inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$: int, inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLGetDebugLevel$674$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8: int, inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$675$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$705$myNondetVar_0: int, inline$BDLGetDebugLevel$778$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$759$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$BDLSystemPowerIoCompletion$13$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$744$myNondetVar_0: int, inline$BDLGetDebugLevel$315$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$711$myNondetVar_0: int, inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8: int, inline$BDLGetDebugLevel$226$myNondetVar_0: int, inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4: int, inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$46$: int, inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$554$myNondetVar_0: int, inline$BDLGetDebugLevel$594$myNondetVar_0: int, inline$BDLGetDebugLevel$12$myNondetVar_0: int, inline$BDLGetDebugLevel$704$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$: int, inline$BDLDevicePowerIoCompletion$1$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$29$: int, inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$14$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$656$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$15$: int, inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$21$: int, inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12: int, inline$storm_IoCallDriver$13$$result.storm_IoCallDriver$456.0$1$: int, inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$34$: int, inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$134$myVar_1: int, inline$IoGetCurrentIrpStackLocation$134$myVar_0: int, inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$13$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLGetDebugLevel$180$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$107$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$52$: int, inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$: int, inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$82$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLPnPCancelStop$0$$result.BDLPnPCancelStop$2130.0$1$: int, inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$: int, inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$: int, inline$IoGetCurrentIrpStackLocation$4$myNondetVar_0: int, inline$BDLPnPStart$0$$result.DbgPrint$1966.0$8$: int, inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLGetDebugLevel$152$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$: int, inline$BDLGetDebugLevel$537$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$23$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$590$myNondetVar_0: int, inline$BDLGetDebugLevel$655$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$40$myNondetVar_0: int, inline$BDLGetDebugLevel$137$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$646$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$: int, inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$78$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$34$: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$: int, inline$IoGetCurrentIrpStackLocation$46$havoc_stringTemp: int, inline$CallCompletionRoutine$16$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$result.PoRequestPowerIrp$1410.31$27$: int, inline$IoGetCurrentIrpStackLocation$114$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$21$$callresult.$1687.68$15$: int, inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLGetDebugLevel$342$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$: int, inline$BDLGetDebugLevel$688$myNondetVar_0: int, inline$BDLGetDebugLevel$42$myNondetVar_0: int, inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$: int, inline$BDLGetDebugLevel$682$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$106$havoc_stringTemp: int, inline$CallCompletionRoutine$29$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$2$: int, inline$BDLGetDebugLevel$381$myNondetVar_0: int, inline$BDLGetDebugLevel$760$myNondetVar_0: int, inline$storm_IoCallDriver$1$$result.storm_IoCallDriver$456.0$1$: int, inline$BDLGetDebugLevel$708$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$135$havoc_stringTemp: int, inline$RemoveHeadList$4$myNondetVar_0: int, inline$BDLGetDebugLevel$280$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$583$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$18$: int, inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1: int, inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$40$: int, inline$BDLGetDebugLevel$728$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeAcquireSpinLock$4$$result.storm_getThreadID$128.29$1$: int, inline$BDLDevicePowerIoCompletion$27$$result.memset$1683.8$14$: int, inline$BDLGetDebugLevel$5$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$74$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.memset$1683.8$14$: int, inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8: int, inline$BDLGetDebugLevel$47$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$: int, inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$40$: int, inline$BDLSystemPowerIoCompletion$7$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$: int, inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$: int, inline$BDLDevicePowerIoCompletion$27$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$7$$callresult.$1687.68$15$: int, inline$BDLGetDebugLevel$97$myNondetVar_0: int, inline$IoSetNextIrpStackLocation$3$myNondetVar_0: int, inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12: int, inline$BDLCallDriverCompletionRoutine$2$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLGetDebugLevel$100$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$45$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$9$: int, inline$BDLGetDebugLevel$566$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$: int, inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1: int, inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$773$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$101$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$: int, inline$BDLGetDebugLevel$340$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$199$myNondetVar_0: int, inline$BDLGetDebugLevel$365$myNondetVar_0: int, inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$684$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$32$: int, inline$BDLGetDebugLevel$152$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$58$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$118$havoc_stringTemp: int, inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$23$: int, inline$BDLGetDebugLevel$535$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8: int, inline$BDLGetDebugLevel$265$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$: int, inline$BDLGetDebugLevel$572$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp: int, inline$BDLGetDebugLevel$462$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$34$: int, inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLGetDebugLevel$781$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$45$: int, inline$IoGetCurrentIrpStackLocation$9$myNondetVar_0: int, inline$BDLGetDebugLevel$55$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$29$: int, inline$BDLGetDebugLevel$373$myNondetVar_0: int, inline$BDLCleanupDataHandles$1$myNondetVar_0: int, inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$IoGetCurrentIrpStackLocation$44$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLGetDebugLevel$466$myNondetVar_0: int, inline$BDLGetDebugLevel$744$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$34$: int, inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_PoCallDriver$104.29$3$: int, inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$23$: int, inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$23$: int, inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$: int, inline$IoSetNextIrpStackLocation$13$havoc_stringTemp: int, inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$7$: int, inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLGetDebugLevel$175$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$565$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$: int, inline$IoGetCurrentIrpStackLocation$1$myVar_0: int, inline$IoGetCurrentIrpStackLocation$1$myVar_1: int, inline$BDLGetDebugLevel$671$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4: int, inline$BDLGetDebugLevel$533$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLCleanupDataHandles$0$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4: int, inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$758$myNondetVar_0: int, inline$BDLPnPStart$0$$result.DbgPrint$1979.0$15$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetCurrentIrpStackLocation$45$myVar_1: int, inline$IoGetCurrentIrpStackLocation$45$myVar_0: int, inline$BDLDevicePowerIoCompletion$18$$callresult.$1687.68$15$: int, inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$635$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$: int, inline$BDLGetDebugLevel$407$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLGetDebugLevel$507$myNondetVar_0: int, inline$BDLGetDebugLevel$286$myNondetVar_0: int, inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$101$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$87$myVar_0: int, inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$: int, inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12_.1: int, inline$BDLGetDebugLevel$585$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$4$myVar_1: int, inline$IoGetCurrentIrpStackLocation$4$myVar_0: int, inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$3$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$46$myNondetVar_0: int, inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$248$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$29$: int, inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$: int, inline$BDLGetDebugLevel$242$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$: int, inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$154$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_0: int, inline$storm_IoCancelIrp$0$myNondetVar_1: int, inline$CallCompletionRoutine$22$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$7$myVar_1: int, inline$BDLGetDebugLevel$337$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$40$: int, inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$797$myNondetVar_0: int, inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$20$: int, inline$IoGetNextIrpStackLocation$7$myVar_0: int, inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4: int, inline$BDLDevicePowerIoCompletion$8$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$368$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$703$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$27$$result.IoGetCurrentIrpStackLocation$1661.86$2$: int, inline$BDLGetDebugLevel$504$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4: int, inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$: int, inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$: int, inline$IoGetNextIrpStackLocation$12$myVar_0: int, inline$BDLGetDebugLevel$448$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$137$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1: int, inline$IoGetCurrentIrpStackLocation$106$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4: int, inline$BDLGetDebugLevel$321$myNondetVar_0: int, inline$BDLGetDebugLevel$518$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12: int, inline$BDLGetDebugLevel$536$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$25$myNondetVar_0: int, inline$BDLGetDebugLevel$463$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$14$havoc_stringTemp: int, inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1: int, inline$BDLGetDebugLevel$698$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$561$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$645$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$145$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$108$myNondetVar_0: int, inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$: int, inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLPnPStart$0$$result.IoSetDeviceInterfaceState$2033.38$41$: int, inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$313$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$0$$callresult.$1687.68$15$: int, inline$BDLSystemPowerIoCompletion$2$$result.PoRequestPowerIrp$1410.31$27$: int, inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$: int, inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$BDLDevicePowerIoCompletion$17$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12: int, inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$: int, inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$IoGetCurrentIrpStackLocation$29$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$40$: int, inline$IoGetCurrentIrpStackLocation$81$havoc_stringTemp: int, inline$IoSetNextIrpStackLocation$7$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLGetDebugLevel$178$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$11$$callresult.$1687.68$15$: int, inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4_.1: int, inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$9$: int, inline$IoGetCurrentIrpStackLocation$121$myVar_1: int, inline$IoGetCurrentIrpStackLocation$121$myVar_0: int, inline$BDLGetDebugLevel$361$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1: int, inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$IoGetCurrentIrpStackLocation$149$myVar_1: int, inline$IoGetCurrentIrpStackLocation$149$myVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$4$: int, inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8_.1: int, inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0: int, inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$159$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$24$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$777$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1: int, inline$BDLGetDebugLevel$431$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$15$: int, inline$CallCompletionRoutine$10$myNondetVar_0: int, inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$: int, inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$: int, inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$: int, inline$BDLGetDebugLevel$148$myNondetVar_0: int, inline$BDLCallDriverCompletionRoutine$17$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLGetDebugLevel$534$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLDevicePowerIoCompletion$27$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$9$: int, inline$BDLCallLowerLevelDriverAndWait$2$havoc_stringTemp: int, inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8_.1: int, inline$BDLSystemPowerIoCompletion$26$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$391$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$: int, inline$BDLDevicePowerIoCompletion$1$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$: int, inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$: int, inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4: int, inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12: int, inline$IoGetCurrentIrpStackLocation$57$havoc_stringTemp: int, inline$BDLGetDebugLevel$134$myNondetVar_0: int, inline$BDLGetDebugLevel$346$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0: int, inline$BDLGetDebugLevel$706$myNondetVar_0: int, inline$BDLGetDebugLevel$476$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$398$myNondetVar_0: int, inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1: int, inline$storm_PoCallDriver$2$$result.storm_IoCallDriver$499.27$2$: int, inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$: int, inline$BDLGetDebugLevel$112$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$648$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp: int, inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLSystemPowerIoCompletion$1331.0$1$: int, inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$: int, inline$BDLSystemPowerIoCompletion$25$$result.PoRequestPowerIrp$1410.31$27$: int, inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$: int, inline$BDLGetDebugLevel$70$$result.BDLGetDebugLevel$39.0$1$: int, inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4: int, inline$BDLGetDebugLevel$560$$result.BDLGetDebugLevel$39.0$1$: int, inline$IoGetCurrentIrpStackLocation$32$$result.IoGetCurrentIrpStackLocation$24489.0$1$: int, inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$1$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$18$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4: int, inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$IoGetCurrentIrpStackLocation$34$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$145$havoc_stringTemp: int, inline$BDLGetDebugLevel$777$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$563$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLReleaseHandleList$0$myNondetVar_1: int, inline$BDLReleaseHandleList$0$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$: int, inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_KeWaitForSingleObject$116.38$5$: int, inline$BDLDevicePowerIoCompletion$21$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12: int, inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8: int, inline$BDLPnPQueryStop$0$$irql$5$2082.16$BDLPnPQueryStop$12: int, inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$40$: int, inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$34$: int, inline$BDLGetDebugLevel$93$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$: int, inline$BDLGetDebugLevel$517$myNondetVar_0: int, inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1: int, inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1: int, inline$BDLGetDebugLevel$480$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$4$: int, inline$BDLGetDebugLevel$181$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$: int, inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12: int, inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$9$: int, inline$BDLDevicePowerIoCompletion$7$$result.BDLDevicePowerIoCompletion$1651.0$1$: int, inline$BDLGetDebugLevel$352$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12: int, inline$BDLGetDebugLevel$542$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLGetDebugLevel$691$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12: int, inline$BDLGetDebugLevel$357$myNondetVar_0: int, inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1: int, inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8_.1: int, inline$BDLPnP$0$$result.DbgPrint$1023.0$54$: int, inline$BDLPnPSurpriseRemoval$0$$result.BDLPnPSurpriseRemoval$2527.0$1$: int, inline$BDLCallDriverCompletionRoutine$18$$result.BDLCallDriverCompletionRoutine$46.0$1$: int, inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$32$: int, inline$BDLGetDebugLevel$644$myNondetVar_0: int, inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$: int, inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$: int, inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12: int, inline$IoGetCurrentIrpStackLocation$7$myVar_0: int, inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$: int, inline$BDLGetDebugLevel$465$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$29$: int, inline$BDLGetDebugLevel$91$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp: int, inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$: int, inline$IoGetCurrentIrpStackLocation$141$myNondetVar_0: int, inline$BDLGetDebugLevel$488$myNondetVar_0: int, inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12_.1: int, inline$BDLGetDebugLevel$146$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20: int, inline$BDLGetDebugLevel$468$myNondetVar_0: int, inline$BDLGetDebugLevel$1$myNondetVar_0: int, inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4: int, inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$: int, inline$BDLSystemPowerIoCompletion$22$myNondetVar_0: int, inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$23$: int, inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8: int, inline$BDLGetDebugLevel$26$$result.BDLGetDebugLevel$39.0$1$: int, inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8: int, inline$BDLGetDebugLevel$155$$result.BDLGetDebugLevel$39.0$1$: int, inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1: int, inline$BDLDevicePowerIoCompletion$14$$result.memset$1683.8$14$: int, inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$9$: int;
+
+ start#1:
+ __storm_thread_done_1 := false;
+ __storm_thread_done_2 := false;
+ __storm_thread_done_3 := false;
+ __storm_thread_done_4 := false;
+ k := 0;
+ errorReached := false;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto label_3#1;
+
+ label_3#1:
+ goto label_4#1;
+
+ label_4#1:
+ goto label_5#1;
+
+ label_5#1:
+ __storm_atomic := true;
+ __storm_init := true;
+ goto label_8#1;
+
+ label_8#1:
+ cancelLockStatus_0 := 0;
+ call contextSwitch();
+ goto label_9#1;
+
+ label_9#1:
+ created_irp_0 := 0;
+ call contextSwitch();
+ goto label_10#1;
+
+ label_10#1:
+ goto inline$storm_IoAllocateIrp$0$Entry#1;
+
+ inline$storm_IoAllocateIrp$0$Entry#1:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8_.1 := 2;
+ goto inline$storm_IoAllocateIrp$0$start#1;
+
+ inline$storm_IoAllocateIrp$0$start#1:
+ inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8 := inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8_.1;
+ goto inline$storm_IoAllocateIrp$0$label_3#1;
+
+ inline$storm_IoAllocateIrp$0$label_3#1:
+ goto inline$storm_IoAllocateIrp$0$label_4#1;
+
+ inline$storm_IoAllocateIrp$0$label_4#1:
+ goto inline$storm_IoAllocateIrp$0$label_5#1;
+
+ inline$storm_IoAllocateIrp$0$label_5#1:
+ call inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$ := storm_nondet();
+ goto inline$storm_IoAllocateIrp$0$label_8#1;
+
+ inline$storm_IoAllocateIrp$0$label_8#1:
+ goto inline$storm_IoAllocateIrp$0$label_8_case_0#1, inline$storm_IoAllocateIrp$0$label_8_case_1#1;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_1#1:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$ == 0;
+ goto inline$storm_IoAllocateIrp$0$label_10#1;
+
+ inline$storm_IoAllocateIrp$0$label_10#1:
+ __storm_atomic := true;
+ goto inline$storm_IoAllocateIrp$0$label_13#1;
+
+ inline$storm_IoAllocateIrp$0$label_13#1:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$279.0$3$ := __HAVOC_malloc(112);
+ goto inline$storm_IoAllocateIrp$0$label_16#1;
+
+ inline$storm_IoAllocateIrp$0$label_16#1:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8 := inline$storm_IoAllocateIrp$0$$result.malloc$279.0$3$;
+ goto inline$storm_IoAllocateIrp$0$label_17#1;
+
+ inline$storm_IoAllocateIrp$0$label_17#1:
+ goto inline$storm_IoAllocateIrp$0$label_18#1;
+
+ inline$storm_IoAllocateIrp$0$label_18#1:
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8) := 0];
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_19#1;
+
+ inline$storm_IoAllocateIrp$0$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8 := 0];
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_20#1;
+
+ inline$storm_IoAllocateIrp$0$label_20#1:
+ havoc raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon6_Then#1, inline$storm_IoAllocateIrp$0$anon6_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon1#1;
+
+ inline$storm_IoAllocateIrp$0$anon1#1:
+ assume INT_LT(0, inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8);
+ goto inline$storm_IoAllocateIrp$0$label_21#1;
+
+ inline$storm_IoAllocateIrp$0$label_21#1:
+ inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$ := MULT(inline$storm_IoAllocateIrp$0$$StackSize$1$271.11$storm_IoAllocateIrp$8, 36);
+ goto inline$storm_IoAllocateIrp$0$label_22#1;
+
+ inline$storm_IoAllocateIrp$0$label_22#1:
+ call inline$storm_IoAllocateIrp$0$$result.malloc$279.0$4$ := __HAVOC_malloc(inline$storm_IoAllocateIrp$0$$malloc.arg.1$5$);
+ goto inline$storm_IoAllocateIrp$0$label_25#1;
+
+ inline$storm_IoAllocateIrp$0$label_25#1:
+ goto inline$storm_IoAllocateIrp$0$label_26#1;
+
+ inline$storm_IoAllocateIrp$0$label_26#1:
+ goto inline$storm_IoAllocateIrp$0$label_27#1;
+
+ inline$storm_IoAllocateIrp$0$label_27#1:
+ goto inline$IoGetNextIrpStackLocation$0$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$0$Entry#1:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8;
+ goto inline$IoGetNextIrpStackLocation$0$start#1;
+
+ inline$IoGetNextIrpStackLocation$0$start#1:
+ inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$0$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$0$label_3_true#1, inline$IoGetNextIrpStackLocation$0$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$0$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$0$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_4#1:
+ call inline$IoGetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$0$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_6#1:
+ call inline$IoGetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$0$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$0$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$0$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$0$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$0$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$0$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$0$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$0$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$0$Return#1;
+
+ inline$IoGetNextIrpStackLocation$0$Return#1:
+ goto inline$storm_IoAllocateIrp$0$label_27$1#1;
+
+ inline$storm_IoAllocateIrp$0$label_27$1#1:
+ goto inline$storm_IoAllocateIrp$0$anon7_Then#1, inline$storm_IoAllocateIrp$0$anon7_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoAllocateIrp$0$anon3#1;
+
+ inline$storm_IoAllocateIrp$0$anon3#1:
+ goto inline$storm_IoAllocateIrp$0$label_30#1;
+
+ inline$storm_IoAllocateIrp$0$label_30#1:
+ goto inline$storm_IoAllocateIrp$0$label_31#1;
+
+ inline$storm_IoAllocateIrp$0$label_31#1:
+ goto inline$storm_IoAllocateIrp$0$label_32#1;
+
+ inline$storm_IoAllocateIrp$0$label_32#1:
+ goto inline$storm_IoAllocateIrp$0$label_33#1;
+
+ inline$storm_IoAllocateIrp$0$label_33#1:
+ goto inline$storm_IoAllocateIrp$0$anon8_Then#1, inline$storm_IoAllocateIrp$0$anon8_Else#1;
+
+ inline$storm_IoAllocateIrp$0$anon8_Else#1:
+ assume __storm_init;
+ goto inline$storm_IoAllocateIrp$0$anon5#1;
+
+ inline$storm_IoAllocateIrp$0$anon8_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAllocateIrp$0$anon5#1;
+
+ inline$storm_IoAllocateIrp$0$anon5#1:
+ call contextSwitch();
+ goto inline$storm_IoAllocateIrp$0$label_36#1;
+
+ inline$storm_IoAllocateIrp$0$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_IoAllocateIrp$0$Return#1;
+
+ inline$storm_IoAllocateIrp$0$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_IoAllocateIrp$0$Return#1;
+
+ inline$storm_IoAllocateIrp$0$label_8_case_0#1:
+ assume inline$storm_IoAllocateIrp$0$$result.storm_nondet$277.22$2$ != 0;
+ goto inline$storm_IoAllocateIrp$0$label_9#1;
+
+ inline$storm_IoAllocateIrp$0$label_9#1:
+ inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8 := 0;
+ goto inline$storm_IoAllocateIrp$0$label_36#1;
+
+ inline$storm_IoAllocateIrp$0$label_36#1:
+ inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$270.0$1$ := inline$storm_IoAllocateIrp$0$$createdIrp$3$275.7$storm_IoAllocateIrp$8;
+ goto inline$storm_IoAllocateIrp$0$label_1#1;
+
+ inline$storm_IoAllocateIrp$0$label_1#1:
+ goto inline$storm_IoAllocateIrp$0$Return#1;
+
+ inline$storm_IoAllocateIrp$0$Return#1:
+ $result.storm_IoAllocateIrp$100.0$1$ := inline$storm_IoAllocateIrp$0$$result.storm_IoAllocateIrp$270.0$1$;
+ goto label_10$1#1;
+
+ label_10$1#1:
+ goto anon10_Then#1, anon10_Else#1;
+
+ anon10_Else#1:
+ assume !raiseException;
+ goto anon1#1;
+
+ anon1#1:
+ goto label_13#1;
+
+ label_13#1:
+ $irp$1$96.7$storm_main$0 := $result.storm_IoAllocateIrp$100.0$1$;
+ goto label_14#1;
+
+ label_14#1:
+ havoc raiseException;
+ goto anon11_Then#1, anon11_Else#1;
+
+ anon11_Else#1:
+ assume !raiseException;
+ goto anon3#1;
+
+ anon3#1:
+ assume INT_NEQ($irp$1$96.7$storm_main$0, 0);
+ goto label_15#1;
+
+ label_15#1:
+ goto inline$IoSetNextIrpStackLocation$0$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$0$Entry#1:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := $irp$1$96.7$storm_main$0;
+ goto inline$IoSetNextIrpStackLocation$0$start#1;
+
+ inline$IoSetNextIrpStackLocation$0$start#1:
+ inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$0$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$0$label_3_true#1, inline$IoSetNextIrpStackLocation$0$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$0$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$0$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_4#1:
+ call inline$IoSetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$0$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_7#1:
+ call inline$IoSetNextIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$0$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$0$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$0$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$0$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_5#1:
+ inline$IoSetNextIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$0$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$0$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$0$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$0$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$0$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$0$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$0$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$0$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$0$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$0$Return#1;
+
+ inline$IoSetNextIrpStackLocation$0$Return#1:
+ goto label_15$1#1;
+
+ label_15$1#1:
+ goto anon12_Then#1, anon12_Else#1;
+
+ anon12_Else#1:
+ assume !raiseException;
+ goto anon5#1;
+
+ anon5#1:
+ goto label_18#1;
+
+ label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$0$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := $irp$1$96.7$storm_main$0;
+ goto inline$IoGetCurrentIrpStackLocation$0$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$start#1:
+ inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$0$label_3_true#1, inline$IoGetCurrentIrpStackLocation$0$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$0$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$0$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$0$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$0$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$0$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$0$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$0$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$0$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$0$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$0$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$0$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$0$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$0$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$0$Return#1:
+ goto label_18$1#1;
+
+ label_18$1#1:
+ goto anon13_Then#1, anon13_Else#1;
+
+ anon13_Else#1:
+ assume !raiseException;
+ goto anon7#1;
+
+ anon7#1:
+ goto label_21#1;
+
+ label_21#1:
+ goto label_22#1;
+
+ label_22#1:
+ goto label_23#1;
+
+ label_23#1:
+ goto inline$myInitDriver$0$Entry#1;
+
+ inline$myInitDriver$0$Entry#1:
+ goto inline$myInitDriver$0$start#1;
+
+ inline$myInitDriver$0$start#1:
+ goto inline$myInitDriver$0$label_3#1;
+
+ inline$myInitDriver$0$label_3#1:
+ goto inline$myInitDriver$0$label_4#1;
+
+ inline$myInitDriver$0$label_4#1:
+ inline$myInitDriver$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(hdevobj)];
+ call contextSwitch();
+ inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4 := inline$myInitDriver$0$myVar_0;
+ goto inline$myInitDriver$0$label_5#1;
+
+ inline$myInitDriver$0$label_5#1:
+ goto inline$myInitDriver$0$label_6#1;
+
+ inline$myInitDriver$0$label_6#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ havoc inline$myInitDriver$0$myNondetVar_1;
+ assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
+ goto inline$storm_KeInitializeSpinLock$0$Entry#1;
+
+ inline$storm_KeInitializeSpinLock$0$Entry#1:
+ inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4);
+ goto inline$storm_KeInitializeSpinLock$0$start#1;
+
+ inline$storm_KeInitializeSpinLock$0$start#1:
+ inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
+ goto inline$storm_KeInitializeSpinLock$0$label_3#1;
+
+ inline$storm_KeInitializeSpinLock$0$label_3#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$0$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
+ call contextSwitch();
+ goto inline$storm_KeInitializeSpinLock$0$label_1#1;
+
+ inline$storm_KeInitializeSpinLock$0$label_1#1:
+ goto inline$storm_KeInitializeSpinLock$0$Return#1;
+
+ inline$storm_KeInitializeSpinLock$0$Return#1:
+ goto inline$myInitDriver$0$label_6$1#1;
+
+ inline$myInitDriver$0$label_6$1#1:
+ goto inline$myInitDriver$0$anon8_Then#1, inline$myInitDriver$0$anon8_Else#1;
+
+ inline$myInitDriver$0$anon8_Else#1:
+ assume !raiseException;
+ goto inline$myInitDriver$0$anon1#1;
+
+ inline$myInitDriver$0$anon1#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ goto inline$myInitDriver$0$label_9#1;
+
+ inline$myInitDriver$0$label_9#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ havoc inline$myInitDriver$0$myNondetVar_1;
+ assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
+ goto inline$storm_KeInitializeSpinLock$1$Entry#1;
+
+ inline$storm_KeInitializeSpinLock$1$Entry#1:
+ inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := ISRControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4));
+ goto inline$storm_KeInitializeSpinLock$1$start#1;
+
+ inline$storm_KeInitializeSpinLock$1$start#1:
+ inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
+ goto inline$storm_KeInitializeSpinLock$1$label_3#1;
+
+ inline$storm_KeInitializeSpinLock$1$label_3#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$1$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
+ call contextSwitch();
+ goto inline$storm_KeInitializeSpinLock$1$label_1#1;
+
+ inline$storm_KeInitializeSpinLock$1$label_1#1:
+ goto inline$storm_KeInitializeSpinLock$1$Return#1;
+
+ inline$storm_KeInitializeSpinLock$1$Return#1:
+ goto inline$myInitDriver$0$label_9$1#1;
+
+ inline$myInitDriver$0$label_9$1#1:
+ goto inline$myInitDriver$0$anon9_Then#1, inline$myInitDriver$0$anon9_Else#1;
+
+ inline$myInitDriver$0$anon9_Else#1:
+ assume !raiseException;
+ goto inline$myInitDriver$0$anon3#1;
+
+ inline$myInitDriver$0$anon3#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ goto inline$myInitDriver$0$label_12#1;
+
+ inline$myInitDriver$0$label_12#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ havoc inline$myInitDriver$0$myNondetVar_1;
+ assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
+ goto inline$storm_KeInitializeSpinLock$2$Entry#1;
+
+ inline$storm_KeInitializeSpinLock$2$Entry#1:
+ inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4));
+ goto inline$storm_KeInitializeSpinLock$2$start#1;
+
+ inline$storm_KeInitializeSpinLock$2$start#1:
+ inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
+ goto inline$storm_KeInitializeSpinLock$2$label_3#1;
+
+ inline$storm_KeInitializeSpinLock$2$label_3#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$2$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
+ call contextSwitch();
+ goto inline$storm_KeInitializeSpinLock$2$label_1#1;
+
+ inline$storm_KeInitializeSpinLock$2$label_1#1:
+ goto inline$storm_KeInitializeSpinLock$2$Return#1;
+
+ inline$storm_KeInitializeSpinLock$2$Return#1:
+ goto inline$myInitDriver$0$label_12$1#1;
+
+ inline$myInitDriver$0$label_12$1#1:
+ goto inline$myInitDriver$0$anon10_Then#1, inline$myInitDriver$0$anon10_Else#1;
+
+ inline$myInitDriver$0$anon10_Else#1:
+ assume !raiseException;
+ goto inline$myInitDriver$0$anon5#1;
+
+ inline$myInitDriver$0$anon5#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ goto inline$myInitDriver$0$label_15#1;
+
+ inline$myInitDriver$0$label_15#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ havoc inline$myInitDriver$0$myNondetVar_1;
+ assume inline$myInitDriver$0$myNondetVar_0 == inline$myInitDriver$0$myNondetVar_1;
+ goto inline$storm_KeInitializeSpinLock$3$Entry#1;
+
+ inline$storm_KeInitializeSpinLock$3$Entry#1:
+ inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$myInitDriver$0$$pBDLExtension$2$5.33$myInitDriver$4);
+ goto inline$storm_KeInitializeSpinLock$3$start#1;
+
+ inline$storm_KeInitializeSpinLock$3$start#1:
+ inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4_.1;
+ goto inline$storm_KeInitializeSpinLock$3$label_3#1;
+
+ inline$storm_KeInitializeSpinLock$3$label_3#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeInitializeSpinLock$3$$SpinLock$1$116.17$storm_KeInitializeSpinLock$4 := 0];
+ call contextSwitch();
+ goto inline$storm_KeInitializeSpinLock$3$label_1#1;
+
+ inline$storm_KeInitializeSpinLock$3$label_1#1:
+ goto inline$storm_KeInitializeSpinLock$3$Return#1;
+
+ inline$storm_KeInitializeSpinLock$3$Return#1:
+ goto inline$myInitDriver$0$label_15$1#1;
+
+ inline$myInitDriver$0$label_15$1#1:
+ goto inline$myInitDriver$0$anon11_Then#1, inline$myInitDriver$0$anon11_Else#1;
+
+ inline$myInitDriver$0$anon11_Else#1:
+ assume !raiseException;
+ goto inline$myInitDriver$0$anon7#1;
+
+ inline$myInitDriver$0$anon7#1:
+ havoc inline$myInitDriver$0$myNondetVar_0;
+ goto inline$myInitDriver$0$label_1#1;
+
+ inline$myInitDriver$0$label_1#1:
+ goto inline$myInitDriver$0$Return#1;
+
+ inline$myInitDriver$0$anon11_Then#1:
+ assume raiseException;
+ goto inline$myInitDriver$0$Return#1;
+
+ inline$myInitDriver$0$anon10_Then#1:
+ assume raiseException;
+ goto inline$myInitDriver$0$Return#1;
+
+ inline$myInitDriver$0$anon9_Then#1:
+ assume raiseException;
+ goto inline$myInitDriver$0$Return#1;
+
+ inline$myInitDriver$0$anon8_Then#1:
+ assume raiseException;
+ goto inline$myInitDriver$0$Return#1;
+
+ inline$myInitDriver$0$Return#1:
+ goto label_23$1#1;
+
+ label_23$1#1:
+ goto anon14_Then#1, anon14_Else#1;
+
+ anon14_Else#1:
+ assume !raiseException;
+ goto anon9#1;
+
+ anon9#1:
+ goto label_26#1;
+
+ label_26#1:
+ __storm_atomic := false;
+ __storm_init := false;
+ goto label_29#1;
+
+ label_29#1:
+ goto inline$storm_thread_dispatch$0$Entry#1;
+
+ inline$storm_thread_dispatch$0$Entry#1:
+ inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4_.1 := $irp$1$96.7$storm_main$0;
+ goto inline$storm_thread_dispatch$0$start#1;
+
+ inline$storm_thread_dispatch$0$start#1:
+ k := 0;
+ raiseException := false;
+ __storm_thread_id := 3;
+ call contextSwitch();
+ inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4 := inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4_.1;
+ goto inline$storm_thread_dispatch$0$label_3#1;
+
+ inline$storm_thread_dispatch$0$label_3#1:
+ goto inline$storm_thread_dispatch$0$label_4#1;
+
+ inline$storm_thread_dispatch$0$label_4#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4;
+ goto inline$IoGetCurrentIrpStackLocation$1$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$start#1:
+ inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$1$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$label_3_true#1, inline$IoGetCurrentIrpStackLocation$1$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$1$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$1$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$1$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$1$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$1$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$1$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$1$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$1$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$1$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$1$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$1$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$1$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$1$Return#1:
+ goto inline$storm_thread_dispatch$0$label_4$1#1;
+
+ inline$storm_thread_dispatch$0$label_4$1#1:
+ goto inline$storm_thread_dispatch$0$anon4_Then#1, inline$storm_thread_dispatch$0$anon4_Else#1;
+
+ inline$storm_thread_dispatch$0$anon4_Else#1:
+ assume !raiseException;
+ goto inline$storm_thread_dispatch$0$anon1#1;
+
+ inline$storm_thread_dispatch$0$anon1#1:
+ goto inline$storm_thread_dispatch$0$label_7#1;
+
+ inline$storm_thread_dispatch$0$label_7#1:
+ goto inline$storm_thread_dispatch$0$label_8#1;
+
+ inline$storm_thread_dispatch$0$label_8#1:
+ goto inline$BDLPnP$0$Entry#1;
+
+ inline$BDLPnP$0$Entry#1:
+ inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8_.1 := hdevobj;
+ inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8_.1 := inline$storm_thread_dispatch$0$$Irp$1$8.5$storm_thread_dispatch$4;
+ goto inline$BDLPnP$0$start#1;
+
+ inline$BDLPnP$0$start#1:
+ inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8 := inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8_.1;
+ inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8_.1;
+ goto inline$BDLPnP$0$label_3#1;
+
+ inline$BDLPnP$0$label_3#1:
+ goto inline$BDLPnP$0$label_4#1;
+
+ inline$BDLPnP$0$label_4#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := 0;
+ goto inline$BDLPnP$0$label_5#1;
+
+ inline$BDLPnP$0$label_5#1:
+ goto inline$BDLPnP$0$label_6#1;
+
+ inline$BDLPnP$0$label_6#1:
+ inline$BDLPnP$0$myVar_0 := Mem_0_T.DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8)];
+ call contextSwitch();
+ inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8 := inline$BDLPnP$0$myVar_0;
+ goto inline$BDLPnP$0$label_7#1;
+
+ inline$BDLPnP$0$label_7#1:
+ goto inline$BDLPnP$0$label_8#1;
+
+ inline$BDLPnP$0$label_8#1:
+ goto inline$BDLPnP$0$label_9#1;
+
+ inline$BDLPnP$0$label_9#1:
+ goto inline$BDLPnP$0$label_10#1;
+
+ inline$BDLPnP$0$label_10#1:
+ inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8 := 0;
+ goto inline$BDLPnP$0$label_11#1;
+
+ inline$BDLPnP$0$label_11#1:
+ goto inline$BDLPnP$0$label_12#1;
+
+ inline$BDLPnP$0$label_12#1:
+ inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 1;
+ goto inline$BDLPnP$0$label_13#1;
+
+ inline$BDLPnP$0$label_13#1:
+ goto inline$BDLGetDebugLevel$0$Entry#1;
+
+ inline$BDLGetDebugLevel$0$Entry#1:
+ goto inline$BDLGetDebugLevel$0$start#1;
+
+ inline$BDLGetDebugLevel$0$start#1:
+ goto inline$BDLGetDebugLevel$0$label_3#1;
+
+ inline$BDLGetDebugLevel$0$label_3#1:
+ havoc inline$BDLGetDebugLevel$0$myNondetVar_0;
+ inline$BDLGetDebugLevel$0$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$0$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$0$label_1#1;
+
+ inline$BDLGetDebugLevel$0$label_1#1:
+ goto inline$BDLGetDebugLevel$0$Return#1;
+
+ inline$BDLGetDebugLevel$0$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$ := inline$BDLGetDebugLevel$0$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_13$1#1;
+
+ inline$BDLPnP$0$label_13$1#1:
+ goto inline$BDLPnP$0$anon54_Then#1, inline$BDLPnP$0$anon54_Else#1;
+
+ inline$BDLPnP$0$anon54_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon1#1;
+
+ inline$BDLPnP$0$anon1#1:
+ goto inline$BDLPnP$0$label_16#1;
+
+ inline$BDLPnP$0$label_16#1:
+ goto inline$BDLPnP$0$label_16_true#1, inline$BDLPnP$0$label_16_false#1;
+
+ inline$BDLPnP$0$label_16_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$) == 0;
+ goto inline$BDLPnP$0$label_17#1;
+
+ inline$BDLPnP$0$label_16_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$2$) != 0;
+ goto inline$BDLPnP$0$label_20#1;
+
+ inline$BDLPnP$0$label_20#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_21#1;
+
+ inline$BDLPnP$0$label_21#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_22#1;
+
+ inline$BDLPnP$0$label_22#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_23#1;
+
+ inline$BDLPnP$0$label_23#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$865.0$3$;
+ goto inline$BDLPnP$0$label_17#1;
+
+ inline$BDLPnP$0$label_17#1:
+ goto inline$BDLGetDebugLevel$1$Entry#1;
+
+ inline$BDLGetDebugLevel$1$Entry#1:
+ goto inline$BDLGetDebugLevel$1$start#1;
+
+ inline$BDLGetDebugLevel$1$start#1:
+ goto inline$BDLGetDebugLevel$1$label_3#1;
+
+ inline$BDLGetDebugLevel$1$label_3#1:
+ havoc inline$BDLGetDebugLevel$1$myNondetVar_0;
+ inline$BDLGetDebugLevel$1$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$1$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$1$label_1#1;
+
+ inline$BDLGetDebugLevel$1$label_1#1:
+ goto inline$BDLGetDebugLevel$1$Return#1;
+
+ inline$BDLGetDebugLevel$1$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$ := inline$BDLGetDebugLevel$1$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_17$1#1;
+
+ inline$BDLPnP$0$label_17$1#1:
+ goto inline$BDLPnP$0$anon55_Then#1, inline$BDLPnP$0$anon55_Else#1;
+
+ inline$BDLPnP$0$anon55_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon3#1;
+
+ inline$BDLPnP$0$anon3#1:
+ goto inline$BDLPnP$0$label_26#1;
+
+ inline$BDLPnP$0$label_26#1:
+ goto inline$BDLPnP$0$label_26_true#1, inline$BDLPnP$0$label_26_false#1;
+
+ inline$BDLPnP$0$label_26_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$) == 0;
+ goto inline$BDLPnP$0$label_27#1;
+
+ inline$BDLPnP$0$label_26_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$7$) != 0;
+ goto inline$BDLPnP$0$label_30#1;
+
+ inline$BDLPnP$0$label_30#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_31#1;
+
+ inline$BDLPnP$0$label_31#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_32#1;
+
+ inline$BDLPnP$0$label_32#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_33#1;
+
+ inline$BDLPnP$0$label_33#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$865.0$8$;
+ goto inline$BDLPnP$0$label_27#1;
+
+ inline$BDLPnP$0$label_27#1:
+ goto inline$BDLGetDebugLevel$2$Entry#1;
+
+ inline$BDLGetDebugLevel$2$Entry#1:
+ goto inline$BDLGetDebugLevel$2$start#1;
+
+ inline$BDLGetDebugLevel$2$start#1:
+ goto inline$BDLGetDebugLevel$2$label_3#1;
+
+ inline$BDLGetDebugLevel$2$label_3#1:
+ havoc inline$BDLGetDebugLevel$2$myNondetVar_0;
+ inline$BDLGetDebugLevel$2$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$2$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$2$label_1#1;
+
+ inline$BDLGetDebugLevel$2$label_1#1:
+ goto inline$BDLGetDebugLevel$2$Return#1;
+
+ inline$BDLGetDebugLevel$2$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$ := inline$BDLGetDebugLevel$2$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_27$1#1;
+
+ inline$BDLPnP$0$label_27$1#1:
+ goto inline$BDLPnP$0$anon56_Then#1, inline$BDLPnP$0$anon56_Else#1;
+
+ inline$BDLPnP$0$anon56_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon5#1;
+
+ inline$BDLPnP$0$anon5#1:
+ goto inline$BDLPnP$0$label_36#1;
+
+ inline$BDLPnP$0$label_36#1:
+ goto inline$BDLPnP$0$label_36_true#1, inline$BDLPnP$0$label_36_false#1;
+
+ inline$BDLPnP$0$label_36_false#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$, 4) == 0;
+ goto inline$BDLPnP$0$label_37#1;
+
+ inline$BDLPnP$0$label_36_true#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$865.0$12$, 4) != 0;
+ goto inline$BDLPnP$0$label_38#1;
+
+ inline$BDLPnP$0$label_38#1:
+ goto inline$BDLPnP$0$label_37#1;
+
+ inline$BDLPnP$0$label_37#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8 := inline$BDLPnP$0$myNondetVar_0;
+ goto inline$BDLPnP$0$label_39#1;
+
+ inline$BDLPnP$0$label_39#1:
+ goto inline$IoGetCurrentIrpStackLocation$2$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$IoGetCurrentIrpStackLocation$2$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$start#1:
+ inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$2$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$2$label_3_true#1, inline$IoGetCurrentIrpStackLocation$2$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$2$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$2$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$2$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$2$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$2$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$2$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$2$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$2$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$2$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$2$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$2$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$2$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$2$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$2$Return#1:
+ goto inline$BDLPnP$0$label_39$1#1;
+
+ inline$BDLPnP$0$label_39$1#1:
+ goto inline$BDLPnP$0$anon57_Then#1, inline$BDLPnP$0$anon57_Else#1;
+
+ inline$BDLPnP$0$anon57_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon7#1;
+
+ inline$BDLPnP$0$anon7#1:
+ goto inline$BDLPnP$0$label_42#1;
+
+ inline$BDLPnP$0$label_42#1:
+ goto inline$BDLPnP$0$label_43#1;
+
+ inline$BDLPnP$0$label_43#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ inline$BDLPnP$0$$IoAcquireRemoveLockEx.arg.3$15$ := inline$BDLPnP$0$havoc_stringTemp;
+ goto inline$BDLPnP$0$label_44#1;
+
+ inline$BDLPnP$0$label_44#1:
+ goto inline$BDLPnP$0$label_44_true#1, inline$BDLPnP$0$label_44_false#1;
+
+ inline$BDLPnP$0$label_44_false#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume !INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
+ goto inline$BDLPnP$0$label_45#1;
+
+ inline$BDLPnP$0$label_45#1:
+ inline$BDLPnP$0$$result.question.16$ := 544632146;
+ goto inline$BDLPnP$0$label_47#1;
+
+ inline$BDLPnP$0$label_44_true#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
+ goto inline$BDLPnP$0$label_46#1;
+
+ inline$BDLPnP$0$label_46#1:
+ inline$BDLPnP$0$$result.question.16$ := 542142032;
+ goto inline$BDLPnP$0$label_47#1;
+
+ inline$BDLPnP$0$label_47#1:
+ call inline$BDLPnP$0$$result.IoAcquireRemoveLockEx$879.0$14$ := IoAcquireRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8), inline$BDLPnP$0$$result.question.16$, inline$BDLPnP$0$$IoAcquireRemoveLockEx.arg.3$15$, 882, 88);
+ goto inline$BDLPnP$0$anon58_Then#1, inline$BDLPnP$0$anon58_Else#1;
+
+ inline$BDLPnP$0$anon58_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon9#1;
+
+ inline$BDLPnP$0$anon9#1:
+ goto inline$BDLPnP$0$label_50#1;
+
+ inline$BDLPnP$0$label_50#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.IoAcquireRemoveLockEx$879.0$14$;
+ goto inline$BDLPnP$0$label_51#1;
+
+ inline$BDLPnP$0$label_51#1:
+ goto inline$BDLPnP$0$label_51_true#1, inline$BDLPnP$0$label_51_false#1;
+
+ inline$BDLPnP$0$label_51_false#1:
+ assume inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 == 0;
+ goto inline$BDLPnP$0$label_52#1;
+
+ inline$BDLPnP$0$label_52#1:
+ goto inline$BDLPnP$0$label_52_case_0#1, inline$BDLPnP$0$label_52_case_1#1, inline$BDLPnP$0$label_52_case_2#1, inline$BDLPnP$0$label_52_case_3#1, inline$BDLPnP$0$label_52_case_4#1, inline$BDLPnP$0$label_52_case_5#1, inline$BDLPnP$0$label_52_case_6#1, inline$BDLPnP$0$label_52_case_7#1, inline$BDLPnP$0$label_52_case_8#1;
+
+ inline$BDLPnP$0$label_52_case_8#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 23;
+ goto inline$BDLPnP$0$label_134#1;
+
+ inline$BDLPnP$0$label_134#1:
+ goto inline$BDLPnPSurpriseRemoval$0$Entry#1;
+
+ inline$BDLPnPSurpriseRemoval$0$Entry#1:
+ inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPSurpriseRemoval$0$start#1;
+
+ inline$BDLPnPSurpriseRemoval$0$start#1:
+ inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12 := inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12_.1;
+ inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12 := inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12_.1;
+ goto inline$BDLPnPSurpriseRemoval$0$label_3#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_3#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_4#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_4#1:
+ inline$BDLPnPSurpriseRemoval$0$$status$4$2534.16$BDLPnPSurpriseRemoval$12 := 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_5#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_5#1:
+ goto inline$BDLGetDebugLevel$658$Entry#1;
+
+ inline$BDLGetDebugLevel$658$Entry#1:
+ goto inline$BDLGetDebugLevel$658$start#1;
+
+ inline$BDLGetDebugLevel$658$start#1:
+ goto inline$BDLGetDebugLevel$658$label_3#1;
+
+ inline$BDLGetDebugLevel$658$label_3#1:
+ havoc inline$BDLGetDebugLevel$658$myNondetVar_0;
+ inline$BDLGetDebugLevel$658$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$658$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$658$label_1#1;
+
+ inline$BDLGetDebugLevel$658$label_1#1:
+ goto inline$BDLGetDebugLevel$658$Return#1;
+
+ inline$BDLGetDebugLevel$658$Return#1:
+ inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$ := inline$BDLGetDebugLevel$658$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_5$1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_5$1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$anon14_Then#1, inline$BDLPnPSurpriseRemoval$0$anon14_Else#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon14_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$anon1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_8#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_8#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_8_true#1, inline$BDLPnPSurpriseRemoval$0$label_8_false#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_8_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$) == 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_9#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_8_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$2$) != 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_12#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_12#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_13#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_13#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_14#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_14#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_15#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_15#1:
+ havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$3$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_9#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_9#1:
+ goto inline$BDLGetDebugLevel$659$Entry#1;
+
+ inline$BDLGetDebugLevel$659$Entry#1:
+ goto inline$BDLGetDebugLevel$659$start#1;
+
+ inline$BDLGetDebugLevel$659$start#1:
+ goto inline$BDLGetDebugLevel$659$label_3#1;
+
+ inline$BDLGetDebugLevel$659$label_3#1:
+ havoc inline$BDLGetDebugLevel$659$myNondetVar_0;
+ inline$BDLGetDebugLevel$659$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$659$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$659$label_1#1;
+
+ inline$BDLGetDebugLevel$659$label_1#1:
+ goto inline$BDLGetDebugLevel$659$Return#1;
+
+ inline$BDLGetDebugLevel$659$Return#1:
+ inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$ := inline$BDLGetDebugLevel$659$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_9$1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_9$1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$anon15_Then#1, inline$BDLPnPSurpriseRemoval$0$anon15_Else#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon15_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$anon3#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon3#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_18#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_18#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_18_true#1, inline$BDLPnPSurpriseRemoval$0$label_18_false#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$) == 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_19#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$7$) != 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_22#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_22#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_23#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_23#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_24#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_24#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_25#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_25#1:
+ havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2536.0$8$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_19#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_19#1:
+ goto inline$BDLGetDebugLevel$660$Entry#1;
+
+ inline$BDLGetDebugLevel$660$Entry#1:
+ goto inline$BDLGetDebugLevel$660$start#1;
+
+ inline$BDLGetDebugLevel$660$start#1:
+ goto inline$BDLGetDebugLevel$660$label_3#1;
+
+ inline$BDLGetDebugLevel$660$label_3#1:
+ havoc inline$BDLGetDebugLevel$660$myNondetVar_0;
+ inline$BDLGetDebugLevel$660$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$660$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$660$label_1#1;
+
+ inline$BDLGetDebugLevel$660$label_1#1:
+ goto inline$BDLGetDebugLevel$660$Return#1;
+
+ inline$BDLGetDebugLevel$660$Return#1:
+ inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$ := inline$BDLGetDebugLevel$660$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_19$1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_19$1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$anon16_Then#1, inline$BDLPnPSurpriseRemoval$0$anon16_Else#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$anon5#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon5#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_28#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_28#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_28_true#1, inline$BDLPnPSurpriseRemoval$0$label_28_false#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_28_false#1:
+ assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$, 4) == 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_29#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_28_true#1:
+ assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2536.0$12$, 4) != 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_30#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_30#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_29#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_29#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_31#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_31#1:
+ goto inline$BDLHandleRemove$1$Entry#1;
+
+ inline$BDLHandleRemove$1$Entry#1:
+ inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1 := inline$BDLPnPSurpriseRemoval$0$$pBDLExtension$1$2529.40$BDLPnPSurpriseRemoval$12;
+ inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12_.1 := inline$BDLPnPSurpriseRemoval$0$$pIrp$3$2531.40$BDLPnPSurpriseRemoval$12;
+ goto inline$BDLHandleRemove$1$start#1;
+
+ inline$BDLHandleRemove$1$start#1:
+ inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1;
+ inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12_.1;
+ goto inline$BDLHandleRemove$1$label_3#1;
+
+ inline$BDLHandleRemove$1$label_3#1:
+ goto inline$BDLHandleRemove$1$label_4#1;
+
+ inline$BDLHandleRemove$1$label_4#1:
+ inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := 0;
+ goto inline$BDLHandleRemove$1$label_5#1;
+
+ inline$BDLHandleRemove$1$label_5#1:
+ goto inline$BDLHandleRemove$1$label_6#1;
+
+ inline$BDLHandleRemove$1$label_6#1:
+ havoc inline$BDLHandleRemove$1$myNondetVar_0;
+ goto inline$BDLHandleRemove$1$label_7#1;
+
+ inline$BDLHandleRemove$1$label_7#1:
+ goto inline$BDLGetDebugLevel$661$Entry#1;
+
+ inline$BDLGetDebugLevel$661$Entry#1:
+ goto inline$BDLGetDebugLevel$661$start#1;
+
+ inline$BDLGetDebugLevel$661$start#1:
+ goto inline$BDLGetDebugLevel$661$label_3#1;
+
+ inline$BDLGetDebugLevel$661$label_3#1:
+ havoc inline$BDLGetDebugLevel$661$myNondetVar_0;
+ inline$BDLGetDebugLevel$661$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$661$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$661$label_1#1;
+
+ inline$BDLGetDebugLevel$661$label_1#1:
+ goto inline$BDLGetDebugLevel$661$Return#1;
+
+ inline$BDLGetDebugLevel$661$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$ := inline$BDLGetDebugLevel$661$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_7$1#1;
+
+ inline$BDLHandleRemove$1$label_7$1#1:
+ goto inline$BDLHandleRemove$1$anon42_Then#1, inline$BDLHandleRemove$1$anon42_Else#1;
+
+ inline$BDLHandleRemove$1$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon1#1;
+
+ inline$BDLHandleRemove$1$anon1#1:
+ goto inline$BDLHandleRemove$1$label_10#1;
+
+ inline$BDLHandleRemove$1$label_10#1:
+ goto inline$BDLHandleRemove$1$label_10_true#1, inline$BDLHandleRemove$1$label_10_false#1;
+
+ inline$BDLHandleRemove$1$label_10_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$) == 0;
+ goto inline$BDLHandleRemove$1$label_11#1;
+
+ inline$BDLHandleRemove$1$label_10_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$2$) != 0;
+ goto inline$BDLHandleRemove$1$label_14#1;
+
+ inline$BDLHandleRemove$1$label_14#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_15#1;
+
+ inline$BDLHandleRemove$1$label_15#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_16#1;
+
+ inline$BDLHandleRemove$1$label_16#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_17#1;
+
+ inline$BDLHandleRemove$1$label_17#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$3$;
+ goto inline$BDLHandleRemove$1$label_11#1;
+
+ inline$BDLHandleRemove$1$label_11#1:
+ goto inline$BDLGetDebugLevel$662$Entry#1;
+
+ inline$BDLGetDebugLevel$662$Entry#1:
+ goto inline$BDLGetDebugLevel$662$start#1;
+
+ inline$BDLGetDebugLevel$662$start#1:
+ goto inline$BDLGetDebugLevel$662$label_3#1;
+
+ inline$BDLGetDebugLevel$662$label_3#1:
+ havoc inline$BDLGetDebugLevel$662$myNondetVar_0;
+ inline$BDLGetDebugLevel$662$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$662$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$662$label_1#1;
+
+ inline$BDLGetDebugLevel$662$label_1#1:
+ goto inline$BDLGetDebugLevel$662$Return#1;
+
+ inline$BDLGetDebugLevel$662$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$ := inline$BDLGetDebugLevel$662$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_11$1#1;
+
+ inline$BDLHandleRemove$1$label_11$1#1:
+ goto inline$BDLHandleRemove$1$anon43_Then#1, inline$BDLHandleRemove$1$anon43_Else#1;
+
+ inline$BDLHandleRemove$1$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon3#1;
+
+ inline$BDLHandleRemove$1$anon3#1:
+ goto inline$BDLHandleRemove$1$label_20#1;
+
+ inline$BDLHandleRemove$1$label_20#1:
+ goto inline$BDLHandleRemove$1$label_20_true#1, inline$BDLHandleRemove$1$label_20_false#1;
+
+ inline$BDLHandleRemove$1$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$) == 0;
+ goto inline$BDLHandleRemove$1$label_21#1;
+
+ inline$BDLHandleRemove$1$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$7$) != 0;
+ goto inline$BDLHandleRemove$1$label_24#1;
+
+ inline$BDLHandleRemove$1$label_24#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_25#1;
+
+ inline$BDLHandleRemove$1$label_25#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_26#1;
+
+ inline$BDLHandleRemove$1$label_26#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_27#1;
+
+ inline$BDLHandleRemove$1$label_27#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2386.0$8$;
+ goto inline$BDLHandleRemove$1$label_21#1;
+
+ inline$BDLHandleRemove$1$label_21#1:
+ goto inline$BDLGetDebugLevel$663$Entry#1;
+
+ inline$BDLGetDebugLevel$663$Entry#1:
+ goto inline$BDLGetDebugLevel$663$start#1;
+
+ inline$BDLGetDebugLevel$663$start#1:
+ goto inline$BDLGetDebugLevel$663$label_3#1;
+
+ inline$BDLGetDebugLevel$663$label_3#1:
+ havoc inline$BDLGetDebugLevel$663$myNondetVar_0;
+ inline$BDLGetDebugLevel$663$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$663$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$663$label_1#1;
+
+ inline$BDLGetDebugLevel$663$label_1#1:
+ goto inline$BDLGetDebugLevel$663$Return#1;
+
+ inline$BDLGetDebugLevel$663$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$ := inline$BDLGetDebugLevel$663$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_21$1#1;
+
+ inline$BDLHandleRemove$1$label_21$1#1:
+ goto inline$BDLHandleRemove$1$anon44_Then#1, inline$BDLHandleRemove$1$anon44_Else#1;
+
+ inline$BDLHandleRemove$1$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon5#1;
+
+ inline$BDLHandleRemove$1$anon5#1:
+ goto inline$BDLHandleRemove$1$label_30#1;
+
+ inline$BDLHandleRemove$1$label_30#1:
+ goto inline$BDLHandleRemove$1$label_30_true#1, inline$BDLHandleRemove$1$label_30_false#1;
+
+ inline$BDLHandleRemove$1$label_30_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$, 4) == 0;
+ goto inline$BDLHandleRemove$1$label_31#1;
+
+ inline$BDLHandleRemove$1$label_30_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2386.0$12$, 4) != 0;
+ goto inline$BDLHandleRemove$1$label_34#1;
+
+ inline$BDLHandleRemove$1$label_34#1:
+ goto inline$BDLHandleRemove$1$label_31#1;
+
+ inline$BDLHandleRemove$1$label_31#1:
+ goto inline$storm_KeSetEvent$29$Entry#1;
+
+ inline$storm_KeSetEvent$29$Entry#1:
+ inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12);
+ goto inline$storm_KeSetEvent$29$start#1;
+
+ inline$storm_KeSetEvent$29$start#1:
+ inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$29$label_3#1;
+
+ inline$storm_KeSetEvent$29$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$29$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$29$label_1#1;
+
+ inline$storm_KeSetEvent$29$label_1#1:
+ goto inline$storm_KeSetEvent$29$Return#1;
+
+ inline$storm_KeSetEvent$29$Return#1:
+ goto inline$BDLHandleRemove$1$label_31$1#1;
+
+ inline$BDLHandleRemove$1$label_31$1#1:
+ goto inline$BDLHandleRemove$1$anon45_Then#1, inline$BDLHandleRemove$1$anon45_Else#1;
+
+ inline$BDLHandleRemove$1$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon7#1;
+
+ inline$BDLHandleRemove$1$anon7#1:
+ goto inline$BDLHandleRemove$1$label_35#1;
+
+ inline$BDLHandleRemove$1$label_35#1:
+ call inline$BDLHandleRemove$1$$result.IoSetDeviceInterfaceState$2406.29$14$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12), 0);
+ goto inline$BDLHandleRemove$1$anon46_Then#1, inline$BDLHandleRemove$1$anon46_Else#1;
+
+ inline$BDLHandleRemove$1$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon9#1;
+
+ inline$BDLHandleRemove$1$anon9#1:
+ goto inline$BDLHandleRemove$1$label_38#1;
+
+ inline$BDLHandleRemove$1$label_38#1:
+ goto inline$BDLCleanupNotificationStruct$1$Entry#1;
+
+ inline$BDLCleanupNotificationStruct$1$Entry#1:
+ inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1 := inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
+ goto inline$BDLCleanupNotificationStruct$1$start#1;
+
+ inline$BDLCleanupNotificationStruct$1$start#1:
+ call inline$BDLCleanupNotificationStruct$1$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(20);
+ call inline$BDLCleanupNotificationStruct$1$$irql$3$3113.45$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(1);
+ inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1;
+ goto inline$BDLCleanupNotificationStruct$1$label_3#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_3#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_4#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_4#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_5#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_5#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_6#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_6#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_7#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_7#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_8#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_8#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_9#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_9#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_10#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_10#1:
+ inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_11#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_11#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_12#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_12#1:
+ inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_13#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_13#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_14#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_14#1:
+ inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_15#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_15#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_16#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_16#1:
+ inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_17#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_17#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_18#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_18#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_19#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_19#1:
+ goto inline$BDLGetDebugLevel$664$Entry#1;
+
+ inline$BDLGetDebugLevel$664$Entry#1:
+ goto inline$BDLGetDebugLevel$664$start#1;
+
+ inline$BDLGetDebugLevel$664$start#1:
+ goto inline$BDLGetDebugLevel$664$label_3#1;
+
+ inline$BDLGetDebugLevel$664$label_3#1:
+ havoc inline$BDLGetDebugLevel$664$myNondetVar_0;
+ inline$BDLGetDebugLevel$664$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$664$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$664$label_1#1;
+
+ inline$BDLGetDebugLevel$664$label_1#1:
+ goto inline$BDLGetDebugLevel$664$Return#1;
+
+ inline$BDLGetDebugLevel$664$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$ := inline$BDLGetDebugLevel$664$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_19$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_19$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon46_Then#1, inline$BDLCleanupNotificationStruct$1$anon46_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon1#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon1#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_22#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_22#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_22_true#1, inline$BDLCleanupNotificationStruct$1$label_22_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_22_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_23#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_22_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$1$) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_26#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_26#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_27#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_27#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_28#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_28#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_29#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_29#1:
+ havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$2$;
+ goto inline$BDLCleanupNotificationStruct$1$label_23#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_23#1:
+ goto inline$BDLGetDebugLevel$665$Entry#1;
+
+ inline$BDLGetDebugLevel$665$Entry#1:
+ goto inline$BDLGetDebugLevel$665$start#1;
+
+ inline$BDLGetDebugLevel$665$start#1:
+ goto inline$BDLGetDebugLevel$665$label_3#1;
+
+ inline$BDLGetDebugLevel$665$label_3#1:
+ havoc inline$BDLGetDebugLevel$665$myNondetVar_0;
+ inline$BDLGetDebugLevel$665$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$665$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$665$label_1#1;
+
+ inline$BDLGetDebugLevel$665$label_1#1:
+ goto inline$BDLGetDebugLevel$665$Return#1;
+
+ inline$BDLGetDebugLevel$665$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$ := inline$BDLGetDebugLevel$665$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_23$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_23$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon47_Then#1, inline$BDLCleanupNotificationStruct$1$anon47_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon3#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon3#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_32#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_32#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_32_true#1, inline$BDLCleanupNotificationStruct$1$label_32_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_32_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_33#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_32_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$6$) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_36#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_36#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_37#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_37#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_38#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_38#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_39#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_39#1:
+ havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3123.0$7$;
+ goto inline$BDLCleanupNotificationStruct$1$label_33#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_33#1:
+ goto inline$BDLGetDebugLevel$666$Entry#1;
+
+ inline$BDLGetDebugLevel$666$Entry#1:
+ goto inline$BDLGetDebugLevel$666$start#1;
+
+ inline$BDLGetDebugLevel$666$start#1:
+ goto inline$BDLGetDebugLevel$666$label_3#1;
+
+ inline$BDLGetDebugLevel$666$label_3#1:
+ havoc inline$BDLGetDebugLevel$666$myNondetVar_0;
+ inline$BDLGetDebugLevel$666$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$666$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$666$label_1#1;
+
+ inline$BDLGetDebugLevel$666$label_1#1:
+ goto inline$BDLGetDebugLevel$666$Return#1;
+
+ inline$BDLGetDebugLevel$666$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$ := inline$BDLGetDebugLevel$666$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_33$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_33$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon48_Then#1, inline$BDLCleanupNotificationStruct$1$anon48_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon5#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon5#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_42#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_42#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_42_true#1, inline$BDLCleanupNotificationStruct$1$label_42_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_42_false#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$, 4) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_43#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_42_true#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3123.0$11$, 4) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_44#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_44#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_43#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_43#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_45#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_45#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_45_head#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_45_head#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_45_true#1, inline$BDLCleanupNotificationStruct$1$label_45_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_45_false#1:
+ assume 1 == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_46#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_45_true#1:
+ assume 1 != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_49#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_49#1:
+ call inline$BDLCleanupNotificationStruct$1$$result.KfRaiseIrql$3141.8$12$ := KfRaiseIrql(2);
+ goto inline$BDLCleanupNotificationStruct$1$anon50_Then#1, inline$BDLCleanupNotificationStruct$1$anon50_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon9#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon9#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_52#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_52#1:
+ inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$result.KfRaiseIrql$3141.8$12$;
+ goto inline$BDLCleanupNotificationStruct$1$label_53#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_53#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
+ assume inline$BDLCleanupNotificationStruct$1$myNondetVar_0 == inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$3$Entry#1;
+
+ inline$storm_KeAcquireSpinLock$3$Entry#1:
+ inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$storm_KeAcquireSpinLock$3$start#1;
+
+ inline$storm_KeAcquireSpinLock$3$start#1:
+ inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
+ goto inline$storm_KeAcquireSpinLock$3$label_3#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_3#1:
+ goto inline$storm_KeAcquireSpinLock$3$label_4#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_4#1:
+ goto inline$storm_getThreadID$8$Entry#1;
+
+ inline$storm_getThreadID$8$Entry#1:
+ goto inline$storm_getThreadID$8$anon0#1;
+
+ inline$storm_getThreadID$8$anon0#1:
+ inline$storm_getThreadID$8$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$8$Return#1;
+
+ inline$storm_getThreadID$8$Return#1:
+ inline$storm_KeAcquireSpinLock$3$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$8$tid;
+ goto inline$storm_KeAcquireSpinLock$3$label_4$1#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_4$1#1:
+ goto inline$storm_KeAcquireSpinLock$3$label_7#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_7#1:
+ inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$3$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$3$label_8#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_8#1:
+ goto inline$storm_KeAcquireSpinLock$3$label_9#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_9#1:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$3$label_12#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_12#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$3$anon7_Then#1, inline$storm_KeAcquireSpinLock$3$anon7_Else#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$3$anon1#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$3$label_13#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_13#1:
+ goto inline$storm_KeAcquireSpinLock$3$label_13_true#1, inline$storm_KeAcquireSpinLock$3$label_13_false#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_13_false#1:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$3$label_14#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_14#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$3$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_13_true#1:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$3$label_17#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_17#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$3$anon8_Then#1, inline$storm_KeAcquireSpinLock$3$anon8_Else#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$3$anon4#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon4#1:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$3$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
+ goto inline$storm_KeAcquireSpinLock$3$label_18#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_18#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$3$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$3$$tid$3$128.6$storm_KeAcquireSpinLock$8];
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$3$label_19#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_19#1:
+ goto inline$storm_KeAcquireSpinLock$3$anon9_Then#1, inline$storm_KeAcquireSpinLock$3$anon9_Else#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon9_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$3$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon9_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$3$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon6#1:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$3$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$3$label_1#1:
+ goto inline$storm_KeAcquireSpinLock$3$Return#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$3$Return#1;
+
+ inline$storm_KeAcquireSpinLock$3$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$3$Return#1;
+
+ inline$storm_KeAcquireSpinLock$3$Return#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_53$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_53$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon51_Then#1, inline$BDLCleanupNotificationStruct$1$anon51_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon11#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon11#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$1$label_56#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_56#1:
+ goto inline$IsListEmpty$4$Entry#1;
+
+ inline$IsListEmpty$4$Entry#1:
+ inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4_.1 := ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$IsListEmpty$4$start#1;
+
+ inline$IsListEmpty$4$start#1:
+ inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4_.1;
+ goto inline$IsListEmpty$4$label_3#1;
+
+ inline$IsListEmpty$4$label_3#1:
+ havoc inline$IsListEmpty$4$myNondetVar_0;
+ inline$IsListEmpty$4$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$4$myNondetVar_0, inline$IsListEmpty$4$$ListHead$1$8097.28$IsListEmpty$4));
+ goto inline$IsListEmpty$4$label_1#1;
+
+ inline$IsListEmpty$4$label_1#1:
+ goto inline$IsListEmpty$4$Return#1;
+
+ inline$IsListEmpty$4$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$ := inline$IsListEmpty$4$$result.IsListEmpty$8096.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_56$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_56$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon52_Then#1, inline$BDLCleanupNotificationStruct$1$anon52_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon13#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon13#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_59#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_59#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_59_true#1, inline$BDLCleanupNotificationStruct$1$label_59_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_59_false#1:
+ assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$ == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_60#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_60#1:
+ goto inline$RemoveHeadList$3$Entry#1;
+
+ inline$RemoveHeadList$3$Entry#1:
+ goto inline$RemoveHeadList$3$start#1;
+
+ inline$RemoveHeadList$3$start#1:
+ goto inline$RemoveHeadList$3$label_3#1;
+
+ inline$RemoveHeadList$3$label_3#1:
+ goto inline$RemoveHeadList$3$label_4#1;
+
+ inline$RemoveHeadList$3$label_4#1:
+ goto inline$RemoveHeadList$3$label_5#1;
+
+ inline$RemoveHeadList$3$label_5#1:
+ havoc inline$RemoveHeadList$3$myNondetVar_0;
+ inline$RemoveHeadList$3$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$3$myNondetVar_0;
+ goto inline$RemoveHeadList$3$label_6#1;
+
+ inline$RemoveHeadList$3$label_6#1:
+ havoc inline$RemoveHeadList$3$myNondetVar_0;
+ goto inline$RemoveHeadList$3$label_7#1;
+
+ inline$RemoveHeadList$3$label_7#1:
+ goto inline$RemoveHeadList$3$label_8#1;
+
+ inline$RemoveHeadList$3$label_8#1:
+ goto inline$RemoveHeadList$3$label_9#1;
+
+ inline$RemoveHeadList$3$label_9#1:
+ inline$RemoveHeadList$3$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$3$$Entry$3$8126.16$RemoveHeadList$4;
+ goto inline$RemoveHeadList$3$label_1#1;
+
+ inline$RemoveHeadList$3$label_1#1:
+ goto inline$RemoveHeadList$3$Return#1;
+
+ inline$RemoveHeadList$3$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3153.26$14$ := inline$RemoveHeadList$3$$result.RemoveHeadList$8121.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_60$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_60$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon53_Then#1, inline$BDLCleanupNotificationStruct$1$anon53_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon15#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon15#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_63#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_63#1:
+ inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3153.26$14$;
+ goto inline$BDLCleanupNotificationStruct$1$label_64#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_64#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
+ assume inline$BDLCleanupNotificationStruct$1$myNondetVar_0 == inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$5$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$5$Entry#1:
+ inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$storm_KeReleaseSpinLock$5$start#1;
+
+ inline$storm_KeReleaseSpinLock$5$start#1:
+ inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$5$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$5$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$5$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$5$anon5_Then#1, inline$storm_KeReleaseSpinLock$5$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$5$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$5$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$5$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$5$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_8#1:
+ goto inline$storm_getThreadID$9$Entry#1;
+
+ inline$storm_getThreadID$9$Entry#1:
+ goto inline$storm_getThreadID$9$anon0#1;
+
+ inline$storm_getThreadID$9$anon0#1:
+ inline$storm_getThreadID$9$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$9$Return#1;
+
+ inline$storm_getThreadID$9$Return#1:
+ inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$9$tid;
+ goto inline$storm_KeReleaseSpinLock$5$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$5$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$5$label_11_true#1, inline$storm_KeReleaseSpinLock$5$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$5$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$5$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$5$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$5$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$5$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$5$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$5$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$5$anon6_Then#1, inline$storm_KeReleaseSpinLock$5$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$5$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$5$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$5$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$5$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$5$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$5$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$5$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$5$Return#1;
+
+ inline$storm_KeReleaseSpinLock$5$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$5$Return#1;
+
+ inline$storm_KeReleaseSpinLock$5$Return#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_64$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_64$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon54_Then#1, inline$BDLCleanupNotificationStruct$1$anon54_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon54_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon17#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon17#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$1$label_67#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_67#1:
+ call KfLowerIrql(inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
+ goto inline$BDLCleanupNotificationStruct$1$anon55_Then#1, inline$BDLCleanupNotificationStruct$1$anon55_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon55_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon19#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon19#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_70#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_70#1:
+ inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$1$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4, 1, 12);
+ goto inline$BDLCleanupNotificationStruct$1$label_71#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_71#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$1$label_72#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_72#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$1$label_73#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_73#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$1$label_74#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_74#1:
+ call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$1$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4, 541869122);
+ goto inline$BDLCleanupNotificationStruct$1$anon56_Then#1, inline$BDLCleanupNotificationStruct$1$anon56_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon56_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon21#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon21#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_77#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_77#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_80#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_80#1:
+ inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$callresult.$3172.84$15$;
+ goto inline$BDLCleanupNotificationStruct$1$label_81#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_81#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_81_true#1, inline$BDLCleanupNotificationStruct$1$label_81_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_81_false#1:
+ assume inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4 == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_45_head#0;
+
+ inline$BDLCleanupNotificationStruct$1$label_81_true#1:
+ assume inline$BDLCleanupNotificationStruct$1$$status$11$3121.36$BDLCleanupNotificationStruct$4 != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_82#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_82#1:
+ goto inline$BDLGetDebugLevel$667$Entry#1;
+
+ inline$BDLGetDebugLevel$667$Entry#1:
+ goto inline$BDLGetDebugLevel$667$start#1;
+
+ inline$BDLGetDebugLevel$667$start#1:
+ goto inline$BDLGetDebugLevel$667$label_3#1;
+
+ inline$BDLGetDebugLevel$667$label_3#1:
+ havoc inline$BDLGetDebugLevel$667$myNondetVar_0;
+ inline$BDLGetDebugLevel$667$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$667$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$667$label_1#1;
+
+ inline$BDLGetDebugLevel$667$label_1#1:
+ goto inline$BDLGetDebugLevel$667$Return#1;
+
+ inline$BDLGetDebugLevel$667$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$ := inline$BDLGetDebugLevel$667$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_82$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_82$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon57_Then#1, inline$BDLCleanupNotificationStruct$1$anon57_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon57_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon23#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon23#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_85#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_85#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_85_true#1, inline$BDLCleanupNotificationStruct$1$label_85_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_85_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_86#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_85_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$16$) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_89#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_89#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_90#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_90#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_91#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_91#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_92#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_92#1:
+ havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$17$;
+ goto inline$BDLCleanupNotificationStruct$1$label_86#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_86#1:
+ goto inline$BDLGetDebugLevel$668$Entry#1;
+
+ inline$BDLGetDebugLevel$668$Entry#1:
+ goto inline$BDLGetDebugLevel$668$start#1;
+
+ inline$BDLGetDebugLevel$668$start#1:
+ goto inline$BDLGetDebugLevel$668$label_3#1;
+
+ inline$BDLGetDebugLevel$668$label_3#1:
+ havoc inline$BDLGetDebugLevel$668$myNondetVar_0;
+ inline$BDLGetDebugLevel$668$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$668$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$668$label_1#1;
+
+ inline$BDLGetDebugLevel$668$label_1#1:
+ goto inline$BDLGetDebugLevel$668$Return#1;
+
+ inline$BDLGetDebugLevel$668$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$ := inline$BDLGetDebugLevel$668$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_86$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_86$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon58_Then#1, inline$BDLCleanupNotificationStruct$1$anon58_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon58_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon25#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon25#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_95#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_95#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_95_true#1, inline$BDLCleanupNotificationStruct$1$label_95_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_95_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_96#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_95_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$21$) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_99#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_99#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_100#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_100#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_101#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_101#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_102#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_102#1:
+ havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3178.0$22$;
+ goto inline$BDLCleanupNotificationStruct$1$label_96#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_96#1:
+ goto inline$BDLGetDebugLevel$669$Entry#1;
+
+ inline$BDLGetDebugLevel$669$Entry#1:
+ goto inline$BDLGetDebugLevel$669$start#1;
+
+ inline$BDLGetDebugLevel$669$start#1:
+ goto inline$BDLGetDebugLevel$669$label_3#1;
+
+ inline$BDLGetDebugLevel$669$label_3#1:
+ havoc inline$BDLGetDebugLevel$669$myNondetVar_0;
+ inline$BDLGetDebugLevel$669$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$669$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$669$label_1#1;
+
+ inline$BDLGetDebugLevel$669$label_1#1:
+ goto inline$BDLGetDebugLevel$669$Return#1;
+
+ inline$BDLGetDebugLevel$669$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$ := inline$BDLGetDebugLevel$669$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_96$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_96$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon59_Then#1, inline$BDLCleanupNotificationStruct$1$anon59_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon59_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon27#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon27#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_105#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_105#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_105_true#1, inline$BDLCleanupNotificationStruct$1$label_105_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_105_false#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$, 4) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_45_head#0;
+
+ inline$BDLCleanupNotificationStruct$1$label_105_true#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3178.0$26$, 4) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_106#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_106#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_45_head#0;
+
+ inline$BDLCleanupNotificationStruct$1$label_45_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupNotificationStruct$1$anon59_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon58_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon57_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon56_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon55_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon54_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_59_true#1:
+ assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3144.23$13$ != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_46#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_46#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_46_head#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_46_head#1:
+ goto inline$IsListEmpty$3$Entry#1;
+
+ inline$IsListEmpty$3$Entry#1:
+ inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4_.1 := ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$IsListEmpty$3$start#1;
+
+ inline$IsListEmpty$3$start#1:
+ inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4_.1;
+ goto inline$IsListEmpty$3$label_3#1;
+
+ inline$IsListEmpty$3$label_3#1:
+ havoc inline$IsListEmpty$3$myNondetVar_0;
+ inline$IsListEmpty$3$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$3$myNondetVar_0, inline$IsListEmpty$3$$ListHead$1$8097.28$IsListEmpty$4));
+ goto inline$IsListEmpty$3$label_1#1;
+
+ inline$IsListEmpty$3$label_1#1:
+ goto inline$IsListEmpty$3$Return#1;
+
+ inline$IsListEmpty$3$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$ := inline$IsListEmpty$3$$result.IsListEmpty$8096.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_46_head$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_46_head$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon49_Then#1, inline$BDLCleanupNotificationStruct$1$anon49_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon7#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon7#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_107#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_107#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_107_true#1, inline$BDLCleanupNotificationStruct$1$label_107_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_107_false#1:
+ assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$ == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_108#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_108#1:
+ goto inline$RemoveHeadList$4$Entry#1;
+
+ inline$RemoveHeadList$4$Entry#1:
+ goto inline$RemoveHeadList$4$start#1;
+
+ inline$RemoveHeadList$4$start#1:
+ goto inline$RemoveHeadList$4$label_3#1;
+
+ inline$RemoveHeadList$4$label_3#1:
+ goto inline$RemoveHeadList$4$label_4#1;
+
+ inline$RemoveHeadList$4$label_4#1:
+ goto inline$RemoveHeadList$4$label_5#1;
+
+ inline$RemoveHeadList$4$label_5#1:
+ havoc inline$RemoveHeadList$4$myNondetVar_0;
+ goto inline$RemoveHeadList$4$label_6#1;
+
+ inline$RemoveHeadList$4$label_6#1:
+ havoc inline$RemoveHeadList$4$myNondetVar_0;
+ goto inline$RemoveHeadList$4$label_7#1;
+
+ inline$RemoveHeadList$4$label_7#1:
+ goto inline$RemoveHeadList$4$label_8#1;
+
+ inline$RemoveHeadList$4$label_8#1:
+ goto inline$RemoveHeadList$4$label_9#1;
+
+ inline$RemoveHeadList$4$label_9#1:
+ goto inline$RemoveHeadList$4$label_1#1;
+
+ inline$RemoveHeadList$4$label_1#1:
+ goto inline$RemoveHeadList$4$Return#1;
+
+ inline$RemoveHeadList$4$Return#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_108$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_108$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon60_Then#1, inline$BDLCleanupNotificationStruct$1$anon60_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon60_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon29#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon29#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_154#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_154#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_155#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_155#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_156#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_156#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_46_head#0;
+
+ inline$BDLCleanupNotificationStruct$1$label_46_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupNotificationStruct$1$anon60_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_107_true#1:
+ assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3199.23$27$ != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_111#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_111#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_111_head#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_111_head#1:
+ goto inline$IsListEmpty$5$Entry#1;
+
+ inline$IsListEmpty$5$Entry#1:
+ inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4_.1 := IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$IsListEmpty$5$start#1;
+
+ inline$IsListEmpty$5$start#1:
+ inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4_.1;
+ goto inline$IsListEmpty$5$label_3#1;
+
+ inline$IsListEmpty$5$label_3#1:
+ havoc inline$IsListEmpty$5$myNondetVar_0;
+ inline$IsListEmpty$5$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$5$myNondetVar_0, inline$IsListEmpty$5$$ListHead$1$8097.28$IsListEmpty$4));
+ goto inline$IsListEmpty$5$label_1#1;
+
+ inline$IsListEmpty$5$label_1#1:
+ goto inline$IsListEmpty$5$Return#1;
+
+ inline$IsListEmpty$5$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$ := inline$IsListEmpty$5$$result.IsListEmpty$8096.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_111_head$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_111_head$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon61_Then#1, inline$BDLCleanupNotificationStruct$1$anon61_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon61_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon31#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon31#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_114#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_114#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_114_true#1, inline$BDLCleanupNotificationStruct$1$label_114_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_114_false#1:
+ assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$ == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_115#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_115#1:
+ goto inline$RemoveHeadList$5$Entry#1;
+
+ inline$RemoveHeadList$5$Entry#1:
+ goto inline$RemoveHeadList$5$start#1;
+
+ inline$RemoveHeadList$5$start#1:
+ goto inline$RemoveHeadList$5$label_3#1;
+
+ inline$RemoveHeadList$5$label_3#1:
+ goto inline$RemoveHeadList$5$label_4#1;
+
+ inline$RemoveHeadList$5$label_4#1:
+ goto inline$RemoveHeadList$5$label_5#1;
+
+ inline$RemoveHeadList$5$label_5#1:
+ havoc inline$RemoveHeadList$5$myNondetVar_0;
+ inline$RemoveHeadList$5$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$5$myNondetVar_0;
+ goto inline$RemoveHeadList$5$label_6#1;
+
+ inline$RemoveHeadList$5$label_6#1:
+ havoc inline$RemoveHeadList$5$myNondetVar_0;
+ goto inline$RemoveHeadList$5$label_7#1;
+
+ inline$RemoveHeadList$5$label_7#1:
+ goto inline$RemoveHeadList$5$label_8#1;
+
+ inline$RemoveHeadList$5$label_8#1:
+ goto inline$RemoveHeadList$5$label_9#1;
+
+ inline$RemoveHeadList$5$label_9#1:
+ inline$RemoveHeadList$5$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$5$$Entry$3$8126.16$RemoveHeadList$4;
+ goto inline$RemoveHeadList$5$label_1#1;
+
+ inline$RemoveHeadList$5$label_1#1:
+ goto inline$RemoveHeadList$5$Return#1;
+
+ inline$RemoveHeadList$5$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3218.26$30$ := inline$RemoveHeadList$5$$result.RemoveHeadList$8121.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_115$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_115$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon62_Then#1, inline$BDLCleanupNotificationStruct$1$anon62_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon62_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon33#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon33#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_149#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_149#1:
+ inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$1$$result.RemoveHeadList$3218.26$30$;
+ goto inline$BDLCleanupNotificationStruct$1$label_150#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_150#1:
+ inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4, 1, 16);
+ goto inline$BDLCleanupNotificationStruct$1$label_151#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_151#1:
+ call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$1$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4, 541869122);
+ goto inline$BDLCleanupNotificationStruct$1$anon68_Then#1, inline$BDLCleanupNotificationStruct$1$anon68_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon68_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon45#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon45#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_111_head#0;
+
+ inline$BDLCleanupNotificationStruct$1$label_111_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupNotificationStruct$1$anon68_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon62_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_114_true#1:
+ assume inline$BDLCleanupNotificationStruct$1$$result.IsListEmpty$3215.23$29$ != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_118#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_118#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
+ assume inline$BDLCleanupNotificationStruct$1$myNondetVar_0 == inline$BDLCleanupNotificationStruct$1$myNondetVar_1;
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$6$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$6$Entry#1:
+ inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$1$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$storm_KeReleaseSpinLock$6$start#1;
+
+ inline$storm_KeReleaseSpinLock$6$start#1:
+ inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$6$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$6$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$6$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$6$anon5_Then#1, inline$storm_KeReleaseSpinLock$6$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$6$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$6$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$6$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$6$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_8#1:
+ goto inline$storm_getThreadID$10$Entry#1;
+
+ inline$storm_getThreadID$10$Entry#1:
+ goto inline$storm_getThreadID$10$anon0#1;
+
+ inline$storm_getThreadID$10$anon0#1:
+ inline$storm_getThreadID$10$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$10$Return#1;
+
+ inline$storm_getThreadID$10$Return#1:
+ inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$10$tid;
+ goto inline$storm_KeReleaseSpinLock$6$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$6$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$6$label_11_true#1, inline$storm_KeReleaseSpinLock$6$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$6$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$6$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$6$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$6$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$6$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$6$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$6$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$6$anon6_Then#1, inline$storm_KeReleaseSpinLock$6$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$6$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$6$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$6$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$6$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$6$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$6$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$6$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$6$Return#1;
+
+ inline$storm_KeReleaseSpinLock$6$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$6$Return#1;
+
+ inline$storm_KeReleaseSpinLock$6$Return#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_118$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_118$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon63_Then#1, inline$BDLCleanupNotificationStruct$1$anon63_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon63_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon35#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon35#1:
+ havoc inline$BDLCleanupNotificationStruct$1$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$1$label_121#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_121#1:
+ call KfLowerIrql(inline$BDLCleanupNotificationStruct$1$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
+ goto inline$BDLCleanupNotificationStruct$1$anon64_Then#1, inline$BDLCleanupNotificationStruct$1$anon64_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon64_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon37#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon37#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_124#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_124#1:
+ goto inline$BDLGetDebugLevel$670$Entry#1;
+
+ inline$BDLGetDebugLevel$670$Entry#1:
+ goto inline$BDLGetDebugLevel$670$start#1;
+
+ inline$BDLGetDebugLevel$670$start#1:
+ goto inline$BDLGetDebugLevel$670$label_3#1;
+
+ inline$BDLGetDebugLevel$670$label_3#1:
+ havoc inline$BDLGetDebugLevel$670$myNondetVar_0;
+ inline$BDLGetDebugLevel$670$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$670$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$670$label_1#1;
+
+ inline$BDLGetDebugLevel$670$label_1#1:
+ goto inline$BDLGetDebugLevel$670$Return#1;
+
+ inline$BDLGetDebugLevel$670$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$ := inline$BDLGetDebugLevel$670$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_124$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_124$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon65_Then#1, inline$BDLCleanupNotificationStruct$1$anon65_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon65_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon39#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon39#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_127#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_127#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_127_true#1, inline$BDLCleanupNotificationStruct$1$label_127_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_127_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_128#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_127_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$31$) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_131#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_131#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_132#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_132#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_133#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_133#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_134#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_134#1:
+ havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$32$;
+ goto inline$BDLCleanupNotificationStruct$1$label_128#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_128#1:
+ goto inline$BDLGetDebugLevel$671$Entry#1;
+
+ inline$BDLGetDebugLevel$671$Entry#1:
+ goto inline$BDLGetDebugLevel$671$start#1;
+
+ inline$BDLGetDebugLevel$671$start#1:
+ goto inline$BDLGetDebugLevel$671$label_3#1;
+
+ inline$BDLGetDebugLevel$671$label_3#1:
+ havoc inline$BDLGetDebugLevel$671$myNondetVar_0;
+ inline$BDLGetDebugLevel$671$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$671$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$671$label_1#1;
+
+ inline$BDLGetDebugLevel$671$label_1#1:
+ goto inline$BDLGetDebugLevel$671$Return#1;
+
+ inline$BDLGetDebugLevel$671$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$ := inline$BDLGetDebugLevel$671$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_128$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_128$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon66_Then#1, inline$BDLCleanupNotificationStruct$1$anon66_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon66_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon41#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon41#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_137#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_137#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_137_true#1, inline$BDLCleanupNotificationStruct$1$label_137_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_137_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_138#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_137_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$36$) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_141#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_141#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_142#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_142#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_143#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_143#1:
+ call inline$BDLCleanupNotificationStruct$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$1$label_144#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_144#1:
+ havoc inline$BDLCleanupNotificationStruct$1$$result.DbgPrint$3231.0$37$;
+ goto inline$BDLCleanupNotificationStruct$1$label_138#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_138#1:
+ goto inline$BDLGetDebugLevel$672$Entry#1;
+
+ inline$BDLGetDebugLevel$672$Entry#1:
+ goto inline$BDLGetDebugLevel$672$start#1;
+
+ inline$BDLGetDebugLevel$672$start#1:
+ goto inline$BDLGetDebugLevel$672$label_3#1;
+
+ inline$BDLGetDebugLevel$672$label_3#1:
+ havoc inline$BDLGetDebugLevel$672$myNondetVar_0;
+ inline$BDLGetDebugLevel$672$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$672$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$672$label_1#1;
+
+ inline$BDLGetDebugLevel$672$label_1#1:
+ goto inline$BDLGetDebugLevel$672$Return#1;
+
+ inline$BDLGetDebugLevel$672$Return#1:
+ inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$ := inline$BDLGetDebugLevel$672$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$1$label_138$1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_138$1#1:
+ goto inline$BDLCleanupNotificationStruct$1$anon67_Then#1, inline$BDLCleanupNotificationStruct$1$anon67_Else#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon67_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$anon43#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon43#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_147#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_147#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_147_true#1, inline$BDLCleanupNotificationStruct$1$label_147_false#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_147_false#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$, 4) == 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_147_true#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$1$$result.BDLGetDebugLevel$3231.0$41$, 4) != 0;
+ goto inline$BDLCleanupNotificationStruct$1$label_148#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_148#1:
+ goto inline$BDLCleanupNotificationStruct$1$label_1#1;
+
+ inline$BDLCleanupNotificationStruct$1$label_1#1:
+ call __HAVOC_free(inline$BDLCleanupNotificationStruct$1$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4);
+ call __HAVOC_free(inline$BDLCleanupNotificationStruct$1$$irql$3$3113.45$BDLCleanupNotificationStruct$4);
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon67_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon66_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon65_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon64_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon63_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon61_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$1$Return#1;
+
+ inline$BDLCleanupNotificationStruct$1$Return#1:
+ goto inline$BDLHandleRemove$1$label_38$1#1;
+
+ inline$BDLHandleRemove$1$label_38$1#1:
+ goto inline$BDLHandleRemove$1$anon47_Then#1, inline$BDLHandleRemove$1$anon47_Else#1;
+
+ inline$BDLHandleRemove$1$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon11#1;
+
+ inline$BDLHandleRemove$1$anon11#1:
+ goto inline$BDLHandleRemove$1$label_41#1;
+
+ inline$BDLHandleRemove$1$label_41#1:
+ goto inline$BDLCleanupDataHandles$1$Entry#1;
+
+ inline$BDLCleanupDataHandles$1$Entry#1:
+ inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1 := inline$BDLHandleRemove$1$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
+ goto inline$BDLCleanupDataHandles$1$start#1;
+
+ inline$BDLCleanupDataHandles$1$start#1:
+ call inline$BDLCleanupDataHandles$1$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(4);
+ call inline$BDLCleanupDataHandles$1$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(8);
+ call inline$BDLCleanupDataHandles$1$$irql$6$3249.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(1);
+ inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1;
+ goto inline$BDLCleanupDataHandles$1$label_3#1;
+
+ inline$BDLCleanupDataHandles$1$label_3#1:
+ goto inline$BDLCleanupDataHandles$1$label_4#1;
+
+ inline$BDLCleanupDataHandles$1$label_4#1:
+ goto inline$BDLCleanupDataHandles$1$label_5#1;
+
+ inline$BDLCleanupDataHandles$1$label_5#1:
+ inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := 0;
+ goto inline$BDLCleanupDataHandles$1$label_6#1;
+
+ inline$BDLCleanupDataHandles$1$label_6#1:
+ goto inline$BDLCleanupDataHandles$1$label_7#1;
+
+ inline$BDLCleanupDataHandles$1$label_7#1:
+ goto inline$BDLCleanupDataHandles$1$label_8#1;
+
+ inline$BDLCleanupDataHandles$1$label_8#1:
+ goto inline$BDLCleanupDataHandles$1$label_9#1;
+
+ inline$BDLCleanupDataHandles$1$label_9#1:
+ goto inline$BDLGetDebugLevel$673$Entry#1;
+
+ inline$BDLGetDebugLevel$673$Entry#1:
+ goto inline$BDLGetDebugLevel$673$start#1;
+
+ inline$BDLGetDebugLevel$673$start#1:
+ goto inline$BDLGetDebugLevel$673$label_3#1;
+
+ inline$BDLGetDebugLevel$673$label_3#1:
+ havoc inline$BDLGetDebugLevel$673$myNondetVar_0;
+ inline$BDLGetDebugLevel$673$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$673$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$673$label_1#1;
+
+ inline$BDLGetDebugLevel$673$label_1#1:
+ goto inline$BDLGetDebugLevel$673$Return#1;
+
+ inline$BDLGetDebugLevel$673$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$ := inline$BDLGetDebugLevel$673$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_9$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_9$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon30_Then#1, inline$BDLCleanupDataHandles$1$anon30_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon1#1;
+
+ inline$BDLCleanupDataHandles$1$anon1#1:
+ goto inline$BDLCleanupDataHandles$1$label_12#1;
+
+ inline$BDLCleanupDataHandles$1$label_12#1:
+ goto inline$BDLCleanupDataHandles$1$label_12_true#1, inline$BDLCleanupDataHandles$1$label_12_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_12_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_13#1;
+
+ inline$BDLCleanupDataHandles$1$label_12_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$1$) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_16#1;
+
+ inline$BDLCleanupDataHandles$1$label_16#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_17#1;
+
+ inline$BDLCleanupDataHandles$1$label_17#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_18#1;
+
+ inline$BDLCleanupDataHandles$1$label_18#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_19#1;
+
+ inline$BDLCleanupDataHandles$1$label_19#1:
+ havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$2$;
+ goto inline$BDLCleanupDataHandles$1$label_13#1;
+
+ inline$BDLCleanupDataHandles$1$label_13#1:
+ goto inline$BDLGetDebugLevel$674$Entry#1;
+
+ inline$BDLGetDebugLevel$674$Entry#1:
+ goto inline$BDLGetDebugLevel$674$start#1;
+
+ inline$BDLGetDebugLevel$674$start#1:
+ goto inline$BDLGetDebugLevel$674$label_3#1;
+
+ inline$BDLGetDebugLevel$674$label_3#1:
+ havoc inline$BDLGetDebugLevel$674$myNondetVar_0;
+ inline$BDLGetDebugLevel$674$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$674$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$674$label_1#1;
+
+ inline$BDLGetDebugLevel$674$label_1#1:
+ goto inline$BDLGetDebugLevel$674$Return#1;
+
+ inline$BDLGetDebugLevel$674$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$ := inline$BDLGetDebugLevel$674$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_13$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_13$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon31_Then#1, inline$BDLCleanupDataHandles$1$anon31_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon3#1;
+
+ inline$BDLCleanupDataHandles$1$anon3#1:
+ goto inline$BDLCleanupDataHandles$1$label_22#1;
+
+ inline$BDLCleanupDataHandles$1$label_22#1:
+ goto inline$BDLCleanupDataHandles$1$label_22_true#1, inline$BDLCleanupDataHandles$1$label_22_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_22_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_23#1;
+
+ inline$BDLCleanupDataHandles$1$label_22_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$6$) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_26#1;
+
+ inline$BDLCleanupDataHandles$1$label_26#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_27#1;
+
+ inline$BDLCleanupDataHandles$1$label_27#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_28#1;
+
+ inline$BDLCleanupDataHandles$1$label_28#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_29#1;
+
+ inline$BDLCleanupDataHandles$1$label_29#1:
+ havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3251.0$7$;
+ goto inline$BDLCleanupDataHandles$1$label_23#1;
+
+ inline$BDLCleanupDataHandles$1$label_23#1:
+ goto inline$BDLGetDebugLevel$675$Entry#1;
+
+ inline$BDLGetDebugLevel$675$Entry#1:
+ goto inline$BDLGetDebugLevel$675$start#1;
+
+ inline$BDLGetDebugLevel$675$start#1:
+ goto inline$BDLGetDebugLevel$675$label_3#1;
+
+ inline$BDLGetDebugLevel$675$label_3#1:
+ havoc inline$BDLGetDebugLevel$675$myNondetVar_0;
+ inline$BDLGetDebugLevel$675$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$675$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$675$label_1#1;
+
+ inline$BDLGetDebugLevel$675$label_1#1:
+ goto inline$BDLGetDebugLevel$675$Return#1;
+
+ inline$BDLGetDebugLevel$675$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$ := inline$BDLGetDebugLevel$675$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_23$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_23$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon32_Then#1, inline$BDLCleanupDataHandles$1$anon32_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon5#1;
+
+ inline$BDLCleanupDataHandles$1$anon5#1:
+ goto inline$BDLCleanupDataHandles$1$label_32#1;
+
+ inline$BDLCleanupDataHandles$1$label_32#1:
+ goto inline$BDLCleanupDataHandles$1$label_32_true#1, inline$BDLCleanupDataHandles$1$label_32_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_32_false#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$, 4) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_33#1;
+
+ inline$BDLCleanupDataHandles$1$label_32_true#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3251.0$11$, 4) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_34#1;
+
+ inline$BDLCleanupDataHandles$1$label_34#1:
+ goto inline$BDLCleanupDataHandles$1$label_33#1;
+
+ inline$BDLCleanupDataHandles$1$label_33#1:
+ goto inline$BDLCleanupDataHandles$1$label_35#1;
+
+ inline$BDLCleanupDataHandles$1$label_35#1:
+ goto inline$BDLLockHandleList$1$Entry#1;
+
+ inline$BDLLockHandleList$1$Entry#1:
+ inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1 := inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
+ goto inline$BDLLockHandleList$1$start#1;
+
+ inline$BDLLockHandleList$1$start#1:
+ inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8 := inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1;
+ goto inline$BDLLockHandleList$1$label_3#1;
+
+ inline$BDLLockHandleList$1$label_3#1:
+ havoc inline$BDLLockHandleList$1$myNondetVar_0;
+ havoc inline$BDLLockHandleList$1$myNondetVar_1;
+ assume inline$BDLLockHandleList$1$myNondetVar_0 == inline$BDLLockHandleList$1$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$4$Entry#1;
+
+ inline$storm_KeAcquireSpinLock$4$Entry#1:
+ inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLLockHandleList$1$$pBDLExtension$1$134.40$BDLLockHandleList$8);
+ goto inline$storm_KeAcquireSpinLock$4$start#1;
+
+ inline$storm_KeAcquireSpinLock$4$start#1:
+ inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
+ goto inline$storm_KeAcquireSpinLock$4$label_3#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_3#1:
+ goto inline$storm_KeAcquireSpinLock$4$label_4#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_4#1:
+ goto inline$storm_getThreadID$11$Entry#1;
+
+ inline$storm_getThreadID$11$Entry#1:
+ goto inline$storm_getThreadID$11$anon0#1;
+
+ inline$storm_getThreadID$11$anon0#1:
+ inline$storm_getThreadID$11$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$11$Return#1;
+
+ inline$storm_getThreadID$11$Return#1:
+ inline$storm_KeAcquireSpinLock$4$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$11$tid;
+ goto inline$storm_KeAcquireSpinLock$4$label_4$1#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_4$1#1:
+ goto inline$storm_KeAcquireSpinLock$4$label_7#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_7#1:
+ inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$4$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$4$label_8#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_8#1:
+ goto inline$storm_KeAcquireSpinLock$4$label_9#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_9#1:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$4$label_12#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_12#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$4$anon7_Then#1, inline$storm_KeAcquireSpinLock$4$anon7_Else#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$4$anon1#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$4$label_13#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_13#1:
+ goto inline$storm_KeAcquireSpinLock$4$label_13_true#1, inline$storm_KeAcquireSpinLock$4$label_13_false#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_13_false#1:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$4$label_14#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_14#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$4$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_13_true#1:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$4$label_17#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_17#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$4$anon8_Then#1, inline$storm_KeAcquireSpinLock$4$anon8_Else#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$4$anon4#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon4#1:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$4$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
+ goto inline$storm_KeAcquireSpinLock$4$label_18#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_18#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$4$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$4$$tid$3$128.6$storm_KeAcquireSpinLock$8];
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$4$label_19#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_19#1:
+ goto inline$storm_KeAcquireSpinLock$4$anon9_Then#1, inline$storm_KeAcquireSpinLock$4$anon9_Else#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon9_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$4$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon9_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$4$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon6#1:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$4$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$4$label_1#1:
+ goto inline$storm_KeAcquireSpinLock$4$Return#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$4$Return#1;
+
+ inline$storm_KeAcquireSpinLock$4$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$4$Return#1;
+
+ inline$storm_KeAcquireSpinLock$4$Return#1:
+ goto inline$BDLLockHandleList$1$label_3$1#1;
+
+ inline$BDLLockHandleList$1$label_3$1#1:
+ goto inline$BDLLockHandleList$1$anon2_Then#1, inline$BDLLockHandleList$1$anon2_Else#1;
+
+ inline$BDLLockHandleList$1$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLLockHandleList$1$anon1#1;
+
+ inline$BDLLockHandleList$1$anon1#1:
+ havoc inline$BDLLockHandleList$1$myNondetVar_0;
+ goto inline$BDLLockHandleList$1$label_1#1;
+
+ inline$BDLLockHandleList$1$label_1#1:
+ goto inline$BDLLockHandleList$1$Return#1;
+
+ inline$BDLLockHandleList$1$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLLockHandleList$1$Return#1;
+
+ inline$BDLLockHandleList$1$Return#1:
+ goto inline$BDLCleanupDataHandles$1$label_35$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_35$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon33_Then#1, inline$BDLCleanupDataHandles$1$anon33_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon7#1;
+
+ inline$BDLCleanupDataHandles$1$anon7#1:
+ goto inline$BDLCleanupDataHandles$1$label_38#1;
+
+ inline$BDLCleanupDataHandles$1$label_38#1:
+ goto inline$BDLCleanupDataHandles$1$label_38_head#1;
+
+ inline$BDLCleanupDataHandles$1$label_38_head#1:
+ goto inline$BDLGetFirstHandle$1$Entry#1;
+
+ inline$BDLGetFirstHandle$1$Entry#1:
+ goto inline$BDLGetFirstHandle$1$start#1;
+
+ inline$BDLGetFirstHandle$1$start#1:
+ goto inline$BDLGetFirstHandle$1$label_3#1;
+
+ inline$BDLGetFirstHandle$1$label_3#1:
+ goto inline$BDLGetFirstHandle$1$label_3_true#1, inline$BDLGetFirstHandle$1$label_3_false#1;
+
+ inline$BDLGetFirstHandle$1$label_3_false#1:
+ havoc inline$BDLGetFirstHandle$1$myNondetVar_0;
+ assume inline$BDLGetFirstHandle$1$myNondetVar_0 == 0;
+ goto inline$BDLGetFirstHandle$1$label_4#1;
+
+ inline$BDLGetFirstHandle$1$label_4#1:
+ inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$ := 0;
+ goto inline$BDLGetFirstHandle$1$label_1#1;
+
+ inline$BDLGetFirstHandle$1$label_3_true#1:
+ havoc inline$BDLGetFirstHandle$1$myNondetVar_0;
+ assume inline$BDLGetFirstHandle$1$myNondetVar_0 != 0;
+ goto inline$BDLGetFirstHandle$1$label_5#1;
+
+ inline$BDLGetFirstHandle$1$label_5#1:
+ havoc inline$BDLGetFirstHandle$1$myNondetVar_0;
+ havoc inline$BDLGetFirstHandle$1$myNondetVar_1;
+ goto inline$BDLGetFirstHandle$1$label_6#1;
+
+ inline$BDLGetFirstHandle$1$label_6#1:
+ inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$ := 1;
+ goto inline$BDLGetFirstHandle$1$label_1#1;
+
+ inline$BDLGetFirstHandle$1$label_1#1:
+ goto inline$BDLGetFirstHandle$1$Return#1;
+
+ inline$BDLGetFirstHandle$1$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$ := inline$BDLGetFirstHandle$1$$result.BDLGetFirstHandle$276.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_38_head$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_38_head$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon34_Then#1, inline$BDLCleanupDataHandles$1$anon34_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon9#1;
+
+ inline$BDLCleanupDataHandles$1$anon9#1:
+ goto inline$BDLCleanupDataHandles$1$label_41#1;
+
+ inline$BDLCleanupDataHandles$1$label_41#1:
+ goto inline$BDLCleanupDataHandles$1$label_41_true#1, inline$BDLCleanupDataHandles$1$label_41_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_41_false#1:
+ assume !INT_EQ(inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$, 1);
+ goto inline$BDLCleanupDataHandles$1$label_42#1;
+
+ inline$BDLCleanupDataHandles$1$label_42#1:
+ havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ goto inline$BDLReleaseHandleList$1$Entry#1;
+
+ inline$BDLReleaseHandleList$1$Entry#1:
+ inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1 := inline$BDLCleanupDataHandles$1$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
+ goto inline$BDLReleaseHandleList$1$start#1;
+
+ inline$BDLReleaseHandleList$1$start#1:
+ inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8 := inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1;
+ goto inline$BDLReleaseHandleList$1$label_3#1;
+
+ inline$BDLReleaseHandleList$1$label_3#1:
+ havoc inline$BDLReleaseHandleList$1$myNondetVar_0;
+ havoc inline$BDLReleaseHandleList$1$myNondetVar_1;
+ assume inline$BDLReleaseHandleList$1$myNondetVar_0 == inline$BDLReleaseHandleList$1$myNondetVar_1;
+ goto inline$storm_KeReleaseSpinLock$7$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$7$Entry#1:
+ inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLReleaseHandleList$1$$pBDLExtension$1$145.40$BDLReleaseHandleList$8);
+ goto inline$storm_KeReleaseSpinLock$7$start#1;
+
+ inline$storm_KeReleaseSpinLock$7$start#1:
+ inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$7$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$7$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$7$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$7$anon5_Then#1, inline$storm_KeReleaseSpinLock$7$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$7$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$7$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$7$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$7$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_8#1:
+ goto inline$storm_getThreadID$12$Entry#1;
+
+ inline$storm_getThreadID$12$Entry#1:
+ goto inline$storm_getThreadID$12$anon0#1;
+
+ inline$storm_getThreadID$12$anon0#1:
+ inline$storm_getThreadID$12$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$12$Return#1;
+
+ inline$storm_getThreadID$12$Return#1:
+ inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$12$tid;
+ goto inline$storm_KeReleaseSpinLock$7$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$7$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$7$label_11_true#1, inline$storm_KeReleaseSpinLock$7$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$7$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$7$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$7$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$7$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$7$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$7$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$7$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$7$anon6_Then#1, inline$storm_KeReleaseSpinLock$7$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$7$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$7$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$7$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$7$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$7$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$7$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$7$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$7$Return#1;
+
+ inline$storm_KeReleaseSpinLock$7$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$7$Return#1;
+
+ inline$storm_KeReleaseSpinLock$7$Return#1:
+ goto inline$BDLReleaseHandleList$1$label_3$1#1;
+
+ inline$BDLReleaseHandleList$1$label_3$1#1:
+ goto inline$BDLReleaseHandleList$1$anon2_Then#1, inline$BDLReleaseHandleList$1$anon2_Else#1;
+
+ inline$BDLReleaseHandleList$1$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLReleaseHandleList$1$anon1#1;
+
+ inline$BDLReleaseHandleList$1$anon1#1:
+ havoc inline$BDLReleaseHandleList$1$myNondetVar_0;
+ goto inline$BDLReleaseHandleList$1$label_1#1;
+
+ inline$BDLReleaseHandleList$1$label_1#1:
+ goto inline$BDLReleaseHandleList$1$Return#1;
+
+ inline$BDLReleaseHandleList$1$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLReleaseHandleList$1$Return#1;
+
+ inline$BDLReleaseHandleList$1$Return#1:
+ goto inline$BDLCleanupDataHandles$1$label_42$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_42$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon35_Then#1, inline$BDLCleanupDataHandles$1$anon35_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon11#1;
+
+ inline$BDLCleanupDataHandles$1$anon11#1:
+ goto inline$BDLCleanupDataHandles$1$label_87#1;
+
+ inline$BDLCleanupDataHandles$1$label_87#1:
+ goto inline$BDLGetDebugLevel$679$Entry#1;
+
+ inline$BDLGetDebugLevel$679$Entry#1:
+ goto inline$BDLGetDebugLevel$679$start#1;
+
+ inline$BDLGetDebugLevel$679$start#1:
+ goto inline$BDLGetDebugLevel$679$label_3#1;
+
+ inline$BDLGetDebugLevel$679$label_3#1:
+ havoc inline$BDLGetDebugLevel$679$myNondetVar_0;
+ inline$BDLGetDebugLevel$679$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$679$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$679$label_1#1;
+
+ inline$BDLGetDebugLevel$679$label_1#1:
+ goto inline$BDLGetDebugLevel$679$Return#1;
+
+ inline$BDLGetDebugLevel$679$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$ := inline$BDLGetDebugLevel$679$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_87$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_87$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon42_Then#1, inline$BDLCleanupDataHandles$1$anon42_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon25#1;
+
+ inline$BDLCleanupDataHandles$1$anon25#1:
+ goto inline$BDLCleanupDataHandles$1$label_90#1;
+
+ inline$BDLCleanupDataHandles$1$label_90#1:
+ goto inline$BDLCleanupDataHandles$1$label_90_true#1, inline$BDLCleanupDataHandles$1$label_90_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_90_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_91#1;
+
+ inline$BDLCleanupDataHandles$1$label_90_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$26$) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_94#1;
+
+ inline$BDLCleanupDataHandles$1$label_94#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_95#1;
+
+ inline$BDLCleanupDataHandles$1$label_95#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_96#1;
+
+ inline$BDLCleanupDataHandles$1$label_96#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_97#1;
+
+ inline$BDLCleanupDataHandles$1$label_97#1:
+ havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$27$;
+ goto inline$BDLCleanupDataHandles$1$label_91#1;
+
+ inline$BDLCleanupDataHandles$1$label_91#1:
+ goto inline$BDLGetDebugLevel$680$Entry#1;
+
+ inline$BDLGetDebugLevel$680$Entry#1:
+ goto inline$BDLGetDebugLevel$680$start#1;
+
+ inline$BDLGetDebugLevel$680$start#1:
+ goto inline$BDLGetDebugLevel$680$label_3#1;
+
+ inline$BDLGetDebugLevel$680$label_3#1:
+ havoc inline$BDLGetDebugLevel$680$myNondetVar_0;
+ inline$BDLGetDebugLevel$680$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$680$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$680$label_1#1;
+
+ inline$BDLGetDebugLevel$680$label_1#1:
+ goto inline$BDLGetDebugLevel$680$Return#1;
+
+ inline$BDLGetDebugLevel$680$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$ := inline$BDLGetDebugLevel$680$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_91$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_91$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon43_Then#1, inline$BDLCleanupDataHandles$1$anon43_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon27#1;
+
+ inline$BDLCleanupDataHandles$1$anon27#1:
+ goto inline$BDLCleanupDataHandles$1$label_100#1;
+
+ inline$BDLCleanupDataHandles$1$label_100#1:
+ goto inline$BDLCleanupDataHandles$1$label_100_true#1, inline$BDLCleanupDataHandles$1$label_100_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_100_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_101#1;
+
+ inline$BDLCleanupDataHandles$1$label_100_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$31$) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_104#1;
+
+ inline$BDLCleanupDataHandles$1$label_104#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_105#1;
+
+ inline$BDLCleanupDataHandles$1$label_105#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_106#1;
+
+ inline$BDLCleanupDataHandles$1$label_106#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_107#1;
+
+ inline$BDLCleanupDataHandles$1$label_107#1:
+ havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3308.0$32$;
+ goto inline$BDLCleanupDataHandles$1$label_101#1;
+
+ inline$BDLCleanupDataHandles$1$label_101#1:
+ goto inline$BDLGetDebugLevel$681$Entry#1;
+
+ inline$BDLGetDebugLevel$681$Entry#1:
+ goto inline$BDLGetDebugLevel$681$start#1;
+
+ inline$BDLGetDebugLevel$681$start#1:
+ goto inline$BDLGetDebugLevel$681$label_3#1;
+
+ inline$BDLGetDebugLevel$681$label_3#1:
+ havoc inline$BDLGetDebugLevel$681$myNondetVar_0;
+ inline$BDLGetDebugLevel$681$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$681$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$681$label_1#1;
+
+ inline$BDLGetDebugLevel$681$label_1#1:
+ goto inline$BDLGetDebugLevel$681$Return#1;
+
+ inline$BDLGetDebugLevel$681$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$ := inline$BDLGetDebugLevel$681$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_101$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_101$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon44_Then#1, inline$BDLCleanupDataHandles$1$anon44_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon29#1;
+
+ inline$BDLCleanupDataHandles$1$anon29#1:
+ goto inline$BDLCleanupDataHandles$1$label_110#1;
+
+ inline$BDLCleanupDataHandles$1$label_110#1:
+ goto inline$BDLCleanupDataHandles$1$label_110_true#1, inline$BDLCleanupDataHandles$1$label_110_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_110_false#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$, 4) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_1#1;
+
+ inline$BDLCleanupDataHandles$1$label_110_true#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3308.0$36$, 4) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_111#1;
+
+ inline$BDLCleanupDataHandles$1$label_111#1:
+ goto inline$BDLCleanupDataHandles$1$label_1#1;
+
+ inline$BDLCleanupDataHandles$1$label_1#1:
+ call __HAVOC_free(inline$BDLCleanupDataHandles$1$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4);
+ call __HAVOC_free(inline$BDLCleanupDataHandles$1$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4);
+ call __HAVOC_free(inline$BDLCleanupDataHandles$1$$irql$6$3249.28$BDLCleanupDataHandles$4);
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$label_41_true#1:
+ assume INT_EQ(inline$BDLCleanupDataHandles$1$$result.BDLGetFirstHandle$3264.27$12$, 1);
+ goto inline$BDLCleanupDataHandles$1$label_45#1;
+
+ inline$BDLCleanupDataHandles$1$label_45#1:
+ havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$Entry#1;
+
+ inline$BDLRemoveHandleFromList$1$Entry#1:
+ inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8_.1 := inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$start#1;
+
+ inline$BDLRemoveHandleFromList$1$start#1:
+ inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8_.1;
+ goto inline$BDLRemoveHandleFromList$1$label_3#1;
+
+ inline$BDLRemoveHandleFromList$1$label_3#1:
+ goto inline$BDLRemoveHandleFromList$1$label_4#1;
+
+ inline$BDLRemoveHandleFromList$1$label_4#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_5#1;
+
+ inline$BDLRemoveHandleFromList$1$label_5#1:
+ goto inline$BDLRemoveHandleFromList$1$label_6#1;
+
+ inline$BDLRemoveHandleFromList$1$label_6#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_7#1;
+
+ inline$BDLRemoveHandleFromList$1$label_7#1:
+ goto inline$BDLRemoveHandleFromList$1$label_7_true#1, inline$BDLRemoveHandleFromList$1$label_7_false#1;
+
+ inline$BDLRemoveHandleFromList$1$label_7_false#1:
+ assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
+ goto inline$BDLRemoveHandleFromList$1$label_8#1;
+
+ inline$BDLRemoveHandleFromList$1$label_8#1:
+ goto inline$BDLRemoveHandleFromList$1$label_1#1;
+
+ inline$BDLRemoveHandleFromList$1$label_7_true#1:
+ assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
+ goto inline$BDLRemoveHandleFromList$1$label_9#1;
+
+ inline$BDLRemoveHandleFromList$1$label_9#1:
+ goto inline$BDLRemoveHandleFromList$1$label_9_true#1, inline$BDLRemoveHandleFromList$1$label_9_false#1;
+
+ inline$BDLRemoveHandleFromList$1$label_9_false#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$1$label_10#1;
+
+ inline$BDLRemoveHandleFromList$1$label_10#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_20#1;
+
+ inline$BDLRemoveHandleFromList$1$label_20#1:
+ goto inline$BDLRemoveHandleFromList$1$label_20_head#1;
+
+ inline$BDLRemoveHandleFromList$1$label_20_head#1:
+ goto inline$BDLRemoveHandleFromList$1$label_20_true#1, inline$BDLRemoveHandleFromList$1$label_20_false#1;
+
+ inline$BDLRemoveHandleFromList$1$label_20_false#1:
+ assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
+ goto inline$BDLRemoveHandleFromList$1$label_21#1;
+
+ inline$BDLRemoveHandleFromList$1$label_20_true#1:
+ assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
+ goto inline$BDLRemoveHandleFromList$1$label_22#1;
+
+ inline$BDLRemoveHandleFromList$1$label_22#1:
+ goto inline$BDLRemoveHandleFromList$1$label_22_true#1, inline$BDLRemoveHandleFromList$1$label_22_false#1;
+
+ inline$BDLRemoveHandleFromList$1$label_22_false#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ assume !INT_NEQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$1$label_21#1;
+
+ inline$BDLRemoveHandleFromList$1$label_21#1:
+ goto inline$BDLRemoveHandleFromList$1$label_21_true#1, inline$BDLRemoveHandleFromList$1$label_21_false#1;
+
+ inline$BDLRemoveHandleFromList$1$label_21_false#1:
+ assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
+ goto inline$BDLRemoveHandleFromList$1$label_25#1;
+
+ inline$BDLRemoveHandleFromList$1$label_25#1:
+ goto inline$BDLRemoveHandleFromList$1$label_1#1;
+
+ inline$BDLRemoveHandleFromList$1$label_21_true#1:
+ assume inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
+ goto inline$BDLRemoveHandleFromList$1$label_26#1;
+
+ inline$BDLRemoveHandleFromList$1$label_26#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_27#1;
+
+ inline$BDLRemoveHandleFromList$1$label_27#1:
+ goto inline$BDLRemoveHandleFromList$1$label_27_true#1, inline$BDLRemoveHandleFromList$1$label_27_false#1;
+
+ inline$BDLRemoveHandleFromList$1$label_27_false#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$1$label_15#1;
+
+ inline$BDLRemoveHandleFromList$1$label_27_true#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$1$label_28#1;
+
+ inline$BDLRemoveHandleFromList$1$label_28#1:
+ goto inline$BDLRemoveHandleFromList$1$label_15#1;
+
+ inline$BDLRemoveHandleFromList$1$label_22_true#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ assume INT_NEQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$1$label_23#1;
+
+ inline$BDLRemoveHandleFromList$1$label_23#1:
+ goto inline$BDLRemoveHandleFromList$1$label_24#1;
+
+ inline$BDLRemoveHandleFromList$1$label_24#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_20_head#0;
+
+ inline$BDLRemoveHandleFromList$1$label_20_head#0:
+ assume false;
+ return;
+
+ inline$BDLRemoveHandleFromList$1$label_9_true#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$1$label_11#1;
+
+ inline$BDLRemoveHandleFromList$1$label_11#1:
+ goto inline$BDLRemoveHandleFromList$1$label_11_true#1, inline$BDLRemoveHandleFromList$1$label_11_false#1;
+
+ inline$BDLRemoveHandleFromList$1$label_11_false#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_1;
+ assume !INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$myNondetVar_1);
+ goto inline$BDLRemoveHandleFromList$1$label_12#1;
+
+ inline$BDLRemoveHandleFromList$1$label_12#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_15#1;
+
+ inline$BDLRemoveHandleFromList$1$label_11_true#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_1;
+ assume INT_EQ(inline$BDLRemoveHandleFromList$1$myNondetVar_0, inline$BDLRemoveHandleFromList$1$myNondetVar_1);
+ goto inline$BDLRemoveHandleFromList$1$label_13#1;
+
+ inline$BDLRemoveHandleFromList$1$label_13#1:
+ goto inline$BDLRemoveHandleFromList$1$label_14#1;
+
+ inline$BDLRemoveHandleFromList$1$label_14#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_15#1;
+
+ inline$BDLRemoveHandleFromList$1$label_15#1:
+ havoc inline$BDLRemoveHandleFromList$1$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$1$label_16#1;
+
+ inline$BDLRemoveHandleFromList$1$label_16#1:
+ call ExFreePoolWithTag(inline$BDLRemoveHandleFromList$1$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8, 1280066626);
+ goto inline$BDLRemoveHandleFromList$1$anon2_Then#1, inline$BDLRemoveHandleFromList$1$anon2_Else#1;
+
+ inline$BDLRemoveHandleFromList$1$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLRemoveHandleFromList$1$anon1#1;
+
+ inline$BDLRemoveHandleFromList$1$anon1#1:
+ goto inline$BDLRemoveHandleFromList$1$label_19#1;
+
+ inline$BDLRemoveHandleFromList$1$label_19#1:
+ goto inline$BDLRemoveHandleFromList$1$label_1#1;
+
+ inline$BDLRemoveHandleFromList$1$label_1#1:
+ goto inline$BDLRemoveHandleFromList$1$Return#1;
+
+ inline$BDLRemoveHandleFromList$1$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLRemoveHandleFromList$1$Return#1;
+
+ inline$BDLRemoveHandleFromList$1$Return#1:
+ goto inline$BDLCleanupDataHandles$1$label_45$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_45$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon36_Then#1, inline$BDLCleanupDataHandles$1$anon36_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon13#1;
+
+ inline$BDLCleanupDataHandles$1$anon13#1:
+ goto inline$BDLCleanupDataHandles$1$label_48#1;
+
+ inline$BDLCleanupDataHandles$1$label_48#1:
+ havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ goto inline$BDLCleanupDataHandles$1$label_49#1;
+
+ inline$BDLCleanupDataHandles$1$label_49#1:
+ goto inline$BDLCleanupDataHandles$1$label_49_true#1, inline$BDLCleanupDataHandles$1$label_49_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_49_false#1:
+ havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCleanupDataHandles$1$myNondetVar_0, 2);
+ goto inline$BDLCleanupDataHandles$1$label_50#1;
+
+ inline$BDLCleanupDataHandles$1$label_50#1:
+ havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ goto inline$BDLCleanupDataHandles$1$label_57#1;
+
+ inline$BDLCleanupDataHandles$1$label_57#1:
+ goto inline$BDLCleanupDataHandles$1$label_60#1;
+
+ inline$BDLCleanupDataHandles$1$label_60#1:
+ inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$1$$callresult.$3284.85$14$;
+ goto inline$BDLCleanupDataHandles$1$label_61#1;
+
+ inline$BDLCleanupDataHandles$1$label_61#1:
+ goto inline$BDLCleanupDataHandles$1$label_61_true#1, inline$BDLCleanupDataHandles$1$label_61_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_61_false#1:
+ assume inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4 == 0;
+ goto inline$BDLCleanupDataHandles$1$label_54#1;
+
+ inline$BDLCleanupDataHandles$1$label_61_true#1:
+ assume inline$BDLCleanupDataHandles$1$$status$2$3245.28$BDLCleanupDataHandles$4 != 0;
+ goto inline$BDLCleanupDataHandles$1$label_62#1;
+
+ inline$BDLCleanupDataHandles$1$label_62#1:
+ goto inline$BDLGetDebugLevel$676$Entry#1;
+
+ inline$BDLGetDebugLevel$676$Entry#1:
+ goto inline$BDLGetDebugLevel$676$start#1;
+
+ inline$BDLGetDebugLevel$676$start#1:
+ goto inline$BDLGetDebugLevel$676$label_3#1;
+
+ inline$BDLGetDebugLevel$676$label_3#1:
+ havoc inline$BDLGetDebugLevel$676$myNondetVar_0;
+ inline$BDLGetDebugLevel$676$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$676$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$676$label_1#1;
+
+ inline$BDLGetDebugLevel$676$label_1#1:
+ goto inline$BDLGetDebugLevel$676$Return#1;
+
+ inline$BDLGetDebugLevel$676$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$ := inline$BDLGetDebugLevel$676$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_62$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_62$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon39_Then#1, inline$BDLCleanupDataHandles$1$anon39_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon19#1;
+
+ inline$BDLCleanupDataHandles$1$anon19#1:
+ goto inline$BDLCleanupDataHandles$1$label_65#1;
+
+ inline$BDLCleanupDataHandles$1$label_65#1:
+ goto inline$BDLCleanupDataHandles$1$label_65_true#1, inline$BDLCleanupDataHandles$1$label_65_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_65_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_66#1;
+
+ inline$BDLCleanupDataHandles$1$label_65_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$15$) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_69#1;
+
+ inline$BDLCleanupDataHandles$1$label_69#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_70#1;
+
+ inline$BDLCleanupDataHandles$1$label_70#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_71#1;
+
+ inline$BDLCleanupDataHandles$1$label_71#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_72#1;
+
+ inline$BDLCleanupDataHandles$1$label_72#1:
+ havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$16$;
+ goto inline$BDLCleanupDataHandles$1$label_66#1;
+
+ inline$BDLCleanupDataHandles$1$label_66#1:
+ goto inline$BDLGetDebugLevel$677$Entry#1;
+
+ inline$BDLGetDebugLevel$677$Entry#1:
+ goto inline$BDLGetDebugLevel$677$start#1;
+
+ inline$BDLGetDebugLevel$677$start#1:
+ goto inline$BDLGetDebugLevel$677$label_3#1;
+
+ inline$BDLGetDebugLevel$677$label_3#1:
+ havoc inline$BDLGetDebugLevel$677$myNondetVar_0;
+ inline$BDLGetDebugLevel$677$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$677$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$677$label_1#1;
+
+ inline$BDLGetDebugLevel$677$label_1#1:
+ goto inline$BDLGetDebugLevel$677$Return#1;
+
+ inline$BDLGetDebugLevel$677$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$ := inline$BDLGetDebugLevel$677$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_66$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_66$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon40_Then#1, inline$BDLCleanupDataHandles$1$anon40_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon21#1;
+
+ inline$BDLCleanupDataHandles$1$anon21#1:
+ goto inline$BDLCleanupDataHandles$1$label_75#1;
+
+ inline$BDLCleanupDataHandles$1$label_75#1:
+ goto inline$BDLCleanupDataHandles$1$label_75_true#1, inline$BDLCleanupDataHandles$1$label_75_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_75_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_76#1;
+
+ inline$BDLCleanupDataHandles$1$label_75_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$20$) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_79#1;
+
+ inline$BDLCleanupDataHandles$1$label_79#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_80#1;
+
+ inline$BDLCleanupDataHandles$1$label_80#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_81#1;
+
+ inline$BDLCleanupDataHandles$1$label_81#1:
+ call inline$BDLCleanupDataHandles$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$1$label_82#1;
+
+ inline$BDLCleanupDataHandles$1$label_82#1:
+ havoc inline$BDLCleanupDataHandles$1$$result.DbgPrint$3290.0$21$;
+ goto inline$BDLCleanupDataHandles$1$label_76#1;
+
+ inline$BDLCleanupDataHandles$1$label_76#1:
+ goto inline$BDLGetDebugLevel$678$Entry#1;
+
+ inline$BDLGetDebugLevel$678$Entry#1:
+ goto inline$BDLGetDebugLevel$678$start#1;
+
+ inline$BDLGetDebugLevel$678$start#1:
+ goto inline$BDLGetDebugLevel$678$label_3#1;
+
+ inline$BDLGetDebugLevel$678$label_3#1:
+ havoc inline$BDLGetDebugLevel$678$myNondetVar_0;
+ inline$BDLGetDebugLevel$678$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$678$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$678$label_1#1;
+
+ inline$BDLGetDebugLevel$678$label_1#1:
+ goto inline$BDLGetDebugLevel$678$Return#1;
+
+ inline$BDLGetDebugLevel$678$Return#1:
+ inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$ := inline$BDLGetDebugLevel$678$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$1$label_76$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_76$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon41_Then#1, inline$BDLCleanupDataHandles$1$anon41_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon23#1;
+
+ inline$BDLCleanupDataHandles$1$anon23#1:
+ goto inline$BDLCleanupDataHandles$1$label_85#1;
+
+ inline$BDLCleanupDataHandles$1$label_85#1:
+ goto inline$BDLCleanupDataHandles$1$label_85_true#1, inline$BDLCleanupDataHandles$1$label_85_false#1;
+
+ inline$BDLCleanupDataHandles$1$label_85_false#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$, 4) == 0;
+ goto inline$BDLCleanupDataHandles$1$label_54#1;
+
+ inline$BDLCleanupDataHandles$1$label_85_true#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$1$$result.BDLGetDebugLevel$3290.0$25$, 4) != 0;
+ goto inline$BDLCleanupDataHandles$1$label_86#1;
+
+ inline$BDLCleanupDataHandles$1$label_86#1:
+ goto inline$BDLCleanupDataHandles$1$label_54#1;
+
+ inline$BDLCleanupDataHandles$1$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$label_49_true#1:
+ havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLCleanupDataHandles$1$myNondetVar_0, 2);
+ goto inline$BDLCleanupDataHandles$1$label_51#1;
+
+ inline$BDLCleanupDataHandles$1$label_51#1:
+ havoc inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ goto inline$bdliFree$1$Entry#1;
+
+ inline$bdliFree$1$Entry#1:
+ inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4_.1 := inline$BDLCleanupDataHandles$1$myNondetVar_0;
+ goto inline$bdliFree$1$start#1;
+
+ inline$bdliFree$1$start#1:
+ inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4 := inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4_.1;
+ goto inline$bdliFree$1$label_3#1;
+
+ inline$bdliFree$1$label_3#1:
+ call ExFreePoolWithTag(inline$bdliFree$1$$pvBlock$1$2740.28$bdliFree$4, 1229734978);
+ goto inline$bdliFree$1$anon2_Then#1, inline$bdliFree$1$anon2_Else#1;
+
+ inline$bdliFree$1$anon2_Else#1:
+ assume !raiseException;
+ goto inline$bdliFree$1$anon1#1;
+
+ inline$bdliFree$1$anon1#1:
+ goto inline$bdliFree$1$label_1#1;
+
+ inline$bdliFree$1$label_1#1:
+ goto inline$bdliFree$1$Return#1;
+
+ inline$bdliFree$1$anon2_Then#1:
+ assume raiseException;
+ goto inline$bdliFree$1$Return#1;
+
+ inline$bdliFree$1$Return#1:
+ goto inline$BDLCleanupDataHandles$1$label_51$1#1;
+
+ inline$BDLCleanupDataHandles$1$label_51$1#1:
+ goto inline$BDLCleanupDataHandles$1$anon37_Then#1, inline$BDLCleanupDataHandles$1$anon37_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon15#1;
+
+ inline$BDLCleanupDataHandles$1$anon15#1:
+ goto inline$BDLCleanupDataHandles$1$label_54#1;
+
+ inline$BDLCleanupDataHandles$1$label_54#1:
+ call ExFreePoolWithTag(inline$BDLCleanupDataHandles$1$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4, 541869122);
+ goto inline$BDLCleanupDataHandles$1$anon38_Then#1, inline$BDLCleanupDataHandles$1$anon38_Else#1;
+
+ inline$BDLCleanupDataHandles$1$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$1$anon17#1;
+
+ inline$BDLCleanupDataHandles$1$anon17#1:
+ goto inline$BDLCleanupDataHandles$1$label_38_head#0;
+
+ inline$BDLCleanupDataHandles$1$label_38_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupDataHandles$1$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$1$Return#1;
+
+ inline$BDLCleanupDataHandles$1$Return#1:
+ goto inline$BDLHandleRemove$1$label_41$1#1;
+
+ inline$BDLHandleRemove$1$label_41$1#1:
+ goto inline$BDLHandleRemove$1$anon48_Then#1, inline$BDLHandleRemove$1$anon48_Else#1;
+
+ inline$BDLHandleRemove$1$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon13#1;
+
+ inline$BDLHandleRemove$1$anon13#1:
+ goto inline$BDLHandleRemove$1$label_44#1;
+
+ inline$BDLHandleRemove$1$label_44#1:
+ goto inline$BDLHandleRemove$1$label_44_true#1, inline$BDLHandleRemove$1$label_44_false#1;
+
+ inline$BDLHandleRemove$1$label_44_false#1:
+ havoc inline$BDLHandleRemove$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLHandleRemove$1$myNondetVar_0, 1);
+ goto inline$BDLHandleRemove$1$label_45#1;
+
+ inline$BDLHandleRemove$1$label_44_true#1:
+ havoc inline$BDLHandleRemove$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLHandleRemove$1$myNondetVar_0, 1);
+ goto inline$BDLHandleRemove$1$label_48#1;
+
+ inline$BDLHandleRemove$1$label_48#1:
+ goto inline$BDLHandleRemove$1$label_51#1;
+
+ inline$BDLHandleRemove$1$label_51#1:
+ inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$callresult.$2419.71$15$;
+ goto inline$BDLHandleRemove$1$label_52#1;
+
+ inline$BDLHandleRemove$1$label_52#1:
+ goto inline$BDLHandleRemove$1$label_52_true#1, inline$BDLHandleRemove$1$label_52_false#1;
+
+ inline$BDLHandleRemove$1$label_52_false#1:
+ assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 == 0;
+ goto inline$BDLHandleRemove$1$label_53#1;
+
+ inline$BDLHandleRemove$1$label_52_true#1:
+ assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 != 0;
+ goto inline$BDLHandleRemove$1$label_54#1;
+
+ inline$BDLHandleRemove$1$label_54#1:
+ goto inline$BDLGetDebugLevel$682$Entry#1;
+
+ inline$BDLGetDebugLevel$682$Entry#1:
+ goto inline$BDLGetDebugLevel$682$start#1;
+
+ inline$BDLGetDebugLevel$682$start#1:
+ goto inline$BDLGetDebugLevel$682$label_3#1;
+
+ inline$BDLGetDebugLevel$682$label_3#1:
+ havoc inline$BDLGetDebugLevel$682$myNondetVar_0;
+ inline$BDLGetDebugLevel$682$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$682$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$682$label_1#1;
+
+ inline$BDLGetDebugLevel$682$label_1#1:
+ goto inline$BDLGetDebugLevel$682$Return#1;
+
+ inline$BDLGetDebugLevel$682$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$ := inline$BDLGetDebugLevel$682$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_54$1#1;
+
+ inline$BDLHandleRemove$1$label_54$1#1:
+ goto inline$BDLHandleRemove$1$anon49_Then#1, inline$BDLHandleRemove$1$anon49_Else#1;
+
+ inline$BDLHandleRemove$1$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon15#1;
+
+ inline$BDLHandleRemove$1$anon15#1:
+ goto inline$BDLHandleRemove$1$label_57#1;
+
+ inline$BDLHandleRemove$1$label_57#1:
+ goto inline$BDLHandleRemove$1$label_57_true#1, inline$BDLHandleRemove$1$label_57_false#1;
+
+ inline$BDLHandleRemove$1$label_57_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$) == 0;
+ goto inline$BDLHandleRemove$1$label_58#1;
+
+ inline$BDLHandleRemove$1$label_57_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$16$) != 0;
+ goto inline$BDLHandleRemove$1$label_61#1;
+
+ inline$BDLHandleRemove$1$label_61#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_62#1;
+
+ inline$BDLHandleRemove$1$label_62#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_63#1;
+
+ inline$BDLHandleRemove$1$label_63#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_64#1;
+
+ inline$BDLHandleRemove$1$label_64#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$17$;
+ goto inline$BDLHandleRemove$1$label_58#1;
+
+ inline$BDLHandleRemove$1$label_58#1:
+ goto inline$BDLGetDebugLevel$683$Entry#1;
+
+ inline$BDLGetDebugLevel$683$Entry#1:
+ goto inline$BDLGetDebugLevel$683$start#1;
+
+ inline$BDLGetDebugLevel$683$start#1:
+ goto inline$BDLGetDebugLevel$683$label_3#1;
+
+ inline$BDLGetDebugLevel$683$label_3#1:
+ havoc inline$BDLGetDebugLevel$683$myNondetVar_0;
+ inline$BDLGetDebugLevel$683$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$683$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$683$label_1#1;
+
+ inline$BDLGetDebugLevel$683$label_1#1:
+ goto inline$BDLGetDebugLevel$683$Return#1;
+
+ inline$BDLGetDebugLevel$683$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$ := inline$BDLGetDebugLevel$683$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_58$1#1;
+
+ inline$BDLHandleRemove$1$label_58$1#1:
+ goto inline$BDLHandleRemove$1$anon50_Then#1, inline$BDLHandleRemove$1$anon50_Else#1;
+
+ inline$BDLHandleRemove$1$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon17#1;
+
+ inline$BDLHandleRemove$1$anon17#1:
+ goto inline$BDLHandleRemove$1$label_67#1;
+
+ inline$BDLHandleRemove$1$label_67#1:
+ goto inline$BDLHandleRemove$1$label_67_true#1, inline$BDLHandleRemove$1$label_67_false#1;
+
+ inline$BDLHandleRemove$1$label_67_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$) == 0;
+ goto inline$BDLHandleRemove$1$label_68#1;
+
+ inline$BDLHandleRemove$1$label_67_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$21$) != 0;
+ goto inline$BDLHandleRemove$1$label_71#1;
+
+ inline$BDLHandleRemove$1$label_71#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_72#1;
+
+ inline$BDLHandleRemove$1$label_72#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_73#1;
+
+ inline$BDLHandleRemove$1$label_73#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_74#1;
+
+ inline$BDLHandleRemove$1$label_74#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2423.0$22$;
+ goto inline$BDLHandleRemove$1$label_68#1;
+
+ inline$BDLHandleRemove$1$label_68#1:
+ goto inline$BDLGetDebugLevel$684$Entry#1;
+
+ inline$BDLGetDebugLevel$684$Entry#1:
+ goto inline$BDLGetDebugLevel$684$start#1;
+
+ inline$BDLGetDebugLevel$684$start#1:
+ goto inline$BDLGetDebugLevel$684$label_3#1;
+
+ inline$BDLGetDebugLevel$684$label_3#1:
+ havoc inline$BDLGetDebugLevel$684$myNondetVar_0;
+ inline$BDLGetDebugLevel$684$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$684$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$684$label_1#1;
+
+ inline$BDLGetDebugLevel$684$label_1#1:
+ goto inline$BDLGetDebugLevel$684$Return#1;
+
+ inline$BDLGetDebugLevel$684$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$ := inline$BDLGetDebugLevel$684$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_68$1#1;
+
+ inline$BDLHandleRemove$1$label_68$1#1:
+ goto inline$BDLHandleRemove$1$anon51_Then#1, inline$BDLHandleRemove$1$anon51_Else#1;
+
+ inline$BDLHandleRemove$1$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon19#1;
+
+ inline$BDLHandleRemove$1$anon19#1:
+ goto inline$BDLHandleRemove$1$label_77#1;
+
+ inline$BDLHandleRemove$1$label_77#1:
+ goto inline$BDLHandleRemove$1$label_77_true#1, inline$BDLHandleRemove$1$label_77_false#1;
+
+ inline$BDLHandleRemove$1$label_77_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$, 4) == 0;
+ goto inline$BDLHandleRemove$1$label_53#1;
+
+ inline$BDLHandleRemove$1$label_77_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2423.0$26$, 4) != 0;
+ goto inline$BDLHandleRemove$1$label_78#1;
+
+ inline$BDLHandleRemove$1$label_78#1:
+ goto inline$BDLHandleRemove$1$label_53#1;
+
+ inline$BDLHandleRemove$1$label_53#1:
+ goto inline$BDLHandleRemove$1$label_45#1;
+
+ inline$BDLHandleRemove$1$label_45#1:
+ goto inline$BDLHandleRemove$1$label_79#1;
+
+ inline$BDLHandleRemove$1$label_79#1:
+ inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$callresult.$2437.63$27$;
+ goto inline$BDLHandleRemove$1$label_80#1;
+
+ inline$BDLHandleRemove$1$label_80#1:
+ goto inline$BDLHandleRemove$1$label_80_true#1, inline$BDLHandleRemove$1$label_80_false#1;
+
+ inline$BDLHandleRemove$1$label_80_false#1:
+ assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 == 0;
+ goto inline$BDLHandleRemove$1$label_81#1;
+
+ inline$BDLHandleRemove$1$label_80_true#1:
+ assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 != 0;
+ goto inline$BDLHandleRemove$1$label_84#1;
+
+ inline$BDLHandleRemove$1$label_84#1:
+ goto inline$BDLGetDebugLevel$685$Entry#1;
+
+ inline$BDLGetDebugLevel$685$Entry#1:
+ goto inline$BDLGetDebugLevel$685$start#1;
+
+ inline$BDLGetDebugLevel$685$start#1:
+ goto inline$BDLGetDebugLevel$685$label_3#1;
+
+ inline$BDLGetDebugLevel$685$label_3#1:
+ havoc inline$BDLGetDebugLevel$685$myNondetVar_0;
+ inline$BDLGetDebugLevel$685$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$685$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$685$label_1#1;
+
+ inline$BDLGetDebugLevel$685$label_1#1:
+ goto inline$BDLGetDebugLevel$685$Return#1;
+
+ inline$BDLGetDebugLevel$685$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$ := inline$BDLGetDebugLevel$685$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_84$1#1;
+
+ inline$BDLHandleRemove$1$label_84$1#1:
+ goto inline$BDLHandleRemove$1$anon53_Then#1, inline$BDLHandleRemove$1$anon53_Else#1;
+
+ inline$BDLHandleRemove$1$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon23#1;
+
+ inline$BDLHandleRemove$1$anon23#1:
+ goto inline$BDLHandleRemove$1$label_87#1;
+
+ inline$BDLHandleRemove$1$label_87#1:
+ goto inline$BDLHandleRemove$1$label_87_true#1, inline$BDLHandleRemove$1$label_87_false#1;
+
+ inline$BDLHandleRemove$1$label_87_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$) == 0;
+ goto inline$BDLHandleRemove$1$label_88#1;
+
+ inline$BDLHandleRemove$1$label_87_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$28$) != 0;
+ goto inline$BDLHandleRemove$1$label_91#1;
+
+ inline$BDLHandleRemove$1$label_91#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_92#1;
+
+ inline$BDLHandleRemove$1$label_92#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_93#1;
+
+ inline$BDLHandleRemove$1$label_93#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_94#1;
+
+ inline$BDLHandleRemove$1$label_94#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$29$;
+ goto inline$BDLHandleRemove$1$label_88#1;
+
+ inline$BDLHandleRemove$1$label_88#1:
+ goto inline$BDLGetDebugLevel$686$Entry#1;
+
+ inline$BDLGetDebugLevel$686$Entry#1:
+ goto inline$BDLGetDebugLevel$686$start#1;
+
+ inline$BDLGetDebugLevel$686$start#1:
+ goto inline$BDLGetDebugLevel$686$label_3#1;
+
+ inline$BDLGetDebugLevel$686$label_3#1:
+ havoc inline$BDLGetDebugLevel$686$myNondetVar_0;
+ inline$BDLGetDebugLevel$686$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$686$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$686$label_1#1;
+
+ inline$BDLGetDebugLevel$686$label_1#1:
+ goto inline$BDLGetDebugLevel$686$Return#1;
+
+ inline$BDLGetDebugLevel$686$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$ := inline$BDLGetDebugLevel$686$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_88$1#1;
+
+ inline$BDLHandleRemove$1$label_88$1#1:
+ goto inline$BDLHandleRemove$1$anon54_Then#1, inline$BDLHandleRemove$1$anon54_Else#1;
+
+ inline$BDLHandleRemove$1$anon54_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon25#1;
+
+ inline$BDLHandleRemove$1$anon25#1:
+ goto inline$BDLHandleRemove$1$label_97#1;
+
+ inline$BDLHandleRemove$1$label_97#1:
+ goto inline$BDLHandleRemove$1$label_97_true#1, inline$BDLHandleRemove$1$label_97_false#1;
+
+ inline$BDLHandleRemove$1$label_97_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$) == 0;
+ goto inline$BDLHandleRemove$1$label_98#1;
+
+ inline$BDLHandleRemove$1$label_97_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$33$) != 0;
+ goto inline$BDLHandleRemove$1$label_101#1;
+
+ inline$BDLHandleRemove$1$label_101#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_102#1;
+
+ inline$BDLHandleRemove$1$label_102#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_103#1;
+
+ inline$BDLHandleRemove$1$label_103#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_104#1;
+
+ inline$BDLHandleRemove$1$label_104#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2441.0$34$;
+ goto inline$BDLHandleRemove$1$label_98#1;
+
+ inline$BDLHandleRemove$1$label_98#1:
+ goto inline$BDLGetDebugLevel$687$Entry#1;
+
+ inline$BDLGetDebugLevel$687$Entry#1:
+ goto inline$BDLGetDebugLevel$687$start#1;
+
+ inline$BDLGetDebugLevel$687$start#1:
+ goto inline$BDLGetDebugLevel$687$label_3#1;
+
+ inline$BDLGetDebugLevel$687$label_3#1:
+ havoc inline$BDLGetDebugLevel$687$myNondetVar_0;
+ inline$BDLGetDebugLevel$687$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$687$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$687$label_1#1;
+
+ inline$BDLGetDebugLevel$687$label_1#1:
+ goto inline$BDLGetDebugLevel$687$Return#1;
+
+ inline$BDLGetDebugLevel$687$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$ := inline$BDLGetDebugLevel$687$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_98$1#1;
+
+ inline$BDLHandleRemove$1$label_98$1#1:
+ goto inline$BDLHandleRemove$1$anon55_Then#1, inline$BDLHandleRemove$1$anon55_Else#1;
+
+ inline$BDLHandleRemove$1$anon55_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon27#1;
+
+ inline$BDLHandleRemove$1$anon27#1:
+ goto inline$BDLHandleRemove$1$label_107#1;
+
+ inline$BDLHandleRemove$1$label_107#1:
+ goto inline$BDLHandleRemove$1$label_107_true#1, inline$BDLHandleRemove$1$label_107_false#1;
+
+ inline$BDLHandleRemove$1$label_107_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$, 4) == 0;
+ goto inline$BDLHandleRemove$1$label_81#1;
+
+ inline$BDLHandleRemove$1$label_107_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2441.0$38$, 4) != 0;
+ goto inline$BDLHandleRemove$1$label_108#1;
+
+ inline$BDLHandleRemove$1$label_108#1:
+ goto inline$BDLHandleRemove$1$label_81#1;
+
+ inline$BDLHandleRemove$1$label_81#1:
+ goto inline$IoSkipCurrentIrpStackLocation$1$Entry#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$Entry#1:
+ inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1 := inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12;
+ goto inline$IoSkipCurrentIrpStackLocation$1$start#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$start#1:
+ inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4 := inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1;
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_3#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_3#1:
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_3_true#1, inline$IoSkipCurrentIrpStackLocation$1$label_3_false#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_3_false#1:
+ inline$IoSkipCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoSkipCurrentIrpStackLocation$1$myVar_0, inline$IoSkipCurrentIrpStackLocation$1$myVar_1);
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_4#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_4#1:
+ call inline$IoSkipCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_7#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_7#1:
+ call inline$IoSkipCurrentIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_8#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_8#1:
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_5#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_3_true#1:
+ inline$IoSkipCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$1$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoSkipCurrentIrpStackLocation$1$myVar_0, inline$IoSkipCurrentIrpStackLocation$1$myVar_1);
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_5#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_5#1:
+ inline$IoSkipCurrentIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$1$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$1$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4) := inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_6#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_6#1:
+ havoc inline$IoSkipCurrentIrpStackLocation$1$myNondetVar_0;
+ inline$IoSkipCurrentIrpStackLocation$1$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$1$myNondetVar_0, 36, 1);
+ goto inline$IoSkipCurrentIrpStackLocation$1$label_1#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$label_1#1:
+ goto inline$IoSkipCurrentIrpStackLocation$1$Return#1;
+
+ inline$IoSkipCurrentIrpStackLocation$1$Return#1:
+ goto inline$BDLHandleRemove$1$label_81$1#1;
+
+ inline$BDLHandleRemove$1$label_81$1#1:
+ goto inline$BDLHandleRemove$1$anon52_Then#1, inline$BDLHandleRemove$1$anon52_Else#1;
+
+ inline$BDLHandleRemove$1$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon21#1;
+
+ inline$BDLHandleRemove$1$anon21#1:
+ goto inline$BDLHandleRemove$1$label_109#1;
+
+ inline$BDLHandleRemove$1$label_109#1:
+ goto inline$storm_IoCallDriver$13$Entry#1;
+
+ inline$storm_IoCallDriver$13$Entry#1:
+ inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLHandleRemove$1$$pIrp$3$2380.40$BDLHandleRemove$12;
+ goto inline$storm_IoCallDriver$13$start#1;
+
+ inline$storm_IoCallDriver$13$start#1:
+ inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$13$label_3#1;
+
+ inline$storm_IoCallDriver$13$label_3#1:
+ goto inline$storm_IoCallDriver$13$label_4#1;
+
+ inline$storm_IoCallDriver$13$label_4#1:
+ goto inline$storm_IoCallDriver$13$label_5#1;
+
+ inline$storm_IoCallDriver$13$label_5#1:
+ goto inline$storm_IoCallDriver$13$label_6#1;
+
+ inline$storm_IoCallDriver$13$label_6#1:
+ call inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$13$label_9#1;
+
+ inline$storm_IoCallDriver$13$label_9#1:
+ goto inline$storm_IoCallDriver$13$label_9_true#1, inline$storm_IoCallDriver$13$label_9_false#1;
+
+ inline$storm_IoCallDriver$13$label_9_false#1:
+ assume inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$13$label_10#1;
+
+ inline$storm_IoCallDriver$13$label_9_true#1:
+ assume inline$storm_IoCallDriver$13$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$13$label_13#1;
+
+ inline$storm_IoCallDriver$13$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$13$anon12_Then#1, inline$storm_IoCallDriver$13$anon12_Else#1;
+
+ inline$storm_IoCallDriver$13$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$13$anon3#1;
+
+ inline$storm_IoCallDriver$13$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$13$label_14#1;
+
+ inline$storm_IoCallDriver$13$label_14#1:
+ goto inline$storm_IoCallDriver$13$label_14_true#1, inline$storm_IoCallDriver$13$label_14_false#1;
+
+ inline$storm_IoCallDriver$13$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$13$label_15#1;
+
+ inline$storm_IoCallDriver$13$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$13$label_1#1;
+
+ inline$storm_IoCallDriver$13$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$13$label_10#1;
+
+ inline$storm_IoCallDriver$13$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$14$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$14$Entry#1:
+ inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$14$start#1;
+
+ inline$IoSetNextIrpStackLocation$14$start#1:
+ inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$14$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$14$label_3_true#1, inline$IoSetNextIrpStackLocation$14$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$14$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$14$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_4#1:
+ call inline$IoSetNextIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$14$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_7#1:
+ call inline$IoSetNextIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$14$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$14$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$14$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$14$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_5#1:
+ inline$IoSetNextIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$14$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$14$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$14$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$14$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$14$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$14$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$14$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$14$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$14$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$14$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$14$Return#1;
+
+ inline$IoSetNextIrpStackLocation$14$Return#1:
+ goto inline$storm_IoCallDriver$13$label_10$1#1;
+
+ inline$storm_IoCallDriver$13$label_10$1#1:
+ goto inline$storm_IoCallDriver$13$anon11_Then#1, inline$storm_IoCallDriver$13$anon11_Else#1;
+
+ inline$storm_IoCallDriver$13$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$13$anon1#1;
+
+ inline$storm_IoCallDriver$13$anon1#1:
+ goto inline$storm_IoCallDriver$13$label_18#1;
+
+ inline$storm_IoCallDriver$13$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$132$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$132$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$start#1:
+ inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$132$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$132$label_3_true#1, inline$IoGetCurrentIrpStackLocation$132$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$132$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$132$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$132$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$132$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$132$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$132$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$132$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$132$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$132$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$132$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$132$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$132$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$132$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$132$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$132$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$132$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$132$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$132$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$132$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$132$Return#1:
+ goto inline$storm_IoCallDriver$13$label_18$1#1;
+
+ inline$storm_IoCallDriver$13$label_18$1#1:
+ goto inline$storm_IoCallDriver$13$anon13_Then#1, inline$storm_IoCallDriver$13$anon13_Else#1;
+
+ inline$storm_IoCallDriver$13$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$13$anon6#1;
+
+ inline$storm_IoCallDriver$13$anon6#1:
+ goto inline$storm_IoCallDriver$13$label_21#1;
+
+ inline$storm_IoCallDriver$13$label_21#1:
+ goto inline$storm_IoCallDriver$13$label_22#1;
+
+ inline$storm_IoCallDriver$13$label_22#1:
+ goto inline$storm_IoCallDriver$13$label_23#1;
+
+ inline$storm_IoCallDriver$13$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$13$label_24#1;
+
+ inline$storm_IoCallDriver$13$label_24#1:
+ call inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$13$label_27#1;
+
+ inline$storm_IoCallDriver$13$label_27#1:
+ goto inline$storm_IoCallDriver$13$label_27_case_0#1, inline$storm_IoCallDriver$13$label_27_case_1#1, inline$storm_IoCallDriver$13$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$13$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$13$label_30#1;
+
+ inline$storm_IoCallDriver$13$label_30#1:
+ inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$13$label_31#1;
+
+ inline$storm_IoCallDriver$13$label_31#1:
+ goto inline$storm_IoCallDriver$13$label_32#1;
+
+ inline$storm_IoCallDriver$13$label_32#1:
+ goto inline$storm_IoCallDriver$13$label_33#1;
+
+ inline$storm_IoCallDriver$13$label_33#1:
+ goto inline$CallCompletionRoutine$26$Entry#1;
+
+ inline$CallCompletionRoutine$26$Entry#1:
+ inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$26$start#1;
+
+ inline$CallCompletionRoutine$26$start#1:
+ inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$26$label_3#1;
+
+ inline$CallCompletionRoutine$26$label_3#1:
+ goto inline$CallCompletionRoutine$26$label_4#1;
+
+ inline$CallCompletionRoutine$26$label_4#1:
+ goto inline$CallCompletionRoutine$26$label_5#1;
+
+ inline$CallCompletionRoutine$26$label_5#1:
+ goto inline$CallCompletionRoutine$26$label_6#1;
+
+ inline$CallCompletionRoutine$26$label_6#1:
+ goto inline$CallCompletionRoutine$26$label_7#1;
+
+ inline$CallCompletionRoutine$26$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$133$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$133$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$start#1:
+ inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$133$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$133$label_3_true#1, inline$IoGetCurrentIrpStackLocation$133$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$133$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$133$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$133$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$133$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$133$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$133$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$133$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$133$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$133$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$133$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$133$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$133$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$133$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$133$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$133$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$133$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$133$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$133$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$133$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$133$Return#1:
+ goto inline$CallCompletionRoutine$26$label_7$1#1;
+
+ inline$CallCompletionRoutine$26$label_7$1#1:
+ goto inline$CallCompletionRoutine$26$anon10_Then#1, inline$CallCompletionRoutine$26$anon10_Else#1;
+
+ inline$CallCompletionRoutine$26$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$26$anon1#1;
+
+ inline$CallCompletionRoutine$26$anon1#1:
+ goto inline$CallCompletionRoutine$26$label_10#1;
+
+ inline$CallCompletionRoutine$26$label_10#1:
+ goto inline$CallCompletionRoutine$26$label_11#1;
+
+ inline$CallCompletionRoutine$26$label_11#1:
+ havoc inline$CallCompletionRoutine$26$myNondetVar_0;
+ inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$myNondetVar_0;
+ goto inline$CallCompletionRoutine$26$label_12#1;
+
+ inline$CallCompletionRoutine$26$label_12#1:
+ havoc inline$CallCompletionRoutine$26$myNondetVar_0;
+ inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$myNondetVar_0;
+ goto inline$CallCompletionRoutine$26$label_13#1;
+
+ inline$CallCompletionRoutine$26$label_13#1:
+ havoc inline$CallCompletionRoutine$26$myNondetVar_0;
+ goto inline$CallCompletionRoutine$26$label_14#1;
+
+ inline$CallCompletionRoutine$26$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$134$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$134$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$start#1:
+ inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$134$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$134$label_3_true#1, inline$IoGetCurrentIrpStackLocation$134$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$134$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$134$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$134$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$134$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$134$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$134$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$134$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$134$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$134$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$134$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$134$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$134$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$134$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$134$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$134$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$134$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$134$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$134$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$134$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$134$Return#1:
+ goto inline$CallCompletionRoutine$26$label_14$1#1;
+
+ inline$CallCompletionRoutine$26$label_14$1#1:
+ goto inline$CallCompletionRoutine$26$anon11_Then#1, inline$CallCompletionRoutine$26$anon11_Else#1;
+
+ inline$CallCompletionRoutine$26$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$26$anon3#1;
+
+ inline$CallCompletionRoutine$26$anon3#1:
+ goto inline$CallCompletionRoutine$26$label_17#1;
+
+ inline$CallCompletionRoutine$26$label_17#1:
+ goto inline$CallCompletionRoutine$26$label_18#1;
+
+ inline$CallCompletionRoutine$26$label_18#1:
+ goto inline$CallCompletionRoutine$26$label_18_true#1, inline$CallCompletionRoutine$26$label_18_false#1;
+
+ inline$CallCompletionRoutine$26$label_18_false#1:
+ assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$26$label_1#1;
+
+ inline$CallCompletionRoutine$26$label_18_true#1:
+ assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$26$label_19#1;
+
+ inline$CallCompletionRoutine$26$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$26$label_20#1;
+
+ inline$CallCompletionRoutine$26$label_20#1:
+ goto inline$CallCompletionRoutine$26$label_20_icall_1#1, inline$CallCompletionRoutine$26$label_20_icall_2#1, inline$CallCompletionRoutine$26$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$26$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$26$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$26$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$26$Entry#1:
+ inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$26$start#1;
+
+ inline$BDLSystemPowerIoCompletion$26$start#1:
+ call inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$26$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_4#1:
+ inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_6#1:
+ inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$26$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$26$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$136$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$136$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$start#1:
+ inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$136$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$136$label_3_true#1, inline$IoGetCurrentIrpStackLocation$136$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$136$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$136$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$136$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$136$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$136$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$136$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$136$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$136$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$136$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$136$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$136$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$136$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$136$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$136$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$136$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$136$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$136$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$136$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$136$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$136$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon36_Then#1, inline$BDLSystemPowerIoCompletion$26$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_15#1:
+ goto inline$BDLGetDebugLevel$697$Entry#1;
+
+ inline$BDLGetDebugLevel$697$Entry#1:
+ goto inline$BDLGetDebugLevel$697$start#1;
+
+ inline$BDLGetDebugLevel$697$start#1:
+ goto inline$BDLGetDebugLevel$697$label_3#1;
+
+ inline$BDLGetDebugLevel$697$label_3#1:
+ havoc inline$BDLGetDebugLevel$697$myNondetVar_0;
+ inline$BDLGetDebugLevel$697$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$697$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$697$label_1#1;
+
+ inline$BDLGetDebugLevel$697$label_1#1:
+ goto inline$BDLGetDebugLevel$697$Return#1;
+
+ inline$BDLGetDebugLevel$697$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$697$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon37_Then#1, inline$BDLSystemPowerIoCompletion$26$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_18_true#1, inline$BDLSystemPowerIoCompletion$26$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_19#1:
+ goto inline$BDLGetDebugLevel$698$Entry#1;
+
+ inline$BDLGetDebugLevel$698$Entry#1:
+ goto inline$BDLGetDebugLevel$698$start#1;
+
+ inline$BDLGetDebugLevel$698$start#1:
+ goto inline$BDLGetDebugLevel$698$label_3#1;
+
+ inline$BDLGetDebugLevel$698$label_3#1:
+ havoc inline$BDLGetDebugLevel$698$myNondetVar_0;
+ inline$BDLGetDebugLevel$698$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$698$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$698$label_1#1;
+
+ inline$BDLGetDebugLevel$698$label_1#1:
+ goto inline$BDLGetDebugLevel$698$Return#1;
+
+ inline$BDLGetDebugLevel$698$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$698$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon38_Then#1, inline$BDLSystemPowerIoCompletion$26$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_28_true#1, inline$BDLSystemPowerIoCompletion$26$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_29#1:
+ goto inline$BDLGetDebugLevel$699$Entry#1;
+
+ inline$BDLGetDebugLevel$699$Entry#1:
+ goto inline$BDLGetDebugLevel$699$start#1;
+
+ inline$BDLGetDebugLevel$699$start#1:
+ goto inline$BDLGetDebugLevel$699$label_3#1;
+
+ inline$BDLGetDebugLevel$699$label_3#1:
+ havoc inline$BDLGetDebugLevel$699$myNondetVar_0;
+ inline$BDLGetDebugLevel$699$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$699$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$699$label_1#1;
+
+ inline$BDLGetDebugLevel$699$label_1#1:
+ goto inline$BDLGetDebugLevel$699$Return#1;
+
+ inline$BDLGetDebugLevel$699$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$699$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon39_Then#1, inline$BDLSystemPowerIoCompletion$26$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_38_true#1, inline$BDLSystemPowerIoCompletion$26$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_39_true#1, inline$BDLSystemPowerIoCompletion$26$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$26$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$26$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$26$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$26$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$26$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_106_true#1, inline$BDLSystemPowerIoCompletion$26$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$26$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$26$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$26$myNondetVar_0, inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$26$anon50_Then#1, inline$BDLSystemPowerIoCompletion$26$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_112#1:
+ inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_113_true#1, inline$BDLSystemPowerIoCompletion$26$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$26$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_117#1:
+ goto inline$BDLGetDebugLevel$706$Entry#1;
+
+ inline$BDLGetDebugLevel$706$Entry#1:
+ goto inline$BDLGetDebugLevel$706$start#1;
+
+ inline$BDLGetDebugLevel$706$start#1:
+ goto inline$BDLGetDebugLevel$706$label_3#1;
+
+ inline$BDLGetDebugLevel$706$label_3#1:
+ havoc inline$BDLGetDebugLevel$706$myNondetVar_0;
+ inline$BDLGetDebugLevel$706$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$706$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$706$label_1#1;
+
+ inline$BDLGetDebugLevel$706$label_1#1:
+ goto inline$BDLGetDebugLevel$706$Return#1;
+
+ inline$BDLGetDebugLevel$706$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$706$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon51_Then#1, inline$BDLSystemPowerIoCompletion$26$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_120_true#1, inline$BDLSystemPowerIoCompletion$26$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_121#1:
+ goto inline$BDLGetDebugLevel$707$Entry#1;
+
+ inline$BDLGetDebugLevel$707$Entry#1:
+ goto inline$BDLGetDebugLevel$707$start#1;
+
+ inline$BDLGetDebugLevel$707$start#1:
+ goto inline$BDLGetDebugLevel$707$label_3#1;
+
+ inline$BDLGetDebugLevel$707$label_3#1:
+ havoc inline$BDLGetDebugLevel$707$myNondetVar_0;
+ inline$BDLGetDebugLevel$707$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$707$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$707$label_1#1;
+
+ inline$BDLGetDebugLevel$707$label_1#1:
+ goto inline$BDLGetDebugLevel$707$Return#1;
+
+ inline$BDLGetDebugLevel$707$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$707$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon52_Then#1, inline$BDLSystemPowerIoCompletion$26$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_130_true#1, inline$BDLSystemPowerIoCompletion$26$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_131#1:
+ goto inline$BDLGetDebugLevel$708$Entry#1;
+
+ inline$BDLGetDebugLevel$708$Entry#1:
+ goto inline$BDLGetDebugLevel$708$start#1;
+
+ inline$BDLGetDebugLevel$708$start#1:
+ goto inline$BDLGetDebugLevel$708$label_3#1;
+
+ inline$BDLGetDebugLevel$708$label_3#1:
+ havoc inline$BDLGetDebugLevel$708$myNondetVar_0;
+ inline$BDLGetDebugLevel$708$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$708$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$708$label_1#1;
+
+ inline$BDLGetDebugLevel$708$label_1#1:
+ goto inline$BDLGetDebugLevel$708$Return#1;
+
+ inline$BDLGetDebugLevel$708$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$708$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon53_Then#1, inline$BDLSystemPowerIoCompletion$26$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_140_true#1, inline$BDLSystemPowerIoCompletion$26$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$26$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_115#1:
+ inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$26$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$26$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$26$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_43#1:
+ goto inline$BDLGetDebugLevel$700$Entry#1;
+
+ inline$BDLGetDebugLevel$700$Entry#1:
+ goto inline$BDLGetDebugLevel$700$start#1;
+
+ inline$BDLGetDebugLevel$700$start#1:
+ goto inline$BDLGetDebugLevel$700$label_3#1;
+
+ inline$BDLGetDebugLevel$700$label_3#1:
+ havoc inline$BDLGetDebugLevel$700$myNondetVar_0;
+ inline$BDLGetDebugLevel$700$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$700$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$700$label_1#1;
+
+ inline$BDLGetDebugLevel$700$label_1#1:
+ goto inline$BDLGetDebugLevel$700$Return#1;
+
+ inline$BDLGetDebugLevel$700$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$700$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon40_Then#1, inline$BDLSystemPowerIoCompletion$26$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_46_true#1, inline$BDLSystemPowerIoCompletion$26$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_47#1:
+ goto inline$BDLGetDebugLevel$701$Entry#1;
+
+ inline$BDLGetDebugLevel$701$Entry#1:
+ goto inline$BDLGetDebugLevel$701$start#1;
+
+ inline$BDLGetDebugLevel$701$start#1:
+ goto inline$BDLGetDebugLevel$701$label_3#1;
+
+ inline$BDLGetDebugLevel$701$label_3#1:
+ havoc inline$BDLGetDebugLevel$701$myNondetVar_0;
+ inline$BDLGetDebugLevel$701$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$701$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$701$label_1#1;
+
+ inline$BDLGetDebugLevel$701$label_1#1:
+ goto inline$BDLGetDebugLevel$701$Return#1;
+
+ inline$BDLGetDebugLevel$701$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$701$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon41_Then#1, inline$BDLSystemPowerIoCompletion$26$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_56_true#1, inline$BDLSystemPowerIoCompletion$26$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_57#1:
+ goto inline$BDLGetDebugLevel$702$Entry#1;
+
+ inline$BDLGetDebugLevel$702$Entry#1:
+ goto inline$BDLGetDebugLevel$702$start#1;
+
+ inline$BDLGetDebugLevel$702$start#1:
+ goto inline$BDLGetDebugLevel$702$label_3#1;
+
+ inline$BDLGetDebugLevel$702$label_3#1:
+ havoc inline$BDLGetDebugLevel$702$myNondetVar_0;
+ inline$BDLGetDebugLevel$702$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$702$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$702$label_1#1;
+
+ inline$BDLGetDebugLevel$702$label_1#1:
+ goto inline$BDLGetDebugLevel$702$Return#1;
+
+ inline$BDLGetDebugLevel$702$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$702$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon42_Then#1, inline$BDLSystemPowerIoCompletion$26$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_66_true#1, inline$BDLSystemPowerIoCompletion$26$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$26$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$26$anon43_Then#1, inline$BDLSystemPowerIoCompletion$26$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$26$anon44_Then#1, inline$BDLSystemPowerIoCompletion$26$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_74#1:
+ goto inline$storm_IoCompleteRequest$54$Entry#1;
+
+ inline$storm_IoCompleteRequest$54$Entry#1:
+ inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$26$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$54$start#1;
+
+ inline$storm_IoCompleteRequest$54$start#1:
+ inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$54$label_3#1;
+
+ inline$storm_IoCompleteRequest$54$label_3#1:
+ call inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$54$label_6#1;
+
+ inline$storm_IoCompleteRequest$54$label_6#1:
+ goto inline$storm_IoCompleteRequest$54$label_6_true#1, inline$storm_IoCompleteRequest$54$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$54$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$54$label_7#1;
+
+ inline$storm_IoCompleteRequest$54$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$54$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$54$label_8#1;
+
+ inline$storm_IoCompleteRequest$54$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$54$anon3_Then#1, inline$storm_IoCompleteRequest$54$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$54$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$54$anon1#1;
+
+ inline$storm_IoCompleteRequest$54$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$54$label_9#1;
+
+ inline$storm_IoCompleteRequest$54$label_9#1:
+ goto inline$storm_IoCompleteRequest$54$label_9_true#1, inline$storm_IoCompleteRequest$54$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$54$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$54$label_10#1;
+
+ inline$storm_IoCompleteRequest$54$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$54$label_1#1;
+
+ inline$storm_IoCompleteRequest$54$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$54$label_7#1;
+
+ inline$storm_IoCompleteRequest$54$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$54$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$54$label_1#1;
+
+ inline$storm_IoCompleteRequest$54$label_1#1:
+ goto inline$storm_IoCompleteRequest$54$Return#1;
+
+ inline$storm_IoCompleteRequest$54$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$54$Return#1;
+
+ inline$storm_IoCompleteRequest$54$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon45_Then#1, inline$BDLSystemPowerIoCompletion$26$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$26$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$26$anon46_Then#1, inline$BDLSystemPowerIoCompletion$26$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_80#1:
+ goto inline$BDLGetDebugLevel$703$Entry#1;
+
+ inline$BDLGetDebugLevel$703$Entry#1:
+ goto inline$BDLGetDebugLevel$703$start#1;
+
+ inline$BDLGetDebugLevel$703$start#1:
+ goto inline$BDLGetDebugLevel$703$label_3#1;
+
+ inline$BDLGetDebugLevel$703$label_3#1:
+ havoc inline$BDLGetDebugLevel$703$myNondetVar_0;
+ inline$BDLGetDebugLevel$703$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$703$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$703$label_1#1;
+
+ inline$BDLGetDebugLevel$703$label_1#1:
+ goto inline$BDLGetDebugLevel$703$Return#1;
+
+ inline$BDLGetDebugLevel$703$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$703$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon47_Then#1, inline$BDLSystemPowerIoCompletion$26$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_83_true#1, inline$BDLSystemPowerIoCompletion$26$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_84#1:
+ goto inline$BDLGetDebugLevel$704$Entry#1;
+
+ inline$BDLGetDebugLevel$704$Entry#1:
+ goto inline$BDLGetDebugLevel$704$start#1;
+
+ inline$BDLGetDebugLevel$704$start#1:
+ goto inline$BDLGetDebugLevel$704$label_3#1;
+
+ inline$BDLGetDebugLevel$704$label_3#1:
+ havoc inline$BDLGetDebugLevel$704$myNondetVar_0;
+ inline$BDLGetDebugLevel$704$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$704$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$704$label_1#1;
+
+ inline$BDLGetDebugLevel$704$label_1#1:
+ goto inline$BDLGetDebugLevel$704$Return#1;
+
+ inline$BDLGetDebugLevel$704$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$704$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon48_Then#1, inline$BDLSystemPowerIoCompletion$26$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_93_true#1, inline$BDLSystemPowerIoCompletion$26$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$26$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$26$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_94#1:
+ goto inline$BDLGetDebugLevel$705$Entry#1;
+
+ inline$BDLGetDebugLevel$705$Entry#1:
+ goto inline$BDLGetDebugLevel$705$start#1;
+
+ inline$BDLGetDebugLevel$705$start#1:
+ goto inline$BDLGetDebugLevel$705$label_3#1;
+
+ inline$BDLGetDebugLevel$705$label_3#1:
+ havoc inline$BDLGetDebugLevel$705$myNondetVar_0;
+ inline$BDLGetDebugLevel$705$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$705$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$705$label_1#1;
+
+ inline$BDLGetDebugLevel$705$label_1#1:
+ goto inline$BDLGetDebugLevel$705$Return#1;
+
+ inline$BDLGetDebugLevel$705$Return#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$705$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$26$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$26$anon49_Then#1, inline$BDLSystemPowerIoCompletion$26$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_103_true#1, inline$BDLSystemPowerIoCompletion$26$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$26$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$26$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$26$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_104#1:
+ inline$BDLSystemPowerIoCompletion$26$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$26$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$26$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$26$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$26$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$26$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$26$Return#1:
+ inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$26$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$26$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$26$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$26$anon14_Then#1, inline$CallCompletionRoutine$26$anon14_Else#1;
+
+ inline$CallCompletionRoutine$26$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$26$anon9#1;
+
+ inline$CallCompletionRoutine$26$anon9#1:
+ goto inline$CallCompletionRoutine$26$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$26$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$26$Return#1;
+
+ inline$CallCompletionRoutine$26$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$26$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$26$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$26$Entry#1:
+ inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$26$start#1;
+
+ inline$BDLDevicePowerIoCompletion$26$start#1:
+ call inline$BDLDevicePowerIoCompletion$26$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$26$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_4#1:
+ inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_6#1:
+ inline$BDLDevicePowerIoCompletion$26$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$26$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$26$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$135$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$135$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$start#1:
+ inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$135$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$135$label_3_true#1, inline$IoGetCurrentIrpStackLocation$135$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$135$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$135$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$135$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$135$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$135$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$135$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$135$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$135$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$135$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$135$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$135$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$135$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$135$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$135$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$135$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$135$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$135$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$135$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$135$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$135$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$135$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$135$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$135$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon30_Then#1, inline$BDLDevicePowerIoCompletion$26$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_13#1:
+ inline$BDLDevicePowerIoCompletion$26$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_17#1:
+ goto inline$BDLGetDebugLevel$688$Entry#1;
+
+ inline$BDLGetDebugLevel$688$Entry#1:
+ goto inline$BDLGetDebugLevel$688$start#1;
+
+ inline$BDLGetDebugLevel$688$start#1:
+ goto inline$BDLGetDebugLevel$688$label_3#1;
+
+ inline$BDLGetDebugLevel$688$label_3#1:
+ havoc inline$BDLGetDebugLevel$688$myNondetVar_0;
+ inline$BDLGetDebugLevel$688$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$688$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$688$label_1#1;
+
+ inline$BDLGetDebugLevel$688$label_1#1:
+ goto inline$BDLGetDebugLevel$688$Return#1;
+
+ inline$BDLGetDebugLevel$688$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$688$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon31_Then#1, inline$BDLDevicePowerIoCompletion$26$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_20_true#1, inline$BDLDevicePowerIoCompletion$26$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_21#1:
+ goto inline$BDLGetDebugLevel$689$Entry#1;
+
+ inline$BDLGetDebugLevel$689$Entry#1:
+ goto inline$BDLGetDebugLevel$689$start#1;
+
+ inline$BDLGetDebugLevel$689$start#1:
+ goto inline$BDLGetDebugLevel$689$label_3#1;
+
+ inline$BDLGetDebugLevel$689$label_3#1:
+ havoc inline$BDLGetDebugLevel$689$myNondetVar_0;
+ inline$BDLGetDebugLevel$689$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$689$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$689$label_1#1;
+
+ inline$BDLGetDebugLevel$689$label_1#1:
+ goto inline$BDLGetDebugLevel$689$Return#1;
+
+ inline$BDLGetDebugLevel$689$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$689$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon32_Then#1, inline$BDLDevicePowerIoCompletion$26$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_30_true#1, inline$BDLDevicePowerIoCompletion$26$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_31#1:
+ goto inline$BDLGetDebugLevel$690$Entry#1;
+
+ inline$BDLGetDebugLevel$690$Entry#1:
+ goto inline$BDLGetDebugLevel$690$start#1;
+
+ inline$BDLGetDebugLevel$690$start#1:
+ goto inline$BDLGetDebugLevel$690$label_3#1;
+
+ inline$BDLGetDebugLevel$690$label_3#1:
+ havoc inline$BDLGetDebugLevel$690$myNondetVar_0;
+ inline$BDLGetDebugLevel$690$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$690$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$690$label_1#1;
+
+ inline$BDLGetDebugLevel$690$label_1#1:
+ goto inline$BDLGetDebugLevel$690$Return#1;
+
+ inline$BDLGetDebugLevel$690$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$690$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon33_Then#1, inline$BDLDevicePowerIoCompletion$26$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_40_true#1, inline$BDLDevicePowerIoCompletion$26$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_41_true#1, inline$BDLDevicePowerIoCompletion$26$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$26$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$26$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_44_true#1, inline$BDLDevicePowerIoCompletion$26$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_45_true#1, inline$BDLDevicePowerIoCompletion$26$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$26$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$26$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$26$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_54#1:
+ inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$26$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_55_true#1, inline$BDLDevicePowerIoCompletion$26$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$26$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$26$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$26$anon34_Then#1, inline$BDLDevicePowerIoCompletion$26$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_59#1:
+ goto inline$BDLGetDebugLevel$691$Entry#1;
+
+ inline$BDLGetDebugLevel$691$Entry#1:
+ goto inline$BDLGetDebugLevel$691$start#1;
+
+ inline$BDLGetDebugLevel$691$start#1:
+ goto inline$BDLGetDebugLevel$691$label_3#1;
+
+ inline$BDLGetDebugLevel$691$label_3#1:
+ havoc inline$BDLGetDebugLevel$691$myNondetVar_0;
+ inline$BDLGetDebugLevel$691$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$691$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$691$label_1#1;
+
+ inline$BDLGetDebugLevel$691$label_1#1:
+ goto inline$BDLGetDebugLevel$691$Return#1;
+
+ inline$BDLGetDebugLevel$691$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$691$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon35_Then#1, inline$BDLDevicePowerIoCompletion$26$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_62_true#1, inline$BDLDevicePowerIoCompletion$26$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_63#1:
+ goto inline$BDLGetDebugLevel$692$Entry#1;
+
+ inline$BDLGetDebugLevel$692$Entry#1:
+ goto inline$BDLGetDebugLevel$692$start#1;
+
+ inline$BDLGetDebugLevel$692$start#1:
+ goto inline$BDLGetDebugLevel$692$label_3#1;
+
+ inline$BDLGetDebugLevel$692$label_3#1:
+ havoc inline$BDLGetDebugLevel$692$myNondetVar_0;
+ inline$BDLGetDebugLevel$692$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$692$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$692$label_1#1;
+
+ inline$BDLGetDebugLevel$692$label_1#1:
+ goto inline$BDLGetDebugLevel$692$Return#1;
+
+ inline$BDLGetDebugLevel$692$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$692$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon36_Then#1, inline$BDLDevicePowerIoCompletion$26$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_72_true#1, inline$BDLDevicePowerIoCompletion$26$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_73#1:
+ goto inline$BDLGetDebugLevel$693$Entry#1;
+
+ inline$BDLGetDebugLevel$693$Entry#1:
+ goto inline$BDLGetDebugLevel$693$start#1;
+
+ inline$BDLGetDebugLevel$693$start#1:
+ goto inline$BDLGetDebugLevel$693$label_3#1;
+
+ inline$BDLGetDebugLevel$693$label_3#1:
+ havoc inline$BDLGetDebugLevel$693$myNondetVar_0;
+ inline$BDLGetDebugLevel$693$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$693$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$693$label_1#1;
+
+ inline$BDLGetDebugLevel$693$label_1#1:
+ goto inline$BDLGetDebugLevel$693$Return#1;
+
+ inline$BDLGetDebugLevel$693$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$693$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon37_Then#1, inline$BDLDevicePowerIoCompletion$26$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_82_true#1, inline$BDLDevicePowerIoCompletion$26$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$26$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$26$anon38_Then#1, inline$BDLDevicePowerIoCompletion$26$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$26$anon39_Then#1, inline$BDLDevicePowerIoCompletion$26$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_92#1:
+ goto inline$storm_IoCompleteRequest$53$Entry#1;
+
+ inline$storm_IoCompleteRequest$53$Entry#1:
+ inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$26$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$53$start#1;
+
+ inline$storm_IoCompleteRequest$53$start#1:
+ inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$53$label_3#1;
+
+ inline$storm_IoCompleteRequest$53$label_3#1:
+ call inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$53$label_6#1;
+
+ inline$storm_IoCompleteRequest$53$label_6#1:
+ goto inline$storm_IoCompleteRequest$53$label_6_true#1, inline$storm_IoCompleteRequest$53$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$53$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$53$label_7#1;
+
+ inline$storm_IoCompleteRequest$53$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$53$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$53$label_8#1;
+
+ inline$storm_IoCompleteRequest$53$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$53$anon3_Then#1, inline$storm_IoCompleteRequest$53$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$53$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$53$anon1#1;
+
+ inline$storm_IoCompleteRequest$53$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$53$label_9#1;
+
+ inline$storm_IoCompleteRequest$53$label_9#1:
+ goto inline$storm_IoCompleteRequest$53$label_9_true#1, inline$storm_IoCompleteRequest$53$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$53$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$53$label_10#1;
+
+ inline$storm_IoCompleteRequest$53$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$53$label_1#1;
+
+ inline$storm_IoCompleteRequest$53$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$53$label_7#1;
+
+ inline$storm_IoCompleteRequest$53$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$53$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$53$label_1#1;
+
+ inline$storm_IoCompleteRequest$53$label_1#1:
+ goto inline$storm_IoCompleteRequest$53$Return#1;
+
+ inline$storm_IoCompleteRequest$53$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$53$Return#1;
+
+ inline$storm_IoCompleteRequest$53$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon40_Then#1, inline$BDLDevicePowerIoCompletion$26$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$26$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$26$anon41_Then#1, inline$BDLDevicePowerIoCompletion$26$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_98#1:
+ goto inline$BDLGetDebugLevel$694$Entry#1;
+
+ inline$BDLGetDebugLevel$694$Entry#1:
+ goto inline$BDLGetDebugLevel$694$start#1;
+
+ inline$BDLGetDebugLevel$694$start#1:
+ goto inline$BDLGetDebugLevel$694$label_3#1;
+
+ inline$BDLGetDebugLevel$694$label_3#1:
+ havoc inline$BDLGetDebugLevel$694$myNondetVar_0;
+ inline$BDLGetDebugLevel$694$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$694$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$694$label_1#1;
+
+ inline$BDLGetDebugLevel$694$label_1#1:
+ goto inline$BDLGetDebugLevel$694$Return#1;
+
+ inline$BDLGetDebugLevel$694$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$694$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon42_Then#1, inline$BDLDevicePowerIoCompletion$26$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_101_true#1, inline$BDLDevicePowerIoCompletion$26$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_102#1:
+ goto inline$BDLGetDebugLevel$695$Entry#1;
+
+ inline$BDLGetDebugLevel$695$Entry#1:
+ goto inline$BDLGetDebugLevel$695$start#1;
+
+ inline$BDLGetDebugLevel$695$start#1:
+ goto inline$BDLGetDebugLevel$695$label_3#1;
+
+ inline$BDLGetDebugLevel$695$label_3#1:
+ havoc inline$BDLGetDebugLevel$695$myNondetVar_0;
+ inline$BDLGetDebugLevel$695$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$695$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$695$label_1#1;
+
+ inline$BDLGetDebugLevel$695$label_1#1:
+ goto inline$BDLGetDebugLevel$695$Return#1;
+
+ inline$BDLGetDebugLevel$695$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$695$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon43_Then#1, inline$BDLDevicePowerIoCompletion$26$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_111_true#1, inline$BDLDevicePowerIoCompletion$26$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$26$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$26$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_112#1:
+ goto inline$BDLGetDebugLevel$696$Entry#1;
+
+ inline$BDLGetDebugLevel$696$Entry#1:
+ goto inline$BDLGetDebugLevel$696$start#1;
+
+ inline$BDLGetDebugLevel$696$start#1:
+ goto inline$BDLGetDebugLevel$696$label_3#1;
+
+ inline$BDLGetDebugLevel$696$label_3#1:
+ havoc inline$BDLGetDebugLevel$696$myNondetVar_0;
+ inline$BDLGetDebugLevel$696$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$696$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$696$label_1#1;
+
+ inline$BDLGetDebugLevel$696$label_1#1:
+ goto inline$BDLGetDebugLevel$696$Return#1;
+
+ inline$BDLGetDebugLevel$696$Return#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$696$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$26$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$26$anon44_Then#1, inline$BDLDevicePowerIoCompletion$26$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_121_true#1, inline$BDLDevicePowerIoCompletion$26$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$26$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$26$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$26$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_122#1:
+ inline$BDLDevicePowerIoCompletion$26$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$26$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$26$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$26$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$26$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$26$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$26$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$26$Return#1:
+ inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$26$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$26$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$26$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$26$anon13_Then#1, inline$CallCompletionRoutine$26$anon13_Else#1;
+
+ inline$CallCompletionRoutine$26$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$26$anon7#1;
+
+ inline$CallCompletionRoutine$26$anon7#1:
+ goto inline$CallCompletionRoutine$26$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$26$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$26$Return#1;
+
+ inline$CallCompletionRoutine$26$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$26$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$26$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$26$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$26$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$26$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$start#1:
+ inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$26$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$26$label_3_true#1, inline$BDLCallDriverCompletionRoutine$26$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$26$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$26$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$26$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$26$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$26$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_6#1:
+ goto inline$storm_KeSetEvent$30$Entry#1;
+
+ inline$storm_KeSetEvent$30$Entry#1:
+ inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$26$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$30$start#1;
+
+ inline$storm_KeSetEvent$30$start#1:
+ inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$30$label_3#1;
+
+ inline$storm_KeSetEvent$30$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$30$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$30$label_1#1;
+
+ inline$storm_KeSetEvent$30$label_1#1:
+ goto inline$storm_KeSetEvent$30$Return#1;
+
+ inline$storm_KeSetEvent$30$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$26$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$26$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$26$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$26$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$26$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$26$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$26$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$26$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$26$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$26$Return#1:
+ inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$26$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$26$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$26$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$26$anon12_Then#1, inline$CallCompletionRoutine$26$anon12_Else#1;
+
+ inline$CallCompletionRoutine$26$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$26$anon5#1;
+
+ inline$CallCompletionRoutine$26$anon5#1:
+ goto inline$CallCompletionRoutine$26$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$26$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$26$label_23#1;
+
+ inline$CallCompletionRoutine$26$label_23#1:
+ inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$26$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$26$label_24#1;
+
+ inline$CallCompletionRoutine$26$label_24#1:
+ goto inline$CallCompletionRoutine$26$label_24_true#1, inline$CallCompletionRoutine$26$label_24_false#1;
+
+ inline$CallCompletionRoutine$26$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$26$label_1#1;
+
+ inline$CallCompletionRoutine$26$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$26$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$26$label_25#1;
+
+ inline$CallCompletionRoutine$26$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$26$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$26$label_1#1;
+
+ inline$CallCompletionRoutine$26$label_1#1:
+ goto inline$CallCompletionRoutine$26$Return#1;
+
+ inline$CallCompletionRoutine$26$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$26$Return#1;
+
+ inline$CallCompletionRoutine$26$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$26$Return#1;
+
+ inline$CallCompletionRoutine$26$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$26$Return#1;
+
+ inline$CallCompletionRoutine$26$Return#1:
+ goto inline$storm_IoCallDriver$13$label_33$1#1;
+
+ inline$storm_IoCallDriver$13$label_33$1#1:
+ goto inline$storm_IoCallDriver$13$anon14_Then#1, inline$storm_IoCallDriver$13$anon14_Else#1;
+
+ inline$storm_IoCallDriver$13$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$13$anon8#1;
+
+ inline$storm_IoCallDriver$13$anon8#1:
+ goto inline$storm_IoCallDriver$13$label_36#1;
+
+ inline$storm_IoCallDriver$13$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$13$Return#1;
+
+ inline$storm_IoCallDriver$13$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$13$label_29#1;
+
+ inline$storm_IoCallDriver$13$label_29#1:
+ inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$13$label_37#1;
+
+ inline$storm_IoCallDriver$13$label_37#1:
+ goto inline$storm_IoCallDriver$13$label_38#1;
+
+ inline$storm_IoCallDriver$13$label_38#1:
+ goto inline$storm_IoCallDriver$13$label_39#1;
+
+ inline$storm_IoCallDriver$13$label_39#1:
+ goto inline$CallCompletionRoutine$27$Entry#1;
+
+ inline$CallCompletionRoutine$27$Entry#1:
+ inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$27$start#1;
+
+ inline$CallCompletionRoutine$27$start#1:
+ inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$27$label_3#1;
+
+ inline$CallCompletionRoutine$27$label_3#1:
+ goto inline$CallCompletionRoutine$27$label_4#1;
+
+ inline$CallCompletionRoutine$27$label_4#1:
+ goto inline$CallCompletionRoutine$27$label_5#1;
+
+ inline$CallCompletionRoutine$27$label_5#1:
+ goto inline$CallCompletionRoutine$27$label_6#1;
+
+ inline$CallCompletionRoutine$27$label_6#1:
+ goto inline$CallCompletionRoutine$27$label_7#1;
+
+ inline$CallCompletionRoutine$27$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$137$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$137$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$start#1:
+ inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$137$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$137$label_3_true#1, inline$IoGetCurrentIrpStackLocation$137$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$137$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$137$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$137$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$137$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$137$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$137$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$137$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$137$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$137$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$137$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$137$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$137$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$137$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$137$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$137$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$137$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$137$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$137$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$137$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$137$Return#1:
+ goto inline$CallCompletionRoutine$27$label_7$1#1;
+
+ inline$CallCompletionRoutine$27$label_7$1#1:
+ goto inline$CallCompletionRoutine$27$anon10_Then#1, inline$CallCompletionRoutine$27$anon10_Else#1;
+
+ inline$CallCompletionRoutine$27$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$27$anon1#1;
+
+ inline$CallCompletionRoutine$27$anon1#1:
+ goto inline$CallCompletionRoutine$27$label_10#1;
+
+ inline$CallCompletionRoutine$27$label_10#1:
+ goto inline$CallCompletionRoutine$27$label_11#1;
+
+ inline$CallCompletionRoutine$27$label_11#1:
+ havoc inline$CallCompletionRoutine$27$myNondetVar_0;
+ inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$myNondetVar_0;
+ goto inline$CallCompletionRoutine$27$label_12#1;
+
+ inline$CallCompletionRoutine$27$label_12#1:
+ havoc inline$CallCompletionRoutine$27$myNondetVar_0;
+ inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$myNondetVar_0;
+ goto inline$CallCompletionRoutine$27$label_13#1;
+
+ inline$CallCompletionRoutine$27$label_13#1:
+ havoc inline$CallCompletionRoutine$27$myNondetVar_0;
+ goto inline$CallCompletionRoutine$27$label_14#1;
+
+ inline$CallCompletionRoutine$27$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$138$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$138$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$start#1:
+ inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$138$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$138$label_3_true#1, inline$IoGetCurrentIrpStackLocation$138$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$138$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$138$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$138$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$138$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$138$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$138$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$138$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$138$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$138$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$138$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$138$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$138$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$138$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$138$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$138$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$138$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$138$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$138$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$138$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$138$Return#1:
+ goto inline$CallCompletionRoutine$27$label_14$1#1;
+
+ inline$CallCompletionRoutine$27$label_14$1#1:
+ goto inline$CallCompletionRoutine$27$anon11_Then#1, inline$CallCompletionRoutine$27$anon11_Else#1;
+
+ inline$CallCompletionRoutine$27$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$27$anon3#1;
+
+ inline$CallCompletionRoutine$27$anon3#1:
+ goto inline$CallCompletionRoutine$27$label_17#1;
+
+ inline$CallCompletionRoutine$27$label_17#1:
+ goto inline$CallCompletionRoutine$27$label_18#1;
+
+ inline$CallCompletionRoutine$27$label_18#1:
+ goto inline$CallCompletionRoutine$27$label_18_true#1, inline$CallCompletionRoutine$27$label_18_false#1;
+
+ inline$CallCompletionRoutine$27$label_18_false#1:
+ assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$27$label_1#1;
+
+ inline$CallCompletionRoutine$27$label_18_true#1:
+ assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$27$label_19#1;
+
+ inline$CallCompletionRoutine$27$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$27$label_20#1;
+
+ inline$CallCompletionRoutine$27$label_20#1:
+ goto inline$CallCompletionRoutine$27$label_20_icall_1#1, inline$CallCompletionRoutine$27$label_20_icall_2#1, inline$CallCompletionRoutine$27$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$27$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$27$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$27$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$27$Entry#1:
+ inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$27$start#1;
+
+ inline$BDLSystemPowerIoCompletion$27$start#1:
+ call inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$27$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_4#1:
+ inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_6#1:
+ inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$27$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$27$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$140$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$140$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$start#1:
+ inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$140$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$140$label_3_true#1, inline$IoGetCurrentIrpStackLocation$140$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$140$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$140$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$140$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$140$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$140$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$140$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$140$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$140$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$140$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$140$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$140$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$140$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$140$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$140$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$140$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$140$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$140$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$140$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$140$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$140$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon36_Then#1, inline$BDLSystemPowerIoCompletion$27$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_15#1:
+ goto inline$BDLGetDebugLevel$718$Entry#1;
+
+ inline$BDLGetDebugLevel$718$Entry#1:
+ goto inline$BDLGetDebugLevel$718$start#1;
+
+ inline$BDLGetDebugLevel$718$start#1:
+ goto inline$BDLGetDebugLevel$718$label_3#1;
+
+ inline$BDLGetDebugLevel$718$label_3#1:
+ havoc inline$BDLGetDebugLevel$718$myNondetVar_0;
+ inline$BDLGetDebugLevel$718$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$718$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$718$label_1#1;
+
+ inline$BDLGetDebugLevel$718$label_1#1:
+ goto inline$BDLGetDebugLevel$718$Return#1;
+
+ inline$BDLGetDebugLevel$718$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$718$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon37_Then#1, inline$BDLSystemPowerIoCompletion$27$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_18_true#1, inline$BDLSystemPowerIoCompletion$27$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_19#1:
+ goto inline$BDLGetDebugLevel$719$Entry#1;
+
+ inline$BDLGetDebugLevel$719$Entry#1:
+ goto inline$BDLGetDebugLevel$719$start#1;
+
+ inline$BDLGetDebugLevel$719$start#1:
+ goto inline$BDLGetDebugLevel$719$label_3#1;
+
+ inline$BDLGetDebugLevel$719$label_3#1:
+ havoc inline$BDLGetDebugLevel$719$myNondetVar_0;
+ inline$BDLGetDebugLevel$719$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$719$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$719$label_1#1;
+
+ inline$BDLGetDebugLevel$719$label_1#1:
+ goto inline$BDLGetDebugLevel$719$Return#1;
+
+ inline$BDLGetDebugLevel$719$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$719$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon38_Then#1, inline$BDLSystemPowerIoCompletion$27$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_28_true#1, inline$BDLSystemPowerIoCompletion$27$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_29#1:
+ goto inline$BDLGetDebugLevel$720$Entry#1;
+
+ inline$BDLGetDebugLevel$720$Entry#1:
+ goto inline$BDLGetDebugLevel$720$start#1;
+
+ inline$BDLGetDebugLevel$720$start#1:
+ goto inline$BDLGetDebugLevel$720$label_3#1;
+
+ inline$BDLGetDebugLevel$720$label_3#1:
+ havoc inline$BDLGetDebugLevel$720$myNondetVar_0;
+ inline$BDLGetDebugLevel$720$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$720$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$720$label_1#1;
+
+ inline$BDLGetDebugLevel$720$label_1#1:
+ goto inline$BDLGetDebugLevel$720$Return#1;
+
+ inline$BDLGetDebugLevel$720$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$720$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon39_Then#1, inline$BDLSystemPowerIoCompletion$27$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_38_true#1, inline$BDLSystemPowerIoCompletion$27$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_39_true#1, inline$BDLSystemPowerIoCompletion$27$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$27$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$27$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$27$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$27$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$27$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_106_true#1, inline$BDLSystemPowerIoCompletion$27$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$27$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$27$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$27$myNondetVar_0, inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$27$anon50_Then#1, inline$BDLSystemPowerIoCompletion$27$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_112#1:
+ inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_113_true#1, inline$BDLSystemPowerIoCompletion$27$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$27$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_117#1:
+ goto inline$BDLGetDebugLevel$727$Entry#1;
+
+ inline$BDLGetDebugLevel$727$Entry#1:
+ goto inline$BDLGetDebugLevel$727$start#1;
+
+ inline$BDLGetDebugLevel$727$start#1:
+ goto inline$BDLGetDebugLevel$727$label_3#1;
+
+ inline$BDLGetDebugLevel$727$label_3#1:
+ havoc inline$BDLGetDebugLevel$727$myNondetVar_0;
+ inline$BDLGetDebugLevel$727$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$727$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$727$label_1#1;
+
+ inline$BDLGetDebugLevel$727$label_1#1:
+ goto inline$BDLGetDebugLevel$727$Return#1;
+
+ inline$BDLGetDebugLevel$727$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$727$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon51_Then#1, inline$BDLSystemPowerIoCompletion$27$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_120_true#1, inline$BDLSystemPowerIoCompletion$27$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_121#1:
+ goto inline$BDLGetDebugLevel$728$Entry#1;
+
+ inline$BDLGetDebugLevel$728$Entry#1:
+ goto inline$BDLGetDebugLevel$728$start#1;
+
+ inline$BDLGetDebugLevel$728$start#1:
+ goto inline$BDLGetDebugLevel$728$label_3#1;
+
+ inline$BDLGetDebugLevel$728$label_3#1:
+ havoc inline$BDLGetDebugLevel$728$myNondetVar_0;
+ inline$BDLGetDebugLevel$728$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$728$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$728$label_1#1;
+
+ inline$BDLGetDebugLevel$728$label_1#1:
+ goto inline$BDLGetDebugLevel$728$Return#1;
+
+ inline$BDLGetDebugLevel$728$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$728$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon52_Then#1, inline$BDLSystemPowerIoCompletion$27$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_130_true#1, inline$BDLSystemPowerIoCompletion$27$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_131#1:
+ goto inline$BDLGetDebugLevel$729$Entry#1;
+
+ inline$BDLGetDebugLevel$729$Entry#1:
+ goto inline$BDLGetDebugLevel$729$start#1;
+
+ inline$BDLGetDebugLevel$729$start#1:
+ goto inline$BDLGetDebugLevel$729$label_3#1;
+
+ inline$BDLGetDebugLevel$729$label_3#1:
+ havoc inline$BDLGetDebugLevel$729$myNondetVar_0;
+ inline$BDLGetDebugLevel$729$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$729$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$729$label_1#1;
+
+ inline$BDLGetDebugLevel$729$label_1#1:
+ goto inline$BDLGetDebugLevel$729$Return#1;
+
+ inline$BDLGetDebugLevel$729$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$729$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon53_Then#1, inline$BDLSystemPowerIoCompletion$27$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_140_true#1, inline$BDLSystemPowerIoCompletion$27$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$27$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_115#1:
+ inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$27$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$27$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$27$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_43#1:
+ goto inline$BDLGetDebugLevel$721$Entry#1;
+
+ inline$BDLGetDebugLevel$721$Entry#1:
+ goto inline$BDLGetDebugLevel$721$start#1;
+
+ inline$BDLGetDebugLevel$721$start#1:
+ goto inline$BDLGetDebugLevel$721$label_3#1;
+
+ inline$BDLGetDebugLevel$721$label_3#1:
+ havoc inline$BDLGetDebugLevel$721$myNondetVar_0;
+ inline$BDLGetDebugLevel$721$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$721$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$721$label_1#1;
+
+ inline$BDLGetDebugLevel$721$label_1#1:
+ goto inline$BDLGetDebugLevel$721$Return#1;
+
+ inline$BDLGetDebugLevel$721$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$721$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon40_Then#1, inline$BDLSystemPowerIoCompletion$27$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_46_true#1, inline$BDLSystemPowerIoCompletion$27$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_47#1:
+ goto inline$BDLGetDebugLevel$722$Entry#1;
+
+ inline$BDLGetDebugLevel$722$Entry#1:
+ goto inline$BDLGetDebugLevel$722$start#1;
+
+ inline$BDLGetDebugLevel$722$start#1:
+ goto inline$BDLGetDebugLevel$722$label_3#1;
+
+ inline$BDLGetDebugLevel$722$label_3#1:
+ havoc inline$BDLGetDebugLevel$722$myNondetVar_0;
+ inline$BDLGetDebugLevel$722$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$722$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$722$label_1#1;
+
+ inline$BDLGetDebugLevel$722$label_1#1:
+ goto inline$BDLGetDebugLevel$722$Return#1;
+
+ inline$BDLGetDebugLevel$722$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$722$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon41_Then#1, inline$BDLSystemPowerIoCompletion$27$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_56_true#1, inline$BDLSystemPowerIoCompletion$27$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_57#1:
+ goto inline$BDLGetDebugLevel$723$Entry#1;
+
+ inline$BDLGetDebugLevel$723$Entry#1:
+ goto inline$BDLGetDebugLevel$723$start#1;
+
+ inline$BDLGetDebugLevel$723$start#1:
+ goto inline$BDLGetDebugLevel$723$label_3#1;
+
+ inline$BDLGetDebugLevel$723$label_3#1:
+ havoc inline$BDLGetDebugLevel$723$myNondetVar_0;
+ inline$BDLGetDebugLevel$723$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$723$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$723$label_1#1;
+
+ inline$BDLGetDebugLevel$723$label_1#1:
+ goto inline$BDLGetDebugLevel$723$Return#1;
+
+ inline$BDLGetDebugLevel$723$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$723$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon42_Then#1, inline$BDLSystemPowerIoCompletion$27$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_66_true#1, inline$BDLSystemPowerIoCompletion$27$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$27$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$27$anon43_Then#1, inline$BDLSystemPowerIoCompletion$27$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$27$anon44_Then#1, inline$BDLSystemPowerIoCompletion$27$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_74#1:
+ goto inline$storm_IoCompleteRequest$56$Entry#1;
+
+ inline$storm_IoCompleteRequest$56$Entry#1:
+ inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$27$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$56$start#1;
+
+ inline$storm_IoCompleteRequest$56$start#1:
+ inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$56$label_3#1;
+
+ inline$storm_IoCompleteRequest$56$label_3#1:
+ call inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$56$label_6#1;
+
+ inline$storm_IoCompleteRequest$56$label_6#1:
+ goto inline$storm_IoCompleteRequest$56$label_6_true#1, inline$storm_IoCompleteRequest$56$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$56$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$56$label_7#1;
+
+ inline$storm_IoCompleteRequest$56$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$56$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$56$label_8#1;
+
+ inline$storm_IoCompleteRequest$56$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$56$anon3_Then#1, inline$storm_IoCompleteRequest$56$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$56$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$56$anon1#1;
+
+ inline$storm_IoCompleteRequest$56$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$56$label_9#1;
+
+ inline$storm_IoCompleteRequest$56$label_9#1:
+ goto inline$storm_IoCompleteRequest$56$label_9_true#1, inline$storm_IoCompleteRequest$56$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$56$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$56$label_10#1;
+
+ inline$storm_IoCompleteRequest$56$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$56$label_1#1;
+
+ inline$storm_IoCompleteRequest$56$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$56$label_7#1;
+
+ inline$storm_IoCompleteRequest$56$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$56$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$56$label_1#1;
+
+ inline$storm_IoCompleteRequest$56$label_1#1:
+ goto inline$storm_IoCompleteRequest$56$Return#1;
+
+ inline$storm_IoCompleteRequest$56$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$56$Return#1;
+
+ inline$storm_IoCompleteRequest$56$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon45_Then#1, inline$BDLSystemPowerIoCompletion$27$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$27$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$27$anon46_Then#1, inline$BDLSystemPowerIoCompletion$27$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_80#1:
+ goto inline$BDLGetDebugLevel$724$Entry#1;
+
+ inline$BDLGetDebugLevel$724$Entry#1:
+ goto inline$BDLGetDebugLevel$724$start#1;
+
+ inline$BDLGetDebugLevel$724$start#1:
+ goto inline$BDLGetDebugLevel$724$label_3#1;
+
+ inline$BDLGetDebugLevel$724$label_3#1:
+ havoc inline$BDLGetDebugLevel$724$myNondetVar_0;
+ inline$BDLGetDebugLevel$724$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$724$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$724$label_1#1;
+
+ inline$BDLGetDebugLevel$724$label_1#1:
+ goto inline$BDLGetDebugLevel$724$Return#1;
+
+ inline$BDLGetDebugLevel$724$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$724$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon47_Then#1, inline$BDLSystemPowerIoCompletion$27$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_83_true#1, inline$BDLSystemPowerIoCompletion$27$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_84#1:
+ goto inline$BDLGetDebugLevel$725$Entry#1;
+
+ inline$BDLGetDebugLevel$725$Entry#1:
+ goto inline$BDLGetDebugLevel$725$start#1;
+
+ inline$BDLGetDebugLevel$725$start#1:
+ goto inline$BDLGetDebugLevel$725$label_3#1;
+
+ inline$BDLGetDebugLevel$725$label_3#1:
+ havoc inline$BDLGetDebugLevel$725$myNondetVar_0;
+ inline$BDLGetDebugLevel$725$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$725$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$725$label_1#1;
+
+ inline$BDLGetDebugLevel$725$label_1#1:
+ goto inline$BDLGetDebugLevel$725$Return#1;
+
+ inline$BDLGetDebugLevel$725$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$725$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon48_Then#1, inline$BDLSystemPowerIoCompletion$27$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_93_true#1, inline$BDLSystemPowerIoCompletion$27$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$27$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$27$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_94#1:
+ goto inline$BDLGetDebugLevel$726$Entry#1;
+
+ inline$BDLGetDebugLevel$726$Entry#1:
+ goto inline$BDLGetDebugLevel$726$start#1;
+
+ inline$BDLGetDebugLevel$726$start#1:
+ goto inline$BDLGetDebugLevel$726$label_3#1;
+
+ inline$BDLGetDebugLevel$726$label_3#1:
+ havoc inline$BDLGetDebugLevel$726$myNondetVar_0;
+ inline$BDLGetDebugLevel$726$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$726$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$726$label_1#1;
+
+ inline$BDLGetDebugLevel$726$label_1#1:
+ goto inline$BDLGetDebugLevel$726$Return#1;
+
+ inline$BDLGetDebugLevel$726$Return#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$726$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$27$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$27$anon49_Then#1, inline$BDLSystemPowerIoCompletion$27$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_103_true#1, inline$BDLSystemPowerIoCompletion$27$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$27$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$27$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$27$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_104#1:
+ inline$BDLSystemPowerIoCompletion$27$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$27$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$27$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$27$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$27$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$27$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$27$Return#1:
+ inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$27$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$27$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$27$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$27$anon14_Then#1, inline$CallCompletionRoutine$27$anon14_Else#1;
+
+ inline$CallCompletionRoutine$27$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$27$anon9#1;
+
+ inline$CallCompletionRoutine$27$anon9#1:
+ goto inline$CallCompletionRoutine$27$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$27$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$27$Return#1;
+
+ inline$CallCompletionRoutine$27$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$27$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$27$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$27$Entry#1:
+ inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$27$start#1;
+
+ inline$BDLDevicePowerIoCompletion$27$start#1:
+ call inline$BDLDevicePowerIoCompletion$27$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$27$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_4#1:
+ inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_6#1:
+ inline$BDLDevicePowerIoCompletion$27$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$27$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$27$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$139$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$139$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$start#1:
+ inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$139$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$139$label_3_true#1, inline$IoGetCurrentIrpStackLocation$139$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$139$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$139$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$139$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$139$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$139$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$139$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$139$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$139$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$139$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$139$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$139$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$139$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$139$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$139$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$139$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$139$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$139$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$139$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$139$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$139$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$139$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$139$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$139$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon30_Then#1, inline$BDLDevicePowerIoCompletion$27$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_13#1:
+ inline$BDLDevicePowerIoCompletion$27$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_17#1:
+ goto inline$BDLGetDebugLevel$709$Entry#1;
+
+ inline$BDLGetDebugLevel$709$Entry#1:
+ goto inline$BDLGetDebugLevel$709$start#1;
+
+ inline$BDLGetDebugLevel$709$start#1:
+ goto inline$BDLGetDebugLevel$709$label_3#1;
+
+ inline$BDLGetDebugLevel$709$label_3#1:
+ havoc inline$BDLGetDebugLevel$709$myNondetVar_0;
+ inline$BDLGetDebugLevel$709$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$709$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$709$label_1#1;
+
+ inline$BDLGetDebugLevel$709$label_1#1:
+ goto inline$BDLGetDebugLevel$709$Return#1;
+
+ inline$BDLGetDebugLevel$709$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$709$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon31_Then#1, inline$BDLDevicePowerIoCompletion$27$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_20_true#1, inline$BDLDevicePowerIoCompletion$27$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_21#1:
+ goto inline$BDLGetDebugLevel$710$Entry#1;
+
+ inline$BDLGetDebugLevel$710$Entry#1:
+ goto inline$BDLGetDebugLevel$710$start#1;
+
+ inline$BDLGetDebugLevel$710$start#1:
+ goto inline$BDLGetDebugLevel$710$label_3#1;
+
+ inline$BDLGetDebugLevel$710$label_3#1:
+ havoc inline$BDLGetDebugLevel$710$myNondetVar_0;
+ inline$BDLGetDebugLevel$710$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$710$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$710$label_1#1;
+
+ inline$BDLGetDebugLevel$710$label_1#1:
+ goto inline$BDLGetDebugLevel$710$Return#1;
+
+ inline$BDLGetDebugLevel$710$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$710$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon32_Then#1, inline$BDLDevicePowerIoCompletion$27$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_30_true#1, inline$BDLDevicePowerIoCompletion$27$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_31#1:
+ goto inline$BDLGetDebugLevel$711$Entry#1;
+
+ inline$BDLGetDebugLevel$711$Entry#1:
+ goto inline$BDLGetDebugLevel$711$start#1;
+
+ inline$BDLGetDebugLevel$711$start#1:
+ goto inline$BDLGetDebugLevel$711$label_3#1;
+
+ inline$BDLGetDebugLevel$711$label_3#1:
+ havoc inline$BDLGetDebugLevel$711$myNondetVar_0;
+ inline$BDLGetDebugLevel$711$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$711$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$711$label_1#1;
+
+ inline$BDLGetDebugLevel$711$label_1#1:
+ goto inline$BDLGetDebugLevel$711$Return#1;
+
+ inline$BDLGetDebugLevel$711$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$711$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon33_Then#1, inline$BDLDevicePowerIoCompletion$27$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_40_true#1, inline$BDLDevicePowerIoCompletion$27$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_41_true#1, inline$BDLDevicePowerIoCompletion$27$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$27$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$27$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_44_true#1, inline$BDLDevicePowerIoCompletion$27$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_45_true#1, inline$BDLDevicePowerIoCompletion$27$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$27$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$27$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$27$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_54#1:
+ inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$27$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_55_true#1, inline$BDLDevicePowerIoCompletion$27$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$27$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$27$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$27$anon34_Then#1, inline$BDLDevicePowerIoCompletion$27$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_59#1:
+ goto inline$BDLGetDebugLevel$712$Entry#1;
+
+ inline$BDLGetDebugLevel$712$Entry#1:
+ goto inline$BDLGetDebugLevel$712$start#1;
+
+ inline$BDLGetDebugLevel$712$start#1:
+ goto inline$BDLGetDebugLevel$712$label_3#1;
+
+ inline$BDLGetDebugLevel$712$label_3#1:
+ havoc inline$BDLGetDebugLevel$712$myNondetVar_0;
+ inline$BDLGetDebugLevel$712$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$712$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$712$label_1#1;
+
+ inline$BDLGetDebugLevel$712$label_1#1:
+ goto inline$BDLGetDebugLevel$712$Return#1;
+
+ inline$BDLGetDebugLevel$712$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$712$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon35_Then#1, inline$BDLDevicePowerIoCompletion$27$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_62_true#1, inline$BDLDevicePowerIoCompletion$27$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_63#1:
+ goto inline$BDLGetDebugLevel$713$Entry#1;
+
+ inline$BDLGetDebugLevel$713$Entry#1:
+ goto inline$BDLGetDebugLevel$713$start#1;
+
+ inline$BDLGetDebugLevel$713$start#1:
+ goto inline$BDLGetDebugLevel$713$label_3#1;
+
+ inline$BDLGetDebugLevel$713$label_3#1:
+ havoc inline$BDLGetDebugLevel$713$myNondetVar_0;
+ inline$BDLGetDebugLevel$713$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$713$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$713$label_1#1;
+
+ inline$BDLGetDebugLevel$713$label_1#1:
+ goto inline$BDLGetDebugLevel$713$Return#1;
+
+ inline$BDLGetDebugLevel$713$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$713$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon36_Then#1, inline$BDLDevicePowerIoCompletion$27$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_72_true#1, inline$BDLDevicePowerIoCompletion$27$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_73#1:
+ goto inline$BDLGetDebugLevel$714$Entry#1;
+
+ inline$BDLGetDebugLevel$714$Entry#1:
+ goto inline$BDLGetDebugLevel$714$start#1;
+
+ inline$BDLGetDebugLevel$714$start#1:
+ goto inline$BDLGetDebugLevel$714$label_3#1;
+
+ inline$BDLGetDebugLevel$714$label_3#1:
+ havoc inline$BDLGetDebugLevel$714$myNondetVar_0;
+ inline$BDLGetDebugLevel$714$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$714$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$714$label_1#1;
+
+ inline$BDLGetDebugLevel$714$label_1#1:
+ goto inline$BDLGetDebugLevel$714$Return#1;
+
+ inline$BDLGetDebugLevel$714$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$714$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon37_Then#1, inline$BDLDevicePowerIoCompletion$27$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_82_true#1, inline$BDLDevicePowerIoCompletion$27$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$27$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$27$anon38_Then#1, inline$BDLDevicePowerIoCompletion$27$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$27$anon39_Then#1, inline$BDLDevicePowerIoCompletion$27$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_92#1:
+ goto inline$storm_IoCompleteRequest$55$Entry#1;
+
+ inline$storm_IoCompleteRequest$55$Entry#1:
+ inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$27$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$55$start#1;
+
+ inline$storm_IoCompleteRequest$55$start#1:
+ inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$55$label_3#1;
+
+ inline$storm_IoCompleteRequest$55$label_3#1:
+ call inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$55$label_6#1;
+
+ inline$storm_IoCompleteRequest$55$label_6#1:
+ goto inline$storm_IoCompleteRequest$55$label_6_true#1, inline$storm_IoCompleteRequest$55$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$55$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$55$label_7#1;
+
+ inline$storm_IoCompleteRequest$55$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$55$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$55$label_8#1;
+
+ inline$storm_IoCompleteRequest$55$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$55$anon3_Then#1, inline$storm_IoCompleteRequest$55$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$55$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$55$anon1#1;
+
+ inline$storm_IoCompleteRequest$55$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$55$label_9#1;
+
+ inline$storm_IoCompleteRequest$55$label_9#1:
+ goto inline$storm_IoCompleteRequest$55$label_9_true#1, inline$storm_IoCompleteRequest$55$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$55$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$55$label_10#1;
+
+ inline$storm_IoCompleteRequest$55$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$55$label_1#1;
+
+ inline$storm_IoCompleteRequest$55$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$55$label_7#1;
+
+ inline$storm_IoCompleteRequest$55$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$55$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$55$label_1#1;
+
+ inline$storm_IoCompleteRequest$55$label_1#1:
+ goto inline$storm_IoCompleteRequest$55$Return#1;
+
+ inline$storm_IoCompleteRequest$55$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$55$Return#1;
+
+ inline$storm_IoCompleteRequest$55$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon40_Then#1, inline$BDLDevicePowerIoCompletion$27$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$27$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$27$anon41_Then#1, inline$BDLDevicePowerIoCompletion$27$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_98#1:
+ goto inline$BDLGetDebugLevel$715$Entry#1;
+
+ inline$BDLGetDebugLevel$715$Entry#1:
+ goto inline$BDLGetDebugLevel$715$start#1;
+
+ inline$BDLGetDebugLevel$715$start#1:
+ goto inline$BDLGetDebugLevel$715$label_3#1;
+
+ inline$BDLGetDebugLevel$715$label_3#1:
+ havoc inline$BDLGetDebugLevel$715$myNondetVar_0;
+ inline$BDLGetDebugLevel$715$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$715$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$715$label_1#1;
+
+ inline$BDLGetDebugLevel$715$label_1#1:
+ goto inline$BDLGetDebugLevel$715$Return#1;
+
+ inline$BDLGetDebugLevel$715$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$715$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon42_Then#1, inline$BDLDevicePowerIoCompletion$27$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_101_true#1, inline$BDLDevicePowerIoCompletion$27$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_102#1:
+ goto inline$BDLGetDebugLevel$716$Entry#1;
+
+ inline$BDLGetDebugLevel$716$Entry#1:
+ goto inline$BDLGetDebugLevel$716$start#1;
+
+ inline$BDLGetDebugLevel$716$start#1:
+ goto inline$BDLGetDebugLevel$716$label_3#1;
+
+ inline$BDLGetDebugLevel$716$label_3#1:
+ havoc inline$BDLGetDebugLevel$716$myNondetVar_0;
+ inline$BDLGetDebugLevel$716$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$716$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$716$label_1#1;
+
+ inline$BDLGetDebugLevel$716$label_1#1:
+ goto inline$BDLGetDebugLevel$716$Return#1;
+
+ inline$BDLGetDebugLevel$716$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$716$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon43_Then#1, inline$BDLDevicePowerIoCompletion$27$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_111_true#1, inline$BDLDevicePowerIoCompletion$27$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$27$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$27$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_112#1:
+ goto inline$BDLGetDebugLevel$717$Entry#1;
+
+ inline$BDLGetDebugLevel$717$Entry#1:
+ goto inline$BDLGetDebugLevel$717$start#1;
+
+ inline$BDLGetDebugLevel$717$start#1:
+ goto inline$BDLGetDebugLevel$717$label_3#1;
+
+ inline$BDLGetDebugLevel$717$label_3#1:
+ havoc inline$BDLGetDebugLevel$717$myNondetVar_0;
+ inline$BDLGetDebugLevel$717$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$717$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$717$label_1#1;
+
+ inline$BDLGetDebugLevel$717$label_1#1:
+ goto inline$BDLGetDebugLevel$717$Return#1;
+
+ inline$BDLGetDebugLevel$717$Return#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$717$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$27$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$27$anon44_Then#1, inline$BDLDevicePowerIoCompletion$27$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_121_true#1, inline$BDLDevicePowerIoCompletion$27$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$27$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$27$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$27$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_122#1:
+ inline$BDLDevicePowerIoCompletion$27$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$27$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$27$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$27$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$27$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$27$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$27$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$27$Return#1:
+ inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$27$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$27$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$27$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$27$anon13_Then#1, inline$CallCompletionRoutine$27$anon13_Else#1;
+
+ inline$CallCompletionRoutine$27$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$27$anon7#1;
+
+ inline$CallCompletionRoutine$27$anon7#1:
+ goto inline$CallCompletionRoutine$27$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$27$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$27$Return#1;
+
+ inline$CallCompletionRoutine$27$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$27$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$27$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$27$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$27$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$27$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$start#1:
+ inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$27$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$27$label_3_true#1, inline$BDLCallDriverCompletionRoutine$27$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$27$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$27$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$27$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$27$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$27$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_6#1:
+ goto inline$storm_KeSetEvent$31$Entry#1;
+
+ inline$storm_KeSetEvent$31$Entry#1:
+ inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$27$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$31$start#1;
+
+ inline$storm_KeSetEvent$31$start#1:
+ inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$31$label_3#1;
+
+ inline$storm_KeSetEvent$31$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$31$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$31$label_1#1;
+
+ inline$storm_KeSetEvent$31$label_1#1:
+ goto inline$storm_KeSetEvent$31$Return#1;
+
+ inline$storm_KeSetEvent$31$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$27$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$27$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$27$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$27$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$27$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$27$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$27$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$27$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$27$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$27$Return#1:
+ inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$27$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$27$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$27$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$27$anon12_Then#1, inline$CallCompletionRoutine$27$anon12_Else#1;
+
+ inline$CallCompletionRoutine$27$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$27$anon5#1;
+
+ inline$CallCompletionRoutine$27$anon5#1:
+ goto inline$CallCompletionRoutine$27$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$27$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$27$label_23#1;
+
+ inline$CallCompletionRoutine$27$label_23#1:
+ inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$27$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$27$label_24#1;
+
+ inline$CallCompletionRoutine$27$label_24#1:
+ goto inline$CallCompletionRoutine$27$label_24_true#1, inline$CallCompletionRoutine$27$label_24_false#1;
+
+ inline$CallCompletionRoutine$27$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$27$label_1#1;
+
+ inline$CallCompletionRoutine$27$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$27$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$27$label_25#1;
+
+ inline$CallCompletionRoutine$27$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$27$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$27$label_1#1;
+
+ inline$CallCompletionRoutine$27$label_1#1:
+ goto inline$CallCompletionRoutine$27$Return#1;
+
+ inline$CallCompletionRoutine$27$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$27$Return#1;
+
+ inline$CallCompletionRoutine$27$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$27$Return#1;
+
+ inline$CallCompletionRoutine$27$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$27$Return#1;
+
+ inline$CallCompletionRoutine$27$Return#1:
+ goto inline$storm_IoCallDriver$13$label_39$1#1;
+
+ inline$storm_IoCallDriver$13$label_39$1#1:
+ goto inline$storm_IoCallDriver$13$anon15_Then#1, inline$storm_IoCallDriver$13$anon15_Else#1;
+
+ inline$storm_IoCallDriver$13$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$13$anon10#1;
+
+ inline$storm_IoCallDriver$13$anon10#1:
+ goto inline$storm_IoCallDriver$13$label_36#1;
+
+ inline$storm_IoCallDriver$13$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$13$Return#1;
+
+ inline$storm_IoCallDriver$13$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$13$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$13$label_28#1;
+
+ inline$storm_IoCallDriver$13$label_28#1:
+ inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$13$label_42#1;
+
+ inline$storm_IoCallDriver$13$label_42#1:
+ goto inline$storm_IoCallDriver$13$label_43#1;
+
+ inline$storm_IoCallDriver$13$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$13$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$13$label_36#1;
+
+ inline$storm_IoCallDriver$13$label_36#1:
+ inline$storm_IoCallDriver$13$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$13$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$13$label_1#1;
+
+ inline$storm_IoCallDriver$13$label_1#1:
+ goto inline$storm_IoCallDriver$13$Return#1;
+
+ inline$storm_IoCallDriver$13$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$13$Return#1;
+
+ inline$storm_IoCallDriver$13$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$13$Return#1;
+
+ inline$storm_IoCallDriver$13$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$13$Return#1;
+
+ inline$storm_IoCallDriver$13$Return#1:
+ inline$BDLHandleRemove$1$$result.storm_IoCallDriver$2453.25$39$ := inline$storm_IoCallDriver$13$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLHandleRemove$1$label_109$1#1;
+
+ inline$BDLHandleRemove$1$label_109$1#1:
+ goto inline$BDLHandleRemove$1$anon56_Then#1, inline$BDLHandleRemove$1$anon56_Else#1;
+
+ inline$BDLHandleRemove$1$anon56_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon29#1;
+
+ inline$BDLHandleRemove$1$anon29#1:
+ goto inline$BDLHandleRemove$1$label_112#1;
+
+ inline$BDLHandleRemove$1$label_112#1:
+ inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$1$$result.storm_IoCallDriver$2453.25$39$;
+ goto inline$BDLHandleRemove$1$label_113#1;
+
+ inline$BDLHandleRemove$1$label_113#1:
+ goto inline$BDLHandleRemove$1$label_113_true#1, inline$BDLHandleRemove$1$label_113_false#1;
+
+ inline$BDLHandleRemove$1$label_113_false#1:
+ assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 == 0;
+ goto inline$BDLHandleRemove$1$label_114#1;
+
+ inline$BDLHandleRemove$1$label_113_true#1:
+ assume inline$BDLHandleRemove$1$$status$4$2383.28$BDLHandleRemove$12 != 0;
+ goto inline$BDLHandleRemove$1$label_117#1;
+
+ inline$BDLHandleRemove$1$label_117#1:
+ goto inline$BDLGetDebugLevel$731$Entry#1;
+
+ inline$BDLGetDebugLevel$731$Entry#1:
+ goto inline$BDLGetDebugLevel$731$start#1;
+
+ inline$BDLGetDebugLevel$731$start#1:
+ goto inline$BDLGetDebugLevel$731$label_3#1;
+
+ inline$BDLGetDebugLevel$731$label_3#1:
+ havoc inline$BDLGetDebugLevel$731$myNondetVar_0;
+ inline$BDLGetDebugLevel$731$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$731$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$731$label_1#1;
+
+ inline$BDLGetDebugLevel$731$label_1#1:
+ goto inline$BDLGetDebugLevel$731$Return#1;
+
+ inline$BDLGetDebugLevel$731$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$ := inline$BDLGetDebugLevel$731$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_117$1#1;
+
+ inline$BDLHandleRemove$1$label_117$1#1:
+ goto inline$BDLHandleRemove$1$anon58_Then#1, inline$BDLHandleRemove$1$anon58_Else#1;
+
+ inline$BDLHandleRemove$1$anon58_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon33#1;
+
+ inline$BDLHandleRemove$1$anon33#1:
+ goto inline$BDLHandleRemove$1$label_120#1;
+
+ inline$BDLHandleRemove$1$label_120#1:
+ goto inline$BDLHandleRemove$1$label_120_true#1, inline$BDLHandleRemove$1$label_120_false#1;
+
+ inline$BDLHandleRemove$1$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$) == 0;
+ goto inline$BDLHandleRemove$1$label_121#1;
+
+ inline$BDLHandleRemove$1$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$40$) != 0;
+ goto inline$BDLHandleRemove$1$label_124#1;
+
+ inline$BDLHandleRemove$1$label_124#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_125#1;
+
+ inline$BDLHandleRemove$1$label_125#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_126#1;
+
+ inline$BDLHandleRemove$1$label_126#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_127#1;
+
+ inline$BDLHandleRemove$1$label_127#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$41$;
+ goto inline$BDLHandleRemove$1$label_121#1;
+
+ inline$BDLHandleRemove$1$label_121#1:
+ goto inline$BDLGetDebugLevel$732$Entry#1;
+
+ inline$BDLGetDebugLevel$732$Entry#1:
+ goto inline$BDLGetDebugLevel$732$start#1;
+
+ inline$BDLGetDebugLevel$732$start#1:
+ goto inline$BDLGetDebugLevel$732$label_3#1;
+
+ inline$BDLGetDebugLevel$732$label_3#1:
+ havoc inline$BDLGetDebugLevel$732$myNondetVar_0;
+ inline$BDLGetDebugLevel$732$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$732$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$732$label_1#1;
+
+ inline$BDLGetDebugLevel$732$label_1#1:
+ goto inline$BDLGetDebugLevel$732$Return#1;
+
+ inline$BDLGetDebugLevel$732$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$ := inline$BDLGetDebugLevel$732$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_121$1#1;
+
+ inline$BDLHandleRemove$1$label_121$1#1:
+ goto inline$BDLHandleRemove$1$anon59_Then#1, inline$BDLHandleRemove$1$anon59_Else#1;
+
+ inline$BDLHandleRemove$1$anon59_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon35#1;
+
+ inline$BDLHandleRemove$1$anon35#1:
+ goto inline$BDLHandleRemove$1$label_130#1;
+
+ inline$BDLHandleRemove$1$label_130#1:
+ goto inline$BDLHandleRemove$1$label_130_true#1, inline$BDLHandleRemove$1$label_130_false#1;
+
+ inline$BDLHandleRemove$1$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$) == 0;
+ goto inline$BDLHandleRemove$1$label_131#1;
+
+ inline$BDLHandleRemove$1$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$45$) != 0;
+ goto inline$BDLHandleRemove$1$label_134#1;
+
+ inline$BDLHandleRemove$1$label_134#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_135#1;
+
+ inline$BDLHandleRemove$1$label_135#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_136#1;
+
+ inline$BDLHandleRemove$1$label_136#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_137#1;
+
+ inline$BDLHandleRemove$1$label_137#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2457.0$46$;
+ goto inline$BDLHandleRemove$1$label_131#1;
+
+ inline$BDLHandleRemove$1$label_131#1:
+ goto inline$BDLGetDebugLevel$733$Entry#1;
+
+ inline$BDLGetDebugLevel$733$Entry#1:
+ goto inline$BDLGetDebugLevel$733$start#1;
+
+ inline$BDLGetDebugLevel$733$start#1:
+ goto inline$BDLGetDebugLevel$733$label_3#1;
+
+ inline$BDLGetDebugLevel$733$label_3#1:
+ havoc inline$BDLGetDebugLevel$733$myNondetVar_0;
+ inline$BDLGetDebugLevel$733$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$733$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$733$label_1#1;
+
+ inline$BDLGetDebugLevel$733$label_1#1:
+ goto inline$BDLGetDebugLevel$733$Return#1;
+
+ inline$BDLGetDebugLevel$733$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$ := inline$BDLGetDebugLevel$733$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_131$1#1;
+
+ inline$BDLHandleRemove$1$label_131$1#1:
+ goto inline$BDLHandleRemove$1$anon60_Then#1, inline$BDLHandleRemove$1$anon60_Else#1;
+
+ inline$BDLHandleRemove$1$anon60_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon37#1;
+
+ inline$BDLHandleRemove$1$anon37#1:
+ goto inline$BDLHandleRemove$1$label_140#1;
+
+ inline$BDLHandleRemove$1$label_140#1:
+ goto inline$BDLHandleRemove$1$label_140_true#1, inline$BDLHandleRemove$1$label_140_false#1;
+
+ inline$BDLHandleRemove$1$label_140_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$, 4) == 0;
+ goto inline$BDLHandleRemove$1$label_114#1;
+
+ inline$BDLHandleRemove$1$label_140_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2457.0$50$, 4) != 0;
+ goto inline$BDLHandleRemove$1$label_141#1;
+
+ inline$BDLHandleRemove$1$label_141#1:
+ goto inline$BDLHandleRemove$1$label_114#1;
+
+ inline$BDLHandleRemove$1$label_114#1:
+ goto inline$BDLGetDebugLevel$730$Entry#1;
+
+ inline$BDLGetDebugLevel$730$Entry#1:
+ goto inline$BDLGetDebugLevel$730$start#1;
+
+ inline$BDLGetDebugLevel$730$start#1:
+ goto inline$BDLGetDebugLevel$730$label_3#1;
+
+ inline$BDLGetDebugLevel$730$label_3#1:
+ havoc inline$BDLGetDebugLevel$730$myNondetVar_0;
+ inline$BDLGetDebugLevel$730$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$730$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$730$label_1#1;
+
+ inline$BDLGetDebugLevel$730$label_1#1:
+ goto inline$BDLGetDebugLevel$730$Return#1;
+
+ inline$BDLGetDebugLevel$730$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$ := inline$BDLGetDebugLevel$730$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_114$1#1;
+
+ inline$BDLHandleRemove$1$label_114$1#1:
+ goto inline$BDLHandleRemove$1$anon57_Then#1, inline$BDLHandleRemove$1$anon57_Else#1;
+
+ inline$BDLHandleRemove$1$anon57_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon31#1;
+
+ inline$BDLHandleRemove$1$anon31#1:
+ goto inline$BDLHandleRemove$1$label_142#1;
+
+ inline$BDLHandleRemove$1$label_142#1:
+ goto inline$BDLHandleRemove$1$label_142_true#1, inline$BDLHandleRemove$1$label_142_false#1;
+
+ inline$BDLHandleRemove$1$label_142_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$) == 0;
+ goto inline$BDLHandleRemove$1$label_143#1;
+
+ inline$BDLHandleRemove$1$label_142_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$51$) != 0;
+ goto inline$BDLHandleRemove$1$label_146#1;
+
+ inline$BDLHandleRemove$1$label_146#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_147#1;
+
+ inline$BDLHandleRemove$1$label_147#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_148#1;
+
+ inline$BDLHandleRemove$1$label_148#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_149#1;
+
+ inline$BDLHandleRemove$1$label_149#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$52$;
+ goto inline$BDLHandleRemove$1$label_143#1;
+
+ inline$BDLHandleRemove$1$label_143#1:
+ goto inline$BDLGetDebugLevel$734$Entry#1;
+
+ inline$BDLGetDebugLevel$734$Entry#1:
+ goto inline$BDLGetDebugLevel$734$start#1;
+
+ inline$BDLGetDebugLevel$734$start#1:
+ goto inline$BDLGetDebugLevel$734$label_3#1;
+
+ inline$BDLGetDebugLevel$734$label_3#1:
+ havoc inline$BDLGetDebugLevel$734$myNondetVar_0;
+ inline$BDLGetDebugLevel$734$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$734$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$734$label_1#1;
+
+ inline$BDLGetDebugLevel$734$label_1#1:
+ goto inline$BDLGetDebugLevel$734$Return#1;
+
+ inline$BDLGetDebugLevel$734$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$ := inline$BDLGetDebugLevel$734$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_143$1#1;
+
+ inline$BDLHandleRemove$1$label_143$1#1:
+ goto inline$BDLHandleRemove$1$anon61_Then#1, inline$BDLHandleRemove$1$anon61_Else#1;
+
+ inline$BDLHandleRemove$1$anon61_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon39#1;
+
+ inline$BDLHandleRemove$1$anon39#1:
+ goto inline$BDLHandleRemove$1$label_152#1;
+
+ inline$BDLHandleRemove$1$label_152#1:
+ goto inline$BDLHandleRemove$1$label_152_true#1, inline$BDLHandleRemove$1$label_152_false#1;
+
+ inline$BDLHandleRemove$1$label_152_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$) == 0;
+ goto inline$BDLHandleRemove$1$label_153#1;
+
+ inline$BDLHandleRemove$1$label_152_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$56$) != 0;
+ goto inline$BDLHandleRemove$1$label_156#1;
+
+ inline$BDLHandleRemove$1$label_156#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_157#1;
+
+ inline$BDLHandleRemove$1$label_157#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_158#1;
+
+ inline$BDLHandleRemove$1$label_158#1:
+ call inline$BDLHandleRemove$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$1$label_159#1;
+
+ inline$BDLHandleRemove$1$label_159#1:
+ havoc inline$BDLHandleRemove$1$$result.DbgPrint$2465.0$57$;
+ goto inline$BDLHandleRemove$1$label_153#1;
+
+ inline$BDLHandleRemove$1$label_153#1:
+ goto inline$BDLGetDebugLevel$735$Entry#1;
+
+ inline$BDLGetDebugLevel$735$Entry#1:
+ goto inline$BDLGetDebugLevel$735$start#1;
+
+ inline$BDLGetDebugLevel$735$start#1:
+ goto inline$BDLGetDebugLevel$735$label_3#1;
+
+ inline$BDLGetDebugLevel$735$label_3#1:
+ havoc inline$BDLGetDebugLevel$735$myNondetVar_0;
+ inline$BDLGetDebugLevel$735$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$735$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$735$label_1#1;
+
+ inline$BDLGetDebugLevel$735$label_1#1:
+ goto inline$BDLGetDebugLevel$735$Return#1;
+
+ inline$BDLGetDebugLevel$735$Return#1:
+ inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$ := inline$BDLGetDebugLevel$735$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$1$label_153$1#1;
+
+ inline$BDLHandleRemove$1$label_153$1#1:
+ goto inline$BDLHandleRemove$1$anon62_Then#1, inline$BDLHandleRemove$1$anon62_Else#1;
+
+ inline$BDLHandleRemove$1$anon62_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$1$anon41#1;
+
+ inline$BDLHandleRemove$1$anon41#1:
+ goto inline$BDLHandleRemove$1$label_162#1;
+
+ inline$BDLHandleRemove$1$label_162#1:
+ goto inline$BDLHandleRemove$1$label_162_true#1, inline$BDLHandleRemove$1$label_162_false#1;
+
+ inline$BDLHandleRemove$1$label_162_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$, 4) == 0;
+ goto inline$BDLHandleRemove$1$label_163#1;
+
+ inline$BDLHandleRemove$1$label_162_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$1$$result.BDLGetDebugLevel$2465.0$61$, 4) != 0;
+ goto inline$BDLHandleRemove$1$label_164#1;
+
+ inline$BDLHandleRemove$1$label_164#1:
+ goto inline$BDLHandleRemove$1$label_163#1;
+
+ inline$BDLHandleRemove$1$label_163#1:
+ goto inline$BDLHandleRemove$1$label_1#1;
+
+ inline$BDLHandleRemove$1$label_1#1:
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon62_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon61_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon57_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon60_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon59_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon58_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon56_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon55_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon54_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$1$Return#1;
+
+ inline$BDLHandleRemove$1$Return#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_31$1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_31$1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$anon17_Then#1, inline$BDLPnPSurpriseRemoval$0$anon17_Else#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$anon7#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon7#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_34#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_34#1:
+ goto inline$BDLGetDebugLevel$736$Entry#1;
+
+ inline$BDLGetDebugLevel$736$Entry#1:
+ goto inline$BDLGetDebugLevel$736$start#1;
+
+ inline$BDLGetDebugLevel$736$start#1:
+ goto inline$BDLGetDebugLevel$736$label_3#1;
+
+ inline$BDLGetDebugLevel$736$label_3#1:
+ havoc inline$BDLGetDebugLevel$736$myNondetVar_0;
+ inline$BDLGetDebugLevel$736$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$736$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$736$label_1#1;
+
+ inline$BDLGetDebugLevel$736$label_1#1:
+ goto inline$BDLGetDebugLevel$736$Return#1;
+
+ inline$BDLGetDebugLevel$736$Return#1:
+ inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$ := inline$BDLGetDebugLevel$736$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_34$1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_34$1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$anon18_Then#1, inline$BDLPnPSurpriseRemoval$0$anon18_Else#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$anon9#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon9#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_37#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_37#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_37_true#1, inline$BDLPnPSurpriseRemoval$0$label_37_false#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_37_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$) == 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_38#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_37_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$14$) != 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_41#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_41#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_42#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_42#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_43#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_43#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_44#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_44#1:
+ havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$15$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_38#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_38#1:
+ goto inline$BDLGetDebugLevel$737$Entry#1;
+
+ inline$BDLGetDebugLevel$737$Entry#1:
+ goto inline$BDLGetDebugLevel$737$start#1;
+
+ inline$BDLGetDebugLevel$737$start#1:
+ goto inline$BDLGetDebugLevel$737$label_3#1;
+
+ inline$BDLGetDebugLevel$737$label_3#1:
+ havoc inline$BDLGetDebugLevel$737$myNondetVar_0;
+ inline$BDLGetDebugLevel$737$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$737$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$737$label_1#1;
+
+ inline$BDLGetDebugLevel$737$label_1#1:
+ goto inline$BDLGetDebugLevel$737$Return#1;
+
+ inline$BDLGetDebugLevel$737$Return#1:
+ inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$ := inline$BDLGetDebugLevel$737$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_38$1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_38$1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$anon19_Then#1, inline$BDLPnPSurpriseRemoval$0$anon19_Else#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$anon11#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon11#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_47#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_47#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_47_true#1, inline$BDLPnPSurpriseRemoval$0$label_47_false#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_47_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$) == 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_48#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_47_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$19$) != 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_51#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_51#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_52#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_52#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_53#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_53#1:
+ call inline$BDLPnPSurpriseRemoval$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPSurpriseRemoval$0$label_54#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_54#1:
+ havoc inline$BDLPnPSurpriseRemoval$0$$result.DbgPrint$2549.0$20$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_48#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_48#1:
+ goto inline$BDLGetDebugLevel$738$Entry#1;
+
+ inline$BDLGetDebugLevel$738$Entry#1:
+ goto inline$BDLGetDebugLevel$738$start#1;
+
+ inline$BDLGetDebugLevel$738$start#1:
+ goto inline$BDLGetDebugLevel$738$label_3#1;
+
+ inline$BDLGetDebugLevel$738$label_3#1:
+ havoc inline$BDLGetDebugLevel$738$myNondetVar_0;
+ inline$BDLGetDebugLevel$738$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$738$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$738$label_1#1;
+
+ inline$BDLGetDebugLevel$738$label_1#1:
+ goto inline$BDLGetDebugLevel$738$Return#1;
+
+ inline$BDLGetDebugLevel$738$Return#1:
+ inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$ := inline$BDLGetDebugLevel$738$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPSurpriseRemoval$0$label_48$1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_48$1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$anon20_Then#1, inline$BDLPnPSurpriseRemoval$0$anon20_Else#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$anon13#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon13#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_57#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_57#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_57_true#1, inline$BDLPnPSurpriseRemoval$0$label_57_false#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_57_false#1:
+ assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$, 4) == 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_58#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_57_true#1:
+ assume BIT_BAND(inline$BDLPnPSurpriseRemoval$0$$result.BDLGetDebugLevel$2549.0$24$, 4) != 0;
+ goto inline$BDLPnPSurpriseRemoval$0$label_59#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_59#1:
+ goto inline$BDLPnPSurpriseRemoval$0$label_58#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_58#1:
+ inline$BDLPnPSurpriseRemoval$0$$result.BDLPnPSurpriseRemoval$2527.0$1$ := inline$BDLPnPSurpriseRemoval$0$$status$4$2534.16$BDLPnPSurpriseRemoval$12;
+ goto inline$BDLPnPSurpriseRemoval$0$label_1#1;
+
+ inline$BDLPnPSurpriseRemoval$0$label_1#1:
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon15_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$anon14_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPSurpriseRemoval$0$Return#1;
+
+ inline$BDLPnPSurpriseRemoval$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPSurpriseRemoval$973.38$35$ := inline$BDLPnPSurpriseRemoval$0$$result.BDLPnPSurpriseRemoval$2527.0$1$;
+ goto inline$BDLPnP$0$label_134$1#1;
+
+ inline$BDLPnP$0$label_134$1#1:
+ goto inline$BDLPnP$0$anon74_Then#1, inline$BDLPnP$0$anon74_Else#1;
+
+ inline$BDLPnP$0$anon74_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon41#1;
+
+ inline$BDLPnP$0$anon41#1:
+ goto inline$BDLPnP$0$label_137#1;
+
+ inline$BDLPnP$0$label_137#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPSurpriseRemoval$973.38$35$;
+ goto inline$BDLPnP$0$label_138#1;
+
+ inline$BDLPnP$0$label_138#1:
+ inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 0;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon74_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_7#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 6;
+ goto inline$BDLPnP$0$label_131#1;
+
+ inline$BDLPnP$0$label_131#1:
+ goto inline$BDLPnPCancelStop$0$Entry#1;
+
+ inline$BDLPnPCancelStop$0$Entry#1:
+ inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPCancelStop$0$start#1;
+
+ inline$BDLPnPCancelStop$0$start#1:
+ inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12 := inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12_.1;
+ inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12 := inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12_.1;
+ goto inline$BDLPnPCancelStop$0$label_3#1;
+
+ inline$BDLPnPCancelStop$0$label_3#1:
+ goto inline$BDLPnPCancelStop$0$label_4#1;
+
+ inline$BDLPnPCancelStop$0$label_4#1:
+ inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 := 0;
+ goto inline$BDLPnPCancelStop$0$label_5#1;
+
+ inline$BDLPnPCancelStop$0$label_5#1:
+ goto inline$BDLGetDebugLevel$565$Entry#1;
+
+ inline$BDLGetDebugLevel$565$Entry#1:
+ goto inline$BDLGetDebugLevel$565$start#1;
+
+ inline$BDLGetDebugLevel$565$start#1:
+ goto inline$BDLGetDebugLevel$565$label_3#1;
+
+ inline$BDLGetDebugLevel$565$label_3#1:
+ havoc inline$BDLGetDebugLevel$565$myNondetVar_0;
+ inline$BDLGetDebugLevel$565$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$565$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$565$label_1#1;
+
+ inline$BDLGetDebugLevel$565$label_1#1:
+ goto inline$BDLGetDebugLevel$565$Return#1;
+
+ inline$BDLGetDebugLevel$565$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$ := inline$BDLGetDebugLevel$565$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_5$1#1;
+
+ inline$BDLPnPCancelStop$0$label_5$1#1:
+ goto inline$BDLPnPCancelStop$0$anon22_Then#1, inline$BDLPnPCancelStop$0$anon22_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon1#1;
+
+ inline$BDLPnPCancelStop$0$anon1#1:
+ goto inline$BDLPnPCancelStop$0$label_8#1;
+
+ inline$BDLPnPCancelStop$0$label_8#1:
+ goto inline$BDLPnPCancelStop$0$label_8_true#1, inline$BDLPnPCancelStop$0$label_8_false#1;
+
+ inline$BDLPnPCancelStop$0$label_8_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$) == 0;
+ goto inline$BDLPnPCancelStop$0$label_9#1;
+
+ inline$BDLPnPCancelStop$0$label_8_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$2$) != 0;
+ goto inline$BDLPnPCancelStop$0$label_12#1;
+
+ inline$BDLPnPCancelStop$0$label_12#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_13#1;
+
+ inline$BDLPnPCancelStop$0$label_13#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_14#1;
+
+ inline$BDLPnPCancelStop$0$label_14#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_15#1;
+
+ inline$BDLPnPCancelStop$0$label_15#1:
+ havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$3$;
+ goto inline$BDLPnPCancelStop$0$label_9#1;
+
+ inline$BDLPnPCancelStop$0$label_9#1:
+ goto inline$BDLGetDebugLevel$566$Entry#1;
+
+ inline$BDLGetDebugLevel$566$Entry#1:
+ goto inline$BDLGetDebugLevel$566$start#1;
+
+ inline$BDLGetDebugLevel$566$start#1:
+ goto inline$BDLGetDebugLevel$566$label_3#1;
+
+ inline$BDLGetDebugLevel$566$label_3#1:
+ havoc inline$BDLGetDebugLevel$566$myNondetVar_0;
+ inline$BDLGetDebugLevel$566$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$566$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$566$label_1#1;
+
+ inline$BDLGetDebugLevel$566$label_1#1:
+ goto inline$BDLGetDebugLevel$566$Return#1;
+
+ inline$BDLGetDebugLevel$566$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$ := inline$BDLGetDebugLevel$566$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_9$1#1;
+
+ inline$BDLPnPCancelStop$0$label_9$1#1:
+ goto inline$BDLPnPCancelStop$0$anon23_Then#1, inline$BDLPnPCancelStop$0$anon23_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon3#1;
+
+ inline$BDLPnPCancelStop$0$anon3#1:
+ goto inline$BDLPnPCancelStop$0$label_18#1;
+
+ inline$BDLPnPCancelStop$0$label_18#1:
+ goto inline$BDLPnPCancelStop$0$label_18_true#1, inline$BDLPnPCancelStop$0$label_18_false#1;
+
+ inline$BDLPnPCancelStop$0$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$) == 0;
+ goto inline$BDLPnPCancelStop$0$label_19#1;
+
+ inline$BDLPnPCancelStop$0$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$7$) != 0;
+ goto inline$BDLPnPCancelStop$0$label_22#1;
+
+ inline$BDLPnPCancelStop$0$label_22#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_23#1;
+
+ inline$BDLPnPCancelStop$0$label_23#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_24#1;
+
+ inline$BDLPnPCancelStop$0$label_24#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_25#1;
+
+ inline$BDLPnPCancelStop$0$label_25#1:
+ havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2139.0$8$;
+ goto inline$BDLPnPCancelStop$0$label_19#1;
+
+ inline$BDLPnPCancelStop$0$label_19#1:
+ goto inline$BDLGetDebugLevel$567$Entry#1;
+
+ inline$BDLGetDebugLevel$567$Entry#1:
+ goto inline$BDLGetDebugLevel$567$start#1;
+
+ inline$BDLGetDebugLevel$567$start#1:
+ goto inline$BDLGetDebugLevel$567$label_3#1;
+
+ inline$BDLGetDebugLevel$567$label_3#1:
+ havoc inline$BDLGetDebugLevel$567$myNondetVar_0;
+ inline$BDLGetDebugLevel$567$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$567$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$567$label_1#1;
+
+ inline$BDLGetDebugLevel$567$label_1#1:
+ goto inline$BDLGetDebugLevel$567$Return#1;
+
+ inline$BDLGetDebugLevel$567$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$ := inline$BDLGetDebugLevel$567$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_19$1#1;
+
+ inline$BDLPnPCancelStop$0$label_19$1#1:
+ goto inline$BDLPnPCancelStop$0$anon24_Then#1, inline$BDLPnPCancelStop$0$anon24_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon24_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon5#1;
+
+ inline$BDLPnPCancelStop$0$anon5#1:
+ goto inline$BDLPnPCancelStop$0$label_28#1;
+
+ inline$BDLPnPCancelStop$0$label_28#1:
+ goto inline$BDLPnPCancelStop$0$label_28_true#1, inline$BDLPnPCancelStop$0$label_28_false#1;
+
+ inline$BDLPnPCancelStop$0$label_28_false#1:
+ assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$, 4) == 0;
+ goto inline$BDLPnPCancelStop$0$label_29#1;
+
+ inline$BDLPnPCancelStop$0$label_28_true#1:
+ assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2139.0$12$, 4) != 0;
+ goto inline$BDLPnPCancelStop$0$label_32#1;
+
+ inline$BDLPnPCancelStop$0$label_32#1:
+ goto inline$BDLPnPCancelStop$0$label_29#1;
+
+ inline$BDLPnPCancelStop$0$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Entry#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$Entry#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPCancelStop$0$$pIrp$3$2134.40$BDLPnPCancelStop$12;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$start#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$start#1:
+ call inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
+ inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_4#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_4#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_6#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_6#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$Entry#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$Entry#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$start#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$start#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_4#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_4#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_5#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_5#1:
+ goto inline$IoGetCurrentIrpStackLocation$112$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetCurrentIrpStackLocation$112$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$start#1:
+ inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$112$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$112$label_3_true#1, inline$IoGetCurrentIrpStackLocation$112$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$112$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$112$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$112$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$112$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$112$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$112$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$112$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$112$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$112$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$112$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$112$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$112$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$112$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$112$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$112$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$112$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$112$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$112$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$112$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$112$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_5$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_5$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$anon1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_8#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_8#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_9#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_9#1:
+ goto inline$IoGetNextIrpStackLocation$11$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$11$Entry#1:
+ inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$5$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetNextIrpStackLocation$11$start#1;
+
+ inline$IoGetNextIrpStackLocation$11$start#1:
+ inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$11$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$11$label_3_true#1, inline$IoGetNextIrpStackLocation$11$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$11$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$11$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_4#1:
+ call inline$IoGetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$11$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_6#1:
+ call inline$IoGetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$11$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$11$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$11$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$11$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$11$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$11$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$11$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$11$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$11$Return#1;
+
+ inline$IoGetNextIrpStackLocation$11$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_9$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_9$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$anon3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$anon3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_12#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_12#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_13#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_13#1:
+ havoc inline$IoCopyCurrentIrpStackLocationToNext$5$$result.memcpy$25110.4$3$;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_16#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_16#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$label_1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$label_1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$anon5_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$anon4_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$5$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_6$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_6$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon16_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_9#1:
+ goto inline$storm_KeInitializeEvent$5$Entry#1;
+
+ inline$storm_KeInitializeEvent$5$Entry#1:
+ inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
+ goto inline$storm_KeInitializeEvent$5$start#1;
+
+ inline$storm_KeInitializeEvent$5$start#1:
+ inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
+ inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12_.1;
+ goto inline$storm_KeInitializeEvent$5$label_3#1;
+
+ inline$storm_KeInitializeEvent$5$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$5$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$5$$State$3$205.13$storm_KeInitializeEvent$12];
+ call contextSwitch();
+ goto inline$storm_KeInitializeEvent$5$label_1#1;
+
+ inline$storm_KeInitializeEvent$5$label_1#1:
+ goto inline$storm_KeInitializeEvent$5$Return#1;
+
+ inline$storm_KeInitializeEvent$5$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_9$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_9$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon17_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_12#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$5$Entry#1;
+
+ inline$storm_IoSetCompletionRoutine$5$Entry#1:
+ inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoSetCompletionRoutine$5$start#1;
+
+ inline$storm_IoSetCompletionRoutine$5$start#1:
+ inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
+ goto inline$storm_IoSetCompletionRoutine$5$label_3#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_3#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_4#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_4#1:
+ call inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$ := storm_nondet();
+ goto inline$storm_IoSetCompletionRoutine$5$label_7#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_7#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_7_true#1, inline$storm_IoSetCompletionRoutine$5$label_7_false#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_7_false#1:
+ assume inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$ == 0;
+ goto inline$storm_IoSetCompletionRoutine$5$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_7_true#1:
+ assume inline$storm_IoSetCompletionRoutine$5$$result.storm_nondet$405.2$1$ != 0;
+ goto inline$storm_IoSetCompletionRoutine$5$label_11#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_11#1:
+ havoc raiseException;
+ goto inline$storm_IoSetCompletionRoutine$5$anon6_Then#1, inline$storm_IoSetCompletionRoutine$5$anon6_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$5$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$5$anon3#1;
+
+ inline$storm_IoSetCompletionRoutine$5$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCompletionRoutine$5$label_12#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_12_true#1, inline$storm_IoSetCompletionRoutine$5$label_12_false#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_12_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoSetCompletionRoutine$5$label_13#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_13#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCompletionRoutine$5$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_12_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoSetCompletionRoutine$5$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_8#1:
+ goto inline$IoGetNextIrpStackLocation$12$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$12$Entry#1:
+ inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$5$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
+ goto inline$IoGetNextIrpStackLocation$12$start#1;
+
+ inline$IoGetNextIrpStackLocation$12$start#1:
+ inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$12$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$12$label_3_true#1, inline$IoGetNextIrpStackLocation$12$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$12$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$12$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_4#1:
+ call inline$IoGetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$12$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_6#1:
+ call inline$IoGetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$12$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$12$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$12$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$12$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$12$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$12$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$12$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$12$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$12$Return#1;
+
+ inline$IoGetNextIrpStackLocation$12$Return#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_8$1#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_8$1#1:
+ goto inline$storm_IoSetCompletionRoutine$5$anon5_Then#1, inline$storm_IoSetCompletionRoutine$5$anon5_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$5$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$5$anon1#1;
+
+ inline$storm_IoSetCompletionRoutine$5$anon1#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_16#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_16#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_17#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_17#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_18#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_18#1:
+ goto inline$storm_IoSetCompletionRoutine$5$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$5$label_1#1:
+ goto inline$storm_IoSetCompletionRoutine$5$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$5$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$5$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$5$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$5$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$5$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_12$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_12$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon18_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_15#1:
+ goto inline$IoGetCurrentIrpStackLocation$113$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoGetCurrentIrpStackLocation$113$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$start#1:
+ inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$113$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$113$label_3_true#1, inline$IoGetCurrentIrpStackLocation$113$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$113$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$113$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$113$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$113$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$113$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$113$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$113$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$113$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$113$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$113$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$113$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$113$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$113$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$113$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$113$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$113$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$113$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$113$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$113$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$113$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_15$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_15$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon19_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon7#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon7#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_18#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_18#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$5$label_18_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_18_false#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_19#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_19#1:
+ goto inline$storm_IoCallDriver$11$Entry#1;
+
+ inline$storm_IoCallDriver$11$Entry#1:
+ inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoCallDriver$11$start#1;
+
+ inline$storm_IoCallDriver$11$start#1:
+ inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$11$label_3#1;
+
+ inline$storm_IoCallDriver$11$label_3#1:
+ goto inline$storm_IoCallDriver$11$label_4#1;
+
+ inline$storm_IoCallDriver$11$label_4#1:
+ goto inline$storm_IoCallDriver$11$label_5#1;
+
+ inline$storm_IoCallDriver$11$label_5#1:
+ goto inline$storm_IoCallDriver$11$label_6#1;
+
+ inline$storm_IoCallDriver$11$label_6#1:
+ call inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$11$label_9#1;
+
+ inline$storm_IoCallDriver$11$label_9#1:
+ goto inline$storm_IoCallDriver$11$label_9_true#1, inline$storm_IoCallDriver$11$label_9_false#1;
+
+ inline$storm_IoCallDriver$11$label_9_false#1:
+ assume inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$11$label_10#1;
+
+ inline$storm_IoCallDriver$11$label_9_true#1:
+ assume inline$storm_IoCallDriver$11$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$11$label_13#1;
+
+ inline$storm_IoCallDriver$11$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$11$anon12_Then#1, inline$storm_IoCallDriver$11$anon12_Else#1;
+
+ inline$storm_IoCallDriver$11$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$11$anon3#1;
+
+ inline$storm_IoCallDriver$11$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$11$label_14#1;
+
+ inline$storm_IoCallDriver$11$label_14#1:
+ goto inline$storm_IoCallDriver$11$label_14_true#1, inline$storm_IoCallDriver$11$label_14_false#1;
+
+ inline$storm_IoCallDriver$11$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$11$label_15#1;
+
+ inline$storm_IoCallDriver$11$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$11$label_1#1;
+
+ inline$storm_IoCallDriver$11$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$11$label_10#1;
+
+ inline$storm_IoCallDriver$11$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$12$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$12$Entry#1:
+ inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$12$start#1;
+
+ inline$IoSetNextIrpStackLocation$12$start#1:
+ inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$12$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$12$label_3_true#1, inline$IoSetNextIrpStackLocation$12$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$12$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$12$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_4#1:
+ call inline$IoSetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$12$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_7#1:
+ call inline$IoSetNextIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$12$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$12$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$12$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$12$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_5#1:
+ inline$IoSetNextIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$12$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$12$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$12$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$12$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$12$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$12$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$12$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$12$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$12$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$12$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$12$Return#1;
+
+ inline$IoSetNextIrpStackLocation$12$Return#1:
+ goto inline$storm_IoCallDriver$11$label_10$1#1;
+
+ inline$storm_IoCallDriver$11$label_10$1#1:
+ goto inline$storm_IoCallDriver$11$anon11_Then#1, inline$storm_IoCallDriver$11$anon11_Else#1;
+
+ inline$storm_IoCallDriver$11$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$11$anon1#1;
+
+ inline$storm_IoCallDriver$11$anon1#1:
+ goto inline$storm_IoCallDriver$11$label_18#1;
+
+ inline$storm_IoCallDriver$11$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$114$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$114$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$start#1:
+ inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$114$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$114$label_3_true#1, inline$IoGetCurrentIrpStackLocation$114$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$114$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$114$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$114$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$114$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$114$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$114$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$114$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$114$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$114$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$114$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$114$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$114$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$114$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$114$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$114$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$114$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$114$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$114$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$114$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$114$Return#1:
+ goto inline$storm_IoCallDriver$11$label_18$1#1;
+
+ inline$storm_IoCallDriver$11$label_18$1#1:
+ goto inline$storm_IoCallDriver$11$anon13_Then#1, inline$storm_IoCallDriver$11$anon13_Else#1;
+
+ inline$storm_IoCallDriver$11$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$11$anon6#1;
+
+ inline$storm_IoCallDriver$11$anon6#1:
+ goto inline$storm_IoCallDriver$11$label_21#1;
+
+ inline$storm_IoCallDriver$11$label_21#1:
+ goto inline$storm_IoCallDriver$11$label_22#1;
+
+ inline$storm_IoCallDriver$11$label_22#1:
+ goto inline$storm_IoCallDriver$11$label_23#1;
+
+ inline$storm_IoCallDriver$11$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$11$label_24#1;
+
+ inline$storm_IoCallDriver$11$label_24#1:
+ call inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$11$label_27#1;
+
+ inline$storm_IoCallDriver$11$label_27#1:
+ goto inline$storm_IoCallDriver$11$label_27_case_0#1, inline$storm_IoCallDriver$11$label_27_case_1#1, inline$storm_IoCallDriver$11$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$11$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$11$label_30#1;
+
+ inline$storm_IoCallDriver$11$label_30#1:
+ inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$11$label_31#1;
+
+ inline$storm_IoCallDriver$11$label_31#1:
+ goto inline$storm_IoCallDriver$11$label_32#1;
+
+ inline$storm_IoCallDriver$11$label_32#1:
+ goto inline$storm_IoCallDriver$11$label_33#1;
+
+ inline$storm_IoCallDriver$11$label_33#1:
+ goto inline$CallCompletionRoutine$22$Entry#1;
+
+ inline$CallCompletionRoutine$22$Entry#1:
+ inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$22$start#1;
+
+ inline$CallCompletionRoutine$22$start#1:
+ inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$22$label_3#1;
+
+ inline$CallCompletionRoutine$22$label_3#1:
+ goto inline$CallCompletionRoutine$22$label_4#1;
+
+ inline$CallCompletionRoutine$22$label_4#1:
+ goto inline$CallCompletionRoutine$22$label_5#1;
+
+ inline$CallCompletionRoutine$22$label_5#1:
+ goto inline$CallCompletionRoutine$22$label_6#1;
+
+ inline$CallCompletionRoutine$22$label_6#1:
+ goto inline$CallCompletionRoutine$22$label_7#1;
+
+ inline$CallCompletionRoutine$22$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$115$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$115$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$start#1:
+ inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$115$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$115$label_3_true#1, inline$IoGetCurrentIrpStackLocation$115$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$115$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$115$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$115$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$115$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$115$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$115$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$115$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$115$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$115$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$115$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$115$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$115$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$115$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$115$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$115$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$115$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$115$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$115$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$115$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$115$Return#1:
+ goto inline$CallCompletionRoutine$22$label_7$1#1;
+
+ inline$CallCompletionRoutine$22$label_7$1#1:
+ goto inline$CallCompletionRoutine$22$anon10_Then#1, inline$CallCompletionRoutine$22$anon10_Else#1;
+
+ inline$CallCompletionRoutine$22$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$22$anon1#1;
+
+ inline$CallCompletionRoutine$22$anon1#1:
+ goto inline$CallCompletionRoutine$22$label_10#1;
+
+ inline$CallCompletionRoutine$22$label_10#1:
+ goto inline$CallCompletionRoutine$22$label_11#1;
+
+ inline$CallCompletionRoutine$22$label_11#1:
+ havoc inline$CallCompletionRoutine$22$myNondetVar_0;
+ inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$myNondetVar_0;
+ goto inline$CallCompletionRoutine$22$label_12#1;
+
+ inline$CallCompletionRoutine$22$label_12#1:
+ havoc inline$CallCompletionRoutine$22$myNondetVar_0;
+ inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$myNondetVar_0;
+ goto inline$CallCompletionRoutine$22$label_13#1;
+
+ inline$CallCompletionRoutine$22$label_13#1:
+ havoc inline$CallCompletionRoutine$22$myNondetVar_0;
+ goto inline$CallCompletionRoutine$22$label_14#1;
+
+ inline$CallCompletionRoutine$22$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$116$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$116$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$start#1:
+ inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$116$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$116$label_3_true#1, inline$IoGetCurrentIrpStackLocation$116$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$116$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$116$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$116$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$116$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$116$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$116$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$116$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$116$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$116$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$116$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$116$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$116$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$116$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$116$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$116$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$116$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$116$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$116$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$116$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$116$Return#1:
+ goto inline$CallCompletionRoutine$22$label_14$1#1;
+
+ inline$CallCompletionRoutine$22$label_14$1#1:
+ goto inline$CallCompletionRoutine$22$anon11_Then#1, inline$CallCompletionRoutine$22$anon11_Else#1;
+
+ inline$CallCompletionRoutine$22$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$22$anon3#1;
+
+ inline$CallCompletionRoutine$22$anon3#1:
+ goto inline$CallCompletionRoutine$22$label_17#1;
+
+ inline$CallCompletionRoutine$22$label_17#1:
+ goto inline$CallCompletionRoutine$22$label_18#1;
+
+ inline$CallCompletionRoutine$22$label_18#1:
+ goto inline$CallCompletionRoutine$22$label_18_true#1, inline$CallCompletionRoutine$22$label_18_false#1;
+
+ inline$CallCompletionRoutine$22$label_18_false#1:
+ assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$22$label_1#1;
+
+ inline$CallCompletionRoutine$22$label_18_true#1:
+ assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$22$label_19#1;
+
+ inline$CallCompletionRoutine$22$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$22$label_20#1;
+
+ inline$CallCompletionRoutine$22$label_20#1:
+ goto inline$CallCompletionRoutine$22$label_20_icall_1#1, inline$CallCompletionRoutine$22$label_20_icall_2#1, inline$CallCompletionRoutine$22$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$22$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$22$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$22$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$22$Entry#1:
+ inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$22$start#1;
+
+ inline$BDLSystemPowerIoCompletion$22$start#1:
+ call inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$22$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_4#1:
+ inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_6#1:
+ inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$22$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$22$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$118$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$118$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$start#1:
+ inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$118$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$118$label_3_true#1, inline$IoGetCurrentIrpStackLocation$118$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$118$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$118$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$118$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$118$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$118$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$118$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$118$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$118$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$118$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$118$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$118$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$118$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$118$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$118$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$118$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$118$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$118$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$118$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$118$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$118$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon36_Then#1, inline$BDLSystemPowerIoCompletion$22$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_15#1:
+ goto inline$BDLGetDebugLevel$577$Entry#1;
+
+ inline$BDLGetDebugLevel$577$Entry#1:
+ goto inline$BDLGetDebugLevel$577$start#1;
+
+ inline$BDLGetDebugLevel$577$start#1:
+ goto inline$BDLGetDebugLevel$577$label_3#1;
+
+ inline$BDLGetDebugLevel$577$label_3#1:
+ havoc inline$BDLGetDebugLevel$577$myNondetVar_0;
+ inline$BDLGetDebugLevel$577$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$577$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$577$label_1#1;
+
+ inline$BDLGetDebugLevel$577$label_1#1:
+ goto inline$BDLGetDebugLevel$577$Return#1;
+
+ inline$BDLGetDebugLevel$577$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$577$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon37_Then#1, inline$BDLSystemPowerIoCompletion$22$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_18_true#1, inline$BDLSystemPowerIoCompletion$22$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_19#1:
+ goto inline$BDLGetDebugLevel$578$Entry#1;
+
+ inline$BDLGetDebugLevel$578$Entry#1:
+ goto inline$BDLGetDebugLevel$578$start#1;
+
+ inline$BDLGetDebugLevel$578$start#1:
+ goto inline$BDLGetDebugLevel$578$label_3#1;
+
+ inline$BDLGetDebugLevel$578$label_3#1:
+ havoc inline$BDLGetDebugLevel$578$myNondetVar_0;
+ inline$BDLGetDebugLevel$578$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$578$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$578$label_1#1;
+
+ inline$BDLGetDebugLevel$578$label_1#1:
+ goto inline$BDLGetDebugLevel$578$Return#1;
+
+ inline$BDLGetDebugLevel$578$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$578$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon38_Then#1, inline$BDLSystemPowerIoCompletion$22$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_28_true#1, inline$BDLSystemPowerIoCompletion$22$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_29#1:
+ goto inline$BDLGetDebugLevel$579$Entry#1;
+
+ inline$BDLGetDebugLevel$579$Entry#1:
+ goto inline$BDLGetDebugLevel$579$start#1;
+
+ inline$BDLGetDebugLevel$579$start#1:
+ goto inline$BDLGetDebugLevel$579$label_3#1;
+
+ inline$BDLGetDebugLevel$579$label_3#1:
+ havoc inline$BDLGetDebugLevel$579$myNondetVar_0;
+ inline$BDLGetDebugLevel$579$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$579$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$579$label_1#1;
+
+ inline$BDLGetDebugLevel$579$label_1#1:
+ goto inline$BDLGetDebugLevel$579$Return#1;
+
+ inline$BDLGetDebugLevel$579$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$579$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon39_Then#1, inline$BDLSystemPowerIoCompletion$22$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_38_true#1, inline$BDLSystemPowerIoCompletion$22$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_39_true#1, inline$BDLSystemPowerIoCompletion$22$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$22$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$22$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$22$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$22$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$22$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_106_true#1, inline$BDLSystemPowerIoCompletion$22$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$22$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$22$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$22$myNondetVar_0, inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$22$anon50_Then#1, inline$BDLSystemPowerIoCompletion$22$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_112#1:
+ inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_113_true#1, inline$BDLSystemPowerIoCompletion$22$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$22$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_117#1:
+ goto inline$BDLGetDebugLevel$586$Entry#1;
+
+ inline$BDLGetDebugLevel$586$Entry#1:
+ goto inline$BDLGetDebugLevel$586$start#1;
+
+ inline$BDLGetDebugLevel$586$start#1:
+ goto inline$BDLGetDebugLevel$586$label_3#1;
+
+ inline$BDLGetDebugLevel$586$label_3#1:
+ havoc inline$BDLGetDebugLevel$586$myNondetVar_0;
+ inline$BDLGetDebugLevel$586$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$586$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$586$label_1#1;
+
+ inline$BDLGetDebugLevel$586$label_1#1:
+ goto inline$BDLGetDebugLevel$586$Return#1;
+
+ inline$BDLGetDebugLevel$586$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$586$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon51_Then#1, inline$BDLSystemPowerIoCompletion$22$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_120_true#1, inline$BDLSystemPowerIoCompletion$22$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_121#1:
+ goto inline$BDLGetDebugLevel$587$Entry#1;
+
+ inline$BDLGetDebugLevel$587$Entry#1:
+ goto inline$BDLGetDebugLevel$587$start#1;
+
+ inline$BDLGetDebugLevel$587$start#1:
+ goto inline$BDLGetDebugLevel$587$label_3#1;
+
+ inline$BDLGetDebugLevel$587$label_3#1:
+ havoc inline$BDLGetDebugLevel$587$myNondetVar_0;
+ inline$BDLGetDebugLevel$587$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$587$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$587$label_1#1;
+
+ inline$BDLGetDebugLevel$587$label_1#1:
+ goto inline$BDLGetDebugLevel$587$Return#1;
+
+ inline$BDLGetDebugLevel$587$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$587$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon52_Then#1, inline$BDLSystemPowerIoCompletion$22$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_130_true#1, inline$BDLSystemPowerIoCompletion$22$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_131#1:
+ goto inline$BDLGetDebugLevel$588$Entry#1;
+
+ inline$BDLGetDebugLevel$588$Entry#1:
+ goto inline$BDLGetDebugLevel$588$start#1;
+
+ inline$BDLGetDebugLevel$588$start#1:
+ goto inline$BDLGetDebugLevel$588$label_3#1;
+
+ inline$BDLGetDebugLevel$588$label_3#1:
+ havoc inline$BDLGetDebugLevel$588$myNondetVar_0;
+ inline$BDLGetDebugLevel$588$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$588$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$588$label_1#1;
+
+ inline$BDLGetDebugLevel$588$label_1#1:
+ goto inline$BDLGetDebugLevel$588$Return#1;
+
+ inline$BDLGetDebugLevel$588$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$588$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon53_Then#1, inline$BDLSystemPowerIoCompletion$22$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_140_true#1, inline$BDLSystemPowerIoCompletion$22$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$22$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_115#1:
+ inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$22$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$22$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$22$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_43#1:
+ goto inline$BDLGetDebugLevel$580$Entry#1;
+
+ inline$BDLGetDebugLevel$580$Entry#1:
+ goto inline$BDLGetDebugLevel$580$start#1;
+
+ inline$BDLGetDebugLevel$580$start#1:
+ goto inline$BDLGetDebugLevel$580$label_3#1;
+
+ inline$BDLGetDebugLevel$580$label_3#1:
+ havoc inline$BDLGetDebugLevel$580$myNondetVar_0;
+ inline$BDLGetDebugLevel$580$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$580$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$580$label_1#1;
+
+ inline$BDLGetDebugLevel$580$label_1#1:
+ goto inline$BDLGetDebugLevel$580$Return#1;
+
+ inline$BDLGetDebugLevel$580$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$580$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon40_Then#1, inline$BDLSystemPowerIoCompletion$22$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_46_true#1, inline$BDLSystemPowerIoCompletion$22$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_47#1:
+ goto inline$BDLGetDebugLevel$581$Entry#1;
+
+ inline$BDLGetDebugLevel$581$Entry#1:
+ goto inline$BDLGetDebugLevel$581$start#1;
+
+ inline$BDLGetDebugLevel$581$start#1:
+ goto inline$BDLGetDebugLevel$581$label_3#1;
+
+ inline$BDLGetDebugLevel$581$label_3#1:
+ havoc inline$BDLGetDebugLevel$581$myNondetVar_0;
+ inline$BDLGetDebugLevel$581$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$581$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$581$label_1#1;
+
+ inline$BDLGetDebugLevel$581$label_1#1:
+ goto inline$BDLGetDebugLevel$581$Return#1;
+
+ inline$BDLGetDebugLevel$581$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$581$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon41_Then#1, inline$BDLSystemPowerIoCompletion$22$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_56_true#1, inline$BDLSystemPowerIoCompletion$22$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_57#1:
+ goto inline$BDLGetDebugLevel$582$Entry#1;
+
+ inline$BDLGetDebugLevel$582$Entry#1:
+ goto inline$BDLGetDebugLevel$582$start#1;
+
+ inline$BDLGetDebugLevel$582$start#1:
+ goto inline$BDLGetDebugLevel$582$label_3#1;
+
+ inline$BDLGetDebugLevel$582$label_3#1:
+ havoc inline$BDLGetDebugLevel$582$myNondetVar_0;
+ inline$BDLGetDebugLevel$582$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$582$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$582$label_1#1;
+
+ inline$BDLGetDebugLevel$582$label_1#1:
+ goto inline$BDLGetDebugLevel$582$Return#1;
+
+ inline$BDLGetDebugLevel$582$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$582$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon42_Then#1, inline$BDLSystemPowerIoCompletion$22$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_66_true#1, inline$BDLSystemPowerIoCompletion$22$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$22$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$22$anon43_Then#1, inline$BDLSystemPowerIoCompletion$22$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$22$anon44_Then#1, inline$BDLSystemPowerIoCompletion$22$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_74#1:
+ goto inline$storm_IoCompleteRequest$46$Entry#1;
+
+ inline$storm_IoCompleteRequest$46$Entry#1:
+ inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$22$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$46$start#1;
+
+ inline$storm_IoCompleteRequest$46$start#1:
+ inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$46$label_3#1;
+
+ inline$storm_IoCompleteRequest$46$label_3#1:
+ call inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$46$label_6#1;
+
+ inline$storm_IoCompleteRequest$46$label_6#1:
+ goto inline$storm_IoCompleteRequest$46$label_6_true#1, inline$storm_IoCompleteRequest$46$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$46$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$46$label_7#1;
+
+ inline$storm_IoCompleteRequest$46$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$46$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$46$label_8#1;
+
+ inline$storm_IoCompleteRequest$46$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$46$anon3_Then#1, inline$storm_IoCompleteRequest$46$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$46$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$46$anon1#1;
+
+ inline$storm_IoCompleteRequest$46$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$46$label_9#1;
+
+ inline$storm_IoCompleteRequest$46$label_9#1:
+ goto inline$storm_IoCompleteRequest$46$label_9_true#1, inline$storm_IoCompleteRequest$46$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$46$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$46$label_10#1;
+
+ inline$storm_IoCompleteRequest$46$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$46$label_1#1;
+
+ inline$storm_IoCompleteRequest$46$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$46$label_7#1;
+
+ inline$storm_IoCompleteRequest$46$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$46$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$46$label_1#1;
+
+ inline$storm_IoCompleteRequest$46$label_1#1:
+ goto inline$storm_IoCompleteRequest$46$Return#1;
+
+ inline$storm_IoCompleteRequest$46$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$46$Return#1;
+
+ inline$storm_IoCompleteRequest$46$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon45_Then#1, inline$BDLSystemPowerIoCompletion$22$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$22$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$22$anon46_Then#1, inline$BDLSystemPowerIoCompletion$22$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_80#1:
+ goto inline$BDLGetDebugLevel$583$Entry#1;
+
+ inline$BDLGetDebugLevel$583$Entry#1:
+ goto inline$BDLGetDebugLevel$583$start#1;
+
+ inline$BDLGetDebugLevel$583$start#1:
+ goto inline$BDLGetDebugLevel$583$label_3#1;
+
+ inline$BDLGetDebugLevel$583$label_3#1:
+ havoc inline$BDLGetDebugLevel$583$myNondetVar_0;
+ inline$BDLGetDebugLevel$583$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$583$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$583$label_1#1;
+
+ inline$BDLGetDebugLevel$583$label_1#1:
+ goto inline$BDLGetDebugLevel$583$Return#1;
+
+ inline$BDLGetDebugLevel$583$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$583$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon47_Then#1, inline$BDLSystemPowerIoCompletion$22$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_83_true#1, inline$BDLSystemPowerIoCompletion$22$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_84#1:
+ goto inline$BDLGetDebugLevel$584$Entry#1;
+
+ inline$BDLGetDebugLevel$584$Entry#1:
+ goto inline$BDLGetDebugLevel$584$start#1;
+
+ inline$BDLGetDebugLevel$584$start#1:
+ goto inline$BDLGetDebugLevel$584$label_3#1;
+
+ inline$BDLGetDebugLevel$584$label_3#1:
+ havoc inline$BDLGetDebugLevel$584$myNondetVar_0;
+ inline$BDLGetDebugLevel$584$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$584$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$584$label_1#1;
+
+ inline$BDLGetDebugLevel$584$label_1#1:
+ goto inline$BDLGetDebugLevel$584$Return#1;
+
+ inline$BDLGetDebugLevel$584$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$584$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon48_Then#1, inline$BDLSystemPowerIoCompletion$22$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_93_true#1, inline$BDLSystemPowerIoCompletion$22$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$22$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$22$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_94#1:
+ goto inline$BDLGetDebugLevel$585$Entry#1;
+
+ inline$BDLGetDebugLevel$585$Entry#1:
+ goto inline$BDLGetDebugLevel$585$start#1;
+
+ inline$BDLGetDebugLevel$585$start#1:
+ goto inline$BDLGetDebugLevel$585$label_3#1;
+
+ inline$BDLGetDebugLevel$585$label_3#1:
+ havoc inline$BDLGetDebugLevel$585$myNondetVar_0;
+ inline$BDLGetDebugLevel$585$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$585$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$585$label_1#1;
+
+ inline$BDLGetDebugLevel$585$label_1#1:
+ goto inline$BDLGetDebugLevel$585$Return#1;
+
+ inline$BDLGetDebugLevel$585$Return#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$585$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$22$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$22$anon49_Then#1, inline$BDLSystemPowerIoCompletion$22$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_103_true#1, inline$BDLSystemPowerIoCompletion$22$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$22$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$22$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$22$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_104#1:
+ inline$BDLSystemPowerIoCompletion$22$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$22$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$22$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$22$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$22$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$22$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$22$Return#1:
+ inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$22$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$22$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$22$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$22$anon14_Then#1, inline$CallCompletionRoutine$22$anon14_Else#1;
+
+ inline$CallCompletionRoutine$22$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$22$anon9#1;
+
+ inline$CallCompletionRoutine$22$anon9#1:
+ goto inline$CallCompletionRoutine$22$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$22$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$22$Return#1;
+
+ inline$CallCompletionRoutine$22$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$22$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$22$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$22$Entry#1:
+ inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$22$start#1;
+
+ inline$BDLDevicePowerIoCompletion$22$start#1:
+ call inline$BDLDevicePowerIoCompletion$22$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$22$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_4#1:
+ inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_6#1:
+ inline$BDLDevicePowerIoCompletion$22$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$22$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$22$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$117$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$117$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$start#1:
+ inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$117$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$117$label_3_true#1, inline$IoGetCurrentIrpStackLocation$117$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$117$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$117$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$117$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$117$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$117$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$117$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$117$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$117$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$117$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$117$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$117$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$117$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$117$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$117$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$117$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$117$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$117$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$117$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$117$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$117$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$117$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$117$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$117$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon30_Then#1, inline$BDLDevicePowerIoCompletion$22$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_13#1:
+ inline$BDLDevicePowerIoCompletion$22$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_17#1:
+ goto inline$BDLGetDebugLevel$568$Entry#1;
+
+ inline$BDLGetDebugLevel$568$Entry#1:
+ goto inline$BDLGetDebugLevel$568$start#1;
+
+ inline$BDLGetDebugLevel$568$start#1:
+ goto inline$BDLGetDebugLevel$568$label_3#1;
+
+ inline$BDLGetDebugLevel$568$label_3#1:
+ havoc inline$BDLGetDebugLevel$568$myNondetVar_0;
+ inline$BDLGetDebugLevel$568$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$568$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$568$label_1#1;
+
+ inline$BDLGetDebugLevel$568$label_1#1:
+ goto inline$BDLGetDebugLevel$568$Return#1;
+
+ inline$BDLGetDebugLevel$568$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$568$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon31_Then#1, inline$BDLDevicePowerIoCompletion$22$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_20_true#1, inline$BDLDevicePowerIoCompletion$22$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_21#1:
+ goto inline$BDLGetDebugLevel$569$Entry#1;
+
+ inline$BDLGetDebugLevel$569$Entry#1:
+ goto inline$BDLGetDebugLevel$569$start#1;
+
+ inline$BDLGetDebugLevel$569$start#1:
+ goto inline$BDLGetDebugLevel$569$label_3#1;
+
+ inline$BDLGetDebugLevel$569$label_3#1:
+ havoc inline$BDLGetDebugLevel$569$myNondetVar_0;
+ inline$BDLGetDebugLevel$569$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$569$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$569$label_1#1;
+
+ inline$BDLGetDebugLevel$569$label_1#1:
+ goto inline$BDLGetDebugLevel$569$Return#1;
+
+ inline$BDLGetDebugLevel$569$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$569$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon32_Then#1, inline$BDLDevicePowerIoCompletion$22$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_30_true#1, inline$BDLDevicePowerIoCompletion$22$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_31#1:
+ goto inline$BDLGetDebugLevel$570$Entry#1;
+
+ inline$BDLGetDebugLevel$570$Entry#1:
+ goto inline$BDLGetDebugLevel$570$start#1;
+
+ inline$BDLGetDebugLevel$570$start#1:
+ goto inline$BDLGetDebugLevel$570$label_3#1;
+
+ inline$BDLGetDebugLevel$570$label_3#1:
+ havoc inline$BDLGetDebugLevel$570$myNondetVar_0;
+ inline$BDLGetDebugLevel$570$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$570$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$570$label_1#1;
+
+ inline$BDLGetDebugLevel$570$label_1#1:
+ goto inline$BDLGetDebugLevel$570$Return#1;
+
+ inline$BDLGetDebugLevel$570$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$570$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon33_Then#1, inline$BDLDevicePowerIoCompletion$22$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_40_true#1, inline$BDLDevicePowerIoCompletion$22$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_41_true#1, inline$BDLDevicePowerIoCompletion$22$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$22$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$22$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_44_true#1, inline$BDLDevicePowerIoCompletion$22$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_45_true#1, inline$BDLDevicePowerIoCompletion$22$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$22$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$22$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$22$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_54#1:
+ inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$22$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_55_true#1, inline$BDLDevicePowerIoCompletion$22$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$22$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$22$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$22$anon34_Then#1, inline$BDLDevicePowerIoCompletion$22$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_59#1:
+ goto inline$BDLGetDebugLevel$571$Entry#1;
+
+ inline$BDLGetDebugLevel$571$Entry#1:
+ goto inline$BDLGetDebugLevel$571$start#1;
+
+ inline$BDLGetDebugLevel$571$start#1:
+ goto inline$BDLGetDebugLevel$571$label_3#1;
+
+ inline$BDLGetDebugLevel$571$label_3#1:
+ havoc inline$BDLGetDebugLevel$571$myNondetVar_0;
+ inline$BDLGetDebugLevel$571$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$571$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$571$label_1#1;
+
+ inline$BDLGetDebugLevel$571$label_1#1:
+ goto inline$BDLGetDebugLevel$571$Return#1;
+
+ inline$BDLGetDebugLevel$571$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$571$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon35_Then#1, inline$BDLDevicePowerIoCompletion$22$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_62_true#1, inline$BDLDevicePowerIoCompletion$22$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_63#1:
+ goto inline$BDLGetDebugLevel$572$Entry#1;
+
+ inline$BDLGetDebugLevel$572$Entry#1:
+ goto inline$BDLGetDebugLevel$572$start#1;
+
+ inline$BDLGetDebugLevel$572$start#1:
+ goto inline$BDLGetDebugLevel$572$label_3#1;
+
+ inline$BDLGetDebugLevel$572$label_3#1:
+ havoc inline$BDLGetDebugLevel$572$myNondetVar_0;
+ inline$BDLGetDebugLevel$572$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$572$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$572$label_1#1;
+
+ inline$BDLGetDebugLevel$572$label_1#1:
+ goto inline$BDLGetDebugLevel$572$Return#1;
+
+ inline$BDLGetDebugLevel$572$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$572$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon36_Then#1, inline$BDLDevicePowerIoCompletion$22$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_72_true#1, inline$BDLDevicePowerIoCompletion$22$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_73#1:
+ goto inline$BDLGetDebugLevel$573$Entry#1;
+
+ inline$BDLGetDebugLevel$573$Entry#1:
+ goto inline$BDLGetDebugLevel$573$start#1;
+
+ inline$BDLGetDebugLevel$573$start#1:
+ goto inline$BDLGetDebugLevel$573$label_3#1;
+
+ inline$BDLGetDebugLevel$573$label_3#1:
+ havoc inline$BDLGetDebugLevel$573$myNondetVar_0;
+ inline$BDLGetDebugLevel$573$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$573$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$573$label_1#1;
+
+ inline$BDLGetDebugLevel$573$label_1#1:
+ goto inline$BDLGetDebugLevel$573$Return#1;
+
+ inline$BDLGetDebugLevel$573$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$573$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon37_Then#1, inline$BDLDevicePowerIoCompletion$22$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_82_true#1, inline$BDLDevicePowerIoCompletion$22$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$22$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$22$anon38_Then#1, inline$BDLDevicePowerIoCompletion$22$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$22$anon39_Then#1, inline$BDLDevicePowerIoCompletion$22$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_92#1:
+ goto inline$storm_IoCompleteRequest$45$Entry#1;
+
+ inline$storm_IoCompleteRequest$45$Entry#1:
+ inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$22$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$45$start#1;
+
+ inline$storm_IoCompleteRequest$45$start#1:
+ inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$45$label_3#1;
+
+ inline$storm_IoCompleteRequest$45$label_3#1:
+ call inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$45$label_6#1;
+
+ inline$storm_IoCompleteRequest$45$label_6#1:
+ goto inline$storm_IoCompleteRequest$45$label_6_true#1, inline$storm_IoCompleteRequest$45$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$45$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$45$label_7#1;
+
+ inline$storm_IoCompleteRequest$45$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$45$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$45$label_8#1;
+
+ inline$storm_IoCompleteRequest$45$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$45$anon3_Then#1, inline$storm_IoCompleteRequest$45$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$45$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$45$anon1#1;
+
+ inline$storm_IoCompleteRequest$45$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$45$label_9#1;
+
+ inline$storm_IoCompleteRequest$45$label_9#1:
+ goto inline$storm_IoCompleteRequest$45$label_9_true#1, inline$storm_IoCompleteRequest$45$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$45$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$45$label_10#1;
+
+ inline$storm_IoCompleteRequest$45$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$45$label_1#1;
+
+ inline$storm_IoCompleteRequest$45$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$45$label_7#1;
+
+ inline$storm_IoCompleteRequest$45$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$45$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$45$label_1#1;
+
+ inline$storm_IoCompleteRequest$45$label_1#1:
+ goto inline$storm_IoCompleteRequest$45$Return#1;
+
+ inline$storm_IoCompleteRequest$45$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$45$Return#1;
+
+ inline$storm_IoCompleteRequest$45$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon40_Then#1, inline$BDLDevicePowerIoCompletion$22$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$22$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$22$anon41_Then#1, inline$BDLDevicePowerIoCompletion$22$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_98#1:
+ goto inline$BDLGetDebugLevel$574$Entry#1;
+
+ inline$BDLGetDebugLevel$574$Entry#1:
+ goto inline$BDLGetDebugLevel$574$start#1;
+
+ inline$BDLGetDebugLevel$574$start#1:
+ goto inline$BDLGetDebugLevel$574$label_3#1;
+
+ inline$BDLGetDebugLevel$574$label_3#1:
+ havoc inline$BDLGetDebugLevel$574$myNondetVar_0;
+ inline$BDLGetDebugLevel$574$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$574$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$574$label_1#1;
+
+ inline$BDLGetDebugLevel$574$label_1#1:
+ goto inline$BDLGetDebugLevel$574$Return#1;
+
+ inline$BDLGetDebugLevel$574$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$574$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon42_Then#1, inline$BDLDevicePowerIoCompletion$22$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_101_true#1, inline$BDLDevicePowerIoCompletion$22$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_102#1:
+ goto inline$BDLGetDebugLevel$575$Entry#1;
+
+ inline$BDLGetDebugLevel$575$Entry#1:
+ goto inline$BDLGetDebugLevel$575$start#1;
+
+ inline$BDLGetDebugLevel$575$start#1:
+ goto inline$BDLGetDebugLevel$575$label_3#1;
+
+ inline$BDLGetDebugLevel$575$label_3#1:
+ havoc inline$BDLGetDebugLevel$575$myNondetVar_0;
+ inline$BDLGetDebugLevel$575$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$575$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$575$label_1#1;
+
+ inline$BDLGetDebugLevel$575$label_1#1:
+ goto inline$BDLGetDebugLevel$575$Return#1;
+
+ inline$BDLGetDebugLevel$575$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$575$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon43_Then#1, inline$BDLDevicePowerIoCompletion$22$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_111_true#1, inline$BDLDevicePowerIoCompletion$22$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$22$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$22$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_112#1:
+ goto inline$BDLGetDebugLevel$576$Entry#1;
+
+ inline$BDLGetDebugLevel$576$Entry#1:
+ goto inline$BDLGetDebugLevel$576$start#1;
+
+ inline$BDLGetDebugLevel$576$start#1:
+ goto inline$BDLGetDebugLevel$576$label_3#1;
+
+ inline$BDLGetDebugLevel$576$label_3#1:
+ havoc inline$BDLGetDebugLevel$576$myNondetVar_0;
+ inline$BDLGetDebugLevel$576$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$576$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$576$label_1#1;
+
+ inline$BDLGetDebugLevel$576$label_1#1:
+ goto inline$BDLGetDebugLevel$576$Return#1;
+
+ inline$BDLGetDebugLevel$576$Return#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$576$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$22$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$22$anon44_Then#1, inline$BDLDevicePowerIoCompletion$22$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_121_true#1, inline$BDLDevicePowerIoCompletion$22$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$22$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$22$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$22$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_122#1:
+ inline$BDLDevicePowerIoCompletion$22$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$22$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$22$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$22$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$22$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$22$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$22$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$22$Return#1:
+ inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$22$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$22$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$22$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$22$anon13_Then#1, inline$CallCompletionRoutine$22$anon13_Else#1;
+
+ inline$CallCompletionRoutine$22$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$22$anon7#1;
+
+ inline$CallCompletionRoutine$22$anon7#1:
+ goto inline$CallCompletionRoutine$22$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$22$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$22$Return#1;
+
+ inline$CallCompletionRoutine$22$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$22$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$22$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$22$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$22$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$22$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$start#1:
+ inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$22$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$22$label_3_true#1, inline$BDLCallDriverCompletionRoutine$22$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$22$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$22$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$22$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$22$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$22$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_6#1:
+ goto inline$storm_KeSetEvent$24$Entry#1;
+
+ inline$storm_KeSetEvent$24$Entry#1:
+ inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$22$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$24$start#1;
+
+ inline$storm_KeSetEvent$24$start#1:
+ inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$24$label_3#1;
+
+ inline$storm_KeSetEvent$24$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$24$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$24$label_1#1;
+
+ inline$storm_KeSetEvent$24$label_1#1:
+ goto inline$storm_KeSetEvent$24$Return#1;
+
+ inline$storm_KeSetEvent$24$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$22$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$22$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$22$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$22$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$22$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$22$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$22$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$22$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$22$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$22$Return#1:
+ inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$22$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$22$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$22$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$22$anon12_Then#1, inline$CallCompletionRoutine$22$anon12_Else#1;
+
+ inline$CallCompletionRoutine$22$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$22$anon5#1;
+
+ inline$CallCompletionRoutine$22$anon5#1:
+ goto inline$CallCompletionRoutine$22$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$22$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$22$label_23#1;
+
+ inline$CallCompletionRoutine$22$label_23#1:
+ inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$22$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$22$label_24#1;
+
+ inline$CallCompletionRoutine$22$label_24#1:
+ goto inline$CallCompletionRoutine$22$label_24_true#1, inline$CallCompletionRoutine$22$label_24_false#1;
+
+ inline$CallCompletionRoutine$22$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$22$label_1#1;
+
+ inline$CallCompletionRoutine$22$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$22$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$22$label_25#1;
+
+ inline$CallCompletionRoutine$22$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$22$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$22$label_1#1;
+
+ inline$CallCompletionRoutine$22$label_1#1:
+ goto inline$CallCompletionRoutine$22$Return#1;
+
+ inline$CallCompletionRoutine$22$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$22$Return#1;
+
+ inline$CallCompletionRoutine$22$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$22$Return#1;
+
+ inline$CallCompletionRoutine$22$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$22$Return#1;
+
+ inline$CallCompletionRoutine$22$Return#1:
+ goto inline$storm_IoCallDriver$11$label_33$1#1;
+
+ inline$storm_IoCallDriver$11$label_33$1#1:
+ goto inline$storm_IoCallDriver$11$anon14_Then#1, inline$storm_IoCallDriver$11$anon14_Else#1;
+
+ inline$storm_IoCallDriver$11$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$11$anon8#1;
+
+ inline$storm_IoCallDriver$11$anon8#1:
+ goto inline$storm_IoCallDriver$11$label_36#1;
+
+ inline$storm_IoCallDriver$11$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$11$Return#1;
+
+ inline$storm_IoCallDriver$11$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$11$label_29#1;
+
+ inline$storm_IoCallDriver$11$label_29#1:
+ inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$11$label_37#1;
+
+ inline$storm_IoCallDriver$11$label_37#1:
+ goto inline$storm_IoCallDriver$11$label_38#1;
+
+ inline$storm_IoCallDriver$11$label_38#1:
+ goto inline$storm_IoCallDriver$11$label_39#1;
+
+ inline$storm_IoCallDriver$11$label_39#1:
+ goto inline$CallCompletionRoutine$23$Entry#1;
+
+ inline$CallCompletionRoutine$23$Entry#1:
+ inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$23$start#1;
+
+ inline$CallCompletionRoutine$23$start#1:
+ inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$23$label_3#1;
+
+ inline$CallCompletionRoutine$23$label_3#1:
+ goto inline$CallCompletionRoutine$23$label_4#1;
+
+ inline$CallCompletionRoutine$23$label_4#1:
+ goto inline$CallCompletionRoutine$23$label_5#1;
+
+ inline$CallCompletionRoutine$23$label_5#1:
+ goto inline$CallCompletionRoutine$23$label_6#1;
+
+ inline$CallCompletionRoutine$23$label_6#1:
+ goto inline$CallCompletionRoutine$23$label_7#1;
+
+ inline$CallCompletionRoutine$23$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$119$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$119$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$start#1:
+ inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$119$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$119$label_3_true#1, inline$IoGetCurrentIrpStackLocation$119$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$119$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$119$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$119$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$119$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$119$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$119$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$119$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$119$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$119$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$119$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$119$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$119$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$119$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$119$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$119$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$119$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$119$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$119$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$119$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$119$Return#1:
+ goto inline$CallCompletionRoutine$23$label_7$1#1;
+
+ inline$CallCompletionRoutine$23$label_7$1#1:
+ goto inline$CallCompletionRoutine$23$anon10_Then#1, inline$CallCompletionRoutine$23$anon10_Else#1;
+
+ inline$CallCompletionRoutine$23$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$23$anon1#1;
+
+ inline$CallCompletionRoutine$23$anon1#1:
+ goto inline$CallCompletionRoutine$23$label_10#1;
+
+ inline$CallCompletionRoutine$23$label_10#1:
+ goto inline$CallCompletionRoutine$23$label_11#1;
+
+ inline$CallCompletionRoutine$23$label_11#1:
+ havoc inline$CallCompletionRoutine$23$myNondetVar_0;
+ inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$myNondetVar_0;
+ goto inline$CallCompletionRoutine$23$label_12#1;
+
+ inline$CallCompletionRoutine$23$label_12#1:
+ havoc inline$CallCompletionRoutine$23$myNondetVar_0;
+ inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$myNondetVar_0;
+ goto inline$CallCompletionRoutine$23$label_13#1;
+
+ inline$CallCompletionRoutine$23$label_13#1:
+ havoc inline$CallCompletionRoutine$23$myNondetVar_0;
+ goto inline$CallCompletionRoutine$23$label_14#1;
+
+ inline$CallCompletionRoutine$23$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$120$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$120$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$start#1:
+ inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$120$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$120$label_3_true#1, inline$IoGetCurrentIrpStackLocation$120$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$120$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$120$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$120$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$120$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$120$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$120$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$120$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$120$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$120$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$120$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$120$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$120$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$120$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$120$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$120$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$120$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$120$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$120$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$120$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$120$Return#1:
+ goto inline$CallCompletionRoutine$23$label_14$1#1;
+
+ inline$CallCompletionRoutine$23$label_14$1#1:
+ goto inline$CallCompletionRoutine$23$anon11_Then#1, inline$CallCompletionRoutine$23$anon11_Else#1;
+
+ inline$CallCompletionRoutine$23$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$23$anon3#1;
+
+ inline$CallCompletionRoutine$23$anon3#1:
+ goto inline$CallCompletionRoutine$23$label_17#1;
+
+ inline$CallCompletionRoutine$23$label_17#1:
+ goto inline$CallCompletionRoutine$23$label_18#1;
+
+ inline$CallCompletionRoutine$23$label_18#1:
+ goto inline$CallCompletionRoutine$23$label_18_true#1, inline$CallCompletionRoutine$23$label_18_false#1;
+
+ inline$CallCompletionRoutine$23$label_18_false#1:
+ assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$23$label_1#1;
+
+ inline$CallCompletionRoutine$23$label_18_true#1:
+ assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$23$label_19#1;
+
+ inline$CallCompletionRoutine$23$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$23$label_20#1;
+
+ inline$CallCompletionRoutine$23$label_20#1:
+ goto inline$CallCompletionRoutine$23$label_20_icall_1#1, inline$CallCompletionRoutine$23$label_20_icall_2#1, inline$CallCompletionRoutine$23$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$23$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$23$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$23$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$23$Entry#1:
+ inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$23$start#1;
+
+ inline$BDLSystemPowerIoCompletion$23$start#1:
+ call inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$23$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_4#1:
+ inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_6#1:
+ inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$23$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$23$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$122$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$122$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$start#1:
+ inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$122$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$122$label_3_true#1, inline$IoGetCurrentIrpStackLocation$122$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$122$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$122$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$122$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$122$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$122$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$122$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$122$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$122$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$122$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$122$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$122$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$122$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$122$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$122$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$122$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$122$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$122$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$122$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$122$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$122$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon36_Then#1, inline$BDLSystemPowerIoCompletion$23$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_15#1:
+ goto inline$BDLGetDebugLevel$598$Entry#1;
+
+ inline$BDLGetDebugLevel$598$Entry#1:
+ goto inline$BDLGetDebugLevel$598$start#1;
+
+ inline$BDLGetDebugLevel$598$start#1:
+ goto inline$BDLGetDebugLevel$598$label_3#1;
+
+ inline$BDLGetDebugLevel$598$label_3#1:
+ havoc inline$BDLGetDebugLevel$598$myNondetVar_0;
+ inline$BDLGetDebugLevel$598$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$598$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$598$label_1#1;
+
+ inline$BDLGetDebugLevel$598$label_1#1:
+ goto inline$BDLGetDebugLevel$598$Return#1;
+
+ inline$BDLGetDebugLevel$598$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$598$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon37_Then#1, inline$BDLSystemPowerIoCompletion$23$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_18_true#1, inline$BDLSystemPowerIoCompletion$23$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_19#1:
+ goto inline$BDLGetDebugLevel$599$Entry#1;
+
+ inline$BDLGetDebugLevel$599$Entry#1:
+ goto inline$BDLGetDebugLevel$599$start#1;
+
+ inline$BDLGetDebugLevel$599$start#1:
+ goto inline$BDLGetDebugLevel$599$label_3#1;
+
+ inline$BDLGetDebugLevel$599$label_3#1:
+ havoc inline$BDLGetDebugLevel$599$myNondetVar_0;
+ inline$BDLGetDebugLevel$599$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$599$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$599$label_1#1;
+
+ inline$BDLGetDebugLevel$599$label_1#1:
+ goto inline$BDLGetDebugLevel$599$Return#1;
+
+ inline$BDLGetDebugLevel$599$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$599$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon38_Then#1, inline$BDLSystemPowerIoCompletion$23$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_28_true#1, inline$BDLSystemPowerIoCompletion$23$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_29#1:
+ goto inline$BDLGetDebugLevel$600$Entry#1;
+
+ inline$BDLGetDebugLevel$600$Entry#1:
+ goto inline$BDLGetDebugLevel$600$start#1;
+
+ inline$BDLGetDebugLevel$600$start#1:
+ goto inline$BDLGetDebugLevel$600$label_3#1;
+
+ inline$BDLGetDebugLevel$600$label_3#1:
+ havoc inline$BDLGetDebugLevel$600$myNondetVar_0;
+ inline$BDLGetDebugLevel$600$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$600$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$600$label_1#1;
+
+ inline$BDLGetDebugLevel$600$label_1#1:
+ goto inline$BDLGetDebugLevel$600$Return#1;
+
+ inline$BDLGetDebugLevel$600$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$600$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon39_Then#1, inline$BDLSystemPowerIoCompletion$23$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_38_true#1, inline$BDLSystemPowerIoCompletion$23$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_39_true#1, inline$BDLSystemPowerIoCompletion$23$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$23$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$23$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$23$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$23$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$23$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_106_true#1, inline$BDLSystemPowerIoCompletion$23$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$23$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$23$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$23$myNondetVar_0, inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$23$anon50_Then#1, inline$BDLSystemPowerIoCompletion$23$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_112#1:
+ inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_113_true#1, inline$BDLSystemPowerIoCompletion$23$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$23$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_117#1:
+ goto inline$BDLGetDebugLevel$607$Entry#1;
+
+ inline$BDLGetDebugLevel$607$Entry#1:
+ goto inline$BDLGetDebugLevel$607$start#1;
+
+ inline$BDLGetDebugLevel$607$start#1:
+ goto inline$BDLGetDebugLevel$607$label_3#1;
+
+ inline$BDLGetDebugLevel$607$label_3#1:
+ havoc inline$BDLGetDebugLevel$607$myNondetVar_0;
+ inline$BDLGetDebugLevel$607$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$607$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$607$label_1#1;
+
+ inline$BDLGetDebugLevel$607$label_1#1:
+ goto inline$BDLGetDebugLevel$607$Return#1;
+
+ inline$BDLGetDebugLevel$607$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$607$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon51_Then#1, inline$BDLSystemPowerIoCompletion$23$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_120_true#1, inline$BDLSystemPowerIoCompletion$23$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_121#1:
+ goto inline$BDLGetDebugLevel$608$Entry#1;
+
+ inline$BDLGetDebugLevel$608$Entry#1:
+ goto inline$BDLGetDebugLevel$608$start#1;
+
+ inline$BDLGetDebugLevel$608$start#1:
+ goto inline$BDLGetDebugLevel$608$label_3#1;
+
+ inline$BDLGetDebugLevel$608$label_3#1:
+ havoc inline$BDLGetDebugLevel$608$myNondetVar_0;
+ inline$BDLGetDebugLevel$608$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$608$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$608$label_1#1;
+
+ inline$BDLGetDebugLevel$608$label_1#1:
+ goto inline$BDLGetDebugLevel$608$Return#1;
+
+ inline$BDLGetDebugLevel$608$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$608$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon52_Then#1, inline$BDLSystemPowerIoCompletion$23$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_130_true#1, inline$BDLSystemPowerIoCompletion$23$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_131#1:
+ goto inline$BDLGetDebugLevel$609$Entry#1;
+
+ inline$BDLGetDebugLevel$609$Entry#1:
+ goto inline$BDLGetDebugLevel$609$start#1;
+
+ inline$BDLGetDebugLevel$609$start#1:
+ goto inline$BDLGetDebugLevel$609$label_3#1;
+
+ inline$BDLGetDebugLevel$609$label_3#1:
+ havoc inline$BDLGetDebugLevel$609$myNondetVar_0;
+ inline$BDLGetDebugLevel$609$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$609$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$609$label_1#1;
+
+ inline$BDLGetDebugLevel$609$label_1#1:
+ goto inline$BDLGetDebugLevel$609$Return#1;
+
+ inline$BDLGetDebugLevel$609$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$609$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon53_Then#1, inline$BDLSystemPowerIoCompletion$23$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_140_true#1, inline$BDLSystemPowerIoCompletion$23$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$23$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_115#1:
+ inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$23$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$23$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$23$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_43#1:
+ goto inline$BDLGetDebugLevel$601$Entry#1;
+
+ inline$BDLGetDebugLevel$601$Entry#1:
+ goto inline$BDLGetDebugLevel$601$start#1;
+
+ inline$BDLGetDebugLevel$601$start#1:
+ goto inline$BDLGetDebugLevel$601$label_3#1;
+
+ inline$BDLGetDebugLevel$601$label_3#1:
+ havoc inline$BDLGetDebugLevel$601$myNondetVar_0;
+ inline$BDLGetDebugLevel$601$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$601$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$601$label_1#1;
+
+ inline$BDLGetDebugLevel$601$label_1#1:
+ goto inline$BDLGetDebugLevel$601$Return#1;
+
+ inline$BDLGetDebugLevel$601$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$601$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon40_Then#1, inline$BDLSystemPowerIoCompletion$23$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_46_true#1, inline$BDLSystemPowerIoCompletion$23$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_47#1:
+ goto inline$BDLGetDebugLevel$602$Entry#1;
+
+ inline$BDLGetDebugLevel$602$Entry#1:
+ goto inline$BDLGetDebugLevel$602$start#1;
+
+ inline$BDLGetDebugLevel$602$start#1:
+ goto inline$BDLGetDebugLevel$602$label_3#1;
+
+ inline$BDLGetDebugLevel$602$label_3#1:
+ havoc inline$BDLGetDebugLevel$602$myNondetVar_0;
+ inline$BDLGetDebugLevel$602$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$602$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$602$label_1#1;
+
+ inline$BDLGetDebugLevel$602$label_1#1:
+ goto inline$BDLGetDebugLevel$602$Return#1;
+
+ inline$BDLGetDebugLevel$602$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$602$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon41_Then#1, inline$BDLSystemPowerIoCompletion$23$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_56_true#1, inline$BDLSystemPowerIoCompletion$23$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_57#1:
+ goto inline$BDLGetDebugLevel$603$Entry#1;
+
+ inline$BDLGetDebugLevel$603$Entry#1:
+ goto inline$BDLGetDebugLevel$603$start#1;
+
+ inline$BDLGetDebugLevel$603$start#1:
+ goto inline$BDLGetDebugLevel$603$label_3#1;
+
+ inline$BDLGetDebugLevel$603$label_3#1:
+ havoc inline$BDLGetDebugLevel$603$myNondetVar_0;
+ inline$BDLGetDebugLevel$603$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$603$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$603$label_1#1;
+
+ inline$BDLGetDebugLevel$603$label_1#1:
+ goto inline$BDLGetDebugLevel$603$Return#1;
+
+ inline$BDLGetDebugLevel$603$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$603$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon42_Then#1, inline$BDLSystemPowerIoCompletion$23$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_66_true#1, inline$BDLSystemPowerIoCompletion$23$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$23$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$23$anon43_Then#1, inline$BDLSystemPowerIoCompletion$23$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$23$anon44_Then#1, inline$BDLSystemPowerIoCompletion$23$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_74#1:
+ goto inline$storm_IoCompleteRequest$48$Entry#1;
+
+ inline$storm_IoCompleteRequest$48$Entry#1:
+ inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$23$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$48$start#1;
+
+ inline$storm_IoCompleteRequest$48$start#1:
+ inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$48$label_3#1;
+
+ inline$storm_IoCompleteRequest$48$label_3#1:
+ call inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$48$label_6#1;
+
+ inline$storm_IoCompleteRequest$48$label_6#1:
+ goto inline$storm_IoCompleteRequest$48$label_6_true#1, inline$storm_IoCompleteRequest$48$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$48$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$48$label_7#1;
+
+ inline$storm_IoCompleteRequest$48$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$48$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$48$label_8#1;
+
+ inline$storm_IoCompleteRequest$48$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$48$anon3_Then#1, inline$storm_IoCompleteRequest$48$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$48$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$48$anon1#1;
+
+ inline$storm_IoCompleteRequest$48$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$48$label_9#1;
+
+ inline$storm_IoCompleteRequest$48$label_9#1:
+ goto inline$storm_IoCompleteRequest$48$label_9_true#1, inline$storm_IoCompleteRequest$48$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$48$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$48$label_10#1;
+
+ inline$storm_IoCompleteRequest$48$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$48$label_1#1;
+
+ inline$storm_IoCompleteRequest$48$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$48$label_7#1;
+
+ inline$storm_IoCompleteRequest$48$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$48$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$48$label_1#1;
+
+ inline$storm_IoCompleteRequest$48$label_1#1:
+ goto inline$storm_IoCompleteRequest$48$Return#1;
+
+ inline$storm_IoCompleteRequest$48$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$48$Return#1;
+
+ inline$storm_IoCompleteRequest$48$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon45_Then#1, inline$BDLSystemPowerIoCompletion$23$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$23$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$23$anon46_Then#1, inline$BDLSystemPowerIoCompletion$23$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_80#1:
+ goto inline$BDLGetDebugLevel$604$Entry#1;
+
+ inline$BDLGetDebugLevel$604$Entry#1:
+ goto inline$BDLGetDebugLevel$604$start#1;
+
+ inline$BDLGetDebugLevel$604$start#1:
+ goto inline$BDLGetDebugLevel$604$label_3#1;
+
+ inline$BDLGetDebugLevel$604$label_3#1:
+ havoc inline$BDLGetDebugLevel$604$myNondetVar_0;
+ inline$BDLGetDebugLevel$604$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$604$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$604$label_1#1;
+
+ inline$BDLGetDebugLevel$604$label_1#1:
+ goto inline$BDLGetDebugLevel$604$Return#1;
+
+ inline$BDLGetDebugLevel$604$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$604$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon47_Then#1, inline$BDLSystemPowerIoCompletion$23$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_83_true#1, inline$BDLSystemPowerIoCompletion$23$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_84#1:
+ goto inline$BDLGetDebugLevel$605$Entry#1;
+
+ inline$BDLGetDebugLevel$605$Entry#1:
+ goto inline$BDLGetDebugLevel$605$start#1;
+
+ inline$BDLGetDebugLevel$605$start#1:
+ goto inline$BDLGetDebugLevel$605$label_3#1;
+
+ inline$BDLGetDebugLevel$605$label_3#1:
+ havoc inline$BDLGetDebugLevel$605$myNondetVar_0;
+ inline$BDLGetDebugLevel$605$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$605$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$605$label_1#1;
+
+ inline$BDLGetDebugLevel$605$label_1#1:
+ goto inline$BDLGetDebugLevel$605$Return#1;
+
+ inline$BDLGetDebugLevel$605$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$605$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon48_Then#1, inline$BDLSystemPowerIoCompletion$23$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_93_true#1, inline$BDLSystemPowerIoCompletion$23$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$23$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$23$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_94#1:
+ goto inline$BDLGetDebugLevel$606$Entry#1;
+
+ inline$BDLGetDebugLevel$606$Entry#1:
+ goto inline$BDLGetDebugLevel$606$start#1;
+
+ inline$BDLGetDebugLevel$606$start#1:
+ goto inline$BDLGetDebugLevel$606$label_3#1;
+
+ inline$BDLGetDebugLevel$606$label_3#1:
+ havoc inline$BDLGetDebugLevel$606$myNondetVar_0;
+ inline$BDLGetDebugLevel$606$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$606$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$606$label_1#1;
+
+ inline$BDLGetDebugLevel$606$label_1#1:
+ goto inline$BDLGetDebugLevel$606$Return#1;
+
+ inline$BDLGetDebugLevel$606$Return#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$606$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$23$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$23$anon49_Then#1, inline$BDLSystemPowerIoCompletion$23$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_103_true#1, inline$BDLSystemPowerIoCompletion$23$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$23$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$23$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$23$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_104#1:
+ inline$BDLSystemPowerIoCompletion$23$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$23$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$23$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$23$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$23$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$23$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$23$Return#1:
+ inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$23$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$23$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$23$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$23$anon14_Then#1, inline$CallCompletionRoutine$23$anon14_Else#1;
+
+ inline$CallCompletionRoutine$23$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$23$anon9#1;
+
+ inline$CallCompletionRoutine$23$anon9#1:
+ goto inline$CallCompletionRoutine$23$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$23$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$23$Return#1;
+
+ inline$CallCompletionRoutine$23$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$23$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$23$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$23$Entry#1:
+ inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$23$start#1;
+
+ inline$BDLDevicePowerIoCompletion$23$start#1:
+ call inline$BDLDevicePowerIoCompletion$23$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$23$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_4#1:
+ inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_6#1:
+ inline$BDLDevicePowerIoCompletion$23$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$23$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$23$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$121$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$121$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$start#1:
+ inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$121$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$121$label_3_true#1, inline$IoGetCurrentIrpStackLocation$121$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$121$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$121$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$121$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$121$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$121$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$121$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$121$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$121$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$121$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$121$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$121$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$121$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$121$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$121$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$121$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$121$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$121$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$121$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$121$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$121$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$121$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$121$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$121$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon30_Then#1, inline$BDLDevicePowerIoCompletion$23$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_13#1:
+ inline$BDLDevicePowerIoCompletion$23$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_17#1:
+ goto inline$BDLGetDebugLevel$589$Entry#1;
+
+ inline$BDLGetDebugLevel$589$Entry#1:
+ goto inline$BDLGetDebugLevel$589$start#1;
+
+ inline$BDLGetDebugLevel$589$start#1:
+ goto inline$BDLGetDebugLevel$589$label_3#1;
+
+ inline$BDLGetDebugLevel$589$label_3#1:
+ havoc inline$BDLGetDebugLevel$589$myNondetVar_0;
+ inline$BDLGetDebugLevel$589$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$589$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$589$label_1#1;
+
+ inline$BDLGetDebugLevel$589$label_1#1:
+ goto inline$BDLGetDebugLevel$589$Return#1;
+
+ inline$BDLGetDebugLevel$589$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$589$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon31_Then#1, inline$BDLDevicePowerIoCompletion$23$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_20_true#1, inline$BDLDevicePowerIoCompletion$23$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_21#1:
+ goto inline$BDLGetDebugLevel$590$Entry#1;
+
+ inline$BDLGetDebugLevel$590$Entry#1:
+ goto inline$BDLGetDebugLevel$590$start#1;
+
+ inline$BDLGetDebugLevel$590$start#1:
+ goto inline$BDLGetDebugLevel$590$label_3#1;
+
+ inline$BDLGetDebugLevel$590$label_3#1:
+ havoc inline$BDLGetDebugLevel$590$myNondetVar_0;
+ inline$BDLGetDebugLevel$590$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$590$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$590$label_1#1;
+
+ inline$BDLGetDebugLevel$590$label_1#1:
+ goto inline$BDLGetDebugLevel$590$Return#1;
+
+ inline$BDLGetDebugLevel$590$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$590$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon32_Then#1, inline$BDLDevicePowerIoCompletion$23$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_30_true#1, inline$BDLDevicePowerIoCompletion$23$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_31#1:
+ goto inline$BDLGetDebugLevel$591$Entry#1;
+
+ inline$BDLGetDebugLevel$591$Entry#1:
+ goto inline$BDLGetDebugLevel$591$start#1;
+
+ inline$BDLGetDebugLevel$591$start#1:
+ goto inline$BDLGetDebugLevel$591$label_3#1;
+
+ inline$BDLGetDebugLevel$591$label_3#1:
+ havoc inline$BDLGetDebugLevel$591$myNondetVar_0;
+ inline$BDLGetDebugLevel$591$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$591$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$591$label_1#1;
+
+ inline$BDLGetDebugLevel$591$label_1#1:
+ goto inline$BDLGetDebugLevel$591$Return#1;
+
+ inline$BDLGetDebugLevel$591$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$591$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon33_Then#1, inline$BDLDevicePowerIoCompletion$23$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_40_true#1, inline$BDLDevicePowerIoCompletion$23$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_41_true#1, inline$BDLDevicePowerIoCompletion$23$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$23$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$23$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_44_true#1, inline$BDLDevicePowerIoCompletion$23$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_45_true#1, inline$BDLDevicePowerIoCompletion$23$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$23$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$23$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$23$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_54#1:
+ inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$23$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_55_true#1, inline$BDLDevicePowerIoCompletion$23$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$23$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$23$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$23$anon34_Then#1, inline$BDLDevicePowerIoCompletion$23$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_59#1:
+ goto inline$BDLGetDebugLevel$592$Entry#1;
+
+ inline$BDLGetDebugLevel$592$Entry#1:
+ goto inline$BDLGetDebugLevel$592$start#1;
+
+ inline$BDLGetDebugLevel$592$start#1:
+ goto inline$BDLGetDebugLevel$592$label_3#1;
+
+ inline$BDLGetDebugLevel$592$label_3#1:
+ havoc inline$BDLGetDebugLevel$592$myNondetVar_0;
+ inline$BDLGetDebugLevel$592$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$592$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$592$label_1#1;
+
+ inline$BDLGetDebugLevel$592$label_1#1:
+ goto inline$BDLGetDebugLevel$592$Return#1;
+
+ inline$BDLGetDebugLevel$592$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$592$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon35_Then#1, inline$BDLDevicePowerIoCompletion$23$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_62_true#1, inline$BDLDevicePowerIoCompletion$23$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_63#1:
+ goto inline$BDLGetDebugLevel$593$Entry#1;
+
+ inline$BDLGetDebugLevel$593$Entry#1:
+ goto inline$BDLGetDebugLevel$593$start#1;
+
+ inline$BDLGetDebugLevel$593$start#1:
+ goto inline$BDLGetDebugLevel$593$label_3#1;
+
+ inline$BDLGetDebugLevel$593$label_3#1:
+ havoc inline$BDLGetDebugLevel$593$myNondetVar_0;
+ inline$BDLGetDebugLevel$593$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$593$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$593$label_1#1;
+
+ inline$BDLGetDebugLevel$593$label_1#1:
+ goto inline$BDLGetDebugLevel$593$Return#1;
+
+ inline$BDLGetDebugLevel$593$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$593$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon36_Then#1, inline$BDLDevicePowerIoCompletion$23$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_72_true#1, inline$BDLDevicePowerIoCompletion$23$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_73#1:
+ goto inline$BDLGetDebugLevel$594$Entry#1;
+
+ inline$BDLGetDebugLevel$594$Entry#1:
+ goto inline$BDLGetDebugLevel$594$start#1;
+
+ inline$BDLGetDebugLevel$594$start#1:
+ goto inline$BDLGetDebugLevel$594$label_3#1;
+
+ inline$BDLGetDebugLevel$594$label_3#1:
+ havoc inline$BDLGetDebugLevel$594$myNondetVar_0;
+ inline$BDLGetDebugLevel$594$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$594$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$594$label_1#1;
+
+ inline$BDLGetDebugLevel$594$label_1#1:
+ goto inline$BDLGetDebugLevel$594$Return#1;
+
+ inline$BDLGetDebugLevel$594$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$594$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon37_Then#1, inline$BDLDevicePowerIoCompletion$23$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_82_true#1, inline$BDLDevicePowerIoCompletion$23$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$23$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$23$anon38_Then#1, inline$BDLDevicePowerIoCompletion$23$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$23$anon39_Then#1, inline$BDLDevicePowerIoCompletion$23$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_92#1:
+ goto inline$storm_IoCompleteRequest$47$Entry#1;
+
+ inline$storm_IoCompleteRequest$47$Entry#1:
+ inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$23$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$47$start#1;
+
+ inline$storm_IoCompleteRequest$47$start#1:
+ inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$47$label_3#1;
+
+ inline$storm_IoCompleteRequest$47$label_3#1:
+ call inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$47$label_6#1;
+
+ inline$storm_IoCompleteRequest$47$label_6#1:
+ goto inline$storm_IoCompleteRequest$47$label_6_true#1, inline$storm_IoCompleteRequest$47$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$47$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$47$label_7#1;
+
+ inline$storm_IoCompleteRequest$47$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$47$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$47$label_8#1;
+
+ inline$storm_IoCompleteRequest$47$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$47$anon3_Then#1, inline$storm_IoCompleteRequest$47$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$47$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$47$anon1#1;
+
+ inline$storm_IoCompleteRequest$47$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$47$label_9#1;
+
+ inline$storm_IoCompleteRequest$47$label_9#1:
+ goto inline$storm_IoCompleteRequest$47$label_9_true#1, inline$storm_IoCompleteRequest$47$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$47$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$47$label_10#1;
+
+ inline$storm_IoCompleteRequest$47$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$47$label_1#1;
+
+ inline$storm_IoCompleteRequest$47$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$47$label_7#1;
+
+ inline$storm_IoCompleteRequest$47$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$47$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$47$label_1#1;
+
+ inline$storm_IoCompleteRequest$47$label_1#1:
+ goto inline$storm_IoCompleteRequest$47$Return#1;
+
+ inline$storm_IoCompleteRequest$47$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$47$Return#1;
+
+ inline$storm_IoCompleteRequest$47$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon40_Then#1, inline$BDLDevicePowerIoCompletion$23$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$23$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$23$anon41_Then#1, inline$BDLDevicePowerIoCompletion$23$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_98#1:
+ goto inline$BDLGetDebugLevel$595$Entry#1;
+
+ inline$BDLGetDebugLevel$595$Entry#1:
+ goto inline$BDLGetDebugLevel$595$start#1;
+
+ inline$BDLGetDebugLevel$595$start#1:
+ goto inline$BDLGetDebugLevel$595$label_3#1;
+
+ inline$BDLGetDebugLevel$595$label_3#1:
+ havoc inline$BDLGetDebugLevel$595$myNondetVar_0;
+ inline$BDLGetDebugLevel$595$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$595$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$595$label_1#1;
+
+ inline$BDLGetDebugLevel$595$label_1#1:
+ goto inline$BDLGetDebugLevel$595$Return#1;
+
+ inline$BDLGetDebugLevel$595$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$595$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon42_Then#1, inline$BDLDevicePowerIoCompletion$23$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_101_true#1, inline$BDLDevicePowerIoCompletion$23$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_102#1:
+ goto inline$BDLGetDebugLevel$596$Entry#1;
+
+ inline$BDLGetDebugLevel$596$Entry#1:
+ goto inline$BDLGetDebugLevel$596$start#1;
+
+ inline$BDLGetDebugLevel$596$start#1:
+ goto inline$BDLGetDebugLevel$596$label_3#1;
+
+ inline$BDLGetDebugLevel$596$label_3#1:
+ havoc inline$BDLGetDebugLevel$596$myNondetVar_0;
+ inline$BDLGetDebugLevel$596$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$596$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$596$label_1#1;
+
+ inline$BDLGetDebugLevel$596$label_1#1:
+ goto inline$BDLGetDebugLevel$596$Return#1;
+
+ inline$BDLGetDebugLevel$596$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$596$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon43_Then#1, inline$BDLDevicePowerIoCompletion$23$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_111_true#1, inline$BDLDevicePowerIoCompletion$23$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$23$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$23$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_112#1:
+ goto inline$BDLGetDebugLevel$597$Entry#1;
+
+ inline$BDLGetDebugLevel$597$Entry#1:
+ goto inline$BDLGetDebugLevel$597$start#1;
+
+ inline$BDLGetDebugLevel$597$start#1:
+ goto inline$BDLGetDebugLevel$597$label_3#1;
+
+ inline$BDLGetDebugLevel$597$label_3#1:
+ havoc inline$BDLGetDebugLevel$597$myNondetVar_0;
+ inline$BDLGetDebugLevel$597$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$597$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$597$label_1#1;
+
+ inline$BDLGetDebugLevel$597$label_1#1:
+ goto inline$BDLGetDebugLevel$597$Return#1;
+
+ inline$BDLGetDebugLevel$597$Return#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$597$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$23$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$23$anon44_Then#1, inline$BDLDevicePowerIoCompletion$23$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_121_true#1, inline$BDLDevicePowerIoCompletion$23$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$23$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$23$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$23$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_122#1:
+ inline$BDLDevicePowerIoCompletion$23$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$23$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$23$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$23$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$23$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$23$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$23$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$23$Return#1:
+ inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$23$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$23$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$23$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$23$anon13_Then#1, inline$CallCompletionRoutine$23$anon13_Else#1;
+
+ inline$CallCompletionRoutine$23$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$23$anon7#1;
+
+ inline$CallCompletionRoutine$23$anon7#1:
+ goto inline$CallCompletionRoutine$23$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$23$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$23$Return#1;
+
+ inline$CallCompletionRoutine$23$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$23$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$23$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$23$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$23$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$23$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$start#1:
+ inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$23$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$23$label_3_true#1, inline$BDLCallDriverCompletionRoutine$23$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$23$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$23$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$23$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$23$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$23$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_6#1:
+ goto inline$storm_KeSetEvent$25$Entry#1;
+
+ inline$storm_KeSetEvent$25$Entry#1:
+ inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$23$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$25$start#1;
+
+ inline$storm_KeSetEvent$25$start#1:
+ inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$25$label_3#1;
+
+ inline$storm_KeSetEvent$25$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$25$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$25$label_1#1;
+
+ inline$storm_KeSetEvent$25$label_1#1:
+ goto inline$storm_KeSetEvent$25$Return#1;
+
+ inline$storm_KeSetEvent$25$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$23$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$23$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$23$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$23$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$23$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$23$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$23$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$23$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$23$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$23$Return#1:
+ inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$23$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$23$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$23$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$23$anon12_Then#1, inline$CallCompletionRoutine$23$anon12_Else#1;
+
+ inline$CallCompletionRoutine$23$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$23$anon5#1;
+
+ inline$CallCompletionRoutine$23$anon5#1:
+ goto inline$CallCompletionRoutine$23$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$23$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$23$label_23#1;
+
+ inline$CallCompletionRoutine$23$label_23#1:
+ inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$23$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$23$label_24#1;
+
+ inline$CallCompletionRoutine$23$label_24#1:
+ goto inline$CallCompletionRoutine$23$label_24_true#1, inline$CallCompletionRoutine$23$label_24_false#1;
+
+ inline$CallCompletionRoutine$23$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$23$label_1#1;
+
+ inline$CallCompletionRoutine$23$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$23$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$23$label_25#1;
+
+ inline$CallCompletionRoutine$23$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$23$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$23$label_1#1;
+
+ inline$CallCompletionRoutine$23$label_1#1:
+ goto inline$CallCompletionRoutine$23$Return#1;
+
+ inline$CallCompletionRoutine$23$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$23$Return#1;
+
+ inline$CallCompletionRoutine$23$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$23$Return#1;
+
+ inline$CallCompletionRoutine$23$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$23$Return#1;
+
+ inline$CallCompletionRoutine$23$Return#1:
+ goto inline$storm_IoCallDriver$11$label_39$1#1;
+
+ inline$storm_IoCallDriver$11$label_39$1#1:
+ goto inline$storm_IoCallDriver$11$anon15_Then#1, inline$storm_IoCallDriver$11$anon15_Else#1;
+
+ inline$storm_IoCallDriver$11$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$11$anon10#1;
+
+ inline$storm_IoCallDriver$11$anon10#1:
+ goto inline$storm_IoCallDriver$11$label_36#1;
+
+ inline$storm_IoCallDriver$11$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$11$Return#1;
+
+ inline$storm_IoCallDriver$11$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$11$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$11$label_28#1;
+
+ inline$storm_IoCallDriver$11$label_28#1:
+ inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$11$label_42#1;
+
+ inline$storm_IoCallDriver$11$label_42#1:
+ goto inline$storm_IoCallDriver$11$label_43#1;
+
+ inline$storm_IoCallDriver$11$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$11$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$11$label_36#1;
+
+ inline$storm_IoCallDriver$11$label_36#1:
+ inline$storm_IoCallDriver$11$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$11$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$11$label_1#1;
+
+ inline$storm_IoCallDriver$11$label_1#1:
+ goto inline$storm_IoCallDriver$11$Return#1;
+
+ inline$storm_IoCallDriver$11$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$11$Return#1;
+
+ inline$storm_IoCallDriver$11$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$11$Return#1;
+
+ inline$storm_IoCallDriver$11$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$11$Return#1;
+
+ inline$storm_IoCallDriver$11$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$11$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_19$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_19$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon20_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon9#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_42#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_42#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_IoCallDriver$108.29$4$;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_18_true#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_22#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_22#1:
+ call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon21_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon21_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon11#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon11#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_25#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_25#1:
+ goto inline$storm_PoCallDriver$5$Entry#1;
+
+ inline$storm_PoCallDriver$5$Entry#1:
+ inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_PoCallDriver$5$start#1;
+
+ inline$storm_PoCallDriver$5$start#1:
+ inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8_.1;
+ goto inline$storm_PoCallDriver$5$label_3#1;
+
+ inline$storm_PoCallDriver$5$label_3#1:
+ goto inline$storm_IoCallDriver$12$Entry#1;
+
+ inline$storm_IoCallDriver$12$Entry#1:
+ inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$5$$Irp$2$496.14$storm_PoCallDriver$8;
+ goto inline$storm_IoCallDriver$12$start#1;
+
+ inline$storm_IoCallDriver$12$start#1:
+ inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$12$label_3#1;
+
+ inline$storm_IoCallDriver$12$label_3#1:
+ goto inline$storm_IoCallDriver$12$label_4#1;
+
+ inline$storm_IoCallDriver$12$label_4#1:
+ goto inline$storm_IoCallDriver$12$label_5#1;
+
+ inline$storm_IoCallDriver$12$label_5#1:
+ goto inline$storm_IoCallDriver$12$label_6#1;
+
+ inline$storm_IoCallDriver$12$label_6#1:
+ call inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$12$label_9#1;
+
+ inline$storm_IoCallDriver$12$label_9#1:
+ goto inline$storm_IoCallDriver$12$label_9_true#1, inline$storm_IoCallDriver$12$label_9_false#1;
+
+ inline$storm_IoCallDriver$12$label_9_false#1:
+ assume inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$12$label_10#1;
+
+ inline$storm_IoCallDriver$12$label_9_true#1:
+ assume inline$storm_IoCallDriver$12$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$12$label_13#1;
+
+ inline$storm_IoCallDriver$12$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$12$anon12_Then#1, inline$storm_IoCallDriver$12$anon12_Else#1;
+
+ inline$storm_IoCallDriver$12$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$12$anon3#1;
+
+ inline$storm_IoCallDriver$12$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$12$label_14#1;
+
+ inline$storm_IoCallDriver$12$label_14#1:
+ goto inline$storm_IoCallDriver$12$label_14_true#1, inline$storm_IoCallDriver$12$label_14_false#1;
+
+ inline$storm_IoCallDriver$12$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$12$label_15#1;
+
+ inline$storm_IoCallDriver$12$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$12$label_1#1;
+
+ inline$storm_IoCallDriver$12$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$12$label_10#1;
+
+ inline$storm_IoCallDriver$12$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$13$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$13$Entry#1:
+ inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$13$start#1;
+
+ inline$IoSetNextIrpStackLocation$13$start#1:
+ inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$13$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$13$label_3_true#1, inline$IoSetNextIrpStackLocation$13$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$13$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$13$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_4#1:
+ call inline$IoSetNextIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$13$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_7#1:
+ call inline$IoSetNextIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$13$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$13$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$13$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$13$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_5#1:
+ inline$IoSetNextIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$13$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$13$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$13$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$13$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$13$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$13$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$13$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$13$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$13$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$13$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$13$Return#1;
+
+ inline$IoSetNextIrpStackLocation$13$Return#1:
+ goto inline$storm_IoCallDriver$12$label_10$1#1;
+
+ inline$storm_IoCallDriver$12$label_10$1#1:
+ goto inline$storm_IoCallDriver$12$anon11_Then#1, inline$storm_IoCallDriver$12$anon11_Else#1;
+
+ inline$storm_IoCallDriver$12$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$12$anon1#1;
+
+ inline$storm_IoCallDriver$12$anon1#1:
+ goto inline$storm_IoCallDriver$12$label_18#1;
+
+ inline$storm_IoCallDriver$12$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$123$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$123$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$start#1:
+ inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$123$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$123$label_3_true#1, inline$IoGetCurrentIrpStackLocation$123$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$123$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$123$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$123$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$123$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$123$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$123$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$123$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$123$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$123$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$123$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$123$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$123$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$123$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$123$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$123$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$123$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$123$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$123$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$123$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$123$Return#1:
+ goto inline$storm_IoCallDriver$12$label_18$1#1;
+
+ inline$storm_IoCallDriver$12$label_18$1#1:
+ goto inline$storm_IoCallDriver$12$anon13_Then#1, inline$storm_IoCallDriver$12$anon13_Else#1;
+
+ inline$storm_IoCallDriver$12$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$12$anon6#1;
+
+ inline$storm_IoCallDriver$12$anon6#1:
+ goto inline$storm_IoCallDriver$12$label_21#1;
+
+ inline$storm_IoCallDriver$12$label_21#1:
+ goto inline$storm_IoCallDriver$12$label_22#1;
+
+ inline$storm_IoCallDriver$12$label_22#1:
+ goto inline$storm_IoCallDriver$12$label_23#1;
+
+ inline$storm_IoCallDriver$12$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$12$label_24#1;
+
+ inline$storm_IoCallDriver$12$label_24#1:
+ call inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$12$label_27#1;
+
+ inline$storm_IoCallDriver$12$label_27#1:
+ goto inline$storm_IoCallDriver$12$label_27_case_0#1, inline$storm_IoCallDriver$12$label_27_case_1#1, inline$storm_IoCallDriver$12$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$12$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$12$label_30#1;
+
+ inline$storm_IoCallDriver$12$label_30#1:
+ inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$12$label_31#1;
+
+ inline$storm_IoCallDriver$12$label_31#1:
+ goto inline$storm_IoCallDriver$12$label_32#1;
+
+ inline$storm_IoCallDriver$12$label_32#1:
+ goto inline$storm_IoCallDriver$12$label_33#1;
+
+ inline$storm_IoCallDriver$12$label_33#1:
+ goto inline$CallCompletionRoutine$24$Entry#1;
+
+ inline$CallCompletionRoutine$24$Entry#1:
+ inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$24$start#1;
+
+ inline$CallCompletionRoutine$24$start#1:
+ inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$24$label_3#1;
+
+ inline$CallCompletionRoutine$24$label_3#1:
+ goto inline$CallCompletionRoutine$24$label_4#1;
+
+ inline$CallCompletionRoutine$24$label_4#1:
+ goto inline$CallCompletionRoutine$24$label_5#1;
+
+ inline$CallCompletionRoutine$24$label_5#1:
+ goto inline$CallCompletionRoutine$24$label_6#1;
+
+ inline$CallCompletionRoutine$24$label_6#1:
+ goto inline$CallCompletionRoutine$24$label_7#1;
+
+ inline$CallCompletionRoutine$24$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$124$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$124$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$start#1:
+ inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$124$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$124$label_3_true#1, inline$IoGetCurrentIrpStackLocation$124$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$124$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$124$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$124$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$124$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$124$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$124$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$124$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$124$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$124$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$124$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$124$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$124$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$124$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$124$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$124$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$124$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$124$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$124$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$124$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$124$Return#1:
+ goto inline$CallCompletionRoutine$24$label_7$1#1;
+
+ inline$CallCompletionRoutine$24$label_7$1#1:
+ goto inline$CallCompletionRoutine$24$anon10_Then#1, inline$CallCompletionRoutine$24$anon10_Else#1;
+
+ inline$CallCompletionRoutine$24$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$24$anon1#1;
+
+ inline$CallCompletionRoutine$24$anon1#1:
+ goto inline$CallCompletionRoutine$24$label_10#1;
+
+ inline$CallCompletionRoutine$24$label_10#1:
+ goto inline$CallCompletionRoutine$24$label_11#1;
+
+ inline$CallCompletionRoutine$24$label_11#1:
+ havoc inline$CallCompletionRoutine$24$myNondetVar_0;
+ inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$myNondetVar_0;
+ goto inline$CallCompletionRoutine$24$label_12#1;
+
+ inline$CallCompletionRoutine$24$label_12#1:
+ havoc inline$CallCompletionRoutine$24$myNondetVar_0;
+ inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$myNondetVar_0;
+ goto inline$CallCompletionRoutine$24$label_13#1;
+
+ inline$CallCompletionRoutine$24$label_13#1:
+ havoc inline$CallCompletionRoutine$24$myNondetVar_0;
+ goto inline$CallCompletionRoutine$24$label_14#1;
+
+ inline$CallCompletionRoutine$24$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$125$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$125$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$start#1:
+ inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$125$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$125$label_3_true#1, inline$IoGetCurrentIrpStackLocation$125$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$125$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$125$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$125$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$125$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$125$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$125$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$125$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$125$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$125$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$125$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$125$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$125$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$125$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$125$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$125$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$125$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$125$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$125$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$125$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$125$Return#1:
+ goto inline$CallCompletionRoutine$24$label_14$1#1;
+
+ inline$CallCompletionRoutine$24$label_14$1#1:
+ goto inline$CallCompletionRoutine$24$anon11_Then#1, inline$CallCompletionRoutine$24$anon11_Else#1;
+
+ inline$CallCompletionRoutine$24$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$24$anon3#1;
+
+ inline$CallCompletionRoutine$24$anon3#1:
+ goto inline$CallCompletionRoutine$24$label_17#1;
+
+ inline$CallCompletionRoutine$24$label_17#1:
+ goto inline$CallCompletionRoutine$24$label_18#1;
+
+ inline$CallCompletionRoutine$24$label_18#1:
+ goto inline$CallCompletionRoutine$24$label_18_true#1, inline$CallCompletionRoutine$24$label_18_false#1;
+
+ inline$CallCompletionRoutine$24$label_18_false#1:
+ assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$24$label_1#1;
+
+ inline$CallCompletionRoutine$24$label_18_true#1:
+ assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$24$label_19#1;
+
+ inline$CallCompletionRoutine$24$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$24$label_20#1;
+
+ inline$CallCompletionRoutine$24$label_20#1:
+ goto inline$CallCompletionRoutine$24$label_20_icall_1#1, inline$CallCompletionRoutine$24$label_20_icall_2#1, inline$CallCompletionRoutine$24$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$24$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$24$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$24$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$24$Entry#1:
+ inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$24$start#1;
+
+ inline$BDLSystemPowerIoCompletion$24$start#1:
+ call inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$24$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_4#1:
+ inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_6#1:
+ inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$24$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$24$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$127$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$127$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$start#1:
+ inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$127$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$127$label_3_true#1, inline$IoGetCurrentIrpStackLocation$127$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$127$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$127$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$127$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$127$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$127$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$127$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$127$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$127$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$127$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$127$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$127$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$127$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$127$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$127$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$127$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$127$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$127$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$127$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$127$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$127$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon36_Then#1, inline$BDLSystemPowerIoCompletion$24$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_15#1:
+ goto inline$BDLGetDebugLevel$619$Entry#1;
+
+ inline$BDLGetDebugLevel$619$Entry#1:
+ goto inline$BDLGetDebugLevel$619$start#1;
+
+ inline$BDLGetDebugLevel$619$start#1:
+ goto inline$BDLGetDebugLevel$619$label_3#1;
+
+ inline$BDLGetDebugLevel$619$label_3#1:
+ havoc inline$BDLGetDebugLevel$619$myNondetVar_0;
+ inline$BDLGetDebugLevel$619$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$619$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$619$label_1#1;
+
+ inline$BDLGetDebugLevel$619$label_1#1:
+ goto inline$BDLGetDebugLevel$619$Return#1;
+
+ inline$BDLGetDebugLevel$619$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$619$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon37_Then#1, inline$BDLSystemPowerIoCompletion$24$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_18_true#1, inline$BDLSystemPowerIoCompletion$24$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_19#1:
+ goto inline$BDLGetDebugLevel$620$Entry#1;
+
+ inline$BDLGetDebugLevel$620$Entry#1:
+ goto inline$BDLGetDebugLevel$620$start#1;
+
+ inline$BDLGetDebugLevel$620$start#1:
+ goto inline$BDLGetDebugLevel$620$label_3#1;
+
+ inline$BDLGetDebugLevel$620$label_3#1:
+ havoc inline$BDLGetDebugLevel$620$myNondetVar_0;
+ inline$BDLGetDebugLevel$620$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$620$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$620$label_1#1;
+
+ inline$BDLGetDebugLevel$620$label_1#1:
+ goto inline$BDLGetDebugLevel$620$Return#1;
+
+ inline$BDLGetDebugLevel$620$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$620$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon38_Then#1, inline$BDLSystemPowerIoCompletion$24$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_28_true#1, inline$BDLSystemPowerIoCompletion$24$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_29#1:
+ goto inline$BDLGetDebugLevel$621$Entry#1;
+
+ inline$BDLGetDebugLevel$621$Entry#1:
+ goto inline$BDLGetDebugLevel$621$start#1;
+
+ inline$BDLGetDebugLevel$621$start#1:
+ goto inline$BDLGetDebugLevel$621$label_3#1;
+
+ inline$BDLGetDebugLevel$621$label_3#1:
+ havoc inline$BDLGetDebugLevel$621$myNondetVar_0;
+ inline$BDLGetDebugLevel$621$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$621$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$621$label_1#1;
+
+ inline$BDLGetDebugLevel$621$label_1#1:
+ goto inline$BDLGetDebugLevel$621$Return#1;
+
+ inline$BDLGetDebugLevel$621$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$621$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon39_Then#1, inline$BDLSystemPowerIoCompletion$24$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_38_true#1, inline$BDLSystemPowerIoCompletion$24$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_39_true#1, inline$BDLSystemPowerIoCompletion$24$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$24$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$24$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$24$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$24$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$24$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_106_true#1, inline$BDLSystemPowerIoCompletion$24$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$24$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$24$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$24$myNondetVar_0, inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$24$anon50_Then#1, inline$BDLSystemPowerIoCompletion$24$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_112#1:
+ inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_113_true#1, inline$BDLSystemPowerIoCompletion$24$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$24$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_117#1:
+ goto inline$BDLGetDebugLevel$628$Entry#1;
+
+ inline$BDLGetDebugLevel$628$Entry#1:
+ goto inline$BDLGetDebugLevel$628$start#1;
+
+ inline$BDLGetDebugLevel$628$start#1:
+ goto inline$BDLGetDebugLevel$628$label_3#1;
+
+ inline$BDLGetDebugLevel$628$label_3#1:
+ havoc inline$BDLGetDebugLevel$628$myNondetVar_0;
+ inline$BDLGetDebugLevel$628$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$628$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$628$label_1#1;
+
+ inline$BDLGetDebugLevel$628$label_1#1:
+ goto inline$BDLGetDebugLevel$628$Return#1;
+
+ inline$BDLGetDebugLevel$628$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$628$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon51_Then#1, inline$BDLSystemPowerIoCompletion$24$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_120_true#1, inline$BDLSystemPowerIoCompletion$24$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_121#1:
+ goto inline$BDLGetDebugLevel$629$Entry#1;
+
+ inline$BDLGetDebugLevel$629$Entry#1:
+ goto inline$BDLGetDebugLevel$629$start#1;
+
+ inline$BDLGetDebugLevel$629$start#1:
+ goto inline$BDLGetDebugLevel$629$label_3#1;
+
+ inline$BDLGetDebugLevel$629$label_3#1:
+ havoc inline$BDLGetDebugLevel$629$myNondetVar_0;
+ inline$BDLGetDebugLevel$629$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$629$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$629$label_1#1;
+
+ inline$BDLGetDebugLevel$629$label_1#1:
+ goto inline$BDLGetDebugLevel$629$Return#1;
+
+ inline$BDLGetDebugLevel$629$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$629$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon52_Then#1, inline$BDLSystemPowerIoCompletion$24$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_130_true#1, inline$BDLSystemPowerIoCompletion$24$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_131#1:
+ goto inline$BDLGetDebugLevel$630$Entry#1;
+
+ inline$BDLGetDebugLevel$630$Entry#1:
+ goto inline$BDLGetDebugLevel$630$start#1;
+
+ inline$BDLGetDebugLevel$630$start#1:
+ goto inline$BDLGetDebugLevel$630$label_3#1;
+
+ inline$BDLGetDebugLevel$630$label_3#1:
+ havoc inline$BDLGetDebugLevel$630$myNondetVar_0;
+ inline$BDLGetDebugLevel$630$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$630$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$630$label_1#1;
+
+ inline$BDLGetDebugLevel$630$label_1#1:
+ goto inline$BDLGetDebugLevel$630$Return#1;
+
+ inline$BDLGetDebugLevel$630$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$630$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon53_Then#1, inline$BDLSystemPowerIoCompletion$24$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_140_true#1, inline$BDLSystemPowerIoCompletion$24$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$24$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_115#1:
+ inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$24$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$24$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$24$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_43#1:
+ goto inline$BDLGetDebugLevel$622$Entry#1;
+
+ inline$BDLGetDebugLevel$622$Entry#1:
+ goto inline$BDLGetDebugLevel$622$start#1;
+
+ inline$BDLGetDebugLevel$622$start#1:
+ goto inline$BDLGetDebugLevel$622$label_3#1;
+
+ inline$BDLGetDebugLevel$622$label_3#1:
+ havoc inline$BDLGetDebugLevel$622$myNondetVar_0;
+ inline$BDLGetDebugLevel$622$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$622$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$622$label_1#1;
+
+ inline$BDLGetDebugLevel$622$label_1#1:
+ goto inline$BDLGetDebugLevel$622$Return#1;
+
+ inline$BDLGetDebugLevel$622$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$622$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon40_Then#1, inline$BDLSystemPowerIoCompletion$24$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_46_true#1, inline$BDLSystemPowerIoCompletion$24$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_47#1:
+ goto inline$BDLGetDebugLevel$623$Entry#1;
+
+ inline$BDLGetDebugLevel$623$Entry#1:
+ goto inline$BDLGetDebugLevel$623$start#1;
+
+ inline$BDLGetDebugLevel$623$start#1:
+ goto inline$BDLGetDebugLevel$623$label_3#1;
+
+ inline$BDLGetDebugLevel$623$label_3#1:
+ havoc inline$BDLGetDebugLevel$623$myNondetVar_0;
+ inline$BDLGetDebugLevel$623$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$623$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$623$label_1#1;
+
+ inline$BDLGetDebugLevel$623$label_1#1:
+ goto inline$BDLGetDebugLevel$623$Return#1;
+
+ inline$BDLGetDebugLevel$623$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$623$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon41_Then#1, inline$BDLSystemPowerIoCompletion$24$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_56_true#1, inline$BDLSystemPowerIoCompletion$24$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_57#1:
+ goto inline$BDLGetDebugLevel$624$Entry#1;
+
+ inline$BDLGetDebugLevel$624$Entry#1:
+ goto inline$BDLGetDebugLevel$624$start#1;
+
+ inline$BDLGetDebugLevel$624$start#1:
+ goto inline$BDLGetDebugLevel$624$label_3#1;
+
+ inline$BDLGetDebugLevel$624$label_3#1:
+ havoc inline$BDLGetDebugLevel$624$myNondetVar_0;
+ inline$BDLGetDebugLevel$624$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$624$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$624$label_1#1;
+
+ inline$BDLGetDebugLevel$624$label_1#1:
+ goto inline$BDLGetDebugLevel$624$Return#1;
+
+ inline$BDLGetDebugLevel$624$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$624$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon42_Then#1, inline$BDLSystemPowerIoCompletion$24$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_66_true#1, inline$BDLSystemPowerIoCompletion$24$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$24$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$24$anon43_Then#1, inline$BDLSystemPowerIoCompletion$24$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$24$anon44_Then#1, inline$BDLSystemPowerIoCompletion$24$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_74#1:
+ goto inline$storm_IoCompleteRequest$50$Entry#1;
+
+ inline$storm_IoCompleteRequest$50$Entry#1:
+ inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$24$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$50$start#1;
+
+ inline$storm_IoCompleteRequest$50$start#1:
+ inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$50$label_3#1;
+
+ inline$storm_IoCompleteRequest$50$label_3#1:
+ call inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$50$label_6#1;
+
+ inline$storm_IoCompleteRequest$50$label_6#1:
+ goto inline$storm_IoCompleteRequest$50$label_6_true#1, inline$storm_IoCompleteRequest$50$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$50$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$50$label_7#1;
+
+ inline$storm_IoCompleteRequest$50$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$50$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$50$label_8#1;
+
+ inline$storm_IoCompleteRequest$50$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$50$anon3_Then#1, inline$storm_IoCompleteRequest$50$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$50$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$50$anon1#1;
+
+ inline$storm_IoCompleteRequest$50$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$50$label_9#1;
+
+ inline$storm_IoCompleteRequest$50$label_9#1:
+ goto inline$storm_IoCompleteRequest$50$label_9_true#1, inline$storm_IoCompleteRequest$50$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$50$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$50$label_10#1;
+
+ inline$storm_IoCompleteRequest$50$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$50$label_1#1;
+
+ inline$storm_IoCompleteRequest$50$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$50$label_7#1;
+
+ inline$storm_IoCompleteRequest$50$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$50$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$50$label_1#1;
+
+ inline$storm_IoCompleteRequest$50$label_1#1:
+ goto inline$storm_IoCompleteRequest$50$Return#1;
+
+ inline$storm_IoCompleteRequest$50$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$50$Return#1;
+
+ inline$storm_IoCompleteRequest$50$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon45_Then#1, inline$BDLSystemPowerIoCompletion$24$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$24$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$24$anon46_Then#1, inline$BDLSystemPowerIoCompletion$24$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_80#1:
+ goto inline$BDLGetDebugLevel$625$Entry#1;
+
+ inline$BDLGetDebugLevel$625$Entry#1:
+ goto inline$BDLGetDebugLevel$625$start#1;
+
+ inline$BDLGetDebugLevel$625$start#1:
+ goto inline$BDLGetDebugLevel$625$label_3#1;
+
+ inline$BDLGetDebugLevel$625$label_3#1:
+ havoc inline$BDLGetDebugLevel$625$myNondetVar_0;
+ inline$BDLGetDebugLevel$625$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$625$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$625$label_1#1;
+
+ inline$BDLGetDebugLevel$625$label_1#1:
+ goto inline$BDLGetDebugLevel$625$Return#1;
+
+ inline$BDLGetDebugLevel$625$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$625$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon47_Then#1, inline$BDLSystemPowerIoCompletion$24$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_83_true#1, inline$BDLSystemPowerIoCompletion$24$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_84#1:
+ goto inline$BDLGetDebugLevel$626$Entry#1;
+
+ inline$BDLGetDebugLevel$626$Entry#1:
+ goto inline$BDLGetDebugLevel$626$start#1;
+
+ inline$BDLGetDebugLevel$626$start#1:
+ goto inline$BDLGetDebugLevel$626$label_3#1;
+
+ inline$BDLGetDebugLevel$626$label_3#1:
+ havoc inline$BDLGetDebugLevel$626$myNondetVar_0;
+ inline$BDLGetDebugLevel$626$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$626$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$626$label_1#1;
+
+ inline$BDLGetDebugLevel$626$label_1#1:
+ goto inline$BDLGetDebugLevel$626$Return#1;
+
+ inline$BDLGetDebugLevel$626$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$626$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon48_Then#1, inline$BDLSystemPowerIoCompletion$24$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_93_true#1, inline$BDLSystemPowerIoCompletion$24$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$24$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$24$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_94#1:
+ goto inline$BDLGetDebugLevel$627$Entry#1;
+
+ inline$BDLGetDebugLevel$627$Entry#1:
+ goto inline$BDLGetDebugLevel$627$start#1;
+
+ inline$BDLGetDebugLevel$627$start#1:
+ goto inline$BDLGetDebugLevel$627$label_3#1;
+
+ inline$BDLGetDebugLevel$627$label_3#1:
+ havoc inline$BDLGetDebugLevel$627$myNondetVar_0;
+ inline$BDLGetDebugLevel$627$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$627$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$627$label_1#1;
+
+ inline$BDLGetDebugLevel$627$label_1#1:
+ goto inline$BDLGetDebugLevel$627$Return#1;
+
+ inline$BDLGetDebugLevel$627$Return#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$627$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$24$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$24$anon49_Then#1, inline$BDLSystemPowerIoCompletion$24$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_103_true#1, inline$BDLSystemPowerIoCompletion$24$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$24$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$24$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$24$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_104#1:
+ inline$BDLSystemPowerIoCompletion$24$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$24$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$24$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$24$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$24$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$24$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$24$Return#1:
+ inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$24$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$24$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$24$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$24$anon14_Then#1, inline$CallCompletionRoutine$24$anon14_Else#1;
+
+ inline$CallCompletionRoutine$24$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$24$anon9#1;
+
+ inline$CallCompletionRoutine$24$anon9#1:
+ goto inline$CallCompletionRoutine$24$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$24$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$24$Return#1;
+
+ inline$CallCompletionRoutine$24$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$24$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$24$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$24$Entry#1:
+ inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$24$start#1;
+
+ inline$BDLDevicePowerIoCompletion$24$start#1:
+ call inline$BDLDevicePowerIoCompletion$24$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$24$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_4#1:
+ inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_6#1:
+ inline$BDLDevicePowerIoCompletion$24$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$24$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$24$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$126$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$126$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$start#1:
+ inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$126$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$126$label_3_true#1, inline$IoGetCurrentIrpStackLocation$126$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$126$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$126$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$126$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$126$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$126$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$126$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$126$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$126$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$126$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$126$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$126$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$126$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$126$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$126$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$126$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$126$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$126$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$126$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$126$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$126$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$126$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$126$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$126$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon30_Then#1, inline$BDLDevicePowerIoCompletion$24$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_13#1:
+ inline$BDLDevicePowerIoCompletion$24$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_17#1:
+ goto inline$BDLGetDebugLevel$610$Entry#1;
+
+ inline$BDLGetDebugLevel$610$Entry#1:
+ goto inline$BDLGetDebugLevel$610$start#1;
+
+ inline$BDLGetDebugLevel$610$start#1:
+ goto inline$BDLGetDebugLevel$610$label_3#1;
+
+ inline$BDLGetDebugLevel$610$label_3#1:
+ havoc inline$BDLGetDebugLevel$610$myNondetVar_0;
+ inline$BDLGetDebugLevel$610$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$610$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$610$label_1#1;
+
+ inline$BDLGetDebugLevel$610$label_1#1:
+ goto inline$BDLGetDebugLevel$610$Return#1;
+
+ inline$BDLGetDebugLevel$610$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$610$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon31_Then#1, inline$BDLDevicePowerIoCompletion$24$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_20_true#1, inline$BDLDevicePowerIoCompletion$24$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_21#1:
+ goto inline$BDLGetDebugLevel$611$Entry#1;
+
+ inline$BDLGetDebugLevel$611$Entry#1:
+ goto inline$BDLGetDebugLevel$611$start#1;
+
+ inline$BDLGetDebugLevel$611$start#1:
+ goto inline$BDLGetDebugLevel$611$label_3#1;
+
+ inline$BDLGetDebugLevel$611$label_3#1:
+ havoc inline$BDLGetDebugLevel$611$myNondetVar_0;
+ inline$BDLGetDebugLevel$611$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$611$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$611$label_1#1;
+
+ inline$BDLGetDebugLevel$611$label_1#1:
+ goto inline$BDLGetDebugLevel$611$Return#1;
+
+ inline$BDLGetDebugLevel$611$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$611$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon32_Then#1, inline$BDLDevicePowerIoCompletion$24$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_30_true#1, inline$BDLDevicePowerIoCompletion$24$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_31#1:
+ goto inline$BDLGetDebugLevel$612$Entry#1;
+
+ inline$BDLGetDebugLevel$612$Entry#1:
+ goto inline$BDLGetDebugLevel$612$start#1;
+
+ inline$BDLGetDebugLevel$612$start#1:
+ goto inline$BDLGetDebugLevel$612$label_3#1;
+
+ inline$BDLGetDebugLevel$612$label_3#1:
+ havoc inline$BDLGetDebugLevel$612$myNondetVar_0;
+ inline$BDLGetDebugLevel$612$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$612$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$612$label_1#1;
+
+ inline$BDLGetDebugLevel$612$label_1#1:
+ goto inline$BDLGetDebugLevel$612$Return#1;
+
+ inline$BDLGetDebugLevel$612$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$612$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon33_Then#1, inline$BDLDevicePowerIoCompletion$24$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_40_true#1, inline$BDLDevicePowerIoCompletion$24$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_41_true#1, inline$BDLDevicePowerIoCompletion$24$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$24$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$24$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_44_true#1, inline$BDLDevicePowerIoCompletion$24$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_45_true#1, inline$BDLDevicePowerIoCompletion$24$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$24$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$24$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$24$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_54#1:
+ inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$24$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_55_true#1, inline$BDLDevicePowerIoCompletion$24$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$24$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$24$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$24$anon34_Then#1, inline$BDLDevicePowerIoCompletion$24$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_59#1:
+ goto inline$BDLGetDebugLevel$613$Entry#1;
+
+ inline$BDLGetDebugLevel$613$Entry#1:
+ goto inline$BDLGetDebugLevel$613$start#1;
+
+ inline$BDLGetDebugLevel$613$start#1:
+ goto inline$BDLGetDebugLevel$613$label_3#1;
+
+ inline$BDLGetDebugLevel$613$label_3#1:
+ havoc inline$BDLGetDebugLevel$613$myNondetVar_0;
+ inline$BDLGetDebugLevel$613$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$613$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$613$label_1#1;
+
+ inline$BDLGetDebugLevel$613$label_1#1:
+ goto inline$BDLGetDebugLevel$613$Return#1;
+
+ inline$BDLGetDebugLevel$613$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$613$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon35_Then#1, inline$BDLDevicePowerIoCompletion$24$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_62_true#1, inline$BDLDevicePowerIoCompletion$24$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_63#1:
+ goto inline$BDLGetDebugLevel$614$Entry#1;
+
+ inline$BDLGetDebugLevel$614$Entry#1:
+ goto inline$BDLGetDebugLevel$614$start#1;
+
+ inline$BDLGetDebugLevel$614$start#1:
+ goto inline$BDLGetDebugLevel$614$label_3#1;
+
+ inline$BDLGetDebugLevel$614$label_3#1:
+ havoc inline$BDLGetDebugLevel$614$myNondetVar_0;
+ inline$BDLGetDebugLevel$614$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$614$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$614$label_1#1;
+
+ inline$BDLGetDebugLevel$614$label_1#1:
+ goto inline$BDLGetDebugLevel$614$Return#1;
+
+ inline$BDLGetDebugLevel$614$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$614$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon36_Then#1, inline$BDLDevicePowerIoCompletion$24$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_72_true#1, inline$BDLDevicePowerIoCompletion$24$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_73#1:
+ goto inline$BDLGetDebugLevel$615$Entry#1;
+
+ inline$BDLGetDebugLevel$615$Entry#1:
+ goto inline$BDLGetDebugLevel$615$start#1;
+
+ inline$BDLGetDebugLevel$615$start#1:
+ goto inline$BDLGetDebugLevel$615$label_3#1;
+
+ inline$BDLGetDebugLevel$615$label_3#1:
+ havoc inline$BDLGetDebugLevel$615$myNondetVar_0;
+ inline$BDLGetDebugLevel$615$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$615$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$615$label_1#1;
+
+ inline$BDLGetDebugLevel$615$label_1#1:
+ goto inline$BDLGetDebugLevel$615$Return#1;
+
+ inline$BDLGetDebugLevel$615$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$615$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon37_Then#1, inline$BDLDevicePowerIoCompletion$24$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_82_true#1, inline$BDLDevicePowerIoCompletion$24$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$24$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$24$anon38_Then#1, inline$BDLDevicePowerIoCompletion$24$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$24$anon39_Then#1, inline$BDLDevicePowerIoCompletion$24$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_92#1:
+ goto inline$storm_IoCompleteRequest$49$Entry#1;
+
+ inline$storm_IoCompleteRequest$49$Entry#1:
+ inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$24$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$49$start#1;
+
+ inline$storm_IoCompleteRequest$49$start#1:
+ inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$49$label_3#1;
+
+ inline$storm_IoCompleteRequest$49$label_3#1:
+ call inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$49$label_6#1;
+
+ inline$storm_IoCompleteRequest$49$label_6#1:
+ goto inline$storm_IoCompleteRequest$49$label_6_true#1, inline$storm_IoCompleteRequest$49$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$49$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$49$label_7#1;
+
+ inline$storm_IoCompleteRequest$49$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$49$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$49$label_8#1;
+
+ inline$storm_IoCompleteRequest$49$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$49$anon3_Then#1, inline$storm_IoCompleteRequest$49$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$49$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$49$anon1#1;
+
+ inline$storm_IoCompleteRequest$49$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$49$label_9#1;
+
+ inline$storm_IoCompleteRequest$49$label_9#1:
+ goto inline$storm_IoCompleteRequest$49$label_9_true#1, inline$storm_IoCompleteRequest$49$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$49$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$49$label_10#1;
+
+ inline$storm_IoCompleteRequest$49$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$49$label_1#1;
+
+ inline$storm_IoCompleteRequest$49$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$49$label_7#1;
+
+ inline$storm_IoCompleteRequest$49$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$49$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$49$label_1#1;
+
+ inline$storm_IoCompleteRequest$49$label_1#1:
+ goto inline$storm_IoCompleteRequest$49$Return#1;
+
+ inline$storm_IoCompleteRequest$49$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$49$Return#1;
+
+ inline$storm_IoCompleteRequest$49$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon40_Then#1, inline$BDLDevicePowerIoCompletion$24$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$24$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$24$anon41_Then#1, inline$BDLDevicePowerIoCompletion$24$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_98#1:
+ goto inline$BDLGetDebugLevel$616$Entry#1;
+
+ inline$BDLGetDebugLevel$616$Entry#1:
+ goto inline$BDLGetDebugLevel$616$start#1;
+
+ inline$BDLGetDebugLevel$616$start#1:
+ goto inline$BDLGetDebugLevel$616$label_3#1;
+
+ inline$BDLGetDebugLevel$616$label_3#1:
+ havoc inline$BDLGetDebugLevel$616$myNondetVar_0;
+ inline$BDLGetDebugLevel$616$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$616$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$616$label_1#1;
+
+ inline$BDLGetDebugLevel$616$label_1#1:
+ goto inline$BDLGetDebugLevel$616$Return#1;
+
+ inline$BDLGetDebugLevel$616$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$616$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon42_Then#1, inline$BDLDevicePowerIoCompletion$24$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_101_true#1, inline$BDLDevicePowerIoCompletion$24$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_102#1:
+ goto inline$BDLGetDebugLevel$617$Entry#1;
+
+ inline$BDLGetDebugLevel$617$Entry#1:
+ goto inline$BDLGetDebugLevel$617$start#1;
+
+ inline$BDLGetDebugLevel$617$start#1:
+ goto inline$BDLGetDebugLevel$617$label_3#1;
+
+ inline$BDLGetDebugLevel$617$label_3#1:
+ havoc inline$BDLGetDebugLevel$617$myNondetVar_0;
+ inline$BDLGetDebugLevel$617$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$617$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$617$label_1#1;
+
+ inline$BDLGetDebugLevel$617$label_1#1:
+ goto inline$BDLGetDebugLevel$617$Return#1;
+
+ inline$BDLGetDebugLevel$617$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$617$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon43_Then#1, inline$BDLDevicePowerIoCompletion$24$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_111_true#1, inline$BDLDevicePowerIoCompletion$24$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$24$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$24$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_112#1:
+ goto inline$BDLGetDebugLevel$618$Entry#1;
+
+ inline$BDLGetDebugLevel$618$Entry#1:
+ goto inline$BDLGetDebugLevel$618$start#1;
+
+ inline$BDLGetDebugLevel$618$start#1:
+ goto inline$BDLGetDebugLevel$618$label_3#1;
+
+ inline$BDLGetDebugLevel$618$label_3#1:
+ havoc inline$BDLGetDebugLevel$618$myNondetVar_0;
+ inline$BDLGetDebugLevel$618$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$618$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$618$label_1#1;
+
+ inline$BDLGetDebugLevel$618$label_1#1:
+ goto inline$BDLGetDebugLevel$618$Return#1;
+
+ inline$BDLGetDebugLevel$618$Return#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$618$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$24$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$24$anon44_Then#1, inline$BDLDevicePowerIoCompletion$24$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_121_true#1, inline$BDLDevicePowerIoCompletion$24$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$24$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$24$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$24$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_122#1:
+ inline$BDLDevicePowerIoCompletion$24$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$24$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$24$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$24$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$24$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$24$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$24$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$24$Return#1:
+ inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$24$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$24$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$24$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$24$anon13_Then#1, inline$CallCompletionRoutine$24$anon13_Else#1;
+
+ inline$CallCompletionRoutine$24$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$24$anon7#1;
+
+ inline$CallCompletionRoutine$24$anon7#1:
+ goto inline$CallCompletionRoutine$24$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$24$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$24$Return#1;
+
+ inline$CallCompletionRoutine$24$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$24$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$24$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$24$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$24$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$24$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$start#1:
+ inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$24$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$24$label_3_true#1, inline$BDLCallDriverCompletionRoutine$24$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$24$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$24$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$24$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$24$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$24$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_6#1:
+ goto inline$storm_KeSetEvent$26$Entry#1;
+
+ inline$storm_KeSetEvent$26$Entry#1:
+ inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$24$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$26$start#1;
+
+ inline$storm_KeSetEvent$26$start#1:
+ inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$26$label_3#1;
+
+ inline$storm_KeSetEvent$26$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$26$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$26$label_1#1;
+
+ inline$storm_KeSetEvent$26$label_1#1:
+ goto inline$storm_KeSetEvent$26$Return#1;
+
+ inline$storm_KeSetEvent$26$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$24$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$24$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$24$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$24$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$24$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$24$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$24$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$24$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$24$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$24$Return#1:
+ inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$24$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$24$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$24$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$24$anon12_Then#1, inline$CallCompletionRoutine$24$anon12_Else#1;
+
+ inline$CallCompletionRoutine$24$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$24$anon5#1;
+
+ inline$CallCompletionRoutine$24$anon5#1:
+ goto inline$CallCompletionRoutine$24$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$24$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$24$label_23#1;
+
+ inline$CallCompletionRoutine$24$label_23#1:
+ inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$24$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$24$label_24#1;
+
+ inline$CallCompletionRoutine$24$label_24#1:
+ goto inline$CallCompletionRoutine$24$label_24_true#1, inline$CallCompletionRoutine$24$label_24_false#1;
+
+ inline$CallCompletionRoutine$24$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$24$label_1#1;
+
+ inline$CallCompletionRoutine$24$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$24$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$24$label_25#1;
+
+ inline$CallCompletionRoutine$24$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$24$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$24$label_1#1;
+
+ inline$CallCompletionRoutine$24$label_1#1:
+ goto inline$CallCompletionRoutine$24$Return#1;
+
+ inline$CallCompletionRoutine$24$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$24$Return#1;
+
+ inline$CallCompletionRoutine$24$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$24$Return#1;
+
+ inline$CallCompletionRoutine$24$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$24$Return#1;
+
+ inline$CallCompletionRoutine$24$Return#1:
+ goto inline$storm_IoCallDriver$12$label_33$1#1;
+
+ inline$storm_IoCallDriver$12$label_33$1#1:
+ goto inline$storm_IoCallDriver$12$anon14_Then#1, inline$storm_IoCallDriver$12$anon14_Else#1;
+
+ inline$storm_IoCallDriver$12$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$12$anon8#1;
+
+ inline$storm_IoCallDriver$12$anon8#1:
+ goto inline$storm_IoCallDriver$12$label_36#1;
+
+ inline$storm_IoCallDriver$12$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$12$Return#1;
+
+ inline$storm_IoCallDriver$12$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$12$label_29#1;
+
+ inline$storm_IoCallDriver$12$label_29#1:
+ inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$12$label_37#1;
+
+ inline$storm_IoCallDriver$12$label_37#1:
+ goto inline$storm_IoCallDriver$12$label_38#1;
+
+ inline$storm_IoCallDriver$12$label_38#1:
+ goto inline$storm_IoCallDriver$12$label_39#1;
+
+ inline$storm_IoCallDriver$12$label_39#1:
+ goto inline$CallCompletionRoutine$25$Entry#1;
+
+ inline$CallCompletionRoutine$25$Entry#1:
+ inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$25$start#1;
+
+ inline$CallCompletionRoutine$25$start#1:
+ inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$25$label_3#1;
+
+ inline$CallCompletionRoutine$25$label_3#1:
+ goto inline$CallCompletionRoutine$25$label_4#1;
+
+ inline$CallCompletionRoutine$25$label_4#1:
+ goto inline$CallCompletionRoutine$25$label_5#1;
+
+ inline$CallCompletionRoutine$25$label_5#1:
+ goto inline$CallCompletionRoutine$25$label_6#1;
+
+ inline$CallCompletionRoutine$25$label_6#1:
+ goto inline$CallCompletionRoutine$25$label_7#1;
+
+ inline$CallCompletionRoutine$25$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$128$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$128$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$start#1:
+ inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$128$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$128$label_3_true#1, inline$IoGetCurrentIrpStackLocation$128$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$128$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$128$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$128$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$128$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$128$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$128$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$128$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$128$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$128$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$128$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$128$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$128$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$128$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$128$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$128$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$128$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$128$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$128$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$128$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$128$Return#1:
+ goto inline$CallCompletionRoutine$25$label_7$1#1;
+
+ inline$CallCompletionRoutine$25$label_7$1#1:
+ goto inline$CallCompletionRoutine$25$anon10_Then#1, inline$CallCompletionRoutine$25$anon10_Else#1;
+
+ inline$CallCompletionRoutine$25$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$25$anon1#1;
+
+ inline$CallCompletionRoutine$25$anon1#1:
+ goto inline$CallCompletionRoutine$25$label_10#1;
+
+ inline$CallCompletionRoutine$25$label_10#1:
+ goto inline$CallCompletionRoutine$25$label_11#1;
+
+ inline$CallCompletionRoutine$25$label_11#1:
+ havoc inline$CallCompletionRoutine$25$myNondetVar_0;
+ inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$myNondetVar_0;
+ goto inline$CallCompletionRoutine$25$label_12#1;
+
+ inline$CallCompletionRoutine$25$label_12#1:
+ havoc inline$CallCompletionRoutine$25$myNondetVar_0;
+ inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$myNondetVar_0;
+ goto inline$CallCompletionRoutine$25$label_13#1;
+
+ inline$CallCompletionRoutine$25$label_13#1:
+ havoc inline$CallCompletionRoutine$25$myNondetVar_0;
+ goto inline$CallCompletionRoutine$25$label_14#1;
+
+ inline$CallCompletionRoutine$25$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$129$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$129$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$start#1:
+ inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$129$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$129$label_3_true#1, inline$IoGetCurrentIrpStackLocation$129$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$129$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$129$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$129$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$129$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$129$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$129$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$129$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$129$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$129$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$129$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$129$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$129$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$129$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$129$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$129$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$129$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$129$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$129$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$129$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$129$Return#1:
+ goto inline$CallCompletionRoutine$25$label_14$1#1;
+
+ inline$CallCompletionRoutine$25$label_14$1#1:
+ goto inline$CallCompletionRoutine$25$anon11_Then#1, inline$CallCompletionRoutine$25$anon11_Else#1;
+
+ inline$CallCompletionRoutine$25$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$25$anon3#1;
+
+ inline$CallCompletionRoutine$25$anon3#1:
+ goto inline$CallCompletionRoutine$25$label_17#1;
+
+ inline$CallCompletionRoutine$25$label_17#1:
+ goto inline$CallCompletionRoutine$25$label_18#1;
+
+ inline$CallCompletionRoutine$25$label_18#1:
+ goto inline$CallCompletionRoutine$25$label_18_true#1, inline$CallCompletionRoutine$25$label_18_false#1;
+
+ inline$CallCompletionRoutine$25$label_18_false#1:
+ assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$25$label_1#1;
+
+ inline$CallCompletionRoutine$25$label_18_true#1:
+ assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$25$label_19#1;
+
+ inline$CallCompletionRoutine$25$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$25$label_20#1;
+
+ inline$CallCompletionRoutine$25$label_20#1:
+ goto inline$CallCompletionRoutine$25$label_20_icall_1#1, inline$CallCompletionRoutine$25$label_20_icall_2#1, inline$CallCompletionRoutine$25$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$25$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$25$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$25$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$25$Entry#1:
+ inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$25$start#1;
+
+ inline$BDLSystemPowerIoCompletion$25$start#1:
+ call inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$25$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_4#1:
+ inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_6#1:
+ inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$25$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$25$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$131$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$131$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$start#1:
+ inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$131$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$131$label_3_true#1, inline$IoGetCurrentIrpStackLocation$131$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$131$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$131$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$131$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$131$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$131$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$131$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$131$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$131$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$131$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$131$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$131$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$131$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$131$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$131$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$131$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$131$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$131$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$131$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$131$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$131$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon36_Then#1, inline$BDLSystemPowerIoCompletion$25$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_15#1:
+ goto inline$BDLGetDebugLevel$640$Entry#1;
+
+ inline$BDLGetDebugLevel$640$Entry#1:
+ goto inline$BDLGetDebugLevel$640$start#1;
+
+ inline$BDLGetDebugLevel$640$start#1:
+ goto inline$BDLGetDebugLevel$640$label_3#1;
+
+ inline$BDLGetDebugLevel$640$label_3#1:
+ havoc inline$BDLGetDebugLevel$640$myNondetVar_0;
+ inline$BDLGetDebugLevel$640$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$640$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$640$label_1#1;
+
+ inline$BDLGetDebugLevel$640$label_1#1:
+ goto inline$BDLGetDebugLevel$640$Return#1;
+
+ inline$BDLGetDebugLevel$640$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$640$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon37_Then#1, inline$BDLSystemPowerIoCompletion$25$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_18_true#1, inline$BDLSystemPowerIoCompletion$25$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_19#1:
+ goto inline$BDLGetDebugLevel$641$Entry#1;
+
+ inline$BDLGetDebugLevel$641$Entry#1:
+ goto inline$BDLGetDebugLevel$641$start#1;
+
+ inline$BDLGetDebugLevel$641$start#1:
+ goto inline$BDLGetDebugLevel$641$label_3#1;
+
+ inline$BDLGetDebugLevel$641$label_3#1:
+ havoc inline$BDLGetDebugLevel$641$myNondetVar_0;
+ inline$BDLGetDebugLevel$641$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$641$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$641$label_1#1;
+
+ inline$BDLGetDebugLevel$641$label_1#1:
+ goto inline$BDLGetDebugLevel$641$Return#1;
+
+ inline$BDLGetDebugLevel$641$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$641$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon38_Then#1, inline$BDLSystemPowerIoCompletion$25$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_28_true#1, inline$BDLSystemPowerIoCompletion$25$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_29#1:
+ goto inline$BDLGetDebugLevel$642$Entry#1;
+
+ inline$BDLGetDebugLevel$642$Entry#1:
+ goto inline$BDLGetDebugLevel$642$start#1;
+
+ inline$BDLGetDebugLevel$642$start#1:
+ goto inline$BDLGetDebugLevel$642$label_3#1;
+
+ inline$BDLGetDebugLevel$642$label_3#1:
+ havoc inline$BDLGetDebugLevel$642$myNondetVar_0;
+ inline$BDLGetDebugLevel$642$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$642$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$642$label_1#1;
+
+ inline$BDLGetDebugLevel$642$label_1#1:
+ goto inline$BDLGetDebugLevel$642$Return#1;
+
+ inline$BDLGetDebugLevel$642$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$642$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon39_Then#1, inline$BDLSystemPowerIoCompletion$25$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_38_true#1, inline$BDLSystemPowerIoCompletion$25$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_39_true#1, inline$BDLSystemPowerIoCompletion$25$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$25$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$25$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$25$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$25$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$25$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_106_true#1, inline$BDLSystemPowerIoCompletion$25$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$25$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$25$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$25$myNondetVar_0, inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$25$anon50_Then#1, inline$BDLSystemPowerIoCompletion$25$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_112#1:
+ inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_113_true#1, inline$BDLSystemPowerIoCompletion$25$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$25$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_117#1:
+ goto inline$BDLGetDebugLevel$649$Entry#1;
+
+ inline$BDLGetDebugLevel$649$Entry#1:
+ goto inline$BDLGetDebugLevel$649$start#1;
+
+ inline$BDLGetDebugLevel$649$start#1:
+ goto inline$BDLGetDebugLevel$649$label_3#1;
+
+ inline$BDLGetDebugLevel$649$label_3#1:
+ havoc inline$BDLGetDebugLevel$649$myNondetVar_0;
+ inline$BDLGetDebugLevel$649$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$649$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$649$label_1#1;
+
+ inline$BDLGetDebugLevel$649$label_1#1:
+ goto inline$BDLGetDebugLevel$649$Return#1;
+
+ inline$BDLGetDebugLevel$649$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$649$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon51_Then#1, inline$BDLSystemPowerIoCompletion$25$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_120_true#1, inline$BDLSystemPowerIoCompletion$25$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_121#1:
+ goto inline$BDLGetDebugLevel$650$Entry#1;
+
+ inline$BDLGetDebugLevel$650$Entry#1:
+ goto inline$BDLGetDebugLevel$650$start#1;
+
+ inline$BDLGetDebugLevel$650$start#1:
+ goto inline$BDLGetDebugLevel$650$label_3#1;
+
+ inline$BDLGetDebugLevel$650$label_3#1:
+ havoc inline$BDLGetDebugLevel$650$myNondetVar_0;
+ inline$BDLGetDebugLevel$650$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$650$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$650$label_1#1;
+
+ inline$BDLGetDebugLevel$650$label_1#1:
+ goto inline$BDLGetDebugLevel$650$Return#1;
+
+ inline$BDLGetDebugLevel$650$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$650$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon52_Then#1, inline$BDLSystemPowerIoCompletion$25$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_130_true#1, inline$BDLSystemPowerIoCompletion$25$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_131#1:
+ goto inline$BDLGetDebugLevel$651$Entry#1;
+
+ inline$BDLGetDebugLevel$651$Entry#1:
+ goto inline$BDLGetDebugLevel$651$start#1;
+
+ inline$BDLGetDebugLevel$651$start#1:
+ goto inline$BDLGetDebugLevel$651$label_3#1;
+
+ inline$BDLGetDebugLevel$651$label_3#1:
+ havoc inline$BDLGetDebugLevel$651$myNondetVar_0;
+ inline$BDLGetDebugLevel$651$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$651$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$651$label_1#1;
+
+ inline$BDLGetDebugLevel$651$label_1#1:
+ goto inline$BDLGetDebugLevel$651$Return#1;
+
+ inline$BDLGetDebugLevel$651$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$651$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon53_Then#1, inline$BDLSystemPowerIoCompletion$25$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_140_true#1, inline$BDLSystemPowerIoCompletion$25$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$25$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_115#1:
+ inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$25$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$25$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$25$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_43#1:
+ goto inline$BDLGetDebugLevel$643$Entry#1;
+
+ inline$BDLGetDebugLevel$643$Entry#1:
+ goto inline$BDLGetDebugLevel$643$start#1;
+
+ inline$BDLGetDebugLevel$643$start#1:
+ goto inline$BDLGetDebugLevel$643$label_3#1;
+
+ inline$BDLGetDebugLevel$643$label_3#1:
+ havoc inline$BDLGetDebugLevel$643$myNondetVar_0;
+ inline$BDLGetDebugLevel$643$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$643$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$643$label_1#1;
+
+ inline$BDLGetDebugLevel$643$label_1#1:
+ goto inline$BDLGetDebugLevel$643$Return#1;
+
+ inline$BDLGetDebugLevel$643$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$643$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon40_Then#1, inline$BDLSystemPowerIoCompletion$25$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_46_true#1, inline$BDLSystemPowerIoCompletion$25$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_47#1:
+ goto inline$BDLGetDebugLevel$644$Entry#1;
+
+ inline$BDLGetDebugLevel$644$Entry#1:
+ goto inline$BDLGetDebugLevel$644$start#1;
+
+ inline$BDLGetDebugLevel$644$start#1:
+ goto inline$BDLGetDebugLevel$644$label_3#1;
+
+ inline$BDLGetDebugLevel$644$label_3#1:
+ havoc inline$BDLGetDebugLevel$644$myNondetVar_0;
+ inline$BDLGetDebugLevel$644$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$644$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$644$label_1#1;
+
+ inline$BDLGetDebugLevel$644$label_1#1:
+ goto inline$BDLGetDebugLevel$644$Return#1;
+
+ inline$BDLGetDebugLevel$644$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$644$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon41_Then#1, inline$BDLSystemPowerIoCompletion$25$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_56_true#1, inline$BDLSystemPowerIoCompletion$25$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_57#1:
+ goto inline$BDLGetDebugLevel$645$Entry#1;
+
+ inline$BDLGetDebugLevel$645$Entry#1:
+ goto inline$BDLGetDebugLevel$645$start#1;
+
+ inline$BDLGetDebugLevel$645$start#1:
+ goto inline$BDLGetDebugLevel$645$label_3#1;
+
+ inline$BDLGetDebugLevel$645$label_3#1:
+ havoc inline$BDLGetDebugLevel$645$myNondetVar_0;
+ inline$BDLGetDebugLevel$645$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$645$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$645$label_1#1;
+
+ inline$BDLGetDebugLevel$645$label_1#1:
+ goto inline$BDLGetDebugLevel$645$Return#1;
+
+ inline$BDLGetDebugLevel$645$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$645$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon42_Then#1, inline$BDLSystemPowerIoCompletion$25$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_66_true#1, inline$BDLSystemPowerIoCompletion$25$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$25$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$25$anon43_Then#1, inline$BDLSystemPowerIoCompletion$25$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$25$anon44_Then#1, inline$BDLSystemPowerIoCompletion$25$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_74#1:
+ goto inline$storm_IoCompleteRequest$52$Entry#1;
+
+ inline$storm_IoCompleteRequest$52$Entry#1:
+ inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$25$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$52$start#1;
+
+ inline$storm_IoCompleteRequest$52$start#1:
+ inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$52$label_3#1;
+
+ inline$storm_IoCompleteRequest$52$label_3#1:
+ call inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$52$label_6#1;
+
+ inline$storm_IoCompleteRequest$52$label_6#1:
+ goto inline$storm_IoCompleteRequest$52$label_6_true#1, inline$storm_IoCompleteRequest$52$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$52$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$52$label_7#1;
+
+ inline$storm_IoCompleteRequest$52$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$52$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$52$label_8#1;
+
+ inline$storm_IoCompleteRequest$52$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$52$anon3_Then#1, inline$storm_IoCompleteRequest$52$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$52$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$52$anon1#1;
+
+ inline$storm_IoCompleteRequest$52$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$52$label_9#1;
+
+ inline$storm_IoCompleteRequest$52$label_9#1:
+ goto inline$storm_IoCompleteRequest$52$label_9_true#1, inline$storm_IoCompleteRequest$52$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$52$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$52$label_10#1;
+
+ inline$storm_IoCompleteRequest$52$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$52$label_1#1;
+
+ inline$storm_IoCompleteRequest$52$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$52$label_7#1;
+
+ inline$storm_IoCompleteRequest$52$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$52$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$52$label_1#1;
+
+ inline$storm_IoCompleteRequest$52$label_1#1:
+ goto inline$storm_IoCompleteRequest$52$Return#1;
+
+ inline$storm_IoCompleteRequest$52$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$52$Return#1;
+
+ inline$storm_IoCompleteRequest$52$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon45_Then#1, inline$BDLSystemPowerIoCompletion$25$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$25$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$25$anon46_Then#1, inline$BDLSystemPowerIoCompletion$25$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_80#1:
+ goto inline$BDLGetDebugLevel$646$Entry#1;
+
+ inline$BDLGetDebugLevel$646$Entry#1:
+ goto inline$BDLGetDebugLevel$646$start#1;
+
+ inline$BDLGetDebugLevel$646$start#1:
+ goto inline$BDLGetDebugLevel$646$label_3#1;
+
+ inline$BDLGetDebugLevel$646$label_3#1:
+ havoc inline$BDLGetDebugLevel$646$myNondetVar_0;
+ inline$BDLGetDebugLevel$646$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$646$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$646$label_1#1;
+
+ inline$BDLGetDebugLevel$646$label_1#1:
+ goto inline$BDLGetDebugLevel$646$Return#1;
+
+ inline$BDLGetDebugLevel$646$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$646$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon47_Then#1, inline$BDLSystemPowerIoCompletion$25$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_83_true#1, inline$BDLSystemPowerIoCompletion$25$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_84#1:
+ goto inline$BDLGetDebugLevel$647$Entry#1;
+
+ inline$BDLGetDebugLevel$647$Entry#1:
+ goto inline$BDLGetDebugLevel$647$start#1;
+
+ inline$BDLGetDebugLevel$647$start#1:
+ goto inline$BDLGetDebugLevel$647$label_3#1;
+
+ inline$BDLGetDebugLevel$647$label_3#1:
+ havoc inline$BDLGetDebugLevel$647$myNondetVar_0;
+ inline$BDLGetDebugLevel$647$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$647$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$647$label_1#1;
+
+ inline$BDLGetDebugLevel$647$label_1#1:
+ goto inline$BDLGetDebugLevel$647$Return#1;
+
+ inline$BDLGetDebugLevel$647$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$647$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon48_Then#1, inline$BDLSystemPowerIoCompletion$25$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_93_true#1, inline$BDLSystemPowerIoCompletion$25$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$25$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$25$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_94#1:
+ goto inline$BDLGetDebugLevel$648$Entry#1;
+
+ inline$BDLGetDebugLevel$648$Entry#1:
+ goto inline$BDLGetDebugLevel$648$start#1;
+
+ inline$BDLGetDebugLevel$648$start#1:
+ goto inline$BDLGetDebugLevel$648$label_3#1;
+
+ inline$BDLGetDebugLevel$648$label_3#1:
+ havoc inline$BDLGetDebugLevel$648$myNondetVar_0;
+ inline$BDLGetDebugLevel$648$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$648$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$648$label_1#1;
+
+ inline$BDLGetDebugLevel$648$label_1#1:
+ goto inline$BDLGetDebugLevel$648$Return#1;
+
+ inline$BDLGetDebugLevel$648$Return#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$648$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$25$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$25$anon49_Then#1, inline$BDLSystemPowerIoCompletion$25$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_103_true#1, inline$BDLSystemPowerIoCompletion$25$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$25$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$25$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$25$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_104#1:
+ inline$BDLSystemPowerIoCompletion$25$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$25$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$25$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$25$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$25$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$25$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$25$Return#1:
+ inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$25$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$25$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$25$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$25$anon14_Then#1, inline$CallCompletionRoutine$25$anon14_Else#1;
+
+ inline$CallCompletionRoutine$25$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$25$anon9#1;
+
+ inline$CallCompletionRoutine$25$anon9#1:
+ goto inline$CallCompletionRoutine$25$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$25$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$25$Return#1;
+
+ inline$CallCompletionRoutine$25$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$25$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$25$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$25$Entry#1:
+ inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$25$start#1;
+
+ inline$BDLDevicePowerIoCompletion$25$start#1:
+ call inline$BDLDevicePowerIoCompletion$25$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$25$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_4#1:
+ inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_6#1:
+ inline$BDLDevicePowerIoCompletion$25$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$25$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$25$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$130$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$130$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$start#1:
+ inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$130$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$130$label_3_true#1, inline$IoGetCurrentIrpStackLocation$130$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$130$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$130$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$130$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$130$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$130$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$130$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$130$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$130$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$130$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$130$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$130$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$130$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$130$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$130$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$130$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$130$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$130$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$130$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$130$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$130$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$130$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$130$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$130$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon30_Then#1, inline$BDLDevicePowerIoCompletion$25$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_13#1:
+ inline$BDLDevicePowerIoCompletion$25$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_17#1:
+ goto inline$BDLGetDebugLevel$631$Entry#1;
+
+ inline$BDLGetDebugLevel$631$Entry#1:
+ goto inline$BDLGetDebugLevel$631$start#1;
+
+ inline$BDLGetDebugLevel$631$start#1:
+ goto inline$BDLGetDebugLevel$631$label_3#1;
+
+ inline$BDLGetDebugLevel$631$label_3#1:
+ havoc inline$BDLGetDebugLevel$631$myNondetVar_0;
+ inline$BDLGetDebugLevel$631$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$631$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$631$label_1#1;
+
+ inline$BDLGetDebugLevel$631$label_1#1:
+ goto inline$BDLGetDebugLevel$631$Return#1;
+
+ inline$BDLGetDebugLevel$631$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$631$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon31_Then#1, inline$BDLDevicePowerIoCompletion$25$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_20_true#1, inline$BDLDevicePowerIoCompletion$25$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_21#1:
+ goto inline$BDLGetDebugLevel$632$Entry#1;
+
+ inline$BDLGetDebugLevel$632$Entry#1:
+ goto inline$BDLGetDebugLevel$632$start#1;
+
+ inline$BDLGetDebugLevel$632$start#1:
+ goto inline$BDLGetDebugLevel$632$label_3#1;
+
+ inline$BDLGetDebugLevel$632$label_3#1:
+ havoc inline$BDLGetDebugLevel$632$myNondetVar_0;
+ inline$BDLGetDebugLevel$632$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$632$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$632$label_1#1;
+
+ inline$BDLGetDebugLevel$632$label_1#1:
+ goto inline$BDLGetDebugLevel$632$Return#1;
+
+ inline$BDLGetDebugLevel$632$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$632$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon32_Then#1, inline$BDLDevicePowerIoCompletion$25$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_30_true#1, inline$BDLDevicePowerIoCompletion$25$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_31#1:
+ goto inline$BDLGetDebugLevel$633$Entry#1;
+
+ inline$BDLGetDebugLevel$633$Entry#1:
+ goto inline$BDLGetDebugLevel$633$start#1;
+
+ inline$BDLGetDebugLevel$633$start#1:
+ goto inline$BDLGetDebugLevel$633$label_3#1;
+
+ inline$BDLGetDebugLevel$633$label_3#1:
+ havoc inline$BDLGetDebugLevel$633$myNondetVar_0;
+ inline$BDLGetDebugLevel$633$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$633$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$633$label_1#1;
+
+ inline$BDLGetDebugLevel$633$label_1#1:
+ goto inline$BDLGetDebugLevel$633$Return#1;
+
+ inline$BDLGetDebugLevel$633$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$633$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon33_Then#1, inline$BDLDevicePowerIoCompletion$25$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_40_true#1, inline$BDLDevicePowerIoCompletion$25$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_41_true#1, inline$BDLDevicePowerIoCompletion$25$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$25$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$25$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_44_true#1, inline$BDLDevicePowerIoCompletion$25$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_45_true#1, inline$BDLDevicePowerIoCompletion$25$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$25$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$25$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$25$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_54#1:
+ inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$25$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_55_true#1, inline$BDLDevicePowerIoCompletion$25$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$25$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$25$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$25$anon34_Then#1, inline$BDLDevicePowerIoCompletion$25$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_59#1:
+ goto inline$BDLGetDebugLevel$634$Entry#1;
+
+ inline$BDLGetDebugLevel$634$Entry#1:
+ goto inline$BDLGetDebugLevel$634$start#1;
+
+ inline$BDLGetDebugLevel$634$start#1:
+ goto inline$BDLGetDebugLevel$634$label_3#1;
+
+ inline$BDLGetDebugLevel$634$label_3#1:
+ havoc inline$BDLGetDebugLevel$634$myNondetVar_0;
+ inline$BDLGetDebugLevel$634$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$634$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$634$label_1#1;
+
+ inline$BDLGetDebugLevel$634$label_1#1:
+ goto inline$BDLGetDebugLevel$634$Return#1;
+
+ inline$BDLGetDebugLevel$634$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$634$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon35_Then#1, inline$BDLDevicePowerIoCompletion$25$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_62_true#1, inline$BDLDevicePowerIoCompletion$25$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_63#1:
+ goto inline$BDLGetDebugLevel$635$Entry#1;
+
+ inline$BDLGetDebugLevel$635$Entry#1:
+ goto inline$BDLGetDebugLevel$635$start#1;
+
+ inline$BDLGetDebugLevel$635$start#1:
+ goto inline$BDLGetDebugLevel$635$label_3#1;
+
+ inline$BDLGetDebugLevel$635$label_3#1:
+ havoc inline$BDLGetDebugLevel$635$myNondetVar_0;
+ inline$BDLGetDebugLevel$635$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$635$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$635$label_1#1;
+
+ inline$BDLGetDebugLevel$635$label_1#1:
+ goto inline$BDLGetDebugLevel$635$Return#1;
+
+ inline$BDLGetDebugLevel$635$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$635$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon36_Then#1, inline$BDLDevicePowerIoCompletion$25$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_72_true#1, inline$BDLDevicePowerIoCompletion$25$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_73#1:
+ goto inline$BDLGetDebugLevel$636$Entry#1;
+
+ inline$BDLGetDebugLevel$636$Entry#1:
+ goto inline$BDLGetDebugLevel$636$start#1;
+
+ inline$BDLGetDebugLevel$636$start#1:
+ goto inline$BDLGetDebugLevel$636$label_3#1;
+
+ inline$BDLGetDebugLevel$636$label_3#1:
+ havoc inline$BDLGetDebugLevel$636$myNondetVar_0;
+ inline$BDLGetDebugLevel$636$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$636$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$636$label_1#1;
+
+ inline$BDLGetDebugLevel$636$label_1#1:
+ goto inline$BDLGetDebugLevel$636$Return#1;
+
+ inline$BDLGetDebugLevel$636$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$636$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon37_Then#1, inline$BDLDevicePowerIoCompletion$25$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_82_true#1, inline$BDLDevicePowerIoCompletion$25$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$25$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$25$anon38_Then#1, inline$BDLDevicePowerIoCompletion$25$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$25$anon39_Then#1, inline$BDLDevicePowerIoCompletion$25$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_92#1:
+ goto inline$storm_IoCompleteRequest$51$Entry#1;
+
+ inline$storm_IoCompleteRequest$51$Entry#1:
+ inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$25$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$51$start#1;
+
+ inline$storm_IoCompleteRequest$51$start#1:
+ inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$51$label_3#1;
+
+ inline$storm_IoCompleteRequest$51$label_3#1:
+ call inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$51$label_6#1;
+
+ inline$storm_IoCompleteRequest$51$label_6#1:
+ goto inline$storm_IoCompleteRequest$51$label_6_true#1, inline$storm_IoCompleteRequest$51$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$51$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$51$label_7#1;
+
+ inline$storm_IoCompleteRequest$51$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$51$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$51$label_8#1;
+
+ inline$storm_IoCompleteRequest$51$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$51$anon3_Then#1, inline$storm_IoCompleteRequest$51$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$51$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$51$anon1#1;
+
+ inline$storm_IoCompleteRequest$51$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$51$label_9#1;
+
+ inline$storm_IoCompleteRequest$51$label_9#1:
+ goto inline$storm_IoCompleteRequest$51$label_9_true#1, inline$storm_IoCompleteRequest$51$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$51$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$51$label_10#1;
+
+ inline$storm_IoCompleteRequest$51$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$51$label_1#1;
+
+ inline$storm_IoCompleteRequest$51$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$51$label_7#1;
+
+ inline$storm_IoCompleteRequest$51$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$51$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$51$label_1#1;
+
+ inline$storm_IoCompleteRequest$51$label_1#1:
+ goto inline$storm_IoCompleteRequest$51$Return#1;
+
+ inline$storm_IoCompleteRequest$51$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$51$Return#1;
+
+ inline$storm_IoCompleteRequest$51$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon40_Then#1, inline$BDLDevicePowerIoCompletion$25$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$25$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$25$anon41_Then#1, inline$BDLDevicePowerIoCompletion$25$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_98#1:
+ goto inline$BDLGetDebugLevel$637$Entry#1;
+
+ inline$BDLGetDebugLevel$637$Entry#1:
+ goto inline$BDLGetDebugLevel$637$start#1;
+
+ inline$BDLGetDebugLevel$637$start#1:
+ goto inline$BDLGetDebugLevel$637$label_3#1;
+
+ inline$BDLGetDebugLevel$637$label_3#1:
+ havoc inline$BDLGetDebugLevel$637$myNondetVar_0;
+ inline$BDLGetDebugLevel$637$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$637$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$637$label_1#1;
+
+ inline$BDLGetDebugLevel$637$label_1#1:
+ goto inline$BDLGetDebugLevel$637$Return#1;
+
+ inline$BDLGetDebugLevel$637$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$637$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon42_Then#1, inline$BDLDevicePowerIoCompletion$25$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_101_true#1, inline$BDLDevicePowerIoCompletion$25$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_102#1:
+ goto inline$BDLGetDebugLevel$638$Entry#1;
+
+ inline$BDLGetDebugLevel$638$Entry#1:
+ goto inline$BDLGetDebugLevel$638$start#1;
+
+ inline$BDLGetDebugLevel$638$start#1:
+ goto inline$BDLGetDebugLevel$638$label_3#1;
+
+ inline$BDLGetDebugLevel$638$label_3#1:
+ havoc inline$BDLGetDebugLevel$638$myNondetVar_0;
+ inline$BDLGetDebugLevel$638$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$638$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$638$label_1#1;
+
+ inline$BDLGetDebugLevel$638$label_1#1:
+ goto inline$BDLGetDebugLevel$638$Return#1;
+
+ inline$BDLGetDebugLevel$638$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$638$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon43_Then#1, inline$BDLDevicePowerIoCompletion$25$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_111_true#1, inline$BDLDevicePowerIoCompletion$25$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$25$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$25$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_112#1:
+ goto inline$BDLGetDebugLevel$639$Entry#1;
+
+ inline$BDLGetDebugLevel$639$Entry#1:
+ goto inline$BDLGetDebugLevel$639$start#1;
+
+ inline$BDLGetDebugLevel$639$start#1:
+ goto inline$BDLGetDebugLevel$639$label_3#1;
+
+ inline$BDLGetDebugLevel$639$label_3#1:
+ havoc inline$BDLGetDebugLevel$639$myNondetVar_0;
+ inline$BDLGetDebugLevel$639$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$639$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$639$label_1#1;
+
+ inline$BDLGetDebugLevel$639$label_1#1:
+ goto inline$BDLGetDebugLevel$639$Return#1;
+
+ inline$BDLGetDebugLevel$639$Return#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$639$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$25$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$25$anon44_Then#1, inline$BDLDevicePowerIoCompletion$25$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_121_true#1, inline$BDLDevicePowerIoCompletion$25$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$25$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$25$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$25$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_122#1:
+ inline$BDLDevicePowerIoCompletion$25$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$25$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$25$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$25$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$25$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$25$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$25$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$25$Return#1:
+ inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$25$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$25$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$25$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$25$anon13_Then#1, inline$CallCompletionRoutine$25$anon13_Else#1;
+
+ inline$CallCompletionRoutine$25$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$25$anon7#1;
+
+ inline$CallCompletionRoutine$25$anon7#1:
+ goto inline$CallCompletionRoutine$25$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$25$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$25$Return#1;
+
+ inline$CallCompletionRoutine$25$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$25$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$25$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$25$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$25$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$25$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$start#1:
+ inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$25$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$25$label_3_true#1, inline$BDLCallDriverCompletionRoutine$25$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$25$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$25$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$25$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$25$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$25$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_6#1:
+ goto inline$storm_KeSetEvent$27$Entry#1;
+
+ inline$storm_KeSetEvent$27$Entry#1:
+ inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$25$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$27$start#1;
+
+ inline$storm_KeSetEvent$27$start#1:
+ inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$27$label_3#1;
+
+ inline$storm_KeSetEvent$27$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$27$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$27$label_1#1;
+
+ inline$storm_KeSetEvent$27$label_1#1:
+ goto inline$storm_KeSetEvent$27$Return#1;
+
+ inline$storm_KeSetEvent$27$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$25$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$25$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$25$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$25$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$25$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$25$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$25$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$25$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$25$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$25$Return#1:
+ inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$25$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$25$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$25$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$25$anon12_Then#1, inline$CallCompletionRoutine$25$anon12_Else#1;
+
+ inline$CallCompletionRoutine$25$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$25$anon5#1;
+
+ inline$CallCompletionRoutine$25$anon5#1:
+ goto inline$CallCompletionRoutine$25$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$25$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$25$label_23#1;
+
+ inline$CallCompletionRoutine$25$label_23#1:
+ inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$25$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$25$label_24#1;
+
+ inline$CallCompletionRoutine$25$label_24#1:
+ goto inline$CallCompletionRoutine$25$label_24_true#1, inline$CallCompletionRoutine$25$label_24_false#1;
+
+ inline$CallCompletionRoutine$25$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$25$label_1#1;
+
+ inline$CallCompletionRoutine$25$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$25$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$25$label_25#1;
+
+ inline$CallCompletionRoutine$25$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$25$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$25$label_1#1;
+
+ inline$CallCompletionRoutine$25$label_1#1:
+ goto inline$CallCompletionRoutine$25$Return#1;
+
+ inline$CallCompletionRoutine$25$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$25$Return#1;
+
+ inline$CallCompletionRoutine$25$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$25$Return#1;
+
+ inline$CallCompletionRoutine$25$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$25$Return#1;
+
+ inline$CallCompletionRoutine$25$Return#1:
+ goto inline$storm_IoCallDriver$12$label_39$1#1;
+
+ inline$storm_IoCallDriver$12$label_39$1#1:
+ goto inline$storm_IoCallDriver$12$anon15_Then#1, inline$storm_IoCallDriver$12$anon15_Else#1;
+
+ inline$storm_IoCallDriver$12$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$12$anon10#1;
+
+ inline$storm_IoCallDriver$12$anon10#1:
+ goto inline$storm_IoCallDriver$12$label_36#1;
+
+ inline$storm_IoCallDriver$12$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$12$Return#1;
+
+ inline$storm_IoCallDriver$12$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$12$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$12$label_28#1;
+
+ inline$storm_IoCallDriver$12$label_28#1:
+ inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$12$label_42#1;
+
+ inline$storm_IoCallDriver$12$label_42#1:
+ goto inline$storm_IoCallDriver$12$label_43#1;
+
+ inline$storm_IoCallDriver$12$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$12$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$12$label_36#1;
+
+ inline$storm_IoCallDriver$12$label_36#1:
+ inline$storm_IoCallDriver$12$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$12$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$12$label_1#1;
+
+ inline$storm_IoCallDriver$12$label_1#1:
+ goto inline$storm_IoCallDriver$12$Return#1;
+
+ inline$storm_IoCallDriver$12$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$12$Return#1;
+
+ inline$storm_IoCallDriver$12$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$12$Return#1;
+
+ inline$storm_IoCallDriver$12$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$12$Return#1;
+
+ inline$storm_IoCallDriver$12$Return#1:
+ inline$storm_PoCallDriver$5$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$12$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$storm_PoCallDriver$5$label_3$1#1;
+
+ inline$storm_PoCallDriver$5$label_3$1#1:
+ goto inline$storm_PoCallDriver$5$anon2_Then#1, inline$storm_PoCallDriver$5$anon2_Else#1;
+
+ inline$storm_PoCallDriver$5$anon2_Else#1:
+ assume !raiseException;
+ goto inline$storm_PoCallDriver$5$anon1#1;
+
+ inline$storm_PoCallDriver$5$anon1#1:
+ goto inline$storm_PoCallDriver$5$label_6#1;
+
+ inline$storm_PoCallDriver$5$label_6#1:
+ inline$storm_PoCallDriver$5$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$5$$result.storm_IoCallDriver$499.27$2$;
+ goto inline$storm_PoCallDriver$5$label_1#1;
+
+ inline$storm_PoCallDriver$5$label_1#1:
+ goto inline$storm_PoCallDriver$5$Return#1;
+
+ inline$storm_PoCallDriver$5$anon2_Then#1:
+ assume raiseException;
+ goto inline$storm_PoCallDriver$5$Return#1;
+
+ inline$storm_PoCallDriver$5$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$5$$result.storm_PoCallDriver$494.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_25$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_25$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon22_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon13#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon13#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_28#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_28#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_PoCallDriver$104.29$3$;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$5$label_29_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_29_false#1:
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_29_true#1:
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_31#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_31#1:
+ goto inline$storm_KeWaitForSingleObject$5$Entry#1;
+
+ inline$storm_KeWaitForSingleObject$5$Entry#1:
+ inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
+ goto inline$storm_KeWaitForSingleObject$5$start#1;
+
+ inline$storm_KeWaitForSingleObject$5$start#1:
+ inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
+ inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
+ goto inline$storm_KeWaitForSingleObject$5$label_3#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_3#1:
+ goto inline$storm_KeWaitForSingleObject$5$label_3_true#1, inline$storm_KeWaitForSingleObject$5$label_3_false#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_3_false#1:
+ assume inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
+ goto inline$storm_KeWaitForSingleObject$5$label_4#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_4#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$anon6_Then#1, inline$storm_KeWaitForSingleObject$5$anon6_Else#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$anon1#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$5$label_13#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_13#1:
+ inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$5$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$Return#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_3_true#1:
+ assume inline$storm_KeWaitForSingleObject$5$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
+ goto inline$storm_KeWaitForSingleObject$5$label_5#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_5#1:
+ call inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$ := storm_nondet();
+ goto inline$storm_KeWaitForSingleObject$5$label_8#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_8#1:
+ goto inline$storm_KeWaitForSingleObject$5$label_8_true#1, inline$storm_KeWaitForSingleObject$5$label_8_false#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_8_false#1:
+ assume inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$ == 0;
+ goto inline$storm_KeWaitForSingleObject$5$label_9#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_9#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$anon7_Then#1, inline$storm_KeWaitForSingleObject$5$anon7_Else#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$anon3#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$5$label_12#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_12#1:
+ inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
+ goto inline$storm_KeWaitForSingleObject$5$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$Return#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_8_true#1:
+ assume inline$storm_KeWaitForSingleObject$5$$result.storm_nondet$256.20$2$ != 0;
+ goto inline$storm_KeWaitForSingleObject$5$label_10#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_10#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$anon8_Then#1, inline$storm_KeWaitForSingleObject$5$anon8_Else#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$anon5#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon5#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$5$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$5$label_11#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_11#1:
+ inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$5$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$5$label_1#1:
+ goto inline$storm_KeWaitForSingleObject$5$Return#1;
+
+ inline$storm_KeWaitForSingleObject$5$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$5$Return#1;
+
+ inline$storm_KeWaitForSingleObject$5$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$5$$result.storm_KeWaitForSingleObject$243.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_31$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_31$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$5$anon23_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$anon15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon15#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_34#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_34#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$$result.storm_KeWaitForSingleObject$116.38$5$;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_35#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_35#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$5$label_35_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_35_false#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_35_true#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_37#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_37#1:
+ call inline$BDLCallLowerLevelDriverAndWait$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_38#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_38#1:
+ call inline$BDLCallLowerLevelDriverAndWait$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_39#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_39#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_36#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
+ inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$5$myNondetVar_0;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_30#1:
+ inline$BDLCallLowerLevelDriverAndWait$5$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$5$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$label_1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$label_1#1:
+ call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$5$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon21_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$5$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$5$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLCallLowerLevelDriverAndWait$2148.43$13$ := inline$BDLCallLowerLevelDriverAndWait$5$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_29$1#1;
+
+ inline$BDLPnPCancelStop$0$label_29$1#1:
+ goto inline$BDLPnPCancelStop$0$anon25_Then#1, inline$BDLPnPCancelStop$0$anon25_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon25_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon7#1;
+
+ inline$BDLPnPCancelStop$0$anon7#1:
+ goto inline$BDLPnPCancelStop$0$label_33#1;
+
+ inline$BDLPnPCancelStop$0$label_33#1:
+ inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 := inline$BDLPnPCancelStop$0$$result.BDLCallLowerLevelDriverAndWait$2148.43$13$;
+ goto inline$BDLPnPCancelStop$0$label_34#1;
+
+ inline$BDLPnPCancelStop$0$label_34#1:
+ goto inline$BDLPnPCancelStop$0$label_34_true#1, inline$BDLPnPCancelStop$0$label_34_false#1;
+
+ inline$BDLPnPCancelStop$0$label_34_false#1:
+ assume inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 == 0;
+ goto inline$BDLPnPCancelStop$0$label_35#1;
+
+ inline$BDLPnPCancelStop$0$label_35#1:
+ goto inline$storm_KeSetEvent$28$Entry#1;
+
+ inline$storm_KeSetEvent$28$Entry#1:
+ inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPCancelStop$0$$pBDLExtension$1$2132.40$BDLPnPCancelStop$12);
+ goto inline$storm_KeSetEvent$28$start#1;
+
+ inline$storm_KeSetEvent$28$start#1:
+ inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$28$label_3#1;
+
+ inline$storm_KeSetEvent$28$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$28$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$28$label_1#1;
+
+ inline$storm_KeSetEvent$28$label_1#1:
+ goto inline$storm_KeSetEvent$28$Return#1;
+
+ inline$storm_KeSetEvent$28$Return#1:
+ goto inline$BDLPnPCancelStop$0$label_35$1#1;
+
+ inline$BDLPnPCancelStop$0$label_35$1#1:
+ goto inline$BDLPnPCancelStop$0$anon26_Then#1, inline$BDLPnPCancelStop$0$anon26_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon26_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon9#1;
+
+ inline$BDLPnPCancelStop$0$anon9#1:
+ goto inline$BDLPnPCancelStop$0$label_62#1;
+
+ inline$BDLPnPCancelStop$0$anon26_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$label_34_true#1:
+ assume inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12 != 0;
+ goto inline$BDLPnPCancelStop$0$label_38#1;
+
+ inline$BDLPnPCancelStop$0$label_38#1:
+ goto inline$BDLGetDebugLevel$652$Entry#1;
+
+ inline$BDLGetDebugLevel$652$Entry#1:
+ goto inline$BDLGetDebugLevel$652$start#1;
+
+ inline$BDLGetDebugLevel$652$start#1:
+ goto inline$BDLGetDebugLevel$652$label_3#1;
+
+ inline$BDLGetDebugLevel$652$label_3#1:
+ havoc inline$BDLGetDebugLevel$652$myNondetVar_0;
+ inline$BDLGetDebugLevel$652$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$652$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$652$label_1#1;
+
+ inline$BDLGetDebugLevel$652$label_1#1:
+ goto inline$BDLGetDebugLevel$652$Return#1;
+
+ inline$BDLGetDebugLevel$652$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$ := inline$BDLGetDebugLevel$652$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_38$1#1;
+
+ inline$BDLPnPCancelStop$0$label_38$1#1:
+ goto inline$BDLPnPCancelStop$0$anon27_Then#1, inline$BDLPnPCancelStop$0$anon27_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon27_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon11#1;
+
+ inline$BDLPnPCancelStop$0$anon11#1:
+ goto inline$BDLPnPCancelStop$0$label_41#1;
+
+ inline$BDLPnPCancelStop$0$label_41#1:
+ goto inline$BDLPnPCancelStop$0$label_41_true#1, inline$BDLPnPCancelStop$0$label_41_false#1;
+
+ inline$BDLPnPCancelStop$0$label_41_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$) == 0;
+ goto inline$BDLPnPCancelStop$0$label_42#1;
+
+ inline$BDLPnPCancelStop$0$label_41_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$14$) != 0;
+ goto inline$BDLPnPCancelStop$0$label_45#1;
+
+ inline$BDLPnPCancelStop$0$label_45#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_46#1;
+
+ inline$BDLPnPCancelStop$0$label_46#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_47#1;
+
+ inline$BDLPnPCancelStop$0$label_47#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_48#1;
+
+ inline$BDLPnPCancelStop$0$label_48#1:
+ havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$15$;
+ goto inline$BDLPnPCancelStop$0$label_42#1;
+
+ inline$BDLPnPCancelStop$0$label_42#1:
+ goto inline$BDLGetDebugLevel$653$Entry#1;
+
+ inline$BDLGetDebugLevel$653$Entry#1:
+ goto inline$BDLGetDebugLevel$653$start#1;
+
+ inline$BDLGetDebugLevel$653$start#1:
+ goto inline$BDLGetDebugLevel$653$label_3#1;
+
+ inline$BDLGetDebugLevel$653$label_3#1:
+ havoc inline$BDLGetDebugLevel$653$myNondetVar_0;
+ inline$BDLGetDebugLevel$653$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$653$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$653$label_1#1;
+
+ inline$BDLGetDebugLevel$653$label_1#1:
+ goto inline$BDLGetDebugLevel$653$Return#1;
+
+ inline$BDLGetDebugLevel$653$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$ := inline$BDLGetDebugLevel$653$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_42$1#1;
+
+ inline$BDLPnPCancelStop$0$label_42$1#1:
+ goto inline$BDLPnPCancelStop$0$anon28_Then#1, inline$BDLPnPCancelStop$0$anon28_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon28_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon13#1;
+
+ inline$BDLPnPCancelStop$0$anon13#1:
+ goto inline$BDLPnPCancelStop$0$label_51#1;
+
+ inline$BDLPnPCancelStop$0$label_51#1:
+ goto inline$BDLPnPCancelStop$0$label_51_true#1, inline$BDLPnPCancelStop$0$label_51_false#1;
+
+ inline$BDLPnPCancelStop$0$label_51_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$) == 0;
+ goto inline$BDLPnPCancelStop$0$label_52#1;
+
+ inline$BDLPnPCancelStop$0$label_51_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$19$) != 0;
+ goto inline$BDLPnPCancelStop$0$label_55#1;
+
+ inline$BDLPnPCancelStop$0$label_55#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_56#1;
+
+ inline$BDLPnPCancelStop$0$label_56#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_57#1;
+
+ inline$BDLPnPCancelStop$0$label_57#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_58#1;
+
+ inline$BDLPnPCancelStop$0$label_58#1:
+ havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2152.0$20$;
+ goto inline$BDLPnPCancelStop$0$label_52#1;
+
+ inline$BDLPnPCancelStop$0$label_52#1:
+ goto inline$BDLGetDebugLevel$654$Entry#1;
+
+ inline$BDLGetDebugLevel$654$Entry#1:
+ goto inline$BDLGetDebugLevel$654$start#1;
+
+ inline$BDLGetDebugLevel$654$start#1:
+ goto inline$BDLGetDebugLevel$654$label_3#1;
+
+ inline$BDLGetDebugLevel$654$label_3#1:
+ havoc inline$BDLGetDebugLevel$654$myNondetVar_0;
+ inline$BDLGetDebugLevel$654$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$654$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$654$label_1#1;
+
+ inline$BDLGetDebugLevel$654$label_1#1:
+ goto inline$BDLGetDebugLevel$654$Return#1;
+
+ inline$BDLGetDebugLevel$654$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$ := inline$BDLGetDebugLevel$654$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_52$1#1;
+
+ inline$BDLPnPCancelStop$0$label_52$1#1:
+ goto inline$BDLPnPCancelStop$0$anon29_Then#1, inline$BDLPnPCancelStop$0$anon29_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon29_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon15#1;
+
+ inline$BDLPnPCancelStop$0$anon15#1:
+ goto inline$BDLPnPCancelStop$0$label_61#1;
+
+ inline$BDLPnPCancelStop$0$label_61#1:
+ goto inline$BDLPnPCancelStop$0$label_61_true#1, inline$BDLPnPCancelStop$0$label_61_false#1;
+
+ inline$BDLPnPCancelStop$0$label_61_false#1:
+ assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$, 4) == 0;
+ goto inline$BDLPnPCancelStop$0$label_62#1;
+
+ inline$BDLPnPCancelStop$0$label_61_true#1:
+ assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2152.0$24$, 4) != 0;
+ goto inline$BDLPnPCancelStop$0$label_65#1;
+
+ inline$BDLPnPCancelStop$0$label_65#1:
+ goto inline$BDLPnPCancelStop$0$label_62#1;
+
+ inline$BDLPnPCancelStop$0$label_62#1:
+ goto inline$BDLGetDebugLevel$655$Entry#1;
+
+ inline$BDLGetDebugLevel$655$Entry#1:
+ goto inline$BDLGetDebugLevel$655$start#1;
+
+ inline$BDLGetDebugLevel$655$start#1:
+ goto inline$BDLGetDebugLevel$655$label_3#1;
+
+ inline$BDLGetDebugLevel$655$label_3#1:
+ havoc inline$BDLGetDebugLevel$655$myNondetVar_0;
+ inline$BDLGetDebugLevel$655$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$655$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$655$label_1#1;
+
+ inline$BDLGetDebugLevel$655$label_1#1:
+ goto inline$BDLGetDebugLevel$655$Return#1;
+
+ inline$BDLGetDebugLevel$655$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$ := inline$BDLGetDebugLevel$655$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_62$1#1;
+
+ inline$BDLPnPCancelStop$0$label_62$1#1:
+ goto inline$BDLPnPCancelStop$0$anon30_Then#1, inline$BDLPnPCancelStop$0$anon30_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon17#1;
+
+ inline$BDLPnPCancelStop$0$anon17#1:
+ goto inline$BDLPnPCancelStop$0$label_66#1;
+
+ inline$BDLPnPCancelStop$0$label_66#1:
+ goto inline$BDLPnPCancelStop$0$label_66_true#1, inline$BDLPnPCancelStop$0$label_66_false#1;
+
+ inline$BDLPnPCancelStop$0$label_66_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$) == 0;
+ goto inline$BDLPnPCancelStop$0$label_67#1;
+
+ inline$BDLPnPCancelStop$0$label_66_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$26$) != 0;
+ goto inline$BDLPnPCancelStop$0$label_70#1;
+
+ inline$BDLPnPCancelStop$0$label_70#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_71#1;
+
+ inline$BDLPnPCancelStop$0$label_71#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_72#1;
+
+ inline$BDLPnPCancelStop$0$label_72#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_73#1;
+
+ inline$BDLPnPCancelStop$0$label_73#1:
+ havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$27$;
+ goto inline$BDLPnPCancelStop$0$label_67#1;
+
+ inline$BDLPnPCancelStop$0$label_67#1:
+ goto inline$BDLGetDebugLevel$656$Entry#1;
+
+ inline$BDLGetDebugLevel$656$Entry#1:
+ goto inline$BDLGetDebugLevel$656$start#1;
+
+ inline$BDLGetDebugLevel$656$start#1:
+ goto inline$BDLGetDebugLevel$656$label_3#1;
+
+ inline$BDLGetDebugLevel$656$label_3#1:
+ havoc inline$BDLGetDebugLevel$656$myNondetVar_0;
+ inline$BDLGetDebugLevel$656$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$656$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$656$label_1#1;
+
+ inline$BDLGetDebugLevel$656$label_1#1:
+ goto inline$BDLGetDebugLevel$656$Return#1;
+
+ inline$BDLGetDebugLevel$656$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$ := inline$BDLGetDebugLevel$656$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_67$1#1;
+
+ inline$BDLPnPCancelStop$0$label_67$1#1:
+ goto inline$BDLPnPCancelStop$0$anon31_Then#1, inline$BDLPnPCancelStop$0$anon31_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon19#1;
+
+ inline$BDLPnPCancelStop$0$anon19#1:
+ goto inline$BDLPnPCancelStop$0$label_76#1;
+
+ inline$BDLPnPCancelStop$0$label_76#1:
+ goto inline$BDLPnPCancelStop$0$label_76_true#1, inline$BDLPnPCancelStop$0$label_76_false#1;
+
+ inline$BDLPnPCancelStop$0$label_76_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$) == 0;
+ goto inline$BDLPnPCancelStop$0$label_77#1;
+
+ inline$BDLPnPCancelStop$0$label_76_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$31$) != 0;
+ goto inline$BDLPnPCancelStop$0$label_80#1;
+
+ inline$BDLPnPCancelStop$0$label_80#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_81#1;
+
+ inline$BDLPnPCancelStop$0$label_81#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_82#1;
+
+ inline$BDLPnPCancelStop$0$label_82#1:
+ call inline$BDLPnPCancelStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelStop$0$label_83#1;
+
+ inline$BDLPnPCancelStop$0$label_83#1:
+ havoc inline$BDLPnPCancelStop$0$$result.DbgPrint$2169.0$32$;
+ goto inline$BDLPnPCancelStop$0$label_77#1;
+
+ inline$BDLPnPCancelStop$0$label_77#1:
+ goto inline$BDLGetDebugLevel$657$Entry#1;
+
+ inline$BDLGetDebugLevel$657$Entry#1:
+ goto inline$BDLGetDebugLevel$657$start#1;
+
+ inline$BDLGetDebugLevel$657$start#1:
+ goto inline$BDLGetDebugLevel$657$label_3#1;
+
+ inline$BDLGetDebugLevel$657$label_3#1:
+ havoc inline$BDLGetDebugLevel$657$myNondetVar_0;
+ inline$BDLGetDebugLevel$657$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$657$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$657$label_1#1;
+
+ inline$BDLGetDebugLevel$657$label_1#1:
+ goto inline$BDLGetDebugLevel$657$Return#1;
+
+ inline$BDLGetDebugLevel$657$Return#1:
+ inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$ := inline$BDLGetDebugLevel$657$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelStop$0$label_77$1#1;
+
+ inline$BDLPnPCancelStop$0$label_77$1#1:
+ goto inline$BDLPnPCancelStop$0$anon32_Then#1, inline$BDLPnPCancelStop$0$anon32_Else#1;
+
+ inline$BDLPnPCancelStop$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelStop$0$anon21#1;
+
+ inline$BDLPnPCancelStop$0$anon21#1:
+ goto inline$BDLPnPCancelStop$0$label_86#1;
+
+ inline$BDLPnPCancelStop$0$label_86#1:
+ goto inline$BDLPnPCancelStop$0$label_86_true#1, inline$BDLPnPCancelStop$0$label_86_false#1;
+
+ inline$BDLPnPCancelStop$0$label_86_false#1:
+ assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$, 4) == 0;
+ goto inline$BDLPnPCancelStop$0$label_87#1;
+
+ inline$BDLPnPCancelStop$0$label_86_true#1:
+ assume BIT_BAND(inline$BDLPnPCancelStop$0$$result.BDLGetDebugLevel$2169.0$36$, 4) != 0;
+ goto inline$BDLPnPCancelStop$0$label_88#1;
+
+ inline$BDLPnPCancelStop$0$label_88#1:
+ goto inline$BDLPnPCancelStop$0$label_87#1;
+
+ inline$BDLPnPCancelStop$0$label_87#1:
+ inline$BDLPnPCancelStop$0$$result.BDLPnPCancelStop$2130.0$1$ := inline$BDLPnPCancelStop$0$$status$4$2137.16$BDLPnPCancelStop$12;
+ goto inline$BDLPnPCancelStop$0$label_1#1;
+
+ inline$BDLPnPCancelStop$0$label_1#1:
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon29_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon28_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon27_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon25_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon24_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelStop$0$Return#1;
+
+ inline$BDLPnPCancelStop$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPCancelStop$925.33$30$ := inline$BDLPnPCancelStop$0$$result.BDLPnPCancelStop$2130.0$1$;
+ goto inline$BDLPnP$0$label_131$1#1;
+
+ inline$BDLPnP$0$label_131$1#1:
+ goto inline$BDLPnP$0$anon73_Then#1, inline$BDLPnP$0$anon73_Else#1;
+
+ inline$BDLPnP$0$anon73_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon39#1;
+
+ inline$BDLPnP$0$anon39#1:
+ goto inline$BDLPnP$0$label_148#1;
+
+ inline$BDLPnP$0$label_148#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPCancelStop$925.33$30$;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon73_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_6#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 5;
+ goto inline$BDLPnP$0$label_128#1;
+
+ inline$BDLPnP$0$label_128#1:
+ goto inline$BDLPnPQueryStop$0$Entry#1;
+
+ inline$BDLPnPQueryStop$0$Entry#1:
+ inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPQueryStop$0$start#1;
+
+ inline$BDLPnPQueryStop$0$start#1:
+ call inline$BDLPnPQueryStop$0$$irql$5$2082.16$BDLPnPQueryStop$12 := __HAVOC_malloc(1);
+ inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12 := inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12_.1;
+ inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12 := inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12_.1;
+ goto inline$BDLPnPQueryStop$0$label_3#1;
+
+ inline$BDLPnPQueryStop$0$label_3#1:
+ goto inline$BDLPnPQueryStop$0$label_4#1;
+
+ inline$BDLPnPQueryStop$0$label_4#1:
+ inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12 := 0;
+ goto inline$BDLPnPQueryStop$0$label_5#1;
+
+ inline$BDLPnPQueryStop$0$label_5#1:
+ goto inline$BDLPnPQueryStop$0$label_6#1;
+
+ inline$BDLPnPQueryStop$0$label_6#1:
+ goto inline$BDLGetDebugLevel$475$Entry#1;
+
+ inline$BDLGetDebugLevel$475$Entry#1:
+ goto inline$BDLGetDebugLevel$475$start#1;
+
+ inline$BDLGetDebugLevel$475$start#1:
+ goto inline$BDLGetDebugLevel$475$label_3#1;
+
+ inline$BDLGetDebugLevel$475$label_3#1:
+ havoc inline$BDLGetDebugLevel$475$myNondetVar_0;
+ inline$BDLGetDebugLevel$475$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$475$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$475$label_1#1;
+
+ inline$BDLGetDebugLevel$475$label_1#1:
+ goto inline$BDLGetDebugLevel$475$Return#1;
+
+ inline$BDLGetDebugLevel$475$Return#1:
+ inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$ := inline$BDLGetDebugLevel$475$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryStop$0$label_6$1#1;
+
+ inline$BDLPnPQueryStop$0$label_6$1#1:
+ goto inline$BDLPnPQueryStop$0$anon22_Then#1, inline$BDLPnPQueryStop$0$anon22_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon1#1;
+
+ inline$BDLPnPQueryStop$0$anon1#1:
+ goto inline$BDLPnPQueryStop$0$label_9#1;
+
+ inline$BDLPnPQueryStop$0$label_9#1:
+ goto inline$BDLPnPQueryStop$0$label_9_true#1, inline$BDLPnPQueryStop$0$label_9_false#1;
+
+ inline$BDLPnPQueryStop$0$label_9_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$) == 0;
+ goto inline$BDLPnPQueryStop$0$label_10#1;
+
+ inline$BDLPnPQueryStop$0$label_9_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$2$) != 0;
+ goto inline$BDLPnPQueryStop$0$label_13#1;
+
+ inline$BDLPnPQueryStop$0$label_13#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_14#1;
+
+ inline$BDLPnPQueryStop$0$label_14#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_15#1;
+
+ inline$BDLPnPQueryStop$0$label_15#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_16#1;
+
+ inline$BDLPnPQueryStop$0$label_16#1:
+ havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$3$;
+ goto inline$BDLPnPQueryStop$0$label_10#1;
+
+ inline$BDLPnPQueryStop$0$label_10#1:
+ goto inline$BDLGetDebugLevel$476$Entry#1;
+
+ inline$BDLGetDebugLevel$476$Entry#1:
+ goto inline$BDLGetDebugLevel$476$start#1;
+
+ inline$BDLGetDebugLevel$476$start#1:
+ goto inline$BDLGetDebugLevel$476$label_3#1;
+
+ inline$BDLGetDebugLevel$476$label_3#1:
+ havoc inline$BDLGetDebugLevel$476$myNondetVar_0;
+ inline$BDLGetDebugLevel$476$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$476$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$476$label_1#1;
+
+ inline$BDLGetDebugLevel$476$label_1#1:
+ goto inline$BDLGetDebugLevel$476$Return#1;
+
+ inline$BDLGetDebugLevel$476$Return#1:
+ inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$ := inline$BDLGetDebugLevel$476$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryStop$0$label_10$1#1;
+
+ inline$BDLPnPQueryStop$0$label_10$1#1:
+ goto inline$BDLPnPQueryStop$0$anon23_Then#1, inline$BDLPnPQueryStop$0$anon23_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon3#1;
+
+ inline$BDLPnPQueryStop$0$anon3#1:
+ goto inline$BDLPnPQueryStop$0$label_19#1;
+
+ inline$BDLPnPQueryStop$0$label_19#1:
+ goto inline$BDLPnPQueryStop$0$label_19_true#1, inline$BDLPnPQueryStop$0$label_19_false#1;
+
+ inline$BDLPnPQueryStop$0$label_19_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$) == 0;
+ goto inline$BDLPnPQueryStop$0$label_20#1;
+
+ inline$BDLPnPQueryStop$0$label_19_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$7$) != 0;
+ goto inline$BDLPnPQueryStop$0$label_23#1;
+
+ inline$BDLPnPQueryStop$0$label_23#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_24#1;
+
+ inline$BDLPnPQueryStop$0$label_24#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_25#1;
+
+ inline$BDLPnPQueryStop$0$label_25#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_26#1;
+
+ inline$BDLPnPQueryStop$0$label_26#1:
+ havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2085.0$8$;
+ goto inline$BDLPnPQueryStop$0$label_20#1;
+
+ inline$BDLPnPQueryStop$0$label_20#1:
+ goto inline$BDLGetDebugLevel$477$Entry#1;
+
+ inline$BDLGetDebugLevel$477$Entry#1:
+ goto inline$BDLGetDebugLevel$477$start#1;
+
+ inline$BDLGetDebugLevel$477$start#1:
+ goto inline$BDLGetDebugLevel$477$label_3#1;
+
+ inline$BDLGetDebugLevel$477$label_3#1:
+ havoc inline$BDLGetDebugLevel$477$myNondetVar_0;
+ inline$BDLGetDebugLevel$477$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$477$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$477$label_1#1;
+
+ inline$BDLGetDebugLevel$477$label_1#1:
+ goto inline$BDLGetDebugLevel$477$Return#1;
+
+ inline$BDLGetDebugLevel$477$Return#1:
+ inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$ := inline$BDLGetDebugLevel$477$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryStop$0$label_20$1#1;
+
+ inline$BDLPnPQueryStop$0$label_20$1#1:
+ goto inline$BDLPnPQueryStop$0$anon24_Then#1, inline$BDLPnPQueryStop$0$anon24_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon24_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon5#1;
+
+ inline$BDLPnPQueryStop$0$anon5#1:
+ goto inline$BDLPnPQueryStop$0$label_29#1;
+
+ inline$BDLPnPQueryStop$0$label_29#1:
+ goto inline$BDLPnPQueryStop$0$label_29_true#1, inline$BDLPnPQueryStop$0$label_29_false#1;
+
+ inline$BDLPnPQueryStop$0$label_29_false#1:
+ assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$, 4) == 0;
+ goto inline$BDLPnPQueryStop$0$label_30#1;
+
+ inline$BDLPnPQueryStop$0$label_29_true#1:
+ assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2085.0$12$, 4) != 0;
+ goto inline$BDLPnPQueryStop$0$label_33#1;
+
+ inline$BDLPnPQueryStop$0$label_33#1:
+ goto inline$BDLPnPQueryStop$0$label_30#1;
+
+ inline$BDLPnPQueryStop$0$label_30#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_1;
+ assume inline$BDLPnPQueryStop$0$myNondetVar_0 == inline$BDLPnPQueryStop$0$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$2$Entry#1;
+
+ inline$storm_KeAcquireSpinLock$2$Entry#1:
+ inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
+ goto inline$storm_KeAcquireSpinLock$2$start#1;
+
+ inline$storm_KeAcquireSpinLock$2$start#1:
+ inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
+ goto inline$storm_KeAcquireSpinLock$2$label_3#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_3#1:
+ goto inline$storm_KeAcquireSpinLock$2$label_4#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_4#1:
+ goto inline$storm_getThreadID$5$Entry#1;
+
+ inline$storm_getThreadID$5$Entry#1:
+ goto inline$storm_getThreadID$5$anon0#1;
+
+ inline$storm_getThreadID$5$anon0#1:
+ inline$storm_getThreadID$5$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$5$Return#1;
+
+ inline$storm_getThreadID$5$Return#1:
+ inline$storm_KeAcquireSpinLock$2$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$5$tid;
+ goto inline$storm_KeAcquireSpinLock$2$label_4$1#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_4$1#1:
+ goto inline$storm_KeAcquireSpinLock$2$label_7#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_7#1:
+ inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$2$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$2$label_8#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_8#1:
+ goto inline$storm_KeAcquireSpinLock$2$label_9#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_9#1:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$2$label_12#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_12#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$2$anon7_Then#1, inline$storm_KeAcquireSpinLock$2$anon7_Else#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$2$anon1#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$2$label_13#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_13#1:
+ goto inline$storm_KeAcquireSpinLock$2$label_13_true#1, inline$storm_KeAcquireSpinLock$2$label_13_false#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_13_false#1:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$2$label_14#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_14#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$2$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_13_true#1:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$2$label_17#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_17#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$2$anon8_Then#1, inline$storm_KeAcquireSpinLock$2$anon8_Else#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$2$anon4#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon4#1:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$2$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
+ goto inline$storm_KeAcquireSpinLock$2$label_18#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_18#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$2$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$2$$tid$3$128.6$storm_KeAcquireSpinLock$8];
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$2$label_19#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_19#1:
+ goto inline$storm_KeAcquireSpinLock$2$anon9_Then#1, inline$storm_KeAcquireSpinLock$2$anon9_Else#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon9_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$2$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon9_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$2$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon6#1:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$2$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$2$label_1#1:
+ goto inline$storm_KeAcquireSpinLock$2$Return#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$2$Return#1;
+
+ inline$storm_KeAcquireSpinLock$2$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$2$Return#1;
+
+ inline$storm_KeAcquireSpinLock$2$Return#1:
+ goto inline$BDLPnPQueryStop$0$label_30$1#1;
+
+ inline$BDLPnPQueryStop$0$label_30$1#1:
+ goto inline$BDLPnPQueryStop$0$anon25_Then#1, inline$BDLPnPQueryStop$0$anon25_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon25_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon7#1;
+
+ inline$BDLPnPQueryStop$0$anon7#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ goto inline$BDLPnPQueryStop$0$label_34#1;
+
+ inline$BDLPnPQueryStop$0$label_34#1:
+ goto inline$BDLPnPQueryStop$0$label_34_true#1, inline$BDLPnPQueryStop$0$label_34_false#1;
+
+ inline$BDLPnPQueryStop$0$label_34_false#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ assume !INT_ULT(0, inline$BDLPnPQueryStop$0$myNondetVar_0);
+ goto inline$BDLPnPQueryStop$0$label_35#1;
+
+ inline$BDLPnPQueryStop$0$label_35#1:
+ goto inline$storm_KeClearEvent$0$Entry#1;
+
+ inline$storm_KeClearEvent$0$Entry#1:
+ inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
+ goto inline$storm_KeClearEvent$0$start#1;
+
+ inline$storm_KeClearEvent$0$start#1:
+ inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4 := inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4_.1;
+ goto inline$storm_KeClearEvent$0$label_3#1;
+
+ inline$storm_KeClearEvent$0$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeClearEvent$0$$Event$1$236.14$storm_KeClearEvent$4 := 0];
+ call contextSwitch();
+ goto inline$storm_KeClearEvent$0$label_1#1;
+
+ inline$storm_KeClearEvent$0$label_1#1:
+ goto inline$storm_KeClearEvent$0$Return#1;
+
+ inline$storm_KeClearEvent$0$Return#1:
+ goto inline$BDLPnPQueryStop$0$label_35$1#1;
+
+ inline$BDLPnPQueryStop$0$label_35$1#1:
+ goto inline$BDLPnPQueryStop$0$anon26_Then#1, inline$BDLPnPQueryStop$0$anon26_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon26_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon9#1;
+
+ inline$BDLPnPQueryStop$0$anon9#1:
+ goto inline$BDLPnPQueryStop$0$label_68#1;
+
+ inline$BDLPnPQueryStop$0$label_68#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_1;
+ assume inline$BDLPnPQueryStop$0$myNondetVar_0 == inline$BDLPnPQueryStop$0$myNondetVar_1;
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$4$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$4$Entry#1:
+ inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
+ goto inline$storm_KeReleaseSpinLock$4$start#1;
+
+ inline$storm_KeReleaseSpinLock$4$start#1:
+ inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$4$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$4$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$4$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$4$anon5_Then#1, inline$storm_KeReleaseSpinLock$4$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$4$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$4$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$4$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$4$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_8#1:
+ goto inline$storm_getThreadID$7$Entry#1;
+
+ inline$storm_getThreadID$7$Entry#1:
+ goto inline$storm_getThreadID$7$anon0#1;
+
+ inline$storm_getThreadID$7$anon0#1:
+ inline$storm_getThreadID$7$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$7$Return#1;
+
+ inline$storm_getThreadID$7$Return#1:
+ inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$7$tid;
+ goto inline$storm_KeReleaseSpinLock$4$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$4$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$4$label_11_true#1, inline$storm_KeReleaseSpinLock$4$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$4$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$4$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$4$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$4$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$4$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$4$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$4$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$4$anon6_Then#1, inline$storm_KeReleaseSpinLock$4$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$4$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$4$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$4$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$4$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$4$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$4$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$4$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$4$Return#1;
+
+ inline$storm_KeReleaseSpinLock$4$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$4$Return#1;
+
+ inline$storm_KeReleaseSpinLock$4$Return#1:
+ goto inline$BDLPnPQueryStop$0$label_68$1#1;
+
+ inline$BDLPnPQueryStop$0$label_68$1#1:
+ goto inline$BDLPnPQueryStop$0$anon31_Then#1, inline$BDLPnPQueryStop$0$anon31_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon19#1;
+
+ inline$BDLPnPQueryStop$0$anon19#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ goto inline$BDLPnPQueryStop$0$label_71#1;
+
+ inline$BDLPnPQueryStop$0$label_71#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Entry#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$Entry#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPQueryStop$0$$pIrp$3$2078.40$BDLPnPQueryStop$12;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$start#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$start#1:
+ call inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
+ inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_4#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_4#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_6#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_6#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$Entry#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$Entry#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$start#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$start#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_4#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_4#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_5#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_5#1:
+ goto inline$IoGetCurrentIrpStackLocation$92$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetCurrentIrpStackLocation$92$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$start#1:
+ inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$92$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$92$label_3_true#1, inline$IoGetCurrentIrpStackLocation$92$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$92$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$92$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$92$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$92$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$92$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$92$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$92$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$92$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$92$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$92$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$92$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$92$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$92$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$92$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$92$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$92$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$92$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$92$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$92$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$92$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_5$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_5$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$anon1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_8#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_8#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_9#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_9#1:
+ goto inline$IoGetNextIrpStackLocation$9$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$9$Entry#1:
+ inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$4$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetNextIrpStackLocation$9$start#1;
+
+ inline$IoGetNextIrpStackLocation$9$start#1:
+ inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$9$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$9$label_3_true#1, inline$IoGetNextIrpStackLocation$9$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$9$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$9$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_4#1:
+ call inline$IoGetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$9$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_6#1:
+ call inline$IoGetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$9$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$9$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$9$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$9$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$9$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$9$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$9$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$9$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$9$Return#1;
+
+ inline$IoGetNextIrpStackLocation$9$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_9$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_9$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$anon3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$anon3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_12#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_12#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_13#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_13#1:
+ havoc inline$IoCopyCurrentIrpStackLocationToNext$4$$result.memcpy$25110.4$3$;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_16#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_16#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$label_1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$label_1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$anon5_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$anon4_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$4$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_6$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_6$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon16_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_9#1:
+ goto inline$storm_KeInitializeEvent$4$Entry#1;
+
+ inline$storm_KeInitializeEvent$4$Entry#1:
+ inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
+ goto inline$storm_KeInitializeEvent$4$start#1;
+
+ inline$storm_KeInitializeEvent$4$start#1:
+ inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
+ inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12_.1;
+ goto inline$storm_KeInitializeEvent$4$label_3#1;
+
+ inline$storm_KeInitializeEvent$4$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$4$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$4$$State$3$205.13$storm_KeInitializeEvent$12];
+ call contextSwitch();
+ goto inline$storm_KeInitializeEvent$4$label_1#1;
+
+ inline$storm_KeInitializeEvent$4$label_1#1:
+ goto inline$storm_KeInitializeEvent$4$Return#1;
+
+ inline$storm_KeInitializeEvent$4$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_9$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_9$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon17_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_12#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$4$Entry#1;
+
+ inline$storm_IoSetCompletionRoutine$4$Entry#1:
+ inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoSetCompletionRoutine$4$start#1;
+
+ inline$storm_IoSetCompletionRoutine$4$start#1:
+ inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
+ goto inline$storm_IoSetCompletionRoutine$4$label_3#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_3#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_4#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_4#1:
+ call inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$ := storm_nondet();
+ goto inline$storm_IoSetCompletionRoutine$4$label_7#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_7#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_7_true#1, inline$storm_IoSetCompletionRoutine$4$label_7_false#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_7_false#1:
+ assume inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$ == 0;
+ goto inline$storm_IoSetCompletionRoutine$4$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_7_true#1:
+ assume inline$storm_IoSetCompletionRoutine$4$$result.storm_nondet$405.2$1$ != 0;
+ goto inline$storm_IoSetCompletionRoutine$4$label_11#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_11#1:
+ havoc raiseException;
+ goto inline$storm_IoSetCompletionRoutine$4$anon6_Then#1, inline$storm_IoSetCompletionRoutine$4$anon6_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$4$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$4$anon3#1;
+
+ inline$storm_IoSetCompletionRoutine$4$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCompletionRoutine$4$label_12#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_12_true#1, inline$storm_IoSetCompletionRoutine$4$label_12_false#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_12_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoSetCompletionRoutine$4$label_13#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_13#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCompletionRoutine$4$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_12_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoSetCompletionRoutine$4$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_8#1:
+ goto inline$IoGetNextIrpStackLocation$10$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$10$Entry#1:
+ inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$4$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
+ goto inline$IoGetNextIrpStackLocation$10$start#1;
+
+ inline$IoGetNextIrpStackLocation$10$start#1:
+ inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$10$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$10$label_3_true#1, inline$IoGetNextIrpStackLocation$10$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$10$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$10$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_4#1:
+ call inline$IoGetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$10$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_6#1:
+ call inline$IoGetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$10$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$10$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$10$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$10$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$10$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$10$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$10$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$10$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$10$Return#1;
+
+ inline$IoGetNextIrpStackLocation$10$Return#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_8$1#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_8$1#1:
+ goto inline$storm_IoSetCompletionRoutine$4$anon5_Then#1, inline$storm_IoSetCompletionRoutine$4$anon5_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$4$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$4$anon1#1;
+
+ inline$storm_IoSetCompletionRoutine$4$anon1#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_16#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_16#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_17#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_17#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_18#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_18#1:
+ goto inline$storm_IoSetCompletionRoutine$4$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$4$label_1#1:
+ goto inline$storm_IoSetCompletionRoutine$4$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$4$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$4$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$4$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$4$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$4$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_12$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_12$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon18_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_15#1:
+ goto inline$IoGetCurrentIrpStackLocation$93$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoGetCurrentIrpStackLocation$93$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$start#1:
+ inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$93$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$93$label_3_true#1, inline$IoGetCurrentIrpStackLocation$93$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$93$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$93$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$93$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$93$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$93$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$93$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$93$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$93$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$93$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$93$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$93$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$93$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$93$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$93$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$93$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$93$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$93$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$93$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$93$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$93$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_15$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_15$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon19_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon7#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon7#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_18#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_18#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$4$label_18_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_18_false#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_19#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_19#1:
+ goto inline$storm_IoCallDriver$9$Entry#1;
+
+ inline$storm_IoCallDriver$9$Entry#1:
+ inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoCallDriver$9$start#1;
+
+ inline$storm_IoCallDriver$9$start#1:
+ inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$9$label_3#1;
+
+ inline$storm_IoCallDriver$9$label_3#1:
+ goto inline$storm_IoCallDriver$9$label_4#1;
+
+ inline$storm_IoCallDriver$9$label_4#1:
+ goto inline$storm_IoCallDriver$9$label_5#1;
+
+ inline$storm_IoCallDriver$9$label_5#1:
+ goto inline$storm_IoCallDriver$9$label_6#1;
+
+ inline$storm_IoCallDriver$9$label_6#1:
+ call inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$9$label_9#1;
+
+ inline$storm_IoCallDriver$9$label_9#1:
+ goto inline$storm_IoCallDriver$9$label_9_true#1, inline$storm_IoCallDriver$9$label_9_false#1;
+
+ inline$storm_IoCallDriver$9$label_9_false#1:
+ assume inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$9$label_10#1;
+
+ inline$storm_IoCallDriver$9$label_9_true#1:
+ assume inline$storm_IoCallDriver$9$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$9$label_13#1;
+
+ inline$storm_IoCallDriver$9$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$9$anon12_Then#1, inline$storm_IoCallDriver$9$anon12_Else#1;
+
+ inline$storm_IoCallDriver$9$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$9$anon3#1;
+
+ inline$storm_IoCallDriver$9$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$9$label_14#1;
+
+ inline$storm_IoCallDriver$9$label_14#1:
+ goto inline$storm_IoCallDriver$9$label_14_true#1, inline$storm_IoCallDriver$9$label_14_false#1;
+
+ inline$storm_IoCallDriver$9$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$9$label_15#1;
+
+ inline$storm_IoCallDriver$9$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$9$label_1#1;
+
+ inline$storm_IoCallDriver$9$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$9$label_10#1;
+
+ inline$storm_IoCallDriver$9$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$10$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$10$Entry#1:
+ inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$10$start#1;
+
+ inline$IoSetNextIrpStackLocation$10$start#1:
+ inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$10$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$10$label_3_true#1, inline$IoSetNextIrpStackLocation$10$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$10$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$10$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_4#1:
+ call inline$IoSetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$10$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_7#1:
+ call inline$IoSetNextIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$10$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$10$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$10$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$10$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_5#1:
+ inline$IoSetNextIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$10$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$10$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$10$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$10$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$10$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$10$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$10$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$10$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$10$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$10$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$10$Return#1;
+
+ inline$IoSetNextIrpStackLocation$10$Return#1:
+ goto inline$storm_IoCallDriver$9$label_10$1#1;
+
+ inline$storm_IoCallDriver$9$label_10$1#1:
+ goto inline$storm_IoCallDriver$9$anon11_Then#1, inline$storm_IoCallDriver$9$anon11_Else#1;
+
+ inline$storm_IoCallDriver$9$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$9$anon1#1;
+
+ inline$storm_IoCallDriver$9$anon1#1:
+ goto inline$storm_IoCallDriver$9$label_18#1;
+
+ inline$storm_IoCallDriver$9$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$94$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$94$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$start#1:
+ inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$94$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$94$label_3_true#1, inline$IoGetCurrentIrpStackLocation$94$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$94$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$94$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$94$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$94$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$94$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$94$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$94$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$94$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$94$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$94$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$94$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$94$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$94$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$94$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$94$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$94$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$94$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$94$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$94$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$94$Return#1:
+ goto inline$storm_IoCallDriver$9$label_18$1#1;
+
+ inline$storm_IoCallDriver$9$label_18$1#1:
+ goto inline$storm_IoCallDriver$9$anon13_Then#1, inline$storm_IoCallDriver$9$anon13_Else#1;
+
+ inline$storm_IoCallDriver$9$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$9$anon6#1;
+
+ inline$storm_IoCallDriver$9$anon6#1:
+ goto inline$storm_IoCallDriver$9$label_21#1;
+
+ inline$storm_IoCallDriver$9$label_21#1:
+ goto inline$storm_IoCallDriver$9$label_22#1;
+
+ inline$storm_IoCallDriver$9$label_22#1:
+ goto inline$storm_IoCallDriver$9$label_23#1;
+
+ inline$storm_IoCallDriver$9$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$9$label_24#1;
+
+ inline$storm_IoCallDriver$9$label_24#1:
+ call inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$9$label_27#1;
+
+ inline$storm_IoCallDriver$9$label_27#1:
+ goto inline$storm_IoCallDriver$9$label_27_case_0#1, inline$storm_IoCallDriver$9$label_27_case_1#1, inline$storm_IoCallDriver$9$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$9$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$9$label_30#1;
+
+ inline$storm_IoCallDriver$9$label_30#1:
+ inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$9$label_31#1;
+
+ inline$storm_IoCallDriver$9$label_31#1:
+ goto inline$storm_IoCallDriver$9$label_32#1;
+
+ inline$storm_IoCallDriver$9$label_32#1:
+ goto inline$storm_IoCallDriver$9$label_33#1;
+
+ inline$storm_IoCallDriver$9$label_33#1:
+ goto inline$CallCompletionRoutine$18$Entry#1;
+
+ inline$CallCompletionRoutine$18$Entry#1:
+ inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$18$start#1;
+
+ inline$CallCompletionRoutine$18$start#1:
+ inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$18$label_3#1;
+
+ inline$CallCompletionRoutine$18$label_3#1:
+ goto inline$CallCompletionRoutine$18$label_4#1;
+
+ inline$CallCompletionRoutine$18$label_4#1:
+ goto inline$CallCompletionRoutine$18$label_5#1;
+
+ inline$CallCompletionRoutine$18$label_5#1:
+ goto inline$CallCompletionRoutine$18$label_6#1;
+
+ inline$CallCompletionRoutine$18$label_6#1:
+ goto inline$CallCompletionRoutine$18$label_7#1;
+
+ inline$CallCompletionRoutine$18$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$95$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$95$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$start#1:
+ inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$95$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$95$label_3_true#1, inline$IoGetCurrentIrpStackLocation$95$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$95$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$95$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$95$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$95$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$95$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$95$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$95$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$95$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$95$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$95$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$95$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$95$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$95$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$95$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$95$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$95$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$95$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$95$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$95$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$95$Return#1:
+ goto inline$CallCompletionRoutine$18$label_7$1#1;
+
+ inline$CallCompletionRoutine$18$label_7$1#1:
+ goto inline$CallCompletionRoutine$18$anon10_Then#1, inline$CallCompletionRoutine$18$anon10_Else#1;
+
+ inline$CallCompletionRoutine$18$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$18$anon1#1;
+
+ inline$CallCompletionRoutine$18$anon1#1:
+ goto inline$CallCompletionRoutine$18$label_10#1;
+
+ inline$CallCompletionRoutine$18$label_10#1:
+ goto inline$CallCompletionRoutine$18$label_11#1;
+
+ inline$CallCompletionRoutine$18$label_11#1:
+ havoc inline$CallCompletionRoutine$18$myNondetVar_0;
+ inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$myNondetVar_0;
+ goto inline$CallCompletionRoutine$18$label_12#1;
+
+ inline$CallCompletionRoutine$18$label_12#1:
+ havoc inline$CallCompletionRoutine$18$myNondetVar_0;
+ inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$myNondetVar_0;
+ goto inline$CallCompletionRoutine$18$label_13#1;
+
+ inline$CallCompletionRoutine$18$label_13#1:
+ havoc inline$CallCompletionRoutine$18$myNondetVar_0;
+ goto inline$CallCompletionRoutine$18$label_14#1;
+
+ inline$CallCompletionRoutine$18$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$96$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$96$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$start#1:
+ inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$96$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$96$label_3_true#1, inline$IoGetCurrentIrpStackLocation$96$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$96$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$96$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$96$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$96$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$96$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$96$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$96$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$96$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$96$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$96$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$96$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$96$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$96$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$96$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$96$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$96$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$96$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$96$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$96$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$96$Return#1:
+ goto inline$CallCompletionRoutine$18$label_14$1#1;
+
+ inline$CallCompletionRoutine$18$label_14$1#1:
+ goto inline$CallCompletionRoutine$18$anon11_Then#1, inline$CallCompletionRoutine$18$anon11_Else#1;
+
+ inline$CallCompletionRoutine$18$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$18$anon3#1;
+
+ inline$CallCompletionRoutine$18$anon3#1:
+ goto inline$CallCompletionRoutine$18$label_17#1;
+
+ inline$CallCompletionRoutine$18$label_17#1:
+ goto inline$CallCompletionRoutine$18$label_18#1;
+
+ inline$CallCompletionRoutine$18$label_18#1:
+ goto inline$CallCompletionRoutine$18$label_18_true#1, inline$CallCompletionRoutine$18$label_18_false#1;
+
+ inline$CallCompletionRoutine$18$label_18_false#1:
+ assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$18$label_1#1;
+
+ inline$CallCompletionRoutine$18$label_18_true#1:
+ assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$18$label_19#1;
+
+ inline$CallCompletionRoutine$18$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$18$label_20#1;
+
+ inline$CallCompletionRoutine$18$label_20#1:
+ goto inline$CallCompletionRoutine$18$label_20_icall_1#1, inline$CallCompletionRoutine$18$label_20_icall_2#1, inline$CallCompletionRoutine$18$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$18$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$18$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$18$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$18$Entry#1:
+ inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$18$start#1;
+
+ inline$BDLSystemPowerIoCompletion$18$start#1:
+ call inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$18$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_4#1:
+ inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_6#1:
+ inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$18$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$18$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$98$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$98$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$start#1:
+ inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$98$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$98$label_3_true#1, inline$IoGetCurrentIrpStackLocation$98$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$98$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$98$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$98$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$98$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$98$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$98$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$98$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$98$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$98$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$98$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$98$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$98$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$98$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$98$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$98$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$98$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$98$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$98$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$98$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$98$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon36_Then#1, inline$BDLSystemPowerIoCompletion$18$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_15#1:
+ goto inline$BDLGetDebugLevel$490$Entry#1;
+
+ inline$BDLGetDebugLevel$490$Entry#1:
+ goto inline$BDLGetDebugLevel$490$start#1;
+
+ inline$BDLGetDebugLevel$490$start#1:
+ goto inline$BDLGetDebugLevel$490$label_3#1;
+
+ inline$BDLGetDebugLevel$490$label_3#1:
+ havoc inline$BDLGetDebugLevel$490$myNondetVar_0;
+ inline$BDLGetDebugLevel$490$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$490$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$490$label_1#1;
+
+ inline$BDLGetDebugLevel$490$label_1#1:
+ goto inline$BDLGetDebugLevel$490$Return#1;
+
+ inline$BDLGetDebugLevel$490$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$490$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon37_Then#1, inline$BDLSystemPowerIoCompletion$18$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_18_true#1, inline$BDLSystemPowerIoCompletion$18$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_19#1:
+ goto inline$BDLGetDebugLevel$491$Entry#1;
+
+ inline$BDLGetDebugLevel$491$Entry#1:
+ goto inline$BDLGetDebugLevel$491$start#1;
+
+ inline$BDLGetDebugLevel$491$start#1:
+ goto inline$BDLGetDebugLevel$491$label_3#1;
+
+ inline$BDLGetDebugLevel$491$label_3#1:
+ havoc inline$BDLGetDebugLevel$491$myNondetVar_0;
+ inline$BDLGetDebugLevel$491$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$491$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$491$label_1#1;
+
+ inline$BDLGetDebugLevel$491$label_1#1:
+ goto inline$BDLGetDebugLevel$491$Return#1;
+
+ inline$BDLGetDebugLevel$491$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$491$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon38_Then#1, inline$BDLSystemPowerIoCompletion$18$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_28_true#1, inline$BDLSystemPowerIoCompletion$18$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_29#1:
+ goto inline$BDLGetDebugLevel$492$Entry#1;
+
+ inline$BDLGetDebugLevel$492$Entry#1:
+ goto inline$BDLGetDebugLevel$492$start#1;
+
+ inline$BDLGetDebugLevel$492$start#1:
+ goto inline$BDLGetDebugLevel$492$label_3#1;
+
+ inline$BDLGetDebugLevel$492$label_3#1:
+ havoc inline$BDLGetDebugLevel$492$myNondetVar_0;
+ inline$BDLGetDebugLevel$492$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$492$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$492$label_1#1;
+
+ inline$BDLGetDebugLevel$492$label_1#1:
+ goto inline$BDLGetDebugLevel$492$Return#1;
+
+ inline$BDLGetDebugLevel$492$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$492$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon39_Then#1, inline$BDLSystemPowerIoCompletion$18$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_38_true#1, inline$BDLSystemPowerIoCompletion$18$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_39_true#1, inline$BDLSystemPowerIoCompletion$18$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$18$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$18$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$18$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$18$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$18$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_106_true#1, inline$BDLSystemPowerIoCompletion$18$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$18$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$18$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$18$myNondetVar_0, inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$18$anon50_Then#1, inline$BDLSystemPowerIoCompletion$18$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_112#1:
+ inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_113_true#1, inline$BDLSystemPowerIoCompletion$18$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$18$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_117#1:
+ goto inline$BDLGetDebugLevel$499$Entry#1;
+
+ inline$BDLGetDebugLevel$499$Entry#1:
+ goto inline$BDLGetDebugLevel$499$start#1;
+
+ inline$BDLGetDebugLevel$499$start#1:
+ goto inline$BDLGetDebugLevel$499$label_3#1;
+
+ inline$BDLGetDebugLevel$499$label_3#1:
+ havoc inline$BDLGetDebugLevel$499$myNondetVar_0;
+ inline$BDLGetDebugLevel$499$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$499$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$499$label_1#1;
+
+ inline$BDLGetDebugLevel$499$label_1#1:
+ goto inline$BDLGetDebugLevel$499$Return#1;
+
+ inline$BDLGetDebugLevel$499$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$499$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon51_Then#1, inline$BDLSystemPowerIoCompletion$18$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_120_true#1, inline$BDLSystemPowerIoCompletion$18$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_121#1:
+ goto inline$BDLGetDebugLevel$500$Entry#1;
+
+ inline$BDLGetDebugLevel$500$Entry#1:
+ goto inline$BDLGetDebugLevel$500$start#1;
+
+ inline$BDLGetDebugLevel$500$start#1:
+ goto inline$BDLGetDebugLevel$500$label_3#1;
+
+ inline$BDLGetDebugLevel$500$label_3#1:
+ havoc inline$BDLGetDebugLevel$500$myNondetVar_0;
+ inline$BDLGetDebugLevel$500$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$500$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$500$label_1#1;
+
+ inline$BDLGetDebugLevel$500$label_1#1:
+ goto inline$BDLGetDebugLevel$500$Return#1;
+
+ inline$BDLGetDebugLevel$500$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$500$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon52_Then#1, inline$BDLSystemPowerIoCompletion$18$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_130_true#1, inline$BDLSystemPowerIoCompletion$18$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_131#1:
+ goto inline$BDLGetDebugLevel$501$Entry#1;
+
+ inline$BDLGetDebugLevel$501$Entry#1:
+ goto inline$BDLGetDebugLevel$501$start#1;
+
+ inline$BDLGetDebugLevel$501$start#1:
+ goto inline$BDLGetDebugLevel$501$label_3#1;
+
+ inline$BDLGetDebugLevel$501$label_3#1:
+ havoc inline$BDLGetDebugLevel$501$myNondetVar_0;
+ inline$BDLGetDebugLevel$501$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$501$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$501$label_1#1;
+
+ inline$BDLGetDebugLevel$501$label_1#1:
+ goto inline$BDLGetDebugLevel$501$Return#1;
+
+ inline$BDLGetDebugLevel$501$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$501$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon53_Then#1, inline$BDLSystemPowerIoCompletion$18$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_140_true#1, inline$BDLSystemPowerIoCompletion$18$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$18$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_115#1:
+ inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$18$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$18$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$18$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_43#1:
+ goto inline$BDLGetDebugLevel$493$Entry#1;
+
+ inline$BDLGetDebugLevel$493$Entry#1:
+ goto inline$BDLGetDebugLevel$493$start#1;
+
+ inline$BDLGetDebugLevel$493$start#1:
+ goto inline$BDLGetDebugLevel$493$label_3#1;
+
+ inline$BDLGetDebugLevel$493$label_3#1:
+ havoc inline$BDLGetDebugLevel$493$myNondetVar_0;
+ inline$BDLGetDebugLevel$493$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$493$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$493$label_1#1;
+
+ inline$BDLGetDebugLevel$493$label_1#1:
+ goto inline$BDLGetDebugLevel$493$Return#1;
+
+ inline$BDLGetDebugLevel$493$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$493$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon40_Then#1, inline$BDLSystemPowerIoCompletion$18$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_46_true#1, inline$BDLSystemPowerIoCompletion$18$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_47#1:
+ goto inline$BDLGetDebugLevel$494$Entry#1;
+
+ inline$BDLGetDebugLevel$494$Entry#1:
+ goto inline$BDLGetDebugLevel$494$start#1;
+
+ inline$BDLGetDebugLevel$494$start#1:
+ goto inline$BDLGetDebugLevel$494$label_3#1;
+
+ inline$BDLGetDebugLevel$494$label_3#1:
+ havoc inline$BDLGetDebugLevel$494$myNondetVar_0;
+ inline$BDLGetDebugLevel$494$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$494$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$494$label_1#1;
+
+ inline$BDLGetDebugLevel$494$label_1#1:
+ goto inline$BDLGetDebugLevel$494$Return#1;
+
+ inline$BDLGetDebugLevel$494$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$494$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon41_Then#1, inline$BDLSystemPowerIoCompletion$18$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_56_true#1, inline$BDLSystemPowerIoCompletion$18$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_57#1:
+ goto inline$BDLGetDebugLevel$495$Entry#1;
+
+ inline$BDLGetDebugLevel$495$Entry#1:
+ goto inline$BDLGetDebugLevel$495$start#1;
+
+ inline$BDLGetDebugLevel$495$start#1:
+ goto inline$BDLGetDebugLevel$495$label_3#1;
+
+ inline$BDLGetDebugLevel$495$label_3#1:
+ havoc inline$BDLGetDebugLevel$495$myNondetVar_0;
+ inline$BDLGetDebugLevel$495$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$495$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$495$label_1#1;
+
+ inline$BDLGetDebugLevel$495$label_1#1:
+ goto inline$BDLGetDebugLevel$495$Return#1;
+
+ inline$BDLGetDebugLevel$495$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$495$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon42_Then#1, inline$BDLSystemPowerIoCompletion$18$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_66_true#1, inline$BDLSystemPowerIoCompletion$18$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$18$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$18$anon43_Then#1, inline$BDLSystemPowerIoCompletion$18$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$18$anon44_Then#1, inline$BDLSystemPowerIoCompletion$18$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_74#1:
+ goto inline$storm_IoCompleteRequest$38$Entry#1;
+
+ inline$storm_IoCompleteRequest$38$Entry#1:
+ inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$18$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$38$start#1;
+
+ inline$storm_IoCompleteRequest$38$start#1:
+ inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$38$label_3#1;
+
+ inline$storm_IoCompleteRequest$38$label_3#1:
+ call inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$38$label_6#1;
+
+ inline$storm_IoCompleteRequest$38$label_6#1:
+ goto inline$storm_IoCompleteRequest$38$label_6_true#1, inline$storm_IoCompleteRequest$38$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$38$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$38$label_7#1;
+
+ inline$storm_IoCompleteRequest$38$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$38$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$38$label_8#1;
+
+ inline$storm_IoCompleteRequest$38$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$38$anon3_Then#1, inline$storm_IoCompleteRequest$38$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$38$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$38$anon1#1;
+
+ inline$storm_IoCompleteRequest$38$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$38$label_9#1;
+
+ inline$storm_IoCompleteRequest$38$label_9#1:
+ goto inline$storm_IoCompleteRequest$38$label_9_true#1, inline$storm_IoCompleteRequest$38$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$38$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$38$label_10#1;
+
+ inline$storm_IoCompleteRequest$38$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$38$label_1#1;
+
+ inline$storm_IoCompleteRequest$38$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$38$label_7#1;
+
+ inline$storm_IoCompleteRequest$38$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$38$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$38$label_1#1;
+
+ inline$storm_IoCompleteRequest$38$label_1#1:
+ goto inline$storm_IoCompleteRequest$38$Return#1;
+
+ inline$storm_IoCompleteRequest$38$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$38$Return#1;
+
+ inline$storm_IoCompleteRequest$38$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon45_Then#1, inline$BDLSystemPowerIoCompletion$18$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$18$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$18$anon46_Then#1, inline$BDLSystemPowerIoCompletion$18$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_80#1:
+ goto inline$BDLGetDebugLevel$496$Entry#1;
+
+ inline$BDLGetDebugLevel$496$Entry#1:
+ goto inline$BDLGetDebugLevel$496$start#1;
+
+ inline$BDLGetDebugLevel$496$start#1:
+ goto inline$BDLGetDebugLevel$496$label_3#1;
+
+ inline$BDLGetDebugLevel$496$label_3#1:
+ havoc inline$BDLGetDebugLevel$496$myNondetVar_0;
+ inline$BDLGetDebugLevel$496$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$496$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$496$label_1#1;
+
+ inline$BDLGetDebugLevel$496$label_1#1:
+ goto inline$BDLGetDebugLevel$496$Return#1;
+
+ inline$BDLGetDebugLevel$496$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$496$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon47_Then#1, inline$BDLSystemPowerIoCompletion$18$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_83_true#1, inline$BDLSystemPowerIoCompletion$18$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_84#1:
+ goto inline$BDLGetDebugLevel$497$Entry#1;
+
+ inline$BDLGetDebugLevel$497$Entry#1:
+ goto inline$BDLGetDebugLevel$497$start#1;
+
+ inline$BDLGetDebugLevel$497$start#1:
+ goto inline$BDLGetDebugLevel$497$label_3#1;
+
+ inline$BDLGetDebugLevel$497$label_3#1:
+ havoc inline$BDLGetDebugLevel$497$myNondetVar_0;
+ inline$BDLGetDebugLevel$497$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$497$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$497$label_1#1;
+
+ inline$BDLGetDebugLevel$497$label_1#1:
+ goto inline$BDLGetDebugLevel$497$Return#1;
+
+ inline$BDLGetDebugLevel$497$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$497$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon48_Then#1, inline$BDLSystemPowerIoCompletion$18$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_93_true#1, inline$BDLSystemPowerIoCompletion$18$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$18$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$18$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_94#1:
+ goto inline$BDLGetDebugLevel$498$Entry#1;
+
+ inline$BDLGetDebugLevel$498$Entry#1:
+ goto inline$BDLGetDebugLevel$498$start#1;
+
+ inline$BDLGetDebugLevel$498$start#1:
+ goto inline$BDLGetDebugLevel$498$label_3#1;
+
+ inline$BDLGetDebugLevel$498$label_3#1:
+ havoc inline$BDLGetDebugLevel$498$myNondetVar_0;
+ inline$BDLGetDebugLevel$498$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$498$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$498$label_1#1;
+
+ inline$BDLGetDebugLevel$498$label_1#1:
+ goto inline$BDLGetDebugLevel$498$Return#1;
+
+ inline$BDLGetDebugLevel$498$Return#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$498$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$18$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$18$anon49_Then#1, inline$BDLSystemPowerIoCompletion$18$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_103_true#1, inline$BDLSystemPowerIoCompletion$18$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$18$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$18$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$18$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_104#1:
+ inline$BDLSystemPowerIoCompletion$18$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$18$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$18$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$18$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$18$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$18$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$18$Return#1:
+ inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$18$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$18$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$18$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$18$anon14_Then#1, inline$CallCompletionRoutine$18$anon14_Else#1;
+
+ inline$CallCompletionRoutine$18$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$18$anon9#1;
+
+ inline$CallCompletionRoutine$18$anon9#1:
+ goto inline$CallCompletionRoutine$18$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$18$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$18$Return#1;
+
+ inline$CallCompletionRoutine$18$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$18$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$18$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$18$Entry#1:
+ inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$18$start#1;
+
+ inline$BDLDevicePowerIoCompletion$18$start#1:
+ call inline$BDLDevicePowerIoCompletion$18$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$18$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_4#1:
+ inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_6#1:
+ inline$BDLDevicePowerIoCompletion$18$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$18$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$18$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$97$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$97$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$start#1:
+ inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$97$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$97$label_3_true#1, inline$IoGetCurrentIrpStackLocation$97$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$97$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$97$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$97$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$97$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$97$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$97$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$97$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$97$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$97$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$97$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$97$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$97$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$97$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$97$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$97$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$97$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$97$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$97$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$97$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$97$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$97$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$97$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$97$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon30_Then#1, inline$BDLDevicePowerIoCompletion$18$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_13#1:
+ inline$BDLDevicePowerIoCompletion$18$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_17#1:
+ goto inline$BDLGetDebugLevel$481$Entry#1;
+
+ inline$BDLGetDebugLevel$481$Entry#1:
+ goto inline$BDLGetDebugLevel$481$start#1;
+
+ inline$BDLGetDebugLevel$481$start#1:
+ goto inline$BDLGetDebugLevel$481$label_3#1;
+
+ inline$BDLGetDebugLevel$481$label_3#1:
+ havoc inline$BDLGetDebugLevel$481$myNondetVar_0;
+ inline$BDLGetDebugLevel$481$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$481$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$481$label_1#1;
+
+ inline$BDLGetDebugLevel$481$label_1#1:
+ goto inline$BDLGetDebugLevel$481$Return#1;
+
+ inline$BDLGetDebugLevel$481$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$481$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon31_Then#1, inline$BDLDevicePowerIoCompletion$18$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_20_true#1, inline$BDLDevicePowerIoCompletion$18$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_21#1:
+ goto inline$BDLGetDebugLevel$482$Entry#1;
+
+ inline$BDLGetDebugLevel$482$Entry#1:
+ goto inline$BDLGetDebugLevel$482$start#1;
+
+ inline$BDLGetDebugLevel$482$start#1:
+ goto inline$BDLGetDebugLevel$482$label_3#1;
+
+ inline$BDLGetDebugLevel$482$label_3#1:
+ havoc inline$BDLGetDebugLevel$482$myNondetVar_0;
+ inline$BDLGetDebugLevel$482$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$482$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$482$label_1#1;
+
+ inline$BDLGetDebugLevel$482$label_1#1:
+ goto inline$BDLGetDebugLevel$482$Return#1;
+
+ inline$BDLGetDebugLevel$482$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$482$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon32_Then#1, inline$BDLDevicePowerIoCompletion$18$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_30_true#1, inline$BDLDevicePowerIoCompletion$18$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_31#1:
+ goto inline$BDLGetDebugLevel$483$Entry#1;
+
+ inline$BDLGetDebugLevel$483$Entry#1:
+ goto inline$BDLGetDebugLevel$483$start#1;
+
+ inline$BDLGetDebugLevel$483$start#1:
+ goto inline$BDLGetDebugLevel$483$label_3#1;
+
+ inline$BDLGetDebugLevel$483$label_3#1:
+ havoc inline$BDLGetDebugLevel$483$myNondetVar_0;
+ inline$BDLGetDebugLevel$483$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$483$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$483$label_1#1;
+
+ inline$BDLGetDebugLevel$483$label_1#1:
+ goto inline$BDLGetDebugLevel$483$Return#1;
+
+ inline$BDLGetDebugLevel$483$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$483$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon33_Then#1, inline$BDLDevicePowerIoCompletion$18$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_40_true#1, inline$BDLDevicePowerIoCompletion$18$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_41_true#1, inline$BDLDevicePowerIoCompletion$18$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$18$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$18$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_44_true#1, inline$BDLDevicePowerIoCompletion$18$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_45_true#1, inline$BDLDevicePowerIoCompletion$18$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$18$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$18$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$18$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_54#1:
+ inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$18$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_55_true#1, inline$BDLDevicePowerIoCompletion$18$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$18$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$18$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$18$anon34_Then#1, inline$BDLDevicePowerIoCompletion$18$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_59#1:
+ goto inline$BDLGetDebugLevel$484$Entry#1;
+
+ inline$BDLGetDebugLevel$484$Entry#1:
+ goto inline$BDLGetDebugLevel$484$start#1;
+
+ inline$BDLGetDebugLevel$484$start#1:
+ goto inline$BDLGetDebugLevel$484$label_3#1;
+
+ inline$BDLGetDebugLevel$484$label_3#1:
+ havoc inline$BDLGetDebugLevel$484$myNondetVar_0;
+ inline$BDLGetDebugLevel$484$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$484$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$484$label_1#1;
+
+ inline$BDLGetDebugLevel$484$label_1#1:
+ goto inline$BDLGetDebugLevel$484$Return#1;
+
+ inline$BDLGetDebugLevel$484$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$484$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon35_Then#1, inline$BDLDevicePowerIoCompletion$18$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_62_true#1, inline$BDLDevicePowerIoCompletion$18$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_63#1:
+ goto inline$BDLGetDebugLevel$485$Entry#1;
+
+ inline$BDLGetDebugLevel$485$Entry#1:
+ goto inline$BDLGetDebugLevel$485$start#1;
+
+ inline$BDLGetDebugLevel$485$start#1:
+ goto inline$BDLGetDebugLevel$485$label_3#1;
+
+ inline$BDLGetDebugLevel$485$label_3#1:
+ havoc inline$BDLGetDebugLevel$485$myNondetVar_0;
+ inline$BDLGetDebugLevel$485$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$485$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$485$label_1#1;
+
+ inline$BDLGetDebugLevel$485$label_1#1:
+ goto inline$BDLGetDebugLevel$485$Return#1;
+
+ inline$BDLGetDebugLevel$485$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$485$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon36_Then#1, inline$BDLDevicePowerIoCompletion$18$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_72_true#1, inline$BDLDevicePowerIoCompletion$18$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_73#1:
+ goto inline$BDLGetDebugLevel$486$Entry#1;
+
+ inline$BDLGetDebugLevel$486$Entry#1:
+ goto inline$BDLGetDebugLevel$486$start#1;
+
+ inline$BDLGetDebugLevel$486$start#1:
+ goto inline$BDLGetDebugLevel$486$label_3#1;
+
+ inline$BDLGetDebugLevel$486$label_3#1:
+ havoc inline$BDLGetDebugLevel$486$myNondetVar_0;
+ inline$BDLGetDebugLevel$486$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$486$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$486$label_1#1;
+
+ inline$BDLGetDebugLevel$486$label_1#1:
+ goto inline$BDLGetDebugLevel$486$Return#1;
+
+ inline$BDLGetDebugLevel$486$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$486$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon37_Then#1, inline$BDLDevicePowerIoCompletion$18$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_82_true#1, inline$BDLDevicePowerIoCompletion$18$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$18$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$18$anon38_Then#1, inline$BDLDevicePowerIoCompletion$18$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$18$anon39_Then#1, inline$BDLDevicePowerIoCompletion$18$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_92#1:
+ goto inline$storm_IoCompleteRequest$37$Entry#1;
+
+ inline$storm_IoCompleteRequest$37$Entry#1:
+ inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$18$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$37$start#1;
+
+ inline$storm_IoCompleteRequest$37$start#1:
+ inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$37$label_3#1;
+
+ inline$storm_IoCompleteRequest$37$label_3#1:
+ call inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$37$label_6#1;
+
+ inline$storm_IoCompleteRequest$37$label_6#1:
+ goto inline$storm_IoCompleteRequest$37$label_6_true#1, inline$storm_IoCompleteRequest$37$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$37$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$37$label_7#1;
+
+ inline$storm_IoCompleteRequest$37$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$37$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$37$label_8#1;
+
+ inline$storm_IoCompleteRequest$37$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$37$anon3_Then#1, inline$storm_IoCompleteRequest$37$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$37$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$37$anon1#1;
+
+ inline$storm_IoCompleteRequest$37$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$37$label_9#1;
+
+ inline$storm_IoCompleteRequest$37$label_9#1:
+ goto inline$storm_IoCompleteRequest$37$label_9_true#1, inline$storm_IoCompleteRequest$37$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$37$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$37$label_10#1;
+
+ inline$storm_IoCompleteRequest$37$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$37$label_1#1;
+
+ inline$storm_IoCompleteRequest$37$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$37$label_7#1;
+
+ inline$storm_IoCompleteRequest$37$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$37$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$37$label_1#1;
+
+ inline$storm_IoCompleteRequest$37$label_1#1:
+ goto inline$storm_IoCompleteRequest$37$Return#1;
+
+ inline$storm_IoCompleteRequest$37$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$37$Return#1;
+
+ inline$storm_IoCompleteRequest$37$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon40_Then#1, inline$BDLDevicePowerIoCompletion$18$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$18$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$18$anon41_Then#1, inline$BDLDevicePowerIoCompletion$18$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_98#1:
+ goto inline$BDLGetDebugLevel$487$Entry#1;
+
+ inline$BDLGetDebugLevel$487$Entry#1:
+ goto inline$BDLGetDebugLevel$487$start#1;
+
+ inline$BDLGetDebugLevel$487$start#1:
+ goto inline$BDLGetDebugLevel$487$label_3#1;
+
+ inline$BDLGetDebugLevel$487$label_3#1:
+ havoc inline$BDLGetDebugLevel$487$myNondetVar_0;
+ inline$BDLGetDebugLevel$487$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$487$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$487$label_1#1;
+
+ inline$BDLGetDebugLevel$487$label_1#1:
+ goto inline$BDLGetDebugLevel$487$Return#1;
+
+ inline$BDLGetDebugLevel$487$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$487$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon42_Then#1, inline$BDLDevicePowerIoCompletion$18$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_101_true#1, inline$BDLDevicePowerIoCompletion$18$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_102#1:
+ goto inline$BDLGetDebugLevel$488$Entry#1;
+
+ inline$BDLGetDebugLevel$488$Entry#1:
+ goto inline$BDLGetDebugLevel$488$start#1;
+
+ inline$BDLGetDebugLevel$488$start#1:
+ goto inline$BDLGetDebugLevel$488$label_3#1;
+
+ inline$BDLGetDebugLevel$488$label_3#1:
+ havoc inline$BDLGetDebugLevel$488$myNondetVar_0;
+ inline$BDLGetDebugLevel$488$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$488$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$488$label_1#1;
+
+ inline$BDLGetDebugLevel$488$label_1#1:
+ goto inline$BDLGetDebugLevel$488$Return#1;
+
+ inline$BDLGetDebugLevel$488$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$488$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon43_Then#1, inline$BDLDevicePowerIoCompletion$18$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_111_true#1, inline$BDLDevicePowerIoCompletion$18$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$18$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$18$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_112#1:
+ goto inline$BDLGetDebugLevel$489$Entry#1;
+
+ inline$BDLGetDebugLevel$489$Entry#1:
+ goto inline$BDLGetDebugLevel$489$start#1;
+
+ inline$BDLGetDebugLevel$489$start#1:
+ goto inline$BDLGetDebugLevel$489$label_3#1;
+
+ inline$BDLGetDebugLevel$489$label_3#1:
+ havoc inline$BDLGetDebugLevel$489$myNondetVar_0;
+ inline$BDLGetDebugLevel$489$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$489$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$489$label_1#1;
+
+ inline$BDLGetDebugLevel$489$label_1#1:
+ goto inline$BDLGetDebugLevel$489$Return#1;
+
+ inline$BDLGetDebugLevel$489$Return#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$489$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$18$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$18$anon44_Then#1, inline$BDLDevicePowerIoCompletion$18$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_121_true#1, inline$BDLDevicePowerIoCompletion$18$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$18$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$18$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$18$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_122#1:
+ inline$BDLDevicePowerIoCompletion$18$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$18$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$18$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$18$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$18$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$18$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$18$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$18$Return#1:
+ inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$18$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$18$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$18$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$18$anon13_Then#1, inline$CallCompletionRoutine$18$anon13_Else#1;
+
+ inline$CallCompletionRoutine$18$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$18$anon7#1;
+
+ inline$CallCompletionRoutine$18$anon7#1:
+ goto inline$CallCompletionRoutine$18$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$18$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$18$Return#1;
+
+ inline$CallCompletionRoutine$18$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$18$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$18$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$18$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$18$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$18$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$start#1:
+ inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$18$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$18$label_3_true#1, inline$BDLCallDriverCompletionRoutine$18$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$18$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$18$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$18$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$18$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$18$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_6#1:
+ goto inline$storm_KeSetEvent$20$Entry#1;
+
+ inline$storm_KeSetEvent$20$Entry#1:
+ inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$18$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$20$start#1;
+
+ inline$storm_KeSetEvent$20$start#1:
+ inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$20$label_3#1;
+
+ inline$storm_KeSetEvent$20$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$20$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$20$label_1#1;
+
+ inline$storm_KeSetEvent$20$label_1#1:
+ goto inline$storm_KeSetEvent$20$Return#1;
+
+ inline$storm_KeSetEvent$20$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$18$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$18$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$18$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$18$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$18$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$18$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$18$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$18$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$18$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$18$Return#1:
+ inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$18$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$18$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$18$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$18$anon12_Then#1, inline$CallCompletionRoutine$18$anon12_Else#1;
+
+ inline$CallCompletionRoutine$18$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$18$anon5#1;
+
+ inline$CallCompletionRoutine$18$anon5#1:
+ goto inline$CallCompletionRoutine$18$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$18$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$18$label_23#1;
+
+ inline$CallCompletionRoutine$18$label_23#1:
+ inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$18$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$18$label_24#1;
+
+ inline$CallCompletionRoutine$18$label_24#1:
+ goto inline$CallCompletionRoutine$18$label_24_true#1, inline$CallCompletionRoutine$18$label_24_false#1;
+
+ inline$CallCompletionRoutine$18$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$18$label_1#1;
+
+ inline$CallCompletionRoutine$18$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$18$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$18$label_25#1;
+
+ inline$CallCompletionRoutine$18$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$18$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$18$label_1#1;
+
+ inline$CallCompletionRoutine$18$label_1#1:
+ goto inline$CallCompletionRoutine$18$Return#1;
+
+ inline$CallCompletionRoutine$18$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$18$Return#1;
+
+ inline$CallCompletionRoutine$18$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$18$Return#1;
+
+ inline$CallCompletionRoutine$18$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$18$Return#1;
+
+ inline$CallCompletionRoutine$18$Return#1:
+ goto inline$storm_IoCallDriver$9$label_33$1#1;
+
+ inline$storm_IoCallDriver$9$label_33$1#1:
+ goto inline$storm_IoCallDriver$9$anon14_Then#1, inline$storm_IoCallDriver$9$anon14_Else#1;
+
+ inline$storm_IoCallDriver$9$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$9$anon8#1;
+
+ inline$storm_IoCallDriver$9$anon8#1:
+ goto inline$storm_IoCallDriver$9$label_36#1;
+
+ inline$storm_IoCallDriver$9$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$9$Return#1;
+
+ inline$storm_IoCallDriver$9$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$9$label_29#1;
+
+ inline$storm_IoCallDriver$9$label_29#1:
+ inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$9$label_37#1;
+
+ inline$storm_IoCallDriver$9$label_37#1:
+ goto inline$storm_IoCallDriver$9$label_38#1;
+
+ inline$storm_IoCallDriver$9$label_38#1:
+ goto inline$storm_IoCallDriver$9$label_39#1;
+
+ inline$storm_IoCallDriver$9$label_39#1:
+ goto inline$CallCompletionRoutine$19$Entry#1;
+
+ inline$CallCompletionRoutine$19$Entry#1:
+ inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$19$start#1;
+
+ inline$CallCompletionRoutine$19$start#1:
+ inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$19$label_3#1;
+
+ inline$CallCompletionRoutine$19$label_3#1:
+ goto inline$CallCompletionRoutine$19$label_4#1;
+
+ inline$CallCompletionRoutine$19$label_4#1:
+ goto inline$CallCompletionRoutine$19$label_5#1;
+
+ inline$CallCompletionRoutine$19$label_5#1:
+ goto inline$CallCompletionRoutine$19$label_6#1;
+
+ inline$CallCompletionRoutine$19$label_6#1:
+ goto inline$CallCompletionRoutine$19$label_7#1;
+
+ inline$CallCompletionRoutine$19$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$99$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$99$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$start#1:
+ inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$99$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$99$label_3_true#1, inline$IoGetCurrentIrpStackLocation$99$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$99$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$99$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$99$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$99$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$99$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$99$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$99$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$99$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$99$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$99$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$99$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$99$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$99$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$99$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$99$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$99$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$99$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$99$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$99$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$99$Return#1:
+ goto inline$CallCompletionRoutine$19$label_7$1#1;
+
+ inline$CallCompletionRoutine$19$label_7$1#1:
+ goto inline$CallCompletionRoutine$19$anon10_Then#1, inline$CallCompletionRoutine$19$anon10_Else#1;
+
+ inline$CallCompletionRoutine$19$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$19$anon1#1;
+
+ inline$CallCompletionRoutine$19$anon1#1:
+ goto inline$CallCompletionRoutine$19$label_10#1;
+
+ inline$CallCompletionRoutine$19$label_10#1:
+ goto inline$CallCompletionRoutine$19$label_11#1;
+
+ inline$CallCompletionRoutine$19$label_11#1:
+ havoc inline$CallCompletionRoutine$19$myNondetVar_0;
+ inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$myNondetVar_0;
+ goto inline$CallCompletionRoutine$19$label_12#1;
+
+ inline$CallCompletionRoutine$19$label_12#1:
+ havoc inline$CallCompletionRoutine$19$myNondetVar_0;
+ inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$myNondetVar_0;
+ goto inline$CallCompletionRoutine$19$label_13#1;
+
+ inline$CallCompletionRoutine$19$label_13#1:
+ havoc inline$CallCompletionRoutine$19$myNondetVar_0;
+ goto inline$CallCompletionRoutine$19$label_14#1;
+
+ inline$CallCompletionRoutine$19$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$100$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$100$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$start#1:
+ inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$100$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$100$label_3_true#1, inline$IoGetCurrentIrpStackLocation$100$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$100$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$100$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$100$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$100$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$100$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$100$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$100$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$100$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$100$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$100$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$100$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$100$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$100$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$100$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$100$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$100$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$100$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$100$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$100$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$100$Return#1:
+ goto inline$CallCompletionRoutine$19$label_14$1#1;
+
+ inline$CallCompletionRoutine$19$label_14$1#1:
+ goto inline$CallCompletionRoutine$19$anon11_Then#1, inline$CallCompletionRoutine$19$anon11_Else#1;
+
+ inline$CallCompletionRoutine$19$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$19$anon3#1;
+
+ inline$CallCompletionRoutine$19$anon3#1:
+ goto inline$CallCompletionRoutine$19$label_17#1;
+
+ inline$CallCompletionRoutine$19$label_17#1:
+ goto inline$CallCompletionRoutine$19$label_18#1;
+
+ inline$CallCompletionRoutine$19$label_18#1:
+ goto inline$CallCompletionRoutine$19$label_18_true#1, inline$CallCompletionRoutine$19$label_18_false#1;
+
+ inline$CallCompletionRoutine$19$label_18_false#1:
+ assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$19$label_1#1;
+
+ inline$CallCompletionRoutine$19$label_18_true#1:
+ assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$19$label_19#1;
+
+ inline$CallCompletionRoutine$19$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$19$label_20#1;
+
+ inline$CallCompletionRoutine$19$label_20#1:
+ goto inline$CallCompletionRoutine$19$label_20_icall_1#1, inline$CallCompletionRoutine$19$label_20_icall_2#1, inline$CallCompletionRoutine$19$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$19$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$19$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$19$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$19$Entry#1:
+ inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$19$start#1;
+
+ inline$BDLSystemPowerIoCompletion$19$start#1:
+ call inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$19$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_4#1:
+ inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_6#1:
+ inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$19$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$19$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$102$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$102$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$start#1:
+ inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$102$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$102$label_3_true#1, inline$IoGetCurrentIrpStackLocation$102$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$102$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$102$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$102$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$102$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$102$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$102$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$102$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$102$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$102$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$102$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$102$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$102$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$102$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$102$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$102$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$102$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$102$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$102$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$102$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$102$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon36_Then#1, inline$BDLSystemPowerIoCompletion$19$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_15#1:
+ goto inline$BDLGetDebugLevel$511$Entry#1;
+
+ inline$BDLGetDebugLevel$511$Entry#1:
+ goto inline$BDLGetDebugLevel$511$start#1;
+
+ inline$BDLGetDebugLevel$511$start#1:
+ goto inline$BDLGetDebugLevel$511$label_3#1;
+
+ inline$BDLGetDebugLevel$511$label_3#1:
+ havoc inline$BDLGetDebugLevel$511$myNondetVar_0;
+ inline$BDLGetDebugLevel$511$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$511$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$511$label_1#1;
+
+ inline$BDLGetDebugLevel$511$label_1#1:
+ goto inline$BDLGetDebugLevel$511$Return#1;
+
+ inline$BDLGetDebugLevel$511$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$511$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon37_Then#1, inline$BDLSystemPowerIoCompletion$19$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_18_true#1, inline$BDLSystemPowerIoCompletion$19$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_19#1:
+ goto inline$BDLGetDebugLevel$512$Entry#1;
+
+ inline$BDLGetDebugLevel$512$Entry#1:
+ goto inline$BDLGetDebugLevel$512$start#1;
+
+ inline$BDLGetDebugLevel$512$start#1:
+ goto inline$BDLGetDebugLevel$512$label_3#1;
+
+ inline$BDLGetDebugLevel$512$label_3#1:
+ havoc inline$BDLGetDebugLevel$512$myNondetVar_0;
+ inline$BDLGetDebugLevel$512$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$512$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$512$label_1#1;
+
+ inline$BDLGetDebugLevel$512$label_1#1:
+ goto inline$BDLGetDebugLevel$512$Return#1;
+
+ inline$BDLGetDebugLevel$512$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$512$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon38_Then#1, inline$BDLSystemPowerIoCompletion$19$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_28_true#1, inline$BDLSystemPowerIoCompletion$19$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_29#1:
+ goto inline$BDLGetDebugLevel$513$Entry#1;
+
+ inline$BDLGetDebugLevel$513$Entry#1:
+ goto inline$BDLGetDebugLevel$513$start#1;
+
+ inline$BDLGetDebugLevel$513$start#1:
+ goto inline$BDLGetDebugLevel$513$label_3#1;
+
+ inline$BDLGetDebugLevel$513$label_3#1:
+ havoc inline$BDLGetDebugLevel$513$myNondetVar_0;
+ inline$BDLGetDebugLevel$513$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$513$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$513$label_1#1;
+
+ inline$BDLGetDebugLevel$513$label_1#1:
+ goto inline$BDLGetDebugLevel$513$Return#1;
+
+ inline$BDLGetDebugLevel$513$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$513$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon39_Then#1, inline$BDLSystemPowerIoCompletion$19$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_38_true#1, inline$BDLSystemPowerIoCompletion$19$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_39_true#1, inline$BDLSystemPowerIoCompletion$19$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$19$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$19$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$19$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$19$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$19$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_106_true#1, inline$BDLSystemPowerIoCompletion$19$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$19$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$19$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$19$myNondetVar_0, inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$19$anon50_Then#1, inline$BDLSystemPowerIoCompletion$19$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_112#1:
+ inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_113_true#1, inline$BDLSystemPowerIoCompletion$19$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$19$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_117#1:
+ goto inline$BDLGetDebugLevel$520$Entry#1;
+
+ inline$BDLGetDebugLevel$520$Entry#1:
+ goto inline$BDLGetDebugLevel$520$start#1;
+
+ inline$BDLGetDebugLevel$520$start#1:
+ goto inline$BDLGetDebugLevel$520$label_3#1;
+
+ inline$BDLGetDebugLevel$520$label_3#1:
+ havoc inline$BDLGetDebugLevel$520$myNondetVar_0;
+ inline$BDLGetDebugLevel$520$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$520$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$520$label_1#1;
+
+ inline$BDLGetDebugLevel$520$label_1#1:
+ goto inline$BDLGetDebugLevel$520$Return#1;
+
+ inline$BDLGetDebugLevel$520$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$520$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon51_Then#1, inline$BDLSystemPowerIoCompletion$19$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_120_true#1, inline$BDLSystemPowerIoCompletion$19$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_121#1:
+ goto inline$BDLGetDebugLevel$521$Entry#1;
+
+ inline$BDLGetDebugLevel$521$Entry#1:
+ goto inline$BDLGetDebugLevel$521$start#1;
+
+ inline$BDLGetDebugLevel$521$start#1:
+ goto inline$BDLGetDebugLevel$521$label_3#1;
+
+ inline$BDLGetDebugLevel$521$label_3#1:
+ havoc inline$BDLGetDebugLevel$521$myNondetVar_0;
+ inline$BDLGetDebugLevel$521$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$521$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$521$label_1#1;
+
+ inline$BDLGetDebugLevel$521$label_1#1:
+ goto inline$BDLGetDebugLevel$521$Return#1;
+
+ inline$BDLGetDebugLevel$521$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$521$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon52_Then#1, inline$BDLSystemPowerIoCompletion$19$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_130_true#1, inline$BDLSystemPowerIoCompletion$19$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_131#1:
+ goto inline$BDLGetDebugLevel$522$Entry#1;
+
+ inline$BDLGetDebugLevel$522$Entry#1:
+ goto inline$BDLGetDebugLevel$522$start#1;
+
+ inline$BDLGetDebugLevel$522$start#1:
+ goto inline$BDLGetDebugLevel$522$label_3#1;
+
+ inline$BDLGetDebugLevel$522$label_3#1:
+ havoc inline$BDLGetDebugLevel$522$myNondetVar_0;
+ inline$BDLGetDebugLevel$522$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$522$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$522$label_1#1;
+
+ inline$BDLGetDebugLevel$522$label_1#1:
+ goto inline$BDLGetDebugLevel$522$Return#1;
+
+ inline$BDLGetDebugLevel$522$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$522$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon53_Then#1, inline$BDLSystemPowerIoCompletion$19$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_140_true#1, inline$BDLSystemPowerIoCompletion$19$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$19$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_115#1:
+ inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$19$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$19$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$19$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_43#1:
+ goto inline$BDLGetDebugLevel$514$Entry#1;
+
+ inline$BDLGetDebugLevel$514$Entry#1:
+ goto inline$BDLGetDebugLevel$514$start#1;
+
+ inline$BDLGetDebugLevel$514$start#1:
+ goto inline$BDLGetDebugLevel$514$label_3#1;
+
+ inline$BDLGetDebugLevel$514$label_3#1:
+ havoc inline$BDLGetDebugLevel$514$myNondetVar_0;
+ inline$BDLGetDebugLevel$514$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$514$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$514$label_1#1;
+
+ inline$BDLGetDebugLevel$514$label_1#1:
+ goto inline$BDLGetDebugLevel$514$Return#1;
+
+ inline$BDLGetDebugLevel$514$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$514$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon40_Then#1, inline$BDLSystemPowerIoCompletion$19$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_46_true#1, inline$BDLSystemPowerIoCompletion$19$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_47#1:
+ goto inline$BDLGetDebugLevel$515$Entry#1;
+
+ inline$BDLGetDebugLevel$515$Entry#1:
+ goto inline$BDLGetDebugLevel$515$start#1;
+
+ inline$BDLGetDebugLevel$515$start#1:
+ goto inline$BDLGetDebugLevel$515$label_3#1;
+
+ inline$BDLGetDebugLevel$515$label_3#1:
+ havoc inline$BDLGetDebugLevel$515$myNondetVar_0;
+ inline$BDLGetDebugLevel$515$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$515$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$515$label_1#1;
+
+ inline$BDLGetDebugLevel$515$label_1#1:
+ goto inline$BDLGetDebugLevel$515$Return#1;
+
+ inline$BDLGetDebugLevel$515$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$515$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon41_Then#1, inline$BDLSystemPowerIoCompletion$19$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_56_true#1, inline$BDLSystemPowerIoCompletion$19$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_57#1:
+ goto inline$BDLGetDebugLevel$516$Entry#1;
+
+ inline$BDLGetDebugLevel$516$Entry#1:
+ goto inline$BDLGetDebugLevel$516$start#1;
+
+ inline$BDLGetDebugLevel$516$start#1:
+ goto inline$BDLGetDebugLevel$516$label_3#1;
+
+ inline$BDLGetDebugLevel$516$label_3#1:
+ havoc inline$BDLGetDebugLevel$516$myNondetVar_0;
+ inline$BDLGetDebugLevel$516$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$516$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$516$label_1#1;
+
+ inline$BDLGetDebugLevel$516$label_1#1:
+ goto inline$BDLGetDebugLevel$516$Return#1;
+
+ inline$BDLGetDebugLevel$516$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$516$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon42_Then#1, inline$BDLSystemPowerIoCompletion$19$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_66_true#1, inline$BDLSystemPowerIoCompletion$19$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$19$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$19$anon43_Then#1, inline$BDLSystemPowerIoCompletion$19$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$19$anon44_Then#1, inline$BDLSystemPowerIoCompletion$19$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_74#1:
+ goto inline$storm_IoCompleteRequest$40$Entry#1;
+
+ inline$storm_IoCompleteRequest$40$Entry#1:
+ inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$19$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$40$start#1;
+
+ inline$storm_IoCompleteRequest$40$start#1:
+ inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$40$label_3#1;
+
+ inline$storm_IoCompleteRequest$40$label_3#1:
+ call inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$40$label_6#1;
+
+ inline$storm_IoCompleteRequest$40$label_6#1:
+ goto inline$storm_IoCompleteRequest$40$label_6_true#1, inline$storm_IoCompleteRequest$40$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$40$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$40$label_7#1;
+
+ inline$storm_IoCompleteRequest$40$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$40$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$40$label_8#1;
+
+ inline$storm_IoCompleteRequest$40$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$40$anon3_Then#1, inline$storm_IoCompleteRequest$40$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$40$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$40$anon1#1;
+
+ inline$storm_IoCompleteRequest$40$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$40$label_9#1;
+
+ inline$storm_IoCompleteRequest$40$label_9#1:
+ goto inline$storm_IoCompleteRequest$40$label_9_true#1, inline$storm_IoCompleteRequest$40$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$40$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$40$label_10#1;
+
+ inline$storm_IoCompleteRequest$40$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$40$label_1#1;
+
+ inline$storm_IoCompleteRequest$40$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$40$label_7#1;
+
+ inline$storm_IoCompleteRequest$40$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$40$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$40$label_1#1;
+
+ inline$storm_IoCompleteRequest$40$label_1#1:
+ goto inline$storm_IoCompleteRequest$40$Return#1;
+
+ inline$storm_IoCompleteRequest$40$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$40$Return#1;
+
+ inline$storm_IoCompleteRequest$40$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon45_Then#1, inline$BDLSystemPowerIoCompletion$19$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$19$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$19$anon46_Then#1, inline$BDLSystemPowerIoCompletion$19$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_80#1:
+ goto inline$BDLGetDebugLevel$517$Entry#1;
+
+ inline$BDLGetDebugLevel$517$Entry#1:
+ goto inline$BDLGetDebugLevel$517$start#1;
+
+ inline$BDLGetDebugLevel$517$start#1:
+ goto inline$BDLGetDebugLevel$517$label_3#1;
+
+ inline$BDLGetDebugLevel$517$label_3#1:
+ havoc inline$BDLGetDebugLevel$517$myNondetVar_0;
+ inline$BDLGetDebugLevel$517$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$517$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$517$label_1#1;
+
+ inline$BDLGetDebugLevel$517$label_1#1:
+ goto inline$BDLGetDebugLevel$517$Return#1;
+
+ inline$BDLGetDebugLevel$517$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$517$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon47_Then#1, inline$BDLSystemPowerIoCompletion$19$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_83_true#1, inline$BDLSystemPowerIoCompletion$19$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_84#1:
+ goto inline$BDLGetDebugLevel$518$Entry#1;
+
+ inline$BDLGetDebugLevel$518$Entry#1:
+ goto inline$BDLGetDebugLevel$518$start#1;
+
+ inline$BDLGetDebugLevel$518$start#1:
+ goto inline$BDLGetDebugLevel$518$label_3#1;
+
+ inline$BDLGetDebugLevel$518$label_3#1:
+ havoc inline$BDLGetDebugLevel$518$myNondetVar_0;
+ inline$BDLGetDebugLevel$518$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$518$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$518$label_1#1;
+
+ inline$BDLGetDebugLevel$518$label_1#1:
+ goto inline$BDLGetDebugLevel$518$Return#1;
+
+ inline$BDLGetDebugLevel$518$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$518$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon48_Then#1, inline$BDLSystemPowerIoCompletion$19$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_93_true#1, inline$BDLSystemPowerIoCompletion$19$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$19$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$19$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_94#1:
+ goto inline$BDLGetDebugLevel$519$Entry#1;
+
+ inline$BDLGetDebugLevel$519$Entry#1:
+ goto inline$BDLGetDebugLevel$519$start#1;
+
+ inline$BDLGetDebugLevel$519$start#1:
+ goto inline$BDLGetDebugLevel$519$label_3#1;
+
+ inline$BDLGetDebugLevel$519$label_3#1:
+ havoc inline$BDLGetDebugLevel$519$myNondetVar_0;
+ inline$BDLGetDebugLevel$519$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$519$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$519$label_1#1;
+
+ inline$BDLGetDebugLevel$519$label_1#1:
+ goto inline$BDLGetDebugLevel$519$Return#1;
+
+ inline$BDLGetDebugLevel$519$Return#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$519$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$19$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$19$anon49_Then#1, inline$BDLSystemPowerIoCompletion$19$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_103_true#1, inline$BDLSystemPowerIoCompletion$19$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$19$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$19$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$19$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_104#1:
+ inline$BDLSystemPowerIoCompletion$19$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$19$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$19$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$19$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$19$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$19$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$19$Return#1:
+ inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$19$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$19$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$19$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$19$anon14_Then#1, inline$CallCompletionRoutine$19$anon14_Else#1;
+
+ inline$CallCompletionRoutine$19$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$19$anon9#1;
+
+ inline$CallCompletionRoutine$19$anon9#1:
+ goto inline$CallCompletionRoutine$19$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$19$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$19$Return#1;
+
+ inline$CallCompletionRoutine$19$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$19$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$19$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$19$Entry#1:
+ inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$19$start#1;
+
+ inline$BDLDevicePowerIoCompletion$19$start#1:
+ call inline$BDLDevicePowerIoCompletion$19$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$19$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_4#1:
+ inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_6#1:
+ inline$BDLDevicePowerIoCompletion$19$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$19$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$19$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$101$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$101$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$start#1:
+ inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$101$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$101$label_3_true#1, inline$IoGetCurrentIrpStackLocation$101$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$101$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$101$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$101$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$101$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$101$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$101$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$101$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$101$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$101$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$101$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$101$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$101$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$101$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$101$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$101$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$101$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$101$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$101$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$101$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$101$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$101$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$101$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$101$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon30_Then#1, inline$BDLDevicePowerIoCompletion$19$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_13#1:
+ inline$BDLDevicePowerIoCompletion$19$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_17#1:
+ goto inline$BDLGetDebugLevel$502$Entry#1;
+
+ inline$BDLGetDebugLevel$502$Entry#1:
+ goto inline$BDLGetDebugLevel$502$start#1;
+
+ inline$BDLGetDebugLevel$502$start#1:
+ goto inline$BDLGetDebugLevel$502$label_3#1;
+
+ inline$BDLGetDebugLevel$502$label_3#1:
+ havoc inline$BDLGetDebugLevel$502$myNondetVar_0;
+ inline$BDLGetDebugLevel$502$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$502$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$502$label_1#1;
+
+ inline$BDLGetDebugLevel$502$label_1#1:
+ goto inline$BDLGetDebugLevel$502$Return#1;
+
+ inline$BDLGetDebugLevel$502$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$502$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon31_Then#1, inline$BDLDevicePowerIoCompletion$19$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_20_true#1, inline$BDLDevicePowerIoCompletion$19$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_21#1:
+ goto inline$BDLGetDebugLevel$503$Entry#1;
+
+ inline$BDLGetDebugLevel$503$Entry#1:
+ goto inline$BDLGetDebugLevel$503$start#1;
+
+ inline$BDLGetDebugLevel$503$start#1:
+ goto inline$BDLGetDebugLevel$503$label_3#1;
+
+ inline$BDLGetDebugLevel$503$label_3#1:
+ havoc inline$BDLGetDebugLevel$503$myNondetVar_0;
+ inline$BDLGetDebugLevel$503$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$503$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$503$label_1#1;
+
+ inline$BDLGetDebugLevel$503$label_1#1:
+ goto inline$BDLGetDebugLevel$503$Return#1;
+
+ inline$BDLGetDebugLevel$503$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$503$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon32_Then#1, inline$BDLDevicePowerIoCompletion$19$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_30_true#1, inline$BDLDevicePowerIoCompletion$19$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_31#1:
+ goto inline$BDLGetDebugLevel$504$Entry#1;
+
+ inline$BDLGetDebugLevel$504$Entry#1:
+ goto inline$BDLGetDebugLevel$504$start#1;
+
+ inline$BDLGetDebugLevel$504$start#1:
+ goto inline$BDLGetDebugLevel$504$label_3#1;
+
+ inline$BDLGetDebugLevel$504$label_3#1:
+ havoc inline$BDLGetDebugLevel$504$myNondetVar_0;
+ inline$BDLGetDebugLevel$504$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$504$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$504$label_1#1;
+
+ inline$BDLGetDebugLevel$504$label_1#1:
+ goto inline$BDLGetDebugLevel$504$Return#1;
+
+ inline$BDLGetDebugLevel$504$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$504$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon33_Then#1, inline$BDLDevicePowerIoCompletion$19$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_40_true#1, inline$BDLDevicePowerIoCompletion$19$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_41_true#1, inline$BDLDevicePowerIoCompletion$19$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$19$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$19$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_44_true#1, inline$BDLDevicePowerIoCompletion$19$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_45_true#1, inline$BDLDevicePowerIoCompletion$19$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$19$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$19$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$19$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_54#1:
+ inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$19$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_55_true#1, inline$BDLDevicePowerIoCompletion$19$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$19$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$19$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$19$anon34_Then#1, inline$BDLDevicePowerIoCompletion$19$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_59#1:
+ goto inline$BDLGetDebugLevel$505$Entry#1;
+
+ inline$BDLGetDebugLevel$505$Entry#1:
+ goto inline$BDLGetDebugLevel$505$start#1;
+
+ inline$BDLGetDebugLevel$505$start#1:
+ goto inline$BDLGetDebugLevel$505$label_3#1;
+
+ inline$BDLGetDebugLevel$505$label_3#1:
+ havoc inline$BDLGetDebugLevel$505$myNondetVar_0;
+ inline$BDLGetDebugLevel$505$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$505$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$505$label_1#1;
+
+ inline$BDLGetDebugLevel$505$label_1#1:
+ goto inline$BDLGetDebugLevel$505$Return#1;
+
+ inline$BDLGetDebugLevel$505$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$505$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon35_Then#1, inline$BDLDevicePowerIoCompletion$19$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_62_true#1, inline$BDLDevicePowerIoCompletion$19$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_63#1:
+ goto inline$BDLGetDebugLevel$506$Entry#1;
+
+ inline$BDLGetDebugLevel$506$Entry#1:
+ goto inline$BDLGetDebugLevel$506$start#1;
+
+ inline$BDLGetDebugLevel$506$start#1:
+ goto inline$BDLGetDebugLevel$506$label_3#1;
+
+ inline$BDLGetDebugLevel$506$label_3#1:
+ havoc inline$BDLGetDebugLevel$506$myNondetVar_0;
+ inline$BDLGetDebugLevel$506$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$506$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$506$label_1#1;
+
+ inline$BDLGetDebugLevel$506$label_1#1:
+ goto inline$BDLGetDebugLevel$506$Return#1;
+
+ inline$BDLGetDebugLevel$506$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$506$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon36_Then#1, inline$BDLDevicePowerIoCompletion$19$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_72_true#1, inline$BDLDevicePowerIoCompletion$19$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_73#1:
+ goto inline$BDLGetDebugLevel$507$Entry#1;
+
+ inline$BDLGetDebugLevel$507$Entry#1:
+ goto inline$BDLGetDebugLevel$507$start#1;
+
+ inline$BDLGetDebugLevel$507$start#1:
+ goto inline$BDLGetDebugLevel$507$label_3#1;
+
+ inline$BDLGetDebugLevel$507$label_3#1:
+ havoc inline$BDLGetDebugLevel$507$myNondetVar_0;
+ inline$BDLGetDebugLevel$507$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$507$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$507$label_1#1;
+
+ inline$BDLGetDebugLevel$507$label_1#1:
+ goto inline$BDLGetDebugLevel$507$Return#1;
+
+ inline$BDLGetDebugLevel$507$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$507$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon37_Then#1, inline$BDLDevicePowerIoCompletion$19$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_82_true#1, inline$BDLDevicePowerIoCompletion$19$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$19$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$19$anon38_Then#1, inline$BDLDevicePowerIoCompletion$19$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$19$anon39_Then#1, inline$BDLDevicePowerIoCompletion$19$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_92#1:
+ goto inline$storm_IoCompleteRequest$39$Entry#1;
+
+ inline$storm_IoCompleteRequest$39$Entry#1:
+ inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$19$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$39$start#1;
+
+ inline$storm_IoCompleteRequest$39$start#1:
+ inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$39$label_3#1;
+
+ inline$storm_IoCompleteRequest$39$label_3#1:
+ call inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$39$label_6#1;
+
+ inline$storm_IoCompleteRequest$39$label_6#1:
+ goto inline$storm_IoCompleteRequest$39$label_6_true#1, inline$storm_IoCompleteRequest$39$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$39$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$39$label_7#1;
+
+ inline$storm_IoCompleteRequest$39$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$39$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$39$label_8#1;
+
+ inline$storm_IoCompleteRequest$39$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$39$anon3_Then#1, inline$storm_IoCompleteRequest$39$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$39$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$39$anon1#1;
+
+ inline$storm_IoCompleteRequest$39$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$39$label_9#1;
+
+ inline$storm_IoCompleteRequest$39$label_9#1:
+ goto inline$storm_IoCompleteRequest$39$label_9_true#1, inline$storm_IoCompleteRequest$39$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$39$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$39$label_10#1;
+
+ inline$storm_IoCompleteRequest$39$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$39$label_1#1;
+
+ inline$storm_IoCompleteRequest$39$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$39$label_7#1;
+
+ inline$storm_IoCompleteRequest$39$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$39$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$39$label_1#1;
+
+ inline$storm_IoCompleteRequest$39$label_1#1:
+ goto inline$storm_IoCompleteRequest$39$Return#1;
+
+ inline$storm_IoCompleteRequest$39$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$39$Return#1;
+
+ inline$storm_IoCompleteRequest$39$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon40_Then#1, inline$BDLDevicePowerIoCompletion$19$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$19$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$19$anon41_Then#1, inline$BDLDevicePowerIoCompletion$19$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_98#1:
+ goto inline$BDLGetDebugLevel$508$Entry#1;
+
+ inline$BDLGetDebugLevel$508$Entry#1:
+ goto inline$BDLGetDebugLevel$508$start#1;
+
+ inline$BDLGetDebugLevel$508$start#1:
+ goto inline$BDLGetDebugLevel$508$label_3#1;
+
+ inline$BDLGetDebugLevel$508$label_3#1:
+ havoc inline$BDLGetDebugLevel$508$myNondetVar_0;
+ inline$BDLGetDebugLevel$508$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$508$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$508$label_1#1;
+
+ inline$BDLGetDebugLevel$508$label_1#1:
+ goto inline$BDLGetDebugLevel$508$Return#1;
+
+ inline$BDLGetDebugLevel$508$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$508$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon42_Then#1, inline$BDLDevicePowerIoCompletion$19$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_101_true#1, inline$BDLDevicePowerIoCompletion$19$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_102#1:
+ goto inline$BDLGetDebugLevel$509$Entry#1;
+
+ inline$BDLGetDebugLevel$509$Entry#1:
+ goto inline$BDLGetDebugLevel$509$start#1;
+
+ inline$BDLGetDebugLevel$509$start#1:
+ goto inline$BDLGetDebugLevel$509$label_3#1;
+
+ inline$BDLGetDebugLevel$509$label_3#1:
+ havoc inline$BDLGetDebugLevel$509$myNondetVar_0;
+ inline$BDLGetDebugLevel$509$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$509$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$509$label_1#1;
+
+ inline$BDLGetDebugLevel$509$label_1#1:
+ goto inline$BDLGetDebugLevel$509$Return#1;
+
+ inline$BDLGetDebugLevel$509$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$509$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon43_Then#1, inline$BDLDevicePowerIoCompletion$19$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_111_true#1, inline$BDLDevicePowerIoCompletion$19$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$19$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$19$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_112#1:
+ goto inline$BDLGetDebugLevel$510$Entry#1;
+
+ inline$BDLGetDebugLevel$510$Entry#1:
+ goto inline$BDLGetDebugLevel$510$start#1;
+
+ inline$BDLGetDebugLevel$510$start#1:
+ goto inline$BDLGetDebugLevel$510$label_3#1;
+
+ inline$BDLGetDebugLevel$510$label_3#1:
+ havoc inline$BDLGetDebugLevel$510$myNondetVar_0;
+ inline$BDLGetDebugLevel$510$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$510$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$510$label_1#1;
+
+ inline$BDLGetDebugLevel$510$label_1#1:
+ goto inline$BDLGetDebugLevel$510$Return#1;
+
+ inline$BDLGetDebugLevel$510$Return#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$510$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$19$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$19$anon44_Then#1, inline$BDLDevicePowerIoCompletion$19$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_121_true#1, inline$BDLDevicePowerIoCompletion$19$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$19$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$19$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$19$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_122#1:
+ inline$BDLDevicePowerIoCompletion$19$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$19$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$19$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$19$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$19$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$19$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$19$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$19$Return#1:
+ inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$19$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$19$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$19$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$19$anon13_Then#1, inline$CallCompletionRoutine$19$anon13_Else#1;
+
+ inline$CallCompletionRoutine$19$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$19$anon7#1;
+
+ inline$CallCompletionRoutine$19$anon7#1:
+ goto inline$CallCompletionRoutine$19$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$19$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$19$Return#1;
+
+ inline$CallCompletionRoutine$19$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$19$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$19$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$19$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$19$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$19$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$start#1:
+ inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$19$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$19$label_3_true#1, inline$BDLCallDriverCompletionRoutine$19$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$19$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$19$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$19$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$19$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$19$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_6#1:
+ goto inline$storm_KeSetEvent$21$Entry#1;
+
+ inline$storm_KeSetEvent$21$Entry#1:
+ inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$19$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$21$start#1;
+
+ inline$storm_KeSetEvent$21$start#1:
+ inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$21$label_3#1;
+
+ inline$storm_KeSetEvent$21$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$21$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$21$label_1#1;
+
+ inline$storm_KeSetEvent$21$label_1#1:
+ goto inline$storm_KeSetEvent$21$Return#1;
+
+ inline$storm_KeSetEvent$21$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$19$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$19$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$19$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$19$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$19$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$19$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$19$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$19$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$19$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$19$Return#1:
+ inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$19$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$19$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$19$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$19$anon12_Then#1, inline$CallCompletionRoutine$19$anon12_Else#1;
+
+ inline$CallCompletionRoutine$19$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$19$anon5#1;
+
+ inline$CallCompletionRoutine$19$anon5#1:
+ goto inline$CallCompletionRoutine$19$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$19$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$19$label_23#1;
+
+ inline$CallCompletionRoutine$19$label_23#1:
+ inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$19$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$19$label_24#1;
+
+ inline$CallCompletionRoutine$19$label_24#1:
+ goto inline$CallCompletionRoutine$19$label_24_true#1, inline$CallCompletionRoutine$19$label_24_false#1;
+
+ inline$CallCompletionRoutine$19$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$19$label_1#1;
+
+ inline$CallCompletionRoutine$19$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$19$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$19$label_25#1;
+
+ inline$CallCompletionRoutine$19$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$19$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$19$label_1#1;
+
+ inline$CallCompletionRoutine$19$label_1#1:
+ goto inline$CallCompletionRoutine$19$Return#1;
+
+ inline$CallCompletionRoutine$19$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$19$Return#1;
+
+ inline$CallCompletionRoutine$19$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$19$Return#1;
+
+ inline$CallCompletionRoutine$19$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$19$Return#1;
+
+ inline$CallCompletionRoutine$19$Return#1:
+ goto inline$storm_IoCallDriver$9$label_39$1#1;
+
+ inline$storm_IoCallDriver$9$label_39$1#1:
+ goto inline$storm_IoCallDriver$9$anon15_Then#1, inline$storm_IoCallDriver$9$anon15_Else#1;
+
+ inline$storm_IoCallDriver$9$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$9$anon10#1;
+
+ inline$storm_IoCallDriver$9$anon10#1:
+ goto inline$storm_IoCallDriver$9$label_36#1;
+
+ inline$storm_IoCallDriver$9$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$9$Return#1;
+
+ inline$storm_IoCallDriver$9$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$9$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$9$label_28#1;
+
+ inline$storm_IoCallDriver$9$label_28#1:
+ inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$9$label_42#1;
+
+ inline$storm_IoCallDriver$9$label_42#1:
+ goto inline$storm_IoCallDriver$9$label_43#1;
+
+ inline$storm_IoCallDriver$9$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$9$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$9$label_36#1;
+
+ inline$storm_IoCallDriver$9$label_36#1:
+ inline$storm_IoCallDriver$9$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$9$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$9$label_1#1;
+
+ inline$storm_IoCallDriver$9$label_1#1:
+ goto inline$storm_IoCallDriver$9$Return#1;
+
+ inline$storm_IoCallDriver$9$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$9$Return#1;
+
+ inline$storm_IoCallDriver$9$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$9$Return#1;
+
+ inline$storm_IoCallDriver$9$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$9$Return#1;
+
+ inline$storm_IoCallDriver$9$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$9$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_19$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_19$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon20_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon9#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_42#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_42#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_IoCallDriver$108.29$4$;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_18_true#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_22#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_22#1:
+ call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon21_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon21_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon11#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon11#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_25#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_25#1:
+ goto inline$storm_PoCallDriver$4$Entry#1;
+
+ inline$storm_PoCallDriver$4$Entry#1:
+ inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_PoCallDriver$4$start#1;
+
+ inline$storm_PoCallDriver$4$start#1:
+ inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8_.1;
+ goto inline$storm_PoCallDriver$4$label_3#1;
+
+ inline$storm_PoCallDriver$4$label_3#1:
+ goto inline$storm_IoCallDriver$10$Entry#1;
+
+ inline$storm_IoCallDriver$10$Entry#1:
+ inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$4$$Irp$2$496.14$storm_PoCallDriver$8;
+ goto inline$storm_IoCallDriver$10$start#1;
+
+ inline$storm_IoCallDriver$10$start#1:
+ inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$10$label_3#1;
+
+ inline$storm_IoCallDriver$10$label_3#1:
+ goto inline$storm_IoCallDriver$10$label_4#1;
+
+ inline$storm_IoCallDriver$10$label_4#1:
+ goto inline$storm_IoCallDriver$10$label_5#1;
+
+ inline$storm_IoCallDriver$10$label_5#1:
+ goto inline$storm_IoCallDriver$10$label_6#1;
+
+ inline$storm_IoCallDriver$10$label_6#1:
+ call inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$10$label_9#1;
+
+ inline$storm_IoCallDriver$10$label_9#1:
+ goto inline$storm_IoCallDriver$10$label_9_true#1, inline$storm_IoCallDriver$10$label_9_false#1;
+
+ inline$storm_IoCallDriver$10$label_9_false#1:
+ assume inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$10$label_10#1;
+
+ inline$storm_IoCallDriver$10$label_9_true#1:
+ assume inline$storm_IoCallDriver$10$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$10$label_13#1;
+
+ inline$storm_IoCallDriver$10$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$10$anon12_Then#1, inline$storm_IoCallDriver$10$anon12_Else#1;
+
+ inline$storm_IoCallDriver$10$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$10$anon3#1;
+
+ inline$storm_IoCallDriver$10$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$10$label_14#1;
+
+ inline$storm_IoCallDriver$10$label_14#1:
+ goto inline$storm_IoCallDriver$10$label_14_true#1, inline$storm_IoCallDriver$10$label_14_false#1;
+
+ inline$storm_IoCallDriver$10$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$10$label_15#1;
+
+ inline$storm_IoCallDriver$10$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$10$label_1#1;
+
+ inline$storm_IoCallDriver$10$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$10$label_10#1;
+
+ inline$storm_IoCallDriver$10$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$11$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$11$Entry#1:
+ inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$11$start#1;
+
+ inline$IoSetNextIrpStackLocation$11$start#1:
+ inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$11$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$11$label_3_true#1, inline$IoSetNextIrpStackLocation$11$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$11$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$11$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_4#1:
+ call inline$IoSetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$11$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_7#1:
+ call inline$IoSetNextIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$11$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$11$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$11$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$11$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_5#1:
+ inline$IoSetNextIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$11$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$11$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$11$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$11$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$11$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$11$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$11$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$11$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$11$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$11$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$11$Return#1;
+
+ inline$IoSetNextIrpStackLocation$11$Return#1:
+ goto inline$storm_IoCallDriver$10$label_10$1#1;
+
+ inline$storm_IoCallDriver$10$label_10$1#1:
+ goto inline$storm_IoCallDriver$10$anon11_Then#1, inline$storm_IoCallDriver$10$anon11_Else#1;
+
+ inline$storm_IoCallDriver$10$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$10$anon1#1;
+
+ inline$storm_IoCallDriver$10$anon1#1:
+ goto inline$storm_IoCallDriver$10$label_18#1;
+
+ inline$storm_IoCallDriver$10$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$103$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$103$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$start#1:
+ inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$103$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$103$label_3_true#1, inline$IoGetCurrentIrpStackLocation$103$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$103$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$103$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$103$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$103$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$103$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$103$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$103$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$103$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$103$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$103$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$103$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$103$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$103$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$103$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$103$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$103$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$103$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$103$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$103$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$103$Return#1:
+ goto inline$storm_IoCallDriver$10$label_18$1#1;
+
+ inline$storm_IoCallDriver$10$label_18$1#1:
+ goto inline$storm_IoCallDriver$10$anon13_Then#1, inline$storm_IoCallDriver$10$anon13_Else#1;
+
+ inline$storm_IoCallDriver$10$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$10$anon6#1;
+
+ inline$storm_IoCallDriver$10$anon6#1:
+ goto inline$storm_IoCallDriver$10$label_21#1;
+
+ inline$storm_IoCallDriver$10$label_21#1:
+ goto inline$storm_IoCallDriver$10$label_22#1;
+
+ inline$storm_IoCallDriver$10$label_22#1:
+ goto inline$storm_IoCallDriver$10$label_23#1;
+
+ inline$storm_IoCallDriver$10$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$10$label_24#1;
+
+ inline$storm_IoCallDriver$10$label_24#1:
+ call inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$10$label_27#1;
+
+ inline$storm_IoCallDriver$10$label_27#1:
+ goto inline$storm_IoCallDriver$10$label_27_case_0#1, inline$storm_IoCallDriver$10$label_27_case_1#1, inline$storm_IoCallDriver$10$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$10$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$10$label_30#1;
+
+ inline$storm_IoCallDriver$10$label_30#1:
+ inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$10$label_31#1;
+
+ inline$storm_IoCallDriver$10$label_31#1:
+ goto inline$storm_IoCallDriver$10$label_32#1;
+
+ inline$storm_IoCallDriver$10$label_32#1:
+ goto inline$storm_IoCallDriver$10$label_33#1;
+
+ inline$storm_IoCallDriver$10$label_33#1:
+ goto inline$CallCompletionRoutine$20$Entry#1;
+
+ inline$CallCompletionRoutine$20$Entry#1:
+ inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$20$start#1;
+
+ inline$CallCompletionRoutine$20$start#1:
+ inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$20$label_3#1;
+
+ inline$CallCompletionRoutine$20$label_3#1:
+ goto inline$CallCompletionRoutine$20$label_4#1;
+
+ inline$CallCompletionRoutine$20$label_4#1:
+ goto inline$CallCompletionRoutine$20$label_5#1;
+
+ inline$CallCompletionRoutine$20$label_5#1:
+ goto inline$CallCompletionRoutine$20$label_6#1;
+
+ inline$CallCompletionRoutine$20$label_6#1:
+ goto inline$CallCompletionRoutine$20$label_7#1;
+
+ inline$CallCompletionRoutine$20$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$104$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$104$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$start#1:
+ inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$104$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$104$label_3_true#1, inline$IoGetCurrentIrpStackLocation$104$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$104$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$104$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$104$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$104$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$104$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$104$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$104$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$104$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$104$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$104$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$104$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$104$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$104$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$104$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$104$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$104$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$104$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$104$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$104$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$104$Return#1:
+ goto inline$CallCompletionRoutine$20$label_7$1#1;
+
+ inline$CallCompletionRoutine$20$label_7$1#1:
+ goto inline$CallCompletionRoutine$20$anon10_Then#1, inline$CallCompletionRoutine$20$anon10_Else#1;
+
+ inline$CallCompletionRoutine$20$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$20$anon1#1;
+
+ inline$CallCompletionRoutine$20$anon1#1:
+ goto inline$CallCompletionRoutine$20$label_10#1;
+
+ inline$CallCompletionRoutine$20$label_10#1:
+ goto inline$CallCompletionRoutine$20$label_11#1;
+
+ inline$CallCompletionRoutine$20$label_11#1:
+ havoc inline$CallCompletionRoutine$20$myNondetVar_0;
+ inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$myNondetVar_0;
+ goto inline$CallCompletionRoutine$20$label_12#1;
+
+ inline$CallCompletionRoutine$20$label_12#1:
+ havoc inline$CallCompletionRoutine$20$myNondetVar_0;
+ inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$myNondetVar_0;
+ goto inline$CallCompletionRoutine$20$label_13#1;
+
+ inline$CallCompletionRoutine$20$label_13#1:
+ havoc inline$CallCompletionRoutine$20$myNondetVar_0;
+ goto inline$CallCompletionRoutine$20$label_14#1;
+
+ inline$CallCompletionRoutine$20$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$105$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$105$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$start#1:
+ inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$105$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$105$label_3_true#1, inline$IoGetCurrentIrpStackLocation$105$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$105$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$105$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$105$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$105$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$105$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$105$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$105$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$105$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$105$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$105$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$105$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$105$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$105$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$105$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$105$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$105$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$105$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$105$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$105$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$105$Return#1:
+ goto inline$CallCompletionRoutine$20$label_14$1#1;
+
+ inline$CallCompletionRoutine$20$label_14$1#1:
+ goto inline$CallCompletionRoutine$20$anon11_Then#1, inline$CallCompletionRoutine$20$anon11_Else#1;
+
+ inline$CallCompletionRoutine$20$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$20$anon3#1;
+
+ inline$CallCompletionRoutine$20$anon3#1:
+ goto inline$CallCompletionRoutine$20$label_17#1;
+
+ inline$CallCompletionRoutine$20$label_17#1:
+ goto inline$CallCompletionRoutine$20$label_18#1;
+
+ inline$CallCompletionRoutine$20$label_18#1:
+ goto inline$CallCompletionRoutine$20$label_18_true#1, inline$CallCompletionRoutine$20$label_18_false#1;
+
+ inline$CallCompletionRoutine$20$label_18_false#1:
+ assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$20$label_1#1;
+
+ inline$CallCompletionRoutine$20$label_18_true#1:
+ assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$20$label_19#1;
+
+ inline$CallCompletionRoutine$20$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$20$label_20#1;
+
+ inline$CallCompletionRoutine$20$label_20#1:
+ goto inline$CallCompletionRoutine$20$label_20_icall_1#1, inline$CallCompletionRoutine$20$label_20_icall_2#1, inline$CallCompletionRoutine$20$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$20$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$20$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$20$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$20$Entry#1:
+ inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$20$start#1;
+
+ inline$BDLSystemPowerIoCompletion$20$start#1:
+ call inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$20$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_4#1:
+ inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_6#1:
+ inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$20$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$20$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$107$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$107$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$start#1:
+ inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$107$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$107$label_3_true#1, inline$IoGetCurrentIrpStackLocation$107$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$107$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$107$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$107$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$107$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$107$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$107$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$107$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$107$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$107$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$107$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$107$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$107$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$107$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$107$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$107$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$107$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$107$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$107$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$107$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$107$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon36_Then#1, inline$BDLSystemPowerIoCompletion$20$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_15#1:
+ goto inline$BDLGetDebugLevel$532$Entry#1;
+
+ inline$BDLGetDebugLevel$532$Entry#1:
+ goto inline$BDLGetDebugLevel$532$start#1;
+
+ inline$BDLGetDebugLevel$532$start#1:
+ goto inline$BDLGetDebugLevel$532$label_3#1;
+
+ inline$BDLGetDebugLevel$532$label_3#1:
+ havoc inline$BDLGetDebugLevel$532$myNondetVar_0;
+ inline$BDLGetDebugLevel$532$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$532$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$532$label_1#1;
+
+ inline$BDLGetDebugLevel$532$label_1#1:
+ goto inline$BDLGetDebugLevel$532$Return#1;
+
+ inline$BDLGetDebugLevel$532$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$532$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon37_Then#1, inline$BDLSystemPowerIoCompletion$20$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_18_true#1, inline$BDLSystemPowerIoCompletion$20$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_19#1:
+ goto inline$BDLGetDebugLevel$533$Entry#1;
+
+ inline$BDLGetDebugLevel$533$Entry#1:
+ goto inline$BDLGetDebugLevel$533$start#1;
+
+ inline$BDLGetDebugLevel$533$start#1:
+ goto inline$BDLGetDebugLevel$533$label_3#1;
+
+ inline$BDLGetDebugLevel$533$label_3#1:
+ havoc inline$BDLGetDebugLevel$533$myNondetVar_0;
+ inline$BDLGetDebugLevel$533$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$533$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$533$label_1#1;
+
+ inline$BDLGetDebugLevel$533$label_1#1:
+ goto inline$BDLGetDebugLevel$533$Return#1;
+
+ inline$BDLGetDebugLevel$533$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$533$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon38_Then#1, inline$BDLSystemPowerIoCompletion$20$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_28_true#1, inline$BDLSystemPowerIoCompletion$20$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_29#1:
+ goto inline$BDLGetDebugLevel$534$Entry#1;
+
+ inline$BDLGetDebugLevel$534$Entry#1:
+ goto inline$BDLGetDebugLevel$534$start#1;
+
+ inline$BDLGetDebugLevel$534$start#1:
+ goto inline$BDLGetDebugLevel$534$label_3#1;
+
+ inline$BDLGetDebugLevel$534$label_3#1:
+ havoc inline$BDLGetDebugLevel$534$myNondetVar_0;
+ inline$BDLGetDebugLevel$534$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$534$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$534$label_1#1;
+
+ inline$BDLGetDebugLevel$534$label_1#1:
+ goto inline$BDLGetDebugLevel$534$Return#1;
+
+ inline$BDLGetDebugLevel$534$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$534$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon39_Then#1, inline$BDLSystemPowerIoCompletion$20$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_38_true#1, inline$BDLSystemPowerIoCompletion$20$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_39_true#1, inline$BDLSystemPowerIoCompletion$20$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$20$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$20$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$20$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$20$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$20$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_106_true#1, inline$BDLSystemPowerIoCompletion$20$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$20$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$20$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$20$myNondetVar_0, inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$20$anon50_Then#1, inline$BDLSystemPowerIoCompletion$20$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_112#1:
+ inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_113_true#1, inline$BDLSystemPowerIoCompletion$20$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$20$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_117#1:
+ goto inline$BDLGetDebugLevel$541$Entry#1;
+
+ inline$BDLGetDebugLevel$541$Entry#1:
+ goto inline$BDLGetDebugLevel$541$start#1;
+
+ inline$BDLGetDebugLevel$541$start#1:
+ goto inline$BDLGetDebugLevel$541$label_3#1;
+
+ inline$BDLGetDebugLevel$541$label_3#1:
+ havoc inline$BDLGetDebugLevel$541$myNondetVar_0;
+ inline$BDLGetDebugLevel$541$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$541$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$541$label_1#1;
+
+ inline$BDLGetDebugLevel$541$label_1#1:
+ goto inline$BDLGetDebugLevel$541$Return#1;
+
+ inline$BDLGetDebugLevel$541$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$541$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon51_Then#1, inline$BDLSystemPowerIoCompletion$20$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_120_true#1, inline$BDLSystemPowerIoCompletion$20$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_121#1:
+ goto inline$BDLGetDebugLevel$542$Entry#1;
+
+ inline$BDLGetDebugLevel$542$Entry#1:
+ goto inline$BDLGetDebugLevel$542$start#1;
+
+ inline$BDLGetDebugLevel$542$start#1:
+ goto inline$BDLGetDebugLevel$542$label_3#1;
+
+ inline$BDLGetDebugLevel$542$label_3#1:
+ havoc inline$BDLGetDebugLevel$542$myNondetVar_0;
+ inline$BDLGetDebugLevel$542$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$542$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$542$label_1#1;
+
+ inline$BDLGetDebugLevel$542$label_1#1:
+ goto inline$BDLGetDebugLevel$542$Return#1;
+
+ inline$BDLGetDebugLevel$542$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$542$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon52_Then#1, inline$BDLSystemPowerIoCompletion$20$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_130_true#1, inline$BDLSystemPowerIoCompletion$20$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_131#1:
+ goto inline$BDLGetDebugLevel$543$Entry#1;
+
+ inline$BDLGetDebugLevel$543$Entry#1:
+ goto inline$BDLGetDebugLevel$543$start#1;
+
+ inline$BDLGetDebugLevel$543$start#1:
+ goto inline$BDLGetDebugLevel$543$label_3#1;
+
+ inline$BDLGetDebugLevel$543$label_3#1:
+ havoc inline$BDLGetDebugLevel$543$myNondetVar_0;
+ inline$BDLGetDebugLevel$543$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$543$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$543$label_1#1;
+
+ inline$BDLGetDebugLevel$543$label_1#1:
+ goto inline$BDLGetDebugLevel$543$Return#1;
+
+ inline$BDLGetDebugLevel$543$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$543$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon53_Then#1, inline$BDLSystemPowerIoCompletion$20$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_140_true#1, inline$BDLSystemPowerIoCompletion$20$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$20$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_115#1:
+ inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$20$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$20$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$20$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_43#1:
+ goto inline$BDLGetDebugLevel$535$Entry#1;
+
+ inline$BDLGetDebugLevel$535$Entry#1:
+ goto inline$BDLGetDebugLevel$535$start#1;
+
+ inline$BDLGetDebugLevel$535$start#1:
+ goto inline$BDLGetDebugLevel$535$label_3#1;
+
+ inline$BDLGetDebugLevel$535$label_3#1:
+ havoc inline$BDLGetDebugLevel$535$myNondetVar_0;
+ inline$BDLGetDebugLevel$535$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$535$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$535$label_1#1;
+
+ inline$BDLGetDebugLevel$535$label_1#1:
+ goto inline$BDLGetDebugLevel$535$Return#1;
+
+ inline$BDLGetDebugLevel$535$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$535$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon40_Then#1, inline$BDLSystemPowerIoCompletion$20$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_46_true#1, inline$BDLSystemPowerIoCompletion$20$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_47#1:
+ goto inline$BDLGetDebugLevel$536$Entry#1;
+
+ inline$BDLGetDebugLevel$536$Entry#1:
+ goto inline$BDLGetDebugLevel$536$start#1;
+
+ inline$BDLGetDebugLevel$536$start#1:
+ goto inline$BDLGetDebugLevel$536$label_3#1;
+
+ inline$BDLGetDebugLevel$536$label_3#1:
+ havoc inline$BDLGetDebugLevel$536$myNondetVar_0;
+ inline$BDLGetDebugLevel$536$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$536$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$536$label_1#1;
+
+ inline$BDLGetDebugLevel$536$label_1#1:
+ goto inline$BDLGetDebugLevel$536$Return#1;
+
+ inline$BDLGetDebugLevel$536$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$536$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon41_Then#1, inline$BDLSystemPowerIoCompletion$20$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_56_true#1, inline$BDLSystemPowerIoCompletion$20$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_57#1:
+ goto inline$BDLGetDebugLevel$537$Entry#1;
+
+ inline$BDLGetDebugLevel$537$Entry#1:
+ goto inline$BDLGetDebugLevel$537$start#1;
+
+ inline$BDLGetDebugLevel$537$start#1:
+ goto inline$BDLGetDebugLevel$537$label_3#1;
+
+ inline$BDLGetDebugLevel$537$label_3#1:
+ havoc inline$BDLGetDebugLevel$537$myNondetVar_0;
+ inline$BDLGetDebugLevel$537$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$537$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$537$label_1#1;
+
+ inline$BDLGetDebugLevel$537$label_1#1:
+ goto inline$BDLGetDebugLevel$537$Return#1;
+
+ inline$BDLGetDebugLevel$537$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$537$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon42_Then#1, inline$BDLSystemPowerIoCompletion$20$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_66_true#1, inline$BDLSystemPowerIoCompletion$20$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$20$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$20$anon43_Then#1, inline$BDLSystemPowerIoCompletion$20$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$20$anon44_Then#1, inline$BDLSystemPowerIoCompletion$20$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_74#1:
+ goto inline$storm_IoCompleteRequest$42$Entry#1;
+
+ inline$storm_IoCompleteRequest$42$Entry#1:
+ inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$20$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$42$start#1;
+
+ inline$storm_IoCompleteRequest$42$start#1:
+ inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$42$label_3#1;
+
+ inline$storm_IoCompleteRequest$42$label_3#1:
+ call inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$42$label_6#1;
+
+ inline$storm_IoCompleteRequest$42$label_6#1:
+ goto inline$storm_IoCompleteRequest$42$label_6_true#1, inline$storm_IoCompleteRequest$42$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$42$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$42$label_7#1;
+
+ inline$storm_IoCompleteRequest$42$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$42$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$42$label_8#1;
+
+ inline$storm_IoCompleteRequest$42$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$42$anon3_Then#1, inline$storm_IoCompleteRequest$42$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$42$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$42$anon1#1;
+
+ inline$storm_IoCompleteRequest$42$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$42$label_9#1;
+
+ inline$storm_IoCompleteRequest$42$label_9#1:
+ goto inline$storm_IoCompleteRequest$42$label_9_true#1, inline$storm_IoCompleteRequest$42$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$42$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$42$label_10#1;
+
+ inline$storm_IoCompleteRequest$42$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$42$label_1#1;
+
+ inline$storm_IoCompleteRequest$42$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$42$label_7#1;
+
+ inline$storm_IoCompleteRequest$42$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$42$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$42$label_1#1;
+
+ inline$storm_IoCompleteRequest$42$label_1#1:
+ goto inline$storm_IoCompleteRequest$42$Return#1;
+
+ inline$storm_IoCompleteRequest$42$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$42$Return#1;
+
+ inline$storm_IoCompleteRequest$42$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon45_Then#1, inline$BDLSystemPowerIoCompletion$20$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$20$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$20$anon46_Then#1, inline$BDLSystemPowerIoCompletion$20$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_80#1:
+ goto inline$BDLGetDebugLevel$538$Entry#1;
+
+ inline$BDLGetDebugLevel$538$Entry#1:
+ goto inline$BDLGetDebugLevel$538$start#1;
+
+ inline$BDLGetDebugLevel$538$start#1:
+ goto inline$BDLGetDebugLevel$538$label_3#1;
+
+ inline$BDLGetDebugLevel$538$label_3#1:
+ havoc inline$BDLGetDebugLevel$538$myNondetVar_0;
+ inline$BDLGetDebugLevel$538$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$538$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$538$label_1#1;
+
+ inline$BDLGetDebugLevel$538$label_1#1:
+ goto inline$BDLGetDebugLevel$538$Return#1;
+
+ inline$BDLGetDebugLevel$538$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$538$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon47_Then#1, inline$BDLSystemPowerIoCompletion$20$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_83_true#1, inline$BDLSystemPowerIoCompletion$20$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_84#1:
+ goto inline$BDLGetDebugLevel$539$Entry#1;
+
+ inline$BDLGetDebugLevel$539$Entry#1:
+ goto inline$BDLGetDebugLevel$539$start#1;
+
+ inline$BDLGetDebugLevel$539$start#1:
+ goto inline$BDLGetDebugLevel$539$label_3#1;
+
+ inline$BDLGetDebugLevel$539$label_3#1:
+ havoc inline$BDLGetDebugLevel$539$myNondetVar_0;
+ inline$BDLGetDebugLevel$539$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$539$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$539$label_1#1;
+
+ inline$BDLGetDebugLevel$539$label_1#1:
+ goto inline$BDLGetDebugLevel$539$Return#1;
+
+ inline$BDLGetDebugLevel$539$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$539$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon48_Then#1, inline$BDLSystemPowerIoCompletion$20$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_93_true#1, inline$BDLSystemPowerIoCompletion$20$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$20$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$20$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_94#1:
+ goto inline$BDLGetDebugLevel$540$Entry#1;
+
+ inline$BDLGetDebugLevel$540$Entry#1:
+ goto inline$BDLGetDebugLevel$540$start#1;
+
+ inline$BDLGetDebugLevel$540$start#1:
+ goto inline$BDLGetDebugLevel$540$label_3#1;
+
+ inline$BDLGetDebugLevel$540$label_3#1:
+ havoc inline$BDLGetDebugLevel$540$myNondetVar_0;
+ inline$BDLGetDebugLevel$540$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$540$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$540$label_1#1;
+
+ inline$BDLGetDebugLevel$540$label_1#1:
+ goto inline$BDLGetDebugLevel$540$Return#1;
+
+ inline$BDLGetDebugLevel$540$Return#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$540$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$20$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$20$anon49_Then#1, inline$BDLSystemPowerIoCompletion$20$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_103_true#1, inline$BDLSystemPowerIoCompletion$20$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$20$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$20$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$20$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_104#1:
+ inline$BDLSystemPowerIoCompletion$20$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$20$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$20$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$20$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$20$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$20$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$20$Return#1:
+ inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$20$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$20$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$20$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$20$anon14_Then#1, inline$CallCompletionRoutine$20$anon14_Else#1;
+
+ inline$CallCompletionRoutine$20$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$20$anon9#1;
+
+ inline$CallCompletionRoutine$20$anon9#1:
+ goto inline$CallCompletionRoutine$20$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$20$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$20$Return#1;
+
+ inline$CallCompletionRoutine$20$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$20$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$20$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$20$Entry#1:
+ inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$20$start#1;
+
+ inline$BDLDevicePowerIoCompletion$20$start#1:
+ call inline$BDLDevicePowerIoCompletion$20$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$20$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_4#1:
+ inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_6#1:
+ inline$BDLDevicePowerIoCompletion$20$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$20$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$20$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$106$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$106$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$start#1:
+ inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$106$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$106$label_3_true#1, inline$IoGetCurrentIrpStackLocation$106$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$106$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$106$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$106$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$106$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$106$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$106$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$106$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$106$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$106$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$106$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$106$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$106$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$106$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$106$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$106$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$106$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$106$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$106$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$106$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$106$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$106$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$106$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$106$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon30_Then#1, inline$BDLDevicePowerIoCompletion$20$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_13#1:
+ inline$BDLDevicePowerIoCompletion$20$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_17#1:
+ goto inline$BDLGetDebugLevel$523$Entry#1;
+
+ inline$BDLGetDebugLevel$523$Entry#1:
+ goto inline$BDLGetDebugLevel$523$start#1;
+
+ inline$BDLGetDebugLevel$523$start#1:
+ goto inline$BDLGetDebugLevel$523$label_3#1;
+
+ inline$BDLGetDebugLevel$523$label_3#1:
+ havoc inline$BDLGetDebugLevel$523$myNondetVar_0;
+ inline$BDLGetDebugLevel$523$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$523$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$523$label_1#1;
+
+ inline$BDLGetDebugLevel$523$label_1#1:
+ goto inline$BDLGetDebugLevel$523$Return#1;
+
+ inline$BDLGetDebugLevel$523$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$523$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon31_Then#1, inline$BDLDevicePowerIoCompletion$20$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_20_true#1, inline$BDLDevicePowerIoCompletion$20$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_21#1:
+ goto inline$BDLGetDebugLevel$524$Entry#1;
+
+ inline$BDLGetDebugLevel$524$Entry#1:
+ goto inline$BDLGetDebugLevel$524$start#1;
+
+ inline$BDLGetDebugLevel$524$start#1:
+ goto inline$BDLGetDebugLevel$524$label_3#1;
+
+ inline$BDLGetDebugLevel$524$label_3#1:
+ havoc inline$BDLGetDebugLevel$524$myNondetVar_0;
+ inline$BDLGetDebugLevel$524$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$524$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$524$label_1#1;
+
+ inline$BDLGetDebugLevel$524$label_1#1:
+ goto inline$BDLGetDebugLevel$524$Return#1;
+
+ inline$BDLGetDebugLevel$524$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$524$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon32_Then#1, inline$BDLDevicePowerIoCompletion$20$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_30_true#1, inline$BDLDevicePowerIoCompletion$20$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_31#1:
+ goto inline$BDLGetDebugLevel$525$Entry#1;
+
+ inline$BDLGetDebugLevel$525$Entry#1:
+ goto inline$BDLGetDebugLevel$525$start#1;
+
+ inline$BDLGetDebugLevel$525$start#1:
+ goto inline$BDLGetDebugLevel$525$label_3#1;
+
+ inline$BDLGetDebugLevel$525$label_3#1:
+ havoc inline$BDLGetDebugLevel$525$myNondetVar_0;
+ inline$BDLGetDebugLevel$525$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$525$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$525$label_1#1;
+
+ inline$BDLGetDebugLevel$525$label_1#1:
+ goto inline$BDLGetDebugLevel$525$Return#1;
+
+ inline$BDLGetDebugLevel$525$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$525$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon33_Then#1, inline$BDLDevicePowerIoCompletion$20$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_40_true#1, inline$BDLDevicePowerIoCompletion$20$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_41_true#1, inline$BDLDevicePowerIoCompletion$20$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$20$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$20$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_44_true#1, inline$BDLDevicePowerIoCompletion$20$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_45_true#1, inline$BDLDevicePowerIoCompletion$20$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$20$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$20$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$20$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_54#1:
+ inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$20$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_55_true#1, inline$BDLDevicePowerIoCompletion$20$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$20$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$20$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$20$anon34_Then#1, inline$BDLDevicePowerIoCompletion$20$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_59#1:
+ goto inline$BDLGetDebugLevel$526$Entry#1;
+
+ inline$BDLGetDebugLevel$526$Entry#1:
+ goto inline$BDLGetDebugLevel$526$start#1;
+
+ inline$BDLGetDebugLevel$526$start#1:
+ goto inline$BDLGetDebugLevel$526$label_3#1;
+
+ inline$BDLGetDebugLevel$526$label_3#1:
+ havoc inline$BDLGetDebugLevel$526$myNondetVar_0;
+ inline$BDLGetDebugLevel$526$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$526$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$526$label_1#1;
+
+ inline$BDLGetDebugLevel$526$label_1#1:
+ goto inline$BDLGetDebugLevel$526$Return#1;
+
+ inline$BDLGetDebugLevel$526$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$526$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon35_Then#1, inline$BDLDevicePowerIoCompletion$20$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_62_true#1, inline$BDLDevicePowerIoCompletion$20$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_63#1:
+ goto inline$BDLGetDebugLevel$527$Entry#1;
+
+ inline$BDLGetDebugLevel$527$Entry#1:
+ goto inline$BDLGetDebugLevel$527$start#1;
+
+ inline$BDLGetDebugLevel$527$start#1:
+ goto inline$BDLGetDebugLevel$527$label_3#1;
+
+ inline$BDLGetDebugLevel$527$label_3#1:
+ havoc inline$BDLGetDebugLevel$527$myNondetVar_0;
+ inline$BDLGetDebugLevel$527$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$527$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$527$label_1#1;
+
+ inline$BDLGetDebugLevel$527$label_1#1:
+ goto inline$BDLGetDebugLevel$527$Return#1;
+
+ inline$BDLGetDebugLevel$527$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$527$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon36_Then#1, inline$BDLDevicePowerIoCompletion$20$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_72_true#1, inline$BDLDevicePowerIoCompletion$20$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_73#1:
+ goto inline$BDLGetDebugLevel$528$Entry#1;
+
+ inline$BDLGetDebugLevel$528$Entry#1:
+ goto inline$BDLGetDebugLevel$528$start#1;
+
+ inline$BDLGetDebugLevel$528$start#1:
+ goto inline$BDLGetDebugLevel$528$label_3#1;
+
+ inline$BDLGetDebugLevel$528$label_3#1:
+ havoc inline$BDLGetDebugLevel$528$myNondetVar_0;
+ inline$BDLGetDebugLevel$528$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$528$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$528$label_1#1;
+
+ inline$BDLGetDebugLevel$528$label_1#1:
+ goto inline$BDLGetDebugLevel$528$Return#1;
+
+ inline$BDLGetDebugLevel$528$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$528$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon37_Then#1, inline$BDLDevicePowerIoCompletion$20$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_82_true#1, inline$BDLDevicePowerIoCompletion$20$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$20$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$20$anon38_Then#1, inline$BDLDevicePowerIoCompletion$20$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$20$anon39_Then#1, inline$BDLDevicePowerIoCompletion$20$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_92#1:
+ goto inline$storm_IoCompleteRequest$41$Entry#1;
+
+ inline$storm_IoCompleteRequest$41$Entry#1:
+ inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$20$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$41$start#1;
+
+ inline$storm_IoCompleteRequest$41$start#1:
+ inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$41$label_3#1;
+
+ inline$storm_IoCompleteRequest$41$label_3#1:
+ call inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$41$label_6#1;
+
+ inline$storm_IoCompleteRequest$41$label_6#1:
+ goto inline$storm_IoCompleteRequest$41$label_6_true#1, inline$storm_IoCompleteRequest$41$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$41$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$41$label_7#1;
+
+ inline$storm_IoCompleteRequest$41$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$41$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$41$label_8#1;
+
+ inline$storm_IoCompleteRequest$41$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$41$anon3_Then#1, inline$storm_IoCompleteRequest$41$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$41$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$41$anon1#1;
+
+ inline$storm_IoCompleteRequest$41$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$41$label_9#1;
+
+ inline$storm_IoCompleteRequest$41$label_9#1:
+ goto inline$storm_IoCompleteRequest$41$label_9_true#1, inline$storm_IoCompleteRequest$41$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$41$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$41$label_10#1;
+
+ inline$storm_IoCompleteRequest$41$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$41$label_1#1;
+
+ inline$storm_IoCompleteRequest$41$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$41$label_7#1;
+
+ inline$storm_IoCompleteRequest$41$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$41$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$41$label_1#1;
+
+ inline$storm_IoCompleteRequest$41$label_1#1:
+ goto inline$storm_IoCompleteRequest$41$Return#1;
+
+ inline$storm_IoCompleteRequest$41$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$41$Return#1;
+
+ inline$storm_IoCompleteRequest$41$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon40_Then#1, inline$BDLDevicePowerIoCompletion$20$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$20$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$20$anon41_Then#1, inline$BDLDevicePowerIoCompletion$20$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_98#1:
+ goto inline$BDLGetDebugLevel$529$Entry#1;
+
+ inline$BDLGetDebugLevel$529$Entry#1:
+ goto inline$BDLGetDebugLevel$529$start#1;
+
+ inline$BDLGetDebugLevel$529$start#1:
+ goto inline$BDLGetDebugLevel$529$label_3#1;
+
+ inline$BDLGetDebugLevel$529$label_3#1:
+ havoc inline$BDLGetDebugLevel$529$myNondetVar_0;
+ inline$BDLGetDebugLevel$529$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$529$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$529$label_1#1;
+
+ inline$BDLGetDebugLevel$529$label_1#1:
+ goto inline$BDLGetDebugLevel$529$Return#1;
+
+ inline$BDLGetDebugLevel$529$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$529$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon42_Then#1, inline$BDLDevicePowerIoCompletion$20$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_101_true#1, inline$BDLDevicePowerIoCompletion$20$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_102#1:
+ goto inline$BDLGetDebugLevel$530$Entry#1;
+
+ inline$BDLGetDebugLevel$530$Entry#1:
+ goto inline$BDLGetDebugLevel$530$start#1;
+
+ inline$BDLGetDebugLevel$530$start#1:
+ goto inline$BDLGetDebugLevel$530$label_3#1;
+
+ inline$BDLGetDebugLevel$530$label_3#1:
+ havoc inline$BDLGetDebugLevel$530$myNondetVar_0;
+ inline$BDLGetDebugLevel$530$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$530$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$530$label_1#1;
+
+ inline$BDLGetDebugLevel$530$label_1#1:
+ goto inline$BDLGetDebugLevel$530$Return#1;
+
+ inline$BDLGetDebugLevel$530$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$530$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon43_Then#1, inline$BDLDevicePowerIoCompletion$20$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_111_true#1, inline$BDLDevicePowerIoCompletion$20$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$20$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$20$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_112#1:
+ goto inline$BDLGetDebugLevel$531$Entry#1;
+
+ inline$BDLGetDebugLevel$531$Entry#1:
+ goto inline$BDLGetDebugLevel$531$start#1;
+
+ inline$BDLGetDebugLevel$531$start#1:
+ goto inline$BDLGetDebugLevel$531$label_3#1;
+
+ inline$BDLGetDebugLevel$531$label_3#1:
+ havoc inline$BDLGetDebugLevel$531$myNondetVar_0;
+ inline$BDLGetDebugLevel$531$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$531$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$531$label_1#1;
+
+ inline$BDLGetDebugLevel$531$label_1#1:
+ goto inline$BDLGetDebugLevel$531$Return#1;
+
+ inline$BDLGetDebugLevel$531$Return#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$531$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$20$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$20$anon44_Then#1, inline$BDLDevicePowerIoCompletion$20$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_121_true#1, inline$BDLDevicePowerIoCompletion$20$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$20$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$20$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$20$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_122#1:
+ inline$BDLDevicePowerIoCompletion$20$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$20$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$20$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$20$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$20$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$20$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$20$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$20$Return#1:
+ inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$20$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$20$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$20$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$20$anon13_Then#1, inline$CallCompletionRoutine$20$anon13_Else#1;
+
+ inline$CallCompletionRoutine$20$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$20$anon7#1;
+
+ inline$CallCompletionRoutine$20$anon7#1:
+ goto inline$CallCompletionRoutine$20$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$20$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$20$Return#1;
+
+ inline$CallCompletionRoutine$20$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$20$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$20$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$20$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$20$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$20$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$start#1:
+ inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$20$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$20$label_3_true#1, inline$BDLCallDriverCompletionRoutine$20$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$20$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$20$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$20$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$20$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$20$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_6#1:
+ goto inline$storm_KeSetEvent$22$Entry#1;
+
+ inline$storm_KeSetEvent$22$Entry#1:
+ inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$20$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$22$start#1;
+
+ inline$storm_KeSetEvent$22$start#1:
+ inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$22$label_3#1;
+
+ inline$storm_KeSetEvent$22$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$22$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$22$label_1#1;
+
+ inline$storm_KeSetEvent$22$label_1#1:
+ goto inline$storm_KeSetEvent$22$Return#1;
+
+ inline$storm_KeSetEvent$22$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$20$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$20$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$20$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$20$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$20$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$20$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$20$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$20$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$20$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$20$Return#1:
+ inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$20$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$20$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$20$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$20$anon12_Then#1, inline$CallCompletionRoutine$20$anon12_Else#1;
+
+ inline$CallCompletionRoutine$20$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$20$anon5#1;
+
+ inline$CallCompletionRoutine$20$anon5#1:
+ goto inline$CallCompletionRoutine$20$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$20$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$20$label_23#1;
+
+ inline$CallCompletionRoutine$20$label_23#1:
+ inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$20$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$20$label_24#1;
+
+ inline$CallCompletionRoutine$20$label_24#1:
+ goto inline$CallCompletionRoutine$20$label_24_true#1, inline$CallCompletionRoutine$20$label_24_false#1;
+
+ inline$CallCompletionRoutine$20$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$20$label_1#1;
+
+ inline$CallCompletionRoutine$20$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$20$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$20$label_25#1;
+
+ inline$CallCompletionRoutine$20$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$20$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$20$label_1#1;
+
+ inline$CallCompletionRoutine$20$label_1#1:
+ goto inline$CallCompletionRoutine$20$Return#1;
+
+ inline$CallCompletionRoutine$20$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$20$Return#1;
+
+ inline$CallCompletionRoutine$20$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$20$Return#1;
+
+ inline$CallCompletionRoutine$20$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$20$Return#1;
+
+ inline$CallCompletionRoutine$20$Return#1:
+ goto inline$storm_IoCallDriver$10$label_33$1#1;
+
+ inline$storm_IoCallDriver$10$label_33$1#1:
+ goto inline$storm_IoCallDriver$10$anon14_Then#1, inline$storm_IoCallDriver$10$anon14_Else#1;
+
+ inline$storm_IoCallDriver$10$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$10$anon8#1;
+
+ inline$storm_IoCallDriver$10$anon8#1:
+ goto inline$storm_IoCallDriver$10$label_36#1;
+
+ inline$storm_IoCallDriver$10$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$10$Return#1;
+
+ inline$storm_IoCallDriver$10$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$10$label_29#1;
+
+ inline$storm_IoCallDriver$10$label_29#1:
+ inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$10$label_37#1;
+
+ inline$storm_IoCallDriver$10$label_37#1:
+ goto inline$storm_IoCallDriver$10$label_38#1;
+
+ inline$storm_IoCallDriver$10$label_38#1:
+ goto inline$storm_IoCallDriver$10$label_39#1;
+
+ inline$storm_IoCallDriver$10$label_39#1:
+ goto inline$CallCompletionRoutine$21$Entry#1;
+
+ inline$CallCompletionRoutine$21$Entry#1:
+ inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$21$start#1;
+
+ inline$CallCompletionRoutine$21$start#1:
+ inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$21$label_3#1;
+
+ inline$CallCompletionRoutine$21$label_3#1:
+ goto inline$CallCompletionRoutine$21$label_4#1;
+
+ inline$CallCompletionRoutine$21$label_4#1:
+ goto inline$CallCompletionRoutine$21$label_5#1;
+
+ inline$CallCompletionRoutine$21$label_5#1:
+ goto inline$CallCompletionRoutine$21$label_6#1;
+
+ inline$CallCompletionRoutine$21$label_6#1:
+ goto inline$CallCompletionRoutine$21$label_7#1;
+
+ inline$CallCompletionRoutine$21$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$108$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$108$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$start#1:
+ inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$108$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$108$label_3_true#1, inline$IoGetCurrentIrpStackLocation$108$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$108$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$108$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$108$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$108$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$108$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$108$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$108$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$108$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$108$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$108$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$108$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$108$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$108$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$108$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$108$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$108$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$108$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$108$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$108$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$108$Return#1:
+ goto inline$CallCompletionRoutine$21$label_7$1#1;
+
+ inline$CallCompletionRoutine$21$label_7$1#1:
+ goto inline$CallCompletionRoutine$21$anon10_Then#1, inline$CallCompletionRoutine$21$anon10_Else#1;
+
+ inline$CallCompletionRoutine$21$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$21$anon1#1;
+
+ inline$CallCompletionRoutine$21$anon1#1:
+ goto inline$CallCompletionRoutine$21$label_10#1;
+
+ inline$CallCompletionRoutine$21$label_10#1:
+ goto inline$CallCompletionRoutine$21$label_11#1;
+
+ inline$CallCompletionRoutine$21$label_11#1:
+ havoc inline$CallCompletionRoutine$21$myNondetVar_0;
+ inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$myNondetVar_0;
+ goto inline$CallCompletionRoutine$21$label_12#1;
+
+ inline$CallCompletionRoutine$21$label_12#1:
+ havoc inline$CallCompletionRoutine$21$myNondetVar_0;
+ inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$myNondetVar_0;
+ goto inline$CallCompletionRoutine$21$label_13#1;
+
+ inline$CallCompletionRoutine$21$label_13#1:
+ havoc inline$CallCompletionRoutine$21$myNondetVar_0;
+ goto inline$CallCompletionRoutine$21$label_14#1;
+
+ inline$CallCompletionRoutine$21$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$109$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$109$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$start#1:
+ inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$109$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$109$label_3_true#1, inline$IoGetCurrentIrpStackLocation$109$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$109$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$109$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$109$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$109$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$109$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$109$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$109$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$109$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$109$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$109$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$109$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$109$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$109$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$109$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$109$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$109$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$109$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$109$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$109$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$109$Return#1:
+ goto inline$CallCompletionRoutine$21$label_14$1#1;
+
+ inline$CallCompletionRoutine$21$label_14$1#1:
+ goto inline$CallCompletionRoutine$21$anon11_Then#1, inline$CallCompletionRoutine$21$anon11_Else#1;
+
+ inline$CallCompletionRoutine$21$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$21$anon3#1;
+
+ inline$CallCompletionRoutine$21$anon3#1:
+ goto inline$CallCompletionRoutine$21$label_17#1;
+
+ inline$CallCompletionRoutine$21$label_17#1:
+ goto inline$CallCompletionRoutine$21$label_18#1;
+
+ inline$CallCompletionRoutine$21$label_18#1:
+ goto inline$CallCompletionRoutine$21$label_18_true#1, inline$CallCompletionRoutine$21$label_18_false#1;
+
+ inline$CallCompletionRoutine$21$label_18_false#1:
+ assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$21$label_1#1;
+
+ inline$CallCompletionRoutine$21$label_18_true#1:
+ assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$21$label_19#1;
+
+ inline$CallCompletionRoutine$21$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$21$label_20#1;
+
+ inline$CallCompletionRoutine$21$label_20#1:
+ goto inline$CallCompletionRoutine$21$label_20_icall_1#1, inline$CallCompletionRoutine$21$label_20_icall_2#1, inline$CallCompletionRoutine$21$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$21$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$21$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$21$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$21$Entry#1:
+ inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$21$start#1;
+
+ inline$BDLSystemPowerIoCompletion$21$start#1:
+ call inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$21$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_4#1:
+ inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_6#1:
+ inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$21$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$21$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$111$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$111$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$start#1:
+ inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$111$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$111$label_3_true#1, inline$IoGetCurrentIrpStackLocation$111$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$111$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$111$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$111$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$111$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$111$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$111$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$111$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$111$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$111$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$111$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$111$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$111$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$111$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$111$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$111$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$111$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$111$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$111$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$111$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$111$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon36_Then#1, inline$BDLSystemPowerIoCompletion$21$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_15#1:
+ goto inline$BDLGetDebugLevel$553$Entry#1;
+
+ inline$BDLGetDebugLevel$553$Entry#1:
+ goto inline$BDLGetDebugLevel$553$start#1;
+
+ inline$BDLGetDebugLevel$553$start#1:
+ goto inline$BDLGetDebugLevel$553$label_3#1;
+
+ inline$BDLGetDebugLevel$553$label_3#1:
+ havoc inline$BDLGetDebugLevel$553$myNondetVar_0;
+ inline$BDLGetDebugLevel$553$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$553$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$553$label_1#1;
+
+ inline$BDLGetDebugLevel$553$label_1#1:
+ goto inline$BDLGetDebugLevel$553$Return#1;
+
+ inline$BDLGetDebugLevel$553$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$553$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon37_Then#1, inline$BDLSystemPowerIoCompletion$21$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_18_true#1, inline$BDLSystemPowerIoCompletion$21$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_19#1:
+ goto inline$BDLGetDebugLevel$554$Entry#1;
+
+ inline$BDLGetDebugLevel$554$Entry#1:
+ goto inline$BDLGetDebugLevel$554$start#1;
+
+ inline$BDLGetDebugLevel$554$start#1:
+ goto inline$BDLGetDebugLevel$554$label_3#1;
+
+ inline$BDLGetDebugLevel$554$label_3#1:
+ havoc inline$BDLGetDebugLevel$554$myNondetVar_0;
+ inline$BDLGetDebugLevel$554$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$554$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$554$label_1#1;
+
+ inline$BDLGetDebugLevel$554$label_1#1:
+ goto inline$BDLGetDebugLevel$554$Return#1;
+
+ inline$BDLGetDebugLevel$554$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$554$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon38_Then#1, inline$BDLSystemPowerIoCompletion$21$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_28_true#1, inline$BDLSystemPowerIoCompletion$21$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_29#1:
+ goto inline$BDLGetDebugLevel$555$Entry#1;
+
+ inline$BDLGetDebugLevel$555$Entry#1:
+ goto inline$BDLGetDebugLevel$555$start#1;
+
+ inline$BDLGetDebugLevel$555$start#1:
+ goto inline$BDLGetDebugLevel$555$label_3#1;
+
+ inline$BDLGetDebugLevel$555$label_3#1:
+ havoc inline$BDLGetDebugLevel$555$myNondetVar_0;
+ inline$BDLGetDebugLevel$555$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$555$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$555$label_1#1;
+
+ inline$BDLGetDebugLevel$555$label_1#1:
+ goto inline$BDLGetDebugLevel$555$Return#1;
+
+ inline$BDLGetDebugLevel$555$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$555$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon39_Then#1, inline$BDLSystemPowerIoCompletion$21$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_38_true#1, inline$BDLSystemPowerIoCompletion$21$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_39_true#1, inline$BDLSystemPowerIoCompletion$21$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$21$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$21$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$21$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$21$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$21$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_106_true#1, inline$BDLSystemPowerIoCompletion$21$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$21$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$21$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$21$myNondetVar_0, inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$21$anon50_Then#1, inline$BDLSystemPowerIoCompletion$21$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_112#1:
+ inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_113_true#1, inline$BDLSystemPowerIoCompletion$21$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$21$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_117#1:
+ goto inline$BDLGetDebugLevel$562$Entry#1;
+
+ inline$BDLGetDebugLevel$562$Entry#1:
+ goto inline$BDLGetDebugLevel$562$start#1;
+
+ inline$BDLGetDebugLevel$562$start#1:
+ goto inline$BDLGetDebugLevel$562$label_3#1;
+
+ inline$BDLGetDebugLevel$562$label_3#1:
+ havoc inline$BDLGetDebugLevel$562$myNondetVar_0;
+ inline$BDLGetDebugLevel$562$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$562$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$562$label_1#1;
+
+ inline$BDLGetDebugLevel$562$label_1#1:
+ goto inline$BDLGetDebugLevel$562$Return#1;
+
+ inline$BDLGetDebugLevel$562$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$562$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon51_Then#1, inline$BDLSystemPowerIoCompletion$21$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_120_true#1, inline$BDLSystemPowerIoCompletion$21$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_121#1:
+ goto inline$BDLGetDebugLevel$563$Entry#1;
+
+ inline$BDLGetDebugLevel$563$Entry#1:
+ goto inline$BDLGetDebugLevel$563$start#1;
+
+ inline$BDLGetDebugLevel$563$start#1:
+ goto inline$BDLGetDebugLevel$563$label_3#1;
+
+ inline$BDLGetDebugLevel$563$label_3#1:
+ havoc inline$BDLGetDebugLevel$563$myNondetVar_0;
+ inline$BDLGetDebugLevel$563$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$563$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$563$label_1#1;
+
+ inline$BDLGetDebugLevel$563$label_1#1:
+ goto inline$BDLGetDebugLevel$563$Return#1;
+
+ inline$BDLGetDebugLevel$563$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$563$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon52_Then#1, inline$BDLSystemPowerIoCompletion$21$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_130_true#1, inline$BDLSystemPowerIoCompletion$21$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_131#1:
+ goto inline$BDLGetDebugLevel$564$Entry#1;
+
+ inline$BDLGetDebugLevel$564$Entry#1:
+ goto inline$BDLGetDebugLevel$564$start#1;
+
+ inline$BDLGetDebugLevel$564$start#1:
+ goto inline$BDLGetDebugLevel$564$label_3#1;
+
+ inline$BDLGetDebugLevel$564$label_3#1:
+ havoc inline$BDLGetDebugLevel$564$myNondetVar_0;
+ inline$BDLGetDebugLevel$564$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$564$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$564$label_1#1;
+
+ inline$BDLGetDebugLevel$564$label_1#1:
+ goto inline$BDLGetDebugLevel$564$Return#1;
+
+ inline$BDLGetDebugLevel$564$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$564$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon53_Then#1, inline$BDLSystemPowerIoCompletion$21$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_140_true#1, inline$BDLSystemPowerIoCompletion$21$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$21$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_115#1:
+ inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$21$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$21$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$21$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_43#1:
+ goto inline$BDLGetDebugLevel$556$Entry#1;
+
+ inline$BDLGetDebugLevel$556$Entry#1:
+ goto inline$BDLGetDebugLevel$556$start#1;
+
+ inline$BDLGetDebugLevel$556$start#1:
+ goto inline$BDLGetDebugLevel$556$label_3#1;
+
+ inline$BDLGetDebugLevel$556$label_3#1:
+ havoc inline$BDLGetDebugLevel$556$myNondetVar_0;
+ inline$BDLGetDebugLevel$556$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$556$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$556$label_1#1;
+
+ inline$BDLGetDebugLevel$556$label_1#1:
+ goto inline$BDLGetDebugLevel$556$Return#1;
+
+ inline$BDLGetDebugLevel$556$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$556$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon40_Then#1, inline$BDLSystemPowerIoCompletion$21$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_46_true#1, inline$BDLSystemPowerIoCompletion$21$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_47#1:
+ goto inline$BDLGetDebugLevel$557$Entry#1;
+
+ inline$BDLGetDebugLevel$557$Entry#1:
+ goto inline$BDLGetDebugLevel$557$start#1;
+
+ inline$BDLGetDebugLevel$557$start#1:
+ goto inline$BDLGetDebugLevel$557$label_3#1;
+
+ inline$BDLGetDebugLevel$557$label_3#1:
+ havoc inline$BDLGetDebugLevel$557$myNondetVar_0;
+ inline$BDLGetDebugLevel$557$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$557$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$557$label_1#1;
+
+ inline$BDLGetDebugLevel$557$label_1#1:
+ goto inline$BDLGetDebugLevel$557$Return#1;
+
+ inline$BDLGetDebugLevel$557$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$557$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon41_Then#1, inline$BDLSystemPowerIoCompletion$21$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_56_true#1, inline$BDLSystemPowerIoCompletion$21$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_57#1:
+ goto inline$BDLGetDebugLevel$558$Entry#1;
+
+ inline$BDLGetDebugLevel$558$Entry#1:
+ goto inline$BDLGetDebugLevel$558$start#1;
+
+ inline$BDLGetDebugLevel$558$start#1:
+ goto inline$BDLGetDebugLevel$558$label_3#1;
+
+ inline$BDLGetDebugLevel$558$label_3#1:
+ havoc inline$BDLGetDebugLevel$558$myNondetVar_0;
+ inline$BDLGetDebugLevel$558$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$558$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$558$label_1#1;
+
+ inline$BDLGetDebugLevel$558$label_1#1:
+ goto inline$BDLGetDebugLevel$558$Return#1;
+
+ inline$BDLGetDebugLevel$558$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$558$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon42_Then#1, inline$BDLSystemPowerIoCompletion$21$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_66_true#1, inline$BDLSystemPowerIoCompletion$21$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$21$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$21$anon43_Then#1, inline$BDLSystemPowerIoCompletion$21$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$21$anon44_Then#1, inline$BDLSystemPowerIoCompletion$21$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_74#1:
+ goto inline$storm_IoCompleteRequest$44$Entry#1;
+
+ inline$storm_IoCompleteRequest$44$Entry#1:
+ inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$21$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$44$start#1;
+
+ inline$storm_IoCompleteRequest$44$start#1:
+ inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$44$label_3#1;
+
+ inline$storm_IoCompleteRequest$44$label_3#1:
+ call inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$44$label_6#1;
+
+ inline$storm_IoCompleteRequest$44$label_6#1:
+ goto inline$storm_IoCompleteRequest$44$label_6_true#1, inline$storm_IoCompleteRequest$44$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$44$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$44$label_7#1;
+
+ inline$storm_IoCompleteRequest$44$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$44$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$44$label_8#1;
+
+ inline$storm_IoCompleteRequest$44$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$44$anon3_Then#1, inline$storm_IoCompleteRequest$44$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$44$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$44$anon1#1;
+
+ inline$storm_IoCompleteRequest$44$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$44$label_9#1;
+
+ inline$storm_IoCompleteRequest$44$label_9#1:
+ goto inline$storm_IoCompleteRequest$44$label_9_true#1, inline$storm_IoCompleteRequest$44$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$44$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$44$label_10#1;
+
+ inline$storm_IoCompleteRequest$44$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$44$label_1#1;
+
+ inline$storm_IoCompleteRequest$44$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$44$label_7#1;
+
+ inline$storm_IoCompleteRequest$44$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$44$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$44$label_1#1;
+
+ inline$storm_IoCompleteRequest$44$label_1#1:
+ goto inline$storm_IoCompleteRequest$44$Return#1;
+
+ inline$storm_IoCompleteRequest$44$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$44$Return#1;
+
+ inline$storm_IoCompleteRequest$44$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon45_Then#1, inline$BDLSystemPowerIoCompletion$21$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$21$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$21$anon46_Then#1, inline$BDLSystemPowerIoCompletion$21$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_80#1:
+ goto inline$BDLGetDebugLevel$559$Entry#1;
+
+ inline$BDLGetDebugLevel$559$Entry#1:
+ goto inline$BDLGetDebugLevel$559$start#1;
+
+ inline$BDLGetDebugLevel$559$start#1:
+ goto inline$BDLGetDebugLevel$559$label_3#1;
+
+ inline$BDLGetDebugLevel$559$label_3#1:
+ havoc inline$BDLGetDebugLevel$559$myNondetVar_0;
+ inline$BDLGetDebugLevel$559$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$559$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$559$label_1#1;
+
+ inline$BDLGetDebugLevel$559$label_1#1:
+ goto inline$BDLGetDebugLevel$559$Return#1;
+
+ inline$BDLGetDebugLevel$559$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$559$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon47_Then#1, inline$BDLSystemPowerIoCompletion$21$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_83_true#1, inline$BDLSystemPowerIoCompletion$21$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_84#1:
+ goto inline$BDLGetDebugLevel$560$Entry#1;
+
+ inline$BDLGetDebugLevel$560$Entry#1:
+ goto inline$BDLGetDebugLevel$560$start#1;
+
+ inline$BDLGetDebugLevel$560$start#1:
+ goto inline$BDLGetDebugLevel$560$label_3#1;
+
+ inline$BDLGetDebugLevel$560$label_3#1:
+ havoc inline$BDLGetDebugLevel$560$myNondetVar_0;
+ inline$BDLGetDebugLevel$560$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$560$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$560$label_1#1;
+
+ inline$BDLGetDebugLevel$560$label_1#1:
+ goto inline$BDLGetDebugLevel$560$Return#1;
+
+ inline$BDLGetDebugLevel$560$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$560$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon48_Then#1, inline$BDLSystemPowerIoCompletion$21$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_93_true#1, inline$BDLSystemPowerIoCompletion$21$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$21$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$21$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_94#1:
+ goto inline$BDLGetDebugLevel$561$Entry#1;
+
+ inline$BDLGetDebugLevel$561$Entry#1:
+ goto inline$BDLGetDebugLevel$561$start#1;
+
+ inline$BDLGetDebugLevel$561$start#1:
+ goto inline$BDLGetDebugLevel$561$label_3#1;
+
+ inline$BDLGetDebugLevel$561$label_3#1:
+ havoc inline$BDLGetDebugLevel$561$myNondetVar_0;
+ inline$BDLGetDebugLevel$561$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$561$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$561$label_1#1;
+
+ inline$BDLGetDebugLevel$561$label_1#1:
+ goto inline$BDLGetDebugLevel$561$Return#1;
+
+ inline$BDLGetDebugLevel$561$Return#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$561$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$21$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$21$anon49_Then#1, inline$BDLSystemPowerIoCompletion$21$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_103_true#1, inline$BDLSystemPowerIoCompletion$21$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$21$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$21$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$21$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_104#1:
+ inline$BDLSystemPowerIoCompletion$21$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$21$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$21$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$21$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$21$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$21$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$21$Return#1:
+ inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$21$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$21$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$21$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$21$anon14_Then#1, inline$CallCompletionRoutine$21$anon14_Else#1;
+
+ inline$CallCompletionRoutine$21$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$21$anon9#1;
+
+ inline$CallCompletionRoutine$21$anon9#1:
+ goto inline$CallCompletionRoutine$21$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$21$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$21$Return#1;
+
+ inline$CallCompletionRoutine$21$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$21$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$21$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$21$Entry#1:
+ inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$21$start#1;
+
+ inline$BDLDevicePowerIoCompletion$21$start#1:
+ call inline$BDLDevicePowerIoCompletion$21$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$21$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_4#1:
+ inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_6#1:
+ inline$BDLDevicePowerIoCompletion$21$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$21$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$21$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$110$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$110$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$start#1:
+ inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$110$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$110$label_3_true#1, inline$IoGetCurrentIrpStackLocation$110$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$110$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$110$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$110$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$110$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$110$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$110$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$110$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$110$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$110$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$110$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$110$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$110$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$110$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$110$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$110$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$110$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$110$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$110$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$110$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$110$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$110$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$110$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$110$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon30_Then#1, inline$BDLDevicePowerIoCompletion$21$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_13#1:
+ inline$BDLDevicePowerIoCompletion$21$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_17#1:
+ goto inline$BDLGetDebugLevel$544$Entry#1;
+
+ inline$BDLGetDebugLevel$544$Entry#1:
+ goto inline$BDLGetDebugLevel$544$start#1;
+
+ inline$BDLGetDebugLevel$544$start#1:
+ goto inline$BDLGetDebugLevel$544$label_3#1;
+
+ inline$BDLGetDebugLevel$544$label_3#1:
+ havoc inline$BDLGetDebugLevel$544$myNondetVar_0;
+ inline$BDLGetDebugLevel$544$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$544$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$544$label_1#1;
+
+ inline$BDLGetDebugLevel$544$label_1#1:
+ goto inline$BDLGetDebugLevel$544$Return#1;
+
+ inline$BDLGetDebugLevel$544$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$544$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon31_Then#1, inline$BDLDevicePowerIoCompletion$21$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_20_true#1, inline$BDLDevicePowerIoCompletion$21$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_21#1:
+ goto inline$BDLGetDebugLevel$545$Entry#1;
+
+ inline$BDLGetDebugLevel$545$Entry#1:
+ goto inline$BDLGetDebugLevel$545$start#1;
+
+ inline$BDLGetDebugLevel$545$start#1:
+ goto inline$BDLGetDebugLevel$545$label_3#1;
+
+ inline$BDLGetDebugLevel$545$label_3#1:
+ havoc inline$BDLGetDebugLevel$545$myNondetVar_0;
+ inline$BDLGetDebugLevel$545$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$545$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$545$label_1#1;
+
+ inline$BDLGetDebugLevel$545$label_1#1:
+ goto inline$BDLGetDebugLevel$545$Return#1;
+
+ inline$BDLGetDebugLevel$545$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$545$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon32_Then#1, inline$BDLDevicePowerIoCompletion$21$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_30_true#1, inline$BDLDevicePowerIoCompletion$21$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_31#1:
+ goto inline$BDLGetDebugLevel$546$Entry#1;
+
+ inline$BDLGetDebugLevel$546$Entry#1:
+ goto inline$BDLGetDebugLevel$546$start#1;
+
+ inline$BDLGetDebugLevel$546$start#1:
+ goto inline$BDLGetDebugLevel$546$label_3#1;
+
+ inline$BDLGetDebugLevel$546$label_3#1:
+ havoc inline$BDLGetDebugLevel$546$myNondetVar_0;
+ inline$BDLGetDebugLevel$546$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$546$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$546$label_1#1;
+
+ inline$BDLGetDebugLevel$546$label_1#1:
+ goto inline$BDLGetDebugLevel$546$Return#1;
+
+ inline$BDLGetDebugLevel$546$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$546$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon33_Then#1, inline$BDLDevicePowerIoCompletion$21$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_40_true#1, inline$BDLDevicePowerIoCompletion$21$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_41_true#1, inline$BDLDevicePowerIoCompletion$21$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$21$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$21$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_44_true#1, inline$BDLDevicePowerIoCompletion$21$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_45_true#1, inline$BDLDevicePowerIoCompletion$21$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$21$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$21$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$21$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_54#1:
+ inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$21$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_55_true#1, inline$BDLDevicePowerIoCompletion$21$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$21$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$21$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$21$anon34_Then#1, inline$BDLDevicePowerIoCompletion$21$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_59#1:
+ goto inline$BDLGetDebugLevel$547$Entry#1;
+
+ inline$BDLGetDebugLevel$547$Entry#1:
+ goto inline$BDLGetDebugLevel$547$start#1;
+
+ inline$BDLGetDebugLevel$547$start#1:
+ goto inline$BDLGetDebugLevel$547$label_3#1;
+
+ inline$BDLGetDebugLevel$547$label_3#1:
+ havoc inline$BDLGetDebugLevel$547$myNondetVar_0;
+ inline$BDLGetDebugLevel$547$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$547$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$547$label_1#1;
+
+ inline$BDLGetDebugLevel$547$label_1#1:
+ goto inline$BDLGetDebugLevel$547$Return#1;
+
+ inline$BDLGetDebugLevel$547$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$547$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon35_Then#1, inline$BDLDevicePowerIoCompletion$21$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_62_true#1, inline$BDLDevicePowerIoCompletion$21$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_63#1:
+ goto inline$BDLGetDebugLevel$548$Entry#1;
+
+ inline$BDLGetDebugLevel$548$Entry#1:
+ goto inline$BDLGetDebugLevel$548$start#1;
+
+ inline$BDLGetDebugLevel$548$start#1:
+ goto inline$BDLGetDebugLevel$548$label_3#1;
+
+ inline$BDLGetDebugLevel$548$label_3#1:
+ havoc inline$BDLGetDebugLevel$548$myNondetVar_0;
+ inline$BDLGetDebugLevel$548$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$548$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$548$label_1#1;
+
+ inline$BDLGetDebugLevel$548$label_1#1:
+ goto inline$BDLGetDebugLevel$548$Return#1;
+
+ inline$BDLGetDebugLevel$548$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$548$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon36_Then#1, inline$BDLDevicePowerIoCompletion$21$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_72_true#1, inline$BDLDevicePowerIoCompletion$21$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_73#1:
+ goto inline$BDLGetDebugLevel$549$Entry#1;
+
+ inline$BDLGetDebugLevel$549$Entry#1:
+ goto inline$BDLGetDebugLevel$549$start#1;
+
+ inline$BDLGetDebugLevel$549$start#1:
+ goto inline$BDLGetDebugLevel$549$label_3#1;
+
+ inline$BDLGetDebugLevel$549$label_3#1:
+ havoc inline$BDLGetDebugLevel$549$myNondetVar_0;
+ inline$BDLGetDebugLevel$549$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$549$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$549$label_1#1;
+
+ inline$BDLGetDebugLevel$549$label_1#1:
+ goto inline$BDLGetDebugLevel$549$Return#1;
+
+ inline$BDLGetDebugLevel$549$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$549$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon37_Then#1, inline$BDLDevicePowerIoCompletion$21$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_82_true#1, inline$BDLDevicePowerIoCompletion$21$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$21$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$21$anon38_Then#1, inline$BDLDevicePowerIoCompletion$21$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$21$anon39_Then#1, inline$BDLDevicePowerIoCompletion$21$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_92#1:
+ goto inline$storm_IoCompleteRequest$43$Entry#1;
+
+ inline$storm_IoCompleteRequest$43$Entry#1:
+ inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$21$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$43$start#1;
+
+ inline$storm_IoCompleteRequest$43$start#1:
+ inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$43$label_3#1;
+
+ inline$storm_IoCompleteRequest$43$label_3#1:
+ call inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$43$label_6#1;
+
+ inline$storm_IoCompleteRequest$43$label_6#1:
+ goto inline$storm_IoCompleteRequest$43$label_6_true#1, inline$storm_IoCompleteRequest$43$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$43$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$43$label_7#1;
+
+ inline$storm_IoCompleteRequest$43$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$43$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$43$label_8#1;
+
+ inline$storm_IoCompleteRequest$43$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$43$anon3_Then#1, inline$storm_IoCompleteRequest$43$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$43$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$43$anon1#1;
+
+ inline$storm_IoCompleteRequest$43$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$43$label_9#1;
+
+ inline$storm_IoCompleteRequest$43$label_9#1:
+ goto inline$storm_IoCompleteRequest$43$label_9_true#1, inline$storm_IoCompleteRequest$43$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$43$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$43$label_10#1;
+
+ inline$storm_IoCompleteRequest$43$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$43$label_1#1;
+
+ inline$storm_IoCompleteRequest$43$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$43$label_7#1;
+
+ inline$storm_IoCompleteRequest$43$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$43$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$43$label_1#1;
+
+ inline$storm_IoCompleteRequest$43$label_1#1:
+ goto inline$storm_IoCompleteRequest$43$Return#1;
+
+ inline$storm_IoCompleteRequest$43$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$43$Return#1;
+
+ inline$storm_IoCompleteRequest$43$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon40_Then#1, inline$BDLDevicePowerIoCompletion$21$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$21$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$21$anon41_Then#1, inline$BDLDevicePowerIoCompletion$21$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_98#1:
+ goto inline$BDLGetDebugLevel$550$Entry#1;
+
+ inline$BDLGetDebugLevel$550$Entry#1:
+ goto inline$BDLGetDebugLevel$550$start#1;
+
+ inline$BDLGetDebugLevel$550$start#1:
+ goto inline$BDLGetDebugLevel$550$label_3#1;
+
+ inline$BDLGetDebugLevel$550$label_3#1:
+ havoc inline$BDLGetDebugLevel$550$myNondetVar_0;
+ inline$BDLGetDebugLevel$550$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$550$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$550$label_1#1;
+
+ inline$BDLGetDebugLevel$550$label_1#1:
+ goto inline$BDLGetDebugLevel$550$Return#1;
+
+ inline$BDLGetDebugLevel$550$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$550$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon42_Then#1, inline$BDLDevicePowerIoCompletion$21$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_101_true#1, inline$BDLDevicePowerIoCompletion$21$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_102#1:
+ goto inline$BDLGetDebugLevel$551$Entry#1;
+
+ inline$BDLGetDebugLevel$551$Entry#1:
+ goto inline$BDLGetDebugLevel$551$start#1;
+
+ inline$BDLGetDebugLevel$551$start#1:
+ goto inline$BDLGetDebugLevel$551$label_3#1;
+
+ inline$BDLGetDebugLevel$551$label_3#1:
+ havoc inline$BDLGetDebugLevel$551$myNondetVar_0;
+ inline$BDLGetDebugLevel$551$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$551$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$551$label_1#1;
+
+ inline$BDLGetDebugLevel$551$label_1#1:
+ goto inline$BDLGetDebugLevel$551$Return#1;
+
+ inline$BDLGetDebugLevel$551$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$551$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon43_Then#1, inline$BDLDevicePowerIoCompletion$21$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_111_true#1, inline$BDLDevicePowerIoCompletion$21$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$21$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$21$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_112#1:
+ goto inline$BDLGetDebugLevel$552$Entry#1;
+
+ inline$BDLGetDebugLevel$552$Entry#1:
+ goto inline$BDLGetDebugLevel$552$start#1;
+
+ inline$BDLGetDebugLevel$552$start#1:
+ goto inline$BDLGetDebugLevel$552$label_3#1;
+
+ inline$BDLGetDebugLevel$552$label_3#1:
+ havoc inline$BDLGetDebugLevel$552$myNondetVar_0;
+ inline$BDLGetDebugLevel$552$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$552$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$552$label_1#1;
+
+ inline$BDLGetDebugLevel$552$label_1#1:
+ goto inline$BDLGetDebugLevel$552$Return#1;
+
+ inline$BDLGetDebugLevel$552$Return#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$552$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$21$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$21$anon44_Then#1, inline$BDLDevicePowerIoCompletion$21$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_121_true#1, inline$BDLDevicePowerIoCompletion$21$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$21$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$21$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$21$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_122#1:
+ inline$BDLDevicePowerIoCompletion$21$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$21$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$21$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$21$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$21$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$21$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$21$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$21$Return#1:
+ inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$21$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$21$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$21$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$21$anon13_Then#1, inline$CallCompletionRoutine$21$anon13_Else#1;
+
+ inline$CallCompletionRoutine$21$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$21$anon7#1;
+
+ inline$CallCompletionRoutine$21$anon7#1:
+ goto inline$CallCompletionRoutine$21$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$21$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$21$Return#1;
+
+ inline$CallCompletionRoutine$21$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$21$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$21$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$21$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$21$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$21$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$start#1:
+ inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$21$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$21$label_3_true#1, inline$BDLCallDriverCompletionRoutine$21$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$21$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$21$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$21$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$21$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$21$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_6#1:
+ goto inline$storm_KeSetEvent$23$Entry#1;
+
+ inline$storm_KeSetEvent$23$Entry#1:
+ inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$21$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$23$start#1;
+
+ inline$storm_KeSetEvent$23$start#1:
+ inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$23$label_3#1;
+
+ inline$storm_KeSetEvent$23$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$23$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$23$label_1#1;
+
+ inline$storm_KeSetEvent$23$label_1#1:
+ goto inline$storm_KeSetEvent$23$Return#1;
+
+ inline$storm_KeSetEvent$23$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$21$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$21$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$21$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$21$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$21$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$21$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$21$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$21$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$21$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$21$Return#1:
+ inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$21$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$21$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$21$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$21$anon12_Then#1, inline$CallCompletionRoutine$21$anon12_Else#1;
+
+ inline$CallCompletionRoutine$21$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$21$anon5#1;
+
+ inline$CallCompletionRoutine$21$anon5#1:
+ goto inline$CallCompletionRoutine$21$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$21$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$21$label_23#1;
+
+ inline$CallCompletionRoutine$21$label_23#1:
+ inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$21$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$21$label_24#1;
+
+ inline$CallCompletionRoutine$21$label_24#1:
+ goto inline$CallCompletionRoutine$21$label_24_true#1, inline$CallCompletionRoutine$21$label_24_false#1;
+
+ inline$CallCompletionRoutine$21$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$21$label_1#1;
+
+ inline$CallCompletionRoutine$21$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$21$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$21$label_25#1;
+
+ inline$CallCompletionRoutine$21$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$21$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$21$label_1#1;
+
+ inline$CallCompletionRoutine$21$label_1#1:
+ goto inline$CallCompletionRoutine$21$Return#1;
+
+ inline$CallCompletionRoutine$21$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$21$Return#1;
+
+ inline$CallCompletionRoutine$21$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$21$Return#1;
+
+ inline$CallCompletionRoutine$21$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$21$Return#1;
+
+ inline$CallCompletionRoutine$21$Return#1:
+ goto inline$storm_IoCallDriver$10$label_39$1#1;
+
+ inline$storm_IoCallDriver$10$label_39$1#1:
+ goto inline$storm_IoCallDriver$10$anon15_Then#1, inline$storm_IoCallDriver$10$anon15_Else#1;
+
+ inline$storm_IoCallDriver$10$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$10$anon10#1;
+
+ inline$storm_IoCallDriver$10$anon10#1:
+ goto inline$storm_IoCallDriver$10$label_36#1;
+
+ inline$storm_IoCallDriver$10$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$10$Return#1;
+
+ inline$storm_IoCallDriver$10$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$10$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$10$label_28#1;
+
+ inline$storm_IoCallDriver$10$label_28#1:
+ inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$10$label_42#1;
+
+ inline$storm_IoCallDriver$10$label_42#1:
+ goto inline$storm_IoCallDriver$10$label_43#1;
+
+ inline$storm_IoCallDriver$10$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$10$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$10$label_36#1;
+
+ inline$storm_IoCallDriver$10$label_36#1:
+ inline$storm_IoCallDriver$10$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$10$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$10$label_1#1;
+
+ inline$storm_IoCallDriver$10$label_1#1:
+ goto inline$storm_IoCallDriver$10$Return#1;
+
+ inline$storm_IoCallDriver$10$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$10$Return#1;
+
+ inline$storm_IoCallDriver$10$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$10$Return#1;
+
+ inline$storm_IoCallDriver$10$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$10$Return#1;
+
+ inline$storm_IoCallDriver$10$Return#1:
+ inline$storm_PoCallDriver$4$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$10$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$storm_PoCallDriver$4$label_3$1#1;
+
+ inline$storm_PoCallDriver$4$label_3$1#1:
+ goto inline$storm_PoCallDriver$4$anon2_Then#1, inline$storm_PoCallDriver$4$anon2_Else#1;
+
+ inline$storm_PoCallDriver$4$anon2_Else#1:
+ assume !raiseException;
+ goto inline$storm_PoCallDriver$4$anon1#1;
+
+ inline$storm_PoCallDriver$4$anon1#1:
+ goto inline$storm_PoCallDriver$4$label_6#1;
+
+ inline$storm_PoCallDriver$4$label_6#1:
+ inline$storm_PoCallDriver$4$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$4$$result.storm_IoCallDriver$499.27$2$;
+ goto inline$storm_PoCallDriver$4$label_1#1;
+
+ inline$storm_PoCallDriver$4$label_1#1:
+ goto inline$storm_PoCallDriver$4$Return#1;
+
+ inline$storm_PoCallDriver$4$anon2_Then#1:
+ assume raiseException;
+ goto inline$storm_PoCallDriver$4$Return#1;
+
+ inline$storm_PoCallDriver$4$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$4$$result.storm_PoCallDriver$494.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_25$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_25$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon22_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon13#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon13#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_28#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_28#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_PoCallDriver$104.29$3$;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$4$label_29_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_29_false#1:
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_29_true#1:
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_31#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_31#1:
+ goto inline$storm_KeWaitForSingleObject$4$Entry#1;
+
+ inline$storm_KeWaitForSingleObject$4$Entry#1:
+ inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
+ goto inline$storm_KeWaitForSingleObject$4$start#1;
+
+ inline$storm_KeWaitForSingleObject$4$start#1:
+ inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
+ inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
+ goto inline$storm_KeWaitForSingleObject$4$label_3#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_3#1:
+ goto inline$storm_KeWaitForSingleObject$4$label_3_true#1, inline$storm_KeWaitForSingleObject$4$label_3_false#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_3_false#1:
+ assume inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
+ goto inline$storm_KeWaitForSingleObject$4$label_4#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_4#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$anon6_Then#1, inline$storm_KeWaitForSingleObject$4$anon6_Else#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$anon1#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$4$label_13#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_13#1:
+ inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$4$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$Return#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_3_true#1:
+ assume inline$storm_KeWaitForSingleObject$4$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
+ goto inline$storm_KeWaitForSingleObject$4$label_5#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_5#1:
+ call inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$ := storm_nondet();
+ goto inline$storm_KeWaitForSingleObject$4$label_8#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_8#1:
+ goto inline$storm_KeWaitForSingleObject$4$label_8_true#1, inline$storm_KeWaitForSingleObject$4$label_8_false#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_8_false#1:
+ assume inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$ == 0;
+ goto inline$storm_KeWaitForSingleObject$4$label_9#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_9#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$anon7_Then#1, inline$storm_KeWaitForSingleObject$4$anon7_Else#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$anon3#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$4$label_12#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_12#1:
+ inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
+ goto inline$storm_KeWaitForSingleObject$4$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$Return#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_8_true#1:
+ assume inline$storm_KeWaitForSingleObject$4$$result.storm_nondet$256.20$2$ != 0;
+ goto inline$storm_KeWaitForSingleObject$4$label_10#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_10#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$anon8_Then#1, inline$storm_KeWaitForSingleObject$4$anon8_Else#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$anon5#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon5#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$4$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$4$label_11#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_11#1:
+ inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$4$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$4$label_1#1:
+ goto inline$storm_KeWaitForSingleObject$4$Return#1;
+
+ inline$storm_KeWaitForSingleObject$4$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$4$Return#1;
+
+ inline$storm_KeWaitForSingleObject$4$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$4$$result.storm_KeWaitForSingleObject$243.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_31$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_31$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$4$anon23_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$anon15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon15#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_34#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_34#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$$result.storm_KeWaitForSingleObject$116.38$5$;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_35#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_35#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$4$label_35_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_35_false#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_35_true#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_37#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_37#1:
+ call inline$BDLCallLowerLevelDriverAndWait$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_38#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_38#1:
+ call inline$BDLCallLowerLevelDriverAndWait$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_39#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_39#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_36#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
+ inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$4$myNondetVar_0;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_30#1:
+ inline$BDLCallLowerLevelDriverAndWait$4$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$4$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$label_1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$label_1#1:
+ call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$4$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon21_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$4$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$4$Return#1:
+ inline$BDLPnPQueryStop$0$$result.BDLCallLowerLevelDriverAndWait$2116.47$13$ := inline$BDLCallLowerLevelDriverAndWait$4$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
+ goto inline$BDLPnPQueryStop$0$label_71$1#1;
+
+ inline$BDLPnPQueryStop$0$label_71$1#1:
+ goto inline$BDLPnPQueryStop$0$anon32_Then#1, inline$BDLPnPQueryStop$0$anon32_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon21#1;
+
+ inline$BDLPnPQueryStop$0$anon21#1:
+ goto inline$BDLPnPQueryStop$0$label_74#1;
+
+ inline$BDLPnPQueryStop$0$label_74#1:
+ inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12 := inline$BDLPnPQueryStop$0$$result.BDLCallLowerLevelDriverAndWait$2116.47$13$;
+ goto inline$BDLPnPQueryStop$0$label_42#1;
+
+ inline$BDLPnPQueryStop$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon26_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$label_34_true#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ assume INT_ULT(0, inline$BDLPnPQueryStop$0$myNondetVar_0);
+ goto inline$BDLPnPQueryStop$0$label_38#1;
+
+ inline$BDLPnPQueryStop$0$label_38#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_1;
+ assume inline$BDLPnPQueryStop$0$myNondetVar_0 == inline$BDLPnPQueryStop$0$myNondetVar_1;
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$3$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$3$Entry#1:
+ inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := SpinLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryStop$0$$pBDLExtension$1$2076.40$BDLPnPQueryStop$12);
+ goto inline$storm_KeReleaseSpinLock$3$start#1;
+
+ inline$storm_KeReleaseSpinLock$3$start#1:
+ inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$3$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$3$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$3$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$3$anon5_Then#1, inline$storm_KeReleaseSpinLock$3$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$3$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$3$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$3$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$3$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_8#1:
+ goto inline$storm_getThreadID$6$Entry#1;
+
+ inline$storm_getThreadID$6$Entry#1:
+ goto inline$storm_getThreadID$6$anon0#1;
+
+ inline$storm_getThreadID$6$anon0#1:
+ inline$storm_getThreadID$6$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$6$Return#1;
+
+ inline$storm_getThreadID$6$Return#1:
+ inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$6$tid;
+ goto inline$storm_KeReleaseSpinLock$3$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$3$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$3$label_11_true#1, inline$storm_KeReleaseSpinLock$3$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$3$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$3$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$3$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$3$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$3$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$3$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$3$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$3$anon6_Then#1, inline$storm_KeReleaseSpinLock$3$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$3$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$3$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$3$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$3$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$3$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$3$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$3$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$3$Return#1;
+
+ inline$storm_KeReleaseSpinLock$3$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$3$Return#1;
+
+ inline$storm_KeReleaseSpinLock$3$Return#1:
+ goto inline$BDLPnPQueryStop$0$label_38$1#1;
+
+ inline$BDLPnPQueryStop$0$label_38$1#1:
+ goto inline$BDLPnPQueryStop$0$anon27_Then#1, inline$BDLPnPQueryStop$0$anon27_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon27_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon11#1;
+
+ inline$BDLPnPQueryStop$0$anon11#1:
+ havoc inline$BDLPnPQueryStop$0$myNondetVar_0;
+ goto inline$BDLPnPQueryStop$0$label_41#1;
+
+ inline$BDLPnPQueryStop$0$label_41#1:
+ inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12 := 0 - 2147483631;
+ goto inline$BDLPnPQueryStop$0$label_42#1;
+
+ inline$BDLPnPQueryStop$0$label_42#1:
+ goto inline$BDLGetDebugLevel$478$Entry#1;
+
+ inline$BDLGetDebugLevel$478$Entry#1:
+ goto inline$BDLGetDebugLevel$478$start#1;
+
+ inline$BDLGetDebugLevel$478$start#1:
+ goto inline$BDLGetDebugLevel$478$label_3#1;
+
+ inline$BDLGetDebugLevel$478$label_3#1:
+ havoc inline$BDLGetDebugLevel$478$myNondetVar_0;
+ inline$BDLGetDebugLevel$478$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$478$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$478$label_1#1;
+
+ inline$BDLGetDebugLevel$478$label_1#1:
+ goto inline$BDLGetDebugLevel$478$Return#1;
+
+ inline$BDLGetDebugLevel$478$Return#1:
+ inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$ := inline$BDLGetDebugLevel$478$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryStop$0$label_42$1#1;
+
+ inline$BDLPnPQueryStop$0$label_42$1#1:
+ goto inline$BDLPnPQueryStop$0$anon28_Then#1, inline$BDLPnPQueryStop$0$anon28_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon28_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon13#1;
+
+ inline$BDLPnPQueryStop$0$anon13#1:
+ goto inline$BDLPnPQueryStop$0$label_45#1;
+
+ inline$BDLPnPQueryStop$0$label_45#1:
+ goto inline$BDLPnPQueryStop$0$label_45_true#1, inline$BDLPnPQueryStop$0$label_45_false#1;
+
+ inline$BDLPnPQueryStop$0$label_45_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$) == 0;
+ goto inline$BDLPnPQueryStop$0$label_46#1;
+
+ inline$BDLPnPQueryStop$0$label_45_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$14$) != 0;
+ goto inline$BDLPnPQueryStop$0$label_49#1;
+
+ inline$BDLPnPQueryStop$0$label_49#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_50#1;
+
+ inline$BDLPnPQueryStop$0$label_50#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_51#1;
+
+ inline$BDLPnPQueryStop$0$label_51#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_52#1;
+
+ inline$BDLPnPQueryStop$0$label_52#1:
+ havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$15$;
+ goto inline$BDLPnPQueryStop$0$label_46#1;
+
+ inline$BDLPnPQueryStop$0$label_46#1:
+ goto inline$BDLGetDebugLevel$479$Entry#1;
+
+ inline$BDLGetDebugLevel$479$Entry#1:
+ goto inline$BDLGetDebugLevel$479$start#1;
+
+ inline$BDLGetDebugLevel$479$start#1:
+ goto inline$BDLGetDebugLevel$479$label_3#1;
+
+ inline$BDLGetDebugLevel$479$label_3#1:
+ havoc inline$BDLGetDebugLevel$479$myNondetVar_0;
+ inline$BDLGetDebugLevel$479$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$479$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$479$label_1#1;
+
+ inline$BDLGetDebugLevel$479$label_1#1:
+ goto inline$BDLGetDebugLevel$479$Return#1;
+
+ inline$BDLGetDebugLevel$479$Return#1:
+ inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$ := inline$BDLGetDebugLevel$479$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryStop$0$label_46$1#1;
+
+ inline$BDLPnPQueryStop$0$label_46$1#1:
+ goto inline$BDLPnPQueryStop$0$anon29_Then#1, inline$BDLPnPQueryStop$0$anon29_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon29_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon15#1;
+
+ inline$BDLPnPQueryStop$0$anon15#1:
+ goto inline$BDLPnPQueryStop$0$label_55#1;
+
+ inline$BDLPnPQueryStop$0$label_55#1:
+ goto inline$BDLPnPQueryStop$0$label_55_true#1, inline$BDLPnPQueryStop$0$label_55_false#1;
+
+ inline$BDLPnPQueryStop$0$label_55_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$) == 0;
+ goto inline$BDLPnPQueryStop$0$label_56#1;
+
+ inline$BDLPnPQueryStop$0$label_55_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$19$) != 0;
+ goto inline$BDLPnPQueryStop$0$label_59#1;
+
+ inline$BDLPnPQueryStop$0$label_59#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_60#1;
+
+ inline$BDLPnPQueryStop$0$label_60#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_61#1;
+
+ inline$BDLPnPQueryStop$0$label_61#1:
+ call inline$BDLPnPQueryStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryStop$0$label_62#1;
+
+ inline$BDLPnPQueryStop$0$label_62#1:
+ havoc inline$BDLPnPQueryStop$0$$result.DbgPrint$2119.0$20$;
+ goto inline$BDLPnPQueryStop$0$label_56#1;
+
+ inline$BDLPnPQueryStop$0$label_56#1:
+ goto inline$BDLGetDebugLevel$480$Entry#1;
+
+ inline$BDLGetDebugLevel$480$Entry#1:
+ goto inline$BDLGetDebugLevel$480$start#1;
+
+ inline$BDLGetDebugLevel$480$start#1:
+ goto inline$BDLGetDebugLevel$480$label_3#1;
+
+ inline$BDLGetDebugLevel$480$label_3#1:
+ havoc inline$BDLGetDebugLevel$480$myNondetVar_0;
+ inline$BDLGetDebugLevel$480$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$480$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$480$label_1#1;
+
+ inline$BDLGetDebugLevel$480$label_1#1:
+ goto inline$BDLGetDebugLevel$480$Return#1;
+
+ inline$BDLGetDebugLevel$480$Return#1:
+ inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$ := inline$BDLGetDebugLevel$480$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryStop$0$label_56$1#1;
+
+ inline$BDLPnPQueryStop$0$label_56$1#1:
+ goto inline$BDLPnPQueryStop$0$anon30_Then#1, inline$BDLPnPQueryStop$0$anon30_Else#1;
+
+ inline$BDLPnPQueryStop$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryStop$0$anon17#1;
+
+ inline$BDLPnPQueryStop$0$anon17#1:
+ goto inline$BDLPnPQueryStop$0$label_65#1;
+
+ inline$BDLPnPQueryStop$0$label_65#1:
+ goto inline$BDLPnPQueryStop$0$label_65_true#1, inline$BDLPnPQueryStop$0$label_65_false#1;
+
+ inline$BDLPnPQueryStop$0$label_65_false#1:
+ assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$, 4) == 0;
+ goto inline$BDLPnPQueryStop$0$label_66#1;
+
+ inline$BDLPnPQueryStop$0$label_65_true#1:
+ assume BIT_BAND(inline$BDLPnPQueryStop$0$$result.BDLGetDebugLevel$2119.0$24$, 4) != 0;
+ goto inline$BDLPnPQueryStop$0$label_67#1;
+
+ inline$BDLPnPQueryStop$0$label_67#1:
+ goto inline$BDLPnPQueryStop$0$label_66#1;
+
+ inline$BDLPnPQueryStop$0$label_66#1:
+ inline$BDLPnPQueryStop$0$$result.BDLPnPQueryStop$2074.0$1$ := inline$BDLPnPQueryStop$0$$status$4$2081.16$BDLPnPQueryStop$12;
+ goto inline$BDLPnPQueryStop$0$label_1#1;
+
+ inline$BDLPnPQueryStop$0$label_1#1:
+ call __HAVOC_free(inline$BDLPnPQueryStop$0$$irql$5$2082.16$BDLPnPQueryStop$12);
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon29_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon28_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon27_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon25_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon24_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryStop$0$Return#1;
+
+ inline$BDLPnPQueryStop$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPQueryStop$916.32$29$ := inline$BDLPnPQueryStop$0$$result.BDLPnPQueryStop$2074.0$1$;
+ goto inline$BDLPnP$0$label_128$1#1;
+
+ inline$BDLPnP$0$label_128$1#1:
+ goto inline$BDLPnP$0$anon72_Then#1, inline$BDLPnP$0$anon72_Else#1;
+
+ inline$BDLPnP$0$anon72_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon37#1;
+
+ inline$BDLPnP$0$anon37#1:
+ goto inline$BDLPnP$0$label_149#1;
+
+ inline$BDLPnP$0$label_149#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPQueryStop$916.32$29$;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon72_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_5#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 4;
+ goto inline$BDLPnP$0$label_125#1;
+
+ inline$BDLPnP$0$label_125#1:
+ goto inline$BDLPnPStop$0$Entry#1;
+
+ inline$BDLPnPStop$0$Entry#1:
+ inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPStop$0$start#1;
+
+ inline$BDLPnPStop$0$start#1:
+ inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12 := inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12_.1;
+ inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12 := inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12_.1;
+ goto inline$BDLPnPStop$0$label_3#1;
+
+ inline$BDLPnPStop$0$label_3#1:
+ goto inline$BDLPnPStop$0$label_4#1;
+
+ inline$BDLPnPStop$0$label_4#1:
+ inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 := 0;
+ goto inline$BDLPnPStop$0$label_5#1;
+
+ inline$BDLPnPStop$0$label_5#1:
+ goto inline$BDLPnPStop$0$label_6#1;
+
+ inline$BDLPnPStop$0$label_6#1:
+ havoc inline$BDLPnPStop$0$myNondetVar_0;
+ goto inline$BDLPnPStop$0$label_7#1;
+
+ inline$BDLPnPStop$0$label_7#1:
+ goto inline$BDLGetDebugLevel$379$Entry#1;
+
+ inline$BDLGetDebugLevel$379$Entry#1:
+ goto inline$BDLGetDebugLevel$379$start#1;
+
+ inline$BDLGetDebugLevel$379$start#1:
+ goto inline$BDLGetDebugLevel$379$label_3#1;
+
+ inline$BDLGetDebugLevel$379$label_3#1:
+ havoc inline$BDLGetDebugLevel$379$myNondetVar_0;
+ inline$BDLGetDebugLevel$379$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$379$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$379$label_1#1;
+
+ inline$BDLGetDebugLevel$379$label_1#1:
+ goto inline$BDLGetDebugLevel$379$Return#1;
+
+ inline$BDLGetDebugLevel$379$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$ := inline$BDLGetDebugLevel$379$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_7$1#1;
+
+ inline$BDLPnPStop$0$label_7$1#1:
+ goto inline$BDLPnPStop$0$anon28_Then#1, inline$BDLPnPStop$0$anon28_Else#1;
+
+ inline$BDLPnPStop$0$anon28_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon1#1;
+
+ inline$BDLPnPStop$0$anon1#1:
+ goto inline$BDLPnPStop$0$label_10#1;
+
+ inline$BDLPnPStop$0$label_10#1:
+ goto inline$BDLPnPStop$0$label_10_true#1, inline$BDLPnPStop$0$label_10_false#1;
+
+ inline$BDLPnPStop$0$label_10_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$) == 0;
+ goto inline$BDLPnPStop$0$label_11#1;
+
+ inline$BDLPnPStop$0$label_10_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$2$) != 0;
+ goto inline$BDLPnPStop$0$label_14#1;
+
+ inline$BDLPnPStop$0$label_14#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_15#1;
+
+ inline$BDLPnPStop$0$label_15#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_16#1;
+
+ inline$BDLPnPStop$0$label_16#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_17#1;
+
+ inline$BDLPnPStop$0$label_17#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2190.0$3$;
+ goto inline$BDLPnPStop$0$label_11#1;
+
+ inline$BDLPnPStop$0$label_11#1:
+ goto inline$BDLGetDebugLevel$380$Entry#1;
+
+ inline$BDLGetDebugLevel$380$Entry#1:
+ goto inline$BDLGetDebugLevel$380$start#1;
+
+ inline$BDLGetDebugLevel$380$start#1:
+ goto inline$BDLGetDebugLevel$380$label_3#1;
+
+ inline$BDLGetDebugLevel$380$label_3#1:
+ havoc inline$BDLGetDebugLevel$380$myNondetVar_0;
+ inline$BDLGetDebugLevel$380$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$380$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$380$label_1#1;
+
+ inline$BDLGetDebugLevel$380$label_1#1:
+ goto inline$BDLGetDebugLevel$380$Return#1;
+
+ inline$BDLGetDebugLevel$380$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$ := inline$BDLGetDebugLevel$380$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_11$1#1;
+
+ inline$BDLPnPStop$0$label_11$1#1:
+ goto inline$BDLPnPStop$0$anon29_Then#1, inline$BDLPnPStop$0$anon29_Else#1;
+
+ inline$BDLPnPStop$0$anon29_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon3#1;
+
+ inline$BDLPnPStop$0$anon3#1:
+ goto inline$BDLPnPStop$0$label_20#1;
+
+ inline$BDLPnPStop$0$label_20#1:
+ goto inline$BDLPnPStop$0$label_20_true#1, inline$BDLPnPStop$0$label_20_false#1;
+
+ inline$BDLPnPStop$0$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$) == 0;
+ goto inline$BDLPnPStop$0$label_21#1;
+
+ inline$BDLPnPStop$0$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$7$) != 0;
+ goto inline$BDLPnPStop$0$label_24#1;
+
+ inline$BDLPnPStop$0$label_24#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_25#1;
+
+ inline$BDLPnPStop$0$label_25#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_26#1;
+
+ inline$BDLPnPStop$0$label_26#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_27#1;
+
+ inline$BDLPnPStop$0$label_27#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2190.0$8$;
+ goto inline$BDLPnPStop$0$label_21#1;
+
+ inline$BDLPnPStop$0$label_21#1:
+ goto inline$BDLGetDebugLevel$381$Entry#1;
+
+ inline$BDLGetDebugLevel$381$Entry#1:
+ goto inline$BDLGetDebugLevel$381$start#1;
+
+ inline$BDLGetDebugLevel$381$start#1:
+ goto inline$BDLGetDebugLevel$381$label_3#1;
+
+ inline$BDLGetDebugLevel$381$label_3#1:
+ havoc inline$BDLGetDebugLevel$381$myNondetVar_0;
+ inline$BDLGetDebugLevel$381$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$381$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$381$label_1#1;
+
+ inline$BDLGetDebugLevel$381$label_1#1:
+ goto inline$BDLGetDebugLevel$381$Return#1;
+
+ inline$BDLGetDebugLevel$381$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$ := inline$BDLGetDebugLevel$381$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_21$1#1;
+
+ inline$BDLPnPStop$0$label_21$1#1:
+ goto inline$BDLPnPStop$0$anon30_Then#1, inline$BDLPnPStop$0$anon30_Else#1;
+
+ inline$BDLPnPStop$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon5#1;
+
+ inline$BDLPnPStop$0$anon5#1:
+ goto inline$BDLPnPStop$0$label_30#1;
+
+ inline$BDLPnPStop$0$label_30#1:
+ goto inline$BDLPnPStop$0$label_30_true#1, inline$BDLPnPStop$0$label_30_false#1;
+
+ inline$BDLPnPStop$0$label_30_false#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$, 4) == 0;
+ goto inline$BDLPnPStop$0$label_31#1;
+
+ inline$BDLPnPStop$0$label_30_true#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2190.0$12$, 4) != 0;
+ goto inline$BDLPnPStop$0$label_34#1;
+
+ inline$BDLPnPStop$0$label_34#1:
+ goto inline$BDLPnPStop$0$label_31#1;
+
+ inline$BDLPnPStop$0$label_31#1:
+ call inline$BDLPnPStop$0$$result.IoSetDeviceInterfaceState$2199.29$13$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPStop$0$$pBDLExtension$1$2182.40$BDLPnPStop$12), 0);
+ goto inline$BDLPnPStop$0$anon31_Then#1, inline$BDLPnPStop$0$anon31_Else#1;
+
+ inline$BDLPnPStop$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon7#1;
+
+ inline$BDLPnPStop$0$anon7#1:
+ goto inline$BDLPnPStop$0$label_35#1;
+
+ inline$BDLPnPStop$0$label_35#1:
+ goto inline$BDLPnPStop$0$label_38#1;
+
+ inline$BDLPnPStop$0$label_38#1:
+ inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 := inline$BDLPnPStop$0$$callresult.$2204.67$14$;
+ goto inline$BDLPnPStop$0$label_39#1;
+
+ inline$BDLPnPStop$0$label_39#1:
+ goto inline$BDLPnPStop$0$label_39_true#1, inline$BDLPnPStop$0$label_39_false#1;
+
+ inline$BDLPnPStop$0$label_39_false#1:
+ assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 == 0;
+ goto inline$BDLPnPStop$0$label_40#1;
+
+ inline$BDLPnPStop$0$label_40#1:
+ goto inline$BDLPnPStop$0$label_92#1;
+
+ inline$BDLPnPStop$0$label_92#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Entry#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$Entry#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPStop$0$$pIrp$3$2184.40$BDLPnPStop$12;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$start#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$start#1:
+ call inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
+ inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_4#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_4#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_6#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_6#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$Entry#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$Entry#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$start#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$start#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_4#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_4#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_5#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_5#1:
+ goto inline$IoGetCurrentIrpStackLocation$72$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetCurrentIrpStackLocation$72$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$start#1:
+ inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$72$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$72$label_3_true#1, inline$IoGetCurrentIrpStackLocation$72$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$72$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$72$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$72$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$72$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$72$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$72$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$72$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$72$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$72$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$72$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$72$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$72$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$72$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$72$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$72$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$72$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$72$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$72$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$72$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$72$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_5$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_5$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$anon1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_8#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_8#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_9#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_9#1:
+ goto inline$IoGetNextIrpStackLocation$7$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$7$Entry#1:
+ inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$3$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetNextIrpStackLocation$7$start#1;
+
+ inline$IoGetNextIrpStackLocation$7$start#1:
+ inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$7$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$7$label_3_true#1, inline$IoGetNextIrpStackLocation$7$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$7$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$7$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_4#1:
+ call inline$IoGetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$7$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_6#1:
+ call inline$IoGetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$7$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$7$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$7$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$7$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$7$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$7$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$7$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$7$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$7$Return#1;
+
+ inline$IoGetNextIrpStackLocation$7$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_9$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_9$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$anon3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$anon3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_12#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_12#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_13#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_13#1:
+ havoc inline$IoCopyCurrentIrpStackLocationToNext$3$$result.memcpy$25110.4$3$;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_16#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_16#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$label_1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$label_1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$anon5_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$anon4_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$3$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_6$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_6$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon16_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_9#1:
+ goto inline$storm_KeInitializeEvent$3$Entry#1;
+
+ inline$storm_KeInitializeEvent$3$Entry#1:
+ inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
+ goto inline$storm_KeInitializeEvent$3$start#1;
+
+ inline$storm_KeInitializeEvent$3$start#1:
+ inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
+ inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12_.1;
+ goto inline$storm_KeInitializeEvent$3$label_3#1;
+
+ inline$storm_KeInitializeEvent$3$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$3$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$3$$State$3$205.13$storm_KeInitializeEvent$12];
+ call contextSwitch();
+ goto inline$storm_KeInitializeEvent$3$label_1#1;
+
+ inline$storm_KeInitializeEvent$3$label_1#1:
+ goto inline$storm_KeInitializeEvent$3$Return#1;
+
+ inline$storm_KeInitializeEvent$3$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_9$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_9$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon17_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_12#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$3$Entry#1;
+
+ inline$storm_IoSetCompletionRoutine$3$Entry#1:
+ inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoSetCompletionRoutine$3$start#1;
+
+ inline$storm_IoSetCompletionRoutine$3$start#1:
+ inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
+ goto inline$storm_IoSetCompletionRoutine$3$label_3#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_3#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_4#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_4#1:
+ call inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$ := storm_nondet();
+ goto inline$storm_IoSetCompletionRoutine$3$label_7#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_7#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_7_true#1, inline$storm_IoSetCompletionRoutine$3$label_7_false#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_7_false#1:
+ assume inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$ == 0;
+ goto inline$storm_IoSetCompletionRoutine$3$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_7_true#1:
+ assume inline$storm_IoSetCompletionRoutine$3$$result.storm_nondet$405.2$1$ != 0;
+ goto inline$storm_IoSetCompletionRoutine$3$label_11#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_11#1:
+ havoc raiseException;
+ goto inline$storm_IoSetCompletionRoutine$3$anon6_Then#1, inline$storm_IoSetCompletionRoutine$3$anon6_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$3$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$3$anon3#1;
+
+ inline$storm_IoSetCompletionRoutine$3$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCompletionRoutine$3$label_12#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_12_true#1, inline$storm_IoSetCompletionRoutine$3$label_12_false#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_12_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoSetCompletionRoutine$3$label_13#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_13#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCompletionRoutine$3$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_12_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoSetCompletionRoutine$3$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_8#1:
+ goto inline$IoGetNextIrpStackLocation$8$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$8$Entry#1:
+ inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$3$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
+ goto inline$IoGetNextIrpStackLocation$8$start#1;
+
+ inline$IoGetNextIrpStackLocation$8$start#1:
+ inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$8$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$8$label_3_true#1, inline$IoGetNextIrpStackLocation$8$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$8$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$8$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_4#1:
+ call inline$IoGetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$8$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_6#1:
+ call inline$IoGetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$8$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$8$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$8$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$8$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$8$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$8$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$8$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$8$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$8$Return#1;
+
+ inline$IoGetNextIrpStackLocation$8$Return#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_8$1#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_8$1#1:
+ goto inline$storm_IoSetCompletionRoutine$3$anon5_Then#1, inline$storm_IoSetCompletionRoutine$3$anon5_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$3$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$3$anon1#1;
+
+ inline$storm_IoSetCompletionRoutine$3$anon1#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_16#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_16#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_17#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_17#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_18#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_18#1:
+ goto inline$storm_IoSetCompletionRoutine$3$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$3$label_1#1:
+ goto inline$storm_IoSetCompletionRoutine$3$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$3$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$3$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$3$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$3$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$3$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_12$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_12$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon18_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_15#1:
+ goto inline$IoGetCurrentIrpStackLocation$73$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoGetCurrentIrpStackLocation$73$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$start#1:
+ inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$73$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$73$label_3_true#1, inline$IoGetCurrentIrpStackLocation$73$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$73$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$73$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$73$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$73$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$73$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$73$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$73$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$73$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$73$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$73$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$73$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$73$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$73$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$73$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$73$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$73$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$73$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$73$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$73$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$73$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_15$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_15$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon19_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon7#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon7#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_18#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_18#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$3$label_18_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_18_false#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_19#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_19#1:
+ goto inline$storm_IoCallDriver$7$Entry#1;
+
+ inline$storm_IoCallDriver$7$Entry#1:
+ inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoCallDriver$7$start#1;
+
+ inline$storm_IoCallDriver$7$start#1:
+ inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$7$label_3#1;
+
+ inline$storm_IoCallDriver$7$label_3#1:
+ goto inline$storm_IoCallDriver$7$label_4#1;
+
+ inline$storm_IoCallDriver$7$label_4#1:
+ goto inline$storm_IoCallDriver$7$label_5#1;
+
+ inline$storm_IoCallDriver$7$label_5#1:
+ goto inline$storm_IoCallDriver$7$label_6#1;
+
+ inline$storm_IoCallDriver$7$label_6#1:
+ call inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$7$label_9#1;
+
+ inline$storm_IoCallDriver$7$label_9#1:
+ goto inline$storm_IoCallDriver$7$label_9_true#1, inline$storm_IoCallDriver$7$label_9_false#1;
+
+ inline$storm_IoCallDriver$7$label_9_false#1:
+ assume inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$7$label_10#1;
+
+ inline$storm_IoCallDriver$7$label_9_true#1:
+ assume inline$storm_IoCallDriver$7$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$7$label_13#1;
+
+ inline$storm_IoCallDriver$7$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$7$anon12_Then#1, inline$storm_IoCallDriver$7$anon12_Else#1;
+
+ inline$storm_IoCallDriver$7$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$7$anon3#1;
+
+ inline$storm_IoCallDriver$7$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$7$label_14#1;
+
+ inline$storm_IoCallDriver$7$label_14#1:
+ goto inline$storm_IoCallDriver$7$label_14_true#1, inline$storm_IoCallDriver$7$label_14_false#1;
+
+ inline$storm_IoCallDriver$7$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$7$label_15#1;
+
+ inline$storm_IoCallDriver$7$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$7$label_1#1;
+
+ inline$storm_IoCallDriver$7$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$7$label_10#1;
+
+ inline$storm_IoCallDriver$7$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$8$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$8$Entry#1:
+ inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$8$start#1;
+
+ inline$IoSetNextIrpStackLocation$8$start#1:
+ inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$8$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$8$label_3_true#1, inline$IoSetNextIrpStackLocation$8$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$8$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$8$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_4#1:
+ call inline$IoSetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$8$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_7#1:
+ call inline$IoSetNextIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$8$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$8$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$8$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$8$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_5#1:
+ inline$IoSetNextIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$8$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$8$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$8$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$8$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$8$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$8$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$8$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$8$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$8$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$8$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$8$Return#1;
+
+ inline$IoSetNextIrpStackLocation$8$Return#1:
+ goto inline$storm_IoCallDriver$7$label_10$1#1;
+
+ inline$storm_IoCallDriver$7$label_10$1#1:
+ goto inline$storm_IoCallDriver$7$anon11_Then#1, inline$storm_IoCallDriver$7$anon11_Else#1;
+
+ inline$storm_IoCallDriver$7$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$7$anon1#1;
+
+ inline$storm_IoCallDriver$7$anon1#1:
+ goto inline$storm_IoCallDriver$7$label_18#1;
+
+ inline$storm_IoCallDriver$7$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$74$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$74$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$start#1:
+ inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$74$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$74$label_3_true#1, inline$IoGetCurrentIrpStackLocation$74$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$74$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$74$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$74$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$74$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$74$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$74$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$74$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$74$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$74$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$74$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$74$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$74$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$74$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$74$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$74$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$74$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$74$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$74$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$74$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$74$Return#1:
+ goto inline$storm_IoCallDriver$7$label_18$1#1;
+
+ inline$storm_IoCallDriver$7$label_18$1#1:
+ goto inline$storm_IoCallDriver$7$anon13_Then#1, inline$storm_IoCallDriver$7$anon13_Else#1;
+
+ inline$storm_IoCallDriver$7$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$7$anon6#1;
+
+ inline$storm_IoCallDriver$7$anon6#1:
+ goto inline$storm_IoCallDriver$7$label_21#1;
+
+ inline$storm_IoCallDriver$7$label_21#1:
+ goto inline$storm_IoCallDriver$7$label_22#1;
+
+ inline$storm_IoCallDriver$7$label_22#1:
+ goto inline$storm_IoCallDriver$7$label_23#1;
+
+ inline$storm_IoCallDriver$7$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$7$label_24#1;
+
+ inline$storm_IoCallDriver$7$label_24#1:
+ call inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$7$label_27#1;
+
+ inline$storm_IoCallDriver$7$label_27#1:
+ goto inline$storm_IoCallDriver$7$label_27_case_0#1, inline$storm_IoCallDriver$7$label_27_case_1#1, inline$storm_IoCallDriver$7$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$7$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$7$label_30#1;
+
+ inline$storm_IoCallDriver$7$label_30#1:
+ inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$7$label_31#1;
+
+ inline$storm_IoCallDriver$7$label_31#1:
+ goto inline$storm_IoCallDriver$7$label_32#1;
+
+ inline$storm_IoCallDriver$7$label_32#1:
+ goto inline$storm_IoCallDriver$7$label_33#1;
+
+ inline$storm_IoCallDriver$7$label_33#1:
+ goto inline$CallCompletionRoutine$14$Entry#1;
+
+ inline$CallCompletionRoutine$14$Entry#1:
+ inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$14$start#1;
+
+ inline$CallCompletionRoutine$14$start#1:
+ inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$14$label_3#1;
+
+ inline$CallCompletionRoutine$14$label_3#1:
+ goto inline$CallCompletionRoutine$14$label_4#1;
+
+ inline$CallCompletionRoutine$14$label_4#1:
+ goto inline$CallCompletionRoutine$14$label_5#1;
+
+ inline$CallCompletionRoutine$14$label_5#1:
+ goto inline$CallCompletionRoutine$14$label_6#1;
+
+ inline$CallCompletionRoutine$14$label_6#1:
+ goto inline$CallCompletionRoutine$14$label_7#1;
+
+ inline$CallCompletionRoutine$14$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$75$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$75$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$start#1:
+ inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$75$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$75$label_3_true#1, inline$IoGetCurrentIrpStackLocation$75$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$75$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$75$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$75$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$75$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$75$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$75$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$75$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$75$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$75$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$75$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$75$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$75$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$75$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$75$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$75$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$75$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$75$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$75$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$75$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$75$Return#1:
+ goto inline$CallCompletionRoutine$14$label_7$1#1;
+
+ inline$CallCompletionRoutine$14$label_7$1#1:
+ goto inline$CallCompletionRoutine$14$anon10_Then#1, inline$CallCompletionRoutine$14$anon10_Else#1;
+
+ inline$CallCompletionRoutine$14$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$14$anon1#1;
+
+ inline$CallCompletionRoutine$14$anon1#1:
+ goto inline$CallCompletionRoutine$14$label_10#1;
+
+ inline$CallCompletionRoutine$14$label_10#1:
+ goto inline$CallCompletionRoutine$14$label_11#1;
+
+ inline$CallCompletionRoutine$14$label_11#1:
+ havoc inline$CallCompletionRoutine$14$myNondetVar_0;
+ inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$myNondetVar_0;
+ goto inline$CallCompletionRoutine$14$label_12#1;
+
+ inline$CallCompletionRoutine$14$label_12#1:
+ havoc inline$CallCompletionRoutine$14$myNondetVar_0;
+ inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$myNondetVar_0;
+ goto inline$CallCompletionRoutine$14$label_13#1;
+
+ inline$CallCompletionRoutine$14$label_13#1:
+ havoc inline$CallCompletionRoutine$14$myNondetVar_0;
+ goto inline$CallCompletionRoutine$14$label_14#1;
+
+ inline$CallCompletionRoutine$14$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$76$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$76$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$start#1:
+ inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$76$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$76$label_3_true#1, inline$IoGetCurrentIrpStackLocation$76$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$76$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$76$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$76$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$76$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$76$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$76$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$76$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$76$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$76$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$76$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$76$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$76$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$76$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$76$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$76$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$76$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$76$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$76$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$76$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$76$Return#1:
+ goto inline$CallCompletionRoutine$14$label_14$1#1;
+
+ inline$CallCompletionRoutine$14$label_14$1#1:
+ goto inline$CallCompletionRoutine$14$anon11_Then#1, inline$CallCompletionRoutine$14$anon11_Else#1;
+
+ inline$CallCompletionRoutine$14$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$14$anon3#1;
+
+ inline$CallCompletionRoutine$14$anon3#1:
+ goto inline$CallCompletionRoutine$14$label_17#1;
+
+ inline$CallCompletionRoutine$14$label_17#1:
+ goto inline$CallCompletionRoutine$14$label_18#1;
+
+ inline$CallCompletionRoutine$14$label_18#1:
+ goto inline$CallCompletionRoutine$14$label_18_true#1, inline$CallCompletionRoutine$14$label_18_false#1;
+
+ inline$CallCompletionRoutine$14$label_18_false#1:
+ assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$14$label_1#1;
+
+ inline$CallCompletionRoutine$14$label_18_true#1:
+ assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$14$label_19#1;
+
+ inline$CallCompletionRoutine$14$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$14$label_20#1;
+
+ inline$CallCompletionRoutine$14$label_20#1:
+ goto inline$CallCompletionRoutine$14$label_20_icall_1#1, inline$CallCompletionRoutine$14$label_20_icall_2#1, inline$CallCompletionRoutine$14$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$14$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$14$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$14$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$14$Entry#1:
+ inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$14$start#1;
+
+ inline$BDLSystemPowerIoCompletion$14$start#1:
+ call inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$14$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_4#1:
+ inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_6#1:
+ inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$14$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$14$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$78$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$78$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$start#1:
+ inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$78$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$78$label_3_true#1, inline$IoGetCurrentIrpStackLocation$78$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$78$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$78$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$78$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$78$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$78$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$78$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$78$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$78$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$78$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$78$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$78$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$78$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$78$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$78$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$78$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$78$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$78$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$78$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$78$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$78$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon36_Then#1, inline$BDLSystemPowerIoCompletion$14$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_15#1:
+ goto inline$BDLGetDebugLevel$397$Entry#1;
+
+ inline$BDLGetDebugLevel$397$Entry#1:
+ goto inline$BDLGetDebugLevel$397$start#1;
+
+ inline$BDLGetDebugLevel$397$start#1:
+ goto inline$BDLGetDebugLevel$397$label_3#1;
+
+ inline$BDLGetDebugLevel$397$label_3#1:
+ havoc inline$BDLGetDebugLevel$397$myNondetVar_0;
+ inline$BDLGetDebugLevel$397$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$397$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$397$label_1#1;
+
+ inline$BDLGetDebugLevel$397$label_1#1:
+ goto inline$BDLGetDebugLevel$397$Return#1;
+
+ inline$BDLGetDebugLevel$397$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$397$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon37_Then#1, inline$BDLSystemPowerIoCompletion$14$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_18_true#1, inline$BDLSystemPowerIoCompletion$14$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_19#1:
+ goto inline$BDLGetDebugLevel$398$Entry#1;
+
+ inline$BDLGetDebugLevel$398$Entry#1:
+ goto inline$BDLGetDebugLevel$398$start#1;
+
+ inline$BDLGetDebugLevel$398$start#1:
+ goto inline$BDLGetDebugLevel$398$label_3#1;
+
+ inline$BDLGetDebugLevel$398$label_3#1:
+ havoc inline$BDLGetDebugLevel$398$myNondetVar_0;
+ inline$BDLGetDebugLevel$398$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$398$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$398$label_1#1;
+
+ inline$BDLGetDebugLevel$398$label_1#1:
+ goto inline$BDLGetDebugLevel$398$Return#1;
+
+ inline$BDLGetDebugLevel$398$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$398$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon38_Then#1, inline$BDLSystemPowerIoCompletion$14$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_28_true#1, inline$BDLSystemPowerIoCompletion$14$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_29#1:
+ goto inline$BDLGetDebugLevel$399$Entry#1;
+
+ inline$BDLGetDebugLevel$399$Entry#1:
+ goto inline$BDLGetDebugLevel$399$start#1;
+
+ inline$BDLGetDebugLevel$399$start#1:
+ goto inline$BDLGetDebugLevel$399$label_3#1;
+
+ inline$BDLGetDebugLevel$399$label_3#1:
+ havoc inline$BDLGetDebugLevel$399$myNondetVar_0;
+ inline$BDLGetDebugLevel$399$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$399$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$399$label_1#1;
+
+ inline$BDLGetDebugLevel$399$label_1#1:
+ goto inline$BDLGetDebugLevel$399$Return#1;
+
+ inline$BDLGetDebugLevel$399$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$399$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon39_Then#1, inline$BDLSystemPowerIoCompletion$14$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_38_true#1, inline$BDLSystemPowerIoCompletion$14$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_39_true#1, inline$BDLSystemPowerIoCompletion$14$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$14$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$14$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$14$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$14$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$14$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_106_true#1, inline$BDLSystemPowerIoCompletion$14$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$14$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$14$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$14$myNondetVar_0, inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$14$anon50_Then#1, inline$BDLSystemPowerIoCompletion$14$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_112#1:
+ inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_113_true#1, inline$BDLSystemPowerIoCompletion$14$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$14$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_117#1:
+ goto inline$BDLGetDebugLevel$406$Entry#1;
+
+ inline$BDLGetDebugLevel$406$Entry#1:
+ goto inline$BDLGetDebugLevel$406$start#1;
+
+ inline$BDLGetDebugLevel$406$start#1:
+ goto inline$BDLGetDebugLevel$406$label_3#1;
+
+ inline$BDLGetDebugLevel$406$label_3#1:
+ havoc inline$BDLGetDebugLevel$406$myNondetVar_0;
+ inline$BDLGetDebugLevel$406$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$406$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$406$label_1#1;
+
+ inline$BDLGetDebugLevel$406$label_1#1:
+ goto inline$BDLGetDebugLevel$406$Return#1;
+
+ inline$BDLGetDebugLevel$406$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$406$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon51_Then#1, inline$BDLSystemPowerIoCompletion$14$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_120_true#1, inline$BDLSystemPowerIoCompletion$14$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_121#1:
+ goto inline$BDLGetDebugLevel$407$Entry#1;
+
+ inline$BDLGetDebugLevel$407$Entry#1:
+ goto inline$BDLGetDebugLevel$407$start#1;
+
+ inline$BDLGetDebugLevel$407$start#1:
+ goto inline$BDLGetDebugLevel$407$label_3#1;
+
+ inline$BDLGetDebugLevel$407$label_3#1:
+ havoc inline$BDLGetDebugLevel$407$myNondetVar_0;
+ inline$BDLGetDebugLevel$407$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$407$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$407$label_1#1;
+
+ inline$BDLGetDebugLevel$407$label_1#1:
+ goto inline$BDLGetDebugLevel$407$Return#1;
+
+ inline$BDLGetDebugLevel$407$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$407$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon52_Then#1, inline$BDLSystemPowerIoCompletion$14$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_130_true#1, inline$BDLSystemPowerIoCompletion$14$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_131#1:
+ goto inline$BDLGetDebugLevel$408$Entry#1;
+
+ inline$BDLGetDebugLevel$408$Entry#1:
+ goto inline$BDLGetDebugLevel$408$start#1;
+
+ inline$BDLGetDebugLevel$408$start#1:
+ goto inline$BDLGetDebugLevel$408$label_3#1;
+
+ inline$BDLGetDebugLevel$408$label_3#1:
+ havoc inline$BDLGetDebugLevel$408$myNondetVar_0;
+ inline$BDLGetDebugLevel$408$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$408$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$408$label_1#1;
+
+ inline$BDLGetDebugLevel$408$label_1#1:
+ goto inline$BDLGetDebugLevel$408$Return#1;
+
+ inline$BDLGetDebugLevel$408$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$408$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon53_Then#1, inline$BDLSystemPowerIoCompletion$14$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_140_true#1, inline$BDLSystemPowerIoCompletion$14$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$14$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_115#1:
+ inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$14$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$14$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$14$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_43#1:
+ goto inline$BDLGetDebugLevel$400$Entry#1;
+
+ inline$BDLGetDebugLevel$400$Entry#1:
+ goto inline$BDLGetDebugLevel$400$start#1;
+
+ inline$BDLGetDebugLevel$400$start#1:
+ goto inline$BDLGetDebugLevel$400$label_3#1;
+
+ inline$BDLGetDebugLevel$400$label_3#1:
+ havoc inline$BDLGetDebugLevel$400$myNondetVar_0;
+ inline$BDLGetDebugLevel$400$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$400$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$400$label_1#1;
+
+ inline$BDLGetDebugLevel$400$label_1#1:
+ goto inline$BDLGetDebugLevel$400$Return#1;
+
+ inline$BDLGetDebugLevel$400$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$400$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon40_Then#1, inline$BDLSystemPowerIoCompletion$14$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_46_true#1, inline$BDLSystemPowerIoCompletion$14$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_47#1:
+ goto inline$BDLGetDebugLevel$401$Entry#1;
+
+ inline$BDLGetDebugLevel$401$Entry#1:
+ goto inline$BDLGetDebugLevel$401$start#1;
+
+ inline$BDLGetDebugLevel$401$start#1:
+ goto inline$BDLGetDebugLevel$401$label_3#1;
+
+ inline$BDLGetDebugLevel$401$label_3#1:
+ havoc inline$BDLGetDebugLevel$401$myNondetVar_0;
+ inline$BDLGetDebugLevel$401$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$401$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$401$label_1#1;
+
+ inline$BDLGetDebugLevel$401$label_1#1:
+ goto inline$BDLGetDebugLevel$401$Return#1;
+
+ inline$BDLGetDebugLevel$401$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$401$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon41_Then#1, inline$BDLSystemPowerIoCompletion$14$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_56_true#1, inline$BDLSystemPowerIoCompletion$14$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_57#1:
+ goto inline$BDLGetDebugLevel$402$Entry#1;
+
+ inline$BDLGetDebugLevel$402$Entry#1:
+ goto inline$BDLGetDebugLevel$402$start#1;
+
+ inline$BDLGetDebugLevel$402$start#1:
+ goto inline$BDLGetDebugLevel$402$label_3#1;
+
+ inline$BDLGetDebugLevel$402$label_3#1:
+ havoc inline$BDLGetDebugLevel$402$myNondetVar_0;
+ inline$BDLGetDebugLevel$402$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$402$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$402$label_1#1;
+
+ inline$BDLGetDebugLevel$402$label_1#1:
+ goto inline$BDLGetDebugLevel$402$Return#1;
+
+ inline$BDLGetDebugLevel$402$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$402$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon42_Then#1, inline$BDLSystemPowerIoCompletion$14$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_66_true#1, inline$BDLSystemPowerIoCompletion$14$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$14$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$14$anon43_Then#1, inline$BDLSystemPowerIoCompletion$14$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$14$anon44_Then#1, inline$BDLSystemPowerIoCompletion$14$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_74#1:
+ goto inline$storm_IoCompleteRequest$30$Entry#1;
+
+ inline$storm_IoCompleteRequest$30$Entry#1:
+ inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$14$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$30$start#1;
+
+ inline$storm_IoCompleteRequest$30$start#1:
+ inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$30$label_3#1;
+
+ inline$storm_IoCompleteRequest$30$label_3#1:
+ call inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$30$label_6#1;
+
+ inline$storm_IoCompleteRequest$30$label_6#1:
+ goto inline$storm_IoCompleteRequest$30$label_6_true#1, inline$storm_IoCompleteRequest$30$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$30$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$30$label_7#1;
+
+ inline$storm_IoCompleteRequest$30$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$30$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$30$label_8#1;
+
+ inline$storm_IoCompleteRequest$30$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$30$anon3_Then#1, inline$storm_IoCompleteRequest$30$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$30$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$30$anon1#1;
+
+ inline$storm_IoCompleteRequest$30$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$30$label_9#1;
+
+ inline$storm_IoCompleteRequest$30$label_9#1:
+ goto inline$storm_IoCompleteRequest$30$label_9_true#1, inline$storm_IoCompleteRequest$30$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$30$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$30$label_10#1;
+
+ inline$storm_IoCompleteRequest$30$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$30$label_1#1;
+
+ inline$storm_IoCompleteRequest$30$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$30$label_7#1;
+
+ inline$storm_IoCompleteRequest$30$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$30$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$30$label_1#1;
+
+ inline$storm_IoCompleteRequest$30$label_1#1:
+ goto inline$storm_IoCompleteRequest$30$Return#1;
+
+ inline$storm_IoCompleteRequest$30$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$30$Return#1;
+
+ inline$storm_IoCompleteRequest$30$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon45_Then#1, inline$BDLSystemPowerIoCompletion$14$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$14$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$14$anon46_Then#1, inline$BDLSystemPowerIoCompletion$14$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_80#1:
+ goto inline$BDLGetDebugLevel$403$Entry#1;
+
+ inline$BDLGetDebugLevel$403$Entry#1:
+ goto inline$BDLGetDebugLevel$403$start#1;
+
+ inline$BDLGetDebugLevel$403$start#1:
+ goto inline$BDLGetDebugLevel$403$label_3#1;
+
+ inline$BDLGetDebugLevel$403$label_3#1:
+ havoc inline$BDLGetDebugLevel$403$myNondetVar_0;
+ inline$BDLGetDebugLevel$403$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$403$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$403$label_1#1;
+
+ inline$BDLGetDebugLevel$403$label_1#1:
+ goto inline$BDLGetDebugLevel$403$Return#1;
+
+ inline$BDLGetDebugLevel$403$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$403$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon47_Then#1, inline$BDLSystemPowerIoCompletion$14$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_83_true#1, inline$BDLSystemPowerIoCompletion$14$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_84#1:
+ goto inline$BDLGetDebugLevel$404$Entry#1;
+
+ inline$BDLGetDebugLevel$404$Entry#1:
+ goto inline$BDLGetDebugLevel$404$start#1;
+
+ inline$BDLGetDebugLevel$404$start#1:
+ goto inline$BDLGetDebugLevel$404$label_3#1;
+
+ inline$BDLGetDebugLevel$404$label_3#1:
+ havoc inline$BDLGetDebugLevel$404$myNondetVar_0;
+ inline$BDLGetDebugLevel$404$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$404$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$404$label_1#1;
+
+ inline$BDLGetDebugLevel$404$label_1#1:
+ goto inline$BDLGetDebugLevel$404$Return#1;
+
+ inline$BDLGetDebugLevel$404$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$404$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon48_Then#1, inline$BDLSystemPowerIoCompletion$14$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_93_true#1, inline$BDLSystemPowerIoCompletion$14$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$14$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$14$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_94#1:
+ goto inline$BDLGetDebugLevel$405$Entry#1;
+
+ inline$BDLGetDebugLevel$405$Entry#1:
+ goto inline$BDLGetDebugLevel$405$start#1;
+
+ inline$BDLGetDebugLevel$405$start#1:
+ goto inline$BDLGetDebugLevel$405$label_3#1;
+
+ inline$BDLGetDebugLevel$405$label_3#1:
+ havoc inline$BDLGetDebugLevel$405$myNondetVar_0;
+ inline$BDLGetDebugLevel$405$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$405$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$405$label_1#1;
+
+ inline$BDLGetDebugLevel$405$label_1#1:
+ goto inline$BDLGetDebugLevel$405$Return#1;
+
+ inline$BDLGetDebugLevel$405$Return#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$405$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$14$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$14$anon49_Then#1, inline$BDLSystemPowerIoCompletion$14$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_103_true#1, inline$BDLSystemPowerIoCompletion$14$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$14$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$14$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$14$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_104#1:
+ inline$BDLSystemPowerIoCompletion$14$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$14$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$14$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$14$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$14$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$14$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$14$Return#1:
+ inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$14$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$14$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$14$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$14$anon14_Then#1, inline$CallCompletionRoutine$14$anon14_Else#1;
+
+ inline$CallCompletionRoutine$14$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$14$anon9#1;
+
+ inline$CallCompletionRoutine$14$anon9#1:
+ goto inline$CallCompletionRoutine$14$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$14$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$14$Return#1;
+
+ inline$CallCompletionRoutine$14$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$14$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$14$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$14$Entry#1:
+ inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$14$start#1;
+
+ inline$BDLDevicePowerIoCompletion$14$start#1:
+ call inline$BDLDevicePowerIoCompletion$14$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$14$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_4#1:
+ inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_6#1:
+ inline$BDLDevicePowerIoCompletion$14$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$14$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$14$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$77$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$77$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$start#1:
+ inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$77$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$77$label_3_true#1, inline$IoGetCurrentIrpStackLocation$77$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$77$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$77$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$77$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$77$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$77$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$77$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$77$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$77$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$77$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$77$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$77$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$77$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$77$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$77$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$77$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$77$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$77$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$77$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$77$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$77$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$77$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$77$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$77$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon30_Then#1, inline$BDLDevicePowerIoCompletion$14$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_13#1:
+ inline$BDLDevicePowerIoCompletion$14$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_17#1:
+ goto inline$BDLGetDebugLevel$388$Entry#1;
+
+ inline$BDLGetDebugLevel$388$Entry#1:
+ goto inline$BDLGetDebugLevel$388$start#1;
+
+ inline$BDLGetDebugLevel$388$start#1:
+ goto inline$BDLGetDebugLevel$388$label_3#1;
+
+ inline$BDLGetDebugLevel$388$label_3#1:
+ havoc inline$BDLGetDebugLevel$388$myNondetVar_0;
+ inline$BDLGetDebugLevel$388$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$388$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$388$label_1#1;
+
+ inline$BDLGetDebugLevel$388$label_1#1:
+ goto inline$BDLGetDebugLevel$388$Return#1;
+
+ inline$BDLGetDebugLevel$388$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$388$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon31_Then#1, inline$BDLDevicePowerIoCompletion$14$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_20_true#1, inline$BDLDevicePowerIoCompletion$14$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_21#1:
+ goto inline$BDLGetDebugLevel$389$Entry#1;
+
+ inline$BDLGetDebugLevel$389$Entry#1:
+ goto inline$BDLGetDebugLevel$389$start#1;
+
+ inline$BDLGetDebugLevel$389$start#1:
+ goto inline$BDLGetDebugLevel$389$label_3#1;
+
+ inline$BDLGetDebugLevel$389$label_3#1:
+ havoc inline$BDLGetDebugLevel$389$myNondetVar_0;
+ inline$BDLGetDebugLevel$389$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$389$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$389$label_1#1;
+
+ inline$BDLGetDebugLevel$389$label_1#1:
+ goto inline$BDLGetDebugLevel$389$Return#1;
+
+ inline$BDLGetDebugLevel$389$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$389$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon32_Then#1, inline$BDLDevicePowerIoCompletion$14$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_30_true#1, inline$BDLDevicePowerIoCompletion$14$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_31#1:
+ goto inline$BDLGetDebugLevel$390$Entry#1;
+
+ inline$BDLGetDebugLevel$390$Entry#1:
+ goto inline$BDLGetDebugLevel$390$start#1;
+
+ inline$BDLGetDebugLevel$390$start#1:
+ goto inline$BDLGetDebugLevel$390$label_3#1;
+
+ inline$BDLGetDebugLevel$390$label_3#1:
+ havoc inline$BDLGetDebugLevel$390$myNondetVar_0;
+ inline$BDLGetDebugLevel$390$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$390$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$390$label_1#1;
+
+ inline$BDLGetDebugLevel$390$label_1#1:
+ goto inline$BDLGetDebugLevel$390$Return#1;
+
+ inline$BDLGetDebugLevel$390$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$390$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon33_Then#1, inline$BDLDevicePowerIoCompletion$14$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_40_true#1, inline$BDLDevicePowerIoCompletion$14$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_41_true#1, inline$BDLDevicePowerIoCompletion$14$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$14$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$14$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_44_true#1, inline$BDLDevicePowerIoCompletion$14$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_45_true#1, inline$BDLDevicePowerIoCompletion$14$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$14$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$14$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$14$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_54#1:
+ inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$14$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_55_true#1, inline$BDLDevicePowerIoCompletion$14$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$14$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$14$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$14$anon34_Then#1, inline$BDLDevicePowerIoCompletion$14$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_59#1:
+ goto inline$BDLGetDebugLevel$391$Entry#1;
+
+ inline$BDLGetDebugLevel$391$Entry#1:
+ goto inline$BDLGetDebugLevel$391$start#1;
+
+ inline$BDLGetDebugLevel$391$start#1:
+ goto inline$BDLGetDebugLevel$391$label_3#1;
+
+ inline$BDLGetDebugLevel$391$label_3#1:
+ havoc inline$BDLGetDebugLevel$391$myNondetVar_0;
+ inline$BDLGetDebugLevel$391$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$391$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$391$label_1#1;
+
+ inline$BDLGetDebugLevel$391$label_1#1:
+ goto inline$BDLGetDebugLevel$391$Return#1;
+
+ inline$BDLGetDebugLevel$391$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$391$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon35_Then#1, inline$BDLDevicePowerIoCompletion$14$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_62_true#1, inline$BDLDevicePowerIoCompletion$14$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_63#1:
+ goto inline$BDLGetDebugLevel$392$Entry#1;
+
+ inline$BDLGetDebugLevel$392$Entry#1:
+ goto inline$BDLGetDebugLevel$392$start#1;
+
+ inline$BDLGetDebugLevel$392$start#1:
+ goto inline$BDLGetDebugLevel$392$label_3#1;
+
+ inline$BDLGetDebugLevel$392$label_3#1:
+ havoc inline$BDLGetDebugLevel$392$myNondetVar_0;
+ inline$BDLGetDebugLevel$392$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$392$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$392$label_1#1;
+
+ inline$BDLGetDebugLevel$392$label_1#1:
+ goto inline$BDLGetDebugLevel$392$Return#1;
+
+ inline$BDLGetDebugLevel$392$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$392$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon36_Then#1, inline$BDLDevicePowerIoCompletion$14$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_72_true#1, inline$BDLDevicePowerIoCompletion$14$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_73#1:
+ goto inline$BDLGetDebugLevel$393$Entry#1;
+
+ inline$BDLGetDebugLevel$393$Entry#1:
+ goto inline$BDLGetDebugLevel$393$start#1;
+
+ inline$BDLGetDebugLevel$393$start#1:
+ goto inline$BDLGetDebugLevel$393$label_3#1;
+
+ inline$BDLGetDebugLevel$393$label_3#1:
+ havoc inline$BDLGetDebugLevel$393$myNondetVar_0;
+ inline$BDLGetDebugLevel$393$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$393$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$393$label_1#1;
+
+ inline$BDLGetDebugLevel$393$label_1#1:
+ goto inline$BDLGetDebugLevel$393$Return#1;
+
+ inline$BDLGetDebugLevel$393$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$393$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon37_Then#1, inline$BDLDevicePowerIoCompletion$14$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_82_true#1, inline$BDLDevicePowerIoCompletion$14$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$14$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$14$anon38_Then#1, inline$BDLDevicePowerIoCompletion$14$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$14$anon39_Then#1, inline$BDLDevicePowerIoCompletion$14$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_92#1:
+ goto inline$storm_IoCompleteRequest$29$Entry#1;
+
+ inline$storm_IoCompleteRequest$29$Entry#1:
+ inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$14$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$29$start#1;
+
+ inline$storm_IoCompleteRequest$29$start#1:
+ inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$29$label_3#1;
+
+ inline$storm_IoCompleteRequest$29$label_3#1:
+ call inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$29$label_6#1;
+
+ inline$storm_IoCompleteRequest$29$label_6#1:
+ goto inline$storm_IoCompleteRequest$29$label_6_true#1, inline$storm_IoCompleteRequest$29$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$29$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$29$label_7#1;
+
+ inline$storm_IoCompleteRequest$29$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$29$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$29$label_8#1;
+
+ inline$storm_IoCompleteRequest$29$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$29$anon3_Then#1, inline$storm_IoCompleteRequest$29$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$29$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$29$anon1#1;
+
+ inline$storm_IoCompleteRequest$29$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$29$label_9#1;
+
+ inline$storm_IoCompleteRequest$29$label_9#1:
+ goto inline$storm_IoCompleteRequest$29$label_9_true#1, inline$storm_IoCompleteRequest$29$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$29$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$29$label_10#1;
+
+ inline$storm_IoCompleteRequest$29$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$29$label_1#1;
+
+ inline$storm_IoCompleteRequest$29$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$29$label_7#1;
+
+ inline$storm_IoCompleteRequest$29$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$29$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$29$label_1#1;
+
+ inline$storm_IoCompleteRequest$29$label_1#1:
+ goto inline$storm_IoCompleteRequest$29$Return#1;
+
+ inline$storm_IoCompleteRequest$29$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$29$Return#1;
+
+ inline$storm_IoCompleteRequest$29$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon40_Then#1, inline$BDLDevicePowerIoCompletion$14$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$14$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$14$anon41_Then#1, inline$BDLDevicePowerIoCompletion$14$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_98#1:
+ goto inline$BDLGetDebugLevel$394$Entry#1;
+
+ inline$BDLGetDebugLevel$394$Entry#1:
+ goto inline$BDLGetDebugLevel$394$start#1;
+
+ inline$BDLGetDebugLevel$394$start#1:
+ goto inline$BDLGetDebugLevel$394$label_3#1;
+
+ inline$BDLGetDebugLevel$394$label_3#1:
+ havoc inline$BDLGetDebugLevel$394$myNondetVar_0;
+ inline$BDLGetDebugLevel$394$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$394$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$394$label_1#1;
+
+ inline$BDLGetDebugLevel$394$label_1#1:
+ goto inline$BDLGetDebugLevel$394$Return#1;
+
+ inline$BDLGetDebugLevel$394$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$394$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon42_Then#1, inline$BDLDevicePowerIoCompletion$14$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_101_true#1, inline$BDLDevicePowerIoCompletion$14$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_102#1:
+ goto inline$BDLGetDebugLevel$395$Entry#1;
+
+ inline$BDLGetDebugLevel$395$Entry#1:
+ goto inline$BDLGetDebugLevel$395$start#1;
+
+ inline$BDLGetDebugLevel$395$start#1:
+ goto inline$BDLGetDebugLevel$395$label_3#1;
+
+ inline$BDLGetDebugLevel$395$label_3#1:
+ havoc inline$BDLGetDebugLevel$395$myNondetVar_0;
+ inline$BDLGetDebugLevel$395$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$395$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$395$label_1#1;
+
+ inline$BDLGetDebugLevel$395$label_1#1:
+ goto inline$BDLGetDebugLevel$395$Return#1;
+
+ inline$BDLGetDebugLevel$395$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$395$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon43_Then#1, inline$BDLDevicePowerIoCompletion$14$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_111_true#1, inline$BDLDevicePowerIoCompletion$14$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$14$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$14$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_112#1:
+ goto inline$BDLGetDebugLevel$396$Entry#1;
+
+ inline$BDLGetDebugLevel$396$Entry#1:
+ goto inline$BDLGetDebugLevel$396$start#1;
+
+ inline$BDLGetDebugLevel$396$start#1:
+ goto inline$BDLGetDebugLevel$396$label_3#1;
+
+ inline$BDLGetDebugLevel$396$label_3#1:
+ havoc inline$BDLGetDebugLevel$396$myNondetVar_0;
+ inline$BDLGetDebugLevel$396$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$396$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$396$label_1#1;
+
+ inline$BDLGetDebugLevel$396$label_1#1:
+ goto inline$BDLGetDebugLevel$396$Return#1;
+
+ inline$BDLGetDebugLevel$396$Return#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$396$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$14$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$14$anon44_Then#1, inline$BDLDevicePowerIoCompletion$14$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_121_true#1, inline$BDLDevicePowerIoCompletion$14$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$14$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$14$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$14$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_122#1:
+ inline$BDLDevicePowerIoCompletion$14$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$14$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$14$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$14$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$14$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$14$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$14$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$14$Return#1:
+ inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$14$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$14$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$14$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$14$anon13_Then#1, inline$CallCompletionRoutine$14$anon13_Else#1;
+
+ inline$CallCompletionRoutine$14$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$14$anon7#1;
+
+ inline$CallCompletionRoutine$14$anon7#1:
+ goto inline$CallCompletionRoutine$14$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$14$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$14$Return#1;
+
+ inline$CallCompletionRoutine$14$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$14$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$14$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$14$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$14$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$14$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$start#1:
+ inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$14$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$14$label_3_true#1, inline$BDLCallDriverCompletionRoutine$14$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$14$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$14$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$14$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$14$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$14$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_6#1:
+ goto inline$storm_KeSetEvent$16$Entry#1;
+
+ inline$storm_KeSetEvent$16$Entry#1:
+ inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$14$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$16$start#1;
+
+ inline$storm_KeSetEvent$16$start#1:
+ inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$16$label_3#1;
+
+ inline$storm_KeSetEvent$16$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$16$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$16$label_1#1;
+
+ inline$storm_KeSetEvent$16$label_1#1:
+ goto inline$storm_KeSetEvent$16$Return#1;
+
+ inline$storm_KeSetEvent$16$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$14$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$14$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$14$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$14$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$14$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$14$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$14$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$14$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$14$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$14$Return#1:
+ inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$14$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$14$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$14$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$14$anon12_Then#1, inline$CallCompletionRoutine$14$anon12_Else#1;
+
+ inline$CallCompletionRoutine$14$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$14$anon5#1;
+
+ inline$CallCompletionRoutine$14$anon5#1:
+ goto inline$CallCompletionRoutine$14$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$14$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$14$label_23#1;
+
+ inline$CallCompletionRoutine$14$label_23#1:
+ inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$14$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$14$label_24#1;
+
+ inline$CallCompletionRoutine$14$label_24#1:
+ goto inline$CallCompletionRoutine$14$label_24_true#1, inline$CallCompletionRoutine$14$label_24_false#1;
+
+ inline$CallCompletionRoutine$14$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$14$label_1#1;
+
+ inline$CallCompletionRoutine$14$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$14$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$14$label_25#1;
+
+ inline$CallCompletionRoutine$14$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$14$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$14$label_1#1;
+
+ inline$CallCompletionRoutine$14$label_1#1:
+ goto inline$CallCompletionRoutine$14$Return#1;
+
+ inline$CallCompletionRoutine$14$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$14$Return#1;
+
+ inline$CallCompletionRoutine$14$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$14$Return#1;
+
+ inline$CallCompletionRoutine$14$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$14$Return#1;
+
+ inline$CallCompletionRoutine$14$Return#1:
+ goto inline$storm_IoCallDriver$7$label_33$1#1;
+
+ inline$storm_IoCallDriver$7$label_33$1#1:
+ goto inline$storm_IoCallDriver$7$anon14_Then#1, inline$storm_IoCallDriver$7$anon14_Else#1;
+
+ inline$storm_IoCallDriver$7$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$7$anon8#1;
+
+ inline$storm_IoCallDriver$7$anon8#1:
+ goto inline$storm_IoCallDriver$7$label_36#1;
+
+ inline$storm_IoCallDriver$7$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$7$Return#1;
+
+ inline$storm_IoCallDriver$7$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$7$label_29#1;
+
+ inline$storm_IoCallDriver$7$label_29#1:
+ inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$7$label_37#1;
+
+ inline$storm_IoCallDriver$7$label_37#1:
+ goto inline$storm_IoCallDriver$7$label_38#1;
+
+ inline$storm_IoCallDriver$7$label_38#1:
+ goto inline$storm_IoCallDriver$7$label_39#1;
+
+ inline$storm_IoCallDriver$7$label_39#1:
+ goto inline$CallCompletionRoutine$15$Entry#1;
+
+ inline$CallCompletionRoutine$15$Entry#1:
+ inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$15$start#1;
+
+ inline$CallCompletionRoutine$15$start#1:
+ inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$15$label_3#1;
+
+ inline$CallCompletionRoutine$15$label_3#1:
+ goto inline$CallCompletionRoutine$15$label_4#1;
+
+ inline$CallCompletionRoutine$15$label_4#1:
+ goto inline$CallCompletionRoutine$15$label_5#1;
+
+ inline$CallCompletionRoutine$15$label_5#1:
+ goto inline$CallCompletionRoutine$15$label_6#1;
+
+ inline$CallCompletionRoutine$15$label_6#1:
+ goto inline$CallCompletionRoutine$15$label_7#1;
+
+ inline$CallCompletionRoutine$15$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$79$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$79$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$start#1:
+ inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$79$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$79$label_3_true#1, inline$IoGetCurrentIrpStackLocation$79$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$79$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$79$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$79$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$79$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$79$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$79$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$79$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$79$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$79$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$79$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$79$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$79$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$79$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$79$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$79$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$79$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$79$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$79$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$79$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$79$Return#1:
+ goto inline$CallCompletionRoutine$15$label_7$1#1;
+
+ inline$CallCompletionRoutine$15$label_7$1#1:
+ goto inline$CallCompletionRoutine$15$anon10_Then#1, inline$CallCompletionRoutine$15$anon10_Else#1;
+
+ inline$CallCompletionRoutine$15$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$15$anon1#1;
+
+ inline$CallCompletionRoutine$15$anon1#1:
+ goto inline$CallCompletionRoutine$15$label_10#1;
+
+ inline$CallCompletionRoutine$15$label_10#1:
+ goto inline$CallCompletionRoutine$15$label_11#1;
+
+ inline$CallCompletionRoutine$15$label_11#1:
+ havoc inline$CallCompletionRoutine$15$myNondetVar_0;
+ inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$myNondetVar_0;
+ goto inline$CallCompletionRoutine$15$label_12#1;
+
+ inline$CallCompletionRoutine$15$label_12#1:
+ havoc inline$CallCompletionRoutine$15$myNondetVar_0;
+ inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$myNondetVar_0;
+ goto inline$CallCompletionRoutine$15$label_13#1;
+
+ inline$CallCompletionRoutine$15$label_13#1:
+ havoc inline$CallCompletionRoutine$15$myNondetVar_0;
+ goto inline$CallCompletionRoutine$15$label_14#1;
+
+ inline$CallCompletionRoutine$15$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$80$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$80$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$start#1:
+ inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$80$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$80$label_3_true#1, inline$IoGetCurrentIrpStackLocation$80$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$80$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$80$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$80$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$80$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$80$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$80$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$80$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$80$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$80$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$80$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$80$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$80$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$80$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$80$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$80$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$80$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$80$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$80$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$80$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$80$Return#1:
+ goto inline$CallCompletionRoutine$15$label_14$1#1;
+
+ inline$CallCompletionRoutine$15$label_14$1#1:
+ goto inline$CallCompletionRoutine$15$anon11_Then#1, inline$CallCompletionRoutine$15$anon11_Else#1;
+
+ inline$CallCompletionRoutine$15$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$15$anon3#1;
+
+ inline$CallCompletionRoutine$15$anon3#1:
+ goto inline$CallCompletionRoutine$15$label_17#1;
+
+ inline$CallCompletionRoutine$15$label_17#1:
+ goto inline$CallCompletionRoutine$15$label_18#1;
+
+ inline$CallCompletionRoutine$15$label_18#1:
+ goto inline$CallCompletionRoutine$15$label_18_true#1, inline$CallCompletionRoutine$15$label_18_false#1;
+
+ inline$CallCompletionRoutine$15$label_18_false#1:
+ assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$15$label_1#1;
+
+ inline$CallCompletionRoutine$15$label_18_true#1:
+ assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$15$label_19#1;
+
+ inline$CallCompletionRoutine$15$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$15$label_20#1;
+
+ inline$CallCompletionRoutine$15$label_20#1:
+ goto inline$CallCompletionRoutine$15$label_20_icall_1#1, inline$CallCompletionRoutine$15$label_20_icall_2#1, inline$CallCompletionRoutine$15$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$15$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$15$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$15$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$15$Entry#1:
+ inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$15$start#1;
+
+ inline$BDLSystemPowerIoCompletion$15$start#1:
+ call inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$15$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_4#1:
+ inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_6#1:
+ inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$15$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$15$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$82$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$82$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$start#1:
+ inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$82$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$82$label_3_true#1, inline$IoGetCurrentIrpStackLocation$82$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$82$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$82$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$82$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$82$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$82$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$82$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$82$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$82$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$82$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$82$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$82$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$82$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$82$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$82$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$82$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$82$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$82$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$82$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$82$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$82$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon36_Then#1, inline$BDLSystemPowerIoCompletion$15$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_15#1:
+ goto inline$BDLGetDebugLevel$418$Entry#1;
+
+ inline$BDLGetDebugLevel$418$Entry#1:
+ goto inline$BDLGetDebugLevel$418$start#1;
+
+ inline$BDLGetDebugLevel$418$start#1:
+ goto inline$BDLGetDebugLevel$418$label_3#1;
+
+ inline$BDLGetDebugLevel$418$label_3#1:
+ havoc inline$BDLGetDebugLevel$418$myNondetVar_0;
+ inline$BDLGetDebugLevel$418$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$418$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$418$label_1#1;
+
+ inline$BDLGetDebugLevel$418$label_1#1:
+ goto inline$BDLGetDebugLevel$418$Return#1;
+
+ inline$BDLGetDebugLevel$418$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$418$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon37_Then#1, inline$BDLSystemPowerIoCompletion$15$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_18_true#1, inline$BDLSystemPowerIoCompletion$15$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_19#1:
+ goto inline$BDLGetDebugLevel$419$Entry#1;
+
+ inline$BDLGetDebugLevel$419$Entry#1:
+ goto inline$BDLGetDebugLevel$419$start#1;
+
+ inline$BDLGetDebugLevel$419$start#1:
+ goto inline$BDLGetDebugLevel$419$label_3#1;
+
+ inline$BDLGetDebugLevel$419$label_3#1:
+ havoc inline$BDLGetDebugLevel$419$myNondetVar_0;
+ inline$BDLGetDebugLevel$419$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$419$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$419$label_1#1;
+
+ inline$BDLGetDebugLevel$419$label_1#1:
+ goto inline$BDLGetDebugLevel$419$Return#1;
+
+ inline$BDLGetDebugLevel$419$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$419$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon38_Then#1, inline$BDLSystemPowerIoCompletion$15$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_28_true#1, inline$BDLSystemPowerIoCompletion$15$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_29#1:
+ goto inline$BDLGetDebugLevel$420$Entry#1;
+
+ inline$BDLGetDebugLevel$420$Entry#1:
+ goto inline$BDLGetDebugLevel$420$start#1;
+
+ inline$BDLGetDebugLevel$420$start#1:
+ goto inline$BDLGetDebugLevel$420$label_3#1;
+
+ inline$BDLGetDebugLevel$420$label_3#1:
+ havoc inline$BDLGetDebugLevel$420$myNondetVar_0;
+ inline$BDLGetDebugLevel$420$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$420$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$420$label_1#1;
+
+ inline$BDLGetDebugLevel$420$label_1#1:
+ goto inline$BDLGetDebugLevel$420$Return#1;
+
+ inline$BDLGetDebugLevel$420$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$420$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon39_Then#1, inline$BDLSystemPowerIoCompletion$15$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_38_true#1, inline$BDLSystemPowerIoCompletion$15$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_39_true#1, inline$BDLSystemPowerIoCompletion$15$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$15$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$15$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$15$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$15$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$15$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_106_true#1, inline$BDLSystemPowerIoCompletion$15$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$15$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$15$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$15$myNondetVar_0, inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$15$anon50_Then#1, inline$BDLSystemPowerIoCompletion$15$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_112#1:
+ inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_113_true#1, inline$BDLSystemPowerIoCompletion$15$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$15$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_117#1:
+ goto inline$BDLGetDebugLevel$427$Entry#1;
+
+ inline$BDLGetDebugLevel$427$Entry#1:
+ goto inline$BDLGetDebugLevel$427$start#1;
+
+ inline$BDLGetDebugLevel$427$start#1:
+ goto inline$BDLGetDebugLevel$427$label_3#1;
+
+ inline$BDLGetDebugLevel$427$label_3#1:
+ havoc inline$BDLGetDebugLevel$427$myNondetVar_0;
+ inline$BDLGetDebugLevel$427$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$427$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$427$label_1#1;
+
+ inline$BDLGetDebugLevel$427$label_1#1:
+ goto inline$BDLGetDebugLevel$427$Return#1;
+
+ inline$BDLGetDebugLevel$427$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$427$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon51_Then#1, inline$BDLSystemPowerIoCompletion$15$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_120_true#1, inline$BDLSystemPowerIoCompletion$15$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_121#1:
+ goto inline$BDLGetDebugLevel$428$Entry#1;
+
+ inline$BDLGetDebugLevel$428$Entry#1:
+ goto inline$BDLGetDebugLevel$428$start#1;
+
+ inline$BDLGetDebugLevel$428$start#1:
+ goto inline$BDLGetDebugLevel$428$label_3#1;
+
+ inline$BDLGetDebugLevel$428$label_3#1:
+ havoc inline$BDLGetDebugLevel$428$myNondetVar_0;
+ inline$BDLGetDebugLevel$428$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$428$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$428$label_1#1;
+
+ inline$BDLGetDebugLevel$428$label_1#1:
+ goto inline$BDLGetDebugLevel$428$Return#1;
+
+ inline$BDLGetDebugLevel$428$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$428$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon52_Then#1, inline$BDLSystemPowerIoCompletion$15$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_130_true#1, inline$BDLSystemPowerIoCompletion$15$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_131#1:
+ goto inline$BDLGetDebugLevel$429$Entry#1;
+
+ inline$BDLGetDebugLevel$429$Entry#1:
+ goto inline$BDLGetDebugLevel$429$start#1;
+
+ inline$BDLGetDebugLevel$429$start#1:
+ goto inline$BDLGetDebugLevel$429$label_3#1;
+
+ inline$BDLGetDebugLevel$429$label_3#1:
+ havoc inline$BDLGetDebugLevel$429$myNondetVar_0;
+ inline$BDLGetDebugLevel$429$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$429$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$429$label_1#1;
+
+ inline$BDLGetDebugLevel$429$label_1#1:
+ goto inline$BDLGetDebugLevel$429$Return#1;
+
+ inline$BDLGetDebugLevel$429$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$429$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon53_Then#1, inline$BDLSystemPowerIoCompletion$15$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_140_true#1, inline$BDLSystemPowerIoCompletion$15$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$15$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_115#1:
+ inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$15$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$15$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$15$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_43#1:
+ goto inline$BDLGetDebugLevel$421$Entry#1;
+
+ inline$BDLGetDebugLevel$421$Entry#1:
+ goto inline$BDLGetDebugLevel$421$start#1;
+
+ inline$BDLGetDebugLevel$421$start#1:
+ goto inline$BDLGetDebugLevel$421$label_3#1;
+
+ inline$BDLGetDebugLevel$421$label_3#1:
+ havoc inline$BDLGetDebugLevel$421$myNondetVar_0;
+ inline$BDLGetDebugLevel$421$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$421$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$421$label_1#1;
+
+ inline$BDLGetDebugLevel$421$label_1#1:
+ goto inline$BDLGetDebugLevel$421$Return#1;
+
+ inline$BDLGetDebugLevel$421$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$421$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon40_Then#1, inline$BDLSystemPowerIoCompletion$15$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_46_true#1, inline$BDLSystemPowerIoCompletion$15$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_47#1:
+ goto inline$BDLGetDebugLevel$422$Entry#1;
+
+ inline$BDLGetDebugLevel$422$Entry#1:
+ goto inline$BDLGetDebugLevel$422$start#1;
+
+ inline$BDLGetDebugLevel$422$start#1:
+ goto inline$BDLGetDebugLevel$422$label_3#1;
+
+ inline$BDLGetDebugLevel$422$label_3#1:
+ havoc inline$BDLGetDebugLevel$422$myNondetVar_0;
+ inline$BDLGetDebugLevel$422$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$422$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$422$label_1#1;
+
+ inline$BDLGetDebugLevel$422$label_1#1:
+ goto inline$BDLGetDebugLevel$422$Return#1;
+
+ inline$BDLGetDebugLevel$422$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$422$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon41_Then#1, inline$BDLSystemPowerIoCompletion$15$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_56_true#1, inline$BDLSystemPowerIoCompletion$15$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_57#1:
+ goto inline$BDLGetDebugLevel$423$Entry#1;
+
+ inline$BDLGetDebugLevel$423$Entry#1:
+ goto inline$BDLGetDebugLevel$423$start#1;
+
+ inline$BDLGetDebugLevel$423$start#1:
+ goto inline$BDLGetDebugLevel$423$label_3#1;
+
+ inline$BDLGetDebugLevel$423$label_3#1:
+ havoc inline$BDLGetDebugLevel$423$myNondetVar_0;
+ inline$BDLGetDebugLevel$423$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$423$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$423$label_1#1;
+
+ inline$BDLGetDebugLevel$423$label_1#1:
+ goto inline$BDLGetDebugLevel$423$Return#1;
+
+ inline$BDLGetDebugLevel$423$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$423$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon42_Then#1, inline$BDLSystemPowerIoCompletion$15$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_66_true#1, inline$BDLSystemPowerIoCompletion$15$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$15$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$15$anon43_Then#1, inline$BDLSystemPowerIoCompletion$15$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$15$anon44_Then#1, inline$BDLSystemPowerIoCompletion$15$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_74#1:
+ goto inline$storm_IoCompleteRequest$32$Entry#1;
+
+ inline$storm_IoCompleteRequest$32$Entry#1:
+ inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$15$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$32$start#1;
+
+ inline$storm_IoCompleteRequest$32$start#1:
+ inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$32$label_3#1;
+
+ inline$storm_IoCompleteRequest$32$label_3#1:
+ call inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$32$label_6#1;
+
+ inline$storm_IoCompleteRequest$32$label_6#1:
+ goto inline$storm_IoCompleteRequest$32$label_6_true#1, inline$storm_IoCompleteRequest$32$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$32$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$32$label_7#1;
+
+ inline$storm_IoCompleteRequest$32$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$32$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$32$label_8#1;
+
+ inline$storm_IoCompleteRequest$32$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$32$anon3_Then#1, inline$storm_IoCompleteRequest$32$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$32$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$32$anon1#1;
+
+ inline$storm_IoCompleteRequest$32$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$32$label_9#1;
+
+ inline$storm_IoCompleteRequest$32$label_9#1:
+ goto inline$storm_IoCompleteRequest$32$label_9_true#1, inline$storm_IoCompleteRequest$32$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$32$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$32$label_10#1;
+
+ inline$storm_IoCompleteRequest$32$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$32$label_1#1;
+
+ inline$storm_IoCompleteRequest$32$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$32$label_7#1;
+
+ inline$storm_IoCompleteRequest$32$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$32$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$32$label_1#1;
+
+ inline$storm_IoCompleteRequest$32$label_1#1:
+ goto inline$storm_IoCompleteRequest$32$Return#1;
+
+ inline$storm_IoCompleteRequest$32$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$32$Return#1;
+
+ inline$storm_IoCompleteRequest$32$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon45_Then#1, inline$BDLSystemPowerIoCompletion$15$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$15$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$15$anon46_Then#1, inline$BDLSystemPowerIoCompletion$15$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_80#1:
+ goto inline$BDLGetDebugLevel$424$Entry#1;
+
+ inline$BDLGetDebugLevel$424$Entry#1:
+ goto inline$BDLGetDebugLevel$424$start#1;
+
+ inline$BDLGetDebugLevel$424$start#1:
+ goto inline$BDLGetDebugLevel$424$label_3#1;
+
+ inline$BDLGetDebugLevel$424$label_3#1:
+ havoc inline$BDLGetDebugLevel$424$myNondetVar_0;
+ inline$BDLGetDebugLevel$424$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$424$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$424$label_1#1;
+
+ inline$BDLGetDebugLevel$424$label_1#1:
+ goto inline$BDLGetDebugLevel$424$Return#1;
+
+ inline$BDLGetDebugLevel$424$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$424$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon47_Then#1, inline$BDLSystemPowerIoCompletion$15$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_83_true#1, inline$BDLSystemPowerIoCompletion$15$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_84#1:
+ goto inline$BDLGetDebugLevel$425$Entry#1;
+
+ inline$BDLGetDebugLevel$425$Entry#1:
+ goto inline$BDLGetDebugLevel$425$start#1;
+
+ inline$BDLGetDebugLevel$425$start#1:
+ goto inline$BDLGetDebugLevel$425$label_3#1;
+
+ inline$BDLGetDebugLevel$425$label_3#1:
+ havoc inline$BDLGetDebugLevel$425$myNondetVar_0;
+ inline$BDLGetDebugLevel$425$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$425$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$425$label_1#1;
+
+ inline$BDLGetDebugLevel$425$label_1#1:
+ goto inline$BDLGetDebugLevel$425$Return#1;
+
+ inline$BDLGetDebugLevel$425$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$425$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon48_Then#1, inline$BDLSystemPowerIoCompletion$15$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_93_true#1, inline$BDLSystemPowerIoCompletion$15$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$15$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$15$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_94#1:
+ goto inline$BDLGetDebugLevel$426$Entry#1;
+
+ inline$BDLGetDebugLevel$426$Entry#1:
+ goto inline$BDLGetDebugLevel$426$start#1;
+
+ inline$BDLGetDebugLevel$426$start#1:
+ goto inline$BDLGetDebugLevel$426$label_3#1;
+
+ inline$BDLGetDebugLevel$426$label_3#1:
+ havoc inline$BDLGetDebugLevel$426$myNondetVar_0;
+ inline$BDLGetDebugLevel$426$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$426$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$426$label_1#1;
+
+ inline$BDLGetDebugLevel$426$label_1#1:
+ goto inline$BDLGetDebugLevel$426$Return#1;
+
+ inline$BDLGetDebugLevel$426$Return#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$426$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$15$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$15$anon49_Then#1, inline$BDLSystemPowerIoCompletion$15$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_103_true#1, inline$BDLSystemPowerIoCompletion$15$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$15$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$15$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$15$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_104#1:
+ inline$BDLSystemPowerIoCompletion$15$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$15$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$15$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$15$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$15$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$15$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$15$Return#1:
+ inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$15$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$15$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$15$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$15$anon14_Then#1, inline$CallCompletionRoutine$15$anon14_Else#1;
+
+ inline$CallCompletionRoutine$15$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$15$anon9#1;
+
+ inline$CallCompletionRoutine$15$anon9#1:
+ goto inline$CallCompletionRoutine$15$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$15$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$15$Return#1;
+
+ inline$CallCompletionRoutine$15$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$15$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$15$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$15$Entry#1:
+ inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$15$start#1;
+
+ inline$BDLDevicePowerIoCompletion$15$start#1:
+ call inline$BDLDevicePowerIoCompletion$15$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$15$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_4#1:
+ inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_6#1:
+ inline$BDLDevicePowerIoCompletion$15$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$15$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$15$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$81$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$81$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$start#1:
+ inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$81$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$81$label_3_true#1, inline$IoGetCurrentIrpStackLocation$81$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$81$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$81$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$81$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$81$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$81$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$81$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$81$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$81$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$81$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$81$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$81$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$81$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$81$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$81$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$81$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$81$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$81$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$81$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$81$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$81$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$81$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$81$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$81$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon30_Then#1, inline$BDLDevicePowerIoCompletion$15$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_13#1:
+ inline$BDLDevicePowerIoCompletion$15$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_17#1:
+ goto inline$BDLGetDebugLevel$409$Entry#1;
+
+ inline$BDLGetDebugLevel$409$Entry#1:
+ goto inline$BDLGetDebugLevel$409$start#1;
+
+ inline$BDLGetDebugLevel$409$start#1:
+ goto inline$BDLGetDebugLevel$409$label_3#1;
+
+ inline$BDLGetDebugLevel$409$label_3#1:
+ havoc inline$BDLGetDebugLevel$409$myNondetVar_0;
+ inline$BDLGetDebugLevel$409$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$409$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$409$label_1#1;
+
+ inline$BDLGetDebugLevel$409$label_1#1:
+ goto inline$BDLGetDebugLevel$409$Return#1;
+
+ inline$BDLGetDebugLevel$409$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$409$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon31_Then#1, inline$BDLDevicePowerIoCompletion$15$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_20_true#1, inline$BDLDevicePowerIoCompletion$15$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_21#1:
+ goto inline$BDLGetDebugLevel$410$Entry#1;
+
+ inline$BDLGetDebugLevel$410$Entry#1:
+ goto inline$BDLGetDebugLevel$410$start#1;
+
+ inline$BDLGetDebugLevel$410$start#1:
+ goto inline$BDLGetDebugLevel$410$label_3#1;
+
+ inline$BDLGetDebugLevel$410$label_3#1:
+ havoc inline$BDLGetDebugLevel$410$myNondetVar_0;
+ inline$BDLGetDebugLevel$410$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$410$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$410$label_1#1;
+
+ inline$BDLGetDebugLevel$410$label_1#1:
+ goto inline$BDLGetDebugLevel$410$Return#1;
+
+ inline$BDLGetDebugLevel$410$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$410$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon32_Then#1, inline$BDLDevicePowerIoCompletion$15$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_30_true#1, inline$BDLDevicePowerIoCompletion$15$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_31#1:
+ goto inline$BDLGetDebugLevel$411$Entry#1;
+
+ inline$BDLGetDebugLevel$411$Entry#1:
+ goto inline$BDLGetDebugLevel$411$start#1;
+
+ inline$BDLGetDebugLevel$411$start#1:
+ goto inline$BDLGetDebugLevel$411$label_3#1;
+
+ inline$BDLGetDebugLevel$411$label_3#1:
+ havoc inline$BDLGetDebugLevel$411$myNondetVar_0;
+ inline$BDLGetDebugLevel$411$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$411$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$411$label_1#1;
+
+ inline$BDLGetDebugLevel$411$label_1#1:
+ goto inline$BDLGetDebugLevel$411$Return#1;
+
+ inline$BDLGetDebugLevel$411$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$411$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon33_Then#1, inline$BDLDevicePowerIoCompletion$15$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_40_true#1, inline$BDLDevicePowerIoCompletion$15$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_41_true#1, inline$BDLDevicePowerIoCompletion$15$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$15$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$15$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_44_true#1, inline$BDLDevicePowerIoCompletion$15$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_45_true#1, inline$BDLDevicePowerIoCompletion$15$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$15$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$15$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$15$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_54#1:
+ inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$15$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_55_true#1, inline$BDLDevicePowerIoCompletion$15$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$15$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$15$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$15$anon34_Then#1, inline$BDLDevicePowerIoCompletion$15$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_59#1:
+ goto inline$BDLGetDebugLevel$412$Entry#1;
+
+ inline$BDLGetDebugLevel$412$Entry#1:
+ goto inline$BDLGetDebugLevel$412$start#1;
+
+ inline$BDLGetDebugLevel$412$start#1:
+ goto inline$BDLGetDebugLevel$412$label_3#1;
+
+ inline$BDLGetDebugLevel$412$label_3#1:
+ havoc inline$BDLGetDebugLevel$412$myNondetVar_0;
+ inline$BDLGetDebugLevel$412$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$412$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$412$label_1#1;
+
+ inline$BDLGetDebugLevel$412$label_1#1:
+ goto inline$BDLGetDebugLevel$412$Return#1;
+
+ inline$BDLGetDebugLevel$412$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$412$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon35_Then#1, inline$BDLDevicePowerIoCompletion$15$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_62_true#1, inline$BDLDevicePowerIoCompletion$15$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_63#1:
+ goto inline$BDLGetDebugLevel$413$Entry#1;
+
+ inline$BDLGetDebugLevel$413$Entry#1:
+ goto inline$BDLGetDebugLevel$413$start#1;
+
+ inline$BDLGetDebugLevel$413$start#1:
+ goto inline$BDLGetDebugLevel$413$label_3#1;
+
+ inline$BDLGetDebugLevel$413$label_3#1:
+ havoc inline$BDLGetDebugLevel$413$myNondetVar_0;
+ inline$BDLGetDebugLevel$413$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$413$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$413$label_1#1;
+
+ inline$BDLGetDebugLevel$413$label_1#1:
+ goto inline$BDLGetDebugLevel$413$Return#1;
+
+ inline$BDLGetDebugLevel$413$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$413$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon36_Then#1, inline$BDLDevicePowerIoCompletion$15$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_72_true#1, inline$BDLDevicePowerIoCompletion$15$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_73#1:
+ goto inline$BDLGetDebugLevel$414$Entry#1;
+
+ inline$BDLGetDebugLevel$414$Entry#1:
+ goto inline$BDLGetDebugLevel$414$start#1;
+
+ inline$BDLGetDebugLevel$414$start#1:
+ goto inline$BDLGetDebugLevel$414$label_3#1;
+
+ inline$BDLGetDebugLevel$414$label_3#1:
+ havoc inline$BDLGetDebugLevel$414$myNondetVar_0;
+ inline$BDLGetDebugLevel$414$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$414$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$414$label_1#1;
+
+ inline$BDLGetDebugLevel$414$label_1#1:
+ goto inline$BDLGetDebugLevel$414$Return#1;
+
+ inline$BDLGetDebugLevel$414$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$414$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon37_Then#1, inline$BDLDevicePowerIoCompletion$15$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_82_true#1, inline$BDLDevicePowerIoCompletion$15$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$15$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$15$anon38_Then#1, inline$BDLDevicePowerIoCompletion$15$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$15$anon39_Then#1, inline$BDLDevicePowerIoCompletion$15$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_92#1:
+ goto inline$storm_IoCompleteRequest$31$Entry#1;
+
+ inline$storm_IoCompleteRequest$31$Entry#1:
+ inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$15$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$31$start#1;
+
+ inline$storm_IoCompleteRequest$31$start#1:
+ inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$31$label_3#1;
+
+ inline$storm_IoCompleteRequest$31$label_3#1:
+ call inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$31$label_6#1;
+
+ inline$storm_IoCompleteRequest$31$label_6#1:
+ goto inline$storm_IoCompleteRequest$31$label_6_true#1, inline$storm_IoCompleteRequest$31$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$31$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$31$label_7#1;
+
+ inline$storm_IoCompleteRequest$31$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$31$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$31$label_8#1;
+
+ inline$storm_IoCompleteRequest$31$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$31$anon3_Then#1, inline$storm_IoCompleteRequest$31$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$31$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$31$anon1#1;
+
+ inline$storm_IoCompleteRequest$31$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$31$label_9#1;
+
+ inline$storm_IoCompleteRequest$31$label_9#1:
+ goto inline$storm_IoCompleteRequest$31$label_9_true#1, inline$storm_IoCompleteRequest$31$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$31$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$31$label_10#1;
+
+ inline$storm_IoCompleteRequest$31$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$31$label_1#1;
+
+ inline$storm_IoCompleteRequest$31$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$31$label_7#1;
+
+ inline$storm_IoCompleteRequest$31$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$31$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$31$label_1#1;
+
+ inline$storm_IoCompleteRequest$31$label_1#1:
+ goto inline$storm_IoCompleteRequest$31$Return#1;
+
+ inline$storm_IoCompleteRequest$31$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$31$Return#1;
+
+ inline$storm_IoCompleteRequest$31$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon40_Then#1, inline$BDLDevicePowerIoCompletion$15$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$15$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$15$anon41_Then#1, inline$BDLDevicePowerIoCompletion$15$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_98#1:
+ goto inline$BDLGetDebugLevel$415$Entry#1;
+
+ inline$BDLGetDebugLevel$415$Entry#1:
+ goto inline$BDLGetDebugLevel$415$start#1;
+
+ inline$BDLGetDebugLevel$415$start#1:
+ goto inline$BDLGetDebugLevel$415$label_3#1;
+
+ inline$BDLGetDebugLevel$415$label_3#1:
+ havoc inline$BDLGetDebugLevel$415$myNondetVar_0;
+ inline$BDLGetDebugLevel$415$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$415$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$415$label_1#1;
+
+ inline$BDLGetDebugLevel$415$label_1#1:
+ goto inline$BDLGetDebugLevel$415$Return#1;
+
+ inline$BDLGetDebugLevel$415$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$415$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon42_Then#1, inline$BDLDevicePowerIoCompletion$15$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_101_true#1, inline$BDLDevicePowerIoCompletion$15$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_102#1:
+ goto inline$BDLGetDebugLevel$416$Entry#1;
+
+ inline$BDLGetDebugLevel$416$Entry#1:
+ goto inline$BDLGetDebugLevel$416$start#1;
+
+ inline$BDLGetDebugLevel$416$start#1:
+ goto inline$BDLGetDebugLevel$416$label_3#1;
+
+ inline$BDLGetDebugLevel$416$label_3#1:
+ havoc inline$BDLGetDebugLevel$416$myNondetVar_0;
+ inline$BDLGetDebugLevel$416$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$416$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$416$label_1#1;
+
+ inline$BDLGetDebugLevel$416$label_1#1:
+ goto inline$BDLGetDebugLevel$416$Return#1;
+
+ inline$BDLGetDebugLevel$416$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$416$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon43_Then#1, inline$BDLDevicePowerIoCompletion$15$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_111_true#1, inline$BDLDevicePowerIoCompletion$15$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$15$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$15$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_112#1:
+ goto inline$BDLGetDebugLevel$417$Entry#1;
+
+ inline$BDLGetDebugLevel$417$Entry#1:
+ goto inline$BDLGetDebugLevel$417$start#1;
+
+ inline$BDLGetDebugLevel$417$start#1:
+ goto inline$BDLGetDebugLevel$417$label_3#1;
+
+ inline$BDLGetDebugLevel$417$label_3#1:
+ havoc inline$BDLGetDebugLevel$417$myNondetVar_0;
+ inline$BDLGetDebugLevel$417$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$417$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$417$label_1#1;
+
+ inline$BDLGetDebugLevel$417$label_1#1:
+ goto inline$BDLGetDebugLevel$417$Return#1;
+
+ inline$BDLGetDebugLevel$417$Return#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$417$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$15$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$15$anon44_Then#1, inline$BDLDevicePowerIoCompletion$15$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_121_true#1, inline$BDLDevicePowerIoCompletion$15$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$15$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$15$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$15$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_122#1:
+ inline$BDLDevicePowerIoCompletion$15$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$15$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$15$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$15$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$15$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$15$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$15$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$15$Return#1:
+ inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$15$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$15$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$15$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$15$anon13_Then#1, inline$CallCompletionRoutine$15$anon13_Else#1;
+
+ inline$CallCompletionRoutine$15$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$15$anon7#1;
+
+ inline$CallCompletionRoutine$15$anon7#1:
+ goto inline$CallCompletionRoutine$15$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$15$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$15$Return#1;
+
+ inline$CallCompletionRoutine$15$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$15$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$15$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$15$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$15$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$15$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$start#1:
+ inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$15$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$15$label_3_true#1, inline$BDLCallDriverCompletionRoutine$15$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$15$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$15$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$15$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$15$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$15$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_6#1:
+ goto inline$storm_KeSetEvent$17$Entry#1;
+
+ inline$storm_KeSetEvent$17$Entry#1:
+ inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$15$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$17$start#1;
+
+ inline$storm_KeSetEvent$17$start#1:
+ inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$17$label_3#1;
+
+ inline$storm_KeSetEvent$17$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$17$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$17$label_1#1;
+
+ inline$storm_KeSetEvent$17$label_1#1:
+ goto inline$storm_KeSetEvent$17$Return#1;
+
+ inline$storm_KeSetEvent$17$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$15$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$15$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$15$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$15$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$15$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$15$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$15$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$15$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$15$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$15$Return#1:
+ inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$15$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$15$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$15$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$15$anon12_Then#1, inline$CallCompletionRoutine$15$anon12_Else#1;
+
+ inline$CallCompletionRoutine$15$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$15$anon5#1;
+
+ inline$CallCompletionRoutine$15$anon5#1:
+ goto inline$CallCompletionRoutine$15$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$15$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$15$label_23#1;
+
+ inline$CallCompletionRoutine$15$label_23#1:
+ inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$15$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$15$label_24#1;
+
+ inline$CallCompletionRoutine$15$label_24#1:
+ goto inline$CallCompletionRoutine$15$label_24_true#1, inline$CallCompletionRoutine$15$label_24_false#1;
+
+ inline$CallCompletionRoutine$15$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$15$label_1#1;
+
+ inline$CallCompletionRoutine$15$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$15$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$15$label_25#1;
+
+ inline$CallCompletionRoutine$15$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$15$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$15$label_1#1;
+
+ inline$CallCompletionRoutine$15$label_1#1:
+ goto inline$CallCompletionRoutine$15$Return#1;
+
+ inline$CallCompletionRoutine$15$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$15$Return#1;
+
+ inline$CallCompletionRoutine$15$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$15$Return#1;
+
+ inline$CallCompletionRoutine$15$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$15$Return#1;
+
+ inline$CallCompletionRoutine$15$Return#1:
+ goto inline$storm_IoCallDriver$7$label_39$1#1;
+
+ inline$storm_IoCallDriver$7$label_39$1#1:
+ goto inline$storm_IoCallDriver$7$anon15_Then#1, inline$storm_IoCallDriver$7$anon15_Else#1;
+
+ inline$storm_IoCallDriver$7$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$7$anon10#1;
+
+ inline$storm_IoCallDriver$7$anon10#1:
+ goto inline$storm_IoCallDriver$7$label_36#1;
+
+ inline$storm_IoCallDriver$7$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$7$Return#1;
+
+ inline$storm_IoCallDriver$7$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$7$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$7$label_28#1;
+
+ inline$storm_IoCallDriver$7$label_28#1:
+ inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$7$label_42#1;
+
+ inline$storm_IoCallDriver$7$label_42#1:
+ goto inline$storm_IoCallDriver$7$label_43#1;
+
+ inline$storm_IoCallDriver$7$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$7$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$7$label_36#1;
+
+ inline$storm_IoCallDriver$7$label_36#1:
+ inline$storm_IoCallDriver$7$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$7$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$7$label_1#1;
+
+ inline$storm_IoCallDriver$7$label_1#1:
+ goto inline$storm_IoCallDriver$7$Return#1;
+
+ inline$storm_IoCallDriver$7$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$7$Return#1;
+
+ inline$storm_IoCallDriver$7$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$7$Return#1;
+
+ inline$storm_IoCallDriver$7$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$7$Return#1;
+
+ inline$storm_IoCallDriver$7$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$7$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_19$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_19$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon20_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon9#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_42#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_42#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_IoCallDriver$108.29$4$;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_18_true#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_22#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_22#1:
+ call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon21_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon21_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon11#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon11#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_25#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_25#1:
+ goto inline$storm_PoCallDriver$3$Entry#1;
+
+ inline$storm_PoCallDriver$3$Entry#1:
+ inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_PoCallDriver$3$start#1;
+
+ inline$storm_PoCallDriver$3$start#1:
+ inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8_.1;
+ goto inline$storm_PoCallDriver$3$label_3#1;
+
+ inline$storm_PoCallDriver$3$label_3#1:
+ goto inline$storm_IoCallDriver$8$Entry#1;
+
+ inline$storm_IoCallDriver$8$Entry#1:
+ inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$3$$Irp$2$496.14$storm_PoCallDriver$8;
+ goto inline$storm_IoCallDriver$8$start#1;
+
+ inline$storm_IoCallDriver$8$start#1:
+ inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$8$label_3#1;
+
+ inline$storm_IoCallDriver$8$label_3#1:
+ goto inline$storm_IoCallDriver$8$label_4#1;
+
+ inline$storm_IoCallDriver$8$label_4#1:
+ goto inline$storm_IoCallDriver$8$label_5#1;
+
+ inline$storm_IoCallDriver$8$label_5#1:
+ goto inline$storm_IoCallDriver$8$label_6#1;
+
+ inline$storm_IoCallDriver$8$label_6#1:
+ call inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$8$label_9#1;
+
+ inline$storm_IoCallDriver$8$label_9#1:
+ goto inline$storm_IoCallDriver$8$label_9_true#1, inline$storm_IoCallDriver$8$label_9_false#1;
+
+ inline$storm_IoCallDriver$8$label_9_false#1:
+ assume inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$8$label_10#1;
+
+ inline$storm_IoCallDriver$8$label_9_true#1:
+ assume inline$storm_IoCallDriver$8$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$8$label_13#1;
+
+ inline$storm_IoCallDriver$8$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$8$anon12_Then#1, inline$storm_IoCallDriver$8$anon12_Else#1;
+
+ inline$storm_IoCallDriver$8$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$8$anon3#1;
+
+ inline$storm_IoCallDriver$8$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$8$label_14#1;
+
+ inline$storm_IoCallDriver$8$label_14#1:
+ goto inline$storm_IoCallDriver$8$label_14_true#1, inline$storm_IoCallDriver$8$label_14_false#1;
+
+ inline$storm_IoCallDriver$8$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$8$label_15#1;
+
+ inline$storm_IoCallDriver$8$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$8$label_1#1;
+
+ inline$storm_IoCallDriver$8$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$8$label_10#1;
+
+ inline$storm_IoCallDriver$8$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$9$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$9$Entry#1:
+ inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$9$start#1;
+
+ inline$IoSetNextIrpStackLocation$9$start#1:
+ inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$9$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$9$label_3_true#1, inline$IoSetNextIrpStackLocation$9$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$9$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$9$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_4#1:
+ call inline$IoSetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$9$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_7#1:
+ call inline$IoSetNextIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$9$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$9$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$9$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$9$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_5#1:
+ inline$IoSetNextIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$9$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$9$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$9$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$9$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$9$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$9$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$9$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$9$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$9$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$9$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$9$Return#1;
+
+ inline$IoSetNextIrpStackLocation$9$Return#1:
+ goto inline$storm_IoCallDriver$8$label_10$1#1;
+
+ inline$storm_IoCallDriver$8$label_10$1#1:
+ goto inline$storm_IoCallDriver$8$anon11_Then#1, inline$storm_IoCallDriver$8$anon11_Else#1;
+
+ inline$storm_IoCallDriver$8$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$8$anon1#1;
+
+ inline$storm_IoCallDriver$8$anon1#1:
+ goto inline$storm_IoCallDriver$8$label_18#1;
+
+ inline$storm_IoCallDriver$8$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$83$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$83$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$start#1:
+ inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$83$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$83$label_3_true#1, inline$IoGetCurrentIrpStackLocation$83$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$83$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$83$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$83$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$83$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$83$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$83$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$83$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$83$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$83$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$83$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$83$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$83$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$83$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$83$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$83$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$83$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$83$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$83$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$83$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$83$Return#1:
+ goto inline$storm_IoCallDriver$8$label_18$1#1;
+
+ inline$storm_IoCallDriver$8$label_18$1#1:
+ goto inline$storm_IoCallDriver$8$anon13_Then#1, inline$storm_IoCallDriver$8$anon13_Else#1;
+
+ inline$storm_IoCallDriver$8$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$8$anon6#1;
+
+ inline$storm_IoCallDriver$8$anon6#1:
+ goto inline$storm_IoCallDriver$8$label_21#1;
+
+ inline$storm_IoCallDriver$8$label_21#1:
+ goto inline$storm_IoCallDriver$8$label_22#1;
+
+ inline$storm_IoCallDriver$8$label_22#1:
+ goto inline$storm_IoCallDriver$8$label_23#1;
+
+ inline$storm_IoCallDriver$8$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$8$label_24#1;
+
+ inline$storm_IoCallDriver$8$label_24#1:
+ call inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$8$label_27#1;
+
+ inline$storm_IoCallDriver$8$label_27#1:
+ goto inline$storm_IoCallDriver$8$label_27_case_0#1, inline$storm_IoCallDriver$8$label_27_case_1#1, inline$storm_IoCallDriver$8$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$8$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$8$label_30#1;
+
+ inline$storm_IoCallDriver$8$label_30#1:
+ inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$8$label_31#1;
+
+ inline$storm_IoCallDriver$8$label_31#1:
+ goto inline$storm_IoCallDriver$8$label_32#1;
+
+ inline$storm_IoCallDriver$8$label_32#1:
+ goto inline$storm_IoCallDriver$8$label_33#1;
+
+ inline$storm_IoCallDriver$8$label_33#1:
+ goto inline$CallCompletionRoutine$16$Entry#1;
+
+ inline$CallCompletionRoutine$16$Entry#1:
+ inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$16$start#1;
+
+ inline$CallCompletionRoutine$16$start#1:
+ inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$16$label_3#1;
+
+ inline$CallCompletionRoutine$16$label_3#1:
+ goto inline$CallCompletionRoutine$16$label_4#1;
+
+ inline$CallCompletionRoutine$16$label_4#1:
+ goto inline$CallCompletionRoutine$16$label_5#1;
+
+ inline$CallCompletionRoutine$16$label_5#1:
+ goto inline$CallCompletionRoutine$16$label_6#1;
+
+ inline$CallCompletionRoutine$16$label_6#1:
+ goto inline$CallCompletionRoutine$16$label_7#1;
+
+ inline$CallCompletionRoutine$16$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$84$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$84$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$start#1:
+ inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$84$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$84$label_3_true#1, inline$IoGetCurrentIrpStackLocation$84$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$84$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$84$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$84$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$84$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$84$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$84$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$84$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$84$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$84$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$84$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$84$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$84$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$84$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$84$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$84$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$84$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$84$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$84$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$84$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$84$Return#1:
+ goto inline$CallCompletionRoutine$16$label_7$1#1;
+
+ inline$CallCompletionRoutine$16$label_7$1#1:
+ goto inline$CallCompletionRoutine$16$anon10_Then#1, inline$CallCompletionRoutine$16$anon10_Else#1;
+
+ inline$CallCompletionRoutine$16$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$16$anon1#1;
+
+ inline$CallCompletionRoutine$16$anon1#1:
+ goto inline$CallCompletionRoutine$16$label_10#1;
+
+ inline$CallCompletionRoutine$16$label_10#1:
+ goto inline$CallCompletionRoutine$16$label_11#1;
+
+ inline$CallCompletionRoutine$16$label_11#1:
+ havoc inline$CallCompletionRoutine$16$myNondetVar_0;
+ inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$myNondetVar_0;
+ goto inline$CallCompletionRoutine$16$label_12#1;
+
+ inline$CallCompletionRoutine$16$label_12#1:
+ havoc inline$CallCompletionRoutine$16$myNondetVar_0;
+ inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$myNondetVar_0;
+ goto inline$CallCompletionRoutine$16$label_13#1;
+
+ inline$CallCompletionRoutine$16$label_13#1:
+ havoc inline$CallCompletionRoutine$16$myNondetVar_0;
+ goto inline$CallCompletionRoutine$16$label_14#1;
+
+ inline$CallCompletionRoutine$16$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$85$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$85$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$start#1:
+ inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$85$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$85$label_3_true#1, inline$IoGetCurrentIrpStackLocation$85$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$85$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$85$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$85$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$85$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$85$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$85$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$85$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$85$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$85$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$85$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$85$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$85$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$85$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$85$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$85$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$85$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$85$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$85$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$85$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$85$Return#1:
+ goto inline$CallCompletionRoutine$16$label_14$1#1;
+
+ inline$CallCompletionRoutine$16$label_14$1#1:
+ goto inline$CallCompletionRoutine$16$anon11_Then#1, inline$CallCompletionRoutine$16$anon11_Else#1;
+
+ inline$CallCompletionRoutine$16$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$16$anon3#1;
+
+ inline$CallCompletionRoutine$16$anon3#1:
+ goto inline$CallCompletionRoutine$16$label_17#1;
+
+ inline$CallCompletionRoutine$16$label_17#1:
+ goto inline$CallCompletionRoutine$16$label_18#1;
+
+ inline$CallCompletionRoutine$16$label_18#1:
+ goto inline$CallCompletionRoutine$16$label_18_true#1, inline$CallCompletionRoutine$16$label_18_false#1;
+
+ inline$CallCompletionRoutine$16$label_18_false#1:
+ assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$16$label_1#1;
+
+ inline$CallCompletionRoutine$16$label_18_true#1:
+ assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$16$label_19#1;
+
+ inline$CallCompletionRoutine$16$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$16$label_20#1;
+
+ inline$CallCompletionRoutine$16$label_20#1:
+ goto inline$CallCompletionRoutine$16$label_20_icall_1#1, inline$CallCompletionRoutine$16$label_20_icall_2#1, inline$CallCompletionRoutine$16$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$16$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$16$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$16$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$16$Entry#1:
+ inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$16$start#1;
+
+ inline$BDLSystemPowerIoCompletion$16$start#1:
+ call inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$16$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_4#1:
+ inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_6#1:
+ inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$16$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$16$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$87$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$87$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$start#1:
+ inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$87$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$87$label_3_true#1, inline$IoGetCurrentIrpStackLocation$87$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$87$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$87$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$87$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$87$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$87$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$87$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$87$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$87$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$87$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$87$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$87$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$87$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$87$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$87$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$87$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$87$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$87$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$87$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$87$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$87$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon36_Then#1, inline$BDLSystemPowerIoCompletion$16$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_15#1:
+ goto inline$BDLGetDebugLevel$439$Entry#1;
+
+ inline$BDLGetDebugLevel$439$Entry#1:
+ goto inline$BDLGetDebugLevel$439$start#1;
+
+ inline$BDLGetDebugLevel$439$start#1:
+ goto inline$BDLGetDebugLevel$439$label_3#1;
+
+ inline$BDLGetDebugLevel$439$label_3#1:
+ havoc inline$BDLGetDebugLevel$439$myNondetVar_0;
+ inline$BDLGetDebugLevel$439$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$439$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$439$label_1#1;
+
+ inline$BDLGetDebugLevel$439$label_1#1:
+ goto inline$BDLGetDebugLevel$439$Return#1;
+
+ inline$BDLGetDebugLevel$439$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$439$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon37_Then#1, inline$BDLSystemPowerIoCompletion$16$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_18_true#1, inline$BDLSystemPowerIoCompletion$16$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_19#1:
+ goto inline$BDLGetDebugLevel$440$Entry#1;
+
+ inline$BDLGetDebugLevel$440$Entry#1:
+ goto inline$BDLGetDebugLevel$440$start#1;
+
+ inline$BDLGetDebugLevel$440$start#1:
+ goto inline$BDLGetDebugLevel$440$label_3#1;
+
+ inline$BDLGetDebugLevel$440$label_3#1:
+ havoc inline$BDLGetDebugLevel$440$myNondetVar_0;
+ inline$BDLGetDebugLevel$440$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$440$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$440$label_1#1;
+
+ inline$BDLGetDebugLevel$440$label_1#1:
+ goto inline$BDLGetDebugLevel$440$Return#1;
+
+ inline$BDLGetDebugLevel$440$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$440$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon38_Then#1, inline$BDLSystemPowerIoCompletion$16$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_28_true#1, inline$BDLSystemPowerIoCompletion$16$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_29#1:
+ goto inline$BDLGetDebugLevel$441$Entry#1;
+
+ inline$BDLGetDebugLevel$441$Entry#1:
+ goto inline$BDLGetDebugLevel$441$start#1;
+
+ inline$BDLGetDebugLevel$441$start#1:
+ goto inline$BDLGetDebugLevel$441$label_3#1;
+
+ inline$BDLGetDebugLevel$441$label_3#1:
+ havoc inline$BDLGetDebugLevel$441$myNondetVar_0;
+ inline$BDLGetDebugLevel$441$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$441$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$441$label_1#1;
+
+ inline$BDLGetDebugLevel$441$label_1#1:
+ goto inline$BDLGetDebugLevel$441$Return#1;
+
+ inline$BDLGetDebugLevel$441$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$441$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon39_Then#1, inline$BDLSystemPowerIoCompletion$16$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_38_true#1, inline$BDLSystemPowerIoCompletion$16$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_39_true#1, inline$BDLSystemPowerIoCompletion$16$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$16$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$16$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$16$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$16$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$16$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_106_true#1, inline$BDLSystemPowerIoCompletion$16$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$16$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$16$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$16$myNondetVar_0, inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$16$anon50_Then#1, inline$BDLSystemPowerIoCompletion$16$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_112#1:
+ inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_113_true#1, inline$BDLSystemPowerIoCompletion$16$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$16$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_117#1:
+ goto inline$BDLGetDebugLevel$448$Entry#1;
+
+ inline$BDLGetDebugLevel$448$Entry#1:
+ goto inline$BDLGetDebugLevel$448$start#1;
+
+ inline$BDLGetDebugLevel$448$start#1:
+ goto inline$BDLGetDebugLevel$448$label_3#1;
+
+ inline$BDLGetDebugLevel$448$label_3#1:
+ havoc inline$BDLGetDebugLevel$448$myNondetVar_0;
+ inline$BDLGetDebugLevel$448$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$448$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$448$label_1#1;
+
+ inline$BDLGetDebugLevel$448$label_1#1:
+ goto inline$BDLGetDebugLevel$448$Return#1;
+
+ inline$BDLGetDebugLevel$448$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$448$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon51_Then#1, inline$BDLSystemPowerIoCompletion$16$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_120_true#1, inline$BDLSystemPowerIoCompletion$16$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_121#1:
+ goto inline$BDLGetDebugLevel$449$Entry#1;
+
+ inline$BDLGetDebugLevel$449$Entry#1:
+ goto inline$BDLGetDebugLevel$449$start#1;
+
+ inline$BDLGetDebugLevel$449$start#1:
+ goto inline$BDLGetDebugLevel$449$label_3#1;
+
+ inline$BDLGetDebugLevel$449$label_3#1:
+ havoc inline$BDLGetDebugLevel$449$myNondetVar_0;
+ inline$BDLGetDebugLevel$449$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$449$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$449$label_1#1;
+
+ inline$BDLGetDebugLevel$449$label_1#1:
+ goto inline$BDLGetDebugLevel$449$Return#1;
+
+ inline$BDLGetDebugLevel$449$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$449$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon52_Then#1, inline$BDLSystemPowerIoCompletion$16$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_130_true#1, inline$BDLSystemPowerIoCompletion$16$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_131#1:
+ goto inline$BDLGetDebugLevel$450$Entry#1;
+
+ inline$BDLGetDebugLevel$450$Entry#1:
+ goto inline$BDLGetDebugLevel$450$start#1;
+
+ inline$BDLGetDebugLevel$450$start#1:
+ goto inline$BDLGetDebugLevel$450$label_3#1;
+
+ inline$BDLGetDebugLevel$450$label_3#1:
+ havoc inline$BDLGetDebugLevel$450$myNondetVar_0;
+ inline$BDLGetDebugLevel$450$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$450$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$450$label_1#1;
+
+ inline$BDLGetDebugLevel$450$label_1#1:
+ goto inline$BDLGetDebugLevel$450$Return#1;
+
+ inline$BDLGetDebugLevel$450$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$450$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon53_Then#1, inline$BDLSystemPowerIoCompletion$16$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_140_true#1, inline$BDLSystemPowerIoCompletion$16$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$16$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_115#1:
+ inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$16$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$16$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$16$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_43#1:
+ goto inline$BDLGetDebugLevel$442$Entry#1;
+
+ inline$BDLGetDebugLevel$442$Entry#1:
+ goto inline$BDLGetDebugLevel$442$start#1;
+
+ inline$BDLGetDebugLevel$442$start#1:
+ goto inline$BDLGetDebugLevel$442$label_3#1;
+
+ inline$BDLGetDebugLevel$442$label_3#1:
+ havoc inline$BDLGetDebugLevel$442$myNondetVar_0;
+ inline$BDLGetDebugLevel$442$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$442$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$442$label_1#1;
+
+ inline$BDLGetDebugLevel$442$label_1#1:
+ goto inline$BDLGetDebugLevel$442$Return#1;
+
+ inline$BDLGetDebugLevel$442$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$442$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon40_Then#1, inline$BDLSystemPowerIoCompletion$16$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_46_true#1, inline$BDLSystemPowerIoCompletion$16$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_47#1:
+ goto inline$BDLGetDebugLevel$443$Entry#1;
+
+ inline$BDLGetDebugLevel$443$Entry#1:
+ goto inline$BDLGetDebugLevel$443$start#1;
+
+ inline$BDLGetDebugLevel$443$start#1:
+ goto inline$BDLGetDebugLevel$443$label_3#1;
+
+ inline$BDLGetDebugLevel$443$label_3#1:
+ havoc inline$BDLGetDebugLevel$443$myNondetVar_0;
+ inline$BDLGetDebugLevel$443$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$443$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$443$label_1#1;
+
+ inline$BDLGetDebugLevel$443$label_1#1:
+ goto inline$BDLGetDebugLevel$443$Return#1;
+
+ inline$BDLGetDebugLevel$443$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$443$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon41_Then#1, inline$BDLSystemPowerIoCompletion$16$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_56_true#1, inline$BDLSystemPowerIoCompletion$16$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_57#1:
+ goto inline$BDLGetDebugLevel$444$Entry#1;
+
+ inline$BDLGetDebugLevel$444$Entry#1:
+ goto inline$BDLGetDebugLevel$444$start#1;
+
+ inline$BDLGetDebugLevel$444$start#1:
+ goto inline$BDLGetDebugLevel$444$label_3#1;
+
+ inline$BDLGetDebugLevel$444$label_3#1:
+ havoc inline$BDLGetDebugLevel$444$myNondetVar_0;
+ inline$BDLGetDebugLevel$444$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$444$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$444$label_1#1;
+
+ inline$BDLGetDebugLevel$444$label_1#1:
+ goto inline$BDLGetDebugLevel$444$Return#1;
+
+ inline$BDLGetDebugLevel$444$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$444$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon42_Then#1, inline$BDLSystemPowerIoCompletion$16$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_66_true#1, inline$BDLSystemPowerIoCompletion$16$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$16$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$16$anon43_Then#1, inline$BDLSystemPowerIoCompletion$16$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$16$anon44_Then#1, inline$BDLSystemPowerIoCompletion$16$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_74#1:
+ goto inline$storm_IoCompleteRequest$34$Entry#1;
+
+ inline$storm_IoCompleteRequest$34$Entry#1:
+ inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$16$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$34$start#1;
+
+ inline$storm_IoCompleteRequest$34$start#1:
+ inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$34$label_3#1;
+
+ inline$storm_IoCompleteRequest$34$label_3#1:
+ call inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$34$label_6#1;
+
+ inline$storm_IoCompleteRequest$34$label_6#1:
+ goto inline$storm_IoCompleteRequest$34$label_6_true#1, inline$storm_IoCompleteRequest$34$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$34$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$34$label_7#1;
+
+ inline$storm_IoCompleteRequest$34$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$34$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$34$label_8#1;
+
+ inline$storm_IoCompleteRequest$34$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$34$anon3_Then#1, inline$storm_IoCompleteRequest$34$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$34$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$34$anon1#1;
+
+ inline$storm_IoCompleteRequest$34$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$34$label_9#1;
+
+ inline$storm_IoCompleteRequest$34$label_9#1:
+ goto inline$storm_IoCompleteRequest$34$label_9_true#1, inline$storm_IoCompleteRequest$34$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$34$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$34$label_10#1;
+
+ inline$storm_IoCompleteRequest$34$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$34$label_1#1;
+
+ inline$storm_IoCompleteRequest$34$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$34$label_7#1;
+
+ inline$storm_IoCompleteRequest$34$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$34$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$34$label_1#1;
+
+ inline$storm_IoCompleteRequest$34$label_1#1:
+ goto inline$storm_IoCompleteRequest$34$Return#1;
+
+ inline$storm_IoCompleteRequest$34$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$34$Return#1;
+
+ inline$storm_IoCompleteRequest$34$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon45_Then#1, inline$BDLSystemPowerIoCompletion$16$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$16$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$16$anon46_Then#1, inline$BDLSystemPowerIoCompletion$16$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_80#1:
+ goto inline$BDLGetDebugLevel$445$Entry#1;
+
+ inline$BDLGetDebugLevel$445$Entry#1:
+ goto inline$BDLGetDebugLevel$445$start#1;
+
+ inline$BDLGetDebugLevel$445$start#1:
+ goto inline$BDLGetDebugLevel$445$label_3#1;
+
+ inline$BDLGetDebugLevel$445$label_3#1:
+ havoc inline$BDLGetDebugLevel$445$myNondetVar_0;
+ inline$BDLGetDebugLevel$445$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$445$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$445$label_1#1;
+
+ inline$BDLGetDebugLevel$445$label_1#1:
+ goto inline$BDLGetDebugLevel$445$Return#1;
+
+ inline$BDLGetDebugLevel$445$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$445$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon47_Then#1, inline$BDLSystemPowerIoCompletion$16$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_83_true#1, inline$BDLSystemPowerIoCompletion$16$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_84#1:
+ goto inline$BDLGetDebugLevel$446$Entry#1;
+
+ inline$BDLGetDebugLevel$446$Entry#1:
+ goto inline$BDLGetDebugLevel$446$start#1;
+
+ inline$BDLGetDebugLevel$446$start#1:
+ goto inline$BDLGetDebugLevel$446$label_3#1;
+
+ inline$BDLGetDebugLevel$446$label_3#1:
+ havoc inline$BDLGetDebugLevel$446$myNondetVar_0;
+ inline$BDLGetDebugLevel$446$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$446$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$446$label_1#1;
+
+ inline$BDLGetDebugLevel$446$label_1#1:
+ goto inline$BDLGetDebugLevel$446$Return#1;
+
+ inline$BDLGetDebugLevel$446$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$446$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon48_Then#1, inline$BDLSystemPowerIoCompletion$16$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_93_true#1, inline$BDLSystemPowerIoCompletion$16$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$16$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$16$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_94#1:
+ goto inline$BDLGetDebugLevel$447$Entry#1;
+
+ inline$BDLGetDebugLevel$447$Entry#1:
+ goto inline$BDLGetDebugLevel$447$start#1;
+
+ inline$BDLGetDebugLevel$447$start#1:
+ goto inline$BDLGetDebugLevel$447$label_3#1;
+
+ inline$BDLGetDebugLevel$447$label_3#1:
+ havoc inline$BDLGetDebugLevel$447$myNondetVar_0;
+ inline$BDLGetDebugLevel$447$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$447$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$447$label_1#1;
+
+ inline$BDLGetDebugLevel$447$label_1#1:
+ goto inline$BDLGetDebugLevel$447$Return#1;
+
+ inline$BDLGetDebugLevel$447$Return#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$447$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$16$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$16$anon49_Then#1, inline$BDLSystemPowerIoCompletion$16$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_103_true#1, inline$BDLSystemPowerIoCompletion$16$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$16$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$16$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$16$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_104#1:
+ inline$BDLSystemPowerIoCompletion$16$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$16$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$16$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$16$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$16$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$16$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$16$Return#1:
+ inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$16$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$16$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$16$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$16$anon14_Then#1, inline$CallCompletionRoutine$16$anon14_Else#1;
+
+ inline$CallCompletionRoutine$16$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$16$anon9#1;
+
+ inline$CallCompletionRoutine$16$anon9#1:
+ goto inline$CallCompletionRoutine$16$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$16$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$16$Return#1;
+
+ inline$CallCompletionRoutine$16$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$16$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$16$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$16$Entry#1:
+ inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$16$start#1;
+
+ inline$BDLDevicePowerIoCompletion$16$start#1:
+ call inline$BDLDevicePowerIoCompletion$16$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$16$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_4#1:
+ inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_6#1:
+ inline$BDLDevicePowerIoCompletion$16$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$16$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$16$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$86$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$86$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$start#1:
+ inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$86$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$86$label_3_true#1, inline$IoGetCurrentIrpStackLocation$86$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$86$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$86$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$86$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$86$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$86$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$86$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$86$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$86$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$86$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$86$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$86$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$86$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$86$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$86$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$86$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$86$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$86$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$86$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$86$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$86$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$86$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$86$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$86$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon30_Then#1, inline$BDLDevicePowerIoCompletion$16$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_13#1:
+ inline$BDLDevicePowerIoCompletion$16$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_17#1:
+ goto inline$BDLGetDebugLevel$430$Entry#1;
+
+ inline$BDLGetDebugLevel$430$Entry#1:
+ goto inline$BDLGetDebugLevel$430$start#1;
+
+ inline$BDLGetDebugLevel$430$start#1:
+ goto inline$BDLGetDebugLevel$430$label_3#1;
+
+ inline$BDLGetDebugLevel$430$label_3#1:
+ havoc inline$BDLGetDebugLevel$430$myNondetVar_0;
+ inline$BDLGetDebugLevel$430$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$430$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$430$label_1#1;
+
+ inline$BDLGetDebugLevel$430$label_1#1:
+ goto inline$BDLGetDebugLevel$430$Return#1;
+
+ inline$BDLGetDebugLevel$430$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$430$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon31_Then#1, inline$BDLDevicePowerIoCompletion$16$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_20_true#1, inline$BDLDevicePowerIoCompletion$16$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_21#1:
+ goto inline$BDLGetDebugLevel$431$Entry#1;
+
+ inline$BDLGetDebugLevel$431$Entry#1:
+ goto inline$BDLGetDebugLevel$431$start#1;
+
+ inline$BDLGetDebugLevel$431$start#1:
+ goto inline$BDLGetDebugLevel$431$label_3#1;
+
+ inline$BDLGetDebugLevel$431$label_3#1:
+ havoc inline$BDLGetDebugLevel$431$myNondetVar_0;
+ inline$BDLGetDebugLevel$431$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$431$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$431$label_1#1;
+
+ inline$BDLGetDebugLevel$431$label_1#1:
+ goto inline$BDLGetDebugLevel$431$Return#1;
+
+ inline$BDLGetDebugLevel$431$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$431$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon32_Then#1, inline$BDLDevicePowerIoCompletion$16$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_30_true#1, inline$BDLDevicePowerIoCompletion$16$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_31#1:
+ goto inline$BDLGetDebugLevel$432$Entry#1;
+
+ inline$BDLGetDebugLevel$432$Entry#1:
+ goto inline$BDLGetDebugLevel$432$start#1;
+
+ inline$BDLGetDebugLevel$432$start#1:
+ goto inline$BDLGetDebugLevel$432$label_3#1;
+
+ inline$BDLGetDebugLevel$432$label_3#1:
+ havoc inline$BDLGetDebugLevel$432$myNondetVar_0;
+ inline$BDLGetDebugLevel$432$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$432$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$432$label_1#1;
+
+ inline$BDLGetDebugLevel$432$label_1#1:
+ goto inline$BDLGetDebugLevel$432$Return#1;
+
+ inline$BDLGetDebugLevel$432$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$432$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon33_Then#1, inline$BDLDevicePowerIoCompletion$16$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_40_true#1, inline$BDLDevicePowerIoCompletion$16$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_41_true#1, inline$BDLDevicePowerIoCompletion$16$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$16$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$16$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_44_true#1, inline$BDLDevicePowerIoCompletion$16$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_45_true#1, inline$BDLDevicePowerIoCompletion$16$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$16$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$16$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$16$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_54#1:
+ inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$16$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_55_true#1, inline$BDLDevicePowerIoCompletion$16$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$16$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$16$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$16$anon34_Then#1, inline$BDLDevicePowerIoCompletion$16$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_59#1:
+ goto inline$BDLGetDebugLevel$433$Entry#1;
+
+ inline$BDLGetDebugLevel$433$Entry#1:
+ goto inline$BDLGetDebugLevel$433$start#1;
+
+ inline$BDLGetDebugLevel$433$start#1:
+ goto inline$BDLGetDebugLevel$433$label_3#1;
+
+ inline$BDLGetDebugLevel$433$label_3#1:
+ havoc inline$BDLGetDebugLevel$433$myNondetVar_0;
+ inline$BDLGetDebugLevel$433$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$433$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$433$label_1#1;
+
+ inline$BDLGetDebugLevel$433$label_1#1:
+ goto inline$BDLGetDebugLevel$433$Return#1;
+
+ inline$BDLGetDebugLevel$433$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$433$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon35_Then#1, inline$BDLDevicePowerIoCompletion$16$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_62_true#1, inline$BDLDevicePowerIoCompletion$16$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_63#1:
+ goto inline$BDLGetDebugLevel$434$Entry#1;
+
+ inline$BDLGetDebugLevel$434$Entry#1:
+ goto inline$BDLGetDebugLevel$434$start#1;
+
+ inline$BDLGetDebugLevel$434$start#1:
+ goto inline$BDLGetDebugLevel$434$label_3#1;
+
+ inline$BDLGetDebugLevel$434$label_3#1:
+ havoc inline$BDLGetDebugLevel$434$myNondetVar_0;
+ inline$BDLGetDebugLevel$434$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$434$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$434$label_1#1;
+
+ inline$BDLGetDebugLevel$434$label_1#1:
+ goto inline$BDLGetDebugLevel$434$Return#1;
+
+ inline$BDLGetDebugLevel$434$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$434$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon36_Then#1, inline$BDLDevicePowerIoCompletion$16$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_72_true#1, inline$BDLDevicePowerIoCompletion$16$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_73#1:
+ goto inline$BDLGetDebugLevel$435$Entry#1;
+
+ inline$BDLGetDebugLevel$435$Entry#1:
+ goto inline$BDLGetDebugLevel$435$start#1;
+
+ inline$BDLGetDebugLevel$435$start#1:
+ goto inline$BDLGetDebugLevel$435$label_3#1;
+
+ inline$BDLGetDebugLevel$435$label_3#1:
+ havoc inline$BDLGetDebugLevel$435$myNondetVar_0;
+ inline$BDLGetDebugLevel$435$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$435$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$435$label_1#1;
+
+ inline$BDLGetDebugLevel$435$label_1#1:
+ goto inline$BDLGetDebugLevel$435$Return#1;
+
+ inline$BDLGetDebugLevel$435$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$435$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon37_Then#1, inline$BDLDevicePowerIoCompletion$16$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_82_true#1, inline$BDLDevicePowerIoCompletion$16$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$16$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$16$anon38_Then#1, inline$BDLDevicePowerIoCompletion$16$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$16$anon39_Then#1, inline$BDLDevicePowerIoCompletion$16$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_92#1:
+ goto inline$storm_IoCompleteRequest$33$Entry#1;
+
+ inline$storm_IoCompleteRequest$33$Entry#1:
+ inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$16$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$33$start#1;
+
+ inline$storm_IoCompleteRequest$33$start#1:
+ inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$33$label_3#1;
+
+ inline$storm_IoCompleteRequest$33$label_3#1:
+ call inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$33$label_6#1;
+
+ inline$storm_IoCompleteRequest$33$label_6#1:
+ goto inline$storm_IoCompleteRequest$33$label_6_true#1, inline$storm_IoCompleteRequest$33$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$33$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$33$label_7#1;
+
+ inline$storm_IoCompleteRequest$33$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$33$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$33$label_8#1;
+
+ inline$storm_IoCompleteRequest$33$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$33$anon3_Then#1, inline$storm_IoCompleteRequest$33$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$33$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$33$anon1#1;
+
+ inline$storm_IoCompleteRequest$33$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$33$label_9#1;
+
+ inline$storm_IoCompleteRequest$33$label_9#1:
+ goto inline$storm_IoCompleteRequest$33$label_9_true#1, inline$storm_IoCompleteRequest$33$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$33$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$33$label_10#1;
+
+ inline$storm_IoCompleteRequest$33$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$33$label_1#1;
+
+ inline$storm_IoCompleteRequest$33$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$33$label_7#1;
+
+ inline$storm_IoCompleteRequest$33$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$33$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$33$label_1#1;
+
+ inline$storm_IoCompleteRequest$33$label_1#1:
+ goto inline$storm_IoCompleteRequest$33$Return#1;
+
+ inline$storm_IoCompleteRequest$33$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$33$Return#1;
+
+ inline$storm_IoCompleteRequest$33$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon40_Then#1, inline$BDLDevicePowerIoCompletion$16$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$16$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$16$anon41_Then#1, inline$BDLDevicePowerIoCompletion$16$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_98#1:
+ goto inline$BDLGetDebugLevel$436$Entry#1;
+
+ inline$BDLGetDebugLevel$436$Entry#1:
+ goto inline$BDLGetDebugLevel$436$start#1;
+
+ inline$BDLGetDebugLevel$436$start#1:
+ goto inline$BDLGetDebugLevel$436$label_3#1;
+
+ inline$BDLGetDebugLevel$436$label_3#1:
+ havoc inline$BDLGetDebugLevel$436$myNondetVar_0;
+ inline$BDLGetDebugLevel$436$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$436$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$436$label_1#1;
+
+ inline$BDLGetDebugLevel$436$label_1#1:
+ goto inline$BDLGetDebugLevel$436$Return#1;
+
+ inline$BDLGetDebugLevel$436$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$436$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon42_Then#1, inline$BDLDevicePowerIoCompletion$16$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_101_true#1, inline$BDLDevicePowerIoCompletion$16$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_102#1:
+ goto inline$BDLGetDebugLevel$437$Entry#1;
+
+ inline$BDLGetDebugLevel$437$Entry#1:
+ goto inline$BDLGetDebugLevel$437$start#1;
+
+ inline$BDLGetDebugLevel$437$start#1:
+ goto inline$BDLGetDebugLevel$437$label_3#1;
+
+ inline$BDLGetDebugLevel$437$label_3#1:
+ havoc inline$BDLGetDebugLevel$437$myNondetVar_0;
+ inline$BDLGetDebugLevel$437$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$437$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$437$label_1#1;
+
+ inline$BDLGetDebugLevel$437$label_1#1:
+ goto inline$BDLGetDebugLevel$437$Return#1;
+
+ inline$BDLGetDebugLevel$437$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$437$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon43_Then#1, inline$BDLDevicePowerIoCompletion$16$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_111_true#1, inline$BDLDevicePowerIoCompletion$16$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$16$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$16$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_112#1:
+ goto inline$BDLGetDebugLevel$438$Entry#1;
+
+ inline$BDLGetDebugLevel$438$Entry#1:
+ goto inline$BDLGetDebugLevel$438$start#1;
+
+ inline$BDLGetDebugLevel$438$start#1:
+ goto inline$BDLGetDebugLevel$438$label_3#1;
+
+ inline$BDLGetDebugLevel$438$label_3#1:
+ havoc inline$BDLGetDebugLevel$438$myNondetVar_0;
+ inline$BDLGetDebugLevel$438$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$438$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$438$label_1#1;
+
+ inline$BDLGetDebugLevel$438$label_1#1:
+ goto inline$BDLGetDebugLevel$438$Return#1;
+
+ inline$BDLGetDebugLevel$438$Return#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$438$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$16$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$16$anon44_Then#1, inline$BDLDevicePowerIoCompletion$16$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_121_true#1, inline$BDLDevicePowerIoCompletion$16$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$16$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$16$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$16$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_122#1:
+ inline$BDLDevicePowerIoCompletion$16$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$16$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$16$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$16$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$16$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$16$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$16$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$16$Return#1:
+ inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$16$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$16$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$16$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$16$anon13_Then#1, inline$CallCompletionRoutine$16$anon13_Else#1;
+
+ inline$CallCompletionRoutine$16$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$16$anon7#1;
+
+ inline$CallCompletionRoutine$16$anon7#1:
+ goto inline$CallCompletionRoutine$16$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$16$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$16$Return#1;
+
+ inline$CallCompletionRoutine$16$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$16$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$16$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$16$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$16$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$16$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$start#1:
+ inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$16$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$16$label_3_true#1, inline$BDLCallDriverCompletionRoutine$16$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$16$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$16$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$16$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$16$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$16$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_6#1:
+ goto inline$storm_KeSetEvent$18$Entry#1;
+
+ inline$storm_KeSetEvent$18$Entry#1:
+ inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$16$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$18$start#1;
+
+ inline$storm_KeSetEvent$18$start#1:
+ inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$18$label_3#1;
+
+ inline$storm_KeSetEvent$18$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$18$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$18$label_1#1;
+
+ inline$storm_KeSetEvent$18$label_1#1:
+ goto inline$storm_KeSetEvent$18$Return#1;
+
+ inline$storm_KeSetEvent$18$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$16$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$16$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$16$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$16$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$16$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$16$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$16$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$16$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$16$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$16$Return#1:
+ inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$16$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$16$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$16$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$16$anon12_Then#1, inline$CallCompletionRoutine$16$anon12_Else#1;
+
+ inline$CallCompletionRoutine$16$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$16$anon5#1;
+
+ inline$CallCompletionRoutine$16$anon5#1:
+ goto inline$CallCompletionRoutine$16$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$16$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$16$label_23#1;
+
+ inline$CallCompletionRoutine$16$label_23#1:
+ inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$16$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$16$label_24#1;
+
+ inline$CallCompletionRoutine$16$label_24#1:
+ goto inline$CallCompletionRoutine$16$label_24_true#1, inline$CallCompletionRoutine$16$label_24_false#1;
+
+ inline$CallCompletionRoutine$16$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$16$label_1#1;
+
+ inline$CallCompletionRoutine$16$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$16$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$16$label_25#1;
+
+ inline$CallCompletionRoutine$16$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$16$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$16$label_1#1;
+
+ inline$CallCompletionRoutine$16$label_1#1:
+ goto inline$CallCompletionRoutine$16$Return#1;
+
+ inline$CallCompletionRoutine$16$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$16$Return#1;
+
+ inline$CallCompletionRoutine$16$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$16$Return#1;
+
+ inline$CallCompletionRoutine$16$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$16$Return#1;
+
+ inline$CallCompletionRoutine$16$Return#1:
+ goto inline$storm_IoCallDriver$8$label_33$1#1;
+
+ inline$storm_IoCallDriver$8$label_33$1#1:
+ goto inline$storm_IoCallDriver$8$anon14_Then#1, inline$storm_IoCallDriver$8$anon14_Else#1;
+
+ inline$storm_IoCallDriver$8$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$8$anon8#1;
+
+ inline$storm_IoCallDriver$8$anon8#1:
+ goto inline$storm_IoCallDriver$8$label_36#1;
+
+ inline$storm_IoCallDriver$8$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$8$Return#1;
+
+ inline$storm_IoCallDriver$8$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$8$label_29#1;
+
+ inline$storm_IoCallDriver$8$label_29#1:
+ inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$8$label_37#1;
+
+ inline$storm_IoCallDriver$8$label_37#1:
+ goto inline$storm_IoCallDriver$8$label_38#1;
+
+ inline$storm_IoCallDriver$8$label_38#1:
+ goto inline$storm_IoCallDriver$8$label_39#1;
+
+ inline$storm_IoCallDriver$8$label_39#1:
+ goto inline$CallCompletionRoutine$17$Entry#1;
+
+ inline$CallCompletionRoutine$17$Entry#1:
+ inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$17$start#1;
+
+ inline$CallCompletionRoutine$17$start#1:
+ inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$17$label_3#1;
+
+ inline$CallCompletionRoutine$17$label_3#1:
+ goto inline$CallCompletionRoutine$17$label_4#1;
+
+ inline$CallCompletionRoutine$17$label_4#1:
+ goto inline$CallCompletionRoutine$17$label_5#1;
+
+ inline$CallCompletionRoutine$17$label_5#1:
+ goto inline$CallCompletionRoutine$17$label_6#1;
+
+ inline$CallCompletionRoutine$17$label_6#1:
+ goto inline$CallCompletionRoutine$17$label_7#1;
+
+ inline$CallCompletionRoutine$17$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$88$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$88$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$start#1:
+ inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$88$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$88$label_3_true#1, inline$IoGetCurrentIrpStackLocation$88$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$88$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$88$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$88$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$88$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$88$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$88$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$88$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$88$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$88$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$88$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$88$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$88$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$88$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$88$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$88$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$88$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$88$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$88$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$88$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$88$Return#1:
+ goto inline$CallCompletionRoutine$17$label_7$1#1;
+
+ inline$CallCompletionRoutine$17$label_7$1#1:
+ goto inline$CallCompletionRoutine$17$anon10_Then#1, inline$CallCompletionRoutine$17$anon10_Else#1;
+
+ inline$CallCompletionRoutine$17$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$17$anon1#1;
+
+ inline$CallCompletionRoutine$17$anon1#1:
+ goto inline$CallCompletionRoutine$17$label_10#1;
+
+ inline$CallCompletionRoutine$17$label_10#1:
+ goto inline$CallCompletionRoutine$17$label_11#1;
+
+ inline$CallCompletionRoutine$17$label_11#1:
+ havoc inline$CallCompletionRoutine$17$myNondetVar_0;
+ inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$myNondetVar_0;
+ goto inline$CallCompletionRoutine$17$label_12#1;
+
+ inline$CallCompletionRoutine$17$label_12#1:
+ havoc inline$CallCompletionRoutine$17$myNondetVar_0;
+ inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$myNondetVar_0;
+ goto inline$CallCompletionRoutine$17$label_13#1;
+
+ inline$CallCompletionRoutine$17$label_13#1:
+ havoc inline$CallCompletionRoutine$17$myNondetVar_0;
+ goto inline$CallCompletionRoutine$17$label_14#1;
+
+ inline$CallCompletionRoutine$17$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$89$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$89$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$start#1:
+ inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$89$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$89$label_3_true#1, inline$IoGetCurrentIrpStackLocation$89$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$89$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$89$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$89$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$89$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$89$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$89$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$89$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$89$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$89$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$89$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$89$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$89$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$89$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$89$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$89$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$89$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$89$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$89$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$89$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$89$Return#1:
+ goto inline$CallCompletionRoutine$17$label_14$1#1;
+
+ inline$CallCompletionRoutine$17$label_14$1#1:
+ goto inline$CallCompletionRoutine$17$anon11_Then#1, inline$CallCompletionRoutine$17$anon11_Else#1;
+
+ inline$CallCompletionRoutine$17$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$17$anon3#1;
+
+ inline$CallCompletionRoutine$17$anon3#1:
+ goto inline$CallCompletionRoutine$17$label_17#1;
+
+ inline$CallCompletionRoutine$17$label_17#1:
+ goto inline$CallCompletionRoutine$17$label_18#1;
+
+ inline$CallCompletionRoutine$17$label_18#1:
+ goto inline$CallCompletionRoutine$17$label_18_true#1, inline$CallCompletionRoutine$17$label_18_false#1;
+
+ inline$CallCompletionRoutine$17$label_18_false#1:
+ assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$17$label_1#1;
+
+ inline$CallCompletionRoutine$17$label_18_true#1:
+ assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$17$label_19#1;
+
+ inline$CallCompletionRoutine$17$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$17$label_20#1;
+
+ inline$CallCompletionRoutine$17$label_20#1:
+ goto inline$CallCompletionRoutine$17$label_20_icall_1#1, inline$CallCompletionRoutine$17$label_20_icall_2#1, inline$CallCompletionRoutine$17$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$17$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$17$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$17$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$17$Entry#1:
+ inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$17$start#1;
+
+ inline$BDLSystemPowerIoCompletion$17$start#1:
+ call inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$17$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_4#1:
+ inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_6#1:
+ inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$17$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$17$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$91$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$91$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$start#1:
+ inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$91$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$91$label_3_true#1, inline$IoGetCurrentIrpStackLocation$91$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$91$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$91$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$91$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$91$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$91$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$91$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$91$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$91$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$91$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$91$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$91$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$91$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$91$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$91$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$91$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$91$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$91$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$91$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$91$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$91$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon36_Then#1, inline$BDLSystemPowerIoCompletion$17$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_15#1:
+ goto inline$BDLGetDebugLevel$460$Entry#1;
+
+ inline$BDLGetDebugLevel$460$Entry#1:
+ goto inline$BDLGetDebugLevel$460$start#1;
+
+ inline$BDLGetDebugLevel$460$start#1:
+ goto inline$BDLGetDebugLevel$460$label_3#1;
+
+ inline$BDLGetDebugLevel$460$label_3#1:
+ havoc inline$BDLGetDebugLevel$460$myNondetVar_0;
+ inline$BDLGetDebugLevel$460$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$460$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$460$label_1#1;
+
+ inline$BDLGetDebugLevel$460$label_1#1:
+ goto inline$BDLGetDebugLevel$460$Return#1;
+
+ inline$BDLGetDebugLevel$460$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$460$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon37_Then#1, inline$BDLSystemPowerIoCompletion$17$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_18_true#1, inline$BDLSystemPowerIoCompletion$17$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_19#1:
+ goto inline$BDLGetDebugLevel$461$Entry#1;
+
+ inline$BDLGetDebugLevel$461$Entry#1:
+ goto inline$BDLGetDebugLevel$461$start#1;
+
+ inline$BDLGetDebugLevel$461$start#1:
+ goto inline$BDLGetDebugLevel$461$label_3#1;
+
+ inline$BDLGetDebugLevel$461$label_3#1:
+ havoc inline$BDLGetDebugLevel$461$myNondetVar_0;
+ inline$BDLGetDebugLevel$461$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$461$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$461$label_1#1;
+
+ inline$BDLGetDebugLevel$461$label_1#1:
+ goto inline$BDLGetDebugLevel$461$Return#1;
+
+ inline$BDLGetDebugLevel$461$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$461$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon38_Then#1, inline$BDLSystemPowerIoCompletion$17$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_28_true#1, inline$BDLSystemPowerIoCompletion$17$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_29#1:
+ goto inline$BDLGetDebugLevel$462$Entry#1;
+
+ inline$BDLGetDebugLevel$462$Entry#1:
+ goto inline$BDLGetDebugLevel$462$start#1;
+
+ inline$BDLGetDebugLevel$462$start#1:
+ goto inline$BDLGetDebugLevel$462$label_3#1;
+
+ inline$BDLGetDebugLevel$462$label_3#1:
+ havoc inline$BDLGetDebugLevel$462$myNondetVar_0;
+ inline$BDLGetDebugLevel$462$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$462$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$462$label_1#1;
+
+ inline$BDLGetDebugLevel$462$label_1#1:
+ goto inline$BDLGetDebugLevel$462$Return#1;
+
+ inline$BDLGetDebugLevel$462$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$462$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon39_Then#1, inline$BDLSystemPowerIoCompletion$17$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_38_true#1, inline$BDLSystemPowerIoCompletion$17$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_39_true#1, inline$BDLSystemPowerIoCompletion$17$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$17$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$17$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$17$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$17$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$17$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_106_true#1, inline$BDLSystemPowerIoCompletion$17$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$17$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$17$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$17$myNondetVar_0, inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$17$anon50_Then#1, inline$BDLSystemPowerIoCompletion$17$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_112#1:
+ inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_113_true#1, inline$BDLSystemPowerIoCompletion$17$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$17$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_117#1:
+ goto inline$BDLGetDebugLevel$469$Entry#1;
+
+ inline$BDLGetDebugLevel$469$Entry#1:
+ goto inline$BDLGetDebugLevel$469$start#1;
+
+ inline$BDLGetDebugLevel$469$start#1:
+ goto inline$BDLGetDebugLevel$469$label_3#1;
+
+ inline$BDLGetDebugLevel$469$label_3#1:
+ havoc inline$BDLGetDebugLevel$469$myNondetVar_0;
+ inline$BDLGetDebugLevel$469$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$469$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$469$label_1#1;
+
+ inline$BDLGetDebugLevel$469$label_1#1:
+ goto inline$BDLGetDebugLevel$469$Return#1;
+
+ inline$BDLGetDebugLevel$469$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$469$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon51_Then#1, inline$BDLSystemPowerIoCompletion$17$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_120_true#1, inline$BDLSystemPowerIoCompletion$17$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_121#1:
+ goto inline$BDLGetDebugLevel$470$Entry#1;
+
+ inline$BDLGetDebugLevel$470$Entry#1:
+ goto inline$BDLGetDebugLevel$470$start#1;
+
+ inline$BDLGetDebugLevel$470$start#1:
+ goto inline$BDLGetDebugLevel$470$label_3#1;
+
+ inline$BDLGetDebugLevel$470$label_3#1:
+ havoc inline$BDLGetDebugLevel$470$myNondetVar_0;
+ inline$BDLGetDebugLevel$470$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$470$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$470$label_1#1;
+
+ inline$BDLGetDebugLevel$470$label_1#1:
+ goto inline$BDLGetDebugLevel$470$Return#1;
+
+ inline$BDLGetDebugLevel$470$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$470$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon52_Then#1, inline$BDLSystemPowerIoCompletion$17$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_130_true#1, inline$BDLSystemPowerIoCompletion$17$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_131#1:
+ goto inline$BDLGetDebugLevel$471$Entry#1;
+
+ inline$BDLGetDebugLevel$471$Entry#1:
+ goto inline$BDLGetDebugLevel$471$start#1;
+
+ inline$BDLGetDebugLevel$471$start#1:
+ goto inline$BDLGetDebugLevel$471$label_3#1;
+
+ inline$BDLGetDebugLevel$471$label_3#1:
+ havoc inline$BDLGetDebugLevel$471$myNondetVar_0;
+ inline$BDLGetDebugLevel$471$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$471$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$471$label_1#1;
+
+ inline$BDLGetDebugLevel$471$label_1#1:
+ goto inline$BDLGetDebugLevel$471$Return#1;
+
+ inline$BDLGetDebugLevel$471$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$471$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon53_Then#1, inline$BDLSystemPowerIoCompletion$17$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_140_true#1, inline$BDLSystemPowerIoCompletion$17$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$17$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_115#1:
+ inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$17$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$17$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$17$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_43#1:
+ goto inline$BDLGetDebugLevel$463$Entry#1;
+
+ inline$BDLGetDebugLevel$463$Entry#1:
+ goto inline$BDLGetDebugLevel$463$start#1;
+
+ inline$BDLGetDebugLevel$463$start#1:
+ goto inline$BDLGetDebugLevel$463$label_3#1;
+
+ inline$BDLGetDebugLevel$463$label_3#1:
+ havoc inline$BDLGetDebugLevel$463$myNondetVar_0;
+ inline$BDLGetDebugLevel$463$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$463$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$463$label_1#1;
+
+ inline$BDLGetDebugLevel$463$label_1#1:
+ goto inline$BDLGetDebugLevel$463$Return#1;
+
+ inline$BDLGetDebugLevel$463$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$463$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon40_Then#1, inline$BDLSystemPowerIoCompletion$17$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_46_true#1, inline$BDLSystemPowerIoCompletion$17$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_47#1:
+ goto inline$BDLGetDebugLevel$464$Entry#1;
+
+ inline$BDLGetDebugLevel$464$Entry#1:
+ goto inline$BDLGetDebugLevel$464$start#1;
+
+ inline$BDLGetDebugLevel$464$start#1:
+ goto inline$BDLGetDebugLevel$464$label_3#1;
+
+ inline$BDLGetDebugLevel$464$label_3#1:
+ havoc inline$BDLGetDebugLevel$464$myNondetVar_0;
+ inline$BDLGetDebugLevel$464$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$464$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$464$label_1#1;
+
+ inline$BDLGetDebugLevel$464$label_1#1:
+ goto inline$BDLGetDebugLevel$464$Return#1;
+
+ inline$BDLGetDebugLevel$464$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$464$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon41_Then#1, inline$BDLSystemPowerIoCompletion$17$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_56_true#1, inline$BDLSystemPowerIoCompletion$17$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_57#1:
+ goto inline$BDLGetDebugLevel$465$Entry#1;
+
+ inline$BDLGetDebugLevel$465$Entry#1:
+ goto inline$BDLGetDebugLevel$465$start#1;
+
+ inline$BDLGetDebugLevel$465$start#1:
+ goto inline$BDLGetDebugLevel$465$label_3#1;
+
+ inline$BDLGetDebugLevel$465$label_3#1:
+ havoc inline$BDLGetDebugLevel$465$myNondetVar_0;
+ inline$BDLGetDebugLevel$465$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$465$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$465$label_1#1;
+
+ inline$BDLGetDebugLevel$465$label_1#1:
+ goto inline$BDLGetDebugLevel$465$Return#1;
+
+ inline$BDLGetDebugLevel$465$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$465$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon42_Then#1, inline$BDLSystemPowerIoCompletion$17$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_66_true#1, inline$BDLSystemPowerIoCompletion$17$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$17$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$17$anon43_Then#1, inline$BDLSystemPowerIoCompletion$17$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$17$anon44_Then#1, inline$BDLSystemPowerIoCompletion$17$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_74#1:
+ goto inline$storm_IoCompleteRequest$36$Entry#1;
+
+ inline$storm_IoCompleteRequest$36$Entry#1:
+ inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$17$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$36$start#1;
+
+ inline$storm_IoCompleteRequest$36$start#1:
+ inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$36$label_3#1;
+
+ inline$storm_IoCompleteRequest$36$label_3#1:
+ call inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$36$label_6#1;
+
+ inline$storm_IoCompleteRequest$36$label_6#1:
+ goto inline$storm_IoCompleteRequest$36$label_6_true#1, inline$storm_IoCompleteRequest$36$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$36$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$36$label_7#1;
+
+ inline$storm_IoCompleteRequest$36$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$36$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$36$label_8#1;
+
+ inline$storm_IoCompleteRequest$36$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$36$anon3_Then#1, inline$storm_IoCompleteRequest$36$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$36$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$36$anon1#1;
+
+ inline$storm_IoCompleteRequest$36$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$36$label_9#1;
+
+ inline$storm_IoCompleteRequest$36$label_9#1:
+ goto inline$storm_IoCompleteRequest$36$label_9_true#1, inline$storm_IoCompleteRequest$36$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$36$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$36$label_10#1;
+
+ inline$storm_IoCompleteRequest$36$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$36$label_1#1;
+
+ inline$storm_IoCompleteRequest$36$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$36$label_7#1;
+
+ inline$storm_IoCompleteRequest$36$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$36$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$36$label_1#1;
+
+ inline$storm_IoCompleteRequest$36$label_1#1:
+ goto inline$storm_IoCompleteRequest$36$Return#1;
+
+ inline$storm_IoCompleteRequest$36$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$36$Return#1;
+
+ inline$storm_IoCompleteRequest$36$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon45_Then#1, inline$BDLSystemPowerIoCompletion$17$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$17$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$17$anon46_Then#1, inline$BDLSystemPowerIoCompletion$17$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_80#1:
+ goto inline$BDLGetDebugLevel$466$Entry#1;
+
+ inline$BDLGetDebugLevel$466$Entry#1:
+ goto inline$BDLGetDebugLevel$466$start#1;
+
+ inline$BDLGetDebugLevel$466$start#1:
+ goto inline$BDLGetDebugLevel$466$label_3#1;
+
+ inline$BDLGetDebugLevel$466$label_3#1:
+ havoc inline$BDLGetDebugLevel$466$myNondetVar_0;
+ inline$BDLGetDebugLevel$466$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$466$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$466$label_1#1;
+
+ inline$BDLGetDebugLevel$466$label_1#1:
+ goto inline$BDLGetDebugLevel$466$Return#1;
+
+ inline$BDLGetDebugLevel$466$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$466$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon47_Then#1, inline$BDLSystemPowerIoCompletion$17$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_83_true#1, inline$BDLSystemPowerIoCompletion$17$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_84#1:
+ goto inline$BDLGetDebugLevel$467$Entry#1;
+
+ inline$BDLGetDebugLevel$467$Entry#1:
+ goto inline$BDLGetDebugLevel$467$start#1;
+
+ inline$BDLGetDebugLevel$467$start#1:
+ goto inline$BDLGetDebugLevel$467$label_3#1;
+
+ inline$BDLGetDebugLevel$467$label_3#1:
+ havoc inline$BDLGetDebugLevel$467$myNondetVar_0;
+ inline$BDLGetDebugLevel$467$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$467$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$467$label_1#1;
+
+ inline$BDLGetDebugLevel$467$label_1#1:
+ goto inline$BDLGetDebugLevel$467$Return#1;
+
+ inline$BDLGetDebugLevel$467$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$467$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon48_Then#1, inline$BDLSystemPowerIoCompletion$17$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_93_true#1, inline$BDLSystemPowerIoCompletion$17$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$17$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$17$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_94#1:
+ goto inline$BDLGetDebugLevel$468$Entry#1;
+
+ inline$BDLGetDebugLevel$468$Entry#1:
+ goto inline$BDLGetDebugLevel$468$start#1;
+
+ inline$BDLGetDebugLevel$468$start#1:
+ goto inline$BDLGetDebugLevel$468$label_3#1;
+
+ inline$BDLGetDebugLevel$468$label_3#1:
+ havoc inline$BDLGetDebugLevel$468$myNondetVar_0;
+ inline$BDLGetDebugLevel$468$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$468$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$468$label_1#1;
+
+ inline$BDLGetDebugLevel$468$label_1#1:
+ goto inline$BDLGetDebugLevel$468$Return#1;
+
+ inline$BDLGetDebugLevel$468$Return#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$468$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$17$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$17$anon49_Then#1, inline$BDLSystemPowerIoCompletion$17$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_103_true#1, inline$BDLSystemPowerIoCompletion$17$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$17$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$17$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$17$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_104#1:
+ inline$BDLSystemPowerIoCompletion$17$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$17$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$17$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$17$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$17$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$17$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$17$Return#1:
+ inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$17$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$17$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$17$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$17$anon14_Then#1, inline$CallCompletionRoutine$17$anon14_Else#1;
+
+ inline$CallCompletionRoutine$17$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$17$anon9#1;
+
+ inline$CallCompletionRoutine$17$anon9#1:
+ goto inline$CallCompletionRoutine$17$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$17$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$17$Return#1;
+
+ inline$CallCompletionRoutine$17$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$17$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$17$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$17$Entry#1:
+ inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$17$start#1;
+
+ inline$BDLDevicePowerIoCompletion$17$start#1:
+ call inline$BDLDevicePowerIoCompletion$17$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$17$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_4#1:
+ inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_6#1:
+ inline$BDLDevicePowerIoCompletion$17$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$17$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$17$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$90$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$90$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$start#1:
+ inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$90$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$90$label_3_true#1, inline$IoGetCurrentIrpStackLocation$90$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$90$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$90$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$90$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$90$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$90$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$90$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$90$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$90$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$90$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$90$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$90$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$90$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$90$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$90$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$90$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$90$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$90$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$90$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$90$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$90$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$90$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$90$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$90$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon30_Then#1, inline$BDLDevicePowerIoCompletion$17$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_13#1:
+ inline$BDLDevicePowerIoCompletion$17$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_17#1:
+ goto inline$BDLGetDebugLevel$451$Entry#1;
+
+ inline$BDLGetDebugLevel$451$Entry#1:
+ goto inline$BDLGetDebugLevel$451$start#1;
+
+ inline$BDLGetDebugLevel$451$start#1:
+ goto inline$BDLGetDebugLevel$451$label_3#1;
+
+ inline$BDLGetDebugLevel$451$label_3#1:
+ havoc inline$BDLGetDebugLevel$451$myNondetVar_0;
+ inline$BDLGetDebugLevel$451$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$451$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$451$label_1#1;
+
+ inline$BDLGetDebugLevel$451$label_1#1:
+ goto inline$BDLGetDebugLevel$451$Return#1;
+
+ inline$BDLGetDebugLevel$451$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$451$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon31_Then#1, inline$BDLDevicePowerIoCompletion$17$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_20_true#1, inline$BDLDevicePowerIoCompletion$17$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_21#1:
+ goto inline$BDLGetDebugLevel$452$Entry#1;
+
+ inline$BDLGetDebugLevel$452$Entry#1:
+ goto inline$BDLGetDebugLevel$452$start#1;
+
+ inline$BDLGetDebugLevel$452$start#1:
+ goto inline$BDLGetDebugLevel$452$label_3#1;
+
+ inline$BDLGetDebugLevel$452$label_3#1:
+ havoc inline$BDLGetDebugLevel$452$myNondetVar_0;
+ inline$BDLGetDebugLevel$452$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$452$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$452$label_1#1;
+
+ inline$BDLGetDebugLevel$452$label_1#1:
+ goto inline$BDLGetDebugLevel$452$Return#1;
+
+ inline$BDLGetDebugLevel$452$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$452$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon32_Then#1, inline$BDLDevicePowerIoCompletion$17$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_30_true#1, inline$BDLDevicePowerIoCompletion$17$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_31#1:
+ goto inline$BDLGetDebugLevel$453$Entry#1;
+
+ inline$BDLGetDebugLevel$453$Entry#1:
+ goto inline$BDLGetDebugLevel$453$start#1;
+
+ inline$BDLGetDebugLevel$453$start#1:
+ goto inline$BDLGetDebugLevel$453$label_3#1;
+
+ inline$BDLGetDebugLevel$453$label_3#1:
+ havoc inline$BDLGetDebugLevel$453$myNondetVar_0;
+ inline$BDLGetDebugLevel$453$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$453$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$453$label_1#1;
+
+ inline$BDLGetDebugLevel$453$label_1#1:
+ goto inline$BDLGetDebugLevel$453$Return#1;
+
+ inline$BDLGetDebugLevel$453$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$453$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon33_Then#1, inline$BDLDevicePowerIoCompletion$17$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_40_true#1, inline$BDLDevicePowerIoCompletion$17$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_41_true#1, inline$BDLDevicePowerIoCompletion$17$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$17$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$17$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_44_true#1, inline$BDLDevicePowerIoCompletion$17$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_45_true#1, inline$BDLDevicePowerIoCompletion$17$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$17$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$17$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$17$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_54#1:
+ inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$17$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_55_true#1, inline$BDLDevicePowerIoCompletion$17$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$17$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$17$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$17$anon34_Then#1, inline$BDLDevicePowerIoCompletion$17$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_59#1:
+ goto inline$BDLGetDebugLevel$454$Entry#1;
+
+ inline$BDLGetDebugLevel$454$Entry#1:
+ goto inline$BDLGetDebugLevel$454$start#1;
+
+ inline$BDLGetDebugLevel$454$start#1:
+ goto inline$BDLGetDebugLevel$454$label_3#1;
+
+ inline$BDLGetDebugLevel$454$label_3#1:
+ havoc inline$BDLGetDebugLevel$454$myNondetVar_0;
+ inline$BDLGetDebugLevel$454$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$454$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$454$label_1#1;
+
+ inline$BDLGetDebugLevel$454$label_1#1:
+ goto inline$BDLGetDebugLevel$454$Return#1;
+
+ inline$BDLGetDebugLevel$454$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$454$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon35_Then#1, inline$BDLDevicePowerIoCompletion$17$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_62_true#1, inline$BDLDevicePowerIoCompletion$17$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_63#1:
+ goto inline$BDLGetDebugLevel$455$Entry#1;
+
+ inline$BDLGetDebugLevel$455$Entry#1:
+ goto inline$BDLGetDebugLevel$455$start#1;
+
+ inline$BDLGetDebugLevel$455$start#1:
+ goto inline$BDLGetDebugLevel$455$label_3#1;
+
+ inline$BDLGetDebugLevel$455$label_3#1:
+ havoc inline$BDLGetDebugLevel$455$myNondetVar_0;
+ inline$BDLGetDebugLevel$455$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$455$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$455$label_1#1;
+
+ inline$BDLGetDebugLevel$455$label_1#1:
+ goto inline$BDLGetDebugLevel$455$Return#1;
+
+ inline$BDLGetDebugLevel$455$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$455$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon36_Then#1, inline$BDLDevicePowerIoCompletion$17$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_72_true#1, inline$BDLDevicePowerIoCompletion$17$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_73#1:
+ goto inline$BDLGetDebugLevel$456$Entry#1;
+
+ inline$BDLGetDebugLevel$456$Entry#1:
+ goto inline$BDLGetDebugLevel$456$start#1;
+
+ inline$BDLGetDebugLevel$456$start#1:
+ goto inline$BDLGetDebugLevel$456$label_3#1;
+
+ inline$BDLGetDebugLevel$456$label_3#1:
+ havoc inline$BDLGetDebugLevel$456$myNondetVar_0;
+ inline$BDLGetDebugLevel$456$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$456$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$456$label_1#1;
+
+ inline$BDLGetDebugLevel$456$label_1#1:
+ goto inline$BDLGetDebugLevel$456$Return#1;
+
+ inline$BDLGetDebugLevel$456$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$456$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon37_Then#1, inline$BDLDevicePowerIoCompletion$17$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_82_true#1, inline$BDLDevicePowerIoCompletion$17$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$17$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$17$anon38_Then#1, inline$BDLDevicePowerIoCompletion$17$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$17$anon39_Then#1, inline$BDLDevicePowerIoCompletion$17$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_92#1:
+ goto inline$storm_IoCompleteRequest$35$Entry#1;
+
+ inline$storm_IoCompleteRequest$35$Entry#1:
+ inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$17$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$35$start#1;
+
+ inline$storm_IoCompleteRequest$35$start#1:
+ inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$35$label_3#1;
+
+ inline$storm_IoCompleteRequest$35$label_3#1:
+ call inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$35$label_6#1;
+
+ inline$storm_IoCompleteRequest$35$label_6#1:
+ goto inline$storm_IoCompleteRequest$35$label_6_true#1, inline$storm_IoCompleteRequest$35$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$35$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$35$label_7#1;
+
+ inline$storm_IoCompleteRequest$35$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$35$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$35$label_8#1;
+
+ inline$storm_IoCompleteRequest$35$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$35$anon3_Then#1, inline$storm_IoCompleteRequest$35$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$35$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$35$anon1#1;
+
+ inline$storm_IoCompleteRequest$35$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$35$label_9#1;
+
+ inline$storm_IoCompleteRequest$35$label_9#1:
+ goto inline$storm_IoCompleteRequest$35$label_9_true#1, inline$storm_IoCompleteRequest$35$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$35$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$35$label_10#1;
+
+ inline$storm_IoCompleteRequest$35$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$35$label_1#1;
+
+ inline$storm_IoCompleteRequest$35$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$35$label_7#1;
+
+ inline$storm_IoCompleteRequest$35$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$35$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$35$label_1#1;
+
+ inline$storm_IoCompleteRequest$35$label_1#1:
+ goto inline$storm_IoCompleteRequest$35$Return#1;
+
+ inline$storm_IoCompleteRequest$35$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$35$Return#1;
+
+ inline$storm_IoCompleteRequest$35$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon40_Then#1, inline$BDLDevicePowerIoCompletion$17$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$17$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$17$anon41_Then#1, inline$BDLDevicePowerIoCompletion$17$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_98#1:
+ goto inline$BDLGetDebugLevel$457$Entry#1;
+
+ inline$BDLGetDebugLevel$457$Entry#1:
+ goto inline$BDLGetDebugLevel$457$start#1;
+
+ inline$BDLGetDebugLevel$457$start#1:
+ goto inline$BDLGetDebugLevel$457$label_3#1;
+
+ inline$BDLGetDebugLevel$457$label_3#1:
+ havoc inline$BDLGetDebugLevel$457$myNondetVar_0;
+ inline$BDLGetDebugLevel$457$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$457$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$457$label_1#1;
+
+ inline$BDLGetDebugLevel$457$label_1#1:
+ goto inline$BDLGetDebugLevel$457$Return#1;
+
+ inline$BDLGetDebugLevel$457$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$457$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon42_Then#1, inline$BDLDevicePowerIoCompletion$17$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_101_true#1, inline$BDLDevicePowerIoCompletion$17$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_102#1:
+ goto inline$BDLGetDebugLevel$458$Entry#1;
+
+ inline$BDLGetDebugLevel$458$Entry#1:
+ goto inline$BDLGetDebugLevel$458$start#1;
+
+ inline$BDLGetDebugLevel$458$start#1:
+ goto inline$BDLGetDebugLevel$458$label_3#1;
+
+ inline$BDLGetDebugLevel$458$label_3#1:
+ havoc inline$BDLGetDebugLevel$458$myNondetVar_0;
+ inline$BDLGetDebugLevel$458$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$458$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$458$label_1#1;
+
+ inline$BDLGetDebugLevel$458$label_1#1:
+ goto inline$BDLGetDebugLevel$458$Return#1;
+
+ inline$BDLGetDebugLevel$458$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$458$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon43_Then#1, inline$BDLDevicePowerIoCompletion$17$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_111_true#1, inline$BDLDevicePowerIoCompletion$17$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$17$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$17$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_112#1:
+ goto inline$BDLGetDebugLevel$459$Entry#1;
+
+ inline$BDLGetDebugLevel$459$Entry#1:
+ goto inline$BDLGetDebugLevel$459$start#1;
+
+ inline$BDLGetDebugLevel$459$start#1:
+ goto inline$BDLGetDebugLevel$459$label_3#1;
+
+ inline$BDLGetDebugLevel$459$label_3#1:
+ havoc inline$BDLGetDebugLevel$459$myNondetVar_0;
+ inline$BDLGetDebugLevel$459$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$459$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$459$label_1#1;
+
+ inline$BDLGetDebugLevel$459$label_1#1:
+ goto inline$BDLGetDebugLevel$459$Return#1;
+
+ inline$BDLGetDebugLevel$459$Return#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$459$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$17$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$17$anon44_Then#1, inline$BDLDevicePowerIoCompletion$17$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_121_true#1, inline$BDLDevicePowerIoCompletion$17$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$17$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$17$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$17$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_122#1:
+ inline$BDLDevicePowerIoCompletion$17$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$17$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$17$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$17$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$17$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$17$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$17$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$17$Return#1:
+ inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$17$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$17$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$17$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$17$anon13_Then#1, inline$CallCompletionRoutine$17$anon13_Else#1;
+
+ inline$CallCompletionRoutine$17$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$17$anon7#1;
+
+ inline$CallCompletionRoutine$17$anon7#1:
+ goto inline$CallCompletionRoutine$17$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$17$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$17$Return#1;
+
+ inline$CallCompletionRoutine$17$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$17$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$17$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$17$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$17$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$17$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$start#1:
+ inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$17$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$17$label_3_true#1, inline$BDLCallDriverCompletionRoutine$17$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$17$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$17$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$17$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$17$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$17$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_6#1:
+ goto inline$storm_KeSetEvent$19$Entry#1;
+
+ inline$storm_KeSetEvent$19$Entry#1:
+ inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$17$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$19$start#1;
+
+ inline$storm_KeSetEvent$19$start#1:
+ inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$19$label_3#1;
+
+ inline$storm_KeSetEvent$19$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$19$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$19$label_1#1;
+
+ inline$storm_KeSetEvent$19$label_1#1:
+ goto inline$storm_KeSetEvent$19$Return#1;
+
+ inline$storm_KeSetEvent$19$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$17$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$17$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$17$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$17$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$17$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$17$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$17$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$17$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$17$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$17$Return#1:
+ inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$17$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$17$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$17$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$17$anon12_Then#1, inline$CallCompletionRoutine$17$anon12_Else#1;
+
+ inline$CallCompletionRoutine$17$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$17$anon5#1;
+
+ inline$CallCompletionRoutine$17$anon5#1:
+ goto inline$CallCompletionRoutine$17$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$17$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$17$label_23#1;
+
+ inline$CallCompletionRoutine$17$label_23#1:
+ inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$17$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$17$label_24#1;
+
+ inline$CallCompletionRoutine$17$label_24#1:
+ goto inline$CallCompletionRoutine$17$label_24_true#1, inline$CallCompletionRoutine$17$label_24_false#1;
+
+ inline$CallCompletionRoutine$17$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$17$label_1#1;
+
+ inline$CallCompletionRoutine$17$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$17$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$17$label_25#1;
+
+ inline$CallCompletionRoutine$17$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$17$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$17$label_1#1;
+
+ inline$CallCompletionRoutine$17$label_1#1:
+ goto inline$CallCompletionRoutine$17$Return#1;
+
+ inline$CallCompletionRoutine$17$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$17$Return#1;
+
+ inline$CallCompletionRoutine$17$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$17$Return#1;
+
+ inline$CallCompletionRoutine$17$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$17$Return#1;
+
+ inline$CallCompletionRoutine$17$Return#1:
+ goto inline$storm_IoCallDriver$8$label_39$1#1;
+
+ inline$storm_IoCallDriver$8$label_39$1#1:
+ goto inline$storm_IoCallDriver$8$anon15_Then#1, inline$storm_IoCallDriver$8$anon15_Else#1;
+
+ inline$storm_IoCallDriver$8$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$8$anon10#1;
+
+ inline$storm_IoCallDriver$8$anon10#1:
+ goto inline$storm_IoCallDriver$8$label_36#1;
+
+ inline$storm_IoCallDriver$8$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$8$Return#1;
+
+ inline$storm_IoCallDriver$8$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$8$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$8$label_28#1;
+
+ inline$storm_IoCallDriver$8$label_28#1:
+ inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$8$label_42#1;
+
+ inline$storm_IoCallDriver$8$label_42#1:
+ goto inline$storm_IoCallDriver$8$label_43#1;
+
+ inline$storm_IoCallDriver$8$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$8$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$8$label_36#1;
+
+ inline$storm_IoCallDriver$8$label_36#1:
+ inline$storm_IoCallDriver$8$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$8$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$8$label_1#1;
+
+ inline$storm_IoCallDriver$8$label_1#1:
+ goto inline$storm_IoCallDriver$8$Return#1;
+
+ inline$storm_IoCallDriver$8$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$8$Return#1;
+
+ inline$storm_IoCallDriver$8$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$8$Return#1;
+
+ inline$storm_IoCallDriver$8$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$8$Return#1;
+
+ inline$storm_IoCallDriver$8$Return#1:
+ inline$storm_PoCallDriver$3$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$8$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$storm_PoCallDriver$3$label_3$1#1;
+
+ inline$storm_PoCallDriver$3$label_3$1#1:
+ goto inline$storm_PoCallDriver$3$anon2_Then#1, inline$storm_PoCallDriver$3$anon2_Else#1;
+
+ inline$storm_PoCallDriver$3$anon2_Else#1:
+ assume !raiseException;
+ goto inline$storm_PoCallDriver$3$anon1#1;
+
+ inline$storm_PoCallDriver$3$anon1#1:
+ goto inline$storm_PoCallDriver$3$label_6#1;
+
+ inline$storm_PoCallDriver$3$label_6#1:
+ inline$storm_PoCallDriver$3$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$3$$result.storm_IoCallDriver$499.27$2$;
+ goto inline$storm_PoCallDriver$3$label_1#1;
+
+ inline$storm_PoCallDriver$3$label_1#1:
+ goto inline$storm_PoCallDriver$3$Return#1;
+
+ inline$storm_PoCallDriver$3$anon2_Then#1:
+ assume raiseException;
+ goto inline$storm_PoCallDriver$3$Return#1;
+
+ inline$storm_PoCallDriver$3$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$3$$result.storm_PoCallDriver$494.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_25$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_25$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon22_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon13#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon13#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_28#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_28#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_PoCallDriver$104.29$3$;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$3$label_29_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_29_false#1:
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_29_true#1:
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_31#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_31#1:
+ goto inline$storm_KeWaitForSingleObject$3$Entry#1;
+
+ inline$storm_KeWaitForSingleObject$3$Entry#1:
+ inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
+ goto inline$storm_KeWaitForSingleObject$3$start#1;
+
+ inline$storm_KeWaitForSingleObject$3$start#1:
+ inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
+ inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
+ goto inline$storm_KeWaitForSingleObject$3$label_3#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_3#1:
+ goto inline$storm_KeWaitForSingleObject$3$label_3_true#1, inline$storm_KeWaitForSingleObject$3$label_3_false#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_3_false#1:
+ assume inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
+ goto inline$storm_KeWaitForSingleObject$3$label_4#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_4#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$anon6_Then#1, inline$storm_KeWaitForSingleObject$3$anon6_Else#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$anon1#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$3$label_13#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_13#1:
+ inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$3$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$Return#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_3_true#1:
+ assume inline$storm_KeWaitForSingleObject$3$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
+ goto inline$storm_KeWaitForSingleObject$3$label_5#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_5#1:
+ call inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$ := storm_nondet();
+ goto inline$storm_KeWaitForSingleObject$3$label_8#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_8#1:
+ goto inline$storm_KeWaitForSingleObject$3$label_8_true#1, inline$storm_KeWaitForSingleObject$3$label_8_false#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_8_false#1:
+ assume inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$ == 0;
+ goto inline$storm_KeWaitForSingleObject$3$label_9#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_9#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$anon7_Then#1, inline$storm_KeWaitForSingleObject$3$anon7_Else#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$anon3#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$3$label_12#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_12#1:
+ inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
+ goto inline$storm_KeWaitForSingleObject$3$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$Return#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_8_true#1:
+ assume inline$storm_KeWaitForSingleObject$3$$result.storm_nondet$256.20$2$ != 0;
+ goto inline$storm_KeWaitForSingleObject$3$label_10#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_10#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$anon8_Then#1, inline$storm_KeWaitForSingleObject$3$anon8_Else#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$anon5#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon5#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$3$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$3$label_11#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_11#1:
+ inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$3$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$3$label_1#1:
+ goto inline$storm_KeWaitForSingleObject$3$Return#1;
+
+ inline$storm_KeWaitForSingleObject$3$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$3$Return#1;
+
+ inline$storm_KeWaitForSingleObject$3$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$3$$result.storm_KeWaitForSingleObject$243.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_31$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_31$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$3$anon23_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$anon15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon15#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_34#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_34#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$$result.storm_KeWaitForSingleObject$116.38$5$;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_35#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_35#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$3$label_35_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_35_false#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_35_true#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_37#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_37#1:
+ call inline$BDLCallLowerLevelDriverAndWait$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_38#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_38#1:
+ call inline$BDLCallLowerLevelDriverAndWait$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_39#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_39#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_36#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
+ inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$3$myNondetVar_0;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_30#1:
+ inline$BDLCallLowerLevelDriverAndWait$3$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$3$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$label_1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$label_1#1:
+ call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$3$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon21_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$3$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$3$Return#1:
+ inline$BDLPnPStop$0$$result.BDLCallLowerLevelDriverAndWait$2227.43$26$ := inline$BDLCallLowerLevelDriverAndWait$3$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
+ goto inline$BDLPnPStop$0$label_92$1#1;
+
+ inline$BDLPnPStop$0$label_92$1#1:
+ goto inline$BDLPnPStop$0$anon38_Then#1, inline$BDLPnPStop$0$anon38_Else#1;
+
+ inline$BDLPnPStop$0$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon21#1;
+
+ inline$BDLPnPStop$0$anon21#1:
+ goto inline$BDLPnPStop$0$label_95#1;
+
+ inline$BDLPnPStop$0$label_95#1:
+ inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 := inline$BDLPnPStop$0$$result.BDLCallLowerLevelDriverAndWait$2227.43$26$;
+ goto inline$BDLPnPStop$0$label_96#1;
+
+ inline$BDLPnPStop$0$label_96#1:
+ goto inline$BDLPnPStop$0$label_96_true#1, inline$BDLPnPStop$0$label_96_false#1;
+
+ inline$BDLPnPStop$0$label_96_false#1:
+ assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 == 0;
+ goto inline$BDLPnPStop$0$label_65#1;
+
+ inline$BDLPnPStop$0$label_96_true#1:
+ assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 != 0;
+ goto inline$BDLPnPStop$0$label_97#1;
+
+ inline$BDLPnPStop$0$label_97#1:
+ goto inline$BDLGetDebugLevel$472$Entry#1;
+
+ inline$BDLGetDebugLevel$472$Entry#1:
+ goto inline$BDLGetDebugLevel$472$start#1;
+
+ inline$BDLGetDebugLevel$472$start#1:
+ goto inline$BDLGetDebugLevel$472$label_3#1;
+
+ inline$BDLGetDebugLevel$472$label_3#1:
+ havoc inline$BDLGetDebugLevel$472$myNondetVar_0;
+ inline$BDLGetDebugLevel$472$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$472$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$472$label_1#1;
+
+ inline$BDLGetDebugLevel$472$label_1#1:
+ goto inline$BDLGetDebugLevel$472$Return#1;
+
+ inline$BDLGetDebugLevel$472$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$ := inline$BDLGetDebugLevel$472$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_97$1#1;
+
+ inline$BDLPnPStop$0$label_97$1#1:
+ goto inline$BDLPnPStop$0$anon39_Then#1, inline$BDLPnPStop$0$anon39_Else#1;
+
+ inline$BDLPnPStop$0$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon23#1;
+
+ inline$BDLPnPStop$0$anon23#1:
+ goto inline$BDLPnPStop$0$label_100#1;
+
+ inline$BDLPnPStop$0$label_100#1:
+ goto inline$BDLPnPStop$0$label_100_true#1, inline$BDLPnPStop$0$label_100_false#1;
+
+ inline$BDLPnPStop$0$label_100_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$) == 0;
+ goto inline$BDLPnPStop$0$label_101#1;
+
+ inline$BDLPnPStop$0$label_100_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$27$) != 0;
+ goto inline$BDLPnPStop$0$label_104#1;
+
+ inline$BDLPnPStop$0$label_104#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_105#1;
+
+ inline$BDLPnPStop$0$label_105#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_106#1;
+
+ inline$BDLPnPStop$0$label_106#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_107#1;
+
+ inline$BDLPnPStop$0$label_107#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2231.0$28$;
+ goto inline$BDLPnPStop$0$label_101#1;
+
+ inline$BDLPnPStop$0$label_101#1:
+ goto inline$BDLGetDebugLevel$473$Entry#1;
+
+ inline$BDLGetDebugLevel$473$Entry#1:
+ goto inline$BDLGetDebugLevel$473$start#1;
+
+ inline$BDLGetDebugLevel$473$start#1:
+ goto inline$BDLGetDebugLevel$473$label_3#1;
+
+ inline$BDLGetDebugLevel$473$label_3#1:
+ havoc inline$BDLGetDebugLevel$473$myNondetVar_0;
+ inline$BDLGetDebugLevel$473$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$473$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$473$label_1#1;
+
+ inline$BDLGetDebugLevel$473$label_1#1:
+ goto inline$BDLGetDebugLevel$473$Return#1;
+
+ inline$BDLGetDebugLevel$473$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$ := inline$BDLGetDebugLevel$473$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_101$1#1;
+
+ inline$BDLPnPStop$0$label_101$1#1:
+ goto inline$BDLPnPStop$0$anon40_Then#1, inline$BDLPnPStop$0$anon40_Else#1;
+
+ inline$BDLPnPStop$0$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon25#1;
+
+ inline$BDLPnPStop$0$anon25#1:
+ goto inline$BDLPnPStop$0$label_110#1;
+
+ inline$BDLPnPStop$0$label_110#1:
+ goto inline$BDLPnPStop$0$label_110_true#1, inline$BDLPnPStop$0$label_110_false#1;
+
+ inline$BDLPnPStop$0$label_110_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$) == 0;
+ goto inline$BDLPnPStop$0$label_111#1;
+
+ inline$BDLPnPStop$0$label_110_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$32$) != 0;
+ goto inline$BDLPnPStop$0$label_114#1;
+
+ inline$BDLPnPStop$0$label_114#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_115#1;
+
+ inline$BDLPnPStop$0$label_115#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_116#1;
+
+ inline$BDLPnPStop$0$label_116#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_117#1;
+
+ inline$BDLPnPStop$0$label_117#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2231.0$33$;
+ goto inline$BDLPnPStop$0$label_111#1;
+
+ inline$BDLPnPStop$0$label_111#1:
+ goto inline$BDLGetDebugLevel$474$Entry#1;
+
+ inline$BDLGetDebugLevel$474$Entry#1:
+ goto inline$BDLGetDebugLevel$474$start#1;
+
+ inline$BDLGetDebugLevel$474$start#1:
+ goto inline$BDLGetDebugLevel$474$label_3#1;
+
+ inline$BDLGetDebugLevel$474$label_3#1:
+ havoc inline$BDLGetDebugLevel$474$myNondetVar_0;
+ inline$BDLGetDebugLevel$474$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$474$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$474$label_1#1;
+
+ inline$BDLGetDebugLevel$474$label_1#1:
+ goto inline$BDLGetDebugLevel$474$Return#1;
+
+ inline$BDLGetDebugLevel$474$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$ := inline$BDLGetDebugLevel$474$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_111$1#1;
+
+ inline$BDLPnPStop$0$label_111$1#1:
+ goto inline$BDLPnPStop$0$anon41_Then#1, inline$BDLPnPStop$0$anon41_Else#1;
+
+ inline$BDLPnPStop$0$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon27#1;
+
+ inline$BDLPnPStop$0$anon27#1:
+ goto inline$BDLPnPStop$0$label_120#1;
+
+ inline$BDLPnPStop$0$label_120#1:
+ goto inline$BDLPnPStop$0$label_120_true#1, inline$BDLPnPStop$0$label_120_false#1;
+
+ inline$BDLPnPStop$0$label_120_false#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$, 4) == 0;
+ goto inline$BDLPnPStop$0$label_65#1;
+
+ inline$BDLPnPStop$0$label_120_true#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2231.0$37$, 4) != 0;
+ goto inline$BDLPnPStop$0$label_121#1;
+
+ inline$BDLPnPStop$0$label_121#1:
+ goto inline$BDLPnPStop$0$label_65#1;
+
+ inline$BDLPnPStop$0$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$label_39_true#1:
+ assume inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12 != 0;
+ goto inline$BDLPnPStop$0$label_41#1;
+
+ inline$BDLPnPStop$0$label_41#1:
+ goto inline$BDLGetDebugLevel$382$Entry#1;
+
+ inline$BDLGetDebugLevel$382$Entry#1:
+ goto inline$BDLGetDebugLevel$382$start#1;
+
+ inline$BDLGetDebugLevel$382$start#1:
+ goto inline$BDLGetDebugLevel$382$label_3#1;
+
+ inline$BDLGetDebugLevel$382$label_3#1:
+ havoc inline$BDLGetDebugLevel$382$myNondetVar_0;
+ inline$BDLGetDebugLevel$382$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$382$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$382$label_1#1;
+
+ inline$BDLGetDebugLevel$382$label_1#1:
+ goto inline$BDLGetDebugLevel$382$Return#1;
+
+ inline$BDLGetDebugLevel$382$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$ := inline$BDLGetDebugLevel$382$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_41$1#1;
+
+ inline$BDLPnPStop$0$label_41$1#1:
+ goto inline$BDLPnPStop$0$anon32_Then#1, inline$BDLPnPStop$0$anon32_Else#1;
+
+ inline$BDLPnPStop$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon9#1;
+
+ inline$BDLPnPStop$0$anon9#1:
+ goto inline$BDLPnPStop$0$label_44#1;
+
+ inline$BDLPnPStop$0$label_44#1:
+ goto inline$BDLPnPStop$0$label_44_true#1, inline$BDLPnPStop$0$label_44_false#1;
+
+ inline$BDLPnPStop$0$label_44_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$) == 0;
+ goto inline$BDLPnPStop$0$label_45#1;
+
+ inline$BDLPnPStop$0$label_44_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$15$) != 0;
+ goto inline$BDLPnPStop$0$label_48#1;
+
+ inline$BDLPnPStop$0$label_48#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_49#1;
+
+ inline$BDLPnPStop$0$label_49#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_50#1;
+
+ inline$BDLPnPStop$0$label_50#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_51#1;
+
+ inline$BDLPnPStop$0$label_51#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2208.0$16$;
+ goto inline$BDLPnPStop$0$label_45#1;
+
+ inline$BDLPnPStop$0$label_45#1:
+ goto inline$BDLGetDebugLevel$383$Entry#1;
+
+ inline$BDLGetDebugLevel$383$Entry#1:
+ goto inline$BDLGetDebugLevel$383$start#1;
+
+ inline$BDLGetDebugLevel$383$start#1:
+ goto inline$BDLGetDebugLevel$383$label_3#1;
+
+ inline$BDLGetDebugLevel$383$label_3#1:
+ havoc inline$BDLGetDebugLevel$383$myNondetVar_0;
+ inline$BDLGetDebugLevel$383$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$383$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$383$label_1#1;
+
+ inline$BDLGetDebugLevel$383$label_1#1:
+ goto inline$BDLGetDebugLevel$383$Return#1;
+
+ inline$BDLGetDebugLevel$383$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$ := inline$BDLGetDebugLevel$383$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_45$1#1;
+
+ inline$BDLPnPStop$0$label_45$1#1:
+ goto inline$BDLPnPStop$0$anon33_Then#1, inline$BDLPnPStop$0$anon33_Else#1;
+
+ inline$BDLPnPStop$0$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon11#1;
+
+ inline$BDLPnPStop$0$anon11#1:
+ goto inline$BDLPnPStop$0$label_54#1;
+
+ inline$BDLPnPStop$0$label_54#1:
+ goto inline$BDLPnPStop$0$label_54_true#1, inline$BDLPnPStop$0$label_54_false#1;
+
+ inline$BDLPnPStop$0$label_54_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$) == 0;
+ goto inline$BDLPnPStop$0$label_55#1;
+
+ inline$BDLPnPStop$0$label_54_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$20$) != 0;
+ goto inline$BDLPnPStop$0$label_58#1;
+
+ inline$BDLPnPStop$0$label_58#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_59#1;
+
+ inline$BDLPnPStop$0$label_59#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_60#1;
+
+ inline$BDLPnPStop$0$label_60#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_61#1;
+
+ inline$BDLPnPStop$0$label_61#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2208.0$21$;
+ goto inline$BDLPnPStop$0$label_55#1;
+
+ inline$BDLPnPStop$0$label_55#1:
+ goto inline$BDLGetDebugLevel$384$Entry#1;
+
+ inline$BDLGetDebugLevel$384$Entry#1:
+ goto inline$BDLGetDebugLevel$384$start#1;
+
+ inline$BDLGetDebugLevel$384$start#1:
+ goto inline$BDLGetDebugLevel$384$label_3#1;
+
+ inline$BDLGetDebugLevel$384$label_3#1:
+ havoc inline$BDLGetDebugLevel$384$myNondetVar_0;
+ inline$BDLGetDebugLevel$384$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$384$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$384$label_1#1;
+
+ inline$BDLGetDebugLevel$384$label_1#1:
+ goto inline$BDLGetDebugLevel$384$Return#1;
+
+ inline$BDLGetDebugLevel$384$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$ := inline$BDLGetDebugLevel$384$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_55$1#1;
+
+ inline$BDLPnPStop$0$label_55$1#1:
+ goto inline$BDLPnPStop$0$anon34_Then#1, inline$BDLPnPStop$0$anon34_Else#1;
+
+ inline$BDLPnPStop$0$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon13#1;
+
+ inline$BDLPnPStop$0$anon13#1:
+ goto inline$BDLPnPStop$0$label_64#1;
+
+ inline$BDLPnPStop$0$label_64#1:
+ goto inline$BDLPnPStop$0$label_64_true#1, inline$BDLPnPStop$0$label_64_false#1;
+
+ inline$BDLPnPStop$0$label_64_false#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$, 4) == 0;
+ goto inline$BDLPnPStop$0$label_65#1;
+
+ inline$BDLPnPStop$0$label_64_true#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2208.0$25$, 4) != 0;
+ goto inline$BDLPnPStop$0$label_68#1;
+
+ inline$BDLPnPStop$0$label_68#1:
+ goto inline$BDLPnPStop$0$label_65#1;
+
+ inline$BDLPnPStop$0$label_65#1:
+ goto inline$BDLGetDebugLevel$385$Entry#1;
+
+ inline$BDLGetDebugLevel$385$Entry#1:
+ goto inline$BDLGetDebugLevel$385$start#1;
+
+ inline$BDLGetDebugLevel$385$start#1:
+ goto inline$BDLGetDebugLevel$385$label_3#1;
+
+ inline$BDLGetDebugLevel$385$label_3#1:
+ havoc inline$BDLGetDebugLevel$385$myNondetVar_0;
+ inline$BDLGetDebugLevel$385$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$385$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$385$label_1#1;
+
+ inline$BDLGetDebugLevel$385$label_1#1:
+ goto inline$BDLGetDebugLevel$385$Return#1;
+
+ inline$BDLGetDebugLevel$385$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$ := inline$BDLGetDebugLevel$385$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_65$1#1;
+
+ inline$BDLPnPStop$0$label_65$1#1:
+ goto inline$BDLPnPStop$0$anon35_Then#1, inline$BDLPnPStop$0$anon35_Else#1;
+
+ inline$BDLPnPStop$0$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon15#1;
+
+ inline$BDLPnPStop$0$anon15#1:
+ goto inline$BDLPnPStop$0$label_69#1;
+
+ inline$BDLPnPStop$0$label_69#1:
+ goto inline$BDLPnPStop$0$label_69_true#1, inline$BDLPnPStop$0$label_69_false#1;
+
+ inline$BDLPnPStop$0$label_69_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$) == 0;
+ goto inline$BDLPnPStop$0$label_70#1;
+
+ inline$BDLPnPStop$0$label_69_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$38$) != 0;
+ goto inline$BDLPnPStop$0$label_73#1;
+
+ inline$BDLPnPStop$0$label_73#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_74#1;
+
+ inline$BDLPnPStop$0$label_74#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_75#1;
+
+ inline$BDLPnPStop$0$label_75#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_76#1;
+
+ inline$BDLPnPStop$0$label_76#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2243.0$39$;
+ goto inline$BDLPnPStop$0$label_70#1;
+
+ inline$BDLPnPStop$0$label_70#1:
+ goto inline$BDLGetDebugLevel$386$Entry#1;
+
+ inline$BDLGetDebugLevel$386$Entry#1:
+ goto inline$BDLGetDebugLevel$386$start#1;
+
+ inline$BDLGetDebugLevel$386$start#1:
+ goto inline$BDLGetDebugLevel$386$label_3#1;
+
+ inline$BDLGetDebugLevel$386$label_3#1:
+ havoc inline$BDLGetDebugLevel$386$myNondetVar_0;
+ inline$BDLGetDebugLevel$386$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$386$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$386$label_1#1;
+
+ inline$BDLGetDebugLevel$386$label_1#1:
+ goto inline$BDLGetDebugLevel$386$Return#1;
+
+ inline$BDLGetDebugLevel$386$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$ := inline$BDLGetDebugLevel$386$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_70$1#1;
+
+ inline$BDLPnPStop$0$label_70$1#1:
+ goto inline$BDLPnPStop$0$anon36_Then#1, inline$BDLPnPStop$0$anon36_Else#1;
+
+ inline$BDLPnPStop$0$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon17#1;
+
+ inline$BDLPnPStop$0$anon17#1:
+ goto inline$BDLPnPStop$0$label_79#1;
+
+ inline$BDLPnPStop$0$label_79#1:
+ goto inline$BDLPnPStop$0$label_79_true#1, inline$BDLPnPStop$0$label_79_false#1;
+
+ inline$BDLPnPStop$0$label_79_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$) == 0;
+ goto inline$BDLPnPStop$0$label_80#1;
+
+ inline$BDLPnPStop$0$label_79_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$43$) != 0;
+ goto inline$BDLPnPStop$0$label_83#1;
+
+ inline$BDLPnPStop$0$label_83#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_84#1;
+
+ inline$BDLPnPStop$0$label_84#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_85#1;
+
+ inline$BDLPnPStop$0$label_85#1:
+ call inline$BDLPnPStop$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStop$0$label_86#1;
+
+ inline$BDLPnPStop$0$label_86#1:
+ havoc inline$BDLPnPStop$0$$result.DbgPrint$2243.0$44$;
+ goto inline$BDLPnPStop$0$label_80#1;
+
+ inline$BDLPnPStop$0$label_80#1:
+ goto inline$BDLGetDebugLevel$387$Entry#1;
+
+ inline$BDLGetDebugLevel$387$Entry#1:
+ goto inline$BDLGetDebugLevel$387$start#1;
+
+ inline$BDLGetDebugLevel$387$start#1:
+ goto inline$BDLGetDebugLevel$387$label_3#1;
+
+ inline$BDLGetDebugLevel$387$label_3#1:
+ havoc inline$BDLGetDebugLevel$387$myNondetVar_0;
+ inline$BDLGetDebugLevel$387$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$387$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$387$label_1#1;
+
+ inline$BDLGetDebugLevel$387$label_1#1:
+ goto inline$BDLGetDebugLevel$387$Return#1;
+
+ inline$BDLGetDebugLevel$387$Return#1:
+ inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$ := inline$BDLGetDebugLevel$387$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStop$0$label_80$1#1;
+
+ inline$BDLPnPStop$0$label_80$1#1:
+ goto inline$BDLPnPStop$0$anon37_Then#1, inline$BDLPnPStop$0$anon37_Else#1;
+
+ inline$BDLPnPStop$0$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStop$0$anon19#1;
+
+ inline$BDLPnPStop$0$anon19#1:
+ goto inline$BDLPnPStop$0$label_89#1;
+
+ inline$BDLPnPStop$0$label_89#1:
+ goto inline$BDLPnPStop$0$label_89_true#1, inline$BDLPnPStop$0$label_89_false#1;
+
+ inline$BDLPnPStop$0$label_89_false#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$, 4) == 0;
+ goto inline$BDLPnPStop$0$label_90#1;
+
+ inline$BDLPnPStop$0$label_89_true#1:
+ assume BIT_BAND(inline$BDLPnPStop$0$$result.BDLGetDebugLevel$2243.0$48$, 4) != 0;
+ goto inline$BDLPnPStop$0$label_91#1;
+
+ inline$BDLPnPStop$0$label_91#1:
+ goto inline$BDLPnPStop$0$label_90#1;
+
+ inline$BDLPnPStop$0$label_90#1:
+ inline$BDLPnPStop$0$$result.BDLPnPStop$2180.0$1$ := inline$BDLPnPStop$0$$status$4$2187.28$BDLPnPStop$12;
+ goto inline$BDLPnPStop$0$label_1#1;
+
+ inline$BDLPnPStop$0$label_1#1:
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon29_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$anon28_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStop$0$Return#1;
+
+ inline$BDLPnPStop$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPStop$934.27$31$ := inline$BDLPnPStop$0$$result.BDLPnPStop$2180.0$1$;
+ goto inline$BDLPnP$0$label_125$1#1;
+
+ inline$BDLPnP$0$label_125$1#1:
+ goto inline$BDLPnP$0$anon71_Then#1, inline$BDLPnP$0$anon71_Else#1;
+
+ inline$BDLPnP$0$anon71_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon35#1;
+
+ inline$BDLPnP$0$anon35#1:
+ goto inline$BDLPnP$0$label_150#1;
+
+ inline$BDLPnP$0$label_150#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPStop$934.27$31$;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon71_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_4#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 3;
+ goto inline$BDLPnP$0$label_122#1;
+
+ inline$BDLPnP$0$label_122#1:
+ goto inline$BDLPnPCancelRemove$0$Entry#1;
+
+ inline$BDLPnPCancelRemove$0$Entry#1:
+ inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPCancelRemove$0$start#1;
+
+ inline$BDLPnPCancelRemove$0$start#1:
+ inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12_.1;
+ inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12_.1;
+ goto inline$BDLPnPCancelRemove$0$label_3#1;
+
+ inline$BDLPnPCancelRemove$0$label_3#1:
+ goto inline$BDLPnPCancelRemove$0$label_4#1;
+
+ inline$BDLPnPCancelRemove$0$label_4#1:
+ inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 := 0;
+ goto inline$BDLPnPCancelRemove$0$label_5#1;
+
+ inline$BDLPnPCancelRemove$0$label_5#1:
+ goto inline$BDLGetDebugLevel$283$Entry#1;
+
+ inline$BDLGetDebugLevel$283$Entry#1:
+ goto inline$BDLGetDebugLevel$283$start#1;
+
+ inline$BDLGetDebugLevel$283$start#1:
+ goto inline$BDLGetDebugLevel$283$label_3#1;
+
+ inline$BDLGetDebugLevel$283$label_3#1:
+ havoc inline$BDLGetDebugLevel$283$myNondetVar_0;
+ inline$BDLGetDebugLevel$283$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$283$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$283$label_1#1;
+
+ inline$BDLGetDebugLevel$283$label_1#1:
+ goto inline$BDLGetDebugLevel$283$Return#1;
+
+ inline$BDLGetDebugLevel$283$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$ := inline$BDLGetDebugLevel$283$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_5$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_5$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon28_Then#1, inline$BDLPnPCancelRemove$0$anon28_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon28_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon1#1;
+
+ inline$BDLPnPCancelRemove$0$anon1#1:
+ goto inline$BDLPnPCancelRemove$0$label_8#1;
+
+ inline$BDLPnPCancelRemove$0$label_8#1:
+ goto inline$BDLPnPCancelRemove$0$label_8_true#1, inline$BDLPnPCancelRemove$0$label_8_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_8_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_9#1;
+
+ inline$BDLPnPCancelRemove$0$label_8_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$2$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_12#1;
+
+ inline$BDLPnPCancelRemove$0$label_12#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_13#1;
+
+ inline$BDLPnPCancelRemove$0$label_13#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_14#1;
+
+ inline$BDLPnPCancelRemove$0$label_14#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_15#1;
+
+ inline$BDLPnPCancelRemove$0$label_15#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$3$;
+ goto inline$BDLPnPCancelRemove$0$label_9#1;
+
+ inline$BDLPnPCancelRemove$0$label_9#1:
+ goto inline$BDLGetDebugLevel$284$Entry#1;
+
+ inline$BDLGetDebugLevel$284$Entry#1:
+ goto inline$BDLGetDebugLevel$284$start#1;
+
+ inline$BDLGetDebugLevel$284$start#1:
+ goto inline$BDLGetDebugLevel$284$label_3#1;
+
+ inline$BDLGetDebugLevel$284$label_3#1:
+ havoc inline$BDLGetDebugLevel$284$myNondetVar_0;
+ inline$BDLGetDebugLevel$284$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$284$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$284$label_1#1;
+
+ inline$BDLGetDebugLevel$284$label_1#1:
+ goto inline$BDLGetDebugLevel$284$Return#1;
+
+ inline$BDLGetDebugLevel$284$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$ := inline$BDLGetDebugLevel$284$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_9$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_9$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon29_Then#1, inline$BDLPnPCancelRemove$0$anon29_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon29_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon3#1;
+
+ inline$BDLPnPCancelRemove$0$anon3#1:
+ goto inline$BDLPnPCancelRemove$0$label_18#1;
+
+ inline$BDLPnPCancelRemove$0$label_18#1:
+ goto inline$BDLPnPCancelRemove$0$label_18_true#1, inline$BDLPnPCancelRemove$0$label_18_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_19#1;
+
+ inline$BDLPnPCancelRemove$0$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$7$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_22#1;
+
+ inline$BDLPnPCancelRemove$0$label_22#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_23#1;
+
+ inline$BDLPnPCancelRemove$0$label_23#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_24#1;
+
+ inline$BDLPnPCancelRemove$0$label_24#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_25#1;
+
+ inline$BDLPnPCancelRemove$0$label_25#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2323.0$8$;
+ goto inline$BDLPnPCancelRemove$0$label_19#1;
+
+ inline$BDLPnPCancelRemove$0$label_19#1:
+ goto inline$BDLGetDebugLevel$285$Entry#1;
+
+ inline$BDLGetDebugLevel$285$Entry#1:
+ goto inline$BDLGetDebugLevel$285$start#1;
+
+ inline$BDLGetDebugLevel$285$start#1:
+ goto inline$BDLGetDebugLevel$285$label_3#1;
+
+ inline$BDLGetDebugLevel$285$label_3#1:
+ havoc inline$BDLGetDebugLevel$285$myNondetVar_0;
+ inline$BDLGetDebugLevel$285$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$285$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$285$label_1#1;
+
+ inline$BDLGetDebugLevel$285$label_1#1:
+ goto inline$BDLGetDebugLevel$285$Return#1;
+
+ inline$BDLGetDebugLevel$285$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$ := inline$BDLGetDebugLevel$285$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_19$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_19$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon30_Then#1, inline$BDLPnPCancelRemove$0$anon30_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon5#1;
+
+ inline$BDLPnPCancelRemove$0$anon5#1:
+ goto inline$BDLPnPCancelRemove$0$label_28#1;
+
+ inline$BDLPnPCancelRemove$0$label_28#1:
+ goto inline$BDLPnPCancelRemove$0$label_28_true#1, inline$BDLPnPCancelRemove$0$label_28_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_28_false#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$, 4) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_29#1;
+
+ inline$BDLPnPCancelRemove$0$label_28_true#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2323.0$12$, 4) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_32#1;
+
+ inline$BDLPnPCancelRemove$0$label_32#1:
+ goto inline$BDLPnPCancelRemove$0$label_29#1;
+
+ inline$BDLPnPCancelRemove$0$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Entry#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$Entry#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPCancelRemove$0$$pIrp$3$2318.40$BDLPnPCancelRemove$12;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$start#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$start#1:
+ call inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
+ inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_4#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_4#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_6#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_6#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$Entry#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$Entry#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$start#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$start#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_4#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_4#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_5#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_5#1:
+ goto inline$IoGetCurrentIrpStackLocation$52$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetCurrentIrpStackLocation$52$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$start#1:
+ inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$52$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$52$label_3_true#1, inline$IoGetCurrentIrpStackLocation$52$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$52$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$52$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$52$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$52$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$52$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$52$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$52$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$52$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$52$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$52$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$52$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$52$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$52$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$52$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$52$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$52$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$52$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$52$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$52$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$52$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_5$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_5$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$anon1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_8#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_8#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_9#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_9#1:
+ goto inline$IoGetNextIrpStackLocation$5$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$5$Entry#1:
+ inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$2$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetNextIrpStackLocation$5$start#1;
+
+ inline$IoGetNextIrpStackLocation$5$start#1:
+ inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$5$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$5$label_3_true#1, inline$IoGetNextIrpStackLocation$5$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$5$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$5$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_4#1:
+ call inline$IoGetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$5$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_6#1:
+ call inline$IoGetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$5$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$5$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$5$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$5$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$5$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$5$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$5$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$5$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$5$Return#1;
+
+ inline$IoGetNextIrpStackLocation$5$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_9$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_9$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$anon3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$anon3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_12#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_12#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_13#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_13#1:
+ havoc inline$IoCopyCurrentIrpStackLocationToNext$2$$result.memcpy$25110.4$3$;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_16#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_16#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$label_1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$label_1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$anon5_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$anon4_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$2$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_6$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_6$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon16_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_9#1:
+ goto inline$storm_KeInitializeEvent$2$Entry#1;
+
+ inline$storm_KeInitializeEvent$2$Entry#1:
+ inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
+ goto inline$storm_KeInitializeEvent$2$start#1;
+
+ inline$storm_KeInitializeEvent$2$start#1:
+ inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
+ inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12_.1;
+ goto inline$storm_KeInitializeEvent$2$label_3#1;
+
+ inline$storm_KeInitializeEvent$2$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$2$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$2$$State$3$205.13$storm_KeInitializeEvent$12];
+ call contextSwitch();
+ goto inline$storm_KeInitializeEvent$2$label_1#1;
+
+ inline$storm_KeInitializeEvent$2$label_1#1:
+ goto inline$storm_KeInitializeEvent$2$Return#1;
+
+ inline$storm_KeInitializeEvent$2$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_9$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_9$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon17_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_12#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$2$Entry#1;
+
+ inline$storm_IoSetCompletionRoutine$2$Entry#1:
+ inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoSetCompletionRoutine$2$start#1;
+
+ inline$storm_IoSetCompletionRoutine$2$start#1:
+ inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
+ goto inline$storm_IoSetCompletionRoutine$2$label_3#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_3#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_4#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_4#1:
+ call inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$ := storm_nondet();
+ goto inline$storm_IoSetCompletionRoutine$2$label_7#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_7#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_7_true#1, inline$storm_IoSetCompletionRoutine$2$label_7_false#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_7_false#1:
+ assume inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$ == 0;
+ goto inline$storm_IoSetCompletionRoutine$2$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_7_true#1:
+ assume inline$storm_IoSetCompletionRoutine$2$$result.storm_nondet$405.2$1$ != 0;
+ goto inline$storm_IoSetCompletionRoutine$2$label_11#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_11#1:
+ havoc raiseException;
+ goto inline$storm_IoSetCompletionRoutine$2$anon6_Then#1, inline$storm_IoSetCompletionRoutine$2$anon6_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$2$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$2$anon3#1;
+
+ inline$storm_IoSetCompletionRoutine$2$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCompletionRoutine$2$label_12#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_12_true#1, inline$storm_IoSetCompletionRoutine$2$label_12_false#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_12_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoSetCompletionRoutine$2$label_13#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_13#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCompletionRoutine$2$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_12_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoSetCompletionRoutine$2$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_8#1:
+ goto inline$IoGetNextIrpStackLocation$6$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$6$Entry#1:
+ inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$2$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
+ goto inline$IoGetNextIrpStackLocation$6$start#1;
+
+ inline$IoGetNextIrpStackLocation$6$start#1:
+ inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$6$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$6$label_3_true#1, inline$IoGetNextIrpStackLocation$6$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$6$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$6$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_4#1:
+ call inline$IoGetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$6$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_6#1:
+ call inline$IoGetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$6$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$6$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$6$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$6$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$6$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$6$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$6$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$6$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$6$Return#1;
+
+ inline$IoGetNextIrpStackLocation$6$Return#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_8$1#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_8$1#1:
+ goto inline$storm_IoSetCompletionRoutine$2$anon5_Then#1, inline$storm_IoSetCompletionRoutine$2$anon5_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$2$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$2$anon1#1;
+
+ inline$storm_IoSetCompletionRoutine$2$anon1#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_16#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_16#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_17#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_17#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_18#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_18#1:
+ goto inline$storm_IoSetCompletionRoutine$2$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$2$label_1#1:
+ goto inline$storm_IoSetCompletionRoutine$2$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$2$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$2$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$2$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$2$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$2$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_12$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_12$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon18_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_15#1:
+ goto inline$IoGetCurrentIrpStackLocation$53$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoGetCurrentIrpStackLocation$53$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$start#1:
+ inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$53$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$53$label_3_true#1, inline$IoGetCurrentIrpStackLocation$53$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$53$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$53$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$53$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$53$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$53$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$53$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$53$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$53$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$53$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$53$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$53$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$53$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$53$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$53$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$53$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$53$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$53$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$53$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$53$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$53$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_15$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_15$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon19_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon7#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon7#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_18#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_18#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$2$label_18_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_18_false#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_19#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_19#1:
+ goto inline$storm_IoCallDriver$5$Entry#1;
+
+ inline$storm_IoCallDriver$5$Entry#1:
+ inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoCallDriver$5$start#1;
+
+ inline$storm_IoCallDriver$5$start#1:
+ inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$5$label_3#1;
+
+ inline$storm_IoCallDriver$5$label_3#1:
+ goto inline$storm_IoCallDriver$5$label_4#1;
+
+ inline$storm_IoCallDriver$5$label_4#1:
+ goto inline$storm_IoCallDriver$5$label_5#1;
+
+ inline$storm_IoCallDriver$5$label_5#1:
+ goto inline$storm_IoCallDriver$5$label_6#1;
+
+ inline$storm_IoCallDriver$5$label_6#1:
+ call inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$5$label_9#1;
+
+ inline$storm_IoCallDriver$5$label_9#1:
+ goto inline$storm_IoCallDriver$5$label_9_true#1, inline$storm_IoCallDriver$5$label_9_false#1;
+
+ inline$storm_IoCallDriver$5$label_9_false#1:
+ assume inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$5$label_10#1;
+
+ inline$storm_IoCallDriver$5$label_9_true#1:
+ assume inline$storm_IoCallDriver$5$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$5$label_13#1;
+
+ inline$storm_IoCallDriver$5$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$5$anon12_Then#1, inline$storm_IoCallDriver$5$anon12_Else#1;
+
+ inline$storm_IoCallDriver$5$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$5$anon3#1;
+
+ inline$storm_IoCallDriver$5$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$5$label_14#1;
+
+ inline$storm_IoCallDriver$5$label_14#1:
+ goto inline$storm_IoCallDriver$5$label_14_true#1, inline$storm_IoCallDriver$5$label_14_false#1;
+
+ inline$storm_IoCallDriver$5$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$5$label_15#1;
+
+ inline$storm_IoCallDriver$5$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$5$label_1#1;
+
+ inline$storm_IoCallDriver$5$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$5$label_10#1;
+
+ inline$storm_IoCallDriver$5$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$6$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$6$Entry#1:
+ inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$6$start#1;
+
+ inline$IoSetNextIrpStackLocation$6$start#1:
+ inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$6$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$6$label_3_true#1, inline$IoSetNextIrpStackLocation$6$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$6$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$6$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_4#1:
+ call inline$IoSetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$6$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_7#1:
+ call inline$IoSetNextIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$6$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$6$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$6$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$6$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_5#1:
+ inline$IoSetNextIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$6$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$6$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$6$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$6$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$6$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$6$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$6$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$6$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$6$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$6$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$6$Return#1;
+
+ inline$IoSetNextIrpStackLocation$6$Return#1:
+ goto inline$storm_IoCallDriver$5$label_10$1#1;
+
+ inline$storm_IoCallDriver$5$label_10$1#1:
+ goto inline$storm_IoCallDriver$5$anon11_Then#1, inline$storm_IoCallDriver$5$anon11_Else#1;
+
+ inline$storm_IoCallDriver$5$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$5$anon1#1;
+
+ inline$storm_IoCallDriver$5$anon1#1:
+ goto inline$storm_IoCallDriver$5$label_18#1;
+
+ inline$storm_IoCallDriver$5$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$54$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$54$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$start#1:
+ inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$54$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$54$label_3_true#1, inline$IoGetCurrentIrpStackLocation$54$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$54$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$54$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$54$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$54$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$54$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$54$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$54$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$54$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$54$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$54$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$54$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$54$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$54$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$54$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$54$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$54$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$54$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$54$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$54$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$54$Return#1:
+ goto inline$storm_IoCallDriver$5$label_18$1#1;
+
+ inline$storm_IoCallDriver$5$label_18$1#1:
+ goto inline$storm_IoCallDriver$5$anon13_Then#1, inline$storm_IoCallDriver$5$anon13_Else#1;
+
+ inline$storm_IoCallDriver$5$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$5$anon6#1;
+
+ inline$storm_IoCallDriver$5$anon6#1:
+ goto inline$storm_IoCallDriver$5$label_21#1;
+
+ inline$storm_IoCallDriver$5$label_21#1:
+ goto inline$storm_IoCallDriver$5$label_22#1;
+
+ inline$storm_IoCallDriver$5$label_22#1:
+ goto inline$storm_IoCallDriver$5$label_23#1;
+
+ inline$storm_IoCallDriver$5$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$5$label_24#1;
+
+ inline$storm_IoCallDriver$5$label_24#1:
+ call inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$5$label_27#1;
+
+ inline$storm_IoCallDriver$5$label_27#1:
+ goto inline$storm_IoCallDriver$5$label_27_case_0#1, inline$storm_IoCallDriver$5$label_27_case_1#1, inline$storm_IoCallDriver$5$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$5$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$5$label_30#1;
+
+ inline$storm_IoCallDriver$5$label_30#1:
+ inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$5$label_31#1;
+
+ inline$storm_IoCallDriver$5$label_31#1:
+ goto inline$storm_IoCallDriver$5$label_32#1;
+
+ inline$storm_IoCallDriver$5$label_32#1:
+ goto inline$storm_IoCallDriver$5$label_33#1;
+
+ inline$storm_IoCallDriver$5$label_33#1:
+ goto inline$CallCompletionRoutine$10$Entry#1;
+
+ inline$CallCompletionRoutine$10$Entry#1:
+ inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$10$start#1;
+
+ inline$CallCompletionRoutine$10$start#1:
+ inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$10$label_3#1;
+
+ inline$CallCompletionRoutine$10$label_3#1:
+ goto inline$CallCompletionRoutine$10$label_4#1;
+
+ inline$CallCompletionRoutine$10$label_4#1:
+ goto inline$CallCompletionRoutine$10$label_5#1;
+
+ inline$CallCompletionRoutine$10$label_5#1:
+ goto inline$CallCompletionRoutine$10$label_6#1;
+
+ inline$CallCompletionRoutine$10$label_6#1:
+ goto inline$CallCompletionRoutine$10$label_7#1;
+
+ inline$CallCompletionRoutine$10$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$55$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$55$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$start#1:
+ inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$55$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$55$label_3_true#1, inline$IoGetCurrentIrpStackLocation$55$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$55$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$55$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$55$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$55$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$55$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$55$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$55$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$55$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$55$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$55$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$55$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$55$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$55$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$55$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$55$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$55$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$55$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$55$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$55$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$55$Return#1:
+ goto inline$CallCompletionRoutine$10$label_7$1#1;
+
+ inline$CallCompletionRoutine$10$label_7$1#1:
+ goto inline$CallCompletionRoutine$10$anon10_Then#1, inline$CallCompletionRoutine$10$anon10_Else#1;
+
+ inline$CallCompletionRoutine$10$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$10$anon1#1;
+
+ inline$CallCompletionRoutine$10$anon1#1:
+ goto inline$CallCompletionRoutine$10$label_10#1;
+
+ inline$CallCompletionRoutine$10$label_10#1:
+ goto inline$CallCompletionRoutine$10$label_11#1;
+
+ inline$CallCompletionRoutine$10$label_11#1:
+ havoc inline$CallCompletionRoutine$10$myNondetVar_0;
+ inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$myNondetVar_0;
+ goto inline$CallCompletionRoutine$10$label_12#1;
+
+ inline$CallCompletionRoutine$10$label_12#1:
+ havoc inline$CallCompletionRoutine$10$myNondetVar_0;
+ inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$myNondetVar_0;
+ goto inline$CallCompletionRoutine$10$label_13#1;
+
+ inline$CallCompletionRoutine$10$label_13#1:
+ havoc inline$CallCompletionRoutine$10$myNondetVar_0;
+ goto inline$CallCompletionRoutine$10$label_14#1;
+
+ inline$CallCompletionRoutine$10$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$56$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$56$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$start#1:
+ inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$56$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$56$label_3_true#1, inline$IoGetCurrentIrpStackLocation$56$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$56$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$56$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$56$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$56$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$56$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$56$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$56$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$56$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$56$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$56$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$56$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$56$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$56$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$56$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$56$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$56$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$56$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$56$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$56$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$56$Return#1:
+ goto inline$CallCompletionRoutine$10$label_14$1#1;
+
+ inline$CallCompletionRoutine$10$label_14$1#1:
+ goto inline$CallCompletionRoutine$10$anon11_Then#1, inline$CallCompletionRoutine$10$anon11_Else#1;
+
+ inline$CallCompletionRoutine$10$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$10$anon3#1;
+
+ inline$CallCompletionRoutine$10$anon3#1:
+ goto inline$CallCompletionRoutine$10$label_17#1;
+
+ inline$CallCompletionRoutine$10$label_17#1:
+ goto inline$CallCompletionRoutine$10$label_18#1;
+
+ inline$CallCompletionRoutine$10$label_18#1:
+ goto inline$CallCompletionRoutine$10$label_18_true#1, inline$CallCompletionRoutine$10$label_18_false#1;
+
+ inline$CallCompletionRoutine$10$label_18_false#1:
+ assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$10$label_1#1;
+
+ inline$CallCompletionRoutine$10$label_18_true#1:
+ assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$10$label_19#1;
+
+ inline$CallCompletionRoutine$10$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$10$label_20#1;
+
+ inline$CallCompletionRoutine$10$label_20#1:
+ goto inline$CallCompletionRoutine$10$label_20_icall_1#1, inline$CallCompletionRoutine$10$label_20_icall_2#1, inline$CallCompletionRoutine$10$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$10$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$10$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$10$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$10$Entry#1:
+ inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$10$start#1;
+
+ inline$BDLSystemPowerIoCompletion$10$start#1:
+ call inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$10$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_4#1:
+ inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_6#1:
+ inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$10$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$10$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$58$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$58$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$start#1:
+ inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$58$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$58$label_3_true#1, inline$IoGetCurrentIrpStackLocation$58$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$58$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$58$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$58$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$58$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$58$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$58$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$58$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$58$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$58$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$58$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$58$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$58$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$58$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$58$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$58$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$58$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$58$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$58$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$58$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$58$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon36_Then#1, inline$BDLSystemPowerIoCompletion$10$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_15#1:
+ goto inline$BDLGetDebugLevel$295$Entry#1;
+
+ inline$BDLGetDebugLevel$295$Entry#1:
+ goto inline$BDLGetDebugLevel$295$start#1;
+
+ inline$BDLGetDebugLevel$295$start#1:
+ goto inline$BDLGetDebugLevel$295$label_3#1;
+
+ inline$BDLGetDebugLevel$295$label_3#1:
+ havoc inline$BDLGetDebugLevel$295$myNondetVar_0;
+ inline$BDLGetDebugLevel$295$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$295$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$295$label_1#1;
+
+ inline$BDLGetDebugLevel$295$label_1#1:
+ goto inline$BDLGetDebugLevel$295$Return#1;
+
+ inline$BDLGetDebugLevel$295$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$295$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon37_Then#1, inline$BDLSystemPowerIoCompletion$10$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_18_true#1, inline$BDLSystemPowerIoCompletion$10$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_19#1:
+ goto inline$BDLGetDebugLevel$296$Entry#1;
+
+ inline$BDLGetDebugLevel$296$Entry#1:
+ goto inline$BDLGetDebugLevel$296$start#1;
+
+ inline$BDLGetDebugLevel$296$start#1:
+ goto inline$BDLGetDebugLevel$296$label_3#1;
+
+ inline$BDLGetDebugLevel$296$label_3#1:
+ havoc inline$BDLGetDebugLevel$296$myNondetVar_0;
+ inline$BDLGetDebugLevel$296$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$296$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$296$label_1#1;
+
+ inline$BDLGetDebugLevel$296$label_1#1:
+ goto inline$BDLGetDebugLevel$296$Return#1;
+
+ inline$BDLGetDebugLevel$296$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$296$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon38_Then#1, inline$BDLSystemPowerIoCompletion$10$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_28_true#1, inline$BDLSystemPowerIoCompletion$10$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_29#1:
+ goto inline$BDLGetDebugLevel$297$Entry#1;
+
+ inline$BDLGetDebugLevel$297$Entry#1:
+ goto inline$BDLGetDebugLevel$297$start#1;
+
+ inline$BDLGetDebugLevel$297$start#1:
+ goto inline$BDLGetDebugLevel$297$label_3#1;
+
+ inline$BDLGetDebugLevel$297$label_3#1:
+ havoc inline$BDLGetDebugLevel$297$myNondetVar_0;
+ inline$BDLGetDebugLevel$297$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$297$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$297$label_1#1;
+
+ inline$BDLGetDebugLevel$297$label_1#1:
+ goto inline$BDLGetDebugLevel$297$Return#1;
+
+ inline$BDLGetDebugLevel$297$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$297$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon39_Then#1, inline$BDLSystemPowerIoCompletion$10$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_38_true#1, inline$BDLSystemPowerIoCompletion$10$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_39_true#1, inline$BDLSystemPowerIoCompletion$10$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$10$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$10$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$10$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$10$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$10$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_106_true#1, inline$BDLSystemPowerIoCompletion$10$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$10$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$10$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$10$myNondetVar_0, inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$10$anon50_Then#1, inline$BDLSystemPowerIoCompletion$10$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_112#1:
+ inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_113_true#1, inline$BDLSystemPowerIoCompletion$10$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$10$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_117#1:
+ goto inline$BDLGetDebugLevel$304$Entry#1;
+
+ inline$BDLGetDebugLevel$304$Entry#1:
+ goto inline$BDLGetDebugLevel$304$start#1;
+
+ inline$BDLGetDebugLevel$304$start#1:
+ goto inline$BDLGetDebugLevel$304$label_3#1;
+
+ inline$BDLGetDebugLevel$304$label_3#1:
+ havoc inline$BDLGetDebugLevel$304$myNondetVar_0;
+ inline$BDLGetDebugLevel$304$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$304$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$304$label_1#1;
+
+ inline$BDLGetDebugLevel$304$label_1#1:
+ goto inline$BDLGetDebugLevel$304$Return#1;
+
+ inline$BDLGetDebugLevel$304$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$304$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon51_Then#1, inline$BDLSystemPowerIoCompletion$10$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_120_true#1, inline$BDLSystemPowerIoCompletion$10$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_121#1:
+ goto inline$BDLGetDebugLevel$305$Entry#1;
+
+ inline$BDLGetDebugLevel$305$Entry#1:
+ goto inline$BDLGetDebugLevel$305$start#1;
+
+ inline$BDLGetDebugLevel$305$start#1:
+ goto inline$BDLGetDebugLevel$305$label_3#1;
+
+ inline$BDLGetDebugLevel$305$label_3#1:
+ havoc inline$BDLGetDebugLevel$305$myNondetVar_0;
+ inline$BDLGetDebugLevel$305$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$305$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$305$label_1#1;
+
+ inline$BDLGetDebugLevel$305$label_1#1:
+ goto inline$BDLGetDebugLevel$305$Return#1;
+
+ inline$BDLGetDebugLevel$305$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$305$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon52_Then#1, inline$BDLSystemPowerIoCompletion$10$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_130_true#1, inline$BDLSystemPowerIoCompletion$10$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_131#1:
+ goto inline$BDLGetDebugLevel$306$Entry#1;
+
+ inline$BDLGetDebugLevel$306$Entry#1:
+ goto inline$BDLGetDebugLevel$306$start#1;
+
+ inline$BDLGetDebugLevel$306$start#1:
+ goto inline$BDLGetDebugLevel$306$label_3#1;
+
+ inline$BDLGetDebugLevel$306$label_3#1:
+ havoc inline$BDLGetDebugLevel$306$myNondetVar_0;
+ inline$BDLGetDebugLevel$306$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$306$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$306$label_1#1;
+
+ inline$BDLGetDebugLevel$306$label_1#1:
+ goto inline$BDLGetDebugLevel$306$Return#1;
+
+ inline$BDLGetDebugLevel$306$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$306$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon53_Then#1, inline$BDLSystemPowerIoCompletion$10$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_140_true#1, inline$BDLSystemPowerIoCompletion$10$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$10$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_115#1:
+ inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$10$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$10$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$10$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_43#1:
+ goto inline$BDLGetDebugLevel$298$Entry#1;
+
+ inline$BDLGetDebugLevel$298$Entry#1:
+ goto inline$BDLGetDebugLevel$298$start#1;
+
+ inline$BDLGetDebugLevel$298$start#1:
+ goto inline$BDLGetDebugLevel$298$label_3#1;
+
+ inline$BDLGetDebugLevel$298$label_3#1:
+ havoc inline$BDLGetDebugLevel$298$myNondetVar_0;
+ inline$BDLGetDebugLevel$298$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$298$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$298$label_1#1;
+
+ inline$BDLGetDebugLevel$298$label_1#1:
+ goto inline$BDLGetDebugLevel$298$Return#1;
+
+ inline$BDLGetDebugLevel$298$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$298$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon40_Then#1, inline$BDLSystemPowerIoCompletion$10$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_46_true#1, inline$BDLSystemPowerIoCompletion$10$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_47#1:
+ goto inline$BDLGetDebugLevel$299$Entry#1;
+
+ inline$BDLGetDebugLevel$299$Entry#1:
+ goto inline$BDLGetDebugLevel$299$start#1;
+
+ inline$BDLGetDebugLevel$299$start#1:
+ goto inline$BDLGetDebugLevel$299$label_3#1;
+
+ inline$BDLGetDebugLevel$299$label_3#1:
+ havoc inline$BDLGetDebugLevel$299$myNondetVar_0;
+ inline$BDLGetDebugLevel$299$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$299$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$299$label_1#1;
+
+ inline$BDLGetDebugLevel$299$label_1#1:
+ goto inline$BDLGetDebugLevel$299$Return#1;
+
+ inline$BDLGetDebugLevel$299$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$299$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon41_Then#1, inline$BDLSystemPowerIoCompletion$10$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_56_true#1, inline$BDLSystemPowerIoCompletion$10$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_57#1:
+ goto inline$BDLGetDebugLevel$300$Entry#1;
+
+ inline$BDLGetDebugLevel$300$Entry#1:
+ goto inline$BDLGetDebugLevel$300$start#1;
+
+ inline$BDLGetDebugLevel$300$start#1:
+ goto inline$BDLGetDebugLevel$300$label_3#1;
+
+ inline$BDLGetDebugLevel$300$label_3#1:
+ havoc inline$BDLGetDebugLevel$300$myNondetVar_0;
+ inline$BDLGetDebugLevel$300$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$300$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$300$label_1#1;
+
+ inline$BDLGetDebugLevel$300$label_1#1:
+ goto inline$BDLGetDebugLevel$300$Return#1;
+
+ inline$BDLGetDebugLevel$300$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$300$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon42_Then#1, inline$BDLSystemPowerIoCompletion$10$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_66_true#1, inline$BDLSystemPowerIoCompletion$10$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$10$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$10$anon43_Then#1, inline$BDLSystemPowerIoCompletion$10$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$10$anon44_Then#1, inline$BDLSystemPowerIoCompletion$10$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_74#1:
+ goto inline$storm_IoCompleteRequest$22$Entry#1;
+
+ inline$storm_IoCompleteRequest$22$Entry#1:
+ inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$10$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$22$start#1;
+
+ inline$storm_IoCompleteRequest$22$start#1:
+ inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$22$label_3#1;
+
+ inline$storm_IoCompleteRequest$22$label_3#1:
+ call inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$22$label_6#1;
+
+ inline$storm_IoCompleteRequest$22$label_6#1:
+ goto inline$storm_IoCompleteRequest$22$label_6_true#1, inline$storm_IoCompleteRequest$22$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$22$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$22$label_7#1;
+
+ inline$storm_IoCompleteRequest$22$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$22$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$22$label_8#1;
+
+ inline$storm_IoCompleteRequest$22$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$22$anon3_Then#1, inline$storm_IoCompleteRequest$22$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$22$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$22$anon1#1;
+
+ inline$storm_IoCompleteRequest$22$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$22$label_9#1;
+
+ inline$storm_IoCompleteRequest$22$label_9#1:
+ goto inline$storm_IoCompleteRequest$22$label_9_true#1, inline$storm_IoCompleteRequest$22$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$22$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$22$label_10#1;
+
+ inline$storm_IoCompleteRequest$22$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$22$label_1#1;
+
+ inline$storm_IoCompleteRequest$22$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$22$label_7#1;
+
+ inline$storm_IoCompleteRequest$22$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$22$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$22$label_1#1;
+
+ inline$storm_IoCompleteRequest$22$label_1#1:
+ goto inline$storm_IoCompleteRequest$22$Return#1;
+
+ inline$storm_IoCompleteRequest$22$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$22$Return#1;
+
+ inline$storm_IoCompleteRequest$22$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon45_Then#1, inline$BDLSystemPowerIoCompletion$10$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$10$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$10$anon46_Then#1, inline$BDLSystemPowerIoCompletion$10$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_80#1:
+ goto inline$BDLGetDebugLevel$301$Entry#1;
+
+ inline$BDLGetDebugLevel$301$Entry#1:
+ goto inline$BDLGetDebugLevel$301$start#1;
+
+ inline$BDLGetDebugLevel$301$start#1:
+ goto inline$BDLGetDebugLevel$301$label_3#1;
+
+ inline$BDLGetDebugLevel$301$label_3#1:
+ havoc inline$BDLGetDebugLevel$301$myNondetVar_0;
+ inline$BDLGetDebugLevel$301$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$301$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$301$label_1#1;
+
+ inline$BDLGetDebugLevel$301$label_1#1:
+ goto inline$BDLGetDebugLevel$301$Return#1;
+
+ inline$BDLGetDebugLevel$301$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$301$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon47_Then#1, inline$BDLSystemPowerIoCompletion$10$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_83_true#1, inline$BDLSystemPowerIoCompletion$10$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_84#1:
+ goto inline$BDLGetDebugLevel$302$Entry#1;
+
+ inline$BDLGetDebugLevel$302$Entry#1:
+ goto inline$BDLGetDebugLevel$302$start#1;
+
+ inline$BDLGetDebugLevel$302$start#1:
+ goto inline$BDLGetDebugLevel$302$label_3#1;
+
+ inline$BDLGetDebugLevel$302$label_3#1:
+ havoc inline$BDLGetDebugLevel$302$myNondetVar_0;
+ inline$BDLGetDebugLevel$302$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$302$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$302$label_1#1;
+
+ inline$BDLGetDebugLevel$302$label_1#1:
+ goto inline$BDLGetDebugLevel$302$Return#1;
+
+ inline$BDLGetDebugLevel$302$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$302$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon48_Then#1, inline$BDLSystemPowerIoCompletion$10$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_93_true#1, inline$BDLSystemPowerIoCompletion$10$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$10$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$10$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_94#1:
+ goto inline$BDLGetDebugLevel$303$Entry#1;
+
+ inline$BDLGetDebugLevel$303$Entry#1:
+ goto inline$BDLGetDebugLevel$303$start#1;
+
+ inline$BDLGetDebugLevel$303$start#1:
+ goto inline$BDLGetDebugLevel$303$label_3#1;
+
+ inline$BDLGetDebugLevel$303$label_3#1:
+ havoc inline$BDLGetDebugLevel$303$myNondetVar_0;
+ inline$BDLGetDebugLevel$303$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$303$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$303$label_1#1;
+
+ inline$BDLGetDebugLevel$303$label_1#1:
+ goto inline$BDLGetDebugLevel$303$Return#1;
+
+ inline$BDLGetDebugLevel$303$Return#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$303$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$10$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$10$anon49_Then#1, inline$BDLSystemPowerIoCompletion$10$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_103_true#1, inline$BDLSystemPowerIoCompletion$10$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$10$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$10$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$10$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_104#1:
+ inline$BDLSystemPowerIoCompletion$10$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$10$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$10$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$10$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$10$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$10$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$10$Return#1:
+ inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$10$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$10$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$10$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$10$anon14_Then#1, inline$CallCompletionRoutine$10$anon14_Else#1;
+
+ inline$CallCompletionRoutine$10$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$10$anon9#1;
+
+ inline$CallCompletionRoutine$10$anon9#1:
+ goto inline$CallCompletionRoutine$10$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$10$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$10$Return#1;
+
+ inline$CallCompletionRoutine$10$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$10$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$10$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$10$Entry#1:
+ inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$10$start#1;
+
+ inline$BDLDevicePowerIoCompletion$10$start#1:
+ call inline$BDLDevicePowerIoCompletion$10$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$10$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_4#1:
+ inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_6#1:
+ inline$BDLDevicePowerIoCompletion$10$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$10$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$10$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$57$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$57$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$start#1:
+ inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$57$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$57$label_3_true#1, inline$IoGetCurrentIrpStackLocation$57$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$57$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$57$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$57$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$57$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$57$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$57$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$57$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$57$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$57$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$57$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$57$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$57$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$57$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$57$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$57$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$57$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$57$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$57$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$57$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$57$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$57$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$57$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$57$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon30_Then#1, inline$BDLDevicePowerIoCompletion$10$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_13#1:
+ inline$BDLDevicePowerIoCompletion$10$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_17#1:
+ goto inline$BDLGetDebugLevel$286$Entry#1;
+
+ inline$BDLGetDebugLevel$286$Entry#1:
+ goto inline$BDLGetDebugLevel$286$start#1;
+
+ inline$BDLGetDebugLevel$286$start#1:
+ goto inline$BDLGetDebugLevel$286$label_3#1;
+
+ inline$BDLGetDebugLevel$286$label_3#1:
+ havoc inline$BDLGetDebugLevel$286$myNondetVar_0;
+ inline$BDLGetDebugLevel$286$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$286$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$286$label_1#1;
+
+ inline$BDLGetDebugLevel$286$label_1#1:
+ goto inline$BDLGetDebugLevel$286$Return#1;
+
+ inline$BDLGetDebugLevel$286$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$286$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon31_Then#1, inline$BDLDevicePowerIoCompletion$10$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_20_true#1, inline$BDLDevicePowerIoCompletion$10$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_21#1:
+ goto inline$BDLGetDebugLevel$287$Entry#1;
+
+ inline$BDLGetDebugLevel$287$Entry#1:
+ goto inline$BDLGetDebugLevel$287$start#1;
+
+ inline$BDLGetDebugLevel$287$start#1:
+ goto inline$BDLGetDebugLevel$287$label_3#1;
+
+ inline$BDLGetDebugLevel$287$label_3#1:
+ havoc inline$BDLGetDebugLevel$287$myNondetVar_0;
+ inline$BDLGetDebugLevel$287$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$287$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$287$label_1#1;
+
+ inline$BDLGetDebugLevel$287$label_1#1:
+ goto inline$BDLGetDebugLevel$287$Return#1;
+
+ inline$BDLGetDebugLevel$287$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$287$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon32_Then#1, inline$BDLDevicePowerIoCompletion$10$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_30_true#1, inline$BDLDevicePowerIoCompletion$10$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_31#1:
+ goto inline$BDLGetDebugLevel$288$Entry#1;
+
+ inline$BDLGetDebugLevel$288$Entry#1:
+ goto inline$BDLGetDebugLevel$288$start#1;
+
+ inline$BDLGetDebugLevel$288$start#1:
+ goto inline$BDLGetDebugLevel$288$label_3#1;
+
+ inline$BDLGetDebugLevel$288$label_3#1:
+ havoc inline$BDLGetDebugLevel$288$myNondetVar_0;
+ inline$BDLGetDebugLevel$288$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$288$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$288$label_1#1;
+
+ inline$BDLGetDebugLevel$288$label_1#1:
+ goto inline$BDLGetDebugLevel$288$Return#1;
+
+ inline$BDLGetDebugLevel$288$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$288$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon33_Then#1, inline$BDLDevicePowerIoCompletion$10$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_40_true#1, inline$BDLDevicePowerIoCompletion$10$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_41_true#1, inline$BDLDevicePowerIoCompletion$10$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$10$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$10$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_44_true#1, inline$BDLDevicePowerIoCompletion$10$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_45_true#1, inline$BDLDevicePowerIoCompletion$10$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$10$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$10$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$10$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_54#1:
+ inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$10$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_55_true#1, inline$BDLDevicePowerIoCompletion$10$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$10$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$10$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$10$anon34_Then#1, inline$BDLDevicePowerIoCompletion$10$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_59#1:
+ goto inline$BDLGetDebugLevel$289$Entry#1;
+
+ inline$BDLGetDebugLevel$289$Entry#1:
+ goto inline$BDLGetDebugLevel$289$start#1;
+
+ inline$BDLGetDebugLevel$289$start#1:
+ goto inline$BDLGetDebugLevel$289$label_3#1;
+
+ inline$BDLGetDebugLevel$289$label_3#1:
+ havoc inline$BDLGetDebugLevel$289$myNondetVar_0;
+ inline$BDLGetDebugLevel$289$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$289$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$289$label_1#1;
+
+ inline$BDLGetDebugLevel$289$label_1#1:
+ goto inline$BDLGetDebugLevel$289$Return#1;
+
+ inline$BDLGetDebugLevel$289$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$289$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon35_Then#1, inline$BDLDevicePowerIoCompletion$10$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_62_true#1, inline$BDLDevicePowerIoCompletion$10$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_63#1:
+ goto inline$BDLGetDebugLevel$290$Entry#1;
+
+ inline$BDLGetDebugLevel$290$Entry#1:
+ goto inline$BDLGetDebugLevel$290$start#1;
+
+ inline$BDLGetDebugLevel$290$start#1:
+ goto inline$BDLGetDebugLevel$290$label_3#1;
+
+ inline$BDLGetDebugLevel$290$label_3#1:
+ havoc inline$BDLGetDebugLevel$290$myNondetVar_0;
+ inline$BDLGetDebugLevel$290$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$290$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$290$label_1#1;
+
+ inline$BDLGetDebugLevel$290$label_1#1:
+ goto inline$BDLGetDebugLevel$290$Return#1;
+
+ inline$BDLGetDebugLevel$290$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$290$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon36_Then#1, inline$BDLDevicePowerIoCompletion$10$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_72_true#1, inline$BDLDevicePowerIoCompletion$10$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_73#1:
+ goto inline$BDLGetDebugLevel$291$Entry#1;
+
+ inline$BDLGetDebugLevel$291$Entry#1:
+ goto inline$BDLGetDebugLevel$291$start#1;
+
+ inline$BDLGetDebugLevel$291$start#1:
+ goto inline$BDLGetDebugLevel$291$label_3#1;
+
+ inline$BDLGetDebugLevel$291$label_3#1:
+ havoc inline$BDLGetDebugLevel$291$myNondetVar_0;
+ inline$BDLGetDebugLevel$291$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$291$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$291$label_1#1;
+
+ inline$BDLGetDebugLevel$291$label_1#1:
+ goto inline$BDLGetDebugLevel$291$Return#1;
+
+ inline$BDLGetDebugLevel$291$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$291$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon37_Then#1, inline$BDLDevicePowerIoCompletion$10$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_82_true#1, inline$BDLDevicePowerIoCompletion$10$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$10$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$10$anon38_Then#1, inline$BDLDevicePowerIoCompletion$10$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$10$anon39_Then#1, inline$BDLDevicePowerIoCompletion$10$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_92#1:
+ goto inline$storm_IoCompleteRequest$21$Entry#1;
+
+ inline$storm_IoCompleteRequest$21$Entry#1:
+ inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$10$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$21$start#1;
+
+ inline$storm_IoCompleteRequest$21$start#1:
+ inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$21$label_3#1;
+
+ inline$storm_IoCompleteRequest$21$label_3#1:
+ call inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$21$label_6#1;
+
+ inline$storm_IoCompleteRequest$21$label_6#1:
+ goto inline$storm_IoCompleteRequest$21$label_6_true#1, inline$storm_IoCompleteRequest$21$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$21$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$21$label_7#1;
+
+ inline$storm_IoCompleteRequest$21$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$21$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$21$label_8#1;
+
+ inline$storm_IoCompleteRequest$21$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$21$anon3_Then#1, inline$storm_IoCompleteRequest$21$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$21$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$21$anon1#1;
+
+ inline$storm_IoCompleteRequest$21$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$21$label_9#1;
+
+ inline$storm_IoCompleteRequest$21$label_9#1:
+ goto inline$storm_IoCompleteRequest$21$label_9_true#1, inline$storm_IoCompleteRequest$21$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$21$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$21$label_10#1;
+
+ inline$storm_IoCompleteRequest$21$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$21$label_1#1;
+
+ inline$storm_IoCompleteRequest$21$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$21$label_7#1;
+
+ inline$storm_IoCompleteRequest$21$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$21$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$21$label_1#1;
+
+ inline$storm_IoCompleteRequest$21$label_1#1:
+ goto inline$storm_IoCompleteRequest$21$Return#1;
+
+ inline$storm_IoCompleteRequest$21$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$21$Return#1;
+
+ inline$storm_IoCompleteRequest$21$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon40_Then#1, inline$BDLDevicePowerIoCompletion$10$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$10$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$10$anon41_Then#1, inline$BDLDevicePowerIoCompletion$10$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_98#1:
+ goto inline$BDLGetDebugLevel$292$Entry#1;
+
+ inline$BDLGetDebugLevel$292$Entry#1:
+ goto inline$BDLGetDebugLevel$292$start#1;
+
+ inline$BDLGetDebugLevel$292$start#1:
+ goto inline$BDLGetDebugLevel$292$label_3#1;
+
+ inline$BDLGetDebugLevel$292$label_3#1:
+ havoc inline$BDLGetDebugLevel$292$myNondetVar_0;
+ inline$BDLGetDebugLevel$292$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$292$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$292$label_1#1;
+
+ inline$BDLGetDebugLevel$292$label_1#1:
+ goto inline$BDLGetDebugLevel$292$Return#1;
+
+ inline$BDLGetDebugLevel$292$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$292$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon42_Then#1, inline$BDLDevicePowerIoCompletion$10$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_101_true#1, inline$BDLDevicePowerIoCompletion$10$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_102#1:
+ goto inline$BDLGetDebugLevel$293$Entry#1;
+
+ inline$BDLGetDebugLevel$293$Entry#1:
+ goto inline$BDLGetDebugLevel$293$start#1;
+
+ inline$BDLGetDebugLevel$293$start#1:
+ goto inline$BDLGetDebugLevel$293$label_3#1;
+
+ inline$BDLGetDebugLevel$293$label_3#1:
+ havoc inline$BDLGetDebugLevel$293$myNondetVar_0;
+ inline$BDLGetDebugLevel$293$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$293$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$293$label_1#1;
+
+ inline$BDLGetDebugLevel$293$label_1#1:
+ goto inline$BDLGetDebugLevel$293$Return#1;
+
+ inline$BDLGetDebugLevel$293$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$293$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon43_Then#1, inline$BDLDevicePowerIoCompletion$10$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_111_true#1, inline$BDLDevicePowerIoCompletion$10$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$10$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$10$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_112#1:
+ goto inline$BDLGetDebugLevel$294$Entry#1;
+
+ inline$BDLGetDebugLevel$294$Entry#1:
+ goto inline$BDLGetDebugLevel$294$start#1;
+
+ inline$BDLGetDebugLevel$294$start#1:
+ goto inline$BDLGetDebugLevel$294$label_3#1;
+
+ inline$BDLGetDebugLevel$294$label_3#1:
+ havoc inline$BDLGetDebugLevel$294$myNondetVar_0;
+ inline$BDLGetDebugLevel$294$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$294$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$294$label_1#1;
+
+ inline$BDLGetDebugLevel$294$label_1#1:
+ goto inline$BDLGetDebugLevel$294$Return#1;
+
+ inline$BDLGetDebugLevel$294$Return#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$294$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$10$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$10$anon44_Then#1, inline$BDLDevicePowerIoCompletion$10$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_121_true#1, inline$BDLDevicePowerIoCompletion$10$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$10$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$10$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$10$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_122#1:
+ inline$BDLDevicePowerIoCompletion$10$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$10$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$10$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$10$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$10$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$10$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$10$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$10$Return#1:
+ inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$10$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$10$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$10$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$10$anon13_Then#1, inline$CallCompletionRoutine$10$anon13_Else#1;
+
+ inline$CallCompletionRoutine$10$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$10$anon7#1;
+
+ inline$CallCompletionRoutine$10$anon7#1:
+ goto inline$CallCompletionRoutine$10$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$10$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$10$Return#1;
+
+ inline$CallCompletionRoutine$10$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$10$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$10$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$10$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$10$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$10$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$start#1:
+ inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$10$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$10$label_3_true#1, inline$BDLCallDriverCompletionRoutine$10$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$10$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$10$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$10$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$10$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$10$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_6#1:
+ goto inline$storm_KeSetEvent$12$Entry#1;
+
+ inline$storm_KeSetEvent$12$Entry#1:
+ inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$10$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$12$start#1;
+
+ inline$storm_KeSetEvent$12$start#1:
+ inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$12$label_3#1;
+
+ inline$storm_KeSetEvent$12$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$12$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$12$label_1#1;
+
+ inline$storm_KeSetEvent$12$label_1#1:
+ goto inline$storm_KeSetEvent$12$Return#1;
+
+ inline$storm_KeSetEvent$12$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$10$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$10$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$10$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$10$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$10$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$10$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$10$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$10$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$10$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$10$Return#1:
+ inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$10$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$10$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$10$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$10$anon12_Then#1, inline$CallCompletionRoutine$10$anon12_Else#1;
+
+ inline$CallCompletionRoutine$10$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$10$anon5#1;
+
+ inline$CallCompletionRoutine$10$anon5#1:
+ goto inline$CallCompletionRoutine$10$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$10$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$10$label_23#1;
+
+ inline$CallCompletionRoutine$10$label_23#1:
+ inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$10$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$10$label_24#1;
+
+ inline$CallCompletionRoutine$10$label_24#1:
+ goto inline$CallCompletionRoutine$10$label_24_true#1, inline$CallCompletionRoutine$10$label_24_false#1;
+
+ inline$CallCompletionRoutine$10$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$10$label_1#1;
+
+ inline$CallCompletionRoutine$10$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$10$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$10$label_25#1;
+
+ inline$CallCompletionRoutine$10$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$10$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$10$label_1#1;
+
+ inline$CallCompletionRoutine$10$label_1#1:
+ goto inline$CallCompletionRoutine$10$Return#1;
+
+ inline$CallCompletionRoutine$10$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$10$Return#1;
+
+ inline$CallCompletionRoutine$10$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$10$Return#1;
+
+ inline$CallCompletionRoutine$10$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$10$Return#1;
+
+ inline$CallCompletionRoutine$10$Return#1:
+ goto inline$storm_IoCallDriver$5$label_33$1#1;
+
+ inline$storm_IoCallDriver$5$label_33$1#1:
+ goto inline$storm_IoCallDriver$5$anon14_Then#1, inline$storm_IoCallDriver$5$anon14_Else#1;
+
+ inline$storm_IoCallDriver$5$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$5$anon8#1;
+
+ inline$storm_IoCallDriver$5$anon8#1:
+ goto inline$storm_IoCallDriver$5$label_36#1;
+
+ inline$storm_IoCallDriver$5$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$5$Return#1;
+
+ inline$storm_IoCallDriver$5$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$5$label_29#1;
+
+ inline$storm_IoCallDriver$5$label_29#1:
+ inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$5$label_37#1;
+
+ inline$storm_IoCallDriver$5$label_37#1:
+ goto inline$storm_IoCallDriver$5$label_38#1;
+
+ inline$storm_IoCallDriver$5$label_38#1:
+ goto inline$storm_IoCallDriver$5$label_39#1;
+
+ inline$storm_IoCallDriver$5$label_39#1:
+ goto inline$CallCompletionRoutine$11$Entry#1;
+
+ inline$CallCompletionRoutine$11$Entry#1:
+ inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$11$start#1;
+
+ inline$CallCompletionRoutine$11$start#1:
+ inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$11$label_3#1;
+
+ inline$CallCompletionRoutine$11$label_3#1:
+ goto inline$CallCompletionRoutine$11$label_4#1;
+
+ inline$CallCompletionRoutine$11$label_4#1:
+ goto inline$CallCompletionRoutine$11$label_5#1;
+
+ inline$CallCompletionRoutine$11$label_5#1:
+ goto inline$CallCompletionRoutine$11$label_6#1;
+
+ inline$CallCompletionRoutine$11$label_6#1:
+ goto inline$CallCompletionRoutine$11$label_7#1;
+
+ inline$CallCompletionRoutine$11$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$59$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$59$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$start#1:
+ inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$59$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$59$label_3_true#1, inline$IoGetCurrentIrpStackLocation$59$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$59$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$59$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$59$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$59$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$59$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$59$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$59$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$59$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$59$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$59$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$59$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$59$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$59$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$59$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$59$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$59$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$59$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$59$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$59$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$59$Return#1:
+ goto inline$CallCompletionRoutine$11$label_7$1#1;
+
+ inline$CallCompletionRoutine$11$label_7$1#1:
+ goto inline$CallCompletionRoutine$11$anon10_Then#1, inline$CallCompletionRoutine$11$anon10_Else#1;
+
+ inline$CallCompletionRoutine$11$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$11$anon1#1;
+
+ inline$CallCompletionRoutine$11$anon1#1:
+ goto inline$CallCompletionRoutine$11$label_10#1;
+
+ inline$CallCompletionRoutine$11$label_10#1:
+ goto inline$CallCompletionRoutine$11$label_11#1;
+
+ inline$CallCompletionRoutine$11$label_11#1:
+ havoc inline$CallCompletionRoutine$11$myNondetVar_0;
+ inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$myNondetVar_0;
+ goto inline$CallCompletionRoutine$11$label_12#1;
+
+ inline$CallCompletionRoutine$11$label_12#1:
+ havoc inline$CallCompletionRoutine$11$myNondetVar_0;
+ inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$myNondetVar_0;
+ goto inline$CallCompletionRoutine$11$label_13#1;
+
+ inline$CallCompletionRoutine$11$label_13#1:
+ havoc inline$CallCompletionRoutine$11$myNondetVar_0;
+ goto inline$CallCompletionRoutine$11$label_14#1;
+
+ inline$CallCompletionRoutine$11$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$60$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$60$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$start#1:
+ inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$60$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$60$label_3_true#1, inline$IoGetCurrentIrpStackLocation$60$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$60$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$60$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$60$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$60$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$60$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$60$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$60$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$60$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$60$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$60$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$60$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$60$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$60$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$60$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$60$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$60$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$60$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$60$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$60$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$60$Return#1:
+ goto inline$CallCompletionRoutine$11$label_14$1#1;
+
+ inline$CallCompletionRoutine$11$label_14$1#1:
+ goto inline$CallCompletionRoutine$11$anon11_Then#1, inline$CallCompletionRoutine$11$anon11_Else#1;
+
+ inline$CallCompletionRoutine$11$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$11$anon3#1;
+
+ inline$CallCompletionRoutine$11$anon3#1:
+ goto inline$CallCompletionRoutine$11$label_17#1;
+
+ inline$CallCompletionRoutine$11$label_17#1:
+ goto inline$CallCompletionRoutine$11$label_18#1;
+
+ inline$CallCompletionRoutine$11$label_18#1:
+ goto inline$CallCompletionRoutine$11$label_18_true#1, inline$CallCompletionRoutine$11$label_18_false#1;
+
+ inline$CallCompletionRoutine$11$label_18_false#1:
+ assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$11$label_1#1;
+
+ inline$CallCompletionRoutine$11$label_18_true#1:
+ assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$11$label_19#1;
+
+ inline$CallCompletionRoutine$11$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$11$label_20#1;
+
+ inline$CallCompletionRoutine$11$label_20#1:
+ goto inline$CallCompletionRoutine$11$label_20_icall_1#1, inline$CallCompletionRoutine$11$label_20_icall_2#1, inline$CallCompletionRoutine$11$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$11$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$11$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$11$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$11$Entry#1:
+ inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$11$start#1;
+
+ inline$BDLSystemPowerIoCompletion$11$start#1:
+ call inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$11$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_4#1:
+ inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_6#1:
+ inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$11$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$11$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$62$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$62$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$start#1:
+ inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$62$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$62$label_3_true#1, inline$IoGetCurrentIrpStackLocation$62$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$62$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$62$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$62$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$62$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$62$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$62$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$62$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$62$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$62$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$62$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$62$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$62$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$62$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$62$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$62$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$62$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$62$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$62$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$62$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$62$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon36_Then#1, inline$BDLSystemPowerIoCompletion$11$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_15#1:
+ goto inline$BDLGetDebugLevel$316$Entry#1;
+
+ inline$BDLGetDebugLevel$316$Entry#1:
+ goto inline$BDLGetDebugLevel$316$start#1;
+
+ inline$BDLGetDebugLevel$316$start#1:
+ goto inline$BDLGetDebugLevel$316$label_3#1;
+
+ inline$BDLGetDebugLevel$316$label_3#1:
+ havoc inline$BDLGetDebugLevel$316$myNondetVar_0;
+ inline$BDLGetDebugLevel$316$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$316$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$316$label_1#1;
+
+ inline$BDLGetDebugLevel$316$label_1#1:
+ goto inline$BDLGetDebugLevel$316$Return#1;
+
+ inline$BDLGetDebugLevel$316$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$316$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon37_Then#1, inline$BDLSystemPowerIoCompletion$11$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_18_true#1, inline$BDLSystemPowerIoCompletion$11$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_19#1:
+ goto inline$BDLGetDebugLevel$317$Entry#1;
+
+ inline$BDLGetDebugLevel$317$Entry#1:
+ goto inline$BDLGetDebugLevel$317$start#1;
+
+ inline$BDLGetDebugLevel$317$start#1:
+ goto inline$BDLGetDebugLevel$317$label_3#1;
+
+ inline$BDLGetDebugLevel$317$label_3#1:
+ havoc inline$BDLGetDebugLevel$317$myNondetVar_0;
+ inline$BDLGetDebugLevel$317$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$317$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$317$label_1#1;
+
+ inline$BDLGetDebugLevel$317$label_1#1:
+ goto inline$BDLGetDebugLevel$317$Return#1;
+
+ inline$BDLGetDebugLevel$317$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$317$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon38_Then#1, inline$BDLSystemPowerIoCompletion$11$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_28_true#1, inline$BDLSystemPowerIoCompletion$11$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_29#1:
+ goto inline$BDLGetDebugLevel$318$Entry#1;
+
+ inline$BDLGetDebugLevel$318$Entry#1:
+ goto inline$BDLGetDebugLevel$318$start#1;
+
+ inline$BDLGetDebugLevel$318$start#1:
+ goto inline$BDLGetDebugLevel$318$label_3#1;
+
+ inline$BDLGetDebugLevel$318$label_3#1:
+ havoc inline$BDLGetDebugLevel$318$myNondetVar_0;
+ inline$BDLGetDebugLevel$318$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$318$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$318$label_1#1;
+
+ inline$BDLGetDebugLevel$318$label_1#1:
+ goto inline$BDLGetDebugLevel$318$Return#1;
+
+ inline$BDLGetDebugLevel$318$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$318$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon39_Then#1, inline$BDLSystemPowerIoCompletion$11$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_38_true#1, inline$BDLSystemPowerIoCompletion$11$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_39_true#1, inline$BDLSystemPowerIoCompletion$11$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$11$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$11$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$11$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$11$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$11$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_106_true#1, inline$BDLSystemPowerIoCompletion$11$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$11$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$11$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$11$myNondetVar_0, inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$11$anon50_Then#1, inline$BDLSystemPowerIoCompletion$11$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_112#1:
+ inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_113_true#1, inline$BDLSystemPowerIoCompletion$11$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$11$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_117#1:
+ goto inline$BDLGetDebugLevel$325$Entry#1;
+
+ inline$BDLGetDebugLevel$325$Entry#1:
+ goto inline$BDLGetDebugLevel$325$start#1;
+
+ inline$BDLGetDebugLevel$325$start#1:
+ goto inline$BDLGetDebugLevel$325$label_3#1;
+
+ inline$BDLGetDebugLevel$325$label_3#1:
+ havoc inline$BDLGetDebugLevel$325$myNondetVar_0;
+ inline$BDLGetDebugLevel$325$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$325$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$325$label_1#1;
+
+ inline$BDLGetDebugLevel$325$label_1#1:
+ goto inline$BDLGetDebugLevel$325$Return#1;
+
+ inline$BDLGetDebugLevel$325$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$325$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon51_Then#1, inline$BDLSystemPowerIoCompletion$11$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_120_true#1, inline$BDLSystemPowerIoCompletion$11$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_121#1:
+ goto inline$BDLGetDebugLevel$326$Entry#1;
+
+ inline$BDLGetDebugLevel$326$Entry#1:
+ goto inline$BDLGetDebugLevel$326$start#1;
+
+ inline$BDLGetDebugLevel$326$start#1:
+ goto inline$BDLGetDebugLevel$326$label_3#1;
+
+ inline$BDLGetDebugLevel$326$label_3#1:
+ havoc inline$BDLGetDebugLevel$326$myNondetVar_0;
+ inline$BDLGetDebugLevel$326$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$326$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$326$label_1#1;
+
+ inline$BDLGetDebugLevel$326$label_1#1:
+ goto inline$BDLGetDebugLevel$326$Return#1;
+
+ inline$BDLGetDebugLevel$326$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$326$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon52_Then#1, inline$BDLSystemPowerIoCompletion$11$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_130_true#1, inline$BDLSystemPowerIoCompletion$11$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_131#1:
+ goto inline$BDLGetDebugLevel$327$Entry#1;
+
+ inline$BDLGetDebugLevel$327$Entry#1:
+ goto inline$BDLGetDebugLevel$327$start#1;
+
+ inline$BDLGetDebugLevel$327$start#1:
+ goto inline$BDLGetDebugLevel$327$label_3#1;
+
+ inline$BDLGetDebugLevel$327$label_3#1:
+ havoc inline$BDLGetDebugLevel$327$myNondetVar_0;
+ inline$BDLGetDebugLevel$327$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$327$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$327$label_1#1;
+
+ inline$BDLGetDebugLevel$327$label_1#1:
+ goto inline$BDLGetDebugLevel$327$Return#1;
+
+ inline$BDLGetDebugLevel$327$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$327$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon53_Then#1, inline$BDLSystemPowerIoCompletion$11$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_140_true#1, inline$BDLSystemPowerIoCompletion$11$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$11$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_115#1:
+ inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$11$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$11$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$11$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_43#1:
+ goto inline$BDLGetDebugLevel$319$Entry#1;
+
+ inline$BDLGetDebugLevel$319$Entry#1:
+ goto inline$BDLGetDebugLevel$319$start#1;
+
+ inline$BDLGetDebugLevel$319$start#1:
+ goto inline$BDLGetDebugLevel$319$label_3#1;
+
+ inline$BDLGetDebugLevel$319$label_3#1:
+ havoc inline$BDLGetDebugLevel$319$myNondetVar_0;
+ inline$BDLGetDebugLevel$319$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$319$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$319$label_1#1;
+
+ inline$BDLGetDebugLevel$319$label_1#1:
+ goto inline$BDLGetDebugLevel$319$Return#1;
+
+ inline$BDLGetDebugLevel$319$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$319$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon40_Then#1, inline$BDLSystemPowerIoCompletion$11$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_46_true#1, inline$BDLSystemPowerIoCompletion$11$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_47#1:
+ goto inline$BDLGetDebugLevel$320$Entry#1;
+
+ inline$BDLGetDebugLevel$320$Entry#1:
+ goto inline$BDLGetDebugLevel$320$start#1;
+
+ inline$BDLGetDebugLevel$320$start#1:
+ goto inline$BDLGetDebugLevel$320$label_3#1;
+
+ inline$BDLGetDebugLevel$320$label_3#1:
+ havoc inline$BDLGetDebugLevel$320$myNondetVar_0;
+ inline$BDLGetDebugLevel$320$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$320$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$320$label_1#1;
+
+ inline$BDLGetDebugLevel$320$label_1#1:
+ goto inline$BDLGetDebugLevel$320$Return#1;
+
+ inline$BDLGetDebugLevel$320$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$320$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon41_Then#1, inline$BDLSystemPowerIoCompletion$11$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_56_true#1, inline$BDLSystemPowerIoCompletion$11$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_57#1:
+ goto inline$BDLGetDebugLevel$321$Entry#1;
+
+ inline$BDLGetDebugLevel$321$Entry#1:
+ goto inline$BDLGetDebugLevel$321$start#1;
+
+ inline$BDLGetDebugLevel$321$start#1:
+ goto inline$BDLGetDebugLevel$321$label_3#1;
+
+ inline$BDLGetDebugLevel$321$label_3#1:
+ havoc inline$BDLGetDebugLevel$321$myNondetVar_0;
+ inline$BDLGetDebugLevel$321$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$321$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$321$label_1#1;
+
+ inline$BDLGetDebugLevel$321$label_1#1:
+ goto inline$BDLGetDebugLevel$321$Return#1;
+
+ inline$BDLGetDebugLevel$321$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$321$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon42_Then#1, inline$BDLSystemPowerIoCompletion$11$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_66_true#1, inline$BDLSystemPowerIoCompletion$11$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$11$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$11$anon43_Then#1, inline$BDLSystemPowerIoCompletion$11$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$11$anon44_Then#1, inline$BDLSystemPowerIoCompletion$11$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_74#1:
+ goto inline$storm_IoCompleteRequest$24$Entry#1;
+
+ inline$storm_IoCompleteRequest$24$Entry#1:
+ inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$11$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$24$start#1;
+
+ inline$storm_IoCompleteRequest$24$start#1:
+ inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$24$label_3#1;
+
+ inline$storm_IoCompleteRequest$24$label_3#1:
+ call inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$24$label_6#1;
+
+ inline$storm_IoCompleteRequest$24$label_6#1:
+ goto inline$storm_IoCompleteRequest$24$label_6_true#1, inline$storm_IoCompleteRequest$24$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$24$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$24$label_7#1;
+
+ inline$storm_IoCompleteRequest$24$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$24$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$24$label_8#1;
+
+ inline$storm_IoCompleteRequest$24$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$24$anon3_Then#1, inline$storm_IoCompleteRequest$24$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$24$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$24$anon1#1;
+
+ inline$storm_IoCompleteRequest$24$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$24$label_9#1;
+
+ inline$storm_IoCompleteRequest$24$label_9#1:
+ goto inline$storm_IoCompleteRequest$24$label_9_true#1, inline$storm_IoCompleteRequest$24$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$24$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$24$label_10#1;
+
+ inline$storm_IoCompleteRequest$24$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$24$label_1#1;
+
+ inline$storm_IoCompleteRequest$24$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$24$label_7#1;
+
+ inline$storm_IoCompleteRequest$24$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$24$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$24$label_1#1;
+
+ inline$storm_IoCompleteRequest$24$label_1#1:
+ goto inline$storm_IoCompleteRequest$24$Return#1;
+
+ inline$storm_IoCompleteRequest$24$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$24$Return#1;
+
+ inline$storm_IoCompleteRequest$24$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon45_Then#1, inline$BDLSystemPowerIoCompletion$11$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$11$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$11$anon46_Then#1, inline$BDLSystemPowerIoCompletion$11$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_80#1:
+ goto inline$BDLGetDebugLevel$322$Entry#1;
+
+ inline$BDLGetDebugLevel$322$Entry#1:
+ goto inline$BDLGetDebugLevel$322$start#1;
+
+ inline$BDLGetDebugLevel$322$start#1:
+ goto inline$BDLGetDebugLevel$322$label_3#1;
+
+ inline$BDLGetDebugLevel$322$label_3#1:
+ havoc inline$BDLGetDebugLevel$322$myNondetVar_0;
+ inline$BDLGetDebugLevel$322$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$322$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$322$label_1#1;
+
+ inline$BDLGetDebugLevel$322$label_1#1:
+ goto inline$BDLGetDebugLevel$322$Return#1;
+
+ inline$BDLGetDebugLevel$322$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$322$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon47_Then#1, inline$BDLSystemPowerIoCompletion$11$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_83_true#1, inline$BDLSystemPowerIoCompletion$11$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_84#1:
+ goto inline$BDLGetDebugLevel$323$Entry#1;
+
+ inline$BDLGetDebugLevel$323$Entry#1:
+ goto inline$BDLGetDebugLevel$323$start#1;
+
+ inline$BDLGetDebugLevel$323$start#1:
+ goto inline$BDLGetDebugLevel$323$label_3#1;
+
+ inline$BDLGetDebugLevel$323$label_3#1:
+ havoc inline$BDLGetDebugLevel$323$myNondetVar_0;
+ inline$BDLGetDebugLevel$323$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$323$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$323$label_1#1;
+
+ inline$BDLGetDebugLevel$323$label_1#1:
+ goto inline$BDLGetDebugLevel$323$Return#1;
+
+ inline$BDLGetDebugLevel$323$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$323$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon48_Then#1, inline$BDLSystemPowerIoCompletion$11$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_93_true#1, inline$BDLSystemPowerIoCompletion$11$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$11$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$11$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_94#1:
+ goto inline$BDLGetDebugLevel$324$Entry#1;
+
+ inline$BDLGetDebugLevel$324$Entry#1:
+ goto inline$BDLGetDebugLevel$324$start#1;
+
+ inline$BDLGetDebugLevel$324$start#1:
+ goto inline$BDLGetDebugLevel$324$label_3#1;
+
+ inline$BDLGetDebugLevel$324$label_3#1:
+ havoc inline$BDLGetDebugLevel$324$myNondetVar_0;
+ inline$BDLGetDebugLevel$324$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$324$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$324$label_1#1;
+
+ inline$BDLGetDebugLevel$324$label_1#1:
+ goto inline$BDLGetDebugLevel$324$Return#1;
+
+ inline$BDLGetDebugLevel$324$Return#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$324$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$11$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$11$anon49_Then#1, inline$BDLSystemPowerIoCompletion$11$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_103_true#1, inline$BDLSystemPowerIoCompletion$11$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$11$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$11$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$11$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_104#1:
+ inline$BDLSystemPowerIoCompletion$11$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$11$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$11$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$11$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$11$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$11$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$11$Return#1:
+ inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$11$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$11$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$11$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$11$anon14_Then#1, inline$CallCompletionRoutine$11$anon14_Else#1;
+
+ inline$CallCompletionRoutine$11$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$11$anon9#1;
+
+ inline$CallCompletionRoutine$11$anon9#1:
+ goto inline$CallCompletionRoutine$11$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$11$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$11$Return#1;
+
+ inline$CallCompletionRoutine$11$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$11$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$11$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$11$Entry#1:
+ inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$11$start#1;
+
+ inline$BDLDevicePowerIoCompletion$11$start#1:
+ call inline$BDLDevicePowerIoCompletion$11$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$11$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_4#1:
+ inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_6#1:
+ inline$BDLDevicePowerIoCompletion$11$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$11$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$11$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$61$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$61$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$start#1:
+ inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$61$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$61$label_3_true#1, inline$IoGetCurrentIrpStackLocation$61$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$61$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$61$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$61$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$61$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$61$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$61$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$61$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$61$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$61$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$61$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$61$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$61$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$61$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$61$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$61$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$61$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$61$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$61$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$61$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$61$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$61$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$61$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$61$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon30_Then#1, inline$BDLDevicePowerIoCompletion$11$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_13#1:
+ inline$BDLDevicePowerIoCompletion$11$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_17#1:
+ goto inline$BDLGetDebugLevel$307$Entry#1;
+
+ inline$BDLGetDebugLevel$307$Entry#1:
+ goto inline$BDLGetDebugLevel$307$start#1;
+
+ inline$BDLGetDebugLevel$307$start#1:
+ goto inline$BDLGetDebugLevel$307$label_3#1;
+
+ inline$BDLGetDebugLevel$307$label_3#1:
+ havoc inline$BDLGetDebugLevel$307$myNondetVar_0;
+ inline$BDLGetDebugLevel$307$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$307$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$307$label_1#1;
+
+ inline$BDLGetDebugLevel$307$label_1#1:
+ goto inline$BDLGetDebugLevel$307$Return#1;
+
+ inline$BDLGetDebugLevel$307$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$307$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon31_Then#1, inline$BDLDevicePowerIoCompletion$11$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_20_true#1, inline$BDLDevicePowerIoCompletion$11$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_21#1:
+ goto inline$BDLGetDebugLevel$308$Entry#1;
+
+ inline$BDLGetDebugLevel$308$Entry#1:
+ goto inline$BDLGetDebugLevel$308$start#1;
+
+ inline$BDLGetDebugLevel$308$start#1:
+ goto inline$BDLGetDebugLevel$308$label_3#1;
+
+ inline$BDLGetDebugLevel$308$label_3#1:
+ havoc inline$BDLGetDebugLevel$308$myNondetVar_0;
+ inline$BDLGetDebugLevel$308$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$308$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$308$label_1#1;
+
+ inline$BDLGetDebugLevel$308$label_1#1:
+ goto inline$BDLGetDebugLevel$308$Return#1;
+
+ inline$BDLGetDebugLevel$308$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$308$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon32_Then#1, inline$BDLDevicePowerIoCompletion$11$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_30_true#1, inline$BDLDevicePowerIoCompletion$11$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_31#1:
+ goto inline$BDLGetDebugLevel$309$Entry#1;
+
+ inline$BDLGetDebugLevel$309$Entry#1:
+ goto inline$BDLGetDebugLevel$309$start#1;
+
+ inline$BDLGetDebugLevel$309$start#1:
+ goto inline$BDLGetDebugLevel$309$label_3#1;
+
+ inline$BDLGetDebugLevel$309$label_3#1:
+ havoc inline$BDLGetDebugLevel$309$myNondetVar_0;
+ inline$BDLGetDebugLevel$309$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$309$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$309$label_1#1;
+
+ inline$BDLGetDebugLevel$309$label_1#1:
+ goto inline$BDLGetDebugLevel$309$Return#1;
+
+ inline$BDLGetDebugLevel$309$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$309$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon33_Then#1, inline$BDLDevicePowerIoCompletion$11$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_40_true#1, inline$BDLDevicePowerIoCompletion$11$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_41_true#1, inline$BDLDevicePowerIoCompletion$11$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$11$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$11$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_44_true#1, inline$BDLDevicePowerIoCompletion$11$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_45_true#1, inline$BDLDevicePowerIoCompletion$11$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$11$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$11$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$11$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_54#1:
+ inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$11$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_55_true#1, inline$BDLDevicePowerIoCompletion$11$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$11$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$11$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$11$anon34_Then#1, inline$BDLDevicePowerIoCompletion$11$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_59#1:
+ goto inline$BDLGetDebugLevel$310$Entry#1;
+
+ inline$BDLGetDebugLevel$310$Entry#1:
+ goto inline$BDLGetDebugLevel$310$start#1;
+
+ inline$BDLGetDebugLevel$310$start#1:
+ goto inline$BDLGetDebugLevel$310$label_3#1;
+
+ inline$BDLGetDebugLevel$310$label_3#1:
+ havoc inline$BDLGetDebugLevel$310$myNondetVar_0;
+ inline$BDLGetDebugLevel$310$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$310$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$310$label_1#1;
+
+ inline$BDLGetDebugLevel$310$label_1#1:
+ goto inline$BDLGetDebugLevel$310$Return#1;
+
+ inline$BDLGetDebugLevel$310$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$310$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon35_Then#1, inline$BDLDevicePowerIoCompletion$11$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_62_true#1, inline$BDLDevicePowerIoCompletion$11$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_63#1:
+ goto inline$BDLGetDebugLevel$311$Entry#1;
+
+ inline$BDLGetDebugLevel$311$Entry#1:
+ goto inline$BDLGetDebugLevel$311$start#1;
+
+ inline$BDLGetDebugLevel$311$start#1:
+ goto inline$BDLGetDebugLevel$311$label_3#1;
+
+ inline$BDLGetDebugLevel$311$label_3#1:
+ havoc inline$BDLGetDebugLevel$311$myNondetVar_0;
+ inline$BDLGetDebugLevel$311$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$311$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$311$label_1#1;
+
+ inline$BDLGetDebugLevel$311$label_1#1:
+ goto inline$BDLGetDebugLevel$311$Return#1;
+
+ inline$BDLGetDebugLevel$311$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$311$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon36_Then#1, inline$BDLDevicePowerIoCompletion$11$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_72_true#1, inline$BDLDevicePowerIoCompletion$11$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_73#1:
+ goto inline$BDLGetDebugLevel$312$Entry#1;
+
+ inline$BDLGetDebugLevel$312$Entry#1:
+ goto inline$BDLGetDebugLevel$312$start#1;
+
+ inline$BDLGetDebugLevel$312$start#1:
+ goto inline$BDLGetDebugLevel$312$label_3#1;
+
+ inline$BDLGetDebugLevel$312$label_3#1:
+ havoc inline$BDLGetDebugLevel$312$myNondetVar_0;
+ inline$BDLGetDebugLevel$312$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$312$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$312$label_1#1;
+
+ inline$BDLGetDebugLevel$312$label_1#1:
+ goto inline$BDLGetDebugLevel$312$Return#1;
+
+ inline$BDLGetDebugLevel$312$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$312$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon37_Then#1, inline$BDLDevicePowerIoCompletion$11$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_82_true#1, inline$BDLDevicePowerIoCompletion$11$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$11$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$11$anon38_Then#1, inline$BDLDevicePowerIoCompletion$11$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$11$anon39_Then#1, inline$BDLDevicePowerIoCompletion$11$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_92#1:
+ goto inline$storm_IoCompleteRequest$23$Entry#1;
+
+ inline$storm_IoCompleteRequest$23$Entry#1:
+ inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$11$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$23$start#1;
+
+ inline$storm_IoCompleteRequest$23$start#1:
+ inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$23$label_3#1;
+
+ inline$storm_IoCompleteRequest$23$label_3#1:
+ call inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$23$label_6#1;
+
+ inline$storm_IoCompleteRequest$23$label_6#1:
+ goto inline$storm_IoCompleteRequest$23$label_6_true#1, inline$storm_IoCompleteRequest$23$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$23$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$23$label_7#1;
+
+ inline$storm_IoCompleteRequest$23$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$23$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$23$label_8#1;
+
+ inline$storm_IoCompleteRequest$23$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$23$anon3_Then#1, inline$storm_IoCompleteRequest$23$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$23$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$23$anon1#1;
+
+ inline$storm_IoCompleteRequest$23$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$23$label_9#1;
+
+ inline$storm_IoCompleteRequest$23$label_9#1:
+ goto inline$storm_IoCompleteRequest$23$label_9_true#1, inline$storm_IoCompleteRequest$23$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$23$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$23$label_10#1;
+
+ inline$storm_IoCompleteRequest$23$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$23$label_1#1;
+
+ inline$storm_IoCompleteRequest$23$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$23$label_7#1;
+
+ inline$storm_IoCompleteRequest$23$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$23$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$23$label_1#1;
+
+ inline$storm_IoCompleteRequest$23$label_1#1:
+ goto inline$storm_IoCompleteRequest$23$Return#1;
+
+ inline$storm_IoCompleteRequest$23$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$23$Return#1;
+
+ inline$storm_IoCompleteRequest$23$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon40_Then#1, inline$BDLDevicePowerIoCompletion$11$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$11$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$11$anon41_Then#1, inline$BDLDevicePowerIoCompletion$11$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_98#1:
+ goto inline$BDLGetDebugLevel$313$Entry#1;
+
+ inline$BDLGetDebugLevel$313$Entry#1:
+ goto inline$BDLGetDebugLevel$313$start#1;
+
+ inline$BDLGetDebugLevel$313$start#1:
+ goto inline$BDLGetDebugLevel$313$label_3#1;
+
+ inline$BDLGetDebugLevel$313$label_3#1:
+ havoc inline$BDLGetDebugLevel$313$myNondetVar_0;
+ inline$BDLGetDebugLevel$313$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$313$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$313$label_1#1;
+
+ inline$BDLGetDebugLevel$313$label_1#1:
+ goto inline$BDLGetDebugLevel$313$Return#1;
+
+ inline$BDLGetDebugLevel$313$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$313$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon42_Then#1, inline$BDLDevicePowerIoCompletion$11$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_101_true#1, inline$BDLDevicePowerIoCompletion$11$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_102#1:
+ goto inline$BDLGetDebugLevel$314$Entry#1;
+
+ inline$BDLGetDebugLevel$314$Entry#1:
+ goto inline$BDLGetDebugLevel$314$start#1;
+
+ inline$BDLGetDebugLevel$314$start#1:
+ goto inline$BDLGetDebugLevel$314$label_3#1;
+
+ inline$BDLGetDebugLevel$314$label_3#1:
+ havoc inline$BDLGetDebugLevel$314$myNondetVar_0;
+ inline$BDLGetDebugLevel$314$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$314$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$314$label_1#1;
+
+ inline$BDLGetDebugLevel$314$label_1#1:
+ goto inline$BDLGetDebugLevel$314$Return#1;
+
+ inline$BDLGetDebugLevel$314$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$314$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon43_Then#1, inline$BDLDevicePowerIoCompletion$11$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_111_true#1, inline$BDLDevicePowerIoCompletion$11$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$11$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$11$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_112#1:
+ goto inline$BDLGetDebugLevel$315$Entry#1;
+
+ inline$BDLGetDebugLevel$315$Entry#1:
+ goto inline$BDLGetDebugLevel$315$start#1;
+
+ inline$BDLGetDebugLevel$315$start#1:
+ goto inline$BDLGetDebugLevel$315$label_3#1;
+
+ inline$BDLGetDebugLevel$315$label_3#1:
+ havoc inline$BDLGetDebugLevel$315$myNondetVar_0;
+ inline$BDLGetDebugLevel$315$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$315$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$315$label_1#1;
+
+ inline$BDLGetDebugLevel$315$label_1#1:
+ goto inline$BDLGetDebugLevel$315$Return#1;
+
+ inline$BDLGetDebugLevel$315$Return#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$315$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$11$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$11$anon44_Then#1, inline$BDLDevicePowerIoCompletion$11$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_121_true#1, inline$BDLDevicePowerIoCompletion$11$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$11$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$11$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$11$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_122#1:
+ inline$BDLDevicePowerIoCompletion$11$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$11$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$11$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$11$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$11$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$11$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$11$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$11$Return#1:
+ inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$11$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$11$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$11$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$11$anon13_Then#1, inline$CallCompletionRoutine$11$anon13_Else#1;
+
+ inline$CallCompletionRoutine$11$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$11$anon7#1;
+
+ inline$CallCompletionRoutine$11$anon7#1:
+ goto inline$CallCompletionRoutine$11$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$11$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$11$Return#1;
+
+ inline$CallCompletionRoutine$11$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$11$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$11$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$11$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$11$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$11$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$start#1:
+ inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$11$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$11$label_3_true#1, inline$BDLCallDriverCompletionRoutine$11$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$11$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$11$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$11$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$11$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$11$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_6#1:
+ goto inline$storm_KeSetEvent$13$Entry#1;
+
+ inline$storm_KeSetEvent$13$Entry#1:
+ inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$11$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$13$start#1;
+
+ inline$storm_KeSetEvent$13$start#1:
+ inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$13$label_3#1;
+
+ inline$storm_KeSetEvent$13$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$13$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$13$label_1#1;
+
+ inline$storm_KeSetEvent$13$label_1#1:
+ goto inline$storm_KeSetEvent$13$Return#1;
+
+ inline$storm_KeSetEvent$13$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$11$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$11$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$11$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$11$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$11$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$11$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$11$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$11$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$11$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$11$Return#1:
+ inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$11$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$11$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$11$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$11$anon12_Then#1, inline$CallCompletionRoutine$11$anon12_Else#1;
+
+ inline$CallCompletionRoutine$11$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$11$anon5#1;
+
+ inline$CallCompletionRoutine$11$anon5#1:
+ goto inline$CallCompletionRoutine$11$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$11$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$11$label_23#1;
+
+ inline$CallCompletionRoutine$11$label_23#1:
+ inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$11$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$11$label_24#1;
+
+ inline$CallCompletionRoutine$11$label_24#1:
+ goto inline$CallCompletionRoutine$11$label_24_true#1, inline$CallCompletionRoutine$11$label_24_false#1;
+
+ inline$CallCompletionRoutine$11$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$11$label_1#1;
+
+ inline$CallCompletionRoutine$11$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$11$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$11$label_25#1;
+
+ inline$CallCompletionRoutine$11$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$11$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$11$label_1#1;
+
+ inline$CallCompletionRoutine$11$label_1#1:
+ goto inline$CallCompletionRoutine$11$Return#1;
+
+ inline$CallCompletionRoutine$11$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$11$Return#1;
+
+ inline$CallCompletionRoutine$11$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$11$Return#1;
+
+ inline$CallCompletionRoutine$11$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$11$Return#1;
+
+ inline$CallCompletionRoutine$11$Return#1:
+ goto inline$storm_IoCallDriver$5$label_39$1#1;
+
+ inline$storm_IoCallDriver$5$label_39$1#1:
+ goto inline$storm_IoCallDriver$5$anon15_Then#1, inline$storm_IoCallDriver$5$anon15_Else#1;
+
+ inline$storm_IoCallDriver$5$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$5$anon10#1;
+
+ inline$storm_IoCallDriver$5$anon10#1:
+ goto inline$storm_IoCallDriver$5$label_36#1;
+
+ inline$storm_IoCallDriver$5$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$5$Return#1;
+
+ inline$storm_IoCallDriver$5$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$5$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$5$label_28#1;
+
+ inline$storm_IoCallDriver$5$label_28#1:
+ inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$5$label_42#1;
+
+ inline$storm_IoCallDriver$5$label_42#1:
+ goto inline$storm_IoCallDriver$5$label_43#1;
+
+ inline$storm_IoCallDriver$5$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$5$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$5$label_36#1;
+
+ inline$storm_IoCallDriver$5$label_36#1:
+ inline$storm_IoCallDriver$5$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$5$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$5$label_1#1;
+
+ inline$storm_IoCallDriver$5$label_1#1:
+ goto inline$storm_IoCallDriver$5$Return#1;
+
+ inline$storm_IoCallDriver$5$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$5$Return#1;
+
+ inline$storm_IoCallDriver$5$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$5$Return#1;
+
+ inline$storm_IoCallDriver$5$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$5$Return#1;
+
+ inline$storm_IoCallDriver$5$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$5$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_19$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_19$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon20_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon9#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_42#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_42#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_IoCallDriver$108.29$4$;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_18_true#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_22#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_22#1:
+ call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon21_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon21_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon11#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon11#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_25#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_25#1:
+ goto inline$storm_PoCallDriver$2$Entry#1;
+
+ inline$storm_PoCallDriver$2$Entry#1:
+ inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_PoCallDriver$2$start#1;
+
+ inline$storm_PoCallDriver$2$start#1:
+ inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8_.1;
+ goto inline$storm_PoCallDriver$2$label_3#1;
+
+ inline$storm_PoCallDriver$2$label_3#1:
+ goto inline$storm_IoCallDriver$6$Entry#1;
+
+ inline$storm_IoCallDriver$6$Entry#1:
+ inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$2$$Irp$2$496.14$storm_PoCallDriver$8;
+ goto inline$storm_IoCallDriver$6$start#1;
+
+ inline$storm_IoCallDriver$6$start#1:
+ inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$6$label_3#1;
+
+ inline$storm_IoCallDriver$6$label_3#1:
+ goto inline$storm_IoCallDriver$6$label_4#1;
+
+ inline$storm_IoCallDriver$6$label_4#1:
+ goto inline$storm_IoCallDriver$6$label_5#1;
+
+ inline$storm_IoCallDriver$6$label_5#1:
+ goto inline$storm_IoCallDriver$6$label_6#1;
+
+ inline$storm_IoCallDriver$6$label_6#1:
+ call inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$6$label_9#1;
+
+ inline$storm_IoCallDriver$6$label_9#1:
+ goto inline$storm_IoCallDriver$6$label_9_true#1, inline$storm_IoCallDriver$6$label_9_false#1;
+
+ inline$storm_IoCallDriver$6$label_9_false#1:
+ assume inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$6$label_10#1;
+
+ inline$storm_IoCallDriver$6$label_9_true#1:
+ assume inline$storm_IoCallDriver$6$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$6$label_13#1;
+
+ inline$storm_IoCallDriver$6$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$6$anon12_Then#1, inline$storm_IoCallDriver$6$anon12_Else#1;
+
+ inline$storm_IoCallDriver$6$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$6$anon3#1;
+
+ inline$storm_IoCallDriver$6$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$6$label_14#1;
+
+ inline$storm_IoCallDriver$6$label_14#1:
+ goto inline$storm_IoCallDriver$6$label_14_true#1, inline$storm_IoCallDriver$6$label_14_false#1;
+
+ inline$storm_IoCallDriver$6$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$6$label_15#1;
+
+ inline$storm_IoCallDriver$6$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$6$label_1#1;
+
+ inline$storm_IoCallDriver$6$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$6$label_10#1;
+
+ inline$storm_IoCallDriver$6$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$7$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$7$Entry#1:
+ inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$7$start#1;
+
+ inline$IoSetNextIrpStackLocation$7$start#1:
+ inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$7$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$7$label_3_true#1, inline$IoSetNextIrpStackLocation$7$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$7$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$7$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_4#1:
+ call inline$IoSetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$7$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_7#1:
+ call inline$IoSetNextIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$7$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$7$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$7$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$7$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_5#1:
+ inline$IoSetNextIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$7$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$7$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$7$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$7$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$7$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$7$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$7$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$7$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$7$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$7$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$7$Return#1;
+
+ inline$IoSetNextIrpStackLocation$7$Return#1:
+ goto inline$storm_IoCallDriver$6$label_10$1#1;
+
+ inline$storm_IoCallDriver$6$label_10$1#1:
+ goto inline$storm_IoCallDriver$6$anon11_Then#1, inline$storm_IoCallDriver$6$anon11_Else#1;
+
+ inline$storm_IoCallDriver$6$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$6$anon1#1;
+
+ inline$storm_IoCallDriver$6$anon1#1:
+ goto inline$storm_IoCallDriver$6$label_18#1;
+
+ inline$storm_IoCallDriver$6$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$63$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$63$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$start#1:
+ inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$63$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$63$label_3_true#1, inline$IoGetCurrentIrpStackLocation$63$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$63$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$63$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$63$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$63$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$63$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$63$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$63$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$63$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$63$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$63$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$63$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$63$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$63$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$63$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$63$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$63$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$63$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$63$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$63$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$63$Return#1:
+ goto inline$storm_IoCallDriver$6$label_18$1#1;
+
+ inline$storm_IoCallDriver$6$label_18$1#1:
+ goto inline$storm_IoCallDriver$6$anon13_Then#1, inline$storm_IoCallDriver$6$anon13_Else#1;
+
+ inline$storm_IoCallDriver$6$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$6$anon6#1;
+
+ inline$storm_IoCallDriver$6$anon6#1:
+ goto inline$storm_IoCallDriver$6$label_21#1;
+
+ inline$storm_IoCallDriver$6$label_21#1:
+ goto inline$storm_IoCallDriver$6$label_22#1;
+
+ inline$storm_IoCallDriver$6$label_22#1:
+ goto inline$storm_IoCallDriver$6$label_23#1;
+
+ inline$storm_IoCallDriver$6$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$6$label_24#1;
+
+ inline$storm_IoCallDriver$6$label_24#1:
+ call inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$6$label_27#1;
+
+ inline$storm_IoCallDriver$6$label_27#1:
+ goto inline$storm_IoCallDriver$6$label_27_case_0#1, inline$storm_IoCallDriver$6$label_27_case_1#1, inline$storm_IoCallDriver$6$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$6$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$6$label_30#1;
+
+ inline$storm_IoCallDriver$6$label_30#1:
+ inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$6$label_31#1;
+
+ inline$storm_IoCallDriver$6$label_31#1:
+ goto inline$storm_IoCallDriver$6$label_32#1;
+
+ inline$storm_IoCallDriver$6$label_32#1:
+ goto inline$storm_IoCallDriver$6$label_33#1;
+
+ inline$storm_IoCallDriver$6$label_33#1:
+ goto inline$CallCompletionRoutine$12$Entry#1;
+
+ inline$CallCompletionRoutine$12$Entry#1:
+ inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$12$start#1;
+
+ inline$CallCompletionRoutine$12$start#1:
+ inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$12$label_3#1;
+
+ inline$CallCompletionRoutine$12$label_3#1:
+ goto inline$CallCompletionRoutine$12$label_4#1;
+
+ inline$CallCompletionRoutine$12$label_4#1:
+ goto inline$CallCompletionRoutine$12$label_5#1;
+
+ inline$CallCompletionRoutine$12$label_5#1:
+ goto inline$CallCompletionRoutine$12$label_6#1;
+
+ inline$CallCompletionRoutine$12$label_6#1:
+ goto inline$CallCompletionRoutine$12$label_7#1;
+
+ inline$CallCompletionRoutine$12$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$64$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$64$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$start#1:
+ inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$64$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$64$label_3_true#1, inline$IoGetCurrentIrpStackLocation$64$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$64$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$64$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$64$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$64$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$64$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$64$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$64$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$64$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$64$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$64$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$64$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$64$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$64$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$64$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$64$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$64$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$64$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$64$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$64$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$64$Return#1:
+ goto inline$CallCompletionRoutine$12$label_7$1#1;
+
+ inline$CallCompletionRoutine$12$label_7$1#1:
+ goto inline$CallCompletionRoutine$12$anon10_Then#1, inline$CallCompletionRoutine$12$anon10_Else#1;
+
+ inline$CallCompletionRoutine$12$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$12$anon1#1;
+
+ inline$CallCompletionRoutine$12$anon1#1:
+ goto inline$CallCompletionRoutine$12$label_10#1;
+
+ inline$CallCompletionRoutine$12$label_10#1:
+ goto inline$CallCompletionRoutine$12$label_11#1;
+
+ inline$CallCompletionRoutine$12$label_11#1:
+ havoc inline$CallCompletionRoutine$12$myNondetVar_0;
+ inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$myNondetVar_0;
+ goto inline$CallCompletionRoutine$12$label_12#1;
+
+ inline$CallCompletionRoutine$12$label_12#1:
+ havoc inline$CallCompletionRoutine$12$myNondetVar_0;
+ inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$myNondetVar_0;
+ goto inline$CallCompletionRoutine$12$label_13#1;
+
+ inline$CallCompletionRoutine$12$label_13#1:
+ havoc inline$CallCompletionRoutine$12$myNondetVar_0;
+ goto inline$CallCompletionRoutine$12$label_14#1;
+
+ inline$CallCompletionRoutine$12$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$65$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$65$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$start#1:
+ inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$65$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$65$label_3_true#1, inline$IoGetCurrentIrpStackLocation$65$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$65$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$65$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$65$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$65$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$65$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$65$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$65$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$65$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$65$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$65$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$65$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$65$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$65$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$65$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$65$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$65$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$65$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$65$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$65$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$65$Return#1:
+ goto inline$CallCompletionRoutine$12$label_14$1#1;
+
+ inline$CallCompletionRoutine$12$label_14$1#1:
+ goto inline$CallCompletionRoutine$12$anon11_Then#1, inline$CallCompletionRoutine$12$anon11_Else#1;
+
+ inline$CallCompletionRoutine$12$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$12$anon3#1;
+
+ inline$CallCompletionRoutine$12$anon3#1:
+ goto inline$CallCompletionRoutine$12$label_17#1;
+
+ inline$CallCompletionRoutine$12$label_17#1:
+ goto inline$CallCompletionRoutine$12$label_18#1;
+
+ inline$CallCompletionRoutine$12$label_18#1:
+ goto inline$CallCompletionRoutine$12$label_18_true#1, inline$CallCompletionRoutine$12$label_18_false#1;
+
+ inline$CallCompletionRoutine$12$label_18_false#1:
+ assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$12$label_1#1;
+
+ inline$CallCompletionRoutine$12$label_18_true#1:
+ assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$12$label_19#1;
+
+ inline$CallCompletionRoutine$12$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$12$label_20#1;
+
+ inline$CallCompletionRoutine$12$label_20#1:
+ goto inline$CallCompletionRoutine$12$label_20_icall_1#1, inline$CallCompletionRoutine$12$label_20_icall_2#1, inline$CallCompletionRoutine$12$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$12$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$12$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$12$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$12$Entry#1:
+ inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$12$start#1;
+
+ inline$BDLSystemPowerIoCompletion$12$start#1:
+ call inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$12$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_4#1:
+ inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_6#1:
+ inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$12$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$12$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$67$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$67$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$start#1:
+ inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$67$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$67$label_3_true#1, inline$IoGetCurrentIrpStackLocation$67$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$67$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$67$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$67$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$67$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$67$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$67$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$67$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$67$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$67$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$67$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$67$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$67$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$67$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$67$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$67$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$67$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$67$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$67$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$67$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$67$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon36_Then#1, inline$BDLSystemPowerIoCompletion$12$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_15#1:
+ goto inline$BDLGetDebugLevel$337$Entry#1;
+
+ inline$BDLGetDebugLevel$337$Entry#1:
+ goto inline$BDLGetDebugLevel$337$start#1;
+
+ inline$BDLGetDebugLevel$337$start#1:
+ goto inline$BDLGetDebugLevel$337$label_3#1;
+
+ inline$BDLGetDebugLevel$337$label_3#1:
+ havoc inline$BDLGetDebugLevel$337$myNondetVar_0;
+ inline$BDLGetDebugLevel$337$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$337$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$337$label_1#1;
+
+ inline$BDLGetDebugLevel$337$label_1#1:
+ goto inline$BDLGetDebugLevel$337$Return#1;
+
+ inline$BDLGetDebugLevel$337$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$337$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon37_Then#1, inline$BDLSystemPowerIoCompletion$12$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_18_true#1, inline$BDLSystemPowerIoCompletion$12$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_19#1:
+ goto inline$BDLGetDebugLevel$338$Entry#1;
+
+ inline$BDLGetDebugLevel$338$Entry#1:
+ goto inline$BDLGetDebugLevel$338$start#1;
+
+ inline$BDLGetDebugLevel$338$start#1:
+ goto inline$BDLGetDebugLevel$338$label_3#1;
+
+ inline$BDLGetDebugLevel$338$label_3#1:
+ havoc inline$BDLGetDebugLevel$338$myNondetVar_0;
+ inline$BDLGetDebugLevel$338$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$338$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$338$label_1#1;
+
+ inline$BDLGetDebugLevel$338$label_1#1:
+ goto inline$BDLGetDebugLevel$338$Return#1;
+
+ inline$BDLGetDebugLevel$338$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$338$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon38_Then#1, inline$BDLSystemPowerIoCompletion$12$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_28_true#1, inline$BDLSystemPowerIoCompletion$12$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_29#1:
+ goto inline$BDLGetDebugLevel$339$Entry#1;
+
+ inline$BDLGetDebugLevel$339$Entry#1:
+ goto inline$BDLGetDebugLevel$339$start#1;
+
+ inline$BDLGetDebugLevel$339$start#1:
+ goto inline$BDLGetDebugLevel$339$label_3#1;
+
+ inline$BDLGetDebugLevel$339$label_3#1:
+ havoc inline$BDLGetDebugLevel$339$myNondetVar_0;
+ inline$BDLGetDebugLevel$339$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$339$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$339$label_1#1;
+
+ inline$BDLGetDebugLevel$339$label_1#1:
+ goto inline$BDLGetDebugLevel$339$Return#1;
+
+ inline$BDLGetDebugLevel$339$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$339$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon39_Then#1, inline$BDLSystemPowerIoCompletion$12$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_38_true#1, inline$BDLSystemPowerIoCompletion$12$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_39_true#1, inline$BDLSystemPowerIoCompletion$12$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$12$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$12$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$12$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$12$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$12$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_106_true#1, inline$BDLSystemPowerIoCompletion$12$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$12$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$12$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$12$myNondetVar_0, inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$12$anon50_Then#1, inline$BDLSystemPowerIoCompletion$12$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_112#1:
+ inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_113_true#1, inline$BDLSystemPowerIoCompletion$12$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$12$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_117#1:
+ goto inline$BDLGetDebugLevel$346$Entry#1;
+
+ inline$BDLGetDebugLevel$346$Entry#1:
+ goto inline$BDLGetDebugLevel$346$start#1;
+
+ inline$BDLGetDebugLevel$346$start#1:
+ goto inline$BDLGetDebugLevel$346$label_3#1;
+
+ inline$BDLGetDebugLevel$346$label_3#1:
+ havoc inline$BDLGetDebugLevel$346$myNondetVar_0;
+ inline$BDLGetDebugLevel$346$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$346$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$346$label_1#1;
+
+ inline$BDLGetDebugLevel$346$label_1#1:
+ goto inline$BDLGetDebugLevel$346$Return#1;
+
+ inline$BDLGetDebugLevel$346$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$346$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon51_Then#1, inline$BDLSystemPowerIoCompletion$12$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_120_true#1, inline$BDLSystemPowerIoCompletion$12$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_121#1:
+ goto inline$BDLGetDebugLevel$347$Entry#1;
+
+ inline$BDLGetDebugLevel$347$Entry#1:
+ goto inline$BDLGetDebugLevel$347$start#1;
+
+ inline$BDLGetDebugLevel$347$start#1:
+ goto inline$BDLGetDebugLevel$347$label_3#1;
+
+ inline$BDLGetDebugLevel$347$label_3#1:
+ havoc inline$BDLGetDebugLevel$347$myNondetVar_0;
+ inline$BDLGetDebugLevel$347$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$347$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$347$label_1#1;
+
+ inline$BDLGetDebugLevel$347$label_1#1:
+ goto inline$BDLGetDebugLevel$347$Return#1;
+
+ inline$BDLGetDebugLevel$347$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$347$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon52_Then#1, inline$BDLSystemPowerIoCompletion$12$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_130_true#1, inline$BDLSystemPowerIoCompletion$12$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_131#1:
+ goto inline$BDLGetDebugLevel$348$Entry#1;
+
+ inline$BDLGetDebugLevel$348$Entry#1:
+ goto inline$BDLGetDebugLevel$348$start#1;
+
+ inline$BDLGetDebugLevel$348$start#1:
+ goto inline$BDLGetDebugLevel$348$label_3#1;
+
+ inline$BDLGetDebugLevel$348$label_3#1:
+ havoc inline$BDLGetDebugLevel$348$myNondetVar_0;
+ inline$BDLGetDebugLevel$348$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$348$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$348$label_1#1;
+
+ inline$BDLGetDebugLevel$348$label_1#1:
+ goto inline$BDLGetDebugLevel$348$Return#1;
+
+ inline$BDLGetDebugLevel$348$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$348$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon53_Then#1, inline$BDLSystemPowerIoCompletion$12$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_140_true#1, inline$BDLSystemPowerIoCompletion$12$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$12$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_115#1:
+ inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$12$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$12$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$12$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_43#1:
+ goto inline$BDLGetDebugLevel$340$Entry#1;
+
+ inline$BDLGetDebugLevel$340$Entry#1:
+ goto inline$BDLGetDebugLevel$340$start#1;
+
+ inline$BDLGetDebugLevel$340$start#1:
+ goto inline$BDLGetDebugLevel$340$label_3#1;
+
+ inline$BDLGetDebugLevel$340$label_3#1:
+ havoc inline$BDLGetDebugLevel$340$myNondetVar_0;
+ inline$BDLGetDebugLevel$340$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$340$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$340$label_1#1;
+
+ inline$BDLGetDebugLevel$340$label_1#1:
+ goto inline$BDLGetDebugLevel$340$Return#1;
+
+ inline$BDLGetDebugLevel$340$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$340$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon40_Then#1, inline$BDLSystemPowerIoCompletion$12$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_46_true#1, inline$BDLSystemPowerIoCompletion$12$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_47#1:
+ goto inline$BDLGetDebugLevel$341$Entry#1;
+
+ inline$BDLGetDebugLevel$341$Entry#1:
+ goto inline$BDLGetDebugLevel$341$start#1;
+
+ inline$BDLGetDebugLevel$341$start#1:
+ goto inline$BDLGetDebugLevel$341$label_3#1;
+
+ inline$BDLGetDebugLevel$341$label_3#1:
+ havoc inline$BDLGetDebugLevel$341$myNondetVar_0;
+ inline$BDLGetDebugLevel$341$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$341$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$341$label_1#1;
+
+ inline$BDLGetDebugLevel$341$label_1#1:
+ goto inline$BDLGetDebugLevel$341$Return#1;
+
+ inline$BDLGetDebugLevel$341$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$341$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon41_Then#1, inline$BDLSystemPowerIoCompletion$12$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_56_true#1, inline$BDLSystemPowerIoCompletion$12$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_57#1:
+ goto inline$BDLGetDebugLevel$342$Entry#1;
+
+ inline$BDLGetDebugLevel$342$Entry#1:
+ goto inline$BDLGetDebugLevel$342$start#1;
+
+ inline$BDLGetDebugLevel$342$start#1:
+ goto inline$BDLGetDebugLevel$342$label_3#1;
+
+ inline$BDLGetDebugLevel$342$label_3#1:
+ havoc inline$BDLGetDebugLevel$342$myNondetVar_0;
+ inline$BDLGetDebugLevel$342$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$342$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$342$label_1#1;
+
+ inline$BDLGetDebugLevel$342$label_1#1:
+ goto inline$BDLGetDebugLevel$342$Return#1;
+
+ inline$BDLGetDebugLevel$342$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$342$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon42_Then#1, inline$BDLSystemPowerIoCompletion$12$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_66_true#1, inline$BDLSystemPowerIoCompletion$12$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$12$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$12$anon43_Then#1, inline$BDLSystemPowerIoCompletion$12$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$12$anon44_Then#1, inline$BDLSystemPowerIoCompletion$12$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_74#1:
+ goto inline$storm_IoCompleteRequest$26$Entry#1;
+
+ inline$storm_IoCompleteRequest$26$Entry#1:
+ inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$12$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$26$start#1;
+
+ inline$storm_IoCompleteRequest$26$start#1:
+ inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$26$label_3#1;
+
+ inline$storm_IoCompleteRequest$26$label_3#1:
+ call inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$26$label_6#1;
+
+ inline$storm_IoCompleteRequest$26$label_6#1:
+ goto inline$storm_IoCompleteRequest$26$label_6_true#1, inline$storm_IoCompleteRequest$26$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$26$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$26$label_7#1;
+
+ inline$storm_IoCompleteRequest$26$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$26$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$26$label_8#1;
+
+ inline$storm_IoCompleteRequest$26$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$26$anon3_Then#1, inline$storm_IoCompleteRequest$26$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$26$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$26$anon1#1;
+
+ inline$storm_IoCompleteRequest$26$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$26$label_9#1;
+
+ inline$storm_IoCompleteRequest$26$label_9#1:
+ goto inline$storm_IoCompleteRequest$26$label_9_true#1, inline$storm_IoCompleteRequest$26$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$26$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$26$label_10#1;
+
+ inline$storm_IoCompleteRequest$26$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$26$label_1#1;
+
+ inline$storm_IoCompleteRequest$26$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$26$label_7#1;
+
+ inline$storm_IoCompleteRequest$26$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$26$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$26$label_1#1;
+
+ inline$storm_IoCompleteRequest$26$label_1#1:
+ goto inline$storm_IoCompleteRequest$26$Return#1;
+
+ inline$storm_IoCompleteRequest$26$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$26$Return#1;
+
+ inline$storm_IoCompleteRequest$26$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon45_Then#1, inline$BDLSystemPowerIoCompletion$12$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$12$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$12$anon46_Then#1, inline$BDLSystemPowerIoCompletion$12$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_80#1:
+ goto inline$BDLGetDebugLevel$343$Entry#1;
+
+ inline$BDLGetDebugLevel$343$Entry#1:
+ goto inline$BDLGetDebugLevel$343$start#1;
+
+ inline$BDLGetDebugLevel$343$start#1:
+ goto inline$BDLGetDebugLevel$343$label_3#1;
+
+ inline$BDLGetDebugLevel$343$label_3#1:
+ havoc inline$BDLGetDebugLevel$343$myNondetVar_0;
+ inline$BDLGetDebugLevel$343$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$343$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$343$label_1#1;
+
+ inline$BDLGetDebugLevel$343$label_1#1:
+ goto inline$BDLGetDebugLevel$343$Return#1;
+
+ inline$BDLGetDebugLevel$343$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$343$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon47_Then#1, inline$BDLSystemPowerIoCompletion$12$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_83_true#1, inline$BDLSystemPowerIoCompletion$12$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_84#1:
+ goto inline$BDLGetDebugLevel$344$Entry#1;
+
+ inline$BDLGetDebugLevel$344$Entry#1:
+ goto inline$BDLGetDebugLevel$344$start#1;
+
+ inline$BDLGetDebugLevel$344$start#1:
+ goto inline$BDLGetDebugLevel$344$label_3#1;
+
+ inline$BDLGetDebugLevel$344$label_3#1:
+ havoc inline$BDLGetDebugLevel$344$myNondetVar_0;
+ inline$BDLGetDebugLevel$344$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$344$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$344$label_1#1;
+
+ inline$BDLGetDebugLevel$344$label_1#1:
+ goto inline$BDLGetDebugLevel$344$Return#1;
+
+ inline$BDLGetDebugLevel$344$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$344$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon48_Then#1, inline$BDLSystemPowerIoCompletion$12$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_93_true#1, inline$BDLSystemPowerIoCompletion$12$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$12$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$12$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_94#1:
+ goto inline$BDLGetDebugLevel$345$Entry#1;
+
+ inline$BDLGetDebugLevel$345$Entry#1:
+ goto inline$BDLGetDebugLevel$345$start#1;
+
+ inline$BDLGetDebugLevel$345$start#1:
+ goto inline$BDLGetDebugLevel$345$label_3#1;
+
+ inline$BDLGetDebugLevel$345$label_3#1:
+ havoc inline$BDLGetDebugLevel$345$myNondetVar_0;
+ inline$BDLGetDebugLevel$345$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$345$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$345$label_1#1;
+
+ inline$BDLGetDebugLevel$345$label_1#1:
+ goto inline$BDLGetDebugLevel$345$Return#1;
+
+ inline$BDLGetDebugLevel$345$Return#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$345$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$12$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$12$anon49_Then#1, inline$BDLSystemPowerIoCompletion$12$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_103_true#1, inline$BDLSystemPowerIoCompletion$12$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$12$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$12$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$12$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_104#1:
+ inline$BDLSystemPowerIoCompletion$12$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$12$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$12$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$12$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$12$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$12$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$12$Return#1:
+ inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$12$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$12$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$12$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$12$anon14_Then#1, inline$CallCompletionRoutine$12$anon14_Else#1;
+
+ inline$CallCompletionRoutine$12$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$12$anon9#1;
+
+ inline$CallCompletionRoutine$12$anon9#1:
+ goto inline$CallCompletionRoutine$12$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$12$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$12$Return#1;
+
+ inline$CallCompletionRoutine$12$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$12$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$12$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$12$Entry#1:
+ inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$12$start#1;
+
+ inline$BDLDevicePowerIoCompletion$12$start#1:
+ call inline$BDLDevicePowerIoCompletion$12$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$12$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_4#1:
+ inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_6#1:
+ inline$BDLDevicePowerIoCompletion$12$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$12$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$12$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$66$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$66$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$start#1:
+ inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$66$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$66$label_3_true#1, inline$IoGetCurrentIrpStackLocation$66$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$66$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$66$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$66$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$66$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$66$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$66$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$66$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$66$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$66$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$66$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$66$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$66$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$66$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$66$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$66$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$66$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$66$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$66$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$66$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$66$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$66$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$66$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$66$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon30_Then#1, inline$BDLDevicePowerIoCompletion$12$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_13#1:
+ inline$BDLDevicePowerIoCompletion$12$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_17#1:
+ goto inline$BDLGetDebugLevel$328$Entry#1;
+
+ inline$BDLGetDebugLevel$328$Entry#1:
+ goto inline$BDLGetDebugLevel$328$start#1;
+
+ inline$BDLGetDebugLevel$328$start#1:
+ goto inline$BDLGetDebugLevel$328$label_3#1;
+
+ inline$BDLGetDebugLevel$328$label_3#1:
+ havoc inline$BDLGetDebugLevel$328$myNondetVar_0;
+ inline$BDLGetDebugLevel$328$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$328$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$328$label_1#1;
+
+ inline$BDLGetDebugLevel$328$label_1#1:
+ goto inline$BDLGetDebugLevel$328$Return#1;
+
+ inline$BDLGetDebugLevel$328$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$328$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon31_Then#1, inline$BDLDevicePowerIoCompletion$12$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_20_true#1, inline$BDLDevicePowerIoCompletion$12$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_21#1:
+ goto inline$BDLGetDebugLevel$329$Entry#1;
+
+ inline$BDLGetDebugLevel$329$Entry#1:
+ goto inline$BDLGetDebugLevel$329$start#1;
+
+ inline$BDLGetDebugLevel$329$start#1:
+ goto inline$BDLGetDebugLevel$329$label_3#1;
+
+ inline$BDLGetDebugLevel$329$label_3#1:
+ havoc inline$BDLGetDebugLevel$329$myNondetVar_0;
+ inline$BDLGetDebugLevel$329$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$329$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$329$label_1#1;
+
+ inline$BDLGetDebugLevel$329$label_1#1:
+ goto inline$BDLGetDebugLevel$329$Return#1;
+
+ inline$BDLGetDebugLevel$329$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$329$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon32_Then#1, inline$BDLDevicePowerIoCompletion$12$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_30_true#1, inline$BDLDevicePowerIoCompletion$12$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_31#1:
+ goto inline$BDLGetDebugLevel$330$Entry#1;
+
+ inline$BDLGetDebugLevel$330$Entry#1:
+ goto inline$BDLGetDebugLevel$330$start#1;
+
+ inline$BDLGetDebugLevel$330$start#1:
+ goto inline$BDLGetDebugLevel$330$label_3#1;
+
+ inline$BDLGetDebugLevel$330$label_3#1:
+ havoc inline$BDLGetDebugLevel$330$myNondetVar_0;
+ inline$BDLGetDebugLevel$330$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$330$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$330$label_1#1;
+
+ inline$BDLGetDebugLevel$330$label_1#1:
+ goto inline$BDLGetDebugLevel$330$Return#1;
+
+ inline$BDLGetDebugLevel$330$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$330$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon33_Then#1, inline$BDLDevicePowerIoCompletion$12$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_40_true#1, inline$BDLDevicePowerIoCompletion$12$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_41_true#1, inline$BDLDevicePowerIoCompletion$12$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$12$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$12$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_44_true#1, inline$BDLDevicePowerIoCompletion$12$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_45_true#1, inline$BDLDevicePowerIoCompletion$12$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$12$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$12$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$12$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_54#1:
+ inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$12$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_55_true#1, inline$BDLDevicePowerIoCompletion$12$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$12$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$12$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$12$anon34_Then#1, inline$BDLDevicePowerIoCompletion$12$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_59#1:
+ goto inline$BDLGetDebugLevel$331$Entry#1;
+
+ inline$BDLGetDebugLevel$331$Entry#1:
+ goto inline$BDLGetDebugLevel$331$start#1;
+
+ inline$BDLGetDebugLevel$331$start#1:
+ goto inline$BDLGetDebugLevel$331$label_3#1;
+
+ inline$BDLGetDebugLevel$331$label_3#1:
+ havoc inline$BDLGetDebugLevel$331$myNondetVar_0;
+ inline$BDLGetDebugLevel$331$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$331$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$331$label_1#1;
+
+ inline$BDLGetDebugLevel$331$label_1#1:
+ goto inline$BDLGetDebugLevel$331$Return#1;
+
+ inline$BDLGetDebugLevel$331$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$331$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon35_Then#1, inline$BDLDevicePowerIoCompletion$12$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_62_true#1, inline$BDLDevicePowerIoCompletion$12$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_63#1:
+ goto inline$BDLGetDebugLevel$332$Entry#1;
+
+ inline$BDLGetDebugLevel$332$Entry#1:
+ goto inline$BDLGetDebugLevel$332$start#1;
+
+ inline$BDLGetDebugLevel$332$start#1:
+ goto inline$BDLGetDebugLevel$332$label_3#1;
+
+ inline$BDLGetDebugLevel$332$label_3#1:
+ havoc inline$BDLGetDebugLevel$332$myNondetVar_0;
+ inline$BDLGetDebugLevel$332$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$332$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$332$label_1#1;
+
+ inline$BDLGetDebugLevel$332$label_1#1:
+ goto inline$BDLGetDebugLevel$332$Return#1;
+
+ inline$BDLGetDebugLevel$332$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$332$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon36_Then#1, inline$BDLDevicePowerIoCompletion$12$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_72_true#1, inline$BDLDevicePowerIoCompletion$12$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_73#1:
+ goto inline$BDLGetDebugLevel$333$Entry#1;
+
+ inline$BDLGetDebugLevel$333$Entry#1:
+ goto inline$BDLGetDebugLevel$333$start#1;
+
+ inline$BDLGetDebugLevel$333$start#1:
+ goto inline$BDLGetDebugLevel$333$label_3#1;
+
+ inline$BDLGetDebugLevel$333$label_3#1:
+ havoc inline$BDLGetDebugLevel$333$myNondetVar_0;
+ inline$BDLGetDebugLevel$333$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$333$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$333$label_1#1;
+
+ inline$BDLGetDebugLevel$333$label_1#1:
+ goto inline$BDLGetDebugLevel$333$Return#1;
+
+ inline$BDLGetDebugLevel$333$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$333$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon37_Then#1, inline$BDLDevicePowerIoCompletion$12$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_82_true#1, inline$BDLDevicePowerIoCompletion$12$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$12$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$12$anon38_Then#1, inline$BDLDevicePowerIoCompletion$12$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$12$anon39_Then#1, inline$BDLDevicePowerIoCompletion$12$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_92#1:
+ goto inline$storm_IoCompleteRequest$25$Entry#1;
+
+ inline$storm_IoCompleteRequest$25$Entry#1:
+ inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$12$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$25$start#1;
+
+ inline$storm_IoCompleteRequest$25$start#1:
+ inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$25$label_3#1;
+
+ inline$storm_IoCompleteRequest$25$label_3#1:
+ call inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$25$label_6#1;
+
+ inline$storm_IoCompleteRequest$25$label_6#1:
+ goto inline$storm_IoCompleteRequest$25$label_6_true#1, inline$storm_IoCompleteRequest$25$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$25$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$25$label_7#1;
+
+ inline$storm_IoCompleteRequest$25$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$25$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$25$label_8#1;
+
+ inline$storm_IoCompleteRequest$25$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$25$anon3_Then#1, inline$storm_IoCompleteRequest$25$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$25$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$25$anon1#1;
+
+ inline$storm_IoCompleteRequest$25$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$25$label_9#1;
+
+ inline$storm_IoCompleteRequest$25$label_9#1:
+ goto inline$storm_IoCompleteRequest$25$label_9_true#1, inline$storm_IoCompleteRequest$25$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$25$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$25$label_10#1;
+
+ inline$storm_IoCompleteRequest$25$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$25$label_1#1;
+
+ inline$storm_IoCompleteRequest$25$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$25$label_7#1;
+
+ inline$storm_IoCompleteRequest$25$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$25$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$25$label_1#1;
+
+ inline$storm_IoCompleteRequest$25$label_1#1:
+ goto inline$storm_IoCompleteRequest$25$Return#1;
+
+ inline$storm_IoCompleteRequest$25$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$25$Return#1;
+
+ inline$storm_IoCompleteRequest$25$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon40_Then#1, inline$BDLDevicePowerIoCompletion$12$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$12$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$12$anon41_Then#1, inline$BDLDevicePowerIoCompletion$12$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_98#1:
+ goto inline$BDLGetDebugLevel$334$Entry#1;
+
+ inline$BDLGetDebugLevel$334$Entry#1:
+ goto inline$BDLGetDebugLevel$334$start#1;
+
+ inline$BDLGetDebugLevel$334$start#1:
+ goto inline$BDLGetDebugLevel$334$label_3#1;
+
+ inline$BDLGetDebugLevel$334$label_3#1:
+ havoc inline$BDLGetDebugLevel$334$myNondetVar_0;
+ inline$BDLGetDebugLevel$334$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$334$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$334$label_1#1;
+
+ inline$BDLGetDebugLevel$334$label_1#1:
+ goto inline$BDLGetDebugLevel$334$Return#1;
+
+ inline$BDLGetDebugLevel$334$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$334$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon42_Then#1, inline$BDLDevicePowerIoCompletion$12$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_101_true#1, inline$BDLDevicePowerIoCompletion$12$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_102#1:
+ goto inline$BDLGetDebugLevel$335$Entry#1;
+
+ inline$BDLGetDebugLevel$335$Entry#1:
+ goto inline$BDLGetDebugLevel$335$start#1;
+
+ inline$BDLGetDebugLevel$335$start#1:
+ goto inline$BDLGetDebugLevel$335$label_3#1;
+
+ inline$BDLGetDebugLevel$335$label_3#1:
+ havoc inline$BDLGetDebugLevel$335$myNondetVar_0;
+ inline$BDLGetDebugLevel$335$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$335$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$335$label_1#1;
+
+ inline$BDLGetDebugLevel$335$label_1#1:
+ goto inline$BDLGetDebugLevel$335$Return#1;
+
+ inline$BDLGetDebugLevel$335$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$335$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon43_Then#1, inline$BDLDevicePowerIoCompletion$12$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_111_true#1, inline$BDLDevicePowerIoCompletion$12$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$12$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$12$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_112#1:
+ goto inline$BDLGetDebugLevel$336$Entry#1;
+
+ inline$BDLGetDebugLevel$336$Entry#1:
+ goto inline$BDLGetDebugLevel$336$start#1;
+
+ inline$BDLGetDebugLevel$336$start#1:
+ goto inline$BDLGetDebugLevel$336$label_3#1;
+
+ inline$BDLGetDebugLevel$336$label_3#1:
+ havoc inline$BDLGetDebugLevel$336$myNondetVar_0;
+ inline$BDLGetDebugLevel$336$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$336$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$336$label_1#1;
+
+ inline$BDLGetDebugLevel$336$label_1#1:
+ goto inline$BDLGetDebugLevel$336$Return#1;
+
+ inline$BDLGetDebugLevel$336$Return#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$336$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$12$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$12$anon44_Then#1, inline$BDLDevicePowerIoCompletion$12$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_121_true#1, inline$BDLDevicePowerIoCompletion$12$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$12$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$12$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$12$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_122#1:
+ inline$BDLDevicePowerIoCompletion$12$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$12$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$12$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$12$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$12$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$12$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$12$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$12$Return#1:
+ inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$12$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$12$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$12$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$12$anon13_Then#1, inline$CallCompletionRoutine$12$anon13_Else#1;
+
+ inline$CallCompletionRoutine$12$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$12$anon7#1;
+
+ inline$CallCompletionRoutine$12$anon7#1:
+ goto inline$CallCompletionRoutine$12$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$12$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$12$Return#1;
+
+ inline$CallCompletionRoutine$12$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$12$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$12$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$12$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$12$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$12$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$start#1:
+ inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$12$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$12$label_3_true#1, inline$BDLCallDriverCompletionRoutine$12$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$12$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$12$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$12$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$12$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$12$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_6#1:
+ goto inline$storm_KeSetEvent$14$Entry#1;
+
+ inline$storm_KeSetEvent$14$Entry#1:
+ inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$12$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$14$start#1;
+
+ inline$storm_KeSetEvent$14$start#1:
+ inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$14$label_3#1;
+
+ inline$storm_KeSetEvent$14$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$14$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$14$label_1#1;
+
+ inline$storm_KeSetEvent$14$label_1#1:
+ goto inline$storm_KeSetEvent$14$Return#1;
+
+ inline$storm_KeSetEvent$14$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$12$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$12$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$12$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$12$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$12$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$12$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$12$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$12$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$12$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$12$Return#1:
+ inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$12$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$12$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$12$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$12$anon12_Then#1, inline$CallCompletionRoutine$12$anon12_Else#1;
+
+ inline$CallCompletionRoutine$12$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$12$anon5#1;
+
+ inline$CallCompletionRoutine$12$anon5#1:
+ goto inline$CallCompletionRoutine$12$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$12$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$12$label_23#1;
+
+ inline$CallCompletionRoutine$12$label_23#1:
+ inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$12$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$12$label_24#1;
+
+ inline$CallCompletionRoutine$12$label_24#1:
+ goto inline$CallCompletionRoutine$12$label_24_true#1, inline$CallCompletionRoutine$12$label_24_false#1;
+
+ inline$CallCompletionRoutine$12$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$12$label_1#1;
+
+ inline$CallCompletionRoutine$12$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$12$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$12$label_25#1;
+
+ inline$CallCompletionRoutine$12$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$12$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$12$label_1#1;
+
+ inline$CallCompletionRoutine$12$label_1#1:
+ goto inline$CallCompletionRoutine$12$Return#1;
+
+ inline$CallCompletionRoutine$12$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$12$Return#1;
+
+ inline$CallCompletionRoutine$12$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$12$Return#1;
+
+ inline$CallCompletionRoutine$12$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$12$Return#1;
+
+ inline$CallCompletionRoutine$12$Return#1:
+ goto inline$storm_IoCallDriver$6$label_33$1#1;
+
+ inline$storm_IoCallDriver$6$label_33$1#1:
+ goto inline$storm_IoCallDriver$6$anon14_Then#1, inline$storm_IoCallDriver$6$anon14_Else#1;
+
+ inline$storm_IoCallDriver$6$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$6$anon8#1;
+
+ inline$storm_IoCallDriver$6$anon8#1:
+ goto inline$storm_IoCallDriver$6$label_36#1;
+
+ inline$storm_IoCallDriver$6$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$6$Return#1;
+
+ inline$storm_IoCallDriver$6$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$6$label_29#1;
+
+ inline$storm_IoCallDriver$6$label_29#1:
+ inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$6$label_37#1;
+
+ inline$storm_IoCallDriver$6$label_37#1:
+ goto inline$storm_IoCallDriver$6$label_38#1;
+
+ inline$storm_IoCallDriver$6$label_38#1:
+ goto inline$storm_IoCallDriver$6$label_39#1;
+
+ inline$storm_IoCallDriver$6$label_39#1:
+ goto inline$CallCompletionRoutine$13$Entry#1;
+
+ inline$CallCompletionRoutine$13$Entry#1:
+ inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$13$start#1;
+
+ inline$CallCompletionRoutine$13$start#1:
+ inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$13$label_3#1;
+
+ inline$CallCompletionRoutine$13$label_3#1:
+ goto inline$CallCompletionRoutine$13$label_4#1;
+
+ inline$CallCompletionRoutine$13$label_4#1:
+ goto inline$CallCompletionRoutine$13$label_5#1;
+
+ inline$CallCompletionRoutine$13$label_5#1:
+ goto inline$CallCompletionRoutine$13$label_6#1;
+
+ inline$CallCompletionRoutine$13$label_6#1:
+ goto inline$CallCompletionRoutine$13$label_7#1;
+
+ inline$CallCompletionRoutine$13$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$68$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$68$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$start#1:
+ inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$68$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$68$label_3_true#1, inline$IoGetCurrentIrpStackLocation$68$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$68$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$68$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$68$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$68$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$68$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$68$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$68$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$68$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$68$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$68$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$68$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$68$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$68$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$68$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$68$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$68$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$68$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$68$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$68$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$68$Return#1:
+ goto inline$CallCompletionRoutine$13$label_7$1#1;
+
+ inline$CallCompletionRoutine$13$label_7$1#1:
+ goto inline$CallCompletionRoutine$13$anon10_Then#1, inline$CallCompletionRoutine$13$anon10_Else#1;
+
+ inline$CallCompletionRoutine$13$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$13$anon1#1;
+
+ inline$CallCompletionRoutine$13$anon1#1:
+ goto inline$CallCompletionRoutine$13$label_10#1;
+
+ inline$CallCompletionRoutine$13$label_10#1:
+ goto inline$CallCompletionRoutine$13$label_11#1;
+
+ inline$CallCompletionRoutine$13$label_11#1:
+ havoc inline$CallCompletionRoutine$13$myNondetVar_0;
+ inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$myNondetVar_0;
+ goto inline$CallCompletionRoutine$13$label_12#1;
+
+ inline$CallCompletionRoutine$13$label_12#1:
+ havoc inline$CallCompletionRoutine$13$myNondetVar_0;
+ inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$myNondetVar_0;
+ goto inline$CallCompletionRoutine$13$label_13#1;
+
+ inline$CallCompletionRoutine$13$label_13#1:
+ havoc inline$CallCompletionRoutine$13$myNondetVar_0;
+ goto inline$CallCompletionRoutine$13$label_14#1;
+
+ inline$CallCompletionRoutine$13$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$69$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$69$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$start#1:
+ inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$69$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$69$label_3_true#1, inline$IoGetCurrentIrpStackLocation$69$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$69$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$69$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$69$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$69$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$69$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$69$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$69$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$69$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$69$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$69$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$69$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$69$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$69$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$69$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$69$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$69$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$69$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$69$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$69$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$69$Return#1:
+ goto inline$CallCompletionRoutine$13$label_14$1#1;
+
+ inline$CallCompletionRoutine$13$label_14$1#1:
+ goto inline$CallCompletionRoutine$13$anon11_Then#1, inline$CallCompletionRoutine$13$anon11_Else#1;
+
+ inline$CallCompletionRoutine$13$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$13$anon3#1;
+
+ inline$CallCompletionRoutine$13$anon3#1:
+ goto inline$CallCompletionRoutine$13$label_17#1;
+
+ inline$CallCompletionRoutine$13$label_17#1:
+ goto inline$CallCompletionRoutine$13$label_18#1;
+
+ inline$CallCompletionRoutine$13$label_18#1:
+ goto inline$CallCompletionRoutine$13$label_18_true#1, inline$CallCompletionRoutine$13$label_18_false#1;
+
+ inline$CallCompletionRoutine$13$label_18_false#1:
+ assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$13$label_1#1;
+
+ inline$CallCompletionRoutine$13$label_18_true#1:
+ assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$13$label_19#1;
+
+ inline$CallCompletionRoutine$13$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$13$label_20#1;
+
+ inline$CallCompletionRoutine$13$label_20#1:
+ goto inline$CallCompletionRoutine$13$label_20_icall_1#1, inline$CallCompletionRoutine$13$label_20_icall_2#1, inline$CallCompletionRoutine$13$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$13$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$13$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$13$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$13$Entry#1:
+ inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$13$start#1;
+
+ inline$BDLSystemPowerIoCompletion$13$start#1:
+ call inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$13$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_4#1:
+ inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_6#1:
+ inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$13$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$13$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$71$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$71$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$start#1:
+ inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$71$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$71$label_3_true#1, inline$IoGetCurrentIrpStackLocation$71$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$71$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$71$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$71$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$71$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$71$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$71$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$71$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$71$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$71$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$71$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$71$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$71$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$71$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$71$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$71$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$71$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$71$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$71$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$71$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$71$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon36_Then#1, inline$BDLSystemPowerIoCompletion$13$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_15#1:
+ goto inline$BDLGetDebugLevel$358$Entry#1;
+
+ inline$BDLGetDebugLevel$358$Entry#1:
+ goto inline$BDLGetDebugLevel$358$start#1;
+
+ inline$BDLGetDebugLevel$358$start#1:
+ goto inline$BDLGetDebugLevel$358$label_3#1;
+
+ inline$BDLGetDebugLevel$358$label_3#1:
+ havoc inline$BDLGetDebugLevel$358$myNondetVar_0;
+ inline$BDLGetDebugLevel$358$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$358$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$358$label_1#1;
+
+ inline$BDLGetDebugLevel$358$label_1#1:
+ goto inline$BDLGetDebugLevel$358$Return#1;
+
+ inline$BDLGetDebugLevel$358$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$358$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon37_Then#1, inline$BDLSystemPowerIoCompletion$13$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_18_true#1, inline$BDLSystemPowerIoCompletion$13$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_19#1:
+ goto inline$BDLGetDebugLevel$359$Entry#1;
+
+ inline$BDLGetDebugLevel$359$Entry#1:
+ goto inline$BDLGetDebugLevel$359$start#1;
+
+ inline$BDLGetDebugLevel$359$start#1:
+ goto inline$BDLGetDebugLevel$359$label_3#1;
+
+ inline$BDLGetDebugLevel$359$label_3#1:
+ havoc inline$BDLGetDebugLevel$359$myNondetVar_0;
+ inline$BDLGetDebugLevel$359$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$359$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$359$label_1#1;
+
+ inline$BDLGetDebugLevel$359$label_1#1:
+ goto inline$BDLGetDebugLevel$359$Return#1;
+
+ inline$BDLGetDebugLevel$359$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$359$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon38_Then#1, inline$BDLSystemPowerIoCompletion$13$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_28_true#1, inline$BDLSystemPowerIoCompletion$13$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_29#1:
+ goto inline$BDLGetDebugLevel$360$Entry#1;
+
+ inline$BDLGetDebugLevel$360$Entry#1:
+ goto inline$BDLGetDebugLevel$360$start#1;
+
+ inline$BDLGetDebugLevel$360$start#1:
+ goto inline$BDLGetDebugLevel$360$label_3#1;
+
+ inline$BDLGetDebugLevel$360$label_3#1:
+ havoc inline$BDLGetDebugLevel$360$myNondetVar_0;
+ inline$BDLGetDebugLevel$360$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$360$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$360$label_1#1;
+
+ inline$BDLGetDebugLevel$360$label_1#1:
+ goto inline$BDLGetDebugLevel$360$Return#1;
+
+ inline$BDLGetDebugLevel$360$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$360$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon39_Then#1, inline$BDLSystemPowerIoCompletion$13$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_38_true#1, inline$BDLSystemPowerIoCompletion$13$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_39_true#1, inline$BDLSystemPowerIoCompletion$13$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$13$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$13$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$13$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$13$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$13$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_106_true#1, inline$BDLSystemPowerIoCompletion$13$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$13$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$13$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$13$myNondetVar_0, inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$13$anon50_Then#1, inline$BDLSystemPowerIoCompletion$13$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_112#1:
+ inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_113_true#1, inline$BDLSystemPowerIoCompletion$13$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$13$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_117#1:
+ goto inline$BDLGetDebugLevel$367$Entry#1;
+
+ inline$BDLGetDebugLevel$367$Entry#1:
+ goto inline$BDLGetDebugLevel$367$start#1;
+
+ inline$BDLGetDebugLevel$367$start#1:
+ goto inline$BDLGetDebugLevel$367$label_3#1;
+
+ inline$BDLGetDebugLevel$367$label_3#1:
+ havoc inline$BDLGetDebugLevel$367$myNondetVar_0;
+ inline$BDLGetDebugLevel$367$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$367$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$367$label_1#1;
+
+ inline$BDLGetDebugLevel$367$label_1#1:
+ goto inline$BDLGetDebugLevel$367$Return#1;
+
+ inline$BDLGetDebugLevel$367$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$367$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon51_Then#1, inline$BDLSystemPowerIoCompletion$13$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_120_true#1, inline$BDLSystemPowerIoCompletion$13$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_121#1:
+ goto inline$BDLGetDebugLevel$368$Entry#1;
+
+ inline$BDLGetDebugLevel$368$Entry#1:
+ goto inline$BDLGetDebugLevel$368$start#1;
+
+ inline$BDLGetDebugLevel$368$start#1:
+ goto inline$BDLGetDebugLevel$368$label_3#1;
+
+ inline$BDLGetDebugLevel$368$label_3#1:
+ havoc inline$BDLGetDebugLevel$368$myNondetVar_0;
+ inline$BDLGetDebugLevel$368$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$368$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$368$label_1#1;
+
+ inline$BDLGetDebugLevel$368$label_1#1:
+ goto inline$BDLGetDebugLevel$368$Return#1;
+
+ inline$BDLGetDebugLevel$368$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$368$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon52_Then#1, inline$BDLSystemPowerIoCompletion$13$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_130_true#1, inline$BDLSystemPowerIoCompletion$13$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_131#1:
+ goto inline$BDLGetDebugLevel$369$Entry#1;
+
+ inline$BDLGetDebugLevel$369$Entry#1:
+ goto inline$BDLGetDebugLevel$369$start#1;
+
+ inline$BDLGetDebugLevel$369$start#1:
+ goto inline$BDLGetDebugLevel$369$label_3#1;
+
+ inline$BDLGetDebugLevel$369$label_3#1:
+ havoc inline$BDLGetDebugLevel$369$myNondetVar_0;
+ inline$BDLGetDebugLevel$369$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$369$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$369$label_1#1;
+
+ inline$BDLGetDebugLevel$369$label_1#1:
+ goto inline$BDLGetDebugLevel$369$Return#1;
+
+ inline$BDLGetDebugLevel$369$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$369$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon53_Then#1, inline$BDLSystemPowerIoCompletion$13$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_140_true#1, inline$BDLSystemPowerIoCompletion$13$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$13$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_115#1:
+ inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$13$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$13$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$13$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_43#1:
+ goto inline$BDLGetDebugLevel$361$Entry#1;
+
+ inline$BDLGetDebugLevel$361$Entry#1:
+ goto inline$BDLGetDebugLevel$361$start#1;
+
+ inline$BDLGetDebugLevel$361$start#1:
+ goto inline$BDLGetDebugLevel$361$label_3#1;
+
+ inline$BDLGetDebugLevel$361$label_3#1:
+ havoc inline$BDLGetDebugLevel$361$myNondetVar_0;
+ inline$BDLGetDebugLevel$361$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$361$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$361$label_1#1;
+
+ inline$BDLGetDebugLevel$361$label_1#1:
+ goto inline$BDLGetDebugLevel$361$Return#1;
+
+ inline$BDLGetDebugLevel$361$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$361$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon40_Then#1, inline$BDLSystemPowerIoCompletion$13$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_46_true#1, inline$BDLSystemPowerIoCompletion$13$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_47#1:
+ goto inline$BDLGetDebugLevel$362$Entry#1;
+
+ inline$BDLGetDebugLevel$362$Entry#1:
+ goto inline$BDLGetDebugLevel$362$start#1;
+
+ inline$BDLGetDebugLevel$362$start#1:
+ goto inline$BDLGetDebugLevel$362$label_3#1;
+
+ inline$BDLGetDebugLevel$362$label_3#1:
+ havoc inline$BDLGetDebugLevel$362$myNondetVar_0;
+ inline$BDLGetDebugLevel$362$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$362$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$362$label_1#1;
+
+ inline$BDLGetDebugLevel$362$label_1#1:
+ goto inline$BDLGetDebugLevel$362$Return#1;
+
+ inline$BDLGetDebugLevel$362$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$362$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon41_Then#1, inline$BDLSystemPowerIoCompletion$13$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_56_true#1, inline$BDLSystemPowerIoCompletion$13$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_57#1:
+ goto inline$BDLGetDebugLevel$363$Entry#1;
+
+ inline$BDLGetDebugLevel$363$Entry#1:
+ goto inline$BDLGetDebugLevel$363$start#1;
+
+ inline$BDLGetDebugLevel$363$start#1:
+ goto inline$BDLGetDebugLevel$363$label_3#1;
+
+ inline$BDLGetDebugLevel$363$label_3#1:
+ havoc inline$BDLGetDebugLevel$363$myNondetVar_0;
+ inline$BDLGetDebugLevel$363$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$363$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$363$label_1#1;
+
+ inline$BDLGetDebugLevel$363$label_1#1:
+ goto inline$BDLGetDebugLevel$363$Return#1;
+
+ inline$BDLGetDebugLevel$363$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$363$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon42_Then#1, inline$BDLSystemPowerIoCompletion$13$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_66_true#1, inline$BDLSystemPowerIoCompletion$13$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$13$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$13$anon43_Then#1, inline$BDLSystemPowerIoCompletion$13$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$13$anon44_Then#1, inline$BDLSystemPowerIoCompletion$13$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_74#1:
+ goto inline$storm_IoCompleteRequest$28$Entry#1;
+
+ inline$storm_IoCompleteRequest$28$Entry#1:
+ inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$13$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$28$start#1;
+
+ inline$storm_IoCompleteRequest$28$start#1:
+ inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$28$label_3#1;
+
+ inline$storm_IoCompleteRequest$28$label_3#1:
+ call inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$28$label_6#1;
+
+ inline$storm_IoCompleteRequest$28$label_6#1:
+ goto inline$storm_IoCompleteRequest$28$label_6_true#1, inline$storm_IoCompleteRequest$28$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$28$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$28$label_7#1;
+
+ inline$storm_IoCompleteRequest$28$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$28$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$28$label_8#1;
+
+ inline$storm_IoCompleteRequest$28$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$28$anon3_Then#1, inline$storm_IoCompleteRequest$28$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$28$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$28$anon1#1;
+
+ inline$storm_IoCompleteRequest$28$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$28$label_9#1;
+
+ inline$storm_IoCompleteRequest$28$label_9#1:
+ goto inline$storm_IoCompleteRequest$28$label_9_true#1, inline$storm_IoCompleteRequest$28$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$28$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$28$label_10#1;
+
+ inline$storm_IoCompleteRequest$28$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$28$label_1#1;
+
+ inline$storm_IoCompleteRequest$28$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$28$label_7#1;
+
+ inline$storm_IoCompleteRequest$28$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$28$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$28$label_1#1;
+
+ inline$storm_IoCompleteRequest$28$label_1#1:
+ goto inline$storm_IoCompleteRequest$28$Return#1;
+
+ inline$storm_IoCompleteRequest$28$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$28$Return#1;
+
+ inline$storm_IoCompleteRequest$28$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon45_Then#1, inline$BDLSystemPowerIoCompletion$13$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$13$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$13$anon46_Then#1, inline$BDLSystemPowerIoCompletion$13$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_80#1:
+ goto inline$BDLGetDebugLevel$364$Entry#1;
+
+ inline$BDLGetDebugLevel$364$Entry#1:
+ goto inline$BDLGetDebugLevel$364$start#1;
+
+ inline$BDLGetDebugLevel$364$start#1:
+ goto inline$BDLGetDebugLevel$364$label_3#1;
+
+ inline$BDLGetDebugLevel$364$label_3#1:
+ havoc inline$BDLGetDebugLevel$364$myNondetVar_0;
+ inline$BDLGetDebugLevel$364$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$364$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$364$label_1#1;
+
+ inline$BDLGetDebugLevel$364$label_1#1:
+ goto inline$BDLGetDebugLevel$364$Return#1;
+
+ inline$BDLGetDebugLevel$364$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$364$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon47_Then#1, inline$BDLSystemPowerIoCompletion$13$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_83_true#1, inline$BDLSystemPowerIoCompletion$13$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_84#1:
+ goto inline$BDLGetDebugLevel$365$Entry#1;
+
+ inline$BDLGetDebugLevel$365$Entry#1:
+ goto inline$BDLGetDebugLevel$365$start#1;
+
+ inline$BDLGetDebugLevel$365$start#1:
+ goto inline$BDLGetDebugLevel$365$label_3#1;
+
+ inline$BDLGetDebugLevel$365$label_3#1:
+ havoc inline$BDLGetDebugLevel$365$myNondetVar_0;
+ inline$BDLGetDebugLevel$365$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$365$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$365$label_1#1;
+
+ inline$BDLGetDebugLevel$365$label_1#1:
+ goto inline$BDLGetDebugLevel$365$Return#1;
+
+ inline$BDLGetDebugLevel$365$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$365$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon48_Then#1, inline$BDLSystemPowerIoCompletion$13$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_93_true#1, inline$BDLSystemPowerIoCompletion$13$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$13$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$13$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_94#1:
+ goto inline$BDLGetDebugLevel$366$Entry#1;
+
+ inline$BDLGetDebugLevel$366$Entry#1:
+ goto inline$BDLGetDebugLevel$366$start#1;
+
+ inline$BDLGetDebugLevel$366$start#1:
+ goto inline$BDLGetDebugLevel$366$label_3#1;
+
+ inline$BDLGetDebugLevel$366$label_3#1:
+ havoc inline$BDLGetDebugLevel$366$myNondetVar_0;
+ inline$BDLGetDebugLevel$366$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$366$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$366$label_1#1;
+
+ inline$BDLGetDebugLevel$366$label_1#1:
+ goto inline$BDLGetDebugLevel$366$Return#1;
+
+ inline$BDLGetDebugLevel$366$Return#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$366$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$13$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$13$anon49_Then#1, inline$BDLSystemPowerIoCompletion$13$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_103_true#1, inline$BDLSystemPowerIoCompletion$13$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$13$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$13$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$13$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_104#1:
+ inline$BDLSystemPowerIoCompletion$13$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$13$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$13$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$13$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$13$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$13$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$13$Return#1:
+ inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$13$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$13$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$13$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$13$anon14_Then#1, inline$CallCompletionRoutine$13$anon14_Else#1;
+
+ inline$CallCompletionRoutine$13$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$13$anon9#1;
+
+ inline$CallCompletionRoutine$13$anon9#1:
+ goto inline$CallCompletionRoutine$13$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$13$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$13$Return#1;
+
+ inline$CallCompletionRoutine$13$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$13$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$13$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$13$Entry#1:
+ inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$13$start#1;
+
+ inline$BDLDevicePowerIoCompletion$13$start#1:
+ call inline$BDLDevicePowerIoCompletion$13$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$13$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_4#1:
+ inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_6#1:
+ inline$BDLDevicePowerIoCompletion$13$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$13$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$13$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$70$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$70$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$start#1:
+ inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$70$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$70$label_3_true#1, inline$IoGetCurrentIrpStackLocation$70$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$70$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$70$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$70$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$70$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$70$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$70$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$70$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$70$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$70$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$70$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$70$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$70$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$70$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$70$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$70$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$70$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$70$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$70$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$70$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$70$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$70$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$70$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$70$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon30_Then#1, inline$BDLDevicePowerIoCompletion$13$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_13#1:
+ inline$BDLDevicePowerIoCompletion$13$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_17#1:
+ goto inline$BDLGetDebugLevel$349$Entry#1;
+
+ inline$BDLGetDebugLevel$349$Entry#1:
+ goto inline$BDLGetDebugLevel$349$start#1;
+
+ inline$BDLGetDebugLevel$349$start#1:
+ goto inline$BDLGetDebugLevel$349$label_3#1;
+
+ inline$BDLGetDebugLevel$349$label_3#1:
+ havoc inline$BDLGetDebugLevel$349$myNondetVar_0;
+ inline$BDLGetDebugLevel$349$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$349$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$349$label_1#1;
+
+ inline$BDLGetDebugLevel$349$label_1#1:
+ goto inline$BDLGetDebugLevel$349$Return#1;
+
+ inline$BDLGetDebugLevel$349$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$349$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon31_Then#1, inline$BDLDevicePowerIoCompletion$13$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_20_true#1, inline$BDLDevicePowerIoCompletion$13$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_21#1:
+ goto inline$BDLGetDebugLevel$350$Entry#1;
+
+ inline$BDLGetDebugLevel$350$Entry#1:
+ goto inline$BDLGetDebugLevel$350$start#1;
+
+ inline$BDLGetDebugLevel$350$start#1:
+ goto inline$BDLGetDebugLevel$350$label_3#1;
+
+ inline$BDLGetDebugLevel$350$label_3#1:
+ havoc inline$BDLGetDebugLevel$350$myNondetVar_0;
+ inline$BDLGetDebugLevel$350$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$350$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$350$label_1#1;
+
+ inline$BDLGetDebugLevel$350$label_1#1:
+ goto inline$BDLGetDebugLevel$350$Return#1;
+
+ inline$BDLGetDebugLevel$350$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$350$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon32_Then#1, inline$BDLDevicePowerIoCompletion$13$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_30_true#1, inline$BDLDevicePowerIoCompletion$13$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_31#1:
+ goto inline$BDLGetDebugLevel$351$Entry#1;
+
+ inline$BDLGetDebugLevel$351$Entry#1:
+ goto inline$BDLGetDebugLevel$351$start#1;
+
+ inline$BDLGetDebugLevel$351$start#1:
+ goto inline$BDLGetDebugLevel$351$label_3#1;
+
+ inline$BDLGetDebugLevel$351$label_3#1:
+ havoc inline$BDLGetDebugLevel$351$myNondetVar_0;
+ inline$BDLGetDebugLevel$351$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$351$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$351$label_1#1;
+
+ inline$BDLGetDebugLevel$351$label_1#1:
+ goto inline$BDLGetDebugLevel$351$Return#1;
+
+ inline$BDLGetDebugLevel$351$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$351$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon33_Then#1, inline$BDLDevicePowerIoCompletion$13$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_40_true#1, inline$BDLDevicePowerIoCompletion$13$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_41_true#1, inline$BDLDevicePowerIoCompletion$13$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$13$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$13$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_44_true#1, inline$BDLDevicePowerIoCompletion$13$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_45_true#1, inline$BDLDevicePowerIoCompletion$13$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$13$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$13$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$13$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_54#1:
+ inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$13$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_55_true#1, inline$BDLDevicePowerIoCompletion$13$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$13$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$13$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$13$anon34_Then#1, inline$BDLDevicePowerIoCompletion$13$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_59#1:
+ goto inline$BDLGetDebugLevel$352$Entry#1;
+
+ inline$BDLGetDebugLevel$352$Entry#1:
+ goto inline$BDLGetDebugLevel$352$start#1;
+
+ inline$BDLGetDebugLevel$352$start#1:
+ goto inline$BDLGetDebugLevel$352$label_3#1;
+
+ inline$BDLGetDebugLevel$352$label_3#1:
+ havoc inline$BDLGetDebugLevel$352$myNondetVar_0;
+ inline$BDLGetDebugLevel$352$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$352$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$352$label_1#1;
+
+ inline$BDLGetDebugLevel$352$label_1#1:
+ goto inline$BDLGetDebugLevel$352$Return#1;
+
+ inline$BDLGetDebugLevel$352$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$352$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon35_Then#1, inline$BDLDevicePowerIoCompletion$13$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_62_true#1, inline$BDLDevicePowerIoCompletion$13$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_63#1:
+ goto inline$BDLGetDebugLevel$353$Entry#1;
+
+ inline$BDLGetDebugLevel$353$Entry#1:
+ goto inline$BDLGetDebugLevel$353$start#1;
+
+ inline$BDLGetDebugLevel$353$start#1:
+ goto inline$BDLGetDebugLevel$353$label_3#1;
+
+ inline$BDLGetDebugLevel$353$label_3#1:
+ havoc inline$BDLGetDebugLevel$353$myNondetVar_0;
+ inline$BDLGetDebugLevel$353$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$353$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$353$label_1#1;
+
+ inline$BDLGetDebugLevel$353$label_1#1:
+ goto inline$BDLGetDebugLevel$353$Return#1;
+
+ inline$BDLGetDebugLevel$353$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$353$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon36_Then#1, inline$BDLDevicePowerIoCompletion$13$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_72_true#1, inline$BDLDevicePowerIoCompletion$13$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_73#1:
+ goto inline$BDLGetDebugLevel$354$Entry#1;
+
+ inline$BDLGetDebugLevel$354$Entry#1:
+ goto inline$BDLGetDebugLevel$354$start#1;
+
+ inline$BDLGetDebugLevel$354$start#1:
+ goto inline$BDLGetDebugLevel$354$label_3#1;
+
+ inline$BDLGetDebugLevel$354$label_3#1:
+ havoc inline$BDLGetDebugLevel$354$myNondetVar_0;
+ inline$BDLGetDebugLevel$354$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$354$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$354$label_1#1;
+
+ inline$BDLGetDebugLevel$354$label_1#1:
+ goto inline$BDLGetDebugLevel$354$Return#1;
+
+ inline$BDLGetDebugLevel$354$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$354$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon37_Then#1, inline$BDLDevicePowerIoCompletion$13$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_82_true#1, inline$BDLDevicePowerIoCompletion$13$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$13$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$13$anon38_Then#1, inline$BDLDevicePowerIoCompletion$13$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$13$anon39_Then#1, inline$BDLDevicePowerIoCompletion$13$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_92#1:
+ goto inline$storm_IoCompleteRequest$27$Entry#1;
+
+ inline$storm_IoCompleteRequest$27$Entry#1:
+ inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$13$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$27$start#1;
+
+ inline$storm_IoCompleteRequest$27$start#1:
+ inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$27$label_3#1;
+
+ inline$storm_IoCompleteRequest$27$label_3#1:
+ call inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$27$label_6#1;
+
+ inline$storm_IoCompleteRequest$27$label_6#1:
+ goto inline$storm_IoCompleteRequest$27$label_6_true#1, inline$storm_IoCompleteRequest$27$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$27$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$27$label_7#1;
+
+ inline$storm_IoCompleteRequest$27$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$27$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$27$label_8#1;
+
+ inline$storm_IoCompleteRequest$27$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$27$anon3_Then#1, inline$storm_IoCompleteRequest$27$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$27$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$27$anon1#1;
+
+ inline$storm_IoCompleteRequest$27$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$27$label_9#1;
+
+ inline$storm_IoCompleteRequest$27$label_9#1:
+ goto inline$storm_IoCompleteRequest$27$label_9_true#1, inline$storm_IoCompleteRequest$27$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$27$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$27$label_10#1;
+
+ inline$storm_IoCompleteRequest$27$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$27$label_1#1;
+
+ inline$storm_IoCompleteRequest$27$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$27$label_7#1;
+
+ inline$storm_IoCompleteRequest$27$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$27$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$27$label_1#1;
+
+ inline$storm_IoCompleteRequest$27$label_1#1:
+ goto inline$storm_IoCompleteRequest$27$Return#1;
+
+ inline$storm_IoCompleteRequest$27$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$27$Return#1;
+
+ inline$storm_IoCompleteRequest$27$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon40_Then#1, inline$BDLDevicePowerIoCompletion$13$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$13$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$13$anon41_Then#1, inline$BDLDevicePowerIoCompletion$13$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_98#1:
+ goto inline$BDLGetDebugLevel$355$Entry#1;
+
+ inline$BDLGetDebugLevel$355$Entry#1:
+ goto inline$BDLGetDebugLevel$355$start#1;
+
+ inline$BDLGetDebugLevel$355$start#1:
+ goto inline$BDLGetDebugLevel$355$label_3#1;
+
+ inline$BDLGetDebugLevel$355$label_3#1:
+ havoc inline$BDLGetDebugLevel$355$myNondetVar_0;
+ inline$BDLGetDebugLevel$355$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$355$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$355$label_1#1;
+
+ inline$BDLGetDebugLevel$355$label_1#1:
+ goto inline$BDLGetDebugLevel$355$Return#1;
+
+ inline$BDLGetDebugLevel$355$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$355$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon42_Then#1, inline$BDLDevicePowerIoCompletion$13$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_101_true#1, inline$BDLDevicePowerIoCompletion$13$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_102#1:
+ goto inline$BDLGetDebugLevel$356$Entry#1;
+
+ inline$BDLGetDebugLevel$356$Entry#1:
+ goto inline$BDLGetDebugLevel$356$start#1;
+
+ inline$BDLGetDebugLevel$356$start#1:
+ goto inline$BDLGetDebugLevel$356$label_3#1;
+
+ inline$BDLGetDebugLevel$356$label_3#1:
+ havoc inline$BDLGetDebugLevel$356$myNondetVar_0;
+ inline$BDLGetDebugLevel$356$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$356$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$356$label_1#1;
+
+ inline$BDLGetDebugLevel$356$label_1#1:
+ goto inline$BDLGetDebugLevel$356$Return#1;
+
+ inline$BDLGetDebugLevel$356$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$356$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon43_Then#1, inline$BDLDevicePowerIoCompletion$13$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_111_true#1, inline$BDLDevicePowerIoCompletion$13$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$13$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$13$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_112#1:
+ goto inline$BDLGetDebugLevel$357$Entry#1;
+
+ inline$BDLGetDebugLevel$357$Entry#1:
+ goto inline$BDLGetDebugLevel$357$start#1;
+
+ inline$BDLGetDebugLevel$357$start#1:
+ goto inline$BDLGetDebugLevel$357$label_3#1;
+
+ inline$BDLGetDebugLevel$357$label_3#1:
+ havoc inline$BDLGetDebugLevel$357$myNondetVar_0;
+ inline$BDLGetDebugLevel$357$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$357$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$357$label_1#1;
+
+ inline$BDLGetDebugLevel$357$label_1#1:
+ goto inline$BDLGetDebugLevel$357$Return#1;
+
+ inline$BDLGetDebugLevel$357$Return#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$357$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$13$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$13$anon44_Then#1, inline$BDLDevicePowerIoCompletion$13$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_121_true#1, inline$BDLDevicePowerIoCompletion$13$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$13$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$13$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$13$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_122#1:
+ inline$BDLDevicePowerIoCompletion$13$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$13$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$13$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$13$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$13$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$13$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$13$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$13$Return#1:
+ inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$13$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$13$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$13$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$13$anon13_Then#1, inline$CallCompletionRoutine$13$anon13_Else#1;
+
+ inline$CallCompletionRoutine$13$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$13$anon7#1;
+
+ inline$CallCompletionRoutine$13$anon7#1:
+ goto inline$CallCompletionRoutine$13$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$13$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$13$Return#1;
+
+ inline$CallCompletionRoutine$13$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$13$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$13$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$13$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$13$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$13$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$start#1:
+ inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$13$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$13$label_3_true#1, inline$BDLCallDriverCompletionRoutine$13$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$13$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$13$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$13$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$13$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$13$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_6#1:
+ goto inline$storm_KeSetEvent$15$Entry#1;
+
+ inline$storm_KeSetEvent$15$Entry#1:
+ inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$13$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$15$start#1;
+
+ inline$storm_KeSetEvent$15$start#1:
+ inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$15$label_3#1;
+
+ inline$storm_KeSetEvent$15$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$15$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$15$label_1#1;
+
+ inline$storm_KeSetEvent$15$label_1#1:
+ goto inline$storm_KeSetEvent$15$Return#1;
+
+ inline$storm_KeSetEvent$15$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$13$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$13$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$13$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$13$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$13$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$13$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$13$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$13$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$13$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$13$Return#1:
+ inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$13$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$13$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$13$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$13$anon12_Then#1, inline$CallCompletionRoutine$13$anon12_Else#1;
+
+ inline$CallCompletionRoutine$13$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$13$anon5#1;
+
+ inline$CallCompletionRoutine$13$anon5#1:
+ goto inline$CallCompletionRoutine$13$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$13$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$13$label_23#1;
+
+ inline$CallCompletionRoutine$13$label_23#1:
+ inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$13$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$13$label_24#1;
+
+ inline$CallCompletionRoutine$13$label_24#1:
+ goto inline$CallCompletionRoutine$13$label_24_true#1, inline$CallCompletionRoutine$13$label_24_false#1;
+
+ inline$CallCompletionRoutine$13$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$13$label_1#1;
+
+ inline$CallCompletionRoutine$13$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$13$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$13$label_25#1;
+
+ inline$CallCompletionRoutine$13$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$13$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$13$label_1#1;
+
+ inline$CallCompletionRoutine$13$label_1#1:
+ goto inline$CallCompletionRoutine$13$Return#1;
+
+ inline$CallCompletionRoutine$13$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$13$Return#1;
+
+ inline$CallCompletionRoutine$13$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$13$Return#1;
+
+ inline$CallCompletionRoutine$13$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$13$Return#1;
+
+ inline$CallCompletionRoutine$13$Return#1:
+ goto inline$storm_IoCallDriver$6$label_39$1#1;
+
+ inline$storm_IoCallDriver$6$label_39$1#1:
+ goto inline$storm_IoCallDriver$6$anon15_Then#1, inline$storm_IoCallDriver$6$anon15_Else#1;
+
+ inline$storm_IoCallDriver$6$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$6$anon10#1;
+
+ inline$storm_IoCallDriver$6$anon10#1:
+ goto inline$storm_IoCallDriver$6$label_36#1;
+
+ inline$storm_IoCallDriver$6$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$6$Return#1;
+
+ inline$storm_IoCallDriver$6$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$6$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$6$label_28#1;
+
+ inline$storm_IoCallDriver$6$label_28#1:
+ inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$6$label_42#1;
+
+ inline$storm_IoCallDriver$6$label_42#1:
+ goto inline$storm_IoCallDriver$6$label_43#1;
+
+ inline$storm_IoCallDriver$6$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$6$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$6$label_36#1;
+
+ inline$storm_IoCallDriver$6$label_36#1:
+ inline$storm_IoCallDriver$6$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$6$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$6$label_1#1;
+
+ inline$storm_IoCallDriver$6$label_1#1:
+ goto inline$storm_IoCallDriver$6$Return#1;
+
+ inline$storm_IoCallDriver$6$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$6$Return#1;
+
+ inline$storm_IoCallDriver$6$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$6$Return#1;
+
+ inline$storm_IoCallDriver$6$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$6$Return#1;
+
+ inline$storm_IoCallDriver$6$Return#1:
+ inline$storm_PoCallDriver$2$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$6$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$storm_PoCallDriver$2$label_3$1#1;
+
+ inline$storm_PoCallDriver$2$label_3$1#1:
+ goto inline$storm_PoCallDriver$2$anon2_Then#1, inline$storm_PoCallDriver$2$anon2_Else#1;
+
+ inline$storm_PoCallDriver$2$anon2_Else#1:
+ assume !raiseException;
+ goto inline$storm_PoCallDriver$2$anon1#1;
+
+ inline$storm_PoCallDriver$2$anon1#1:
+ goto inline$storm_PoCallDriver$2$label_6#1;
+
+ inline$storm_PoCallDriver$2$label_6#1:
+ inline$storm_PoCallDriver$2$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$2$$result.storm_IoCallDriver$499.27$2$;
+ goto inline$storm_PoCallDriver$2$label_1#1;
+
+ inline$storm_PoCallDriver$2$label_1#1:
+ goto inline$storm_PoCallDriver$2$Return#1;
+
+ inline$storm_PoCallDriver$2$anon2_Then#1:
+ assume raiseException;
+ goto inline$storm_PoCallDriver$2$Return#1;
+
+ inline$storm_PoCallDriver$2$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$2$$result.storm_PoCallDriver$494.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_25$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_25$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon22_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon13#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon13#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_28#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_28#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_PoCallDriver$104.29$3$;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$2$label_29_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_29_false#1:
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_29_true#1:
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_31#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_31#1:
+ goto inline$storm_KeWaitForSingleObject$2$Entry#1;
+
+ inline$storm_KeWaitForSingleObject$2$Entry#1:
+ inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
+ goto inline$storm_KeWaitForSingleObject$2$start#1;
+
+ inline$storm_KeWaitForSingleObject$2$start#1:
+ inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
+ inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
+ goto inline$storm_KeWaitForSingleObject$2$label_3#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_3#1:
+ goto inline$storm_KeWaitForSingleObject$2$label_3_true#1, inline$storm_KeWaitForSingleObject$2$label_3_false#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_3_false#1:
+ assume inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
+ goto inline$storm_KeWaitForSingleObject$2$label_4#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_4#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$anon6_Then#1, inline$storm_KeWaitForSingleObject$2$anon6_Else#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$anon1#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$2$label_13#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_13#1:
+ inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$2$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$Return#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_3_true#1:
+ assume inline$storm_KeWaitForSingleObject$2$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
+ goto inline$storm_KeWaitForSingleObject$2$label_5#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_5#1:
+ call inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$ := storm_nondet();
+ goto inline$storm_KeWaitForSingleObject$2$label_8#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_8#1:
+ goto inline$storm_KeWaitForSingleObject$2$label_8_true#1, inline$storm_KeWaitForSingleObject$2$label_8_false#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_8_false#1:
+ assume inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$ == 0;
+ goto inline$storm_KeWaitForSingleObject$2$label_9#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_9#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$anon7_Then#1, inline$storm_KeWaitForSingleObject$2$anon7_Else#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$anon3#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$2$label_12#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_12#1:
+ inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
+ goto inline$storm_KeWaitForSingleObject$2$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$Return#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_8_true#1:
+ assume inline$storm_KeWaitForSingleObject$2$$result.storm_nondet$256.20$2$ != 0;
+ goto inline$storm_KeWaitForSingleObject$2$label_10#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_10#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$anon8_Then#1, inline$storm_KeWaitForSingleObject$2$anon8_Else#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$anon5#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon5#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$2$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$2$label_11#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_11#1:
+ inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$2$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$2$label_1#1:
+ goto inline$storm_KeWaitForSingleObject$2$Return#1;
+
+ inline$storm_KeWaitForSingleObject$2$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$2$Return#1;
+
+ inline$storm_KeWaitForSingleObject$2$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$2$$result.storm_KeWaitForSingleObject$243.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_31$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_31$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$2$anon23_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$anon15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon15#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_34#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_34#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$$result.storm_KeWaitForSingleObject$116.38$5$;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_35#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_35#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$2$label_35_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_35_false#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_35_true#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_37#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_37#1:
+ call inline$BDLCallLowerLevelDriverAndWait$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_38#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_38#1:
+ call inline$BDLCallLowerLevelDriverAndWait$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_39#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_39#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_36#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
+ inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$2$myNondetVar_0;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_30#1:
+ inline$BDLCallLowerLevelDriverAndWait$2$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$2$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$label_1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$label_1#1:
+ call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$2$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon21_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$2$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$2$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLCallLowerLevelDriverAndWait$2332.43$13$ := inline$BDLCallLowerLevelDriverAndWait$2$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_29$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_29$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon31_Then#1, inline$BDLPnPCancelRemove$0$anon31_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon7#1;
+
+ inline$BDLPnPCancelRemove$0$anon7#1:
+ goto inline$BDLPnPCancelRemove$0$label_33#1;
+
+ inline$BDLPnPCancelRemove$0$label_33#1:
+ inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$result.BDLCallLowerLevelDriverAndWait$2332.43$13$;
+ goto inline$BDLPnPCancelRemove$0$label_34#1;
+
+ inline$BDLPnPCancelRemove$0$label_34#1:
+ goto inline$BDLPnPCancelRemove$0$label_34_true#1, inline$BDLPnPCancelRemove$0$label_34_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_34_false#1:
+ assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 == 0;
+ goto inline$BDLPnPCancelRemove$0$label_35#1;
+
+ inline$BDLPnPCancelRemove$0$label_35#1:
+ call inline$BDLPnPCancelRemove$0$$result.IoSetDeviceInterfaceState$2349.38$25$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPCancelRemove$0$$pBDLExtension$1$2316.40$BDLPnPCancelRemove$12), 1);
+ goto inline$BDLPnPCancelRemove$0$anon32_Then#1, inline$BDLPnPCancelRemove$0$anon32_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon9#1;
+
+ inline$BDLPnPCancelRemove$0$anon9#1:
+ goto inline$BDLPnPCancelRemove$0$label_89#1;
+
+ inline$BDLPnPCancelRemove$0$label_89#1:
+ inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 := inline$BDLPnPCancelRemove$0$$result.IoSetDeviceInterfaceState$2349.38$25$;
+ goto inline$BDLPnPCancelRemove$0$label_90#1;
+
+ inline$BDLPnPCancelRemove$0$label_90#1:
+ goto inline$BDLPnPCancelRemove$0$label_90_true#1, inline$BDLPnPCancelRemove$0$label_90_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_90_false#1:
+ assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 == 0;
+ goto inline$BDLPnPCancelRemove$0$label_62#1;
+
+ inline$BDLPnPCancelRemove$0$label_90_true#1:
+ assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 != 0;
+ goto inline$BDLPnPCancelRemove$0$label_91#1;
+
+ inline$BDLPnPCancelRemove$0$label_91#1:
+ goto inline$BDLGetDebugLevel$376$Entry#1;
+
+ inline$BDLGetDebugLevel$376$Entry#1:
+ goto inline$BDLGetDebugLevel$376$start#1;
+
+ inline$BDLGetDebugLevel$376$start#1:
+ goto inline$BDLGetDebugLevel$376$label_3#1;
+
+ inline$BDLGetDebugLevel$376$label_3#1:
+ havoc inline$BDLGetDebugLevel$376$myNondetVar_0;
+ inline$BDLGetDebugLevel$376$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$376$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$376$label_1#1;
+
+ inline$BDLGetDebugLevel$376$label_1#1:
+ goto inline$BDLGetDebugLevel$376$Return#1;
+
+ inline$BDLGetDebugLevel$376$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$ := inline$BDLGetDebugLevel$376$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_91$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_91$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon39_Then#1, inline$BDLPnPCancelRemove$0$anon39_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon23#1;
+
+ inline$BDLPnPCancelRemove$0$anon23#1:
+ goto inline$BDLPnPCancelRemove$0$label_94#1;
+
+ inline$BDLPnPCancelRemove$0$label_94#1:
+ goto inline$BDLPnPCancelRemove$0$label_94_true#1, inline$BDLPnPCancelRemove$0$label_94_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_94_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_95#1;
+
+ inline$BDLPnPCancelRemove$0$label_94_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$26$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_98#1;
+
+ inline$BDLPnPCancelRemove$0$label_98#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_99#1;
+
+ inline$BDLPnPCancelRemove$0$label_99#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_100#1;
+
+ inline$BDLPnPCancelRemove$0$label_100#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_101#1;
+
+ inline$BDLPnPCancelRemove$0$label_101#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$27$;
+ goto inline$BDLPnPCancelRemove$0$label_95#1;
+
+ inline$BDLPnPCancelRemove$0$label_95#1:
+ goto inline$BDLGetDebugLevel$377$Entry#1;
+
+ inline$BDLGetDebugLevel$377$Entry#1:
+ goto inline$BDLGetDebugLevel$377$start#1;
+
+ inline$BDLGetDebugLevel$377$start#1:
+ goto inline$BDLGetDebugLevel$377$label_3#1;
+
+ inline$BDLGetDebugLevel$377$label_3#1:
+ havoc inline$BDLGetDebugLevel$377$myNondetVar_0;
+ inline$BDLGetDebugLevel$377$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$377$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$377$label_1#1;
+
+ inline$BDLGetDebugLevel$377$label_1#1:
+ goto inline$BDLGetDebugLevel$377$Return#1;
+
+ inline$BDLGetDebugLevel$377$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$ := inline$BDLGetDebugLevel$377$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_95$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_95$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon40_Then#1, inline$BDLPnPCancelRemove$0$anon40_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon25#1;
+
+ inline$BDLPnPCancelRemove$0$anon25#1:
+ goto inline$BDLPnPCancelRemove$0$label_104#1;
+
+ inline$BDLPnPCancelRemove$0$label_104#1:
+ goto inline$BDLPnPCancelRemove$0$label_104_true#1, inline$BDLPnPCancelRemove$0$label_104_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_104_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_105#1;
+
+ inline$BDLPnPCancelRemove$0$label_104_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$31$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_108#1;
+
+ inline$BDLPnPCancelRemove$0$label_108#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_109#1;
+
+ inline$BDLPnPCancelRemove$0$label_109#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_110#1;
+
+ inline$BDLPnPCancelRemove$0$label_110#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_111#1;
+
+ inline$BDLPnPCancelRemove$0$label_111#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2353.0$32$;
+ goto inline$BDLPnPCancelRemove$0$label_105#1;
+
+ inline$BDLPnPCancelRemove$0$label_105#1:
+ goto inline$BDLGetDebugLevel$378$Entry#1;
+
+ inline$BDLGetDebugLevel$378$Entry#1:
+ goto inline$BDLGetDebugLevel$378$start#1;
+
+ inline$BDLGetDebugLevel$378$start#1:
+ goto inline$BDLGetDebugLevel$378$label_3#1;
+
+ inline$BDLGetDebugLevel$378$label_3#1:
+ havoc inline$BDLGetDebugLevel$378$myNondetVar_0;
+ inline$BDLGetDebugLevel$378$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$378$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$378$label_1#1;
+
+ inline$BDLGetDebugLevel$378$label_1#1:
+ goto inline$BDLGetDebugLevel$378$Return#1;
+
+ inline$BDLGetDebugLevel$378$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$ := inline$BDLGetDebugLevel$378$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_105$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_105$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon41_Then#1, inline$BDLPnPCancelRemove$0$anon41_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon27#1;
+
+ inline$BDLPnPCancelRemove$0$anon27#1:
+ goto inline$BDLPnPCancelRemove$0$label_114#1;
+
+ inline$BDLPnPCancelRemove$0$label_114#1:
+ goto inline$BDLPnPCancelRemove$0$label_114_true#1, inline$BDLPnPCancelRemove$0$label_114_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_114_false#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$, 4) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_62#1;
+
+ inline$BDLPnPCancelRemove$0$label_114_true#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2353.0$36$, 4) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_115#1;
+
+ inline$BDLPnPCancelRemove$0$label_115#1:
+ goto inline$BDLPnPCancelRemove$0$label_62#1;
+
+ inline$BDLPnPCancelRemove$0$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$label_34_true#1:
+ assume inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12 != 0;
+ goto inline$BDLPnPCancelRemove$0$label_38#1;
+
+ inline$BDLPnPCancelRemove$0$label_38#1:
+ goto inline$BDLGetDebugLevel$370$Entry#1;
+
+ inline$BDLGetDebugLevel$370$Entry#1:
+ goto inline$BDLGetDebugLevel$370$start#1;
+
+ inline$BDLGetDebugLevel$370$start#1:
+ goto inline$BDLGetDebugLevel$370$label_3#1;
+
+ inline$BDLGetDebugLevel$370$label_3#1:
+ havoc inline$BDLGetDebugLevel$370$myNondetVar_0;
+ inline$BDLGetDebugLevel$370$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$370$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$370$label_1#1;
+
+ inline$BDLGetDebugLevel$370$label_1#1:
+ goto inline$BDLGetDebugLevel$370$Return#1;
+
+ inline$BDLGetDebugLevel$370$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$ := inline$BDLGetDebugLevel$370$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_38$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_38$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon33_Then#1, inline$BDLPnPCancelRemove$0$anon33_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon11#1;
+
+ inline$BDLPnPCancelRemove$0$anon11#1:
+ goto inline$BDLPnPCancelRemove$0$label_41#1;
+
+ inline$BDLPnPCancelRemove$0$label_41#1:
+ goto inline$BDLPnPCancelRemove$0$label_41_true#1, inline$BDLPnPCancelRemove$0$label_41_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_41_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_42#1;
+
+ inline$BDLPnPCancelRemove$0$label_41_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$14$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_45#1;
+
+ inline$BDLPnPCancelRemove$0$label_45#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_46#1;
+
+ inline$BDLPnPCancelRemove$0$label_46#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_47#1;
+
+ inline$BDLPnPCancelRemove$0$label_47#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_48#1;
+
+ inline$BDLPnPCancelRemove$0$label_48#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$15$;
+ goto inline$BDLPnPCancelRemove$0$label_42#1;
+
+ inline$BDLPnPCancelRemove$0$label_42#1:
+ goto inline$BDLGetDebugLevel$371$Entry#1;
+
+ inline$BDLGetDebugLevel$371$Entry#1:
+ goto inline$BDLGetDebugLevel$371$start#1;
+
+ inline$BDLGetDebugLevel$371$start#1:
+ goto inline$BDLGetDebugLevel$371$label_3#1;
+
+ inline$BDLGetDebugLevel$371$label_3#1:
+ havoc inline$BDLGetDebugLevel$371$myNondetVar_0;
+ inline$BDLGetDebugLevel$371$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$371$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$371$label_1#1;
+
+ inline$BDLGetDebugLevel$371$label_1#1:
+ goto inline$BDLGetDebugLevel$371$Return#1;
+
+ inline$BDLGetDebugLevel$371$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$ := inline$BDLGetDebugLevel$371$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_42$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_42$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon34_Then#1, inline$BDLPnPCancelRemove$0$anon34_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon13#1;
+
+ inline$BDLPnPCancelRemove$0$anon13#1:
+ goto inline$BDLPnPCancelRemove$0$label_51#1;
+
+ inline$BDLPnPCancelRemove$0$label_51#1:
+ goto inline$BDLPnPCancelRemove$0$label_51_true#1, inline$BDLPnPCancelRemove$0$label_51_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_51_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_52#1;
+
+ inline$BDLPnPCancelRemove$0$label_51_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$19$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_55#1;
+
+ inline$BDLPnPCancelRemove$0$label_55#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_56#1;
+
+ inline$BDLPnPCancelRemove$0$label_56#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_57#1;
+
+ inline$BDLPnPCancelRemove$0$label_57#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_58#1;
+
+ inline$BDLPnPCancelRemove$0$label_58#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2336.0$20$;
+ goto inline$BDLPnPCancelRemove$0$label_52#1;
+
+ inline$BDLPnPCancelRemove$0$label_52#1:
+ goto inline$BDLGetDebugLevel$372$Entry#1;
+
+ inline$BDLGetDebugLevel$372$Entry#1:
+ goto inline$BDLGetDebugLevel$372$start#1;
+
+ inline$BDLGetDebugLevel$372$start#1:
+ goto inline$BDLGetDebugLevel$372$label_3#1;
+
+ inline$BDLGetDebugLevel$372$label_3#1:
+ havoc inline$BDLGetDebugLevel$372$myNondetVar_0;
+ inline$BDLGetDebugLevel$372$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$372$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$372$label_1#1;
+
+ inline$BDLGetDebugLevel$372$label_1#1:
+ goto inline$BDLGetDebugLevel$372$Return#1;
+
+ inline$BDLGetDebugLevel$372$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$ := inline$BDLGetDebugLevel$372$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_52$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_52$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon35_Then#1, inline$BDLPnPCancelRemove$0$anon35_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon15#1;
+
+ inline$BDLPnPCancelRemove$0$anon15#1:
+ goto inline$BDLPnPCancelRemove$0$label_61#1;
+
+ inline$BDLPnPCancelRemove$0$label_61#1:
+ goto inline$BDLPnPCancelRemove$0$label_61_true#1, inline$BDLPnPCancelRemove$0$label_61_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_61_false#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$, 4) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_62#1;
+
+ inline$BDLPnPCancelRemove$0$label_61_true#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2336.0$24$, 4) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_65#1;
+
+ inline$BDLPnPCancelRemove$0$label_65#1:
+ goto inline$BDLPnPCancelRemove$0$label_62#1;
+
+ inline$BDLPnPCancelRemove$0$label_62#1:
+ goto inline$BDLGetDebugLevel$373$Entry#1;
+
+ inline$BDLGetDebugLevel$373$Entry#1:
+ goto inline$BDLGetDebugLevel$373$start#1;
+
+ inline$BDLGetDebugLevel$373$start#1:
+ goto inline$BDLGetDebugLevel$373$label_3#1;
+
+ inline$BDLGetDebugLevel$373$label_3#1:
+ havoc inline$BDLGetDebugLevel$373$myNondetVar_0;
+ inline$BDLGetDebugLevel$373$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$373$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$373$label_1#1;
+
+ inline$BDLGetDebugLevel$373$label_1#1:
+ goto inline$BDLGetDebugLevel$373$Return#1;
+
+ inline$BDLGetDebugLevel$373$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$ := inline$BDLGetDebugLevel$373$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_62$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_62$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon36_Then#1, inline$BDLPnPCancelRemove$0$anon36_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon17#1;
+
+ inline$BDLPnPCancelRemove$0$anon17#1:
+ goto inline$BDLPnPCancelRemove$0$label_66#1;
+
+ inline$BDLPnPCancelRemove$0$label_66#1:
+ goto inline$BDLPnPCancelRemove$0$label_66_true#1, inline$BDLPnPCancelRemove$0$label_66_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_66_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_67#1;
+
+ inline$BDLPnPCancelRemove$0$label_66_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$37$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_70#1;
+
+ inline$BDLPnPCancelRemove$0$label_70#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_71#1;
+
+ inline$BDLPnPCancelRemove$0$label_71#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_72#1;
+
+ inline$BDLPnPCancelRemove$0$label_72#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_73#1;
+
+ inline$BDLPnPCancelRemove$0$label_73#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$38$;
+ goto inline$BDLPnPCancelRemove$0$label_67#1;
+
+ inline$BDLPnPCancelRemove$0$label_67#1:
+ goto inline$BDLGetDebugLevel$374$Entry#1;
+
+ inline$BDLGetDebugLevel$374$Entry#1:
+ goto inline$BDLGetDebugLevel$374$start#1;
+
+ inline$BDLGetDebugLevel$374$start#1:
+ goto inline$BDLGetDebugLevel$374$label_3#1;
+
+ inline$BDLGetDebugLevel$374$label_3#1:
+ havoc inline$BDLGetDebugLevel$374$myNondetVar_0;
+ inline$BDLGetDebugLevel$374$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$374$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$374$label_1#1;
+
+ inline$BDLGetDebugLevel$374$label_1#1:
+ goto inline$BDLGetDebugLevel$374$Return#1;
+
+ inline$BDLGetDebugLevel$374$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$ := inline$BDLGetDebugLevel$374$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_67$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_67$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon37_Then#1, inline$BDLPnPCancelRemove$0$anon37_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon19#1;
+
+ inline$BDLPnPCancelRemove$0$anon19#1:
+ goto inline$BDLPnPCancelRemove$0$label_76#1;
+
+ inline$BDLPnPCancelRemove$0$label_76#1:
+ goto inline$BDLPnPCancelRemove$0$label_76_true#1, inline$BDLPnPCancelRemove$0$label_76_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_76_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_77#1;
+
+ inline$BDLPnPCancelRemove$0$label_76_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$42$) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_80#1;
+
+ inline$BDLPnPCancelRemove$0$label_80#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_81#1;
+
+ inline$BDLPnPCancelRemove$0$label_81#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_82#1;
+
+ inline$BDLPnPCancelRemove$0$label_82#1:
+ call inline$BDLPnPCancelRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPCancelRemove$0$label_83#1;
+
+ inline$BDLPnPCancelRemove$0$label_83#1:
+ havoc inline$BDLPnPCancelRemove$0$$result.DbgPrint$2365.0$43$;
+ goto inline$BDLPnPCancelRemove$0$label_77#1;
+
+ inline$BDLPnPCancelRemove$0$label_77#1:
+ goto inline$BDLGetDebugLevel$375$Entry#1;
+
+ inline$BDLGetDebugLevel$375$Entry#1:
+ goto inline$BDLGetDebugLevel$375$start#1;
+
+ inline$BDLGetDebugLevel$375$start#1:
+ goto inline$BDLGetDebugLevel$375$label_3#1;
+
+ inline$BDLGetDebugLevel$375$label_3#1:
+ havoc inline$BDLGetDebugLevel$375$myNondetVar_0;
+ inline$BDLGetDebugLevel$375$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$375$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$375$label_1#1;
+
+ inline$BDLGetDebugLevel$375$label_1#1:
+ goto inline$BDLGetDebugLevel$375$Return#1;
+
+ inline$BDLGetDebugLevel$375$Return#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$ := inline$BDLGetDebugLevel$375$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPCancelRemove$0$label_77$1#1;
+
+ inline$BDLPnPCancelRemove$0$label_77$1#1:
+ goto inline$BDLPnPCancelRemove$0$anon38_Then#1, inline$BDLPnPCancelRemove$0$anon38_Else#1;
+
+ inline$BDLPnPCancelRemove$0$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPCancelRemove$0$anon21#1;
+
+ inline$BDLPnPCancelRemove$0$anon21#1:
+ goto inline$BDLPnPCancelRemove$0$label_86#1;
+
+ inline$BDLPnPCancelRemove$0$label_86#1:
+ goto inline$BDLPnPCancelRemove$0$label_86_true#1, inline$BDLPnPCancelRemove$0$label_86_false#1;
+
+ inline$BDLPnPCancelRemove$0$label_86_false#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$, 4) == 0;
+ goto inline$BDLPnPCancelRemove$0$label_87#1;
+
+ inline$BDLPnPCancelRemove$0$label_86_true#1:
+ assume BIT_BAND(inline$BDLPnPCancelRemove$0$$result.BDLGetDebugLevel$2365.0$47$, 4) != 0;
+ goto inline$BDLPnPCancelRemove$0$label_88#1;
+
+ inline$BDLPnPCancelRemove$0$label_88#1:
+ goto inline$BDLPnPCancelRemove$0$label_87#1;
+
+ inline$BDLPnPCancelRemove$0$label_87#1:
+ inline$BDLPnPCancelRemove$0$$result.BDLPnPCancelRemove$2314.0$1$ := inline$BDLPnPCancelRemove$0$$status$4$2321.28$BDLPnPCancelRemove$12;
+ goto inline$BDLPnPCancelRemove$0$label_1#1;
+
+ inline$BDLPnPCancelRemove$0$label_1#1:
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon29_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$anon28_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPCancelRemove$0$Return#1;
+
+ inline$BDLPnPCancelRemove$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPCancelRemove$952.35$33$ := inline$BDLPnPCancelRemove$0$$result.BDLPnPCancelRemove$2314.0$1$;
+ goto inline$BDLPnP$0$label_122$1#1;
+
+ inline$BDLPnP$0$label_122$1#1:
+ goto inline$BDLPnP$0$anon70_Then#1, inline$BDLPnP$0$anon70_Else#1;
+
+ inline$BDLPnP$0$anon70_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon33#1;
+
+ inline$BDLPnP$0$anon33#1:
+ goto inline$BDLPnP$0$label_151#1;
+
+ inline$BDLPnP$0$label_151#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPCancelRemove$952.35$33$;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon70_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_3#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 2;
+ goto inline$BDLPnP$0$label_119#1;
+
+ inline$BDLPnP$0$label_119#1:
+ goto inline$BDLPnPRemove$0$Entry#1;
+
+ inline$BDLPnPRemove$0$Entry#1:
+ inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pDeviceObject$1$855.24$BDLPnP$8;
+ inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pAttachedDeviceObject$6$862.36$BDLPnP$8;
+ inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPRemove$0$start#1;
+
+ inline$BDLPnPRemove$0$start#1:
+ inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16_.1;
+ inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16_.1;
+ inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16_.1;
+ inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16 := inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16_.1;
+ goto inline$BDLPnPRemove$0$label_3#1;
+
+ inline$BDLPnPRemove$0$label_3#1:
+ goto inline$BDLPnPRemove$0$label_4#1;
+
+ inline$BDLPnPRemove$0$label_4#1:
+ inline$BDLPnPRemove$0$$status$5$2484.16$BDLPnPRemove$16 := 0;
+ goto inline$BDLPnPRemove$0$label_5#1;
+
+ inline$BDLPnPRemove$0$label_5#1:
+ goto inline$BDLGetDebugLevel$202$Entry#1;
+
+ inline$BDLGetDebugLevel$202$Entry#1:
+ goto inline$BDLGetDebugLevel$202$start#1;
+
+ inline$BDLGetDebugLevel$202$start#1:
+ goto inline$BDLGetDebugLevel$202$label_3#1;
+
+ inline$BDLGetDebugLevel$202$label_3#1:
+ havoc inline$BDLGetDebugLevel$202$myNondetVar_0;
+ inline$BDLGetDebugLevel$202$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$202$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$202$label_1#1;
+
+ inline$BDLGetDebugLevel$202$label_1#1:
+ goto inline$BDLGetDebugLevel$202$Return#1;
+
+ inline$BDLGetDebugLevel$202$Return#1:
+ inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$ := inline$BDLGetDebugLevel$202$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPRemove$0$label_5$1#1;
+
+ inline$BDLPnPRemove$0$label_5$1#1:
+ goto inline$BDLPnPRemove$0$anon24_Then#1, inline$BDLPnPRemove$0$anon24_Else#1;
+
+ inline$BDLPnPRemove$0$anon24_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon1#1;
+
+ inline$BDLPnPRemove$0$anon1#1:
+ goto inline$BDLPnPRemove$0$label_8#1;
+
+ inline$BDLPnPRemove$0$label_8#1:
+ goto inline$BDLPnPRemove$0$label_8_true#1, inline$BDLPnPRemove$0$label_8_false#1;
+
+ inline$BDLPnPRemove$0$label_8_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$) == 0;
+ goto inline$BDLPnPRemove$0$label_9#1;
+
+ inline$BDLPnPRemove$0$label_8_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$2$) != 0;
+ goto inline$BDLPnPRemove$0$label_12#1;
+
+ inline$BDLPnPRemove$0$label_12#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_13#1;
+
+ inline$BDLPnPRemove$0$label_13#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_14#1;
+
+ inline$BDLPnPRemove$0$label_14#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_15#1;
+
+ inline$BDLPnPRemove$0$label_15#1:
+ havoc inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$3$;
+ goto inline$BDLPnPRemove$0$label_9#1;
+
+ inline$BDLPnPRemove$0$label_9#1:
+ goto inline$BDLGetDebugLevel$203$Entry#1;
+
+ inline$BDLGetDebugLevel$203$Entry#1:
+ goto inline$BDLGetDebugLevel$203$start#1;
+
+ inline$BDLGetDebugLevel$203$start#1:
+ goto inline$BDLGetDebugLevel$203$label_3#1;
+
+ inline$BDLGetDebugLevel$203$label_3#1:
+ havoc inline$BDLGetDebugLevel$203$myNondetVar_0;
+ inline$BDLGetDebugLevel$203$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$203$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$203$label_1#1;
+
+ inline$BDLGetDebugLevel$203$label_1#1:
+ goto inline$BDLGetDebugLevel$203$Return#1;
+
+ inline$BDLGetDebugLevel$203$Return#1:
+ inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$ := inline$BDLGetDebugLevel$203$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPRemove$0$label_9$1#1;
+
+ inline$BDLPnPRemove$0$label_9$1#1:
+ goto inline$BDLPnPRemove$0$anon25_Then#1, inline$BDLPnPRemove$0$anon25_Else#1;
+
+ inline$BDLPnPRemove$0$anon25_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon3#1;
+
+ inline$BDLPnPRemove$0$anon3#1:
+ goto inline$BDLPnPRemove$0$label_18#1;
+
+ inline$BDLPnPRemove$0$label_18#1:
+ goto inline$BDLPnPRemove$0$label_18_true#1, inline$BDLPnPRemove$0$label_18_false#1;
+
+ inline$BDLPnPRemove$0$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$) == 0;
+ goto inline$BDLPnPRemove$0$label_19#1;
+
+ inline$BDLPnPRemove$0$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$7$) != 0;
+ goto inline$BDLPnPRemove$0$label_22#1;
+
+ inline$BDLPnPRemove$0$label_22#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_23#1;
+
+ inline$BDLPnPRemove$0$label_23#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_24#1;
+
+ inline$BDLPnPRemove$0$label_24#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_25#1;
+
+ inline$BDLPnPRemove$0$label_25#1:
+ havoc inline$BDLPnPRemove$0$$result.DbgPrint$2486.0$8$;
+ goto inline$BDLPnPRemove$0$label_19#1;
+
+ inline$BDLPnPRemove$0$label_19#1:
+ goto inline$BDLGetDebugLevel$204$Entry#1;
+
+ inline$BDLGetDebugLevel$204$Entry#1:
+ goto inline$BDLGetDebugLevel$204$start#1;
+
+ inline$BDLGetDebugLevel$204$start#1:
+ goto inline$BDLGetDebugLevel$204$label_3#1;
+
+ inline$BDLGetDebugLevel$204$label_3#1:
+ havoc inline$BDLGetDebugLevel$204$myNondetVar_0;
+ inline$BDLGetDebugLevel$204$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$204$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$204$label_1#1;
+
+ inline$BDLGetDebugLevel$204$label_1#1:
+ goto inline$BDLGetDebugLevel$204$Return#1;
+
+ inline$BDLGetDebugLevel$204$Return#1:
+ inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$ := inline$BDLGetDebugLevel$204$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPRemove$0$label_19$1#1;
+
+ inline$BDLPnPRemove$0$label_19$1#1:
+ goto inline$BDLPnPRemove$0$anon26_Then#1, inline$BDLPnPRemove$0$anon26_Else#1;
+
+ inline$BDLPnPRemove$0$anon26_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon5#1;
+
+ inline$BDLPnPRemove$0$anon5#1:
+ goto inline$BDLPnPRemove$0$label_28#1;
+
+ inline$BDLPnPRemove$0$label_28#1:
+ goto inline$BDLPnPRemove$0$label_28_true#1, inline$BDLPnPRemove$0$label_28_false#1;
+
+ inline$BDLPnPRemove$0$label_28_false#1:
+ assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$, 4) == 0;
+ goto inline$BDLPnPRemove$0$label_29#1;
+
+ inline$BDLPnPRemove$0$label_28_true#1:
+ assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2486.0$12$, 4) != 0;
+ goto inline$BDLPnPRemove$0$label_30#1;
+
+ inline$BDLPnPRemove$0$label_30#1:
+ goto inline$BDLPnPRemove$0$label_29#1;
+
+ inline$BDLPnPRemove$0$label_29#1:
+ goto inline$BDLPnPRemove$0$label_29_true#1, inline$BDLPnPRemove$0$label_29_false#1;
+
+ inline$BDLPnPRemove$0$label_29_false#1:
+ havoc inline$BDLPnPRemove$0$myNondetVar_0;
+ assume inline$BDLPnPRemove$0$myNondetVar_0 == 0;
+ goto inline$BDLPnPRemove$0$label_31#1;
+
+ inline$BDLPnPRemove$0$label_31#1:
+ goto inline$BDLPnPRemove$0$label_73#1;
+
+ inline$BDLPnPRemove$0$label_73#1:
+ goto inline$BDLHandleRemove$0$Entry#1;
+
+ inline$BDLHandleRemove$0$Entry#1:
+ inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1 := inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16;
+ inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12_.1 := inline$BDLPnPRemove$0$$pIrp$4$2481.40$BDLPnPRemove$16;
+ goto inline$BDLHandleRemove$0$start#1;
+
+ inline$BDLHandleRemove$0$start#1:
+ inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12_.1;
+ inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12_.1;
+ goto inline$BDLHandleRemove$0$label_3#1;
+
+ inline$BDLHandleRemove$0$label_3#1:
+ goto inline$BDLHandleRemove$0$label_4#1;
+
+ inline$BDLHandleRemove$0$label_4#1:
+ inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := 0;
+ goto inline$BDLHandleRemove$0$label_5#1;
+
+ inline$BDLHandleRemove$0$label_5#1:
+ goto inline$BDLHandleRemove$0$label_6#1;
+
+ inline$BDLHandleRemove$0$label_6#1:
+ havoc inline$BDLHandleRemove$0$myNondetVar_0;
+ goto inline$BDLHandleRemove$0$label_7#1;
+
+ inline$BDLHandleRemove$0$label_7#1:
+ goto inline$BDLGetDebugLevel$208$Entry#1;
+
+ inline$BDLGetDebugLevel$208$Entry#1:
+ goto inline$BDLGetDebugLevel$208$start#1;
+
+ inline$BDLGetDebugLevel$208$start#1:
+ goto inline$BDLGetDebugLevel$208$label_3#1;
+
+ inline$BDLGetDebugLevel$208$label_3#1:
+ havoc inline$BDLGetDebugLevel$208$myNondetVar_0;
+ inline$BDLGetDebugLevel$208$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$208$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$208$label_1#1;
+
+ inline$BDLGetDebugLevel$208$label_1#1:
+ goto inline$BDLGetDebugLevel$208$Return#1;
+
+ inline$BDLGetDebugLevel$208$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$ := inline$BDLGetDebugLevel$208$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_7$1#1;
+
+ inline$BDLHandleRemove$0$label_7$1#1:
+ goto inline$BDLHandleRemove$0$anon42_Then#1, inline$BDLHandleRemove$0$anon42_Else#1;
+
+ inline$BDLHandleRemove$0$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon1#1;
+
+ inline$BDLHandleRemove$0$anon1#1:
+ goto inline$BDLHandleRemove$0$label_10#1;
+
+ inline$BDLHandleRemove$0$label_10#1:
+ goto inline$BDLHandleRemove$0$label_10_true#1, inline$BDLHandleRemove$0$label_10_false#1;
+
+ inline$BDLHandleRemove$0$label_10_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$) == 0;
+ goto inline$BDLHandleRemove$0$label_11#1;
+
+ inline$BDLHandleRemove$0$label_10_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$2$) != 0;
+ goto inline$BDLHandleRemove$0$label_14#1;
+
+ inline$BDLHandleRemove$0$label_14#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_15#1;
+
+ inline$BDLHandleRemove$0$label_15#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_16#1;
+
+ inline$BDLHandleRemove$0$label_16#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_17#1;
+
+ inline$BDLHandleRemove$0$label_17#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$3$;
+ goto inline$BDLHandleRemove$0$label_11#1;
+
+ inline$BDLHandleRemove$0$label_11#1:
+ goto inline$BDLGetDebugLevel$209$Entry#1;
+
+ inline$BDLGetDebugLevel$209$Entry#1:
+ goto inline$BDLGetDebugLevel$209$start#1;
+
+ inline$BDLGetDebugLevel$209$start#1:
+ goto inline$BDLGetDebugLevel$209$label_3#1;
+
+ inline$BDLGetDebugLevel$209$label_3#1:
+ havoc inline$BDLGetDebugLevel$209$myNondetVar_0;
+ inline$BDLGetDebugLevel$209$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$209$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$209$label_1#1;
+
+ inline$BDLGetDebugLevel$209$label_1#1:
+ goto inline$BDLGetDebugLevel$209$Return#1;
+
+ inline$BDLGetDebugLevel$209$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$ := inline$BDLGetDebugLevel$209$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_11$1#1;
+
+ inline$BDLHandleRemove$0$label_11$1#1:
+ goto inline$BDLHandleRemove$0$anon43_Then#1, inline$BDLHandleRemove$0$anon43_Else#1;
+
+ inline$BDLHandleRemove$0$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon3#1;
+
+ inline$BDLHandleRemove$0$anon3#1:
+ goto inline$BDLHandleRemove$0$label_20#1;
+
+ inline$BDLHandleRemove$0$label_20#1:
+ goto inline$BDLHandleRemove$0$label_20_true#1, inline$BDLHandleRemove$0$label_20_false#1;
+
+ inline$BDLHandleRemove$0$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$) == 0;
+ goto inline$BDLHandleRemove$0$label_21#1;
+
+ inline$BDLHandleRemove$0$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$7$) != 0;
+ goto inline$BDLHandleRemove$0$label_24#1;
+
+ inline$BDLHandleRemove$0$label_24#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_25#1;
+
+ inline$BDLHandleRemove$0$label_25#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_26#1;
+
+ inline$BDLHandleRemove$0$label_26#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_27#1;
+
+ inline$BDLHandleRemove$0$label_27#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2386.0$8$;
+ goto inline$BDLHandleRemove$0$label_21#1;
+
+ inline$BDLHandleRemove$0$label_21#1:
+ goto inline$BDLGetDebugLevel$210$Entry#1;
+
+ inline$BDLGetDebugLevel$210$Entry#1:
+ goto inline$BDLGetDebugLevel$210$start#1;
+
+ inline$BDLGetDebugLevel$210$start#1:
+ goto inline$BDLGetDebugLevel$210$label_3#1;
+
+ inline$BDLGetDebugLevel$210$label_3#1:
+ havoc inline$BDLGetDebugLevel$210$myNondetVar_0;
+ inline$BDLGetDebugLevel$210$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$210$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$210$label_1#1;
+
+ inline$BDLGetDebugLevel$210$label_1#1:
+ goto inline$BDLGetDebugLevel$210$Return#1;
+
+ inline$BDLGetDebugLevel$210$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$ := inline$BDLGetDebugLevel$210$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_21$1#1;
+
+ inline$BDLHandleRemove$0$label_21$1#1:
+ goto inline$BDLHandleRemove$0$anon44_Then#1, inline$BDLHandleRemove$0$anon44_Else#1;
+
+ inline$BDLHandleRemove$0$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon5#1;
+
+ inline$BDLHandleRemove$0$anon5#1:
+ goto inline$BDLHandleRemove$0$label_30#1;
+
+ inline$BDLHandleRemove$0$label_30#1:
+ goto inline$BDLHandleRemove$0$label_30_true#1, inline$BDLHandleRemove$0$label_30_false#1;
+
+ inline$BDLHandleRemove$0$label_30_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$, 4) == 0;
+ goto inline$BDLHandleRemove$0$label_31#1;
+
+ inline$BDLHandleRemove$0$label_30_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2386.0$12$, 4) != 0;
+ goto inline$BDLHandleRemove$0$label_34#1;
+
+ inline$BDLHandleRemove$0$label_34#1:
+ goto inline$BDLHandleRemove$0$label_31#1;
+
+ inline$BDLHandleRemove$0$label_31#1:
+ goto inline$storm_KeSetEvent$9$Entry#1;
+
+ inline$storm_KeSetEvent$9$Entry#1:
+ inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12);
+ goto inline$storm_KeSetEvent$9$start#1;
+
+ inline$storm_KeSetEvent$9$start#1:
+ inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$9$label_3#1;
+
+ inline$storm_KeSetEvent$9$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$9$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$9$label_1#1;
+
+ inline$storm_KeSetEvent$9$label_1#1:
+ goto inline$storm_KeSetEvent$9$Return#1;
+
+ inline$storm_KeSetEvent$9$Return#1:
+ goto inline$BDLHandleRemove$0$label_31$1#1;
+
+ inline$BDLHandleRemove$0$label_31$1#1:
+ goto inline$BDLHandleRemove$0$anon45_Then#1, inline$BDLHandleRemove$0$anon45_Else#1;
+
+ inline$BDLHandleRemove$0$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon7#1;
+
+ inline$BDLHandleRemove$0$anon7#1:
+ goto inline$BDLHandleRemove$0$label_35#1;
+
+ inline$BDLHandleRemove$0$label_35#1:
+ call inline$BDLHandleRemove$0$$result.IoSetDeviceInterfaceState$2406.29$14$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12), 0);
+ goto inline$BDLHandleRemove$0$anon46_Then#1, inline$BDLHandleRemove$0$anon46_Else#1;
+
+ inline$BDLHandleRemove$0$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon9#1;
+
+ inline$BDLHandleRemove$0$anon9#1:
+ goto inline$BDLHandleRemove$0$label_38#1;
+
+ inline$BDLHandleRemove$0$label_38#1:
+ goto inline$BDLCleanupNotificationStruct$0$Entry#1;
+
+ inline$BDLCleanupNotificationStruct$0$Entry#1:
+ inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1 := inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
+ goto inline$BDLCleanupNotificationStruct$0$start#1;
+
+ inline$BDLCleanupNotificationStruct$0$start#1:
+ call inline$BDLCleanupNotificationStruct$0$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(20);
+ call inline$BDLCleanupNotificationStruct$0$$irql$3$3113.45$BDLCleanupNotificationStruct$4 := __HAVOC_malloc(1);
+ inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4_.1;
+ goto inline$BDLCleanupNotificationStruct$0$label_3#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_3#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_4#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_4#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_5#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_5#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_6#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_6#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_7#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_7#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_8#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_8#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_9#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_9#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_10#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_10#1:
+ inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_11#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_11#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_12#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_12#1:
+ inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_13#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_13#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_14#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_14#1:
+ inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_15#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_15#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_16#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_16#1:
+ inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_17#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_17#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_18#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_18#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_19#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_19#1:
+ goto inline$BDLGetDebugLevel$211$Entry#1;
+
+ inline$BDLGetDebugLevel$211$Entry#1:
+ goto inline$BDLGetDebugLevel$211$start#1;
+
+ inline$BDLGetDebugLevel$211$start#1:
+ goto inline$BDLGetDebugLevel$211$label_3#1;
+
+ inline$BDLGetDebugLevel$211$label_3#1:
+ havoc inline$BDLGetDebugLevel$211$myNondetVar_0;
+ inline$BDLGetDebugLevel$211$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$211$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$211$label_1#1;
+
+ inline$BDLGetDebugLevel$211$label_1#1:
+ goto inline$BDLGetDebugLevel$211$Return#1;
+
+ inline$BDLGetDebugLevel$211$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$ := inline$BDLGetDebugLevel$211$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_19$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_19$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon46_Then#1, inline$BDLCleanupNotificationStruct$0$anon46_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon1#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon1#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_22#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_22#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_22_true#1, inline$BDLCleanupNotificationStruct$0$label_22_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_22_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_23#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_22_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$1$) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_26#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_26#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_27#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_27#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_28#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_28#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_29#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_29#1:
+ havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$2$;
+ goto inline$BDLCleanupNotificationStruct$0$label_23#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_23#1:
+ goto inline$BDLGetDebugLevel$212$Entry#1;
+
+ inline$BDLGetDebugLevel$212$Entry#1:
+ goto inline$BDLGetDebugLevel$212$start#1;
+
+ inline$BDLGetDebugLevel$212$start#1:
+ goto inline$BDLGetDebugLevel$212$label_3#1;
+
+ inline$BDLGetDebugLevel$212$label_3#1:
+ havoc inline$BDLGetDebugLevel$212$myNondetVar_0;
+ inline$BDLGetDebugLevel$212$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$212$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$212$label_1#1;
+
+ inline$BDLGetDebugLevel$212$label_1#1:
+ goto inline$BDLGetDebugLevel$212$Return#1;
+
+ inline$BDLGetDebugLevel$212$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$ := inline$BDLGetDebugLevel$212$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_23$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_23$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon47_Then#1, inline$BDLCleanupNotificationStruct$0$anon47_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon3#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon3#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_32#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_32#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_32_true#1, inline$BDLCleanupNotificationStruct$0$label_32_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_32_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_33#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_32_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$6$) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_36#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_36#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_37#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_37#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_38#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_38#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_39#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_39#1:
+ havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3123.0$7$;
+ goto inline$BDLCleanupNotificationStruct$0$label_33#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_33#1:
+ goto inline$BDLGetDebugLevel$213$Entry#1;
+
+ inline$BDLGetDebugLevel$213$Entry#1:
+ goto inline$BDLGetDebugLevel$213$start#1;
+
+ inline$BDLGetDebugLevel$213$start#1:
+ goto inline$BDLGetDebugLevel$213$label_3#1;
+
+ inline$BDLGetDebugLevel$213$label_3#1:
+ havoc inline$BDLGetDebugLevel$213$myNondetVar_0;
+ inline$BDLGetDebugLevel$213$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$213$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$213$label_1#1;
+
+ inline$BDLGetDebugLevel$213$label_1#1:
+ goto inline$BDLGetDebugLevel$213$Return#1;
+
+ inline$BDLGetDebugLevel$213$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$ := inline$BDLGetDebugLevel$213$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_33$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_33$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon48_Then#1, inline$BDLCleanupNotificationStruct$0$anon48_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon5#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon5#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_42#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_42#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_42_true#1, inline$BDLCleanupNotificationStruct$0$label_42_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_42_false#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$, 4) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_43#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_42_true#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3123.0$11$, 4) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_44#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_44#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_43#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_43#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_45#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_45#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_45_head#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_45_head#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_45_true#1, inline$BDLCleanupNotificationStruct$0$label_45_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_45_false#1:
+ assume 1 == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_46#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_45_true#1:
+ assume 1 != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_49#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_49#1:
+ call inline$BDLCleanupNotificationStruct$0$$result.KfRaiseIrql$3141.8$12$ := KfRaiseIrql(2);
+ goto inline$BDLCleanupNotificationStruct$0$anon50_Then#1, inline$BDLCleanupNotificationStruct$0$anon50_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon9#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon9#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_52#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_52#1:
+ inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$result.KfRaiseIrql$3141.8$12$;
+ goto inline$BDLCleanupNotificationStruct$0$label_53#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_53#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
+ assume inline$BDLCleanupNotificationStruct$0$myNondetVar_0 == inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$0$Entry#1;
+
+ inline$storm_KeAcquireSpinLock$0$Entry#1:
+ inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$storm_KeAcquireSpinLock$0$start#1;
+
+ inline$storm_KeAcquireSpinLock$0$start#1:
+ inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
+ goto inline$storm_KeAcquireSpinLock$0$label_3#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_3#1:
+ goto inline$storm_KeAcquireSpinLock$0$label_4#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_4#1:
+ goto inline$storm_getThreadID$0$Entry#1;
+
+ inline$storm_getThreadID$0$Entry#1:
+ goto inline$storm_getThreadID$0$anon0#1;
+
+ inline$storm_getThreadID$0$anon0#1:
+ inline$storm_getThreadID$0$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$0$Return#1;
+
+ inline$storm_getThreadID$0$Return#1:
+ inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$0$tid;
+ goto inline$storm_KeAcquireSpinLock$0$label_4$1#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_4$1#1:
+ goto inline$storm_KeAcquireSpinLock$0$label_7#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_7#1:
+ inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$0$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$0$label_8#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_8#1:
+ goto inline$storm_KeAcquireSpinLock$0$label_9#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_9#1:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$0$label_12#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_12#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon7_Then#1, inline$storm_KeAcquireSpinLock$0$anon7_Else#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon1#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_13#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_13#1:
+ goto inline$storm_KeAcquireSpinLock$0$label_13_true#1, inline$storm_KeAcquireSpinLock$0$label_13_false#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_13_false#1:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$0$label_14#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_14#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$0$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_13_true#1:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$0$label_17#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_17#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon8_Then#1, inline$storm_KeAcquireSpinLock$0$anon8_Else#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$anon4#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon4#1:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$0$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
+ goto inline$storm_KeAcquireSpinLock$0$label_18#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_18#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$0$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$0$$tid$3$128.6$storm_KeAcquireSpinLock$8];
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_19#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_19#1:
+ goto inline$storm_KeAcquireSpinLock$0$anon9_Then#1, inline$storm_KeAcquireSpinLock$0$anon9_Else#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon9_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$0$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon9_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$0$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon6#1:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$0$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$0$label_1#1:
+ goto inline$storm_KeAcquireSpinLock$0$Return#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$Return#1;
+
+ inline$storm_KeAcquireSpinLock$0$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$0$Return#1;
+
+ inline$storm_KeAcquireSpinLock$0$Return#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_53$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_53$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon51_Then#1, inline$BDLCleanupNotificationStruct$0$anon51_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon11#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon11#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$0$label_56#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_56#1:
+ goto inline$IsListEmpty$1$Entry#1;
+
+ inline$IsListEmpty$1$Entry#1:
+ inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4_.1 := ControlChangeRegistrationList__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$IsListEmpty$1$start#1;
+
+ inline$IsListEmpty$1$start#1:
+ inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4_.1;
+ goto inline$IsListEmpty$1$label_3#1;
+
+ inline$IsListEmpty$1$label_3#1:
+ havoc inline$IsListEmpty$1$myNondetVar_0;
+ inline$IsListEmpty$1$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$1$myNondetVar_0, inline$IsListEmpty$1$$ListHead$1$8097.28$IsListEmpty$4));
+ goto inline$IsListEmpty$1$label_1#1;
+
+ inline$IsListEmpty$1$label_1#1:
+ goto inline$IsListEmpty$1$Return#1;
+
+ inline$IsListEmpty$1$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$ := inline$IsListEmpty$1$$result.IsListEmpty$8096.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_56$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_56$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon52_Then#1, inline$BDLCleanupNotificationStruct$0$anon52_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon13#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon13#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_59#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_59#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_59_true#1, inline$BDLCleanupNotificationStruct$0$label_59_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_59_false#1:
+ assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$ == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_60#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_60#1:
+ goto inline$RemoveHeadList$0$Entry#1;
+
+ inline$RemoveHeadList$0$Entry#1:
+ goto inline$RemoveHeadList$0$start#1;
+
+ inline$RemoveHeadList$0$start#1:
+ goto inline$RemoveHeadList$0$label_3#1;
+
+ inline$RemoveHeadList$0$label_3#1:
+ goto inline$RemoveHeadList$0$label_4#1;
+
+ inline$RemoveHeadList$0$label_4#1:
+ goto inline$RemoveHeadList$0$label_5#1;
+
+ inline$RemoveHeadList$0$label_5#1:
+ havoc inline$RemoveHeadList$0$myNondetVar_0;
+ inline$RemoveHeadList$0$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$0$myNondetVar_0;
+ goto inline$RemoveHeadList$0$label_6#1;
+
+ inline$RemoveHeadList$0$label_6#1:
+ havoc inline$RemoveHeadList$0$myNondetVar_0;
+ goto inline$RemoveHeadList$0$label_7#1;
+
+ inline$RemoveHeadList$0$label_7#1:
+ goto inline$RemoveHeadList$0$label_8#1;
+
+ inline$RemoveHeadList$0$label_8#1:
+ goto inline$RemoveHeadList$0$label_9#1;
+
+ inline$RemoveHeadList$0$label_9#1:
+ inline$RemoveHeadList$0$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$0$$Entry$3$8126.16$RemoveHeadList$4;
+ goto inline$RemoveHeadList$0$label_1#1;
+
+ inline$RemoveHeadList$0$label_1#1:
+ goto inline$RemoveHeadList$0$Return#1;
+
+ inline$RemoveHeadList$0$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3153.26$14$ := inline$RemoveHeadList$0$$result.RemoveHeadList$8121.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_60$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_60$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon53_Then#1, inline$BDLCleanupNotificationStruct$0$anon53_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon15#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon15#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_63#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_63#1:
+ inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3153.26$14$;
+ goto inline$BDLCleanupNotificationStruct$0$label_64#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_64#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
+ assume inline$BDLCleanupNotificationStruct$0$myNondetVar_0 == inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$0$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$0$Entry#1:
+ inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$storm_KeReleaseSpinLock$0$start#1;
+
+ inline$storm_KeReleaseSpinLock$0$start#1:
+ inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$0$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$0$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$0$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$anon5_Then#1, inline$storm_KeReleaseSpinLock$0$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$0$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$0$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_8#1:
+ goto inline$storm_getThreadID$1$Entry#1;
+
+ inline$storm_getThreadID$1$Entry#1:
+ goto inline$storm_getThreadID$1$anon0#1;
+
+ inline$storm_getThreadID$1$anon0#1:
+ inline$storm_getThreadID$1$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$1$Return#1;
+
+ inline$storm_getThreadID$1$Return#1:
+ inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$1$tid;
+ goto inline$storm_KeReleaseSpinLock$0$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$0$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$0$label_11_true#1, inline$storm_KeReleaseSpinLock$0$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$0$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$0$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$0$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$0$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$0$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$0$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$0$anon6_Then#1, inline$storm_KeReleaseSpinLock$0$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$0$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$0$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$0$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$0$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$0$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$0$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$0$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$0$Return#1;
+
+ inline$storm_KeReleaseSpinLock$0$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$0$Return#1;
+
+ inline$storm_KeReleaseSpinLock$0$Return#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_64$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_64$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon54_Then#1, inline$BDLCleanupNotificationStruct$0$anon54_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon54_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon17#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon17#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$0$label_67#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_67#1:
+ call KfLowerIrql(inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
+ goto inline$BDLCleanupNotificationStruct$0$anon55_Then#1, inline$BDLCleanupNotificationStruct$0$anon55_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon55_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon19#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon19#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_70#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_70#1:
+ inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$0$$pRegistrationListEntry$9$3119.36$BDLCleanupNotificationStruct$4, 1, 12);
+ goto inline$BDLCleanupNotificationStruct$0$label_71#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_71#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$0$label_72#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_72#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$0$label_73#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_73#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$0$label_74#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_74#1:
+ call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$0$$pControlChangeRegistration$8$3118.37$BDLCleanupNotificationStruct$4, 541869122);
+ goto inline$BDLCleanupNotificationStruct$0$anon56_Then#1, inline$BDLCleanupNotificationStruct$0$anon56_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon56_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon21#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon21#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_77#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_77#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_80#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_80#1:
+ inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$callresult.$3172.84$15$;
+ goto inline$BDLCleanupNotificationStruct$0$label_81#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_81#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_81_true#1, inline$BDLCleanupNotificationStruct$0$label_81_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_81_false#1:
+ assume inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4 == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_45_head#0;
+
+ inline$BDLCleanupNotificationStruct$0$label_81_true#1:
+ assume inline$BDLCleanupNotificationStruct$0$$status$11$3121.36$BDLCleanupNotificationStruct$4 != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_82#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_82#1:
+ goto inline$BDLGetDebugLevel$214$Entry#1;
+
+ inline$BDLGetDebugLevel$214$Entry#1:
+ goto inline$BDLGetDebugLevel$214$start#1;
+
+ inline$BDLGetDebugLevel$214$start#1:
+ goto inline$BDLGetDebugLevel$214$label_3#1;
+
+ inline$BDLGetDebugLevel$214$label_3#1:
+ havoc inline$BDLGetDebugLevel$214$myNondetVar_0;
+ inline$BDLGetDebugLevel$214$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$214$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$214$label_1#1;
+
+ inline$BDLGetDebugLevel$214$label_1#1:
+ goto inline$BDLGetDebugLevel$214$Return#1;
+
+ inline$BDLGetDebugLevel$214$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$ := inline$BDLGetDebugLevel$214$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_82$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_82$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon57_Then#1, inline$BDLCleanupNotificationStruct$0$anon57_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon57_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon23#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon23#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_85#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_85#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_85_true#1, inline$BDLCleanupNotificationStruct$0$label_85_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_85_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_86#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_85_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$16$) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_89#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_89#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_90#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_90#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_91#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_91#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_92#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_92#1:
+ havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$17$;
+ goto inline$BDLCleanupNotificationStruct$0$label_86#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_86#1:
+ goto inline$BDLGetDebugLevel$215$Entry#1;
+
+ inline$BDLGetDebugLevel$215$Entry#1:
+ goto inline$BDLGetDebugLevel$215$start#1;
+
+ inline$BDLGetDebugLevel$215$start#1:
+ goto inline$BDLGetDebugLevel$215$label_3#1;
+
+ inline$BDLGetDebugLevel$215$label_3#1:
+ havoc inline$BDLGetDebugLevel$215$myNondetVar_0;
+ inline$BDLGetDebugLevel$215$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$215$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$215$label_1#1;
+
+ inline$BDLGetDebugLevel$215$label_1#1:
+ goto inline$BDLGetDebugLevel$215$Return#1;
+
+ inline$BDLGetDebugLevel$215$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$ := inline$BDLGetDebugLevel$215$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_86$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_86$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon58_Then#1, inline$BDLCleanupNotificationStruct$0$anon58_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon58_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon25#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon25#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_95#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_95#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_95_true#1, inline$BDLCleanupNotificationStruct$0$label_95_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_95_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_96#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_95_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$21$) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_99#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_99#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_100#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_100#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_101#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_101#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_102#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_102#1:
+ havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3178.0$22$;
+ goto inline$BDLCleanupNotificationStruct$0$label_96#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_96#1:
+ goto inline$BDLGetDebugLevel$216$Entry#1;
+
+ inline$BDLGetDebugLevel$216$Entry#1:
+ goto inline$BDLGetDebugLevel$216$start#1;
+
+ inline$BDLGetDebugLevel$216$start#1:
+ goto inline$BDLGetDebugLevel$216$label_3#1;
+
+ inline$BDLGetDebugLevel$216$label_3#1:
+ havoc inline$BDLGetDebugLevel$216$myNondetVar_0;
+ inline$BDLGetDebugLevel$216$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$216$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$216$label_1#1;
+
+ inline$BDLGetDebugLevel$216$label_1#1:
+ goto inline$BDLGetDebugLevel$216$Return#1;
+
+ inline$BDLGetDebugLevel$216$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$ := inline$BDLGetDebugLevel$216$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_96$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_96$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon59_Then#1, inline$BDLCleanupNotificationStruct$0$anon59_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon59_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon27#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon27#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_105#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_105#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_105_true#1, inline$BDLCleanupNotificationStruct$0$label_105_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_105_false#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$, 4) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_45_head#0;
+
+ inline$BDLCleanupNotificationStruct$0$label_105_true#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3178.0$26$, 4) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_106#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_106#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_45_head#0;
+
+ inline$BDLCleanupNotificationStruct$0$label_45_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupNotificationStruct$0$anon59_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon58_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon57_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon56_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon55_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon54_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_59_true#1:
+ assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3144.23$13$ != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_46#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_46#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_46_head#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_46_head#1:
+ goto inline$IsListEmpty$0$Entry#1;
+
+ inline$IsListEmpty$0$Entry#1:
+ inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4_.1 := ISRControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$IsListEmpty$0$start#1;
+
+ inline$IsListEmpty$0$start#1:
+ inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4_.1;
+ goto inline$IsListEmpty$0$label_3#1;
+
+ inline$IsListEmpty$0$label_3#1:
+ havoc inline$IsListEmpty$0$myNondetVar_0;
+ inline$IsListEmpty$0$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$0$myNondetVar_0, inline$IsListEmpty$0$$ListHead$1$8097.28$IsListEmpty$4));
+ goto inline$IsListEmpty$0$label_1#1;
+
+ inline$IsListEmpty$0$label_1#1:
+ goto inline$IsListEmpty$0$Return#1;
+
+ inline$IsListEmpty$0$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$ := inline$IsListEmpty$0$$result.IsListEmpty$8096.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_46_head$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_46_head$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon49_Then#1, inline$BDLCleanupNotificationStruct$0$anon49_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon7#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon7#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_107#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_107#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_107_true#1, inline$BDLCleanupNotificationStruct$0$label_107_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_107_false#1:
+ assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$ == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_108#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_108#1:
+ goto inline$RemoveHeadList$1$Entry#1;
+
+ inline$RemoveHeadList$1$Entry#1:
+ goto inline$RemoveHeadList$1$start#1;
+
+ inline$RemoveHeadList$1$start#1:
+ goto inline$RemoveHeadList$1$label_3#1;
+
+ inline$RemoveHeadList$1$label_3#1:
+ goto inline$RemoveHeadList$1$label_4#1;
+
+ inline$RemoveHeadList$1$label_4#1:
+ goto inline$RemoveHeadList$1$label_5#1;
+
+ inline$RemoveHeadList$1$label_5#1:
+ havoc inline$RemoveHeadList$1$myNondetVar_0;
+ goto inline$RemoveHeadList$1$label_6#1;
+
+ inline$RemoveHeadList$1$label_6#1:
+ havoc inline$RemoveHeadList$1$myNondetVar_0;
+ goto inline$RemoveHeadList$1$label_7#1;
+
+ inline$RemoveHeadList$1$label_7#1:
+ goto inline$RemoveHeadList$1$label_8#1;
+
+ inline$RemoveHeadList$1$label_8#1:
+ goto inline$RemoveHeadList$1$label_9#1;
+
+ inline$RemoveHeadList$1$label_9#1:
+ goto inline$RemoveHeadList$1$label_1#1;
+
+ inline$RemoveHeadList$1$label_1#1:
+ goto inline$RemoveHeadList$1$Return#1;
+
+ inline$RemoveHeadList$1$Return#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_108$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_108$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon60_Then#1, inline$BDLCleanupNotificationStruct$0$anon60_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon60_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon29#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon29#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_154#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_154#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_155#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_155#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_156#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_156#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_46_head#0;
+
+ inline$BDLCleanupNotificationStruct$0$label_46_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupNotificationStruct$0$anon60_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_107_true#1:
+ assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3199.23$27$ != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_111#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_111#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_111_head#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_111_head#1:
+ goto inline$IsListEmpty$2$Entry#1;
+
+ inline$IsListEmpty$2$Entry#1:
+ inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4_.1 := IOCTLControlChangeQueue__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$IsListEmpty$2$start#1;
+
+ inline$IsListEmpty$2$start#1:
+ inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4 := inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4_.1;
+ goto inline$IsListEmpty$2$label_3#1;
+
+ inline$IsListEmpty$2$label_3#1:
+ havoc inline$IsListEmpty$2$myNondetVar_0;
+ inline$IsListEmpty$2$$result.IsListEmpty$8096.0$1$ := LIFT(INT_EQ(inline$IsListEmpty$2$myNondetVar_0, inline$IsListEmpty$2$$ListHead$1$8097.28$IsListEmpty$4));
+ goto inline$IsListEmpty$2$label_1#1;
+
+ inline$IsListEmpty$2$label_1#1:
+ goto inline$IsListEmpty$2$Return#1;
+
+ inline$IsListEmpty$2$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$ := inline$IsListEmpty$2$$result.IsListEmpty$8096.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_111_head$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_111_head$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon61_Then#1, inline$BDLCleanupNotificationStruct$0$anon61_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon61_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon31#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon31#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_114#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_114#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_114_true#1, inline$BDLCleanupNotificationStruct$0$label_114_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_114_false#1:
+ assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$ == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_115#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_115#1:
+ goto inline$RemoveHeadList$2$Entry#1;
+
+ inline$RemoveHeadList$2$Entry#1:
+ goto inline$RemoveHeadList$2$start#1;
+
+ inline$RemoveHeadList$2$start#1:
+ goto inline$RemoveHeadList$2$label_3#1;
+
+ inline$RemoveHeadList$2$label_3#1:
+ goto inline$RemoveHeadList$2$label_4#1;
+
+ inline$RemoveHeadList$2$label_4#1:
+ goto inline$RemoveHeadList$2$label_5#1;
+
+ inline$RemoveHeadList$2$label_5#1:
+ havoc inline$RemoveHeadList$2$myNondetVar_0;
+ inline$RemoveHeadList$2$$Entry$3$8126.16$RemoveHeadList$4 := inline$RemoveHeadList$2$myNondetVar_0;
+ goto inline$RemoveHeadList$2$label_6#1;
+
+ inline$RemoveHeadList$2$label_6#1:
+ havoc inline$RemoveHeadList$2$myNondetVar_0;
+ goto inline$RemoveHeadList$2$label_7#1;
+
+ inline$RemoveHeadList$2$label_7#1:
+ goto inline$RemoveHeadList$2$label_8#1;
+
+ inline$RemoveHeadList$2$label_8#1:
+ goto inline$RemoveHeadList$2$label_9#1;
+
+ inline$RemoveHeadList$2$label_9#1:
+ inline$RemoveHeadList$2$$result.RemoveHeadList$8121.0$1$ := inline$RemoveHeadList$2$$Entry$3$8126.16$RemoveHeadList$4;
+ goto inline$RemoveHeadList$2$label_1#1;
+
+ inline$RemoveHeadList$2$label_1#1:
+ goto inline$RemoveHeadList$2$Return#1;
+
+ inline$RemoveHeadList$2$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3218.26$30$ := inline$RemoveHeadList$2$$result.RemoveHeadList$8121.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_115$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_115$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon62_Then#1, inline$BDLCleanupNotificationStruct$0$anon62_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon62_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon33#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon33#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_149#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_149#1:
+ inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4 := inline$BDLCleanupNotificationStruct$0$$result.RemoveHeadList$3218.26$30$;
+ goto inline$BDLCleanupNotificationStruct$0$label_150#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_150#1:
+ inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4 := MINUS_LEFT_PTR(inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeEntry$7$3117.36$BDLCleanupNotificationStruct$4, 1, 16);
+ goto inline$BDLCleanupNotificationStruct$0$label_151#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_151#1:
+ call ExFreePoolWithTag(inline$BDLCleanupNotificationStruct$0$$pIOCTLControlChangeItem$6$3116.37$BDLCleanupNotificationStruct$4, 541869122);
+ goto inline$BDLCleanupNotificationStruct$0$anon68_Then#1, inline$BDLCleanupNotificationStruct$0$anon68_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon68_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon45#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon45#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_111_head#0;
+
+ inline$BDLCleanupNotificationStruct$0$label_111_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupNotificationStruct$0$anon68_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon62_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_114_true#1:
+ assume inline$BDLCleanupNotificationStruct$0$$result.IsListEmpty$3215.23$29$ != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_118#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_118#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
+ assume inline$BDLCleanupNotificationStruct$0$myNondetVar_0 == inline$BDLCleanupNotificationStruct$0$myNondetVar_1;
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$storm_KeReleaseSpinLock$1$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$1$Entry#1:
+ inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := ControlChangeLock__BDL_CONTROL_CHANGE_STRUCT(ControlChangeStruct__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLCleanupNotificationStruct$0$$pBDLExtension$1$3110.40$BDLCleanupNotificationStruct$4));
+ goto inline$storm_KeReleaseSpinLock$1$start#1;
+
+ inline$storm_KeReleaseSpinLock$1$start#1:
+ inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$1$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$1$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$1$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$anon5_Then#1, inline$storm_KeReleaseSpinLock$1$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$1$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$1$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_8#1:
+ goto inline$storm_getThreadID$2$Entry#1;
+
+ inline$storm_getThreadID$2$Entry#1:
+ goto inline$storm_getThreadID$2$anon0#1;
+
+ inline$storm_getThreadID$2$anon0#1:
+ inline$storm_getThreadID$2$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$2$Return#1;
+
+ inline$storm_getThreadID$2$Return#1:
+ inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$2$tid;
+ goto inline$storm_KeReleaseSpinLock$1$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$1$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$1$label_11_true#1, inline$storm_KeReleaseSpinLock$1$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$1$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$1$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$1$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$1$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$1$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$1$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$1$anon6_Then#1, inline$storm_KeReleaseSpinLock$1$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$1$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$1$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$1$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$1$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$1$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$1$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$1$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$1$Return#1;
+
+ inline$storm_KeReleaseSpinLock$1$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$1$Return#1;
+
+ inline$storm_KeReleaseSpinLock$1$Return#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_118$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_118$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon63_Then#1, inline$BDLCleanupNotificationStruct$0$anon63_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon63_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon35#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon35#1:
+ havoc inline$BDLCleanupNotificationStruct$0$myNondetVar_0;
+ goto inline$BDLCleanupNotificationStruct$0$label_121#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_121#1:
+ call KfLowerIrql(inline$BDLCleanupNotificationStruct$0$$OldIrql$2$3113.36$BDLCleanupNotificationStruct$4);
+ goto inline$BDLCleanupNotificationStruct$0$anon64_Then#1, inline$BDLCleanupNotificationStruct$0$anon64_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon64_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon37#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon37#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_124#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_124#1:
+ goto inline$BDLGetDebugLevel$217$Entry#1;
+
+ inline$BDLGetDebugLevel$217$Entry#1:
+ goto inline$BDLGetDebugLevel$217$start#1;
+
+ inline$BDLGetDebugLevel$217$start#1:
+ goto inline$BDLGetDebugLevel$217$label_3#1;
+
+ inline$BDLGetDebugLevel$217$label_3#1:
+ havoc inline$BDLGetDebugLevel$217$myNondetVar_0;
+ inline$BDLGetDebugLevel$217$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$217$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$217$label_1#1;
+
+ inline$BDLGetDebugLevel$217$label_1#1:
+ goto inline$BDLGetDebugLevel$217$Return#1;
+
+ inline$BDLGetDebugLevel$217$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$ := inline$BDLGetDebugLevel$217$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_124$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_124$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon65_Then#1, inline$BDLCleanupNotificationStruct$0$anon65_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon65_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon39#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon39#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_127#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_127#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_127_true#1, inline$BDLCleanupNotificationStruct$0$label_127_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_127_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_128#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_127_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$31$) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_131#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_131#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_132#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_132#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_133#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_133#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_134#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_134#1:
+ havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$32$;
+ goto inline$BDLCleanupNotificationStruct$0$label_128#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_128#1:
+ goto inline$BDLGetDebugLevel$218$Entry#1;
+
+ inline$BDLGetDebugLevel$218$Entry#1:
+ goto inline$BDLGetDebugLevel$218$start#1;
+
+ inline$BDLGetDebugLevel$218$start#1:
+ goto inline$BDLGetDebugLevel$218$label_3#1;
+
+ inline$BDLGetDebugLevel$218$label_3#1:
+ havoc inline$BDLGetDebugLevel$218$myNondetVar_0;
+ inline$BDLGetDebugLevel$218$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$218$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$218$label_1#1;
+
+ inline$BDLGetDebugLevel$218$label_1#1:
+ goto inline$BDLGetDebugLevel$218$Return#1;
+
+ inline$BDLGetDebugLevel$218$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$ := inline$BDLGetDebugLevel$218$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_128$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_128$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon66_Then#1, inline$BDLCleanupNotificationStruct$0$anon66_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon66_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon41#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon41#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_137#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_137#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_137_true#1, inline$BDLCleanupNotificationStruct$0$label_137_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_137_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_138#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_137_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$36$) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_141#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_141#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_142#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_142#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_143#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_143#1:
+ call inline$BDLCleanupNotificationStruct$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupNotificationStruct$0$label_144#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_144#1:
+ havoc inline$BDLCleanupNotificationStruct$0$$result.DbgPrint$3231.0$37$;
+ goto inline$BDLCleanupNotificationStruct$0$label_138#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_138#1:
+ goto inline$BDLGetDebugLevel$219$Entry#1;
+
+ inline$BDLGetDebugLevel$219$Entry#1:
+ goto inline$BDLGetDebugLevel$219$start#1;
+
+ inline$BDLGetDebugLevel$219$start#1:
+ goto inline$BDLGetDebugLevel$219$label_3#1;
+
+ inline$BDLGetDebugLevel$219$label_3#1:
+ havoc inline$BDLGetDebugLevel$219$myNondetVar_0;
+ inline$BDLGetDebugLevel$219$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$219$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$219$label_1#1;
+
+ inline$BDLGetDebugLevel$219$label_1#1:
+ goto inline$BDLGetDebugLevel$219$Return#1;
+
+ inline$BDLGetDebugLevel$219$Return#1:
+ inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$ := inline$BDLGetDebugLevel$219$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupNotificationStruct$0$label_138$1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_138$1#1:
+ goto inline$BDLCleanupNotificationStruct$0$anon67_Then#1, inline$BDLCleanupNotificationStruct$0$anon67_Else#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon67_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$anon43#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon43#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_147#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_147#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_147_true#1, inline$BDLCleanupNotificationStruct$0$label_147_false#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_147_false#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$, 4) == 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_147_true#1:
+ assume BIT_BAND(inline$BDLCleanupNotificationStruct$0$$result.BDLGetDebugLevel$3231.0$41$, 4) != 0;
+ goto inline$BDLCleanupNotificationStruct$0$label_148#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_148#1:
+ goto inline$BDLCleanupNotificationStruct$0$label_1#1;
+
+ inline$BDLCleanupNotificationStruct$0$label_1#1:
+ call __HAVOC_free(inline$BDLCleanupNotificationStruct$0$$bddiRegisterNotifyParams$10$3120.36$BDLCleanupNotificationStruct$4);
+ call __HAVOC_free(inline$BDLCleanupNotificationStruct$0$$irql$3$3113.45$BDLCleanupNotificationStruct$4);
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon67_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon66_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon65_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon64_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon63_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon61_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupNotificationStruct$0$Return#1;
+
+ inline$BDLCleanupNotificationStruct$0$Return#1:
+ goto inline$BDLHandleRemove$0$label_38$1#1;
+
+ inline$BDLHandleRemove$0$label_38$1#1:
+ goto inline$BDLHandleRemove$0$anon47_Then#1, inline$BDLHandleRemove$0$anon47_Else#1;
+
+ inline$BDLHandleRemove$0$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon11#1;
+
+ inline$BDLHandleRemove$0$anon11#1:
+ goto inline$BDLHandleRemove$0$label_41#1;
+
+ inline$BDLHandleRemove$0$label_41#1:
+ goto inline$BDLCleanupDataHandles$0$Entry#1;
+
+ inline$BDLCleanupDataHandles$0$Entry#1:
+ inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1 := inline$BDLHandleRemove$0$$pBDLExtension$1$2378.40$BDLHandleRemove$12;
+ goto inline$BDLCleanupDataHandles$0$start#1;
+
+ inline$BDLCleanupDataHandles$0$start#1:
+ call inline$BDLCleanupDataHandles$0$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(4);
+ call inline$BDLCleanupDataHandles$0$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(8);
+ call inline$BDLCleanupDataHandles$0$$irql$6$3249.28$BDLCleanupDataHandles$4 := __HAVOC_malloc(1);
+ inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4_.1;
+ goto inline$BDLCleanupDataHandles$0$label_3#1;
+
+ inline$BDLCleanupDataHandles$0$label_3#1:
+ goto inline$BDLCleanupDataHandles$0$label_4#1;
+
+ inline$BDLCleanupDataHandles$0$label_4#1:
+ goto inline$BDLCleanupDataHandles$0$label_5#1;
+
+ inline$BDLCleanupDataHandles$0$label_5#1:
+ inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := 0;
+ goto inline$BDLCleanupDataHandles$0$label_6#1;
+
+ inline$BDLCleanupDataHandles$0$label_6#1:
+ goto inline$BDLCleanupDataHandles$0$label_7#1;
+
+ inline$BDLCleanupDataHandles$0$label_7#1:
+ goto inline$BDLCleanupDataHandles$0$label_8#1;
+
+ inline$BDLCleanupDataHandles$0$label_8#1:
+ goto inline$BDLCleanupDataHandles$0$label_9#1;
+
+ inline$BDLCleanupDataHandles$0$label_9#1:
+ goto inline$BDLGetDebugLevel$220$Entry#1;
+
+ inline$BDLGetDebugLevel$220$Entry#1:
+ goto inline$BDLGetDebugLevel$220$start#1;
+
+ inline$BDLGetDebugLevel$220$start#1:
+ goto inline$BDLGetDebugLevel$220$label_3#1;
+
+ inline$BDLGetDebugLevel$220$label_3#1:
+ havoc inline$BDLGetDebugLevel$220$myNondetVar_0;
+ inline$BDLGetDebugLevel$220$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$220$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$220$label_1#1;
+
+ inline$BDLGetDebugLevel$220$label_1#1:
+ goto inline$BDLGetDebugLevel$220$Return#1;
+
+ inline$BDLGetDebugLevel$220$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$ := inline$BDLGetDebugLevel$220$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_9$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_9$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon30_Then#1, inline$BDLCleanupDataHandles$0$anon30_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon1#1;
+
+ inline$BDLCleanupDataHandles$0$anon1#1:
+ goto inline$BDLCleanupDataHandles$0$label_12#1;
+
+ inline$BDLCleanupDataHandles$0$label_12#1:
+ goto inline$BDLCleanupDataHandles$0$label_12_true#1, inline$BDLCleanupDataHandles$0$label_12_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_12_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_13#1;
+
+ inline$BDLCleanupDataHandles$0$label_12_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$1$) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_16#1;
+
+ inline$BDLCleanupDataHandles$0$label_16#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_17#1;
+
+ inline$BDLCleanupDataHandles$0$label_17#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_18#1;
+
+ inline$BDLCleanupDataHandles$0$label_18#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_19#1;
+
+ inline$BDLCleanupDataHandles$0$label_19#1:
+ havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$2$;
+ goto inline$BDLCleanupDataHandles$0$label_13#1;
+
+ inline$BDLCleanupDataHandles$0$label_13#1:
+ goto inline$BDLGetDebugLevel$221$Entry#1;
+
+ inline$BDLGetDebugLevel$221$Entry#1:
+ goto inline$BDLGetDebugLevel$221$start#1;
+
+ inline$BDLGetDebugLevel$221$start#1:
+ goto inline$BDLGetDebugLevel$221$label_3#1;
+
+ inline$BDLGetDebugLevel$221$label_3#1:
+ havoc inline$BDLGetDebugLevel$221$myNondetVar_0;
+ inline$BDLGetDebugLevel$221$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$221$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$221$label_1#1;
+
+ inline$BDLGetDebugLevel$221$label_1#1:
+ goto inline$BDLGetDebugLevel$221$Return#1;
+
+ inline$BDLGetDebugLevel$221$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$ := inline$BDLGetDebugLevel$221$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_13$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_13$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon31_Then#1, inline$BDLCleanupDataHandles$0$anon31_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon3#1;
+
+ inline$BDLCleanupDataHandles$0$anon3#1:
+ goto inline$BDLCleanupDataHandles$0$label_22#1;
+
+ inline$BDLCleanupDataHandles$0$label_22#1:
+ goto inline$BDLCleanupDataHandles$0$label_22_true#1, inline$BDLCleanupDataHandles$0$label_22_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_22_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_23#1;
+
+ inline$BDLCleanupDataHandles$0$label_22_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$6$) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_26#1;
+
+ inline$BDLCleanupDataHandles$0$label_26#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_27#1;
+
+ inline$BDLCleanupDataHandles$0$label_27#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_28#1;
+
+ inline$BDLCleanupDataHandles$0$label_28#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_29#1;
+
+ inline$BDLCleanupDataHandles$0$label_29#1:
+ havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3251.0$7$;
+ goto inline$BDLCleanupDataHandles$0$label_23#1;
+
+ inline$BDLCleanupDataHandles$0$label_23#1:
+ goto inline$BDLGetDebugLevel$222$Entry#1;
+
+ inline$BDLGetDebugLevel$222$Entry#1:
+ goto inline$BDLGetDebugLevel$222$start#1;
+
+ inline$BDLGetDebugLevel$222$start#1:
+ goto inline$BDLGetDebugLevel$222$label_3#1;
+
+ inline$BDLGetDebugLevel$222$label_3#1:
+ havoc inline$BDLGetDebugLevel$222$myNondetVar_0;
+ inline$BDLGetDebugLevel$222$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$222$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$222$label_1#1;
+
+ inline$BDLGetDebugLevel$222$label_1#1:
+ goto inline$BDLGetDebugLevel$222$Return#1;
+
+ inline$BDLGetDebugLevel$222$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$ := inline$BDLGetDebugLevel$222$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_23$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_23$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon32_Then#1, inline$BDLCleanupDataHandles$0$anon32_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon5#1;
+
+ inline$BDLCleanupDataHandles$0$anon5#1:
+ goto inline$BDLCleanupDataHandles$0$label_32#1;
+
+ inline$BDLCleanupDataHandles$0$label_32#1:
+ goto inline$BDLCleanupDataHandles$0$label_32_true#1, inline$BDLCleanupDataHandles$0$label_32_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_32_false#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$, 4) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_33#1;
+
+ inline$BDLCleanupDataHandles$0$label_32_true#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3251.0$11$, 4) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_34#1;
+
+ inline$BDLCleanupDataHandles$0$label_34#1:
+ goto inline$BDLCleanupDataHandles$0$label_33#1;
+
+ inline$BDLCleanupDataHandles$0$label_33#1:
+ goto inline$BDLCleanupDataHandles$0$label_35#1;
+
+ inline$BDLCleanupDataHandles$0$label_35#1:
+ goto inline$BDLLockHandleList$0$Entry#1;
+
+ inline$BDLLockHandleList$0$Entry#1:
+ inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1 := inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
+ goto inline$BDLLockHandleList$0$start#1;
+
+ inline$BDLLockHandleList$0$start#1:
+ inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8 := inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8_.1;
+ goto inline$BDLLockHandleList$0$label_3#1;
+
+ inline$BDLLockHandleList$0$label_3#1:
+ havoc inline$BDLLockHandleList$0$myNondetVar_0;
+ havoc inline$BDLLockHandleList$0$myNondetVar_1;
+ assume inline$BDLLockHandleList$0$myNondetVar_0 == inline$BDLLockHandleList$0$myNondetVar_1;
+ goto inline$storm_KeAcquireSpinLock$1$Entry#1;
+
+ inline$storm_KeAcquireSpinLock$1$Entry#1:
+ inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLLockHandleList$0$$pBDLExtension$1$134.40$BDLLockHandleList$8);
+ goto inline$storm_KeAcquireSpinLock$1$start#1;
+
+ inline$storm_KeAcquireSpinLock$1$start#1:
+ inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8_.1;
+ goto inline$storm_KeAcquireSpinLock$1$label_3#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_3#1:
+ goto inline$storm_KeAcquireSpinLock$1$label_4#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_4#1:
+ goto inline$storm_getThreadID$3$Entry#1;
+
+ inline$storm_getThreadID$3$Entry#1:
+ goto inline$storm_getThreadID$3$anon0#1;
+
+ inline$storm_getThreadID$3$anon0#1:
+ inline$storm_getThreadID$3$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$3$Return#1;
+
+ inline$storm_getThreadID$3$Return#1:
+ inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$ := inline$storm_getThreadID$3$tid;
+ goto inline$storm_KeAcquireSpinLock$1$label_4$1#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_4$1#1:
+ goto inline$storm_KeAcquireSpinLock$1$label_7#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_7#1:
+ inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$1$$result.storm_getThreadID$128.29$1$;
+ goto inline$storm_KeAcquireSpinLock$1$label_8#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_8#1:
+ goto inline$storm_KeAcquireSpinLock$1$label_9#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_9#1:
+ __storm_atomic := true;
+ goto inline$storm_KeAcquireSpinLock$1$label_12#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_12#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon7_Then#1, inline$storm_KeAcquireSpinLock$1$anon7_Else#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon1#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8], inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_13#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_13#1:
+ goto inline$storm_KeAcquireSpinLock$1$label_13_true#1, inline$storm_KeAcquireSpinLock$1$label_13_false#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_13_false#1:
+ assume !INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$1$label_14#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_14#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeAcquireSpinLock$1$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_13_true#1:
+ assume INT_NEQ(inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8, inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8);
+ goto inline$storm_KeAcquireSpinLock$1$label_17#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_17#1:
+ havoc raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon8_Then#1, inline$storm_KeAcquireSpinLock$1$anon8_Else#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$anon4#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon4#1:
+ assume INT_EQ(inline$storm_KeAcquireSpinLock$1$$lockStatus$4$129.6$storm_KeAcquireSpinLock$8, 0);
+ goto inline$storm_KeAcquireSpinLock$1$label_18#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_18#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeAcquireSpinLock$1$$SpinLock$1$124.17$storm_KeAcquireSpinLock$8 := inline$storm_KeAcquireSpinLock$1$$tid$3$128.6$storm_KeAcquireSpinLock$8];
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_19#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_19#1:
+ goto inline$storm_KeAcquireSpinLock$1$anon9_Then#1, inline$storm_KeAcquireSpinLock$1$anon9_Else#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon9_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeAcquireSpinLock$1$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon9_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeAcquireSpinLock$1$anon6#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon6#1:
+ call contextSwitch();
+ goto inline$storm_KeAcquireSpinLock$1$label_1#1;
+
+ inline$storm_KeAcquireSpinLock$1$label_1#1:
+ goto inline$storm_KeAcquireSpinLock$1$Return#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$Return#1;
+
+ inline$storm_KeAcquireSpinLock$1$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeAcquireSpinLock$1$Return#1;
+
+ inline$storm_KeAcquireSpinLock$1$Return#1:
+ goto inline$BDLLockHandleList$0$label_3$1#1;
+
+ inline$BDLLockHandleList$0$label_3$1#1:
+ goto inline$BDLLockHandleList$0$anon2_Then#1, inline$BDLLockHandleList$0$anon2_Else#1;
+
+ inline$BDLLockHandleList$0$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLLockHandleList$0$anon1#1;
+
+ inline$BDLLockHandleList$0$anon1#1:
+ havoc inline$BDLLockHandleList$0$myNondetVar_0;
+ goto inline$BDLLockHandleList$0$label_1#1;
+
+ inline$BDLLockHandleList$0$label_1#1:
+ goto inline$BDLLockHandleList$0$Return#1;
+
+ inline$BDLLockHandleList$0$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLLockHandleList$0$Return#1;
+
+ inline$BDLLockHandleList$0$Return#1:
+ goto inline$BDLCleanupDataHandles$0$label_35$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_35$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon33_Then#1, inline$BDLCleanupDataHandles$0$anon33_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon7#1;
+
+ inline$BDLCleanupDataHandles$0$anon7#1:
+ goto inline$BDLCleanupDataHandles$0$label_38#1;
+
+ inline$BDLCleanupDataHandles$0$label_38#1:
+ goto inline$BDLCleanupDataHandles$0$label_38_head#1;
+
+ inline$BDLCleanupDataHandles$0$label_38_head#1:
+ goto inline$BDLGetFirstHandle$0$Entry#1;
+
+ inline$BDLGetFirstHandle$0$Entry#1:
+ goto inline$BDLGetFirstHandle$0$start#1;
+
+ inline$BDLGetFirstHandle$0$start#1:
+ goto inline$BDLGetFirstHandle$0$label_3#1;
+
+ inline$BDLGetFirstHandle$0$label_3#1:
+ goto inline$BDLGetFirstHandle$0$label_3_true#1, inline$BDLGetFirstHandle$0$label_3_false#1;
+
+ inline$BDLGetFirstHandle$0$label_3_false#1:
+ havoc inline$BDLGetFirstHandle$0$myNondetVar_0;
+ assume inline$BDLGetFirstHandle$0$myNondetVar_0 == 0;
+ goto inline$BDLGetFirstHandle$0$label_4#1;
+
+ inline$BDLGetFirstHandle$0$label_4#1:
+ inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$ := 0;
+ goto inline$BDLGetFirstHandle$0$label_1#1;
+
+ inline$BDLGetFirstHandle$0$label_3_true#1:
+ havoc inline$BDLGetFirstHandle$0$myNondetVar_0;
+ assume inline$BDLGetFirstHandle$0$myNondetVar_0 != 0;
+ goto inline$BDLGetFirstHandle$0$label_5#1;
+
+ inline$BDLGetFirstHandle$0$label_5#1:
+ havoc inline$BDLGetFirstHandle$0$myNondetVar_0;
+ havoc inline$BDLGetFirstHandle$0$myNondetVar_1;
+ goto inline$BDLGetFirstHandle$0$label_6#1;
+
+ inline$BDLGetFirstHandle$0$label_6#1:
+ inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$ := 1;
+ goto inline$BDLGetFirstHandle$0$label_1#1;
+
+ inline$BDLGetFirstHandle$0$label_1#1:
+ goto inline$BDLGetFirstHandle$0$Return#1;
+
+ inline$BDLGetFirstHandle$0$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$ := inline$BDLGetFirstHandle$0$$result.BDLGetFirstHandle$276.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_38_head$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_38_head$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon34_Then#1, inline$BDLCleanupDataHandles$0$anon34_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon9#1;
+
+ inline$BDLCleanupDataHandles$0$anon9#1:
+ goto inline$BDLCleanupDataHandles$0$label_41#1;
+
+ inline$BDLCleanupDataHandles$0$label_41#1:
+ goto inline$BDLCleanupDataHandles$0$label_41_true#1, inline$BDLCleanupDataHandles$0$label_41_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_41_false#1:
+ assume !INT_EQ(inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$, 1);
+ goto inline$BDLCleanupDataHandles$0$label_42#1;
+
+ inline$BDLCleanupDataHandles$0$label_42#1:
+ havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ goto inline$BDLReleaseHandleList$0$Entry#1;
+
+ inline$BDLReleaseHandleList$0$Entry#1:
+ inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1 := inline$BDLCleanupDataHandles$0$$pBDLExtension$1$3242.40$BDLCleanupDataHandles$4;
+ goto inline$BDLReleaseHandleList$0$start#1;
+
+ inline$BDLReleaseHandleList$0$start#1:
+ inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8 := inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8_.1;
+ goto inline$BDLReleaseHandleList$0$label_3#1;
+
+ inline$BDLReleaseHandleList$0$label_3#1:
+ havoc inline$BDLReleaseHandleList$0$myNondetVar_0;
+ havoc inline$BDLReleaseHandleList$0$myNondetVar_1;
+ assume inline$BDLReleaseHandleList$0$myNondetVar_0 == inline$BDLReleaseHandleList$0$myNondetVar_1;
+ goto inline$storm_KeReleaseSpinLock$2$Entry#1;
+
+ inline$storm_KeReleaseSpinLock$2$Entry#1:
+ inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1 := HandleListLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLReleaseHandleList$0$$pBDLExtension$1$145.40$BDLReleaseHandleList$8);
+ goto inline$storm_KeReleaseSpinLock$2$start#1;
+
+ inline$storm_KeReleaseSpinLock$2$start#1:
+ inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8_.1;
+ goto inline$storm_KeReleaseSpinLock$2$label_3#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_3#1:
+ goto inline$storm_KeReleaseSpinLock$2$label_4#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_4#1:
+ __storm_atomic := true;
+ goto inline$storm_KeReleaseSpinLock$2$label_7#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_7#1:
+ havoc raiseException;
+ goto inline$storm_KeReleaseSpinLock$2$anon5_Then#1, inline$storm_KeReleaseSpinLock$2$anon5_Else#1;
+
+ inline$storm_KeReleaseSpinLock$2$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeReleaseSpinLock$2$anon1#1;
+
+ inline$storm_KeReleaseSpinLock$2$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_LOCK[inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8], inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8);
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$2$label_8#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_8#1:
+ goto inline$storm_getThreadID$4$Entry#1;
+
+ inline$storm_getThreadID$4$Entry#1:
+ goto inline$storm_getThreadID$4$anon0#1;
+
+ inline$storm_getThreadID$4$anon0#1:
+ inline$storm_getThreadID$4$tid := __storm_thread_id;
+ goto inline$storm_getThreadID$4$Return#1;
+
+ inline$storm_getThreadID$4$Return#1:
+ inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$ := inline$storm_getThreadID$4$tid;
+ goto inline$storm_KeReleaseSpinLock$2$label_8$1#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_8$1#1:
+ goto inline$storm_KeReleaseSpinLock$2$label_11#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_11#1:
+ goto inline$storm_KeReleaseSpinLock$2$label_11_true#1, inline$storm_KeReleaseSpinLock$2$label_11_false#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_11_false#1:
+ assume !INT_EQ(inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$2$label_12#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_12#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_KeReleaseSpinLock$2$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_11_true#1:
+ assume INT_EQ(inline$storm_KeReleaseSpinLock$2$$lockStatus$3$144.6$storm_KeReleaseSpinLock$8, inline$storm_KeReleaseSpinLock$2$$result.storm_getThreadID$145.0$1$);
+ goto inline$storm_KeReleaseSpinLock$2$label_15#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_15#1:
+ Res_0_LOCK := Res_0_LOCK[inline$storm_KeReleaseSpinLock$2$$SpinLock$1$140.17$storm_KeReleaseSpinLock$8 := 0];
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$2$label_16#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_16#1:
+ goto inline$storm_KeReleaseSpinLock$2$anon6_Then#1, inline$storm_KeReleaseSpinLock$2$anon6_Else#1;
+
+ inline$storm_KeReleaseSpinLock$2$anon6_Else#1:
+ assume __storm_init;
+ goto inline$storm_KeReleaseSpinLock$2$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$2$anon6_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_KeReleaseSpinLock$2$anon4#1;
+
+ inline$storm_KeReleaseSpinLock$2$anon4#1:
+ call contextSwitch();
+ goto inline$storm_KeReleaseSpinLock$2$label_1#1;
+
+ inline$storm_KeReleaseSpinLock$2$label_1#1:
+ goto inline$storm_KeReleaseSpinLock$2$Return#1;
+
+ inline$storm_KeReleaseSpinLock$2$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_KeReleaseSpinLock$2$Return#1;
+
+ inline$storm_KeReleaseSpinLock$2$Return#1:
+ goto inline$BDLReleaseHandleList$0$label_3$1#1;
+
+ inline$BDLReleaseHandleList$0$label_3$1#1:
+ goto inline$BDLReleaseHandleList$0$anon2_Then#1, inline$BDLReleaseHandleList$0$anon2_Else#1;
+
+ inline$BDLReleaseHandleList$0$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLReleaseHandleList$0$anon1#1;
+
+ inline$BDLReleaseHandleList$0$anon1#1:
+ havoc inline$BDLReleaseHandleList$0$myNondetVar_0;
+ goto inline$BDLReleaseHandleList$0$label_1#1;
+
+ inline$BDLReleaseHandleList$0$label_1#1:
+ goto inline$BDLReleaseHandleList$0$Return#1;
+
+ inline$BDLReleaseHandleList$0$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLReleaseHandleList$0$Return#1;
+
+ inline$BDLReleaseHandleList$0$Return#1:
+ goto inline$BDLCleanupDataHandles$0$label_42$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_42$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon35_Then#1, inline$BDLCleanupDataHandles$0$anon35_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon11#1;
+
+ inline$BDLCleanupDataHandles$0$anon11#1:
+ goto inline$BDLCleanupDataHandles$0$label_87#1;
+
+ inline$BDLCleanupDataHandles$0$label_87#1:
+ goto inline$BDLGetDebugLevel$226$Entry#1;
+
+ inline$BDLGetDebugLevel$226$Entry#1:
+ goto inline$BDLGetDebugLevel$226$start#1;
+
+ inline$BDLGetDebugLevel$226$start#1:
+ goto inline$BDLGetDebugLevel$226$label_3#1;
+
+ inline$BDLGetDebugLevel$226$label_3#1:
+ havoc inline$BDLGetDebugLevel$226$myNondetVar_0;
+ inline$BDLGetDebugLevel$226$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$226$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$226$label_1#1;
+
+ inline$BDLGetDebugLevel$226$label_1#1:
+ goto inline$BDLGetDebugLevel$226$Return#1;
+
+ inline$BDLGetDebugLevel$226$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$ := inline$BDLGetDebugLevel$226$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_87$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_87$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon42_Then#1, inline$BDLCleanupDataHandles$0$anon42_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon25#1;
+
+ inline$BDLCleanupDataHandles$0$anon25#1:
+ goto inline$BDLCleanupDataHandles$0$label_90#1;
+
+ inline$BDLCleanupDataHandles$0$label_90#1:
+ goto inline$BDLCleanupDataHandles$0$label_90_true#1, inline$BDLCleanupDataHandles$0$label_90_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_90_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_91#1;
+
+ inline$BDLCleanupDataHandles$0$label_90_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$26$) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_94#1;
+
+ inline$BDLCleanupDataHandles$0$label_94#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_95#1;
+
+ inline$BDLCleanupDataHandles$0$label_95#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_96#1;
+
+ inline$BDLCleanupDataHandles$0$label_96#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_97#1;
+
+ inline$BDLCleanupDataHandles$0$label_97#1:
+ havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$27$;
+ goto inline$BDLCleanupDataHandles$0$label_91#1;
+
+ inline$BDLCleanupDataHandles$0$label_91#1:
+ goto inline$BDLGetDebugLevel$227$Entry#1;
+
+ inline$BDLGetDebugLevel$227$Entry#1:
+ goto inline$BDLGetDebugLevel$227$start#1;
+
+ inline$BDLGetDebugLevel$227$start#1:
+ goto inline$BDLGetDebugLevel$227$label_3#1;
+
+ inline$BDLGetDebugLevel$227$label_3#1:
+ havoc inline$BDLGetDebugLevel$227$myNondetVar_0;
+ inline$BDLGetDebugLevel$227$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$227$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$227$label_1#1;
+
+ inline$BDLGetDebugLevel$227$label_1#1:
+ goto inline$BDLGetDebugLevel$227$Return#1;
+
+ inline$BDLGetDebugLevel$227$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$ := inline$BDLGetDebugLevel$227$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_91$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_91$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon43_Then#1, inline$BDLCleanupDataHandles$0$anon43_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon27#1;
+
+ inline$BDLCleanupDataHandles$0$anon27#1:
+ goto inline$BDLCleanupDataHandles$0$label_100#1;
+
+ inline$BDLCleanupDataHandles$0$label_100#1:
+ goto inline$BDLCleanupDataHandles$0$label_100_true#1, inline$BDLCleanupDataHandles$0$label_100_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_100_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_101#1;
+
+ inline$BDLCleanupDataHandles$0$label_100_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$31$) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_104#1;
+
+ inline$BDLCleanupDataHandles$0$label_104#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_105#1;
+
+ inline$BDLCleanupDataHandles$0$label_105#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_106#1;
+
+ inline$BDLCleanupDataHandles$0$label_106#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_107#1;
+
+ inline$BDLCleanupDataHandles$0$label_107#1:
+ havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3308.0$32$;
+ goto inline$BDLCleanupDataHandles$0$label_101#1;
+
+ inline$BDLCleanupDataHandles$0$label_101#1:
+ goto inline$BDLGetDebugLevel$228$Entry#1;
+
+ inline$BDLGetDebugLevel$228$Entry#1:
+ goto inline$BDLGetDebugLevel$228$start#1;
+
+ inline$BDLGetDebugLevel$228$start#1:
+ goto inline$BDLGetDebugLevel$228$label_3#1;
+
+ inline$BDLGetDebugLevel$228$label_3#1:
+ havoc inline$BDLGetDebugLevel$228$myNondetVar_0;
+ inline$BDLGetDebugLevel$228$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$228$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$228$label_1#1;
+
+ inline$BDLGetDebugLevel$228$label_1#1:
+ goto inline$BDLGetDebugLevel$228$Return#1;
+
+ inline$BDLGetDebugLevel$228$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$ := inline$BDLGetDebugLevel$228$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_101$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_101$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon44_Then#1, inline$BDLCleanupDataHandles$0$anon44_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon29#1;
+
+ inline$BDLCleanupDataHandles$0$anon29#1:
+ goto inline$BDLCleanupDataHandles$0$label_110#1;
+
+ inline$BDLCleanupDataHandles$0$label_110#1:
+ goto inline$BDLCleanupDataHandles$0$label_110_true#1, inline$BDLCleanupDataHandles$0$label_110_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_110_false#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$, 4) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_1#1;
+
+ inline$BDLCleanupDataHandles$0$label_110_true#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3308.0$36$, 4) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_111#1;
+
+ inline$BDLCleanupDataHandles$0$label_111#1:
+ goto inline$BDLCleanupDataHandles$0$label_1#1;
+
+ inline$BDLCleanupDataHandles$0$label_1#1:
+ call __HAVOC_free(inline$BDLCleanupDataHandles$0$$bddDataHandle$4$3247.28$BDLCleanupDataHandles$4);
+ call __HAVOC_free(inline$BDLCleanupDataHandles$0$$bddiCloseHandleParams$5$3248.28$BDLCleanupDataHandles$4);
+ call __HAVOC_free(inline$BDLCleanupDataHandles$0$$irql$6$3249.28$BDLCleanupDataHandles$4);
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$label_41_true#1:
+ assume INT_EQ(inline$BDLCleanupDataHandles$0$$result.BDLGetFirstHandle$3264.27$12$, 1);
+ goto inline$BDLCleanupDataHandles$0$label_45#1;
+
+ inline$BDLCleanupDataHandles$0$label_45#1:
+ havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$Entry#1;
+
+ inline$BDLRemoveHandleFromList$0$Entry#1:
+ inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8_.1 := inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$start#1;
+
+ inline$BDLRemoveHandleFromList$0$start#1:
+ inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8_.1;
+ goto inline$BDLRemoveHandleFromList$0$label_3#1;
+
+ inline$BDLRemoveHandleFromList$0$label_3#1:
+ goto inline$BDLRemoveHandleFromList$0$label_4#1;
+
+ inline$BDLRemoveHandleFromList$0$label_4#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_5#1;
+
+ inline$BDLRemoveHandleFromList$0$label_5#1:
+ goto inline$BDLRemoveHandleFromList$0$label_6#1;
+
+ inline$BDLRemoveHandleFromList$0$label_6#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_7#1;
+
+ inline$BDLRemoveHandleFromList$0$label_7#1:
+ goto inline$BDLRemoveHandleFromList$0$label_7_true#1, inline$BDLRemoveHandleFromList$0$label_7_false#1;
+
+ inline$BDLRemoveHandleFromList$0$label_7_false#1:
+ assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
+ goto inline$BDLRemoveHandleFromList$0$label_8#1;
+
+ inline$BDLRemoveHandleFromList$0$label_8#1:
+ goto inline$BDLRemoveHandleFromList$0$label_1#1;
+
+ inline$BDLRemoveHandleFromList$0$label_7_true#1:
+ assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
+ goto inline$BDLRemoveHandleFromList$0$label_9#1;
+
+ inline$BDLRemoveHandleFromList$0$label_9#1:
+ goto inline$BDLRemoveHandleFromList$0$label_9_true#1, inline$BDLRemoveHandleFromList$0$label_9_false#1;
+
+ inline$BDLRemoveHandleFromList$0$label_9_false#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$0$label_10#1;
+
+ inline$BDLRemoveHandleFromList$0$label_10#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_20#1;
+
+ inline$BDLRemoveHandleFromList$0$label_20#1:
+ goto inline$BDLRemoveHandleFromList$0$label_20_head#1;
+
+ inline$BDLRemoveHandleFromList$0$label_20_head#1:
+ goto inline$BDLRemoveHandleFromList$0$label_20_true#1, inline$BDLRemoveHandleFromList$0$label_20_false#1;
+
+ inline$BDLRemoveHandleFromList$0$label_20_false#1:
+ assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
+ goto inline$BDLRemoveHandleFromList$0$label_21#1;
+
+ inline$BDLRemoveHandleFromList$0$label_20_true#1:
+ assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
+ goto inline$BDLRemoveHandleFromList$0$label_22#1;
+
+ inline$BDLRemoveHandleFromList$0$label_22#1:
+ goto inline$BDLRemoveHandleFromList$0$label_22_true#1, inline$BDLRemoveHandleFromList$0$label_22_false#1;
+
+ inline$BDLRemoveHandleFromList$0$label_22_false#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ assume !INT_NEQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$0$label_21#1;
+
+ inline$BDLRemoveHandleFromList$0$label_21#1:
+ goto inline$BDLRemoveHandleFromList$0$label_21_true#1, inline$BDLRemoveHandleFromList$0$label_21_false#1;
+
+ inline$BDLRemoveHandleFromList$0$label_21_false#1:
+ assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 == 0;
+ goto inline$BDLRemoveHandleFromList$0$label_25#1;
+
+ inline$BDLRemoveHandleFromList$0$label_25#1:
+ goto inline$BDLRemoveHandleFromList$0$label_1#1;
+
+ inline$BDLRemoveHandleFromList$0$label_21_true#1:
+ assume inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 != 0;
+ goto inline$BDLRemoveHandleFromList$0$label_26#1;
+
+ inline$BDLRemoveHandleFromList$0$label_26#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_27#1;
+
+ inline$BDLRemoveHandleFromList$0$label_27#1:
+ goto inline$BDLRemoveHandleFromList$0$label_27_true#1, inline$BDLRemoveHandleFromList$0$label_27_false#1;
+
+ inline$BDLRemoveHandleFromList$0$label_27_false#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$0$label_15#1;
+
+ inline$BDLRemoveHandleFromList$0$label_27_true#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$0$label_28#1;
+
+ inline$BDLRemoveHandleFromList$0$label_28#1:
+ goto inline$BDLRemoveHandleFromList$0$label_15#1;
+
+ inline$BDLRemoveHandleFromList$0$label_22_true#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ assume INT_NEQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$0$label_23#1;
+
+ inline$BDLRemoveHandleFromList$0$label_23#1:
+ goto inline$BDLRemoveHandleFromList$0$label_24#1;
+
+ inline$BDLRemoveHandleFromList$0$label_24#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8 := inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_20_head#0;
+
+ inline$BDLRemoveHandleFromList$0$label_20_head#0:
+ assume false;
+ return;
+
+ inline$BDLRemoveHandleFromList$0$label_9_true#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$$handle$2$218.24$BDLRemoveHandleFromList$8);
+ goto inline$BDLRemoveHandleFromList$0$label_11#1;
+
+ inline$BDLRemoveHandleFromList$0$label_11#1:
+ goto inline$BDLRemoveHandleFromList$0$label_11_true#1, inline$BDLRemoveHandleFromList$0$label_11_false#1;
+
+ inline$BDLRemoveHandleFromList$0$label_11_false#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_1;
+ assume !INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$myNondetVar_1);
+ goto inline$BDLRemoveHandleFromList$0$label_12#1;
+
+ inline$BDLRemoveHandleFromList$0$label_12#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_15#1;
+
+ inline$BDLRemoveHandleFromList$0$label_11_true#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_1;
+ assume INT_EQ(inline$BDLRemoveHandleFromList$0$myNondetVar_0, inline$BDLRemoveHandleFromList$0$myNondetVar_1);
+ goto inline$BDLRemoveHandleFromList$0$label_13#1;
+
+ inline$BDLRemoveHandleFromList$0$label_13#1:
+ goto inline$BDLRemoveHandleFromList$0$label_14#1;
+
+ inline$BDLRemoveHandleFromList$0$label_14#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_15#1;
+
+ inline$BDLRemoveHandleFromList$0$label_15#1:
+ havoc inline$BDLRemoveHandleFromList$0$myNondetVar_0;
+ goto inline$BDLRemoveHandleFromList$0$label_16#1;
+
+ inline$BDLRemoveHandleFromList$0$label_16#1:
+ call ExFreePoolWithTag(inline$BDLRemoveHandleFromList$0$$pListNodeToDelete$3$221.15$BDLRemoveHandleFromList$8, 1280066626);
+ goto inline$BDLRemoveHandleFromList$0$anon2_Then#1, inline$BDLRemoveHandleFromList$0$anon2_Else#1;
+
+ inline$BDLRemoveHandleFromList$0$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLRemoveHandleFromList$0$anon1#1;
+
+ inline$BDLRemoveHandleFromList$0$anon1#1:
+ goto inline$BDLRemoveHandleFromList$0$label_19#1;
+
+ inline$BDLRemoveHandleFromList$0$label_19#1:
+ goto inline$BDLRemoveHandleFromList$0$label_1#1;
+
+ inline$BDLRemoveHandleFromList$0$label_1#1:
+ goto inline$BDLRemoveHandleFromList$0$Return#1;
+
+ inline$BDLRemoveHandleFromList$0$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLRemoveHandleFromList$0$Return#1;
+
+ inline$BDLRemoveHandleFromList$0$Return#1:
+ goto inline$BDLCleanupDataHandles$0$label_45$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_45$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon36_Then#1, inline$BDLCleanupDataHandles$0$anon36_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon13#1;
+
+ inline$BDLCleanupDataHandles$0$anon13#1:
+ goto inline$BDLCleanupDataHandles$0$label_48#1;
+
+ inline$BDLCleanupDataHandles$0$label_48#1:
+ havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ goto inline$BDLCleanupDataHandles$0$label_49#1;
+
+ inline$BDLCleanupDataHandles$0$label_49#1:
+ goto inline$BDLCleanupDataHandles$0$label_49_true#1, inline$BDLCleanupDataHandles$0$label_49_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_49_false#1:
+ havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCleanupDataHandles$0$myNondetVar_0, 2);
+ goto inline$BDLCleanupDataHandles$0$label_50#1;
+
+ inline$BDLCleanupDataHandles$0$label_50#1:
+ havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ goto inline$BDLCleanupDataHandles$0$label_57#1;
+
+ inline$BDLCleanupDataHandles$0$label_57#1:
+ goto inline$BDLCleanupDataHandles$0$label_60#1;
+
+ inline$BDLCleanupDataHandles$0$label_60#1:
+ inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4 := inline$BDLCleanupDataHandles$0$$callresult.$3284.85$14$;
+ goto inline$BDLCleanupDataHandles$0$label_61#1;
+
+ inline$BDLCleanupDataHandles$0$label_61#1:
+ goto inline$BDLCleanupDataHandles$0$label_61_true#1, inline$BDLCleanupDataHandles$0$label_61_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_61_false#1:
+ assume inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4 == 0;
+ goto inline$BDLCleanupDataHandles$0$label_54#1;
+
+ inline$BDLCleanupDataHandles$0$label_61_true#1:
+ assume inline$BDLCleanupDataHandles$0$$status$2$3245.28$BDLCleanupDataHandles$4 != 0;
+ goto inline$BDLCleanupDataHandles$0$label_62#1;
+
+ inline$BDLCleanupDataHandles$0$label_62#1:
+ goto inline$BDLGetDebugLevel$223$Entry#1;
+
+ inline$BDLGetDebugLevel$223$Entry#1:
+ goto inline$BDLGetDebugLevel$223$start#1;
+
+ inline$BDLGetDebugLevel$223$start#1:
+ goto inline$BDLGetDebugLevel$223$label_3#1;
+
+ inline$BDLGetDebugLevel$223$label_3#1:
+ havoc inline$BDLGetDebugLevel$223$myNondetVar_0;
+ inline$BDLGetDebugLevel$223$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$223$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$223$label_1#1;
+
+ inline$BDLGetDebugLevel$223$label_1#1:
+ goto inline$BDLGetDebugLevel$223$Return#1;
+
+ inline$BDLGetDebugLevel$223$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$ := inline$BDLGetDebugLevel$223$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_62$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_62$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon39_Then#1, inline$BDLCleanupDataHandles$0$anon39_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon19#1;
+
+ inline$BDLCleanupDataHandles$0$anon19#1:
+ goto inline$BDLCleanupDataHandles$0$label_65#1;
+
+ inline$BDLCleanupDataHandles$0$label_65#1:
+ goto inline$BDLCleanupDataHandles$0$label_65_true#1, inline$BDLCleanupDataHandles$0$label_65_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_65_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_66#1;
+
+ inline$BDLCleanupDataHandles$0$label_65_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$15$) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_69#1;
+
+ inline$BDLCleanupDataHandles$0$label_69#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_70#1;
+
+ inline$BDLCleanupDataHandles$0$label_70#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_71#1;
+
+ inline$BDLCleanupDataHandles$0$label_71#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_72#1;
+
+ inline$BDLCleanupDataHandles$0$label_72#1:
+ havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$16$;
+ goto inline$BDLCleanupDataHandles$0$label_66#1;
+
+ inline$BDLCleanupDataHandles$0$label_66#1:
+ goto inline$BDLGetDebugLevel$224$Entry#1;
+
+ inline$BDLGetDebugLevel$224$Entry#1:
+ goto inline$BDLGetDebugLevel$224$start#1;
+
+ inline$BDLGetDebugLevel$224$start#1:
+ goto inline$BDLGetDebugLevel$224$label_3#1;
+
+ inline$BDLGetDebugLevel$224$label_3#1:
+ havoc inline$BDLGetDebugLevel$224$myNondetVar_0;
+ inline$BDLGetDebugLevel$224$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$224$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$224$label_1#1;
+
+ inline$BDLGetDebugLevel$224$label_1#1:
+ goto inline$BDLGetDebugLevel$224$Return#1;
+
+ inline$BDLGetDebugLevel$224$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$ := inline$BDLGetDebugLevel$224$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_66$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_66$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon40_Then#1, inline$BDLCleanupDataHandles$0$anon40_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon21#1;
+
+ inline$BDLCleanupDataHandles$0$anon21#1:
+ goto inline$BDLCleanupDataHandles$0$label_75#1;
+
+ inline$BDLCleanupDataHandles$0$label_75#1:
+ goto inline$BDLCleanupDataHandles$0$label_75_true#1, inline$BDLCleanupDataHandles$0$label_75_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_75_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_76#1;
+
+ inline$BDLCleanupDataHandles$0$label_75_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$20$) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_79#1;
+
+ inline$BDLCleanupDataHandles$0$label_79#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_80#1;
+
+ inline$BDLCleanupDataHandles$0$label_80#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_81#1;
+
+ inline$BDLCleanupDataHandles$0$label_81#1:
+ call inline$BDLCleanupDataHandles$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCleanupDataHandles$0$label_82#1;
+
+ inline$BDLCleanupDataHandles$0$label_82#1:
+ havoc inline$BDLCleanupDataHandles$0$$result.DbgPrint$3290.0$21$;
+ goto inline$BDLCleanupDataHandles$0$label_76#1;
+
+ inline$BDLCleanupDataHandles$0$label_76#1:
+ goto inline$BDLGetDebugLevel$225$Entry#1;
+
+ inline$BDLGetDebugLevel$225$Entry#1:
+ goto inline$BDLGetDebugLevel$225$start#1;
+
+ inline$BDLGetDebugLevel$225$start#1:
+ goto inline$BDLGetDebugLevel$225$label_3#1;
+
+ inline$BDLGetDebugLevel$225$label_3#1:
+ havoc inline$BDLGetDebugLevel$225$myNondetVar_0;
+ inline$BDLGetDebugLevel$225$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$225$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$225$label_1#1;
+
+ inline$BDLGetDebugLevel$225$label_1#1:
+ goto inline$BDLGetDebugLevel$225$Return#1;
+
+ inline$BDLGetDebugLevel$225$Return#1:
+ inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$ := inline$BDLGetDebugLevel$225$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLCleanupDataHandles$0$label_76$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_76$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon41_Then#1, inline$BDLCleanupDataHandles$0$anon41_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon23#1;
+
+ inline$BDLCleanupDataHandles$0$anon23#1:
+ goto inline$BDLCleanupDataHandles$0$label_85#1;
+
+ inline$BDLCleanupDataHandles$0$label_85#1:
+ goto inline$BDLCleanupDataHandles$0$label_85_true#1, inline$BDLCleanupDataHandles$0$label_85_false#1;
+
+ inline$BDLCleanupDataHandles$0$label_85_false#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$, 4) == 0;
+ goto inline$BDLCleanupDataHandles$0$label_54#1;
+
+ inline$BDLCleanupDataHandles$0$label_85_true#1:
+ assume BIT_BAND(inline$BDLCleanupDataHandles$0$$result.BDLGetDebugLevel$3290.0$25$, 4) != 0;
+ goto inline$BDLCleanupDataHandles$0$label_86#1;
+
+ inline$BDLCleanupDataHandles$0$label_86#1:
+ goto inline$BDLCleanupDataHandles$0$label_54#1;
+
+ inline$BDLCleanupDataHandles$0$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$label_49_true#1:
+ havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLCleanupDataHandles$0$myNondetVar_0, 2);
+ goto inline$BDLCleanupDataHandles$0$label_51#1;
+
+ inline$BDLCleanupDataHandles$0$label_51#1:
+ havoc inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ goto inline$bdliFree$0$Entry#1;
+
+ inline$bdliFree$0$Entry#1:
+ inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4_.1 := inline$BDLCleanupDataHandles$0$myNondetVar_0;
+ goto inline$bdliFree$0$start#1;
+
+ inline$bdliFree$0$start#1:
+ inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4 := inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4_.1;
+ goto inline$bdliFree$0$label_3#1;
+
+ inline$bdliFree$0$label_3#1:
+ call ExFreePoolWithTag(inline$bdliFree$0$$pvBlock$1$2740.28$bdliFree$4, 1229734978);
+ goto inline$bdliFree$0$anon2_Then#1, inline$bdliFree$0$anon2_Else#1;
+
+ inline$bdliFree$0$anon2_Else#1:
+ assume !raiseException;
+ goto inline$bdliFree$0$anon1#1;
+
+ inline$bdliFree$0$anon1#1:
+ goto inline$bdliFree$0$label_1#1;
+
+ inline$bdliFree$0$label_1#1:
+ goto inline$bdliFree$0$Return#1;
+
+ inline$bdliFree$0$anon2_Then#1:
+ assume raiseException;
+ goto inline$bdliFree$0$Return#1;
+
+ inline$bdliFree$0$Return#1:
+ goto inline$BDLCleanupDataHandles$0$label_51$1#1;
+
+ inline$BDLCleanupDataHandles$0$label_51$1#1:
+ goto inline$BDLCleanupDataHandles$0$anon37_Then#1, inline$BDLCleanupDataHandles$0$anon37_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon15#1;
+
+ inline$BDLCleanupDataHandles$0$anon15#1:
+ goto inline$BDLCleanupDataHandles$0$label_54#1;
+
+ inline$BDLCleanupDataHandles$0$label_54#1:
+ call ExFreePoolWithTag(inline$BDLCleanupDataHandles$0$$pBDDIItem$3$3246.29$BDLCleanupDataHandles$4, 541869122);
+ goto inline$BDLCleanupDataHandles$0$anon38_Then#1, inline$BDLCleanupDataHandles$0$anon38_Else#1;
+
+ inline$BDLCleanupDataHandles$0$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDataHandles$0$anon17#1;
+
+ inline$BDLCleanupDataHandles$0$anon17#1:
+ goto inline$BDLCleanupDataHandles$0$label_38_head#0;
+
+ inline$BDLCleanupDataHandles$0$label_38_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupDataHandles$0$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDataHandles$0$Return#1;
+
+ inline$BDLCleanupDataHandles$0$Return#1:
+ goto inline$BDLHandleRemove$0$label_41$1#1;
+
+ inline$BDLHandleRemove$0$label_41$1#1:
+ goto inline$BDLHandleRemove$0$anon48_Then#1, inline$BDLHandleRemove$0$anon48_Else#1;
+
+ inline$BDLHandleRemove$0$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon13#1;
+
+ inline$BDLHandleRemove$0$anon13#1:
+ goto inline$BDLHandleRemove$0$label_44#1;
+
+ inline$BDLHandleRemove$0$label_44#1:
+ goto inline$BDLHandleRemove$0$label_44_true#1, inline$BDLHandleRemove$0$label_44_false#1;
+
+ inline$BDLHandleRemove$0$label_44_false#1:
+ havoc inline$BDLHandleRemove$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLHandleRemove$0$myNondetVar_0, 1);
+ goto inline$BDLHandleRemove$0$label_45#1;
+
+ inline$BDLHandleRemove$0$label_44_true#1:
+ havoc inline$BDLHandleRemove$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLHandleRemove$0$myNondetVar_0, 1);
+ goto inline$BDLHandleRemove$0$label_48#1;
+
+ inline$BDLHandleRemove$0$label_48#1:
+ goto inline$BDLHandleRemove$0$label_51#1;
+
+ inline$BDLHandleRemove$0$label_51#1:
+ inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$callresult.$2419.71$15$;
+ goto inline$BDLHandleRemove$0$label_52#1;
+
+ inline$BDLHandleRemove$0$label_52#1:
+ goto inline$BDLHandleRemove$0$label_52_true#1, inline$BDLHandleRemove$0$label_52_false#1;
+
+ inline$BDLHandleRemove$0$label_52_false#1:
+ assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 == 0;
+ goto inline$BDLHandleRemove$0$label_53#1;
+
+ inline$BDLHandleRemove$0$label_52_true#1:
+ assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 != 0;
+ goto inline$BDLHandleRemove$0$label_54#1;
+
+ inline$BDLHandleRemove$0$label_54#1:
+ goto inline$BDLGetDebugLevel$229$Entry#1;
+
+ inline$BDLGetDebugLevel$229$Entry#1:
+ goto inline$BDLGetDebugLevel$229$start#1;
+
+ inline$BDLGetDebugLevel$229$start#1:
+ goto inline$BDLGetDebugLevel$229$label_3#1;
+
+ inline$BDLGetDebugLevel$229$label_3#1:
+ havoc inline$BDLGetDebugLevel$229$myNondetVar_0;
+ inline$BDLGetDebugLevel$229$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$229$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$229$label_1#1;
+
+ inline$BDLGetDebugLevel$229$label_1#1:
+ goto inline$BDLGetDebugLevel$229$Return#1;
+
+ inline$BDLGetDebugLevel$229$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$ := inline$BDLGetDebugLevel$229$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_54$1#1;
+
+ inline$BDLHandleRemove$0$label_54$1#1:
+ goto inline$BDLHandleRemove$0$anon49_Then#1, inline$BDLHandleRemove$0$anon49_Else#1;
+
+ inline$BDLHandleRemove$0$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon15#1;
+
+ inline$BDLHandleRemove$0$anon15#1:
+ goto inline$BDLHandleRemove$0$label_57#1;
+
+ inline$BDLHandleRemove$0$label_57#1:
+ goto inline$BDLHandleRemove$0$label_57_true#1, inline$BDLHandleRemove$0$label_57_false#1;
+
+ inline$BDLHandleRemove$0$label_57_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$) == 0;
+ goto inline$BDLHandleRemove$0$label_58#1;
+
+ inline$BDLHandleRemove$0$label_57_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$16$) != 0;
+ goto inline$BDLHandleRemove$0$label_61#1;
+
+ inline$BDLHandleRemove$0$label_61#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_62#1;
+
+ inline$BDLHandleRemove$0$label_62#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_63#1;
+
+ inline$BDLHandleRemove$0$label_63#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_64#1;
+
+ inline$BDLHandleRemove$0$label_64#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$17$;
+ goto inline$BDLHandleRemove$0$label_58#1;
+
+ inline$BDLHandleRemove$0$label_58#1:
+ goto inline$BDLGetDebugLevel$230$Entry#1;
+
+ inline$BDLGetDebugLevel$230$Entry#1:
+ goto inline$BDLGetDebugLevel$230$start#1;
+
+ inline$BDLGetDebugLevel$230$start#1:
+ goto inline$BDLGetDebugLevel$230$label_3#1;
+
+ inline$BDLGetDebugLevel$230$label_3#1:
+ havoc inline$BDLGetDebugLevel$230$myNondetVar_0;
+ inline$BDLGetDebugLevel$230$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$230$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$230$label_1#1;
+
+ inline$BDLGetDebugLevel$230$label_1#1:
+ goto inline$BDLGetDebugLevel$230$Return#1;
+
+ inline$BDLGetDebugLevel$230$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$ := inline$BDLGetDebugLevel$230$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_58$1#1;
+
+ inline$BDLHandleRemove$0$label_58$1#1:
+ goto inline$BDLHandleRemove$0$anon50_Then#1, inline$BDLHandleRemove$0$anon50_Else#1;
+
+ inline$BDLHandleRemove$0$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon17#1;
+
+ inline$BDLHandleRemove$0$anon17#1:
+ goto inline$BDLHandleRemove$0$label_67#1;
+
+ inline$BDLHandleRemove$0$label_67#1:
+ goto inline$BDLHandleRemove$0$label_67_true#1, inline$BDLHandleRemove$0$label_67_false#1;
+
+ inline$BDLHandleRemove$0$label_67_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$) == 0;
+ goto inline$BDLHandleRemove$0$label_68#1;
+
+ inline$BDLHandleRemove$0$label_67_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$21$) != 0;
+ goto inline$BDLHandleRemove$0$label_71#1;
+
+ inline$BDLHandleRemove$0$label_71#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_72#1;
+
+ inline$BDLHandleRemove$0$label_72#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_73#1;
+
+ inline$BDLHandleRemove$0$label_73#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_74#1;
+
+ inline$BDLHandleRemove$0$label_74#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2423.0$22$;
+ goto inline$BDLHandleRemove$0$label_68#1;
+
+ inline$BDLHandleRemove$0$label_68#1:
+ goto inline$BDLGetDebugLevel$231$Entry#1;
+
+ inline$BDLGetDebugLevel$231$Entry#1:
+ goto inline$BDLGetDebugLevel$231$start#1;
+
+ inline$BDLGetDebugLevel$231$start#1:
+ goto inline$BDLGetDebugLevel$231$label_3#1;
+
+ inline$BDLGetDebugLevel$231$label_3#1:
+ havoc inline$BDLGetDebugLevel$231$myNondetVar_0;
+ inline$BDLGetDebugLevel$231$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$231$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$231$label_1#1;
+
+ inline$BDLGetDebugLevel$231$label_1#1:
+ goto inline$BDLGetDebugLevel$231$Return#1;
+
+ inline$BDLGetDebugLevel$231$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$ := inline$BDLGetDebugLevel$231$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_68$1#1;
+
+ inline$BDLHandleRemove$0$label_68$1#1:
+ goto inline$BDLHandleRemove$0$anon51_Then#1, inline$BDLHandleRemove$0$anon51_Else#1;
+
+ inline$BDLHandleRemove$0$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon19#1;
+
+ inline$BDLHandleRemove$0$anon19#1:
+ goto inline$BDLHandleRemove$0$label_77#1;
+
+ inline$BDLHandleRemove$0$label_77#1:
+ goto inline$BDLHandleRemove$0$label_77_true#1, inline$BDLHandleRemove$0$label_77_false#1;
+
+ inline$BDLHandleRemove$0$label_77_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$, 4) == 0;
+ goto inline$BDLHandleRemove$0$label_53#1;
+
+ inline$BDLHandleRemove$0$label_77_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2423.0$26$, 4) != 0;
+ goto inline$BDLHandleRemove$0$label_78#1;
+
+ inline$BDLHandleRemove$0$label_78#1:
+ goto inline$BDLHandleRemove$0$label_53#1;
+
+ inline$BDLHandleRemove$0$label_53#1:
+ goto inline$BDLHandleRemove$0$label_45#1;
+
+ inline$BDLHandleRemove$0$label_45#1:
+ goto inline$BDLHandleRemove$0$label_79#1;
+
+ inline$BDLHandleRemove$0$label_79#1:
+ inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$callresult.$2437.63$27$;
+ goto inline$BDLHandleRemove$0$label_80#1;
+
+ inline$BDLHandleRemove$0$label_80#1:
+ goto inline$BDLHandleRemove$0$label_80_true#1, inline$BDLHandleRemove$0$label_80_false#1;
+
+ inline$BDLHandleRemove$0$label_80_false#1:
+ assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 == 0;
+ goto inline$BDLHandleRemove$0$label_81#1;
+
+ inline$BDLHandleRemove$0$label_80_true#1:
+ assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 != 0;
+ goto inline$BDLHandleRemove$0$label_84#1;
+
+ inline$BDLHandleRemove$0$label_84#1:
+ goto inline$BDLGetDebugLevel$232$Entry#1;
+
+ inline$BDLGetDebugLevel$232$Entry#1:
+ goto inline$BDLGetDebugLevel$232$start#1;
+
+ inline$BDLGetDebugLevel$232$start#1:
+ goto inline$BDLGetDebugLevel$232$label_3#1;
+
+ inline$BDLGetDebugLevel$232$label_3#1:
+ havoc inline$BDLGetDebugLevel$232$myNondetVar_0;
+ inline$BDLGetDebugLevel$232$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$232$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$232$label_1#1;
+
+ inline$BDLGetDebugLevel$232$label_1#1:
+ goto inline$BDLGetDebugLevel$232$Return#1;
+
+ inline$BDLGetDebugLevel$232$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$ := inline$BDLGetDebugLevel$232$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_84$1#1;
+
+ inline$BDLHandleRemove$0$label_84$1#1:
+ goto inline$BDLHandleRemove$0$anon53_Then#1, inline$BDLHandleRemove$0$anon53_Else#1;
+
+ inline$BDLHandleRemove$0$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon23#1;
+
+ inline$BDLHandleRemove$0$anon23#1:
+ goto inline$BDLHandleRemove$0$label_87#1;
+
+ inline$BDLHandleRemove$0$label_87#1:
+ goto inline$BDLHandleRemove$0$label_87_true#1, inline$BDLHandleRemove$0$label_87_false#1;
+
+ inline$BDLHandleRemove$0$label_87_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$) == 0;
+ goto inline$BDLHandleRemove$0$label_88#1;
+
+ inline$BDLHandleRemove$0$label_87_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$28$) != 0;
+ goto inline$BDLHandleRemove$0$label_91#1;
+
+ inline$BDLHandleRemove$0$label_91#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_92#1;
+
+ inline$BDLHandleRemove$0$label_92#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_93#1;
+
+ inline$BDLHandleRemove$0$label_93#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_94#1;
+
+ inline$BDLHandleRemove$0$label_94#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$29$;
+ goto inline$BDLHandleRemove$0$label_88#1;
+
+ inline$BDLHandleRemove$0$label_88#1:
+ goto inline$BDLGetDebugLevel$233$Entry#1;
+
+ inline$BDLGetDebugLevel$233$Entry#1:
+ goto inline$BDLGetDebugLevel$233$start#1;
+
+ inline$BDLGetDebugLevel$233$start#1:
+ goto inline$BDLGetDebugLevel$233$label_3#1;
+
+ inline$BDLGetDebugLevel$233$label_3#1:
+ havoc inline$BDLGetDebugLevel$233$myNondetVar_0;
+ inline$BDLGetDebugLevel$233$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$233$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$233$label_1#1;
+
+ inline$BDLGetDebugLevel$233$label_1#1:
+ goto inline$BDLGetDebugLevel$233$Return#1;
+
+ inline$BDLGetDebugLevel$233$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$ := inline$BDLGetDebugLevel$233$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_88$1#1;
+
+ inline$BDLHandleRemove$0$label_88$1#1:
+ goto inline$BDLHandleRemove$0$anon54_Then#1, inline$BDLHandleRemove$0$anon54_Else#1;
+
+ inline$BDLHandleRemove$0$anon54_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon25#1;
+
+ inline$BDLHandleRemove$0$anon25#1:
+ goto inline$BDLHandleRemove$0$label_97#1;
+
+ inline$BDLHandleRemove$0$label_97#1:
+ goto inline$BDLHandleRemove$0$label_97_true#1, inline$BDLHandleRemove$0$label_97_false#1;
+
+ inline$BDLHandleRemove$0$label_97_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$) == 0;
+ goto inline$BDLHandleRemove$0$label_98#1;
+
+ inline$BDLHandleRemove$0$label_97_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$33$) != 0;
+ goto inline$BDLHandleRemove$0$label_101#1;
+
+ inline$BDLHandleRemove$0$label_101#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_102#1;
+
+ inline$BDLHandleRemove$0$label_102#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_103#1;
+
+ inline$BDLHandleRemove$0$label_103#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_104#1;
+
+ inline$BDLHandleRemove$0$label_104#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2441.0$34$;
+ goto inline$BDLHandleRemove$0$label_98#1;
+
+ inline$BDLHandleRemove$0$label_98#1:
+ goto inline$BDLGetDebugLevel$234$Entry#1;
+
+ inline$BDLGetDebugLevel$234$Entry#1:
+ goto inline$BDLGetDebugLevel$234$start#1;
+
+ inline$BDLGetDebugLevel$234$start#1:
+ goto inline$BDLGetDebugLevel$234$label_3#1;
+
+ inline$BDLGetDebugLevel$234$label_3#1:
+ havoc inline$BDLGetDebugLevel$234$myNondetVar_0;
+ inline$BDLGetDebugLevel$234$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$234$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$234$label_1#1;
+
+ inline$BDLGetDebugLevel$234$label_1#1:
+ goto inline$BDLGetDebugLevel$234$Return#1;
+
+ inline$BDLGetDebugLevel$234$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$ := inline$BDLGetDebugLevel$234$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_98$1#1;
+
+ inline$BDLHandleRemove$0$label_98$1#1:
+ goto inline$BDLHandleRemove$0$anon55_Then#1, inline$BDLHandleRemove$0$anon55_Else#1;
+
+ inline$BDLHandleRemove$0$anon55_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon27#1;
+
+ inline$BDLHandleRemove$0$anon27#1:
+ goto inline$BDLHandleRemove$0$label_107#1;
+
+ inline$BDLHandleRemove$0$label_107#1:
+ goto inline$BDLHandleRemove$0$label_107_true#1, inline$BDLHandleRemove$0$label_107_false#1;
+
+ inline$BDLHandleRemove$0$label_107_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$, 4) == 0;
+ goto inline$BDLHandleRemove$0$label_81#1;
+
+ inline$BDLHandleRemove$0$label_107_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2441.0$38$, 4) != 0;
+ goto inline$BDLHandleRemove$0$label_108#1;
+
+ inline$BDLHandleRemove$0$label_108#1:
+ goto inline$BDLHandleRemove$0$label_81#1;
+
+ inline$BDLHandleRemove$0$label_81#1:
+ goto inline$IoSkipCurrentIrpStackLocation$0$Entry#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$Entry#1:
+ inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1 := inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12;
+ goto inline$IoSkipCurrentIrpStackLocation$0$start#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$start#1:
+ inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4 := inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1;
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_3#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_3#1:
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_3_true#1, inline$IoSkipCurrentIrpStackLocation$0$label_3_false#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_3_false#1:
+ inline$IoSkipCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoSkipCurrentIrpStackLocation$0$myVar_0, inline$IoSkipCurrentIrpStackLocation$0$myVar_1);
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_4#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_4#1:
+ call inline$IoSkipCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_7#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_7#1:
+ call inline$IoSkipCurrentIrpStackLocation$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_8#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_8#1:
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_5#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_3_true#1:
+ inline$IoSkipCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$0$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoSkipCurrentIrpStackLocation$0$myVar_0, inline$IoSkipCurrentIrpStackLocation$0$myVar_1);
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_5#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_5#1:
+ inline$IoSkipCurrentIrpStackLocation$0$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$0$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$0$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4) := inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_6#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_6#1:
+ havoc inline$IoSkipCurrentIrpStackLocation$0$myNondetVar_0;
+ inline$IoSkipCurrentIrpStackLocation$0$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$0$myNondetVar_0, 36, 1);
+ goto inline$IoSkipCurrentIrpStackLocation$0$label_1#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$label_1#1:
+ goto inline$IoSkipCurrentIrpStackLocation$0$Return#1;
+
+ inline$IoSkipCurrentIrpStackLocation$0$Return#1:
+ goto inline$BDLHandleRemove$0$label_81$1#1;
+
+ inline$BDLHandleRemove$0$label_81$1#1:
+ goto inline$BDLHandleRemove$0$anon52_Then#1, inline$BDLHandleRemove$0$anon52_Else#1;
+
+ inline$BDLHandleRemove$0$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon21#1;
+
+ inline$BDLHandleRemove$0$anon21#1:
+ goto inline$BDLHandleRemove$0$label_109#1;
+
+ inline$BDLHandleRemove$0$label_109#1:
+ goto inline$storm_IoCallDriver$4$Entry#1;
+
+ inline$storm_IoCallDriver$4$Entry#1:
+ inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLHandleRemove$0$$pIrp$3$2380.40$BDLHandleRemove$12;
+ goto inline$storm_IoCallDriver$4$start#1;
+
+ inline$storm_IoCallDriver$4$start#1:
+ inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$4$label_3#1;
+
+ inline$storm_IoCallDriver$4$label_3#1:
+ goto inline$storm_IoCallDriver$4$label_4#1;
+
+ inline$storm_IoCallDriver$4$label_4#1:
+ goto inline$storm_IoCallDriver$4$label_5#1;
+
+ inline$storm_IoCallDriver$4$label_5#1:
+ goto inline$storm_IoCallDriver$4$label_6#1;
+
+ inline$storm_IoCallDriver$4$label_6#1:
+ call inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$4$label_9#1;
+
+ inline$storm_IoCallDriver$4$label_9#1:
+ goto inline$storm_IoCallDriver$4$label_9_true#1, inline$storm_IoCallDriver$4$label_9_false#1;
+
+ inline$storm_IoCallDriver$4$label_9_false#1:
+ assume inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$4$label_10#1;
+
+ inline$storm_IoCallDriver$4$label_9_true#1:
+ assume inline$storm_IoCallDriver$4$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$4$label_13#1;
+
+ inline$storm_IoCallDriver$4$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$4$anon12_Then#1, inline$storm_IoCallDriver$4$anon12_Else#1;
+
+ inline$storm_IoCallDriver$4$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$4$anon3#1;
+
+ inline$storm_IoCallDriver$4$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$4$label_14#1;
+
+ inline$storm_IoCallDriver$4$label_14#1:
+ goto inline$storm_IoCallDriver$4$label_14_true#1, inline$storm_IoCallDriver$4$label_14_false#1;
+
+ inline$storm_IoCallDriver$4$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$4$label_15#1;
+
+ inline$storm_IoCallDriver$4$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$4$label_1#1;
+
+ inline$storm_IoCallDriver$4$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$4$label_10#1;
+
+ inline$storm_IoCallDriver$4$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$5$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$5$Entry#1:
+ inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$5$start#1;
+
+ inline$IoSetNextIrpStackLocation$5$start#1:
+ inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$5$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$5$label_3_true#1, inline$IoSetNextIrpStackLocation$5$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$5$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$5$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_4#1:
+ call inline$IoSetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$5$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_7#1:
+ call inline$IoSetNextIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$5$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$5$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$5$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$5$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_5#1:
+ inline$IoSetNextIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$5$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$5$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$5$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$5$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$5$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$5$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$5$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$5$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$5$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$5$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$5$Return#1;
+
+ inline$IoSetNextIrpStackLocation$5$Return#1:
+ goto inline$storm_IoCallDriver$4$label_10$1#1;
+
+ inline$storm_IoCallDriver$4$label_10$1#1:
+ goto inline$storm_IoCallDriver$4$anon11_Then#1, inline$storm_IoCallDriver$4$anon11_Else#1;
+
+ inline$storm_IoCallDriver$4$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$4$anon1#1;
+
+ inline$storm_IoCallDriver$4$anon1#1:
+ goto inline$storm_IoCallDriver$4$label_18#1;
+
+ inline$storm_IoCallDriver$4$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$43$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$43$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$start#1:
+ inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$43$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$43$label_3_true#1, inline$IoGetCurrentIrpStackLocation$43$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$43$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$43$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$43$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$43$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$43$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$43$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$43$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$43$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$43$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$43$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$43$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$43$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$43$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$43$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$43$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$43$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$43$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$43$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$43$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$43$Return#1:
+ goto inline$storm_IoCallDriver$4$label_18$1#1;
+
+ inline$storm_IoCallDriver$4$label_18$1#1:
+ goto inline$storm_IoCallDriver$4$anon13_Then#1, inline$storm_IoCallDriver$4$anon13_Else#1;
+
+ inline$storm_IoCallDriver$4$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$4$anon6#1;
+
+ inline$storm_IoCallDriver$4$anon6#1:
+ goto inline$storm_IoCallDriver$4$label_21#1;
+
+ inline$storm_IoCallDriver$4$label_21#1:
+ goto inline$storm_IoCallDriver$4$label_22#1;
+
+ inline$storm_IoCallDriver$4$label_22#1:
+ goto inline$storm_IoCallDriver$4$label_23#1;
+
+ inline$storm_IoCallDriver$4$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$4$label_24#1;
+
+ inline$storm_IoCallDriver$4$label_24#1:
+ call inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$4$label_27#1;
+
+ inline$storm_IoCallDriver$4$label_27#1:
+ goto inline$storm_IoCallDriver$4$label_27_case_0#1, inline$storm_IoCallDriver$4$label_27_case_1#1, inline$storm_IoCallDriver$4$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$4$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$4$label_30#1;
+
+ inline$storm_IoCallDriver$4$label_30#1:
+ inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$4$label_31#1;
+
+ inline$storm_IoCallDriver$4$label_31#1:
+ goto inline$storm_IoCallDriver$4$label_32#1;
+
+ inline$storm_IoCallDriver$4$label_32#1:
+ goto inline$storm_IoCallDriver$4$label_33#1;
+
+ inline$storm_IoCallDriver$4$label_33#1:
+ goto inline$CallCompletionRoutine$8$Entry#1;
+
+ inline$CallCompletionRoutine$8$Entry#1:
+ inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$8$start#1;
+
+ inline$CallCompletionRoutine$8$start#1:
+ inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$8$label_3#1;
+
+ inline$CallCompletionRoutine$8$label_3#1:
+ goto inline$CallCompletionRoutine$8$label_4#1;
+
+ inline$CallCompletionRoutine$8$label_4#1:
+ goto inline$CallCompletionRoutine$8$label_5#1;
+
+ inline$CallCompletionRoutine$8$label_5#1:
+ goto inline$CallCompletionRoutine$8$label_6#1;
+
+ inline$CallCompletionRoutine$8$label_6#1:
+ goto inline$CallCompletionRoutine$8$label_7#1;
+
+ inline$CallCompletionRoutine$8$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$44$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$44$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$start#1:
+ inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$44$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$44$label_3_true#1, inline$IoGetCurrentIrpStackLocation$44$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$44$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$44$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$44$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$44$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$44$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$44$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$44$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$44$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$44$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$44$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$44$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$44$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$44$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$44$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$44$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$44$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$44$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$44$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$44$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$44$Return#1:
+ goto inline$CallCompletionRoutine$8$label_7$1#1;
+
+ inline$CallCompletionRoutine$8$label_7$1#1:
+ goto inline$CallCompletionRoutine$8$anon10_Then#1, inline$CallCompletionRoutine$8$anon10_Else#1;
+
+ inline$CallCompletionRoutine$8$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$8$anon1#1;
+
+ inline$CallCompletionRoutine$8$anon1#1:
+ goto inline$CallCompletionRoutine$8$label_10#1;
+
+ inline$CallCompletionRoutine$8$label_10#1:
+ goto inline$CallCompletionRoutine$8$label_11#1;
+
+ inline$CallCompletionRoutine$8$label_11#1:
+ havoc inline$CallCompletionRoutine$8$myNondetVar_0;
+ inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$myNondetVar_0;
+ goto inline$CallCompletionRoutine$8$label_12#1;
+
+ inline$CallCompletionRoutine$8$label_12#1:
+ havoc inline$CallCompletionRoutine$8$myNondetVar_0;
+ inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$myNondetVar_0;
+ goto inline$CallCompletionRoutine$8$label_13#1;
+
+ inline$CallCompletionRoutine$8$label_13#1:
+ havoc inline$CallCompletionRoutine$8$myNondetVar_0;
+ goto inline$CallCompletionRoutine$8$label_14#1;
+
+ inline$CallCompletionRoutine$8$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$45$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$45$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$start#1:
+ inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$45$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$45$label_3_true#1, inline$IoGetCurrentIrpStackLocation$45$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$45$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$45$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$45$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$45$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$45$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$45$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$45$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$45$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$45$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$45$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$45$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$45$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$45$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$45$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$45$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$45$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$45$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$45$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$45$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$45$Return#1:
+ goto inline$CallCompletionRoutine$8$label_14$1#1;
+
+ inline$CallCompletionRoutine$8$label_14$1#1:
+ goto inline$CallCompletionRoutine$8$anon11_Then#1, inline$CallCompletionRoutine$8$anon11_Else#1;
+
+ inline$CallCompletionRoutine$8$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$8$anon3#1;
+
+ inline$CallCompletionRoutine$8$anon3#1:
+ goto inline$CallCompletionRoutine$8$label_17#1;
+
+ inline$CallCompletionRoutine$8$label_17#1:
+ goto inline$CallCompletionRoutine$8$label_18#1;
+
+ inline$CallCompletionRoutine$8$label_18#1:
+ goto inline$CallCompletionRoutine$8$label_18_true#1, inline$CallCompletionRoutine$8$label_18_false#1;
+
+ inline$CallCompletionRoutine$8$label_18_false#1:
+ assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$8$label_1#1;
+
+ inline$CallCompletionRoutine$8$label_18_true#1:
+ assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$8$label_19#1;
+
+ inline$CallCompletionRoutine$8$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$8$label_20#1;
+
+ inline$CallCompletionRoutine$8$label_20#1:
+ goto inline$CallCompletionRoutine$8$label_20_icall_1#1, inline$CallCompletionRoutine$8$label_20_icall_2#1, inline$CallCompletionRoutine$8$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$8$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$8$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$8$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$8$Entry#1:
+ inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$8$start#1;
+
+ inline$BDLSystemPowerIoCompletion$8$start#1:
+ call inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$8$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_4#1:
+ inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_6#1:
+ inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$8$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$8$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$47$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$47$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$start#1:
+ inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$47$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$47$label_3_true#1, inline$IoGetCurrentIrpStackLocation$47$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$47$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$47$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$47$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$47$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$47$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$47$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$47$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$47$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$47$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$47$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$47$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$47$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$47$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$47$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$47$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$47$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$47$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$47$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$47$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$47$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon36_Then#1, inline$BDLSystemPowerIoCompletion$8$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_15#1:
+ goto inline$BDLGetDebugLevel$244$Entry#1;
+
+ inline$BDLGetDebugLevel$244$Entry#1:
+ goto inline$BDLGetDebugLevel$244$start#1;
+
+ inline$BDLGetDebugLevel$244$start#1:
+ goto inline$BDLGetDebugLevel$244$label_3#1;
+
+ inline$BDLGetDebugLevel$244$label_3#1:
+ havoc inline$BDLGetDebugLevel$244$myNondetVar_0;
+ inline$BDLGetDebugLevel$244$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$244$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$244$label_1#1;
+
+ inline$BDLGetDebugLevel$244$label_1#1:
+ goto inline$BDLGetDebugLevel$244$Return#1;
+
+ inline$BDLGetDebugLevel$244$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$244$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon37_Then#1, inline$BDLSystemPowerIoCompletion$8$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_18_true#1, inline$BDLSystemPowerIoCompletion$8$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_19#1:
+ goto inline$BDLGetDebugLevel$245$Entry#1;
+
+ inline$BDLGetDebugLevel$245$Entry#1:
+ goto inline$BDLGetDebugLevel$245$start#1;
+
+ inline$BDLGetDebugLevel$245$start#1:
+ goto inline$BDLGetDebugLevel$245$label_3#1;
+
+ inline$BDLGetDebugLevel$245$label_3#1:
+ havoc inline$BDLGetDebugLevel$245$myNondetVar_0;
+ inline$BDLGetDebugLevel$245$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$245$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$245$label_1#1;
+
+ inline$BDLGetDebugLevel$245$label_1#1:
+ goto inline$BDLGetDebugLevel$245$Return#1;
+
+ inline$BDLGetDebugLevel$245$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$245$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon38_Then#1, inline$BDLSystemPowerIoCompletion$8$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_28_true#1, inline$BDLSystemPowerIoCompletion$8$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_29#1:
+ goto inline$BDLGetDebugLevel$246$Entry#1;
+
+ inline$BDLGetDebugLevel$246$Entry#1:
+ goto inline$BDLGetDebugLevel$246$start#1;
+
+ inline$BDLGetDebugLevel$246$start#1:
+ goto inline$BDLGetDebugLevel$246$label_3#1;
+
+ inline$BDLGetDebugLevel$246$label_3#1:
+ havoc inline$BDLGetDebugLevel$246$myNondetVar_0;
+ inline$BDLGetDebugLevel$246$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$246$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$246$label_1#1;
+
+ inline$BDLGetDebugLevel$246$label_1#1:
+ goto inline$BDLGetDebugLevel$246$Return#1;
+
+ inline$BDLGetDebugLevel$246$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$246$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon39_Then#1, inline$BDLSystemPowerIoCompletion$8$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_38_true#1, inline$BDLSystemPowerIoCompletion$8$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_39_true#1, inline$BDLSystemPowerIoCompletion$8$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$8$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$8$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$8$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$8$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$8$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_106_true#1, inline$BDLSystemPowerIoCompletion$8$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$8$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$8$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$8$myNondetVar_0, inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$8$anon50_Then#1, inline$BDLSystemPowerIoCompletion$8$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_112#1:
+ inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_113_true#1, inline$BDLSystemPowerIoCompletion$8$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$8$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_117#1:
+ goto inline$BDLGetDebugLevel$253$Entry#1;
+
+ inline$BDLGetDebugLevel$253$Entry#1:
+ goto inline$BDLGetDebugLevel$253$start#1;
+
+ inline$BDLGetDebugLevel$253$start#1:
+ goto inline$BDLGetDebugLevel$253$label_3#1;
+
+ inline$BDLGetDebugLevel$253$label_3#1:
+ havoc inline$BDLGetDebugLevel$253$myNondetVar_0;
+ inline$BDLGetDebugLevel$253$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$253$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$253$label_1#1;
+
+ inline$BDLGetDebugLevel$253$label_1#1:
+ goto inline$BDLGetDebugLevel$253$Return#1;
+
+ inline$BDLGetDebugLevel$253$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$253$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon51_Then#1, inline$BDLSystemPowerIoCompletion$8$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_120_true#1, inline$BDLSystemPowerIoCompletion$8$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_121#1:
+ goto inline$BDLGetDebugLevel$254$Entry#1;
+
+ inline$BDLGetDebugLevel$254$Entry#1:
+ goto inline$BDLGetDebugLevel$254$start#1;
+
+ inline$BDLGetDebugLevel$254$start#1:
+ goto inline$BDLGetDebugLevel$254$label_3#1;
+
+ inline$BDLGetDebugLevel$254$label_3#1:
+ havoc inline$BDLGetDebugLevel$254$myNondetVar_0;
+ inline$BDLGetDebugLevel$254$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$254$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$254$label_1#1;
+
+ inline$BDLGetDebugLevel$254$label_1#1:
+ goto inline$BDLGetDebugLevel$254$Return#1;
+
+ inline$BDLGetDebugLevel$254$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$254$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon52_Then#1, inline$BDLSystemPowerIoCompletion$8$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_130_true#1, inline$BDLSystemPowerIoCompletion$8$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_131#1:
+ goto inline$BDLGetDebugLevel$255$Entry#1;
+
+ inline$BDLGetDebugLevel$255$Entry#1:
+ goto inline$BDLGetDebugLevel$255$start#1;
+
+ inline$BDLGetDebugLevel$255$start#1:
+ goto inline$BDLGetDebugLevel$255$label_3#1;
+
+ inline$BDLGetDebugLevel$255$label_3#1:
+ havoc inline$BDLGetDebugLevel$255$myNondetVar_0;
+ inline$BDLGetDebugLevel$255$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$255$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$255$label_1#1;
+
+ inline$BDLGetDebugLevel$255$label_1#1:
+ goto inline$BDLGetDebugLevel$255$Return#1;
+
+ inline$BDLGetDebugLevel$255$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$255$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon53_Then#1, inline$BDLSystemPowerIoCompletion$8$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_140_true#1, inline$BDLSystemPowerIoCompletion$8$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$8$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_115#1:
+ inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$8$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$8$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$8$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_43#1:
+ goto inline$BDLGetDebugLevel$247$Entry#1;
+
+ inline$BDLGetDebugLevel$247$Entry#1:
+ goto inline$BDLGetDebugLevel$247$start#1;
+
+ inline$BDLGetDebugLevel$247$start#1:
+ goto inline$BDLGetDebugLevel$247$label_3#1;
+
+ inline$BDLGetDebugLevel$247$label_3#1:
+ havoc inline$BDLGetDebugLevel$247$myNondetVar_0;
+ inline$BDLGetDebugLevel$247$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$247$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$247$label_1#1;
+
+ inline$BDLGetDebugLevel$247$label_1#1:
+ goto inline$BDLGetDebugLevel$247$Return#1;
+
+ inline$BDLGetDebugLevel$247$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$247$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon40_Then#1, inline$BDLSystemPowerIoCompletion$8$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_46_true#1, inline$BDLSystemPowerIoCompletion$8$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_47#1:
+ goto inline$BDLGetDebugLevel$248$Entry#1;
+
+ inline$BDLGetDebugLevel$248$Entry#1:
+ goto inline$BDLGetDebugLevel$248$start#1;
+
+ inline$BDLGetDebugLevel$248$start#1:
+ goto inline$BDLGetDebugLevel$248$label_3#1;
+
+ inline$BDLGetDebugLevel$248$label_3#1:
+ havoc inline$BDLGetDebugLevel$248$myNondetVar_0;
+ inline$BDLGetDebugLevel$248$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$248$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$248$label_1#1;
+
+ inline$BDLGetDebugLevel$248$label_1#1:
+ goto inline$BDLGetDebugLevel$248$Return#1;
+
+ inline$BDLGetDebugLevel$248$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$248$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon41_Then#1, inline$BDLSystemPowerIoCompletion$8$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_56_true#1, inline$BDLSystemPowerIoCompletion$8$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_57#1:
+ goto inline$BDLGetDebugLevel$249$Entry#1;
+
+ inline$BDLGetDebugLevel$249$Entry#1:
+ goto inline$BDLGetDebugLevel$249$start#1;
+
+ inline$BDLGetDebugLevel$249$start#1:
+ goto inline$BDLGetDebugLevel$249$label_3#1;
+
+ inline$BDLGetDebugLevel$249$label_3#1:
+ havoc inline$BDLGetDebugLevel$249$myNondetVar_0;
+ inline$BDLGetDebugLevel$249$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$249$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$249$label_1#1;
+
+ inline$BDLGetDebugLevel$249$label_1#1:
+ goto inline$BDLGetDebugLevel$249$Return#1;
+
+ inline$BDLGetDebugLevel$249$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$249$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon42_Then#1, inline$BDLSystemPowerIoCompletion$8$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_66_true#1, inline$BDLSystemPowerIoCompletion$8$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$8$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$8$anon43_Then#1, inline$BDLSystemPowerIoCompletion$8$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$8$anon44_Then#1, inline$BDLSystemPowerIoCompletion$8$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_74#1:
+ goto inline$storm_IoCompleteRequest$18$Entry#1;
+
+ inline$storm_IoCompleteRequest$18$Entry#1:
+ inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$8$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$18$start#1;
+
+ inline$storm_IoCompleteRequest$18$start#1:
+ inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$18$label_3#1;
+
+ inline$storm_IoCompleteRequest$18$label_3#1:
+ call inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$18$label_6#1;
+
+ inline$storm_IoCompleteRequest$18$label_6#1:
+ goto inline$storm_IoCompleteRequest$18$label_6_true#1, inline$storm_IoCompleteRequest$18$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$18$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$18$label_7#1;
+
+ inline$storm_IoCompleteRequest$18$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$18$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$18$label_8#1;
+
+ inline$storm_IoCompleteRequest$18$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$18$anon3_Then#1, inline$storm_IoCompleteRequest$18$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$18$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$18$anon1#1;
+
+ inline$storm_IoCompleteRequest$18$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$18$label_9#1;
+
+ inline$storm_IoCompleteRequest$18$label_9#1:
+ goto inline$storm_IoCompleteRequest$18$label_9_true#1, inline$storm_IoCompleteRequest$18$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$18$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$18$label_10#1;
+
+ inline$storm_IoCompleteRequest$18$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$18$label_1#1;
+
+ inline$storm_IoCompleteRequest$18$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$18$label_7#1;
+
+ inline$storm_IoCompleteRequest$18$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$18$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$18$label_1#1;
+
+ inline$storm_IoCompleteRequest$18$label_1#1:
+ goto inline$storm_IoCompleteRequest$18$Return#1;
+
+ inline$storm_IoCompleteRequest$18$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$18$Return#1;
+
+ inline$storm_IoCompleteRequest$18$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon45_Then#1, inline$BDLSystemPowerIoCompletion$8$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$8$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$8$anon46_Then#1, inline$BDLSystemPowerIoCompletion$8$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_80#1:
+ goto inline$BDLGetDebugLevel$250$Entry#1;
+
+ inline$BDLGetDebugLevel$250$Entry#1:
+ goto inline$BDLGetDebugLevel$250$start#1;
+
+ inline$BDLGetDebugLevel$250$start#1:
+ goto inline$BDLGetDebugLevel$250$label_3#1;
+
+ inline$BDLGetDebugLevel$250$label_3#1:
+ havoc inline$BDLGetDebugLevel$250$myNondetVar_0;
+ inline$BDLGetDebugLevel$250$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$250$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$250$label_1#1;
+
+ inline$BDLGetDebugLevel$250$label_1#1:
+ goto inline$BDLGetDebugLevel$250$Return#1;
+
+ inline$BDLGetDebugLevel$250$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$250$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon47_Then#1, inline$BDLSystemPowerIoCompletion$8$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_83_true#1, inline$BDLSystemPowerIoCompletion$8$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_84#1:
+ goto inline$BDLGetDebugLevel$251$Entry#1;
+
+ inline$BDLGetDebugLevel$251$Entry#1:
+ goto inline$BDLGetDebugLevel$251$start#1;
+
+ inline$BDLGetDebugLevel$251$start#1:
+ goto inline$BDLGetDebugLevel$251$label_3#1;
+
+ inline$BDLGetDebugLevel$251$label_3#1:
+ havoc inline$BDLGetDebugLevel$251$myNondetVar_0;
+ inline$BDLGetDebugLevel$251$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$251$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$251$label_1#1;
+
+ inline$BDLGetDebugLevel$251$label_1#1:
+ goto inline$BDLGetDebugLevel$251$Return#1;
+
+ inline$BDLGetDebugLevel$251$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$251$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon48_Then#1, inline$BDLSystemPowerIoCompletion$8$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_93_true#1, inline$BDLSystemPowerIoCompletion$8$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$8$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$8$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_94#1:
+ goto inline$BDLGetDebugLevel$252$Entry#1;
+
+ inline$BDLGetDebugLevel$252$Entry#1:
+ goto inline$BDLGetDebugLevel$252$start#1;
+
+ inline$BDLGetDebugLevel$252$start#1:
+ goto inline$BDLGetDebugLevel$252$label_3#1;
+
+ inline$BDLGetDebugLevel$252$label_3#1:
+ havoc inline$BDLGetDebugLevel$252$myNondetVar_0;
+ inline$BDLGetDebugLevel$252$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$252$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$252$label_1#1;
+
+ inline$BDLGetDebugLevel$252$label_1#1:
+ goto inline$BDLGetDebugLevel$252$Return#1;
+
+ inline$BDLGetDebugLevel$252$Return#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$252$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$8$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$8$anon49_Then#1, inline$BDLSystemPowerIoCompletion$8$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_103_true#1, inline$BDLSystemPowerIoCompletion$8$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$8$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$8$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$8$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_104#1:
+ inline$BDLSystemPowerIoCompletion$8$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$8$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$8$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$8$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$8$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$8$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$8$Return#1:
+ inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$8$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$8$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$8$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$8$anon14_Then#1, inline$CallCompletionRoutine$8$anon14_Else#1;
+
+ inline$CallCompletionRoutine$8$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$8$anon9#1;
+
+ inline$CallCompletionRoutine$8$anon9#1:
+ goto inline$CallCompletionRoutine$8$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$8$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$8$Return#1;
+
+ inline$CallCompletionRoutine$8$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$8$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$8$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$8$Entry#1:
+ inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$8$start#1;
+
+ inline$BDLDevicePowerIoCompletion$8$start#1:
+ call inline$BDLDevicePowerIoCompletion$8$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$8$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_4#1:
+ inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_6#1:
+ inline$BDLDevicePowerIoCompletion$8$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$8$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$8$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$46$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$46$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$start#1:
+ inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$46$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$46$label_3_true#1, inline$IoGetCurrentIrpStackLocation$46$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$46$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$46$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$46$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$46$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$46$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$46$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$46$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$46$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$46$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$46$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$46$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$46$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$46$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$46$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$46$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$46$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$46$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$46$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$46$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$46$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$46$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$46$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$46$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon30_Then#1, inline$BDLDevicePowerIoCompletion$8$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_13#1:
+ inline$BDLDevicePowerIoCompletion$8$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_17#1:
+ goto inline$BDLGetDebugLevel$235$Entry#1;
+
+ inline$BDLGetDebugLevel$235$Entry#1:
+ goto inline$BDLGetDebugLevel$235$start#1;
+
+ inline$BDLGetDebugLevel$235$start#1:
+ goto inline$BDLGetDebugLevel$235$label_3#1;
+
+ inline$BDLGetDebugLevel$235$label_3#1:
+ havoc inline$BDLGetDebugLevel$235$myNondetVar_0;
+ inline$BDLGetDebugLevel$235$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$235$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$235$label_1#1;
+
+ inline$BDLGetDebugLevel$235$label_1#1:
+ goto inline$BDLGetDebugLevel$235$Return#1;
+
+ inline$BDLGetDebugLevel$235$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$235$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon31_Then#1, inline$BDLDevicePowerIoCompletion$8$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_20_true#1, inline$BDLDevicePowerIoCompletion$8$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_21#1:
+ goto inline$BDLGetDebugLevel$236$Entry#1;
+
+ inline$BDLGetDebugLevel$236$Entry#1:
+ goto inline$BDLGetDebugLevel$236$start#1;
+
+ inline$BDLGetDebugLevel$236$start#1:
+ goto inline$BDLGetDebugLevel$236$label_3#1;
+
+ inline$BDLGetDebugLevel$236$label_3#1:
+ havoc inline$BDLGetDebugLevel$236$myNondetVar_0;
+ inline$BDLGetDebugLevel$236$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$236$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$236$label_1#1;
+
+ inline$BDLGetDebugLevel$236$label_1#1:
+ goto inline$BDLGetDebugLevel$236$Return#1;
+
+ inline$BDLGetDebugLevel$236$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$236$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon32_Then#1, inline$BDLDevicePowerIoCompletion$8$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_30_true#1, inline$BDLDevicePowerIoCompletion$8$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_31#1:
+ goto inline$BDLGetDebugLevel$237$Entry#1;
+
+ inline$BDLGetDebugLevel$237$Entry#1:
+ goto inline$BDLGetDebugLevel$237$start#1;
+
+ inline$BDLGetDebugLevel$237$start#1:
+ goto inline$BDLGetDebugLevel$237$label_3#1;
+
+ inline$BDLGetDebugLevel$237$label_3#1:
+ havoc inline$BDLGetDebugLevel$237$myNondetVar_0;
+ inline$BDLGetDebugLevel$237$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$237$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$237$label_1#1;
+
+ inline$BDLGetDebugLevel$237$label_1#1:
+ goto inline$BDLGetDebugLevel$237$Return#1;
+
+ inline$BDLGetDebugLevel$237$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$237$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon33_Then#1, inline$BDLDevicePowerIoCompletion$8$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_40_true#1, inline$BDLDevicePowerIoCompletion$8$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_41_true#1, inline$BDLDevicePowerIoCompletion$8$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$8$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$8$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_44_true#1, inline$BDLDevicePowerIoCompletion$8$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_45_true#1, inline$BDLDevicePowerIoCompletion$8$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$8$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$8$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$8$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_54#1:
+ inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$8$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_55_true#1, inline$BDLDevicePowerIoCompletion$8$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$8$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$8$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$8$anon34_Then#1, inline$BDLDevicePowerIoCompletion$8$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_59#1:
+ goto inline$BDLGetDebugLevel$238$Entry#1;
+
+ inline$BDLGetDebugLevel$238$Entry#1:
+ goto inline$BDLGetDebugLevel$238$start#1;
+
+ inline$BDLGetDebugLevel$238$start#1:
+ goto inline$BDLGetDebugLevel$238$label_3#1;
+
+ inline$BDLGetDebugLevel$238$label_3#1:
+ havoc inline$BDLGetDebugLevel$238$myNondetVar_0;
+ inline$BDLGetDebugLevel$238$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$238$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$238$label_1#1;
+
+ inline$BDLGetDebugLevel$238$label_1#1:
+ goto inline$BDLGetDebugLevel$238$Return#1;
+
+ inline$BDLGetDebugLevel$238$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$238$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon35_Then#1, inline$BDLDevicePowerIoCompletion$8$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_62_true#1, inline$BDLDevicePowerIoCompletion$8$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_63#1:
+ goto inline$BDLGetDebugLevel$239$Entry#1;
+
+ inline$BDLGetDebugLevel$239$Entry#1:
+ goto inline$BDLGetDebugLevel$239$start#1;
+
+ inline$BDLGetDebugLevel$239$start#1:
+ goto inline$BDLGetDebugLevel$239$label_3#1;
+
+ inline$BDLGetDebugLevel$239$label_3#1:
+ havoc inline$BDLGetDebugLevel$239$myNondetVar_0;
+ inline$BDLGetDebugLevel$239$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$239$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$239$label_1#1;
+
+ inline$BDLGetDebugLevel$239$label_1#1:
+ goto inline$BDLGetDebugLevel$239$Return#1;
+
+ inline$BDLGetDebugLevel$239$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$239$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon36_Then#1, inline$BDLDevicePowerIoCompletion$8$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_72_true#1, inline$BDLDevicePowerIoCompletion$8$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_73#1:
+ goto inline$BDLGetDebugLevel$240$Entry#1;
+
+ inline$BDLGetDebugLevel$240$Entry#1:
+ goto inline$BDLGetDebugLevel$240$start#1;
+
+ inline$BDLGetDebugLevel$240$start#1:
+ goto inline$BDLGetDebugLevel$240$label_3#1;
+
+ inline$BDLGetDebugLevel$240$label_3#1:
+ havoc inline$BDLGetDebugLevel$240$myNondetVar_0;
+ inline$BDLGetDebugLevel$240$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$240$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$240$label_1#1;
+
+ inline$BDLGetDebugLevel$240$label_1#1:
+ goto inline$BDLGetDebugLevel$240$Return#1;
+
+ inline$BDLGetDebugLevel$240$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$240$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon37_Then#1, inline$BDLDevicePowerIoCompletion$8$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_82_true#1, inline$BDLDevicePowerIoCompletion$8$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$8$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$8$anon38_Then#1, inline$BDLDevicePowerIoCompletion$8$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$8$anon39_Then#1, inline$BDLDevicePowerIoCompletion$8$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_92#1:
+ goto inline$storm_IoCompleteRequest$17$Entry#1;
+
+ inline$storm_IoCompleteRequest$17$Entry#1:
+ inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$8$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$17$start#1;
+
+ inline$storm_IoCompleteRequest$17$start#1:
+ inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$17$label_3#1;
+
+ inline$storm_IoCompleteRequest$17$label_3#1:
+ call inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$17$label_6#1;
+
+ inline$storm_IoCompleteRequest$17$label_6#1:
+ goto inline$storm_IoCompleteRequest$17$label_6_true#1, inline$storm_IoCompleteRequest$17$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$17$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$17$label_7#1;
+
+ inline$storm_IoCompleteRequest$17$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$17$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$17$label_8#1;
+
+ inline$storm_IoCompleteRequest$17$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$17$anon3_Then#1, inline$storm_IoCompleteRequest$17$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$17$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$17$anon1#1;
+
+ inline$storm_IoCompleteRequest$17$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$17$label_9#1;
+
+ inline$storm_IoCompleteRequest$17$label_9#1:
+ goto inline$storm_IoCompleteRequest$17$label_9_true#1, inline$storm_IoCompleteRequest$17$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$17$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$17$label_10#1;
+
+ inline$storm_IoCompleteRequest$17$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$17$label_1#1;
+
+ inline$storm_IoCompleteRequest$17$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$17$label_7#1;
+
+ inline$storm_IoCompleteRequest$17$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$17$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$17$label_1#1;
+
+ inline$storm_IoCompleteRequest$17$label_1#1:
+ goto inline$storm_IoCompleteRequest$17$Return#1;
+
+ inline$storm_IoCompleteRequest$17$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$17$Return#1;
+
+ inline$storm_IoCompleteRequest$17$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon40_Then#1, inline$BDLDevicePowerIoCompletion$8$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$8$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$8$anon41_Then#1, inline$BDLDevicePowerIoCompletion$8$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_98#1:
+ goto inline$BDLGetDebugLevel$241$Entry#1;
+
+ inline$BDLGetDebugLevel$241$Entry#1:
+ goto inline$BDLGetDebugLevel$241$start#1;
+
+ inline$BDLGetDebugLevel$241$start#1:
+ goto inline$BDLGetDebugLevel$241$label_3#1;
+
+ inline$BDLGetDebugLevel$241$label_3#1:
+ havoc inline$BDLGetDebugLevel$241$myNondetVar_0;
+ inline$BDLGetDebugLevel$241$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$241$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$241$label_1#1;
+
+ inline$BDLGetDebugLevel$241$label_1#1:
+ goto inline$BDLGetDebugLevel$241$Return#1;
+
+ inline$BDLGetDebugLevel$241$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$241$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon42_Then#1, inline$BDLDevicePowerIoCompletion$8$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_101_true#1, inline$BDLDevicePowerIoCompletion$8$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_102#1:
+ goto inline$BDLGetDebugLevel$242$Entry#1;
+
+ inline$BDLGetDebugLevel$242$Entry#1:
+ goto inline$BDLGetDebugLevel$242$start#1;
+
+ inline$BDLGetDebugLevel$242$start#1:
+ goto inline$BDLGetDebugLevel$242$label_3#1;
+
+ inline$BDLGetDebugLevel$242$label_3#1:
+ havoc inline$BDLGetDebugLevel$242$myNondetVar_0;
+ inline$BDLGetDebugLevel$242$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$242$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$242$label_1#1;
+
+ inline$BDLGetDebugLevel$242$label_1#1:
+ goto inline$BDLGetDebugLevel$242$Return#1;
+
+ inline$BDLGetDebugLevel$242$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$242$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon43_Then#1, inline$BDLDevicePowerIoCompletion$8$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_111_true#1, inline$BDLDevicePowerIoCompletion$8$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$8$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$8$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_112#1:
+ goto inline$BDLGetDebugLevel$243$Entry#1;
+
+ inline$BDLGetDebugLevel$243$Entry#1:
+ goto inline$BDLGetDebugLevel$243$start#1;
+
+ inline$BDLGetDebugLevel$243$start#1:
+ goto inline$BDLGetDebugLevel$243$label_3#1;
+
+ inline$BDLGetDebugLevel$243$label_3#1:
+ havoc inline$BDLGetDebugLevel$243$myNondetVar_0;
+ inline$BDLGetDebugLevel$243$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$243$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$243$label_1#1;
+
+ inline$BDLGetDebugLevel$243$label_1#1:
+ goto inline$BDLGetDebugLevel$243$Return#1;
+
+ inline$BDLGetDebugLevel$243$Return#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$243$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$8$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$8$anon44_Then#1, inline$BDLDevicePowerIoCompletion$8$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_121_true#1, inline$BDLDevicePowerIoCompletion$8$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$8$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$8$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$8$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_122#1:
+ inline$BDLDevicePowerIoCompletion$8$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$8$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$8$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$8$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$8$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$8$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$8$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$8$Return#1:
+ inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$8$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$8$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$8$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$8$anon13_Then#1, inline$CallCompletionRoutine$8$anon13_Else#1;
+
+ inline$CallCompletionRoutine$8$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$8$anon7#1;
+
+ inline$CallCompletionRoutine$8$anon7#1:
+ goto inline$CallCompletionRoutine$8$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$8$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$8$Return#1;
+
+ inline$CallCompletionRoutine$8$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$8$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$8$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$8$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$8$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$8$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$start#1:
+ inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$8$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$8$label_3_true#1, inline$BDLCallDriverCompletionRoutine$8$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$8$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$8$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$8$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$8$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$8$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_6#1:
+ goto inline$storm_KeSetEvent$10$Entry#1;
+
+ inline$storm_KeSetEvent$10$Entry#1:
+ inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$8$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$10$start#1;
+
+ inline$storm_KeSetEvent$10$start#1:
+ inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$10$label_3#1;
+
+ inline$storm_KeSetEvent$10$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$10$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$10$label_1#1;
+
+ inline$storm_KeSetEvent$10$label_1#1:
+ goto inline$storm_KeSetEvent$10$Return#1;
+
+ inline$storm_KeSetEvent$10$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$8$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$8$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$8$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$8$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$8$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$8$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$8$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$8$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$8$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$8$Return#1:
+ inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$8$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$8$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$8$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$8$anon12_Then#1, inline$CallCompletionRoutine$8$anon12_Else#1;
+
+ inline$CallCompletionRoutine$8$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$8$anon5#1;
+
+ inline$CallCompletionRoutine$8$anon5#1:
+ goto inline$CallCompletionRoutine$8$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$8$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$8$label_23#1;
+
+ inline$CallCompletionRoutine$8$label_23#1:
+ inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$8$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$8$label_24#1;
+
+ inline$CallCompletionRoutine$8$label_24#1:
+ goto inline$CallCompletionRoutine$8$label_24_true#1, inline$CallCompletionRoutine$8$label_24_false#1;
+
+ inline$CallCompletionRoutine$8$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$8$label_1#1;
+
+ inline$CallCompletionRoutine$8$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$8$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$8$label_25#1;
+
+ inline$CallCompletionRoutine$8$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$8$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$8$label_1#1;
+
+ inline$CallCompletionRoutine$8$label_1#1:
+ goto inline$CallCompletionRoutine$8$Return#1;
+
+ inline$CallCompletionRoutine$8$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$8$Return#1;
+
+ inline$CallCompletionRoutine$8$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$8$Return#1;
+
+ inline$CallCompletionRoutine$8$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$8$Return#1;
+
+ inline$CallCompletionRoutine$8$Return#1:
+ goto inline$storm_IoCallDriver$4$label_33$1#1;
+
+ inline$storm_IoCallDriver$4$label_33$1#1:
+ goto inline$storm_IoCallDriver$4$anon14_Then#1, inline$storm_IoCallDriver$4$anon14_Else#1;
+
+ inline$storm_IoCallDriver$4$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$4$anon8#1;
+
+ inline$storm_IoCallDriver$4$anon8#1:
+ goto inline$storm_IoCallDriver$4$label_36#1;
+
+ inline$storm_IoCallDriver$4$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$4$Return#1;
+
+ inline$storm_IoCallDriver$4$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$4$label_29#1;
+
+ inline$storm_IoCallDriver$4$label_29#1:
+ inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$4$label_37#1;
+
+ inline$storm_IoCallDriver$4$label_37#1:
+ goto inline$storm_IoCallDriver$4$label_38#1;
+
+ inline$storm_IoCallDriver$4$label_38#1:
+ goto inline$storm_IoCallDriver$4$label_39#1;
+
+ inline$storm_IoCallDriver$4$label_39#1:
+ goto inline$CallCompletionRoutine$9$Entry#1;
+
+ inline$CallCompletionRoutine$9$Entry#1:
+ inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$9$start#1;
+
+ inline$CallCompletionRoutine$9$start#1:
+ inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$9$label_3#1;
+
+ inline$CallCompletionRoutine$9$label_3#1:
+ goto inline$CallCompletionRoutine$9$label_4#1;
+
+ inline$CallCompletionRoutine$9$label_4#1:
+ goto inline$CallCompletionRoutine$9$label_5#1;
+
+ inline$CallCompletionRoutine$9$label_5#1:
+ goto inline$CallCompletionRoutine$9$label_6#1;
+
+ inline$CallCompletionRoutine$9$label_6#1:
+ goto inline$CallCompletionRoutine$9$label_7#1;
+
+ inline$CallCompletionRoutine$9$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$48$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$48$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$start#1:
+ inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$48$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$48$label_3_true#1, inline$IoGetCurrentIrpStackLocation$48$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$48$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$48$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$48$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$48$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$48$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$48$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$48$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$48$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$48$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$48$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$48$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$48$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$48$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$48$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$48$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$48$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$48$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$48$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$48$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$48$Return#1:
+ goto inline$CallCompletionRoutine$9$label_7$1#1;
+
+ inline$CallCompletionRoutine$9$label_7$1#1:
+ goto inline$CallCompletionRoutine$9$anon10_Then#1, inline$CallCompletionRoutine$9$anon10_Else#1;
+
+ inline$CallCompletionRoutine$9$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$9$anon1#1;
+
+ inline$CallCompletionRoutine$9$anon1#1:
+ goto inline$CallCompletionRoutine$9$label_10#1;
+
+ inline$CallCompletionRoutine$9$label_10#1:
+ goto inline$CallCompletionRoutine$9$label_11#1;
+
+ inline$CallCompletionRoutine$9$label_11#1:
+ havoc inline$CallCompletionRoutine$9$myNondetVar_0;
+ inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$myNondetVar_0;
+ goto inline$CallCompletionRoutine$9$label_12#1;
+
+ inline$CallCompletionRoutine$9$label_12#1:
+ havoc inline$CallCompletionRoutine$9$myNondetVar_0;
+ inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$myNondetVar_0;
+ goto inline$CallCompletionRoutine$9$label_13#1;
+
+ inline$CallCompletionRoutine$9$label_13#1:
+ havoc inline$CallCompletionRoutine$9$myNondetVar_0;
+ goto inline$CallCompletionRoutine$9$label_14#1;
+
+ inline$CallCompletionRoutine$9$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$49$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$49$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$start#1:
+ inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$49$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$49$label_3_true#1, inline$IoGetCurrentIrpStackLocation$49$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$49$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$49$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$49$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$49$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$49$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$49$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$49$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$49$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$49$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$49$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$49$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$49$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$49$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$49$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$49$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$49$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$49$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$49$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$49$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$49$Return#1:
+ goto inline$CallCompletionRoutine$9$label_14$1#1;
+
+ inline$CallCompletionRoutine$9$label_14$1#1:
+ goto inline$CallCompletionRoutine$9$anon11_Then#1, inline$CallCompletionRoutine$9$anon11_Else#1;
+
+ inline$CallCompletionRoutine$9$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$9$anon3#1;
+
+ inline$CallCompletionRoutine$9$anon3#1:
+ goto inline$CallCompletionRoutine$9$label_17#1;
+
+ inline$CallCompletionRoutine$9$label_17#1:
+ goto inline$CallCompletionRoutine$9$label_18#1;
+
+ inline$CallCompletionRoutine$9$label_18#1:
+ goto inline$CallCompletionRoutine$9$label_18_true#1, inline$CallCompletionRoutine$9$label_18_false#1;
+
+ inline$CallCompletionRoutine$9$label_18_false#1:
+ assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$9$label_1#1;
+
+ inline$CallCompletionRoutine$9$label_18_true#1:
+ assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$9$label_19#1;
+
+ inline$CallCompletionRoutine$9$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$9$label_20#1;
+
+ inline$CallCompletionRoutine$9$label_20#1:
+ goto inline$CallCompletionRoutine$9$label_20_icall_1#1, inline$CallCompletionRoutine$9$label_20_icall_2#1, inline$CallCompletionRoutine$9$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$9$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$9$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$9$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$9$Entry#1:
+ inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$9$start#1;
+
+ inline$BDLSystemPowerIoCompletion$9$start#1:
+ call inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$9$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_4#1:
+ inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_6#1:
+ inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$9$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$9$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$51$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$51$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$start#1:
+ inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$51$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$51$label_3_true#1, inline$IoGetCurrentIrpStackLocation$51$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$51$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$51$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$51$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$51$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$51$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$51$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$51$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$51$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$51$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$51$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$51$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$51$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$51$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$51$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$51$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$51$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$51$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$51$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$51$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$51$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon36_Then#1, inline$BDLSystemPowerIoCompletion$9$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_15#1:
+ goto inline$BDLGetDebugLevel$265$Entry#1;
+
+ inline$BDLGetDebugLevel$265$Entry#1:
+ goto inline$BDLGetDebugLevel$265$start#1;
+
+ inline$BDLGetDebugLevel$265$start#1:
+ goto inline$BDLGetDebugLevel$265$label_3#1;
+
+ inline$BDLGetDebugLevel$265$label_3#1:
+ havoc inline$BDLGetDebugLevel$265$myNondetVar_0;
+ inline$BDLGetDebugLevel$265$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$265$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$265$label_1#1;
+
+ inline$BDLGetDebugLevel$265$label_1#1:
+ goto inline$BDLGetDebugLevel$265$Return#1;
+
+ inline$BDLGetDebugLevel$265$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$265$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon37_Then#1, inline$BDLSystemPowerIoCompletion$9$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_18_true#1, inline$BDLSystemPowerIoCompletion$9$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_19#1:
+ goto inline$BDLGetDebugLevel$266$Entry#1;
+
+ inline$BDLGetDebugLevel$266$Entry#1:
+ goto inline$BDLGetDebugLevel$266$start#1;
+
+ inline$BDLGetDebugLevel$266$start#1:
+ goto inline$BDLGetDebugLevel$266$label_3#1;
+
+ inline$BDLGetDebugLevel$266$label_3#1:
+ havoc inline$BDLGetDebugLevel$266$myNondetVar_0;
+ inline$BDLGetDebugLevel$266$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$266$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$266$label_1#1;
+
+ inline$BDLGetDebugLevel$266$label_1#1:
+ goto inline$BDLGetDebugLevel$266$Return#1;
+
+ inline$BDLGetDebugLevel$266$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$266$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon38_Then#1, inline$BDLSystemPowerIoCompletion$9$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_28_true#1, inline$BDLSystemPowerIoCompletion$9$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_29#1:
+ goto inline$BDLGetDebugLevel$267$Entry#1;
+
+ inline$BDLGetDebugLevel$267$Entry#1:
+ goto inline$BDLGetDebugLevel$267$start#1;
+
+ inline$BDLGetDebugLevel$267$start#1:
+ goto inline$BDLGetDebugLevel$267$label_3#1;
+
+ inline$BDLGetDebugLevel$267$label_3#1:
+ havoc inline$BDLGetDebugLevel$267$myNondetVar_0;
+ inline$BDLGetDebugLevel$267$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$267$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$267$label_1#1;
+
+ inline$BDLGetDebugLevel$267$label_1#1:
+ goto inline$BDLGetDebugLevel$267$Return#1;
+
+ inline$BDLGetDebugLevel$267$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$267$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon39_Then#1, inline$BDLSystemPowerIoCompletion$9$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_38_true#1, inline$BDLSystemPowerIoCompletion$9$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_39_true#1, inline$BDLSystemPowerIoCompletion$9$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$9$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$9$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$9$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$9$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$9$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_106_true#1, inline$BDLSystemPowerIoCompletion$9$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$9$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$9$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$9$myNondetVar_0, inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$9$anon50_Then#1, inline$BDLSystemPowerIoCompletion$9$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_112#1:
+ inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_113_true#1, inline$BDLSystemPowerIoCompletion$9$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$9$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_117#1:
+ goto inline$BDLGetDebugLevel$274$Entry#1;
+
+ inline$BDLGetDebugLevel$274$Entry#1:
+ goto inline$BDLGetDebugLevel$274$start#1;
+
+ inline$BDLGetDebugLevel$274$start#1:
+ goto inline$BDLGetDebugLevel$274$label_3#1;
+
+ inline$BDLGetDebugLevel$274$label_3#1:
+ havoc inline$BDLGetDebugLevel$274$myNondetVar_0;
+ inline$BDLGetDebugLevel$274$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$274$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$274$label_1#1;
+
+ inline$BDLGetDebugLevel$274$label_1#1:
+ goto inline$BDLGetDebugLevel$274$Return#1;
+
+ inline$BDLGetDebugLevel$274$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$274$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon51_Then#1, inline$BDLSystemPowerIoCompletion$9$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_120_true#1, inline$BDLSystemPowerIoCompletion$9$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_121#1:
+ goto inline$BDLGetDebugLevel$275$Entry#1;
+
+ inline$BDLGetDebugLevel$275$Entry#1:
+ goto inline$BDLGetDebugLevel$275$start#1;
+
+ inline$BDLGetDebugLevel$275$start#1:
+ goto inline$BDLGetDebugLevel$275$label_3#1;
+
+ inline$BDLGetDebugLevel$275$label_3#1:
+ havoc inline$BDLGetDebugLevel$275$myNondetVar_0;
+ inline$BDLGetDebugLevel$275$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$275$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$275$label_1#1;
+
+ inline$BDLGetDebugLevel$275$label_1#1:
+ goto inline$BDLGetDebugLevel$275$Return#1;
+
+ inline$BDLGetDebugLevel$275$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$275$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon52_Then#1, inline$BDLSystemPowerIoCompletion$9$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_130_true#1, inline$BDLSystemPowerIoCompletion$9$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_131#1:
+ goto inline$BDLGetDebugLevel$276$Entry#1;
+
+ inline$BDLGetDebugLevel$276$Entry#1:
+ goto inline$BDLGetDebugLevel$276$start#1;
+
+ inline$BDLGetDebugLevel$276$start#1:
+ goto inline$BDLGetDebugLevel$276$label_3#1;
+
+ inline$BDLGetDebugLevel$276$label_3#1:
+ havoc inline$BDLGetDebugLevel$276$myNondetVar_0;
+ inline$BDLGetDebugLevel$276$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$276$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$276$label_1#1;
+
+ inline$BDLGetDebugLevel$276$label_1#1:
+ goto inline$BDLGetDebugLevel$276$Return#1;
+
+ inline$BDLGetDebugLevel$276$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$276$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon53_Then#1, inline$BDLSystemPowerIoCompletion$9$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_140_true#1, inline$BDLSystemPowerIoCompletion$9$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$9$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_115#1:
+ inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$9$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$9$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$9$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_43#1:
+ goto inline$BDLGetDebugLevel$268$Entry#1;
+
+ inline$BDLGetDebugLevel$268$Entry#1:
+ goto inline$BDLGetDebugLevel$268$start#1;
+
+ inline$BDLGetDebugLevel$268$start#1:
+ goto inline$BDLGetDebugLevel$268$label_3#1;
+
+ inline$BDLGetDebugLevel$268$label_3#1:
+ havoc inline$BDLGetDebugLevel$268$myNondetVar_0;
+ inline$BDLGetDebugLevel$268$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$268$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$268$label_1#1;
+
+ inline$BDLGetDebugLevel$268$label_1#1:
+ goto inline$BDLGetDebugLevel$268$Return#1;
+
+ inline$BDLGetDebugLevel$268$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$268$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon40_Then#1, inline$BDLSystemPowerIoCompletion$9$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_46_true#1, inline$BDLSystemPowerIoCompletion$9$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_47#1:
+ goto inline$BDLGetDebugLevel$269$Entry#1;
+
+ inline$BDLGetDebugLevel$269$Entry#1:
+ goto inline$BDLGetDebugLevel$269$start#1;
+
+ inline$BDLGetDebugLevel$269$start#1:
+ goto inline$BDLGetDebugLevel$269$label_3#1;
+
+ inline$BDLGetDebugLevel$269$label_3#1:
+ havoc inline$BDLGetDebugLevel$269$myNondetVar_0;
+ inline$BDLGetDebugLevel$269$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$269$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$269$label_1#1;
+
+ inline$BDLGetDebugLevel$269$label_1#1:
+ goto inline$BDLGetDebugLevel$269$Return#1;
+
+ inline$BDLGetDebugLevel$269$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$269$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon41_Then#1, inline$BDLSystemPowerIoCompletion$9$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_56_true#1, inline$BDLSystemPowerIoCompletion$9$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_57#1:
+ goto inline$BDLGetDebugLevel$270$Entry#1;
+
+ inline$BDLGetDebugLevel$270$Entry#1:
+ goto inline$BDLGetDebugLevel$270$start#1;
+
+ inline$BDLGetDebugLevel$270$start#1:
+ goto inline$BDLGetDebugLevel$270$label_3#1;
+
+ inline$BDLGetDebugLevel$270$label_3#1:
+ havoc inline$BDLGetDebugLevel$270$myNondetVar_0;
+ inline$BDLGetDebugLevel$270$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$270$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$270$label_1#1;
+
+ inline$BDLGetDebugLevel$270$label_1#1:
+ goto inline$BDLGetDebugLevel$270$Return#1;
+
+ inline$BDLGetDebugLevel$270$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$270$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon42_Then#1, inline$BDLSystemPowerIoCompletion$9$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_66_true#1, inline$BDLSystemPowerIoCompletion$9$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$9$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$9$anon43_Then#1, inline$BDLSystemPowerIoCompletion$9$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$9$anon44_Then#1, inline$BDLSystemPowerIoCompletion$9$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_74#1:
+ goto inline$storm_IoCompleteRequest$20$Entry#1;
+
+ inline$storm_IoCompleteRequest$20$Entry#1:
+ inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$9$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$20$start#1;
+
+ inline$storm_IoCompleteRequest$20$start#1:
+ inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$20$label_3#1;
+
+ inline$storm_IoCompleteRequest$20$label_3#1:
+ call inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$20$label_6#1;
+
+ inline$storm_IoCompleteRequest$20$label_6#1:
+ goto inline$storm_IoCompleteRequest$20$label_6_true#1, inline$storm_IoCompleteRequest$20$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$20$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$20$label_7#1;
+
+ inline$storm_IoCompleteRequest$20$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$20$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$20$label_8#1;
+
+ inline$storm_IoCompleteRequest$20$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$20$anon3_Then#1, inline$storm_IoCompleteRequest$20$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$20$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$20$anon1#1;
+
+ inline$storm_IoCompleteRequest$20$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$20$label_9#1;
+
+ inline$storm_IoCompleteRequest$20$label_9#1:
+ goto inline$storm_IoCompleteRequest$20$label_9_true#1, inline$storm_IoCompleteRequest$20$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$20$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$20$label_10#1;
+
+ inline$storm_IoCompleteRequest$20$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$20$label_1#1;
+
+ inline$storm_IoCompleteRequest$20$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$20$label_7#1;
+
+ inline$storm_IoCompleteRequest$20$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$20$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$20$label_1#1;
+
+ inline$storm_IoCompleteRequest$20$label_1#1:
+ goto inline$storm_IoCompleteRequest$20$Return#1;
+
+ inline$storm_IoCompleteRequest$20$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$20$Return#1;
+
+ inline$storm_IoCompleteRequest$20$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon45_Then#1, inline$BDLSystemPowerIoCompletion$9$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$9$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$9$anon46_Then#1, inline$BDLSystemPowerIoCompletion$9$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_80#1:
+ goto inline$BDLGetDebugLevel$271$Entry#1;
+
+ inline$BDLGetDebugLevel$271$Entry#1:
+ goto inline$BDLGetDebugLevel$271$start#1;
+
+ inline$BDLGetDebugLevel$271$start#1:
+ goto inline$BDLGetDebugLevel$271$label_3#1;
+
+ inline$BDLGetDebugLevel$271$label_3#1:
+ havoc inline$BDLGetDebugLevel$271$myNondetVar_0;
+ inline$BDLGetDebugLevel$271$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$271$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$271$label_1#1;
+
+ inline$BDLGetDebugLevel$271$label_1#1:
+ goto inline$BDLGetDebugLevel$271$Return#1;
+
+ inline$BDLGetDebugLevel$271$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$271$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon47_Then#1, inline$BDLSystemPowerIoCompletion$9$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_83_true#1, inline$BDLSystemPowerIoCompletion$9$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_84#1:
+ goto inline$BDLGetDebugLevel$272$Entry#1;
+
+ inline$BDLGetDebugLevel$272$Entry#1:
+ goto inline$BDLGetDebugLevel$272$start#1;
+
+ inline$BDLGetDebugLevel$272$start#1:
+ goto inline$BDLGetDebugLevel$272$label_3#1;
+
+ inline$BDLGetDebugLevel$272$label_3#1:
+ havoc inline$BDLGetDebugLevel$272$myNondetVar_0;
+ inline$BDLGetDebugLevel$272$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$272$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$272$label_1#1;
+
+ inline$BDLGetDebugLevel$272$label_1#1:
+ goto inline$BDLGetDebugLevel$272$Return#1;
+
+ inline$BDLGetDebugLevel$272$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$272$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon48_Then#1, inline$BDLSystemPowerIoCompletion$9$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_93_true#1, inline$BDLSystemPowerIoCompletion$9$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$9$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$9$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_94#1:
+ goto inline$BDLGetDebugLevel$273$Entry#1;
+
+ inline$BDLGetDebugLevel$273$Entry#1:
+ goto inline$BDLGetDebugLevel$273$start#1;
+
+ inline$BDLGetDebugLevel$273$start#1:
+ goto inline$BDLGetDebugLevel$273$label_3#1;
+
+ inline$BDLGetDebugLevel$273$label_3#1:
+ havoc inline$BDLGetDebugLevel$273$myNondetVar_0;
+ inline$BDLGetDebugLevel$273$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$273$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$273$label_1#1;
+
+ inline$BDLGetDebugLevel$273$label_1#1:
+ goto inline$BDLGetDebugLevel$273$Return#1;
+
+ inline$BDLGetDebugLevel$273$Return#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$273$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$9$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$9$anon49_Then#1, inline$BDLSystemPowerIoCompletion$9$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_103_true#1, inline$BDLSystemPowerIoCompletion$9$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$9$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$9$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$9$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_104#1:
+ inline$BDLSystemPowerIoCompletion$9$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$9$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$9$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$9$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$9$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$9$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$9$Return#1:
+ inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$9$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$9$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$9$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$9$anon14_Then#1, inline$CallCompletionRoutine$9$anon14_Else#1;
+
+ inline$CallCompletionRoutine$9$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$9$anon9#1;
+
+ inline$CallCompletionRoutine$9$anon9#1:
+ goto inline$CallCompletionRoutine$9$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$9$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$9$Return#1;
+
+ inline$CallCompletionRoutine$9$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$9$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$9$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$9$Entry#1:
+ inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$9$start#1;
+
+ inline$BDLDevicePowerIoCompletion$9$start#1:
+ call inline$BDLDevicePowerIoCompletion$9$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$9$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_4#1:
+ inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_6#1:
+ inline$BDLDevicePowerIoCompletion$9$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$9$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$9$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$50$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$50$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$start#1:
+ inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$50$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$50$label_3_true#1, inline$IoGetCurrentIrpStackLocation$50$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$50$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$50$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$50$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$50$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$50$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$50$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$50$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$50$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$50$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$50$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$50$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$50$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$50$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$50$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$50$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$50$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$50$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$50$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$50$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$50$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$50$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$50$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$50$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon30_Then#1, inline$BDLDevicePowerIoCompletion$9$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_13#1:
+ inline$BDLDevicePowerIoCompletion$9$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_17#1:
+ goto inline$BDLGetDebugLevel$256$Entry#1;
+
+ inline$BDLGetDebugLevel$256$Entry#1:
+ goto inline$BDLGetDebugLevel$256$start#1;
+
+ inline$BDLGetDebugLevel$256$start#1:
+ goto inline$BDLGetDebugLevel$256$label_3#1;
+
+ inline$BDLGetDebugLevel$256$label_3#1:
+ havoc inline$BDLGetDebugLevel$256$myNondetVar_0;
+ inline$BDLGetDebugLevel$256$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$256$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$256$label_1#1;
+
+ inline$BDLGetDebugLevel$256$label_1#1:
+ goto inline$BDLGetDebugLevel$256$Return#1;
+
+ inline$BDLGetDebugLevel$256$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$256$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon31_Then#1, inline$BDLDevicePowerIoCompletion$9$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_20_true#1, inline$BDLDevicePowerIoCompletion$9$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_21#1:
+ goto inline$BDLGetDebugLevel$257$Entry#1;
+
+ inline$BDLGetDebugLevel$257$Entry#1:
+ goto inline$BDLGetDebugLevel$257$start#1;
+
+ inline$BDLGetDebugLevel$257$start#1:
+ goto inline$BDLGetDebugLevel$257$label_3#1;
+
+ inline$BDLGetDebugLevel$257$label_3#1:
+ havoc inline$BDLGetDebugLevel$257$myNondetVar_0;
+ inline$BDLGetDebugLevel$257$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$257$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$257$label_1#1;
+
+ inline$BDLGetDebugLevel$257$label_1#1:
+ goto inline$BDLGetDebugLevel$257$Return#1;
+
+ inline$BDLGetDebugLevel$257$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$257$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon32_Then#1, inline$BDLDevicePowerIoCompletion$9$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_30_true#1, inline$BDLDevicePowerIoCompletion$9$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_31#1:
+ goto inline$BDLGetDebugLevel$258$Entry#1;
+
+ inline$BDLGetDebugLevel$258$Entry#1:
+ goto inline$BDLGetDebugLevel$258$start#1;
+
+ inline$BDLGetDebugLevel$258$start#1:
+ goto inline$BDLGetDebugLevel$258$label_3#1;
+
+ inline$BDLGetDebugLevel$258$label_3#1:
+ havoc inline$BDLGetDebugLevel$258$myNondetVar_0;
+ inline$BDLGetDebugLevel$258$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$258$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$258$label_1#1;
+
+ inline$BDLGetDebugLevel$258$label_1#1:
+ goto inline$BDLGetDebugLevel$258$Return#1;
+
+ inline$BDLGetDebugLevel$258$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$258$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon33_Then#1, inline$BDLDevicePowerIoCompletion$9$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_40_true#1, inline$BDLDevicePowerIoCompletion$9$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_41_true#1, inline$BDLDevicePowerIoCompletion$9$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$9$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$9$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_44_true#1, inline$BDLDevicePowerIoCompletion$9$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_45_true#1, inline$BDLDevicePowerIoCompletion$9$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$9$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$9$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$9$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_54#1:
+ inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$9$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_55_true#1, inline$BDLDevicePowerIoCompletion$9$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$9$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$9$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$9$anon34_Then#1, inline$BDLDevicePowerIoCompletion$9$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_59#1:
+ goto inline$BDLGetDebugLevel$259$Entry#1;
+
+ inline$BDLGetDebugLevel$259$Entry#1:
+ goto inline$BDLGetDebugLevel$259$start#1;
+
+ inline$BDLGetDebugLevel$259$start#1:
+ goto inline$BDLGetDebugLevel$259$label_3#1;
+
+ inline$BDLGetDebugLevel$259$label_3#1:
+ havoc inline$BDLGetDebugLevel$259$myNondetVar_0;
+ inline$BDLGetDebugLevel$259$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$259$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$259$label_1#1;
+
+ inline$BDLGetDebugLevel$259$label_1#1:
+ goto inline$BDLGetDebugLevel$259$Return#1;
+
+ inline$BDLGetDebugLevel$259$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$259$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon35_Then#1, inline$BDLDevicePowerIoCompletion$9$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_62_true#1, inline$BDLDevicePowerIoCompletion$9$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_63#1:
+ goto inline$BDLGetDebugLevel$260$Entry#1;
+
+ inline$BDLGetDebugLevel$260$Entry#1:
+ goto inline$BDLGetDebugLevel$260$start#1;
+
+ inline$BDLGetDebugLevel$260$start#1:
+ goto inline$BDLGetDebugLevel$260$label_3#1;
+
+ inline$BDLGetDebugLevel$260$label_3#1:
+ havoc inline$BDLGetDebugLevel$260$myNondetVar_0;
+ inline$BDLGetDebugLevel$260$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$260$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$260$label_1#1;
+
+ inline$BDLGetDebugLevel$260$label_1#1:
+ goto inline$BDLGetDebugLevel$260$Return#1;
+
+ inline$BDLGetDebugLevel$260$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$260$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon36_Then#1, inline$BDLDevicePowerIoCompletion$9$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_72_true#1, inline$BDLDevicePowerIoCompletion$9$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_73#1:
+ goto inline$BDLGetDebugLevel$261$Entry#1;
+
+ inline$BDLGetDebugLevel$261$Entry#1:
+ goto inline$BDLGetDebugLevel$261$start#1;
+
+ inline$BDLGetDebugLevel$261$start#1:
+ goto inline$BDLGetDebugLevel$261$label_3#1;
+
+ inline$BDLGetDebugLevel$261$label_3#1:
+ havoc inline$BDLGetDebugLevel$261$myNondetVar_0;
+ inline$BDLGetDebugLevel$261$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$261$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$261$label_1#1;
+
+ inline$BDLGetDebugLevel$261$label_1#1:
+ goto inline$BDLGetDebugLevel$261$Return#1;
+
+ inline$BDLGetDebugLevel$261$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$261$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon37_Then#1, inline$BDLDevicePowerIoCompletion$9$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_82_true#1, inline$BDLDevicePowerIoCompletion$9$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$9$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$9$anon38_Then#1, inline$BDLDevicePowerIoCompletion$9$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$9$anon39_Then#1, inline$BDLDevicePowerIoCompletion$9$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_92#1:
+ goto inline$storm_IoCompleteRequest$19$Entry#1;
+
+ inline$storm_IoCompleteRequest$19$Entry#1:
+ inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$9$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$19$start#1;
+
+ inline$storm_IoCompleteRequest$19$start#1:
+ inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$19$label_3#1;
+
+ inline$storm_IoCompleteRequest$19$label_3#1:
+ call inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$19$label_6#1;
+
+ inline$storm_IoCompleteRequest$19$label_6#1:
+ goto inline$storm_IoCompleteRequest$19$label_6_true#1, inline$storm_IoCompleteRequest$19$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$19$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$19$label_7#1;
+
+ inline$storm_IoCompleteRequest$19$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$19$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$19$label_8#1;
+
+ inline$storm_IoCompleteRequest$19$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$19$anon3_Then#1, inline$storm_IoCompleteRequest$19$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$19$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$19$anon1#1;
+
+ inline$storm_IoCompleteRequest$19$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$19$label_9#1;
+
+ inline$storm_IoCompleteRequest$19$label_9#1:
+ goto inline$storm_IoCompleteRequest$19$label_9_true#1, inline$storm_IoCompleteRequest$19$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$19$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$19$label_10#1;
+
+ inline$storm_IoCompleteRequest$19$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$19$label_1#1;
+
+ inline$storm_IoCompleteRequest$19$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$19$label_7#1;
+
+ inline$storm_IoCompleteRequest$19$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$19$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$19$label_1#1;
+
+ inline$storm_IoCompleteRequest$19$label_1#1:
+ goto inline$storm_IoCompleteRequest$19$Return#1;
+
+ inline$storm_IoCompleteRequest$19$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$19$Return#1;
+
+ inline$storm_IoCompleteRequest$19$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon40_Then#1, inline$BDLDevicePowerIoCompletion$9$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$9$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$9$anon41_Then#1, inline$BDLDevicePowerIoCompletion$9$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_98#1:
+ goto inline$BDLGetDebugLevel$262$Entry#1;
+
+ inline$BDLGetDebugLevel$262$Entry#1:
+ goto inline$BDLGetDebugLevel$262$start#1;
+
+ inline$BDLGetDebugLevel$262$start#1:
+ goto inline$BDLGetDebugLevel$262$label_3#1;
+
+ inline$BDLGetDebugLevel$262$label_3#1:
+ havoc inline$BDLGetDebugLevel$262$myNondetVar_0;
+ inline$BDLGetDebugLevel$262$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$262$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$262$label_1#1;
+
+ inline$BDLGetDebugLevel$262$label_1#1:
+ goto inline$BDLGetDebugLevel$262$Return#1;
+
+ inline$BDLGetDebugLevel$262$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$262$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon42_Then#1, inline$BDLDevicePowerIoCompletion$9$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_101_true#1, inline$BDLDevicePowerIoCompletion$9$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_102#1:
+ goto inline$BDLGetDebugLevel$263$Entry#1;
+
+ inline$BDLGetDebugLevel$263$Entry#1:
+ goto inline$BDLGetDebugLevel$263$start#1;
+
+ inline$BDLGetDebugLevel$263$start#1:
+ goto inline$BDLGetDebugLevel$263$label_3#1;
+
+ inline$BDLGetDebugLevel$263$label_3#1:
+ havoc inline$BDLGetDebugLevel$263$myNondetVar_0;
+ inline$BDLGetDebugLevel$263$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$263$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$263$label_1#1;
+
+ inline$BDLGetDebugLevel$263$label_1#1:
+ goto inline$BDLGetDebugLevel$263$Return#1;
+
+ inline$BDLGetDebugLevel$263$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$263$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon43_Then#1, inline$BDLDevicePowerIoCompletion$9$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_111_true#1, inline$BDLDevicePowerIoCompletion$9$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$9$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$9$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_112#1:
+ goto inline$BDLGetDebugLevel$264$Entry#1;
+
+ inline$BDLGetDebugLevel$264$Entry#1:
+ goto inline$BDLGetDebugLevel$264$start#1;
+
+ inline$BDLGetDebugLevel$264$start#1:
+ goto inline$BDLGetDebugLevel$264$label_3#1;
+
+ inline$BDLGetDebugLevel$264$label_3#1:
+ havoc inline$BDLGetDebugLevel$264$myNondetVar_0;
+ inline$BDLGetDebugLevel$264$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$264$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$264$label_1#1;
+
+ inline$BDLGetDebugLevel$264$label_1#1:
+ goto inline$BDLGetDebugLevel$264$Return#1;
+
+ inline$BDLGetDebugLevel$264$Return#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$264$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$9$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$9$anon44_Then#1, inline$BDLDevicePowerIoCompletion$9$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_121_true#1, inline$BDLDevicePowerIoCompletion$9$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$9$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$9$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$9$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_122#1:
+ inline$BDLDevicePowerIoCompletion$9$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$9$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$9$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$9$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$9$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$9$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$9$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$9$Return#1:
+ inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$9$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$9$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$9$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$9$anon13_Then#1, inline$CallCompletionRoutine$9$anon13_Else#1;
+
+ inline$CallCompletionRoutine$9$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$9$anon7#1;
+
+ inline$CallCompletionRoutine$9$anon7#1:
+ goto inline$CallCompletionRoutine$9$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$9$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$9$Return#1;
+
+ inline$CallCompletionRoutine$9$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$9$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$9$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$9$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$9$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$9$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$start#1:
+ inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$9$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$9$label_3_true#1, inline$BDLCallDriverCompletionRoutine$9$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$9$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$9$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$9$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$9$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$9$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_6#1:
+ goto inline$storm_KeSetEvent$11$Entry#1;
+
+ inline$storm_KeSetEvent$11$Entry#1:
+ inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$9$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$11$start#1;
+
+ inline$storm_KeSetEvent$11$start#1:
+ inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$11$label_3#1;
+
+ inline$storm_KeSetEvent$11$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$11$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$11$label_1#1;
+
+ inline$storm_KeSetEvent$11$label_1#1:
+ goto inline$storm_KeSetEvent$11$Return#1;
+
+ inline$storm_KeSetEvent$11$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$9$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$9$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$9$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$9$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$9$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$9$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$9$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$9$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$9$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$9$Return#1:
+ inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$9$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$9$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$9$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$9$anon12_Then#1, inline$CallCompletionRoutine$9$anon12_Else#1;
+
+ inline$CallCompletionRoutine$9$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$9$anon5#1;
+
+ inline$CallCompletionRoutine$9$anon5#1:
+ goto inline$CallCompletionRoutine$9$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$9$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$9$label_23#1;
+
+ inline$CallCompletionRoutine$9$label_23#1:
+ inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$9$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$9$label_24#1;
+
+ inline$CallCompletionRoutine$9$label_24#1:
+ goto inline$CallCompletionRoutine$9$label_24_true#1, inline$CallCompletionRoutine$9$label_24_false#1;
+
+ inline$CallCompletionRoutine$9$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$9$label_1#1;
+
+ inline$CallCompletionRoutine$9$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$9$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$9$label_25#1;
+
+ inline$CallCompletionRoutine$9$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$9$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$9$label_1#1;
+
+ inline$CallCompletionRoutine$9$label_1#1:
+ goto inline$CallCompletionRoutine$9$Return#1;
+
+ inline$CallCompletionRoutine$9$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$9$Return#1;
+
+ inline$CallCompletionRoutine$9$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$9$Return#1;
+
+ inline$CallCompletionRoutine$9$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$9$Return#1;
+
+ inline$CallCompletionRoutine$9$Return#1:
+ goto inline$storm_IoCallDriver$4$label_39$1#1;
+
+ inline$storm_IoCallDriver$4$label_39$1#1:
+ goto inline$storm_IoCallDriver$4$anon15_Then#1, inline$storm_IoCallDriver$4$anon15_Else#1;
+
+ inline$storm_IoCallDriver$4$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$4$anon10#1;
+
+ inline$storm_IoCallDriver$4$anon10#1:
+ goto inline$storm_IoCallDriver$4$label_36#1;
+
+ inline$storm_IoCallDriver$4$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$4$Return#1;
+
+ inline$storm_IoCallDriver$4$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$4$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$4$label_28#1;
+
+ inline$storm_IoCallDriver$4$label_28#1:
+ inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$4$label_42#1;
+
+ inline$storm_IoCallDriver$4$label_42#1:
+ goto inline$storm_IoCallDriver$4$label_43#1;
+
+ inline$storm_IoCallDriver$4$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$4$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$4$label_36#1;
+
+ inline$storm_IoCallDriver$4$label_36#1:
+ inline$storm_IoCallDriver$4$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$4$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$4$label_1#1;
+
+ inline$storm_IoCallDriver$4$label_1#1:
+ goto inline$storm_IoCallDriver$4$Return#1;
+
+ inline$storm_IoCallDriver$4$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$4$Return#1;
+
+ inline$storm_IoCallDriver$4$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$4$Return#1;
+
+ inline$storm_IoCallDriver$4$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$4$Return#1;
+
+ inline$storm_IoCallDriver$4$Return#1:
+ inline$BDLHandleRemove$0$$result.storm_IoCallDriver$2453.25$39$ := inline$storm_IoCallDriver$4$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLHandleRemove$0$label_109$1#1;
+
+ inline$BDLHandleRemove$0$label_109$1#1:
+ goto inline$BDLHandleRemove$0$anon56_Then#1, inline$BDLHandleRemove$0$anon56_Else#1;
+
+ inline$BDLHandleRemove$0$anon56_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon29#1;
+
+ inline$BDLHandleRemove$0$anon29#1:
+ goto inline$BDLHandleRemove$0$label_112#1;
+
+ inline$BDLHandleRemove$0$label_112#1:
+ inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 := inline$BDLHandleRemove$0$$result.storm_IoCallDriver$2453.25$39$;
+ goto inline$BDLHandleRemove$0$label_113#1;
+
+ inline$BDLHandleRemove$0$label_113#1:
+ goto inline$BDLHandleRemove$0$label_113_true#1, inline$BDLHandleRemove$0$label_113_false#1;
+
+ inline$BDLHandleRemove$0$label_113_false#1:
+ assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 == 0;
+ goto inline$BDLHandleRemove$0$label_114#1;
+
+ inline$BDLHandleRemove$0$label_113_true#1:
+ assume inline$BDLHandleRemove$0$$status$4$2383.28$BDLHandleRemove$12 != 0;
+ goto inline$BDLHandleRemove$0$label_117#1;
+
+ inline$BDLHandleRemove$0$label_117#1:
+ goto inline$BDLGetDebugLevel$278$Entry#1;
+
+ inline$BDLGetDebugLevel$278$Entry#1:
+ goto inline$BDLGetDebugLevel$278$start#1;
+
+ inline$BDLGetDebugLevel$278$start#1:
+ goto inline$BDLGetDebugLevel$278$label_3#1;
+
+ inline$BDLGetDebugLevel$278$label_3#1:
+ havoc inline$BDLGetDebugLevel$278$myNondetVar_0;
+ inline$BDLGetDebugLevel$278$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$278$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$278$label_1#1;
+
+ inline$BDLGetDebugLevel$278$label_1#1:
+ goto inline$BDLGetDebugLevel$278$Return#1;
+
+ inline$BDLGetDebugLevel$278$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$ := inline$BDLGetDebugLevel$278$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_117$1#1;
+
+ inline$BDLHandleRemove$0$label_117$1#1:
+ goto inline$BDLHandleRemove$0$anon58_Then#1, inline$BDLHandleRemove$0$anon58_Else#1;
+
+ inline$BDLHandleRemove$0$anon58_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon33#1;
+
+ inline$BDLHandleRemove$0$anon33#1:
+ goto inline$BDLHandleRemove$0$label_120#1;
+
+ inline$BDLHandleRemove$0$label_120#1:
+ goto inline$BDLHandleRemove$0$label_120_true#1, inline$BDLHandleRemove$0$label_120_false#1;
+
+ inline$BDLHandleRemove$0$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$) == 0;
+ goto inline$BDLHandleRemove$0$label_121#1;
+
+ inline$BDLHandleRemove$0$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$40$) != 0;
+ goto inline$BDLHandleRemove$0$label_124#1;
+
+ inline$BDLHandleRemove$0$label_124#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_125#1;
+
+ inline$BDLHandleRemove$0$label_125#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_126#1;
+
+ inline$BDLHandleRemove$0$label_126#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_127#1;
+
+ inline$BDLHandleRemove$0$label_127#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$41$;
+ goto inline$BDLHandleRemove$0$label_121#1;
+
+ inline$BDLHandleRemove$0$label_121#1:
+ goto inline$BDLGetDebugLevel$279$Entry#1;
+
+ inline$BDLGetDebugLevel$279$Entry#1:
+ goto inline$BDLGetDebugLevel$279$start#1;
+
+ inline$BDLGetDebugLevel$279$start#1:
+ goto inline$BDLGetDebugLevel$279$label_3#1;
+
+ inline$BDLGetDebugLevel$279$label_3#1:
+ havoc inline$BDLGetDebugLevel$279$myNondetVar_0;
+ inline$BDLGetDebugLevel$279$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$279$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$279$label_1#1;
+
+ inline$BDLGetDebugLevel$279$label_1#1:
+ goto inline$BDLGetDebugLevel$279$Return#1;
+
+ inline$BDLGetDebugLevel$279$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$ := inline$BDLGetDebugLevel$279$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_121$1#1;
+
+ inline$BDLHandleRemove$0$label_121$1#1:
+ goto inline$BDLHandleRemove$0$anon59_Then#1, inline$BDLHandleRemove$0$anon59_Else#1;
+
+ inline$BDLHandleRemove$0$anon59_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon35#1;
+
+ inline$BDLHandleRemove$0$anon35#1:
+ goto inline$BDLHandleRemove$0$label_130#1;
+
+ inline$BDLHandleRemove$0$label_130#1:
+ goto inline$BDLHandleRemove$0$label_130_true#1, inline$BDLHandleRemove$0$label_130_false#1;
+
+ inline$BDLHandleRemove$0$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$) == 0;
+ goto inline$BDLHandleRemove$0$label_131#1;
+
+ inline$BDLHandleRemove$0$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$45$) != 0;
+ goto inline$BDLHandleRemove$0$label_134#1;
+
+ inline$BDLHandleRemove$0$label_134#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_135#1;
+
+ inline$BDLHandleRemove$0$label_135#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_136#1;
+
+ inline$BDLHandleRemove$0$label_136#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_137#1;
+
+ inline$BDLHandleRemove$0$label_137#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2457.0$46$;
+ goto inline$BDLHandleRemove$0$label_131#1;
+
+ inline$BDLHandleRemove$0$label_131#1:
+ goto inline$BDLGetDebugLevel$280$Entry#1;
+
+ inline$BDLGetDebugLevel$280$Entry#1:
+ goto inline$BDLGetDebugLevel$280$start#1;
+
+ inline$BDLGetDebugLevel$280$start#1:
+ goto inline$BDLGetDebugLevel$280$label_3#1;
+
+ inline$BDLGetDebugLevel$280$label_3#1:
+ havoc inline$BDLGetDebugLevel$280$myNondetVar_0;
+ inline$BDLGetDebugLevel$280$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$280$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$280$label_1#1;
+
+ inline$BDLGetDebugLevel$280$label_1#1:
+ goto inline$BDLGetDebugLevel$280$Return#1;
+
+ inline$BDLGetDebugLevel$280$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$ := inline$BDLGetDebugLevel$280$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_131$1#1;
+
+ inline$BDLHandleRemove$0$label_131$1#1:
+ goto inline$BDLHandleRemove$0$anon60_Then#1, inline$BDLHandleRemove$0$anon60_Else#1;
+
+ inline$BDLHandleRemove$0$anon60_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon37#1;
+
+ inline$BDLHandleRemove$0$anon37#1:
+ goto inline$BDLHandleRemove$0$label_140#1;
+
+ inline$BDLHandleRemove$0$label_140#1:
+ goto inline$BDLHandleRemove$0$label_140_true#1, inline$BDLHandleRemove$0$label_140_false#1;
+
+ inline$BDLHandleRemove$0$label_140_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$, 4) == 0;
+ goto inline$BDLHandleRemove$0$label_114#1;
+
+ inline$BDLHandleRemove$0$label_140_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2457.0$50$, 4) != 0;
+ goto inline$BDLHandleRemove$0$label_141#1;
+
+ inline$BDLHandleRemove$0$label_141#1:
+ goto inline$BDLHandleRemove$0$label_114#1;
+
+ inline$BDLHandleRemove$0$label_114#1:
+ goto inline$BDLGetDebugLevel$277$Entry#1;
+
+ inline$BDLGetDebugLevel$277$Entry#1:
+ goto inline$BDLGetDebugLevel$277$start#1;
+
+ inline$BDLGetDebugLevel$277$start#1:
+ goto inline$BDLGetDebugLevel$277$label_3#1;
+
+ inline$BDLGetDebugLevel$277$label_3#1:
+ havoc inline$BDLGetDebugLevel$277$myNondetVar_0;
+ inline$BDLGetDebugLevel$277$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$277$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$277$label_1#1;
+
+ inline$BDLGetDebugLevel$277$label_1#1:
+ goto inline$BDLGetDebugLevel$277$Return#1;
+
+ inline$BDLGetDebugLevel$277$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$ := inline$BDLGetDebugLevel$277$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_114$1#1;
+
+ inline$BDLHandleRemove$0$label_114$1#1:
+ goto inline$BDLHandleRemove$0$anon57_Then#1, inline$BDLHandleRemove$0$anon57_Else#1;
+
+ inline$BDLHandleRemove$0$anon57_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon31#1;
+
+ inline$BDLHandleRemove$0$anon31#1:
+ goto inline$BDLHandleRemove$0$label_142#1;
+
+ inline$BDLHandleRemove$0$label_142#1:
+ goto inline$BDLHandleRemove$0$label_142_true#1, inline$BDLHandleRemove$0$label_142_false#1;
+
+ inline$BDLHandleRemove$0$label_142_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$) == 0;
+ goto inline$BDLHandleRemove$0$label_143#1;
+
+ inline$BDLHandleRemove$0$label_142_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$51$) != 0;
+ goto inline$BDLHandleRemove$0$label_146#1;
+
+ inline$BDLHandleRemove$0$label_146#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_147#1;
+
+ inline$BDLHandleRemove$0$label_147#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_148#1;
+
+ inline$BDLHandleRemove$0$label_148#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_149#1;
+
+ inline$BDLHandleRemove$0$label_149#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$52$;
+ goto inline$BDLHandleRemove$0$label_143#1;
+
+ inline$BDLHandleRemove$0$label_143#1:
+ goto inline$BDLGetDebugLevel$281$Entry#1;
+
+ inline$BDLGetDebugLevel$281$Entry#1:
+ goto inline$BDLGetDebugLevel$281$start#1;
+
+ inline$BDLGetDebugLevel$281$start#1:
+ goto inline$BDLGetDebugLevel$281$label_3#1;
+
+ inline$BDLGetDebugLevel$281$label_3#1:
+ havoc inline$BDLGetDebugLevel$281$myNondetVar_0;
+ inline$BDLGetDebugLevel$281$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$281$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$281$label_1#1;
+
+ inline$BDLGetDebugLevel$281$label_1#1:
+ goto inline$BDLGetDebugLevel$281$Return#1;
+
+ inline$BDLGetDebugLevel$281$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$ := inline$BDLGetDebugLevel$281$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_143$1#1;
+
+ inline$BDLHandleRemove$0$label_143$1#1:
+ goto inline$BDLHandleRemove$0$anon61_Then#1, inline$BDLHandleRemove$0$anon61_Else#1;
+
+ inline$BDLHandleRemove$0$anon61_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon39#1;
+
+ inline$BDLHandleRemove$0$anon39#1:
+ goto inline$BDLHandleRemove$0$label_152#1;
+
+ inline$BDLHandleRemove$0$label_152#1:
+ goto inline$BDLHandleRemove$0$label_152_true#1, inline$BDLHandleRemove$0$label_152_false#1;
+
+ inline$BDLHandleRemove$0$label_152_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$) == 0;
+ goto inline$BDLHandleRemove$0$label_153#1;
+
+ inline$BDLHandleRemove$0$label_152_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$56$) != 0;
+ goto inline$BDLHandleRemove$0$label_156#1;
+
+ inline$BDLHandleRemove$0$label_156#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_157#1;
+
+ inline$BDLHandleRemove$0$label_157#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_158#1;
+
+ inline$BDLHandleRemove$0$label_158#1:
+ call inline$BDLHandleRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLHandleRemove$0$label_159#1;
+
+ inline$BDLHandleRemove$0$label_159#1:
+ havoc inline$BDLHandleRemove$0$$result.DbgPrint$2465.0$57$;
+ goto inline$BDLHandleRemove$0$label_153#1;
+
+ inline$BDLHandleRemove$0$label_153#1:
+ goto inline$BDLGetDebugLevel$282$Entry#1;
+
+ inline$BDLGetDebugLevel$282$Entry#1:
+ goto inline$BDLGetDebugLevel$282$start#1;
+
+ inline$BDLGetDebugLevel$282$start#1:
+ goto inline$BDLGetDebugLevel$282$label_3#1;
+
+ inline$BDLGetDebugLevel$282$label_3#1:
+ havoc inline$BDLGetDebugLevel$282$myNondetVar_0;
+ inline$BDLGetDebugLevel$282$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$282$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$282$label_1#1;
+
+ inline$BDLGetDebugLevel$282$label_1#1:
+ goto inline$BDLGetDebugLevel$282$Return#1;
+
+ inline$BDLGetDebugLevel$282$Return#1:
+ inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$ := inline$BDLGetDebugLevel$282$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLHandleRemove$0$label_153$1#1;
+
+ inline$BDLHandleRemove$0$label_153$1#1:
+ goto inline$BDLHandleRemove$0$anon62_Then#1, inline$BDLHandleRemove$0$anon62_Else#1;
+
+ inline$BDLHandleRemove$0$anon62_Else#1:
+ assume !raiseException;
+ goto inline$BDLHandleRemove$0$anon41#1;
+
+ inline$BDLHandleRemove$0$anon41#1:
+ goto inline$BDLHandleRemove$0$label_162#1;
+
+ inline$BDLHandleRemove$0$label_162#1:
+ goto inline$BDLHandleRemove$0$label_162_true#1, inline$BDLHandleRemove$0$label_162_false#1;
+
+ inline$BDLHandleRemove$0$label_162_false#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$, 4) == 0;
+ goto inline$BDLHandleRemove$0$label_163#1;
+
+ inline$BDLHandleRemove$0$label_162_true#1:
+ assume BIT_BAND(inline$BDLHandleRemove$0$$result.BDLGetDebugLevel$2465.0$61$, 4) != 0;
+ goto inline$BDLHandleRemove$0$label_164#1;
+
+ inline$BDLHandleRemove$0$label_164#1:
+ goto inline$BDLHandleRemove$0$label_163#1;
+
+ inline$BDLHandleRemove$0$label_163#1:
+ goto inline$BDLHandleRemove$0$label_1#1;
+
+ inline$BDLHandleRemove$0$label_1#1:
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon62_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon61_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon57_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon60_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon59_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon58_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon56_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon55_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon54_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLHandleRemove$0$Return#1;
+
+ inline$BDLHandleRemove$0$Return#1:
+ goto inline$BDLPnPRemove$0$label_73$1#1;
+
+ inline$BDLPnPRemove$0$label_73$1#1:
+ goto inline$BDLPnPRemove$0$anon35_Then#1, inline$BDLPnPRemove$0$anon35_Else#1;
+
+ inline$BDLPnPRemove$0$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon23#1;
+
+ inline$BDLPnPRemove$0$anon23#1:
+ goto inline$BDLPnPRemove$0$label_32#1;
+
+ inline$BDLPnPRemove$0$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$label_29_true#1:
+ havoc inline$BDLPnPRemove$0$myNondetVar_0;
+ assume inline$BDLPnPRemove$0$myNondetVar_0 != 0;
+ goto inline$BDLPnPRemove$0$label_32#1;
+
+ inline$BDLPnPRemove$0$label_32#1:
+ call IoReleaseRemoveLockAndWaitEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16), 544632146, 88);
+ goto inline$BDLPnPRemove$0$anon27_Then#1, inline$BDLPnPRemove$0$anon27_Else#1;
+
+ inline$BDLPnPRemove$0$anon27_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon7#1;
+
+ inline$BDLPnPRemove$0$anon7#1:
+ goto inline$BDLPnPRemove$0$label_35#1;
+
+ inline$BDLPnPRemove$0$label_35#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$Entry#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$Entry#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$start#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$start#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_3#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_3#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_4#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_4#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_5#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_5#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_6#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_6#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_7#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_7#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_7_true#1, inline$BDLCleanupDeviceCapabilities$0$label_7_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_7_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 == 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_8#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_7_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 != 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_9#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_9#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0, 541869122);
+ goto inline$BDLCleanupDeviceCapabilities$0$anon14_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon14_Else#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon14_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$anon1#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon1#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_12#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_12#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_8#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_8#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_8_true#1, inline$BDLCleanupDeviceCapabilities$0$label_8_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_8_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 == 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_1#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_8_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0 != 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_13#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_13#1:
+ inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4 := 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_14#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_14#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_14_head#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_14_head#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_14_true#1, inline$BDLCleanupDeviceCapabilities$0$label_14_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_14_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ assume !INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0);
+ goto inline$BDLCleanupDeviceCapabilities$0$label_15#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_15#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0, 541869122);
+ goto inline$BDLCleanupDeviceCapabilities$0$anon15_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon15_Else#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon15_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$anon3#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon3#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_47#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_47#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_1#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_1#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon15_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_14_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ assume INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0);
+ goto inline$BDLCleanupDeviceCapabilities$0$label_18#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_18#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_18_true#1, inline$BDLCleanupDeviceCapabilities$0$label_18_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_18_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 == 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_19#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_18_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 != 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_20#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_20#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$1$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_21#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_21#1:
+ call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$1$, 541869122);
+ goto inline$BDLCleanupDeviceCapabilities$0$anon16_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon16_Else#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$anon5#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon5#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_19#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_19#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_19_true#1, inline$BDLCleanupDeviceCapabilities$0$label_19_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_19_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 == 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_24#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_19_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1 != 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_25#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_25#1:
+ inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4 := 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_26#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_26#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_26_head#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_26_head#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_26_true#1, inline$BDLCleanupDeviceCapabilities$0$label_26_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_26_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ assume !INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1);
+ goto inline$BDLCleanupDeviceCapabilities$0$label_27#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_27#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$5$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_44#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_44#1:
+ call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$5$, 541869122);
+ goto inline$BDLCleanupDeviceCapabilities$0$anon20_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon20_Else#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$anon13#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon13#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_24#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_24#1:
+ inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4 := PLUS(inline$BDLCleanupDeviceCapabilities$0$$i$3$1733.10$BDLCleanupDeviceCapabilities$4, 1, 1);
+ goto inline$BDLCleanupDeviceCapabilities$0$label_14_head#0;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_14_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_26_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ assume INT_ULT(inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4, inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1);
+ goto inline$BDLCleanupDeviceCapabilities$0$label_28#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_28#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_28_true#1, inline$BDLCleanupDeviceCapabilities$0$label_28_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_28_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 == 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_29#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_28_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 != 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_30#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_30#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$2$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_31#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_31#1:
+ call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$2$, 541869122);
+ goto inline$BDLCleanupDeviceCapabilities$0$anon17_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon17_Else#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$anon7#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon7#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_29#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_29#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_29_true#1, inline$BDLCleanupDeviceCapabilities$0$label_29_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_29_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 == 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_34#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_29_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 != 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_35#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_35#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$3$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_36#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_36#1:
+ call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$3$, 541869122);
+ goto inline$BDLCleanupDeviceCapabilities$0$anon18_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon18_Else#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$anon9#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon9#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_34#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_34#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_34_true#1, inline$BDLCleanupDeviceCapabilities$0$label_34_false#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_34_false#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 == 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_39#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_34_true#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ assume inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2 != 0;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_40#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_40#1:
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_0;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_1;
+ havoc inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$4$ := inline$BDLCleanupDeviceCapabilities$0$myNondetVar_2;
+ goto inline$BDLCleanupDeviceCapabilities$0$label_41#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_41#1:
+ call ExFreePoolWithTag(inline$BDLCleanupDeviceCapabilities$0$$ExFreePoolWithTag.arg.1$4$, 541869122);
+ goto inline$BDLCleanupDeviceCapabilities$0$anon19_Then#1, inline$BDLCleanupDeviceCapabilities$0$anon19_Else#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$anon11#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon11#1:
+ goto inline$BDLCleanupDeviceCapabilities$0$label_39#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_39#1:
+ inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4 := PLUS(inline$BDLCleanupDeviceCapabilities$0$$j$4$1733.13$BDLCleanupDeviceCapabilities$4, 1, 1);
+ goto inline$BDLCleanupDeviceCapabilities$0$label_26_head#0;
+
+ inline$BDLCleanupDeviceCapabilities$0$label_26_head#0:
+ assume false;
+ return;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$anon14_Then#1:
+ assume raiseException;
+ goto inline$BDLCleanupDeviceCapabilities$0$Return#1;
+
+ inline$BDLCleanupDeviceCapabilities$0$Return#1:
+ goto inline$BDLPnPRemove$0$label_35$1#1;
+
+ inline$BDLPnPRemove$0$label_35$1#1:
+ goto inline$BDLPnPRemove$0$anon28_Then#1, inline$BDLPnPRemove$0$anon28_Else#1;
+
+ inline$BDLPnPRemove$0$anon28_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon9#1;
+
+ inline$BDLPnPRemove$0$anon9#1:
+ goto inline$BDLPnPRemove$0$label_38#1;
+
+ inline$BDLPnPRemove$0$label_38#1:
+ call IoDetachDevice(inline$BDLPnPRemove$0$$pAttachedDeviceObject$3$2480.40$BDLPnPRemove$16);
+ goto inline$BDLPnPRemove$0$anon29_Then#1, inline$BDLPnPRemove$0$anon29_Else#1;
+
+ inline$BDLPnPRemove$0$anon29_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon11#1;
+
+ inline$BDLPnPRemove$0$anon11#1:
+ goto inline$BDLPnPRemove$0$label_41#1;
+
+ inline$BDLPnPRemove$0$label_41#1:
+ call RtlFreeUnicodeString(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPRemove$0$$pBDLExtension$1$2478.40$BDLPnPRemove$16));
+ goto inline$BDLPnPRemove$0$anon30_Then#1, inline$BDLPnPRemove$0$anon30_Else#1;
+
+ inline$BDLPnPRemove$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon13#1;
+
+ inline$BDLPnPRemove$0$anon13#1:
+ goto inline$BDLPnPRemove$0$label_44#1;
+
+ inline$BDLPnPRemove$0$label_44#1:
+ call IoDeleteDevice(inline$BDLPnPRemove$0$$pDeviceObject$2$2479.40$BDLPnPRemove$16);
+ goto inline$BDLPnPRemove$0$anon31_Then#1, inline$BDLPnPRemove$0$anon31_Else#1;
+
+ inline$BDLPnPRemove$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon15#1;
+
+ inline$BDLPnPRemove$0$anon15#1:
+ goto inline$BDLPnPRemove$0$label_47#1;
+
+ inline$BDLPnPRemove$0$label_47#1:
+ goto inline$BDLGetDebugLevel$205$Entry#1;
+
+ inline$BDLGetDebugLevel$205$Entry#1:
+ goto inline$BDLGetDebugLevel$205$start#1;
+
+ inline$BDLGetDebugLevel$205$start#1:
+ goto inline$BDLGetDebugLevel$205$label_3#1;
+
+ inline$BDLGetDebugLevel$205$label_3#1:
+ havoc inline$BDLGetDebugLevel$205$myNondetVar_0;
+ inline$BDLGetDebugLevel$205$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$205$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$205$label_1#1;
+
+ inline$BDLGetDebugLevel$205$label_1#1:
+ goto inline$BDLGetDebugLevel$205$Return#1;
+
+ inline$BDLGetDebugLevel$205$Return#1:
+ inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$ := inline$BDLGetDebugLevel$205$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPRemove$0$label_47$1#1;
+
+ inline$BDLPnPRemove$0$label_47$1#1:
+ goto inline$BDLPnPRemove$0$anon32_Then#1, inline$BDLPnPRemove$0$anon32_Else#1;
+
+ inline$BDLPnPRemove$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon17#1;
+
+ inline$BDLPnPRemove$0$anon17#1:
+ goto inline$BDLPnPRemove$0$label_50#1;
+
+ inline$BDLPnPRemove$0$label_50#1:
+ goto inline$BDLPnPRemove$0$label_50_true#1, inline$BDLPnPRemove$0$label_50_false#1;
+
+ inline$BDLPnPRemove$0$label_50_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$) == 0;
+ goto inline$BDLPnPRemove$0$label_51#1;
+
+ inline$BDLPnPRemove$0$label_50_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$14$) != 0;
+ goto inline$BDLPnPRemove$0$label_54#1;
+
+ inline$BDLPnPRemove$0$label_54#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_55#1;
+
+ inline$BDLPnPRemove$0$label_55#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_56#1;
+
+ inline$BDLPnPRemove$0$label_56#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_57#1;
+
+ inline$BDLPnPRemove$0$label_57#1:
+ havoc inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$15$;
+ goto inline$BDLPnPRemove$0$label_51#1;
+
+ inline$BDLPnPRemove$0$label_51#1:
+ goto inline$BDLGetDebugLevel$206$Entry#1;
+
+ inline$BDLGetDebugLevel$206$Entry#1:
+ goto inline$BDLGetDebugLevel$206$start#1;
+
+ inline$BDLGetDebugLevel$206$start#1:
+ goto inline$BDLGetDebugLevel$206$label_3#1;
+
+ inline$BDLGetDebugLevel$206$label_3#1:
+ havoc inline$BDLGetDebugLevel$206$myNondetVar_0;
+ inline$BDLGetDebugLevel$206$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$206$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$206$label_1#1;
+
+ inline$BDLGetDebugLevel$206$label_1#1:
+ goto inline$BDLGetDebugLevel$206$Return#1;
+
+ inline$BDLGetDebugLevel$206$Return#1:
+ inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$ := inline$BDLGetDebugLevel$206$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPRemove$0$label_51$1#1;
+
+ inline$BDLPnPRemove$0$label_51$1#1:
+ goto inline$BDLPnPRemove$0$anon33_Then#1, inline$BDLPnPRemove$0$anon33_Else#1;
+
+ inline$BDLPnPRemove$0$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon19#1;
+
+ inline$BDLPnPRemove$0$anon19#1:
+ goto inline$BDLPnPRemove$0$label_60#1;
+
+ inline$BDLPnPRemove$0$label_60#1:
+ goto inline$BDLPnPRemove$0$label_60_true#1, inline$BDLPnPRemove$0$label_60_false#1;
+
+ inline$BDLPnPRemove$0$label_60_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$) == 0;
+ goto inline$BDLPnPRemove$0$label_61#1;
+
+ inline$BDLPnPRemove$0$label_60_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$19$) != 0;
+ goto inline$BDLPnPRemove$0$label_64#1;
+
+ inline$BDLPnPRemove$0$label_64#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_65#1;
+
+ inline$BDLPnPRemove$0$label_65#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_66#1;
+
+ inline$BDLPnPRemove$0$label_66#1:
+ call inline$BDLPnPRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPRemove$0$label_67#1;
+
+ inline$BDLPnPRemove$0$label_67#1:
+ havoc inline$BDLPnPRemove$0$$result.DbgPrint$2516.0$20$;
+ goto inline$BDLPnPRemove$0$label_61#1;
+
+ inline$BDLPnPRemove$0$label_61#1:
+ goto inline$BDLGetDebugLevel$207$Entry#1;
+
+ inline$BDLGetDebugLevel$207$Entry#1:
+ goto inline$BDLGetDebugLevel$207$start#1;
+
+ inline$BDLGetDebugLevel$207$start#1:
+ goto inline$BDLGetDebugLevel$207$label_3#1;
+
+ inline$BDLGetDebugLevel$207$label_3#1:
+ havoc inline$BDLGetDebugLevel$207$myNondetVar_0;
+ inline$BDLGetDebugLevel$207$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$207$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$207$label_1#1;
+
+ inline$BDLGetDebugLevel$207$label_1#1:
+ goto inline$BDLGetDebugLevel$207$Return#1;
+
+ inline$BDLGetDebugLevel$207$Return#1:
+ inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$ := inline$BDLGetDebugLevel$207$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPRemove$0$label_61$1#1;
+
+ inline$BDLPnPRemove$0$label_61$1#1:
+ goto inline$BDLPnPRemove$0$anon34_Then#1, inline$BDLPnPRemove$0$anon34_Else#1;
+
+ inline$BDLPnPRemove$0$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPRemove$0$anon21#1;
+
+ inline$BDLPnPRemove$0$anon21#1:
+ goto inline$BDLPnPRemove$0$label_70#1;
+
+ inline$BDLPnPRemove$0$label_70#1:
+ goto inline$BDLPnPRemove$0$label_70_true#1, inline$BDLPnPRemove$0$label_70_false#1;
+
+ inline$BDLPnPRemove$0$label_70_false#1:
+ assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$, 4) == 0;
+ goto inline$BDLPnPRemove$0$label_71#1;
+
+ inline$BDLPnPRemove$0$label_70_true#1:
+ assume BIT_BAND(inline$BDLPnPRemove$0$$result.BDLGetDebugLevel$2516.0$24$, 4) != 0;
+ goto inline$BDLPnPRemove$0$label_72#1;
+
+ inline$BDLPnPRemove$0$label_72#1:
+ goto inline$BDLPnPRemove$0$label_71#1;
+
+ inline$BDLPnPRemove$0$label_71#1:
+ inline$BDLPnPRemove$0$$result.BDLPnPRemove$2476.0$1$ := inline$BDLPnPRemove$0$$status$5$2484.16$BDLPnPRemove$16;
+ goto inline$BDLPnPRemove$0$label_1#1;
+
+ inline$BDLPnPRemove$0$label_1#1:
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon29_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon28_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon27_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon26_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon25_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$anon24_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPRemove$0$Return#1;
+
+ inline$BDLPnPRemove$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPRemove$961.29$34$ := inline$BDLPnPRemove$0$$result.BDLPnPRemove$2476.0$1$;
+ goto inline$BDLPnP$0$label_119$1#1;
+
+ inline$BDLPnP$0$label_119$1#1:
+ goto inline$BDLPnP$0$anon69_Then#1, inline$BDLPnP$0$anon69_Else#1;
+
+ inline$BDLPnP$0$anon69_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon31#1;
+
+ inline$BDLPnP$0$anon31#1:
+ goto inline$BDLPnP$0$label_152#1;
+
+ inline$BDLPnP$0$label_152#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPRemove$961.29$34$;
+ goto inline$BDLPnP$0$label_153#1;
+
+ inline$BDLPnP$0$label_153#1:
+ inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 0;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon69_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_2#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 1;
+ goto inline$BDLPnP$0$label_116#1;
+
+ inline$BDLPnP$0$label_116#1:
+ goto inline$BDLPnPQueryRemove$0$Entry#1;
+
+ inline$BDLPnPQueryRemove$0$Entry#1:
+ inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPQueryRemove$0$start#1;
+
+ inline$BDLPnPQueryRemove$0$start#1:
+ inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12 := inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12_.1;
+ inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12 := inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12_.1;
+ goto inline$BDLPnPQueryRemove$0$label_3#1;
+
+ inline$BDLPnPQueryRemove$0$label_3#1:
+ goto inline$BDLPnPQueryRemove$0$label_4#1;
+
+ inline$BDLPnPQueryRemove$0$label_4#1:
+ inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 := 0;
+ goto inline$BDLPnPQueryRemove$0$label_5#1;
+
+ inline$BDLPnPQueryRemove$0$label_5#1:
+ goto inline$BDLGetDebugLevel$109$Entry#1;
+
+ inline$BDLGetDebugLevel$109$Entry#1:
+ goto inline$BDLGetDebugLevel$109$start#1;
+
+ inline$BDLGetDebugLevel$109$start#1:
+ goto inline$BDLGetDebugLevel$109$label_3#1;
+
+ inline$BDLGetDebugLevel$109$label_3#1:
+ havoc inline$BDLGetDebugLevel$109$myNondetVar_0;
+ inline$BDLGetDebugLevel$109$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$109$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$109$label_1#1;
+
+ inline$BDLGetDebugLevel$109$label_1#1:
+ goto inline$BDLGetDebugLevel$109$Return#1;
+
+ inline$BDLGetDebugLevel$109$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$ := inline$BDLGetDebugLevel$109$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_5$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_5$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon22_Then#1, inline$BDLPnPQueryRemove$0$anon22_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon1#1;
+
+ inline$BDLPnPQueryRemove$0$anon1#1:
+ goto inline$BDLPnPQueryRemove$0$label_8#1;
+
+ inline$BDLPnPQueryRemove$0$label_8#1:
+ goto inline$BDLPnPQueryRemove$0$label_8_true#1, inline$BDLPnPQueryRemove$0$label_8_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_8_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_9#1;
+
+ inline$BDLPnPQueryRemove$0$label_8_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$2$) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_12#1;
+
+ inline$BDLPnPQueryRemove$0$label_12#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_13#1;
+
+ inline$BDLPnPQueryRemove$0$label_13#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_14#1;
+
+ inline$BDLPnPQueryRemove$0$label_14#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_15#1;
+
+ inline$BDLPnPQueryRemove$0$label_15#1:
+ havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$3$;
+ goto inline$BDLPnPQueryRemove$0$label_9#1;
+
+ inline$BDLPnPQueryRemove$0$label_9#1:
+ goto inline$BDLGetDebugLevel$110$Entry#1;
+
+ inline$BDLGetDebugLevel$110$Entry#1:
+ goto inline$BDLGetDebugLevel$110$start#1;
+
+ inline$BDLGetDebugLevel$110$start#1:
+ goto inline$BDLGetDebugLevel$110$label_3#1;
+
+ inline$BDLGetDebugLevel$110$label_3#1:
+ havoc inline$BDLGetDebugLevel$110$myNondetVar_0;
+ inline$BDLGetDebugLevel$110$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$110$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$110$label_1#1;
+
+ inline$BDLGetDebugLevel$110$label_1#1:
+ goto inline$BDLGetDebugLevel$110$Return#1;
+
+ inline$BDLGetDebugLevel$110$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$ := inline$BDLGetDebugLevel$110$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_9$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_9$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon23_Then#1, inline$BDLPnPQueryRemove$0$anon23_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon3#1;
+
+ inline$BDLPnPQueryRemove$0$anon3#1:
+ goto inline$BDLPnPQueryRemove$0$label_18#1;
+
+ inline$BDLPnPQueryRemove$0$label_18#1:
+ goto inline$BDLPnPQueryRemove$0$label_18_true#1, inline$BDLPnPQueryRemove$0$label_18_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_19#1;
+
+ inline$BDLPnPQueryRemove$0$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$7$) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_22#1;
+
+ inline$BDLPnPQueryRemove$0$label_22#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_23#1;
+
+ inline$BDLPnPQueryRemove$0$label_23#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_24#1;
+
+ inline$BDLPnPQueryRemove$0$label_24#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_25#1;
+
+ inline$BDLPnPQueryRemove$0$label_25#1:
+ havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2263.0$8$;
+ goto inline$BDLPnPQueryRemove$0$label_19#1;
+
+ inline$BDLPnPQueryRemove$0$label_19#1:
+ goto inline$BDLGetDebugLevel$111$Entry#1;
+
+ inline$BDLGetDebugLevel$111$Entry#1:
+ goto inline$BDLGetDebugLevel$111$start#1;
+
+ inline$BDLGetDebugLevel$111$start#1:
+ goto inline$BDLGetDebugLevel$111$label_3#1;
+
+ inline$BDLGetDebugLevel$111$label_3#1:
+ havoc inline$BDLGetDebugLevel$111$myNondetVar_0;
+ inline$BDLGetDebugLevel$111$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$111$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$111$label_1#1;
+
+ inline$BDLGetDebugLevel$111$label_1#1:
+ goto inline$BDLGetDebugLevel$111$Return#1;
+
+ inline$BDLGetDebugLevel$111$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$ := inline$BDLGetDebugLevel$111$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_19$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_19$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon24_Then#1, inline$BDLPnPQueryRemove$0$anon24_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon24_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon5#1;
+
+ inline$BDLPnPQueryRemove$0$anon5#1:
+ goto inline$BDLPnPQueryRemove$0$label_28#1;
+
+ inline$BDLPnPQueryRemove$0$label_28#1:
+ goto inline$BDLPnPQueryRemove$0$label_28_true#1, inline$BDLPnPQueryRemove$0$label_28_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_28_false#1:
+ assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$, 4) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_29#1;
+
+ inline$BDLPnPQueryRemove$0$label_28_true#1:
+ assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2263.0$12$, 4) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_32#1;
+
+ inline$BDLPnPQueryRemove$0$label_32#1:
+ goto inline$BDLPnPQueryRemove$0$label_29#1;
+
+ inline$BDLPnPQueryRemove$0$label_29#1:
+ call inline$BDLPnPQueryRemove$0$$result.IoSetDeviceInterfaceState$2272.29$13$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPQueryRemove$0$$pBDLExtension$1$2256.40$BDLPnPQueryRemove$12), 0);
+ goto inline$BDLPnPQueryRemove$0$anon25_Then#1, inline$BDLPnPQueryRemove$0$anon25_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon25_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon7#1;
+
+ inline$BDLPnPQueryRemove$0$anon7#1:
+ goto inline$BDLPnPQueryRemove$0$label_33#1;
+
+ inline$BDLPnPQueryRemove$0$label_33#1:
+ goto inline$BDLPnPQueryRemove$0$label_33_true#1, inline$BDLPnPQueryRemove$0$label_33_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_33_false#1:
+ havoc inline$BDLPnPQueryRemove$0$myNondetVar_0;
+ assume inline$BDLPnPQueryRemove$0$myNondetVar_0 == 0;
+ goto inline$BDLPnPQueryRemove$0$label_34#1;
+
+ inline$BDLPnPQueryRemove$0$label_34#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Entry#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$Entry#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPQueryRemove$0$$pIrp$3$2258.40$BDLPnPQueryRemove$12;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$start#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$start#1:
+ call inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
+ inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_4#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_4#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_6#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_6#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$Entry#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$Entry#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$start#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$start#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_4#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_4#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_5#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_5#1:
+ goto inline$IoGetCurrentIrpStackLocation$23$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetCurrentIrpStackLocation$23$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$start#1:
+ inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$23$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$23$label_3_true#1, inline$IoGetCurrentIrpStackLocation$23$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$23$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$23$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$23$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$23$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$23$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$23$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$23$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$23$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$23$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$23$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$23$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$23$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$23$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$23$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$23$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$23$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$23$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$23$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$23$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_5$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_5$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$anon1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_8#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_8#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_9#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_9#1:
+ goto inline$IoGetNextIrpStackLocation$3$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$3$Entry#1:
+ inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$1$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetNextIrpStackLocation$3$start#1;
+
+ inline$IoGetNextIrpStackLocation$3$start#1:
+ inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$3$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$3$label_3_true#1, inline$IoGetNextIrpStackLocation$3$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$3$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$3$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_4#1:
+ call inline$IoGetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$3$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_6#1:
+ call inline$IoGetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$3$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$3$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$3$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$3$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$3$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$3$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$3$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$3$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$3$Return#1;
+
+ inline$IoGetNextIrpStackLocation$3$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_9$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_9$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$anon3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$anon3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_12#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_12#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_13#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_13#1:
+ havoc inline$IoCopyCurrentIrpStackLocationToNext$1$$result.memcpy$25110.4$3$;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_16#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_16#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$label_1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$label_1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$anon5_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$anon4_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$1$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_6$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_6$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon16_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_9#1:
+ goto inline$storm_KeInitializeEvent$1$Entry#1;
+
+ inline$storm_KeInitializeEvent$1$Entry#1:
+ inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
+ goto inline$storm_KeInitializeEvent$1$start#1;
+
+ inline$storm_KeInitializeEvent$1$start#1:
+ inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
+ inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12_.1;
+ goto inline$storm_KeInitializeEvent$1$label_3#1;
+
+ inline$storm_KeInitializeEvent$1$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$1$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$1$$State$3$205.13$storm_KeInitializeEvent$12];
+ call contextSwitch();
+ goto inline$storm_KeInitializeEvent$1$label_1#1;
+
+ inline$storm_KeInitializeEvent$1$label_1#1:
+ goto inline$storm_KeInitializeEvent$1$Return#1;
+
+ inline$storm_KeInitializeEvent$1$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_9$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_9$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon17_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_12#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$1$Entry#1;
+
+ inline$storm_IoSetCompletionRoutine$1$Entry#1:
+ inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoSetCompletionRoutine$1$start#1;
+
+ inline$storm_IoSetCompletionRoutine$1$start#1:
+ inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
+ goto inline$storm_IoSetCompletionRoutine$1$label_3#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_3#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_4#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_4#1:
+ call inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$ := storm_nondet();
+ goto inline$storm_IoSetCompletionRoutine$1$label_7#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_7#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_7_true#1, inline$storm_IoSetCompletionRoutine$1$label_7_false#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_7_false#1:
+ assume inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$ == 0;
+ goto inline$storm_IoSetCompletionRoutine$1$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_7_true#1:
+ assume inline$storm_IoSetCompletionRoutine$1$$result.storm_nondet$405.2$1$ != 0;
+ goto inline$storm_IoSetCompletionRoutine$1$label_11#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_11#1:
+ havoc raiseException;
+ goto inline$storm_IoSetCompletionRoutine$1$anon6_Then#1, inline$storm_IoSetCompletionRoutine$1$anon6_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$1$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$1$anon3#1;
+
+ inline$storm_IoSetCompletionRoutine$1$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCompletionRoutine$1$label_12#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_12_true#1, inline$storm_IoSetCompletionRoutine$1$label_12_false#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_12_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoSetCompletionRoutine$1$label_13#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_13#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCompletionRoutine$1$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_12_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoSetCompletionRoutine$1$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_8#1:
+ goto inline$IoGetNextIrpStackLocation$4$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$4$Entry#1:
+ inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$1$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
+ goto inline$IoGetNextIrpStackLocation$4$start#1;
+
+ inline$IoGetNextIrpStackLocation$4$start#1:
+ inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$4$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$4$label_3_true#1, inline$IoGetNextIrpStackLocation$4$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$4$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$4$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_4#1:
+ call inline$IoGetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$4$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_6#1:
+ call inline$IoGetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$4$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$4$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$4$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$4$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$4$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$4$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$4$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$4$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$4$Return#1;
+
+ inline$IoGetNextIrpStackLocation$4$Return#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_8$1#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_8$1#1:
+ goto inline$storm_IoSetCompletionRoutine$1$anon5_Then#1, inline$storm_IoSetCompletionRoutine$1$anon5_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$1$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$1$anon1#1;
+
+ inline$storm_IoSetCompletionRoutine$1$anon1#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_16#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_16#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_17#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_17#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_18#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_18#1:
+ goto inline$storm_IoSetCompletionRoutine$1$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$1$label_1#1:
+ goto inline$storm_IoSetCompletionRoutine$1$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$1$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$1$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$1$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$1$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$1$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_12$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_12$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon18_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_15#1:
+ goto inline$IoGetCurrentIrpStackLocation$24$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoGetCurrentIrpStackLocation$24$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$start#1:
+ inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$24$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$24$label_3_true#1, inline$IoGetCurrentIrpStackLocation$24$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$24$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$24$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$24$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$24$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$24$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$24$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$24$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$24$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$24$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$24$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$24$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$24$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$24$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$24$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$24$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$24$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$24$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$24$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$24$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_15$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_15$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon19_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon7#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon7#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_18#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_18#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$1$label_18_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_18_false#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_19#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_19#1:
+ goto inline$storm_IoCallDriver$2$Entry#1;
+
+ inline$storm_IoCallDriver$2$Entry#1:
+ inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoCallDriver$2$start#1;
+
+ inline$storm_IoCallDriver$2$start#1:
+ inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$2$label_3#1;
+
+ inline$storm_IoCallDriver$2$label_3#1:
+ goto inline$storm_IoCallDriver$2$label_4#1;
+
+ inline$storm_IoCallDriver$2$label_4#1:
+ goto inline$storm_IoCallDriver$2$label_5#1;
+
+ inline$storm_IoCallDriver$2$label_5#1:
+ goto inline$storm_IoCallDriver$2$label_6#1;
+
+ inline$storm_IoCallDriver$2$label_6#1:
+ call inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$2$label_9#1;
+
+ inline$storm_IoCallDriver$2$label_9#1:
+ goto inline$storm_IoCallDriver$2$label_9_true#1, inline$storm_IoCallDriver$2$label_9_false#1;
+
+ inline$storm_IoCallDriver$2$label_9_false#1:
+ assume inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$2$label_10#1;
+
+ inline$storm_IoCallDriver$2$label_9_true#1:
+ assume inline$storm_IoCallDriver$2$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$2$label_13#1;
+
+ inline$storm_IoCallDriver$2$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$2$anon12_Then#1, inline$storm_IoCallDriver$2$anon12_Else#1;
+
+ inline$storm_IoCallDriver$2$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$2$anon3#1;
+
+ inline$storm_IoCallDriver$2$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$2$label_14#1;
+
+ inline$storm_IoCallDriver$2$label_14#1:
+ goto inline$storm_IoCallDriver$2$label_14_true#1, inline$storm_IoCallDriver$2$label_14_false#1;
+
+ inline$storm_IoCallDriver$2$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$2$label_15#1;
+
+ inline$storm_IoCallDriver$2$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$2$label_1#1;
+
+ inline$storm_IoCallDriver$2$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$2$label_10#1;
+
+ inline$storm_IoCallDriver$2$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$3$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$3$Entry#1:
+ inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$3$start#1;
+
+ inline$IoSetNextIrpStackLocation$3$start#1:
+ inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$3$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$3$label_3_true#1, inline$IoSetNextIrpStackLocation$3$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$3$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$3$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_4#1:
+ call inline$IoSetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$3$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_7#1:
+ call inline$IoSetNextIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$3$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$3$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$3$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$3$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_5#1:
+ inline$IoSetNextIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$3$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$3$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$3$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$3$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$3$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$3$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$3$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$3$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$3$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$3$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$3$Return#1;
+
+ inline$IoSetNextIrpStackLocation$3$Return#1:
+ goto inline$storm_IoCallDriver$2$label_10$1#1;
+
+ inline$storm_IoCallDriver$2$label_10$1#1:
+ goto inline$storm_IoCallDriver$2$anon11_Then#1, inline$storm_IoCallDriver$2$anon11_Else#1;
+
+ inline$storm_IoCallDriver$2$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$2$anon1#1;
+
+ inline$storm_IoCallDriver$2$anon1#1:
+ goto inline$storm_IoCallDriver$2$label_18#1;
+
+ inline$storm_IoCallDriver$2$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$25$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$25$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$start#1:
+ inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$25$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$25$label_3_true#1, inline$IoGetCurrentIrpStackLocation$25$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$25$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$25$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$25$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$25$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$25$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$25$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$25$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$25$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$25$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$25$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$25$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$25$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$25$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$25$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$25$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$25$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$25$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$25$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$25$Return#1:
+ goto inline$storm_IoCallDriver$2$label_18$1#1;
+
+ inline$storm_IoCallDriver$2$label_18$1#1:
+ goto inline$storm_IoCallDriver$2$anon13_Then#1, inline$storm_IoCallDriver$2$anon13_Else#1;
+
+ inline$storm_IoCallDriver$2$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$2$anon6#1;
+
+ inline$storm_IoCallDriver$2$anon6#1:
+ goto inline$storm_IoCallDriver$2$label_21#1;
+
+ inline$storm_IoCallDriver$2$label_21#1:
+ goto inline$storm_IoCallDriver$2$label_22#1;
+
+ inline$storm_IoCallDriver$2$label_22#1:
+ goto inline$storm_IoCallDriver$2$label_23#1;
+
+ inline$storm_IoCallDriver$2$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$2$label_24#1;
+
+ inline$storm_IoCallDriver$2$label_24#1:
+ call inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$2$label_27#1;
+
+ inline$storm_IoCallDriver$2$label_27#1:
+ goto inline$storm_IoCallDriver$2$label_27_case_0#1, inline$storm_IoCallDriver$2$label_27_case_1#1, inline$storm_IoCallDriver$2$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$2$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$2$label_30#1;
+
+ inline$storm_IoCallDriver$2$label_30#1:
+ inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$2$label_31#1;
+
+ inline$storm_IoCallDriver$2$label_31#1:
+ goto inline$storm_IoCallDriver$2$label_32#1;
+
+ inline$storm_IoCallDriver$2$label_32#1:
+ goto inline$storm_IoCallDriver$2$label_33#1;
+
+ inline$storm_IoCallDriver$2$label_33#1:
+ goto inline$CallCompletionRoutine$4$Entry#1;
+
+ inline$CallCompletionRoutine$4$Entry#1:
+ inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$4$start#1;
+
+ inline$CallCompletionRoutine$4$start#1:
+ inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$4$label_3#1;
+
+ inline$CallCompletionRoutine$4$label_3#1:
+ goto inline$CallCompletionRoutine$4$label_4#1;
+
+ inline$CallCompletionRoutine$4$label_4#1:
+ goto inline$CallCompletionRoutine$4$label_5#1;
+
+ inline$CallCompletionRoutine$4$label_5#1:
+ goto inline$CallCompletionRoutine$4$label_6#1;
+
+ inline$CallCompletionRoutine$4$label_6#1:
+ goto inline$CallCompletionRoutine$4$label_7#1;
+
+ inline$CallCompletionRoutine$4$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$26$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$26$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$start#1:
+ inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$26$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$26$label_3_true#1, inline$IoGetCurrentIrpStackLocation$26$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$26$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$26$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$26$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$26$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$26$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$26$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$26$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$26$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$26$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$26$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$26$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$26$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$26$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$26$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$26$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$26$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$26$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$26$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$26$Return#1:
+ goto inline$CallCompletionRoutine$4$label_7$1#1;
+
+ inline$CallCompletionRoutine$4$label_7$1#1:
+ goto inline$CallCompletionRoutine$4$anon10_Then#1, inline$CallCompletionRoutine$4$anon10_Else#1;
+
+ inline$CallCompletionRoutine$4$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$4$anon1#1;
+
+ inline$CallCompletionRoutine$4$anon1#1:
+ goto inline$CallCompletionRoutine$4$label_10#1;
+
+ inline$CallCompletionRoutine$4$label_10#1:
+ goto inline$CallCompletionRoutine$4$label_11#1;
+
+ inline$CallCompletionRoutine$4$label_11#1:
+ havoc inline$CallCompletionRoutine$4$myNondetVar_0;
+ inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$myNondetVar_0;
+ goto inline$CallCompletionRoutine$4$label_12#1;
+
+ inline$CallCompletionRoutine$4$label_12#1:
+ havoc inline$CallCompletionRoutine$4$myNondetVar_0;
+ inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$myNondetVar_0;
+ goto inline$CallCompletionRoutine$4$label_13#1;
+
+ inline$CallCompletionRoutine$4$label_13#1:
+ havoc inline$CallCompletionRoutine$4$myNondetVar_0;
+ goto inline$CallCompletionRoutine$4$label_14#1;
+
+ inline$CallCompletionRoutine$4$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$27$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$27$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$start#1:
+ inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$27$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$27$label_3_true#1, inline$IoGetCurrentIrpStackLocation$27$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$27$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$27$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$27$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$27$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$27$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$27$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$27$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$27$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$27$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$27$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$27$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$27$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$27$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$27$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$27$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$27$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$27$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$27$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$27$Return#1:
+ goto inline$CallCompletionRoutine$4$label_14$1#1;
+
+ inline$CallCompletionRoutine$4$label_14$1#1:
+ goto inline$CallCompletionRoutine$4$anon11_Then#1, inline$CallCompletionRoutine$4$anon11_Else#1;
+
+ inline$CallCompletionRoutine$4$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$4$anon3#1;
+
+ inline$CallCompletionRoutine$4$anon3#1:
+ goto inline$CallCompletionRoutine$4$label_17#1;
+
+ inline$CallCompletionRoutine$4$label_17#1:
+ goto inline$CallCompletionRoutine$4$label_18#1;
+
+ inline$CallCompletionRoutine$4$label_18#1:
+ goto inline$CallCompletionRoutine$4$label_18_true#1, inline$CallCompletionRoutine$4$label_18_false#1;
+
+ inline$CallCompletionRoutine$4$label_18_false#1:
+ assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$4$label_1#1;
+
+ inline$CallCompletionRoutine$4$label_18_true#1:
+ assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$4$label_19#1;
+
+ inline$CallCompletionRoutine$4$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$4$label_20#1;
+
+ inline$CallCompletionRoutine$4$label_20#1:
+ goto inline$CallCompletionRoutine$4$label_20_icall_1#1, inline$CallCompletionRoutine$4$label_20_icall_2#1, inline$CallCompletionRoutine$4$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$4$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$4$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$4$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$4$Entry#1:
+ inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$4$start#1;
+
+ inline$BDLSystemPowerIoCompletion$4$start#1:
+ call inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$4$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_4#1:
+ inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_6#1:
+ inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$4$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$4$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$29$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$29$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$start#1:
+ inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$29$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$29$label_3_true#1, inline$IoGetCurrentIrpStackLocation$29$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$29$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$29$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$29$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$29$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$29$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$29$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$29$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$29$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$29$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$29$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$29$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$29$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$29$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$29$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$29$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$29$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$29$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$29$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon36_Then#1, inline$BDLSystemPowerIoCompletion$4$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_15#1:
+ goto inline$BDLGetDebugLevel$121$Entry#1;
+
+ inline$BDLGetDebugLevel$121$Entry#1:
+ goto inline$BDLGetDebugLevel$121$start#1;
+
+ inline$BDLGetDebugLevel$121$start#1:
+ goto inline$BDLGetDebugLevel$121$label_3#1;
+
+ inline$BDLGetDebugLevel$121$label_3#1:
+ havoc inline$BDLGetDebugLevel$121$myNondetVar_0;
+ inline$BDLGetDebugLevel$121$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$121$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$121$label_1#1;
+
+ inline$BDLGetDebugLevel$121$label_1#1:
+ goto inline$BDLGetDebugLevel$121$Return#1;
+
+ inline$BDLGetDebugLevel$121$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$121$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon37_Then#1, inline$BDLSystemPowerIoCompletion$4$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_18_true#1, inline$BDLSystemPowerIoCompletion$4$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_19#1:
+ goto inline$BDLGetDebugLevel$122$Entry#1;
+
+ inline$BDLGetDebugLevel$122$Entry#1:
+ goto inline$BDLGetDebugLevel$122$start#1;
+
+ inline$BDLGetDebugLevel$122$start#1:
+ goto inline$BDLGetDebugLevel$122$label_3#1;
+
+ inline$BDLGetDebugLevel$122$label_3#1:
+ havoc inline$BDLGetDebugLevel$122$myNondetVar_0;
+ inline$BDLGetDebugLevel$122$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$122$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$122$label_1#1;
+
+ inline$BDLGetDebugLevel$122$label_1#1:
+ goto inline$BDLGetDebugLevel$122$Return#1;
+
+ inline$BDLGetDebugLevel$122$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$122$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon38_Then#1, inline$BDLSystemPowerIoCompletion$4$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_28_true#1, inline$BDLSystemPowerIoCompletion$4$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_29#1:
+ goto inline$BDLGetDebugLevel$123$Entry#1;
+
+ inline$BDLGetDebugLevel$123$Entry#1:
+ goto inline$BDLGetDebugLevel$123$start#1;
+
+ inline$BDLGetDebugLevel$123$start#1:
+ goto inline$BDLGetDebugLevel$123$label_3#1;
+
+ inline$BDLGetDebugLevel$123$label_3#1:
+ havoc inline$BDLGetDebugLevel$123$myNondetVar_0;
+ inline$BDLGetDebugLevel$123$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$123$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$123$label_1#1;
+
+ inline$BDLGetDebugLevel$123$label_1#1:
+ goto inline$BDLGetDebugLevel$123$Return#1;
+
+ inline$BDLGetDebugLevel$123$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$123$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon39_Then#1, inline$BDLSystemPowerIoCompletion$4$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_38_true#1, inline$BDLSystemPowerIoCompletion$4$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_39_true#1, inline$BDLSystemPowerIoCompletion$4$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$4$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$4$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$4$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$4$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$4$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_106_true#1, inline$BDLSystemPowerIoCompletion$4$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$4$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$4$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$4$myNondetVar_0, inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$4$anon50_Then#1, inline$BDLSystemPowerIoCompletion$4$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_112#1:
+ inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_113_true#1, inline$BDLSystemPowerIoCompletion$4$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$4$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_117#1:
+ goto inline$BDLGetDebugLevel$130$Entry#1;
+
+ inline$BDLGetDebugLevel$130$Entry#1:
+ goto inline$BDLGetDebugLevel$130$start#1;
+
+ inline$BDLGetDebugLevel$130$start#1:
+ goto inline$BDLGetDebugLevel$130$label_3#1;
+
+ inline$BDLGetDebugLevel$130$label_3#1:
+ havoc inline$BDLGetDebugLevel$130$myNondetVar_0;
+ inline$BDLGetDebugLevel$130$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$130$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$130$label_1#1;
+
+ inline$BDLGetDebugLevel$130$label_1#1:
+ goto inline$BDLGetDebugLevel$130$Return#1;
+
+ inline$BDLGetDebugLevel$130$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$130$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon51_Then#1, inline$BDLSystemPowerIoCompletion$4$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_120_true#1, inline$BDLSystemPowerIoCompletion$4$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_121#1:
+ goto inline$BDLGetDebugLevel$131$Entry#1;
+
+ inline$BDLGetDebugLevel$131$Entry#1:
+ goto inline$BDLGetDebugLevel$131$start#1;
+
+ inline$BDLGetDebugLevel$131$start#1:
+ goto inline$BDLGetDebugLevel$131$label_3#1;
+
+ inline$BDLGetDebugLevel$131$label_3#1:
+ havoc inline$BDLGetDebugLevel$131$myNondetVar_0;
+ inline$BDLGetDebugLevel$131$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$131$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$131$label_1#1;
+
+ inline$BDLGetDebugLevel$131$label_1#1:
+ goto inline$BDLGetDebugLevel$131$Return#1;
+
+ inline$BDLGetDebugLevel$131$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$131$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon52_Then#1, inline$BDLSystemPowerIoCompletion$4$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_130_true#1, inline$BDLSystemPowerIoCompletion$4$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_131#1:
+ goto inline$BDLGetDebugLevel$132$Entry#1;
+
+ inline$BDLGetDebugLevel$132$Entry#1:
+ goto inline$BDLGetDebugLevel$132$start#1;
+
+ inline$BDLGetDebugLevel$132$start#1:
+ goto inline$BDLGetDebugLevel$132$label_3#1;
+
+ inline$BDLGetDebugLevel$132$label_3#1:
+ havoc inline$BDLGetDebugLevel$132$myNondetVar_0;
+ inline$BDLGetDebugLevel$132$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$132$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$132$label_1#1;
+
+ inline$BDLGetDebugLevel$132$label_1#1:
+ goto inline$BDLGetDebugLevel$132$Return#1;
+
+ inline$BDLGetDebugLevel$132$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$132$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon53_Then#1, inline$BDLSystemPowerIoCompletion$4$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_140_true#1, inline$BDLSystemPowerIoCompletion$4$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$4$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_115#1:
+ inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$4$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$4$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$4$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_43#1:
+ goto inline$BDLGetDebugLevel$124$Entry#1;
+
+ inline$BDLGetDebugLevel$124$Entry#1:
+ goto inline$BDLGetDebugLevel$124$start#1;
+
+ inline$BDLGetDebugLevel$124$start#1:
+ goto inline$BDLGetDebugLevel$124$label_3#1;
+
+ inline$BDLGetDebugLevel$124$label_3#1:
+ havoc inline$BDLGetDebugLevel$124$myNondetVar_0;
+ inline$BDLGetDebugLevel$124$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$124$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$124$label_1#1;
+
+ inline$BDLGetDebugLevel$124$label_1#1:
+ goto inline$BDLGetDebugLevel$124$Return#1;
+
+ inline$BDLGetDebugLevel$124$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$124$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon40_Then#1, inline$BDLSystemPowerIoCompletion$4$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_46_true#1, inline$BDLSystemPowerIoCompletion$4$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_47#1:
+ goto inline$BDLGetDebugLevel$125$Entry#1;
+
+ inline$BDLGetDebugLevel$125$Entry#1:
+ goto inline$BDLGetDebugLevel$125$start#1;
+
+ inline$BDLGetDebugLevel$125$start#1:
+ goto inline$BDLGetDebugLevel$125$label_3#1;
+
+ inline$BDLGetDebugLevel$125$label_3#1:
+ havoc inline$BDLGetDebugLevel$125$myNondetVar_0;
+ inline$BDLGetDebugLevel$125$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$125$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$125$label_1#1;
+
+ inline$BDLGetDebugLevel$125$label_1#1:
+ goto inline$BDLGetDebugLevel$125$Return#1;
+
+ inline$BDLGetDebugLevel$125$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$125$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon41_Then#1, inline$BDLSystemPowerIoCompletion$4$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_56_true#1, inline$BDLSystemPowerIoCompletion$4$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_57#1:
+ goto inline$BDLGetDebugLevel$126$Entry#1;
+
+ inline$BDLGetDebugLevel$126$Entry#1:
+ goto inline$BDLGetDebugLevel$126$start#1;
+
+ inline$BDLGetDebugLevel$126$start#1:
+ goto inline$BDLGetDebugLevel$126$label_3#1;
+
+ inline$BDLGetDebugLevel$126$label_3#1:
+ havoc inline$BDLGetDebugLevel$126$myNondetVar_0;
+ inline$BDLGetDebugLevel$126$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$126$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$126$label_1#1;
+
+ inline$BDLGetDebugLevel$126$label_1#1:
+ goto inline$BDLGetDebugLevel$126$Return#1;
+
+ inline$BDLGetDebugLevel$126$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$126$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon42_Then#1, inline$BDLSystemPowerIoCompletion$4$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_66_true#1, inline$BDLSystemPowerIoCompletion$4$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$4$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$4$anon43_Then#1, inline$BDLSystemPowerIoCompletion$4$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$4$anon44_Then#1, inline$BDLSystemPowerIoCompletion$4$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_74#1:
+ goto inline$storm_IoCompleteRequest$10$Entry#1;
+
+ inline$storm_IoCompleteRequest$10$Entry#1:
+ inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$4$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$10$start#1;
+
+ inline$storm_IoCompleteRequest$10$start#1:
+ inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$10$label_3#1;
+
+ inline$storm_IoCompleteRequest$10$label_3#1:
+ call inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$10$label_6#1;
+
+ inline$storm_IoCompleteRequest$10$label_6#1:
+ goto inline$storm_IoCompleteRequest$10$label_6_true#1, inline$storm_IoCompleteRequest$10$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$10$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$10$label_7#1;
+
+ inline$storm_IoCompleteRequest$10$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$10$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$10$label_8#1;
+
+ inline$storm_IoCompleteRequest$10$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$10$anon3_Then#1, inline$storm_IoCompleteRequest$10$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$10$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$10$anon1#1;
+
+ inline$storm_IoCompleteRequest$10$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$10$label_9#1;
+
+ inline$storm_IoCompleteRequest$10$label_9#1:
+ goto inline$storm_IoCompleteRequest$10$label_9_true#1, inline$storm_IoCompleteRequest$10$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$10$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$10$label_10#1;
+
+ inline$storm_IoCompleteRequest$10$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$10$label_1#1;
+
+ inline$storm_IoCompleteRequest$10$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$10$label_7#1;
+
+ inline$storm_IoCompleteRequest$10$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$10$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$10$label_1#1;
+
+ inline$storm_IoCompleteRequest$10$label_1#1:
+ goto inline$storm_IoCompleteRequest$10$Return#1;
+
+ inline$storm_IoCompleteRequest$10$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$10$Return#1;
+
+ inline$storm_IoCompleteRequest$10$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon45_Then#1, inline$BDLSystemPowerIoCompletion$4$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$4$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$4$anon46_Then#1, inline$BDLSystemPowerIoCompletion$4$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_80#1:
+ goto inline$BDLGetDebugLevel$127$Entry#1;
+
+ inline$BDLGetDebugLevel$127$Entry#1:
+ goto inline$BDLGetDebugLevel$127$start#1;
+
+ inline$BDLGetDebugLevel$127$start#1:
+ goto inline$BDLGetDebugLevel$127$label_3#1;
+
+ inline$BDLGetDebugLevel$127$label_3#1:
+ havoc inline$BDLGetDebugLevel$127$myNondetVar_0;
+ inline$BDLGetDebugLevel$127$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$127$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$127$label_1#1;
+
+ inline$BDLGetDebugLevel$127$label_1#1:
+ goto inline$BDLGetDebugLevel$127$Return#1;
+
+ inline$BDLGetDebugLevel$127$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$127$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon47_Then#1, inline$BDLSystemPowerIoCompletion$4$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_83_true#1, inline$BDLSystemPowerIoCompletion$4$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_84#1:
+ goto inline$BDLGetDebugLevel$128$Entry#1;
+
+ inline$BDLGetDebugLevel$128$Entry#1:
+ goto inline$BDLGetDebugLevel$128$start#1;
+
+ inline$BDLGetDebugLevel$128$start#1:
+ goto inline$BDLGetDebugLevel$128$label_3#1;
+
+ inline$BDLGetDebugLevel$128$label_3#1:
+ havoc inline$BDLGetDebugLevel$128$myNondetVar_0;
+ inline$BDLGetDebugLevel$128$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$128$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$128$label_1#1;
+
+ inline$BDLGetDebugLevel$128$label_1#1:
+ goto inline$BDLGetDebugLevel$128$Return#1;
+
+ inline$BDLGetDebugLevel$128$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$128$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon48_Then#1, inline$BDLSystemPowerIoCompletion$4$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_93_true#1, inline$BDLSystemPowerIoCompletion$4$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$4$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$4$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_94#1:
+ goto inline$BDLGetDebugLevel$129$Entry#1;
+
+ inline$BDLGetDebugLevel$129$Entry#1:
+ goto inline$BDLGetDebugLevel$129$start#1;
+
+ inline$BDLGetDebugLevel$129$start#1:
+ goto inline$BDLGetDebugLevel$129$label_3#1;
+
+ inline$BDLGetDebugLevel$129$label_3#1:
+ havoc inline$BDLGetDebugLevel$129$myNondetVar_0;
+ inline$BDLGetDebugLevel$129$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$129$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$129$label_1#1;
+
+ inline$BDLGetDebugLevel$129$label_1#1:
+ goto inline$BDLGetDebugLevel$129$Return#1;
+
+ inline$BDLGetDebugLevel$129$Return#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$129$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$4$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$4$anon49_Then#1, inline$BDLSystemPowerIoCompletion$4$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_103_true#1, inline$BDLSystemPowerIoCompletion$4$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$4$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$4$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$4$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_104#1:
+ inline$BDLSystemPowerIoCompletion$4$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$4$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$4$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$4$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$4$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$4$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$4$Return#1:
+ inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$4$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$4$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$4$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$4$anon14_Then#1, inline$CallCompletionRoutine$4$anon14_Else#1;
+
+ inline$CallCompletionRoutine$4$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$4$anon9#1;
+
+ inline$CallCompletionRoutine$4$anon9#1:
+ goto inline$CallCompletionRoutine$4$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$4$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$4$Return#1;
+
+ inline$CallCompletionRoutine$4$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$4$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$4$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$4$Entry#1:
+ inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$4$start#1;
+
+ inline$BDLDevicePowerIoCompletion$4$start#1:
+ call inline$BDLDevicePowerIoCompletion$4$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$4$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_4#1:
+ inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_6#1:
+ inline$BDLDevicePowerIoCompletion$4$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$4$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$4$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$28$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$28$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$start#1:
+ inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$28$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$28$label_3_true#1, inline$IoGetCurrentIrpStackLocation$28$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$28$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$28$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$28$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$28$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$28$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$28$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$28$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$28$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$28$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$28$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$28$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$28$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$28$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$28$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$28$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$28$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$28$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$28$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$28$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$28$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$28$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon30_Then#1, inline$BDLDevicePowerIoCompletion$4$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_13#1:
+ inline$BDLDevicePowerIoCompletion$4$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_17#1:
+ goto inline$BDLGetDebugLevel$112$Entry#1;
+
+ inline$BDLGetDebugLevel$112$Entry#1:
+ goto inline$BDLGetDebugLevel$112$start#1;
+
+ inline$BDLGetDebugLevel$112$start#1:
+ goto inline$BDLGetDebugLevel$112$label_3#1;
+
+ inline$BDLGetDebugLevel$112$label_3#1:
+ havoc inline$BDLGetDebugLevel$112$myNondetVar_0;
+ inline$BDLGetDebugLevel$112$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$112$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$112$label_1#1;
+
+ inline$BDLGetDebugLevel$112$label_1#1:
+ goto inline$BDLGetDebugLevel$112$Return#1;
+
+ inline$BDLGetDebugLevel$112$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$112$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon31_Then#1, inline$BDLDevicePowerIoCompletion$4$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_20_true#1, inline$BDLDevicePowerIoCompletion$4$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_21#1:
+ goto inline$BDLGetDebugLevel$113$Entry#1;
+
+ inline$BDLGetDebugLevel$113$Entry#1:
+ goto inline$BDLGetDebugLevel$113$start#1;
+
+ inline$BDLGetDebugLevel$113$start#1:
+ goto inline$BDLGetDebugLevel$113$label_3#1;
+
+ inline$BDLGetDebugLevel$113$label_3#1:
+ havoc inline$BDLGetDebugLevel$113$myNondetVar_0;
+ inline$BDLGetDebugLevel$113$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$113$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$113$label_1#1;
+
+ inline$BDLGetDebugLevel$113$label_1#1:
+ goto inline$BDLGetDebugLevel$113$Return#1;
+
+ inline$BDLGetDebugLevel$113$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$113$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon32_Then#1, inline$BDLDevicePowerIoCompletion$4$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_30_true#1, inline$BDLDevicePowerIoCompletion$4$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_31#1:
+ goto inline$BDLGetDebugLevel$114$Entry#1;
+
+ inline$BDLGetDebugLevel$114$Entry#1:
+ goto inline$BDLGetDebugLevel$114$start#1;
+
+ inline$BDLGetDebugLevel$114$start#1:
+ goto inline$BDLGetDebugLevel$114$label_3#1;
+
+ inline$BDLGetDebugLevel$114$label_3#1:
+ havoc inline$BDLGetDebugLevel$114$myNondetVar_0;
+ inline$BDLGetDebugLevel$114$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$114$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$114$label_1#1;
+
+ inline$BDLGetDebugLevel$114$label_1#1:
+ goto inline$BDLGetDebugLevel$114$Return#1;
+
+ inline$BDLGetDebugLevel$114$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$114$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon33_Then#1, inline$BDLDevicePowerIoCompletion$4$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_40_true#1, inline$BDLDevicePowerIoCompletion$4$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_41_true#1, inline$BDLDevicePowerIoCompletion$4$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$4$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$4$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_44_true#1, inline$BDLDevicePowerIoCompletion$4$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_45_true#1, inline$BDLDevicePowerIoCompletion$4$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$4$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$4$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$4$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_54#1:
+ inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$4$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_55_true#1, inline$BDLDevicePowerIoCompletion$4$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$4$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$4$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$4$anon34_Then#1, inline$BDLDevicePowerIoCompletion$4$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_59#1:
+ goto inline$BDLGetDebugLevel$115$Entry#1;
+
+ inline$BDLGetDebugLevel$115$Entry#1:
+ goto inline$BDLGetDebugLevel$115$start#1;
+
+ inline$BDLGetDebugLevel$115$start#1:
+ goto inline$BDLGetDebugLevel$115$label_3#1;
+
+ inline$BDLGetDebugLevel$115$label_3#1:
+ havoc inline$BDLGetDebugLevel$115$myNondetVar_0;
+ inline$BDLGetDebugLevel$115$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$115$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$115$label_1#1;
+
+ inline$BDLGetDebugLevel$115$label_1#1:
+ goto inline$BDLGetDebugLevel$115$Return#1;
+
+ inline$BDLGetDebugLevel$115$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$115$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon35_Then#1, inline$BDLDevicePowerIoCompletion$4$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_62_true#1, inline$BDLDevicePowerIoCompletion$4$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_63#1:
+ goto inline$BDLGetDebugLevel$116$Entry#1;
+
+ inline$BDLGetDebugLevel$116$Entry#1:
+ goto inline$BDLGetDebugLevel$116$start#1;
+
+ inline$BDLGetDebugLevel$116$start#1:
+ goto inline$BDLGetDebugLevel$116$label_3#1;
+
+ inline$BDLGetDebugLevel$116$label_3#1:
+ havoc inline$BDLGetDebugLevel$116$myNondetVar_0;
+ inline$BDLGetDebugLevel$116$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$116$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$116$label_1#1;
+
+ inline$BDLGetDebugLevel$116$label_1#1:
+ goto inline$BDLGetDebugLevel$116$Return#1;
+
+ inline$BDLGetDebugLevel$116$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$116$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon36_Then#1, inline$BDLDevicePowerIoCompletion$4$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_72_true#1, inline$BDLDevicePowerIoCompletion$4$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_73#1:
+ goto inline$BDLGetDebugLevel$117$Entry#1;
+
+ inline$BDLGetDebugLevel$117$Entry#1:
+ goto inline$BDLGetDebugLevel$117$start#1;
+
+ inline$BDLGetDebugLevel$117$start#1:
+ goto inline$BDLGetDebugLevel$117$label_3#1;
+
+ inline$BDLGetDebugLevel$117$label_3#1:
+ havoc inline$BDLGetDebugLevel$117$myNondetVar_0;
+ inline$BDLGetDebugLevel$117$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$117$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$117$label_1#1;
+
+ inline$BDLGetDebugLevel$117$label_1#1:
+ goto inline$BDLGetDebugLevel$117$Return#1;
+
+ inline$BDLGetDebugLevel$117$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$117$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon37_Then#1, inline$BDLDevicePowerIoCompletion$4$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_82_true#1, inline$BDLDevicePowerIoCompletion$4$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$4$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$4$anon38_Then#1, inline$BDLDevicePowerIoCompletion$4$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$4$anon39_Then#1, inline$BDLDevicePowerIoCompletion$4$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_92#1:
+ goto inline$storm_IoCompleteRequest$9$Entry#1;
+
+ inline$storm_IoCompleteRequest$9$Entry#1:
+ inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$4$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$9$start#1;
+
+ inline$storm_IoCompleteRequest$9$start#1:
+ inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$9$label_3#1;
+
+ inline$storm_IoCompleteRequest$9$label_3#1:
+ call inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$9$label_6#1;
+
+ inline$storm_IoCompleteRequest$9$label_6#1:
+ goto inline$storm_IoCompleteRequest$9$label_6_true#1, inline$storm_IoCompleteRequest$9$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$9$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$9$label_7#1;
+
+ inline$storm_IoCompleteRequest$9$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$9$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$9$label_8#1;
+
+ inline$storm_IoCompleteRequest$9$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$9$anon3_Then#1, inline$storm_IoCompleteRequest$9$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$9$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$9$anon1#1;
+
+ inline$storm_IoCompleteRequest$9$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$9$label_9#1;
+
+ inline$storm_IoCompleteRequest$9$label_9#1:
+ goto inline$storm_IoCompleteRequest$9$label_9_true#1, inline$storm_IoCompleteRequest$9$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$9$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$9$label_10#1;
+
+ inline$storm_IoCompleteRequest$9$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$9$label_1#1;
+
+ inline$storm_IoCompleteRequest$9$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$9$label_7#1;
+
+ inline$storm_IoCompleteRequest$9$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$9$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$9$label_1#1;
+
+ inline$storm_IoCompleteRequest$9$label_1#1:
+ goto inline$storm_IoCompleteRequest$9$Return#1;
+
+ inline$storm_IoCompleteRequest$9$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$9$Return#1;
+
+ inline$storm_IoCompleteRequest$9$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon40_Then#1, inline$BDLDevicePowerIoCompletion$4$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$4$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$4$anon41_Then#1, inline$BDLDevicePowerIoCompletion$4$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_98#1:
+ goto inline$BDLGetDebugLevel$118$Entry#1;
+
+ inline$BDLGetDebugLevel$118$Entry#1:
+ goto inline$BDLGetDebugLevel$118$start#1;
+
+ inline$BDLGetDebugLevel$118$start#1:
+ goto inline$BDLGetDebugLevel$118$label_3#1;
+
+ inline$BDLGetDebugLevel$118$label_3#1:
+ havoc inline$BDLGetDebugLevel$118$myNondetVar_0;
+ inline$BDLGetDebugLevel$118$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$118$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$118$label_1#1;
+
+ inline$BDLGetDebugLevel$118$label_1#1:
+ goto inline$BDLGetDebugLevel$118$Return#1;
+
+ inline$BDLGetDebugLevel$118$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$118$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon42_Then#1, inline$BDLDevicePowerIoCompletion$4$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_101_true#1, inline$BDLDevicePowerIoCompletion$4$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_102#1:
+ goto inline$BDLGetDebugLevel$119$Entry#1;
+
+ inline$BDLGetDebugLevel$119$Entry#1:
+ goto inline$BDLGetDebugLevel$119$start#1;
+
+ inline$BDLGetDebugLevel$119$start#1:
+ goto inline$BDLGetDebugLevel$119$label_3#1;
+
+ inline$BDLGetDebugLevel$119$label_3#1:
+ havoc inline$BDLGetDebugLevel$119$myNondetVar_0;
+ inline$BDLGetDebugLevel$119$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$119$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$119$label_1#1;
+
+ inline$BDLGetDebugLevel$119$label_1#1:
+ goto inline$BDLGetDebugLevel$119$Return#1;
+
+ inline$BDLGetDebugLevel$119$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$119$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon43_Then#1, inline$BDLDevicePowerIoCompletion$4$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_111_true#1, inline$BDLDevicePowerIoCompletion$4$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$4$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$4$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_112#1:
+ goto inline$BDLGetDebugLevel$120$Entry#1;
+
+ inline$BDLGetDebugLevel$120$Entry#1:
+ goto inline$BDLGetDebugLevel$120$start#1;
+
+ inline$BDLGetDebugLevel$120$start#1:
+ goto inline$BDLGetDebugLevel$120$label_3#1;
+
+ inline$BDLGetDebugLevel$120$label_3#1:
+ havoc inline$BDLGetDebugLevel$120$myNondetVar_0;
+ inline$BDLGetDebugLevel$120$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$120$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$120$label_1#1;
+
+ inline$BDLGetDebugLevel$120$label_1#1:
+ goto inline$BDLGetDebugLevel$120$Return#1;
+
+ inline$BDLGetDebugLevel$120$Return#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$120$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$4$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$4$anon44_Then#1, inline$BDLDevicePowerIoCompletion$4$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_121_true#1, inline$BDLDevicePowerIoCompletion$4$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$4$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$4$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$4$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_122#1:
+ inline$BDLDevicePowerIoCompletion$4$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$4$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$4$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$4$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$4$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$4$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$4$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$4$Return#1:
+ inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$4$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$4$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$4$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$4$anon13_Then#1, inline$CallCompletionRoutine$4$anon13_Else#1;
+
+ inline$CallCompletionRoutine$4$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$4$anon7#1;
+
+ inline$CallCompletionRoutine$4$anon7#1:
+ goto inline$CallCompletionRoutine$4$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$4$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$4$Return#1;
+
+ inline$CallCompletionRoutine$4$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$4$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$4$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$4$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$4$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$4$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$start#1:
+ inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$4$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$4$label_3_true#1, inline$BDLCallDriverCompletionRoutine$4$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$4$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$4$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$4$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$4$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$4$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_6#1:
+ goto inline$storm_KeSetEvent$5$Entry#1;
+
+ inline$storm_KeSetEvent$5$Entry#1:
+ inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$4$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$5$start#1;
+
+ inline$storm_KeSetEvent$5$start#1:
+ inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$5$label_3#1;
+
+ inline$storm_KeSetEvent$5$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$5$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$5$label_1#1;
+
+ inline$storm_KeSetEvent$5$label_1#1:
+ goto inline$storm_KeSetEvent$5$Return#1;
+
+ inline$storm_KeSetEvent$5$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$4$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$4$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$4$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$4$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$4$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$4$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$4$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$4$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$4$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$4$Return#1:
+ inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$4$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$4$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$4$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$4$anon12_Then#1, inline$CallCompletionRoutine$4$anon12_Else#1;
+
+ inline$CallCompletionRoutine$4$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$4$anon5#1;
+
+ inline$CallCompletionRoutine$4$anon5#1:
+ goto inline$CallCompletionRoutine$4$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$4$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$4$label_23#1;
+
+ inline$CallCompletionRoutine$4$label_23#1:
+ inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$4$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$4$label_24#1;
+
+ inline$CallCompletionRoutine$4$label_24#1:
+ goto inline$CallCompletionRoutine$4$label_24_true#1, inline$CallCompletionRoutine$4$label_24_false#1;
+
+ inline$CallCompletionRoutine$4$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$4$label_1#1;
+
+ inline$CallCompletionRoutine$4$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$4$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$4$label_25#1;
+
+ inline$CallCompletionRoutine$4$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$4$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$4$label_1#1;
+
+ inline$CallCompletionRoutine$4$label_1#1:
+ goto inline$CallCompletionRoutine$4$Return#1;
+
+ inline$CallCompletionRoutine$4$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$4$Return#1;
+
+ inline$CallCompletionRoutine$4$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$4$Return#1;
+
+ inline$CallCompletionRoutine$4$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$4$Return#1;
+
+ inline$CallCompletionRoutine$4$Return#1:
+ goto inline$storm_IoCallDriver$2$label_33$1#1;
+
+ inline$storm_IoCallDriver$2$label_33$1#1:
+ goto inline$storm_IoCallDriver$2$anon14_Then#1, inline$storm_IoCallDriver$2$anon14_Else#1;
+
+ inline$storm_IoCallDriver$2$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$2$anon8#1;
+
+ inline$storm_IoCallDriver$2$anon8#1:
+ goto inline$storm_IoCallDriver$2$label_36#1;
+
+ inline$storm_IoCallDriver$2$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$2$Return#1;
+
+ inline$storm_IoCallDriver$2$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$2$label_29#1;
+
+ inline$storm_IoCallDriver$2$label_29#1:
+ inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$2$label_37#1;
+
+ inline$storm_IoCallDriver$2$label_37#1:
+ goto inline$storm_IoCallDriver$2$label_38#1;
+
+ inline$storm_IoCallDriver$2$label_38#1:
+ goto inline$storm_IoCallDriver$2$label_39#1;
+
+ inline$storm_IoCallDriver$2$label_39#1:
+ goto inline$CallCompletionRoutine$5$Entry#1;
+
+ inline$CallCompletionRoutine$5$Entry#1:
+ inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$5$start#1;
+
+ inline$CallCompletionRoutine$5$start#1:
+ inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$5$label_3#1;
+
+ inline$CallCompletionRoutine$5$label_3#1:
+ goto inline$CallCompletionRoutine$5$label_4#1;
+
+ inline$CallCompletionRoutine$5$label_4#1:
+ goto inline$CallCompletionRoutine$5$label_5#1;
+
+ inline$CallCompletionRoutine$5$label_5#1:
+ goto inline$CallCompletionRoutine$5$label_6#1;
+
+ inline$CallCompletionRoutine$5$label_6#1:
+ goto inline$CallCompletionRoutine$5$label_7#1;
+
+ inline$CallCompletionRoutine$5$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$30$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$30$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$start#1:
+ inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$30$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$30$label_3_true#1, inline$IoGetCurrentIrpStackLocation$30$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$30$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$30$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$30$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$30$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$30$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$30$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$30$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$30$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$30$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$30$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$30$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$30$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$30$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$30$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$30$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$30$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$30$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$30$Return#1:
+ goto inline$CallCompletionRoutine$5$label_7$1#1;
+
+ inline$CallCompletionRoutine$5$label_7$1#1:
+ goto inline$CallCompletionRoutine$5$anon10_Then#1, inline$CallCompletionRoutine$5$anon10_Else#1;
+
+ inline$CallCompletionRoutine$5$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$5$anon1#1;
+
+ inline$CallCompletionRoutine$5$anon1#1:
+ goto inline$CallCompletionRoutine$5$label_10#1;
+
+ inline$CallCompletionRoutine$5$label_10#1:
+ goto inline$CallCompletionRoutine$5$label_11#1;
+
+ inline$CallCompletionRoutine$5$label_11#1:
+ havoc inline$CallCompletionRoutine$5$myNondetVar_0;
+ inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$myNondetVar_0;
+ goto inline$CallCompletionRoutine$5$label_12#1;
+
+ inline$CallCompletionRoutine$5$label_12#1:
+ havoc inline$CallCompletionRoutine$5$myNondetVar_0;
+ inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$myNondetVar_0;
+ goto inline$CallCompletionRoutine$5$label_13#1;
+
+ inline$CallCompletionRoutine$5$label_13#1:
+ havoc inline$CallCompletionRoutine$5$myNondetVar_0;
+ goto inline$CallCompletionRoutine$5$label_14#1;
+
+ inline$CallCompletionRoutine$5$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$31$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$31$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$start#1:
+ inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$31$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$31$label_3_true#1, inline$IoGetCurrentIrpStackLocation$31$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$31$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$31$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$31$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$31$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$31$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$31$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$31$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$31$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$31$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$31$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$31$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$31$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$31$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$31$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$31$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$31$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$31$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$31$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$31$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$31$Return#1:
+ goto inline$CallCompletionRoutine$5$label_14$1#1;
+
+ inline$CallCompletionRoutine$5$label_14$1#1:
+ goto inline$CallCompletionRoutine$5$anon11_Then#1, inline$CallCompletionRoutine$5$anon11_Else#1;
+
+ inline$CallCompletionRoutine$5$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$5$anon3#1;
+
+ inline$CallCompletionRoutine$5$anon3#1:
+ goto inline$CallCompletionRoutine$5$label_17#1;
+
+ inline$CallCompletionRoutine$5$label_17#1:
+ goto inline$CallCompletionRoutine$5$label_18#1;
+
+ inline$CallCompletionRoutine$5$label_18#1:
+ goto inline$CallCompletionRoutine$5$label_18_true#1, inline$CallCompletionRoutine$5$label_18_false#1;
+
+ inline$CallCompletionRoutine$5$label_18_false#1:
+ assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$5$label_1#1;
+
+ inline$CallCompletionRoutine$5$label_18_true#1:
+ assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$5$label_19#1;
+
+ inline$CallCompletionRoutine$5$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$5$label_20#1;
+
+ inline$CallCompletionRoutine$5$label_20#1:
+ goto inline$CallCompletionRoutine$5$label_20_icall_1#1, inline$CallCompletionRoutine$5$label_20_icall_2#1, inline$CallCompletionRoutine$5$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$5$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$5$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$5$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$5$Entry#1:
+ inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$5$start#1;
+
+ inline$BDLSystemPowerIoCompletion$5$start#1:
+ call inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$5$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_4#1:
+ inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_6#1:
+ inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$5$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$5$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$33$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$33$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$start#1:
+ inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$33$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$33$label_3_true#1, inline$IoGetCurrentIrpStackLocation$33$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$33$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$33$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$33$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$33$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$33$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$33$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$33$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$33$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$33$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$33$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$33$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$33$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$33$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$33$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$33$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$33$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$33$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$33$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$33$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$33$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon36_Then#1, inline$BDLSystemPowerIoCompletion$5$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_15#1:
+ goto inline$BDLGetDebugLevel$142$Entry#1;
+
+ inline$BDLGetDebugLevel$142$Entry#1:
+ goto inline$BDLGetDebugLevel$142$start#1;
+
+ inline$BDLGetDebugLevel$142$start#1:
+ goto inline$BDLGetDebugLevel$142$label_3#1;
+
+ inline$BDLGetDebugLevel$142$label_3#1:
+ havoc inline$BDLGetDebugLevel$142$myNondetVar_0;
+ inline$BDLGetDebugLevel$142$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$142$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$142$label_1#1;
+
+ inline$BDLGetDebugLevel$142$label_1#1:
+ goto inline$BDLGetDebugLevel$142$Return#1;
+
+ inline$BDLGetDebugLevel$142$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$142$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon37_Then#1, inline$BDLSystemPowerIoCompletion$5$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_18_true#1, inline$BDLSystemPowerIoCompletion$5$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_19#1:
+ goto inline$BDLGetDebugLevel$143$Entry#1;
+
+ inline$BDLGetDebugLevel$143$Entry#1:
+ goto inline$BDLGetDebugLevel$143$start#1;
+
+ inline$BDLGetDebugLevel$143$start#1:
+ goto inline$BDLGetDebugLevel$143$label_3#1;
+
+ inline$BDLGetDebugLevel$143$label_3#1:
+ havoc inline$BDLGetDebugLevel$143$myNondetVar_0;
+ inline$BDLGetDebugLevel$143$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$143$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$143$label_1#1;
+
+ inline$BDLGetDebugLevel$143$label_1#1:
+ goto inline$BDLGetDebugLevel$143$Return#1;
+
+ inline$BDLGetDebugLevel$143$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$143$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon38_Then#1, inline$BDLSystemPowerIoCompletion$5$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_28_true#1, inline$BDLSystemPowerIoCompletion$5$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_29#1:
+ goto inline$BDLGetDebugLevel$144$Entry#1;
+
+ inline$BDLGetDebugLevel$144$Entry#1:
+ goto inline$BDLGetDebugLevel$144$start#1;
+
+ inline$BDLGetDebugLevel$144$start#1:
+ goto inline$BDLGetDebugLevel$144$label_3#1;
+
+ inline$BDLGetDebugLevel$144$label_3#1:
+ havoc inline$BDLGetDebugLevel$144$myNondetVar_0;
+ inline$BDLGetDebugLevel$144$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$144$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$144$label_1#1;
+
+ inline$BDLGetDebugLevel$144$label_1#1:
+ goto inline$BDLGetDebugLevel$144$Return#1;
+
+ inline$BDLGetDebugLevel$144$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$144$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon39_Then#1, inline$BDLSystemPowerIoCompletion$5$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_38_true#1, inline$BDLSystemPowerIoCompletion$5$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_39_true#1, inline$BDLSystemPowerIoCompletion$5$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$5$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$5$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$5$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$5$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$5$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_106_true#1, inline$BDLSystemPowerIoCompletion$5$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$5$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$5$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$5$myNondetVar_0, inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$5$anon50_Then#1, inline$BDLSystemPowerIoCompletion$5$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_112#1:
+ inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_113_true#1, inline$BDLSystemPowerIoCompletion$5$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$5$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_117#1:
+ goto inline$BDLGetDebugLevel$151$Entry#1;
+
+ inline$BDLGetDebugLevel$151$Entry#1:
+ goto inline$BDLGetDebugLevel$151$start#1;
+
+ inline$BDLGetDebugLevel$151$start#1:
+ goto inline$BDLGetDebugLevel$151$label_3#1;
+
+ inline$BDLGetDebugLevel$151$label_3#1:
+ havoc inline$BDLGetDebugLevel$151$myNondetVar_0;
+ inline$BDLGetDebugLevel$151$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$151$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$151$label_1#1;
+
+ inline$BDLGetDebugLevel$151$label_1#1:
+ goto inline$BDLGetDebugLevel$151$Return#1;
+
+ inline$BDLGetDebugLevel$151$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$151$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon51_Then#1, inline$BDLSystemPowerIoCompletion$5$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_120_true#1, inline$BDLSystemPowerIoCompletion$5$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_121#1:
+ goto inline$BDLGetDebugLevel$152$Entry#1;
+
+ inline$BDLGetDebugLevel$152$Entry#1:
+ goto inline$BDLGetDebugLevel$152$start#1;
+
+ inline$BDLGetDebugLevel$152$start#1:
+ goto inline$BDLGetDebugLevel$152$label_3#1;
+
+ inline$BDLGetDebugLevel$152$label_3#1:
+ havoc inline$BDLGetDebugLevel$152$myNondetVar_0;
+ inline$BDLGetDebugLevel$152$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$152$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$152$label_1#1;
+
+ inline$BDLGetDebugLevel$152$label_1#1:
+ goto inline$BDLGetDebugLevel$152$Return#1;
+
+ inline$BDLGetDebugLevel$152$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$152$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon52_Then#1, inline$BDLSystemPowerIoCompletion$5$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_130_true#1, inline$BDLSystemPowerIoCompletion$5$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_131#1:
+ goto inline$BDLGetDebugLevel$153$Entry#1;
+
+ inline$BDLGetDebugLevel$153$Entry#1:
+ goto inline$BDLGetDebugLevel$153$start#1;
+
+ inline$BDLGetDebugLevel$153$start#1:
+ goto inline$BDLGetDebugLevel$153$label_3#1;
+
+ inline$BDLGetDebugLevel$153$label_3#1:
+ havoc inline$BDLGetDebugLevel$153$myNondetVar_0;
+ inline$BDLGetDebugLevel$153$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$153$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$153$label_1#1;
+
+ inline$BDLGetDebugLevel$153$label_1#1:
+ goto inline$BDLGetDebugLevel$153$Return#1;
+
+ inline$BDLGetDebugLevel$153$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$153$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon53_Then#1, inline$BDLSystemPowerIoCompletion$5$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_140_true#1, inline$BDLSystemPowerIoCompletion$5$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$5$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_115#1:
+ inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$5$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$5$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$5$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_43#1:
+ goto inline$BDLGetDebugLevel$145$Entry#1;
+
+ inline$BDLGetDebugLevel$145$Entry#1:
+ goto inline$BDLGetDebugLevel$145$start#1;
+
+ inline$BDLGetDebugLevel$145$start#1:
+ goto inline$BDLGetDebugLevel$145$label_3#1;
+
+ inline$BDLGetDebugLevel$145$label_3#1:
+ havoc inline$BDLGetDebugLevel$145$myNondetVar_0;
+ inline$BDLGetDebugLevel$145$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$145$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$145$label_1#1;
+
+ inline$BDLGetDebugLevel$145$label_1#1:
+ goto inline$BDLGetDebugLevel$145$Return#1;
+
+ inline$BDLGetDebugLevel$145$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$145$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon40_Then#1, inline$BDLSystemPowerIoCompletion$5$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_46_true#1, inline$BDLSystemPowerIoCompletion$5$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_47#1:
+ goto inline$BDLGetDebugLevel$146$Entry#1;
+
+ inline$BDLGetDebugLevel$146$Entry#1:
+ goto inline$BDLGetDebugLevel$146$start#1;
+
+ inline$BDLGetDebugLevel$146$start#1:
+ goto inline$BDLGetDebugLevel$146$label_3#1;
+
+ inline$BDLGetDebugLevel$146$label_3#1:
+ havoc inline$BDLGetDebugLevel$146$myNondetVar_0;
+ inline$BDLGetDebugLevel$146$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$146$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$146$label_1#1;
+
+ inline$BDLGetDebugLevel$146$label_1#1:
+ goto inline$BDLGetDebugLevel$146$Return#1;
+
+ inline$BDLGetDebugLevel$146$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$146$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon41_Then#1, inline$BDLSystemPowerIoCompletion$5$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_56_true#1, inline$BDLSystemPowerIoCompletion$5$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_57#1:
+ goto inline$BDLGetDebugLevel$147$Entry#1;
+
+ inline$BDLGetDebugLevel$147$Entry#1:
+ goto inline$BDLGetDebugLevel$147$start#1;
+
+ inline$BDLGetDebugLevel$147$start#1:
+ goto inline$BDLGetDebugLevel$147$label_3#1;
+
+ inline$BDLGetDebugLevel$147$label_3#1:
+ havoc inline$BDLGetDebugLevel$147$myNondetVar_0;
+ inline$BDLGetDebugLevel$147$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$147$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$147$label_1#1;
+
+ inline$BDLGetDebugLevel$147$label_1#1:
+ goto inline$BDLGetDebugLevel$147$Return#1;
+
+ inline$BDLGetDebugLevel$147$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$147$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon42_Then#1, inline$BDLSystemPowerIoCompletion$5$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_66_true#1, inline$BDLSystemPowerIoCompletion$5$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$5$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$5$anon43_Then#1, inline$BDLSystemPowerIoCompletion$5$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$5$anon44_Then#1, inline$BDLSystemPowerIoCompletion$5$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_74#1:
+ goto inline$storm_IoCompleteRequest$12$Entry#1;
+
+ inline$storm_IoCompleteRequest$12$Entry#1:
+ inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$5$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$12$start#1;
+
+ inline$storm_IoCompleteRequest$12$start#1:
+ inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$12$label_3#1;
+
+ inline$storm_IoCompleteRequest$12$label_3#1:
+ call inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$12$label_6#1;
+
+ inline$storm_IoCompleteRequest$12$label_6#1:
+ goto inline$storm_IoCompleteRequest$12$label_6_true#1, inline$storm_IoCompleteRequest$12$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$12$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$12$label_7#1;
+
+ inline$storm_IoCompleteRequest$12$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$12$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$12$label_8#1;
+
+ inline$storm_IoCompleteRequest$12$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$12$anon3_Then#1, inline$storm_IoCompleteRequest$12$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$12$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$12$anon1#1;
+
+ inline$storm_IoCompleteRequest$12$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$12$label_9#1;
+
+ inline$storm_IoCompleteRequest$12$label_9#1:
+ goto inline$storm_IoCompleteRequest$12$label_9_true#1, inline$storm_IoCompleteRequest$12$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$12$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$12$label_10#1;
+
+ inline$storm_IoCompleteRequest$12$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$12$label_1#1;
+
+ inline$storm_IoCompleteRequest$12$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$12$label_7#1;
+
+ inline$storm_IoCompleteRequest$12$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$12$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$12$label_1#1;
+
+ inline$storm_IoCompleteRequest$12$label_1#1:
+ goto inline$storm_IoCompleteRequest$12$Return#1;
+
+ inline$storm_IoCompleteRequest$12$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$12$Return#1;
+
+ inline$storm_IoCompleteRequest$12$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon45_Then#1, inline$BDLSystemPowerIoCompletion$5$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$5$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$5$anon46_Then#1, inline$BDLSystemPowerIoCompletion$5$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_80#1:
+ goto inline$BDLGetDebugLevel$148$Entry#1;
+
+ inline$BDLGetDebugLevel$148$Entry#1:
+ goto inline$BDLGetDebugLevel$148$start#1;
+
+ inline$BDLGetDebugLevel$148$start#1:
+ goto inline$BDLGetDebugLevel$148$label_3#1;
+
+ inline$BDLGetDebugLevel$148$label_3#1:
+ havoc inline$BDLGetDebugLevel$148$myNondetVar_0;
+ inline$BDLGetDebugLevel$148$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$148$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$148$label_1#1;
+
+ inline$BDLGetDebugLevel$148$label_1#1:
+ goto inline$BDLGetDebugLevel$148$Return#1;
+
+ inline$BDLGetDebugLevel$148$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$148$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon47_Then#1, inline$BDLSystemPowerIoCompletion$5$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_83_true#1, inline$BDLSystemPowerIoCompletion$5$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_84#1:
+ goto inline$BDLGetDebugLevel$149$Entry#1;
+
+ inline$BDLGetDebugLevel$149$Entry#1:
+ goto inline$BDLGetDebugLevel$149$start#1;
+
+ inline$BDLGetDebugLevel$149$start#1:
+ goto inline$BDLGetDebugLevel$149$label_3#1;
+
+ inline$BDLGetDebugLevel$149$label_3#1:
+ havoc inline$BDLGetDebugLevel$149$myNondetVar_0;
+ inline$BDLGetDebugLevel$149$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$149$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$149$label_1#1;
+
+ inline$BDLGetDebugLevel$149$label_1#1:
+ goto inline$BDLGetDebugLevel$149$Return#1;
+
+ inline$BDLGetDebugLevel$149$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$149$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon48_Then#1, inline$BDLSystemPowerIoCompletion$5$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_93_true#1, inline$BDLSystemPowerIoCompletion$5$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$5$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$5$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_94#1:
+ goto inline$BDLGetDebugLevel$150$Entry#1;
+
+ inline$BDLGetDebugLevel$150$Entry#1:
+ goto inline$BDLGetDebugLevel$150$start#1;
+
+ inline$BDLGetDebugLevel$150$start#1:
+ goto inline$BDLGetDebugLevel$150$label_3#1;
+
+ inline$BDLGetDebugLevel$150$label_3#1:
+ havoc inline$BDLGetDebugLevel$150$myNondetVar_0;
+ inline$BDLGetDebugLevel$150$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$150$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$150$label_1#1;
+
+ inline$BDLGetDebugLevel$150$label_1#1:
+ goto inline$BDLGetDebugLevel$150$Return#1;
+
+ inline$BDLGetDebugLevel$150$Return#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$150$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$5$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$5$anon49_Then#1, inline$BDLSystemPowerIoCompletion$5$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_103_true#1, inline$BDLSystemPowerIoCompletion$5$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$5$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$5$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$5$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_104#1:
+ inline$BDLSystemPowerIoCompletion$5$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$5$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$5$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$5$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$5$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$5$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$5$Return#1:
+ inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$5$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$5$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$5$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$5$anon14_Then#1, inline$CallCompletionRoutine$5$anon14_Else#1;
+
+ inline$CallCompletionRoutine$5$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$5$anon9#1;
+
+ inline$CallCompletionRoutine$5$anon9#1:
+ goto inline$CallCompletionRoutine$5$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$5$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$5$Return#1;
+
+ inline$CallCompletionRoutine$5$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$5$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$5$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$5$Entry#1:
+ inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$5$start#1;
+
+ inline$BDLDevicePowerIoCompletion$5$start#1:
+ call inline$BDLDevicePowerIoCompletion$5$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$5$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_4#1:
+ inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_6#1:
+ inline$BDLDevicePowerIoCompletion$5$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$5$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$5$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$32$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$32$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$start#1:
+ inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$32$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$32$label_3_true#1, inline$IoGetCurrentIrpStackLocation$32$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$32$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$32$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$32$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$32$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$32$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$32$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$32$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$32$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$32$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$32$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$32$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$32$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$32$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$32$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$32$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$32$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$32$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$32$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$32$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$32$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$32$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$32$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$32$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon30_Then#1, inline$BDLDevicePowerIoCompletion$5$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_13#1:
+ inline$BDLDevicePowerIoCompletion$5$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_17#1:
+ goto inline$BDLGetDebugLevel$133$Entry#1;
+
+ inline$BDLGetDebugLevel$133$Entry#1:
+ goto inline$BDLGetDebugLevel$133$start#1;
+
+ inline$BDLGetDebugLevel$133$start#1:
+ goto inline$BDLGetDebugLevel$133$label_3#1;
+
+ inline$BDLGetDebugLevel$133$label_3#1:
+ havoc inline$BDLGetDebugLevel$133$myNondetVar_0;
+ inline$BDLGetDebugLevel$133$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$133$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$133$label_1#1;
+
+ inline$BDLGetDebugLevel$133$label_1#1:
+ goto inline$BDLGetDebugLevel$133$Return#1;
+
+ inline$BDLGetDebugLevel$133$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$133$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon31_Then#1, inline$BDLDevicePowerIoCompletion$5$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_20_true#1, inline$BDLDevicePowerIoCompletion$5$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_21#1:
+ goto inline$BDLGetDebugLevel$134$Entry#1;
+
+ inline$BDLGetDebugLevel$134$Entry#1:
+ goto inline$BDLGetDebugLevel$134$start#1;
+
+ inline$BDLGetDebugLevel$134$start#1:
+ goto inline$BDLGetDebugLevel$134$label_3#1;
+
+ inline$BDLGetDebugLevel$134$label_3#1:
+ havoc inline$BDLGetDebugLevel$134$myNondetVar_0;
+ inline$BDLGetDebugLevel$134$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$134$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$134$label_1#1;
+
+ inline$BDLGetDebugLevel$134$label_1#1:
+ goto inline$BDLGetDebugLevel$134$Return#1;
+
+ inline$BDLGetDebugLevel$134$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$134$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon32_Then#1, inline$BDLDevicePowerIoCompletion$5$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_30_true#1, inline$BDLDevicePowerIoCompletion$5$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_31#1:
+ goto inline$BDLGetDebugLevel$135$Entry#1;
+
+ inline$BDLGetDebugLevel$135$Entry#1:
+ goto inline$BDLGetDebugLevel$135$start#1;
+
+ inline$BDLGetDebugLevel$135$start#1:
+ goto inline$BDLGetDebugLevel$135$label_3#1;
+
+ inline$BDLGetDebugLevel$135$label_3#1:
+ havoc inline$BDLGetDebugLevel$135$myNondetVar_0;
+ inline$BDLGetDebugLevel$135$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$135$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$135$label_1#1;
+
+ inline$BDLGetDebugLevel$135$label_1#1:
+ goto inline$BDLGetDebugLevel$135$Return#1;
+
+ inline$BDLGetDebugLevel$135$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$135$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon33_Then#1, inline$BDLDevicePowerIoCompletion$5$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_40_true#1, inline$BDLDevicePowerIoCompletion$5$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_41_true#1, inline$BDLDevicePowerIoCompletion$5$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$5$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$5$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_44_true#1, inline$BDLDevicePowerIoCompletion$5$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_45_true#1, inline$BDLDevicePowerIoCompletion$5$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$5$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$5$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$5$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_54#1:
+ inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$5$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_55_true#1, inline$BDLDevicePowerIoCompletion$5$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$5$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$5$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$5$anon34_Then#1, inline$BDLDevicePowerIoCompletion$5$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_59#1:
+ goto inline$BDLGetDebugLevel$136$Entry#1;
+
+ inline$BDLGetDebugLevel$136$Entry#1:
+ goto inline$BDLGetDebugLevel$136$start#1;
+
+ inline$BDLGetDebugLevel$136$start#1:
+ goto inline$BDLGetDebugLevel$136$label_3#1;
+
+ inline$BDLGetDebugLevel$136$label_3#1:
+ havoc inline$BDLGetDebugLevel$136$myNondetVar_0;
+ inline$BDLGetDebugLevel$136$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$136$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$136$label_1#1;
+
+ inline$BDLGetDebugLevel$136$label_1#1:
+ goto inline$BDLGetDebugLevel$136$Return#1;
+
+ inline$BDLGetDebugLevel$136$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$136$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon35_Then#1, inline$BDLDevicePowerIoCompletion$5$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_62_true#1, inline$BDLDevicePowerIoCompletion$5$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_63#1:
+ goto inline$BDLGetDebugLevel$137$Entry#1;
+
+ inline$BDLGetDebugLevel$137$Entry#1:
+ goto inline$BDLGetDebugLevel$137$start#1;
+
+ inline$BDLGetDebugLevel$137$start#1:
+ goto inline$BDLGetDebugLevel$137$label_3#1;
+
+ inline$BDLGetDebugLevel$137$label_3#1:
+ havoc inline$BDLGetDebugLevel$137$myNondetVar_0;
+ inline$BDLGetDebugLevel$137$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$137$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$137$label_1#1;
+
+ inline$BDLGetDebugLevel$137$label_1#1:
+ goto inline$BDLGetDebugLevel$137$Return#1;
+
+ inline$BDLGetDebugLevel$137$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$137$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon36_Then#1, inline$BDLDevicePowerIoCompletion$5$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_72_true#1, inline$BDLDevicePowerIoCompletion$5$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_73#1:
+ goto inline$BDLGetDebugLevel$138$Entry#1;
+
+ inline$BDLGetDebugLevel$138$Entry#1:
+ goto inline$BDLGetDebugLevel$138$start#1;
+
+ inline$BDLGetDebugLevel$138$start#1:
+ goto inline$BDLGetDebugLevel$138$label_3#1;
+
+ inline$BDLGetDebugLevel$138$label_3#1:
+ havoc inline$BDLGetDebugLevel$138$myNondetVar_0;
+ inline$BDLGetDebugLevel$138$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$138$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$138$label_1#1;
+
+ inline$BDLGetDebugLevel$138$label_1#1:
+ goto inline$BDLGetDebugLevel$138$Return#1;
+
+ inline$BDLGetDebugLevel$138$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$138$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon37_Then#1, inline$BDLDevicePowerIoCompletion$5$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_82_true#1, inline$BDLDevicePowerIoCompletion$5$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$5$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$5$anon38_Then#1, inline$BDLDevicePowerIoCompletion$5$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$5$anon39_Then#1, inline$BDLDevicePowerIoCompletion$5$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_92#1:
+ goto inline$storm_IoCompleteRequest$11$Entry#1;
+
+ inline$storm_IoCompleteRequest$11$Entry#1:
+ inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$5$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$11$start#1;
+
+ inline$storm_IoCompleteRequest$11$start#1:
+ inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$11$label_3#1;
+
+ inline$storm_IoCompleteRequest$11$label_3#1:
+ call inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$11$label_6#1;
+
+ inline$storm_IoCompleteRequest$11$label_6#1:
+ goto inline$storm_IoCompleteRequest$11$label_6_true#1, inline$storm_IoCompleteRequest$11$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$11$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$11$label_7#1;
+
+ inline$storm_IoCompleteRequest$11$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$11$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$11$label_8#1;
+
+ inline$storm_IoCompleteRequest$11$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$11$anon3_Then#1, inline$storm_IoCompleteRequest$11$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$11$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$11$anon1#1;
+
+ inline$storm_IoCompleteRequest$11$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$11$label_9#1;
+
+ inline$storm_IoCompleteRequest$11$label_9#1:
+ goto inline$storm_IoCompleteRequest$11$label_9_true#1, inline$storm_IoCompleteRequest$11$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$11$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$11$label_10#1;
+
+ inline$storm_IoCompleteRequest$11$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$11$label_1#1;
+
+ inline$storm_IoCompleteRequest$11$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$11$label_7#1;
+
+ inline$storm_IoCompleteRequest$11$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$11$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$11$label_1#1;
+
+ inline$storm_IoCompleteRequest$11$label_1#1:
+ goto inline$storm_IoCompleteRequest$11$Return#1;
+
+ inline$storm_IoCompleteRequest$11$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$11$Return#1;
+
+ inline$storm_IoCompleteRequest$11$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon40_Then#1, inline$BDLDevicePowerIoCompletion$5$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$5$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$5$anon41_Then#1, inline$BDLDevicePowerIoCompletion$5$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_98#1:
+ goto inline$BDLGetDebugLevel$139$Entry#1;
+
+ inline$BDLGetDebugLevel$139$Entry#1:
+ goto inline$BDLGetDebugLevel$139$start#1;
+
+ inline$BDLGetDebugLevel$139$start#1:
+ goto inline$BDLGetDebugLevel$139$label_3#1;
+
+ inline$BDLGetDebugLevel$139$label_3#1:
+ havoc inline$BDLGetDebugLevel$139$myNondetVar_0;
+ inline$BDLGetDebugLevel$139$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$139$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$139$label_1#1;
+
+ inline$BDLGetDebugLevel$139$label_1#1:
+ goto inline$BDLGetDebugLevel$139$Return#1;
+
+ inline$BDLGetDebugLevel$139$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$139$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon42_Then#1, inline$BDLDevicePowerIoCompletion$5$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_101_true#1, inline$BDLDevicePowerIoCompletion$5$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_102#1:
+ goto inline$BDLGetDebugLevel$140$Entry#1;
+
+ inline$BDLGetDebugLevel$140$Entry#1:
+ goto inline$BDLGetDebugLevel$140$start#1;
+
+ inline$BDLGetDebugLevel$140$start#1:
+ goto inline$BDLGetDebugLevel$140$label_3#1;
+
+ inline$BDLGetDebugLevel$140$label_3#1:
+ havoc inline$BDLGetDebugLevel$140$myNondetVar_0;
+ inline$BDLGetDebugLevel$140$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$140$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$140$label_1#1;
+
+ inline$BDLGetDebugLevel$140$label_1#1:
+ goto inline$BDLGetDebugLevel$140$Return#1;
+
+ inline$BDLGetDebugLevel$140$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$140$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon43_Then#1, inline$BDLDevicePowerIoCompletion$5$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_111_true#1, inline$BDLDevicePowerIoCompletion$5$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$5$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$5$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_112#1:
+ goto inline$BDLGetDebugLevel$141$Entry#1;
+
+ inline$BDLGetDebugLevel$141$Entry#1:
+ goto inline$BDLGetDebugLevel$141$start#1;
+
+ inline$BDLGetDebugLevel$141$start#1:
+ goto inline$BDLGetDebugLevel$141$label_3#1;
+
+ inline$BDLGetDebugLevel$141$label_3#1:
+ havoc inline$BDLGetDebugLevel$141$myNondetVar_0;
+ inline$BDLGetDebugLevel$141$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$141$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$141$label_1#1;
+
+ inline$BDLGetDebugLevel$141$label_1#1:
+ goto inline$BDLGetDebugLevel$141$Return#1;
+
+ inline$BDLGetDebugLevel$141$Return#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$141$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$5$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$5$anon44_Then#1, inline$BDLDevicePowerIoCompletion$5$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_121_true#1, inline$BDLDevicePowerIoCompletion$5$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$5$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$5$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$5$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_122#1:
+ inline$BDLDevicePowerIoCompletion$5$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$5$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$5$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$5$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$5$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$5$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$5$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$5$Return#1:
+ inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$5$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$5$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$5$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$5$anon13_Then#1, inline$CallCompletionRoutine$5$anon13_Else#1;
+
+ inline$CallCompletionRoutine$5$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$5$anon7#1;
+
+ inline$CallCompletionRoutine$5$anon7#1:
+ goto inline$CallCompletionRoutine$5$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$5$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$5$Return#1;
+
+ inline$CallCompletionRoutine$5$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$5$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$5$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$5$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$5$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$5$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$start#1:
+ inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$5$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$5$label_3_true#1, inline$BDLCallDriverCompletionRoutine$5$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$5$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$5$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$5$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$5$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$5$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_6#1:
+ goto inline$storm_KeSetEvent$6$Entry#1;
+
+ inline$storm_KeSetEvent$6$Entry#1:
+ inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$5$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$6$start#1;
+
+ inline$storm_KeSetEvent$6$start#1:
+ inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$6$label_3#1;
+
+ inline$storm_KeSetEvent$6$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$6$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$6$label_1#1;
+
+ inline$storm_KeSetEvent$6$label_1#1:
+ goto inline$storm_KeSetEvent$6$Return#1;
+
+ inline$storm_KeSetEvent$6$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$5$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$5$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$5$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$5$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$5$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$5$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$5$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$5$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$5$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$5$Return#1:
+ inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$5$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$5$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$5$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$5$anon12_Then#1, inline$CallCompletionRoutine$5$anon12_Else#1;
+
+ inline$CallCompletionRoutine$5$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$5$anon5#1;
+
+ inline$CallCompletionRoutine$5$anon5#1:
+ goto inline$CallCompletionRoutine$5$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$5$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$5$label_23#1;
+
+ inline$CallCompletionRoutine$5$label_23#1:
+ inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$5$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$5$label_24#1;
+
+ inline$CallCompletionRoutine$5$label_24#1:
+ goto inline$CallCompletionRoutine$5$label_24_true#1, inline$CallCompletionRoutine$5$label_24_false#1;
+
+ inline$CallCompletionRoutine$5$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$5$label_1#1;
+
+ inline$CallCompletionRoutine$5$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$5$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$5$label_25#1;
+
+ inline$CallCompletionRoutine$5$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$5$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$5$label_1#1;
+
+ inline$CallCompletionRoutine$5$label_1#1:
+ goto inline$CallCompletionRoutine$5$Return#1;
+
+ inline$CallCompletionRoutine$5$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$5$Return#1;
+
+ inline$CallCompletionRoutine$5$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$5$Return#1;
+
+ inline$CallCompletionRoutine$5$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$5$Return#1;
+
+ inline$CallCompletionRoutine$5$Return#1:
+ goto inline$storm_IoCallDriver$2$label_39$1#1;
+
+ inline$storm_IoCallDriver$2$label_39$1#1:
+ goto inline$storm_IoCallDriver$2$anon15_Then#1, inline$storm_IoCallDriver$2$anon15_Else#1;
+
+ inline$storm_IoCallDriver$2$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$2$anon10#1;
+
+ inline$storm_IoCallDriver$2$anon10#1:
+ goto inline$storm_IoCallDriver$2$label_36#1;
+
+ inline$storm_IoCallDriver$2$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$2$Return#1;
+
+ inline$storm_IoCallDriver$2$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$2$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$2$label_28#1;
+
+ inline$storm_IoCallDriver$2$label_28#1:
+ inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$2$label_42#1;
+
+ inline$storm_IoCallDriver$2$label_42#1:
+ goto inline$storm_IoCallDriver$2$label_43#1;
+
+ inline$storm_IoCallDriver$2$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$2$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$2$label_36#1;
+
+ inline$storm_IoCallDriver$2$label_36#1:
+ inline$storm_IoCallDriver$2$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$2$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$2$label_1#1;
+
+ inline$storm_IoCallDriver$2$label_1#1:
+ goto inline$storm_IoCallDriver$2$Return#1;
+
+ inline$storm_IoCallDriver$2$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$2$Return#1;
+
+ inline$storm_IoCallDriver$2$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$2$Return#1;
+
+ inline$storm_IoCallDriver$2$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$2$Return#1;
+
+ inline$storm_IoCallDriver$2$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$2$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_19$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_19$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon20_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon9#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_42#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_42#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_IoCallDriver$108.29$4$;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_18_true#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_22#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_22#1:
+ call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon21_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon21_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon11#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon11#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_25#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_25#1:
+ goto inline$storm_PoCallDriver$1$Entry#1;
+
+ inline$storm_PoCallDriver$1$Entry#1:
+ inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_PoCallDriver$1$start#1;
+
+ inline$storm_PoCallDriver$1$start#1:
+ inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8_.1;
+ goto inline$storm_PoCallDriver$1$label_3#1;
+
+ inline$storm_PoCallDriver$1$label_3#1:
+ goto inline$storm_IoCallDriver$3$Entry#1;
+
+ inline$storm_IoCallDriver$3$Entry#1:
+ inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$1$$Irp$2$496.14$storm_PoCallDriver$8;
+ goto inline$storm_IoCallDriver$3$start#1;
+
+ inline$storm_IoCallDriver$3$start#1:
+ inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$3$label_3#1;
+
+ inline$storm_IoCallDriver$3$label_3#1:
+ goto inline$storm_IoCallDriver$3$label_4#1;
+
+ inline$storm_IoCallDriver$3$label_4#1:
+ goto inline$storm_IoCallDriver$3$label_5#1;
+
+ inline$storm_IoCallDriver$3$label_5#1:
+ goto inline$storm_IoCallDriver$3$label_6#1;
+
+ inline$storm_IoCallDriver$3$label_6#1:
+ call inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$3$label_9#1;
+
+ inline$storm_IoCallDriver$3$label_9#1:
+ goto inline$storm_IoCallDriver$3$label_9_true#1, inline$storm_IoCallDriver$3$label_9_false#1;
+
+ inline$storm_IoCallDriver$3$label_9_false#1:
+ assume inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$3$label_10#1;
+
+ inline$storm_IoCallDriver$3$label_9_true#1:
+ assume inline$storm_IoCallDriver$3$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$3$label_13#1;
+
+ inline$storm_IoCallDriver$3$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$3$anon12_Then#1, inline$storm_IoCallDriver$3$anon12_Else#1;
+
+ inline$storm_IoCallDriver$3$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$3$anon3#1;
+
+ inline$storm_IoCallDriver$3$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$3$label_14#1;
+
+ inline$storm_IoCallDriver$3$label_14#1:
+ goto inline$storm_IoCallDriver$3$label_14_true#1, inline$storm_IoCallDriver$3$label_14_false#1;
+
+ inline$storm_IoCallDriver$3$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$3$label_15#1;
+
+ inline$storm_IoCallDriver$3$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$3$label_1#1;
+
+ inline$storm_IoCallDriver$3$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$3$label_10#1;
+
+ inline$storm_IoCallDriver$3$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$4$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$4$Entry#1:
+ inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$4$start#1;
+
+ inline$IoSetNextIrpStackLocation$4$start#1:
+ inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$4$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$4$label_3_true#1, inline$IoSetNextIrpStackLocation$4$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$4$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$4$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_4#1:
+ call inline$IoSetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$4$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_7#1:
+ call inline$IoSetNextIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$4$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$4$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$4$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$4$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_5#1:
+ inline$IoSetNextIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$4$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$4$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$4$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$4$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$4$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$4$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$4$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$4$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$4$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$4$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$4$Return#1;
+
+ inline$IoSetNextIrpStackLocation$4$Return#1:
+ goto inline$storm_IoCallDriver$3$label_10$1#1;
+
+ inline$storm_IoCallDriver$3$label_10$1#1:
+ goto inline$storm_IoCallDriver$3$anon11_Then#1, inline$storm_IoCallDriver$3$anon11_Else#1;
+
+ inline$storm_IoCallDriver$3$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$3$anon1#1;
+
+ inline$storm_IoCallDriver$3$anon1#1:
+ goto inline$storm_IoCallDriver$3$label_18#1;
+
+ inline$storm_IoCallDriver$3$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$34$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$34$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$start#1:
+ inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$34$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$34$label_3_true#1, inline$IoGetCurrentIrpStackLocation$34$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$34$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$34$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$34$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$34$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$34$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$34$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$34$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$34$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$34$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$34$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$34$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$34$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$34$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$34$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$34$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$34$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$34$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$34$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$34$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$34$Return#1:
+ goto inline$storm_IoCallDriver$3$label_18$1#1;
+
+ inline$storm_IoCallDriver$3$label_18$1#1:
+ goto inline$storm_IoCallDriver$3$anon13_Then#1, inline$storm_IoCallDriver$3$anon13_Else#1;
+
+ inline$storm_IoCallDriver$3$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$3$anon6#1;
+
+ inline$storm_IoCallDriver$3$anon6#1:
+ goto inline$storm_IoCallDriver$3$label_21#1;
+
+ inline$storm_IoCallDriver$3$label_21#1:
+ goto inline$storm_IoCallDriver$3$label_22#1;
+
+ inline$storm_IoCallDriver$3$label_22#1:
+ goto inline$storm_IoCallDriver$3$label_23#1;
+
+ inline$storm_IoCallDriver$3$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$3$label_24#1;
+
+ inline$storm_IoCallDriver$3$label_24#1:
+ call inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$3$label_27#1;
+
+ inline$storm_IoCallDriver$3$label_27#1:
+ goto inline$storm_IoCallDriver$3$label_27_case_0#1, inline$storm_IoCallDriver$3$label_27_case_1#1, inline$storm_IoCallDriver$3$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$3$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$3$label_30#1;
+
+ inline$storm_IoCallDriver$3$label_30#1:
+ inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$3$label_31#1;
+
+ inline$storm_IoCallDriver$3$label_31#1:
+ goto inline$storm_IoCallDriver$3$label_32#1;
+
+ inline$storm_IoCallDriver$3$label_32#1:
+ goto inline$storm_IoCallDriver$3$label_33#1;
+
+ inline$storm_IoCallDriver$3$label_33#1:
+ goto inline$CallCompletionRoutine$6$Entry#1;
+
+ inline$CallCompletionRoutine$6$Entry#1:
+ inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$6$start#1;
+
+ inline$CallCompletionRoutine$6$start#1:
+ inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$6$label_3#1;
+
+ inline$CallCompletionRoutine$6$label_3#1:
+ goto inline$CallCompletionRoutine$6$label_4#1;
+
+ inline$CallCompletionRoutine$6$label_4#1:
+ goto inline$CallCompletionRoutine$6$label_5#1;
+
+ inline$CallCompletionRoutine$6$label_5#1:
+ goto inline$CallCompletionRoutine$6$label_6#1;
+
+ inline$CallCompletionRoutine$6$label_6#1:
+ goto inline$CallCompletionRoutine$6$label_7#1;
+
+ inline$CallCompletionRoutine$6$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$35$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$35$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$start#1:
+ inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$35$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$35$label_3_true#1, inline$IoGetCurrentIrpStackLocation$35$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$35$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$35$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$35$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$35$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$35$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$35$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$35$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$35$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$35$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$35$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$35$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$35$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$35$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$35$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$35$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$35$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$35$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$35$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$35$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$35$Return#1:
+ goto inline$CallCompletionRoutine$6$label_7$1#1;
+
+ inline$CallCompletionRoutine$6$label_7$1#1:
+ goto inline$CallCompletionRoutine$6$anon10_Then#1, inline$CallCompletionRoutine$6$anon10_Else#1;
+
+ inline$CallCompletionRoutine$6$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$6$anon1#1;
+
+ inline$CallCompletionRoutine$6$anon1#1:
+ goto inline$CallCompletionRoutine$6$label_10#1;
+
+ inline$CallCompletionRoutine$6$label_10#1:
+ goto inline$CallCompletionRoutine$6$label_11#1;
+
+ inline$CallCompletionRoutine$6$label_11#1:
+ havoc inline$CallCompletionRoutine$6$myNondetVar_0;
+ inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$myNondetVar_0;
+ goto inline$CallCompletionRoutine$6$label_12#1;
+
+ inline$CallCompletionRoutine$6$label_12#1:
+ havoc inline$CallCompletionRoutine$6$myNondetVar_0;
+ inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$myNondetVar_0;
+ goto inline$CallCompletionRoutine$6$label_13#1;
+
+ inline$CallCompletionRoutine$6$label_13#1:
+ havoc inline$CallCompletionRoutine$6$myNondetVar_0;
+ goto inline$CallCompletionRoutine$6$label_14#1;
+
+ inline$CallCompletionRoutine$6$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$36$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$36$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$start#1:
+ inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$36$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$36$label_3_true#1, inline$IoGetCurrentIrpStackLocation$36$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$36$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$36$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$36$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$36$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$36$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$36$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$36$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$36$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$36$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$36$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$36$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$36$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$36$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$36$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$36$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$36$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$36$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$36$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$36$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$36$Return#1:
+ goto inline$CallCompletionRoutine$6$label_14$1#1;
+
+ inline$CallCompletionRoutine$6$label_14$1#1:
+ goto inline$CallCompletionRoutine$6$anon11_Then#1, inline$CallCompletionRoutine$6$anon11_Else#1;
+
+ inline$CallCompletionRoutine$6$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$6$anon3#1;
+
+ inline$CallCompletionRoutine$6$anon3#1:
+ goto inline$CallCompletionRoutine$6$label_17#1;
+
+ inline$CallCompletionRoutine$6$label_17#1:
+ goto inline$CallCompletionRoutine$6$label_18#1;
+
+ inline$CallCompletionRoutine$6$label_18#1:
+ goto inline$CallCompletionRoutine$6$label_18_true#1, inline$CallCompletionRoutine$6$label_18_false#1;
+
+ inline$CallCompletionRoutine$6$label_18_false#1:
+ assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$6$label_1#1;
+
+ inline$CallCompletionRoutine$6$label_18_true#1:
+ assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$6$label_19#1;
+
+ inline$CallCompletionRoutine$6$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$6$label_20#1;
+
+ inline$CallCompletionRoutine$6$label_20#1:
+ goto inline$CallCompletionRoutine$6$label_20_icall_1#1, inline$CallCompletionRoutine$6$label_20_icall_2#1, inline$CallCompletionRoutine$6$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$6$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$6$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$6$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$6$Entry#1:
+ inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$6$start#1;
+
+ inline$BDLSystemPowerIoCompletion$6$start#1:
+ call inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$6$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_4#1:
+ inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_6#1:
+ inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$6$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$6$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$38$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$38$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$start#1:
+ inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$38$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$38$label_3_true#1, inline$IoGetCurrentIrpStackLocation$38$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$38$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$38$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$38$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$38$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$38$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$38$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$38$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$38$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$38$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$38$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$38$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$38$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$38$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$38$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$38$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$38$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$38$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$38$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$38$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$38$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon36_Then#1, inline$BDLSystemPowerIoCompletion$6$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_15#1:
+ goto inline$BDLGetDebugLevel$163$Entry#1;
+
+ inline$BDLGetDebugLevel$163$Entry#1:
+ goto inline$BDLGetDebugLevel$163$start#1;
+
+ inline$BDLGetDebugLevel$163$start#1:
+ goto inline$BDLGetDebugLevel$163$label_3#1;
+
+ inline$BDLGetDebugLevel$163$label_3#1:
+ havoc inline$BDLGetDebugLevel$163$myNondetVar_0;
+ inline$BDLGetDebugLevel$163$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$163$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$163$label_1#1;
+
+ inline$BDLGetDebugLevel$163$label_1#1:
+ goto inline$BDLGetDebugLevel$163$Return#1;
+
+ inline$BDLGetDebugLevel$163$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$163$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon37_Then#1, inline$BDLSystemPowerIoCompletion$6$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_18_true#1, inline$BDLSystemPowerIoCompletion$6$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_19#1:
+ goto inline$BDLGetDebugLevel$164$Entry#1;
+
+ inline$BDLGetDebugLevel$164$Entry#1:
+ goto inline$BDLGetDebugLevel$164$start#1;
+
+ inline$BDLGetDebugLevel$164$start#1:
+ goto inline$BDLGetDebugLevel$164$label_3#1;
+
+ inline$BDLGetDebugLevel$164$label_3#1:
+ havoc inline$BDLGetDebugLevel$164$myNondetVar_0;
+ inline$BDLGetDebugLevel$164$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$164$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$164$label_1#1;
+
+ inline$BDLGetDebugLevel$164$label_1#1:
+ goto inline$BDLGetDebugLevel$164$Return#1;
+
+ inline$BDLGetDebugLevel$164$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$164$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon38_Then#1, inline$BDLSystemPowerIoCompletion$6$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_28_true#1, inline$BDLSystemPowerIoCompletion$6$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_29#1:
+ goto inline$BDLGetDebugLevel$165$Entry#1;
+
+ inline$BDLGetDebugLevel$165$Entry#1:
+ goto inline$BDLGetDebugLevel$165$start#1;
+
+ inline$BDLGetDebugLevel$165$start#1:
+ goto inline$BDLGetDebugLevel$165$label_3#1;
+
+ inline$BDLGetDebugLevel$165$label_3#1:
+ havoc inline$BDLGetDebugLevel$165$myNondetVar_0;
+ inline$BDLGetDebugLevel$165$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$165$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$165$label_1#1;
+
+ inline$BDLGetDebugLevel$165$label_1#1:
+ goto inline$BDLGetDebugLevel$165$Return#1;
+
+ inline$BDLGetDebugLevel$165$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$165$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon39_Then#1, inline$BDLSystemPowerIoCompletion$6$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_38_true#1, inline$BDLSystemPowerIoCompletion$6$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_39_true#1, inline$BDLSystemPowerIoCompletion$6$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$6$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$6$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$6$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$6$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$6$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_106_true#1, inline$BDLSystemPowerIoCompletion$6$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$6$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$6$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$6$myNondetVar_0, inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$6$anon50_Then#1, inline$BDLSystemPowerIoCompletion$6$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_112#1:
+ inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_113_true#1, inline$BDLSystemPowerIoCompletion$6$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$6$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_117#1:
+ goto inline$BDLGetDebugLevel$172$Entry#1;
+
+ inline$BDLGetDebugLevel$172$Entry#1:
+ goto inline$BDLGetDebugLevel$172$start#1;
+
+ inline$BDLGetDebugLevel$172$start#1:
+ goto inline$BDLGetDebugLevel$172$label_3#1;
+
+ inline$BDLGetDebugLevel$172$label_3#1:
+ havoc inline$BDLGetDebugLevel$172$myNondetVar_0;
+ inline$BDLGetDebugLevel$172$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$172$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$172$label_1#1;
+
+ inline$BDLGetDebugLevel$172$label_1#1:
+ goto inline$BDLGetDebugLevel$172$Return#1;
+
+ inline$BDLGetDebugLevel$172$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$172$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon51_Then#1, inline$BDLSystemPowerIoCompletion$6$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_120_true#1, inline$BDLSystemPowerIoCompletion$6$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_121#1:
+ goto inline$BDLGetDebugLevel$173$Entry#1;
+
+ inline$BDLGetDebugLevel$173$Entry#1:
+ goto inline$BDLGetDebugLevel$173$start#1;
+
+ inline$BDLGetDebugLevel$173$start#1:
+ goto inline$BDLGetDebugLevel$173$label_3#1;
+
+ inline$BDLGetDebugLevel$173$label_3#1:
+ havoc inline$BDLGetDebugLevel$173$myNondetVar_0;
+ inline$BDLGetDebugLevel$173$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$173$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$173$label_1#1;
+
+ inline$BDLGetDebugLevel$173$label_1#1:
+ goto inline$BDLGetDebugLevel$173$Return#1;
+
+ inline$BDLGetDebugLevel$173$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$173$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon52_Then#1, inline$BDLSystemPowerIoCompletion$6$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_130_true#1, inline$BDLSystemPowerIoCompletion$6$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_131#1:
+ goto inline$BDLGetDebugLevel$174$Entry#1;
+
+ inline$BDLGetDebugLevel$174$Entry#1:
+ goto inline$BDLGetDebugLevel$174$start#1;
+
+ inline$BDLGetDebugLevel$174$start#1:
+ goto inline$BDLGetDebugLevel$174$label_3#1;
+
+ inline$BDLGetDebugLevel$174$label_3#1:
+ havoc inline$BDLGetDebugLevel$174$myNondetVar_0;
+ inline$BDLGetDebugLevel$174$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$174$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$174$label_1#1;
+
+ inline$BDLGetDebugLevel$174$label_1#1:
+ goto inline$BDLGetDebugLevel$174$Return#1;
+
+ inline$BDLGetDebugLevel$174$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$174$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon53_Then#1, inline$BDLSystemPowerIoCompletion$6$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_140_true#1, inline$BDLSystemPowerIoCompletion$6$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$6$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_115#1:
+ inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$6$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$6$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$6$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_43#1:
+ goto inline$BDLGetDebugLevel$166$Entry#1;
+
+ inline$BDLGetDebugLevel$166$Entry#1:
+ goto inline$BDLGetDebugLevel$166$start#1;
+
+ inline$BDLGetDebugLevel$166$start#1:
+ goto inline$BDLGetDebugLevel$166$label_3#1;
+
+ inline$BDLGetDebugLevel$166$label_3#1:
+ havoc inline$BDLGetDebugLevel$166$myNondetVar_0;
+ inline$BDLGetDebugLevel$166$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$166$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$166$label_1#1;
+
+ inline$BDLGetDebugLevel$166$label_1#1:
+ goto inline$BDLGetDebugLevel$166$Return#1;
+
+ inline$BDLGetDebugLevel$166$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$166$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon40_Then#1, inline$BDLSystemPowerIoCompletion$6$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_46_true#1, inline$BDLSystemPowerIoCompletion$6$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_47#1:
+ goto inline$BDLGetDebugLevel$167$Entry#1;
+
+ inline$BDLGetDebugLevel$167$Entry#1:
+ goto inline$BDLGetDebugLevel$167$start#1;
+
+ inline$BDLGetDebugLevel$167$start#1:
+ goto inline$BDLGetDebugLevel$167$label_3#1;
+
+ inline$BDLGetDebugLevel$167$label_3#1:
+ havoc inline$BDLGetDebugLevel$167$myNondetVar_0;
+ inline$BDLGetDebugLevel$167$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$167$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$167$label_1#1;
+
+ inline$BDLGetDebugLevel$167$label_1#1:
+ goto inline$BDLGetDebugLevel$167$Return#1;
+
+ inline$BDLGetDebugLevel$167$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$167$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon41_Then#1, inline$BDLSystemPowerIoCompletion$6$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_56_true#1, inline$BDLSystemPowerIoCompletion$6$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_57#1:
+ goto inline$BDLGetDebugLevel$168$Entry#1;
+
+ inline$BDLGetDebugLevel$168$Entry#1:
+ goto inline$BDLGetDebugLevel$168$start#1;
+
+ inline$BDLGetDebugLevel$168$start#1:
+ goto inline$BDLGetDebugLevel$168$label_3#1;
+
+ inline$BDLGetDebugLevel$168$label_3#1:
+ havoc inline$BDLGetDebugLevel$168$myNondetVar_0;
+ inline$BDLGetDebugLevel$168$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$168$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$168$label_1#1;
+
+ inline$BDLGetDebugLevel$168$label_1#1:
+ goto inline$BDLGetDebugLevel$168$Return#1;
+
+ inline$BDLGetDebugLevel$168$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$168$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon42_Then#1, inline$BDLSystemPowerIoCompletion$6$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_66_true#1, inline$BDLSystemPowerIoCompletion$6$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$6$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$6$anon43_Then#1, inline$BDLSystemPowerIoCompletion$6$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$6$anon44_Then#1, inline$BDLSystemPowerIoCompletion$6$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_74#1:
+ goto inline$storm_IoCompleteRequest$14$Entry#1;
+
+ inline$storm_IoCompleteRequest$14$Entry#1:
+ inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$6$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$14$start#1;
+
+ inline$storm_IoCompleteRequest$14$start#1:
+ inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$14$label_3#1;
+
+ inline$storm_IoCompleteRequest$14$label_3#1:
+ call inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$14$label_6#1;
+
+ inline$storm_IoCompleteRequest$14$label_6#1:
+ goto inline$storm_IoCompleteRequest$14$label_6_true#1, inline$storm_IoCompleteRequest$14$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$14$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$14$label_7#1;
+
+ inline$storm_IoCompleteRequest$14$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$14$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$14$label_8#1;
+
+ inline$storm_IoCompleteRequest$14$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$14$anon3_Then#1, inline$storm_IoCompleteRequest$14$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$14$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$14$anon1#1;
+
+ inline$storm_IoCompleteRequest$14$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$14$label_9#1;
+
+ inline$storm_IoCompleteRequest$14$label_9#1:
+ goto inline$storm_IoCompleteRequest$14$label_9_true#1, inline$storm_IoCompleteRequest$14$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$14$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$14$label_10#1;
+
+ inline$storm_IoCompleteRequest$14$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$14$label_1#1;
+
+ inline$storm_IoCompleteRequest$14$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$14$label_7#1;
+
+ inline$storm_IoCompleteRequest$14$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$14$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$14$label_1#1;
+
+ inline$storm_IoCompleteRequest$14$label_1#1:
+ goto inline$storm_IoCompleteRequest$14$Return#1;
+
+ inline$storm_IoCompleteRequest$14$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$14$Return#1;
+
+ inline$storm_IoCompleteRequest$14$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon45_Then#1, inline$BDLSystemPowerIoCompletion$6$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$6$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$6$anon46_Then#1, inline$BDLSystemPowerIoCompletion$6$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_80#1:
+ goto inline$BDLGetDebugLevel$169$Entry#1;
+
+ inline$BDLGetDebugLevel$169$Entry#1:
+ goto inline$BDLGetDebugLevel$169$start#1;
+
+ inline$BDLGetDebugLevel$169$start#1:
+ goto inline$BDLGetDebugLevel$169$label_3#1;
+
+ inline$BDLGetDebugLevel$169$label_3#1:
+ havoc inline$BDLGetDebugLevel$169$myNondetVar_0;
+ inline$BDLGetDebugLevel$169$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$169$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$169$label_1#1;
+
+ inline$BDLGetDebugLevel$169$label_1#1:
+ goto inline$BDLGetDebugLevel$169$Return#1;
+
+ inline$BDLGetDebugLevel$169$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$169$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon47_Then#1, inline$BDLSystemPowerIoCompletion$6$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_83_true#1, inline$BDLSystemPowerIoCompletion$6$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_84#1:
+ goto inline$BDLGetDebugLevel$170$Entry#1;
+
+ inline$BDLGetDebugLevel$170$Entry#1:
+ goto inline$BDLGetDebugLevel$170$start#1;
+
+ inline$BDLGetDebugLevel$170$start#1:
+ goto inline$BDLGetDebugLevel$170$label_3#1;
+
+ inline$BDLGetDebugLevel$170$label_3#1:
+ havoc inline$BDLGetDebugLevel$170$myNondetVar_0;
+ inline$BDLGetDebugLevel$170$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$170$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$170$label_1#1;
+
+ inline$BDLGetDebugLevel$170$label_1#1:
+ goto inline$BDLGetDebugLevel$170$Return#1;
+
+ inline$BDLGetDebugLevel$170$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$170$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon48_Then#1, inline$BDLSystemPowerIoCompletion$6$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_93_true#1, inline$BDLSystemPowerIoCompletion$6$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$6$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$6$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_94#1:
+ goto inline$BDLGetDebugLevel$171$Entry#1;
+
+ inline$BDLGetDebugLevel$171$Entry#1:
+ goto inline$BDLGetDebugLevel$171$start#1;
+
+ inline$BDLGetDebugLevel$171$start#1:
+ goto inline$BDLGetDebugLevel$171$label_3#1;
+
+ inline$BDLGetDebugLevel$171$label_3#1:
+ havoc inline$BDLGetDebugLevel$171$myNondetVar_0;
+ inline$BDLGetDebugLevel$171$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$171$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$171$label_1#1;
+
+ inline$BDLGetDebugLevel$171$label_1#1:
+ goto inline$BDLGetDebugLevel$171$Return#1;
+
+ inline$BDLGetDebugLevel$171$Return#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$171$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$6$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$6$anon49_Then#1, inline$BDLSystemPowerIoCompletion$6$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_103_true#1, inline$BDLSystemPowerIoCompletion$6$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$6$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$6$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$6$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_104#1:
+ inline$BDLSystemPowerIoCompletion$6$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$6$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$6$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$6$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$6$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$6$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$6$Return#1:
+ inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$6$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$6$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$6$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$6$anon14_Then#1, inline$CallCompletionRoutine$6$anon14_Else#1;
+
+ inline$CallCompletionRoutine$6$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$6$anon9#1;
+
+ inline$CallCompletionRoutine$6$anon9#1:
+ goto inline$CallCompletionRoutine$6$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$6$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$6$Return#1;
+
+ inline$CallCompletionRoutine$6$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$6$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$6$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$6$Entry#1:
+ inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$6$start#1;
+
+ inline$BDLDevicePowerIoCompletion$6$start#1:
+ call inline$BDLDevicePowerIoCompletion$6$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$6$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_4#1:
+ inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_6#1:
+ inline$BDLDevicePowerIoCompletion$6$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$6$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$6$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$37$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$37$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$start#1:
+ inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$37$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$37$label_3_true#1, inline$IoGetCurrentIrpStackLocation$37$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$37$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$37$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$37$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$37$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$37$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$37$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$37$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$37$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$37$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$37$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$37$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$37$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$37$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$37$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$37$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$37$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$37$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$37$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$37$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$37$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$37$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$37$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$37$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon30_Then#1, inline$BDLDevicePowerIoCompletion$6$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_13#1:
+ inline$BDLDevicePowerIoCompletion$6$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_17#1:
+ goto inline$BDLGetDebugLevel$154$Entry#1;
+
+ inline$BDLGetDebugLevel$154$Entry#1:
+ goto inline$BDLGetDebugLevel$154$start#1;
+
+ inline$BDLGetDebugLevel$154$start#1:
+ goto inline$BDLGetDebugLevel$154$label_3#1;
+
+ inline$BDLGetDebugLevel$154$label_3#1:
+ havoc inline$BDLGetDebugLevel$154$myNondetVar_0;
+ inline$BDLGetDebugLevel$154$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$154$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$154$label_1#1;
+
+ inline$BDLGetDebugLevel$154$label_1#1:
+ goto inline$BDLGetDebugLevel$154$Return#1;
+
+ inline$BDLGetDebugLevel$154$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$154$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon31_Then#1, inline$BDLDevicePowerIoCompletion$6$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_20_true#1, inline$BDLDevicePowerIoCompletion$6$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_21#1:
+ goto inline$BDLGetDebugLevel$155$Entry#1;
+
+ inline$BDLGetDebugLevel$155$Entry#1:
+ goto inline$BDLGetDebugLevel$155$start#1;
+
+ inline$BDLGetDebugLevel$155$start#1:
+ goto inline$BDLGetDebugLevel$155$label_3#1;
+
+ inline$BDLGetDebugLevel$155$label_3#1:
+ havoc inline$BDLGetDebugLevel$155$myNondetVar_0;
+ inline$BDLGetDebugLevel$155$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$155$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$155$label_1#1;
+
+ inline$BDLGetDebugLevel$155$label_1#1:
+ goto inline$BDLGetDebugLevel$155$Return#1;
+
+ inline$BDLGetDebugLevel$155$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$155$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon32_Then#1, inline$BDLDevicePowerIoCompletion$6$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_30_true#1, inline$BDLDevicePowerIoCompletion$6$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_31#1:
+ goto inline$BDLGetDebugLevel$156$Entry#1;
+
+ inline$BDLGetDebugLevel$156$Entry#1:
+ goto inline$BDLGetDebugLevel$156$start#1;
+
+ inline$BDLGetDebugLevel$156$start#1:
+ goto inline$BDLGetDebugLevel$156$label_3#1;
+
+ inline$BDLGetDebugLevel$156$label_3#1:
+ havoc inline$BDLGetDebugLevel$156$myNondetVar_0;
+ inline$BDLGetDebugLevel$156$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$156$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$156$label_1#1;
+
+ inline$BDLGetDebugLevel$156$label_1#1:
+ goto inline$BDLGetDebugLevel$156$Return#1;
+
+ inline$BDLGetDebugLevel$156$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$156$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon33_Then#1, inline$BDLDevicePowerIoCompletion$6$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_40_true#1, inline$BDLDevicePowerIoCompletion$6$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_41_true#1, inline$BDLDevicePowerIoCompletion$6$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$6$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$6$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_44_true#1, inline$BDLDevicePowerIoCompletion$6$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_45_true#1, inline$BDLDevicePowerIoCompletion$6$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$6$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$6$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$6$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_54#1:
+ inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$6$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_55_true#1, inline$BDLDevicePowerIoCompletion$6$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$6$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$6$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$6$anon34_Then#1, inline$BDLDevicePowerIoCompletion$6$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_59#1:
+ goto inline$BDLGetDebugLevel$157$Entry#1;
+
+ inline$BDLGetDebugLevel$157$Entry#1:
+ goto inline$BDLGetDebugLevel$157$start#1;
+
+ inline$BDLGetDebugLevel$157$start#1:
+ goto inline$BDLGetDebugLevel$157$label_3#1;
+
+ inline$BDLGetDebugLevel$157$label_3#1:
+ havoc inline$BDLGetDebugLevel$157$myNondetVar_0;
+ inline$BDLGetDebugLevel$157$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$157$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$157$label_1#1;
+
+ inline$BDLGetDebugLevel$157$label_1#1:
+ goto inline$BDLGetDebugLevel$157$Return#1;
+
+ inline$BDLGetDebugLevel$157$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$157$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon35_Then#1, inline$BDLDevicePowerIoCompletion$6$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_62_true#1, inline$BDLDevicePowerIoCompletion$6$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_63#1:
+ goto inline$BDLGetDebugLevel$158$Entry#1;
+
+ inline$BDLGetDebugLevel$158$Entry#1:
+ goto inline$BDLGetDebugLevel$158$start#1;
+
+ inline$BDLGetDebugLevel$158$start#1:
+ goto inline$BDLGetDebugLevel$158$label_3#1;
+
+ inline$BDLGetDebugLevel$158$label_3#1:
+ havoc inline$BDLGetDebugLevel$158$myNondetVar_0;
+ inline$BDLGetDebugLevel$158$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$158$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$158$label_1#1;
+
+ inline$BDLGetDebugLevel$158$label_1#1:
+ goto inline$BDLGetDebugLevel$158$Return#1;
+
+ inline$BDLGetDebugLevel$158$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$158$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon36_Then#1, inline$BDLDevicePowerIoCompletion$6$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_72_true#1, inline$BDLDevicePowerIoCompletion$6$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_73#1:
+ goto inline$BDLGetDebugLevel$159$Entry#1;
+
+ inline$BDLGetDebugLevel$159$Entry#1:
+ goto inline$BDLGetDebugLevel$159$start#1;
+
+ inline$BDLGetDebugLevel$159$start#1:
+ goto inline$BDLGetDebugLevel$159$label_3#1;
+
+ inline$BDLGetDebugLevel$159$label_3#1:
+ havoc inline$BDLGetDebugLevel$159$myNondetVar_0;
+ inline$BDLGetDebugLevel$159$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$159$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$159$label_1#1;
+
+ inline$BDLGetDebugLevel$159$label_1#1:
+ goto inline$BDLGetDebugLevel$159$Return#1;
+
+ inline$BDLGetDebugLevel$159$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$159$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon37_Then#1, inline$BDLDevicePowerIoCompletion$6$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_82_true#1, inline$BDLDevicePowerIoCompletion$6$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$6$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$6$anon38_Then#1, inline$BDLDevicePowerIoCompletion$6$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$6$anon39_Then#1, inline$BDLDevicePowerIoCompletion$6$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_92#1:
+ goto inline$storm_IoCompleteRequest$13$Entry#1;
+
+ inline$storm_IoCompleteRequest$13$Entry#1:
+ inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$6$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$13$start#1;
+
+ inline$storm_IoCompleteRequest$13$start#1:
+ inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$13$label_3#1;
+
+ inline$storm_IoCompleteRequest$13$label_3#1:
+ call inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$13$label_6#1;
+
+ inline$storm_IoCompleteRequest$13$label_6#1:
+ goto inline$storm_IoCompleteRequest$13$label_6_true#1, inline$storm_IoCompleteRequest$13$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$13$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$13$label_7#1;
+
+ inline$storm_IoCompleteRequest$13$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$13$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$13$label_8#1;
+
+ inline$storm_IoCompleteRequest$13$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$13$anon3_Then#1, inline$storm_IoCompleteRequest$13$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$13$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$13$anon1#1;
+
+ inline$storm_IoCompleteRequest$13$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$13$label_9#1;
+
+ inline$storm_IoCompleteRequest$13$label_9#1:
+ goto inline$storm_IoCompleteRequest$13$label_9_true#1, inline$storm_IoCompleteRequest$13$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$13$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$13$label_10#1;
+
+ inline$storm_IoCompleteRequest$13$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$13$label_1#1;
+
+ inline$storm_IoCompleteRequest$13$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$13$label_7#1;
+
+ inline$storm_IoCompleteRequest$13$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$13$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$13$label_1#1;
+
+ inline$storm_IoCompleteRequest$13$label_1#1:
+ goto inline$storm_IoCompleteRequest$13$Return#1;
+
+ inline$storm_IoCompleteRequest$13$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$13$Return#1;
+
+ inline$storm_IoCompleteRequest$13$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon40_Then#1, inline$BDLDevicePowerIoCompletion$6$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$6$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$6$anon41_Then#1, inline$BDLDevicePowerIoCompletion$6$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_98#1:
+ goto inline$BDLGetDebugLevel$160$Entry#1;
+
+ inline$BDLGetDebugLevel$160$Entry#1:
+ goto inline$BDLGetDebugLevel$160$start#1;
+
+ inline$BDLGetDebugLevel$160$start#1:
+ goto inline$BDLGetDebugLevel$160$label_3#1;
+
+ inline$BDLGetDebugLevel$160$label_3#1:
+ havoc inline$BDLGetDebugLevel$160$myNondetVar_0;
+ inline$BDLGetDebugLevel$160$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$160$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$160$label_1#1;
+
+ inline$BDLGetDebugLevel$160$label_1#1:
+ goto inline$BDLGetDebugLevel$160$Return#1;
+
+ inline$BDLGetDebugLevel$160$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$160$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon42_Then#1, inline$BDLDevicePowerIoCompletion$6$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_101_true#1, inline$BDLDevicePowerIoCompletion$6$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_102#1:
+ goto inline$BDLGetDebugLevel$161$Entry#1;
+
+ inline$BDLGetDebugLevel$161$Entry#1:
+ goto inline$BDLGetDebugLevel$161$start#1;
+
+ inline$BDLGetDebugLevel$161$start#1:
+ goto inline$BDLGetDebugLevel$161$label_3#1;
+
+ inline$BDLGetDebugLevel$161$label_3#1:
+ havoc inline$BDLGetDebugLevel$161$myNondetVar_0;
+ inline$BDLGetDebugLevel$161$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$161$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$161$label_1#1;
+
+ inline$BDLGetDebugLevel$161$label_1#1:
+ goto inline$BDLGetDebugLevel$161$Return#1;
+
+ inline$BDLGetDebugLevel$161$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$161$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon43_Then#1, inline$BDLDevicePowerIoCompletion$6$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_111_true#1, inline$BDLDevicePowerIoCompletion$6$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$6$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$6$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_112#1:
+ goto inline$BDLGetDebugLevel$162$Entry#1;
+
+ inline$BDLGetDebugLevel$162$Entry#1:
+ goto inline$BDLGetDebugLevel$162$start#1;
+
+ inline$BDLGetDebugLevel$162$start#1:
+ goto inline$BDLGetDebugLevel$162$label_3#1;
+
+ inline$BDLGetDebugLevel$162$label_3#1:
+ havoc inline$BDLGetDebugLevel$162$myNondetVar_0;
+ inline$BDLGetDebugLevel$162$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$162$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$162$label_1#1;
+
+ inline$BDLGetDebugLevel$162$label_1#1:
+ goto inline$BDLGetDebugLevel$162$Return#1;
+
+ inline$BDLGetDebugLevel$162$Return#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$162$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$6$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$6$anon44_Then#1, inline$BDLDevicePowerIoCompletion$6$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_121_true#1, inline$BDLDevicePowerIoCompletion$6$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$6$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$6$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$6$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_122#1:
+ inline$BDLDevicePowerIoCompletion$6$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$6$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$6$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$6$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$6$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$6$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$6$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$6$Return#1:
+ inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$6$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$6$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$6$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$6$anon13_Then#1, inline$CallCompletionRoutine$6$anon13_Else#1;
+
+ inline$CallCompletionRoutine$6$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$6$anon7#1;
+
+ inline$CallCompletionRoutine$6$anon7#1:
+ goto inline$CallCompletionRoutine$6$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$6$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$6$Return#1;
+
+ inline$CallCompletionRoutine$6$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$6$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$6$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$6$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$6$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$6$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$start#1:
+ inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$6$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$6$label_3_true#1, inline$BDLCallDriverCompletionRoutine$6$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$6$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$6$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$6$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$6$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$6$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_6#1:
+ goto inline$storm_KeSetEvent$7$Entry#1;
+
+ inline$storm_KeSetEvent$7$Entry#1:
+ inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$6$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$7$start#1;
+
+ inline$storm_KeSetEvent$7$start#1:
+ inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$7$label_3#1;
+
+ inline$storm_KeSetEvent$7$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$7$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$7$label_1#1;
+
+ inline$storm_KeSetEvent$7$label_1#1:
+ goto inline$storm_KeSetEvent$7$Return#1;
+
+ inline$storm_KeSetEvent$7$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$6$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$6$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$6$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$6$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$6$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$6$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$6$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$6$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$6$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$6$Return#1:
+ inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$6$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$6$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$6$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$6$anon12_Then#1, inline$CallCompletionRoutine$6$anon12_Else#1;
+
+ inline$CallCompletionRoutine$6$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$6$anon5#1;
+
+ inline$CallCompletionRoutine$6$anon5#1:
+ goto inline$CallCompletionRoutine$6$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$6$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$6$label_23#1;
+
+ inline$CallCompletionRoutine$6$label_23#1:
+ inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$6$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$6$label_24#1;
+
+ inline$CallCompletionRoutine$6$label_24#1:
+ goto inline$CallCompletionRoutine$6$label_24_true#1, inline$CallCompletionRoutine$6$label_24_false#1;
+
+ inline$CallCompletionRoutine$6$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$6$label_1#1;
+
+ inline$CallCompletionRoutine$6$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$6$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$6$label_25#1;
+
+ inline$CallCompletionRoutine$6$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$6$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$6$label_1#1;
+
+ inline$CallCompletionRoutine$6$label_1#1:
+ goto inline$CallCompletionRoutine$6$Return#1;
+
+ inline$CallCompletionRoutine$6$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$6$Return#1;
+
+ inline$CallCompletionRoutine$6$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$6$Return#1;
+
+ inline$CallCompletionRoutine$6$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$6$Return#1;
+
+ inline$CallCompletionRoutine$6$Return#1:
+ goto inline$storm_IoCallDriver$3$label_33$1#1;
+
+ inline$storm_IoCallDriver$3$label_33$1#1:
+ goto inline$storm_IoCallDriver$3$anon14_Then#1, inline$storm_IoCallDriver$3$anon14_Else#1;
+
+ inline$storm_IoCallDriver$3$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$3$anon8#1;
+
+ inline$storm_IoCallDriver$3$anon8#1:
+ goto inline$storm_IoCallDriver$3$label_36#1;
+
+ inline$storm_IoCallDriver$3$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$3$Return#1;
+
+ inline$storm_IoCallDriver$3$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$3$label_29#1;
+
+ inline$storm_IoCallDriver$3$label_29#1:
+ inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$3$label_37#1;
+
+ inline$storm_IoCallDriver$3$label_37#1:
+ goto inline$storm_IoCallDriver$3$label_38#1;
+
+ inline$storm_IoCallDriver$3$label_38#1:
+ goto inline$storm_IoCallDriver$3$label_39#1;
+
+ inline$storm_IoCallDriver$3$label_39#1:
+ goto inline$CallCompletionRoutine$7$Entry#1;
+
+ inline$CallCompletionRoutine$7$Entry#1:
+ inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$7$start#1;
+
+ inline$CallCompletionRoutine$7$start#1:
+ inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$7$label_3#1;
+
+ inline$CallCompletionRoutine$7$label_3#1:
+ goto inline$CallCompletionRoutine$7$label_4#1;
+
+ inline$CallCompletionRoutine$7$label_4#1:
+ goto inline$CallCompletionRoutine$7$label_5#1;
+
+ inline$CallCompletionRoutine$7$label_5#1:
+ goto inline$CallCompletionRoutine$7$label_6#1;
+
+ inline$CallCompletionRoutine$7$label_6#1:
+ goto inline$CallCompletionRoutine$7$label_7#1;
+
+ inline$CallCompletionRoutine$7$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$39$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$39$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$start#1:
+ inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$39$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$39$label_3_true#1, inline$IoGetCurrentIrpStackLocation$39$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$39$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$39$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$39$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$39$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$39$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$39$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$39$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$39$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$39$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$39$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$39$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$39$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$39$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$39$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$39$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$39$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$39$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$39$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$39$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$39$Return#1:
+ goto inline$CallCompletionRoutine$7$label_7$1#1;
+
+ inline$CallCompletionRoutine$7$label_7$1#1:
+ goto inline$CallCompletionRoutine$7$anon10_Then#1, inline$CallCompletionRoutine$7$anon10_Else#1;
+
+ inline$CallCompletionRoutine$7$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$7$anon1#1;
+
+ inline$CallCompletionRoutine$7$anon1#1:
+ goto inline$CallCompletionRoutine$7$label_10#1;
+
+ inline$CallCompletionRoutine$7$label_10#1:
+ goto inline$CallCompletionRoutine$7$label_11#1;
+
+ inline$CallCompletionRoutine$7$label_11#1:
+ havoc inline$CallCompletionRoutine$7$myNondetVar_0;
+ inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$myNondetVar_0;
+ goto inline$CallCompletionRoutine$7$label_12#1;
+
+ inline$CallCompletionRoutine$7$label_12#1:
+ havoc inline$CallCompletionRoutine$7$myNondetVar_0;
+ inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$myNondetVar_0;
+ goto inline$CallCompletionRoutine$7$label_13#1;
+
+ inline$CallCompletionRoutine$7$label_13#1:
+ havoc inline$CallCompletionRoutine$7$myNondetVar_0;
+ goto inline$CallCompletionRoutine$7$label_14#1;
+
+ inline$CallCompletionRoutine$7$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$40$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$40$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$start#1:
+ inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$40$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$40$label_3_true#1, inline$IoGetCurrentIrpStackLocation$40$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$40$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$40$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$40$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$40$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$40$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$40$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$40$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$40$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$40$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$40$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$40$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$40$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$40$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$40$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$40$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$40$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$40$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$40$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$40$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$40$Return#1:
+ goto inline$CallCompletionRoutine$7$label_14$1#1;
+
+ inline$CallCompletionRoutine$7$label_14$1#1:
+ goto inline$CallCompletionRoutine$7$anon11_Then#1, inline$CallCompletionRoutine$7$anon11_Else#1;
+
+ inline$CallCompletionRoutine$7$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$7$anon3#1;
+
+ inline$CallCompletionRoutine$7$anon3#1:
+ goto inline$CallCompletionRoutine$7$label_17#1;
+
+ inline$CallCompletionRoutine$7$label_17#1:
+ goto inline$CallCompletionRoutine$7$label_18#1;
+
+ inline$CallCompletionRoutine$7$label_18#1:
+ goto inline$CallCompletionRoutine$7$label_18_true#1, inline$CallCompletionRoutine$7$label_18_false#1;
+
+ inline$CallCompletionRoutine$7$label_18_false#1:
+ assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$7$label_1#1;
+
+ inline$CallCompletionRoutine$7$label_18_true#1:
+ assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$7$label_19#1;
+
+ inline$CallCompletionRoutine$7$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$7$label_20#1;
+
+ inline$CallCompletionRoutine$7$label_20#1:
+ goto inline$CallCompletionRoutine$7$label_20_icall_1#1, inline$CallCompletionRoutine$7$label_20_icall_2#1, inline$CallCompletionRoutine$7$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$7$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$7$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$7$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$7$Entry#1:
+ inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$7$start#1;
+
+ inline$BDLSystemPowerIoCompletion$7$start#1:
+ call inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$7$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_4#1:
+ inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_6#1:
+ inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$7$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$7$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$42$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$42$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$start#1:
+ inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$42$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$42$label_3_true#1, inline$IoGetCurrentIrpStackLocation$42$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$42$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$42$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$42$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$42$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$42$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$42$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$42$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$42$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$42$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$42$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$42$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$42$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$42$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$42$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$42$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$42$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$42$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$42$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$42$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$42$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon36_Then#1, inline$BDLSystemPowerIoCompletion$7$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_15#1:
+ goto inline$BDLGetDebugLevel$184$Entry#1;
+
+ inline$BDLGetDebugLevel$184$Entry#1:
+ goto inline$BDLGetDebugLevel$184$start#1;
+
+ inline$BDLGetDebugLevel$184$start#1:
+ goto inline$BDLGetDebugLevel$184$label_3#1;
+
+ inline$BDLGetDebugLevel$184$label_3#1:
+ havoc inline$BDLGetDebugLevel$184$myNondetVar_0;
+ inline$BDLGetDebugLevel$184$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$184$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$184$label_1#1;
+
+ inline$BDLGetDebugLevel$184$label_1#1:
+ goto inline$BDLGetDebugLevel$184$Return#1;
+
+ inline$BDLGetDebugLevel$184$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$184$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon37_Then#1, inline$BDLSystemPowerIoCompletion$7$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_18_true#1, inline$BDLSystemPowerIoCompletion$7$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_19#1:
+ goto inline$BDLGetDebugLevel$185$Entry#1;
+
+ inline$BDLGetDebugLevel$185$Entry#1:
+ goto inline$BDLGetDebugLevel$185$start#1;
+
+ inline$BDLGetDebugLevel$185$start#1:
+ goto inline$BDLGetDebugLevel$185$label_3#1;
+
+ inline$BDLGetDebugLevel$185$label_3#1:
+ havoc inline$BDLGetDebugLevel$185$myNondetVar_0;
+ inline$BDLGetDebugLevel$185$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$185$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$185$label_1#1;
+
+ inline$BDLGetDebugLevel$185$label_1#1:
+ goto inline$BDLGetDebugLevel$185$Return#1;
+
+ inline$BDLGetDebugLevel$185$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$185$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon38_Then#1, inline$BDLSystemPowerIoCompletion$7$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_28_true#1, inline$BDLSystemPowerIoCompletion$7$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_29#1:
+ goto inline$BDLGetDebugLevel$186$Entry#1;
+
+ inline$BDLGetDebugLevel$186$Entry#1:
+ goto inline$BDLGetDebugLevel$186$start#1;
+
+ inline$BDLGetDebugLevel$186$start#1:
+ goto inline$BDLGetDebugLevel$186$label_3#1;
+
+ inline$BDLGetDebugLevel$186$label_3#1:
+ havoc inline$BDLGetDebugLevel$186$myNondetVar_0;
+ inline$BDLGetDebugLevel$186$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$186$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$186$label_1#1;
+
+ inline$BDLGetDebugLevel$186$label_1#1:
+ goto inline$BDLGetDebugLevel$186$Return#1;
+
+ inline$BDLGetDebugLevel$186$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$186$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon39_Then#1, inline$BDLSystemPowerIoCompletion$7$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_38_true#1, inline$BDLSystemPowerIoCompletion$7$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_39_true#1, inline$BDLSystemPowerIoCompletion$7$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$7$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$7$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$7$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$7$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$7$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_106_true#1, inline$BDLSystemPowerIoCompletion$7$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$7$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$7$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$7$myNondetVar_0, inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$7$anon50_Then#1, inline$BDLSystemPowerIoCompletion$7$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_112#1:
+ inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_113_true#1, inline$BDLSystemPowerIoCompletion$7$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$7$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_117#1:
+ goto inline$BDLGetDebugLevel$193$Entry#1;
+
+ inline$BDLGetDebugLevel$193$Entry#1:
+ goto inline$BDLGetDebugLevel$193$start#1;
+
+ inline$BDLGetDebugLevel$193$start#1:
+ goto inline$BDLGetDebugLevel$193$label_3#1;
+
+ inline$BDLGetDebugLevel$193$label_3#1:
+ havoc inline$BDLGetDebugLevel$193$myNondetVar_0;
+ inline$BDLGetDebugLevel$193$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$193$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$193$label_1#1;
+
+ inline$BDLGetDebugLevel$193$label_1#1:
+ goto inline$BDLGetDebugLevel$193$Return#1;
+
+ inline$BDLGetDebugLevel$193$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$193$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon51_Then#1, inline$BDLSystemPowerIoCompletion$7$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_120_true#1, inline$BDLSystemPowerIoCompletion$7$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_121#1:
+ goto inline$BDLGetDebugLevel$194$Entry#1;
+
+ inline$BDLGetDebugLevel$194$Entry#1:
+ goto inline$BDLGetDebugLevel$194$start#1;
+
+ inline$BDLGetDebugLevel$194$start#1:
+ goto inline$BDLGetDebugLevel$194$label_3#1;
+
+ inline$BDLGetDebugLevel$194$label_3#1:
+ havoc inline$BDLGetDebugLevel$194$myNondetVar_0;
+ inline$BDLGetDebugLevel$194$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$194$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$194$label_1#1;
+
+ inline$BDLGetDebugLevel$194$label_1#1:
+ goto inline$BDLGetDebugLevel$194$Return#1;
+
+ inline$BDLGetDebugLevel$194$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$194$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon52_Then#1, inline$BDLSystemPowerIoCompletion$7$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_130_true#1, inline$BDLSystemPowerIoCompletion$7$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_131#1:
+ goto inline$BDLGetDebugLevel$195$Entry#1;
+
+ inline$BDLGetDebugLevel$195$Entry#1:
+ goto inline$BDLGetDebugLevel$195$start#1;
+
+ inline$BDLGetDebugLevel$195$start#1:
+ goto inline$BDLGetDebugLevel$195$label_3#1;
+
+ inline$BDLGetDebugLevel$195$label_3#1:
+ havoc inline$BDLGetDebugLevel$195$myNondetVar_0;
+ inline$BDLGetDebugLevel$195$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$195$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$195$label_1#1;
+
+ inline$BDLGetDebugLevel$195$label_1#1:
+ goto inline$BDLGetDebugLevel$195$Return#1;
+
+ inline$BDLGetDebugLevel$195$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$195$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon53_Then#1, inline$BDLSystemPowerIoCompletion$7$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_140_true#1, inline$BDLSystemPowerIoCompletion$7$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$7$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_115#1:
+ inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$7$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$7$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$7$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_43#1:
+ goto inline$BDLGetDebugLevel$187$Entry#1;
+
+ inline$BDLGetDebugLevel$187$Entry#1:
+ goto inline$BDLGetDebugLevel$187$start#1;
+
+ inline$BDLGetDebugLevel$187$start#1:
+ goto inline$BDLGetDebugLevel$187$label_3#1;
+
+ inline$BDLGetDebugLevel$187$label_3#1:
+ havoc inline$BDLGetDebugLevel$187$myNondetVar_0;
+ inline$BDLGetDebugLevel$187$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$187$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$187$label_1#1;
+
+ inline$BDLGetDebugLevel$187$label_1#1:
+ goto inline$BDLGetDebugLevel$187$Return#1;
+
+ inline$BDLGetDebugLevel$187$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$187$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon40_Then#1, inline$BDLSystemPowerIoCompletion$7$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_46_true#1, inline$BDLSystemPowerIoCompletion$7$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_47#1:
+ goto inline$BDLGetDebugLevel$188$Entry#1;
+
+ inline$BDLGetDebugLevel$188$Entry#1:
+ goto inline$BDLGetDebugLevel$188$start#1;
+
+ inline$BDLGetDebugLevel$188$start#1:
+ goto inline$BDLGetDebugLevel$188$label_3#1;
+
+ inline$BDLGetDebugLevel$188$label_3#1:
+ havoc inline$BDLGetDebugLevel$188$myNondetVar_0;
+ inline$BDLGetDebugLevel$188$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$188$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$188$label_1#1;
+
+ inline$BDLGetDebugLevel$188$label_1#1:
+ goto inline$BDLGetDebugLevel$188$Return#1;
+
+ inline$BDLGetDebugLevel$188$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$188$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon41_Then#1, inline$BDLSystemPowerIoCompletion$7$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_56_true#1, inline$BDLSystemPowerIoCompletion$7$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_57#1:
+ goto inline$BDLGetDebugLevel$189$Entry#1;
+
+ inline$BDLGetDebugLevel$189$Entry#1:
+ goto inline$BDLGetDebugLevel$189$start#1;
+
+ inline$BDLGetDebugLevel$189$start#1:
+ goto inline$BDLGetDebugLevel$189$label_3#1;
+
+ inline$BDLGetDebugLevel$189$label_3#1:
+ havoc inline$BDLGetDebugLevel$189$myNondetVar_0;
+ inline$BDLGetDebugLevel$189$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$189$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$189$label_1#1;
+
+ inline$BDLGetDebugLevel$189$label_1#1:
+ goto inline$BDLGetDebugLevel$189$Return#1;
+
+ inline$BDLGetDebugLevel$189$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$189$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon42_Then#1, inline$BDLSystemPowerIoCompletion$7$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_66_true#1, inline$BDLSystemPowerIoCompletion$7$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$7$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$7$anon43_Then#1, inline$BDLSystemPowerIoCompletion$7$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$7$anon44_Then#1, inline$BDLSystemPowerIoCompletion$7$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_74#1:
+ goto inline$storm_IoCompleteRequest$16$Entry#1;
+
+ inline$storm_IoCompleteRequest$16$Entry#1:
+ inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$7$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$16$start#1;
+
+ inline$storm_IoCompleteRequest$16$start#1:
+ inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$16$label_3#1;
+
+ inline$storm_IoCompleteRequest$16$label_3#1:
+ call inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$16$label_6#1;
+
+ inline$storm_IoCompleteRequest$16$label_6#1:
+ goto inline$storm_IoCompleteRequest$16$label_6_true#1, inline$storm_IoCompleteRequest$16$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$16$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$16$label_7#1;
+
+ inline$storm_IoCompleteRequest$16$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$16$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$16$label_8#1;
+
+ inline$storm_IoCompleteRequest$16$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$16$anon3_Then#1, inline$storm_IoCompleteRequest$16$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$16$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$16$anon1#1;
+
+ inline$storm_IoCompleteRequest$16$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$16$label_9#1;
+
+ inline$storm_IoCompleteRequest$16$label_9#1:
+ goto inline$storm_IoCompleteRequest$16$label_9_true#1, inline$storm_IoCompleteRequest$16$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$16$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$16$label_10#1;
+
+ inline$storm_IoCompleteRequest$16$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$16$label_1#1;
+
+ inline$storm_IoCompleteRequest$16$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$16$label_7#1;
+
+ inline$storm_IoCompleteRequest$16$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$16$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$16$label_1#1;
+
+ inline$storm_IoCompleteRequest$16$label_1#1:
+ goto inline$storm_IoCompleteRequest$16$Return#1;
+
+ inline$storm_IoCompleteRequest$16$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$16$Return#1;
+
+ inline$storm_IoCompleteRequest$16$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon45_Then#1, inline$BDLSystemPowerIoCompletion$7$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$7$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$7$anon46_Then#1, inline$BDLSystemPowerIoCompletion$7$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_80#1:
+ goto inline$BDLGetDebugLevel$190$Entry#1;
+
+ inline$BDLGetDebugLevel$190$Entry#1:
+ goto inline$BDLGetDebugLevel$190$start#1;
+
+ inline$BDLGetDebugLevel$190$start#1:
+ goto inline$BDLGetDebugLevel$190$label_3#1;
+
+ inline$BDLGetDebugLevel$190$label_3#1:
+ havoc inline$BDLGetDebugLevel$190$myNondetVar_0;
+ inline$BDLGetDebugLevel$190$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$190$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$190$label_1#1;
+
+ inline$BDLGetDebugLevel$190$label_1#1:
+ goto inline$BDLGetDebugLevel$190$Return#1;
+
+ inline$BDLGetDebugLevel$190$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$190$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon47_Then#1, inline$BDLSystemPowerIoCompletion$7$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_83_true#1, inline$BDLSystemPowerIoCompletion$7$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_84#1:
+ goto inline$BDLGetDebugLevel$191$Entry#1;
+
+ inline$BDLGetDebugLevel$191$Entry#1:
+ goto inline$BDLGetDebugLevel$191$start#1;
+
+ inline$BDLGetDebugLevel$191$start#1:
+ goto inline$BDLGetDebugLevel$191$label_3#1;
+
+ inline$BDLGetDebugLevel$191$label_3#1:
+ havoc inline$BDLGetDebugLevel$191$myNondetVar_0;
+ inline$BDLGetDebugLevel$191$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$191$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$191$label_1#1;
+
+ inline$BDLGetDebugLevel$191$label_1#1:
+ goto inline$BDLGetDebugLevel$191$Return#1;
+
+ inline$BDLGetDebugLevel$191$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$191$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon48_Then#1, inline$BDLSystemPowerIoCompletion$7$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_93_true#1, inline$BDLSystemPowerIoCompletion$7$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$7$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$7$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_94#1:
+ goto inline$BDLGetDebugLevel$192$Entry#1;
+
+ inline$BDLGetDebugLevel$192$Entry#1:
+ goto inline$BDLGetDebugLevel$192$start#1;
+
+ inline$BDLGetDebugLevel$192$start#1:
+ goto inline$BDLGetDebugLevel$192$label_3#1;
+
+ inline$BDLGetDebugLevel$192$label_3#1:
+ havoc inline$BDLGetDebugLevel$192$myNondetVar_0;
+ inline$BDLGetDebugLevel$192$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$192$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$192$label_1#1;
+
+ inline$BDLGetDebugLevel$192$label_1#1:
+ goto inline$BDLGetDebugLevel$192$Return#1;
+
+ inline$BDLGetDebugLevel$192$Return#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$192$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$7$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$7$anon49_Then#1, inline$BDLSystemPowerIoCompletion$7$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_103_true#1, inline$BDLSystemPowerIoCompletion$7$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$7$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$7$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$7$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_104#1:
+ inline$BDLSystemPowerIoCompletion$7$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$7$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$7$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$7$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$7$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$7$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$7$Return#1:
+ inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$7$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$7$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$7$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$7$anon14_Then#1, inline$CallCompletionRoutine$7$anon14_Else#1;
+
+ inline$CallCompletionRoutine$7$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$7$anon9#1;
+
+ inline$CallCompletionRoutine$7$anon9#1:
+ goto inline$CallCompletionRoutine$7$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$7$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$7$Return#1;
+
+ inline$CallCompletionRoutine$7$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$7$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$7$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$7$Entry#1:
+ inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$7$start#1;
+
+ inline$BDLDevicePowerIoCompletion$7$start#1:
+ call inline$BDLDevicePowerIoCompletion$7$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$7$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_4#1:
+ inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_6#1:
+ inline$BDLDevicePowerIoCompletion$7$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$7$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$7$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$41$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$41$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$start#1:
+ inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$41$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$41$label_3_true#1, inline$IoGetCurrentIrpStackLocation$41$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$41$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$41$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$41$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$41$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$41$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$41$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$41$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$41$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$41$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$41$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$41$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$41$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$41$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$41$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$41$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$41$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$41$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$41$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$41$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$41$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$41$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$41$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$41$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon30_Then#1, inline$BDLDevicePowerIoCompletion$7$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_13#1:
+ inline$BDLDevicePowerIoCompletion$7$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_17#1:
+ goto inline$BDLGetDebugLevel$175$Entry#1;
+
+ inline$BDLGetDebugLevel$175$Entry#1:
+ goto inline$BDLGetDebugLevel$175$start#1;
+
+ inline$BDLGetDebugLevel$175$start#1:
+ goto inline$BDLGetDebugLevel$175$label_3#1;
+
+ inline$BDLGetDebugLevel$175$label_3#1:
+ havoc inline$BDLGetDebugLevel$175$myNondetVar_0;
+ inline$BDLGetDebugLevel$175$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$175$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$175$label_1#1;
+
+ inline$BDLGetDebugLevel$175$label_1#1:
+ goto inline$BDLGetDebugLevel$175$Return#1;
+
+ inline$BDLGetDebugLevel$175$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$175$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon31_Then#1, inline$BDLDevicePowerIoCompletion$7$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_20_true#1, inline$BDLDevicePowerIoCompletion$7$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_21#1:
+ goto inline$BDLGetDebugLevel$176$Entry#1;
+
+ inline$BDLGetDebugLevel$176$Entry#1:
+ goto inline$BDLGetDebugLevel$176$start#1;
+
+ inline$BDLGetDebugLevel$176$start#1:
+ goto inline$BDLGetDebugLevel$176$label_3#1;
+
+ inline$BDLGetDebugLevel$176$label_3#1:
+ havoc inline$BDLGetDebugLevel$176$myNondetVar_0;
+ inline$BDLGetDebugLevel$176$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$176$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$176$label_1#1;
+
+ inline$BDLGetDebugLevel$176$label_1#1:
+ goto inline$BDLGetDebugLevel$176$Return#1;
+
+ inline$BDLGetDebugLevel$176$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$176$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon32_Then#1, inline$BDLDevicePowerIoCompletion$7$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_30_true#1, inline$BDLDevicePowerIoCompletion$7$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_31#1:
+ goto inline$BDLGetDebugLevel$177$Entry#1;
+
+ inline$BDLGetDebugLevel$177$Entry#1:
+ goto inline$BDLGetDebugLevel$177$start#1;
+
+ inline$BDLGetDebugLevel$177$start#1:
+ goto inline$BDLGetDebugLevel$177$label_3#1;
+
+ inline$BDLGetDebugLevel$177$label_3#1:
+ havoc inline$BDLGetDebugLevel$177$myNondetVar_0;
+ inline$BDLGetDebugLevel$177$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$177$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$177$label_1#1;
+
+ inline$BDLGetDebugLevel$177$label_1#1:
+ goto inline$BDLGetDebugLevel$177$Return#1;
+
+ inline$BDLGetDebugLevel$177$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$177$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon33_Then#1, inline$BDLDevicePowerIoCompletion$7$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_40_true#1, inline$BDLDevicePowerIoCompletion$7$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_41_true#1, inline$BDLDevicePowerIoCompletion$7$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$7$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$7$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_44_true#1, inline$BDLDevicePowerIoCompletion$7$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_45_true#1, inline$BDLDevicePowerIoCompletion$7$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$7$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$7$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$7$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_54#1:
+ inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$7$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_55_true#1, inline$BDLDevicePowerIoCompletion$7$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$7$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$7$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$7$anon34_Then#1, inline$BDLDevicePowerIoCompletion$7$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_59#1:
+ goto inline$BDLGetDebugLevel$178$Entry#1;
+
+ inline$BDLGetDebugLevel$178$Entry#1:
+ goto inline$BDLGetDebugLevel$178$start#1;
+
+ inline$BDLGetDebugLevel$178$start#1:
+ goto inline$BDLGetDebugLevel$178$label_3#1;
+
+ inline$BDLGetDebugLevel$178$label_3#1:
+ havoc inline$BDLGetDebugLevel$178$myNondetVar_0;
+ inline$BDLGetDebugLevel$178$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$178$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$178$label_1#1;
+
+ inline$BDLGetDebugLevel$178$label_1#1:
+ goto inline$BDLGetDebugLevel$178$Return#1;
+
+ inline$BDLGetDebugLevel$178$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$178$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon35_Then#1, inline$BDLDevicePowerIoCompletion$7$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_62_true#1, inline$BDLDevicePowerIoCompletion$7$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_63#1:
+ goto inline$BDLGetDebugLevel$179$Entry#1;
+
+ inline$BDLGetDebugLevel$179$Entry#1:
+ goto inline$BDLGetDebugLevel$179$start#1;
+
+ inline$BDLGetDebugLevel$179$start#1:
+ goto inline$BDLGetDebugLevel$179$label_3#1;
+
+ inline$BDLGetDebugLevel$179$label_3#1:
+ havoc inline$BDLGetDebugLevel$179$myNondetVar_0;
+ inline$BDLGetDebugLevel$179$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$179$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$179$label_1#1;
+
+ inline$BDLGetDebugLevel$179$label_1#1:
+ goto inline$BDLGetDebugLevel$179$Return#1;
+
+ inline$BDLGetDebugLevel$179$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$179$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon36_Then#1, inline$BDLDevicePowerIoCompletion$7$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_72_true#1, inline$BDLDevicePowerIoCompletion$7$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_73#1:
+ goto inline$BDLGetDebugLevel$180$Entry#1;
+
+ inline$BDLGetDebugLevel$180$Entry#1:
+ goto inline$BDLGetDebugLevel$180$start#1;
+
+ inline$BDLGetDebugLevel$180$start#1:
+ goto inline$BDLGetDebugLevel$180$label_3#1;
+
+ inline$BDLGetDebugLevel$180$label_3#1:
+ havoc inline$BDLGetDebugLevel$180$myNondetVar_0;
+ inline$BDLGetDebugLevel$180$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$180$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$180$label_1#1;
+
+ inline$BDLGetDebugLevel$180$label_1#1:
+ goto inline$BDLGetDebugLevel$180$Return#1;
+
+ inline$BDLGetDebugLevel$180$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$180$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon37_Then#1, inline$BDLDevicePowerIoCompletion$7$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_82_true#1, inline$BDLDevicePowerIoCompletion$7$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$7$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$7$anon38_Then#1, inline$BDLDevicePowerIoCompletion$7$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$7$anon39_Then#1, inline$BDLDevicePowerIoCompletion$7$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_92#1:
+ goto inline$storm_IoCompleteRequest$15$Entry#1;
+
+ inline$storm_IoCompleteRequest$15$Entry#1:
+ inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$7$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$15$start#1;
+
+ inline$storm_IoCompleteRequest$15$start#1:
+ inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$15$label_3#1;
+
+ inline$storm_IoCompleteRequest$15$label_3#1:
+ call inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$15$label_6#1;
+
+ inline$storm_IoCompleteRequest$15$label_6#1:
+ goto inline$storm_IoCompleteRequest$15$label_6_true#1, inline$storm_IoCompleteRequest$15$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$15$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$15$label_7#1;
+
+ inline$storm_IoCompleteRequest$15$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$15$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$15$label_8#1;
+
+ inline$storm_IoCompleteRequest$15$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$15$anon3_Then#1, inline$storm_IoCompleteRequest$15$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$15$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$15$anon1#1;
+
+ inline$storm_IoCompleteRequest$15$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$15$label_9#1;
+
+ inline$storm_IoCompleteRequest$15$label_9#1:
+ goto inline$storm_IoCompleteRequest$15$label_9_true#1, inline$storm_IoCompleteRequest$15$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$15$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$15$label_10#1;
+
+ inline$storm_IoCompleteRequest$15$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$15$label_1#1;
+
+ inline$storm_IoCompleteRequest$15$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$15$label_7#1;
+
+ inline$storm_IoCompleteRequest$15$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$15$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$15$label_1#1;
+
+ inline$storm_IoCompleteRequest$15$label_1#1:
+ goto inline$storm_IoCompleteRequest$15$Return#1;
+
+ inline$storm_IoCompleteRequest$15$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$15$Return#1;
+
+ inline$storm_IoCompleteRequest$15$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon40_Then#1, inline$BDLDevicePowerIoCompletion$7$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$7$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$7$anon41_Then#1, inline$BDLDevicePowerIoCompletion$7$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_98#1:
+ goto inline$BDLGetDebugLevel$181$Entry#1;
+
+ inline$BDLGetDebugLevel$181$Entry#1:
+ goto inline$BDLGetDebugLevel$181$start#1;
+
+ inline$BDLGetDebugLevel$181$start#1:
+ goto inline$BDLGetDebugLevel$181$label_3#1;
+
+ inline$BDLGetDebugLevel$181$label_3#1:
+ havoc inline$BDLGetDebugLevel$181$myNondetVar_0;
+ inline$BDLGetDebugLevel$181$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$181$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$181$label_1#1;
+
+ inline$BDLGetDebugLevel$181$label_1#1:
+ goto inline$BDLGetDebugLevel$181$Return#1;
+
+ inline$BDLGetDebugLevel$181$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$181$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon42_Then#1, inline$BDLDevicePowerIoCompletion$7$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_101_true#1, inline$BDLDevicePowerIoCompletion$7$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_102#1:
+ goto inline$BDLGetDebugLevel$182$Entry#1;
+
+ inline$BDLGetDebugLevel$182$Entry#1:
+ goto inline$BDLGetDebugLevel$182$start#1;
+
+ inline$BDLGetDebugLevel$182$start#1:
+ goto inline$BDLGetDebugLevel$182$label_3#1;
+
+ inline$BDLGetDebugLevel$182$label_3#1:
+ havoc inline$BDLGetDebugLevel$182$myNondetVar_0;
+ inline$BDLGetDebugLevel$182$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$182$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$182$label_1#1;
+
+ inline$BDLGetDebugLevel$182$label_1#1:
+ goto inline$BDLGetDebugLevel$182$Return#1;
+
+ inline$BDLGetDebugLevel$182$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$182$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon43_Then#1, inline$BDLDevicePowerIoCompletion$7$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_111_true#1, inline$BDLDevicePowerIoCompletion$7$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$7$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$7$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_112#1:
+ goto inline$BDLGetDebugLevel$183$Entry#1;
+
+ inline$BDLGetDebugLevel$183$Entry#1:
+ goto inline$BDLGetDebugLevel$183$start#1;
+
+ inline$BDLGetDebugLevel$183$start#1:
+ goto inline$BDLGetDebugLevel$183$label_3#1;
+
+ inline$BDLGetDebugLevel$183$label_3#1:
+ havoc inline$BDLGetDebugLevel$183$myNondetVar_0;
+ inline$BDLGetDebugLevel$183$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$183$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$183$label_1#1;
+
+ inline$BDLGetDebugLevel$183$label_1#1:
+ goto inline$BDLGetDebugLevel$183$Return#1;
+
+ inline$BDLGetDebugLevel$183$Return#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$183$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$7$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$7$anon44_Then#1, inline$BDLDevicePowerIoCompletion$7$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_121_true#1, inline$BDLDevicePowerIoCompletion$7$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$7$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$7$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$7$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_122#1:
+ inline$BDLDevicePowerIoCompletion$7$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$7$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$7$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$7$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$7$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$7$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$7$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$7$Return#1:
+ inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$7$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$7$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$7$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$7$anon13_Then#1, inline$CallCompletionRoutine$7$anon13_Else#1;
+
+ inline$CallCompletionRoutine$7$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$7$anon7#1;
+
+ inline$CallCompletionRoutine$7$anon7#1:
+ goto inline$CallCompletionRoutine$7$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$7$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$7$Return#1;
+
+ inline$CallCompletionRoutine$7$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$7$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$7$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$7$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$7$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$7$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$start#1:
+ inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$7$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$7$label_3_true#1, inline$BDLCallDriverCompletionRoutine$7$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$7$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$7$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$7$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$7$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$7$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_6#1:
+ goto inline$storm_KeSetEvent$8$Entry#1;
+
+ inline$storm_KeSetEvent$8$Entry#1:
+ inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$7$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$8$start#1;
+
+ inline$storm_KeSetEvent$8$start#1:
+ inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$8$label_3#1;
+
+ inline$storm_KeSetEvent$8$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$8$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$8$label_1#1;
+
+ inline$storm_KeSetEvent$8$label_1#1:
+ goto inline$storm_KeSetEvent$8$Return#1;
+
+ inline$storm_KeSetEvent$8$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$7$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$7$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$7$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$7$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$7$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$7$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$7$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$7$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$7$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$7$Return#1:
+ inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$7$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$7$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$7$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$7$anon12_Then#1, inline$CallCompletionRoutine$7$anon12_Else#1;
+
+ inline$CallCompletionRoutine$7$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$7$anon5#1;
+
+ inline$CallCompletionRoutine$7$anon5#1:
+ goto inline$CallCompletionRoutine$7$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$7$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$7$label_23#1;
+
+ inline$CallCompletionRoutine$7$label_23#1:
+ inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$7$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$7$label_24#1;
+
+ inline$CallCompletionRoutine$7$label_24#1:
+ goto inline$CallCompletionRoutine$7$label_24_true#1, inline$CallCompletionRoutine$7$label_24_false#1;
+
+ inline$CallCompletionRoutine$7$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$7$label_1#1;
+
+ inline$CallCompletionRoutine$7$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$7$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$7$label_25#1;
+
+ inline$CallCompletionRoutine$7$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$7$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$7$label_1#1;
+
+ inline$CallCompletionRoutine$7$label_1#1:
+ goto inline$CallCompletionRoutine$7$Return#1;
+
+ inline$CallCompletionRoutine$7$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$7$Return#1;
+
+ inline$CallCompletionRoutine$7$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$7$Return#1;
+
+ inline$CallCompletionRoutine$7$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$7$Return#1;
+
+ inline$CallCompletionRoutine$7$Return#1:
+ goto inline$storm_IoCallDriver$3$label_39$1#1;
+
+ inline$storm_IoCallDriver$3$label_39$1#1:
+ goto inline$storm_IoCallDriver$3$anon15_Then#1, inline$storm_IoCallDriver$3$anon15_Else#1;
+
+ inline$storm_IoCallDriver$3$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$3$anon10#1;
+
+ inline$storm_IoCallDriver$3$anon10#1:
+ goto inline$storm_IoCallDriver$3$label_36#1;
+
+ inline$storm_IoCallDriver$3$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$3$Return#1;
+
+ inline$storm_IoCallDriver$3$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$3$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$3$label_28#1;
+
+ inline$storm_IoCallDriver$3$label_28#1:
+ inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$3$label_42#1;
+
+ inline$storm_IoCallDriver$3$label_42#1:
+ goto inline$storm_IoCallDriver$3$label_43#1;
+
+ inline$storm_IoCallDriver$3$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$3$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$3$label_36#1;
+
+ inline$storm_IoCallDriver$3$label_36#1:
+ inline$storm_IoCallDriver$3$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$3$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$3$label_1#1;
+
+ inline$storm_IoCallDriver$3$label_1#1:
+ goto inline$storm_IoCallDriver$3$Return#1;
+
+ inline$storm_IoCallDriver$3$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$3$Return#1;
+
+ inline$storm_IoCallDriver$3$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$3$Return#1;
+
+ inline$storm_IoCallDriver$3$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$3$Return#1;
+
+ inline$storm_IoCallDriver$3$Return#1:
+ inline$storm_PoCallDriver$1$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$3$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$storm_PoCallDriver$1$label_3$1#1;
+
+ inline$storm_PoCallDriver$1$label_3$1#1:
+ goto inline$storm_PoCallDriver$1$anon2_Then#1, inline$storm_PoCallDriver$1$anon2_Else#1;
+
+ inline$storm_PoCallDriver$1$anon2_Else#1:
+ assume !raiseException;
+ goto inline$storm_PoCallDriver$1$anon1#1;
+
+ inline$storm_PoCallDriver$1$anon1#1:
+ goto inline$storm_PoCallDriver$1$label_6#1;
+
+ inline$storm_PoCallDriver$1$label_6#1:
+ inline$storm_PoCallDriver$1$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$1$$result.storm_IoCallDriver$499.27$2$;
+ goto inline$storm_PoCallDriver$1$label_1#1;
+
+ inline$storm_PoCallDriver$1$label_1#1:
+ goto inline$storm_PoCallDriver$1$Return#1;
+
+ inline$storm_PoCallDriver$1$anon2_Then#1:
+ assume raiseException;
+ goto inline$storm_PoCallDriver$1$Return#1;
+
+ inline$storm_PoCallDriver$1$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$1$$result.storm_PoCallDriver$494.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_25$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_25$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon22_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon13#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon13#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_28#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_28#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_PoCallDriver$104.29$3$;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$1$label_29_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_29_false#1:
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_29_true#1:
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_31#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_31#1:
+ goto inline$storm_KeWaitForSingleObject$1$Entry#1;
+
+ inline$storm_KeWaitForSingleObject$1$Entry#1:
+ inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
+ goto inline$storm_KeWaitForSingleObject$1$start#1;
+
+ inline$storm_KeWaitForSingleObject$1$start#1:
+ inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
+ inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
+ goto inline$storm_KeWaitForSingleObject$1$label_3#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_3#1:
+ goto inline$storm_KeWaitForSingleObject$1$label_3_true#1, inline$storm_KeWaitForSingleObject$1$label_3_false#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_3_false#1:
+ assume inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
+ goto inline$storm_KeWaitForSingleObject$1$label_4#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_4#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$anon6_Then#1, inline$storm_KeWaitForSingleObject$1$anon6_Else#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$anon1#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$1$label_13#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_13#1:
+ inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$1$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$Return#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_3_true#1:
+ assume inline$storm_KeWaitForSingleObject$1$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
+ goto inline$storm_KeWaitForSingleObject$1$label_5#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_5#1:
+ call inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$ := storm_nondet();
+ goto inline$storm_KeWaitForSingleObject$1$label_8#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_8#1:
+ goto inline$storm_KeWaitForSingleObject$1$label_8_true#1, inline$storm_KeWaitForSingleObject$1$label_8_false#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_8_false#1:
+ assume inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$ == 0;
+ goto inline$storm_KeWaitForSingleObject$1$label_9#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_9#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$anon7_Then#1, inline$storm_KeWaitForSingleObject$1$anon7_Else#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$anon3#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$1$label_12#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_12#1:
+ inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
+ goto inline$storm_KeWaitForSingleObject$1$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$Return#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_8_true#1:
+ assume inline$storm_KeWaitForSingleObject$1$$result.storm_nondet$256.20$2$ != 0;
+ goto inline$storm_KeWaitForSingleObject$1$label_10#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_10#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$anon8_Then#1, inline$storm_KeWaitForSingleObject$1$anon8_Else#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$anon5#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon5#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$1$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$1$label_11#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_11#1:
+ inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$1$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$1$label_1#1:
+ goto inline$storm_KeWaitForSingleObject$1$Return#1;
+
+ inline$storm_KeWaitForSingleObject$1$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$1$Return#1;
+
+ inline$storm_KeWaitForSingleObject$1$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$1$$result.storm_KeWaitForSingleObject$243.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_31$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_31$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$1$anon23_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$anon15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon15#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_34#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_34#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$$result.storm_KeWaitForSingleObject$116.38$5$;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_35#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_35#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$1$label_35_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_35_false#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_35_true#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_37#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_37#1:
+ call inline$BDLCallLowerLevelDriverAndWait$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_38#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_38#1:
+ call inline$BDLCallLowerLevelDriverAndWait$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_39#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_39#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_36#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
+ inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$1$myNondetVar_0;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_30#1:
+ inline$BDLCallLowerLevelDriverAndWait$1$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$1$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$label_1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$label_1#1:
+ call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$1$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon21_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$1$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$1$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLCallLowerLevelDriverAndWait$2287.43$14$ := inline$BDLCallLowerLevelDriverAndWait$1$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_34$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_34$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon26_Then#1, inline$BDLPnPQueryRemove$0$anon26_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon26_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon9#1;
+
+ inline$BDLPnPQueryRemove$0$anon9#1:
+ goto inline$BDLPnPQueryRemove$0$label_64#1;
+
+ inline$BDLPnPQueryRemove$0$label_64#1:
+ inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 := inline$BDLPnPQueryRemove$0$$result.BDLCallLowerLevelDriverAndWait$2287.43$14$;
+ goto inline$BDLPnPQueryRemove$0$label_65#1;
+
+ inline$BDLPnPQueryRemove$0$label_65#1:
+ goto inline$BDLPnPQueryRemove$0$label_65_true#1, inline$BDLPnPQueryRemove$0$label_65_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_65_false#1:
+ assume inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 == 0;
+ goto inline$BDLPnPQueryRemove$0$label_38#1;
+
+ inline$BDLPnPQueryRemove$0$label_65_true#1:
+ assume inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 != 0;
+ goto inline$BDLPnPQueryRemove$0$label_66#1;
+
+ inline$BDLPnPQueryRemove$0$label_66#1:
+ goto inline$BDLGetDebugLevel$199$Entry#1;
+
+ inline$BDLGetDebugLevel$199$Entry#1:
+ goto inline$BDLGetDebugLevel$199$start#1;
+
+ inline$BDLGetDebugLevel$199$start#1:
+ goto inline$BDLGetDebugLevel$199$label_3#1;
+
+ inline$BDLGetDebugLevel$199$label_3#1:
+ havoc inline$BDLGetDebugLevel$199$myNondetVar_0;
+ inline$BDLGetDebugLevel$199$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$199$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$199$label_1#1;
+
+ inline$BDLGetDebugLevel$199$label_1#1:
+ goto inline$BDLGetDebugLevel$199$Return#1;
+
+ inline$BDLGetDebugLevel$199$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$ := inline$BDLGetDebugLevel$199$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_66$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_66$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon30_Then#1, inline$BDLPnPQueryRemove$0$anon30_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon17#1;
+
+ inline$BDLPnPQueryRemove$0$anon17#1:
+ goto inline$BDLPnPQueryRemove$0$label_69#1;
+
+ inline$BDLPnPQueryRemove$0$label_69#1:
+ goto inline$BDLPnPQueryRemove$0$label_69_true#1, inline$BDLPnPQueryRemove$0$label_69_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_69_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_70#1;
+
+ inline$BDLPnPQueryRemove$0$label_69_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$15$) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_73#1;
+
+ inline$BDLPnPQueryRemove$0$label_73#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_74#1;
+
+ inline$BDLPnPQueryRemove$0$label_74#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_75#1;
+
+ inline$BDLPnPQueryRemove$0$label_75#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_76#1;
+
+ inline$BDLPnPQueryRemove$0$label_76#1:
+ havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$16$;
+ goto inline$BDLPnPQueryRemove$0$label_70#1;
+
+ inline$BDLPnPQueryRemove$0$label_70#1:
+ goto inline$BDLGetDebugLevel$200$Entry#1;
+
+ inline$BDLGetDebugLevel$200$Entry#1:
+ goto inline$BDLGetDebugLevel$200$start#1;
+
+ inline$BDLGetDebugLevel$200$start#1:
+ goto inline$BDLGetDebugLevel$200$label_3#1;
+
+ inline$BDLGetDebugLevel$200$label_3#1:
+ havoc inline$BDLGetDebugLevel$200$myNondetVar_0;
+ inline$BDLGetDebugLevel$200$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$200$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$200$label_1#1;
+
+ inline$BDLGetDebugLevel$200$label_1#1:
+ goto inline$BDLGetDebugLevel$200$Return#1;
+
+ inline$BDLGetDebugLevel$200$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$ := inline$BDLGetDebugLevel$200$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_70$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_70$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon31_Then#1, inline$BDLPnPQueryRemove$0$anon31_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon19#1;
+
+ inline$BDLPnPQueryRemove$0$anon19#1:
+ goto inline$BDLPnPQueryRemove$0$label_79#1;
+
+ inline$BDLPnPQueryRemove$0$label_79#1:
+ goto inline$BDLPnPQueryRemove$0$label_79_true#1, inline$BDLPnPQueryRemove$0$label_79_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_79_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_80#1;
+
+ inline$BDLPnPQueryRemove$0$label_79_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$20$) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_83#1;
+
+ inline$BDLPnPQueryRemove$0$label_83#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_84#1;
+
+ inline$BDLPnPQueryRemove$0$label_84#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_85#1;
+
+ inline$BDLPnPQueryRemove$0$label_85#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_86#1;
+
+ inline$BDLPnPQueryRemove$0$label_86#1:
+ havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2291.0$21$;
+ goto inline$BDLPnPQueryRemove$0$label_80#1;
+
+ inline$BDLPnPQueryRemove$0$label_80#1:
+ goto inline$BDLGetDebugLevel$201$Entry#1;
+
+ inline$BDLGetDebugLevel$201$Entry#1:
+ goto inline$BDLGetDebugLevel$201$start#1;
+
+ inline$BDLGetDebugLevel$201$start#1:
+ goto inline$BDLGetDebugLevel$201$label_3#1;
+
+ inline$BDLGetDebugLevel$201$label_3#1:
+ havoc inline$BDLGetDebugLevel$201$myNondetVar_0;
+ inline$BDLGetDebugLevel$201$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$201$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$201$label_1#1;
+
+ inline$BDLGetDebugLevel$201$label_1#1:
+ goto inline$BDLGetDebugLevel$201$Return#1;
+
+ inline$BDLGetDebugLevel$201$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$ := inline$BDLGetDebugLevel$201$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_80$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_80$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon32_Then#1, inline$BDLPnPQueryRemove$0$anon32_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon21#1;
+
+ inline$BDLPnPQueryRemove$0$anon21#1:
+ goto inline$BDLPnPQueryRemove$0$label_89#1;
+
+ inline$BDLPnPQueryRemove$0$label_89#1:
+ goto inline$BDLPnPQueryRemove$0$label_89_true#1, inline$BDLPnPQueryRemove$0$label_89_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_89_false#1:
+ assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$, 4) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_38#1;
+
+ inline$BDLPnPQueryRemove$0$label_89_true#1:
+ assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2291.0$25$, 4) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_90#1;
+
+ inline$BDLPnPQueryRemove$0$label_90#1:
+ goto inline$BDLPnPQueryRemove$0$label_38#1;
+
+ inline$BDLPnPQueryRemove$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon26_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$label_33_true#1:
+ havoc inline$BDLPnPQueryRemove$0$myNondetVar_0;
+ assume inline$BDLPnPQueryRemove$0$myNondetVar_0 != 0;
+ goto inline$BDLPnPQueryRemove$0$label_37#1;
+
+ inline$BDLPnPQueryRemove$0$label_37#1:
+ inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12 := 0 - 1073741823;
+ goto inline$BDLPnPQueryRemove$0$label_38#1;
+
+ inline$BDLPnPQueryRemove$0$label_38#1:
+ goto inline$BDLGetDebugLevel$196$Entry#1;
+
+ inline$BDLGetDebugLevel$196$Entry#1:
+ goto inline$BDLGetDebugLevel$196$start#1;
+
+ inline$BDLGetDebugLevel$196$start#1:
+ goto inline$BDLGetDebugLevel$196$label_3#1;
+
+ inline$BDLGetDebugLevel$196$label_3#1:
+ havoc inline$BDLGetDebugLevel$196$myNondetVar_0;
+ inline$BDLGetDebugLevel$196$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$196$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$196$label_1#1;
+
+ inline$BDLGetDebugLevel$196$label_1#1:
+ goto inline$BDLGetDebugLevel$196$Return#1;
+
+ inline$BDLGetDebugLevel$196$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$ := inline$BDLGetDebugLevel$196$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_38$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_38$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon27_Then#1, inline$BDLPnPQueryRemove$0$anon27_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon27_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon11#1;
+
+ inline$BDLPnPQueryRemove$0$anon11#1:
+ goto inline$BDLPnPQueryRemove$0$label_41#1;
+
+ inline$BDLPnPQueryRemove$0$label_41#1:
+ goto inline$BDLPnPQueryRemove$0$label_41_true#1, inline$BDLPnPQueryRemove$0$label_41_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_41_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_42#1;
+
+ inline$BDLPnPQueryRemove$0$label_41_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$26$) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_45#1;
+
+ inline$BDLPnPQueryRemove$0$label_45#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_46#1;
+
+ inline$BDLPnPQueryRemove$0$label_46#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_47#1;
+
+ inline$BDLPnPQueryRemove$0$label_47#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_48#1;
+
+ inline$BDLPnPQueryRemove$0$label_48#1:
+ havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$27$;
+ goto inline$BDLPnPQueryRemove$0$label_42#1;
+
+ inline$BDLPnPQueryRemove$0$label_42#1:
+ goto inline$BDLGetDebugLevel$197$Entry#1;
+
+ inline$BDLGetDebugLevel$197$Entry#1:
+ goto inline$BDLGetDebugLevel$197$start#1;
+
+ inline$BDLGetDebugLevel$197$start#1:
+ goto inline$BDLGetDebugLevel$197$label_3#1;
+
+ inline$BDLGetDebugLevel$197$label_3#1:
+ havoc inline$BDLGetDebugLevel$197$myNondetVar_0;
+ inline$BDLGetDebugLevel$197$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$197$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$197$label_1#1;
+
+ inline$BDLGetDebugLevel$197$label_1#1:
+ goto inline$BDLGetDebugLevel$197$Return#1;
+
+ inline$BDLGetDebugLevel$197$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$ := inline$BDLGetDebugLevel$197$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_42$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_42$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon28_Then#1, inline$BDLPnPQueryRemove$0$anon28_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon28_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon13#1;
+
+ inline$BDLPnPQueryRemove$0$anon13#1:
+ goto inline$BDLPnPQueryRemove$0$label_51#1;
+
+ inline$BDLPnPQueryRemove$0$label_51#1:
+ goto inline$BDLPnPQueryRemove$0$label_51_true#1, inline$BDLPnPQueryRemove$0$label_51_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_51_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_52#1;
+
+ inline$BDLPnPQueryRemove$0$label_51_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$31$) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_55#1;
+
+ inline$BDLPnPQueryRemove$0$label_55#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_56#1;
+
+ inline$BDLPnPQueryRemove$0$label_56#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_57#1;
+
+ inline$BDLPnPQueryRemove$0$label_57#1:
+ call inline$BDLPnPQueryRemove$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPQueryRemove$0$label_58#1;
+
+ inline$BDLPnPQueryRemove$0$label_58#1:
+ havoc inline$BDLPnPQueryRemove$0$$result.DbgPrint$2303.0$32$;
+ goto inline$BDLPnPQueryRemove$0$label_52#1;
+
+ inline$BDLPnPQueryRemove$0$label_52#1:
+ goto inline$BDLGetDebugLevel$198$Entry#1;
+
+ inline$BDLGetDebugLevel$198$Entry#1:
+ goto inline$BDLGetDebugLevel$198$start#1;
+
+ inline$BDLGetDebugLevel$198$start#1:
+ goto inline$BDLGetDebugLevel$198$label_3#1;
+
+ inline$BDLGetDebugLevel$198$label_3#1:
+ havoc inline$BDLGetDebugLevel$198$myNondetVar_0;
+ inline$BDLGetDebugLevel$198$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$198$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$198$label_1#1;
+
+ inline$BDLGetDebugLevel$198$label_1#1:
+ goto inline$BDLGetDebugLevel$198$Return#1;
+
+ inline$BDLGetDebugLevel$198$Return#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$ := inline$BDLGetDebugLevel$198$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPQueryRemove$0$label_52$1#1;
+
+ inline$BDLPnPQueryRemove$0$label_52$1#1:
+ goto inline$BDLPnPQueryRemove$0$anon29_Then#1, inline$BDLPnPQueryRemove$0$anon29_Else#1;
+
+ inline$BDLPnPQueryRemove$0$anon29_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPQueryRemove$0$anon15#1;
+
+ inline$BDLPnPQueryRemove$0$anon15#1:
+ goto inline$BDLPnPQueryRemove$0$label_61#1;
+
+ inline$BDLPnPQueryRemove$0$label_61#1:
+ goto inline$BDLPnPQueryRemove$0$label_61_true#1, inline$BDLPnPQueryRemove$0$label_61_false#1;
+
+ inline$BDLPnPQueryRemove$0$label_61_false#1:
+ assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$, 4) == 0;
+ goto inline$BDLPnPQueryRemove$0$label_62#1;
+
+ inline$BDLPnPQueryRemove$0$label_61_true#1:
+ assume BIT_BAND(inline$BDLPnPQueryRemove$0$$result.BDLGetDebugLevel$2303.0$36$, 4) != 0;
+ goto inline$BDLPnPQueryRemove$0$label_63#1;
+
+ inline$BDLPnPQueryRemove$0$label_63#1:
+ goto inline$BDLPnPQueryRemove$0$label_62#1;
+
+ inline$BDLPnPQueryRemove$0$label_62#1:
+ inline$BDLPnPQueryRemove$0$$result.BDLPnPQueryRemove$2254.0$1$ := inline$BDLPnPQueryRemove$0$$status$4$2261.28$BDLPnPQueryRemove$12;
+ goto inline$BDLPnPQueryRemove$0$label_1#1;
+
+ inline$BDLPnPQueryRemove$0$label_1#1:
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon29_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon28_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon27_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon25_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon24_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPQueryRemove$0$Return#1;
+
+ inline$BDLPnPQueryRemove$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPQueryRemove$943.34$32$ := inline$BDLPnPQueryRemove$0$$result.BDLPnPQueryRemove$2254.0$1$;
+ goto inline$BDLPnP$0$label_116$1#1;
+
+ inline$BDLPnP$0$label_116$1#1:
+ goto inline$BDLPnP$0$anon68_Then#1, inline$BDLPnP$0$anon68_Else#1;
+
+ inline$BDLPnP$0$anon68_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon29#1;
+
+ inline$BDLPnP$0$anon29#1:
+ goto inline$BDLPnP$0$label_154#1;
+
+ inline$BDLPnP$0$label_154#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPQueryRemove$943.34$32$;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon68_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_1#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 == 0;
+ goto inline$BDLPnP$0$label_113#1;
+
+ inline$BDLPnP$0$label_113#1:
+ goto inline$BDLPnPStart$0$Entry#1;
+
+ inline$BDLPnPStart$0$Entry#1:
+ inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16_.1 := inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8;
+ inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$BDLPnPStart$0$start#1;
+
+ inline$BDLPnPStart$0$start#1:
+ call inline$BDLPnPStart$0$$bdsiInitializeResourcesParams$7$1964.32$BDLPnPStart$16 := __HAVOC_malloc(548);
+ inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16 := inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16_.1;
+ inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16 := inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16_.1;
+ goto inline$BDLPnPStart$0$label_3#1;
+
+ inline$BDLPnPStart$0$label_3#1:
+ goto inline$BDLPnPStart$0$label_4#1;
+
+ inline$BDLPnPStart$0$label_4#1:
+ inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := 0;
+ goto inline$BDLPnPStart$0$label_5#1;
+
+ inline$BDLPnPStart$0$label_5#1:
+ goto inline$BDLPnPStart$0$label_6#1;
+
+ inline$BDLPnPStart$0$label_6#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_7#1;
+
+ inline$BDLPnPStart$0$label_7#1:
+ goto inline$BDLPnPStart$0$label_8#1;
+
+ inline$BDLPnPStart$0$label_8#1:
+ goto inline$BDLGetDebugLevel$10$Entry#1;
+
+ inline$BDLGetDebugLevel$10$Entry#1:
+ goto inline$BDLGetDebugLevel$10$start#1;
+
+ inline$BDLGetDebugLevel$10$start#1:
+ goto inline$BDLGetDebugLevel$10$label_3#1;
+
+ inline$BDLGetDebugLevel$10$label_3#1:
+ havoc inline$BDLGetDebugLevel$10$myNondetVar_0;
+ inline$BDLGetDebugLevel$10$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$10$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$10$label_1#1;
+
+ inline$BDLGetDebugLevel$10$label_1#1:
+ goto inline$BDLGetDebugLevel$10$Return#1;
+
+ inline$BDLGetDebugLevel$10$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$ := inline$BDLGetDebugLevel$10$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_8$1#1;
+
+ inline$BDLPnPStart$0$label_8$1#1:
+ goto inline$BDLPnPStart$0$anon36_Then#1, inline$BDLPnPStart$0$anon36_Else#1;
+
+ inline$BDLPnPStart$0$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon1#1;
+
+ inline$BDLPnPStart$0$anon1#1:
+ goto inline$BDLPnPStart$0$label_11#1;
+
+ inline$BDLPnPStart$0$label_11#1:
+ goto inline$BDLPnPStart$0$label_11_true#1, inline$BDLPnPStart$0$label_11_false#1;
+
+ inline$BDLPnPStart$0$label_11_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$) == 0;
+ goto inline$BDLPnPStart$0$label_12#1;
+
+ inline$BDLPnPStart$0$label_11_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$2$) != 0;
+ goto inline$BDLPnPStart$0$label_15#1;
+
+ inline$BDLPnPStart$0$label_15#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_16#1;
+
+ inline$BDLPnPStart$0$label_16#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_17#1;
+
+ inline$BDLPnPStart$0$label_17#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_18#1;
+
+ inline$BDLPnPStart$0$label_18#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$1966.0$3$;
+ goto inline$BDLPnPStart$0$label_12#1;
+
+ inline$BDLPnPStart$0$label_12#1:
+ goto inline$BDLGetDebugLevel$11$Entry#1;
+
+ inline$BDLGetDebugLevel$11$Entry#1:
+ goto inline$BDLGetDebugLevel$11$start#1;
+
+ inline$BDLGetDebugLevel$11$start#1:
+ goto inline$BDLGetDebugLevel$11$label_3#1;
+
+ inline$BDLGetDebugLevel$11$label_3#1:
+ havoc inline$BDLGetDebugLevel$11$myNondetVar_0;
+ inline$BDLGetDebugLevel$11$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$11$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$11$label_1#1;
+
+ inline$BDLGetDebugLevel$11$label_1#1:
+ goto inline$BDLGetDebugLevel$11$Return#1;
+
+ inline$BDLGetDebugLevel$11$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$ := inline$BDLGetDebugLevel$11$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_12$1#1;
+
+ inline$BDLPnPStart$0$label_12$1#1:
+ goto inline$BDLPnPStart$0$anon37_Then#1, inline$BDLPnPStart$0$anon37_Else#1;
+
+ inline$BDLPnPStart$0$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon3#1;
+
+ inline$BDLPnPStart$0$anon3#1:
+ goto inline$BDLPnPStart$0$label_21#1;
+
+ inline$BDLPnPStart$0$label_21#1:
+ goto inline$BDLPnPStart$0$label_21_true#1, inline$BDLPnPStart$0$label_21_false#1;
+
+ inline$BDLPnPStart$0$label_21_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$) == 0;
+ goto inline$BDLPnPStart$0$label_22#1;
+
+ inline$BDLPnPStart$0$label_21_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$7$) != 0;
+ goto inline$BDLPnPStart$0$label_25#1;
+
+ inline$BDLPnPStart$0$label_25#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_26#1;
+
+ inline$BDLPnPStart$0$label_26#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_27#1;
+
+ inline$BDLPnPStart$0$label_27#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_28#1;
+
+ inline$BDLPnPStart$0$label_28#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$1966.0$8$;
+ goto inline$BDLPnPStart$0$label_22#1;
+
+ inline$BDLPnPStart$0$label_22#1:
+ goto inline$BDLGetDebugLevel$12$Entry#1;
+
+ inline$BDLGetDebugLevel$12$Entry#1:
+ goto inline$BDLGetDebugLevel$12$start#1;
+
+ inline$BDLGetDebugLevel$12$start#1:
+ goto inline$BDLGetDebugLevel$12$label_3#1;
+
+ inline$BDLGetDebugLevel$12$label_3#1:
+ havoc inline$BDLGetDebugLevel$12$myNondetVar_0;
+ inline$BDLGetDebugLevel$12$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$12$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$12$label_1#1;
+
+ inline$BDLGetDebugLevel$12$label_1#1:
+ goto inline$BDLGetDebugLevel$12$Return#1;
+
+ inline$BDLGetDebugLevel$12$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$ := inline$BDLGetDebugLevel$12$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_22$1#1;
+
+ inline$BDLPnPStart$0$label_22$1#1:
+ goto inline$BDLPnPStart$0$anon38_Then#1, inline$BDLPnPStart$0$anon38_Else#1;
+
+ inline$BDLPnPStart$0$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon5#1;
+
+ inline$BDLPnPStart$0$anon5#1:
+ goto inline$BDLPnPStart$0$label_31#1;
+
+ inline$BDLPnPStart$0$label_31#1:
+ goto inline$BDLPnPStart$0$label_31_true#1, inline$BDLPnPStart$0$label_31_false#1;
+
+ inline$BDLPnPStart$0$label_31_false#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$, 4) == 0;
+ goto inline$BDLPnPStart$0$label_32#1;
+
+ inline$BDLPnPStart$0$label_31_true#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1966.0$12$, 4) != 0;
+ goto inline$BDLPnPStart$0$label_35#1;
+
+ inline$BDLPnPStart$0$label_35#1:
+ goto inline$BDLPnPStart$0$label_32#1;
+
+ inline$BDLPnPStart$0$label_32#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Entry#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$Entry#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1 := inline$BDLPnPStart$0$$pIrp$3$1958.40$BDLPnPStart$16;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$start#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$start#1:
+ call inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8 := __HAVOC_malloc(16);
+ inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8_.1;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_4#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_4#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_6#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_6#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$Entry#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$Entry#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$start#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$start#1:
+ inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4 := inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4_.1;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_4#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_4#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_5#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_5#1:
+ goto inline$IoGetCurrentIrpStackLocation$3$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetCurrentIrpStackLocation$3$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$start#1:
+ inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$3$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$3$label_3_true#1, inline$IoGetCurrentIrpStackLocation$3$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$3$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$3$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$3$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$3$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$3$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$3$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$3$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$3$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$3$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$3$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$3$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$3$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$3$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$3$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$3$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$3$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$3$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_5$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_5$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$anon1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_8#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_8#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_9#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_9#1:
+ goto inline$IoGetNextIrpStackLocation$1$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$1$Entry#1:
+ inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$IoCopyCurrentIrpStackLocationToNext$0$$Irp$1$25081.17$IoCopyCurrentIrpStackLocationToNext$4;
+ goto inline$IoGetNextIrpStackLocation$1$start#1;
+
+ inline$IoGetNextIrpStackLocation$1$start#1:
+ inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$1$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$1$label_3_true#1, inline$IoGetNextIrpStackLocation$1$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$1$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$1$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_4#1:
+ call inline$IoGetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$1$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_6#1:
+ call inline$IoGetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$1$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$1$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$1$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$1$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$1$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$1$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$1$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$1$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$1$Return#1;
+
+ inline$IoGetNextIrpStackLocation$1$Return#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_9$1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_9$1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Then#1, inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Else#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Else#1:
+ assume !raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$anon3#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$anon3#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_12#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_12#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_13#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_13#1:
+ havoc inline$IoCopyCurrentIrpStackLocationToNext$0$$result.memcpy$25110.4$3$;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_16#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_16#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$label_1#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$label_1#1:
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$anon5_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$anon4_Then#1:
+ assume raiseException;
+ goto inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1;
+
+ inline$IoCopyCurrentIrpStackLocationToNext$0$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_6$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_6$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon16_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon16_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon16_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_9#1:
+ goto inline$storm_KeInitializeEvent$0$Entry#1;
+
+ inline$storm_KeInitializeEvent$0$Entry#1:
+ inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12_.1 := 0;
+ goto inline$storm_KeInitializeEvent$0$start#1;
+
+ inline$storm_KeInitializeEvent$0$start#1:
+ inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12_.1;
+ inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12_.1;
+ goto inline$storm_KeInitializeEvent$0$label_3#1;
+
+ inline$storm_KeInitializeEvent$0$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeInitializeEvent$0$$Event$1$203.14$storm_KeInitializeEvent$12 := inline$storm_KeInitializeEvent$0$$State$3$205.13$storm_KeInitializeEvent$12];
+ call contextSwitch();
+ goto inline$storm_KeInitializeEvent$0$label_1#1;
+
+ inline$storm_KeInitializeEvent$0$label_1#1:
+ goto inline$storm_KeInitializeEvent$0$Return#1;
+
+ inline$storm_KeInitializeEvent$0$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_9$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_9$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon17_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon17_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon17_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon3#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon3#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_12#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$0$Entry#1;
+
+ inline$storm_IoSetCompletionRoutine$0$Entry#1:
+ inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoSetCompletionRoutine$0$start#1;
+
+ inline$storm_IoSetCompletionRoutine$0$start#1:
+ inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24 := inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24_.1;
+ goto inline$storm_IoSetCompletionRoutine$0$label_3#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_3#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_4#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_4#1:
+ call inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$ := storm_nondet();
+ goto inline$storm_IoSetCompletionRoutine$0$label_7#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_7#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_7_true#1, inline$storm_IoSetCompletionRoutine$0$label_7_false#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_7_false#1:
+ assume inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$ == 0;
+ goto inline$storm_IoSetCompletionRoutine$0$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_7_true#1:
+ assume inline$storm_IoSetCompletionRoutine$0$$result.storm_nondet$405.2$1$ != 0;
+ goto inline$storm_IoSetCompletionRoutine$0$label_11#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_11#1:
+ havoc raiseException;
+ goto inline$storm_IoSetCompletionRoutine$0$anon6_Then#1, inline$storm_IoSetCompletionRoutine$0$anon6_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$0$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$0$anon3#1;
+
+ inline$storm_IoSetCompletionRoutine$0$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24], 1);
+ call contextSwitch();
+ goto inline$storm_IoSetCompletionRoutine$0$label_12#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_12#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_12_true#1, inline$storm_IoSetCompletionRoutine$0$label_12_false#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_12_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoSetCompletionRoutine$0$label_13#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_13#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoSetCompletionRoutine$0$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_12_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoSetCompletionRoutine$0$label_8#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_8#1:
+ goto inline$IoGetNextIrpStackLocation$2$Entry#1;
+
+ inline$IoGetNextIrpStackLocation$2$Entry#1:
+ inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1 := inline$storm_IoSetCompletionRoutine$0$$pirp$1$396.10$storm_IoSetCompletionRoutine$24;
+ goto inline$IoGetNextIrpStackLocation$2$start#1;
+
+ inline$IoGetNextIrpStackLocation$2$start#1:
+ inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4 := inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4_.1;
+ goto inline$IoGetNextIrpStackLocation$2$label_3#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_3#1:
+ goto inline$IoGetNextIrpStackLocation$2$label_3_true#1, inline$IoGetNextIrpStackLocation$2$label_3_false#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_3_false#1:
+ inline$IoGetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoGetNextIrpStackLocation$2$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$2$label_4#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_4#1:
+ call inline$IoGetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$2$label_6#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_6#1:
+ call inline$IoGetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetNextIrpStackLocation$2$label_7#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_7#1:
+ goto inline$IoGetNextIrpStackLocation$2$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_3_true#1:
+ inline$IoGetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetNextIrpStackLocation$2$$Irp$1$24655.14$IoGetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoGetNextIrpStackLocation$2$myVar_0);
+ goto inline$IoGetNextIrpStackLocation$2$label_5#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_5#1:
+ havoc inline$IoGetNextIrpStackLocation$2$myNondetVar_0;
+ goto inline$IoGetNextIrpStackLocation$2$label_1#1;
+
+ inline$IoGetNextIrpStackLocation$2$label_1#1:
+ goto inline$IoGetNextIrpStackLocation$2$Return#1;
+
+ inline$IoGetNextIrpStackLocation$2$Return#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_8$1#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_8$1#1:
+ goto inline$storm_IoSetCompletionRoutine$0$anon5_Then#1, inline$storm_IoSetCompletionRoutine$0$anon5_Else#1;
+
+ inline$storm_IoSetCompletionRoutine$0$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoSetCompletionRoutine$0$anon1#1;
+
+ inline$storm_IoSetCompletionRoutine$0$anon1#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_16#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_16#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_17#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_17#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_18#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_18#1:
+ goto inline$storm_IoSetCompletionRoutine$0$label_1#1;
+
+ inline$storm_IoSetCompletionRoutine$0$label_1#1:
+ goto inline$storm_IoSetCompletionRoutine$0$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$0$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$0$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$0$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_IoSetCompletionRoutine$0$Return#1;
+
+ inline$storm_IoSetCompletionRoutine$0$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_12$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_12$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon18_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon18_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon18_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon5#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon5#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_15#1:
+ goto inline$IoGetCurrentIrpStackLocation$4$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$IoGetCurrentIrpStackLocation$4$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$start#1:
+ inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$4$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$4$label_3_true#1, inline$IoGetCurrentIrpStackLocation$4$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$4$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$4$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$4$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$4$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$4$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$4$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$4$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$4$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$4$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$4$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$4$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$4$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$4$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$4$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$4$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$4$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$4$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$4$Return#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_15$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_15$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon19_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon19_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon19_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon7#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon7#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_18#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_18#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_18_true#1, inline$BDLCallLowerLevelDriverAndWait$0$label_18_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_18_false#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_19#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_19#1:
+ goto inline$storm_IoCallDriver$0$Entry#1;
+
+ inline$storm_IoCallDriver$0$Entry#1:
+ inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_IoCallDriver$0$start#1;
+
+ inline$storm_IoCallDriver$0$start#1:
+ inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$0$label_3#1;
+
+ inline$storm_IoCallDriver$0$label_3#1:
+ goto inline$storm_IoCallDriver$0$label_4#1;
+
+ inline$storm_IoCallDriver$0$label_4#1:
+ goto inline$storm_IoCallDriver$0$label_5#1;
+
+ inline$storm_IoCallDriver$0$label_5#1:
+ goto inline$storm_IoCallDriver$0$label_6#1;
+
+ inline$storm_IoCallDriver$0$label_6#1:
+ call inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$0$label_9#1;
+
+ inline$storm_IoCallDriver$0$label_9#1:
+ goto inline$storm_IoCallDriver$0$label_9_true#1, inline$storm_IoCallDriver$0$label_9_false#1;
+
+ inline$storm_IoCallDriver$0$label_9_false#1:
+ assume inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$0$label_10#1;
+
+ inline$storm_IoCallDriver$0$label_9_true#1:
+ assume inline$storm_IoCallDriver$0$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$0$label_13#1;
+
+ inline$storm_IoCallDriver$0$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$0$anon12_Then#1, inline$storm_IoCallDriver$0$anon12_Else#1;
+
+ inline$storm_IoCallDriver$0$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$0$anon3#1;
+
+ inline$storm_IoCallDriver$0$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$0$label_14#1;
+
+ inline$storm_IoCallDriver$0$label_14#1:
+ goto inline$storm_IoCallDriver$0$label_14_true#1, inline$storm_IoCallDriver$0$label_14_false#1;
+
+ inline$storm_IoCallDriver$0$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$0$label_15#1;
+
+ inline$storm_IoCallDriver$0$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$0$label_1#1;
+
+ inline$storm_IoCallDriver$0$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$0$label_10#1;
+
+ inline$storm_IoCallDriver$0$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$1$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$1$Entry#1:
+ inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$1$start#1;
+
+ inline$IoSetNextIrpStackLocation$1$start#1:
+ inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$1$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$1$label_3_true#1, inline$IoSetNextIrpStackLocation$1$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$1$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$1$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_4#1:
+ call inline$IoSetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$1$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_7#1:
+ call inline$IoSetNextIrpStackLocation$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$1$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$1$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$1$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$1$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_5#1:
+ inline$IoSetNextIrpStackLocation$1$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$1$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$1$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$1$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$1$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$1$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$1$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$1$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$1$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$1$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$1$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$1$Return#1;
+
+ inline$IoSetNextIrpStackLocation$1$Return#1:
+ goto inline$storm_IoCallDriver$0$label_10$1#1;
+
+ inline$storm_IoCallDriver$0$label_10$1#1:
+ goto inline$storm_IoCallDriver$0$anon11_Then#1, inline$storm_IoCallDriver$0$anon11_Else#1;
+
+ inline$storm_IoCallDriver$0$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$0$anon1#1;
+
+ inline$storm_IoCallDriver$0$anon1#1:
+ goto inline$storm_IoCallDriver$0$label_18#1;
+
+ inline$storm_IoCallDriver$0$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$5$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$5$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$start#1:
+ inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$5$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$5$label_3_true#1, inline$IoGetCurrentIrpStackLocation$5$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$5$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$5$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$5$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$5$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$5$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$5$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$5$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$5$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$5$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$5$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$5$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$5$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$5$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$5$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$5$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$5$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$5$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$5$Return#1:
+ goto inline$storm_IoCallDriver$0$label_18$1#1;
+
+ inline$storm_IoCallDriver$0$label_18$1#1:
+ goto inline$storm_IoCallDriver$0$anon13_Then#1, inline$storm_IoCallDriver$0$anon13_Else#1;
+
+ inline$storm_IoCallDriver$0$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$0$anon6#1;
+
+ inline$storm_IoCallDriver$0$anon6#1:
+ goto inline$storm_IoCallDriver$0$label_21#1;
+
+ inline$storm_IoCallDriver$0$label_21#1:
+ goto inline$storm_IoCallDriver$0$label_22#1;
+
+ inline$storm_IoCallDriver$0$label_22#1:
+ goto inline$storm_IoCallDriver$0$label_23#1;
+
+ inline$storm_IoCallDriver$0$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$0$label_24#1;
+
+ inline$storm_IoCallDriver$0$label_24#1:
+ call inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$0$label_27#1;
+
+ inline$storm_IoCallDriver$0$label_27#1:
+ goto inline$storm_IoCallDriver$0$label_27_case_0#1, inline$storm_IoCallDriver$0$label_27_case_1#1, inline$storm_IoCallDriver$0$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$0$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$0$label_30#1;
+
+ inline$storm_IoCallDriver$0$label_30#1:
+ inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$0$label_31#1;
+
+ inline$storm_IoCallDriver$0$label_31#1:
+ goto inline$storm_IoCallDriver$0$label_32#1;
+
+ inline$storm_IoCallDriver$0$label_32#1:
+ goto inline$storm_IoCallDriver$0$label_33#1;
+
+ inline$storm_IoCallDriver$0$label_33#1:
+ goto inline$CallCompletionRoutine$0$Entry#1;
+
+ inline$CallCompletionRoutine$0$Entry#1:
+ inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$0$start#1;
+
+ inline$CallCompletionRoutine$0$start#1:
+ inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$0$label_3#1;
+
+ inline$CallCompletionRoutine$0$label_3#1:
+ goto inline$CallCompletionRoutine$0$label_4#1;
+
+ inline$CallCompletionRoutine$0$label_4#1:
+ goto inline$CallCompletionRoutine$0$label_5#1;
+
+ inline$CallCompletionRoutine$0$label_5#1:
+ goto inline$CallCompletionRoutine$0$label_6#1;
+
+ inline$CallCompletionRoutine$0$label_6#1:
+ goto inline$CallCompletionRoutine$0$label_7#1;
+
+ inline$CallCompletionRoutine$0$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$6$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$6$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$start#1:
+ inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$6$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$6$label_3_true#1, inline$IoGetCurrentIrpStackLocation$6$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$6$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$6$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$6$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$6$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$6$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$6$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$6$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$6$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$6$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$6$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$6$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$6$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$6$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$6$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$6$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$6$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$6$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$6$Return#1:
+ goto inline$CallCompletionRoutine$0$label_7$1#1;
+
+ inline$CallCompletionRoutine$0$label_7$1#1:
+ goto inline$CallCompletionRoutine$0$anon10_Then#1, inline$CallCompletionRoutine$0$anon10_Else#1;
+
+ inline$CallCompletionRoutine$0$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$0$anon1#1;
+
+ inline$CallCompletionRoutine$0$anon1#1:
+ goto inline$CallCompletionRoutine$0$label_10#1;
+
+ inline$CallCompletionRoutine$0$label_10#1:
+ goto inline$CallCompletionRoutine$0$label_11#1;
+
+ inline$CallCompletionRoutine$0$label_11#1:
+ havoc inline$CallCompletionRoutine$0$myNondetVar_0;
+ inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$myNondetVar_0;
+ goto inline$CallCompletionRoutine$0$label_12#1;
+
+ inline$CallCompletionRoutine$0$label_12#1:
+ havoc inline$CallCompletionRoutine$0$myNondetVar_0;
+ inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$myNondetVar_0;
+ goto inline$CallCompletionRoutine$0$label_13#1;
+
+ inline$CallCompletionRoutine$0$label_13#1:
+ havoc inline$CallCompletionRoutine$0$myNondetVar_0;
+ goto inline$CallCompletionRoutine$0$label_14#1;
+
+ inline$CallCompletionRoutine$0$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$7$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$7$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$start#1:
+ inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$7$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$7$label_3_true#1, inline$IoGetCurrentIrpStackLocation$7$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$7$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$7$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$7$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$7$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$7$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$7$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$7$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$7$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$7$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$7$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$7$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$7$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$7$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$7$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$7$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$7$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$7$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$7$Return#1:
+ goto inline$CallCompletionRoutine$0$label_14$1#1;
+
+ inline$CallCompletionRoutine$0$label_14$1#1:
+ goto inline$CallCompletionRoutine$0$anon11_Then#1, inline$CallCompletionRoutine$0$anon11_Else#1;
+
+ inline$CallCompletionRoutine$0$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$0$anon3#1;
+
+ inline$CallCompletionRoutine$0$anon3#1:
+ goto inline$CallCompletionRoutine$0$label_17#1;
+
+ inline$CallCompletionRoutine$0$label_17#1:
+ goto inline$CallCompletionRoutine$0$label_18#1;
+
+ inline$CallCompletionRoutine$0$label_18#1:
+ goto inline$CallCompletionRoutine$0$label_18_true#1, inline$CallCompletionRoutine$0$label_18_false#1;
+
+ inline$CallCompletionRoutine$0$label_18_false#1:
+ assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$0$label_1#1;
+
+ inline$CallCompletionRoutine$0$label_18_true#1:
+ assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$0$label_19#1;
+
+ inline$CallCompletionRoutine$0$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$0$label_20#1;
+
+ inline$CallCompletionRoutine$0$label_20#1:
+ goto inline$CallCompletionRoutine$0$label_20_icall_1#1, inline$CallCompletionRoutine$0$label_20_icall_2#1, inline$CallCompletionRoutine$0$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$0$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$0$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$0$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$0$Entry#1:
+ inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$0$start#1;
+
+ inline$BDLSystemPowerIoCompletion$0$start#1:
+ call inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$0$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_4#1:
+ inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_6#1:
+ inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$0$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$0$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$9$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$9$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$start#1:
+ inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$9$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$9$label_3_true#1, inline$IoGetCurrentIrpStackLocation$9$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$9$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$9$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$9$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$9$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$9$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$9$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$9$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$9$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$9$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$9$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$9$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$9$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$9$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$9$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$9$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$9$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$9$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$9$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon36_Then#1, inline$BDLSystemPowerIoCompletion$0$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_15#1:
+ goto inline$BDLGetDebugLevel$22$Entry#1;
+
+ inline$BDLGetDebugLevel$22$Entry#1:
+ goto inline$BDLGetDebugLevel$22$start#1;
+
+ inline$BDLGetDebugLevel$22$start#1:
+ goto inline$BDLGetDebugLevel$22$label_3#1;
+
+ inline$BDLGetDebugLevel$22$label_3#1:
+ havoc inline$BDLGetDebugLevel$22$myNondetVar_0;
+ inline$BDLGetDebugLevel$22$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$22$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$22$label_1#1;
+
+ inline$BDLGetDebugLevel$22$label_1#1:
+ goto inline$BDLGetDebugLevel$22$Return#1;
+
+ inline$BDLGetDebugLevel$22$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$22$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon37_Then#1, inline$BDLSystemPowerIoCompletion$0$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_18_true#1, inline$BDLSystemPowerIoCompletion$0$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_19#1:
+ goto inline$BDLGetDebugLevel$23$Entry#1;
+
+ inline$BDLGetDebugLevel$23$Entry#1:
+ goto inline$BDLGetDebugLevel$23$start#1;
+
+ inline$BDLGetDebugLevel$23$start#1:
+ goto inline$BDLGetDebugLevel$23$label_3#1;
+
+ inline$BDLGetDebugLevel$23$label_3#1:
+ havoc inline$BDLGetDebugLevel$23$myNondetVar_0;
+ inline$BDLGetDebugLevel$23$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$23$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$23$label_1#1;
+
+ inline$BDLGetDebugLevel$23$label_1#1:
+ goto inline$BDLGetDebugLevel$23$Return#1;
+
+ inline$BDLGetDebugLevel$23$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$23$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon38_Then#1, inline$BDLSystemPowerIoCompletion$0$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_28_true#1, inline$BDLSystemPowerIoCompletion$0$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_29#1:
+ goto inline$BDLGetDebugLevel$24$Entry#1;
+
+ inline$BDLGetDebugLevel$24$Entry#1:
+ goto inline$BDLGetDebugLevel$24$start#1;
+
+ inline$BDLGetDebugLevel$24$start#1:
+ goto inline$BDLGetDebugLevel$24$label_3#1;
+
+ inline$BDLGetDebugLevel$24$label_3#1:
+ havoc inline$BDLGetDebugLevel$24$myNondetVar_0;
+ inline$BDLGetDebugLevel$24$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$24$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$24$label_1#1;
+
+ inline$BDLGetDebugLevel$24$label_1#1:
+ goto inline$BDLGetDebugLevel$24$Return#1;
+
+ inline$BDLGetDebugLevel$24$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$24$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon39_Then#1, inline$BDLSystemPowerIoCompletion$0$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_38_true#1, inline$BDLSystemPowerIoCompletion$0$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_39_true#1, inline$BDLSystemPowerIoCompletion$0$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$0$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$0$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$0$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$0$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$0$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_106_true#1, inline$BDLSystemPowerIoCompletion$0$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$0$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$0$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$0$myNondetVar_0, inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$0$anon50_Then#1, inline$BDLSystemPowerIoCompletion$0$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_112#1:
+ inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_113_true#1, inline$BDLSystemPowerIoCompletion$0$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$0$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_117#1:
+ goto inline$BDLGetDebugLevel$31$Entry#1;
+
+ inline$BDLGetDebugLevel$31$Entry#1:
+ goto inline$BDLGetDebugLevel$31$start#1;
+
+ inline$BDLGetDebugLevel$31$start#1:
+ goto inline$BDLGetDebugLevel$31$label_3#1;
+
+ inline$BDLGetDebugLevel$31$label_3#1:
+ havoc inline$BDLGetDebugLevel$31$myNondetVar_0;
+ inline$BDLGetDebugLevel$31$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$31$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$31$label_1#1;
+
+ inline$BDLGetDebugLevel$31$label_1#1:
+ goto inline$BDLGetDebugLevel$31$Return#1;
+
+ inline$BDLGetDebugLevel$31$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$31$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon51_Then#1, inline$BDLSystemPowerIoCompletion$0$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_120_true#1, inline$BDLSystemPowerIoCompletion$0$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_121#1:
+ goto inline$BDLGetDebugLevel$32$Entry#1;
+
+ inline$BDLGetDebugLevel$32$Entry#1:
+ goto inline$BDLGetDebugLevel$32$start#1;
+
+ inline$BDLGetDebugLevel$32$start#1:
+ goto inline$BDLGetDebugLevel$32$label_3#1;
+
+ inline$BDLGetDebugLevel$32$label_3#1:
+ havoc inline$BDLGetDebugLevel$32$myNondetVar_0;
+ inline$BDLGetDebugLevel$32$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$32$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$32$label_1#1;
+
+ inline$BDLGetDebugLevel$32$label_1#1:
+ goto inline$BDLGetDebugLevel$32$Return#1;
+
+ inline$BDLGetDebugLevel$32$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$32$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon52_Then#1, inline$BDLSystemPowerIoCompletion$0$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_130_true#1, inline$BDLSystemPowerIoCompletion$0$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_131#1:
+ goto inline$BDLGetDebugLevel$33$Entry#1;
+
+ inline$BDLGetDebugLevel$33$Entry#1:
+ goto inline$BDLGetDebugLevel$33$start#1;
+
+ inline$BDLGetDebugLevel$33$start#1:
+ goto inline$BDLGetDebugLevel$33$label_3#1;
+
+ inline$BDLGetDebugLevel$33$label_3#1:
+ havoc inline$BDLGetDebugLevel$33$myNondetVar_0;
+ inline$BDLGetDebugLevel$33$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$33$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$33$label_1#1;
+
+ inline$BDLGetDebugLevel$33$label_1#1:
+ goto inline$BDLGetDebugLevel$33$Return#1;
+
+ inline$BDLGetDebugLevel$33$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$33$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon53_Then#1, inline$BDLSystemPowerIoCompletion$0$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_140_true#1, inline$BDLSystemPowerIoCompletion$0$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$0$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_115#1:
+ inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$0$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$0$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$0$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_43#1:
+ goto inline$BDLGetDebugLevel$25$Entry#1;
+
+ inline$BDLGetDebugLevel$25$Entry#1:
+ goto inline$BDLGetDebugLevel$25$start#1;
+
+ inline$BDLGetDebugLevel$25$start#1:
+ goto inline$BDLGetDebugLevel$25$label_3#1;
+
+ inline$BDLGetDebugLevel$25$label_3#1:
+ havoc inline$BDLGetDebugLevel$25$myNondetVar_0;
+ inline$BDLGetDebugLevel$25$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$25$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$25$label_1#1;
+
+ inline$BDLGetDebugLevel$25$label_1#1:
+ goto inline$BDLGetDebugLevel$25$Return#1;
+
+ inline$BDLGetDebugLevel$25$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$25$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon40_Then#1, inline$BDLSystemPowerIoCompletion$0$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_46_true#1, inline$BDLSystemPowerIoCompletion$0$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_47#1:
+ goto inline$BDLGetDebugLevel$26$Entry#1;
+
+ inline$BDLGetDebugLevel$26$Entry#1:
+ goto inline$BDLGetDebugLevel$26$start#1;
+
+ inline$BDLGetDebugLevel$26$start#1:
+ goto inline$BDLGetDebugLevel$26$label_3#1;
+
+ inline$BDLGetDebugLevel$26$label_3#1:
+ havoc inline$BDLGetDebugLevel$26$myNondetVar_0;
+ inline$BDLGetDebugLevel$26$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$26$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$26$label_1#1;
+
+ inline$BDLGetDebugLevel$26$label_1#1:
+ goto inline$BDLGetDebugLevel$26$Return#1;
+
+ inline$BDLGetDebugLevel$26$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$26$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon41_Then#1, inline$BDLSystemPowerIoCompletion$0$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_56_true#1, inline$BDLSystemPowerIoCompletion$0$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_57#1:
+ goto inline$BDLGetDebugLevel$27$Entry#1;
+
+ inline$BDLGetDebugLevel$27$Entry#1:
+ goto inline$BDLGetDebugLevel$27$start#1;
+
+ inline$BDLGetDebugLevel$27$start#1:
+ goto inline$BDLGetDebugLevel$27$label_3#1;
+
+ inline$BDLGetDebugLevel$27$label_3#1:
+ havoc inline$BDLGetDebugLevel$27$myNondetVar_0;
+ inline$BDLGetDebugLevel$27$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$27$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$27$label_1#1;
+
+ inline$BDLGetDebugLevel$27$label_1#1:
+ goto inline$BDLGetDebugLevel$27$Return#1;
+
+ inline$BDLGetDebugLevel$27$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$27$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon42_Then#1, inline$BDLSystemPowerIoCompletion$0$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_66_true#1, inline$BDLSystemPowerIoCompletion$0$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$0$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$0$anon43_Then#1, inline$BDLSystemPowerIoCompletion$0$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$0$anon44_Then#1, inline$BDLSystemPowerIoCompletion$0$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_74#1:
+ goto inline$storm_IoCompleteRequest$2$Entry#1;
+
+ inline$storm_IoCompleteRequest$2$Entry#1:
+ inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$0$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$2$start#1;
+
+ inline$storm_IoCompleteRequest$2$start#1:
+ inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$2$label_3#1;
+
+ inline$storm_IoCompleteRequest$2$label_3#1:
+ call inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$2$label_6#1;
+
+ inline$storm_IoCompleteRequest$2$label_6#1:
+ goto inline$storm_IoCompleteRequest$2$label_6_true#1, inline$storm_IoCompleteRequest$2$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$2$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$2$label_7#1;
+
+ inline$storm_IoCompleteRequest$2$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$2$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$2$label_8#1;
+
+ inline$storm_IoCompleteRequest$2$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$2$anon3_Then#1, inline$storm_IoCompleteRequest$2$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$2$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$2$anon1#1;
+
+ inline$storm_IoCompleteRequest$2$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$2$label_9#1;
+
+ inline$storm_IoCompleteRequest$2$label_9#1:
+ goto inline$storm_IoCompleteRequest$2$label_9_true#1, inline$storm_IoCompleteRequest$2$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$2$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$2$label_10#1;
+
+ inline$storm_IoCompleteRequest$2$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$2$label_1#1;
+
+ inline$storm_IoCompleteRequest$2$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$2$label_7#1;
+
+ inline$storm_IoCompleteRequest$2$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$2$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$2$label_1#1;
+
+ inline$storm_IoCompleteRequest$2$label_1#1:
+ goto inline$storm_IoCompleteRequest$2$Return#1;
+
+ inline$storm_IoCompleteRequest$2$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$2$Return#1;
+
+ inline$storm_IoCompleteRequest$2$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon45_Then#1, inline$BDLSystemPowerIoCompletion$0$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$0$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$0$anon46_Then#1, inline$BDLSystemPowerIoCompletion$0$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_80#1:
+ goto inline$BDLGetDebugLevel$28$Entry#1;
+
+ inline$BDLGetDebugLevel$28$Entry#1:
+ goto inline$BDLGetDebugLevel$28$start#1;
+
+ inline$BDLGetDebugLevel$28$start#1:
+ goto inline$BDLGetDebugLevel$28$label_3#1;
+
+ inline$BDLGetDebugLevel$28$label_3#1:
+ havoc inline$BDLGetDebugLevel$28$myNondetVar_0;
+ inline$BDLGetDebugLevel$28$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$28$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$28$label_1#1;
+
+ inline$BDLGetDebugLevel$28$label_1#1:
+ goto inline$BDLGetDebugLevel$28$Return#1;
+
+ inline$BDLGetDebugLevel$28$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$28$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon47_Then#1, inline$BDLSystemPowerIoCompletion$0$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_83_true#1, inline$BDLSystemPowerIoCompletion$0$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_84#1:
+ goto inline$BDLGetDebugLevel$29$Entry#1;
+
+ inline$BDLGetDebugLevel$29$Entry#1:
+ goto inline$BDLGetDebugLevel$29$start#1;
+
+ inline$BDLGetDebugLevel$29$start#1:
+ goto inline$BDLGetDebugLevel$29$label_3#1;
+
+ inline$BDLGetDebugLevel$29$label_3#1:
+ havoc inline$BDLGetDebugLevel$29$myNondetVar_0;
+ inline$BDLGetDebugLevel$29$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$29$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$29$label_1#1;
+
+ inline$BDLGetDebugLevel$29$label_1#1:
+ goto inline$BDLGetDebugLevel$29$Return#1;
+
+ inline$BDLGetDebugLevel$29$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$29$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon48_Then#1, inline$BDLSystemPowerIoCompletion$0$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_93_true#1, inline$BDLSystemPowerIoCompletion$0$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$0$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$0$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_94#1:
+ goto inline$BDLGetDebugLevel$30$Entry#1;
+
+ inline$BDLGetDebugLevel$30$Entry#1:
+ goto inline$BDLGetDebugLevel$30$start#1;
+
+ inline$BDLGetDebugLevel$30$start#1:
+ goto inline$BDLGetDebugLevel$30$label_3#1;
+
+ inline$BDLGetDebugLevel$30$label_3#1:
+ havoc inline$BDLGetDebugLevel$30$myNondetVar_0;
+ inline$BDLGetDebugLevel$30$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$30$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$30$label_1#1;
+
+ inline$BDLGetDebugLevel$30$label_1#1:
+ goto inline$BDLGetDebugLevel$30$Return#1;
+
+ inline$BDLGetDebugLevel$30$Return#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$30$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$0$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$0$anon49_Then#1, inline$BDLSystemPowerIoCompletion$0$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_103_true#1, inline$BDLSystemPowerIoCompletion$0$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$0$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$0$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$0$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_104#1:
+ inline$BDLSystemPowerIoCompletion$0$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$0$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$0$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$0$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$0$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$0$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$0$Return#1:
+ inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$0$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$0$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$0$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$0$anon14_Then#1, inline$CallCompletionRoutine$0$anon14_Else#1;
+
+ inline$CallCompletionRoutine$0$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$0$anon9#1;
+
+ inline$CallCompletionRoutine$0$anon9#1:
+ goto inline$CallCompletionRoutine$0$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$0$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$0$Return#1;
+
+ inline$CallCompletionRoutine$0$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$0$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$0$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$0$Entry#1:
+ inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$0$start#1;
+
+ inline$BDLDevicePowerIoCompletion$0$start#1:
+ call inline$BDLDevicePowerIoCompletion$0$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$0$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_4#1:
+ inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_6#1:
+ inline$BDLDevicePowerIoCompletion$0$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$0$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$0$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$8$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$8$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$start#1:
+ inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$8$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$8$label_3_true#1, inline$IoGetCurrentIrpStackLocation$8$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$8$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$8$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$8$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$8$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$8$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$8$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$8$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$8$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$8$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$8$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$8$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$8$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$8$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$8$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$8$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$8$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$8$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$8$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$8$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$8$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$8$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon30_Then#1, inline$BDLDevicePowerIoCompletion$0$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_13#1:
+ inline$BDLDevicePowerIoCompletion$0$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_17#1:
+ goto inline$BDLGetDebugLevel$13$Entry#1;
+
+ inline$BDLGetDebugLevel$13$Entry#1:
+ goto inline$BDLGetDebugLevel$13$start#1;
+
+ inline$BDLGetDebugLevel$13$start#1:
+ goto inline$BDLGetDebugLevel$13$label_3#1;
+
+ inline$BDLGetDebugLevel$13$label_3#1:
+ havoc inline$BDLGetDebugLevel$13$myNondetVar_0;
+ inline$BDLGetDebugLevel$13$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$13$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$13$label_1#1;
+
+ inline$BDLGetDebugLevel$13$label_1#1:
+ goto inline$BDLGetDebugLevel$13$Return#1;
+
+ inline$BDLGetDebugLevel$13$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$13$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon31_Then#1, inline$BDLDevicePowerIoCompletion$0$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_20_true#1, inline$BDLDevicePowerIoCompletion$0$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_21#1:
+ goto inline$BDLGetDebugLevel$14$Entry#1;
+
+ inline$BDLGetDebugLevel$14$Entry#1:
+ goto inline$BDLGetDebugLevel$14$start#1;
+
+ inline$BDLGetDebugLevel$14$start#1:
+ goto inline$BDLGetDebugLevel$14$label_3#1;
+
+ inline$BDLGetDebugLevel$14$label_3#1:
+ havoc inline$BDLGetDebugLevel$14$myNondetVar_0;
+ inline$BDLGetDebugLevel$14$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$14$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$14$label_1#1;
+
+ inline$BDLGetDebugLevel$14$label_1#1:
+ goto inline$BDLGetDebugLevel$14$Return#1;
+
+ inline$BDLGetDebugLevel$14$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$14$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon32_Then#1, inline$BDLDevicePowerIoCompletion$0$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_30_true#1, inline$BDLDevicePowerIoCompletion$0$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_31#1:
+ goto inline$BDLGetDebugLevel$15$Entry#1;
+
+ inline$BDLGetDebugLevel$15$Entry#1:
+ goto inline$BDLGetDebugLevel$15$start#1;
+
+ inline$BDLGetDebugLevel$15$start#1:
+ goto inline$BDLGetDebugLevel$15$label_3#1;
+
+ inline$BDLGetDebugLevel$15$label_3#1:
+ havoc inline$BDLGetDebugLevel$15$myNondetVar_0;
+ inline$BDLGetDebugLevel$15$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$15$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$15$label_1#1;
+
+ inline$BDLGetDebugLevel$15$label_1#1:
+ goto inline$BDLGetDebugLevel$15$Return#1;
+
+ inline$BDLGetDebugLevel$15$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$15$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon33_Then#1, inline$BDLDevicePowerIoCompletion$0$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_40_true#1, inline$BDLDevicePowerIoCompletion$0$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_41_true#1, inline$BDLDevicePowerIoCompletion$0$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$0$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$0$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_44_true#1, inline$BDLDevicePowerIoCompletion$0$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_45_true#1, inline$BDLDevicePowerIoCompletion$0$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$0$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$0$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$0$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_54#1:
+ inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$0$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_55_true#1, inline$BDLDevicePowerIoCompletion$0$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$0$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$0$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$0$anon34_Then#1, inline$BDLDevicePowerIoCompletion$0$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_59#1:
+ goto inline$BDLGetDebugLevel$16$Entry#1;
+
+ inline$BDLGetDebugLevel$16$Entry#1:
+ goto inline$BDLGetDebugLevel$16$start#1;
+
+ inline$BDLGetDebugLevel$16$start#1:
+ goto inline$BDLGetDebugLevel$16$label_3#1;
+
+ inline$BDLGetDebugLevel$16$label_3#1:
+ havoc inline$BDLGetDebugLevel$16$myNondetVar_0;
+ inline$BDLGetDebugLevel$16$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$16$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$16$label_1#1;
+
+ inline$BDLGetDebugLevel$16$label_1#1:
+ goto inline$BDLGetDebugLevel$16$Return#1;
+
+ inline$BDLGetDebugLevel$16$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$16$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon35_Then#1, inline$BDLDevicePowerIoCompletion$0$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_62_true#1, inline$BDLDevicePowerIoCompletion$0$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_63#1:
+ goto inline$BDLGetDebugLevel$17$Entry#1;
+
+ inline$BDLGetDebugLevel$17$Entry#1:
+ goto inline$BDLGetDebugLevel$17$start#1;
+
+ inline$BDLGetDebugLevel$17$start#1:
+ goto inline$BDLGetDebugLevel$17$label_3#1;
+
+ inline$BDLGetDebugLevel$17$label_3#1:
+ havoc inline$BDLGetDebugLevel$17$myNondetVar_0;
+ inline$BDLGetDebugLevel$17$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$17$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$17$label_1#1;
+
+ inline$BDLGetDebugLevel$17$label_1#1:
+ goto inline$BDLGetDebugLevel$17$Return#1;
+
+ inline$BDLGetDebugLevel$17$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$17$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon36_Then#1, inline$BDLDevicePowerIoCompletion$0$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_72_true#1, inline$BDLDevicePowerIoCompletion$0$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_73#1:
+ goto inline$BDLGetDebugLevel$18$Entry#1;
+
+ inline$BDLGetDebugLevel$18$Entry#1:
+ goto inline$BDLGetDebugLevel$18$start#1;
+
+ inline$BDLGetDebugLevel$18$start#1:
+ goto inline$BDLGetDebugLevel$18$label_3#1;
+
+ inline$BDLGetDebugLevel$18$label_3#1:
+ havoc inline$BDLGetDebugLevel$18$myNondetVar_0;
+ inline$BDLGetDebugLevel$18$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$18$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$18$label_1#1;
+
+ inline$BDLGetDebugLevel$18$label_1#1:
+ goto inline$BDLGetDebugLevel$18$Return#1;
+
+ inline$BDLGetDebugLevel$18$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$18$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon37_Then#1, inline$BDLDevicePowerIoCompletion$0$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_82_true#1, inline$BDLDevicePowerIoCompletion$0$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$0$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$0$anon38_Then#1, inline$BDLDevicePowerIoCompletion$0$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$0$anon39_Then#1, inline$BDLDevicePowerIoCompletion$0$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_92#1:
+ goto inline$storm_IoCompleteRequest$1$Entry#1;
+
+ inline$storm_IoCompleteRequest$1$Entry#1:
+ inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$0$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$1$start#1;
+
+ inline$storm_IoCompleteRequest$1$start#1:
+ inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$1$label_3#1;
+
+ inline$storm_IoCompleteRequest$1$label_3#1:
+ call inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$1$label_6#1;
+
+ inline$storm_IoCompleteRequest$1$label_6#1:
+ goto inline$storm_IoCompleteRequest$1$label_6_true#1, inline$storm_IoCompleteRequest$1$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$1$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$1$label_7#1;
+
+ inline$storm_IoCompleteRequest$1$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$1$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$1$label_8#1;
+
+ inline$storm_IoCompleteRequest$1$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$1$anon3_Then#1, inline$storm_IoCompleteRequest$1$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$1$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$1$anon1#1;
+
+ inline$storm_IoCompleteRequest$1$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$1$label_9#1;
+
+ inline$storm_IoCompleteRequest$1$label_9#1:
+ goto inline$storm_IoCompleteRequest$1$label_9_true#1, inline$storm_IoCompleteRequest$1$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$1$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$1$label_10#1;
+
+ inline$storm_IoCompleteRequest$1$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$1$label_1#1;
+
+ inline$storm_IoCompleteRequest$1$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$1$label_7#1;
+
+ inline$storm_IoCompleteRequest$1$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$1$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$1$label_1#1;
+
+ inline$storm_IoCompleteRequest$1$label_1#1:
+ goto inline$storm_IoCompleteRequest$1$Return#1;
+
+ inline$storm_IoCompleteRequest$1$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$1$Return#1;
+
+ inline$storm_IoCompleteRequest$1$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon40_Then#1, inline$BDLDevicePowerIoCompletion$0$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$0$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$0$anon41_Then#1, inline$BDLDevicePowerIoCompletion$0$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_98#1:
+ goto inline$BDLGetDebugLevel$19$Entry#1;
+
+ inline$BDLGetDebugLevel$19$Entry#1:
+ goto inline$BDLGetDebugLevel$19$start#1;
+
+ inline$BDLGetDebugLevel$19$start#1:
+ goto inline$BDLGetDebugLevel$19$label_3#1;
+
+ inline$BDLGetDebugLevel$19$label_3#1:
+ havoc inline$BDLGetDebugLevel$19$myNondetVar_0;
+ inline$BDLGetDebugLevel$19$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$19$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$19$label_1#1;
+
+ inline$BDLGetDebugLevel$19$label_1#1:
+ goto inline$BDLGetDebugLevel$19$Return#1;
+
+ inline$BDLGetDebugLevel$19$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$19$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon42_Then#1, inline$BDLDevicePowerIoCompletion$0$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_101_true#1, inline$BDLDevicePowerIoCompletion$0$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_102#1:
+ goto inline$BDLGetDebugLevel$20$Entry#1;
+
+ inline$BDLGetDebugLevel$20$Entry#1:
+ goto inline$BDLGetDebugLevel$20$start#1;
+
+ inline$BDLGetDebugLevel$20$start#1:
+ goto inline$BDLGetDebugLevel$20$label_3#1;
+
+ inline$BDLGetDebugLevel$20$label_3#1:
+ havoc inline$BDLGetDebugLevel$20$myNondetVar_0;
+ inline$BDLGetDebugLevel$20$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$20$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$20$label_1#1;
+
+ inline$BDLGetDebugLevel$20$label_1#1:
+ goto inline$BDLGetDebugLevel$20$Return#1;
+
+ inline$BDLGetDebugLevel$20$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$20$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon43_Then#1, inline$BDLDevicePowerIoCompletion$0$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_111_true#1, inline$BDLDevicePowerIoCompletion$0$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$0$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$0$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_112#1:
+ goto inline$BDLGetDebugLevel$21$Entry#1;
+
+ inline$BDLGetDebugLevel$21$Entry#1:
+ goto inline$BDLGetDebugLevel$21$start#1;
+
+ inline$BDLGetDebugLevel$21$start#1:
+ goto inline$BDLGetDebugLevel$21$label_3#1;
+
+ inline$BDLGetDebugLevel$21$label_3#1:
+ havoc inline$BDLGetDebugLevel$21$myNondetVar_0;
+ inline$BDLGetDebugLevel$21$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$21$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$21$label_1#1;
+
+ inline$BDLGetDebugLevel$21$label_1#1:
+ goto inline$BDLGetDebugLevel$21$Return#1;
+
+ inline$BDLGetDebugLevel$21$Return#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$21$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$0$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$0$anon44_Then#1, inline$BDLDevicePowerIoCompletion$0$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_121_true#1, inline$BDLDevicePowerIoCompletion$0$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$0$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$0$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$0$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_122#1:
+ inline$BDLDevicePowerIoCompletion$0$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$0$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$0$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$0$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$0$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$0$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$0$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$0$Return#1:
+ inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$0$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$0$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$0$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$0$anon13_Then#1, inline$CallCompletionRoutine$0$anon13_Else#1;
+
+ inline$CallCompletionRoutine$0$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$0$anon7#1;
+
+ inline$CallCompletionRoutine$0$anon7#1:
+ goto inline$CallCompletionRoutine$0$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$0$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$0$Return#1;
+
+ inline$CallCompletionRoutine$0$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$0$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$0$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$0$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$0$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$0$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$start#1:
+ inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$0$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$0$label_3_true#1, inline$BDLCallDriverCompletionRoutine$0$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$0$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$0$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$0$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$0$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$0$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_6#1:
+ goto inline$storm_KeSetEvent$0$Entry#1;
+
+ inline$storm_KeSetEvent$0$Entry#1:
+ inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$0$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$0$start#1;
+
+ inline$storm_KeSetEvent$0$start#1:
+ inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$0$label_3#1;
+
+ inline$storm_KeSetEvent$0$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$0$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$0$label_1#1;
+
+ inline$storm_KeSetEvent$0$label_1#1:
+ goto inline$storm_KeSetEvent$0$Return#1;
+
+ inline$storm_KeSetEvent$0$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$0$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$0$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$0$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$0$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$0$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$0$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$0$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$0$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$0$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$0$Return#1:
+ inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$0$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$0$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$0$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$0$anon12_Then#1, inline$CallCompletionRoutine$0$anon12_Else#1;
+
+ inline$CallCompletionRoutine$0$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$0$anon5#1;
+
+ inline$CallCompletionRoutine$0$anon5#1:
+ goto inline$CallCompletionRoutine$0$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$0$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$0$label_23#1;
+
+ inline$CallCompletionRoutine$0$label_23#1:
+ inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$0$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$0$label_24#1;
+
+ inline$CallCompletionRoutine$0$label_24#1:
+ goto inline$CallCompletionRoutine$0$label_24_true#1, inline$CallCompletionRoutine$0$label_24_false#1;
+
+ inline$CallCompletionRoutine$0$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$0$label_1#1;
+
+ inline$CallCompletionRoutine$0$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$0$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$0$label_25#1;
+
+ inline$CallCompletionRoutine$0$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$0$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$0$label_1#1;
+
+ inline$CallCompletionRoutine$0$label_1#1:
+ goto inline$CallCompletionRoutine$0$Return#1;
+
+ inline$CallCompletionRoutine$0$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$0$Return#1;
+
+ inline$CallCompletionRoutine$0$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$0$Return#1;
+
+ inline$CallCompletionRoutine$0$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$0$Return#1;
+
+ inline$CallCompletionRoutine$0$Return#1:
+ goto inline$storm_IoCallDriver$0$label_33$1#1;
+
+ inline$storm_IoCallDriver$0$label_33$1#1:
+ goto inline$storm_IoCallDriver$0$anon14_Then#1, inline$storm_IoCallDriver$0$anon14_Else#1;
+
+ inline$storm_IoCallDriver$0$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$0$anon8#1;
+
+ inline$storm_IoCallDriver$0$anon8#1:
+ goto inline$storm_IoCallDriver$0$label_36#1;
+
+ inline$storm_IoCallDriver$0$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$0$Return#1;
+
+ inline$storm_IoCallDriver$0$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$0$label_29#1;
+
+ inline$storm_IoCallDriver$0$label_29#1:
+ inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$0$label_37#1;
+
+ inline$storm_IoCallDriver$0$label_37#1:
+ goto inline$storm_IoCallDriver$0$label_38#1;
+
+ inline$storm_IoCallDriver$0$label_38#1:
+ goto inline$storm_IoCallDriver$0$label_39#1;
+
+ inline$storm_IoCallDriver$0$label_39#1:
+ goto inline$CallCompletionRoutine$1$Entry#1;
+
+ inline$CallCompletionRoutine$1$Entry#1:
+ inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$1$start#1;
+
+ inline$CallCompletionRoutine$1$start#1:
+ inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$1$label_3#1;
+
+ inline$CallCompletionRoutine$1$label_3#1:
+ goto inline$CallCompletionRoutine$1$label_4#1;
+
+ inline$CallCompletionRoutine$1$label_4#1:
+ goto inline$CallCompletionRoutine$1$label_5#1;
+
+ inline$CallCompletionRoutine$1$label_5#1:
+ goto inline$CallCompletionRoutine$1$label_6#1;
+
+ inline$CallCompletionRoutine$1$label_6#1:
+ goto inline$CallCompletionRoutine$1$label_7#1;
+
+ inline$CallCompletionRoutine$1$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$10$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$10$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$start#1:
+ inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$10$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$10$label_3_true#1, inline$IoGetCurrentIrpStackLocation$10$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$10$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$10$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$10$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$10$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$10$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$10$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$10$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$10$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$10$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$10$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$10$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$10$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$10$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$10$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$10$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$10$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$10$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$10$Return#1:
+ goto inline$CallCompletionRoutine$1$label_7$1#1;
+
+ inline$CallCompletionRoutine$1$label_7$1#1:
+ goto inline$CallCompletionRoutine$1$anon10_Then#1, inline$CallCompletionRoutine$1$anon10_Else#1;
+
+ inline$CallCompletionRoutine$1$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$1$anon1#1;
+
+ inline$CallCompletionRoutine$1$anon1#1:
+ goto inline$CallCompletionRoutine$1$label_10#1;
+
+ inline$CallCompletionRoutine$1$label_10#1:
+ goto inline$CallCompletionRoutine$1$label_11#1;
+
+ inline$CallCompletionRoutine$1$label_11#1:
+ havoc inline$CallCompletionRoutine$1$myNondetVar_0;
+ inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$myNondetVar_0;
+ goto inline$CallCompletionRoutine$1$label_12#1;
+
+ inline$CallCompletionRoutine$1$label_12#1:
+ havoc inline$CallCompletionRoutine$1$myNondetVar_0;
+ inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$myNondetVar_0;
+ goto inline$CallCompletionRoutine$1$label_13#1;
+
+ inline$CallCompletionRoutine$1$label_13#1:
+ havoc inline$CallCompletionRoutine$1$myNondetVar_0;
+ goto inline$CallCompletionRoutine$1$label_14#1;
+
+ inline$CallCompletionRoutine$1$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$11$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$11$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$start#1:
+ inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$11$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$11$label_3_true#1, inline$IoGetCurrentIrpStackLocation$11$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$11$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$11$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$11$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$11$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$11$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$11$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$11$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$11$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$11$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$11$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$11$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$11$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$11$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$11$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$11$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$11$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$11$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$11$Return#1:
+ goto inline$CallCompletionRoutine$1$label_14$1#1;
+
+ inline$CallCompletionRoutine$1$label_14$1#1:
+ goto inline$CallCompletionRoutine$1$anon11_Then#1, inline$CallCompletionRoutine$1$anon11_Else#1;
+
+ inline$CallCompletionRoutine$1$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$1$anon3#1;
+
+ inline$CallCompletionRoutine$1$anon3#1:
+ goto inline$CallCompletionRoutine$1$label_17#1;
+
+ inline$CallCompletionRoutine$1$label_17#1:
+ goto inline$CallCompletionRoutine$1$label_18#1;
+
+ inline$CallCompletionRoutine$1$label_18#1:
+ goto inline$CallCompletionRoutine$1$label_18_true#1, inline$CallCompletionRoutine$1$label_18_false#1;
+
+ inline$CallCompletionRoutine$1$label_18_false#1:
+ assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$1$label_1#1;
+
+ inline$CallCompletionRoutine$1$label_18_true#1:
+ assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$1$label_19#1;
+
+ inline$CallCompletionRoutine$1$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$1$label_20#1;
+
+ inline$CallCompletionRoutine$1$label_20#1:
+ goto inline$CallCompletionRoutine$1$label_20_icall_1#1, inline$CallCompletionRoutine$1$label_20_icall_2#1, inline$CallCompletionRoutine$1$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$1$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$1$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$1$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$1$Entry#1:
+ inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$1$start#1;
+
+ inline$BDLSystemPowerIoCompletion$1$start#1:
+ call inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$1$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_4#1:
+ inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_6#1:
+ inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$1$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$1$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$13$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$13$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$start#1:
+ inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$13$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$13$label_3_true#1, inline$IoGetCurrentIrpStackLocation$13$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$13$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$13$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$13$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$13$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$13$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$13$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$13$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$13$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$13$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$13$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$13$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$13$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$13$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$13$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$13$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$13$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$13$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$13$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon36_Then#1, inline$BDLSystemPowerIoCompletion$1$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_15#1:
+ goto inline$BDLGetDebugLevel$43$Entry#1;
+
+ inline$BDLGetDebugLevel$43$Entry#1:
+ goto inline$BDLGetDebugLevel$43$start#1;
+
+ inline$BDLGetDebugLevel$43$start#1:
+ goto inline$BDLGetDebugLevel$43$label_3#1;
+
+ inline$BDLGetDebugLevel$43$label_3#1:
+ havoc inline$BDLGetDebugLevel$43$myNondetVar_0;
+ inline$BDLGetDebugLevel$43$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$43$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$43$label_1#1;
+
+ inline$BDLGetDebugLevel$43$label_1#1:
+ goto inline$BDLGetDebugLevel$43$Return#1;
+
+ inline$BDLGetDebugLevel$43$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$43$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon37_Then#1, inline$BDLSystemPowerIoCompletion$1$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_18_true#1, inline$BDLSystemPowerIoCompletion$1$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_19#1:
+ goto inline$BDLGetDebugLevel$44$Entry#1;
+
+ inline$BDLGetDebugLevel$44$Entry#1:
+ goto inline$BDLGetDebugLevel$44$start#1;
+
+ inline$BDLGetDebugLevel$44$start#1:
+ goto inline$BDLGetDebugLevel$44$label_3#1;
+
+ inline$BDLGetDebugLevel$44$label_3#1:
+ havoc inline$BDLGetDebugLevel$44$myNondetVar_0;
+ inline$BDLGetDebugLevel$44$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$44$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$44$label_1#1;
+
+ inline$BDLGetDebugLevel$44$label_1#1:
+ goto inline$BDLGetDebugLevel$44$Return#1;
+
+ inline$BDLGetDebugLevel$44$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$44$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon38_Then#1, inline$BDLSystemPowerIoCompletion$1$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_28_true#1, inline$BDLSystemPowerIoCompletion$1$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_29#1:
+ goto inline$BDLGetDebugLevel$45$Entry#1;
+
+ inline$BDLGetDebugLevel$45$Entry#1:
+ goto inline$BDLGetDebugLevel$45$start#1;
+
+ inline$BDLGetDebugLevel$45$start#1:
+ goto inline$BDLGetDebugLevel$45$label_3#1;
+
+ inline$BDLGetDebugLevel$45$label_3#1:
+ havoc inline$BDLGetDebugLevel$45$myNondetVar_0;
+ inline$BDLGetDebugLevel$45$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$45$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$45$label_1#1;
+
+ inline$BDLGetDebugLevel$45$label_1#1:
+ goto inline$BDLGetDebugLevel$45$Return#1;
+
+ inline$BDLGetDebugLevel$45$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$45$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon39_Then#1, inline$BDLSystemPowerIoCompletion$1$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_38_true#1, inline$BDLSystemPowerIoCompletion$1$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_39_true#1, inline$BDLSystemPowerIoCompletion$1$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$1$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$1$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$1$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$1$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$1$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_106_true#1, inline$BDLSystemPowerIoCompletion$1$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$1$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$1$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$1$myNondetVar_0, inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$1$anon50_Then#1, inline$BDLSystemPowerIoCompletion$1$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_112#1:
+ inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_113_true#1, inline$BDLSystemPowerIoCompletion$1$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$1$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_117#1:
+ goto inline$BDLGetDebugLevel$52$Entry#1;
+
+ inline$BDLGetDebugLevel$52$Entry#1:
+ goto inline$BDLGetDebugLevel$52$start#1;
+
+ inline$BDLGetDebugLevel$52$start#1:
+ goto inline$BDLGetDebugLevel$52$label_3#1;
+
+ inline$BDLGetDebugLevel$52$label_3#1:
+ havoc inline$BDLGetDebugLevel$52$myNondetVar_0;
+ inline$BDLGetDebugLevel$52$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$52$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$52$label_1#1;
+
+ inline$BDLGetDebugLevel$52$label_1#1:
+ goto inline$BDLGetDebugLevel$52$Return#1;
+
+ inline$BDLGetDebugLevel$52$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$52$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon51_Then#1, inline$BDLSystemPowerIoCompletion$1$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_120_true#1, inline$BDLSystemPowerIoCompletion$1$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_121#1:
+ goto inline$BDLGetDebugLevel$53$Entry#1;
+
+ inline$BDLGetDebugLevel$53$Entry#1:
+ goto inline$BDLGetDebugLevel$53$start#1;
+
+ inline$BDLGetDebugLevel$53$start#1:
+ goto inline$BDLGetDebugLevel$53$label_3#1;
+
+ inline$BDLGetDebugLevel$53$label_3#1:
+ havoc inline$BDLGetDebugLevel$53$myNondetVar_0;
+ inline$BDLGetDebugLevel$53$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$53$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$53$label_1#1;
+
+ inline$BDLGetDebugLevel$53$label_1#1:
+ goto inline$BDLGetDebugLevel$53$Return#1;
+
+ inline$BDLGetDebugLevel$53$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$53$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon52_Then#1, inline$BDLSystemPowerIoCompletion$1$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_130_true#1, inline$BDLSystemPowerIoCompletion$1$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_131#1:
+ goto inline$BDLGetDebugLevel$54$Entry#1;
+
+ inline$BDLGetDebugLevel$54$Entry#1:
+ goto inline$BDLGetDebugLevel$54$start#1;
+
+ inline$BDLGetDebugLevel$54$start#1:
+ goto inline$BDLGetDebugLevel$54$label_3#1;
+
+ inline$BDLGetDebugLevel$54$label_3#1:
+ havoc inline$BDLGetDebugLevel$54$myNondetVar_0;
+ inline$BDLGetDebugLevel$54$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$54$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$54$label_1#1;
+
+ inline$BDLGetDebugLevel$54$label_1#1:
+ goto inline$BDLGetDebugLevel$54$Return#1;
+
+ inline$BDLGetDebugLevel$54$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$54$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon53_Then#1, inline$BDLSystemPowerIoCompletion$1$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_140_true#1, inline$BDLSystemPowerIoCompletion$1$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$1$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_115#1:
+ inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$1$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$1$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$1$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_43#1:
+ goto inline$BDLGetDebugLevel$46$Entry#1;
+
+ inline$BDLGetDebugLevel$46$Entry#1:
+ goto inline$BDLGetDebugLevel$46$start#1;
+
+ inline$BDLGetDebugLevel$46$start#1:
+ goto inline$BDLGetDebugLevel$46$label_3#1;
+
+ inline$BDLGetDebugLevel$46$label_3#1:
+ havoc inline$BDLGetDebugLevel$46$myNondetVar_0;
+ inline$BDLGetDebugLevel$46$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$46$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$46$label_1#1;
+
+ inline$BDLGetDebugLevel$46$label_1#1:
+ goto inline$BDLGetDebugLevel$46$Return#1;
+
+ inline$BDLGetDebugLevel$46$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$46$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon40_Then#1, inline$BDLSystemPowerIoCompletion$1$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_46_true#1, inline$BDLSystemPowerIoCompletion$1$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_47#1:
+ goto inline$BDLGetDebugLevel$47$Entry#1;
+
+ inline$BDLGetDebugLevel$47$Entry#1:
+ goto inline$BDLGetDebugLevel$47$start#1;
+
+ inline$BDLGetDebugLevel$47$start#1:
+ goto inline$BDLGetDebugLevel$47$label_3#1;
+
+ inline$BDLGetDebugLevel$47$label_3#1:
+ havoc inline$BDLGetDebugLevel$47$myNondetVar_0;
+ inline$BDLGetDebugLevel$47$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$47$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$47$label_1#1;
+
+ inline$BDLGetDebugLevel$47$label_1#1:
+ goto inline$BDLGetDebugLevel$47$Return#1;
+
+ inline$BDLGetDebugLevel$47$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$47$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon41_Then#1, inline$BDLSystemPowerIoCompletion$1$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_56_true#1, inline$BDLSystemPowerIoCompletion$1$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_57#1:
+ goto inline$BDLGetDebugLevel$48$Entry#1;
+
+ inline$BDLGetDebugLevel$48$Entry#1:
+ goto inline$BDLGetDebugLevel$48$start#1;
+
+ inline$BDLGetDebugLevel$48$start#1:
+ goto inline$BDLGetDebugLevel$48$label_3#1;
+
+ inline$BDLGetDebugLevel$48$label_3#1:
+ havoc inline$BDLGetDebugLevel$48$myNondetVar_0;
+ inline$BDLGetDebugLevel$48$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$48$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$48$label_1#1;
+
+ inline$BDLGetDebugLevel$48$label_1#1:
+ goto inline$BDLGetDebugLevel$48$Return#1;
+
+ inline$BDLGetDebugLevel$48$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$48$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon42_Then#1, inline$BDLSystemPowerIoCompletion$1$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_66_true#1, inline$BDLSystemPowerIoCompletion$1$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$1$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$1$anon43_Then#1, inline$BDLSystemPowerIoCompletion$1$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$1$anon44_Then#1, inline$BDLSystemPowerIoCompletion$1$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_74#1:
+ goto inline$storm_IoCompleteRequest$4$Entry#1;
+
+ inline$storm_IoCompleteRequest$4$Entry#1:
+ inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$1$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$4$start#1;
+
+ inline$storm_IoCompleteRequest$4$start#1:
+ inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$4$label_3#1;
+
+ inline$storm_IoCompleteRequest$4$label_3#1:
+ call inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$4$label_6#1;
+
+ inline$storm_IoCompleteRequest$4$label_6#1:
+ goto inline$storm_IoCompleteRequest$4$label_6_true#1, inline$storm_IoCompleteRequest$4$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$4$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$4$label_7#1;
+
+ inline$storm_IoCompleteRequest$4$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$4$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$4$label_8#1;
+
+ inline$storm_IoCompleteRequest$4$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$4$anon3_Then#1, inline$storm_IoCompleteRequest$4$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$4$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$4$anon1#1;
+
+ inline$storm_IoCompleteRequest$4$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$4$label_9#1;
+
+ inline$storm_IoCompleteRequest$4$label_9#1:
+ goto inline$storm_IoCompleteRequest$4$label_9_true#1, inline$storm_IoCompleteRequest$4$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$4$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$4$label_10#1;
+
+ inline$storm_IoCompleteRequest$4$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$4$label_1#1;
+
+ inline$storm_IoCompleteRequest$4$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$4$label_7#1;
+
+ inline$storm_IoCompleteRequest$4$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$4$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$4$label_1#1;
+
+ inline$storm_IoCompleteRequest$4$label_1#1:
+ goto inline$storm_IoCompleteRequest$4$Return#1;
+
+ inline$storm_IoCompleteRequest$4$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$4$Return#1;
+
+ inline$storm_IoCompleteRequest$4$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon45_Then#1, inline$BDLSystemPowerIoCompletion$1$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$1$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$1$anon46_Then#1, inline$BDLSystemPowerIoCompletion$1$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_80#1:
+ goto inline$BDLGetDebugLevel$49$Entry#1;
+
+ inline$BDLGetDebugLevel$49$Entry#1:
+ goto inline$BDLGetDebugLevel$49$start#1;
+
+ inline$BDLGetDebugLevel$49$start#1:
+ goto inline$BDLGetDebugLevel$49$label_3#1;
+
+ inline$BDLGetDebugLevel$49$label_3#1:
+ havoc inline$BDLGetDebugLevel$49$myNondetVar_0;
+ inline$BDLGetDebugLevel$49$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$49$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$49$label_1#1;
+
+ inline$BDLGetDebugLevel$49$label_1#1:
+ goto inline$BDLGetDebugLevel$49$Return#1;
+
+ inline$BDLGetDebugLevel$49$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$49$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon47_Then#1, inline$BDLSystemPowerIoCompletion$1$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_83_true#1, inline$BDLSystemPowerIoCompletion$1$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_84#1:
+ goto inline$BDLGetDebugLevel$50$Entry#1;
+
+ inline$BDLGetDebugLevel$50$Entry#1:
+ goto inline$BDLGetDebugLevel$50$start#1;
+
+ inline$BDLGetDebugLevel$50$start#1:
+ goto inline$BDLGetDebugLevel$50$label_3#1;
+
+ inline$BDLGetDebugLevel$50$label_3#1:
+ havoc inline$BDLGetDebugLevel$50$myNondetVar_0;
+ inline$BDLGetDebugLevel$50$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$50$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$50$label_1#1;
+
+ inline$BDLGetDebugLevel$50$label_1#1:
+ goto inline$BDLGetDebugLevel$50$Return#1;
+
+ inline$BDLGetDebugLevel$50$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$50$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon48_Then#1, inline$BDLSystemPowerIoCompletion$1$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_93_true#1, inline$BDLSystemPowerIoCompletion$1$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$1$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$1$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_94#1:
+ goto inline$BDLGetDebugLevel$51$Entry#1;
+
+ inline$BDLGetDebugLevel$51$Entry#1:
+ goto inline$BDLGetDebugLevel$51$start#1;
+
+ inline$BDLGetDebugLevel$51$start#1:
+ goto inline$BDLGetDebugLevel$51$label_3#1;
+
+ inline$BDLGetDebugLevel$51$label_3#1:
+ havoc inline$BDLGetDebugLevel$51$myNondetVar_0;
+ inline$BDLGetDebugLevel$51$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$51$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$51$label_1#1;
+
+ inline$BDLGetDebugLevel$51$label_1#1:
+ goto inline$BDLGetDebugLevel$51$Return#1;
+
+ inline$BDLGetDebugLevel$51$Return#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$51$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$1$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$1$anon49_Then#1, inline$BDLSystemPowerIoCompletion$1$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_103_true#1, inline$BDLSystemPowerIoCompletion$1$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$1$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$1$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$1$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_104#1:
+ inline$BDLSystemPowerIoCompletion$1$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$1$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$1$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$1$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$1$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$1$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$1$Return#1:
+ inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$1$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$1$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$1$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$1$anon14_Then#1, inline$CallCompletionRoutine$1$anon14_Else#1;
+
+ inline$CallCompletionRoutine$1$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$1$anon9#1;
+
+ inline$CallCompletionRoutine$1$anon9#1:
+ goto inline$CallCompletionRoutine$1$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$1$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$1$Return#1;
+
+ inline$CallCompletionRoutine$1$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$1$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$1$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$1$Entry#1:
+ inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$1$start#1;
+
+ inline$BDLDevicePowerIoCompletion$1$start#1:
+ call inline$BDLDevicePowerIoCompletion$1$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$1$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_4#1:
+ inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_6#1:
+ inline$BDLDevicePowerIoCompletion$1$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$1$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$1$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$12$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$12$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$start#1:
+ inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$12$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$12$label_3_true#1, inline$IoGetCurrentIrpStackLocation$12$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$12$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$12$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$12$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$12$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$12$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$12$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$12$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$12$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$12$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$12$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$12$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$12$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$12$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$12$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$12$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$12$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$12$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$12$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$12$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$12$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$12$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon30_Then#1, inline$BDLDevicePowerIoCompletion$1$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_13#1:
+ inline$BDLDevicePowerIoCompletion$1$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_17#1:
+ goto inline$BDLGetDebugLevel$34$Entry#1;
+
+ inline$BDLGetDebugLevel$34$Entry#1:
+ goto inline$BDLGetDebugLevel$34$start#1;
+
+ inline$BDLGetDebugLevel$34$start#1:
+ goto inline$BDLGetDebugLevel$34$label_3#1;
+
+ inline$BDLGetDebugLevel$34$label_3#1:
+ havoc inline$BDLGetDebugLevel$34$myNondetVar_0;
+ inline$BDLGetDebugLevel$34$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$34$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$34$label_1#1;
+
+ inline$BDLGetDebugLevel$34$label_1#1:
+ goto inline$BDLGetDebugLevel$34$Return#1;
+
+ inline$BDLGetDebugLevel$34$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$34$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon31_Then#1, inline$BDLDevicePowerIoCompletion$1$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_20_true#1, inline$BDLDevicePowerIoCompletion$1$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_21#1:
+ goto inline$BDLGetDebugLevel$35$Entry#1;
+
+ inline$BDLGetDebugLevel$35$Entry#1:
+ goto inline$BDLGetDebugLevel$35$start#1;
+
+ inline$BDLGetDebugLevel$35$start#1:
+ goto inline$BDLGetDebugLevel$35$label_3#1;
+
+ inline$BDLGetDebugLevel$35$label_3#1:
+ havoc inline$BDLGetDebugLevel$35$myNondetVar_0;
+ inline$BDLGetDebugLevel$35$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$35$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$35$label_1#1;
+
+ inline$BDLGetDebugLevel$35$label_1#1:
+ goto inline$BDLGetDebugLevel$35$Return#1;
+
+ inline$BDLGetDebugLevel$35$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$35$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon32_Then#1, inline$BDLDevicePowerIoCompletion$1$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_30_true#1, inline$BDLDevicePowerIoCompletion$1$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_31#1:
+ goto inline$BDLGetDebugLevel$36$Entry#1;
+
+ inline$BDLGetDebugLevel$36$Entry#1:
+ goto inline$BDLGetDebugLevel$36$start#1;
+
+ inline$BDLGetDebugLevel$36$start#1:
+ goto inline$BDLGetDebugLevel$36$label_3#1;
+
+ inline$BDLGetDebugLevel$36$label_3#1:
+ havoc inline$BDLGetDebugLevel$36$myNondetVar_0;
+ inline$BDLGetDebugLevel$36$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$36$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$36$label_1#1;
+
+ inline$BDLGetDebugLevel$36$label_1#1:
+ goto inline$BDLGetDebugLevel$36$Return#1;
+
+ inline$BDLGetDebugLevel$36$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$36$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon33_Then#1, inline$BDLDevicePowerIoCompletion$1$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_40_true#1, inline$BDLDevicePowerIoCompletion$1$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_41_true#1, inline$BDLDevicePowerIoCompletion$1$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$1$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$1$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_44_true#1, inline$BDLDevicePowerIoCompletion$1$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_45_true#1, inline$BDLDevicePowerIoCompletion$1$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$1$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$1$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$1$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_54#1:
+ inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$1$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_55_true#1, inline$BDLDevicePowerIoCompletion$1$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$1$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$1$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$1$anon34_Then#1, inline$BDLDevicePowerIoCompletion$1$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_59#1:
+ goto inline$BDLGetDebugLevel$37$Entry#1;
+
+ inline$BDLGetDebugLevel$37$Entry#1:
+ goto inline$BDLGetDebugLevel$37$start#1;
+
+ inline$BDLGetDebugLevel$37$start#1:
+ goto inline$BDLGetDebugLevel$37$label_3#1;
+
+ inline$BDLGetDebugLevel$37$label_3#1:
+ havoc inline$BDLGetDebugLevel$37$myNondetVar_0;
+ inline$BDLGetDebugLevel$37$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$37$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$37$label_1#1;
+
+ inline$BDLGetDebugLevel$37$label_1#1:
+ goto inline$BDLGetDebugLevel$37$Return#1;
+
+ inline$BDLGetDebugLevel$37$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$37$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon35_Then#1, inline$BDLDevicePowerIoCompletion$1$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_62_true#1, inline$BDLDevicePowerIoCompletion$1$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_63#1:
+ goto inline$BDLGetDebugLevel$38$Entry#1;
+
+ inline$BDLGetDebugLevel$38$Entry#1:
+ goto inline$BDLGetDebugLevel$38$start#1;
+
+ inline$BDLGetDebugLevel$38$start#1:
+ goto inline$BDLGetDebugLevel$38$label_3#1;
+
+ inline$BDLGetDebugLevel$38$label_3#1:
+ havoc inline$BDLGetDebugLevel$38$myNondetVar_0;
+ inline$BDLGetDebugLevel$38$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$38$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$38$label_1#1;
+
+ inline$BDLGetDebugLevel$38$label_1#1:
+ goto inline$BDLGetDebugLevel$38$Return#1;
+
+ inline$BDLGetDebugLevel$38$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$38$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon36_Then#1, inline$BDLDevicePowerIoCompletion$1$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_72_true#1, inline$BDLDevicePowerIoCompletion$1$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_73#1:
+ goto inline$BDLGetDebugLevel$39$Entry#1;
+
+ inline$BDLGetDebugLevel$39$Entry#1:
+ goto inline$BDLGetDebugLevel$39$start#1;
+
+ inline$BDLGetDebugLevel$39$start#1:
+ goto inline$BDLGetDebugLevel$39$label_3#1;
+
+ inline$BDLGetDebugLevel$39$label_3#1:
+ havoc inline$BDLGetDebugLevel$39$myNondetVar_0;
+ inline$BDLGetDebugLevel$39$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$39$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$39$label_1#1;
+
+ inline$BDLGetDebugLevel$39$label_1#1:
+ goto inline$BDLGetDebugLevel$39$Return#1;
+
+ inline$BDLGetDebugLevel$39$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$39$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon37_Then#1, inline$BDLDevicePowerIoCompletion$1$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_82_true#1, inline$BDLDevicePowerIoCompletion$1$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$1$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$1$anon38_Then#1, inline$BDLDevicePowerIoCompletion$1$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$1$anon39_Then#1, inline$BDLDevicePowerIoCompletion$1$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_92#1:
+ goto inline$storm_IoCompleteRequest$3$Entry#1;
+
+ inline$storm_IoCompleteRequest$3$Entry#1:
+ inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$1$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$3$start#1;
+
+ inline$storm_IoCompleteRequest$3$start#1:
+ inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$3$label_3#1;
+
+ inline$storm_IoCompleteRequest$3$label_3#1:
+ call inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$3$label_6#1;
+
+ inline$storm_IoCompleteRequest$3$label_6#1:
+ goto inline$storm_IoCompleteRequest$3$label_6_true#1, inline$storm_IoCompleteRequest$3$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$3$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$3$label_7#1;
+
+ inline$storm_IoCompleteRequest$3$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$3$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$3$label_8#1;
+
+ inline$storm_IoCompleteRequest$3$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$3$anon3_Then#1, inline$storm_IoCompleteRequest$3$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$3$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$3$anon1#1;
+
+ inline$storm_IoCompleteRequest$3$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$3$label_9#1;
+
+ inline$storm_IoCompleteRequest$3$label_9#1:
+ goto inline$storm_IoCompleteRequest$3$label_9_true#1, inline$storm_IoCompleteRequest$3$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$3$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$3$label_10#1;
+
+ inline$storm_IoCompleteRequest$3$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$3$label_1#1;
+
+ inline$storm_IoCompleteRequest$3$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$3$label_7#1;
+
+ inline$storm_IoCompleteRequest$3$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$3$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$3$label_1#1;
+
+ inline$storm_IoCompleteRequest$3$label_1#1:
+ goto inline$storm_IoCompleteRequest$3$Return#1;
+
+ inline$storm_IoCompleteRequest$3$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$3$Return#1;
+
+ inline$storm_IoCompleteRequest$3$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon40_Then#1, inline$BDLDevicePowerIoCompletion$1$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$1$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$1$anon41_Then#1, inline$BDLDevicePowerIoCompletion$1$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_98#1:
+ goto inline$BDLGetDebugLevel$40$Entry#1;
+
+ inline$BDLGetDebugLevel$40$Entry#1:
+ goto inline$BDLGetDebugLevel$40$start#1;
+
+ inline$BDLGetDebugLevel$40$start#1:
+ goto inline$BDLGetDebugLevel$40$label_3#1;
+
+ inline$BDLGetDebugLevel$40$label_3#1:
+ havoc inline$BDLGetDebugLevel$40$myNondetVar_0;
+ inline$BDLGetDebugLevel$40$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$40$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$40$label_1#1;
+
+ inline$BDLGetDebugLevel$40$label_1#1:
+ goto inline$BDLGetDebugLevel$40$Return#1;
+
+ inline$BDLGetDebugLevel$40$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$40$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon42_Then#1, inline$BDLDevicePowerIoCompletion$1$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_101_true#1, inline$BDLDevicePowerIoCompletion$1$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_102#1:
+ goto inline$BDLGetDebugLevel$41$Entry#1;
+
+ inline$BDLGetDebugLevel$41$Entry#1:
+ goto inline$BDLGetDebugLevel$41$start#1;
+
+ inline$BDLGetDebugLevel$41$start#1:
+ goto inline$BDLGetDebugLevel$41$label_3#1;
+
+ inline$BDLGetDebugLevel$41$label_3#1:
+ havoc inline$BDLGetDebugLevel$41$myNondetVar_0;
+ inline$BDLGetDebugLevel$41$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$41$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$41$label_1#1;
+
+ inline$BDLGetDebugLevel$41$label_1#1:
+ goto inline$BDLGetDebugLevel$41$Return#1;
+
+ inline$BDLGetDebugLevel$41$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$41$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon43_Then#1, inline$BDLDevicePowerIoCompletion$1$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_111_true#1, inline$BDLDevicePowerIoCompletion$1$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$1$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$1$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$1$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_112#1:
+ goto inline$BDLGetDebugLevel$42$Entry#1;
+
+ inline$BDLGetDebugLevel$42$Entry#1:
+ goto inline$BDLGetDebugLevel$42$start#1;
+
+ inline$BDLGetDebugLevel$42$start#1:
+ goto inline$BDLGetDebugLevel$42$label_3#1;
+
+ inline$BDLGetDebugLevel$42$label_3#1:
+ havoc inline$BDLGetDebugLevel$42$myNondetVar_0;
+ inline$BDLGetDebugLevel$42$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$42$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$42$label_1#1;
+
+ inline$BDLGetDebugLevel$42$label_1#1:
+ goto inline$BDLGetDebugLevel$42$Return#1;
+
+ inline$BDLGetDebugLevel$42$Return#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$42$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$1$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$1$anon44_Then#1, inline$BDLDevicePowerIoCompletion$1$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_121_true#1, inline$BDLDevicePowerIoCompletion$1$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$1$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$1$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$1$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_122#1:
+ inline$BDLDevicePowerIoCompletion$1$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$1$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$1$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$1$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$1$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$1$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$1$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$1$Return#1:
+ inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$1$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$1$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$1$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$1$anon13_Then#1, inline$CallCompletionRoutine$1$anon13_Else#1;
+
+ inline$CallCompletionRoutine$1$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$1$anon7#1;
+
+ inline$CallCompletionRoutine$1$anon7#1:
+ goto inline$CallCompletionRoutine$1$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$1$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$1$Return#1;
+
+ inline$CallCompletionRoutine$1$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$1$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$1$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$1$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$1$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$1$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$start#1:
+ inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$1$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$1$label_3_true#1, inline$BDLCallDriverCompletionRoutine$1$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$1$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$1$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$1$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$1$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$1$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_6#1:
+ goto inline$storm_KeSetEvent$1$Entry#1;
+
+ inline$storm_KeSetEvent$1$Entry#1:
+ inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$1$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$1$start#1;
+
+ inline$storm_KeSetEvent$1$start#1:
+ inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$1$label_3#1;
+
+ inline$storm_KeSetEvent$1$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$1$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$1$label_1#1;
+
+ inline$storm_KeSetEvent$1$label_1#1:
+ goto inline$storm_KeSetEvent$1$Return#1;
+
+ inline$storm_KeSetEvent$1$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$1$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$1$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$1$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$1$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$1$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$1$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$1$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$1$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$1$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$1$Return#1:
+ inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$1$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$1$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$1$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$1$anon12_Then#1, inline$CallCompletionRoutine$1$anon12_Else#1;
+
+ inline$CallCompletionRoutine$1$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$1$anon5#1;
+
+ inline$CallCompletionRoutine$1$anon5#1:
+ goto inline$CallCompletionRoutine$1$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$1$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$1$label_23#1;
+
+ inline$CallCompletionRoutine$1$label_23#1:
+ inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$1$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$1$label_24#1;
+
+ inline$CallCompletionRoutine$1$label_24#1:
+ goto inline$CallCompletionRoutine$1$label_24_true#1, inline$CallCompletionRoutine$1$label_24_false#1;
+
+ inline$CallCompletionRoutine$1$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$1$label_1#1;
+
+ inline$CallCompletionRoutine$1$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$1$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$1$label_25#1;
+
+ inline$CallCompletionRoutine$1$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$1$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$1$label_1#1;
+
+ inline$CallCompletionRoutine$1$label_1#1:
+ goto inline$CallCompletionRoutine$1$Return#1;
+
+ inline$CallCompletionRoutine$1$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$1$Return#1;
+
+ inline$CallCompletionRoutine$1$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$1$Return#1;
+
+ inline$CallCompletionRoutine$1$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$1$Return#1;
+
+ inline$CallCompletionRoutine$1$Return#1:
+ goto inline$storm_IoCallDriver$0$label_39$1#1;
+
+ inline$storm_IoCallDriver$0$label_39$1#1:
+ goto inline$storm_IoCallDriver$0$anon15_Then#1, inline$storm_IoCallDriver$0$anon15_Else#1;
+
+ inline$storm_IoCallDriver$0$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$0$anon10#1;
+
+ inline$storm_IoCallDriver$0$anon10#1:
+ goto inline$storm_IoCallDriver$0$label_36#1;
+
+ inline$storm_IoCallDriver$0$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$0$Return#1;
+
+ inline$storm_IoCallDriver$0$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$0$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$0$label_28#1;
+
+ inline$storm_IoCallDriver$0$label_28#1:
+ inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$0$label_42#1;
+
+ inline$storm_IoCallDriver$0$label_42#1:
+ goto inline$storm_IoCallDriver$0$label_43#1;
+
+ inline$storm_IoCallDriver$0$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$0$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$0$label_36#1;
+
+ inline$storm_IoCallDriver$0$label_36#1:
+ inline$storm_IoCallDriver$0$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$0$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$0$label_1#1;
+
+ inline$storm_IoCallDriver$0$label_1#1:
+ goto inline$storm_IoCallDriver$0$Return#1;
+
+ inline$storm_IoCallDriver$0$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$0$Return#1;
+
+ inline$storm_IoCallDriver$0$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$0$Return#1;
+
+ inline$storm_IoCallDriver$0$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$0$Return#1;
+
+ inline$storm_IoCallDriver$0$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_IoCallDriver$108.29$4$ := inline$storm_IoCallDriver$0$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_19$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_19$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon20_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon20_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon20_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon9#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon9#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_42#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_42#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_IoCallDriver$108.29$4$;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon20_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_18_true#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0, 22);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_22#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_22#1:
+ call PoStartNextPowerIrp(inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon21_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon21_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon21_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon11#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon11#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_25#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_25#1:
+ goto inline$storm_PoCallDriver$0$Entry#1;
+
+ inline$storm_PoCallDriver$0$Entry#1:
+ inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$pIrp$2$74.24$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$storm_PoCallDriver$0$start#1;
+
+ inline$storm_PoCallDriver$0$start#1:
+ inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8 := inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8_.1;
+ goto inline$storm_PoCallDriver$0$label_3#1;
+
+ inline$storm_PoCallDriver$0$label_3#1:
+ goto inline$storm_IoCallDriver$1$Entry#1;
+
+ inline$storm_IoCallDriver$1$Entry#1:
+ inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$storm_PoCallDriver$0$$Irp$2$496.14$storm_PoCallDriver$8;
+ goto inline$storm_IoCallDriver$1$start#1;
+
+ inline$storm_IoCallDriver$1$start#1:
+ inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$1$label_3#1;
+
+ inline$storm_IoCallDriver$1$label_3#1:
+ goto inline$storm_IoCallDriver$1$label_4#1;
+
+ inline$storm_IoCallDriver$1$label_4#1:
+ goto inline$storm_IoCallDriver$1$label_5#1;
+
+ inline$storm_IoCallDriver$1$label_5#1:
+ goto inline$storm_IoCallDriver$1$label_6#1;
+
+ inline$storm_IoCallDriver$1$label_6#1:
+ call inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$1$label_9#1;
+
+ inline$storm_IoCallDriver$1$label_9#1:
+ goto inline$storm_IoCallDriver$1$label_9_true#1, inline$storm_IoCallDriver$1$label_9_false#1;
+
+ inline$storm_IoCallDriver$1$label_9_false#1:
+ assume inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$1$label_10#1;
+
+ inline$storm_IoCallDriver$1$label_9_true#1:
+ assume inline$storm_IoCallDriver$1$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$1$label_13#1;
+
+ inline$storm_IoCallDriver$1$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$1$anon12_Then#1, inline$storm_IoCallDriver$1$anon12_Else#1;
+
+ inline$storm_IoCallDriver$1$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$1$anon3#1;
+
+ inline$storm_IoCallDriver$1$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$1$label_14#1;
+
+ inline$storm_IoCallDriver$1$label_14#1:
+ goto inline$storm_IoCallDriver$1$label_14_true#1, inline$storm_IoCallDriver$1$label_14_false#1;
+
+ inline$storm_IoCallDriver$1$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$1$label_15#1;
+
+ inline$storm_IoCallDriver$1$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$1$label_1#1;
+
+ inline$storm_IoCallDriver$1$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$1$label_10#1;
+
+ inline$storm_IoCallDriver$1$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$2$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$2$Entry#1:
+ inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$2$start#1;
+
+ inline$IoSetNextIrpStackLocation$2$start#1:
+ inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$2$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$2$label_3_true#1, inline$IoSetNextIrpStackLocation$2$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$2$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$2$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_4#1:
+ call inline$IoSetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$2$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_7#1:
+ call inline$IoSetNextIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$2$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$2$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$2$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$2$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_5#1:
+ inline$IoSetNextIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$2$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$2$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$2$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$2$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$2$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$2$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$2$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$2$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$2$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$2$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$2$Return#1;
+
+ inline$IoSetNextIrpStackLocation$2$Return#1:
+ goto inline$storm_IoCallDriver$1$label_10$1#1;
+
+ inline$storm_IoCallDriver$1$label_10$1#1:
+ goto inline$storm_IoCallDriver$1$anon11_Then#1, inline$storm_IoCallDriver$1$anon11_Else#1;
+
+ inline$storm_IoCallDriver$1$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$1$anon1#1;
+
+ inline$storm_IoCallDriver$1$anon1#1:
+ goto inline$storm_IoCallDriver$1$label_18#1;
+
+ inline$storm_IoCallDriver$1$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$14$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$14$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$start#1:
+ inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$14$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$14$label_3_true#1, inline$IoGetCurrentIrpStackLocation$14$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$14$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$14$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$14$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$14$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$14$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$14$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$14$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$14$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$14$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$14$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$14$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$14$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$14$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$14$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$14$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$14$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$14$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$14$Return#1:
+ goto inline$storm_IoCallDriver$1$label_18$1#1;
+
+ inline$storm_IoCallDriver$1$label_18$1#1:
+ goto inline$storm_IoCallDriver$1$anon13_Then#1, inline$storm_IoCallDriver$1$anon13_Else#1;
+
+ inline$storm_IoCallDriver$1$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$1$anon6#1;
+
+ inline$storm_IoCallDriver$1$anon6#1:
+ goto inline$storm_IoCallDriver$1$label_21#1;
+
+ inline$storm_IoCallDriver$1$label_21#1:
+ goto inline$storm_IoCallDriver$1$label_22#1;
+
+ inline$storm_IoCallDriver$1$label_22#1:
+ goto inline$storm_IoCallDriver$1$label_23#1;
+
+ inline$storm_IoCallDriver$1$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$1$label_24#1;
+
+ inline$storm_IoCallDriver$1$label_24#1:
+ call inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$1$label_27#1;
+
+ inline$storm_IoCallDriver$1$label_27#1:
+ goto inline$storm_IoCallDriver$1$label_27_case_0#1, inline$storm_IoCallDriver$1$label_27_case_1#1, inline$storm_IoCallDriver$1$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$1$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$1$label_30#1;
+
+ inline$storm_IoCallDriver$1$label_30#1:
+ inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$1$label_31#1;
+
+ inline$storm_IoCallDriver$1$label_31#1:
+ goto inline$storm_IoCallDriver$1$label_32#1;
+
+ inline$storm_IoCallDriver$1$label_32#1:
+ goto inline$storm_IoCallDriver$1$label_33#1;
+
+ inline$storm_IoCallDriver$1$label_33#1:
+ goto inline$CallCompletionRoutine$2$Entry#1;
+
+ inline$CallCompletionRoutine$2$Entry#1:
+ inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$2$start#1;
+
+ inline$CallCompletionRoutine$2$start#1:
+ inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$2$label_3#1;
+
+ inline$CallCompletionRoutine$2$label_3#1:
+ goto inline$CallCompletionRoutine$2$label_4#1;
+
+ inline$CallCompletionRoutine$2$label_4#1:
+ goto inline$CallCompletionRoutine$2$label_5#1;
+
+ inline$CallCompletionRoutine$2$label_5#1:
+ goto inline$CallCompletionRoutine$2$label_6#1;
+
+ inline$CallCompletionRoutine$2$label_6#1:
+ goto inline$CallCompletionRoutine$2$label_7#1;
+
+ inline$CallCompletionRoutine$2$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$15$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$15$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$start#1:
+ inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$15$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$15$label_3_true#1, inline$IoGetCurrentIrpStackLocation$15$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$15$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$15$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$15$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$15$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$15$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$15$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$15$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$15$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$15$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$15$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$15$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$15$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$15$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$15$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$15$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$15$Return#1:
+ goto inline$CallCompletionRoutine$2$label_7$1#1;
+
+ inline$CallCompletionRoutine$2$label_7$1#1:
+ goto inline$CallCompletionRoutine$2$anon10_Then#1, inline$CallCompletionRoutine$2$anon10_Else#1;
+
+ inline$CallCompletionRoutine$2$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$2$anon1#1;
+
+ inline$CallCompletionRoutine$2$anon1#1:
+ goto inline$CallCompletionRoutine$2$label_10#1;
+
+ inline$CallCompletionRoutine$2$label_10#1:
+ goto inline$CallCompletionRoutine$2$label_11#1;
+
+ inline$CallCompletionRoutine$2$label_11#1:
+ havoc inline$CallCompletionRoutine$2$myNondetVar_0;
+ inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$myNondetVar_0;
+ goto inline$CallCompletionRoutine$2$label_12#1;
+
+ inline$CallCompletionRoutine$2$label_12#1:
+ havoc inline$CallCompletionRoutine$2$myNondetVar_0;
+ inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$myNondetVar_0;
+ goto inline$CallCompletionRoutine$2$label_13#1;
+
+ inline$CallCompletionRoutine$2$label_13#1:
+ havoc inline$CallCompletionRoutine$2$myNondetVar_0;
+ goto inline$CallCompletionRoutine$2$label_14#1;
+
+ inline$CallCompletionRoutine$2$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$16$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$16$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$start#1:
+ inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$16$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$16$label_3_true#1, inline$IoGetCurrentIrpStackLocation$16$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$16$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$16$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$16$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$16$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$16$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$16$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$16$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$16$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$16$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$16$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$16$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$16$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$16$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$16$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$16$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$16$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$16$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$16$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$16$Return#1:
+ goto inline$CallCompletionRoutine$2$label_14$1#1;
+
+ inline$CallCompletionRoutine$2$label_14$1#1:
+ goto inline$CallCompletionRoutine$2$anon11_Then#1, inline$CallCompletionRoutine$2$anon11_Else#1;
+
+ inline$CallCompletionRoutine$2$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$2$anon3#1;
+
+ inline$CallCompletionRoutine$2$anon3#1:
+ goto inline$CallCompletionRoutine$2$label_17#1;
+
+ inline$CallCompletionRoutine$2$label_17#1:
+ goto inline$CallCompletionRoutine$2$label_18#1;
+
+ inline$CallCompletionRoutine$2$label_18#1:
+ goto inline$CallCompletionRoutine$2$label_18_true#1, inline$CallCompletionRoutine$2$label_18_false#1;
+
+ inline$CallCompletionRoutine$2$label_18_false#1:
+ assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$2$label_1#1;
+
+ inline$CallCompletionRoutine$2$label_18_true#1:
+ assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$2$label_19#1;
+
+ inline$CallCompletionRoutine$2$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$2$label_20#1;
+
+ inline$CallCompletionRoutine$2$label_20#1:
+ goto inline$CallCompletionRoutine$2$label_20_icall_1#1, inline$CallCompletionRoutine$2$label_20_icall_2#1, inline$CallCompletionRoutine$2$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$2$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$2$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$2$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$2$Entry#1:
+ inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$2$start#1;
+
+ inline$BDLSystemPowerIoCompletion$2$start#1:
+ call inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$2$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_4#1:
+ inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_6#1:
+ inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$2$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$2$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$18$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$18$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$start#1:
+ inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$18$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$18$label_3_true#1, inline$IoGetCurrentIrpStackLocation$18$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$18$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$18$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$18$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$18$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$18$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$18$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$18$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$18$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$18$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$18$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$18$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$18$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$18$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$18$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$18$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$18$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$18$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$18$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$18$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon36_Then#1, inline$BDLSystemPowerIoCompletion$2$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_15#1:
+ goto inline$BDLGetDebugLevel$64$Entry#1;
+
+ inline$BDLGetDebugLevel$64$Entry#1:
+ goto inline$BDLGetDebugLevel$64$start#1;
+
+ inline$BDLGetDebugLevel$64$start#1:
+ goto inline$BDLGetDebugLevel$64$label_3#1;
+
+ inline$BDLGetDebugLevel$64$label_3#1:
+ havoc inline$BDLGetDebugLevel$64$myNondetVar_0;
+ inline$BDLGetDebugLevel$64$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$64$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$64$label_1#1;
+
+ inline$BDLGetDebugLevel$64$label_1#1:
+ goto inline$BDLGetDebugLevel$64$Return#1;
+
+ inline$BDLGetDebugLevel$64$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$64$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon37_Then#1, inline$BDLSystemPowerIoCompletion$2$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_18_true#1, inline$BDLSystemPowerIoCompletion$2$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_19#1:
+ goto inline$BDLGetDebugLevel$65$Entry#1;
+
+ inline$BDLGetDebugLevel$65$Entry#1:
+ goto inline$BDLGetDebugLevel$65$start#1;
+
+ inline$BDLGetDebugLevel$65$start#1:
+ goto inline$BDLGetDebugLevel$65$label_3#1;
+
+ inline$BDLGetDebugLevel$65$label_3#1:
+ havoc inline$BDLGetDebugLevel$65$myNondetVar_0;
+ inline$BDLGetDebugLevel$65$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$65$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$65$label_1#1;
+
+ inline$BDLGetDebugLevel$65$label_1#1:
+ goto inline$BDLGetDebugLevel$65$Return#1;
+
+ inline$BDLGetDebugLevel$65$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$65$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon38_Then#1, inline$BDLSystemPowerIoCompletion$2$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_28_true#1, inline$BDLSystemPowerIoCompletion$2$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_29#1:
+ goto inline$BDLGetDebugLevel$66$Entry#1;
+
+ inline$BDLGetDebugLevel$66$Entry#1:
+ goto inline$BDLGetDebugLevel$66$start#1;
+
+ inline$BDLGetDebugLevel$66$start#1:
+ goto inline$BDLGetDebugLevel$66$label_3#1;
+
+ inline$BDLGetDebugLevel$66$label_3#1:
+ havoc inline$BDLGetDebugLevel$66$myNondetVar_0;
+ inline$BDLGetDebugLevel$66$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$66$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$66$label_1#1;
+
+ inline$BDLGetDebugLevel$66$label_1#1:
+ goto inline$BDLGetDebugLevel$66$Return#1;
+
+ inline$BDLGetDebugLevel$66$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$66$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon39_Then#1, inline$BDLSystemPowerIoCompletion$2$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_38_true#1, inline$BDLSystemPowerIoCompletion$2$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_39_true#1, inline$BDLSystemPowerIoCompletion$2$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$2$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$2$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$2$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$2$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$2$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_106_true#1, inline$BDLSystemPowerIoCompletion$2$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$2$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$2$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$2$myNondetVar_0, inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$2$anon50_Then#1, inline$BDLSystemPowerIoCompletion$2$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_112#1:
+ inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_113_true#1, inline$BDLSystemPowerIoCompletion$2$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$2$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_117#1:
+ goto inline$BDLGetDebugLevel$73$Entry#1;
+
+ inline$BDLGetDebugLevel$73$Entry#1:
+ goto inline$BDLGetDebugLevel$73$start#1;
+
+ inline$BDLGetDebugLevel$73$start#1:
+ goto inline$BDLGetDebugLevel$73$label_3#1;
+
+ inline$BDLGetDebugLevel$73$label_3#1:
+ havoc inline$BDLGetDebugLevel$73$myNondetVar_0;
+ inline$BDLGetDebugLevel$73$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$73$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$73$label_1#1;
+
+ inline$BDLGetDebugLevel$73$label_1#1:
+ goto inline$BDLGetDebugLevel$73$Return#1;
+
+ inline$BDLGetDebugLevel$73$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$73$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon51_Then#1, inline$BDLSystemPowerIoCompletion$2$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_120_true#1, inline$BDLSystemPowerIoCompletion$2$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_121#1:
+ goto inline$BDLGetDebugLevel$74$Entry#1;
+
+ inline$BDLGetDebugLevel$74$Entry#1:
+ goto inline$BDLGetDebugLevel$74$start#1;
+
+ inline$BDLGetDebugLevel$74$start#1:
+ goto inline$BDLGetDebugLevel$74$label_3#1;
+
+ inline$BDLGetDebugLevel$74$label_3#1:
+ havoc inline$BDLGetDebugLevel$74$myNondetVar_0;
+ inline$BDLGetDebugLevel$74$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$74$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$74$label_1#1;
+
+ inline$BDLGetDebugLevel$74$label_1#1:
+ goto inline$BDLGetDebugLevel$74$Return#1;
+
+ inline$BDLGetDebugLevel$74$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$74$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon52_Then#1, inline$BDLSystemPowerIoCompletion$2$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_130_true#1, inline$BDLSystemPowerIoCompletion$2$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_131#1:
+ goto inline$BDLGetDebugLevel$75$Entry#1;
+
+ inline$BDLGetDebugLevel$75$Entry#1:
+ goto inline$BDLGetDebugLevel$75$start#1;
+
+ inline$BDLGetDebugLevel$75$start#1:
+ goto inline$BDLGetDebugLevel$75$label_3#1;
+
+ inline$BDLGetDebugLevel$75$label_3#1:
+ havoc inline$BDLGetDebugLevel$75$myNondetVar_0;
+ inline$BDLGetDebugLevel$75$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$75$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$75$label_1#1;
+
+ inline$BDLGetDebugLevel$75$label_1#1:
+ goto inline$BDLGetDebugLevel$75$Return#1;
+
+ inline$BDLGetDebugLevel$75$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$75$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon53_Then#1, inline$BDLSystemPowerIoCompletion$2$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_140_true#1, inline$BDLSystemPowerIoCompletion$2$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$2$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_115#1:
+ inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$2$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$2$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$2$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_43#1:
+ goto inline$BDLGetDebugLevel$67$Entry#1;
+
+ inline$BDLGetDebugLevel$67$Entry#1:
+ goto inline$BDLGetDebugLevel$67$start#1;
+
+ inline$BDLGetDebugLevel$67$start#1:
+ goto inline$BDLGetDebugLevel$67$label_3#1;
+
+ inline$BDLGetDebugLevel$67$label_3#1:
+ havoc inline$BDLGetDebugLevel$67$myNondetVar_0;
+ inline$BDLGetDebugLevel$67$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$67$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$67$label_1#1;
+
+ inline$BDLGetDebugLevel$67$label_1#1:
+ goto inline$BDLGetDebugLevel$67$Return#1;
+
+ inline$BDLGetDebugLevel$67$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$67$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon40_Then#1, inline$BDLSystemPowerIoCompletion$2$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_46_true#1, inline$BDLSystemPowerIoCompletion$2$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_47#1:
+ goto inline$BDLGetDebugLevel$68$Entry#1;
+
+ inline$BDLGetDebugLevel$68$Entry#1:
+ goto inline$BDLGetDebugLevel$68$start#1;
+
+ inline$BDLGetDebugLevel$68$start#1:
+ goto inline$BDLGetDebugLevel$68$label_3#1;
+
+ inline$BDLGetDebugLevel$68$label_3#1:
+ havoc inline$BDLGetDebugLevel$68$myNondetVar_0;
+ inline$BDLGetDebugLevel$68$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$68$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$68$label_1#1;
+
+ inline$BDLGetDebugLevel$68$label_1#1:
+ goto inline$BDLGetDebugLevel$68$Return#1;
+
+ inline$BDLGetDebugLevel$68$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$68$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon41_Then#1, inline$BDLSystemPowerIoCompletion$2$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_56_true#1, inline$BDLSystemPowerIoCompletion$2$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_57#1:
+ goto inline$BDLGetDebugLevel$69$Entry#1;
+
+ inline$BDLGetDebugLevel$69$Entry#1:
+ goto inline$BDLGetDebugLevel$69$start#1;
+
+ inline$BDLGetDebugLevel$69$start#1:
+ goto inline$BDLGetDebugLevel$69$label_3#1;
+
+ inline$BDLGetDebugLevel$69$label_3#1:
+ havoc inline$BDLGetDebugLevel$69$myNondetVar_0;
+ inline$BDLGetDebugLevel$69$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$69$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$69$label_1#1;
+
+ inline$BDLGetDebugLevel$69$label_1#1:
+ goto inline$BDLGetDebugLevel$69$Return#1;
+
+ inline$BDLGetDebugLevel$69$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$69$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon42_Then#1, inline$BDLSystemPowerIoCompletion$2$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_66_true#1, inline$BDLSystemPowerIoCompletion$2$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$2$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$2$anon43_Then#1, inline$BDLSystemPowerIoCompletion$2$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$2$anon44_Then#1, inline$BDLSystemPowerIoCompletion$2$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_74#1:
+ goto inline$storm_IoCompleteRequest$6$Entry#1;
+
+ inline$storm_IoCompleteRequest$6$Entry#1:
+ inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$2$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$6$start#1;
+
+ inline$storm_IoCompleteRequest$6$start#1:
+ inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$6$label_3#1;
+
+ inline$storm_IoCompleteRequest$6$label_3#1:
+ call inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$6$label_6#1;
+
+ inline$storm_IoCompleteRequest$6$label_6#1:
+ goto inline$storm_IoCompleteRequest$6$label_6_true#1, inline$storm_IoCompleteRequest$6$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$6$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$6$label_7#1;
+
+ inline$storm_IoCompleteRequest$6$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$6$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$6$label_8#1;
+
+ inline$storm_IoCompleteRequest$6$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$6$anon3_Then#1, inline$storm_IoCompleteRequest$6$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$6$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$6$anon1#1;
+
+ inline$storm_IoCompleteRequest$6$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$6$label_9#1;
+
+ inline$storm_IoCompleteRequest$6$label_9#1:
+ goto inline$storm_IoCompleteRequest$6$label_9_true#1, inline$storm_IoCompleteRequest$6$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$6$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$6$label_10#1;
+
+ inline$storm_IoCompleteRequest$6$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$6$label_1#1;
+
+ inline$storm_IoCompleteRequest$6$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$6$label_7#1;
+
+ inline$storm_IoCompleteRequest$6$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$6$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$6$label_1#1;
+
+ inline$storm_IoCompleteRequest$6$label_1#1:
+ goto inline$storm_IoCompleteRequest$6$Return#1;
+
+ inline$storm_IoCompleteRequest$6$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$6$Return#1;
+
+ inline$storm_IoCompleteRequest$6$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon45_Then#1, inline$BDLSystemPowerIoCompletion$2$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$2$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$2$anon46_Then#1, inline$BDLSystemPowerIoCompletion$2$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_80#1:
+ goto inline$BDLGetDebugLevel$70$Entry#1;
+
+ inline$BDLGetDebugLevel$70$Entry#1:
+ goto inline$BDLGetDebugLevel$70$start#1;
+
+ inline$BDLGetDebugLevel$70$start#1:
+ goto inline$BDLGetDebugLevel$70$label_3#1;
+
+ inline$BDLGetDebugLevel$70$label_3#1:
+ havoc inline$BDLGetDebugLevel$70$myNondetVar_0;
+ inline$BDLGetDebugLevel$70$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$70$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$70$label_1#1;
+
+ inline$BDLGetDebugLevel$70$label_1#1:
+ goto inline$BDLGetDebugLevel$70$Return#1;
+
+ inline$BDLGetDebugLevel$70$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$70$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon47_Then#1, inline$BDLSystemPowerIoCompletion$2$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_83_true#1, inline$BDLSystemPowerIoCompletion$2$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_84#1:
+ goto inline$BDLGetDebugLevel$71$Entry#1;
+
+ inline$BDLGetDebugLevel$71$Entry#1:
+ goto inline$BDLGetDebugLevel$71$start#1;
+
+ inline$BDLGetDebugLevel$71$start#1:
+ goto inline$BDLGetDebugLevel$71$label_3#1;
+
+ inline$BDLGetDebugLevel$71$label_3#1:
+ havoc inline$BDLGetDebugLevel$71$myNondetVar_0;
+ inline$BDLGetDebugLevel$71$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$71$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$71$label_1#1;
+
+ inline$BDLGetDebugLevel$71$label_1#1:
+ goto inline$BDLGetDebugLevel$71$Return#1;
+
+ inline$BDLGetDebugLevel$71$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$71$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon48_Then#1, inline$BDLSystemPowerIoCompletion$2$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_93_true#1, inline$BDLSystemPowerIoCompletion$2$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$2$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$2$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_94#1:
+ goto inline$BDLGetDebugLevel$72$Entry#1;
+
+ inline$BDLGetDebugLevel$72$Entry#1:
+ goto inline$BDLGetDebugLevel$72$start#1;
+
+ inline$BDLGetDebugLevel$72$start#1:
+ goto inline$BDLGetDebugLevel$72$label_3#1;
+
+ inline$BDLGetDebugLevel$72$label_3#1:
+ havoc inline$BDLGetDebugLevel$72$myNondetVar_0;
+ inline$BDLGetDebugLevel$72$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$72$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$72$label_1#1;
+
+ inline$BDLGetDebugLevel$72$label_1#1:
+ goto inline$BDLGetDebugLevel$72$Return#1;
+
+ inline$BDLGetDebugLevel$72$Return#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$72$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$2$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$2$anon49_Then#1, inline$BDLSystemPowerIoCompletion$2$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_103_true#1, inline$BDLSystemPowerIoCompletion$2$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$2$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$2$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$2$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_104#1:
+ inline$BDLSystemPowerIoCompletion$2$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$2$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$2$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$2$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$2$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$2$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$2$Return#1:
+ inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$2$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$2$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$2$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$2$anon14_Then#1, inline$CallCompletionRoutine$2$anon14_Else#1;
+
+ inline$CallCompletionRoutine$2$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$2$anon9#1;
+
+ inline$CallCompletionRoutine$2$anon9#1:
+ goto inline$CallCompletionRoutine$2$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$2$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$2$Return#1;
+
+ inline$CallCompletionRoutine$2$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$2$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$2$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$2$Entry#1:
+ inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$2$start#1;
+
+ inline$BDLDevicePowerIoCompletion$2$start#1:
+ call inline$BDLDevicePowerIoCompletion$2$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$2$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_4#1:
+ inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_6#1:
+ inline$BDLDevicePowerIoCompletion$2$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$2$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$2$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$17$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$17$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$start#1:
+ inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$17$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$17$label_3_true#1, inline$IoGetCurrentIrpStackLocation$17$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$17$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$17$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$17$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$17$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$17$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$17$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$17$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$17$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$17$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$17$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$17$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$17$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$17$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$17$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$17$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$17$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$17$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$17$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$17$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$17$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$17$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$17$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon30_Then#1, inline$BDLDevicePowerIoCompletion$2$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_13#1:
+ inline$BDLDevicePowerIoCompletion$2$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_17#1:
+ goto inline$BDLGetDebugLevel$55$Entry#1;
+
+ inline$BDLGetDebugLevel$55$Entry#1:
+ goto inline$BDLGetDebugLevel$55$start#1;
+
+ inline$BDLGetDebugLevel$55$start#1:
+ goto inline$BDLGetDebugLevel$55$label_3#1;
+
+ inline$BDLGetDebugLevel$55$label_3#1:
+ havoc inline$BDLGetDebugLevel$55$myNondetVar_0;
+ inline$BDLGetDebugLevel$55$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$55$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$55$label_1#1;
+
+ inline$BDLGetDebugLevel$55$label_1#1:
+ goto inline$BDLGetDebugLevel$55$Return#1;
+
+ inline$BDLGetDebugLevel$55$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$55$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon31_Then#1, inline$BDLDevicePowerIoCompletion$2$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_20_true#1, inline$BDLDevicePowerIoCompletion$2$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_21#1:
+ goto inline$BDLGetDebugLevel$56$Entry#1;
+
+ inline$BDLGetDebugLevel$56$Entry#1:
+ goto inline$BDLGetDebugLevel$56$start#1;
+
+ inline$BDLGetDebugLevel$56$start#1:
+ goto inline$BDLGetDebugLevel$56$label_3#1;
+
+ inline$BDLGetDebugLevel$56$label_3#1:
+ havoc inline$BDLGetDebugLevel$56$myNondetVar_0;
+ inline$BDLGetDebugLevel$56$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$56$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$56$label_1#1;
+
+ inline$BDLGetDebugLevel$56$label_1#1:
+ goto inline$BDLGetDebugLevel$56$Return#1;
+
+ inline$BDLGetDebugLevel$56$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$56$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon32_Then#1, inline$BDLDevicePowerIoCompletion$2$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_30_true#1, inline$BDLDevicePowerIoCompletion$2$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_31#1:
+ goto inline$BDLGetDebugLevel$57$Entry#1;
+
+ inline$BDLGetDebugLevel$57$Entry#1:
+ goto inline$BDLGetDebugLevel$57$start#1;
+
+ inline$BDLGetDebugLevel$57$start#1:
+ goto inline$BDLGetDebugLevel$57$label_3#1;
+
+ inline$BDLGetDebugLevel$57$label_3#1:
+ havoc inline$BDLGetDebugLevel$57$myNondetVar_0;
+ inline$BDLGetDebugLevel$57$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$57$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$57$label_1#1;
+
+ inline$BDLGetDebugLevel$57$label_1#1:
+ goto inline$BDLGetDebugLevel$57$Return#1;
+
+ inline$BDLGetDebugLevel$57$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$57$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon33_Then#1, inline$BDLDevicePowerIoCompletion$2$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_40_true#1, inline$BDLDevicePowerIoCompletion$2$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_41_true#1, inline$BDLDevicePowerIoCompletion$2$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$2$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$2$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_44_true#1, inline$BDLDevicePowerIoCompletion$2$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_45_true#1, inline$BDLDevicePowerIoCompletion$2$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$2$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$2$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$2$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_54#1:
+ inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$2$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_55_true#1, inline$BDLDevicePowerIoCompletion$2$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$2$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$2$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$2$anon34_Then#1, inline$BDLDevicePowerIoCompletion$2$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_59#1:
+ goto inline$BDLGetDebugLevel$58$Entry#1;
+
+ inline$BDLGetDebugLevel$58$Entry#1:
+ goto inline$BDLGetDebugLevel$58$start#1;
+
+ inline$BDLGetDebugLevel$58$start#1:
+ goto inline$BDLGetDebugLevel$58$label_3#1;
+
+ inline$BDLGetDebugLevel$58$label_3#1:
+ havoc inline$BDLGetDebugLevel$58$myNondetVar_0;
+ inline$BDLGetDebugLevel$58$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$58$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$58$label_1#1;
+
+ inline$BDLGetDebugLevel$58$label_1#1:
+ goto inline$BDLGetDebugLevel$58$Return#1;
+
+ inline$BDLGetDebugLevel$58$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$58$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon35_Then#1, inline$BDLDevicePowerIoCompletion$2$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_62_true#1, inline$BDLDevicePowerIoCompletion$2$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_63#1:
+ goto inline$BDLGetDebugLevel$59$Entry#1;
+
+ inline$BDLGetDebugLevel$59$Entry#1:
+ goto inline$BDLGetDebugLevel$59$start#1;
+
+ inline$BDLGetDebugLevel$59$start#1:
+ goto inline$BDLGetDebugLevel$59$label_3#1;
+
+ inline$BDLGetDebugLevel$59$label_3#1:
+ havoc inline$BDLGetDebugLevel$59$myNondetVar_0;
+ inline$BDLGetDebugLevel$59$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$59$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$59$label_1#1;
+
+ inline$BDLGetDebugLevel$59$label_1#1:
+ goto inline$BDLGetDebugLevel$59$Return#1;
+
+ inline$BDLGetDebugLevel$59$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$59$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon36_Then#1, inline$BDLDevicePowerIoCompletion$2$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_72_true#1, inline$BDLDevicePowerIoCompletion$2$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_73#1:
+ goto inline$BDLGetDebugLevel$60$Entry#1;
+
+ inline$BDLGetDebugLevel$60$Entry#1:
+ goto inline$BDLGetDebugLevel$60$start#1;
+
+ inline$BDLGetDebugLevel$60$start#1:
+ goto inline$BDLGetDebugLevel$60$label_3#1;
+
+ inline$BDLGetDebugLevel$60$label_3#1:
+ havoc inline$BDLGetDebugLevel$60$myNondetVar_0;
+ inline$BDLGetDebugLevel$60$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$60$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$60$label_1#1;
+
+ inline$BDLGetDebugLevel$60$label_1#1:
+ goto inline$BDLGetDebugLevel$60$Return#1;
+
+ inline$BDLGetDebugLevel$60$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$60$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon37_Then#1, inline$BDLDevicePowerIoCompletion$2$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_82_true#1, inline$BDLDevicePowerIoCompletion$2$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$2$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$2$anon38_Then#1, inline$BDLDevicePowerIoCompletion$2$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$2$anon39_Then#1, inline$BDLDevicePowerIoCompletion$2$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_92#1:
+ goto inline$storm_IoCompleteRequest$5$Entry#1;
+
+ inline$storm_IoCompleteRequest$5$Entry#1:
+ inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$2$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$5$start#1;
+
+ inline$storm_IoCompleteRequest$5$start#1:
+ inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$5$label_3#1;
+
+ inline$storm_IoCompleteRequest$5$label_3#1:
+ call inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$5$label_6#1;
+
+ inline$storm_IoCompleteRequest$5$label_6#1:
+ goto inline$storm_IoCompleteRequest$5$label_6_true#1, inline$storm_IoCompleteRequest$5$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$5$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$5$label_7#1;
+
+ inline$storm_IoCompleteRequest$5$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$5$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$5$label_8#1;
+
+ inline$storm_IoCompleteRequest$5$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$5$anon3_Then#1, inline$storm_IoCompleteRequest$5$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$5$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$5$anon1#1;
+
+ inline$storm_IoCompleteRequest$5$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$5$label_9#1;
+
+ inline$storm_IoCompleteRequest$5$label_9#1:
+ goto inline$storm_IoCompleteRequest$5$label_9_true#1, inline$storm_IoCompleteRequest$5$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$5$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$5$label_10#1;
+
+ inline$storm_IoCompleteRequest$5$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$5$label_1#1;
+
+ inline$storm_IoCompleteRequest$5$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$5$label_7#1;
+
+ inline$storm_IoCompleteRequest$5$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$5$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$5$label_1#1;
+
+ inline$storm_IoCompleteRequest$5$label_1#1:
+ goto inline$storm_IoCompleteRequest$5$Return#1;
+
+ inline$storm_IoCompleteRequest$5$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$5$Return#1;
+
+ inline$storm_IoCompleteRequest$5$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon40_Then#1, inline$BDLDevicePowerIoCompletion$2$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$2$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$2$anon41_Then#1, inline$BDLDevicePowerIoCompletion$2$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_98#1:
+ goto inline$BDLGetDebugLevel$61$Entry#1;
+
+ inline$BDLGetDebugLevel$61$Entry#1:
+ goto inline$BDLGetDebugLevel$61$start#1;
+
+ inline$BDLGetDebugLevel$61$start#1:
+ goto inline$BDLGetDebugLevel$61$label_3#1;
+
+ inline$BDLGetDebugLevel$61$label_3#1:
+ havoc inline$BDLGetDebugLevel$61$myNondetVar_0;
+ inline$BDLGetDebugLevel$61$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$61$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$61$label_1#1;
+
+ inline$BDLGetDebugLevel$61$label_1#1:
+ goto inline$BDLGetDebugLevel$61$Return#1;
+
+ inline$BDLGetDebugLevel$61$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$61$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon42_Then#1, inline$BDLDevicePowerIoCompletion$2$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_101_true#1, inline$BDLDevicePowerIoCompletion$2$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_102#1:
+ goto inline$BDLGetDebugLevel$62$Entry#1;
+
+ inline$BDLGetDebugLevel$62$Entry#1:
+ goto inline$BDLGetDebugLevel$62$start#1;
+
+ inline$BDLGetDebugLevel$62$start#1:
+ goto inline$BDLGetDebugLevel$62$label_3#1;
+
+ inline$BDLGetDebugLevel$62$label_3#1:
+ havoc inline$BDLGetDebugLevel$62$myNondetVar_0;
+ inline$BDLGetDebugLevel$62$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$62$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$62$label_1#1;
+
+ inline$BDLGetDebugLevel$62$label_1#1:
+ goto inline$BDLGetDebugLevel$62$Return#1;
+
+ inline$BDLGetDebugLevel$62$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$62$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon43_Then#1, inline$BDLDevicePowerIoCompletion$2$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_111_true#1, inline$BDLDevicePowerIoCompletion$2$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$2$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$2$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_112#1:
+ goto inline$BDLGetDebugLevel$63$Entry#1;
+
+ inline$BDLGetDebugLevel$63$Entry#1:
+ goto inline$BDLGetDebugLevel$63$start#1;
+
+ inline$BDLGetDebugLevel$63$start#1:
+ goto inline$BDLGetDebugLevel$63$label_3#1;
+
+ inline$BDLGetDebugLevel$63$label_3#1:
+ havoc inline$BDLGetDebugLevel$63$myNondetVar_0;
+ inline$BDLGetDebugLevel$63$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$63$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$63$label_1#1;
+
+ inline$BDLGetDebugLevel$63$label_1#1:
+ goto inline$BDLGetDebugLevel$63$Return#1;
+
+ inline$BDLGetDebugLevel$63$Return#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$63$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$2$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$2$anon44_Then#1, inline$BDLDevicePowerIoCompletion$2$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_121_true#1, inline$BDLDevicePowerIoCompletion$2$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$2$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$2$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$2$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_122#1:
+ inline$BDLDevicePowerIoCompletion$2$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$2$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$2$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$2$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$2$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$2$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$2$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$2$Return#1:
+ inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$2$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$2$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$2$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$2$anon13_Then#1, inline$CallCompletionRoutine$2$anon13_Else#1;
+
+ inline$CallCompletionRoutine$2$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$2$anon7#1;
+
+ inline$CallCompletionRoutine$2$anon7#1:
+ goto inline$CallCompletionRoutine$2$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$2$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$2$Return#1;
+
+ inline$CallCompletionRoutine$2$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$2$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$2$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$2$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$2$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$2$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$start#1:
+ inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$2$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$2$label_3_true#1, inline$BDLCallDriverCompletionRoutine$2$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$2$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$2$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$2$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$2$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$2$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_6#1:
+ goto inline$storm_KeSetEvent$2$Entry#1;
+
+ inline$storm_KeSetEvent$2$Entry#1:
+ inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$2$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$2$start#1;
+
+ inline$storm_KeSetEvent$2$start#1:
+ inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$2$label_3#1;
+
+ inline$storm_KeSetEvent$2$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$2$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$2$label_1#1;
+
+ inline$storm_KeSetEvent$2$label_1#1:
+ goto inline$storm_KeSetEvent$2$Return#1;
+
+ inline$storm_KeSetEvent$2$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$2$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$2$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$2$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$2$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$2$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$2$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$2$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$2$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$2$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$2$Return#1:
+ inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$2$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$2$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$2$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$2$anon12_Then#1, inline$CallCompletionRoutine$2$anon12_Else#1;
+
+ inline$CallCompletionRoutine$2$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$2$anon5#1;
+
+ inline$CallCompletionRoutine$2$anon5#1:
+ goto inline$CallCompletionRoutine$2$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$2$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$2$label_23#1;
+
+ inline$CallCompletionRoutine$2$label_23#1:
+ inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$2$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$2$label_24#1;
+
+ inline$CallCompletionRoutine$2$label_24#1:
+ goto inline$CallCompletionRoutine$2$label_24_true#1, inline$CallCompletionRoutine$2$label_24_false#1;
+
+ inline$CallCompletionRoutine$2$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$2$label_1#1;
+
+ inline$CallCompletionRoutine$2$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$2$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$2$label_25#1;
+
+ inline$CallCompletionRoutine$2$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$2$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$2$label_1#1;
+
+ inline$CallCompletionRoutine$2$label_1#1:
+ goto inline$CallCompletionRoutine$2$Return#1;
+
+ inline$CallCompletionRoutine$2$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$2$Return#1;
+
+ inline$CallCompletionRoutine$2$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$2$Return#1;
+
+ inline$CallCompletionRoutine$2$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$2$Return#1;
+
+ inline$CallCompletionRoutine$2$Return#1:
+ goto inline$storm_IoCallDriver$1$label_33$1#1;
+
+ inline$storm_IoCallDriver$1$label_33$1#1:
+ goto inline$storm_IoCallDriver$1$anon14_Then#1, inline$storm_IoCallDriver$1$anon14_Else#1;
+
+ inline$storm_IoCallDriver$1$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$1$anon8#1;
+
+ inline$storm_IoCallDriver$1$anon8#1:
+ goto inline$storm_IoCallDriver$1$label_36#1;
+
+ inline$storm_IoCallDriver$1$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$1$Return#1;
+
+ inline$storm_IoCallDriver$1$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$1$label_29#1;
+
+ inline$storm_IoCallDriver$1$label_29#1:
+ inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$1$label_37#1;
+
+ inline$storm_IoCallDriver$1$label_37#1:
+ goto inline$storm_IoCallDriver$1$label_38#1;
+
+ inline$storm_IoCallDriver$1$label_38#1:
+ goto inline$storm_IoCallDriver$1$label_39#1;
+
+ inline$storm_IoCallDriver$1$label_39#1:
+ goto inline$CallCompletionRoutine$3$Entry#1;
+
+ inline$CallCompletionRoutine$3$Entry#1:
+ inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$3$start#1;
+
+ inline$CallCompletionRoutine$3$start#1:
+ inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$3$label_3#1;
+
+ inline$CallCompletionRoutine$3$label_3#1:
+ goto inline$CallCompletionRoutine$3$label_4#1;
+
+ inline$CallCompletionRoutine$3$label_4#1:
+ goto inline$CallCompletionRoutine$3$label_5#1;
+
+ inline$CallCompletionRoutine$3$label_5#1:
+ goto inline$CallCompletionRoutine$3$label_6#1;
+
+ inline$CallCompletionRoutine$3$label_6#1:
+ goto inline$CallCompletionRoutine$3$label_7#1;
+
+ inline$CallCompletionRoutine$3$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$19$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$19$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$start#1:
+ inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$19$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$19$label_3_true#1, inline$IoGetCurrentIrpStackLocation$19$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$19$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$19$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$19$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$19$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$19$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$19$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$19$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$19$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$19$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$19$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$19$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$19$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$19$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$19$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$19$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$19$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$19$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$19$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$19$Return#1:
+ goto inline$CallCompletionRoutine$3$label_7$1#1;
+
+ inline$CallCompletionRoutine$3$label_7$1#1:
+ goto inline$CallCompletionRoutine$3$anon10_Then#1, inline$CallCompletionRoutine$3$anon10_Else#1;
+
+ inline$CallCompletionRoutine$3$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$3$anon1#1;
+
+ inline$CallCompletionRoutine$3$anon1#1:
+ goto inline$CallCompletionRoutine$3$label_10#1;
+
+ inline$CallCompletionRoutine$3$label_10#1:
+ goto inline$CallCompletionRoutine$3$label_11#1;
+
+ inline$CallCompletionRoutine$3$label_11#1:
+ havoc inline$CallCompletionRoutine$3$myNondetVar_0;
+ inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$myNondetVar_0;
+ goto inline$CallCompletionRoutine$3$label_12#1;
+
+ inline$CallCompletionRoutine$3$label_12#1:
+ havoc inline$CallCompletionRoutine$3$myNondetVar_0;
+ inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$myNondetVar_0;
+ goto inline$CallCompletionRoutine$3$label_13#1;
+
+ inline$CallCompletionRoutine$3$label_13#1:
+ havoc inline$CallCompletionRoutine$3$myNondetVar_0;
+ goto inline$CallCompletionRoutine$3$label_14#1;
+
+ inline$CallCompletionRoutine$3$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$20$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$20$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$start#1:
+ inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$20$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$20$label_3_true#1, inline$IoGetCurrentIrpStackLocation$20$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$20$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$20$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$20$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$20$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$20$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$20$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$20$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$20$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$20$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$20$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$20$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$20$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$20$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$20$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$20$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$20$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$20$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$20$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$20$Return#1:
+ goto inline$CallCompletionRoutine$3$label_14$1#1;
+
+ inline$CallCompletionRoutine$3$label_14$1#1:
+ goto inline$CallCompletionRoutine$3$anon11_Then#1, inline$CallCompletionRoutine$3$anon11_Else#1;
+
+ inline$CallCompletionRoutine$3$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$3$anon3#1;
+
+ inline$CallCompletionRoutine$3$anon3#1:
+ goto inline$CallCompletionRoutine$3$label_17#1;
+
+ inline$CallCompletionRoutine$3$label_17#1:
+ goto inline$CallCompletionRoutine$3$label_18#1;
+
+ inline$CallCompletionRoutine$3$label_18#1:
+ goto inline$CallCompletionRoutine$3$label_18_true#1, inline$CallCompletionRoutine$3$label_18_false#1;
+
+ inline$CallCompletionRoutine$3$label_18_false#1:
+ assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$3$label_1#1;
+
+ inline$CallCompletionRoutine$3$label_18_true#1:
+ assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$3$label_19#1;
+
+ inline$CallCompletionRoutine$3$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$3$label_20#1;
+
+ inline$CallCompletionRoutine$3$label_20#1:
+ goto inline$CallCompletionRoutine$3$label_20_icall_1#1, inline$CallCompletionRoutine$3$label_20_icall_2#1, inline$CallCompletionRoutine$3$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$3$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$3$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$3$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$3$Entry#1:
+ inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$3$start#1;
+
+ inline$BDLSystemPowerIoCompletion$3$start#1:
+ call inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$3$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_4#1:
+ inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_6#1:
+ inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$3$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$3$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$22$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$22$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$start#1:
+ inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$22$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$22$label_3_true#1, inline$IoGetCurrentIrpStackLocation$22$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$22$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$22$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$22$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$22$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$22$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$22$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$22$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$22$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$22$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$22$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$22$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$22$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$22$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$22$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$22$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$22$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$22$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$22$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$22$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon36_Then#1, inline$BDLSystemPowerIoCompletion$3$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_15#1:
+ goto inline$BDLGetDebugLevel$85$Entry#1;
+
+ inline$BDLGetDebugLevel$85$Entry#1:
+ goto inline$BDLGetDebugLevel$85$start#1;
+
+ inline$BDLGetDebugLevel$85$start#1:
+ goto inline$BDLGetDebugLevel$85$label_3#1;
+
+ inline$BDLGetDebugLevel$85$label_3#1:
+ havoc inline$BDLGetDebugLevel$85$myNondetVar_0;
+ inline$BDLGetDebugLevel$85$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$85$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$85$label_1#1;
+
+ inline$BDLGetDebugLevel$85$label_1#1:
+ goto inline$BDLGetDebugLevel$85$Return#1;
+
+ inline$BDLGetDebugLevel$85$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$85$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon37_Then#1, inline$BDLSystemPowerIoCompletion$3$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_18_true#1, inline$BDLSystemPowerIoCompletion$3$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_19#1:
+ goto inline$BDLGetDebugLevel$86$Entry#1;
+
+ inline$BDLGetDebugLevel$86$Entry#1:
+ goto inline$BDLGetDebugLevel$86$start#1;
+
+ inline$BDLGetDebugLevel$86$start#1:
+ goto inline$BDLGetDebugLevel$86$label_3#1;
+
+ inline$BDLGetDebugLevel$86$label_3#1:
+ havoc inline$BDLGetDebugLevel$86$myNondetVar_0;
+ inline$BDLGetDebugLevel$86$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$86$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$86$label_1#1;
+
+ inline$BDLGetDebugLevel$86$label_1#1:
+ goto inline$BDLGetDebugLevel$86$Return#1;
+
+ inline$BDLGetDebugLevel$86$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$86$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon38_Then#1, inline$BDLSystemPowerIoCompletion$3$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_28_true#1, inline$BDLSystemPowerIoCompletion$3$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_29#1:
+ goto inline$BDLGetDebugLevel$87$Entry#1;
+
+ inline$BDLGetDebugLevel$87$Entry#1:
+ goto inline$BDLGetDebugLevel$87$start#1;
+
+ inline$BDLGetDebugLevel$87$start#1:
+ goto inline$BDLGetDebugLevel$87$label_3#1;
+
+ inline$BDLGetDebugLevel$87$label_3#1:
+ havoc inline$BDLGetDebugLevel$87$myNondetVar_0;
+ inline$BDLGetDebugLevel$87$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$87$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$87$label_1#1;
+
+ inline$BDLGetDebugLevel$87$label_1#1:
+ goto inline$BDLGetDebugLevel$87$Return#1;
+
+ inline$BDLGetDebugLevel$87$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$87$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon39_Then#1, inline$BDLSystemPowerIoCompletion$3$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_38_true#1, inline$BDLSystemPowerIoCompletion$3$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_39_true#1, inline$BDLSystemPowerIoCompletion$3$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$3$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$3$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$3$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$3$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$3$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_106_true#1, inline$BDLSystemPowerIoCompletion$3$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$3$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$3$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$3$myNondetVar_0, inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$3$anon50_Then#1, inline$BDLSystemPowerIoCompletion$3$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_112#1:
+ inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_113_true#1, inline$BDLSystemPowerIoCompletion$3$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$3$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_117#1:
+ goto inline$BDLGetDebugLevel$94$Entry#1;
+
+ inline$BDLGetDebugLevel$94$Entry#1:
+ goto inline$BDLGetDebugLevel$94$start#1;
+
+ inline$BDLGetDebugLevel$94$start#1:
+ goto inline$BDLGetDebugLevel$94$label_3#1;
+
+ inline$BDLGetDebugLevel$94$label_3#1:
+ havoc inline$BDLGetDebugLevel$94$myNondetVar_0;
+ inline$BDLGetDebugLevel$94$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$94$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$94$label_1#1;
+
+ inline$BDLGetDebugLevel$94$label_1#1:
+ goto inline$BDLGetDebugLevel$94$Return#1;
+
+ inline$BDLGetDebugLevel$94$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$94$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon51_Then#1, inline$BDLSystemPowerIoCompletion$3$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_120_true#1, inline$BDLSystemPowerIoCompletion$3$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_121#1:
+ goto inline$BDLGetDebugLevel$95$Entry#1;
+
+ inline$BDLGetDebugLevel$95$Entry#1:
+ goto inline$BDLGetDebugLevel$95$start#1;
+
+ inline$BDLGetDebugLevel$95$start#1:
+ goto inline$BDLGetDebugLevel$95$label_3#1;
+
+ inline$BDLGetDebugLevel$95$label_3#1:
+ havoc inline$BDLGetDebugLevel$95$myNondetVar_0;
+ inline$BDLGetDebugLevel$95$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$95$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$95$label_1#1;
+
+ inline$BDLGetDebugLevel$95$label_1#1:
+ goto inline$BDLGetDebugLevel$95$Return#1;
+
+ inline$BDLGetDebugLevel$95$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$95$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon52_Then#1, inline$BDLSystemPowerIoCompletion$3$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_130_true#1, inline$BDLSystemPowerIoCompletion$3$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_131#1:
+ goto inline$BDLGetDebugLevel$96$Entry#1;
+
+ inline$BDLGetDebugLevel$96$Entry#1:
+ goto inline$BDLGetDebugLevel$96$start#1;
+
+ inline$BDLGetDebugLevel$96$start#1:
+ goto inline$BDLGetDebugLevel$96$label_3#1;
+
+ inline$BDLGetDebugLevel$96$label_3#1:
+ havoc inline$BDLGetDebugLevel$96$myNondetVar_0;
+ inline$BDLGetDebugLevel$96$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$96$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$96$label_1#1;
+
+ inline$BDLGetDebugLevel$96$label_1#1:
+ goto inline$BDLGetDebugLevel$96$Return#1;
+
+ inline$BDLGetDebugLevel$96$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$96$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon53_Then#1, inline$BDLSystemPowerIoCompletion$3$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_140_true#1, inline$BDLSystemPowerIoCompletion$3$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$3$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_115#1:
+ inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$3$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$3$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$3$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_43#1:
+ goto inline$BDLGetDebugLevel$88$Entry#1;
+
+ inline$BDLGetDebugLevel$88$Entry#1:
+ goto inline$BDLGetDebugLevel$88$start#1;
+
+ inline$BDLGetDebugLevel$88$start#1:
+ goto inline$BDLGetDebugLevel$88$label_3#1;
+
+ inline$BDLGetDebugLevel$88$label_3#1:
+ havoc inline$BDLGetDebugLevel$88$myNondetVar_0;
+ inline$BDLGetDebugLevel$88$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$88$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$88$label_1#1;
+
+ inline$BDLGetDebugLevel$88$label_1#1:
+ goto inline$BDLGetDebugLevel$88$Return#1;
+
+ inline$BDLGetDebugLevel$88$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$88$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon40_Then#1, inline$BDLSystemPowerIoCompletion$3$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_46_true#1, inline$BDLSystemPowerIoCompletion$3$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_47#1:
+ goto inline$BDLGetDebugLevel$89$Entry#1;
+
+ inline$BDLGetDebugLevel$89$Entry#1:
+ goto inline$BDLGetDebugLevel$89$start#1;
+
+ inline$BDLGetDebugLevel$89$start#1:
+ goto inline$BDLGetDebugLevel$89$label_3#1;
+
+ inline$BDLGetDebugLevel$89$label_3#1:
+ havoc inline$BDLGetDebugLevel$89$myNondetVar_0;
+ inline$BDLGetDebugLevel$89$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$89$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$89$label_1#1;
+
+ inline$BDLGetDebugLevel$89$label_1#1:
+ goto inline$BDLGetDebugLevel$89$Return#1;
+
+ inline$BDLGetDebugLevel$89$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$89$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon41_Then#1, inline$BDLSystemPowerIoCompletion$3$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_56_true#1, inline$BDLSystemPowerIoCompletion$3$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_57#1:
+ goto inline$BDLGetDebugLevel$90$Entry#1;
+
+ inline$BDLGetDebugLevel$90$Entry#1:
+ goto inline$BDLGetDebugLevel$90$start#1;
+
+ inline$BDLGetDebugLevel$90$start#1:
+ goto inline$BDLGetDebugLevel$90$label_3#1;
+
+ inline$BDLGetDebugLevel$90$label_3#1:
+ havoc inline$BDLGetDebugLevel$90$myNondetVar_0;
+ inline$BDLGetDebugLevel$90$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$90$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$90$label_1#1;
+
+ inline$BDLGetDebugLevel$90$label_1#1:
+ goto inline$BDLGetDebugLevel$90$Return#1;
+
+ inline$BDLGetDebugLevel$90$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$90$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon42_Then#1, inline$BDLSystemPowerIoCompletion$3$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_66_true#1, inline$BDLSystemPowerIoCompletion$3$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$3$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$3$anon43_Then#1, inline$BDLSystemPowerIoCompletion$3$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$3$anon44_Then#1, inline$BDLSystemPowerIoCompletion$3$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_74#1:
+ goto inline$storm_IoCompleteRequest$8$Entry#1;
+
+ inline$storm_IoCompleteRequest$8$Entry#1:
+ inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$3$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$8$start#1;
+
+ inline$storm_IoCompleteRequest$8$start#1:
+ inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$8$label_3#1;
+
+ inline$storm_IoCompleteRequest$8$label_3#1:
+ call inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$8$label_6#1;
+
+ inline$storm_IoCompleteRequest$8$label_6#1:
+ goto inline$storm_IoCompleteRequest$8$label_6_true#1, inline$storm_IoCompleteRequest$8$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$8$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$8$label_7#1;
+
+ inline$storm_IoCompleteRequest$8$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$8$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$8$label_8#1;
+
+ inline$storm_IoCompleteRequest$8$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$8$anon3_Then#1, inline$storm_IoCompleteRequest$8$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$8$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$8$anon1#1;
+
+ inline$storm_IoCompleteRequest$8$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$8$label_9#1;
+
+ inline$storm_IoCompleteRequest$8$label_9#1:
+ goto inline$storm_IoCompleteRequest$8$label_9_true#1, inline$storm_IoCompleteRequest$8$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$8$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$8$label_10#1;
+
+ inline$storm_IoCompleteRequest$8$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$8$label_1#1;
+
+ inline$storm_IoCompleteRequest$8$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$8$label_7#1;
+
+ inline$storm_IoCompleteRequest$8$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$8$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$8$label_1#1;
+
+ inline$storm_IoCompleteRequest$8$label_1#1:
+ goto inline$storm_IoCompleteRequest$8$Return#1;
+
+ inline$storm_IoCompleteRequest$8$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$8$Return#1;
+
+ inline$storm_IoCompleteRequest$8$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon45_Then#1, inline$BDLSystemPowerIoCompletion$3$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$3$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$3$anon46_Then#1, inline$BDLSystemPowerIoCompletion$3$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_80#1:
+ goto inline$BDLGetDebugLevel$91$Entry#1;
+
+ inline$BDLGetDebugLevel$91$Entry#1:
+ goto inline$BDLGetDebugLevel$91$start#1;
+
+ inline$BDLGetDebugLevel$91$start#1:
+ goto inline$BDLGetDebugLevel$91$label_3#1;
+
+ inline$BDLGetDebugLevel$91$label_3#1:
+ havoc inline$BDLGetDebugLevel$91$myNondetVar_0;
+ inline$BDLGetDebugLevel$91$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$91$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$91$label_1#1;
+
+ inline$BDLGetDebugLevel$91$label_1#1:
+ goto inline$BDLGetDebugLevel$91$Return#1;
+
+ inline$BDLGetDebugLevel$91$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$91$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon47_Then#1, inline$BDLSystemPowerIoCompletion$3$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_83_true#1, inline$BDLSystemPowerIoCompletion$3$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_84#1:
+ goto inline$BDLGetDebugLevel$92$Entry#1;
+
+ inline$BDLGetDebugLevel$92$Entry#1:
+ goto inline$BDLGetDebugLevel$92$start#1;
+
+ inline$BDLGetDebugLevel$92$start#1:
+ goto inline$BDLGetDebugLevel$92$label_3#1;
+
+ inline$BDLGetDebugLevel$92$label_3#1:
+ havoc inline$BDLGetDebugLevel$92$myNondetVar_0;
+ inline$BDLGetDebugLevel$92$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$92$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$92$label_1#1;
+
+ inline$BDLGetDebugLevel$92$label_1#1:
+ goto inline$BDLGetDebugLevel$92$Return#1;
+
+ inline$BDLGetDebugLevel$92$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$92$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon48_Then#1, inline$BDLSystemPowerIoCompletion$3$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_93_true#1, inline$BDLSystemPowerIoCompletion$3$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$3$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$3$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_94#1:
+ goto inline$BDLGetDebugLevel$93$Entry#1;
+
+ inline$BDLGetDebugLevel$93$Entry#1:
+ goto inline$BDLGetDebugLevel$93$start#1;
+
+ inline$BDLGetDebugLevel$93$start#1:
+ goto inline$BDLGetDebugLevel$93$label_3#1;
+
+ inline$BDLGetDebugLevel$93$label_3#1:
+ havoc inline$BDLGetDebugLevel$93$myNondetVar_0;
+ inline$BDLGetDebugLevel$93$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$93$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$93$label_1#1;
+
+ inline$BDLGetDebugLevel$93$label_1#1:
+ goto inline$BDLGetDebugLevel$93$Return#1;
+
+ inline$BDLGetDebugLevel$93$Return#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$93$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$3$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$3$anon49_Then#1, inline$BDLSystemPowerIoCompletion$3$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_103_true#1, inline$BDLSystemPowerIoCompletion$3$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$3$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$3$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$3$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_104#1:
+ inline$BDLSystemPowerIoCompletion$3$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$3$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$3$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$3$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$3$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$3$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$3$Return#1:
+ inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$3$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$3$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$3$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$3$anon14_Then#1, inline$CallCompletionRoutine$3$anon14_Else#1;
+
+ inline$CallCompletionRoutine$3$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$3$anon9#1;
+
+ inline$CallCompletionRoutine$3$anon9#1:
+ goto inline$CallCompletionRoutine$3$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$3$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$3$Return#1;
+
+ inline$CallCompletionRoutine$3$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$3$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$3$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$3$Entry#1:
+ inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$3$start#1;
+
+ inline$BDLDevicePowerIoCompletion$3$start#1:
+ call inline$BDLDevicePowerIoCompletion$3$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$3$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_4#1:
+ inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_6#1:
+ inline$BDLDevicePowerIoCompletion$3$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$3$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$3$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$21$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$21$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$start#1:
+ inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$21$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$21$label_3_true#1, inline$IoGetCurrentIrpStackLocation$21$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$21$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$21$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$21$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$21$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$21$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$21$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$21$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$21$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$21$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$21$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$21$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$21$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$21$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$21$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$21$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$21$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$21$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$21$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$21$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$21$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$21$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$21$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon30_Then#1, inline$BDLDevicePowerIoCompletion$3$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_13#1:
+ inline$BDLDevicePowerIoCompletion$3$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_17#1:
+ goto inline$BDLGetDebugLevel$76$Entry#1;
+
+ inline$BDLGetDebugLevel$76$Entry#1:
+ goto inline$BDLGetDebugLevel$76$start#1;
+
+ inline$BDLGetDebugLevel$76$start#1:
+ goto inline$BDLGetDebugLevel$76$label_3#1;
+
+ inline$BDLGetDebugLevel$76$label_3#1:
+ havoc inline$BDLGetDebugLevel$76$myNondetVar_0;
+ inline$BDLGetDebugLevel$76$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$76$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$76$label_1#1;
+
+ inline$BDLGetDebugLevel$76$label_1#1:
+ goto inline$BDLGetDebugLevel$76$Return#1;
+
+ inline$BDLGetDebugLevel$76$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$76$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon31_Then#1, inline$BDLDevicePowerIoCompletion$3$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_20_true#1, inline$BDLDevicePowerIoCompletion$3$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_21#1:
+ goto inline$BDLGetDebugLevel$77$Entry#1;
+
+ inline$BDLGetDebugLevel$77$Entry#1:
+ goto inline$BDLGetDebugLevel$77$start#1;
+
+ inline$BDLGetDebugLevel$77$start#1:
+ goto inline$BDLGetDebugLevel$77$label_3#1;
+
+ inline$BDLGetDebugLevel$77$label_3#1:
+ havoc inline$BDLGetDebugLevel$77$myNondetVar_0;
+ inline$BDLGetDebugLevel$77$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$77$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$77$label_1#1;
+
+ inline$BDLGetDebugLevel$77$label_1#1:
+ goto inline$BDLGetDebugLevel$77$Return#1;
+
+ inline$BDLGetDebugLevel$77$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$77$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon32_Then#1, inline$BDLDevicePowerIoCompletion$3$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_30_true#1, inline$BDLDevicePowerIoCompletion$3$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_31#1:
+ goto inline$BDLGetDebugLevel$78$Entry#1;
+
+ inline$BDLGetDebugLevel$78$Entry#1:
+ goto inline$BDLGetDebugLevel$78$start#1;
+
+ inline$BDLGetDebugLevel$78$start#1:
+ goto inline$BDLGetDebugLevel$78$label_3#1;
+
+ inline$BDLGetDebugLevel$78$label_3#1:
+ havoc inline$BDLGetDebugLevel$78$myNondetVar_0;
+ inline$BDLGetDebugLevel$78$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$78$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$78$label_1#1;
+
+ inline$BDLGetDebugLevel$78$label_1#1:
+ goto inline$BDLGetDebugLevel$78$Return#1;
+
+ inline$BDLGetDebugLevel$78$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$78$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon33_Then#1, inline$BDLDevicePowerIoCompletion$3$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_40_true#1, inline$BDLDevicePowerIoCompletion$3$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_41_true#1, inline$BDLDevicePowerIoCompletion$3$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$3$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$3$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_44_true#1, inline$BDLDevicePowerIoCompletion$3$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_45_true#1, inline$BDLDevicePowerIoCompletion$3$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$3$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$3$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$3$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_54#1:
+ inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$3$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_55_true#1, inline$BDLDevicePowerIoCompletion$3$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$3$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$3$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$3$anon34_Then#1, inline$BDLDevicePowerIoCompletion$3$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_59#1:
+ goto inline$BDLGetDebugLevel$79$Entry#1;
+
+ inline$BDLGetDebugLevel$79$Entry#1:
+ goto inline$BDLGetDebugLevel$79$start#1;
+
+ inline$BDLGetDebugLevel$79$start#1:
+ goto inline$BDLGetDebugLevel$79$label_3#1;
+
+ inline$BDLGetDebugLevel$79$label_3#1:
+ havoc inline$BDLGetDebugLevel$79$myNondetVar_0;
+ inline$BDLGetDebugLevel$79$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$79$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$79$label_1#1;
+
+ inline$BDLGetDebugLevel$79$label_1#1:
+ goto inline$BDLGetDebugLevel$79$Return#1;
+
+ inline$BDLGetDebugLevel$79$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$79$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon35_Then#1, inline$BDLDevicePowerIoCompletion$3$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_62_true#1, inline$BDLDevicePowerIoCompletion$3$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_63#1:
+ goto inline$BDLGetDebugLevel$80$Entry#1;
+
+ inline$BDLGetDebugLevel$80$Entry#1:
+ goto inline$BDLGetDebugLevel$80$start#1;
+
+ inline$BDLGetDebugLevel$80$start#1:
+ goto inline$BDLGetDebugLevel$80$label_3#1;
+
+ inline$BDLGetDebugLevel$80$label_3#1:
+ havoc inline$BDLGetDebugLevel$80$myNondetVar_0;
+ inline$BDLGetDebugLevel$80$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$80$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$80$label_1#1;
+
+ inline$BDLGetDebugLevel$80$label_1#1:
+ goto inline$BDLGetDebugLevel$80$Return#1;
+
+ inline$BDLGetDebugLevel$80$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$80$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon36_Then#1, inline$BDLDevicePowerIoCompletion$3$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_72_true#1, inline$BDLDevicePowerIoCompletion$3$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_73#1:
+ goto inline$BDLGetDebugLevel$81$Entry#1;
+
+ inline$BDLGetDebugLevel$81$Entry#1:
+ goto inline$BDLGetDebugLevel$81$start#1;
+
+ inline$BDLGetDebugLevel$81$start#1:
+ goto inline$BDLGetDebugLevel$81$label_3#1;
+
+ inline$BDLGetDebugLevel$81$label_3#1:
+ havoc inline$BDLGetDebugLevel$81$myNondetVar_0;
+ inline$BDLGetDebugLevel$81$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$81$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$81$label_1#1;
+
+ inline$BDLGetDebugLevel$81$label_1#1:
+ goto inline$BDLGetDebugLevel$81$Return#1;
+
+ inline$BDLGetDebugLevel$81$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$81$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon37_Then#1, inline$BDLDevicePowerIoCompletion$3$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_82_true#1, inline$BDLDevicePowerIoCompletion$3$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$3$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$3$anon38_Then#1, inline$BDLDevicePowerIoCompletion$3$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$3$anon39_Then#1, inline$BDLDevicePowerIoCompletion$3$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_92#1:
+ goto inline$storm_IoCompleteRequest$7$Entry#1;
+
+ inline$storm_IoCompleteRequest$7$Entry#1:
+ inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$3$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$7$start#1;
+
+ inline$storm_IoCompleteRequest$7$start#1:
+ inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$7$label_3#1;
+
+ inline$storm_IoCompleteRequest$7$label_3#1:
+ call inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$7$label_6#1;
+
+ inline$storm_IoCompleteRequest$7$label_6#1:
+ goto inline$storm_IoCompleteRequest$7$label_6_true#1, inline$storm_IoCompleteRequest$7$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$7$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$7$label_7#1;
+
+ inline$storm_IoCompleteRequest$7$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$7$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$7$label_8#1;
+
+ inline$storm_IoCompleteRequest$7$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$7$anon3_Then#1, inline$storm_IoCompleteRequest$7$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$7$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$7$anon1#1;
+
+ inline$storm_IoCompleteRequest$7$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$7$label_9#1;
+
+ inline$storm_IoCompleteRequest$7$label_9#1:
+ goto inline$storm_IoCompleteRequest$7$label_9_true#1, inline$storm_IoCompleteRequest$7$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$7$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$7$label_10#1;
+
+ inline$storm_IoCompleteRequest$7$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$7$label_1#1;
+
+ inline$storm_IoCompleteRequest$7$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$7$label_7#1;
+
+ inline$storm_IoCompleteRequest$7$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$7$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$7$label_1#1;
+
+ inline$storm_IoCompleteRequest$7$label_1#1:
+ goto inline$storm_IoCompleteRequest$7$Return#1;
+
+ inline$storm_IoCompleteRequest$7$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$7$Return#1;
+
+ inline$storm_IoCompleteRequest$7$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon40_Then#1, inline$BDLDevicePowerIoCompletion$3$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$3$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$3$anon41_Then#1, inline$BDLDevicePowerIoCompletion$3$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_98#1:
+ goto inline$BDLGetDebugLevel$82$Entry#1;
+
+ inline$BDLGetDebugLevel$82$Entry#1:
+ goto inline$BDLGetDebugLevel$82$start#1;
+
+ inline$BDLGetDebugLevel$82$start#1:
+ goto inline$BDLGetDebugLevel$82$label_3#1;
+
+ inline$BDLGetDebugLevel$82$label_3#1:
+ havoc inline$BDLGetDebugLevel$82$myNondetVar_0;
+ inline$BDLGetDebugLevel$82$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$82$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$82$label_1#1;
+
+ inline$BDLGetDebugLevel$82$label_1#1:
+ goto inline$BDLGetDebugLevel$82$Return#1;
+
+ inline$BDLGetDebugLevel$82$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$82$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon42_Then#1, inline$BDLDevicePowerIoCompletion$3$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_101_true#1, inline$BDLDevicePowerIoCompletion$3$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_102#1:
+ goto inline$BDLGetDebugLevel$83$Entry#1;
+
+ inline$BDLGetDebugLevel$83$Entry#1:
+ goto inline$BDLGetDebugLevel$83$start#1;
+
+ inline$BDLGetDebugLevel$83$start#1:
+ goto inline$BDLGetDebugLevel$83$label_3#1;
+
+ inline$BDLGetDebugLevel$83$label_3#1:
+ havoc inline$BDLGetDebugLevel$83$myNondetVar_0;
+ inline$BDLGetDebugLevel$83$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$83$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$83$label_1#1;
+
+ inline$BDLGetDebugLevel$83$label_1#1:
+ goto inline$BDLGetDebugLevel$83$Return#1;
+
+ inline$BDLGetDebugLevel$83$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$83$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon43_Then#1, inline$BDLDevicePowerIoCompletion$3$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_111_true#1, inline$BDLDevicePowerIoCompletion$3$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$3$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$3$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$3$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_112#1:
+ goto inline$BDLGetDebugLevel$84$Entry#1;
+
+ inline$BDLGetDebugLevel$84$Entry#1:
+ goto inline$BDLGetDebugLevel$84$start#1;
+
+ inline$BDLGetDebugLevel$84$start#1:
+ goto inline$BDLGetDebugLevel$84$label_3#1;
+
+ inline$BDLGetDebugLevel$84$label_3#1:
+ havoc inline$BDLGetDebugLevel$84$myNondetVar_0;
+ inline$BDLGetDebugLevel$84$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$84$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$84$label_1#1;
+
+ inline$BDLGetDebugLevel$84$label_1#1:
+ goto inline$BDLGetDebugLevel$84$Return#1;
+
+ inline$BDLGetDebugLevel$84$Return#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$84$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$3$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$3$anon44_Then#1, inline$BDLDevicePowerIoCompletion$3$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_121_true#1, inline$BDLDevicePowerIoCompletion$3$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$3$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$3$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$3$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_122#1:
+ inline$BDLDevicePowerIoCompletion$3$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$3$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$3$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$3$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$3$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$3$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$3$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$3$Return#1:
+ inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$3$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$3$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$3$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$3$anon13_Then#1, inline$CallCompletionRoutine$3$anon13_Else#1;
+
+ inline$CallCompletionRoutine$3$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$3$anon7#1;
+
+ inline$CallCompletionRoutine$3$anon7#1:
+ goto inline$CallCompletionRoutine$3$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$3$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$3$Return#1;
+
+ inline$CallCompletionRoutine$3$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$3$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$3$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$3$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$3$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$3$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$start#1:
+ inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$3$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$3$label_3_true#1, inline$BDLCallDriverCompletionRoutine$3$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$3$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$3$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$3$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$3$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$3$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_6#1:
+ goto inline$storm_KeSetEvent$3$Entry#1;
+
+ inline$storm_KeSetEvent$3$Entry#1:
+ inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$3$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$3$start#1;
+
+ inline$storm_KeSetEvent$3$start#1:
+ inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$3$label_3#1;
+
+ inline$storm_KeSetEvent$3$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$3$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$3$label_1#1;
+
+ inline$storm_KeSetEvent$3$label_1#1:
+ goto inline$storm_KeSetEvent$3$Return#1;
+
+ inline$storm_KeSetEvent$3$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$3$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$3$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$3$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$3$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$3$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$3$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$3$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$3$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$3$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$3$Return#1:
+ inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$3$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$3$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$3$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$3$anon12_Then#1, inline$CallCompletionRoutine$3$anon12_Else#1;
+
+ inline$CallCompletionRoutine$3$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$3$anon5#1;
+
+ inline$CallCompletionRoutine$3$anon5#1:
+ goto inline$CallCompletionRoutine$3$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$3$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$3$label_23#1;
+
+ inline$CallCompletionRoutine$3$label_23#1:
+ inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$3$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$3$label_24#1;
+
+ inline$CallCompletionRoutine$3$label_24#1:
+ goto inline$CallCompletionRoutine$3$label_24_true#1, inline$CallCompletionRoutine$3$label_24_false#1;
+
+ inline$CallCompletionRoutine$3$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$3$label_1#1;
+
+ inline$CallCompletionRoutine$3$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$3$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$3$label_25#1;
+
+ inline$CallCompletionRoutine$3$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$3$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$3$label_1#1;
+
+ inline$CallCompletionRoutine$3$label_1#1:
+ goto inline$CallCompletionRoutine$3$Return#1;
+
+ inline$CallCompletionRoutine$3$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$3$Return#1;
+
+ inline$CallCompletionRoutine$3$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$3$Return#1;
+
+ inline$CallCompletionRoutine$3$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$3$Return#1;
+
+ inline$CallCompletionRoutine$3$Return#1:
+ goto inline$storm_IoCallDriver$1$label_39$1#1;
+
+ inline$storm_IoCallDriver$1$label_39$1#1:
+ goto inline$storm_IoCallDriver$1$anon15_Then#1, inline$storm_IoCallDriver$1$anon15_Else#1;
+
+ inline$storm_IoCallDriver$1$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$1$anon10#1;
+
+ inline$storm_IoCallDriver$1$anon10#1:
+ goto inline$storm_IoCallDriver$1$label_36#1;
+
+ inline$storm_IoCallDriver$1$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$1$Return#1;
+
+ inline$storm_IoCallDriver$1$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$1$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$1$label_28#1;
+
+ inline$storm_IoCallDriver$1$label_28#1:
+ inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$1$label_42#1;
+
+ inline$storm_IoCallDriver$1$label_42#1:
+ goto inline$storm_IoCallDriver$1$label_43#1;
+
+ inline$storm_IoCallDriver$1$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$1$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$1$label_36#1;
+
+ inline$storm_IoCallDriver$1$label_36#1:
+ inline$storm_IoCallDriver$1$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$1$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$1$label_1#1;
+
+ inline$storm_IoCallDriver$1$label_1#1:
+ goto inline$storm_IoCallDriver$1$Return#1;
+
+ inline$storm_IoCallDriver$1$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$1$Return#1;
+
+ inline$storm_IoCallDriver$1$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$1$Return#1;
+
+ inline$storm_IoCallDriver$1$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$1$Return#1;
+
+ inline$storm_IoCallDriver$1$Return#1:
+ inline$storm_PoCallDriver$0$$result.storm_IoCallDriver$499.27$2$ := inline$storm_IoCallDriver$1$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$storm_PoCallDriver$0$label_3$1#1;
+
+ inline$storm_PoCallDriver$0$label_3$1#1:
+ goto inline$storm_PoCallDriver$0$anon2_Then#1, inline$storm_PoCallDriver$0$anon2_Else#1;
+
+ inline$storm_PoCallDriver$0$anon2_Else#1:
+ assume !raiseException;
+ goto inline$storm_PoCallDriver$0$anon1#1;
+
+ inline$storm_PoCallDriver$0$anon1#1:
+ goto inline$storm_PoCallDriver$0$label_6#1;
+
+ inline$storm_PoCallDriver$0$label_6#1:
+ inline$storm_PoCallDriver$0$$result.storm_PoCallDriver$494.0$1$ := inline$storm_PoCallDriver$0$$result.storm_IoCallDriver$499.27$2$;
+ goto inline$storm_PoCallDriver$0$label_1#1;
+
+ inline$storm_PoCallDriver$0$label_1#1:
+ goto inline$storm_PoCallDriver$0$Return#1;
+
+ inline$storm_PoCallDriver$0$anon2_Then#1:
+ assume raiseException;
+ goto inline$storm_PoCallDriver$0$Return#1;
+
+ inline$storm_PoCallDriver$0$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_PoCallDriver$104.29$3$ := inline$storm_PoCallDriver$0$$result.storm_PoCallDriver$494.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_25$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_25$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon22_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon22_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon22_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon13#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon13#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_28#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_28#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_PoCallDriver$104.29$3$;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_29#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_29#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_29_true#1, inline$BDLCallLowerLevelDriverAndWait$0$label_29_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_29_false#1:
+ assume !INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_29_true#1:
+ assume INT_EQ(inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8, 259);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_31#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_31#1:
+ goto inline$storm_KeWaitForSingleObject$0$Entry#1;
+
+ inline$storm_KeWaitForSingleObject$0$Entry#1:
+ inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1 := inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8;
+ inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1 := 0;
+ goto inline$storm_KeWaitForSingleObject$0$start#1;
+
+ inline$storm_KeWaitForSingleObject$0$start#1:
+ inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20_.1;
+ inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 := inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20_.1;
+ goto inline$storm_KeWaitForSingleObject$0$label_3#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_3#1:
+ goto inline$storm_KeWaitForSingleObject$0$label_3_true#1, inline$storm_KeWaitForSingleObject$0$label_3_false#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_3_false#1:
+ assume inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 == 0;
+ goto inline$storm_KeWaitForSingleObject$0$label_4#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_4#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$anon6_Then#1, inline$storm_KeWaitForSingleObject$0$anon6_Else#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon6_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$anon1#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$0$label_13#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_13#1:
+ inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$0$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon6_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$Return#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_3_true#1:
+ assume inline$storm_KeWaitForSingleObject$0$$Timeout$5$248.20$storm_KeWaitForSingleObject$20 != 0;
+ goto inline$storm_KeWaitForSingleObject$0$label_5#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_5#1:
+ call inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$ := storm_nondet();
+ goto inline$storm_KeWaitForSingleObject$0$label_8#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_8#1:
+ goto inline$storm_KeWaitForSingleObject$0$label_8_true#1, inline$storm_KeWaitForSingleObject$0$label_8_false#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_8_false#1:
+ assume inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$ == 0;
+ goto inline$storm_KeWaitForSingleObject$0$label_9#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_9#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$anon7_Then#1, inline$storm_KeWaitForSingleObject$0$anon7_Else#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon7_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$anon3#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20], 0);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$0$label_12#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_12#1:
+ inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$ := 258;
+ goto inline$storm_KeWaitForSingleObject$0$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon7_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$Return#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_8_true#1:
+ assume inline$storm_KeWaitForSingleObject$0$$result.storm_nondet$256.20$2$ != 0;
+ goto inline$storm_KeWaitForSingleObject$0$label_10#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_10#1:
+ havoc raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$anon8_Then#1, inline$storm_KeWaitForSingleObject$0$anon8_Else#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon8_Else#1:
+ assume !raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$anon5#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon5#1:
+ assume k == 0 ==> INT_EQ(Res_0_EVENT[inline$storm_KeWaitForSingleObject$0$$Object$1$244.11$storm_KeWaitForSingleObject$20], 1);
+ call contextSwitch();
+ goto inline$storm_KeWaitForSingleObject$0$label_11#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_11#1:
+ inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$ := 0;
+ goto inline$storm_KeWaitForSingleObject$0$label_1#1;
+
+ inline$storm_KeWaitForSingleObject$0$label_1#1:
+ goto inline$storm_KeWaitForSingleObject$0$Return#1;
+
+ inline$storm_KeWaitForSingleObject$0$anon8_Then#1:
+ assume raiseException;
+ goto inline$storm_KeWaitForSingleObject$0$Return#1;
+
+ inline$storm_KeWaitForSingleObject$0$Return#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_KeWaitForSingleObject$116.38$5$ := inline$storm_KeWaitForSingleObject$0$$result.storm_KeWaitForSingleObject$243.0$1$;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_31$1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_31$1#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon23_Then#1, inline$BDLCallLowerLevelDriverAndWait$0$anon23_Else#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon23_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$anon15#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon15#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_34#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_34#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$$result.storm_KeWaitForSingleObject$116.38$5$;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_35#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_35#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_35_true#1, inline$BDLCallLowerLevelDriverAndWait$0$label_35_false#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_35_false#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 == 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_35_true#1:
+ assume inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 != 0;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_37#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_37#1:
+ call inline$BDLCallLowerLevelDriverAndWait$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_38#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_38#1:
+ call inline$BDLCallLowerLevelDriverAndWait$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_39#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_39#1:
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_36#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_36#1:
+ havoc inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
+ inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8 := inline$BDLCallLowerLevelDriverAndWait$0$myNondetVar_0;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_30#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_30#1:
+ inline$BDLCallLowerLevelDriverAndWait$0$$result.BDLCallLowerLevelDriverAndWait$71.0$1$ := inline$BDLCallLowerLevelDriverAndWait$0$$status$3$78.16$BDLCallLowerLevelDriverAndWait$8;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$label_1#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$label_1#1:
+ call __HAVOC_free(inline$BDLCallLowerLevelDriverAndWait$0$$Event$4$79.16$BDLCallLowerLevelDriverAndWait$8);
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon23_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon22_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon21_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon19_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon18_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon17_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$anon16_Then#1:
+ assume raiseException;
+ goto inline$BDLCallLowerLevelDriverAndWait$0$Return#1;
+
+ inline$BDLCallLowerLevelDriverAndWait$0$Return#1:
+ inline$BDLPnPStart$0$$result.BDLCallLowerLevelDriverAndWait$1975.43$13$ := inline$BDLCallLowerLevelDriverAndWait$0$$result.BDLCallLowerLevelDriverAndWait$71.0$1$;
+ goto inline$BDLPnPStart$0$label_32$1#1;
+
+ inline$BDLPnPStart$0$label_32$1#1:
+ goto inline$BDLPnPStart$0$anon39_Then#1, inline$BDLPnPStart$0$anon39_Else#1;
+
+ inline$BDLPnPStart$0$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon7#1;
+
+ inline$BDLPnPStart$0$anon7#1:
+ goto inline$BDLPnPStart$0$label_36#1;
+
+ inline$BDLPnPStart$0$label_36#1:
+ inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := inline$BDLPnPStart$0$$result.BDLCallLowerLevelDriverAndWait$1975.43$13$;
+ goto inline$BDLPnPStart$0$label_37#1;
+
+ inline$BDLPnPStart$0$label_37#1:
+ goto inline$BDLPnPStart$0$label_37_true#1, inline$BDLPnPStart$0$label_37_false#1;
+
+ inline$BDLPnPStart$0$label_37_false#1:
+ assume !INT_LEQ(0, inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16);
+ goto inline$BDLPnPStart$0$label_38#1;
+
+ inline$BDLPnPStart$0$label_38#1:
+ goto inline$BDLGetDebugLevel$97$Entry#1;
+
+ inline$BDLGetDebugLevel$97$Entry#1:
+ goto inline$BDLGetDebugLevel$97$start#1;
+
+ inline$BDLGetDebugLevel$97$start#1:
+ goto inline$BDLGetDebugLevel$97$label_3#1;
+
+ inline$BDLGetDebugLevel$97$label_3#1:
+ havoc inline$BDLGetDebugLevel$97$myNondetVar_0;
+ inline$BDLGetDebugLevel$97$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$97$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$97$label_1#1;
+
+ inline$BDLGetDebugLevel$97$label_1#1:
+ goto inline$BDLGetDebugLevel$97$Return#1;
+
+ inline$BDLGetDebugLevel$97$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$ := inline$BDLGetDebugLevel$97$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_38$1#1;
+
+ inline$BDLPnPStart$0$label_38$1#1:
+ goto inline$BDLPnPStart$0$anon40_Then#1, inline$BDLPnPStart$0$anon40_Else#1;
+
+ inline$BDLPnPStart$0$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon9#1;
+
+ inline$BDLPnPStart$0$anon9#1:
+ goto inline$BDLPnPStart$0$label_151#1;
+
+ inline$BDLPnPStart$0$label_151#1:
+ goto inline$BDLPnPStart$0$label_151_true#1, inline$BDLPnPStart$0$label_151_false#1;
+
+ inline$BDLPnPStart$0$label_151_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$) == 0;
+ goto inline$BDLPnPStart$0$label_152#1;
+
+ inline$BDLPnPStart$0$label_151_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$14$) != 0;
+ goto inline$BDLPnPStart$0$label_155#1;
+
+ inline$BDLPnPStart$0$label_155#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_156#1;
+
+ inline$BDLPnPStart$0$label_156#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_157#1;
+
+ inline$BDLPnPStart$0$label_157#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_158#1;
+
+ inline$BDLPnPStart$0$label_158#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$1979.0$15$;
+ goto inline$BDLPnPStart$0$label_152#1;
+
+ inline$BDLPnPStart$0$label_152#1:
+ goto inline$BDLGetDebugLevel$107$Entry#1;
+
+ inline$BDLGetDebugLevel$107$Entry#1:
+ goto inline$BDLGetDebugLevel$107$start#1;
+
+ inline$BDLGetDebugLevel$107$start#1:
+ goto inline$BDLGetDebugLevel$107$label_3#1;
+
+ inline$BDLGetDebugLevel$107$label_3#1:
+ havoc inline$BDLGetDebugLevel$107$myNondetVar_0;
+ inline$BDLGetDebugLevel$107$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$107$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$107$label_1#1;
+
+ inline$BDLGetDebugLevel$107$label_1#1:
+ goto inline$BDLGetDebugLevel$107$Return#1;
+
+ inline$BDLGetDebugLevel$107$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$ := inline$BDLGetDebugLevel$107$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_152$1#1;
+
+ inline$BDLPnPStart$0$label_152$1#1:
+ goto inline$BDLPnPStart$0$anon52_Then#1, inline$BDLPnPStart$0$anon52_Else#1;
+
+ inline$BDLPnPStart$0$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon33#1;
+
+ inline$BDLPnPStart$0$anon33#1:
+ goto inline$BDLPnPStart$0$label_161#1;
+
+ inline$BDLPnPStart$0$label_161#1:
+ goto inline$BDLPnPStart$0$label_161_true#1, inline$BDLPnPStart$0$label_161_false#1;
+
+ inline$BDLPnPStart$0$label_161_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$) == 0;
+ goto inline$BDLPnPStart$0$label_162#1;
+
+ inline$BDLPnPStart$0$label_161_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$19$) != 0;
+ goto inline$BDLPnPStart$0$label_165#1;
+
+ inline$BDLPnPStart$0$label_165#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_166#1;
+
+ inline$BDLPnPStart$0$label_166#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_167#1;
+
+ inline$BDLPnPStart$0$label_167#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_168#1;
+
+ inline$BDLPnPStart$0$label_168#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$1979.0$20$;
+ goto inline$BDLPnPStart$0$label_162#1;
+
+ inline$BDLPnPStart$0$label_162#1:
+ goto inline$BDLGetDebugLevel$108$Entry#1;
+
+ inline$BDLGetDebugLevel$108$Entry#1:
+ goto inline$BDLGetDebugLevel$108$start#1;
+
+ inline$BDLGetDebugLevel$108$start#1:
+ goto inline$BDLGetDebugLevel$108$label_3#1;
+
+ inline$BDLGetDebugLevel$108$label_3#1:
+ havoc inline$BDLGetDebugLevel$108$myNondetVar_0;
+ inline$BDLGetDebugLevel$108$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$108$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$108$label_1#1;
+
+ inline$BDLGetDebugLevel$108$label_1#1:
+ goto inline$BDLGetDebugLevel$108$Return#1;
+
+ inline$BDLGetDebugLevel$108$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$ := inline$BDLGetDebugLevel$108$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_162$1#1;
+
+ inline$BDLPnPStart$0$label_162$1#1:
+ goto inline$BDLPnPStart$0$anon53_Then#1, inline$BDLPnPStart$0$anon53_Else#1;
+
+ inline$BDLPnPStart$0$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon35#1;
+
+ inline$BDLPnPStart$0$anon35#1:
+ goto inline$BDLPnPStart$0$label_171#1;
+
+ inline$BDLPnPStart$0$label_171#1:
+ goto inline$BDLPnPStart$0$label_171_true#1, inline$BDLPnPStart$0$label_171_false#1;
+
+ inline$BDLPnPStart$0$label_171_false#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$, 4) == 0;
+ goto inline$BDLPnPStart$0$label_77#1;
+
+ inline$BDLPnPStart$0$label_171_true#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$1979.0$24$, 4) != 0;
+ goto inline$BDLPnPStart$0$label_172#1;
+
+ inline$BDLPnPStart$0$label_172#1:
+ goto inline$BDLPnPStart$0$label_77#1;
+
+ inline$BDLPnPStart$0$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$label_37_true#1:
+ assume INT_LEQ(0, inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16);
+ goto inline$BDLPnPStart$0$label_41#1;
+
+ inline$BDLPnPStart$0$label_41#1:
+ havoc inline$BDLPnPStart$0$$result.memset$1992.4$25$;
+ goto inline$BDLPnPStart$0$label_44#1;
+
+ inline$BDLPnPStart$0$label_44#1:
+ goto inline$BDLPnPStart$0$label_45#1;
+
+ inline$BDLPnPStart$0$label_45#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_46#1;
+
+ inline$BDLPnPStart$0$label_46#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_47#1;
+
+ inline$BDLPnPStart$0$label_47#1:
+ goto inline$BDLPnPStart$0$label_50#1;
+
+ inline$BDLPnPStart$0$label_50#1:
+ inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := inline$BDLPnPStart$0$$callresult.$1999.70$26$;
+ goto inline$BDLPnPStart$0$label_51#1;
+
+ inline$BDLPnPStart$0$label_51#1:
+ goto inline$BDLPnPStart$0$label_51_true#1, inline$BDLPnPStart$0$label_51_false#1;
+
+ inline$BDLPnPStart$0$label_51_false#1:
+ assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 == 0;
+ goto inline$BDLPnPStart$0$label_52#1;
+
+ inline$BDLPnPStart$0$label_52#1:
+ goto inline$BDLPnPStart$0$label_104#1;
+
+ inline$BDLPnPStart$0$label_104#1:
+ goto inline$BDLPnPStart$0$label_105#1;
+
+ inline$BDLPnPStart$0$label_105#1:
+ havoc inline$BDLPnPStart$0$$result.memcpy$2018.0$38$;
+ goto inline$BDLPnPStart$0$label_108#1;
+
+ inline$BDLPnPStart$0$label_108#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_109#1;
+
+ inline$BDLPnPStart$0$label_109#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_110#1;
+
+ inline$BDLPnPStart$0$label_110#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_111#1;
+
+ inline$BDLPnPStart$0$label_111#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_112#1;
+
+ inline$BDLPnPStart$0$label_112#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_113#1;
+
+ inline$BDLPnPStart$0$label_113#1:
+ havoc inline$BDLPnPStart$0$myNondetVar_0;
+ goto inline$BDLPnPStart$0$label_114#1;
+
+ inline$BDLPnPStart$0$label_114#1:
+ call inline$BDLPnPStart$0$$result.IoSetDeviceInterfaceState$2033.38$41$ := IoSetDeviceInterfaceState(SymbolicLinkName__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16), 1);
+ goto inline$BDLPnPStart$0$anon47_Then#1, inline$BDLPnPStart$0$anon47_Else#1;
+
+ inline$BDLPnPStart$0$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon23#1;
+
+ inline$BDLPnPStart$0$anon23#1:
+ goto inline$BDLPnPStart$0$label_117#1;
+
+ inline$BDLPnPStart$0$label_117#1:
+ inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 := inline$BDLPnPStart$0$$result.IoSetDeviceInterfaceState$2033.38$41$;
+ goto inline$BDLPnPStart$0$label_118#1;
+
+ inline$BDLPnPStart$0$label_118#1:
+ goto inline$BDLPnPStart$0$label_118_true#1, inline$BDLPnPStart$0$label_118_false#1;
+
+ inline$BDLPnPStart$0$label_118_false#1:
+ assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 == 0;
+ goto inline$BDLPnPStart$0$label_119#1;
+
+ inline$BDLPnPStart$0$label_119#1:
+ goto inline$BDLPnPStart$0$label_148#1;
+
+ inline$BDLPnPStart$0$label_148#1:
+ goto inline$storm_KeSetEvent$4$Entry#1;
+
+ inline$storm_KeSetEvent$4$Entry#1:
+ inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12_.1 := DeviceStartedEvent__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnPStart$0$$pBDLExtension$1$1956.40$BDLPnPStart$16);
+ goto inline$storm_KeSetEvent$4$start#1;
+
+ inline$storm_KeSetEvent$4$start#1:
+ inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$4$label_3#1;
+
+ inline$storm_KeSetEvent$4$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$4$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$4$label_1#1;
+
+ inline$storm_KeSetEvent$4$label_1#1:
+ goto inline$storm_KeSetEvent$4$Return#1;
+
+ inline$storm_KeSetEvent$4$Return#1:
+ goto inline$BDLPnPStart$0$label_148$1#1;
+
+ inline$BDLPnPStart$0$label_148$1#1:
+ goto inline$BDLPnPStart$0$anon51_Then#1, inline$BDLPnPStart$0$anon51_Else#1;
+
+ inline$BDLPnPStart$0$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon31#1;
+
+ inline$BDLPnPStart$0$anon31#1:
+ goto inline$BDLPnPStart$0$label_77#1;
+
+ inline$BDLPnPStart$0$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$label_118_true#1:
+ assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 != 0;
+ goto inline$BDLPnPStart$0$label_120#1;
+
+ inline$BDLPnPStart$0$label_120#1:
+ goto inline$BDLGetDebugLevel$104$Entry#1;
+
+ inline$BDLGetDebugLevel$104$Entry#1:
+ goto inline$BDLGetDebugLevel$104$start#1;
+
+ inline$BDLGetDebugLevel$104$start#1:
+ goto inline$BDLGetDebugLevel$104$label_3#1;
+
+ inline$BDLGetDebugLevel$104$label_3#1:
+ havoc inline$BDLGetDebugLevel$104$myNondetVar_0;
+ inline$BDLGetDebugLevel$104$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$104$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$104$label_1#1;
+
+ inline$BDLGetDebugLevel$104$label_1#1:
+ goto inline$BDLGetDebugLevel$104$Return#1;
+
+ inline$BDLGetDebugLevel$104$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$ := inline$BDLGetDebugLevel$104$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_120$1#1;
+
+ inline$BDLPnPStart$0$label_120$1#1:
+ goto inline$BDLPnPStart$0$anon48_Then#1, inline$BDLPnPStart$0$anon48_Else#1;
+
+ inline$BDLPnPStart$0$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon25#1;
+
+ inline$BDLPnPStart$0$anon25#1:
+ goto inline$BDLPnPStart$0$label_123#1;
+
+ inline$BDLPnPStart$0$label_123#1:
+ goto inline$BDLPnPStart$0$label_123_true#1, inline$BDLPnPStart$0$label_123_false#1;
+
+ inline$BDLPnPStart$0$label_123_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$) == 0;
+ goto inline$BDLPnPStart$0$label_124#1;
+
+ inline$BDLPnPStart$0$label_123_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$42$) != 0;
+ goto inline$BDLPnPStart$0$label_127#1;
+
+ inline$BDLPnPStart$0$label_127#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_128#1;
+
+ inline$BDLPnPStart$0$label_128#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_129#1;
+
+ inline$BDLPnPStart$0$label_129#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_130#1;
+
+ inline$BDLPnPStart$0$label_130#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$2037.0$43$;
+ goto inline$BDLPnPStart$0$label_124#1;
+
+ inline$BDLPnPStart$0$label_124#1:
+ goto inline$BDLGetDebugLevel$105$Entry#1;
+
+ inline$BDLGetDebugLevel$105$Entry#1:
+ goto inline$BDLGetDebugLevel$105$start#1;
+
+ inline$BDLGetDebugLevel$105$start#1:
+ goto inline$BDLGetDebugLevel$105$label_3#1;
+
+ inline$BDLGetDebugLevel$105$label_3#1:
+ havoc inline$BDLGetDebugLevel$105$myNondetVar_0;
+ inline$BDLGetDebugLevel$105$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$105$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$105$label_1#1;
+
+ inline$BDLGetDebugLevel$105$label_1#1:
+ goto inline$BDLGetDebugLevel$105$Return#1;
+
+ inline$BDLGetDebugLevel$105$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$ := inline$BDLGetDebugLevel$105$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_124$1#1;
+
+ inline$BDLPnPStart$0$label_124$1#1:
+ goto inline$BDLPnPStart$0$anon49_Then#1, inline$BDLPnPStart$0$anon49_Else#1;
+
+ inline$BDLPnPStart$0$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon27#1;
+
+ inline$BDLPnPStart$0$anon27#1:
+ goto inline$BDLPnPStart$0$label_133#1;
+
+ inline$BDLPnPStart$0$label_133#1:
+ goto inline$BDLPnPStart$0$label_133_true#1, inline$BDLPnPStart$0$label_133_false#1;
+
+ inline$BDLPnPStart$0$label_133_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$) == 0;
+ goto inline$BDLPnPStart$0$label_134#1;
+
+ inline$BDLPnPStart$0$label_133_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$47$) != 0;
+ goto inline$BDLPnPStart$0$label_137#1;
+
+ inline$BDLPnPStart$0$label_137#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_138#1;
+
+ inline$BDLPnPStart$0$label_138#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_139#1;
+
+ inline$BDLPnPStart$0$label_139#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_140#1;
+
+ inline$BDLPnPStart$0$label_140#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$2037.0$48$;
+ goto inline$BDLPnPStart$0$label_134#1;
+
+ inline$BDLPnPStart$0$label_134#1:
+ goto inline$BDLGetDebugLevel$106$Entry#1;
+
+ inline$BDLGetDebugLevel$106$Entry#1:
+ goto inline$BDLGetDebugLevel$106$start#1;
+
+ inline$BDLGetDebugLevel$106$start#1:
+ goto inline$BDLGetDebugLevel$106$label_3#1;
+
+ inline$BDLGetDebugLevel$106$label_3#1:
+ havoc inline$BDLGetDebugLevel$106$myNondetVar_0;
+ inline$BDLGetDebugLevel$106$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$106$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$106$label_1#1;
+
+ inline$BDLGetDebugLevel$106$label_1#1:
+ goto inline$BDLGetDebugLevel$106$Return#1;
+
+ inline$BDLGetDebugLevel$106$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$ := inline$BDLGetDebugLevel$106$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_134$1#1;
+
+ inline$BDLPnPStart$0$label_134$1#1:
+ goto inline$BDLPnPStart$0$anon50_Then#1, inline$BDLPnPStart$0$anon50_Else#1;
+
+ inline$BDLPnPStart$0$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon29#1;
+
+ inline$BDLPnPStart$0$anon29#1:
+ goto inline$BDLPnPStart$0$label_143#1;
+
+ inline$BDLPnPStart$0$label_143#1:
+ goto inline$BDLPnPStart$0$label_143_true#1, inline$BDLPnPStart$0$label_143_false#1;
+
+ inline$BDLPnPStart$0$label_143_false#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$, 4) == 0;
+ goto inline$BDLPnPStart$0$label_144#1;
+
+ inline$BDLPnPStart$0$label_143_true#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2037.0$52$, 4) != 0;
+ goto inline$BDLPnPStart$0$label_147#1;
+
+ inline$BDLPnPStart$0$label_147#1:
+ goto inline$BDLPnPStart$0$label_144#1;
+
+ inline$BDLPnPStart$0$label_144#1:
+ goto inline$BDLPnPStart$0$label_77#1;
+
+ inline$BDLPnPStart$0$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$label_51_true#1:
+ assume inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16 != 0;
+ goto inline$BDLPnPStart$0$label_53#1;
+
+ inline$BDLPnPStart$0$label_53#1:
+ goto inline$BDLGetDebugLevel$98$Entry#1;
+
+ inline$BDLGetDebugLevel$98$Entry#1:
+ goto inline$BDLGetDebugLevel$98$start#1;
+
+ inline$BDLGetDebugLevel$98$start#1:
+ goto inline$BDLGetDebugLevel$98$label_3#1;
+
+ inline$BDLGetDebugLevel$98$label_3#1:
+ havoc inline$BDLGetDebugLevel$98$myNondetVar_0;
+ inline$BDLGetDebugLevel$98$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$98$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$98$label_1#1;
+
+ inline$BDLGetDebugLevel$98$label_1#1:
+ goto inline$BDLGetDebugLevel$98$Return#1;
+
+ inline$BDLGetDebugLevel$98$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$ := inline$BDLGetDebugLevel$98$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_53$1#1;
+
+ inline$BDLPnPStart$0$label_53$1#1:
+ goto inline$BDLPnPStart$0$anon41_Then#1, inline$BDLPnPStart$0$anon41_Else#1;
+
+ inline$BDLPnPStart$0$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon11#1;
+
+ inline$BDLPnPStart$0$anon11#1:
+ goto inline$BDLPnPStart$0$label_56#1;
+
+ inline$BDLPnPStart$0$label_56#1:
+ goto inline$BDLPnPStart$0$label_56_true#1, inline$BDLPnPStart$0$label_56_false#1;
+
+ inline$BDLPnPStart$0$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$) == 0;
+ goto inline$BDLPnPStart$0$label_57#1;
+
+ inline$BDLPnPStart$0$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$27$) != 0;
+ goto inline$BDLPnPStart$0$label_60#1;
+
+ inline$BDLPnPStart$0$label_60#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_61#1;
+
+ inline$BDLPnPStart$0$label_61#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_62#1;
+
+ inline$BDLPnPStart$0$label_62#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_63#1;
+
+ inline$BDLPnPStart$0$label_63#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$2005.0$28$;
+ goto inline$BDLPnPStart$0$label_57#1;
+
+ inline$BDLPnPStart$0$label_57#1:
+ goto inline$BDLGetDebugLevel$99$Entry#1;
+
+ inline$BDLGetDebugLevel$99$Entry#1:
+ goto inline$BDLGetDebugLevel$99$start#1;
+
+ inline$BDLGetDebugLevel$99$start#1:
+ goto inline$BDLGetDebugLevel$99$label_3#1;
+
+ inline$BDLGetDebugLevel$99$label_3#1:
+ havoc inline$BDLGetDebugLevel$99$myNondetVar_0;
+ inline$BDLGetDebugLevel$99$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$99$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$99$label_1#1;
+
+ inline$BDLGetDebugLevel$99$label_1#1:
+ goto inline$BDLGetDebugLevel$99$Return#1;
+
+ inline$BDLGetDebugLevel$99$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$ := inline$BDLGetDebugLevel$99$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_57$1#1;
+
+ inline$BDLPnPStart$0$label_57$1#1:
+ goto inline$BDLPnPStart$0$anon42_Then#1, inline$BDLPnPStart$0$anon42_Else#1;
+
+ inline$BDLPnPStart$0$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon13#1;
+
+ inline$BDLPnPStart$0$anon13#1:
+ goto inline$BDLPnPStart$0$label_66#1;
+
+ inline$BDLPnPStart$0$label_66#1:
+ goto inline$BDLPnPStart$0$label_66_true#1, inline$BDLPnPStart$0$label_66_false#1;
+
+ inline$BDLPnPStart$0$label_66_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$) == 0;
+ goto inline$BDLPnPStart$0$label_67#1;
+
+ inline$BDLPnPStart$0$label_66_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$32$) != 0;
+ goto inline$BDLPnPStart$0$label_70#1;
+
+ inline$BDLPnPStart$0$label_70#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_71#1;
+
+ inline$BDLPnPStart$0$label_71#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_72#1;
+
+ inline$BDLPnPStart$0$label_72#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_73#1;
+
+ inline$BDLPnPStart$0$label_73#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$2005.0$33$;
+ goto inline$BDLPnPStart$0$label_67#1;
+
+ inline$BDLPnPStart$0$label_67#1:
+ goto inline$BDLGetDebugLevel$100$Entry#1;
+
+ inline$BDLGetDebugLevel$100$Entry#1:
+ goto inline$BDLGetDebugLevel$100$start#1;
+
+ inline$BDLGetDebugLevel$100$start#1:
+ goto inline$BDLGetDebugLevel$100$label_3#1;
+
+ inline$BDLGetDebugLevel$100$label_3#1:
+ havoc inline$BDLGetDebugLevel$100$myNondetVar_0;
+ inline$BDLGetDebugLevel$100$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$100$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$100$label_1#1;
+
+ inline$BDLGetDebugLevel$100$label_1#1:
+ goto inline$BDLGetDebugLevel$100$Return#1;
+
+ inline$BDLGetDebugLevel$100$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$ := inline$BDLGetDebugLevel$100$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_67$1#1;
+
+ inline$BDLPnPStart$0$label_67$1#1:
+ goto inline$BDLPnPStart$0$anon43_Then#1, inline$BDLPnPStart$0$anon43_Else#1;
+
+ inline$BDLPnPStart$0$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon15#1;
+
+ inline$BDLPnPStart$0$anon15#1:
+ goto inline$BDLPnPStart$0$label_76#1;
+
+ inline$BDLPnPStart$0$label_76#1:
+ goto inline$BDLPnPStart$0$label_76_true#1, inline$BDLPnPStart$0$label_76_false#1;
+
+ inline$BDLPnPStart$0$label_76_false#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$, 4) == 0;
+ goto inline$BDLPnPStart$0$label_77#1;
+
+ inline$BDLPnPStart$0$label_76_true#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2005.0$37$, 4) != 0;
+ goto inline$BDLPnPStart$0$label_80#1;
+
+ inline$BDLPnPStart$0$label_80#1:
+ goto inline$BDLPnPStart$0$label_77#1;
+
+ inline$BDLPnPStart$0$label_77#1:
+ goto inline$BDLGetDebugLevel$101$Entry#1;
+
+ inline$BDLGetDebugLevel$101$Entry#1:
+ goto inline$BDLGetDebugLevel$101$start#1;
+
+ inline$BDLGetDebugLevel$101$start#1:
+ goto inline$BDLGetDebugLevel$101$label_3#1;
+
+ inline$BDLGetDebugLevel$101$label_3#1:
+ havoc inline$BDLGetDebugLevel$101$myNondetVar_0;
+ inline$BDLGetDebugLevel$101$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$101$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$101$label_1#1;
+
+ inline$BDLGetDebugLevel$101$label_1#1:
+ goto inline$BDLGetDebugLevel$101$Return#1;
+
+ inline$BDLGetDebugLevel$101$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$ := inline$BDLGetDebugLevel$101$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_77$1#1;
+
+ inline$BDLPnPStart$0$label_77$1#1:
+ goto inline$BDLPnPStart$0$anon44_Then#1, inline$BDLPnPStart$0$anon44_Else#1;
+
+ inline$BDLPnPStart$0$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon17#1;
+
+ inline$BDLPnPStart$0$anon17#1:
+ goto inline$BDLPnPStart$0$label_81#1;
+
+ inline$BDLPnPStart$0$label_81#1:
+ goto inline$BDLPnPStart$0$label_81_true#1, inline$BDLPnPStart$0$label_81_false#1;
+
+ inline$BDLPnPStart$0$label_81_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$) == 0;
+ goto inline$BDLPnPStart$0$label_82#1;
+
+ inline$BDLPnPStart$0$label_81_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$55$) != 0;
+ goto inline$BDLPnPStart$0$label_85#1;
+
+ inline$BDLPnPStart$0$label_85#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_86#1;
+
+ inline$BDLPnPStart$0$label_86#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_87#1;
+
+ inline$BDLPnPStart$0$label_87#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_88#1;
+
+ inline$BDLPnPStart$0$label_88#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$2063.0$56$;
+ goto inline$BDLPnPStart$0$label_82#1;
+
+ inline$BDLPnPStart$0$label_82#1:
+ goto inline$BDLGetDebugLevel$102$Entry#1;
+
+ inline$BDLGetDebugLevel$102$Entry#1:
+ goto inline$BDLGetDebugLevel$102$start#1;
+
+ inline$BDLGetDebugLevel$102$start#1:
+ goto inline$BDLGetDebugLevel$102$label_3#1;
+
+ inline$BDLGetDebugLevel$102$label_3#1:
+ havoc inline$BDLGetDebugLevel$102$myNondetVar_0;
+ inline$BDLGetDebugLevel$102$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$102$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$102$label_1#1;
+
+ inline$BDLGetDebugLevel$102$label_1#1:
+ goto inline$BDLGetDebugLevel$102$Return#1;
+
+ inline$BDLGetDebugLevel$102$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$ := inline$BDLGetDebugLevel$102$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_82$1#1;
+
+ inline$BDLPnPStart$0$label_82$1#1:
+ goto inline$BDLPnPStart$0$anon45_Then#1, inline$BDLPnPStart$0$anon45_Else#1;
+
+ inline$BDLPnPStart$0$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon19#1;
+
+ inline$BDLPnPStart$0$anon19#1:
+ goto inline$BDLPnPStart$0$label_91#1;
+
+ inline$BDLPnPStart$0$label_91#1:
+ goto inline$BDLPnPStart$0$label_91_true#1, inline$BDLPnPStart$0$label_91_false#1;
+
+ inline$BDLPnPStart$0$label_91_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$) == 0;
+ goto inline$BDLPnPStart$0$label_92#1;
+
+ inline$BDLPnPStart$0$label_91_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$60$) != 0;
+ goto inline$BDLPnPStart$0$label_95#1;
+
+ inline$BDLPnPStart$0$label_95#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_96#1;
+
+ inline$BDLPnPStart$0$label_96#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_97#1;
+
+ inline$BDLPnPStart$0$label_97#1:
+ call inline$BDLPnPStart$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnPStart$0$label_98#1;
+
+ inline$BDLPnPStart$0$label_98#1:
+ havoc inline$BDLPnPStart$0$$result.DbgPrint$2063.0$61$;
+ goto inline$BDLPnPStart$0$label_92#1;
+
+ inline$BDLPnPStart$0$label_92#1:
+ goto inline$BDLGetDebugLevel$103$Entry#1;
+
+ inline$BDLGetDebugLevel$103$Entry#1:
+ goto inline$BDLGetDebugLevel$103$start#1;
+
+ inline$BDLGetDebugLevel$103$start#1:
+ goto inline$BDLGetDebugLevel$103$label_3#1;
+
+ inline$BDLGetDebugLevel$103$label_3#1:
+ havoc inline$BDLGetDebugLevel$103$myNondetVar_0;
+ inline$BDLGetDebugLevel$103$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$103$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$103$label_1#1;
+
+ inline$BDLGetDebugLevel$103$label_1#1:
+ goto inline$BDLGetDebugLevel$103$Return#1;
+
+ inline$BDLGetDebugLevel$103$Return#1:
+ inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$ := inline$BDLGetDebugLevel$103$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnPStart$0$label_92$1#1;
+
+ inline$BDLPnPStart$0$label_92$1#1:
+ goto inline$BDLPnPStart$0$anon46_Then#1, inline$BDLPnPStart$0$anon46_Else#1;
+
+ inline$BDLPnPStart$0$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnPStart$0$anon21#1;
+
+ inline$BDLPnPStart$0$anon21#1:
+ goto inline$BDLPnPStart$0$label_101#1;
+
+ inline$BDLPnPStart$0$label_101#1:
+ goto inline$BDLPnPStart$0$label_101_true#1, inline$BDLPnPStart$0$label_101_false#1;
+
+ inline$BDLPnPStart$0$label_101_false#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$, 4) == 0;
+ goto inline$BDLPnPStart$0$label_102#1;
+
+ inline$BDLPnPStart$0$label_101_true#1:
+ assume BIT_BAND(inline$BDLPnPStart$0$$result.BDLGetDebugLevel$2063.0$65$, 4) != 0;
+ goto inline$BDLPnPStart$0$label_103#1;
+
+ inline$BDLPnPStart$0$label_103#1:
+ goto inline$BDLPnPStart$0$label_102#1;
+
+ inline$BDLPnPStart$0$label_102#1:
+ inline$BDLPnPStart$0$$result.BDLPnPStart$1954.0$1$ := inline$BDLPnPStart$0$$status$5$1962.32$BDLPnPStart$16;
+ goto inline$BDLPnPStart$0$label_1#1;
+
+ inline$BDLPnPStart$0$label_1#1:
+ call __HAVOC_free(inline$BDLPnPStart$0$$bdsiInitializeResourcesParams$7$1964.32$BDLPnPStart$16);
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLPnPStart$0$Return#1;
+
+ inline$BDLPnPStart$0$Return#1:
+ inline$BDLPnP$0$$result.BDLPnPStart$906.28$28$ := inline$BDLPnPStart$0$$result.BDLPnPStart$1954.0$1$;
+ goto inline$BDLPnP$0$label_113$1#1;
+
+ inline$BDLPnP$0$label_113$1#1:
+ goto inline$BDLPnP$0$anon67_Then#1, inline$BDLPnP$0$anon67_Else#1;
+
+ inline$BDLPnP$0$anon67_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon27#1;
+
+ inline$BDLPnP$0$anon27#1:
+ goto inline$BDLPnP$0$label_155#1;
+
+ inline$BDLPnP$0$label_155#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.BDLPnPStart$906.28$28$;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$anon67_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_52_case_0#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 0;
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 1;
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 2;
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 3;
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 4;
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 5;
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 6;
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume inline$BDLPnP$0$myNondetVar_0 != 23;
+ goto inline$BDLPnP$0$label_110#1;
+
+ inline$BDLPnP$0$label_110#1:
+ goto inline$BDLGetDebugLevel$9$Entry#1;
+
+ inline$BDLGetDebugLevel$9$Entry#1:
+ goto inline$BDLGetDebugLevel$9$start#1;
+
+ inline$BDLGetDebugLevel$9$start#1:
+ goto inline$BDLGetDebugLevel$9$label_3#1;
+
+ inline$BDLGetDebugLevel$9$label_3#1:
+ havoc inline$BDLGetDebugLevel$9$myNondetVar_0;
+ inline$BDLGetDebugLevel$9$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$9$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$9$label_1#1;
+
+ inline$BDLGetDebugLevel$9$label_1#1:
+ goto inline$BDLGetDebugLevel$9$Return#1;
+
+ inline$BDLGetDebugLevel$9$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$ := inline$BDLGetDebugLevel$9$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_110$1#1;
+
+ inline$BDLPnP$0$label_110$1#1:
+ goto inline$BDLPnP$0$anon66_Then#1, inline$BDLPnP$0$anon66_Else#1;
+
+ inline$BDLPnP$0$anon66_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon25#1;
+
+ inline$BDLPnP$0$anon25#1:
+ goto inline$BDLPnP$0$label_156#1;
+
+ inline$BDLPnP$0$label_156#1:
+ goto inline$BDLPnP$0$label_156_true#1, inline$BDLPnP$0$label_156_false#1;
+
+ inline$BDLPnP$0$label_156_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$) == 0;
+ goto inline$BDLPnP$0$label_157#1;
+
+ inline$BDLPnP$0$label_156_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$36$) != 0;
+ goto inline$BDLPnP$0$label_160#1;
+
+ inline$BDLPnP$0$label_160#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_161#1;
+
+ inline$BDLPnP$0$label_161#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_162#1;
+
+ inline$BDLPnP$0$label_162#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_163#1;
+
+ inline$BDLPnP$0$label_163#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$987.0$37$;
+ goto inline$BDLPnP$0$label_157#1;
+
+ inline$BDLPnP$0$label_157#1:
+ goto inline$BDLGetDebugLevel$739$Entry#1;
+
+ inline$BDLGetDebugLevel$739$Entry#1:
+ goto inline$BDLGetDebugLevel$739$start#1;
+
+ inline$BDLGetDebugLevel$739$start#1:
+ goto inline$BDLGetDebugLevel$739$label_3#1;
+
+ inline$BDLGetDebugLevel$739$label_3#1:
+ havoc inline$BDLGetDebugLevel$739$myNondetVar_0;
+ inline$BDLGetDebugLevel$739$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$739$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$739$label_1#1;
+
+ inline$BDLGetDebugLevel$739$label_1#1:
+ goto inline$BDLGetDebugLevel$739$Return#1;
+
+ inline$BDLGetDebugLevel$739$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$ := inline$BDLGetDebugLevel$739$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_157$1#1;
+
+ inline$BDLPnP$0$label_157$1#1:
+ goto inline$BDLPnP$0$anon77_Then#1, inline$BDLPnP$0$anon77_Else#1;
+
+ inline$BDLPnP$0$anon77_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon47#1;
+
+ inline$BDLPnP$0$anon47#1:
+ goto inline$BDLPnP$0$label_166#1;
+
+ inline$BDLPnP$0$label_166#1:
+ goto inline$BDLPnP$0$label_166_true#1, inline$BDLPnP$0$label_166_false#1;
+
+ inline$BDLPnP$0$label_166_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$) == 0;
+ goto inline$BDLPnP$0$label_167#1;
+
+ inline$BDLPnP$0$label_166_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$41$) != 0;
+ goto inline$BDLPnP$0$label_170#1;
+
+ inline$BDLPnP$0$label_170#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_171#1;
+
+ inline$BDLPnP$0$label_171#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_172#1;
+
+ inline$BDLPnP$0$label_172#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_173#1;
+
+ inline$BDLPnP$0$label_173#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$987.0$42$;
+ goto inline$BDLPnP$0$label_167#1;
+
+ inline$BDLPnP$0$label_167#1:
+ goto inline$BDLGetDebugLevel$740$Entry#1;
+
+ inline$BDLGetDebugLevel$740$Entry#1:
+ goto inline$BDLGetDebugLevel$740$start#1;
+
+ inline$BDLGetDebugLevel$740$start#1:
+ goto inline$BDLGetDebugLevel$740$label_3#1;
+
+ inline$BDLGetDebugLevel$740$label_3#1:
+ havoc inline$BDLGetDebugLevel$740$myNondetVar_0;
+ inline$BDLGetDebugLevel$740$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$740$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$740$label_1#1;
+
+ inline$BDLGetDebugLevel$740$label_1#1:
+ goto inline$BDLGetDebugLevel$740$Return#1;
+
+ inline$BDLGetDebugLevel$740$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$ := inline$BDLGetDebugLevel$740$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_167$1#1;
+
+ inline$BDLPnP$0$label_167$1#1:
+ goto inline$BDLPnP$0$anon78_Then#1, inline$BDLPnP$0$anon78_Else#1;
+
+ inline$BDLPnP$0$anon78_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon49#1;
+
+ inline$BDLPnP$0$anon49#1:
+ goto inline$BDLPnP$0$label_176#1;
+
+ inline$BDLPnP$0$label_176#1:
+ goto inline$BDLPnP$0$label_176_true#1, inline$BDLPnP$0$label_176_false#1;
+
+ inline$BDLPnP$0$label_176_false#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$, 4) == 0;
+ goto inline$BDLPnP$0$label_177#1;
+
+ inline$BDLPnP$0$label_176_true#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$987.0$46$, 4) != 0;
+ goto inline$BDLPnP$0$label_180#1;
+
+ inline$BDLPnP$0$label_180#1:
+ goto inline$BDLPnP$0$label_177#1;
+
+ inline$BDLPnP$0$label_177#1:
+ goto inline$IoSkipCurrentIrpStackLocation$2$Entry#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$Entry#1:
+ inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$IoSkipCurrentIrpStackLocation$2$start#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$start#1:
+ inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4 := inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4_.1;
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_3#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_3#1:
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_3_true#1, inline$IoSkipCurrentIrpStackLocation$2$label_3_false#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_3_false#1:
+ inline$IoSkipCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoSkipCurrentIrpStackLocation$2$myVar_0, inline$IoSkipCurrentIrpStackLocation$2$myVar_1);
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_4#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_4#1:
+ call inline$IoSkipCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_7#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_7#1:
+ call inline$IoSkipCurrentIrpStackLocation$2$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_8#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_8#1:
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_5#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_3_true#1:
+ inline$IoSkipCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$2$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoSkipCurrentIrpStackLocation$2$myVar_0, inline$IoSkipCurrentIrpStackLocation$2$myVar_1);
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_5#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_5#1:
+ inline$IoSkipCurrentIrpStackLocation$2$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$2$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSkipCurrentIrpStackLocation$2$$Irp$1$25117.17$IoSkipCurrentIrpStackLocation$4) := inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_6#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_6#1:
+ havoc inline$IoSkipCurrentIrpStackLocation$2$myNondetVar_0;
+ inline$IoSkipCurrentIrpStackLocation$2$tempBoogie0 := PLUS(inline$IoSkipCurrentIrpStackLocation$2$myNondetVar_0, 36, 1);
+ goto inline$IoSkipCurrentIrpStackLocation$2$label_1#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$label_1#1:
+ goto inline$IoSkipCurrentIrpStackLocation$2$Return#1;
+
+ inline$IoSkipCurrentIrpStackLocation$2$Return#1:
+ goto inline$BDLPnP$0$label_177$1#1;
+
+ inline$BDLPnP$0$label_177$1#1:
+ goto inline$BDLPnP$0$anon79_Then#1, inline$BDLPnP$0$anon79_Else#1;
+
+ inline$BDLPnP$0$anon79_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon51#1;
+
+ inline$BDLPnP$0$anon51#1:
+ goto inline$BDLPnP$0$label_181#1;
+
+ inline$BDLPnP$0$label_181#1:
+ goto inline$storm_IoCallDriver$14$Entry#1;
+
+ inline$storm_IoCallDriver$14$Entry#1:
+ inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$storm_IoCallDriver$14$start#1;
+
+ inline$storm_IoCallDriver$14$start#1:
+ inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8_.1;
+ goto inline$storm_IoCallDriver$14$label_3#1;
+
+ inline$storm_IoCallDriver$14$label_3#1:
+ goto inline$storm_IoCallDriver$14$label_4#1;
+
+ inline$storm_IoCallDriver$14$label_4#1:
+ goto inline$storm_IoCallDriver$14$label_5#1;
+
+ inline$storm_IoCallDriver$14$label_5#1:
+ goto inline$storm_IoCallDriver$14$label_6#1;
+
+ inline$storm_IoCallDriver$14$label_6#1:
+ call inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$ := storm_nondet();
+ goto inline$storm_IoCallDriver$14$label_9#1;
+
+ inline$storm_IoCallDriver$14$label_9#1:
+ goto inline$storm_IoCallDriver$14$label_9_true#1, inline$storm_IoCallDriver$14$label_9_false#1;
+
+ inline$storm_IoCallDriver$14$label_9_false#1:
+ assume inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$ == 0;
+ goto inline$storm_IoCallDriver$14$label_10#1;
+
+ inline$storm_IoCallDriver$14$label_9_true#1:
+ assume inline$storm_IoCallDriver$14$$result.storm_nondet$465.2$2$ != 0;
+ goto inline$storm_IoCallDriver$14$label_13#1;
+
+ inline$storm_IoCallDriver$14$label_13#1:
+ havoc raiseException;
+ goto inline$storm_IoCallDriver$14$anon12_Then#1, inline$storm_IoCallDriver$14$anon12_Else#1;
+
+ inline$storm_IoCallDriver$14$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$14$anon3#1;
+
+ inline$storm_IoCallDriver$14$anon3#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$14$label_14#1;
+
+ inline$storm_IoCallDriver$14$label_14#1:
+ goto inline$storm_IoCallDriver$14$label_14_true#1, inline$storm_IoCallDriver$14$label_14_false#1;
+
+ inline$storm_IoCallDriver$14$label_14_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCallDriver$14$label_15#1;
+
+ inline$storm_IoCallDriver$14$label_15#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCallDriver$14$label_1#1;
+
+ inline$storm_IoCallDriver$14$label_14_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCallDriver$14$label_10#1;
+
+ inline$storm_IoCallDriver$14$label_10#1:
+ goto inline$IoSetNextIrpStackLocation$15$Entry#1;
+
+ inline$IoSetNextIrpStackLocation$15$Entry#1:
+ inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoSetNextIrpStackLocation$15$start#1;
+
+ inline$IoSetNextIrpStackLocation$15$start#1:
+ inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4 := inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4_.1;
+ goto inline$IoSetNextIrpStackLocation$15$label_3#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_3#1:
+ goto inline$IoSetNextIrpStackLocation$15$label_3_true#1, inline$IoSetNextIrpStackLocation$15$label_3_false#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_3_false#1:
+ inline$IoSetNextIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LT(0, inline$IoSetNextIrpStackLocation$15$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$15$label_4#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_4#1:
+ call inline$IoSetNextIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$15$label_7#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_7#1:
+ call inline$IoSetNextIrpStackLocation$15$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoSetNextIrpStackLocation$15$label_8#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_8#1:
+ goto inline$IoSetNextIrpStackLocation$15$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_3_true#1:
+ inline$IoSetNextIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LT(0, inline$IoSetNextIrpStackLocation$15$myVar_0);
+ goto inline$IoSetNextIrpStackLocation$15$label_5#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_5#1:
+ inline$IoSetNextIrpStackLocation$15$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoSetNextIrpStackLocation$15$tempBoogie0 := MINUS_BOTH_PTR_OR_BOTH_INT(inline$IoSetNextIrpStackLocation$15$myVar_0, 1, 1);
+ Mem_0_T.CurrentLocation__IRP := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoSetNextIrpStackLocation$15$$Irp$1$25054.16$IoSetNextIrpStackLocation$4) := inline$IoSetNextIrpStackLocation$15$tempBoogie0];
+ call contextSwitch();
+ goto inline$IoSetNextIrpStackLocation$15$label_6#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_6#1:
+ havoc inline$IoSetNextIrpStackLocation$15$myNondetVar_0;
+ inline$IoSetNextIrpStackLocation$15$tempBoogie0 := MINUS_LEFT_PTR(inline$IoSetNextIrpStackLocation$15$myNondetVar_0, 36, 1);
+ goto inline$IoSetNextIrpStackLocation$15$label_1#1;
+
+ inline$IoSetNextIrpStackLocation$15$label_1#1:
+ goto inline$IoSetNextIrpStackLocation$15$Return#1;
+
+ inline$IoSetNextIrpStackLocation$15$Return#1:
+ goto inline$storm_IoCallDriver$14$label_10$1#1;
+
+ inline$storm_IoCallDriver$14$label_10$1#1:
+ goto inline$storm_IoCallDriver$14$anon11_Then#1, inline$storm_IoCallDriver$14$anon11_Else#1;
+
+ inline$storm_IoCallDriver$14$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$14$anon1#1;
+
+ inline$storm_IoCallDriver$14$anon1#1:
+ goto inline$storm_IoCallDriver$14$label_18#1;
+
+ inline$storm_IoCallDriver$14$label_18#1:
+ goto inline$IoGetCurrentIrpStackLocation$141$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$IoGetCurrentIrpStackLocation$141$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$start#1:
+ inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$141$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$141$label_3_true#1, inline$IoGetCurrentIrpStackLocation$141$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$141$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$141$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$141$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$141$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$141$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$141$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$141$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$141$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$141$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$141$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$141$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$141$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$141$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$141$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$141$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$141$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$141$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$141$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$141$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$141$Return#1:
+ goto inline$storm_IoCallDriver$14$label_18$1#1;
+
+ inline$storm_IoCallDriver$14$label_18$1#1:
+ goto inline$storm_IoCallDriver$14$anon13_Then#1, inline$storm_IoCallDriver$14$anon13_Else#1;
+
+ inline$storm_IoCallDriver$14$anon13_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$14$anon6#1;
+
+ inline$storm_IoCallDriver$14$anon6#1:
+ goto inline$storm_IoCallDriver$14$label_21#1;
+
+ inline$storm_IoCallDriver$14$label_21#1:
+ goto inline$storm_IoCallDriver$14$label_22#1;
+
+ inline$storm_IoCallDriver$14$label_22#1:
+ goto inline$storm_IoCallDriver$14$label_23#1;
+
+ inline$storm_IoCallDriver$14$label_23#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$14$label_24#1;
+
+ inline$storm_IoCallDriver$14$label_24#1:
+ call inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ := storm_nondet();
+ goto inline$storm_IoCallDriver$14$label_27#1;
+
+ inline$storm_IoCallDriver$14$label_27#1:
+ goto inline$storm_IoCallDriver$14$label_27_case_0#1, inline$storm_IoCallDriver$14$label_27_case_1#1, inline$storm_IoCallDriver$14$label_27_case_2#1;
+
+ inline$storm_IoCallDriver$14$label_27_case_2#1:
+ assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ == 1;
+ goto inline$storm_IoCallDriver$14$label_30#1;
+
+ inline$storm_IoCallDriver$14$label_30#1:
+ inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8 := 0 - 1073741823;
+ goto inline$storm_IoCallDriver$14$label_31#1;
+
+ inline$storm_IoCallDriver$14$label_31#1:
+ goto inline$storm_IoCallDriver$14$label_32#1;
+
+ inline$storm_IoCallDriver$14$label_32#1:
+ goto inline$storm_IoCallDriver$14$label_33#1;
+
+ inline$storm_IoCallDriver$14$label_33#1:
+ goto inline$CallCompletionRoutine$28$Entry#1;
+
+ inline$CallCompletionRoutine$28$Entry#1:
+ inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$28$start#1;
+
+ inline$CallCompletionRoutine$28$start#1:
+ inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$28$label_3#1;
+
+ inline$CallCompletionRoutine$28$label_3#1:
+ goto inline$CallCompletionRoutine$28$label_4#1;
+
+ inline$CallCompletionRoutine$28$label_4#1:
+ goto inline$CallCompletionRoutine$28$label_5#1;
+
+ inline$CallCompletionRoutine$28$label_5#1:
+ goto inline$CallCompletionRoutine$28$label_6#1;
+
+ inline$CallCompletionRoutine$28$label_6#1:
+ goto inline$CallCompletionRoutine$28$label_7#1;
+
+ inline$CallCompletionRoutine$28$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$142$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$142$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$start#1:
+ inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$142$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$142$label_3_true#1, inline$IoGetCurrentIrpStackLocation$142$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$142$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$142$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$142$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$142$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$142$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$142$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$142$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$142$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$142$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$142$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$142$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$142$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$142$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$142$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$142$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$142$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$142$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$142$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$142$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$142$Return#1:
+ goto inline$CallCompletionRoutine$28$label_7$1#1;
+
+ inline$CallCompletionRoutine$28$label_7$1#1:
+ goto inline$CallCompletionRoutine$28$anon10_Then#1, inline$CallCompletionRoutine$28$anon10_Else#1;
+
+ inline$CallCompletionRoutine$28$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$28$anon1#1;
+
+ inline$CallCompletionRoutine$28$anon1#1:
+ goto inline$CallCompletionRoutine$28$label_10#1;
+
+ inline$CallCompletionRoutine$28$label_10#1:
+ goto inline$CallCompletionRoutine$28$label_11#1;
+
+ inline$CallCompletionRoutine$28$label_11#1:
+ havoc inline$CallCompletionRoutine$28$myNondetVar_0;
+ inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$myNondetVar_0;
+ goto inline$CallCompletionRoutine$28$label_12#1;
+
+ inline$CallCompletionRoutine$28$label_12#1:
+ havoc inline$CallCompletionRoutine$28$myNondetVar_0;
+ inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$myNondetVar_0;
+ goto inline$CallCompletionRoutine$28$label_13#1;
+
+ inline$CallCompletionRoutine$28$label_13#1:
+ havoc inline$CallCompletionRoutine$28$myNondetVar_0;
+ goto inline$CallCompletionRoutine$28$label_14#1;
+
+ inline$CallCompletionRoutine$28$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$143$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$143$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$start#1:
+ inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$143$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$143$label_3_true#1, inline$IoGetCurrentIrpStackLocation$143$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$143$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$143$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$143$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$143$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$143$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$143$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$143$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$143$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$143$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$143$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$143$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$143$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$143$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$143$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$143$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$143$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$143$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$143$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$143$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$143$Return#1:
+ goto inline$CallCompletionRoutine$28$label_14$1#1;
+
+ inline$CallCompletionRoutine$28$label_14$1#1:
+ goto inline$CallCompletionRoutine$28$anon11_Then#1, inline$CallCompletionRoutine$28$anon11_Else#1;
+
+ inline$CallCompletionRoutine$28$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$28$anon3#1;
+
+ inline$CallCompletionRoutine$28$anon3#1:
+ goto inline$CallCompletionRoutine$28$label_17#1;
+
+ inline$CallCompletionRoutine$28$label_17#1:
+ goto inline$CallCompletionRoutine$28$label_18#1;
+
+ inline$CallCompletionRoutine$28$label_18#1:
+ goto inline$CallCompletionRoutine$28$label_18_true#1, inline$CallCompletionRoutine$28$label_18_false#1;
+
+ inline$CallCompletionRoutine$28$label_18_false#1:
+ assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$28$label_1#1;
+
+ inline$CallCompletionRoutine$28$label_18_true#1:
+ assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$28$label_19#1;
+
+ inline$CallCompletionRoutine$28$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$28$label_20#1;
+
+ inline$CallCompletionRoutine$28$label_20#1:
+ goto inline$CallCompletionRoutine$28$label_20_icall_1#1, inline$CallCompletionRoutine$28$label_20_icall_2#1, inline$CallCompletionRoutine$28$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$28$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$28$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$28$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$28$Entry#1:
+ inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$28$start#1;
+
+ inline$BDLSystemPowerIoCompletion$28$start#1:
+ call inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$28$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_4#1:
+ inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_6#1:
+ inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$28$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$28$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$145$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$145$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$start#1:
+ inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$145$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$145$label_3_true#1, inline$IoGetCurrentIrpStackLocation$145$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$145$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$145$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$145$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$145$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$145$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$145$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$145$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$145$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$145$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$145$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$145$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$145$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$145$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$145$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$145$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$145$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$145$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$145$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$145$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$145$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon36_Then#1, inline$BDLSystemPowerIoCompletion$28$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_15#1:
+ goto inline$BDLGetDebugLevel$750$Entry#1;
+
+ inline$BDLGetDebugLevel$750$Entry#1:
+ goto inline$BDLGetDebugLevel$750$start#1;
+
+ inline$BDLGetDebugLevel$750$start#1:
+ goto inline$BDLGetDebugLevel$750$label_3#1;
+
+ inline$BDLGetDebugLevel$750$label_3#1:
+ havoc inline$BDLGetDebugLevel$750$myNondetVar_0;
+ inline$BDLGetDebugLevel$750$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$750$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$750$label_1#1;
+
+ inline$BDLGetDebugLevel$750$label_1#1:
+ goto inline$BDLGetDebugLevel$750$Return#1;
+
+ inline$BDLGetDebugLevel$750$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$750$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon37_Then#1, inline$BDLSystemPowerIoCompletion$28$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_18_true#1, inline$BDLSystemPowerIoCompletion$28$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_19#1:
+ goto inline$BDLGetDebugLevel$751$Entry#1;
+
+ inline$BDLGetDebugLevel$751$Entry#1:
+ goto inline$BDLGetDebugLevel$751$start#1;
+
+ inline$BDLGetDebugLevel$751$start#1:
+ goto inline$BDLGetDebugLevel$751$label_3#1;
+
+ inline$BDLGetDebugLevel$751$label_3#1:
+ havoc inline$BDLGetDebugLevel$751$myNondetVar_0;
+ inline$BDLGetDebugLevel$751$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$751$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$751$label_1#1;
+
+ inline$BDLGetDebugLevel$751$label_1#1:
+ goto inline$BDLGetDebugLevel$751$Return#1;
+
+ inline$BDLGetDebugLevel$751$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$751$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon38_Then#1, inline$BDLSystemPowerIoCompletion$28$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_28_true#1, inline$BDLSystemPowerIoCompletion$28$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_29#1:
+ goto inline$BDLGetDebugLevel$752$Entry#1;
+
+ inline$BDLGetDebugLevel$752$Entry#1:
+ goto inline$BDLGetDebugLevel$752$start#1;
+
+ inline$BDLGetDebugLevel$752$start#1:
+ goto inline$BDLGetDebugLevel$752$label_3#1;
+
+ inline$BDLGetDebugLevel$752$label_3#1:
+ havoc inline$BDLGetDebugLevel$752$myNondetVar_0;
+ inline$BDLGetDebugLevel$752$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$752$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$752$label_1#1;
+
+ inline$BDLGetDebugLevel$752$label_1#1:
+ goto inline$BDLGetDebugLevel$752$Return#1;
+
+ inline$BDLGetDebugLevel$752$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$752$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon39_Then#1, inline$BDLSystemPowerIoCompletion$28$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_38_true#1, inline$BDLSystemPowerIoCompletion$28$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_39_true#1, inline$BDLSystemPowerIoCompletion$28$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$28$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$28$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$28$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$28$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$28$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_106_true#1, inline$BDLSystemPowerIoCompletion$28$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$28$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$28$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$28$myNondetVar_0, inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$28$anon50_Then#1, inline$BDLSystemPowerIoCompletion$28$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_112#1:
+ inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_113_true#1, inline$BDLSystemPowerIoCompletion$28$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$28$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_117#1:
+ goto inline$BDLGetDebugLevel$759$Entry#1;
+
+ inline$BDLGetDebugLevel$759$Entry#1:
+ goto inline$BDLGetDebugLevel$759$start#1;
+
+ inline$BDLGetDebugLevel$759$start#1:
+ goto inline$BDLGetDebugLevel$759$label_3#1;
+
+ inline$BDLGetDebugLevel$759$label_3#1:
+ havoc inline$BDLGetDebugLevel$759$myNondetVar_0;
+ inline$BDLGetDebugLevel$759$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$759$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$759$label_1#1;
+
+ inline$BDLGetDebugLevel$759$label_1#1:
+ goto inline$BDLGetDebugLevel$759$Return#1;
+
+ inline$BDLGetDebugLevel$759$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$759$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon51_Then#1, inline$BDLSystemPowerIoCompletion$28$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_120_true#1, inline$BDLSystemPowerIoCompletion$28$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_121#1:
+ goto inline$BDLGetDebugLevel$760$Entry#1;
+
+ inline$BDLGetDebugLevel$760$Entry#1:
+ goto inline$BDLGetDebugLevel$760$start#1;
+
+ inline$BDLGetDebugLevel$760$start#1:
+ goto inline$BDLGetDebugLevel$760$label_3#1;
+
+ inline$BDLGetDebugLevel$760$label_3#1:
+ havoc inline$BDLGetDebugLevel$760$myNondetVar_0;
+ inline$BDLGetDebugLevel$760$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$760$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$760$label_1#1;
+
+ inline$BDLGetDebugLevel$760$label_1#1:
+ goto inline$BDLGetDebugLevel$760$Return#1;
+
+ inline$BDLGetDebugLevel$760$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$760$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon52_Then#1, inline$BDLSystemPowerIoCompletion$28$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_130_true#1, inline$BDLSystemPowerIoCompletion$28$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_131#1:
+ goto inline$BDLGetDebugLevel$761$Entry#1;
+
+ inline$BDLGetDebugLevel$761$Entry#1:
+ goto inline$BDLGetDebugLevel$761$start#1;
+
+ inline$BDLGetDebugLevel$761$start#1:
+ goto inline$BDLGetDebugLevel$761$label_3#1;
+
+ inline$BDLGetDebugLevel$761$label_3#1:
+ havoc inline$BDLGetDebugLevel$761$myNondetVar_0;
+ inline$BDLGetDebugLevel$761$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$761$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$761$label_1#1;
+
+ inline$BDLGetDebugLevel$761$label_1#1:
+ goto inline$BDLGetDebugLevel$761$Return#1;
+
+ inline$BDLGetDebugLevel$761$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$761$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon53_Then#1, inline$BDLSystemPowerIoCompletion$28$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_140_true#1, inline$BDLSystemPowerIoCompletion$28$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$28$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_115#1:
+ inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$28$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$28$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$28$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_43#1:
+ goto inline$BDLGetDebugLevel$753$Entry#1;
+
+ inline$BDLGetDebugLevel$753$Entry#1:
+ goto inline$BDLGetDebugLevel$753$start#1;
+
+ inline$BDLGetDebugLevel$753$start#1:
+ goto inline$BDLGetDebugLevel$753$label_3#1;
+
+ inline$BDLGetDebugLevel$753$label_3#1:
+ havoc inline$BDLGetDebugLevel$753$myNondetVar_0;
+ inline$BDLGetDebugLevel$753$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$753$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$753$label_1#1;
+
+ inline$BDLGetDebugLevel$753$label_1#1:
+ goto inline$BDLGetDebugLevel$753$Return#1;
+
+ inline$BDLGetDebugLevel$753$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$753$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon40_Then#1, inline$BDLSystemPowerIoCompletion$28$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_46_true#1, inline$BDLSystemPowerIoCompletion$28$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_47#1:
+ goto inline$BDLGetDebugLevel$754$Entry#1;
+
+ inline$BDLGetDebugLevel$754$Entry#1:
+ goto inline$BDLGetDebugLevel$754$start#1;
+
+ inline$BDLGetDebugLevel$754$start#1:
+ goto inline$BDLGetDebugLevel$754$label_3#1;
+
+ inline$BDLGetDebugLevel$754$label_3#1:
+ havoc inline$BDLGetDebugLevel$754$myNondetVar_0;
+ inline$BDLGetDebugLevel$754$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$754$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$754$label_1#1;
+
+ inline$BDLGetDebugLevel$754$label_1#1:
+ goto inline$BDLGetDebugLevel$754$Return#1;
+
+ inline$BDLGetDebugLevel$754$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$754$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon41_Then#1, inline$BDLSystemPowerIoCompletion$28$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_56_true#1, inline$BDLSystemPowerIoCompletion$28$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_57#1:
+ goto inline$BDLGetDebugLevel$755$Entry#1;
+
+ inline$BDLGetDebugLevel$755$Entry#1:
+ goto inline$BDLGetDebugLevel$755$start#1;
+
+ inline$BDLGetDebugLevel$755$start#1:
+ goto inline$BDLGetDebugLevel$755$label_3#1;
+
+ inline$BDLGetDebugLevel$755$label_3#1:
+ havoc inline$BDLGetDebugLevel$755$myNondetVar_0;
+ inline$BDLGetDebugLevel$755$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$755$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$755$label_1#1;
+
+ inline$BDLGetDebugLevel$755$label_1#1:
+ goto inline$BDLGetDebugLevel$755$Return#1;
+
+ inline$BDLGetDebugLevel$755$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$755$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon42_Then#1, inline$BDLSystemPowerIoCompletion$28$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_66_true#1, inline$BDLSystemPowerIoCompletion$28$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$28$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$28$anon43_Then#1, inline$BDLSystemPowerIoCompletion$28$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$28$anon44_Then#1, inline$BDLSystemPowerIoCompletion$28$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_74#1:
+ goto inline$storm_IoCompleteRequest$59$Entry#1;
+
+ inline$storm_IoCompleteRequest$59$Entry#1:
+ inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$28$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$59$start#1;
+
+ inline$storm_IoCompleteRequest$59$start#1:
+ inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$59$label_3#1;
+
+ inline$storm_IoCompleteRequest$59$label_3#1:
+ call inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$59$label_6#1;
+
+ inline$storm_IoCompleteRequest$59$label_6#1:
+ goto inline$storm_IoCompleteRequest$59$label_6_true#1, inline$storm_IoCompleteRequest$59$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$59$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$59$label_7#1;
+
+ inline$storm_IoCompleteRequest$59$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$59$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$59$label_8#1;
+
+ inline$storm_IoCompleteRequest$59$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$59$anon3_Then#1, inline$storm_IoCompleteRequest$59$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$59$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$59$anon1#1;
+
+ inline$storm_IoCompleteRequest$59$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$59$label_9#1;
+
+ inline$storm_IoCompleteRequest$59$label_9#1:
+ goto inline$storm_IoCompleteRequest$59$label_9_true#1, inline$storm_IoCompleteRequest$59$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$59$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$59$label_10#1;
+
+ inline$storm_IoCompleteRequest$59$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$59$label_1#1;
+
+ inline$storm_IoCompleteRequest$59$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$59$label_7#1;
+
+ inline$storm_IoCompleteRequest$59$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$59$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$59$label_1#1;
+
+ inline$storm_IoCompleteRequest$59$label_1#1:
+ goto inline$storm_IoCompleteRequest$59$Return#1;
+
+ inline$storm_IoCompleteRequest$59$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$59$Return#1;
+
+ inline$storm_IoCompleteRequest$59$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon45_Then#1, inline$BDLSystemPowerIoCompletion$28$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$28$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$28$anon46_Then#1, inline$BDLSystemPowerIoCompletion$28$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_80#1:
+ goto inline$BDLGetDebugLevel$756$Entry#1;
+
+ inline$BDLGetDebugLevel$756$Entry#1:
+ goto inline$BDLGetDebugLevel$756$start#1;
+
+ inline$BDLGetDebugLevel$756$start#1:
+ goto inline$BDLGetDebugLevel$756$label_3#1;
+
+ inline$BDLGetDebugLevel$756$label_3#1:
+ havoc inline$BDLGetDebugLevel$756$myNondetVar_0;
+ inline$BDLGetDebugLevel$756$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$756$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$756$label_1#1;
+
+ inline$BDLGetDebugLevel$756$label_1#1:
+ goto inline$BDLGetDebugLevel$756$Return#1;
+
+ inline$BDLGetDebugLevel$756$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$756$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon47_Then#1, inline$BDLSystemPowerIoCompletion$28$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_83_true#1, inline$BDLSystemPowerIoCompletion$28$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_84#1:
+ goto inline$BDLGetDebugLevel$757$Entry#1;
+
+ inline$BDLGetDebugLevel$757$Entry#1:
+ goto inline$BDLGetDebugLevel$757$start#1;
+
+ inline$BDLGetDebugLevel$757$start#1:
+ goto inline$BDLGetDebugLevel$757$label_3#1;
+
+ inline$BDLGetDebugLevel$757$label_3#1:
+ havoc inline$BDLGetDebugLevel$757$myNondetVar_0;
+ inline$BDLGetDebugLevel$757$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$757$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$757$label_1#1;
+
+ inline$BDLGetDebugLevel$757$label_1#1:
+ goto inline$BDLGetDebugLevel$757$Return#1;
+
+ inline$BDLGetDebugLevel$757$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$757$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon48_Then#1, inline$BDLSystemPowerIoCompletion$28$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_93_true#1, inline$BDLSystemPowerIoCompletion$28$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$28$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$28$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_94#1:
+ goto inline$BDLGetDebugLevel$758$Entry#1;
+
+ inline$BDLGetDebugLevel$758$Entry#1:
+ goto inline$BDLGetDebugLevel$758$start#1;
+
+ inline$BDLGetDebugLevel$758$start#1:
+ goto inline$BDLGetDebugLevel$758$label_3#1;
+
+ inline$BDLGetDebugLevel$758$label_3#1:
+ havoc inline$BDLGetDebugLevel$758$myNondetVar_0;
+ inline$BDLGetDebugLevel$758$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$758$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$758$label_1#1;
+
+ inline$BDLGetDebugLevel$758$label_1#1:
+ goto inline$BDLGetDebugLevel$758$Return#1;
+
+ inline$BDLGetDebugLevel$758$Return#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$758$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$28$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$28$anon49_Then#1, inline$BDLSystemPowerIoCompletion$28$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_103_true#1, inline$BDLSystemPowerIoCompletion$28$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$28$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$28$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$28$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_104#1:
+ inline$BDLSystemPowerIoCompletion$28$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$28$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$28$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$28$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$28$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$28$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$28$Return#1:
+ inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$28$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$28$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$28$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$28$anon14_Then#1, inline$CallCompletionRoutine$28$anon14_Else#1;
+
+ inline$CallCompletionRoutine$28$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$28$anon9#1;
+
+ inline$CallCompletionRoutine$28$anon9#1:
+ goto inline$CallCompletionRoutine$28$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$28$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$28$Return#1;
+
+ inline$CallCompletionRoutine$28$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$28$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$28$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$28$Entry#1:
+ inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$28$start#1;
+
+ inline$BDLDevicePowerIoCompletion$28$start#1:
+ call inline$BDLDevicePowerIoCompletion$28$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$28$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_4#1:
+ inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_6#1:
+ inline$BDLDevicePowerIoCompletion$28$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$28$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$28$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$144$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$144$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$start#1:
+ inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$144$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$144$label_3_true#1, inline$IoGetCurrentIrpStackLocation$144$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$144$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$144$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$144$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$144$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$144$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$144$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$144$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$144$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$144$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$144$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$144$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$144$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$144$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$144$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$144$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$144$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$144$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$144$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$144$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$144$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$144$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$144$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$144$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon30_Then#1, inline$BDLDevicePowerIoCompletion$28$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_13#1:
+ inline$BDLDevicePowerIoCompletion$28$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_17#1:
+ goto inline$BDLGetDebugLevel$741$Entry#1;
+
+ inline$BDLGetDebugLevel$741$Entry#1:
+ goto inline$BDLGetDebugLevel$741$start#1;
+
+ inline$BDLGetDebugLevel$741$start#1:
+ goto inline$BDLGetDebugLevel$741$label_3#1;
+
+ inline$BDLGetDebugLevel$741$label_3#1:
+ havoc inline$BDLGetDebugLevel$741$myNondetVar_0;
+ inline$BDLGetDebugLevel$741$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$741$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$741$label_1#1;
+
+ inline$BDLGetDebugLevel$741$label_1#1:
+ goto inline$BDLGetDebugLevel$741$Return#1;
+
+ inline$BDLGetDebugLevel$741$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$741$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon31_Then#1, inline$BDLDevicePowerIoCompletion$28$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_20_true#1, inline$BDLDevicePowerIoCompletion$28$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_21#1:
+ goto inline$BDLGetDebugLevel$742$Entry#1;
+
+ inline$BDLGetDebugLevel$742$Entry#1:
+ goto inline$BDLGetDebugLevel$742$start#1;
+
+ inline$BDLGetDebugLevel$742$start#1:
+ goto inline$BDLGetDebugLevel$742$label_3#1;
+
+ inline$BDLGetDebugLevel$742$label_3#1:
+ havoc inline$BDLGetDebugLevel$742$myNondetVar_0;
+ inline$BDLGetDebugLevel$742$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$742$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$742$label_1#1;
+
+ inline$BDLGetDebugLevel$742$label_1#1:
+ goto inline$BDLGetDebugLevel$742$Return#1;
+
+ inline$BDLGetDebugLevel$742$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$742$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon32_Then#1, inline$BDLDevicePowerIoCompletion$28$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_30_true#1, inline$BDLDevicePowerIoCompletion$28$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_31#1:
+ goto inline$BDLGetDebugLevel$743$Entry#1;
+
+ inline$BDLGetDebugLevel$743$Entry#1:
+ goto inline$BDLGetDebugLevel$743$start#1;
+
+ inline$BDLGetDebugLevel$743$start#1:
+ goto inline$BDLGetDebugLevel$743$label_3#1;
+
+ inline$BDLGetDebugLevel$743$label_3#1:
+ havoc inline$BDLGetDebugLevel$743$myNondetVar_0;
+ inline$BDLGetDebugLevel$743$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$743$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$743$label_1#1;
+
+ inline$BDLGetDebugLevel$743$label_1#1:
+ goto inline$BDLGetDebugLevel$743$Return#1;
+
+ inline$BDLGetDebugLevel$743$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$743$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon33_Then#1, inline$BDLDevicePowerIoCompletion$28$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_40_true#1, inline$BDLDevicePowerIoCompletion$28$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_41_true#1, inline$BDLDevicePowerIoCompletion$28$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$28$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$28$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_44_true#1, inline$BDLDevicePowerIoCompletion$28$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_45_true#1, inline$BDLDevicePowerIoCompletion$28$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$28$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$28$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$28$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_54#1:
+ inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$28$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_55_true#1, inline$BDLDevicePowerIoCompletion$28$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$28$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$28$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$28$anon34_Then#1, inline$BDLDevicePowerIoCompletion$28$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_59#1:
+ goto inline$BDLGetDebugLevel$744$Entry#1;
+
+ inline$BDLGetDebugLevel$744$Entry#1:
+ goto inline$BDLGetDebugLevel$744$start#1;
+
+ inline$BDLGetDebugLevel$744$start#1:
+ goto inline$BDLGetDebugLevel$744$label_3#1;
+
+ inline$BDLGetDebugLevel$744$label_3#1:
+ havoc inline$BDLGetDebugLevel$744$myNondetVar_0;
+ inline$BDLGetDebugLevel$744$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$744$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$744$label_1#1;
+
+ inline$BDLGetDebugLevel$744$label_1#1:
+ goto inline$BDLGetDebugLevel$744$Return#1;
+
+ inline$BDLGetDebugLevel$744$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$744$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon35_Then#1, inline$BDLDevicePowerIoCompletion$28$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_62_true#1, inline$BDLDevicePowerIoCompletion$28$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_63#1:
+ goto inline$BDLGetDebugLevel$745$Entry#1;
+
+ inline$BDLGetDebugLevel$745$Entry#1:
+ goto inline$BDLGetDebugLevel$745$start#1;
+
+ inline$BDLGetDebugLevel$745$start#1:
+ goto inline$BDLGetDebugLevel$745$label_3#1;
+
+ inline$BDLGetDebugLevel$745$label_3#1:
+ havoc inline$BDLGetDebugLevel$745$myNondetVar_0;
+ inline$BDLGetDebugLevel$745$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$745$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$745$label_1#1;
+
+ inline$BDLGetDebugLevel$745$label_1#1:
+ goto inline$BDLGetDebugLevel$745$Return#1;
+
+ inline$BDLGetDebugLevel$745$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$745$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon36_Then#1, inline$BDLDevicePowerIoCompletion$28$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_72_true#1, inline$BDLDevicePowerIoCompletion$28$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_73#1:
+ goto inline$BDLGetDebugLevel$746$Entry#1;
+
+ inline$BDLGetDebugLevel$746$Entry#1:
+ goto inline$BDLGetDebugLevel$746$start#1;
+
+ inline$BDLGetDebugLevel$746$start#1:
+ goto inline$BDLGetDebugLevel$746$label_3#1;
+
+ inline$BDLGetDebugLevel$746$label_3#1:
+ havoc inline$BDLGetDebugLevel$746$myNondetVar_0;
+ inline$BDLGetDebugLevel$746$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$746$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$746$label_1#1;
+
+ inline$BDLGetDebugLevel$746$label_1#1:
+ goto inline$BDLGetDebugLevel$746$Return#1;
+
+ inline$BDLGetDebugLevel$746$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$746$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon37_Then#1, inline$BDLDevicePowerIoCompletion$28$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_82_true#1, inline$BDLDevicePowerIoCompletion$28$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$28$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$28$anon38_Then#1, inline$BDLDevicePowerIoCompletion$28$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$28$anon39_Then#1, inline$BDLDevicePowerIoCompletion$28$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_92#1:
+ goto inline$storm_IoCompleteRequest$58$Entry#1;
+
+ inline$storm_IoCompleteRequest$58$Entry#1:
+ inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$28$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$58$start#1;
+
+ inline$storm_IoCompleteRequest$58$start#1:
+ inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$58$label_3#1;
+
+ inline$storm_IoCompleteRequest$58$label_3#1:
+ call inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$58$label_6#1;
+
+ inline$storm_IoCompleteRequest$58$label_6#1:
+ goto inline$storm_IoCompleteRequest$58$label_6_true#1, inline$storm_IoCompleteRequest$58$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$58$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$58$label_7#1;
+
+ inline$storm_IoCompleteRequest$58$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$58$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$58$label_8#1;
+
+ inline$storm_IoCompleteRequest$58$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$58$anon3_Then#1, inline$storm_IoCompleteRequest$58$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$58$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$58$anon1#1;
+
+ inline$storm_IoCompleteRequest$58$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$58$label_9#1;
+
+ inline$storm_IoCompleteRequest$58$label_9#1:
+ goto inline$storm_IoCompleteRequest$58$label_9_true#1, inline$storm_IoCompleteRequest$58$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$58$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$58$label_10#1;
+
+ inline$storm_IoCompleteRequest$58$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$58$label_1#1;
+
+ inline$storm_IoCompleteRequest$58$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$58$label_7#1;
+
+ inline$storm_IoCompleteRequest$58$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$58$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$58$label_1#1;
+
+ inline$storm_IoCompleteRequest$58$label_1#1:
+ goto inline$storm_IoCompleteRequest$58$Return#1;
+
+ inline$storm_IoCompleteRequest$58$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$58$Return#1;
+
+ inline$storm_IoCompleteRequest$58$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon40_Then#1, inline$BDLDevicePowerIoCompletion$28$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$28$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$28$anon41_Then#1, inline$BDLDevicePowerIoCompletion$28$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_98#1:
+ goto inline$BDLGetDebugLevel$747$Entry#1;
+
+ inline$BDLGetDebugLevel$747$Entry#1:
+ goto inline$BDLGetDebugLevel$747$start#1;
+
+ inline$BDLGetDebugLevel$747$start#1:
+ goto inline$BDLGetDebugLevel$747$label_3#1;
+
+ inline$BDLGetDebugLevel$747$label_3#1:
+ havoc inline$BDLGetDebugLevel$747$myNondetVar_0;
+ inline$BDLGetDebugLevel$747$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$747$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$747$label_1#1;
+
+ inline$BDLGetDebugLevel$747$label_1#1:
+ goto inline$BDLGetDebugLevel$747$Return#1;
+
+ inline$BDLGetDebugLevel$747$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$747$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon42_Then#1, inline$BDLDevicePowerIoCompletion$28$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_101_true#1, inline$BDLDevicePowerIoCompletion$28$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_102#1:
+ goto inline$BDLGetDebugLevel$748$Entry#1;
+
+ inline$BDLGetDebugLevel$748$Entry#1:
+ goto inline$BDLGetDebugLevel$748$start#1;
+
+ inline$BDLGetDebugLevel$748$start#1:
+ goto inline$BDLGetDebugLevel$748$label_3#1;
+
+ inline$BDLGetDebugLevel$748$label_3#1:
+ havoc inline$BDLGetDebugLevel$748$myNondetVar_0;
+ inline$BDLGetDebugLevel$748$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$748$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$748$label_1#1;
+
+ inline$BDLGetDebugLevel$748$label_1#1:
+ goto inline$BDLGetDebugLevel$748$Return#1;
+
+ inline$BDLGetDebugLevel$748$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$748$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon43_Then#1, inline$BDLDevicePowerIoCompletion$28$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_111_true#1, inline$BDLDevicePowerIoCompletion$28$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$28$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$28$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$28$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_112#1:
+ goto inline$BDLGetDebugLevel$749$Entry#1;
+
+ inline$BDLGetDebugLevel$749$Entry#1:
+ goto inline$BDLGetDebugLevel$749$start#1;
+
+ inline$BDLGetDebugLevel$749$start#1:
+ goto inline$BDLGetDebugLevel$749$label_3#1;
+
+ inline$BDLGetDebugLevel$749$label_3#1:
+ havoc inline$BDLGetDebugLevel$749$myNondetVar_0;
+ inline$BDLGetDebugLevel$749$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$749$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$749$label_1#1;
+
+ inline$BDLGetDebugLevel$749$label_1#1:
+ goto inline$BDLGetDebugLevel$749$Return#1;
+
+ inline$BDLGetDebugLevel$749$Return#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$749$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$28$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$28$anon44_Then#1, inline$BDLDevicePowerIoCompletion$28$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_121_true#1, inline$BDLDevicePowerIoCompletion$28$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$28$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$28$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$28$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_122#1:
+ inline$BDLDevicePowerIoCompletion$28$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$28$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$28$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$28$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$28$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$28$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$28$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$28$Return#1:
+ inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$28$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$28$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$28$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$28$anon13_Then#1, inline$CallCompletionRoutine$28$anon13_Else#1;
+
+ inline$CallCompletionRoutine$28$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$28$anon7#1;
+
+ inline$CallCompletionRoutine$28$anon7#1:
+ goto inline$CallCompletionRoutine$28$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$28$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$28$Return#1;
+
+ inline$CallCompletionRoutine$28$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$28$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$28$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$28$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$28$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$28$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$start#1:
+ inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$28$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$28$label_3_true#1, inline$BDLCallDriverCompletionRoutine$28$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$28$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$28$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$28$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$28$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$28$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_6#1:
+ goto inline$storm_KeSetEvent$32$Entry#1;
+
+ inline$storm_KeSetEvent$32$Entry#1:
+ inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$28$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$32$start#1;
+
+ inline$storm_KeSetEvent$32$start#1:
+ inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$32$label_3#1;
+
+ inline$storm_KeSetEvent$32$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$32$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$32$label_1#1;
+
+ inline$storm_KeSetEvent$32$label_1#1:
+ goto inline$storm_KeSetEvent$32$Return#1;
+
+ inline$storm_KeSetEvent$32$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$28$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$28$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$28$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$28$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$28$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$28$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$28$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$28$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$28$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$28$Return#1:
+ inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$28$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$28$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$28$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$28$anon12_Then#1, inline$CallCompletionRoutine$28$anon12_Else#1;
+
+ inline$CallCompletionRoutine$28$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$28$anon5#1;
+
+ inline$CallCompletionRoutine$28$anon5#1:
+ goto inline$CallCompletionRoutine$28$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$28$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$28$label_23#1;
+
+ inline$CallCompletionRoutine$28$label_23#1:
+ inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$28$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$28$label_24#1;
+
+ inline$CallCompletionRoutine$28$label_24#1:
+ goto inline$CallCompletionRoutine$28$label_24_true#1, inline$CallCompletionRoutine$28$label_24_false#1;
+
+ inline$CallCompletionRoutine$28$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$28$label_1#1;
+
+ inline$CallCompletionRoutine$28$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$28$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$28$label_25#1;
+
+ inline$CallCompletionRoutine$28$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$28$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$28$label_1#1;
+
+ inline$CallCompletionRoutine$28$label_1#1:
+ goto inline$CallCompletionRoutine$28$Return#1;
+
+ inline$CallCompletionRoutine$28$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$28$Return#1;
+
+ inline$CallCompletionRoutine$28$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$28$Return#1;
+
+ inline$CallCompletionRoutine$28$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$28$Return#1;
+
+ inline$CallCompletionRoutine$28$Return#1:
+ goto inline$storm_IoCallDriver$14$label_33$1#1;
+
+ inline$storm_IoCallDriver$14$label_33$1#1:
+ goto inline$storm_IoCallDriver$14$anon14_Then#1, inline$storm_IoCallDriver$14$anon14_Else#1;
+
+ inline$storm_IoCallDriver$14$anon14_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$14$anon8#1;
+
+ inline$storm_IoCallDriver$14$anon8#1:
+ goto inline$storm_IoCallDriver$14$label_36#1;
+
+ inline$storm_IoCallDriver$14$anon14_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$14$Return#1;
+
+ inline$storm_IoCallDriver$14$label_27_case_1#1:
+ assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ == 0;
+ goto inline$storm_IoCallDriver$14$label_29#1;
+
+ inline$storm_IoCallDriver$14$label_29#1:
+ inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8 := 0;
+ goto inline$storm_IoCallDriver$14$label_37#1;
+
+ inline$storm_IoCallDriver$14$label_37#1:
+ goto inline$storm_IoCallDriver$14$label_38#1;
+
+ inline$storm_IoCallDriver$14$label_38#1:
+ goto inline$storm_IoCallDriver$14$label_39#1;
+
+ inline$storm_IoCallDriver$14$label_39#1:
+ goto inline$CallCompletionRoutine$29$Entry#1;
+
+ inline$CallCompletionRoutine$29$Entry#1:
+ inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4_.1 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
+ goto inline$CallCompletionRoutine$29$start#1;
+
+ inline$CallCompletionRoutine$29$start#1:
+ inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$29$label_3#1;
+
+ inline$CallCompletionRoutine$29$label_3#1:
+ goto inline$CallCompletionRoutine$29$label_4#1;
+
+ inline$CallCompletionRoutine$29$label_4#1:
+ goto inline$CallCompletionRoutine$29$label_5#1;
+
+ inline$CallCompletionRoutine$29$label_5#1:
+ goto inline$CallCompletionRoutine$29$label_6#1;
+
+ inline$CallCompletionRoutine$29$label_6#1:
+ goto inline$CallCompletionRoutine$29$label_7#1;
+
+ inline$CallCompletionRoutine$29$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$146$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$146$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$start#1:
+ inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$146$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$146$label_3_true#1, inline$IoGetCurrentIrpStackLocation$146$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$146$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$146$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$146$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$146$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$146$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$146$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$146$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$146$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$146$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$146$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$146$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$146$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$146$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$146$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$146$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$146$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$146$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$146$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$146$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$146$Return#1:
+ goto inline$CallCompletionRoutine$29$label_7$1#1;
+
+ inline$CallCompletionRoutine$29$label_7$1#1:
+ goto inline$CallCompletionRoutine$29$anon10_Then#1, inline$CallCompletionRoutine$29$anon10_Else#1;
+
+ inline$CallCompletionRoutine$29$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$29$anon1#1;
+
+ inline$CallCompletionRoutine$29$anon1#1:
+ goto inline$CallCompletionRoutine$29$label_10#1;
+
+ inline$CallCompletionRoutine$29$label_10#1:
+ goto inline$CallCompletionRoutine$29$label_11#1;
+
+ inline$CallCompletionRoutine$29$label_11#1:
+ havoc inline$CallCompletionRoutine$29$myNondetVar_0;
+ inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$myNondetVar_0;
+ goto inline$CallCompletionRoutine$29$label_12#1;
+
+ inline$CallCompletionRoutine$29$label_12#1:
+ havoc inline$CallCompletionRoutine$29$myNondetVar_0;
+ inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$myNondetVar_0;
+ goto inline$CallCompletionRoutine$29$label_13#1;
+
+ inline$CallCompletionRoutine$29$label_13#1:
+ havoc inline$CallCompletionRoutine$29$myNondetVar_0;
+ goto inline$CallCompletionRoutine$29$label_14#1;
+
+ inline$CallCompletionRoutine$29$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$147$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$147$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$start#1:
+ inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$147$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$147$label_3_true#1, inline$IoGetCurrentIrpStackLocation$147$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$147$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$147$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$147$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$147$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$147$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$147$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$147$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$147$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$147$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$147$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$147$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$147$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$147$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$147$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$147$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$147$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$147$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$147$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$147$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$147$Return#1:
+ goto inline$CallCompletionRoutine$29$label_14$1#1;
+
+ inline$CallCompletionRoutine$29$label_14$1#1:
+ goto inline$CallCompletionRoutine$29$anon11_Then#1, inline$CallCompletionRoutine$29$anon11_Else#1;
+
+ inline$CallCompletionRoutine$29$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$29$anon3#1;
+
+ inline$CallCompletionRoutine$29$anon3#1:
+ goto inline$CallCompletionRoutine$29$label_17#1;
+
+ inline$CallCompletionRoutine$29$label_17#1:
+ goto inline$CallCompletionRoutine$29$label_18#1;
+
+ inline$CallCompletionRoutine$29$label_18#1:
+ goto inline$CallCompletionRoutine$29$label_18_true#1, inline$CallCompletionRoutine$29$label_18_false#1;
+
+ inline$CallCompletionRoutine$29$label_18_false#1:
+ assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$29$label_1#1;
+
+ inline$CallCompletionRoutine$29$label_18_true#1:
+ assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$29$label_19#1;
+
+ inline$CallCompletionRoutine$29$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$29$label_20#1;
+
+ inline$CallCompletionRoutine$29$label_20#1:
+ goto inline$CallCompletionRoutine$29$label_20_icall_1#1, inline$CallCompletionRoutine$29$label_20_icall_2#1, inline$CallCompletionRoutine$29$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$29$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$29$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$29$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$29$Entry#1:
+ inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$29$start#1;
+
+ inline$BDLSystemPowerIoCompletion$29$start#1:
+ call inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$29$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_4#1:
+ inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_6#1:
+ inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$29$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$29$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$149$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$149$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$start#1:
+ inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$149$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$149$label_3_true#1, inline$IoGetCurrentIrpStackLocation$149$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$149$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$149$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$149$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$149$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$149$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$149$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$149$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$149$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$149$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$149$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$149$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$149$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$149$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$149$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$149$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$149$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$149$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$149$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$149$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$149$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon36_Then#1, inline$BDLSystemPowerIoCompletion$29$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_15#1:
+ goto inline$BDLGetDebugLevel$771$Entry#1;
+
+ inline$BDLGetDebugLevel$771$Entry#1:
+ goto inline$BDLGetDebugLevel$771$start#1;
+
+ inline$BDLGetDebugLevel$771$start#1:
+ goto inline$BDLGetDebugLevel$771$label_3#1;
+
+ inline$BDLGetDebugLevel$771$label_3#1:
+ havoc inline$BDLGetDebugLevel$771$myNondetVar_0;
+ inline$BDLGetDebugLevel$771$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$771$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$771$label_1#1;
+
+ inline$BDLGetDebugLevel$771$label_1#1:
+ goto inline$BDLGetDebugLevel$771$Return#1;
+
+ inline$BDLGetDebugLevel$771$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$771$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon37_Then#1, inline$BDLSystemPowerIoCompletion$29$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_18_true#1, inline$BDLSystemPowerIoCompletion$29$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_19#1:
+ goto inline$BDLGetDebugLevel$772$Entry#1;
+
+ inline$BDLGetDebugLevel$772$Entry#1:
+ goto inline$BDLGetDebugLevel$772$start#1;
+
+ inline$BDLGetDebugLevel$772$start#1:
+ goto inline$BDLGetDebugLevel$772$label_3#1;
+
+ inline$BDLGetDebugLevel$772$label_3#1:
+ havoc inline$BDLGetDebugLevel$772$myNondetVar_0;
+ inline$BDLGetDebugLevel$772$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$772$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$772$label_1#1;
+
+ inline$BDLGetDebugLevel$772$label_1#1:
+ goto inline$BDLGetDebugLevel$772$Return#1;
+
+ inline$BDLGetDebugLevel$772$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$772$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon38_Then#1, inline$BDLSystemPowerIoCompletion$29$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_28_true#1, inline$BDLSystemPowerIoCompletion$29$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_29#1:
+ goto inline$BDLGetDebugLevel$773$Entry#1;
+
+ inline$BDLGetDebugLevel$773$Entry#1:
+ goto inline$BDLGetDebugLevel$773$start#1;
+
+ inline$BDLGetDebugLevel$773$start#1:
+ goto inline$BDLGetDebugLevel$773$label_3#1;
+
+ inline$BDLGetDebugLevel$773$label_3#1:
+ havoc inline$BDLGetDebugLevel$773$myNondetVar_0;
+ inline$BDLGetDebugLevel$773$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$773$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$773$label_1#1;
+
+ inline$BDLGetDebugLevel$773$label_1#1:
+ goto inline$BDLGetDebugLevel$773$Return#1;
+
+ inline$BDLGetDebugLevel$773$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$773$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon39_Then#1, inline$BDLSystemPowerIoCompletion$29$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_38_true#1, inline$BDLSystemPowerIoCompletion$29$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_39_true#1, inline$BDLSystemPowerIoCompletion$29$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$29$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$29$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$29$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$29$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$29$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_106_true#1, inline$BDLSystemPowerIoCompletion$29$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$29$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$29$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$29$myNondetVar_0, inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$29$anon50_Then#1, inline$BDLSystemPowerIoCompletion$29$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_112#1:
+ inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_113_true#1, inline$BDLSystemPowerIoCompletion$29$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$29$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_117#1:
+ goto inline$BDLGetDebugLevel$780$Entry#1;
+
+ inline$BDLGetDebugLevel$780$Entry#1:
+ goto inline$BDLGetDebugLevel$780$start#1;
+
+ inline$BDLGetDebugLevel$780$start#1:
+ goto inline$BDLGetDebugLevel$780$label_3#1;
+
+ inline$BDLGetDebugLevel$780$label_3#1:
+ havoc inline$BDLGetDebugLevel$780$myNondetVar_0;
+ inline$BDLGetDebugLevel$780$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$780$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$780$label_1#1;
+
+ inline$BDLGetDebugLevel$780$label_1#1:
+ goto inline$BDLGetDebugLevel$780$Return#1;
+
+ inline$BDLGetDebugLevel$780$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$780$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon51_Then#1, inline$BDLSystemPowerIoCompletion$29$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_120_true#1, inline$BDLSystemPowerIoCompletion$29$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_121#1:
+ goto inline$BDLGetDebugLevel$781$Entry#1;
+
+ inline$BDLGetDebugLevel$781$Entry#1:
+ goto inline$BDLGetDebugLevel$781$start#1;
+
+ inline$BDLGetDebugLevel$781$start#1:
+ goto inline$BDLGetDebugLevel$781$label_3#1;
+
+ inline$BDLGetDebugLevel$781$label_3#1:
+ havoc inline$BDLGetDebugLevel$781$myNondetVar_0;
+ inline$BDLGetDebugLevel$781$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$781$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$781$label_1#1;
+
+ inline$BDLGetDebugLevel$781$label_1#1:
+ goto inline$BDLGetDebugLevel$781$Return#1;
+
+ inline$BDLGetDebugLevel$781$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$781$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon52_Then#1, inline$BDLSystemPowerIoCompletion$29$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_130_true#1, inline$BDLSystemPowerIoCompletion$29$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_131#1:
+ goto inline$BDLGetDebugLevel$782$Entry#1;
+
+ inline$BDLGetDebugLevel$782$Entry#1:
+ goto inline$BDLGetDebugLevel$782$start#1;
+
+ inline$BDLGetDebugLevel$782$start#1:
+ goto inline$BDLGetDebugLevel$782$label_3#1;
+
+ inline$BDLGetDebugLevel$782$label_3#1:
+ havoc inline$BDLGetDebugLevel$782$myNondetVar_0;
+ inline$BDLGetDebugLevel$782$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$782$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$782$label_1#1;
+
+ inline$BDLGetDebugLevel$782$label_1#1:
+ goto inline$BDLGetDebugLevel$782$Return#1;
+
+ inline$BDLGetDebugLevel$782$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$782$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon53_Then#1, inline$BDLSystemPowerIoCompletion$29$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_140_true#1, inline$BDLSystemPowerIoCompletion$29$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$29$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_115#1:
+ inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$29$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$29$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$29$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_43#1:
+ goto inline$BDLGetDebugLevel$774$Entry#1;
+
+ inline$BDLGetDebugLevel$774$Entry#1:
+ goto inline$BDLGetDebugLevel$774$start#1;
+
+ inline$BDLGetDebugLevel$774$start#1:
+ goto inline$BDLGetDebugLevel$774$label_3#1;
+
+ inline$BDLGetDebugLevel$774$label_3#1:
+ havoc inline$BDLGetDebugLevel$774$myNondetVar_0;
+ inline$BDLGetDebugLevel$774$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$774$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$774$label_1#1;
+
+ inline$BDLGetDebugLevel$774$label_1#1:
+ goto inline$BDLGetDebugLevel$774$Return#1;
+
+ inline$BDLGetDebugLevel$774$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$774$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon40_Then#1, inline$BDLSystemPowerIoCompletion$29$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_46_true#1, inline$BDLSystemPowerIoCompletion$29$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_47#1:
+ goto inline$BDLGetDebugLevel$775$Entry#1;
+
+ inline$BDLGetDebugLevel$775$Entry#1:
+ goto inline$BDLGetDebugLevel$775$start#1;
+
+ inline$BDLGetDebugLevel$775$start#1:
+ goto inline$BDLGetDebugLevel$775$label_3#1;
+
+ inline$BDLGetDebugLevel$775$label_3#1:
+ havoc inline$BDLGetDebugLevel$775$myNondetVar_0;
+ inline$BDLGetDebugLevel$775$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$775$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$775$label_1#1;
+
+ inline$BDLGetDebugLevel$775$label_1#1:
+ goto inline$BDLGetDebugLevel$775$Return#1;
+
+ inline$BDLGetDebugLevel$775$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$775$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon41_Then#1, inline$BDLSystemPowerIoCompletion$29$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_56_true#1, inline$BDLSystemPowerIoCompletion$29$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_57#1:
+ goto inline$BDLGetDebugLevel$776$Entry#1;
+
+ inline$BDLGetDebugLevel$776$Entry#1:
+ goto inline$BDLGetDebugLevel$776$start#1;
+
+ inline$BDLGetDebugLevel$776$start#1:
+ goto inline$BDLGetDebugLevel$776$label_3#1;
+
+ inline$BDLGetDebugLevel$776$label_3#1:
+ havoc inline$BDLGetDebugLevel$776$myNondetVar_0;
+ inline$BDLGetDebugLevel$776$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$776$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$776$label_1#1;
+
+ inline$BDLGetDebugLevel$776$label_1#1:
+ goto inline$BDLGetDebugLevel$776$Return#1;
+
+ inline$BDLGetDebugLevel$776$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$776$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon42_Then#1, inline$BDLSystemPowerIoCompletion$29$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_66_true#1, inline$BDLSystemPowerIoCompletion$29$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$29$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$29$anon43_Then#1, inline$BDLSystemPowerIoCompletion$29$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$29$anon44_Then#1, inline$BDLSystemPowerIoCompletion$29$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_74#1:
+ goto inline$storm_IoCompleteRequest$61$Entry#1;
+
+ inline$storm_IoCompleteRequest$61$Entry#1:
+ inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$29$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$61$start#1;
+
+ inline$storm_IoCompleteRequest$61$start#1:
+ inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$61$label_3#1;
+
+ inline$storm_IoCompleteRequest$61$label_3#1:
+ call inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$61$label_6#1;
+
+ inline$storm_IoCompleteRequest$61$label_6#1:
+ goto inline$storm_IoCompleteRequest$61$label_6_true#1, inline$storm_IoCompleteRequest$61$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$61$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$61$label_7#1;
+
+ inline$storm_IoCompleteRequest$61$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$61$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$61$label_8#1;
+
+ inline$storm_IoCompleteRequest$61$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$61$anon3_Then#1, inline$storm_IoCompleteRequest$61$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$61$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$61$anon1#1;
+
+ inline$storm_IoCompleteRequest$61$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$61$label_9#1;
+
+ inline$storm_IoCompleteRequest$61$label_9#1:
+ goto inline$storm_IoCompleteRequest$61$label_9_true#1, inline$storm_IoCompleteRequest$61$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$61$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$61$label_10#1;
+
+ inline$storm_IoCompleteRequest$61$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$61$label_1#1;
+
+ inline$storm_IoCompleteRequest$61$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$61$label_7#1;
+
+ inline$storm_IoCompleteRequest$61$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$61$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$61$label_1#1;
+
+ inline$storm_IoCompleteRequest$61$label_1#1:
+ goto inline$storm_IoCompleteRequest$61$Return#1;
+
+ inline$storm_IoCompleteRequest$61$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$61$Return#1;
+
+ inline$storm_IoCompleteRequest$61$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon45_Then#1, inline$BDLSystemPowerIoCompletion$29$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$29$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$29$anon46_Then#1, inline$BDLSystemPowerIoCompletion$29$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_80#1:
+ goto inline$BDLGetDebugLevel$777$Entry#1;
+
+ inline$BDLGetDebugLevel$777$Entry#1:
+ goto inline$BDLGetDebugLevel$777$start#1;
+
+ inline$BDLGetDebugLevel$777$start#1:
+ goto inline$BDLGetDebugLevel$777$label_3#1;
+
+ inline$BDLGetDebugLevel$777$label_3#1:
+ havoc inline$BDLGetDebugLevel$777$myNondetVar_0;
+ inline$BDLGetDebugLevel$777$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$777$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$777$label_1#1;
+
+ inline$BDLGetDebugLevel$777$label_1#1:
+ goto inline$BDLGetDebugLevel$777$Return#1;
+
+ inline$BDLGetDebugLevel$777$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$777$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon47_Then#1, inline$BDLSystemPowerIoCompletion$29$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_83_true#1, inline$BDLSystemPowerIoCompletion$29$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_84#1:
+ goto inline$BDLGetDebugLevel$778$Entry#1;
+
+ inline$BDLGetDebugLevel$778$Entry#1:
+ goto inline$BDLGetDebugLevel$778$start#1;
+
+ inline$BDLGetDebugLevel$778$start#1:
+ goto inline$BDLGetDebugLevel$778$label_3#1;
+
+ inline$BDLGetDebugLevel$778$label_3#1:
+ havoc inline$BDLGetDebugLevel$778$myNondetVar_0;
+ inline$BDLGetDebugLevel$778$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$778$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$778$label_1#1;
+
+ inline$BDLGetDebugLevel$778$label_1#1:
+ goto inline$BDLGetDebugLevel$778$Return#1;
+
+ inline$BDLGetDebugLevel$778$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$778$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon48_Then#1, inline$BDLSystemPowerIoCompletion$29$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_93_true#1, inline$BDLSystemPowerIoCompletion$29$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$29$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$29$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_94#1:
+ goto inline$BDLGetDebugLevel$779$Entry#1;
+
+ inline$BDLGetDebugLevel$779$Entry#1:
+ goto inline$BDLGetDebugLevel$779$start#1;
+
+ inline$BDLGetDebugLevel$779$start#1:
+ goto inline$BDLGetDebugLevel$779$label_3#1;
+
+ inline$BDLGetDebugLevel$779$label_3#1:
+ havoc inline$BDLGetDebugLevel$779$myNondetVar_0;
+ inline$BDLGetDebugLevel$779$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$779$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$779$label_1#1;
+
+ inline$BDLGetDebugLevel$779$label_1#1:
+ goto inline$BDLGetDebugLevel$779$Return#1;
+
+ inline$BDLGetDebugLevel$779$Return#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$779$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$29$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$29$anon49_Then#1, inline$BDLSystemPowerIoCompletion$29$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_103_true#1, inline$BDLSystemPowerIoCompletion$29$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$29$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$29$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$29$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_104#1:
+ inline$BDLSystemPowerIoCompletion$29$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$29$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$29$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$29$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$29$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$29$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$29$Return#1:
+ inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$29$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$29$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$29$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$29$anon14_Then#1, inline$CallCompletionRoutine$29$anon14_Else#1;
+
+ inline$CallCompletionRoutine$29$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$29$anon9#1;
+
+ inline$CallCompletionRoutine$29$anon9#1:
+ goto inline$CallCompletionRoutine$29$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$29$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$29$Return#1;
+
+ inline$CallCompletionRoutine$29$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$29$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$29$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$29$Entry#1:
+ inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$29$start#1;
+
+ inline$BDLDevicePowerIoCompletion$29$start#1:
+ call inline$BDLDevicePowerIoCompletion$29$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$29$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_4#1:
+ inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_6#1:
+ inline$BDLDevicePowerIoCompletion$29$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$29$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$29$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$148$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$148$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$start#1:
+ inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$148$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$148$label_3_true#1, inline$IoGetCurrentIrpStackLocation$148$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$148$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$148$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$148$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$148$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$148$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$148$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$148$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$148$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$148$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$148$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$148$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$148$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$148$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$148$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$148$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$148$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$148$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$148$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$148$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$148$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$148$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$148$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$148$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon30_Then#1, inline$BDLDevicePowerIoCompletion$29$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_13#1:
+ inline$BDLDevicePowerIoCompletion$29$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_17#1:
+ goto inline$BDLGetDebugLevel$762$Entry#1;
+
+ inline$BDLGetDebugLevel$762$Entry#1:
+ goto inline$BDLGetDebugLevel$762$start#1;
+
+ inline$BDLGetDebugLevel$762$start#1:
+ goto inline$BDLGetDebugLevel$762$label_3#1;
+
+ inline$BDLGetDebugLevel$762$label_3#1:
+ havoc inline$BDLGetDebugLevel$762$myNondetVar_0;
+ inline$BDLGetDebugLevel$762$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$762$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$762$label_1#1;
+
+ inline$BDLGetDebugLevel$762$label_1#1:
+ goto inline$BDLGetDebugLevel$762$Return#1;
+
+ inline$BDLGetDebugLevel$762$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$762$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon31_Then#1, inline$BDLDevicePowerIoCompletion$29$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_20_true#1, inline$BDLDevicePowerIoCompletion$29$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_21#1:
+ goto inline$BDLGetDebugLevel$763$Entry#1;
+
+ inline$BDLGetDebugLevel$763$Entry#1:
+ goto inline$BDLGetDebugLevel$763$start#1;
+
+ inline$BDLGetDebugLevel$763$start#1:
+ goto inline$BDLGetDebugLevel$763$label_3#1;
+
+ inline$BDLGetDebugLevel$763$label_3#1:
+ havoc inline$BDLGetDebugLevel$763$myNondetVar_0;
+ inline$BDLGetDebugLevel$763$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$763$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$763$label_1#1;
+
+ inline$BDLGetDebugLevel$763$label_1#1:
+ goto inline$BDLGetDebugLevel$763$Return#1;
+
+ inline$BDLGetDebugLevel$763$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$763$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon32_Then#1, inline$BDLDevicePowerIoCompletion$29$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_30_true#1, inline$BDLDevicePowerIoCompletion$29$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_31#1:
+ goto inline$BDLGetDebugLevel$764$Entry#1;
+
+ inline$BDLGetDebugLevel$764$Entry#1:
+ goto inline$BDLGetDebugLevel$764$start#1;
+
+ inline$BDLGetDebugLevel$764$start#1:
+ goto inline$BDLGetDebugLevel$764$label_3#1;
+
+ inline$BDLGetDebugLevel$764$label_3#1:
+ havoc inline$BDLGetDebugLevel$764$myNondetVar_0;
+ inline$BDLGetDebugLevel$764$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$764$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$764$label_1#1;
+
+ inline$BDLGetDebugLevel$764$label_1#1:
+ goto inline$BDLGetDebugLevel$764$Return#1;
+
+ inline$BDLGetDebugLevel$764$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$764$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon33_Then#1, inline$BDLDevicePowerIoCompletion$29$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_40_true#1, inline$BDLDevicePowerIoCompletion$29$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_41_true#1, inline$BDLDevicePowerIoCompletion$29$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$29$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$29$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_44_true#1, inline$BDLDevicePowerIoCompletion$29$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_45_true#1, inline$BDLDevicePowerIoCompletion$29$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$29$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$29$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$29$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_54#1:
+ inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$29$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_55_true#1, inline$BDLDevicePowerIoCompletion$29$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$29$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$29$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$29$anon34_Then#1, inline$BDLDevicePowerIoCompletion$29$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_59#1:
+ goto inline$BDLGetDebugLevel$765$Entry#1;
+
+ inline$BDLGetDebugLevel$765$Entry#1:
+ goto inline$BDLGetDebugLevel$765$start#1;
+
+ inline$BDLGetDebugLevel$765$start#1:
+ goto inline$BDLGetDebugLevel$765$label_3#1;
+
+ inline$BDLGetDebugLevel$765$label_3#1:
+ havoc inline$BDLGetDebugLevel$765$myNondetVar_0;
+ inline$BDLGetDebugLevel$765$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$765$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$765$label_1#1;
+
+ inline$BDLGetDebugLevel$765$label_1#1:
+ goto inline$BDLGetDebugLevel$765$Return#1;
+
+ inline$BDLGetDebugLevel$765$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$765$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon35_Then#1, inline$BDLDevicePowerIoCompletion$29$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_62_true#1, inline$BDLDevicePowerIoCompletion$29$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_63#1:
+ goto inline$BDLGetDebugLevel$766$Entry#1;
+
+ inline$BDLGetDebugLevel$766$Entry#1:
+ goto inline$BDLGetDebugLevel$766$start#1;
+
+ inline$BDLGetDebugLevel$766$start#1:
+ goto inline$BDLGetDebugLevel$766$label_3#1;
+
+ inline$BDLGetDebugLevel$766$label_3#1:
+ havoc inline$BDLGetDebugLevel$766$myNondetVar_0;
+ inline$BDLGetDebugLevel$766$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$766$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$766$label_1#1;
+
+ inline$BDLGetDebugLevel$766$label_1#1:
+ goto inline$BDLGetDebugLevel$766$Return#1;
+
+ inline$BDLGetDebugLevel$766$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$766$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon36_Then#1, inline$BDLDevicePowerIoCompletion$29$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_72_true#1, inline$BDLDevicePowerIoCompletion$29$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_73#1:
+ goto inline$BDLGetDebugLevel$767$Entry#1;
+
+ inline$BDLGetDebugLevel$767$Entry#1:
+ goto inline$BDLGetDebugLevel$767$start#1;
+
+ inline$BDLGetDebugLevel$767$start#1:
+ goto inline$BDLGetDebugLevel$767$label_3#1;
+
+ inline$BDLGetDebugLevel$767$label_3#1:
+ havoc inline$BDLGetDebugLevel$767$myNondetVar_0;
+ inline$BDLGetDebugLevel$767$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$767$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$767$label_1#1;
+
+ inline$BDLGetDebugLevel$767$label_1#1:
+ goto inline$BDLGetDebugLevel$767$Return#1;
+
+ inline$BDLGetDebugLevel$767$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$767$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon37_Then#1, inline$BDLDevicePowerIoCompletion$29$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_82_true#1, inline$BDLDevicePowerIoCompletion$29$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$29$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$29$anon38_Then#1, inline$BDLDevicePowerIoCompletion$29$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$29$anon39_Then#1, inline$BDLDevicePowerIoCompletion$29$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_92#1:
+ goto inline$storm_IoCompleteRequest$60$Entry#1;
+
+ inline$storm_IoCompleteRequest$60$Entry#1:
+ inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$29$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$60$start#1;
+
+ inline$storm_IoCompleteRequest$60$start#1:
+ inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$60$label_3#1;
+
+ inline$storm_IoCompleteRequest$60$label_3#1:
+ call inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$60$label_6#1;
+
+ inline$storm_IoCompleteRequest$60$label_6#1:
+ goto inline$storm_IoCompleteRequest$60$label_6_true#1, inline$storm_IoCompleteRequest$60$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$60$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$60$label_7#1;
+
+ inline$storm_IoCompleteRequest$60$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$60$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$60$label_8#1;
+
+ inline$storm_IoCompleteRequest$60$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$60$anon3_Then#1, inline$storm_IoCompleteRequest$60$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$60$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$60$anon1#1;
+
+ inline$storm_IoCompleteRequest$60$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$60$label_9#1;
+
+ inline$storm_IoCompleteRequest$60$label_9#1:
+ goto inline$storm_IoCompleteRequest$60$label_9_true#1, inline$storm_IoCompleteRequest$60$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$60$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$60$label_10#1;
+
+ inline$storm_IoCompleteRequest$60$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$60$label_1#1;
+
+ inline$storm_IoCompleteRequest$60$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$60$label_7#1;
+
+ inline$storm_IoCompleteRequest$60$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$60$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$60$label_1#1;
+
+ inline$storm_IoCompleteRequest$60$label_1#1:
+ goto inline$storm_IoCompleteRequest$60$Return#1;
+
+ inline$storm_IoCompleteRequest$60$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$60$Return#1;
+
+ inline$storm_IoCompleteRequest$60$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon40_Then#1, inline$BDLDevicePowerIoCompletion$29$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$29$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$29$anon41_Then#1, inline$BDLDevicePowerIoCompletion$29$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_98#1:
+ goto inline$BDLGetDebugLevel$768$Entry#1;
+
+ inline$BDLGetDebugLevel$768$Entry#1:
+ goto inline$BDLGetDebugLevel$768$start#1;
+
+ inline$BDLGetDebugLevel$768$start#1:
+ goto inline$BDLGetDebugLevel$768$label_3#1;
+
+ inline$BDLGetDebugLevel$768$label_3#1:
+ havoc inline$BDLGetDebugLevel$768$myNondetVar_0;
+ inline$BDLGetDebugLevel$768$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$768$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$768$label_1#1;
+
+ inline$BDLGetDebugLevel$768$label_1#1:
+ goto inline$BDLGetDebugLevel$768$Return#1;
+
+ inline$BDLGetDebugLevel$768$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$768$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon42_Then#1, inline$BDLDevicePowerIoCompletion$29$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_101_true#1, inline$BDLDevicePowerIoCompletion$29$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_102#1:
+ goto inline$BDLGetDebugLevel$769$Entry#1;
+
+ inline$BDLGetDebugLevel$769$Entry#1:
+ goto inline$BDLGetDebugLevel$769$start#1;
+
+ inline$BDLGetDebugLevel$769$start#1:
+ goto inline$BDLGetDebugLevel$769$label_3#1;
+
+ inline$BDLGetDebugLevel$769$label_3#1:
+ havoc inline$BDLGetDebugLevel$769$myNondetVar_0;
+ inline$BDLGetDebugLevel$769$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$769$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$769$label_1#1;
+
+ inline$BDLGetDebugLevel$769$label_1#1:
+ goto inline$BDLGetDebugLevel$769$Return#1;
+
+ inline$BDLGetDebugLevel$769$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$769$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon43_Then#1, inline$BDLDevicePowerIoCompletion$29$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_111_true#1, inline$BDLDevicePowerIoCompletion$29$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$29$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$29$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$29$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_112#1:
+ goto inline$BDLGetDebugLevel$770$Entry#1;
+
+ inline$BDLGetDebugLevel$770$Entry#1:
+ goto inline$BDLGetDebugLevel$770$start#1;
+
+ inline$BDLGetDebugLevel$770$start#1:
+ goto inline$BDLGetDebugLevel$770$label_3#1;
+
+ inline$BDLGetDebugLevel$770$label_3#1:
+ havoc inline$BDLGetDebugLevel$770$myNondetVar_0;
+ inline$BDLGetDebugLevel$770$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$770$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$770$label_1#1;
+
+ inline$BDLGetDebugLevel$770$label_1#1:
+ goto inline$BDLGetDebugLevel$770$Return#1;
+
+ inline$BDLGetDebugLevel$770$Return#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$770$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$29$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$29$anon44_Then#1, inline$BDLDevicePowerIoCompletion$29$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_121_true#1, inline$BDLDevicePowerIoCompletion$29$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$29$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$29$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$29$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_122#1:
+ inline$BDLDevicePowerIoCompletion$29$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$29$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$29$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$29$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$29$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$29$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$29$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$29$Return#1:
+ inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$29$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$29$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$29$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$29$anon13_Then#1, inline$CallCompletionRoutine$29$anon13_Else#1;
+
+ inline$CallCompletionRoutine$29$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$29$anon7#1;
+
+ inline$CallCompletionRoutine$29$anon7#1:
+ goto inline$CallCompletionRoutine$29$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$29$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$29$Return#1;
+
+ inline$CallCompletionRoutine$29$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$29$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$29$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$29$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$29$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$29$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$start#1:
+ inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$29$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$29$label_3_true#1, inline$BDLCallDriverCompletionRoutine$29$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$29$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$29$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$29$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$29$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$29$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_6#1:
+ goto inline$storm_KeSetEvent$33$Entry#1;
+
+ inline$storm_KeSetEvent$33$Entry#1:
+ inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$29$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$33$start#1;
+
+ inline$storm_KeSetEvent$33$start#1:
+ inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$33$label_3#1;
+
+ inline$storm_KeSetEvent$33$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$33$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$33$label_1#1;
+
+ inline$storm_KeSetEvent$33$label_1#1:
+ goto inline$storm_KeSetEvent$33$Return#1;
+
+ inline$storm_KeSetEvent$33$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$29$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$29$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$29$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$29$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$29$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$29$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$29$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$29$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$29$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$29$Return#1:
+ inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$29$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$29$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$29$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$29$anon12_Then#1, inline$CallCompletionRoutine$29$anon12_Else#1;
+
+ inline$CallCompletionRoutine$29$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$29$anon5#1;
+
+ inline$CallCompletionRoutine$29$anon5#1:
+ goto inline$CallCompletionRoutine$29$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$29$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$29$label_23#1;
+
+ inline$CallCompletionRoutine$29$label_23#1:
+ inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$29$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$29$label_24#1;
+
+ inline$CallCompletionRoutine$29$label_24#1:
+ goto inline$CallCompletionRoutine$29$label_24_true#1, inline$CallCompletionRoutine$29$label_24_false#1;
+
+ inline$CallCompletionRoutine$29$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$29$label_1#1;
+
+ inline$CallCompletionRoutine$29$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$29$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$29$label_25#1;
+
+ inline$CallCompletionRoutine$29$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$29$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$29$label_1#1;
+
+ inline$CallCompletionRoutine$29$label_1#1:
+ goto inline$CallCompletionRoutine$29$Return#1;
+
+ inline$CallCompletionRoutine$29$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$29$Return#1;
+
+ inline$CallCompletionRoutine$29$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$29$Return#1;
+
+ inline$CallCompletionRoutine$29$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$29$Return#1;
+
+ inline$CallCompletionRoutine$29$Return#1:
+ goto inline$storm_IoCallDriver$14$label_39$1#1;
+
+ inline$storm_IoCallDriver$14$label_39$1#1:
+ goto inline$storm_IoCallDriver$14$anon15_Then#1, inline$storm_IoCallDriver$14$anon15_Else#1;
+
+ inline$storm_IoCallDriver$14$anon15_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCallDriver$14$anon10#1;
+
+ inline$storm_IoCallDriver$14$anon10#1:
+ goto inline$storm_IoCallDriver$14$label_36#1;
+
+ inline$storm_IoCallDriver$14$anon15_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$14$Return#1;
+
+ inline$storm_IoCallDriver$14$label_27_case_0#1:
+ assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ != 0;
+ assume inline$storm_IoCallDriver$14$$result.storm_nondet$472.22$4$ != 1;
+ goto inline$storm_IoCallDriver$14$label_28#1;
+
+ inline$storm_IoCallDriver$14$label_28#1:
+ inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8 := 259;
+ goto inline$storm_IoCallDriver$14$label_42#1;
+
+ inline$storm_IoCallDriver$14$label_42#1:
+ goto inline$storm_IoCallDriver$14$label_43#1;
+
+ inline$storm_IoCallDriver$14$label_43#1:
+ created_irp_0 := inline$storm_IoCallDriver$14$$Irp$2$458.14$storm_IoCallDriver$8;
+ call contextSwitch();
+ goto inline$storm_IoCallDriver$14$label_36#1;
+
+ inline$storm_IoCallDriver$14$label_36#1:
+ inline$storm_IoCallDriver$14$$result.storm_IoCallDriver$456.0$1$ := inline$storm_IoCallDriver$14$$status$4$462.11$storm_IoCallDriver$8;
+ goto inline$storm_IoCallDriver$14$label_1#1;
+
+ inline$storm_IoCallDriver$14$label_1#1:
+ goto inline$storm_IoCallDriver$14$Return#1;
+
+ inline$storm_IoCallDriver$14$anon13_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$14$Return#1;
+
+ inline$storm_IoCallDriver$14$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$14$Return#1;
+
+ inline$storm_IoCallDriver$14$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCallDriver$14$Return#1;
+
+ inline$storm_IoCallDriver$14$Return#1:
+ inline$BDLPnP$0$$result.storm_IoCallDriver$995.29$47$ := inline$storm_IoCallDriver$14$$result.storm_IoCallDriver$456.0$1$;
+ goto inline$BDLPnP$0$label_181$1#1;
+
+ inline$BDLPnP$0$label_181$1#1:
+ goto inline$BDLPnP$0$anon80_Then#1, inline$BDLPnP$0$anon80_Else#1;
+
+ inline$BDLPnP$0$anon80_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon53#1;
+
+ inline$BDLPnP$0$anon53#1:
+ goto inline$BDLPnP$0$label_184#1;
+
+ inline$BDLPnP$0$label_184#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := inline$BDLPnP$0$$result.storm_IoCallDriver$995.29$47$;
+ goto inline$BDLPnP$0$label_185#1;
+
+ inline$BDLPnP$0$label_185#1:
+ inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8 := 0;
+ goto inline$BDLPnP$0$label_139#1;
+
+ inline$BDLPnP$0$label_139#1:
+ goto inline$BDLPnP$0$label_139_true#1, inline$BDLPnP$0$label_139_false#1;
+
+ inline$BDLPnP$0$label_139_false#1:
+ assume !INT_EQ(inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8, 1);
+ goto inline$BDLPnP$0$label_140#1;
+
+ inline$BDLPnP$0$label_139_true#1:
+ assume INT_EQ(inline$BDLPnP$0$$fCompleteIrp$7$863.36$BDLPnP$8, 1);
+ goto inline$BDLPnP$0$label_141#1;
+
+ inline$BDLPnP$0$label_141#1:
+ goto inline$BDLPnP$0$label_142#1;
+
+ inline$BDLPnP$0$label_142#1:
+ goto inline$storm_IoCompleteRequest$57$Entry#1;
+
+ inline$storm_IoCompleteRequest$57$Entry#1:
+ inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$storm_IoCompleteRequest$57$start#1;
+
+ inline$storm_IoCompleteRequest$57$start#1:
+ inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$57$label_3#1;
+
+ inline$storm_IoCompleteRequest$57$label_3#1:
+ call inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$57$label_6#1;
+
+ inline$storm_IoCompleteRequest$57$label_6#1:
+ goto inline$storm_IoCompleteRequest$57$label_6_true#1, inline$storm_IoCompleteRequest$57$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$57$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$57$label_7#1;
+
+ inline$storm_IoCompleteRequest$57$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$57$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$57$label_8#1;
+
+ inline$storm_IoCompleteRequest$57$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$57$anon3_Then#1, inline$storm_IoCompleteRequest$57$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$57$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$57$anon1#1;
+
+ inline$storm_IoCompleteRequest$57$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$57$label_9#1;
+
+ inline$storm_IoCompleteRequest$57$label_9#1:
+ goto inline$storm_IoCompleteRequest$57$label_9_true#1, inline$storm_IoCompleteRequest$57$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$57$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$57$label_10#1;
+
+ inline$storm_IoCompleteRequest$57$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$57$label_1#1;
+
+ inline$storm_IoCompleteRequest$57$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$57$label_7#1;
+
+ inline$storm_IoCompleteRequest$57$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$57$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$57$label_1#1;
+
+ inline$storm_IoCompleteRequest$57$label_1#1:
+ goto inline$storm_IoCompleteRequest$57$Return#1;
+
+ inline$storm_IoCompleteRequest$57$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$57$Return#1;
+
+ inline$storm_IoCompleteRequest$57$Return#1:
+ goto inline$BDLPnP$0$label_142$1#1;
+
+ inline$BDLPnP$0$label_142$1#1:
+ goto inline$BDLPnP$0$anon75_Then#1, inline$BDLPnP$0$anon75_Else#1;
+
+ inline$BDLPnP$0$anon75_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon43#1;
+
+ inline$BDLPnP$0$anon43#1:
+ goto inline$BDLPnP$0$label_140#1;
+
+ inline$BDLPnP$0$label_140#1:
+ goto inline$BDLPnP$0$label_140_true#1, inline$BDLPnP$0$label_140_false#1;
+
+ inline$BDLPnP$0$label_140_false#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume !INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
+ goto inline$BDLPnP$0$label_84#1;
+
+ inline$BDLPnP$0$label_140_true#1:
+ havoc inline$BDLPnP$0$myNondetVar_0;
+ assume INT_NEQ(inline$BDLPnP$0$myNondetVar_0, 2);
+ goto inline$BDLPnP$0$label_145#1;
+
+ inline$BDLPnP$0$label_145#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLPnP$0$$pBDLExtension$4$860.36$BDLPnP$8), 542142032, 88);
+ goto inline$BDLPnP$0$anon76_Then#1, inline$BDLPnP$0$anon76_Else#1;
+
+ inline$BDLPnP$0$anon76_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon45#1;
+
+ inline$BDLPnP$0$anon45#1:
+ goto inline$BDLPnP$0$label_84#1;
+
+ inline$BDLPnP$0$anon76_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon75_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon80_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon79_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon78_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon77_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon66_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$label_51_true#1:
+ assume inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 != 0;
+ goto inline$BDLPnP$0$label_53#1;
+
+ inline$BDLPnP$0$label_53#1:
+ goto inline$BDLGetDebugLevel$3$Entry#1;
+
+ inline$BDLGetDebugLevel$3$Entry#1:
+ goto inline$BDLGetDebugLevel$3$start#1;
+
+ inline$BDLGetDebugLevel$3$start#1:
+ goto inline$BDLGetDebugLevel$3$label_3#1;
+
+ inline$BDLGetDebugLevel$3$label_3#1:
+ havoc inline$BDLGetDebugLevel$3$myNondetVar_0;
+ inline$BDLGetDebugLevel$3$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$3$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$3$label_1#1;
+
+ inline$BDLGetDebugLevel$3$label_1#1:
+ goto inline$BDLGetDebugLevel$3$Return#1;
+
+ inline$BDLGetDebugLevel$3$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$ := inline$BDLGetDebugLevel$3$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_53$1#1;
+
+ inline$BDLPnP$0$label_53$1#1:
+ goto inline$BDLPnP$0$anon59_Then#1, inline$BDLPnP$0$anon59_Else#1;
+
+ inline$BDLPnP$0$anon59_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon11#1;
+
+ inline$BDLPnP$0$anon11#1:
+ goto inline$BDLPnP$0$label_56#1;
+
+ inline$BDLPnP$0$label_56#1:
+ goto inline$BDLPnP$0$label_56_true#1, inline$BDLPnP$0$label_56_false#1;
+
+ inline$BDLPnP$0$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$) == 0;
+ goto inline$BDLPnP$0$label_57#1;
+
+ inline$BDLPnP$0$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$17$) != 0;
+ goto inline$BDLPnP$0$label_60#1;
+
+ inline$BDLPnP$0$label_60#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_61#1;
+
+ inline$BDLPnP$0$label_61#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_62#1;
+
+ inline$BDLPnP$0$label_62#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_63#1;
+
+ inline$BDLPnP$0$label_63#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$886.0$18$;
+ goto inline$BDLPnP$0$label_57#1;
+
+ inline$BDLPnP$0$label_57#1:
+ goto inline$BDLGetDebugLevel$4$Entry#1;
+
+ inline$BDLGetDebugLevel$4$Entry#1:
+ goto inline$BDLGetDebugLevel$4$start#1;
+
+ inline$BDLGetDebugLevel$4$start#1:
+ goto inline$BDLGetDebugLevel$4$label_3#1;
+
+ inline$BDLGetDebugLevel$4$label_3#1:
+ havoc inline$BDLGetDebugLevel$4$myNondetVar_0;
+ inline$BDLGetDebugLevel$4$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$4$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$4$label_1#1;
+
+ inline$BDLGetDebugLevel$4$label_1#1:
+ goto inline$BDLGetDebugLevel$4$Return#1;
+
+ inline$BDLGetDebugLevel$4$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$ := inline$BDLGetDebugLevel$4$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_57$1#1;
+
+ inline$BDLPnP$0$label_57$1#1:
+ goto inline$BDLPnP$0$anon60_Then#1, inline$BDLPnP$0$anon60_Else#1;
+
+ inline$BDLPnP$0$anon60_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon13#1;
+
+ inline$BDLPnP$0$anon13#1:
+ goto inline$BDLPnP$0$label_66#1;
+
+ inline$BDLPnP$0$label_66#1:
+ goto inline$BDLPnP$0$label_66_true#1, inline$BDLPnP$0$label_66_false#1;
+
+ inline$BDLPnP$0$label_66_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$) == 0;
+ goto inline$BDLPnP$0$label_67#1;
+
+ inline$BDLPnP$0$label_66_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$22$) != 0;
+ goto inline$BDLPnP$0$label_70#1;
+
+ inline$BDLPnP$0$label_70#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_71#1;
+
+ inline$BDLPnP$0$label_71#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_72#1;
+
+ inline$BDLPnP$0$label_72#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_73#1;
+
+ inline$BDLPnP$0$label_73#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$886.0$23$;
+ goto inline$BDLPnP$0$label_67#1;
+
+ inline$BDLPnP$0$label_67#1:
+ goto inline$BDLGetDebugLevel$5$Entry#1;
+
+ inline$BDLGetDebugLevel$5$Entry#1:
+ goto inline$BDLGetDebugLevel$5$start#1;
+
+ inline$BDLGetDebugLevel$5$start#1:
+ goto inline$BDLGetDebugLevel$5$label_3#1;
+
+ inline$BDLGetDebugLevel$5$label_3#1:
+ havoc inline$BDLGetDebugLevel$5$myNondetVar_0;
+ inline$BDLGetDebugLevel$5$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$5$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$5$label_1#1;
+
+ inline$BDLGetDebugLevel$5$label_1#1:
+ goto inline$BDLGetDebugLevel$5$Return#1;
+
+ inline$BDLGetDebugLevel$5$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$ := inline$BDLGetDebugLevel$5$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_67$1#1;
+
+ inline$BDLPnP$0$label_67$1#1:
+ goto inline$BDLPnP$0$anon61_Then#1, inline$BDLPnP$0$anon61_Else#1;
+
+ inline$BDLPnP$0$anon61_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon15#1;
+
+ inline$BDLPnP$0$anon15#1:
+ goto inline$BDLPnP$0$label_76#1;
+
+ inline$BDLPnP$0$label_76#1:
+ goto inline$BDLPnP$0$label_76_true#1, inline$BDLPnP$0$label_76_false#1;
+
+ inline$BDLPnP$0$label_76_false#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$, 4) == 0;
+ goto inline$BDLPnP$0$label_77#1;
+
+ inline$BDLPnP$0$label_76_true#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$886.0$27$, 4) != 0;
+ goto inline$BDLPnP$0$label_78#1;
+
+ inline$BDLPnP$0$label_78#1:
+ goto inline$BDLPnP$0$label_77#1;
+
+ inline$BDLPnP$0$label_77#1:
+ goto inline$BDLPnP$0$label_79#1;
+
+ inline$BDLPnP$0$label_79#1:
+ goto inline$BDLPnP$0$label_80#1;
+
+ inline$BDLPnP$0$label_80#1:
+ goto inline$storm_IoCompleteRequest$0$Entry#1;
+
+ inline$storm_IoCompleteRequest$0$Entry#1:
+ inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLPnP$0$$pIrp$2$856.24$BDLPnP$8;
+ goto inline$storm_IoCompleteRequest$0$start#1;
+
+ inline$storm_IoCompleteRequest$0$start#1:
+ inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$0$label_3#1;
+
+ inline$storm_IoCompleteRequest$0$label_3#1:
+ call inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$0$label_6#1;
+
+ inline$storm_IoCompleteRequest$0$label_6#1:
+ goto inline$storm_IoCompleteRequest$0$label_6_true#1, inline$storm_IoCompleteRequest$0$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$0$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#1;
+
+ inline$storm_IoCompleteRequest$0$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$0$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$0$label_8#1;
+
+ inline$storm_IoCompleteRequest$0$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$0$anon3_Then#1, inline$storm_IoCompleteRequest$0$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$0$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$0$anon1#1;
+
+ inline$storm_IoCompleteRequest$0$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_9#1;
+
+ inline$storm_IoCompleteRequest$0$label_9#1:
+ goto inline$storm_IoCompleteRequest$0$label_9_true#1, inline$storm_IoCompleteRequest$0$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$0$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$0$label_10#1;
+
+ inline$storm_IoCompleteRequest$0$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$0$label_1#1;
+
+ inline$storm_IoCompleteRequest$0$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$0$label_7#1;
+
+ inline$storm_IoCompleteRequest$0$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$0$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$0$label_1#1;
+
+ inline$storm_IoCompleteRequest$0$label_1#1:
+ goto inline$storm_IoCompleteRequest$0$Return#1;
+
+ inline$storm_IoCompleteRequest$0$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$0$Return#1;
+
+ inline$storm_IoCompleteRequest$0$Return#1:
+ goto inline$BDLPnP$0$label_80$1#1;
+
+ inline$BDLPnP$0$label_80$1#1:
+ goto inline$BDLPnP$0$anon62_Then#1, inline$BDLPnP$0$anon62_Else#1;
+
+ inline$BDLPnP$0$anon62_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon17#1;
+
+ inline$BDLPnP$0$anon17#1:
+ goto inline$BDLPnP$0$label_83#1;
+
+ inline$BDLPnP$0$label_83#1:
+ inline$BDLPnP$0$$status$3$859.36$BDLPnP$8 := 0 - 1073741130;
+ goto inline$BDLPnP$0$label_84#1;
+
+ inline$BDLPnP$0$label_84#1:
+ goto inline$BDLGetDebugLevel$6$Entry#1;
+
+ inline$BDLGetDebugLevel$6$Entry#1:
+ goto inline$BDLGetDebugLevel$6$start#1;
+
+ inline$BDLGetDebugLevel$6$start#1:
+ goto inline$BDLGetDebugLevel$6$label_3#1;
+
+ inline$BDLGetDebugLevel$6$label_3#1:
+ havoc inline$BDLGetDebugLevel$6$myNondetVar_0;
+ inline$BDLGetDebugLevel$6$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$6$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$6$label_1#1;
+
+ inline$BDLGetDebugLevel$6$label_1#1:
+ goto inline$BDLGetDebugLevel$6$Return#1;
+
+ inline$BDLGetDebugLevel$6$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$ := inline$BDLGetDebugLevel$6$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_84$1#1;
+
+ inline$BDLPnP$0$label_84$1#1:
+ goto inline$BDLPnP$0$anon63_Then#1, inline$BDLPnP$0$anon63_Else#1;
+
+ inline$BDLPnP$0$anon63_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon19#1;
+
+ inline$BDLPnP$0$anon19#1:
+ goto inline$BDLPnP$0$label_87#1;
+
+ inline$BDLPnP$0$label_87#1:
+ goto inline$BDLPnP$0$label_87_true#1, inline$BDLPnP$0$label_87_false#1;
+
+ inline$BDLPnP$0$label_87_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$) == 0;
+ goto inline$BDLPnP$0$label_88#1;
+
+ inline$BDLPnP$0$label_87_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$48$) != 0;
+ goto inline$BDLPnP$0$label_91#1;
+
+ inline$BDLPnP$0$label_91#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_92#1;
+
+ inline$BDLPnP$0$label_92#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_93#1;
+
+ inline$BDLPnP$0$label_93#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_94#1;
+
+ inline$BDLPnP$0$label_94#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$1023.0$49$;
+ goto inline$BDLPnP$0$label_88#1;
+
+ inline$BDLPnP$0$label_88#1:
+ goto inline$BDLGetDebugLevel$7$Entry#1;
+
+ inline$BDLGetDebugLevel$7$Entry#1:
+ goto inline$BDLGetDebugLevel$7$start#1;
+
+ inline$BDLGetDebugLevel$7$start#1:
+ goto inline$BDLGetDebugLevel$7$label_3#1;
+
+ inline$BDLGetDebugLevel$7$label_3#1:
+ havoc inline$BDLGetDebugLevel$7$myNondetVar_0;
+ inline$BDLGetDebugLevel$7$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$7$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$7$label_1#1;
+
+ inline$BDLGetDebugLevel$7$label_1#1:
+ goto inline$BDLGetDebugLevel$7$Return#1;
+
+ inline$BDLGetDebugLevel$7$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$ := inline$BDLGetDebugLevel$7$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_88$1#1;
+
+ inline$BDLPnP$0$label_88$1#1:
+ goto inline$BDLPnP$0$anon64_Then#1, inline$BDLPnP$0$anon64_Else#1;
+
+ inline$BDLPnP$0$anon64_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon21#1;
+
+ inline$BDLPnP$0$anon21#1:
+ goto inline$BDLPnP$0$label_97#1;
+
+ inline$BDLPnP$0$label_97#1:
+ goto inline$BDLPnP$0$label_97_true#1, inline$BDLPnP$0$label_97_false#1;
+
+ inline$BDLPnP$0$label_97_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$) == 0;
+ goto inline$BDLPnP$0$label_98#1;
+
+ inline$BDLPnP$0$label_97_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$53$) != 0;
+ goto inline$BDLPnP$0$label_101#1;
+
+ inline$BDLPnP$0$label_101#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_102#1;
+
+ inline$BDLPnP$0$label_102#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_103#1;
+
+ inline$BDLPnP$0$label_103#1:
+ call inline$BDLPnP$0$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLPnP$0$label_104#1;
+
+ inline$BDLPnP$0$label_104#1:
+ havoc inline$BDLPnP$0$$result.DbgPrint$1023.0$54$;
+ goto inline$BDLPnP$0$label_98#1;
+
+ inline$BDLPnP$0$label_98#1:
+ goto inline$BDLGetDebugLevel$8$Entry#1;
+
+ inline$BDLGetDebugLevel$8$Entry#1:
+ goto inline$BDLGetDebugLevel$8$start#1;
+
+ inline$BDLGetDebugLevel$8$start#1:
+ goto inline$BDLGetDebugLevel$8$label_3#1;
+
+ inline$BDLGetDebugLevel$8$label_3#1:
+ havoc inline$BDLGetDebugLevel$8$myNondetVar_0;
+ inline$BDLGetDebugLevel$8$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$8$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$8$label_1#1;
+
+ inline$BDLGetDebugLevel$8$label_1#1:
+ goto inline$BDLGetDebugLevel$8$Return#1;
+
+ inline$BDLGetDebugLevel$8$Return#1:
+ inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$ := inline$BDLGetDebugLevel$8$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLPnP$0$label_98$1#1;
+
+ inline$BDLPnP$0$label_98$1#1:
+ goto inline$BDLPnP$0$anon65_Then#1, inline$BDLPnP$0$anon65_Else#1;
+
+ inline$BDLPnP$0$anon65_Else#1:
+ assume !raiseException;
+ goto inline$BDLPnP$0$anon23#1;
+
+ inline$BDLPnP$0$anon23#1:
+ goto inline$BDLPnP$0$label_107#1;
+
+ inline$BDLPnP$0$label_107#1:
+ goto inline$BDLPnP$0$label_107_true#1, inline$BDLPnP$0$label_107_false#1;
+
+ inline$BDLPnP$0$label_107_false#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$, 4) == 0;
+ goto inline$BDLPnP$0$label_108#1;
+
+ inline$BDLPnP$0$label_107_true#1:
+ assume BIT_BAND(inline$BDLPnP$0$$result.BDLGetDebugLevel$1023.0$58$, 4) != 0;
+ goto inline$BDLPnP$0$label_109#1;
+
+ inline$BDLPnP$0$label_109#1:
+ goto inline$BDLPnP$0$label_108#1;
+
+ inline$BDLPnP$0$label_108#1:
+ goto inline$BDLPnP$0$label_1#1;
+
+ inline$BDLPnP$0$label_1#1:
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon65_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon64_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon63_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon62_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon61_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon60_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon59_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon58_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon57_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon56_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon55_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$anon54_Then#1:
+ assume raiseException;
+ goto inline$BDLPnP$0$Return#1;
+
+ inline$BDLPnP$0$Return#1:
+ goto inline$storm_thread_dispatch$0$label_8$1#1;
+
+ inline$storm_thread_dispatch$0$label_8$1#1:
+ goto inline$storm_thread_dispatch$0$anon5_Then#1, inline$storm_thread_dispatch$0$anon5_Else#1;
+
+ inline$storm_thread_dispatch$0$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_thread_dispatch$0$anon3#1;
+
+ inline$storm_thread_dispatch$0$anon3#1:
+ goto inline$storm_thread_dispatch$0$label_11#1;
+
+ inline$storm_thread_dispatch$0$label_11#1:
+ goto inline$storm_thread_dispatch$0$label_1#1;
+
+ inline$storm_thread_dispatch$0$label_1#1:
+ __storm_thread_done_3 := true;
+ goto inline$storm_thread_dispatch$0$Return#1;
+
+ inline$storm_thread_dispatch$0$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_thread_dispatch$0$Return#1;
+
+ inline$storm_thread_dispatch$0$anon4_Then#1:
+ assume raiseException;
+ goto inline$storm_thread_dispatch$0$Return#1;
+
+ inline$storm_thread_dispatch$0$Return#1:
+ goto label_29$1#1;
+
+ label_29$1#1:
+ goto label_32#1;
+
+ label_32#1:
+ goto inline$storm_thread_cancel$0$Entry#1;
+
+ inline$storm_thread_cancel$0$Entry#1:
+ inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4_.1 := $irp$1$96.7$storm_main$0;
+ goto inline$storm_thread_cancel$0$start#1;
+
+ inline$storm_thread_cancel$0$start#1:
+ k := 0;
+ raiseException := false;
+ __storm_thread_id := 1;
+ call contextSwitch();
+ inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4 := inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4_.1;
+ goto inline$storm_thread_cancel$0$label_3#1;
+
+ inline$storm_thread_cancel$0$label_3#1:
+ goto inline$storm_IoCancelIrp$0$Entry#1;
+
+ inline$storm_IoCancelIrp$0$Entry#1:
+ inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4_.1 := inline$storm_thread_cancel$0$$Irp$1$64.5$storm_thread_cancel$4;
+ goto inline$storm_IoCancelIrp$0$start#1;
+
+ inline$storm_IoCancelIrp$0$start#1:
+ inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4 := inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4_.1;
+ goto inline$storm_IoCancelIrp$0$label_3#1;
+
+ inline$storm_IoCancelIrp$0$label_3#1:
+ goto inline$storm_IoCancelIrp$0$label_4#1;
+
+ inline$storm_IoCancelIrp$0$label_4#1:
+ goto inline$storm_IoCancelIrp$0$label_5#1;
+
+ inline$storm_IoCancelIrp$0$label_5#1:
+ __storm_atomic := true;
+ goto inline$storm_IoCancelIrp$0$label_8#1;
+
+ inline$storm_IoCancelIrp$0$label_8#1:
+ inline$storm_IoCancelIrp$0$myVar_0 := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4)];
+ call contextSwitch();
+ inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4 := inline$storm_IoCancelIrp$0$myVar_0;
+ goto inline$storm_IoCancelIrp$0$label_9#1;
+
+ inline$storm_IoCancelIrp$0$label_9#1:
+ Mem_0_T.CancelRoutine__IRP := Mem_0_T.CancelRoutine__IRP[CancelRoutine__IRP(inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4) := 0];
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_10#1;
+
+ inline$storm_IoCancelIrp$0$label_10#1:
+ goto inline$storm_IoCancelIrp$0$anon9_Then#1, inline$storm_IoCancelIrp$0$anon9_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon9_Else#1:
+ assume __storm_init;
+ goto inline$storm_IoCancelIrp$0$anon1#1;
+
+ inline$storm_IoCancelIrp$0$anon9_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoCancelIrp$0$anon1#1;
+
+ inline$storm_IoCancelIrp$0$anon1#1:
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_13#1;
+
+ inline$storm_IoCancelIrp$0$label_13#1:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_1;
+ assume inline$storm_IoCancelIrp$0$myNondetVar_0 == inline$storm_IoCancelIrp$0$myNondetVar_1;
+ goto inline$storm_IoAcquireCancelSpinLock$0$Entry#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Entry#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$start#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$start#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_3#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_3#1:
+ __storm_atomic := true;
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_6#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_6#1:
+ havoc raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon4_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon4_Else#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon4_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon1#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon1#1:
+ assume k == 0 ==> INT_EQ(cancelLockStatus_0, 0);
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_7#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_7#1:
+ cancelLockStatus_0 := 1;
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_8#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_8#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#1, inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon5_Else#1:
+ assume __storm_init;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon5_Then#1:
+ assume !__storm_init;
+ __storm_atomic := false;
+ goto inline$storm_IoAcquireCancelSpinLock$0$anon3#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon3#1:
+ call contextSwitch();
+ goto inline$storm_IoAcquireCancelSpinLock$0$label_1#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$label_1#1:
+ goto inline$storm_IoAcquireCancelSpinLock$0$Return#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$anon4_Then#1:
+ assume raiseException;
+ goto inline$storm_IoAcquireCancelSpinLock$0$Return#1;
+
+ inline$storm_IoAcquireCancelSpinLock$0$Return#1:
+ goto inline$storm_IoCancelIrp$0$label_13$1#1;
+
+ inline$storm_IoCancelIrp$0$label_13$1#1:
+ goto inline$storm_IoCancelIrp$0$anon10_Then#1, inline$storm_IoCancelIrp$0$anon10_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon10_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon3#1;
+
+ inline$storm_IoCancelIrp$0$anon3#1:
+ havoc inline$storm_IoCancelIrp$0$myNondetVar_0;
+ goto inline$storm_IoCancelIrp$0$label_16#1;
+
+ inline$storm_IoCancelIrp$0$label_16#1:
+ goto inline$storm_IoCancelIrp$0$label_16_true#1, inline$storm_IoCancelIrp$0$label_16_false#1;
+
+ inline$storm_IoCancelIrp$0$label_16_false#1:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4 == 0;
+ goto inline$storm_IoCancelIrp$0$label_17#1;
+
+ inline$storm_IoCancelIrp$0$label_17#1:
+ goto inline$storm_IoCancelIrp$0$label_1#1;
+
+ inline$storm_IoCancelIrp$0$label_16_true#1:
+ assume inline$storm_IoCancelIrp$0$$oldCancelRoutine$2$347.17$storm_IoCancelIrp$4 != 0;
+ goto inline$storm_IoCancelIrp$0$label_18#1;
+
+ inline$storm_IoCancelIrp$0$label_18#1:
+ goto inline$storm_IoCancelIrp$0$label_19#1;
+
+ inline$storm_IoCancelIrp$0$label_19#1:
+ call inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$ := storm_nondet();
+ goto inline$storm_IoCancelIrp$0$label_22#1;
+
+ inline$storm_IoCancelIrp$0$label_22#1:
+ goto inline$storm_IoCancelIrp$0$label_22_true#1, inline$storm_IoCancelIrp$0$label_22_false#1;
+
+ inline$storm_IoCancelIrp$0$label_22_false#1:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$ == 0;
+ goto inline$storm_IoCancelIrp$0$label_23#1;
+
+ inline$storm_IoCancelIrp$0$label_22_true#1:
+ assume inline$storm_IoCancelIrp$0$$result.storm_nondet$360.4$2$ != 0;
+ goto inline$storm_IoCancelIrp$0$label_26#1;
+
+ inline$storm_IoCancelIrp$0$label_26#1:
+ havoc raiseException;
+ goto inline$storm_IoCancelIrp$0$anon12_Then#1, inline$storm_IoCancelIrp$0$anon12_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon12_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon7#1;
+
+ inline$storm_IoCancelIrp$0$anon7#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4], 1);
+ call contextSwitch();
+ goto inline$storm_IoCancelIrp$0$label_27#1;
+
+ inline$storm_IoCancelIrp$0$label_27#1:
+ goto inline$storm_IoCancelIrp$0$label_27_true#1, inline$storm_IoCancelIrp$0$label_27_false#1;
+
+ inline$storm_IoCancelIrp$0$label_27_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCancelIrp$0$label_28#1;
+
+ inline$storm_IoCancelIrp$0$label_28#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCancelIrp$0$label_1#1;
+
+ inline$storm_IoCancelIrp$0$label_27_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCancelIrp$0$label_23#1;
+
+ inline$storm_IoCancelIrp$0$label_23#1:
+ goto inline$IoGetCurrentIrpStackLocation$150$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$storm_IoCancelIrp$0$$Irp$1$344.10$storm_IoCancelIrp$4;
+ goto inline$IoGetCurrentIrpStackLocation$150$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$start#1:
+ inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$150$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$150$label_3_true#1, inline$IoGetCurrentIrpStackLocation$150$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$150$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$150$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$150$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$150$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$150$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$150$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$150$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$150$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$150$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$150$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$150$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$150$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$150$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$150$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$150$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$150$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$150$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$150$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$150$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$150$Return#1:
+ goto inline$storm_IoCancelIrp$0$label_23$1#1;
+
+ inline$storm_IoCancelIrp$0$label_23$1#1:
+ goto inline$storm_IoCancelIrp$0$anon11_Then#1, inline$storm_IoCancelIrp$0$anon11_Else#1;
+
+ inline$storm_IoCancelIrp$0$anon11_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCancelIrp$0$anon5#1;
+
+ inline$storm_IoCancelIrp$0$anon5#1:
+ goto inline$storm_IoCancelIrp$0$label_31#1;
+
+ inline$storm_IoCancelIrp$0$label_31#1:
+ goto inline$storm_IoCancelIrp$0$label_32#1;
+
+ inline$storm_IoCancelIrp$0$label_32#1:
+ goto inline$storm_IoCancelIrp$0$label_35#1;
+
+ inline$storm_IoCancelIrp$0$label_35#1:
+ goto inline$storm_IoCancelIrp$0$label_1#1;
+
+ inline$storm_IoCancelIrp$0$label_1#1:
+ goto inline$storm_IoCancelIrp$0$Return#1;
+
+ inline$storm_IoCancelIrp$0$anon11_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#1;
+
+ inline$storm_IoCancelIrp$0$anon12_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#1;
+
+ inline$storm_IoCancelIrp$0$anon10_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCancelIrp$0$Return#1;
+
+ inline$storm_IoCancelIrp$0$Return#1:
+ goto inline$storm_thread_cancel$0$label_3$1#1;
+
+ inline$storm_thread_cancel$0$label_3$1#1:
+ goto inline$storm_thread_cancel$0$anon2_Then#1, inline$storm_thread_cancel$0$anon2_Else#1;
+
+ inline$storm_thread_cancel$0$anon2_Else#1:
+ assume !raiseException;
+ goto inline$storm_thread_cancel$0$anon1#1;
+
+ inline$storm_thread_cancel$0$anon1#1:
+ goto inline$storm_thread_cancel$0$label_1#1;
+
+ inline$storm_thread_cancel$0$label_1#1:
+ __storm_thread_done_1 := true;
+ goto inline$storm_thread_cancel$0$Return#1;
+
+ inline$storm_thread_cancel$0$anon2_Then#1:
+ assume raiseException;
+ goto inline$storm_thread_cancel$0$Return#1;
+
+ inline$storm_thread_cancel$0$Return#1:
+ goto label_32$1#1;
+
+ label_32$1#1:
+ goto label_35#1;
+
+ label_35#1:
+ goto inline$storm_thread_dpc$0$Entry#1;
+
+ inline$storm_thread_dpc$0$Entry#1:
+ goto inline$storm_thread_dpc$0$start#1;
+
+ inline$storm_thread_dpc$0$start#1:
+ k := 0;
+ raiseException := false;
+ __storm_thread_id := 4;
+ call contextSwitch();
+ goto inline$storm_thread_dpc$0$label_1#1;
+
+ inline$storm_thread_dpc$0$label_1#1:
+ __storm_thread_done_4 := true;
+ goto inline$storm_thread_dpc$0$Return#1;
+
+ inline$storm_thread_dpc$0$Return#1:
+ goto label_35$1#1;
+
+ label_35$1#1:
+ goto label_38#1;
+
+ label_38#1:
+ goto inline$storm_thread_completion$0$Entry#1;
+
+ inline$storm_thread_completion$0$Entry#1:
+ goto inline$storm_thread_completion$0$start#1;
+
+ inline$storm_thread_completion$0$start#1:
+ k := 0;
+ raiseException := false;
+ __storm_thread_id := 2;
+ call contextSwitch();
+ goto inline$storm_thread_completion$0$label_3#1;
+
+ inline$storm_thread_completion$0$label_3#1:
+ havoc raiseException;
+ goto inline$storm_thread_completion$0$anon4_Then#1, inline$storm_thread_completion$0$anon4_Else#1;
+
+ inline$storm_thread_completion$0$anon4_Else#1:
+ assume !raiseException;
+ goto inline$storm_thread_completion$0$anon1#1;
+
+ inline$storm_thread_completion$0$anon1#1:
+ assume k == 0 ==> INT_NEQ(created_irp_0, 0);
+ call contextSwitch();
+ goto inline$storm_thread_completion$0$label_4#1;
+
+ inline$storm_thread_completion$0$label_4#1:
+ goto inline$CallCompletionRoutine$30$Entry#1;
+
+ inline$CallCompletionRoutine$30$Entry#1:
+ inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4_.1 := created_irp_0;
+ goto inline$CallCompletionRoutine$30$start#1;
+
+ inline$CallCompletionRoutine$30$start#1:
+ inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4_.1;
+ goto inline$CallCompletionRoutine$30$label_3#1;
+
+ inline$CallCompletionRoutine$30$label_3#1:
+ goto inline$CallCompletionRoutine$30$label_4#1;
+
+ inline$CallCompletionRoutine$30$label_4#1:
+ goto inline$CallCompletionRoutine$30$label_5#1;
+
+ inline$CallCompletionRoutine$30$label_5#1:
+ goto inline$CallCompletionRoutine$30$label_6#1;
+
+ inline$CallCompletionRoutine$30$label_6#1:
+ goto inline$CallCompletionRoutine$30$label_7#1;
+
+ inline$CallCompletionRoutine$30$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$151$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$151$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$start#1:
+ inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$151$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$151$label_3_true#1, inline$IoGetCurrentIrpStackLocation$151$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$151$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$151$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$151$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$151$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$151$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$151$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$151$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$151$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$151$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$151$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$151$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$151$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$151$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$151$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$151$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$151$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$151$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$151$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$151$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$151$Return#1:
+ goto inline$CallCompletionRoutine$30$label_7$1#1;
+
+ inline$CallCompletionRoutine$30$label_7$1#1:
+ goto inline$CallCompletionRoutine$30$anon10_Then#1, inline$CallCompletionRoutine$30$anon10_Else#1;
+
+ inline$CallCompletionRoutine$30$anon10_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$30$anon1#1;
+
+ inline$CallCompletionRoutine$30$anon1#1:
+ goto inline$CallCompletionRoutine$30$label_10#1;
+
+ inline$CallCompletionRoutine$30$label_10#1:
+ goto inline$CallCompletionRoutine$30$label_11#1;
+
+ inline$CallCompletionRoutine$30$label_11#1:
+ havoc inline$CallCompletionRoutine$30$myNondetVar_0;
+ inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$myNondetVar_0;
+ goto inline$CallCompletionRoutine$30$label_12#1;
+
+ inline$CallCompletionRoutine$30$label_12#1:
+ havoc inline$CallCompletionRoutine$30$myNondetVar_0;
+ inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$myNondetVar_0;
+ goto inline$CallCompletionRoutine$30$label_13#1;
+
+ inline$CallCompletionRoutine$30$label_13#1:
+ havoc inline$CallCompletionRoutine$30$myNondetVar_0;
+ goto inline$CallCompletionRoutine$30$label_14#1;
+
+ inline$CallCompletionRoutine$30$label_14#1:
+ goto inline$IoGetCurrentIrpStackLocation$152$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
+ goto inline$IoGetCurrentIrpStackLocation$152$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$start#1:
+ inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$152$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$152$label_3_true#1, inline$IoGetCurrentIrpStackLocation$152$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$152$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$152$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$152$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$152$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$152$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$152$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$152$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$152$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$152$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$152$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$152$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$152$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$152$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$152$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$152$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$152$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$152$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$152$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$152$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$152$Return#1:
+ goto inline$CallCompletionRoutine$30$label_14$1#1;
+
+ inline$CallCompletionRoutine$30$label_14$1#1:
+ goto inline$CallCompletionRoutine$30$anon11_Then#1, inline$CallCompletionRoutine$30$anon11_Else#1;
+
+ inline$CallCompletionRoutine$30$anon11_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$30$anon3#1;
+
+ inline$CallCompletionRoutine$30$anon3#1:
+ goto inline$CallCompletionRoutine$30$label_17#1;
+
+ inline$CallCompletionRoutine$30$label_17#1:
+ goto inline$CallCompletionRoutine$30$label_18#1;
+
+ inline$CallCompletionRoutine$30$label_18#1:
+ goto inline$CallCompletionRoutine$30$label_18_true#1, inline$CallCompletionRoutine$30$label_18_false#1;
+
+ inline$CallCompletionRoutine$30$label_18_false#1:
+ assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == 0;
+ goto inline$CallCompletionRoutine$30$label_1#1;
+
+ inline$CallCompletionRoutine$30$label_18_true#1:
+ assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 != 0;
+ goto inline$CallCompletionRoutine$30$label_19#1;
+
+ inline$CallCompletionRoutine$30$label_19#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4 := 0];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$30$label_20#1;
+
+ inline$CallCompletionRoutine$30$label_20#1:
+ goto inline$CallCompletionRoutine$30$label_20_icall_1#1, inline$CallCompletionRoutine$30$label_20_icall_2#1, inline$CallCompletionRoutine$30$label_20_icall_3#1;
+
+ inline$CallCompletionRoutine$30$label_20_icall_3#1:
+ assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLSystemPowerIoCompletion;
+ havoc inline$CallCompletionRoutine$30$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$30$Entry#1;
+
+ inline$BDLSystemPowerIoCompletion$30$Entry#1:
+ inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLSystemPowerIoCompletion$30$start#1;
+
+ inline$BDLSystemPowerIoCompletion$30$start#1:
+ call inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12 := __HAVOC_malloc(4);
+ inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12_.1;
+ inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12_.1;
+ goto inline$BDLSystemPowerIoCompletion$30$label_3#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_3#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_4#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_4#1:
+ inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_5#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_5#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_6#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_6#1:
+ inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$Context$3$1335.24$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$30$label_7#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_7#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_8#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_8#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$30$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_9#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_9#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_10#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$154$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$154$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$start#1:
+ inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$154$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$154$label_3_true#1, inline$IoGetCurrentIrpStackLocation$154$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$154$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$154$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$154$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$154$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$154$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$154$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$154$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$154$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$154$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$154$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$154$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$154$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$154$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$154$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$154$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$154$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$154$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$154$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$154$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$154$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_10$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_10$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon36_Then#1, inline$BDLSystemPowerIoCompletion$30$anon36_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_13#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_13#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_14#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_14#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_15#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_15#1:
+ goto inline$BDLGetDebugLevel$792$Entry#1;
+
+ inline$BDLGetDebugLevel$792$Entry#1:
+ goto inline$BDLGetDebugLevel$792$start#1;
+
+ inline$BDLGetDebugLevel$792$start#1:
+ goto inline$BDLGetDebugLevel$792$label_3#1;
+
+ inline$BDLGetDebugLevel$792$label_3#1:
+ havoc inline$BDLGetDebugLevel$792$myNondetVar_0;
+ inline$BDLGetDebugLevel$792$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$792$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$792$label_1#1;
+
+ inline$BDLGetDebugLevel$792$label_1#1:
+ goto inline$BDLGetDebugLevel$792$Return#1;
+
+ inline$BDLGetDebugLevel$792$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$ := inline$BDLGetDebugLevel$792$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_15$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_15$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon37_Then#1, inline$BDLSystemPowerIoCompletion$30$anon37_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon3#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon3#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_18#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_18#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_18_true#1, inline$BDLSystemPowerIoCompletion$30$label_18_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_18_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_18_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$3$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_22#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_22#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_23#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_23#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_24#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_24#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_25#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_25#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$4$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_19#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_19#1:
+ goto inline$BDLGetDebugLevel$793$Entry#1;
+
+ inline$BDLGetDebugLevel$793$Entry#1:
+ goto inline$BDLGetDebugLevel$793$start#1;
+
+ inline$BDLGetDebugLevel$793$start#1:
+ goto inline$BDLGetDebugLevel$793$label_3#1;
+
+ inline$BDLGetDebugLevel$793$label_3#1:
+ havoc inline$BDLGetDebugLevel$793$myNondetVar_0;
+ inline$BDLGetDebugLevel$793$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$793$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$793$label_1#1;
+
+ inline$BDLGetDebugLevel$793$label_1#1:
+ goto inline$BDLGetDebugLevel$793$Return#1;
+
+ inline$BDLGetDebugLevel$793$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$ := inline$BDLGetDebugLevel$793$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_19$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_19$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon38_Then#1, inline$BDLSystemPowerIoCompletion$30$anon38_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon5#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon5#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_28#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_28#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_28_true#1, inline$BDLSystemPowerIoCompletion$30$label_28_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_28_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_28_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$8$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_32#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_32#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_33#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_33#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_34#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_34#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_35#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_35#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1344.0$9$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_29#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_29#1:
+ goto inline$BDLGetDebugLevel$794$Entry#1;
+
+ inline$BDLGetDebugLevel$794$Entry#1:
+ goto inline$BDLGetDebugLevel$794$start#1;
+
+ inline$BDLGetDebugLevel$794$start#1:
+ goto inline$BDLGetDebugLevel$794$label_3#1;
+
+ inline$BDLGetDebugLevel$794$label_3#1:
+ havoc inline$BDLGetDebugLevel$794$myNondetVar_0;
+ inline$BDLGetDebugLevel$794$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$794$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$794$label_1#1;
+
+ inline$BDLGetDebugLevel$794$label_1#1:
+ goto inline$BDLGetDebugLevel$794$Return#1;
+
+ inline$BDLGetDebugLevel$794$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$ := inline$BDLGetDebugLevel$794$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_29$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_29$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon39_Then#1, inline$BDLSystemPowerIoCompletion$30$anon39_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon7#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon7#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_38#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_38#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_38_true#1, inline$BDLSystemPowerIoCompletion$30$label_38_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_38_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_38_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1344.0$13$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_40#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_40#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_39#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_39#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_39_true#1, inline$BDLSystemPowerIoCompletion$30$label_39_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_39_false#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_41#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_41_case_0#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_1#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_2#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_3#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_4#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_5#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_6#1, inline$BDLSystemPowerIoCompletion$30$label_41_case_7#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_7#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 7;
+ goto inline$BDLSystemPowerIoCompletion$30$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_6#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 6;
+ goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_5#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 5;
+ goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_4#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 4;
+ goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_3#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 3;
+ goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_2#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 2;
+ goto inline$BDLSystemPowerIoCompletion$30$label_108#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_108#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_1#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 == 1;
+ goto inline$BDLSystemPowerIoCompletion$30$label_107#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_107#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_41_case_0#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 1;
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 2;
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 3;
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 4;
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 5;
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 6;
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 7;
+ goto inline$BDLSystemPowerIoCompletion$30$label_106#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_106#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_106_true#1, inline$BDLSystemPowerIoCompletion$30$label_106_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_106_false#1:
+ assume 0 == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_142#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_142#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_143#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_143#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_144#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_144#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_106_true#1:
+ assume 0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_109#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_109#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ call inline$BDLSystemPowerIoCompletion$30$$result.PoRequestPowerIrp$1410.31$27$ := PoRequestPowerIrp(inline$BDLSystemPowerIoCompletion$30$$pDeviceObject$1$1333.24$BDLSystemPowerIoCompletion$12, inline$BDLSystemPowerIoCompletion$30$myNondetVar_0, inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12, BDLSystemPowerCompleted, inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 0);
+ goto inline$BDLSystemPowerIoCompletion$30$anon50_Then#1, inline$BDLSystemPowerIoCompletion$30$anon50_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon50_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon29#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon29#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_112#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_112#1:
+ inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$$result.PoRequestPowerIrp$1410.31$27$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_113#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_113#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_113_true#1, inline$BDLSystemPowerIoCompletion$30$label_113_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_113_false#1:
+ assume !INT_EQ(inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$30$label_114#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_114#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_116#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_116#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_117#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_117#1:
+ goto inline$BDLGetDebugLevel$801$Entry#1;
+
+ inline$BDLGetDebugLevel$801$Entry#1:
+ goto inline$BDLGetDebugLevel$801$start#1;
+
+ inline$BDLGetDebugLevel$801$start#1:
+ goto inline$BDLGetDebugLevel$801$label_3#1;
+
+ inline$BDLGetDebugLevel$801$label_3#1:
+ havoc inline$BDLGetDebugLevel$801$myNondetVar_0;
+ inline$BDLGetDebugLevel$801$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$801$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$801$label_1#1;
+
+ inline$BDLGetDebugLevel$801$label_1#1:
+ goto inline$BDLGetDebugLevel$801$Return#1;
+
+ inline$BDLGetDebugLevel$801$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$ := inline$BDLGetDebugLevel$801$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_117$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_117$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon51_Then#1, inline$BDLSystemPowerIoCompletion$30$anon51_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon51_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon31#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon31#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_120#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_120#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_120_true#1, inline$BDLSystemPowerIoCompletion$30$label_120_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_120_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_120_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$28$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_124#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_124#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_125#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_125#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_126#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_126#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_127#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_127#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$29$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_121#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_121#1:
+ goto inline$BDLGetDebugLevel$802$Entry#1;
+
+ inline$BDLGetDebugLevel$802$Entry#1:
+ goto inline$BDLGetDebugLevel$802$start#1;
+
+ inline$BDLGetDebugLevel$802$start#1:
+ goto inline$BDLGetDebugLevel$802$label_3#1;
+
+ inline$BDLGetDebugLevel$802$label_3#1:
+ havoc inline$BDLGetDebugLevel$802$myNondetVar_0;
+ inline$BDLGetDebugLevel$802$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$802$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$802$label_1#1;
+
+ inline$BDLGetDebugLevel$802$label_1#1:
+ goto inline$BDLGetDebugLevel$802$Return#1;
+
+ inline$BDLGetDebugLevel$802$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$ := inline$BDLGetDebugLevel$802$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_121$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_121$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon52_Then#1, inline$BDLSystemPowerIoCompletion$30$anon52_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon52_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon33#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon33#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_130#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_130#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_130_true#1, inline$BDLSystemPowerIoCompletion$30$label_130_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_130_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_130_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$33$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_134#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_134#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_135#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_135#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_136#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_136#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_137#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_137#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1428.0$34$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_131#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_131#1:
+ goto inline$BDLGetDebugLevel$803$Entry#1;
+
+ inline$BDLGetDebugLevel$803$Entry#1:
+ goto inline$BDLGetDebugLevel$803$start#1;
+
+ inline$BDLGetDebugLevel$803$start#1:
+ goto inline$BDLGetDebugLevel$803$label_3#1;
+
+ inline$BDLGetDebugLevel$803$label_3#1:
+ havoc inline$BDLGetDebugLevel$803$myNondetVar_0;
+ inline$BDLGetDebugLevel$803$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$803$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$803$label_1#1;
+
+ inline$BDLGetDebugLevel$803$label_1#1:
+ goto inline$BDLGetDebugLevel$803$Return#1;
+
+ inline$BDLGetDebugLevel$803$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$ := inline$BDLGetDebugLevel$803$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_131$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_131$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon53_Then#1, inline$BDLSystemPowerIoCompletion$30$anon53_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon53_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon35#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon35#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_140#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_140#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_140_true#1, inline$BDLSystemPowerIoCompletion$30$label_140_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_140_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_140_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1428.0$38$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_141#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_141#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon53_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon52_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon51_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_113_true#1:
+ assume INT_EQ(inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12, 259);
+ goto inline$BDLSystemPowerIoCompletion$30$label_115#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_115#1:
+ inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := 0 - 1073741802;
+ goto inline$BDLSystemPowerIoCompletion$30$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon50_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_39_true#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ assume inline$BDLSystemPowerIoCompletion$30$myNondetVar_0 != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_42#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_42#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12 := inline$BDLSystemPowerIoCompletion$30$myNondetVar_0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_43#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_43#1:
+ goto inline$BDLGetDebugLevel$795$Entry#1;
+
+ inline$BDLGetDebugLevel$795$Entry#1:
+ goto inline$BDLGetDebugLevel$795$start#1;
+
+ inline$BDLGetDebugLevel$795$start#1:
+ goto inline$BDLGetDebugLevel$795$label_3#1;
+
+ inline$BDLGetDebugLevel$795$label_3#1:
+ havoc inline$BDLGetDebugLevel$795$myNondetVar_0;
+ inline$BDLGetDebugLevel$795$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$795$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$795$label_1#1;
+
+ inline$BDLGetDebugLevel$795$label_1#1:
+ goto inline$BDLGetDebugLevel$795$Return#1;
+
+ inline$BDLGetDebugLevel$795$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$ := inline$BDLGetDebugLevel$795$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_43$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_43$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon40_Then#1, inline$BDLSystemPowerIoCompletion$30$anon40_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon9#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon9#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_46#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_46#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_46_true#1, inline$BDLSystemPowerIoCompletion$30$label_46_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_46_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_46_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$14$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_50#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_50#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_51#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_51#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_52#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_52#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_53#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_53#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$15$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_47#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_47#1:
+ goto inline$BDLGetDebugLevel$796$Entry#1;
+
+ inline$BDLGetDebugLevel$796$Entry#1:
+ goto inline$BDLGetDebugLevel$796$start#1;
+
+ inline$BDLGetDebugLevel$796$start#1:
+ goto inline$BDLGetDebugLevel$796$label_3#1;
+
+ inline$BDLGetDebugLevel$796$label_3#1:
+ havoc inline$BDLGetDebugLevel$796$myNondetVar_0;
+ inline$BDLGetDebugLevel$796$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$796$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$796$label_1#1;
+
+ inline$BDLGetDebugLevel$796$label_1#1:
+ goto inline$BDLGetDebugLevel$796$Return#1;
+
+ inline$BDLGetDebugLevel$796$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$ := inline$BDLGetDebugLevel$796$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_47$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_47$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon41_Then#1, inline$BDLSystemPowerIoCompletion$30$anon41_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon11#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon11#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_56#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_56#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_56_true#1, inline$BDLSystemPowerIoCompletion$30$label_56_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_56_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_56_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$19$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_60#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_60#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_61#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_61#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_62#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_62#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_63#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_63#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1358.0$20$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_57#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_57#1:
+ goto inline$BDLGetDebugLevel$797$Entry#1;
+
+ inline$BDLGetDebugLevel$797$Entry#1:
+ goto inline$BDLGetDebugLevel$797$start#1;
+
+ inline$BDLGetDebugLevel$797$start#1:
+ goto inline$BDLGetDebugLevel$797$label_3#1;
+
+ inline$BDLGetDebugLevel$797$label_3#1:
+ havoc inline$BDLGetDebugLevel$797$myNondetVar_0;
+ inline$BDLGetDebugLevel$797$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$797$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$797$label_1#1;
+
+ inline$BDLGetDebugLevel$797$label_1#1:
+ goto inline$BDLGetDebugLevel$797$Return#1;
+
+ inline$BDLGetDebugLevel$797$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$ := inline$BDLGetDebugLevel$797$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_57$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_57$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon42_Then#1, inline$BDLSystemPowerIoCompletion$30$anon42_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon13#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon13#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_66#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_66#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_66_true#1, inline$BDLSystemPowerIoCompletion$30$label_66_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_66_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_66_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1358.0$24$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_70#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_70#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_67#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_67#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLSystemPowerIoCompletion$30$$pBDLExtension$6$1340.36$BDLSystemPowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLSystemPowerIoCompletion$30$anon43_Then#1, inline$BDLSystemPowerIoCompletion$30$anon43_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon15#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon15#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_71#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_71#1:
+ call PoStartNextPowerIrp(inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$30$anon44_Then#1, inline$BDLSystemPowerIoCompletion$30$anon44_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon17#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon17#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_74#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_74#1:
+ goto inline$storm_IoCompleteRequest$63$Entry#1;
+
+ inline$storm_IoCompleteRequest$63$Entry#1:
+ inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLSystemPowerIoCompletion$30$$pIrp$2$1334.24$BDLSystemPowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$63$start#1;
+
+ inline$storm_IoCompleteRequest$63$start#1:
+ inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$63$label_3#1;
+
+ inline$storm_IoCompleteRequest$63$label_3#1:
+ call inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$63$label_6#1;
+
+ inline$storm_IoCompleteRequest$63$label_6#1:
+ goto inline$storm_IoCompleteRequest$63$label_6_true#1, inline$storm_IoCompleteRequest$63$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$63$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$63$label_7#1;
+
+ inline$storm_IoCompleteRequest$63$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$63$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$63$label_8#1;
+
+ inline$storm_IoCompleteRequest$63$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$63$anon3_Then#1, inline$storm_IoCompleteRequest$63$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$63$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$63$anon1#1;
+
+ inline$storm_IoCompleteRequest$63$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$63$label_9#1;
+
+ inline$storm_IoCompleteRequest$63$label_9#1:
+ goto inline$storm_IoCompleteRequest$63$label_9_true#1, inline$storm_IoCompleteRequest$63$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$63$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$63$label_10#1;
+
+ inline$storm_IoCompleteRequest$63$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$63$label_1#1;
+
+ inline$storm_IoCompleteRequest$63$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$63$label_7#1;
+
+ inline$storm_IoCompleteRequest$63$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$63$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$63$label_1#1;
+
+ inline$storm_IoCompleteRequest$63$label_1#1:
+ goto inline$storm_IoCompleteRequest$63$Return#1;
+
+ inline$storm_IoCompleteRequest$63$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$63$Return#1;
+
+ inline$storm_IoCompleteRequest$63$Return#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_74$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_74$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon45_Then#1, inline$BDLSystemPowerIoCompletion$30$anon45_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon45_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon19#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon19#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_77#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_77#1:
+ call ExFreePoolWithTag(inline$BDLSystemPowerIoCompletion$30$$pPowerIrpContext$5$1339.37$BDLSystemPowerIoCompletion$12, 541869122);
+ goto inline$BDLSystemPowerIoCompletion$30$anon46_Then#1, inline$BDLSystemPowerIoCompletion$30$anon46_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon46_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon21#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon21#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_80#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_80#1:
+ goto inline$BDLGetDebugLevel$798$Entry#1;
+
+ inline$BDLGetDebugLevel$798$Entry#1:
+ goto inline$BDLGetDebugLevel$798$start#1;
+
+ inline$BDLGetDebugLevel$798$start#1:
+ goto inline$BDLGetDebugLevel$798$label_3#1;
+
+ inline$BDLGetDebugLevel$798$label_3#1:
+ havoc inline$BDLGetDebugLevel$798$myNondetVar_0;
+ inline$BDLGetDebugLevel$798$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$798$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$798$label_1#1;
+
+ inline$BDLGetDebugLevel$798$label_1#1:
+ goto inline$BDLGetDebugLevel$798$Return#1;
+
+ inline$BDLGetDebugLevel$798$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$ := inline$BDLGetDebugLevel$798$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_80$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_80$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon47_Then#1, inline$BDLSystemPowerIoCompletion$30$anon47_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon47_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon23#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon23#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_83#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_83#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_83_true#1, inline$BDLSystemPowerIoCompletion$30$label_83_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_83_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_83_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$39$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_87#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_87#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_88#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_88#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_89#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_89#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_90#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_90#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$40$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_84#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_84#1:
+ goto inline$BDLGetDebugLevel$799$Entry#1;
+
+ inline$BDLGetDebugLevel$799$Entry#1:
+ goto inline$BDLGetDebugLevel$799$start#1;
+
+ inline$BDLGetDebugLevel$799$start#1:
+ goto inline$BDLGetDebugLevel$799$label_3#1;
+
+ inline$BDLGetDebugLevel$799$label_3#1:
+ havoc inline$BDLGetDebugLevel$799$myNondetVar_0;
+ inline$BDLGetDebugLevel$799$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$799$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$799$label_1#1;
+
+ inline$BDLGetDebugLevel$799$label_1#1:
+ goto inline$BDLGetDebugLevel$799$Return#1;
+
+ inline$BDLGetDebugLevel$799$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$ := inline$BDLGetDebugLevel$799$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_84$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_84$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon48_Then#1, inline$BDLSystemPowerIoCompletion$30$anon48_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon48_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon25#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon25#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_93#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_93#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_93_true#1, inline$BDLSystemPowerIoCompletion$30$label_93_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_93_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_93_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$44$) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_97#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_97#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_98#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_98#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_99#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_99#1:
+ call inline$BDLSystemPowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLSystemPowerIoCompletion$30$label_100#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_100#1:
+ havoc inline$BDLSystemPowerIoCompletion$30$$result.DbgPrint$1440.0$45$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_94#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_94#1:
+ goto inline$BDLGetDebugLevel$800$Entry#1;
+
+ inline$BDLGetDebugLevel$800$Entry#1:
+ goto inline$BDLGetDebugLevel$800$start#1;
+
+ inline$BDLGetDebugLevel$800$start#1:
+ goto inline$BDLGetDebugLevel$800$label_3#1;
+
+ inline$BDLGetDebugLevel$800$label_3#1:
+ havoc inline$BDLGetDebugLevel$800$myNondetVar_0;
+ inline$BDLGetDebugLevel$800$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$800$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$800$label_1#1;
+
+ inline$BDLGetDebugLevel$800$label_1#1:
+ goto inline$BDLGetDebugLevel$800$Return#1;
+
+ inline$BDLGetDebugLevel$800$Return#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$ := inline$BDLGetDebugLevel$800$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLSystemPowerIoCompletion$30$label_94$1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_94$1#1:
+ goto inline$BDLSystemPowerIoCompletion$30$anon49_Then#1, inline$BDLSystemPowerIoCompletion$30$anon49_Else#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon49_Else#1:
+ assume !raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$anon27#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon27#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_103#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_103#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_103_true#1, inline$BDLSystemPowerIoCompletion$30$label_103_false#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_103_false#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$, 4) == 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_103_true#1:
+ assume BIT_BAND(inline$BDLSystemPowerIoCompletion$30$$result.BDLGetDebugLevel$1440.0$49$, 4) != 0;
+ goto inline$BDLSystemPowerIoCompletion$30$label_105#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_105#1:
+ goto inline$BDLSystemPowerIoCompletion$30$label_104#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_104#1:
+ inline$BDLSystemPowerIoCompletion$30$$result.BDLSystemPowerIoCompletion$1331.0$1$ := inline$BDLSystemPowerIoCompletion$30$$status$4$1338.36$BDLSystemPowerIoCompletion$12;
+ goto inline$BDLSystemPowerIoCompletion$30$label_1#1;
+
+ inline$BDLSystemPowerIoCompletion$30$label_1#1:
+ call __HAVOC_free(inline$BDLSystemPowerIoCompletion$30$$PowerState$8$1342.36$BDLSystemPowerIoCompletion$12);
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon49_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon48_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon47_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon46_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon45_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLSystemPowerIoCompletion$30$Return#1;
+
+ inline$BDLSystemPowerIoCompletion$30$Return#1:
+ inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$ := inline$BDLSystemPowerIoCompletion$30$$result.BDLSystemPowerIoCompletion$1331.0$1$;
+ goto inline$CallCompletionRoutine$30$label_20_icall_3$1#1;
+
+ inline$CallCompletionRoutine$30$label_20_icall_3$1#1:
+ goto inline$CallCompletionRoutine$30$anon14_Then#1, inline$CallCompletionRoutine$30$anon14_Else#1;
+
+ inline$CallCompletionRoutine$30$anon14_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$30$anon9#1;
+
+ inline$CallCompletionRoutine$30$anon9#1:
+ goto inline$CallCompletionRoutine$30$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$30$anon14_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$30$Return#1;
+
+ inline$CallCompletionRoutine$30$label_20_icall_2#1:
+ assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLDevicePowerIoCompletion;
+ havoc inline$CallCompletionRoutine$30$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$30$Entry#1;
+
+ inline$BDLDevicePowerIoCompletion$30$Entry#1:
+ inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4;
+ inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1 := inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLDevicePowerIoCompletion$30$start#1;
+
+ inline$BDLDevicePowerIoCompletion$30$start#1:
+ call inline$BDLDevicePowerIoCompletion$30$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12 := __HAVOC_malloc(8);
+ call inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$ := __HAVOC_malloc(4);
+ inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12_.1;
+ inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12_.1;
+ goto inline$BDLDevicePowerIoCompletion$30$label_3#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_3#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_4#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_4#1:
+ inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_5#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_5#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_6#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_6#1:
+ inline$BDLDevicePowerIoCompletion$30$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$Context$3$1655.24$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$30$label_7#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_7#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_8#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_8#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$30$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_9#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_9#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_10#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_10#1:
+ goto inline$IoGetCurrentIrpStackLocation$153$Entry#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$Entry#1:
+ inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1 := inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$IoGetCurrentIrpStackLocation$153$start#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$start#1:
+ inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4 := inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4_.1;
+ goto inline$IoGetCurrentIrpStackLocation$153$label_3#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_3#1:
+ goto inline$IoGetCurrentIrpStackLocation$153$label_3_true#1, inline$IoGetCurrentIrpStackLocation$153$label_3_false#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_3_false#1:
+ inline$IoGetCurrentIrpStackLocation$153$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$153$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume !INT_LEQ(inline$IoGetCurrentIrpStackLocation$153$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$153$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$153$label_4#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_4#1:
+ call inline$IoGetCurrentIrpStackLocation$153$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$153$label_6#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_6#1:
+ call inline$IoGetCurrentIrpStackLocation$153$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$IoGetCurrentIrpStackLocation$153$label_7#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_7#1:
+ goto inline$IoGetCurrentIrpStackLocation$153$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_3_true#1:
+ inline$IoGetCurrentIrpStackLocation$153$myVar_0 := Mem_0_T.CurrentLocation__IRP[CurrentLocation__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ inline$IoGetCurrentIrpStackLocation$153$myVar_1 := Mem_0_T.StackCount__IRP[StackCount__IRP(inline$IoGetCurrentIrpStackLocation$153$$Irp$1$24490.14$IoGetCurrentIrpStackLocation$4)];
+ call contextSwitch();
+ assume INT_LEQ(inline$IoGetCurrentIrpStackLocation$153$myVar_0, PLUS(inline$IoGetCurrentIrpStackLocation$153$myVar_1, 1, 1));
+ goto inline$IoGetCurrentIrpStackLocation$153$label_5#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_5#1:
+ havoc inline$IoGetCurrentIrpStackLocation$153$myNondetVar_0;
+ inline$IoGetCurrentIrpStackLocation$153$$result.IoGetCurrentIrpStackLocation$24489.0$1$ := inline$IoGetCurrentIrpStackLocation$153$myNondetVar_0;
+ goto inline$IoGetCurrentIrpStackLocation$153$label_1#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$label_1#1:
+ goto inline$IoGetCurrentIrpStackLocation$153$Return#1;
+
+ inline$IoGetCurrentIrpStackLocation$153$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.IoGetCurrentIrpStackLocation$1661.86$2$ := inline$IoGetCurrentIrpStackLocation$153$$result.IoGetCurrentIrpStackLocation$24489.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_10$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_10$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon30_Then#1, inline$BDLDevicePowerIoCompletion$30$anon30_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon30_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_13#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_13#1:
+ inline$BDLDevicePowerIoCompletion$30$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$result.IoGetCurrentIrpStackLocation$1661.86$2$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_14#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_14#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_15#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_15#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_16#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_16#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_17#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_17#1:
+ goto inline$BDLGetDebugLevel$783$Entry#1;
+
+ inline$BDLGetDebugLevel$783$Entry#1:
+ goto inline$BDLGetDebugLevel$783$start#1;
+
+ inline$BDLGetDebugLevel$783$start#1:
+ goto inline$BDLGetDebugLevel$783$label_3#1;
+
+ inline$BDLGetDebugLevel$783$label_3#1:
+ havoc inline$BDLGetDebugLevel$783$myNondetVar_0;
+ inline$BDLGetDebugLevel$783$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$783$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$783$label_1#1;
+
+ inline$BDLGetDebugLevel$783$label_1#1:
+ goto inline$BDLGetDebugLevel$783$Return#1;
+
+ inline$BDLGetDebugLevel$783$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$ := inline$BDLGetDebugLevel$783$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_17$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_17$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon31_Then#1, inline$BDLDevicePowerIoCompletion$30$anon31_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon31_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon3#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon3#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_20#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_20#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_20_true#1, inline$BDLDevicePowerIoCompletion$30$label_20_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_20_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_20_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$3$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_24#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_24#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_25#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_25#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_26#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_26#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_27#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_27#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$4$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_21#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_21#1:
+ goto inline$BDLGetDebugLevel$784$Entry#1;
+
+ inline$BDLGetDebugLevel$784$Entry#1:
+ goto inline$BDLGetDebugLevel$784$start#1;
+
+ inline$BDLGetDebugLevel$784$start#1:
+ goto inline$BDLGetDebugLevel$784$label_3#1;
+
+ inline$BDLGetDebugLevel$784$label_3#1:
+ havoc inline$BDLGetDebugLevel$784$myNondetVar_0;
+ inline$BDLGetDebugLevel$784$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$784$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$784$label_1#1;
+
+ inline$BDLGetDebugLevel$784$label_1#1:
+ goto inline$BDLGetDebugLevel$784$Return#1;
+
+ inline$BDLGetDebugLevel$784$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$ := inline$BDLGetDebugLevel$784$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_21$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_21$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon32_Then#1, inline$BDLDevicePowerIoCompletion$30$anon32_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon32_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon5#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon5#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_30#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_30#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_30_true#1, inline$BDLDevicePowerIoCompletion$30$label_30_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_30_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_30_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$8$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_34#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_34#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_35#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_35#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_36#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_36#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_37#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_37#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1665.0$9$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_31#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_31#1:
+ goto inline$BDLGetDebugLevel$785$Entry#1;
+
+ inline$BDLGetDebugLevel$785$Entry#1:
+ goto inline$BDLGetDebugLevel$785$start#1;
+
+ inline$BDLGetDebugLevel$785$start#1:
+ goto inline$BDLGetDebugLevel$785$label_3#1;
+
+ inline$BDLGetDebugLevel$785$label_3#1:
+ havoc inline$BDLGetDebugLevel$785$myNondetVar_0;
+ inline$BDLGetDebugLevel$785$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$785$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$785$label_1#1;
+
+ inline$BDLGetDebugLevel$785$label_1#1:
+ goto inline$BDLGetDebugLevel$785$Return#1;
+
+ inline$BDLGetDebugLevel$785$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$ := inline$BDLGetDebugLevel$785$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_31$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_31$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon33_Then#1, inline$BDLDevicePowerIoCompletion$30$anon33_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon33_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon7#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon7#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_40#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_40#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_40_true#1, inline$BDLDevicePowerIoCompletion$30$label_40_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_40_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_40_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1665.0$13$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_42#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_42#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_41#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_41#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_41_true#1, inline$BDLDevicePowerIoCompletion$30$label_41_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_41_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$30$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_41_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 2);
+ goto inline$BDLDevicePowerIoCompletion$30$label_44#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_44#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_44_true#1, inline$BDLDevicePowerIoCompletion$30$label_44_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_44_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_45#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_45#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_45_true#1, inline$BDLDevicePowerIoCompletion$30$label_45_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_45_false#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ assume !INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$30$label_43#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_43#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_45_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 5);
+ goto inline$BDLDevicePowerIoCompletion$30$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_44_true#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$myNondetVar_0;
+ assume INT_EQ(inline$BDLDevicePowerIoCompletion$30$myNondetVar_0, 1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_46#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_46#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$$result.memset$1683.8$14$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_49#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_49#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_50#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_50#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_51#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_51#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_54#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_54#1:
+ inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 := inline$BDLDevicePowerIoCompletion$30$$callresult.$1687.68$15$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_55#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_55#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_55_true#1, inline$BDLDevicePowerIoCompletion$30$label_55_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_55_false#1:
+ assume inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_56#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_56#1:
+ call inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$ := PoSetPowerState(inline$BDLDevicePowerIoCompletion$30$$pDeviceObject$1$1653.24$BDLDevicePowerIoCompletion$12, 1, State___unnamed_16_72a8bca0(Power___unnamed_16_357c4db4(Parameters__IO_STACK_LOCATION(inline$BDLDevicePowerIoCompletion$30$$pStackLocation$7$1661.36$BDLDevicePowerIoCompletion$12))));
+ goto inline$BDLDevicePowerIoCompletion$30$anon34_Then#1, inline$BDLDevicePowerIoCompletion$30$anon34_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon34_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon9#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon9#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon34_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_55_true#1:
+ assume inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12 != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_59#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_59#1:
+ goto inline$BDLGetDebugLevel$786$Entry#1;
+
+ inline$BDLGetDebugLevel$786$Entry#1:
+ goto inline$BDLGetDebugLevel$786$start#1;
+
+ inline$BDLGetDebugLevel$786$start#1:
+ goto inline$BDLGetDebugLevel$786$label_3#1;
+
+ inline$BDLGetDebugLevel$786$label_3#1:
+ havoc inline$BDLGetDebugLevel$786$myNondetVar_0;
+ inline$BDLGetDebugLevel$786$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$786$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$786$label_1#1;
+
+ inline$BDLGetDebugLevel$786$label_1#1:
+ goto inline$BDLGetDebugLevel$786$Return#1;
+
+ inline$BDLGetDebugLevel$786$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$ := inline$BDLGetDebugLevel$786$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_59$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_59$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon35_Then#1, inline$BDLDevicePowerIoCompletion$30$anon35_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon35_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon11#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon11#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_62#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_62#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_62_true#1, inline$BDLDevicePowerIoCompletion$30$label_62_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_62_false#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_62_true#1:
+ assume BIT_BAND(BIT_BAND(2, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$17$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_66#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_66#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_67#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_67#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_68#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_68#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_69#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_69#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$18$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_63#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_63#1:
+ goto inline$BDLGetDebugLevel$787$Entry#1;
+
+ inline$BDLGetDebugLevel$787$Entry#1:
+ goto inline$BDLGetDebugLevel$787$start#1;
+
+ inline$BDLGetDebugLevel$787$start#1:
+ goto inline$BDLGetDebugLevel$787$label_3#1;
+
+ inline$BDLGetDebugLevel$787$label_3#1:
+ havoc inline$BDLGetDebugLevel$787$myNondetVar_0;
+ inline$BDLGetDebugLevel$787$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$787$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$787$label_1#1;
+
+ inline$BDLGetDebugLevel$787$label_1#1:
+ goto inline$BDLGetDebugLevel$787$Return#1;
+
+ inline$BDLGetDebugLevel$787$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$ := inline$BDLGetDebugLevel$787$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_63$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_63$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon36_Then#1, inline$BDLDevicePowerIoCompletion$30$anon36_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon36_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon13#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon13#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_72#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_72#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_72_true#1, inline$BDLDevicePowerIoCompletion$30$label_72_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_72_false#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_72_true#1:
+ assume BIT_BAND(BIT_BAND(2, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$22$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_76#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_76#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_77#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_77#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_78#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_78#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_79#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_79#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1700.0$23$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_73#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_73#1:
+ goto inline$BDLGetDebugLevel$788$Entry#1;
+
+ inline$BDLGetDebugLevel$788$Entry#1:
+ goto inline$BDLGetDebugLevel$788$start#1;
+
+ inline$BDLGetDebugLevel$788$start#1:
+ goto inline$BDLGetDebugLevel$788$label_3#1;
+
+ inline$BDLGetDebugLevel$788$label_3#1:
+ havoc inline$BDLGetDebugLevel$788$myNondetVar_0;
+ inline$BDLGetDebugLevel$788$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$788$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$788$label_1#1;
+
+ inline$BDLGetDebugLevel$788$label_1#1:
+ goto inline$BDLGetDebugLevel$788$Return#1;
+
+ inline$BDLGetDebugLevel$788$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$ := inline$BDLGetDebugLevel$788$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_73$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_73$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon37_Then#1, inline$BDLDevicePowerIoCompletion$30$anon37_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon37_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon15#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon15#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_82#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_82#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_82_true#1, inline$BDLDevicePowerIoCompletion$30$label_82_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_82_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_82_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1700.0$27$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_84#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_84#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_83#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_83#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_85#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_85#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_86#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_86#1:
+ call IoReleaseRemoveLockEx(RemoveLock__BDL_INTERNAL_DEVICE_EXTENSION(inline$BDLDevicePowerIoCompletion$30$$pBDLExtension$6$1660.36$BDLDevicePowerIoCompletion$12), 1920429904, 88);
+ goto inline$BDLDevicePowerIoCompletion$30$anon38_Then#1, inline$BDLDevicePowerIoCompletion$30$anon38_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon38_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon17#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon17#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_89#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_89#1:
+ call PoStartNextPowerIrp(inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12);
+ goto inline$BDLDevicePowerIoCompletion$30$anon39_Then#1, inline$BDLDevicePowerIoCompletion$30$anon39_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon39_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon19#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon19#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_92#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_92#1:
+ goto inline$storm_IoCompleteRequest$62$Entry#1;
+
+ inline$storm_IoCompleteRequest$62$Entry#1:
+ inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8_.1 := inline$BDLDevicePowerIoCompletion$30$$pIrp$2$1654.24$BDLDevicePowerIoCompletion$12;
+ goto inline$storm_IoCompleteRequest$62$start#1;
+
+ inline$storm_IoCompleteRequest$62$start#1:
+ inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8 := inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8_.1;
+ goto inline$storm_IoCompleteRequest$62$label_3#1;
+
+ inline$storm_IoCompleteRequest$62$label_3#1:
+ call inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$ := storm_nondet();
+ goto inline$storm_IoCompleteRequest$62$label_6#1;
+
+ inline$storm_IoCompleteRequest$62$label_6#1:
+ goto inline$storm_IoCompleteRequest$62$label_6_true#1, inline$storm_IoCompleteRequest$62$label_6_false#1;
+
+ inline$storm_IoCompleteRequest$62$label_6_false#1:
+ assume inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$ == 0;
+ goto inline$storm_IoCompleteRequest$62$label_7#1;
+
+ inline$storm_IoCompleteRequest$62$label_6_true#1:
+ assume inline$storm_IoCompleteRequest$62$$result.storm_nondet$338.2$1$ != 0;
+ goto inline$storm_IoCompleteRequest$62$label_8#1;
+
+ inline$storm_IoCompleteRequest$62$label_8#1:
+ havoc raiseException;
+ goto inline$storm_IoCompleteRequest$62$anon3_Then#1, inline$storm_IoCompleteRequest$62$anon3_Else#1;
+
+ inline$storm_IoCompleteRequest$62$anon3_Else#1:
+ assume !raiseException;
+ goto inline$storm_IoCompleteRequest$62$anon1#1;
+
+ inline$storm_IoCompleteRequest$62$anon1#1:
+ assume k == 0 ==> INT_EQ(Res_0_COMPLETED[inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8], 1);
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$62$label_9#1;
+
+ inline$storm_IoCompleteRequest$62$label_9#1:
+ goto inline$storm_IoCompleteRequest$62$label_9_true#1, inline$storm_IoCompleteRequest$62$label_9_false#1;
+
+ inline$storm_IoCompleteRequest$62$label_9_false#1:
+ assume 0 == 0;
+ goto inline$storm_IoCompleteRequest$62$label_10#1;
+
+ inline$storm_IoCompleteRequest$62$label_10#1:
+ errorReached := true;
+ raiseException := true;
+ __storm_atomic := false;
+ __storm_init := false;
+ goto inline$storm_IoCompleteRequest$62$label_1#1;
+
+ inline$storm_IoCompleteRequest$62$label_9_true#1:
+ assume 0 != 0;
+ goto inline$storm_IoCompleteRequest$62$label_7#1;
+
+ inline$storm_IoCompleteRequest$62$label_7#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$storm_IoCompleteRequest$62$$pirp$1$334.10$storm_IoCompleteRequest$8 := 1];
+ call contextSwitch();
+ goto inline$storm_IoCompleteRequest$62$label_1#1;
+
+ inline$storm_IoCompleteRequest$62$label_1#1:
+ goto inline$storm_IoCompleteRequest$62$Return#1;
+
+ inline$storm_IoCompleteRequest$62$anon3_Then#1:
+ assume raiseException;
+ goto inline$storm_IoCompleteRequest$62$Return#1;
+
+ inline$storm_IoCompleteRequest$62$Return#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_92$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_92$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon40_Then#1, inline$BDLDevicePowerIoCompletion$30$anon40_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon40_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon21#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon21#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_95#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_95#1:
+ call ExFreePoolWithTag(inline$BDLDevicePowerIoCompletion$30$$pPowerIrpContext$5$1659.37$BDLDevicePowerIoCompletion$12, 541869122);
+ goto inline$BDLDevicePowerIoCompletion$30$anon41_Then#1, inline$BDLDevicePowerIoCompletion$30$anon41_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon41_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon23#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon23#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_98#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_98#1:
+ goto inline$BDLGetDebugLevel$789$Entry#1;
+
+ inline$BDLGetDebugLevel$789$Entry#1:
+ goto inline$BDLGetDebugLevel$789$start#1;
+
+ inline$BDLGetDebugLevel$789$start#1:
+ goto inline$BDLGetDebugLevel$789$label_3#1;
+
+ inline$BDLGetDebugLevel$789$label_3#1:
+ havoc inline$BDLGetDebugLevel$789$myNondetVar_0;
+ inline$BDLGetDebugLevel$789$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$789$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$789$label_1#1;
+
+ inline$BDLGetDebugLevel$789$label_1#1:
+ goto inline$BDLGetDebugLevel$789$Return#1;
+
+ inline$BDLGetDebugLevel$789$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$ := inline$BDLGetDebugLevel$789$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_98$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_98$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon42_Then#1, inline$BDLDevicePowerIoCompletion$30$anon42_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon42_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon25#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon25#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_101#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_101#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_101_true#1, inline$BDLDevicePowerIoCompletion$30$label_101_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_101_false#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_101_true#1:
+ assume BIT_BAND(BIT_BAND(1, 1), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$28$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_105#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_105#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_106#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_106#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_107#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_107#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_108#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_108#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$29$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_102#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_102#1:
+ goto inline$BDLGetDebugLevel$790$Entry#1;
+
+ inline$BDLGetDebugLevel$790$Entry#1:
+ goto inline$BDLGetDebugLevel$790$start#1;
+
+ inline$BDLGetDebugLevel$790$start#1:
+ goto inline$BDLGetDebugLevel$790$label_3#1;
+
+ inline$BDLGetDebugLevel$790$label_3#1:
+ havoc inline$BDLGetDebugLevel$790$myNondetVar_0;
+ inline$BDLGetDebugLevel$790$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$790$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$790$label_1#1;
+
+ inline$BDLGetDebugLevel$790$label_1#1:
+ goto inline$BDLGetDebugLevel$790$Return#1;
+
+ inline$BDLGetDebugLevel$790$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$ := inline$BDLGetDebugLevel$790$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_102$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_102$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon43_Then#1, inline$BDLDevicePowerIoCompletion$30$anon43_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon43_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon27#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon27#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_111#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_111#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_111_true#1, inline$BDLDevicePowerIoCompletion$30$label_111_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_111_false#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_111_true#1:
+ assume BIT_BAND(BIT_BAND(1, 2), inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$33$) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_115#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_115#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_116#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_116#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_117#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_117#1:
+ call inline$BDLDevicePowerIoCompletion$30$havoc_stringTemp := __HAVOC_malloc(1);
+ goto inline$BDLDevicePowerIoCompletion$30$label_118#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_118#1:
+ havoc inline$BDLDevicePowerIoCompletion$30$$result.DbgPrint$1723.0$34$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_112#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_112#1:
+ goto inline$BDLGetDebugLevel$791$Entry#1;
+
+ inline$BDLGetDebugLevel$791$Entry#1:
+ goto inline$BDLGetDebugLevel$791$start#1;
+
+ inline$BDLGetDebugLevel$791$start#1:
+ goto inline$BDLGetDebugLevel$791$label_3#1;
+
+ inline$BDLGetDebugLevel$791$label_3#1:
+ havoc inline$BDLGetDebugLevel$791$myNondetVar_0;
+ inline$BDLGetDebugLevel$791$$result.BDLGetDebugLevel$39.0$1$ := inline$BDLGetDebugLevel$791$myNondetVar_0;
+ goto inline$BDLGetDebugLevel$791$label_1#1;
+
+ inline$BDLGetDebugLevel$791$label_1#1:
+ goto inline$BDLGetDebugLevel$791$Return#1;
+
+ inline$BDLGetDebugLevel$791$Return#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$ := inline$BDLGetDebugLevel$791$$result.BDLGetDebugLevel$39.0$1$;
+ goto inline$BDLDevicePowerIoCompletion$30$label_112$1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_112$1#1:
+ goto inline$BDLDevicePowerIoCompletion$30$anon44_Then#1, inline$BDLDevicePowerIoCompletion$30$anon44_Else#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon44_Else#1:
+ assume !raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$anon29#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon29#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_121#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_121#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_121_true#1, inline$BDLDevicePowerIoCompletion$30$label_121_false#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_121_false#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$, 4) == 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_121_true#1:
+ assume BIT_BAND(inline$BDLDevicePowerIoCompletion$30$$result.BDLGetDebugLevel$1723.0$38$, 4) != 0;
+ goto inline$BDLDevicePowerIoCompletion$30$label_123#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_123#1:
+ goto inline$BDLDevicePowerIoCompletion$30$label_122#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_122#1:
+ inline$BDLDevicePowerIoCompletion$30$$result.BDLDevicePowerIoCompletion$1651.0$1$ := inline$BDLDevicePowerIoCompletion$30$$status$4$1658.36$BDLDevicePowerIoCompletion$12;
+ goto inline$BDLDevicePowerIoCompletion$30$label_1#1;
+
+ inline$BDLDevicePowerIoCompletion$30$label_1#1:
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$30$$bdsiSetPowerStateParams$9$1663.36$BDLDevicePowerIoCompletion$12);
+ call __HAVOC_free(inline$BDLDevicePowerIoCompletion$30$$result.PoSetPowerState$1693.27$16$);
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon44_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon43_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon42_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon41_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon40_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon39_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon38_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon37_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon36_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon35_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon33_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon32_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon31_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$anon30_Then#1:
+ assume raiseException;
+ goto inline$BDLDevicePowerIoCompletion$30$Return#1;
+
+ inline$BDLDevicePowerIoCompletion$30$Return#1:
+ inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$ := inline$BDLDevicePowerIoCompletion$30$$result.BDLDevicePowerIoCompletion$1651.0$1$;
+ goto inline$CallCompletionRoutine$30$label_20_icall_2$1#1;
+
+ inline$CallCompletionRoutine$30$label_20_icall_2$1#1:
+ goto inline$CallCompletionRoutine$30$anon13_Then#1, inline$CallCompletionRoutine$30$anon13_Else#1;
+
+ inline$CallCompletionRoutine$30$anon13_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$30$anon7#1;
+
+ inline$CallCompletionRoutine$30$anon7#1:
+ goto inline$CallCompletionRoutine$30$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$30$anon13_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$30$Return#1;
+
+ inline$CallCompletionRoutine$30$label_20_icall_1#1:
+ assume inline$CallCompletionRoutine$30$$completionRoutine$4$437.25$CallCompletionRoutine$4 == BDLCallDriverCompletionRoutine;
+ havoc inline$CallCompletionRoutine$30$myNondetVar_0;
+ goto inline$BDLCallDriverCompletionRoutine$30$Entry#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$Entry#1:
+ inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1 := inline$CallCompletionRoutine$30$$context$2$435.8$CallCompletionRoutine$4;
+ goto inline$BDLCallDriverCompletionRoutine$30$start#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$start#1:
+ inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12 := inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12_.1;
+ goto inline$BDLCallDriverCompletionRoutine$30$label_3#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_3#1:
+ goto inline$BDLCallDriverCompletionRoutine$30$label_3_true#1, inline$BDLCallDriverCompletionRoutine$30$label_3_false#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_3_false#1:
+ havoc inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0 == 0;
+ goto inline$BDLCallDriverCompletionRoutine$30$label_4#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_4#1:
+ goto inline$BDLCallDriverCompletionRoutine$30$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_3_true#1:
+ havoc inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0;
+ assume inline$BDLCallDriverCompletionRoutine$30$myNondetVar_0 != 0;
+ goto inline$BDLCallDriverCompletionRoutine$30$label_5#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_5#1:
+ goto inline$BDLCallDriverCompletionRoutine$30$label_6#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_6#1:
+ goto inline$storm_KeSetEvent$34$Entry#1;
+
+ inline$storm_KeSetEvent$34$Entry#1:
+ inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12_.1 := inline$BDLCallDriverCompletionRoutine$30$$pEvent$3$50.24$BDLCallDriverCompletionRoutine$12;
+ goto inline$storm_KeSetEvent$34$start#1;
+
+ inline$storm_KeSetEvent$34$start#1:
+ inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12 := inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12_.1;
+ goto inline$storm_KeSetEvent$34$label_3#1;
+
+ inline$storm_KeSetEvent$34$label_3#1:
+ Res_0_EVENT := Res_0_EVENT[inline$storm_KeSetEvent$34$$Event$1$213.14$storm_KeSetEvent$12 := 1];
+ call contextSwitch();
+ goto inline$storm_KeSetEvent$34$label_1#1;
+
+ inline$storm_KeSetEvent$34$label_1#1:
+ goto inline$storm_KeSetEvent$34$Return#1;
+
+ inline$storm_KeSetEvent$34$Return#1:
+ goto inline$BDLCallDriverCompletionRoutine$30$label_6$1#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_6$1#1:
+ goto inline$BDLCallDriverCompletionRoutine$30$anon2_Then#1, inline$BDLCallDriverCompletionRoutine$30$anon2_Else#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$anon2_Else#1:
+ assume !raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$30$anon1#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$anon1#1:
+ goto inline$BDLCallDriverCompletionRoutine$30$label_9#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_9#1:
+ inline$BDLCallDriverCompletionRoutine$30$$result.BDLCallDriverCompletionRoutine$46.0$1$ := 0 - 1073741802;
+ goto inline$BDLCallDriverCompletionRoutine$30$label_1#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$label_1#1:
+ goto inline$BDLCallDriverCompletionRoutine$30$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$anon2_Then#1:
+ assume raiseException;
+ goto inline$BDLCallDriverCompletionRoutine$30$Return#1;
+
+ inline$BDLCallDriverCompletionRoutine$30$Return#1:
+ inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$ := inline$BDLCallDriverCompletionRoutine$30$$result.BDLCallDriverCompletionRoutine$46.0$1$;
+ goto inline$CallCompletionRoutine$30$label_20_icall_1$1#1;
+
+ inline$CallCompletionRoutine$30$label_20_icall_1$1#1:
+ goto inline$CallCompletionRoutine$30$anon12_Then#1, inline$CallCompletionRoutine$30$anon12_Else#1;
+
+ inline$CallCompletionRoutine$30$anon12_Else#1:
+ assume !raiseException;
+ goto inline$CallCompletionRoutine$30$anon5#1;
+
+ inline$CallCompletionRoutine$30$anon5#1:
+ goto inline$CallCompletionRoutine$30$label_20_icall_return#1;
+
+ inline$CallCompletionRoutine$30$label_20_icall_return#1:
+ goto inline$CallCompletionRoutine$30$label_23#1;
+
+ inline$CallCompletionRoutine$30$label_23#1:
+ inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4 := inline$CallCompletionRoutine$30$$result.completionRoutine$448.30$3$;
+ goto inline$CallCompletionRoutine$30$label_24#1;
+
+ inline$CallCompletionRoutine$30$label_24#1:
+ goto inline$CallCompletionRoutine$30$label_24_true#1, inline$CallCompletionRoutine$30$label_24_false#1;
+
+ inline$CallCompletionRoutine$30$label_24_false#1:
+ assume !INT_NEQ(inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$30$label_1#1;
+
+ inline$CallCompletionRoutine$30$label_24_true#1:
+ assume INT_NEQ(inline$CallCompletionRoutine$30$$status$5$438.11$CallCompletionRoutine$4, 0 - 1073741802);
+ goto inline$CallCompletionRoutine$30$label_25#1;
+
+ inline$CallCompletionRoutine$30$label_25#1:
+ Res_0_COMPLETED := Res_0_COMPLETED[inline$CallCompletionRoutine$30$$Irp$1$434.32$CallCompletionRoutine$4 := 1];
+ call contextSwitch();
+ goto inline$CallCompletionRoutine$30$label_1#1;
+
+ inline$CallCompletionRoutine$30$label_1#1:
+ goto inline$CallCompletionRoutine$30$Return#1;
+
+ inline$CallCompletionRoutine$30$anon12_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$30$Return#1;
+
+ inline$CallCompletionRoutine$30$anon11_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$30$Return#1;
+
+ inline$CallCompletionRoutine$30$anon10_Then#1:
+ assume raiseException;
+ goto inline$CallCompletionRoutine$30$Return#1;
+
+ inline$CallCompletionRoutine$30$Return#1:
+ goto inline$storm_thread_completion$0$label_4$1#1;
+
+ inline$storm_thread_completion$0$label_4$1#1:
+ call contextSwitch();
+ goto inline$storm_thread_completion$0$anon5_Then#1, inline$storm_thread_completion$0$anon5_Else#1;
+
+ inline$storm_thread_completion$0$anon5_Else#1:
+ assume !raiseException;
+ goto inline$storm_thread_completion$0$anon3#1;
+
+ inline$storm_thread_completion$0$anon3#1:
+ goto inline$storm_thread_completion$0$label_1#1;
+
+ inline$storm_thread_completion$0$label_1#1:
+ __storm_thread_done_2 := true;
+ goto inline$storm_thread_completion$0$Return#1;
+
+ inline$storm_thread_completion$0$anon5_Then#1:
+ assume raiseException;
+ goto inline$storm_thread_completion$0$Return#1;
+
+ inline$storm_thread_completion$0$anon4_Then#1:
+ assume raiseException;
+ goto inline$storm_thread_completion$0$Return#1;
+
+ inline$storm_thread_completion$0$Return#1:
+ goto label_38$1#1;
+
+ label_38$1#1:
+ goto label_1#1;
+
+ label_1#1:
+ assert !errorReached;
+ return;
+
+ anon14_Then#1:
+ assume raiseException;
+ return;
+
+ anon13_Then#1:
+ assume raiseException;
+ return;
+
+ anon12_Then#1:
+ assume raiseException;
+ return;
+
+ anon11_Then#1:
+ assume raiseException;
+ return;
+
+ anon10_Then#1:
+ assume raiseException;
+ return;
+}
+
+
+
diff --git a/Test/lock/Lock.bpl b/Test/lock/Lock.bpl
index 54cd4853..515be9f0 100644
--- a/Test/lock/Lock.bpl
+++ b/Test/lock/Lock.bpl
@@ -1,124 +1,124 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure LockingExample();
-
-implementation LockingExample()
-{
-var x: int;
-var y: int;
-var held: int;
-
-start:
- held := 0;
- x := 0;
- goto LoopHead;
-
-LoopHead:
- // Lock
- assert held == 0;
- held := 1;
-
- y := x;
- goto UnlockNow, LoopEnd;
-
-UnlockNow:
- // Unlock
- assert held == 1;
- held := 0;
-
- x := x + 1;
- goto LoopEnd;
-
-LoopEnd:
- goto ContinueIteration, EndIteration;
-
-ContinueIteration:
- assume x != y;
- goto LoopHead;
-
-EndIteration:
- assume x == y;
- goto AfterLoop;
-
-AfterLoop:
- // Unlock
- assert held == 1;
- held := 0;
-
- return;
-
-}
-
-
-procedure StructuredLockingExample()
-{
- var x: int;
- var y: int;
- var held: bool;
-
- held := false;
- x := 0;
-
- while (true)
- invariant !held;
- {
- // Lock
- assert !held;
- held := true;
-
- y := x;
- if (*) {
- // Unlock
- assert held;
- held := false;
-
- x := x + 1;
- }
-
- if (x == y) { break; }
- }
-
- // Unlock
- assert held;
- held := false;
-}
-
-procedure StructuredLockingExampleWithCalls()
-{
- var x: int;
- var y: int;
- var mutex: Mutex;
-
- call mutex := Initialize();
- x := 0;
-
- while (true)
- invariant !IsHeld(mutex);
- {
- call mutex := Acquire(mutex);
-
- y := x;
- if (*) {
- call mutex := Release(mutex);
- x := x + 1;
- }
-
- if (x == y) { break; }
- }
-
- call mutex := Release(mutex);
-}
-
-type Mutex;
-function IsHeld(Mutex) returns (bool);
-
-procedure Initialize() returns (post: Mutex);
- ensures !IsHeld(post);
-
-procedure Acquire(pre: Mutex) returns (post: Mutex);
- requires !IsHeld(pre);
- ensures IsHeld(post);
-
-procedure Release(pre: Mutex) returns (post: Mutex);
- requires IsHeld(pre);
- ensures !IsHeld(post);
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure LockingExample();
+
+implementation LockingExample()
+{
+var x: int;
+var y: int;
+var held: int;
+
+start:
+ held := 0;
+ x := 0;
+ goto LoopHead;
+
+LoopHead:
+ // Lock
+ assert held == 0;
+ held := 1;
+
+ y := x;
+ goto UnlockNow, LoopEnd;
+
+UnlockNow:
+ // Unlock
+ assert held == 1;
+ held := 0;
+
+ x := x + 1;
+ goto LoopEnd;
+
+LoopEnd:
+ goto ContinueIteration, EndIteration;
+
+ContinueIteration:
+ assume x != y;
+ goto LoopHead;
+
+EndIteration:
+ assume x == y;
+ goto AfterLoop;
+
+AfterLoop:
+ // Unlock
+ assert held == 1;
+ held := 0;
+
+ return;
+
+}
+
+
+procedure StructuredLockingExample()
+{
+ var x: int;
+ var y: int;
+ var held: bool;
+
+ held := false;
+ x := 0;
+
+ while (true)
+ invariant !held;
+ {
+ // Lock
+ assert !held;
+ held := true;
+
+ y := x;
+ if (*) {
+ // Unlock
+ assert held;
+ held := false;
+
+ x := x + 1;
+ }
+
+ if (x == y) { break; }
+ }
+
+ // Unlock
+ assert held;
+ held := false;
+}
+
+procedure StructuredLockingExampleWithCalls()
+{
+ var x: int;
+ var y: int;
+ var mutex: Mutex;
+
+ call mutex := Initialize();
+ x := 0;
+
+ while (true)
+ invariant !IsHeld(mutex);
+ {
+ call mutex := Acquire(mutex);
+
+ y := x;
+ if (*) {
+ call mutex := Release(mutex);
+ x := x + 1;
+ }
+
+ if (x == y) { break; }
+ }
+
+ call mutex := Release(mutex);
+}
+
+type Mutex;
+function IsHeld(Mutex) returns (bool);
+
+procedure Initialize() returns (post: Mutex);
+ ensures !IsHeld(post);
+
+procedure Acquire(pre: Mutex) returns (post: Mutex);
+ requires !IsHeld(pre);
+ ensures IsHeld(post);
+
+procedure Release(pre: Mutex) returns (post: Mutex);
+ requires IsHeld(pre);
+ ensures !IsHeld(post);
diff --git a/Test/lock/LockIncorrect.bpl b/Test/lock/LockIncorrect.bpl
index 4bd86bbe..db5c4b1a 100644
--- a/Test/lock/LockIncorrect.bpl
+++ b/Test/lock/LockIncorrect.bpl
@@ -1,53 +1,53 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure LockingExample();
-
-implementation LockingExample()
-{
-var x: int;
-var y: int;
-var held: int;
-
-start:
- held := 0;
- x := 0;
- goto LoopHead;
-
-LoopHead:
- // Lock
- held := held + 6;
- assert held == 0;
- held := 1;
-
- y := x;
- goto UnlockNow, LoopEnd;
-
-UnlockNow:
- // Unlock
- assert held == 1;
- held := 0;
-
- x := x + 1;
- goto LoopEnd;
-
-LoopEnd:
- goto ContinueIteration, EndIteration;
-
-ContinueIteration:
- assume x != y;
- goto LoopHead;
-
-EndIteration:
- assume x == y;
- goto AfterLoop;
-
-AfterLoop:
- // Unlock
- assert held == 1;
- held := 0;
-
- return;
-
-}
-
-
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure LockingExample();
+
+implementation LockingExample()
+{
+var x: int;
+var y: int;
+var held: int;
+
+start:
+ held := 0;
+ x := 0;
+ goto LoopHead;
+
+LoopHead:
+ // Lock
+ held := held + 6;
+ assert held == 0;
+ held := 1;
+
+ y := x;
+ goto UnlockNow, LoopEnd;
+
+UnlockNow:
+ // Unlock
+ assert held == 1;
+ held := 0;
+
+ x := x + 1;
+ goto LoopEnd;
+
+LoopEnd:
+ goto ContinueIteration, EndIteration;
+
+ContinueIteration:
+ assume x != y;
+ goto LoopHead;
+
+EndIteration:
+ assume x == y;
+ goto AfterLoop;
+
+AfterLoop:
+ // Unlock
+ assert held == 1;
+ held := 0;
+
+ return;
+
+}
+
+
diff --git a/Test/og/DeviceCache.bpl.expect b/Test/og/DeviceCache.bpl.expect
deleted file mode 100644
index 9ec7a92d..00000000
--- a/Test/og/DeviceCache.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 30 verified, 0 errors
diff --git a/Test/og/Program1.bpl.expect b/Test/og/Program1.bpl.expect
deleted file mode 100644
index 3de74d3e..00000000
--- a/Test/og/Program1.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 2 verified, 0 errors
diff --git a/Test/og/Program2.bpl.expect b/Test/og/Program2.bpl.expect
deleted file mode 100644
index 5b2909f1..00000000
--- a/Test/og/Program2.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 3 verified, 0 errors
diff --git a/Test/og/Program4.bpl b/Test/og/Program4.bpl
deleted file mode 100644
index 7f2f9c44..00000000
--- a/Test/og/Program4.bpl
+++ /dev/null
@@ -1,68 +0,0 @@
-// RUN: %boogie -noinfer -typeEncoding:m -useArrayTheory "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type Tid;
-var {:layer 0,1} a:[Tid]int;
-
-procedure {:yields} {:layer 1} main() {
- var {:linear "tid"} tid:Tid;
-
- yield;
- while (true) {
- call tid := Allocate();
- async call P(tid);
- yield;
- }
- yield;
-}
-
-procedure {:yields} {:layer 1} P({:linear "tid"} tid: Tid)
-ensures {:layer 1} a[tid] == old(a)[tid] + 1;
-{
- var t:int;
-
- yield;
- assert {:layer 1} a[tid] == old(a)[tid];
- call t := Read(tid);
- yield;
- assert {:layer 1} a[tid] == t;
- call Write(tid, t + 1);
- yield;
- assert {:layer 1} a[tid] == t + 1;
-}
-
-procedure {:yields} {:layer 1} Allocate() returns ({:linear "tid"} tid: Tid)
-{
- yield;
- call tid := AllocateLow();
- yield;
-}
-
-procedure {:yields} {:layer 0,1} Read({:linear "tid"} tid: Tid) returns (val: int);
-ensures {:atomic}
-|{A:
- val := a[tid]; return true;
-}|;
-
-procedure {:yields} {:layer 0,1} Write({:linear "tid"} tid: Tid, val: int);
-ensures {:atomic}
-|{A:
- a[tid] := val; return true;
-}|;
-
-procedure {:yields} {:layer 0,1} AllocateLow() returns ({:linear "tid"} tid: Tid);
-ensures {:atomic} |{ A: return true; }|;
-
-
-
-function {:builtin "MapConst"} MapConstBool(bool): [Tid]bool;
-function {:builtin "MapOr"} MapOr([Tid]bool, [Tid]bool) : [Tid]bool;
-
-function {:inline} {:linear "tid"} TidCollector(x: Tid) : [Tid]bool
-{
- MapConstBool(false)[x := true]
-}
-function {:inline} {:linear "tid"} TidSetCollector(x: [Tid]bool) : [Tid]bool
-{
- x
-}
-
diff --git a/Test/og/Program4.bpl.expect b/Test/og/Program4.bpl.expect
deleted file mode 100644
index 5b2909f1..00000000
--- a/Test/og/Program4.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 3 verified, 0 errors
diff --git a/Test/og/Program5.bpl.expect b/Test/og/Program5.bpl.expect
deleted file mode 100644
index d7c0ff95..00000000
--- a/Test/og/Program5.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 18 verified, 0 errors
diff --git a/Test/og/civl-paper.bpl.expect b/Test/og/civl-paper.bpl.expect
deleted file mode 100644
index 4bcd03fb..00000000
--- a/Test/og/civl-paper.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 35 verified, 0 errors
diff --git a/Test/og/linear-set2.bpl.expect b/Test/og/linear-set2.bpl.expect
deleted file mode 100644
index fef5ddc0..00000000
--- a/Test/og/linear-set2.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 4 verified, 0 errors
diff --git a/Test/og/lock.bpl.expect b/Test/og/lock.bpl.expect
deleted file mode 100644
index 05d394c7..00000000
--- a/Test/og/lock.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 5 verified, 0 errors
diff --git a/Test/og/lock2.bpl.expect b/Test/og/lock2.bpl.expect
deleted file mode 100644
index 05d394c7..00000000
--- a/Test/og/lock2.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 5 verified, 0 errors
diff --git a/Test/og/multiset.bpl.expect b/Test/og/multiset.bpl.expect
deleted file mode 100644
index d72077a6..00000000
--- a/Test/og/multiset.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 78 verified, 0 errors
diff --git a/Test/og/parallel2.bpl.expect b/Test/og/parallel2.bpl.expect
deleted file mode 100644
index 05d394c7..00000000
--- a/Test/og/parallel2.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 5 verified, 0 errors
diff --git a/Test/og/parallel5.bpl.expect b/Test/og/parallel5.bpl.expect
deleted file mode 100644
index 05d394c7..00000000
--- a/Test/og/parallel5.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 5 verified, 0 errors
diff --git a/Test/og/ticket.bpl.expect b/Test/og/ticket.bpl.expect
deleted file mode 100644
index 28c26eab..00000000
--- a/Test/og/ticket.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 16 verified, 0 errors
diff --git a/Test/og/wsq.bpl.expect b/Test/og/wsq.bpl.expect
deleted file mode 100644
index 5b2909f1..00000000
--- a/Test/og/wsq.bpl.expect
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Boogie program verifier finished with 3 verified, 0 errors
diff --git a/Test/optimization/Optimization0.bpl b/Test/optimization/Optimization0.bpl
new file mode 100644
index 00000000..24424e53
--- /dev/null
+++ b/Test/optimization/Optimization0.bpl
@@ -0,0 +1,84 @@
+// RUN: %boogie /printModel:4 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+function may_fail(f: int) : bool;
+
+procedure test0()
+{
+ var x: int;
+
+ havoc x;
+ assume 42 < x;
+ assume {:minimize x} true;
+ assert may_fail(x);
+}
+
+procedure test1()
+{
+ var x: int;
+
+ x := 24;
+ if (*) {
+ x := 42;
+ }
+ assume {:minimize x} true;
+ assert may_fail(x);
+}
+
+procedure test2()
+{
+ var x: int;
+
+ x := 1;
+ while (*) {
+ x := x + 1;
+ }
+ assume {:minimize x} true;
+ assert x < 10;
+}
+
+procedure test3()
+{
+ var x: int;
+
+ havoc x;
+ assume x < 42;
+ assume {:maximize x} true;
+ assert may_fail(x);
+}
+
+procedure test4()
+{
+ var x: int;
+
+ x := 24;
+ if (*) {
+ x := 42;
+ }
+ assume {:maximize x} true;
+ assert may_fail(x);
+}
+
+procedure test5()
+{
+ var x: int;
+
+ x := 1;
+ while (*) {
+ x := x - 1;
+ }
+ assume {:maximize x} true;
+ assert x < 1;
+}
+
+procedure test6()
+{
+ var x: int;
+
+ x := 1;
+ if (*) {
+ x := 2;
+ }
+ assume {:maximize x} true;
+ assert may_fail(x);
+}
diff --git a/Test/optimization/Optimization0.bpl.expect b/Test/optimization/Optimization0.bpl.expect
new file mode 100644
index 00000000..f5a51848
--- /dev/null
+++ b/Test/optimization/Optimization0.bpl.expect
@@ -0,0 +1,135 @@
+*** MODEL
+%lbl%@280 -> false
+%lbl%+260 -> true
+%lbl%+39 -> true
+x@0 -> 43
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+may_fail -> {
+ 43 -> false
+ else -> false
+}
+*** END_MODEL
+Optimization0.bpl(13,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization0.bpl(10,5): anon0
+*** MODEL
+%lbl%@321 -> false
+%lbl%+299 -> true
+%lbl%+66 -> true
+%lbl%+68 -> true
+x@0@@0 -> 24
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+may_fail -> {
+ 24 -> false
+ else -> false
+}
+*** END_MODEL
+Optimization0.bpl(25,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization0.bpl(20,7): anon0
+ Optimization0.bpl(21,5): anon3_Else
+ Optimization0.bpl(24,5): anon2
+*** MODEL
+%lbl%@353 -> false
+%lbl%+335 -> true
+%lbl%+95 -> true
+%lbl%+99 -> true
+x@0@@1 -> 10
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+*** END_MODEL
+Optimization0.bpl(37,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization0.bpl(32,7): anon0
+ Optimization0.bpl(33,5): anon3_LoopHead
+ Optimization0.bpl(33,5): anon3_LoopDone
+*** MODEL
+%lbl%@386 -> false
+%lbl%+122 -> true
+%lbl%+375 -> true
+x@0@@2 -> 41
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+may_fail -> {
+ 41 -> false
+ else -> false
+}
+*** END_MODEL
+Optimization0.bpl(47,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization0.bpl(44,5): anon0
+*** MODEL
+%lbl%@414 -> false
+%lbl%+147 -> true
+%lbl%+151 -> true
+%lbl%+392 -> true
+x@0@@3 -> 42
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+may_fail -> {
+ 42 -> false
+ else -> false
+}
+*** END_MODEL
+Optimization0.bpl(59,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization0.bpl(54,7): anon0
+ Optimization0.bpl(56,11): anon3_Then
+ Optimization0.bpl(58,5): anon2
+*** MODEL
+%lbl%@446 -> false
+%lbl%+178 -> true
+%lbl%+182 -> true
+%lbl%+428 -> true
+x@0@@4 -> 1
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+*** END_MODEL
+Optimization0.bpl(71,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization0.bpl(66,7): anon0
+ Optimization0.bpl(67,5): anon3_LoopHead
+ Optimization0.bpl(67,5): anon3_LoopDone
+*** MODEL
+%lbl%@490 -> false
+%lbl%+209 -> true
+%lbl%+213 -> true
+%lbl%+468 -> true
+x@0@@5 -> 2
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+may_fail -> {
+ 2 -> false
+ else -> false
+}
+*** END_MODEL
+Optimization0.bpl(83,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization0.bpl(78,7): anon0
+ Optimization0.bpl(80,11): anon3_Then
+ Optimization0.bpl(82,5): anon2
+
+Boogie program verifier finished with 0 verified, 7 errors
diff --git a/Test/optimization/Optimization1.bpl b/Test/optimization/Optimization1.bpl
new file mode 100644
index 00000000..60df1edd
--- /dev/null
+++ b/Test/optimization/Optimization1.bpl
@@ -0,0 +1,32 @@
+// RUN: %boogie /noVerify /printModel:4 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0(n: int)
+{
+ assume {:minimize} true;
+}
+
+procedure test1(n: int)
+{
+ assume {:maximize} true;
+}
+
+procedure test2(n: int)
+{
+ assume {:minimize n, n} true;
+}
+
+procedure test3(n: int)
+{
+ assume {:maximize n, n} true;
+}
+
+procedure test4(n: int)
+{
+ assume {:minimize true} true;
+}
+
+procedure test5(n: int)
+{
+ assume {:maximize true} true;
+}
diff --git a/Test/optimization/Optimization1.bpl.expect b/Test/optimization/Optimization1.bpl.expect
new file mode 100644
index 00000000..d8508807
--- /dev/null
+++ b/Test/optimization/Optimization1.bpl.expect
@@ -0,0 +1,5 @@
+Optimization1.bpl(6,11): Error: attributes :minimize and :maximize accept only one argument
+Optimization1.bpl(11,11): Error: attributes :minimize and :maximize accept only one argument
+Optimization1.bpl(16,11): Error: attributes :minimize and :maximize accept only one argument
+Optimization1.bpl(21,11): Error: attributes :minimize and :maximize accept only one argument
+4 name resolution errors detected in Optimization1.bpl
diff --git a/Test/optimization/Optimization2.bpl b/Test/optimization/Optimization2.bpl
new file mode 100644
index 00000000..7d80d735
--- /dev/null
+++ b/Test/optimization/Optimization2.bpl
@@ -0,0 +1,12 @@
+// RUN: %boogie /noVerify /printModel:4 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0(n: int)
+{
+ assume {:minimize true} true;
+}
+
+procedure test1(n: int)
+{
+ assume {:maximize true} true;
+}
diff --git a/Test/optimization/Optimization2.bpl.expect b/Test/optimization/Optimization2.bpl.expect
new file mode 100644
index 00000000..cab2fd3d
--- /dev/null
+++ b/Test/optimization/Optimization2.bpl.expect
@@ -0,0 +1,3 @@
+Optimization2.bpl(6,11): Error: attributes :minimize and :maximize accept only one argument of type int, real or bv
+Optimization2.bpl(11,11): Error: attributes :minimize and :maximize accept only one argument of type int, real or bv
+2 type checking errors detected in Optimization2.bpl
diff --git a/Test/optimization/Optimization3.bpl b/Test/optimization/Optimization3.bpl
new file mode 100644
index 00000000..02499c31
--- /dev/null
+++ b/Test/optimization/Optimization3.bpl
@@ -0,0 +1,20 @@
+// RUN: %boogie /printModel:4 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0()
+{
+ var x: int;
+
+ assume x < 42;
+ assume {:maximize x} true;
+ assert (exists y: int :: y < x);
+}
+
+procedure test1()
+{
+ var x: int;
+
+ assume x < 42;
+ assume {:maximize x} true;
+ assert (forall y: int :: y < x);
+}
diff --git a/Test/optimization/Optimization3.bpl.expect b/Test/optimization/Optimization3.bpl.expect
new file mode 100644
index 00000000..6a0066fc
--- /dev/null
+++ b/Test/optimization/Optimization3.bpl.expect
@@ -0,0 +1,31 @@
+*** MODEL
+%lbl%@80 -> false
+%lbl%+33 -> true
+%lbl%+61 -> true
+x -> 41
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+*** END_MODEL
+Optimization3.bpl(10,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization3.bpl(8,5): anon0
+*** MODEL
+%lbl%@115 -> false
+%lbl%+105 -> true
+%lbl%+56 -> true
+x@@0 -> 41
+y@@0!1!1 -> 719
+tickleBool -> {
+ true -> true
+ false -> true
+ else -> true
+}
+*** END_MODEL
+Optimization3.bpl(19,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ Optimization3.bpl(17,5): anon0
+
+Boogie program verifier finished with 0 verified, 2 errors
diff --git a/Test/optimization/lit.local.cfg b/Test/optimization/lit.local.cfg
new file mode 100644
index 00000000..35c7e558
--- /dev/null
+++ b/Test/optimization/lit.local.cfg
@@ -0,0 +1,3 @@
+# Do not run tests in this directory and below
+config.unsupported = True
+# TODO(wuestholz): Enable these tests once we can rely on a version of Z3 that includes changeset 5948013b1b04d8529bce366c0c7b87e1d88a1827.
diff --git a/Test/prover/EQ_v2.Eval__v4.Eval_out.bpl b/Test/prover/EQ_v2.Eval__v4.Eval_out.bpl
index 80b50686..bd823c3f 100644
--- a/Test/prover/EQ_v2.Eval__v4.Eval_out.bpl
+++ b/Test/prover/EQ_v2.Eval__v4.Eval_out.bpl
@@ -1,2257 +1,2257 @@
-// RUN: %boogie -typeEncoding:m -z3multipleErrors "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var v4.Mem: [name][int]int;
-
-var v4.alloc: int;
-
-var v4.Mem_T.INT4: [int]int;
-
-var v4.Mem_T.op1__EXPR: [int]int;
-
-var v4.Mem_T.op2__EXPR: [int]int;
-
-var v4.Mem_T.oper__EXPR: [int]int;
-
-var v4.Mem_T.result__EXPR: [int]int;
-
-var v4.detChoiceCnt: int;
-
-var v4.Res_KERNEL_SOURCE: [int]int;
-
-var v4.Res_PROBED: [int]int;
-
-var v4.isUnsigned: int;
-
-const unique v4.T.oper__EXPR: name;
-
-const unique v4.T.op1__EXPR: name;
-
-const unique v4.T.op2__EXPR: name;
-
-const unique v4.T.result__EXPR: name;
-
-const unique v4.T.INT4: name;
-
-const unique v4.T.PINT4: name;
-
-const unique v4.T.PPINT4: name;
-
-const unique v4.T.PP_EXPR: name;
-
-const unique v4.T.P_EXPR: name;
-
-const unique v4.T._EXPR: name;
-
-const {:model_const "e->op2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 23} unique v4.__ctobpl_const_9: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 24} unique v4.__ctobpl_const_10: int;
-
-const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 26} unique v4.__ctobpl_const_11: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 41} unique v4.__ctobpl_const_12: int;
-
-const {:model_const "e->op1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 22} unique v4.__ctobpl_const_6: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 23} unique v4.__ctobpl_const_7: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 23} unique v4.__ctobpl_const_8: int;
-
-const {:model_const "e->oper"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 21} unique v4.__ctobpl_const_3: int;
-
-const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 21} unique v4.__ctobpl_const_1: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 21} unique v4.__ctobpl_const_2: int;
-
-const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 41} unique v4.__ctobpl_const_13: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 41} unique v4.__ctobpl_const_14: int;
-
-const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 29} unique v4.__ctobpl_const_15: int;
-
-const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 35} unique v4.__ctobpl_const_16: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 38} unique v4.__ctobpl_const_17: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 38} unique v4.__ctobpl_const_18: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 38} unique v4.__ctobpl_const_19: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_20: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_21: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_22: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_23: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_24: int;
-
-const {:model_const "result.UnsignedSub"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_25: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 32} unique v4.__ctobpl_const_26: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 32} unique v4.__ctobpl_const_27: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 32} unique v4.__ctobpl_const_28: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_29: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_30: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_31: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_32: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_33: int;
-
-const {:model_const "result.UnsignedAdd"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_34: int;
-
-const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 47} unique v4.__ctobpl_const_35: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 22} unique v4.__ctobpl_const_4: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 22} unique v4.__ctobpl_const_5: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 48} unique v4.__ctobpl_const_36: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 48} unique v4.__ctobpl_const_37: int;
-
-const {:model_const "outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_38: int;
-
-const {:model_const "*outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_39: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_40: int;
-
-const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_41: int;
-
-const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 54} unique v4.__ctobpl_const_42: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 55} unique v4.__ctobpl_const_43: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 55} unique v4.__ctobpl_const_44: int;
-
-function v4.OneByteToInt(arg_0: byte) : int;
-
-function v4.TwoBytesToInt(arg_0: byte, arg_1: byte) : int;
-
-function v4.FourBytesToInt(arg_0: byte, arg_1: byte, arg_2: byte, arg_3: byte) : int;
-
-function v4.Field(arg_0: int) : name;
-
-function v4.Base(arg_0: int) : int;
-
-function v4.Match(a: int, t: name) : bool;
-
-function v4.MatchBase(b: int, a: int, t: name) : bool;
-
-function v4.HasType(v: int, t: name) : bool;
-
-function v4.T.Ptr(t: name) : name;
-
-function v4.op1__EXPR(arg_0: int) : int;
-
-function v4.op1__EXPRInv(arg_0: int) : int;
-
-function v4._S_op1__EXPR(arg_0: [int]bool) : [int]bool;
-
-function v4._S_op1__EXPRInv(arg_0: [int]bool) : [int]bool;
-
-function v4.op2__EXPR(arg_0: int) : int;
-
-function v4.op2__EXPRInv(arg_0: int) : int;
-
-function v4._S_op2__EXPR(arg_0: [int]bool) : [int]bool;
-
-function v4._S_op2__EXPRInv(arg_0: [int]bool) : [int]bool;
-
-function v4.oper__EXPR(arg_0: int) : int;
-
-function v4.oper__EXPRInv(arg_0: int) : int;
-
-function v4._S_oper__EXPR(arg_0: [int]bool) : [int]bool;
-
-function v4._S_oper__EXPRInv(arg_0: [int]bool) : [int]bool;
-
-function v4.result__EXPR(arg_0: int) : int;
-
-function v4.result__EXPRInv(arg_0: int) : int;
-
-function v4._S_result__EXPR(arg_0: [int]bool) : [int]bool;
-
-function v4._S_result__EXPRInv(arg_0: [int]bool) : [int]bool;
-
-function v4.INT_EQ(x: int, y: int) : bool;
-
-function v4.INT_NEQ(x: int, y: int) : bool;
-
-function v4.INT_ADD(x: int, y: int) : int;
-
-function v4.INT_SUB(x: int, y: int) : int;
-
-function v4.INT_MULT(x: int, y: int) : int;
-
-function v4.INT_DIV(x: int, y: int) : int;
-
-function v4.INT_LT(x: int, y: int) : bool;
-
-function v4.INT_ULT(x: int, y: int) : bool;
-
-function v4.INT_LEQ(x: int, y: int) : bool;
-
-function v4.INT_ULEQ(x: int, y: int) : bool;
-
-function v4.INT_GT(x: int, y: int) : bool;
-
-function v4.INT_UGT(x: int, y: int) : bool;
-
-function v4.INT_GEQ(x: int, y: int) : bool;
-
-function v4.INT_UGEQ(x: int, y: int) : bool;
-
-function v4.BV32_EQ(x: bv32, y: bv32) : bool;
-
-function v4.BV32_NEQ(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvadd"} v4.BV32_ADD(x: bv32, y: bv32) : bv32;
-
-function {:bvbuiltin "bvsub"} v4.BV32_SUB(x: bv32, y: bv32) : bv32;
-
-function {:bvbuiltin "bvmul"} v4.BV32_MULT(x: bv32, y: bv32) : bv32;
-
-function {:bvbuiltin "bvudiv"} v4.BV32_DIV(x: bv32, y: bv32) : bv32;
-
-function {:bvbuiltin "bvult"} v4.BV32_ULT(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvslt"} v4.BV32_LT(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvule"} v4.BV32_ULEQ(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvsle"} v4.BV32_LEQ(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvugt"} v4.BV32_UGT(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvsgt"} v4.BV32_GT(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvuge"} v4.BV32_UGEQ(x: bv32, y: bv32) : bool;
-
-function {:bvbuiltin "bvsge"} v4.BV32_GEQ(x: bv32, y: bv32) : bool;
-
-function v4.MINUS_BOTH_PTR_OR_BOTH_INT(a: int, b: int, size: int) : int;
-
-function v4.MINUS_LEFT_PTR(a: int, a_size: int, b: int) : int;
-
-function v4.PLUS(a: int, a_size: int, b: int) : int;
-
-function v4.MULT(a: int, b: int) : int;
-
-function v4.DIV(a: int, b: int) : int;
-
-function v4.BINARY_BOTH_INT(a: int, b: int) : int;
-
-function v4.POW2(a: int) : bool;
-
-function v4.BIT_BAND(a: int, b: int) : int;
-
-function v4.BIT_BOR(a: int, b: int) : int;
-
-function v4.BIT_BXOR(a: int, b: int) : int;
-
-function v4.BIT_BNOT(a: int) : int;
-
-function v4.choose(a: bool, b: int, c: int) : int;
-
-function v4.LIFT(a: bool) : int;
-
-function v4.PTR_NOT(a: int) : int;
-
-function v4.NULL_CHECK(a: int) : int;
-
-function v4.NewAlloc(x: int, y: int) : int;
-
-function v4.DetChoiceFunc(a: int) : int;
-
-function v4.Equal(arg_0: [int]bool, arg_1: [int]bool) : bool;
-
-function v4.Subset(arg_0: [int]bool, arg_1: [int]bool) : bool;
-
-function v4.Disjoint(arg_0: [int]bool, arg_1: [int]bool) : bool;
-
-function v4.Empty() : [int]bool;
-
-function v4.SetTrue() : [int]bool;
-
-function v4.Singleton(arg_0: int) : [int]bool;
-
-function v4.Reachable(arg_0: [int,int]bool, arg_1: int) : [int]bool;
-
-function v4.Union(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
-
-function v4.Intersection(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
-
-function v4.Difference(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
-
-function v4.Dereference(arg_0: [int]bool, arg_1: [int]int) : [int]bool;
-
-function v4.Inverse(f: [int]int, x: int) : [int]bool;
-
-function v4.AtLeast(arg_0: int, arg_1: int) : [int]bool;
-
-function v4.Rep(arg_0: int, arg_1: int) : int;
-
-function v4.Array(arg_0: int, arg_1: int, arg_2: int) : [int]bool;
-
-function v4.Unified(arg_0: [name][int]int) : [int]int;
-
-function v4.value_is(c: int, e: int) : bool;
-
-axiom (forall b0: byte, c0: byte :: { v4.OneByteToInt(b0), v4.OneByteToInt(c0) } v4.OneByteToInt(b0) == v4.OneByteToInt(c0) ==> b0 == c0);
-
-axiom (forall b0: byte, b1: byte, c0: byte, c1: byte :: { v4.TwoBytesToInt(b0, b1), v4.TwoBytesToInt(c0, c1) } v4.TwoBytesToInt(b0, b1) == v4.TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-
-axiom (forall b0: byte, b1: byte, b2: byte, b3: byte, c0: byte, c1: byte, c2: byte, c3: byte :: { v4.FourBytesToInt(b0, b1, b2, b3), v4.FourBytesToInt(c0, c1, c2, c3) } v4.FourBytesToInt(b0, b1, b2, b3) == v4.FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-axiom (forall x: int :: { v4.Base(x) } v4.INT_LEQ(v4.Base(x), x));
-
-axiom (forall a: int, t: name :: { v4.Match(a, v4.T.Ptr(t)) } v4.Match(a, v4.T.Ptr(t)) <==> v4.Field(a) == v4.T.Ptr(t));
-
-axiom (forall b: int, a: int, t: name :: { v4.MatchBase(b, a, v4.T.Ptr(t)) } v4.MatchBase(b, a, v4.T.Ptr(t)) <==> v4.Base(a) == b);
-
-axiom (forall v: int, t: name :: { v4.HasType(v, v4.T.Ptr(t)) } v4.HasType(v, v4.T.Ptr(t)) <==> v == 0 || (v4.INT_GT(v, 0) && v4.Match(v, t) && v4.MatchBase(v4.Base(v), v, t)));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPR(S)[x] } v4._S_op1__EXPR(S)[x] <==> S[v4.op1__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPRInv(S)[x] } v4._S_op1__EXPRInv(S)[x] <==> S[v4.op1__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPR(S) } S[x] ==> v4._S_op1__EXPR(S)[v4.op1__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPRInv(S) } S[x] ==> v4._S_op1__EXPRInv(S)[v4.op1__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.INT_ADD(x, 4));
-
-axiom (forall x: int :: { v4.op1__EXPRInv(x) } v4.op1__EXPRInv(x) == v4.INT_SUB(x, 4));
-
-axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.PLUS(x, 1, 4));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPR(S)[x] } v4._S_op2__EXPR(S)[x] <==> S[v4.op2__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPRInv(S)[x] } v4._S_op2__EXPRInv(S)[x] <==> S[v4.op2__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPR(S) } S[x] ==> v4._S_op2__EXPR(S)[v4.op2__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPRInv(S) } S[x] ==> v4._S_op2__EXPRInv(S)[v4.op2__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.INT_ADD(x, 8));
-
-axiom (forall x: int :: { v4.op2__EXPRInv(x) } v4.op2__EXPRInv(x) == v4.INT_SUB(x, 8));
-
-axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.PLUS(x, 1, 8));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPR(S)[x] } v4._S_oper__EXPR(S)[x] <==> S[v4.oper__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPRInv(S)[x] } v4._S_oper__EXPRInv(S)[x] <==> S[v4.oper__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPR(S) } S[x] ==> v4._S_oper__EXPR(S)[v4.oper__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPRInv(S) } S[x] ==> v4._S_oper__EXPRInv(S)[v4.oper__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.INT_ADD(x, 0));
-
-axiom (forall x: int :: { v4.oper__EXPRInv(x) } v4.oper__EXPRInv(x) == v4.INT_SUB(x, 0));
-
-axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.PLUS(x, 1, 0));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPR(S)[x] } v4._S_result__EXPR(S)[x] <==> S[v4.result__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPRInv(S)[x] } v4._S_result__EXPRInv(S)[x] <==> S[v4.result__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPR(S) } S[x] ==> v4._S_result__EXPR(S)[v4.result__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPRInv(S) } S[x] ==> v4._S_result__EXPRInv(S)[v4.result__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.INT_ADD(x, 12));
-
-axiom (forall x: int :: { v4.result__EXPRInv(x) } v4.result__EXPRInv(x) == v4.INT_SUB(x, 12));
-
-axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.PLUS(x, 1, 12));
-
-axiom (forall x: int, y: int :: { v4.INT_EQ(x, y): bool } v4.INT_EQ(x, y): bool <==> x == y);
-
-axiom (forall x: int, y: int :: { v4.INT_NEQ(x, y): bool } v4.INT_NEQ(x, y): bool <==> x != y);
-
-axiom (forall x: int, y: int :: { v4.INT_ADD(x, y): int } v4.INT_ADD(x, y): int == x + y);
-
-axiom (forall x: int, y: int :: { v4.INT_SUB(x, y): int } v4.INT_SUB(x, y): int == x - y);
-
-axiom (forall x: int, y: int :: { v4.INT_MULT(x, y): int } v4.INT_MULT(x, y): int == x * y);
-
-axiom (forall x: int, y: int :: { v4.INT_DIV(x, y): int } v4.INT_DIV(x, y): int == x div y);
-
-axiom (forall x: int, y: int :: { v4.INT_LT(x, y): bool } v4.INT_LT(x, y): bool <==> x < y);
-
-axiom (forall x: int, y: int :: { v4.INT_ULT(x, y): bool } v4.INT_ULT(x, y): bool <==> x < y);
-
-axiom (forall x: int, y: int :: { v4.INT_LEQ(x, y): bool } v4.INT_LEQ(x, y): bool <==> x <= y);
-
-axiom (forall x: int, y: int :: { v4.INT_ULEQ(x, y): bool } v4.INT_ULEQ(x, y): bool <==> x <= y);
-
-axiom (forall x: int, y: int :: { v4.INT_GT(x, y): bool } v4.INT_GT(x, y): bool <==> x > y);
-
-axiom (forall x: int, y: int :: { v4.INT_UGT(x, y): bool } v4.INT_UGT(x, y): bool <==> x > y);
-
-axiom (forall x: int, y: int :: { v4.INT_GEQ(x, y): bool } v4.INT_GEQ(x, y): bool <==> x >= y);
-
-axiom (forall x: int, y: int :: { v4.INT_UGEQ(x, y): bool } v4.INT_UGEQ(x, y): bool <==> x >= y);
-
-axiom (forall x: bv32, y: bv32 :: { v4.BV32_EQ(x, y): bool } v4.BV32_EQ(x, y): bool <==> x == y);
-
-axiom (forall x: bv32, y: bv32 :: { v4.BV32_NEQ(x, y): bool } v4.BV32_NEQ(x, y): bool <==> x != y);
-
-axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.INT_LEQ(v4.INT_MULT(size, v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size)), v4.INT_SUB(a, b)) && v4.INT_LT(v4.INT_SUB(a, b), v4.INT_MULT(size, v4.INT_ADD(v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size), 1))));
-
-axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, 1) == v4.INT_SUB(a, b));
-
-axiom (forall a: int, a_size: int, b: int :: { v4.MINUS_LEFT_PTR(a, a_size, b) } v4.MINUS_LEFT_PTR(a, a_size, b) == v4.INT_SUB(a, v4.INT_MULT(a_size, b)));
-
-axiom (forall a: int, a_size: int, b: int :: { v4.PLUS(a, a_size, b) } v4.PLUS(a, a_size, b) == v4.INT_ADD(a, v4.INT_MULT(a_size, b)));
-
-axiom (forall a: int, b: int :: { v4.MULT(a, b) } v4.MULT(a, b) == v4.INT_MULT(a, b));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b > 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) + 1));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b < 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) - 1));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b > 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) - 1));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b < 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) + 1));
-
-axiom v4.POW2(1);
-
-axiom v4.POW2(2);
-
-axiom v4.POW2(4);
-
-axiom v4.POW2(8);
-
-axiom v4.POW2(16);
-
-axiom v4.POW2(32);
-
-axiom v4.POW2(64);
-
-axiom v4.POW2(128);
-
-axiom v4.POW2(256);
-
-axiom v4.POW2(512);
-
-axiom v4.POW2(1024);
-
-axiom v4.POW2(2048);
-
-axiom v4.POW2(4096);
-
-axiom v4.POW2(8192);
-
-axiom v4.POW2(16384);
-
-axiom v4.POW2(32768);
-
-axiom v4.POW2(65536);
-
-axiom v4.POW2(131072);
-
-axiom v4.POW2(262144);
-
-axiom v4.POW2(524288);
-
-axiom v4.POW2(1048576);
-
-axiom v4.POW2(2097152);
-
-axiom v4.POW2(4194304);
-
-axiom v4.POW2(8388608);
-
-axiom v4.POW2(16777216);
-
-axiom v4.POW2(33554432);
-
-axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == b ==> v4.BIT_BAND(a, b) == a);
-
-axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } v4.POW2(a) && v4.POW2(b) && a != b ==> v4.BIT_BAND(a, b) == 0);
-
-axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == 0 || b == 0 ==> v4.BIT_BAND(a, b) == 0);
-
-axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } a ==> v4.choose(a, b, c) == b);
-
-axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } !a ==> v4.choose(a, b, c) == c);
-
-axiom (forall a: bool :: { v4.LIFT(a) } a <==> v4.LIFT(a) != 0);
-
-axiom (forall a: int :: { v4.PTR_NOT(a) } a == 0 ==> v4.PTR_NOT(a) != 0);
-
-axiom (forall a: int :: { v4.PTR_NOT(a) } a != 0 ==> v4.PTR_NOT(a) == 0);
-
-axiom (forall a: int :: { v4.NULL_CHECK(a) } a == 0 ==> v4.NULL_CHECK(a) != 0);
-
-axiom (forall a: int :: { v4.NULL_CHECK(a) } a != 0 ==> v4.NULL_CHECK(a) == 0);
-
-axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x)[y] } v4.AtLeast(n, x)[y] ==> v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y));
-
-axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x), v4.Rep(n, x), v4.Rep(n, y) } v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y) ==> v4.AtLeast(n, x)[y]);
-
-axiom (forall n: int, x: int :: { v4.AtLeast(n, x) } v4.AtLeast(n, x)[x]);
-
-axiom (forall n: int, x: int, z: int :: { v4.PLUS(x, n, z) } v4.Rep(n, x) == v4.Rep(n, v4.PLUS(x, n, z)));
-
-axiom (forall n: int, x: int :: { v4.Rep(n, x) } (exists k: int :: v4.INT_SUB(v4.Rep(n, x), x) == v4.INT_MULT(n, k)));
-
-axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_LEQ(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Empty()));
-
-axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_GT(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Difference(v4.AtLeast(n, x), v4.AtLeast(n, v4.PLUS(x, n, z)))));
-
-axiom (forall x: int :: !v4.Empty()[x]);
-
-axiom (forall x: int :: v4.SetTrue()[x]);
-
-axiom (forall x: int, y: int :: { v4.Singleton(y)[x] } v4.Singleton(y)[x] <==> x == y);
-
-axiom (forall y: int :: { v4.Singleton(y) } v4.Singleton(y)[y]);
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Union(S, T)[x] } { v4.Union(S, T), S[x] } { v4.Union(S, T), T[x] } v4.Union(S, T)[x] <==> S[x] || T[x]);
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Intersection(S, T)[x] } { v4.Intersection(S, T), S[x] } { v4.Intersection(S, T), T[x] } v4.Intersection(S, T)[x] <==> S[x] && T[x]);
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Difference(S, T)[x] } { v4.Difference(S, T), S[x] } { v4.Difference(S, T), T[x] } v4.Difference(S, T)[x] <==> S[x] && !T[x]);
-
-axiom (forall S: [int]bool, T: [int]bool :: { v4.Equal(S, T) } v4.Equal(S, T) <==> v4.Subset(S, T) && v4.Subset(T, S));
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Subset(S, T) } { T[x], v4.Subset(S, T) } S[x] && v4.Subset(S, T) ==> T[x]);
-
-axiom (forall S: [int]bool, T: [int]bool :: { v4.Subset(S, T) } v4.Subset(S, T) || (exists x: int :: S[x] && !T[x]));
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Disjoint(S, T) } { T[x], v4.Disjoint(S, T) } !(S[x] && v4.Disjoint(S, T) && T[x]));
-
-axiom (forall S: [int]bool, T: [int]bool :: { v4.Disjoint(S, T) } v4.Disjoint(S, T) || (exists x: int :: S[x] && T[x]));
-
-axiom (forall f: [int]int, x: int :: { v4.Inverse(f, f[x]) } v4.Inverse(f, f[x])[x]);
-
-axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f, y), f[x] } v4.Inverse(f, y)[x] ==> f[x] == y);
-
-axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f[x := y], y) } v4.Equal(v4.Inverse(f[x := y], y), v4.Union(v4.Inverse(f, y), v4.Singleton(x))));
-
-axiom (forall f: [int]int, x: int, y: int, z: int :: { v4.Inverse(f[x := y], z) } y == z || v4.Equal(v4.Inverse(f[x := y], z), v4.Difference(v4.Inverse(f, z), v4.Singleton(x))));
-
-axiom (forall x: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M)[x] } v4.Dereference(S, M)[x] ==> (exists y: int :: x == M[y] && S[y]));
-
-axiom (forall x: int, S: [int]bool, M: [int]int :: { M[x], S[x], v4.Dereference(S, M) } S[x] ==> v4.Dereference(S, M)[M[x]]);
-
-axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } !S[x] ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Dereference(S, M)));
-
-axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Difference(v4.Dereference(S, M), v4.Singleton(M[x])), v4.Singleton(y))));
-
-axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && !v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Dereference(S, M), v4.Singleton(y))));
-
-axiom (forall M: [name][int]int, x: int :: { v4.Unified(M)[x] } v4.Unified(M)[x] == M[v4.Field(x)][x]);
-
-axiom (forall M: [name][int]int, x: int, y: int :: { v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) } v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) == v4.Unified(M)[x := y]);
-
-procedure v4.havoc_assert(i: int);
-
-
-
-procedure v4.havoc_assume(i: int);
-
-
-
-procedure v4.__HAVOC_free(a: int);
-
-
-
-procedure v4.__HAVOC_malloc(obj_size: int) returns (new: int);
- free ensures new == _uf_v4.__HAVOC_malloc_new(obj_size);
-
-
-
-procedure v4.__HAVOC_det_malloc(obj_size: int) returns (new: int);
- free ensures new == _uf_v4.__HAVOC_det_malloc_new(obj_size);
-
-
-
-procedure v4.__HAVOC_memset_split_1(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
- free ensures ret == _uf_v4.__HAVOC_memset_split_1_ret(A, p, c, n);
-
-
-
-procedure v4.__HAVOC_memset_split_2(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
- free ensures ret == _uf_v4.__HAVOC_memset_split_2_ret(A, p, c, n);
-
-
-
-procedure v4.__HAVOC_memset_split_4(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
- free ensures ret == _uf_v4.__HAVOC_memset_split_4_ret(A, p, c, n);
-
-
-
-procedure v4.nondet_choice() returns (x: int);
- free ensures x == _uf_v4.nondet_choice_x();
-
-
-
-procedure v4.det_choice() returns (x: int);
- free ensures x == _uf_v4.det_choice_x();
-
-
-
-procedure v4._strdup(str: int) returns (new: int);
- free ensures new == _uf_v4._strdup_new(str);
-
-
-
-procedure v4._xstrcasecmp(a0: int, a1: int) returns (ret: int);
- free ensures ret == _uf_v4._xstrcasecmp_ret(a0, a1);
-
-
-
-procedure v4._xstrcmp(a0: int, a1: int) returns (ret: int);
- free ensures ret == _uf_v4._xstrcmp_ret(a0, a1);
-
-
-
-procedure v4.UnsignedAdd(a0: int, a1: int) returns (ret: int);
-
-
-
-procedure v4.UnsignedSub(a0: int, a1: int) returns (ret: int);
-
-
-
-procedure {:inline 1} v4.Eval(e_.1: int);
- modifies v4.Mem_T.result__EXPR;
- free ensures v4.Mem_T.result__EXPR == _uf_v4.Eval_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
-
-
-
-procedure v4.EvalEntry1(e_.1: int, outval_.1: int);
- modifies v4.isUnsigned, v4.Mem_T.result__EXPR, v4.Mem_T.INT4;
- free ensures v4.isUnsigned == _uf_v4.EvalEntry1_v4.isUnsigned(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
- free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry1_v4.Mem_T.result__EXPR(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
- free ensures v4.Mem_T.INT4 == _uf_v4.EvalEntry1_v4.Mem_T.INT4(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
-
-
-
-procedure v4.EvalEntry2(e_.1: int);
- modifies v4.isUnsigned, v4.Mem_T.result__EXPR;
- free ensures v4.isUnsigned == _uf_v4.EvalEntry2_v4.isUnsigned(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
- free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry2_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
-
-
-
-procedure v4.__havoc_heapglobal_init();
-
-
-
-implementation {:inline 1} v4.Eval(e_.1: int)
-{
- var havoc_stringTemp: int;
- var condVal: int;
- var a1: int;
- var a2: int;
- var e: int;
- var op: int;
- var res: int;
- var result.UnsignedAdd$1: int;
- var result.UnsignedSub$2: int;
- var tempBoogie0: int;
- var tempBoogie1: int;
- var tempBoogie2: int;
- var tempBoogie3: int;
- var tempBoogie4: int;
- var tempBoogie5: int;
- var tempBoogie6: int;
- var tempBoogie7: int;
- var tempBoogie8: int;
- var tempBoogie9: int;
- var tempBoogie10: int;
- var tempBoogie11: int;
- var tempBoogie12: int;
- var tempBoogie13: int;
- var tempBoogie14: int;
- var tempBoogie15: int;
- var tempBoogie16: int;
- var tempBoogie17: int;
- var tempBoogie18: int;
- var tempBoogie19: int;
- var __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume v4.INT_LT(e_.1, v4.alloc);
- a1 := 0;
- a2 := 0;
- e := 0;
- op := 0;
- res := 0;
- result.UnsignedAdd$1 := 0;
- result.UnsignedSub$2 := 0;
- e := e_.1;
- goto label_3#2;
-
- label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto label_4#2;
-
- label_4#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto label_5#2;
-
- label_5#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto label_6#2;
-
- label_6#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto label_7#2;
-
- label_7#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 21} true;
- assert true;
- op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)];
- assume v4.value_is(v4.__ctobpl_const_1, op);
- assume v4.value_is(v4.__ctobpl_const_2, e);
- assume v4.value_is(v4.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)]);
- goto label_8#2;
-
- label_8#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 22} true;
- assert true;
- a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)];
- assume v4.value_is(v4.__ctobpl_const_4, a1);
- assume v4.value_is(v4.__ctobpl_const_5, e);
- assume v4.value_is(v4.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)]);
- goto label_9#2;
-
- label_9#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 23} true;
- assert true;
- a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)];
- assume v4.value_is(v4.__ctobpl_const_7, a2);
- assume v4.value_is(v4.__ctobpl_const_8, e);
- assume v4.value_is(v4.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)]);
- goto label_10#2;
-
- label_10#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 24} true;
- res := 0 - 1;
- assume v4.value_is(v4.__ctobpl_const_10, res);
- goto label_11#2;
-
- label_11#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 26} true;
- goto label_11_case_0#2, label_11_case_1#2, label_11_case_2#2;
-
- label_11_case_2#2:
- assume v4.INT_EQ(op, 2);
- assume v4.value_is(v4.__ctobpl_const_11, op);
- goto label_14#2;
-
- label_14#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 35} true;
- goto label_14_true#2, label_14_false#2;
-
- label_14_false#2:
- assume v4.isUnsigned == 0;
- assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
- goto label_15#2;
-
- label_15#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 38} true;
- res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(a1, a2, 1);
- assume v4.value_is(v4.__ctobpl_const_17, res);
- assume v4.value_is(v4.__ctobpl_const_18, a1);
- assume v4.value_is(v4.__ctobpl_const_19, a2);
- goto label_12#2;
-
- label_14_true#2:
- assume v4.isUnsigned != 0;
- assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
- goto label_16#2;
-
- label_16#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
- call result.UnsignedSub$2 := v4.UnsignedSub(a1, a2);
- assume v4.value_is(v4.__ctobpl_const_20, a1);
- assume v4.value_is(v4.__ctobpl_const_21, a2);
- assume v4.value_is(v4.__ctobpl_const_22, a1);
- assume v4.value_is(v4.__ctobpl_const_23, a2);
- goto label_19#2;
-
- label_19#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
- res := result.UnsignedSub$2;
- assume v4.value_is(v4.__ctobpl_const_24, res);
- assume v4.value_is(v4.__ctobpl_const_25, result.UnsignedSub$2);
- goto label_12#2;
-
- label_11_case_1#2:
- assume v4.INT_EQ(op, 1);
- assume v4.value_is(v4.__ctobpl_const_11, op);
- goto label_13#2;
-
- label_13#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 29} true;
- goto label_13_true#2, label_13_false#2;
-
- label_13_false#2:
- assume v4.isUnsigned == 0;
- assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
- goto label_20#2;
-
- label_20#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 32} true;
- res := v4.PLUS(a1, 1, a2);
- assume v4.value_is(v4.__ctobpl_const_26, res);
- assume v4.value_is(v4.__ctobpl_const_27, a1);
- assume v4.value_is(v4.__ctobpl_const_28, a2);
- goto label_12#2;
-
- label_13_true#2:
- assume v4.isUnsigned != 0;
- assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
- goto label_21#2;
-
- label_21#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
- call result.UnsignedAdd$1 := v4.UnsignedAdd(a1, a2);
- assume v4.value_is(v4.__ctobpl_const_29, a1);
- assume v4.value_is(v4.__ctobpl_const_30, a2);
- assume v4.value_is(v4.__ctobpl_const_31, a1);
- assume v4.value_is(v4.__ctobpl_const_32, a2);
- goto label_24#2;
-
- label_24#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
- res := result.UnsignedAdd$1;
- assume v4.value_is(v4.__ctobpl_const_33, res);
- assume v4.value_is(v4.__ctobpl_const_34, result.UnsignedAdd$1);
- goto label_12#2;
-
- label_11_case_0#2:
- assume v4.INT_NEQ(op, 1);
- assume v4.INT_NEQ(op, 2);
- assume v4.value_is(v4.__ctobpl_const_11, op);
- goto label_12#2;
-
- label_12#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 41} true;
- assert true;
- v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(e) := res];
- assume v4.value_is(v4.__ctobpl_const_12, e);
- assume v4.value_is(v4.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
- assume v4.value_is(v4.__ctobpl_const_14, res);
- goto label_1#2;
-
- label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 42} true;
- return;
-}
-
-
-
-implementation v4.EvalEntry1(e_.1: int, outval_.1: int)
-{
- var havoc_stringTemp: int;
- var condVal: int;
- var e: int;
- var outval: int;
- var tempBoogie0: int;
- var tempBoogie1: int;
- var tempBoogie2: int;
- var tempBoogie3: int;
- var tempBoogie4: int;
- var tempBoogie5: int;
- var tempBoogie6: int;
- var tempBoogie7: int;
- var tempBoogie8: int;
- var tempBoogie9: int;
- var tempBoogie10: int;
- var tempBoogie11: int;
- var tempBoogie12: int;
- var tempBoogie13: int;
- var tempBoogie14: int;
- var tempBoogie15: int;
- var tempBoogie16: int;
- var tempBoogie17: int;
- var tempBoogie18: int;
- var tempBoogie19: int;
- var __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume v4.INT_LT(e_.1, v4.alloc);
- assume v4.INT_LT(outval_.1, v4.alloc);
- e := 0;
- outval := 0;
- e := e_.1;
- outval := outval_.1;
- goto label_3#2;
-
- label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 47} true;
- v4.isUnsigned := 1;
- assume v4.value_is(v4.__ctobpl_const_35, v4.isUnsigned);
- goto label_4#2;
-
- label_4#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 48} true;
- call v4.Eval(e);
- assume v4.value_is(v4.__ctobpl_const_36, e);
- assume v4.value_is(v4.__ctobpl_const_37, e);
- goto label_7#2;
-
- label_7#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 49} true;
- assert true;
- assert true;
- v4.Mem_T.INT4 := v4.Mem_T.INT4[outval := v4.Mem_T.result__EXPR[v4.result__EXPR(e)]];
- assume v4.value_is(v4.__ctobpl_const_38, outval);
- assume v4.value_is(v4.__ctobpl_const_39, v4.Mem_T.INT4[outval]);
- assume v4.value_is(v4.__ctobpl_const_40, e);
- assume v4.value_is(v4.__ctobpl_const_41, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
- goto label_1#2;
-
- label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 50} true;
- return;
-}
-
-
-
-implementation v4.EvalEntry2(e_.1: int)
-{
- var havoc_stringTemp: int;
- var condVal: int;
- var e: int;
- var tempBoogie0: int;
- var tempBoogie1: int;
- var tempBoogie2: int;
- var tempBoogie3: int;
- var tempBoogie4: int;
- var tempBoogie5: int;
- var tempBoogie6: int;
- var tempBoogie7: int;
- var tempBoogie8: int;
- var tempBoogie9: int;
- var tempBoogie10: int;
- var tempBoogie11: int;
- var tempBoogie12: int;
- var tempBoogie13: int;
- var tempBoogie14: int;
- var tempBoogie15: int;
- var tempBoogie16: int;
- var tempBoogie17: int;
- var tempBoogie18: int;
- var tempBoogie19: int;
- var __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume v4.INT_LT(e_.1, v4.alloc);
- e := 0;
- e := e_.1;
- goto label_3#2;
-
- label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 54} true;
- v4.isUnsigned := 0;
- assume v4.value_is(v4.__ctobpl_const_42, v4.isUnsigned);
- goto label_4#2;
-
- label_4#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 55} true;
- call v4.Eval(e);
- assume v4.value_is(v4.__ctobpl_const_43, e);
- assume v4.value_is(v4.__ctobpl_const_44, e);
- goto label_1#2;
-
- label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 56} true;
- return;
-}
-
-
-
-implementation v4.__havoc_heapglobal_init()
-{
-
- anon0#2:
- return;
-}
-
-
-
-var v2.Mem: [name][int]int;
-
-var v2.alloc: int;
-
-var v2.Mem_T.INT4: [int]int;
-
-var v2.Mem_T.op1__EXPR: [int]int;
-
-var v2.Mem_T.op2__EXPR: [int]int;
-
-var v2.Mem_T.oper__EXPR: [int]int;
-
-var v2.Mem_T.result__EXPR: [int]int;
-
-var v2.detChoiceCnt: int;
-
-var v2.Res_KERNEL_SOURCE: [int]int;
-
-var v2.Res_PROBED: [int]int;
-
-const unique v2.T.oper__EXPR: name;
-
-const unique v2.T.op1__EXPR: name;
-
-const unique v2.T.op2__EXPR: name;
-
-const unique v2.T.result__EXPR: name;
-
-const unique v2.T.INT4: name;
-
-const unique v2.T.PINT4: name;
-
-const unique v2.T.PPINT4: name;
-
-const unique v2.T.PP_EXPR: name;
-
-const unique v2.T.P_EXPR: name;
-
-const unique v2.T._EXPR: name;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 21} unique v2.__ctobpl_const_7: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 21} unique v2.__ctobpl_const_8: int;
-
-const {:model_const "e->oper"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 19} unique v2.__ctobpl_const_3: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 20} unique v2.__ctobpl_const_4: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 20} unique v2.__ctobpl_const_5: int;
-
-const {:model_const "e->op1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 20} unique v2.__ctobpl_const_6: int;
-
-const {:model_const "e->op2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 21} unique v2.__ctobpl_const_9: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 22} unique v2.__ctobpl_const_10: int;
-
-const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 24} unique v2.__ctobpl_const_11: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 35} unique v2.__ctobpl_const_12: int;
-
-const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 35} unique v2.__ctobpl_const_13: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 35} unique v2.__ctobpl_const_14: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 27} unique v2.__ctobpl_const_15: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 27} unique v2.__ctobpl_const_16: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 27} unique v2.__ctobpl_const_17: int;
-
-const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 29} unique v2.__ctobpl_const_18: int;
-
-const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 29} unique v2.__ctobpl_const_19: int;
-
-const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 29} unique v2.__ctobpl_const_20: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 40} unique v2.__ctobpl_const_21: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 40} unique v2.__ctobpl_const_22: int;
-
-const {:model_const "outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_23: int;
-
-const {:model_const "*outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_24: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_25: int;
-
-const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_26: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 46} unique v2.__ctobpl_const_27: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 46} unique v2.__ctobpl_const_28: int;
-
-const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 19} unique v2.__ctobpl_const_1: int;
-
-const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 19} unique v2.__ctobpl_const_2: int;
-
-axiom (forall b0: byte, c0: byte :: { v4.OneByteToInt(b0), v4.OneByteToInt(c0) } v4.OneByteToInt(b0) == v4.OneByteToInt(c0) ==> b0 == c0);
-
-axiom (forall b0: byte, b1: byte, c0: byte, c1: byte :: { v4.TwoBytesToInt(b0, b1), v4.TwoBytesToInt(c0, c1) } v4.TwoBytesToInt(b0, b1) == v4.TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-
-axiom (forall b0: byte, b1: byte, b2: byte, b3: byte, c0: byte, c1: byte, c2: byte, c3: byte :: { v4.FourBytesToInt(b0, b1, b2, b3), v4.FourBytesToInt(c0, c1, c2, c3) } v4.FourBytesToInt(b0, b1, b2, b3) == v4.FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-axiom (forall x: int :: { v4.Base(x) } v4.INT_LEQ(v4.Base(x), x));
-
-axiom (forall a: int, t: name :: { v4.Match(a, v4.T.Ptr(t)) } v4.Match(a, v4.T.Ptr(t)) <==> v4.Field(a) == v4.T.Ptr(t));
-
-axiom (forall b: int, a: int, t: name :: { v4.MatchBase(b, a, v4.T.Ptr(t)) } v4.MatchBase(b, a, v4.T.Ptr(t)) <==> v4.Base(a) == b);
-
-axiom (forall v: int, t: name :: { v4.HasType(v, v4.T.Ptr(t)) } v4.HasType(v, v4.T.Ptr(t)) <==> v == 0 || (v4.INT_GT(v, 0) && v4.Match(v, t) && v4.MatchBase(v4.Base(v), v, t)));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPR(S)[x] } v4._S_op1__EXPR(S)[x] <==> S[v4.op1__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPRInv(S)[x] } v4._S_op1__EXPRInv(S)[x] <==> S[v4.op1__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPR(S) } S[x] ==> v4._S_op1__EXPR(S)[v4.op1__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPRInv(S) } S[x] ==> v4._S_op1__EXPRInv(S)[v4.op1__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.INT_ADD(x, 4));
-
-axiom (forall x: int :: { v4.op1__EXPRInv(x) } v4.op1__EXPRInv(x) == v4.INT_SUB(x, 4));
-
-axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.PLUS(x, 1, 4));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPR(S)[x] } v4._S_op2__EXPR(S)[x] <==> S[v4.op2__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPRInv(S)[x] } v4._S_op2__EXPRInv(S)[x] <==> S[v4.op2__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPR(S) } S[x] ==> v4._S_op2__EXPR(S)[v4.op2__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPRInv(S) } S[x] ==> v4._S_op2__EXPRInv(S)[v4.op2__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.INT_ADD(x, 8));
-
-axiom (forall x: int :: { v4.op2__EXPRInv(x) } v4.op2__EXPRInv(x) == v4.INT_SUB(x, 8));
-
-axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.PLUS(x, 1, 8));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPR(S)[x] } v4._S_oper__EXPR(S)[x] <==> S[v4.oper__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPRInv(S)[x] } v4._S_oper__EXPRInv(S)[x] <==> S[v4.oper__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPR(S) } S[x] ==> v4._S_oper__EXPR(S)[v4.oper__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPRInv(S) } S[x] ==> v4._S_oper__EXPRInv(S)[v4.oper__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.INT_ADD(x, 0));
-
-axiom (forall x: int :: { v4.oper__EXPRInv(x) } v4.oper__EXPRInv(x) == v4.INT_SUB(x, 0));
-
-axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.PLUS(x, 1, 0));
-
-axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPR(S)[x] } v4._S_result__EXPR(S)[x] <==> S[v4.result__EXPRInv(x)]);
-
-axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPRInv(S)[x] } v4._S_result__EXPRInv(S)[x] <==> S[v4.result__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPR(S) } S[x] ==> v4._S_result__EXPR(S)[v4.result__EXPR(x)]);
-
-axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPRInv(S) } S[x] ==> v4._S_result__EXPRInv(S)[v4.result__EXPRInv(x)]);
-
-axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.INT_ADD(x, 12));
-
-axiom (forall x: int :: { v4.result__EXPRInv(x) } v4.result__EXPRInv(x) == v4.INT_SUB(x, 12));
-
-axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.PLUS(x, 1, 12));
-
-axiom (forall x: int, y: int :: { v4.INT_EQ(x, y): bool } v4.INT_EQ(x, y): bool <==> x == y);
-
-axiom (forall x: int, y: int :: { v4.INT_NEQ(x, y): bool } v4.INT_NEQ(x, y): bool <==> x != y);
-
-axiom (forall x: int, y: int :: { v4.INT_ADD(x, y): int } v4.INT_ADD(x, y): int == x + y);
-
-axiom (forall x: int, y: int :: { v4.INT_SUB(x, y): int } v4.INT_SUB(x, y): int == x - y);
-
-axiom (forall x: int, y: int :: { v4.INT_MULT(x, y): int } v4.INT_MULT(x, y): int == x * y);
-
-axiom (forall x: int, y: int :: { v4.INT_DIV(x, y): int } v4.INT_DIV(x, y): int == x div y);
-
-axiom (forall x: int, y: int :: { v4.INT_LT(x, y): bool } v4.INT_LT(x, y): bool <==> x < y);
-
-axiom (forall x: int, y: int :: { v4.INT_ULT(x, y): bool } v4.INT_ULT(x, y): bool <==> x < y);
-
-axiom (forall x: int, y: int :: { v4.INT_LEQ(x, y): bool } v4.INT_LEQ(x, y): bool <==> x <= y);
-
-axiom (forall x: int, y: int :: { v4.INT_ULEQ(x, y): bool } v4.INT_ULEQ(x, y): bool <==> x <= y);
-
-axiom (forall x: int, y: int :: { v4.INT_GT(x, y): bool } v4.INT_GT(x, y): bool <==> x > y);
-
-axiom (forall x: int, y: int :: { v4.INT_UGT(x, y): bool } v4.INT_UGT(x, y): bool <==> x > y);
-
-axiom (forall x: int, y: int :: { v4.INT_GEQ(x, y): bool } v4.INT_GEQ(x, y): bool <==> x >= y);
-
-axiom (forall x: int, y: int :: { v4.INT_UGEQ(x, y): bool } v4.INT_UGEQ(x, y): bool <==> x >= y);
-
-axiom (forall x: bv32, y: bv32 :: { v4.BV32_EQ(x, y): bool } v4.BV32_EQ(x, y): bool <==> x == y);
-
-axiom (forall x: bv32, y: bv32 :: { v4.BV32_NEQ(x, y): bool } v4.BV32_NEQ(x, y): bool <==> x != y);
-
-axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.INT_LEQ(v4.INT_MULT(size, v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size)), v4.INT_SUB(a, b)) && v4.INT_LT(v4.INT_SUB(a, b), v4.INT_MULT(size, v4.INT_ADD(v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size), 1))));
-
-axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, 1) == v4.INT_SUB(a, b));
-
-axiom (forall a: int, a_size: int, b: int :: { v4.MINUS_LEFT_PTR(a, a_size, b) } v4.MINUS_LEFT_PTR(a, a_size, b) == v4.INT_SUB(a, v4.INT_MULT(a_size, b)));
-
-axiom (forall a: int, a_size: int, b: int :: { v4.PLUS(a, a_size, b) } v4.PLUS(a, a_size, b) == v4.INT_ADD(a, v4.INT_MULT(a_size, b)));
-
-axiom (forall a: int, b: int :: { v4.MULT(a, b) } v4.MULT(a, b) == v4.INT_MULT(a, b));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b > 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) + 1));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b < 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) - 1));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b > 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) - 1));
-
-axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b < 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) + 1));
-
-axiom v4.POW2(1);
-
-axiom v4.POW2(2);
-
-axiom v4.POW2(4);
-
-axiom v4.POW2(8);
-
-axiom v4.POW2(16);
-
-axiom v4.POW2(32);
-
-axiom v4.POW2(64);
-
-axiom v4.POW2(128);
-
-axiom v4.POW2(256);
-
-axiom v4.POW2(512);
-
-axiom v4.POW2(1024);
-
-axiom v4.POW2(2048);
-
-axiom v4.POW2(4096);
-
-axiom v4.POW2(8192);
-
-axiom v4.POW2(16384);
-
-axiom v4.POW2(32768);
-
-axiom v4.POW2(65536);
-
-axiom v4.POW2(131072);
-
-axiom v4.POW2(262144);
-
-axiom v4.POW2(524288);
-
-axiom v4.POW2(1048576);
-
-axiom v4.POW2(2097152);
-
-axiom v4.POW2(4194304);
-
-axiom v4.POW2(8388608);
-
-axiom v4.POW2(16777216);
-
-axiom v4.POW2(33554432);
-
-axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == b ==> v4.BIT_BAND(a, b) == a);
-
-axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } v4.POW2(a) && v4.POW2(b) && a != b ==> v4.BIT_BAND(a, b) == 0);
-
-axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == 0 || b == 0 ==> v4.BIT_BAND(a, b) == 0);
-
-axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } a ==> v4.choose(a, b, c) == b);
-
-axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } !a ==> v4.choose(a, b, c) == c);
-
-axiom (forall a: bool :: { v4.LIFT(a) } a <==> v4.LIFT(a) != 0);
-
-axiom (forall a: int :: { v4.PTR_NOT(a) } a == 0 ==> v4.PTR_NOT(a) != 0);
-
-axiom (forall a: int :: { v4.PTR_NOT(a) } a != 0 ==> v4.PTR_NOT(a) == 0);
-
-axiom (forall a: int :: { v4.NULL_CHECK(a) } a == 0 ==> v4.NULL_CHECK(a) != 0);
-
-axiom (forall a: int :: { v4.NULL_CHECK(a) } a != 0 ==> v4.NULL_CHECK(a) == 0);
-
-axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x)[y] } v4.AtLeast(n, x)[y] ==> v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y));
-
-axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x), v4.Rep(n, x), v4.Rep(n, y) } v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y) ==> v4.AtLeast(n, x)[y]);
-
-axiom (forall n: int, x: int :: { v4.AtLeast(n, x) } v4.AtLeast(n, x)[x]);
-
-axiom (forall n: int, x: int, z: int :: { v4.PLUS(x, n, z) } v4.Rep(n, x) == v4.Rep(n, v4.PLUS(x, n, z)));
-
-axiom (forall n: int, x: int :: { v4.Rep(n, x) } (exists k: int :: v4.INT_SUB(v4.Rep(n, x), x) == v4.INT_MULT(n, k)));
-
-axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_LEQ(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Empty()));
-
-axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_GT(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Difference(v4.AtLeast(n, x), v4.AtLeast(n, v4.PLUS(x, n, z)))));
-
-axiom (forall x: int :: !v4.Empty()[x]);
-
-axiom (forall x: int :: v4.SetTrue()[x]);
-
-axiom (forall x: int, y: int :: { v4.Singleton(y)[x] } v4.Singleton(y)[x] <==> x == y);
-
-axiom (forall y: int :: { v4.Singleton(y) } v4.Singleton(y)[y]);
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Union(S, T)[x] } { v4.Union(S, T), S[x] } { v4.Union(S, T), T[x] } v4.Union(S, T)[x] <==> S[x] || T[x]);
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Intersection(S, T)[x] } { v4.Intersection(S, T), S[x] } { v4.Intersection(S, T), T[x] } v4.Intersection(S, T)[x] <==> S[x] && T[x]);
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Difference(S, T)[x] } { v4.Difference(S, T), S[x] } { v4.Difference(S, T), T[x] } v4.Difference(S, T)[x] <==> S[x] && !T[x]);
-
-axiom (forall S: [int]bool, T: [int]bool :: { v4.Equal(S, T) } v4.Equal(S, T) <==> v4.Subset(S, T) && v4.Subset(T, S));
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Subset(S, T) } { T[x], v4.Subset(S, T) } S[x] && v4.Subset(S, T) ==> T[x]);
-
-axiom (forall S: [int]bool, T: [int]bool :: { v4.Subset(S, T) } v4.Subset(S, T) || (exists x: int :: S[x] && !T[x]));
-
-axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Disjoint(S, T) } { T[x], v4.Disjoint(S, T) } !(S[x] && v4.Disjoint(S, T) && T[x]));
-
-axiom (forall S: [int]bool, T: [int]bool :: { v4.Disjoint(S, T) } v4.Disjoint(S, T) || (exists x: int :: S[x] && T[x]));
-
-axiom (forall f: [int]int, x: int :: { v4.Inverse(f, f[x]) } v4.Inverse(f, f[x])[x]);
-
-axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f, y), f[x] } v4.Inverse(f, y)[x] ==> f[x] == y);
-
-axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f[x := y], y) } v4.Equal(v4.Inverse(f[x := y], y), v4.Union(v4.Inverse(f, y), v4.Singleton(x))));
-
-axiom (forall f: [int]int, x: int, y: int, z: int :: { v4.Inverse(f[x := y], z) } y == z || v4.Equal(v4.Inverse(f[x := y], z), v4.Difference(v4.Inverse(f, z), v4.Singleton(x))));
-
-axiom (forall x: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M)[x] } v4.Dereference(S, M)[x] ==> (exists y: int :: x == M[y] && S[y]));
-
-axiom (forall x: int, S: [int]bool, M: [int]int :: { M[x], S[x], v4.Dereference(S, M) } S[x] ==> v4.Dereference(S, M)[M[x]]);
-
-axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } !S[x] ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Dereference(S, M)));
-
-axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Difference(v4.Dereference(S, M), v4.Singleton(M[x])), v4.Singleton(y))));
-
-axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && !v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Dereference(S, M), v4.Singleton(y))));
-
-axiom (forall M: [name][int]int, x: int :: { v4.Unified(M)[x] } v4.Unified(M)[x] == M[v4.Field(x)][x]);
-
-axiom (forall M: [name][int]int, x: int, y: int :: { v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) } v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) == v4.Unified(M)[x := y]);
-
-procedure v2.havoc_assert(i: int);
-
-
-
-procedure v2.havoc_assume(i: int);
-
-
-
-procedure v2.__HAVOC_free(a: int);
-
-
-
-procedure v2.__HAVOC_malloc(obj_size: int) returns (new: int);
- free ensures new == _uf_v4.__HAVOC_malloc_new(obj_size);
-
-
-
-procedure v2.__HAVOC_det_malloc(obj_size: int) returns (new: int);
- free ensures new == _uf_v4.__HAVOC_det_malloc_new(obj_size);
-
-
-
-procedure v2.__HAVOC_memset_split_1(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
- free ensures ret == _uf_v4.__HAVOC_memset_split_1_ret(A, p, c, n);
-
-
-
-procedure v2.__HAVOC_memset_split_2(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
- free ensures ret == _uf_v4.__HAVOC_memset_split_2_ret(A, p, c, n);
-
-
-
-procedure v2.__HAVOC_memset_split_4(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
- free ensures ret == _uf_v4.__HAVOC_memset_split_4_ret(A, p, c, n);
-
-
-
-procedure v2.nondet_choice() returns (x: int);
- free ensures x == _uf_v4.nondet_choice_x();
-
-
-
-procedure v2.det_choice() returns (x: int);
- free ensures x == _uf_v4.det_choice_x();
-
-
-
-procedure v2._strdup(str: int) returns (new: int);
- free ensures new == _uf_v4._strdup_new(str);
-
-
-
-procedure v2._xstrcasecmp(a0: int, a1: int) returns (ret: int);
- free ensures ret == _uf_v4._xstrcasecmp_ret(a0, a1);
-
-
-
-procedure v2._xstrcmp(a0: int, a1: int) returns (ret: int);
- free ensures ret == _uf_v4._xstrcmp_ret(a0, a1);
-
-
-
-procedure {:inline 1} v2.Eval(e_.1: int);
- modifies v4.Mem_T.result__EXPR;
- free ensures v4.Mem_T.result__EXPR == _uf_v4.Eval_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
-
-
-
-procedure v2.EvalEntry1(e_.1: int, outval_.1: int);
- modifies v4.Mem_T.result__EXPR, v4.Mem_T.INT4;
- free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry1_v4.Mem_T.result__EXPR(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
- free ensures v4.Mem_T.INT4 == _uf_v4.EvalEntry1_v4.Mem_T.INT4(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
-
-
-
-procedure v2.EvalEntry2(e_.1: int);
- modifies v4.Mem_T.result__EXPR;
- free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry2_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
-
-
-
-procedure v2.__havoc_heapglobal_init();
-
-
-
-implementation {:inline 1} v2.Eval(e_.1: int)
-{
- var havoc_stringTemp: int;
- var condVal: int;
- var a1: int;
- var a2: int;
- var e: int;
- var op: int;
- var res: int;
- var tempBoogie0: int;
- var tempBoogie1: int;
- var tempBoogie2: int;
- var tempBoogie3: int;
- var tempBoogie4: int;
- var tempBoogie5: int;
- var tempBoogie6: int;
- var tempBoogie7: int;
- var tempBoogie8: int;
- var tempBoogie9: int;
- var tempBoogie10: int;
- var tempBoogie11: int;
- var tempBoogie12: int;
- var tempBoogie13: int;
- var tempBoogie14: int;
- var tempBoogie15: int;
- var tempBoogie16: int;
- var tempBoogie17: int;
- var tempBoogie18: int;
- var tempBoogie19: int;
- var __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume v4.INT_LT(e_.1, v4.alloc);
- a1 := 0;
- a2 := 0;
- e := 0;
- op := 0;
- res := 0;
- e := e_.1;
- goto label_3#2;
-
- label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto label_4#2;
-
- label_4#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto label_5#2;
-
- label_5#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto label_6#2;
-
- label_6#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto label_7#2;
-
- label_7#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 19} true;
- assert true;
- op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)];
- assume v4.value_is(v2.__ctobpl_const_1, op);
- assume v4.value_is(v2.__ctobpl_const_2, e);
- assume v4.value_is(v2.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)]);
- goto label_8#2;
-
- label_8#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 20} true;
- assert true;
- a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)];
- assume v4.value_is(v2.__ctobpl_const_4, a1);
- assume v4.value_is(v2.__ctobpl_const_5, e);
- assume v4.value_is(v2.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)]);
- goto label_9#2;
-
- label_9#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 21} true;
- assert true;
- a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)];
- assume v4.value_is(v2.__ctobpl_const_7, a2);
- assume v4.value_is(v2.__ctobpl_const_8, e);
- assume v4.value_is(v2.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)]);
- goto label_10#2;
-
- label_10#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 22} true;
- res := 0 - 1;
- assume v4.value_is(v2.__ctobpl_const_10, res);
- goto label_11#2;
-
- label_11#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 24} true;
- goto label_11_case_0#2, label_11_case_1#2, label_11_case_2#2;
-
- label_11_case_2#2:
- assume v4.INT_EQ(op, 2);
- assume v4.value_is(v2.__ctobpl_const_11, op);
- goto label_14#2;
-
- label_14#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 29} true;
- res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(a1, a2, 1);
- assume v4.value_is(v2.__ctobpl_const_18, res);
- assume v4.value_is(v2.__ctobpl_const_19, a1);
- assume v4.value_is(v2.__ctobpl_const_20, a2);
- goto label_12#2;
-
- label_11_case_1#2:
- assume v4.INT_EQ(op, 1);
- assume v4.value_is(v2.__ctobpl_const_11, op);
- goto label_13#2;
-
- label_13#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 27} true;
- res := v4.PLUS(a1, 1, a2);
- assume v4.value_is(v2.__ctobpl_const_15, res);
- assume v4.value_is(v2.__ctobpl_const_16, a1);
- assume v4.value_is(v2.__ctobpl_const_17, a2);
- goto label_12#2;
-
- label_11_case_0#2:
- assume v4.INT_NEQ(op, 1);
- assume v4.INT_NEQ(op, 2);
- assume v4.value_is(v2.__ctobpl_const_11, op);
- goto label_12#2;
-
- label_12#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 35} true;
- assert true;
- v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(e) := res];
- assume v4.value_is(v2.__ctobpl_const_12, e);
- assume v4.value_is(v2.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
- assume v4.value_is(v2.__ctobpl_const_14, res);
- goto label_1#2;
-
- label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 36} true;
- return;
-}
-
-
-
-implementation v2.EvalEntry1(e_.1: int, outval_.1: int)
-{
- var havoc_stringTemp: int;
- var condVal: int;
- var e: int;
- var outval: int;
- var tempBoogie0: int;
- var tempBoogie1: int;
- var tempBoogie2: int;
- var tempBoogie3: int;
- var tempBoogie4: int;
- var tempBoogie5: int;
- var tempBoogie6: int;
- var tempBoogie7: int;
- var tempBoogie8: int;
- var tempBoogie9: int;
- var tempBoogie10: int;
- var tempBoogie11: int;
- var tempBoogie12: int;
- var tempBoogie13: int;
- var tempBoogie14: int;
- var tempBoogie15: int;
- var tempBoogie16: int;
- var tempBoogie17: int;
- var tempBoogie18: int;
- var tempBoogie19: int;
- var __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume v4.INT_LT(e_.1, v4.alloc);
- assume v4.INT_LT(outval_.1, v4.alloc);
- e := 0;
- outval := 0;
- e := e_.1;
- outval := outval_.1;
- goto label_3#2;
-
- label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 40} true;
- call v2.Eval(e);
- assume v4.value_is(v2.__ctobpl_const_21, e);
- assume v4.value_is(v2.__ctobpl_const_22, e);
- goto label_6#2;
-
- label_6#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 41} true;
- assert true;
- assert true;
- v4.Mem_T.INT4 := v4.Mem_T.INT4[outval := v4.Mem_T.result__EXPR[v4.result__EXPR(e)]];
- assume v4.value_is(v2.__ctobpl_const_23, outval);
- assume v4.value_is(v2.__ctobpl_const_24, v4.Mem_T.INT4[outval]);
- assume v4.value_is(v2.__ctobpl_const_25, e);
- assume v4.value_is(v2.__ctobpl_const_26, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
- goto label_1#2;
-
- label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 42} true;
- return;
-}
-
-
-
-implementation v2.EvalEntry2(e_.1: int)
-{
- var havoc_stringTemp: int;
- var condVal: int;
- var e: int;
- var tempBoogie0: int;
- var tempBoogie1: int;
- var tempBoogie2: int;
- var tempBoogie3: int;
- var tempBoogie4: int;
- var tempBoogie5: int;
- var tempBoogie6: int;
- var tempBoogie7: int;
- var tempBoogie8: int;
- var tempBoogie9: int;
- var tempBoogie10: int;
- var tempBoogie11: int;
- var tempBoogie12: int;
- var tempBoogie13: int;
- var tempBoogie14: int;
- var tempBoogie15: int;
- var tempBoogie16: int;
- var tempBoogie17: int;
- var tempBoogie18: int;
- var tempBoogie19: int;
- var __havoc_dummy_return: int;
-
- anon0#2:
- havoc_stringTemp := 0;
- goto start#2;
-
- start#2:
- assume v4.INT_LT(e_.1, v4.alloc);
- e := 0;
- e := e_.1;
- goto label_3#2;
-
- label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 46} true;
- call v2.Eval(e);
- assume v4.value_is(v2.__ctobpl_const_27, e);
- assume v4.value_is(v2.__ctobpl_const_28, e);
- goto label_1#2;
-
- label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 47} true;
- return;
-}
-
-
-
-implementation v2.__havoc_heapglobal_init()
-{
-
- anon0#2:
- return;
-}
-
-
-
-type name;
-
-type byte;
-
-var Output_of_v2.Eval_v4.Mem_T.result__EXPR: [int]int;
-
-var Output_of_v4.Eval_v4.Mem_T.result__EXPR: [int]int;
-
-procedure EQ_v2.Eval__v4.Eval(e_.1: int) returns (AA_TEMP30: bool);
- modifies v4.Mem_T.result__EXPR, Output_of_v2.Eval_v4.Mem_T.result__EXPR, Output_of_v4.Eval_v4.Mem_T.result__EXPR;
- ensures AA_TEMP30;
-
-
-
-implementation EQ_v2.Eval__v4.Eval(e_.1: int) returns (AA_TEMP30: bool)
-{
- var AA_TEMP10: [int]int;
- var AA_TEMP00: [int]int;
- var inline$v2.Eval$0$havoc_stringTemp: int;
- var inline$v2.Eval$0$condVal: int;
- var inline$v2.Eval$0$a1: int;
- var inline$v2.Eval$0$a2: int;
- var inline$v2.Eval$0$e: int;
- var inline$v2.Eval$0$op: int;
- var inline$v2.Eval$0$res: int;
- var inline$v2.Eval$0$tempBoogie0: int;
- var inline$v2.Eval$0$tempBoogie1: int;
- var inline$v2.Eval$0$tempBoogie2: int;
- var inline$v2.Eval$0$tempBoogie3: int;
- var inline$v2.Eval$0$tempBoogie4: int;
- var inline$v2.Eval$0$tempBoogie5: int;
- var inline$v2.Eval$0$tempBoogie6: int;
- var inline$v2.Eval$0$tempBoogie7: int;
- var inline$v2.Eval$0$tempBoogie8: int;
- var inline$v2.Eval$0$tempBoogie9: int;
- var inline$v2.Eval$0$tempBoogie10: int;
- var inline$v2.Eval$0$tempBoogie11: int;
- var inline$v2.Eval$0$tempBoogie12: int;
- var inline$v2.Eval$0$tempBoogie13: int;
- var inline$v2.Eval$0$tempBoogie14: int;
- var inline$v2.Eval$0$tempBoogie15: int;
- var inline$v2.Eval$0$tempBoogie16: int;
- var inline$v2.Eval$0$tempBoogie17: int;
- var inline$v2.Eval$0$tempBoogie18: int;
- var inline$v2.Eval$0$tempBoogie19: int;
- var inline$v2.Eval$0$__havoc_dummy_return: int;
- var inline$v2.Eval$0$e_.1: int;
- var inline$v2.Eval$0$v4.Mem_T.result__EXPR: [int]int;
- var inline$v4.Eval$0$havoc_stringTemp: int;
- var inline$v4.Eval$0$condVal: int;
- var inline$v4.Eval$0$a1: int;
- var inline$v4.Eval$0$a2: int;
- var inline$v4.Eval$0$e: int;
- var inline$v4.Eval$0$op: int;
- var inline$v4.Eval$0$res: int;
- var inline$v4.Eval$0$result.UnsignedAdd$1: int;
- var inline$v4.Eval$0$result.UnsignedSub$2: int;
- var inline$v4.Eval$0$tempBoogie0: int;
- var inline$v4.Eval$0$tempBoogie1: int;
- var inline$v4.Eval$0$tempBoogie2: int;
- var inline$v4.Eval$0$tempBoogie3: int;
- var inline$v4.Eval$0$tempBoogie4: int;
- var inline$v4.Eval$0$tempBoogie5: int;
- var inline$v4.Eval$0$tempBoogie6: int;
- var inline$v4.Eval$0$tempBoogie7: int;
- var inline$v4.Eval$0$tempBoogie8: int;
- var inline$v4.Eval$0$tempBoogie9: int;
- var inline$v4.Eval$0$tempBoogie10: int;
- var inline$v4.Eval$0$tempBoogie11: int;
- var inline$v4.Eval$0$tempBoogie12: int;
- var inline$v4.Eval$0$tempBoogie13: int;
- var inline$v4.Eval$0$tempBoogie14: int;
- var inline$v4.Eval$0$tempBoogie15: int;
- var inline$v4.Eval$0$tempBoogie16: int;
- var inline$v4.Eval$0$tempBoogie17: int;
- var inline$v4.Eval$0$tempBoogie18: int;
- var inline$v4.Eval$0$tempBoogie19: int;
- var inline$v4.Eval$0$__havoc_dummy_return: int;
- var inline$v4.Eval$0$e_.1: int;
- var inline$v4.Eval$0$v4.Mem_T.result__EXPR: [int]int;
-
- AA_INSTR_EQ_BODY:
- AA_TEMP00 := v4.Mem_T.result__EXPR;
- goto inline$v2.Eval$0$Entry;
-
- inline$v2.Eval$0$Entry:
- inline$v2.Eval$0$e_.1 := e_.1;
- inline$v2.Eval$0$v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
- goto inline$v2.Eval$0$anon0#2;
-
- inline$v2.Eval$0$anon0#2:
- inline$v2.Eval$0$havoc_stringTemp := 0;
- goto inline$v2.Eval$0$start#2;
-
- inline$v2.Eval$0$start#2:
- assume v4.INT_LT(inline$v2.Eval$0$e_.1, v4.alloc);
- inline$v2.Eval$0$a1 := 0;
- inline$v2.Eval$0$a2 := 0;
- inline$v2.Eval$0$e := 0;
- inline$v2.Eval$0$op := 0;
- inline$v2.Eval$0$res := 0;
- inline$v2.Eval$0$e := inline$v2.Eval$0$e_.1;
- goto inline$v2.Eval$0$label_3#2;
-
- inline$v2.Eval$0$label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto inline$v2.Eval$0$label_4#2;
-
- inline$v2.Eval$0$label_4#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto inline$v2.Eval$0$label_5#2;
-
- inline$v2.Eval$0$label_5#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto inline$v2.Eval$0$label_6#2;
-
- inline$v2.Eval$0$label_6#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
- goto inline$v2.Eval$0$label_7#2;
-
- inline$v2.Eval$0$label_7#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 19} true;
- assert true;
- inline$v2.Eval$0$op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v2.Eval$0$e)];
- assume v4.value_is(v2.__ctobpl_const_1, inline$v2.Eval$0$op);
- assume v4.value_is(v2.__ctobpl_const_2, inline$v2.Eval$0$e);
- assume v4.value_is(v2.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v2.Eval$0$e)]);
- goto inline$v2.Eval$0$label_8#2;
-
- inline$v2.Eval$0$label_8#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 20} true;
- assert true;
- inline$v2.Eval$0$a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v2.Eval$0$e)];
- assume v4.value_is(v2.__ctobpl_const_4, inline$v2.Eval$0$a1);
- assume v4.value_is(v2.__ctobpl_const_5, inline$v2.Eval$0$e);
- assume v4.value_is(v2.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v2.Eval$0$e)]);
- goto inline$v2.Eval$0$label_9#2;
-
- inline$v2.Eval$0$label_9#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 21} true;
- assert true;
- inline$v2.Eval$0$a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v2.Eval$0$e)];
- assume v4.value_is(v2.__ctobpl_const_7, inline$v2.Eval$0$a2);
- assume v4.value_is(v2.__ctobpl_const_8, inline$v2.Eval$0$e);
- assume v4.value_is(v2.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v2.Eval$0$e)]);
- goto inline$v2.Eval$0$label_10#2;
-
- inline$v2.Eval$0$label_10#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 22} true;
- inline$v2.Eval$0$res := 0 - 1;
- assume v4.value_is(v2.__ctobpl_const_10, inline$v2.Eval$0$res);
- goto inline$v2.Eval$0$label_11#2;
-
- inline$v2.Eval$0$label_11#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 24} true;
- goto inline$v2.Eval$0$label_11_case_0#2, inline$v2.Eval$0$label_11_case_1#2, inline$v2.Eval$0$label_11_case_2#2;
-
- inline$v2.Eval$0$label_11_case_2#2:
- assume v4.INT_EQ(inline$v2.Eval$0$op, 2);
- assume v4.value_is(v2.__ctobpl_const_11, inline$v2.Eval$0$op);
- goto inline$v2.Eval$0$label_14#2;
-
- inline$v2.Eval$0$label_14#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 29} true;
- inline$v2.Eval$0$res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(inline$v2.Eval$0$a1, inline$v2.Eval$0$a2, 1);
- assume v4.value_is(v2.__ctobpl_const_18, inline$v2.Eval$0$res);
- assume v4.value_is(v2.__ctobpl_const_19, inline$v2.Eval$0$a1);
- assume v4.value_is(v2.__ctobpl_const_20, inline$v2.Eval$0$a2);
- goto inline$v2.Eval$0$label_12#2;
-
- inline$v2.Eval$0$label_11_case_1#2:
- assume v4.INT_EQ(inline$v2.Eval$0$op, 1);
- assume v4.value_is(v2.__ctobpl_const_11, inline$v2.Eval$0$op);
- goto inline$v2.Eval$0$label_13#2;
-
- inline$v2.Eval$0$label_13#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 27} true;
- inline$v2.Eval$0$res := v4.PLUS(inline$v2.Eval$0$a1, 1, inline$v2.Eval$0$a2);
- assume v4.value_is(v2.__ctobpl_const_15, inline$v2.Eval$0$res);
- assume v4.value_is(v2.__ctobpl_const_16, inline$v2.Eval$0$a1);
- assume v4.value_is(v2.__ctobpl_const_17, inline$v2.Eval$0$a2);
- goto inline$v2.Eval$0$label_12#2;
-
- inline$v2.Eval$0$label_11_case_0#2:
- assume v4.INT_NEQ(inline$v2.Eval$0$op, 1);
- assume v4.INT_NEQ(inline$v2.Eval$0$op, 2);
- assume v4.value_is(v2.__ctobpl_const_11, inline$v2.Eval$0$op);
- goto inline$v2.Eval$0$label_12#2;
-
- inline$v2.Eval$0$label_12#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 35} true;
- assert true;
- v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v2.Eval$0$e) := inline$v2.Eval$0$res];
- assume v4.value_is(v2.__ctobpl_const_12, inline$v2.Eval$0$e);
- assume v4.value_is(v2.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v2.Eval$0$e)]);
- assume v4.value_is(v2.__ctobpl_const_14, inline$v2.Eval$0$res);
- goto inline$v2.Eval$0$label_1#2;
-
- inline$v2.Eval$0$label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 36} true;
- goto inline$v2.Eval$0$Return;
-
- inline$v2.Eval$0$Return:
- goto AA_INSTR_EQ_BODY$1;
-
- AA_INSTR_EQ_BODY$1:
- AA_TEMP10 := v4.Mem_T.result__EXPR;
- v4.Mem_T.result__EXPR := AA_TEMP00;
- goto inline$v4.Eval$0$Entry;
-
- inline$v4.Eval$0$Entry:
- inline$v4.Eval$0$e_.1 := e_.1;
- inline$v4.Eval$0$v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
- goto inline$v4.Eval$0$anon0#2;
-
- inline$v4.Eval$0$anon0#2:
- inline$v4.Eval$0$havoc_stringTemp := 0;
- goto inline$v4.Eval$0$start#2;
-
- inline$v4.Eval$0$start#2:
- assume v4.INT_LT(inline$v4.Eval$0$e_.1, v4.alloc);
- inline$v4.Eval$0$a1 := 0;
- inline$v4.Eval$0$a2 := 0;
- inline$v4.Eval$0$e := 0;
- inline$v4.Eval$0$op := 0;
- inline$v4.Eval$0$res := 0;
- inline$v4.Eval$0$result.UnsignedAdd$1 := 0;
- inline$v4.Eval$0$result.UnsignedSub$2 := 0;
- inline$v4.Eval$0$e := inline$v4.Eval$0$e_.1;
- goto inline$v4.Eval$0$label_3#2;
-
- inline$v4.Eval$0$label_3#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto inline$v4.Eval$0$label_4#2;
-
- inline$v4.Eval$0$label_4#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto inline$v4.Eval$0$label_5#2;
-
- inline$v4.Eval$0$label_5#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto inline$v4.Eval$0$label_6#2;
-
- inline$v4.Eval$0$label_6#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
- goto inline$v4.Eval$0$label_7#2;
-
- inline$v4.Eval$0$label_7#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 21} true;
- assert true;
- inline$v4.Eval$0$op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v4.Eval$0$e)];
- assume v4.value_is(v4.__ctobpl_const_1, inline$v4.Eval$0$op);
- assume v4.value_is(v4.__ctobpl_const_2, inline$v4.Eval$0$e);
- assume v4.value_is(v4.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v4.Eval$0$e)]);
- goto inline$v4.Eval$0$label_8#2;
-
- inline$v4.Eval$0$label_8#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 22} true;
- assert true;
- inline$v4.Eval$0$a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v4.Eval$0$e)];
- assume v4.value_is(v4.__ctobpl_const_4, inline$v4.Eval$0$a1);
- assume v4.value_is(v4.__ctobpl_const_5, inline$v4.Eval$0$e);
- assume v4.value_is(v4.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v4.Eval$0$e)]);
- goto inline$v4.Eval$0$label_9#2;
-
- inline$v4.Eval$0$label_9#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 23} true;
- assert true;
- inline$v4.Eval$0$a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v4.Eval$0$e)];
- assume v4.value_is(v4.__ctobpl_const_7, inline$v4.Eval$0$a2);
- assume v4.value_is(v4.__ctobpl_const_8, inline$v4.Eval$0$e);
- assume v4.value_is(v4.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v4.Eval$0$e)]);
- goto inline$v4.Eval$0$label_10#2;
-
- inline$v4.Eval$0$label_10#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 24} true;
- inline$v4.Eval$0$res := 0 - 1;
- assume v4.value_is(v4.__ctobpl_const_10, inline$v4.Eval$0$res);
- goto inline$v4.Eval$0$label_11#2;
-
- inline$v4.Eval$0$label_11#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 26} true;
- goto inline$v4.Eval$0$label_11_case_0#2, inline$v4.Eval$0$label_11_case_1#2, inline$v4.Eval$0$label_11_case_2#2;
-
- inline$v4.Eval$0$label_11_case_2#2:
- assume v4.INT_EQ(inline$v4.Eval$0$op, 2);
- assume v4.value_is(v4.__ctobpl_const_11, inline$v4.Eval$0$op);
- goto inline$v4.Eval$0$label_14#2;
-
- inline$v4.Eval$0$label_14#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 35} true;
- goto inline$v4.Eval$0$label_14_true#2, inline$v4.Eval$0$label_14_false#2;
-
- inline$v4.Eval$0$label_14_false#2:
- assume v4.isUnsigned == 0;
- assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
- goto inline$v4.Eval$0$label_15#2;
-
- inline$v4.Eval$0$label_15#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 38} true;
- inline$v4.Eval$0$res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(inline$v4.Eval$0$a1, inline$v4.Eval$0$a2, 1);
- assume v4.value_is(v4.__ctobpl_const_17, inline$v4.Eval$0$res);
- assume v4.value_is(v4.__ctobpl_const_18, inline$v4.Eval$0$a1);
- assume v4.value_is(v4.__ctobpl_const_19, inline$v4.Eval$0$a2);
- goto inline$v4.Eval$0$label_12#2;
-
- inline$v4.Eval$0$label_14_true#2:
- assume v4.isUnsigned != 0;
- assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
- goto inline$v4.Eval$0$label_16#2;
-
- inline$v4.Eval$0$label_16#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
- call inline$v4.Eval$0$result.UnsignedSub$2 := v4.UnsignedSub(inline$v4.Eval$0$a1, inline$v4.Eval$0$a2);
- assume v4.value_is(v4.__ctobpl_const_20, inline$v4.Eval$0$a1);
- assume v4.value_is(v4.__ctobpl_const_21, inline$v4.Eval$0$a2);
- assume v4.value_is(v4.__ctobpl_const_22, inline$v4.Eval$0$a1);
- assume v4.value_is(v4.__ctobpl_const_23, inline$v4.Eval$0$a2);
- goto inline$v4.Eval$0$label_19#2;
-
- inline$v4.Eval$0$label_19#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
- inline$v4.Eval$0$res := inline$v4.Eval$0$result.UnsignedSub$2;
- assume v4.value_is(v4.__ctobpl_const_24, inline$v4.Eval$0$res);
- assume v4.value_is(v4.__ctobpl_const_25, inline$v4.Eval$0$result.UnsignedSub$2);
- goto inline$v4.Eval$0$label_12#2;
-
- inline$v4.Eval$0$label_11_case_1#2:
- assume v4.INT_EQ(inline$v4.Eval$0$op, 1);
- assume v4.value_is(v4.__ctobpl_const_11, inline$v4.Eval$0$op);
- goto inline$v4.Eval$0$label_13#2;
-
- inline$v4.Eval$0$label_13#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 29} true;
- goto inline$v4.Eval$0$label_13_true#2, inline$v4.Eval$0$label_13_false#2;
-
- inline$v4.Eval$0$label_13_false#2:
- assume v4.isUnsigned == 0;
- assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
- goto inline$v4.Eval$0$label_20#2;
-
- inline$v4.Eval$0$label_20#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 32} true;
- inline$v4.Eval$0$res := v4.PLUS(inline$v4.Eval$0$a1, 1, inline$v4.Eval$0$a2);
- assume v4.value_is(v4.__ctobpl_const_26, inline$v4.Eval$0$res);
- assume v4.value_is(v4.__ctobpl_const_27, inline$v4.Eval$0$a1);
- assume v4.value_is(v4.__ctobpl_const_28, inline$v4.Eval$0$a2);
- goto inline$v4.Eval$0$label_12#2;
-
- inline$v4.Eval$0$label_13_true#2:
- assume v4.isUnsigned != 0;
- assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
- goto inline$v4.Eval$0$label_21#2;
-
- inline$v4.Eval$0$label_21#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
- call inline$v4.Eval$0$result.UnsignedAdd$1 := v4.UnsignedAdd(inline$v4.Eval$0$a1, inline$v4.Eval$0$a2);
- assume v4.value_is(v4.__ctobpl_const_29, inline$v4.Eval$0$a1);
- assume v4.value_is(v4.__ctobpl_const_30, inline$v4.Eval$0$a2);
- assume v4.value_is(v4.__ctobpl_const_31, inline$v4.Eval$0$a1);
- assume v4.value_is(v4.__ctobpl_const_32, inline$v4.Eval$0$a2);
- goto inline$v4.Eval$0$label_24#2;
-
- inline$v4.Eval$0$label_24#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
- inline$v4.Eval$0$res := inline$v4.Eval$0$result.UnsignedAdd$1;
- assume v4.value_is(v4.__ctobpl_const_33, inline$v4.Eval$0$res);
- assume v4.value_is(v4.__ctobpl_const_34, inline$v4.Eval$0$result.UnsignedAdd$1);
- goto inline$v4.Eval$0$label_12#2;
-
- inline$v4.Eval$0$label_11_case_0#2:
- assume v4.INT_NEQ(inline$v4.Eval$0$op, 1);
- assume v4.INT_NEQ(inline$v4.Eval$0$op, 2);
- assume v4.value_is(v4.__ctobpl_const_11, inline$v4.Eval$0$op);
- goto inline$v4.Eval$0$label_12#2;
-
- inline$v4.Eval$0$label_12#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 41} true;
- assert true;
- v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v4.Eval$0$e) := inline$v4.Eval$0$res];
- assume v4.value_is(v4.__ctobpl_const_12, inline$v4.Eval$0$e);
- assume v4.value_is(v4.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v4.Eval$0$e)]);
- assume v4.value_is(v4.__ctobpl_const_14, inline$v4.Eval$0$res);
- goto inline$v4.Eval$0$label_1#2;
-
- inline$v4.Eval$0$label_1#2:
- assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 42} true;
- goto inline$v4.Eval$0$Return;
-
- inline$v4.Eval$0$Return:
- goto AA_INSTR_EQ_BODY$2;
-
- AA_INSTR_EQ_BODY$2:
- Output_of_v2.Eval_v4.Mem_T.result__EXPR := AA_TEMP10;
- Output_of_v4.Eval_v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
- AA_TEMP30 := AA_TEMP10 == v4.Mem_T.result__EXPR || (forall _x0: int :: AA_TEMP10[_x0] == v4.Mem_T.result__EXPR[_x0]);
- return;
-}
-
-
-
-var Output_of_v2.EvalEntry1_v4.Mem_T.result__EXPR: [int]int;
-
-var Output_of_v4.EvalEntry1_v4.Mem_T.result__EXPR: [int]int;
-
-var Output_of_v2.EvalEntry1_v4.Mem_T.INT4: [int]int;
-
-var Output_of_v4.EvalEntry1_v4.Mem_T.INT4: [int]int;
-
-var Output_of_v2.EvalEntry1_v4.isUnsigned: int;
-
-var Output_of_v4.EvalEntry1_v4.isUnsigned: int;
-
-procedure EQ_v2.EvalEntry1__v4.EvalEntry1(e_.1: int, outval_.1: int) returns (AA_TEMP80: bool, AA_TEMP81: bool, AA_TEMP82: bool);
- modifies v4.Mem_T.result__EXPR, v4.Mem_T.INT4, v4.isUnsigned, Output_of_v2.EvalEntry1_v4.Mem_T.result__EXPR, Output_of_v4.EvalEntry1_v4.Mem_T.result__EXPR, Output_of_v2.EvalEntry1_v4.Mem_T.INT4, Output_of_v4.EvalEntry1_v4.Mem_T.INT4, Output_of_v2.EvalEntry1_v4.isUnsigned, Output_of_v4.EvalEntry1_v4.isUnsigned;
- ensures AA_TEMP82 && AA_TEMP81 && AA_TEMP80;
-
-
-
-implementation EQ_v2.EvalEntry1__v4.EvalEntry1(e_.1: int, outval_.1: int) returns (AA_TEMP80: bool, AA_TEMP81: bool, AA_TEMP82: bool)
-{
- var AA_TEMP60: [int]int;
- var AA_TEMP61: [int]int;
- var AA_TEMP62: int;
- var AA_TEMP50: [int]int;
- var AA_TEMP51: [int]int;
- var AA_TEMP52: int;
-
- AA_INSTR_EQ_BODY:
- AA_TEMP50 := v4.Mem_T.result__EXPR;
- AA_TEMP51 := v4.Mem_T.INT4;
- AA_TEMP52 := v4.isUnsigned;
- call v2.EvalEntry1(e_.1, outval_.1);
- AA_TEMP60 := v4.Mem_T.result__EXPR;
- AA_TEMP61 := v4.Mem_T.INT4;
- AA_TEMP62 := v4.isUnsigned;
- v4.Mem_T.result__EXPR := AA_TEMP50;
- v4.Mem_T.INT4 := AA_TEMP51;
- v4.isUnsigned := AA_TEMP52;
- call v4.EvalEntry1(e_.1, outval_.1);
- Output_of_v2.EvalEntry1_v4.Mem_T.result__EXPR := AA_TEMP60;
- Output_of_v4.EvalEntry1_v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
- Output_of_v2.EvalEntry1_v4.Mem_T.INT4 := AA_TEMP61;
- Output_of_v4.EvalEntry1_v4.Mem_T.INT4 := v4.Mem_T.INT4;
- Output_of_v2.EvalEntry1_v4.isUnsigned := AA_TEMP62;
- Output_of_v4.EvalEntry1_v4.isUnsigned := v4.isUnsigned;
- AA_TEMP80, AA_TEMP81, AA_TEMP82 := AA_TEMP60 == v4.Mem_T.result__EXPR || (forall _x0: int :: AA_TEMP60[_x0] == v4.Mem_T.result__EXPR[_x0]), AA_TEMP61 == v4.Mem_T.INT4 || (forall _x0: int :: AA_TEMP61[_x0] == v4.Mem_T.INT4[_x0]), AA_TEMP62 == v4.isUnsigned;
- return;
-}
-
-
-
-var Output_of_v2.EvalEntry2_v4.Mem_T.result__EXPR: [int]int;
-
-var Output_of_v4.EvalEntry2_v4.Mem_T.result__EXPR: [int]int;
-
-var Output_of_v2.EvalEntry2_v4.isUnsigned: int;
-
-var Output_of_v4.EvalEntry2_v4.isUnsigned: int;
-
-procedure EQ_v2.EvalEntry2__v4.EvalEntry2(e_.1: int) returns (AA_TEMP130: bool, AA_TEMP131: bool);
- modifies v4.Mem_T.result__EXPR, v4.isUnsigned, Output_of_v2.EvalEntry2_v4.Mem_T.result__EXPR, Output_of_v4.EvalEntry2_v4.Mem_T.result__EXPR, Output_of_v2.EvalEntry2_v4.isUnsigned, Output_of_v4.EvalEntry2_v4.isUnsigned;
- ensures AA_TEMP131 && AA_TEMP130;
-
-
-
-implementation EQ_v2.EvalEntry2__v4.EvalEntry2(e_.1: int) returns (AA_TEMP130: bool, AA_TEMP131: bool)
-{
- var AA_TEMP110: [int]int;
- var AA_TEMP111: int;
- var AA_TEMP100: [int]int;
- var AA_TEMP101: int;
-
- AA_INSTR_EQ_BODY:
- AA_TEMP100 := v4.Mem_T.result__EXPR;
- AA_TEMP101 := v4.isUnsigned;
- call v2.EvalEntry2(e_.1);
- AA_TEMP110 := v4.Mem_T.result__EXPR;
- AA_TEMP111 := v4.isUnsigned;
- v4.Mem_T.result__EXPR := AA_TEMP100;
- v4.isUnsigned := AA_TEMP101;
- call v4.EvalEntry2(e_.1);
- Output_of_v2.EvalEntry2_v4.Mem_T.result__EXPR := AA_TEMP110;
- Output_of_v4.EvalEntry2_v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
- Output_of_v2.EvalEntry2_v4.isUnsigned := AA_TEMP111;
- Output_of_v4.EvalEntry2_v4.isUnsigned := v4.isUnsigned;
- AA_TEMP130, AA_TEMP131 := AA_TEMP110 == v4.Mem_T.result__EXPR || (forall _x0: int :: AA_TEMP110[_x0] == v4.Mem_T.result__EXPR[_x0]), AA_TEMP111 == v4.isUnsigned;
- return;
-}
-
-
-
-function _uf_v4.__HAVOC_malloc_new(arg_0: int) : int;
-
-function _uf_v2.__HAVOC_malloc_new(arg_0: int) : int;
-
-function _uf_v4.__HAVOC_det_malloc_new(arg_0: int) : int;
-
-function _uf_v2.__HAVOC_det_malloc_new(arg_0: int) : int;
-
-function _uf_v4.__HAVOC_memset_split_1_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
-
-function _uf_v2.__HAVOC_memset_split_1_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
-
-function _uf_v4.__HAVOC_memset_split_2_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
-
-function _uf_v2.__HAVOC_memset_split_2_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
-
-function _uf_v4.__HAVOC_memset_split_4_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
-
-function _uf_v2.__HAVOC_memset_split_4_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
-
-function _uf_v4.nondet_choice_x() : int;
-
-function _uf_v2.nondet_choice_x() : int;
-
-function _uf_v4.det_choice_x() : int;
-
-function _uf_v2.det_choice_x() : int;
-
-function _uf_v4._strdup_new(arg_0: int) : int;
-
-function _uf_v2._strdup_new(arg_0: int) : int;
-
-function _uf_v4._xstrcasecmp_ret(arg_0: int, arg_1: int) : int;
-
-function _uf_v2._xstrcasecmp_ret(arg_0: int, arg_1: int) : int;
-
-function _uf_v4._xstrcmp_ret(arg_0: int, arg_1: int) : int;
-
-function _uf_v2._xstrcmp_ret(arg_0: int, arg_1: int) : int;
-
-function _uf_v4.Eval_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
-
-function _uf_v2.Eval_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
-
-function _uf_v4.EvalEntry1_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
-
-function _uf_v4.EvalEntry1_v4.Mem_T.INT4(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
-
-function _uf_v4.EvalEntry1_v4.isUnsigned(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : int;
-
-function _uf_v2.EvalEntry1_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
-
-function _uf_v2.EvalEntry1_v4.Mem_T.INT4(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
-
-function _uf_v4.EvalEntry2_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
-
-function _uf_v4.EvalEntry2_v4.isUnsigned(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : int;
-
-function _uf_v2.EvalEntry2_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
+// RUN: %boogie -typeEncoding:m -z3multipleErrors "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var v4.Mem: [name][int]int;
+
+var v4.alloc: int;
+
+var v4.Mem_T.INT4: [int]int;
+
+var v4.Mem_T.op1__EXPR: [int]int;
+
+var v4.Mem_T.op2__EXPR: [int]int;
+
+var v4.Mem_T.oper__EXPR: [int]int;
+
+var v4.Mem_T.result__EXPR: [int]int;
+
+var v4.detChoiceCnt: int;
+
+var v4.Res_KERNEL_SOURCE: [int]int;
+
+var v4.Res_PROBED: [int]int;
+
+var v4.isUnsigned: int;
+
+const unique v4.T.oper__EXPR: name;
+
+const unique v4.T.op1__EXPR: name;
+
+const unique v4.T.op2__EXPR: name;
+
+const unique v4.T.result__EXPR: name;
+
+const unique v4.T.INT4: name;
+
+const unique v4.T.PINT4: name;
+
+const unique v4.T.PPINT4: name;
+
+const unique v4.T.PP_EXPR: name;
+
+const unique v4.T.P_EXPR: name;
+
+const unique v4.T._EXPR: name;
+
+const {:model_const "e->op2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 23} unique v4.__ctobpl_const_9: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 24} unique v4.__ctobpl_const_10: int;
+
+const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 26} unique v4.__ctobpl_const_11: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 41} unique v4.__ctobpl_const_12: int;
+
+const {:model_const "e->op1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 22} unique v4.__ctobpl_const_6: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 23} unique v4.__ctobpl_const_7: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 23} unique v4.__ctobpl_const_8: int;
+
+const {:model_const "e->oper"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 21} unique v4.__ctobpl_const_3: int;
+
+const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 21} unique v4.__ctobpl_const_1: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 21} unique v4.__ctobpl_const_2: int;
+
+const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 41} unique v4.__ctobpl_const_13: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 41} unique v4.__ctobpl_const_14: int;
+
+const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 29} unique v4.__ctobpl_const_15: int;
+
+const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 35} unique v4.__ctobpl_const_16: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 38} unique v4.__ctobpl_const_17: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 38} unique v4.__ctobpl_const_18: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 38} unique v4.__ctobpl_const_19: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_20: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_21: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_22: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_23: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_24: int;
+
+const {:model_const "result.UnsignedSub"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 36} unique v4.__ctobpl_const_25: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 32} unique v4.__ctobpl_const_26: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 32} unique v4.__ctobpl_const_27: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 32} unique v4.__ctobpl_const_28: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_29: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_30: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_31: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_32: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_33: int;
+
+const {:model_const "result.UnsignedAdd"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 30} unique v4.__ctobpl_const_34: int;
+
+const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 47} unique v4.__ctobpl_const_35: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 22} unique v4.__ctobpl_const_4: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 22} unique v4.__ctobpl_const_5: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 48} unique v4.__ctobpl_const_36: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 48} unique v4.__ctobpl_const_37: int;
+
+const {:model_const "outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_38: int;
+
+const {:model_const "*outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_39: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_40: int;
+
+const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 49} unique v4.__ctobpl_const_41: int;
+
+const {:model_const "isUnsigned"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 54} unique v4.__ctobpl_const_42: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 55} unique v4.__ctobpl_const_43: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceLine 55} unique v4.__ctobpl_const_44: int;
+
+function v4.OneByteToInt(arg_0: byte) : int;
+
+function v4.TwoBytesToInt(arg_0: byte, arg_1: byte) : int;
+
+function v4.FourBytesToInt(arg_0: byte, arg_1: byte, arg_2: byte, arg_3: byte) : int;
+
+function v4.Field(arg_0: int) : name;
+
+function v4.Base(arg_0: int) : int;
+
+function v4.Match(a: int, t: name) : bool;
+
+function v4.MatchBase(b: int, a: int, t: name) : bool;
+
+function v4.HasType(v: int, t: name) : bool;
+
+function v4.T.Ptr(t: name) : name;
+
+function v4.op1__EXPR(arg_0: int) : int;
+
+function v4.op1__EXPRInv(arg_0: int) : int;
+
+function v4._S_op1__EXPR(arg_0: [int]bool) : [int]bool;
+
+function v4._S_op1__EXPRInv(arg_0: [int]bool) : [int]bool;
+
+function v4.op2__EXPR(arg_0: int) : int;
+
+function v4.op2__EXPRInv(arg_0: int) : int;
+
+function v4._S_op2__EXPR(arg_0: [int]bool) : [int]bool;
+
+function v4._S_op2__EXPRInv(arg_0: [int]bool) : [int]bool;
+
+function v4.oper__EXPR(arg_0: int) : int;
+
+function v4.oper__EXPRInv(arg_0: int) : int;
+
+function v4._S_oper__EXPR(arg_0: [int]bool) : [int]bool;
+
+function v4._S_oper__EXPRInv(arg_0: [int]bool) : [int]bool;
+
+function v4.result__EXPR(arg_0: int) : int;
+
+function v4.result__EXPRInv(arg_0: int) : int;
+
+function v4._S_result__EXPR(arg_0: [int]bool) : [int]bool;
+
+function v4._S_result__EXPRInv(arg_0: [int]bool) : [int]bool;
+
+function v4.INT_EQ(x: int, y: int) : bool;
+
+function v4.INT_NEQ(x: int, y: int) : bool;
+
+function v4.INT_ADD(x: int, y: int) : int;
+
+function v4.INT_SUB(x: int, y: int) : int;
+
+function v4.INT_MULT(x: int, y: int) : int;
+
+function v4.INT_DIV(x: int, y: int) : int;
+
+function v4.INT_LT(x: int, y: int) : bool;
+
+function v4.INT_ULT(x: int, y: int) : bool;
+
+function v4.INT_LEQ(x: int, y: int) : bool;
+
+function v4.INT_ULEQ(x: int, y: int) : bool;
+
+function v4.INT_GT(x: int, y: int) : bool;
+
+function v4.INT_UGT(x: int, y: int) : bool;
+
+function v4.INT_GEQ(x: int, y: int) : bool;
+
+function v4.INT_UGEQ(x: int, y: int) : bool;
+
+function v4.BV32_EQ(x: bv32, y: bv32) : bool;
+
+function v4.BV32_NEQ(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvadd"} v4.BV32_ADD(x: bv32, y: bv32) : bv32;
+
+function {:bvbuiltin "bvsub"} v4.BV32_SUB(x: bv32, y: bv32) : bv32;
+
+function {:bvbuiltin "bvmul"} v4.BV32_MULT(x: bv32, y: bv32) : bv32;
+
+function {:bvbuiltin "bvudiv"} v4.BV32_DIV(x: bv32, y: bv32) : bv32;
+
+function {:bvbuiltin "bvult"} v4.BV32_ULT(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvslt"} v4.BV32_LT(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvule"} v4.BV32_ULEQ(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvsle"} v4.BV32_LEQ(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvugt"} v4.BV32_UGT(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvsgt"} v4.BV32_GT(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvuge"} v4.BV32_UGEQ(x: bv32, y: bv32) : bool;
+
+function {:bvbuiltin "bvsge"} v4.BV32_GEQ(x: bv32, y: bv32) : bool;
+
+function v4.MINUS_BOTH_PTR_OR_BOTH_INT(a: int, b: int, size: int) : int;
+
+function v4.MINUS_LEFT_PTR(a: int, a_size: int, b: int) : int;
+
+function v4.PLUS(a: int, a_size: int, b: int) : int;
+
+function v4.MULT(a: int, b: int) : int;
+
+function v4.DIV(a: int, b: int) : int;
+
+function v4.BINARY_BOTH_INT(a: int, b: int) : int;
+
+function v4.POW2(a: int) : bool;
+
+function v4.BIT_BAND(a: int, b: int) : int;
+
+function v4.BIT_BOR(a: int, b: int) : int;
+
+function v4.BIT_BXOR(a: int, b: int) : int;
+
+function v4.BIT_BNOT(a: int) : int;
+
+function v4.choose(a: bool, b: int, c: int) : int;
+
+function v4.LIFT(a: bool) : int;
+
+function v4.PTR_NOT(a: int) : int;
+
+function v4.NULL_CHECK(a: int) : int;
+
+function v4.NewAlloc(x: int, y: int) : int;
+
+function v4.DetChoiceFunc(a: int) : int;
+
+function v4.Equal(arg_0: [int]bool, arg_1: [int]bool) : bool;
+
+function v4.Subset(arg_0: [int]bool, arg_1: [int]bool) : bool;
+
+function v4.Disjoint(arg_0: [int]bool, arg_1: [int]bool) : bool;
+
+function v4.Empty() : [int]bool;
+
+function v4.SetTrue() : [int]bool;
+
+function v4.Singleton(arg_0: int) : [int]bool;
+
+function v4.Reachable(arg_0: [int,int]bool, arg_1: int) : [int]bool;
+
+function v4.Union(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
+
+function v4.Intersection(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
+
+function v4.Difference(arg_0: [int]bool, arg_1: [int]bool) : [int]bool;
+
+function v4.Dereference(arg_0: [int]bool, arg_1: [int]int) : [int]bool;
+
+function v4.Inverse(f: [int]int, x: int) : [int]bool;
+
+function v4.AtLeast(arg_0: int, arg_1: int) : [int]bool;
+
+function v4.Rep(arg_0: int, arg_1: int) : int;
+
+function v4.Array(arg_0: int, arg_1: int, arg_2: int) : [int]bool;
+
+function v4.Unified(arg_0: [name][int]int) : [int]int;
+
+function v4.value_is(c: int, e: int) : bool;
+
+axiom (forall b0: byte, c0: byte :: { v4.OneByteToInt(b0), v4.OneByteToInt(c0) } v4.OneByteToInt(b0) == v4.OneByteToInt(c0) ==> b0 == c0);
+
+axiom (forall b0: byte, b1: byte, c0: byte, c1: byte :: { v4.TwoBytesToInt(b0, b1), v4.TwoBytesToInt(c0, c1) } v4.TwoBytesToInt(b0, b1) == v4.TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+
+axiom (forall b0: byte, b1: byte, b2: byte, b3: byte, c0: byte, c1: byte, c2: byte, c3: byte :: { v4.FourBytesToInt(b0, b1, b2, b3), v4.FourBytesToInt(c0, c1, c2, c3) } v4.FourBytesToInt(b0, b1, b2, b3) == v4.FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+axiom (forall x: int :: { v4.Base(x) } v4.INT_LEQ(v4.Base(x), x));
+
+axiom (forall a: int, t: name :: { v4.Match(a, v4.T.Ptr(t)) } v4.Match(a, v4.T.Ptr(t)) <==> v4.Field(a) == v4.T.Ptr(t));
+
+axiom (forall b: int, a: int, t: name :: { v4.MatchBase(b, a, v4.T.Ptr(t)) } v4.MatchBase(b, a, v4.T.Ptr(t)) <==> v4.Base(a) == b);
+
+axiom (forall v: int, t: name :: { v4.HasType(v, v4.T.Ptr(t)) } v4.HasType(v, v4.T.Ptr(t)) <==> v == 0 || (v4.INT_GT(v, 0) && v4.Match(v, t) && v4.MatchBase(v4.Base(v), v, t)));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPR(S)[x] } v4._S_op1__EXPR(S)[x] <==> S[v4.op1__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPRInv(S)[x] } v4._S_op1__EXPRInv(S)[x] <==> S[v4.op1__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPR(S) } S[x] ==> v4._S_op1__EXPR(S)[v4.op1__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPRInv(S) } S[x] ==> v4._S_op1__EXPRInv(S)[v4.op1__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.INT_ADD(x, 4));
+
+axiom (forall x: int :: { v4.op1__EXPRInv(x) } v4.op1__EXPRInv(x) == v4.INT_SUB(x, 4));
+
+axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.PLUS(x, 1, 4));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPR(S)[x] } v4._S_op2__EXPR(S)[x] <==> S[v4.op2__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPRInv(S)[x] } v4._S_op2__EXPRInv(S)[x] <==> S[v4.op2__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPR(S) } S[x] ==> v4._S_op2__EXPR(S)[v4.op2__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPRInv(S) } S[x] ==> v4._S_op2__EXPRInv(S)[v4.op2__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.INT_ADD(x, 8));
+
+axiom (forall x: int :: { v4.op2__EXPRInv(x) } v4.op2__EXPRInv(x) == v4.INT_SUB(x, 8));
+
+axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.PLUS(x, 1, 8));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPR(S)[x] } v4._S_oper__EXPR(S)[x] <==> S[v4.oper__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPRInv(S)[x] } v4._S_oper__EXPRInv(S)[x] <==> S[v4.oper__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPR(S) } S[x] ==> v4._S_oper__EXPR(S)[v4.oper__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPRInv(S) } S[x] ==> v4._S_oper__EXPRInv(S)[v4.oper__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.INT_ADD(x, 0));
+
+axiom (forall x: int :: { v4.oper__EXPRInv(x) } v4.oper__EXPRInv(x) == v4.INT_SUB(x, 0));
+
+axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.PLUS(x, 1, 0));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPR(S)[x] } v4._S_result__EXPR(S)[x] <==> S[v4.result__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPRInv(S)[x] } v4._S_result__EXPRInv(S)[x] <==> S[v4.result__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPR(S) } S[x] ==> v4._S_result__EXPR(S)[v4.result__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPRInv(S) } S[x] ==> v4._S_result__EXPRInv(S)[v4.result__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.INT_ADD(x, 12));
+
+axiom (forall x: int :: { v4.result__EXPRInv(x) } v4.result__EXPRInv(x) == v4.INT_SUB(x, 12));
+
+axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.PLUS(x, 1, 12));
+
+axiom (forall x: int, y: int :: { v4.INT_EQ(x, y): bool } v4.INT_EQ(x, y): bool <==> x == y);
+
+axiom (forall x: int, y: int :: { v4.INT_NEQ(x, y): bool } v4.INT_NEQ(x, y): bool <==> x != y);
+
+axiom (forall x: int, y: int :: { v4.INT_ADD(x, y): int } v4.INT_ADD(x, y): int == x + y);
+
+axiom (forall x: int, y: int :: { v4.INT_SUB(x, y): int } v4.INT_SUB(x, y): int == x - y);
+
+axiom (forall x: int, y: int :: { v4.INT_MULT(x, y): int } v4.INT_MULT(x, y): int == x * y);
+
+axiom (forall x: int, y: int :: { v4.INT_DIV(x, y): int } v4.INT_DIV(x, y): int == x div y);
+
+axiom (forall x: int, y: int :: { v4.INT_LT(x, y): bool } v4.INT_LT(x, y): bool <==> x < y);
+
+axiom (forall x: int, y: int :: { v4.INT_ULT(x, y): bool } v4.INT_ULT(x, y): bool <==> x < y);
+
+axiom (forall x: int, y: int :: { v4.INT_LEQ(x, y): bool } v4.INT_LEQ(x, y): bool <==> x <= y);
+
+axiom (forall x: int, y: int :: { v4.INT_ULEQ(x, y): bool } v4.INT_ULEQ(x, y): bool <==> x <= y);
+
+axiom (forall x: int, y: int :: { v4.INT_GT(x, y): bool } v4.INT_GT(x, y): bool <==> x > y);
+
+axiom (forall x: int, y: int :: { v4.INT_UGT(x, y): bool } v4.INT_UGT(x, y): bool <==> x > y);
+
+axiom (forall x: int, y: int :: { v4.INT_GEQ(x, y): bool } v4.INT_GEQ(x, y): bool <==> x >= y);
+
+axiom (forall x: int, y: int :: { v4.INT_UGEQ(x, y): bool } v4.INT_UGEQ(x, y): bool <==> x >= y);
+
+axiom (forall x: bv32, y: bv32 :: { v4.BV32_EQ(x, y): bool } v4.BV32_EQ(x, y): bool <==> x == y);
+
+axiom (forall x: bv32, y: bv32 :: { v4.BV32_NEQ(x, y): bool } v4.BV32_NEQ(x, y): bool <==> x != y);
+
+axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.INT_LEQ(v4.INT_MULT(size, v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size)), v4.INT_SUB(a, b)) && v4.INT_LT(v4.INT_SUB(a, b), v4.INT_MULT(size, v4.INT_ADD(v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size), 1))));
+
+axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, 1) == v4.INT_SUB(a, b));
+
+axiom (forall a: int, a_size: int, b: int :: { v4.MINUS_LEFT_PTR(a, a_size, b) } v4.MINUS_LEFT_PTR(a, a_size, b) == v4.INT_SUB(a, v4.INT_MULT(a_size, b)));
+
+axiom (forall a: int, a_size: int, b: int :: { v4.PLUS(a, a_size, b) } v4.PLUS(a, a_size, b) == v4.INT_ADD(a, v4.INT_MULT(a_size, b)));
+
+axiom (forall a: int, b: int :: { v4.MULT(a, b) } v4.MULT(a, b) == v4.INT_MULT(a, b));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b > 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) + 1));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b < 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) - 1));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b > 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) - 1));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b < 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) + 1));
+
+axiom v4.POW2(1);
+
+axiom v4.POW2(2);
+
+axiom v4.POW2(4);
+
+axiom v4.POW2(8);
+
+axiom v4.POW2(16);
+
+axiom v4.POW2(32);
+
+axiom v4.POW2(64);
+
+axiom v4.POW2(128);
+
+axiom v4.POW2(256);
+
+axiom v4.POW2(512);
+
+axiom v4.POW2(1024);
+
+axiom v4.POW2(2048);
+
+axiom v4.POW2(4096);
+
+axiom v4.POW2(8192);
+
+axiom v4.POW2(16384);
+
+axiom v4.POW2(32768);
+
+axiom v4.POW2(65536);
+
+axiom v4.POW2(131072);
+
+axiom v4.POW2(262144);
+
+axiom v4.POW2(524288);
+
+axiom v4.POW2(1048576);
+
+axiom v4.POW2(2097152);
+
+axiom v4.POW2(4194304);
+
+axiom v4.POW2(8388608);
+
+axiom v4.POW2(16777216);
+
+axiom v4.POW2(33554432);
+
+axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == b ==> v4.BIT_BAND(a, b) == a);
+
+axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } v4.POW2(a) && v4.POW2(b) && a != b ==> v4.BIT_BAND(a, b) == 0);
+
+axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == 0 || b == 0 ==> v4.BIT_BAND(a, b) == 0);
+
+axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } a ==> v4.choose(a, b, c) == b);
+
+axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } !a ==> v4.choose(a, b, c) == c);
+
+axiom (forall a: bool :: { v4.LIFT(a) } a <==> v4.LIFT(a) != 0);
+
+axiom (forall a: int :: { v4.PTR_NOT(a) } a == 0 ==> v4.PTR_NOT(a) != 0);
+
+axiom (forall a: int :: { v4.PTR_NOT(a) } a != 0 ==> v4.PTR_NOT(a) == 0);
+
+axiom (forall a: int :: { v4.NULL_CHECK(a) } a == 0 ==> v4.NULL_CHECK(a) != 0);
+
+axiom (forall a: int :: { v4.NULL_CHECK(a) } a != 0 ==> v4.NULL_CHECK(a) == 0);
+
+axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x)[y] } v4.AtLeast(n, x)[y] ==> v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y));
+
+axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x), v4.Rep(n, x), v4.Rep(n, y) } v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y) ==> v4.AtLeast(n, x)[y]);
+
+axiom (forall n: int, x: int :: { v4.AtLeast(n, x) } v4.AtLeast(n, x)[x]);
+
+axiom (forall n: int, x: int, z: int :: { v4.PLUS(x, n, z) } v4.Rep(n, x) == v4.Rep(n, v4.PLUS(x, n, z)));
+
+axiom (forall n: int, x: int :: { v4.Rep(n, x) } (exists k: int :: v4.INT_SUB(v4.Rep(n, x), x) == v4.INT_MULT(n, k)));
+
+axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_LEQ(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Empty()));
+
+axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_GT(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Difference(v4.AtLeast(n, x), v4.AtLeast(n, v4.PLUS(x, n, z)))));
+
+axiom (forall x: int :: !v4.Empty()[x]);
+
+axiom (forall x: int :: v4.SetTrue()[x]);
+
+axiom (forall x: int, y: int :: { v4.Singleton(y)[x] } v4.Singleton(y)[x] <==> x == y);
+
+axiom (forall y: int :: { v4.Singleton(y) } v4.Singleton(y)[y]);
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Union(S, T)[x] } { v4.Union(S, T), S[x] } { v4.Union(S, T), T[x] } v4.Union(S, T)[x] <==> S[x] || T[x]);
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Intersection(S, T)[x] } { v4.Intersection(S, T), S[x] } { v4.Intersection(S, T), T[x] } v4.Intersection(S, T)[x] <==> S[x] && T[x]);
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Difference(S, T)[x] } { v4.Difference(S, T), S[x] } { v4.Difference(S, T), T[x] } v4.Difference(S, T)[x] <==> S[x] && !T[x]);
+
+axiom (forall S: [int]bool, T: [int]bool :: { v4.Equal(S, T) } v4.Equal(S, T) <==> v4.Subset(S, T) && v4.Subset(T, S));
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Subset(S, T) } { T[x], v4.Subset(S, T) } S[x] && v4.Subset(S, T) ==> T[x]);
+
+axiom (forall S: [int]bool, T: [int]bool :: { v4.Subset(S, T) } v4.Subset(S, T) || (exists x: int :: S[x] && !T[x]));
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Disjoint(S, T) } { T[x], v4.Disjoint(S, T) } !(S[x] && v4.Disjoint(S, T) && T[x]));
+
+axiom (forall S: [int]bool, T: [int]bool :: { v4.Disjoint(S, T) } v4.Disjoint(S, T) || (exists x: int :: S[x] && T[x]));
+
+axiom (forall f: [int]int, x: int :: { v4.Inverse(f, f[x]) } v4.Inverse(f, f[x])[x]);
+
+axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f, y), f[x] } v4.Inverse(f, y)[x] ==> f[x] == y);
+
+axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f[x := y], y) } v4.Equal(v4.Inverse(f[x := y], y), v4.Union(v4.Inverse(f, y), v4.Singleton(x))));
+
+axiom (forall f: [int]int, x: int, y: int, z: int :: { v4.Inverse(f[x := y], z) } y == z || v4.Equal(v4.Inverse(f[x := y], z), v4.Difference(v4.Inverse(f, z), v4.Singleton(x))));
+
+axiom (forall x: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M)[x] } v4.Dereference(S, M)[x] ==> (exists y: int :: x == M[y] && S[y]));
+
+axiom (forall x: int, S: [int]bool, M: [int]int :: { M[x], S[x], v4.Dereference(S, M) } S[x] ==> v4.Dereference(S, M)[M[x]]);
+
+axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } !S[x] ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Dereference(S, M)));
+
+axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Difference(v4.Dereference(S, M), v4.Singleton(M[x])), v4.Singleton(y))));
+
+axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && !v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Dereference(S, M), v4.Singleton(y))));
+
+axiom (forall M: [name][int]int, x: int :: { v4.Unified(M)[x] } v4.Unified(M)[x] == M[v4.Field(x)][x]);
+
+axiom (forall M: [name][int]int, x: int, y: int :: { v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) } v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) == v4.Unified(M)[x := y]);
+
+procedure v4.havoc_assert(i: int);
+
+
+
+procedure v4.havoc_assume(i: int);
+
+
+
+procedure v4.__HAVOC_free(a: int);
+
+
+
+procedure v4.__HAVOC_malloc(obj_size: int) returns (new: int);
+ free ensures new == _uf_v4.__HAVOC_malloc_new(obj_size);
+
+
+
+procedure v4.__HAVOC_det_malloc(obj_size: int) returns (new: int);
+ free ensures new == _uf_v4.__HAVOC_det_malloc_new(obj_size);
+
+
+
+procedure v4.__HAVOC_memset_split_1(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
+ free ensures ret == _uf_v4.__HAVOC_memset_split_1_ret(A, p, c, n);
+
+
+
+procedure v4.__HAVOC_memset_split_2(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
+ free ensures ret == _uf_v4.__HAVOC_memset_split_2_ret(A, p, c, n);
+
+
+
+procedure v4.__HAVOC_memset_split_4(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
+ free ensures ret == _uf_v4.__HAVOC_memset_split_4_ret(A, p, c, n);
+
+
+
+procedure v4.nondet_choice() returns (x: int);
+ free ensures x == _uf_v4.nondet_choice_x();
+
+
+
+procedure v4.det_choice() returns (x: int);
+ free ensures x == _uf_v4.det_choice_x();
+
+
+
+procedure v4._strdup(str: int) returns (new: int);
+ free ensures new == _uf_v4._strdup_new(str);
+
+
+
+procedure v4._xstrcasecmp(a0: int, a1: int) returns (ret: int);
+ free ensures ret == _uf_v4._xstrcasecmp_ret(a0, a1);
+
+
+
+procedure v4._xstrcmp(a0: int, a1: int) returns (ret: int);
+ free ensures ret == _uf_v4._xstrcmp_ret(a0, a1);
+
+
+
+procedure v4.UnsignedAdd(a0: int, a1: int) returns (ret: int);
+
+
+
+procedure v4.UnsignedSub(a0: int, a1: int) returns (ret: int);
+
+
+
+procedure {:inline 1} v4.Eval(e_.1: int);
+ modifies v4.Mem_T.result__EXPR;
+ free ensures v4.Mem_T.result__EXPR == _uf_v4.Eval_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
+
+
+
+procedure v4.EvalEntry1(e_.1: int, outval_.1: int);
+ modifies v4.isUnsigned, v4.Mem_T.result__EXPR, v4.Mem_T.INT4;
+ free ensures v4.isUnsigned == _uf_v4.EvalEntry1_v4.isUnsigned(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
+ free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry1_v4.Mem_T.result__EXPR(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
+ free ensures v4.Mem_T.INT4 == _uf_v4.EvalEntry1_v4.Mem_T.INT4(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
+
+
+
+procedure v4.EvalEntry2(e_.1: int);
+ modifies v4.isUnsigned, v4.Mem_T.result__EXPR;
+ free ensures v4.isUnsigned == _uf_v4.EvalEntry2_v4.isUnsigned(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
+ free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry2_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
+
+
+
+procedure v4.__havoc_heapglobal_init();
+
+
+
+implementation {:inline 1} v4.Eval(e_.1: int)
+{
+ var havoc_stringTemp: int;
+ var condVal: int;
+ var a1: int;
+ var a2: int;
+ var e: int;
+ var op: int;
+ var res: int;
+ var result.UnsignedAdd$1: int;
+ var result.UnsignedSub$2: int;
+ var tempBoogie0: int;
+ var tempBoogie1: int;
+ var tempBoogie2: int;
+ var tempBoogie3: int;
+ var tempBoogie4: int;
+ var tempBoogie5: int;
+ var tempBoogie6: int;
+ var tempBoogie7: int;
+ var tempBoogie8: int;
+ var tempBoogie9: int;
+ var tempBoogie10: int;
+ var tempBoogie11: int;
+ var tempBoogie12: int;
+ var tempBoogie13: int;
+ var tempBoogie14: int;
+ var tempBoogie15: int;
+ var tempBoogie16: int;
+ var tempBoogie17: int;
+ var tempBoogie18: int;
+ var tempBoogie19: int;
+ var __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume v4.INT_LT(e_.1, v4.alloc);
+ a1 := 0;
+ a2 := 0;
+ e := 0;
+ op := 0;
+ res := 0;
+ result.UnsignedAdd$1 := 0;
+ result.UnsignedSub$2 := 0;
+ e := e_.1;
+ goto label_3#2;
+
+ label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto label_4#2;
+
+ label_4#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto label_5#2;
+
+ label_5#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto label_6#2;
+
+ label_6#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto label_7#2;
+
+ label_7#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 21} true;
+ assert true;
+ op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)];
+ assume v4.value_is(v4.__ctobpl_const_1, op);
+ assume v4.value_is(v4.__ctobpl_const_2, e);
+ assume v4.value_is(v4.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)]);
+ goto label_8#2;
+
+ label_8#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 22} true;
+ assert true;
+ a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)];
+ assume v4.value_is(v4.__ctobpl_const_4, a1);
+ assume v4.value_is(v4.__ctobpl_const_5, e);
+ assume v4.value_is(v4.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)]);
+ goto label_9#2;
+
+ label_9#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 23} true;
+ assert true;
+ a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)];
+ assume v4.value_is(v4.__ctobpl_const_7, a2);
+ assume v4.value_is(v4.__ctobpl_const_8, e);
+ assume v4.value_is(v4.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)]);
+ goto label_10#2;
+
+ label_10#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 24} true;
+ res := 0 - 1;
+ assume v4.value_is(v4.__ctobpl_const_10, res);
+ goto label_11#2;
+
+ label_11#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 26} true;
+ goto label_11_case_0#2, label_11_case_1#2, label_11_case_2#2;
+
+ label_11_case_2#2:
+ assume v4.INT_EQ(op, 2);
+ assume v4.value_is(v4.__ctobpl_const_11, op);
+ goto label_14#2;
+
+ label_14#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 35} true;
+ goto label_14_true#2, label_14_false#2;
+
+ label_14_false#2:
+ assume v4.isUnsigned == 0;
+ assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
+ goto label_15#2;
+
+ label_15#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 38} true;
+ res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(a1, a2, 1);
+ assume v4.value_is(v4.__ctobpl_const_17, res);
+ assume v4.value_is(v4.__ctobpl_const_18, a1);
+ assume v4.value_is(v4.__ctobpl_const_19, a2);
+ goto label_12#2;
+
+ label_14_true#2:
+ assume v4.isUnsigned != 0;
+ assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
+ goto label_16#2;
+
+ label_16#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
+ call result.UnsignedSub$2 := v4.UnsignedSub(a1, a2);
+ assume v4.value_is(v4.__ctobpl_const_20, a1);
+ assume v4.value_is(v4.__ctobpl_const_21, a2);
+ assume v4.value_is(v4.__ctobpl_const_22, a1);
+ assume v4.value_is(v4.__ctobpl_const_23, a2);
+ goto label_19#2;
+
+ label_19#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
+ res := result.UnsignedSub$2;
+ assume v4.value_is(v4.__ctobpl_const_24, res);
+ assume v4.value_is(v4.__ctobpl_const_25, result.UnsignedSub$2);
+ goto label_12#2;
+
+ label_11_case_1#2:
+ assume v4.INT_EQ(op, 1);
+ assume v4.value_is(v4.__ctobpl_const_11, op);
+ goto label_13#2;
+
+ label_13#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 29} true;
+ goto label_13_true#2, label_13_false#2;
+
+ label_13_false#2:
+ assume v4.isUnsigned == 0;
+ assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
+ goto label_20#2;
+
+ label_20#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 32} true;
+ res := v4.PLUS(a1, 1, a2);
+ assume v4.value_is(v4.__ctobpl_const_26, res);
+ assume v4.value_is(v4.__ctobpl_const_27, a1);
+ assume v4.value_is(v4.__ctobpl_const_28, a2);
+ goto label_12#2;
+
+ label_13_true#2:
+ assume v4.isUnsigned != 0;
+ assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
+ goto label_21#2;
+
+ label_21#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
+ call result.UnsignedAdd$1 := v4.UnsignedAdd(a1, a2);
+ assume v4.value_is(v4.__ctobpl_const_29, a1);
+ assume v4.value_is(v4.__ctobpl_const_30, a2);
+ assume v4.value_is(v4.__ctobpl_const_31, a1);
+ assume v4.value_is(v4.__ctobpl_const_32, a2);
+ goto label_24#2;
+
+ label_24#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
+ res := result.UnsignedAdd$1;
+ assume v4.value_is(v4.__ctobpl_const_33, res);
+ assume v4.value_is(v4.__ctobpl_const_34, result.UnsignedAdd$1);
+ goto label_12#2;
+
+ label_11_case_0#2:
+ assume v4.INT_NEQ(op, 1);
+ assume v4.INT_NEQ(op, 2);
+ assume v4.value_is(v4.__ctobpl_const_11, op);
+ goto label_12#2;
+
+ label_12#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 41} true;
+ assert true;
+ v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(e) := res];
+ assume v4.value_is(v4.__ctobpl_const_12, e);
+ assume v4.value_is(v4.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
+ assume v4.value_is(v4.__ctobpl_const_14, res);
+ goto label_1#2;
+
+ label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 42} true;
+ return;
+}
+
+
+
+implementation v4.EvalEntry1(e_.1: int, outval_.1: int)
+{
+ var havoc_stringTemp: int;
+ var condVal: int;
+ var e: int;
+ var outval: int;
+ var tempBoogie0: int;
+ var tempBoogie1: int;
+ var tempBoogie2: int;
+ var tempBoogie3: int;
+ var tempBoogie4: int;
+ var tempBoogie5: int;
+ var tempBoogie6: int;
+ var tempBoogie7: int;
+ var tempBoogie8: int;
+ var tempBoogie9: int;
+ var tempBoogie10: int;
+ var tempBoogie11: int;
+ var tempBoogie12: int;
+ var tempBoogie13: int;
+ var tempBoogie14: int;
+ var tempBoogie15: int;
+ var tempBoogie16: int;
+ var tempBoogie17: int;
+ var tempBoogie18: int;
+ var tempBoogie19: int;
+ var __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume v4.INT_LT(e_.1, v4.alloc);
+ assume v4.INT_LT(outval_.1, v4.alloc);
+ e := 0;
+ outval := 0;
+ e := e_.1;
+ outval := outval_.1;
+ goto label_3#2;
+
+ label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 47} true;
+ v4.isUnsigned := 1;
+ assume v4.value_is(v4.__ctobpl_const_35, v4.isUnsigned);
+ goto label_4#2;
+
+ label_4#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 48} true;
+ call v4.Eval(e);
+ assume v4.value_is(v4.__ctobpl_const_36, e);
+ assume v4.value_is(v4.__ctobpl_const_37, e);
+ goto label_7#2;
+
+ label_7#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 49} true;
+ assert true;
+ assert true;
+ v4.Mem_T.INT4 := v4.Mem_T.INT4[outval := v4.Mem_T.result__EXPR[v4.result__EXPR(e)]];
+ assume v4.value_is(v4.__ctobpl_const_38, outval);
+ assume v4.value_is(v4.__ctobpl_const_39, v4.Mem_T.INT4[outval]);
+ assume v4.value_is(v4.__ctobpl_const_40, e);
+ assume v4.value_is(v4.__ctobpl_const_41, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
+ goto label_1#2;
+
+ label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 50} true;
+ return;
+}
+
+
+
+implementation v4.EvalEntry2(e_.1: int)
+{
+ var havoc_stringTemp: int;
+ var condVal: int;
+ var e: int;
+ var tempBoogie0: int;
+ var tempBoogie1: int;
+ var tempBoogie2: int;
+ var tempBoogie3: int;
+ var tempBoogie4: int;
+ var tempBoogie5: int;
+ var tempBoogie6: int;
+ var tempBoogie7: int;
+ var tempBoogie8: int;
+ var tempBoogie9: int;
+ var tempBoogie10: int;
+ var tempBoogie11: int;
+ var tempBoogie12: int;
+ var tempBoogie13: int;
+ var tempBoogie14: int;
+ var tempBoogie15: int;
+ var tempBoogie16: int;
+ var tempBoogie17: int;
+ var tempBoogie18: int;
+ var tempBoogie19: int;
+ var __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume v4.INT_LT(e_.1, v4.alloc);
+ e := 0;
+ e := e_.1;
+ goto label_3#2;
+
+ label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 54} true;
+ v4.isUnsigned := 0;
+ assume v4.value_is(v4.__ctobpl_const_42, v4.isUnsigned);
+ goto label_4#2;
+
+ label_4#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 55} true;
+ call v4.Eval(e);
+ assume v4.value_is(v4.__ctobpl_const_43, e);
+ assume v4.value_is(v4.__ctobpl_const_44, e);
+ goto label_1#2;
+
+ label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 56} true;
+ return;
+}
+
+
+
+implementation v4.__havoc_heapglobal_init()
+{
+
+ anon0#2:
+ return;
+}
+
+
+
+var v2.Mem: [name][int]int;
+
+var v2.alloc: int;
+
+var v2.Mem_T.INT4: [int]int;
+
+var v2.Mem_T.op1__EXPR: [int]int;
+
+var v2.Mem_T.op2__EXPR: [int]int;
+
+var v2.Mem_T.oper__EXPR: [int]int;
+
+var v2.Mem_T.result__EXPR: [int]int;
+
+var v2.detChoiceCnt: int;
+
+var v2.Res_KERNEL_SOURCE: [int]int;
+
+var v2.Res_PROBED: [int]int;
+
+const unique v2.T.oper__EXPR: name;
+
+const unique v2.T.op1__EXPR: name;
+
+const unique v2.T.op2__EXPR: name;
+
+const unique v2.T.result__EXPR: name;
+
+const unique v2.T.INT4: name;
+
+const unique v2.T.PINT4: name;
+
+const unique v2.T.PPINT4: name;
+
+const unique v2.T.PP_EXPR: name;
+
+const unique v2.T.P_EXPR: name;
+
+const unique v2.T._EXPR: name;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 21} unique v2.__ctobpl_const_7: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 21} unique v2.__ctobpl_const_8: int;
+
+const {:model_const "e->oper"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 19} unique v2.__ctobpl_const_3: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 20} unique v2.__ctobpl_const_4: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 20} unique v2.__ctobpl_const_5: int;
+
+const {:model_const "e->op1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 20} unique v2.__ctobpl_const_6: int;
+
+const {:model_const "e->op2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 21} unique v2.__ctobpl_const_9: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 22} unique v2.__ctobpl_const_10: int;
+
+const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 24} unique v2.__ctobpl_const_11: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 35} unique v2.__ctobpl_const_12: int;
+
+const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 35} unique v2.__ctobpl_const_13: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 35} unique v2.__ctobpl_const_14: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 27} unique v2.__ctobpl_const_15: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 27} unique v2.__ctobpl_const_16: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 27} unique v2.__ctobpl_const_17: int;
+
+const {:model_const "res"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 29} unique v2.__ctobpl_const_18: int;
+
+const {:model_const "a1"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 29} unique v2.__ctobpl_const_19: int;
+
+const {:model_const "a2"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 29} unique v2.__ctobpl_const_20: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 40} unique v2.__ctobpl_const_21: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 40} unique v2.__ctobpl_const_22: int;
+
+const {:model_const "outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_23: int;
+
+const {:model_const "*outval"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_24: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_25: int;
+
+const {:model_const "e->result"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 41} unique v2.__ctobpl_const_26: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 46} unique v2.__ctobpl_const_27: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 46} unique v2.__ctobpl_const_28: int;
+
+const {:model_const "op"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 19} unique v2.__ctobpl_const_1: int;
+
+const {:model_const "e"} {:sourceFile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceLine 19} unique v2.__ctobpl_const_2: int;
+
+axiom (forall b0: byte, c0: byte :: { v4.OneByteToInt(b0), v4.OneByteToInt(c0) } v4.OneByteToInt(b0) == v4.OneByteToInt(c0) ==> b0 == c0);
+
+axiom (forall b0: byte, b1: byte, c0: byte, c1: byte :: { v4.TwoBytesToInt(b0, b1), v4.TwoBytesToInt(c0, c1) } v4.TwoBytesToInt(b0, b1) == v4.TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+
+axiom (forall b0: byte, b1: byte, b2: byte, b3: byte, c0: byte, c1: byte, c2: byte, c3: byte :: { v4.FourBytesToInt(b0, b1, b2, b3), v4.FourBytesToInt(c0, c1, c2, c3) } v4.FourBytesToInt(b0, b1, b2, b3) == v4.FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+axiom (forall x: int :: { v4.Base(x) } v4.INT_LEQ(v4.Base(x), x));
+
+axiom (forall a: int, t: name :: { v4.Match(a, v4.T.Ptr(t)) } v4.Match(a, v4.T.Ptr(t)) <==> v4.Field(a) == v4.T.Ptr(t));
+
+axiom (forall b: int, a: int, t: name :: { v4.MatchBase(b, a, v4.T.Ptr(t)) } v4.MatchBase(b, a, v4.T.Ptr(t)) <==> v4.Base(a) == b);
+
+axiom (forall v: int, t: name :: { v4.HasType(v, v4.T.Ptr(t)) } v4.HasType(v, v4.T.Ptr(t)) <==> v == 0 || (v4.INT_GT(v, 0) && v4.Match(v, t) && v4.MatchBase(v4.Base(v), v, t)));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPR(S)[x] } v4._S_op1__EXPR(S)[x] <==> S[v4.op1__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op1__EXPRInv(S)[x] } v4._S_op1__EXPRInv(S)[x] <==> S[v4.op1__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPR(S) } S[x] ==> v4._S_op1__EXPR(S)[v4.op1__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op1__EXPRInv(S) } S[x] ==> v4._S_op1__EXPRInv(S)[v4.op1__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.INT_ADD(x, 4));
+
+axiom (forall x: int :: { v4.op1__EXPRInv(x) } v4.op1__EXPRInv(x) == v4.INT_SUB(x, 4));
+
+axiom (forall x: int :: { v4.op1__EXPR(x) } v4.op1__EXPR(x) == v4.PLUS(x, 1, 4));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPR(S)[x] } v4._S_op2__EXPR(S)[x] <==> S[v4.op2__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_op2__EXPRInv(S)[x] } v4._S_op2__EXPRInv(S)[x] <==> S[v4.op2__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPR(S) } S[x] ==> v4._S_op2__EXPR(S)[v4.op2__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_op2__EXPRInv(S) } S[x] ==> v4._S_op2__EXPRInv(S)[v4.op2__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.INT_ADD(x, 8));
+
+axiom (forall x: int :: { v4.op2__EXPRInv(x) } v4.op2__EXPRInv(x) == v4.INT_SUB(x, 8));
+
+axiom (forall x: int :: { v4.op2__EXPR(x) } v4.op2__EXPR(x) == v4.PLUS(x, 1, 8));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPR(S)[x] } v4._S_oper__EXPR(S)[x] <==> S[v4.oper__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_oper__EXPRInv(S)[x] } v4._S_oper__EXPRInv(S)[x] <==> S[v4.oper__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPR(S) } S[x] ==> v4._S_oper__EXPR(S)[v4.oper__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_oper__EXPRInv(S) } S[x] ==> v4._S_oper__EXPRInv(S)[v4.oper__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.INT_ADD(x, 0));
+
+axiom (forall x: int :: { v4.oper__EXPRInv(x) } v4.oper__EXPRInv(x) == v4.INT_SUB(x, 0));
+
+axiom (forall x: int :: { v4.oper__EXPR(x) } v4.oper__EXPR(x) == v4.PLUS(x, 1, 0));
+
+axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPR(S)[x] } v4._S_result__EXPR(S)[x] <==> S[v4.result__EXPRInv(x)]);
+
+axiom (forall x: int, S: [int]bool :: { v4._S_result__EXPRInv(S)[x] } v4._S_result__EXPRInv(S)[x] <==> S[v4.result__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPR(S) } S[x] ==> v4._S_result__EXPR(S)[v4.result__EXPR(x)]);
+
+axiom (forall x: int, S: [int]bool :: { S[x], v4._S_result__EXPRInv(S) } S[x] ==> v4._S_result__EXPRInv(S)[v4.result__EXPRInv(x)]);
+
+axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.INT_ADD(x, 12));
+
+axiom (forall x: int :: { v4.result__EXPRInv(x) } v4.result__EXPRInv(x) == v4.INT_SUB(x, 12));
+
+axiom (forall x: int :: { v4.result__EXPR(x) } v4.result__EXPR(x) == v4.PLUS(x, 1, 12));
+
+axiom (forall x: int, y: int :: { v4.INT_EQ(x, y): bool } v4.INT_EQ(x, y): bool <==> x == y);
+
+axiom (forall x: int, y: int :: { v4.INT_NEQ(x, y): bool } v4.INT_NEQ(x, y): bool <==> x != y);
+
+axiom (forall x: int, y: int :: { v4.INT_ADD(x, y): int } v4.INT_ADD(x, y): int == x + y);
+
+axiom (forall x: int, y: int :: { v4.INT_SUB(x, y): int } v4.INT_SUB(x, y): int == x - y);
+
+axiom (forall x: int, y: int :: { v4.INT_MULT(x, y): int } v4.INT_MULT(x, y): int == x * y);
+
+axiom (forall x: int, y: int :: { v4.INT_DIV(x, y): int } v4.INT_DIV(x, y): int == x div y);
+
+axiom (forall x: int, y: int :: { v4.INT_LT(x, y): bool } v4.INT_LT(x, y): bool <==> x < y);
+
+axiom (forall x: int, y: int :: { v4.INT_ULT(x, y): bool } v4.INT_ULT(x, y): bool <==> x < y);
+
+axiom (forall x: int, y: int :: { v4.INT_LEQ(x, y): bool } v4.INT_LEQ(x, y): bool <==> x <= y);
+
+axiom (forall x: int, y: int :: { v4.INT_ULEQ(x, y): bool } v4.INT_ULEQ(x, y): bool <==> x <= y);
+
+axiom (forall x: int, y: int :: { v4.INT_GT(x, y): bool } v4.INT_GT(x, y): bool <==> x > y);
+
+axiom (forall x: int, y: int :: { v4.INT_UGT(x, y): bool } v4.INT_UGT(x, y): bool <==> x > y);
+
+axiom (forall x: int, y: int :: { v4.INT_GEQ(x, y): bool } v4.INT_GEQ(x, y): bool <==> x >= y);
+
+axiom (forall x: int, y: int :: { v4.INT_UGEQ(x, y): bool } v4.INT_UGEQ(x, y): bool <==> x >= y);
+
+axiom (forall x: bv32, y: bv32 :: { v4.BV32_EQ(x, y): bool } v4.BV32_EQ(x, y): bool <==> x == y);
+
+axiom (forall x: bv32, y: bv32 :: { v4.BV32_NEQ(x, y): bool } v4.BV32_NEQ(x, y): bool <==> x != y);
+
+axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.INT_LEQ(v4.INT_MULT(size, v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size)), v4.INT_SUB(a, b)) && v4.INT_LT(v4.INT_SUB(a, b), v4.INT_MULT(size, v4.INT_ADD(v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size), 1))));
+
+axiom (forall a: int, b: int, size: int :: { v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, size) } v4.MINUS_BOTH_PTR_OR_BOTH_INT(a, b, 1) == v4.INT_SUB(a, b));
+
+axiom (forall a: int, a_size: int, b: int :: { v4.MINUS_LEFT_PTR(a, a_size, b) } v4.MINUS_LEFT_PTR(a, a_size, b) == v4.INT_SUB(a, v4.INT_MULT(a_size, b)));
+
+axiom (forall a: int, a_size: int, b: int :: { v4.PLUS(a, a_size, b) } v4.PLUS(a, a_size, b) == v4.INT_ADD(a, v4.INT_MULT(a_size, b)));
+
+axiom (forall a: int, b: int :: { v4.MULT(a, b) } v4.MULT(a, b) == v4.INT_MULT(a, b));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b > 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) + 1));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a >= 0 && b < 0 ==> b * v4.DIV(a, b) <= a && a < b * (v4.DIV(a, b) - 1));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b > 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) - 1));
+
+axiom (forall a: int, b: int :: { v4.DIV(a, b) } a < 0 && b < 0 ==> b * v4.DIV(a, b) >= a && a > b * (v4.DIV(a, b) + 1));
+
+axiom v4.POW2(1);
+
+axiom v4.POW2(2);
+
+axiom v4.POW2(4);
+
+axiom v4.POW2(8);
+
+axiom v4.POW2(16);
+
+axiom v4.POW2(32);
+
+axiom v4.POW2(64);
+
+axiom v4.POW2(128);
+
+axiom v4.POW2(256);
+
+axiom v4.POW2(512);
+
+axiom v4.POW2(1024);
+
+axiom v4.POW2(2048);
+
+axiom v4.POW2(4096);
+
+axiom v4.POW2(8192);
+
+axiom v4.POW2(16384);
+
+axiom v4.POW2(32768);
+
+axiom v4.POW2(65536);
+
+axiom v4.POW2(131072);
+
+axiom v4.POW2(262144);
+
+axiom v4.POW2(524288);
+
+axiom v4.POW2(1048576);
+
+axiom v4.POW2(2097152);
+
+axiom v4.POW2(4194304);
+
+axiom v4.POW2(8388608);
+
+axiom v4.POW2(16777216);
+
+axiom v4.POW2(33554432);
+
+axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == b ==> v4.BIT_BAND(a, b) == a);
+
+axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } v4.POW2(a) && v4.POW2(b) && a != b ==> v4.BIT_BAND(a, b) == 0);
+
+axiom (forall a: int, b: int :: { v4.BIT_BAND(a, b) } a == 0 || b == 0 ==> v4.BIT_BAND(a, b) == 0);
+
+axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } a ==> v4.choose(a, b, c) == b);
+
+axiom (forall a: bool, b: int, c: int :: { v4.choose(a, b, c) } !a ==> v4.choose(a, b, c) == c);
+
+axiom (forall a: bool :: { v4.LIFT(a) } a <==> v4.LIFT(a) != 0);
+
+axiom (forall a: int :: { v4.PTR_NOT(a) } a == 0 ==> v4.PTR_NOT(a) != 0);
+
+axiom (forall a: int :: { v4.PTR_NOT(a) } a != 0 ==> v4.PTR_NOT(a) == 0);
+
+axiom (forall a: int :: { v4.NULL_CHECK(a) } a == 0 ==> v4.NULL_CHECK(a) != 0);
+
+axiom (forall a: int :: { v4.NULL_CHECK(a) } a != 0 ==> v4.NULL_CHECK(a) == 0);
+
+axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x)[y] } v4.AtLeast(n, x)[y] ==> v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y));
+
+axiom (forall n: int, x: int, y: int :: { v4.AtLeast(n, x), v4.Rep(n, x), v4.Rep(n, y) } v4.INT_LEQ(x, y) && v4.Rep(n, x) == v4.Rep(n, y) ==> v4.AtLeast(n, x)[y]);
+
+axiom (forall n: int, x: int :: { v4.AtLeast(n, x) } v4.AtLeast(n, x)[x]);
+
+axiom (forall n: int, x: int, z: int :: { v4.PLUS(x, n, z) } v4.Rep(n, x) == v4.Rep(n, v4.PLUS(x, n, z)));
+
+axiom (forall n: int, x: int :: { v4.Rep(n, x) } (exists k: int :: v4.INT_SUB(v4.Rep(n, x), x) == v4.INT_MULT(n, k)));
+
+axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_LEQ(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Empty()));
+
+axiom (forall x: int, n: int, z: int :: { v4.Array(x, n, z) } v4.INT_GT(z, 0) ==> v4.Equal(v4.Array(x, n, z), v4.Difference(v4.AtLeast(n, x), v4.AtLeast(n, v4.PLUS(x, n, z)))));
+
+axiom (forall x: int :: !v4.Empty()[x]);
+
+axiom (forall x: int :: v4.SetTrue()[x]);
+
+axiom (forall x: int, y: int :: { v4.Singleton(y)[x] } v4.Singleton(y)[x] <==> x == y);
+
+axiom (forall y: int :: { v4.Singleton(y) } v4.Singleton(y)[y]);
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Union(S, T)[x] } { v4.Union(S, T), S[x] } { v4.Union(S, T), T[x] } v4.Union(S, T)[x] <==> S[x] || T[x]);
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Intersection(S, T)[x] } { v4.Intersection(S, T), S[x] } { v4.Intersection(S, T), T[x] } v4.Intersection(S, T)[x] <==> S[x] && T[x]);
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { v4.Difference(S, T)[x] } { v4.Difference(S, T), S[x] } { v4.Difference(S, T), T[x] } v4.Difference(S, T)[x] <==> S[x] && !T[x]);
+
+axiom (forall S: [int]bool, T: [int]bool :: { v4.Equal(S, T) } v4.Equal(S, T) <==> v4.Subset(S, T) && v4.Subset(T, S));
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Subset(S, T) } { T[x], v4.Subset(S, T) } S[x] && v4.Subset(S, T) ==> T[x]);
+
+axiom (forall S: [int]bool, T: [int]bool :: { v4.Subset(S, T) } v4.Subset(S, T) || (exists x: int :: S[x] && !T[x]));
+
+axiom (forall x: int, S: [int]bool, T: [int]bool :: { S[x], v4.Disjoint(S, T) } { T[x], v4.Disjoint(S, T) } !(S[x] && v4.Disjoint(S, T) && T[x]));
+
+axiom (forall S: [int]bool, T: [int]bool :: { v4.Disjoint(S, T) } v4.Disjoint(S, T) || (exists x: int :: S[x] && T[x]));
+
+axiom (forall f: [int]int, x: int :: { v4.Inverse(f, f[x]) } v4.Inverse(f, f[x])[x]);
+
+axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f, y), f[x] } v4.Inverse(f, y)[x] ==> f[x] == y);
+
+axiom (forall f: [int]int, x: int, y: int :: { v4.Inverse(f[x := y], y) } v4.Equal(v4.Inverse(f[x := y], y), v4.Union(v4.Inverse(f, y), v4.Singleton(x))));
+
+axiom (forall f: [int]int, x: int, y: int, z: int :: { v4.Inverse(f[x := y], z) } y == z || v4.Equal(v4.Inverse(f[x := y], z), v4.Difference(v4.Inverse(f, z), v4.Singleton(x))));
+
+axiom (forall x: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M)[x] } v4.Dereference(S, M)[x] ==> (exists y: int :: x == M[y] && S[y]));
+
+axiom (forall x: int, S: [int]bool, M: [int]int :: { M[x], S[x], v4.Dereference(S, M) } S[x] ==> v4.Dereference(S, M)[M[x]]);
+
+axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } !S[x] ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Dereference(S, M)));
+
+axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Difference(v4.Dereference(S, M), v4.Singleton(M[x])), v4.Singleton(y))));
+
+axiom (forall x: int, y: int, S: [int]bool, M: [int]int :: { v4.Dereference(S, M[x := y]) } S[x] && !v4.Equal(v4.Intersection(v4.Inverse(M, M[x]), S), v4.Singleton(x)) ==> v4.Equal(v4.Dereference(S, M[x := y]), v4.Union(v4.Dereference(S, M), v4.Singleton(y))));
+
+axiom (forall M: [name][int]int, x: int :: { v4.Unified(M)[x] } v4.Unified(M)[x] == M[v4.Field(x)][x]);
+
+axiom (forall M: [name][int]int, x: int, y: int :: { v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) } v4.Unified(M[v4.Field(x) := M[v4.Field(x)][x := y]]) == v4.Unified(M)[x := y]);
+
+procedure v2.havoc_assert(i: int);
+
+
+
+procedure v2.havoc_assume(i: int);
+
+
+
+procedure v2.__HAVOC_free(a: int);
+
+
+
+procedure v2.__HAVOC_malloc(obj_size: int) returns (new: int);
+ free ensures new == _uf_v4.__HAVOC_malloc_new(obj_size);
+
+
+
+procedure v2.__HAVOC_det_malloc(obj_size: int) returns (new: int);
+ free ensures new == _uf_v4.__HAVOC_det_malloc_new(obj_size);
+
+
+
+procedure v2.__HAVOC_memset_split_1(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
+ free ensures ret == _uf_v4.__HAVOC_memset_split_1_ret(A, p, c, n);
+
+
+
+procedure v2.__HAVOC_memset_split_2(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
+ free ensures ret == _uf_v4.__HAVOC_memset_split_2_ret(A, p, c, n);
+
+
+
+procedure v2.__HAVOC_memset_split_4(A: [int]int, p: int, c: int, n: int) returns (ret: [int]int);
+ free ensures ret == _uf_v4.__HAVOC_memset_split_4_ret(A, p, c, n);
+
+
+
+procedure v2.nondet_choice() returns (x: int);
+ free ensures x == _uf_v4.nondet_choice_x();
+
+
+
+procedure v2.det_choice() returns (x: int);
+ free ensures x == _uf_v4.det_choice_x();
+
+
+
+procedure v2._strdup(str: int) returns (new: int);
+ free ensures new == _uf_v4._strdup_new(str);
+
+
+
+procedure v2._xstrcasecmp(a0: int, a1: int) returns (ret: int);
+ free ensures ret == _uf_v4._xstrcasecmp_ret(a0, a1);
+
+
+
+procedure v2._xstrcmp(a0: int, a1: int) returns (ret: int);
+ free ensures ret == _uf_v4._xstrcmp_ret(a0, a1);
+
+
+
+procedure {:inline 1} v2.Eval(e_.1: int);
+ modifies v4.Mem_T.result__EXPR;
+ free ensures v4.Mem_T.result__EXPR == _uf_v4.Eval_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
+
+
+
+procedure v2.EvalEntry1(e_.1: int, outval_.1: int);
+ modifies v4.Mem_T.result__EXPR, v4.Mem_T.INT4;
+ free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry1_v4.Mem_T.result__EXPR(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
+ free ensures v4.Mem_T.INT4 == _uf_v4.EvalEntry1_v4.Mem_T.INT4(e_.1, outval_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.Mem_T.INT4), old(v4.isUnsigned));
+
+
+
+procedure v2.EvalEntry2(e_.1: int);
+ modifies v4.Mem_T.result__EXPR;
+ free ensures v4.Mem_T.result__EXPR == _uf_v4.EvalEntry2_v4.Mem_T.result__EXPR(e_.1, old(v4.alloc), old(v4.Mem_T.oper__EXPR), old(v4.Mem_T.op1__EXPR), old(v4.Mem_T.op2__EXPR), old(v4.Mem_T.result__EXPR), old(v4.isUnsigned));
+
+
+
+procedure v2.__havoc_heapglobal_init();
+
+
+
+implementation {:inline 1} v2.Eval(e_.1: int)
+{
+ var havoc_stringTemp: int;
+ var condVal: int;
+ var a1: int;
+ var a2: int;
+ var e: int;
+ var op: int;
+ var res: int;
+ var tempBoogie0: int;
+ var tempBoogie1: int;
+ var tempBoogie2: int;
+ var tempBoogie3: int;
+ var tempBoogie4: int;
+ var tempBoogie5: int;
+ var tempBoogie6: int;
+ var tempBoogie7: int;
+ var tempBoogie8: int;
+ var tempBoogie9: int;
+ var tempBoogie10: int;
+ var tempBoogie11: int;
+ var tempBoogie12: int;
+ var tempBoogie13: int;
+ var tempBoogie14: int;
+ var tempBoogie15: int;
+ var tempBoogie16: int;
+ var tempBoogie17: int;
+ var tempBoogie18: int;
+ var tempBoogie19: int;
+ var __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume v4.INT_LT(e_.1, v4.alloc);
+ a1 := 0;
+ a2 := 0;
+ e := 0;
+ op := 0;
+ res := 0;
+ e := e_.1;
+ goto label_3#2;
+
+ label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto label_4#2;
+
+ label_4#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto label_5#2;
+
+ label_5#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto label_6#2;
+
+ label_6#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto label_7#2;
+
+ label_7#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 19} true;
+ assert true;
+ op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)];
+ assume v4.value_is(v2.__ctobpl_const_1, op);
+ assume v4.value_is(v2.__ctobpl_const_2, e);
+ assume v4.value_is(v2.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(e)]);
+ goto label_8#2;
+
+ label_8#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 20} true;
+ assert true;
+ a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)];
+ assume v4.value_is(v2.__ctobpl_const_4, a1);
+ assume v4.value_is(v2.__ctobpl_const_5, e);
+ assume v4.value_is(v2.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(e)]);
+ goto label_9#2;
+
+ label_9#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 21} true;
+ assert true;
+ a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)];
+ assume v4.value_is(v2.__ctobpl_const_7, a2);
+ assume v4.value_is(v2.__ctobpl_const_8, e);
+ assume v4.value_is(v2.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(e)]);
+ goto label_10#2;
+
+ label_10#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 22} true;
+ res := 0 - 1;
+ assume v4.value_is(v2.__ctobpl_const_10, res);
+ goto label_11#2;
+
+ label_11#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 24} true;
+ goto label_11_case_0#2, label_11_case_1#2, label_11_case_2#2;
+
+ label_11_case_2#2:
+ assume v4.INT_EQ(op, 2);
+ assume v4.value_is(v2.__ctobpl_const_11, op);
+ goto label_14#2;
+
+ label_14#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 29} true;
+ res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(a1, a2, 1);
+ assume v4.value_is(v2.__ctobpl_const_18, res);
+ assume v4.value_is(v2.__ctobpl_const_19, a1);
+ assume v4.value_is(v2.__ctobpl_const_20, a2);
+ goto label_12#2;
+
+ label_11_case_1#2:
+ assume v4.INT_EQ(op, 1);
+ assume v4.value_is(v2.__ctobpl_const_11, op);
+ goto label_13#2;
+
+ label_13#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 27} true;
+ res := v4.PLUS(a1, 1, a2);
+ assume v4.value_is(v2.__ctobpl_const_15, res);
+ assume v4.value_is(v2.__ctobpl_const_16, a1);
+ assume v4.value_is(v2.__ctobpl_const_17, a2);
+ goto label_12#2;
+
+ label_11_case_0#2:
+ assume v4.INT_NEQ(op, 1);
+ assume v4.INT_NEQ(op, 2);
+ assume v4.value_is(v2.__ctobpl_const_11, op);
+ goto label_12#2;
+
+ label_12#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 35} true;
+ assert true;
+ v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(e) := res];
+ assume v4.value_is(v2.__ctobpl_const_12, e);
+ assume v4.value_is(v2.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
+ assume v4.value_is(v2.__ctobpl_const_14, res);
+ goto label_1#2;
+
+ label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 36} true;
+ return;
+}
+
+
+
+implementation v2.EvalEntry1(e_.1: int, outval_.1: int)
+{
+ var havoc_stringTemp: int;
+ var condVal: int;
+ var e: int;
+ var outval: int;
+ var tempBoogie0: int;
+ var tempBoogie1: int;
+ var tempBoogie2: int;
+ var tempBoogie3: int;
+ var tempBoogie4: int;
+ var tempBoogie5: int;
+ var tempBoogie6: int;
+ var tempBoogie7: int;
+ var tempBoogie8: int;
+ var tempBoogie9: int;
+ var tempBoogie10: int;
+ var tempBoogie11: int;
+ var tempBoogie12: int;
+ var tempBoogie13: int;
+ var tempBoogie14: int;
+ var tempBoogie15: int;
+ var tempBoogie16: int;
+ var tempBoogie17: int;
+ var tempBoogie18: int;
+ var tempBoogie19: int;
+ var __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume v4.INT_LT(e_.1, v4.alloc);
+ assume v4.INT_LT(outval_.1, v4.alloc);
+ e := 0;
+ outval := 0;
+ e := e_.1;
+ outval := outval_.1;
+ goto label_3#2;
+
+ label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 40} true;
+ call v2.Eval(e);
+ assume v4.value_is(v2.__ctobpl_const_21, e);
+ assume v4.value_is(v2.__ctobpl_const_22, e);
+ goto label_6#2;
+
+ label_6#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 41} true;
+ assert true;
+ assert true;
+ v4.Mem_T.INT4 := v4.Mem_T.INT4[outval := v4.Mem_T.result__EXPR[v4.result__EXPR(e)]];
+ assume v4.value_is(v2.__ctobpl_const_23, outval);
+ assume v4.value_is(v2.__ctobpl_const_24, v4.Mem_T.INT4[outval]);
+ assume v4.value_is(v2.__ctobpl_const_25, e);
+ assume v4.value_is(v2.__ctobpl_const_26, v4.Mem_T.result__EXPR[v4.result__EXPR(e)]);
+ goto label_1#2;
+
+ label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 42} true;
+ return;
+}
+
+
+
+implementation v2.EvalEntry2(e_.1: int)
+{
+ var havoc_stringTemp: int;
+ var condVal: int;
+ var e: int;
+ var tempBoogie0: int;
+ var tempBoogie1: int;
+ var tempBoogie2: int;
+ var tempBoogie3: int;
+ var tempBoogie4: int;
+ var tempBoogie5: int;
+ var tempBoogie6: int;
+ var tempBoogie7: int;
+ var tempBoogie8: int;
+ var tempBoogie9: int;
+ var tempBoogie10: int;
+ var tempBoogie11: int;
+ var tempBoogie12: int;
+ var tempBoogie13: int;
+ var tempBoogie14: int;
+ var tempBoogie15: int;
+ var tempBoogie16: int;
+ var tempBoogie17: int;
+ var tempBoogie18: int;
+ var tempBoogie19: int;
+ var __havoc_dummy_return: int;
+
+ anon0#2:
+ havoc_stringTemp := 0;
+ goto start#2;
+
+ start#2:
+ assume v4.INT_LT(e_.1, v4.alloc);
+ e := 0;
+ e := e_.1;
+ goto label_3#2;
+
+ label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 46} true;
+ call v2.Eval(e);
+ assume v4.value_is(v2.__ctobpl_const_27, e);
+ assume v4.value_is(v2.__ctobpl_const_28, e);
+ goto label_1#2;
+
+ label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 47} true;
+ return;
+}
+
+
+
+implementation v2.__havoc_heapglobal_init()
+{
+
+ anon0#2:
+ return;
+}
+
+
+
+type name;
+
+type byte;
+
+var Output_of_v2.Eval_v4.Mem_T.result__EXPR: [int]int;
+
+var Output_of_v4.Eval_v4.Mem_T.result__EXPR: [int]int;
+
+procedure EQ_v2.Eval__v4.Eval(e_.1: int) returns (AA_TEMP30: bool);
+ modifies v4.Mem_T.result__EXPR, Output_of_v2.Eval_v4.Mem_T.result__EXPR, Output_of_v4.Eval_v4.Mem_T.result__EXPR;
+ ensures AA_TEMP30;
+
+
+
+implementation EQ_v2.Eval__v4.Eval(e_.1: int) returns (AA_TEMP30: bool)
+{
+ var AA_TEMP10: [int]int;
+ var AA_TEMP00: [int]int;
+ var inline$v2.Eval$0$havoc_stringTemp: int;
+ var inline$v2.Eval$0$condVal: int;
+ var inline$v2.Eval$0$a1: int;
+ var inline$v2.Eval$0$a2: int;
+ var inline$v2.Eval$0$e: int;
+ var inline$v2.Eval$0$op: int;
+ var inline$v2.Eval$0$res: int;
+ var inline$v2.Eval$0$tempBoogie0: int;
+ var inline$v2.Eval$0$tempBoogie1: int;
+ var inline$v2.Eval$0$tempBoogie2: int;
+ var inline$v2.Eval$0$tempBoogie3: int;
+ var inline$v2.Eval$0$tempBoogie4: int;
+ var inline$v2.Eval$0$tempBoogie5: int;
+ var inline$v2.Eval$0$tempBoogie6: int;
+ var inline$v2.Eval$0$tempBoogie7: int;
+ var inline$v2.Eval$0$tempBoogie8: int;
+ var inline$v2.Eval$0$tempBoogie9: int;
+ var inline$v2.Eval$0$tempBoogie10: int;
+ var inline$v2.Eval$0$tempBoogie11: int;
+ var inline$v2.Eval$0$tempBoogie12: int;
+ var inline$v2.Eval$0$tempBoogie13: int;
+ var inline$v2.Eval$0$tempBoogie14: int;
+ var inline$v2.Eval$0$tempBoogie15: int;
+ var inline$v2.Eval$0$tempBoogie16: int;
+ var inline$v2.Eval$0$tempBoogie17: int;
+ var inline$v2.Eval$0$tempBoogie18: int;
+ var inline$v2.Eval$0$tempBoogie19: int;
+ var inline$v2.Eval$0$__havoc_dummy_return: int;
+ var inline$v2.Eval$0$e_.1: int;
+ var inline$v2.Eval$0$v4.Mem_T.result__EXPR: [int]int;
+ var inline$v4.Eval$0$havoc_stringTemp: int;
+ var inline$v4.Eval$0$condVal: int;
+ var inline$v4.Eval$0$a1: int;
+ var inline$v4.Eval$0$a2: int;
+ var inline$v4.Eval$0$e: int;
+ var inline$v4.Eval$0$op: int;
+ var inline$v4.Eval$0$res: int;
+ var inline$v4.Eval$0$result.UnsignedAdd$1: int;
+ var inline$v4.Eval$0$result.UnsignedSub$2: int;
+ var inline$v4.Eval$0$tempBoogie0: int;
+ var inline$v4.Eval$0$tempBoogie1: int;
+ var inline$v4.Eval$0$tempBoogie2: int;
+ var inline$v4.Eval$0$tempBoogie3: int;
+ var inline$v4.Eval$0$tempBoogie4: int;
+ var inline$v4.Eval$0$tempBoogie5: int;
+ var inline$v4.Eval$0$tempBoogie6: int;
+ var inline$v4.Eval$0$tempBoogie7: int;
+ var inline$v4.Eval$0$tempBoogie8: int;
+ var inline$v4.Eval$0$tempBoogie9: int;
+ var inline$v4.Eval$0$tempBoogie10: int;
+ var inline$v4.Eval$0$tempBoogie11: int;
+ var inline$v4.Eval$0$tempBoogie12: int;
+ var inline$v4.Eval$0$tempBoogie13: int;
+ var inline$v4.Eval$0$tempBoogie14: int;
+ var inline$v4.Eval$0$tempBoogie15: int;
+ var inline$v4.Eval$0$tempBoogie16: int;
+ var inline$v4.Eval$0$tempBoogie17: int;
+ var inline$v4.Eval$0$tempBoogie18: int;
+ var inline$v4.Eval$0$tempBoogie19: int;
+ var inline$v4.Eval$0$__havoc_dummy_return: int;
+ var inline$v4.Eval$0$e_.1: int;
+ var inline$v4.Eval$0$v4.Mem_T.result__EXPR: [int]int;
+
+ AA_INSTR_EQ_BODY:
+ AA_TEMP00 := v4.Mem_T.result__EXPR;
+ goto inline$v2.Eval$0$Entry;
+
+ inline$v2.Eval$0$Entry:
+ inline$v2.Eval$0$e_.1 := e_.1;
+ inline$v2.Eval$0$v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
+ goto inline$v2.Eval$0$anon0#2;
+
+ inline$v2.Eval$0$anon0#2:
+ inline$v2.Eval$0$havoc_stringTemp := 0;
+ goto inline$v2.Eval$0$start#2;
+
+ inline$v2.Eval$0$start#2:
+ assume v4.INT_LT(inline$v2.Eval$0$e_.1, v4.alloc);
+ inline$v2.Eval$0$a1 := 0;
+ inline$v2.Eval$0$a2 := 0;
+ inline$v2.Eval$0$e := 0;
+ inline$v2.Eval$0$op := 0;
+ inline$v2.Eval$0$res := 0;
+ inline$v2.Eval$0$e := inline$v2.Eval$0$e_.1;
+ goto inline$v2.Eval$0$label_3#2;
+
+ inline$v2.Eval$0$label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto inline$v2.Eval$0$label_4#2;
+
+ inline$v2.Eval$0$label_4#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto inline$v2.Eval$0$label_5#2;
+
+ inline$v2.Eval$0$label_5#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto inline$v2.Eval$0$label_6#2;
+
+ inline$v2.Eval$0$label_6#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 17} true;
+ goto inline$v2.Eval$0$label_7#2;
+
+ inline$v2.Eval$0$label_7#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 19} true;
+ assert true;
+ inline$v2.Eval$0$op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v2.Eval$0$e)];
+ assume v4.value_is(v2.__ctobpl_const_1, inline$v2.Eval$0$op);
+ assume v4.value_is(v2.__ctobpl_const_2, inline$v2.Eval$0$e);
+ assume v4.value_is(v2.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v2.Eval$0$e)]);
+ goto inline$v2.Eval$0$label_8#2;
+
+ inline$v2.Eval$0$label_8#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 20} true;
+ assert true;
+ inline$v2.Eval$0$a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v2.Eval$0$e)];
+ assume v4.value_is(v2.__ctobpl_const_4, inline$v2.Eval$0$a1);
+ assume v4.value_is(v2.__ctobpl_const_5, inline$v2.Eval$0$e);
+ assume v4.value_is(v2.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v2.Eval$0$e)]);
+ goto inline$v2.Eval$0$label_9#2;
+
+ inline$v2.Eval$0$label_9#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 21} true;
+ assert true;
+ inline$v2.Eval$0$a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v2.Eval$0$e)];
+ assume v4.value_is(v2.__ctobpl_const_7, inline$v2.Eval$0$a2);
+ assume v4.value_is(v2.__ctobpl_const_8, inline$v2.Eval$0$e);
+ assume v4.value_is(v2.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v2.Eval$0$e)]);
+ goto inline$v2.Eval$0$label_10#2;
+
+ inline$v2.Eval$0$label_10#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 22} true;
+ inline$v2.Eval$0$res := 0 - 1;
+ assume v4.value_is(v2.__ctobpl_const_10, inline$v2.Eval$0$res);
+ goto inline$v2.Eval$0$label_11#2;
+
+ inline$v2.Eval$0$label_11#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 24} true;
+ goto inline$v2.Eval$0$label_11_case_0#2, inline$v2.Eval$0$label_11_case_1#2, inline$v2.Eval$0$label_11_case_2#2;
+
+ inline$v2.Eval$0$label_11_case_2#2:
+ assume v4.INT_EQ(inline$v2.Eval$0$op, 2);
+ assume v4.value_is(v2.__ctobpl_const_11, inline$v2.Eval$0$op);
+ goto inline$v2.Eval$0$label_14#2;
+
+ inline$v2.Eval$0$label_14#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 29} true;
+ inline$v2.Eval$0$res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(inline$v2.Eval$0$a1, inline$v2.Eval$0$a2, 1);
+ assume v4.value_is(v2.__ctobpl_const_18, inline$v2.Eval$0$res);
+ assume v4.value_is(v2.__ctobpl_const_19, inline$v2.Eval$0$a1);
+ assume v4.value_is(v2.__ctobpl_const_20, inline$v2.Eval$0$a2);
+ goto inline$v2.Eval$0$label_12#2;
+
+ inline$v2.Eval$0$label_11_case_1#2:
+ assume v4.INT_EQ(inline$v2.Eval$0$op, 1);
+ assume v4.value_is(v2.__ctobpl_const_11, inline$v2.Eval$0$op);
+ goto inline$v2.Eval$0$label_13#2;
+
+ inline$v2.Eval$0$label_13#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 27} true;
+ inline$v2.Eval$0$res := v4.PLUS(inline$v2.Eval$0$a1, 1, inline$v2.Eval$0$a2);
+ assume v4.value_is(v2.__ctobpl_const_15, inline$v2.Eval$0$res);
+ assume v4.value_is(v2.__ctobpl_const_16, inline$v2.Eval$0$a1);
+ assume v4.value_is(v2.__ctobpl_const_17, inline$v2.Eval$0$a2);
+ goto inline$v2.Eval$0$label_12#2;
+
+ inline$v2.Eval$0$label_11_case_0#2:
+ assume v4.INT_NEQ(inline$v2.Eval$0$op, 1);
+ assume v4.INT_NEQ(inline$v2.Eval$0$op, 2);
+ assume v4.value_is(v2.__ctobpl_const_11, inline$v2.Eval$0$op);
+ goto inline$v2.Eval$0$label_12#2;
+
+ inline$v2.Eval$0$label_12#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 35} true;
+ assert true;
+ v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v2.Eval$0$e) := inline$v2.Eval$0$res];
+ assume v4.value_is(v2.__ctobpl_const_12, inline$v2.Eval$0$e);
+ assume v4.value_is(v2.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v2.Eval$0$e)]);
+ assume v4.value_is(v2.__ctobpl_const_14, inline$v2.Eval$0$res);
+ goto inline$v2.Eval$0$label_1#2;
+
+ inline$v2.Eval$0$label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v2\foo.c"} {:sourceline 36} true;
+ goto inline$v2.Eval$0$Return;
+
+ inline$v2.Eval$0$Return:
+ goto AA_INSTR_EQ_BODY$1;
+
+ AA_INSTR_EQ_BODY$1:
+ AA_TEMP10 := v4.Mem_T.result__EXPR;
+ v4.Mem_T.result__EXPR := AA_TEMP00;
+ goto inline$v4.Eval$0$Entry;
+
+ inline$v4.Eval$0$Entry:
+ inline$v4.Eval$0$e_.1 := e_.1;
+ inline$v4.Eval$0$v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
+ goto inline$v4.Eval$0$anon0#2;
+
+ inline$v4.Eval$0$anon0#2:
+ inline$v4.Eval$0$havoc_stringTemp := 0;
+ goto inline$v4.Eval$0$start#2;
+
+ inline$v4.Eval$0$start#2:
+ assume v4.INT_LT(inline$v4.Eval$0$e_.1, v4.alloc);
+ inline$v4.Eval$0$a1 := 0;
+ inline$v4.Eval$0$a2 := 0;
+ inline$v4.Eval$0$e := 0;
+ inline$v4.Eval$0$op := 0;
+ inline$v4.Eval$0$res := 0;
+ inline$v4.Eval$0$result.UnsignedAdd$1 := 0;
+ inline$v4.Eval$0$result.UnsignedSub$2 := 0;
+ inline$v4.Eval$0$e := inline$v4.Eval$0$e_.1;
+ goto inline$v4.Eval$0$label_3#2;
+
+ inline$v4.Eval$0$label_3#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto inline$v4.Eval$0$label_4#2;
+
+ inline$v4.Eval$0$label_4#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto inline$v4.Eval$0$label_5#2;
+
+ inline$v4.Eval$0$label_5#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto inline$v4.Eval$0$label_6#2;
+
+ inline$v4.Eval$0$label_6#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 19} true;
+ goto inline$v4.Eval$0$label_7#2;
+
+ inline$v4.Eval$0$label_7#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 21} true;
+ assert true;
+ inline$v4.Eval$0$op := v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v4.Eval$0$e)];
+ assume v4.value_is(v4.__ctobpl_const_1, inline$v4.Eval$0$op);
+ assume v4.value_is(v4.__ctobpl_const_2, inline$v4.Eval$0$e);
+ assume v4.value_is(v4.__ctobpl_const_3, v4.Mem_T.oper__EXPR[v4.oper__EXPR(inline$v4.Eval$0$e)]);
+ goto inline$v4.Eval$0$label_8#2;
+
+ inline$v4.Eval$0$label_8#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 22} true;
+ assert true;
+ inline$v4.Eval$0$a1 := v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v4.Eval$0$e)];
+ assume v4.value_is(v4.__ctobpl_const_4, inline$v4.Eval$0$a1);
+ assume v4.value_is(v4.__ctobpl_const_5, inline$v4.Eval$0$e);
+ assume v4.value_is(v4.__ctobpl_const_6, v4.Mem_T.op1__EXPR[v4.op1__EXPR(inline$v4.Eval$0$e)]);
+ goto inline$v4.Eval$0$label_9#2;
+
+ inline$v4.Eval$0$label_9#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 23} true;
+ assert true;
+ inline$v4.Eval$0$a2 := v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v4.Eval$0$e)];
+ assume v4.value_is(v4.__ctobpl_const_7, inline$v4.Eval$0$a2);
+ assume v4.value_is(v4.__ctobpl_const_8, inline$v4.Eval$0$e);
+ assume v4.value_is(v4.__ctobpl_const_9, v4.Mem_T.op2__EXPR[v4.op2__EXPR(inline$v4.Eval$0$e)]);
+ goto inline$v4.Eval$0$label_10#2;
+
+ inline$v4.Eval$0$label_10#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 24} true;
+ inline$v4.Eval$0$res := 0 - 1;
+ assume v4.value_is(v4.__ctobpl_const_10, inline$v4.Eval$0$res);
+ goto inline$v4.Eval$0$label_11#2;
+
+ inline$v4.Eval$0$label_11#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 26} true;
+ goto inline$v4.Eval$0$label_11_case_0#2, inline$v4.Eval$0$label_11_case_1#2, inline$v4.Eval$0$label_11_case_2#2;
+
+ inline$v4.Eval$0$label_11_case_2#2:
+ assume v4.INT_EQ(inline$v4.Eval$0$op, 2);
+ assume v4.value_is(v4.__ctobpl_const_11, inline$v4.Eval$0$op);
+ goto inline$v4.Eval$0$label_14#2;
+
+ inline$v4.Eval$0$label_14#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 35} true;
+ goto inline$v4.Eval$0$label_14_true#2, inline$v4.Eval$0$label_14_false#2;
+
+ inline$v4.Eval$0$label_14_false#2:
+ assume v4.isUnsigned == 0;
+ assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
+ goto inline$v4.Eval$0$label_15#2;
+
+ inline$v4.Eval$0$label_15#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 38} true;
+ inline$v4.Eval$0$res := v4.MINUS_BOTH_PTR_OR_BOTH_INT(inline$v4.Eval$0$a1, inline$v4.Eval$0$a2, 1);
+ assume v4.value_is(v4.__ctobpl_const_17, inline$v4.Eval$0$res);
+ assume v4.value_is(v4.__ctobpl_const_18, inline$v4.Eval$0$a1);
+ assume v4.value_is(v4.__ctobpl_const_19, inline$v4.Eval$0$a2);
+ goto inline$v4.Eval$0$label_12#2;
+
+ inline$v4.Eval$0$label_14_true#2:
+ assume v4.isUnsigned != 0;
+ assume v4.value_is(v4.__ctobpl_const_16, v4.isUnsigned);
+ goto inline$v4.Eval$0$label_16#2;
+
+ inline$v4.Eval$0$label_16#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
+ call inline$v4.Eval$0$result.UnsignedSub$2 := v4.UnsignedSub(inline$v4.Eval$0$a1, inline$v4.Eval$0$a2);
+ assume v4.value_is(v4.__ctobpl_const_20, inline$v4.Eval$0$a1);
+ assume v4.value_is(v4.__ctobpl_const_21, inline$v4.Eval$0$a2);
+ assume v4.value_is(v4.__ctobpl_const_22, inline$v4.Eval$0$a1);
+ assume v4.value_is(v4.__ctobpl_const_23, inline$v4.Eval$0$a2);
+ goto inline$v4.Eval$0$label_19#2;
+
+ inline$v4.Eval$0$label_19#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 36} true;
+ inline$v4.Eval$0$res := inline$v4.Eval$0$result.UnsignedSub$2;
+ assume v4.value_is(v4.__ctobpl_const_24, inline$v4.Eval$0$res);
+ assume v4.value_is(v4.__ctobpl_const_25, inline$v4.Eval$0$result.UnsignedSub$2);
+ goto inline$v4.Eval$0$label_12#2;
+
+ inline$v4.Eval$0$label_11_case_1#2:
+ assume v4.INT_EQ(inline$v4.Eval$0$op, 1);
+ assume v4.value_is(v4.__ctobpl_const_11, inline$v4.Eval$0$op);
+ goto inline$v4.Eval$0$label_13#2;
+
+ inline$v4.Eval$0$label_13#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 29} true;
+ goto inline$v4.Eval$0$label_13_true#2, inline$v4.Eval$0$label_13_false#2;
+
+ inline$v4.Eval$0$label_13_false#2:
+ assume v4.isUnsigned == 0;
+ assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
+ goto inline$v4.Eval$0$label_20#2;
+
+ inline$v4.Eval$0$label_20#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 32} true;
+ inline$v4.Eval$0$res := v4.PLUS(inline$v4.Eval$0$a1, 1, inline$v4.Eval$0$a2);
+ assume v4.value_is(v4.__ctobpl_const_26, inline$v4.Eval$0$res);
+ assume v4.value_is(v4.__ctobpl_const_27, inline$v4.Eval$0$a1);
+ assume v4.value_is(v4.__ctobpl_const_28, inline$v4.Eval$0$a2);
+ goto inline$v4.Eval$0$label_12#2;
+
+ inline$v4.Eval$0$label_13_true#2:
+ assume v4.isUnsigned != 0;
+ assume v4.value_is(v4.__ctobpl_const_15, v4.isUnsigned);
+ goto inline$v4.Eval$0$label_21#2;
+
+ inline$v4.Eval$0$label_21#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
+ call inline$v4.Eval$0$result.UnsignedAdd$1 := v4.UnsignedAdd(inline$v4.Eval$0$a1, inline$v4.Eval$0$a2);
+ assume v4.value_is(v4.__ctobpl_const_29, inline$v4.Eval$0$a1);
+ assume v4.value_is(v4.__ctobpl_const_30, inline$v4.Eval$0$a2);
+ assume v4.value_is(v4.__ctobpl_const_31, inline$v4.Eval$0$a1);
+ assume v4.value_is(v4.__ctobpl_const_32, inline$v4.Eval$0$a2);
+ goto inline$v4.Eval$0$label_24#2;
+
+ inline$v4.Eval$0$label_24#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 30} true;
+ inline$v4.Eval$0$res := inline$v4.Eval$0$result.UnsignedAdd$1;
+ assume v4.value_is(v4.__ctobpl_const_33, inline$v4.Eval$0$res);
+ assume v4.value_is(v4.__ctobpl_const_34, inline$v4.Eval$0$result.UnsignedAdd$1);
+ goto inline$v4.Eval$0$label_12#2;
+
+ inline$v4.Eval$0$label_11_case_0#2:
+ assume v4.INT_NEQ(inline$v4.Eval$0$op, 1);
+ assume v4.INT_NEQ(inline$v4.Eval$0$op, 2);
+ assume v4.value_is(v4.__ctobpl_const_11, inline$v4.Eval$0$op);
+ goto inline$v4.Eval$0$label_12#2;
+
+ inline$v4.Eval$0$label_12#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 41} true;
+ assert true;
+ v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v4.Eval$0$e) := inline$v4.Eval$0$res];
+ assume v4.value_is(v4.__ctobpl_const_12, inline$v4.Eval$0$e);
+ assume v4.value_is(v4.__ctobpl_const_13, v4.Mem_T.result__EXPR[v4.result__EXPR(inline$v4.Eval$0$e)]);
+ assume v4.value_is(v4.__ctobpl_const_14, inline$v4.Eval$0$res);
+ goto inline$v4.Eval$0$label_1#2;
+
+ inline$v4.Eval$0$label_1#2:
+ assert {:sourcefile "c:\tvm\projects\symb_diff\symdiff\test\c_examples\ex3\v4\foo.c"} {:sourceline 42} true;
+ goto inline$v4.Eval$0$Return;
+
+ inline$v4.Eval$0$Return:
+ goto AA_INSTR_EQ_BODY$2;
+
+ AA_INSTR_EQ_BODY$2:
+ Output_of_v2.Eval_v4.Mem_T.result__EXPR := AA_TEMP10;
+ Output_of_v4.Eval_v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
+ AA_TEMP30 := AA_TEMP10 == v4.Mem_T.result__EXPR || (forall _x0: int :: AA_TEMP10[_x0] == v4.Mem_T.result__EXPR[_x0]);
+ return;
+}
+
+
+
+var Output_of_v2.EvalEntry1_v4.Mem_T.result__EXPR: [int]int;
+
+var Output_of_v4.EvalEntry1_v4.Mem_T.result__EXPR: [int]int;
+
+var Output_of_v2.EvalEntry1_v4.Mem_T.INT4: [int]int;
+
+var Output_of_v4.EvalEntry1_v4.Mem_T.INT4: [int]int;
+
+var Output_of_v2.EvalEntry1_v4.isUnsigned: int;
+
+var Output_of_v4.EvalEntry1_v4.isUnsigned: int;
+
+procedure EQ_v2.EvalEntry1__v4.EvalEntry1(e_.1: int, outval_.1: int) returns (AA_TEMP80: bool, AA_TEMP81: bool, AA_TEMP82: bool);
+ modifies v4.Mem_T.result__EXPR, v4.Mem_T.INT4, v4.isUnsigned, Output_of_v2.EvalEntry1_v4.Mem_T.result__EXPR, Output_of_v4.EvalEntry1_v4.Mem_T.result__EXPR, Output_of_v2.EvalEntry1_v4.Mem_T.INT4, Output_of_v4.EvalEntry1_v4.Mem_T.INT4, Output_of_v2.EvalEntry1_v4.isUnsigned, Output_of_v4.EvalEntry1_v4.isUnsigned;
+ ensures AA_TEMP82 && AA_TEMP81 && AA_TEMP80;
+
+
+
+implementation EQ_v2.EvalEntry1__v4.EvalEntry1(e_.1: int, outval_.1: int) returns (AA_TEMP80: bool, AA_TEMP81: bool, AA_TEMP82: bool)
+{
+ var AA_TEMP60: [int]int;
+ var AA_TEMP61: [int]int;
+ var AA_TEMP62: int;
+ var AA_TEMP50: [int]int;
+ var AA_TEMP51: [int]int;
+ var AA_TEMP52: int;
+
+ AA_INSTR_EQ_BODY:
+ AA_TEMP50 := v4.Mem_T.result__EXPR;
+ AA_TEMP51 := v4.Mem_T.INT4;
+ AA_TEMP52 := v4.isUnsigned;
+ call v2.EvalEntry1(e_.1, outval_.1);
+ AA_TEMP60 := v4.Mem_T.result__EXPR;
+ AA_TEMP61 := v4.Mem_T.INT4;
+ AA_TEMP62 := v4.isUnsigned;
+ v4.Mem_T.result__EXPR := AA_TEMP50;
+ v4.Mem_T.INT4 := AA_TEMP51;
+ v4.isUnsigned := AA_TEMP52;
+ call v4.EvalEntry1(e_.1, outval_.1);
+ Output_of_v2.EvalEntry1_v4.Mem_T.result__EXPR := AA_TEMP60;
+ Output_of_v4.EvalEntry1_v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
+ Output_of_v2.EvalEntry1_v4.Mem_T.INT4 := AA_TEMP61;
+ Output_of_v4.EvalEntry1_v4.Mem_T.INT4 := v4.Mem_T.INT4;
+ Output_of_v2.EvalEntry1_v4.isUnsigned := AA_TEMP62;
+ Output_of_v4.EvalEntry1_v4.isUnsigned := v4.isUnsigned;
+ AA_TEMP80, AA_TEMP81, AA_TEMP82 := AA_TEMP60 == v4.Mem_T.result__EXPR || (forall _x0: int :: AA_TEMP60[_x0] == v4.Mem_T.result__EXPR[_x0]), AA_TEMP61 == v4.Mem_T.INT4 || (forall _x0: int :: AA_TEMP61[_x0] == v4.Mem_T.INT4[_x0]), AA_TEMP62 == v4.isUnsigned;
+ return;
+}
+
+
+
+var Output_of_v2.EvalEntry2_v4.Mem_T.result__EXPR: [int]int;
+
+var Output_of_v4.EvalEntry2_v4.Mem_T.result__EXPR: [int]int;
+
+var Output_of_v2.EvalEntry2_v4.isUnsigned: int;
+
+var Output_of_v4.EvalEntry2_v4.isUnsigned: int;
+
+procedure EQ_v2.EvalEntry2__v4.EvalEntry2(e_.1: int) returns (AA_TEMP130: bool, AA_TEMP131: bool);
+ modifies v4.Mem_T.result__EXPR, v4.isUnsigned, Output_of_v2.EvalEntry2_v4.Mem_T.result__EXPR, Output_of_v4.EvalEntry2_v4.Mem_T.result__EXPR, Output_of_v2.EvalEntry2_v4.isUnsigned, Output_of_v4.EvalEntry2_v4.isUnsigned;
+ ensures AA_TEMP131 && AA_TEMP130;
+
+
+
+implementation EQ_v2.EvalEntry2__v4.EvalEntry2(e_.1: int) returns (AA_TEMP130: bool, AA_TEMP131: bool)
+{
+ var AA_TEMP110: [int]int;
+ var AA_TEMP111: int;
+ var AA_TEMP100: [int]int;
+ var AA_TEMP101: int;
+
+ AA_INSTR_EQ_BODY:
+ AA_TEMP100 := v4.Mem_T.result__EXPR;
+ AA_TEMP101 := v4.isUnsigned;
+ call v2.EvalEntry2(e_.1);
+ AA_TEMP110 := v4.Mem_T.result__EXPR;
+ AA_TEMP111 := v4.isUnsigned;
+ v4.Mem_T.result__EXPR := AA_TEMP100;
+ v4.isUnsigned := AA_TEMP101;
+ call v4.EvalEntry2(e_.1);
+ Output_of_v2.EvalEntry2_v4.Mem_T.result__EXPR := AA_TEMP110;
+ Output_of_v4.EvalEntry2_v4.Mem_T.result__EXPR := v4.Mem_T.result__EXPR;
+ Output_of_v2.EvalEntry2_v4.isUnsigned := AA_TEMP111;
+ Output_of_v4.EvalEntry2_v4.isUnsigned := v4.isUnsigned;
+ AA_TEMP130, AA_TEMP131 := AA_TEMP110 == v4.Mem_T.result__EXPR || (forall _x0: int :: AA_TEMP110[_x0] == v4.Mem_T.result__EXPR[_x0]), AA_TEMP111 == v4.isUnsigned;
+ return;
+}
+
+
+
+function _uf_v4.__HAVOC_malloc_new(arg_0: int) : int;
+
+function _uf_v2.__HAVOC_malloc_new(arg_0: int) : int;
+
+function _uf_v4.__HAVOC_det_malloc_new(arg_0: int) : int;
+
+function _uf_v2.__HAVOC_det_malloc_new(arg_0: int) : int;
+
+function _uf_v4.__HAVOC_memset_split_1_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
+
+function _uf_v2.__HAVOC_memset_split_1_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
+
+function _uf_v4.__HAVOC_memset_split_2_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
+
+function _uf_v2.__HAVOC_memset_split_2_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
+
+function _uf_v4.__HAVOC_memset_split_4_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
+
+function _uf_v2.__HAVOC_memset_split_4_ret(arg_0: [int]int, arg_1: int, arg_2: int, arg_3: int) : [int]int;
+
+function _uf_v4.nondet_choice_x() : int;
+
+function _uf_v2.nondet_choice_x() : int;
+
+function _uf_v4.det_choice_x() : int;
+
+function _uf_v2.det_choice_x() : int;
+
+function _uf_v4._strdup_new(arg_0: int) : int;
+
+function _uf_v2._strdup_new(arg_0: int) : int;
+
+function _uf_v4._xstrcasecmp_ret(arg_0: int, arg_1: int) : int;
+
+function _uf_v2._xstrcasecmp_ret(arg_0: int, arg_1: int) : int;
+
+function _uf_v4._xstrcmp_ret(arg_0: int, arg_1: int) : int;
+
+function _uf_v2._xstrcmp_ret(arg_0: int, arg_1: int) : int;
+
+function _uf_v4.Eval_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
+
+function _uf_v2.Eval_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
+
+function _uf_v4.EvalEntry1_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
+
+function _uf_v4.EvalEntry1_v4.Mem_T.INT4(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
+
+function _uf_v4.EvalEntry1_v4.isUnsigned(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : int;
+
+function _uf_v2.EvalEntry1_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
+
+function _uf_v2.EvalEntry1_v4.Mem_T.INT4(arg_0: int, arg_1: int, arg_2: int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: [int]int, arg_7: [int]int, arg_8: int) : [int]int;
+
+function _uf_v4.EvalEntry2_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
+
+function _uf_v4.EvalEntry2_v4.isUnsigned(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : int;
+
+function _uf_v2.EvalEntry2_v4.Mem_T.result__EXPR(arg_0: int, arg_1: int, arg_2: [int]int, arg_3: [int]int, arg_4: [int]int, arg_5: [int]int, arg_6: int) : [int]int;
diff --git a/Test/prover/usedot.bpl b/Test/prover/usedot.bpl
new file mode 100644
index 00000000..5815236e
--- /dev/null
+++ b/Test/prover/usedot.bpl
@@ -0,0 +1,9 @@
+// RUN: %boogie -typeEncoding:m -proverLog:"%t.smt2" "%s"
+// RUN: %OutputCheck "%s" --file-to-check="%t.smt2"
+procedure foo() {
+ // . is an illegal starting character in SMT-LIBv2
+ // so test that we don't emit it as a symbol name.
+ // CHECK-L:(declare-fun q@.x () Int)
+ var .x:int;
+ assert .x == 0;
+}
diff --git a/Test/prover/z3mutl.bpl b/Test/prover/z3mutl.bpl
index f42f7bb4..84b82ed6 100644
--- a/Test/prover/z3mutl.bpl
+++ b/Test/prover/z3mutl.bpl
@@ -1,24 +1,24 @@
-// RUN: %boogie -typeEncoding:m -z3multipleErrors "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var x:int;
-
-procedure Foo(){
-
-start:
-
- goto L1, L2, L3, L4;
-L1: assume x == 1;
- goto L5;
-
-L2: assume x == 2;
- goto L5;
-
-L3: assume x == 3;
- goto L5;
-
-L4: assume x > 10;
- goto L5;
-
-L5: assert (x > 4);
-
+// RUN: %boogie -typeEncoding:m -z3multipleErrors "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var x:int;
+
+procedure Foo(){
+
+start:
+
+ goto L1, L2, L3, L4;
+L1: assume x == 1;
+ goto L5;
+
+L2: assume x == 2;
+ goto L5;
+
+L3: assume x == 3;
+ goto L5;
+
+L4: assume x > 10;
+ goto L5;
+
+L5: assert (x > 4);
+
} \ No newline at end of file
diff --git a/Test/secure/tworound.bpl b/Test/secure/tworound.bpl
new file mode 100644
index 00000000..a78c4af4
--- /dev/null
+++ b/Test/secure/tworound.bpl
@@ -0,0 +1,116 @@
+type T = bv4;
+function {:bvbuiltin "bvult"} bvlt(p1: T, p2: T) : bool; // unsigned less than
+function {:bvbuiltin "bvxor"} xorT(p1: T, p2: T) : T;
+function {:bvbuiltin "bvadd"} bvadd(p1: T, p2: T) : T;
+
+
+procedure bar({:visible} v: T)
+ returns ({:hidden} h: T)
+ ensures true;
+{
+ h := v;
+}
+
+procedure foo0({:visible} x1: T, {:visible} x2: T, {:hidden} y1: T, {:hidden} y2: T)
+ returns ({:visible} r1: bool, {:visible} r2: bool,
+ {:visible} s1: T, {:visible} s2: T, {:visible} s3: T, {:visible} s4: T)
+ ensures (r2 == bvlt(bvadd(x1,x2), bvadd(y1,y2))) && (r1 == bvlt(x1, y1));
+{
+ var {:hidden} t1, t2: T;
+
+ r1 := bvlt(x1, y1);
+
+ havoc s1;
+ havoc s2;
+
+ s3 := xorT(x1, s1);
+ s4 := xorT(y1, s2);
+
+ t1 := xorT(s1, s3);
+ t2 := xorT(s2, s4);
+
+ r2 := bvlt(bvadd(x2, t1), bvadd(y2, t2));
+}
+
+
+procedure foo1({:visible} x1: T, {:visible} x2: T, {:hidden} y1: T, {:hidden} y2: T)
+ returns ({:visible} r1: bool, {:visible} r2: bool,
+ {:visible} s1: T, {:visible} s2: T, {:hidden} s3: T, {:hidden} s4: T)
+ ensures (r2 == bvlt(bvadd(x1,x2), bvadd(y1,y2))) && (r1 == bvlt(x1, y1));
+{
+ var {:hidden} t1, t2: T;
+
+ r1 := bvlt(x1, y1);
+
+ havoc s1;
+ havoc s2;
+
+ s3 := xorT(x1, s1);
+ s4 := xorT(y1, s2);
+
+ t1 := xorT(s1, s3);
+ t2 := xorT(s2, s4);
+
+ r2 := bvlt(bvadd(x2, t1), bvadd(y2, t2));
+}
+
+
+
+procedure foo2({:visible} x1: T, {:visible} x2: T, {:hidden} y1: T, {:hidden} y2: T)
+ returns ({:visible} r1: bool, {:visible} r2: bool,
+ {:visible} s1: T, {:visible} s2: T)
+ ensures (r2 == bvlt(bvadd(x1,x2), bvadd(y1,y2))) && (r1 == bvlt(x1, y1));
+{
+ var {:hidden} t1, t2: T;
+ var {:hidden} s3, s4: T;
+
+ r1 := bvlt(x1, y1);
+
+ havoc s1;
+ havoc s2;
+
+ s3 := xorT(x1, s1);
+ s4 := xorT(y1, s2);
+
+ t1 := xorT(s1, s3);
+ t2 := xorT(s2, s4);
+
+ r2 := bvlt(bvadd(x2, t1), bvadd(y2, t2));
+}
+
+procedure foo3({:visible} x1: T, {:visible} x2: T, {:hidden} y1: T, {:hidden} y2: T)
+ returns ({:visible} r1: bool, {:visible} r2: bool,
+ {:visible} s1: T, {:visible} s2: T, {:hidden} s3: T, {:hidden} s4: T)
+ ensures (r2 == bvlt(bvadd(x1,x2), bvadd(y1,y2))) && (r1 == bvlt(x1, y1)) && (s4 == xorT(y1,s2)) && (s3 == xorT(x1, s1));
+{
+ var {:hidden} t1, t2: T;
+
+ r1 := bvlt(x1, y1);
+
+ havoc s1;
+ havoc s2;
+
+ s3 := xorT(x1, s1);
+ s4 := xorT(y1, s2);
+
+ t1 := xorT(s1, s3);
+ t2 := xorT(s2, s4);
+
+ r2 := bvlt(bvadd(x2, t1), bvadd(y2, t2));
+}
+
+
+
+procedure bid({:visible} x1: T, {:visible} x2: T, {:hidden} y1: T, {:hidden} y2: T)
+ returns ({:visible} r: bool)
+ ensures r == bvlt(bvadd(x1,x2), bvadd(y1,y2));
+{
+ var {:hidden} r1, r2: bool;
+ var {:hidden} s1, s2, s3, s4: T;
+
+ call r1, r2, s1, s2, s3, s4 := foo1(x1, x2, y1, y2);
+
+ r := r2;
+}
+
+
diff --git a/Test/smoke/smoke0.bpl b/Test/smoke/smoke0.bpl
index 87531c8d..6c4c8167 100644
--- a/Test/smoke/smoke0.bpl
+++ b/Test/smoke/smoke0.bpl
@@ -1,55 +1,55 @@
-// RUN: %boogie -smoke "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure a(x:int)
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
-procedure b(x:int)
- requires x>0;
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
-
-procedure c(x:int)
- requires x>0;
-{
- var y : int;
-
- if(x<0) {
- y := 1;
- assert false;
- } else {
- y := 2;
- }
-}
-
-procedure d(x:int)
- requires x>0;
-{
- var y : int;
-
- if(x<0) {
- assert false;
- y := 1;
- } else {
- y := 2;
- }
-}
-
-
+// RUN: %boogie -smoke "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure a(x:int)
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
+procedure b(x:int)
+ requires x>0;
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
+
+procedure c(x:int)
+ requires x>0;
+{
+ var y : int;
+
+ if(x<0) {
+ y := 1;
+ assert false;
+ } else {
+ y := 2;
+ }
+}
+
+procedure d(x:int)
+ requires x>0;
+{
+ var y : int;
+
+ if(x<0) {
+ assert false;
+ y := 1;
+ } else {
+ y := 2;
+ }
+}
+
+
diff --git a/Test/snapshots/Snapshots0.v0.bpl b/Test/snapshots/Snapshots0.v0.bpl
index c75e9520..68143cdf 100644
--- a/Test/snapshots/Snapshots0.v0.bpl
+++ b/Test/snapshots/Snapshots0.v0.bpl
@@ -1,42 +1,42 @@
-// id = "P1:0"
-// priority = 3
-// checksum = "123"
-//
-// Action: verify
-procedure {:priority 3} {:checksum "123"} P1()
-{
- assert false;
-}
-
-
-// id = "P2:0"
-// priority = 3
-// checksum = null
-//
-// Action: verify
-procedure {:priority 3} P2()
-{
- assert false;
-}
-
-
-// id = "P3:0"
-// priority = 1
-// checksum = null
-//
-// Action: verify
-procedure P3()
-{
- assert false;
-}
-
-
-// id = "P0:1"
-// priority = 5
-// checksum = "012"
-//
-// Action: verify
-procedure {:id "P0:1"} {:priority 5} {:checksum "012"} P0()
-{
- assert false;
-}
+// id = "P1:0"
+// priority = 3
+// checksum = "123"
+//
+// Action: verify
+procedure {:priority 3} {:checksum "123"} P1()
+{
+ assert false;
+}
+
+
+// id = "P2:0"
+// priority = 3
+// checksum = null
+//
+// Action: verify
+procedure {:priority 3} P2()
+{
+ assert false;
+}
+
+
+// id = "P3:0"
+// priority = 1
+// checksum = null
+//
+// Action: verify
+procedure P3()
+{
+ assert false;
+}
+
+
+// id = "P0:1"
+// priority = 5
+// checksum = "012"
+//
+// Action: verify
+procedure {:id "P0:1"} {:priority 5} {:checksum "012"} P0()
+{
+ assert false;
+}
diff --git a/Test/snapshots/Snapshots0.v1.bpl b/Test/snapshots/Snapshots0.v1.bpl
index efd30c8f..2be6ec1c 100644
--- a/Test/snapshots/Snapshots0.v1.bpl
+++ b/Test/snapshots/Snapshots0.v1.bpl
@@ -1,42 +1,42 @@
-// id = "P0:1"
-// priority = 5
-// checksum = "012"
-//
-// Action: skip
-procedure {:id "P0:1"} {:priority 5} {:checksum "012"} P0()
-{
- assert false;
-}
-
-
-// id = "P1:0"
-// priority = 5
-// checksum = "234"
-//
-// Action: verify (unknown checksum)
-procedure {:priority 5} {:checksum "234"} P1()
-{
- assert true;
-}
-
-
-// id = "P2:0"
-// priority = 3
-// checksum = null
-//
-// Action: verify (no checksum)
-procedure {:priority 3} P2()
-{
- assert false;
-}
-
-
-// id = "P3:0"
-// priority = 1
-// checksum = "234"
-//
-// Action: verify (unknown checksum)
-procedure {:checksum "234"} P3()
-{
- assert true;
-}
+// id = "P0:1"
+// priority = 5
+// checksum = "012"
+//
+// Action: skip
+procedure {:id "P0:1"} {:priority 5} {:checksum "012"} P0()
+{
+ assert false;
+}
+
+
+// id = "P1:0"
+// priority = 5
+// checksum = "234"
+//
+// Action: verify (unknown checksum)
+procedure {:priority 5} {:checksum "234"} P1()
+{
+ assert true;
+}
+
+
+// id = "P2:0"
+// priority = 3
+// checksum = null
+//
+// Action: verify (no checksum)
+procedure {:priority 3} P2()
+{
+ assert false;
+}
+
+
+// id = "P3:0"
+// priority = 1
+// checksum = "234"
+//
+// Action: verify (unknown checksum)
+procedure {:checksum "234"} P3()
+{
+ assert true;
+}
diff --git a/Test/snapshots/Snapshots0.v2.bpl b/Test/snapshots/Snapshots0.v2.bpl
index 156977f7..8c7efe24 100644
--- a/Test/snapshots/Snapshots0.v2.bpl
+++ b/Test/snapshots/Snapshots0.v2.bpl
@@ -1,31 +1,31 @@
-// id = "P0:1"
-// priority = 5
-// checksum = "012"
-//
-// Action: skip
-procedure {:id "P0:1"} {:priority 5} {:checksum "012"} P0()
-{
- assert false;
-}
-
-
-// id = "P1:0"
-// priority = 1
-// checksum = "234"
-//
-// Action: skip
-procedure {:priority 1} {:checksum "234"} P1()
-{
- assert true;
-}
-
-
-// id = "P3:0"
-// priority = 1
-// checksum = "234"
-//
-// Action: skip
-procedure {:checksum "234"} P3()
-{
- assert true;
-}
+// id = "P0:1"
+// priority = 5
+// checksum = "012"
+//
+// Action: skip
+procedure {:id "P0:1"} {:priority 5} {:checksum "012"} P0()
+{
+ assert false;
+}
+
+
+// id = "P1:0"
+// priority = 1
+// checksum = "234"
+//
+// Action: skip
+procedure {:priority 1} {:checksum "234"} P1()
+{
+ assert true;
+}
+
+
+// id = "P3:0"
+// priority = 1
+// checksum = "234"
+//
+// Action: skip
+procedure {:checksum "234"} P3()
+{
+ assert true;
+}
diff --git a/Test/snapshots/Snapshots1.v0.bpl b/Test/snapshots/Snapshots1.v0.bpl
index ea2c06bb..749db7af 100644
--- a/Test/snapshots/Snapshots1.v0.bpl
+++ b/Test/snapshots/Snapshots1.v0.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "P1$proc#0"} P1();
-// Action: verify
-implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
-{
- call P2();
-}
-
-
-procedure {:checksum "P2$proc#0"} P2();
-// Action: verify
-implementation {:id "P2"} {:checksum "P2$impl#0"} P2()
-{
- assert 1 != 1;
-}
+procedure {:checksum "P1$proc#0"} P1();
+// Action: verify
+implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
+{
+ call P2();
+}
+
+
+procedure {:checksum "P2$proc#0"} P2();
+// Action: verify
+implementation {:id "P2"} {:checksum "P2$impl#0"} P2()
+{
+ assert 1 != 1;
+}
diff --git a/Test/snapshots/Snapshots1.v1.bpl b/Test/snapshots/Snapshots1.v1.bpl
index 9fbe44af..9dc8b779 100644
--- a/Test/snapshots/Snapshots1.v1.bpl
+++ b/Test/snapshots/Snapshots1.v1.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "P1$proc#0"} P1();
-// Action: skip
-implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
-{
- call P2();
-}
-
-
-procedure {:checksum "P2$proc#0"} P2();
-// Action: verify
-implementation {:id "P2"} {:checksum "P2$impl#1"} P2()
-{
- assert 2 != 2;
-}
+procedure {:checksum "P1$proc#0"} P1();
+// Action: skip
+implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
+{
+ call P2();
+}
+
+
+procedure {:checksum "P2$proc#0"} P2();
+// Action: verify
+implementation {:id "P2"} {:checksum "P2$impl#1"} P2()
+{
+ assert 2 != 2;
+}
diff --git a/Test/snapshots/Snapshots1.v2.bpl b/Test/snapshots/Snapshots1.v2.bpl
index c699631e..9d399207 100644
--- a/Test/snapshots/Snapshots1.v2.bpl
+++ b/Test/snapshots/Snapshots1.v2.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "P1$proc#0"} P1();
-// Action: verify
-implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
-{
- call P2();
-}
-
-
-procedure {:checksum "P2$proc#1"} P2();
- requires false;
-// Action: verify
-implementation {:id "P2"} {:checksum "P2$impl#1"} P2()
-{
- assert 2 != 2;
-}
+procedure {:checksum "P1$proc#0"} P1();
+// Action: verify
+implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
+{
+ call P2();
+}
+
+
+procedure {:checksum "P2$proc#1"} P2();
+ requires false;
+// Action: verify
+implementation {:id "P2"} {:checksum "P2$impl#1"} P2()
+{
+ assert 2 != 2;
+}
diff --git a/Test/snapshots/Snapshots10.v0.bpl b/Test/snapshots/Snapshots10.v0.bpl
index bdbb6b63..80471302 100644
--- a/Test/snapshots/Snapshots10.v0.bpl
+++ b/Test/snapshots/Snapshots10.v0.bpl
@@ -1,20 +1,20 @@
-procedure {:checksum "0"} M(n: int);
- requires 0 < n;
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- call O();
-
- assert 0 <= x;
-}
-
-procedure {:checksum "2"} N(n: int) returns (r: int);
- requires 0 < n;
- ensures 0 < r;
-
-procedure {:checksum "3"} O();
- ensures true;
+procedure {:checksum "0"} M(n: int);
+ requires 0 < n;
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ call O();
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "2"} N(n: int) returns (r: int);
+ requires 0 < n;
+ ensures 0 < r;
+
+procedure {:checksum "3"} O();
+ ensures true;
diff --git a/Test/snapshots/Snapshots10.v1.bpl b/Test/snapshots/Snapshots10.v1.bpl
index d4c09a5f..afc47e4c 100644
--- a/Test/snapshots/Snapshots10.v1.bpl
+++ b/Test/snapshots/Snapshots10.v1.bpl
@@ -1,21 +1,21 @@
-procedure {:checksum "0"} M(n: int);
- requires 0 < n;
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- call O();
-
- assert 0 <= x;
-}
-
-procedure {:checksum "4"} N(n: int) returns (r: int);
- requires 0 < n;
- // Change: stronger postcondition
- ensures 42 < r;
-
-procedure {:checksum "3"} O();
- ensures true;
+procedure {:checksum "0"} M(n: int);
+ requires 0 < n;
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ call O();
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "4"} N(n: int) returns (r: int);
+ requires 0 < n;
+ // Change: stronger postcondition
+ ensures 42 < r;
+
+procedure {:checksum "3"} O();
+ ensures true;
diff --git a/Test/snapshots/Snapshots11.v0.bpl b/Test/snapshots/Snapshots11.v0.bpl
index 10b4ed43..89634552 100644
--- a/Test/snapshots/Snapshots11.v0.bpl
+++ b/Test/snapshots/Snapshots11.v0.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "0"} M(n: int);
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- assert 0 <= x;
-}
-
-procedure {:checksum "2"} N(n: int) returns (r: int);
- requires 0 < n;
- ensures 0 < r;
+procedure {:checksum "0"} M(n: int);
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "2"} N(n: int) returns (r: int);
+ requires 0 < n;
+ ensures 0 < r;
diff --git a/Test/snapshots/Snapshots11.v1.bpl b/Test/snapshots/Snapshots11.v1.bpl
index 3c3ea476..a6e6c64a 100644
--- a/Test/snapshots/Snapshots11.v1.bpl
+++ b/Test/snapshots/Snapshots11.v1.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M(n: int);
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- assert 0 <= x;
-}
-
-procedure {:checksum "3"} N(n: int) returns (r: int);
- requires 0 < n;
- // Change: weaker postcondition
- ensures 0 <= r;
+procedure {:checksum "0"} M(n: int);
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "3"} N(n: int) returns (r: int);
+ requires 0 < n;
+ // Change: weaker postcondition
+ ensures 0 <= r;
diff --git a/Test/snapshots/Snapshots12.v0.bpl b/Test/snapshots/Snapshots12.v0.bpl
index da219bfd..56205ec8 100644
--- a/Test/snapshots/Snapshots12.v0.bpl
+++ b/Test/snapshots/Snapshots12.v0.bpl
@@ -1,16 +1,16 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert false;
-}
-
-procedure {:checksum "2"} N();
- ensures F();
-
-function {:checksum "3"} F() : bool
-{
- false
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "2"} N();
+ ensures F();
+
+function {:checksum "3"} F() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots12.v1.bpl b/Test/snapshots/Snapshots12.v1.bpl
index f71e3c5f..d3747c5f 100644
--- a/Test/snapshots/Snapshots12.v1.bpl
+++ b/Test/snapshots/Snapshots12.v1.bpl
@@ -1,16 +1,16 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert false;
-}
-
-procedure {:checksum "2"} N();
- ensures F();
-
-function {:checksum "4"} F() : bool
-{
- true
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "2"} N();
+ ensures F();
+
+function {:checksum "4"} F() : bool
+{
+ true
+}
diff --git a/Test/snapshots/Snapshots13.v0.bpl b/Test/snapshots/Snapshots13.v0.bpl
index 79dfe2c3..e4f80c70 100644
--- a/Test/snapshots/Snapshots13.v0.bpl
+++ b/Test/snapshots/Snapshots13.v0.bpl
@@ -1,21 +1,21 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert false;
-}
-
-procedure {:checksum "2"} N();
- ensures F() && G();
-
-function {:checksum "3"} F() : bool
-{
- true
-}
-
-function {:checksum "4"} G() : bool
-{
- false
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "2"} N();
+ ensures F() && G();
+
+function {:checksum "3"} F() : bool
+{
+ true
+}
+
+function {:checksum "4"} G() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots13.v1.bpl b/Test/snapshots/Snapshots13.v1.bpl
index a7ec6bfb..4c74d06e 100644
--- a/Test/snapshots/Snapshots13.v1.bpl
+++ b/Test/snapshots/Snapshots13.v1.bpl
@@ -1,16 +1,16 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert false;
-}
-
-procedure {:checksum "2"} N();
- ensures F();
-
-function {:checksum "3"} F() : bool
-{
- true
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "2"} N();
+ ensures F();
+
+function {:checksum "3"} F() : bool
+{
+ true
+}
diff --git a/Test/snapshots/Snapshots14.v0.bpl b/Test/snapshots/Snapshots14.v0.bpl
index 79dfe2c3..e4f80c70 100644
--- a/Test/snapshots/Snapshots14.v0.bpl
+++ b/Test/snapshots/Snapshots14.v0.bpl
@@ -1,21 +1,21 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert false;
-}
-
-procedure {:checksum "2"} N();
- ensures F() && G();
-
-function {:checksum "3"} F() : bool
-{
- true
-}
-
-function {:checksum "4"} G() : bool
-{
- false
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "2"} N();
+ ensures F() && G();
+
+function {:checksum "3"} F() : bool
+{
+ true
+}
+
+function {:checksum "4"} G() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots14.v1.bpl b/Test/snapshots/Snapshots14.v1.bpl
index b33c3430..b8c6c061 100644
--- a/Test/snapshots/Snapshots14.v1.bpl
+++ b/Test/snapshots/Snapshots14.v1.bpl
@@ -1,21 +1,21 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert false;
-}
-
-procedure {:checksum "2"} N();
- ensures F();
-
-function {:checksum "3"} F() : bool
-{
- true
-}
-
-function {:checksum "4"} G() : bool
-{
- false
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "2"} N();
+ ensures F();
+
+function {:checksum "3"} F() : bool
+{
+ true
+}
+
+function {:checksum "4"} G() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots15.v0.bpl b/Test/snapshots/Snapshots15.v0.bpl
index a947157d..e3dfb3f3 100644
--- a/Test/snapshots/Snapshots15.v0.bpl
+++ b/Test/snapshots/Snapshots15.v0.bpl
@@ -1,17 +1,17 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- assert true;
-
- call N();
-
- assert true;
-
- call N();
-
- assert false;
-}
-
-procedure {:checksum "2"} N();
- ensures false;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ assert true;
+
+ call N();
+
+ assert true;
+
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "2"} N();
+ ensures false;
diff --git a/Test/snapshots/Snapshots15.v1.bpl b/Test/snapshots/Snapshots15.v1.bpl
index a797ab6c..94c3ec4d 100644
--- a/Test/snapshots/Snapshots15.v1.bpl
+++ b/Test/snapshots/Snapshots15.v1.bpl
@@ -1,17 +1,17 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- assert true;
-
- call N();
-
- assert true;
-
- call N();
-
- assert false;
-}
-
-procedure {:checksum "3"} N();
- ensures true;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ assert true;
+
+ call N();
+
+ assert true;
+
+ call N();
+
+ assert false;
+}
+
+procedure {:checksum "3"} N();
+ ensures true;
diff --git a/Test/snapshots/Snapshots16.v0.bpl b/Test/snapshots/Snapshots16.v0.bpl
index 45cb4a76..3ab51400 100644
--- a/Test/snapshots/Snapshots16.v0.bpl
+++ b/Test/snapshots/Snapshots16.v0.bpl
@@ -1,15 +1,15 @@
-function {:checksum "1"} PlusOne(n: int) : int
-{
- n + 1
-}
-
-function {:checksum "0"} F(n: int) : int;
-
-axiom (forall n: int :: { F(n) } F(n) == PlusOne(n));
-
-procedure {:checksum "2"} M();
-
-implementation {:id "M"} {:checksum "3"} M()
-{
- assert F(0) == 1;
-}
+function {:checksum "1"} PlusOne(n: int) : int
+{
+ n + 1
+}
+
+function {:checksum "0"} F(n: int) : int;
+
+axiom (forall n: int :: { F(n) } F(n) == PlusOne(n));
+
+procedure {:checksum "2"} M();
+
+implementation {:id "M"} {:checksum "3"} M()
+{
+ assert F(0) == 1;
+}
diff --git a/Test/snapshots/Snapshots16.v1.bpl b/Test/snapshots/Snapshots16.v1.bpl
index 4d7cc354..ab6a8ace 100644
--- a/Test/snapshots/Snapshots16.v1.bpl
+++ b/Test/snapshots/Snapshots16.v1.bpl
@@ -1,15 +1,15 @@
-function {:checksum "4"} PlusOne(n: int) : int
-{
- n + 2
-}
-
-function {:checksum "0"} F(n: int) : int;
-
-axiom (forall n: int :: { F(n) } F(n) == PlusOne(n));
-
-procedure {:checksum "2"} M();
-
-implementation {:id "M"} {:checksum "3"} M()
-{
- assert F(0) == 1; // error
-}
+function {:checksum "4"} PlusOne(n: int) : int
+{
+ n + 2
+}
+
+function {:checksum "0"} F(n: int) : int;
+
+axiom (forall n: int :: { F(n) } F(n) == PlusOne(n));
+
+procedure {:checksum "2"} M();
+
+implementation {:id "M"} {:checksum "3"} M()
+{
+ assert F(0) == 1; // error
+}
diff --git a/Test/snapshots/Snapshots17.v0.bpl b/Test/snapshots/Snapshots17.v0.bpl
index 58ef53e7..55992c79 100644
--- a/Test/snapshots/Snapshots17.v0.bpl
+++ b/Test/snapshots/Snapshots17.v0.bpl
@@ -1,32 +1,32 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- var x: int;
-
- x := 0;
- while (*)
- {
- while (*)
- {
- assert true;
-
- call N();
-
- call N();
-
- x := x + 1;
-
- assert x == 1;
- }
-
- call N();
-
- assert false;
- }
-
- assert true;
-}
-
-procedure {:checksum "2"} N();
- ensures false;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ var x: int;
+
+ x := 0;
+ while (*)
+ {
+ while (*)
+ {
+ assert true;
+
+ call N();
+
+ call N();
+
+ x := x + 1;
+
+ assert x == 1;
+ }
+
+ call N();
+
+ assert false;
+ }
+
+ assert true;
+}
+
+procedure {:checksum "2"} N();
+ ensures false;
diff --git a/Test/snapshots/Snapshots17.v1.bpl b/Test/snapshots/Snapshots17.v1.bpl
index 4d22ab3d..66d0341a 100644
--- a/Test/snapshots/Snapshots17.v1.bpl
+++ b/Test/snapshots/Snapshots17.v1.bpl
@@ -1,32 +1,32 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- var x: int;
-
- x := 0;
- while (*)
- {
- while (*)
- {
- assert true;
-
- call N();
-
- call N();
-
- x := x + 1;
-
- assert x == 1; // error
- }
-
- call N();
-
- assert false; // error
- }
-
- assert true;
-}
-
-procedure {:checksum "3"} N();
- ensures true;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ var x: int;
+
+ x := 0;
+ while (*)
+ {
+ while (*)
+ {
+ assert true;
+
+ call N();
+
+ call N();
+
+ x := x + 1;
+
+ assert x == 1; // error
+ }
+
+ call N();
+
+ assert false; // error
+ }
+
+ assert true;
+}
+
+procedure {:checksum "3"} N();
+ ensures true;
diff --git a/Test/snapshots/Snapshots18.v0.bpl b/Test/snapshots/Snapshots18.v0.bpl
index d37d9546..750c6891 100644
--- a/Test/snapshots/Snapshots18.v0.bpl
+++ b/Test/snapshots/Snapshots18.v0.bpl
@@ -1,24 +1,24 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- while (true)
- {
- assert 0 == 0;
-
- call N();
- call N();
-
- if (*)
- {
- break;
- }
-
- assert 1 != 1;
- }
-
- assert 2 != 2;
-}
-
-procedure {:checksum "2"} N();
- ensures false;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ while (true)
+ {
+ assert 0 == 0;
+
+ call N();
+ call N();
+
+ if (*)
+ {
+ break;
+ }
+
+ assert 1 != 1;
+ }
+
+ assert 2 != 2;
+}
+
+procedure {:checksum "2"} N();
+ ensures false;
diff --git a/Test/snapshots/Snapshots18.v1.bpl b/Test/snapshots/Snapshots18.v1.bpl
index 76f8c597..262b5e4f 100644
--- a/Test/snapshots/Snapshots18.v1.bpl
+++ b/Test/snapshots/Snapshots18.v1.bpl
@@ -1,24 +1,24 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- while (true)
- {
- assert 0 == 0;
-
- call N();
- call N();
-
- if (*)
- {
- break;
- }
-
- assert 1 != 1; // error
- }
-
- assert 2 != 2; // error
-}
-
-procedure {:checksum "3"} N();
- ensures true;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ while (true)
+ {
+ assert 0 == 0;
+
+ call N();
+ call N();
+
+ if (*)
+ {
+ break;
+ }
+
+ assert 1 != 1; // error
+ }
+
+ assert 2 != 2; // error
+}
+
+procedure {:checksum "3"} N();
+ ensures true;
diff --git a/Test/snapshots/Snapshots19.v0.bpl b/Test/snapshots/Snapshots19.v0.bpl
index 935ee793..fb8f4524 100644
--- a/Test/snapshots/Snapshots19.v0.bpl
+++ b/Test/snapshots/Snapshots19.v0.bpl
@@ -1,11 +1,11 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert 1 != 1;
-}
-
-procedure {:checksum "2"} N();
- requires 2 == 2;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert 1 != 1;
+}
+
+procedure {:checksum "2"} N();
+ requires 2 == 2;
diff --git a/Test/snapshots/Snapshots19.v1.bpl b/Test/snapshots/Snapshots19.v1.bpl
index 2afdd641..9e959b68 100644
--- a/Test/snapshots/Snapshots19.v1.bpl
+++ b/Test/snapshots/Snapshots19.v1.bpl
@@ -1,11 +1,11 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- call N();
-
- assert 1 != 1;
-}
-
-procedure {:checksum "3"} N();
- requires 2 == 2;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ call N();
+
+ assert 1 != 1;
+}
+
+procedure {:checksum "3"} N();
+ requires 2 == 2;
diff --git a/Test/snapshots/Snapshots2.v0.bpl b/Test/snapshots/Snapshots2.v0.bpl
index 91f05a0d..061f2c6c 100644
--- a/Test/snapshots/Snapshots2.v0.bpl
+++ b/Test/snapshots/Snapshots2.v0.bpl
@@ -1,12 +1,12 @@
-procedure {:checksum "P0$proc#0"} P0();
-// Action: verify
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
- call P0();
-}
-
-
-function F0() : bool
-{
- true
-}
+procedure {:checksum "P0$proc#0"} P0();
+// Action: verify
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+ call P0();
+}
+
+
+function F0() : bool
+{
+ true
+}
diff --git a/Test/snapshots/Snapshots2.v1.bpl b/Test/snapshots/Snapshots2.v1.bpl
index 1dec4954..93c0e5d8 100644
--- a/Test/snapshots/Snapshots2.v1.bpl
+++ b/Test/snapshots/Snapshots2.v1.bpl
@@ -1,12 +1,12 @@
-procedure {:checksum "P0$proc#0"} P0();
-// Action: skip
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
- call P0();
-}
-
-
-function F0() : bool
-{
- true
-}
+procedure {:checksum "P0$proc#0"} P0();
+// Action: skip
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+ call P0();
+}
+
+
+function F0() : bool
+{
+ true
+}
diff --git a/Test/snapshots/Snapshots2.v2.bpl b/Test/snapshots/Snapshots2.v2.bpl
index 567191d3..88865e75 100644
--- a/Test/snapshots/Snapshots2.v2.bpl
+++ b/Test/snapshots/Snapshots2.v2.bpl
@@ -1,13 +1,13 @@
-procedure {:checksum "P0$proc#2"} P0();
-requires F0();
-// Action: verify (procedure changed)
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
- call P0();
-}
-
-
-function {:checksum "F0#0"} F0() : bool
-{
- true
-}
+procedure {:checksum "P0$proc#2"} P0();
+requires F0();
+// Action: verify (procedure changed)
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+ call P0();
+}
+
+
+function {:checksum "F0#0"} F0() : bool
+{
+ true
+}
diff --git a/Test/snapshots/Snapshots2.v3.bpl b/Test/snapshots/Snapshots2.v3.bpl
index 7f6c4a82..fd06e335 100644
--- a/Test/snapshots/Snapshots2.v3.bpl
+++ b/Test/snapshots/Snapshots2.v3.bpl
@@ -1,13 +1,13 @@
-procedure {:checksum "P0$proc#2"} P0();
-requires F0();
-// Action: verify (function changed)
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
- call P0();
-}
-
-
-function {:checksum "F0#1"} F0() : bool
-{
- false
-}
+procedure {:checksum "P0$proc#2"} P0();
+requires F0();
+// Action: verify (function changed)
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+ call P0();
+}
+
+
+function {:checksum "F0#1"} F0() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots2.v4.bpl b/Test/snapshots/Snapshots2.v4.bpl
index abbf5e86..eb183a1d 100644
--- a/Test/snapshots/Snapshots2.v4.bpl
+++ b/Test/snapshots/Snapshots2.v4.bpl
@@ -1,13 +1,13 @@
-procedure {:checksum "P0$proc#2"} P0();
-requires F0();
-// Action: skip
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
- call P0();
-}
-
-
-function {:checksum "F0#1"} F0() : bool
-{
- false
-}
+procedure {:checksum "P0$proc#2"} P0();
+requires F0();
+// Action: skip
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+ call P0();
+}
+
+
+function {:checksum "F0#1"} F0() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots2.v5.bpl b/Test/snapshots/Snapshots2.v5.bpl
index 55d08527..ea2904e9 100644
--- a/Test/snapshots/Snapshots2.v5.bpl
+++ b/Test/snapshots/Snapshots2.v5.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "P0$proc#5"} P0();
-requires F0();
-ensures F0();
-// Action: verify (procedure changed)
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
- call P0();
-}
-
-
-function {:checksum "F0#1"} F0() : bool
-{
- false
-}
+procedure {:checksum "P0$proc#5"} P0();
+requires F0();
+ensures F0();
+// Action: verify (procedure changed)
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+ call P0();
+}
+
+
+function {:checksum "F0#1"} F0() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots20.v0.bpl b/Test/snapshots/Snapshots20.v0.bpl
index 54934a05..d7544ec5 100644
--- a/Test/snapshots/Snapshots20.v0.bpl
+++ b/Test/snapshots/Snapshots20.v0.bpl
@@ -1,20 +1,20 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- if (*)
- {
- call N();
-
- assert 1 != 1;
- }
- else
- {
- assert 2 != 2; // error
- }
-
- assert 3 != 3;
-}
-
-procedure {:checksum "2"} N();
- ensures 0 != 0;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ if (*)
+ {
+ call N();
+
+ assert 1 != 1;
+ }
+ else
+ {
+ assert 2 != 2; // error
+ }
+
+ assert 3 != 3;
+}
+
+procedure {:checksum "2"} N();
+ ensures 0 != 0;
diff --git a/Test/snapshots/Snapshots20.v1.bpl b/Test/snapshots/Snapshots20.v1.bpl
index 04fd0a6e..7e4970e7 100644
--- a/Test/snapshots/Snapshots20.v1.bpl
+++ b/Test/snapshots/Snapshots20.v1.bpl
@@ -1,20 +1,20 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- if (*)
- {
- call N();
-
- assert 1 != 1; // error
- }
- else
- {
- assert 2 != 2; // error
- }
-
- assert 3 != 3;
-}
-
-procedure {:checksum "3"} N();
- ensures 0 == 0;
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ if (*)
+ {
+ call N();
+
+ assert 1 != 1; // error
+ }
+ else
+ {
+ assert 2 != 2; // error
+ }
+
+ assert 3 != 3;
+}
+
+procedure {:checksum "3"} N();
+ ensures 0 == 0;
diff --git a/Test/snapshots/Snapshots21.v0.bpl b/Test/snapshots/Snapshots21.v0.bpl
index 4a4080f5..ef2c99eb 100644
--- a/Test/snapshots/Snapshots21.v0.bpl
+++ b/Test/snapshots/Snapshots21.v0.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- if (*)
- {
- assert 1 != 1; // error
- }
- else
- {
- assert 2 != 2; // error
- }
-
- assert 3 != 3;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ if (*)
+ {
+ assert 1 != 1; // error
+ }
+ else
+ {
+ assert 2 != 2; // error
+ }
+
+ assert 3 != 3;
+}
diff --git a/Test/snapshots/Snapshots21.v1.bpl b/Test/snapshots/Snapshots21.v1.bpl
index ef51e5ac..e1fec0ed 100644
--- a/Test/snapshots/Snapshots21.v1.bpl
+++ b/Test/snapshots/Snapshots21.v1.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "2"} M()
-{
- if (*)
- {
- assert 1 == 1;
- }
- else
- {
- assert 2 != 2; // error
- }
-
- assert 3 != 3; // error
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "2"} M()
+{
+ if (*)
+ {
+ assert 1 == 1;
+ }
+ else
+ {
+ assert 2 != 2; // error
+ }
+
+ assert 3 != 3; // error
+}
diff --git a/Test/snapshots/Snapshots22.v0.bpl b/Test/snapshots/Snapshots22.v0.bpl
index c2be13de..94968c33 100644
--- a/Test/snapshots/Snapshots22.v0.bpl
+++ b/Test/snapshots/Snapshots22.v0.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- if (*)
- {
- assert 1 != 1; // error
- }
- else
- {
- assert 2 == 2;
- }
-
- assert 3 == 3;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ if (*)
+ {
+ assert 1 != 1; // error
+ }
+ else
+ {
+ assert 2 == 2;
+ }
+
+ assert 3 == 3;
+}
diff --git a/Test/snapshots/Snapshots22.v1.bpl b/Test/snapshots/Snapshots22.v1.bpl
index 9d43f2c2..78b5da9a 100644
--- a/Test/snapshots/Snapshots22.v1.bpl
+++ b/Test/snapshots/Snapshots22.v1.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "2"} M()
-{
- if (*)
- {
- assert 1 == 1;
- }
- else
- {
- assert 2 == 2;
- }
-
- assert 3 == 3;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "2"} M()
+{
+ if (*)
+ {
+ assert 1 == 1;
+ }
+ else
+ {
+ assert 2 == 2;
+ }
+
+ assert 3 == 3;
+}
diff --git a/Test/snapshots/Snapshots23.v0.bpl b/Test/snapshots/Snapshots23.v0.bpl
index 8f637d19..740afa6a 100644
--- a/Test/snapshots/Snapshots23.v0.bpl
+++ b/Test/snapshots/Snapshots23.v0.bpl
@@ -1,22 +1,22 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- if (*)
- {
- assert 1 != 1; // error
- }
- else
- {
- assert 2 == 2;
- }
-
- assert 3 == 3;
-}
-
-
-procedure {:checksum "2"} N();
-
-implementation {:id "N"} {:checksum "3"} N()
-{
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ if (*)
+ {
+ assert 1 != 1; // error
+ }
+ else
+ {
+ assert 2 == 2;
+ }
+
+ assert 3 == 3;
+}
+
+
+procedure {:checksum "2"} N();
+
+implementation {:id "N"} {:checksum "3"} N()
+{
+}
diff --git a/Test/snapshots/Snapshots23.v1.bpl b/Test/snapshots/Snapshots23.v1.bpl
index e13116dc..9e57a201 100644
--- a/Test/snapshots/Snapshots23.v1.bpl
+++ b/Test/snapshots/Snapshots23.v1.bpl
@@ -1,23 +1,23 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- if (*)
- {
- assert 1 != 1; // error
- }
- else
- {
- assert 2 == 2;
- }
-
- assert 3 == 3;
-}
-
-
-procedure {:checksum "2"} N();
-
-implementation {:id "N"} {:checksum "4"} N()
-{
- assert 4 == 4;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ if (*)
+ {
+ assert 1 != 1; // error
+ }
+ else
+ {
+ assert 2 == 2;
+ }
+
+ assert 3 == 3;
+}
+
+
+procedure {:checksum "2"} N();
+
+implementation {:id "N"} {:checksum "4"} N()
+{
+ assert 4 == 4;
+}
diff --git a/Test/snapshots/Snapshots23.v2.bpl b/Test/snapshots/Snapshots23.v2.bpl
index 144a0922..e076b618 100644
--- a/Test/snapshots/Snapshots23.v2.bpl
+++ b/Test/snapshots/Snapshots23.v2.bpl
@@ -1,22 +1,22 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "5"} M()
-{
- if (*)
- {
- // Don't remove this comment.
- assert 1 != 1; // error
- }
- else
- {
- assert 2 == 2;
- }
-}
-
-
-procedure {:checksum "2"} N();
-
-implementation {:id "N"} {:checksum "4"} N()
-{
- assert 4 == 4;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "5"} M()
+{
+ if (*)
+ {
+ // Don't remove this comment.
+ assert 1 != 1; // error
+ }
+ else
+ {
+ assert 2 == 2;
+ }
+}
+
+
+procedure {:checksum "2"} N();
+
+implementation {:id "N"} {:checksum "4"} N()
+{
+ assert 4 == 4;
+}
diff --git a/Test/snapshots/Snapshots24.v0.bpl b/Test/snapshots/Snapshots24.v0.bpl
index 1289399b..5d038779 100644
--- a/Test/snapshots/Snapshots24.v0.bpl
+++ b/Test/snapshots/Snapshots24.v0.bpl
@@ -1,25 +1,25 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- if (*)
- {
- assert {:subsumption 0} 1 != 1; // error
- }
- else if (*)
- {
- assert {:subsumption 1} 5 != 5; // error
- }
- else if (*)
- {
- assert {:subsumption 2} 6 != 6; // error
- }
- else
- {
- assert {:subsumption 1} 2 == 2;
- assert {:subsumption 2} 4 == 4;
- assert 5 == 5;
- }
-
- assert {:subsumption 0} 3 == 3;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ if (*)
+ {
+ assert {:subsumption 0} 1 != 1; // error
+ }
+ else if (*)
+ {
+ assert {:subsumption 1} 5 != 5; // error
+ }
+ else if (*)
+ {
+ assert {:subsumption 2} 6 != 6; // error
+ }
+ else
+ {
+ assert {:subsumption 1} 2 == 2;
+ assert {:subsumption 2} 4 == 4;
+ assert 5 == 5;
+ }
+
+ assert {:subsumption 0} 3 == 3;
+}
diff --git a/Test/snapshots/Snapshots24.v1.bpl b/Test/snapshots/Snapshots24.v1.bpl
index 00d65961..382dc6dc 100644
--- a/Test/snapshots/Snapshots24.v1.bpl
+++ b/Test/snapshots/Snapshots24.v1.bpl
@@ -1,25 +1,25 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "2"} M()
-{
- if (*)
- {
- assert {:subsumption 0} 1 == 1;
- }
- else if (*)
- {
- assert {:subsumption 1} 5 == 5;
- }
- else if (*)
- {
- assert {:subsumption 2} 6 != 6; // error
- }
- else
- {
- assert {:subsumption 1} 2 == 2;
- assert {:subsumption 2} 4 == 4;
- assert 5 == 5;
- }
-
- assert {:subsumption 0} 3 == 3;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "2"} M()
+{
+ if (*)
+ {
+ assert {:subsumption 0} 1 == 1;
+ }
+ else if (*)
+ {
+ assert {:subsumption 1} 5 == 5;
+ }
+ else if (*)
+ {
+ assert {:subsumption 2} 6 != 6; // error
+ }
+ else
+ {
+ assert {:subsumption 1} 2 == 2;
+ assert {:subsumption 2} 4 == 4;
+ assert 5 == 5;
+ }
+
+ assert {:subsumption 0} 3 == 3;
+}
diff --git a/Test/snapshots/Snapshots25.v0.bpl b/Test/snapshots/Snapshots25.v0.bpl
index 5276f1dd..514ba3fa 100644
--- a/Test/snapshots/Snapshots25.v0.bpl
+++ b/Test/snapshots/Snapshots25.v0.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- var x: int;
-
- while (*)
- {
- x := 0;
- }
-
- assert 0 == 0;
- assert x != x;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ var x: int;
+
+ while (*)
+ {
+ x := 0;
+ }
+
+ assert 0 == 0;
+ assert x != x;
+}
diff --git a/Test/snapshots/Snapshots25.v1.bpl b/Test/snapshots/Snapshots25.v1.bpl
index fb735930..1cf2dc6e 100644
--- a/Test/snapshots/Snapshots25.v1.bpl
+++ b/Test/snapshots/Snapshots25.v1.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "2"} M()
-{
- var x: int;
-
- while (*)
- {
- x := 1;
- }
-
- assert 0 == 0;
- assert x != x;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "2"} M()
+{
+ var x: int;
+
+ while (*)
+ {
+ x := 1;
+ }
+
+ assert 0 == 0;
+ assert x != x;
+}
diff --git a/Test/snapshots/Snapshots26.v0.bpl b/Test/snapshots/Snapshots26.v0.bpl
index 5276f1dd..514ba3fa 100644
--- a/Test/snapshots/Snapshots26.v0.bpl
+++ b/Test/snapshots/Snapshots26.v0.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- var x: int;
-
- while (*)
- {
- x := 0;
- }
-
- assert 0 == 0;
- assert x != x;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ var x: int;
+
+ while (*)
+ {
+ x := 0;
+ }
+
+ assert 0 == 0;
+ assert x != x;
+}
diff --git a/Test/snapshots/Snapshots26.v1.bpl b/Test/snapshots/Snapshots26.v1.bpl
index 7c2e3292..c17596c7 100644
--- a/Test/snapshots/Snapshots26.v1.bpl
+++ b/Test/snapshots/Snapshots26.v1.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "2"} M()
-{
- var x: int;
-
- while (*)
- {
- x := 0;
- x := x + 1;
- }
-
- assert 0 == 0;
- assert x != x;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "2"} M()
+{
+ var x: int;
+
+ while (*)
+ {
+ x := 0;
+ x := x + 1;
+ }
+
+ assert 0 == 0;
+ assert x != x;
+}
diff --git a/Test/snapshots/Snapshots27.v0.bpl b/Test/snapshots/Snapshots27.v0.bpl
index 5276f1dd..514ba3fa 100644
--- a/Test/snapshots/Snapshots27.v0.bpl
+++ b/Test/snapshots/Snapshots27.v0.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- var x: int;
-
- while (*)
- {
- x := 0;
- }
-
- assert 0 == 0;
- assert x != x;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ var x: int;
+
+ while (*)
+ {
+ x := 0;
+ }
+
+ assert 0 == 0;
+ assert x != x;
+}
diff --git a/Test/snapshots/Snapshots27.v1.bpl b/Test/snapshots/Snapshots27.v1.bpl
index 4d60e149..7221721d 100644
--- a/Test/snapshots/Snapshots27.v1.bpl
+++ b/Test/snapshots/Snapshots27.v1.bpl
@@ -1,16 +1,16 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "2"} M()
-{
- var x: int;
- var y: int;
-
- while (*)
- {
- x := 0;
- y := 0;
- }
-
- assert 0 == 0;
- assert x != x;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "2"} M()
+{
+ var x: int;
+ var y: int;
+
+ while (*)
+ {
+ x := 0;
+ y := 0;
+ }
+
+ assert 0 == 0;
+ assert x != x;
+}
diff --git a/Test/snapshots/Snapshots28.v0.bpl b/Test/snapshots/Snapshots28.v0.bpl
index b74b5013..8bce51fa 100644
--- a/Test/snapshots/Snapshots28.v0.bpl
+++ b/Test/snapshots/Snapshots28.v0.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- var x: int;
-
- assume x == 0;
-
- while (*)
- {
- }
-
- assert 0 == 0;
- assert x == 0;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ var x: int;
+
+ assume x == 0;
+
+ while (*)
+ {
+ }
+
+ assert 0 == 0;
+ assert x == 0;
+}
diff --git a/Test/snapshots/Snapshots28.v1.bpl b/Test/snapshots/Snapshots28.v1.bpl
index 0312b6a6..205515f5 100644
--- a/Test/snapshots/Snapshots28.v1.bpl
+++ b/Test/snapshots/Snapshots28.v1.bpl
@@ -1,16 +1,16 @@
-procedure {:checksum "0"} M();
-
-implementation {:id "M"} {:checksum "2"} M()
-{
- var x: int;
-
- assume x == 0;
-
- while (*)
- {
- x := 1;
- }
-
- assert 0 == 0;
- assert x == 0;
-}
+procedure {:checksum "0"} M();
+
+implementation {:id "M"} {:checksum "2"} M()
+{
+ var x: int;
+
+ assume x == 0;
+
+ while (*)
+ {
+ x := 1;
+ }
+
+ assert 0 == 0;
+ assert x == 0;
+}
diff --git a/Test/snapshots/Snapshots29.v0.bpl b/Test/snapshots/Snapshots29.v0.bpl
index f4087f90..840aed82 100644
--- a/Test/snapshots/Snapshots29.v0.bpl
+++ b/Test/snapshots/Snapshots29.v0.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} P();
-
-implementation {:id "P"} {:checksum "1"} P()
-{
- var i: int;
-
- i := 0;
-
- while (*)
- {
- i := 0;
- }
-
- assert i == 0;
-}
+procedure {:checksum "0"} P();
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ var i: int;
+
+ i := 0;
+
+ while (*)
+ {
+ i := 0;
+ }
+
+ assert i == 0;
+}
diff --git a/Test/snapshots/Snapshots29.v1.bpl b/Test/snapshots/Snapshots29.v1.bpl
index 5211f832..59a607ea 100644
--- a/Test/snapshots/Snapshots29.v1.bpl
+++ b/Test/snapshots/Snapshots29.v1.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} P();
-
-implementation {:id "P"} {:checksum "2"} P()
-{
- var i: int;
-
- i := 0;
-
- while (*)
- {
- i := 1;
- }
-
- assert i == 0;
-}
+procedure {:checksum "0"} P();
+
+implementation {:id "P"} {:checksum "2"} P()
+{
+ var i: int;
+
+ i := 0;
+
+ while (*)
+ {
+ i := 1;
+ }
+
+ assert i == 0;
+}
diff --git a/Test/snapshots/Snapshots3.v0.bpl b/Test/snapshots/Snapshots3.v0.bpl
index 7ab7aa5c..118f28d7 100644
--- a/Test/snapshots/Snapshots3.v0.bpl
+++ b/Test/snapshots/Snapshots3.v0.bpl
@@ -1,18 +1,18 @@
-procedure {:checksum "P0$proc#0"} P0();
-ensures G();
-// Action: verify
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
-}
-
-
-function {:checksum "F#0"} F() : bool
-{
- true
-}
-
-
-function {:checksum "G#0"} G() : bool
-{
- F()
-}
+procedure {:checksum "P0$proc#0"} P0();
+ensures G();
+// Action: verify
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+}
+
+
+function {:checksum "F#0"} F() : bool
+{
+ true
+}
+
+
+function {:checksum "G#0"} G() : bool
+{
+ F()
+}
diff --git a/Test/snapshots/Snapshots3.v1.bpl b/Test/snapshots/Snapshots3.v1.bpl
index 5eb57e78..a764c773 100644
--- a/Test/snapshots/Snapshots3.v1.bpl
+++ b/Test/snapshots/Snapshots3.v1.bpl
@@ -1,18 +1,18 @@
-procedure {:checksum "P0$proc#0"} P0();
-ensures G();
-// Action: verify
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
-}
-
-
-function {:checksum "F#1"} F() : bool
-{
- false
-}
-
-
-function {:checksum "G#0"} G() : bool
-{
- F()
-}
+procedure {:checksum "P0$proc#0"} P0();
+ensures G();
+// Action: verify
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+}
+
+
+function {:checksum "F#1"} F() : bool
+{
+ false
+}
+
+
+function {:checksum "G#0"} G() : bool
+{
+ F()
+}
diff --git a/Test/snapshots/Snapshots30.v0.bpl b/Test/snapshots/Snapshots30.v0.bpl
index 459c4007..d4eb4502 100644
--- a/Test/snapshots/Snapshots30.v0.bpl
+++ b/Test/snapshots/Snapshots30.v0.bpl
@@ -1,13 +1,13 @@
-procedure {:checksum "0"} P();
-
-implementation {:id "P"} {:checksum "1"} P()
-{
- call Q();
-}
-
-procedure {:checksum "2"} Q();
- requires 0 == 0;
- requires 1 == 1;
- requires 2 != 2;
- requires 3 == 3;
- requires 4 == 4;
+procedure {:checksum "0"} P();
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ call Q();
+}
+
+procedure {:checksum "2"} Q();
+ requires 0 == 0;
+ requires 1 == 1;
+ requires 2 != 2;
+ requires 3 == 3;
+ requires 4 == 4;
diff --git a/Test/snapshots/Snapshots30.v1.bpl b/Test/snapshots/Snapshots30.v1.bpl
index 089a1939..dbf2ec72 100644
--- a/Test/snapshots/Snapshots30.v1.bpl
+++ b/Test/snapshots/Snapshots30.v1.bpl
@@ -1,14 +1,14 @@
-procedure {:checksum "0"} P();
-
-implementation {:id "P"} {:checksum "2"} P()
-{
- call Q();
- assert 5 == 5;
-}
-
-procedure {:checksum "2"} Q();
- requires 0 == 0;
- requires 1 == 1;
- requires 2 != 2;
- requires 3 == 3;
- requires 4 == 4;
+procedure {:checksum "0"} P();
+
+implementation {:id "P"} {:checksum "2"} P()
+{
+ call Q();
+ assert 5 == 5;
+}
+
+procedure {:checksum "2"} Q();
+ requires 0 == 0;
+ requires 1 == 1;
+ requires 2 != 2;
+ requires 3 == 3;
+ requires 4 == 4;
diff --git a/Test/snapshots/Snapshots31.v0.bpl b/Test/snapshots/Snapshots31.v0.bpl
index 845a6cef..df8bbcbb 100644
--- a/Test/snapshots/Snapshots31.v0.bpl
+++ b/Test/snapshots/Snapshots31.v0.bpl
@@ -1,15 +1,15 @@
-var g: int;
-
-procedure {:checksum "0"} P();
- requires g == 0;
- modifies g;
-
-implementation {:id "P"} {:checksum "1"} P()
-{
- call Q();
- assert 0 < g;
-}
-
-procedure {:checksum "2"} Q();
- modifies g;
- ensures old(g) < g;
+var g: int;
+
+procedure {:checksum "0"} P();
+ requires g == 0;
+ modifies g;
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ call Q();
+ assert 0 < g;
+}
+
+procedure {:checksum "2"} Q();
+ modifies g;
+ ensures old(g) < g;
diff --git a/Test/snapshots/Snapshots31.v1.bpl b/Test/snapshots/Snapshots31.v1.bpl
index a3b37168..26469d83 100644
--- a/Test/snapshots/Snapshots31.v1.bpl
+++ b/Test/snapshots/Snapshots31.v1.bpl
@@ -1,14 +1,14 @@
-var g: int;
-
-procedure {:checksum "0"} P();
- requires g == 0;
- modifies g;
-
-implementation {:id "P"} {:checksum "1"} P()
-{
- call Q();
- assert 0 < g;
-}
-
-procedure {:checksum "3"} Q();
- modifies g;
+var g: int;
+
+procedure {:checksum "0"} P();
+ requires g == 0;
+ modifies g;
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ call Q();
+ assert 0 < g;
+}
+
+procedure {:checksum "3"} Q();
+ modifies g;
diff --git a/Test/snapshots/Snapshots32.v0.bpl b/Test/snapshots/Snapshots32.v0.bpl
index 845a6cef..df8bbcbb 100644
--- a/Test/snapshots/Snapshots32.v0.bpl
+++ b/Test/snapshots/Snapshots32.v0.bpl
@@ -1,15 +1,15 @@
-var g: int;
-
-procedure {:checksum "0"} P();
- requires g == 0;
- modifies g;
-
-implementation {:id "P"} {:checksum "1"} P()
-{
- call Q();
- assert 0 < g;
-}
-
-procedure {:checksum "2"} Q();
- modifies g;
- ensures old(g) < g;
+var g: int;
+
+procedure {:checksum "0"} P();
+ requires g == 0;
+ modifies g;
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ call Q();
+ assert 0 < g;
+}
+
+procedure {:checksum "2"} Q();
+ modifies g;
+ ensures old(g) < g;
diff --git a/Test/snapshots/Snapshots32.v1.bpl b/Test/snapshots/Snapshots32.v1.bpl
index cbffe891..c0af5fb9 100644
--- a/Test/snapshots/Snapshots32.v1.bpl
+++ b/Test/snapshots/Snapshots32.v1.bpl
@@ -1,12 +1,12 @@
-var g: int;
-
-procedure {:checksum "0"} P();
- requires g == 0;
-
-implementation {:id "P"} {:checksum "1"} P()
-{
- call Q();
- assert 0 < g;
-}
-
-procedure {:checksum "3"} Q();
+var g: int;
+
+procedure {:checksum "0"} P();
+ requires g == 0;
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ call Q();
+ assert 0 < g;
+}
+
+procedure {:checksum "3"} Q();
diff --git a/Test/snapshots/Snapshots33.v0.bpl b/Test/snapshots/Snapshots33.v0.bpl
index 845a6cef..df8bbcbb 100644
--- a/Test/snapshots/Snapshots33.v0.bpl
+++ b/Test/snapshots/Snapshots33.v0.bpl
@@ -1,15 +1,15 @@
-var g: int;
-
-procedure {:checksum "0"} P();
- requires g == 0;
- modifies g;
-
-implementation {:id "P"} {:checksum "1"} P()
-{
- call Q();
- assert 0 < g;
-}
-
-procedure {:checksum "2"} Q();
- modifies g;
- ensures old(g) < g;
+var g: int;
+
+procedure {:checksum "0"} P();
+ requires g == 0;
+ modifies g;
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ call Q();
+ assert 0 < g;
+}
+
+procedure {:checksum "2"} Q();
+ modifies g;
+ ensures old(g) < g;
diff --git a/Test/snapshots/Snapshots33.v1.bpl b/Test/snapshots/Snapshots33.v1.bpl
index 1c6d6dbf..3cc1de13 100644
--- a/Test/snapshots/Snapshots33.v1.bpl
+++ b/Test/snapshots/Snapshots33.v1.bpl
@@ -1,8 +1,8 @@
-procedure {:checksum "5"} P();
-
-implementation {:id "P"} {:checksum "4"} P()
-{
- call Q();
-}
-
-procedure {:checksum "3"} Q();
+procedure {:checksum "5"} P();
+
+implementation {:id "P"} {:checksum "4"} P()
+{
+ call Q();
+}
+
+procedure {:checksum "3"} Q();
diff --git a/Test/snapshots/Snapshots34.v0.bpl b/Test/snapshots/Snapshots34.v0.bpl
new file mode 100644
index 00000000..5a996f40
--- /dev/null
+++ b/Test/snapshots/Snapshots34.v0.bpl
@@ -0,0 +1,7 @@
+procedure {:checksum "0"} P();
+ requires 0 != 0;
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ assert 1 != 1;
+}
diff --git a/Test/snapshots/Snapshots34.v1.bpl b/Test/snapshots/Snapshots34.v1.bpl
new file mode 100644
index 00000000..401b4f9e
--- /dev/null
+++ b/Test/snapshots/Snapshots34.v1.bpl
@@ -0,0 +1,6 @@
+procedure {:checksum "2"} P();
+
+implementation {:id "P"} {:checksum "1"} P()
+{
+ assert 1 != 1;
+}
diff --git a/Test/snapshots/Snapshots35.v0.bpl b/Test/snapshots/Snapshots35.v0.bpl
new file mode 100644
index 00000000..6377edaf
--- /dev/null
+++ b/Test/snapshots/Snapshots35.v0.bpl
@@ -0,0 +1,7 @@
+procedure {:checksum "0"} P(b: bool);
+ requires b;
+
+implementation {:id "P"} {:checksum "1"} P(p: bool)
+{
+ assert p;
+}
diff --git a/Test/snapshots/Snapshots35.v1.bpl b/Test/snapshots/Snapshots35.v1.bpl
new file mode 100644
index 00000000..605a862a
--- /dev/null
+++ b/Test/snapshots/Snapshots35.v1.bpl
@@ -0,0 +1,6 @@
+procedure {:checksum "2"} P(b: bool);
+
+implementation {:id "P"} {:checksum "1"} P(p: bool)
+{
+ assert p;
+}
diff --git a/Test/snapshots/Snapshots36.v0.bpl b/Test/snapshots/Snapshots36.v0.bpl
new file mode 100644
index 00000000..66c4ed85
--- /dev/null
+++ b/Test/snapshots/Snapshots36.v0.bpl
@@ -0,0 +1,14 @@
+function {:checksum "2"} F() : bool
+{
+ true
+}
+
+procedure {:checksum "0"} P(b: bool);
+
+implementation {:id "P"} {:checksum "1"} P(p: bool)
+{
+ var l: [int]bool;
+
+ l := (lambda n: int :: F());
+ assert l[0];
+}
diff --git a/Test/snapshots/Snapshots36.v1.bpl b/Test/snapshots/Snapshots36.v1.bpl
new file mode 100644
index 00000000..77172a3e
--- /dev/null
+++ b/Test/snapshots/Snapshots36.v1.bpl
@@ -0,0 +1,14 @@
+function {:checksum "3"} F() : bool
+{
+ false
+}
+
+procedure {:checksum "0"} P(b: bool);
+
+implementation {:id "P"} {:checksum "1"} P(p: bool)
+{
+ var l: [int]bool;
+
+ l := (lambda n: int :: F());
+ assert l[0];
+}
diff --git a/Test/snapshots/Snapshots37.v0.bpl b/Test/snapshots/Snapshots37.v0.bpl
new file mode 100644
index 00000000..a1b90fcc
--- /dev/null
+++ b/Test/snapshots/Snapshots37.v0.bpl
@@ -0,0 +1,9 @@
+procedure {:checksum "0"} P(b: bool);
+
+implementation {:id "P"} {:checksum "1"} P(p: bool)
+{
+ var l: [int]bool;
+
+ l := (lambda n: int :: true);
+ assert l[0];
+}
diff --git a/Test/snapshots/Snapshots37.v1.bpl b/Test/snapshots/Snapshots37.v1.bpl
new file mode 100644
index 00000000..825a16a0
--- /dev/null
+++ b/Test/snapshots/Snapshots37.v1.bpl
@@ -0,0 +1,9 @@
+procedure {:checksum "0"} P(b: bool);
+
+implementation {:id "P"} {:checksum "2"} P(p: bool)
+{
+ var l: [int]bool;
+
+ l := (lambda n: int :: false);
+ assert l[0];
+}
diff --git a/Test/snapshots/Snapshots38.v0.bpl b/Test/snapshots/Snapshots38.v0.bpl
new file mode 100644
index 00000000..496a75a9
--- /dev/null
+++ b/Test/snapshots/Snapshots38.v0.bpl
@@ -0,0 +1,13 @@
+procedure {:checksum "-1"} Callee();
+
+implementation {:id "Callee"} {:checksum "0"} Callee()
+{
+ var r: int;
+
+ call r := Sum(42);
+ assert r != 0;
+}
+
+procedure {:checksum "1"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures n != 0 ==> 1 <= r;
diff --git a/Test/snapshots/Snapshots38.v1.bpl b/Test/snapshots/Snapshots38.v1.bpl
new file mode 100644
index 00000000..062b22ea
--- /dev/null
+++ b/Test/snapshots/Snapshots38.v1.bpl
@@ -0,0 +1,14 @@
+procedure {:checksum "-1"} Callee();
+
+implementation {:id "Callee"} {:checksum "2"} Callee()
+{
+ var r: int;
+
+ call r := Sum(42);
+ assert r != 0;
+ assert 42 <= r;
+}
+
+procedure {:checksum "1"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures n != 0 ==> 1 <= r;
diff --git a/Test/snapshots/Snapshots38.v2.bpl b/Test/snapshots/Snapshots38.v2.bpl
new file mode 100644
index 00000000..5c4b69d6
--- /dev/null
+++ b/Test/snapshots/Snapshots38.v2.bpl
@@ -0,0 +1,14 @@
+procedure {:checksum "-1"} Callee();
+
+implementation {:id "Callee"} {:checksum "2"} Callee()
+{
+ var r: int;
+
+ call r := Sum(42);
+ assert r != 0;
+ assert 42 <= r;
+}
+
+procedure {:checksum "3"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures n != 0 ==> n <= r;
diff --git a/Test/snapshots/Snapshots39.v0.bpl b/Test/snapshots/Snapshots39.v0.bpl
new file mode 100644
index 00000000..083d497e
--- /dev/null
+++ b/Test/snapshots/Snapshots39.v0.bpl
@@ -0,0 +1,13 @@
+procedure {:checksum "-1"} Callee();
+
+implementation {:id "Callee"} {:checksum "0"} Callee()
+{
+ var r: int;
+
+ call r := Sum(42);
+ assert r != 0;
+}
+
+procedure {:checksum "1"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures n <= r;
diff --git a/Test/snapshots/Snapshots39.v1.bpl b/Test/snapshots/Snapshots39.v1.bpl
new file mode 100644
index 00000000..09850bfc
--- /dev/null
+++ b/Test/snapshots/Snapshots39.v1.bpl
@@ -0,0 +1,14 @@
+procedure {:checksum "-1"} Callee();
+
+implementation {:id "Callee"} {:checksum "2"} Callee()
+{
+ var r: int;
+
+ call r := Sum(42);
+ assert r != 0;
+ assert r == (42 * 43) div 2;
+}
+
+procedure {:checksum "1"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures n <= r;
diff --git a/Test/snapshots/Snapshots39.v2.bpl b/Test/snapshots/Snapshots39.v2.bpl
new file mode 100644
index 00000000..4bdc4b6e
--- /dev/null
+++ b/Test/snapshots/Snapshots39.v2.bpl
@@ -0,0 +1,14 @@
+procedure {:checksum "-1"} Callee();
+
+implementation {:id "Callee"} {:checksum "2"} Callee()
+{
+ var r: int;
+
+ call r := Sum(42);
+ assert r != 0;
+ assert r == (42 * 43) div 2;
+}
+
+procedure {:checksum "3"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures r == (n * (n + 1)) div 2;
diff --git a/Test/snapshots/Snapshots4.v0.bpl b/Test/snapshots/Snapshots4.v0.bpl
index 59a42289..db477aca 100644
--- a/Test/snapshots/Snapshots4.v0.bpl
+++ b/Test/snapshots/Snapshots4.v0.bpl
@@ -1,36 +1,36 @@
-procedure {:checksum "P0$proc#0"} P0();
-// Action: verify
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
-}
-
-
-procedure {:checksum "P1$proc#0"} P1();
-// Action: verify
-implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
-{
- call P2();
-}
-
-
-procedure {:checksum "P2$proc#0"} P2();
- ensures G();
-
-
-procedure {:checksum "P3$proc#0"} P3();
-// Action: verify
-implementation {:id "P3"} {:checksum "P3$impl#0"} P3()
-{
-}
-
-
-function {:checksum "G#0"} G() : bool
-{
- F()
-}
-
-
-function {:checksum "F#0"} F() : bool
-{
- true
-}
+procedure {:checksum "P0$proc#0"} P0();
+// Action: verify
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+}
+
+
+procedure {:checksum "P1$proc#0"} P1();
+// Action: verify
+implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
+{
+ call P2();
+}
+
+
+procedure {:checksum "P2$proc#0"} P2();
+ ensures G();
+
+
+procedure {:checksum "P3$proc#0"} P3();
+// Action: verify
+implementation {:id "P3"} {:checksum "P3$impl#0"} P3()
+{
+}
+
+
+function {:checksum "G#0"} G() : bool
+{
+ F()
+}
+
+
+function {:checksum "F#0"} F() : bool
+{
+ true
+}
diff --git a/Test/snapshots/Snapshots4.v1.bpl b/Test/snapshots/Snapshots4.v1.bpl
index 392a1648..973d0104 100644
--- a/Test/snapshots/Snapshots4.v1.bpl
+++ b/Test/snapshots/Snapshots4.v1.bpl
@@ -1,45 +1,45 @@
-procedure {:checksum "P0$proc#0"} P0();
-// Action: skip
-// Priority: 0
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
-{
-}
-
-
-procedure {:checksum "P1$proc#0"} P1();
-// Action: verify
-// Priority: 1
-implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
-{
- call P2();
-}
-
-
-procedure {:checksum "P3$proc#0"} P3();
-// Action: verify
-// Priority: 2
-implementation {:id "P3"} {:checksum "P3$impl#1"} P3()
-{
- assert false;
-}
-
-
-procedure {:checksum "P2$proc#0"} P2();
- ensures G();
-// Action: verify
-// Priority: 3
-implementation {:id "P2"} {:checksum "P2$impl#0"} P2()
-{
-}
-
-
-function {:checksum "G#0"} G() : bool
-{
- F()
-}
-
-
-function {:checksum "F#1"} F() : bool
-{
- false
-}
+procedure {:checksum "P0$proc#0"} P0();
+// Action: skip
+// Priority: 0
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0()
+{
+}
+
+
+procedure {:checksum "P1$proc#0"} P1();
+// Action: verify
+// Priority: 1
+implementation {:id "P1"} {:checksum "P1$impl#0"} P1()
+{
+ call P2();
+}
+
+
+procedure {:checksum "P3$proc#0"} P3();
+// Action: verify
+// Priority: 2
+implementation {:id "P3"} {:checksum "P3$impl#1"} P3()
+{
+ assert false;
+}
+
+
+procedure {:checksum "P2$proc#0"} P2();
+ ensures G();
+// Action: verify
+// Priority: 3
+implementation {:id "P2"} {:checksum "P2$impl#0"} P2()
+{
+}
+
+
+function {:checksum "G#0"} G() : bool
+{
+ F()
+}
+
+
+function {:checksum "F#1"} F() : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots40.v0.bpl b/Test/snapshots/Snapshots40.v0.bpl
new file mode 100644
index 00000000..27839752
--- /dev/null
+++ b/Test/snapshots/Snapshots40.v0.bpl
@@ -0,0 +1,14 @@
+procedure {:checksum "-1"} Foo(b: bool);
+
+implementation {:id "Foo"} {:checksum "0"} Foo(b: bool)
+{
+ var r: int;
+
+ assert b;
+ call r := Sum(42);
+ assert r != 0;
+}
+
+procedure {:checksum "1"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures n <= r;
diff --git a/Test/snapshots/Snapshots40.v1.bpl b/Test/snapshots/Snapshots40.v1.bpl
new file mode 100644
index 00000000..e1c505f8
--- /dev/null
+++ b/Test/snapshots/Snapshots40.v1.bpl
@@ -0,0 +1,15 @@
+procedure {:checksum "-1"} Foo(b: bool);
+
+implementation {:id "Foo"} {:checksum "2"} Foo(b: bool)
+{
+ var r: int;
+
+ assert b;
+ call r := Sum(42);
+ assert r != 0;
+ assert r == (42 * 43) div 2;
+}
+
+procedure {:checksum "1"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures n <= r;
diff --git a/Test/snapshots/Snapshots40.v2.bpl b/Test/snapshots/Snapshots40.v2.bpl
new file mode 100644
index 00000000..842d33f5
--- /dev/null
+++ b/Test/snapshots/Snapshots40.v2.bpl
@@ -0,0 +1,15 @@
+procedure {:checksum "-1"} Foo(b: bool);
+
+implementation {:id "Foo"} {:checksum "2"} Foo(b: bool)
+{
+ var r: int;
+
+ assert b;
+ call r := Sum(42);
+ assert r != 0;
+ assert r == (42 * 43) div 2;
+}
+
+procedure {:checksum "3"} Sum(n: int) returns (r: int);
+ requires 0 <= n;
+ ensures r == (n * (n + 1)) div 2;
diff --git a/Test/snapshots/Snapshots41.v0.bpl b/Test/snapshots/Snapshots41.v0.bpl
new file mode 100644
index 00000000..dbfe3e2d
--- /dev/null
+++ b/Test/snapshots/Snapshots41.v0.bpl
@@ -0,0 +1,35 @@
+procedure {:checksum "0"} M(x: int);
+implementation {:id "M"} {:checksum "1"} M(x: int)
+{ assert x < 20 || 10 <= x; // always true
+ assert x < 10; // error
+ call Other(x); // error: precondition violation
+}
+
+procedure {:checksum "10"} Other(y: int);
+ requires 0 <= y;
+implementation {:id "Other"} {:checksum "11"} Other(y: int)
+{
+}
+
+procedure {:checksum "20"} Posty() returns (z: int);
+ ensures 2 <= z; // error: postcondition violation
+implementation {:id "Posty"} {:checksum "21"} Posty() returns (z: int)
+{
+ var t: int;
+ t := 20;
+ if (t < z) {
+ } else { // the postcondition violation occurs on this 'else' branch
+ }
+}
+
+procedure {:checksum "30"} NoChangeWhazzoeva(u: int);
+implementation {:id "NoChangeWhazzoeva"} {:checksum "3"} NoChangeWhazzoeva(u: int)
+{
+ assert u != 53; // error
+}
+
+procedure {:checksum "40"} NoChangeAndCorrect();
+implementation {:id "NoChangeAndCorrect"} {:checksum "41"} NoChangeAndCorrect()
+{
+ assert true;
+}
diff --git a/Test/snapshots/Snapshots41.v1.bpl b/Test/snapshots/Snapshots41.v1.bpl
new file mode 100644
index 00000000..9864e0e4
--- /dev/null
+++ b/Test/snapshots/Snapshots41.v1.bpl
@@ -0,0 +1,39 @@
+procedure {:checksum "0"} M(x: int);
+implementation {:id "M"} {:checksum "1"} M(x: int)
+{
+assert x < 20 || 10 <= x; // always true
+
+ assert x < 10; // error
+ call Other(x); // error: precondition violation
+ assert x == 7; // error: this is a new error in v1
+}
+
+
+ procedure {:checksum "10"} Other(y: int);
+ requires 0 <= y;
+ implementation {:id "Other"} {:checksum "11"} Other(y: int)
+ {
+ }
+
+
+
+procedure {:checksum "20"} Posty() returns (z: int);
+ ensures 2 <= z; // error: postcondition violation
+implementation {:id "Posty"} {:checksum "21"} Posty() returns (z: int)
+{
+ var t: int;
+ t := 20;
+ if (t < z) {
+ assert true; // this is a new assert
+ } else { // the postcondition violation occurs on this 'else' branch
+ }
+}
+
+ procedure {:checksum "30"} NoChangeWhazzoeva(u: int);
+ implementation {:id "NoChangeWhazzoeva"} {:checksum "3"} NoChangeWhazzoeva(u: int)
+ {
+ assert u != 53; // error
+ }
+
+procedure {:checksum "40"} NoChangeAndCorrect();
+implementation {:id "NoChangeAndCorrect"} {:checksum "41"} NoChangeAndCorrect() { assert true; }
diff --git a/Test/snapshots/Snapshots5.v0.bpl b/Test/snapshots/Snapshots5.v0.bpl
index b8652c7b..ea59bed5 100644
--- a/Test/snapshots/Snapshots5.v0.bpl
+++ b/Test/snapshots/Snapshots5.v0.bpl
@@ -1,11 +1,11 @@
-procedure {:checksum "P0$proc#0"} P0(n: int where F(n));
-// Action: verify
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0(n: int)
-{
- assert false;
-}
-
-function {:checksum "F#1"} F(n: int) : bool
-{
- false
-}
+procedure {:checksum "P0$proc#0"} P0(n: int where F(n));
+// Action: verify
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0(n: int)
+{
+ assert false;
+}
+
+function {:checksum "F#1"} F(n: int) : bool
+{
+ false
+}
diff --git a/Test/snapshots/Snapshots5.v1.bpl b/Test/snapshots/Snapshots5.v1.bpl
index b42b1576..12895df6 100644
--- a/Test/snapshots/Snapshots5.v1.bpl
+++ b/Test/snapshots/Snapshots5.v1.bpl
@@ -1,11 +1,11 @@
-procedure {:checksum "P0$proc#0"} P0(n: int where F(n));
-// Action: verify
-implementation {:id "P0"} {:checksum "P0$impl#0"} P0(n: int)
-{
- assert false;
-}
-
-function {:checksum "F#0"} F(n: int) : bool
-{
- true
-}
+procedure {:checksum "P0$proc#0"} P0(n: int where F(n));
+// Action: verify
+implementation {:id "P0"} {:checksum "P0$impl#0"} P0(n: int)
+{
+ assert false;
+}
+
+function {:checksum "F#0"} F(n: int) : bool
+{
+ true
+}
diff --git a/Test/snapshots/Snapshots6.v0.bpl b/Test/snapshots/Snapshots6.v0.bpl
index bdf9c14a..f255c020 100644
--- a/Test/snapshots/Snapshots6.v0.bpl
+++ b/Test/snapshots/Snapshots6.v0.bpl
@@ -1,17 +1,17 @@
-var x: int;
-var y: int;
-
-procedure {:checksum "0"} M();
- modifies x, y;
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- y := 0;
-
- call N();
-
- assert y == 0;
-}
-
-procedure {:checksum "2"} N();
- modifies x;
+var x: int;
+var y: int;
+
+procedure {:checksum "0"} M();
+ modifies x, y;
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ y := 0;
+
+ call N();
+
+ assert y == 0;
+}
+
+procedure {:checksum "2"} N();
+ modifies x;
diff --git a/Test/snapshots/Snapshots6.v1.bpl b/Test/snapshots/Snapshots6.v1.bpl
index be8b699d..73e280d2 100644
--- a/Test/snapshots/Snapshots6.v1.bpl
+++ b/Test/snapshots/Snapshots6.v1.bpl
@@ -1,18 +1,18 @@
-var x: int;
-var y: int;
-
-procedure {:checksum "0"} M();
- modifies x, y;
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- y := 0;
-
- call N();
-
- assert y == 0;
-}
-
-procedure {:checksum "3"} N();
- // Change: more modified variables
- modifies x, y;
+var x: int;
+var y: int;
+
+procedure {:checksum "0"} M();
+ modifies x, y;
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ y := 0;
+
+ call N();
+
+ assert y == 0;
+}
+
+procedure {:checksum "3"} N();
+ // Change: more modified variables
+ modifies x, y;
diff --git a/Test/snapshots/Snapshots7.v0.bpl b/Test/snapshots/Snapshots7.v0.bpl
index 6e0932c8..400b209c 100644
--- a/Test/snapshots/Snapshots7.v0.bpl
+++ b/Test/snapshots/Snapshots7.v0.bpl
@@ -1,19 +1,19 @@
-var x: int;
-var y: int;
-var z: int;
-
-procedure {:checksum "0"} M();
- modifies x, y, z;
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- z := 0;
-
- call N();
-
- assert y < 0;
-}
-
-procedure {:checksum "2"} N();
- modifies x, y;
- ensures y < z;
+var x: int;
+var y: int;
+var z: int;
+
+procedure {:checksum "0"} M();
+ modifies x, y, z;
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ z := 0;
+
+ call N();
+
+ assert y < 0;
+}
+
+procedure {:checksum "2"} N();
+ modifies x, y;
+ ensures y < z;
diff --git a/Test/snapshots/Snapshots7.v1.bpl b/Test/snapshots/Snapshots7.v1.bpl
index 8700e91c..ad3f1f27 100644
--- a/Test/snapshots/Snapshots7.v1.bpl
+++ b/Test/snapshots/Snapshots7.v1.bpl
@@ -1,20 +1,20 @@
-var x: int;
-var y: int;
-var z: int;
-
-procedure {:checksum "0"} M();
- modifies x, y, z;
-
-implementation {:id "M"} {:checksum "1"} M()
-{
- z := 0;
-
- call N();
-
- assert y < 0;
-}
-
-procedure {:checksum "3"} N();
- // Change: fewer modified variables
- modifies x;
- ensures y < z;
+var x: int;
+var y: int;
+var z: int;
+
+procedure {:checksum "0"} M();
+ modifies x, y, z;
+
+implementation {:id "M"} {:checksum "1"} M()
+{
+ z := 0;
+
+ call N();
+
+ assert y < 0;
+}
+
+procedure {:checksum "3"} N();
+ // Change: fewer modified variables
+ modifies x;
+ ensures y < z;
diff --git a/Test/snapshots/Snapshots8.v0.bpl b/Test/snapshots/Snapshots8.v0.bpl
index 73dcd9aa..0d33d81a 100644
--- a/Test/snapshots/Snapshots8.v0.bpl
+++ b/Test/snapshots/Snapshots8.v0.bpl
@@ -1,15 +1,15 @@
-procedure {:checksum "0"} M(n: int);
- requires 0 < n;
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- assert 0 <= x;
-}
-
-procedure {:checksum "2"} N(n: int) returns (r: int);
- requires 0 < n;
- ensures 0 < r;
+procedure {:checksum "0"} M(n: int);
+ requires 0 < n;
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "2"} N(n: int) returns (r: int);
+ requires 0 < n;
+ ensures 0 < r;
diff --git a/Test/snapshots/Snapshots8.v1.bpl b/Test/snapshots/Snapshots8.v1.bpl
index de241c24..a886d3bd 100644
--- a/Test/snapshots/Snapshots8.v1.bpl
+++ b/Test/snapshots/Snapshots8.v1.bpl
@@ -1,16 +1,16 @@
-procedure {:checksum "0"} M(n: int);
- requires 0 < n;
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- assert 0 <= x;
-}
-
-procedure {:checksum "3"} N(n: int) returns (r: int);
- requires 0 < n;
- // Change: stronger postcondition
- ensures 42 < r;
+procedure {:checksum "0"} M(n: int);
+ requires 0 < n;
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "3"} N(n: int) returns (r: int);
+ requires 0 < n;
+ // Change: stronger postcondition
+ ensures 42 < r;
diff --git a/Test/snapshots/Snapshots9.v0.bpl b/Test/snapshots/Snapshots9.v0.bpl
index 5b2cf68c..58839cbc 100644
--- a/Test/snapshots/Snapshots9.v0.bpl
+++ b/Test/snapshots/Snapshots9.v0.bpl
@@ -1,17 +1,17 @@
-procedure {:checksum "0"} M(n: int);
- requires 0 < n;
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- assert 0 <= x;
-}
-
-procedure {:checksum "2"} N(n: int) returns (r: int);
- requires 0 < n;
- requires true;
- ensures 0 < r;
- ensures true;
+procedure {:checksum "0"} M(n: int);
+ requires 0 < n;
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "2"} N(n: int) returns (r: int);
+ requires 0 < n;
+ requires true;
+ ensures 0 < r;
+ ensures true;
diff --git a/Test/snapshots/Snapshots9.v1.bpl b/Test/snapshots/Snapshots9.v1.bpl
index d1886a6d..c35653fe 100644
--- a/Test/snapshots/Snapshots9.v1.bpl
+++ b/Test/snapshots/Snapshots9.v1.bpl
@@ -1,16 +1,16 @@
-procedure {:checksum "0"} M(n: int);
- requires 0 < n;
-
-implementation {:id "M"} {:checksum "1"} M(n: int)
-{
- var x: int;
-
- call x := N(n);
-
- assert 0 <= x;
-}
-
-procedure {:checksum "3"} N(n: int) returns (r: int);
- requires 0 < n;
- // Change: weaker postcondition
- ensures 0 <= r;
+procedure {:checksum "0"} M(n: int);
+ requires 0 < n;
+
+implementation {:id "M"} {:checksum "1"} M(n: int)
+{
+ var x: int;
+
+ call x := N(n);
+
+ assert 0 <= x;
+}
+
+procedure {:checksum "3"} N(n: int) returns (r: int);
+ requires 0 < n;
+ // Change: weaker postcondition
+ ensures 0 <= r;
diff --git a/Test/snapshots/runtest.AI.snapshot b/Test/snapshots/runtest.AI.snapshot
index 51de91e8..116920b5 100644
--- a/Test/snapshots/runtest.AI.snapshot
+++ b/Test/snapshots/runtest.AI.snapshot
@@ -1,2 +1,2 @@
-// RUN: %boogie -errorTrace:0 -traceCaching:1 -verifySnapshots:2 -verifySeparately Snapshots29.bpl > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -errorTrace:0 -traceCaching:1 -verifySnapshots:2 -verifySeparately Snapshots29.bpl > "%t"
+// RUN: %diff "%s.expect" "%t"
diff --git a/Test/snapshots/runtest.AI.snapshot.expect b/Test/snapshots/runtest.AI.snapshot.expect
index 7b0288bb..f9e4dc32 100644
--- a/Test/snapshots/runtest.AI.snapshot.expect
+++ b/Test/snapshots/runtest.AI.snapshot.expect
@@ -1,9 +1,9 @@
-Processing command (at Snapshots29.v0.bpl(14,5)) assert i == 0;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots29.v1.bpl(14,5)) assert i == 0;
- >>> DoNothingToAssert
-Snapshots29.v1.bpl(14,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots29.v0.bpl(14,5)) assert i == 0;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots29.v1.bpl(14,5)) assert i == 0;
+ >>> DoNothingToAssert
+Snapshots29.v1.bpl(14,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
diff --git a/Test/snapshots/runtest.snapshot b/Test/snapshots/runtest.snapshot
index a203ffac..1d6e7c95 100644
--- a/Test/snapshots/runtest.snapshot
+++ b/Test/snapshots/runtest.snapshot
@@ -1,2 +1,3 @@
-// RUN: %boogie -errorTrace:0 -traceCaching:1 -verifySnapshots:2 -verifySeparately -noinfer Snapshots0.bpl Snapshots1.bpl Snapshots2.bpl Snapshots3.bpl Snapshots4.bpl Snapshots5.bpl Snapshots6.bpl Snapshots7.bpl Snapshots8.bpl Snapshots9.bpl Snapshots10.bpl Snapshots11.bpl Snapshots12.bpl Snapshots13.bpl Snapshots14.bpl Snapshots15.bpl Snapshots16.bpl Snapshots17.bpl Snapshots18.bpl Snapshots19.bpl Snapshots20.bpl Snapshots21.bpl Snapshots22.bpl Snapshots23.bpl Snapshots24.bpl Snapshots25.bpl Snapshots26.bpl Snapshots27.bpl Snapshots28.bpl Snapshots30.bpl Snapshots31.bpl Snapshots32.bpl Snapshots33.bpl > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -errorTrace:0 -traceCaching:1 -verifySnapshots:2 -verifySeparately -noinfer Snapshots0.bpl Snapshots1.bpl Snapshots2.bpl Snapshots3.bpl Snapshots4.bpl Snapshots5.bpl Snapshots6.bpl Snapshots7.bpl Snapshots8.bpl Snapshots9.bpl Snapshots10.bpl Snapshots11.bpl Snapshots12.bpl Snapshots13.bpl Snapshots14.bpl Snapshots15.bpl Snapshots16.bpl Snapshots17.bpl Snapshots18.bpl Snapshots19.bpl Snapshots20.bpl Snapshots21.bpl Snapshots22.bpl Snapshots23.bpl Snapshots24.bpl Snapshots25.bpl Snapshots26.bpl Snapshots27.bpl Snapshots28.bpl Snapshots30.bpl Snapshots31.bpl Snapshots32.bpl Snapshots33.bpl Snapshots34.bpl Snapshots35.bpl Snapshots36.bpl Snapshots37.bpl Snapshots38.bpl Snapshots39.bpl Snapshots40.bpl > "%t"
+// RUN: %boogie -errorTrace:0 -traceCaching:1 -verifySnapshots:3 -verifySeparately -noinfer Snapshots41.bpl >> "%t"
+// RUN: %diff "%s.expect" "%t"
diff --git a/Test/snapshots/runtest.snapshot.expect b/Test/snapshots/runtest.snapshot.expect
index 8f3c2015..393c9330 100644
--- a/Test/snapshots/runtest.snapshot.expect
+++ b/Test/snapshots/runtest.snapshot.expect
@@ -1,600 +1,810 @@
-Processing command (at Snapshots0.v0.bpl(41,5)) assert false;
- >>> DoNothingToAssert
-Snapshots0.v0.bpl(41,5): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots0.v0.bpl(8,5)) assert false;
- >>> DoNothingToAssert
-Snapshots0.v0.bpl(8,5): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots0.v0.bpl(19,5)) assert false;
- >>> DoNothingToAssert
-Snapshots0.v0.bpl(19,5): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots0.v0.bpl(30,5)) assert false;
- >>> DoNothingToAssert
-Snapshots0.v0.bpl(30,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 4 errors
-Snapshots0.v0.bpl(41,5): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots0.v1.bpl(19,5)) assert true;
- >>> DoNothingToAssert
-Processing command (at Snapshots0.v1.bpl(30,5)) assert false;
- >>> DoNothingToAssert
-Snapshots0.v1.bpl(30,5): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots0.v1.bpl(41,5)) assert true;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 2 verified, 2 errors
-Snapshots0.v0.bpl(41,5): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots0.v2.bpl(19,5)) assert true;
- >>> DoNothingToAssert
-Processing command (at Snapshots0.v2.bpl(30,5)) assert true;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 2 verified, 1 error
-Processing command (at Snapshots1.v0.bpl(13,5)) assert 1 != 1;
- >>> DoNothingToAssert
-Snapshots1.v0.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 1 verified, 1 error
-Processing command (at Snapshots1.v1.bpl(13,5)) assert 2 != 2;
- >>> DoNothingToAssert
-Snapshots1.v1.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 1 verified, 1 error
-Processing call to procedure P2 in implementation P1 (at Snapshots1.v2.bpl(5,5)):
-Processing command (at Snapshots1.v2.bpl(5,5)) assert false;
- >>> DoNothingToAssert
-Snapshots1.v2.bpl(5,5): Error BP5002: A precondition for this call might not hold.
-Snapshots1.v2.bpl(10,3): Related location: This is the precondition that might not hold.
-Processing command (at Snapshots1.v2.bpl(14,5)) assert 2 != 2;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 1 error
-
-Boogie program verifier finished with 1 verified, 0 errors
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure P0 in implementation P0 (at Snapshots2.v2.bpl(6,5)):
-Processing command (at Snapshots2.v2.bpl(6,5)) assert F0();
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure P0 in implementation P0 (at Snapshots2.v3.bpl(6,5)):
- >>> added after: a##post##0 := a##post##0 && false;
-Processing command (at Snapshots2.v3.bpl(6,5)) assert F0();
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure P0 in implementation P0 (at Snapshots2.v5.bpl(7,5)):
- >>> added axiom: ##extracted_function##1() == F0()
- >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1();
-Processing command (at Snapshots2.v5.bpl(7,5)) assume {:precondition_previous_snapshot} ##extracted_function##1();
- >>> MarkAsFullyVerified
-Processing command (at Snapshots2.v5.bpl(7,5)) assert F0();
- >>> MarkAsFullyVerified
-Processing command (at Snapshots2.v5.bpl(3,1)) assert F0();
- >>> MarkAsFullyVerified
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots3.v0.bpl(2,1)) assert G();
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots3.v1.bpl(2,1)) assert G();
- >>> DoNothingToAssert
-Snapshots3.v1.bpl(6,1): Error BP5003: A postcondition might not hold on this return path.
-Snapshots3.v1.bpl(2,1): Related location: This is the postcondition that might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-
-Boogie program verifier finished with 3 verified, 0 errors
-Processing call to procedure P2 in implementation P1 (at Snapshots4.v1.bpl(14,5)):
- >>> added after: a##post##0 := a##post##0 && false;
-Processing command (at Snapshots4.v1.bpl(23,5)) assert false;
- >>> DoNothingToAssert
-Snapshots4.v1.bpl(23,5): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots4.v1.bpl(28,3)) assert G();
- >>> DoNothingToAssert
-Snapshots4.v1.bpl(33,1): Error BP5003: A postcondition might not hold on this return path.
-Snapshots4.v1.bpl(28,3): Related location: This is the postcondition that might not hold.
-
-Boogie program verifier finished with 2 verified, 2 errors
-Processing command (at Snapshots5.v0.bpl(5,5)) assert false;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots5.v1.bpl(5,5)) assert false;
- >>> DoNothingToAssert
-Snapshots5.v1.bpl(5,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots6.v0.bpl(13,5)) assert y == 0;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots6.v1.bpl(11,5)):
- >>> added axiom: (forall y##old##0: int, y: int :: {:weight 30} { ##extracted_function##1(y##old##0, y) } ##extracted_function##1(y##old##0, y) == (y##old##0 == y))
- >>> added before: y##old##0 := y;
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##1(y##old##0, y);
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##1(y##old##0, y);
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots6.v1.bpl(13,5)) assert y == 0;
- >>> MarkAsPartiallyVerified
-Snapshots6.v1.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots7.v0.bpl(14,5)) assert y < 0;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots7.v1.bpl(12,5)):
- >>> added axiom: (forall y: int, z: int :: {:weight 30} { ##extracted_function##1(y, z) } ##extracted_function##1(y, z) == (y < z))
- >>> added before: y##old##0 := y;
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##1(y, z);
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##1(y, z);
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots7.v1.bpl(14,5)) assert y < 0;
- >>> MarkAsPartiallyVerified
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots8.v0.bpl(8,5)) assert 0 < call0formal#AT#n;
- >>> DoNothingToAssert
-Processing command (at Snapshots8.v0.bpl(10,5)) assert 0 <= x;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots8.v1.bpl(8,5)):
- >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n))
- >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r))
- >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##2(call1formal#AT#r);
-Processing command (at Snapshots8.v1.bpl(8,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> MarkAsFullyVerified
-Processing command (at Snapshots8.v1.bpl(8,5)) assert 0 < call0formal#AT#n;
- >>> MarkAsFullyVerified
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##2(call1formal#AT#r);
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots8.v1.bpl(10,5)) assert 0 <= x;
- >>> MarkAsPartiallyVerified
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots9.v0.bpl(8,5)) assert 0 < call0formal#AT#n;
- >>> DoNothingToAssert
-Processing command (at Snapshots9.v0.bpl(8,5)) assert true;
- >>> DoNothingToAssert
-Processing command (at Snapshots9.v0.bpl(10,5)) assert 0 <= x;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots9.v1.bpl(8,5)):
- >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n && true))
- >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r && true))
- >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##2(call1formal#AT#r);
-Processing command (at Snapshots9.v1.bpl(8,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> MarkAsFullyVerified
-Processing command (at Snapshots9.v1.bpl(8,5)) assert 0 < call0formal#AT#n;
- >>> MarkAsFullyVerified
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##2(call1formal#AT#r);
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots9.v1.bpl(10,5)) assert 0 <= x;
- >>> MarkAsPartiallyVerified
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots10.v0.bpl(8,5)) assert 0 < call0formal#AT#n;
- >>> DoNothingToAssert
-Processing command (at Snapshots10.v0.bpl(12,5)) assert 0 <= x;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots10.v1.bpl(8,5)):
- >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n))
- >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r))
- >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##2(call1formal#AT#r);
-Processing command (at Snapshots10.v1.bpl(8,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> MarkAsFullyVerified
-Processing command (at Snapshots10.v1.bpl(8,5)) assert 0 < call0formal#AT#n;
- >>> MarkAsFullyVerified
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##2(call1formal#AT#r);
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots10.v1.bpl(12,5)) assert 0 <= x;
- >>> MarkAsPartiallyVerified
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots11.v0.bpl(7,5)) assert 0 < call0formal#AT#n;
- >>> DoNothingToAssert
-Processing command (at Snapshots11.v0.bpl(9,5)) assert 0 <= x;
- >>> DoNothingToAssert
-Snapshots11.v0.bpl(7,5): Error BP5002: A precondition for this call might not hold.
-Snapshots11.v0.bpl(13,3): Related location: This is the precondition that might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing call to procedure N in implementation M (at Snapshots11.v1.bpl(7,5)):
- >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n))
- >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r))
- >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##2(call1formal#AT#r);
-Processing command (at Snapshots11.v1.bpl(7,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
- >>> DropAssume
-Processing command (at Snapshots11.v1.bpl(7,5)) assert 0 < call0formal#AT#n;
- >>> RecycleError
-Processing command (at Snapshots11.v1.bpl(9,5)) assert 0 <= x;
- >>> MarkAsPartiallyVerified
-Snapshots11.v0.bpl(7,5): Error BP5002: A precondition for this call might not hold.
-Snapshots11.v0.bpl(13,3): Related location: This is the precondition that might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots12.v0.bpl(7,5)) assert false;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots12.v1.bpl(5,5)):
- >>> added after: a##post##0 := a##post##0 && false;
-Processing command (at Snapshots12.v1.bpl(7,5)) assert false;
- >>> DoNothingToAssert
-Snapshots12.v1.bpl(7,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots13.v0.bpl(7,5)) assert false;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots13.v1.bpl(5,5)):
- >>> added after: a##post##0 := a##post##0 && false;
-Processing command (at Snapshots13.v1.bpl(7,5)) assert false;
- >>> DoNothingToAssert
-Snapshots13.v1.bpl(7,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots14.v0.bpl(7,5)) assert false;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots14.v1.bpl(5,5)):
- >>> added axiom: ##extracted_function##1() == (F() && G())
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##1();
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##1();
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots14.v1.bpl(7,5)) assert false;
- >>> MarkAsPartiallyVerified
-Snapshots14.v1.bpl(7,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots15.v0.bpl(5,5)) assert true;
- >>> DoNothingToAssert
-Processing command (at Snapshots15.v0.bpl(9,5)) assert true;
- >>> DoNothingToAssert
-Processing command (at Snapshots15.v0.bpl(13,5)) assert false;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots15.v1.bpl(7,5)):
- >>> added after: a##post##0 := a##post##0 && false;
-Processing call to procedure N in implementation M (at Snapshots15.v1.bpl(11,5)):
- >>> added after: a##post##1 := a##post##1 && false;
-Processing command (at Snapshots15.v1.bpl(5,5)) assert true;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots15.v1.bpl(9,5)) assert true;
- >>> MarkAsPartiallyVerified
-Processing command (at Snapshots15.v1.bpl(13,5)) assert false;
- >>> MarkAsPartiallyVerified
-Snapshots15.v1.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots16.v0.bpl(14,5)) assert F(0) == 1;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots16.v1.bpl(14,5)) assert F(0) == 1;
- >>> DoNothingToAssert
-Snapshots16.v1.bpl(14,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots17.v0.bpl(28,5)) assert true;
- >>> DoNothingToAssert
-Processing command (at Snapshots17.v0.bpl(25,9)) assert false;
- >>> DoNothingToAssert
-Processing command (at Snapshots17.v0.bpl(12,13)) assert true;
- >>> DoNothingToAssert
-Processing command (at Snapshots17.v0.bpl(20,13)) assert x == 1;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots17.v1.bpl(14,13)):
- >>> added after: a##post##0 := a##post##0 && false;
-Processing call to procedure N in implementation M (at Snapshots17.v1.bpl(16,13)):
- >>> added after: a##post##1 := a##post##1 && false;
-Processing call to procedure N in implementation M (at Snapshots17.v1.bpl(23,9)):
- >>> added after: a##post##2 := a##post##2 && false;
-Processing command (at Snapshots17.v1.bpl(28,5)) assert true;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots17.v1.bpl(25,9)) assert false;
- >>> MarkAsPartiallyVerified
-Processing command (at Snapshots17.v1.bpl(12,13)) assert true;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots17.v1.bpl(20,13)) assert x == 1;
- >>> MarkAsPartiallyVerified
-Snapshots17.v1.bpl(20,13): Error BP5001: This assertion might not hold.
-Snapshots17.v1.bpl(25,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 2 errors
-Processing command (at Snapshots18.v0.bpl(7,9)) assert 0 == 0;
- >>> DoNothingToAssert
-Processing command (at Snapshots18.v0.bpl(17,9)) assert 1 != 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots18.v0.bpl(20,5)) assert 2 != 2;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure N in implementation M (at Snapshots18.v1.bpl(9,9)):
- >>> added after: a##post##0 := a##post##0 && false;
-Processing call to procedure N in implementation M (at Snapshots18.v1.bpl(10,9)):
- >>> added after: a##post##1 := a##post##1 && false;
-Processing command (at Snapshots18.v1.bpl(7,9)) assert 0 == 0;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots18.v1.bpl(17,9)) assert 1 != 1;
- >>> MarkAsPartiallyVerified
-Processing command (at Snapshots18.v1.bpl(20,5)) assert 2 != 2;
- >>> MarkAsPartiallyVerified
-Snapshots18.v1.bpl(17,9): Error BP5001: This assertion might not hold.
-Snapshots18.v1.bpl(20,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 2 errors
-Processing command (at Snapshots19.v0.bpl(5,5)) assert 2 == 2;
- >>> DoNothingToAssert
-Processing command (at Snapshots19.v0.bpl(7,5)) assert 1 != 1;
- >>> DoNothingToAssert
-Snapshots19.v0.bpl(7,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing call to procedure N in implementation M (at Snapshots19.v1.bpl(5,5)):
- >>> added axiom: ##extracted_function##1() == (2 == 2)
- >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1();
-Processing command (at Snapshots19.v1.bpl(5,5)) assume {:precondition_previous_snapshot} ##extracted_function##1();
- >>> MarkAsFullyVerified
-Processing command (at Snapshots19.v1.bpl(5,5)) assert 2 == 2;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots19.v1.bpl(7,5)) assert 1 != 1;
- >>> RecycleError
-Snapshots19.v0.bpl(7,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots20.v0.bpl(9,9)) assert 1 != 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots20.v0.bpl(13,9)) assert 2 != 2;
- >>> DoNothingToAssert
-Processing command (at Snapshots20.v0.bpl(16,5)) assert 3 != 3;
- >>> DoNothingToAssert
-Snapshots20.v0.bpl(13,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing call to procedure N in implementation M (at Snapshots20.v1.bpl(7,9)):
- >>> added axiom: ##extracted_function##1() == (0 != 0)
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##1();
-Processing command (at Snapshots20.v1.bpl(9,9)) assert 1 != 1;
- >>> MarkAsPartiallyVerified
-Processing command (at Snapshots20.v1.bpl(13,9)) assert 2 != 2;
- >>> RecycleError
-Processing command (at Snapshots20.v1.bpl(16,5)) assert 3 != 3;
- >>> MarkAsPartiallyVerified
-Snapshots20.v1.bpl(9,9): Error BP5001: This assertion might not hold.
-Snapshots20.v0.bpl(13,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 2 errors
-Processing command (at Snapshots21.v0.bpl(7,9)) assert 1 != 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots21.v0.bpl(11,9)) assert 2 != 2;
- >>> DoNothingToAssert
-Processing command (at Snapshots21.v0.bpl(14,5)) assert 3 != 3;
- >>> DoNothingToAssert
-Snapshots21.v0.bpl(7,9): Error BP5001: This assertion might not hold.
-Snapshots21.v0.bpl(11,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 2 errors
-Processing command (at Snapshots21.v1.bpl(7,9)) assert 1 == 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots21.v1.bpl(11,9)) assert 2 != 2;
- >>> RecycleError
-Processing command (at Snapshots21.v1.bpl(14,5)) assert 3 != 3;
- >>> DoNothingToAssert
-Snapshots21.v0.bpl(11,9): Error BP5001: This assertion might not hold.
-Snapshots21.v1.bpl(14,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 2 errors
-Processing command (at Snapshots22.v0.bpl(7,9)) assert 1 != 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots22.v0.bpl(11,9)) assert 2 == 2;
- >>> DoNothingToAssert
-Processing command (at Snapshots22.v0.bpl(14,5)) assert 3 == 3;
- >>> DoNothingToAssert
-Snapshots22.v0.bpl(7,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots22.v1.bpl(7,9)) assert 1 == 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots22.v1.bpl(11,9)) assert 2 == 2;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots22.v1.bpl(14,5)) assert 3 == 3;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots23.v0.bpl(7,9)) assert 1 != 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots23.v0.bpl(11,9)) assert 2 == 2;
- >>> DoNothingToAssert
-Processing command (at Snapshots23.v0.bpl(14,5)) assert 3 == 3;
- >>> DoNothingToAssert
-Snapshots23.v0.bpl(7,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 1 verified, 1 error
-Snapshots23.v0.bpl(7,9): Error BP5001: This assertion might not hold.
-Processing command (at Snapshots23.v1.bpl(22,5)) assert 4 == 4;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 1 error
-Processing command (at Snapshots23.v2.bpl(8,9)) assert 1 != 1;
- >>> RecycleError
-Processing command (at Snapshots23.v2.bpl(12,9)) assert 2 == 2;
- >>> MarkAsFullyVerified
-Snapshots23.v0.bpl(7,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 1 verified, 1 error
-Processing command (at Snapshots24.v0.bpl(7,9)) assert {:subsumption 0} 1 != 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v0.bpl(11,9)) assert {:subsumption 1} 5 != 5;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v0.bpl(15,9)) assert {:subsumption 2} 6 != 6;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v0.bpl(19,9)) assert {:subsumption 1} 2 == 2;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v0.bpl(20,9)) assert {:subsumption 2} 4 == 4;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v0.bpl(21,9)) assert 5 == 5;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v0.bpl(24,5)) assert {:subsumption 0} 3 == 3;
- >>> DoNothingToAssert
-Snapshots24.v0.bpl(7,9): Error BP5001: This assertion might not hold.
-Snapshots24.v0.bpl(11,9): Error BP5001: This assertion might not hold.
-Snapshots24.v0.bpl(15,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 3 errors
-Processing command (at Snapshots24.v1.bpl(7,9)) assert {:subsumption 0} 1 == 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v1.bpl(11,9)) assert {:subsumption 1} 5 == 5;
- >>> DoNothingToAssert
-Processing command (at Snapshots24.v1.bpl(15,9)) assert {:subsumption 2} 6 != 6;
- >>> RecycleError
-Processing command (at Snapshots24.v1.bpl(19,9)) assert {:subsumption 1} 2 == 2;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots24.v1.bpl(20,9)) assert {:subsumption 2} 4 == 4;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots24.v1.bpl(21,9)) assert 5 == 5;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots24.v1.bpl(24,5)) assert {:subsumption 0} 3 == 3;
- >>> DoNothingToAssert
-Snapshots24.v0.bpl(15,9): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots25.v0.bpl(12,5)) assert 0 == 0;
- >>> DoNothingToAssert
-Processing command (at Snapshots25.v0.bpl(13,5)) assert x != x;
- >>> DoNothingToAssert
-Snapshots25.v0.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots25.v1.bpl(12,5)) assert 0 == 0;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots25.v1.bpl(13,5)) assert x != x;
- >>> RecycleError
-Snapshots25.v0.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots26.v0.bpl(12,5)) assert 0 == 0;
- >>> DoNothingToAssert
-Processing command (at Snapshots26.v0.bpl(13,5)) assert x != x;
- >>> DoNothingToAssert
-Snapshots26.v0.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots26.v1.bpl(13,5)) assert 0 == 0;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots26.v1.bpl(14,5)) assert x != x;
- >>> RecycleError
-Snapshots26.v0.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots27.v0.bpl(12,5)) assert 0 == 0;
- >>> DoNothingToAssert
-Processing command (at Snapshots27.v0.bpl(13,5)) assert x != x;
- >>> DoNothingToAssert
-Snapshots27.v0.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots27.v1.bpl(14,5)) assert 0 == 0;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots27.v1.bpl(15,5)) assert x != x;
- >>> RecycleError
-Snapshots27.v0.bpl(13,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots28.v0.bpl(13,5)) assert 0 == 0;
- >>> DoNothingToAssert
-Processing command (at Snapshots28.v0.bpl(14,5)) assert x == 0;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing command (at Snapshots28.v1.bpl(14,5)) assert 0 == 0;
- >>> DoNothingToAssert
-Processing command (at Snapshots28.v1.bpl(15,5)) assert x == 0;
- >>> DoNothingToAssert
-Snapshots28.v1.bpl(15,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots30.v0.bpl(5,5)) assert 0 == 0;
- >>> DoNothingToAssert
-Processing command (at Snapshots30.v0.bpl(5,5)) assert 1 == 1;
- >>> DoNothingToAssert
-Processing command (at Snapshots30.v0.bpl(5,5)) assert 2 != 2;
- >>> DoNothingToAssert
-Processing command (at Snapshots30.v0.bpl(5,5)) assert 3 == 3;
- >>> DoNothingToAssert
-Processing command (at Snapshots30.v0.bpl(5,5)) assert 4 == 4;
- >>> DoNothingToAssert
-Snapshots30.v0.bpl(5,5): Error BP5002: A precondition for this call might not hold.
-Snapshots30.v0.bpl(11,3): Related location: This is the precondition that might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots30.v1.bpl(5,5)) assert 0 == 0;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots30.v1.bpl(5,5)) assert 1 == 1;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots30.v1.bpl(5,5)) assert 2 != 2;
- >>> RecycleError
-Processing command (at Snapshots30.v1.bpl(5,5)) assert 3 == 3;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots30.v1.bpl(5,5)) assert 4 == 4;
- >>> MarkAsFullyVerified
-Processing command (at Snapshots30.v1.bpl(6,5)) assert 5 == 5;
- >>> DoNothingToAssert
-Snapshots30.v0.bpl(5,5): Error BP5002: A precondition for this call might not hold.
-Snapshots30.v0.bpl(11,3): Related location: This is the precondition that might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots31.v0.bpl(10,5)) assert 0 < g;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure Q in implementation P (at Snapshots31.v1.bpl(9,5)):
- >>> added axiom: (forall call0old#AT#g: int, g: int :: {:weight 30} { ##extracted_function##1(call0old#AT#g, g) } ##extracted_function##1(call0old#AT#g, g) == (call0old#AT#g < g))
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##1(call0old#AT#g, g);
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##1(call0old#AT#g, g);
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots31.v1.bpl(10,5)) assert 0 < g;
- >>> MarkAsPartiallyVerified
-Snapshots31.v1.bpl(10,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots32.v0.bpl(10,5)) assert 0 < g;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure Q in implementation P (at Snapshots32.v1.bpl(8,5)):
- >>> added axiom: (forall g##old##0: int, g: int :: {:weight 30} { ##extracted_function##1(g##old##0, g) } ##extracted_function##1(g##old##0, g) == (g##old##0 < g))
- >>> added before: g##old##0 := g;
- >>> added after: a##post##0 := a##post##0 && ##extracted_function##1(g##old##0, g);
-Processing command (at <unknown location>) a##post##0 := a##post##0 && ##extracted_function##1(g##old##0, g);
- >>> AssumeNegationOfAssumptionVariable
-Processing command (at Snapshots32.v1.bpl(9,5)) assert 0 < g;
- >>> MarkAsPartiallyVerified
-Snapshots32.v1.bpl(9,5): Error BP5001: This assertion might not hold.
-
-Boogie program verifier finished with 0 verified, 1 error
-Processing command (at Snapshots33.v0.bpl(10,5)) assert 0 < g;
- >>> DoNothingToAssert
-
-Boogie program verifier finished with 1 verified, 0 errors
-Processing call to procedure Q in implementation P (at Snapshots33.v1.bpl(5,5)):
- >>> added after: a##post##0 := a##post##0 && false;
-
-Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots0.v0.bpl(41,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots0.v0.bpl(41,5): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots0.v0.bpl(8,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots0.v0.bpl(8,5): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots0.v0.bpl(19,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots0.v0.bpl(19,5): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots0.v0.bpl(30,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots0.v0.bpl(30,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 4 errors
+Snapshots0.v0.bpl(41,5): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots0.v1.bpl(19,5)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots0.v1.bpl(30,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots0.v1.bpl(30,5): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots0.v1.bpl(41,5)) assert true;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 2 verified, 2 errors
+Snapshots0.v0.bpl(41,5): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots0.v2.bpl(19,5)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots0.v2.bpl(30,5)) assert true;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 2 verified, 1 error
+Processing command (at Snapshots1.v0.bpl(13,5)) assert 1 != 1;
+ >>> DoNothingToAssert
+Snapshots1.v0.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 1 verified, 1 error
+Processing command (at Snapshots1.v1.bpl(13,5)) assert 2 != 2;
+ >>> DoNothingToAssert
+Snapshots1.v1.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 1 verified, 1 error
+Processing call to procedure P2 in implementation P1 (at Snapshots1.v2.bpl(5,5)):
+ >>> added after: a##cached##0 := a##cached##0 && true;
+Processing implementation P2 (at Snapshots1.v2.bpl(12,51)):
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && true;
+Processing command (at Snapshots1.v2.bpl(5,5)) assert false;
+ >>> DoNothingToAssert
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && true;
+ >>> AssumeNegationOfAssumptionVariable
+Snapshots1.v2.bpl(5,5): Error BP5002: A precondition for this call might not hold.
+Snapshots1.v2.bpl(10,3): Related location: This is the precondition that might not hold.
+Processing command (at Snapshots1.v2.bpl(14,5)) assert 2 != 2;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 1 error
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P0 (at Snapshots2.v2.bpl(4,51)):
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && true;
+Processing call to procedure P0 in implementation P0 (at Snapshots2.v2.bpl(6,5)):
+ >>> added after: a##cached##1 := a##cached##1 && true;
+Processing command (at Snapshots2.v2.bpl(6,5)) assert F0();
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P0 (at Snapshots2.v3.bpl(4,51)):
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && false;
+Processing call to procedure P0 in implementation P0 (at Snapshots2.v3.bpl(6,5)):
+ >>> added after: a##cached##1 := a##cached##1 && false;
+Processing command (at Snapshots2.v3.bpl(6,5)) assert F0();
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P0 (at Snapshots2.v5.bpl(5,51)):
+ >>> added axiom: ##extracted_function##1() == F0()
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && ##extracted_function##1();
+Processing call to procedure P0 in implementation P0 (at Snapshots2.v5.bpl(7,5)):
+ >>> added axiom: ##extracted_function##2() == F0()
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##2();
+ >>> added after: a##cached##1 := a##cached##1 && true;
+Processing command (at Snapshots2.v5.bpl(7,5)) assume {:precondition_previous_snapshot} ##extracted_function##2();
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots2.v5.bpl(7,5)) assert F0();
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots2.v5.bpl(3,1)) assert F0();
+ >>> MarkAsPartiallyVerified
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots3.v0.bpl(2,1)) assert G();
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P0 (at Snapshots3.v1.bpl(4,51)):
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && false;
+Processing command (at Snapshots3.v1.bpl(2,1)) assert G();
+ >>> DoNothingToAssert
+Snapshots3.v1.bpl(6,1): Error BP5003: A postcondition might not hold on this return path.
+Snapshots3.v1.bpl(2,1): Related location: This is the postcondition that might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+
+Boogie program verifier finished with 3 verified, 0 errors
+Processing call to procedure P2 in implementation P1 (at Snapshots4.v1.bpl(14,5)):
+ >>> added after: a##cached##0 := a##cached##0 && false;
+Processing command (at Snapshots4.v1.bpl(23,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots4.v1.bpl(23,5): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots4.v1.bpl(28,3)) assert G();
+ >>> DoNothingToAssert
+Snapshots4.v1.bpl(33,1): Error BP5003: A postcondition might not hold on this return path.
+Snapshots4.v1.bpl(28,3): Related location: This is the postcondition that might not hold.
+
+Boogie program verifier finished with 2 verified, 2 errors
+Processing command (at Snapshots5.v0.bpl(5,5)) assert false;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P0 (at Snapshots5.v1.bpl(3,51)):
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && false;
+Processing command (at Snapshots5.v1.bpl(5,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots5.v1.bpl(5,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots6.v0.bpl(13,5)) assert y == 0;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots6.v1.bpl(11,5)):
+ >>> added axiom: (forall y##old##0: int, y: int :: {:weight 30} { ##extracted_function##1(y##old##0, y) } ##extracted_function##1(y##old##0, y) == (y##old##0 == y))
+ >>> added before: y##old##0 := y;
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##1(y##old##0, y);
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##1(y##old##0, y);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots6.v1.bpl(13,5)) assert y == 0;
+ >>> MarkAsPartiallyVerified
+Snapshots6.v1.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots7.v0.bpl(14,5)) assert y < 0;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots7.v1.bpl(12,5)):
+ >>> added axiom: (forall y: int, z: int :: {:weight 30} { ##extracted_function##1(y, z) } ##extracted_function##1(y, z) == (y < z))
+ >>> added before: y##old##0 := y;
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##1(y, z);
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##1(y, z);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots7.v1.bpl(14,5)) assert y < 0;
+ >>> MarkAsPartiallyVerified
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots8.v0.bpl(8,5)) assert 0 < call0formal#AT#n;
+ >>> DoNothingToAssert
+Processing command (at Snapshots8.v0.bpl(10,5)) assert 0 <= x;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots8.v1.bpl(8,5)):
+ >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n))
+ >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r))
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##2(call1formal#AT#r);
+Processing command (at Snapshots8.v1.bpl(8,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots8.v1.bpl(8,5)) assert 0 < call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##2(call1formal#AT#r);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots8.v1.bpl(10,5)) assert 0 <= x;
+ >>> MarkAsPartiallyVerified
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots9.v0.bpl(8,5)) assert 0 < call0formal#AT#n;
+ >>> DoNothingToAssert
+Processing command (at Snapshots9.v0.bpl(8,5)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots9.v0.bpl(10,5)) assert 0 <= x;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots9.v1.bpl(8,5)):
+ >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n && true))
+ >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r && true))
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##2(call1formal#AT#r);
+Processing command (at Snapshots9.v1.bpl(8,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots9.v1.bpl(8,5)) assert 0 < call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##2(call1formal#AT#r);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots9.v1.bpl(10,5)) assert 0 <= x;
+ >>> MarkAsPartiallyVerified
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots10.v0.bpl(8,5)) assert 0 < call0formal#AT#n;
+ >>> DoNothingToAssert
+Processing command (at Snapshots10.v0.bpl(12,5)) assert 0 <= x;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots10.v1.bpl(8,5)):
+ >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n))
+ >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r))
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##2(call1formal#AT#r);
+Processing command (at Snapshots10.v1.bpl(8,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots10.v1.bpl(8,5)) assert 0 < call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##2(call1formal#AT#r);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots10.v1.bpl(12,5)) assert 0 <= x;
+ >>> MarkAsPartiallyVerified
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots11.v0.bpl(7,5)) assert 0 < call0formal#AT#n;
+ >>> DoNothingToAssert
+Processing command (at Snapshots11.v0.bpl(9,5)) assert 0 <= x;
+ >>> DoNothingToAssert
+Snapshots11.v0.bpl(7,5): Error BP5002: A precondition for this call might not hold.
+Snapshots11.v0.bpl(13,3): Related location: This is the precondition that might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing call to procedure N in implementation M (at Snapshots11.v1.bpl(7,5)):
+ >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 < call0formal#AT#n))
+ >>> added axiom: (forall call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call1formal#AT#r) } ##extracted_function##2(call1formal#AT#r) == (0 < call1formal#AT#r))
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##2(call1formal#AT#r);
+Processing command (at Snapshots11.v1.bpl(7,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> DropAssume
+Processing command (at Snapshots11.v1.bpl(7,5)) assert 0 < call0formal#AT#n;
+ >>> RecycleError
+Processing command (at Snapshots11.v1.bpl(9,5)) assert 0 <= x;
+ >>> MarkAsPartiallyVerified
+Snapshots11.v0.bpl(7,5): Error BP5002: A precondition for this call might not hold.
+Snapshots11.v0.bpl(13,3): Related location: This is the precondition that might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots12.v0.bpl(7,5)) assert false;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots12.v1.bpl(5,5)):
+ >>> added after: a##cached##0 := a##cached##0 && false;
+Processing command (at Snapshots12.v1.bpl(7,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots12.v1.bpl(7,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots13.v0.bpl(7,5)) assert false;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots13.v1.bpl(5,5)):
+ >>> added after: a##cached##0 := a##cached##0 && false;
+Processing command (at Snapshots13.v1.bpl(7,5)) assert false;
+ >>> DoNothingToAssert
+Snapshots13.v1.bpl(7,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots14.v0.bpl(7,5)) assert false;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots14.v1.bpl(5,5)):
+ >>> added axiom: ##extracted_function##1() == (F() && G())
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##1();
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##1();
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots14.v1.bpl(7,5)) assert false;
+ >>> MarkAsPartiallyVerified
+Snapshots14.v1.bpl(7,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots15.v0.bpl(5,5)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots15.v0.bpl(9,5)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots15.v0.bpl(13,5)) assert false;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots15.v1.bpl(7,5)):
+ >>> added after: a##cached##0 := a##cached##0 && false;
+Processing call to procedure N in implementation M (at Snapshots15.v1.bpl(11,5)):
+ >>> added after: a##cached##1 := a##cached##1 && false;
+Processing command (at Snapshots15.v1.bpl(5,5)) assert true;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots15.v1.bpl(9,5)) assert true;
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots15.v1.bpl(13,5)) assert false;
+ >>> MarkAsPartiallyVerified
+Snapshots15.v1.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots16.v0.bpl(14,5)) assert F(0) == 1;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots16.v1.bpl(14,5)) assert F(0) == 1;
+ >>> DoNothingToAssert
+Snapshots16.v1.bpl(14,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots17.v0.bpl(28,5)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots17.v0.bpl(25,9)) assert false;
+ >>> DoNothingToAssert
+Processing command (at Snapshots17.v0.bpl(12,13)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots17.v0.bpl(20,13)) assert x == 1;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots17.v1.bpl(14,13)):
+ >>> added after: a##cached##0 := a##cached##0 && false;
+Processing call to procedure N in implementation M (at Snapshots17.v1.bpl(16,13)):
+ >>> added after: a##cached##1 := a##cached##1 && false;
+Processing call to procedure N in implementation M (at Snapshots17.v1.bpl(23,9)):
+ >>> added after: a##cached##2 := a##cached##2 && false;
+Processing command (at Snapshots17.v1.bpl(28,5)) assert true;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots17.v1.bpl(25,9)) assert false;
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots17.v1.bpl(12,13)) assert true;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots17.v1.bpl(20,13)) assert x == 1;
+ >>> MarkAsPartiallyVerified
+Snapshots17.v1.bpl(20,13): Error BP5001: This assertion might not hold.
+Snapshots17.v1.bpl(25,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 2 errors
+Processing command (at Snapshots18.v0.bpl(7,9)) assert 0 == 0;
+ >>> DoNothingToAssert
+Processing command (at Snapshots18.v0.bpl(17,9)) assert 1 != 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots18.v0.bpl(20,5)) assert 2 != 2;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure N in implementation M (at Snapshots18.v1.bpl(9,9)):
+ >>> added after: a##cached##0 := a##cached##0 && false;
+Processing call to procedure N in implementation M (at Snapshots18.v1.bpl(10,9)):
+ >>> added after: a##cached##1 := a##cached##1 && false;
+Processing command (at Snapshots18.v1.bpl(7,9)) assert 0 == 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots18.v1.bpl(17,9)) assert 1 != 1;
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots18.v1.bpl(20,5)) assert 2 != 2;
+ >>> MarkAsPartiallyVerified
+Snapshots18.v1.bpl(17,9): Error BP5001: This assertion might not hold.
+Snapshots18.v1.bpl(20,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 2 errors
+Processing command (at Snapshots19.v0.bpl(5,5)) assert 2 == 2;
+ >>> DoNothingToAssert
+Processing command (at Snapshots19.v0.bpl(7,5)) assert 1 != 1;
+ >>> DoNothingToAssert
+Snapshots19.v0.bpl(7,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing call to procedure N in implementation M (at Snapshots19.v1.bpl(5,5)):
+ >>> added axiom: ##extracted_function##1() == (2 == 2)
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1();
+ >>> added after: a##cached##0 := a##cached##0 && true;
+Processing command (at Snapshots19.v1.bpl(5,5)) assume {:precondition_previous_snapshot} ##extracted_function##1();
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots19.v1.bpl(5,5)) assert 2 == 2;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots19.v1.bpl(7,5)) assert 1 != 1;
+ >>> DoNothingToAssert
+Snapshots19.v1.bpl(7,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots20.v0.bpl(9,9)) assert 1 != 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots20.v0.bpl(13,9)) assert 2 != 2;
+ >>> DoNothingToAssert
+Processing command (at Snapshots20.v0.bpl(16,5)) assert 3 != 3;
+ >>> DoNothingToAssert
+Snapshots20.v0.bpl(13,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing call to procedure N in implementation M (at Snapshots20.v1.bpl(7,9)):
+ >>> added axiom: ##extracted_function##1() == (0 != 0)
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##1();
+Processing command (at Snapshots20.v1.bpl(9,9)) assert 1 != 1;
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots20.v1.bpl(13,9)) assert 2 != 2;
+ >>> RecycleError
+Processing command (at Snapshots20.v1.bpl(16,5)) assert 3 != 3;
+ >>> MarkAsPartiallyVerified
+Snapshots20.v1.bpl(9,9): Error BP5001: This assertion might not hold.
+Snapshots20.v0.bpl(13,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 2 errors
+Processing command (at Snapshots21.v0.bpl(7,9)) assert 1 != 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots21.v0.bpl(11,9)) assert 2 != 2;
+ >>> DoNothingToAssert
+Processing command (at Snapshots21.v0.bpl(14,5)) assert 3 != 3;
+ >>> DoNothingToAssert
+Snapshots21.v0.bpl(7,9): Error BP5001: This assertion might not hold.
+Snapshots21.v0.bpl(11,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 2 errors
+Processing command (at Snapshots21.v1.bpl(7,9)) assert 1 == 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots21.v1.bpl(11,9)) assert 2 != 2;
+ >>> RecycleError
+Processing command (at Snapshots21.v1.bpl(14,5)) assert 3 != 3;
+ >>> DoNothingToAssert
+Snapshots21.v0.bpl(11,9): Error BP5001: This assertion might not hold.
+Snapshots21.v1.bpl(14,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 2 errors
+Processing command (at Snapshots22.v0.bpl(7,9)) assert 1 != 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots22.v0.bpl(11,9)) assert 2 == 2;
+ >>> DoNothingToAssert
+Processing command (at Snapshots22.v0.bpl(14,5)) assert 3 == 3;
+ >>> DoNothingToAssert
+Snapshots22.v0.bpl(7,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots22.v1.bpl(7,9)) assert 1 == 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots22.v1.bpl(11,9)) assert 2 == 2;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots22.v1.bpl(14,5)) assert 3 == 3;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots23.v0.bpl(7,9)) assert 1 != 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots23.v0.bpl(11,9)) assert 2 == 2;
+ >>> DoNothingToAssert
+Processing command (at Snapshots23.v0.bpl(14,5)) assert 3 == 3;
+ >>> DoNothingToAssert
+Snapshots23.v0.bpl(7,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 1 verified, 1 error
+Snapshots23.v0.bpl(7,9): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots23.v1.bpl(22,5)) assert 4 == 4;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 1 error
+Processing command (at Snapshots23.v2.bpl(8,9)) assert 1 != 1;
+ >>> RecycleError
+Processing command (at Snapshots23.v2.bpl(12,9)) assert 2 == 2;
+ >>> MarkAsFullyVerified
+Snapshots23.v0.bpl(7,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 1 verified, 1 error
+Processing command (at Snapshots24.v0.bpl(7,9)) assert {:subsumption 0} 1 != 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v0.bpl(11,9)) assert {:subsumption 1} 5 != 5;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v0.bpl(15,9)) assert {:subsumption 2} 6 != 6;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v0.bpl(19,9)) assert {:subsumption 1} 2 == 2;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v0.bpl(20,9)) assert {:subsumption 2} 4 == 4;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v0.bpl(21,9)) assert 5 == 5;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v0.bpl(24,5)) assert {:subsumption 0} 3 == 3;
+ >>> DoNothingToAssert
+Snapshots24.v0.bpl(7,9): Error BP5001: This assertion might not hold.
+Snapshots24.v0.bpl(11,9): Error BP5001: This assertion might not hold.
+Snapshots24.v0.bpl(15,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 3 errors
+Processing command (at Snapshots24.v1.bpl(7,9)) assert {:subsumption 0} 1 == 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v1.bpl(11,9)) assert {:subsumption 1} 5 == 5;
+ >>> DoNothingToAssert
+Processing command (at Snapshots24.v1.bpl(15,9)) assert {:subsumption 2} 6 != 6;
+ >>> RecycleError
+Processing command (at Snapshots24.v1.bpl(19,9)) assert {:subsumption 1} 2 == 2;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots24.v1.bpl(20,9)) assert {:subsumption 2} 4 == 4;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots24.v1.bpl(21,9)) assert 5 == 5;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots24.v1.bpl(24,5)) assert {:subsumption 0} 3 == 3;
+ >>> DoNothingToAssert
+Snapshots24.v0.bpl(15,9): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots25.v0.bpl(12,5)) assert 0 == 0;
+ >>> DoNothingToAssert
+Processing command (at Snapshots25.v0.bpl(13,5)) assert x != x;
+ >>> DoNothingToAssert
+Snapshots25.v0.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots25.v1.bpl(12,5)) assert 0 == 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots25.v1.bpl(13,5)) assert x != x;
+ >>> RecycleError
+Snapshots25.v0.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots26.v0.bpl(12,5)) assert 0 == 0;
+ >>> DoNothingToAssert
+Processing command (at Snapshots26.v0.bpl(13,5)) assert x != x;
+ >>> DoNothingToAssert
+Snapshots26.v0.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots26.v1.bpl(13,5)) assert 0 == 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots26.v1.bpl(14,5)) assert x != x;
+ >>> RecycleError
+Snapshots26.v0.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots27.v0.bpl(12,5)) assert 0 == 0;
+ >>> DoNothingToAssert
+Processing command (at Snapshots27.v0.bpl(13,5)) assert x != x;
+ >>> DoNothingToAssert
+Snapshots27.v0.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots27.v1.bpl(14,5)) assert 0 == 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots27.v1.bpl(15,5)) assert x != x;
+ >>> RecycleError
+Snapshots27.v0.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots28.v0.bpl(13,5)) assert 0 == 0;
+ >>> DoNothingToAssert
+Processing command (at Snapshots28.v0.bpl(14,5)) assert x == 0;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots28.v1.bpl(14,5)) assert 0 == 0;
+ >>> DoNothingToAssert
+Processing command (at Snapshots28.v1.bpl(15,5)) assert x == 0;
+ >>> DoNothingToAssert
+Snapshots28.v1.bpl(15,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots30.v0.bpl(5,5)) assert 0 == 0;
+ >>> DoNothingToAssert
+Processing command (at Snapshots30.v0.bpl(5,5)) assert 1 == 1;
+ >>> DoNothingToAssert
+Processing command (at Snapshots30.v0.bpl(5,5)) assert 2 != 2;
+ >>> DoNothingToAssert
+Processing command (at Snapshots30.v0.bpl(5,5)) assert 3 == 3;
+ >>> DoNothingToAssert
+Processing command (at Snapshots30.v0.bpl(5,5)) assert 4 == 4;
+ >>> DoNothingToAssert
+Snapshots30.v0.bpl(5,5): Error BP5002: A precondition for this call might not hold.
+Snapshots30.v0.bpl(11,3): Related location: This is the precondition that might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots30.v1.bpl(5,5)) assert 0 == 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots30.v1.bpl(5,5)) assert 1 == 1;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots30.v1.bpl(5,5)) assert 2 != 2;
+ >>> RecycleError
+Processing command (at Snapshots30.v1.bpl(5,5)) assert 3 == 3;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots30.v1.bpl(5,5)) assert 4 == 4;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots30.v1.bpl(6,5)) assert 5 == 5;
+ >>> DoNothingToAssert
+Snapshots30.v0.bpl(5,5): Error BP5002: A precondition for this call might not hold.
+Snapshots30.v0.bpl(11,3): Related location: This is the precondition that might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots31.v0.bpl(10,5)) assert 0 < g;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure Q in implementation P (at Snapshots31.v1.bpl(9,5)):
+ >>> added axiom: (forall call0old#AT#g: int, g: int :: {:weight 30} { ##extracted_function##1(call0old#AT#g, g) } ##extracted_function##1(call0old#AT#g, g) == (call0old#AT#g < g))
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##1(call0old#AT#g, g);
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##1(call0old#AT#g, g);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots31.v1.bpl(10,5)) assert 0 < g;
+ >>> MarkAsPartiallyVerified
+Snapshots31.v1.bpl(10,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots32.v0.bpl(10,5)) assert 0 < g;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing call to procedure Q in implementation P (at Snapshots32.v1.bpl(8,5)):
+ >>> added axiom: (forall g##old##0: int, g: int :: {:weight 30} { ##extracted_function##1(g##old##0, g) } ##extracted_function##1(g##old##0, g) == (g##old##0 < g))
+ >>> added before: g##old##0 := g;
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##1(g##old##0, g);
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##1(g##old##0, g);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots32.v1.bpl(9,5)) assert 0 < g;
+ >>> MarkAsPartiallyVerified
+Snapshots32.v1.bpl(9,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots33.v0.bpl(10,5)) assert 0 < g;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P (at Snapshots33.v1.bpl(3,42)):
+ >>> added axiom: (forall g: int :: {:weight 30} { ##extracted_function##1(g) } ##extracted_function##1(g) == (g == 0))
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && ##extracted_function##1(g);
+Processing call to procedure Q in implementation P (at Snapshots33.v1.bpl(5,5)):
+ >>> added after: a##cached##1 := a##cached##1 && false;
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots34.v0.bpl(6,5)) assert 1 != 1;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P (at Snapshots34.v1.bpl(3,42)):
+ >>> added axiom: ##extracted_function##1() == (0 != 0)
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && ##extracted_function##1();
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##1();
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots34.v1.bpl(5,5)) assert 1 != 1;
+ >>> MarkAsPartiallyVerified
+Snapshots34.v1.bpl(5,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots35.v0.bpl(6,5)) assert p;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing implementation P (at Snapshots35.v1.bpl(3,42)):
+ >>> added axiom: (forall p: bool :: {:weight 30} { ##extracted_function##1(p) } ##extracted_function##1(p) == p)
+ >>> added after assuming the current precondition: a##cached##0 := a##cached##0 && ##extracted_function##1(p);
+Processing command (at <unknown location>) a##cached##0 := a##cached##0 && ##extracted_function##1(p);
+ >>> AssumeNegationOfAssumptionVariable
+Processing command (at Snapshots35.v1.bpl(5,5)) assert p;
+ >>> MarkAsPartiallyVerified
+Snapshots35.v1.bpl(5,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots36.v0.bpl(13,5)) assert l[0];
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots36.v1.bpl(13,5)) assert l[0];
+ >>> DoNothingToAssert
+Snapshots36.v1.bpl(13,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots37.v0.bpl(8,5)) assert l[0];
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots37.v1.bpl(8,5)) assert l[0];
+ >>> DoNothingToAssert
+Snapshots37.v1.bpl(8,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots38.v0.bpl(7,5)) assert 0 <= call0formal#AT#n;
+ >>> DoNothingToAssert
+Processing command (at Snapshots38.v0.bpl(8,5)) assert r != 0;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots38.v1.bpl(7,5)) assert 0 <= call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots38.v1.bpl(8,5)) assert r != 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots38.v1.bpl(9,5)) assert 42 <= r;
+ >>> DoNothingToAssert
+Snapshots38.v1.bpl(9,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing call to procedure Sum in implementation Callee (at Snapshots38.v2.bpl(7,5)):
+ >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 <= call0formal#AT#n))
+ >>> added axiom: (forall call0formal#AT#n: int, call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call0formal#AT#n, call1formal#AT#r) } ##extracted_function##2(call0formal#AT#n, call1formal#AT#r) == (call0formal#AT#n != 0 ==> 1 <= call1formal#AT#r))
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##2(call0formal#AT#n, call1formal#AT#r);
+Processing command (at Snapshots38.v2.bpl(7,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots38.v2.bpl(7,5)) assert 0 <= call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots38.v2.bpl(8,5)) assert r != 0;
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots38.v2.bpl(9,5)) assert 42 <= r;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots39.v0.bpl(7,5)) assert 0 <= call0formal#AT#n;
+ >>> DoNothingToAssert
+Processing command (at Snapshots39.v0.bpl(8,5)) assert r != 0;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots39.v1.bpl(7,5)) assert 0 <= call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots39.v1.bpl(8,5)) assert r != 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots39.v1.bpl(9,5)) assert r == 42 * 43 div 2;
+ >>> DoNothingToAssert
+Snapshots39.v1.bpl(9,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing call to procedure Sum in implementation Callee (at Snapshots39.v2.bpl(7,5)):
+ >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 <= call0formal#AT#n))
+ >>> added axiom: (forall call0formal#AT#n: int, call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call0formal#AT#n, call1formal#AT#r) } ##extracted_function##2(call0formal#AT#n, call1formal#AT#r) == (call0formal#AT#n <= call1formal#AT#r))
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##2(call0formal#AT#n, call1formal#AT#r);
+Processing command (at Snapshots39.v2.bpl(7,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots39.v2.bpl(7,5)) assert 0 <= call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots39.v2.bpl(8,5)) assert r != 0;
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots39.v2.bpl(9,5)) assert r == 42 * 43 div 2;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 1 verified, 0 errors
+Processing command (at Snapshots40.v0.bpl(7,5)) assert b;
+ >>> DoNothingToAssert
+Processing command (at Snapshots40.v0.bpl(8,5)) assert 0 <= call0formal#AT#n;
+ >>> DoNothingToAssert
+Processing command (at Snapshots40.v0.bpl(9,5)) assert r != 0;
+ >>> DoNothingToAssert
+Snapshots40.v0.bpl(7,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots40.v1.bpl(7,5)) assert b;
+ >>> RecycleError
+Processing command (at Snapshots40.v1.bpl(8,5)) assert 0 <= call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots40.v1.bpl(9,5)) assert r != 0;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots40.v1.bpl(10,5)) assert r == 42 * 43 div 2;
+ >>> DoNothingToAssert
+Snapshots40.v0.bpl(7,5): Error BP5001: This assertion might not hold.
+Snapshots40.v1.bpl(10,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 2 errors
+Processing call to procedure Sum in implementation Foo (at Snapshots40.v2.bpl(8,5)):
+ >>> added axiom: (forall call0formal#AT#n: int :: {:weight 30} { ##extracted_function##1(call0formal#AT#n) } ##extracted_function##1(call0formal#AT#n) == (0 <= call0formal#AT#n))
+ >>> added axiom: (forall call0formal#AT#n: int, call1formal#AT#r: int :: {:weight 30} { ##extracted_function##2(call0formal#AT#n, call1formal#AT#r) } ##extracted_function##2(call0formal#AT#n, call1formal#AT#r) == (call0formal#AT#n <= call1formal#AT#r))
+ >>> added before precondition check: assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> added after: a##cached##0 := a##cached##0 && ##extracted_function##2(call0formal#AT#n, call1formal#AT#r);
+Processing command (at Snapshots40.v2.bpl(7,5)) assert b;
+ >>> RecycleError
+Processing command (at Snapshots40.v2.bpl(8,5)) assume {:precondition_previous_snapshot} ##extracted_function##1(call0formal#AT#n);
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots40.v2.bpl(8,5)) assert 0 <= call0formal#AT#n;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots40.v2.bpl(9,5)) assert r != 0;
+ >>> MarkAsPartiallyVerified
+Processing command (at Snapshots40.v2.bpl(10,5)) assert r == 42 * 43 div 2;
+ >>> DoNothingToAssert
+Snapshots40.v0.bpl(7,5): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 0 verified, 1 error
+Processing command (at Snapshots41.v0.bpl(3,23)) assert x < 20 || 10 <= x;
+ >>> DoNothingToAssert
+Processing command (at Snapshots41.v0.bpl(4,3)) assert x < 10;
+ >>> DoNothingToAssert
+Processing command (at Snapshots41.v0.bpl(5,3)) assert 0 <= call0formal#AT#y;
+ >>> DoNothingToAssert
+Snapshots41.v0.bpl(4,3): Error BP5001: This assertion might not hold.
+Snapshots41.v0.bpl(5,3): Error BP5002: A precondition for this call might not hold.
+Snapshots41.v0.bpl(9,3): Related location: This is the precondition that might not hold.
+Processing command (at Snapshots41.v0.bpl(15,3)) assert 2 <= z;
+ >>> DoNothingToAssert
+Snapshots41.v0.bpl(22,3): Error BP5003: A postcondition might not hold on this return path.
+Snapshots41.v0.bpl(15,3): Related location: This is the postcondition that might not hold.
+Processing command (at Snapshots41.v0.bpl(28,3)) assert u != 53;
+ >>> DoNothingToAssert
+Snapshots41.v0.bpl(28,3): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots41.v0.bpl(34,3)) assert true;
+ >>> DoNothingToAssert
+
+Boogie program verifier finished with 2 verified, 4 errors
+Processing command (at Snapshots41.v1.bpl(4,1)) assert x < 20 || 10 <= x;
+ >>> MarkAsFullyVerified
+Processing command (at Snapshots41.v1.bpl(6,8)) assert x < 10;
+ >>> RecycleError
+Processing command (at Snapshots41.v1.bpl(7,3)) assert 0 <= call0formal#AT#y;
+ >>> RecycleError
+Processing command (at Snapshots41.v1.bpl(8,3)) assert x == 7;
+ >>> DoNothingToAssert
+Snapshots41.v1.bpl(6,8): Error BP5001: This assertion might not hold.
+Snapshots41.v1.bpl(7,3): Error BP5002: A precondition for this call might not hold.
+Snapshots41.v1.bpl(13,10): Related location: This is the precondition that might not hold.
+Snapshots41.v1.bpl(8,3): Error BP5001: This assertion might not hold.
+Processing command (at Snapshots41.v1.bpl(27,5)) assert true;
+ >>> DoNothingToAssert
+Processing command (at Snapshots41.v1.bpl(21,3)) assert 2 <= z;
+ >>> DoNothingToAssert
+Snapshots41.v1.bpl(29,3): Error BP5003: A postcondition might not hold on this return path.
+Snapshots41.v1.bpl(21,3): Related location: This is the postcondition that might not hold.
+Processing command (at Snapshots41.v1.bpl(35,8)) assert u != 53;
+ >>> RecycleError
+Snapshots41.v1.bpl(35,8): Error BP5001: This assertion might not hold.
+
+Boogie program verifier finished with 2 verified, 5 errors
diff --git a/Test/stratifiedinline/bar1.bpl b/Test/stratifiedinline/bar1.bpl
index fdce8177..11256950 100644
--- a/Test/stratifiedinline/bar1.bpl
+++ b/Test/stratifiedinline/bar1.bpl
@@ -1,28 +1,28 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var x: int;
-var y: int;
-
-procedure bar()
-modifies y;
-{
- y := y + 1;
-}
-
-procedure foo()
-modifies x, y;
-{
- x := x + 1;
- call bar();
- call bar();
- x := x + 1;
-}
-
-procedure {:entrypoint} main()
-modifies x, y;
-{
- assume x == y;
- call foo();
- assume x == y;
-}
-
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var x: int;
+var y: int;
+
+procedure bar()
+modifies y;
+{
+ y := y + 1;
+}
+
+procedure foo()
+modifies x, y;
+{
+ x := x + 1;
+ call bar();
+ call bar();
+ x := x + 1;
+}
+
+procedure {:entrypoint} main()
+modifies x, y;
+{
+ assume x == y;
+ call foo();
+ assume x == y;
+}
+
diff --git a/Test/stratifiedinline/bar10.bpl b/Test/stratifiedinline/bar10.bpl
index 477cfb04..fef92a9e 100644
--- a/Test/stratifiedinline/bar10.bpl
+++ b/Test/stratifiedinline/bar10.bpl
@@ -1,43 +1,43 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var i: int;
-var m: int;
-
-procedure foo()
-modifies i;
-{
- if (i < 20) {
- i := i + 1;
- call foo();
- }
-}
-
-procedure bar1(j: int)
-modifies i;
-{
- if (j < 2*m)
- {
- i := i + 1;
- call bar1(j+1);
- }
-}
-
-procedure bar2(j: int)
-modifies i;
-{
- if (j < m) {
- i := i - 1;
- call bar2(j+1);
- }
-}
-
-procedure {:entrypoint} main()
-modifies i;
-{
- i := 0;
- call bar1(0);
- call bar2(0);
- i := 0;
- call foo();
- assume !(i < 10);
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var i: int;
+var m: int;
+
+procedure foo()
+modifies i;
+{
+ if (i < 20) {
+ i := i + 1;
+ call foo();
+ }
+}
+
+procedure bar1(j: int)
+modifies i;
+{
+ if (j < 2*m)
+ {
+ i := i + 1;
+ call bar1(j+1);
+ }
+}
+
+procedure bar2(j: int)
+modifies i;
+{
+ if (j < m) {
+ i := i - 1;
+ call bar2(j+1);
+ }
+}
+
+procedure {:entrypoint} main()
+modifies i;
+{
+ i := 0;
+ call bar1(0);
+ call bar2(0);
+ i := 0;
+ call foo();
+ assume !(i < 10);
+}
diff --git a/Test/stratifiedinline/bar11.bpl b/Test/stratifiedinline/bar11.bpl
index b25d8451..913501cc 100644
--- a/Test/stratifiedinline/bar11.bpl
+++ b/Test/stratifiedinline/bar11.bpl
@@ -1,33 +1,33 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var x: int;
-var y: int;
-procedure boogie_si_record_int(x:int);
-
-procedure bar()
-modifies y;
-{
- y := y + 1;
- call boogie_si_record_int(y);
-}
-
-procedure foo()
-modifies x, y;
-{
- call boogie_si_record_int(x);
- x := x + 1;
- call bar();
- call bar();
- x := x + 1;
- call boogie_si_record_int(x);
-}
-
-procedure {:entrypoint} main()
-modifies x, y;
-{
- assume x == 0;
- assume x == y;
- call foo();
- assume x == y;
-}
-
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var x: int;
+var y: int;
+procedure boogie_si_record_int(x:int);
+
+procedure bar()
+modifies y;
+{
+ y := y + 1;
+ call boogie_si_record_int(y);
+}
+
+procedure foo()
+modifies x, y;
+{
+ call boogie_si_record_int(x);
+ x := x + 1;
+ call bar();
+ call bar();
+ x := x + 1;
+ call boogie_si_record_int(x);
+}
+
+procedure {:entrypoint} main()
+modifies x, y;
+{
+ assume x == 0;
+ assume x == y;
+ call foo();
+ assume x == y;
+}
+
diff --git a/Test/stratifiedinline/bar12.bpl b/Test/stratifiedinline/bar12.bpl
index b11daa52..1f28e212 100644
--- a/Test/stratifiedinline/bar12.bpl
+++ b/Test/stratifiedinline/bar12.bpl
@@ -1,10 +1,10 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:inline} f(a:bool) : bool { true }
-
-procedure {:entrypoint} main()
-{
- var x: int;
- assume f(x >= 0);
- assume x >= 0;
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:inline} f(a:bool) : bool { true }
+
+procedure {:entrypoint} main()
+{
+ var x: int;
+ assume f(x >= 0);
+ assume x >= 0;
+}
diff --git a/Test/stratifiedinline/bar13.bpl b/Test/stratifiedinline/bar13.bpl
index 7c8cc9bd..6447f622 100644
--- a/Test/stratifiedinline/bar13.bpl
+++ b/Test/stratifiedinline/bar13.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var alloc: int;
-var assertsPassed: bool;
-procedure boogie_si_record_li2bpl_int(x: int);
-
-procedure __HAVOC_malloc(size: int) returns (ret: int);
- free requires size >= 0;
- modifies alloc;
- free ensures ret == old(alloc);
- free ensures alloc >= old(alloc) + size;
-
-
-procedure foo(arg: int)
- modifies alloc;
-{
- var tt: int;
-
- anon0__unique__1:
- // assume NumberOfBytes_2 >= 0;
- call boogie_si_record_li2bpl_int(arg);
- call tt := __HAVOC_malloc(arg);
- call boogie_si_record_li2bpl_int(alloc);
- return;
-}
-
-procedure {:entrypoint} main()
- modifies alloc;
-{
- var t1: int;
-
- assume alloc > 0;
- call foo(t1);
- assume alloc < 0;
-}
-
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var alloc: int;
+var assertsPassed: bool;
+procedure boogie_si_record_li2bpl_int(x: int);
+
+procedure __HAVOC_malloc(size: int) returns (ret: int);
+ free requires size >= 0;
+ modifies alloc;
+ free ensures ret == old(alloc);
+ free ensures alloc >= old(alloc) + size;
+
+
+procedure foo(arg: int)
+ modifies alloc;
+{
+ var tt: int;
+
+ anon0__unique__1:
+ // assume NumberOfBytes_2 >= 0;
+ call boogie_si_record_li2bpl_int(arg);
+ call tt := __HAVOC_malloc(arg);
+ call boogie_si_record_li2bpl_int(alloc);
+ return;
+}
+
+procedure {:entrypoint} main()
+ modifies alloc;
+{
+ var t1: int;
+
+ assume alloc > 0;
+ call foo(t1);
+ assume alloc < 0;
+}
+
diff --git a/Test/stratifiedinline/bar2.bpl b/Test/stratifiedinline/bar2.bpl
index a4f367de..beebf459 100644
--- a/Test/stratifiedinline/bar2.bpl
+++ b/Test/stratifiedinline/bar2.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure foo() returns (x: bool)
-{
- var b: bool;
- if (b) {
- x := false;
- return;
- } else {
- x := true;
- return;
- }
-}
-
-procedure {:entrypoint} main()
-{
- var b1: bool;
- var b2: bool;
-
- call b1 := foo();
- call b2 := foo();
- assume b1 != b2;
-}
-
-
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure foo() returns (x: bool)
+{
+ var b: bool;
+ if (b) {
+ x := false;
+ return;
+ } else {
+ x := true;
+ return;
+ }
+}
+
+procedure {:entrypoint} main()
+{
+ var b1: bool;
+ var b2: bool;
+
+ call b1 := foo();
+ call b2 := foo();
+ assume b1 != b2;
+}
+
+
diff --git a/Test/stratifiedinline/bar3.bpl b/Test/stratifiedinline/bar3.bpl
index 4625552b..e405ec47 100644
--- a/Test/stratifiedinline/bar3.bpl
+++ b/Test/stratifiedinline/bar3.bpl
@@ -1,41 +1,41 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var y: int;
-var x: int;
-
-procedure bar(b: bool)
-modifies y;
-{
- if (b) {
- y := y + 1;
- } else {
- y := y - 1;
- }
-}
-
-procedure foo()
-modifies x, y;
-{
- var b: bool;
- if (b) {
- x := x + 1;
- call bar(true);
- call bar(true);
- x := x + 1;
- } else {
- x := x - 1;
- call bar(false);
- call bar(false);
- x := x - 1;
- }
-}
-
-
-procedure {:entrypoint} main()
-modifies x, y;
-{
- assume x == y;
- call foo();
- call bar(false);
- assume x != y;
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var y: int;
+var x: int;
+
+procedure bar(b: bool)
+modifies y;
+{
+ if (b) {
+ y := y + 1;
+ } else {
+ y := y - 1;
+ }
+}
+
+procedure foo()
+modifies x, y;
+{
+ var b: bool;
+ if (b) {
+ x := x + 1;
+ call bar(true);
+ call bar(true);
+ x := x + 1;
+ } else {
+ x := x - 1;
+ call bar(false);
+ call bar(false);
+ x := x - 1;
+ }
+}
+
+
+procedure {:entrypoint} main()
+modifies x, y;
+{
+ assume x == y;
+ call foo();
+ call bar(false);
+ assume x != y;
+}
diff --git a/Test/stratifiedinline/bar4.bpl b/Test/stratifiedinline/bar4.bpl
index 948683f8..4cf52946 100644
--- a/Test/stratifiedinline/bar4.bpl
+++ b/Test/stratifiedinline/bar4.bpl
@@ -1,39 +1,39 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var y: int;
-var x: int;
-
-procedure bar() returns (b: bool)
-modifies y;
-{
- if (b) {
- y := y + 1;
- } else {
- y := y - 1;
- }
-}
-
-procedure foo()
-modifies x, y;
-{
- var b: bool;
-
- call b := bar();
- if (b) {
- x := x + 1;
- } else {
- x := x - 1;
- }
-}
-
-
-procedure {:entrypoint} main() returns (b: bool)
-modifies x, y;
-{
- assume x == y;
- call foo();
- if (x == y) {
- call b := bar();
- assume (if b then x+1 != y else x != y+1);
- }
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var y: int;
+var x: int;
+
+procedure bar() returns (b: bool)
+modifies y;
+{
+ if (b) {
+ y := y + 1;
+ } else {
+ y := y - 1;
+ }
+}
+
+procedure foo()
+modifies x, y;
+{
+ var b: bool;
+
+ call b := bar();
+ if (b) {
+ x := x + 1;
+ } else {
+ x := x - 1;
+ }
+}
+
+
+procedure {:entrypoint} main() returns (b: bool)
+modifies x, y;
+{
+ assume x == y;
+ call foo();
+ if (x == y) {
+ call b := bar();
+ assume (if b then x+1 != y else x != y+1);
+ }
+}
diff --git a/Test/stratifiedinline/bar6.bpl b/Test/stratifiedinline/bar6.bpl
index d763a82c..68c1faac 100644
--- a/Test/stratifiedinline/bar6.bpl
+++ b/Test/stratifiedinline/bar6.bpl
@@ -1,38 +1,38 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var M: [int]int;
-
-procedure bar(y: int) returns (b: bool)
-modifies M;
-{
- if (b) {
- M[y] := M[y] + 1;
- } else {
- M[y] := M[y] - 1;
- }
-}
-
-procedure foo(x: int, y: int)
-modifies M;
-{
- var b: bool;
-
- call b := bar(y);
- if (b) {
- M[x] := M[x] + 1;
- } else {
- M[x] := M[x] - 1;
- }
-}
-
-procedure {:entrypoint} main(x: int, y: int) returns (b: bool)
-modifies M;
-{
- assume x != y;
- assume M[x] == M[y];
- call foo(x, y);
- if (M[x] == M[y]) {
- call b := bar(y);
- assume (if b then M[x]+1 != M[y] else M[x] != M[y]+1);
- }
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var M: [int]int;
+
+procedure bar(y: int) returns (b: bool)
+modifies M;
+{
+ if (b) {
+ M[y] := M[y] + 1;
+ } else {
+ M[y] := M[y] - 1;
+ }
+}
+
+procedure foo(x: int, y: int)
+modifies M;
+{
+ var b: bool;
+
+ call b := bar(y);
+ if (b) {
+ M[x] := M[x] + 1;
+ } else {
+ M[x] := M[x] - 1;
+ }
+}
+
+procedure {:entrypoint} main(x: int, y: int) returns (b: bool)
+modifies M;
+{
+ assume x != y;
+ assume M[x] == M[y];
+ call foo(x, y);
+ if (M[x] == M[y]) {
+ call b := bar(y);
+ assume (if b then M[x]+1 != M[y] else M[x] != M[y]+1);
+ }
+}
diff --git a/Test/stratifiedinline/bar7.bpl b/Test/stratifiedinline/bar7.bpl
index 1c83fb68..e2af0e84 100644
--- a/Test/stratifiedinline/bar7.bpl
+++ b/Test/stratifiedinline/bar7.bpl
@@ -1,45 +1,45 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var i: int;
-var m: int;
-
-procedure foo()
-modifies i;
-{
- if (i < 20) {
- i := i + 1;
- call foo();
- }
-}
-
-procedure bar1(j: int)
-modifies i;
-{
- if (j < 2*m)
- {
- i := i + 1;
- call bar1(j+1);
- }
-}
-
-procedure bar2(j: int)
-modifies i;
-{
- if (j < m) {
- i := i - 1;
- call bar2(j+1);
- }
-}
-
-procedure {:entrypoint} main()
-modifies i;
-{
- i := 0;
- if (*) {
- call foo();
- } else {
- call bar1(0);
- call bar2(0);
- }
- assume !(i < 10);
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var i: int;
+var m: int;
+
+procedure foo()
+modifies i;
+{
+ if (i < 20) {
+ i := i + 1;
+ call foo();
+ }
+}
+
+procedure bar1(j: int)
+modifies i;
+{
+ if (j < 2*m)
+ {
+ i := i + 1;
+ call bar1(j+1);
+ }
+}
+
+procedure bar2(j: int)
+modifies i;
+{
+ if (j < m) {
+ i := i - 1;
+ call bar2(j+1);
+ }
+}
+
+procedure {:entrypoint} main()
+modifies i;
+{
+ i := 0;
+ if (*) {
+ call foo();
+ } else {
+ call bar1(0);
+ call bar2(0);
+ }
+ assume !(i < 10);
+}
diff --git a/Test/stratifiedinline/bar8.bpl b/Test/stratifiedinline/bar8.bpl
index e46b24e7..f6c8b42c 100644
--- a/Test/stratifiedinline/bar8.bpl
+++ b/Test/stratifiedinline/bar8.bpl
@@ -1,44 +1,44 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var i: int;
-var m: int;
-
-procedure foo()
-modifies i;
-{
- if (i < 20) {
- i := i + 1;
- call foo();
- }
-}
-
-procedure bar1(j: int)
-modifies i;
-{
- if (j < 2*m) {
- i := i + 1;
- call bar1(j+1);
- }
-}
-
-procedure bar2(j: int)
-modifies i;
-{
- if (j < m) {
- i := i - 2;
- call bar2(j+1);
- }
-}
-
-procedure {:entrypoint} main()
-modifies i;
-{
- i := 0;
- if (*) {
- call foo();
- } else {
- call bar1(0);
- call bar2(0);
- }
- assume !(i < 10);
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var i: int;
+var m: int;
+
+procedure foo()
+modifies i;
+{
+ if (i < 20) {
+ i := i + 1;
+ call foo();
+ }
+}
+
+procedure bar1(j: int)
+modifies i;
+{
+ if (j < 2*m) {
+ i := i + 1;
+ call bar1(j+1);
+ }
+}
+
+procedure bar2(j: int)
+modifies i;
+{
+ if (j < m) {
+ i := i - 2;
+ call bar2(j+1);
+ }
+}
+
+procedure {:entrypoint} main()
+modifies i;
+{
+ i := 0;
+ if (*) {
+ call foo();
+ } else {
+ call bar1(0);
+ call bar2(0);
+ }
+ assume !(i < 10);
+}
diff --git a/Test/stratifiedinline/bar9.bpl b/Test/stratifiedinline/bar9.bpl
index e5a84185..e91fb0a4 100644
--- a/Test/stratifiedinline/bar9.bpl
+++ b/Test/stratifiedinline/bar9.bpl
@@ -1,47 +1,47 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var i: int;
-var m: int;
-
-procedure foo(x: int)
-modifies i;
-{
- if (i < x) {
- i := i + 1;
- call foo(x);
- }
-}
-
-procedure bar1(j: int)
-modifies i;
-{
- if (j < 2*m)
- {
- i := i + 1;
- call bar1(j+1);
- }
-}
-
-procedure bar2(j: int)
-modifies i;
-{
- if (j < m) {
- i := i - 1;
- call bar2(j+1);
- }
-}
-
-procedure {:entrypoint} main()
-modifies i;
-{
- i := 0;
- if (*) {
- call foo(20);
- i := 0;
- call foo(4);
- } else {
- call bar1(0);
- call bar2(0);
- }
- assume !(i < 10);
-}
+// RUN: %boogie -stratifiedInline:1 -vc:i -nonUniformUnfolding "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var i: int;
+var m: int;
+
+procedure foo(x: int)
+modifies i;
+{
+ if (i < x) {
+ i := i + 1;
+ call foo(x);
+ }
+}
+
+procedure bar1(j: int)
+modifies i;
+{
+ if (j < 2*m)
+ {
+ i := i + 1;
+ call bar1(j+1);
+ }
+}
+
+procedure bar2(j: int)
+modifies i;
+{
+ if (j < m) {
+ i := i - 1;
+ call bar2(j+1);
+ }
+}
+
+procedure {:entrypoint} main()
+modifies i;
+{
+ i := 0;
+ if (*) {
+ call foo(20);
+ i := 0;
+ call foo(4);
+ } else {
+ call bar1(0);
+ call bar2(0);
+ }
+ assume !(i < 10);
+}
diff --git a/Test/stratifiedinline/large.bpl b/Test/stratifiedinline/large.bpl
index eae7c81a..6f94839f 100644
--- a/Test/stratifiedinline/large.bpl
+++ b/Test/stratifiedinline/large.bpl
@@ -1,16761 +1,16761 @@
-// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure proc63() returns (nVar5796: int, nVar5797: bool);
- modifies nVar2, nVar1, nVar3, nVar4, nVar5, nVar6, nVar7, nVar8, nVar9, nVar10, nVar11, nVar12, nVar13, nVar14, nVar15, nVar16, nVar17, nVar18, nVar19, nVar20, nVar21, nVar22, nVar23, nVar24, nVar25, nVar26, nVar27, nVar28, nVar29, nVar30, nVar31, nVar32, nVar33, nVar34, nVar35, nVar36, nVar37, nVar38, nVar39, nVar40, nVar41, nVar42, nVar43, nVar44, nVar45, nVar46, nVar47, nVar48, nVar49, nVar50, nVar51, nVar52, nVar53, nVar54, nVar55, nVar56, nVar57, nVar58, nVar59, nVar60, nVar61, nVar62, nVar63, nVar64, nVar65, nVar66, nVar67, nVar68, nVar69, nVar70, nVar71, nVar72, nVar73, nVar74, nVar75, nVar76, nVar77, nVar78, nVar79, nVar80, nVar81, nVar82, nVar83, nVar84, nVar85, nVar86, nVar87, nVar88, nVar89, nVar90, nVar91, nVar92, nVar93, nVar94, nVar95, nVar96, nVar97, nVar98, nVar99, nVar100, nVar101, nVar102, nVar103, nVar104, nVar105, nVar106, nVar107, nVar108, nVar109, nVar110, nVar111, nVar112, nVar113, nVar114, nVar115, nVar116, nVar117, nVar118, nVar119, nVar120, nVar121, nVar122, nVar123, nVar124, nVar125, nVar126, nVar127, nVar128, nVar129, nVar130, nVar131, nVar132, nVar133, nVar134, nVar135, nVar136, nVar137, nVar138, nVar139, nVar140, nVar141, nVar142, nVar143, nVar144, nVar145, nVar146, nVar147, nVar148, nVar149, nVar150, nVar151, nVar152, nVar153, nVar154, nVar155, nVar156, nVar157, nVar158, nVar159, nVar160, nVar161, nVar162, nVar163, nVar164, nVar165, nVar166, nVar167, nVar168, nVar169, nVar170, nVar171, nVar172, nVar173, nVar174, nVar175, nVar176, nVar177, nVar178, nVar179, nVar180, nVar181, nVar182, nVar183, nVar184, nVar185, nVar186, nVar187, nVar188, nVar189, nVar190, nVar191, nVar192, nVar193, nVar194, nVar195, nVar196, nVar197, nVar198, nVar199, nVar200, nVar201, nVar202, nVar203, nVar204, nVar205, nVar206, nVar207, nVar208, nVar209, nVar210, nVar211, nVar212, nVar213, nVar214, nVar215, nVar216, nVar217, nVar218, nVar219, nVar220, nVar221, nVar222, nVar223, nVar224, nVar225, nVar226, nVar227, nVar228, nVar229, nVar230, nVar231, nVar232, nVar233, nVar234, nVar235, nVar236, nVar237, nVar238, nVar239, nVar240, nVar241, nVar242, nVar243, nVar244, nVar245, nVar246, nVar247, nVar248, nVar249, nVar250, nVar251, nVar252, nVar253, nVar254, nVar255, nVar256, nVar257, nVar258, nVar259, nVar260, nVar261, nVar262, nVar263, nVar264, nVar265, nVar266, nVar267, nVar268, nVar269, nVar270, nVar271, nVar272, nVar273, nVar274, nVar275, nVar276, nVar277, nVar278, nVar279, nVar281, nVar282, nVar283, nVar284, nVar285, nVar286, nVar287, nVar288, nVar289, nVar290, nVar291, nVar292, nVar293, nVar294, nVar295, nVar296, nVar297, nVar298, nVar299, nVar300, nVar301, nVar302, nVar303, nVar304, nVar305, nVar306, nVar307, nVar308, nVar309, nVar310, nVar311, nVar312, nVar313, nVar314, nVar315, nVar316, nVar317, nVar318, nVar319, nVar320, nVar321, nVar322, nVar323, nVar324, nVar325, nVar326, nVar327, nVar328, nVar329, nVar330, nVar331, nVar332, nVar333, nVar334, nVar335, nVar336, nVar337, nVar338, nVar339, nVar340, nVar341, nVar342, nVar343, nVar344, nVar345, nVar346, nVar348, nVar349, nVar350, nVar351, nVar352, nVar353, nVar354, nVar355, nVar356, nVar357, nVar358, nVar359, nVar360, nVar361, nVar362, nVar363, nVar364, nVar365, nVar366, nVar367, nVar368, nVar369, nVar370, nVar371, nVar372, nVar373, nVar374, nVar375, nVar376, nVar377, nVar378, nVar379, nVar380, nVar381, nVar382, nVar383, nVar384, nVar385, nVar386, nVar387, nVar388, nVar389, nVar390, nVar391, nVar392, nVar393, nVar394, nVar395, nVar396, nVar397, nVar398, nVar400, nVar401, nVar402, nVar403, nVar404, nVar405, nVar406, nVar407, nVar408, nVar409, nVar410, nVar411, nVar412, nVar413, nVar414, nVar415, nVar416, nVar417, nVar418, nVar419, nVar420, nVar421, nVar422, nVar423, nVar424, nVar425, nVar426, nVar427, nVar428, nVar429, nVar430, nVar431, nVar432, nVar433, nVar434, nVar435, nVar436, nVar437, nVar438, nVar439, nVar440, nVar441, nVar442, nVar443, nVar444, nVar445, nVar446, nVar447, nVar448, nVar449, nVar450, nVar451, nVar452, nVar453, nVar454, nVar455, nVar456, nVar457, nVar458, nVar459, nVar460, nVar461, nVar462, nVar463, nVar464, nVar465, nVar466, nVar467, nVar468, nVar469, nVar470, nVar471, nVar472, nVar473, nVar474, nVar475, nVar476, nVar477, nVar478, nVar479, nVar480, nVar481, nVar482, nVar483, nVar484, nVar485, nVar486, nVar487, nVar488, nVar489, nVar490, nVar491, nVar492, nVar493, nVar494, nVar495, nVar496, nVar497, nVar498, nVar499, nVar500, nVar501, nVar502, nVar503, nVar504, nVar505, nVar506, nVar507, nVar508, nVar509, nVar510, nVar511, nVar512, nVar513, nVar514, nVar515, nVar516, nVar517, nVar518, nVar519, nVar520, nVar521, nVar522, nVar523, nVar524, nVar525, nVar526, nVar527, nVar528, nVar529, nVar530, nVar531, nVar532, nVar533, nVar534, nVar535, nVar536, nVar537, nVar538, nVar539, nVar540, nVar541, nVar542, nVar543, nVar544, nVar545, nVar546, nVar547, nVar548, nVar549, nVar550, nVar551, nVar552, nVar553, nVar554, nVar555, nVar556, nVar557, nVar558, nVar559, nVar560, nVar561, nVar562, nVar563, nVar564, nVar565, nVar566, nVar567, nVar568, nVar569, nVar570, nVar571, nVar572, nVar573, nVar574, nVar575, nVar576, nVar577, nVar578, nVar579, nVar580, nVar581, nVar582, nVar583, nVar584, nVar585, nVar586, nVar587, nVar588, nVar589, nVar590, nVar591, nVar592, nVar593, nVar594, nVar595, nVar596, nVar597, nVar598, nVar599, nVar600, nVar601, nVar602, nVar603, nVar604, nVar605, nVar606, nVar607, nVar608, nVar609, nVar610, nVar611, nVar612, nVar613, nVar614, nVar615, nVar616, nVar617, nVar618, nVar619, nVar620, nVar621, nVar622, nVar623, nVar624, nVar625, nVar626, nVar627, nVar628, nVar629, nVar630, nVar631, nVar632, nVar633, nVar634, nVar635, nVar636, nVar637, nVar638, nVar639, nVar640, nVar641, nVar642, nVar643, nVar644, nVar645, nVar646, nVar647, nVar648, nVar649, nVar650, nVar651, nVar652, nVar653, nVar654, nVar655, nVar656, nVar657, nVar658, nVar659, nVar660, nVar661, nVar662, nVar663, nVar664, nVar665, nVar666, nVar667, nVar668, nVar669, nVar670, nVar671, nVar672, nVar673, nVar674, nVar675, nVar676, nVar677, nVar678, nVar679, nVar680, nVar681, nVar682, nVar683, nVar684, nVar685, nVar686, nVar687, nVar688, nVar689, nVar690, nVar691, nVar692, nVar693, nVar694, nVar695, nVar696, nVar697, nVar698, nVar699, nVar700, nVar701, nVar702, nVar703, nVar704, nVar705, nVar706, nVar707, nVar708, nVar709, nVar710, nVar711, nVar712, nVar713, nVar714, nVar715, nVar716, nVar717, nVar718, nVar719, nVar720, nVar721, nVar722, nVar723, nVar724, nVar725, nVar726, nVar727, nVar728, nVar729, nVar730, nVar731, nVar732, nVar733, nVar734, nVar735, nVar736, nVar737, nVar738, nVar739, nVar740, nVar741, nVar742, nVar743, nVar744, nVar745, nVar746, nVar747, nVar748, nVar749, nVar750, nVar751, nVar752, nVar753, nVar754, nVar755, nVar756, nVar757, nVar758, nVar759, nVar760, nVar761, nVar762, nVar763, nVar764, nVar765, nVar766, nVar767, nVar768, nVar769, nVar770, nVar771, nVar772, nVar773, nVar774, nVar775, nVar776, nVar777, nVar778, nVar779, nVar780, nVar781, nVar782, nVar783, nVar784, nVar785, nVar786, nVar787, nVar788, nVar789, nVar790, nVar791, nVar792, nVar793, nVar794, nVar795, nVar796, nVar797, nVar798, nVar799, nVar800, nVar801, nVar802, nVar803, nVar804, nVar805, nVar806, nVar807, nVar808, nVar809, nVar810, nVar811, nVar812, nVar813, nVar814, nVar815, nVar816, nVar817, nVar818, nVar819, nVar820, nVar821, nVar822, nVar823, nVar824, nVar825, nVar826, nVar827, nVar828, nVar829, nVar830, nVar831, nVar832, nVar833, nVar834, nVar835, nVar836, nVar837, nVar838, nVar839, nVar840, nVar841, nVar842, nVar843, nVar844, nVar845, nVar846, nVar847, nVar848, nVar849, nVar850, nVar851, nVar852, nVar853, nVar854, nVar855, nVar856, nVar857, nVar858, nVar859, nVar860, nVar861, nVar862, nVar863, nVar864, nVar865, nVar866, nVar867, nVar868, nVar869, nVar870, nVar871, nVar872, nVar873, nVar874, nVar875, nVar876, nVar877, nVar878, nVar879, nVar880, nVar881, nVar882, nVar883, nVar884, nVar885, nVar886, nVar887, nVar888, nVar889, nVar890, nVar891, nVar892, nVar893, nVar894, nVar895, nVar896, nVar897, nVar898, nVar899, nVar900, nVar901, nVar902, nVar903, nVar904, nVar905, nVar906, nVar907, nVar908, nVar909, nVar910, nVar911, nVar912, nVar913, nVar914, nVar915, nVar916, nVar917, nVar918, nVar919, nVar920, nVar921, nVar922, nVar923, nVar924, nVar925, nVar926, nVar927, nVar928, nVar929, nVar930, nVar931, nVar932, nVar933, nVar934, nVar935, nVar936, nVar937, nVar938, nVar939, nVar940, nVar941, nVar942, nVar943, nVar944, nVar945, nVar946, nVar947, nVar948, nVar949, nVar950, nVar951, nVar952, nVar953, nVar954, nVar955, nVar956, nVar957, nVar958, nVar959, nVar960, nVar961, nVar962, nVar963, nVar964, nVar965, nVar966, nVar967, nVar968, nVar969, nVar970, nVar971, nVar972, nVar973, nVar974, nVar975, nVar976, nVar977, nVar978, nVar979, nVar980, nVar981, nVar982, nVar983, nVar984, nVar985, nVar986, nVar987, nVar988, nVar989, nVar990, nVar991, nVar992, nVar993, nVar994, nVar995, nVar996, nVar997, nVar998, nVar999, nVar1000, nVar1001, nVar1002, nVar1003, nVar1004, nVar1005, nVar1006, nVar1007, nVar1008, nVar1009, nVar1010, nVar1011, nVar1012, nVar1013, nVar1014, nVar1015, nVar1016, nVar1017, nVar1018, nVar1019, nVar1020, nVar1021, nVar1022, nVar1023, nVar1024, nVar1025, nVar1026, nVar1027, nVar1028, nVar1029, nVar1030, nVar1031, nVar1032, nVar1033, nVar1034, nVar1035, nVar1036, nVar1037, nVar1038, nVar1039, nVar1041, nVar1042, nVar1043, nVar1044, nVar1045, nVar1046, nVar1047, nVar1048, nVar1049, nVar1050, nVar1051, nVar1052, nVar1053, nVar1054, nVar1055, nVar1056, nVar1057, nVar1058, nVar1059, nVar1060, nVar1061, nVar1062, nVar1063, nVar1064, nVar1065, nVar1066, nVar1067, nVar1068, nVar1069, nVar1070, nVar1071, nVar1072, nVar1073, nVar1074, nVar1075, nVar1076, nVar1077, nVar1078, nVar1079, nVar1080, nVar1081, nVar1082, nVar1083, nVar1084, nVar1085, nVar1086, nVar1087, nVar1088, nVar1089, nVar1090, nVar1091, nVar1092, nVar1093, nVar1094, nVar1095, nVar1096, nVar1097, nVar1098, nVar1099, nVar1100, nVar1101, nVar1102, nVar1103, nVar1104, nVar1105, nVar1106, nVar1107, nVar1108, nVar1109, nVar1110, nVar1111, nVar1112, nVar1113, nVar1114, nVar1115, nVar1116, nVar1117, nVar1118, nVar1119, nVar1120, nVar1121, nVar1122, nVar1123, nVar1124, nVar1125, nVar1126, nVar1127, nVar1128, nVar1129, nVar1130, nVar1131, nVar1132, nVar1133, nVar1134, nVar1135, nVar1136, nVar1137, nVar1138, nVar1139, nVar1140, nVar1141, nVar1142, nVar1143, nVar1144, nVar1145, nVar1146, nVar1147, nVar1148, nVar1149, nVar1150, nVar1151, nVar1152, nVar1153, nVar1154, nVar1155, nVar1156, nVar1157, nVar1158, nVar1159, nVar1160, nVar1161, nVar1162, nVar1163, nVar1164, nVar1165, nVar1166, nVar1167, nVar1168, nVar1169, nVar1170, nVar1171, nVar1172, nVar1173, nVar1174, nVar1176, nVar1177, nVar1178, nVar1179, nVar1180, nVar1181, nVar1182, nVar1183, nVar1184, nVar1185, nVar1186, nVar1187, nVar1188, nVar1189, nVar1190, nVar1191, nVar1192, nVar1193, nVar1194, nVar1195, nVar1196, nVar1197, nVar1198, nVar1199, nVar1200, nVar1201, nVar1202, nVar1203, nVar1204, nVar1205, nVar1206, nVar1207, nVar1208, nVar1209, nVar1210, nVar1211, nVar1212, nVar1213, nVar1214, nVar1215, nVar1216, nVar1217, nVar1218, nVar1219, nVar1220, nVar1221, nVar1222, nVar1223, nVar1224, nVar1225, nVar1226, nVar1227, nVar1228, nVar1229, nVar1230, nVar1231, nVar1232, nVar1233, nVar1234, nVar1235, nVar1236, nVar1237, nVar1238, nVar1239, nVar1240, nVar1241, nVar1242, nVar1243, nVar1244, nVar1245, nVar1246, nVar1247, nVar1248, nVar1249, nVar1250, nVar1251, nVar1252, nVar1253, nVar1255, nVar1256, nVar1257, nVar1258, nVar1259, nVar1260, nVar1261, nVar1262, nVar1263, nVar1264, nVar1265, nVar1266, nVar1267, nVar1268, nVar1269, nVar1270, nVar1271, nVar1272, nVar1273, nVar1274, nVar1275, nVar1276, nVar1277, nVar1278, nVar1279, nVar1280, nVar1281, nVar1282, nVar1283, nVar1284, nVar1285, nVar1286, nVar1287, nVar1288, nVar1289, nVar1290, nVar1291, nVar1292, nVar1293, nVar1294, nVar1295, nVar1296, nVar1297, nVar1298, nVar1299, nVar1300, nVar1301, nVar1302, nVar1303, nVar1304, nVar1305, nVar1306, nVar1307, nVar1308, nVar1309, nVar1310, nVar1311, nVar1312, nVar1313, nVar1314, nVar1315, nVar1316, nVar1317, nVar1318, nVar1319, nVar1320, nVar1321, nVar1322, nVar1323, nVar1324, nVar1325, nVar1326, nVar1327, nVar1328, nVar1329, nVar1330, nVar1331, nVar1332, nVar1333, nVar1334, nVar1335, nVar1336, nVar1337, nVar1338, nVar1339, nVar1340, nVar1341, nVar1342, nVar1343, nVar1344, nVar1345, nVar1346, nVar1347, nVar1348, nVar1349, nVar1350, nVar1351, nVar1352, nVar1353, nVar1354, nVar1355, nVar1356, nVar1357, nVar1358, nVar1359, nVar1360, nVar1361, nVar1362, nVar1363, nVar1364, nVar1365, nVar1366, nVar1367, nVar1368, nVar1369, nVar1370, nVar1371, nVar1372, nVar1373, nVar1374, nVar1375, nVar1376, nVar1377, nVar1378, nVar1379, nVar1380, nVar1381, nVar1382, nVar1383, nVar1384, nVar1385, nVar1386, nVar1387, nVar1388, nVar1389, nVar1390, nVar1391, nVar1392, nVar1393, nVar1394, nVar1395, nVar1396, nVar1397, nVar1398, nVar1399, nVar1400, nVar1401, nVar1402, nVar1403, nVar1404, nVar1405, nVar1406, nVar1407, nVar1408, nVar1409, nVar1410, nVar1411, nVar1412, nVar1413, nVar1414, nVar1415, nVar1416, nVar1417, nVar1418, nVar1419, nVar1420, nVar1421, nVar1422, nVar1423, nVar1424, nVar1425, nVar1426, nVar1427, nVar1428, nVar1429, nVar1430, nVar1431, nVar1432, nVar1433, nVar1434, nVar1435, nVar1436, nVar1437, nVar1438, nVar1439, nVar1440, nVar1441, nVar1442, nVar1443, nVar1444, nVar1445, nVar1446, nVar1447, nVar1448, nVar1449, nVar1450, nVar1451, nVar1452, nVar1453, nVar1454, nVar1455, nVar1456, nVar1457, nVar1458, nVar1459, nVar1460, nVar1461, nVar1462, nVar1463, nVar1464, nVar1465, nVar1466, nVar1467, nVar1468, nVar1469, nVar1470, nVar1471, nVar1472, nVar1473, nVar1474, nVar1475, nVar1476, nVar1477, nVar1478, nVar1479, nVar1480, nVar1481, nVar1482, nVar1483, nVar1484, nVar1485, nVar1486, nVar1487, nVar1488, nVar1489, nVar1490, nVar1491, nVar1492, nVar1493, nVar1494, nVar1495, nVar1496, nVar1497, nVar1498, nVar1499, nVar1500, nVar1501, nVar1502, nVar1503, nVar1504, nVar1505, nVar1506, nVar1507, nVar1508, nVar1509, nVar1510, nVar1511, nVar1512, nVar1513, nVar1514, nVar1515, nVar1516, nVar1517, nVar1518, nVar1519, nVar1520, nVar1521, nVar1522, nVar1523, nVar1524, nVar1525, nVar1526, nVar1527, nVar1528, nVar1529, nVar1530, nVar1531, nVar1532, nVar1533, nVar1534, nVar1535, nVar1536, nVar1537, nVar1538, nVar1539, nVar1540, nVar1541, nVar1542, nVar1543, nVar1544, nVar1545, nVar1546, nVar1547, nVar1548, nVar1549, nVar1550, nVar1551, nVar1552, nVar1553, nVar1554, nVar1555, nVar1556, nVar1557, nVar1558, nVar1559, nVar1560, nVar1561, nVar1562, nVar1563, nVar1564, nVar1565, nVar1566, nVar1567, nVar1568, nVar1569, nVar1570, nVar1571, nVar1572, nVar1573, nVar1574, nVar1575, nVar1576, nVar1577, nVar1578, nVar1579, nVar1580, nVar1581, nVar1582, nVar1583, nVar1584, nVar1585, nVar1586, nVar1587, nVar1588, nVar1589, nVar1590, nVar1591, nVar1592, nVar1593, nVar1594, nVar1595, nVar1596, nVar1597, nVar1598, nVar1599, nVar1600, nVar1601, nVar1602, nVar1603, nVar1604, nVar1605, nVar1606, nVar1607, nVar1608, nVar1609, nVar1610, nVar1611, nVar1612, nVar1613, nVar1614, nVar1615, nVar1616, nVar1617, nVar1618, nVar1619, nVar1620, nVar1621, nVar1622, nVar1623, nVar1624, nVar1625, nVar1626, nVar1627, nVar1628, nVar1629, nVar1630, nVar1631, nVar1632, nVar1633, nVar1634, nVar1635, nVar1636, nVar1637, nVar1638, nVar1639, nVar1640, nVar1641, nVar1642, nVar1643, nVar1644, nVar1645, nVar1646, nVar1647, nVar1648, nVar1649, nVar1650, nVar1651, nVar1652, nVar1653, nVar1654, nVar1655, nVar1656, nVar1657, nVar1658, nVar1659, nVar1660, nVar1661, nVar1662, nVar1663, nVar1664, nVar1665, nVar1666, nVar1667, nVar1668, nVar1669, nVar1670, nVar1671, nVar1672, nVar1673, nVar1674, nVar1675, nVar1676, nVar1677, nVar1678, nVar1679, nVar1680, nVar1681, nVar1682, nVar1683, nVar1684, nVar1685, nVar1686, nVar1687, nVar1688, nVar1689, nVar1690, nVar1691, nVar1692, nVar1693, nVar1694, nVar1695, nVar1696, nVar1697, nVar1698, nVar1699, nVar1700, nVar1701, nVar1702, nVar1703, nVar1704, nVar1705, nVar1706, nVar1707, nVar1708, nVar1709, nVar1710, nVar1711, nVar1712, nVar1713, nVar1714, nVar1715, nVar1716, nVar1717, nVar1718, nVar1719, nVar1720, nVar1721, nVar1722, nVar1723, nVar1724, nVar1725, nVar1726, nVar1727, nVar1728, nVar1729, nVar1730, nVar1731, nVar1732, nVar1733, nVar1734, nVar1735, nVar1736, nVar1737, nVar1738, nVar1739, nVar1740, nVar1741, nVar1742, nVar1743, nVar1744, nVar1745, nVar1746, nVar1747, nVar1748, nVar1749, nVar1750, nVar1751, nVar1752, nVar1753, nVar1754, nVar1755, nVar1756, nVar1757, nVar1758, nVar1759, nVar1760, nVar1761, nVar1762, nVar1763, nVar1764, nVar1765, nVar1766, nVar1767, nVar1768, nVar1769, nVar1770, nVar1771, nVar1772, nVar1773, nVar1774, nVar1775, nVar1776, nVar1777, nVar1778, nVar1779, nVar1780, nVar1781, nVar1782, nVar1783, nVar1784, nVar1785, nVar1786, nVar1787, nVar1788, nVar1789, nVar1790, nVar1791, nVar1792, nVar1793, nVar1794, nVar1795, nVar1796, nVar1797, nVar1798, nVar1799, nVar1800, nVar1801, nVar1802, nVar1803, nVar1804, nVar1805, nVar1806, nVar1807, nVar1808, nVar1809, nVar1810, nVar1811, nVar1812, nVar1813, nVar1814, nVar1815, nVar1816, nVar1817, nVar1818, nVar1819, nVar1820, nVar1821, nVar1822, nVar1823, nVar1824, nVar1825, nVar1826, nVar1827, nVar1828, nVar1829, nVar1830, nVar1831, nVar1832, nVar1833, nVar1834, nVar1835, nVar1836, nVar1837, nVar1838, nVar1839, nVar1840, nVar1841, nVar1842, nVar1843, nVar1844, nVar1845, nVar1846, nVar1847, nVar1848, nVar1849, nVar1850, nVar1851, nVar1852, nVar1853, nVar1854, nVar1855, nVar1856, nVar1857, nVar1858, nVar1859, nVar1860, nVar1861, nVar1862, nVar1863, nVar1864, nVar1865, nVar1866, nVar1867, nVar1868, nVar1869, nVar1870, nVar1871, nVar1872, nVar1873, nVar1874, nVar1875, nVar1876, nVar1877, nVar1878, nVar1879, nVar1880, nVar1881, nVar1882, nVar1883, nVar1884, nVar1885, nVar1886, nVar1887, nVar1888, nVar1889, nVar1890, nVar1891, nVar1892, nVar1893, nVar1894, nVar1895, nVar1896, nVar1897, nVar1898, nVar1899, nVar1900, nVar1901, nVar1902, nVar1903, nVar1904, nVar1905, nVar1906, nVar1907, nVar1908, nVar1909, nVar1910, nVar1911, nVar1912, nVar1913, nVar1914, nVar1915, nVar1916, nVar1917, nVar1918, nVar1919, nVar1920, nVar1921, nVar1922, nVar1923, nVar1924, nVar1925, nVar1926, nVar1928, nVar1929, nVar1930, nVar1931, nVar1932, nVar1933, nVar1934, nVar1935, nVar1936, nVar1937, nVar1938, nVar1939, nVar1940, nVar1941, nVar1942, nVar1943, nVar1944, nVar1945, nVar1946, nVar1947, nVar1948, nVar1949, nVar1950, nVar1951, nVar1952, nVar1953, nVar1954, nVar1955, nVar1956, nVar1957, nVar1958, nVar1959, nVar1960, nVar1961, nVar1962, nVar1963, nVar1964, nVar1965, nVar1966, nVar1967, nVar1968, nVar1969, nVar1970, nVar1971, nVar1972, nVar1973, nVar1974, nVar1975, nVar1976, nVar1977, nVar1978, nVar1979, nVar1980, nVar1981, nVar1982, nVar1983, nVar1984, nVar1985, nVar1986, nVar1987, nVar1988, nVar1989, nVar1990, nVar1991, nVar1992, nVar1993, nVar1994, nVar1995, nVar1996, nVar1997, nVar1998, nVar1999, nVar2000, nVar2001, nVar2002, nVar2003, nVar2004, nVar2005, nVar2006, nVar2007, nVar2008, nVar2009, nVar2010, nVar2011, nVar2012, nVar2013, nVar2014, nVar2015, nVar2016, nVar2017, nVar2018, nVar2019, nVar2020, nVar2021, nVar2022, nVar2023, nVar2024, nVar2025, nVar2026, nVar2027, nVar2028, nVar2029, nVar2030, nVar2031, nVar2032, nVar2033, nVar2034, nVar2035, nVar2036, nVar2037, nVar2038, nVar2039, nVar2040, nVar2041, nVar2042, nVar2043, nVar2044, nVar2045, nVar2046, nVar2047, nVar2048, nVar2049, nVar2050, nVar2051, nVar2052, nVar2053, nVar2054, nVar2055, nVar2056, nVar2057, nVar2058, nVar2059, nVar2060, nVar2061, nVar2062, nVar2063, nVar2064, nVar2065, nVar2066, nVar2067, nVar2068, nVar2069, nVar2070, nVar2071, nVar2072, nVar2073, nVar2074, nVar2075, nVar2076, nVar2077, nVar2078, nVar2079, nVar2080, nVar2081, nVar2082, nVar2083, nVar2084, nVar2085, nVar2086, nVar2087, nVar2088, nVar2089, nVar2090, nVar2091, nVar2092, nVar2093, nVar2094, nVar2095, nVar2096, nVar2097, nVar2098, nVar2099, nVar2100, nVar2101, nVar2102, nVar2104, nVar2105, nVar2106, nVar2107, nVar2108, nVar2109, nVar2110, nVar2111, nVar2112, nVar2113, nVar2114, nVar2115, nVar2116, nVar2117, nVar2118, nVar2119, nVar2120, nVar2121, nVar2122, nVar2123, nVar2124, nVar2125, nVar2126, nVar2127, nVar2128, nVar2129, nVar2130, nVar2131, nVar2132, nVar2133, nVar2134, nVar2135, nVar2136, nVar2137, nVar2138, nVar2139, nVar2140, nVar2141, nVar2142, nVar2143, nVar2144, nVar2145, nVar2146, nVar2147, nVar2148, nVar2149, nVar2150, nVar2151, nVar2152, nVar2153, nVar2154, nVar2155, nVar2156, nVar2157, nVar2158, nVar2159, nVar2160, nVar2161, nVar2162, nVar2163, nVar2164, nVar2165, nVar2166, nVar2167, nVar2168, nVar2169, nVar2170, nVar2171, nVar2172, nVar2173, nVar2174, nVar2175, nVar2176, nVar2177, nVar2178, nVar2180, nVar2181, nVar2182, nVar2183, nVar2184, nVar2185, nVar2186, nVar2187, nVar2188, nVar2189, nVar2190, nVar2191, nVar2192, nVar2193, nVar2194, nVar2195, nVar2196, nVar2197, nVar2198, nVar2199, nVar2200, nVar2201, nVar2202, nVar2203, nVar2204, nVar2205, nVar2206, nVar2207, nVar2208, nVar2209, nVar2210, nVar2211, nVar2212, nVar2213, nVar2214, nVar2215, nVar2216, nVar2217, nVar2218, nVar2219, nVar2220, nVar2221, nVar2222, nVar2223, nVar2224, nVar2225, nVar2226, nVar2227, nVar2228, nVar2229, nVar2230, nVar2231, nVar2232, nVar2233, nVar2234, nVar2235, nVar2236, nVar2237, nVar2238, nVar2239, nVar2240, nVar2241, nVar2242, nVar2243, nVar2244, nVar2245, nVar2246, nVar2247, nVar2248, nVar2249, nVar2250, nVar2251, nVar2252, nVar2253, nVar2254, nVar2255, nVar2256, nVar2257, nVar2258, nVar2259, nVar2260, nVar2261, nVar2262, nVar2263, nVar2264, nVar2265, nVar2266, nVar2267, nVar2268, nVar2269, nVar2270, nVar2271, nVar2272, nVar2273, nVar2274, nVar2275, nVar2276, nVar2277, nVar2278, nVar2279, nVar2280, nVar2281, nVar2282, nVar2283, nVar2284, nVar2285, nVar2286, nVar2287, nVar2288, nVar2289, nVar2290, nVar2291, nVar2292, nVar2293, nVar2294, nVar2295, nVar2296, nVar2297, nVar2298, nVar2299, nVar2300, nVar2301, nVar2302, nVar2303, nVar2304, nVar2305, nVar2306, nVar2307, nVar2308, nVar2309, nVar2310, nVar2311, nVar2312, nVar2313, nVar2314, nVar2315, nVar2316, nVar2317, nVar2318, nVar2319, nVar2320, nVar2321, nVar2322, nVar2323, nVar2324, nVar2325, nVar2326, nVar2327, nVar2328, nVar2329, nVar2330, nVar2331, nVar2332, nVar2333, nVar2334, nVar2335, nVar2336, nVar2337, nVar2338, nVar2339, nVar2340, nVar2341, nVar2342, nVar2343, nVar2344, nVar2345, nVar2346, nVar2347, nVar2348, nVar2349, nVar2350, nVar2351, nVar2352, nVar2353, nVar2354, nVar2355, nVar2356, nVar2357, nVar2358, nVar2359, nVar2360, nVar2361, nVar2362, nVar2363, nVar2364, nVar2365, nVar2366, nVar2367, nVar2368, nVar2369, nVar2370, nVar2371, nVar2372, nVar2373, nVar2374, nVar2375, nVar2376, nVar2377, nVar2378, nVar2379, nVar2380, nVar2381, nVar2382, nVar2383, nVar2384, nVar2385, nVar2386, nVar2387, nVar2388, nVar2389, nVar2390, nVar2391, nVar2392, nVar2393, nVar2394, nVar2395, nVar2396, nVar2397, nVar2398, nVar2399, nVar2400, nVar2401, nVar2402, nVar2403, nVar2404, nVar2405, nVar2406, nVar2407, nVar2408, nVar2409, nVar2410, nVar2411, nVar2412, nVar2413, nVar2414, nVar2415, nVar2416, nVar2417, nVar2418, nVar2419, nVar2420, nVar2421, nVar2422, nVar2423, nVar2424, nVar2425, nVar2426, nVar2427, nVar2428, nVar2429, nVar2430, nVar2431, nVar2432, nVar2433, nVar2434, nVar2435, nVar2436, nVar2437, nVar2438, nVar2439, nVar2440, nVar2441, nVar2442, nVar2443, nVar2444, nVar2445, nVar2446, nVar2447, nVar2448, nVar2449, nVar2450, nVar2451, nVar2452, nVar2453, nVar2454, nVar2455, nVar2456, nVar2457, nVar2458, nVar2459, nVar2460, nVar2461, nVar2462, nVar2463, nVar2464, nVar2465, nVar2466, nVar2467, nVar2468, nVar2469, nVar2470, nVar2471, nVar2472, nVar2473, nVar2474, nVar2475, nVar2476, nVar2477, nVar2478, nVar2479, nVar2480, nVar2481, nVar2482, nVar2483, nVar2484, nVar2485, nVar2486, nVar2487, nVar2488, nVar2489, nVar2490, nVar2491, nVar2492, nVar2493, nVar2494, nVar2495, nVar2496, nVar2497, nVar2498, nVar2499, nVar2500, nVar2501, nVar2502, nVar2503, nVar2504, nVar2505, nVar2506, nVar2507, nVar2508, nVar2509, nVar2510, nVar2511, nVar2512, nVar2513, nVar2514, nVar2515, nVar2516, nVar2517, nVar2518, nVar2519, nVar2520, nVar2521, nVar2522, nVar2523, nVar2524, nVar2525, nVar2526, nVar2527, nVar2528, nVar2529, nVar2530, nVar2531, nVar2532, nVar2533, nVar2534, nVar2535, nVar2536, nVar2537, nVar2538, nVar2539, nVar2540, nVar2541, nVar2542, nVar2543, nVar2544, nVar2545, nVar2546, nVar2547, nVar2548, nVar2549, nVar2550, nVar2551, nVar2552, nVar2553, nVar2554, nVar2555, nVar2556, nVar2557, nVar2558, nVar2559, nVar2560, nVar2561, nVar2562, nVar2563, nVar2564, nVar2565, nVar2566, nVar2567, nVar2568, nVar2569, nVar2570, nVar2571, nVar2572, nVar2573, nVar2574, nVar2575, nVar2576, nVar2577, nVar2578, nVar2579, nVar2580, nVar2581, nVar2582, nVar2583, nVar2584, nVar2585, nVar2586, nVar2587, nVar2588, nVar2589, nVar2590, nVar2591, nVar2592, nVar2593, nVar2594, nVar2595, nVar2596, nVar2597, nVar2598, nVar2599, nVar2600, nVar2601, nVar2602, nVar2603, nVar2604, nVar2605, nVar2606, nVar2607, nVar2608, nVar2609, nVar2610, nVar2611, nVar2612, nVar2613, nVar2614, nVar2615, nVar2616, nVar2617, nVar2618, nVar2619, nVar2620, nVar2622, nVar2623, nVar2624, nVar2625, nVar2626, nVar2627, nVar2628, nVar2629, nVar2630, nVar2631, nVar2633, nVar2634, nVar2635, nVar2636, nVar2637, nVar2638, nVar2639, nVar2640, nVar2641, nVar2642, nVar2643, nVar2644, nVar2645, nVar2646, nVar2647, nVar2648, nVar2649, nVar2650, nVar2651, nVar2652, nVar2653, nVar2654, nVar2655, nVar2656, nVar2657, nVar2658, nVar2659, nVar2660, nVar2661, nVar2662, nVar2663, nVar2664, nVar2665, nVar2666, nVar2667, nVar2668, nVar2669, nVar2670, nVar2671, nVar2672, nVar2673, nVar2674, nVar2675, nVar2676, nVar2677, nVar2678, nVar2679, nVar2680, nVar2681, nVar2682, nVar2683, nVar2684, nVar2685, nVar2686, nVar2687, nVar2688, nVar2689, nVar2690, nVar2691, nVar2692, nVar2693, nVar2694, nVar2695, nVar2696, nVar2697, nVar2698, nVar2699, nVar2700, nVar2701, nVar2702, nVar2703, nVar2704, nVar2705, nVar2706, nVar2707, nVar2708, nVar2709, nVar2710, nVar2711, nVar2712, nVar2713, nVar2714, nVar2715, nVar2716, nVar2717, nVar2718, nVar2719, nVar2720, nVar2721, nVar2722, nVar2723, nVar2724, nVar2725, nVar2726, nVar2727, nVar2728, nVar2729, nVar2730, nVar2731, nVar2732, nVar2733, nVar2734, nVar2735, nVar2736, nVar2737, nVar2738, nVar2739, nVar2740, nVar2741, nVar2742, nVar2743, nVar2744, nVar2745, nVar2746, nVar2747, nVar2748, nVar2749, nVar2750, nVar2751, nVar2752, nVar2753, nVar2755, nVar2756, nVar2757, nVar2758, nVar2759, nVar2760, nVar2761, nVar2762, nVar2763, nVar2764, nVar2765, nVar2766, nVar2767, nVar2768, nVar2769, nVar2770, nVar2771, nVar2772, nVar2773, nVar2774, nVar2775, nVar2776, nVar2777, nVar2778, nVar2779, nVar2780, nVar2781, nVar2782, nVar2783, nVar2784, nVar2785, nVar2786, nVar2787, nVar2788, nVar2789, nVar2790, nVar2791, nVar2792, nVar2793, nVar2794, nVar2795, nVar2796, nVar2797, nVar2798, nVar2799, nVar2800, nVar2801, nVar2802, nVar2803, nVar2804, nVar2805, nVar2806, nVar2807, nVar2808, nVar2809, nVar2810, nVar2811, nVar2812, nVar2813, nVar2814, nVar2815, nVar2816, nVar2817, nVar2818, nVar2819, nVar2820, nVar2821, nVar2822, nVar2823, nVar2824, nVar2825, nVar2826, nVar2827, nVar2828, nVar2829, nVar2830, nVar2831, nVar2832, nVar2833, nVar2834, nVar2835, nVar2836, nVar2837, nVar2838, nVar2839, nVar2840, nVar2841, nVar2842, nVar2843, nVar2844, nVar2845, nVar2846, nVar2847, nVar2848, nVar2849, nVar2850, nVar2851, nVar2852, nVar2853, nVar2854, nVar2855, nVar2856, nVar2857, nVar2858, nVar2859, nVar2860, nVar2861, nVar2862, nVar2863, nVar2864, nVar2865, nVar2866, nVar2867, nVar2868, nVar2869, nVar2870, nVar2871, nVar2872, nVar2873, nVar2874, nVar2875, nVar2876, nVar2877, nVar2878, nVar2879, nVar2880, nVar2881, nVar2882, nVar2883, nVar2884, nVar2885, nVar2886, nVar2887, nVar2888, nVar2889, nVar2890, nVar2891, nVar2892, nVar2893, nVar2894, nVar2895, nVar2896, nVar2897, nVar2898, nVar2899, nVar2900, nVar2901, nVar2902, nVar2903, nVar2904, nVar2905, nVar2906, nVar2907, nVar2908, nVar2909, nVar2910, nVar2911, nVar2912, nVar2913, nVar2914, nVar2915, nVar2916, nVar2917, nVar2918, nVar2919, nVar2920, nVar2921, nVar2922, nVar2923, nVar2924, nVar2925, nVar2926, nVar2927, nVar2928, nVar2929, nVar2930, nVar2931, nVar2932, nVar2933, nVar2934, nVar2935, nVar2936, nVar2937, nVar2938, nVar2939, nVar2940, nVar2941, nVar2942, nVar2943, nVar2944, nVar2945, nVar2946, nVar2947, nVar2948, nVar2949, nVar2950, nVar2951, nVar2952, nVar2953, nVar2954, nVar2955, nVar2956, nVar2957, nVar2958, nVar2959, nVar2960, nVar2961, nVar2962, nVar2963, nVar2964, nVar2965, nVar2966, nVar2967, nVar2968, nVar2969, nVar2970, nVar2971, nVar2972, nVar2973, nVar2974, nVar2975, nVar2976, nVar2977, nVar2978, nVar2979, nVar2980, nVar2981, nVar2982, nVar2983, nVar2984, nVar2985, nVar2986, nVar2987, nVar2988, nVar2989, nVar2990, nVar2991, nVar2992, nVar2993, nVar2994, nVar2995, nVar2996, nVar2997, nVar2998, nVar2999, nVar3000, nVar3001, nVar3002, nVar3003, nVar3004, nVar3005, nVar3006, nVar3007, nVar3008, nVar3009, nVar3010, nVar3011, nVar3012, nVar3013, nVar3014, nVar3015, nVar3016, nVar3017, nVar3018, nVar3019, nVar3020, nVar3021, nVar3022, nVar3023, nVar3024, nVar3025, nVar3026, nVar3027, nVar3028, nVar3029, nVar3030, nVar3031, nVar3032, nVar3033, nVar3034, nVar3035, nVar3036, nVar3037, nVar3038, nVar3039, nVar3040, nVar3041, nVar3042, nVar3043, nVar3044, nVar3045, nVar3046, nVar3047, nVar3049, nVar3050, nVar3051, nVar3052, nVar3053, nVar3054, nVar3055, nVar3056, nVar3057, nVar3058, nVar3059, nVar3060, nVar3061, nVar3063, nVar3064, nVar3065, nVar3066, nVar3067, nVar3068, nVar3069, nVar3070, nVar3071, nVar3072, nVar3073, nVar3074, nVar3075, nVar3076, nVar3077, nVar3078, nVar3079, nVar3080, nVar3081, nVar3082, nVar3083, nVar3084, nVar3085, nVar3086, nVar3087, nVar3088, nVar3089, nVar3090, nVar3091, nVar3092, nVar3093, nVar3094, nVar3095, nVar3096, nVar3097, nVar3098, nVar3099, nVar3100, nVar3101, nVar3102, nVar3103, nVar3104, nVar3105, nVar3106, nVar3107, nVar3108, nVar3109, nVar3110, nVar3111, nVar3112, nVar3113, nVar3114, nVar3115, nVar3116, nVar3117, nVar3118, nVar3119, nVar3120, nVar3121, nVar3122, nVar3123, nVar3124, nVar3125, nVar3126, nVar3127, nVar3128, nVar3129, nVar3130, nVar3131, nVar3132, nVar3133, nVar3134, nVar3135, nVar3136, nVar3137, nVar3138, nVar3140, nVar3141, nVar3142, nVar3143, nVar3144, nVar3145, nVar3146, nVar3147, nVar3148, nVar3149, nVar3150, nVar3151, nVar3152, nVar3153, nVar3154, nVar3155, nVar3156, nVar3157, nVar3158, nVar3159, nVar3160, nVar3161, nVar3162, nVar3163, nVar3164, nVar3165, nVar3166, nVar3167, nVar3168, nVar3169, nVar3170, nVar3171, nVar3172, nVar3173, nVar3174, nVar3175, nVar3176, nVar3177, nVar3178, nVar3179, nVar3180, nVar3181, nVar3182, nVar3183, nVar3184, nVar3185, nVar3186, nVar3187, nVar3188, nVar3189, nVar3190, nVar3191, nVar3192, nVar3193, nVar3194, nVar3195, nVar3196, nVar3197, nVar3198, nVar3199, nVar3200, nVar3201, nVar3202, nVar3203, nVar3204, nVar3205, nVar3206, nVar3207, nVar3208, nVar3209, nVar3210, nVar3211, nVar3212, nVar3213, nVar3214, nVar3215, nVar3216, nVar3217, nVar3218, nVar3219, nVar3220, nVar3221, nVar3222, nVar3223, nVar3224, nVar3225, nVar3226, nVar3227, nVar3228, nVar3229, nVar3230, nVar3231, nVar3232, nVar3233, nVar3234, nVar3235, nVar3236, nVar3237, nVar3238, nVar3239, nVar3240, nVar3241, nVar3242, nVar3243, nVar3244, nVar3245, nVar3246, nVar3247, nVar3248, nVar3249, nVar3250, nVar3251, nVar3252, nVar3253, nVar3254, nVar3255, nVar3256, nVar3257, nVar3258, nVar3259, nVar3260, nVar3261, nVar3262, nVar3263, nVar3264, nVar3265, nVar3266, nVar3267, nVar3268, nVar3269, nVar3270, nVar3271, nVar3272, nVar3273, nVar3274, nVar3275, nVar3276, nVar3277, nVar3278, nVar3279, nVar3280, nVar3281, nVar3282, nVar3283, nVar3284, nVar3285, nVar3286, nVar3287, nVar3288, nVar3289, nVar3290, nVar3291, nVar3292, nVar3293, nVar3294, nVar3295, nVar3296, nVar3297, nVar3298, nVar3299, nVar3300, nVar3301, nVar3302, nVar3303, nVar3304, nVar3305, nVar3306, nVar3307, nVar3308, nVar3309, nVar3310, nVar3311, nVar3312, nVar3313, nVar3314, nVar3315, nVar3316, nVar3317, nVar3318, nVar3319, nVar3320, nVar3321, nVar3322, nVar3323, nVar3324, nVar3325, nVar3326, nVar3327, nVar3328, nVar3329, nVar3330, nVar3331, nVar3332, nVar3333, nVar3334, nVar3335, nVar3336, nVar3337, nVar3338, nVar3339, nVar3340, nVar3341, nVar3342, nVar3343, nVar3344, nVar3345, nVar3346, nVar3347, nVar3348, nVar3349, nVar3350, nVar3351, nVar3352, nVar3353, nVar3354, nVar3355, nVar3356, nVar3357, nVar3358, nVar3359, nVar3360, nVar3361, nVar3362, nVar3363, nVar3364, nVar3365, nVar3366, nVar3367, nVar3368, nVar3369, nVar3370, nVar3371, nVar3372, nVar3373, nVar3374, nVar3375, nVar3376, nVar3377, nVar3378, nVar3379, nVar3380, nVar3381, nVar3382, nVar3383, nVar3384, nVar3385, nVar3386, nVar3387, nVar3388, nVar3389, nVar3390, nVar3391, nVar3392, nVar3393, nVar3394, nVar3395, nVar3396, nVar3397, nVar3398, nVar3399, nVar3400, nVar3401, nVar3402, nVar3403, nVar3404, nVar3405, nVar3406, nVar3407, nVar3408, nVar3409, nVar3410, nVar3411, nVar3412, nVar3413, nVar3414, nVar3415, nVar3416, nVar3417, nVar3418, nVar3419, nVar3420, nVar3421, nVar3422, nVar3423, nVar3424, nVar3425, nVar3426, nVar3427, nVar3428, nVar3429, nVar3430, nVar3431, nVar3432, nVar3433, nVar3434, nVar3435, nVar3436, nVar3437, nVar3438, nVar3439, nVar3440, nVar3441, nVar3442, nVar3443, nVar3444, nVar3445, nVar3446, nVar3447, nVar3448, nVar3449, nVar3450, nVar3451, nVar3452, nVar3453, nVar3454, nVar3455, nVar3456, nVar3457, nVar3458, nVar3459, nVar3460, nVar3461, nVar3462, nVar3463, nVar3464, nVar3465, nVar3466, nVar3467, nVar3468, nVar3469, nVar3470, nVar3471, nVar3472, nVar3473, nVar3474, nVar3475, nVar3476, nVar3477, nVar3478, nVar3479, nVar3480, nVar3481, nVar3482, nVar3483, nVar3484, nVar3485, nVar3486, nVar3487, nVar3488, nVar3489, nVar3490, nVar3491, nVar3492, nVar3493, nVar3494, nVar3495, nVar3496, nVar3497, nVar3498, nVar3499, nVar3500, nVar3501, nVar3502, nVar3503, nVar3504, nVar3505, nVar3506, nVar3507, nVar3508, nVar3509, nVar3510, nVar3511, nVar3512, nVar3513, nVar3514, nVar3515, nVar3516, nVar3517, nVar3518, nVar3519, nVar3520, nVar3521, nVar3522, nVar3523, nVar3524, nVar3525, nVar3526, nVar3527, nVar3528, nVar3529, nVar3530, nVar3531, nVar3532, nVar3533, nVar3534, nVar3535, nVar3536, nVar3537, nVar3538, nVar3539, nVar3540, nVar3541, nVar3542, nVar3543, nVar3544, nVar3545, nVar3546, nVar3547, nVar3548, nVar3549, nVar3550, nVar3551, nVar3552, nVar3553, nVar3554, nVar3555, nVar3556, nVar3557, nVar3558, nVar3559, nVar3560, nVar3561, nVar3562, nVar3563, nVar3564, nVar3565, nVar3566, nVar3567, nVar3568, nVar3569, nVar3570, nVar3571, nVar3572, nVar3573, nVar3574, nVar3575, nVar3576, nVar3577, nVar3578, nVar3579, nVar3580, nVar3581, nVar3582, nVar3583, nVar3584, nVar3585, nVar3586, nVar3587, nVar3588, nVar3589, nVar3590, nVar3591, nVar3592, nVar3593, nVar3594, nVar3595, nVar3596, nVar3597, nVar3598, nVar3599, nVar3600, nVar3601, nVar3602, nVar3603, nVar3604, nVar3605, nVar3606, nVar3607, nVar3608, nVar3609, nVar3610, nVar3611, nVar3612, nVar3613, nVar3614, nVar3615, nVar3616, nVar3617, nVar3618, nVar3619, nVar3620, nVar3621, nVar3622, nVar3623, nVar3624, nVar3625, nVar3626, nVar3627, nVar3628, nVar3629, nVar3630, nVar3631, nVar3632, nVar3633, nVar3634, nVar3635, nVar3636, nVar3637, nVar3638, nVar3639, nVar3640, nVar3641, nVar3642, nVar3643, nVar3644, nVar3645, nVar3646, nVar3647, nVar3648, nVar3649, nVar3650, nVar3651, nVar3652, nVar3653, nVar3654, nVar3655, nVar3656, nVar3657, nVar3658, nVar3659, nVar3660, nVar3661, nVar3662, nVar3663, nVar3664, nVar3665, nVar3666, nVar3667, nVar3668, nVar3669, nVar3670, nVar3671, nVar3672, nVar3673, nVar3674, nVar3675, nVar3676, nVar3677, nVar3678, nVar3679, nVar3680, nVar3681, nVar3682, nVar3683, nVar3684, nVar3685, nVar3686, nVar3687, nVar3688, nVar3689, nVar3690, nVar3691, nVar3692, nVar3693, nVar3694, nVar3695, nVar3696, nVar3697, nVar3698, nVar3699, nVar3700, nVar3701, nVar3702, nVar3703, nVar3704, nVar3705, nVar3706, nVar3707, nVar3708, nVar3709, nVar3710, nVar347, nVar399, nVar1040, nVar1175, nVar2103, nVar2179, nVar2621, nVar2632, nVar2754, nVar3048, nVar3062, nVar3139, nVar3711, nVar3714, nVar3717, nVar3722, nVar3721, nVar1254, nVar280, nVar3718, nVar3719, nVar3720;
-
-
-
-procedure proc64() returns (nVar4933: int, nVar4934: bool);
- modifies nVar2, nVar1, nVar3, nVar4, nVar5, nVar6, nVar7, nVar8, nVar9, nVar10, nVar11, nVar12, nVar13, nVar14, nVar15, nVar16, nVar17, nVar18, nVar19, nVar20, nVar21, nVar22, nVar23, nVar24, nVar25, nVar26, nVar27, nVar28, nVar29, nVar30, nVar31, nVar32, nVar33, nVar34, nVar35, nVar36, nVar37, nVar38, nVar39, nVar40, nVar41, nVar42, nVar43, nVar44, nVar45, nVar46, nVar47, nVar48, nVar49, nVar50, nVar51, nVar52, nVar53, nVar54, nVar55, nVar56, nVar57, nVar58, nVar59, nVar60, nVar61, nVar62, nVar63, nVar64, nVar65, nVar66, nVar67, nVar68, nVar69, nVar70, nVar71, nVar72, nVar73, nVar74, nVar75, nVar76, nVar77, nVar78, nVar79, nVar80, nVar81, nVar82, nVar83, nVar84, nVar85, nVar86, nVar87, nVar88, nVar89, nVar90, nVar91, nVar92, nVar93, nVar94, nVar95, nVar96, nVar97, nVar98, nVar99, nVar100, nVar101, nVar102, nVar103, nVar104, nVar105, nVar106, nVar107, nVar108, nVar109, nVar110, nVar111, nVar112, nVar113, nVar114, nVar115, nVar116, nVar117, nVar118, nVar119, nVar120, nVar121, nVar122, nVar123, nVar124, nVar125, nVar126, nVar127, nVar128, nVar129, nVar130, nVar131, nVar132, nVar133, nVar134, nVar135, nVar136, nVar137, nVar138, nVar139, nVar140, nVar141, nVar142, nVar143, nVar144, nVar145, nVar146, nVar147, nVar148, nVar149, nVar150, nVar151, nVar152, nVar153, nVar154, nVar155, nVar156, nVar157, nVar158, nVar159, nVar160, nVar161, nVar162, nVar163, nVar164, nVar165, nVar166, nVar167, nVar168, nVar169, nVar170, nVar171, nVar172, nVar173, nVar174, nVar175, nVar176, nVar177, nVar178, nVar179, nVar180, nVar181, nVar182, nVar183, nVar184, nVar185, nVar186, nVar187, nVar188, nVar189, nVar190, nVar191, nVar192, nVar193, nVar194, nVar195, nVar196, nVar197, nVar198, nVar199, nVar200, nVar201, nVar202, nVar203, nVar204, nVar205, nVar206, nVar207, nVar208, nVar209, nVar210, nVar211, nVar212, nVar213, nVar214, nVar215, nVar216, nVar217, nVar218, nVar219, nVar220, nVar221, nVar222, nVar223, nVar224, nVar225, nVar226, nVar227, nVar228, nVar229, nVar230, nVar231, nVar232, nVar233, nVar234, nVar235, nVar236, nVar237, nVar238, nVar239, nVar240, nVar241, nVar242, nVar243, nVar244, nVar245, nVar246, nVar247, nVar248, nVar249, nVar250, nVar251, nVar252, nVar253, nVar254, nVar255, nVar256, nVar257, nVar258, nVar259, nVar260, nVar261, nVar262, nVar263, nVar264, nVar265, nVar266, nVar267, nVar268, nVar269, nVar270, nVar271, nVar272, nVar273, nVar274, nVar275, nVar276, nVar277, nVar278, nVar279, nVar281, nVar282, nVar283, nVar284, nVar285, nVar286, nVar287, nVar288, nVar289, nVar290, nVar291, nVar292, nVar293, nVar294, nVar295, nVar296, nVar297, nVar298, nVar299, nVar300, nVar301, nVar302, nVar303, nVar304, nVar305, nVar306, nVar307, nVar308, nVar309, nVar310, nVar311, nVar312, nVar313, nVar314, nVar315, nVar316, nVar317, nVar318, nVar319, nVar320, nVar321, nVar322, nVar323, nVar324, nVar325, nVar326, nVar327, nVar328, nVar329, nVar330, nVar331, nVar332, nVar333, nVar334, nVar335, nVar336, nVar337, nVar338, nVar339, nVar340, nVar341, nVar342, nVar343, nVar344, nVar345, nVar346, nVar348, nVar349, nVar350, nVar351, nVar352, nVar353, nVar354, nVar355, nVar356, nVar357, nVar358, nVar359, nVar360, nVar361, nVar362, nVar363, nVar364, nVar365, nVar366, nVar367, nVar368, nVar369, nVar370, nVar371, nVar372, nVar373, nVar374, nVar375, nVar376, nVar377, nVar378, nVar379, nVar380, nVar381, nVar382, nVar383, nVar384, nVar385, nVar386, nVar387, nVar388, nVar389, nVar390, nVar391, nVar392, nVar393, nVar394, nVar395, nVar396, nVar397, nVar398, nVar400, nVar401, nVar402, nVar403, nVar404, nVar405, nVar406, nVar407, nVar408, nVar409, nVar410, nVar411, nVar412, nVar413, nVar414, nVar415, nVar416, nVar417, nVar418, nVar419, nVar420, nVar421, nVar422, nVar423, nVar424, nVar425, nVar426, nVar427, nVar428, nVar429, nVar430, nVar431, nVar432, nVar433, nVar434, nVar435, nVar436, nVar437, nVar438, nVar439, nVar440, nVar441, nVar442, nVar443, nVar444, nVar445, nVar446, nVar447, nVar448, nVar449, nVar450, nVar451, nVar452, nVar453, nVar454, nVar455, nVar456, nVar457, nVar458, nVar459, nVar460, nVar461, nVar462, nVar463, nVar464, nVar465, nVar466, nVar467, nVar468, nVar469, nVar470, nVar471, nVar472, nVar473, nVar474, nVar475, nVar476, nVar477, nVar478, nVar479, nVar480, nVar481, nVar482, nVar483, nVar484, nVar485, nVar486, nVar487, nVar488, nVar489, nVar490, nVar491, nVar492, nVar493, nVar494, nVar495, nVar496, nVar497, nVar498, nVar499, nVar500, nVar501, nVar502, nVar503, nVar504, nVar505, nVar506, nVar507, nVar508, nVar509, nVar510, nVar511, nVar512, nVar513, nVar514, nVar515, nVar516, nVar517, nVar518, nVar519, nVar520, nVar521, nVar522, nVar523, nVar524, nVar525, nVar526, nVar527, nVar528, nVar529, nVar530, nVar531, nVar532, nVar533, nVar534, nVar535, nVar536, nVar537, nVar538, nVar539, nVar540, nVar541, nVar542, nVar543, nVar544, nVar545, nVar546, nVar547, nVar548, nVar549, nVar550, nVar551, nVar552, nVar553, nVar554, nVar555, nVar556, nVar557, nVar558, nVar559, nVar560, nVar561, nVar562, nVar563, nVar564, nVar565, nVar566, nVar567, nVar568, nVar569, nVar570, nVar571, nVar572, nVar573, nVar574, nVar575, nVar576, nVar577, nVar578, nVar579, nVar580, nVar581, nVar582, nVar583, nVar584, nVar585, nVar586, nVar587, nVar588, nVar589, nVar590, nVar591, nVar592, nVar593, nVar594, nVar595, nVar596, nVar597, nVar598, nVar599, nVar600, nVar601, nVar602, nVar603, nVar604, nVar605, nVar606, nVar607, nVar608, nVar609, nVar610, nVar611, nVar612, nVar613, nVar614, nVar615, nVar616, nVar617, nVar618, nVar619, nVar620, nVar621, nVar622, nVar623, nVar624, nVar625, nVar626, nVar627, nVar628, nVar629, nVar630, nVar631, nVar632, nVar633, nVar634, nVar635, nVar636, nVar637, nVar638, nVar639, nVar640, nVar641, nVar642, nVar643, nVar644, nVar645, nVar646, nVar647, nVar648, nVar649, nVar650, nVar651, nVar652, nVar653, nVar654, nVar655, nVar656, nVar657, nVar658, nVar659, nVar660, nVar661, nVar662, nVar663, nVar664, nVar665, nVar666, nVar667, nVar668, nVar669, nVar670, nVar671, nVar672, nVar673, nVar674, nVar675, nVar676, nVar677, nVar678, nVar679, nVar680, nVar681, nVar682, nVar683, nVar684, nVar685, nVar686, nVar687, nVar688, nVar689, nVar690, nVar691, nVar692, nVar693, nVar694, nVar695, nVar696, nVar697, nVar698, nVar699, nVar700, nVar701, nVar702, nVar703, nVar704, nVar705, nVar706, nVar707, nVar708, nVar709, nVar710, nVar711, nVar712, nVar713, nVar714, nVar715, nVar716, nVar717, nVar718, nVar719, nVar720, nVar721, nVar722, nVar723, nVar724, nVar725, nVar726, nVar727, nVar728, nVar729, nVar730, nVar731, nVar732, nVar733, nVar734, nVar735, nVar736, nVar737, nVar738, nVar739, nVar740, nVar741, nVar742, nVar743, nVar744, nVar745, nVar746, nVar747, nVar748, nVar749, nVar750, nVar751, nVar752, nVar753, nVar754, nVar755, nVar756, nVar757, nVar758, nVar759, nVar760, nVar761, nVar762, nVar763, nVar764, nVar765, nVar766, nVar767, nVar768, nVar769, nVar770, nVar771, nVar772, nVar773, nVar774, nVar775, nVar776, nVar777, nVar778, nVar779, nVar780, nVar781, nVar782, nVar783, nVar784, nVar785, nVar786, nVar787, nVar788, nVar789, nVar790, nVar791, nVar792, nVar793, nVar794, nVar795, nVar796, nVar797, nVar798, nVar799, nVar800, nVar801, nVar802, nVar803, nVar804, nVar805, nVar806, nVar807, nVar808, nVar809, nVar810, nVar811, nVar812, nVar813, nVar814, nVar815, nVar816, nVar817, nVar818, nVar819, nVar820, nVar821, nVar822, nVar823, nVar824, nVar825, nVar826, nVar827, nVar828, nVar829, nVar830, nVar831, nVar832, nVar833, nVar834, nVar835, nVar836, nVar837, nVar838, nVar839, nVar840, nVar841, nVar842, nVar843, nVar844, nVar845, nVar846, nVar847, nVar848, nVar849, nVar850, nVar851, nVar852, nVar853, nVar854, nVar855, nVar856, nVar857, nVar858, nVar859, nVar860, nVar861, nVar862, nVar863, nVar864, nVar865, nVar866, nVar867, nVar868, nVar869, nVar870, nVar871, nVar872, nVar873, nVar874, nVar875, nVar876, nVar877, nVar878, nVar879, nVar880, nVar881, nVar882, nVar883, nVar884, nVar885, nVar886, nVar887, nVar888, nVar889, nVar890, nVar891, nVar892, nVar893, nVar894, nVar895, nVar896, nVar897, nVar898, nVar899, nVar900, nVar901, nVar902, nVar903, nVar904, nVar905, nVar906, nVar907, nVar908, nVar909, nVar910, nVar911, nVar912, nVar913, nVar914, nVar915, nVar916, nVar917, nVar918, nVar919, nVar920, nVar921, nVar922, nVar923, nVar924, nVar925, nVar926, nVar927, nVar928, nVar929, nVar930, nVar931, nVar932, nVar933, nVar934, nVar935, nVar936, nVar937, nVar938, nVar939, nVar940, nVar941, nVar942, nVar943, nVar944, nVar945, nVar946, nVar947, nVar948, nVar949, nVar950, nVar951, nVar952, nVar953, nVar954, nVar955, nVar956, nVar957, nVar958, nVar959, nVar960, nVar961, nVar962, nVar963, nVar964, nVar965, nVar966, nVar967, nVar968, nVar969, nVar970, nVar971, nVar972, nVar973, nVar974, nVar975, nVar976, nVar977, nVar978, nVar979, nVar980, nVar981, nVar982, nVar983, nVar984, nVar985, nVar986, nVar987, nVar988, nVar989, nVar990, nVar991, nVar992, nVar993, nVar994, nVar995, nVar996, nVar997, nVar998, nVar999, nVar1000, nVar1001, nVar1002, nVar1003, nVar1004, nVar1005, nVar1006, nVar1007, nVar1008, nVar1009, nVar1010, nVar1011, nVar1012, nVar1013, nVar1014, nVar1015, nVar1016, nVar1017, nVar1018, nVar1019, nVar1020, nVar1021, nVar1022, nVar1023, nVar1024, nVar1025, nVar1026, nVar1027, nVar1028, nVar1029, nVar1030, nVar1031, nVar1032, nVar1033, nVar1034, nVar1035, nVar1036, nVar1037, nVar1038, nVar1039, nVar1041, nVar1042, nVar1043, nVar1044, nVar1045, nVar1046, nVar1047, nVar1048, nVar1049, nVar1050, nVar1051, nVar1052, nVar1053, nVar1054, nVar1055, nVar1056, nVar1057, nVar1058, nVar1059, nVar1060, nVar1061, nVar1062, nVar1063, nVar1064, nVar1065, nVar1066, nVar1067, nVar1068, nVar1069, nVar1070, nVar1071, nVar1072, nVar1073, nVar1074, nVar1075, nVar1076, nVar1077, nVar1078, nVar1079, nVar1080, nVar1081, nVar1082, nVar1083, nVar1084, nVar1085, nVar1086, nVar1087, nVar1088, nVar1089, nVar1090, nVar1091, nVar1092, nVar1093, nVar1094, nVar1095, nVar1096, nVar1097, nVar1098, nVar1099, nVar1100, nVar1101, nVar1102, nVar1103, nVar1104, nVar1105, nVar1106, nVar1107, nVar1108, nVar1109, nVar1110, nVar1111, nVar1112, nVar1113, nVar1114, nVar1115, nVar1116, nVar1117, nVar1118, nVar1119, nVar1120, nVar1121, nVar1122, nVar1123, nVar1124, nVar1125, nVar1126, nVar1127, nVar1128, nVar1129, nVar1130, nVar1131, nVar1132, nVar1133, nVar1134, nVar1135, nVar1136, nVar1137, nVar1138, nVar1139, nVar1140, nVar1141, nVar1142, nVar1143, nVar1144, nVar1145, nVar1146, nVar1147, nVar1148, nVar1149, nVar1150, nVar1151, nVar1152, nVar1153, nVar1154, nVar1155, nVar1156, nVar1157, nVar1158, nVar1159, nVar1160, nVar1161, nVar1162, nVar1163, nVar1164, nVar1165, nVar1166, nVar1167, nVar1168, nVar1169, nVar1170, nVar1171, nVar1172, nVar1173, nVar1174, nVar1176, nVar1177, nVar1178, nVar1179, nVar1180, nVar1181, nVar1182, nVar1183, nVar1184, nVar1185, nVar1186, nVar1187, nVar1188, nVar1189, nVar1190, nVar1191, nVar1192, nVar1193, nVar1194, nVar1195, nVar1196, nVar1197, nVar1198, nVar1199, nVar1200, nVar1201, nVar1202, nVar1203, nVar1204, nVar1205, nVar1206, nVar1207, nVar1208, nVar1209, nVar1210, nVar1211, nVar1212, nVar1213, nVar1214, nVar1215, nVar1216, nVar1217, nVar1218, nVar1219, nVar1220, nVar1221, nVar1222, nVar1223, nVar1224, nVar1225, nVar1226, nVar1227, nVar1228, nVar1229, nVar1230, nVar1231, nVar1232, nVar1233, nVar1234, nVar1235, nVar1236, nVar1237, nVar1238, nVar1239, nVar1240, nVar1241, nVar1242, nVar1243, nVar1244, nVar1245, nVar1246, nVar1247, nVar1248, nVar1249, nVar1250, nVar1251, nVar1252, nVar1253, nVar1255, nVar1256, nVar1257, nVar1258, nVar1259, nVar1260, nVar1261, nVar1262, nVar1263, nVar1264, nVar1265, nVar1266, nVar1267, nVar1268, nVar1269, nVar1270, nVar1271, nVar1272, nVar1273, nVar1274, nVar1275, nVar1276, nVar1277, nVar1278, nVar1279, nVar1280, nVar1281, nVar1282, nVar1283, nVar1284, nVar1285, nVar1286, nVar1287, nVar1288, nVar1289, nVar1290, nVar1291, nVar1292, nVar1293, nVar1294, nVar1295, nVar1296, nVar1297, nVar1298, nVar1299, nVar1300, nVar1301, nVar1302, nVar1303, nVar1304, nVar1305, nVar1306, nVar1307, nVar1308, nVar1309, nVar1310, nVar1311, nVar1312, nVar1313, nVar1314, nVar1315, nVar1316, nVar1317, nVar1318, nVar1319, nVar1320, nVar1321, nVar1322, nVar1323, nVar1324, nVar1325, nVar1326, nVar1327, nVar1328, nVar1329, nVar1330, nVar1331, nVar1332, nVar1333, nVar1334, nVar1335, nVar1336, nVar1337, nVar1338, nVar1339, nVar1340, nVar1341, nVar1342, nVar1343, nVar1344, nVar1345, nVar1346, nVar1347, nVar1348, nVar1349, nVar1350, nVar1351, nVar1352, nVar1353, nVar1354, nVar1355, nVar1356, nVar1357, nVar1358, nVar1359, nVar1360, nVar1361, nVar1362, nVar1363, nVar1364, nVar1365, nVar1366, nVar1367, nVar1368, nVar1369, nVar1370, nVar1371, nVar1372, nVar1373, nVar1374, nVar1375, nVar1376, nVar1377, nVar1378, nVar1379, nVar1380, nVar1381, nVar1382, nVar1383, nVar1384, nVar1385, nVar1386, nVar1387, nVar1388, nVar1389, nVar1390, nVar1391, nVar1392, nVar1393, nVar1394, nVar1395, nVar1396, nVar1397, nVar1398, nVar1399, nVar1400, nVar1401, nVar1402, nVar1403, nVar1404, nVar1405, nVar1406, nVar1407, nVar1408, nVar1409, nVar1410, nVar1411, nVar1412, nVar1413, nVar1414, nVar1415, nVar1416, nVar1417, nVar1418, nVar1419, nVar1420, nVar1421, nVar1422, nVar1423, nVar1424, nVar1425, nVar1426, nVar1427, nVar1428, nVar1429, nVar1430, nVar1431, nVar1432, nVar1433, nVar1434, nVar1435, nVar1436, nVar1437, nVar1438, nVar1439, nVar1440, nVar1441, nVar1442, nVar1443, nVar1444, nVar1445, nVar1446, nVar1447, nVar1448, nVar1449, nVar1450, nVar1451, nVar1452, nVar1453, nVar1454, nVar1455, nVar1456, nVar1457, nVar1458, nVar1459, nVar1460, nVar1461, nVar1462, nVar1463, nVar1464, nVar1465, nVar1466, nVar1467, nVar1468, nVar1469, nVar1470, nVar1471, nVar1472, nVar1473, nVar1474, nVar1475, nVar1476, nVar1477, nVar1478, nVar1479, nVar1480, nVar1481, nVar1482, nVar1483, nVar1484, nVar1485, nVar1486, nVar1487, nVar1488, nVar1489, nVar1490, nVar1491, nVar1492, nVar1493, nVar1494, nVar1495, nVar1496, nVar1497, nVar1498, nVar1499, nVar1500, nVar1501, nVar1502, nVar1503, nVar1504, nVar1505, nVar1506, nVar1507, nVar1508, nVar1509, nVar1510, nVar1511, nVar1512, nVar1513, nVar1514, nVar1515, nVar1516, nVar1517, nVar1518, nVar1519, nVar1520, nVar1521, nVar1522, nVar1523, nVar1524, nVar1525, nVar1526, nVar1527, nVar1528, nVar1529, nVar1530, nVar1531, nVar1532, nVar1533, nVar1534, nVar1535, nVar1536, nVar1537, nVar1538, nVar1539, nVar1540, nVar1541, nVar1542, nVar1543, nVar1544, nVar1545, nVar1546, nVar1547, nVar1548, nVar1549, nVar1550, nVar1551, nVar1552, nVar1553, nVar1554, nVar1555, nVar1556, nVar1557, nVar1558, nVar1559, nVar1560, nVar1561, nVar1562, nVar1563, nVar1564, nVar1565, nVar1566, nVar1567, nVar1568, nVar1569, nVar1570, nVar1571, nVar1572, nVar1573, nVar1574, nVar1575, nVar1576, nVar1577, nVar1578, nVar1579, nVar1580, nVar1581, nVar1582, nVar1583, nVar1584, nVar1585, nVar1586, nVar1587, nVar1588, nVar1589, nVar1590, nVar1591, nVar1592, nVar1593, nVar1594, nVar1595, nVar1596, nVar1597, nVar1598, nVar1599, nVar1600, nVar1601, nVar1602, nVar1603, nVar1604, nVar1605, nVar1606, nVar1607, nVar1608, nVar1609, nVar1610, nVar1611, nVar1612, nVar1613, nVar1614, nVar1615, nVar1616, nVar1617, nVar1618, nVar1619, nVar1620, nVar1621, nVar1622, nVar1623, nVar1624, nVar1625, nVar1626, nVar1627, nVar1628, nVar1629, nVar1630, nVar1631, nVar1632, nVar1633, nVar1634, nVar1635, nVar1636, nVar1637, nVar1638, nVar1639, nVar1640, nVar1641, nVar1642, nVar1643, nVar1644, nVar1645, nVar1646, nVar1647, nVar1648, nVar1649, nVar1650, nVar1651, nVar1652, nVar1653, nVar1654, nVar1655, nVar1656, nVar1657, nVar1658, nVar1659, nVar1660, nVar1661, nVar1662, nVar1663, nVar1664, nVar1665, nVar1666, nVar1667, nVar1668, nVar1669, nVar1670, nVar1671, nVar1672, nVar1673, nVar1674, nVar1675, nVar1676, nVar1677, nVar1678, nVar1679, nVar1680, nVar1681, nVar1682, nVar1683, nVar1684, nVar1685, nVar1686, nVar1687, nVar1688, nVar1689, nVar1690, nVar1691, nVar1692, nVar1693, nVar1694, nVar1695, nVar1696, nVar1697, nVar1698, nVar1699, nVar1700, nVar1701, nVar1702, nVar1703, nVar1704, nVar1705, nVar1706, nVar1707, nVar1708, nVar1709, nVar1710, nVar1711, nVar1712, nVar1713, nVar1714, nVar1715, nVar1716, nVar1717, nVar1718, nVar1719, nVar1720, nVar1721, nVar1722, nVar1723, nVar1724, nVar1725, nVar1726, nVar1727, nVar1728, nVar1729, nVar1730, nVar1731, nVar1732, nVar1733, nVar1734, nVar1735, nVar1736, nVar1737, nVar1738, nVar1739, nVar1740, nVar1741, nVar1742, nVar1743, nVar1744, nVar1745, nVar1746, nVar1747, nVar1748, nVar1749, nVar1750, nVar1751, nVar1752, nVar1753, nVar1754, nVar1755, nVar1756, nVar1757, nVar1758, nVar1759, nVar1760, nVar1761, nVar1762, nVar1763, nVar1764, nVar1765, nVar1766, nVar1767, nVar1768, nVar1769, nVar1770, nVar1771, nVar1772, nVar1773, nVar1774, nVar1775, nVar1776, nVar1777, nVar1778, nVar1779, nVar1780, nVar1781, nVar1782, nVar1783, nVar1784, nVar1785, nVar1786, nVar1787, nVar1788, nVar1789, nVar1790, nVar1791, nVar1792, nVar1793, nVar1794, nVar1795, nVar1796, nVar1797, nVar1798, nVar1799, nVar1800, nVar1801, nVar1802, nVar1803, nVar1804, nVar1805, nVar1806, nVar1807, nVar1808, nVar1809, nVar1810, nVar1811, nVar1812, nVar1813, nVar1814, nVar1815, nVar1816, nVar1817, nVar1818, nVar1819, nVar1820, nVar1821, nVar1822, nVar1823, nVar1824, nVar1825, nVar1826, nVar1827, nVar1828, nVar1829, nVar1830, nVar1831, nVar1832, nVar1833, nVar1834, nVar1835, nVar1836, nVar1837, nVar1838, nVar1839, nVar1840, nVar1841, nVar1842, nVar1843, nVar1844, nVar1845, nVar1846, nVar1847, nVar1848, nVar1849, nVar1850, nVar1851, nVar1852, nVar1853, nVar1854, nVar1855, nVar1856, nVar1857, nVar1858, nVar1859, nVar1860, nVar1861, nVar1862, nVar1863, nVar1864, nVar1865, nVar1866, nVar1867, nVar1868, nVar1869, nVar1870, nVar1871, nVar1872, nVar1873, nVar1874, nVar1875, nVar1876, nVar1877, nVar1878, nVar1879, nVar1880, nVar1881, nVar1882, nVar1883, nVar1884, nVar1885, nVar1886, nVar1887, nVar1888, nVar1889, nVar1890, nVar1891, nVar1892, nVar1893, nVar1894, nVar1895, nVar1896, nVar1897, nVar1898, nVar1899, nVar1900, nVar1901, nVar1902, nVar1903, nVar1904, nVar1905, nVar1906, nVar1907, nVar1908, nVar1909, nVar1910, nVar1911, nVar1912, nVar1913, nVar1914, nVar1915, nVar1916, nVar1917, nVar1918, nVar1919, nVar1920, nVar1921, nVar1922, nVar1923, nVar1924, nVar1925, nVar1926, nVar1928, nVar1929, nVar1930, nVar1931, nVar1932, nVar1933, nVar1934, nVar1935, nVar1936, nVar1937, nVar1938, nVar1939, nVar1940, nVar1941, nVar1942, nVar1943, nVar1944, nVar1945, nVar1946, nVar1947, nVar1948, nVar1949, nVar1950, nVar1951, nVar1952, nVar1953, nVar1954, nVar1955, nVar1956, nVar1957, nVar1958, nVar1959, nVar1960, nVar1961, nVar1962, nVar1963, nVar1964, nVar1965, nVar1966, nVar1967, nVar1968, nVar1969, nVar1970, nVar1971, nVar1972, nVar1973, nVar1974, nVar1975, nVar1976, nVar1977, nVar1978, nVar1979, nVar1980, nVar1981, nVar1982, nVar1983, nVar1984, nVar1985, nVar1986, nVar1987, nVar1988, nVar1989, nVar1990, nVar1991, nVar1992, nVar1993, nVar1994, nVar1995, nVar1996, nVar1997, nVar1998, nVar1999, nVar2000, nVar2001, nVar2002, nVar2003, nVar2004, nVar2005, nVar2006, nVar2007, nVar2008, nVar2009, nVar2010, nVar2011, nVar2012, nVar2013, nVar2014, nVar2015, nVar2016, nVar2017, nVar2018, nVar2019, nVar2020, nVar2021, nVar2022, nVar2023, nVar2024, nVar2025, nVar2026, nVar2027, nVar2028, nVar2029, nVar2030, nVar2031, nVar2032, nVar2033, nVar2034, nVar2035, nVar2036, nVar2037, nVar2038, nVar2039, nVar2040, nVar2041, nVar2042, nVar2043, nVar2044, nVar2045, nVar2046, nVar2047, nVar2048, nVar2049, nVar2050, nVar2051, nVar2052, nVar2053, nVar2054, nVar2055, nVar2056, nVar2057, nVar2058, nVar2059, nVar2060, nVar2061, nVar2062, nVar2063, nVar2064, nVar2065, nVar2066, nVar2067, nVar2068, nVar2069, nVar2070, nVar2071, nVar2072, nVar2073, nVar2074, nVar2075, nVar2076, nVar2077, nVar2078, nVar2079, nVar2080, nVar2081, nVar2082, nVar2083, nVar2084, nVar2085, nVar2086, nVar2087, nVar2088, nVar2089, nVar2090, nVar2091, nVar2092, nVar2093, nVar2094, nVar2095, nVar2096, nVar2097, nVar2098, nVar2099, nVar2100, nVar2101, nVar2102, nVar2104, nVar2105, nVar2106, nVar2107, nVar2108, nVar2109, nVar2110, nVar2111, nVar2112, nVar2113, nVar2114, nVar2115, nVar2116, nVar2117, nVar2118, nVar2119, nVar2120, nVar2121, nVar2122, nVar2123, nVar2124, nVar2125, nVar2126, nVar2127, nVar2128, nVar2129, nVar2130, nVar2131, nVar2132, nVar2133, nVar2134, nVar2135, nVar2136, nVar2137, nVar2138, nVar2139, nVar2140, nVar2141, nVar2142, nVar2143, nVar2144, nVar2145, nVar2146, nVar2147, nVar2148, nVar2149, nVar2150, nVar2151, nVar2152, nVar2153, nVar2154, nVar2155, nVar2156, nVar2157, nVar2158, nVar2159, nVar2160, nVar2161, nVar2162, nVar2163, nVar2164, nVar2165, nVar2166, nVar2167, nVar2168, nVar2169, nVar2170, nVar2171, nVar2172, nVar2173, nVar2174, nVar2175, nVar2176, nVar2177, nVar2178, nVar2180, nVar2181, nVar2182, nVar2183, nVar2184, nVar2185, nVar2186, nVar2187, nVar2188, nVar2189, nVar2190, nVar2191, nVar2192, nVar2193, nVar2194, nVar2195, nVar2196, nVar2197, nVar2198, nVar2199, nVar2200, nVar2201, nVar2202, nVar2203, nVar2204, nVar2205, nVar2206, nVar2207, nVar2208, nVar2209, nVar2210, nVar2211, nVar2212, nVar2213, nVar2214, nVar2215, nVar2216, nVar2217, nVar2218, nVar2219, nVar2220, nVar2221, nVar2222, nVar2223, nVar2224, nVar2225, nVar2226, nVar2227, nVar2228, nVar2229, nVar2230, nVar2231, nVar2232, nVar2233, nVar2234, nVar2235, nVar2236, nVar2237, nVar2238, nVar2239, nVar2240, nVar2241, nVar2242, nVar2243, nVar2244, nVar2245, nVar2246, nVar2247, nVar2248, nVar2249, nVar2250, nVar2251, nVar2252, nVar2253, nVar2254, nVar2255, nVar2256, nVar2257, nVar2258, nVar2259, nVar2260, nVar2261, nVar2262, nVar2263, nVar2264, nVar2265, nVar2266, nVar2267, nVar2268, nVar2269, nVar2270, nVar2271, nVar2272, nVar2273, nVar2274, nVar2275, nVar2276, nVar2277, nVar2278, nVar2279, nVar2280, nVar2281, nVar2282, nVar2283, nVar2284, nVar2285, nVar2286, nVar2287, nVar2288, nVar2289, nVar2290, nVar2291, nVar2292, nVar2293, nVar2294, nVar2295, nVar2296, nVar2297, nVar2298, nVar2299, nVar2300, nVar2301, nVar2302, nVar2303, nVar2304, nVar2305, nVar2306, nVar2307, nVar2308, nVar2309, nVar2310, nVar2311, nVar2312, nVar2313, nVar2314, nVar2315, nVar2316, nVar2317, nVar2318, nVar2319, nVar2320, nVar2321, nVar2322, nVar2323, nVar2324, nVar2325, nVar2326, nVar2327, nVar2328, nVar2329, nVar2330, nVar2331, nVar2332, nVar2333, nVar2334, nVar2335, nVar2336, nVar2337, nVar2338, nVar2339, nVar2340, nVar2341, nVar2342, nVar2343, nVar2344, nVar2345, nVar2346, nVar2347, nVar2348, nVar2349, nVar2350, nVar2351, nVar2352, nVar2353, nVar2354, nVar2355, nVar2356, nVar2357, nVar2358, nVar2359, nVar2360, nVar2361, nVar2362, nVar2363, nVar2364, nVar2365, nVar2366, nVar2367, nVar2368, nVar2369, nVar2370, nVar2371, nVar2372, nVar2373, nVar2374, nVar2375, nVar2376, nVar2377, nVar2378, nVar2379, nVar2380, nVar2381, nVar2382, nVar2383, nVar2384, nVar2385, nVar2386, nVar2387, nVar2388, nVar2389, nVar2390, nVar2391, nVar2392, nVar2393, nVar2394, nVar2395, nVar2396, nVar2397, nVar2398, nVar2399, nVar2400, nVar2401, nVar2402, nVar2403, nVar2404, nVar2405, nVar2406, nVar2407, nVar2408, nVar2409, nVar2410, nVar2411, nVar2412, nVar2413, nVar2414, nVar2415, nVar2416, nVar2417, nVar2418, nVar2419, nVar2420, nVar2421, nVar2422, nVar2423, nVar2424, nVar2425, nVar2426, nVar2427, nVar2428, nVar2429, nVar2430, nVar2431, nVar2432, nVar2433, nVar2434, nVar2435, nVar2436, nVar2437, nVar2438, nVar2439, nVar2440, nVar2441, nVar2442, nVar2443, nVar2444, nVar2445, nVar2446, nVar2447, nVar2448, nVar2449, nVar2450, nVar2451, nVar2452, nVar2453, nVar2454, nVar2455, nVar2456, nVar2457, nVar2458, nVar2459, nVar2460, nVar2461, nVar2462, nVar2463, nVar2464, nVar2465, nVar2466, nVar2467, nVar2468, nVar2469, nVar2470, nVar2471, nVar2472, nVar2473, nVar2474, nVar2475, nVar2476, nVar2477, nVar2478, nVar2479, nVar2480, nVar2481, nVar2482, nVar2483, nVar2484, nVar2485, nVar2486, nVar2487, nVar2488, nVar2489, nVar2490, nVar2491, nVar2492, nVar2493, nVar2494, nVar2495, nVar2496, nVar2497, nVar2498, nVar2499, nVar2500, nVar2501, nVar2502, nVar2503, nVar2504, nVar2505, nVar2506, nVar2507, nVar2508, nVar2509, nVar2510, nVar2511, nVar2512, nVar2513, nVar2514, nVar2515, nVar2516, nVar2517, nVar2518, nVar2519, nVar2520, nVar2521, nVar2522, nVar2523, nVar2524, nVar2525, nVar2526, nVar2527, nVar2528, nVar2529, nVar2530, nVar2531, nVar2532, nVar2533, nVar2534, nVar2535, nVar2536, nVar2537, nVar2538, nVar2539, nVar2540, nVar2541, nVar2542, nVar2543, nVar2544, nVar2545, nVar2546, nVar2547, nVar2548, nVar2549, nVar2550, nVar2551, nVar2552, nVar2553, nVar2554, nVar2555, nVar2556, nVar2557, nVar2558, nVar2559, nVar2560, nVar2561, nVar2562, nVar2563, nVar2564, nVar2565, nVar2566, nVar2567, nVar2568, nVar2569, nVar2570, nVar2571, nVar2572, nVar2573, nVar2574, nVar2575, nVar2576, nVar2577, nVar2578, nVar2579, nVar2580, nVar2581, nVar2582, nVar2583, nVar2584, nVar2585, nVar2586, nVar2587, nVar2588, nVar2589, nVar2590, nVar2591, nVar2592, nVar2593, nVar2594, nVar2595, nVar2596, nVar2597, nVar2598, nVar2599, nVar2600, nVar2601, nVar2602, nVar2603, nVar2604, nVar2605, nVar2606, nVar2607, nVar2608, nVar2609, nVar2610, nVar2611, nVar2612, nVar2613, nVar2614, nVar2615, nVar2616, nVar2617, nVar2618, nVar2619, nVar2620, nVar2622, nVar2623, nVar2624, nVar2625, nVar2626, nVar2627, nVar2628, nVar2629, nVar2630, nVar2631, nVar2633, nVar2634, nVar2635, nVar2636, nVar2637, nVar2638, nVar2639, nVar2640, nVar2641, nVar2642, nVar2643, nVar2644, nVar2645, nVar2646, nVar2647, nVar2648, nVar2649, nVar2650, nVar2651, nVar2652, nVar2653, nVar2654, nVar2655, nVar2656, nVar2657, nVar2658, nVar2659, nVar2660, nVar2661, nVar2662, nVar2663, nVar2664, nVar2665, nVar2666, nVar2667, nVar2668, nVar2669, nVar2670, nVar2671, nVar2672, nVar2673, nVar2674, nVar2675, nVar2676, nVar2677, nVar2678, nVar2679, nVar2680, nVar2681, nVar2682, nVar2683, nVar2684, nVar2685, nVar2686, nVar2687, nVar2688, nVar2689, nVar2690, nVar2691, nVar2692, nVar2693, nVar2694, nVar2695, nVar2696, nVar2697, nVar2698, nVar2699, nVar2700, nVar2701, nVar2702, nVar2703, nVar2704, nVar2705, nVar2706, nVar2707, nVar2708, nVar2709, nVar2710, nVar2711, nVar2712, nVar2713, nVar2714, nVar2715, nVar2716, nVar2717, nVar2718, nVar2719, nVar2720, nVar2721, nVar2722, nVar2723, nVar2724, nVar2725, nVar2726, nVar2727, nVar2728, nVar2729, nVar2730, nVar2731, nVar2732, nVar2733, nVar2734, nVar2735, nVar2736, nVar2737, nVar2738, nVar2739, nVar2740, nVar2741, nVar2742, nVar2743, nVar2744, nVar2745, nVar2746, nVar2747, nVar2748, nVar2749, nVar2750, nVar2751, nVar2752, nVar2753, nVar2755, nVar2756, nVar2757, nVar2758, nVar2759, nVar2760, nVar2761, nVar2762, nVar2763, nVar2764, nVar2765, nVar2766, nVar2767, nVar2768, nVar2769, nVar2770, nVar2771, nVar2772, nVar2773, nVar2774, nVar2775, nVar2776, nVar2777, nVar2778, nVar2779, nVar2780, nVar2781, nVar2782, nVar2783, nVar2784, nVar2785, nVar2786, nVar2787, nVar2788, nVar2789, nVar2790, nVar2791, nVar2792, nVar2793, nVar2794, nVar2795, nVar2796, nVar2797, nVar2798, nVar2799, nVar2800, nVar2801, nVar2802, nVar2803, nVar2804, nVar2805, nVar2806, nVar2807, nVar2808, nVar2809, nVar2810, nVar2811, nVar2812, nVar2813, nVar2814, nVar2815, nVar2816, nVar2817, nVar2818, nVar2819, nVar2820, nVar2821, nVar2822, nVar2823, nVar2824, nVar2825, nVar2826, nVar2827, nVar2828, nVar2829, nVar2830, nVar2831, nVar2832, nVar2833, nVar2834, nVar2835, nVar2836, nVar2837, nVar2838, nVar2839, nVar2840, nVar2841, nVar2842, nVar2843, nVar2844, nVar2845, nVar2846, nVar2847, nVar2848, nVar2849, nVar2850, nVar2851, nVar2852, nVar2853, nVar2854, nVar2855, nVar2856, nVar2857, nVar2858, nVar2859, nVar2860, nVar2861, nVar2862, nVar2863, nVar2864, nVar2865, nVar2866, nVar2867, nVar2868, nVar2869, nVar2870, nVar2871, nVar2872, nVar2873, nVar2874, nVar2875, nVar2876, nVar2877, nVar2878, nVar2879, nVar2880, nVar2881, nVar2882, nVar2883, nVar2884, nVar2885, nVar2886, nVar2887, nVar2888, nVar2889, nVar2890, nVar2891, nVar2892, nVar2893, nVar2894, nVar2895, nVar2896, nVar2897, nVar2898, nVar2899, nVar2900, nVar2901, nVar2902, nVar2903, nVar2904, nVar2905, nVar2906, nVar2907, nVar2908, nVar2909, nVar2910, nVar2911, nVar2912, nVar2913, nVar2914, nVar2915, nVar2916, nVar2917, nVar2918, nVar2919, nVar2920, nVar2921, nVar2922, nVar2923, nVar2924, nVar2925, nVar2926, nVar2927, nVar2928, nVar2929, nVar2930, nVar2931, nVar2932, nVar2933, nVar2934, nVar2935, nVar2936, nVar2937, nVar2938, nVar2939, nVar2940, nVar2941, nVar2942, nVar2943, nVar2944, nVar2945, nVar2946, nVar2947, nVar2948, nVar2949, nVar2950, nVar2951, nVar2952, nVar2953, nVar2954, nVar2955, nVar2956, nVar2957, nVar2958, nVar2959, nVar2960, nVar2961, nVar2962, nVar2963, nVar2964, nVar2965, nVar2966, nVar2967, nVar2968, nVar2969, nVar2970, nVar2971, nVar2972, nVar2973, nVar2974, nVar2975, nVar2976, nVar2977, nVar2978, nVar2979, nVar2980, nVar2981, nVar2982, nVar2983, nVar2984, nVar2985, nVar2986, nVar2987, nVar2988, nVar2989, nVar2990, nVar2991, nVar2992, nVar2993, nVar2994, nVar2995, nVar2996, nVar2997, nVar2998, nVar2999, nVar3000, nVar3001, nVar3002, nVar3003, nVar3004, nVar3005, nVar3006, nVar3007, nVar3008, nVar3009, nVar3010, nVar3011, nVar3012, nVar3013, nVar3014, nVar3015, nVar3016, nVar3017, nVar3018, nVar3019, nVar3020, nVar3021, nVar3022, nVar3023, nVar3024, nVar3025, nVar3026, nVar3027, nVar3028, nVar3029, nVar3030, nVar3031, nVar3032, nVar3033, nVar3034, nVar3035, nVar3036, nVar3037, nVar3038, nVar3039, nVar3040, nVar3041, nVar3042, nVar3043, nVar3044, nVar3045, nVar3046, nVar3047, nVar3049, nVar3050, nVar3051, nVar3052, nVar3053, nVar3054, nVar3055, nVar3056, nVar3057, nVar3058, nVar3059, nVar3060, nVar3061, nVar3063, nVar3064, nVar3065, nVar3066, nVar3067, nVar3068, nVar3069, nVar3070, nVar3071, nVar3072, nVar3073, nVar3074, nVar3075, nVar3076, nVar3077, nVar3078, nVar3079, nVar3080, nVar3081, nVar3082, nVar3083, nVar3084, nVar3085, nVar3086, nVar3087, nVar3088, nVar3089, nVar3090, nVar3091, nVar3092, nVar3093, nVar3094, nVar3095, nVar3096, nVar3097, nVar3098, nVar3099, nVar3100, nVar3101, nVar3102, nVar3103, nVar3104, nVar3105, nVar3106, nVar3107, nVar3108, nVar3109, nVar3110, nVar3111, nVar3112, nVar3113, nVar3114, nVar3115, nVar3116, nVar3117, nVar3118, nVar3119, nVar3120, nVar3121, nVar3122, nVar3123, nVar3124, nVar3125, nVar3126, nVar3127, nVar3128, nVar3129, nVar3130, nVar3131, nVar3132, nVar3133, nVar3134, nVar3135, nVar3136, nVar3137, nVar3138, nVar3140, nVar3141, nVar3142, nVar3143, nVar3144, nVar3145, nVar3146, nVar3147, nVar3148, nVar3149, nVar3150, nVar3151, nVar3152, nVar3153, nVar3154, nVar3155, nVar3156, nVar3157, nVar3158, nVar3159, nVar3160, nVar3161, nVar3162, nVar3163, nVar3164, nVar3165, nVar3166, nVar3167, nVar3168, nVar3169, nVar3170, nVar3171, nVar3172, nVar3173, nVar3174, nVar3175, nVar3176, nVar3177, nVar3178, nVar3179, nVar3180, nVar3181, nVar3182, nVar3183, nVar3184, nVar3185, nVar3186, nVar3187, nVar3188, nVar3189, nVar3190, nVar3191, nVar3192, nVar3193, nVar3194, nVar3195, nVar3196, nVar3197, nVar3198, nVar3199, nVar3200, nVar3201, nVar3202, nVar3203, nVar3204, nVar3205, nVar3206, nVar3207, nVar3208, nVar3209, nVar3210, nVar3211, nVar3212, nVar3213, nVar3214, nVar3215, nVar3216, nVar3217, nVar3218, nVar3219, nVar3220, nVar3221, nVar3222, nVar3223, nVar3224, nVar3225, nVar3226, nVar3227, nVar3228, nVar3229, nVar3230, nVar3231, nVar3232, nVar3233, nVar3234, nVar3235, nVar3236, nVar3237, nVar3238, nVar3239, nVar3240, nVar3241, nVar3242, nVar3243, nVar3244, nVar3245, nVar3246, nVar3247, nVar3248, nVar3249, nVar3250, nVar3251, nVar3252, nVar3253, nVar3254, nVar3255, nVar3256, nVar3257, nVar3258, nVar3259, nVar3260, nVar3261, nVar3262, nVar3263, nVar3264, nVar3265, nVar3266, nVar3267, nVar3268, nVar3269, nVar3270, nVar3271, nVar3272, nVar3273, nVar3274, nVar3275, nVar3276, nVar3277, nVar3278, nVar3279, nVar3280, nVar3281, nVar3282, nVar3283, nVar3284, nVar3285, nVar3286, nVar3287, nVar3288, nVar3289, nVar3290, nVar3291, nVar3292, nVar3293, nVar3294, nVar3295, nVar3296, nVar3297, nVar3298, nVar3299, nVar3300, nVar3301, nVar3302, nVar3303, nVar3304, nVar3305, nVar3306, nVar3307, nVar3308, nVar3309, nVar3310, nVar3311, nVar3312, nVar3313, nVar3314, nVar3315, nVar3316, nVar3317, nVar3318, nVar3319, nVar3320, nVar3321, nVar3322, nVar3323, nVar3324, nVar3325, nVar3326, nVar3327, nVar3328, nVar3329, nVar3330, nVar3331, nVar3332, nVar3333, nVar3334, nVar3335, nVar3336, nVar3337, nVar3338, nVar3339, nVar3340, nVar3341, nVar3342, nVar3343, nVar3344, nVar3345, nVar3346, nVar3347, nVar3348, nVar3349, nVar3350, nVar3351, nVar3352, nVar3353, nVar3354, nVar3355, nVar3356, nVar3357, nVar3358, nVar3359, nVar3360, nVar3361, nVar3362, nVar3363, nVar3364, nVar3365, nVar3366, nVar3367, nVar3368, nVar3369, nVar3370, nVar3371, nVar3372, nVar3373, nVar3374, nVar3375, nVar3376, nVar3377, nVar3378, nVar3379, nVar3380, nVar3381, nVar3382, nVar3383, nVar3384, nVar3385, nVar3386, nVar3387, nVar3388, nVar3389, nVar3390, nVar3391, nVar3392, nVar3393, nVar3394, nVar3395, nVar3396, nVar3397, nVar3398, nVar3399, nVar3400, nVar3401, nVar3402, nVar3403, nVar3404, nVar3405, nVar3406, nVar3407, nVar3408, nVar3409, nVar3410, nVar3411, nVar3412, nVar3413, nVar3414, nVar3415, nVar3416, nVar3417, nVar3418, nVar3419, nVar3420, nVar3421, nVar3422, nVar3423, nVar3424, nVar3425, nVar3426, nVar3427, nVar3428, nVar3429, nVar3430, nVar3431, nVar3432, nVar3433, nVar3434, nVar3435, nVar3436, nVar3437, nVar3438, nVar3439, nVar3440, nVar3441, nVar3442, nVar3443, nVar3444, nVar3445, nVar3446, nVar3447, nVar3448, nVar3449, nVar3450, nVar3451, nVar3452, nVar3453, nVar3454, nVar3455, nVar3456, nVar3457, nVar3458, nVar3459, nVar3460, nVar3461, nVar3462, nVar3463, nVar3464, nVar3465, nVar3466, nVar3467, nVar3468, nVar3469, nVar3470, nVar3471, nVar3472, nVar3473, nVar3474, nVar3475, nVar3476, nVar3477, nVar3478, nVar3479, nVar3480, nVar3481, nVar3482, nVar3483, nVar3484, nVar3485, nVar3486, nVar3487, nVar3488, nVar3489, nVar3490, nVar3491, nVar3492, nVar3493, nVar3494, nVar3495, nVar3496, nVar3497, nVar3498, nVar3499, nVar3500, nVar3501, nVar3502, nVar3503, nVar3504, nVar3505, nVar3506, nVar3507, nVar3508, nVar3509, nVar3510, nVar3511, nVar3512, nVar3513, nVar3514, nVar3515, nVar3516, nVar3517, nVar3518, nVar3519, nVar3520, nVar3521, nVar3522, nVar3523, nVar3524, nVar3525, nVar3526, nVar3527, nVar3528, nVar3529, nVar3530, nVar3531, nVar3532, nVar3533, nVar3534, nVar3535, nVar3536, nVar3537, nVar3538, nVar3539, nVar3540, nVar3541, nVar3542, nVar3543, nVar3544, nVar3545, nVar3546, nVar3547, nVar3548, nVar3549, nVar3550, nVar3551, nVar3552, nVar3553, nVar3554, nVar3555, nVar3556, nVar3557, nVar3558, nVar3559, nVar3560, nVar3561, nVar3562, nVar3563, nVar3564, nVar3565, nVar3566, nVar3567, nVar3568, nVar3569, nVar3570, nVar3571, nVar3572, nVar3573, nVar3574, nVar3575, nVar3576, nVar3577, nVar3578, nVar3579, nVar3580, nVar3581, nVar3582, nVar3583, nVar3584, nVar3585, nVar3586, nVar3587, nVar3588, nVar3589, nVar3590, nVar3591, nVar3592, nVar3593, nVar3594, nVar3595, nVar3596, nVar3597, nVar3598, nVar3599, nVar3600, nVar3601, nVar3602, nVar3603, nVar3604, nVar3605, nVar3606, nVar3607, nVar3608, nVar3609, nVar3610, nVar3611, nVar3612, nVar3613, nVar3614, nVar3615, nVar3616, nVar3617, nVar3618, nVar3619, nVar3620, nVar3621, nVar3622, nVar3623, nVar3624, nVar3625, nVar3626, nVar3627, nVar3628, nVar3629, nVar3630, nVar3631, nVar3632, nVar3633, nVar3634, nVar3635, nVar3636, nVar3637, nVar3638, nVar3639, nVar3640, nVar3641, nVar3642, nVar3643, nVar3644, nVar3645, nVar3646, nVar3647, nVar3648, nVar3649, nVar3650, nVar3651, nVar3652, nVar3653, nVar3654, nVar3655, nVar3656, nVar3657, nVar3658, nVar3659, nVar3660, nVar3661, nVar3662, nVar3663, nVar3664, nVar3665, nVar3666, nVar3667, nVar3668, nVar3669, nVar3670, nVar3671, nVar3672, nVar3673, nVar3674, nVar3675, nVar3676, nVar3677, nVar3678, nVar3679, nVar3680, nVar3681, nVar3682, nVar3683, nVar3684, nVar3685, nVar3686, nVar3687, nVar3688, nVar3689, nVar3690, nVar3691, nVar3692, nVar3693, nVar3694, nVar3695, nVar3696, nVar3697, nVar3698, nVar3699, nVar3700, nVar3701, nVar3702, nVar3703, nVar3704, nVar3705, nVar3706, nVar3707, nVar3708, nVar3709, nVar3710, nVar347, nVar399, nVar1040, nVar1175, nVar2103, nVar2179, nVar2621, nVar2632, nVar2754, nVar3048, nVar3062, nVar3139, nVar3711, nVar3714, nVar3717, nVar3722, nVar3721, nVar1254, nVar280, nVar3718, nVar3719, nVar3720;
-
-
-
-procedure proc65();
-
-
-
-implementation proc65()
-{
-
- anon0__unique__1:
- assume (forall x: int :: { nVar3714[x] } nVar3714[x] <= 0 || nVar3714[x] > 8912);
- assume (forall x: int :: { nVar3717[x] } nVar3717[x] <= 0 || nVar3717[x] > 8912);
- assume (forall x: int :: { nVar3721[x] } nVar3721[x] <= 0 || nVar3721[x] > 8912);
- assume (forall x: int :: { nVar3722[x] } nVar3722[x] <= 0 || nVar3722[x] > 8912);
- return;
-}
-
-
-
-procedure proc66();
- modifies nVar3711;
-
-
-
-implementation proc66()
-{
-
- anon0__unique__1:
- nVar3711 := 0;
- return;
-}
-
-
-
-procedure proc67();
- modifies nVar1, nVar3714, nVar3717, nVar3722, nVar3721, nVar1254, nVar280;
-
-
-
-procedure proc68(nVar4658: int, nVar4659: int) returns (nVar4660: int);
-
-
-
-implementation proc68(nVar4658: int, nVar4659: int) returns (nVar4660: int)
-{
- var nVar4661: int;
-
- anon0__unique__1:
- nVar4660 := nVar4661;
- return;
-}
-
-
-
-procedure proc69(nVar4662: int) returns (nVar4663: int);
-
-
-
-implementation proc69(nVar4662: int) returns (nVar4663: int)
-{
- var nVar4664: int;
-
- anon0__unique__1:
- nVar4663 := nVar4664;
- return;
-}
-
-
-
-procedure proc70(nVar4665: int, nVar4666: int) returns (nVar4667: int);
-
-
-
-implementation proc70(nVar4665: int, nVar4666: int) returns (nVar4667: int)
-{
- var nVar4668: int;
-
- anon0__unique__1:
- nVar4667 := nVar4668;
- return;
-}
-
-
-
-procedure proc71(nVar4669: int) returns (nVar4670: int);
-
-
-
-implementation proc71(nVar4669: int) returns (nVar4670: int)
-{
- var nVar4671: int;
-
- anon0__unique__1:
- nVar4670 := nVar4671;
- return;
-}
-
-
-
-procedure proc72(nVar4672: int, nVar4673: int) returns (nVar4674: int);
-
-
-
-implementation proc72(nVar4672: int, nVar4673: int) returns (nVar4674: int)
-{
- var nVar4675: int;
-
- anon0__unique__1:
- nVar4674 := nVar4675;
- return;
-}
-
-
-
-procedure proc73(nVar4676: int) returns (nVar4677: int);
-
-
-
-implementation proc73(nVar4676: int) returns (nVar4677: int)
-{
- var nVar4678: int;
-
- anon0__unique__1:
- nVar4677 := nVar4678;
- return;
-}
-
-
-
-procedure proc74(nVar4679: int, nVar4680: int) returns (nVar4681: int);
-
-
-
-implementation proc74(nVar4679: int, nVar4680: int) returns (nVar4681: int)
-{
- var nVar4682: int;
-
- anon0__unique__1:
- nVar4681 := nVar4682;
- return;
-}
-
-
-
-procedure proc75(nVar4683: int) returns (nVar4684: int);
-
-
-
-implementation proc75(nVar4683: int) returns (nVar4684: int)
-{
- var nVar4685: int;
-
- anon0__unique__1:
- nVar4684 := nVar4685;
- return;
-}
-
-
-
-procedure proc76(nVar4686: int, nVar4687: int) returns (nVar4688: int);
-
-
-
-implementation proc76(nVar4686: int, nVar4687: int) returns (nVar4688: int)
-{
- var nVar4689: int;
-
- anon0__unique__1:
- nVar4688 := nVar4689;
- return;
-}
-
-
-
-procedure proc77(nVar4690: int) returns (nVar4691: int);
-
-
-
-implementation proc77(nVar4690: int) returns (nVar4691: int)
-{
- var nVar4692: int;
-
- anon0__unique__1:
- nVar4691 := nVar4692;
- return;
-}
-
-
-
-procedure proc78(nVar4693: int, nVar4694: int) returns (nVar4695: int);
-
-
-
-implementation proc78(nVar4693: int, nVar4694: int) returns (nVar4695: int)
-{
- var nVar4696: int;
-
- anon0__unique__1:
- nVar4695 := nVar4696;
- return;
-}
-
-
-
-procedure proc79(nVar4697: int) returns (nVar4698: int);
-
-
-
-implementation proc79(nVar4697: int) returns (nVar4698: int)
-{
- var nVar4699: int;
-
- anon0__unique__1:
- nVar4698 := nVar4699;
- return;
-}
-
-
-
-procedure proc80(nVar4700: int, nVar4701: int) returns (nVar4702: int);
-
-
-
-implementation proc80(nVar4700: int, nVar4701: int) returns (nVar4702: int)
-{
- var nVar4703: int;
-
- anon0__unique__1:
- nVar4702 := nVar4703;
- return;
-}
-
-
-
-procedure proc81(nVar4704: int) returns (nVar4705: int);
-
-
-
-implementation proc81(nVar4704: int) returns (nVar4705: int)
-{
- var nVar4706: int;
-
- anon0__unique__1:
- nVar4705 := nVar4706;
- return;
-}
-
-
-
-procedure proc82(nVar4707: int, nVar4708: int) returns (nVar4709: int);
-
-
-
-implementation proc82(nVar4707: int, nVar4708: int) returns (nVar4709: int)
-{
- var nVar4710: int;
-
- anon0__unique__1:
- nVar4709 := nVar4710;
- return;
-}
-
-
-
-procedure proc83(nVar4711: int) returns (nVar4712: int);
-
-
-
-implementation proc83(nVar4711: int) returns (nVar4712: int)
-{
- var nVar4713: int;
-
- anon0__unique__1:
- nVar4712 := nVar4713;
- return;
-}
-
-
-
-procedure proc84(nVar4714: int, nVar4715: int) returns (nVar4716: int);
-
-
-
-implementation proc84(nVar4714: int, nVar4715: int) returns (nVar4716: int)
-{
- var nVar4717: int;
-
- anon0__unique__1:
- nVar4716 := nVar4717;
- return;
-}
-
-
-
-procedure proc85(nVar4718: int) returns (nVar4719: int);
-
-
-
-implementation proc85(nVar4718: int) returns (nVar4719: int)
-{
- var nVar4720: int;
-
- anon0__unique__1:
- nVar4719 := nVar4720;
- return;
-}
-
-
-
-procedure proc86(nVar4721: int, nVar4722: int) returns (nVar4723: int);
-
-
-
-implementation proc86(nVar4721: int, nVar4722: int) returns (nVar4723: int)
-{
- var nVar4724: int;
-
- anon0__unique__1:
- nVar4723 := nVar4724;
- return;
-}
-
-
-
-procedure proc87(nVar4725: int) returns (nVar4726: int);
-
-
-
-implementation proc87(nVar4725: int) returns (nVar4726: int)
-{
- var nVar4727: int;
-
- anon0__unique__1:
- nVar4726 := nVar4727;
- return;
-}
-
-
-
-procedure proc88(nVar4728: int, nVar4729: int) returns (nVar4730: int);
-
-
-
-implementation proc88(nVar4728: int, nVar4729: int) returns (nVar4730: int)
-{
- var nVar4731: int;
-
- anon0__unique__1:
- nVar4730 := nVar4731;
- return;
-}
-
-
-
-procedure proc89(nVar4732: int) returns (nVar4733: int);
-
-
-
-implementation proc89(nVar4732: int) returns (nVar4733: int)
-{
- var nVar4734: int;
-
- anon0__unique__1:
- nVar4733 := nVar4734;
- return;
-}
-
-
-
-procedure proc90(nVar4735: int, nVar4736: int) returns (nVar4737: int);
-
-
-
-implementation proc90(nVar4735: int, nVar4736: int) returns (nVar4737: int)
-{
- var nVar4738: int;
-
- anon0__unique__1:
- nVar4737 := nVar4738;
- return;
-}
-
-
-
-procedure proc91(nVar4739: int) returns (nVar4740: int);
-
-
-
-implementation proc91(nVar4739: int) returns (nVar4740: int)
-{
- var nVar4741: int;
-
- anon0__unique__1:
- nVar4740 := nVar4741;
- return;
-}
-
-
-
-procedure proc92(nVar4742: int, nVar4743: int) returns (nVar4744: int);
-
-
-
-implementation proc92(nVar4742: int, nVar4743: int) returns (nVar4744: int)
-{
- var nVar4745: int;
-
- anon0__unique__1:
- nVar4744 := nVar4745;
- return;
-}
-
-
-
-procedure proc93(nVar4746: int) returns (nVar4747: int);
-
-
-
-implementation proc93(nVar4746: int) returns (nVar4747: int)
-{
- var nVar4748: int;
-
- anon0__unique__1:
- nVar4747 := nVar4748;
- return;
-}
-
-
-
-procedure proc94(nVar4749: int, nVar4750: int) returns (nVar4751: int);
-
-
-
-implementation proc94(nVar4749: int, nVar4750: int) returns (nVar4751: int)
-{
- var nVar4752: int;
-
- anon0__unique__1:
- nVar4751 := nVar4752;
- return;
-}
-
-
-
-procedure proc95(nVar4753: int) returns (nVar4754: int);
-
-
-
-implementation proc95(nVar4753: int) returns (nVar4754: int)
-{
- var nVar4755: int;
-
- anon0__unique__1:
- nVar4754 := nVar4755;
- return;
-}
-
-
-
-procedure proc96(nVar4756: int) returns (nVar4757: int);
-
-
-
-implementation proc96(nVar4756: int) returns (nVar4757: int)
-{
- var nVar4758: int;
-
- anon0__unique__1:
- nVar4757 := nVar4758;
- return;
-}
-
-
-
-procedure proc97(nVar4759: int) returns (nVar4760: int);
-
-
-
-implementation proc97(nVar4759: int) returns (nVar4760: int)
-{
- var nVar4761: int;
-
- anon0__unique__1:
- nVar4760 := nVar4761;
- return;
-}
-
-
-
-procedure proc98(nVar4762: int) returns (nVar4763: int);
-
-
-
-implementation proc98(nVar4762: int) returns (nVar4763: int)
-{
- var nVar4764: int;
-
- anon0__unique__1:
- nVar4763 := nVar4764;
- return;
-}
-
-
-
-procedure proc99(nVar4765: int) returns (nVar4766: int);
-
-
-
-implementation proc99(nVar4765: int) returns (nVar4766: int)
-{
- var nVar4767: int;
-
- anon0__unique__1:
- nVar4766 := nVar4767;
- return;
-}
-
-
-
-procedure proc100(nVar4768: int) returns (nVar4769: int);
-
-
-
-implementation proc100(nVar4768: int) returns (nVar4769: int)
-{
- var nVar4770: int;
-
- anon0__unique__1:
- nVar4769 := nVar4770;
- return;
-}
-
-
-
-procedure proc101(nVar4771: int) returns (nVar4772: int);
-
-
-
-implementation proc101(nVar4771: int) returns (nVar4772: int)
-{
- var nVar4773: int;
-
- anon0__unique__1:
- nVar4772 := nVar4773;
- return;
-}
-
-
-
-procedure proc102(nVar4774: int) returns (nVar4775: int);
-
-
-
-implementation proc102(nVar4774: int) returns (nVar4775: int)
-{
- var nVar4776: int;
-
- anon0__unique__1:
- nVar4775 := nVar4776;
- return;
-}
-
-
-
-procedure proc103(nVar4777: int) returns (nVar4778: int);
-
-
-
-implementation proc103(nVar4777: int) returns (nVar4778: int)
-{
- var nVar4779: int;
-
- anon0__unique__1:
- nVar4778 := nVar4779;
- return;
-}
-
-
-
-procedure proc104(nVar4780: int) returns (nVar4781: int);
-
-
-
-implementation proc104(nVar4780: int) returns (nVar4781: int)
-{
- var nVar4782: int;
-
- anon0__unique__1:
- nVar4781 := nVar4782;
- return;
-}
-
-
-
-procedure proc105(nVar4783: int) returns (nVar4784: int);
-
-
-
-implementation proc105(nVar4783: int) returns (nVar4784: int)
-{
- var nVar4785: int;
-
- anon0__unique__1:
- nVar4784 := nVar4785;
- return;
-}
-
-
-
-procedure proc106(nVar4786: int) returns (nVar4787: int);
-
-
-
-implementation proc106(nVar4786: int) returns (nVar4787: int)
-{
- var nVar4788: int;
-
- anon0__unique__1:
- nVar4787 := nVar4788;
- return;
-}
-
-
-
-procedure proc107(nVar4789: int) returns (nVar4790: int);
-
-
-
-implementation proc107(nVar4789: int) returns (nVar4790: int)
-{
- var nVar4791: int;
-
- anon0__unique__1:
- nVar4790 := nVar4791;
- return;
-}
-
-
-
-procedure proc108(nVar4792: int) returns (nVar4793: int);
-
-
-
-implementation proc108(nVar4792: int) returns (nVar4793: int)
-{
- var nVar4794: int;
-
- anon0__unique__1:
- nVar4793 := nVar4794;
- return;
-}
-
-
-
-procedure proc109(nVar4795: int) returns (nVar4796: int);
-
-
-
-implementation proc109(nVar4795: int) returns (nVar4796: int)
-{
- var nVar4797: int;
-
- anon0__unique__1:
- nVar4796 := nVar4797;
- return;
-}
-
-
-
-procedure proc110(nVar4798: int, nVar4799: int) returns (nVar4800: int);
-
-
-
-implementation proc110(nVar4798: int, nVar4799: int) returns (nVar4800: int)
-{
- var nVar4801: int;
-
- anon0__unique__1:
- nVar4800 := nVar4801;
- return;
-}
-
-
-
-procedure proc111(nVar4802: int) returns (nVar4803: int);
-
-
-
-implementation proc111(nVar4802: int) returns (nVar4803: int)
-{
- var nVar4804: int;
-
- anon0__unique__1:
- nVar4803 := nVar4804;
- return;
-}
-
-
-
-procedure proc112(nVar4805: int, nVar4806: int) returns (nVar4807: int);
-
-
-
-implementation proc112(nVar4805: int, nVar4806: int) returns (nVar4807: int)
-{
- var nVar4808: int;
-
- anon0__unique__1:
- nVar4807 := nVar4808;
- return;
-}
-
-
-
-procedure proc113(nVar4809: int) returns (nVar4810: int);
-
-
-
-implementation proc113(nVar4809: int) returns (nVar4810: int)
-{
- var nVar4811: int;
-
- anon0__unique__1:
- nVar4810 := nVar4811;
- return;
-}
-
-
-
-procedure proc114(nVar4812: int) returns (nVar4813: int);
-
-
-
-implementation proc114(nVar4812: int) returns (nVar4813: int)
-{
- var nVar4814: int;
-
- anon0__unique__1:
- nVar4813 := nVar4814;
- return;
-}
-
-
-
-procedure proc115(nVar4815: int) returns (nVar4816: int);
-
-
-
-implementation proc115(nVar4815: int) returns (nVar4816: int)
-{
- var nVar4817: int;
-
- anon0__unique__1:
- nVar4816 := nVar4817;
- return;
-}
-
-
-
-implementation proc67()
-{
- var nVar4818: int;
- var nVar4819: int;
- var nVar4820: int;
- var nVar4821: int;
- var nVar4822: int;
- var nVar4823: int;
- var nVar4824: int;
- var nVar4825: int;
- var nVar4826: int;
- var nVar4827: int;
- var nVar4828: int;
- var nVar4829: int;
- var nVar4830: int;
- var nVar4831: int;
- var nVar4832: int;
- var nVar4833: int;
- var nVar4834: int;
- var nVar4835: int;
- var nVar4836: int;
- var nVar4837: int;
- var nVar4838: int;
- var nVar4839: int;
- var nVar4840: int;
- var nVar4841: int;
- var nVar4842: int;
- var nVar4843: int;
- var nVar4844: int;
- var nVar4845: int;
- var nVar4846: int;
- var nVar4847: int;
- var nVar4848: int;
- var nVar4849: int;
- var nVar4850: int;
- var nVar4851: int;
- var nVar4852: int;
- var nVar4853: int;
- var nVar4854: int;
- var nVar4855: int;
- var nVar4856: int;
- var nVar4857: int;
- var nVar4858: int;
- var nVar4859: int;
- var nVar4860: int;
- var nVar4861: int;
- var nVar4862: int;
- var nVar4863: int;
- var nVar4864: int;
- var nVar4865: int;
- var nVar4866: int;
- var nVar4867: int;
- var nVar4868: int;
- var nVar4869: int;
- var nVar4870: int;
- var nVar4871: int;
- var nVar4872: int;
- var nVar4873: int;
- var nVar4874: int;
- var nVar4875: int;
- var nVar4876: int;
- var nVar4877: int;
- var nVar4878: int;
- var nVar4879: int;
- var nVar4880: int;
- var nVar4881: int;
- var nVar4882: int;
- var nVar4883: int;
- var nVar4884: int;
- var nVar4885: int;
- var nVar4886: int;
- var nVar4887: int;
-
- anon0__unique__1:
- call {:si_unique_call 4808} nVar4818 := proc130(100);
- call {:si_unique_call 4809} nVar4819 := proc130(140);
- call {:si_unique_call 4810} nVar4820 := proc130(228);
- call {:si_unique_call 4811} nVar4821 := proc130(392);
- call {:si_unique_call 4812} nVar4822 := proc130(140);
- call {:si_unique_call 4813} nVar4823 := proc130(140);
- call {:si_unique_call 4814} nVar4824 := proc130(140);
- call {:si_unique_call 4815} nVar4825 := proc130(140);
- call {:si_unique_call 4816} nVar4826 := proc130(140);
- call {:si_unique_call 4817} nVar4827 := proc130(100);
- call {:si_unique_call 4818} nVar4828 := proc130(140);
- call {:si_unique_call 4819} nVar4829 := proc130(228);
- call {:si_unique_call 4820} nVar4830 := proc130(60);
- call {:si_unique_call 4821} nVar4831 := proc130(140);
- call {:si_unique_call 4822} nVar4832 := proc130(360);
- call {:si_unique_call 4823} nVar4833 := proc130(140);
- call {:si_unique_call 4824} nVar4834 := proc130(140);
- call {:si_unique_call 4825} nVar4835 := proc130(140);
- call {:si_unique_call 4826} nVar4836 := proc130(140);
- call {:si_unique_call 4827} nVar4837 := proc130(140);
- call {:si_unique_call 4828} nVar4838 := proc130(140);
- assume nVar3139 > 0;
- nVar3714[func18(nVar3139)] := 4158;
- assume nVar2179 > 0;
- nVar3714[func18(nVar2179)] := 4171;
- nVar4827 := nVar4276;
- nVar4818 := nVar4603;
- nVar4830 := nVar4651;
- nVar4821 := nVar4609;
- nVar4832 := nVar4610;
- nVar3717[func26(nVar868)] := 284;
- nVar3717[func26(nVar2360)] := 286;
- assume nVar3716[func21(nVar367)] > 0;
- nVar3722[func50(nVar402)] := 279;
- nVar3721[func43(nVar402)] := 0;
- assume nVar3716[func21(nVar2637)] > 0;
- nVar3722[func50(nVar3688)] := 388;
- nVar3721[func43(nVar3688)] := 0;
- nVar3717[func26(nVar1365)] := 658;
- assume nVar3716[func21(nVar2770)] > 0;
- nVar3722[func50(nVar1550)] := 654;
- nVar3721[func43(nVar1550)] := 0;
- nVar3717[func26(nVar2815)] := 680;
- assume nVar3716[func21(nVar1718)] > 0;
- nVar3722[func50(nVar1431)] := 675;
- nVar3721[func43(nVar1431)] := 0;
- nVar3717[func26(nVar3390)] := 689;
- assume nVar3716[func21(nVar3138)] > 0;
- nVar3722[func50(nVar2365)] := 685;
- nVar3721[func43(nVar2365)] := 0;
- nVar3717[func26(nVar3594)] := 698;
- assume nVar3716[func21(nVar2578)] > 0;
- nVar3722[func50(nVar1895)] := 694;
- nVar3721[func43(nVar1895)] := 0;
- nVar3717[func26(nVar691)] := 707;
- assume nVar3716[func21(nVar3538)] > 0;
- nVar3722[func50(nVar3083)] := 703;
- nVar3721[func43(nVar3083)] := 0;
- nVar3717[func26(nVar753)] := 716;
- assume nVar3716[func21(nVar1294)] > 0;
- nVar3722[func50(nVar1690)] := 712;
- nVar3721[func43(nVar1690)] := 0;
- nVar3717[func26(nVar1316)] := 726;
- assume nVar3716[func21(nVar1909)] > 0;
- nVar3722[func50(nVar3373)] := 721;
- nVar3721[func43(nVar3373)] := 0;
- nVar3717[func26(nVar624)] := 735;
- assume nVar3716[func21(nVar3544)] > 0;
- nVar3722[func50(nVar1548)] := 731;
- nVar3721[func43(nVar1548)] := 0;
- nVar3717[func26(nVar3111)] := 744;
- assume nVar3716[func21(nVar3657)] > 0;
- nVar3722[func50(nVar3279)] := 740;
- nVar3721[func43(nVar3279)] := 0;
- nVar3717[func26(nVar2001)] := 753;
- assume nVar3716[func21(nVar3534)] > 0;
- nVar3722[func50(nVar3176)] := 749;
- nVar3721[func43(nVar3176)] := 0;
- nVar3717[func26(nVar1915)] := 760;
- assume nVar3716[func21(nVar2444)] > 0;
- nVar3722[func50(nVar1472)] := 763;
- nVar3721[func43(nVar1472)] := 0;
- nVar3717[func26(nVar3661)] := 767;
- assume nVar3716[func21(nVar3400)] > 0;
- nVar3722[func50(nVar14)] := 770;
- nVar3721[func43(nVar14)] := 0;
- nVar3717[func26(nVar3261)] := 977;
- assume nVar3716[func21(nVar1164)] > 0;
- nVar3722[func50(nVar2713)] := 973;
- nVar3721[func43(nVar2713)] := 0;
- call {:si_unique_call 4894} nVar4887 := proc132();
- assume nVar1175 > 0;
- assume nVar399 > 0;
- assume nVar2621 > 0;
- assume nVar3712[func9(nVar1347)] > 0;
- assume nVar3712[func9(nVar371)] > 0;
- assume nVar3712[func9(nVar573)] > 0;
- assume nVar347 > 0;
- assume nVar3048 > 0;
- assume nVar3712[func9(nVar2368)] > 0;
- assume nVar3712[func9(nVar2948)] > 0;
- assume nVar3712[func9(nVar3240)] > 0;
- assume nVar2754 > 0;
- assume nVar2103 > 0;
- assume nVar3062 > 0;
- assume nVar2632 > 0;
- assume nVar1040 > 0;
- assume nVar3712[func9(nVar3424)] > 0;
- assume nVar3712[func9(nVar2898)] > 0;
- assume nVar3712[func9(nVar1366)] > 0;
- assume nVar3712[func9(nVar1264)] > 0;
- assume nVar3712[func9(nVar412)] > 0;
- assume nVar3712[func9(nVar2957)] > 0;
- assume nVar3712[func9(nVar3577)] > 0;
- assume nVar3712[func9(nVar876)] > 0;
- assume nVar3712[func9(nVar628)] > 0;
- assume nVar3712[func9(nVar1457)] > 0;
- assume nVar3712[func9(nVar194)] > 0;
- assume nVar3712[func9(nVar2771)] > 0;
- assume nVar3712[func9(nVar971)] > 0;
- assume nVar3712[func9(nVar968)] > 0;
- assume nVar3712[func9(nVar966)] > 0;
- assume nVar3712[func9(nVar1235)] > 0;
- nVar1254 := 0;
- nVar280 := -1;
- assume nVar3715[func20(nVar1871)] > 0;
- assume nVar3715[func20(nVar1789)] > 0;
- assume nVar3715[func20(nVar2411)] > 0;
- assume nVar3715[func20(nVar3338)] > 0;
- assume nVar3715[func20(nVar3638)] > 0;
- assume nVar3715[func20(nVar3451)] > 0;
- assume nVar3715[func20(nVar736)] > 0;
- assume nVar3715[func20(nVar3348)] > 0;
- assume nVar3715[func20(nVar212)] > 0;
- assume nVar3715[func20(nVar1853)] > 0;
- assume nVar3715[func20(nVar1455)] > 0;
- assume nVar3715[func20(nVar549)] > 0;
- assume nVar3715[func20(nVar2251)] > 0;
- assume nVar3715[func20(nVar3569)] > 0;
- assume nVar3715[func20(nVar2095)] > 0;
- assume nVar3715[func20(nVar260)] > 0;
- assume nVar3715[func20(nVar3389)] > 0;
- assume nVar3715[func20(nVar494)] > 0;
- assume nVar3715[func20(nVar765)] > 0;
- assume nVar3715[func20(nVar1476)] > 0;
- assume nVar3715[func20(nVar3469)] > 0;
- assume nVar3715[func20(nVar1512)] > 0;
- assume nVar3715[func20(nVar582)] > 0;
- assume nVar3715[func20(nVar3295)] > 0;
- assume nVar3715[func20(nVar2631)] > 0;
- assume nVar3715[func20(nVar3423)] > 0;
- assume nVar3715[func20(nVar578)] > 0;
- assume nVar3715[func20(nVar1468)] > 0;
- assume nVar3715[func20(nVar1039)] > 0;
- assume nVar3715[func20(nVar2507)] > 0;
- assume nVar3715[func20(nVar360)] > 0;
- assume nVar3715[func20(nVar2626)] > 0;
- assume nVar3715[func20(nVar2801)] > 0;
- assume nVar3715[func20(nVar3294)] > 0;
- assume nVar3715[func20(nVar2638)] > 0;
- assume nVar3715[func20(nVar2276)] > 0;
- assume nVar3715[func20(nVar3236)] > 0;
- assume nVar3715[func20(nVar1924)] > 0;
- assume nVar3715[func20(nVar899)] > 0;
- assume nVar3715[func20(nVar3377)] > 0;
- assume nVar3715[func20(nVar748)] > 0;
- assume nVar3715[func20(nVar2933)] > 0;
- assume nVar3715[func20(nVar3134)] > 0;
- assume nVar3715[func20(nVar577)] > 0;
- assume nVar3715[func20(nVar2208)] > 0;
- assume nVar3715[func20(nVar1150)] > 0;
- assume nVar3715[func20(nVar188)] > 0;
- assume nVar3715[func20(nVar1379)] > 0;
- assume nVar3715[func20(nVar2065)] > 0;
- assume nVar3715[func20(nVar2102)] > 0;
- assume nVar3715[func20(nVar3103)] > 0;
- assume nVar3715[func20(nVar1665)] > 0;
- assume nVar3715[func20(nVar2235)] > 0;
- assume nVar3715[func20(nVar3369)] > 0;
- assume nVar3715[func20(nVar2137)] > 0;
- assume nVar3715[func20(nVar3600)] > 0;
- assume nVar3715[func20(nVar3257)] > 0;
- assume nVar3715[func20(nVar1638)] > 0;
- assume nVar3715[func20(nVar3528)] > 0;
- assume nVar3715[func20(nVar1786)] > 0;
- assume nVar3715[func20(nVar38)] > 0;
- assume nVar3715[func20(nVar1959)] > 0;
- assume nVar3715[func20(nVar1238)] > 0;
- assume nVar3715[func20(nVar2519)] > 0;
- assume nVar3715[func20(nVar2246)] > 0;
- assume nVar3715[func20(nVar2831)] > 0;
- assume nVar3715[func20(nVar3699)] > 0;
- assume nVar3715[func20(nVar3315)] > 0;
- assume nVar3715[func20(nVar1685)] > 0;
- assume nVar3715[func20(nVar1340)] > 0;
- assume nVar3715[func20(nVar2766)] > 0;
- assume nVar3715[func20(nVar832)] > 0;
- assume nVar3715[func20(nVar1497)] > 0;
- assume nVar3715[func20(nVar2204)] > 0;
- assume nVar3715[func20(nVar3406)] > 0;
- assume nVar3715[func20(nVar2855)] > 0;
- assume nVar3715[func20(nVar237)] > 0;
- assume nVar3715[func20(nVar664)] > 0;
- assume nVar3715[func20(nVar3409)] > 0;
- assume nVar3715[func20(nVar1700)] > 0;
- assume nVar3715[func20(nVar2896)] > 0;
- assume nVar3715[func20(nVar1816)] > 0;
- assume nVar3715[func20(nVar669)] > 0;
- assume nVar3715[func20(nVar3483)] > 0;
- assume nVar3715[func20(nVar3507)] > 0;
- assume nVar3715[func20(nVar646)] > 0;
- assume nVar3715[func20(nVar3254)] > 0;
- assume nVar3715[func20(nVar2769)] > 0;
- assume nVar3715[func20(nVar2323)] > 0;
- assume nVar3715[func20(nVar3182)] > 0;
- assume nVar3715[func20(nVar755)] > 0;
- assume nVar3715[func20(nVar2148)] > 0;
- assume nVar3715[func20(nVar3676)] > 0;
- assume nVar3715[func20(nVar3269)] > 0;
- assume nVar3715[func20(nVar3184)] > 0;
- assume nVar3715[func20(nVar235)] > 0;
- assume nVar3715[func20(nVar398)] > 0;
- assume nVar3715[func20(nVar923)] > 0;
- assume nVar3715[func20(nVar3146)] > 0;
- assume nVar3715[func20(nVar3401)] > 0;
- assume nVar3715[func20(nVar1922)] > 0;
- assume nVar3715[func20(nVar563)] > 0;
- assume nVar3715[func20(nVar3288)] > 0;
- assume nVar3715[func20(nVar3214)] > 0;
- assume nVar3715[func20(nVar660)] > 0;
- assume nVar3715[func20(nVar2522)] > 0;
- assume nVar3715[func20(nVar1600)] > 0;
- assume nVar3715[func20(nVar3061)] > 0;
- assume nVar3715[func20(nVar3708)] > 0;
- assume nVar3715[func20(nVar3156)] > 0;
- assume nVar3715[func20(nVar430)] > 0;
- assume nVar3715[func20(nVar2997)] > 0;
- assume nVar3715[func20(nVar3180)] > 0;
- assume nVar3715[func20(nVar2155)] > 0;
- assume nVar3715[func20(nVar2400)] > 0;
- assume nVar3715[func20(nVar304)] > 0;
- assume nVar3715[func20(nVar1666)] > 0;
- assume nVar3715[func20(nVar2120)] > 0;
- assume nVar3715[func20(nVar1067)] > 0;
- assume nVar3715[func20(nVar2180)] > 0;
- assume nVar3715[func20(nVar821)] > 0;
- assume nVar3715[func20(nVar878)] > 0;
- assume nVar3715[func20(nVar1779)] > 0;
- assume nVar3715[func20(nVar1377)] > 0;
- assume nVar3715[func20(nVar3670)] > 0;
- assume nVar3715[func20(nVar2949)] > 0;
- assume nVar3715[func20(nVar2919)] > 0;
- assume nVar3715[func20(nVar2112)] > 0;
- assume nVar3715[func20(nVar1322)] > 0;
- assume nVar3715[func20(nVar538)] > 0;
- assume nVar3715[func20(nVar7)] > 0;
- assume nVar3715[func20(nVar3104)] > 0;
- assume nVar3715[func20(nVar1802)] > 0;
- assume nVar3715[func20(nVar3466)] > 0;
- assume nVar3715[func20(nVar233)] > 0;
- assume nVar3715[func20(nVar333)] > 0;
- assume nVar3715[func20(nVar3671)] > 0;
- assume nVar3715[func20(nVar2636)] > 0;
- assume nVar3715[func20(nVar238)] > 0;
- assume nVar3715[func20(nVar2210)] > 0;
- assume nVar3715[func20(nVar1095)] > 0;
- assume nVar3715[func20(nVar1841)] > 0;
- assume nVar3715[func20(nVar3601)] > 0;
- assume nVar3715[func20(nVar3392)] > 0;
- assume nVar3715[func20(nVar401)] > 0;
- assume nVar3715[func20(nVar844)] > 0;
- assume nVar3715[func20(nVar964)] > 0;
- assume nVar3715[func20(nVar2205)] > 0;
- assume nVar3715[func20(nVar1170)] > 0;
- assume nVar3715[func20(nVar2306)] > 0;
- assume nVar3715[func20(nVar2833)] > 0;
- assume nVar3715[func20(nVar232)] > 0;
- assume nVar3715[func20(nVar164)] > 0;
- assume nVar3715[func20(nVar1584)] > 0;
- assume nVar3715[func20(nVar2135)] > 0;
- assume nVar3715[func20(nVar341)] > 0;
- assume nVar3715[func20(nVar1777)] > 0;
- assume nVar3715[func20(nVar1896)] > 0;
- assume nVar3715[func20(nVar2429)] > 0;
- assume nVar3715[func20(nVar426)] > 0;
- assume nVar3715[func20(nVar1391)] > 0;
- assume nVar3715[func20(nVar3677)] > 0;
- assume nVar3715[func20(nVar3582)] > 0;
- assume nVar3715[func20(nVar2990)] > 0;
- assume nVar3715[func20(nVar2849)] > 0;
- assume nVar3712[func9(nVar1565)] > 0;
- assume nVar3712[func9(nVar2461)] > 0;
- assume nVar3712[func9(nVar3635)] > 0;
- assume nVar3712[func9(nVar530)] > 0;
- assume nVar3712[func9(nVar2125)] > 0;
- assume nVar3712[func9(nVar1830)] > 0;
- assume nVar3712[func9(nVar2524)] > 0;
- assume nVar3712[func9(nVar3077)] > 0;
- assume nVar3712[func9(nVar3458)] > 0;
- assume nVar3712[func9(nVar2652)] > 0;
- assume nVar3712[func9(nVar1393)] > 0;
- assume nVar3712[func9(nVar3313)] > 0;
- assume nVar3712[func9(nVar3283)] > 0;
- assume nVar3712[func9(nVar3602)] > 0;
- assume nVar3712[func9(nVar1904)] > 0;
- assume nVar3712[func9(nVar1398)] > 0;
- assume nVar3712[func9(nVar623)] > 0;
- assume nVar3712[func9(nVar1790)] > 0;
- assume nVar3712[func9(nVar685)] > 0;
- assume nVar3712[func9(nVar2857)] > 0;
- assume nVar3712[func9(nVar3328)] > 0;
- assume nVar3712[func9(nVar3526)] > 0;
- assume nVar3712[func9(nVar1938)] > 0;
- assume nVar3712[func9(nVar781)] > 0;
- assume nVar3712[func9(nVar1613)] > 0;
- assume nVar3712[func9(nVar1054)] > 0;
- nVar4823 := nVar4607;
- call {:si_unique_call 6280} nVar4871 := proc68(nVar1676, nVar4823);
- call {:si_unique_call 4745} nVar4839 := proc69(8560);
- nVar4834 := nVar4607;
- call {:si_unique_call 6283} nVar4872 := proc70(nVar195, nVar4834);
- call {:si_unique_call 4747} nVar4840 := proc71(8571);
- nVar4825 := nVar4607;
- call {:si_unique_call 6286} nVar4873 := proc72(nVar770, nVar4825);
- call {:si_unique_call 4749} nVar4841 := proc73(8592);
- nVar4836 := nVar4607;
- call {:si_unique_call 6289} nVar4874 := proc74(nVar864, nVar4836);
- call {:si_unique_call 4751} nVar4842 := proc75(8624);
- nVar4837 := nVar4607;
- call {:si_unique_call 6292} nVar4875 := proc76(nVar3096, nVar4837);
- call {:si_unique_call 4753} nVar4843 := proc77(8640);
- nVar4828 := nVar4607;
- call {:si_unique_call 6295} nVar4876 := proc78(nVar1136, nVar4828);
- call {:si_unique_call 4755} nVar4844 := proc79(8647);
- nVar4819 := nVar4607;
- call {:si_unique_call 6298} nVar4877 := proc80(nVar606, nVar4819);
- call {:si_unique_call 4757} nVar4845 := proc81(8658);
- nVar4831 := nVar4607;
- call {:si_unique_call 6301} nVar4878 := proc82(nVar2935, nVar4831);
- call {:si_unique_call 4759} nVar4846 := proc83(8661);
- nVar4822 := nVar4607;
- call {:si_unique_call 6304} nVar4879 := proc84(nVar403, nVar4822);
- call {:si_unique_call 4761} nVar4847 := proc85(8691);
- nVar4833 := nVar4607;
- call {:si_unique_call 6307} nVar4880 := proc86(nVar3675, nVar4833);
- call {:si_unique_call 4763} nVar4848 := proc87(8702);
- nVar4824 := nVar4607;
- call {:si_unique_call 6310} nVar4881 := proc88(nVar2648, nVar4824);
- call {:si_unique_call 4765} nVar4849 := proc89(8719);
- nVar4835 := nVar4607;
- call {:si_unique_call 6313} nVar4882 := proc90(nVar1756, nVar4835);
- call {:si_unique_call 4767} nVar4850 := proc91(8722);
- nVar4826 := nVar4607;
- call {:si_unique_call 6316} nVar4883 := proc92(nVar3521, nVar4826);
- call {:si_unique_call 4769} nVar4851 := proc93(8725);
- nVar4838 := nVar4607;
- call {:si_unique_call 6319} nVar4884 := proc94(nVar1042, nVar4838);
- call {:si_unique_call 4771} nVar4852 := proc95(8764);
- call {:si_unique_call 4773} nVar4853 := proc96(nVar1042);
- call {:si_unique_call 4775} nVar4854 := proc97(nVar3521);
- call {:si_unique_call 4777} nVar4855 := proc98(nVar1756);
- call {:si_unique_call 4779} nVar4856 := proc99(nVar2648);
- call {:si_unique_call 4781} nVar4857 := proc100(nVar3675);
- call {:si_unique_call 4783} nVar4858 := proc101(nVar403);
- call {:si_unique_call 4785} nVar4859 := proc102(nVar2935);
- call {:si_unique_call 4787} nVar4860 := proc103(nVar606);
- call {:si_unique_call 4789} nVar4861 := proc104(nVar1136);
- call {:si_unique_call 4791} nVar4862 := proc105(nVar3096);
- call {:si_unique_call 4793} nVar4863 := proc106(nVar864);
- call {:si_unique_call 4795} nVar4864 := proc107(nVar770);
- call {:si_unique_call 4797} nVar4865 := proc108(nVar195);
- call {:si_unique_call 4799} nVar4866 := proc109(nVar1676);
- nVar4829 := nVar4606;
- call {:si_unique_call 6322} nVar4885 := proc110(nVar223, nVar4829);
- call {:si_unique_call 4801} nVar4867 := proc111(8877);
- nVar4820 := nVar4606;
- call {:si_unique_call 6325} nVar4886 := proc112(nVar3559, nVar4820);
- call {:si_unique_call 4803} nVar4868 := proc113(8912);
- call {:si_unique_call 4805} nVar4869 := proc114(nVar3559);
- call {:si_unique_call 4807} nVar4870 := proc115(nVar223);
- return;
-}
-
-
-
-procedure proc116() returns (nVar4910: int);
- modifies nVar1, nVar3718, nVar3719;
-
-
-
-procedure proc117(nVar4897: int, nVar4898: int);
- modifies nVar3718, nVar3719;
-
-
-
-procedure proc118(nVar4891: int, nVar4892: int);
- modifies nVar3718;
-
-
-
-procedure proc119(nVar4888: int) returns (nVar4889: int);
-
-
-
-implementation proc119(nVar4888: int) returns (nVar4889: int)
-{
- var nVar4890: int;
-
- anon0__unique__1:
- nVar4889 := nVar4890;
- return;
-}
-
-
-
-implementation proc118(nVar4891: int, nVar4892: int)
-{
- var nVar4893: int;
- var nVar4894: int;
- var nVar4895: int;
- var nVar4896: int;
-
- anon0__unique__1:
- nVar4894 := nVar4891;
- nVar4895 := nVar4892;
- assume nVar4894 > 0;
- nVar3718[func29(nVar4894)] := nVar4895;
- assume nVar4894 > 0;
- nVar4893 := nVar3718[func29(nVar4894)];
- call {:si_unique_call 6334} nVar4896 := proc119(nVar4893);
- return;
-}
-
-
-
-implementation proc117(nVar4897: int, nVar4898: int)
-{
- var nVar4899: int;
- var nVar4900: int;
-
- anon0__unique__1:
- nVar4899 := nVar4897;
- nVar4900 := nVar4898;
- assume nVar4899 > 0;
- call {:si_unique_call 9} proc118(func31(nVar4899), nVar4900);
- assume nVar4899 > 0;
- nVar3719[func30(nVar4899)] := 1;
- return;
-}
-
-
-
-procedure proc120(nVar4908: int);
-
-
-
-procedure proc121(nVar4904: int);
-
-
-
-procedure proc122(nVar4901: int) returns (nVar4902: int);
-
-
-
-implementation proc122(nVar4901: int) returns (nVar4902: int)
-{
- var nVar4903: int;
-
- anon0__unique__1:
- nVar4902 := nVar4903;
- return;
-}
-
-
-
-implementation proc121(nVar4904: int)
-{
- var nVar4905: int;
- var nVar4906: int;
- var nVar4907: int;
-
- anon0__unique__1:
- nVar4906 := nVar4904;
- assume nVar4906 > 0;
- nVar4905 := nVar3718[func29(nVar4906)];
- call {:si_unique_call 6} nVar4907 := proc122(nVar4905);
- return;
-}
-
-
-
-implementation proc120(nVar4908: int)
-{
- var nVar4909: int;
-
- anon0__unique__1:
- nVar4909 := nVar4908;
- assume nVar4909 > 0;
- call {:si_unique_call 6339} proc121(func31(nVar4909));
- return;
-}
-
-
-
-implementation proc116() returns (nVar4910: int)
-{
- var nVar4911: int;
- var nVar4912: int;
- var nVar4913: int;
- var nVar4914: int;
- var nVar4915: int;
-
- anon0__unique__1:
- call {:si_unique_call 4730} nVar4912 := proc130(4);
- call {:si_unique_call 4731} nVar4914 := proc130(16);
- nVar4913 := 0;
- assume nVar4914 > 0;
- call {:si_unique_call 4741} proc117(nVar4914, nVar1042);
- goto L9__unique__2;
-
- L9__unique__2:
- goto anon5_Then__unique__3;
-
- anon5_Then__unique__3:
- assume nVar4914 > 0;
- assume nVar3719[func30(nVar4914)] == 0;
- call {:si_unique_call 4734} proc120(nVar4914);
- nVar4910 := nVar4913;
- return;
-}
-
-
-
-procedure proc123(nVar4916: int, nVar4917: int);
- modifies nVar3720;
-
-
-
-implementation proc123(nVar4916: int, nVar4917: int)
-{
- var nVar4918: int;
- var nVar4919: int;
- var nVar4920: int;
- var nVar4921: int;
-
- anon0__unique__1:
- nVar4919 := nVar4916;
- nVar4920 := nVar4917;
- assume nVar4919 > 0;
- nVar3720[func32(nVar4919)] := nVar4920;
- goto anon3_Then__unique__2;
-
- anon3_Then__unique__2:
- assume nVar4919 > 0;
- assume nVar3720[func32(nVar4919)] == 0;
- goto L1__unique__3;
-
- L1__unique__3:
- return;
-}
-
-
-
-procedure proc124(nVar4922: int) returns (nVar4923: int);
-
-
-
-implementation proc124(nVar4922: int) returns (nVar4923: int)
-{
- var nVar4924: int;
-
- anon0__unique__1:
- nVar4924 := nVar4922;
- assume nVar4924 > 0;
- nVar4923 := nVar3720[func32(nVar4924)];
- return;
-}
-
-
-
-procedure proc125(nVar4925: int) returns (nVar4926: int);
-
-
-
-implementation proc125(nVar4925: int) returns (nVar4926: int)
-{
- var nVar4927: int;
-
- anon0__unique__1:
- nVar4926 := nVar4927;
- return;
-}
-
-
-
-procedure proc126();
- modifies nVar3711;
-
-
-
-procedure proc127(nVar4931: int);
- modifies nVar3711;
-
-
-
-procedure proc128(nVar4929: int);
- modifies nVar3711;
-
-
-
-procedure proc129(nVar4928: int);
- modifies nVar3711;
-
-
-
-implementation proc129(nVar4928: int)
-{
-
- anon0__unique__1:
- nVar3711 := 1;
- return;
-}
-
-
-
-implementation proc128(nVar4929: int)
-{
- var nVar4930: int;
-
- anon0__unique__1:
- nVar4930 := nVar4929;
- call {:si_unique_call 6374} proc129(nVar4614);
- return;
-}
-
-
-
-implementation proc127(nVar4931: int)
-{
- var nVar4932: int;
-
- anon0__unique__1:
- nVar4932 := nVar4931;
- call {:si_unique_call 6370} proc128(nVar4932);
- goto anon3_Then__unique__2;
-
- anon3_Then__unique__2:
- assume nVar3711 == 1;
- goto LM2__unique__3;
-
- LM2__unique__3:
- return;
-}
-
-
-
-implementation proc126()
-{
-
- anon0__unique__1:
- call {:si_unique_call 6336} proc127(nVar4632);
- goto anon3_Then__unique__2;
-
- anon3_Then__unique__2:
- assume nVar3711 == 1;
- goto LM2__unique__3;
-
- LM2__unique__3:
- return;
-}
-
-
-
-implementation proc64() returns (nVar4933: int, nVar4934: bool)
-{
- var nVar4935: int;
- var nVar4936: int;
- var nVar4937: int;
- var nVar4938: int;
- var nVar4939: int;
- var nVar4940: int;
- var nVar4941: int;
- var nVar4942: int;
- var nVar4943: int;
- var nVar4944: int;
- var nVar4945: int;
- var nVar4946: int;
- var nVar4947: int;
- var nVar4948: int;
- var nVar4949: int;
- var nVar4950: int;
- var nVar4951: int;
- var nVar4952: int;
- var nVar4953: int;
- var nVar4954: int;
- var nVar4955: int;
- var nVar4956: int;
- var nVar4957: int;
- var nVar4958: int;
- var nVar4959: int;
- var nVar4960: int;
- var nVar4961: int;
- var nVar4962: int;
- var nVar4963: int;
- var nVar4964: int;
- var nVar4965: int;
- var nVar4966: int;
- var nVar4967: int;
- var nVar4968: int;
- var nVar4969: int;
- var nVar4970: int;
- var nVar4971: int;
- var nVar4972: int;
- var nVar4973: int;
- var nVar4974: int;
- var nVar4975: int;
- var nVar4976: int;
- var nVar4977: int;
- var nVar4978: int;
- var nVar4979: int;
- var nVar4980: int;
- var nVar4981: int;
- var nVar4982: int;
- var nVar4983: int;
- var nVar4984: int;
- var nVar4985: int;
- var nVar4986: int;
- var nVar4987: int;
- var nVar4988: int;
- var nVar4989: int;
- var nVar4990: int;
- var nVar4991: int;
- var nVar4992: int;
- var nVar4993: int;
- var nVar4994: int;
- var nVar4995: int;
- var nVar4996: int;
- var nVar4997: int;
- var nVar4998: int;
- var nVar4999: int;
- var nVar5000: int;
- var nVar5001: int;
- var nVar5002: int;
- var nVar5003: int;
- var nVar5004: int;
- var nVar5005: int;
- var nVar5006: int;
- var nVar5007: int;
- var nVar5008: int;
- var nVar5009: int;
- var nVar5010: int;
- var nVar5011: int;
- var nVar5012: int;
- var nVar5013: int;
- var nVar5014: int;
- var nVar5015: int;
- var nVar5016: int;
- var nVar5017: int;
- var nVar5018: int;
- var nVar5019: int;
- var nVar5020: int;
- var nVar5021: int;
- var nVar5022: int;
- var nVar5023: int;
- var nVar5024: int;
- var nVar5025: int;
- var nVar5026: int;
- var nVar5027: int;
- var nVar5028: int;
- var nVar5029: int;
- var nVar5030: int;
- var nVar5031: int;
- var nVar5032: int;
- var nVar5033: int;
- var nVar5034: int;
- var nVar5035: int;
- var nVar5036: int;
- var nVar5037: int;
- var nVar5038: int;
- var nVar5039: int;
- var nVar5040: int;
- var nVar5041: int;
- var nVar5042: int;
- var nVar5043: int;
- var nVar5044: int;
- var nVar5045: int;
- var nVar5046: int;
- var nVar5047: int;
- var nVar5048: int;
- var nVar5049: int;
- var nVar5050: int;
- var nVar5051: int;
- var nVar5052: int;
- var nVar5053: int;
- var nVar5054: int;
- var nVar5055: int;
- var nVar5056: int;
- var nVar5057: int;
- var nVar5058: int;
- var nVar5059: int;
- var nVar5060: int;
- var nVar5061: int;
- var nVar5062: int;
- var nVar5063: int;
- var nVar5064: int;
- var nVar5065: int;
- var nVar5066: int;
- var nVar5067: int;
- var nVar5068: int;
- var nVar5069: int;
- var nVar5070: int;
- var nVar5071: int;
- var nVar5072: int;
- var nVar5073: int;
- var nVar5074: int;
- var nVar5075: int;
- var nVar5076: int;
- var nVar5077: int;
- var nVar5078: int;
- var nVar5079: int;
- var nVar5080: int;
- var nVar5081: int;
- var nVar5082: int;
- var nVar5083: int;
- var nVar5084: int;
- var nVar5085: int;
- var nVar5086: int;
- var nVar5087: int;
- var nVar5088: int;
- var nVar5089: int;
- var nVar5090: int;
- var nVar5091: int;
- var nVar5092: int;
- var nVar5093: int;
- var nVar5094: int;
- var nVar5095: int;
- var nVar5096: int;
- var nVar5097: int;
- var nVar5098: int;
- var nVar5099: int;
- var nVar5100: int;
- var nVar5101: int;
- var nVar5102: int;
- var nVar5103: int;
- var nVar5104: int;
- var nVar5105: int;
- var nVar5106: int;
- var nVar5107: int;
- var nVar5108: int;
- var nVar5109: int;
- var nVar5110: int;
- var nVar5111: int;
- var nVar5112: int;
- var nVar5113: int;
- var nVar5114: int;
- var nVar5115: int;
- var nVar5116: int;
- var nVar5117: int;
- var nVar5118: int;
- var nVar5119: int;
- var nVar5120: int;
- var nVar5121: int;
- var nVar5122: int;
- var nVar5123: int;
- var nVar5124: int;
- var nVar5125: int;
- var nVar5126: int;
- var nVar5127: int;
- var nVar5128: int;
- var nVar5129: int;
- var nVar5130: int;
- var nVar5131: int;
- var nVar5132: int;
- var nVar5133: int;
- var nVar5134: int;
- var nVar5135: int;
- var nVar5136: int;
- var nVar5137: int;
- var nVar5138: int;
- var nVar5139: int;
- var nVar5140: int;
- var nVar5141: int;
- var nVar5142: int;
- var nVar5143: int;
- var nVar5144: int;
- var nVar5145: int;
- var nVar5146: int;
- var nVar5147: int;
- var nVar5148: int;
- var nVar5149: int;
- var nVar5150: int;
- var nVar5151: int;
- var nVar5152: int;
- var nVar5153: int;
- var nVar5154: int;
- var nVar5155: int;
- var nVar5156: int;
- var nVar5157: int;
- var nVar5158: int;
- var nVar5159: int;
- var nVar5160: int;
- var nVar5161: int;
- var nVar5162: int;
- var nVar5163: int;
- var nVar5164: int;
- var nVar5165: int;
- var nVar5166: int;
- var nVar5167: int;
- var nVar5168: int;
- var nVar5169: int;
- var nVar5170: int;
- var nVar5171: int;
- var nVar5172: int;
- var nVar5173: int;
- var nVar5174: int;
- var nVar5175: int;
- var nVar5176: int;
- var nVar5177: int;
- var nVar5178: int;
- var nVar5179: int;
- var nVar5180: int;
- var nVar5181: int;
- var nVar5182: int;
- var nVar5183: int;
- var nVar5184: int;
- var nVar5185: int;
- var nVar5186: int;
- var nVar5187: int;
- var nVar5188: int;
- var nVar5189: int;
- var nVar5190: int;
- var nVar5191: int;
- var nVar5192: int;
- var nVar5193: int;
- var nVar5194: int;
- var nVar5195: int;
- var nVar5196: int;
- var nVar5197: int;
- var nVar5198: int;
- var nVar5199: int;
- var nVar5200: int;
- var nVar5201: int;
- var nVar5202: int;
- var nVar5203: int;
- var nVar5204: int;
- var nVar5205: int;
- var nVar5206: int;
- var nVar5207: int;
- var nVar5208: int;
- var nVar5209: int;
- var nVar5210: int;
- var nVar5211: int;
- var nVar5212: int;
- var nVar5213: int;
- var nVar5214: int;
- var nVar5215: int;
- var nVar5216: int;
- var nVar5217: int;
- var nVar5218: int;
- var nVar5219: int;
- var nVar5220: int;
- var nVar5221: int;
- var nVar5222: int;
- var nVar5223: int;
- var nVar5224: int;
- var nVar5225: int;
- var nVar5226: int;
- var nVar5227: int;
- var nVar5228: int;
- var nVar5229: int;
- var nVar5230: int;
- var nVar5231: int;
- var nVar5232: int;
- var nVar5233: int;
- var nVar5234: int;
- var nVar5235: int;
- var nVar5236: int;
- var nVar5237: int;
- var nVar5238: int;
- var nVar5239: int;
- var nVar5240: int;
- var nVar5241: int;
- var nVar5242: int;
- var nVar5243: int;
- var nVar5244: int;
- var nVar5245: int;
- var nVar5246: int;
- var nVar5247: int;
- var nVar5248: int;
- var nVar5249: int;
- var nVar5250: int;
- var nVar5251: int;
- var nVar5252: int;
- var nVar5253: int;
- var nVar5254: int;
- var nVar5255: int;
- var nVar5256: int;
- var nVar5257: int;
- var nVar5258: int;
- var nVar5259: int;
- var nVar5260: int;
- var nVar5261: int;
- var nVar5262: int;
- var nVar5263: int;
- var nVar5264: int;
- var nVar5265: int;
- var nVar5266: int;
- var nVar5267: int;
- var nVar5268: int;
- var nVar5269: int;
- var nVar5270: int;
- var nVar5271: int;
- var nVar5272: int;
- var nVar5273: int;
- var nVar5274: int;
- var nVar5275: int;
- var nVar5276: int;
- var nVar5277: int;
- var nVar5278: int;
- var nVar5279: int;
- var nVar5280: int;
- var nVar5281: int;
- var nVar5282: int;
- var nVar5283: int;
- var nVar5284: int;
- var nVar5285: int;
- var nVar5286: int;
- var nVar5287: int;
- var nVar5288: int;
- var nVar5289: int;
- var nVar5290: int;
- var nVar5291: int;
- var nVar5292: int;
- var nVar5293: int;
- var nVar5294: int;
- var nVar5295: int;
- var nVar5296: int;
- var nVar5297: int;
- var nVar5298: int;
- var nVar5299: int;
- var nVar5300: int;
- var nVar5301: int;
- var nVar5302: int;
- var nVar5303: int;
- var nVar5304: int;
- var nVar5305: int;
- var nVar5306: int;
- var nVar5307: int;
- var nVar5308: int;
- var nVar5309: int;
- var nVar5310: int;
- var nVar5311: int;
- var nVar5312: int;
- var nVar5313: int;
- var nVar5314: int;
- var nVar5315: int;
- var nVar5316: int;
- var nVar5317: int;
- var nVar5318: int;
- var nVar5319: int;
- var nVar5320: int;
- var nVar5321: int;
- var nVar5322: int;
- var nVar5323: int;
- var nVar5324: int;
- var nVar5325: int;
- var nVar5326: int;
- var nVar5327: int;
- var nVar5328: int;
- var nVar5329: int;
- var nVar5330: int;
- var nVar5331: int;
- var nVar5332: int;
- var nVar5333: int;
- var nVar5334: int;
- var nVar5335: int;
- var nVar5336: int;
- var nVar5337: int;
- var nVar5338: int;
- var nVar5339: int;
- var nVar5340: int;
- var nVar5341: int;
- var nVar5342: int;
- var nVar5343: int;
- var nVar5344: int;
- var nVar5345: int;
- var nVar5346: int;
- var nVar5347: int;
- var nVar5348: int;
- var nVar5349: int;
- var nVar5350: int;
- var nVar5351: int;
- var nVar5352: int;
- var nVar5353: int;
- var nVar5354: int;
- var nVar5355: int;
- var nVar5356: int;
- var nVar5357: int;
- var nVar5358: int;
- var nVar5359: int;
- var nVar5360: int;
- var nVar5361: int;
- var nVar5362: int;
- var nVar5363: int;
- var nVar5364: int;
- var nVar5365: int;
- var nVar5366: int;
- var nVar5367: int;
- var nVar5368: int;
- var nVar5369: int;
- var nVar5370: int;
- var nVar5371: int;
- var nVar5372: int;
- var nVar5373: int;
- var nVar5374: int;
- var nVar5375: int;
- var nVar5376: int;
- var nVar5377: int;
- var nVar5378: int;
- var nVar5379: int;
- var nVar5380: int;
- var nVar5381: int;
- var nVar5382: int;
- var nVar5383: int;
- var nVar5384: int;
- var nVar5385: int;
- var nVar5386: int;
- var nVar5387: int;
- var nVar5388: int;
- var nVar5389: int;
- var nVar5390: int;
- var nVar5391: int;
- var nVar5392: int;
- var nVar5393: int;
- var nVar5394: int;
- var nVar5395: int;
- var nVar5396: int;
- var nVar5397: int;
- var nVar5398: int;
- var nVar5399: int;
- var nVar5400: int;
- var nVar5401: int;
- var nVar5402: int;
- var nVar5403: int;
- var nVar5404: int;
- var nVar5405: int;
- var nVar5406: int;
- var nVar5407: int;
- var nVar5408: int;
- var nVar5409: int;
- var nVar5410: int;
- var nVar5411: int;
- var nVar5412: int;
- var nVar5413: int;
- var nVar5414: int;
- var nVar5415: int;
- var nVar5416: int;
- var nVar5417: int;
- var nVar5418: int;
- var nVar5419: int;
- var nVar5420: int;
- var nVar5421: int;
- var nVar5422: int;
- var nVar5423: int;
- var nVar5424: int;
- var nVar5425: int;
- var nVar5426: int;
- var nVar5427: int;
- var nVar5428: int;
- var nVar5429: int;
- var nVar5430: int;
- var nVar5431: int;
- var nVar5432: int;
- var nVar5433: int;
- var nVar5434: int;
- var nVar5435: int;
- var nVar5436: int;
- var nVar5437: int;
- var nVar5438: int;
- var nVar5439: int;
- var nVar5440: int;
- var nVar5441: int;
- var nVar5442: int;
- var nVar5443: int;
- var nVar5444: int;
- var nVar5445: int;
- var nVar5446: int;
- var nVar5447: int;
- var nVar5448: int;
- var nVar5449: int;
- var nVar5450: int;
- var nVar5451: int;
- var nVar5452: int;
- var nVar5453: int;
- var nVar5454: int;
- var nVar5455: int;
- var nVar5456: int;
- var nVar5457: int;
- var nVar5458: int;
- var nVar5459: int;
- var nVar5460: int;
- var nVar5461: int;
- var nVar5462: int;
- var nVar5463: int;
- var nVar5464: int;
- var nVar5465: int;
- var nVar5466: int;
- var nVar5467: int;
- var nVar5468: int;
- var nVar5469: int;
- var nVar5470: int;
- var nVar5471: int;
- var nVar5472: int;
- var nVar5473: int;
- var nVar5474: int;
- var nVar5475: int;
- var nVar5476: int;
- var nVar5477: int;
- var nVar5478: int;
- var nVar5479: int;
- var nVar5480: int;
- var nVar5481: int;
- var nVar5482: int;
- var nVar5483: int;
- var nVar5484: int;
- var nVar5485: int;
- var nVar5486: int;
- var nVar5487: int;
- var nVar5488: int;
- var nVar5489: int;
- var nVar5490: int;
- var nVar5491: int;
- var nVar5492: int;
- var nVar5493: int;
- var nVar5494: int;
- var nVar5495: int;
- var nVar5496: int;
- var nVar5497: int;
- var nVar5498: int;
- var nVar5499: int;
- var nVar5500: int;
- var nVar5501: int;
- var nVar5502: int;
- var nVar5503: int;
- var nVar5504: int;
- var nVar5505: int;
- var nVar5506: int;
- var nVar5507: int;
- var nVar5508: int;
- var nVar5509: int;
- var nVar5510: int;
- var nVar5511: int;
- var nVar5512: int;
- var nVar5513: int;
- var nVar5514: int;
- var nVar5515: int;
- var nVar5516: int;
- var nVar5517: int;
- var nVar5518: int;
- var nVar5519: int;
- var nVar5520: int;
- var nVar5521: int;
- var nVar5522: int;
- var nVar5523: int;
- var nVar5524: int;
- var nVar5525: int;
- var nVar5526: int;
- var nVar5527: int;
- var nVar5528: int;
- var nVar5529: int;
- var nVar5530: int;
- var nVar5531: int;
- var nVar5532: int;
- var nVar5533: int;
- var nVar5534: int;
- var nVar5535: int;
- var nVar5536: int;
- var nVar5537: int;
- var nVar5538: int;
- var nVar5539: int;
- var nVar5540: int;
- var nVar5541: int;
- var nVar5542: int;
- var nVar5543: int;
- var nVar5544: int;
- var nVar5545: int;
- var nVar5546: int;
- var nVar5547: int;
- var nVar5548: int;
- var nVar5549: int;
- var nVar5550: int;
- var nVar5551: int;
- var nVar5552: int;
- var nVar5553: int;
- var nVar5554: int;
- var nVar5555: int;
- var nVar5556: int;
- var nVar5557: int;
- var nVar5558: int;
- var nVar5559: int;
- var nVar5560: int;
- var nVar5561: int;
- var nVar5562: int;
- var nVar5563: int;
- var nVar5564: int;
- var nVar5565: int;
- var nVar5566: int;
- var nVar5567: int;
- var nVar5568: int;
- var nVar5569: int;
- var nVar5570: int;
- var nVar5571: int;
- var nVar5572: int;
- var nVar5573: int;
- var nVar5574: int;
- var nVar5575: int;
- var nVar5576: int;
- var nVar5577: int;
- var nVar5578: int;
- var nVar5579: int;
- var nVar5580: int;
- var nVar5581: int;
- var nVar5582: int;
- var nVar5583: int;
- var nVar5584: int;
- var nVar5585: int;
- var nVar5586: int;
- var nVar5587: int;
- var nVar5588: int;
- var nVar5589: int;
- var nVar5590: int;
- var nVar5591: int;
- var nVar5592: int;
- var nVar5593: int;
- var nVar5594: int;
- var nVar5595: int;
- var nVar5596: int;
- var nVar5597: int;
- var nVar5598: int;
- var nVar5599: int;
- var nVar5600: int;
- var nVar5601: int;
- var nVar5602: int;
- var nVar5603: int;
- var nVar5604: int;
- var nVar5605: int;
- var nVar5606: int;
- var nVar5607: int;
- var nVar5608: int;
- var nVar5609: int;
- var nVar5610: int;
- var nVar5611: int;
- var nVar5612: int;
- var nVar5613: int;
- var nVar5614: int;
- var nVar5615: int;
- var nVar5616: int;
- var nVar5617: int;
- var nVar5618: int;
- var nVar5619: int;
- var nVar5620: int;
- var nVar5621: int;
- var nVar5622: int;
- var nVar5623: int;
- var nVar5624: int;
- var nVar5625: int;
- var nVar5626: int;
- var nVar5627: int;
- var nVar5628: int;
- var nVar5629: int;
- var nVar5630: int;
- var nVar5631: int;
- var nVar5632: int;
- var nVar5633: int;
- var nVar5634: int;
- var nVar5635: int;
- var nVar5636: int;
- var nVar5637: int;
- var nVar5638: int;
- var nVar5639: int;
- var nVar5640: int;
- var nVar5641: int;
- var nVar5642: int;
- var nVar5643: int;
- var nVar5644: int;
- var nVar5645: int;
- var nVar5646: int;
- var nVar5647: int;
- var nVar5648: int;
- var nVar5649: int;
- var nVar5650: int;
- var nVar5651: int;
- var nVar5652: int;
- var nVar5653: int;
- var nVar5654: int;
- var nVar5655: int;
- var nVar5656: int;
- var nVar5657: int;
- var nVar5658: int;
- var nVar5659: int;
- var nVar5660: int;
- var nVar5661: int;
- var nVar5662: int;
- var nVar5663: int;
- var nVar5664: int;
- var nVar5665: int;
- var nVar5666: int;
- var nVar5667: int;
- var nVar5668: int;
- var nVar5669: int;
- var nVar5670: int;
- var nVar5671: int;
- var nVar5672: int;
- var nVar5673: int;
- var nVar5674: int;
- var nVar5675: int;
- var nVar5676: int;
- var nVar5677: int;
- var nVar5678: int;
- var nVar5679: int;
- var nVar5680: int;
- var nVar5681: int;
- var nVar5682: int;
- var nVar5683: int;
- var nVar5684: int;
- var nVar5685: int;
- var nVar5686: int;
- var nVar5687: int;
- var nVar5688: int;
- var nVar5689: int;
- var nVar5690: int;
- var nVar5691: int;
- var nVar5692: int;
- var nVar5693: int;
- var nVar5694: int;
- var nVar5695: int;
- var nVar5696: int;
- var nVar5697: int;
- var nVar5698: int;
- var nVar5699: int;
- var nVar5700: int;
- var nVar5701: int;
- var nVar5702: int;
- var nVar5703: int;
- var nVar5704: int;
- var nVar5705: int;
- var nVar5706: int;
- var nVar5707: int;
- var nVar5708: int;
- var nVar5709: int;
- var nVar5710: int;
- var nVar5711: int;
- var nVar5712: int;
- var nVar5713: int;
- var nVar5714: int;
- var nVar5715: int;
- var nVar5716: int;
- var nVar5717: int;
- var nVar5718: int;
- var nVar5719: int;
- var nVar5720: int;
- var nVar5721: int;
- var nVar5722: int;
- var nVar5723: int;
- var nVar5724: int;
- var nVar5725: int;
- var nVar5726: int;
- var nVar5727: int;
- var nVar5728: int;
- var nVar5729: int;
- var nVar5730: int;
- var nVar5731: int;
- var nVar5732: int;
- var nVar5733: int;
- var nVar5734: int;
- var nVar5735: int;
- var nVar5736: int;
- var nVar5737: int;
- var nVar5738: int;
- var nVar5739: int;
- var nVar5740: int;
- var nVar5741: int;
- var nVar5742: int;
- var nVar5743: int;
- var nVar5744: int;
- var nVar5745: int;
- var nVar5746: int;
- var nVar5747: int;
- var nVar5748: int;
- var nVar5749: int;
- var nVar5750: int;
- var nVar5751: int;
- var nVar5752: int;
- var nVar5753: int;
- var nVar5754: int;
- var nVar5755: int;
- var nVar5756: int;
- var nVar5757: int;
- var nVar5758: int;
- var nVar5759: int;
- var nVar5760: int;
- var nVar5761: int;
- var nVar5762: int;
- var nVar5763: int;
- var nVar5764: int;
- var nVar5765: int;
- var nVar5766: int;
- var nVar5767: int;
- var nVar5768: int;
- var nVar5769: int;
- var nVar5770: int;
- var nVar5771: int;
- var nVar5772: int;
- var nVar5773: int;
- var nVar5774: int;
- var nVar5775: int;
- var nVar5776: int;
- var nVar5777: int;
- var nVar5778: int;
- var nVar5779: int;
- var nVar5780: int;
- var nVar5781: int;
- var nVar5782: int;
- var nVar5783: int;
- var nVar5784: int;
- var nVar5785: int;
- var nVar5786: int;
- var nVar5787: int;
- var nVar5788: int;
- var nVar5789: int;
- var nVar5790: int;
- var nVar5791: int;
- var nVar5792: int;
- var nVar5793: int;
- var nVar5794: int;
- var nVar5795: int;
-
- anon0__unique__1:
- nVar4934 := true;
- assume nVar1 > 0;
- call {:si_unique_call 46} nVar2 := proc130(28);
- call {:si_unique_call 47} nVar3 := proc130(12);
- call {:si_unique_call 48} nVar4 := proc130(28);
- call {:si_unique_call 49} nVar5 := proc130(24);
- call {:si_unique_call 50} nVar6 := proc130(28);
- call {:si_unique_call 51} nVar7 := proc130(4);
- call {:si_unique_call 52} nVar8 := proc130(28);
- call {:si_unique_call 53} nVar9 := proc130(16);
- call {:si_unique_call 54} nVar10 := proc130(28);
- call {:si_unique_call 55} nVar11 := proc130(28);
- call {:si_unique_call 56} nVar12 := proc130(28);
- call {:si_unique_call 57} nVar13 := proc130(28);
- call {:si_unique_call 58} nVar14 := proc130(16);
- call {:si_unique_call 59} nVar15 := proc130(28);
- call {:si_unique_call 60} nVar16 := proc130(28);
- call {:si_unique_call 61} nVar17 := proc130(28);
- call {:si_unique_call 62} nVar18 := proc130(28);
- call {:si_unique_call 63} nVar19 := proc130(28);
- call {:si_unique_call 64} nVar20 := proc130(28);
- call {:si_unique_call 65} nVar21 := proc130(28);
- call {:si_unique_call 66} nVar22 := proc130(28);
- call {:si_unique_call 67} nVar23 := proc130(28);
- call {:si_unique_call 68} nVar24 := proc130(28);
- call {:si_unique_call 69} nVar25 := proc130(28);
- call {:si_unique_call 70} nVar26 := proc130(28);
- call {:si_unique_call 71} nVar27 := proc130(28);
- call {:si_unique_call 72} nVar28 := proc130(28);
- call {:si_unique_call 73} nVar29 := proc130(28);
- call {:si_unique_call 74} nVar30 := proc130(28);
- call {:si_unique_call 75} nVar31 := proc130(28);
- call {:si_unique_call 76} nVar32 := proc130(24);
- call {:si_unique_call 77} nVar33 := proc130(28);
- call {:si_unique_call 78} nVar34 := proc130(28);
- call {:si_unique_call 79} nVar35 := proc130(28);
- call {:si_unique_call 80} nVar36 := proc130(28);
- call {:si_unique_call 81} nVar37 := proc130(28);
- call {:si_unique_call 82} nVar38 := proc130(4);
- call {:si_unique_call 83} nVar39 := proc130(28);
- call {:si_unique_call 84} nVar40 := proc130(28);
- call {:si_unique_call 85} nVar41 := proc130(28);
- call {:si_unique_call 86} nVar42 := proc130(28);
- call {:si_unique_call 87} nVar43 := proc130(28);
- call {:si_unique_call 88} nVar44 := proc130(28);
- call {:si_unique_call 89} nVar45 := proc130(24);
- call {:si_unique_call 90} nVar46 := proc130(28);
- call {:si_unique_call 91} nVar47 := proc130(28);
- call {:si_unique_call 92} nVar48 := proc130(16);
- call {:si_unique_call 93} nVar49 := proc130(28);
- call {:si_unique_call 94} nVar50 := proc130(28);
- call {:si_unique_call 95} nVar51 := proc130(28);
- call {:si_unique_call 96} nVar52 := proc130(16);
- call {:si_unique_call 97} nVar53 := proc130(28);
- call {:si_unique_call 98} nVar54 := proc130(28);
- call {:si_unique_call 99} nVar55 := proc130(28);
- call {:si_unique_call 100} nVar56 := proc130(28);
- call {:si_unique_call 101} nVar57 := proc130(28);
- call {:si_unique_call 102} nVar58 := proc130(28);
- call {:si_unique_call 103} nVar59 := proc130(16);
- call {:si_unique_call 104} nVar60 := proc130(28);
- call {:si_unique_call 105} nVar61 := proc130(12);
- call {:si_unique_call 106} nVar62 := proc130(28);
- call {:si_unique_call 107} nVar4940 := proc130(16);
- call {:si_unique_call 108} nVar63 := proc130(28);
- call {:si_unique_call 109} nVar64 := proc130(28);
- call {:si_unique_call 110} nVar65 := proc130(28);
- call {:si_unique_call 111} nVar66 := proc130(28);
- call {:si_unique_call 112} nVar67 := proc130(28);
- call {:si_unique_call 113} nVar68 := proc130(28);
- call {:si_unique_call 114} nVar69 := proc130(28);
- call {:si_unique_call 115} nVar70 := proc130(12);
- call {:si_unique_call 116} nVar71 := proc130(28);
- call {:si_unique_call 117} nVar72 := proc130(28);
- call {:si_unique_call 118} nVar73 := proc130(28);
- call {:si_unique_call 119} nVar74 := proc130(28);
- call {:si_unique_call 120} nVar75 := proc130(28);
- call {:si_unique_call 121} nVar76 := proc130(28);
- call {:si_unique_call 122} nVar77 := proc130(16);
- call {:si_unique_call 123} nVar78 := proc130(24);
- call {:si_unique_call 124} nVar79 := proc130(28);
- call {:si_unique_call 125} nVar80 := proc130(28);
- call {:si_unique_call 126} nVar81 := proc130(28);
- call {:si_unique_call 127} nVar82 := proc130(28);
- call {:si_unique_call 128} nVar83 := proc130(28);
- call {:si_unique_call 129} nVar84 := proc130(28);
- call {:si_unique_call 130} nVar85 := proc130(28);
- call {:si_unique_call 131} nVar86 := proc130(28);
- call {:si_unique_call 132} nVar87 := proc130(28);
- call {:si_unique_call 133} nVar88 := proc130(28);
- call {:si_unique_call 134} nVar89 := proc130(28);
- call {:si_unique_call 135} nVar90 := proc130(28);
- call {:si_unique_call 136} nVar91 := proc130(28);
- call {:si_unique_call 137} nVar92 := proc130(28);
- call {:si_unique_call 138} nVar93 := proc130(28);
- call {:si_unique_call 139} nVar94 := proc130(28);
- call {:si_unique_call 140} nVar95 := proc130(28);
- call {:si_unique_call 141} nVar96 := proc130(28);
- call {:si_unique_call 142} nVar97 := proc130(28);
- call {:si_unique_call 143} nVar98 := proc130(28);
- call {:si_unique_call 144} nVar99 := proc130(16);
- call {:si_unique_call 145} nVar100 := proc130(28);
- call {:si_unique_call 146} nVar101 := proc130(28);
- call {:si_unique_call 147} nVar102 := proc130(28);
- call {:si_unique_call 148} nVar103 := proc130(28);
- call {:si_unique_call 149} nVar104 := proc130(28);
- call {:si_unique_call 150} nVar105 := proc130(16);
- call {:si_unique_call 151} nVar106 := proc130(28);
- call {:si_unique_call 152} nVar107 := proc130(28);
- call {:si_unique_call 153} nVar108 := proc130(28);
- call {:si_unique_call 154} nVar109 := proc130(28);
- call {:si_unique_call 155} nVar110 := proc130(28);
- call {:si_unique_call 156} nVar4941 := proc130(16);
- call {:si_unique_call 157} nVar111 := proc130(28);
- call {:si_unique_call 158} nVar112 := proc130(28);
- call {:si_unique_call 159} nVar113 := proc130(28);
- call {:si_unique_call 160} nVar114 := proc130(28);
- call {:si_unique_call 161} nVar115 := proc130(28);
- call {:si_unique_call 162} nVar116 := proc130(28);
- call {:si_unique_call 163} nVar117 := proc130(28);
- call {:si_unique_call 164} nVar118 := proc130(28);
- call {:si_unique_call 165} nVar119 := proc130(28);
- call {:si_unique_call 166} nVar120 := proc130(28);
- call {:si_unique_call 167} nVar121 := proc130(28);
- call {:si_unique_call 168} nVar122 := proc130(28);
- call {:si_unique_call 169} nVar123 := proc130(28);
- call {:si_unique_call 170} nVar124 := proc130(28);
- call {:si_unique_call 171} nVar125 := proc130(28);
- call {:si_unique_call 172} nVar126 := proc130(28);
- call {:si_unique_call 173} nVar127 := proc130(28);
- call {:si_unique_call 174} nVar128 := proc130(28);
- call {:si_unique_call 175} nVar129 := proc130(28);
- call {:si_unique_call 176} nVar130 := proc130(28);
- call {:si_unique_call 177} nVar131 := proc130(12);
- call {:si_unique_call 178} nVar132 := proc130(28);
- call {:si_unique_call 179} nVar133 := proc130(28);
- call {:si_unique_call 180} nVar134 := proc130(28);
- call {:si_unique_call 181} nVar135 := proc130(28);
- call {:si_unique_call 182} nVar136 := proc130(28);
- call {:si_unique_call 183} nVar137 := proc130(28);
- call {:si_unique_call 184} nVar138 := proc130(28);
- call {:si_unique_call 185} nVar139 := proc130(16);
- call {:si_unique_call 186} nVar140 := proc130(28);
- call {:si_unique_call 187} nVar141 := proc130(28);
- call {:si_unique_call 188} nVar142 := proc130(28);
- call {:si_unique_call 189} nVar143 := proc130(28);
- call {:si_unique_call 190} nVar144 := proc130(28);
- call {:si_unique_call 191} nVar145 := proc130(28);
- call {:si_unique_call 192} nVar146 := proc130(28);
- call {:si_unique_call 193} nVar147 := proc130(28);
- call {:si_unique_call 194} nVar148 := proc130(28);
- call {:si_unique_call 195} nVar149 := proc130(28);
- call {:si_unique_call 196} nVar150 := proc130(28);
- call {:si_unique_call 197} nVar151 := proc130(28);
- call {:si_unique_call 198} nVar152 := proc130(28);
- call {:si_unique_call 199} nVar153 := proc130(28);
- call {:si_unique_call 200} nVar154 := proc130(28);
- call {:si_unique_call 201} nVar155 := proc130(28);
- call {:si_unique_call 202} nVar156 := proc130(28);
- call {:si_unique_call 203} nVar157 := proc130(28);
- call {:si_unique_call 204} nVar158 := proc130(28);
- call {:si_unique_call 205} nVar159 := proc130(28);
- call {:si_unique_call 206} nVar160 := proc130(24);
- call {:si_unique_call 207} nVar161 := proc130(28);
- call {:si_unique_call 208} nVar162 := proc130(28);
- call {:si_unique_call 209} nVar163 := proc130(28);
- call {:si_unique_call 210} nVar164 := proc130(4);
- call {:si_unique_call 211} nVar165 := proc130(16);
- call {:si_unique_call 212} nVar166 := proc130(28);
- call {:si_unique_call 213} nVar167 := proc130(28);
- call {:si_unique_call 214} nVar168 := proc130(28);
- call {:si_unique_call 215} nVar169 := proc130(12);
- call {:si_unique_call 216} nVar170 := proc130(16);
- call {:si_unique_call 217} nVar171 := proc130(28);
- call {:si_unique_call 218} nVar172 := proc130(28);
- call {:si_unique_call 219} nVar173 := proc130(28);
- call {:si_unique_call 220} nVar174 := proc130(28);
- call {:si_unique_call 221} nVar175 := proc130(12);
- call {:si_unique_call 222} nVar176 := proc130(28);
- call {:si_unique_call 223} nVar177 := proc130(28);
- call {:si_unique_call 224} nVar178 := proc130(28);
- call {:si_unique_call 225} nVar179 := proc130(28);
- call {:si_unique_call 226} nVar180 := proc130(28);
- call {:si_unique_call 227} nVar181 := proc130(28);
- call {:si_unique_call 228} nVar182 := proc130(28);
- call {:si_unique_call 229} nVar183 := proc130(28);
- call {:si_unique_call 230} nVar184 := proc130(28);
- call {:si_unique_call 231} nVar185 := proc130(28);
- call {:si_unique_call 232} nVar186 := proc130(28);
- call {:si_unique_call 233} nVar187 := proc130(12);
- call {:si_unique_call 234} nVar188 := proc130(4);
- call {:si_unique_call 235} nVar189 := proc130(28);
- call {:si_unique_call 236} nVar190 := proc130(28);
- call {:si_unique_call 237} nVar191 := proc130(16);
- call {:si_unique_call 238} nVar192 := proc130(12);
- call {:si_unique_call 239} nVar193 := proc130(28);
- call {:si_unique_call 240} nVar194 := proc130(16);
- call {:si_unique_call 241} nVar195 := proc130(56);
- call {:si_unique_call 242} nVar196 := proc130(28);
- call {:si_unique_call 243} nVar197 := proc130(28);
- call {:si_unique_call 244} nVar198 := proc130(28);
- call {:si_unique_call 245} nVar199 := proc130(28);
- call {:si_unique_call 246} nVar200 := proc130(28);
- call {:si_unique_call 247} nVar201 := proc130(28);
- call {:si_unique_call 248} nVar202 := proc130(28);
- call {:si_unique_call 249} nVar203 := proc130(28);
- call {:si_unique_call 250} nVar204 := proc130(24);
- call {:si_unique_call 251} nVar205 := proc130(28);
- call {:si_unique_call 252} nVar206 := proc130(28);
- call {:si_unique_call 253} nVar207 := proc130(16);
- call {:si_unique_call 254} nVar208 := proc130(28);
- call {:si_unique_call 255} nVar209 := proc130(28);
- call {:si_unique_call 256} nVar210 := proc130(28);
- call {:si_unique_call 257} nVar211 := proc130(28);
- call {:si_unique_call 258} nVar212 := proc130(4);
- call {:si_unique_call 259} nVar213 := proc130(28);
- call {:si_unique_call 260} nVar214 := proc130(28);
- call {:si_unique_call 261} nVar215 := proc130(12);
- call {:si_unique_call 262} nVar4942 := proc130(20);
- call {:si_unique_call 263} nVar216 := proc130(24);
- call {:si_unique_call 264} nVar217 := proc130(16);
- call {:si_unique_call 265} nVar218 := proc130(24);
- call {:si_unique_call 266} nVar219 := proc130(28);
- call {:si_unique_call 267} nVar220 := proc130(28);
- call {:si_unique_call 268} nVar221 := proc130(24);
- call {:si_unique_call 269} nVar222 := proc130(28);
- call {:si_unique_call 270} nVar223 := proc130(56);
- call {:si_unique_call 271} nVar224 := proc130(28);
- call {:si_unique_call 272} nVar225 := proc130(28);
- call {:si_unique_call 273} nVar226 := proc130(28);
- call {:si_unique_call 274} nVar227 := proc130(12);
- call {:si_unique_call 275} nVar228 := proc130(28);
- call {:si_unique_call 276} nVar229 := proc130(28);
- call {:si_unique_call 277} nVar230 := proc130(28);
- call {:si_unique_call 278} nVar231 := proc130(28);
- call {:si_unique_call 279} nVar232 := proc130(4);
- call {:si_unique_call 280} nVar233 := proc130(4);
- call {:si_unique_call 281} nVar234 := proc130(28);
- call {:si_unique_call 282} nVar235 := proc130(4);
- call {:si_unique_call 283} nVar236 := proc130(24);
- call {:si_unique_call 284} nVar237 := proc130(4);
- call {:si_unique_call 285} nVar238 := proc130(4);
- call {:si_unique_call 286} nVar239 := proc130(28);
- call {:si_unique_call 287} nVar240 := proc130(28);
- call {:si_unique_call 288} nVar241 := proc130(28);
- call {:si_unique_call 289} nVar242 := proc130(28);
- call {:si_unique_call 290} nVar243 := proc130(28);
- call {:si_unique_call 291} nVar244 := proc130(28);
- call {:si_unique_call 292} nVar245 := proc130(28);
- call {:si_unique_call 293} nVar246 := proc130(28);
- call {:si_unique_call 294} nVar247 := proc130(28);
- call {:si_unique_call 295} nVar248 := proc130(12);
- call {:si_unique_call 296} nVar249 := proc130(28);
- call {:si_unique_call 297} nVar250 := proc130(28);
- call {:si_unique_call 298} nVar251 := proc130(28);
- call {:si_unique_call 299} nVar252 := proc130(28);
- call {:si_unique_call 300} nVar253 := proc130(28);
- call {:si_unique_call 301} nVar254 := proc130(28);
- call {:si_unique_call 302} nVar255 := proc130(28);
- call {:si_unique_call 303} nVar256 := proc130(16);
- call {:si_unique_call 304} nVar4943 := proc130(16);
- call {:si_unique_call 305} nVar257 := proc130(28);
- call {:si_unique_call 306} nVar258 := proc130(28);
- call {:si_unique_call 307} nVar259 := proc130(28);
- call {:si_unique_call 308} nVar260 := proc130(4);
- call {:si_unique_call 309} nVar261 := proc130(28);
- call {:si_unique_call 310} nVar262 := proc130(28);
- call {:si_unique_call 311} nVar263 := proc130(16);
- call {:si_unique_call 312} nVar264 := proc130(16);
- call {:si_unique_call 313} nVar265 := proc130(28);
- call {:si_unique_call 314} nVar266 := proc130(12);
- call {:si_unique_call 315} nVar267 := proc130(28);
- call {:si_unique_call 316} nVar268 := proc130(28);
- call {:si_unique_call 317} nVar269 := proc130(28);
- call {:si_unique_call 318} nVar270 := proc130(28);
- call {:si_unique_call 319} nVar271 := proc130(12);
- call {:si_unique_call 320} nVar272 := proc130(28);
- call {:si_unique_call 321} nVar273 := proc130(28);
- call {:si_unique_call 322} nVar274 := proc130(28);
- call {:si_unique_call 323} nVar275 := proc130(28);
- call {:si_unique_call 324} nVar276 := proc130(28);
- call {:si_unique_call 325} nVar277 := proc130(28);
- call {:si_unique_call 326} nVar278 := proc130(28);
- call {:si_unique_call 327} nVar279 := proc130(28);
- call {:si_unique_call 328} nVar281 := proc130(28);
- call {:si_unique_call 329} nVar282 := proc130(28);
- call {:si_unique_call 330} nVar283 := proc130(28);
- call {:si_unique_call 331} nVar284 := proc130(28);
- call {:si_unique_call 332} nVar285 := proc130(28);
- call {:si_unique_call 333} nVar286 := proc130(28);
- call {:si_unique_call 334} nVar287 := proc130(16);
- call {:si_unique_call 335} nVar288 := proc130(28);
- call {:si_unique_call 336} nVar289 := proc130(28);
- call {:si_unique_call 337} nVar4944 := proc130(16);
- call {:si_unique_call 338} nVar290 := proc130(28);
- call {:si_unique_call 339} nVar291 := proc130(28);
- call {:si_unique_call 340} nVar292 := proc130(28);
- call {:si_unique_call 341} nVar293 := proc130(12);
- call {:si_unique_call 342} nVar294 := proc130(28);
- call {:si_unique_call 343} nVar295 := proc130(28);
- call {:si_unique_call 344} nVar296 := proc130(28);
- call {:si_unique_call 345} nVar297 := proc130(28);
- call {:si_unique_call 346} nVar298 := proc130(28);
- call {:si_unique_call 347} nVar299 := proc130(28);
- call {:si_unique_call 348} nVar300 := proc130(16);
- call {:si_unique_call 349} nVar301 := proc130(28);
- call {:si_unique_call 350} nVar302 := proc130(28);
- call {:si_unique_call 351} nVar303 := proc130(28);
- call {:si_unique_call 352} nVar304 := proc130(4);
- call {:si_unique_call 353} nVar305 := proc130(28);
- call {:si_unique_call 354} nVar306 := proc130(28);
- call {:si_unique_call 355} nVar307 := proc130(28);
- call {:si_unique_call 356} nVar308 := proc130(28);
- call {:si_unique_call 357} nVar309 := proc130(28);
- call {:si_unique_call 358} nVar310 := proc130(28);
- call {:si_unique_call 359} nVar311 := proc130(28);
- call {:si_unique_call 360} nVar312 := proc130(16);
- call {:si_unique_call 361} nVar313 := proc130(28);
- call {:si_unique_call 362} nVar314 := proc130(12);
- call {:si_unique_call 363} nVar315 := proc130(12);
- call {:si_unique_call 364} nVar316 := proc130(28);
- call {:si_unique_call 365} nVar317 := proc130(28);
- call {:si_unique_call 366} nVar318 := proc130(28);
- call {:si_unique_call 367} nVar319 := proc130(16);
- call {:si_unique_call 368} nVar320 := proc130(28);
- call {:si_unique_call 369} nVar321 := proc130(28);
- call {:si_unique_call 370} nVar322 := proc130(28);
- call {:si_unique_call 371} nVar323 := proc130(28);
- call {:si_unique_call 372} nVar324 := proc130(28);
- call {:si_unique_call 373} nVar325 := proc130(28);
- call {:si_unique_call 374} nVar326 := proc130(16);
- call {:si_unique_call 375} nVar327 := proc130(28);
- call {:si_unique_call 376} nVar328 := proc130(28);
- call {:si_unique_call 377} nVar329 := proc130(28);
- call {:si_unique_call 378} nVar330 := proc130(16);
- call {:si_unique_call 379} nVar331 := proc130(28);
- call {:si_unique_call 380} nVar332 := proc130(28);
- call {:si_unique_call 381} nVar333 := proc130(4);
- call {:si_unique_call 382} nVar334 := proc130(28);
- call {:si_unique_call 383} nVar335 := proc130(28);
- call {:si_unique_call 384} nVar336 := proc130(28);
- call {:si_unique_call 385} nVar337 := proc130(28);
- call {:si_unique_call 386} nVar338 := proc130(28);
- call {:si_unique_call 387} nVar339 := proc130(28);
- call {:si_unique_call 388} nVar340 := proc130(28);
- call {:si_unique_call 389} nVar341 := proc130(4);
- call {:si_unique_call 390} nVar342 := proc130(28);
- call {:si_unique_call 391} nVar343 := proc130(28);
- call {:si_unique_call 392} nVar344 := proc130(28);
- call {:si_unique_call 393} nVar345 := proc130(28);
- call {:si_unique_call 394} nVar346 := proc130(28);
- call {:si_unique_call 395} nVar348 := proc130(28);
- call {:si_unique_call 396} nVar349 := proc130(28);
- call {:si_unique_call 397} nVar350 := proc130(28);
- call {:si_unique_call 398} nVar351 := proc130(28);
- call {:si_unique_call 399} nVar352 := proc130(28);
- call {:si_unique_call 400} nVar353 := proc130(16);
- call {:si_unique_call 401} nVar354 := proc130(24);
- call {:si_unique_call 402} nVar355 := proc130(28);
- call {:si_unique_call 403} nVar356 := proc130(28);
- call {:si_unique_call 404} nVar357 := proc130(28);
- call {:si_unique_call 405} nVar358 := proc130(28);
- call {:si_unique_call 406} nVar359 := proc130(16);
- call {:si_unique_call 407} nVar360 := proc130(4);
- call {:si_unique_call 408} nVar361 := proc130(28);
- call {:si_unique_call 409} nVar362 := proc130(28);
- call {:si_unique_call 410} nVar363 := proc130(28);
- call {:si_unique_call 411} nVar364 := proc130(28);
- call {:si_unique_call 412} nVar365 := proc130(28);
- call {:si_unique_call 413} nVar366 := proc130(28);
- call {:si_unique_call 414} nVar367 := proc130(8);
- call {:si_unique_call 415} nVar368 := proc130(28);
- call {:si_unique_call 416} nVar369 := proc130(28);
- call {:si_unique_call 417} nVar370 := proc130(28);
- call {:si_unique_call 418} nVar371 := proc130(16);
- call {:si_unique_call 419} nVar372 := proc130(28);
- call {:si_unique_call 420} nVar373 := proc130(28);
- call {:si_unique_call 421} nVar374 := proc130(28);
- call {:si_unique_call 422} nVar375 := proc130(28);
- call {:si_unique_call 423} nVar376 := proc130(24);
- call {:si_unique_call 424} nVar377 := proc130(28);
- call {:si_unique_call 425} nVar378 := proc130(16);
- call {:si_unique_call 426} nVar379 := proc130(28);
- call {:si_unique_call 427} nVar380 := proc130(28);
- call {:si_unique_call 428} nVar381 := proc130(28);
- call {:si_unique_call 429} nVar382 := proc130(28);
- call {:si_unique_call 430} nVar383 := proc130(28);
- call {:si_unique_call 431} nVar384 := proc130(28);
- call {:si_unique_call 432} nVar385 := proc130(16);
- call {:si_unique_call 433} nVar386 := proc130(28);
- call {:si_unique_call 434} nVar387 := proc130(28);
- call {:si_unique_call 435} nVar388 := proc130(28);
- call {:si_unique_call 436} nVar389 := proc130(28);
- call {:si_unique_call 437} nVar4945 := proc130(16);
- call {:si_unique_call 438} nVar390 := proc130(28);
- call {:si_unique_call 439} nVar391 := proc130(28);
- call {:si_unique_call 440} nVar392 := proc130(28);
- call {:si_unique_call 441} nVar393 := proc130(28);
- call {:si_unique_call 442} nVar394 := proc130(28);
- call {:si_unique_call 443} nVar395 := proc130(28);
- call {:si_unique_call 444} nVar396 := proc130(24);
- call {:si_unique_call 445} nVar397 := proc130(28);
- call {:si_unique_call 446} nVar398 := proc130(4);
- call {:si_unique_call 447} nVar400 := proc130(28);
- call {:si_unique_call 448} nVar401 := proc130(4);
- call {:si_unique_call 449} nVar402 := proc130(16);
- call {:si_unique_call 450} nVar403 := proc130(56);
- call {:si_unique_call 451} nVar404 := proc130(24);
- call {:si_unique_call 452} nVar405 := proc130(12);
- call {:si_unique_call 453} nVar406 := proc130(28);
- call {:si_unique_call 454} nVar407 := proc130(28);
- call {:si_unique_call 455} nVar408 := proc130(28);
- call {:si_unique_call 456} nVar409 := proc130(28);
- call {:si_unique_call 457} nVar410 := proc130(28);
- call {:si_unique_call 458} nVar411 := proc130(16);
- call {:si_unique_call 459} nVar412 := proc130(16);
- call {:si_unique_call 460} nVar413 := proc130(28);
- call {:si_unique_call 461} nVar414 := proc130(28);
- call {:si_unique_call 462} nVar415 := proc130(28);
- call {:si_unique_call 463} nVar416 := proc130(28);
- call {:si_unique_call 464} nVar417 := proc130(28);
- call {:si_unique_call 465} nVar418 := proc130(28);
- call {:si_unique_call 466} nVar419 := proc130(28);
- call {:si_unique_call 467} nVar420 := proc130(12);
- call {:si_unique_call 468} nVar421 := proc130(28);
- call {:si_unique_call 469} nVar422 := proc130(28);
- call {:si_unique_call 470} nVar423 := proc130(28);
- call {:si_unique_call 471} nVar424 := proc130(28);
- call {:si_unique_call 472} nVar425 := proc130(28);
- call {:si_unique_call 473} nVar426 := proc130(4);
- call {:si_unique_call 474} nVar427 := proc130(28);
- call {:si_unique_call 475} nVar428 := proc130(28);
- call {:si_unique_call 476} nVar429 := proc130(28);
- call {:si_unique_call 477} nVar430 := proc130(4);
- call {:si_unique_call 478} nVar431 := proc130(28);
- call {:si_unique_call 479} nVar432 := proc130(28);
- call {:si_unique_call 480} nVar433 := proc130(28);
- call {:si_unique_call 481} nVar434 := proc130(28);
- call {:si_unique_call 482} nVar435 := proc130(28);
- call {:si_unique_call 483} nVar436 := proc130(28);
- call {:si_unique_call 484} nVar437 := proc130(28);
- call {:si_unique_call 485} nVar438 := proc130(28);
- call {:si_unique_call 486} nVar439 := proc130(28);
- call {:si_unique_call 487} nVar440 := proc130(28);
- call {:si_unique_call 488} nVar441 := proc130(28);
- call {:si_unique_call 489} nVar442 := proc130(24);
- call {:si_unique_call 490} nVar443 := proc130(28);
- call {:si_unique_call 491} nVar444 := proc130(28);
- call {:si_unique_call 492} nVar445 := proc130(28);
- call {:si_unique_call 493} nVar446 := proc130(16);
- call {:si_unique_call 494} nVar447 := proc130(24);
- call {:si_unique_call 495} nVar448 := proc130(28);
- call {:si_unique_call 496} nVar449 := proc130(28);
- call {:si_unique_call 497} nVar450 := proc130(28);
- call {:si_unique_call 498} nVar451 := proc130(28);
- call {:si_unique_call 499} nVar452 := proc130(28);
- call {:si_unique_call 500} nVar453 := proc130(28);
- call {:si_unique_call 501} nVar454 := proc130(28);
- call {:si_unique_call 502} nVar455 := proc130(12);
- call {:si_unique_call 503} nVar456 := proc130(28);
- call {:si_unique_call 504} nVar457 := proc130(28);
- call {:si_unique_call 505} nVar458 := proc130(28);
- call {:si_unique_call 506} nVar459 := proc130(28);
- call {:si_unique_call 507} nVar460 := proc130(28);
- call {:si_unique_call 508} nVar461 := proc130(28);
- call {:si_unique_call 509} nVar462 := proc130(28);
- call {:si_unique_call 510} nVar463 := proc130(28);
- call {:si_unique_call 511} nVar464 := proc130(16);
- call {:si_unique_call 512} nVar465 := proc130(28);
- call {:si_unique_call 513} nVar466 := proc130(28);
- call {:si_unique_call 514} nVar467 := proc130(24);
- call {:si_unique_call 515} nVar468 := proc130(28);
- call {:si_unique_call 516} nVar469 := proc130(12);
- call {:si_unique_call 517} nVar470 := proc130(28);
- call {:si_unique_call 518} nVar471 := proc130(28);
- call {:si_unique_call 519} nVar472 := proc130(28);
- call {:si_unique_call 520} nVar473 := proc130(28);
- call {:si_unique_call 521} nVar474 := proc130(16);
- call {:si_unique_call 522} nVar475 := proc130(28);
- call {:si_unique_call 523} nVar476 := proc130(28);
- call {:si_unique_call 524} nVar477 := proc130(4);
- call {:si_unique_call 525} nVar478 := proc130(28);
- call {:si_unique_call 526} nVar479 := proc130(28);
- call {:si_unique_call 527} nVar480 := proc130(12);
- call {:si_unique_call 528} nVar481 := proc130(24);
- call {:si_unique_call 529} nVar482 := proc130(28);
- call {:si_unique_call 530} nVar483 := proc130(28);
- call {:si_unique_call 531} nVar484 := proc130(28);
- call {:si_unique_call 532} nVar485 := proc130(28);
- call {:si_unique_call 533} nVar486 := proc130(28);
- call {:si_unique_call 534} nVar487 := proc130(28);
- call {:si_unique_call 535} nVar488 := proc130(28);
- call {:si_unique_call 536} nVar489 := proc130(28);
- call {:si_unique_call 537} nVar490 := proc130(28);
- call {:si_unique_call 538} nVar491 := proc130(28);
- call {:si_unique_call 539} nVar492 := proc130(28);
- call {:si_unique_call 540} nVar493 := proc130(28);
- call {:si_unique_call 541} nVar494 := proc130(4);
- call {:si_unique_call 542} nVar495 := proc130(28);
- call {:si_unique_call 543} nVar496 := proc130(28);
- call {:si_unique_call 544} nVar497 := proc130(28);
- call {:si_unique_call 545} nVar498 := proc130(28);
- call {:si_unique_call 546} nVar499 := proc130(28);
- call {:si_unique_call 547} nVar500 := proc130(28);
- call {:si_unique_call 548} nVar501 := proc130(28);
- call {:si_unique_call 549} nVar502 := proc130(28);
- call {:si_unique_call 550} nVar503 := proc130(28);
- call {:si_unique_call 551} nVar504 := proc130(28);
- call {:si_unique_call 552} nVar505 := proc130(28);
- call {:si_unique_call 553} nVar506 := proc130(28);
- call {:si_unique_call 554} nVar507 := proc130(16);
- call {:si_unique_call 555} nVar508 := proc130(24);
- call {:si_unique_call 556} nVar509 := proc130(28);
- call {:si_unique_call 557} nVar510 := proc130(28);
- call {:si_unique_call 558} nVar511 := proc130(28);
- call {:si_unique_call 559} nVar512 := proc130(28);
- call {:si_unique_call 560} nVar513 := proc130(24);
- call {:si_unique_call 561} nVar514 := proc130(16);
- call {:si_unique_call 562} nVar515 := proc130(28);
- call {:si_unique_call 563} nVar516 := proc130(28);
- call {:si_unique_call 564} nVar517 := proc130(28);
- call {:si_unique_call 565} nVar518 := proc130(28);
- call {:si_unique_call 566} nVar519 := proc130(28);
- call {:si_unique_call 567} nVar520 := proc130(28);
- call {:si_unique_call 568} nVar521 := proc130(28);
- call {:si_unique_call 569} nVar522 := proc130(16);
- call {:si_unique_call 570} nVar523 := proc130(16);
- call {:si_unique_call 571} nVar524 := proc130(28);
- call {:si_unique_call 572} nVar525 := proc130(28);
- call {:si_unique_call 573} nVar526 := proc130(28);
- call {:si_unique_call 574} nVar527 := proc130(24);
- call {:si_unique_call 575} nVar528 := proc130(28);
- call {:si_unique_call 576} nVar529 := proc130(28);
- call {:si_unique_call 577} nVar530 := proc130(16);
- call {:si_unique_call 578} nVar531 := proc130(28);
- call {:si_unique_call 579} nVar532 := proc130(28);
- call {:si_unique_call 580} nVar533 := proc130(28);
- call {:si_unique_call 581} nVar534 := proc130(28);
- call {:si_unique_call 582} nVar535 := proc130(28);
- call {:si_unique_call 583} nVar536 := proc130(28);
- call {:si_unique_call 584} nVar537 := proc130(12);
- call {:si_unique_call 585} nVar538 := proc130(4);
- call {:si_unique_call 586} nVar539 := proc130(28);
- call {:si_unique_call 587} nVar540 := proc130(28);
- call {:si_unique_call 588} nVar541 := proc130(28);
- call {:si_unique_call 589} nVar542 := proc130(28);
- call {:si_unique_call 590} nVar543 := proc130(28);
- call {:si_unique_call 591} nVar544 := proc130(28);
- call {:si_unique_call 592} nVar545 := proc130(28);
- call {:si_unique_call 593} nVar546 := proc130(28);
- call {:si_unique_call 594} nVar547 := proc130(28);
- call {:si_unique_call 595} nVar548 := proc130(28);
- call {:si_unique_call 596} nVar549 := proc130(4);
- call {:si_unique_call 597} nVar550 := proc130(28);
- call {:si_unique_call 598} nVar551 := proc130(28);
- call {:si_unique_call 599} nVar552 := proc130(28);
- call {:si_unique_call 600} nVar553 := proc130(28);
- call {:si_unique_call 601} nVar554 := proc130(28);
- call {:si_unique_call 602} nVar555 := proc130(28);
- call {:si_unique_call 603} nVar556 := proc130(28);
- call {:si_unique_call 604} nVar557 := proc130(28);
- call {:si_unique_call 605} nVar558 := proc130(28);
- call {:si_unique_call 606} nVar559 := proc130(28);
- call {:si_unique_call 607} nVar560 := proc130(28);
- call {:si_unique_call 608} nVar561 := proc130(28);
- call {:si_unique_call 609} nVar562 := proc130(28);
- call {:si_unique_call 610} nVar563 := proc130(4);
- call {:si_unique_call 611} nVar564 := proc130(28);
- call {:si_unique_call 612} nVar565 := proc130(28);
- call {:si_unique_call 613} nVar566 := proc130(28);
- call {:si_unique_call 614} nVar567 := proc130(28);
- call {:si_unique_call 615} nVar568 := proc130(28);
- call {:si_unique_call 616} nVar569 := proc130(28);
- call {:si_unique_call 617} nVar570 := proc130(28);
- call {:si_unique_call 618} nVar571 := proc130(28);
- call {:si_unique_call 619} nVar572 := proc130(16);
- call {:si_unique_call 620} nVar573 := proc130(16);
- call {:si_unique_call 621} nVar574 := proc130(16);
- call {:si_unique_call 622} nVar575 := proc130(28);
- call {:si_unique_call 623} nVar576 := proc130(28);
- call {:si_unique_call 624} nVar577 := proc130(4);
- call {:si_unique_call 625} nVar578 := proc130(4);
- call {:si_unique_call 626} nVar579 := proc130(16);
- call {:si_unique_call 627} nVar580 := proc130(28);
- call {:si_unique_call 628} nVar581 := proc130(28);
- call {:si_unique_call 629} nVar582 := proc130(4);
- call {:si_unique_call 630} nVar583 := proc130(24);
- call {:si_unique_call 631} nVar584 := proc130(28);
- call {:si_unique_call 632} nVar585 := proc130(28);
- call {:si_unique_call 633} nVar586 := proc130(28);
- call {:si_unique_call 634} nVar587 := proc130(28);
- call {:si_unique_call 635} nVar588 := proc130(16);
- call {:si_unique_call 636} nVar589 := proc130(28);
- call {:si_unique_call 637} nVar590 := proc130(24);
- call {:si_unique_call 638} nVar591 := proc130(28);
- call {:si_unique_call 639} nVar592 := proc130(28);
- call {:si_unique_call 640} nVar593 := proc130(28);
- call {:si_unique_call 641} nVar594 := proc130(28);
- call {:si_unique_call 642} nVar595 := proc130(28);
- call {:si_unique_call 643} nVar596 := proc130(16);
- call {:si_unique_call 644} nVar597 := proc130(28);
- call {:si_unique_call 645} nVar598 := proc130(28);
- call {:si_unique_call 646} nVar599 := proc130(28);
- call {:si_unique_call 647} nVar600 := proc130(28);
- call {:si_unique_call 648} nVar601 := proc130(12);
- call {:si_unique_call 649} nVar602 := proc130(28);
- call {:si_unique_call 650} nVar603 := proc130(28);
- call {:si_unique_call 651} nVar604 := proc130(28);
- call {:si_unique_call 652} nVar605 := proc130(28);
- call {:si_unique_call 653} nVar606 := proc130(56);
- call {:si_unique_call 654} nVar607 := proc130(28);
- call {:si_unique_call 655} nVar608 := proc130(28);
- call {:si_unique_call 656} nVar609 := proc130(28);
- call {:si_unique_call 657} nVar610 := proc130(28);
- call {:si_unique_call 658} nVar611 := proc130(28);
- call {:si_unique_call 659} nVar612 := proc130(16);
- call {:si_unique_call 660} nVar613 := proc130(28);
- call {:si_unique_call 661} nVar614 := proc130(28);
- call {:si_unique_call 662} nVar615 := proc130(28);
- call {:si_unique_call 663} nVar616 := proc130(28);
- call {:si_unique_call 664} nVar617 := proc130(28);
- call {:si_unique_call 665} nVar618 := proc130(24);
- call {:si_unique_call 666} nVar619 := proc130(28);
- call {:si_unique_call 667} nVar620 := proc130(28);
- call {:si_unique_call 668} nVar621 := proc130(28);
- call {:si_unique_call 669} nVar622 := proc130(28);
- call {:si_unique_call 670} nVar623 := proc130(16);
- call {:si_unique_call 671} nVar624 := proc130(28);
- call {:si_unique_call 672} nVar625 := proc130(28);
- call {:si_unique_call 673} nVar626 := proc130(28);
- call {:si_unique_call 674} nVar627 := proc130(12);
- call {:si_unique_call 675} nVar628 := proc130(16);
- call {:si_unique_call 676} nVar629 := proc130(28);
- call {:si_unique_call 677} nVar630 := proc130(28);
- call {:si_unique_call 678} nVar631 := proc130(12);
- call {:si_unique_call 679} nVar632 := proc130(16);
- call {:si_unique_call 680} nVar633 := proc130(28);
- call {:si_unique_call 681} nVar634 := proc130(28);
- call {:si_unique_call 682} nVar635 := proc130(28);
- call {:si_unique_call 683} nVar636 := proc130(28);
- call {:si_unique_call 684} nVar637 := proc130(28);
- call {:si_unique_call 685} nVar638 := proc130(28);
- call {:si_unique_call 686} nVar639 := proc130(28);
- call {:si_unique_call 687} nVar640 := proc130(28);
- call {:si_unique_call 688} nVar641 := proc130(28);
- call {:si_unique_call 689} nVar642 := proc130(28);
- call {:si_unique_call 690} nVar643 := proc130(24);
- call {:si_unique_call 691} nVar644 := proc130(28);
- call {:si_unique_call 692} nVar645 := proc130(28);
- call {:si_unique_call 693} nVar646 := proc130(4);
- call {:si_unique_call 694} nVar647 := proc130(28);
- call {:si_unique_call 695} nVar648 := proc130(28);
- call {:si_unique_call 696} nVar649 := proc130(28);
- call {:si_unique_call 697} nVar650 := proc130(16);
- call {:si_unique_call 698} nVar651 := proc130(28);
- call {:si_unique_call 699} nVar652 := proc130(28);
- call {:si_unique_call 700} nVar653 := proc130(12);
- call {:si_unique_call 701} nVar654 := proc130(28);
- call {:si_unique_call 702} nVar655 := proc130(28);
- call {:si_unique_call 703} nVar656 := proc130(28);
- call {:si_unique_call 704} nVar657 := proc130(28);
- call {:si_unique_call 705} nVar658 := proc130(28);
- call {:si_unique_call 706} nVar659 := proc130(28);
- call {:si_unique_call 707} nVar660 := proc130(4);
- call {:si_unique_call 708} nVar661 := proc130(28);
- call {:si_unique_call 709} nVar662 := proc130(28);
- call {:si_unique_call 710} nVar4946 := proc130(8);
- call {:si_unique_call 711} nVar663 := proc130(28);
- call {:si_unique_call 712} nVar664 := proc130(4);
- call {:si_unique_call 713} nVar665 := proc130(28);
- call {:si_unique_call 714} nVar666 := proc130(28);
- call {:si_unique_call 715} nVar667 := proc130(28);
- call {:si_unique_call 716} nVar668 := proc130(28);
- call {:si_unique_call 717} nVar669 := proc130(4);
- call {:si_unique_call 718} nVar670 := proc130(28);
- call {:si_unique_call 719} nVar671 := proc130(28);
- call {:si_unique_call 720} nVar672 := proc130(28);
- call {:si_unique_call 721} nVar673 := proc130(28);
- call {:si_unique_call 722} nVar674 := proc130(28);
- call {:si_unique_call 723} nVar675 := proc130(28);
- call {:si_unique_call 724} nVar676 := proc130(28);
- call {:si_unique_call 725} nVar677 := proc130(28);
- call {:si_unique_call 726} nVar678 := proc130(28);
- call {:si_unique_call 727} nVar679 := proc130(24);
- call {:si_unique_call 728} nVar680 := proc130(28);
- call {:si_unique_call 729} nVar681 := proc130(28);
- call {:si_unique_call 730} nVar682 := proc130(28);
- call {:si_unique_call 731} nVar683 := proc130(12);
- call {:si_unique_call 732} nVar684 := proc130(28);
- call {:si_unique_call 733} nVar685 := proc130(16);
- call {:si_unique_call 734} nVar686 := proc130(16);
- call {:si_unique_call 735} nVar687 := proc130(16);
- call {:si_unique_call 736} nVar688 := proc130(28);
- call {:si_unique_call 737} nVar689 := proc130(28);
- call {:si_unique_call 738} nVar690 := proc130(24);
- call {:si_unique_call 739} nVar691 := proc130(28);
- call {:si_unique_call 740} nVar692 := proc130(28);
- call {:si_unique_call 741} nVar693 := proc130(28);
- call {:si_unique_call 742} nVar694 := proc130(28);
- call {:si_unique_call 743} nVar695 := proc130(28);
- call {:si_unique_call 744} nVar696 := proc130(28);
- call {:si_unique_call 745} nVar697 := proc130(28);
- call {:si_unique_call 746} nVar698 := proc130(24);
- call {:si_unique_call 747} nVar699 := proc130(24);
- call {:si_unique_call 748} nVar700 := proc130(28);
- call {:si_unique_call 749} nVar701 := proc130(28);
- call {:si_unique_call 750} nVar702 := proc130(28);
- call {:si_unique_call 751} nVar703 := proc130(24);
- call {:si_unique_call 752} nVar704 := proc130(28);
- call {:si_unique_call 753} nVar705 := proc130(28);
- call {:si_unique_call 754} nVar706 := proc130(28);
- call {:si_unique_call 755} nVar707 := proc130(28);
- call {:si_unique_call 756} nVar708 := proc130(28);
- call {:si_unique_call 757} nVar709 := proc130(28);
- call {:si_unique_call 758} nVar710 := proc130(28);
- call {:si_unique_call 759} nVar711 := proc130(28);
- call {:si_unique_call 760} nVar712 := proc130(28);
- call {:si_unique_call 761} nVar713 := proc130(28);
- call {:si_unique_call 762} nVar714 := proc130(28);
- call {:si_unique_call 763} nVar715 := proc130(28);
- call {:si_unique_call 764} nVar716 := proc130(28);
- call {:si_unique_call 765} nVar717 := proc130(28);
- call {:si_unique_call 766} nVar718 := proc130(28);
- call {:si_unique_call 767} nVar719 := proc130(28);
- call {:si_unique_call 768} nVar720 := proc130(28);
- call {:si_unique_call 769} nVar721 := proc130(28);
- call {:si_unique_call 770} nVar722 := proc130(28);
- call {:si_unique_call 771} nVar723 := proc130(28);
- call {:si_unique_call 772} nVar724 := proc130(28);
- call {:si_unique_call 773} nVar725 := proc130(28);
- call {:si_unique_call 774} nVar726 := proc130(28);
- call {:si_unique_call 775} nVar727 := proc130(28);
- call {:si_unique_call 776} nVar728 := proc130(16);
- call {:si_unique_call 777} nVar729 := proc130(28);
- call {:si_unique_call 778} nVar730 := proc130(28);
- call {:si_unique_call 779} nVar731 := proc130(28);
- call {:si_unique_call 780} nVar732 := proc130(24);
- call {:si_unique_call 781} nVar733 := proc130(28);
- call {:si_unique_call 782} nVar734 := proc130(28);
- call {:si_unique_call 783} nVar735 := proc130(28);
- call {:si_unique_call 784} nVar736 := proc130(4);
- call {:si_unique_call 785} nVar737 := proc130(28);
- call {:si_unique_call 786} nVar738 := proc130(28);
- call {:si_unique_call 787} nVar739 := proc130(12);
- call {:si_unique_call 788} nVar740 := proc130(28);
- call {:si_unique_call 789} nVar741 := proc130(28);
- call {:si_unique_call 790} nVar742 := proc130(28);
- call {:si_unique_call 791} nVar743 := proc130(28);
- call {:si_unique_call 792} nVar744 := proc130(12);
- call {:si_unique_call 793} nVar745 := proc130(28);
- call {:si_unique_call 794} nVar746 := proc130(28);
- call {:si_unique_call 795} nVar747 := proc130(28);
- call {:si_unique_call 796} nVar748 := proc130(4);
- call {:si_unique_call 797} nVar749 := proc130(28);
- call {:si_unique_call 798} nVar750 := proc130(16);
- call {:si_unique_call 799} nVar751 := proc130(28);
- call {:si_unique_call 800} nVar752 := proc130(28);
- call {:si_unique_call 801} nVar753 := proc130(28);
- call {:si_unique_call 802} nVar754 := proc130(28);
- call {:si_unique_call 803} nVar755 := proc130(4);
- call {:si_unique_call 804} nVar756 := proc130(28);
- call {:si_unique_call 805} nVar757 := proc130(28);
- call {:si_unique_call 806} nVar758 := proc130(28);
- call {:si_unique_call 807} nVar759 := proc130(28);
- call {:si_unique_call 808} nVar760 := proc130(28);
- call {:si_unique_call 809} nVar761 := proc130(28);
- call {:si_unique_call 810} nVar762 := proc130(28);
- call {:si_unique_call 811} nVar763 := proc130(24);
- call {:si_unique_call 812} nVar764 := proc130(12);
- call {:si_unique_call 813} nVar765 := proc130(4);
- call {:si_unique_call 814} nVar766 := proc130(12);
- call {:si_unique_call 815} nVar767 := proc130(28);
- call {:si_unique_call 816} nVar768 := proc130(28);
- call {:si_unique_call 817} nVar769 := proc130(28);
- call {:si_unique_call 818} nVar770 := proc130(56);
- call {:si_unique_call 819} nVar771 := proc130(12);
- call {:si_unique_call 820} nVar772 := proc130(28);
- call {:si_unique_call 821} nVar773 := proc130(28);
- call {:si_unique_call 822} nVar774 := proc130(28);
- call {:si_unique_call 823} nVar775 := proc130(12);
- call {:si_unique_call 824} nVar776 := proc130(28);
- call {:si_unique_call 825} nVar777 := proc130(28);
- call {:si_unique_call 826} nVar778 := proc130(12);
- call {:si_unique_call 827} nVar779 := proc130(24);
- call {:si_unique_call 828} nVar780 := proc130(28);
- call {:si_unique_call 829} nVar781 := proc130(16);
- call {:si_unique_call 830} nVar782 := proc130(28);
- call {:si_unique_call 831} nVar783 := proc130(28);
- call {:si_unique_call 832} nVar784 := proc130(28);
- call {:si_unique_call 833} nVar785 := proc130(28);
- call {:si_unique_call 834} nVar786 := proc130(28);
- call {:si_unique_call 835} nVar787 := proc130(28);
- call {:si_unique_call 836} nVar788 := proc130(28);
- call {:si_unique_call 837} nVar789 := proc130(28);
- call {:si_unique_call 838} nVar790 := proc130(28);
- call {:si_unique_call 839} nVar791 := proc130(28);
- call {:si_unique_call 840} nVar792 := proc130(24);
- call {:si_unique_call 841} nVar793 := proc130(28);
- call {:si_unique_call 842} nVar794 := proc130(28);
- call {:si_unique_call 843} nVar795 := proc130(28);
- call {:si_unique_call 844} nVar796 := proc130(28);
- call {:si_unique_call 845} nVar797 := proc130(28);
- call {:si_unique_call 846} nVar798 := proc130(28);
- call {:si_unique_call 847} nVar799 := proc130(28);
- call {:si_unique_call 848} nVar800 := proc130(28);
- call {:si_unique_call 849} nVar801 := proc130(28);
- call {:si_unique_call 850} nVar802 := proc130(28);
- call {:si_unique_call 851} nVar803 := proc130(28);
- call {:si_unique_call 852} nVar804 := proc130(28);
- call {:si_unique_call 853} nVar805 := proc130(28);
- call {:si_unique_call 854} nVar806 := proc130(12);
- call {:si_unique_call 855} nVar807 := proc130(28);
- call {:si_unique_call 856} nVar808 := proc130(28);
- call {:si_unique_call 857} nVar809 := proc130(28);
- call {:si_unique_call 858} nVar810 := proc130(28);
- call {:si_unique_call 859} nVar811 := proc130(28);
- call {:si_unique_call 860} nVar812 := proc130(12);
- call {:si_unique_call 861} nVar813 := proc130(28);
- call {:si_unique_call 862} nVar814 := proc130(28);
- call {:si_unique_call 863} nVar815 := proc130(28);
- call {:si_unique_call 864} nVar816 := proc130(12);
- call {:si_unique_call 865} nVar817 := proc130(28);
- call {:si_unique_call 866} nVar818 := proc130(28);
- call {:si_unique_call 867} nVar819 := proc130(28);
- call {:si_unique_call 868} nVar820 := proc130(28);
- call {:si_unique_call 869} nVar821 := proc130(4);
- call {:si_unique_call 870} nVar822 := proc130(28);
- call {:si_unique_call 871} nVar823 := proc130(28);
- call {:si_unique_call 872} nVar824 := proc130(28);
- call {:si_unique_call 873} nVar825 := proc130(28);
- call {:si_unique_call 874} nVar826 := proc130(28);
- call {:si_unique_call 875} nVar827 := proc130(28);
- call {:si_unique_call 876} nVar828 := proc130(28);
- call {:si_unique_call 877} nVar829 := proc130(28);
- call {:si_unique_call 878} nVar830 := proc130(28);
- call {:si_unique_call 879} nVar831 := proc130(28);
- call {:si_unique_call 880} nVar832 := proc130(4);
- call {:si_unique_call 881} nVar833 := proc130(28);
- call {:si_unique_call 882} nVar834 := proc130(16);
- call {:si_unique_call 883} nVar835 := proc130(28);
- call {:si_unique_call 884} nVar836 := proc130(28);
- call {:si_unique_call 885} nVar837 := proc130(28);
- call {:si_unique_call 886} nVar838 := proc130(28);
- call {:si_unique_call 887} nVar839 := proc130(28);
- call {:si_unique_call 888} nVar840 := proc130(28);
- call {:si_unique_call 889} nVar841 := proc130(28);
- call {:si_unique_call 890} nVar842 := proc130(28);
- call {:si_unique_call 891} nVar843 := proc130(16);
- call {:si_unique_call 892} nVar844 := proc130(4);
- call {:si_unique_call 893} nVar845 := proc130(28);
- call {:si_unique_call 894} nVar846 := proc130(28);
- call {:si_unique_call 895} nVar847 := proc130(28);
- call {:si_unique_call 896} nVar848 := proc130(28);
- call {:si_unique_call 897} nVar849 := proc130(28);
- call {:si_unique_call 898} nVar850 := proc130(28);
- call {:si_unique_call 899} nVar851 := proc130(28);
- call {:si_unique_call 900} nVar852 := proc130(28);
- call {:si_unique_call 901} nVar853 := proc130(28);
- call {:si_unique_call 902} nVar854 := proc130(16);
- call {:si_unique_call 903} nVar855 := proc130(28);
- call {:si_unique_call 904} nVar856 := proc130(28);
- call {:si_unique_call 905} nVar857 := proc130(28);
- call {:si_unique_call 906} nVar858 := proc130(28);
- call {:si_unique_call 907} nVar859 := proc130(28);
- call {:si_unique_call 908} nVar860 := proc130(28);
- call {:si_unique_call 909} nVar861 := proc130(28);
- call {:si_unique_call 910} nVar862 := proc130(28);
- call {:si_unique_call 911} nVar863 := proc130(28);
- call {:si_unique_call 912} nVar864 := proc130(56);
- call {:si_unique_call 913} nVar865 := proc130(28);
- call {:si_unique_call 914} nVar866 := proc130(28);
- call {:si_unique_call 915} nVar867 := proc130(28);
- call {:si_unique_call 916} nVar868 := proc130(28);
- call {:si_unique_call 917} nVar869 := proc130(28);
- call {:si_unique_call 918} nVar870 := proc130(12);
- call {:si_unique_call 919} nVar871 := proc130(28);
- call {:si_unique_call 920} nVar872 := proc130(28);
- call {:si_unique_call 921} nVar873 := proc130(28);
- call {:si_unique_call 922} nVar874 := proc130(28);
- call {:si_unique_call 923} nVar875 := proc130(28);
- call {:si_unique_call 924} nVar876 := proc130(16);
- call {:si_unique_call 925} nVar877 := proc130(28);
- call {:si_unique_call 926} nVar878 := proc130(4);
- call {:si_unique_call 927} nVar879 := proc130(24);
- call {:si_unique_call 928} nVar880 := proc130(24);
- call {:si_unique_call 929} nVar881 := proc130(28);
- call {:si_unique_call 930} nVar882 := proc130(28);
- call {:si_unique_call 931} nVar883 := proc130(28);
- call {:si_unique_call 932} nVar884 := proc130(28);
- call {:si_unique_call 933} nVar885 := proc130(28);
- call {:si_unique_call 934} nVar886 := proc130(28);
- call {:si_unique_call 935} nVar887 := proc130(28);
- call {:si_unique_call 936} nVar888 := proc130(28);
- call {:si_unique_call 937} nVar889 := proc130(28);
- call {:si_unique_call 938} nVar890 := proc130(28);
- call {:si_unique_call 939} nVar891 := proc130(28);
- call {:si_unique_call 940} nVar892 := proc130(28);
- call {:si_unique_call 941} nVar893 := proc130(28);
- call {:si_unique_call 942} nVar894 := proc130(28);
- call {:si_unique_call 943} nVar895 := proc130(28);
- call {:si_unique_call 944} nVar896 := proc130(28);
- call {:si_unique_call 945} nVar897 := proc130(28);
- call {:si_unique_call 946} nVar898 := proc130(16);
- call {:si_unique_call 947} nVar899 := proc130(4);
- call {:si_unique_call 948} nVar900 := proc130(28);
- call {:si_unique_call 949} nVar901 := proc130(28);
- call {:si_unique_call 950} nVar902 := proc130(28);
- call {:si_unique_call 951} nVar903 := proc130(28);
- call {:si_unique_call 952} nVar904 := proc130(12);
- call {:si_unique_call 953} nVar905 := proc130(28);
- call {:si_unique_call 954} nVar906 := proc130(28);
- call {:si_unique_call 955} nVar907 := proc130(28);
- call {:si_unique_call 956} nVar908 := proc130(12);
- call {:si_unique_call 957} nVar909 := proc130(28);
- call {:si_unique_call 958} nVar910 := proc130(28);
- call {:si_unique_call 959} nVar911 := proc130(28);
- call {:si_unique_call 960} nVar912 := proc130(28);
- call {:si_unique_call 961} nVar913 := proc130(28);
- call {:si_unique_call 962} nVar914 := proc130(28);
- call {:si_unique_call 963} nVar915 := proc130(28);
- call {:si_unique_call 964} nVar916 := proc130(28);
- call {:si_unique_call 965} nVar917 := proc130(28);
- call {:si_unique_call 966} nVar918 := proc130(16);
- call {:si_unique_call 967} nVar919 := proc130(28);
- call {:si_unique_call 968} nVar920 := proc130(28);
- call {:si_unique_call 969} nVar921 := proc130(28);
- call {:si_unique_call 970} nVar922 := proc130(16);
- call {:si_unique_call 971} nVar923 := proc130(4);
- call {:si_unique_call 972} nVar924 := proc130(28);
- call {:si_unique_call 973} nVar925 := proc130(28);
- call {:si_unique_call 974} nVar926 := proc130(28);
- call {:si_unique_call 975} nVar927 := proc130(28);
- call {:si_unique_call 976} nVar928 := proc130(28);
- call {:si_unique_call 977} nVar929 := proc130(28);
- call {:si_unique_call 978} nVar930 := proc130(28);
- call {:si_unique_call 979} nVar931 := proc130(28);
- call {:si_unique_call 980} nVar932 := proc130(28);
- call {:si_unique_call 981} nVar933 := proc130(28);
- call {:si_unique_call 982} nVar934 := proc130(28);
- call {:si_unique_call 983} nVar935 := proc130(28);
- call {:si_unique_call 984} nVar936 := proc130(28);
- call {:si_unique_call 985} nVar937 := proc130(28);
- call {:si_unique_call 986} nVar938 := proc130(28);
- call {:si_unique_call 987} nVar939 := proc130(28);
- call {:si_unique_call 988} nVar940 := proc130(28);
- call {:si_unique_call 989} nVar941 := proc130(28);
- call {:si_unique_call 990} nVar942 := proc130(28);
- call {:si_unique_call 991} nVar943 := proc130(28);
- call {:si_unique_call 992} nVar944 := proc130(28);
- call {:si_unique_call 993} nVar945 := proc130(28);
- call {:si_unique_call 994} nVar946 := proc130(28);
- call {:si_unique_call 995} nVar947 := proc130(28);
- call {:si_unique_call 996} nVar948 := proc130(28);
- call {:si_unique_call 997} nVar949 := proc130(28);
- call {:si_unique_call 998} nVar950 := proc130(28);
- call {:si_unique_call 999} nVar951 := proc130(28);
- call {:si_unique_call 1000} nVar952 := proc130(28);
- call {:si_unique_call 1001} nVar953 := proc130(28);
- call {:si_unique_call 1002} nVar954 := proc130(28);
- call {:si_unique_call 1003} nVar955 := proc130(28);
- call {:si_unique_call 1004} nVar956 := proc130(28);
- call {:si_unique_call 1005} nVar957 := proc130(28);
- call {:si_unique_call 1006} nVar958 := proc130(28);
- call {:si_unique_call 1007} nVar959 := proc130(12);
- call {:si_unique_call 1008} nVar960 := proc130(28);
- call {:si_unique_call 1009} nVar961 := proc130(28);
- call {:si_unique_call 1010} nVar962 := proc130(28);
- call {:si_unique_call 1011} nVar963 := proc130(28);
- call {:si_unique_call 1012} nVar964 := proc130(4);
- call {:si_unique_call 1013} nVar965 := proc130(28);
- call {:si_unique_call 1014} nVar966 := proc130(16);
- call {:si_unique_call 1015} nVar967 := proc130(28);
- call {:si_unique_call 1016} nVar968 := proc130(16);
- call {:si_unique_call 1017} nVar969 := proc130(28);
- call {:si_unique_call 1018} nVar970 := proc130(28);
- call {:si_unique_call 1019} nVar971 := proc130(16);
- call {:si_unique_call 1020} nVar972 := proc130(12);
- call {:si_unique_call 1021} nVar973 := proc130(28);
- call {:si_unique_call 1022} nVar974 := proc130(28);
- call {:si_unique_call 1023} nVar975 := proc130(28);
- call {:si_unique_call 1024} nVar976 := proc130(12);
- call {:si_unique_call 1025} nVar977 := proc130(28);
- call {:si_unique_call 1026} nVar978 := proc130(12);
- call {:si_unique_call 1027} nVar979 := proc130(28);
- call {:si_unique_call 1028} nVar980 := proc130(28);
- call {:si_unique_call 1029} nVar981 := proc130(12);
- call {:si_unique_call 1030} nVar982 := proc130(16);
- call {:si_unique_call 1031} nVar983 := proc130(28);
- call {:si_unique_call 1032} nVar984 := proc130(28);
- call {:si_unique_call 1033} nVar985 := proc130(16);
- call {:si_unique_call 1034} nVar986 := proc130(28);
- call {:si_unique_call 1035} nVar987 := proc130(28);
- call {:si_unique_call 1036} nVar988 := proc130(28);
- call {:si_unique_call 1037} nVar989 := proc130(28);
- call {:si_unique_call 1038} nVar990 := proc130(28);
- call {:si_unique_call 1039} nVar991 := proc130(28);
- call {:si_unique_call 1040} nVar992 := proc130(28);
- call {:si_unique_call 1041} nVar993 := proc130(28);
- call {:si_unique_call 1042} nVar994 := proc130(28);
- call {:si_unique_call 1043} nVar995 := proc130(28);
- call {:si_unique_call 1044} nVar996 := proc130(28);
- call {:si_unique_call 1045} nVar997 := proc130(28);
- call {:si_unique_call 1046} nVar998 := proc130(28);
- call {:si_unique_call 1047} nVar999 := proc130(28);
- call {:si_unique_call 1048} nVar1000 := proc130(28);
- call {:si_unique_call 1049} nVar1001 := proc130(28);
- call {:si_unique_call 1050} nVar1002 := proc130(28);
- call {:si_unique_call 1051} nVar1003 := proc130(28);
- call {:si_unique_call 1052} nVar1004 := proc130(28);
- call {:si_unique_call 1053} nVar1005 := proc130(28);
- call {:si_unique_call 1054} nVar1006 := proc130(24);
- call {:si_unique_call 1055} nVar1007 := proc130(28);
- call {:si_unique_call 1056} nVar1008 := proc130(28);
- call {:si_unique_call 1057} nVar1009 := proc130(28);
- call {:si_unique_call 1058} nVar4947 := proc130(16);
- call {:si_unique_call 1059} nVar1010 := proc130(28);
- call {:si_unique_call 1060} nVar1011 := proc130(28);
- call {:si_unique_call 1061} nVar1012 := proc130(28);
- call {:si_unique_call 1062} nVar1013 := proc130(28);
- call {:si_unique_call 1063} nVar1014 := proc130(28);
- call {:si_unique_call 1064} nVar1015 := proc130(28);
- call {:si_unique_call 1065} nVar1016 := proc130(12);
- call {:si_unique_call 1066} nVar1017 := proc130(12);
- call {:si_unique_call 1067} nVar1018 := proc130(28);
- call {:si_unique_call 1068} nVar1019 := proc130(28);
- call {:si_unique_call 1069} nVar1020 := proc130(12);
- call {:si_unique_call 1070} nVar1021 := proc130(28);
- call {:si_unique_call 1071} nVar1022 := proc130(28);
- call {:si_unique_call 1072} nVar1023 := proc130(24);
- call {:si_unique_call 1073} nVar1024 := proc130(28);
- call {:si_unique_call 1074} nVar1025 := proc130(16);
- call {:si_unique_call 1075} nVar1026 := proc130(16);
- call {:si_unique_call 1076} nVar1027 := proc130(28);
- call {:si_unique_call 1077} nVar1028 := proc130(28);
- call {:si_unique_call 1078} nVar1029 := proc130(12);
- call {:si_unique_call 1079} nVar1030 := proc130(12);
- call {:si_unique_call 1080} nVar1031 := proc130(28);
- call {:si_unique_call 1081} nVar1032 := proc130(28);
- call {:si_unique_call 1082} nVar1033 := proc130(28);
- call {:si_unique_call 1083} nVar1034 := proc130(28);
- call {:si_unique_call 1084} nVar1035 := proc130(12);
- call {:si_unique_call 1085} nVar1036 := proc130(16);
- call {:si_unique_call 1086} nVar1037 := proc130(28);
- call {:si_unique_call 1087} nVar1038 := proc130(28);
- call {:si_unique_call 1088} nVar1039 := proc130(4);
- call {:si_unique_call 1089} nVar1041 := proc130(28);
- call {:si_unique_call 1090} nVar1042 := proc130(56);
- call {:si_unique_call 1091} nVar1043 := proc130(28);
- call {:si_unique_call 1092} nVar1044 := proc130(28);
- call {:si_unique_call 1093} nVar1045 := proc130(28);
- call {:si_unique_call 1094} nVar1046 := proc130(28);
- call {:si_unique_call 1095} nVar1047 := proc130(12);
- call {:si_unique_call 1096} nVar1048 := proc130(28);
- call {:si_unique_call 1097} nVar1049 := proc130(28);
- call {:si_unique_call 1098} nVar1050 := proc130(16);
- call {:si_unique_call 1099} nVar1051 := proc130(28);
- call {:si_unique_call 1100} nVar1052 := proc130(28);
- call {:si_unique_call 1101} nVar1053 := proc130(28);
- call {:si_unique_call 1102} nVar1054 := proc130(16);
- call {:si_unique_call 1103} nVar1055 := proc130(28);
- call {:si_unique_call 1104} nVar1056 := proc130(28);
- call {:si_unique_call 1105} nVar1057 := proc130(28);
- call {:si_unique_call 1106} nVar1058 := proc130(28);
- call {:si_unique_call 1107} nVar1059 := proc130(28);
- call {:si_unique_call 1108} nVar1060 := proc130(28);
- call {:si_unique_call 1109} nVar1061 := proc130(28);
- call {:si_unique_call 1110} nVar1062 := proc130(28);
- call {:si_unique_call 1111} nVar1063 := proc130(28);
- call {:si_unique_call 1112} nVar1064 := proc130(28);
- call {:si_unique_call 1113} nVar1065 := proc130(28);
- call {:si_unique_call 1114} nVar1066 := proc130(28);
- call {:si_unique_call 1115} nVar1067 := proc130(4);
- call {:si_unique_call 1116} nVar1068 := proc130(28);
- call {:si_unique_call 1117} nVar1069 := proc130(28);
- call {:si_unique_call 1118} nVar1070 := proc130(28);
- call {:si_unique_call 1119} nVar1071 := proc130(24);
- call {:si_unique_call 1120} nVar1072 := proc130(28);
- call {:si_unique_call 1121} nVar1073 := proc130(8);
- call {:si_unique_call 1122} nVar1074 := proc130(28);
- call {:si_unique_call 1123} nVar1075 := proc130(28);
- call {:si_unique_call 1124} nVar1076 := proc130(16);
- call {:si_unique_call 1125} nVar1077 := proc130(28);
- call {:si_unique_call 1126} nVar1078 := proc130(28);
- call {:si_unique_call 1127} nVar1079 := proc130(28);
- call {:si_unique_call 1128} nVar1080 := proc130(28);
- call {:si_unique_call 1129} nVar1081 := proc130(28);
- call {:si_unique_call 1130} nVar1082 := proc130(28);
- call {:si_unique_call 1131} nVar1083 := proc130(28);
- call {:si_unique_call 1132} nVar1084 := proc130(28);
- call {:si_unique_call 1133} nVar1085 := proc130(28);
- call {:si_unique_call 1134} nVar1086 := proc130(28);
- call {:si_unique_call 1135} nVar1087 := proc130(28);
- call {:si_unique_call 1136} nVar1088 := proc130(28);
- call {:si_unique_call 1137} nVar1089 := proc130(28);
- call {:si_unique_call 1138} nVar1090 := proc130(28);
- call {:si_unique_call 1139} nVar1091 := proc130(28);
- call {:si_unique_call 1140} nVar1092 := proc130(28);
- call {:si_unique_call 1141} nVar1093 := proc130(28);
- call {:si_unique_call 1142} nVar1094 := proc130(12);
- call {:si_unique_call 1143} nVar1095 := proc130(4);
- call {:si_unique_call 1144} nVar1096 := proc130(16);
- call {:si_unique_call 1145} nVar1097 := proc130(24);
- call {:si_unique_call 1146} nVar1098 := proc130(28);
- call {:si_unique_call 1147} nVar1099 := proc130(28);
- call {:si_unique_call 1148} nVar1100 := proc130(28);
- call {:si_unique_call 1149} nVar1101 := proc130(28);
- call {:si_unique_call 1150} nVar1102 := proc130(28);
- call {:si_unique_call 1151} nVar1103 := proc130(28);
- call {:si_unique_call 1152} nVar1104 := proc130(24);
- call {:si_unique_call 1153} nVar1105 := proc130(28);
- call {:si_unique_call 1154} nVar1106 := proc130(16);
- call {:si_unique_call 1155} nVar1107 := proc130(12);
- call {:si_unique_call 1156} nVar1108 := proc130(28);
- call {:si_unique_call 1157} nVar1109 := proc130(28);
- call {:si_unique_call 1158} nVar1110 := proc130(28);
- call {:si_unique_call 1159} nVar1111 := proc130(28);
- call {:si_unique_call 1160} nVar1112 := proc130(16);
- call {:si_unique_call 1161} nVar1113 := proc130(28);
- call {:si_unique_call 1162} nVar1114 := proc130(28);
- call {:si_unique_call 1163} nVar1115 := proc130(28);
- call {:si_unique_call 1164} nVar1116 := proc130(28);
- call {:si_unique_call 1165} nVar1117 := proc130(28);
- call {:si_unique_call 1166} nVar1118 := proc130(16);
- call {:si_unique_call 1167} nVar1119 := proc130(16);
- call {:si_unique_call 1168} nVar1120 := proc130(28);
- call {:si_unique_call 1169} nVar1121 := proc130(28);
- call {:si_unique_call 1170} nVar1122 := proc130(28);
- call {:si_unique_call 1171} nVar1123 := proc130(16);
- call {:si_unique_call 1172} nVar1124 := proc130(28);
- call {:si_unique_call 1173} nVar1125 := proc130(28);
- call {:si_unique_call 1174} nVar1126 := proc130(28);
- call {:si_unique_call 1175} nVar1127 := proc130(28);
- call {:si_unique_call 1176} nVar1128 := proc130(28);
- call {:si_unique_call 1177} nVar1129 := proc130(28);
- call {:si_unique_call 1178} nVar1130 := proc130(28);
- call {:si_unique_call 1179} nVar1131 := proc130(28);
- call {:si_unique_call 1180} nVar1132 := proc130(28);
- call {:si_unique_call 1181} nVar1133 := proc130(28);
- call {:si_unique_call 1182} nVar1134 := proc130(16);
- call {:si_unique_call 1183} nVar1135 := proc130(28);
- call {:si_unique_call 1184} nVar1136 := proc130(56);
- call {:si_unique_call 1185} nVar1137 := proc130(28);
- call {:si_unique_call 1186} nVar1138 := proc130(16);
- call {:si_unique_call 1187} nVar1139 := proc130(28);
- call {:si_unique_call 1188} nVar1140 := proc130(28);
- call {:si_unique_call 1189} nVar1141 := proc130(28);
- call {:si_unique_call 1190} nVar1142 := proc130(28);
- call {:si_unique_call 1191} nVar1143 := proc130(28);
- call {:si_unique_call 1192} nVar1144 := proc130(12);
- call {:si_unique_call 1193} nVar1145 := proc130(28);
- call {:si_unique_call 1194} nVar1146 := proc130(28);
- call {:si_unique_call 1195} nVar1147 := proc130(28);
- call {:si_unique_call 1196} nVar1148 := proc130(16);
- call {:si_unique_call 1197} nVar1149 := proc130(28);
- call {:si_unique_call 1198} nVar1150 := proc130(4);
- call {:si_unique_call 1199} nVar1151 := proc130(28);
- call {:si_unique_call 1200} nVar1152 := proc130(28);
- call {:si_unique_call 1201} nVar1153 := proc130(28);
- call {:si_unique_call 1202} nVar1154 := proc130(28);
- call {:si_unique_call 1203} nVar1155 := proc130(28);
- call {:si_unique_call 1204} nVar1156 := proc130(28);
- call {:si_unique_call 1205} nVar1157 := proc130(28);
- call {:si_unique_call 1206} nVar1158 := proc130(28);
- call {:si_unique_call 1207} nVar1159 := proc130(28);
- call {:si_unique_call 1208} nVar1160 := proc130(28);
- call {:si_unique_call 1209} nVar1161 := proc130(28);
- call {:si_unique_call 1210} nVar1162 := proc130(28);
- call {:si_unique_call 1211} nVar1163 := proc130(28);
- call {:si_unique_call 1212} nVar1164 := proc130(8);
- call {:si_unique_call 1213} nVar1165 := proc130(28);
- call {:si_unique_call 1214} nVar1166 := proc130(28);
- call {:si_unique_call 1215} nVar1167 := proc130(28);
- call {:si_unique_call 1216} nVar1168 := proc130(16);
- call {:si_unique_call 1217} nVar1169 := proc130(28);
- call {:si_unique_call 1218} nVar1170 := proc130(4);
- call {:si_unique_call 1219} nVar1171 := proc130(28);
- call {:si_unique_call 1220} nVar1172 := proc130(28);
- call {:si_unique_call 1221} nVar1173 := proc130(28);
- call {:si_unique_call 1222} nVar1174 := proc130(12);
- call {:si_unique_call 1223} nVar1176 := proc130(28);
- call {:si_unique_call 1224} nVar1177 := proc130(28);
- call {:si_unique_call 1225} nVar1178 := proc130(28);
- call {:si_unique_call 1226} nVar1179 := proc130(28);
- call {:si_unique_call 1227} nVar1180 := proc130(28);
- call {:si_unique_call 1228} nVar1181 := proc130(28);
- call {:si_unique_call 1229} nVar1182 := proc130(16);
- call {:si_unique_call 1230} nVar1183 := proc130(28);
- call {:si_unique_call 1231} nVar1184 := proc130(28);
- call {:si_unique_call 1232} nVar1185 := proc130(28);
- call {:si_unique_call 1233} nVar1186 := proc130(28);
- call {:si_unique_call 1234} nVar1187 := proc130(28);
- call {:si_unique_call 1235} nVar1188 := proc130(28);
- call {:si_unique_call 1236} nVar1189 := proc130(28);
- call {:si_unique_call 1237} nVar1190 := proc130(28);
- call {:si_unique_call 1238} nVar1191 := proc130(28);
- call {:si_unique_call 1239} nVar1192 := proc130(28);
- call {:si_unique_call 1240} nVar1193 := proc130(28);
- call {:si_unique_call 1241} nVar1194 := proc130(28);
- call {:si_unique_call 1242} nVar1195 := proc130(28);
- call {:si_unique_call 1243} nVar1196 := proc130(28);
- call {:si_unique_call 1244} nVar1197 := proc130(16);
- call {:si_unique_call 1245} nVar1198 := proc130(28);
- call {:si_unique_call 1246} nVar1199 := proc130(28);
- call {:si_unique_call 1247} nVar1200 := proc130(28);
- call {:si_unique_call 1248} nVar1201 := proc130(28);
- call {:si_unique_call 1249} nVar1202 := proc130(28);
- call {:si_unique_call 1250} nVar1203 := proc130(28);
- call {:si_unique_call 1251} nVar1204 := proc130(28);
- call {:si_unique_call 1252} nVar1205 := proc130(28);
- call {:si_unique_call 1253} nVar1206 := proc130(28);
- call {:si_unique_call 1254} nVar1207 := proc130(28);
- call {:si_unique_call 1255} nVar1208 := proc130(28);
- call {:si_unique_call 1256} nVar1209 := proc130(28);
- call {:si_unique_call 1257} nVar1210 := proc130(28);
- call {:si_unique_call 1258} nVar1211 := proc130(28);
- call {:si_unique_call 1259} nVar1212 := proc130(28);
- call {:si_unique_call 1260} nVar1213 := proc130(28);
- call {:si_unique_call 1261} nVar1214 := proc130(28);
- call {:si_unique_call 1262} nVar1215 := proc130(16);
- call {:si_unique_call 1263} nVar1216 := proc130(12);
- call {:si_unique_call 1264} nVar1217 := proc130(28);
- call {:si_unique_call 1265} nVar1218 := proc130(28);
- call {:si_unique_call 1266} nVar1219 := proc130(28);
- call {:si_unique_call 1267} nVar1220 := proc130(28);
- call {:si_unique_call 1268} nVar1221 := proc130(28);
- call {:si_unique_call 1269} nVar1222 := proc130(16);
- call {:si_unique_call 1270} nVar1223 := proc130(28);
- call {:si_unique_call 1271} nVar1224 := proc130(28);
- call {:si_unique_call 1272} nVar1225 := proc130(28);
- call {:si_unique_call 1273} nVar1226 := proc130(12);
- call {:si_unique_call 1274} nVar1227 := proc130(24);
- call {:si_unique_call 1275} nVar1228 := proc130(28);
- call {:si_unique_call 1276} nVar1229 := proc130(28);
- call {:si_unique_call 1277} nVar1230 := proc130(28);
- call {:si_unique_call 1278} nVar1231 := proc130(28);
- call {:si_unique_call 1279} nVar1232 := proc130(28);
- call {:si_unique_call 1280} nVar1233 := proc130(28);
- call {:si_unique_call 1281} nVar1234 := proc130(28);
- call {:si_unique_call 1282} nVar1235 := proc130(16);
- call {:si_unique_call 1283} nVar1236 := proc130(28);
- call {:si_unique_call 1284} nVar1237 := proc130(28);
- call {:si_unique_call 1285} nVar1238 := proc130(4);
- call {:si_unique_call 1286} nVar1239 := proc130(28);
- call {:si_unique_call 1287} nVar1240 := proc130(28);
- call {:si_unique_call 1288} nVar1241 := proc130(28);
- call {:si_unique_call 1289} nVar1242 := proc130(16);
- call {:si_unique_call 1290} nVar1243 := proc130(28);
- call {:si_unique_call 1291} nVar1244 := proc130(28);
- call {:si_unique_call 1292} nVar1245 := proc130(28);
- call {:si_unique_call 1293} nVar1246 := proc130(28);
- call {:si_unique_call 1294} nVar1247 := proc130(24);
- call {:si_unique_call 1295} nVar1248 := proc130(28);
- call {:si_unique_call 1296} nVar1249 := proc130(28);
- call {:si_unique_call 1297} nVar1250 := proc130(28);
- call {:si_unique_call 1298} nVar1251 := proc130(12);
- call {:si_unique_call 1299} nVar1252 := proc130(28);
- call {:si_unique_call 1300} nVar1253 := proc130(28);
- call {:si_unique_call 1301} nVar1255 := proc130(28);
- call {:si_unique_call 1302} nVar1256 := proc130(28);
- call {:si_unique_call 1303} nVar1257 := proc130(28);
- call {:si_unique_call 1304} nVar1258 := proc130(28);
- call {:si_unique_call 1305} nVar1259 := proc130(28);
- call {:si_unique_call 1306} nVar1260 := proc130(28);
- call {:si_unique_call 1307} nVar1261 := proc130(28);
- call {:si_unique_call 1308} nVar1262 := proc130(28);
- call {:si_unique_call 1309} nVar1263 := proc130(28);
- call {:si_unique_call 1310} nVar1264 := proc130(16);
- call {:si_unique_call 1311} nVar1265 := proc130(28);
- call {:si_unique_call 1312} nVar1266 := proc130(28);
- call {:si_unique_call 1313} nVar1267 := proc130(24);
- call {:si_unique_call 1314} nVar1268 := proc130(24);
- call {:si_unique_call 1315} nVar1269 := proc130(28);
- call {:si_unique_call 1316} nVar1270 := proc130(28);
- call {:si_unique_call 1317} nVar1271 := proc130(28);
- call {:si_unique_call 1318} nVar1272 := proc130(28);
- call {:si_unique_call 1319} nVar1273 := proc130(28);
- call {:si_unique_call 1320} nVar1274 := proc130(12);
- call {:si_unique_call 1321} nVar1275 := proc130(12);
- call {:si_unique_call 1322} nVar1276 := proc130(28);
- call {:si_unique_call 1323} nVar1277 := proc130(28);
- call {:si_unique_call 1324} nVar1278 := proc130(28);
- call {:si_unique_call 1325} nVar1279 := proc130(16);
- call {:si_unique_call 1326} nVar1280 := proc130(24);
- call {:si_unique_call 1327} nVar1281 := proc130(28);
- call {:si_unique_call 1328} nVar1282 := proc130(28);
- call {:si_unique_call 1329} nVar1283 := proc130(28);
- call {:si_unique_call 1330} nVar1284 := proc130(28);
- call {:si_unique_call 1331} nVar1285 := proc130(28);
- call {:si_unique_call 1332} nVar1286 := proc130(28);
- call {:si_unique_call 1333} nVar1287 := proc130(28);
- call {:si_unique_call 1334} nVar1288 := proc130(28);
- call {:si_unique_call 1335} nVar1289 := proc130(28);
- call {:si_unique_call 1336} nVar1290 := proc130(28);
- call {:si_unique_call 1337} nVar1291 := proc130(28);
- call {:si_unique_call 1338} nVar1292 := proc130(28);
- call {:si_unique_call 1339} nVar1293 := proc130(28);
- call {:si_unique_call 1340} nVar1294 := proc130(8);
- call {:si_unique_call 1341} nVar1295 := proc130(28);
- call {:si_unique_call 1342} nVar1296 := proc130(28);
- call {:si_unique_call 1343} nVar1297 := proc130(28);
- call {:si_unique_call 1344} nVar1298 := proc130(12);
- call {:si_unique_call 1345} nVar1299 := proc130(28);
- call {:si_unique_call 1346} nVar1300 := proc130(12);
- call {:si_unique_call 1347} nVar1301 := proc130(28);
- call {:si_unique_call 1348} nVar1302 := proc130(28);
- call {:si_unique_call 1349} nVar1303 := proc130(28);
- call {:si_unique_call 1350} nVar1304 := proc130(28);
- call {:si_unique_call 1351} nVar1305 := proc130(28);
- call {:si_unique_call 1352} nVar1306 := proc130(28);
- call {:si_unique_call 1353} nVar1307 := proc130(28);
- call {:si_unique_call 1354} nVar4948 := proc130(16);
- call {:si_unique_call 1355} nVar1308 := proc130(28);
- call {:si_unique_call 1356} nVar1309 := proc130(28);
- call {:si_unique_call 1357} nVar1310 := proc130(28);
- call {:si_unique_call 1358} nVar1311 := proc130(28);
- call {:si_unique_call 1359} nVar1312 := proc130(28);
- call {:si_unique_call 1360} nVar1313 := proc130(28);
- call {:si_unique_call 1361} nVar1314 := proc130(28);
- call {:si_unique_call 1362} nVar1315 := proc130(28);
- call {:si_unique_call 1363} nVar1316 := proc130(28);
- call {:si_unique_call 1364} nVar1317 := proc130(12);
- call {:si_unique_call 1365} nVar1318 := proc130(28);
- call {:si_unique_call 1366} nVar1319 := proc130(28);
- call {:si_unique_call 1367} nVar1320 := proc130(28);
- call {:si_unique_call 1368} nVar1321 := proc130(28);
- call {:si_unique_call 1369} nVar1322 := proc130(4);
- call {:si_unique_call 1370} nVar1323 := proc130(28);
- call {:si_unique_call 1371} nVar1324 := proc130(8);
- call {:si_unique_call 1372} nVar1325 := proc130(28);
- call {:si_unique_call 1373} nVar1326 := proc130(28);
- call {:si_unique_call 1374} nVar1327 := proc130(28);
- call {:si_unique_call 1375} nVar1328 := proc130(12);
- call {:si_unique_call 1376} nVar1329 := proc130(28);
- call {:si_unique_call 1377} nVar1330 := proc130(28);
- call {:si_unique_call 1378} nVar1331 := proc130(28);
- call {:si_unique_call 1379} nVar1332 := proc130(28);
- call {:si_unique_call 1380} nVar1333 := proc130(28);
- call {:si_unique_call 1381} nVar1334 := proc130(28);
- call {:si_unique_call 1382} nVar1335 := proc130(28);
- call {:si_unique_call 1383} nVar1336 := proc130(28);
- call {:si_unique_call 1384} nVar1337 := proc130(12);
- call {:si_unique_call 1385} nVar1338 := proc130(28);
- call {:si_unique_call 1386} nVar1339 := proc130(24);
- call {:si_unique_call 1387} nVar1340 := proc130(4);
- call {:si_unique_call 1388} nVar1341 := proc130(28);
- call {:si_unique_call 1389} nVar1342 := proc130(28);
- call {:si_unique_call 1390} nVar1343 := proc130(16);
- call {:si_unique_call 1391} nVar1344 := proc130(28);
- call {:si_unique_call 1392} nVar1345 := proc130(28);
- call {:si_unique_call 1393} nVar1346 := proc130(28);
- call {:si_unique_call 1394} nVar1347 := proc130(16);
- call {:si_unique_call 1395} nVar1348 := proc130(28);
- call {:si_unique_call 1396} nVar1349 := proc130(28);
- call {:si_unique_call 1397} nVar1350 := proc130(28);
- call {:si_unique_call 1398} nVar1351 := proc130(28);
- call {:si_unique_call 1399} nVar1352 := proc130(28);
- call {:si_unique_call 1400} nVar1353 := proc130(28);
- call {:si_unique_call 1401} nVar1354 := proc130(28);
- call {:si_unique_call 1402} nVar1355 := proc130(28);
- call {:si_unique_call 1403} nVar1356 := proc130(28);
- call {:si_unique_call 1404} nVar1357 := proc130(28);
- call {:si_unique_call 1405} nVar1358 := proc130(28);
- call {:si_unique_call 1406} nVar1359 := proc130(28);
- call {:si_unique_call 1407} nVar1360 := proc130(28);
- call {:si_unique_call 1408} nVar1361 := proc130(28);
- call {:si_unique_call 1409} nVar1362 := proc130(28);
- call {:si_unique_call 1410} nVar1363 := proc130(12);
- call {:si_unique_call 1411} nVar1364 := proc130(28);
- call {:si_unique_call 1412} nVar1365 := proc130(28);
- call {:si_unique_call 1413} nVar1366 := proc130(16);
- call {:si_unique_call 1414} nVar1367 := proc130(28);
- call {:si_unique_call 1415} nVar1368 := proc130(28);
- call {:si_unique_call 1416} nVar1369 := proc130(28);
- call {:si_unique_call 1417} nVar1370 := proc130(28);
- call {:si_unique_call 1418} nVar1371 := proc130(12);
- call {:si_unique_call 1419} nVar1372 := proc130(28);
- call {:si_unique_call 1420} nVar1373 := proc130(12);
- call {:si_unique_call 1421} nVar1374 := proc130(28);
- call {:si_unique_call 1422} nVar1375 := proc130(28);
- call {:si_unique_call 1423} nVar1376 := proc130(28);
- call {:si_unique_call 1424} nVar1377 := proc130(4);
- call {:si_unique_call 1425} nVar1378 := proc130(28);
- call {:si_unique_call 1426} nVar1379 := proc130(4);
- call {:si_unique_call 1427} nVar1380 := proc130(28);
- call {:si_unique_call 1428} nVar1381 := proc130(28);
- call {:si_unique_call 1429} nVar1382 := proc130(28);
- call {:si_unique_call 1430} nVar1383 := proc130(28);
- call {:si_unique_call 1431} nVar1384 := proc130(28);
- call {:si_unique_call 1432} nVar1385 := proc130(28);
- call {:si_unique_call 1433} nVar1386 := proc130(28);
- call {:si_unique_call 1434} nVar1387 := proc130(28);
- call {:si_unique_call 1435} nVar1388 := proc130(28);
- call {:si_unique_call 1436} nVar1389 := proc130(28);
- call {:si_unique_call 1437} nVar1390 := proc130(28);
- call {:si_unique_call 1438} nVar1391 := proc130(4);
- call {:si_unique_call 1439} nVar1392 := proc130(28);
- call {:si_unique_call 1440} nVar1393 := proc130(16);
- call {:si_unique_call 1441} nVar1394 := proc130(28);
- call {:si_unique_call 1442} nVar1395 := proc130(28);
- call {:si_unique_call 1443} nVar1396 := proc130(28);
- call {:si_unique_call 1444} nVar1397 := proc130(28);
- call {:si_unique_call 1445} nVar1398 := proc130(16);
- call {:si_unique_call 1446} nVar1399 := proc130(28);
- call {:si_unique_call 1447} nVar1400 := proc130(28);
- call {:si_unique_call 1448} nVar1401 := proc130(12);
- call {:si_unique_call 1449} nVar1402 := proc130(16);
- call {:si_unique_call 1450} nVar1403 := proc130(28);
- call {:si_unique_call 1451} nVar1404 := proc130(28);
- call {:si_unique_call 1452} nVar1405 := proc130(28);
- call {:si_unique_call 1453} nVar1406 := proc130(28);
- call {:si_unique_call 1454} nVar1407 := proc130(28);
- call {:si_unique_call 1455} nVar1408 := proc130(16);
- call {:si_unique_call 1456} nVar1409 := proc130(28);
- call {:si_unique_call 1457} nVar1410 := proc130(12);
- call {:si_unique_call 1458} nVar1411 := proc130(28);
- call {:si_unique_call 1459} nVar1412 := proc130(28);
- call {:si_unique_call 1460} nVar1413 := proc130(28);
- call {:si_unique_call 1461} nVar1414 := proc130(28);
- call {:si_unique_call 1462} nVar1415 := proc130(28);
- call {:si_unique_call 1463} nVar1416 := proc130(28);
- call {:si_unique_call 1464} nVar1417 := proc130(28);
- call {:si_unique_call 1465} nVar1418 := proc130(28);
- call {:si_unique_call 1466} nVar1419 := proc130(28);
- call {:si_unique_call 1467} nVar1420 := proc130(28);
- call {:si_unique_call 1468} nVar1421 := proc130(28);
- call {:si_unique_call 1469} nVar1422 := proc130(28);
- call {:si_unique_call 1470} nVar1423 := proc130(28);
- call {:si_unique_call 1471} nVar1424 := proc130(28);
- call {:si_unique_call 1472} nVar1425 := proc130(28);
- call {:si_unique_call 1473} nVar1426 := proc130(28);
- call {:si_unique_call 1474} nVar1427 := proc130(28);
- call {:si_unique_call 1475} nVar1428 := proc130(28);
- call {:si_unique_call 1476} nVar1429 := proc130(28);
- call {:si_unique_call 1477} nVar1430 := proc130(28);
- call {:si_unique_call 1478} nVar1431 := proc130(16);
- call {:si_unique_call 1479} nVar1432 := proc130(24);
- call {:si_unique_call 1480} nVar1433 := proc130(28);
- call {:si_unique_call 1481} nVar1434 := proc130(28);
- call {:si_unique_call 1482} nVar1435 := proc130(28);
- call {:si_unique_call 1483} nVar1436 := proc130(28);
- call {:si_unique_call 1484} nVar1437 := proc130(16);
- call {:si_unique_call 1485} nVar1438 := proc130(28);
- call {:si_unique_call 1486} nVar1439 := proc130(28);
- call {:si_unique_call 1487} nVar1440 := proc130(28);
- call {:si_unique_call 1488} nVar1441 := proc130(28);
- call {:si_unique_call 1489} nVar1442 := proc130(24);
- call {:si_unique_call 1490} nVar1443 := proc130(28);
- call {:si_unique_call 1491} nVar1444 := proc130(28);
- call {:si_unique_call 1492} nVar1445 := proc130(28);
- call {:si_unique_call 1493} nVar1446 := proc130(28);
- call {:si_unique_call 1494} nVar1447 := proc130(28);
- call {:si_unique_call 1495} nVar1448 := proc130(28);
- call {:si_unique_call 1496} nVar1449 := proc130(28);
- call {:si_unique_call 1497} nVar1450 := proc130(28);
- call {:si_unique_call 1498} nVar1451 := proc130(28);
- call {:si_unique_call 1499} nVar1452 := proc130(12);
- call {:si_unique_call 1500} nVar1453 := proc130(28);
- call {:si_unique_call 1501} nVar1454 := proc130(28);
- call {:si_unique_call 1502} nVar1455 := proc130(4);
- call {:si_unique_call 1503} nVar1456 := proc130(28);
- call {:si_unique_call 1504} nVar1457 := proc130(16);
- call {:si_unique_call 1505} nVar1458 := proc130(28);
- call {:si_unique_call 1506} nVar1459 := proc130(12);
- call {:si_unique_call 1507} nVar1460 := proc130(24);
- call {:si_unique_call 1508} nVar1461 := proc130(28);
- call {:si_unique_call 1509} nVar1462 := proc130(28);
- call {:si_unique_call 1510} nVar1463 := proc130(24);
- call {:si_unique_call 1511} nVar1464 := proc130(28);
- call {:si_unique_call 1512} nVar1465 := proc130(28);
- call {:si_unique_call 1513} nVar1466 := proc130(28);
- call {:si_unique_call 1514} nVar1467 := proc130(28);
- call {:si_unique_call 1515} nVar1468 := proc130(4);
- call {:si_unique_call 1516} nVar1469 := proc130(28);
- call {:si_unique_call 1517} nVar1470 := proc130(28);
- call {:si_unique_call 1518} nVar1471 := proc130(28);
- call {:si_unique_call 1519} nVar1472 := proc130(16);
- call {:si_unique_call 1520} nVar1473 := proc130(16);
- call {:si_unique_call 1521} nVar1474 := proc130(28);
- call {:si_unique_call 1522} nVar1475 := proc130(28);
- call {:si_unique_call 1523} nVar1476 := proc130(4);
- call {:si_unique_call 1524} nVar1477 := proc130(28);
- call {:si_unique_call 1525} nVar1478 := proc130(28);
- call {:si_unique_call 1526} nVar1479 := proc130(28);
- call {:si_unique_call 1527} nVar1480 := proc130(28);
- call {:si_unique_call 1528} nVar1481 := proc130(28);
- call {:si_unique_call 1529} nVar1482 := proc130(28);
- call {:si_unique_call 1530} nVar1483 := proc130(28);
- call {:si_unique_call 1531} nVar1484 := proc130(28);
- call {:si_unique_call 1532} nVar1485 := proc130(28);
- call {:si_unique_call 1533} nVar1486 := proc130(28);
- call {:si_unique_call 1534} nVar1487 := proc130(28);
- call {:si_unique_call 1535} nVar4949 := proc130(16);
- call {:si_unique_call 1536} nVar1488 := proc130(28);
- call {:si_unique_call 1537} nVar1489 := proc130(28);
- call {:si_unique_call 1538} nVar1490 := proc130(28);
- call {:si_unique_call 1539} nVar1491 := proc130(28);
- call {:si_unique_call 1540} nVar1492 := proc130(28);
- call {:si_unique_call 1541} nVar1493 := proc130(24);
- call {:si_unique_call 1542} nVar1494 := proc130(28);
- call {:si_unique_call 1543} nVar1495 := proc130(28);
- call {:si_unique_call 1544} nVar1496 := proc130(28);
- call {:si_unique_call 1545} nVar1497 := proc130(4);
- call {:si_unique_call 1546} nVar1498 := proc130(28);
- call {:si_unique_call 1547} nVar1499 := proc130(28);
- call {:si_unique_call 1548} nVar1500 := proc130(28);
- call {:si_unique_call 1549} nVar1501 := proc130(28);
- call {:si_unique_call 1550} nVar1502 := proc130(12);
- call {:si_unique_call 1551} nVar1503 := proc130(28);
- call {:si_unique_call 1552} nVar1504 := proc130(12);
- call {:si_unique_call 1553} nVar1505 := proc130(28);
- call {:si_unique_call 1554} nVar1506 := proc130(28);
- call {:si_unique_call 1555} nVar1507 := proc130(28);
- call {:si_unique_call 1556} nVar1508 := proc130(28);
- call {:si_unique_call 1557} nVar1509 := proc130(28);
- call {:si_unique_call 1558} nVar1510 := proc130(28);
- call {:si_unique_call 1559} nVar1511 := proc130(28);
- call {:si_unique_call 1560} nVar1512 := proc130(4);
- call {:si_unique_call 1561} nVar1513 := proc130(28);
- call {:si_unique_call 1562} nVar1514 := proc130(28);
- call {:si_unique_call 1563} nVar1515 := proc130(28);
- call {:si_unique_call 1564} nVar1516 := proc130(16);
- call {:si_unique_call 1565} nVar1517 := proc130(28);
- call {:si_unique_call 1566} nVar1518 := proc130(28);
- call {:si_unique_call 1567} nVar1519 := proc130(16);
- call {:si_unique_call 1568} nVar1520 := proc130(28);
- call {:si_unique_call 1569} nVar1521 := proc130(28);
- call {:si_unique_call 1570} nVar1522 := proc130(28);
- call {:si_unique_call 1571} nVar1523 := proc130(12);
- call {:si_unique_call 1572} nVar1524 := proc130(28);
- call {:si_unique_call 1573} nVar1525 := proc130(28);
- call {:si_unique_call 1574} nVar1526 := proc130(28);
- call {:si_unique_call 1575} nVar1527 := proc130(12);
- call {:si_unique_call 1576} nVar1528 := proc130(28);
- call {:si_unique_call 1577} nVar1529 := proc130(28);
- call {:si_unique_call 1578} nVar1530 := proc130(28);
- call {:si_unique_call 1579} nVar1531 := proc130(28);
- call {:si_unique_call 1580} nVar1532 := proc130(28);
- call {:si_unique_call 1581} nVar1533 := proc130(28);
- call {:si_unique_call 1582} nVar1534 := proc130(28);
- call {:si_unique_call 1583} nVar1535 := proc130(28);
- call {:si_unique_call 1584} nVar1536 := proc130(28);
- call {:si_unique_call 1585} nVar1537 := proc130(28);
- call {:si_unique_call 1586} nVar1538 := proc130(28);
- call {:si_unique_call 1587} nVar1539 := proc130(28);
- call {:si_unique_call 1588} nVar1540 := proc130(28);
- call {:si_unique_call 1589} nVar1541 := proc130(28);
- call {:si_unique_call 1590} nVar1542 := proc130(28);
- call {:si_unique_call 1591} nVar1543 := proc130(28);
- call {:si_unique_call 1592} nVar1544 := proc130(28);
- call {:si_unique_call 1593} nVar1545 := proc130(28);
- call {:si_unique_call 1594} nVar1546 := proc130(28);
- call {:si_unique_call 1595} nVar1547 := proc130(28);
- call {:si_unique_call 1596} nVar1548 := proc130(16);
- call {:si_unique_call 1597} nVar1549 := proc130(28);
- call {:si_unique_call 1598} nVar1550 := proc130(16);
- call {:si_unique_call 1599} nVar1551 := proc130(28);
- call {:si_unique_call 1600} nVar1552 := proc130(28);
- call {:si_unique_call 1601} nVar1553 := proc130(28);
- call {:si_unique_call 1602} nVar1554 := proc130(28);
- call {:si_unique_call 1603} nVar1555 := proc130(28);
- call {:si_unique_call 1604} nVar1556 := proc130(28);
- call {:si_unique_call 1605} nVar1557 := proc130(28);
- call {:si_unique_call 1606} nVar1558 := proc130(28);
- call {:si_unique_call 1607} nVar1559 := proc130(28);
- call {:si_unique_call 1608} nVar1560 := proc130(24);
- call {:si_unique_call 1609} nVar1561 := proc130(28);
- call {:si_unique_call 1610} nVar1562 := proc130(28);
- call {:si_unique_call 1611} nVar1563 := proc130(28);
- call {:si_unique_call 1612} nVar1564 := proc130(28);
- call {:si_unique_call 1613} nVar1565 := proc130(16);
- call {:si_unique_call 1614} nVar1566 := proc130(28);
- call {:si_unique_call 1615} nVar1567 := proc130(28);
- call {:si_unique_call 1616} nVar1568 := proc130(28);
- call {:si_unique_call 1617} nVar1569 := proc130(28);
- call {:si_unique_call 1618} nVar1570 := proc130(12);
- call {:si_unique_call 1619} nVar1571 := proc130(28);
- call {:si_unique_call 1620} nVar1572 := proc130(28);
- call {:si_unique_call 1621} nVar1573 := proc130(28);
- call {:si_unique_call 1622} nVar1574 := proc130(28);
- call {:si_unique_call 1623} nVar1575 := proc130(28);
- call {:si_unique_call 1624} nVar1576 := proc130(28);
- call {:si_unique_call 1625} nVar1577 := proc130(28);
- call {:si_unique_call 1626} nVar1578 := proc130(28);
- call {:si_unique_call 1627} nVar1579 := proc130(28);
- call {:si_unique_call 1628} nVar1580 := proc130(28);
- call {:si_unique_call 1629} nVar1581 := proc130(28);
- call {:si_unique_call 1630} nVar1582 := proc130(28);
- call {:si_unique_call 1631} nVar1583 := proc130(16);
- call {:si_unique_call 1632} nVar1584 := proc130(4);
- call {:si_unique_call 1633} nVar1585 := proc130(12);
- call {:si_unique_call 1634} nVar1586 := proc130(28);
- call {:si_unique_call 1635} nVar1587 := proc130(28);
- call {:si_unique_call 1636} nVar1588 := proc130(28);
- call {:si_unique_call 1637} nVar1589 := proc130(16);
- call {:si_unique_call 1638} nVar1590 := proc130(28);
- call {:si_unique_call 1639} nVar1591 := proc130(28);
- call {:si_unique_call 1640} nVar1592 := proc130(16);
- call {:si_unique_call 1641} nVar1593 := proc130(28);
- call {:si_unique_call 1642} nVar1594 := proc130(28);
- call {:si_unique_call 1643} nVar1595 := proc130(28);
- call {:si_unique_call 1644} nVar1596 := proc130(12);
- call {:si_unique_call 1645} nVar1597 := proc130(28);
- call {:si_unique_call 1646} nVar1598 := proc130(28);
- call {:si_unique_call 1647} nVar1599 := proc130(28);
- call {:si_unique_call 1648} nVar1600 := proc130(4);
- call {:si_unique_call 1649} nVar1601 := proc130(28);
- call {:si_unique_call 1650} nVar1602 := proc130(28);
- call {:si_unique_call 1651} nVar1603 := proc130(28);
- call {:si_unique_call 1652} nVar1604 := proc130(28);
- call {:si_unique_call 1653} nVar1605 := proc130(24);
- call {:si_unique_call 1654} nVar1606 := proc130(28);
- call {:si_unique_call 1655} nVar1607 := proc130(28);
- call {:si_unique_call 1656} nVar1608 := proc130(28);
- call {:si_unique_call 1657} nVar1609 := proc130(28);
- call {:si_unique_call 1658} nVar1610 := proc130(12);
- call {:si_unique_call 1659} nVar1611 := proc130(28);
- call {:si_unique_call 1660} nVar1612 := proc130(28);
- call {:si_unique_call 1661} nVar1613 := proc130(16);
- call {:si_unique_call 1662} nVar1614 := proc130(28);
- call {:si_unique_call 1663} nVar1615 := proc130(28);
- call {:si_unique_call 1664} nVar1616 := proc130(28);
- call {:si_unique_call 1665} nVar1617 := proc130(28);
- call {:si_unique_call 1666} nVar1618 := proc130(28);
- call {:si_unique_call 1667} nVar1619 := proc130(28);
- call {:si_unique_call 1668} nVar1620 := proc130(28);
- call {:si_unique_call 1669} nVar1621 := proc130(28);
- call {:si_unique_call 1670} nVar1622 := proc130(28);
- call {:si_unique_call 1671} nVar1623 := proc130(28);
- call {:si_unique_call 1672} nVar1624 := proc130(28);
- call {:si_unique_call 1673} nVar1625 := proc130(28);
- call {:si_unique_call 1674} nVar1626 := proc130(28);
- call {:si_unique_call 1675} nVar1627 := proc130(28);
- call {:si_unique_call 1676} nVar1628 := proc130(28);
- call {:si_unique_call 1677} nVar1629 := proc130(12);
- call {:si_unique_call 1678} nVar1630 := proc130(12);
- call {:si_unique_call 1679} nVar1631 := proc130(16);
- call {:si_unique_call 1680} nVar1632 := proc130(16);
- call {:si_unique_call 1681} nVar1633 := proc130(28);
- call {:si_unique_call 1682} nVar1634 := proc130(28);
- call {:si_unique_call 1683} nVar1635 := proc130(28);
- call {:si_unique_call 1684} nVar1636 := proc130(28);
- call {:si_unique_call 1685} nVar1637 := proc130(28);
- call {:si_unique_call 1686} nVar1638 := proc130(4);
- call {:si_unique_call 1687} nVar1639 := proc130(28);
- call {:si_unique_call 1688} nVar1640 := proc130(28);
- call {:si_unique_call 1689} nVar1641 := proc130(16);
- call {:si_unique_call 1690} nVar1642 := proc130(28);
- call {:si_unique_call 1691} nVar1643 := proc130(28);
- call {:si_unique_call 1692} nVar1644 := proc130(28);
- call {:si_unique_call 1693} nVar1645 := proc130(16);
- call {:si_unique_call 1694} nVar1646 := proc130(28);
- call {:si_unique_call 1695} nVar1647 := proc130(28);
- call {:si_unique_call 1696} nVar1648 := proc130(28);
- call {:si_unique_call 1697} nVar1649 := proc130(28);
- call {:si_unique_call 1698} nVar1650 := proc130(28);
- call {:si_unique_call 1699} nVar1651 := proc130(28);
- call {:si_unique_call 1700} nVar1652 := proc130(28);
- call {:si_unique_call 1701} nVar1653 := proc130(28);
- call {:si_unique_call 1702} nVar1654 := proc130(28);
- call {:si_unique_call 1703} nVar1655 := proc130(28);
- call {:si_unique_call 1704} nVar1656 := proc130(28);
- call {:si_unique_call 1705} nVar1657 := proc130(28);
- call {:si_unique_call 1706} nVar1658 := proc130(28);
- call {:si_unique_call 1707} nVar1659 := proc130(28);
- call {:si_unique_call 1708} nVar1660 := proc130(28);
- call {:si_unique_call 1709} nVar1661 := proc130(28);
- call {:si_unique_call 1710} nVar1662 := proc130(28);
- call {:si_unique_call 1711} nVar1663 := proc130(28);
- call {:si_unique_call 1712} nVar1664 := proc130(16);
- call {:si_unique_call 1713} nVar1665 := proc130(4);
- call {:si_unique_call 1714} nVar1666 := proc130(4);
- call {:si_unique_call 1715} nVar1667 := proc130(28);
- call {:si_unique_call 1716} nVar4950 := proc130(8);
- call {:si_unique_call 1717} nVar1668 := proc130(28);
- call {:si_unique_call 1718} nVar1669 := proc130(28);
- call {:si_unique_call 1719} nVar1670 := proc130(28);
- call {:si_unique_call 1720} nVar1671 := proc130(28);
- call {:si_unique_call 1721} nVar1672 := proc130(28);
- call {:si_unique_call 1722} nVar1673 := proc130(28);
- call {:si_unique_call 1723} nVar1674 := proc130(28);
- call {:si_unique_call 1724} nVar1675 := proc130(28);
- call {:si_unique_call 1725} nVar1676 := proc130(56);
- call {:si_unique_call 1726} nVar1677 := proc130(28);
- call {:si_unique_call 1727} nVar1678 := proc130(16);
- call {:si_unique_call 1728} nVar1679 := proc130(28);
- call {:si_unique_call 1729} nVar1680 := proc130(28);
- call {:si_unique_call 1730} nVar1681 := proc130(28);
- call {:si_unique_call 1731} nVar1682 := proc130(28);
- call {:si_unique_call 1732} nVar1683 := proc130(28);
- call {:si_unique_call 1733} nVar1684 := proc130(28);
- call {:si_unique_call 1734} nVar1685 := proc130(4);
- call {:si_unique_call 1735} nVar1686 := proc130(28);
- call {:si_unique_call 1736} nVar1687 := proc130(28);
- call {:si_unique_call 1737} nVar1688 := proc130(28);
- call {:si_unique_call 1738} nVar1689 := proc130(28);
- call {:si_unique_call 1739} nVar1690 := proc130(16);
- call {:si_unique_call 1740} nVar1691 := proc130(28);
- call {:si_unique_call 1741} nVar1692 := proc130(28);
- call {:si_unique_call 1742} nVar1693 := proc130(28);
- call {:si_unique_call 1743} nVar1694 := proc130(28);
- call {:si_unique_call 1744} nVar1695 := proc130(28);
- call {:si_unique_call 1745} nVar1696 := proc130(28);
- call {:si_unique_call 1746} nVar4951 := proc130(16);
- call {:si_unique_call 1747} nVar1697 := proc130(28);
- call {:si_unique_call 1748} nVar1698 := proc130(28);
- call {:si_unique_call 1749} nVar1699 := proc130(28);
- call {:si_unique_call 1750} nVar1700 := proc130(4);
- call {:si_unique_call 1751} nVar1701 := proc130(28);
- call {:si_unique_call 1752} nVar1702 := proc130(28);
- call {:si_unique_call 1753} nVar1703 := proc130(16);
- call {:si_unique_call 1754} nVar1704 := proc130(28);
- call {:si_unique_call 1755} nVar1705 := proc130(28);
- call {:si_unique_call 1756} nVar1706 := proc130(28);
- call {:si_unique_call 1757} nVar1707 := proc130(28);
- call {:si_unique_call 1758} nVar1708 := proc130(28);
- call {:si_unique_call 1759} nVar1709 := proc130(28);
- call {:si_unique_call 1760} nVar1710 := proc130(28);
- call {:si_unique_call 1761} nVar1711 := proc130(12);
- call {:si_unique_call 1762} nVar1712 := proc130(12);
- call {:si_unique_call 1763} nVar1713 := proc130(28);
- call {:si_unique_call 1764} nVar1714 := proc130(28);
- call {:si_unique_call 1765} nVar1715 := proc130(16);
- call {:si_unique_call 1766} nVar1716 := proc130(24);
- call {:si_unique_call 1767} nVar1717 := proc130(28);
- call {:si_unique_call 1768} nVar1718 := proc130(8);
- call {:si_unique_call 1769} nVar1719 := proc130(28);
- call {:si_unique_call 1770} nVar1720 := proc130(28);
- call {:si_unique_call 1771} nVar1721 := proc130(28);
- call {:si_unique_call 1772} nVar1722 := proc130(28);
- call {:si_unique_call 1773} nVar1723 := proc130(28);
- call {:si_unique_call 1774} nVar1724 := proc130(28);
- call {:si_unique_call 1775} nVar1725 := proc130(28);
- call {:si_unique_call 1776} nVar1726 := proc130(28);
- call {:si_unique_call 1777} nVar1727 := proc130(28);
- call {:si_unique_call 1778} nVar1728 := proc130(28);
- call {:si_unique_call 1779} nVar1729 := proc130(24);
- call {:si_unique_call 1780} nVar1730 := proc130(28);
- call {:si_unique_call 1781} nVar1731 := proc130(28);
- call {:si_unique_call 1782} nVar1732 := proc130(28);
- call {:si_unique_call 1783} nVar1733 := proc130(28);
- call {:si_unique_call 1784} nVar1734 := proc130(28);
- call {:si_unique_call 1785} nVar1735 := proc130(28);
- call {:si_unique_call 1786} nVar1736 := proc130(28);
- call {:si_unique_call 1787} nVar1737 := proc130(28);
- call {:si_unique_call 1788} nVar1738 := proc130(28);
- call {:si_unique_call 1789} nVar1739 := proc130(28);
- call {:si_unique_call 1790} nVar1740 := proc130(28);
- call {:si_unique_call 1791} nVar1741 := proc130(28);
- call {:si_unique_call 1792} nVar1742 := proc130(28);
- call {:si_unique_call 1793} nVar1743 := proc130(28);
- call {:si_unique_call 1794} nVar1744 := proc130(28);
- call {:si_unique_call 1795} nVar1745 := proc130(28);
- call {:si_unique_call 1796} nVar1746 := proc130(28);
- call {:si_unique_call 1797} nVar1747 := proc130(28);
- call {:si_unique_call 1798} nVar1748 := proc130(28);
- call {:si_unique_call 1799} nVar1749 := proc130(28);
- call {:si_unique_call 1800} nVar1750 := proc130(28);
- call {:si_unique_call 1801} nVar1751 := proc130(28);
- call {:si_unique_call 1802} nVar1752 := proc130(28);
- call {:si_unique_call 1803} nVar1753 := proc130(28);
- call {:si_unique_call 1804} nVar1754 := proc130(28);
- call {:si_unique_call 1805} nVar1755 := proc130(28);
- call {:si_unique_call 1806} nVar1756 := proc130(56);
- call {:si_unique_call 1807} nVar1757 := proc130(28);
- call {:si_unique_call 1808} nVar1758 := proc130(28);
- call {:si_unique_call 1809} nVar1759 := proc130(28);
- call {:si_unique_call 1810} nVar1760 := proc130(28);
- call {:si_unique_call 1811} nVar1761 := proc130(28);
- call {:si_unique_call 1812} nVar1762 := proc130(28);
- call {:si_unique_call 1813} nVar1763 := proc130(28);
- call {:si_unique_call 1814} nVar4952 := proc130(16);
- call {:si_unique_call 1815} nVar1764 := proc130(28);
- call {:si_unique_call 1816} nVar1765 := proc130(28);
- call {:si_unique_call 1817} nVar1766 := proc130(28);
- call {:si_unique_call 1818} nVar1767 := proc130(28);
- call {:si_unique_call 1819} nVar1768 := proc130(28);
- call {:si_unique_call 1820} nVar1769 := proc130(28);
- call {:si_unique_call 1821} nVar1770 := proc130(16);
- call {:si_unique_call 1822} nVar1771 := proc130(28);
- call {:si_unique_call 1823} nVar1772 := proc130(28);
- call {:si_unique_call 1824} nVar1773 := proc130(28);
- call {:si_unique_call 1825} nVar1774 := proc130(28);
- call {:si_unique_call 1826} nVar1775 := proc130(28);
- call {:si_unique_call 1827} nVar1776 := proc130(28);
- call {:si_unique_call 1828} nVar1777 := proc130(4);
- call {:si_unique_call 1829} nVar1778 := proc130(28);
- call {:si_unique_call 1830} nVar1779 := proc130(4);
- call {:si_unique_call 1831} nVar1780 := proc130(28);
- call {:si_unique_call 1832} nVar1781 := proc130(28);
- call {:si_unique_call 1833} nVar1782 := proc130(28);
- call {:si_unique_call 1834} nVar1783 := proc130(28);
- call {:si_unique_call 1835} nVar1784 := proc130(28);
- call {:si_unique_call 1836} nVar1785 := proc130(28);
- call {:si_unique_call 1837} nVar1786 := proc130(4);
- call {:si_unique_call 1838} nVar1787 := proc130(28);
- call {:si_unique_call 1839} nVar1788 := proc130(28);
- call {:si_unique_call 1840} nVar1789 := proc130(4);
- call {:si_unique_call 1841} nVar1790 := proc130(16);
- call {:si_unique_call 1842} nVar1791 := proc130(28);
- call {:si_unique_call 1843} nVar1792 := proc130(28);
- call {:si_unique_call 1844} nVar1793 := proc130(12);
- call {:si_unique_call 1845} nVar1794 := proc130(28);
- call {:si_unique_call 1846} nVar1795 := proc130(28);
- call {:si_unique_call 1847} nVar1796 := proc130(12);
- call {:si_unique_call 1848} nVar1797 := proc130(28);
- call {:si_unique_call 1849} nVar1798 := proc130(28);
- call {:si_unique_call 1850} nVar1799 := proc130(28);
- call {:si_unique_call 1851} nVar1800 := proc130(28);
- call {:si_unique_call 1852} nVar1801 := proc130(24);
- call {:si_unique_call 1853} nVar1802 := proc130(4);
- call {:si_unique_call 1854} nVar1803 := proc130(24);
- call {:si_unique_call 1855} nVar1804 := proc130(28);
- call {:si_unique_call 1856} nVar1805 := proc130(28);
- call {:si_unique_call 1857} nVar1806 := proc130(28);
- call {:si_unique_call 1858} nVar1807 := proc130(12);
- call {:si_unique_call 1859} nVar1808 := proc130(28);
- call {:si_unique_call 1860} nVar1809 := proc130(28);
- call {:si_unique_call 1861} nVar1810 := proc130(28);
- call {:si_unique_call 1862} nVar1811 := proc130(24);
- call {:si_unique_call 1863} nVar1812 := proc130(28);
- call {:si_unique_call 1864} nVar1813 := proc130(28);
- call {:si_unique_call 1865} nVar1814 := proc130(28);
- call {:si_unique_call 1866} nVar1815 := proc130(12);
- call {:si_unique_call 1867} nVar1816 := proc130(4);
- call {:si_unique_call 1868} nVar1817 := proc130(28);
- call {:si_unique_call 1869} nVar1818 := proc130(28);
- call {:si_unique_call 1870} nVar1819 := proc130(28);
- call {:si_unique_call 1871} nVar1820 := proc130(28);
- call {:si_unique_call 1872} nVar1821 := proc130(16);
- call {:si_unique_call 1873} nVar1822 := proc130(28);
- call {:si_unique_call 1874} nVar1823 := proc130(28);
- call {:si_unique_call 1875} nVar1824 := proc130(24);
- call {:si_unique_call 1876} nVar1825 := proc130(28);
- call {:si_unique_call 1877} nVar1826 := proc130(28);
- call {:si_unique_call 1878} nVar1827 := proc130(28);
- call {:si_unique_call 1879} nVar1828 := proc130(28);
- call {:si_unique_call 1880} nVar1829 := proc130(28);
- call {:si_unique_call 1881} nVar1830 := proc130(16);
- call {:si_unique_call 1882} nVar1831 := proc130(28);
- call {:si_unique_call 1883} nVar1832 := proc130(24);
- call {:si_unique_call 1884} nVar1833 := proc130(24);
- call {:si_unique_call 1885} nVar1834 := proc130(28);
- call {:si_unique_call 1886} nVar1835 := proc130(28);
- call {:si_unique_call 1887} nVar1836 := proc130(28);
- call {:si_unique_call 1888} nVar1837 := proc130(28);
- call {:si_unique_call 1889} nVar1838 := proc130(16);
- call {:si_unique_call 1890} nVar1839 := proc130(28);
- call {:si_unique_call 1891} nVar1840 := proc130(28);
- call {:si_unique_call 1892} nVar1841 := proc130(4);
- call {:si_unique_call 1893} nVar1842 := proc130(28);
- call {:si_unique_call 1894} nVar1843 := proc130(28);
- call {:si_unique_call 1895} nVar1844 := proc130(28);
- call {:si_unique_call 1896} nVar1845 := proc130(12);
- call {:si_unique_call 1897} nVar1846 := proc130(12);
- call {:si_unique_call 1898} nVar1847 := proc130(28);
- call {:si_unique_call 1899} nVar1848 := proc130(28);
- call {:si_unique_call 1900} nVar1849 := proc130(28);
- call {:si_unique_call 1901} nVar1850 := proc130(28);
- call {:si_unique_call 1902} nVar1851 := proc130(28);
- call {:si_unique_call 1903} nVar1852 := proc130(12);
- call {:si_unique_call 1904} nVar1853 := proc130(4);
- call {:si_unique_call 1905} nVar1854 := proc130(28);
- call {:si_unique_call 1906} nVar1855 := proc130(28);
- call {:si_unique_call 1907} nVar1856 := proc130(28);
- call {:si_unique_call 1908} nVar1857 := proc130(28);
- call {:si_unique_call 1909} nVar1858 := proc130(28);
- call {:si_unique_call 1910} nVar1859 := proc130(28);
- call {:si_unique_call 1911} nVar1860 := proc130(28);
- call {:si_unique_call 1912} nVar1861 := proc130(28);
- call {:si_unique_call 1913} nVar1862 := proc130(28);
- call {:si_unique_call 1914} nVar1863 := proc130(28);
- call {:si_unique_call 1915} nVar1864 := proc130(28);
- call {:si_unique_call 1916} nVar1865 := proc130(28);
- call {:si_unique_call 1917} nVar1866 := proc130(28);
- call {:si_unique_call 1918} nVar1867 := proc130(28);
- call {:si_unique_call 1919} nVar1868 := proc130(28);
- call {:si_unique_call 1920} nVar1869 := proc130(28);
- call {:si_unique_call 1921} nVar1870 := proc130(28);
- call {:si_unique_call 1922} nVar1871 := proc130(4);
- call {:si_unique_call 1923} nVar1872 := proc130(24);
- call {:si_unique_call 1924} nVar1873 := proc130(28);
- call {:si_unique_call 1925} nVar1874 := proc130(12);
- call {:si_unique_call 1926} nVar1875 := proc130(28);
- call {:si_unique_call 1927} nVar1876 := proc130(28);
- call {:si_unique_call 1928} nVar1877 := proc130(28);
- call {:si_unique_call 1929} nVar1878 := proc130(28);
- call {:si_unique_call 1930} nVar1879 := proc130(28);
- call {:si_unique_call 1931} nVar1880 := proc130(12);
- call {:si_unique_call 1932} nVar1881 := proc130(28);
- call {:si_unique_call 1933} nVar1882 := proc130(28);
- call {:si_unique_call 1934} nVar1883 := proc130(28);
- call {:si_unique_call 1935} nVar1884 := proc130(24);
- call {:si_unique_call 1936} nVar1885 := proc130(28);
- call {:si_unique_call 1937} nVar1886 := proc130(28);
- call {:si_unique_call 1938} nVar1887 := proc130(28);
- call {:si_unique_call 1939} nVar1888 := proc130(28);
- call {:si_unique_call 1940} nVar1889 := proc130(28);
- call {:si_unique_call 1941} nVar1890 := proc130(28);
- call {:si_unique_call 1942} nVar1891 := proc130(28);
- call {:si_unique_call 1943} nVar1892 := proc130(28);
- call {:si_unique_call 1944} nVar1893 := proc130(28);
- call {:si_unique_call 1945} nVar1894 := proc130(28);
- call {:si_unique_call 1946} nVar1895 := proc130(16);
- call {:si_unique_call 1947} nVar1896 := proc130(4);
- call {:si_unique_call 1948} nVar1897 := proc130(12);
- call {:si_unique_call 1949} nVar1898 := proc130(28);
- call {:si_unique_call 1950} nVar1899 := proc130(28);
- call {:si_unique_call 1951} nVar1900 := proc130(28);
- call {:si_unique_call 1952} nVar1901 := proc130(28);
- call {:si_unique_call 1953} nVar1902 := proc130(28);
- call {:si_unique_call 1954} nVar1903 := proc130(28);
- call {:si_unique_call 1955} nVar1904 := proc130(16);
- call {:si_unique_call 1956} nVar1905 := proc130(28);
- call {:si_unique_call 1957} nVar1906 := proc130(28);
- call {:si_unique_call 1958} nVar1907 := proc130(28);
- call {:si_unique_call 1959} nVar1908 := proc130(28);
- call {:si_unique_call 1960} nVar1909 := proc130(8);
- call {:si_unique_call 1961} nVar1910 := proc130(28);
- call {:si_unique_call 1962} nVar1911 := proc130(28);
- call {:si_unique_call 1963} nVar4953 := proc130(16);
- call {:si_unique_call 1964} nVar1912 := proc130(28);
- call {:si_unique_call 1965} nVar1913 := proc130(28);
- call {:si_unique_call 1966} nVar1914 := proc130(28);
- call {:si_unique_call 1967} nVar1915 := proc130(28);
- call {:si_unique_call 1968} nVar1916 := proc130(28);
- call {:si_unique_call 1969} nVar1917 := proc130(28);
- call {:si_unique_call 1970} nVar1918 := proc130(28);
- call {:si_unique_call 1971} nVar1919 := proc130(28);
- call {:si_unique_call 1972} nVar1920 := proc130(28);
- call {:si_unique_call 1973} nVar1921 := proc130(28);
- call {:si_unique_call 1974} nVar1922 := proc130(4);
- call {:si_unique_call 1975} nVar1923 := proc130(24);
- call {:si_unique_call 1976} nVar1924 := proc130(4);
- call {:si_unique_call 1977} nVar1925 := proc130(28);
- call {:si_unique_call 1978} nVar1926 := proc130(28);
- call {:si_unique_call 1979} nVar1928 := proc130(28);
- call {:si_unique_call 1980} nVar1929 := proc130(28);
- call {:si_unique_call 1981} nVar1930 := proc130(28);
- call {:si_unique_call 1982} nVar1931 := proc130(28);
- call {:si_unique_call 1983} nVar1932 := proc130(28);
- call {:si_unique_call 1984} nVar1933 := proc130(24);
- call {:si_unique_call 1985} nVar1934 := proc130(28);
- call {:si_unique_call 1986} nVar1935 := proc130(28);
- call {:si_unique_call 1987} nVar1936 := proc130(28);
- call {:si_unique_call 1988} nVar1937 := proc130(28);
- call {:si_unique_call 1989} nVar1938 := proc130(16);
- call {:si_unique_call 1990} nVar1939 := proc130(28);
- call {:si_unique_call 1991} nVar1940 := proc130(28);
- call {:si_unique_call 1992} nVar1941 := proc130(28);
- call {:si_unique_call 1993} nVar1942 := proc130(28);
- call {:si_unique_call 1994} nVar1943 := proc130(28);
- call {:si_unique_call 1995} nVar4954 := proc130(16);
- call {:si_unique_call 1996} nVar1944 := proc130(16);
- call {:si_unique_call 1997} nVar1945 := proc130(28);
- call {:si_unique_call 1998} nVar1946 := proc130(24);
- call {:si_unique_call 1999} nVar1947 := proc130(28);
- call {:si_unique_call 2000} nVar1948 := proc130(28);
- call {:si_unique_call 2001} nVar1949 := proc130(28);
- call {:si_unique_call 2002} nVar1950 := proc130(12);
- call {:si_unique_call 2003} nVar1951 := proc130(28);
- call {:si_unique_call 2004} nVar1952 := proc130(28);
- call {:si_unique_call 2005} nVar1953 := proc130(28);
- call {:si_unique_call 2006} nVar1954 := proc130(28);
- call {:si_unique_call 2007} nVar1955 := proc130(28);
- call {:si_unique_call 2008} nVar1956 := proc130(28);
- call {:si_unique_call 2009} nVar1957 := proc130(28);
- call {:si_unique_call 2010} nVar1958 := proc130(28);
- call {:si_unique_call 2011} nVar1959 := proc130(4);
- call {:si_unique_call 2012} nVar1960 := proc130(28);
- call {:si_unique_call 2013} nVar1961 := proc130(28);
- call {:si_unique_call 2014} nVar1962 := proc130(28);
- call {:si_unique_call 2015} nVar1963 := proc130(28);
- call {:si_unique_call 2016} nVar1964 := proc130(28);
- call {:si_unique_call 2017} nVar1965 := proc130(28);
- call {:si_unique_call 2018} nVar1966 := proc130(28);
- call {:si_unique_call 2019} nVar1967 := proc130(28);
- call {:si_unique_call 2020} nVar1968 := proc130(28);
- call {:si_unique_call 2021} nVar1969 := proc130(16);
- call {:si_unique_call 2022} nVar1970 := proc130(28);
- call {:si_unique_call 2023} nVar1971 := proc130(28);
- call {:si_unique_call 2024} nVar1972 := proc130(28);
- call {:si_unique_call 2025} nVar1973 := proc130(28);
- call {:si_unique_call 2026} nVar1974 := proc130(28);
- call {:si_unique_call 2027} nVar1975 := proc130(28);
- call {:si_unique_call 2028} nVar1976 := proc130(28);
- call {:si_unique_call 2029} nVar1977 := proc130(28);
- call {:si_unique_call 2030} nVar1978 := proc130(28);
- call {:si_unique_call 2031} nVar1979 := proc130(28);
- call {:si_unique_call 2032} nVar1980 := proc130(28);
- call {:si_unique_call 2033} nVar1981 := proc130(16);
- call {:si_unique_call 2034} nVar1982 := proc130(28);
- call {:si_unique_call 2035} nVar1983 := proc130(28);
- call {:si_unique_call 2036} nVar1984 := proc130(28);
- call {:si_unique_call 2037} nVar1985 := proc130(24);
- call {:si_unique_call 2038} nVar1986 := proc130(28);
- call {:si_unique_call 2039} nVar1987 := proc130(28);
- call {:si_unique_call 2040} nVar1988 := proc130(12);
- call {:si_unique_call 2041} nVar1989 := proc130(28);
- call {:si_unique_call 2042} nVar1990 := proc130(12);
- call {:si_unique_call 2043} nVar1991 := proc130(28);
- call {:si_unique_call 2044} nVar1992 := proc130(28);
- call {:si_unique_call 2045} nVar1993 := proc130(28);
- call {:si_unique_call 2046} nVar1994 := proc130(12);
- call {:si_unique_call 2047} nVar1995 := proc130(28);
- call {:si_unique_call 2048} nVar1996 := proc130(28);
- call {:si_unique_call 2049} nVar1997 := proc130(12);
- call {:si_unique_call 2050} nVar1998 := proc130(28);
- call {:si_unique_call 2051} nVar1999 := proc130(28);
- call {:si_unique_call 2052} nVar2000 := proc130(28);
- call {:si_unique_call 2053} nVar2001 := proc130(28);
- call {:si_unique_call 2054} nVar2002 := proc130(16);
- call {:si_unique_call 2055} nVar2003 := proc130(28);
- call {:si_unique_call 2056} nVar2004 := proc130(28);
- call {:si_unique_call 2057} nVar2005 := proc130(28);
- call {:si_unique_call 2058} nVar2006 := proc130(28);
- call {:si_unique_call 2059} nVar2007 := proc130(28);
- call {:si_unique_call 2060} nVar2008 := proc130(28);
- call {:si_unique_call 2061} nVar2009 := proc130(28);
- call {:si_unique_call 2062} nVar2010 := proc130(28);
- call {:si_unique_call 2063} nVar2011 := proc130(28);
- call {:si_unique_call 2064} nVar2012 := proc130(28);
- call {:si_unique_call 2065} nVar2013 := proc130(28);
- call {:si_unique_call 2066} nVar2014 := proc130(28);
- call {:si_unique_call 2067} nVar2015 := proc130(28);
- call {:si_unique_call 2068} nVar2016 := proc130(28);
- call {:si_unique_call 2069} nVar2017 := proc130(28);
- call {:si_unique_call 2070} nVar2018 := proc130(28);
- call {:si_unique_call 2071} nVar2019 := proc130(28);
- call {:si_unique_call 2072} nVar2020 := proc130(28);
- call {:si_unique_call 2073} nVar2021 := proc130(28);
- call {:si_unique_call 2074} nVar2022 := proc130(28);
- call {:si_unique_call 2075} nVar2023 := proc130(28);
- call {:si_unique_call 2076} nVar2024 := proc130(28);
- call {:si_unique_call 2077} nVar2025 := proc130(16);
- call {:si_unique_call 2078} nVar2026 := proc130(28);
- call {:si_unique_call 2079} nVar2027 := proc130(28);
- call {:si_unique_call 2080} nVar2028 := proc130(28);
- call {:si_unique_call 2081} nVar2029 := proc130(28);
- call {:si_unique_call 2082} nVar2030 := proc130(28);
- call {:si_unique_call 2083} nVar2031 := proc130(28);
- call {:si_unique_call 2084} nVar2032 := proc130(28);
- call {:si_unique_call 2085} nVar2033 := proc130(28);
- call {:si_unique_call 2086} nVar2034 := proc130(28);
- call {:si_unique_call 2087} nVar2035 := proc130(28);
- call {:si_unique_call 2088} nVar2036 := proc130(16);
- call {:si_unique_call 2089} nVar2037 := proc130(28);
- call {:si_unique_call 2090} nVar2038 := proc130(28);
- call {:si_unique_call 2091} nVar2039 := proc130(28);
- call {:si_unique_call 2092} nVar2040 := proc130(28);
- call {:si_unique_call 2093} nVar2041 := proc130(28);
- call {:si_unique_call 2094} nVar2042 := proc130(28);
- call {:si_unique_call 2095} nVar2043 := proc130(28);
- call {:si_unique_call 2096} nVar2044 := proc130(28);
- call {:si_unique_call 2097} nVar2045 := proc130(28);
- call {:si_unique_call 2098} nVar2046 := proc130(28);
- call {:si_unique_call 2099} nVar2047 := proc130(28);
- call {:si_unique_call 2100} nVar2048 := proc130(28);
- call {:si_unique_call 2101} nVar2049 := proc130(28);
- call {:si_unique_call 2102} nVar2050 := proc130(28);
- call {:si_unique_call 2103} nVar2051 := proc130(28);
- call {:si_unique_call 2104} nVar2052 := proc130(24);
- call {:si_unique_call 2105} nVar2053 := proc130(28);
- call {:si_unique_call 2106} nVar2054 := proc130(28);
- call {:si_unique_call 2107} nVar2055 := proc130(24);
- call {:si_unique_call 2108} nVar2056 := proc130(28);
- call {:si_unique_call 2109} nVar2057 := proc130(28);
- call {:si_unique_call 2110} nVar2058 := proc130(28);
- call {:si_unique_call 2111} nVar2059 := proc130(28);
- call {:si_unique_call 2112} nVar2060 := proc130(28);
- call {:si_unique_call 2113} nVar2061 := proc130(28);
- call {:si_unique_call 2114} nVar2062 := proc130(28);
- call {:si_unique_call 2115} nVar2063 := proc130(28);
- call {:si_unique_call 2116} nVar2064 := proc130(28);
- call {:si_unique_call 2117} nVar2065 := proc130(4);
- call {:si_unique_call 2118} nVar2066 := proc130(28);
- call {:si_unique_call 2119} nVar2067 := proc130(28);
- call {:si_unique_call 2120} nVar2068 := proc130(28);
- call {:si_unique_call 2121} nVar2069 := proc130(28);
- call {:si_unique_call 2122} nVar2070 := proc130(28);
- call {:si_unique_call 2123} nVar2071 := proc130(28);
- call {:si_unique_call 2124} nVar2072 := proc130(28);
- call {:si_unique_call 2125} nVar2073 := proc130(28);
- call {:si_unique_call 2126} nVar2074 := proc130(28);
- call {:si_unique_call 2127} nVar2075 := proc130(12);
- call {:si_unique_call 2128} nVar2076 := proc130(12);
- call {:si_unique_call 2129} nVar2077 := proc130(28);
- call {:si_unique_call 2130} nVar4955 := proc130(16);
- call {:si_unique_call 2131} nVar2078 := proc130(28);
- call {:si_unique_call 2132} nVar2079 := proc130(12);
- call {:si_unique_call 2133} nVar2080 := proc130(16);
- call {:si_unique_call 2134} nVar2081 := proc130(28);
- call {:si_unique_call 2135} nVar2082 := proc130(28);
- call {:si_unique_call 2136} nVar2083 := proc130(28);
- call {:si_unique_call 2137} nVar2084 := proc130(28);
- call {:si_unique_call 2138} nVar2085 := proc130(28);
- call {:si_unique_call 2139} nVar2086 := proc130(28);
- call {:si_unique_call 2140} nVar2087 := proc130(28);
- call {:si_unique_call 2141} nVar2088 := proc130(28);
- call {:si_unique_call 2142} nVar2089 := proc130(28);
- call {:si_unique_call 2143} nVar2090 := proc130(28);
- call {:si_unique_call 2144} nVar2091 := proc130(28);
- call {:si_unique_call 2145} nVar2092 := proc130(28);
- call {:si_unique_call 2146} nVar2093 := proc130(24);
- call {:si_unique_call 2147} nVar2094 := proc130(28);
- call {:si_unique_call 2148} nVar2095 := proc130(4);
- call {:si_unique_call 2149} nVar2096 := proc130(28);
- call {:si_unique_call 2150} nVar2097 := proc130(28);
- call {:si_unique_call 2151} nVar2098 := proc130(28);
- call {:si_unique_call 2152} nVar2099 := proc130(28);
- call {:si_unique_call 2153} nVar2100 := proc130(28);
- call {:si_unique_call 2154} nVar2101 := proc130(12);
- call {:si_unique_call 2155} nVar2102 := proc130(4);
- call {:si_unique_call 2156} nVar2104 := proc130(28);
- call {:si_unique_call 2157} nVar2105 := proc130(28);
- call {:si_unique_call 2158} nVar2106 := proc130(28);
- call {:si_unique_call 2159} nVar2107 := proc130(28);
- call {:si_unique_call 2160} nVar2108 := proc130(28);
- call {:si_unique_call 2161} nVar2109 := proc130(12);
- call {:si_unique_call 2162} nVar2110 := proc130(28);
- call {:si_unique_call 2163} nVar2111 := proc130(24);
- call {:si_unique_call 2164} nVar2112 := proc130(4);
- call {:si_unique_call 2165} nVar2113 := proc130(28);
- call {:si_unique_call 2166} nVar2114 := proc130(28);
- call {:si_unique_call 2167} nVar2115 := proc130(28);
- call {:si_unique_call 2168} nVar2116 := proc130(28);
- call {:si_unique_call 2169} nVar2117 := proc130(12);
- call {:si_unique_call 2170} nVar2118 := proc130(28);
- call {:si_unique_call 2171} nVar2119 := proc130(28);
- call {:si_unique_call 2172} nVar2120 := proc130(4);
- call {:si_unique_call 2173} nVar2121 := proc130(28);
- call {:si_unique_call 2174} nVar2122 := proc130(28);
- call {:si_unique_call 2175} nVar2123 := proc130(28);
- call {:si_unique_call 2176} nVar2124 := proc130(28);
- call {:si_unique_call 2177} nVar2125 := proc130(16);
- call {:si_unique_call 2178} nVar2126 := proc130(28);
- call {:si_unique_call 2179} nVar2127 := proc130(28);
- call {:si_unique_call 2180} nVar2128 := proc130(28);
- call {:si_unique_call 2181} nVar2129 := proc130(28);
- call {:si_unique_call 2182} nVar2130 := proc130(28);
- call {:si_unique_call 2183} nVar2131 := proc130(28);
- call {:si_unique_call 2184} nVar2132 := proc130(28);
- call {:si_unique_call 2185} nVar2133 := proc130(28);
- call {:si_unique_call 2186} nVar2134 := proc130(28);
- call {:si_unique_call 2187} nVar2135 := proc130(4);
- call {:si_unique_call 2188} nVar2136 := proc130(28);
- call {:si_unique_call 2189} nVar2137 := proc130(4);
- call {:si_unique_call 2190} nVar2138 := proc130(28);
- call {:si_unique_call 2191} nVar2139 := proc130(28);
- call {:si_unique_call 2192} nVar2140 := proc130(28);
- call {:si_unique_call 2193} nVar2141 := proc130(28);
- call {:si_unique_call 2194} nVar2142 := proc130(28);
- call {:si_unique_call 2195} nVar2143 := proc130(28);
- call {:si_unique_call 2196} nVar2144 := proc130(28);
- call {:si_unique_call 2197} nVar2145 := proc130(28);
- call {:si_unique_call 2198} nVar2146 := proc130(28);
- call {:si_unique_call 2199} nVar2147 := proc130(28);
- call {:si_unique_call 2200} nVar2148 := proc130(4);
- call {:si_unique_call 2201} nVar2149 := proc130(28);
- call {:si_unique_call 2202} nVar2150 := proc130(28);
- call {:si_unique_call 2203} nVar2151 := proc130(28);
- call {:si_unique_call 2204} nVar2152 := proc130(12);
- call {:si_unique_call 2205} nVar2153 := proc130(28);
- call {:si_unique_call 2206} nVar2154 := proc130(28);
- call {:si_unique_call 2207} nVar2155 := proc130(4);
- call {:si_unique_call 2208} nVar2156 := proc130(28);
- call {:si_unique_call 2209} nVar2157 := proc130(28);
- call {:si_unique_call 2210} nVar2158 := proc130(28);
- call {:si_unique_call 2211} nVar2159 := proc130(28);
- call {:si_unique_call 2212} nVar2160 := proc130(28);
- call {:si_unique_call 2213} nVar2161 := proc130(28);
- call {:si_unique_call 2214} nVar2162 := proc130(28);
- call {:si_unique_call 2215} nVar2163 := proc130(28);
- call {:si_unique_call 2216} nVar2164 := proc130(28);
- call {:si_unique_call 2217} nVar2165 := proc130(28);
- call {:si_unique_call 2218} nVar2166 := proc130(28);
- call {:si_unique_call 2219} nVar2167 := proc130(28);
- call {:si_unique_call 2220} nVar2168 := proc130(28);
- call {:si_unique_call 2221} nVar2169 := proc130(16);
- call {:si_unique_call 2222} nVar2170 := proc130(28);
- call {:si_unique_call 2223} nVar2171 := proc130(12);
- call {:si_unique_call 2224} nVar2172 := proc130(28);
- call {:si_unique_call 2225} nVar2173 := proc130(28);
- call {:si_unique_call 2226} nVar2174 := proc130(16);
- call {:si_unique_call 2227} nVar2175 := proc130(28);
- call {:si_unique_call 2228} nVar2176 := proc130(28);
- call {:si_unique_call 2229} nVar2177 := proc130(28);
- call {:si_unique_call 2230} nVar2178 := proc130(28);
- call {:si_unique_call 2231} nVar2180 := proc130(4);
- call {:si_unique_call 2232} nVar2181 := proc130(24);
- call {:si_unique_call 2233} nVar2182 := proc130(28);
- call {:si_unique_call 2234} nVar2183 := proc130(28);
- call {:si_unique_call 2235} nVar2184 := proc130(28);
- call {:si_unique_call 2236} nVar2185 := proc130(28);
- call {:si_unique_call 2237} nVar2186 := proc130(28);
- call {:si_unique_call 2238} nVar2187 := proc130(28);
- call {:si_unique_call 2239} nVar2188 := proc130(28);
- call {:si_unique_call 2240} nVar2189 := proc130(24);
- call {:si_unique_call 2241} nVar2190 := proc130(28);
- call {:si_unique_call 2242} nVar2191 := proc130(28);
- call {:si_unique_call 2243} nVar2192 := proc130(28);
- call {:si_unique_call 2244} nVar2193 := proc130(12);
- call {:si_unique_call 2245} nVar2194 := proc130(28);
- call {:si_unique_call 2246} nVar2195 := proc130(28);
- call {:si_unique_call 2247} nVar2196 := proc130(28);
- call {:si_unique_call 2248} nVar2197 := proc130(28);
- call {:si_unique_call 2249} nVar2198 := proc130(28);
- call {:si_unique_call 2250} nVar2199 := proc130(28);
- call {:si_unique_call 2251} nVar2200 := proc130(28);
- call {:si_unique_call 2252} nVar2201 := proc130(12);
- call {:si_unique_call 2253} nVar2202 := proc130(28);
- call {:si_unique_call 2254} nVar2203 := proc130(24);
- call {:si_unique_call 2255} nVar2204 := proc130(4);
- call {:si_unique_call 2256} nVar2205 := proc130(4);
- call {:si_unique_call 2257} nVar2206 := proc130(28);
- call {:si_unique_call 2258} nVar2207 := proc130(28);
- call {:si_unique_call 2259} nVar2208 := proc130(4);
- call {:si_unique_call 2260} nVar2209 := proc130(28);
- call {:si_unique_call 2261} nVar2210 := proc130(4);
- call {:si_unique_call 2262} nVar2211 := proc130(28);
- call {:si_unique_call 2263} nVar2212 := proc130(28);
- call {:si_unique_call 2264} nVar2213 := proc130(28);
- call {:si_unique_call 2265} nVar2214 := proc130(28);
- call {:si_unique_call 2266} nVar2215 := proc130(28);
- call {:si_unique_call 2267} nVar2216 := proc130(28);
- call {:si_unique_call 2268} nVar2217 := proc130(28);
- call {:si_unique_call 2269} nVar2218 := proc130(28);
- call {:si_unique_call 2270} nVar2219 := proc130(28);
- call {:si_unique_call 2271} nVar2220 := proc130(28);
- call {:si_unique_call 2272} nVar2221 := proc130(28);
- call {:si_unique_call 2273} nVar2222 := proc130(28);
- call {:si_unique_call 2274} nVar2223 := proc130(28);
- call {:si_unique_call 2275} nVar2224 := proc130(28);
- call {:si_unique_call 2276} nVar2225 := proc130(28);
- call {:si_unique_call 2277} nVar2226 := proc130(16);
- call {:si_unique_call 2278} nVar2227 := proc130(28);
- call {:si_unique_call 2279} nVar2228 := proc130(28);
- call {:si_unique_call 2280} nVar2229 := proc130(28);
- call {:si_unique_call 2281} nVar2230 := proc130(28);
- call {:si_unique_call 2282} nVar2231 := proc130(28);
- call {:si_unique_call 2283} nVar2232 := proc130(28);
- call {:si_unique_call 2284} nVar2233 := proc130(28);
- call {:si_unique_call 2285} nVar2234 := proc130(24);
- call {:si_unique_call 2286} nVar2235 := proc130(4);
- call {:si_unique_call 2287} nVar2236 := proc130(28);
- call {:si_unique_call 2288} nVar2237 := proc130(28);
- call {:si_unique_call 2289} nVar2238 := proc130(28);
- call {:si_unique_call 2290} nVar2239 := proc130(28);
- call {:si_unique_call 2291} nVar2240 := proc130(16);
- call {:si_unique_call 2292} nVar2241 := proc130(28);
- call {:si_unique_call 2293} nVar2242 := proc130(12);
- call {:si_unique_call 2294} nVar2243 := proc130(28);
- call {:si_unique_call 2295} nVar2244 := proc130(28);
- call {:si_unique_call 2296} nVar2245 := proc130(28);
- call {:si_unique_call 2297} nVar2246 := proc130(4);
- call {:si_unique_call 2298} nVar2247 := proc130(28);
- call {:si_unique_call 2299} nVar2248 := proc130(28);
- call {:si_unique_call 2300} nVar2249 := proc130(24);
- call {:si_unique_call 2301} nVar2250 := proc130(28);
- call {:si_unique_call 2302} nVar2251 := proc130(4);
- call {:si_unique_call 2303} nVar2252 := proc130(12);
- call {:si_unique_call 2304} nVar2253 := proc130(28);
- call {:si_unique_call 2305} nVar2254 := proc130(28);
- call {:si_unique_call 2306} nVar2255 := proc130(28);
- call {:si_unique_call 2307} nVar2256 := proc130(28);
- call {:si_unique_call 2308} nVar2257 := proc130(28);
- call {:si_unique_call 2309} nVar2258 := proc130(28);
- call {:si_unique_call 2310} nVar2259 := proc130(12);
- call {:si_unique_call 2311} nVar2260 := proc130(28);
- call {:si_unique_call 2312} nVar2261 := proc130(28);
- call {:si_unique_call 2313} nVar2262 := proc130(28);
- call {:si_unique_call 2314} nVar2263 := proc130(28);
- call {:si_unique_call 2315} nVar2264 := proc130(28);
- call {:si_unique_call 2316} nVar2265 := proc130(28);
- call {:si_unique_call 2317} nVar2266 := proc130(28);
- call {:si_unique_call 2318} nVar2267 := proc130(28);
- call {:si_unique_call 2319} nVar2268 := proc130(28);
- call {:si_unique_call 2320} nVar2269 := proc130(28);
- call {:si_unique_call 2321} nVar2270 := proc130(28);
- call {:si_unique_call 2322} nVar2271 := proc130(28);
- call {:si_unique_call 2323} nVar2272 := proc130(28);
- call {:si_unique_call 2324} nVar2273 := proc130(28);
- call {:si_unique_call 2325} nVar2274 := proc130(28);
- call {:si_unique_call 2326} nVar2275 := proc130(28);
- call {:si_unique_call 2327} nVar2276 := proc130(4);
- call {:si_unique_call 2328} nVar2277 := proc130(28);
- call {:si_unique_call 2329} nVar2278 := proc130(28);
- call {:si_unique_call 2330} nVar2279 := proc130(28);
- call {:si_unique_call 2331} nVar2280 := proc130(28);
- call {:si_unique_call 2332} nVar2281 := proc130(28);
- call {:si_unique_call 2333} nVar2282 := proc130(12);
- call {:si_unique_call 2334} nVar2283 := proc130(28);
- call {:si_unique_call 2335} nVar2284 := proc130(28);
- call {:si_unique_call 2336} nVar2285 := proc130(28);
- call {:si_unique_call 2337} nVar2286 := proc130(28);
- call {:si_unique_call 2338} nVar2287 := proc130(28);
- call {:si_unique_call 2339} nVar2288 := proc130(28);
- call {:si_unique_call 2340} nVar2289 := proc130(28);
- call {:si_unique_call 2341} nVar2290 := proc130(28);
- call {:si_unique_call 2342} nVar2291 := proc130(28);
- call {:si_unique_call 2343} nVar2292 := proc130(28);
- call {:si_unique_call 2344} nVar2293 := proc130(28);
- call {:si_unique_call 2345} nVar2294 := proc130(12);
- call {:si_unique_call 2346} nVar2295 := proc130(28);
- call {:si_unique_call 2347} nVar2296 := proc130(28);
- call {:si_unique_call 2348} nVar2297 := proc130(28);
- call {:si_unique_call 2349} nVar2298 := proc130(28);
- call {:si_unique_call 2350} nVar2299 := proc130(28);
- call {:si_unique_call 2351} nVar2300 := proc130(28);
- call {:si_unique_call 2352} nVar2301 := proc130(28);
- call {:si_unique_call 2353} nVar2302 := proc130(28);
- call {:si_unique_call 2354} nVar2303 := proc130(28);
- call {:si_unique_call 2355} nVar2304 := proc130(28);
- call {:si_unique_call 2356} nVar2305 := proc130(12);
- call {:si_unique_call 2357} nVar2306 := proc130(4);
- call {:si_unique_call 2358} nVar2307 := proc130(28);
- call {:si_unique_call 2359} nVar2308 := proc130(28);
- call {:si_unique_call 2360} nVar2309 := proc130(28);
- call {:si_unique_call 2361} nVar2310 := proc130(28);
- call {:si_unique_call 2362} nVar2311 := proc130(28);
- call {:si_unique_call 2363} nVar2312 := proc130(28);
- call {:si_unique_call 2364} nVar2313 := proc130(28);
- call {:si_unique_call 2365} nVar2314 := proc130(28);
- call {:si_unique_call 2366} nVar2315 := proc130(28);
- call {:si_unique_call 2367} nVar2316 := proc130(28);
- call {:si_unique_call 2368} nVar2317 := proc130(12);
- call {:si_unique_call 2369} nVar2318 := proc130(28);
- call {:si_unique_call 2370} nVar2319 := proc130(28);
- call {:si_unique_call 2371} nVar2320 := proc130(28);
- call {:si_unique_call 2372} nVar2321 := proc130(28);
- call {:si_unique_call 2373} nVar2322 := proc130(28);
- call {:si_unique_call 2374} nVar2323 := proc130(4);
- call {:si_unique_call 2375} nVar2324 := proc130(28);
- call {:si_unique_call 2376} nVar2325 := proc130(28);
- call {:si_unique_call 2377} nVar2326 := proc130(24);
- call {:si_unique_call 2378} nVar2327 := proc130(28);
- call {:si_unique_call 2379} nVar2328 := proc130(28);
- call {:si_unique_call 2380} nVar2329 := proc130(28);
- call {:si_unique_call 2381} nVar2330 := proc130(28);
- call {:si_unique_call 2382} nVar2331 := proc130(28);
- call {:si_unique_call 2383} nVar2332 := proc130(16);
- call {:si_unique_call 2384} nVar2333 := proc130(28);
- call {:si_unique_call 2385} nVar2334 := proc130(12);
- call {:si_unique_call 2386} nVar2335 := proc130(28);
- call {:si_unique_call 2387} nVar2336 := proc130(28);
- call {:si_unique_call 2388} nVar2337 := proc130(28);
- call {:si_unique_call 2389} nVar2338 := proc130(28);
- call {:si_unique_call 2390} nVar2339 := proc130(28);
- call {:si_unique_call 2391} nVar2340 := proc130(12);
- call {:si_unique_call 2392} nVar2341 := proc130(28);
- call {:si_unique_call 2393} nVar2342 := proc130(28);
- call {:si_unique_call 2394} nVar2343 := proc130(28);
- call {:si_unique_call 2395} nVar2344 := proc130(28);
- call {:si_unique_call 2396} nVar2345 := proc130(28);
- call {:si_unique_call 2397} nVar2346 := proc130(16);
- call {:si_unique_call 2398} nVar2347 := proc130(28);
- call {:si_unique_call 2399} nVar2348 := proc130(24);
- call {:si_unique_call 2400} nVar2349 := proc130(28);
- call {:si_unique_call 2401} nVar2350 := proc130(28);
- call {:si_unique_call 2402} nVar2351 := proc130(28);
- call {:si_unique_call 2403} nVar2352 := proc130(28);
- call {:si_unique_call 2404} nVar2353 := proc130(16);
- call {:si_unique_call 2405} nVar2354 := proc130(28);
- call {:si_unique_call 2406} nVar2355 := proc130(28);
- call {:si_unique_call 2407} nVar2356 := proc130(28);
- call {:si_unique_call 2408} nVar2357 := proc130(28);
- call {:si_unique_call 2409} nVar2358 := proc130(28);
- call {:si_unique_call 2410} nVar2359 := proc130(28);
- call {:si_unique_call 2411} nVar2360 := proc130(28);
- call {:si_unique_call 2412} nVar2361 := proc130(28);
- call {:si_unique_call 2413} nVar2362 := proc130(28);
- call {:si_unique_call 2414} nVar2363 := proc130(28);
- call {:si_unique_call 2415} nVar2364 := proc130(28);
- call {:si_unique_call 2416} nVar2365 := proc130(16);
- call {:si_unique_call 2417} nVar2366 := proc130(28);
- call {:si_unique_call 2418} nVar2367 := proc130(28);
- call {:si_unique_call 2419} nVar2368 := proc130(16);
- call {:si_unique_call 2420} nVar2369 := proc130(28);
- call {:si_unique_call 2421} nVar2370 := proc130(28);
- call {:si_unique_call 2422} nVar2371 := proc130(28);
- call {:si_unique_call 2423} nVar2372 := proc130(28);
- call {:si_unique_call 2424} nVar2373 := proc130(28);
- call {:si_unique_call 2425} nVar2374 := proc130(12);
- call {:si_unique_call 2426} nVar2375 := proc130(28);
- call {:si_unique_call 2427} nVar2376 := proc130(28);
- call {:si_unique_call 2428} nVar2377 := proc130(28);
- call {:si_unique_call 2429} nVar2378 := proc130(28);
- call {:si_unique_call 2430} nVar2379 := proc130(28);
- call {:si_unique_call 2431} nVar2380 := proc130(28);
- call {:si_unique_call 2432} nVar2381 := proc130(28);
- call {:si_unique_call 2433} nVar2382 := proc130(28);
- call {:si_unique_call 2434} nVar2383 := proc130(28);
- call {:si_unique_call 2435} nVar2384 := proc130(28);
- call {:si_unique_call 2436} nVar2385 := proc130(28);
- call {:si_unique_call 2437} nVar2386 := proc130(12);
- call {:si_unique_call 2438} nVar2387 := proc130(28);
- call {:si_unique_call 2439} nVar2388 := proc130(28);
- call {:si_unique_call 2440} nVar2389 := proc130(28);
- call {:si_unique_call 2441} nVar2390 := proc130(28);
- call {:si_unique_call 2442} nVar2391 := proc130(28);
- call {:si_unique_call 2443} nVar2392 := proc130(28);
- call {:si_unique_call 2444} nVar2393 := proc130(28);
- call {:si_unique_call 2445} nVar2394 := proc130(28);
- call {:si_unique_call 2446} nVar2395 := proc130(28);
- call {:si_unique_call 2447} nVar2396 := proc130(28);
- call {:si_unique_call 2448} nVar2397 := proc130(28);
- call {:si_unique_call 2449} nVar2398 := proc130(28);
- call {:si_unique_call 2450} nVar2399 := proc130(28);
- call {:si_unique_call 2451} nVar2400 := proc130(4);
- call {:si_unique_call 2452} nVar2401 := proc130(28);
- call {:si_unique_call 2453} nVar2402 := proc130(12);
- call {:si_unique_call 2454} nVar2403 := proc130(28);
- call {:si_unique_call 2455} nVar2404 := proc130(28);
- call {:si_unique_call 2456} nVar2405 := proc130(28);
- call {:si_unique_call 2457} nVar2406 := proc130(28);
- call {:si_unique_call 2458} nVar2407 := proc130(12);
- call {:si_unique_call 2459} nVar2408 := proc130(28);
- call {:si_unique_call 2460} nVar2409 := proc130(28);
- call {:si_unique_call 2461} nVar2410 := proc130(28);
- call {:si_unique_call 2462} nVar2411 := proc130(4);
- call {:si_unique_call 2463} nVar2412 := proc130(28);
- call {:si_unique_call 2464} nVar2413 := proc130(28);
- call {:si_unique_call 2465} nVar2414 := proc130(28);
- call {:si_unique_call 2466} nVar2415 := proc130(28);
- call {:si_unique_call 2467} nVar2416 := proc130(28);
- call {:si_unique_call 2468} nVar2417 := proc130(28);
- call {:si_unique_call 2469} nVar2418 := proc130(28);
- call {:si_unique_call 2470} nVar2419 := proc130(28);
- call {:si_unique_call 2471} nVar2420 := proc130(28);
- call {:si_unique_call 2472} nVar2421 := proc130(28);
- call {:si_unique_call 2473} nVar2422 := proc130(24);
- call {:si_unique_call 2474} nVar2423 := proc130(28);
- call {:si_unique_call 2475} nVar2424 := proc130(28);
- call {:si_unique_call 2476} nVar2425 := proc130(28);
- call {:si_unique_call 2477} nVar2426 := proc130(28);
- call {:si_unique_call 2478} nVar2427 := proc130(28);
- call {:si_unique_call 2479} nVar2428 := proc130(28);
- call {:si_unique_call 2480} nVar2429 := proc130(4);
- call {:si_unique_call 2481} nVar2430 := proc130(28);
- call {:si_unique_call 2482} nVar2431 := proc130(28);
- call {:si_unique_call 2483} nVar2432 := proc130(28);
- call {:si_unique_call 2484} nVar2433 := proc130(28);
- call {:si_unique_call 2485} nVar2434 := proc130(28);
- call {:si_unique_call 2486} nVar2435 := proc130(28);
- call {:si_unique_call 2487} nVar2436 := proc130(12);
- call {:si_unique_call 2488} nVar2437 := proc130(28);
- call {:si_unique_call 2489} nVar2438 := proc130(28);
- call {:si_unique_call 2490} nVar2439 := proc130(28);
- call {:si_unique_call 2491} nVar2440 := proc130(16);
- call {:si_unique_call 2492} nVar2441 := proc130(24);
- call {:si_unique_call 2493} nVar2442 := proc130(28);
- call {:si_unique_call 2494} nVar2443 := proc130(28);
- call {:si_unique_call 2495} nVar2444 := proc130(8);
- call {:si_unique_call 2496} nVar2445 := proc130(28);
- call {:si_unique_call 2497} nVar2446 := proc130(28);
- call {:si_unique_call 2498} nVar2447 := proc130(28);
- call {:si_unique_call 2499} nVar2448 := proc130(28);
- call {:si_unique_call 2500} nVar2449 := proc130(28);
- call {:si_unique_call 2501} nVar2450 := proc130(28);
- call {:si_unique_call 2502} nVar2451 := proc130(28);
- call {:si_unique_call 2503} nVar2452 := proc130(28);
- call {:si_unique_call 2504} nVar2453 := proc130(28);
- call {:si_unique_call 2505} nVar2454 := proc130(28);
- call {:si_unique_call 2506} nVar2455 := proc130(24);
- call {:si_unique_call 2507} nVar2456 := proc130(28);
- call {:si_unique_call 2508} nVar2457 := proc130(28);
- call {:si_unique_call 2509} nVar2458 := proc130(28);
- call {:si_unique_call 2510} nVar2459 := proc130(28);
- call {:si_unique_call 2511} nVar2460 := proc130(28);
- call {:si_unique_call 2512} nVar2461 := proc130(16);
- call {:si_unique_call 2513} nVar2462 := proc130(28);
- call {:si_unique_call 2514} nVar2463 := proc130(28);
- call {:si_unique_call 2515} nVar2464 := proc130(28);
- call {:si_unique_call 2516} nVar2465 := proc130(28);
- call {:si_unique_call 2517} nVar2466 := proc130(16);
- call {:si_unique_call 2518} nVar2467 := proc130(28);
- call {:si_unique_call 2519} nVar2468 := proc130(28);
- call {:si_unique_call 2520} nVar2469 := proc130(28);
- call {:si_unique_call 2521} nVar2470 := proc130(28);
- call {:si_unique_call 2522} nVar2471 := proc130(28);
- call {:si_unique_call 2523} nVar2472 := proc130(28);
- call {:si_unique_call 2524} nVar2473 := proc130(28);
- call {:si_unique_call 2525} nVar2474 := proc130(28);
- call {:si_unique_call 2526} nVar2475 := proc130(28);
- call {:si_unique_call 2527} nVar2476 := proc130(28);
- call {:si_unique_call 2528} nVar2477 := proc130(28);
- call {:si_unique_call 2529} nVar2478 := proc130(28);
- call {:si_unique_call 2530} nVar2479 := proc130(28);
- call {:si_unique_call 2531} nVar2480 := proc130(28);
- call {:si_unique_call 2532} nVar2481 := proc130(28);
- call {:si_unique_call 2533} nVar2482 := proc130(28);
- call {:si_unique_call 2534} nVar2483 := proc130(28);
- call {:si_unique_call 2535} nVar2484 := proc130(28);
- call {:si_unique_call 2536} nVar2485 := proc130(28);
- call {:si_unique_call 2537} nVar2486 := proc130(28);
- call {:si_unique_call 2538} nVar2487 := proc130(16);
- call {:si_unique_call 2539} nVar2488 := proc130(28);
- call {:si_unique_call 2540} nVar2489 := proc130(28);
- call {:si_unique_call 2541} nVar2490 := proc130(28);
- call {:si_unique_call 2542} nVar2491 := proc130(28);
- call {:si_unique_call 2543} nVar2492 := proc130(28);
- call {:si_unique_call 2544} nVar2493 := proc130(28);
- call {:si_unique_call 2545} nVar2494 := proc130(16);
- call {:si_unique_call 2546} nVar2495 := proc130(28);
- call {:si_unique_call 2547} nVar2496 := proc130(12);
- call {:si_unique_call 2548} nVar2497 := proc130(28);
- call {:si_unique_call 2549} nVar2498 := proc130(28);
- call {:si_unique_call 2550} nVar2499 := proc130(28);
- call {:si_unique_call 2551} nVar2500 := proc130(28);
- call {:si_unique_call 2552} nVar2501 := proc130(12);
- call {:si_unique_call 2553} nVar2502 := proc130(28);
- call {:si_unique_call 2554} nVar2503 := proc130(28);
- call {:si_unique_call 2555} nVar2504 := proc130(28);
- call {:si_unique_call 2556} nVar2505 := proc130(28);
- call {:si_unique_call 2557} nVar2506 := proc130(28);
- call {:si_unique_call 2558} nVar2507 := proc130(4);
- call {:si_unique_call 2559} nVar2508 := proc130(28);
- call {:si_unique_call 2560} nVar2509 := proc130(28);
- call {:si_unique_call 2561} nVar2510 := proc130(28);
- call {:si_unique_call 2562} nVar2511 := proc130(28);
- call {:si_unique_call 2563} nVar2512 := proc130(28);
- call {:si_unique_call 2564} nVar2513 := proc130(28);
- call {:si_unique_call 2565} nVar2514 := proc130(28);
- call {:si_unique_call 2566} nVar2515 := proc130(28);
- call {:si_unique_call 2567} nVar2516 := proc130(28);
- call {:si_unique_call 2568} nVar2517 := proc130(28);
- call {:si_unique_call 2569} nVar2518 := proc130(28);
- call {:si_unique_call 2570} nVar2519 := proc130(4);
- call {:si_unique_call 2571} nVar2520 := proc130(28);
- call {:si_unique_call 2572} nVar2521 := proc130(28);
- call {:si_unique_call 2573} nVar2522 := proc130(4);
- call {:si_unique_call 2574} nVar2523 := proc130(28);
- call {:si_unique_call 2575} nVar2524 := proc130(16);
- call {:si_unique_call 2576} nVar2525 := proc130(28);
- call {:si_unique_call 2577} nVar2526 := proc130(28);
- call {:si_unique_call 2578} nVar2527 := proc130(28);
- call {:si_unique_call 2579} nVar2528 := proc130(28);
- call {:si_unique_call 2580} nVar2529 := proc130(28);
- call {:si_unique_call 2581} nVar2530 := proc130(28);
- call {:si_unique_call 2582} nVar2531 := proc130(28);
- call {:si_unique_call 2583} nVar2532 := proc130(28);
- call {:si_unique_call 2584} nVar2533 := proc130(28);
- call {:si_unique_call 2585} nVar2534 := proc130(28);
- call {:si_unique_call 2586} nVar2535 := proc130(12);
- call {:si_unique_call 2587} nVar2536 := proc130(28);
- call {:si_unique_call 2588} nVar2537 := proc130(28);
- call {:si_unique_call 2589} nVar2538 := proc130(28);
- call {:si_unique_call 2590} nVar2539 := proc130(28);
- call {:si_unique_call 2591} nVar2540 := proc130(28);
- call {:si_unique_call 2592} nVar2541 := proc130(28);
- call {:si_unique_call 2593} nVar2542 := proc130(28);
- call {:si_unique_call 2594} nVar2543 := proc130(28);
- call {:si_unique_call 2595} nVar2544 := proc130(24);
- call {:si_unique_call 2596} nVar2545 := proc130(24);
- call {:si_unique_call 2597} nVar2546 := proc130(28);
- call {:si_unique_call 2598} nVar2547 := proc130(28);
- call {:si_unique_call 2599} nVar2548 := proc130(28);
- call {:si_unique_call 2600} nVar2549 := proc130(28);
- call {:si_unique_call 2601} nVar2550 := proc130(28);
- call {:si_unique_call 2602} nVar2551 := proc130(28);
- call {:si_unique_call 2603} nVar2552 := proc130(28);
- call {:si_unique_call 2604} nVar2553 := proc130(28);
- call {:si_unique_call 2605} nVar2554 := proc130(28);
- call {:si_unique_call 2606} nVar2555 := proc130(28);
- call {:si_unique_call 2607} nVar2556 := proc130(28);
- call {:si_unique_call 2608} nVar2557 := proc130(28);
- call {:si_unique_call 2609} nVar2558 := proc130(28);
- call {:si_unique_call 2610} nVar2559 := proc130(28);
- call {:si_unique_call 2611} nVar2560 := proc130(28);
- call {:si_unique_call 2612} nVar2561 := proc130(28);
- call {:si_unique_call 2613} nVar2562 := proc130(28);
- call {:si_unique_call 2614} nVar2563 := proc130(28);
- call {:si_unique_call 2615} nVar2564 := proc130(28);
- call {:si_unique_call 2616} nVar2565 := proc130(28);
- call {:si_unique_call 2617} nVar2566 := proc130(28);
- call {:si_unique_call 2618} nVar2567 := proc130(28);
- call {:si_unique_call 2619} nVar2568 := proc130(28);
- call {:si_unique_call 2620} nVar2569 := proc130(28);
- call {:si_unique_call 2621} nVar2570 := proc130(28);
- call {:si_unique_call 2622} nVar2571 := proc130(28);
- call {:si_unique_call 2623} nVar2572 := proc130(28);
- call {:si_unique_call 2624} nVar2573 := proc130(16);
- call {:si_unique_call 2625} nVar2574 := proc130(28);
- call {:si_unique_call 2626} nVar2575 := proc130(28);
- call {:si_unique_call 2627} nVar2576 := proc130(28);
- call {:si_unique_call 2628} nVar2577 := proc130(16);
- call {:si_unique_call 2629} nVar2578 := proc130(8);
- call {:si_unique_call 2630} nVar2579 := proc130(28);
- call {:si_unique_call 2631} nVar2580 := proc130(28);
- call {:si_unique_call 2632} nVar2581 := proc130(28);
- call {:si_unique_call 2633} nVar2582 := proc130(28);
- call {:si_unique_call 2634} nVar2583 := proc130(28);
- call {:si_unique_call 2635} nVar2584 := proc130(28);
- call {:si_unique_call 2636} nVar2585 := proc130(28);
- call {:si_unique_call 2637} nVar2586 := proc130(28);
- call {:si_unique_call 2638} nVar2587 := proc130(28);
- call {:si_unique_call 2639} nVar2588 := proc130(28);
- call {:si_unique_call 2640} nVar2589 := proc130(28);
- call {:si_unique_call 2641} nVar2590 := proc130(28);
- call {:si_unique_call 2642} nVar2591 := proc130(28);
- call {:si_unique_call 2643} nVar2592 := proc130(28);
- call {:si_unique_call 2644} nVar2593 := proc130(28);
- call {:si_unique_call 2645} nVar2594 := proc130(8);
- call {:si_unique_call 2646} nVar2595 := proc130(28);
- call {:si_unique_call 2647} nVar2596 := proc130(28);
- call {:si_unique_call 2648} nVar2597 := proc130(16);
- call {:si_unique_call 2649} nVar2598 := proc130(28);
- call {:si_unique_call 2650} nVar2599 := proc130(12);
- call {:si_unique_call 2651} nVar2600 := proc130(28);
- call {:si_unique_call 2652} nVar2601 := proc130(28);
- call {:si_unique_call 2653} nVar2602 := proc130(28);
- call {:si_unique_call 2654} nVar2603 := proc130(28);
- call {:si_unique_call 2655} nVar2604 := proc130(28);
- call {:si_unique_call 2656} nVar2605 := proc130(28);
- call {:si_unique_call 2657} nVar2606 := proc130(28);
- call {:si_unique_call 2658} nVar2607 := proc130(28);
- call {:si_unique_call 2659} nVar2608 := proc130(28);
- call {:si_unique_call 2660} nVar2609 := proc130(16);
- call {:si_unique_call 2661} nVar2610 := proc130(28);
- call {:si_unique_call 2662} nVar2611 := proc130(28);
- call {:si_unique_call 2663} nVar2612 := proc130(28);
- call {:si_unique_call 2664} nVar2613 := proc130(28);
- call {:si_unique_call 2665} nVar2614 := proc130(12);
- call {:si_unique_call 2666} nVar2615 := proc130(28);
- call {:si_unique_call 2667} nVar2616 := proc130(28);
- call {:si_unique_call 2668} nVar2617 := proc130(12);
- call {:si_unique_call 2669} nVar2618 := proc130(28);
- call {:si_unique_call 2670} nVar2619 := proc130(28);
- call {:si_unique_call 2671} nVar2620 := proc130(28);
- call {:si_unique_call 2672} nVar2622 := proc130(28);
- call {:si_unique_call 2673} nVar2623 := proc130(28);
- call {:si_unique_call 2674} nVar2624 := proc130(28);
- call {:si_unique_call 2675} nVar2625 := proc130(28);
- call {:si_unique_call 2676} nVar2626 := proc130(4);
- call {:si_unique_call 2677} nVar2627 := proc130(28);
- call {:si_unique_call 2678} nVar2628 := proc130(28);
- call {:si_unique_call 2679} nVar2629 := proc130(28);
- call {:si_unique_call 2680} nVar2630 := proc130(28);
- call {:si_unique_call 2681} nVar2631 := proc130(4);
- call {:si_unique_call 2682} nVar2633 := proc130(28);
- call {:si_unique_call 2683} nVar2634 := proc130(28);
- call {:si_unique_call 2684} nVar2635 := proc130(28);
- call {:si_unique_call 2685} nVar2636 := proc130(4);
- call {:si_unique_call 2686} nVar2637 := proc130(8);
- call {:si_unique_call 2687} nVar2638 := proc130(4);
- call {:si_unique_call 2688} nVar2639 := proc130(28);
- call {:si_unique_call 2689} nVar2640 := proc130(28);
- call {:si_unique_call 2690} nVar2641 := proc130(28);
- call {:si_unique_call 2691} nVar2642 := proc130(28);
- call {:si_unique_call 2692} nVar2643 := proc130(24);
- call {:si_unique_call 2693} nVar2644 := proc130(28);
- call {:si_unique_call 2694} nVar2645 := proc130(28);
- call {:si_unique_call 2695} nVar2646 := proc130(24);
- call {:si_unique_call 2696} nVar2647 := proc130(28);
- call {:si_unique_call 2697} nVar2648 := proc130(56);
- call {:si_unique_call 2698} nVar2649 := proc130(16);
- call {:si_unique_call 2699} nVar2650 := proc130(28);
- call {:si_unique_call 2700} nVar2651 := proc130(12);
- call {:si_unique_call 2701} nVar2652 := proc130(16);
- call {:si_unique_call 2702} nVar2653 := proc130(28);
- call {:si_unique_call 2703} nVar2654 := proc130(28);
- call {:si_unique_call 2704} nVar2655 := proc130(16);
- call {:si_unique_call 2705} nVar2656 := proc130(28);
- call {:si_unique_call 2706} nVar2657 := proc130(28);
- call {:si_unique_call 2707} nVar2658 := proc130(28);
- call {:si_unique_call 2708} nVar2659 := proc130(28);
- call {:si_unique_call 2709} nVar2660 := proc130(28);
- call {:si_unique_call 2710} nVar2661 := proc130(16);
- call {:si_unique_call 2711} nVar2662 := proc130(28);
- call {:si_unique_call 2712} nVar2663 := proc130(28);
- call {:si_unique_call 2713} nVar2664 := proc130(12);
- call {:si_unique_call 2714} nVar2665 := proc130(28);
- call {:si_unique_call 2715} nVar2666 := proc130(12);
- call {:si_unique_call 2716} nVar2667 := proc130(28);
- call {:si_unique_call 2717} nVar2668 := proc130(28);
- call {:si_unique_call 2718} nVar2669 := proc130(28);
- call {:si_unique_call 2719} nVar2670 := proc130(28);
- call {:si_unique_call 2720} nVar2671 := proc130(28);
- call {:si_unique_call 2721} nVar2672 := proc130(28);
- call {:si_unique_call 2722} nVar2673 := proc130(28);
- call {:si_unique_call 2723} nVar2674 := proc130(28);
- call {:si_unique_call 2724} nVar2675 := proc130(28);
- call {:si_unique_call 2725} nVar2676 := proc130(12);
- call {:si_unique_call 2726} nVar2677 := proc130(16);
- call {:si_unique_call 2727} nVar2678 := proc130(28);
- call {:si_unique_call 2728} nVar2679 := proc130(28);
- call {:si_unique_call 2729} nVar2680 := proc130(28);
- call {:si_unique_call 2730} nVar2681 := proc130(28);
- call {:si_unique_call 2731} nVar2682 := proc130(28);
- call {:si_unique_call 2732} nVar2683 := proc130(28);
- call {:si_unique_call 2733} nVar2684 := proc130(28);
- call {:si_unique_call 2734} nVar2685 := proc130(24);
- call {:si_unique_call 2735} nVar2686 := proc130(28);
- call {:si_unique_call 2736} nVar2687 := proc130(28);
- call {:si_unique_call 2737} nVar2688 := proc130(28);
- call {:si_unique_call 2738} nVar2689 := proc130(28);
- call {:si_unique_call 2739} nVar2690 := proc130(28);
- call {:si_unique_call 2740} nVar2691 := proc130(28);
- call {:si_unique_call 2741} nVar2692 := proc130(28);
- call {:si_unique_call 2742} nVar2693 := proc130(28);
- call {:si_unique_call 2743} nVar2694 := proc130(28);
- call {:si_unique_call 2744} nVar2695 := proc130(28);
- call {:si_unique_call 2745} nVar2696 := proc130(28);
- call {:si_unique_call 2746} nVar2697 := proc130(12);
- call {:si_unique_call 2747} nVar2698 := proc130(28);
- call {:si_unique_call 2748} nVar2699 := proc130(24);
- call {:si_unique_call 2749} nVar2700 := proc130(28);
- call {:si_unique_call 2750} nVar2701 := proc130(28);
- call {:si_unique_call 2751} nVar2702 := proc130(28);
- call {:si_unique_call 2752} nVar2703 := proc130(28);
- call {:si_unique_call 2753} nVar2704 := proc130(28);
- call {:si_unique_call 2754} nVar2705 := proc130(28);
- call {:si_unique_call 2755} nVar2706 := proc130(28);
- call {:si_unique_call 2756} nVar2707 := proc130(28);
- call {:si_unique_call 2757} nVar2708 := proc130(28);
- call {:si_unique_call 2758} nVar2709 := proc130(28);
- call {:si_unique_call 2759} nVar2710 := proc130(28);
- call {:si_unique_call 2760} nVar2711 := proc130(28);
- call {:si_unique_call 2761} nVar2712 := proc130(28);
- call {:si_unique_call 2762} nVar2713 := proc130(16);
- call {:si_unique_call 2763} nVar2714 := proc130(28);
- call {:si_unique_call 2764} nVar2715 := proc130(28);
- call {:si_unique_call 2765} nVar2716 := proc130(28);
- call {:si_unique_call 2766} nVar2717 := proc130(24);
- call {:si_unique_call 2767} nVar2718 := proc130(28);
- call {:si_unique_call 2768} nVar2719 := proc130(28);
- call {:si_unique_call 2769} nVar2720 := proc130(28);
- call {:si_unique_call 2770} nVar2721 := proc130(24);
- call {:si_unique_call 2771} nVar2722 := proc130(28);
- call {:si_unique_call 2772} nVar2723 := proc130(28);
- call {:si_unique_call 2773} nVar2724 := proc130(28);
- call {:si_unique_call 2774} nVar2725 := proc130(24);
- call {:si_unique_call 2775} nVar2726 := proc130(28);
- call {:si_unique_call 2776} nVar2727 := proc130(28);
- call {:si_unique_call 2777} nVar2728 := proc130(28);
- call {:si_unique_call 2778} nVar2729 := proc130(28);
- call {:si_unique_call 2779} nVar2730 := proc130(28);
- call {:si_unique_call 2780} nVar2731 := proc130(28);
- call {:si_unique_call 2781} nVar2732 := proc130(28);
- call {:si_unique_call 2782} nVar2733 := proc130(16);
- call {:si_unique_call 2783} nVar2734 := proc130(28);
- call {:si_unique_call 2784} nVar2735 := proc130(28);
- call {:si_unique_call 2785} nVar2736 := proc130(28);
- call {:si_unique_call 2786} nVar2737 := proc130(28);
- call {:si_unique_call 2787} nVar2738 := proc130(28);
- call {:si_unique_call 2788} nVar2739 := proc130(28);
- call {:si_unique_call 2789} nVar2740 := proc130(28);
- call {:si_unique_call 2790} nVar2741 := proc130(28);
- call {:si_unique_call 2791} nVar2742 := proc130(28);
- call {:si_unique_call 2792} nVar2743 := proc130(28);
- call {:si_unique_call 2793} nVar2744 := proc130(28);
- call {:si_unique_call 2794} nVar2745 := proc130(28);
- call {:si_unique_call 2795} nVar2746 := proc130(12);
- call {:si_unique_call 2796} nVar2747 := proc130(28);
- call {:si_unique_call 2797} nVar2748 := proc130(28);
- call {:si_unique_call 2798} nVar2749 := proc130(28);
- call {:si_unique_call 2799} nVar2750 := proc130(28);
- call {:si_unique_call 2800} nVar2751 := proc130(28);
- call {:si_unique_call 2801} nVar2752 := proc130(28);
- call {:si_unique_call 2802} nVar2753 := proc130(28);
- call {:si_unique_call 2803} nVar2755 := proc130(28);
- call {:si_unique_call 2804} nVar2756 := proc130(28);
- call {:si_unique_call 2805} nVar2757 := proc130(28);
- call {:si_unique_call 2806} nVar2758 := proc130(28);
- call {:si_unique_call 2807} nVar2759 := proc130(28);
- call {:si_unique_call 2808} nVar2760 := proc130(28);
- call {:si_unique_call 2809} nVar2761 := proc130(28);
- call {:si_unique_call 2810} nVar2762 := proc130(28);
- call {:si_unique_call 2811} nVar2763 := proc130(28);
- call {:si_unique_call 2812} nVar2764 := proc130(28);
- call {:si_unique_call 2813} nVar2765 := proc130(28);
- call {:si_unique_call 2814} nVar2766 := proc130(4);
- call {:si_unique_call 2815} nVar2767 := proc130(24);
- call {:si_unique_call 2816} nVar2768 := proc130(28);
- call {:si_unique_call 2817} nVar2769 := proc130(4);
- call {:si_unique_call 2818} nVar2770 := proc130(8);
- call {:si_unique_call 2819} nVar2771 := proc130(16);
- call {:si_unique_call 2820} nVar2772 := proc130(28);
- call {:si_unique_call 2821} nVar2773 := proc130(28);
- call {:si_unique_call 2822} nVar2774 := proc130(28);
- call {:si_unique_call 2823} nVar2775 := proc130(28);
- call {:si_unique_call 2824} nVar2776 := proc130(28);
- call {:si_unique_call 2825} nVar2777 := proc130(28);
- call {:si_unique_call 2826} nVar2778 := proc130(28);
- call {:si_unique_call 2827} nVar2779 := proc130(28);
- call {:si_unique_call 2828} nVar2780 := proc130(28);
- call {:si_unique_call 2829} nVar2781 := proc130(12);
- call {:si_unique_call 2830} nVar2782 := proc130(28);
- call {:si_unique_call 2831} nVar2783 := proc130(28);
- call {:si_unique_call 2832} nVar2784 := proc130(28);
- call {:si_unique_call 2833} nVar2785 := proc130(28);
- call {:si_unique_call 2834} nVar2786 := proc130(28);
- call {:si_unique_call 2835} nVar2787 := proc130(28);
- call {:si_unique_call 2836} nVar2788 := proc130(28);
- call {:si_unique_call 2837} nVar2789 := proc130(28);
- call {:si_unique_call 2838} nVar2790 := proc130(28);
- call {:si_unique_call 2839} nVar2791 := proc130(28);
- call {:si_unique_call 2840} nVar2792 := proc130(16);
- call {:si_unique_call 2841} nVar2793 := proc130(24);
- call {:si_unique_call 2842} nVar2794 := proc130(28);
- call {:si_unique_call 2843} nVar2795 := proc130(12);
- call {:si_unique_call 2844} nVar2796 := proc130(28);
- call {:si_unique_call 2845} nVar2797 := proc130(28);
- call {:si_unique_call 2846} nVar2798 := proc130(28);
- call {:si_unique_call 2847} nVar2799 := proc130(28);
- call {:si_unique_call 2848} nVar2800 := proc130(28);
- call {:si_unique_call 2849} nVar2801 := proc130(4);
- call {:si_unique_call 2850} nVar2802 := proc130(28);
- call {:si_unique_call 2851} nVar2803 := proc130(28);
- call {:si_unique_call 2852} nVar2804 := proc130(28);
- call {:si_unique_call 2853} nVar2805 := proc130(28);
- call {:si_unique_call 2854} nVar2806 := proc130(28);
- call {:si_unique_call 2855} nVar2807 := proc130(28);
- call {:si_unique_call 2856} nVar2808 := proc130(24);
- call {:si_unique_call 2857} nVar2809 := proc130(28);
- call {:si_unique_call 2858} nVar2810 := proc130(28);
- call {:si_unique_call 2859} nVar2811 := proc130(28);
- call {:si_unique_call 2860} nVar2812 := proc130(28);
- call {:si_unique_call 2861} nVar2813 := proc130(16);
- call {:si_unique_call 2862} nVar2814 := proc130(28);
- call {:si_unique_call 2863} nVar2815 := proc130(28);
- call {:si_unique_call 2864} nVar2816 := proc130(28);
- call {:si_unique_call 2865} nVar2817 := proc130(28);
- call {:si_unique_call 2866} nVar2818 := proc130(28);
- call {:si_unique_call 2867} nVar2819 := proc130(28);
- call {:si_unique_call 2868} nVar2820 := proc130(28);
- call {:si_unique_call 2869} nVar2821 := proc130(28);
- call {:si_unique_call 2870} nVar2822 := proc130(28);
- call {:si_unique_call 2871} nVar2823 := proc130(16);
- call {:si_unique_call 2872} nVar2824 := proc130(28);
- call {:si_unique_call 2873} nVar2825 := proc130(28);
- call {:si_unique_call 2874} nVar2826 := proc130(28);
- call {:si_unique_call 2875} nVar2827 := proc130(28);
- call {:si_unique_call 2876} nVar2828 := proc130(28);
- call {:si_unique_call 2877} nVar2829 := proc130(28);
- call {:si_unique_call 2878} nVar2830 := proc130(12);
- call {:si_unique_call 2879} nVar2831 := proc130(4);
- call {:si_unique_call 2880} nVar2832 := proc130(28);
- call {:si_unique_call 2881} nVar2833 := proc130(4);
- call {:si_unique_call 2882} nVar2834 := proc130(28);
- call {:si_unique_call 2883} nVar2835 := proc130(12);
- call {:si_unique_call 2884} nVar2836 := proc130(28);
- call {:si_unique_call 2885} nVar2837 := proc130(28);
- call {:si_unique_call 2886} nVar2838 := proc130(28);
- call {:si_unique_call 2887} nVar2839 := proc130(28);
- call {:si_unique_call 2888} nVar2840 := proc130(28);
- call {:si_unique_call 2889} nVar2841 := proc130(28);
- call {:si_unique_call 2890} nVar2842 := proc130(28);
- call {:si_unique_call 2891} nVar2843 := proc130(12);
- call {:si_unique_call 2892} nVar2844 := proc130(28);
- call {:si_unique_call 2893} nVar2845 := proc130(28);
- call {:si_unique_call 2894} nVar2846 := proc130(28);
- call {:si_unique_call 2895} nVar2847 := proc130(28);
- call {:si_unique_call 2896} nVar2848 := proc130(28);
- call {:si_unique_call 2897} nVar2849 := proc130(4);
- call {:si_unique_call 2898} nVar2850 := proc130(28);
- call {:si_unique_call 2899} nVar2851 := proc130(28);
- call {:si_unique_call 2900} nVar2852 := proc130(28);
- call {:si_unique_call 2901} nVar2853 := proc130(16);
- call {:si_unique_call 2902} nVar2854 := proc130(28);
- call {:si_unique_call 2903} nVar2855 := proc130(4);
- call {:si_unique_call 2904} nVar2856 := proc130(28);
- call {:si_unique_call 2905} nVar2857 := proc130(16);
- call {:si_unique_call 2906} nVar2858 := proc130(28);
- call {:si_unique_call 2907} nVar2859 := proc130(16);
- call {:si_unique_call 2908} nVar2860 := proc130(12);
- call {:si_unique_call 2909} nVar2861 := proc130(28);
- call {:si_unique_call 2910} nVar2862 := proc130(28);
- call {:si_unique_call 2911} nVar2863 := proc130(12);
- call {:si_unique_call 2912} nVar2864 := proc130(28);
- call {:si_unique_call 2913} nVar2865 := proc130(28);
- call {:si_unique_call 2914} nVar2866 := proc130(24);
- call {:si_unique_call 2915} nVar2867 := proc130(28);
- call {:si_unique_call 2916} nVar2868 := proc130(28);
- call {:si_unique_call 2917} nVar2869 := proc130(28);
- call {:si_unique_call 2918} nVar2870 := proc130(28);
- call {:si_unique_call 2919} nVar2871 := proc130(28);
- call {:si_unique_call 2920} nVar2872 := proc130(28);
- call {:si_unique_call 2921} nVar2873 := proc130(28);
- call {:si_unique_call 2922} nVar2874 := proc130(12);
- call {:si_unique_call 2923} nVar2875 := proc130(28);
- call {:si_unique_call 2924} nVar2876 := proc130(28);
- call {:si_unique_call 2925} nVar2877 := proc130(12);
- call {:si_unique_call 2926} nVar2878 := proc130(28);
- call {:si_unique_call 2927} nVar2879 := proc130(28);
- call {:si_unique_call 2928} nVar2880 := proc130(16);
- call {:si_unique_call 2929} nVar2881 := proc130(28);
- call {:si_unique_call 2930} nVar2882 := proc130(28);
- call {:si_unique_call 2931} nVar2883 := proc130(28);
- call {:si_unique_call 2932} nVar2884 := proc130(28);
- call {:si_unique_call 2933} nVar2885 := proc130(28);
- call {:si_unique_call 2934} nVar2886 := proc130(28);
- call {:si_unique_call 2935} nVar2887 := proc130(28);
- call {:si_unique_call 2936} nVar2888 := proc130(28);
- call {:si_unique_call 2937} nVar2889 := proc130(28);
- call {:si_unique_call 2938} nVar2890 := proc130(28);
- call {:si_unique_call 2939} nVar2891 := proc130(16);
- call {:si_unique_call 2940} nVar2892 := proc130(28);
- call {:si_unique_call 2941} nVar4956 := proc130(16);
- call {:si_unique_call 2942} nVar2893 := proc130(28);
- call {:si_unique_call 2943} nVar2894 := proc130(28);
- call {:si_unique_call 2944} nVar2895 := proc130(28);
- call {:si_unique_call 2945} nVar2896 := proc130(4);
- call {:si_unique_call 2946} nVar2897 := proc130(28);
- call {:si_unique_call 2947} nVar2898 := proc130(16);
- call {:si_unique_call 2948} nVar2899 := proc130(28);
- call {:si_unique_call 2949} nVar2900 := proc130(28);
- call {:si_unique_call 2950} nVar2901 := proc130(28);
- call {:si_unique_call 2951} nVar2902 := proc130(28);
- call {:si_unique_call 2952} nVar2903 := proc130(28);
- call {:si_unique_call 2953} nVar2904 := proc130(28);
- call {:si_unique_call 2954} nVar2905 := proc130(28);
- call {:si_unique_call 2955} nVar2906 := proc130(28);
- call {:si_unique_call 2956} nVar2907 := proc130(28);
- call {:si_unique_call 2957} nVar2908 := proc130(28);
- call {:si_unique_call 2958} nVar2909 := proc130(28);
- call {:si_unique_call 2959} nVar2910 := proc130(28);
- call {:si_unique_call 2960} nVar2911 := proc130(28);
- call {:si_unique_call 2961} nVar4957 := proc130(68);
- call {:si_unique_call 2962} nVar2912 := proc130(28);
- call {:si_unique_call 2963} nVar2913 := proc130(28);
- call {:si_unique_call 2964} nVar2914 := proc130(28);
- call {:si_unique_call 2965} nVar2915 := proc130(28);
- call {:si_unique_call 2966} nVar2916 := proc130(28);
- call {:si_unique_call 2967} nVar2917 := proc130(28);
- call {:si_unique_call 2968} nVar2918 := proc130(28);
- call {:si_unique_call 2969} nVar2919 := proc130(4);
- call {:si_unique_call 2970} nVar2920 := proc130(28);
- call {:si_unique_call 2971} nVar2921 := proc130(28);
- call {:si_unique_call 2972} nVar2922 := proc130(28);
- call {:si_unique_call 2973} nVar2923 := proc130(16);
- call {:si_unique_call 2974} nVar2924 := proc130(28);
- call {:si_unique_call 2975} nVar2925 := proc130(28);
- call {:si_unique_call 2976} nVar2926 := proc130(28);
- call {:si_unique_call 2977} nVar2927 := proc130(28);
- call {:si_unique_call 2978} nVar2928 := proc130(28);
- call {:si_unique_call 2979} nVar2929 := proc130(28);
- call {:si_unique_call 2980} nVar2930 := proc130(28);
- call {:si_unique_call 2981} nVar2931 := proc130(28);
- call {:si_unique_call 2982} nVar2932 := proc130(28);
- call {:si_unique_call 2983} nVar2933 := proc130(4);
- call {:si_unique_call 2984} nVar2934 := proc130(28);
- call {:si_unique_call 2985} nVar2935 := proc130(56);
- call {:si_unique_call 2986} nVar2936 := proc130(28);
- call {:si_unique_call 2987} nVar2937 := proc130(28);
- call {:si_unique_call 2988} nVar2938 := proc130(28);
- call {:si_unique_call 2989} nVar2939 := proc130(28);
- call {:si_unique_call 2990} nVar2940 := proc130(28);
- call {:si_unique_call 2991} nVar2941 := proc130(28);
- call {:si_unique_call 2992} nVar2942 := proc130(28);
- call {:si_unique_call 2993} nVar2943 := proc130(28);
- call {:si_unique_call 2994} nVar2944 := proc130(28);
- call {:si_unique_call 2995} nVar2945 := proc130(28);
- call {:si_unique_call 2996} nVar2946 := proc130(28);
- call {:si_unique_call 2997} nVar2947 := proc130(16);
- call {:si_unique_call 2998} nVar2948 := proc130(16);
- call {:si_unique_call 2999} nVar2949 := proc130(4);
- call {:si_unique_call 3000} nVar2950 := proc130(28);
- call {:si_unique_call 3001} nVar2951 := proc130(28);
- call {:si_unique_call 3002} nVar2952 := proc130(28);
- call {:si_unique_call 3003} nVar2953 := proc130(16);
- call {:si_unique_call 3004} nVar2954 := proc130(28);
- call {:si_unique_call 3005} nVar2955 := proc130(28);
- call {:si_unique_call 3006} nVar2956 := proc130(28);
- call {:si_unique_call 3007} nVar2957 := proc130(16);
- call {:si_unique_call 3008} nVar2958 := proc130(16);
- call {:si_unique_call 3009} nVar2959 := proc130(28);
- call {:si_unique_call 3010} nVar2960 := proc130(28);
- call {:si_unique_call 3011} nVar2961 := proc130(28);
- call {:si_unique_call 3012} nVar2962 := proc130(28);
- call {:si_unique_call 3013} nVar2963 := proc130(28);
- call {:si_unique_call 3014} nVar2964 := proc130(28);
- call {:si_unique_call 3015} nVar2965 := proc130(28);
- call {:si_unique_call 3016} nVar2966 := proc130(28);
- call {:si_unique_call 3017} nVar2967 := proc130(28);
- call {:si_unique_call 3018} nVar2968 := proc130(28);
- call {:si_unique_call 3019} nVar2969 := proc130(28);
- call {:si_unique_call 3020} nVar2970 := proc130(28);
- call {:si_unique_call 3021} nVar2971 := proc130(28);
- call {:si_unique_call 3022} nVar2972 := proc130(28);
- call {:si_unique_call 3023} nVar2973 := proc130(28);
- call {:si_unique_call 3024} nVar2974 := proc130(12);
- call {:si_unique_call 3025} nVar2975 := proc130(28);
- call {:si_unique_call 3026} nVar2976 := proc130(16);
- call {:si_unique_call 3027} nVar2977 := proc130(28);
- call {:si_unique_call 3028} nVar2978 := proc130(28);
- call {:si_unique_call 3029} nVar2979 := proc130(28);
- call {:si_unique_call 3030} nVar2980 := proc130(28);
- call {:si_unique_call 3031} nVar2981 := proc130(28);
- call {:si_unique_call 3032} nVar2982 := proc130(28);
- call {:si_unique_call 3033} nVar2983 := proc130(28);
- call {:si_unique_call 3034} nVar2984 := proc130(28);
- call {:si_unique_call 3035} nVar2985 := proc130(28);
- call {:si_unique_call 3036} nVar2986 := proc130(28);
- call {:si_unique_call 3037} nVar2987 := proc130(28);
- call {:si_unique_call 3038} nVar2988 := proc130(28);
- call {:si_unique_call 3039} nVar2989 := proc130(28);
- call {:si_unique_call 3040} nVar2990 := proc130(4);
- call {:si_unique_call 3041} nVar2991 := proc130(28);
- call {:si_unique_call 3042} nVar2992 := proc130(28);
- call {:si_unique_call 3043} nVar2993 := proc130(28);
- call {:si_unique_call 3044} nVar2994 := proc130(28);
- call {:si_unique_call 3045} nVar2995 := proc130(28);
- call {:si_unique_call 3046} nVar2996 := proc130(28);
- call {:si_unique_call 3047} nVar2997 := proc130(4);
- call {:si_unique_call 3048} nVar2998 := proc130(28);
- call {:si_unique_call 3049} nVar2999 := proc130(28);
- call {:si_unique_call 3050} nVar3000 := proc130(28);
- call {:si_unique_call 3051} nVar3001 := proc130(28);
- call {:si_unique_call 3052} nVar3002 := proc130(28);
- call {:si_unique_call 3053} nVar3003 := proc130(28);
- call {:si_unique_call 3054} nVar3004 := proc130(28);
- call {:si_unique_call 3055} nVar3005 := proc130(28);
- call {:si_unique_call 3056} nVar3006 := proc130(16);
- call {:si_unique_call 3057} nVar3007 := proc130(28);
- call {:si_unique_call 3058} nVar3008 := proc130(28);
- call {:si_unique_call 3059} nVar3009 := proc130(28);
- call {:si_unique_call 3060} nVar3010 := proc130(28);
- call {:si_unique_call 3061} nVar3011 := proc130(28);
- call {:si_unique_call 3062} nVar3012 := proc130(28);
- call {:si_unique_call 3063} nVar3013 := proc130(28);
- call {:si_unique_call 3064} nVar3014 := proc130(28);
- call {:si_unique_call 3065} nVar3015 := proc130(28);
- call {:si_unique_call 3066} nVar3016 := proc130(28);
- call {:si_unique_call 3067} nVar3017 := proc130(28);
- call {:si_unique_call 3068} nVar3018 := proc130(28);
- call {:si_unique_call 3069} nVar3019 := proc130(28);
- call {:si_unique_call 3070} nVar3020 := proc130(28);
- call {:si_unique_call 3071} nVar3021 := proc130(28);
- call {:si_unique_call 3072} nVar3022 := proc130(28);
- call {:si_unique_call 3073} nVar3023 := proc130(28);
- call {:si_unique_call 3074} nVar3024 := proc130(28);
- call {:si_unique_call 3075} nVar3025 := proc130(28);
- call {:si_unique_call 3076} nVar3026 := proc130(28);
- call {:si_unique_call 3077} nVar3027 := proc130(28);
- call {:si_unique_call 3078} nVar3028 := proc130(28);
- call {:si_unique_call 3079} nVar3029 := proc130(28);
- call {:si_unique_call 3080} nVar3030 := proc130(28);
- call {:si_unique_call 3081} nVar3031 := proc130(16);
- call {:si_unique_call 3082} nVar3032 := proc130(28);
- call {:si_unique_call 3083} nVar3033 := proc130(28);
- call {:si_unique_call 3084} nVar3034 := proc130(28);
- call {:si_unique_call 3085} nVar3035 := proc130(28);
- call {:si_unique_call 3086} nVar3036 := proc130(28);
- call {:si_unique_call 3087} nVar3037 := proc130(16);
- call {:si_unique_call 3088} nVar3038 := proc130(28);
- call {:si_unique_call 3089} nVar3039 := proc130(28);
- call {:si_unique_call 3090} nVar3040 := proc130(28);
- call {:si_unique_call 3091} nVar3041 := proc130(28);
- call {:si_unique_call 3092} nVar3042 := proc130(16);
- call {:si_unique_call 3093} nVar3043 := proc130(28);
- call {:si_unique_call 3094} nVar3044 := proc130(28);
- call {:si_unique_call 3095} nVar3045 := proc130(28);
- call {:si_unique_call 3096} nVar3046 := proc130(28);
- call {:si_unique_call 3097} nVar3047 := proc130(28);
- call {:si_unique_call 3098} nVar3049 := proc130(28);
- call {:si_unique_call 3099} nVar3050 := proc130(12);
- call {:si_unique_call 3100} nVar3051 := proc130(28);
- call {:si_unique_call 3101} nVar3052 := proc130(28);
- call {:si_unique_call 3102} nVar3053 := proc130(28);
- call {:si_unique_call 3103} nVar3054 := proc130(28);
- call {:si_unique_call 3104} nVar3055 := proc130(28);
- call {:si_unique_call 3105} nVar3056 := proc130(28);
- call {:si_unique_call 3106} nVar3057 := proc130(28);
- call {:si_unique_call 3107} nVar3058 := proc130(28);
- call {:si_unique_call 3108} nVar3059 := proc130(12);
- call {:si_unique_call 3109} nVar3060 := proc130(16);
- call {:si_unique_call 3110} nVar3061 := proc130(4);
- call {:si_unique_call 3111} nVar3063 := proc130(28);
- call {:si_unique_call 3112} nVar3064 := proc130(28);
- call {:si_unique_call 3113} nVar3065 := proc130(28);
- call {:si_unique_call 3114} nVar3066 := proc130(28);
- call {:si_unique_call 3115} nVar3067 := proc130(28);
- call {:si_unique_call 3116} nVar3068 := proc130(28);
- call {:si_unique_call 3117} nVar3069 := proc130(28);
- call {:si_unique_call 3118} nVar3070 := proc130(28);
- call {:si_unique_call 3119} nVar3071 := proc130(12);
- call {:si_unique_call 3120} nVar3072 := proc130(28);
- call {:si_unique_call 3121} nVar3073 := proc130(28);
- call {:si_unique_call 3122} nVar3074 := proc130(28);
- call {:si_unique_call 3123} nVar3075 := proc130(28);
- call {:si_unique_call 3124} nVar3076 := proc130(28);
- call {:si_unique_call 3125} nVar3077 := proc130(16);
- call {:si_unique_call 3126} nVar3078 := proc130(28);
- call {:si_unique_call 3127} nVar3079 := proc130(28);
- call {:si_unique_call 3128} nVar3080 := proc130(28);
- call {:si_unique_call 3129} nVar3081 := proc130(28);
- call {:si_unique_call 3130} nVar3082 := proc130(28);
- call {:si_unique_call 3131} nVar3083 := proc130(16);
- call {:si_unique_call 3132} nVar3084 := proc130(28);
- call {:si_unique_call 3133} nVar3085 := proc130(28);
- call {:si_unique_call 3134} nVar3086 := proc130(28);
- call {:si_unique_call 3135} nVar3087 := proc130(28);
- call {:si_unique_call 3136} nVar3088 := proc130(28);
- call {:si_unique_call 3137} nVar3089 := proc130(28);
- call {:si_unique_call 3138} nVar3090 := proc130(28);
- call {:si_unique_call 3139} nVar3091 := proc130(28);
- call {:si_unique_call 3140} nVar3092 := proc130(28);
- call {:si_unique_call 3141} nVar3093 := proc130(16);
- call {:si_unique_call 3142} nVar3094 := proc130(28);
- call {:si_unique_call 3143} nVar3095 := proc130(28);
- call {:si_unique_call 3144} nVar3096 := proc130(56);
- call {:si_unique_call 3145} nVar3097 := proc130(28);
- call {:si_unique_call 3146} nVar3098 := proc130(28);
- call {:si_unique_call 3147} nVar3099 := proc130(12);
- call {:si_unique_call 3148} nVar3100 := proc130(28);
- call {:si_unique_call 3149} nVar3101 := proc130(28);
- call {:si_unique_call 3150} nVar3102 := proc130(28);
- call {:si_unique_call 3151} nVar3103 := proc130(4);
- call {:si_unique_call 3152} nVar3104 := proc130(4);
- call {:si_unique_call 3153} nVar3105 := proc130(28);
- call {:si_unique_call 3154} nVar3106 := proc130(28);
- call {:si_unique_call 3155} nVar3107 := proc130(28);
- call {:si_unique_call 3156} nVar3108 := proc130(28);
- call {:si_unique_call 3157} nVar3109 := proc130(28);
- call {:si_unique_call 3158} nVar3110 := proc130(28);
- call {:si_unique_call 3159} nVar3111 := proc130(28);
- call {:si_unique_call 3160} nVar3112 := proc130(28);
- call {:si_unique_call 3161} nVar3113 := proc130(28);
- call {:si_unique_call 3162} nVar3114 := proc130(28);
- call {:si_unique_call 3163} nVar3115 := proc130(28);
- call {:si_unique_call 3164} nVar3116 := proc130(28);
- call {:si_unique_call 3165} nVar3117 := proc130(28);
- call {:si_unique_call 3166} nVar3118 := proc130(28);
- call {:si_unique_call 3167} nVar3119 := proc130(16);
- call {:si_unique_call 3168} nVar3120 := proc130(24);
- call {:si_unique_call 3169} nVar3121 := proc130(16);
- call {:si_unique_call 3170} nVar3122 := proc130(28);
- call {:si_unique_call 3171} nVar3123 := proc130(28);
- call {:si_unique_call 3172} nVar3124 := proc130(28);
- call {:si_unique_call 3173} nVar3125 := proc130(28);
- call {:si_unique_call 3174} nVar3126 := proc130(12);
- call {:si_unique_call 3175} nVar3127 := proc130(28);
- call {:si_unique_call 3176} nVar3128 := proc130(12);
- call {:si_unique_call 3177} nVar3129 := proc130(28);
- call {:si_unique_call 3178} nVar3130 := proc130(28);
- call {:si_unique_call 3179} nVar3131 := proc130(28);
- call {:si_unique_call 3180} nVar3132 := proc130(28);
- call {:si_unique_call 3181} nVar3133 := proc130(28);
- call {:si_unique_call 3182} nVar3134 := proc130(4);
- call {:si_unique_call 3183} nVar3135 := proc130(28);
- call {:si_unique_call 3184} nVar3136 := proc130(28);
- call {:si_unique_call 3185} nVar3137 := proc130(24);
- call {:si_unique_call 3186} nVar3138 := proc130(8);
- call {:si_unique_call 3187} nVar3140 := proc130(24);
- call {:si_unique_call 3188} nVar3141 := proc130(28);
- call {:si_unique_call 3189} nVar3142 := proc130(24);
- call {:si_unique_call 3190} nVar3143 := proc130(28);
- call {:si_unique_call 3191} nVar3144 := proc130(28);
- call {:si_unique_call 3192} nVar3145 := proc130(28);
- call {:si_unique_call 3193} nVar3146 := proc130(4);
- call {:si_unique_call 3194} nVar3147 := proc130(28);
- call {:si_unique_call 3195} nVar3148 := proc130(28);
- call {:si_unique_call 3196} nVar3149 := proc130(28);
- call {:si_unique_call 3197} nVar3150 := proc130(28);
- call {:si_unique_call 3198} nVar3151 := proc130(28);
- call {:si_unique_call 3199} nVar3152 := proc130(28);
- call {:si_unique_call 3200} nVar3153 := proc130(28);
- call {:si_unique_call 3201} nVar3154 := proc130(28);
- call {:si_unique_call 3202} nVar3155 := proc130(12);
- call {:si_unique_call 3203} nVar3156 := proc130(4);
- call {:si_unique_call 3204} nVar3157 := proc130(28);
- call {:si_unique_call 3205} nVar3158 := proc130(28);
- call {:si_unique_call 3206} nVar3159 := proc130(28);
- call {:si_unique_call 3207} nVar3160 := proc130(28);
- call {:si_unique_call 3208} nVar3161 := proc130(28);
- call {:si_unique_call 3209} nVar3162 := proc130(16);
- call {:si_unique_call 3210} nVar3163 := proc130(28);
- call {:si_unique_call 3211} nVar3164 := proc130(28);
- call {:si_unique_call 3212} nVar3165 := proc130(28);
- call {:si_unique_call 3213} nVar3166 := proc130(28);
- call {:si_unique_call 3214} nVar3167 := proc130(28);
- call {:si_unique_call 3215} nVar3168 := proc130(28);
- call {:si_unique_call 3216} nVar3169 := proc130(28);
- call {:si_unique_call 3217} nVar3170 := proc130(28);
- call {:si_unique_call 3218} nVar3171 := proc130(12);
- call {:si_unique_call 3219} nVar3172 := proc130(28);
- call {:si_unique_call 3220} nVar3173 := proc130(12);
- call {:si_unique_call 3221} nVar3174 := proc130(16);
- call {:si_unique_call 3222} nVar3175 := proc130(28);
- call {:si_unique_call 3223} nVar3176 := proc130(16);
- call {:si_unique_call 3224} nVar3177 := proc130(28);
- call {:si_unique_call 3225} nVar3178 := proc130(28);
- call {:si_unique_call 3226} nVar3179 := proc130(28);
- call {:si_unique_call 3227} nVar3180 := proc130(4);
- call {:si_unique_call 3228} nVar3181 := proc130(28);
- call {:si_unique_call 3229} nVar3182 := proc130(4);
- call {:si_unique_call 3230} nVar3183 := proc130(28);
- call {:si_unique_call 3231} nVar3184 := proc130(4);
- call {:si_unique_call 3232} nVar3185 := proc130(28);
- call {:si_unique_call 3233} nVar3186 := proc130(28);
- call {:si_unique_call 3234} nVar3187 := proc130(28);
- call {:si_unique_call 3235} nVar3188 := proc130(16);
- call {:si_unique_call 3236} nVar3189 := proc130(12);
- call {:si_unique_call 3237} nVar3190 := proc130(28);
- call {:si_unique_call 3238} nVar3191 := proc130(12);
- call {:si_unique_call 3239} nVar3192 := proc130(28);
- call {:si_unique_call 3240} nVar3193 := proc130(28);
- call {:si_unique_call 3241} nVar3194 := proc130(28);
- call {:si_unique_call 3242} nVar3195 := proc130(28);
- call {:si_unique_call 3243} nVar3196 := proc130(28);
- call {:si_unique_call 3244} nVar3197 := proc130(28);
- call {:si_unique_call 3245} nVar3198 := proc130(24);
- call {:si_unique_call 3246} nVar3199 := proc130(28);
- call {:si_unique_call 3247} nVar3200 := proc130(28);
- call {:si_unique_call 3248} nVar3201 := proc130(28);
- call {:si_unique_call 3249} nVar3202 := proc130(28);
- call {:si_unique_call 3250} nVar3203 := proc130(28);
- call {:si_unique_call 3251} nVar3204 := proc130(28);
- call {:si_unique_call 3252} nVar3205 := proc130(28);
- call {:si_unique_call 3253} nVar3206 := proc130(28);
- call {:si_unique_call 3254} nVar3207 := proc130(28);
- call {:si_unique_call 3255} nVar3208 := proc130(28);
- call {:si_unique_call 3256} nVar3209 := proc130(28);
- call {:si_unique_call 3257} nVar3210 := proc130(28);
- call {:si_unique_call 3258} nVar3211 := proc130(28);
- call {:si_unique_call 3259} nVar3212 := proc130(28);
- call {:si_unique_call 3260} nVar3213 := proc130(12);
- call {:si_unique_call 3261} nVar3214 := proc130(4);
- call {:si_unique_call 3262} nVar3215 := proc130(28);
- call {:si_unique_call 3263} nVar3216 := proc130(12);
- call {:si_unique_call 3264} nVar3217 := proc130(28);
- call {:si_unique_call 3265} nVar3218 := proc130(28);
- call {:si_unique_call 3266} nVar3219 := proc130(28);
- call {:si_unique_call 3267} nVar3220 := proc130(28);
- call {:si_unique_call 3268} nVar3221 := proc130(28);
- call {:si_unique_call 3269} nVar3222 := proc130(28);
- call {:si_unique_call 3270} nVar3223 := proc130(28);
- call {:si_unique_call 3271} nVar3224 := proc130(28);
- call {:si_unique_call 3272} nVar3225 := proc130(28);
- call {:si_unique_call 3273} nVar3226 := proc130(28);
- call {:si_unique_call 3274} nVar3227 := proc130(28);
- call {:si_unique_call 3275} nVar3228 := proc130(12);
- call {:si_unique_call 3276} nVar3229 := proc130(28);
- call {:si_unique_call 3277} nVar3230 := proc130(28);
- call {:si_unique_call 3278} nVar3231 := proc130(28);
- call {:si_unique_call 3279} nVar3232 := proc130(28);
- call {:si_unique_call 3280} nVar3233 := proc130(28);
- call {:si_unique_call 3281} nVar3234 := proc130(28);
- call {:si_unique_call 3282} nVar3235 := proc130(28);
- call {:si_unique_call 3283} nVar3236 := proc130(4);
- call {:si_unique_call 3284} nVar3237 := proc130(24);
- call {:si_unique_call 3285} nVar3238 := proc130(28);
- call {:si_unique_call 3286} nVar3239 := proc130(28);
- call {:si_unique_call 3287} nVar3240 := proc130(16);
- call {:si_unique_call 3288} nVar3241 := proc130(12);
- call {:si_unique_call 3289} nVar3242 := proc130(28);
- call {:si_unique_call 3290} nVar3243 := proc130(28);
- call {:si_unique_call 3291} nVar3244 := proc130(28);
- call {:si_unique_call 3292} nVar3245 := proc130(28);
- call {:si_unique_call 3293} nVar3246 := proc130(28);
- call {:si_unique_call 3294} nVar3247 := proc130(28);
- call {:si_unique_call 3295} nVar3248 := proc130(28);
- call {:si_unique_call 3296} nVar3249 := proc130(28);
- call {:si_unique_call 3297} nVar3250 := proc130(24);
- call {:si_unique_call 3298} nVar3251 := proc130(28);
- call {:si_unique_call 3299} nVar3252 := proc130(28);
- call {:si_unique_call 3300} nVar3253 := proc130(28);
- call {:si_unique_call 3301} nVar3254 := proc130(4);
- call {:si_unique_call 3302} nVar3255 := proc130(28);
- call {:si_unique_call 3303} nVar3256 := proc130(28);
- call {:si_unique_call 3304} nVar3257 := proc130(4);
- call {:si_unique_call 3305} nVar3258 := proc130(24);
- call {:si_unique_call 3306} nVar3259 := proc130(28);
- call {:si_unique_call 3307} nVar3260 := proc130(28);
- call {:si_unique_call 3308} nVar3261 := proc130(28);
- call {:si_unique_call 3309} nVar3262 := proc130(28);
- call {:si_unique_call 3310} nVar3263 := proc130(28);
- call {:si_unique_call 3311} nVar3264 := proc130(28);
- call {:si_unique_call 3312} nVar3265 := proc130(24);
- call {:si_unique_call 3313} nVar3266 := proc130(28);
- call {:si_unique_call 3314} nVar3267 := proc130(28);
- call {:si_unique_call 3315} nVar3268 := proc130(28);
- call {:si_unique_call 3316} nVar3269 := proc130(4);
- call {:si_unique_call 3317} nVar3270 := proc130(28);
- call {:si_unique_call 3318} nVar3271 := proc130(28);
- call {:si_unique_call 3319} nVar3272 := proc130(28);
- call {:si_unique_call 3320} nVar3273 := proc130(28);
- call {:si_unique_call 3321} nVar3274 := proc130(28);
- call {:si_unique_call 3322} nVar3275 := proc130(28);
- call {:si_unique_call 3323} nVar3276 := proc130(28);
- call {:si_unique_call 3324} nVar3277 := proc130(28);
- call {:si_unique_call 3325} nVar3278 := proc130(28);
- call {:si_unique_call 3326} nVar3279 := proc130(16);
- call {:si_unique_call 3327} nVar3280 := proc130(28);
- call {:si_unique_call 3328} nVar3281 := proc130(28);
- call {:si_unique_call 3329} nVar3282 := proc130(28);
- call {:si_unique_call 3330} nVar3283 := proc130(16);
- call {:si_unique_call 3331} nVar3284 := proc130(24);
- call {:si_unique_call 3332} nVar3285 := proc130(28);
- call {:si_unique_call 3333} nVar3286 := proc130(28);
- call {:si_unique_call 3334} nVar3287 := proc130(16);
- call {:si_unique_call 3335} nVar3288 := proc130(4);
- call {:si_unique_call 3336} nVar3289 := proc130(24);
- call {:si_unique_call 3337} nVar3290 := proc130(28);
- call {:si_unique_call 3338} nVar3291 := proc130(28);
- call {:si_unique_call 3339} nVar3292 := proc130(28);
- call {:si_unique_call 3340} nVar3293 := proc130(16);
- call {:si_unique_call 3341} nVar3294 := proc130(4);
- call {:si_unique_call 3342} nVar3295 := proc130(4);
- call {:si_unique_call 3343} nVar3296 := proc130(28);
- call {:si_unique_call 3344} nVar3297 := proc130(28);
- call {:si_unique_call 3345} nVar3298 := proc130(28);
- call {:si_unique_call 3346} nVar3299 := proc130(28);
- call {:si_unique_call 3347} nVar3300 := proc130(28);
- call {:si_unique_call 3348} nVar3301 := proc130(28);
- call {:si_unique_call 3349} nVar3302 := proc130(28);
- call {:si_unique_call 3350} nVar3303 := proc130(28);
- call {:si_unique_call 3351} nVar3304 := proc130(28);
- call {:si_unique_call 3352} nVar3305 := proc130(28);
- call {:si_unique_call 3353} nVar3306 := proc130(28);
- call {:si_unique_call 3354} nVar3307 := proc130(28);
- call {:si_unique_call 3355} nVar3308 := proc130(28);
- call {:si_unique_call 3356} nVar3309 := proc130(28);
- call {:si_unique_call 3357} nVar3310 := proc130(28);
- call {:si_unique_call 3358} nVar3311 := proc130(28);
- call {:si_unique_call 3359} nVar3312 := proc130(12);
- call {:si_unique_call 3360} nVar3313 := proc130(16);
- call {:si_unique_call 3361} nVar3314 := proc130(28);
- call {:si_unique_call 3362} nVar3315 := proc130(4);
- call {:si_unique_call 3363} nVar3316 := proc130(12);
- call {:si_unique_call 3364} nVar3317 := proc130(28);
- call {:si_unique_call 3365} nVar3318 := proc130(28);
- call {:si_unique_call 3366} nVar3319 := proc130(28);
- call {:si_unique_call 3367} nVar3320 := proc130(28);
- call {:si_unique_call 3368} nVar3321 := proc130(28);
- call {:si_unique_call 3369} nVar3322 := proc130(28);
- call {:si_unique_call 3370} nVar3323 := proc130(28);
- call {:si_unique_call 3371} nVar3324 := proc130(12);
- call {:si_unique_call 3372} nVar3325 := proc130(28);
- call {:si_unique_call 3373} nVar3326 := proc130(28);
- call {:si_unique_call 3374} nVar3327 := proc130(16);
- call {:si_unique_call 3375} nVar3328 := proc130(16);
- call {:si_unique_call 3376} nVar3329 := proc130(28);
- call {:si_unique_call 3377} nVar3330 := proc130(28);
- call {:si_unique_call 3378} nVar3331 := proc130(28);
- call {:si_unique_call 3379} nVar3332 := proc130(28);
- call {:si_unique_call 3380} nVar3333 := proc130(28);
- call {:si_unique_call 3381} nVar3334 := proc130(28);
- call {:si_unique_call 3382} nVar3335 := proc130(28);
- call {:si_unique_call 3383} nVar3336 := proc130(28);
- call {:si_unique_call 3384} nVar3337 := proc130(28);
- call {:si_unique_call 3385} nVar3338 := proc130(4);
- call {:si_unique_call 3386} nVar3339 := proc130(28);
- call {:si_unique_call 3387} nVar3340 := proc130(28);
- call {:si_unique_call 3388} nVar3341 := proc130(28);
- call {:si_unique_call 3389} nVar3342 := proc130(28);
- call {:si_unique_call 3390} nVar3343 := proc130(28);
- call {:si_unique_call 3391} nVar3344 := proc130(28);
- call {:si_unique_call 3392} nVar3345 := proc130(28);
- call {:si_unique_call 3393} nVar4958 := proc130(16);
- call {:si_unique_call 3394} nVar3346 := proc130(28);
- call {:si_unique_call 3395} nVar3347 := proc130(28);
- call {:si_unique_call 3396} nVar3348 := proc130(4);
- call {:si_unique_call 3397} nVar3349 := proc130(12);
- call {:si_unique_call 3398} nVar3350 := proc130(28);
- call {:si_unique_call 3399} nVar3351 := proc130(28);
- call {:si_unique_call 3400} nVar3352 := proc130(28);
- call {:si_unique_call 3401} nVar3353 := proc130(28);
- call {:si_unique_call 3402} nVar3354 := proc130(28);
- call {:si_unique_call 3403} nVar3355 := proc130(28);
- call {:si_unique_call 3404} nVar3356 := proc130(12);
- call {:si_unique_call 3405} nVar3357 := proc130(28);
- call {:si_unique_call 3406} nVar3358 := proc130(28);
- call {:si_unique_call 3407} nVar3359 := proc130(28);
- call {:si_unique_call 3408} nVar3360 := proc130(28);
- call {:si_unique_call 3409} nVar3361 := proc130(28);
- call {:si_unique_call 3410} nVar3362 := proc130(28);
- call {:si_unique_call 3411} nVar3363 := proc130(28);
- call {:si_unique_call 3412} nVar3364 := proc130(28);
- call {:si_unique_call 3413} nVar3365 := proc130(16);
- call {:si_unique_call 3414} nVar3366 := proc130(24);
- call {:si_unique_call 3415} nVar3367 := proc130(28);
- call {:si_unique_call 3416} nVar3368 := proc130(28);
- call {:si_unique_call 3417} nVar3369 := proc130(4);
- call {:si_unique_call 3418} nVar3370 := proc130(28);
- call {:si_unique_call 3419} nVar3371 := proc130(28);
- call {:si_unique_call 3420} nVar3372 := proc130(28);
- call {:si_unique_call 3421} nVar3373 := proc130(16);
- call {:si_unique_call 3422} nVar3374 := proc130(28);
- call {:si_unique_call 3423} nVar3375 := proc130(28);
- call {:si_unique_call 3424} nVar3376 := proc130(28);
- call {:si_unique_call 3425} nVar3377 := proc130(4);
- call {:si_unique_call 3426} nVar3378 := proc130(28);
- call {:si_unique_call 3427} nVar3379 := proc130(16);
- call {:si_unique_call 3428} nVar3380 := proc130(28);
- call {:si_unique_call 3429} nVar3381 := proc130(28);
- call {:si_unique_call 3430} nVar3382 := proc130(28);
- call {:si_unique_call 3431} nVar3383 := proc130(28);
- call {:si_unique_call 3432} nVar3384 := proc130(28);
- call {:si_unique_call 3433} nVar3385 := proc130(28);
- call {:si_unique_call 3434} nVar3386 := proc130(28);
- call {:si_unique_call 3435} nVar3387 := proc130(16);
- call {:si_unique_call 3436} nVar3388 := proc130(28);
- call {:si_unique_call 3437} nVar3389 := proc130(4);
- call {:si_unique_call 3438} nVar3390 := proc130(28);
- call {:si_unique_call 3439} nVar3391 := proc130(28);
- call {:si_unique_call 3440} nVar3392 := proc130(4);
- call {:si_unique_call 3441} nVar3393 := proc130(28);
- call {:si_unique_call 3442} nVar3394 := proc130(28);
- call {:si_unique_call 3443} nVar3395 := proc130(24);
- call {:si_unique_call 3444} nVar3396 := proc130(28);
- call {:si_unique_call 3445} nVar3397 := proc130(28);
- call {:si_unique_call 3446} nVar3398 := proc130(28);
- call {:si_unique_call 3447} nVar3399 := proc130(28);
- call {:si_unique_call 3448} nVar3400 := proc130(8);
- call {:si_unique_call 3449} nVar3401 := proc130(4);
- call {:si_unique_call 3450} nVar3402 := proc130(28);
- call {:si_unique_call 3451} nVar3403 := proc130(28);
- call {:si_unique_call 3452} nVar3404 := proc130(28);
- call {:si_unique_call 3453} nVar3405 := proc130(28);
- call {:si_unique_call 3454} nVar3406 := proc130(4);
- call {:si_unique_call 3455} nVar3407 := proc130(28);
- call {:si_unique_call 3456} nVar3408 := proc130(16);
- call {:si_unique_call 3457} nVar3409 := proc130(4);
- call {:si_unique_call 3458} nVar3410 := proc130(28);
- call {:si_unique_call 3459} nVar3411 := proc130(28);
- call {:si_unique_call 3460} nVar3412 := proc130(28);
- call {:si_unique_call 3461} nVar3413 := proc130(28);
- call {:si_unique_call 3462} nVar3414 := proc130(28);
- call {:si_unique_call 3463} nVar3415 := proc130(28);
- call {:si_unique_call 3464} nVar3416 := proc130(28);
- call {:si_unique_call 3465} nVar3417 := proc130(28);
- call {:si_unique_call 3466} nVar3418 := proc130(28);
- call {:si_unique_call 3467} nVar3419 := proc130(28);
- call {:si_unique_call 3468} nVar3420 := proc130(28);
- call {:si_unique_call 3469} nVar3421 := proc130(28);
- call {:si_unique_call 3470} nVar3422 := proc130(24);
- call {:si_unique_call 3471} nVar3423 := proc130(4);
- call {:si_unique_call 3472} nVar3424 := proc130(16);
- call {:si_unique_call 3473} nVar3425 := proc130(28);
- call {:si_unique_call 3474} nVar3426 := proc130(28);
- call {:si_unique_call 3475} nVar3427 := proc130(28);
- call {:si_unique_call 3476} nVar3428 := proc130(28);
- call {:si_unique_call 3477} nVar3429 := proc130(28);
- call {:si_unique_call 3478} nVar3430 := proc130(28);
- call {:si_unique_call 3479} nVar3431 := proc130(28);
- call {:si_unique_call 3480} nVar3432 := proc130(28);
- call {:si_unique_call 3481} nVar3433 := proc130(28);
- call {:si_unique_call 3482} nVar3434 := proc130(28);
- call {:si_unique_call 3483} nVar3435 := proc130(28);
- call {:si_unique_call 3484} nVar3436 := proc130(28);
- call {:si_unique_call 3485} nVar3437 := proc130(28);
- call {:si_unique_call 3486} nVar3438 := proc130(28);
- call {:si_unique_call 3487} nVar3439 := proc130(28);
- call {:si_unique_call 3488} nVar3440 := proc130(28);
- call {:si_unique_call 3489} nVar3441 := proc130(28);
- call {:si_unique_call 3490} nVar3442 := proc130(28);
- call {:si_unique_call 3491} nVar3443 := proc130(28);
- call {:si_unique_call 3492} nVar3444 := proc130(28);
- call {:si_unique_call 3493} nVar3445 := proc130(28);
- call {:si_unique_call 3494} nVar3446 := proc130(28);
- call {:si_unique_call 3495} nVar3447 := proc130(28);
- call {:si_unique_call 3496} nVar3448 := proc130(24);
- call {:si_unique_call 3497} nVar3449 := proc130(28);
- call {:si_unique_call 3498} nVar3450 := proc130(28);
- call {:si_unique_call 3499} nVar3451 := proc130(4);
- call {:si_unique_call 3500} nVar3452 := proc130(28);
- call {:si_unique_call 3501} nVar3453 := proc130(24);
- call {:si_unique_call 3502} nVar3454 := proc130(28);
- call {:si_unique_call 3503} nVar3455 := proc130(28);
- call {:si_unique_call 3504} nVar3456 := proc130(28);
- call {:si_unique_call 3505} nVar3457 := proc130(28);
- call {:si_unique_call 3506} nVar3458 := proc130(16);
- call {:si_unique_call 3507} nVar3459 := proc130(28);
- call {:si_unique_call 3508} nVar3460 := proc130(12);
- call {:si_unique_call 3509} nVar3461 := proc130(28);
- call {:si_unique_call 3510} nVar3462 := proc130(28);
- call {:si_unique_call 3511} nVar3463 := proc130(28);
- call {:si_unique_call 3512} nVar3464 := proc130(28);
- call {:si_unique_call 3513} nVar3465 := proc130(28);
- call {:si_unique_call 3514} nVar3466 := proc130(4);
- call {:si_unique_call 3515} nVar3467 := proc130(28);
- call {:si_unique_call 3516} nVar3468 := proc130(28);
- call {:si_unique_call 3517} nVar3469 := proc130(4);
- call {:si_unique_call 3518} nVar3470 := proc130(28);
- call {:si_unique_call 3519} nVar3471 := proc130(28);
- call {:si_unique_call 3520} nVar3472 := proc130(28);
- call {:si_unique_call 3521} nVar3473 := proc130(12);
- call {:si_unique_call 3522} nVar3474 := proc130(28);
- call {:si_unique_call 3523} nVar3475 := proc130(28);
- call {:si_unique_call 3524} nVar3476 := proc130(28);
- call {:si_unique_call 3525} nVar3477 := proc130(28);
- call {:si_unique_call 3526} nVar3478 := proc130(28);
- call {:si_unique_call 3527} nVar3479 := proc130(16);
- call {:si_unique_call 3528} nVar3480 := proc130(24);
- call {:si_unique_call 3529} nVar3481 := proc130(28);
- call {:si_unique_call 3530} nVar3482 := proc130(28);
- call {:si_unique_call 3531} nVar3483 := proc130(4);
- call {:si_unique_call 3532} nVar3484 := proc130(28);
- call {:si_unique_call 3533} nVar3485 := proc130(28);
- call {:si_unique_call 3534} nVar3486 := proc130(28);
- call {:si_unique_call 3535} nVar3487 := proc130(28);
- call {:si_unique_call 3536} nVar3488 := proc130(28);
- call {:si_unique_call 3537} nVar3489 := proc130(28);
- call {:si_unique_call 3538} nVar3490 := proc130(28);
- call {:si_unique_call 3539} nVar3491 := proc130(24);
- call {:si_unique_call 3540} nVar3492 := proc130(28);
- call {:si_unique_call 3541} nVar3493 := proc130(28);
- call {:si_unique_call 3542} nVar3494 := proc130(28);
- call {:si_unique_call 3543} nVar3495 := proc130(16);
- call {:si_unique_call 3544} nVar3496 := proc130(28);
- call {:si_unique_call 3545} nVar3497 := proc130(24);
- call {:si_unique_call 3546} nVar3498 := proc130(28);
- call {:si_unique_call 3547} nVar3499 := proc130(28);
- call {:si_unique_call 3548} nVar3500 := proc130(28);
- call {:si_unique_call 3549} nVar3501 := proc130(28);
- call {:si_unique_call 3550} nVar3502 := proc130(28);
- call {:si_unique_call 3551} nVar3503 := proc130(28);
- call {:si_unique_call 3552} nVar3504 := proc130(28);
- call {:si_unique_call 3553} nVar3505 := proc130(28);
- call {:si_unique_call 3554} nVar3506 := proc130(28);
- call {:si_unique_call 3555} nVar3507 := proc130(4);
- call {:si_unique_call 3556} nVar3508 := proc130(28);
- call {:si_unique_call 3557} nVar3509 := proc130(28);
- call {:si_unique_call 3558} nVar3510 := proc130(28);
- call {:si_unique_call 3559} nVar3511 := proc130(28);
- call {:si_unique_call 3560} nVar3512 := proc130(28);
- call {:si_unique_call 3561} nVar3513 := proc130(28);
- call {:si_unique_call 3562} nVar3514 := proc130(28);
- call {:si_unique_call 3563} nVar3515 := proc130(28);
- call {:si_unique_call 3564} nVar3516 := proc130(28);
- call {:si_unique_call 3565} nVar3517 := proc130(28);
- call {:si_unique_call 3566} nVar3518 := proc130(28);
- call {:si_unique_call 3567} nVar3519 := proc130(28);
- call {:si_unique_call 3568} nVar3520 := proc130(16);
- call {:si_unique_call 3569} nVar3521 := proc130(56);
- call {:si_unique_call 3570} nVar3522 := proc130(12);
- call {:si_unique_call 3571} nVar3523 := proc130(28);
- call {:si_unique_call 3572} nVar3524 := proc130(28);
- call {:si_unique_call 3573} nVar3525 := proc130(28);
- call {:si_unique_call 3574} nVar3526 := proc130(16);
- call {:si_unique_call 3575} nVar3527 := proc130(28);
- call {:si_unique_call 3576} nVar3528 := proc130(4);
- call {:si_unique_call 3577} nVar3529 := proc130(16);
- call {:si_unique_call 3578} nVar3530 := proc130(28);
- call {:si_unique_call 3579} nVar3531 := proc130(28);
- call {:si_unique_call 3580} nVar3532 := proc130(28);
- call {:si_unique_call 3581} nVar3533 := proc130(28);
- call {:si_unique_call 3582} nVar3534 := proc130(8);
- call {:si_unique_call 3583} nVar3535 := proc130(12);
- call {:si_unique_call 3584} nVar3536 := proc130(28);
- call {:si_unique_call 3585} nVar3537 := proc130(28);
- call {:si_unique_call 3586} nVar3538 := proc130(8);
- call {:si_unique_call 3587} nVar3539 := proc130(28);
- call {:si_unique_call 3588} nVar3540 := proc130(28);
- call {:si_unique_call 3589} nVar3541 := proc130(28);
- call {:si_unique_call 3590} nVar3542 := proc130(28);
- call {:si_unique_call 3591} nVar3543 := proc130(28);
- call {:si_unique_call 3592} nVar3544 := proc130(8);
- call {:si_unique_call 3593} nVar3545 := proc130(12);
- call {:si_unique_call 3594} nVar3546 := proc130(28);
- call {:si_unique_call 3595} nVar3547 := proc130(28);
- call {:si_unique_call 3596} nVar3548 := proc130(12);
- call {:si_unique_call 3597} nVar3549 := proc130(28);
- call {:si_unique_call 3598} nVar3550 := proc130(28);
- call {:si_unique_call 3599} nVar3551 := proc130(28);
- call {:si_unique_call 3600} nVar3552 := proc130(28);
- call {:si_unique_call 3601} nVar3553 := proc130(28);
- call {:si_unique_call 3602} nVar3554 := proc130(28);
- call {:si_unique_call 3603} nVar3555 := proc130(28);
- call {:si_unique_call 3604} nVar3556 := proc130(28);
- call {:si_unique_call 3605} nVar3557 := proc130(28);
- call {:si_unique_call 3606} nVar3558 := proc130(28);
- call {:si_unique_call 3607} nVar3559 := proc130(56);
- call {:si_unique_call 3608} nVar3560 := proc130(28);
- call {:si_unique_call 3609} nVar3561 := proc130(28);
- call {:si_unique_call 3610} nVar3562 := proc130(28);
- call {:si_unique_call 3611} nVar3563 := proc130(28);
- call {:si_unique_call 3612} nVar3564 := proc130(28);
- call {:si_unique_call 3613} nVar3565 := proc130(28);
- call {:si_unique_call 3614} nVar3566 := proc130(12);
- call {:si_unique_call 3615} nVar3567 := proc130(28);
- call {:si_unique_call 3616} nVar3568 := proc130(28);
- call {:si_unique_call 3617} nVar3569 := proc130(4);
- call {:si_unique_call 3618} nVar3570 := proc130(28);
- call {:si_unique_call 3619} nVar3571 := proc130(28);
- call {:si_unique_call 3620} nVar3572 := proc130(28);
- call {:si_unique_call 3621} nVar3573 := proc130(28);
- call {:si_unique_call 3622} nVar3574 := proc130(28);
- call {:si_unique_call 3623} nVar3575 := proc130(28);
- call {:si_unique_call 3624} nVar3576 := proc130(28);
- call {:si_unique_call 3625} nVar3577 := proc130(16);
- call {:si_unique_call 3626} nVar3578 := proc130(12);
- call {:si_unique_call 3627} nVar3579 := proc130(28);
- call {:si_unique_call 3628} nVar3580 := proc130(28);
- call {:si_unique_call 3629} nVar3581 := proc130(28);
- call {:si_unique_call 3630} nVar3582 := proc130(4);
- call {:si_unique_call 3631} nVar3583 := proc130(28);
- call {:si_unique_call 3632} nVar3584 := proc130(12);
- call {:si_unique_call 3633} nVar3585 := proc130(28);
- call {:si_unique_call 3634} nVar3586 := proc130(28);
- call {:si_unique_call 3635} nVar3587 := proc130(28);
- call {:si_unique_call 3636} nVar3588 := proc130(28);
- call {:si_unique_call 3637} nVar3589 := proc130(28);
- call {:si_unique_call 3638} nVar3590 := proc130(28);
- call {:si_unique_call 3639} nVar3591 := proc130(24);
- call {:si_unique_call 3640} nVar3592 := proc130(28);
- call {:si_unique_call 3641} nVar3593 := proc130(28);
- call {:si_unique_call 3642} nVar3594 := proc130(28);
- call {:si_unique_call 3643} nVar3595 := proc130(28);
- call {:si_unique_call 3644} nVar3596 := proc130(28);
- call {:si_unique_call 3645} nVar3597 := proc130(28);
- call {:si_unique_call 3646} nVar3598 := proc130(28);
- call {:si_unique_call 3647} nVar3599 := proc130(28);
- call {:si_unique_call 3648} nVar3600 := proc130(4);
- call {:si_unique_call 3649} nVar3601 := proc130(4);
- call {:si_unique_call 3650} nVar3602 := proc130(16);
- call {:si_unique_call 3651} nVar4959 := proc130(16);
- call {:si_unique_call 3652} nVar3603 := proc130(28);
- call {:si_unique_call 3653} nVar3604 := proc130(28);
- call {:si_unique_call 3654} nVar3605 := proc130(28);
- call {:si_unique_call 3655} nVar3606 := proc130(28);
- call {:si_unique_call 3656} nVar3607 := proc130(28);
- call {:si_unique_call 3657} nVar3608 := proc130(28);
- call {:si_unique_call 3658} nVar3609 := proc130(16);
- call {:si_unique_call 3659} nVar3610 := proc130(28);
- call {:si_unique_call 3660} nVar3611 := proc130(28);
- call {:si_unique_call 3661} nVar3612 := proc130(28);
- call {:si_unique_call 3662} nVar3613 := proc130(28);
- call {:si_unique_call 3663} nVar3614 := proc130(28);
- call {:si_unique_call 3664} nVar3615 := proc130(28);
- call {:si_unique_call 3665} nVar3616 := proc130(28);
- call {:si_unique_call 3666} nVar3617 := proc130(28);
- call {:si_unique_call 3667} nVar3618 := proc130(28);
- call {:si_unique_call 3668} nVar3619 := proc130(28);
- call {:si_unique_call 3669} nVar3620 := proc130(28);
- call {:si_unique_call 3670} nVar3621 := proc130(28);
- call {:si_unique_call 3671} nVar3622 := proc130(12);
- call {:si_unique_call 3672} nVar3623 := proc130(28);
- call {:si_unique_call 3673} nVar3624 := proc130(28);
- call {:si_unique_call 3674} nVar3625 := proc130(28);
- call {:si_unique_call 3675} nVar3626 := proc130(28);
- call {:si_unique_call 3676} nVar3627 := proc130(28);
- call {:si_unique_call 3677} nVar3628 := proc130(28);
- call {:si_unique_call 3678} nVar3629 := proc130(28);
- call {:si_unique_call 3679} nVar3630 := proc130(28);
- call {:si_unique_call 3680} nVar3631 := proc130(28);
- call {:si_unique_call 3681} nVar3632 := proc130(28);
- call {:si_unique_call 3682} nVar3633 := proc130(16);
- call {:si_unique_call 3683} nVar3634 := proc130(28);
- call {:si_unique_call 3684} nVar3635 := proc130(16);
- call {:si_unique_call 3685} nVar3636 := proc130(28);
- call {:si_unique_call 3686} nVar3637 := proc130(28);
- call {:si_unique_call 3687} nVar3638 := proc130(4);
- call {:si_unique_call 3688} nVar3639 := proc130(28);
- call {:si_unique_call 3689} nVar3640 := proc130(28);
- call {:si_unique_call 3690} nVar3641 := proc130(28);
- call {:si_unique_call 3691} nVar3642 := proc130(28);
- call {:si_unique_call 3692} nVar3643 := proc130(28);
- call {:si_unique_call 3693} nVar3644 := proc130(16);
- call {:si_unique_call 3694} nVar3645 := proc130(28);
- call {:si_unique_call 3695} nVar3646 := proc130(28);
- call {:si_unique_call 3696} nVar3647 := proc130(16);
- call {:si_unique_call 3697} nVar3648 := proc130(28);
- call {:si_unique_call 3698} nVar3649 := proc130(28);
- call {:si_unique_call 3699} nVar3650 := proc130(28);
- call {:si_unique_call 3700} nVar3651 := proc130(28);
- call {:si_unique_call 3701} nVar3652 := proc130(28);
- call {:si_unique_call 3702} nVar3653 := proc130(28);
- call {:si_unique_call 3703} nVar3654 := proc130(28);
- call {:si_unique_call 3704} nVar3655 := proc130(24);
- call {:si_unique_call 3705} nVar3656 := proc130(28);
- call {:si_unique_call 3706} nVar3657 := proc130(8);
- call {:si_unique_call 3707} nVar3658 := proc130(28);
- call {:si_unique_call 3708} nVar3659 := proc130(28);
- call {:si_unique_call 3709} nVar3660 := proc130(28);
- call {:si_unique_call 3710} nVar3661 := proc130(28);
- call {:si_unique_call 3711} nVar3662 := proc130(28);
- call {:si_unique_call 3712} nVar3663 := proc130(28);
- call {:si_unique_call 3713} nVar3664 := proc130(16);
- call {:si_unique_call 3714} nVar3665 := proc130(28);
- call {:si_unique_call 3715} nVar3666 := proc130(28);
- call {:si_unique_call 3716} nVar3667 := proc130(28);
- call {:si_unique_call 3717} nVar3668 := proc130(28);
- call {:si_unique_call 3718} nVar3669 := proc130(28);
- call {:si_unique_call 3719} nVar3670 := proc130(4);
- call {:si_unique_call 3720} nVar3671 := proc130(4);
- call {:si_unique_call 3721} nVar3672 := proc130(28);
- call {:si_unique_call 3722} nVar3673 := proc130(28);
- call {:si_unique_call 3723} nVar3674 := proc130(28);
- call {:si_unique_call 3724} nVar3675 := proc130(56);
- call {:si_unique_call 3725} nVar3676 := proc130(4);
- call {:si_unique_call 3726} nVar3677 := proc130(4);
- call {:si_unique_call 3727} nVar3678 := proc130(28);
- call {:si_unique_call 3728} nVar4960 := proc130(16);
- call {:si_unique_call 3729} nVar3679 := proc130(24);
- call {:si_unique_call 3730} nVar3680 := proc130(28);
- call {:si_unique_call 3731} nVar3681 := proc130(28);
- call {:si_unique_call 3732} nVar3682 := proc130(28);
- call {:si_unique_call 3733} nVar3683 := proc130(28);
- call {:si_unique_call 3734} nVar3684 := proc130(28);
- call {:si_unique_call 3735} nVar3685 := proc130(28);
- call {:si_unique_call 3736} nVar3686 := proc130(28);
- call {:si_unique_call 3737} nVar3687 := proc130(28);
- call {:si_unique_call 3738} nVar3688 := proc130(16);
- call {:si_unique_call 3739} nVar3689 := proc130(28);
- call {:si_unique_call 3740} nVar3690 := proc130(28);
- call {:si_unique_call 3741} nVar3691 := proc130(16);
- call {:si_unique_call 3742} nVar3692 := proc130(28);
- call {:si_unique_call 3743} nVar3693 := proc130(12);
- call {:si_unique_call 3744} nVar3694 := proc130(28);
- call {:si_unique_call 3745} nVar3695 := proc130(28);
- call {:si_unique_call 3746} nVar3696 := proc130(28);
- call {:si_unique_call 3747} nVar3697 := proc130(28);
- call {:si_unique_call 3748} nVar3698 := proc130(24);
- call {:si_unique_call 3749} nVar3699 := proc130(4);
- call {:si_unique_call 3750} nVar3700 := proc130(28);
- call {:si_unique_call 3751} nVar3701 := proc130(28);
- call {:si_unique_call 3752} nVar3702 := proc130(16);
- call {:si_unique_call 3753} nVar3703 := proc130(28);
- call {:si_unique_call 3754} nVar3704 := proc130(28);
- call {:si_unique_call 3755} nVar3705 := proc130(28);
- call {:si_unique_call 3756} nVar3706 := proc130(28);
- call {:si_unique_call 3757} nVar3707 := proc130(28);
- call {:si_unique_call 3758} nVar3708 := proc130(4);
- call {:si_unique_call 3759} nVar3709 := proc130(28);
- call {:si_unique_call 3760} nVar3710 := proc130(16);
- call {:si_unique_call 3761} nVar4939 := proc131(4);
- call {:si_unique_call 3762} nVar4939 := proc131(4);
- call {:si_unique_call 3763} nVar4939 := proc131(4);
- call {:si_unique_call 3764} nVar4939 := proc131(4);
- call {:si_unique_call 3765} nVar4939 := proc131(4);
- call {:si_unique_call 3766} nVar4939 := proc131(4);
- call {:si_unique_call 3767} nVar4939 := proc131(4);
- nVar347 := nVar4939;
- call {:si_unique_call 3768} nVar4939 := proc131(4);
- call {:si_unique_call 3769} nVar4939 := proc131(4);
- nVar399 := nVar4939;
- call {:si_unique_call 3770} nVar4939 := proc131(4);
- call {:si_unique_call 3771} nVar4939 := proc131(4);
- call {:si_unique_call 3772} nVar4939 := proc131(4);
- call {:si_unique_call 3773} nVar4939 := proc131(4);
- call {:si_unique_call 3774} nVar4939 := proc131(4);
- call {:si_unique_call 3775} nVar4939 := proc131(4);
- call {:si_unique_call 3776} nVar4939 := proc131(4);
- call {:si_unique_call 3777} nVar4939 := proc131(4);
- call {:si_unique_call 3778} nVar4939 := proc131(4);
- call {:si_unique_call 3779} nVar4939 := proc131(4);
- call {:si_unique_call 3780} nVar4939 := proc131(4);
- call {:si_unique_call 3781} nVar4939 := proc131(4);
- call {:si_unique_call 3782} nVar4939 := proc131(4);
- call {:si_unique_call 3783} nVar4939 := proc131(4);
- call {:si_unique_call 3784} nVar4939 := proc131(4);
- call {:si_unique_call 3785} nVar4939 := proc131(4);
- call {:si_unique_call 3786} nVar4939 := proc131(4);
- call {:si_unique_call 3787} nVar4939 := proc131(4);
- call {:si_unique_call 3788} nVar4939 := proc131(4);
- call {:si_unique_call 3789} nVar4939 := proc131(4);
- call {:si_unique_call 3790} nVar4939 := proc131(4);
- call {:si_unique_call 3791} nVar4939 := proc131(4);
- call {:si_unique_call 3792} nVar4939 := proc131(4);
- call {:si_unique_call 3793} nVar4939 := proc131(4);
- nVar1040 := nVar4939;
- call {:si_unique_call 3794} nVar4939 := proc131(4);
- call {:si_unique_call 3795} nVar4939 := proc131(4);
- call {:si_unique_call 3796} nVar4939 := proc131(4);
- call {:si_unique_call 3797} nVar4939 := proc131(4);
- nVar1175 := nVar4939;
- call {:si_unique_call 3798} nVar4939 := proc131(4);
- call {:si_unique_call 3799} nVar4939 := proc131(4);
- call {:si_unique_call 3800} nVar4939 := proc131(4);
- call {:si_unique_call 3801} nVar4939 := proc131(4);
- call {:si_unique_call 3802} nVar4939 := proc131(4);
- call {:si_unique_call 3803} nVar4939 := proc131(4);
- call {:si_unique_call 3804} nVar4939 := proc131(4);
- call {:si_unique_call 3805} nVar4939 := proc131(4);
- call {:si_unique_call 3806} nVar4939 := proc131(4);
- call {:si_unique_call 3807} nVar4939 := proc131(4);
- call {:si_unique_call 3808} nVar4939 := proc131(4);
- call {:si_unique_call 3809} nVar4939 := proc131(4);
- call {:si_unique_call 3810} nVar4939 := proc131(4);
- call {:si_unique_call 3811} nVar4939 := proc131(4);
- call {:si_unique_call 3812} nVar4939 := proc131(8);
- call {:si_unique_call 3813} nVar4939 := proc131(4);
- call {:si_unique_call 3814} nVar4939 := proc131(4);
- call {:si_unique_call 3815} nVar4939 := proc131(4);
- call {:si_unique_call 3816} nVar4939 := proc131(4);
- call {:si_unique_call 3817} nVar4939 := proc131(4);
- call {:si_unique_call 3818} nVar4939 := proc131(4);
- call {:si_unique_call 3819} nVar4939 := proc131(4);
- call {:si_unique_call 3820} nVar4939 := proc131(4);
- nVar2103 := nVar4939;
- call {:si_unique_call 3821} nVar4939 := proc131(4);
- call {:si_unique_call 3822} nVar4939 := proc131(4);
- call {:si_unique_call 3823} nVar4939 := proc131(8);
- nVar2179 := nVar4939;
- call {:si_unique_call 3824} nVar4939 := proc131(4);
- call {:si_unique_call 3825} nVar4939 := proc131(4);
- call {:si_unique_call 3826} nVar4939 := proc131(4);
- call {:si_unique_call 3827} nVar4939 := proc131(16);
- call {:si_unique_call 3828} nVar4939 := proc131(4);
- call {:si_unique_call 3829} nVar4939 := proc131(4);
- nVar2621 := nVar4939;
- call {:si_unique_call 3830} nVar4939 := proc131(4);
- nVar2632 := nVar4939;
- call {:si_unique_call 3831} nVar4939 := proc131(4);
- call {:si_unique_call 3832} nVar4939 := proc131(4);
- call {:si_unique_call 3833} nVar4939 := proc131(4);
- nVar2754 := nVar4939;
- call {:si_unique_call 3834} nVar4939 := proc131(4);
- call {:si_unique_call 3835} nVar4939 := proc131(4);
- call {:si_unique_call 3836} nVar4939 := proc131(4);
- call {:si_unique_call 3837} nVar4939 := proc131(4);
- call {:si_unique_call 3838} nVar4939 := proc131(4);
- call {:si_unique_call 3839} nVar4939 := proc131(4);
- call {:si_unique_call 3840} nVar4939 := proc131(4);
- call {:si_unique_call 3841} nVar4939 := proc131(4);
- call {:si_unique_call 3842} nVar4939 := proc131(4);
- call {:si_unique_call 3843} nVar4939 := proc131(4);
- call {:si_unique_call 3844} nVar4939 := proc131(4);
- call {:si_unique_call 3845} nVar4939 := proc131(4);
- call {:si_unique_call 3846} nVar4939 := proc131(4);
- nVar3048 := nVar4939;
- call {:si_unique_call 3847} nVar4939 := proc131(4);
- call {:si_unique_call 3848} nVar4939 := proc131(4);
- nVar3062 := nVar4939;
- call {:si_unique_call 3849} nVar4939 := proc131(4);
- call {:si_unique_call 3850} nVar4939 := proc131(8);
- nVar3139 := nVar4939;
- call {:si_unique_call 3851} nVar4939 := proc131(4);
- call {:si_unique_call 3852} nVar4939 := proc131(60);
- call {:si_unique_call 3853} nVar4939 := proc131(4);
- call {:si_unique_call 3854} nVar4939 := proc131(8);
- call {:si_unique_call 3855} nVar4939 := proc131(4);
- call {:si_unique_call 3856} nVar4939 := proc131(4);
- call {:si_unique_call 3857} nVar4939 := proc131(4);
- call {:si_unique_call 3858} nVar4939 := proc131(28);
- call {:si_unique_call 3859} nVar4939 := proc131(4);
- call {:si_unique_call 3860} nVar4939 := proc131(4);
- call {:si_unique_call 3861} nVar4939 := proc131(8);
- call {:si_unique_call 3862} nVar4939 := proc131(4);
- call {:si_unique_call 3863} nVar4939 := proc131(4);
- call {:si_unique_call 3864} nVar4938 := proc130(8);
- call {:si_unique_call 3879} nVar4961 := proc130(16);
- call {:si_unique_call 3880} nVar4962 := proc130(56);
- call {:si_unique_call 3881} nVar4963 := proc130(72);
- call {:si_unique_call 3882} nVar4964 := proc130(192);
- call {:si_unique_call 3883} nVar4965 := proc130(56);
- call {:si_unique_call 3884} nVar4966 := proc130(336);
- call {:si_unique_call 3885} nVar4967 := proc130(76);
- call {:si_unique_call 3886} nVar4968 := proc130(8);
- call {:si_unique_call 3887} nVar4969 := proc130(112);
- call {:si_unique_call 3888} nVar4970 := proc130(76);
- call {:si_unique_call 3889} nVar4971 := proc130(164);
- call {:si_unique_call 3890} nVar4972 := proc130(324);
- call {:si_unique_call 3891} nVar4973 := proc130(140);
- call {:si_unique_call 3892} nVar4974 := proc130(308);
- call {:si_unique_call 3893} nVar4975 := proc130(8);
- call {:si_unique_call 3894} nVar4976 := proc130(92);
- call {:si_unique_call 3895} nVar4977 := proc130(124);
- call {:si_unique_call 3896} nVar4978 := proc130(280);
- call {:si_unique_call 3897} nVar4979 := proc130(252);
- call {:si_unique_call 3898} nVar4980 := proc130(84);
- call {:si_unique_call 3899} nVar4981 := proc130(32);
- call {:si_unique_call 3900} nVar4982 := proc130(92);
- call {:si_unique_call 3901} nVar4983 := proc130(104);
- call {:si_unique_call 3902} nVar4984 := proc130(284);
- call {:si_unique_call 3903} nVar4985 := proc130(340);
- call {:si_unique_call 3904} nVar4986 := proc130(64);
- call {:si_unique_call 3905} nVar4987 := proc130(368);
- call {:si_unique_call 3906} nVar4988 := proc130(300);
- call {:si_unique_call 3907} nVar4989 := proc130(176);
- call {:si_unique_call 3908} nVar4990 := proc130(8);
- call {:si_unique_call 3909} nVar4991 := proc130(96);
- call {:si_unique_call 3910} nVar4992 := proc130(304);
- call {:si_unique_call 3911} nVar4993 := proc130(272);
- call {:si_unique_call 3912} nVar4994 := proc130(288);
- call {:si_unique_call 3913} nVar4995 := proc130(180);
- call {:si_unique_call 3914} nVar4996 := proc130(192);
- call {:si_unique_call 3915} nVar4997 := proc130(136);
- call {:si_unique_call 3916} nVar4998 := proc130(376);
- call {:si_unique_call 3917} nVar4999 := proc130(140);
- call {:si_unique_call 3918} nVar5000 := proc130(96);
- call {:si_unique_call 3919} nVar5001 := proc130(172);
- call {:si_unique_call 3920} nVar5002 := proc130(184);
- call {:si_unique_call 3921} nVar5003 := proc130(252);
- call {:si_unique_call 3922} nVar5004 := proc130(276);
- call {:si_unique_call 3923} nVar5005 := proc130(104);
- call {:si_unique_call 3924} nVar5006 := proc130(16);
- call {:si_unique_call 3925} nVar5007 := proc130(296);
- call {:si_unique_call 3926} nVar5008 := proc130(112);
- call {:si_unique_call 3927} nVar5009 := proc130(4);
- call {:si_unique_call 3928} nVar5010 := proc130(48);
- call {:si_unique_call 3929} nVar5011 := proc130(44);
- call {:si_unique_call 3930} nVar5012 := proc130(56);
- call {:si_unique_call 3931} nVar5013 := proc130(312);
- call {:si_unique_call 3932} nVar5014 := proc130(100);
- call {:si_unique_call 3933} nVar5015 := proc130(104);
- call {:si_unique_call 3934} nVar5016 := proc130(48);
- call {:si_unique_call 3935} nVar5017 := proc130(104);
- call {:si_unique_call 3936} nVar5018 := proc130(100);
- call {:si_unique_call 3937} nVar5019 := proc130(292);
- call {:si_unique_call 3938} nVar5020 := proc130(156);
- call {:si_unique_call 3939} nVar5021 := proc130(96);
- call {:si_unique_call 3940} nVar5022 := proc130(156);
- call {:si_unique_call 3941} nVar5023 := proc130(288);
- call {:si_unique_call 3942} nVar5024 := proc130(176);
- call {:si_unique_call 3943} nVar5025 := proc130(80);
- call {:si_unique_call 3944} nVar5026 := proc130(24);
- call {:si_unique_call 3945} nVar5027 := proc130(360);
- call {:si_unique_call 3946} nVar5028 := proc130(184);
- call {:si_unique_call 3947} nVar5029 := proc130(132);
- call {:si_unique_call 3948} nVar5030 := proc130(112);
- call {:si_unique_call 3949} nVar5031 := proc130(132);
- call {:si_unique_call 3950} nVar5032 := proc130(236);
- call {:si_unique_call 3951} nVar5033 := proc130(56);
- call {:si_unique_call 3952} nVar5034 := proc130(292);
- call {:si_unique_call 3953} nVar347 := proc130(48);
- call {:si_unique_call 3954} nVar5035 := proc130(312);
- call {:si_unique_call 3955} nVar5036 := proc130(88);
- call {:si_unique_call 3956} nVar5037 := proc130(184);
- call {:si_unique_call 3957} nVar5038 := proc130(196);
- call {:si_unique_call 3958} nVar5039 := proc130(24);
- call {:si_unique_call 3959} nVar5040 := proc130(268);
- call {:si_unique_call 3960} nVar5041 := proc130(168);
- call {:si_unique_call 3961} nVar5042 := proc130(36);
- call {:si_unique_call 3962} nVar5043 := proc130(184);
- call {:si_unique_call 3963} nVar399 := proc130(20);
- call {:si_unique_call 3964} nVar5044 := proc130(88);
- call {:si_unique_call 3965} nVar5045 := proc130(8);
- call {:si_unique_call 3966} nVar5046 := proc130(324);
- call {:si_unique_call 3967} nVar5047 := proc130(96);
- call {:si_unique_call 3968} nVar5048 := proc130(156);
- call {:si_unique_call 3969} nVar5049 := proc130(404);
- call {:si_unique_call 3970} nVar5050 := proc130(48);
- call {:si_unique_call 3971} nVar5051 := proc130(112);
- call {:si_unique_call 3972} nVar5052 := proc130(172);
- call {:si_unique_call 3973} nVar5053 := proc130(152);
- call {:si_unique_call 3974} nVar5054 := proc130(24);
- call {:si_unique_call 3975} nVar5055 := proc130(124);
- call {:si_unique_call 3976} nVar5056 := proc130(56);
- call {:si_unique_call 3977} nVar5057 := proc130(60);
- call {:si_unique_call 3978} nVar5058 := proc130(216);
- call {:si_unique_call 3979} nVar5059 := proc130(196);
- call {:si_unique_call 3980} nVar5060 := proc130(72);
- call {:si_unique_call 3981} nVar5061 := proc130(44);
- call {:si_unique_call 3982} nVar5062 := proc130(96);
- call {:si_unique_call 3983} nVar4939 := proc130(8);
- call {:si_unique_call 3984} nVar5063 := proc130(8);
- call {:si_unique_call 3985} nVar5064 := proc130(152);
- call {:si_unique_call 3986} nVar5065 := proc130(8);
- call {:si_unique_call 3987} nVar5066 := proc130(272);
- call {:si_unique_call 3988} nVar5067 := proc130(100);
- call {:si_unique_call 3989} nVar5068 := proc130(100);
- call {:si_unique_call 3990} nVar5069 := proc130(140);
- call {:si_unique_call 3991} nVar5070 := proc130(328);
- call {:si_unique_call 3992} nVar5071 := proc130(144);
- call {:si_unique_call 3993} nVar5072 := proc130(324);
- call {:si_unique_call 3994} nVar5073 := proc130(28);
- call {:si_unique_call 3995} nVar5074 := proc130(236);
- call {:si_unique_call 3996} nVar5075 := proc130(136);
- call {:si_unique_call 3997} nVar5076 := proc130(176);
- call {:si_unique_call 3998} nVar5077 := proc130(124);
- call {:si_unique_call 3999} nVar5078 := proc130(48);
- call {:si_unique_call 4000} nVar5079 := proc130(88);
- call {:si_unique_call 4001} nVar5080 := proc130(136);
- call {:si_unique_call 4002} nVar5081 := proc130(200);
- call {:si_unique_call 4003} nVar5082 := proc130(8);
- call {:si_unique_call 4004} nVar5083 := proc130(84);
- call {:si_unique_call 4005} nVar5084 := proc130(164);
- call {:si_unique_call 4006} nVar5085 := proc130(76);
- call {:si_unique_call 4007} nVar5086 := proc130(8);
- call {:si_unique_call 4008} nVar5087 := proc130(100);
- call {:si_unique_call 4009} nVar5088 := proc130(8);
- call {:si_unique_call 4010} nVar5089 := proc130(56);
- call {:si_unique_call 4011} nVar5090 := proc130(288);
- call {:si_unique_call 4012} nVar5091 := proc130(136);
- call {:si_unique_call 4013} nVar5092 := proc130(24);
- call {:si_unique_call 4014} nVar5093 := proc130(152);
- call {:si_unique_call 4015} nVar5094 := proc130(312);
- call {:si_unique_call 4016} nVar5095 := proc130(180);
- call {:si_unique_call 4017} nVar5096 := proc130(164);
- call {:si_unique_call 4018} nVar5097 := proc130(124);
- call {:si_unique_call 4019} nVar5098 := proc130(300);
- call {:si_unique_call 4020} nVar5099 := proc130(264);
- call {:si_unique_call 4021} nVar5100 := proc130(184);
- call {:si_unique_call 4022} nVar5101 := proc130(320);
- call {:si_unique_call 4023} nVar5102 := proc130(64);
- call {:si_unique_call 4024} nVar5103 := proc130(92);
- call {:si_unique_call 4025} nVar5104 := proc130(96);
- call {:si_unique_call 4026} nVar5105 := proc130(132);
- call {:si_unique_call 4027} nVar5106 := proc130(336);
- call {:si_unique_call 4028} nVar5107 := proc130(16);
- call {:si_unique_call 4029} nVar5108 := proc130(180);
- call {:si_unique_call 4030} nVar5109 := proc130(108);
- call {:si_unique_call 4031} nVar5110 := proc130(60);
- call {:si_unique_call 4032} nVar5111 := proc130(128);
- call {:si_unique_call 4033} nVar5112 := proc130(212);
- call {:si_unique_call 4034} nVar5113 := proc130(160);
- call {:si_unique_call 4035} nVar5114 := proc130(84);
- call {:si_unique_call 4036} nVar5115 := proc130(40);
- call {:si_unique_call 4037} nVar5116 := proc130(44);
- call {:si_unique_call 4038} nVar5117 := proc130(340);
- call {:si_unique_call 4039} nVar5118 := proc130(340);
- call {:si_unique_call 4040} nVar5119 := proc130(156);
- call {:si_unique_call 4041} nVar5120 := proc130(308);
- call {:si_unique_call 4042} nVar5121 := proc130(76);
- call {:si_unique_call 4043} nVar5122 := proc130(324);
- call {:si_unique_call 4044} nVar5123 := proc130(324);
- call {:si_unique_call 4045} nVar5124 := proc130(72);
- call {:si_unique_call 4046} nVar5125 := proc130(24);
- call {:si_unique_call 4047} nVar5126 := proc130(68);
- call {:si_unique_call 4048} nVar5127 := proc130(76);
- call {:si_unique_call 4049} nVar5128 := proc130(76);
- call {:si_unique_call 4050} nVar5129 := proc130(72);
- call {:si_unique_call 4051} nVar5130 := proc130(52);
- call {:si_unique_call 4052} nVar5131 := proc130(304);
- call {:si_unique_call 4053} nVar5132 := proc130(180);
- call {:si_unique_call 4054} nVar5133 := proc130(88);
- call {:si_unique_call 4055} nVar5134 := proc130(296);
- call {:si_unique_call 4056} nVar5135 := proc130(72);
- call {:si_unique_call 4057} nVar5136 := proc130(120);
- call {:si_unique_call 4058} nVar5137 := proc130(128);
- call {:si_unique_call 4059} nVar5138 := proc130(108);
- call {:si_unique_call 4060} nVar5139 := proc130(24);
- call {:si_unique_call 4061} nVar5140 := proc130(260);
- call {:si_unique_call 4062} nVar5141 := proc130(184);
- call {:si_unique_call 4063} nVar5142 := proc130(60);
- call {:si_unique_call 4064} nVar5143 := proc130(312);
- call {:si_unique_call 4065} nVar5144 := proc130(276);
- call {:si_unique_call 4066} nVar5145 := proc130(104);
- call {:si_unique_call 4067} nVar5146 := proc130(84);
- call {:si_unique_call 4068} nVar5147 := proc130(156);
- call {:si_unique_call 4069} nVar5148 := proc130(28);
- call {:si_unique_call 4070} nVar5149 := proc130(88);
- call {:si_unique_call 4071} nVar5150 := proc130(8);
- call {:si_unique_call 4072} nVar5151 := proc130(104);
- call {:si_unique_call 4073} nVar5152 := proc130(168);
- call {:si_unique_call 4074} nVar5153 := proc130(208);
- call {:si_unique_call 4075} nVar5154 := proc130(216);
- call {:si_unique_call 4076} nVar5155 := proc130(92);
- call {:si_unique_call 4077} nVar5156 := proc130(116);
- call {:si_unique_call 4078} nVar5157 := proc130(268);
- call {:si_unique_call 4079} nVar5158 := proc130(324);
- call {:si_unique_call 4080} nVar5159 := proc130(100);
- call {:si_unique_call 4081} nVar5160 := proc130(116);
- call {:si_unique_call 4082} nVar5161 := proc130(192);
- call {:si_unique_call 4083} nVar5162 := proc130(68);
- call {:si_unique_call 4084} nVar5163 := proc130(196);
- call {:si_unique_call 4085} nVar5164 := proc130(20);
- call {:si_unique_call 4086} nVar5165 := proc130(232);
- call {:si_unique_call 4087} nVar5166 := proc130(224);
- call {:si_unique_call 4088} nVar5167 := proc130(132);
- call {:si_unique_call 4089} nVar5168 := proc130(152);
- call {:si_unique_call 4090} nVar5169 := proc130(296);
- call {:si_unique_call 4091} nVar5170 := proc130(108);
- call {:si_unique_call 4092} nVar5171 := proc130(24);
- call {:si_unique_call 4093} nVar5172 := proc130(80);
- call {:si_unique_call 4094} nVar5173 := proc130(8);
- call {:si_unique_call 4095} nVar5174 := proc130(244);
- call {:si_unique_call 4096} nVar5175 := proc130(164);
- call {:si_unique_call 4097} nVar5176 := proc130(84);
- call {:si_unique_call 4098} nVar5177 := proc130(312);
- call {:si_unique_call 4099} nVar5178 := proc130(268);
- call {:si_unique_call 4100} nVar5179 := proc130(24);
- call {:si_unique_call 4101} nVar5180 := proc130(144);
- call {:si_unique_call 4102} nVar5181 := proc130(84);
- call {:si_unique_call 4103} nVar5182 := proc130(112);
- call {:si_unique_call 4104} nVar5183 := proc130(4);
- call {:si_unique_call 4105} nVar5184 := proc130(332);
- call {:si_unique_call 4106} nVar5185 := proc130(100);
- call {:si_unique_call 4107} nVar5186 := proc130(96);
- call {:si_unique_call 4108} nVar5187 := proc130(300);
- call {:si_unique_call 4109} nVar5188 := proc130(176);
- call {:si_unique_call 4110} nVar5189 := proc130(24);
- call {:si_unique_call 4111} nVar5190 := proc130(60);
- call {:si_unique_call 4112} nVar5191 := proc130(68);
- call {:si_unique_call 4113} nVar5192 := proc130(16);
- call {:si_unique_call 4114} nVar5193 := proc130(96);
- call {:si_unique_call 4115} nVar5194 := proc130(152);
- call {:si_unique_call 4116} nVar5195 := proc130(140);
- call {:si_unique_call 4117} nVar5196 := proc130(328);
- call {:si_unique_call 4118} nVar5197 := proc130(296);
- call {:si_unique_call 4119} nVar5198 := proc130(56);
- call {:si_unique_call 4120} nVar5199 := proc130(24);
- call {:si_unique_call 4121} nVar5200 := proc130(276);
- call {:si_unique_call 4122} nVar5201 := proc130(288);
- call {:si_unique_call 4123} nVar5202 := proc130(88);
- call {:si_unique_call 4124} nVar5203 := proc130(220);
- call {:si_unique_call 4125} nVar5204 := proc130(100);
- call {:si_unique_call 4126} nVar5205 := proc130(224);
- call {:si_unique_call 4127} nVar5206 := proc130(60);
- call {:si_unique_call 4128} nVar5207 := proc130(112);
- call {:si_unique_call 4129} nVar1040 := proc130(24);
- call {:si_unique_call 4130} nVar5208 := proc130(300);
- call {:si_unique_call 4131} nVar5209 := proc130(132);
- call {:si_unique_call 4132} nVar5210 := proc130(24);
- call {:si_unique_call 4133} nVar5211 := proc130(124);
- call {:si_unique_call 4134} nVar5212 := proc130(96);
- call {:si_unique_call 4135} nVar5213 := proc130(176);
- call {:si_unique_call 4136} nVar5214 := proc130(136);
- call {:si_unique_call 4137} nVar5215 := proc130(48);
- call {:si_unique_call 4138} nVar5216 := proc130(28);
- call {:si_unique_call 4139} nVar5217 := proc130(296);
- call {:si_unique_call 4140} nVar5218 := proc130(268);
- call {:si_unique_call 4141} nVar5219 := proc130(144);
- call {:si_unique_call 4142} nVar5220 := proc130(152);
- call {:si_unique_call 4143} nVar5221 := proc130(292);
- call {:si_unique_call 4144} nVar5222 := proc130(100);
- call {:si_unique_call 4145} nVar5223 := proc130(252);
- call {:si_unique_call 4146} nVar5224 := proc130(124);
- call {:si_unique_call 4147} nVar5225 := proc130(220);
- call {:si_unique_call 4148} nVar5226 := proc130(24);
- call {:si_unique_call 4149} nVar5227 := proc130(16);
- call {:si_unique_call 4150} nVar5228 := proc130(100);
- call {:si_unique_call 4151} nVar5229 := proc130(116);
- call {:si_unique_call 4152} nVar5230 := proc130(148);
- call {:si_unique_call 4153} nVar5231 := proc130(144);
- call {:si_unique_call 4154} nVar5232 := proc130(164);
- call {:si_unique_call 4155} nVar5233 := proc130(344);
- call {:si_unique_call 4156} nVar5234 := proc130(296);
- call {:si_unique_call 4157} nVar5235 := proc130(16);
- call {:si_unique_call 4158} nVar5236 := proc130(40);
- call {:si_unique_call 4159} nVar5237 := proc130(60);
- call {:si_unique_call 4160} nVar5238 := proc130(228);
- call {:si_unique_call 4161} nVar5239 := proc130(348);
- call {:si_unique_call 4162} nVar5240 := proc130(332);
- call {:si_unique_call 4163} nVar5241 := proc130(160);
- call {:si_unique_call 4164} nVar5242 := proc130(112);
- call {:si_unique_call 4165} nVar5243 := proc130(80);
- call {:si_unique_call 4166} nVar1175 := proc130(20);
- call {:si_unique_call 4167} nVar5244 := proc130(20);
- call {:si_unique_call 4168} nVar5245 := proc130(40);
- call {:si_unique_call 4169} nVar5246 := proc130(64);
- call {:si_unique_call 4170} nVar5247 := proc130(96);
- call {:si_unique_call 4171} nVar5248 := proc130(192);
- call {:si_unique_call 4172} nVar5249 := proc130(124);
- call {:si_unique_call 4173} nVar5250 := proc130(72);
- call {:si_unique_call 4174} nVar5251 := proc130(228);
- call {:si_unique_call 4175} nVar5252 := proc130(48);
- call {:si_unique_call 4176} nVar5253 := proc130(224);
- call {:si_unique_call 4177} nVar5254 := proc130(152);
- call {:si_unique_call 4178} nVar5255 := proc130(396);
- call {:si_unique_call 4179} nVar5256 := proc130(136);
- call {:si_unique_call 4180} nVar5257 := proc130(120);
- call {:si_unique_call 4181} nVar5258 := proc130(196);
- call {:si_unique_call 4182} nVar5259 := proc130(60);
- call {:si_unique_call 4183} nVar5260 := proc130(260);
- call {:si_unique_call 4184} nVar5261 := proc130(304);
- call {:si_unique_call 4185} nVar5262 := proc130(136);
- call {:si_unique_call 4186} nVar5263 := proc130(204);
- call {:si_unique_call 4187} nVar5264 := proc130(328);
- call {:si_unique_call 4188} nVar5265 := proc130(136);
- call {:si_unique_call 4189} nVar5266 := proc130(184);
- call {:si_unique_call 4190} nVar5267 := proc130(148);
- call {:si_unique_call 4191} nVar5268 := proc130(324);
- call {:si_unique_call 4192} nVar5269 := proc130(108);
- call {:si_unique_call 4193} nVar5270 := proc130(44);
- call {:si_unique_call 4194} nVar5271 := proc130(116);
- call {:si_unique_call 4195} nVar5272 := proc130(60);
- call {:si_unique_call 4196} nVar5273 := proc130(128);
- call {:si_unique_call 4197} nVar5274 := proc130(344);
- call {:si_unique_call 4198} nVar5275 := proc130(184);
- call {:si_unique_call 4199} nVar5276 := proc130(144);
- call {:si_unique_call 4200} nVar5277 := proc130(276);
- call {:si_unique_call 4201} nVar5278 := proc130(264);
- call {:si_unique_call 4202} nVar5279 := proc130(68);
- call {:si_unique_call 4203} nVar5280 := proc130(96);
- call {:si_unique_call 4204} nVar5281 := proc130(128);
- call {:si_unique_call 4205} nVar5282 := proc130(172);
- call {:si_unique_call 4206} nVar5283 := proc130(320);
- call {:si_unique_call 4207} nVar5284 := proc130(128);
- call {:si_unique_call 4208} nVar5285 := proc130(316);
- call {:si_unique_call 4209} nVar5286 := proc130(68);
- call {:si_unique_call 4210} nVar5287 := proc130(288);
- call {:si_unique_call 4211} nVar5288 := proc130(260);
- call {:si_unique_call 4212} nVar5289 := proc130(184);
- call {:si_unique_call 4213} nVar5290 := proc130(140);
- call {:si_unique_call 4214} nVar5291 := proc130(208);
- call {:si_unique_call 4215} nVar5292 := proc130(68);
- call {:si_unique_call 4216} nVar5293 := proc130(44);
- call {:si_unique_call 4217} nVar5294 := proc130(128);
- call {:si_unique_call 4218} nVar5295 := proc130(396);
- call {:si_unique_call 4219} nVar5296 := proc130(144);
- call {:si_unique_call 4220} nVar5297 := proc130(344);
- call {:si_unique_call 4221} nVar5298 := proc130(300);
- call {:si_unique_call 4222} nVar5299 := proc130(200);
- call {:si_unique_call 4223} nVar5300 := proc130(232);
- call {:si_unique_call 4224} nVar5301 := proc130(280);
- call {:si_unique_call 4225} nVar5302 := proc130(104);
- call {:si_unique_call 4226} nVar5303 := proc130(320);
- call {:si_unique_call 4227} nVar5304 := proc130(20);
- call {:si_unique_call 4228} nVar5305 := proc130(112);
- call {:si_unique_call 4229} nVar5306 := proc130(92);
- call {:si_unique_call 4230} nVar5307 := proc130(324);
- call {:si_unique_call 4231} nVar5308 := proc130(24);
- call {:si_unique_call 4232} nVar5309 := proc130(92);
- call {:si_unique_call 4233} nVar5310 := proc130(56);
- call {:si_unique_call 4234} nVar5311 := proc130(140);
- call {:si_unique_call 4235} nVar5312 := proc130(24);
- call {:si_unique_call 4236} nVar5313 := proc130(240);
- call {:si_unique_call 4237} nVar5314 := proc130(116);
- call {:si_unique_call 4238} nVar5315 := proc130(280);
- call {:si_unique_call 4239} nVar5316 := proc130(164);
- call {:si_unique_call 4240} nVar5317 := proc130(156);
- call {:si_unique_call 4241} nVar5318 := proc130(24);
- call {:si_unique_call 4242} nVar5319 := proc130(244);
- call {:si_unique_call 4243} nVar5320 := proc130(64);
- call {:si_unique_call 4244} nVar5321 := proc130(276);
- call {:si_unique_call 4245} nVar5322 := proc130(320);
- call {:si_unique_call 4246} nVar5323 := proc130(180);
- call {:si_unique_call 4247} nVar5324 := proc130(96);
- call {:si_unique_call 4248} nVar5325 := proc130(76);
- call {:si_unique_call 4249} nVar5326 := proc130(152);
- call {:si_unique_call 4250} nVar5327 := proc130(200);
- call {:si_unique_call 4251} nVar5328 := proc130(192);
- call {:si_unique_call 4252} nVar5329 := proc130(28);
- call {:si_unique_call 4253} nVar5330 := proc130(132);
- call {:si_unique_call 4254} nVar5331 := proc130(168);
- call {:si_unique_call 4255} nVar5332 := proc130(28);
- call {:si_unique_call 4256} nVar5333 := proc130(92);
- call {:si_unique_call 4257} nVar5334 := proc130(296);
- call {:si_unique_call 4258} nVar5335 := proc130(172);
- call {:si_unique_call 4259} nVar5336 := proc130(304);
- call {:si_unique_call 4260} nVar5337 := proc130(144);
- call {:si_unique_call 4261} nVar5338 := proc130(136);
- call {:si_unique_call 4262} nVar5339 := proc130(4);
- call {:si_unique_call 4263} nVar5340 := proc130(184);
- call {:si_unique_call 4264} nVar5341 := proc130(8);
- call {:si_unique_call 4265} nVar5342 := proc130(76);
- call {:si_unique_call 4266} nVar5343 := proc130(288);
- call {:si_unique_call 4267} nVar5344 := proc130(8);
- call {:si_unique_call 4268} nVar5345 := proc130(8);
- call {:si_unique_call 4269} nVar5346 := proc130(168);
- call {:si_unique_call 4270} nVar5347 := proc130(88);
- call {:si_unique_call 4271} nVar5348 := proc130(4);
- call {:si_unique_call 4272} nVar5349 := proc130(268);
- call {:si_unique_call 4273} nVar5350 := proc130(96);
- call {:si_unique_call 4274} nVar5351 := proc130(136);
- call {:si_unique_call 4275} nVar5352 := proc130(76);
- call {:si_unique_call 4276} nVar5353 := proc130(284);
- call {:si_unique_call 4277} nVar5354 := proc130(24);
- call {:si_unique_call 4278} nVar5355 := proc130(60);
- call {:si_unique_call 4279} nVar5356 := proc130(72);
- call {:si_unique_call 4280} nVar5357 := proc130(156);
- call {:si_unique_call 4281} nVar5358 := proc130(168);
- call {:si_unique_call 4282} nVar5359 := proc130(96);
- call {:si_unique_call 4283} nVar5360 := proc130(100);
- call {:si_unique_call 4284} nVar5361 := proc130(356);
- call {:si_unique_call 4285} nVar5362 := proc130(140);
- call {:si_unique_call 4286} nVar5363 := proc130(172);
- call {:si_unique_call 4287} nVar5364 := proc130(128);
- call {:si_unique_call 4288} nVar5365 := proc130(200);
- call {:si_unique_call 4289} nVar5366 := proc130(20);
- call {:si_unique_call 4290} nVar5367 := proc130(96);
- call {:si_unique_call 4291} nVar5368 := proc130(332);
- call {:si_unique_call 4292} nVar5369 := proc130(36);
- call {:si_unique_call 4293} nVar5370 := proc130(128);
- call {:si_unique_call 4294} nVar5371 := proc130(8);
- call {:si_unique_call 4295} nVar5372 := proc130(104);
- call {:si_unique_call 4296} nVar5373 := proc130(156);
- call {:si_unique_call 4297} nVar5374 := proc130(332);
- call {:si_unique_call 4298} nVar5375 := proc130(136);
- call {:si_unique_call 4299} nVar5376 := proc130(296);
- call {:si_unique_call 4300} nVar5377 := proc130(92);
- call {:si_unique_call 4301} nVar5378 := proc130(100);
- call {:si_unique_call 4302} nVar5379 := proc130(64);
- call {:si_unique_call 4303} nVar5380 := proc130(68);
- call {:si_unique_call 4304} nVar5381 := proc130(156);
- call {:si_unique_call 4305} nVar5382 := proc130(296);
- call {:si_unique_call 4306} nVar5383 := proc130(68);
- call {:si_unique_call 4307} nVar5384 := proc130(8);
- call {:si_unique_call 4308} nVar5385 := proc130(292);
- call {:si_unique_call 4309} nVar5386 := proc130(212);
- call {:si_unique_call 4310} nVar5387 := proc130(324);
- call {:si_unique_call 4311} nVar5388 := proc130(220);
- call {:si_unique_call 4312} nVar5389 := proc130(200);
- call {:si_unique_call 4313} nVar5390 := proc130(152);
- call {:si_unique_call 4314} nVar5391 := proc130(32);
- call {:si_unique_call 4315} nVar5392 := proc130(424);
- call {:si_unique_call 4316} nVar5393 := proc130(8);
- call {:si_unique_call 4317} nVar5394 := proc130(128);
- call {:si_unique_call 4318} nVar5395 := proc130(260);
- call {:si_unique_call 4319} nVar5396 := proc130(152);
- call {:si_unique_call 4320} nVar5397 := proc130(152);
- call {:si_unique_call 4321} nVar5398 := proc130(204);
- call {:si_unique_call 4322} nVar5399 := proc130(292);
- call {:si_unique_call 4323} nVar5400 := proc130(72);
- call {:si_unique_call 4324} nVar5401 := proc130(120);
- call {:si_unique_call 4325} nVar5402 := proc130(188);
- call {:si_unique_call 4326} nVar5403 := proc130(116);
- call {:si_unique_call 4327} nVar5404 := proc130(316);
- call {:si_unique_call 4328} nVar5405 := proc130(28);
- call {:si_unique_call 4329} nVar5406 := proc130(300);
- call {:si_unique_call 4330} nVar5407 := proc130(8);
- call {:si_unique_call 4331} nVar5408 := proc130(100);
- call {:si_unique_call 4332} nVar5409 := proc130(232);
- call {:si_unique_call 4333} nVar5410 := proc130(88);
- call {:si_unique_call 4334} nVar5411 := proc130(136);
- call {:si_unique_call 4335} nVar5412 := proc130(316);
- call {:si_unique_call 4336} nVar5413 := proc130(180);
- call {:si_unique_call 4337} nVar5414 := proc130(288);
- call {:si_unique_call 4338} nVar5415 := proc130(156);
- call {:si_unique_call 4339} nVar5416 := proc130(76);
- call {:si_unique_call 4340} nVar5417 := proc130(264);
- call {:si_unique_call 4341} nVar5418 := proc130(324);
- call {:si_unique_call 4342} nVar5419 := proc130(280);
- call {:si_unique_call 4343} nVar5420 := proc130(120);
- call {:si_unique_call 4344} nVar5421 := proc130(116);
- call {:si_unique_call 4345} nVar5422 := proc130(188);
- call {:si_unique_call 4346} nVar5423 := proc130(104);
- call {:si_unique_call 4347} nVar5424 := proc130(24);
- call {:si_unique_call 4348} nVar5425 := proc130(40);
- call {:si_unique_call 4349} nVar5426 := proc130(108);
- call {:si_unique_call 4350} nVar5427 := proc130(140);
- call {:si_unique_call 4351} nVar5428 := proc130(184);
- call {:si_unique_call 4352} nVar5429 := proc130(380);
- call {:si_unique_call 4353} nVar5430 := proc130(132);
- call {:si_unique_call 4354} nVar5431 := proc130(336);
- call {:si_unique_call 4355} nVar5432 := proc130(72);
- call {:si_unique_call 4356} nVar5433 := proc130(228);
- call {:si_unique_call 4357} nVar5434 := proc130(8);
- call {:si_unique_call 4358} nVar5435 := proc130(28);
- call {:si_unique_call 4359} nVar5436 := proc130(96);
- call {:si_unique_call 4360} nVar5437 := proc130(128);
- call {:si_unique_call 4361} nVar5438 := proc130(124);
- call {:si_unique_call 4362} nVar5439 := proc130(128);
- call {:si_unique_call 4363} nVar5440 := proc130(92);
- call {:si_unique_call 4364} nVar5441 := proc130(116);
- call {:si_unique_call 4365} nVar5442 := proc130(28);
- call {:si_unique_call 4366} nVar5443 := proc130(40);
- call {:si_unique_call 4367} nVar5444 := proc130(264);
- call {:si_unique_call 4368} nVar5445 := proc130(328);
- call {:si_unique_call 4369} nVar5446 := proc130(296);
- call {:si_unique_call 4370} nVar5447 := proc130(160);
- call {:si_unique_call 4371} nVar5448 := proc130(332);
- call {:si_unique_call 4372} nVar5449 := proc130(152);
- call {:si_unique_call 4373} nVar5450 := proc130(112);
- call {:si_unique_call 4374} nVar5451 := proc130(24);
- call {:si_unique_call 4375} nVar5452 := proc130(72);
- call {:si_unique_call 4376} nVar5453 := proc130(284);
- call {:si_unique_call 4377} nVar5454 := proc130(148);
- call {:si_unique_call 4378} nVar5455 := proc130(108);
- call {:si_unique_call 4379} nVar5456 := proc130(268);
- call {:si_unique_call 4380} nVar5457 := proc130(300);
- call {:si_unique_call 4381} nVar5458 := proc130(28);
- call {:si_unique_call 4382} nVar5459 := proc130(96);
- call {:si_unique_call 4383} nVar2103 := proc130(20);
- call {:si_unique_call 4384} nVar5460 := proc130(164);
- call {:si_unique_call 4385} nVar5461 := proc130(36);
- call {:si_unique_call 4386} nVar5462 := proc130(24);
- call {:si_unique_call 4387} nVar5463 := proc130(332);
- call {:si_unique_call 4388} nVar5464 := proc130(140);
- call {:si_unique_call 4389} nVar5465 := proc130(80);
- call {:si_unique_call 4390} nVar5466 := proc130(164);
- call {:si_unique_call 4391} nVar5467 := proc130(80);
- call {:si_unique_call 4392} nVar5468 := proc130(196);
- call {:si_unique_call 4393} nVar2179 := proc130(16);
- call {:si_unique_call 4394} nVar5469 := proc130(16);
- call {:si_unique_call 4395} nVar5470 := proc130(76);
- call {:si_unique_call 4396} nVar5471 := proc130(176);
- call {:si_unique_call 4397} nVar5472 := proc130(152);
- call {:si_unique_call 4398} nVar5473 := proc130(68);
- call {:si_unique_call 4399} nVar5474 := proc130(32);
- call {:si_unique_call 4400} nVar5475 := proc130(152);
- call {:si_unique_call 4401} nVar5476 := proc130(100);
- call {:si_unique_call 4402} nVar5477 := proc130(56);
- call {:si_unique_call 4403} nVar5478 := proc130(124);
- call {:si_unique_call 4404} nVar5479 := proc130(112);
- call {:si_unique_call 4405} nVar5480 := proc130(48);
- call {:si_unique_call 4406} nVar5481 := proc130(188);
- call {:si_unique_call 4407} nVar5482 := proc130(84);
- call {:si_unique_call 4408} nVar5483 := proc130(220);
- call {:si_unique_call 4409} nVar5484 := proc130(136);
- call {:si_unique_call 4410} nVar5485 := proc130(136);
- call {:si_unique_call 4411} nVar5486 := proc130(104);
- call {:si_unique_call 4412} nVar5487 := proc130(296);
- call {:si_unique_call 4413} nVar5488 := proc130(112);
- call {:si_unique_call 4414} nVar5489 := proc130(272);
- call {:si_unique_call 4415} nVar5490 := proc130(104);
- call {:si_unique_call 4416} nVar5491 := proc130(68);
- call {:si_unique_call 4417} nVar5492 := proc130(104);
- call {:si_unique_call 4418} nVar5493 := proc130(264);
- call {:si_unique_call 4419} nVar5494 := proc130(220);
- call {:si_unique_call 4420} nVar5495 := proc130(56);
- call {:si_unique_call 4421} nVar5496 := proc130(68);
- call {:si_unique_call 4422} nVar5497 := proc130(248);
- call {:si_unique_call 4423} nVar5498 := proc130(128);
- call {:si_unique_call 4424} nVar5499 := proc130(16);
- call {:si_unique_call 4425} nVar5500 := proc130(116);
- call {:si_unique_call 4426} nVar5501 := proc130(148);
- call {:si_unique_call 4427} nVar5502 := proc130(152);
- call {:si_unique_call 4428} nVar5503 := proc130(104);
- call {:si_unique_call 4429} nVar5504 := proc130(100);
- call {:si_unique_call 4430} nVar5505 := proc130(136);
- call {:si_unique_call 4431} nVar5506 := proc130(88);
- call {:si_unique_call 4432} nVar5507 := proc130(292);
- call {:si_unique_call 4433} nVar5508 := proc130(128);
- call {:si_unique_call 4434} nVar5509 := proc130(20);
- call {:si_unique_call 4435} nVar5510 := proc130(260);
- call {:si_unique_call 4436} nVar5511 := proc130(56);
- call {:si_unique_call 4437} nVar5512 := proc130(296);
- call {:si_unique_call 4438} nVar5513 := proc130(44);
- call {:si_unique_call 4439} nVar5514 := proc130(40);
- call {:si_unique_call 4440} nVar5515 := proc130(172);
- call {:si_unique_call 4441} nVar5516 := proc130(80);
- call {:si_unique_call 4442} nVar5517 := proc130(196);
- call {:si_unique_call 4443} nVar5518 := proc130(60);
- call {:si_unique_call 4444} nVar5519 := proc130(116);
- call {:si_unique_call 4445} nVar5520 := proc130(120);
- call {:si_unique_call 4446} nVar5521 := proc130(144);
- call {:si_unique_call 4447} nVar5522 := proc130(4);
- call {:si_unique_call 4448} nVar5523 := proc130(108);
- call {:si_unique_call 4449} nVar5524 := proc130(124);
- call {:si_unique_call 4450} nVar5525 := proc130(312);
- call {:si_unique_call 4451} nVar5526 := proc130(56);
- call {:si_unique_call 4452} nVar5527 := proc130(288);
- call {:si_unique_call 4453} nVar5528 := proc130(116);
- call {:si_unique_call 4454} nVar5529 := proc130(256);
- call {:si_unique_call 4455} nVar5530 := proc130(80);
- call {:si_unique_call 4456} nVar5531 := proc130(224);
- call {:si_unique_call 4457} nVar5532 := proc130(204);
- call {:si_unique_call 4458} nVar5533 := proc130(96);
- call {:si_unique_call 4459} nVar5534 := proc130(216);
- call {:si_unique_call 4460} nVar5535 := proc130(124);
- call {:si_unique_call 4461} nVar5536 := proc130(136);
- call {:si_unique_call 4462} nVar5537 := proc130(36);
- call {:si_unique_call 4463} nVar5538 := proc130(148);
- call {:si_unique_call 4464} nVar5539 := proc130(136);
- call {:si_unique_call 4465} nVar5540 := proc130(180);
- call {:si_unique_call 4466} nVar5541 := proc130(188);
- call {:si_unique_call 4467} nVar5542 := proc130(280);
- call {:si_unique_call 4468} nVar5543 := proc130(24);
- call {:si_unique_call 4469} nVar5544 := proc130(228);
- call {:si_unique_call 4470} nVar5545 := proc130(116);
- call {:si_unique_call 4471} nVar5546 := proc130(108);
- call {:si_unique_call 4472} nVar5547 := proc130(108);
- call {:si_unique_call 4473} nVar5548 := proc130(96);
- call {:si_unique_call 4474} nVar5549 := proc130(260);
- call {:si_unique_call 4475} nVar5550 := proc130(276);
- call {:si_unique_call 4476} nVar5551 := proc130(48);
- call {:si_unique_call 4477} nVar5552 := proc130(208);
- call {:si_unique_call 4478} nVar5553 := proc130(224);
- call {:si_unique_call 4479} nVar5554 := proc130(272);
- call {:si_unique_call 4480} nVar5555 := proc130(388);
- call {:si_unique_call 4481} nVar5556 := proc130(180);
- call {:si_unique_call 4482} nVar5557 := proc130(108);
- call {:si_unique_call 4483} nVar5558 := proc130(156);
- call {:si_unique_call 4484} nVar5559 := proc130(132);
- call {:si_unique_call 4485} nVar5560 := proc130(152);
- call {:si_unique_call 4486} nVar5561 := proc130(148);
- call {:si_unique_call 4487} nVar5562 := proc130(84);
- call {:si_unique_call 4488} nVar5563 := proc130(308);
- call {:si_unique_call 4489} nVar5564 := proc130(144);
- call {:si_unique_call 4490} nVar5565 := proc130(172);
- call {:si_unique_call 4491} nVar2621 := proc130(36);
- call {:si_unique_call 4492} nVar5566 := proc130(168);
- call {:si_unique_call 4493} nVar5567 := proc130(116);
- call {:si_unique_call 4494} nVar2632 := proc130(20);
- call {:si_unique_call 4495} nVar5568 := proc130(336);
- call {:si_unique_call 4496} nVar5569 := proc130(96);
- call {:si_unique_call 4497} nVar5570 := proc130(100);
- call {:si_unique_call 4498} nVar5571 := proc130(180);
- call {:si_unique_call 4499} nVar5572 := proc130(8);
- call {:si_unique_call 4500} nVar5573 := proc130(60);
- call {:si_unique_call 4501} nVar5574 := proc130(16);
- call {:si_unique_call 4502} nVar5575 := proc130(56);
- call {:si_unique_call 4503} nVar5576 := proc130(264);
- call {:si_unique_call 4504} nVar5577 := proc130(312);
- call {:si_unique_call 4505} nVar5578 := proc130(148);
- call {:si_unique_call 4506} nVar5579 := proc130(304);
- call {:si_unique_call 4507} nVar5580 := proc130(208);
- call {:si_unique_call 4508} nVar5581 := proc130(136);
- call {:si_unique_call 4509} nVar5582 := proc130(336);
- call {:si_unique_call 4510} nVar5583 := proc130(300);
- call {:si_unique_call 4511} nVar5584 := proc130(108);
- call {:si_unique_call 4512} nVar5585 := proc130(188);
- call {:si_unique_call 4513} nVar5586 := proc130(288);
- call {:si_unique_call 4514} nVar2754 := proc130(84);
- call {:si_unique_call 4515} nVar5587 := proc130(296);
- call {:si_unique_call 4516} nVar5588 := proc130(280);
- call {:si_unique_call 4517} nVar5589 := proc130(100);
- call {:si_unique_call 4518} nVar5590 := proc130(116);
- call {:si_unique_call 4519} nVar5591 := proc130(128);
- call {:si_unique_call 4520} nVar5592 := proc130(164);
- call {:si_unique_call 4521} nVar5593 := proc130(24);
- call {:si_unique_call 4522} nVar5594 := proc130(68);
- call {:si_unique_call 4523} nVar5595 := proc130(116);
- call {:si_unique_call 4524} nVar5596 := proc130(164);
- call {:si_unique_call 4525} nVar5597 := proc130(32);
- call {:si_unique_call 4526} nVar5598 := proc130(316);
- call {:si_unique_call 4527} nVar5599 := proc130(328);
- call {:si_unique_call 4528} nVar5600 := proc130(24);
- call {:si_unique_call 4529} nVar5601 := proc130(40);
- call {:si_unique_call 4530} nVar5602 := proc130(24);
- call {:si_unique_call 4531} nVar5603 := proc130(24);
- call {:si_unique_call 4532} nVar5604 := proc130(112);
- call {:si_unique_call 4533} nVar5605 := proc130(112);
- call {:si_unique_call 4534} nVar5606 := proc130(4);
- call {:si_unique_call 4535} nVar5607 := proc130(64);
- call {:si_unique_call 4536} nVar5608 := proc130(72);
- call {:si_unique_call 4537} nVar5609 := proc130(40);
- call {:si_unique_call 4538} nVar5610 := proc130(80);
- call {:si_unique_call 4539} nVar5611 := proc130(40);
- call {:si_unique_call 4540} nVar5612 := proc130(156);
- call {:si_unique_call 4541} nVar5613 := proc130(80);
- call {:si_unique_call 4542} nVar5614 := proc130(24);
- call {:si_unique_call 4543} nVar5615 := proc130(28);
- call {:si_unique_call 4544} nVar5616 := proc130(56);
- call {:si_unique_call 4545} nVar5617 := proc130(220);
- call {:si_unique_call 4546} nVar5618 := proc130(64);
- call {:si_unique_call 4547} nVar5619 := proc130(144);
- call {:si_unique_call 4548} nVar5620 := proc130(140);
- call {:si_unique_call 4549} nVar5621 := proc130(296);
- call {:si_unique_call 4550} nVar5622 := proc130(104);
- call {:si_unique_call 4551} nVar5623 := proc130(204);
- call {:si_unique_call 4552} nVar5624 := proc130(216);
- call {:si_unique_call 4553} nVar5625 := proc130(348);
- call {:si_unique_call 4554} nVar5626 := proc130(24);
- call {:si_unique_call 4555} nVar5627 := proc130(108);
- call {:si_unique_call 4556} nVar5628 := proc130(152);
- call {:si_unique_call 4557} nVar5629 := proc130(172);
- call {:si_unique_call 4558} nVar5630 := proc130(132);
- call {:si_unique_call 4559} nVar5631 := proc130(56);
- call {:si_unique_call 4560} nVar5632 := proc130(148);
- call {:si_unique_call 4561} nVar5633 := proc130(228);
- call {:si_unique_call 4562} nVar5634 := proc130(72);
- call {:si_unique_call 4563} nVar5635 := proc130(120);
- call {:si_unique_call 4564} nVar5636 := proc130(104);
- call {:si_unique_call 4565} nVar5637 := proc130(164);
- call {:si_unique_call 4566} nVar5638 := proc130(68);
- call {:si_unique_call 4567} nVar5639 := proc130(332);
- call {:si_unique_call 4568} nVar5640 := proc130(68);
- call {:si_unique_call 4569} nVar5641 := proc130(4100);
- call {:si_unique_call 4570} nVar5642 := proc130(4100);
- call {:si_unique_call 4571} nVar5643 := proc130(24);
- call {:si_unique_call 4572} nVar5644 := proc130(52);
- call {:si_unique_call 4573} nVar5645 := proc130(68);
- call {:si_unique_call 4574} nVar5646 := proc130(168);
- call {:si_unique_call 4575} nVar5647 := proc130(72);
- call {:si_unique_call 4576} nVar5648 := proc130(308);
- call {:si_unique_call 4577} nVar5649 := proc130(8);
- call {:si_unique_call 4578} nVar5650 := proc130(308);
- call {:si_unique_call 4579} nVar5651 := proc130(236);
- call {:si_unique_call 4580} nVar5652 := proc130(340);
- call {:si_unique_call 4581} nVar5653 := proc130(300);
- call {:si_unique_call 4582} nVar3048 := proc130(140);
- call {:si_unique_call 4583} nVar5654 := proc130(124);
- call {:si_unique_call 4584} nVar5655 := proc130(152);
- call {:si_unique_call 4585} nVar5656 := proc130(268);
- call {:si_unique_call 4586} nVar5657 := proc130(64);
- call {:si_unique_call 4587} nVar3062 := proc130(16);
- call {:si_unique_call 4588} nVar5658 := proc130(184);
- call {:si_unique_call 4589} nVar5659 := proc130(288);
- call {:si_unique_call 4590} nVar5660 := proc130(204);
- call {:si_unique_call 4591} nVar5661 := proc130(104);
- call {:si_unique_call 4592} nVar5662 := proc130(16);
- call {:si_unique_call 4593} nVar5663 := proc130(188);
- call {:si_unique_call 4594} nVar5664 := proc130(20);
- call {:si_unique_call 4595} nVar5665 := proc130(200);
- call {:si_unique_call 4596} nVar5666 := proc130(112);
- call {:si_unique_call 4597} nVar5667 := proc130(4);
- call {:si_unique_call 4598} nVar5668 := proc130(180);
- call {:si_unique_call 4599} nVar5669 := proc130(168);
- call {:si_unique_call 4600} nVar5670 := proc130(84);
- call {:si_unique_call 4601} nVar5671 := proc130(284);
- call {:si_unique_call 4602} nVar3139 := proc130(16);
- call {:si_unique_call 4603} nVar5672 := proc130(324);
- call {:si_unique_call 4604} nVar5673 := proc130(64);
- call {:si_unique_call 4605} nVar5674 := proc130(124);
- call {:si_unique_call 4606} nVar5675 := proc130(96);
- call {:si_unique_call 4607} nVar5676 := proc130(40);
- call {:si_unique_call 4608} nVar5677 := proc130(144);
- call {:si_unique_call 4609} nVar5678 := proc130(116);
- call {:si_unique_call 4610} nVar5679 := proc130(252);
- call {:si_unique_call 4611} nVar5680 := proc130(32);
- call {:si_unique_call 4612} nVar5681 := proc130(100);
- call {:si_unique_call 4613} nVar5682 := proc130(68);
- call {:si_unique_call 4614} nVar5683 := proc130(152);
- call {:si_unique_call 4615} nVar5684 := proc130(84);
- call {:si_unique_call 4616} nVar5685 := proc130(188);
- call {:si_unique_call 4617} nVar5686 := proc130(20);
- call {:si_unique_call 4618} nVar5687 := proc130(80);
- call {:si_unique_call 4619} nVar5688 := proc130(344);
- call {:si_unique_call 4620} nVar5689 := proc130(316);
- call {:si_unique_call 4621} nVar5690 := proc130(308);
- call {:si_unique_call 4622} nVar5691 := proc130(92);
- call {:si_unique_call 4623} nVar5692 := proc130(352);
- call {:si_unique_call 4624} nVar5693 := proc130(96);
- call {:si_unique_call 4625} nVar5694 := proc130(336);
- call {:si_unique_call 4626} nVar5695 := proc130(152);
- call {:si_unique_call 4627} nVar5696 := proc130(380);
- call {:si_unique_call 4628} nVar5697 := proc130(340);
- call {:si_unique_call 4629} nVar5698 := proc130(120);
- call {:si_unique_call 4630} nVar5699 := proc130(292);
- call {:si_unique_call 4631} nVar5700 := proc130(432);
- call {:si_unique_call 4632} nVar5701 := proc130(172);
- call {:si_unique_call 4633} nVar5702 := proc130(300);
- call {:si_unique_call 4634} nVar5703 := proc130(244);
- call {:si_unique_call 4635} nVar5704 := proc130(88);
- call {:si_unique_call 4636} nVar5705 := proc130(116);
- call {:si_unique_call 4637} nVar5706 := proc130(40);
- call {:si_unique_call 4638} nVar5707 := proc130(144);
- call {:si_unique_call 4639} nVar5708 := proc130(316);
- call {:si_unique_call 4640} nVar5709 := proc130(136);
- call {:si_unique_call 4641} nVar5710 := proc130(136);
- call {:si_unique_call 4642} nVar5711 := proc130(296);
- call {:si_unique_call 4643} nVar5712 := proc130(204);
- call {:si_unique_call 4644} nVar5713 := proc130(72);
- call {:si_unique_call 4645} nVar5714 := proc130(96);
- call {:si_unique_call 4646} nVar5715 := proc130(72);
- call {:si_unique_call 4647} nVar5716 := proc130(100);
- call {:si_unique_call 4648} nVar5717 := proc130(136);
- call {:si_unique_call 4649} nVar5718 := proc130(80);
- call {:si_unique_call 4650} nVar5719 := proc130(244);
- call {:si_unique_call 4651} nVar5720 := proc130(88);
- call {:si_unique_call 4652} nVar5721 := proc130(32);
- call {:si_unique_call 4653} nVar5722 := proc130(112);
- call {:si_unique_call 4654} nVar5723 := proc130(96);
- call {:si_unique_call 4655} nVar5724 := proc130(292);
- call {:si_unique_call 4656} nVar5725 := proc130(168);
- call {:si_unique_call 4657} nVar5726 := proc130(336);
- call {:si_unique_call 4658} nVar5727 := proc130(280);
- call {:si_unique_call 4659} nVar5728 := proc130(48);
- call {:si_unique_call 4660} nVar5729 := proc130(88);
- call {:si_unique_call 4661} nVar5730 := proc130(24);
- call {:si_unique_call 4662} nVar5731 := proc130(44);
- call {:si_unique_call 4663} nVar5732 := proc130(16);
- call {:si_unique_call 4664} nVar5733 := proc130(288);
- call {:si_unique_call 4665} nVar5734 := proc130(240);
- call {:si_unique_call 4666} nVar5735 := proc130(104);
- call {:si_unique_call 4667} nVar5736 := proc130(268);
- call {:si_unique_call 4668} nVar5737 := proc130(140);
- call {:si_unique_call 4669} nVar5738 := proc130(8);
- call {:si_unique_call 4670} nVar5739 := proc130(360);
- call {:si_unique_call 4671} nVar5740 := proc130(332);
- call {:si_unique_call 4672} nVar5741 := proc130(140);
- call {:si_unique_call 4673} nVar5742 := proc130(140);
- call {:si_unique_call 4674} nVar5743 := proc130(128);
- call {:si_unique_call 4675} nVar5744 := proc130(272);
- call {:si_unique_call 4676} nVar5745 := proc130(48);
- call {:si_unique_call 4677} nVar5746 := proc130(136);
- call {:si_unique_call 4678} nVar5747 := proc130(144);
- call {:si_unique_call 4679} nVar5748 := proc130(208);
- call {:si_unique_call 4680} nVar5749 := proc130(4);
- call {:si_unique_call 4681} nVar5750 := proc130(8192);
- call {:si_unique_call 4682} nVar5751 := proc130(156);
- call {:si_unique_call 4683} nVar5752 := proc130(324);
- call {:si_unique_call 4684} nVar5753 := proc130(304);
- call {:si_unique_call 4685} nVar5754 := proc130(56);
- call {:si_unique_call 4686} nVar5755 := proc130(92);
- call {:si_unique_call 4687} nVar5756 := proc130(188);
- call {:si_unique_call 4688} nVar5757 := proc130(244);
- call {:si_unique_call 4689} nVar5758 := proc130(80);
- call {:si_unique_call 4690} nVar5759 := proc130(240);
- call {:si_unique_call 4691} nVar5760 := proc130(80);
- call {:si_unique_call 4692} nVar5761 := proc130(52);
- call {:si_unique_call 4693} nVar5762 := proc130(148);
- call {:si_unique_call 4694} nVar5763 := proc130(304);
- call {:si_unique_call 4695} nVar5764 := proc130(144);
- call {:si_unique_call 4696} nVar5765 := proc130(164);
- call {:si_unique_call 4697} nVar5766 := proc130(68);
- call {:si_unique_call 4698} nVar5767 := proc130(172);
- call {:si_unique_call 4699} nVar5768 := proc130(148);
- call {:si_unique_call 4700} nVar5769 := proc130(196);
- call {:si_unique_call 4701} nVar5770 := proc130(304);
- call {:si_unique_call 4702} nVar5771 := proc130(16);
- call {:si_unique_call 4703} nVar5772 := proc130(120);
- call {:si_unique_call 4704} nVar5773 := proc130(32);
- call {:si_unique_call 4705} nVar5774 := proc130(4);
- call {:si_unique_call 4706} nVar5775 := proc130(140);
- call {:si_unique_call 4707} nVar5776 := proc130(320);
- call {:si_unique_call 4708} nVar5777 := proc130(16);
- call {:si_unique_call 4709} nVar5778 := proc130(272);
- call {:si_unique_call 4710} nVar5779 := proc130(312);
- call {:si_unique_call 4711} nVar5780 := proc130(176);
- call {:si_unique_call 4712} nVar5781 := proc130(164);
- call {:si_unique_call 4713} nVar5782 := proc130(132);
- call {:si_unique_call 4714} nVar5783 := proc130(300);
- call {:si_unique_call 4715} nVar5784 := proc130(8);
- call {:si_unique_call 4716} nVar5785 := proc130(292);
- call {:si_unique_call 4717} nVar5786 := proc130(128);
- call {:si_unique_call 4718} nVar5787 := proc130(124);
- call {:si_unique_call 4719} nVar5788 := proc130(60);
- call {:si_unique_call 4720} nVar5789 := proc130(352);
- call {:si_unique_call 4721} nVar5790 := proc130(228);
- call {:si_unique_call 4722} nVar5791 := proc130(72);
- call {:si_unique_call 4723} nVar5792 := proc130(140);
- call {:si_unique_call 4724} nVar5793 := proc130(352);
- call {:si_unique_call 4725} nVar5794 := proc130(144);
- call {:si_unique_call 4726} nVar5795 := proc130(388);
- call {:si_unique_call 3877} proc65();
- call {:si_unique_call 3878} proc66();
- call {:si_unique_call 3876} proc67();
- assume nVar4938 > 0;
- call {:si_unique_call 4728} nVar4937 := proc116();
- call {:si_unique_call 3867} proc123(nVar4938, nVar4937);
- call {:si_unique_call 3869} nVar4936 := proc124(nVar4938);
- call {:si_unique_call 3871} nVar4935 := proc125(nVar4936);
- goto anon7_Then__unique__2;
-
- anon7_Then__unique__2:
- assume nVar4935 == 0;
- call {:si_unique_call 3873} proc126();
- goto anon9_Else__unique__3;
-
- anon9_Else__unique__3:
- assume nVar3711 == 1;
- goto L31__unique__4;
-
- L31__unique__4:
- goto anon8_Else__unique__5;
-
- anon8_Else__unique__5:
- assume nVar3711 == 1;
- nVar4934 := false;
- goto L_BAF_0__unique__6;
-
- L_BAF_0__unique__6:
- assume !nVar4934;
- return;
-}
-
-
-
-implementation {:entrypoint} proc63() returns (nVar5796: int, nVar5797: bool)
-{
-
- start__unique__1:
- call nVar5796, nVar5797 := proc64();
- assume {:OldAssert} !nVar5797;
- return;
-}
-
-
-
-function func0(a: int, b: int) : int;
-
-function func1(a: int, b: int) : int;
-
-function func2(a: int) : int;
-
-function func3(a: int, b: int) : int;
-
-function func4(a: int, b: int) : int;
-
-function {:inline true} func5(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func6(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func7(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func8(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func9(x: int) : int
-{
- x + 12
-}
-
-function {:inline true} func10(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func11(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func12(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func13(x: int) : int
-{
- x + 24
-}
-
-function {:inline true} func14(x: int) : int
-{
- x + 12
-}
-
-function {:inline true} func15(x: int) : int
-{
- x + 16
-}
-
-function {:inline true} func16(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func17(x: int) : int
-{
- x + 20
-}
-
-function {:inline true} func18(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func19(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func20(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func21(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func22(x: int) : int
-{
- x + 20
-}
-
-function {:inline true} func23(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func24(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func25(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func26(x: int) : int
-{
- x + 24
-}
-
-function {:inline true} func27(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func28(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func29(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func30(x: int) : int
-{
- x + 12
-}
-
-function {:inline true} func31(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func32(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func33(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func34(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func35(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func36(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func37(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func38(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func39(x: int) : int
-{
- x + 12
-}
-
-function {:inline true} func40(x: int) : int
-{
- x + 12
-}
-
-function {:inline true} func41(x: int) : int
-{
- x + 24
-}
-
-function {:inline true} func42(x: int) : int
-{
- x + 16
-}
-
-function {:inline true} func43(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func44(x: int) : int
-{
- x + 20
-}
-
-function {:inline true} func45(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func46(x: int) : int
-{
- x + 12
-}
-
-function {:inline true} func47(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func48(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func49(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func50(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func51(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func52(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func53(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func54(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func55(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func56(x: int) : int
-{
- x + 0
-}
-
-function {:inline true} func57(x: int) : int
-{
- x + 20
-}
-
-function {:inline true} func58(x: int) : int
-{
- x + 4
-}
-
-function {:inline true} func59(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func60(x: int) : int
-{
- x + 8
-}
-
-function {:inline true} func61(x: int) : int
-{
- x + 8
-}
-
-function func62(a: int) : bool;
-
-axiom (forall x: int :: { func62(x) } x == 0 || x == 1 || x == 2 || x == 4 || x == 8 || x == 16 || x == 32 || x == 64 || x == 128 || x == 256 || x == 512 || x == 1024 || x == 2048 || x == 4096 || x == 8192 || x == 16384 || x == 32768 || x == 65536 || x == 131072 || x == 262144 || x == 524288 || x == 1048576 || x == 2097152 || x == 4194304 || x == 8388608 || x == 16777216 || x == 33554432 || x == 67108864 || x == 134217728 || x == 268435456 || x == 536870912 || x == 1073741824 || x == 2147483648 || x == -2147483648 ==> func62(x));
-
-axiom (forall f: int :: { func0(0, f) } func0(0, f) == 0);
-
-axiom (forall f: int :: { func0(f, f) } func0(f, f) == f);
-
-axiom (forall f: int :: { func1(0, f) } func1(0, f) == f);
-
-axiom (forall f: int :: { func1(f, 0) } func1(f, 0) == f);
-
-axiom (forall x: int, f: int :: { func0(x, f) } func62(x) && func62(f) && x != f ==> func0(x, f) == 0);
-
-axiom (forall a: int, b: int, c: int :: { func1(a, func1(b, c)) } func1(a, func1(b, c)) == func1(func1(a, b), c));
-
-axiom (forall a: int, b: int, c: int :: { func0(a, func1(b, c)) } func0(a, func1(b, c)) == func0(func1(b, c), a));
-
-axiom (forall x: int, f1: int, f2: int :: { func0(func1(x, f1), f2) } (f1 != f2 && func62(f1) && func62(f2) ==> func0(func1(x, f1), f2) == func0(x, f2)) && (f1 == f2 ==> func0(func1(x, f1), f2) == f1));
-
-axiom (forall x: int, f1: int, f2: int :: { func0(func0(x, func2(f1)), f2) } (f1 != f2 && func62(f1) && func62(f2) ==> func0(func0(x, func2(f1)), f2) == func0(x, f2)) && (f1 == f2 && func62(f1) && func62(f2) ==> func0(func0(x, func2(f1)), f2) == 0));
-
-axiom (forall x: int, f1: int, f2: int :: { func0(func1(f1, x), f2) } (f1 != f2 && func62(f1) && func62(f2) ==> func0(func1(f1, x), f2) == func0(x, f2)) && (f1 == f2 ==> func0(func1(f1, x), f2) == f1));
-
-axiom (forall x: int, y: int, f2: int :: { func0(func0(x, y), f2) } func62(f2) ==> func0(func0(x, y), f2) == 0 || func0(func0(x, y), f2) == func0(x, f2));
-
-procedure proc130(nVar5798: int) returns (nVar5799: int);
- free requires nVar5798 >= 0;
- modifies nVar1;
- free ensures nVar5799 == old(nVar1);
- free ensures nVar1 >= old(nVar1) + nVar5798;
-
-
-
-procedure proc131(nVar5800: int) returns (nVar5801: int);
- free requires nVar5800 >= 0;
- modifies nVar1;
- free ensures nVar5801 == old(nVar1) || nVar5801 == 0;
- free ensures nVar1 >= old(nVar1) + nVar5800;
-
-
-
-procedure proc132() returns (nVar5802: int);
-
-
-
-var nVar1: int;
-
-var nVar2: int;
-
-var nVar3: int;
-
-var nVar4: int;
-
-var nVar5: int;
-
-var nVar6: int;
-
-var nVar7: int;
-
-var nVar8: int;
-
-var nVar9: int;
-
-var nVar10: int;
-
-var nVar11: int;
-
-var nVar12: int;
-
-var nVar13: int;
-
-var nVar14: int;
-
-var nVar15: int;
-
-var nVar16: int;
-
-var nVar17: int;
-
-var nVar18: int;
-
-var nVar19: int;
-
-var nVar20: int;
-
-var nVar21: int;
-
-var nVar22: int;
-
-var nVar23: int;
-
-var nVar24: int;
-
-var nVar25: int;
-
-var nVar26: int;
-
-var nVar27: int;
-
-var nVar28: int;
-
-var nVar29: int;
-
-var nVar30: int;
-
-var nVar31: int;
-
-var nVar32: int;
-
-var nVar33: int;
-
-var nVar34: int;
-
-var nVar35: int;
-
-var nVar36: int;
-
-var nVar37: int;
-
-var nVar38: int;
-
-var nVar39: int;
-
-var nVar40: int;
-
-var nVar41: int;
-
-var nVar42: int;
-
-var nVar43: int;
-
-var nVar44: int;
-
-var nVar45: int;
-
-var nVar46: int;
-
-var nVar47: int;
-
-var nVar48: int;
-
-var nVar49: int;
-
-var nVar50: int;
-
-var nVar51: int;
-
-var nVar52: int;
-
-var nVar53: int;
-
-var nVar54: int;
-
-var nVar55: int;
-
-var nVar56: int;
-
-var nVar57: int;
-
-var nVar58: int;
-
-var nVar59: int;
-
-var nVar60: int;
-
-var nVar61: int;
-
-var nVar62: int;
-
-var nVar63: int;
-
-var nVar64: int;
-
-var nVar65: int;
-
-var nVar66: int;
-
-var nVar67: int;
-
-var nVar68: int;
-
-var nVar69: int;
-
-var nVar70: int;
-
-var nVar71: int;
-
-var nVar72: int;
-
-var nVar73: int;
-
-var nVar74: int;
-
-var nVar75: int;
-
-var nVar76: int;
-
-var nVar77: int;
-
-var nVar78: int;
-
-var nVar79: int;
-
-var nVar80: int;
-
-var nVar81: int;
-
-var nVar82: int;
-
-var nVar83: int;
-
-var nVar84: int;
-
-var nVar85: int;
-
-var nVar86: int;
-
-var nVar87: int;
-
-var nVar88: int;
-
-var nVar89: int;
-
-var nVar90: int;
-
-var nVar91: int;
-
-var nVar92: int;
-
-var nVar93: int;
-
-var nVar94: int;
-
-var nVar95: int;
-
-var nVar96: int;
-
-var nVar97: int;
-
-var nVar98: int;
-
-var nVar99: int;
-
-var nVar100: int;
-
-var nVar101: int;
-
-var nVar102: int;
-
-var nVar103: int;
-
-var nVar104: int;
-
-var nVar105: int;
-
-var nVar106: int;
-
-var nVar107: int;
-
-var nVar108: int;
-
-var nVar109: int;
-
-var nVar110: int;
-
-var nVar111: int;
-
-var nVar112: int;
-
-var nVar113: int;
-
-var nVar114: int;
-
-var nVar115: int;
-
-var nVar116: int;
-
-var nVar117: int;
-
-var nVar118: int;
-
-var nVar119: int;
-
-var nVar120: int;
-
-var nVar121: int;
-
-var nVar122: int;
-
-var nVar123: int;
-
-var nVar124: int;
-
-var nVar125: int;
-
-var nVar126: int;
-
-var nVar127: int;
-
-var nVar128: int;
-
-var nVar129: int;
-
-var nVar130: int;
-
-var nVar131: int;
-
-var nVar132: int;
-
-var nVar133: int;
-
-var nVar134: int;
-
-var nVar135: int;
-
-var nVar136: int;
-
-var nVar137: int;
-
-var nVar138: int;
-
-var nVar139: int;
-
-var nVar140: int;
-
-var nVar141: int;
-
-var nVar142: int;
-
-var nVar143: int;
-
-var nVar144: int;
-
-var nVar145: int;
-
-var nVar146: int;
-
-var nVar147: int;
-
-var nVar148: int;
-
-var nVar149: int;
-
-var nVar150: int;
-
-var nVar151: int;
-
-var nVar152: int;
-
-var nVar153: int;
-
-var nVar154: int;
-
-var nVar155: int;
-
-var nVar156: int;
-
-var nVar157: int;
-
-var nVar158: int;
-
-var nVar159: int;
-
-var nVar160: int;
-
-var nVar161: int;
-
-var nVar162: int;
-
-var nVar163: int;
-
-var nVar164: int;
-
-var nVar165: int;
-
-var nVar166: int;
-
-var nVar167: int;
-
-var nVar168: int;
-
-var nVar169: int;
-
-var nVar170: int;
-
-var nVar171: int;
-
-var nVar172: int;
-
-var nVar173: int;
-
-var nVar174: int;
-
-var nVar175: int;
-
-var nVar176: int;
-
-var nVar177: int;
-
-var nVar178: int;
-
-var nVar179: int;
-
-var nVar180: int;
-
-var nVar181: int;
-
-var nVar182: int;
-
-var nVar183: int;
-
-var nVar184: int;
-
-var nVar185: int;
-
-var nVar186: int;
-
-var nVar187: int;
-
-var nVar188: int;
-
-var nVar189: int;
-
-var nVar190: int;
-
-var nVar191: int;
-
-var nVar192: int;
-
-var nVar193: int;
-
-var nVar194: int;
-
-var nVar195: int;
-
-var nVar196: int;
-
-var nVar197: int;
-
-var nVar198: int;
-
-var nVar199: int;
-
-var nVar200: int;
-
-var nVar201: int;
-
-var nVar202: int;
-
-var nVar203: int;
-
-var nVar204: int;
-
-var nVar205: int;
-
-var nVar206: int;
-
-var nVar207: int;
-
-var nVar208: int;
-
-var nVar209: int;
-
-var nVar210: int;
-
-var nVar211: int;
-
-var nVar212: int;
-
-var nVar213: int;
-
-var nVar214: int;
-
-var nVar215: int;
-
-var nVar216: int;
-
-var nVar217: int;
-
-var nVar218: int;
-
-var nVar219: int;
-
-var nVar220: int;
-
-var nVar221: int;
-
-var nVar222: int;
-
-var nVar223: int;
-
-var nVar224: int;
-
-var nVar225: int;
-
-var nVar226: int;
-
-var nVar227: int;
-
-var nVar228: int;
-
-var nVar229: int;
-
-var nVar230: int;
-
-var nVar231: int;
-
-var nVar232: int;
-
-var nVar233: int;
-
-var nVar234: int;
-
-var nVar235: int;
-
-var nVar236: int;
-
-var nVar237: int;
-
-var nVar238: int;
-
-var nVar239: int;
-
-var nVar240: int;
-
-var nVar241: int;
-
-var nVar242: int;
-
-var nVar243: int;
-
-var nVar244: int;
-
-var nVar245: int;
-
-var nVar246: int;
-
-var nVar247: int;
-
-var nVar248: int;
-
-var nVar249: int;
-
-var nVar250: int;
-
-var nVar251: int;
-
-var nVar252: int;
-
-var nVar253: int;
-
-var nVar254: int;
-
-var nVar255: int;
-
-var nVar256: int;
-
-var nVar257: int;
-
-var nVar258: int;
-
-var nVar259: int;
-
-var nVar260: int;
-
-var nVar261: int;
-
-var nVar262: int;
-
-var nVar263: int;
-
-var nVar264: int;
-
-var nVar265: int;
-
-var nVar266: int;
-
-var nVar267: int;
-
-var nVar268: int;
-
-var nVar269: int;
-
-var nVar270: int;
-
-var nVar271: int;
-
-var nVar272: int;
-
-var nVar273: int;
-
-var nVar274: int;
-
-var nVar275: int;
-
-var nVar276: int;
-
-var nVar277: int;
-
-var nVar278: int;
-
-var nVar279: int;
-
-var nVar280: int;
-
-var nVar281: int;
-
-var nVar282: int;
-
-var nVar283: int;
-
-var nVar284: int;
-
-var nVar285: int;
-
-var nVar286: int;
-
-var nVar287: int;
-
-var nVar288: int;
-
-var nVar289: int;
-
-var nVar290: int;
-
-var nVar291: int;
-
-var nVar292: int;
-
-var nVar293: int;
-
-var nVar294: int;
-
-var nVar295: int;
-
-var nVar296: int;
-
-var nVar297: int;
-
-var nVar298: int;
-
-var nVar299: int;
-
-var nVar300: int;
-
-var nVar301: int;
-
-var nVar302: int;
-
-var nVar303: int;
-
-var nVar304: int;
-
-var nVar305: int;
-
-var nVar306: int;
-
-var nVar307: int;
-
-var nVar308: int;
-
-var nVar309: int;
-
-var nVar310: int;
-
-var nVar311: int;
-
-var nVar312: int;
-
-var nVar313: int;
-
-var nVar314: int;
-
-var nVar315: int;
-
-var nVar316: int;
-
-var nVar317: int;
-
-var nVar318: int;
-
-var nVar319: int;
-
-var nVar320: int;
-
-var nVar321: int;
-
-var nVar322: int;
-
-var nVar323: int;
-
-var nVar324: int;
-
-var nVar325: int;
-
-var nVar326: int;
-
-var nVar327: int;
-
-var nVar328: int;
-
-var nVar329: int;
-
-var nVar330: int;
-
-var nVar331: int;
-
-var nVar332: int;
-
-var nVar333: int;
-
-var nVar334: int;
-
-var nVar335: int;
-
-var nVar336: int;
-
-var nVar337: int;
-
-var nVar338: int;
-
-var nVar339: int;
-
-var nVar340: int;
-
-var nVar341: int;
-
-var nVar342: int;
-
-var nVar343: int;
-
-var nVar344: int;
-
-var nVar345: int;
-
-var nVar346: int;
-
-var nVar347: int;
-
-var nVar348: int;
-
-var nVar349: int;
-
-var nVar350: int;
-
-var nVar351: int;
-
-var nVar352: int;
-
-var nVar353: int;
-
-var nVar354: int;
-
-var nVar355: int;
-
-var nVar356: int;
-
-var nVar357: int;
-
-var nVar358: int;
-
-var nVar359: int;
-
-var nVar360: int;
-
-var nVar361: int;
-
-var nVar362: int;
-
-var nVar363: int;
-
-var nVar364: int;
-
-var nVar365: int;
-
-var nVar366: int;
-
-var nVar367: int;
-
-var nVar368: int;
-
-var nVar369: int;
-
-var nVar370: int;
-
-var nVar371: int;
-
-var nVar372: int;
-
-var nVar373: int;
-
-var nVar374: int;
-
-var nVar375: int;
-
-var nVar376: int;
-
-var nVar377: int;
-
-var nVar378: int;
-
-var nVar379: int;
-
-var nVar380: int;
-
-var nVar381: int;
-
-var nVar382: int;
-
-var nVar383: int;
-
-var nVar384: int;
-
-var nVar385: int;
-
-var nVar386: int;
-
-var nVar387: int;
-
-var nVar388: int;
-
-var nVar389: int;
-
-var nVar390: int;
-
-var nVar391: int;
-
-var nVar392: int;
-
-var nVar393: int;
-
-var nVar394: int;
-
-var nVar395: int;
-
-var nVar396: int;
-
-var nVar397: int;
-
-var nVar398: int;
-
-var nVar399: int;
-
-var nVar400: int;
-
-var nVar401: int;
-
-var nVar402: int;
-
-var nVar403: int;
-
-var nVar404: int;
-
-var nVar405: int;
-
-var nVar406: int;
-
-var nVar407: int;
-
-var nVar408: int;
-
-var nVar409: int;
-
-var nVar410: int;
-
-var nVar411: int;
-
-var nVar412: int;
-
-var nVar413: int;
-
-var nVar414: int;
-
-var nVar415: int;
-
-var nVar416: int;
-
-var nVar417: int;
-
-var nVar418: int;
-
-var nVar419: int;
-
-var nVar420: int;
-
-var nVar421: int;
-
-var nVar422: int;
-
-var nVar423: int;
-
-var nVar424: int;
-
-var nVar425: int;
-
-var nVar426: int;
-
-var nVar427: int;
-
-var nVar428: int;
-
-var nVar429: int;
-
-var nVar430: int;
-
-var nVar431: int;
-
-var nVar432: int;
-
-var nVar433: int;
-
-var nVar434: int;
-
-var nVar435: int;
-
-var nVar436: int;
-
-var nVar437: int;
-
-var nVar438: int;
-
-var nVar439: int;
-
-var nVar440: int;
-
-var nVar441: int;
-
-var nVar442: int;
-
-var nVar443: int;
-
-var nVar444: int;
-
-var nVar445: int;
-
-var nVar446: int;
-
-var nVar447: int;
-
-var nVar448: int;
-
-var nVar449: int;
-
-var nVar450: int;
-
-var nVar451: int;
-
-var nVar452: int;
-
-var nVar453: int;
-
-var nVar454: int;
-
-var nVar455: int;
-
-var nVar456: int;
-
-var nVar457: int;
-
-var nVar458: int;
-
-var nVar459: int;
-
-var nVar460: int;
-
-var nVar461: int;
-
-var nVar462: int;
-
-var nVar463: int;
-
-var nVar464: int;
-
-var nVar465: int;
-
-var nVar466: int;
-
-var nVar467: int;
-
-var nVar468: int;
-
-var nVar469: int;
-
-var nVar470: int;
-
-var nVar471: int;
-
-var nVar472: int;
-
-var nVar473: int;
-
-var nVar474: int;
-
-var nVar475: int;
-
-var nVar476: int;
-
-var nVar477: int;
-
-var nVar478: int;
-
-var nVar479: int;
-
-var nVar480: int;
-
-var nVar481: int;
-
-var nVar482: int;
-
-var nVar483: int;
-
-var nVar484: int;
-
-var nVar485: int;
-
-var nVar486: int;
-
-var nVar487: int;
-
-var nVar488: int;
-
-var nVar489: int;
-
-var nVar490: int;
-
-var nVar491: int;
-
-var nVar492: int;
-
-var nVar493: int;
-
-var nVar494: int;
-
-var nVar495: int;
-
-var nVar496: int;
-
-var nVar497: int;
-
-var nVar498: int;
-
-var nVar499: int;
-
-var nVar500: int;
-
-var nVar501: int;
-
-var nVar502: int;
-
-var nVar503: int;
-
-var nVar504: int;
-
-var nVar505: int;
-
-var nVar506: int;
-
-var nVar507: int;
-
-var nVar508: int;
-
-var nVar509: int;
-
-var nVar510: int;
-
-var nVar511: int;
-
-var nVar512: int;
-
-var nVar513: int;
-
-var nVar514: int;
-
-var nVar515: int;
-
-var nVar516: int;
-
-var nVar517: int;
-
-var nVar518: int;
-
-var nVar519: int;
-
-var nVar520: int;
-
-var nVar521: int;
-
-var nVar522: int;
-
-var nVar523: int;
-
-var nVar524: int;
-
-var nVar525: int;
-
-var nVar526: int;
-
-var nVar527: int;
-
-var nVar528: int;
-
-var nVar529: int;
-
-var nVar530: int;
-
-var nVar531: int;
-
-var nVar532: int;
-
-var nVar533: int;
-
-var nVar534: int;
-
-var nVar535: int;
-
-var nVar536: int;
-
-var nVar537: int;
-
-var nVar538: int;
-
-var nVar539: int;
-
-var nVar540: int;
-
-var nVar541: int;
-
-var nVar542: int;
-
-var nVar543: int;
-
-var nVar544: int;
-
-var nVar545: int;
-
-var nVar546: int;
-
-var nVar547: int;
-
-var nVar548: int;
-
-var nVar549: int;
-
-var nVar550: int;
-
-var nVar551: int;
-
-var nVar552: int;
-
-var nVar553: int;
-
-var nVar554: int;
-
-var nVar555: int;
-
-var nVar556: int;
-
-var nVar557: int;
-
-var nVar558: int;
-
-var nVar559: int;
-
-var nVar560: int;
-
-var nVar561: int;
-
-var nVar562: int;
-
-var nVar563: int;
-
-var nVar564: int;
-
-var nVar565: int;
-
-var nVar566: int;
-
-var nVar567: int;
-
-var nVar568: int;
-
-var nVar569: int;
-
-var nVar570: int;
-
-var nVar571: int;
-
-var nVar572: int;
-
-var nVar573: int;
-
-var nVar574: int;
-
-var nVar575: int;
-
-var nVar576: int;
-
-var nVar577: int;
-
-var nVar578: int;
-
-var nVar579: int;
-
-var nVar580: int;
-
-var nVar581: int;
-
-var nVar582: int;
-
-var nVar583: int;
-
-var nVar584: int;
-
-var nVar585: int;
-
-var nVar586: int;
-
-var nVar587: int;
-
-var nVar588: int;
-
-var nVar589: int;
-
-var nVar590: int;
-
-var nVar591: int;
-
-var nVar592: int;
-
-var nVar593: int;
-
-var nVar594: int;
-
-var nVar595: int;
-
-var nVar596: int;
-
-var nVar597: int;
-
-var nVar598: int;
-
-var nVar599: int;
-
-var nVar600: int;
-
-var nVar601: int;
-
-var nVar602: int;
-
-var nVar603: int;
-
-var nVar604: int;
-
-var nVar605: int;
-
-var nVar606: int;
-
-var nVar607: int;
-
-var nVar608: int;
-
-var nVar609: int;
-
-var nVar610: int;
-
-var nVar611: int;
-
-var nVar612: int;
-
-var nVar613: int;
-
-var nVar614: int;
-
-var nVar615: int;
-
-var nVar616: int;
-
-var nVar617: int;
-
-var nVar618: int;
-
-var nVar619: int;
-
-var nVar620: int;
-
-var nVar621: int;
-
-var nVar622: int;
-
-var nVar623: int;
-
-var nVar624: int;
-
-var nVar625: int;
-
-var nVar626: int;
-
-var nVar627: int;
-
-var nVar628: int;
-
-var nVar629: int;
-
-var nVar630: int;
-
-var nVar631: int;
-
-var nVar632: int;
-
-var nVar633: int;
-
-var nVar634: int;
-
-var nVar635: int;
-
-var nVar636: int;
-
-var nVar637: int;
-
-var nVar638: int;
-
-var nVar639: int;
-
-var nVar640: int;
-
-var nVar641: int;
-
-var nVar642: int;
-
-var nVar643: int;
-
-var nVar644: int;
-
-var nVar645: int;
-
-var nVar646: int;
-
-var nVar647: int;
-
-var nVar648: int;
-
-var nVar649: int;
-
-var nVar650: int;
-
-var nVar651: int;
-
-var nVar652: int;
-
-var nVar653: int;
-
-var nVar654: int;
-
-var nVar655: int;
-
-var nVar656: int;
-
-var nVar657: int;
-
-var nVar658: int;
-
-var nVar659: int;
-
-var nVar660: int;
-
-var nVar661: int;
-
-var nVar662: int;
-
-var nVar663: int;
-
-var nVar664: int;
-
-var nVar665: int;
-
-var nVar666: int;
-
-var nVar667: int;
-
-var nVar668: int;
-
-var nVar669: int;
-
-var nVar670: int;
-
-var nVar671: int;
-
-var nVar672: int;
-
-var nVar673: int;
-
-var nVar674: int;
-
-var nVar675: int;
-
-var nVar676: int;
-
-var nVar677: int;
-
-var nVar678: int;
-
-var nVar679: int;
-
-var nVar680: int;
-
-var nVar681: int;
-
-var nVar682: int;
-
-var nVar683: int;
-
-var nVar684: int;
-
-var nVar685: int;
-
-var nVar686: int;
-
-var nVar687: int;
-
-var nVar688: int;
-
-var nVar689: int;
-
-var nVar690: int;
-
-var nVar691: int;
-
-var nVar692: int;
-
-var nVar693: int;
-
-var nVar694: int;
-
-var nVar695: int;
-
-var nVar696: int;
-
-var nVar697: int;
-
-var nVar698: int;
-
-var nVar699: int;
-
-var nVar700: int;
-
-var nVar701: int;
-
-var nVar702: int;
-
-var nVar703: int;
-
-var nVar704: int;
-
-var nVar705: int;
-
-var nVar706: int;
-
-var nVar707: int;
-
-var nVar708: int;
-
-var nVar709: int;
-
-var nVar710: int;
-
-var nVar711: int;
-
-var nVar712: int;
-
-var nVar713: int;
-
-var nVar714: int;
-
-var nVar715: int;
-
-var nVar716: int;
-
-var nVar717: int;
-
-var nVar718: int;
-
-var nVar719: int;
-
-var nVar720: int;
-
-var nVar721: int;
-
-var nVar722: int;
-
-var nVar723: int;
-
-var nVar724: int;
-
-var nVar725: int;
-
-var nVar726: int;
-
-var nVar727: int;
-
-var nVar728: int;
-
-var nVar729: int;
-
-var nVar730: int;
-
-var nVar731: int;
-
-var nVar732: int;
-
-var nVar733: int;
-
-var nVar734: int;
-
-var nVar735: int;
-
-var nVar736: int;
-
-var nVar737: int;
-
-var nVar738: int;
-
-var nVar739: int;
-
-var nVar740: int;
-
-var nVar741: int;
-
-var nVar742: int;
-
-var nVar743: int;
-
-var nVar744: int;
-
-var nVar745: int;
-
-var nVar746: int;
-
-var nVar747: int;
-
-var nVar748: int;
-
-var nVar749: int;
-
-var nVar750: int;
-
-var nVar751: int;
-
-var nVar752: int;
-
-var nVar753: int;
-
-var nVar754: int;
-
-var nVar755: int;
-
-var nVar756: int;
-
-var nVar757: int;
-
-var nVar758: int;
-
-var nVar759: int;
-
-var nVar760: int;
-
-var nVar761: int;
-
-var nVar762: int;
-
-var nVar763: int;
-
-var nVar764: int;
-
-var nVar765: int;
-
-var nVar766: int;
-
-var nVar767: int;
-
-var nVar768: int;
-
-var nVar769: int;
-
-var nVar770: int;
-
-var nVar771: int;
-
-var nVar772: int;
-
-var nVar773: int;
-
-var nVar774: int;
-
-var nVar775: int;
-
-var nVar776: int;
-
-var nVar777: int;
-
-var nVar778: int;
-
-var nVar779: int;
-
-var nVar780: int;
-
-var nVar781: int;
-
-var nVar782: int;
-
-var nVar783: int;
-
-var nVar784: int;
-
-var nVar785: int;
-
-var nVar786: int;
-
-var nVar787: int;
-
-var nVar788: int;
-
-var nVar789: int;
-
-var nVar790: int;
-
-var nVar791: int;
-
-var nVar792: int;
-
-var nVar793: int;
-
-var nVar794: int;
-
-var nVar795: int;
-
-var nVar796: int;
-
-var nVar797: int;
-
-var nVar798: int;
-
-var nVar799: int;
-
-var nVar800: int;
-
-var nVar801: int;
-
-var nVar802: int;
-
-var nVar803: int;
-
-var nVar804: int;
-
-var nVar805: int;
-
-var nVar806: int;
-
-var nVar807: int;
-
-var nVar808: int;
-
-var nVar809: int;
-
-var nVar810: int;
-
-var nVar811: int;
-
-var nVar812: int;
-
-var nVar813: int;
-
-var nVar814: int;
-
-var nVar815: int;
-
-var nVar816: int;
-
-var nVar817: int;
-
-var nVar818: int;
-
-var nVar819: int;
-
-var nVar820: int;
-
-var nVar821: int;
-
-var nVar822: int;
-
-var nVar823: int;
-
-var nVar824: int;
-
-var nVar825: int;
-
-var nVar826: int;
-
-var nVar827: int;
-
-var nVar828: int;
-
-var nVar829: int;
-
-var nVar830: int;
-
-var nVar831: int;
-
-var nVar832: int;
-
-var nVar833: int;
-
-var nVar834: int;
-
-var nVar835: int;
-
-var nVar836: int;
-
-var nVar837: int;
-
-var nVar838: int;
-
-var nVar839: int;
-
-var nVar840: int;
-
-var nVar841: int;
-
-var nVar842: int;
-
-var nVar843: int;
-
-var nVar844: int;
-
-var nVar845: int;
-
-var nVar846: int;
-
-var nVar847: int;
-
-var nVar848: int;
-
-var nVar849: int;
-
-var nVar850: int;
-
-var nVar851: int;
-
-var nVar852: int;
-
-var nVar853: int;
-
-var nVar854: int;
-
-var nVar855: int;
-
-var nVar856: int;
-
-var nVar857: int;
-
-var nVar858: int;
-
-var nVar859: int;
-
-var nVar860: int;
-
-var nVar861: int;
-
-var nVar862: int;
-
-var nVar863: int;
-
-var nVar864: int;
-
-var nVar865: int;
-
-var nVar866: int;
-
-var nVar867: int;
-
-var nVar868: int;
-
-var nVar869: int;
-
-var nVar870: int;
-
-var nVar871: int;
-
-var nVar872: int;
-
-var nVar873: int;
-
-var nVar874: int;
-
-var nVar875: int;
-
-var nVar876: int;
-
-var nVar877: int;
-
-var nVar878: int;
-
-var nVar879: int;
-
-var nVar880: int;
-
-var nVar881: int;
-
-var nVar882: int;
-
-var nVar883: int;
-
-var nVar884: int;
-
-var nVar885: int;
-
-var nVar886: int;
-
-var nVar887: int;
-
-var nVar888: int;
-
-var nVar889: int;
-
-var nVar890: int;
-
-var nVar891: int;
-
-var nVar892: int;
-
-var nVar893: int;
-
-var nVar894: int;
-
-var nVar895: int;
-
-var nVar896: int;
-
-var nVar897: int;
-
-var nVar898: int;
-
-var nVar899: int;
-
-var nVar900: int;
-
-var nVar901: int;
-
-var nVar902: int;
-
-var nVar903: int;
-
-var nVar904: int;
-
-var nVar905: int;
-
-var nVar906: int;
-
-var nVar907: int;
-
-var nVar908: int;
-
-var nVar909: int;
-
-var nVar910: int;
-
-var nVar911: int;
-
-var nVar912: int;
-
-var nVar913: int;
-
-var nVar914: int;
-
-var nVar915: int;
-
-var nVar916: int;
-
-var nVar917: int;
-
-var nVar918: int;
-
-var nVar919: int;
-
-var nVar920: int;
-
-var nVar921: int;
-
-var nVar922: int;
-
-var nVar923: int;
-
-var nVar924: int;
-
-var nVar925: int;
-
-var nVar926: int;
-
-var nVar927: int;
-
-var nVar928: int;
-
-var nVar929: int;
-
-var nVar930: int;
-
-var nVar931: int;
-
-var nVar932: int;
-
-var nVar933: int;
-
-var nVar934: int;
-
-var nVar935: int;
-
-var nVar936: int;
-
-var nVar937: int;
-
-var nVar938: int;
-
-var nVar939: int;
-
-var nVar940: int;
-
-var nVar941: int;
-
-var nVar942: int;
-
-var nVar943: int;
-
-var nVar944: int;
-
-var nVar945: int;
-
-var nVar946: int;
-
-var nVar947: int;
-
-var nVar948: int;
-
-var nVar949: int;
-
-var nVar950: int;
-
-var nVar951: int;
-
-var nVar952: int;
-
-var nVar953: int;
-
-var nVar954: int;
-
-var nVar955: int;
-
-var nVar956: int;
-
-var nVar957: int;
-
-var nVar958: int;
-
-var nVar959: int;
-
-var nVar960: int;
-
-var nVar961: int;
-
-var nVar962: int;
-
-var nVar963: int;
-
-var nVar964: int;
-
-var nVar965: int;
-
-var nVar966: int;
-
-var nVar967: int;
-
-var nVar968: int;
-
-var nVar969: int;
-
-var nVar970: int;
-
-var nVar971: int;
-
-var nVar972: int;
-
-var nVar973: int;
-
-var nVar974: int;
-
-var nVar975: int;
-
-var nVar976: int;
-
-var nVar977: int;
-
-var nVar978: int;
-
-var nVar979: int;
-
-var nVar980: int;
-
-var nVar981: int;
-
-var nVar982: int;
-
-var nVar983: int;
-
-var nVar984: int;
-
-var nVar985: int;
-
-var nVar986: int;
-
-var nVar987: int;
-
-var nVar988: int;
-
-var nVar989: int;
-
-var nVar990: int;
-
-var nVar991: int;
-
-var nVar992: int;
-
-var nVar993: int;
-
-var nVar994: int;
-
-var nVar995: int;
-
-var nVar996: int;
-
-var nVar997: int;
-
-var nVar998: int;
-
-var nVar999: int;
-
-var nVar1000: int;
-
-var nVar1001: int;
-
-var nVar1002: int;
-
-var nVar1003: int;
-
-var nVar1004: int;
-
-var nVar1005: int;
-
-var nVar1006: int;
-
-var nVar1007: int;
-
-var nVar1008: int;
-
-var nVar1009: int;
-
-var nVar1010: int;
-
-var nVar1011: int;
-
-var nVar1012: int;
-
-var nVar1013: int;
-
-var nVar1014: int;
-
-var nVar1015: int;
-
-var nVar1016: int;
-
-var nVar1017: int;
-
-var nVar1018: int;
-
-var nVar1019: int;
-
-var nVar1020: int;
-
-var nVar1021: int;
-
-var nVar1022: int;
-
-var nVar1023: int;
-
-var nVar1024: int;
-
-var nVar1025: int;
-
-var nVar1026: int;
-
-var nVar1027: int;
-
-var nVar1028: int;
-
-var nVar1029: int;
-
-var nVar1030: int;
-
-var nVar1031: int;
-
-var nVar1032: int;
-
-var nVar1033: int;
-
-var nVar1034: int;
-
-var nVar1035: int;
-
-var nVar1036: int;
-
-var nVar1037: int;
-
-var nVar1038: int;
-
-var nVar1039: int;
-
-var nVar1040: int;
-
-var nVar1041: int;
-
-var nVar1042: int;
-
-var nVar1043: int;
-
-var nVar1044: int;
-
-var nVar1045: int;
-
-var nVar1046: int;
-
-var nVar1047: int;
-
-var nVar1048: int;
-
-var nVar1049: int;
-
-var nVar1050: int;
-
-var nVar1051: int;
-
-var nVar1052: int;
-
-var nVar1053: int;
-
-var nVar1054: int;
-
-var nVar1055: int;
-
-var nVar1056: int;
-
-var nVar1057: int;
-
-var nVar1058: int;
-
-var nVar1059: int;
-
-var nVar1060: int;
-
-var nVar1061: int;
-
-var nVar1062: int;
-
-var nVar1063: int;
-
-var nVar1064: int;
-
-var nVar1065: int;
-
-var nVar1066: int;
-
-var nVar1067: int;
-
-var nVar1068: int;
-
-var nVar1069: int;
-
-var nVar1070: int;
-
-var nVar1071: int;
-
-var nVar1072: int;
-
-var nVar1073: int;
-
-var nVar1074: int;
-
-var nVar1075: int;
-
-var nVar1076: int;
-
-var nVar1077: int;
-
-var nVar1078: int;
-
-var nVar1079: int;
-
-var nVar1080: int;
-
-var nVar1081: int;
-
-var nVar1082: int;
-
-var nVar1083: int;
-
-var nVar1084: int;
-
-var nVar1085: int;
-
-var nVar1086: int;
-
-var nVar1087: int;
-
-var nVar1088: int;
-
-var nVar1089: int;
-
-var nVar1090: int;
-
-var nVar1091: int;
-
-var nVar1092: int;
-
-var nVar1093: int;
-
-var nVar1094: int;
-
-var nVar1095: int;
-
-var nVar1096: int;
-
-var nVar1097: int;
-
-var nVar1098: int;
-
-var nVar1099: int;
-
-var nVar1100: int;
-
-var nVar1101: int;
-
-var nVar1102: int;
-
-var nVar1103: int;
-
-var nVar1104: int;
-
-var nVar1105: int;
-
-var nVar1106: int;
-
-var nVar1107: int;
-
-var nVar1108: int;
-
-var nVar1109: int;
-
-var nVar1110: int;
-
-var nVar1111: int;
-
-var nVar1112: int;
-
-var nVar1113: int;
-
-var nVar1114: int;
-
-var nVar1115: int;
-
-var nVar1116: int;
-
-var nVar1117: int;
-
-var nVar1118: int;
-
-var nVar1119: int;
-
-var nVar1120: int;
-
-var nVar1121: int;
-
-var nVar1122: int;
-
-var nVar1123: int;
-
-var nVar1124: int;
-
-var nVar1125: int;
-
-var nVar1126: int;
-
-var nVar1127: int;
-
-var nVar1128: int;
-
-var nVar1129: int;
-
-var nVar1130: int;
-
-var nVar1131: int;
-
-var nVar1132: int;
-
-var nVar1133: int;
-
-var nVar1134: int;
-
-var nVar1135: int;
-
-var nVar1136: int;
-
-var nVar1137: int;
-
-var nVar1138: int;
-
-var nVar1139: int;
-
-var nVar1140: int;
-
-var nVar1141: int;
-
-var nVar1142: int;
-
-var nVar1143: int;
-
-var nVar1144: int;
-
-var nVar1145: int;
-
-var nVar1146: int;
-
-var nVar1147: int;
-
-var nVar1148: int;
-
-var nVar1149: int;
-
-var nVar1150: int;
-
-var nVar1151: int;
-
-var nVar1152: int;
-
-var nVar1153: int;
-
-var nVar1154: int;
-
-var nVar1155: int;
-
-var nVar1156: int;
-
-var nVar1157: int;
-
-var nVar1158: int;
-
-var nVar1159: int;
-
-var nVar1160: int;
-
-var nVar1161: int;
-
-var nVar1162: int;
-
-var nVar1163: int;
-
-var nVar1164: int;
-
-var nVar1165: int;
-
-var nVar1166: int;
-
-var nVar1167: int;
-
-var nVar1168: int;
-
-var nVar1169: int;
-
-var nVar1170: int;
-
-var nVar1171: int;
-
-var nVar1172: int;
-
-var nVar1173: int;
-
-var nVar1174: int;
-
-var nVar1175: int;
-
-var nVar1176: int;
-
-var nVar1177: int;
-
-var nVar1178: int;
-
-var nVar1179: int;
-
-var nVar1180: int;
-
-var nVar1181: int;
-
-var nVar1182: int;
-
-var nVar1183: int;
-
-var nVar1184: int;
-
-var nVar1185: int;
-
-var nVar1186: int;
-
-var nVar1187: int;
-
-var nVar1188: int;
-
-var nVar1189: int;
-
-var nVar1190: int;
-
-var nVar1191: int;
-
-var nVar1192: int;
-
-var nVar1193: int;
-
-var nVar1194: int;
-
-var nVar1195: int;
-
-var nVar1196: int;
-
-var nVar1197: int;
-
-var nVar1198: int;
-
-var nVar1199: int;
-
-var nVar1200: int;
-
-var nVar1201: int;
-
-var nVar1202: int;
-
-var nVar1203: int;
-
-var nVar1204: int;
-
-var nVar1205: int;
-
-var nVar1206: int;
-
-var nVar1207: int;
-
-var nVar1208: int;
-
-var nVar1209: int;
-
-var nVar1210: int;
-
-var nVar1211: int;
-
-var nVar1212: int;
-
-var nVar1213: int;
-
-var nVar1214: int;
-
-var nVar1215: int;
-
-var nVar1216: int;
-
-var nVar1217: int;
-
-var nVar1218: int;
-
-var nVar1219: int;
-
-var nVar1220: int;
-
-var nVar1221: int;
-
-var nVar1222: int;
-
-var nVar1223: int;
-
-var nVar1224: int;
-
-var nVar1225: int;
-
-var nVar1226: int;
-
-var nVar1227: int;
-
-var nVar1228: int;
-
-var nVar1229: int;
-
-var nVar1230: int;
-
-var nVar1231: int;
-
-var nVar1232: int;
-
-var nVar1233: int;
-
-var nVar1234: int;
-
-var nVar1235: int;
-
-var nVar1236: int;
-
-var nVar1237: int;
-
-var nVar1238: int;
-
-var nVar1239: int;
-
-var nVar1240: int;
-
-var nVar1241: int;
-
-var nVar1242: int;
-
-var nVar1243: int;
-
-var nVar1244: int;
-
-var nVar1245: int;
-
-var nVar1246: int;
-
-var nVar1247: int;
-
-var nVar1248: int;
-
-var nVar1249: int;
-
-var nVar1250: int;
-
-var nVar1251: int;
-
-var nVar1252: int;
-
-var nVar1253: int;
-
-var nVar1254: int;
-
-var nVar1255: int;
-
-var nVar1256: int;
-
-var nVar1257: int;
-
-var nVar1258: int;
-
-var nVar1259: int;
-
-var nVar1260: int;
-
-var nVar1261: int;
-
-var nVar1262: int;
-
-var nVar1263: int;
-
-var nVar1264: int;
-
-var nVar1265: int;
-
-var nVar1266: int;
-
-var nVar1267: int;
-
-var nVar1268: int;
-
-var nVar1269: int;
-
-var nVar1270: int;
-
-var nVar1271: int;
-
-var nVar1272: int;
-
-var nVar1273: int;
-
-var nVar1274: int;
-
-var nVar1275: int;
-
-var nVar1276: int;
-
-var nVar1277: int;
-
-var nVar1278: int;
-
-var nVar1279: int;
-
-var nVar1280: int;
-
-var nVar1281: int;
-
-var nVar1282: int;
-
-var nVar1283: int;
-
-var nVar1284: int;
-
-var nVar1285: int;
-
-var nVar1286: int;
-
-var nVar1287: int;
-
-var nVar1288: int;
-
-var nVar1289: int;
-
-var nVar1290: int;
-
-var nVar1291: int;
-
-var nVar1292: int;
-
-var nVar1293: int;
-
-var nVar1294: int;
-
-var nVar1295: int;
-
-var nVar1296: int;
-
-var nVar1297: int;
-
-var nVar1298: int;
-
-var nVar1299: int;
-
-var nVar1300: int;
-
-var nVar1301: int;
-
-var nVar1302: int;
-
-var nVar1303: int;
-
-var nVar1304: int;
-
-var nVar1305: int;
-
-var nVar1306: int;
-
-var nVar1307: int;
-
-var nVar1308: int;
-
-var nVar1309: int;
-
-var nVar1310: int;
-
-var nVar1311: int;
-
-var nVar1312: int;
-
-var nVar1313: int;
-
-var nVar1314: int;
-
-var nVar1315: int;
-
-var nVar1316: int;
-
-var nVar1317: int;
-
-var nVar1318: int;
-
-var nVar1319: int;
-
-var nVar1320: int;
-
-var nVar1321: int;
-
-var nVar1322: int;
-
-var nVar1323: int;
-
-var nVar1324: int;
-
-var nVar1325: int;
-
-var nVar1326: int;
-
-var nVar1327: int;
-
-var nVar1328: int;
-
-var nVar1329: int;
-
-var nVar1330: int;
-
-var nVar1331: int;
-
-var nVar1332: int;
-
-var nVar1333: int;
-
-var nVar1334: int;
-
-var nVar1335: int;
-
-var nVar1336: int;
-
-var nVar1337: int;
-
-var nVar1338: int;
-
-var nVar1339: int;
-
-var nVar1340: int;
-
-var nVar1341: int;
-
-var nVar1342: int;
-
-var nVar1343: int;
-
-var nVar1344: int;
-
-var nVar1345: int;
-
-var nVar1346: int;
-
-var nVar1347: int;
-
-var nVar1348: int;
-
-var nVar1349: int;
-
-var nVar1350: int;
-
-var nVar1351: int;
-
-var nVar1352: int;
-
-var nVar1353: int;
-
-var nVar1354: int;
-
-var nVar1355: int;
-
-var nVar1356: int;
-
-var nVar1357: int;
-
-var nVar1358: int;
-
-var nVar1359: int;
-
-var nVar1360: int;
-
-var nVar1361: int;
-
-var nVar1362: int;
-
-var nVar1363: int;
-
-var nVar1364: int;
-
-var nVar1365: int;
-
-var nVar1366: int;
-
-var nVar1367: int;
-
-var nVar1368: int;
-
-var nVar1369: int;
-
-var nVar1370: int;
-
-var nVar1371: int;
-
-var nVar1372: int;
-
-var nVar1373: int;
-
-var nVar1374: int;
-
-var nVar1375: int;
-
-var nVar1376: int;
-
-var nVar1377: int;
-
-var nVar1378: int;
-
-var nVar1379: int;
-
-var nVar1380: int;
-
-var nVar1381: int;
-
-var nVar1382: int;
-
-var nVar1383: int;
-
-var nVar1384: int;
-
-var nVar1385: int;
-
-var nVar1386: int;
-
-var nVar1387: int;
-
-var nVar1388: int;
-
-var nVar1389: int;
-
-var nVar1390: int;
-
-var nVar1391: int;
-
-var nVar1392: int;
-
-var nVar1393: int;
-
-var nVar1394: int;
-
-var nVar1395: int;
-
-var nVar1396: int;
-
-var nVar1397: int;
-
-var nVar1398: int;
-
-var nVar1399: int;
-
-var nVar1400: int;
-
-var nVar1401: int;
-
-var nVar1402: int;
-
-var nVar1403: int;
-
-var nVar1404: int;
-
-var nVar1405: int;
-
-var nVar1406: int;
-
-var nVar1407: int;
-
-var nVar1408: int;
-
-var nVar1409: int;
-
-var nVar1410: int;
-
-var nVar1411: int;
-
-var nVar1412: int;
-
-var nVar1413: int;
-
-var nVar1414: int;
-
-var nVar1415: int;
-
-var nVar1416: int;
-
-var nVar1417: int;
-
-var nVar1418: int;
-
-var nVar1419: int;
-
-var nVar1420: int;
-
-var nVar1421: int;
-
-var nVar1422: int;
-
-var nVar1423: int;
-
-var nVar1424: int;
-
-var nVar1425: int;
-
-var nVar1426: int;
-
-var nVar1427: int;
-
-var nVar1428: int;
-
-var nVar1429: int;
-
-var nVar1430: int;
-
-var nVar1431: int;
-
-var nVar1432: int;
-
-var nVar1433: int;
-
-var nVar1434: int;
-
-var nVar1435: int;
-
-var nVar1436: int;
-
-var nVar1437: int;
-
-var nVar1438: int;
-
-var nVar1439: int;
-
-var nVar1440: int;
-
-var nVar1441: int;
-
-var nVar1442: int;
-
-var nVar1443: int;
-
-var nVar1444: int;
-
-var nVar1445: int;
-
-var nVar1446: int;
-
-var nVar1447: int;
-
-var nVar1448: int;
-
-var nVar1449: int;
-
-var nVar1450: int;
-
-var nVar1451: int;
-
-var nVar1452: int;
-
-var nVar1453: int;
-
-var nVar1454: int;
-
-var nVar1455: int;
-
-var nVar1456: int;
-
-var nVar1457: int;
-
-var nVar1458: int;
-
-var nVar1459: int;
-
-var nVar1460: int;
-
-var nVar1461: int;
-
-var nVar1462: int;
-
-var nVar1463: int;
-
-var nVar1464: int;
-
-var nVar1465: int;
-
-var nVar1466: int;
-
-var nVar1467: int;
-
-var nVar1468: int;
-
-var nVar1469: int;
-
-var nVar1470: int;
-
-var nVar1471: int;
-
-var nVar1472: int;
-
-var nVar1473: int;
-
-var nVar1474: int;
-
-var nVar1475: int;
-
-var nVar1476: int;
-
-var nVar1477: int;
-
-var nVar1478: int;
-
-var nVar1479: int;
-
-var nVar1480: int;
-
-var nVar1481: int;
-
-var nVar1482: int;
-
-var nVar1483: int;
-
-var nVar1484: int;
-
-var nVar1485: int;
-
-var nVar1486: int;
-
-var nVar1487: int;
-
-var nVar1488: int;
-
-var nVar1489: int;
-
-var nVar1490: int;
-
-var nVar1491: int;
-
-var nVar1492: int;
-
-var nVar1493: int;
-
-var nVar1494: int;
-
-var nVar1495: int;
-
-var nVar1496: int;
-
-var nVar1497: int;
-
-var nVar1498: int;
-
-var nVar1499: int;
-
-var nVar1500: int;
-
-var nVar1501: int;
-
-var nVar1502: int;
-
-var nVar1503: int;
-
-var nVar1504: int;
-
-var nVar1505: int;
-
-var nVar1506: int;
-
-var nVar1507: int;
-
-var nVar1508: int;
-
-var nVar1509: int;
-
-var nVar1510: int;
-
-var nVar1511: int;
-
-var nVar1512: int;
-
-var nVar1513: int;
-
-var nVar1514: int;
-
-var nVar1515: int;
-
-var nVar1516: int;
-
-var nVar1517: int;
-
-var nVar1518: int;
-
-var nVar1519: int;
-
-var nVar1520: int;
-
-var nVar1521: int;
-
-var nVar1522: int;
-
-var nVar1523: int;
-
-var nVar1524: int;
-
-var nVar1525: int;
-
-var nVar1526: int;
-
-var nVar1527: int;
-
-var nVar1528: int;
-
-var nVar1529: int;
-
-var nVar1530: int;
-
-var nVar1531: int;
-
-var nVar1532: int;
-
-var nVar1533: int;
-
-var nVar1534: int;
-
-var nVar1535: int;
-
-var nVar1536: int;
-
-var nVar1537: int;
-
-var nVar1538: int;
-
-var nVar1539: int;
-
-var nVar1540: int;
-
-var nVar1541: int;
-
-var nVar1542: int;
-
-var nVar1543: int;
-
-var nVar1544: int;
-
-var nVar1545: int;
-
-var nVar1546: int;
-
-var nVar1547: int;
-
-var nVar1548: int;
-
-var nVar1549: int;
-
-var nVar1550: int;
-
-var nVar1551: int;
-
-var nVar1552: int;
-
-var nVar1553: int;
-
-var nVar1554: int;
-
-var nVar1555: int;
-
-var nVar1556: int;
-
-var nVar1557: int;
-
-var nVar1558: int;
-
-var nVar1559: int;
-
-var nVar1560: int;
-
-var nVar1561: int;
-
-var nVar1562: int;
-
-var nVar1563: int;
-
-var nVar1564: int;
-
-var nVar1565: int;
-
-var nVar1566: int;
-
-var nVar1567: int;
-
-var nVar1568: int;
-
-var nVar1569: int;
-
-var nVar1570: int;
-
-var nVar1571: int;
-
-var nVar1572: int;
-
-var nVar1573: int;
-
-var nVar1574: int;
-
-var nVar1575: int;
-
-var nVar1576: int;
-
-var nVar1577: int;
-
-var nVar1578: int;
-
-var nVar1579: int;
-
-var nVar1580: int;
-
-var nVar1581: int;
-
-var nVar1582: int;
-
-var nVar1583: int;
-
-var nVar1584: int;
-
-var nVar1585: int;
-
-var nVar1586: int;
-
-var nVar1587: int;
-
-var nVar1588: int;
-
-var nVar1589: int;
-
-var nVar1590: int;
-
-var nVar1591: int;
-
-var nVar1592: int;
-
-var nVar1593: int;
-
-var nVar1594: int;
-
-var nVar1595: int;
-
-var nVar1596: int;
-
-var nVar1597: int;
-
-var nVar1598: int;
-
-var nVar1599: int;
-
-var nVar1600: int;
-
-var nVar1601: int;
-
-var nVar1602: int;
-
-var nVar1603: int;
-
-var nVar1604: int;
-
-var nVar1605: int;
-
-var nVar1606: int;
-
-var nVar1607: int;
-
-var nVar1608: int;
-
-var nVar1609: int;
-
-var nVar1610: int;
-
-var nVar1611: int;
-
-var nVar1612: int;
-
-var nVar1613: int;
-
-var nVar1614: int;
-
-var nVar1615: int;
-
-var nVar1616: int;
-
-var nVar1617: int;
-
-var nVar1618: int;
-
-var nVar1619: int;
-
-var nVar1620: int;
-
-var nVar1621: int;
-
-var nVar1622: int;
-
-var nVar1623: int;
-
-var nVar1624: int;
-
-var nVar1625: int;
-
-var nVar1626: int;
-
-var nVar1627: int;
-
-var nVar1628: int;
-
-var nVar1629: int;
-
-var nVar1630: int;
-
-var nVar1631: int;
-
-var nVar1632: int;
-
-var nVar1633: int;
-
-var nVar1634: int;
-
-var nVar1635: int;
-
-var nVar1636: int;
-
-var nVar1637: int;
-
-var nVar1638: int;
-
-var nVar1639: int;
-
-var nVar1640: int;
-
-var nVar1641: int;
-
-var nVar1642: int;
-
-var nVar1643: int;
-
-var nVar1644: int;
-
-var nVar1645: int;
-
-var nVar1646: int;
-
-var nVar1647: int;
-
-var nVar1648: int;
-
-var nVar1649: int;
-
-var nVar1650: int;
-
-var nVar1651: int;
-
-var nVar1652: int;
-
-var nVar1653: int;
-
-var nVar1654: int;
-
-var nVar1655: int;
-
-var nVar1656: int;
-
-var nVar1657: int;
-
-var nVar1658: int;
-
-var nVar1659: int;
-
-var nVar1660: int;
-
-var nVar1661: int;
-
-var nVar1662: int;
-
-var nVar1663: int;
-
-var nVar1664: int;
-
-var nVar1665: int;
-
-var nVar1666: int;
-
-var nVar1667: int;
-
-var nVar1668: int;
-
-var nVar1669: int;
-
-var nVar1670: int;
-
-var nVar1671: int;
-
-var nVar1672: int;
-
-var nVar1673: int;
-
-var nVar1674: int;
-
-var nVar1675: int;
-
-var nVar1676: int;
-
-var nVar1677: int;
-
-var nVar1678: int;
-
-var nVar1679: int;
-
-var nVar1680: int;
-
-var nVar1681: int;
-
-var nVar1682: int;
-
-var nVar1683: int;
-
-var nVar1684: int;
-
-var nVar1685: int;
-
-var nVar1686: int;
-
-var nVar1687: int;
-
-var nVar1688: int;
-
-var nVar1689: int;
-
-var nVar1690: int;
-
-var nVar1691: int;
-
-var nVar1692: int;
-
-var nVar1693: int;
-
-var nVar1694: int;
-
-var nVar1695: int;
-
-var nVar1696: int;
-
-var nVar1697: int;
-
-var nVar1698: int;
-
-var nVar1699: int;
-
-var nVar1700: int;
-
-var nVar1701: int;
-
-var nVar1702: int;
-
-var nVar1703: int;
-
-var nVar1704: int;
-
-var nVar1705: int;
-
-var nVar1706: int;
-
-var nVar1707: int;
-
-var nVar1708: int;
-
-var nVar1709: int;
-
-var nVar1710: int;
-
-var nVar1711: int;
-
-var nVar1712: int;
-
-var nVar1713: int;
-
-var nVar1714: int;
-
-var nVar1715: int;
-
-var nVar1716: int;
-
-var nVar1717: int;
-
-var nVar1718: int;
-
-var nVar1719: int;
-
-var nVar1720: int;
-
-var nVar1721: int;
-
-var nVar1722: int;
-
-var nVar1723: int;
-
-var nVar1724: int;
-
-var nVar1725: int;
-
-var nVar1726: int;
-
-var nVar1727: int;
-
-var nVar1728: int;
-
-var nVar1729: int;
-
-var nVar1730: int;
-
-var nVar1731: int;
-
-var nVar1732: int;
-
-var nVar1733: int;
-
-var nVar1734: int;
-
-var nVar1735: int;
-
-var nVar1736: int;
-
-var nVar1737: int;
-
-var nVar1738: int;
-
-var nVar1739: int;
-
-var nVar1740: int;
-
-var nVar1741: int;
-
-var nVar1742: int;
-
-var nVar1743: int;
-
-var nVar1744: int;
-
-var nVar1745: int;
-
-var nVar1746: int;
-
-var nVar1747: int;
-
-var nVar1748: int;
-
-var nVar1749: int;
-
-var nVar1750: int;
-
-var nVar1751: int;
-
-var nVar1752: int;
-
-var nVar1753: int;
-
-var nVar1754: int;
-
-var nVar1755: int;
-
-var nVar1756: int;
-
-var nVar1757: int;
-
-var nVar1758: int;
-
-var nVar1759: int;
-
-var nVar1760: int;
-
-var nVar1761: int;
-
-var nVar1762: int;
-
-var nVar1763: int;
-
-var nVar1764: int;
-
-var nVar1765: int;
-
-var nVar1766: int;
-
-var nVar1767: int;
-
-var nVar1768: int;
-
-var nVar1769: int;
-
-var nVar1770: int;
-
-var nVar1771: int;
-
-var nVar1772: int;
-
-var nVar1773: int;
-
-var nVar1774: int;
-
-var nVar1775: int;
-
-var nVar1776: int;
-
-var nVar1777: int;
-
-var nVar1778: int;
-
-var nVar1779: int;
-
-var nVar1780: int;
-
-var nVar1781: int;
-
-var nVar1782: int;
-
-var nVar1783: int;
-
-var nVar1784: int;
-
-var nVar1785: int;
-
-var nVar1786: int;
-
-var nVar1787: int;
-
-var nVar1788: int;
-
-var nVar1789: int;
-
-var nVar1790: int;
-
-var nVar1791: int;
-
-var nVar1792: int;
-
-var nVar1793: int;
-
-var nVar1794: int;
-
-var nVar1795: int;
-
-var nVar1796: int;
-
-var nVar1797: int;
-
-var nVar1798: int;
-
-var nVar1799: int;
-
-var nVar1800: int;
-
-var nVar1801: int;
-
-var nVar1802: int;
-
-var nVar1803: int;
-
-var nVar1804: int;
-
-var nVar1805: int;
-
-var nVar1806: int;
-
-var nVar1807: int;
-
-var nVar1808: int;
-
-var nVar1809: int;
-
-var nVar1810: int;
-
-var nVar1811: int;
-
-var nVar1812: int;
-
-var nVar1813: int;
-
-var nVar1814: int;
-
-var nVar1815: int;
-
-var nVar1816: int;
-
-var nVar1817: int;
-
-var nVar1818: int;
-
-var nVar1819: int;
-
-var nVar1820: int;
-
-var nVar1821: int;
-
-var nVar1822: int;
-
-var nVar1823: int;
-
-var nVar1824: int;
-
-var nVar1825: int;
-
-var nVar1826: int;
-
-var nVar1827: int;
-
-var nVar1828: int;
-
-var nVar1829: int;
-
-var nVar1830: int;
-
-var nVar1831: int;
-
-var nVar1832: int;
-
-var nVar1833: int;
-
-var nVar1834: int;
-
-var nVar1835: int;
-
-var nVar1836: int;
-
-var nVar1837: int;
-
-var nVar1838: int;
-
-var nVar1839: int;
-
-var nVar1840: int;
-
-var nVar1841: int;
-
-var nVar1842: int;
-
-var nVar1843: int;
-
-var nVar1844: int;
-
-var nVar1845: int;
-
-var nVar1846: int;
-
-var nVar1847: int;
-
-var nVar1848: int;
-
-var nVar1849: int;
-
-var nVar1850: int;
-
-var nVar1851: int;
-
-var nVar1852: int;
-
-var nVar1853: int;
-
-var nVar1854: int;
-
-var nVar1855: int;
-
-var nVar1856: int;
-
-var nVar1857: int;
-
-var nVar1858: int;
-
-var nVar1859: int;
-
-var nVar1860: int;
-
-var nVar1861: int;
-
-var nVar1862: int;
-
-var nVar1863: int;
-
-var nVar1864: int;
-
-var nVar1865: int;
-
-var nVar1866: int;
-
-var nVar1867: int;
-
-var nVar1868: int;
-
-var nVar1869: int;
-
-var nVar1870: int;
-
-var nVar1871: int;
-
-var nVar1872: int;
-
-var nVar1873: int;
-
-var nVar1874: int;
-
-var nVar1875: int;
-
-var nVar1876: int;
-
-var nVar1877: int;
-
-var nVar1878: int;
-
-var nVar1879: int;
-
-var nVar1880: int;
-
-var nVar1881: int;
-
-var nVar1882: int;
-
-var nVar1883: int;
-
-var nVar1884: int;
-
-var nVar1885: int;
-
-var nVar1886: int;
-
-var nVar1887: int;
-
-var nVar1888: int;
-
-var nVar1889: int;
-
-var nVar1890: int;
-
-var nVar1891: int;
-
-var nVar1892: int;
-
-var nVar1893: int;
-
-var nVar1894: int;
-
-var nVar1895: int;
-
-var nVar1896: int;
-
-var nVar1897: int;
-
-var nVar1898: int;
-
-var nVar1899: int;
-
-var nVar1900: int;
-
-var nVar1901: int;
-
-var nVar1902: int;
-
-var nVar1903: int;
-
-var nVar1904: int;
-
-var nVar1905: int;
-
-var nVar1906: int;
-
-var nVar1907: int;
-
-var nVar1908: int;
-
-var nVar1909: int;
-
-var nVar1910: int;
-
-var nVar1911: int;
-
-var nVar1912: int;
-
-var nVar1913: int;
-
-var nVar1914: int;
-
-var nVar1915: int;
-
-var nVar1916: int;
-
-var nVar1917: int;
-
-var nVar1918: int;
-
-var nVar1919: int;
-
-var nVar1920: int;
-
-var nVar1921: int;
-
-var nVar1922: int;
-
-var nVar1923: int;
-
-var nVar1924: int;
-
-var nVar1925: int;
-
-var nVar1926: int;
-
-var nVar1927: int;
-
-var nVar1928: int;
-
-var nVar1929: int;
-
-var nVar1930: int;
-
-var nVar1931: int;
-
-var nVar1932: int;
-
-var nVar1933: int;
-
-var nVar1934: int;
-
-var nVar1935: int;
-
-var nVar1936: int;
-
-var nVar1937: int;
-
-var nVar1938: int;
-
-var nVar1939: int;
-
-var nVar1940: int;
-
-var nVar1941: int;
-
-var nVar1942: int;
-
-var nVar1943: int;
-
-var nVar1944: int;
-
-var nVar1945: int;
-
-var nVar1946: int;
-
-var nVar1947: int;
-
-var nVar1948: int;
-
-var nVar1949: int;
-
-var nVar1950: int;
-
-var nVar1951: int;
-
-var nVar1952: int;
-
-var nVar1953: int;
-
-var nVar1954: int;
-
-var nVar1955: int;
-
-var nVar1956: int;
-
-var nVar1957: int;
-
-var nVar1958: int;
-
-var nVar1959: int;
-
-var nVar1960: int;
-
-var nVar1961: int;
-
-var nVar1962: int;
-
-var nVar1963: int;
-
-var nVar1964: int;
-
-var nVar1965: int;
-
-var nVar1966: int;
-
-var nVar1967: int;
-
-var nVar1968: int;
-
-var nVar1969: int;
-
-var nVar1970: int;
-
-var nVar1971: int;
-
-var nVar1972: int;
-
-var nVar1973: int;
-
-var nVar1974: int;
-
-var nVar1975: int;
-
-var nVar1976: int;
-
-var nVar1977: int;
-
-var nVar1978: int;
-
-var nVar1979: int;
-
-var nVar1980: int;
-
-var nVar1981: int;
-
-var nVar1982: int;
-
-var nVar1983: int;
-
-var nVar1984: int;
-
-var nVar1985: int;
-
-var nVar1986: int;
-
-var nVar1987: int;
-
-var nVar1988: int;
-
-var nVar1989: int;
-
-var nVar1990: int;
-
-var nVar1991: int;
-
-var nVar1992: int;
-
-var nVar1993: int;
-
-var nVar1994: int;
-
-var nVar1995: int;
-
-var nVar1996: int;
-
-var nVar1997: int;
-
-var nVar1998: int;
-
-var nVar1999: int;
-
-var nVar2000: int;
-
-var nVar2001: int;
-
-var nVar2002: int;
-
-var nVar2003: int;
-
-var nVar2004: int;
-
-var nVar2005: int;
-
-var nVar2006: int;
-
-var nVar2007: int;
-
-var nVar2008: int;
-
-var nVar2009: int;
-
-var nVar2010: int;
-
-var nVar2011: int;
-
-var nVar2012: int;
-
-var nVar2013: int;
-
-var nVar2014: int;
-
-var nVar2015: int;
-
-var nVar2016: int;
-
-var nVar2017: int;
-
-var nVar2018: int;
-
-var nVar2019: int;
-
-var nVar2020: int;
-
-var nVar2021: int;
-
-var nVar2022: int;
-
-var nVar2023: int;
-
-var nVar2024: int;
-
-var nVar2025: int;
-
-var nVar2026: int;
-
-var nVar2027: int;
-
-var nVar2028: int;
-
-var nVar2029: int;
-
-var nVar2030: int;
-
-var nVar2031: int;
-
-var nVar2032: int;
-
-var nVar2033: int;
-
-var nVar2034: int;
-
-var nVar2035: int;
-
-var nVar2036: int;
-
-var nVar2037: int;
-
-var nVar2038: int;
-
-var nVar2039: int;
-
-var nVar2040: int;
-
-var nVar2041: int;
-
-var nVar2042: int;
-
-var nVar2043: int;
-
-var nVar2044: int;
-
-var nVar2045: int;
-
-var nVar2046: int;
-
-var nVar2047: int;
-
-var nVar2048: int;
-
-var nVar2049: int;
-
-var nVar2050: int;
-
-var nVar2051: int;
-
-var nVar2052: int;
-
-var nVar2053: int;
-
-var nVar2054: int;
-
-var nVar2055: int;
-
-var nVar2056: int;
-
-var nVar2057: int;
-
-var nVar2058: int;
-
-var nVar2059: int;
-
-var nVar2060: int;
-
-var nVar2061: int;
-
-var nVar2062: int;
-
-var nVar2063: int;
-
-var nVar2064: int;
-
-var nVar2065: int;
-
-var nVar2066: int;
-
-var nVar2067: int;
-
-var nVar2068: int;
-
-var nVar2069: int;
-
-var nVar2070: int;
-
-var nVar2071: int;
-
-var nVar2072: int;
-
-var nVar2073: int;
-
-var nVar2074: int;
-
-var nVar2075: int;
-
-var nVar2076: int;
-
-var nVar2077: int;
-
-var nVar2078: int;
-
-var nVar2079: int;
-
-var nVar2080: int;
-
-var nVar2081: int;
-
-var nVar2082: int;
-
-var nVar2083: int;
-
-var nVar2084: int;
-
-var nVar2085: int;
-
-var nVar2086: int;
-
-var nVar2087: int;
-
-var nVar2088: int;
-
-var nVar2089: int;
-
-var nVar2090: int;
-
-var nVar2091: int;
-
-var nVar2092: int;
-
-var nVar2093: int;
-
-var nVar2094: int;
-
-var nVar2095: int;
-
-var nVar2096: int;
-
-var nVar2097: int;
-
-var nVar2098: int;
-
-var nVar2099: int;
-
-var nVar2100: int;
-
-var nVar2101: int;
-
-var nVar2102: int;
-
-var nVar2103: int;
-
-var nVar2104: int;
-
-var nVar2105: int;
-
-var nVar2106: int;
-
-var nVar2107: int;
-
-var nVar2108: int;
-
-var nVar2109: int;
-
-var nVar2110: int;
-
-var nVar2111: int;
-
-var nVar2112: int;
-
-var nVar2113: int;
-
-var nVar2114: int;
-
-var nVar2115: int;
-
-var nVar2116: int;
-
-var nVar2117: int;
-
-var nVar2118: int;
-
-var nVar2119: int;
-
-var nVar2120: int;
-
-var nVar2121: int;
-
-var nVar2122: int;
-
-var nVar2123: int;
-
-var nVar2124: int;
-
-var nVar2125: int;
-
-var nVar2126: int;
-
-var nVar2127: int;
-
-var nVar2128: int;
-
-var nVar2129: int;
-
-var nVar2130: int;
-
-var nVar2131: int;
-
-var nVar2132: int;
-
-var nVar2133: int;
-
-var nVar2134: int;
-
-var nVar2135: int;
-
-var nVar2136: int;
-
-var nVar2137: int;
-
-var nVar2138: int;
-
-var nVar2139: int;
-
-var nVar2140: int;
-
-var nVar2141: int;
-
-var nVar2142: int;
-
-var nVar2143: int;
-
-var nVar2144: int;
-
-var nVar2145: int;
-
-var nVar2146: int;
-
-var nVar2147: int;
-
-var nVar2148: int;
-
-var nVar2149: int;
-
-var nVar2150: int;
-
-var nVar2151: int;
-
-var nVar2152: int;
-
-var nVar2153: int;
-
-var nVar2154: int;
-
-var nVar2155: int;
-
-var nVar2156: int;
-
-var nVar2157: int;
-
-var nVar2158: int;
-
-var nVar2159: int;
-
-var nVar2160: int;
-
-var nVar2161: int;
-
-var nVar2162: int;
-
-var nVar2163: int;
-
-var nVar2164: int;
-
-var nVar2165: int;
-
-var nVar2166: int;
-
-var nVar2167: int;
-
-var nVar2168: int;
-
-var nVar2169: int;
-
-var nVar2170: int;
-
-var nVar2171: int;
-
-var nVar2172: int;
-
-var nVar2173: int;
-
-var nVar2174: int;
-
-var nVar2175: int;
-
-var nVar2176: int;
-
-var nVar2177: int;
-
-var nVar2178: int;
-
-var nVar2179: int;
-
-var nVar2180: int;
-
-var nVar2181: int;
-
-var nVar2182: int;
-
-var nVar2183: int;
-
-var nVar2184: int;
-
-var nVar2185: int;
-
-var nVar2186: int;
-
-var nVar2187: int;
-
-var nVar2188: int;
-
-var nVar2189: int;
-
-var nVar2190: int;
-
-var nVar2191: int;
-
-var nVar2192: int;
-
-var nVar2193: int;
-
-var nVar2194: int;
-
-var nVar2195: int;
-
-var nVar2196: int;
-
-var nVar2197: int;
-
-var nVar2198: int;
-
-var nVar2199: int;
-
-var nVar2200: int;
-
-var nVar2201: int;
-
-var nVar2202: int;
-
-var nVar2203: int;
-
-var nVar2204: int;
-
-var nVar2205: int;
-
-var nVar2206: int;
-
-var nVar2207: int;
-
-var nVar2208: int;
-
-var nVar2209: int;
-
-var nVar2210: int;
-
-var nVar2211: int;
-
-var nVar2212: int;
-
-var nVar2213: int;
-
-var nVar2214: int;
-
-var nVar2215: int;
-
-var nVar2216: int;
-
-var nVar2217: int;
-
-var nVar2218: int;
-
-var nVar2219: int;
-
-var nVar2220: int;
-
-var nVar2221: int;
-
-var nVar2222: int;
-
-var nVar2223: int;
-
-var nVar2224: int;
-
-var nVar2225: int;
-
-var nVar2226: int;
-
-var nVar2227: int;
-
-var nVar2228: int;
-
-var nVar2229: int;
-
-var nVar2230: int;
-
-var nVar2231: int;
-
-var nVar2232: int;
-
-var nVar2233: int;
-
-var nVar2234: int;
-
-var nVar2235: int;
-
-var nVar2236: int;
-
-var nVar2237: int;
-
-var nVar2238: int;
-
-var nVar2239: int;
-
-var nVar2240: int;
-
-var nVar2241: int;
-
-var nVar2242: int;
-
-var nVar2243: int;
-
-var nVar2244: int;
-
-var nVar2245: int;
-
-var nVar2246: int;
-
-var nVar2247: int;
-
-var nVar2248: int;
-
-var nVar2249: int;
-
-var nVar2250: int;
-
-var nVar2251: int;
-
-var nVar2252: int;
-
-var nVar2253: int;
-
-var nVar2254: int;
-
-var nVar2255: int;
-
-var nVar2256: int;
-
-var nVar2257: int;
-
-var nVar2258: int;
-
-var nVar2259: int;
-
-var nVar2260: int;
-
-var nVar2261: int;
-
-var nVar2262: int;
-
-var nVar2263: int;
-
-var nVar2264: int;
-
-var nVar2265: int;
-
-var nVar2266: int;
-
-var nVar2267: int;
-
-var nVar2268: int;
-
-var nVar2269: int;
-
-var nVar2270: int;
-
-var nVar2271: int;
-
-var nVar2272: int;
-
-var nVar2273: int;
-
-var nVar2274: int;
-
-var nVar2275: int;
-
-var nVar2276: int;
-
-var nVar2277: int;
-
-var nVar2278: int;
-
-var nVar2279: int;
-
-var nVar2280: int;
-
-var nVar2281: int;
-
-var nVar2282: int;
-
-var nVar2283: int;
-
-var nVar2284: int;
-
-var nVar2285: int;
-
-var nVar2286: int;
-
-var nVar2287: int;
-
-var nVar2288: int;
-
-var nVar2289: int;
-
-var nVar2290: int;
-
-var nVar2291: int;
-
-var nVar2292: int;
-
-var nVar2293: int;
-
-var nVar2294: int;
-
-var nVar2295: int;
-
-var nVar2296: int;
-
-var nVar2297: int;
-
-var nVar2298: int;
-
-var nVar2299: int;
-
-var nVar2300: int;
-
-var nVar2301: int;
-
-var nVar2302: int;
-
-var nVar2303: int;
-
-var nVar2304: int;
-
-var nVar2305: int;
-
-var nVar2306: int;
-
-var nVar2307: int;
-
-var nVar2308: int;
-
-var nVar2309: int;
-
-var nVar2310: int;
-
-var nVar2311: int;
-
-var nVar2312: int;
-
-var nVar2313: int;
-
-var nVar2314: int;
-
-var nVar2315: int;
-
-var nVar2316: int;
-
-var nVar2317: int;
-
-var nVar2318: int;
-
-var nVar2319: int;
-
-var nVar2320: int;
-
-var nVar2321: int;
-
-var nVar2322: int;
-
-var nVar2323: int;
-
-var nVar2324: int;
-
-var nVar2325: int;
-
-var nVar2326: int;
-
-var nVar2327: int;
-
-var nVar2328: int;
-
-var nVar2329: int;
-
-var nVar2330: int;
-
-var nVar2331: int;
-
-var nVar2332: int;
-
-var nVar2333: int;
-
-var nVar2334: int;
-
-var nVar2335: int;
-
-var nVar2336: int;
-
-var nVar2337: int;
-
-var nVar2338: int;
-
-var nVar2339: int;
-
-var nVar2340: int;
-
-var nVar2341: int;
-
-var nVar2342: int;
-
-var nVar2343: int;
-
-var nVar2344: int;
-
-var nVar2345: int;
-
-var nVar2346: int;
-
-var nVar2347: int;
-
-var nVar2348: int;
-
-var nVar2349: int;
-
-var nVar2350: int;
-
-var nVar2351: int;
-
-var nVar2352: int;
-
-var nVar2353: int;
-
-var nVar2354: int;
-
-var nVar2355: int;
-
-var nVar2356: int;
-
-var nVar2357: int;
-
-var nVar2358: int;
-
-var nVar2359: int;
-
-var nVar2360: int;
-
-var nVar2361: int;
-
-var nVar2362: int;
-
-var nVar2363: int;
-
-var nVar2364: int;
-
-var nVar2365: int;
-
-var nVar2366: int;
-
-var nVar2367: int;
-
-var nVar2368: int;
-
-var nVar2369: int;
-
-var nVar2370: int;
-
-var nVar2371: int;
-
-var nVar2372: int;
-
-var nVar2373: int;
-
-var nVar2374: int;
-
-var nVar2375: int;
-
-var nVar2376: int;
-
-var nVar2377: int;
-
-var nVar2378: int;
-
-var nVar2379: int;
-
-var nVar2380: int;
-
-var nVar2381: int;
-
-var nVar2382: int;
-
-var nVar2383: int;
-
-var nVar2384: int;
-
-var nVar2385: int;
-
-var nVar2386: int;
-
-var nVar2387: int;
-
-var nVar2388: int;
-
-var nVar2389: int;
-
-var nVar2390: int;
-
-var nVar2391: int;
-
-var nVar2392: int;
-
-var nVar2393: int;
-
-var nVar2394: int;
-
-var nVar2395: int;
-
-var nVar2396: int;
-
-var nVar2397: int;
-
-var nVar2398: int;
-
-var nVar2399: int;
-
-var nVar2400: int;
-
-var nVar2401: int;
-
-var nVar2402: int;
-
-var nVar2403: int;
-
-var nVar2404: int;
-
-var nVar2405: int;
-
-var nVar2406: int;
-
-var nVar2407: int;
-
-var nVar2408: int;
-
-var nVar2409: int;
-
-var nVar2410: int;
-
-var nVar2411: int;
-
-var nVar2412: int;
-
-var nVar2413: int;
-
-var nVar2414: int;
-
-var nVar2415: int;
-
-var nVar2416: int;
-
-var nVar2417: int;
-
-var nVar2418: int;
-
-var nVar2419: int;
-
-var nVar2420: int;
-
-var nVar2421: int;
-
-var nVar2422: int;
-
-var nVar2423: int;
-
-var nVar2424: int;
-
-var nVar2425: int;
-
-var nVar2426: int;
-
-var nVar2427: int;
-
-var nVar2428: int;
-
-var nVar2429: int;
-
-var nVar2430: int;
-
-var nVar2431: int;
-
-var nVar2432: int;
-
-var nVar2433: int;
-
-var nVar2434: int;
-
-var nVar2435: int;
-
-var nVar2436: int;
-
-var nVar2437: int;
-
-var nVar2438: int;
-
-var nVar2439: int;
-
-var nVar2440: int;
-
-var nVar2441: int;
-
-var nVar2442: int;
-
-var nVar2443: int;
-
-var nVar2444: int;
-
-var nVar2445: int;
-
-var nVar2446: int;
-
-var nVar2447: int;
-
-var nVar2448: int;
-
-var nVar2449: int;
-
-var nVar2450: int;
-
-var nVar2451: int;
-
-var nVar2452: int;
-
-var nVar2453: int;
-
-var nVar2454: int;
-
-var nVar2455: int;
-
-var nVar2456: int;
-
-var nVar2457: int;
-
-var nVar2458: int;
-
-var nVar2459: int;
-
-var nVar2460: int;
-
-var nVar2461: int;
-
-var nVar2462: int;
-
-var nVar2463: int;
-
-var nVar2464: int;
-
-var nVar2465: int;
-
-var nVar2466: int;
-
-var nVar2467: int;
-
-var nVar2468: int;
-
-var nVar2469: int;
-
-var nVar2470: int;
-
-var nVar2471: int;
-
-var nVar2472: int;
-
-var nVar2473: int;
-
-var nVar2474: int;
-
-var nVar2475: int;
-
-var nVar2476: int;
-
-var nVar2477: int;
-
-var nVar2478: int;
-
-var nVar2479: int;
-
-var nVar2480: int;
-
-var nVar2481: int;
-
-var nVar2482: int;
-
-var nVar2483: int;
-
-var nVar2484: int;
-
-var nVar2485: int;
-
-var nVar2486: int;
-
-var nVar2487: int;
-
-var nVar2488: int;
-
-var nVar2489: int;
-
-var nVar2490: int;
-
-var nVar2491: int;
-
-var nVar2492: int;
-
-var nVar2493: int;
-
-var nVar2494: int;
-
-var nVar2495: int;
-
-var nVar2496: int;
-
-var nVar2497: int;
-
-var nVar2498: int;
-
-var nVar2499: int;
-
-var nVar2500: int;
-
-var nVar2501: int;
-
-var nVar2502: int;
-
-var nVar2503: int;
-
-var nVar2504: int;
-
-var nVar2505: int;
-
-var nVar2506: int;
-
-var nVar2507: int;
-
-var nVar2508: int;
-
-var nVar2509: int;
-
-var nVar2510: int;
-
-var nVar2511: int;
-
-var nVar2512: int;
-
-var nVar2513: int;
-
-var nVar2514: int;
-
-var nVar2515: int;
-
-var nVar2516: int;
-
-var nVar2517: int;
-
-var nVar2518: int;
-
-var nVar2519: int;
-
-var nVar2520: int;
-
-var nVar2521: int;
-
-var nVar2522: int;
-
-var nVar2523: int;
-
-var nVar2524: int;
-
-var nVar2525: int;
-
-var nVar2526: int;
-
-var nVar2527: int;
-
-var nVar2528: int;
-
-var nVar2529: int;
-
-var nVar2530: int;
-
-var nVar2531: int;
-
-var nVar2532: int;
-
-var nVar2533: int;
-
-var nVar2534: int;
-
-var nVar2535: int;
-
-var nVar2536: int;
-
-var nVar2537: int;
-
-var nVar2538: int;
-
-var nVar2539: int;
-
-var nVar2540: int;
-
-var nVar2541: int;
-
-var nVar2542: int;
-
-var nVar2543: int;
-
-var nVar2544: int;
-
-var nVar2545: int;
-
-var nVar2546: int;
-
-var nVar2547: int;
-
-var nVar2548: int;
-
-var nVar2549: int;
-
-var nVar2550: int;
-
-var nVar2551: int;
-
-var nVar2552: int;
-
-var nVar2553: int;
-
-var nVar2554: int;
-
-var nVar2555: int;
-
-var nVar2556: int;
-
-var nVar2557: int;
-
-var nVar2558: int;
-
-var nVar2559: int;
-
-var nVar2560: int;
-
-var nVar2561: int;
-
-var nVar2562: int;
-
-var nVar2563: int;
-
-var nVar2564: int;
-
-var nVar2565: int;
-
-var nVar2566: int;
-
-var nVar2567: int;
-
-var nVar2568: int;
-
-var nVar2569: int;
-
-var nVar2570: int;
-
-var nVar2571: int;
-
-var nVar2572: int;
-
-var nVar2573: int;
-
-var nVar2574: int;
-
-var nVar2575: int;
-
-var nVar2576: int;
-
-var nVar2577: int;
-
-var nVar2578: int;
-
-var nVar2579: int;
-
-var nVar2580: int;
-
-var nVar2581: int;
-
-var nVar2582: int;
-
-var nVar2583: int;
-
-var nVar2584: int;
-
-var nVar2585: int;
-
-var nVar2586: int;
-
-var nVar2587: int;
-
-var nVar2588: int;
-
-var nVar2589: int;
-
-var nVar2590: int;
-
-var nVar2591: int;
-
-var nVar2592: int;
-
-var nVar2593: int;
-
-var nVar2594: int;
-
-var nVar2595: int;
-
-var nVar2596: int;
-
-var nVar2597: int;
-
-var nVar2598: int;
-
-var nVar2599: int;
-
-var nVar2600: int;
-
-var nVar2601: int;
-
-var nVar2602: int;
-
-var nVar2603: int;
-
-var nVar2604: int;
-
-var nVar2605: int;
-
-var nVar2606: int;
-
-var nVar2607: int;
-
-var nVar2608: int;
-
-var nVar2609: int;
-
-var nVar2610: int;
-
-var nVar2611: int;
-
-var nVar2612: int;
-
-var nVar2613: int;
-
-var nVar2614: int;
-
-var nVar2615: int;
-
-var nVar2616: int;
-
-var nVar2617: int;
-
-var nVar2618: int;
-
-var nVar2619: int;
-
-var nVar2620: int;
-
-var nVar2621: int;
-
-var nVar2622: int;
-
-var nVar2623: int;
-
-var nVar2624: int;
-
-var nVar2625: int;
-
-var nVar2626: int;
-
-var nVar2627: int;
-
-var nVar2628: int;
-
-var nVar2629: int;
-
-var nVar2630: int;
-
-var nVar2631: int;
-
-var nVar2632: int;
-
-var nVar2633: int;
-
-var nVar2634: int;
-
-var nVar2635: int;
-
-var nVar2636: int;
-
-var nVar2637: int;
-
-var nVar2638: int;
-
-var nVar2639: int;
-
-var nVar2640: int;
-
-var nVar2641: int;
-
-var nVar2642: int;
-
-var nVar2643: int;
-
-var nVar2644: int;
-
-var nVar2645: int;
-
-var nVar2646: int;
-
-var nVar2647: int;
-
-var nVar2648: int;
-
-var nVar2649: int;
-
-var nVar2650: int;
-
-var nVar2651: int;
-
-var nVar2652: int;
-
-var nVar2653: int;
-
-var nVar2654: int;
-
-var nVar2655: int;
-
-var nVar2656: int;
-
-var nVar2657: int;
-
-var nVar2658: int;
-
-var nVar2659: int;
-
-var nVar2660: int;
-
-var nVar2661: int;
-
-var nVar2662: int;
-
-var nVar2663: int;
-
-var nVar2664: int;
-
-var nVar2665: int;
-
-var nVar2666: int;
-
-var nVar2667: int;
-
-var nVar2668: int;
-
-var nVar2669: int;
-
-var nVar2670: int;
-
-var nVar2671: int;
-
-var nVar2672: int;
-
-var nVar2673: int;
-
-var nVar2674: int;
-
-var nVar2675: int;
-
-var nVar2676: int;
-
-var nVar2677: int;
-
-var nVar2678: int;
-
-var nVar2679: int;
-
-var nVar2680: int;
-
-var nVar2681: int;
-
-var nVar2682: int;
-
-var nVar2683: int;
-
-var nVar2684: int;
-
-var nVar2685: int;
-
-var nVar2686: int;
-
-var nVar2687: int;
-
-var nVar2688: int;
-
-var nVar2689: int;
-
-var nVar2690: int;
-
-var nVar2691: int;
-
-var nVar2692: int;
-
-var nVar2693: int;
-
-var nVar2694: int;
-
-var nVar2695: int;
-
-var nVar2696: int;
-
-var nVar2697: int;
-
-var nVar2698: int;
-
-var nVar2699: int;
-
-var nVar2700: int;
-
-var nVar2701: int;
-
-var nVar2702: int;
-
-var nVar2703: int;
-
-var nVar2704: int;
-
-var nVar2705: int;
-
-var nVar2706: int;
-
-var nVar2707: int;
-
-var nVar2708: int;
-
-var nVar2709: int;
-
-var nVar2710: int;
-
-var nVar2711: int;
-
-var nVar2712: int;
-
-var nVar2713: int;
-
-var nVar2714: int;
-
-var nVar2715: int;
-
-var nVar2716: int;
-
-var nVar2717: int;
-
-var nVar2718: int;
-
-var nVar2719: int;
-
-var nVar2720: int;
-
-var nVar2721: int;
-
-var nVar2722: int;
-
-var nVar2723: int;
-
-var nVar2724: int;
-
-var nVar2725: int;
-
-var nVar2726: int;
-
-var nVar2727: int;
-
-var nVar2728: int;
-
-var nVar2729: int;
-
-var nVar2730: int;
-
-var nVar2731: int;
-
-var nVar2732: int;
-
-var nVar2733: int;
-
-var nVar2734: int;
-
-var nVar2735: int;
-
-var nVar2736: int;
-
-var nVar2737: int;
-
-var nVar2738: int;
-
-var nVar2739: int;
-
-var nVar2740: int;
-
-var nVar2741: int;
-
-var nVar2742: int;
-
-var nVar2743: int;
-
-var nVar2744: int;
-
-var nVar2745: int;
-
-var nVar2746: int;
-
-var nVar2747: int;
-
-var nVar2748: int;
-
-var nVar2749: int;
-
-var nVar2750: int;
-
-var nVar2751: int;
-
-var nVar2752: int;
-
-var nVar2753: int;
-
-var nVar2754: int;
-
-var nVar2755: int;
-
-var nVar2756: int;
-
-var nVar2757: int;
-
-var nVar2758: int;
-
-var nVar2759: int;
-
-var nVar2760: int;
-
-var nVar2761: int;
-
-var nVar2762: int;
-
-var nVar2763: int;
-
-var nVar2764: int;
-
-var nVar2765: int;
-
-var nVar2766: int;
-
-var nVar2767: int;
-
-var nVar2768: int;
-
-var nVar2769: int;
-
-var nVar2770: int;
-
-var nVar2771: int;
-
-var nVar2772: int;
-
-var nVar2773: int;
-
-var nVar2774: int;
-
-var nVar2775: int;
-
-var nVar2776: int;
-
-var nVar2777: int;
-
-var nVar2778: int;
-
-var nVar2779: int;
-
-var nVar2780: int;
-
-var nVar2781: int;
-
-var nVar2782: int;
-
-var nVar2783: int;
-
-var nVar2784: int;
-
-var nVar2785: int;
-
-var nVar2786: int;
-
-var nVar2787: int;
-
-var nVar2788: int;
-
-var nVar2789: int;
-
-var nVar2790: int;
-
-var nVar2791: int;
-
-var nVar2792: int;
-
-var nVar2793: int;
-
-var nVar2794: int;
-
-var nVar2795: int;
-
-var nVar2796: int;
-
-var nVar2797: int;
-
-var nVar2798: int;
-
-var nVar2799: int;
-
-var nVar2800: int;
-
-var nVar2801: int;
-
-var nVar2802: int;
-
-var nVar2803: int;
-
-var nVar2804: int;
-
-var nVar2805: int;
-
-var nVar2806: int;
-
-var nVar2807: int;
-
-var nVar2808: int;
-
-var nVar2809: int;
-
-var nVar2810: int;
-
-var nVar2811: int;
-
-var nVar2812: int;
-
-var nVar2813: int;
-
-var nVar2814: int;
-
-var nVar2815: int;
-
-var nVar2816: int;
-
-var nVar2817: int;
-
-var nVar2818: int;
-
-var nVar2819: int;
-
-var nVar2820: int;
-
-var nVar2821: int;
-
-var nVar2822: int;
-
-var nVar2823: int;
-
-var nVar2824: int;
-
-var nVar2825: int;
-
-var nVar2826: int;
-
-var nVar2827: int;
-
-var nVar2828: int;
-
-var nVar2829: int;
-
-var nVar2830: int;
-
-var nVar2831: int;
-
-var nVar2832: int;
-
-var nVar2833: int;
-
-var nVar2834: int;
-
-var nVar2835: int;
-
-var nVar2836: int;
-
-var nVar2837: int;
-
-var nVar2838: int;
-
-var nVar2839: int;
-
-var nVar2840: int;
-
-var nVar2841: int;
-
-var nVar2842: int;
-
-var nVar2843: int;
-
-var nVar2844: int;
-
-var nVar2845: int;
-
-var nVar2846: int;
-
-var nVar2847: int;
-
-var nVar2848: int;
-
-var nVar2849: int;
-
-var nVar2850: int;
-
-var nVar2851: int;
-
-var nVar2852: int;
-
-var nVar2853: int;
-
-var nVar2854: int;
-
-var nVar2855: int;
-
-var nVar2856: int;
-
-var nVar2857: int;
-
-var nVar2858: int;
-
-var nVar2859: int;
-
-var nVar2860: int;
-
-var nVar2861: int;
-
-var nVar2862: int;
-
-var nVar2863: int;
-
-var nVar2864: int;
-
-var nVar2865: int;
-
-var nVar2866: int;
-
-var nVar2867: int;
-
-var nVar2868: int;
-
-var nVar2869: int;
-
-var nVar2870: int;
-
-var nVar2871: int;
-
-var nVar2872: int;
-
-var nVar2873: int;
-
-var nVar2874: int;
-
-var nVar2875: int;
-
-var nVar2876: int;
-
-var nVar2877: int;
-
-var nVar2878: int;
-
-var nVar2879: int;
-
-var nVar2880: int;
-
-var nVar2881: int;
-
-var nVar2882: int;
-
-var nVar2883: int;
-
-var nVar2884: int;
-
-var nVar2885: int;
-
-var nVar2886: int;
-
-var nVar2887: int;
-
-var nVar2888: int;
-
-var nVar2889: int;
-
-var nVar2890: int;
-
-var nVar2891: int;
-
-var nVar2892: int;
-
-var nVar2893: int;
-
-var nVar2894: int;
-
-var nVar2895: int;
-
-var nVar2896: int;
-
-var nVar2897: int;
-
-var nVar2898: int;
-
-var nVar2899: int;
-
-var nVar2900: int;
-
-var nVar2901: int;
-
-var nVar2902: int;
-
-var nVar2903: int;
-
-var nVar2904: int;
-
-var nVar2905: int;
-
-var nVar2906: int;
-
-var nVar2907: int;
-
-var nVar2908: int;
-
-var nVar2909: int;
-
-var nVar2910: int;
-
-var nVar2911: int;
-
-var nVar2912: int;
-
-var nVar2913: int;
-
-var nVar2914: int;
-
-var nVar2915: int;
-
-var nVar2916: int;
-
-var nVar2917: int;
-
-var nVar2918: int;
-
-var nVar2919: int;
-
-var nVar2920: int;
-
-var nVar2921: int;
-
-var nVar2922: int;
-
-var nVar2923: int;
-
-var nVar2924: int;
-
-var nVar2925: int;
-
-var nVar2926: int;
-
-var nVar2927: int;
-
-var nVar2928: int;
-
-var nVar2929: int;
-
-var nVar2930: int;
-
-var nVar2931: int;
-
-var nVar2932: int;
-
-var nVar2933: int;
-
-var nVar2934: int;
-
-var nVar2935: int;
-
-var nVar2936: int;
-
-var nVar2937: int;
-
-var nVar2938: int;
-
-var nVar2939: int;
-
-var nVar2940: int;
-
-var nVar2941: int;
-
-var nVar2942: int;
-
-var nVar2943: int;
-
-var nVar2944: int;
-
-var nVar2945: int;
-
-var nVar2946: int;
-
-var nVar2947: int;
-
-var nVar2948: int;
-
-var nVar2949: int;
-
-var nVar2950: int;
-
-var nVar2951: int;
-
-var nVar2952: int;
-
-var nVar2953: int;
-
-var nVar2954: int;
-
-var nVar2955: int;
-
-var nVar2956: int;
-
-var nVar2957: int;
-
-var nVar2958: int;
-
-var nVar2959: int;
-
-var nVar2960: int;
-
-var nVar2961: int;
-
-var nVar2962: int;
-
-var nVar2963: int;
-
-var nVar2964: int;
-
-var nVar2965: int;
-
-var nVar2966: int;
-
-var nVar2967: int;
-
-var nVar2968: int;
-
-var nVar2969: int;
-
-var nVar2970: int;
-
-var nVar2971: int;
-
-var nVar2972: int;
-
-var nVar2973: int;
-
-var nVar2974: int;
-
-var nVar2975: int;
-
-var nVar2976: int;
-
-var nVar2977: int;
-
-var nVar2978: int;
-
-var nVar2979: int;
-
-var nVar2980: int;
-
-var nVar2981: int;
-
-var nVar2982: int;
-
-var nVar2983: int;
-
-var nVar2984: int;
-
-var nVar2985: int;
-
-var nVar2986: int;
-
-var nVar2987: int;
-
-var nVar2988: int;
-
-var nVar2989: int;
-
-var nVar2990: int;
-
-var nVar2991: int;
-
-var nVar2992: int;
-
-var nVar2993: int;
-
-var nVar2994: int;
-
-var nVar2995: int;
-
-var nVar2996: int;
-
-var nVar2997: int;
-
-var nVar2998: int;
-
-var nVar2999: int;
-
-var nVar3000: int;
-
-var nVar3001: int;
-
-var nVar3002: int;
-
-var nVar3003: int;
-
-var nVar3004: int;
-
-var nVar3005: int;
-
-var nVar3006: int;
-
-var nVar3007: int;
-
-var nVar3008: int;
-
-var nVar3009: int;
-
-var nVar3010: int;
-
-var nVar3011: int;
-
-var nVar3012: int;
-
-var nVar3013: int;
-
-var nVar3014: int;
-
-var nVar3015: int;
-
-var nVar3016: int;
-
-var nVar3017: int;
-
-var nVar3018: int;
-
-var nVar3019: int;
-
-var nVar3020: int;
-
-var nVar3021: int;
-
-var nVar3022: int;
-
-var nVar3023: int;
-
-var nVar3024: int;
-
-var nVar3025: int;
-
-var nVar3026: int;
-
-var nVar3027: int;
-
-var nVar3028: int;
-
-var nVar3029: int;
-
-var nVar3030: int;
-
-var nVar3031: int;
-
-var nVar3032: int;
-
-var nVar3033: int;
-
-var nVar3034: int;
-
-var nVar3035: int;
-
-var nVar3036: int;
-
-var nVar3037: int;
-
-var nVar3038: int;
-
-var nVar3039: int;
-
-var nVar3040: int;
-
-var nVar3041: int;
-
-var nVar3042: int;
-
-var nVar3043: int;
-
-var nVar3044: int;
-
-var nVar3045: int;
-
-var nVar3046: int;
-
-var nVar3047: int;
-
-var nVar3048: int;
-
-var nVar3049: int;
-
-var nVar3050: int;
-
-var nVar3051: int;
-
-var nVar3052: int;
-
-var nVar3053: int;
-
-var nVar3054: int;
-
-var nVar3055: int;
-
-var nVar3056: int;
-
-var nVar3057: int;
-
-var nVar3058: int;
-
-var nVar3059: int;
-
-var nVar3060: int;
-
-var nVar3061: int;
-
-var nVar3062: int;
-
-var nVar3063: int;
-
-var nVar3064: int;
-
-var nVar3065: int;
-
-var nVar3066: int;
-
-var nVar3067: int;
-
-var nVar3068: int;
-
-var nVar3069: int;
-
-var nVar3070: int;
-
-var nVar3071: int;
-
-var nVar3072: int;
-
-var nVar3073: int;
-
-var nVar3074: int;
-
-var nVar3075: int;
-
-var nVar3076: int;
-
-var nVar3077: int;
-
-var nVar3078: int;
-
-var nVar3079: int;
-
-var nVar3080: int;
-
-var nVar3081: int;
-
-var nVar3082: int;
-
-var nVar3083: int;
-
-var nVar3084: int;
-
-var nVar3085: int;
-
-var nVar3086: int;
-
-var nVar3087: int;
-
-var nVar3088: int;
-
-var nVar3089: int;
-
-var nVar3090: int;
-
-var nVar3091: int;
-
-var nVar3092: int;
-
-var nVar3093: int;
-
-var nVar3094: int;
-
-var nVar3095: int;
-
-var nVar3096: int;
-
-var nVar3097: int;
-
-var nVar3098: int;
-
-var nVar3099: int;
-
-var nVar3100: int;
-
-var nVar3101: int;
-
-var nVar3102: int;
-
-var nVar3103: int;
-
-var nVar3104: int;
-
-var nVar3105: int;
-
-var nVar3106: int;
-
-var nVar3107: int;
-
-var nVar3108: int;
-
-var nVar3109: int;
-
-var nVar3110: int;
-
-var nVar3111: int;
-
-var nVar3112: int;
-
-var nVar3113: int;
-
-var nVar3114: int;
-
-var nVar3115: int;
-
-var nVar3116: int;
-
-var nVar3117: int;
-
-var nVar3118: int;
-
-var nVar3119: int;
-
-var nVar3120: int;
-
-var nVar3121: int;
-
-var nVar3122: int;
-
-var nVar3123: int;
-
-var nVar3124: int;
-
-var nVar3125: int;
-
-var nVar3126: int;
-
-var nVar3127: int;
-
-var nVar3128: int;
-
-var nVar3129: int;
-
-var nVar3130: int;
-
-var nVar3131: int;
-
-var nVar3132: int;
-
-var nVar3133: int;
-
-var nVar3134: int;
-
-var nVar3135: int;
-
-var nVar3136: int;
-
-var nVar3137: int;
-
-var nVar3138: int;
-
-var nVar3139: int;
-
-var nVar3140: int;
-
-var nVar3141: int;
-
-var nVar3142: int;
-
-var nVar3143: int;
-
-var nVar3144: int;
-
-var nVar3145: int;
-
-var nVar3146: int;
-
-var nVar3147: int;
-
-var nVar3148: int;
-
-var nVar3149: int;
-
-var nVar3150: int;
-
-var nVar3151: int;
-
-var nVar3152: int;
-
-var nVar3153: int;
-
-var nVar3154: int;
-
-var nVar3155: int;
-
-var nVar3156: int;
-
-var nVar3157: int;
-
-var nVar3158: int;
-
-var nVar3159: int;
-
-var nVar3160: int;
-
-var nVar3161: int;
-
-var nVar3162: int;
-
-var nVar3163: int;
-
-var nVar3164: int;
-
-var nVar3165: int;
-
-var nVar3166: int;
-
-var nVar3167: int;
-
-var nVar3168: int;
-
-var nVar3169: int;
-
-var nVar3170: int;
-
-var nVar3171: int;
-
-var nVar3172: int;
-
-var nVar3173: int;
-
-var nVar3174: int;
-
-var nVar3175: int;
-
-var nVar3176: int;
-
-var nVar3177: int;
-
-var nVar3178: int;
-
-var nVar3179: int;
-
-var nVar3180: int;
-
-var nVar3181: int;
-
-var nVar3182: int;
-
-var nVar3183: int;
-
-var nVar3184: int;
-
-var nVar3185: int;
-
-var nVar3186: int;
-
-var nVar3187: int;
-
-var nVar3188: int;
-
-var nVar3189: int;
-
-var nVar3190: int;
-
-var nVar3191: int;
-
-var nVar3192: int;
-
-var nVar3193: int;
-
-var nVar3194: int;
-
-var nVar3195: int;
-
-var nVar3196: int;
-
-var nVar3197: int;
-
-var nVar3198: int;
-
-var nVar3199: int;
-
-var nVar3200: int;
-
-var nVar3201: int;
-
-var nVar3202: int;
-
-var nVar3203: int;
-
-var nVar3204: int;
-
-var nVar3205: int;
-
-var nVar3206: int;
-
-var nVar3207: int;
-
-var nVar3208: int;
-
-var nVar3209: int;
-
-var nVar3210: int;
-
-var nVar3211: int;
-
-var nVar3212: int;
-
-var nVar3213: int;
-
-var nVar3214: int;
-
-var nVar3215: int;
-
-var nVar3216: int;
-
-var nVar3217: int;
-
-var nVar3218: int;
-
-var nVar3219: int;
-
-var nVar3220: int;
-
-var nVar3221: int;
-
-var nVar3222: int;
-
-var nVar3223: int;
-
-var nVar3224: int;
-
-var nVar3225: int;
-
-var nVar3226: int;
-
-var nVar3227: int;
-
-var nVar3228: int;
-
-var nVar3229: int;
-
-var nVar3230: int;
-
-var nVar3231: int;
-
-var nVar3232: int;
-
-var nVar3233: int;
-
-var nVar3234: int;
-
-var nVar3235: int;
-
-var nVar3236: int;
-
-var nVar3237: int;
-
-var nVar3238: int;
-
-var nVar3239: int;
-
-var nVar3240: int;
-
-var nVar3241: int;
-
-var nVar3242: int;
-
-var nVar3243: int;
-
-var nVar3244: int;
-
-var nVar3245: int;
-
-var nVar3246: int;
-
-var nVar3247: int;
-
-var nVar3248: int;
-
-var nVar3249: int;
-
-var nVar3250: int;
-
-var nVar3251: int;
-
-var nVar3252: int;
-
-var nVar3253: int;
-
-var nVar3254: int;
-
-var nVar3255: int;
-
-var nVar3256: int;
-
-var nVar3257: int;
-
-var nVar3258: int;
-
-var nVar3259: int;
-
-var nVar3260: int;
-
-var nVar3261: int;
-
-var nVar3262: int;
-
-var nVar3263: int;
-
-var nVar3264: int;
-
-var nVar3265: int;
-
-var nVar3266: int;
-
-var nVar3267: int;
-
-var nVar3268: int;
-
-var nVar3269: int;
-
-var nVar3270: int;
-
-var nVar3271: int;
-
-var nVar3272: int;
-
-var nVar3273: int;
-
-var nVar3274: int;
-
-var nVar3275: int;
-
-var nVar3276: int;
-
-var nVar3277: int;
-
-var nVar3278: int;
-
-var nVar3279: int;
-
-var nVar3280: int;
-
-var nVar3281: int;
-
-var nVar3282: int;
-
-var nVar3283: int;
-
-var nVar3284: int;
-
-var nVar3285: int;
-
-var nVar3286: int;
-
-var nVar3287: int;
-
-var nVar3288: int;
-
-var nVar3289: int;
-
-var nVar3290: int;
-
-var nVar3291: int;
-
-var nVar3292: int;
-
-var nVar3293: int;
-
-var nVar3294: int;
-
-var nVar3295: int;
-
-var nVar3296: int;
-
-var nVar3297: int;
-
-var nVar3298: int;
-
-var nVar3299: int;
-
-var nVar3300: int;
-
-var nVar3301: int;
-
-var nVar3302: int;
-
-var nVar3303: int;
-
-var nVar3304: int;
-
-var nVar3305: int;
-
-var nVar3306: int;
-
-var nVar3307: int;
-
-var nVar3308: int;
-
-var nVar3309: int;
-
-var nVar3310: int;
-
-var nVar3311: int;
-
-var nVar3312: int;
-
-var nVar3313: int;
-
-var nVar3314: int;
-
-var nVar3315: int;
-
-var nVar3316: int;
-
-var nVar3317: int;
-
-var nVar3318: int;
-
-var nVar3319: int;
-
-var nVar3320: int;
-
-var nVar3321: int;
-
-var nVar3322: int;
-
-var nVar3323: int;
-
-var nVar3324: int;
-
-var nVar3325: int;
-
-var nVar3326: int;
-
-var nVar3327: int;
-
-var nVar3328: int;
-
-var nVar3329: int;
-
-var nVar3330: int;
-
-var nVar3331: int;
-
-var nVar3332: int;
-
-var nVar3333: int;
-
-var nVar3334: int;
-
-var nVar3335: int;
-
-var nVar3336: int;
-
-var nVar3337: int;
-
-var nVar3338: int;
-
-var nVar3339: int;
-
-var nVar3340: int;
-
-var nVar3341: int;
-
-var nVar3342: int;
-
-var nVar3343: int;
-
-var nVar3344: int;
-
-var nVar3345: int;
-
-var nVar3346: int;
-
-var nVar3347: int;
-
-var nVar3348: int;
-
-var nVar3349: int;
-
-var nVar3350: int;
-
-var nVar3351: int;
-
-var nVar3352: int;
-
-var nVar3353: int;
-
-var nVar3354: int;
-
-var nVar3355: int;
-
-var nVar3356: int;
-
-var nVar3357: int;
-
-var nVar3358: int;
-
-var nVar3359: int;
-
-var nVar3360: int;
-
-var nVar3361: int;
-
-var nVar3362: int;
-
-var nVar3363: int;
-
-var nVar3364: int;
-
-var nVar3365: int;
-
-var nVar3366: int;
-
-var nVar3367: int;
-
-var nVar3368: int;
-
-var nVar3369: int;
-
-var nVar3370: int;
-
-var nVar3371: int;
-
-var nVar3372: int;
-
-var nVar3373: int;
-
-var nVar3374: int;
-
-var nVar3375: int;
-
-var nVar3376: int;
-
-var nVar3377: int;
-
-var nVar3378: int;
-
-var nVar3379: int;
-
-var nVar3380: int;
-
-var nVar3381: int;
-
-var nVar3382: int;
-
-var nVar3383: int;
-
-var nVar3384: int;
-
-var nVar3385: int;
-
-var nVar3386: int;
-
-var nVar3387: int;
-
-var nVar3388: int;
-
-var nVar3389: int;
-
-var nVar3390: int;
-
-var nVar3391: int;
-
-var nVar3392: int;
-
-var nVar3393: int;
-
-var nVar3394: int;
-
-var nVar3395: int;
-
-var nVar3396: int;
-
-var nVar3397: int;
-
-var nVar3398: int;
-
-var nVar3399: int;
-
-var nVar3400: int;
-
-var nVar3401: int;
-
-var nVar3402: int;
-
-var nVar3403: int;
-
-var nVar3404: int;
-
-var nVar3405: int;
-
-var nVar3406: int;
-
-var nVar3407: int;
-
-var nVar3408: int;
-
-var nVar3409: int;
-
-var nVar3410: int;
-
-var nVar3411: int;
-
-var nVar3412: int;
-
-var nVar3413: int;
-
-var nVar3414: int;
-
-var nVar3415: int;
-
-var nVar3416: int;
-
-var nVar3417: int;
-
-var nVar3418: int;
-
-var nVar3419: int;
-
-var nVar3420: int;
-
-var nVar3421: int;
-
-var nVar3422: int;
-
-var nVar3423: int;
-
-var nVar3424: int;
-
-var nVar3425: int;
-
-var nVar3426: int;
-
-var nVar3427: int;
-
-var nVar3428: int;
-
-var nVar3429: int;
-
-var nVar3430: int;
-
-var nVar3431: int;
-
-var nVar3432: int;
-
-var nVar3433: int;
-
-var nVar3434: int;
-
-var nVar3435: int;
-
-var nVar3436: int;
-
-var nVar3437: int;
-
-var nVar3438: int;
-
-var nVar3439: int;
-
-var nVar3440: int;
-
-var nVar3441: int;
-
-var nVar3442: int;
-
-var nVar3443: int;
-
-var nVar3444: int;
-
-var nVar3445: int;
-
-var nVar3446: int;
-
-var nVar3447: int;
-
-var nVar3448: int;
-
-var nVar3449: int;
-
-var nVar3450: int;
-
-var nVar3451: int;
-
-var nVar3452: int;
-
-var nVar3453: int;
-
-var nVar3454: int;
-
-var nVar3455: int;
-
-var nVar3456: int;
-
-var nVar3457: int;
-
-var nVar3458: int;
-
-var nVar3459: int;
-
-var nVar3460: int;
-
-var nVar3461: int;
-
-var nVar3462: int;
-
-var nVar3463: int;
-
-var nVar3464: int;
-
-var nVar3465: int;
-
-var nVar3466: int;
-
-var nVar3467: int;
-
-var nVar3468: int;
-
-var nVar3469: int;
-
-var nVar3470: int;
-
-var nVar3471: int;
-
-var nVar3472: int;
-
-var nVar3473: int;
-
-var nVar3474: int;
-
-var nVar3475: int;
-
-var nVar3476: int;
-
-var nVar3477: int;
-
-var nVar3478: int;
-
-var nVar3479: int;
-
-var nVar3480: int;
-
-var nVar3481: int;
-
-var nVar3482: int;
-
-var nVar3483: int;
-
-var nVar3484: int;
-
-var nVar3485: int;
-
-var nVar3486: int;
-
-var nVar3487: int;
-
-var nVar3488: int;
-
-var nVar3489: int;
-
-var nVar3490: int;
-
-var nVar3491: int;
-
-var nVar3492: int;
-
-var nVar3493: int;
-
-var nVar3494: int;
-
-var nVar3495: int;
-
-var nVar3496: int;
-
-var nVar3497: int;
-
-var nVar3498: int;
-
-var nVar3499: int;
-
-var nVar3500: int;
-
-var nVar3501: int;
-
-var nVar3502: int;
-
-var nVar3503: int;
-
-var nVar3504: int;
-
-var nVar3505: int;
-
-var nVar3506: int;
-
-var nVar3507: int;
-
-var nVar3508: int;
-
-var nVar3509: int;
-
-var nVar3510: int;
-
-var nVar3511: int;
-
-var nVar3512: int;
-
-var nVar3513: int;
-
-var nVar3514: int;
-
-var nVar3515: int;
-
-var nVar3516: int;
-
-var nVar3517: int;
-
-var nVar3518: int;
-
-var nVar3519: int;
-
-var nVar3520: int;
-
-var nVar3521: int;
-
-var nVar3522: int;
-
-var nVar3523: int;
-
-var nVar3524: int;
-
-var nVar3525: int;
-
-var nVar3526: int;
-
-var nVar3527: int;
-
-var nVar3528: int;
-
-var nVar3529: int;
-
-var nVar3530: int;
-
-var nVar3531: int;
-
-var nVar3532: int;
-
-var nVar3533: int;
-
-var nVar3534: int;
-
-var nVar3535: int;
-
-var nVar3536: int;
-
-var nVar3537: int;
-
-var nVar3538: int;
-
-var nVar3539: int;
-
-var nVar3540: int;
-
-var nVar3541: int;
-
-var nVar3542: int;
-
-var nVar3543: int;
-
-var nVar3544: int;
-
-var nVar3545: int;
-
-var nVar3546: int;
-
-var nVar3547: int;
-
-var nVar3548: int;
-
-var nVar3549: int;
-
-var nVar3550: int;
-
-var nVar3551: int;
-
-var nVar3552: int;
-
-var nVar3553: int;
-
-var nVar3554: int;
-
-var nVar3555: int;
-
-var nVar3556: int;
-
-var nVar3557: int;
-
-var nVar3558: int;
-
-var nVar3559: int;
-
-var nVar3560: int;
-
-var nVar3561: int;
-
-var nVar3562: int;
-
-var nVar3563: int;
-
-var nVar3564: int;
-
-var nVar3565: int;
-
-var nVar3566: int;
-
-var nVar3567: int;
-
-var nVar3568: int;
-
-var nVar3569: int;
-
-var nVar3570: int;
-
-var nVar3571: int;
-
-var nVar3572: int;
-
-var nVar3573: int;
-
-var nVar3574: int;
-
-var nVar3575: int;
-
-var nVar3576: int;
-
-var nVar3577: int;
-
-var nVar3578: int;
-
-var nVar3579: int;
-
-var nVar3580: int;
-
-var nVar3581: int;
-
-var nVar3582: int;
-
-var nVar3583: int;
-
-var nVar3584: int;
-
-var nVar3585: int;
-
-var nVar3586: int;
-
-var nVar3587: int;
-
-var nVar3588: int;
-
-var nVar3589: int;
-
-var nVar3590: int;
-
-var nVar3591: int;
-
-var nVar3592: int;
-
-var nVar3593: int;
-
-var nVar3594: int;
-
-var nVar3595: int;
-
-var nVar3596: int;
-
-var nVar3597: int;
-
-var nVar3598: int;
-
-var nVar3599: int;
-
-var nVar3600: int;
-
-var nVar3601: int;
-
-var nVar3602: int;
-
-var nVar3603: int;
-
-var nVar3604: int;
-
-var nVar3605: int;
-
-var nVar3606: int;
-
-var nVar3607: int;
-
-var nVar3608: int;
-
-var nVar3609: int;
-
-var nVar3610: int;
-
-var nVar3611: int;
-
-var nVar3612: int;
-
-var nVar3613: int;
-
-var nVar3614: int;
-
-var nVar3615: int;
-
-var nVar3616: int;
-
-var nVar3617: int;
-
-var nVar3618: int;
-
-var nVar3619: int;
-
-var nVar3620: int;
-
-var nVar3621: int;
-
-var nVar3622: int;
-
-var nVar3623: int;
-
-var nVar3624: int;
-
-var nVar3625: int;
-
-var nVar3626: int;
-
-var nVar3627: int;
-
-var nVar3628: int;
-
-var nVar3629: int;
-
-var nVar3630: int;
-
-var nVar3631: int;
-
-var nVar3632: int;
-
-var nVar3633: int;
-
-var nVar3634: int;
-
-var nVar3635: int;
-
-var nVar3636: int;
-
-var nVar3637: int;
-
-var nVar3638: int;
-
-var nVar3639: int;
-
-var nVar3640: int;
-
-var nVar3641: int;
-
-var nVar3642: int;
-
-var nVar3643: int;
-
-var nVar3644: int;
-
-var nVar3645: int;
-
-var nVar3646: int;
-
-var nVar3647: int;
-
-var nVar3648: int;
-
-var nVar3649: int;
-
-var nVar3650: int;
-
-var nVar3651: int;
-
-var nVar3652: int;
-
-var nVar3653: int;
-
-var nVar3654: int;
-
-var nVar3655: int;
-
-var nVar3656: int;
-
-var nVar3657: int;
-
-var nVar3658: int;
-
-var nVar3659: int;
-
-var nVar3660: int;
-
-var nVar3661: int;
-
-var nVar3662: int;
-
-var nVar3663: int;
-
-var nVar3664: int;
-
-var nVar3665: int;
-
-var nVar3666: int;
-
-var nVar3667: int;
-
-var nVar3668: int;
-
-var nVar3669: int;
-
-var nVar3670: int;
-
-var nVar3671: int;
-
-var nVar3672: int;
-
-var nVar3673: int;
-
-var nVar3674: int;
-
-var nVar3675: int;
-
-var nVar3676: int;
-
-var nVar3677: int;
-
-var nVar3678: int;
-
-var nVar3679: int;
-
-var nVar3680: int;
-
-var nVar3681: int;
-
-var nVar3682: int;
-
-var nVar3683: int;
-
-var nVar3684: int;
-
-var nVar3685: int;
-
-var nVar3686: int;
-
-var nVar3687: int;
-
-var nVar3688: int;
-
-var nVar3689: int;
-
-var nVar3690: int;
-
-var nVar3691: int;
-
-var nVar3692: int;
-
-var nVar3693: int;
-
-var nVar3694: int;
-
-var nVar3695: int;
-
-var nVar3696: int;
-
-var nVar3697: int;
-
-var nVar3698: int;
-
-var nVar3699: int;
-
-var nVar3700: int;
-
-var nVar3701: int;
-
-var nVar3702: int;
-
-var nVar3703: int;
-
-var nVar3704: int;
-
-var nVar3705: int;
-
-var nVar3706: int;
-
-var nVar3707: int;
-
-var nVar3708: int;
-
-var nVar3709: int;
-
-var nVar3710: int;
-
-var nVar3711: int;
-
-var nVar3712: [int]int;
-
-var nVar3713: [int]int;
-
-var nVar3714: [int]int;
-
-var nVar3715: [int]int;
-
-var nVar3716: [int]int;
-
-var nVar3717: [int]int;
-
-var nVar3718: [int]int;
-
-var nVar3719: [int]int;
-
-var nVar3720: [int]int;
-
-var nVar3721: [int]int;
-
-var nVar3722: [int]int;
-
-const unique nVar3723: int;
-
-const unique nVar3724: int;
-
-const unique nVar3725: int;
-
-const unique nVar3726: int;
-
-const unique nVar3727: int;
-
-const unique nVar3728: int;
-
-const unique nVar3729: int;
-
-const unique nVar3730: int;
-
-const unique nVar3731: int;
-
-const unique nVar3732: int;
-
-const unique nVar3733: int;
-
-const unique nVar3734: int;
-
-const unique nVar3735: int;
-
-const unique nVar3736: int;
-
-const unique nVar3737: int;
-
-const unique nVar3738: int;
-
-const unique nVar3739: int;
-
-const unique nVar3740: int;
-
-const unique nVar3741: int;
-
-const unique nVar3742: int;
-
-const unique nVar3743: int;
-
-const unique nVar3744: int;
-
-const unique nVar3745: int;
-
-const unique nVar3746: int;
-
-const unique nVar3747: int;
-
-const unique nVar3748: int;
-
-const unique nVar3749: int;
-
-const unique nVar3750: int;
-
-const unique nVar3751: int;
-
-const unique nVar3752: int;
-
-const unique nVar3753: int;
-
-const unique nVar3754: int;
-
-const unique nVar3755: int;
-
-const unique nVar3756: int;
-
-const unique nVar3757: int;
-
-const unique nVar3758: int;
-
-const unique nVar3759: int;
-
-const unique nVar3760: int;
-
-const unique nVar3761: int;
-
-const unique nVar3762: int;
-
-const unique nVar3763: int;
-
-const unique nVar3764: int;
-
-const unique nVar3765: int;
-
-const unique nVar3766: int;
-
-const unique nVar3767: int;
-
-const unique nVar3768: int;
-
-const unique nVar3769: int;
-
-const unique nVar3770: int;
-
-const unique nVar3771: int;
-
-const unique nVar3772: int;
-
-const unique nVar3773: int;
-
-const unique nVar3774: int;
-
-const unique nVar3775: int;
-
-const unique nVar3776: int;
-
-const unique nVar3777: int;
-
-const unique nVar3778: int;
-
-const unique nVar3779: int;
-
-const unique nVar3780: int;
-
-const unique nVar3781: int;
-
-const unique nVar3782: int;
-
-const unique nVar3783: int;
-
-const unique nVar3784: int;
-
-const unique nVar3785: int;
-
-const unique nVar3786: int;
-
-const unique nVar3787: int;
-
-const unique nVar3788: int;
-
-const unique nVar3789: int;
-
-const unique nVar3790: int;
-
-const unique nVar3791: int;
-
-const unique nVar3792: int;
-
-const unique nVar3793: int;
-
-const unique nVar3794: int;
-
-const unique nVar3795: int;
-
-const unique nVar3796: int;
-
-const unique nVar3797: int;
-
-const unique nVar3798: int;
-
-const unique nVar3799: int;
-
-const unique nVar3800: int;
-
-const unique nVar3801: int;
-
-const unique nVar3802: int;
-
-const unique nVar3803: int;
-
-const unique nVar3804: int;
-
-const unique nVar3805: int;
-
-const unique nVar3806: int;
-
-const unique nVar3807: int;
-
-const unique nVar3808: int;
-
-const unique nVar3809: int;
-
-const unique nVar3810: int;
-
-const unique nVar3811: int;
-
-const unique nVar3812: int;
-
-const unique nVar3813: int;
-
-const unique nVar3814: int;
-
-const unique nVar3815: int;
-
-const unique nVar3816: int;
-
-const unique nVar3817: int;
-
-const unique nVar3818: int;
-
-const unique nVar3819: int;
-
-const unique nVar3820: int;
-
-const unique nVar3821: int;
-
-const unique nVar3822: int;
-
-const unique nVar3823: int;
-
-const unique nVar3824: int;
-
-const unique nVar3825: int;
-
-const unique nVar3826: int;
-
-const unique nVar3827: int;
-
-const unique nVar3828: int;
-
-const unique nVar3829: int;
-
-const unique nVar3830: int;
-
-const unique nVar3831: int;
-
-const unique nVar3832: int;
-
-const unique nVar3833: int;
-
-const unique nVar3834: int;
-
-const unique nVar3835: int;
-
-const unique nVar3836: int;
-
-const unique nVar3837: int;
-
-const unique nVar3838: int;
-
-const unique nVar3839: int;
-
-const unique nVar3840: int;
-
-const unique nVar3841: int;
-
-const unique nVar3842: int;
-
-const unique nVar3843: int;
-
-const unique nVar3844: int;
-
-const unique nVar3845: int;
-
-const unique nVar3846: int;
-
-const unique nVar3847: int;
-
-const unique nVar3848: int;
-
-const unique nVar3849: int;
-
-const unique nVar3850: int;
-
-const unique nVar3851: int;
-
-const unique nVar3852: int;
-
-const unique nVar3853: int;
-
-const unique nVar3854: int;
-
-const unique nVar3855: int;
-
-const unique nVar3856: int;
-
-const unique nVar3857: int;
-
-const unique nVar3858: int;
-
-const unique nVar3859: int;
-
-const unique nVar3860: int;
-
-const unique nVar3861: int;
-
-const unique nVar3862: int;
-
-const unique nVar3863: int;
-
-const unique nVar3864: int;
-
-const unique nVar3865: int;
-
-const unique nVar3866: int;
-
-const unique nVar3867: int;
-
-const unique nVar3868: int;
-
-const unique nVar3869: int;
-
-const unique nVar3870: int;
-
-const unique nVar3871: int;
-
-const unique nVar3872: int;
-
-const unique nVar3873: int;
-
-const unique nVar3874: int;
-
-const unique nVar3875: int;
-
-const unique nVar3876: int;
-
-const unique nVar3877: int;
-
-const unique nVar3878: int;
-
-const unique nVar3879: int;
-
-const unique nVar3880: int;
-
-const unique nVar3881: int;
-
-const unique nVar3882: int;
-
-const unique nVar3883: int;
-
-const unique nVar3884: int;
-
-const unique nVar3885: int;
-
-const unique nVar3886: int;
-
-const unique nVar3887: int;
-
-const unique nVar3888: int;
-
-const unique nVar3889: int;
-
-const unique nVar3890: int;
-
-const unique nVar3891: int;
-
-const unique nVar3892: int;
-
-const unique nVar3893: int;
-
-const unique nVar3894: int;
-
-const unique nVar3895: int;
-
-const unique nVar3896: int;
-
-const unique nVar3897: int;
-
-const unique nVar3898: int;
-
-const unique nVar3899: int;
-
-const unique nVar3900: int;
-
-const unique nVar3901: int;
-
-const unique nVar3902: int;
-
-const unique nVar3903: int;
-
-const unique nVar3904: int;
-
-const unique nVar3905: int;
-
-const unique nVar3906: int;
-
-const unique nVar3907: int;
-
-const unique nVar3908: int;
-
-const unique nVar3909: int;
-
-const unique nVar3910: int;
-
-const unique nVar3911: int;
-
-const unique nVar3912: int;
-
-const unique nVar3913: int;
-
-const unique nVar3914: int;
-
-const unique nVar3915: int;
-
-const unique nVar3916: int;
-
-const unique nVar3917: int;
-
-const unique nVar3918: int;
-
-const unique nVar3919: int;
-
-const unique nVar3920: int;
-
-const unique nVar3921: int;
-
-const unique nVar3922: int;
-
-const unique nVar3923: int;
-
-const unique nVar3924: int;
-
-const unique nVar3925: int;
-
-const unique nVar3926: int;
-
-const unique nVar3927: int;
-
-const unique nVar3928: int;
-
-const unique nVar3929: int;
-
-const unique nVar3930: int;
-
-const unique nVar3931: int;
-
-const unique nVar3932: int;
-
-const unique nVar3933: int;
-
-const unique nVar3934: int;
-
-const unique nVar3935: int;
-
-const unique nVar3936: int;
-
-const unique nVar3937: int;
-
-const unique nVar3938: int;
-
-const unique nVar3939: int;
-
-const unique nVar3940: int;
-
-const unique nVar3941: int;
-
-const unique nVar3942: int;
-
-const unique nVar3943: int;
-
-const unique nVar3944: int;
-
-const unique nVar3945: int;
-
-const unique nVar3946: int;
-
-const unique nVar3947: int;
-
-const unique nVar3948: int;
-
-const unique nVar3949: int;
-
-const unique nVar3950: int;
-
-const unique nVar3951: int;
-
-const unique nVar3952: int;
-
-const unique nVar3953: int;
-
-const unique nVar3954: int;
-
-const unique nVar3955: int;
-
-const unique nVar3956: int;
-
-const unique nVar3957: int;
-
-const unique nVar3958: int;
-
-const unique nVar3959: int;
-
-const unique nVar3960: int;
-
-const unique nVar3961: int;
-
-const unique nVar3962: int;
-
-const unique nVar3963: int;
-
-const unique nVar3964: int;
-
-const unique nVar3965: int;
-
-const unique nVar3966: int;
-
-const unique nVar3967: int;
-
-const unique nVar3968: int;
-
-const unique nVar3969: int;
-
-const unique nVar3970: int;
-
-const unique nVar3971: int;
-
-const unique nVar3972: int;
-
-const unique nVar3973: int;
-
-const unique nVar3974: int;
-
-const unique nVar3975: int;
-
-const unique nVar3976: int;
-
-const unique nVar3977: int;
-
-const unique nVar3978: int;
-
-const unique nVar3979: int;
-
-const unique nVar3980: int;
-
-const unique nVar3981: int;
-
-const unique nVar3982: int;
-
-const unique nVar3983: int;
-
-const unique nVar3984: int;
-
-const unique nVar3985: int;
-
-const unique nVar3986: int;
-
-const unique nVar3987: int;
-
-const unique nVar3988: int;
-
-const unique nVar3989: int;
-
-const unique nVar3990: int;
-
-const unique nVar3991: int;
-
-const unique nVar3992: int;
-
-const unique nVar3993: int;
-
-const unique nVar3994: int;
-
-const unique nVar3995: int;
-
-const unique nVar3996: int;
-
-const unique nVar3997: int;
-
-const unique nVar3998: int;
-
-const unique nVar3999: int;
-
-const unique nVar4000: int;
-
-const unique nVar4001: int;
-
-const unique nVar4002: int;
-
-const unique nVar4003: int;
-
-const unique nVar4004: int;
-
-const unique nVar4005: int;
-
-const unique nVar4006: int;
-
-const unique nVar4007: int;
-
-const unique nVar4008: int;
-
-const unique nVar4009: int;
-
-const unique nVar4010: int;
-
-const unique nVar4011: int;
-
-const unique nVar4012: int;
-
-const unique nVar4013: int;
-
-const unique nVar4014: int;
-
-const unique nVar4015: int;
-
-const unique nVar4016: int;
-
-const unique nVar4017: int;
-
-const unique nVar4018: int;
-
-const unique nVar4019: int;
-
-const unique nVar4020: int;
-
-const unique nVar4021: int;
-
-const unique nVar4022: int;
-
-const unique nVar4023: int;
-
-const unique nVar4024: int;
-
-const unique nVar4025: int;
-
-const unique nVar4026: int;
-
-const unique nVar4027: int;
-
-const unique nVar4028: int;
-
-const unique nVar4029: int;
-
-const unique nVar4030: int;
-
-const unique nVar4031: int;
-
-const unique nVar4032: int;
-
-const unique nVar4033: int;
-
-const unique nVar4034: int;
-
-const unique nVar4035: int;
-
-const unique nVar4036: int;
-
-const unique nVar4037: int;
-
-const unique nVar4038: int;
-
-const unique nVar4039: int;
-
-const unique nVar4040: int;
-
-const unique nVar4041: int;
-
-const unique nVar4042: int;
-
-const unique nVar4043: int;
-
-const unique nVar4044: int;
-
-const unique nVar4045: int;
-
-const unique nVar4046: int;
-
-const unique nVar4047: int;
-
-const unique nVar4048: int;
-
-const unique nVar4049: int;
-
-const unique nVar4050: int;
-
-const unique nVar4051: int;
-
-const unique nVar4052: int;
-
-const unique nVar4053: int;
-
-const unique nVar4054: int;
-
-const unique nVar4055: int;
-
-const unique nVar4056: int;
-
-const unique nVar4057: int;
-
-const unique nVar4058: int;
-
-const unique nVar4059: int;
-
-const unique nVar4060: int;
-
-const unique nVar4061: int;
-
-const unique nVar4062: int;
-
-const unique nVar4063: int;
-
-const unique nVar4064: int;
-
-const unique nVar4065: int;
-
-const unique nVar4066: int;
-
-const unique nVar4067: int;
-
-const unique nVar4068: int;
-
-const unique nVar4069: int;
-
-const unique nVar4070: int;
-
-const unique nVar4071: int;
-
-const unique nVar4072: int;
-
-const unique nVar4073: int;
-
-const unique nVar4074: int;
-
-const unique nVar4075: int;
-
-const unique nVar4076: int;
-
-const unique nVar4077: int;
-
-const unique nVar4078: int;
-
-const unique nVar4079: int;
-
-const unique nVar4080: int;
-
-const unique nVar4081: int;
-
-const unique nVar4082: int;
-
-const unique nVar4083: int;
-
-const unique nVar4084: int;
-
-const unique nVar4085: int;
-
-const unique nVar4086: int;
-
-const unique nVar4087: int;
-
-const unique nVar4088: int;
-
-const unique nVar4089: int;
-
-const unique nVar4090: int;
-
-const unique nVar4091: int;
-
-const unique nVar4092: int;
-
-const unique nVar4093: int;
-
-const unique nVar4094: int;
-
-const unique nVar4095: int;
-
-const unique nVar4096: int;
-
-const unique nVar4097: int;
-
-const unique nVar4098: int;
-
-const unique nVar4099: int;
-
-const unique nVar4100: int;
-
-const unique nVar4101: int;
-
-const unique nVar4102: int;
-
-const unique nVar4103: int;
-
-const unique nVar4104: int;
-
-const unique nVar4105: int;
-
-const unique nVar4106: int;
-
-const unique nVar4107: int;
-
-const unique nVar4108: int;
-
-const unique nVar4109: int;
-
-const unique nVar4110: int;
-
-const unique nVar4111: int;
-
-const unique nVar4112: int;
-
-const unique nVar4113: int;
-
-const unique nVar4114: int;
-
-const unique nVar4115: int;
-
-const unique nVar4116: int;
-
-const unique nVar4117: int;
-
-const unique nVar4118: int;
-
-const unique nVar4119: int;
-
-const unique nVar4120: int;
-
-const unique nVar4121: int;
-
-const unique nVar4122: int;
-
-const unique nVar4123: int;
-
-const unique nVar4124: int;
-
-const unique nVar4125: int;
-
-const unique nVar4126: int;
-
-const unique nVar4127: int;
-
-const unique nVar4128: int;
-
-const unique nVar4129: int;
-
-const unique nVar4130: int;
-
-const unique nVar4131: int;
-
-const unique nVar4132: int;
-
-const unique nVar4133: int;
-
-const unique nVar4134: int;
-
-const unique nVar4135: int;
-
-const unique nVar4136: int;
-
-const unique nVar4137: int;
-
-const unique nVar4138: int;
-
-const unique nVar4139: int;
-
-const unique nVar4140: int;
-
-const unique nVar4141: int;
-
-const unique nVar4142: int;
-
-const unique nVar4143: int;
-
-const unique nVar4144: int;
-
-const unique nVar4145: int;
-
-const unique nVar4146: int;
-
-const unique nVar4147: int;
-
-const unique nVar4148: int;
-
-const unique nVar4149: int;
-
-const unique nVar4150: int;
-
-const unique nVar4151: int;
-
-const unique nVar4152: int;
-
-const unique nVar4153: int;
-
-const unique nVar4154: int;
-
-const unique nVar4155: int;
-
-const unique nVar4156: int;
-
-const unique nVar4157: int;
-
-const unique nVar4158: int;
-
-const unique nVar4159: int;
-
-const unique nVar4160: int;
-
-const unique nVar4161: int;
-
-const unique nVar4162: int;
-
-const unique nVar4163: int;
-
-const unique nVar4164: int;
-
-const unique nVar4165: int;
-
-const unique nVar4166: int;
-
-const unique nVar4167: int;
-
-const unique nVar4168: int;
-
-const unique nVar4169: int;
-
-const unique nVar4170: int;
-
-const unique nVar4171: int;
-
-const unique nVar4172: int;
-
-const unique nVar4173: int;
-
-const unique nVar4174: int;
-
-const unique nVar4175: int;
-
-const unique nVar4176: int;
-
-const unique nVar4177: int;
-
-const unique nVar4178: int;
-
-const unique nVar4179: int;
-
-const unique nVar4180: int;
-
-const unique nVar4181: int;
-
-const unique nVar4182: int;
-
-const unique nVar4183: int;
-
-const unique nVar4184: int;
-
-const unique nVar4185: int;
-
-const unique nVar4186: int;
-
-const unique nVar4187: int;
-
-const unique nVar4188: int;
-
-const unique nVar4189: int;
-
-const unique nVar4190: int;
-
-const unique nVar4191: int;
-
-const unique nVar4192: int;
-
-const unique nVar4193: int;
-
-const unique nVar4194: int;
-
-const unique nVar4195: int;
-
-const unique nVar4196: int;
-
-const unique nVar4197: int;
-
-const unique nVar4198: int;
-
-const unique nVar4199: int;
-
-const unique nVar4200: int;
-
-const unique nVar4201: int;
-
-const unique nVar4202: int;
-
-const unique nVar4203: int;
-
-const unique nVar4204: int;
-
-const unique nVar4205: int;
-
-const unique nVar4206: int;
-
-const unique nVar4207: int;
-
-const unique nVar4208: int;
-
-const unique nVar4209: int;
-
-const unique nVar4210: int;
-
-const unique nVar4211: int;
-
-const unique nVar4212: int;
-
-const unique nVar4213: int;
-
-const unique nVar4214: int;
-
-const unique nVar4215: int;
-
-const unique nVar4216: int;
-
-const unique nVar4217: int;
-
-const unique nVar4218: int;
-
-const unique nVar4219: int;
-
-const unique nVar4220: int;
-
-const unique nVar4221: int;
-
-const unique nVar4222: int;
-
-const unique nVar4223: int;
-
-const unique nVar4224: int;
-
-const unique nVar4225: int;
-
-const unique nVar4226: int;
-
-const unique nVar4227: int;
-
-const unique nVar4228: int;
-
-const unique nVar4229: int;
-
-const unique nVar4230: int;
-
-const unique nVar4231: int;
-
-const unique nVar4232: int;
-
-const unique nVar4233: int;
-
-const unique nVar4234: int;
-
-const unique nVar4235: int;
-
-const unique nVar4236: int;
-
-const unique nVar4237: int;
-
-const unique nVar4238: int;
-
-const unique nVar4239: int;
-
-const unique nVar4240: int;
-
-const unique nVar4241: int;
-
-const unique nVar4242: int;
-
-const unique nVar4243: int;
-
-const unique nVar4244: int;
-
-const unique nVar4245: int;
-
-const unique nVar4246: int;
-
-const unique nVar4247: int;
-
-const unique nVar4248: int;
-
-const unique nVar4249: int;
-
-const unique nVar4250: int;
-
-const unique nVar4251: int;
-
-const unique nVar4252: int;
-
-const unique nVar4253: int;
-
-const unique nVar4254: int;
-
-const unique nVar4255: int;
-
-const unique nVar4256: int;
-
-const unique nVar4257: int;
-
-const unique nVar4258: int;
-
-const unique nVar4259: int;
-
-const unique nVar4260: int;
-
-const unique nVar4261: int;
-
-const unique nVar4262: int;
-
-const unique nVar4263: int;
-
-const unique nVar4264: int;
-
-const unique nVar4265: int;
-
-const unique nVar4266: int;
-
-const unique nVar4267: int;
-
-const unique nVar4268: int;
-
-const unique nVar4269: int;
-
-const unique nVar4270: int;
-
-const unique nVar4271: int;
-
-const unique nVar4272: int;
-
-const unique nVar4273: int;
-
-const unique nVar4274: int;
-
-const unique nVar4275: int;
-
-const unique nVar4276: int;
-
-const unique nVar4277: int;
-
-const unique nVar4278: int;
-
-const unique nVar4279: int;
-
-const unique nVar4280: int;
-
-const unique nVar4281: int;
-
-const unique nVar4282: int;
-
-const unique nVar4283: int;
-
-const unique nVar4284: int;
-
-const unique nVar4285: int;
-
-const unique nVar4286: int;
-
-const unique nVar4287: int;
-
-const unique nVar4288: int;
-
-const unique nVar4289: int;
-
-const unique nVar4290: int;
-
-const unique nVar4291: int;
-
-const unique nVar4292: int;
-
-const unique nVar4293: int;
-
-const unique nVar4294: int;
-
-const unique nVar4295: int;
-
-const unique nVar4296: int;
-
-const unique nVar4297: int;
-
-const unique nVar4298: int;
-
-const unique nVar4299: int;
-
-const unique nVar4300: int;
-
-const unique nVar4301: int;
-
-const unique nVar4302: int;
-
-const unique nVar4303: int;
-
-const unique nVar4304: int;
-
-const unique nVar4305: int;
-
-const unique nVar4306: int;
-
-const unique nVar4307: int;
-
-const unique nVar4308: int;
-
-const unique nVar4309: int;
-
-const unique nVar4310: int;
-
-const unique nVar4311: int;
-
-const unique nVar4312: int;
-
-const unique nVar4313: int;
-
-const unique nVar4314: int;
-
-const unique nVar4315: int;
-
-const unique nVar4316: int;
-
-const unique nVar4317: int;
-
-const unique nVar4318: int;
-
-const unique nVar4319: int;
-
-const unique nVar4320: int;
-
-const unique nVar4321: int;
-
-const unique nVar4322: int;
-
-const unique nVar4323: int;
-
-const unique nVar4324: int;
-
-const unique nVar4325: int;
-
-const unique nVar4326: int;
-
-const unique nVar4327: int;
-
-const unique nVar4328: int;
-
-const unique nVar4329: int;
-
-const unique nVar4330: int;
-
-const unique nVar4331: int;
-
-const unique nVar4332: int;
-
-const unique nVar4333: int;
-
-const unique nVar4334: int;
-
-const unique nVar4335: int;
-
-const unique nVar4336: int;
-
-const unique nVar4337: int;
-
-const unique nVar4338: int;
-
-const unique nVar4339: int;
-
-const unique nVar4340: int;
-
-const unique nVar4341: int;
-
-const unique nVar4342: int;
-
-const unique nVar4343: int;
-
-const unique nVar4344: int;
-
-const unique nVar4345: int;
-
-const unique nVar4346: int;
-
-const unique nVar4347: int;
-
-const unique nVar4348: int;
-
-const unique nVar4349: int;
-
-const unique nVar4350: int;
-
-const unique nVar4351: int;
-
-const unique nVar4352: int;
-
-const unique nVar4353: int;
-
-const unique nVar4354: int;
-
-const unique nVar4355: int;
-
-const unique nVar4356: int;
-
-const unique nVar4357: int;
-
-const unique nVar4358: int;
-
-const unique nVar4359: int;
-
-const unique nVar4360: int;
-
-const unique nVar4361: int;
-
-const unique nVar4362: int;
-
-const unique nVar4363: int;
-
-const unique nVar4364: int;
-
-const unique nVar4365: int;
-
-const unique nVar4366: int;
-
-const unique nVar4367: int;
-
-const unique nVar4368: int;
-
-const unique nVar4369: int;
-
-const unique nVar4370: int;
-
-const unique nVar4371: int;
-
-const unique nVar4372: int;
-
-const unique nVar4373: int;
-
-const unique nVar4374: int;
-
-const unique nVar4375: int;
-
-const unique nVar4376: int;
-
-const unique nVar4377: int;
-
-const unique nVar4378: int;
-
-const unique nVar4379: int;
-
-const unique nVar4380: int;
-
-const unique nVar4381: int;
-
-const unique nVar4382: int;
-
-const unique nVar4383: int;
-
-const unique nVar4384: int;
-
-const unique nVar4385: int;
-
-const unique nVar4386: int;
-
-const unique nVar4387: int;
-
-const unique nVar4388: int;
-
-const unique nVar4389: int;
-
-const unique nVar4390: int;
-
-const unique nVar4391: int;
-
-const unique nVar4392: int;
-
-const unique nVar4393: int;
-
-const unique nVar4394: int;
-
-const unique nVar4395: int;
-
-const unique nVar4396: int;
-
-const unique nVar4397: int;
-
-const unique nVar4398: int;
-
-const unique nVar4399: int;
-
-const unique nVar4400: int;
-
-const unique nVar4401: int;
-
-const unique nVar4402: int;
-
-const unique nVar4403: int;
-
-const unique nVar4404: int;
-
-const unique nVar4405: int;
-
-const unique nVar4406: int;
-
-const unique nVar4407: int;
-
-const unique nVar4408: int;
-
-const unique nVar4409: int;
-
-const unique nVar4410: int;
-
-const unique nVar4411: int;
-
-const unique nVar4412: int;
-
-const unique nVar4413: int;
-
-const unique nVar4414: int;
-
-const unique nVar4415: int;
-
-const unique nVar4416: int;
-
-const unique nVar4417: int;
-
-const unique nVar4418: int;
-
-const unique nVar4419: int;
-
-const unique nVar4420: int;
-
-const unique nVar4421: int;
-
-const unique nVar4422: int;
-
-const unique nVar4423: int;
-
-const unique nVar4424: int;
-
-const unique nVar4425: int;
-
-const unique nVar4426: int;
-
-const unique nVar4427: int;
-
-const unique nVar4428: int;
-
-const unique nVar4429: int;
-
-const unique nVar4430: int;
-
-const unique nVar4431: int;
-
-const unique nVar4432: int;
-
-const unique nVar4433: int;
-
-const unique nVar4434: int;
-
-const unique nVar4435: int;
-
-const unique nVar4436: int;
-
-const unique nVar4437: int;
-
-const unique nVar4438: int;
-
-const unique nVar4439: int;
-
-const unique nVar4440: int;
-
-const unique nVar4441: int;
-
-const unique nVar4442: int;
-
-const unique nVar4443: int;
-
-const unique nVar4444: int;
-
-const unique nVar4445: int;
-
-const unique nVar4446: int;
-
-const unique nVar4447: int;
-
-const unique nVar4448: int;
-
-const unique nVar4449: int;
-
-const unique nVar4450: int;
-
-const unique nVar4451: int;
-
-const unique nVar4452: int;
-
-const unique nVar4453: int;
-
-const unique nVar4454: int;
-
-const unique nVar4455: int;
-
-const unique nVar4456: int;
-
-const unique nVar4457: int;
-
-const unique nVar4458: int;
-
-const unique nVar4459: int;
-
-const unique nVar4460: int;
-
-const unique nVar4461: int;
-
-const unique nVar4462: int;
-
-const unique nVar4463: int;
-
-const unique nVar4464: int;
-
-const unique nVar4465: int;
-
-const unique nVar4466: int;
-
-const unique nVar4467: int;
-
-const unique nVar4468: int;
-
-const unique nVar4469: int;
-
-const unique nVar4470: int;
-
-const unique nVar4471: int;
-
-const unique nVar4472: int;
-
-const unique nVar4473: int;
-
-const unique nVar4474: int;
-
-const unique nVar4475: int;
-
-const unique nVar4476: int;
-
-const unique nVar4477: int;
-
-const unique nVar4478: int;
-
-const unique nVar4479: int;
-
-const unique nVar4480: int;
-
-const unique nVar4481: int;
-
-const unique nVar4482: int;
-
-const unique nVar4483: int;
-
-const unique nVar4484: int;
-
-const unique nVar4485: int;
-
-const unique nVar4486: int;
-
-const unique nVar4487: int;
-
-const unique nVar4488: int;
-
-const unique nVar4489: int;
-
-const unique nVar4490: int;
-
-const unique nVar4491: int;
-
-const unique nVar4492: int;
-
-const unique nVar4493: int;
-
-const unique nVar4494: int;
-
-const unique nVar4495: int;
-
-const unique nVar4496: int;
-
-const unique nVar4497: int;
-
-const unique nVar4498: int;
-
-const unique nVar4499: int;
-
-const unique nVar4500: int;
-
-const unique nVar4501: int;
-
-const unique nVar4502: int;
-
-const unique nVar4503: int;
-
-const unique nVar4504: int;
-
-const unique nVar4505: int;
-
-const unique nVar4506: int;
-
-const unique nVar4507: int;
-
-const unique nVar4508: int;
-
-const unique nVar4509: int;
-
-const unique nVar4510: int;
-
-const unique nVar4511: int;
-
-const unique nVar4512: int;
-
-const unique nVar4513: int;
-
-const unique nVar4514: int;
-
-const unique nVar4515: int;
-
-const unique nVar4516: int;
-
-const unique nVar4517: int;
-
-const unique nVar4518: int;
-
-const unique nVar4519: int;
-
-const unique nVar4520: int;
-
-const unique nVar4521: int;
-
-const unique nVar4522: int;
-
-const unique nVar4523: int;
-
-const unique nVar4524: int;
-
-const unique nVar4525: int;
-
-const unique nVar4526: int;
-
-const unique nVar4527: int;
-
-const unique nVar4528: int;
-
-const unique nVar4529: int;
-
-const unique nVar4530: int;
-
-const unique nVar4531: int;
-
-const unique nVar4532: int;
-
-const unique nVar4533: int;
-
-const unique nVar4534: int;
-
-const unique nVar4535: int;
-
-const unique nVar4536: int;
-
-const unique nVar4537: int;
-
-const unique nVar4538: int;
-
-const unique nVar4539: int;
-
-const unique nVar4540: int;
-
-const unique nVar4541: int;
-
-const unique nVar4542: int;
-
-const unique nVar4543: int;
-
-const unique nVar4544: int;
-
-const unique nVar4545: int;
-
-const unique nVar4546: int;
-
-const unique nVar4547: int;
-
-const unique nVar4548: int;
-
-const unique nVar4549: int;
-
-const unique nVar4550: int;
-
-const unique nVar4551: int;
-
-const unique nVar4552: int;
-
-const unique nVar4553: int;
-
-const unique nVar4554: int;
-
-const unique nVar4555: int;
-
-const unique nVar4556: int;
-
-const unique nVar4557: int;
-
-const unique nVar4558: int;
-
-const unique nVar4559: int;
-
-const unique nVar4560: int;
-
-const unique nVar4561: int;
-
-const unique nVar4562: int;
-
-const unique nVar4563: int;
-
-const unique nVar4564: int;
-
-const unique nVar4565: int;
-
-const unique nVar4566: int;
-
-const unique nVar4567: int;
-
-const unique nVar4568: int;
-
-const unique nVar4569: int;
-
-const unique nVar4570: int;
-
-const unique nVar4571: int;
-
-const unique nVar4572: int;
-
-const unique nVar4573: int;
-
-const unique nVar4574: int;
-
-const unique nVar4575: int;
-
-const unique nVar4576: int;
-
-const unique nVar4577: int;
-
-const unique nVar4578: int;
-
-const unique nVar4579: int;
-
-const unique nVar4580: int;
-
-const unique nVar4581: int;
-
-const unique nVar4582: int;
-
-const unique nVar4583: int;
-
-const unique nVar4584: int;
-
-const unique nVar4585: int;
-
-const unique nVar4586: int;
-
-const unique nVar4587: int;
-
-const unique nVar4588: int;
-
-const unique nVar4589: int;
-
-const unique nVar4590: int;
-
-const unique nVar4591: int;
-
-const unique nVar4592: int;
-
-const unique nVar4593: int;
-
-const unique nVar4594: int;
-
-const unique nVar4595: int;
-
-const unique nVar4596: int;
-
-const unique nVar4597: int;
-
-const unique nVar4598: int;
-
-const unique nVar4599: int;
-
-const unique nVar4600: int;
-
-const unique nVar4601: int;
-
-const unique nVar4602: int;
-
-const unique nVar4603: int;
-
-const unique nVar4604: int;
-
-const unique nVar4605: int;
-
-const unique nVar4606: int;
-
-const unique nVar4607: int;
-
-const unique nVar4608: int;
-
-const unique nVar4609: int;
-
-const unique nVar4610: int;
-
-const unique nVar4611: int;
-
-const unique nVar4612: int;
-
-const unique nVar4613: int;
-
-const unique nVar4614: int;
-
-const unique nVar4615: int;
-
-const unique nVar4616: int;
-
-const unique nVar4617: int;
-
-const unique nVar4618: int;
-
-const unique nVar4619: int;
-
-const unique nVar4620: int;
-
-const unique nVar4621: int;
-
-const unique nVar4622: int;
-
-const unique nVar4623: int;
-
-const unique nVar4624: int;
-
-const unique nVar4625: int;
-
-const unique nVar4626: int;
-
-const unique nVar4627: int;
-
-const unique nVar4628: int;
-
-const unique nVar4629: int;
-
-const unique nVar4630: int;
-
-const unique nVar4631: int;
-
-const unique nVar4632: int;
-
-const unique nVar4633: int;
-
-const unique nVar4634: int;
-
-const unique nVar4635: int;
-
-const unique nVar4636: int;
-
-const unique nVar4637: int;
-
-const unique nVar4638: int;
-
-const unique nVar4639: int;
-
-const unique nVar4640: int;
-
-const unique nVar4641: int;
-
-const unique nVar4642: int;
-
-const unique nVar4643: int;
-
-const unique nVar4644: int;
-
-const unique nVar4645: int;
-
-const unique nVar4646: int;
-
-const unique nVar4647: int;
-
-const unique nVar4648: int;
-
-const unique nVar4649: int;
-
-const unique nVar4650: int;
-
-const unique nVar4651: int;
-
-const unique nVar4652: int;
-
-const unique nVar4653: int;
-
-const unique nVar4654: int;
-
-const unique nVar4655: int;
-
-const unique nVar4656: int;
-
-const unique nVar4657: int;
+// RUN: %boogie -stratifiedInline:1 -vc:i "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure proc63() returns (nVar5796: int, nVar5797: bool);
+ modifies nVar2, nVar1, nVar3, nVar4, nVar5, nVar6, nVar7, nVar8, nVar9, nVar10, nVar11, nVar12, nVar13, nVar14, nVar15, nVar16, nVar17, nVar18, nVar19, nVar20, nVar21, nVar22, nVar23, nVar24, nVar25, nVar26, nVar27, nVar28, nVar29, nVar30, nVar31, nVar32, nVar33, nVar34, nVar35, nVar36, nVar37, nVar38, nVar39, nVar40, nVar41, nVar42, nVar43, nVar44, nVar45, nVar46, nVar47, nVar48, nVar49, nVar50, nVar51, nVar52, nVar53, nVar54, nVar55, nVar56, nVar57, nVar58, nVar59, nVar60, nVar61, nVar62, nVar63, nVar64, nVar65, nVar66, nVar67, nVar68, nVar69, nVar70, nVar71, nVar72, nVar73, nVar74, nVar75, nVar76, nVar77, nVar78, nVar79, nVar80, nVar81, nVar82, nVar83, nVar84, nVar85, nVar86, nVar87, nVar88, nVar89, nVar90, nVar91, nVar92, nVar93, nVar94, nVar95, nVar96, nVar97, nVar98, nVar99, nVar100, nVar101, nVar102, nVar103, nVar104, nVar105, nVar106, nVar107, nVar108, nVar109, nVar110, nVar111, nVar112, nVar113, nVar114, nVar115, nVar116, nVar117, nVar118, nVar119, nVar120, nVar121, nVar122, nVar123, nVar124, nVar125, nVar126, nVar127, nVar128, nVar129, nVar130, nVar131, nVar132, nVar133, nVar134, nVar135, nVar136, nVar137, nVar138, nVar139, nVar140, nVar141, nVar142, nVar143, nVar144, nVar145, nVar146, nVar147, nVar148, nVar149, nVar150, nVar151, nVar152, nVar153, nVar154, nVar155, nVar156, nVar157, nVar158, nVar159, nVar160, nVar161, nVar162, nVar163, nVar164, nVar165, nVar166, nVar167, nVar168, nVar169, nVar170, nVar171, nVar172, nVar173, nVar174, nVar175, nVar176, nVar177, nVar178, nVar179, nVar180, nVar181, nVar182, nVar183, nVar184, nVar185, nVar186, nVar187, nVar188, nVar189, nVar190, nVar191, nVar192, nVar193, nVar194, nVar195, nVar196, nVar197, nVar198, nVar199, nVar200, nVar201, nVar202, nVar203, nVar204, nVar205, nVar206, nVar207, nVar208, nVar209, nVar210, nVar211, nVar212, nVar213, nVar214, nVar215, nVar216, nVar217, nVar218, nVar219, nVar220, nVar221, nVar222, nVar223, nVar224, nVar225, nVar226, nVar227, nVar228, nVar229, nVar230, nVar231, nVar232, nVar233, nVar234, nVar235, nVar236, nVar237, nVar238, nVar239, nVar240, nVar241, nVar242, nVar243, nVar244, nVar245, nVar246, nVar247, nVar248, nVar249, nVar250, nVar251, nVar252, nVar253, nVar254, nVar255, nVar256, nVar257, nVar258, nVar259, nVar260, nVar261, nVar262, nVar263, nVar264, nVar265, nVar266, nVar267, nVar268, nVar269, nVar270, nVar271, nVar272, nVar273, nVar274, nVar275, nVar276, nVar277, nVar278, nVar279, nVar281, nVar282, nVar283, nVar284, nVar285, nVar286, nVar287, nVar288, nVar289, nVar290, nVar291, nVar292, nVar293, nVar294, nVar295, nVar296, nVar297, nVar298, nVar299, nVar300, nVar301, nVar302, nVar303, nVar304, nVar305, nVar306, nVar307, nVar308, nVar309, nVar310, nVar311, nVar312, nVar313, nVar314, nVar315, nVar316, nVar317, nVar318, nVar319, nVar320, nVar321, nVar322, nVar323, nVar324, nVar325, nVar326, nVar327, nVar328, nVar329, nVar330, nVar331, nVar332, nVar333, nVar334, nVar335, nVar336, nVar337, nVar338, nVar339, nVar340, nVar341, nVar342, nVar343, nVar344, nVar345, nVar346, nVar348, nVar349, nVar350, nVar351, nVar352, nVar353, nVar354, nVar355, nVar356, nVar357, nVar358, nVar359, nVar360, nVar361, nVar362, nVar363, nVar364, nVar365, nVar366, nVar367, nVar368, nVar369, nVar370, nVar371, nVar372, nVar373, nVar374, nVar375, nVar376, nVar377, nVar378, nVar379, nVar380, nVar381, nVar382, nVar383, nVar384, nVar385, nVar386, nVar387, nVar388, nVar389, nVar390, nVar391, nVar392, nVar393, nVar394, nVar395, nVar396, nVar397, nVar398, nVar400, nVar401, nVar402, nVar403, nVar404, nVar405, nVar406, nVar407, nVar408, nVar409, nVar410, nVar411, nVar412, nVar413, nVar414, nVar415, nVar416, nVar417, nVar418, nVar419, nVar420, nVar421, nVar422, nVar423, nVar424, nVar425, nVar426, nVar427, nVar428, nVar429, nVar430, nVar431, nVar432, nVar433, nVar434, nVar435, nVar436, nVar437, nVar438, nVar439, nVar440, nVar441, nVar442, nVar443, nVar444, nVar445, nVar446, nVar447, nVar448, nVar449, nVar450, nVar451, nVar452, nVar453, nVar454, nVar455, nVar456, nVar457, nVar458, nVar459, nVar460, nVar461, nVar462, nVar463, nVar464, nVar465, nVar466, nVar467, nVar468, nVar469, nVar470, nVar471, nVar472, nVar473, nVar474, nVar475, nVar476, nVar477, nVar478, nVar479, nVar480, nVar481, nVar482, nVar483, nVar484, nVar485, nVar486, nVar487, nVar488, nVar489, nVar490, nVar491, nVar492, nVar493, nVar494, nVar495, nVar496, nVar497, nVar498, nVar499, nVar500, nVar501, nVar502, nVar503, nVar504, nVar505, nVar506, nVar507, nVar508, nVar509, nVar510, nVar511, nVar512, nVar513, nVar514, nVar515, nVar516, nVar517, nVar518, nVar519, nVar520, nVar521, nVar522, nVar523, nVar524, nVar525, nVar526, nVar527, nVar528, nVar529, nVar530, nVar531, nVar532, nVar533, nVar534, nVar535, nVar536, nVar537, nVar538, nVar539, nVar540, nVar541, nVar542, nVar543, nVar544, nVar545, nVar546, nVar547, nVar548, nVar549, nVar550, nVar551, nVar552, nVar553, nVar554, nVar555, nVar556, nVar557, nVar558, nVar559, nVar560, nVar561, nVar562, nVar563, nVar564, nVar565, nVar566, nVar567, nVar568, nVar569, nVar570, nVar571, nVar572, nVar573, nVar574, nVar575, nVar576, nVar577, nVar578, nVar579, nVar580, nVar581, nVar582, nVar583, nVar584, nVar585, nVar586, nVar587, nVar588, nVar589, nVar590, nVar591, nVar592, nVar593, nVar594, nVar595, nVar596, nVar597, nVar598, nVar599, nVar600, nVar601, nVar602, nVar603, nVar604, nVar605, nVar606, nVar607, nVar608, nVar609, nVar610, nVar611, nVar612, nVar613, nVar614, nVar615, nVar616, nVar617, nVar618, nVar619, nVar620, nVar621, nVar622, nVar623, nVar624, nVar625, nVar626, nVar627, nVar628, nVar629, nVar630, nVar631, nVar632, nVar633, nVar634, nVar635, nVar636, nVar637, nVar638, nVar639, nVar640, nVar641, nVar642, nVar643, nVar644, nVar645, nVar646, nVar647, nVar648, nVar649, nVar650, nVar651, nVar652, nVar653, nVar654, nVar655, nVar656, nVar657, nVar658, nVar659, nVar660, nVar661, nVar662, nVar663, nVar664, nVar665, nVar666, nVar667, nVar668, nVar669, nVar670, nVar671, nVar672, nVar673, nVar674, nVar675, nVar676, nVar677, nVar678, nVar679, nVar680, nVar681, nVar682, nVar683, nVar684, nVar685, nVar686, nVar687, nVar688, nVar689, nVar690, nVar691, nVar692, nVar693, nVar694, nVar695, nVar696, nVar697, nVar698, nVar699, nVar700, nVar701, nVar702, nVar703, nVar704, nVar705, nVar706, nVar707, nVar708, nVar709, nVar710, nVar711, nVar712, nVar713, nVar714, nVar715, nVar716, nVar717, nVar718, nVar719, nVar720, nVar721, nVar722, nVar723, nVar724, nVar725, nVar726, nVar727, nVar728, nVar729, nVar730, nVar731, nVar732, nVar733, nVar734, nVar735, nVar736, nVar737, nVar738, nVar739, nVar740, nVar741, nVar742, nVar743, nVar744, nVar745, nVar746, nVar747, nVar748, nVar749, nVar750, nVar751, nVar752, nVar753, nVar754, nVar755, nVar756, nVar757, nVar758, nVar759, nVar760, nVar761, nVar762, nVar763, nVar764, nVar765, nVar766, nVar767, nVar768, nVar769, nVar770, nVar771, nVar772, nVar773, nVar774, nVar775, nVar776, nVar777, nVar778, nVar779, nVar780, nVar781, nVar782, nVar783, nVar784, nVar785, nVar786, nVar787, nVar788, nVar789, nVar790, nVar791, nVar792, nVar793, nVar794, nVar795, nVar796, nVar797, nVar798, nVar799, nVar800, nVar801, nVar802, nVar803, nVar804, nVar805, nVar806, nVar807, nVar808, nVar809, nVar810, nVar811, nVar812, nVar813, nVar814, nVar815, nVar816, nVar817, nVar818, nVar819, nVar820, nVar821, nVar822, nVar823, nVar824, nVar825, nVar826, nVar827, nVar828, nVar829, nVar830, nVar831, nVar832, nVar833, nVar834, nVar835, nVar836, nVar837, nVar838, nVar839, nVar840, nVar841, nVar842, nVar843, nVar844, nVar845, nVar846, nVar847, nVar848, nVar849, nVar850, nVar851, nVar852, nVar853, nVar854, nVar855, nVar856, nVar857, nVar858, nVar859, nVar860, nVar861, nVar862, nVar863, nVar864, nVar865, nVar866, nVar867, nVar868, nVar869, nVar870, nVar871, nVar872, nVar873, nVar874, nVar875, nVar876, nVar877, nVar878, nVar879, nVar880, nVar881, nVar882, nVar883, nVar884, nVar885, nVar886, nVar887, nVar888, nVar889, nVar890, nVar891, nVar892, nVar893, nVar894, nVar895, nVar896, nVar897, nVar898, nVar899, nVar900, nVar901, nVar902, nVar903, nVar904, nVar905, nVar906, nVar907, nVar908, nVar909, nVar910, nVar911, nVar912, nVar913, nVar914, nVar915, nVar916, nVar917, nVar918, nVar919, nVar920, nVar921, nVar922, nVar923, nVar924, nVar925, nVar926, nVar927, nVar928, nVar929, nVar930, nVar931, nVar932, nVar933, nVar934, nVar935, nVar936, nVar937, nVar938, nVar939, nVar940, nVar941, nVar942, nVar943, nVar944, nVar945, nVar946, nVar947, nVar948, nVar949, nVar950, nVar951, nVar952, nVar953, nVar954, nVar955, nVar956, nVar957, nVar958, nVar959, nVar960, nVar961, nVar962, nVar963, nVar964, nVar965, nVar966, nVar967, nVar968, nVar969, nVar970, nVar971, nVar972, nVar973, nVar974, nVar975, nVar976, nVar977, nVar978, nVar979, nVar980, nVar981, nVar982, nVar983, nVar984, nVar985, nVar986, nVar987, nVar988, nVar989, nVar990, nVar991, nVar992, nVar993, nVar994, nVar995, nVar996, nVar997, nVar998, nVar999, nVar1000, nVar1001, nVar1002, nVar1003, nVar1004, nVar1005, nVar1006, nVar1007, nVar1008, nVar1009, nVar1010, nVar1011, nVar1012, nVar1013, nVar1014, nVar1015, nVar1016, nVar1017, nVar1018, nVar1019, nVar1020, nVar1021, nVar1022, nVar1023, nVar1024, nVar1025, nVar1026, nVar1027, nVar1028, nVar1029, nVar1030, nVar1031, nVar1032, nVar1033, nVar1034, nVar1035, nVar1036, nVar1037, nVar1038, nVar1039, nVar1041, nVar1042, nVar1043, nVar1044, nVar1045, nVar1046, nVar1047, nVar1048, nVar1049, nVar1050, nVar1051, nVar1052, nVar1053, nVar1054, nVar1055, nVar1056, nVar1057, nVar1058, nVar1059, nVar1060, nVar1061, nVar1062, nVar1063, nVar1064, nVar1065, nVar1066, nVar1067, nVar1068, nVar1069, nVar1070, nVar1071, nVar1072, nVar1073, nVar1074, nVar1075, nVar1076, nVar1077, nVar1078, nVar1079, nVar1080, nVar1081, nVar1082, nVar1083, nVar1084, nVar1085, nVar1086, nVar1087, nVar1088, nVar1089, nVar1090, nVar1091, nVar1092, nVar1093, nVar1094, nVar1095, nVar1096, nVar1097, nVar1098, nVar1099, nVar1100, nVar1101, nVar1102, nVar1103, nVar1104, nVar1105, nVar1106, nVar1107, nVar1108, nVar1109, nVar1110, nVar1111, nVar1112, nVar1113, nVar1114, nVar1115, nVar1116, nVar1117, nVar1118, nVar1119, nVar1120, nVar1121, nVar1122, nVar1123, nVar1124, nVar1125, nVar1126, nVar1127, nVar1128, nVar1129, nVar1130, nVar1131, nVar1132, nVar1133, nVar1134, nVar1135, nVar1136, nVar1137, nVar1138, nVar1139, nVar1140, nVar1141, nVar1142, nVar1143, nVar1144, nVar1145, nVar1146, nVar1147, nVar1148, nVar1149, nVar1150, nVar1151, nVar1152, nVar1153, nVar1154, nVar1155, nVar1156, nVar1157, nVar1158, nVar1159, nVar1160, nVar1161, nVar1162, nVar1163, nVar1164, nVar1165, nVar1166, nVar1167, nVar1168, nVar1169, nVar1170, nVar1171, nVar1172, nVar1173, nVar1174, nVar1176, nVar1177, nVar1178, nVar1179, nVar1180, nVar1181, nVar1182, nVar1183, nVar1184, nVar1185, nVar1186, nVar1187, nVar1188, nVar1189, nVar1190, nVar1191, nVar1192, nVar1193, nVar1194, nVar1195, nVar1196, nVar1197, nVar1198, nVar1199, nVar1200, nVar1201, nVar1202, nVar1203, nVar1204, nVar1205, nVar1206, nVar1207, nVar1208, nVar1209, nVar1210, nVar1211, nVar1212, nVar1213, nVar1214, nVar1215, nVar1216, nVar1217, nVar1218, nVar1219, nVar1220, nVar1221, nVar1222, nVar1223, nVar1224, nVar1225, nVar1226, nVar1227, nVar1228, nVar1229, nVar1230, nVar1231, nVar1232, nVar1233, nVar1234, nVar1235, nVar1236, nVar1237, nVar1238, nVar1239, nVar1240, nVar1241, nVar1242, nVar1243, nVar1244, nVar1245, nVar1246, nVar1247, nVar1248, nVar1249, nVar1250, nVar1251, nVar1252, nVar1253, nVar1255, nVar1256, nVar1257, nVar1258, nVar1259, nVar1260, nVar1261, nVar1262, nVar1263, nVar1264, nVar1265, nVar1266, nVar1267, nVar1268, nVar1269, nVar1270, nVar1271, nVar1272, nVar1273, nVar1274, nVar1275, nVar1276, nVar1277, nVar1278, nVar1279, nVar1280, nVar1281, nVar1282, nVar1283, nVar1284, nVar1285, nVar1286, nVar1287, nVar1288, nVar1289, nVar1290, nVar1291, nVar1292, nVar1293, nVar1294, nVar1295, nVar1296, nVar1297, nVar1298, nVar1299, nVar1300, nVar1301, nVar1302, nVar1303, nVar1304, nVar1305, nVar1306, nVar1307, nVar1308, nVar1309, nVar1310, nVar1311, nVar1312, nVar1313, nVar1314, nVar1315, nVar1316, nVar1317, nVar1318, nVar1319, nVar1320, nVar1321, nVar1322, nVar1323, nVar1324, nVar1325, nVar1326, nVar1327, nVar1328, nVar1329, nVar1330, nVar1331, nVar1332, nVar1333, nVar1334, nVar1335, nVar1336, nVar1337, nVar1338, nVar1339, nVar1340, nVar1341, nVar1342, nVar1343, nVar1344, nVar1345, nVar1346, nVar1347, nVar1348, nVar1349, nVar1350, nVar1351, nVar1352, nVar1353, nVar1354, nVar1355, nVar1356, nVar1357, nVar1358, nVar1359, nVar1360, nVar1361, nVar1362, nVar1363, nVar1364, nVar1365, nVar1366, nVar1367, nVar1368, nVar1369, nVar1370, nVar1371, nVar1372, nVar1373, nVar1374, nVar1375, nVar1376, nVar1377, nVar1378, nVar1379, nVar1380, nVar1381, nVar1382, nVar1383, nVar1384, nVar1385, nVar1386, nVar1387, nVar1388, nVar1389, nVar1390, nVar1391, nVar1392, nVar1393, nVar1394, nVar1395, nVar1396, nVar1397, nVar1398, nVar1399, nVar1400, nVar1401, nVar1402, nVar1403, nVar1404, nVar1405, nVar1406, nVar1407, nVar1408, nVar1409, nVar1410, nVar1411, nVar1412, nVar1413, nVar1414, nVar1415, nVar1416, nVar1417, nVar1418, nVar1419, nVar1420, nVar1421, nVar1422, nVar1423, nVar1424, nVar1425, nVar1426, nVar1427, nVar1428, nVar1429, nVar1430, nVar1431, nVar1432, nVar1433, nVar1434, nVar1435, nVar1436, nVar1437, nVar1438, nVar1439, nVar1440, nVar1441, nVar1442, nVar1443, nVar1444, nVar1445, nVar1446, nVar1447, nVar1448, nVar1449, nVar1450, nVar1451, nVar1452, nVar1453, nVar1454, nVar1455, nVar1456, nVar1457, nVar1458, nVar1459, nVar1460, nVar1461, nVar1462, nVar1463, nVar1464, nVar1465, nVar1466, nVar1467, nVar1468, nVar1469, nVar1470, nVar1471, nVar1472, nVar1473, nVar1474, nVar1475, nVar1476, nVar1477, nVar1478, nVar1479, nVar1480, nVar1481, nVar1482, nVar1483, nVar1484, nVar1485, nVar1486, nVar1487, nVar1488, nVar1489, nVar1490, nVar1491, nVar1492, nVar1493, nVar1494, nVar1495, nVar1496, nVar1497, nVar1498, nVar1499, nVar1500, nVar1501, nVar1502, nVar1503, nVar1504, nVar1505, nVar1506, nVar1507, nVar1508, nVar1509, nVar1510, nVar1511, nVar1512, nVar1513, nVar1514, nVar1515, nVar1516, nVar1517, nVar1518, nVar1519, nVar1520, nVar1521, nVar1522, nVar1523, nVar1524, nVar1525, nVar1526, nVar1527, nVar1528, nVar1529, nVar1530, nVar1531, nVar1532, nVar1533, nVar1534, nVar1535, nVar1536, nVar1537, nVar1538, nVar1539, nVar1540, nVar1541, nVar1542, nVar1543, nVar1544, nVar1545, nVar1546, nVar1547, nVar1548, nVar1549, nVar1550, nVar1551, nVar1552, nVar1553, nVar1554, nVar1555, nVar1556, nVar1557, nVar1558, nVar1559, nVar1560, nVar1561, nVar1562, nVar1563, nVar1564, nVar1565, nVar1566, nVar1567, nVar1568, nVar1569, nVar1570, nVar1571, nVar1572, nVar1573, nVar1574, nVar1575, nVar1576, nVar1577, nVar1578, nVar1579, nVar1580, nVar1581, nVar1582, nVar1583, nVar1584, nVar1585, nVar1586, nVar1587, nVar1588, nVar1589, nVar1590, nVar1591, nVar1592, nVar1593, nVar1594, nVar1595, nVar1596, nVar1597, nVar1598, nVar1599, nVar1600, nVar1601, nVar1602, nVar1603, nVar1604, nVar1605, nVar1606, nVar1607, nVar1608, nVar1609, nVar1610, nVar1611, nVar1612, nVar1613, nVar1614, nVar1615, nVar1616, nVar1617, nVar1618, nVar1619, nVar1620, nVar1621, nVar1622, nVar1623, nVar1624, nVar1625, nVar1626, nVar1627, nVar1628, nVar1629, nVar1630, nVar1631, nVar1632, nVar1633, nVar1634, nVar1635, nVar1636, nVar1637, nVar1638, nVar1639, nVar1640, nVar1641, nVar1642, nVar1643, nVar1644, nVar1645, nVar1646, nVar1647, nVar1648, nVar1649, nVar1650, nVar1651, nVar1652, nVar1653, nVar1654, nVar1655, nVar1656, nVar1657, nVar1658, nVar1659, nVar1660, nVar1661, nVar1662, nVar1663, nVar1664, nVar1665, nVar1666, nVar1667, nVar1668, nVar1669, nVar1670, nVar1671, nVar1672, nVar1673, nVar1674, nVar1675, nVar1676, nVar1677, nVar1678, nVar1679, nVar1680, nVar1681, nVar1682, nVar1683, nVar1684, nVar1685, nVar1686, nVar1687, nVar1688, nVar1689, nVar1690, nVar1691, nVar1692, nVar1693, nVar1694, nVar1695, nVar1696, nVar1697, nVar1698, nVar1699, nVar1700, nVar1701, nVar1702, nVar1703, nVar1704, nVar1705, nVar1706, nVar1707, nVar1708, nVar1709, nVar1710, nVar1711, nVar1712, nVar1713, nVar1714, nVar1715, nVar1716, nVar1717, nVar1718, nVar1719, nVar1720, nVar1721, nVar1722, nVar1723, nVar1724, nVar1725, nVar1726, nVar1727, nVar1728, nVar1729, nVar1730, nVar1731, nVar1732, nVar1733, nVar1734, nVar1735, nVar1736, nVar1737, nVar1738, nVar1739, nVar1740, nVar1741, nVar1742, nVar1743, nVar1744, nVar1745, nVar1746, nVar1747, nVar1748, nVar1749, nVar1750, nVar1751, nVar1752, nVar1753, nVar1754, nVar1755, nVar1756, nVar1757, nVar1758, nVar1759, nVar1760, nVar1761, nVar1762, nVar1763, nVar1764, nVar1765, nVar1766, nVar1767, nVar1768, nVar1769, nVar1770, nVar1771, nVar1772, nVar1773, nVar1774, nVar1775, nVar1776, nVar1777, nVar1778, nVar1779, nVar1780, nVar1781, nVar1782, nVar1783, nVar1784, nVar1785, nVar1786, nVar1787, nVar1788, nVar1789, nVar1790, nVar1791, nVar1792, nVar1793, nVar1794, nVar1795, nVar1796, nVar1797, nVar1798, nVar1799, nVar1800, nVar1801, nVar1802, nVar1803, nVar1804, nVar1805, nVar1806, nVar1807, nVar1808, nVar1809, nVar1810, nVar1811, nVar1812, nVar1813, nVar1814, nVar1815, nVar1816, nVar1817, nVar1818, nVar1819, nVar1820, nVar1821, nVar1822, nVar1823, nVar1824, nVar1825, nVar1826, nVar1827, nVar1828, nVar1829, nVar1830, nVar1831, nVar1832, nVar1833, nVar1834, nVar1835, nVar1836, nVar1837, nVar1838, nVar1839, nVar1840, nVar1841, nVar1842, nVar1843, nVar1844, nVar1845, nVar1846, nVar1847, nVar1848, nVar1849, nVar1850, nVar1851, nVar1852, nVar1853, nVar1854, nVar1855, nVar1856, nVar1857, nVar1858, nVar1859, nVar1860, nVar1861, nVar1862, nVar1863, nVar1864, nVar1865, nVar1866, nVar1867, nVar1868, nVar1869, nVar1870, nVar1871, nVar1872, nVar1873, nVar1874, nVar1875, nVar1876, nVar1877, nVar1878, nVar1879, nVar1880, nVar1881, nVar1882, nVar1883, nVar1884, nVar1885, nVar1886, nVar1887, nVar1888, nVar1889, nVar1890, nVar1891, nVar1892, nVar1893, nVar1894, nVar1895, nVar1896, nVar1897, nVar1898, nVar1899, nVar1900, nVar1901, nVar1902, nVar1903, nVar1904, nVar1905, nVar1906, nVar1907, nVar1908, nVar1909, nVar1910, nVar1911, nVar1912, nVar1913, nVar1914, nVar1915, nVar1916, nVar1917, nVar1918, nVar1919, nVar1920, nVar1921, nVar1922, nVar1923, nVar1924, nVar1925, nVar1926, nVar1928, nVar1929, nVar1930, nVar1931, nVar1932, nVar1933, nVar1934, nVar1935, nVar1936, nVar1937, nVar1938, nVar1939, nVar1940, nVar1941, nVar1942, nVar1943, nVar1944, nVar1945, nVar1946, nVar1947, nVar1948, nVar1949, nVar1950, nVar1951, nVar1952, nVar1953, nVar1954, nVar1955, nVar1956, nVar1957, nVar1958, nVar1959, nVar1960, nVar1961, nVar1962, nVar1963, nVar1964, nVar1965, nVar1966, nVar1967, nVar1968, nVar1969, nVar1970, nVar1971, nVar1972, nVar1973, nVar1974, nVar1975, nVar1976, nVar1977, nVar1978, nVar1979, nVar1980, nVar1981, nVar1982, nVar1983, nVar1984, nVar1985, nVar1986, nVar1987, nVar1988, nVar1989, nVar1990, nVar1991, nVar1992, nVar1993, nVar1994, nVar1995, nVar1996, nVar1997, nVar1998, nVar1999, nVar2000, nVar2001, nVar2002, nVar2003, nVar2004, nVar2005, nVar2006, nVar2007, nVar2008, nVar2009, nVar2010, nVar2011, nVar2012, nVar2013, nVar2014, nVar2015, nVar2016, nVar2017, nVar2018, nVar2019, nVar2020, nVar2021, nVar2022, nVar2023, nVar2024, nVar2025, nVar2026, nVar2027, nVar2028, nVar2029, nVar2030, nVar2031, nVar2032, nVar2033, nVar2034, nVar2035, nVar2036, nVar2037, nVar2038, nVar2039, nVar2040, nVar2041, nVar2042, nVar2043, nVar2044, nVar2045, nVar2046, nVar2047, nVar2048, nVar2049, nVar2050, nVar2051, nVar2052, nVar2053, nVar2054, nVar2055, nVar2056, nVar2057, nVar2058, nVar2059, nVar2060, nVar2061, nVar2062, nVar2063, nVar2064, nVar2065, nVar2066, nVar2067, nVar2068, nVar2069, nVar2070, nVar2071, nVar2072, nVar2073, nVar2074, nVar2075, nVar2076, nVar2077, nVar2078, nVar2079, nVar2080, nVar2081, nVar2082, nVar2083, nVar2084, nVar2085, nVar2086, nVar2087, nVar2088, nVar2089, nVar2090, nVar2091, nVar2092, nVar2093, nVar2094, nVar2095, nVar2096, nVar2097, nVar2098, nVar2099, nVar2100, nVar2101, nVar2102, nVar2104, nVar2105, nVar2106, nVar2107, nVar2108, nVar2109, nVar2110, nVar2111, nVar2112, nVar2113, nVar2114, nVar2115, nVar2116, nVar2117, nVar2118, nVar2119, nVar2120, nVar2121, nVar2122, nVar2123, nVar2124, nVar2125, nVar2126, nVar2127, nVar2128, nVar2129, nVar2130, nVar2131, nVar2132, nVar2133, nVar2134, nVar2135, nVar2136, nVar2137, nVar2138, nVar2139, nVar2140, nVar2141, nVar2142, nVar2143, nVar2144, nVar2145, nVar2146, nVar2147, nVar2148, nVar2149, nVar2150, nVar2151, nVar2152, nVar2153, nVar2154, nVar2155, nVar2156, nVar2157, nVar2158, nVar2159, nVar2160, nVar2161, nVar2162, nVar2163, nVar2164, nVar2165, nVar2166, nVar2167, nVar2168, nVar2169, nVar2170, nVar2171, nVar2172, nVar2173, nVar2174, nVar2175, nVar2176, nVar2177, nVar2178, nVar2180, nVar2181, nVar2182, nVar2183, nVar2184, nVar2185, nVar2186, nVar2187, nVar2188, nVar2189, nVar2190, nVar2191, nVar2192, nVar2193, nVar2194, nVar2195, nVar2196, nVar2197, nVar2198, nVar2199, nVar2200, nVar2201, nVar2202, nVar2203, nVar2204, nVar2205, nVar2206, nVar2207, nVar2208, nVar2209, nVar2210, nVar2211, nVar2212, nVar2213, nVar2214, nVar2215, nVar2216, nVar2217, nVar2218, nVar2219, nVar2220, nVar2221, nVar2222, nVar2223, nVar2224, nVar2225, nVar2226, nVar2227, nVar2228, nVar2229, nVar2230, nVar2231, nVar2232, nVar2233, nVar2234, nVar2235, nVar2236, nVar2237, nVar2238, nVar2239, nVar2240, nVar2241, nVar2242, nVar2243, nVar2244, nVar2245, nVar2246, nVar2247, nVar2248, nVar2249, nVar2250, nVar2251, nVar2252, nVar2253, nVar2254, nVar2255, nVar2256, nVar2257, nVar2258, nVar2259, nVar2260, nVar2261, nVar2262, nVar2263, nVar2264, nVar2265, nVar2266, nVar2267, nVar2268, nVar2269, nVar2270, nVar2271, nVar2272, nVar2273, nVar2274, nVar2275, nVar2276, nVar2277, nVar2278, nVar2279, nVar2280, nVar2281, nVar2282, nVar2283, nVar2284, nVar2285, nVar2286, nVar2287, nVar2288, nVar2289, nVar2290, nVar2291, nVar2292, nVar2293, nVar2294, nVar2295, nVar2296, nVar2297, nVar2298, nVar2299, nVar2300, nVar2301, nVar2302, nVar2303, nVar2304, nVar2305, nVar2306, nVar2307, nVar2308, nVar2309, nVar2310, nVar2311, nVar2312, nVar2313, nVar2314, nVar2315, nVar2316, nVar2317, nVar2318, nVar2319, nVar2320, nVar2321, nVar2322, nVar2323, nVar2324, nVar2325, nVar2326, nVar2327, nVar2328, nVar2329, nVar2330, nVar2331, nVar2332, nVar2333, nVar2334, nVar2335, nVar2336, nVar2337, nVar2338, nVar2339, nVar2340, nVar2341, nVar2342, nVar2343, nVar2344, nVar2345, nVar2346, nVar2347, nVar2348, nVar2349, nVar2350, nVar2351, nVar2352, nVar2353, nVar2354, nVar2355, nVar2356, nVar2357, nVar2358, nVar2359, nVar2360, nVar2361, nVar2362, nVar2363, nVar2364, nVar2365, nVar2366, nVar2367, nVar2368, nVar2369, nVar2370, nVar2371, nVar2372, nVar2373, nVar2374, nVar2375, nVar2376, nVar2377, nVar2378, nVar2379, nVar2380, nVar2381, nVar2382, nVar2383, nVar2384, nVar2385, nVar2386, nVar2387, nVar2388, nVar2389, nVar2390, nVar2391, nVar2392, nVar2393, nVar2394, nVar2395, nVar2396, nVar2397, nVar2398, nVar2399, nVar2400, nVar2401, nVar2402, nVar2403, nVar2404, nVar2405, nVar2406, nVar2407, nVar2408, nVar2409, nVar2410, nVar2411, nVar2412, nVar2413, nVar2414, nVar2415, nVar2416, nVar2417, nVar2418, nVar2419, nVar2420, nVar2421, nVar2422, nVar2423, nVar2424, nVar2425, nVar2426, nVar2427, nVar2428, nVar2429, nVar2430, nVar2431, nVar2432, nVar2433, nVar2434, nVar2435, nVar2436, nVar2437, nVar2438, nVar2439, nVar2440, nVar2441, nVar2442, nVar2443, nVar2444, nVar2445, nVar2446, nVar2447, nVar2448, nVar2449, nVar2450, nVar2451, nVar2452, nVar2453, nVar2454, nVar2455, nVar2456, nVar2457, nVar2458, nVar2459, nVar2460, nVar2461, nVar2462, nVar2463, nVar2464, nVar2465, nVar2466, nVar2467, nVar2468, nVar2469, nVar2470, nVar2471, nVar2472, nVar2473, nVar2474, nVar2475, nVar2476, nVar2477, nVar2478, nVar2479, nVar2480, nVar2481, nVar2482, nVar2483, nVar2484, nVar2485, nVar2486, nVar2487, nVar2488, nVar2489, nVar2490, nVar2491, nVar2492, nVar2493, nVar2494, nVar2495, nVar2496, nVar2497, nVar2498, nVar2499, nVar2500, nVar2501, nVar2502, nVar2503, nVar2504, nVar2505, nVar2506, nVar2507, nVar2508, nVar2509, nVar2510, nVar2511, nVar2512, nVar2513, nVar2514, nVar2515, nVar2516, nVar2517, nVar2518, nVar2519, nVar2520, nVar2521, nVar2522, nVar2523, nVar2524, nVar2525, nVar2526, nVar2527, nVar2528, nVar2529, nVar2530, nVar2531, nVar2532, nVar2533, nVar2534, nVar2535, nVar2536, nVar2537, nVar2538, nVar2539, nVar2540, nVar2541, nVar2542, nVar2543, nVar2544, nVar2545, nVar2546, nVar2547, nVar2548, nVar2549, nVar2550, nVar2551, nVar2552, nVar2553, nVar2554, nVar2555, nVar2556, nVar2557, nVar2558, nVar2559, nVar2560, nVar2561, nVar2562, nVar2563, nVar2564, nVar2565, nVar2566, nVar2567, nVar2568, nVar2569, nVar2570, nVar2571, nVar2572, nVar2573, nVar2574, nVar2575, nVar2576, nVar2577, nVar2578, nVar2579, nVar2580, nVar2581, nVar2582, nVar2583, nVar2584, nVar2585, nVar2586, nVar2587, nVar2588, nVar2589, nVar2590, nVar2591, nVar2592, nVar2593, nVar2594, nVar2595, nVar2596, nVar2597, nVar2598, nVar2599, nVar2600, nVar2601, nVar2602, nVar2603, nVar2604, nVar2605, nVar2606, nVar2607, nVar2608, nVar2609, nVar2610, nVar2611, nVar2612, nVar2613, nVar2614, nVar2615, nVar2616, nVar2617, nVar2618, nVar2619, nVar2620, nVar2622, nVar2623, nVar2624, nVar2625, nVar2626, nVar2627, nVar2628, nVar2629, nVar2630, nVar2631, nVar2633, nVar2634, nVar2635, nVar2636, nVar2637, nVar2638, nVar2639, nVar2640, nVar2641, nVar2642, nVar2643, nVar2644, nVar2645, nVar2646, nVar2647, nVar2648, nVar2649, nVar2650, nVar2651, nVar2652, nVar2653, nVar2654, nVar2655, nVar2656, nVar2657, nVar2658, nVar2659, nVar2660, nVar2661, nVar2662, nVar2663, nVar2664, nVar2665, nVar2666, nVar2667, nVar2668, nVar2669, nVar2670, nVar2671, nVar2672, nVar2673, nVar2674, nVar2675, nVar2676, nVar2677, nVar2678, nVar2679, nVar2680, nVar2681, nVar2682, nVar2683, nVar2684, nVar2685, nVar2686, nVar2687, nVar2688, nVar2689, nVar2690, nVar2691, nVar2692, nVar2693, nVar2694, nVar2695, nVar2696, nVar2697, nVar2698, nVar2699, nVar2700, nVar2701, nVar2702, nVar2703, nVar2704, nVar2705, nVar2706, nVar2707, nVar2708, nVar2709, nVar2710, nVar2711, nVar2712, nVar2713, nVar2714, nVar2715, nVar2716, nVar2717, nVar2718, nVar2719, nVar2720, nVar2721, nVar2722, nVar2723, nVar2724, nVar2725, nVar2726, nVar2727, nVar2728, nVar2729, nVar2730, nVar2731, nVar2732, nVar2733, nVar2734, nVar2735, nVar2736, nVar2737, nVar2738, nVar2739, nVar2740, nVar2741, nVar2742, nVar2743, nVar2744, nVar2745, nVar2746, nVar2747, nVar2748, nVar2749, nVar2750, nVar2751, nVar2752, nVar2753, nVar2755, nVar2756, nVar2757, nVar2758, nVar2759, nVar2760, nVar2761, nVar2762, nVar2763, nVar2764, nVar2765, nVar2766, nVar2767, nVar2768, nVar2769, nVar2770, nVar2771, nVar2772, nVar2773, nVar2774, nVar2775, nVar2776, nVar2777, nVar2778, nVar2779, nVar2780, nVar2781, nVar2782, nVar2783, nVar2784, nVar2785, nVar2786, nVar2787, nVar2788, nVar2789, nVar2790, nVar2791, nVar2792, nVar2793, nVar2794, nVar2795, nVar2796, nVar2797, nVar2798, nVar2799, nVar2800, nVar2801, nVar2802, nVar2803, nVar2804, nVar2805, nVar2806, nVar2807, nVar2808, nVar2809, nVar2810, nVar2811, nVar2812, nVar2813, nVar2814, nVar2815, nVar2816, nVar2817, nVar2818, nVar2819, nVar2820, nVar2821, nVar2822, nVar2823, nVar2824, nVar2825, nVar2826, nVar2827, nVar2828, nVar2829, nVar2830, nVar2831, nVar2832, nVar2833, nVar2834, nVar2835, nVar2836, nVar2837, nVar2838, nVar2839, nVar2840, nVar2841, nVar2842, nVar2843, nVar2844, nVar2845, nVar2846, nVar2847, nVar2848, nVar2849, nVar2850, nVar2851, nVar2852, nVar2853, nVar2854, nVar2855, nVar2856, nVar2857, nVar2858, nVar2859, nVar2860, nVar2861, nVar2862, nVar2863, nVar2864, nVar2865, nVar2866, nVar2867, nVar2868, nVar2869, nVar2870, nVar2871, nVar2872, nVar2873, nVar2874, nVar2875, nVar2876, nVar2877, nVar2878, nVar2879, nVar2880, nVar2881, nVar2882, nVar2883, nVar2884, nVar2885, nVar2886, nVar2887, nVar2888, nVar2889, nVar2890, nVar2891, nVar2892, nVar2893, nVar2894, nVar2895, nVar2896, nVar2897, nVar2898, nVar2899, nVar2900, nVar2901, nVar2902, nVar2903, nVar2904, nVar2905, nVar2906, nVar2907, nVar2908, nVar2909, nVar2910, nVar2911, nVar2912, nVar2913, nVar2914, nVar2915, nVar2916, nVar2917, nVar2918, nVar2919, nVar2920, nVar2921, nVar2922, nVar2923, nVar2924, nVar2925, nVar2926, nVar2927, nVar2928, nVar2929, nVar2930, nVar2931, nVar2932, nVar2933, nVar2934, nVar2935, nVar2936, nVar2937, nVar2938, nVar2939, nVar2940, nVar2941, nVar2942, nVar2943, nVar2944, nVar2945, nVar2946, nVar2947, nVar2948, nVar2949, nVar2950, nVar2951, nVar2952, nVar2953, nVar2954, nVar2955, nVar2956, nVar2957, nVar2958, nVar2959, nVar2960, nVar2961, nVar2962, nVar2963, nVar2964, nVar2965, nVar2966, nVar2967, nVar2968, nVar2969, nVar2970, nVar2971, nVar2972, nVar2973, nVar2974, nVar2975, nVar2976, nVar2977, nVar2978, nVar2979, nVar2980, nVar2981, nVar2982, nVar2983, nVar2984, nVar2985, nVar2986, nVar2987, nVar2988, nVar2989, nVar2990, nVar2991, nVar2992, nVar2993, nVar2994, nVar2995, nVar2996, nVar2997, nVar2998, nVar2999, nVar3000, nVar3001, nVar3002, nVar3003, nVar3004, nVar3005, nVar3006, nVar3007, nVar3008, nVar3009, nVar3010, nVar3011, nVar3012, nVar3013, nVar3014, nVar3015, nVar3016, nVar3017, nVar3018, nVar3019, nVar3020, nVar3021, nVar3022, nVar3023, nVar3024, nVar3025, nVar3026, nVar3027, nVar3028, nVar3029, nVar3030, nVar3031, nVar3032, nVar3033, nVar3034, nVar3035, nVar3036, nVar3037, nVar3038, nVar3039, nVar3040, nVar3041, nVar3042, nVar3043, nVar3044, nVar3045, nVar3046, nVar3047, nVar3049, nVar3050, nVar3051, nVar3052, nVar3053, nVar3054, nVar3055, nVar3056, nVar3057, nVar3058, nVar3059, nVar3060, nVar3061, nVar3063, nVar3064, nVar3065, nVar3066, nVar3067, nVar3068, nVar3069, nVar3070, nVar3071, nVar3072, nVar3073, nVar3074, nVar3075, nVar3076, nVar3077, nVar3078, nVar3079, nVar3080, nVar3081, nVar3082, nVar3083, nVar3084, nVar3085, nVar3086, nVar3087, nVar3088, nVar3089, nVar3090, nVar3091, nVar3092, nVar3093, nVar3094, nVar3095, nVar3096, nVar3097, nVar3098, nVar3099, nVar3100, nVar3101, nVar3102, nVar3103, nVar3104, nVar3105, nVar3106, nVar3107, nVar3108, nVar3109, nVar3110, nVar3111, nVar3112, nVar3113, nVar3114, nVar3115, nVar3116, nVar3117, nVar3118, nVar3119, nVar3120, nVar3121, nVar3122, nVar3123, nVar3124, nVar3125, nVar3126, nVar3127, nVar3128, nVar3129, nVar3130, nVar3131, nVar3132, nVar3133, nVar3134, nVar3135, nVar3136, nVar3137, nVar3138, nVar3140, nVar3141, nVar3142, nVar3143, nVar3144, nVar3145, nVar3146, nVar3147, nVar3148, nVar3149, nVar3150, nVar3151, nVar3152, nVar3153, nVar3154, nVar3155, nVar3156, nVar3157, nVar3158, nVar3159, nVar3160, nVar3161, nVar3162, nVar3163, nVar3164, nVar3165, nVar3166, nVar3167, nVar3168, nVar3169, nVar3170, nVar3171, nVar3172, nVar3173, nVar3174, nVar3175, nVar3176, nVar3177, nVar3178, nVar3179, nVar3180, nVar3181, nVar3182, nVar3183, nVar3184, nVar3185, nVar3186, nVar3187, nVar3188, nVar3189, nVar3190, nVar3191, nVar3192, nVar3193, nVar3194, nVar3195, nVar3196, nVar3197, nVar3198, nVar3199, nVar3200, nVar3201, nVar3202, nVar3203, nVar3204, nVar3205, nVar3206, nVar3207, nVar3208, nVar3209, nVar3210, nVar3211, nVar3212, nVar3213, nVar3214, nVar3215, nVar3216, nVar3217, nVar3218, nVar3219, nVar3220, nVar3221, nVar3222, nVar3223, nVar3224, nVar3225, nVar3226, nVar3227, nVar3228, nVar3229, nVar3230, nVar3231, nVar3232, nVar3233, nVar3234, nVar3235, nVar3236, nVar3237, nVar3238, nVar3239, nVar3240, nVar3241, nVar3242, nVar3243, nVar3244, nVar3245, nVar3246, nVar3247, nVar3248, nVar3249, nVar3250, nVar3251, nVar3252, nVar3253, nVar3254, nVar3255, nVar3256, nVar3257, nVar3258, nVar3259, nVar3260, nVar3261, nVar3262, nVar3263, nVar3264, nVar3265, nVar3266, nVar3267, nVar3268, nVar3269, nVar3270, nVar3271, nVar3272, nVar3273, nVar3274, nVar3275, nVar3276, nVar3277, nVar3278, nVar3279, nVar3280, nVar3281, nVar3282, nVar3283, nVar3284, nVar3285, nVar3286, nVar3287, nVar3288, nVar3289, nVar3290, nVar3291, nVar3292, nVar3293, nVar3294, nVar3295, nVar3296, nVar3297, nVar3298, nVar3299, nVar3300, nVar3301, nVar3302, nVar3303, nVar3304, nVar3305, nVar3306, nVar3307, nVar3308, nVar3309, nVar3310, nVar3311, nVar3312, nVar3313, nVar3314, nVar3315, nVar3316, nVar3317, nVar3318, nVar3319, nVar3320, nVar3321, nVar3322, nVar3323, nVar3324, nVar3325, nVar3326, nVar3327, nVar3328, nVar3329, nVar3330, nVar3331, nVar3332, nVar3333, nVar3334, nVar3335, nVar3336, nVar3337, nVar3338, nVar3339, nVar3340, nVar3341, nVar3342, nVar3343, nVar3344, nVar3345, nVar3346, nVar3347, nVar3348, nVar3349, nVar3350, nVar3351, nVar3352, nVar3353, nVar3354, nVar3355, nVar3356, nVar3357, nVar3358, nVar3359, nVar3360, nVar3361, nVar3362, nVar3363, nVar3364, nVar3365, nVar3366, nVar3367, nVar3368, nVar3369, nVar3370, nVar3371, nVar3372, nVar3373, nVar3374, nVar3375, nVar3376, nVar3377, nVar3378, nVar3379, nVar3380, nVar3381, nVar3382, nVar3383, nVar3384, nVar3385, nVar3386, nVar3387, nVar3388, nVar3389, nVar3390, nVar3391, nVar3392, nVar3393, nVar3394, nVar3395, nVar3396, nVar3397, nVar3398, nVar3399, nVar3400, nVar3401, nVar3402, nVar3403, nVar3404, nVar3405, nVar3406, nVar3407, nVar3408, nVar3409, nVar3410, nVar3411, nVar3412, nVar3413, nVar3414, nVar3415, nVar3416, nVar3417, nVar3418, nVar3419, nVar3420, nVar3421, nVar3422, nVar3423, nVar3424, nVar3425, nVar3426, nVar3427, nVar3428, nVar3429, nVar3430, nVar3431, nVar3432, nVar3433, nVar3434, nVar3435, nVar3436, nVar3437, nVar3438, nVar3439, nVar3440, nVar3441, nVar3442, nVar3443, nVar3444, nVar3445, nVar3446, nVar3447, nVar3448, nVar3449, nVar3450, nVar3451, nVar3452, nVar3453, nVar3454, nVar3455, nVar3456, nVar3457, nVar3458, nVar3459, nVar3460, nVar3461, nVar3462, nVar3463, nVar3464, nVar3465, nVar3466, nVar3467, nVar3468, nVar3469, nVar3470, nVar3471, nVar3472, nVar3473, nVar3474, nVar3475, nVar3476, nVar3477, nVar3478, nVar3479, nVar3480, nVar3481, nVar3482, nVar3483, nVar3484, nVar3485, nVar3486, nVar3487, nVar3488, nVar3489, nVar3490, nVar3491, nVar3492, nVar3493, nVar3494, nVar3495, nVar3496, nVar3497, nVar3498, nVar3499, nVar3500, nVar3501, nVar3502, nVar3503, nVar3504, nVar3505, nVar3506, nVar3507, nVar3508, nVar3509, nVar3510, nVar3511, nVar3512, nVar3513, nVar3514, nVar3515, nVar3516, nVar3517, nVar3518, nVar3519, nVar3520, nVar3521, nVar3522, nVar3523, nVar3524, nVar3525, nVar3526, nVar3527, nVar3528, nVar3529, nVar3530, nVar3531, nVar3532, nVar3533, nVar3534, nVar3535, nVar3536, nVar3537, nVar3538, nVar3539, nVar3540, nVar3541, nVar3542, nVar3543, nVar3544, nVar3545, nVar3546, nVar3547, nVar3548, nVar3549, nVar3550, nVar3551, nVar3552, nVar3553, nVar3554, nVar3555, nVar3556, nVar3557, nVar3558, nVar3559, nVar3560, nVar3561, nVar3562, nVar3563, nVar3564, nVar3565, nVar3566, nVar3567, nVar3568, nVar3569, nVar3570, nVar3571, nVar3572, nVar3573, nVar3574, nVar3575, nVar3576, nVar3577, nVar3578, nVar3579, nVar3580, nVar3581, nVar3582, nVar3583, nVar3584, nVar3585, nVar3586, nVar3587, nVar3588, nVar3589, nVar3590, nVar3591, nVar3592, nVar3593, nVar3594, nVar3595, nVar3596, nVar3597, nVar3598, nVar3599, nVar3600, nVar3601, nVar3602, nVar3603, nVar3604, nVar3605, nVar3606, nVar3607, nVar3608, nVar3609, nVar3610, nVar3611, nVar3612, nVar3613, nVar3614, nVar3615, nVar3616, nVar3617, nVar3618, nVar3619, nVar3620, nVar3621, nVar3622, nVar3623, nVar3624, nVar3625, nVar3626, nVar3627, nVar3628, nVar3629, nVar3630, nVar3631, nVar3632, nVar3633, nVar3634, nVar3635, nVar3636, nVar3637, nVar3638, nVar3639, nVar3640, nVar3641, nVar3642, nVar3643, nVar3644, nVar3645, nVar3646, nVar3647, nVar3648, nVar3649, nVar3650, nVar3651, nVar3652, nVar3653, nVar3654, nVar3655, nVar3656, nVar3657, nVar3658, nVar3659, nVar3660, nVar3661, nVar3662, nVar3663, nVar3664, nVar3665, nVar3666, nVar3667, nVar3668, nVar3669, nVar3670, nVar3671, nVar3672, nVar3673, nVar3674, nVar3675, nVar3676, nVar3677, nVar3678, nVar3679, nVar3680, nVar3681, nVar3682, nVar3683, nVar3684, nVar3685, nVar3686, nVar3687, nVar3688, nVar3689, nVar3690, nVar3691, nVar3692, nVar3693, nVar3694, nVar3695, nVar3696, nVar3697, nVar3698, nVar3699, nVar3700, nVar3701, nVar3702, nVar3703, nVar3704, nVar3705, nVar3706, nVar3707, nVar3708, nVar3709, nVar3710, nVar347, nVar399, nVar1040, nVar1175, nVar2103, nVar2179, nVar2621, nVar2632, nVar2754, nVar3048, nVar3062, nVar3139, nVar3711, nVar3714, nVar3717, nVar3722, nVar3721, nVar1254, nVar280, nVar3718, nVar3719, nVar3720;
+
+
+
+procedure proc64() returns (nVar4933: int, nVar4934: bool);
+ modifies nVar2, nVar1, nVar3, nVar4, nVar5, nVar6, nVar7, nVar8, nVar9, nVar10, nVar11, nVar12, nVar13, nVar14, nVar15, nVar16, nVar17, nVar18, nVar19, nVar20, nVar21, nVar22, nVar23, nVar24, nVar25, nVar26, nVar27, nVar28, nVar29, nVar30, nVar31, nVar32, nVar33, nVar34, nVar35, nVar36, nVar37, nVar38, nVar39, nVar40, nVar41, nVar42, nVar43, nVar44, nVar45, nVar46, nVar47, nVar48, nVar49, nVar50, nVar51, nVar52, nVar53, nVar54, nVar55, nVar56, nVar57, nVar58, nVar59, nVar60, nVar61, nVar62, nVar63, nVar64, nVar65, nVar66, nVar67, nVar68, nVar69, nVar70, nVar71, nVar72, nVar73, nVar74, nVar75, nVar76, nVar77, nVar78, nVar79, nVar80, nVar81, nVar82, nVar83, nVar84, nVar85, nVar86, nVar87, nVar88, nVar89, nVar90, nVar91, nVar92, nVar93, nVar94, nVar95, nVar96, nVar97, nVar98, nVar99, nVar100, nVar101, nVar102, nVar103, nVar104, nVar105, nVar106, nVar107, nVar108, nVar109, nVar110, nVar111, nVar112, nVar113, nVar114, nVar115, nVar116, nVar117, nVar118, nVar119, nVar120, nVar121, nVar122, nVar123, nVar124, nVar125, nVar126, nVar127, nVar128, nVar129, nVar130, nVar131, nVar132, nVar133, nVar134, nVar135, nVar136, nVar137, nVar138, nVar139, nVar140, nVar141, nVar142, nVar143, nVar144, nVar145, nVar146, nVar147, nVar148, nVar149, nVar150, nVar151, nVar152, nVar153, nVar154, nVar155, nVar156, nVar157, nVar158, nVar159, nVar160, nVar161, nVar162, nVar163, nVar164, nVar165, nVar166, nVar167, nVar168, nVar169, nVar170, nVar171, nVar172, nVar173, nVar174, nVar175, nVar176, nVar177, nVar178, nVar179, nVar180, nVar181, nVar182, nVar183, nVar184, nVar185, nVar186, nVar187, nVar188, nVar189, nVar190, nVar191, nVar192, nVar193, nVar194, nVar195, nVar196, nVar197, nVar198, nVar199, nVar200, nVar201, nVar202, nVar203, nVar204, nVar205, nVar206, nVar207, nVar208, nVar209, nVar210, nVar211, nVar212, nVar213, nVar214, nVar215, nVar216, nVar217, nVar218, nVar219, nVar220, nVar221, nVar222, nVar223, nVar224, nVar225, nVar226, nVar227, nVar228, nVar229, nVar230, nVar231, nVar232, nVar233, nVar234, nVar235, nVar236, nVar237, nVar238, nVar239, nVar240, nVar241, nVar242, nVar243, nVar244, nVar245, nVar246, nVar247, nVar248, nVar249, nVar250, nVar251, nVar252, nVar253, nVar254, nVar255, nVar256, nVar257, nVar258, nVar259, nVar260, nVar261, nVar262, nVar263, nVar264, nVar265, nVar266, nVar267, nVar268, nVar269, nVar270, nVar271, nVar272, nVar273, nVar274, nVar275, nVar276, nVar277, nVar278, nVar279, nVar281, nVar282, nVar283, nVar284, nVar285, nVar286, nVar287, nVar288, nVar289, nVar290, nVar291, nVar292, nVar293, nVar294, nVar295, nVar296, nVar297, nVar298, nVar299, nVar300, nVar301, nVar302, nVar303, nVar304, nVar305, nVar306, nVar307, nVar308, nVar309, nVar310, nVar311, nVar312, nVar313, nVar314, nVar315, nVar316, nVar317, nVar318, nVar319, nVar320, nVar321, nVar322, nVar323, nVar324, nVar325, nVar326, nVar327, nVar328, nVar329, nVar330, nVar331, nVar332, nVar333, nVar334, nVar335, nVar336, nVar337, nVar338, nVar339, nVar340, nVar341, nVar342, nVar343, nVar344, nVar345, nVar346, nVar348, nVar349, nVar350, nVar351, nVar352, nVar353, nVar354, nVar355, nVar356, nVar357, nVar358, nVar359, nVar360, nVar361, nVar362, nVar363, nVar364, nVar365, nVar366, nVar367, nVar368, nVar369, nVar370, nVar371, nVar372, nVar373, nVar374, nVar375, nVar376, nVar377, nVar378, nVar379, nVar380, nVar381, nVar382, nVar383, nVar384, nVar385, nVar386, nVar387, nVar388, nVar389, nVar390, nVar391, nVar392, nVar393, nVar394, nVar395, nVar396, nVar397, nVar398, nVar400, nVar401, nVar402, nVar403, nVar404, nVar405, nVar406, nVar407, nVar408, nVar409, nVar410, nVar411, nVar412, nVar413, nVar414, nVar415, nVar416, nVar417, nVar418, nVar419, nVar420, nVar421, nVar422, nVar423, nVar424, nVar425, nVar426, nVar427, nVar428, nVar429, nVar430, nVar431, nVar432, nVar433, nVar434, nVar435, nVar436, nVar437, nVar438, nVar439, nVar440, nVar441, nVar442, nVar443, nVar444, nVar445, nVar446, nVar447, nVar448, nVar449, nVar450, nVar451, nVar452, nVar453, nVar454, nVar455, nVar456, nVar457, nVar458, nVar459, nVar460, nVar461, nVar462, nVar463, nVar464, nVar465, nVar466, nVar467, nVar468, nVar469, nVar470, nVar471, nVar472, nVar473, nVar474, nVar475, nVar476, nVar477, nVar478, nVar479, nVar480, nVar481, nVar482, nVar483, nVar484, nVar485, nVar486, nVar487, nVar488, nVar489, nVar490, nVar491, nVar492, nVar493, nVar494, nVar495, nVar496, nVar497, nVar498, nVar499, nVar500, nVar501, nVar502, nVar503, nVar504, nVar505, nVar506, nVar507, nVar508, nVar509, nVar510, nVar511, nVar512, nVar513, nVar514, nVar515, nVar516, nVar517, nVar518, nVar519, nVar520, nVar521, nVar522, nVar523, nVar524, nVar525, nVar526, nVar527, nVar528, nVar529, nVar530, nVar531, nVar532, nVar533, nVar534, nVar535, nVar536, nVar537, nVar538, nVar539, nVar540, nVar541, nVar542, nVar543, nVar544, nVar545, nVar546, nVar547, nVar548, nVar549, nVar550, nVar551, nVar552, nVar553, nVar554, nVar555, nVar556, nVar557, nVar558, nVar559, nVar560, nVar561, nVar562, nVar563, nVar564, nVar565, nVar566, nVar567, nVar568, nVar569, nVar570, nVar571, nVar572, nVar573, nVar574, nVar575, nVar576, nVar577, nVar578, nVar579, nVar580, nVar581, nVar582, nVar583, nVar584, nVar585, nVar586, nVar587, nVar588, nVar589, nVar590, nVar591, nVar592, nVar593, nVar594, nVar595, nVar596, nVar597, nVar598, nVar599, nVar600, nVar601, nVar602, nVar603, nVar604, nVar605, nVar606, nVar607, nVar608, nVar609, nVar610, nVar611, nVar612, nVar613, nVar614, nVar615, nVar616, nVar617, nVar618, nVar619, nVar620, nVar621, nVar622, nVar623, nVar624, nVar625, nVar626, nVar627, nVar628, nVar629, nVar630, nVar631, nVar632, nVar633, nVar634, nVar635, nVar636, nVar637, nVar638, nVar639, nVar640, nVar641, nVar642, nVar643, nVar644, nVar645, nVar646, nVar647, nVar648, nVar649, nVar650, nVar651, nVar652, nVar653, nVar654, nVar655, nVar656, nVar657, nVar658, nVar659, nVar660, nVar661, nVar662, nVar663, nVar664, nVar665, nVar666, nVar667, nVar668, nVar669, nVar670, nVar671, nVar672, nVar673, nVar674, nVar675, nVar676, nVar677, nVar678, nVar679, nVar680, nVar681, nVar682, nVar683, nVar684, nVar685, nVar686, nVar687, nVar688, nVar689, nVar690, nVar691, nVar692, nVar693, nVar694, nVar695, nVar696, nVar697, nVar698, nVar699, nVar700, nVar701, nVar702, nVar703, nVar704, nVar705, nVar706, nVar707, nVar708, nVar709, nVar710, nVar711, nVar712, nVar713, nVar714, nVar715, nVar716, nVar717, nVar718, nVar719, nVar720, nVar721, nVar722, nVar723, nVar724, nVar725, nVar726, nVar727, nVar728, nVar729, nVar730, nVar731, nVar732, nVar733, nVar734, nVar735, nVar736, nVar737, nVar738, nVar739, nVar740, nVar741, nVar742, nVar743, nVar744, nVar745, nVar746, nVar747, nVar748, nVar749, nVar750, nVar751, nVar752, nVar753, nVar754, nVar755, nVar756, nVar757, nVar758, nVar759, nVar760, nVar761, nVar762, nVar763, nVar764, nVar765, nVar766, nVar767, nVar768, nVar769, nVar770, nVar771, nVar772, nVar773, nVar774, nVar775, nVar776, nVar777, nVar778, nVar779, nVar780, nVar781, nVar782, nVar783, nVar784, nVar785, nVar786, nVar787, nVar788, nVar789, nVar790, nVar791, nVar792, nVar793, nVar794, nVar795, nVar796, nVar797, nVar798, nVar799, nVar800, nVar801, nVar802, nVar803, nVar804, nVar805, nVar806, nVar807, nVar808, nVar809, nVar810, nVar811, nVar812, nVar813, nVar814, nVar815, nVar816, nVar817, nVar818, nVar819, nVar820, nVar821, nVar822, nVar823, nVar824, nVar825, nVar826, nVar827, nVar828, nVar829, nVar830, nVar831, nVar832, nVar833, nVar834, nVar835, nVar836, nVar837, nVar838, nVar839, nVar840, nVar841, nVar842, nVar843, nVar844, nVar845, nVar846, nVar847, nVar848, nVar849, nVar850, nVar851, nVar852, nVar853, nVar854, nVar855, nVar856, nVar857, nVar858, nVar859, nVar860, nVar861, nVar862, nVar863, nVar864, nVar865, nVar866, nVar867, nVar868, nVar869, nVar870, nVar871, nVar872, nVar873, nVar874, nVar875, nVar876, nVar877, nVar878, nVar879, nVar880, nVar881, nVar882, nVar883, nVar884, nVar885, nVar886, nVar887, nVar888, nVar889, nVar890, nVar891, nVar892, nVar893, nVar894, nVar895, nVar896, nVar897, nVar898, nVar899, nVar900, nVar901, nVar902, nVar903, nVar904, nVar905, nVar906, nVar907, nVar908, nVar909, nVar910, nVar911, nVar912, nVar913, nVar914, nVar915, nVar916, nVar917, nVar918, nVar919, nVar920, nVar921, nVar922, nVar923, nVar924, nVar925, nVar926, nVar927, nVar928, nVar929, nVar930, nVar931, nVar932, nVar933, nVar934, nVar935, nVar936, nVar937, nVar938, nVar939, nVar940, nVar941, nVar942, nVar943, nVar944, nVar945, nVar946, nVar947, nVar948, nVar949, nVar950, nVar951, nVar952, nVar953, nVar954, nVar955, nVar956, nVar957, nVar958, nVar959, nVar960, nVar961, nVar962, nVar963, nVar964, nVar965, nVar966, nVar967, nVar968, nVar969, nVar970, nVar971, nVar972, nVar973, nVar974, nVar975, nVar976, nVar977, nVar978, nVar979, nVar980, nVar981, nVar982, nVar983, nVar984, nVar985, nVar986, nVar987, nVar988, nVar989, nVar990, nVar991, nVar992, nVar993, nVar994, nVar995, nVar996, nVar997, nVar998, nVar999, nVar1000, nVar1001, nVar1002, nVar1003, nVar1004, nVar1005, nVar1006, nVar1007, nVar1008, nVar1009, nVar1010, nVar1011, nVar1012, nVar1013, nVar1014, nVar1015, nVar1016, nVar1017, nVar1018, nVar1019, nVar1020, nVar1021, nVar1022, nVar1023, nVar1024, nVar1025, nVar1026, nVar1027, nVar1028, nVar1029, nVar1030, nVar1031, nVar1032, nVar1033, nVar1034, nVar1035, nVar1036, nVar1037, nVar1038, nVar1039, nVar1041, nVar1042, nVar1043, nVar1044, nVar1045, nVar1046, nVar1047, nVar1048, nVar1049, nVar1050, nVar1051, nVar1052, nVar1053, nVar1054, nVar1055, nVar1056, nVar1057, nVar1058, nVar1059, nVar1060, nVar1061, nVar1062, nVar1063, nVar1064, nVar1065, nVar1066, nVar1067, nVar1068, nVar1069, nVar1070, nVar1071, nVar1072, nVar1073, nVar1074, nVar1075, nVar1076, nVar1077, nVar1078, nVar1079, nVar1080, nVar1081, nVar1082, nVar1083, nVar1084, nVar1085, nVar1086, nVar1087, nVar1088, nVar1089, nVar1090, nVar1091, nVar1092, nVar1093, nVar1094, nVar1095, nVar1096, nVar1097, nVar1098, nVar1099, nVar1100, nVar1101, nVar1102, nVar1103, nVar1104, nVar1105, nVar1106, nVar1107, nVar1108, nVar1109, nVar1110, nVar1111, nVar1112, nVar1113, nVar1114, nVar1115, nVar1116, nVar1117, nVar1118, nVar1119, nVar1120, nVar1121, nVar1122, nVar1123, nVar1124, nVar1125, nVar1126, nVar1127, nVar1128, nVar1129, nVar1130, nVar1131, nVar1132, nVar1133, nVar1134, nVar1135, nVar1136, nVar1137, nVar1138, nVar1139, nVar1140, nVar1141, nVar1142, nVar1143, nVar1144, nVar1145, nVar1146, nVar1147, nVar1148, nVar1149, nVar1150, nVar1151, nVar1152, nVar1153, nVar1154, nVar1155, nVar1156, nVar1157, nVar1158, nVar1159, nVar1160, nVar1161, nVar1162, nVar1163, nVar1164, nVar1165, nVar1166, nVar1167, nVar1168, nVar1169, nVar1170, nVar1171, nVar1172, nVar1173, nVar1174, nVar1176, nVar1177, nVar1178, nVar1179, nVar1180, nVar1181, nVar1182, nVar1183, nVar1184, nVar1185, nVar1186, nVar1187, nVar1188, nVar1189, nVar1190, nVar1191, nVar1192, nVar1193, nVar1194, nVar1195, nVar1196, nVar1197, nVar1198, nVar1199, nVar1200, nVar1201, nVar1202, nVar1203, nVar1204, nVar1205, nVar1206, nVar1207, nVar1208, nVar1209, nVar1210, nVar1211, nVar1212, nVar1213, nVar1214, nVar1215, nVar1216, nVar1217, nVar1218, nVar1219, nVar1220, nVar1221, nVar1222, nVar1223, nVar1224, nVar1225, nVar1226, nVar1227, nVar1228, nVar1229, nVar1230, nVar1231, nVar1232, nVar1233, nVar1234, nVar1235, nVar1236, nVar1237, nVar1238, nVar1239, nVar1240, nVar1241, nVar1242, nVar1243, nVar1244, nVar1245, nVar1246, nVar1247, nVar1248, nVar1249, nVar1250, nVar1251, nVar1252, nVar1253, nVar1255, nVar1256, nVar1257, nVar1258, nVar1259, nVar1260, nVar1261, nVar1262, nVar1263, nVar1264, nVar1265, nVar1266, nVar1267, nVar1268, nVar1269, nVar1270, nVar1271, nVar1272, nVar1273, nVar1274, nVar1275, nVar1276, nVar1277, nVar1278, nVar1279, nVar1280, nVar1281, nVar1282, nVar1283, nVar1284, nVar1285, nVar1286, nVar1287, nVar1288, nVar1289, nVar1290, nVar1291, nVar1292, nVar1293, nVar1294, nVar1295, nVar1296, nVar1297, nVar1298, nVar1299, nVar1300, nVar1301, nVar1302, nVar1303, nVar1304, nVar1305, nVar1306, nVar1307, nVar1308, nVar1309, nVar1310, nVar1311, nVar1312, nVar1313, nVar1314, nVar1315, nVar1316, nVar1317, nVar1318, nVar1319, nVar1320, nVar1321, nVar1322, nVar1323, nVar1324, nVar1325, nVar1326, nVar1327, nVar1328, nVar1329, nVar1330, nVar1331, nVar1332, nVar1333, nVar1334, nVar1335, nVar1336, nVar1337, nVar1338, nVar1339, nVar1340, nVar1341, nVar1342, nVar1343, nVar1344, nVar1345, nVar1346, nVar1347, nVar1348, nVar1349, nVar1350, nVar1351, nVar1352, nVar1353, nVar1354, nVar1355, nVar1356, nVar1357, nVar1358, nVar1359, nVar1360, nVar1361, nVar1362, nVar1363, nVar1364, nVar1365, nVar1366, nVar1367, nVar1368, nVar1369, nVar1370, nVar1371, nVar1372, nVar1373, nVar1374, nVar1375, nVar1376, nVar1377, nVar1378, nVar1379, nVar1380, nVar1381, nVar1382, nVar1383, nVar1384, nVar1385, nVar1386, nVar1387, nVar1388, nVar1389, nVar1390, nVar1391, nVar1392, nVar1393, nVar1394, nVar1395, nVar1396, nVar1397, nVar1398, nVar1399, nVar1400, nVar1401, nVar1402, nVar1403, nVar1404, nVar1405, nVar1406, nVar1407, nVar1408, nVar1409, nVar1410, nVar1411, nVar1412, nVar1413, nVar1414, nVar1415, nVar1416, nVar1417, nVar1418, nVar1419, nVar1420, nVar1421, nVar1422, nVar1423, nVar1424, nVar1425, nVar1426, nVar1427, nVar1428, nVar1429, nVar1430, nVar1431, nVar1432, nVar1433, nVar1434, nVar1435, nVar1436, nVar1437, nVar1438, nVar1439, nVar1440, nVar1441, nVar1442, nVar1443, nVar1444, nVar1445, nVar1446, nVar1447, nVar1448, nVar1449, nVar1450, nVar1451, nVar1452, nVar1453, nVar1454, nVar1455, nVar1456, nVar1457, nVar1458, nVar1459, nVar1460, nVar1461, nVar1462, nVar1463, nVar1464, nVar1465, nVar1466, nVar1467, nVar1468, nVar1469, nVar1470, nVar1471, nVar1472, nVar1473, nVar1474, nVar1475, nVar1476, nVar1477, nVar1478, nVar1479, nVar1480, nVar1481, nVar1482, nVar1483, nVar1484, nVar1485, nVar1486, nVar1487, nVar1488, nVar1489, nVar1490, nVar1491, nVar1492, nVar1493, nVar1494, nVar1495, nVar1496, nVar1497, nVar1498, nVar1499, nVar1500, nVar1501, nVar1502, nVar1503, nVar1504, nVar1505, nVar1506, nVar1507, nVar1508, nVar1509, nVar1510, nVar1511, nVar1512, nVar1513, nVar1514, nVar1515, nVar1516, nVar1517, nVar1518, nVar1519, nVar1520, nVar1521, nVar1522, nVar1523, nVar1524, nVar1525, nVar1526, nVar1527, nVar1528, nVar1529, nVar1530, nVar1531, nVar1532, nVar1533, nVar1534, nVar1535, nVar1536, nVar1537, nVar1538, nVar1539, nVar1540, nVar1541, nVar1542, nVar1543, nVar1544, nVar1545, nVar1546, nVar1547, nVar1548, nVar1549, nVar1550, nVar1551, nVar1552, nVar1553, nVar1554, nVar1555, nVar1556, nVar1557, nVar1558, nVar1559, nVar1560, nVar1561, nVar1562, nVar1563, nVar1564, nVar1565, nVar1566, nVar1567, nVar1568, nVar1569, nVar1570, nVar1571, nVar1572, nVar1573, nVar1574, nVar1575, nVar1576, nVar1577, nVar1578, nVar1579, nVar1580, nVar1581, nVar1582, nVar1583, nVar1584, nVar1585, nVar1586, nVar1587, nVar1588, nVar1589, nVar1590, nVar1591, nVar1592, nVar1593, nVar1594, nVar1595, nVar1596, nVar1597, nVar1598, nVar1599, nVar1600, nVar1601, nVar1602, nVar1603, nVar1604, nVar1605, nVar1606, nVar1607, nVar1608, nVar1609, nVar1610, nVar1611, nVar1612, nVar1613, nVar1614, nVar1615, nVar1616, nVar1617, nVar1618, nVar1619, nVar1620, nVar1621, nVar1622, nVar1623, nVar1624, nVar1625, nVar1626, nVar1627, nVar1628, nVar1629, nVar1630, nVar1631, nVar1632, nVar1633, nVar1634, nVar1635, nVar1636, nVar1637, nVar1638, nVar1639, nVar1640, nVar1641, nVar1642, nVar1643, nVar1644, nVar1645, nVar1646, nVar1647, nVar1648, nVar1649, nVar1650, nVar1651, nVar1652, nVar1653, nVar1654, nVar1655, nVar1656, nVar1657, nVar1658, nVar1659, nVar1660, nVar1661, nVar1662, nVar1663, nVar1664, nVar1665, nVar1666, nVar1667, nVar1668, nVar1669, nVar1670, nVar1671, nVar1672, nVar1673, nVar1674, nVar1675, nVar1676, nVar1677, nVar1678, nVar1679, nVar1680, nVar1681, nVar1682, nVar1683, nVar1684, nVar1685, nVar1686, nVar1687, nVar1688, nVar1689, nVar1690, nVar1691, nVar1692, nVar1693, nVar1694, nVar1695, nVar1696, nVar1697, nVar1698, nVar1699, nVar1700, nVar1701, nVar1702, nVar1703, nVar1704, nVar1705, nVar1706, nVar1707, nVar1708, nVar1709, nVar1710, nVar1711, nVar1712, nVar1713, nVar1714, nVar1715, nVar1716, nVar1717, nVar1718, nVar1719, nVar1720, nVar1721, nVar1722, nVar1723, nVar1724, nVar1725, nVar1726, nVar1727, nVar1728, nVar1729, nVar1730, nVar1731, nVar1732, nVar1733, nVar1734, nVar1735, nVar1736, nVar1737, nVar1738, nVar1739, nVar1740, nVar1741, nVar1742, nVar1743, nVar1744, nVar1745, nVar1746, nVar1747, nVar1748, nVar1749, nVar1750, nVar1751, nVar1752, nVar1753, nVar1754, nVar1755, nVar1756, nVar1757, nVar1758, nVar1759, nVar1760, nVar1761, nVar1762, nVar1763, nVar1764, nVar1765, nVar1766, nVar1767, nVar1768, nVar1769, nVar1770, nVar1771, nVar1772, nVar1773, nVar1774, nVar1775, nVar1776, nVar1777, nVar1778, nVar1779, nVar1780, nVar1781, nVar1782, nVar1783, nVar1784, nVar1785, nVar1786, nVar1787, nVar1788, nVar1789, nVar1790, nVar1791, nVar1792, nVar1793, nVar1794, nVar1795, nVar1796, nVar1797, nVar1798, nVar1799, nVar1800, nVar1801, nVar1802, nVar1803, nVar1804, nVar1805, nVar1806, nVar1807, nVar1808, nVar1809, nVar1810, nVar1811, nVar1812, nVar1813, nVar1814, nVar1815, nVar1816, nVar1817, nVar1818, nVar1819, nVar1820, nVar1821, nVar1822, nVar1823, nVar1824, nVar1825, nVar1826, nVar1827, nVar1828, nVar1829, nVar1830, nVar1831, nVar1832, nVar1833, nVar1834, nVar1835, nVar1836, nVar1837, nVar1838, nVar1839, nVar1840, nVar1841, nVar1842, nVar1843, nVar1844, nVar1845, nVar1846, nVar1847, nVar1848, nVar1849, nVar1850, nVar1851, nVar1852, nVar1853, nVar1854, nVar1855, nVar1856, nVar1857, nVar1858, nVar1859, nVar1860, nVar1861, nVar1862, nVar1863, nVar1864, nVar1865, nVar1866, nVar1867, nVar1868, nVar1869, nVar1870, nVar1871, nVar1872, nVar1873, nVar1874, nVar1875, nVar1876, nVar1877, nVar1878, nVar1879, nVar1880, nVar1881, nVar1882, nVar1883, nVar1884, nVar1885, nVar1886, nVar1887, nVar1888, nVar1889, nVar1890, nVar1891, nVar1892, nVar1893, nVar1894, nVar1895, nVar1896, nVar1897, nVar1898, nVar1899, nVar1900, nVar1901, nVar1902, nVar1903, nVar1904, nVar1905, nVar1906, nVar1907, nVar1908, nVar1909, nVar1910, nVar1911, nVar1912, nVar1913, nVar1914, nVar1915, nVar1916, nVar1917, nVar1918, nVar1919, nVar1920, nVar1921, nVar1922, nVar1923, nVar1924, nVar1925, nVar1926, nVar1928, nVar1929, nVar1930, nVar1931, nVar1932, nVar1933, nVar1934, nVar1935, nVar1936, nVar1937, nVar1938, nVar1939, nVar1940, nVar1941, nVar1942, nVar1943, nVar1944, nVar1945, nVar1946, nVar1947, nVar1948, nVar1949, nVar1950, nVar1951, nVar1952, nVar1953, nVar1954, nVar1955, nVar1956, nVar1957, nVar1958, nVar1959, nVar1960, nVar1961, nVar1962, nVar1963, nVar1964, nVar1965, nVar1966, nVar1967, nVar1968, nVar1969, nVar1970, nVar1971, nVar1972, nVar1973, nVar1974, nVar1975, nVar1976, nVar1977, nVar1978, nVar1979, nVar1980, nVar1981, nVar1982, nVar1983, nVar1984, nVar1985, nVar1986, nVar1987, nVar1988, nVar1989, nVar1990, nVar1991, nVar1992, nVar1993, nVar1994, nVar1995, nVar1996, nVar1997, nVar1998, nVar1999, nVar2000, nVar2001, nVar2002, nVar2003, nVar2004, nVar2005, nVar2006, nVar2007, nVar2008, nVar2009, nVar2010, nVar2011, nVar2012, nVar2013, nVar2014, nVar2015, nVar2016, nVar2017, nVar2018, nVar2019, nVar2020, nVar2021, nVar2022, nVar2023, nVar2024, nVar2025, nVar2026, nVar2027, nVar2028, nVar2029, nVar2030, nVar2031, nVar2032, nVar2033, nVar2034, nVar2035, nVar2036, nVar2037, nVar2038, nVar2039, nVar2040, nVar2041, nVar2042, nVar2043, nVar2044, nVar2045, nVar2046, nVar2047, nVar2048, nVar2049, nVar2050, nVar2051, nVar2052, nVar2053, nVar2054, nVar2055, nVar2056, nVar2057, nVar2058, nVar2059, nVar2060, nVar2061, nVar2062, nVar2063, nVar2064, nVar2065, nVar2066, nVar2067, nVar2068, nVar2069, nVar2070, nVar2071, nVar2072, nVar2073, nVar2074, nVar2075, nVar2076, nVar2077, nVar2078, nVar2079, nVar2080, nVar2081, nVar2082, nVar2083, nVar2084, nVar2085, nVar2086, nVar2087, nVar2088, nVar2089, nVar2090, nVar2091, nVar2092, nVar2093, nVar2094, nVar2095, nVar2096, nVar2097, nVar2098, nVar2099, nVar2100, nVar2101, nVar2102, nVar2104, nVar2105, nVar2106, nVar2107, nVar2108, nVar2109, nVar2110, nVar2111, nVar2112, nVar2113, nVar2114, nVar2115, nVar2116, nVar2117, nVar2118, nVar2119, nVar2120, nVar2121, nVar2122, nVar2123, nVar2124, nVar2125, nVar2126, nVar2127, nVar2128, nVar2129, nVar2130, nVar2131, nVar2132, nVar2133, nVar2134, nVar2135, nVar2136, nVar2137, nVar2138, nVar2139, nVar2140, nVar2141, nVar2142, nVar2143, nVar2144, nVar2145, nVar2146, nVar2147, nVar2148, nVar2149, nVar2150, nVar2151, nVar2152, nVar2153, nVar2154, nVar2155, nVar2156, nVar2157, nVar2158, nVar2159, nVar2160, nVar2161, nVar2162, nVar2163, nVar2164, nVar2165, nVar2166, nVar2167, nVar2168, nVar2169, nVar2170, nVar2171, nVar2172, nVar2173, nVar2174, nVar2175, nVar2176, nVar2177, nVar2178, nVar2180, nVar2181, nVar2182, nVar2183, nVar2184, nVar2185, nVar2186, nVar2187, nVar2188, nVar2189, nVar2190, nVar2191, nVar2192, nVar2193, nVar2194, nVar2195, nVar2196, nVar2197, nVar2198, nVar2199, nVar2200, nVar2201, nVar2202, nVar2203, nVar2204, nVar2205, nVar2206, nVar2207, nVar2208, nVar2209, nVar2210, nVar2211, nVar2212, nVar2213, nVar2214, nVar2215, nVar2216, nVar2217, nVar2218, nVar2219, nVar2220, nVar2221, nVar2222, nVar2223, nVar2224, nVar2225, nVar2226, nVar2227, nVar2228, nVar2229, nVar2230, nVar2231, nVar2232, nVar2233, nVar2234, nVar2235, nVar2236, nVar2237, nVar2238, nVar2239, nVar2240, nVar2241, nVar2242, nVar2243, nVar2244, nVar2245, nVar2246, nVar2247, nVar2248, nVar2249, nVar2250, nVar2251, nVar2252, nVar2253, nVar2254, nVar2255, nVar2256, nVar2257, nVar2258, nVar2259, nVar2260, nVar2261, nVar2262, nVar2263, nVar2264, nVar2265, nVar2266, nVar2267, nVar2268, nVar2269, nVar2270, nVar2271, nVar2272, nVar2273, nVar2274, nVar2275, nVar2276, nVar2277, nVar2278, nVar2279, nVar2280, nVar2281, nVar2282, nVar2283, nVar2284, nVar2285, nVar2286, nVar2287, nVar2288, nVar2289, nVar2290, nVar2291, nVar2292, nVar2293, nVar2294, nVar2295, nVar2296, nVar2297, nVar2298, nVar2299, nVar2300, nVar2301, nVar2302, nVar2303, nVar2304, nVar2305, nVar2306, nVar2307, nVar2308, nVar2309, nVar2310, nVar2311, nVar2312, nVar2313, nVar2314, nVar2315, nVar2316, nVar2317, nVar2318, nVar2319, nVar2320, nVar2321, nVar2322, nVar2323, nVar2324, nVar2325, nVar2326, nVar2327, nVar2328, nVar2329, nVar2330, nVar2331, nVar2332, nVar2333, nVar2334, nVar2335, nVar2336, nVar2337, nVar2338, nVar2339, nVar2340, nVar2341, nVar2342, nVar2343, nVar2344, nVar2345, nVar2346, nVar2347, nVar2348, nVar2349, nVar2350, nVar2351, nVar2352, nVar2353, nVar2354, nVar2355, nVar2356, nVar2357, nVar2358, nVar2359, nVar2360, nVar2361, nVar2362, nVar2363, nVar2364, nVar2365, nVar2366, nVar2367, nVar2368, nVar2369, nVar2370, nVar2371, nVar2372, nVar2373, nVar2374, nVar2375, nVar2376, nVar2377, nVar2378, nVar2379, nVar2380, nVar2381, nVar2382, nVar2383, nVar2384, nVar2385, nVar2386, nVar2387, nVar2388, nVar2389, nVar2390, nVar2391, nVar2392, nVar2393, nVar2394, nVar2395, nVar2396, nVar2397, nVar2398, nVar2399, nVar2400, nVar2401, nVar2402, nVar2403, nVar2404, nVar2405, nVar2406, nVar2407, nVar2408, nVar2409, nVar2410, nVar2411, nVar2412, nVar2413, nVar2414, nVar2415, nVar2416, nVar2417, nVar2418, nVar2419, nVar2420, nVar2421, nVar2422, nVar2423, nVar2424, nVar2425, nVar2426, nVar2427, nVar2428, nVar2429, nVar2430, nVar2431, nVar2432, nVar2433, nVar2434, nVar2435, nVar2436, nVar2437, nVar2438, nVar2439, nVar2440, nVar2441, nVar2442, nVar2443, nVar2444, nVar2445, nVar2446, nVar2447, nVar2448, nVar2449, nVar2450, nVar2451, nVar2452, nVar2453, nVar2454, nVar2455, nVar2456, nVar2457, nVar2458, nVar2459, nVar2460, nVar2461, nVar2462, nVar2463, nVar2464, nVar2465, nVar2466, nVar2467, nVar2468, nVar2469, nVar2470, nVar2471, nVar2472, nVar2473, nVar2474, nVar2475, nVar2476, nVar2477, nVar2478, nVar2479, nVar2480, nVar2481, nVar2482, nVar2483, nVar2484, nVar2485, nVar2486, nVar2487, nVar2488, nVar2489, nVar2490, nVar2491, nVar2492, nVar2493, nVar2494, nVar2495, nVar2496, nVar2497, nVar2498, nVar2499, nVar2500, nVar2501, nVar2502, nVar2503, nVar2504, nVar2505, nVar2506, nVar2507, nVar2508, nVar2509, nVar2510, nVar2511, nVar2512, nVar2513, nVar2514, nVar2515, nVar2516, nVar2517, nVar2518, nVar2519, nVar2520, nVar2521, nVar2522, nVar2523, nVar2524, nVar2525, nVar2526, nVar2527, nVar2528, nVar2529, nVar2530, nVar2531, nVar2532, nVar2533, nVar2534, nVar2535, nVar2536, nVar2537, nVar2538, nVar2539, nVar2540, nVar2541, nVar2542, nVar2543, nVar2544, nVar2545, nVar2546, nVar2547, nVar2548, nVar2549, nVar2550, nVar2551, nVar2552, nVar2553, nVar2554, nVar2555, nVar2556, nVar2557, nVar2558, nVar2559, nVar2560, nVar2561, nVar2562, nVar2563, nVar2564, nVar2565, nVar2566, nVar2567, nVar2568, nVar2569, nVar2570, nVar2571, nVar2572, nVar2573, nVar2574, nVar2575, nVar2576, nVar2577, nVar2578, nVar2579, nVar2580, nVar2581, nVar2582, nVar2583, nVar2584, nVar2585, nVar2586, nVar2587, nVar2588, nVar2589, nVar2590, nVar2591, nVar2592, nVar2593, nVar2594, nVar2595, nVar2596, nVar2597, nVar2598, nVar2599, nVar2600, nVar2601, nVar2602, nVar2603, nVar2604, nVar2605, nVar2606, nVar2607, nVar2608, nVar2609, nVar2610, nVar2611, nVar2612, nVar2613, nVar2614, nVar2615, nVar2616, nVar2617, nVar2618, nVar2619, nVar2620, nVar2622, nVar2623, nVar2624, nVar2625, nVar2626, nVar2627, nVar2628, nVar2629, nVar2630, nVar2631, nVar2633, nVar2634, nVar2635, nVar2636, nVar2637, nVar2638, nVar2639, nVar2640, nVar2641, nVar2642, nVar2643, nVar2644, nVar2645, nVar2646, nVar2647, nVar2648, nVar2649, nVar2650, nVar2651, nVar2652, nVar2653, nVar2654, nVar2655, nVar2656, nVar2657, nVar2658, nVar2659, nVar2660, nVar2661, nVar2662, nVar2663, nVar2664, nVar2665, nVar2666, nVar2667, nVar2668, nVar2669, nVar2670, nVar2671, nVar2672, nVar2673, nVar2674, nVar2675, nVar2676, nVar2677, nVar2678, nVar2679, nVar2680, nVar2681, nVar2682, nVar2683, nVar2684, nVar2685, nVar2686, nVar2687, nVar2688, nVar2689, nVar2690, nVar2691, nVar2692, nVar2693, nVar2694, nVar2695, nVar2696, nVar2697, nVar2698, nVar2699, nVar2700, nVar2701, nVar2702, nVar2703, nVar2704, nVar2705, nVar2706, nVar2707, nVar2708, nVar2709, nVar2710, nVar2711, nVar2712, nVar2713, nVar2714, nVar2715, nVar2716, nVar2717, nVar2718, nVar2719, nVar2720, nVar2721, nVar2722, nVar2723, nVar2724, nVar2725, nVar2726, nVar2727, nVar2728, nVar2729, nVar2730, nVar2731, nVar2732, nVar2733, nVar2734, nVar2735, nVar2736, nVar2737, nVar2738, nVar2739, nVar2740, nVar2741, nVar2742, nVar2743, nVar2744, nVar2745, nVar2746, nVar2747, nVar2748, nVar2749, nVar2750, nVar2751, nVar2752, nVar2753, nVar2755, nVar2756, nVar2757, nVar2758, nVar2759, nVar2760, nVar2761, nVar2762, nVar2763, nVar2764, nVar2765, nVar2766, nVar2767, nVar2768, nVar2769, nVar2770, nVar2771, nVar2772, nVar2773, nVar2774, nVar2775, nVar2776, nVar2777, nVar2778, nVar2779, nVar2780, nVar2781, nVar2782, nVar2783, nVar2784, nVar2785, nVar2786, nVar2787, nVar2788, nVar2789, nVar2790, nVar2791, nVar2792, nVar2793, nVar2794, nVar2795, nVar2796, nVar2797, nVar2798, nVar2799, nVar2800, nVar2801, nVar2802, nVar2803, nVar2804, nVar2805, nVar2806, nVar2807, nVar2808, nVar2809, nVar2810, nVar2811, nVar2812, nVar2813, nVar2814, nVar2815, nVar2816, nVar2817, nVar2818, nVar2819, nVar2820, nVar2821, nVar2822, nVar2823, nVar2824, nVar2825, nVar2826, nVar2827, nVar2828, nVar2829, nVar2830, nVar2831, nVar2832, nVar2833, nVar2834, nVar2835, nVar2836, nVar2837, nVar2838, nVar2839, nVar2840, nVar2841, nVar2842, nVar2843, nVar2844, nVar2845, nVar2846, nVar2847, nVar2848, nVar2849, nVar2850, nVar2851, nVar2852, nVar2853, nVar2854, nVar2855, nVar2856, nVar2857, nVar2858, nVar2859, nVar2860, nVar2861, nVar2862, nVar2863, nVar2864, nVar2865, nVar2866, nVar2867, nVar2868, nVar2869, nVar2870, nVar2871, nVar2872, nVar2873, nVar2874, nVar2875, nVar2876, nVar2877, nVar2878, nVar2879, nVar2880, nVar2881, nVar2882, nVar2883, nVar2884, nVar2885, nVar2886, nVar2887, nVar2888, nVar2889, nVar2890, nVar2891, nVar2892, nVar2893, nVar2894, nVar2895, nVar2896, nVar2897, nVar2898, nVar2899, nVar2900, nVar2901, nVar2902, nVar2903, nVar2904, nVar2905, nVar2906, nVar2907, nVar2908, nVar2909, nVar2910, nVar2911, nVar2912, nVar2913, nVar2914, nVar2915, nVar2916, nVar2917, nVar2918, nVar2919, nVar2920, nVar2921, nVar2922, nVar2923, nVar2924, nVar2925, nVar2926, nVar2927, nVar2928, nVar2929, nVar2930, nVar2931, nVar2932, nVar2933, nVar2934, nVar2935, nVar2936, nVar2937, nVar2938, nVar2939, nVar2940, nVar2941, nVar2942, nVar2943, nVar2944, nVar2945, nVar2946, nVar2947, nVar2948, nVar2949, nVar2950, nVar2951, nVar2952, nVar2953, nVar2954, nVar2955, nVar2956, nVar2957, nVar2958, nVar2959, nVar2960, nVar2961, nVar2962, nVar2963, nVar2964, nVar2965, nVar2966, nVar2967, nVar2968, nVar2969, nVar2970, nVar2971, nVar2972, nVar2973, nVar2974, nVar2975, nVar2976, nVar2977, nVar2978, nVar2979, nVar2980, nVar2981, nVar2982, nVar2983, nVar2984, nVar2985, nVar2986, nVar2987, nVar2988, nVar2989, nVar2990, nVar2991, nVar2992, nVar2993, nVar2994, nVar2995, nVar2996, nVar2997, nVar2998, nVar2999, nVar3000, nVar3001, nVar3002, nVar3003, nVar3004, nVar3005, nVar3006, nVar3007, nVar3008, nVar3009, nVar3010, nVar3011, nVar3012, nVar3013, nVar3014, nVar3015, nVar3016, nVar3017, nVar3018, nVar3019, nVar3020, nVar3021, nVar3022, nVar3023, nVar3024, nVar3025, nVar3026, nVar3027, nVar3028, nVar3029, nVar3030, nVar3031, nVar3032, nVar3033, nVar3034, nVar3035, nVar3036, nVar3037, nVar3038, nVar3039, nVar3040, nVar3041, nVar3042, nVar3043, nVar3044, nVar3045, nVar3046, nVar3047, nVar3049, nVar3050, nVar3051, nVar3052, nVar3053, nVar3054, nVar3055, nVar3056, nVar3057, nVar3058, nVar3059, nVar3060, nVar3061, nVar3063, nVar3064, nVar3065, nVar3066, nVar3067, nVar3068, nVar3069, nVar3070, nVar3071, nVar3072, nVar3073, nVar3074, nVar3075, nVar3076, nVar3077, nVar3078, nVar3079, nVar3080, nVar3081, nVar3082, nVar3083, nVar3084, nVar3085, nVar3086, nVar3087, nVar3088, nVar3089, nVar3090, nVar3091, nVar3092, nVar3093, nVar3094, nVar3095, nVar3096, nVar3097, nVar3098, nVar3099, nVar3100, nVar3101, nVar3102, nVar3103, nVar3104, nVar3105, nVar3106, nVar3107, nVar3108, nVar3109, nVar3110, nVar3111, nVar3112, nVar3113, nVar3114, nVar3115, nVar3116, nVar3117, nVar3118, nVar3119, nVar3120, nVar3121, nVar3122, nVar3123, nVar3124, nVar3125, nVar3126, nVar3127, nVar3128, nVar3129, nVar3130, nVar3131, nVar3132, nVar3133, nVar3134, nVar3135, nVar3136, nVar3137, nVar3138, nVar3140, nVar3141, nVar3142, nVar3143, nVar3144, nVar3145, nVar3146, nVar3147, nVar3148, nVar3149, nVar3150, nVar3151, nVar3152, nVar3153, nVar3154, nVar3155, nVar3156, nVar3157, nVar3158, nVar3159, nVar3160, nVar3161, nVar3162, nVar3163, nVar3164, nVar3165, nVar3166, nVar3167, nVar3168, nVar3169, nVar3170, nVar3171, nVar3172, nVar3173, nVar3174, nVar3175, nVar3176, nVar3177, nVar3178, nVar3179, nVar3180, nVar3181, nVar3182, nVar3183, nVar3184, nVar3185, nVar3186, nVar3187, nVar3188, nVar3189, nVar3190, nVar3191, nVar3192, nVar3193, nVar3194, nVar3195, nVar3196, nVar3197, nVar3198, nVar3199, nVar3200, nVar3201, nVar3202, nVar3203, nVar3204, nVar3205, nVar3206, nVar3207, nVar3208, nVar3209, nVar3210, nVar3211, nVar3212, nVar3213, nVar3214, nVar3215, nVar3216, nVar3217, nVar3218, nVar3219, nVar3220, nVar3221, nVar3222, nVar3223, nVar3224, nVar3225, nVar3226, nVar3227, nVar3228, nVar3229, nVar3230, nVar3231, nVar3232, nVar3233, nVar3234, nVar3235, nVar3236, nVar3237, nVar3238, nVar3239, nVar3240, nVar3241, nVar3242, nVar3243, nVar3244, nVar3245, nVar3246, nVar3247, nVar3248, nVar3249, nVar3250, nVar3251, nVar3252, nVar3253, nVar3254, nVar3255, nVar3256, nVar3257, nVar3258, nVar3259, nVar3260, nVar3261, nVar3262, nVar3263, nVar3264, nVar3265, nVar3266, nVar3267, nVar3268, nVar3269, nVar3270, nVar3271, nVar3272, nVar3273, nVar3274, nVar3275, nVar3276, nVar3277, nVar3278, nVar3279, nVar3280, nVar3281, nVar3282, nVar3283, nVar3284, nVar3285, nVar3286, nVar3287, nVar3288, nVar3289, nVar3290, nVar3291, nVar3292, nVar3293, nVar3294, nVar3295, nVar3296, nVar3297, nVar3298, nVar3299, nVar3300, nVar3301, nVar3302, nVar3303, nVar3304, nVar3305, nVar3306, nVar3307, nVar3308, nVar3309, nVar3310, nVar3311, nVar3312, nVar3313, nVar3314, nVar3315, nVar3316, nVar3317, nVar3318, nVar3319, nVar3320, nVar3321, nVar3322, nVar3323, nVar3324, nVar3325, nVar3326, nVar3327, nVar3328, nVar3329, nVar3330, nVar3331, nVar3332, nVar3333, nVar3334, nVar3335, nVar3336, nVar3337, nVar3338, nVar3339, nVar3340, nVar3341, nVar3342, nVar3343, nVar3344, nVar3345, nVar3346, nVar3347, nVar3348, nVar3349, nVar3350, nVar3351, nVar3352, nVar3353, nVar3354, nVar3355, nVar3356, nVar3357, nVar3358, nVar3359, nVar3360, nVar3361, nVar3362, nVar3363, nVar3364, nVar3365, nVar3366, nVar3367, nVar3368, nVar3369, nVar3370, nVar3371, nVar3372, nVar3373, nVar3374, nVar3375, nVar3376, nVar3377, nVar3378, nVar3379, nVar3380, nVar3381, nVar3382, nVar3383, nVar3384, nVar3385, nVar3386, nVar3387, nVar3388, nVar3389, nVar3390, nVar3391, nVar3392, nVar3393, nVar3394, nVar3395, nVar3396, nVar3397, nVar3398, nVar3399, nVar3400, nVar3401, nVar3402, nVar3403, nVar3404, nVar3405, nVar3406, nVar3407, nVar3408, nVar3409, nVar3410, nVar3411, nVar3412, nVar3413, nVar3414, nVar3415, nVar3416, nVar3417, nVar3418, nVar3419, nVar3420, nVar3421, nVar3422, nVar3423, nVar3424, nVar3425, nVar3426, nVar3427, nVar3428, nVar3429, nVar3430, nVar3431, nVar3432, nVar3433, nVar3434, nVar3435, nVar3436, nVar3437, nVar3438, nVar3439, nVar3440, nVar3441, nVar3442, nVar3443, nVar3444, nVar3445, nVar3446, nVar3447, nVar3448, nVar3449, nVar3450, nVar3451, nVar3452, nVar3453, nVar3454, nVar3455, nVar3456, nVar3457, nVar3458, nVar3459, nVar3460, nVar3461, nVar3462, nVar3463, nVar3464, nVar3465, nVar3466, nVar3467, nVar3468, nVar3469, nVar3470, nVar3471, nVar3472, nVar3473, nVar3474, nVar3475, nVar3476, nVar3477, nVar3478, nVar3479, nVar3480, nVar3481, nVar3482, nVar3483, nVar3484, nVar3485, nVar3486, nVar3487, nVar3488, nVar3489, nVar3490, nVar3491, nVar3492, nVar3493, nVar3494, nVar3495, nVar3496, nVar3497, nVar3498, nVar3499, nVar3500, nVar3501, nVar3502, nVar3503, nVar3504, nVar3505, nVar3506, nVar3507, nVar3508, nVar3509, nVar3510, nVar3511, nVar3512, nVar3513, nVar3514, nVar3515, nVar3516, nVar3517, nVar3518, nVar3519, nVar3520, nVar3521, nVar3522, nVar3523, nVar3524, nVar3525, nVar3526, nVar3527, nVar3528, nVar3529, nVar3530, nVar3531, nVar3532, nVar3533, nVar3534, nVar3535, nVar3536, nVar3537, nVar3538, nVar3539, nVar3540, nVar3541, nVar3542, nVar3543, nVar3544, nVar3545, nVar3546, nVar3547, nVar3548, nVar3549, nVar3550, nVar3551, nVar3552, nVar3553, nVar3554, nVar3555, nVar3556, nVar3557, nVar3558, nVar3559, nVar3560, nVar3561, nVar3562, nVar3563, nVar3564, nVar3565, nVar3566, nVar3567, nVar3568, nVar3569, nVar3570, nVar3571, nVar3572, nVar3573, nVar3574, nVar3575, nVar3576, nVar3577, nVar3578, nVar3579, nVar3580, nVar3581, nVar3582, nVar3583, nVar3584, nVar3585, nVar3586, nVar3587, nVar3588, nVar3589, nVar3590, nVar3591, nVar3592, nVar3593, nVar3594, nVar3595, nVar3596, nVar3597, nVar3598, nVar3599, nVar3600, nVar3601, nVar3602, nVar3603, nVar3604, nVar3605, nVar3606, nVar3607, nVar3608, nVar3609, nVar3610, nVar3611, nVar3612, nVar3613, nVar3614, nVar3615, nVar3616, nVar3617, nVar3618, nVar3619, nVar3620, nVar3621, nVar3622, nVar3623, nVar3624, nVar3625, nVar3626, nVar3627, nVar3628, nVar3629, nVar3630, nVar3631, nVar3632, nVar3633, nVar3634, nVar3635, nVar3636, nVar3637, nVar3638, nVar3639, nVar3640, nVar3641, nVar3642, nVar3643, nVar3644, nVar3645, nVar3646, nVar3647, nVar3648, nVar3649, nVar3650, nVar3651, nVar3652, nVar3653, nVar3654, nVar3655, nVar3656, nVar3657, nVar3658, nVar3659, nVar3660, nVar3661, nVar3662, nVar3663, nVar3664, nVar3665, nVar3666, nVar3667, nVar3668, nVar3669, nVar3670, nVar3671, nVar3672, nVar3673, nVar3674, nVar3675, nVar3676, nVar3677, nVar3678, nVar3679, nVar3680, nVar3681, nVar3682, nVar3683, nVar3684, nVar3685, nVar3686, nVar3687, nVar3688, nVar3689, nVar3690, nVar3691, nVar3692, nVar3693, nVar3694, nVar3695, nVar3696, nVar3697, nVar3698, nVar3699, nVar3700, nVar3701, nVar3702, nVar3703, nVar3704, nVar3705, nVar3706, nVar3707, nVar3708, nVar3709, nVar3710, nVar347, nVar399, nVar1040, nVar1175, nVar2103, nVar2179, nVar2621, nVar2632, nVar2754, nVar3048, nVar3062, nVar3139, nVar3711, nVar3714, nVar3717, nVar3722, nVar3721, nVar1254, nVar280, nVar3718, nVar3719, nVar3720;
+
+
+
+procedure proc65();
+
+
+
+implementation proc65()
+{
+
+ anon0__unique__1:
+ assume (forall x: int :: { nVar3714[x] } nVar3714[x] <= 0 || nVar3714[x] > 8912);
+ assume (forall x: int :: { nVar3717[x] } nVar3717[x] <= 0 || nVar3717[x] > 8912);
+ assume (forall x: int :: { nVar3721[x] } nVar3721[x] <= 0 || nVar3721[x] > 8912);
+ assume (forall x: int :: { nVar3722[x] } nVar3722[x] <= 0 || nVar3722[x] > 8912);
+ return;
+}
+
+
+
+procedure proc66();
+ modifies nVar3711;
+
+
+
+implementation proc66()
+{
+
+ anon0__unique__1:
+ nVar3711 := 0;
+ return;
+}
+
+
+
+procedure proc67();
+ modifies nVar1, nVar3714, nVar3717, nVar3722, nVar3721, nVar1254, nVar280;
+
+
+
+procedure proc68(nVar4658: int, nVar4659: int) returns (nVar4660: int);
+
+
+
+implementation proc68(nVar4658: int, nVar4659: int) returns (nVar4660: int)
+{
+ var nVar4661: int;
+
+ anon0__unique__1:
+ nVar4660 := nVar4661;
+ return;
+}
+
+
+
+procedure proc69(nVar4662: int) returns (nVar4663: int);
+
+
+
+implementation proc69(nVar4662: int) returns (nVar4663: int)
+{
+ var nVar4664: int;
+
+ anon0__unique__1:
+ nVar4663 := nVar4664;
+ return;
+}
+
+
+
+procedure proc70(nVar4665: int, nVar4666: int) returns (nVar4667: int);
+
+
+
+implementation proc70(nVar4665: int, nVar4666: int) returns (nVar4667: int)
+{
+ var nVar4668: int;
+
+ anon0__unique__1:
+ nVar4667 := nVar4668;
+ return;
+}
+
+
+
+procedure proc71(nVar4669: int) returns (nVar4670: int);
+
+
+
+implementation proc71(nVar4669: int) returns (nVar4670: int)
+{
+ var nVar4671: int;
+
+ anon0__unique__1:
+ nVar4670 := nVar4671;
+ return;
+}
+
+
+
+procedure proc72(nVar4672: int, nVar4673: int) returns (nVar4674: int);
+
+
+
+implementation proc72(nVar4672: int, nVar4673: int) returns (nVar4674: int)
+{
+ var nVar4675: int;
+
+ anon0__unique__1:
+ nVar4674 := nVar4675;
+ return;
+}
+
+
+
+procedure proc73(nVar4676: int) returns (nVar4677: int);
+
+
+
+implementation proc73(nVar4676: int) returns (nVar4677: int)
+{
+ var nVar4678: int;
+
+ anon0__unique__1:
+ nVar4677 := nVar4678;
+ return;
+}
+
+
+
+procedure proc74(nVar4679: int, nVar4680: int) returns (nVar4681: int);
+
+
+
+implementation proc74(nVar4679: int, nVar4680: int) returns (nVar4681: int)
+{
+ var nVar4682: int;
+
+ anon0__unique__1:
+ nVar4681 := nVar4682;
+ return;
+}
+
+
+
+procedure proc75(nVar4683: int) returns (nVar4684: int);
+
+
+
+implementation proc75(nVar4683: int) returns (nVar4684: int)
+{
+ var nVar4685: int;
+
+ anon0__unique__1:
+ nVar4684 := nVar4685;
+ return;
+}
+
+
+
+procedure proc76(nVar4686: int, nVar4687: int) returns (nVar4688: int);
+
+
+
+implementation proc76(nVar4686: int, nVar4687: int) returns (nVar4688: int)
+{
+ var nVar4689: int;
+
+ anon0__unique__1:
+ nVar4688 := nVar4689;
+ return;
+}
+
+
+
+procedure proc77(nVar4690: int) returns (nVar4691: int);
+
+
+
+implementation proc77(nVar4690: int) returns (nVar4691: int)
+{
+ var nVar4692: int;
+
+ anon0__unique__1:
+ nVar4691 := nVar4692;
+ return;
+}
+
+
+
+procedure proc78(nVar4693: int, nVar4694: int) returns (nVar4695: int);
+
+
+
+implementation proc78(nVar4693: int, nVar4694: int) returns (nVar4695: int)
+{
+ var nVar4696: int;
+
+ anon0__unique__1:
+ nVar4695 := nVar4696;
+ return;
+}
+
+
+
+procedure proc79(nVar4697: int) returns (nVar4698: int);
+
+
+
+implementation proc79(nVar4697: int) returns (nVar4698: int)
+{
+ var nVar4699: int;
+
+ anon0__unique__1:
+ nVar4698 := nVar4699;
+ return;
+}
+
+
+
+procedure proc80(nVar4700: int, nVar4701: int) returns (nVar4702: int);
+
+
+
+implementation proc80(nVar4700: int, nVar4701: int) returns (nVar4702: int)
+{
+ var nVar4703: int;
+
+ anon0__unique__1:
+ nVar4702 := nVar4703;
+ return;
+}
+
+
+
+procedure proc81(nVar4704: int) returns (nVar4705: int);
+
+
+
+implementation proc81(nVar4704: int) returns (nVar4705: int)
+{
+ var nVar4706: int;
+
+ anon0__unique__1:
+ nVar4705 := nVar4706;
+ return;
+}
+
+
+
+procedure proc82(nVar4707: int, nVar4708: int) returns (nVar4709: int);
+
+
+
+implementation proc82(nVar4707: int, nVar4708: int) returns (nVar4709: int)
+{
+ var nVar4710: int;
+
+ anon0__unique__1:
+ nVar4709 := nVar4710;
+ return;
+}
+
+
+
+procedure proc83(nVar4711: int) returns (nVar4712: int);
+
+
+
+implementation proc83(nVar4711: int) returns (nVar4712: int)
+{
+ var nVar4713: int;
+
+ anon0__unique__1:
+ nVar4712 := nVar4713;
+ return;
+}
+
+
+
+procedure proc84(nVar4714: int, nVar4715: int) returns (nVar4716: int);
+
+
+
+implementation proc84(nVar4714: int, nVar4715: int) returns (nVar4716: int)
+{
+ var nVar4717: int;
+
+ anon0__unique__1:
+ nVar4716 := nVar4717;
+ return;
+}
+
+
+
+procedure proc85(nVar4718: int) returns (nVar4719: int);
+
+
+
+implementation proc85(nVar4718: int) returns (nVar4719: int)
+{
+ var nVar4720: int;
+
+ anon0__unique__1:
+ nVar4719 := nVar4720;
+ return;
+}
+
+
+
+procedure proc86(nVar4721: int, nVar4722: int) returns (nVar4723: int);
+
+
+
+implementation proc86(nVar4721: int, nVar4722: int) returns (nVar4723: int)
+{
+ var nVar4724: int;
+
+ anon0__unique__1:
+ nVar4723 := nVar4724;
+ return;
+}
+
+
+
+procedure proc87(nVar4725: int) returns (nVar4726: int);
+
+
+
+implementation proc87(nVar4725: int) returns (nVar4726: int)
+{
+ var nVar4727: int;
+
+ anon0__unique__1:
+ nVar4726 := nVar4727;
+ return;
+}
+
+
+
+procedure proc88(nVar4728: int, nVar4729: int) returns (nVar4730: int);
+
+
+
+implementation proc88(nVar4728: int, nVar4729: int) returns (nVar4730: int)
+{
+ var nVar4731: int;
+
+ anon0__unique__1:
+ nVar4730 := nVar4731;
+ return;
+}
+
+
+
+procedure proc89(nVar4732: int) returns (nVar4733: int);
+
+
+
+implementation proc89(nVar4732: int) returns (nVar4733: int)
+{
+ var nVar4734: int;
+
+ anon0__unique__1:
+ nVar4733 := nVar4734;
+ return;
+}
+
+
+
+procedure proc90(nVar4735: int, nVar4736: int) returns (nVar4737: int);
+
+
+
+implementation proc90(nVar4735: int, nVar4736: int) returns (nVar4737: int)
+{
+ var nVar4738: int;
+
+ anon0__unique__1:
+ nVar4737 := nVar4738;
+ return;
+}
+
+
+
+procedure proc91(nVar4739: int) returns (nVar4740: int);
+
+
+
+implementation proc91(nVar4739: int) returns (nVar4740: int)
+{
+ var nVar4741: int;
+
+ anon0__unique__1:
+ nVar4740 := nVar4741;
+ return;
+}
+
+
+
+procedure proc92(nVar4742: int, nVar4743: int) returns (nVar4744: int);
+
+
+
+implementation proc92(nVar4742: int, nVar4743: int) returns (nVar4744: int)
+{
+ var nVar4745: int;
+
+ anon0__unique__1:
+ nVar4744 := nVar4745;
+ return;
+}
+
+
+
+procedure proc93(nVar4746: int) returns (nVar4747: int);
+
+
+
+implementation proc93(nVar4746: int) returns (nVar4747: int)
+{
+ var nVar4748: int;
+
+ anon0__unique__1:
+ nVar4747 := nVar4748;
+ return;
+}
+
+
+
+procedure proc94(nVar4749: int, nVar4750: int) returns (nVar4751: int);
+
+
+
+implementation proc94(nVar4749: int, nVar4750: int) returns (nVar4751: int)
+{
+ var nVar4752: int;
+
+ anon0__unique__1:
+ nVar4751 := nVar4752;
+ return;
+}
+
+
+
+procedure proc95(nVar4753: int) returns (nVar4754: int);
+
+
+
+implementation proc95(nVar4753: int) returns (nVar4754: int)
+{
+ var nVar4755: int;
+
+ anon0__unique__1:
+ nVar4754 := nVar4755;
+ return;
+}
+
+
+
+procedure proc96(nVar4756: int) returns (nVar4757: int);
+
+
+
+implementation proc96(nVar4756: int) returns (nVar4757: int)
+{
+ var nVar4758: int;
+
+ anon0__unique__1:
+ nVar4757 := nVar4758;
+ return;
+}
+
+
+
+procedure proc97(nVar4759: int) returns (nVar4760: int);
+
+
+
+implementation proc97(nVar4759: int) returns (nVar4760: int)
+{
+ var nVar4761: int;
+
+ anon0__unique__1:
+ nVar4760 := nVar4761;
+ return;
+}
+
+
+
+procedure proc98(nVar4762: int) returns (nVar4763: int);
+
+
+
+implementation proc98(nVar4762: int) returns (nVar4763: int)
+{
+ var nVar4764: int;
+
+ anon0__unique__1:
+ nVar4763 := nVar4764;
+ return;
+}
+
+
+
+procedure proc99(nVar4765: int) returns (nVar4766: int);
+
+
+
+implementation proc99(nVar4765: int) returns (nVar4766: int)
+{
+ var nVar4767: int;
+
+ anon0__unique__1:
+ nVar4766 := nVar4767;
+ return;
+}
+
+
+
+procedure proc100(nVar4768: int) returns (nVar4769: int);
+
+
+
+implementation proc100(nVar4768: int) returns (nVar4769: int)
+{
+ var nVar4770: int;
+
+ anon0__unique__1:
+ nVar4769 := nVar4770;
+ return;
+}
+
+
+
+procedure proc101(nVar4771: int) returns (nVar4772: int);
+
+
+
+implementation proc101(nVar4771: int) returns (nVar4772: int)
+{
+ var nVar4773: int;
+
+ anon0__unique__1:
+ nVar4772 := nVar4773;
+ return;
+}
+
+
+
+procedure proc102(nVar4774: int) returns (nVar4775: int);
+
+
+
+implementation proc102(nVar4774: int) returns (nVar4775: int)
+{
+ var nVar4776: int;
+
+ anon0__unique__1:
+ nVar4775 := nVar4776;
+ return;
+}
+
+
+
+procedure proc103(nVar4777: int) returns (nVar4778: int);
+
+
+
+implementation proc103(nVar4777: int) returns (nVar4778: int)
+{
+ var nVar4779: int;
+
+ anon0__unique__1:
+ nVar4778 := nVar4779;
+ return;
+}
+
+
+
+procedure proc104(nVar4780: int) returns (nVar4781: int);
+
+
+
+implementation proc104(nVar4780: int) returns (nVar4781: int)
+{
+ var nVar4782: int;
+
+ anon0__unique__1:
+ nVar4781 := nVar4782;
+ return;
+}
+
+
+
+procedure proc105(nVar4783: int) returns (nVar4784: int);
+
+
+
+implementation proc105(nVar4783: int) returns (nVar4784: int)
+{
+ var nVar4785: int;
+
+ anon0__unique__1:
+ nVar4784 := nVar4785;
+ return;
+}
+
+
+
+procedure proc106(nVar4786: int) returns (nVar4787: int);
+
+
+
+implementation proc106(nVar4786: int) returns (nVar4787: int)
+{
+ var nVar4788: int;
+
+ anon0__unique__1:
+ nVar4787 := nVar4788;
+ return;
+}
+
+
+
+procedure proc107(nVar4789: int) returns (nVar4790: int);
+
+
+
+implementation proc107(nVar4789: int) returns (nVar4790: int)
+{
+ var nVar4791: int;
+
+ anon0__unique__1:
+ nVar4790 := nVar4791;
+ return;
+}
+
+
+
+procedure proc108(nVar4792: int) returns (nVar4793: int);
+
+
+
+implementation proc108(nVar4792: int) returns (nVar4793: int)
+{
+ var nVar4794: int;
+
+ anon0__unique__1:
+ nVar4793 := nVar4794;
+ return;
+}
+
+
+
+procedure proc109(nVar4795: int) returns (nVar4796: int);
+
+
+
+implementation proc109(nVar4795: int) returns (nVar4796: int)
+{
+ var nVar4797: int;
+
+ anon0__unique__1:
+ nVar4796 := nVar4797;
+ return;
+}
+
+
+
+procedure proc110(nVar4798: int, nVar4799: int) returns (nVar4800: int);
+
+
+
+implementation proc110(nVar4798: int, nVar4799: int) returns (nVar4800: int)
+{
+ var nVar4801: int;
+
+ anon0__unique__1:
+ nVar4800 := nVar4801;
+ return;
+}
+
+
+
+procedure proc111(nVar4802: int) returns (nVar4803: int);
+
+
+
+implementation proc111(nVar4802: int) returns (nVar4803: int)
+{
+ var nVar4804: int;
+
+ anon0__unique__1:
+ nVar4803 := nVar4804;
+ return;
+}
+
+
+
+procedure proc112(nVar4805: int, nVar4806: int) returns (nVar4807: int);
+
+
+
+implementation proc112(nVar4805: int, nVar4806: int) returns (nVar4807: int)
+{
+ var nVar4808: int;
+
+ anon0__unique__1:
+ nVar4807 := nVar4808;
+ return;
+}
+
+
+
+procedure proc113(nVar4809: int) returns (nVar4810: int);
+
+
+
+implementation proc113(nVar4809: int) returns (nVar4810: int)
+{
+ var nVar4811: int;
+
+ anon0__unique__1:
+ nVar4810 := nVar4811;
+ return;
+}
+
+
+
+procedure proc114(nVar4812: int) returns (nVar4813: int);
+
+
+
+implementation proc114(nVar4812: int) returns (nVar4813: int)
+{
+ var nVar4814: int;
+
+ anon0__unique__1:
+ nVar4813 := nVar4814;
+ return;
+}
+
+
+
+procedure proc115(nVar4815: int) returns (nVar4816: int);
+
+
+
+implementation proc115(nVar4815: int) returns (nVar4816: int)
+{
+ var nVar4817: int;
+
+ anon0__unique__1:
+ nVar4816 := nVar4817;
+ return;
+}
+
+
+
+implementation proc67()
+{
+ var nVar4818: int;
+ var nVar4819: int;
+ var nVar4820: int;
+ var nVar4821: int;
+ var nVar4822: int;
+ var nVar4823: int;
+ var nVar4824: int;
+ var nVar4825: int;
+ var nVar4826: int;
+ var nVar4827: int;
+ var nVar4828: int;
+ var nVar4829: int;
+ var nVar4830: int;
+ var nVar4831: int;
+ var nVar4832: int;
+ var nVar4833: int;
+ var nVar4834: int;
+ var nVar4835: int;
+ var nVar4836: int;
+ var nVar4837: int;
+ var nVar4838: int;
+ var nVar4839: int;
+ var nVar4840: int;
+ var nVar4841: int;
+ var nVar4842: int;
+ var nVar4843: int;
+ var nVar4844: int;
+ var nVar4845: int;
+ var nVar4846: int;
+ var nVar4847: int;
+ var nVar4848: int;
+ var nVar4849: int;
+ var nVar4850: int;
+ var nVar4851: int;
+ var nVar4852: int;
+ var nVar4853: int;
+ var nVar4854: int;
+ var nVar4855: int;
+ var nVar4856: int;
+ var nVar4857: int;
+ var nVar4858: int;
+ var nVar4859: int;
+ var nVar4860: int;
+ var nVar4861: int;
+ var nVar4862: int;
+ var nVar4863: int;
+ var nVar4864: int;
+ var nVar4865: int;
+ var nVar4866: int;
+ var nVar4867: int;
+ var nVar4868: int;
+ var nVar4869: int;
+ var nVar4870: int;
+ var nVar4871: int;
+ var nVar4872: int;
+ var nVar4873: int;
+ var nVar4874: int;
+ var nVar4875: int;
+ var nVar4876: int;
+ var nVar4877: int;
+ var nVar4878: int;
+ var nVar4879: int;
+ var nVar4880: int;
+ var nVar4881: int;
+ var nVar4882: int;
+ var nVar4883: int;
+ var nVar4884: int;
+ var nVar4885: int;
+ var nVar4886: int;
+ var nVar4887: int;
+
+ anon0__unique__1:
+ call {:si_unique_call 4808} nVar4818 := proc130(100);
+ call {:si_unique_call 4809} nVar4819 := proc130(140);
+ call {:si_unique_call 4810} nVar4820 := proc130(228);
+ call {:si_unique_call 4811} nVar4821 := proc130(392);
+ call {:si_unique_call 4812} nVar4822 := proc130(140);
+ call {:si_unique_call 4813} nVar4823 := proc130(140);
+ call {:si_unique_call 4814} nVar4824 := proc130(140);
+ call {:si_unique_call 4815} nVar4825 := proc130(140);
+ call {:si_unique_call 4816} nVar4826 := proc130(140);
+ call {:si_unique_call 4817} nVar4827 := proc130(100);
+ call {:si_unique_call 4818} nVar4828 := proc130(140);
+ call {:si_unique_call 4819} nVar4829 := proc130(228);
+ call {:si_unique_call 4820} nVar4830 := proc130(60);
+ call {:si_unique_call 4821} nVar4831 := proc130(140);
+ call {:si_unique_call 4822} nVar4832 := proc130(360);
+ call {:si_unique_call 4823} nVar4833 := proc130(140);
+ call {:si_unique_call 4824} nVar4834 := proc130(140);
+ call {:si_unique_call 4825} nVar4835 := proc130(140);
+ call {:si_unique_call 4826} nVar4836 := proc130(140);
+ call {:si_unique_call 4827} nVar4837 := proc130(140);
+ call {:si_unique_call 4828} nVar4838 := proc130(140);
+ assume nVar3139 > 0;
+ nVar3714[func18(nVar3139)] := 4158;
+ assume nVar2179 > 0;
+ nVar3714[func18(nVar2179)] := 4171;
+ nVar4827 := nVar4276;
+ nVar4818 := nVar4603;
+ nVar4830 := nVar4651;
+ nVar4821 := nVar4609;
+ nVar4832 := nVar4610;
+ nVar3717[func26(nVar868)] := 284;
+ nVar3717[func26(nVar2360)] := 286;
+ assume nVar3716[func21(nVar367)] > 0;
+ nVar3722[func50(nVar402)] := 279;
+ nVar3721[func43(nVar402)] := 0;
+ assume nVar3716[func21(nVar2637)] > 0;
+ nVar3722[func50(nVar3688)] := 388;
+ nVar3721[func43(nVar3688)] := 0;
+ nVar3717[func26(nVar1365)] := 658;
+ assume nVar3716[func21(nVar2770)] > 0;
+ nVar3722[func50(nVar1550)] := 654;
+ nVar3721[func43(nVar1550)] := 0;
+ nVar3717[func26(nVar2815)] := 680;
+ assume nVar3716[func21(nVar1718)] > 0;
+ nVar3722[func50(nVar1431)] := 675;
+ nVar3721[func43(nVar1431)] := 0;
+ nVar3717[func26(nVar3390)] := 689;
+ assume nVar3716[func21(nVar3138)] > 0;
+ nVar3722[func50(nVar2365)] := 685;
+ nVar3721[func43(nVar2365)] := 0;
+ nVar3717[func26(nVar3594)] := 698;
+ assume nVar3716[func21(nVar2578)] > 0;
+ nVar3722[func50(nVar1895)] := 694;
+ nVar3721[func43(nVar1895)] := 0;
+ nVar3717[func26(nVar691)] := 707;
+ assume nVar3716[func21(nVar3538)] > 0;
+ nVar3722[func50(nVar3083)] := 703;
+ nVar3721[func43(nVar3083)] := 0;
+ nVar3717[func26(nVar753)] := 716;
+ assume nVar3716[func21(nVar1294)] > 0;
+ nVar3722[func50(nVar1690)] := 712;
+ nVar3721[func43(nVar1690)] := 0;
+ nVar3717[func26(nVar1316)] := 726;
+ assume nVar3716[func21(nVar1909)] > 0;
+ nVar3722[func50(nVar3373)] := 721;
+ nVar3721[func43(nVar3373)] := 0;
+ nVar3717[func26(nVar624)] := 735;
+ assume nVar3716[func21(nVar3544)] > 0;
+ nVar3722[func50(nVar1548)] := 731;
+ nVar3721[func43(nVar1548)] := 0;
+ nVar3717[func26(nVar3111)] := 744;
+ assume nVar3716[func21(nVar3657)] > 0;
+ nVar3722[func50(nVar3279)] := 740;
+ nVar3721[func43(nVar3279)] := 0;
+ nVar3717[func26(nVar2001)] := 753;
+ assume nVar3716[func21(nVar3534)] > 0;
+ nVar3722[func50(nVar3176)] := 749;
+ nVar3721[func43(nVar3176)] := 0;
+ nVar3717[func26(nVar1915)] := 760;
+ assume nVar3716[func21(nVar2444)] > 0;
+ nVar3722[func50(nVar1472)] := 763;
+ nVar3721[func43(nVar1472)] := 0;
+ nVar3717[func26(nVar3661)] := 767;
+ assume nVar3716[func21(nVar3400)] > 0;
+ nVar3722[func50(nVar14)] := 770;
+ nVar3721[func43(nVar14)] := 0;
+ nVar3717[func26(nVar3261)] := 977;
+ assume nVar3716[func21(nVar1164)] > 0;
+ nVar3722[func50(nVar2713)] := 973;
+ nVar3721[func43(nVar2713)] := 0;
+ call {:si_unique_call 4894} nVar4887 := proc132();
+ assume nVar1175 > 0;
+ assume nVar399 > 0;
+ assume nVar2621 > 0;
+ assume nVar3712[func9(nVar1347)] > 0;
+ assume nVar3712[func9(nVar371)] > 0;
+ assume nVar3712[func9(nVar573)] > 0;
+ assume nVar347 > 0;
+ assume nVar3048 > 0;
+ assume nVar3712[func9(nVar2368)] > 0;
+ assume nVar3712[func9(nVar2948)] > 0;
+ assume nVar3712[func9(nVar3240)] > 0;
+ assume nVar2754 > 0;
+ assume nVar2103 > 0;
+ assume nVar3062 > 0;
+ assume nVar2632 > 0;
+ assume nVar1040 > 0;
+ assume nVar3712[func9(nVar3424)] > 0;
+ assume nVar3712[func9(nVar2898)] > 0;
+ assume nVar3712[func9(nVar1366)] > 0;
+ assume nVar3712[func9(nVar1264)] > 0;
+ assume nVar3712[func9(nVar412)] > 0;
+ assume nVar3712[func9(nVar2957)] > 0;
+ assume nVar3712[func9(nVar3577)] > 0;
+ assume nVar3712[func9(nVar876)] > 0;
+ assume nVar3712[func9(nVar628)] > 0;
+ assume nVar3712[func9(nVar1457)] > 0;
+ assume nVar3712[func9(nVar194)] > 0;
+ assume nVar3712[func9(nVar2771)] > 0;
+ assume nVar3712[func9(nVar971)] > 0;
+ assume nVar3712[func9(nVar968)] > 0;
+ assume nVar3712[func9(nVar966)] > 0;
+ assume nVar3712[func9(nVar1235)] > 0;
+ nVar1254 := 0;
+ nVar280 := -1;
+ assume nVar3715[func20(nVar1871)] > 0;
+ assume nVar3715[func20(nVar1789)] > 0;
+ assume nVar3715[func20(nVar2411)] > 0;
+ assume nVar3715[func20(nVar3338)] > 0;
+ assume nVar3715[func20(nVar3638)] > 0;
+ assume nVar3715[func20(nVar3451)] > 0;
+ assume nVar3715[func20(nVar736)] > 0;
+ assume nVar3715[func20(nVar3348)] > 0;
+ assume nVar3715[func20(nVar212)] > 0;
+ assume nVar3715[func20(nVar1853)] > 0;
+ assume nVar3715[func20(nVar1455)] > 0;
+ assume nVar3715[func20(nVar549)] > 0;
+ assume nVar3715[func20(nVar2251)] > 0;
+ assume nVar3715[func20(nVar3569)] > 0;
+ assume nVar3715[func20(nVar2095)] > 0;
+ assume nVar3715[func20(nVar260)] > 0;
+ assume nVar3715[func20(nVar3389)] > 0;
+ assume nVar3715[func20(nVar494)] > 0;
+ assume nVar3715[func20(nVar765)] > 0;
+ assume nVar3715[func20(nVar1476)] > 0;
+ assume nVar3715[func20(nVar3469)] > 0;
+ assume nVar3715[func20(nVar1512)] > 0;
+ assume nVar3715[func20(nVar582)] > 0;
+ assume nVar3715[func20(nVar3295)] > 0;
+ assume nVar3715[func20(nVar2631)] > 0;
+ assume nVar3715[func20(nVar3423)] > 0;
+ assume nVar3715[func20(nVar578)] > 0;
+ assume nVar3715[func20(nVar1468)] > 0;
+ assume nVar3715[func20(nVar1039)] > 0;
+ assume nVar3715[func20(nVar2507)] > 0;
+ assume nVar3715[func20(nVar360)] > 0;
+ assume nVar3715[func20(nVar2626)] > 0;
+ assume nVar3715[func20(nVar2801)] > 0;
+ assume nVar3715[func20(nVar3294)] > 0;
+ assume nVar3715[func20(nVar2638)] > 0;
+ assume nVar3715[func20(nVar2276)] > 0;
+ assume nVar3715[func20(nVar3236)] > 0;
+ assume nVar3715[func20(nVar1924)] > 0;
+ assume nVar3715[func20(nVar899)] > 0;
+ assume nVar3715[func20(nVar3377)] > 0;
+ assume nVar3715[func20(nVar748)] > 0;
+ assume nVar3715[func20(nVar2933)] > 0;
+ assume nVar3715[func20(nVar3134)] > 0;
+ assume nVar3715[func20(nVar577)] > 0;
+ assume nVar3715[func20(nVar2208)] > 0;
+ assume nVar3715[func20(nVar1150)] > 0;
+ assume nVar3715[func20(nVar188)] > 0;
+ assume nVar3715[func20(nVar1379)] > 0;
+ assume nVar3715[func20(nVar2065)] > 0;
+ assume nVar3715[func20(nVar2102)] > 0;
+ assume nVar3715[func20(nVar3103)] > 0;
+ assume nVar3715[func20(nVar1665)] > 0;
+ assume nVar3715[func20(nVar2235)] > 0;
+ assume nVar3715[func20(nVar3369)] > 0;
+ assume nVar3715[func20(nVar2137)] > 0;
+ assume nVar3715[func20(nVar3600)] > 0;
+ assume nVar3715[func20(nVar3257)] > 0;
+ assume nVar3715[func20(nVar1638)] > 0;
+ assume nVar3715[func20(nVar3528)] > 0;
+ assume nVar3715[func20(nVar1786)] > 0;
+ assume nVar3715[func20(nVar38)] > 0;
+ assume nVar3715[func20(nVar1959)] > 0;
+ assume nVar3715[func20(nVar1238)] > 0;
+ assume nVar3715[func20(nVar2519)] > 0;
+ assume nVar3715[func20(nVar2246)] > 0;
+ assume nVar3715[func20(nVar2831)] > 0;
+ assume nVar3715[func20(nVar3699)] > 0;
+ assume nVar3715[func20(nVar3315)] > 0;
+ assume nVar3715[func20(nVar1685)] > 0;
+ assume nVar3715[func20(nVar1340)] > 0;
+ assume nVar3715[func20(nVar2766)] > 0;
+ assume nVar3715[func20(nVar832)] > 0;
+ assume nVar3715[func20(nVar1497)] > 0;
+ assume nVar3715[func20(nVar2204)] > 0;
+ assume nVar3715[func20(nVar3406)] > 0;
+ assume nVar3715[func20(nVar2855)] > 0;
+ assume nVar3715[func20(nVar237)] > 0;
+ assume nVar3715[func20(nVar664)] > 0;
+ assume nVar3715[func20(nVar3409)] > 0;
+ assume nVar3715[func20(nVar1700)] > 0;
+ assume nVar3715[func20(nVar2896)] > 0;
+ assume nVar3715[func20(nVar1816)] > 0;
+ assume nVar3715[func20(nVar669)] > 0;
+ assume nVar3715[func20(nVar3483)] > 0;
+ assume nVar3715[func20(nVar3507)] > 0;
+ assume nVar3715[func20(nVar646)] > 0;
+ assume nVar3715[func20(nVar3254)] > 0;
+ assume nVar3715[func20(nVar2769)] > 0;
+ assume nVar3715[func20(nVar2323)] > 0;
+ assume nVar3715[func20(nVar3182)] > 0;
+ assume nVar3715[func20(nVar755)] > 0;
+ assume nVar3715[func20(nVar2148)] > 0;
+ assume nVar3715[func20(nVar3676)] > 0;
+ assume nVar3715[func20(nVar3269)] > 0;
+ assume nVar3715[func20(nVar3184)] > 0;
+ assume nVar3715[func20(nVar235)] > 0;
+ assume nVar3715[func20(nVar398)] > 0;
+ assume nVar3715[func20(nVar923)] > 0;
+ assume nVar3715[func20(nVar3146)] > 0;
+ assume nVar3715[func20(nVar3401)] > 0;
+ assume nVar3715[func20(nVar1922)] > 0;
+ assume nVar3715[func20(nVar563)] > 0;
+ assume nVar3715[func20(nVar3288)] > 0;
+ assume nVar3715[func20(nVar3214)] > 0;
+ assume nVar3715[func20(nVar660)] > 0;
+ assume nVar3715[func20(nVar2522)] > 0;
+ assume nVar3715[func20(nVar1600)] > 0;
+ assume nVar3715[func20(nVar3061)] > 0;
+ assume nVar3715[func20(nVar3708)] > 0;
+ assume nVar3715[func20(nVar3156)] > 0;
+ assume nVar3715[func20(nVar430)] > 0;
+ assume nVar3715[func20(nVar2997)] > 0;
+ assume nVar3715[func20(nVar3180)] > 0;
+ assume nVar3715[func20(nVar2155)] > 0;
+ assume nVar3715[func20(nVar2400)] > 0;
+ assume nVar3715[func20(nVar304)] > 0;
+ assume nVar3715[func20(nVar1666)] > 0;
+ assume nVar3715[func20(nVar2120)] > 0;
+ assume nVar3715[func20(nVar1067)] > 0;
+ assume nVar3715[func20(nVar2180)] > 0;
+ assume nVar3715[func20(nVar821)] > 0;
+ assume nVar3715[func20(nVar878)] > 0;
+ assume nVar3715[func20(nVar1779)] > 0;
+ assume nVar3715[func20(nVar1377)] > 0;
+ assume nVar3715[func20(nVar3670)] > 0;
+ assume nVar3715[func20(nVar2949)] > 0;
+ assume nVar3715[func20(nVar2919)] > 0;
+ assume nVar3715[func20(nVar2112)] > 0;
+ assume nVar3715[func20(nVar1322)] > 0;
+ assume nVar3715[func20(nVar538)] > 0;
+ assume nVar3715[func20(nVar7)] > 0;
+ assume nVar3715[func20(nVar3104)] > 0;
+ assume nVar3715[func20(nVar1802)] > 0;
+ assume nVar3715[func20(nVar3466)] > 0;
+ assume nVar3715[func20(nVar233)] > 0;
+ assume nVar3715[func20(nVar333)] > 0;
+ assume nVar3715[func20(nVar3671)] > 0;
+ assume nVar3715[func20(nVar2636)] > 0;
+ assume nVar3715[func20(nVar238)] > 0;
+ assume nVar3715[func20(nVar2210)] > 0;
+ assume nVar3715[func20(nVar1095)] > 0;
+ assume nVar3715[func20(nVar1841)] > 0;
+ assume nVar3715[func20(nVar3601)] > 0;
+ assume nVar3715[func20(nVar3392)] > 0;
+ assume nVar3715[func20(nVar401)] > 0;
+ assume nVar3715[func20(nVar844)] > 0;
+ assume nVar3715[func20(nVar964)] > 0;
+ assume nVar3715[func20(nVar2205)] > 0;
+ assume nVar3715[func20(nVar1170)] > 0;
+ assume nVar3715[func20(nVar2306)] > 0;
+ assume nVar3715[func20(nVar2833)] > 0;
+ assume nVar3715[func20(nVar232)] > 0;
+ assume nVar3715[func20(nVar164)] > 0;
+ assume nVar3715[func20(nVar1584)] > 0;
+ assume nVar3715[func20(nVar2135)] > 0;
+ assume nVar3715[func20(nVar341)] > 0;
+ assume nVar3715[func20(nVar1777)] > 0;
+ assume nVar3715[func20(nVar1896)] > 0;
+ assume nVar3715[func20(nVar2429)] > 0;
+ assume nVar3715[func20(nVar426)] > 0;
+ assume nVar3715[func20(nVar1391)] > 0;
+ assume nVar3715[func20(nVar3677)] > 0;
+ assume nVar3715[func20(nVar3582)] > 0;
+ assume nVar3715[func20(nVar2990)] > 0;
+ assume nVar3715[func20(nVar2849)] > 0;
+ assume nVar3712[func9(nVar1565)] > 0;
+ assume nVar3712[func9(nVar2461)] > 0;
+ assume nVar3712[func9(nVar3635)] > 0;
+ assume nVar3712[func9(nVar530)] > 0;
+ assume nVar3712[func9(nVar2125)] > 0;
+ assume nVar3712[func9(nVar1830)] > 0;
+ assume nVar3712[func9(nVar2524)] > 0;
+ assume nVar3712[func9(nVar3077)] > 0;
+ assume nVar3712[func9(nVar3458)] > 0;
+ assume nVar3712[func9(nVar2652)] > 0;
+ assume nVar3712[func9(nVar1393)] > 0;
+ assume nVar3712[func9(nVar3313)] > 0;
+ assume nVar3712[func9(nVar3283)] > 0;
+ assume nVar3712[func9(nVar3602)] > 0;
+ assume nVar3712[func9(nVar1904)] > 0;
+ assume nVar3712[func9(nVar1398)] > 0;
+ assume nVar3712[func9(nVar623)] > 0;
+ assume nVar3712[func9(nVar1790)] > 0;
+ assume nVar3712[func9(nVar685)] > 0;
+ assume nVar3712[func9(nVar2857)] > 0;
+ assume nVar3712[func9(nVar3328)] > 0;
+ assume nVar3712[func9(nVar3526)] > 0;
+ assume nVar3712[func9(nVar1938)] > 0;
+ assume nVar3712[func9(nVar781)] > 0;
+ assume nVar3712[func9(nVar1613)] > 0;
+ assume nVar3712[func9(nVar1054)] > 0;
+ nVar4823 := nVar4607;
+ call {:si_unique_call 6280} nVar4871 := proc68(nVar1676, nVar4823);
+ call {:si_unique_call 4745} nVar4839 := proc69(8560);
+ nVar4834 := nVar4607;
+ call {:si_unique_call 6283} nVar4872 := proc70(nVar195, nVar4834);
+ call {:si_unique_call 4747} nVar4840 := proc71(8571);
+ nVar4825 := nVar4607;
+ call {:si_unique_call 6286} nVar4873 := proc72(nVar770, nVar4825);
+ call {:si_unique_call 4749} nVar4841 := proc73(8592);
+ nVar4836 := nVar4607;
+ call {:si_unique_call 6289} nVar4874 := proc74(nVar864, nVar4836);
+ call {:si_unique_call 4751} nVar4842 := proc75(8624);
+ nVar4837 := nVar4607;
+ call {:si_unique_call 6292} nVar4875 := proc76(nVar3096, nVar4837);
+ call {:si_unique_call 4753} nVar4843 := proc77(8640);
+ nVar4828 := nVar4607;
+ call {:si_unique_call 6295} nVar4876 := proc78(nVar1136, nVar4828);
+ call {:si_unique_call 4755} nVar4844 := proc79(8647);
+ nVar4819 := nVar4607;
+ call {:si_unique_call 6298} nVar4877 := proc80(nVar606, nVar4819);
+ call {:si_unique_call 4757} nVar4845 := proc81(8658);
+ nVar4831 := nVar4607;
+ call {:si_unique_call 6301} nVar4878 := proc82(nVar2935, nVar4831);
+ call {:si_unique_call 4759} nVar4846 := proc83(8661);
+ nVar4822 := nVar4607;
+ call {:si_unique_call 6304} nVar4879 := proc84(nVar403, nVar4822);
+ call {:si_unique_call 4761} nVar4847 := proc85(8691);
+ nVar4833 := nVar4607;
+ call {:si_unique_call 6307} nVar4880 := proc86(nVar3675, nVar4833);
+ call {:si_unique_call 4763} nVar4848 := proc87(8702);
+ nVar4824 := nVar4607;
+ call {:si_unique_call 6310} nVar4881 := proc88(nVar2648, nVar4824);
+ call {:si_unique_call 4765} nVar4849 := proc89(8719);
+ nVar4835 := nVar4607;
+ call {:si_unique_call 6313} nVar4882 := proc90(nVar1756, nVar4835);
+ call {:si_unique_call 4767} nVar4850 := proc91(8722);
+ nVar4826 := nVar4607;
+ call {:si_unique_call 6316} nVar4883 := proc92(nVar3521, nVar4826);
+ call {:si_unique_call 4769} nVar4851 := proc93(8725);
+ nVar4838 := nVar4607;
+ call {:si_unique_call 6319} nVar4884 := proc94(nVar1042, nVar4838);
+ call {:si_unique_call 4771} nVar4852 := proc95(8764);
+ call {:si_unique_call 4773} nVar4853 := proc96(nVar1042);
+ call {:si_unique_call 4775} nVar4854 := proc97(nVar3521);
+ call {:si_unique_call 4777} nVar4855 := proc98(nVar1756);
+ call {:si_unique_call 4779} nVar4856 := proc99(nVar2648);
+ call {:si_unique_call 4781} nVar4857 := proc100(nVar3675);
+ call {:si_unique_call 4783} nVar4858 := proc101(nVar403);
+ call {:si_unique_call 4785} nVar4859 := proc102(nVar2935);
+ call {:si_unique_call 4787} nVar4860 := proc103(nVar606);
+ call {:si_unique_call 4789} nVar4861 := proc104(nVar1136);
+ call {:si_unique_call 4791} nVar4862 := proc105(nVar3096);
+ call {:si_unique_call 4793} nVar4863 := proc106(nVar864);
+ call {:si_unique_call 4795} nVar4864 := proc107(nVar770);
+ call {:si_unique_call 4797} nVar4865 := proc108(nVar195);
+ call {:si_unique_call 4799} nVar4866 := proc109(nVar1676);
+ nVar4829 := nVar4606;
+ call {:si_unique_call 6322} nVar4885 := proc110(nVar223, nVar4829);
+ call {:si_unique_call 4801} nVar4867 := proc111(8877);
+ nVar4820 := nVar4606;
+ call {:si_unique_call 6325} nVar4886 := proc112(nVar3559, nVar4820);
+ call {:si_unique_call 4803} nVar4868 := proc113(8912);
+ call {:si_unique_call 4805} nVar4869 := proc114(nVar3559);
+ call {:si_unique_call 4807} nVar4870 := proc115(nVar223);
+ return;
+}
+
+
+
+procedure proc116() returns (nVar4910: int);
+ modifies nVar1, nVar3718, nVar3719;
+
+
+
+procedure proc117(nVar4897: int, nVar4898: int);
+ modifies nVar3718, nVar3719;
+
+
+
+procedure proc118(nVar4891: int, nVar4892: int);
+ modifies nVar3718;
+
+
+
+procedure proc119(nVar4888: int) returns (nVar4889: int);
+
+
+
+implementation proc119(nVar4888: int) returns (nVar4889: int)
+{
+ var nVar4890: int;
+
+ anon0__unique__1:
+ nVar4889 := nVar4890;
+ return;
+}
+
+
+
+implementation proc118(nVar4891: int, nVar4892: int)
+{
+ var nVar4893: int;
+ var nVar4894: int;
+ var nVar4895: int;
+ var nVar4896: int;
+
+ anon0__unique__1:
+ nVar4894 := nVar4891;
+ nVar4895 := nVar4892;
+ assume nVar4894 > 0;
+ nVar3718[func29(nVar4894)] := nVar4895;
+ assume nVar4894 > 0;
+ nVar4893 := nVar3718[func29(nVar4894)];
+ call {:si_unique_call 6334} nVar4896 := proc119(nVar4893);
+ return;
+}
+
+
+
+implementation proc117(nVar4897: int, nVar4898: int)
+{
+ var nVar4899: int;
+ var nVar4900: int;
+
+ anon0__unique__1:
+ nVar4899 := nVar4897;
+ nVar4900 := nVar4898;
+ assume nVar4899 > 0;
+ call {:si_unique_call 9} proc118(func31(nVar4899), nVar4900);
+ assume nVar4899 > 0;
+ nVar3719[func30(nVar4899)] := 1;
+ return;
+}
+
+
+
+procedure proc120(nVar4908: int);
+
+
+
+procedure proc121(nVar4904: int);
+
+
+
+procedure proc122(nVar4901: int) returns (nVar4902: int);
+
+
+
+implementation proc122(nVar4901: int) returns (nVar4902: int)
+{
+ var nVar4903: int;
+
+ anon0__unique__1:
+ nVar4902 := nVar4903;
+ return;
+}
+
+
+
+implementation proc121(nVar4904: int)
+{
+ var nVar4905: int;
+ var nVar4906: int;
+ var nVar4907: int;
+
+ anon0__unique__1:
+ nVar4906 := nVar4904;
+ assume nVar4906 > 0;
+ nVar4905 := nVar3718[func29(nVar4906)];
+ call {:si_unique_call 6} nVar4907 := proc122(nVar4905);
+ return;
+}
+
+
+
+implementation proc120(nVar4908: int)
+{
+ var nVar4909: int;
+
+ anon0__unique__1:
+ nVar4909 := nVar4908;
+ assume nVar4909 > 0;
+ call {:si_unique_call 6339} proc121(func31(nVar4909));
+ return;
+}
+
+
+
+implementation proc116() returns (nVar4910: int)
+{
+ var nVar4911: int;
+ var nVar4912: int;
+ var nVar4913: int;
+ var nVar4914: int;
+ var nVar4915: int;
+
+ anon0__unique__1:
+ call {:si_unique_call 4730} nVar4912 := proc130(4);
+ call {:si_unique_call 4731} nVar4914 := proc130(16);
+ nVar4913 := 0;
+ assume nVar4914 > 0;
+ call {:si_unique_call 4741} proc117(nVar4914, nVar1042);
+ goto L9__unique__2;
+
+ L9__unique__2:
+ goto anon5_Then__unique__3;
+
+ anon5_Then__unique__3:
+ assume nVar4914 > 0;
+ assume nVar3719[func30(nVar4914)] == 0;
+ call {:si_unique_call 4734} proc120(nVar4914);
+ nVar4910 := nVar4913;
+ return;
+}
+
+
+
+procedure proc123(nVar4916: int, nVar4917: int);
+ modifies nVar3720;
+
+
+
+implementation proc123(nVar4916: int, nVar4917: int)
+{
+ var nVar4918: int;
+ var nVar4919: int;
+ var nVar4920: int;
+ var nVar4921: int;
+
+ anon0__unique__1:
+ nVar4919 := nVar4916;
+ nVar4920 := nVar4917;
+ assume nVar4919 > 0;
+ nVar3720[func32(nVar4919)] := nVar4920;
+ goto anon3_Then__unique__2;
+
+ anon3_Then__unique__2:
+ assume nVar4919 > 0;
+ assume nVar3720[func32(nVar4919)] == 0;
+ goto L1__unique__3;
+
+ L1__unique__3:
+ return;
+}
+
+
+
+procedure proc124(nVar4922: int) returns (nVar4923: int);
+
+
+
+implementation proc124(nVar4922: int) returns (nVar4923: int)
+{
+ var nVar4924: int;
+
+ anon0__unique__1:
+ nVar4924 := nVar4922;
+ assume nVar4924 > 0;
+ nVar4923 := nVar3720[func32(nVar4924)];
+ return;
+}
+
+
+
+procedure proc125(nVar4925: int) returns (nVar4926: int);
+
+
+
+implementation proc125(nVar4925: int) returns (nVar4926: int)
+{
+ var nVar4927: int;
+
+ anon0__unique__1:
+ nVar4926 := nVar4927;
+ return;
+}
+
+
+
+procedure proc126();
+ modifies nVar3711;
+
+
+
+procedure proc127(nVar4931: int);
+ modifies nVar3711;
+
+
+
+procedure proc128(nVar4929: int);
+ modifies nVar3711;
+
+
+
+procedure proc129(nVar4928: int);
+ modifies nVar3711;
+
+
+
+implementation proc129(nVar4928: int)
+{
+
+ anon0__unique__1:
+ nVar3711 := 1;
+ return;
+}
+
+
+
+implementation proc128(nVar4929: int)
+{
+ var nVar4930: int;
+
+ anon0__unique__1:
+ nVar4930 := nVar4929;
+ call {:si_unique_call 6374} proc129(nVar4614);
+ return;
+}
+
+
+
+implementation proc127(nVar4931: int)
+{
+ var nVar4932: int;
+
+ anon0__unique__1:
+ nVar4932 := nVar4931;
+ call {:si_unique_call 6370} proc128(nVar4932);
+ goto anon3_Then__unique__2;
+
+ anon3_Then__unique__2:
+ assume nVar3711 == 1;
+ goto LM2__unique__3;
+
+ LM2__unique__3:
+ return;
+}
+
+
+
+implementation proc126()
+{
+
+ anon0__unique__1:
+ call {:si_unique_call 6336} proc127(nVar4632);
+ goto anon3_Then__unique__2;
+
+ anon3_Then__unique__2:
+ assume nVar3711 == 1;
+ goto LM2__unique__3;
+
+ LM2__unique__3:
+ return;
+}
+
+
+
+implementation proc64() returns (nVar4933: int, nVar4934: bool)
+{
+ var nVar4935: int;
+ var nVar4936: int;
+ var nVar4937: int;
+ var nVar4938: int;
+ var nVar4939: int;
+ var nVar4940: int;
+ var nVar4941: int;
+ var nVar4942: int;
+ var nVar4943: int;
+ var nVar4944: int;
+ var nVar4945: int;
+ var nVar4946: int;
+ var nVar4947: int;
+ var nVar4948: int;
+ var nVar4949: int;
+ var nVar4950: int;
+ var nVar4951: int;
+ var nVar4952: int;
+ var nVar4953: int;
+ var nVar4954: int;
+ var nVar4955: int;
+ var nVar4956: int;
+ var nVar4957: int;
+ var nVar4958: int;
+ var nVar4959: int;
+ var nVar4960: int;
+ var nVar4961: int;
+ var nVar4962: int;
+ var nVar4963: int;
+ var nVar4964: int;
+ var nVar4965: int;
+ var nVar4966: int;
+ var nVar4967: int;
+ var nVar4968: int;
+ var nVar4969: int;
+ var nVar4970: int;
+ var nVar4971: int;
+ var nVar4972: int;
+ var nVar4973: int;
+ var nVar4974: int;
+ var nVar4975: int;
+ var nVar4976: int;
+ var nVar4977: int;
+ var nVar4978: int;
+ var nVar4979: int;
+ var nVar4980: int;
+ var nVar4981: int;
+ var nVar4982: int;
+ var nVar4983: int;
+ var nVar4984: int;
+ var nVar4985: int;
+ var nVar4986: int;
+ var nVar4987: int;
+ var nVar4988: int;
+ var nVar4989: int;
+ var nVar4990: int;
+ var nVar4991: int;
+ var nVar4992: int;
+ var nVar4993: int;
+ var nVar4994: int;
+ var nVar4995: int;
+ var nVar4996: int;
+ var nVar4997: int;
+ var nVar4998: int;
+ var nVar4999: int;
+ var nVar5000: int;
+ var nVar5001: int;
+ var nVar5002: int;
+ var nVar5003: int;
+ var nVar5004: int;
+ var nVar5005: int;
+ var nVar5006: int;
+ var nVar5007: int;
+ var nVar5008: int;
+ var nVar5009: int;
+ var nVar5010: int;
+ var nVar5011: int;
+ var nVar5012: int;
+ var nVar5013: int;
+ var nVar5014: int;
+ var nVar5015: int;
+ var nVar5016: int;
+ var nVar5017: int;
+ var nVar5018: int;
+ var nVar5019: int;
+ var nVar5020: int;
+ var nVar5021: int;
+ var nVar5022: int;
+ var nVar5023: int;
+ var nVar5024: int;
+ var nVar5025: int;
+ var nVar5026: int;
+ var nVar5027: int;
+ var nVar5028: int;
+ var nVar5029: int;
+ var nVar5030: int;
+ var nVar5031: int;
+ var nVar5032: int;
+ var nVar5033: int;
+ var nVar5034: int;
+ var nVar5035: int;
+ var nVar5036: int;
+ var nVar5037: int;
+ var nVar5038: int;
+ var nVar5039: int;
+ var nVar5040: int;
+ var nVar5041: int;
+ var nVar5042: int;
+ var nVar5043: int;
+ var nVar5044: int;
+ var nVar5045: int;
+ var nVar5046: int;
+ var nVar5047: int;
+ var nVar5048: int;
+ var nVar5049: int;
+ var nVar5050: int;
+ var nVar5051: int;
+ var nVar5052: int;
+ var nVar5053: int;
+ var nVar5054: int;
+ var nVar5055: int;
+ var nVar5056: int;
+ var nVar5057: int;
+ var nVar5058: int;
+ var nVar5059: int;
+ var nVar5060: int;
+ var nVar5061: int;
+ var nVar5062: int;
+ var nVar5063: int;
+ var nVar5064: int;
+ var nVar5065: int;
+ var nVar5066: int;
+ var nVar5067: int;
+ var nVar5068: int;
+ var nVar5069: int;
+ var nVar5070: int;
+ var nVar5071: int;
+ var nVar5072: int;
+ var nVar5073: int;
+ var nVar5074: int;
+ var nVar5075: int;
+ var nVar5076: int;
+ var nVar5077: int;
+ var nVar5078: int;
+ var nVar5079: int;
+ var nVar5080: int;
+ var nVar5081: int;
+ var nVar5082: int;
+ var nVar5083: int;
+ var nVar5084: int;
+ var nVar5085: int;
+ var nVar5086: int;
+ var nVar5087: int;
+ var nVar5088: int;
+ var nVar5089: int;
+ var nVar5090: int;
+ var nVar5091: int;
+ var nVar5092: int;
+ var nVar5093: int;
+ var nVar5094: int;
+ var nVar5095: int;
+ var nVar5096: int;
+ var nVar5097: int;
+ var nVar5098: int;
+ var nVar5099: int;
+ var nVar5100: int;
+ var nVar5101: int;
+ var nVar5102: int;
+ var nVar5103: int;
+ var nVar5104: int;
+ var nVar5105: int;
+ var nVar5106: int;
+ var nVar5107: int;
+ var nVar5108: int;
+ var nVar5109: int;
+ var nVar5110: int;
+ var nVar5111: int;
+ var nVar5112: int;
+ var nVar5113: int;
+ var nVar5114: int;
+ var nVar5115: int;
+ var nVar5116: int;
+ var nVar5117: int;
+ var nVar5118: int;
+ var nVar5119: int;
+ var nVar5120: int;
+ var nVar5121: int;
+ var nVar5122: int;
+ var nVar5123: int;
+ var nVar5124: int;
+ var nVar5125: int;
+ var nVar5126: int;
+ var nVar5127: int;
+ var nVar5128: int;
+ var nVar5129: int;
+ var nVar5130: int;
+ var nVar5131: int;
+ var nVar5132: int;
+ var nVar5133: int;
+ var nVar5134: int;
+ var nVar5135: int;
+ var nVar5136: int;
+ var nVar5137: int;
+ var nVar5138: int;
+ var nVar5139: int;
+ var nVar5140: int;
+ var nVar5141: int;
+ var nVar5142: int;
+ var nVar5143: int;
+ var nVar5144: int;
+ var nVar5145: int;
+ var nVar5146: int;
+ var nVar5147: int;
+ var nVar5148: int;
+ var nVar5149: int;
+ var nVar5150: int;
+ var nVar5151: int;
+ var nVar5152: int;
+ var nVar5153: int;
+ var nVar5154: int;
+ var nVar5155: int;
+ var nVar5156: int;
+ var nVar5157: int;
+ var nVar5158: int;
+ var nVar5159: int;
+ var nVar5160: int;
+ var nVar5161: int;
+ var nVar5162: int;
+ var nVar5163: int;
+ var nVar5164: int;
+ var nVar5165: int;
+ var nVar5166: int;
+ var nVar5167: int;
+ var nVar5168: int;
+ var nVar5169: int;
+ var nVar5170: int;
+ var nVar5171: int;
+ var nVar5172: int;
+ var nVar5173: int;
+ var nVar5174: int;
+ var nVar5175: int;
+ var nVar5176: int;
+ var nVar5177: int;
+ var nVar5178: int;
+ var nVar5179: int;
+ var nVar5180: int;
+ var nVar5181: int;
+ var nVar5182: int;
+ var nVar5183: int;
+ var nVar5184: int;
+ var nVar5185: int;
+ var nVar5186: int;
+ var nVar5187: int;
+ var nVar5188: int;
+ var nVar5189: int;
+ var nVar5190: int;
+ var nVar5191: int;
+ var nVar5192: int;
+ var nVar5193: int;
+ var nVar5194: int;
+ var nVar5195: int;
+ var nVar5196: int;
+ var nVar5197: int;
+ var nVar5198: int;
+ var nVar5199: int;
+ var nVar5200: int;
+ var nVar5201: int;
+ var nVar5202: int;
+ var nVar5203: int;
+ var nVar5204: int;
+ var nVar5205: int;
+ var nVar5206: int;
+ var nVar5207: int;
+ var nVar5208: int;
+ var nVar5209: int;
+ var nVar5210: int;
+ var nVar5211: int;
+ var nVar5212: int;
+ var nVar5213: int;
+ var nVar5214: int;
+ var nVar5215: int;
+ var nVar5216: int;
+ var nVar5217: int;
+ var nVar5218: int;
+ var nVar5219: int;
+ var nVar5220: int;
+ var nVar5221: int;
+ var nVar5222: int;
+ var nVar5223: int;
+ var nVar5224: int;
+ var nVar5225: int;
+ var nVar5226: int;
+ var nVar5227: int;
+ var nVar5228: int;
+ var nVar5229: int;
+ var nVar5230: int;
+ var nVar5231: int;
+ var nVar5232: int;
+ var nVar5233: int;
+ var nVar5234: int;
+ var nVar5235: int;
+ var nVar5236: int;
+ var nVar5237: int;
+ var nVar5238: int;
+ var nVar5239: int;
+ var nVar5240: int;
+ var nVar5241: int;
+ var nVar5242: int;
+ var nVar5243: int;
+ var nVar5244: int;
+ var nVar5245: int;
+ var nVar5246: int;
+ var nVar5247: int;
+ var nVar5248: int;
+ var nVar5249: int;
+ var nVar5250: int;
+ var nVar5251: int;
+ var nVar5252: int;
+ var nVar5253: int;
+ var nVar5254: int;
+ var nVar5255: int;
+ var nVar5256: int;
+ var nVar5257: int;
+ var nVar5258: int;
+ var nVar5259: int;
+ var nVar5260: int;
+ var nVar5261: int;
+ var nVar5262: int;
+ var nVar5263: int;
+ var nVar5264: int;
+ var nVar5265: int;
+ var nVar5266: int;
+ var nVar5267: int;
+ var nVar5268: int;
+ var nVar5269: int;
+ var nVar5270: int;
+ var nVar5271: int;
+ var nVar5272: int;
+ var nVar5273: int;
+ var nVar5274: int;
+ var nVar5275: int;
+ var nVar5276: int;
+ var nVar5277: int;
+ var nVar5278: int;
+ var nVar5279: int;
+ var nVar5280: int;
+ var nVar5281: int;
+ var nVar5282: int;
+ var nVar5283: int;
+ var nVar5284: int;
+ var nVar5285: int;
+ var nVar5286: int;
+ var nVar5287: int;
+ var nVar5288: int;
+ var nVar5289: int;
+ var nVar5290: int;
+ var nVar5291: int;
+ var nVar5292: int;
+ var nVar5293: int;
+ var nVar5294: int;
+ var nVar5295: int;
+ var nVar5296: int;
+ var nVar5297: int;
+ var nVar5298: int;
+ var nVar5299: int;
+ var nVar5300: int;
+ var nVar5301: int;
+ var nVar5302: int;
+ var nVar5303: int;
+ var nVar5304: int;
+ var nVar5305: int;
+ var nVar5306: int;
+ var nVar5307: int;
+ var nVar5308: int;
+ var nVar5309: int;
+ var nVar5310: int;
+ var nVar5311: int;
+ var nVar5312: int;
+ var nVar5313: int;
+ var nVar5314: int;
+ var nVar5315: int;
+ var nVar5316: int;
+ var nVar5317: int;
+ var nVar5318: int;
+ var nVar5319: int;
+ var nVar5320: int;
+ var nVar5321: int;
+ var nVar5322: int;
+ var nVar5323: int;
+ var nVar5324: int;
+ var nVar5325: int;
+ var nVar5326: int;
+ var nVar5327: int;
+ var nVar5328: int;
+ var nVar5329: int;
+ var nVar5330: int;
+ var nVar5331: int;
+ var nVar5332: int;
+ var nVar5333: int;
+ var nVar5334: int;
+ var nVar5335: int;
+ var nVar5336: int;
+ var nVar5337: int;
+ var nVar5338: int;
+ var nVar5339: int;
+ var nVar5340: int;
+ var nVar5341: int;
+ var nVar5342: int;
+ var nVar5343: int;
+ var nVar5344: int;
+ var nVar5345: int;
+ var nVar5346: int;
+ var nVar5347: int;
+ var nVar5348: int;
+ var nVar5349: int;
+ var nVar5350: int;
+ var nVar5351: int;
+ var nVar5352: int;
+ var nVar5353: int;
+ var nVar5354: int;
+ var nVar5355: int;
+ var nVar5356: int;
+ var nVar5357: int;
+ var nVar5358: int;
+ var nVar5359: int;
+ var nVar5360: int;
+ var nVar5361: int;
+ var nVar5362: int;
+ var nVar5363: int;
+ var nVar5364: int;
+ var nVar5365: int;
+ var nVar5366: int;
+ var nVar5367: int;
+ var nVar5368: int;
+ var nVar5369: int;
+ var nVar5370: int;
+ var nVar5371: int;
+ var nVar5372: int;
+ var nVar5373: int;
+ var nVar5374: int;
+ var nVar5375: int;
+ var nVar5376: int;
+ var nVar5377: int;
+ var nVar5378: int;
+ var nVar5379: int;
+ var nVar5380: int;
+ var nVar5381: int;
+ var nVar5382: int;
+ var nVar5383: int;
+ var nVar5384: int;
+ var nVar5385: int;
+ var nVar5386: int;
+ var nVar5387: int;
+ var nVar5388: int;
+ var nVar5389: int;
+ var nVar5390: int;
+ var nVar5391: int;
+ var nVar5392: int;
+ var nVar5393: int;
+ var nVar5394: int;
+ var nVar5395: int;
+ var nVar5396: int;
+ var nVar5397: int;
+ var nVar5398: int;
+ var nVar5399: int;
+ var nVar5400: int;
+ var nVar5401: int;
+ var nVar5402: int;
+ var nVar5403: int;
+ var nVar5404: int;
+ var nVar5405: int;
+ var nVar5406: int;
+ var nVar5407: int;
+ var nVar5408: int;
+ var nVar5409: int;
+ var nVar5410: int;
+ var nVar5411: int;
+ var nVar5412: int;
+ var nVar5413: int;
+ var nVar5414: int;
+ var nVar5415: int;
+ var nVar5416: int;
+ var nVar5417: int;
+ var nVar5418: int;
+ var nVar5419: int;
+ var nVar5420: int;
+ var nVar5421: int;
+ var nVar5422: int;
+ var nVar5423: int;
+ var nVar5424: int;
+ var nVar5425: int;
+ var nVar5426: int;
+ var nVar5427: int;
+ var nVar5428: int;
+ var nVar5429: int;
+ var nVar5430: int;
+ var nVar5431: int;
+ var nVar5432: int;
+ var nVar5433: int;
+ var nVar5434: int;
+ var nVar5435: int;
+ var nVar5436: int;
+ var nVar5437: int;
+ var nVar5438: int;
+ var nVar5439: int;
+ var nVar5440: int;
+ var nVar5441: int;
+ var nVar5442: int;
+ var nVar5443: int;
+ var nVar5444: int;
+ var nVar5445: int;
+ var nVar5446: int;
+ var nVar5447: int;
+ var nVar5448: int;
+ var nVar5449: int;
+ var nVar5450: int;
+ var nVar5451: int;
+ var nVar5452: int;
+ var nVar5453: int;
+ var nVar5454: int;
+ var nVar5455: int;
+ var nVar5456: int;
+ var nVar5457: int;
+ var nVar5458: int;
+ var nVar5459: int;
+ var nVar5460: int;
+ var nVar5461: int;
+ var nVar5462: int;
+ var nVar5463: int;
+ var nVar5464: int;
+ var nVar5465: int;
+ var nVar5466: int;
+ var nVar5467: int;
+ var nVar5468: int;
+ var nVar5469: int;
+ var nVar5470: int;
+ var nVar5471: int;
+ var nVar5472: int;
+ var nVar5473: int;
+ var nVar5474: int;
+ var nVar5475: int;
+ var nVar5476: int;
+ var nVar5477: int;
+ var nVar5478: int;
+ var nVar5479: int;
+ var nVar5480: int;
+ var nVar5481: int;
+ var nVar5482: int;
+ var nVar5483: int;
+ var nVar5484: int;
+ var nVar5485: int;
+ var nVar5486: int;
+ var nVar5487: int;
+ var nVar5488: int;
+ var nVar5489: int;
+ var nVar5490: int;
+ var nVar5491: int;
+ var nVar5492: int;
+ var nVar5493: int;
+ var nVar5494: int;
+ var nVar5495: int;
+ var nVar5496: int;
+ var nVar5497: int;
+ var nVar5498: int;
+ var nVar5499: int;
+ var nVar5500: int;
+ var nVar5501: int;
+ var nVar5502: int;
+ var nVar5503: int;
+ var nVar5504: int;
+ var nVar5505: int;
+ var nVar5506: int;
+ var nVar5507: int;
+ var nVar5508: int;
+ var nVar5509: int;
+ var nVar5510: int;
+ var nVar5511: int;
+ var nVar5512: int;
+ var nVar5513: int;
+ var nVar5514: int;
+ var nVar5515: int;
+ var nVar5516: int;
+ var nVar5517: int;
+ var nVar5518: int;
+ var nVar5519: int;
+ var nVar5520: int;
+ var nVar5521: int;
+ var nVar5522: int;
+ var nVar5523: int;
+ var nVar5524: int;
+ var nVar5525: int;
+ var nVar5526: int;
+ var nVar5527: int;
+ var nVar5528: int;
+ var nVar5529: int;
+ var nVar5530: int;
+ var nVar5531: int;
+ var nVar5532: int;
+ var nVar5533: int;
+ var nVar5534: int;
+ var nVar5535: int;
+ var nVar5536: int;
+ var nVar5537: int;
+ var nVar5538: int;
+ var nVar5539: int;
+ var nVar5540: int;
+ var nVar5541: int;
+ var nVar5542: int;
+ var nVar5543: int;
+ var nVar5544: int;
+ var nVar5545: int;
+ var nVar5546: int;
+ var nVar5547: int;
+ var nVar5548: int;
+ var nVar5549: int;
+ var nVar5550: int;
+ var nVar5551: int;
+ var nVar5552: int;
+ var nVar5553: int;
+ var nVar5554: int;
+ var nVar5555: int;
+ var nVar5556: int;
+ var nVar5557: int;
+ var nVar5558: int;
+ var nVar5559: int;
+ var nVar5560: int;
+ var nVar5561: int;
+ var nVar5562: int;
+ var nVar5563: int;
+ var nVar5564: int;
+ var nVar5565: int;
+ var nVar5566: int;
+ var nVar5567: int;
+ var nVar5568: int;
+ var nVar5569: int;
+ var nVar5570: int;
+ var nVar5571: int;
+ var nVar5572: int;
+ var nVar5573: int;
+ var nVar5574: int;
+ var nVar5575: int;
+ var nVar5576: int;
+ var nVar5577: int;
+ var nVar5578: int;
+ var nVar5579: int;
+ var nVar5580: int;
+ var nVar5581: int;
+ var nVar5582: int;
+ var nVar5583: int;
+ var nVar5584: int;
+ var nVar5585: int;
+ var nVar5586: int;
+ var nVar5587: int;
+ var nVar5588: int;
+ var nVar5589: int;
+ var nVar5590: int;
+ var nVar5591: int;
+ var nVar5592: int;
+ var nVar5593: int;
+ var nVar5594: int;
+ var nVar5595: int;
+ var nVar5596: int;
+ var nVar5597: int;
+ var nVar5598: int;
+ var nVar5599: int;
+ var nVar5600: int;
+ var nVar5601: int;
+ var nVar5602: int;
+ var nVar5603: int;
+ var nVar5604: int;
+ var nVar5605: int;
+ var nVar5606: int;
+ var nVar5607: int;
+ var nVar5608: int;
+ var nVar5609: int;
+ var nVar5610: int;
+ var nVar5611: int;
+ var nVar5612: int;
+ var nVar5613: int;
+ var nVar5614: int;
+ var nVar5615: int;
+ var nVar5616: int;
+ var nVar5617: int;
+ var nVar5618: int;
+ var nVar5619: int;
+ var nVar5620: int;
+ var nVar5621: int;
+ var nVar5622: int;
+ var nVar5623: int;
+ var nVar5624: int;
+ var nVar5625: int;
+ var nVar5626: int;
+ var nVar5627: int;
+ var nVar5628: int;
+ var nVar5629: int;
+ var nVar5630: int;
+ var nVar5631: int;
+ var nVar5632: int;
+ var nVar5633: int;
+ var nVar5634: int;
+ var nVar5635: int;
+ var nVar5636: int;
+ var nVar5637: int;
+ var nVar5638: int;
+ var nVar5639: int;
+ var nVar5640: int;
+ var nVar5641: int;
+ var nVar5642: int;
+ var nVar5643: int;
+ var nVar5644: int;
+ var nVar5645: int;
+ var nVar5646: int;
+ var nVar5647: int;
+ var nVar5648: int;
+ var nVar5649: int;
+ var nVar5650: int;
+ var nVar5651: int;
+ var nVar5652: int;
+ var nVar5653: int;
+ var nVar5654: int;
+ var nVar5655: int;
+ var nVar5656: int;
+ var nVar5657: int;
+ var nVar5658: int;
+ var nVar5659: int;
+ var nVar5660: int;
+ var nVar5661: int;
+ var nVar5662: int;
+ var nVar5663: int;
+ var nVar5664: int;
+ var nVar5665: int;
+ var nVar5666: int;
+ var nVar5667: int;
+ var nVar5668: int;
+ var nVar5669: int;
+ var nVar5670: int;
+ var nVar5671: int;
+ var nVar5672: int;
+ var nVar5673: int;
+ var nVar5674: int;
+ var nVar5675: int;
+ var nVar5676: int;
+ var nVar5677: int;
+ var nVar5678: int;
+ var nVar5679: int;
+ var nVar5680: int;
+ var nVar5681: int;
+ var nVar5682: int;
+ var nVar5683: int;
+ var nVar5684: int;
+ var nVar5685: int;
+ var nVar5686: int;
+ var nVar5687: int;
+ var nVar5688: int;
+ var nVar5689: int;
+ var nVar5690: int;
+ var nVar5691: int;
+ var nVar5692: int;
+ var nVar5693: int;
+ var nVar5694: int;
+ var nVar5695: int;
+ var nVar5696: int;
+ var nVar5697: int;
+ var nVar5698: int;
+ var nVar5699: int;
+ var nVar5700: int;
+ var nVar5701: int;
+ var nVar5702: int;
+ var nVar5703: int;
+ var nVar5704: int;
+ var nVar5705: int;
+ var nVar5706: int;
+ var nVar5707: int;
+ var nVar5708: int;
+ var nVar5709: int;
+ var nVar5710: int;
+ var nVar5711: int;
+ var nVar5712: int;
+ var nVar5713: int;
+ var nVar5714: int;
+ var nVar5715: int;
+ var nVar5716: int;
+ var nVar5717: int;
+ var nVar5718: int;
+ var nVar5719: int;
+ var nVar5720: int;
+ var nVar5721: int;
+ var nVar5722: int;
+ var nVar5723: int;
+ var nVar5724: int;
+ var nVar5725: int;
+ var nVar5726: int;
+ var nVar5727: int;
+ var nVar5728: int;
+ var nVar5729: int;
+ var nVar5730: int;
+ var nVar5731: int;
+ var nVar5732: int;
+ var nVar5733: int;
+ var nVar5734: int;
+ var nVar5735: int;
+ var nVar5736: int;
+ var nVar5737: int;
+ var nVar5738: int;
+ var nVar5739: int;
+ var nVar5740: int;
+ var nVar5741: int;
+ var nVar5742: int;
+ var nVar5743: int;
+ var nVar5744: int;
+ var nVar5745: int;
+ var nVar5746: int;
+ var nVar5747: int;
+ var nVar5748: int;
+ var nVar5749: int;
+ var nVar5750: int;
+ var nVar5751: int;
+ var nVar5752: int;
+ var nVar5753: int;
+ var nVar5754: int;
+ var nVar5755: int;
+ var nVar5756: int;
+ var nVar5757: int;
+ var nVar5758: int;
+ var nVar5759: int;
+ var nVar5760: int;
+ var nVar5761: int;
+ var nVar5762: int;
+ var nVar5763: int;
+ var nVar5764: int;
+ var nVar5765: int;
+ var nVar5766: int;
+ var nVar5767: int;
+ var nVar5768: int;
+ var nVar5769: int;
+ var nVar5770: int;
+ var nVar5771: int;
+ var nVar5772: int;
+ var nVar5773: int;
+ var nVar5774: int;
+ var nVar5775: int;
+ var nVar5776: int;
+ var nVar5777: int;
+ var nVar5778: int;
+ var nVar5779: int;
+ var nVar5780: int;
+ var nVar5781: int;
+ var nVar5782: int;
+ var nVar5783: int;
+ var nVar5784: int;
+ var nVar5785: int;
+ var nVar5786: int;
+ var nVar5787: int;
+ var nVar5788: int;
+ var nVar5789: int;
+ var nVar5790: int;
+ var nVar5791: int;
+ var nVar5792: int;
+ var nVar5793: int;
+ var nVar5794: int;
+ var nVar5795: int;
+
+ anon0__unique__1:
+ nVar4934 := true;
+ assume nVar1 > 0;
+ call {:si_unique_call 46} nVar2 := proc130(28);
+ call {:si_unique_call 47} nVar3 := proc130(12);
+ call {:si_unique_call 48} nVar4 := proc130(28);
+ call {:si_unique_call 49} nVar5 := proc130(24);
+ call {:si_unique_call 50} nVar6 := proc130(28);
+ call {:si_unique_call 51} nVar7 := proc130(4);
+ call {:si_unique_call 52} nVar8 := proc130(28);
+ call {:si_unique_call 53} nVar9 := proc130(16);
+ call {:si_unique_call 54} nVar10 := proc130(28);
+ call {:si_unique_call 55} nVar11 := proc130(28);
+ call {:si_unique_call 56} nVar12 := proc130(28);
+ call {:si_unique_call 57} nVar13 := proc130(28);
+ call {:si_unique_call 58} nVar14 := proc130(16);
+ call {:si_unique_call 59} nVar15 := proc130(28);
+ call {:si_unique_call 60} nVar16 := proc130(28);
+ call {:si_unique_call 61} nVar17 := proc130(28);
+ call {:si_unique_call 62} nVar18 := proc130(28);
+ call {:si_unique_call 63} nVar19 := proc130(28);
+ call {:si_unique_call 64} nVar20 := proc130(28);
+ call {:si_unique_call 65} nVar21 := proc130(28);
+ call {:si_unique_call 66} nVar22 := proc130(28);
+ call {:si_unique_call 67} nVar23 := proc130(28);
+ call {:si_unique_call 68} nVar24 := proc130(28);
+ call {:si_unique_call 69} nVar25 := proc130(28);
+ call {:si_unique_call 70} nVar26 := proc130(28);
+ call {:si_unique_call 71} nVar27 := proc130(28);
+ call {:si_unique_call 72} nVar28 := proc130(28);
+ call {:si_unique_call 73} nVar29 := proc130(28);
+ call {:si_unique_call 74} nVar30 := proc130(28);
+ call {:si_unique_call 75} nVar31 := proc130(28);
+ call {:si_unique_call 76} nVar32 := proc130(24);
+ call {:si_unique_call 77} nVar33 := proc130(28);
+ call {:si_unique_call 78} nVar34 := proc130(28);
+ call {:si_unique_call 79} nVar35 := proc130(28);
+ call {:si_unique_call 80} nVar36 := proc130(28);
+ call {:si_unique_call 81} nVar37 := proc130(28);
+ call {:si_unique_call 82} nVar38 := proc130(4);
+ call {:si_unique_call 83} nVar39 := proc130(28);
+ call {:si_unique_call 84} nVar40 := proc130(28);
+ call {:si_unique_call 85} nVar41 := proc130(28);
+ call {:si_unique_call 86} nVar42 := proc130(28);
+ call {:si_unique_call 87} nVar43 := proc130(28);
+ call {:si_unique_call 88} nVar44 := proc130(28);
+ call {:si_unique_call 89} nVar45 := proc130(24);
+ call {:si_unique_call 90} nVar46 := proc130(28);
+ call {:si_unique_call 91} nVar47 := proc130(28);
+ call {:si_unique_call 92} nVar48 := proc130(16);
+ call {:si_unique_call 93} nVar49 := proc130(28);
+ call {:si_unique_call 94} nVar50 := proc130(28);
+ call {:si_unique_call 95} nVar51 := proc130(28);
+ call {:si_unique_call 96} nVar52 := proc130(16);
+ call {:si_unique_call 97} nVar53 := proc130(28);
+ call {:si_unique_call 98} nVar54 := proc130(28);
+ call {:si_unique_call 99} nVar55 := proc130(28);
+ call {:si_unique_call 100} nVar56 := proc130(28);
+ call {:si_unique_call 101} nVar57 := proc130(28);
+ call {:si_unique_call 102} nVar58 := proc130(28);
+ call {:si_unique_call 103} nVar59 := proc130(16);
+ call {:si_unique_call 104} nVar60 := proc130(28);
+ call {:si_unique_call 105} nVar61 := proc130(12);
+ call {:si_unique_call 106} nVar62 := proc130(28);
+ call {:si_unique_call 107} nVar4940 := proc130(16);
+ call {:si_unique_call 108} nVar63 := proc130(28);
+ call {:si_unique_call 109} nVar64 := proc130(28);
+ call {:si_unique_call 110} nVar65 := proc130(28);
+ call {:si_unique_call 111} nVar66 := proc130(28);
+ call {:si_unique_call 112} nVar67 := proc130(28);
+ call {:si_unique_call 113} nVar68 := proc130(28);
+ call {:si_unique_call 114} nVar69 := proc130(28);
+ call {:si_unique_call 115} nVar70 := proc130(12);
+ call {:si_unique_call 116} nVar71 := proc130(28);
+ call {:si_unique_call 117} nVar72 := proc130(28);
+ call {:si_unique_call 118} nVar73 := proc130(28);
+ call {:si_unique_call 119} nVar74 := proc130(28);
+ call {:si_unique_call 120} nVar75 := proc130(28);
+ call {:si_unique_call 121} nVar76 := proc130(28);
+ call {:si_unique_call 122} nVar77 := proc130(16);
+ call {:si_unique_call 123} nVar78 := proc130(24);
+ call {:si_unique_call 124} nVar79 := proc130(28);
+ call {:si_unique_call 125} nVar80 := proc130(28);
+ call {:si_unique_call 126} nVar81 := proc130(28);
+ call {:si_unique_call 127} nVar82 := proc130(28);
+ call {:si_unique_call 128} nVar83 := proc130(28);
+ call {:si_unique_call 129} nVar84 := proc130(28);
+ call {:si_unique_call 130} nVar85 := proc130(28);
+ call {:si_unique_call 131} nVar86 := proc130(28);
+ call {:si_unique_call 132} nVar87 := proc130(28);
+ call {:si_unique_call 133} nVar88 := proc130(28);
+ call {:si_unique_call 134} nVar89 := proc130(28);
+ call {:si_unique_call 135} nVar90 := proc130(28);
+ call {:si_unique_call 136} nVar91 := proc130(28);
+ call {:si_unique_call 137} nVar92 := proc130(28);
+ call {:si_unique_call 138} nVar93 := proc130(28);
+ call {:si_unique_call 139} nVar94 := proc130(28);
+ call {:si_unique_call 140} nVar95 := proc130(28);
+ call {:si_unique_call 141} nVar96 := proc130(28);
+ call {:si_unique_call 142} nVar97 := proc130(28);
+ call {:si_unique_call 143} nVar98 := proc130(28);
+ call {:si_unique_call 144} nVar99 := proc130(16);
+ call {:si_unique_call 145} nVar100 := proc130(28);
+ call {:si_unique_call 146} nVar101 := proc130(28);
+ call {:si_unique_call 147} nVar102 := proc130(28);
+ call {:si_unique_call 148} nVar103 := proc130(28);
+ call {:si_unique_call 149} nVar104 := proc130(28);
+ call {:si_unique_call 150} nVar105 := proc130(16);
+ call {:si_unique_call 151} nVar106 := proc130(28);
+ call {:si_unique_call 152} nVar107 := proc130(28);
+ call {:si_unique_call 153} nVar108 := proc130(28);
+ call {:si_unique_call 154} nVar109 := proc130(28);
+ call {:si_unique_call 155} nVar110 := proc130(28);
+ call {:si_unique_call 156} nVar4941 := proc130(16);
+ call {:si_unique_call 157} nVar111 := proc130(28);
+ call {:si_unique_call 158} nVar112 := proc130(28);
+ call {:si_unique_call 159} nVar113 := proc130(28);
+ call {:si_unique_call 160} nVar114 := proc130(28);
+ call {:si_unique_call 161} nVar115 := proc130(28);
+ call {:si_unique_call 162} nVar116 := proc130(28);
+ call {:si_unique_call 163} nVar117 := proc130(28);
+ call {:si_unique_call 164} nVar118 := proc130(28);
+ call {:si_unique_call 165} nVar119 := proc130(28);
+ call {:si_unique_call 166} nVar120 := proc130(28);
+ call {:si_unique_call 167} nVar121 := proc130(28);
+ call {:si_unique_call 168} nVar122 := proc130(28);
+ call {:si_unique_call 169} nVar123 := proc130(28);
+ call {:si_unique_call 170} nVar124 := proc130(28);
+ call {:si_unique_call 171} nVar125 := proc130(28);
+ call {:si_unique_call 172} nVar126 := proc130(28);
+ call {:si_unique_call 173} nVar127 := proc130(28);
+ call {:si_unique_call 174} nVar128 := proc130(28);
+ call {:si_unique_call 175} nVar129 := proc130(28);
+ call {:si_unique_call 176} nVar130 := proc130(28);
+ call {:si_unique_call 177} nVar131 := proc130(12);
+ call {:si_unique_call 178} nVar132 := proc130(28);
+ call {:si_unique_call 179} nVar133 := proc130(28);
+ call {:si_unique_call 180} nVar134 := proc130(28);
+ call {:si_unique_call 181} nVar135 := proc130(28);
+ call {:si_unique_call 182} nVar136 := proc130(28);
+ call {:si_unique_call 183} nVar137 := proc130(28);
+ call {:si_unique_call 184} nVar138 := proc130(28);
+ call {:si_unique_call 185} nVar139 := proc130(16);
+ call {:si_unique_call 186} nVar140 := proc130(28);
+ call {:si_unique_call 187} nVar141 := proc130(28);
+ call {:si_unique_call 188} nVar142 := proc130(28);
+ call {:si_unique_call 189} nVar143 := proc130(28);
+ call {:si_unique_call 190} nVar144 := proc130(28);
+ call {:si_unique_call 191} nVar145 := proc130(28);
+ call {:si_unique_call 192} nVar146 := proc130(28);
+ call {:si_unique_call 193} nVar147 := proc130(28);
+ call {:si_unique_call 194} nVar148 := proc130(28);
+ call {:si_unique_call 195} nVar149 := proc130(28);
+ call {:si_unique_call 196} nVar150 := proc130(28);
+ call {:si_unique_call 197} nVar151 := proc130(28);
+ call {:si_unique_call 198} nVar152 := proc130(28);
+ call {:si_unique_call 199} nVar153 := proc130(28);
+ call {:si_unique_call 200} nVar154 := proc130(28);
+ call {:si_unique_call 201} nVar155 := proc130(28);
+ call {:si_unique_call 202} nVar156 := proc130(28);
+ call {:si_unique_call 203} nVar157 := proc130(28);
+ call {:si_unique_call 204} nVar158 := proc130(28);
+ call {:si_unique_call 205} nVar159 := proc130(28);
+ call {:si_unique_call 206} nVar160 := proc130(24);
+ call {:si_unique_call 207} nVar161 := proc130(28);
+ call {:si_unique_call 208} nVar162 := proc130(28);
+ call {:si_unique_call 209} nVar163 := proc130(28);
+ call {:si_unique_call 210} nVar164 := proc130(4);
+ call {:si_unique_call 211} nVar165 := proc130(16);
+ call {:si_unique_call 212} nVar166 := proc130(28);
+ call {:si_unique_call 213} nVar167 := proc130(28);
+ call {:si_unique_call 214} nVar168 := proc130(28);
+ call {:si_unique_call 215} nVar169 := proc130(12);
+ call {:si_unique_call 216} nVar170 := proc130(16);
+ call {:si_unique_call 217} nVar171 := proc130(28);
+ call {:si_unique_call 218} nVar172 := proc130(28);
+ call {:si_unique_call 219} nVar173 := proc130(28);
+ call {:si_unique_call 220} nVar174 := proc130(28);
+ call {:si_unique_call 221} nVar175 := proc130(12);
+ call {:si_unique_call 222} nVar176 := proc130(28);
+ call {:si_unique_call 223} nVar177 := proc130(28);
+ call {:si_unique_call 224} nVar178 := proc130(28);
+ call {:si_unique_call 225} nVar179 := proc130(28);
+ call {:si_unique_call 226} nVar180 := proc130(28);
+ call {:si_unique_call 227} nVar181 := proc130(28);
+ call {:si_unique_call 228} nVar182 := proc130(28);
+ call {:si_unique_call 229} nVar183 := proc130(28);
+ call {:si_unique_call 230} nVar184 := proc130(28);
+ call {:si_unique_call 231} nVar185 := proc130(28);
+ call {:si_unique_call 232} nVar186 := proc130(28);
+ call {:si_unique_call 233} nVar187 := proc130(12);
+ call {:si_unique_call 234} nVar188 := proc130(4);
+ call {:si_unique_call 235} nVar189 := proc130(28);
+ call {:si_unique_call 236} nVar190 := proc130(28);
+ call {:si_unique_call 237} nVar191 := proc130(16);
+ call {:si_unique_call 238} nVar192 := proc130(12);
+ call {:si_unique_call 239} nVar193 := proc130(28);
+ call {:si_unique_call 240} nVar194 := proc130(16);
+ call {:si_unique_call 241} nVar195 := proc130(56);
+ call {:si_unique_call 242} nVar196 := proc130(28);
+ call {:si_unique_call 243} nVar197 := proc130(28);
+ call {:si_unique_call 244} nVar198 := proc130(28);
+ call {:si_unique_call 245} nVar199 := proc130(28);
+ call {:si_unique_call 246} nVar200 := proc130(28);
+ call {:si_unique_call 247} nVar201 := proc130(28);
+ call {:si_unique_call 248} nVar202 := proc130(28);
+ call {:si_unique_call 249} nVar203 := proc130(28);
+ call {:si_unique_call 250} nVar204 := proc130(24);
+ call {:si_unique_call 251} nVar205 := proc130(28);
+ call {:si_unique_call 252} nVar206 := proc130(28);
+ call {:si_unique_call 253} nVar207 := proc130(16);
+ call {:si_unique_call 254} nVar208 := proc130(28);
+ call {:si_unique_call 255} nVar209 := proc130(28);
+ call {:si_unique_call 256} nVar210 := proc130(28);
+ call {:si_unique_call 257} nVar211 := proc130(28);
+ call {:si_unique_call 258} nVar212 := proc130(4);
+ call {:si_unique_call 259} nVar213 := proc130(28);
+ call {:si_unique_call 260} nVar214 := proc130(28);
+ call {:si_unique_call 261} nVar215 := proc130(12);
+ call {:si_unique_call 262} nVar4942 := proc130(20);
+ call {:si_unique_call 263} nVar216 := proc130(24);
+ call {:si_unique_call 264} nVar217 := proc130(16);
+ call {:si_unique_call 265} nVar218 := proc130(24);
+ call {:si_unique_call 266} nVar219 := proc130(28);
+ call {:si_unique_call 267} nVar220 := proc130(28);
+ call {:si_unique_call 268} nVar221 := proc130(24);
+ call {:si_unique_call 269} nVar222 := proc130(28);
+ call {:si_unique_call 270} nVar223 := proc130(56);
+ call {:si_unique_call 271} nVar224 := proc130(28);
+ call {:si_unique_call 272} nVar225 := proc130(28);
+ call {:si_unique_call 273} nVar226 := proc130(28);
+ call {:si_unique_call 274} nVar227 := proc130(12);
+ call {:si_unique_call 275} nVar228 := proc130(28);
+ call {:si_unique_call 276} nVar229 := proc130(28);
+ call {:si_unique_call 277} nVar230 := proc130(28);
+ call {:si_unique_call 278} nVar231 := proc130(28);
+ call {:si_unique_call 279} nVar232 := proc130(4);
+ call {:si_unique_call 280} nVar233 := proc130(4);
+ call {:si_unique_call 281} nVar234 := proc130(28);
+ call {:si_unique_call 282} nVar235 := proc130(4);
+ call {:si_unique_call 283} nVar236 := proc130(24);
+ call {:si_unique_call 284} nVar237 := proc130(4);
+ call {:si_unique_call 285} nVar238 := proc130(4);
+ call {:si_unique_call 286} nVar239 := proc130(28);
+ call {:si_unique_call 287} nVar240 := proc130(28);
+ call {:si_unique_call 288} nVar241 := proc130(28);
+ call {:si_unique_call 289} nVar242 := proc130(28);
+ call {:si_unique_call 290} nVar243 := proc130(28);
+ call {:si_unique_call 291} nVar244 := proc130(28);
+ call {:si_unique_call 292} nVar245 := proc130(28);
+ call {:si_unique_call 293} nVar246 := proc130(28);
+ call {:si_unique_call 294} nVar247 := proc130(28);
+ call {:si_unique_call 295} nVar248 := proc130(12);
+ call {:si_unique_call 296} nVar249 := proc130(28);
+ call {:si_unique_call 297} nVar250 := proc130(28);
+ call {:si_unique_call 298} nVar251 := proc130(28);
+ call {:si_unique_call 299} nVar252 := proc130(28);
+ call {:si_unique_call 300} nVar253 := proc130(28);
+ call {:si_unique_call 301} nVar254 := proc130(28);
+ call {:si_unique_call 302} nVar255 := proc130(28);
+ call {:si_unique_call 303} nVar256 := proc130(16);
+ call {:si_unique_call 304} nVar4943 := proc130(16);
+ call {:si_unique_call 305} nVar257 := proc130(28);
+ call {:si_unique_call 306} nVar258 := proc130(28);
+ call {:si_unique_call 307} nVar259 := proc130(28);
+ call {:si_unique_call 308} nVar260 := proc130(4);
+ call {:si_unique_call 309} nVar261 := proc130(28);
+ call {:si_unique_call 310} nVar262 := proc130(28);
+ call {:si_unique_call 311} nVar263 := proc130(16);
+ call {:si_unique_call 312} nVar264 := proc130(16);
+ call {:si_unique_call 313} nVar265 := proc130(28);
+ call {:si_unique_call 314} nVar266 := proc130(12);
+ call {:si_unique_call 315} nVar267 := proc130(28);
+ call {:si_unique_call 316} nVar268 := proc130(28);
+ call {:si_unique_call 317} nVar269 := proc130(28);
+ call {:si_unique_call 318} nVar270 := proc130(28);
+ call {:si_unique_call 319} nVar271 := proc130(12);
+ call {:si_unique_call 320} nVar272 := proc130(28);
+ call {:si_unique_call 321} nVar273 := proc130(28);
+ call {:si_unique_call 322} nVar274 := proc130(28);
+ call {:si_unique_call 323} nVar275 := proc130(28);
+ call {:si_unique_call 324} nVar276 := proc130(28);
+ call {:si_unique_call 325} nVar277 := proc130(28);
+ call {:si_unique_call 326} nVar278 := proc130(28);
+ call {:si_unique_call 327} nVar279 := proc130(28);
+ call {:si_unique_call 328} nVar281 := proc130(28);
+ call {:si_unique_call 329} nVar282 := proc130(28);
+ call {:si_unique_call 330} nVar283 := proc130(28);
+ call {:si_unique_call 331} nVar284 := proc130(28);
+ call {:si_unique_call 332} nVar285 := proc130(28);
+ call {:si_unique_call 333} nVar286 := proc130(28);
+ call {:si_unique_call 334} nVar287 := proc130(16);
+ call {:si_unique_call 335} nVar288 := proc130(28);
+ call {:si_unique_call 336} nVar289 := proc130(28);
+ call {:si_unique_call 337} nVar4944 := proc130(16);
+ call {:si_unique_call 338} nVar290 := proc130(28);
+ call {:si_unique_call 339} nVar291 := proc130(28);
+ call {:si_unique_call 340} nVar292 := proc130(28);
+ call {:si_unique_call 341} nVar293 := proc130(12);
+ call {:si_unique_call 342} nVar294 := proc130(28);
+ call {:si_unique_call 343} nVar295 := proc130(28);
+ call {:si_unique_call 344} nVar296 := proc130(28);
+ call {:si_unique_call 345} nVar297 := proc130(28);
+ call {:si_unique_call 346} nVar298 := proc130(28);
+ call {:si_unique_call 347} nVar299 := proc130(28);
+ call {:si_unique_call 348} nVar300 := proc130(16);
+ call {:si_unique_call 349} nVar301 := proc130(28);
+ call {:si_unique_call 350} nVar302 := proc130(28);
+ call {:si_unique_call 351} nVar303 := proc130(28);
+ call {:si_unique_call 352} nVar304 := proc130(4);
+ call {:si_unique_call 353} nVar305 := proc130(28);
+ call {:si_unique_call 354} nVar306 := proc130(28);
+ call {:si_unique_call 355} nVar307 := proc130(28);
+ call {:si_unique_call 356} nVar308 := proc130(28);
+ call {:si_unique_call 357} nVar309 := proc130(28);
+ call {:si_unique_call 358} nVar310 := proc130(28);
+ call {:si_unique_call 359} nVar311 := proc130(28);
+ call {:si_unique_call 360} nVar312 := proc130(16);
+ call {:si_unique_call 361} nVar313 := proc130(28);
+ call {:si_unique_call 362} nVar314 := proc130(12);
+ call {:si_unique_call 363} nVar315 := proc130(12);
+ call {:si_unique_call 364} nVar316 := proc130(28);
+ call {:si_unique_call 365} nVar317 := proc130(28);
+ call {:si_unique_call 366} nVar318 := proc130(28);
+ call {:si_unique_call 367} nVar319 := proc130(16);
+ call {:si_unique_call 368} nVar320 := proc130(28);
+ call {:si_unique_call 369} nVar321 := proc130(28);
+ call {:si_unique_call 370} nVar322 := proc130(28);
+ call {:si_unique_call 371} nVar323 := proc130(28);
+ call {:si_unique_call 372} nVar324 := proc130(28);
+ call {:si_unique_call 373} nVar325 := proc130(28);
+ call {:si_unique_call 374} nVar326 := proc130(16);
+ call {:si_unique_call 375} nVar327 := proc130(28);
+ call {:si_unique_call 376} nVar328 := proc130(28);
+ call {:si_unique_call 377} nVar329 := proc130(28);
+ call {:si_unique_call 378} nVar330 := proc130(16);
+ call {:si_unique_call 379} nVar331 := proc130(28);
+ call {:si_unique_call 380} nVar332 := proc130(28);
+ call {:si_unique_call 381} nVar333 := proc130(4);
+ call {:si_unique_call 382} nVar334 := proc130(28);
+ call {:si_unique_call 383} nVar335 := proc130(28);
+ call {:si_unique_call 384} nVar336 := proc130(28);
+ call {:si_unique_call 385} nVar337 := proc130(28);
+ call {:si_unique_call 386} nVar338 := proc130(28);
+ call {:si_unique_call 387} nVar339 := proc130(28);
+ call {:si_unique_call 388} nVar340 := proc130(28);
+ call {:si_unique_call 389} nVar341 := proc130(4);
+ call {:si_unique_call 390} nVar342 := proc130(28);
+ call {:si_unique_call 391} nVar343 := proc130(28);
+ call {:si_unique_call 392} nVar344 := proc130(28);
+ call {:si_unique_call 393} nVar345 := proc130(28);
+ call {:si_unique_call 394} nVar346 := proc130(28);
+ call {:si_unique_call 395} nVar348 := proc130(28);
+ call {:si_unique_call 396} nVar349 := proc130(28);
+ call {:si_unique_call 397} nVar350 := proc130(28);
+ call {:si_unique_call 398} nVar351 := proc130(28);
+ call {:si_unique_call 399} nVar352 := proc130(28);
+ call {:si_unique_call 400} nVar353 := proc130(16);
+ call {:si_unique_call 401} nVar354 := proc130(24);
+ call {:si_unique_call 402} nVar355 := proc130(28);
+ call {:si_unique_call 403} nVar356 := proc130(28);
+ call {:si_unique_call 404} nVar357 := proc130(28);
+ call {:si_unique_call 405} nVar358 := proc130(28);
+ call {:si_unique_call 406} nVar359 := proc130(16);
+ call {:si_unique_call 407} nVar360 := proc130(4);
+ call {:si_unique_call 408} nVar361 := proc130(28);
+ call {:si_unique_call 409} nVar362 := proc130(28);
+ call {:si_unique_call 410} nVar363 := proc130(28);
+ call {:si_unique_call 411} nVar364 := proc130(28);
+ call {:si_unique_call 412} nVar365 := proc130(28);
+ call {:si_unique_call 413} nVar366 := proc130(28);
+ call {:si_unique_call 414} nVar367 := proc130(8);
+ call {:si_unique_call 415} nVar368 := proc130(28);
+ call {:si_unique_call 416} nVar369 := proc130(28);
+ call {:si_unique_call 417} nVar370 := proc130(28);
+ call {:si_unique_call 418} nVar371 := proc130(16);
+ call {:si_unique_call 419} nVar372 := proc130(28);
+ call {:si_unique_call 420} nVar373 := proc130(28);
+ call {:si_unique_call 421} nVar374 := proc130(28);
+ call {:si_unique_call 422} nVar375 := proc130(28);
+ call {:si_unique_call 423} nVar376 := proc130(24);
+ call {:si_unique_call 424} nVar377 := proc130(28);
+ call {:si_unique_call 425} nVar378 := proc130(16);
+ call {:si_unique_call 426} nVar379 := proc130(28);
+ call {:si_unique_call 427} nVar380 := proc130(28);
+ call {:si_unique_call 428} nVar381 := proc130(28);
+ call {:si_unique_call 429} nVar382 := proc130(28);
+ call {:si_unique_call 430} nVar383 := proc130(28);
+ call {:si_unique_call 431} nVar384 := proc130(28);
+ call {:si_unique_call 432} nVar385 := proc130(16);
+ call {:si_unique_call 433} nVar386 := proc130(28);
+ call {:si_unique_call 434} nVar387 := proc130(28);
+ call {:si_unique_call 435} nVar388 := proc130(28);
+ call {:si_unique_call 436} nVar389 := proc130(28);
+ call {:si_unique_call 437} nVar4945 := proc130(16);
+ call {:si_unique_call 438} nVar390 := proc130(28);
+ call {:si_unique_call 439} nVar391 := proc130(28);
+ call {:si_unique_call 440} nVar392 := proc130(28);
+ call {:si_unique_call 441} nVar393 := proc130(28);
+ call {:si_unique_call 442} nVar394 := proc130(28);
+ call {:si_unique_call 443} nVar395 := proc130(28);
+ call {:si_unique_call 444} nVar396 := proc130(24);
+ call {:si_unique_call 445} nVar397 := proc130(28);
+ call {:si_unique_call 446} nVar398 := proc130(4);
+ call {:si_unique_call 447} nVar400 := proc130(28);
+ call {:si_unique_call 448} nVar401 := proc130(4);
+ call {:si_unique_call 449} nVar402 := proc130(16);
+ call {:si_unique_call 450} nVar403 := proc130(56);
+ call {:si_unique_call 451} nVar404 := proc130(24);
+ call {:si_unique_call 452} nVar405 := proc130(12);
+ call {:si_unique_call 453} nVar406 := proc130(28);
+ call {:si_unique_call 454} nVar407 := proc130(28);
+ call {:si_unique_call 455} nVar408 := proc130(28);
+ call {:si_unique_call 456} nVar409 := proc130(28);
+ call {:si_unique_call 457} nVar410 := proc130(28);
+ call {:si_unique_call 458} nVar411 := proc130(16);
+ call {:si_unique_call 459} nVar412 := proc130(16);
+ call {:si_unique_call 460} nVar413 := proc130(28);
+ call {:si_unique_call 461} nVar414 := proc130(28);
+ call {:si_unique_call 462} nVar415 := proc130(28);
+ call {:si_unique_call 463} nVar416 := proc130(28);
+ call {:si_unique_call 464} nVar417 := proc130(28);
+ call {:si_unique_call 465} nVar418 := proc130(28);
+ call {:si_unique_call 466} nVar419 := proc130(28);
+ call {:si_unique_call 467} nVar420 := proc130(12);
+ call {:si_unique_call 468} nVar421 := proc130(28);
+ call {:si_unique_call 469} nVar422 := proc130(28);
+ call {:si_unique_call 470} nVar423 := proc130(28);
+ call {:si_unique_call 471} nVar424 := proc130(28);
+ call {:si_unique_call 472} nVar425 := proc130(28);
+ call {:si_unique_call 473} nVar426 := proc130(4);
+ call {:si_unique_call 474} nVar427 := proc130(28);
+ call {:si_unique_call 475} nVar428 := proc130(28);
+ call {:si_unique_call 476} nVar429 := proc130(28);
+ call {:si_unique_call 477} nVar430 := proc130(4);
+ call {:si_unique_call 478} nVar431 := proc130(28);
+ call {:si_unique_call 479} nVar432 := proc130(28);
+ call {:si_unique_call 480} nVar433 := proc130(28);
+ call {:si_unique_call 481} nVar434 := proc130(28);
+ call {:si_unique_call 482} nVar435 := proc130(28);
+ call {:si_unique_call 483} nVar436 := proc130(28);
+ call {:si_unique_call 484} nVar437 := proc130(28);
+ call {:si_unique_call 485} nVar438 := proc130(28);
+ call {:si_unique_call 486} nVar439 := proc130(28);
+ call {:si_unique_call 487} nVar440 := proc130(28);
+ call {:si_unique_call 488} nVar441 := proc130(28);
+ call {:si_unique_call 489} nVar442 := proc130(24);
+ call {:si_unique_call 490} nVar443 := proc130(28);
+ call {:si_unique_call 491} nVar444 := proc130(28);
+ call {:si_unique_call 492} nVar445 := proc130(28);
+ call {:si_unique_call 493} nVar446 := proc130(16);
+ call {:si_unique_call 494} nVar447 := proc130(24);
+ call {:si_unique_call 495} nVar448 := proc130(28);
+ call {:si_unique_call 496} nVar449 := proc130(28);
+ call {:si_unique_call 497} nVar450 := proc130(28);
+ call {:si_unique_call 498} nVar451 := proc130(28);
+ call {:si_unique_call 499} nVar452 := proc130(28);
+ call {:si_unique_call 500} nVar453 := proc130(28);
+ call {:si_unique_call 501} nVar454 := proc130(28);
+ call {:si_unique_call 502} nVar455 := proc130(12);
+ call {:si_unique_call 503} nVar456 := proc130(28);
+ call {:si_unique_call 504} nVar457 := proc130(28);
+ call {:si_unique_call 505} nVar458 := proc130(28);
+ call {:si_unique_call 506} nVar459 := proc130(28);
+ call {:si_unique_call 507} nVar460 := proc130(28);
+ call {:si_unique_call 508} nVar461 := proc130(28);
+ call {:si_unique_call 509} nVar462 := proc130(28);
+ call {:si_unique_call 510} nVar463 := proc130(28);
+ call {:si_unique_call 511} nVar464 := proc130(16);
+ call {:si_unique_call 512} nVar465 := proc130(28);
+ call {:si_unique_call 513} nVar466 := proc130(28);
+ call {:si_unique_call 514} nVar467 := proc130(24);
+ call {:si_unique_call 515} nVar468 := proc130(28);
+ call {:si_unique_call 516} nVar469 := proc130(12);
+ call {:si_unique_call 517} nVar470 := proc130(28);
+ call {:si_unique_call 518} nVar471 := proc130(28);
+ call {:si_unique_call 519} nVar472 := proc130(28);
+ call {:si_unique_call 520} nVar473 := proc130(28);
+ call {:si_unique_call 521} nVar474 := proc130(16);
+ call {:si_unique_call 522} nVar475 := proc130(28);
+ call {:si_unique_call 523} nVar476 := proc130(28);
+ call {:si_unique_call 524} nVar477 := proc130(4);
+ call {:si_unique_call 525} nVar478 := proc130(28);
+ call {:si_unique_call 526} nVar479 := proc130(28);
+ call {:si_unique_call 527} nVar480 := proc130(12);
+ call {:si_unique_call 528} nVar481 := proc130(24);
+ call {:si_unique_call 529} nVar482 := proc130(28);
+ call {:si_unique_call 530} nVar483 := proc130(28);
+ call {:si_unique_call 531} nVar484 := proc130(28);
+ call {:si_unique_call 532} nVar485 := proc130(28);
+ call {:si_unique_call 533} nVar486 := proc130(28);
+ call {:si_unique_call 534} nVar487 := proc130(28);
+ call {:si_unique_call 535} nVar488 := proc130(28);
+ call {:si_unique_call 536} nVar489 := proc130(28);
+ call {:si_unique_call 537} nVar490 := proc130(28);
+ call {:si_unique_call 538} nVar491 := proc130(28);
+ call {:si_unique_call 539} nVar492 := proc130(28);
+ call {:si_unique_call 540} nVar493 := proc130(28);
+ call {:si_unique_call 541} nVar494 := proc130(4);
+ call {:si_unique_call 542} nVar495 := proc130(28);
+ call {:si_unique_call 543} nVar496 := proc130(28);
+ call {:si_unique_call 544} nVar497 := proc130(28);
+ call {:si_unique_call 545} nVar498 := proc130(28);
+ call {:si_unique_call 546} nVar499 := proc130(28);
+ call {:si_unique_call 547} nVar500 := proc130(28);
+ call {:si_unique_call 548} nVar501 := proc130(28);
+ call {:si_unique_call 549} nVar502 := proc130(28);
+ call {:si_unique_call 550} nVar503 := proc130(28);
+ call {:si_unique_call 551} nVar504 := proc130(28);
+ call {:si_unique_call 552} nVar505 := proc130(28);
+ call {:si_unique_call 553} nVar506 := proc130(28);
+ call {:si_unique_call 554} nVar507 := proc130(16);
+ call {:si_unique_call 555} nVar508 := proc130(24);
+ call {:si_unique_call 556} nVar509 := proc130(28);
+ call {:si_unique_call 557} nVar510 := proc130(28);
+ call {:si_unique_call 558} nVar511 := proc130(28);
+ call {:si_unique_call 559} nVar512 := proc130(28);
+ call {:si_unique_call 560} nVar513 := proc130(24);
+ call {:si_unique_call 561} nVar514 := proc130(16);
+ call {:si_unique_call 562} nVar515 := proc130(28);
+ call {:si_unique_call 563} nVar516 := proc130(28);
+ call {:si_unique_call 564} nVar517 := proc130(28);
+ call {:si_unique_call 565} nVar518 := proc130(28);
+ call {:si_unique_call 566} nVar519 := proc130(28);
+ call {:si_unique_call 567} nVar520 := proc130(28);
+ call {:si_unique_call 568} nVar521 := proc130(28);
+ call {:si_unique_call 569} nVar522 := proc130(16);
+ call {:si_unique_call 570} nVar523 := proc130(16);
+ call {:si_unique_call 571} nVar524 := proc130(28);
+ call {:si_unique_call 572} nVar525 := proc130(28);
+ call {:si_unique_call 573} nVar526 := proc130(28);
+ call {:si_unique_call 574} nVar527 := proc130(24);
+ call {:si_unique_call 575} nVar528 := proc130(28);
+ call {:si_unique_call 576} nVar529 := proc130(28);
+ call {:si_unique_call 577} nVar530 := proc130(16);
+ call {:si_unique_call 578} nVar531 := proc130(28);
+ call {:si_unique_call 579} nVar532 := proc130(28);
+ call {:si_unique_call 580} nVar533 := proc130(28);
+ call {:si_unique_call 581} nVar534 := proc130(28);
+ call {:si_unique_call 582} nVar535 := proc130(28);
+ call {:si_unique_call 583} nVar536 := proc130(28);
+ call {:si_unique_call 584} nVar537 := proc130(12);
+ call {:si_unique_call 585} nVar538 := proc130(4);
+ call {:si_unique_call 586} nVar539 := proc130(28);
+ call {:si_unique_call 587} nVar540 := proc130(28);
+ call {:si_unique_call 588} nVar541 := proc130(28);
+ call {:si_unique_call 589} nVar542 := proc130(28);
+ call {:si_unique_call 590} nVar543 := proc130(28);
+ call {:si_unique_call 591} nVar544 := proc130(28);
+ call {:si_unique_call 592} nVar545 := proc130(28);
+ call {:si_unique_call 593} nVar546 := proc130(28);
+ call {:si_unique_call 594} nVar547 := proc130(28);
+ call {:si_unique_call 595} nVar548 := proc130(28);
+ call {:si_unique_call 596} nVar549 := proc130(4);
+ call {:si_unique_call 597} nVar550 := proc130(28);
+ call {:si_unique_call 598} nVar551 := proc130(28);
+ call {:si_unique_call 599} nVar552 := proc130(28);
+ call {:si_unique_call 600} nVar553 := proc130(28);
+ call {:si_unique_call 601} nVar554 := proc130(28);
+ call {:si_unique_call 602} nVar555 := proc130(28);
+ call {:si_unique_call 603} nVar556 := proc130(28);
+ call {:si_unique_call 604} nVar557 := proc130(28);
+ call {:si_unique_call 605} nVar558 := proc130(28);
+ call {:si_unique_call 606} nVar559 := proc130(28);
+ call {:si_unique_call 607} nVar560 := proc130(28);
+ call {:si_unique_call 608} nVar561 := proc130(28);
+ call {:si_unique_call 609} nVar562 := proc130(28);
+ call {:si_unique_call 610} nVar563 := proc130(4);
+ call {:si_unique_call 611} nVar564 := proc130(28);
+ call {:si_unique_call 612} nVar565 := proc130(28);
+ call {:si_unique_call 613} nVar566 := proc130(28);
+ call {:si_unique_call 614} nVar567 := proc130(28);
+ call {:si_unique_call 615} nVar568 := proc130(28);
+ call {:si_unique_call 616} nVar569 := proc130(28);
+ call {:si_unique_call 617} nVar570 := proc130(28);
+ call {:si_unique_call 618} nVar571 := proc130(28);
+ call {:si_unique_call 619} nVar572 := proc130(16);
+ call {:si_unique_call 620} nVar573 := proc130(16);
+ call {:si_unique_call 621} nVar574 := proc130(16);
+ call {:si_unique_call 622} nVar575 := proc130(28);
+ call {:si_unique_call 623} nVar576 := proc130(28);
+ call {:si_unique_call 624} nVar577 := proc130(4);
+ call {:si_unique_call 625} nVar578 := proc130(4);
+ call {:si_unique_call 626} nVar579 := proc130(16);
+ call {:si_unique_call 627} nVar580 := proc130(28);
+ call {:si_unique_call 628} nVar581 := proc130(28);
+ call {:si_unique_call 629} nVar582 := proc130(4);
+ call {:si_unique_call 630} nVar583 := proc130(24);
+ call {:si_unique_call 631} nVar584 := proc130(28);
+ call {:si_unique_call 632} nVar585 := proc130(28);
+ call {:si_unique_call 633} nVar586 := proc130(28);
+ call {:si_unique_call 634} nVar587 := proc130(28);
+ call {:si_unique_call 635} nVar588 := proc130(16);
+ call {:si_unique_call 636} nVar589 := proc130(28);
+ call {:si_unique_call 637} nVar590 := proc130(24);
+ call {:si_unique_call 638} nVar591 := proc130(28);
+ call {:si_unique_call 639} nVar592 := proc130(28);
+ call {:si_unique_call 640} nVar593 := proc130(28);
+ call {:si_unique_call 641} nVar594 := proc130(28);
+ call {:si_unique_call 642} nVar595 := proc130(28);
+ call {:si_unique_call 643} nVar596 := proc130(16);
+ call {:si_unique_call 644} nVar597 := proc130(28);
+ call {:si_unique_call 645} nVar598 := proc130(28);
+ call {:si_unique_call 646} nVar599 := proc130(28);
+ call {:si_unique_call 647} nVar600 := proc130(28);
+ call {:si_unique_call 648} nVar601 := proc130(12);
+ call {:si_unique_call 649} nVar602 := proc130(28);
+ call {:si_unique_call 650} nVar603 := proc130(28);
+ call {:si_unique_call 651} nVar604 := proc130(28);
+ call {:si_unique_call 652} nVar605 := proc130(28);
+ call {:si_unique_call 653} nVar606 := proc130(56);
+ call {:si_unique_call 654} nVar607 := proc130(28);
+ call {:si_unique_call 655} nVar608 := proc130(28);
+ call {:si_unique_call 656} nVar609 := proc130(28);
+ call {:si_unique_call 657} nVar610 := proc130(28);
+ call {:si_unique_call 658} nVar611 := proc130(28);
+ call {:si_unique_call 659} nVar612 := proc130(16);
+ call {:si_unique_call 660} nVar613 := proc130(28);
+ call {:si_unique_call 661} nVar614 := proc130(28);
+ call {:si_unique_call 662} nVar615 := proc130(28);
+ call {:si_unique_call 663} nVar616 := proc130(28);
+ call {:si_unique_call 664} nVar617 := proc130(28);
+ call {:si_unique_call 665} nVar618 := proc130(24);
+ call {:si_unique_call 666} nVar619 := proc130(28);
+ call {:si_unique_call 667} nVar620 := proc130(28);
+ call {:si_unique_call 668} nVar621 := proc130(28);
+ call {:si_unique_call 669} nVar622 := proc130(28);
+ call {:si_unique_call 670} nVar623 := proc130(16);
+ call {:si_unique_call 671} nVar624 := proc130(28);
+ call {:si_unique_call 672} nVar625 := proc130(28);
+ call {:si_unique_call 673} nVar626 := proc130(28);
+ call {:si_unique_call 674} nVar627 := proc130(12);
+ call {:si_unique_call 675} nVar628 := proc130(16);
+ call {:si_unique_call 676} nVar629 := proc130(28);
+ call {:si_unique_call 677} nVar630 := proc130(28);
+ call {:si_unique_call 678} nVar631 := proc130(12);
+ call {:si_unique_call 679} nVar632 := proc130(16);
+ call {:si_unique_call 680} nVar633 := proc130(28);
+ call {:si_unique_call 681} nVar634 := proc130(28);
+ call {:si_unique_call 682} nVar635 := proc130(28);
+ call {:si_unique_call 683} nVar636 := proc130(28);
+ call {:si_unique_call 684} nVar637 := proc130(28);
+ call {:si_unique_call 685} nVar638 := proc130(28);
+ call {:si_unique_call 686} nVar639 := proc130(28);
+ call {:si_unique_call 687} nVar640 := proc130(28);
+ call {:si_unique_call 688} nVar641 := proc130(28);
+ call {:si_unique_call 689} nVar642 := proc130(28);
+ call {:si_unique_call 690} nVar643 := proc130(24);
+ call {:si_unique_call 691} nVar644 := proc130(28);
+ call {:si_unique_call 692} nVar645 := proc130(28);
+ call {:si_unique_call 693} nVar646 := proc130(4);
+ call {:si_unique_call 694} nVar647 := proc130(28);
+ call {:si_unique_call 695} nVar648 := proc130(28);
+ call {:si_unique_call 696} nVar649 := proc130(28);
+ call {:si_unique_call 697} nVar650 := proc130(16);
+ call {:si_unique_call 698} nVar651 := proc130(28);
+ call {:si_unique_call 699} nVar652 := proc130(28);
+ call {:si_unique_call 700} nVar653 := proc130(12);
+ call {:si_unique_call 701} nVar654 := proc130(28);
+ call {:si_unique_call 702} nVar655 := proc130(28);
+ call {:si_unique_call 703} nVar656 := proc130(28);
+ call {:si_unique_call 704} nVar657 := proc130(28);
+ call {:si_unique_call 705} nVar658 := proc130(28);
+ call {:si_unique_call 706} nVar659 := proc130(28);
+ call {:si_unique_call 707} nVar660 := proc130(4);
+ call {:si_unique_call 708} nVar661 := proc130(28);
+ call {:si_unique_call 709} nVar662 := proc130(28);
+ call {:si_unique_call 710} nVar4946 := proc130(8);
+ call {:si_unique_call 711} nVar663 := proc130(28);
+ call {:si_unique_call 712} nVar664 := proc130(4);
+ call {:si_unique_call 713} nVar665 := proc130(28);
+ call {:si_unique_call 714} nVar666 := proc130(28);
+ call {:si_unique_call 715} nVar667 := proc130(28);
+ call {:si_unique_call 716} nVar668 := proc130(28);
+ call {:si_unique_call 717} nVar669 := proc130(4);
+ call {:si_unique_call 718} nVar670 := proc130(28);
+ call {:si_unique_call 719} nVar671 := proc130(28);
+ call {:si_unique_call 720} nVar672 := proc130(28);
+ call {:si_unique_call 721} nVar673 := proc130(28);
+ call {:si_unique_call 722} nVar674 := proc130(28);
+ call {:si_unique_call 723} nVar675 := proc130(28);
+ call {:si_unique_call 724} nVar676 := proc130(28);
+ call {:si_unique_call 725} nVar677 := proc130(28);
+ call {:si_unique_call 726} nVar678 := proc130(28);
+ call {:si_unique_call 727} nVar679 := proc130(24);
+ call {:si_unique_call 728} nVar680 := proc130(28);
+ call {:si_unique_call 729} nVar681 := proc130(28);
+ call {:si_unique_call 730} nVar682 := proc130(28);
+ call {:si_unique_call 731} nVar683 := proc130(12);
+ call {:si_unique_call 732} nVar684 := proc130(28);
+ call {:si_unique_call 733} nVar685 := proc130(16);
+ call {:si_unique_call 734} nVar686 := proc130(16);
+ call {:si_unique_call 735} nVar687 := proc130(16);
+ call {:si_unique_call 736} nVar688 := proc130(28);
+ call {:si_unique_call 737} nVar689 := proc130(28);
+ call {:si_unique_call 738} nVar690 := proc130(24);
+ call {:si_unique_call 739} nVar691 := proc130(28);
+ call {:si_unique_call 740} nVar692 := proc130(28);
+ call {:si_unique_call 741} nVar693 := proc130(28);
+ call {:si_unique_call 742} nVar694 := proc130(28);
+ call {:si_unique_call 743} nVar695 := proc130(28);
+ call {:si_unique_call 744} nVar696 := proc130(28);
+ call {:si_unique_call 745} nVar697 := proc130(28);
+ call {:si_unique_call 746} nVar698 := proc130(24);
+ call {:si_unique_call 747} nVar699 := proc130(24);
+ call {:si_unique_call 748} nVar700 := proc130(28);
+ call {:si_unique_call 749} nVar701 := proc130(28);
+ call {:si_unique_call 750} nVar702 := proc130(28);
+ call {:si_unique_call 751} nVar703 := proc130(24);
+ call {:si_unique_call 752} nVar704 := proc130(28);
+ call {:si_unique_call 753} nVar705 := proc130(28);
+ call {:si_unique_call 754} nVar706 := proc130(28);
+ call {:si_unique_call 755} nVar707 := proc130(28);
+ call {:si_unique_call 756} nVar708 := proc130(28);
+ call {:si_unique_call 757} nVar709 := proc130(28);
+ call {:si_unique_call 758} nVar710 := proc130(28);
+ call {:si_unique_call 759} nVar711 := proc130(28);
+ call {:si_unique_call 760} nVar712 := proc130(28);
+ call {:si_unique_call 761} nVar713 := proc130(28);
+ call {:si_unique_call 762} nVar714 := proc130(28);
+ call {:si_unique_call 763} nVar715 := proc130(28);
+ call {:si_unique_call 764} nVar716 := proc130(28);
+ call {:si_unique_call 765} nVar717 := proc130(28);
+ call {:si_unique_call 766} nVar718 := proc130(28);
+ call {:si_unique_call 767} nVar719 := proc130(28);
+ call {:si_unique_call 768} nVar720 := proc130(28);
+ call {:si_unique_call 769} nVar721 := proc130(28);
+ call {:si_unique_call 770} nVar722 := proc130(28);
+ call {:si_unique_call 771} nVar723 := proc130(28);
+ call {:si_unique_call 772} nVar724 := proc130(28);
+ call {:si_unique_call 773} nVar725 := proc130(28);
+ call {:si_unique_call 774} nVar726 := proc130(28);
+ call {:si_unique_call 775} nVar727 := proc130(28);
+ call {:si_unique_call 776} nVar728 := proc130(16);
+ call {:si_unique_call 777} nVar729 := proc130(28);
+ call {:si_unique_call 778} nVar730 := proc130(28);
+ call {:si_unique_call 779} nVar731 := proc130(28);
+ call {:si_unique_call 780} nVar732 := proc130(24);
+ call {:si_unique_call 781} nVar733 := proc130(28);
+ call {:si_unique_call 782} nVar734 := proc130(28);
+ call {:si_unique_call 783} nVar735 := proc130(28);
+ call {:si_unique_call 784} nVar736 := proc130(4);
+ call {:si_unique_call 785} nVar737 := proc130(28);
+ call {:si_unique_call 786} nVar738 := proc130(28);
+ call {:si_unique_call 787} nVar739 := proc130(12);
+ call {:si_unique_call 788} nVar740 := proc130(28);
+ call {:si_unique_call 789} nVar741 := proc130(28);
+ call {:si_unique_call 790} nVar742 := proc130(28);
+ call {:si_unique_call 791} nVar743 := proc130(28);
+ call {:si_unique_call 792} nVar744 := proc130(12);
+ call {:si_unique_call 793} nVar745 := proc130(28);
+ call {:si_unique_call 794} nVar746 := proc130(28);
+ call {:si_unique_call 795} nVar747 := proc130(28);
+ call {:si_unique_call 796} nVar748 := proc130(4);
+ call {:si_unique_call 797} nVar749 := proc130(28);
+ call {:si_unique_call 798} nVar750 := proc130(16);
+ call {:si_unique_call 799} nVar751 := proc130(28);
+ call {:si_unique_call 800} nVar752 := proc130(28);
+ call {:si_unique_call 801} nVar753 := proc130(28);
+ call {:si_unique_call 802} nVar754 := proc130(28);
+ call {:si_unique_call 803} nVar755 := proc130(4);
+ call {:si_unique_call 804} nVar756 := proc130(28);
+ call {:si_unique_call 805} nVar757 := proc130(28);
+ call {:si_unique_call 806} nVar758 := proc130(28);
+ call {:si_unique_call 807} nVar759 := proc130(28);
+ call {:si_unique_call 808} nVar760 := proc130(28);
+ call {:si_unique_call 809} nVar761 := proc130(28);
+ call {:si_unique_call 810} nVar762 := proc130(28);
+ call {:si_unique_call 811} nVar763 := proc130(24);
+ call {:si_unique_call 812} nVar764 := proc130(12);
+ call {:si_unique_call 813} nVar765 := proc130(4);
+ call {:si_unique_call 814} nVar766 := proc130(12);
+ call {:si_unique_call 815} nVar767 := proc130(28);
+ call {:si_unique_call 816} nVar768 := proc130(28);
+ call {:si_unique_call 817} nVar769 := proc130(28);
+ call {:si_unique_call 818} nVar770 := proc130(56);
+ call {:si_unique_call 819} nVar771 := proc130(12);
+ call {:si_unique_call 820} nVar772 := proc130(28);
+ call {:si_unique_call 821} nVar773 := proc130(28);
+ call {:si_unique_call 822} nVar774 := proc130(28);
+ call {:si_unique_call 823} nVar775 := proc130(12);
+ call {:si_unique_call 824} nVar776 := proc130(28);
+ call {:si_unique_call 825} nVar777 := proc130(28);
+ call {:si_unique_call 826} nVar778 := proc130(12);
+ call {:si_unique_call 827} nVar779 := proc130(24);
+ call {:si_unique_call 828} nVar780 := proc130(28);
+ call {:si_unique_call 829} nVar781 := proc130(16);
+ call {:si_unique_call 830} nVar782 := proc130(28);
+ call {:si_unique_call 831} nVar783 := proc130(28);
+ call {:si_unique_call 832} nVar784 := proc130(28);
+ call {:si_unique_call 833} nVar785 := proc130(28);
+ call {:si_unique_call 834} nVar786 := proc130(28);
+ call {:si_unique_call 835} nVar787 := proc130(28);
+ call {:si_unique_call 836} nVar788 := proc130(28);
+ call {:si_unique_call 837} nVar789 := proc130(28);
+ call {:si_unique_call 838} nVar790 := proc130(28);
+ call {:si_unique_call 839} nVar791 := proc130(28);
+ call {:si_unique_call 840} nVar792 := proc130(24);
+ call {:si_unique_call 841} nVar793 := proc130(28);
+ call {:si_unique_call 842} nVar794 := proc130(28);
+ call {:si_unique_call 843} nVar795 := proc130(28);
+ call {:si_unique_call 844} nVar796 := proc130(28);
+ call {:si_unique_call 845} nVar797 := proc130(28);
+ call {:si_unique_call 846} nVar798 := proc130(28);
+ call {:si_unique_call 847} nVar799 := proc130(28);
+ call {:si_unique_call 848} nVar800 := proc130(28);
+ call {:si_unique_call 849} nVar801 := proc130(28);
+ call {:si_unique_call 850} nVar802 := proc130(28);
+ call {:si_unique_call 851} nVar803 := proc130(28);
+ call {:si_unique_call 852} nVar804 := proc130(28);
+ call {:si_unique_call 853} nVar805 := proc130(28);
+ call {:si_unique_call 854} nVar806 := proc130(12);
+ call {:si_unique_call 855} nVar807 := proc130(28);
+ call {:si_unique_call 856} nVar808 := proc130(28);
+ call {:si_unique_call 857} nVar809 := proc130(28);
+ call {:si_unique_call 858} nVar810 := proc130(28);
+ call {:si_unique_call 859} nVar811 := proc130(28);
+ call {:si_unique_call 860} nVar812 := proc130(12);
+ call {:si_unique_call 861} nVar813 := proc130(28);
+ call {:si_unique_call 862} nVar814 := proc130(28);
+ call {:si_unique_call 863} nVar815 := proc130(28);
+ call {:si_unique_call 864} nVar816 := proc130(12);
+ call {:si_unique_call 865} nVar817 := proc130(28);
+ call {:si_unique_call 866} nVar818 := proc130(28);
+ call {:si_unique_call 867} nVar819 := proc130(28);
+ call {:si_unique_call 868} nVar820 := proc130(28);
+ call {:si_unique_call 869} nVar821 := proc130(4);
+ call {:si_unique_call 870} nVar822 := proc130(28);
+ call {:si_unique_call 871} nVar823 := proc130(28);
+ call {:si_unique_call 872} nVar824 := proc130(28);
+ call {:si_unique_call 873} nVar825 := proc130(28);
+ call {:si_unique_call 874} nVar826 := proc130(28);
+ call {:si_unique_call 875} nVar827 := proc130(28);
+ call {:si_unique_call 876} nVar828 := proc130(28);
+ call {:si_unique_call 877} nVar829 := proc130(28);
+ call {:si_unique_call 878} nVar830 := proc130(28);
+ call {:si_unique_call 879} nVar831 := proc130(28);
+ call {:si_unique_call 880} nVar832 := proc130(4);
+ call {:si_unique_call 881} nVar833 := proc130(28);
+ call {:si_unique_call 882} nVar834 := proc130(16);
+ call {:si_unique_call 883} nVar835 := proc130(28);
+ call {:si_unique_call 884} nVar836 := proc130(28);
+ call {:si_unique_call 885} nVar837 := proc130(28);
+ call {:si_unique_call 886} nVar838 := proc130(28);
+ call {:si_unique_call 887} nVar839 := proc130(28);
+ call {:si_unique_call 888} nVar840 := proc130(28);
+ call {:si_unique_call 889} nVar841 := proc130(28);
+ call {:si_unique_call 890} nVar842 := proc130(28);
+ call {:si_unique_call 891} nVar843 := proc130(16);
+ call {:si_unique_call 892} nVar844 := proc130(4);
+ call {:si_unique_call 893} nVar845 := proc130(28);
+ call {:si_unique_call 894} nVar846 := proc130(28);
+ call {:si_unique_call 895} nVar847 := proc130(28);
+ call {:si_unique_call 896} nVar848 := proc130(28);
+ call {:si_unique_call 897} nVar849 := proc130(28);
+ call {:si_unique_call 898} nVar850 := proc130(28);
+ call {:si_unique_call 899} nVar851 := proc130(28);
+ call {:si_unique_call 900} nVar852 := proc130(28);
+ call {:si_unique_call 901} nVar853 := proc130(28);
+ call {:si_unique_call 902} nVar854 := proc130(16);
+ call {:si_unique_call 903} nVar855 := proc130(28);
+ call {:si_unique_call 904} nVar856 := proc130(28);
+ call {:si_unique_call 905} nVar857 := proc130(28);
+ call {:si_unique_call 906} nVar858 := proc130(28);
+ call {:si_unique_call 907} nVar859 := proc130(28);
+ call {:si_unique_call 908} nVar860 := proc130(28);
+ call {:si_unique_call 909} nVar861 := proc130(28);
+ call {:si_unique_call 910} nVar862 := proc130(28);
+ call {:si_unique_call 911} nVar863 := proc130(28);
+ call {:si_unique_call 912} nVar864 := proc130(56);
+ call {:si_unique_call 913} nVar865 := proc130(28);
+ call {:si_unique_call 914} nVar866 := proc130(28);
+ call {:si_unique_call 915} nVar867 := proc130(28);
+ call {:si_unique_call 916} nVar868 := proc130(28);
+ call {:si_unique_call 917} nVar869 := proc130(28);
+ call {:si_unique_call 918} nVar870 := proc130(12);
+ call {:si_unique_call 919} nVar871 := proc130(28);
+ call {:si_unique_call 920} nVar872 := proc130(28);
+ call {:si_unique_call 921} nVar873 := proc130(28);
+ call {:si_unique_call 922} nVar874 := proc130(28);
+ call {:si_unique_call 923} nVar875 := proc130(28);
+ call {:si_unique_call 924} nVar876 := proc130(16);
+ call {:si_unique_call 925} nVar877 := proc130(28);
+ call {:si_unique_call 926} nVar878 := proc130(4);
+ call {:si_unique_call 927} nVar879 := proc130(24);
+ call {:si_unique_call 928} nVar880 := proc130(24);
+ call {:si_unique_call 929} nVar881 := proc130(28);
+ call {:si_unique_call 930} nVar882 := proc130(28);
+ call {:si_unique_call 931} nVar883 := proc130(28);
+ call {:si_unique_call 932} nVar884 := proc130(28);
+ call {:si_unique_call 933} nVar885 := proc130(28);
+ call {:si_unique_call 934} nVar886 := proc130(28);
+ call {:si_unique_call 935} nVar887 := proc130(28);
+ call {:si_unique_call 936} nVar888 := proc130(28);
+ call {:si_unique_call 937} nVar889 := proc130(28);
+ call {:si_unique_call 938} nVar890 := proc130(28);
+ call {:si_unique_call 939} nVar891 := proc130(28);
+ call {:si_unique_call 940} nVar892 := proc130(28);
+ call {:si_unique_call 941} nVar893 := proc130(28);
+ call {:si_unique_call 942} nVar894 := proc130(28);
+ call {:si_unique_call 943} nVar895 := proc130(28);
+ call {:si_unique_call 944} nVar896 := proc130(28);
+ call {:si_unique_call 945} nVar897 := proc130(28);
+ call {:si_unique_call 946} nVar898 := proc130(16);
+ call {:si_unique_call 947} nVar899 := proc130(4);
+ call {:si_unique_call 948} nVar900 := proc130(28);
+ call {:si_unique_call 949} nVar901 := proc130(28);
+ call {:si_unique_call 950} nVar902 := proc130(28);
+ call {:si_unique_call 951} nVar903 := proc130(28);
+ call {:si_unique_call 952} nVar904 := proc130(12);
+ call {:si_unique_call 953} nVar905 := proc130(28);
+ call {:si_unique_call 954} nVar906 := proc130(28);
+ call {:si_unique_call 955} nVar907 := proc130(28);
+ call {:si_unique_call 956} nVar908 := proc130(12);
+ call {:si_unique_call 957} nVar909 := proc130(28);
+ call {:si_unique_call 958} nVar910 := proc130(28);
+ call {:si_unique_call 959} nVar911 := proc130(28);
+ call {:si_unique_call 960} nVar912 := proc130(28);
+ call {:si_unique_call 961} nVar913 := proc130(28);
+ call {:si_unique_call 962} nVar914 := proc130(28);
+ call {:si_unique_call 963} nVar915 := proc130(28);
+ call {:si_unique_call 964} nVar916 := proc130(28);
+ call {:si_unique_call 965} nVar917 := proc130(28);
+ call {:si_unique_call 966} nVar918 := proc130(16);
+ call {:si_unique_call 967} nVar919 := proc130(28);
+ call {:si_unique_call 968} nVar920 := proc130(28);
+ call {:si_unique_call 969} nVar921 := proc130(28);
+ call {:si_unique_call 970} nVar922 := proc130(16);
+ call {:si_unique_call 971} nVar923 := proc130(4);
+ call {:si_unique_call 972} nVar924 := proc130(28);
+ call {:si_unique_call 973} nVar925 := proc130(28);
+ call {:si_unique_call 974} nVar926 := proc130(28);
+ call {:si_unique_call 975} nVar927 := proc130(28);
+ call {:si_unique_call 976} nVar928 := proc130(28);
+ call {:si_unique_call 977} nVar929 := proc130(28);
+ call {:si_unique_call 978} nVar930 := proc130(28);
+ call {:si_unique_call 979} nVar931 := proc130(28);
+ call {:si_unique_call 980} nVar932 := proc130(28);
+ call {:si_unique_call 981} nVar933 := proc130(28);
+ call {:si_unique_call 982} nVar934 := proc130(28);
+ call {:si_unique_call 983} nVar935 := proc130(28);
+ call {:si_unique_call 984} nVar936 := proc130(28);
+ call {:si_unique_call 985} nVar937 := proc130(28);
+ call {:si_unique_call 986} nVar938 := proc130(28);
+ call {:si_unique_call 987} nVar939 := proc130(28);
+ call {:si_unique_call 988} nVar940 := proc130(28);
+ call {:si_unique_call 989} nVar941 := proc130(28);
+ call {:si_unique_call 990} nVar942 := proc130(28);
+ call {:si_unique_call 991} nVar943 := proc130(28);
+ call {:si_unique_call 992} nVar944 := proc130(28);
+ call {:si_unique_call 993} nVar945 := proc130(28);
+ call {:si_unique_call 994} nVar946 := proc130(28);
+ call {:si_unique_call 995} nVar947 := proc130(28);
+ call {:si_unique_call 996} nVar948 := proc130(28);
+ call {:si_unique_call 997} nVar949 := proc130(28);
+ call {:si_unique_call 998} nVar950 := proc130(28);
+ call {:si_unique_call 999} nVar951 := proc130(28);
+ call {:si_unique_call 1000} nVar952 := proc130(28);
+ call {:si_unique_call 1001} nVar953 := proc130(28);
+ call {:si_unique_call 1002} nVar954 := proc130(28);
+ call {:si_unique_call 1003} nVar955 := proc130(28);
+ call {:si_unique_call 1004} nVar956 := proc130(28);
+ call {:si_unique_call 1005} nVar957 := proc130(28);
+ call {:si_unique_call 1006} nVar958 := proc130(28);
+ call {:si_unique_call 1007} nVar959 := proc130(12);
+ call {:si_unique_call 1008} nVar960 := proc130(28);
+ call {:si_unique_call 1009} nVar961 := proc130(28);
+ call {:si_unique_call 1010} nVar962 := proc130(28);
+ call {:si_unique_call 1011} nVar963 := proc130(28);
+ call {:si_unique_call 1012} nVar964 := proc130(4);
+ call {:si_unique_call 1013} nVar965 := proc130(28);
+ call {:si_unique_call 1014} nVar966 := proc130(16);
+ call {:si_unique_call 1015} nVar967 := proc130(28);
+ call {:si_unique_call 1016} nVar968 := proc130(16);
+ call {:si_unique_call 1017} nVar969 := proc130(28);
+ call {:si_unique_call 1018} nVar970 := proc130(28);
+ call {:si_unique_call 1019} nVar971 := proc130(16);
+ call {:si_unique_call 1020} nVar972 := proc130(12);
+ call {:si_unique_call 1021} nVar973 := proc130(28);
+ call {:si_unique_call 1022} nVar974 := proc130(28);
+ call {:si_unique_call 1023} nVar975 := proc130(28);
+ call {:si_unique_call 1024} nVar976 := proc130(12);
+ call {:si_unique_call 1025} nVar977 := proc130(28);
+ call {:si_unique_call 1026} nVar978 := proc130(12);
+ call {:si_unique_call 1027} nVar979 := proc130(28);
+ call {:si_unique_call 1028} nVar980 := proc130(28);
+ call {:si_unique_call 1029} nVar981 := proc130(12);
+ call {:si_unique_call 1030} nVar982 := proc130(16);
+ call {:si_unique_call 1031} nVar983 := proc130(28);
+ call {:si_unique_call 1032} nVar984 := proc130(28);
+ call {:si_unique_call 1033} nVar985 := proc130(16);
+ call {:si_unique_call 1034} nVar986 := proc130(28);
+ call {:si_unique_call 1035} nVar987 := proc130(28);
+ call {:si_unique_call 1036} nVar988 := proc130(28);
+ call {:si_unique_call 1037} nVar989 := proc130(28);
+ call {:si_unique_call 1038} nVar990 := proc130(28);
+ call {:si_unique_call 1039} nVar991 := proc130(28);
+ call {:si_unique_call 1040} nVar992 := proc130(28);
+ call {:si_unique_call 1041} nVar993 := proc130(28);
+ call {:si_unique_call 1042} nVar994 := proc130(28);
+ call {:si_unique_call 1043} nVar995 := proc130(28);
+ call {:si_unique_call 1044} nVar996 := proc130(28);
+ call {:si_unique_call 1045} nVar997 := proc130(28);
+ call {:si_unique_call 1046} nVar998 := proc130(28);
+ call {:si_unique_call 1047} nVar999 := proc130(28);
+ call {:si_unique_call 1048} nVar1000 := proc130(28);
+ call {:si_unique_call 1049} nVar1001 := proc130(28);
+ call {:si_unique_call 1050} nVar1002 := proc130(28);
+ call {:si_unique_call 1051} nVar1003 := proc130(28);
+ call {:si_unique_call 1052} nVar1004 := proc130(28);
+ call {:si_unique_call 1053} nVar1005 := proc130(28);
+ call {:si_unique_call 1054} nVar1006 := proc130(24);
+ call {:si_unique_call 1055} nVar1007 := proc130(28);
+ call {:si_unique_call 1056} nVar1008 := proc130(28);
+ call {:si_unique_call 1057} nVar1009 := proc130(28);
+ call {:si_unique_call 1058} nVar4947 := proc130(16);
+ call {:si_unique_call 1059} nVar1010 := proc130(28);
+ call {:si_unique_call 1060} nVar1011 := proc130(28);
+ call {:si_unique_call 1061} nVar1012 := proc130(28);
+ call {:si_unique_call 1062} nVar1013 := proc130(28);
+ call {:si_unique_call 1063} nVar1014 := proc130(28);
+ call {:si_unique_call 1064} nVar1015 := proc130(28);
+ call {:si_unique_call 1065} nVar1016 := proc130(12);
+ call {:si_unique_call 1066} nVar1017 := proc130(12);
+ call {:si_unique_call 1067} nVar1018 := proc130(28);
+ call {:si_unique_call 1068} nVar1019 := proc130(28);
+ call {:si_unique_call 1069} nVar1020 := proc130(12);
+ call {:si_unique_call 1070} nVar1021 := proc130(28);
+ call {:si_unique_call 1071} nVar1022 := proc130(28);
+ call {:si_unique_call 1072} nVar1023 := proc130(24);
+ call {:si_unique_call 1073} nVar1024 := proc130(28);
+ call {:si_unique_call 1074} nVar1025 := proc130(16);
+ call {:si_unique_call 1075} nVar1026 := proc130(16);
+ call {:si_unique_call 1076} nVar1027 := proc130(28);
+ call {:si_unique_call 1077} nVar1028 := proc130(28);
+ call {:si_unique_call 1078} nVar1029 := proc130(12);
+ call {:si_unique_call 1079} nVar1030 := proc130(12);
+ call {:si_unique_call 1080} nVar1031 := proc130(28);
+ call {:si_unique_call 1081} nVar1032 := proc130(28);
+ call {:si_unique_call 1082} nVar1033 := proc130(28);
+ call {:si_unique_call 1083} nVar1034 := proc130(28);
+ call {:si_unique_call 1084} nVar1035 := proc130(12);
+ call {:si_unique_call 1085} nVar1036 := proc130(16);
+ call {:si_unique_call 1086} nVar1037 := proc130(28);
+ call {:si_unique_call 1087} nVar1038 := proc130(28);
+ call {:si_unique_call 1088} nVar1039 := proc130(4);
+ call {:si_unique_call 1089} nVar1041 := proc130(28);
+ call {:si_unique_call 1090} nVar1042 := proc130(56);
+ call {:si_unique_call 1091} nVar1043 := proc130(28);
+ call {:si_unique_call 1092} nVar1044 := proc130(28);
+ call {:si_unique_call 1093} nVar1045 := proc130(28);
+ call {:si_unique_call 1094} nVar1046 := proc130(28);
+ call {:si_unique_call 1095} nVar1047 := proc130(12);
+ call {:si_unique_call 1096} nVar1048 := proc130(28);
+ call {:si_unique_call 1097} nVar1049 := proc130(28);
+ call {:si_unique_call 1098} nVar1050 := proc130(16);
+ call {:si_unique_call 1099} nVar1051 := proc130(28);
+ call {:si_unique_call 1100} nVar1052 := proc130(28);
+ call {:si_unique_call 1101} nVar1053 := proc130(28);
+ call {:si_unique_call 1102} nVar1054 := proc130(16);
+ call {:si_unique_call 1103} nVar1055 := proc130(28);
+ call {:si_unique_call 1104} nVar1056 := proc130(28);
+ call {:si_unique_call 1105} nVar1057 := proc130(28);
+ call {:si_unique_call 1106} nVar1058 := proc130(28);
+ call {:si_unique_call 1107} nVar1059 := proc130(28);
+ call {:si_unique_call 1108} nVar1060 := proc130(28);
+ call {:si_unique_call 1109} nVar1061 := proc130(28);
+ call {:si_unique_call 1110} nVar1062 := proc130(28);
+ call {:si_unique_call 1111} nVar1063 := proc130(28);
+ call {:si_unique_call 1112} nVar1064 := proc130(28);
+ call {:si_unique_call 1113} nVar1065 := proc130(28);
+ call {:si_unique_call 1114} nVar1066 := proc130(28);
+ call {:si_unique_call 1115} nVar1067 := proc130(4);
+ call {:si_unique_call 1116} nVar1068 := proc130(28);
+ call {:si_unique_call 1117} nVar1069 := proc130(28);
+ call {:si_unique_call 1118} nVar1070 := proc130(28);
+ call {:si_unique_call 1119} nVar1071 := proc130(24);
+ call {:si_unique_call 1120} nVar1072 := proc130(28);
+ call {:si_unique_call 1121} nVar1073 := proc130(8);
+ call {:si_unique_call 1122} nVar1074 := proc130(28);
+ call {:si_unique_call 1123} nVar1075 := proc130(28);
+ call {:si_unique_call 1124} nVar1076 := proc130(16);
+ call {:si_unique_call 1125} nVar1077 := proc130(28);
+ call {:si_unique_call 1126} nVar1078 := proc130(28);
+ call {:si_unique_call 1127} nVar1079 := proc130(28);
+ call {:si_unique_call 1128} nVar1080 := proc130(28);
+ call {:si_unique_call 1129} nVar1081 := proc130(28);
+ call {:si_unique_call 1130} nVar1082 := proc130(28);
+ call {:si_unique_call 1131} nVar1083 := proc130(28);
+ call {:si_unique_call 1132} nVar1084 := proc130(28);
+ call {:si_unique_call 1133} nVar1085 := proc130(28);
+ call {:si_unique_call 1134} nVar1086 := proc130(28);
+ call {:si_unique_call 1135} nVar1087 := proc130(28);
+ call {:si_unique_call 1136} nVar1088 := proc130(28);
+ call {:si_unique_call 1137} nVar1089 := proc130(28);
+ call {:si_unique_call 1138} nVar1090 := proc130(28);
+ call {:si_unique_call 1139} nVar1091 := proc130(28);
+ call {:si_unique_call 1140} nVar1092 := proc130(28);
+ call {:si_unique_call 1141} nVar1093 := proc130(28);
+ call {:si_unique_call 1142} nVar1094 := proc130(12);
+ call {:si_unique_call 1143} nVar1095 := proc130(4);
+ call {:si_unique_call 1144} nVar1096 := proc130(16);
+ call {:si_unique_call 1145} nVar1097 := proc130(24);
+ call {:si_unique_call 1146} nVar1098 := proc130(28);
+ call {:si_unique_call 1147} nVar1099 := proc130(28);
+ call {:si_unique_call 1148} nVar1100 := proc130(28);
+ call {:si_unique_call 1149} nVar1101 := proc130(28);
+ call {:si_unique_call 1150} nVar1102 := proc130(28);
+ call {:si_unique_call 1151} nVar1103 := proc130(28);
+ call {:si_unique_call 1152} nVar1104 := proc130(24);
+ call {:si_unique_call 1153} nVar1105 := proc130(28);
+ call {:si_unique_call 1154} nVar1106 := proc130(16);
+ call {:si_unique_call 1155} nVar1107 := proc130(12);
+ call {:si_unique_call 1156} nVar1108 := proc130(28);
+ call {:si_unique_call 1157} nVar1109 := proc130(28);
+ call {:si_unique_call 1158} nVar1110 := proc130(28);
+ call {:si_unique_call 1159} nVar1111 := proc130(28);
+ call {:si_unique_call 1160} nVar1112 := proc130(16);
+ call {:si_unique_call 1161} nVar1113 := proc130(28);
+ call {:si_unique_call 1162} nVar1114 := proc130(28);
+ call {:si_unique_call 1163} nVar1115 := proc130(28);
+ call {:si_unique_call 1164} nVar1116 := proc130(28);
+ call {:si_unique_call 1165} nVar1117 := proc130(28);
+ call {:si_unique_call 1166} nVar1118 := proc130(16);
+ call {:si_unique_call 1167} nVar1119 := proc130(16);
+ call {:si_unique_call 1168} nVar1120 := proc130(28);
+ call {:si_unique_call 1169} nVar1121 := proc130(28);
+ call {:si_unique_call 1170} nVar1122 := proc130(28);
+ call {:si_unique_call 1171} nVar1123 := proc130(16);
+ call {:si_unique_call 1172} nVar1124 := proc130(28);
+ call {:si_unique_call 1173} nVar1125 := proc130(28);
+ call {:si_unique_call 1174} nVar1126 := proc130(28);
+ call {:si_unique_call 1175} nVar1127 := proc130(28);
+ call {:si_unique_call 1176} nVar1128 := proc130(28);
+ call {:si_unique_call 1177} nVar1129 := proc130(28);
+ call {:si_unique_call 1178} nVar1130 := proc130(28);
+ call {:si_unique_call 1179} nVar1131 := proc130(28);
+ call {:si_unique_call 1180} nVar1132 := proc130(28);
+ call {:si_unique_call 1181} nVar1133 := proc130(28);
+ call {:si_unique_call 1182} nVar1134 := proc130(16);
+ call {:si_unique_call 1183} nVar1135 := proc130(28);
+ call {:si_unique_call 1184} nVar1136 := proc130(56);
+ call {:si_unique_call 1185} nVar1137 := proc130(28);
+ call {:si_unique_call 1186} nVar1138 := proc130(16);
+ call {:si_unique_call 1187} nVar1139 := proc130(28);
+ call {:si_unique_call 1188} nVar1140 := proc130(28);
+ call {:si_unique_call 1189} nVar1141 := proc130(28);
+ call {:si_unique_call 1190} nVar1142 := proc130(28);
+ call {:si_unique_call 1191} nVar1143 := proc130(28);
+ call {:si_unique_call 1192} nVar1144 := proc130(12);
+ call {:si_unique_call 1193} nVar1145 := proc130(28);
+ call {:si_unique_call 1194} nVar1146 := proc130(28);
+ call {:si_unique_call 1195} nVar1147 := proc130(28);
+ call {:si_unique_call 1196} nVar1148 := proc130(16);
+ call {:si_unique_call 1197} nVar1149 := proc130(28);
+ call {:si_unique_call 1198} nVar1150 := proc130(4);
+ call {:si_unique_call 1199} nVar1151 := proc130(28);
+ call {:si_unique_call 1200} nVar1152 := proc130(28);
+ call {:si_unique_call 1201} nVar1153 := proc130(28);
+ call {:si_unique_call 1202} nVar1154 := proc130(28);
+ call {:si_unique_call 1203} nVar1155 := proc130(28);
+ call {:si_unique_call 1204} nVar1156 := proc130(28);
+ call {:si_unique_call 1205} nVar1157 := proc130(28);
+ call {:si_unique_call 1206} nVar1158 := proc130(28);
+ call {:si_unique_call 1207} nVar1159 := proc130(28);
+ call {:si_unique_call 1208} nVar1160 := proc130(28);
+ call {:si_unique_call 1209} nVar1161 := proc130(28);
+ call {:si_unique_call 1210} nVar1162 := proc130(28);
+ call {:si_unique_call 1211} nVar1163 := proc130(28);
+ call {:si_unique_call 1212} nVar1164 := proc130(8);
+ call {:si_unique_call 1213} nVar1165 := proc130(28);
+ call {:si_unique_call 1214} nVar1166 := proc130(28);
+ call {:si_unique_call 1215} nVar1167 := proc130(28);
+ call {:si_unique_call 1216} nVar1168 := proc130(16);
+ call {:si_unique_call 1217} nVar1169 := proc130(28);
+ call {:si_unique_call 1218} nVar1170 := proc130(4);
+ call {:si_unique_call 1219} nVar1171 := proc130(28);
+ call {:si_unique_call 1220} nVar1172 := proc130(28);
+ call {:si_unique_call 1221} nVar1173 := proc130(28);
+ call {:si_unique_call 1222} nVar1174 := proc130(12);
+ call {:si_unique_call 1223} nVar1176 := proc130(28);
+ call {:si_unique_call 1224} nVar1177 := proc130(28);
+ call {:si_unique_call 1225} nVar1178 := proc130(28);
+ call {:si_unique_call 1226} nVar1179 := proc130(28);
+ call {:si_unique_call 1227} nVar1180 := proc130(28);
+ call {:si_unique_call 1228} nVar1181 := proc130(28);
+ call {:si_unique_call 1229} nVar1182 := proc130(16);
+ call {:si_unique_call 1230} nVar1183 := proc130(28);
+ call {:si_unique_call 1231} nVar1184 := proc130(28);
+ call {:si_unique_call 1232} nVar1185 := proc130(28);
+ call {:si_unique_call 1233} nVar1186 := proc130(28);
+ call {:si_unique_call 1234} nVar1187 := proc130(28);
+ call {:si_unique_call 1235} nVar1188 := proc130(28);
+ call {:si_unique_call 1236} nVar1189 := proc130(28);
+ call {:si_unique_call 1237} nVar1190 := proc130(28);
+ call {:si_unique_call 1238} nVar1191 := proc130(28);
+ call {:si_unique_call 1239} nVar1192 := proc130(28);
+ call {:si_unique_call 1240} nVar1193 := proc130(28);
+ call {:si_unique_call 1241} nVar1194 := proc130(28);
+ call {:si_unique_call 1242} nVar1195 := proc130(28);
+ call {:si_unique_call 1243} nVar1196 := proc130(28);
+ call {:si_unique_call 1244} nVar1197 := proc130(16);
+ call {:si_unique_call 1245} nVar1198 := proc130(28);
+ call {:si_unique_call 1246} nVar1199 := proc130(28);
+ call {:si_unique_call 1247} nVar1200 := proc130(28);
+ call {:si_unique_call 1248} nVar1201 := proc130(28);
+ call {:si_unique_call 1249} nVar1202 := proc130(28);
+ call {:si_unique_call 1250} nVar1203 := proc130(28);
+ call {:si_unique_call 1251} nVar1204 := proc130(28);
+ call {:si_unique_call 1252} nVar1205 := proc130(28);
+ call {:si_unique_call 1253} nVar1206 := proc130(28);
+ call {:si_unique_call 1254} nVar1207 := proc130(28);
+ call {:si_unique_call 1255} nVar1208 := proc130(28);
+ call {:si_unique_call 1256} nVar1209 := proc130(28);
+ call {:si_unique_call 1257} nVar1210 := proc130(28);
+ call {:si_unique_call 1258} nVar1211 := proc130(28);
+ call {:si_unique_call 1259} nVar1212 := proc130(28);
+ call {:si_unique_call 1260} nVar1213 := proc130(28);
+ call {:si_unique_call 1261} nVar1214 := proc130(28);
+ call {:si_unique_call 1262} nVar1215 := proc130(16);
+ call {:si_unique_call 1263} nVar1216 := proc130(12);
+ call {:si_unique_call 1264} nVar1217 := proc130(28);
+ call {:si_unique_call 1265} nVar1218 := proc130(28);
+ call {:si_unique_call 1266} nVar1219 := proc130(28);
+ call {:si_unique_call 1267} nVar1220 := proc130(28);
+ call {:si_unique_call 1268} nVar1221 := proc130(28);
+ call {:si_unique_call 1269} nVar1222 := proc130(16);
+ call {:si_unique_call 1270} nVar1223 := proc130(28);
+ call {:si_unique_call 1271} nVar1224 := proc130(28);
+ call {:si_unique_call 1272} nVar1225 := proc130(28);
+ call {:si_unique_call 1273} nVar1226 := proc130(12);
+ call {:si_unique_call 1274} nVar1227 := proc130(24);
+ call {:si_unique_call 1275} nVar1228 := proc130(28);
+ call {:si_unique_call 1276} nVar1229 := proc130(28);
+ call {:si_unique_call 1277} nVar1230 := proc130(28);
+ call {:si_unique_call 1278} nVar1231 := proc130(28);
+ call {:si_unique_call 1279} nVar1232 := proc130(28);
+ call {:si_unique_call 1280} nVar1233 := proc130(28);
+ call {:si_unique_call 1281} nVar1234 := proc130(28);
+ call {:si_unique_call 1282} nVar1235 := proc130(16);
+ call {:si_unique_call 1283} nVar1236 := proc130(28);
+ call {:si_unique_call 1284} nVar1237 := proc130(28);
+ call {:si_unique_call 1285} nVar1238 := proc130(4);
+ call {:si_unique_call 1286} nVar1239 := proc130(28);
+ call {:si_unique_call 1287} nVar1240 := proc130(28);
+ call {:si_unique_call 1288} nVar1241 := proc130(28);
+ call {:si_unique_call 1289} nVar1242 := proc130(16);
+ call {:si_unique_call 1290} nVar1243 := proc130(28);
+ call {:si_unique_call 1291} nVar1244 := proc130(28);
+ call {:si_unique_call 1292} nVar1245 := proc130(28);
+ call {:si_unique_call 1293} nVar1246 := proc130(28);
+ call {:si_unique_call 1294} nVar1247 := proc130(24);
+ call {:si_unique_call 1295} nVar1248 := proc130(28);
+ call {:si_unique_call 1296} nVar1249 := proc130(28);
+ call {:si_unique_call 1297} nVar1250 := proc130(28);
+ call {:si_unique_call 1298} nVar1251 := proc130(12);
+ call {:si_unique_call 1299} nVar1252 := proc130(28);
+ call {:si_unique_call 1300} nVar1253 := proc130(28);
+ call {:si_unique_call 1301} nVar1255 := proc130(28);
+ call {:si_unique_call 1302} nVar1256 := proc130(28);
+ call {:si_unique_call 1303} nVar1257 := proc130(28);
+ call {:si_unique_call 1304} nVar1258 := proc130(28);
+ call {:si_unique_call 1305} nVar1259 := proc130(28);
+ call {:si_unique_call 1306} nVar1260 := proc130(28);
+ call {:si_unique_call 1307} nVar1261 := proc130(28);
+ call {:si_unique_call 1308} nVar1262 := proc130(28);
+ call {:si_unique_call 1309} nVar1263 := proc130(28);
+ call {:si_unique_call 1310} nVar1264 := proc130(16);
+ call {:si_unique_call 1311} nVar1265 := proc130(28);
+ call {:si_unique_call 1312} nVar1266 := proc130(28);
+ call {:si_unique_call 1313} nVar1267 := proc130(24);
+ call {:si_unique_call 1314} nVar1268 := proc130(24);
+ call {:si_unique_call 1315} nVar1269 := proc130(28);
+ call {:si_unique_call 1316} nVar1270 := proc130(28);
+ call {:si_unique_call 1317} nVar1271 := proc130(28);
+ call {:si_unique_call 1318} nVar1272 := proc130(28);
+ call {:si_unique_call 1319} nVar1273 := proc130(28);
+ call {:si_unique_call 1320} nVar1274 := proc130(12);
+ call {:si_unique_call 1321} nVar1275 := proc130(12);
+ call {:si_unique_call 1322} nVar1276 := proc130(28);
+ call {:si_unique_call 1323} nVar1277 := proc130(28);
+ call {:si_unique_call 1324} nVar1278 := proc130(28);
+ call {:si_unique_call 1325} nVar1279 := proc130(16);
+ call {:si_unique_call 1326} nVar1280 := proc130(24);
+ call {:si_unique_call 1327} nVar1281 := proc130(28);
+ call {:si_unique_call 1328} nVar1282 := proc130(28);
+ call {:si_unique_call 1329} nVar1283 := proc130(28);
+ call {:si_unique_call 1330} nVar1284 := proc130(28);
+ call {:si_unique_call 1331} nVar1285 := proc130(28);
+ call {:si_unique_call 1332} nVar1286 := proc130(28);
+ call {:si_unique_call 1333} nVar1287 := proc130(28);
+ call {:si_unique_call 1334} nVar1288 := proc130(28);
+ call {:si_unique_call 1335} nVar1289 := proc130(28);
+ call {:si_unique_call 1336} nVar1290 := proc130(28);
+ call {:si_unique_call 1337} nVar1291 := proc130(28);
+ call {:si_unique_call 1338} nVar1292 := proc130(28);
+ call {:si_unique_call 1339} nVar1293 := proc130(28);
+ call {:si_unique_call 1340} nVar1294 := proc130(8);
+ call {:si_unique_call 1341} nVar1295 := proc130(28);
+ call {:si_unique_call 1342} nVar1296 := proc130(28);
+ call {:si_unique_call 1343} nVar1297 := proc130(28);
+ call {:si_unique_call 1344} nVar1298 := proc130(12);
+ call {:si_unique_call 1345} nVar1299 := proc130(28);
+ call {:si_unique_call 1346} nVar1300 := proc130(12);
+ call {:si_unique_call 1347} nVar1301 := proc130(28);
+ call {:si_unique_call 1348} nVar1302 := proc130(28);
+ call {:si_unique_call 1349} nVar1303 := proc130(28);
+ call {:si_unique_call 1350} nVar1304 := proc130(28);
+ call {:si_unique_call 1351} nVar1305 := proc130(28);
+ call {:si_unique_call 1352} nVar1306 := proc130(28);
+ call {:si_unique_call 1353} nVar1307 := proc130(28);
+ call {:si_unique_call 1354} nVar4948 := proc130(16);
+ call {:si_unique_call 1355} nVar1308 := proc130(28);
+ call {:si_unique_call 1356} nVar1309 := proc130(28);
+ call {:si_unique_call 1357} nVar1310 := proc130(28);
+ call {:si_unique_call 1358} nVar1311 := proc130(28);
+ call {:si_unique_call 1359} nVar1312 := proc130(28);
+ call {:si_unique_call 1360} nVar1313 := proc130(28);
+ call {:si_unique_call 1361} nVar1314 := proc130(28);
+ call {:si_unique_call 1362} nVar1315 := proc130(28);
+ call {:si_unique_call 1363} nVar1316 := proc130(28);
+ call {:si_unique_call 1364} nVar1317 := proc130(12);
+ call {:si_unique_call 1365} nVar1318 := proc130(28);
+ call {:si_unique_call 1366} nVar1319 := proc130(28);
+ call {:si_unique_call 1367} nVar1320 := proc130(28);
+ call {:si_unique_call 1368} nVar1321 := proc130(28);
+ call {:si_unique_call 1369} nVar1322 := proc130(4);
+ call {:si_unique_call 1370} nVar1323 := proc130(28);
+ call {:si_unique_call 1371} nVar1324 := proc130(8);
+ call {:si_unique_call 1372} nVar1325 := proc130(28);
+ call {:si_unique_call 1373} nVar1326 := proc130(28);
+ call {:si_unique_call 1374} nVar1327 := proc130(28);
+ call {:si_unique_call 1375} nVar1328 := proc130(12);
+ call {:si_unique_call 1376} nVar1329 := proc130(28);
+ call {:si_unique_call 1377} nVar1330 := proc130(28);
+ call {:si_unique_call 1378} nVar1331 := proc130(28);
+ call {:si_unique_call 1379} nVar1332 := proc130(28);
+ call {:si_unique_call 1380} nVar1333 := proc130(28);
+ call {:si_unique_call 1381} nVar1334 := proc130(28);
+ call {:si_unique_call 1382} nVar1335 := proc130(28);
+ call {:si_unique_call 1383} nVar1336 := proc130(28);
+ call {:si_unique_call 1384} nVar1337 := proc130(12);
+ call {:si_unique_call 1385} nVar1338 := proc130(28);
+ call {:si_unique_call 1386} nVar1339 := proc130(24);
+ call {:si_unique_call 1387} nVar1340 := proc130(4);
+ call {:si_unique_call 1388} nVar1341 := proc130(28);
+ call {:si_unique_call 1389} nVar1342 := proc130(28);
+ call {:si_unique_call 1390} nVar1343 := proc130(16);
+ call {:si_unique_call 1391} nVar1344 := proc130(28);
+ call {:si_unique_call 1392} nVar1345 := proc130(28);
+ call {:si_unique_call 1393} nVar1346 := proc130(28);
+ call {:si_unique_call 1394} nVar1347 := proc130(16);
+ call {:si_unique_call 1395} nVar1348 := proc130(28);
+ call {:si_unique_call 1396} nVar1349 := proc130(28);
+ call {:si_unique_call 1397} nVar1350 := proc130(28);
+ call {:si_unique_call 1398} nVar1351 := proc130(28);
+ call {:si_unique_call 1399} nVar1352 := proc130(28);
+ call {:si_unique_call 1400} nVar1353 := proc130(28);
+ call {:si_unique_call 1401} nVar1354 := proc130(28);
+ call {:si_unique_call 1402} nVar1355 := proc130(28);
+ call {:si_unique_call 1403} nVar1356 := proc130(28);
+ call {:si_unique_call 1404} nVar1357 := proc130(28);
+ call {:si_unique_call 1405} nVar1358 := proc130(28);
+ call {:si_unique_call 1406} nVar1359 := proc130(28);
+ call {:si_unique_call 1407} nVar1360 := proc130(28);
+ call {:si_unique_call 1408} nVar1361 := proc130(28);
+ call {:si_unique_call 1409} nVar1362 := proc130(28);
+ call {:si_unique_call 1410} nVar1363 := proc130(12);
+ call {:si_unique_call 1411} nVar1364 := proc130(28);
+ call {:si_unique_call 1412} nVar1365 := proc130(28);
+ call {:si_unique_call 1413} nVar1366 := proc130(16);
+ call {:si_unique_call 1414} nVar1367 := proc130(28);
+ call {:si_unique_call 1415} nVar1368 := proc130(28);
+ call {:si_unique_call 1416} nVar1369 := proc130(28);
+ call {:si_unique_call 1417} nVar1370 := proc130(28);
+ call {:si_unique_call 1418} nVar1371 := proc130(12);
+ call {:si_unique_call 1419} nVar1372 := proc130(28);
+ call {:si_unique_call 1420} nVar1373 := proc130(12);
+ call {:si_unique_call 1421} nVar1374 := proc130(28);
+ call {:si_unique_call 1422} nVar1375 := proc130(28);
+ call {:si_unique_call 1423} nVar1376 := proc130(28);
+ call {:si_unique_call 1424} nVar1377 := proc130(4);
+ call {:si_unique_call 1425} nVar1378 := proc130(28);
+ call {:si_unique_call 1426} nVar1379 := proc130(4);
+ call {:si_unique_call 1427} nVar1380 := proc130(28);
+ call {:si_unique_call 1428} nVar1381 := proc130(28);
+ call {:si_unique_call 1429} nVar1382 := proc130(28);
+ call {:si_unique_call 1430} nVar1383 := proc130(28);
+ call {:si_unique_call 1431} nVar1384 := proc130(28);
+ call {:si_unique_call 1432} nVar1385 := proc130(28);
+ call {:si_unique_call 1433} nVar1386 := proc130(28);
+ call {:si_unique_call 1434} nVar1387 := proc130(28);
+ call {:si_unique_call 1435} nVar1388 := proc130(28);
+ call {:si_unique_call 1436} nVar1389 := proc130(28);
+ call {:si_unique_call 1437} nVar1390 := proc130(28);
+ call {:si_unique_call 1438} nVar1391 := proc130(4);
+ call {:si_unique_call 1439} nVar1392 := proc130(28);
+ call {:si_unique_call 1440} nVar1393 := proc130(16);
+ call {:si_unique_call 1441} nVar1394 := proc130(28);
+ call {:si_unique_call 1442} nVar1395 := proc130(28);
+ call {:si_unique_call 1443} nVar1396 := proc130(28);
+ call {:si_unique_call 1444} nVar1397 := proc130(28);
+ call {:si_unique_call 1445} nVar1398 := proc130(16);
+ call {:si_unique_call 1446} nVar1399 := proc130(28);
+ call {:si_unique_call 1447} nVar1400 := proc130(28);
+ call {:si_unique_call 1448} nVar1401 := proc130(12);
+ call {:si_unique_call 1449} nVar1402 := proc130(16);
+ call {:si_unique_call 1450} nVar1403 := proc130(28);
+ call {:si_unique_call 1451} nVar1404 := proc130(28);
+ call {:si_unique_call 1452} nVar1405 := proc130(28);
+ call {:si_unique_call 1453} nVar1406 := proc130(28);
+ call {:si_unique_call 1454} nVar1407 := proc130(28);
+ call {:si_unique_call 1455} nVar1408 := proc130(16);
+ call {:si_unique_call 1456} nVar1409 := proc130(28);
+ call {:si_unique_call 1457} nVar1410 := proc130(12);
+ call {:si_unique_call 1458} nVar1411 := proc130(28);
+ call {:si_unique_call 1459} nVar1412 := proc130(28);
+ call {:si_unique_call 1460} nVar1413 := proc130(28);
+ call {:si_unique_call 1461} nVar1414 := proc130(28);
+ call {:si_unique_call 1462} nVar1415 := proc130(28);
+ call {:si_unique_call 1463} nVar1416 := proc130(28);
+ call {:si_unique_call 1464} nVar1417 := proc130(28);
+ call {:si_unique_call 1465} nVar1418 := proc130(28);
+ call {:si_unique_call 1466} nVar1419 := proc130(28);
+ call {:si_unique_call 1467} nVar1420 := proc130(28);
+ call {:si_unique_call 1468} nVar1421 := proc130(28);
+ call {:si_unique_call 1469} nVar1422 := proc130(28);
+ call {:si_unique_call 1470} nVar1423 := proc130(28);
+ call {:si_unique_call 1471} nVar1424 := proc130(28);
+ call {:si_unique_call 1472} nVar1425 := proc130(28);
+ call {:si_unique_call 1473} nVar1426 := proc130(28);
+ call {:si_unique_call 1474} nVar1427 := proc130(28);
+ call {:si_unique_call 1475} nVar1428 := proc130(28);
+ call {:si_unique_call 1476} nVar1429 := proc130(28);
+ call {:si_unique_call 1477} nVar1430 := proc130(28);
+ call {:si_unique_call 1478} nVar1431 := proc130(16);
+ call {:si_unique_call 1479} nVar1432 := proc130(24);
+ call {:si_unique_call 1480} nVar1433 := proc130(28);
+ call {:si_unique_call 1481} nVar1434 := proc130(28);
+ call {:si_unique_call 1482} nVar1435 := proc130(28);
+ call {:si_unique_call 1483} nVar1436 := proc130(28);
+ call {:si_unique_call 1484} nVar1437 := proc130(16);
+ call {:si_unique_call 1485} nVar1438 := proc130(28);
+ call {:si_unique_call 1486} nVar1439 := proc130(28);
+ call {:si_unique_call 1487} nVar1440 := proc130(28);
+ call {:si_unique_call 1488} nVar1441 := proc130(28);
+ call {:si_unique_call 1489} nVar1442 := proc130(24);
+ call {:si_unique_call 1490} nVar1443 := proc130(28);
+ call {:si_unique_call 1491} nVar1444 := proc130(28);
+ call {:si_unique_call 1492} nVar1445 := proc130(28);
+ call {:si_unique_call 1493} nVar1446 := proc130(28);
+ call {:si_unique_call 1494} nVar1447 := proc130(28);
+ call {:si_unique_call 1495} nVar1448 := proc130(28);
+ call {:si_unique_call 1496} nVar1449 := proc130(28);
+ call {:si_unique_call 1497} nVar1450 := proc130(28);
+ call {:si_unique_call 1498} nVar1451 := proc130(28);
+ call {:si_unique_call 1499} nVar1452 := proc130(12);
+ call {:si_unique_call 1500} nVar1453 := proc130(28);
+ call {:si_unique_call 1501} nVar1454 := proc130(28);
+ call {:si_unique_call 1502} nVar1455 := proc130(4);
+ call {:si_unique_call 1503} nVar1456 := proc130(28);
+ call {:si_unique_call 1504} nVar1457 := proc130(16);
+ call {:si_unique_call 1505} nVar1458 := proc130(28);
+ call {:si_unique_call 1506} nVar1459 := proc130(12);
+ call {:si_unique_call 1507} nVar1460 := proc130(24);
+ call {:si_unique_call 1508} nVar1461 := proc130(28);
+ call {:si_unique_call 1509} nVar1462 := proc130(28);
+ call {:si_unique_call 1510} nVar1463 := proc130(24);
+ call {:si_unique_call 1511} nVar1464 := proc130(28);
+ call {:si_unique_call 1512} nVar1465 := proc130(28);
+ call {:si_unique_call 1513} nVar1466 := proc130(28);
+ call {:si_unique_call 1514} nVar1467 := proc130(28);
+ call {:si_unique_call 1515} nVar1468 := proc130(4);
+ call {:si_unique_call 1516} nVar1469 := proc130(28);
+ call {:si_unique_call 1517} nVar1470 := proc130(28);
+ call {:si_unique_call 1518} nVar1471 := proc130(28);
+ call {:si_unique_call 1519} nVar1472 := proc130(16);
+ call {:si_unique_call 1520} nVar1473 := proc130(16);
+ call {:si_unique_call 1521} nVar1474 := proc130(28);
+ call {:si_unique_call 1522} nVar1475 := proc130(28);
+ call {:si_unique_call 1523} nVar1476 := proc130(4);
+ call {:si_unique_call 1524} nVar1477 := proc130(28);
+ call {:si_unique_call 1525} nVar1478 := proc130(28);
+ call {:si_unique_call 1526} nVar1479 := proc130(28);
+ call {:si_unique_call 1527} nVar1480 := proc130(28);
+ call {:si_unique_call 1528} nVar1481 := proc130(28);
+ call {:si_unique_call 1529} nVar1482 := proc130(28);
+ call {:si_unique_call 1530} nVar1483 := proc130(28);
+ call {:si_unique_call 1531} nVar1484 := proc130(28);
+ call {:si_unique_call 1532} nVar1485 := proc130(28);
+ call {:si_unique_call 1533} nVar1486 := proc130(28);
+ call {:si_unique_call 1534} nVar1487 := proc130(28);
+ call {:si_unique_call 1535} nVar4949 := proc130(16);
+ call {:si_unique_call 1536} nVar1488 := proc130(28);
+ call {:si_unique_call 1537} nVar1489 := proc130(28);
+ call {:si_unique_call 1538} nVar1490 := proc130(28);
+ call {:si_unique_call 1539} nVar1491 := proc130(28);
+ call {:si_unique_call 1540} nVar1492 := proc130(28);
+ call {:si_unique_call 1541} nVar1493 := proc130(24);
+ call {:si_unique_call 1542} nVar1494 := proc130(28);
+ call {:si_unique_call 1543} nVar1495 := proc130(28);
+ call {:si_unique_call 1544} nVar1496 := proc130(28);
+ call {:si_unique_call 1545} nVar1497 := proc130(4);
+ call {:si_unique_call 1546} nVar1498 := proc130(28);
+ call {:si_unique_call 1547} nVar1499 := proc130(28);
+ call {:si_unique_call 1548} nVar1500 := proc130(28);
+ call {:si_unique_call 1549} nVar1501 := proc130(28);
+ call {:si_unique_call 1550} nVar1502 := proc130(12);
+ call {:si_unique_call 1551} nVar1503 := proc130(28);
+ call {:si_unique_call 1552} nVar1504 := proc130(12);
+ call {:si_unique_call 1553} nVar1505 := proc130(28);
+ call {:si_unique_call 1554} nVar1506 := proc130(28);
+ call {:si_unique_call 1555} nVar1507 := proc130(28);
+ call {:si_unique_call 1556} nVar1508 := proc130(28);
+ call {:si_unique_call 1557} nVar1509 := proc130(28);
+ call {:si_unique_call 1558} nVar1510 := proc130(28);
+ call {:si_unique_call 1559} nVar1511 := proc130(28);
+ call {:si_unique_call 1560} nVar1512 := proc130(4);
+ call {:si_unique_call 1561} nVar1513 := proc130(28);
+ call {:si_unique_call 1562} nVar1514 := proc130(28);
+ call {:si_unique_call 1563} nVar1515 := proc130(28);
+ call {:si_unique_call 1564} nVar1516 := proc130(16);
+ call {:si_unique_call 1565} nVar1517 := proc130(28);
+ call {:si_unique_call 1566} nVar1518 := proc130(28);
+ call {:si_unique_call 1567} nVar1519 := proc130(16);
+ call {:si_unique_call 1568} nVar1520 := proc130(28);
+ call {:si_unique_call 1569} nVar1521 := proc130(28);
+ call {:si_unique_call 1570} nVar1522 := proc130(28);
+ call {:si_unique_call 1571} nVar1523 := proc130(12);
+ call {:si_unique_call 1572} nVar1524 := proc130(28);
+ call {:si_unique_call 1573} nVar1525 := proc130(28);
+ call {:si_unique_call 1574} nVar1526 := proc130(28);
+ call {:si_unique_call 1575} nVar1527 := proc130(12);
+ call {:si_unique_call 1576} nVar1528 := proc130(28);
+ call {:si_unique_call 1577} nVar1529 := proc130(28);
+ call {:si_unique_call 1578} nVar1530 := proc130(28);
+ call {:si_unique_call 1579} nVar1531 := proc130(28);
+ call {:si_unique_call 1580} nVar1532 := proc130(28);
+ call {:si_unique_call 1581} nVar1533 := proc130(28);
+ call {:si_unique_call 1582} nVar1534 := proc130(28);
+ call {:si_unique_call 1583} nVar1535 := proc130(28);
+ call {:si_unique_call 1584} nVar1536 := proc130(28);
+ call {:si_unique_call 1585} nVar1537 := proc130(28);
+ call {:si_unique_call 1586} nVar1538 := proc130(28);
+ call {:si_unique_call 1587} nVar1539 := proc130(28);
+ call {:si_unique_call 1588} nVar1540 := proc130(28);
+ call {:si_unique_call 1589} nVar1541 := proc130(28);
+ call {:si_unique_call 1590} nVar1542 := proc130(28);
+ call {:si_unique_call 1591} nVar1543 := proc130(28);
+ call {:si_unique_call 1592} nVar1544 := proc130(28);
+ call {:si_unique_call 1593} nVar1545 := proc130(28);
+ call {:si_unique_call 1594} nVar1546 := proc130(28);
+ call {:si_unique_call 1595} nVar1547 := proc130(28);
+ call {:si_unique_call 1596} nVar1548 := proc130(16);
+ call {:si_unique_call 1597} nVar1549 := proc130(28);
+ call {:si_unique_call 1598} nVar1550 := proc130(16);
+ call {:si_unique_call 1599} nVar1551 := proc130(28);
+ call {:si_unique_call 1600} nVar1552 := proc130(28);
+ call {:si_unique_call 1601} nVar1553 := proc130(28);
+ call {:si_unique_call 1602} nVar1554 := proc130(28);
+ call {:si_unique_call 1603} nVar1555 := proc130(28);
+ call {:si_unique_call 1604} nVar1556 := proc130(28);
+ call {:si_unique_call 1605} nVar1557 := proc130(28);
+ call {:si_unique_call 1606} nVar1558 := proc130(28);
+ call {:si_unique_call 1607} nVar1559 := proc130(28);
+ call {:si_unique_call 1608} nVar1560 := proc130(24);
+ call {:si_unique_call 1609} nVar1561 := proc130(28);
+ call {:si_unique_call 1610} nVar1562 := proc130(28);
+ call {:si_unique_call 1611} nVar1563 := proc130(28);
+ call {:si_unique_call 1612} nVar1564 := proc130(28);
+ call {:si_unique_call 1613} nVar1565 := proc130(16);
+ call {:si_unique_call 1614} nVar1566 := proc130(28);
+ call {:si_unique_call 1615} nVar1567 := proc130(28);
+ call {:si_unique_call 1616} nVar1568 := proc130(28);
+ call {:si_unique_call 1617} nVar1569 := proc130(28);
+ call {:si_unique_call 1618} nVar1570 := proc130(12);
+ call {:si_unique_call 1619} nVar1571 := proc130(28);
+ call {:si_unique_call 1620} nVar1572 := proc130(28);
+ call {:si_unique_call 1621} nVar1573 := proc130(28);
+ call {:si_unique_call 1622} nVar1574 := proc130(28);
+ call {:si_unique_call 1623} nVar1575 := proc130(28);
+ call {:si_unique_call 1624} nVar1576 := proc130(28);
+ call {:si_unique_call 1625} nVar1577 := proc130(28);
+ call {:si_unique_call 1626} nVar1578 := proc130(28);
+ call {:si_unique_call 1627} nVar1579 := proc130(28);
+ call {:si_unique_call 1628} nVar1580 := proc130(28);
+ call {:si_unique_call 1629} nVar1581 := proc130(28);
+ call {:si_unique_call 1630} nVar1582 := proc130(28);
+ call {:si_unique_call 1631} nVar1583 := proc130(16);
+ call {:si_unique_call 1632} nVar1584 := proc130(4);
+ call {:si_unique_call 1633} nVar1585 := proc130(12);
+ call {:si_unique_call 1634} nVar1586 := proc130(28);
+ call {:si_unique_call 1635} nVar1587 := proc130(28);
+ call {:si_unique_call 1636} nVar1588 := proc130(28);
+ call {:si_unique_call 1637} nVar1589 := proc130(16);
+ call {:si_unique_call 1638} nVar1590 := proc130(28);
+ call {:si_unique_call 1639} nVar1591 := proc130(28);
+ call {:si_unique_call 1640} nVar1592 := proc130(16);
+ call {:si_unique_call 1641} nVar1593 := proc130(28);
+ call {:si_unique_call 1642} nVar1594 := proc130(28);
+ call {:si_unique_call 1643} nVar1595 := proc130(28);
+ call {:si_unique_call 1644} nVar1596 := proc130(12);
+ call {:si_unique_call 1645} nVar1597 := proc130(28);
+ call {:si_unique_call 1646} nVar1598 := proc130(28);
+ call {:si_unique_call 1647} nVar1599 := proc130(28);
+ call {:si_unique_call 1648} nVar1600 := proc130(4);
+ call {:si_unique_call 1649} nVar1601 := proc130(28);
+ call {:si_unique_call 1650} nVar1602 := proc130(28);
+ call {:si_unique_call 1651} nVar1603 := proc130(28);
+ call {:si_unique_call 1652} nVar1604 := proc130(28);
+ call {:si_unique_call 1653} nVar1605 := proc130(24);
+ call {:si_unique_call 1654} nVar1606 := proc130(28);
+ call {:si_unique_call 1655} nVar1607 := proc130(28);
+ call {:si_unique_call 1656} nVar1608 := proc130(28);
+ call {:si_unique_call 1657} nVar1609 := proc130(28);
+ call {:si_unique_call 1658} nVar1610 := proc130(12);
+ call {:si_unique_call 1659} nVar1611 := proc130(28);
+ call {:si_unique_call 1660} nVar1612 := proc130(28);
+ call {:si_unique_call 1661} nVar1613 := proc130(16);
+ call {:si_unique_call 1662} nVar1614 := proc130(28);
+ call {:si_unique_call 1663} nVar1615 := proc130(28);
+ call {:si_unique_call 1664} nVar1616 := proc130(28);
+ call {:si_unique_call 1665} nVar1617 := proc130(28);
+ call {:si_unique_call 1666} nVar1618 := proc130(28);
+ call {:si_unique_call 1667} nVar1619 := proc130(28);
+ call {:si_unique_call 1668} nVar1620 := proc130(28);
+ call {:si_unique_call 1669} nVar1621 := proc130(28);
+ call {:si_unique_call 1670} nVar1622 := proc130(28);
+ call {:si_unique_call 1671} nVar1623 := proc130(28);
+ call {:si_unique_call 1672} nVar1624 := proc130(28);
+ call {:si_unique_call 1673} nVar1625 := proc130(28);
+ call {:si_unique_call 1674} nVar1626 := proc130(28);
+ call {:si_unique_call 1675} nVar1627 := proc130(28);
+ call {:si_unique_call 1676} nVar1628 := proc130(28);
+ call {:si_unique_call 1677} nVar1629 := proc130(12);
+ call {:si_unique_call 1678} nVar1630 := proc130(12);
+ call {:si_unique_call 1679} nVar1631 := proc130(16);
+ call {:si_unique_call 1680} nVar1632 := proc130(16);
+ call {:si_unique_call 1681} nVar1633 := proc130(28);
+ call {:si_unique_call 1682} nVar1634 := proc130(28);
+ call {:si_unique_call 1683} nVar1635 := proc130(28);
+ call {:si_unique_call 1684} nVar1636 := proc130(28);
+ call {:si_unique_call 1685} nVar1637 := proc130(28);
+ call {:si_unique_call 1686} nVar1638 := proc130(4);
+ call {:si_unique_call 1687} nVar1639 := proc130(28);
+ call {:si_unique_call 1688} nVar1640 := proc130(28);
+ call {:si_unique_call 1689} nVar1641 := proc130(16);
+ call {:si_unique_call 1690} nVar1642 := proc130(28);
+ call {:si_unique_call 1691} nVar1643 := proc130(28);
+ call {:si_unique_call 1692} nVar1644 := proc130(28);
+ call {:si_unique_call 1693} nVar1645 := proc130(16);
+ call {:si_unique_call 1694} nVar1646 := proc130(28);
+ call {:si_unique_call 1695} nVar1647 := proc130(28);
+ call {:si_unique_call 1696} nVar1648 := proc130(28);
+ call {:si_unique_call 1697} nVar1649 := proc130(28);
+ call {:si_unique_call 1698} nVar1650 := proc130(28);
+ call {:si_unique_call 1699} nVar1651 := proc130(28);
+ call {:si_unique_call 1700} nVar1652 := proc130(28);
+ call {:si_unique_call 1701} nVar1653 := proc130(28);
+ call {:si_unique_call 1702} nVar1654 := proc130(28);
+ call {:si_unique_call 1703} nVar1655 := proc130(28);
+ call {:si_unique_call 1704} nVar1656 := proc130(28);
+ call {:si_unique_call 1705} nVar1657 := proc130(28);
+ call {:si_unique_call 1706} nVar1658 := proc130(28);
+ call {:si_unique_call 1707} nVar1659 := proc130(28);
+ call {:si_unique_call 1708} nVar1660 := proc130(28);
+ call {:si_unique_call 1709} nVar1661 := proc130(28);
+ call {:si_unique_call 1710} nVar1662 := proc130(28);
+ call {:si_unique_call 1711} nVar1663 := proc130(28);
+ call {:si_unique_call 1712} nVar1664 := proc130(16);
+ call {:si_unique_call 1713} nVar1665 := proc130(4);
+ call {:si_unique_call 1714} nVar1666 := proc130(4);
+ call {:si_unique_call 1715} nVar1667 := proc130(28);
+ call {:si_unique_call 1716} nVar4950 := proc130(8);
+ call {:si_unique_call 1717} nVar1668 := proc130(28);
+ call {:si_unique_call 1718} nVar1669 := proc130(28);
+ call {:si_unique_call 1719} nVar1670 := proc130(28);
+ call {:si_unique_call 1720} nVar1671 := proc130(28);
+ call {:si_unique_call 1721} nVar1672 := proc130(28);
+ call {:si_unique_call 1722} nVar1673 := proc130(28);
+ call {:si_unique_call 1723} nVar1674 := proc130(28);
+ call {:si_unique_call 1724} nVar1675 := proc130(28);
+ call {:si_unique_call 1725} nVar1676 := proc130(56);
+ call {:si_unique_call 1726} nVar1677 := proc130(28);
+ call {:si_unique_call 1727} nVar1678 := proc130(16);
+ call {:si_unique_call 1728} nVar1679 := proc130(28);
+ call {:si_unique_call 1729} nVar1680 := proc130(28);
+ call {:si_unique_call 1730} nVar1681 := proc130(28);
+ call {:si_unique_call 1731} nVar1682 := proc130(28);
+ call {:si_unique_call 1732} nVar1683 := proc130(28);
+ call {:si_unique_call 1733} nVar1684 := proc130(28);
+ call {:si_unique_call 1734} nVar1685 := proc130(4);
+ call {:si_unique_call 1735} nVar1686 := proc130(28);
+ call {:si_unique_call 1736} nVar1687 := proc130(28);
+ call {:si_unique_call 1737} nVar1688 := proc130(28);
+ call {:si_unique_call 1738} nVar1689 := proc130(28);
+ call {:si_unique_call 1739} nVar1690 := proc130(16);
+ call {:si_unique_call 1740} nVar1691 := proc130(28);
+ call {:si_unique_call 1741} nVar1692 := proc130(28);
+ call {:si_unique_call 1742} nVar1693 := proc130(28);
+ call {:si_unique_call 1743} nVar1694 := proc130(28);
+ call {:si_unique_call 1744} nVar1695 := proc130(28);
+ call {:si_unique_call 1745} nVar1696 := proc130(28);
+ call {:si_unique_call 1746} nVar4951 := proc130(16);
+ call {:si_unique_call 1747} nVar1697 := proc130(28);
+ call {:si_unique_call 1748} nVar1698 := proc130(28);
+ call {:si_unique_call 1749} nVar1699 := proc130(28);
+ call {:si_unique_call 1750} nVar1700 := proc130(4);
+ call {:si_unique_call 1751} nVar1701 := proc130(28);
+ call {:si_unique_call 1752} nVar1702 := proc130(28);
+ call {:si_unique_call 1753} nVar1703 := proc130(16);
+ call {:si_unique_call 1754} nVar1704 := proc130(28);
+ call {:si_unique_call 1755} nVar1705 := proc130(28);
+ call {:si_unique_call 1756} nVar1706 := proc130(28);
+ call {:si_unique_call 1757} nVar1707 := proc130(28);
+ call {:si_unique_call 1758} nVar1708 := proc130(28);
+ call {:si_unique_call 1759} nVar1709 := proc130(28);
+ call {:si_unique_call 1760} nVar1710 := proc130(28);
+ call {:si_unique_call 1761} nVar1711 := proc130(12);
+ call {:si_unique_call 1762} nVar1712 := proc130(12);
+ call {:si_unique_call 1763} nVar1713 := proc130(28);
+ call {:si_unique_call 1764} nVar1714 := proc130(28);
+ call {:si_unique_call 1765} nVar1715 := proc130(16);
+ call {:si_unique_call 1766} nVar1716 := proc130(24);
+ call {:si_unique_call 1767} nVar1717 := proc130(28);
+ call {:si_unique_call 1768} nVar1718 := proc130(8);
+ call {:si_unique_call 1769} nVar1719 := proc130(28);
+ call {:si_unique_call 1770} nVar1720 := proc130(28);
+ call {:si_unique_call 1771} nVar1721 := proc130(28);
+ call {:si_unique_call 1772} nVar1722 := proc130(28);
+ call {:si_unique_call 1773} nVar1723 := proc130(28);
+ call {:si_unique_call 1774} nVar1724 := proc130(28);
+ call {:si_unique_call 1775} nVar1725 := proc130(28);
+ call {:si_unique_call 1776} nVar1726 := proc130(28);
+ call {:si_unique_call 1777} nVar1727 := proc130(28);
+ call {:si_unique_call 1778} nVar1728 := proc130(28);
+ call {:si_unique_call 1779} nVar1729 := proc130(24);
+ call {:si_unique_call 1780} nVar1730 := proc130(28);
+ call {:si_unique_call 1781} nVar1731 := proc130(28);
+ call {:si_unique_call 1782} nVar1732 := proc130(28);
+ call {:si_unique_call 1783} nVar1733 := proc130(28);
+ call {:si_unique_call 1784} nVar1734 := proc130(28);
+ call {:si_unique_call 1785} nVar1735 := proc130(28);
+ call {:si_unique_call 1786} nVar1736 := proc130(28);
+ call {:si_unique_call 1787} nVar1737 := proc130(28);
+ call {:si_unique_call 1788} nVar1738 := proc130(28);
+ call {:si_unique_call 1789} nVar1739 := proc130(28);
+ call {:si_unique_call 1790} nVar1740 := proc130(28);
+ call {:si_unique_call 1791} nVar1741 := proc130(28);
+ call {:si_unique_call 1792} nVar1742 := proc130(28);
+ call {:si_unique_call 1793} nVar1743 := proc130(28);
+ call {:si_unique_call 1794} nVar1744 := proc130(28);
+ call {:si_unique_call 1795} nVar1745 := proc130(28);
+ call {:si_unique_call 1796} nVar1746 := proc130(28);
+ call {:si_unique_call 1797} nVar1747 := proc130(28);
+ call {:si_unique_call 1798} nVar1748 := proc130(28);
+ call {:si_unique_call 1799} nVar1749 := proc130(28);
+ call {:si_unique_call 1800} nVar1750 := proc130(28);
+ call {:si_unique_call 1801} nVar1751 := proc130(28);
+ call {:si_unique_call 1802} nVar1752 := proc130(28);
+ call {:si_unique_call 1803} nVar1753 := proc130(28);
+ call {:si_unique_call 1804} nVar1754 := proc130(28);
+ call {:si_unique_call 1805} nVar1755 := proc130(28);
+ call {:si_unique_call 1806} nVar1756 := proc130(56);
+ call {:si_unique_call 1807} nVar1757 := proc130(28);
+ call {:si_unique_call 1808} nVar1758 := proc130(28);
+ call {:si_unique_call 1809} nVar1759 := proc130(28);
+ call {:si_unique_call 1810} nVar1760 := proc130(28);
+ call {:si_unique_call 1811} nVar1761 := proc130(28);
+ call {:si_unique_call 1812} nVar1762 := proc130(28);
+ call {:si_unique_call 1813} nVar1763 := proc130(28);
+ call {:si_unique_call 1814} nVar4952 := proc130(16);
+ call {:si_unique_call 1815} nVar1764 := proc130(28);
+ call {:si_unique_call 1816} nVar1765 := proc130(28);
+ call {:si_unique_call 1817} nVar1766 := proc130(28);
+ call {:si_unique_call 1818} nVar1767 := proc130(28);
+ call {:si_unique_call 1819} nVar1768 := proc130(28);
+ call {:si_unique_call 1820} nVar1769 := proc130(28);
+ call {:si_unique_call 1821} nVar1770 := proc130(16);
+ call {:si_unique_call 1822} nVar1771 := proc130(28);
+ call {:si_unique_call 1823} nVar1772 := proc130(28);
+ call {:si_unique_call 1824} nVar1773 := proc130(28);
+ call {:si_unique_call 1825} nVar1774 := proc130(28);
+ call {:si_unique_call 1826} nVar1775 := proc130(28);
+ call {:si_unique_call 1827} nVar1776 := proc130(28);
+ call {:si_unique_call 1828} nVar1777 := proc130(4);
+ call {:si_unique_call 1829} nVar1778 := proc130(28);
+ call {:si_unique_call 1830} nVar1779 := proc130(4);
+ call {:si_unique_call 1831} nVar1780 := proc130(28);
+ call {:si_unique_call 1832} nVar1781 := proc130(28);
+ call {:si_unique_call 1833} nVar1782 := proc130(28);
+ call {:si_unique_call 1834} nVar1783 := proc130(28);
+ call {:si_unique_call 1835} nVar1784 := proc130(28);
+ call {:si_unique_call 1836} nVar1785 := proc130(28);
+ call {:si_unique_call 1837} nVar1786 := proc130(4);
+ call {:si_unique_call 1838} nVar1787 := proc130(28);
+ call {:si_unique_call 1839} nVar1788 := proc130(28);
+ call {:si_unique_call 1840} nVar1789 := proc130(4);
+ call {:si_unique_call 1841} nVar1790 := proc130(16);
+ call {:si_unique_call 1842} nVar1791 := proc130(28);
+ call {:si_unique_call 1843} nVar1792 := proc130(28);
+ call {:si_unique_call 1844} nVar1793 := proc130(12);
+ call {:si_unique_call 1845} nVar1794 := proc130(28);
+ call {:si_unique_call 1846} nVar1795 := proc130(28);
+ call {:si_unique_call 1847} nVar1796 := proc130(12);
+ call {:si_unique_call 1848} nVar1797 := proc130(28);
+ call {:si_unique_call 1849} nVar1798 := proc130(28);
+ call {:si_unique_call 1850} nVar1799 := proc130(28);
+ call {:si_unique_call 1851} nVar1800 := proc130(28);
+ call {:si_unique_call 1852} nVar1801 := proc130(24);
+ call {:si_unique_call 1853} nVar1802 := proc130(4);
+ call {:si_unique_call 1854} nVar1803 := proc130(24);
+ call {:si_unique_call 1855} nVar1804 := proc130(28);
+ call {:si_unique_call 1856} nVar1805 := proc130(28);
+ call {:si_unique_call 1857} nVar1806 := proc130(28);
+ call {:si_unique_call 1858} nVar1807 := proc130(12);
+ call {:si_unique_call 1859} nVar1808 := proc130(28);
+ call {:si_unique_call 1860} nVar1809 := proc130(28);
+ call {:si_unique_call 1861} nVar1810 := proc130(28);
+ call {:si_unique_call 1862} nVar1811 := proc130(24);
+ call {:si_unique_call 1863} nVar1812 := proc130(28);
+ call {:si_unique_call 1864} nVar1813 := proc130(28);
+ call {:si_unique_call 1865} nVar1814 := proc130(28);
+ call {:si_unique_call 1866} nVar1815 := proc130(12);
+ call {:si_unique_call 1867} nVar1816 := proc130(4);
+ call {:si_unique_call 1868} nVar1817 := proc130(28);
+ call {:si_unique_call 1869} nVar1818 := proc130(28);
+ call {:si_unique_call 1870} nVar1819 := proc130(28);
+ call {:si_unique_call 1871} nVar1820 := proc130(28);
+ call {:si_unique_call 1872} nVar1821 := proc130(16);
+ call {:si_unique_call 1873} nVar1822 := proc130(28);
+ call {:si_unique_call 1874} nVar1823 := proc130(28);
+ call {:si_unique_call 1875} nVar1824 := proc130(24);
+ call {:si_unique_call 1876} nVar1825 := proc130(28);
+ call {:si_unique_call 1877} nVar1826 := proc130(28);
+ call {:si_unique_call 1878} nVar1827 := proc130(28);
+ call {:si_unique_call 1879} nVar1828 := proc130(28);
+ call {:si_unique_call 1880} nVar1829 := proc130(28);
+ call {:si_unique_call 1881} nVar1830 := proc130(16);
+ call {:si_unique_call 1882} nVar1831 := proc130(28);
+ call {:si_unique_call 1883} nVar1832 := proc130(24);
+ call {:si_unique_call 1884} nVar1833 := proc130(24);
+ call {:si_unique_call 1885} nVar1834 := proc130(28);
+ call {:si_unique_call 1886} nVar1835 := proc130(28);
+ call {:si_unique_call 1887} nVar1836 := proc130(28);
+ call {:si_unique_call 1888} nVar1837 := proc130(28);
+ call {:si_unique_call 1889} nVar1838 := proc130(16);
+ call {:si_unique_call 1890} nVar1839 := proc130(28);
+ call {:si_unique_call 1891} nVar1840 := proc130(28);
+ call {:si_unique_call 1892} nVar1841 := proc130(4);
+ call {:si_unique_call 1893} nVar1842 := proc130(28);
+ call {:si_unique_call 1894} nVar1843 := proc130(28);
+ call {:si_unique_call 1895} nVar1844 := proc130(28);
+ call {:si_unique_call 1896} nVar1845 := proc130(12);
+ call {:si_unique_call 1897} nVar1846 := proc130(12);
+ call {:si_unique_call 1898} nVar1847 := proc130(28);
+ call {:si_unique_call 1899} nVar1848 := proc130(28);
+ call {:si_unique_call 1900} nVar1849 := proc130(28);
+ call {:si_unique_call 1901} nVar1850 := proc130(28);
+ call {:si_unique_call 1902} nVar1851 := proc130(28);
+ call {:si_unique_call 1903} nVar1852 := proc130(12);
+ call {:si_unique_call 1904} nVar1853 := proc130(4);
+ call {:si_unique_call 1905} nVar1854 := proc130(28);
+ call {:si_unique_call 1906} nVar1855 := proc130(28);
+ call {:si_unique_call 1907} nVar1856 := proc130(28);
+ call {:si_unique_call 1908} nVar1857 := proc130(28);
+ call {:si_unique_call 1909} nVar1858 := proc130(28);
+ call {:si_unique_call 1910} nVar1859 := proc130(28);
+ call {:si_unique_call 1911} nVar1860 := proc130(28);
+ call {:si_unique_call 1912} nVar1861 := proc130(28);
+ call {:si_unique_call 1913} nVar1862 := proc130(28);
+ call {:si_unique_call 1914} nVar1863 := proc130(28);
+ call {:si_unique_call 1915} nVar1864 := proc130(28);
+ call {:si_unique_call 1916} nVar1865 := proc130(28);
+ call {:si_unique_call 1917} nVar1866 := proc130(28);
+ call {:si_unique_call 1918} nVar1867 := proc130(28);
+ call {:si_unique_call 1919} nVar1868 := proc130(28);
+ call {:si_unique_call 1920} nVar1869 := proc130(28);
+ call {:si_unique_call 1921} nVar1870 := proc130(28);
+ call {:si_unique_call 1922} nVar1871 := proc130(4);
+ call {:si_unique_call 1923} nVar1872 := proc130(24);
+ call {:si_unique_call 1924} nVar1873 := proc130(28);
+ call {:si_unique_call 1925} nVar1874 := proc130(12);
+ call {:si_unique_call 1926} nVar1875 := proc130(28);
+ call {:si_unique_call 1927} nVar1876 := proc130(28);
+ call {:si_unique_call 1928} nVar1877 := proc130(28);
+ call {:si_unique_call 1929} nVar1878 := proc130(28);
+ call {:si_unique_call 1930} nVar1879 := proc130(28);
+ call {:si_unique_call 1931} nVar1880 := proc130(12);
+ call {:si_unique_call 1932} nVar1881 := proc130(28);
+ call {:si_unique_call 1933} nVar1882 := proc130(28);
+ call {:si_unique_call 1934} nVar1883 := proc130(28);
+ call {:si_unique_call 1935} nVar1884 := proc130(24);
+ call {:si_unique_call 1936} nVar1885 := proc130(28);
+ call {:si_unique_call 1937} nVar1886 := proc130(28);
+ call {:si_unique_call 1938} nVar1887 := proc130(28);
+ call {:si_unique_call 1939} nVar1888 := proc130(28);
+ call {:si_unique_call 1940} nVar1889 := proc130(28);
+ call {:si_unique_call 1941} nVar1890 := proc130(28);
+ call {:si_unique_call 1942} nVar1891 := proc130(28);
+ call {:si_unique_call 1943} nVar1892 := proc130(28);
+ call {:si_unique_call 1944} nVar1893 := proc130(28);
+ call {:si_unique_call 1945} nVar1894 := proc130(28);
+ call {:si_unique_call 1946} nVar1895 := proc130(16);
+ call {:si_unique_call 1947} nVar1896 := proc130(4);
+ call {:si_unique_call 1948} nVar1897 := proc130(12);
+ call {:si_unique_call 1949} nVar1898 := proc130(28);
+ call {:si_unique_call 1950} nVar1899 := proc130(28);
+ call {:si_unique_call 1951} nVar1900 := proc130(28);
+ call {:si_unique_call 1952} nVar1901 := proc130(28);
+ call {:si_unique_call 1953} nVar1902 := proc130(28);
+ call {:si_unique_call 1954} nVar1903 := proc130(28);
+ call {:si_unique_call 1955} nVar1904 := proc130(16);
+ call {:si_unique_call 1956} nVar1905 := proc130(28);
+ call {:si_unique_call 1957} nVar1906 := proc130(28);
+ call {:si_unique_call 1958} nVar1907 := proc130(28);
+ call {:si_unique_call 1959} nVar1908 := proc130(28);
+ call {:si_unique_call 1960} nVar1909 := proc130(8);
+ call {:si_unique_call 1961} nVar1910 := proc130(28);
+ call {:si_unique_call 1962} nVar1911 := proc130(28);
+ call {:si_unique_call 1963} nVar4953 := proc130(16);
+ call {:si_unique_call 1964} nVar1912 := proc130(28);
+ call {:si_unique_call 1965} nVar1913 := proc130(28);
+ call {:si_unique_call 1966} nVar1914 := proc130(28);
+ call {:si_unique_call 1967} nVar1915 := proc130(28);
+ call {:si_unique_call 1968} nVar1916 := proc130(28);
+ call {:si_unique_call 1969} nVar1917 := proc130(28);
+ call {:si_unique_call 1970} nVar1918 := proc130(28);
+ call {:si_unique_call 1971} nVar1919 := proc130(28);
+ call {:si_unique_call 1972} nVar1920 := proc130(28);
+ call {:si_unique_call 1973} nVar1921 := proc130(28);
+ call {:si_unique_call 1974} nVar1922 := proc130(4);
+ call {:si_unique_call 1975} nVar1923 := proc130(24);
+ call {:si_unique_call 1976} nVar1924 := proc130(4);
+ call {:si_unique_call 1977} nVar1925 := proc130(28);
+ call {:si_unique_call 1978} nVar1926 := proc130(28);
+ call {:si_unique_call 1979} nVar1928 := proc130(28);
+ call {:si_unique_call 1980} nVar1929 := proc130(28);
+ call {:si_unique_call 1981} nVar1930 := proc130(28);
+ call {:si_unique_call 1982} nVar1931 := proc130(28);
+ call {:si_unique_call 1983} nVar1932 := proc130(28);
+ call {:si_unique_call 1984} nVar1933 := proc130(24);
+ call {:si_unique_call 1985} nVar1934 := proc130(28);
+ call {:si_unique_call 1986} nVar1935 := proc130(28);
+ call {:si_unique_call 1987} nVar1936 := proc130(28);
+ call {:si_unique_call 1988} nVar1937 := proc130(28);
+ call {:si_unique_call 1989} nVar1938 := proc130(16);
+ call {:si_unique_call 1990} nVar1939 := proc130(28);
+ call {:si_unique_call 1991} nVar1940 := proc130(28);
+ call {:si_unique_call 1992} nVar1941 := proc130(28);
+ call {:si_unique_call 1993} nVar1942 := proc130(28);
+ call {:si_unique_call 1994} nVar1943 := proc130(28);
+ call {:si_unique_call 1995} nVar4954 := proc130(16);
+ call {:si_unique_call 1996} nVar1944 := proc130(16);
+ call {:si_unique_call 1997} nVar1945 := proc130(28);
+ call {:si_unique_call 1998} nVar1946 := proc130(24);
+ call {:si_unique_call 1999} nVar1947 := proc130(28);
+ call {:si_unique_call 2000} nVar1948 := proc130(28);
+ call {:si_unique_call 2001} nVar1949 := proc130(28);
+ call {:si_unique_call 2002} nVar1950 := proc130(12);
+ call {:si_unique_call 2003} nVar1951 := proc130(28);
+ call {:si_unique_call 2004} nVar1952 := proc130(28);
+ call {:si_unique_call 2005} nVar1953 := proc130(28);
+ call {:si_unique_call 2006} nVar1954 := proc130(28);
+ call {:si_unique_call 2007} nVar1955 := proc130(28);
+ call {:si_unique_call 2008} nVar1956 := proc130(28);
+ call {:si_unique_call 2009} nVar1957 := proc130(28);
+ call {:si_unique_call 2010} nVar1958 := proc130(28);
+ call {:si_unique_call 2011} nVar1959 := proc130(4);
+ call {:si_unique_call 2012} nVar1960 := proc130(28);
+ call {:si_unique_call 2013} nVar1961 := proc130(28);
+ call {:si_unique_call 2014} nVar1962 := proc130(28);
+ call {:si_unique_call 2015} nVar1963 := proc130(28);
+ call {:si_unique_call 2016} nVar1964 := proc130(28);
+ call {:si_unique_call 2017} nVar1965 := proc130(28);
+ call {:si_unique_call 2018} nVar1966 := proc130(28);
+ call {:si_unique_call 2019} nVar1967 := proc130(28);
+ call {:si_unique_call 2020} nVar1968 := proc130(28);
+ call {:si_unique_call 2021} nVar1969 := proc130(16);
+ call {:si_unique_call 2022} nVar1970 := proc130(28);
+ call {:si_unique_call 2023} nVar1971 := proc130(28);
+ call {:si_unique_call 2024} nVar1972 := proc130(28);
+ call {:si_unique_call 2025} nVar1973 := proc130(28);
+ call {:si_unique_call 2026} nVar1974 := proc130(28);
+ call {:si_unique_call 2027} nVar1975 := proc130(28);
+ call {:si_unique_call 2028} nVar1976 := proc130(28);
+ call {:si_unique_call 2029} nVar1977 := proc130(28);
+ call {:si_unique_call 2030} nVar1978 := proc130(28);
+ call {:si_unique_call 2031} nVar1979 := proc130(28);
+ call {:si_unique_call 2032} nVar1980 := proc130(28);
+ call {:si_unique_call 2033} nVar1981 := proc130(16);
+ call {:si_unique_call 2034} nVar1982 := proc130(28);
+ call {:si_unique_call 2035} nVar1983 := proc130(28);
+ call {:si_unique_call 2036} nVar1984 := proc130(28);
+ call {:si_unique_call 2037} nVar1985 := proc130(24);
+ call {:si_unique_call 2038} nVar1986 := proc130(28);
+ call {:si_unique_call 2039} nVar1987 := proc130(28);
+ call {:si_unique_call 2040} nVar1988 := proc130(12);
+ call {:si_unique_call 2041} nVar1989 := proc130(28);
+ call {:si_unique_call 2042} nVar1990 := proc130(12);
+ call {:si_unique_call 2043} nVar1991 := proc130(28);
+ call {:si_unique_call 2044} nVar1992 := proc130(28);
+ call {:si_unique_call 2045} nVar1993 := proc130(28);
+ call {:si_unique_call 2046} nVar1994 := proc130(12);
+ call {:si_unique_call 2047} nVar1995 := proc130(28);
+ call {:si_unique_call 2048} nVar1996 := proc130(28);
+ call {:si_unique_call 2049} nVar1997 := proc130(12);
+ call {:si_unique_call 2050} nVar1998 := proc130(28);
+ call {:si_unique_call 2051} nVar1999 := proc130(28);
+ call {:si_unique_call 2052} nVar2000 := proc130(28);
+ call {:si_unique_call 2053} nVar2001 := proc130(28);
+ call {:si_unique_call 2054} nVar2002 := proc130(16);
+ call {:si_unique_call 2055} nVar2003 := proc130(28);
+ call {:si_unique_call 2056} nVar2004 := proc130(28);
+ call {:si_unique_call 2057} nVar2005 := proc130(28);
+ call {:si_unique_call 2058} nVar2006 := proc130(28);
+ call {:si_unique_call 2059} nVar2007 := proc130(28);
+ call {:si_unique_call 2060} nVar2008 := proc130(28);
+ call {:si_unique_call 2061} nVar2009 := proc130(28);
+ call {:si_unique_call 2062} nVar2010 := proc130(28);
+ call {:si_unique_call 2063} nVar2011 := proc130(28);
+ call {:si_unique_call 2064} nVar2012 := proc130(28);
+ call {:si_unique_call 2065} nVar2013 := proc130(28);
+ call {:si_unique_call 2066} nVar2014 := proc130(28);
+ call {:si_unique_call 2067} nVar2015 := proc130(28);
+ call {:si_unique_call 2068} nVar2016 := proc130(28);
+ call {:si_unique_call 2069} nVar2017 := proc130(28);
+ call {:si_unique_call 2070} nVar2018 := proc130(28);
+ call {:si_unique_call 2071} nVar2019 := proc130(28);
+ call {:si_unique_call 2072} nVar2020 := proc130(28);
+ call {:si_unique_call 2073} nVar2021 := proc130(28);
+ call {:si_unique_call 2074} nVar2022 := proc130(28);
+ call {:si_unique_call 2075} nVar2023 := proc130(28);
+ call {:si_unique_call 2076} nVar2024 := proc130(28);
+ call {:si_unique_call 2077} nVar2025 := proc130(16);
+ call {:si_unique_call 2078} nVar2026 := proc130(28);
+ call {:si_unique_call 2079} nVar2027 := proc130(28);
+ call {:si_unique_call 2080} nVar2028 := proc130(28);
+ call {:si_unique_call 2081} nVar2029 := proc130(28);
+ call {:si_unique_call 2082} nVar2030 := proc130(28);
+ call {:si_unique_call 2083} nVar2031 := proc130(28);
+ call {:si_unique_call 2084} nVar2032 := proc130(28);
+ call {:si_unique_call 2085} nVar2033 := proc130(28);
+ call {:si_unique_call 2086} nVar2034 := proc130(28);
+ call {:si_unique_call 2087} nVar2035 := proc130(28);
+ call {:si_unique_call 2088} nVar2036 := proc130(16);
+ call {:si_unique_call 2089} nVar2037 := proc130(28);
+ call {:si_unique_call 2090} nVar2038 := proc130(28);
+ call {:si_unique_call 2091} nVar2039 := proc130(28);
+ call {:si_unique_call 2092} nVar2040 := proc130(28);
+ call {:si_unique_call 2093} nVar2041 := proc130(28);
+ call {:si_unique_call 2094} nVar2042 := proc130(28);
+ call {:si_unique_call 2095} nVar2043 := proc130(28);
+ call {:si_unique_call 2096} nVar2044 := proc130(28);
+ call {:si_unique_call 2097} nVar2045 := proc130(28);
+ call {:si_unique_call 2098} nVar2046 := proc130(28);
+ call {:si_unique_call 2099} nVar2047 := proc130(28);
+ call {:si_unique_call 2100} nVar2048 := proc130(28);
+ call {:si_unique_call 2101} nVar2049 := proc130(28);
+ call {:si_unique_call 2102} nVar2050 := proc130(28);
+ call {:si_unique_call 2103} nVar2051 := proc130(28);
+ call {:si_unique_call 2104} nVar2052 := proc130(24);
+ call {:si_unique_call 2105} nVar2053 := proc130(28);
+ call {:si_unique_call 2106} nVar2054 := proc130(28);
+ call {:si_unique_call 2107} nVar2055 := proc130(24);
+ call {:si_unique_call 2108} nVar2056 := proc130(28);
+ call {:si_unique_call 2109} nVar2057 := proc130(28);
+ call {:si_unique_call 2110} nVar2058 := proc130(28);
+ call {:si_unique_call 2111} nVar2059 := proc130(28);
+ call {:si_unique_call 2112} nVar2060 := proc130(28);
+ call {:si_unique_call 2113} nVar2061 := proc130(28);
+ call {:si_unique_call 2114} nVar2062 := proc130(28);
+ call {:si_unique_call 2115} nVar2063 := proc130(28);
+ call {:si_unique_call 2116} nVar2064 := proc130(28);
+ call {:si_unique_call 2117} nVar2065 := proc130(4);
+ call {:si_unique_call 2118} nVar2066 := proc130(28);
+ call {:si_unique_call 2119} nVar2067 := proc130(28);
+ call {:si_unique_call 2120} nVar2068 := proc130(28);
+ call {:si_unique_call 2121} nVar2069 := proc130(28);
+ call {:si_unique_call 2122} nVar2070 := proc130(28);
+ call {:si_unique_call 2123} nVar2071 := proc130(28);
+ call {:si_unique_call 2124} nVar2072 := proc130(28);
+ call {:si_unique_call 2125} nVar2073 := proc130(28);
+ call {:si_unique_call 2126} nVar2074 := proc130(28);
+ call {:si_unique_call 2127} nVar2075 := proc130(12);
+ call {:si_unique_call 2128} nVar2076 := proc130(12);
+ call {:si_unique_call 2129} nVar2077 := proc130(28);
+ call {:si_unique_call 2130} nVar4955 := proc130(16);
+ call {:si_unique_call 2131} nVar2078 := proc130(28);
+ call {:si_unique_call 2132} nVar2079 := proc130(12);
+ call {:si_unique_call 2133} nVar2080 := proc130(16);
+ call {:si_unique_call 2134} nVar2081 := proc130(28);
+ call {:si_unique_call 2135} nVar2082 := proc130(28);
+ call {:si_unique_call 2136} nVar2083 := proc130(28);
+ call {:si_unique_call 2137} nVar2084 := proc130(28);
+ call {:si_unique_call 2138} nVar2085 := proc130(28);
+ call {:si_unique_call 2139} nVar2086 := proc130(28);
+ call {:si_unique_call 2140} nVar2087 := proc130(28);
+ call {:si_unique_call 2141} nVar2088 := proc130(28);
+ call {:si_unique_call 2142} nVar2089 := proc130(28);
+ call {:si_unique_call 2143} nVar2090 := proc130(28);
+ call {:si_unique_call 2144} nVar2091 := proc130(28);
+ call {:si_unique_call 2145} nVar2092 := proc130(28);
+ call {:si_unique_call 2146} nVar2093 := proc130(24);
+ call {:si_unique_call 2147} nVar2094 := proc130(28);
+ call {:si_unique_call 2148} nVar2095 := proc130(4);
+ call {:si_unique_call 2149} nVar2096 := proc130(28);
+ call {:si_unique_call 2150} nVar2097 := proc130(28);
+ call {:si_unique_call 2151} nVar2098 := proc130(28);
+ call {:si_unique_call 2152} nVar2099 := proc130(28);
+ call {:si_unique_call 2153} nVar2100 := proc130(28);
+ call {:si_unique_call 2154} nVar2101 := proc130(12);
+ call {:si_unique_call 2155} nVar2102 := proc130(4);
+ call {:si_unique_call 2156} nVar2104 := proc130(28);
+ call {:si_unique_call 2157} nVar2105 := proc130(28);
+ call {:si_unique_call 2158} nVar2106 := proc130(28);
+ call {:si_unique_call 2159} nVar2107 := proc130(28);
+ call {:si_unique_call 2160} nVar2108 := proc130(28);
+ call {:si_unique_call 2161} nVar2109 := proc130(12);
+ call {:si_unique_call 2162} nVar2110 := proc130(28);
+ call {:si_unique_call 2163} nVar2111 := proc130(24);
+ call {:si_unique_call 2164} nVar2112 := proc130(4);
+ call {:si_unique_call 2165} nVar2113 := proc130(28);
+ call {:si_unique_call 2166} nVar2114 := proc130(28);
+ call {:si_unique_call 2167} nVar2115 := proc130(28);
+ call {:si_unique_call 2168} nVar2116 := proc130(28);
+ call {:si_unique_call 2169} nVar2117 := proc130(12);
+ call {:si_unique_call 2170} nVar2118 := proc130(28);
+ call {:si_unique_call 2171} nVar2119 := proc130(28);
+ call {:si_unique_call 2172} nVar2120 := proc130(4);
+ call {:si_unique_call 2173} nVar2121 := proc130(28);
+ call {:si_unique_call 2174} nVar2122 := proc130(28);
+ call {:si_unique_call 2175} nVar2123 := proc130(28);
+ call {:si_unique_call 2176} nVar2124 := proc130(28);
+ call {:si_unique_call 2177} nVar2125 := proc130(16);
+ call {:si_unique_call 2178} nVar2126 := proc130(28);
+ call {:si_unique_call 2179} nVar2127 := proc130(28);
+ call {:si_unique_call 2180} nVar2128 := proc130(28);
+ call {:si_unique_call 2181} nVar2129 := proc130(28);
+ call {:si_unique_call 2182} nVar2130 := proc130(28);
+ call {:si_unique_call 2183} nVar2131 := proc130(28);
+ call {:si_unique_call 2184} nVar2132 := proc130(28);
+ call {:si_unique_call 2185} nVar2133 := proc130(28);
+ call {:si_unique_call 2186} nVar2134 := proc130(28);
+ call {:si_unique_call 2187} nVar2135 := proc130(4);
+ call {:si_unique_call 2188} nVar2136 := proc130(28);
+ call {:si_unique_call 2189} nVar2137 := proc130(4);
+ call {:si_unique_call 2190} nVar2138 := proc130(28);
+ call {:si_unique_call 2191} nVar2139 := proc130(28);
+ call {:si_unique_call 2192} nVar2140 := proc130(28);
+ call {:si_unique_call 2193} nVar2141 := proc130(28);
+ call {:si_unique_call 2194} nVar2142 := proc130(28);
+ call {:si_unique_call 2195} nVar2143 := proc130(28);
+ call {:si_unique_call 2196} nVar2144 := proc130(28);
+ call {:si_unique_call 2197} nVar2145 := proc130(28);
+ call {:si_unique_call 2198} nVar2146 := proc130(28);
+ call {:si_unique_call 2199} nVar2147 := proc130(28);
+ call {:si_unique_call 2200} nVar2148 := proc130(4);
+ call {:si_unique_call 2201} nVar2149 := proc130(28);
+ call {:si_unique_call 2202} nVar2150 := proc130(28);
+ call {:si_unique_call 2203} nVar2151 := proc130(28);
+ call {:si_unique_call 2204} nVar2152 := proc130(12);
+ call {:si_unique_call 2205} nVar2153 := proc130(28);
+ call {:si_unique_call 2206} nVar2154 := proc130(28);
+ call {:si_unique_call 2207} nVar2155 := proc130(4);
+ call {:si_unique_call 2208} nVar2156 := proc130(28);
+ call {:si_unique_call 2209} nVar2157 := proc130(28);
+ call {:si_unique_call 2210} nVar2158 := proc130(28);
+ call {:si_unique_call 2211} nVar2159 := proc130(28);
+ call {:si_unique_call 2212} nVar2160 := proc130(28);
+ call {:si_unique_call 2213} nVar2161 := proc130(28);
+ call {:si_unique_call 2214} nVar2162 := proc130(28);
+ call {:si_unique_call 2215} nVar2163 := proc130(28);
+ call {:si_unique_call 2216} nVar2164 := proc130(28);
+ call {:si_unique_call 2217} nVar2165 := proc130(28);
+ call {:si_unique_call 2218} nVar2166 := proc130(28);
+ call {:si_unique_call 2219} nVar2167 := proc130(28);
+ call {:si_unique_call 2220} nVar2168 := proc130(28);
+ call {:si_unique_call 2221} nVar2169 := proc130(16);
+ call {:si_unique_call 2222} nVar2170 := proc130(28);
+ call {:si_unique_call 2223} nVar2171 := proc130(12);
+ call {:si_unique_call 2224} nVar2172 := proc130(28);
+ call {:si_unique_call 2225} nVar2173 := proc130(28);
+ call {:si_unique_call 2226} nVar2174 := proc130(16);
+ call {:si_unique_call 2227} nVar2175 := proc130(28);
+ call {:si_unique_call 2228} nVar2176 := proc130(28);
+ call {:si_unique_call 2229} nVar2177 := proc130(28);
+ call {:si_unique_call 2230} nVar2178 := proc130(28);
+ call {:si_unique_call 2231} nVar2180 := proc130(4);
+ call {:si_unique_call 2232} nVar2181 := proc130(24);
+ call {:si_unique_call 2233} nVar2182 := proc130(28);
+ call {:si_unique_call 2234} nVar2183 := proc130(28);
+ call {:si_unique_call 2235} nVar2184 := proc130(28);
+ call {:si_unique_call 2236} nVar2185 := proc130(28);
+ call {:si_unique_call 2237} nVar2186 := proc130(28);
+ call {:si_unique_call 2238} nVar2187 := proc130(28);
+ call {:si_unique_call 2239} nVar2188 := proc130(28);
+ call {:si_unique_call 2240} nVar2189 := proc130(24);
+ call {:si_unique_call 2241} nVar2190 := proc130(28);
+ call {:si_unique_call 2242} nVar2191 := proc130(28);
+ call {:si_unique_call 2243} nVar2192 := proc130(28);
+ call {:si_unique_call 2244} nVar2193 := proc130(12);
+ call {:si_unique_call 2245} nVar2194 := proc130(28);
+ call {:si_unique_call 2246} nVar2195 := proc130(28);
+ call {:si_unique_call 2247} nVar2196 := proc130(28);
+ call {:si_unique_call 2248} nVar2197 := proc130(28);
+ call {:si_unique_call 2249} nVar2198 := proc130(28);
+ call {:si_unique_call 2250} nVar2199 := proc130(28);
+ call {:si_unique_call 2251} nVar2200 := proc130(28);
+ call {:si_unique_call 2252} nVar2201 := proc130(12);
+ call {:si_unique_call 2253} nVar2202 := proc130(28);
+ call {:si_unique_call 2254} nVar2203 := proc130(24);
+ call {:si_unique_call 2255} nVar2204 := proc130(4);
+ call {:si_unique_call 2256} nVar2205 := proc130(4);
+ call {:si_unique_call 2257} nVar2206 := proc130(28);
+ call {:si_unique_call 2258} nVar2207 := proc130(28);
+ call {:si_unique_call 2259} nVar2208 := proc130(4);
+ call {:si_unique_call 2260} nVar2209 := proc130(28);
+ call {:si_unique_call 2261} nVar2210 := proc130(4);
+ call {:si_unique_call 2262} nVar2211 := proc130(28);
+ call {:si_unique_call 2263} nVar2212 := proc130(28);
+ call {:si_unique_call 2264} nVar2213 := proc130(28);
+ call {:si_unique_call 2265} nVar2214 := proc130(28);
+ call {:si_unique_call 2266} nVar2215 := proc130(28);
+ call {:si_unique_call 2267} nVar2216 := proc130(28);
+ call {:si_unique_call 2268} nVar2217 := proc130(28);
+ call {:si_unique_call 2269} nVar2218 := proc130(28);
+ call {:si_unique_call 2270} nVar2219 := proc130(28);
+ call {:si_unique_call 2271} nVar2220 := proc130(28);
+ call {:si_unique_call 2272} nVar2221 := proc130(28);
+ call {:si_unique_call 2273} nVar2222 := proc130(28);
+ call {:si_unique_call 2274} nVar2223 := proc130(28);
+ call {:si_unique_call 2275} nVar2224 := proc130(28);
+ call {:si_unique_call 2276} nVar2225 := proc130(28);
+ call {:si_unique_call 2277} nVar2226 := proc130(16);
+ call {:si_unique_call 2278} nVar2227 := proc130(28);
+ call {:si_unique_call 2279} nVar2228 := proc130(28);
+ call {:si_unique_call 2280} nVar2229 := proc130(28);
+ call {:si_unique_call 2281} nVar2230 := proc130(28);
+ call {:si_unique_call 2282} nVar2231 := proc130(28);
+ call {:si_unique_call 2283} nVar2232 := proc130(28);
+ call {:si_unique_call 2284} nVar2233 := proc130(28);
+ call {:si_unique_call 2285} nVar2234 := proc130(24);
+ call {:si_unique_call 2286} nVar2235 := proc130(4);
+ call {:si_unique_call 2287} nVar2236 := proc130(28);
+ call {:si_unique_call 2288} nVar2237 := proc130(28);
+ call {:si_unique_call 2289} nVar2238 := proc130(28);
+ call {:si_unique_call 2290} nVar2239 := proc130(28);
+ call {:si_unique_call 2291} nVar2240 := proc130(16);
+ call {:si_unique_call 2292} nVar2241 := proc130(28);
+ call {:si_unique_call 2293} nVar2242 := proc130(12);
+ call {:si_unique_call 2294} nVar2243 := proc130(28);
+ call {:si_unique_call 2295} nVar2244 := proc130(28);
+ call {:si_unique_call 2296} nVar2245 := proc130(28);
+ call {:si_unique_call 2297} nVar2246 := proc130(4);
+ call {:si_unique_call 2298} nVar2247 := proc130(28);
+ call {:si_unique_call 2299} nVar2248 := proc130(28);
+ call {:si_unique_call 2300} nVar2249 := proc130(24);
+ call {:si_unique_call 2301} nVar2250 := proc130(28);
+ call {:si_unique_call 2302} nVar2251 := proc130(4);
+ call {:si_unique_call 2303} nVar2252 := proc130(12);
+ call {:si_unique_call 2304} nVar2253 := proc130(28);
+ call {:si_unique_call 2305} nVar2254 := proc130(28);
+ call {:si_unique_call 2306} nVar2255 := proc130(28);
+ call {:si_unique_call 2307} nVar2256 := proc130(28);
+ call {:si_unique_call 2308} nVar2257 := proc130(28);
+ call {:si_unique_call 2309} nVar2258 := proc130(28);
+ call {:si_unique_call 2310} nVar2259 := proc130(12);
+ call {:si_unique_call 2311} nVar2260 := proc130(28);
+ call {:si_unique_call 2312} nVar2261 := proc130(28);
+ call {:si_unique_call 2313} nVar2262 := proc130(28);
+ call {:si_unique_call 2314} nVar2263 := proc130(28);
+ call {:si_unique_call 2315} nVar2264 := proc130(28);
+ call {:si_unique_call 2316} nVar2265 := proc130(28);
+ call {:si_unique_call 2317} nVar2266 := proc130(28);
+ call {:si_unique_call 2318} nVar2267 := proc130(28);
+ call {:si_unique_call 2319} nVar2268 := proc130(28);
+ call {:si_unique_call 2320} nVar2269 := proc130(28);
+ call {:si_unique_call 2321} nVar2270 := proc130(28);
+ call {:si_unique_call 2322} nVar2271 := proc130(28);
+ call {:si_unique_call 2323} nVar2272 := proc130(28);
+ call {:si_unique_call 2324} nVar2273 := proc130(28);
+ call {:si_unique_call 2325} nVar2274 := proc130(28);
+ call {:si_unique_call 2326} nVar2275 := proc130(28);
+ call {:si_unique_call 2327} nVar2276 := proc130(4);
+ call {:si_unique_call 2328} nVar2277 := proc130(28);
+ call {:si_unique_call 2329} nVar2278 := proc130(28);
+ call {:si_unique_call 2330} nVar2279 := proc130(28);
+ call {:si_unique_call 2331} nVar2280 := proc130(28);
+ call {:si_unique_call 2332} nVar2281 := proc130(28);
+ call {:si_unique_call 2333} nVar2282 := proc130(12);
+ call {:si_unique_call 2334} nVar2283 := proc130(28);
+ call {:si_unique_call 2335} nVar2284 := proc130(28);
+ call {:si_unique_call 2336} nVar2285 := proc130(28);
+ call {:si_unique_call 2337} nVar2286 := proc130(28);
+ call {:si_unique_call 2338} nVar2287 := proc130(28);
+ call {:si_unique_call 2339} nVar2288 := proc130(28);
+ call {:si_unique_call 2340} nVar2289 := proc130(28);
+ call {:si_unique_call 2341} nVar2290 := proc130(28);
+ call {:si_unique_call 2342} nVar2291 := proc130(28);
+ call {:si_unique_call 2343} nVar2292 := proc130(28);
+ call {:si_unique_call 2344} nVar2293 := proc130(28);
+ call {:si_unique_call 2345} nVar2294 := proc130(12);
+ call {:si_unique_call 2346} nVar2295 := proc130(28);
+ call {:si_unique_call 2347} nVar2296 := proc130(28);
+ call {:si_unique_call 2348} nVar2297 := proc130(28);
+ call {:si_unique_call 2349} nVar2298 := proc130(28);
+ call {:si_unique_call 2350} nVar2299 := proc130(28);
+ call {:si_unique_call 2351} nVar2300 := proc130(28);
+ call {:si_unique_call 2352} nVar2301 := proc130(28);
+ call {:si_unique_call 2353} nVar2302 := proc130(28);
+ call {:si_unique_call 2354} nVar2303 := proc130(28);
+ call {:si_unique_call 2355} nVar2304 := proc130(28);
+ call {:si_unique_call 2356} nVar2305 := proc130(12);
+ call {:si_unique_call 2357} nVar2306 := proc130(4);
+ call {:si_unique_call 2358} nVar2307 := proc130(28);
+ call {:si_unique_call 2359} nVar2308 := proc130(28);
+ call {:si_unique_call 2360} nVar2309 := proc130(28);
+ call {:si_unique_call 2361} nVar2310 := proc130(28);
+ call {:si_unique_call 2362} nVar2311 := proc130(28);
+ call {:si_unique_call 2363} nVar2312 := proc130(28);
+ call {:si_unique_call 2364} nVar2313 := proc130(28);
+ call {:si_unique_call 2365} nVar2314 := proc130(28);
+ call {:si_unique_call 2366} nVar2315 := proc130(28);
+ call {:si_unique_call 2367} nVar2316 := proc130(28);
+ call {:si_unique_call 2368} nVar2317 := proc130(12);
+ call {:si_unique_call 2369} nVar2318 := proc130(28);
+ call {:si_unique_call 2370} nVar2319 := proc130(28);
+ call {:si_unique_call 2371} nVar2320 := proc130(28);
+ call {:si_unique_call 2372} nVar2321 := proc130(28);
+ call {:si_unique_call 2373} nVar2322 := proc130(28);
+ call {:si_unique_call 2374} nVar2323 := proc130(4);
+ call {:si_unique_call 2375} nVar2324 := proc130(28);
+ call {:si_unique_call 2376} nVar2325 := proc130(28);
+ call {:si_unique_call 2377} nVar2326 := proc130(24);
+ call {:si_unique_call 2378} nVar2327 := proc130(28);
+ call {:si_unique_call 2379} nVar2328 := proc130(28);
+ call {:si_unique_call 2380} nVar2329 := proc130(28);
+ call {:si_unique_call 2381} nVar2330 := proc130(28);
+ call {:si_unique_call 2382} nVar2331 := proc130(28);
+ call {:si_unique_call 2383} nVar2332 := proc130(16);
+ call {:si_unique_call 2384} nVar2333 := proc130(28);
+ call {:si_unique_call 2385} nVar2334 := proc130(12);
+ call {:si_unique_call 2386} nVar2335 := proc130(28);
+ call {:si_unique_call 2387} nVar2336 := proc130(28);
+ call {:si_unique_call 2388} nVar2337 := proc130(28);
+ call {:si_unique_call 2389} nVar2338 := proc130(28);
+ call {:si_unique_call 2390} nVar2339 := proc130(28);
+ call {:si_unique_call 2391} nVar2340 := proc130(12);
+ call {:si_unique_call 2392} nVar2341 := proc130(28);
+ call {:si_unique_call 2393} nVar2342 := proc130(28);
+ call {:si_unique_call 2394} nVar2343 := proc130(28);
+ call {:si_unique_call 2395} nVar2344 := proc130(28);
+ call {:si_unique_call 2396} nVar2345 := proc130(28);
+ call {:si_unique_call 2397} nVar2346 := proc130(16);
+ call {:si_unique_call 2398} nVar2347 := proc130(28);
+ call {:si_unique_call 2399} nVar2348 := proc130(24);
+ call {:si_unique_call 2400} nVar2349 := proc130(28);
+ call {:si_unique_call 2401} nVar2350 := proc130(28);
+ call {:si_unique_call 2402} nVar2351 := proc130(28);
+ call {:si_unique_call 2403} nVar2352 := proc130(28);
+ call {:si_unique_call 2404} nVar2353 := proc130(16);
+ call {:si_unique_call 2405} nVar2354 := proc130(28);
+ call {:si_unique_call 2406} nVar2355 := proc130(28);
+ call {:si_unique_call 2407} nVar2356 := proc130(28);
+ call {:si_unique_call 2408} nVar2357 := proc130(28);
+ call {:si_unique_call 2409} nVar2358 := proc130(28);
+ call {:si_unique_call 2410} nVar2359 := proc130(28);
+ call {:si_unique_call 2411} nVar2360 := proc130(28);
+ call {:si_unique_call 2412} nVar2361 := proc130(28);
+ call {:si_unique_call 2413} nVar2362 := proc130(28);
+ call {:si_unique_call 2414} nVar2363 := proc130(28);
+ call {:si_unique_call 2415} nVar2364 := proc130(28);
+ call {:si_unique_call 2416} nVar2365 := proc130(16);
+ call {:si_unique_call 2417} nVar2366 := proc130(28);
+ call {:si_unique_call 2418} nVar2367 := proc130(28);
+ call {:si_unique_call 2419} nVar2368 := proc130(16);
+ call {:si_unique_call 2420} nVar2369 := proc130(28);
+ call {:si_unique_call 2421} nVar2370 := proc130(28);
+ call {:si_unique_call 2422} nVar2371 := proc130(28);
+ call {:si_unique_call 2423} nVar2372 := proc130(28);
+ call {:si_unique_call 2424} nVar2373 := proc130(28);
+ call {:si_unique_call 2425} nVar2374 := proc130(12);
+ call {:si_unique_call 2426} nVar2375 := proc130(28);
+ call {:si_unique_call 2427} nVar2376 := proc130(28);
+ call {:si_unique_call 2428} nVar2377 := proc130(28);
+ call {:si_unique_call 2429} nVar2378 := proc130(28);
+ call {:si_unique_call 2430} nVar2379 := proc130(28);
+ call {:si_unique_call 2431} nVar2380 := proc130(28);
+ call {:si_unique_call 2432} nVar2381 := proc130(28);
+ call {:si_unique_call 2433} nVar2382 := proc130(28);
+ call {:si_unique_call 2434} nVar2383 := proc130(28);
+ call {:si_unique_call 2435} nVar2384 := proc130(28);
+ call {:si_unique_call 2436} nVar2385 := proc130(28);
+ call {:si_unique_call 2437} nVar2386 := proc130(12);
+ call {:si_unique_call 2438} nVar2387 := proc130(28);
+ call {:si_unique_call 2439} nVar2388 := proc130(28);
+ call {:si_unique_call 2440} nVar2389 := proc130(28);
+ call {:si_unique_call 2441} nVar2390 := proc130(28);
+ call {:si_unique_call 2442} nVar2391 := proc130(28);
+ call {:si_unique_call 2443} nVar2392 := proc130(28);
+ call {:si_unique_call 2444} nVar2393 := proc130(28);
+ call {:si_unique_call 2445} nVar2394 := proc130(28);
+ call {:si_unique_call 2446} nVar2395 := proc130(28);
+ call {:si_unique_call 2447} nVar2396 := proc130(28);
+ call {:si_unique_call 2448} nVar2397 := proc130(28);
+ call {:si_unique_call 2449} nVar2398 := proc130(28);
+ call {:si_unique_call 2450} nVar2399 := proc130(28);
+ call {:si_unique_call 2451} nVar2400 := proc130(4);
+ call {:si_unique_call 2452} nVar2401 := proc130(28);
+ call {:si_unique_call 2453} nVar2402 := proc130(12);
+ call {:si_unique_call 2454} nVar2403 := proc130(28);
+ call {:si_unique_call 2455} nVar2404 := proc130(28);
+ call {:si_unique_call 2456} nVar2405 := proc130(28);
+ call {:si_unique_call 2457} nVar2406 := proc130(28);
+ call {:si_unique_call 2458} nVar2407 := proc130(12);
+ call {:si_unique_call 2459} nVar2408 := proc130(28);
+ call {:si_unique_call 2460} nVar2409 := proc130(28);
+ call {:si_unique_call 2461} nVar2410 := proc130(28);
+ call {:si_unique_call 2462} nVar2411 := proc130(4);
+ call {:si_unique_call 2463} nVar2412 := proc130(28);
+ call {:si_unique_call 2464} nVar2413 := proc130(28);
+ call {:si_unique_call 2465} nVar2414 := proc130(28);
+ call {:si_unique_call 2466} nVar2415 := proc130(28);
+ call {:si_unique_call 2467} nVar2416 := proc130(28);
+ call {:si_unique_call 2468} nVar2417 := proc130(28);
+ call {:si_unique_call 2469} nVar2418 := proc130(28);
+ call {:si_unique_call 2470} nVar2419 := proc130(28);
+ call {:si_unique_call 2471} nVar2420 := proc130(28);
+ call {:si_unique_call 2472} nVar2421 := proc130(28);
+ call {:si_unique_call 2473} nVar2422 := proc130(24);
+ call {:si_unique_call 2474} nVar2423 := proc130(28);
+ call {:si_unique_call 2475} nVar2424 := proc130(28);
+ call {:si_unique_call 2476} nVar2425 := proc130(28);
+ call {:si_unique_call 2477} nVar2426 := proc130(28);
+ call {:si_unique_call 2478} nVar2427 := proc130(28);
+ call {:si_unique_call 2479} nVar2428 := proc130(28);
+ call {:si_unique_call 2480} nVar2429 := proc130(4);
+ call {:si_unique_call 2481} nVar2430 := proc130(28);
+ call {:si_unique_call 2482} nVar2431 := proc130(28);
+ call {:si_unique_call 2483} nVar2432 := proc130(28);
+ call {:si_unique_call 2484} nVar2433 := proc130(28);
+ call {:si_unique_call 2485} nVar2434 := proc130(28);
+ call {:si_unique_call 2486} nVar2435 := proc130(28);
+ call {:si_unique_call 2487} nVar2436 := proc130(12);
+ call {:si_unique_call 2488} nVar2437 := proc130(28);
+ call {:si_unique_call 2489} nVar2438 := proc130(28);
+ call {:si_unique_call 2490} nVar2439 := proc130(28);
+ call {:si_unique_call 2491} nVar2440 := proc130(16);
+ call {:si_unique_call 2492} nVar2441 := proc130(24);
+ call {:si_unique_call 2493} nVar2442 := proc130(28);
+ call {:si_unique_call 2494} nVar2443 := proc130(28);
+ call {:si_unique_call 2495} nVar2444 := proc130(8);
+ call {:si_unique_call 2496} nVar2445 := proc130(28);
+ call {:si_unique_call 2497} nVar2446 := proc130(28);
+ call {:si_unique_call 2498} nVar2447 := proc130(28);
+ call {:si_unique_call 2499} nVar2448 := proc130(28);
+ call {:si_unique_call 2500} nVar2449 := proc130(28);
+ call {:si_unique_call 2501} nVar2450 := proc130(28);
+ call {:si_unique_call 2502} nVar2451 := proc130(28);
+ call {:si_unique_call 2503} nVar2452 := proc130(28);
+ call {:si_unique_call 2504} nVar2453 := proc130(28);
+ call {:si_unique_call 2505} nVar2454 := proc130(28);
+ call {:si_unique_call 2506} nVar2455 := proc130(24);
+ call {:si_unique_call 2507} nVar2456 := proc130(28);
+ call {:si_unique_call 2508} nVar2457 := proc130(28);
+ call {:si_unique_call 2509} nVar2458 := proc130(28);
+ call {:si_unique_call 2510} nVar2459 := proc130(28);
+ call {:si_unique_call 2511} nVar2460 := proc130(28);
+ call {:si_unique_call 2512} nVar2461 := proc130(16);
+ call {:si_unique_call 2513} nVar2462 := proc130(28);
+ call {:si_unique_call 2514} nVar2463 := proc130(28);
+ call {:si_unique_call 2515} nVar2464 := proc130(28);
+ call {:si_unique_call 2516} nVar2465 := proc130(28);
+ call {:si_unique_call 2517} nVar2466 := proc130(16);
+ call {:si_unique_call 2518} nVar2467 := proc130(28);
+ call {:si_unique_call 2519} nVar2468 := proc130(28);
+ call {:si_unique_call 2520} nVar2469 := proc130(28);
+ call {:si_unique_call 2521} nVar2470 := proc130(28);
+ call {:si_unique_call 2522} nVar2471 := proc130(28);
+ call {:si_unique_call 2523} nVar2472 := proc130(28);
+ call {:si_unique_call 2524} nVar2473 := proc130(28);
+ call {:si_unique_call 2525} nVar2474 := proc130(28);
+ call {:si_unique_call 2526} nVar2475 := proc130(28);
+ call {:si_unique_call 2527} nVar2476 := proc130(28);
+ call {:si_unique_call 2528} nVar2477 := proc130(28);
+ call {:si_unique_call 2529} nVar2478 := proc130(28);
+ call {:si_unique_call 2530} nVar2479 := proc130(28);
+ call {:si_unique_call 2531} nVar2480 := proc130(28);
+ call {:si_unique_call 2532} nVar2481 := proc130(28);
+ call {:si_unique_call 2533} nVar2482 := proc130(28);
+ call {:si_unique_call 2534} nVar2483 := proc130(28);
+ call {:si_unique_call 2535} nVar2484 := proc130(28);
+ call {:si_unique_call 2536} nVar2485 := proc130(28);
+ call {:si_unique_call 2537} nVar2486 := proc130(28);
+ call {:si_unique_call 2538} nVar2487 := proc130(16);
+ call {:si_unique_call 2539} nVar2488 := proc130(28);
+ call {:si_unique_call 2540} nVar2489 := proc130(28);
+ call {:si_unique_call 2541} nVar2490 := proc130(28);
+ call {:si_unique_call 2542} nVar2491 := proc130(28);
+ call {:si_unique_call 2543} nVar2492 := proc130(28);
+ call {:si_unique_call 2544} nVar2493 := proc130(28);
+ call {:si_unique_call 2545} nVar2494 := proc130(16);
+ call {:si_unique_call 2546} nVar2495 := proc130(28);
+ call {:si_unique_call 2547} nVar2496 := proc130(12);
+ call {:si_unique_call 2548} nVar2497 := proc130(28);
+ call {:si_unique_call 2549} nVar2498 := proc130(28);
+ call {:si_unique_call 2550} nVar2499 := proc130(28);
+ call {:si_unique_call 2551} nVar2500 := proc130(28);
+ call {:si_unique_call 2552} nVar2501 := proc130(12);
+ call {:si_unique_call 2553} nVar2502 := proc130(28);
+ call {:si_unique_call 2554} nVar2503 := proc130(28);
+ call {:si_unique_call 2555} nVar2504 := proc130(28);
+ call {:si_unique_call 2556} nVar2505 := proc130(28);
+ call {:si_unique_call 2557} nVar2506 := proc130(28);
+ call {:si_unique_call 2558} nVar2507 := proc130(4);
+ call {:si_unique_call 2559} nVar2508 := proc130(28);
+ call {:si_unique_call 2560} nVar2509 := proc130(28);
+ call {:si_unique_call 2561} nVar2510 := proc130(28);
+ call {:si_unique_call 2562} nVar2511 := proc130(28);
+ call {:si_unique_call 2563} nVar2512 := proc130(28);
+ call {:si_unique_call 2564} nVar2513 := proc130(28);
+ call {:si_unique_call 2565} nVar2514 := proc130(28);
+ call {:si_unique_call 2566} nVar2515 := proc130(28);
+ call {:si_unique_call 2567} nVar2516 := proc130(28);
+ call {:si_unique_call 2568} nVar2517 := proc130(28);
+ call {:si_unique_call 2569} nVar2518 := proc130(28);
+ call {:si_unique_call 2570} nVar2519 := proc130(4);
+ call {:si_unique_call 2571} nVar2520 := proc130(28);
+ call {:si_unique_call 2572} nVar2521 := proc130(28);
+ call {:si_unique_call 2573} nVar2522 := proc130(4);
+ call {:si_unique_call 2574} nVar2523 := proc130(28);
+ call {:si_unique_call 2575} nVar2524 := proc130(16);
+ call {:si_unique_call 2576} nVar2525 := proc130(28);
+ call {:si_unique_call 2577} nVar2526 := proc130(28);
+ call {:si_unique_call 2578} nVar2527 := proc130(28);
+ call {:si_unique_call 2579} nVar2528 := proc130(28);
+ call {:si_unique_call 2580} nVar2529 := proc130(28);
+ call {:si_unique_call 2581} nVar2530 := proc130(28);
+ call {:si_unique_call 2582} nVar2531 := proc130(28);
+ call {:si_unique_call 2583} nVar2532 := proc130(28);
+ call {:si_unique_call 2584} nVar2533 := proc130(28);
+ call {:si_unique_call 2585} nVar2534 := proc130(28);
+ call {:si_unique_call 2586} nVar2535 := proc130(12);
+ call {:si_unique_call 2587} nVar2536 := proc130(28);
+ call {:si_unique_call 2588} nVar2537 := proc130(28);
+ call {:si_unique_call 2589} nVar2538 := proc130(28);
+ call {:si_unique_call 2590} nVar2539 := proc130(28);
+ call {:si_unique_call 2591} nVar2540 := proc130(28);
+ call {:si_unique_call 2592} nVar2541 := proc130(28);
+ call {:si_unique_call 2593} nVar2542 := proc130(28);
+ call {:si_unique_call 2594} nVar2543 := proc130(28);
+ call {:si_unique_call 2595} nVar2544 := proc130(24);
+ call {:si_unique_call 2596} nVar2545 := proc130(24);
+ call {:si_unique_call 2597} nVar2546 := proc130(28);
+ call {:si_unique_call 2598} nVar2547 := proc130(28);
+ call {:si_unique_call 2599} nVar2548 := proc130(28);
+ call {:si_unique_call 2600} nVar2549 := proc130(28);
+ call {:si_unique_call 2601} nVar2550 := proc130(28);
+ call {:si_unique_call 2602} nVar2551 := proc130(28);
+ call {:si_unique_call 2603} nVar2552 := proc130(28);
+ call {:si_unique_call 2604} nVar2553 := proc130(28);
+ call {:si_unique_call 2605} nVar2554 := proc130(28);
+ call {:si_unique_call 2606} nVar2555 := proc130(28);
+ call {:si_unique_call 2607} nVar2556 := proc130(28);
+ call {:si_unique_call 2608} nVar2557 := proc130(28);
+ call {:si_unique_call 2609} nVar2558 := proc130(28);
+ call {:si_unique_call 2610} nVar2559 := proc130(28);
+ call {:si_unique_call 2611} nVar2560 := proc130(28);
+ call {:si_unique_call 2612} nVar2561 := proc130(28);
+ call {:si_unique_call 2613} nVar2562 := proc130(28);
+ call {:si_unique_call 2614} nVar2563 := proc130(28);
+ call {:si_unique_call 2615} nVar2564 := proc130(28);
+ call {:si_unique_call 2616} nVar2565 := proc130(28);
+ call {:si_unique_call 2617} nVar2566 := proc130(28);
+ call {:si_unique_call 2618} nVar2567 := proc130(28);
+ call {:si_unique_call 2619} nVar2568 := proc130(28);
+ call {:si_unique_call 2620} nVar2569 := proc130(28);
+ call {:si_unique_call 2621} nVar2570 := proc130(28);
+ call {:si_unique_call 2622} nVar2571 := proc130(28);
+ call {:si_unique_call 2623} nVar2572 := proc130(28);
+ call {:si_unique_call 2624} nVar2573 := proc130(16);
+ call {:si_unique_call 2625} nVar2574 := proc130(28);
+ call {:si_unique_call 2626} nVar2575 := proc130(28);
+ call {:si_unique_call 2627} nVar2576 := proc130(28);
+ call {:si_unique_call 2628} nVar2577 := proc130(16);
+ call {:si_unique_call 2629} nVar2578 := proc130(8);
+ call {:si_unique_call 2630} nVar2579 := proc130(28);
+ call {:si_unique_call 2631} nVar2580 := proc130(28);
+ call {:si_unique_call 2632} nVar2581 := proc130(28);
+ call {:si_unique_call 2633} nVar2582 := proc130(28);
+ call {:si_unique_call 2634} nVar2583 := proc130(28);
+ call {:si_unique_call 2635} nVar2584 := proc130(28);
+ call {:si_unique_call 2636} nVar2585 := proc130(28);
+ call {:si_unique_call 2637} nVar2586 := proc130(28);
+ call {:si_unique_call 2638} nVar2587 := proc130(28);
+ call {:si_unique_call 2639} nVar2588 := proc130(28);
+ call {:si_unique_call 2640} nVar2589 := proc130(28);
+ call {:si_unique_call 2641} nVar2590 := proc130(28);
+ call {:si_unique_call 2642} nVar2591 := proc130(28);
+ call {:si_unique_call 2643} nVar2592 := proc130(28);
+ call {:si_unique_call 2644} nVar2593 := proc130(28);
+ call {:si_unique_call 2645} nVar2594 := proc130(8);
+ call {:si_unique_call 2646} nVar2595 := proc130(28);
+ call {:si_unique_call 2647} nVar2596 := proc130(28);
+ call {:si_unique_call 2648} nVar2597 := proc130(16);
+ call {:si_unique_call 2649} nVar2598 := proc130(28);
+ call {:si_unique_call 2650} nVar2599 := proc130(12);
+ call {:si_unique_call 2651} nVar2600 := proc130(28);
+ call {:si_unique_call 2652} nVar2601 := proc130(28);
+ call {:si_unique_call 2653} nVar2602 := proc130(28);
+ call {:si_unique_call 2654} nVar2603 := proc130(28);
+ call {:si_unique_call 2655} nVar2604 := proc130(28);
+ call {:si_unique_call 2656} nVar2605 := proc130(28);
+ call {:si_unique_call 2657} nVar2606 := proc130(28);
+ call {:si_unique_call 2658} nVar2607 := proc130(28);
+ call {:si_unique_call 2659} nVar2608 := proc130(28);
+ call {:si_unique_call 2660} nVar2609 := proc130(16);
+ call {:si_unique_call 2661} nVar2610 := proc130(28);
+ call {:si_unique_call 2662} nVar2611 := proc130(28);
+ call {:si_unique_call 2663} nVar2612 := proc130(28);
+ call {:si_unique_call 2664} nVar2613 := proc130(28);
+ call {:si_unique_call 2665} nVar2614 := proc130(12);
+ call {:si_unique_call 2666} nVar2615 := proc130(28);
+ call {:si_unique_call 2667} nVar2616 := proc130(28);
+ call {:si_unique_call 2668} nVar2617 := proc130(12);
+ call {:si_unique_call 2669} nVar2618 := proc130(28);
+ call {:si_unique_call 2670} nVar2619 := proc130(28);
+ call {:si_unique_call 2671} nVar2620 := proc130(28);
+ call {:si_unique_call 2672} nVar2622 := proc130(28);
+ call {:si_unique_call 2673} nVar2623 := proc130(28);
+ call {:si_unique_call 2674} nVar2624 := proc130(28);
+ call {:si_unique_call 2675} nVar2625 := proc130(28);
+ call {:si_unique_call 2676} nVar2626 := proc130(4);
+ call {:si_unique_call 2677} nVar2627 := proc130(28);
+ call {:si_unique_call 2678} nVar2628 := proc130(28);
+ call {:si_unique_call 2679} nVar2629 := proc130(28);
+ call {:si_unique_call 2680} nVar2630 := proc130(28);
+ call {:si_unique_call 2681} nVar2631 := proc130(4);
+ call {:si_unique_call 2682} nVar2633 := proc130(28);
+ call {:si_unique_call 2683} nVar2634 := proc130(28);
+ call {:si_unique_call 2684} nVar2635 := proc130(28);
+ call {:si_unique_call 2685} nVar2636 := proc130(4);
+ call {:si_unique_call 2686} nVar2637 := proc130(8);
+ call {:si_unique_call 2687} nVar2638 := proc130(4);
+ call {:si_unique_call 2688} nVar2639 := proc130(28);
+ call {:si_unique_call 2689} nVar2640 := proc130(28);
+ call {:si_unique_call 2690} nVar2641 := proc130(28);
+ call {:si_unique_call 2691} nVar2642 := proc130(28);
+ call {:si_unique_call 2692} nVar2643 := proc130(24);
+ call {:si_unique_call 2693} nVar2644 := proc130(28);
+ call {:si_unique_call 2694} nVar2645 := proc130(28);
+ call {:si_unique_call 2695} nVar2646 := proc130(24);
+ call {:si_unique_call 2696} nVar2647 := proc130(28);
+ call {:si_unique_call 2697} nVar2648 := proc130(56);
+ call {:si_unique_call 2698} nVar2649 := proc130(16);
+ call {:si_unique_call 2699} nVar2650 := proc130(28);
+ call {:si_unique_call 2700} nVar2651 := proc130(12);
+ call {:si_unique_call 2701} nVar2652 := proc130(16);
+ call {:si_unique_call 2702} nVar2653 := proc130(28);
+ call {:si_unique_call 2703} nVar2654 := proc130(28);
+ call {:si_unique_call 2704} nVar2655 := proc130(16);
+ call {:si_unique_call 2705} nVar2656 := proc130(28);
+ call {:si_unique_call 2706} nVar2657 := proc130(28);
+ call {:si_unique_call 2707} nVar2658 := proc130(28);
+ call {:si_unique_call 2708} nVar2659 := proc130(28);
+ call {:si_unique_call 2709} nVar2660 := proc130(28);
+ call {:si_unique_call 2710} nVar2661 := proc130(16);
+ call {:si_unique_call 2711} nVar2662 := proc130(28);
+ call {:si_unique_call 2712} nVar2663 := proc130(28);
+ call {:si_unique_call 2713} nVar2664 := proc130(12);
+ call {:si_unique_call 2714} nVar2665 := proc130(28);
+ call {:si_unique_call 2715} nVar2666 := proc130(12);
+ call {:si_unique_call 2716} nVar2667 := proc130(28);
+ call {:si_unique_call 2717} nVar2668 := proc130(28);
+ call {:si_unique_call 2718} nVar2669 := proc130(28);
+ call {:si_unique_call 2719} nVar2670 := proc130(28);
+ call {:si_unique_call 2720} nVar2671 := proc130(28);
+ call {:si_unique_call 2721} nVar2672 := proc130(28);
+ call {:si_unique_call 2722} nVar2673 := proc130(28);
+ call {:si_unique_call 2723} nVar2674 := proc130(28);
+ call {:si_unique_call 2724} nVar2675 := proc130(28);
+ call {:si_unique_call 2725} nVar2676 := proc130(12);
+ call {:si_unique_call 2726} nVar2677 := proc130(16);
+ call {:si_unique_call 2727} nVar2678 := proc130(28);
+ call {:si_unique_call 2728} nVar2679 := proc130(28);
+ call {:si_unique_call 2729} nVar2680 := proc130(28);
+ call {:si_unique_call 2730} nVar2681 := proc130(28);
+ call {:si_unique_call 2731} nVar2682 := proc130(28);
+ call {:si_unique_call 2732} nVar2683 := proc130(28);
+ call {:si_unique_call 2733} nVar2684 := proc130(28);
+ call {:si_unique_call 2734} nVar2685 := proc130(24);
+ call {:si_unique_call 2735} nVar2686 := proc130(28);
+ call {:si_unique_call 2736} nVar2687 := proc130(28);
+ call {:si_unique_call 2737} nVar2688 := proc130(28);
+ call {:si_unique_call 2738} nVar2689 := proc130(28);
+ call {:si_unique_call 2739} nVar2690 := proc130(28);
+ call {:si_unique_call 2740} nVar2691 := proc130(28);
+ call {:si_unique_call 2741} nVar2692 := proc130(28);
+ call {:si_unique_call 2742} nVar2693 := proc130(28);
+ call {:si_unique_call 2743} nVar2694 := proc130(28);
+ call {:si_unique_call 2744} nVar2695 := proc130(28);
+ call {:si_unique_call 2745} nVar2696 := proc130(28);
+ call {:si_unique_call 2746} nVar2697 := proc130(12);
+ call {:si_unique_call 2747} nVar2698 := proc130(28);
+ call {:si_unique_call 2748} nVar2699 := proc130(24);
+ call {:si_unique_call 2749} nVar2700 := proc130(28);
+ call {:si_unique_call 2750} nVar2701 := proc130(28);
+ call {:si_unique_call 2751} nVar2702 := proc130(28);
+ call {:si_unique_call 2752} nVar2703 := proc130(28);
+ call {:si_unique_call 2753} nVar2704 := proc130(28);
+ call {:si_unique_call 2754} nVar2705 := proc130(28);
+ call {:si_unique_call 2755} nVar2706 := proc130(28);
+ call {:si_unique_call 2756} nVar2707 := proc130(28);
+ call {:si_unique_call 2757} nVar2708 := proc130(28);
+ call {:si_unique_call 2758} nVar2709 := proc130(28);
+ call {:si_unique_call 2759} nVar2710 := proc130(28);
+ call {:si_unique_call 2760} nVar2711 := proc130(28);
+ call {:si_unique_call 2761} nVar2712 := proc130(28);
+ call {:si_unique_call 2762} nVar2713 := proc130(16);
+ call {:si_unique_call 2763} nVar2714 := proc130(28);
+ call {:si_unique_call 2764} nVar2715 := proc130(28);
+ call {:si_unique_call 2765} nVar2716 := proc130(28);
+ call {:si_unique_call 2766} nVar2717 := proc130(24);
+ call {:si_unique_call 2767} nVar2718 := proc130(28);
+ call {:si_unique_call 2768} nVar2719 := proc130(28);
+ call {:si_unique_call 2769} nVar2720 := proc130(28);
+ call {:si_unique_call 2770} nVar2721 := proc130(24);
+ call {:si_unique_call 2771} nVar2722 := proc130(28);
+ call {:si_unique_call 2772} nVar2723 := proc130(28);
+ call {:si_unique_call 2773} nVar2724 := proc130(28);
+ call {:si_unique_call 2774} nVar2725 := proc130(24);
+ call {:si_unique_call 2775} nVar2726 := proc130(28);
+ call {:si_unique_call 2776} nVar2727 := proc130(28);
+ call {:si_unique_call 2777} nVar2728 := proc130(28);
+ call {:si_unique_call 2778} nVar2729 := proc130(28);
+ call {:si_unique_call 2779} nVar2730 := proc130(28);
+ call {:si_unique_call 2780} nVar2731 := proc130(28);
+ call {:si_unique_call 2781} nVar2732 := proc130(28);
+ call {:si_unique_call 2782} nVar2733 := proc130(16);
+ call {:si_unique_call 2783} nVar2734 := proc130(28);
+ call {:si_unique_call 2784} nVar2735 := proc130(28);
+ call {:si_unique_call 2785} nVar2736 := proc130(28);
+ call {:si_unique_call 2786} nVar2737 := proc130(28);
+ call {:si_unique_call 2787} nVar2738 := proc130(28);
+ call {:si_unique_call 2788} nVar2739 := proc130(28);
+ call {:si_unique_call 2789} nVar2740 := proc130(28);
+ call {:si_unique_call 2790} nVar2741 := proc130(28);
+ call {:si_unique_call 2791} nVar2742 := proc130(28);
+ call {:si_unique_call 2792} nVar2743 := proc130(28);
+ call {:si_unique_call 2793} nVar2744 := proc130(28);
+ call {:si_unique_call 2794} nVar2745 := proc130(28);
+ call {:si_unique_call 2795} nVar2746 := proc130(12);
+ call {:si_unique_call 2796} nVar2747 := proc130(28);
+ call {:si_unique_call 2797} nVar2748 := proc130(28);
+ call {:si_unique_call 2798} nVar2749 := proc130(28);
+ call {:si_unique_call 2799} nVar2750 := proc130(28);
+ call {:si_unique_call 2800} nVar2751 := proc130(28);
+ call {:si_unique_call 2801} nVar2752 := proc130(28);
+ call {:si_unique_call 2802} nVar2753 := proc130(28);
+ call {:si_unique_call 2803} nVar2755 := proc130(28);
+ call {:si_unique_call 2804} nVar2756 := proc130(28);
+ call {:si_unique_call 2805} nVar2757 := proc130(28);
+ call {:si_unique_call 2806} nVar2758 := proc130(28);
+ call {:si_unique_call 2807} nVar2759 := proc130(28);
+ call {:si_unique_call 2808} nVar2760 := proc130(28);
+ call {:si_unique_call 2809} nVar2761 := proc130(28);
+ call {:si_unique_call 2810} nVar2762 := proc130(28);
+ call {:si_unique_call 2811} nVar2763 := proc130(28);
+ call {:si_unique_call 2812} nVar2764 := proc130(28);
+ call {:si_unique_call 2813} nVar2765 := proc130(28);
+ call {:si_unique_call 2814} nVar2766 := proc130(4);
+ call {:si_unique_call 2815} nVar2767 := proc130(24);
+ call {:si_unique_call 2816} nVar2768 := proc130(28);
+ call {:si_unique_call 2817} nVar2769 := proc130(4);
+ call {:si_unique_call 2818} nVar2770 := proc130(8);
+ call {:si_unique_call 2819} nVar2771 := proc130(16);
+ call {:si_unique_call 2820} nVar2772 := proc130(28);
+ call {:si_unique_call 2821} nVar2773 := proc130(28);
+ call {:si_unique_call 2822} nVar2774 := proc130(28);
+ call {:si_unique_call 2823} nVar2775 := proc130(28);
+ call {:si_unique_call 2824} nVar2776 := proc130(28);
+ call {:si_unique_call 2825} nVar2777 := proc130(28);
+ call {:si_unique_call 2826} nVar2778 := proc130(28);
+ call {:si_unique_call 2827} nVar2779 := proc130(28);
+ call {:si_unique_call 2828} nVar2780 := proc130(28);
+ call {:si_unique_call 2829} nVar2781 := proc130(12);
+ call {:si_unique_call 2830} nVar2782 := proc130(28);
+ call {:si_unique_call 2831} nVar2783 := proc130(28);
+ call {:si_unique_call 2832} nVar2784 := proc130(28);
+ call {:si_unique_call 2833} nVar2785 := proc130(28);
+ call {:si_unique_call 2834} nVar2786 := proc130(28);
+ call {:si_unique_call 2835} nVar2787 := proc130(28);
+ call {:si_unique_call 2836} nVar2788 := proc130(28);
+ call {:si_unique_call 2837} nVar2789 := proc130(28);
+ call {:si_unique_call 2838} nVar2790 := proc130(28);
+ call {:si_unique_call 2839} nVar2791 := proc130(28);
+ call {:si_unique_call 2840} nVar2792 := proc130(16);
+ call {:si_unique_call 2841} nVar2793 := proc130(24);
+ call {:si_unique_call 2842} nVar2794 := proc130(28);
+ call {:si_unique_call 2843} nVar2795 := proc130(12);
+ call {:si_unique_call 2844} nVar2796 := proc130(28);
+ call {:si_unique_call 2845} nVar2797 := proc130(28);
+ call {:si_unique_call 2846} nVar2798 := proc130(28);
+ call {:si_unique_call 2847} nVar2799 := proc130(28);
+ call {:si_unique_call 2848} nVar2800 := proc130(28);
+ call {:si_unique_call 2849} nVar2801 := proc130(4);
+ call {:si_unique_call 2850} nVar2802 := proc130(28);
+ call {:si_unique_call 2851} nVar2803 := proc130(28);
+ call {:si_unique_call 2852} nVar2804 := proc130(28);
+ call {:si_unique_call 2853} nVar2805 := proc130(28);
+ call {:si_unique_call 2854} nVar2806 := proc130(28);
+ call {:si_unique_call 2855} nVar2807 := proc130(28);
+ call {:si_unique_call 2856} nVar2808 := proc130(24);
+ call {:si_unique_call 2857} nVar2809 := proc130(28);
+ call {:si_unique_call 2858} nVar2810 := proc130(28);
+ call {:si_unique_call 2859} nVar2811 := proc130(28);
+ call {:si_unique_call 2860} nVar2812 := proc130(28);
+ call {:si_unique_call 2861} nVar2813 := proc130(16);
+ call {:si_unique_call 2862} nVar2814 := proc130(28);
+ call {:si_unique_call 2863} nVar2815 := proc130(28);
+ call {:si_unique_call 2864} nVar2816 := proc130(28);
+ call {:si_unique_call 2865} nVar2817 := proc130(28);
+ call {:si_unique_call 2866} nVar2818 := proc130(28);
+ call {:si_unique_call 2867} nVar2819 := proc130(28);
+ call {:si_unique_call 2868} nVar2820 := proc130(28);
+ call {:si_unique_call 2869} nVar2821 := proc130(28);
+ call {:si_unique_call 2870} nVar2822 := proc130(28);
+ call {:si_unique_call 2871} nVar2823 := proc130(16);
+ call {:si_unique_call 2872} nVar2824 := proc130(28);
+ call {:si_unique_call 2873} nVar2825 := proc130(28);
+ call {:si_unique_call 2874} nVar2826 := proc130(28);
+ call {:si_unique_call 2875} nVar2827 := proc130(28);
+ call {:si_unique_call 2876} nVar2828 := proc130(28);
+ call {:si_unique_call 2877} nVar2829 := proc130(28);
+ call {:si_unique_call 2878} nVar2830 := proc130(12);
+ call {:si_unique_call 2879} nVar2831 := proc130(4);
+ call {:si_unique_call 2880} nVar2832 := proc130(28);
+ call {:si_unique_call 2881} nVar2833 := proc130(4);
+ call {:si_unique_call 2882} nVar2834 := proc130(28);
+ call {:si_unique_call 2883} nVar2835 := proc130(12);
+ call {:si_unique_call 2884} nVar2836 := proc130(28);
+ call {:si_unique_call 2885} nVar2837 := proc130(28);
+ call {:si_unique_call 2886} nVar2838 := proc130(28);
+ call {:si_unique_call 2887} nVar2839 := proc130(28);
+ call {:si_unique_call 2888} nVar2840 := proc130(28);
+ call {:si_unique_call 2889} nVar2841 := proc130(28);
+ call {:si_unique_call 2890} nVar2842 := proc130(28);
+ call {:si_unique_call 2891} nVar2843 := proc130(12);
+ call {:si_unique_call 2892} nVar2844 := proc130(28);
+ call {:si_unique_call 2893} nVar2845 := proc130(28);
+ call {:si_unique_call 2894} nVar2846 := proc130(28);
+ call {:si_unique_call 2895} nVar2847 := proc130(28);
+ call {:si_unique_call 2896} nVar2848 := proc130(28);
+ call {:si_unique_call 2897} nVar2849 := proc130(4);
+ call {:si_unique_call 2898} nVar2850 := proc130(28);
+ call {:si_unique_call 2899} nVar2851 := proc130(28);
+ call {:si_unique_call 2900} nVar2852 := proc130(28);
+ call {:si_unique_call 2901} nVar2853 := proc130(16);
+ call {:si_unique_call 2902} nVar2854 := proc130(28);
+ call {:si_unique_call 2903} nVar2855 := proc130(4);
+ call {:si_unique_call 2904} nVar2856 := proc130(28);
+ call {:si_unique_call 2905} nVar2857 := proc130(16);
+ call {:si_unique_call 2906} nVar2858 := proc130(28);
+ call {:si_unique_call 2907} nVar2859 := proc130(16);
+ call {:si_unique_call 2908} nVar2860 := proc130(12);
+ call {:si_unique_call 2909} nVar2861 := proc130(28);
+ call {:si_unique_call 2910} nVar2862 := proc130(28);
+ call {:si_unique_call 2911} nVar2863 := proc130(12);
+ call {:si_unique_call 2912} nVar2864 := proc130(28);
+ call {:si_unique_call 2913} nVar2865 := proc130(28);
+ call {:si_unique_call 2914} nVar2866 := proc130(24);
+ call {:si_unique_call 2915} nVar2867 := proc130(28);
+ call {:si_unique_call 2916} nVar2868 := proc130(28);
+ call {:si_unique_call 2917} nVar2869 := proc130(28);
+ call {:si_unique_call 2918} nVar2870 := proc130(28);
+ call {:si_unique_call 2919} nVar2871 := proc130(28);
+ call {:si_unique_call 2920} nVar2872 := proc130(28);
+ call {:si_unique_call 2921} nVar2873 := proc130(28);
+ call {:si_unique_call 2922} nVar2874 := proc130(12);
+ call {:si_unique_call 2923} nVar2875 := proc130(28);
+ call {:si_unique_call 2924} nVar2876 := proc130(28);
+ call {:si_unique_call 2925} nVar2877 := proc130(12);
+ call {:si_unique_call 2926} nVar2878 := proc130(28);
+ call {:si_unique_call 2927} nVar2879 := proc130(28);
+ call {:si_unique_call 2928} nVar2880 := proc130(16);
+ call {:si_unique_call 2929} nVar2881 := proc130(28);
+ call {:si_unique_call 2930} nVar2882 := proc130(28);
+ call {:si_unique_call 2931} nVar2883 := proc130(28);
+ call {:si_unique_call 2932} nVar2884 := proc130(28);
+ call {:si_unique_call 2933} nVar2885 := proc130(28);
+ call {:si_unique_call 2934} nVar2886 := proc130(28);
+ call {:si_unique_call 2935} nVar2887 := proc130(28);
+ call {:si_unique_call 2936} nVar2888 := proc130(28);
+ call {:si_unique_call 2937} nVar2889 := proc130(28);
+ call {:si_unique_call 2938} nVar2890 := proc130(28);
+ call {:si_unique_call 2939} nVar2891 := proc130(16);
+ call {:si_unique_call 2940} nVar2892 := proc130(28);
+ call {:si_unique_call 2941} nVar4956 := proc130(16);
+ call {:si_unique_call 2942} nVar2893 := proc130(28);
+ call {:si_unique_call 2943} nVar2894 := proc130(28);
+ call {:si_unique_call 2944} nVar2895 := proc130(28);
+ call {:si_unique_call 2945} nVar2896 := proc130(4);
+ call {:si_unique_call 2946} nVar2897 := proc130(28);
+ call {:si_unique_call 2947} nVar2898 := proc130(16);
+ call {:si_unique_call 2948} nVar2899 := proc130(28);
+ call {:si_unique_call 2949} nVar2900 := proc130(28);
+ call {:si_unique_call 2950} nVar2901 := proc130(28);
+ call {:si_unique_call 2951} nVar2902 := proc130(28);
+ call {:si_unique_call 2952} nVar2903 := proc130(28);
+ call {:si_unique_call 2953} nVar2904 := proc130(28);
+ call {:si_unique_call 2954} nVar2905 := proc130(28);
+ call {:si_unique_call 2955} nVar2906 := proc130(28);
+ call {:si_unique_call 2956} nVar2907 := proc130(28);
+ call {:si_unique_call 2957} nVar2908 := proc130(28);
+ call {:si_unique_call 2958} nVar2909 := proc130(28);
+ call {:si_unique_call 2959} nVar2910 := proc130(28);
+ call {:si_unique_call 2960} nVar2911 := proc130(28);
+ call {:si_unique_call 2961} nVar4957 := proc130(68);
+ call {:si_unique_call 2962} nVar2912 := proc130(28);
+ call {:si_unique_call 2963} nVar2913 := proc130(28);
+ call {:si_unique_call 2964} nVar2914 := proc130(28);
+ call {:si_unique_call 2965} nVar2915 := proc130(28);
+ call {:si_unique_call 2966} nVar2916 := proc130(28);
+ call {:si_unique_call 2967} nVar2917 := proc130(28);
+ call {:si_unique_call 2968} nVar2918 := proc130(28);
+ call {:si_unique_call 2969} nVar2919 := proc130(4);
+ call {:si_unique_call 2970} nVar2920 := proc130(28);
+ call {:si_unique_call 2971} nVar2921 := proc130(28);
+ call {:si_unique_call 2972} nVar2922 := proc130(28);
+ call {:si_unique_call 2973} nVar2923 := proc130(16);
+ call {:si_unique_call 2974} nVar2924 := proc130(28);
+ call {:si_unique_call 2975} nVar2925 := proc130(28);
+ call {:si_unique_call 2976} nVar2926 := proc130(28);
+ call {:si_unique_call 2977} nVar2927 := proc130(28);
+ call {:si_unique_call 2978} nVar2928 := proc130(28);
+ call {:si_unique_call 2979} nVar2929 := proc130(28);
+ call {:si_unique_call 2980} nVar2930 := proc130(28);
+ call {:si_unique_call 2981} nVar2931 := proc130(28);
+ call {:si_unique_call 2982} nVar2932 := proc130(28);
+ call {:si_unique_call 2983} nVar2933 := proc130(4);
+ call {:si_unique_call 2984} nVar2934 := proc130(28);
+ call {:si_unique_call 2985} nVar2935 := proc130(56);
+ call {:si_unique_call 2986} nVar2936 := proc130(28);
+ call {:si_unique_call 2987} nVar2937 := proc130(28);
+ call {:si_unique_call 2988} nVar2938 := proc130(28);
+ call {:si_unique_call 2989} nVar2939 := proc130(28);
+ call {:si_unique_call 2990} nVar2940 := proc130(28);
+ call {:si_unique_call 2991} nVar2941 := proc130(28);
+ call {:si_unique_call 2992} nVar2942 := proc130(28);
+ call {:si_unique_call 2993} nVar2943 := proc130(28);
+ call {:si_unique_call 2994} nVar2944 := proc130(28);
+ call {:si_unique_call 2995} nVar2945 := proc130(28);
+ call {:si_unique_call 2996} nVar2946 := proc130(28);
+ call {:si_unique_call 2997} nVar2947 := proc130(16);
+ call {:si_unique_call 2998} nVar2948 := proc130(16);
+ call {:si_unique_call 2999} nVar2949 := proc130(4);
+ call {:si_unique_call 3000} nVar2950 := proc130(28);
+ call {:si_unique_call 3001} nVar2951 := proc130(28);
+ call {:si_unique_call 3002} nVar2952 := proc130(28);
+ call {:si_unique_call 3003} nVar2953 := proc130(16);
+ call {:si_unique_call 3004} nVar2954 := proc130(28);
+ call {:si_unique_call 3005} nVar2955 := proc130(28);
+ call {:si_unique_call 3006} nVar2956 := proc130(28);
+ call {:si_unique_call 3007} nVar2957 := proc130(16);
+ call {:si_unique_call 3008} nVar2958 := proc130(16);
+ call {:si_unique_call 3009} nVar2959 := proc130(28);
+ call {:si_unique_call 3010} nVar2960 := proc130(28);
+ call {:si_unique_call 3011} nVar2961 := proc130(28);
+ call {:si_unique_call 3012} nVar2962 := proc130(28);
+ call {:si_unique_call 3013} nVar2963 := proc130(28);
+ call {:si_unique_call 3014} nVar2964 := proc130(28);
+ call {:si_unique_call 3015} nVar2965 := proc130(28);
+ call {:si_unique_call 3016} nVar2966 := proc130(28);
+ call {:si_unique_call 3017} nVar2967 := proc130(28);
+ call {:si_unique_call 3018} nVar2968 := proc130(28);
+ call {:si_unique_call 3019} nVar2969 := proc130(28);
+ call {:si_unique_call 3020} nVar2970 := proc130(28);
+ call {:si_unique_call 3021} nVar2971 := proc130(28);
+ call {:si_unique_call 3022} nVar2972 := proc130(28);
+ call {:si_unique_call 3023} nVar2973 := proc130(28);
+ call {:si_unique_call 3024} nVar2974 := proc130(12);
+ call {:si_unique_call 3025} nVar2975 := proc130(28);
+ call {:si_unique_call 3026} nVar2976 := proc130(16);
+ call {:si_unique_call 3027} nVar2977 := proc130(28);
+ call {:si_unique_call 3028} nVar2978 := proc130(28);
+ call {:si_unique_call 3029} nVar2979 := proc130(28);
+ call {:si_unique_call 3030} nVar2980 := proc130(28);
+ call {:si_unique_call 3031} nVar2981 := proc130(28);
+ call {:si_unique_call 3032} nVar2982 := proc130(28);
+ call {:si_unique_call 3033} nVar2983 := proc130(28);
+ call {:si_unique_call 3034} nVar2984 := proc130(28);
+ call {:si_unique_call 3035} nVar2985 := proc130(28);
+ call {:si_unique_call 3036} nVar2986 := proc130(28);
+ call {:si_unique_call 3037} nVar2987 := proc130(28);
+ call {:si_unique_call 3038} nVar2988 := proc130(28);
+ call {:si_unique_call 3039} nVar2989 := proc130(28);
+ call {:si_unique_call 3040} nVar2990 := proc130(4);
+ call {:si_unique_call 3041} nVar2991 := proc130(28);
+ call {:si_unique_call 3042} nVar2992 := proc130(28);
+ call {:si_unique_call 3043} nVar2993 := proc130(28);
+ call {:si_unique_call 3044} nVar2994 := proc130(28);
+ call {:si_unique_call 3045} nVar2995 := proc130(28);
+ call {:si_unique_call 3046} nVar2996 := proc130(28);
+ call {:si_unique_call 3047} nVar2997 := proc130(4);
+ call {:si_unique_call 3048} nVar2998 := proc130(28);
+ call {:si_unique_call 3049} nVar2999 := proc130(28);
+ call {:si_unique_call 3050} nVar3000 := proc130(28);
+ call {:si_unique_call 3051} nVar3001 := proc130(28);
+ call {:si_unique_call 3052} nVar3002 := proc130(28);
+ call {:si_unique_call 3053} nVar3003 := proc130(28);
+ call {:si_unique_call 3054} nVar3004 := proc130(28);
+ call {:si_unique_call 3055} nVar3005 := proc130(28);
+ call {:si_unique_call 3056} nVar3006 := proc130(16);
+ call {:si_unique_call 3057} nVar3007 := proc130(28);
+ call {:si_unique_call 3058} nVar3008 := proc130(28);
+ call {:si_unique_call 3059} nVar3009 := proc130(28);
+ call {:si_unique_call 3060} nVar3010 := proc130(28);
+ call {:si_unique_call 3061} nVar3011 := proc130(28);
+ call {:si_unique_call 3062} nVar3012 := proc130(28);
+ call {:si_unique_call 3063} nVar3013 := proc130(28);
+ call {:si_unique_call 3064} nVar3014 := proc130(28);
+ call {:si_unique_call 3065} nVar3015 := proc130(28);
+ call {:si_unique_call 3066} nVar3016 := proc130(28);
+ call {:si_unique_call 3067} nVar3017 := proc130(28);
+ call {:si_unique_call 3068} nVar3018 := proc130(28);
+ call {:si_unique_call 3069} nVar3019 := proc130(28);
+ call {:si_unique_call 3070} nVar3020 := proc130(28);
+ call {:si_unique_call 3071} nVar3021 := proc130(28);
+ call {:si_unique_call 3072} nVar3022 := proc130(28);
+ call {:si_unique_call 3073} nVar3023 := proc130(28);
+ call {:si_unique_call 3074} nVar3024 := proc130(28);
+ call {:si_unique_call 3075} nVar3025 := proc130(28);
+ call {:si_unique_call 3076} nVar3026 := proc130(28);
+ call {:si_unique_call 3077} nVar3027 := proc130(28);
+ call {:si_unique_call 3078} nVar3028 := proc130(28);
+ call {:si_unique_call 3079} nVar3029 := proc130(28);
+ call {:si_unique_call 3080} nVar3030 := proc130(28);
+ call {:si_unique_call 3081} nVar3031 := proc130(16);
+ call {:si_unique_call 3082} nVar3032 := proc130(28);
+ call {:si_unique_call 3083} nVar3033 := proc130(28);
+ call {:si_unique_call 3084} nVar3034 := proc130(28);
+ call {:si_unique_call 3085} nVar3035 := proc130(28);
+ call {:si_unique_call 3086} nVar3036 := proc130(28);
+ call {:si_unique_call 3087} nVar3037 := proc130(16);
+ call {:si_unique_call 3088} nVar3038 := proc130(28);
+ call {:si_unique_call 3089} nVar3039 := proc130(28);
+ call {:si_unique_call 3090} nVar3040 := proc130(28);
+ call {:si_unique_call 3091} nVar3041 := proc130(28);
+ call {:si_unique_call 3092} nVar3042 := proc130(16);
+ call {:si_unique_call 3093} nVar3043 := proc130(28);
+ call {:si_unique_call 3094} nVar3044 := proc130(28);
+ call {:si_unique_call 3095} nVar3045 := proc130(28);
+ call {:si_unique_call 3096} nVar3046 := proc130(28);
+ call {:si_unique_call 3097} nVar3047 := proc130(28);
+ call {:si_unique_call 3098} nVar3049 := proc130(28);
+ call {:si_unique_call 3099} nVar3050 := proc130(12);
+ call {:si_unique_call 3100} nVar3051 := proc130(28);
+ call {:si_unique_call 3101} nVar3052 := proc130(28);
+ call {:si_unique_call 3102} nVar3053 := proc130(28);
+ call {:si_unique_call 3103} nVar3054 := proc130(28);
+ call {:si_unique_call 3104} nVar3055 := proc130(28);
+ call {:si_unique_call 3105} nVar3056 := proc130(28);
+ call {:si_unique_call 3106} nVar3057 := proc130(28);
+ call {:si_unique_call 3107} nVar3058 := proc130(28);
+ call {:si_unique_call 3108} nVar3059 := proc130(12);
+ call {:si_unique_call 3109} nVar3060 := proc130(16);
+ call {:si_unique_call 3110} nVar3061 := proc130(4);
+ call {:si_unique_call 3111} nVar3063 := proc130(28);
+ call {:si_unique_call 3112} nVar3064 := proc130(28);
+ call {:si_unique_call 3113} nVar3065 := proc130(28);
+ call {:si_unique_call 3114} nVar3066 := proc130(28);
+ call {:si_unique_call 3115} nVar3067 := proc130(28);
+ call {:si_unique_call 3116} nVar3068 := proc130(28);
+ call {:si_unique_call 3117} nVar3069 := proc130(28);
+ call {:si_unique_call 3118} nVar3070 := proc130(28);
+ call {:si_unique_call 3119} nVar3071 := proc130(12);
+ call {:si_unique_call 3120} nVar3072 := proc130(28);
+ call {:si_unique_call 3121} nVar3073 := proc130(28);
+ call {:si_unique_call 3122} nVar3074 := proc130(28);
+ call {:si_unique_call 3123} nVar3075 := proc130(28);
+ call {:si_unique_call 3124} nVar3076 := proc130(28);
+ call {:si_unique_call 3125} nVar3077 := proc130(16);
+ call {:si_unique_call 3126} nVar3078 := proc130(28);
+ call {:si_unique_call 3127} nVar3079 := proc130(28);
+ call {:si_unique_call 3128} nVar3080 := proc130(28);
+ call {:si_unique_call 3129} nVar3081 := proc130(28);
+ call {:si_unique_call 3130} nVar3082 := proc130(28);
+ call {:si_unique_call 3131} nVar3083 := proc130(16);
+ call {:si_unique_call 3132} nVar3084 := proc130(28);
+ call {:si_unique_call 3133} nVar3085 := proc130(28);
+ call {:si_unique_call 3134} nVar3086 := proc130(28);
+ call {:si_unique_call 3135} nVar3087 := proc130(28);
+ call {:si_unique_call 3136} nVar3088 := proc130(28);
+ call {:si_unique_call 3137} nVar3089 := proc130(28);
+ call {:si_unique_call 3138} nVar3090 := proc130(28);
+ call {:si_unique_call 3139} nVar3091 := proc130(28);
+ call {:si_unique_call 3140} nVar3092 := proc130(28);
+ call {:si_unique_call 3141} nVar3093 := proc130(16);
+ call {:si_unique_call 3142} nVar3094 := proc130(28);
+ call {:si_unique_call 3143} nVar3095 := proc130(28);
+ call {:si_unique_call 3144} nVar3096 := proc130(56);
+ call {:si_unique_call 3145} nVar3097 := proc130(28);
+ call {:si_unique_call 3146} nVar3098 := proc130(28);
+ call {:si_unique_call 3147} nVar3099 := proc130(12);
+ call {:si_unique_call 3148} nVar3100 := proc130(28);
+ call {:si_unique_call 3149} nVar3101 := proc130(28);
+ call {:si_unique_call 3150} nVar3102 := proc130(28);
+ call {:si_unique_call 3151} nVar3103 := proc130(4);
+ call {:si_unique_call 3152} nVar3104 := proc130(4);
+ call {:si_unique_call 3153} nVar3105 := proc130(28);
+ call {:si_unique_call 3154} nVar3106 := proc130(28);
+ call {:si_unique_call 3155} nVar3107 := proc130(28);
+ call {:si_unique_call 3156} nVar3108 := proc130(28);
+ call {:si_unique_call 3157} nVar3109 := proc130(28);
+ call {:si_unique_call 3158} nVar3110 := proc130(28);
+ call {:si_unique_call 3159} nVar3111 := proc130(28);
+ call {:si_unique_call 3160} nVar3112 := proc130(28);
+ call {:si_unique_call 3161} nVar3113 := proc130(28);
+ call {:si_unique_call 3162} nVar3114 := proc130(28);
+ call {:si_unique_call 3163} nVar3115 := proc130(28);
+ call {:si_unique_call 3164} nVar3116 := proc130(28);
+ call {:si_unique_call 3165} nVar3117 := proc130(28);
+ call {:si_unique_call 3166} nVar3118 := proc130(28);
+ call {:si_unique_call 3167} nVar3119 := proc130(16);
+ call {:si_unique_call 3168} nVar3120 := proc130(24);
+ call {:si_unique_call 3169} nVar3121 := proc130(16);
+ call {:si_unique_call 3170} nVar3122 := proc130(28);
+ call {:si_unique_call 3171} nVar3123 := proc130(28);
+ call {:si_unique_call 3172} nVar3124 := proc130(28);
+ call {:si_unique_call 3173} nVar3125 := proc130(28);
+ call {:si_unique_call 3174} nVar3126 := proc130(12);
+ call {:si_unique_call 3175} nVar3127 := proc130(28);
+ call {:si_unique_call 3176} nVar3128 := proc130(12);
+ call {:si_unique_call 3177} nVar3129 := proc130(28);
+ call {:si_unique_call 3178} nVar3130 := proc130(28);
+ call {:si_unique_call 3179} nVar3131 := proc130(28);
+ call {:si_unique_call 3180} nVar3132 := proc130(28);
+ call {:si_unique_call 3181} nVar3133 := proc130(28);
+ call {:si_unique_call 3182} nVar3134 := proc130(4);
+ call {:si_unique_call 3183} nVar3135 := proc130(28);
+ call {:si_unique_call 3184} nVar3136 := proc130(28);
+ call {:si_unique_call 3185} nVar3137 := proc130(24);
+ call {:si_unique_call 3186} nVar3138 := proc130(8);
+ call {:si_unique_call 3187} nVar3140 := proc130(24);
+ call {:si_unique_call 3188} nVar3141 := proc130(28);
+ call {:si_unique_call 3189} nVar3142 := proc130(24);
+ call {:si_unique_call 3190} nVar3143 := proc130(28);
+ call {:si_unique_call 3191} nVar3144 := proc130(28);
+ call {:si_unique_call 3192} nVar3145 := proc130(28);
+ call {:si_unique_call 3193} nVar3146 := proc130(4);
+ call {:si_unique_call 3194} nVar3147 := proc130(28);
+ call {:si_unique_call 3195} nVar3148 := proc130(28);
+ call {:si_unique_call 3196} nVar3149 := proc130(28);
+ call {:si_unique_call 3197} nVar3150 := proc130(28);
+ call {:si_unique_call 3198} nVar3151 := proc130(28);
+ call {:si_unique_call 3199} nVar3152 := proc130(28);
+ call {:si_unique_call 3200} nVar3153 := proc130(28);
+ call {:si_unique_call 3201} nVar3154 := proc130(28);
+ call {:si_unique_call 3202} nVar3155 := proc130(12);
+ call {:si_unique_call 3203} nVar3156 := proc130(4);
+ call {:si_unique_call 3204} nVar3157 := proc130(28);
+ call {:si_unique_call 3205} nVar3158 := proc130(28);
+ call {:si_unique_call 3206} nVar3159 := proc130(28);
+ call {:si_unique_call 3207} nVar3160 := proc130(28);
+ call {:si_unique_call 3208} nVar3161 := proc130(28);
+ call {:si_unique_call 3209} nVar3162 := proc130(16);
+ call {:si_unique_call 3210} nVar3163 := proc130(28);
+ call {:si_unique_call 3211} nVar3164 := proc130(28);
+ call {:si_unique_call 3212} nVar3165 := proc130(28);
+ call {:si_unique_call 3213} nVar3166 := proc130(28);
+ call {:si_unique_call 3214} nVar3167 := proc130(28);
+ call {:si_unique_call 3215} nVar3168 := proc130(28);
+ call {:si_unique_call 3216} nVar3169 := proc130(28);
+ call {:si_unique_call 3217} nVar3170 := proc130(28);
+ call {:si_unique_call 3218} nVar3171 := proc130(12);
+ call {:si_unique_call 3219} nVar3172 := proc130(28);
+ call {:si_unique_call 3220} nVar3173 := proc130(12);
+ call {:si_unique_call 3221} nVar3174 := proc130(16);
+ call {:si_unique_call 3222} nVar3175 := proc130(28);
+ call {:si_unique_call 3223} nVar3176 := proc130(16);
+ call {:si_unique_call 3224} nVar3177 := proc130(28);
+ call {:si_unique_call 3225} nVar3178 := proc130(28);
+ call {:si_unique_call 3226} nVar3179 := proc130(28);
+ call {:si_unique_call 3227} nVar3180 := proc130(4);
+ call {:si_unique_call 3228} nVar3181 := proc130(28);
+ call {:si_unique_call 3229} nVar3182 := proc130(4);
+ call {:si_unique_call 3230} nVar3183 := proc130(28);
+ call {:si_unique_call 3231} nVar3184 := proc130(4);
+ call {:si_unique_call 3232} nVar3185 := proc130(28);
+ call {:si_unique_call 3233} nVar3186 := proc130(28);
+ call {:si_unique_call 3234} nVar3187 := proc130(28);
+ call {:si_unique_call 3235} nVar3188 := proc130(16);
+ call {:si_unique_call 3236} nVar3189 := proc130(12);
+ call {:si_unique_call 3237} nVar3190 := proc130(28);
+ call {:si_unique_call 3238} nVar3191 := proc130(12);
+ call {:si_unique_call 3239} nVar3192 := proc130(28);
+ call {:si_unique_call 3240} nVar3193 := proc130(28);
+ call {:si_unique_call 3241} nVar3194 := proc130(28);
+ call {:si_unique_call 3242} nVar3195 := proc130(28);
+ call {:si_unique_call 3243} nVar3196 := proc130(28);
+ call {:si_unique_call 3244} nVar3197 := proc130(28);
+ call {:si_unique_call 3245} nVar3198 := proc130(24);
+ call {:si_unique_call 3246} nVar3199 := proc130(28);
+ call {:si_unique_call 3247} nVar3200 := proc130(28);
+ call {:si_unique_call 3248} nVar3201 := proc130(28);
+ call {:si_unique_call 3249} nVar3202 := proc130(28);
+ call {:si_unique_call 3250} nVar3203 := proc130(28);
+ call {:si_unique_call 3251} nVar3204 := proc130(28);
+ call {:si_unique_call 3252} nVar3205 := proc130(28);
+ call {:si_unique_call 3253} nVar3206 := proc130(28);
+ call {:si_unique_call 3254} nVar3207 := proc130(28);
+ call {:si_unique_call 3255} nVar3208 := proc130(28);
+ call {:si_unique_call 3256} nVar3209 := proc130(28);
+ call {:si_unique_call 3257} nVar3210 := proc130(28);
+ call {:si_unique_call 3258} nVar3211 := proc130(28);
+ call {:si_unique_call 3259} nVar3212 := proc130(28);
+ call {:si_unique_call 3260} nVar3213 := proc130(12);
+ call {:si_unique_call 3261} nVar3214 := proc130(4);
+ call {:si_unique_call 3262} nVar3215 := proc130(28);
+ call {:si_unique_call 3263} nVar3216 := proc130(12);
+ call {:si_unique_call 3264} nVar3217 := proc130(28);
+ call {:si_unique_call 3265} nVar3218 := proc130(28);
+ call {:si_unique_call 3266} nVar3219 := proc130(28);
+ call {:si_unique_call 3267} nVar3220 := proc130(28);
+ call {:si_unique_call 3268} nVar3221 := proc130(28);
+ call {:si_unique_call 3269} nVar3222 := proc130(28);
+ call {:si_unique_call 3270} nVar3223 := proc130(28);
+ call {:si_unique_call 3271} nVar3224 := proc130(28);
+ call {:si_unique_call 3272} nVar3225 := proc130(28);
+ call {:si_unique_call 3273} nVar3226 := proc130(28);
+ call {:si_unique_call 3274} nVar3227 := proc130(28);
+ call {:si_unique_call 3275} nVar3228 := proc130(12);
+ call {:si_unique_call 3276} nVar3229 := proc130(28);
+ call {:si_unique_call 3277} nVar3230 := proc130(28);
+ call {:si_unique_call 3278} nVar3231 := proc130(28);
+ call {:si_unique_call 3279} nVar3232 := proc130(28);
+ call {:si_unique_call 3280} nVar3233 := proc130(28);
+ call {:si_unique_call 3281} nVar3234 := proc130(28);
+ call {:si_unique_call 3282} nVar3235 := proc130(28);
+ call {:si_unique_call 3283} nVar3236 := proc130(4);
+ call {:si_unique_call 3284} nVar3237 := proc130(24);
+ call {:si_unique_call 3285} nVar3238 := proc130(28);
+ call {:si_unique_call 3286} nVar3239 := proc130(28);
+ call {:si_unique_call 3287} nVar3240 := proc130(16);
+ call {:si_unique_call 3288} nVar3241 := proc130(12);
+ call {:si_unique_call 3289} nVar3242 := proc130(28);
+ call {:si_unique_call 3290} nVar3243 := proc130(28);
+ call {:si_unique_call 3291} nVar3244 := proc130(28);
+ call {:si_unique_call 3292} nVar3245 := proc130(28);
+ call {:si_unique_call 3293} nVar3246 := proc130(28);
+ call {:si_unique_call 3294} nVar3247 := proc130(28);
+ call {:si_unique_call 3295} nVar3248 := proc130(28);
+ call {:si_unique_call 3296} nVar3249 := proc130(28);
+ call {:si_unique_call 3297} nVar3250 := proc130(24);
+ call {:si_unique_call 3298} nVar3251 := proc130(28);
+ call {:si_unique_call 3299} nVar3252 := proc130(28);
+ call {:si_unique_call 3300} nVar3253 := proc130(28);
+ call {:si_unique_call 3301} nVar3254 := proc130(4);
+ call {:si_unique_call 3302} nVar3255 := proc130(28);
+ call {:si_unique_call 3303} nVar3256 := proc130(28);
+ call {:si_unique_call 3304} nVar3257 := proc130(4);
+ call {:si_unique_call 3305} nVar3258 := proc130(24);
+ call {:si_unique_call 3306} nVar3259 := proc130(28);
+ call {:si_unique_call 3307} nVar3260 := proc130(28);
+ call {:si_unique_call 3308} nVar3261 := proc130(28);
+ call {:si_unique_call 3309} nVar3262 := proc130(28);
+ call {:si_unique_call 3310} nVar3263 := proc130(28);
+ call {:si_unique_call 3311} nVar3264 := proc130(28);
+ call {:si_unique_call 3312} nVar3265 := proc130(24);
+ call {:si_unique_call 3313} nVar3266 := proc130(28);
+ call {:si_unique_call 3314} nVar3267 := proc130(28);
+ call {:si_unique_call 3315} nVar3268 := proc130(28);
+ call {:si_unique_call 3316} nVar3269 := proc130(4);
+ call {:si_unique_call 3317} nVar3270 := proc130(28);
+ call {:si_unique_call 3318} nVar3271 := proc130(28);
+ call {:si_unique_call 3319} nVar3272 := proc130(28);
+ call {:si_unique_call 3320} nVar3273 := proc130(28);
+ call {:si_unique_call 3321} nVar3274 := proc130(28);
+ call {:si_unique_call 3322} nVar3275 := proc130(28);
+ call {:si_unique_call 3323} nVar3276 := proc130(28);
+ call {:si_unique_call 3324} nVar3277 := proc130(28);
+ call {:si_unique_call 3325} nVar3278 := proc130(28);
+ call {:si_unique_call 3326} nVar3279 := proc130(16);
+ call {:si_unique_call 3327} nVar3280 := proc130(28);
+ call {:si_unique_call 3328} nVar3281 := proc130(28);
+ call {:si_unique_call 3329} nVar3282 := proc130(28);
+ call {:si_unique_call 3330} nVar3283 := proc130(16);
+ call {:si_unique_call 3331} nVar3284 := proc130(24);
+ call {:si_unique_call 3332} nVar3285 := proc130(28);
+ call {:si_unique_call 3333} nVar3286 := proc130(28);
+ call {:si_unique_call 3334} nVar3287 := proc130(16);
+ call {:si_unique_call 3335} nVar3288 := proc130(4);
+ call {:si_unique_call 3336} nVar3289 := proc130(24);
+ call {:si_unique_call 3337} nVar3290 := proc130(28);
+ call {:si_unique_call 3338} nVar3291 := proc130(28);
+ call {:si_unique_call 3339} nVar3292 := proc130(28);
+ call {:si_unique_call 3340} nVar3293 := proc130(16);
+ call {:si_unique_call 3341} nVar3294 := proc130(4);
+ call {:si_unique_call 3342} nVar3295 := proc130(4);
+ call {:si_unique_call 3343} nVar3296 := proc130(28);
+ call {:si_unique_call 3344} nVar3297 := proc130(28);
+ call {:si_unique_call 3345} nVar3298 := proc130(28);
+ call {:si_unique_call 3346} nVar3299 := proc130(28);
+ call {:si_unique_call 3347} nVar3300 := proc130(28);
+ call {:si_unique_call 3348} nVar3301 := proc130(28);
+ call {:si_unique_call 3349} nVar3302 := proc130(28);
+ call {:si_unique_call 3350} nVar3303 := proc130(28);
+ call {:si_unique_call 3351} nVar3304 := proc130(28);
+ call {:si_unique_call 3352} nVar3305 := proc130(28);
+ call {:si_unique_call 3353} nVar3306 := proc130(28);
+ call {:si_unique_call 3354} nVar3307 := proc130(28);
+ call {:si_unique_call 3355} nVar3308 := proc130(28);
+ call {:si_unique_call 3356} nVar3309 := proc130(28);
+ call {:si_unique_call 3357} nVar3310 := proc130(28);
+ call {:si_unique_call 3358} nVar3311 := proc130(28);
+ call {:si_unique_call 3359} nVar3312 := proc130(12);
+ call {:si_unique_call 3360} nVar3313 := proc130(16);
+ call {:si_unique_call 3361} nVar3314 := proc130(28);
+ call {:si_unique_call 3362} nVar3315 := proc130(4);
+ call {:si_unique_call 3363} nVar3316 := proc130(12);
+ call {:si_unique_call 3364} nVar3317 := proc130(28);
+ call {:si_unique_call 3365} nVar3318 := proc130(28);
+ call {:si_unique_call 3366} nVar3319 := proc130(28);
+ call {:si_unique_call 3367} nVar3320 := proc130(28);
+ call {:si_unique_call 3368} nVar3321 := proc130(28);
+ call {:si_unique_call 3369} nVar3322 := proc130(28);
+ call {:si_unique_call 3370} nVar3323 := proc130(28);
+ call {:si_unique_call 3371} nVar3324 := proc130(12);
+ call {:si_unique_call 3372} nVar3325 := proc130(28);
+ call {:si_unique_call 3373} nVar3326 := proc130(28);
+ call {:si_unique_call 3374} nVar3327 := proc130(16);
+ call {:si_unique_call 3375} nVar3328 := proc130(16);
+ call {:si_unique_call 3376} nVar3329 := proc130(28);
+ call {:si_unique_call 3377} nVar3330 := proc130(28);
+ call {:si_unique_call 3378} nVar3331 := proc130(28);
+ call {:si_unique_call 3379} nVar3332 := proc130(28);
+ call {:si_unique_call 3380} nVar3333 := proc130(28);
+ call {:si_unique_call 3381} nVar3334 := proc130(28);
+ call {:si_unique_call 3382} nVar3335 := proc130(28);
+ call {:si_unique_call 3383} nVar3336 := proc130(28);
+ call {:si_unique_call 3384} nVar3337 := proc130(28);
+ call {:si_unique_call 3385} nVar3338 := proc130(4);
+ call {:si_unique_call 3386} nVar3339 := proc130(28);
+ call {:si_unique_call 3387} nVar3340 := proc130(28);
+ call {:si_unique_call 3388} nVar3341 := proc130(28);
+ call {:si_unique_call 3389} nVar3342 := proc130(28);
+ call {:si_unique_call 3390} nVar3343 := proc130(28);
+ call {:si_unique_call 3391} nVar3344 := proc130(28);
+ call {:si_unique_call 3392} nVar3345 := proc130(28);
+ call {:si_unique_call 3393} nVar4958 := proc130(16);
+ call {:si_unique_call 3394} nVar3346 := proc130(28);
+ call {:si_unique_call 3395} nVar3347 := proc130(28);
+ call {:si_unique_call 3396} nVar3348 := proc130(4);
+ call {:si_unique_call 3397} nVar3349 := proc130(12);
+ call {:si_unique_call 3398} nVar3350 := proc130(28);
+ call {:si_unique_call 3399} nVar3351 := proc130(28);
+ call {:si_unique_call 3400} nVar3352 := proc130(28);
+ call {:si_unique_call 3401} nVar3353 := proc130(28);
+ call {:si_unique_call 3402} nVar3354 := proc130(28);
+ call {:si_unique_call 3403} nVar3355 := proc130(28);
+ call {:si_unique_call 3404} nVar3356 := proc130(12);
+ call {:si_unique_call 3405} nVar3357 := proc130(28);
+ call {:si_unique_call 3406} nVar3358 := proc130(28);
+ call {:si_unique_call 3407} nVar3359 := proc130(28);
+ call {:si_unique_call 3408} nVar3360 := proc130(28);
+ call {:si_unique_call 3409} nVar3361 := proc130(28);
+ call {:si_unique_call 3410} nVar3362 := proc130(28);
+ call {:si_unique_call 3411} nVar3363 := proc130(28);
+ call {:si_unique_call 3412} nVar3364 := proc130(28);
+ call {:si_unique_call 3413} nVar3365 := proc130(16);
+ call {:si_unique_call 3414} nVar3366 := proc130(24);
+ call {:si_unique_call 3415} nVar3367 := proc130(28);
+ call {:si_unique_call 3416} nVar3368 := proc130(28);
+ call {:si_unique_call 3417} nVar3369 := proc130(4);
+ call {:si_unique_call 3418} nVar3370 := proc130(28);
+ call {:si_unique_call 3419} nVar3371 := proc130(28);
+ call {:si_unique_call 3420} nVar3372 := proc130(28);
+ call {:si_unique_call 3421} nVar3373 := proc130(16);
+ call {:si_unique_call 3422} nVar3374 := proc130(28);
+ call {:si_unique_call 3423} nVar3375 := proc130(28);
+ call {:si_unique_call 3424} nVar3376 := proc130(28);
+ call {:si_unique_call 3425} nVar3377 := proc130(4);
+ call {:si_unique_call 3426} nVar3378 := proc130(28);
+ call {:si_unique_call 3427} nVar3379 := proc130(16);
+ call {:si_unique_call 3428} nVar3380 := proc130(28);
+ call {:si_unique_call 3429} nVar3381 := proc130(28);
+ call {:si_unique_call 3430} nVar3382 := proc130(28);
+ call {:si_unique_call 3431} nVar3383 := proc130(28);
+ call {:si_unique_call 3432} nVar3384 := proc130(28);
+ call {:si_unique_call 3433} nVar3385 := proc130(28);
+ call {:si_unique_call 3434} nVar3386 := proc130(28);
+ call {:si_unique_call 3435} nVar3387 := proc130(16);
+ call {:si_unique_call 3436} nVar3388 := proc130(28);
+ call {:si_unique_call 3437} nVar3389 := proc130(4);
+ call {:si_unique_call 3438} nVar3390 := proc130(28);
+ call {:si_unique_call 3439} nVar3391 := proc130(28);
+ call {:si_unique_call 3440} nVar3392 := proc130(4);
+ call {:si_unique_call 3441} nVar3393 := proc130(28);
+ call {:si_unique_call 3442} nVar3394 := proc130(28);
+ call {:si_unique_call 3443} nVar3395 := proc130(24);
+ call {:si_unique_call 3444} nVar3396 := proc130(28);
+ call {:si_unique_call 3445} nVar3397 := proc130(28);
+ call {:si_unique_call 3446} nVar3398 := proc130(28);
+ call {:si_unique_call 3447} nVar3399 := proc130(28);
+ call {:si_unique_call 3448} nVar3400 := proc130(8);
+ call {:si_unique_call 3449} nVar3401 := proc130(4);
+ call {:si_unique_call 3450} nVar3402 := proc130(28);
+ call {:si_unique_call 3451} nVar3403 := proc130(28);
+ call {:si_unique_call 3452} nVar3404 := proc130(28);
+ call {:si_unique_call 3453} nVar3405 := proc130(28);
+ call {:si_unique_call 3454} nVar3406 := proc130(4);
+ call {:si_unique_call 3455} nVar3407 := proc130(28);
+ call {:si_unique_call 3456} nVar3408 := proc130(16);
+ call {:si_unique_call 3457} nVar3409 := proc130(4);
+ call {:si_unique_call 3458} nVar3410 := proc130(28);
+ call {:si_unique_call 3459} nVar3411 := proc130(28);
+ call {:si_unique_call 3460} nVar3412 := proc130(28);
+ call {:si_unique_call 3461} nVar3413 := proc130(28);
+ call {:si_unique_call 3462} nVar3414 := proc130(28);
+ call {:si_unique_call 3463} nVar3415 := proc130(28);
+ call {:si_unique_call 3464} nVar3416 := proc130(28);
+ call {:si_unique_call 3465} nVar3417 := proc130(28);
+ call {:si_unique_call 3466} nVar3418 := proc130(28);
+ call {:si_unique_call 3467} nVar3419 := proc130(28);
+ call {:si_unique_call 3468} nVar3420 := proc130(28);
+ call {:si_unique_call 3469} nVar3421 := proc130(28);
+ call {:si_unique_call 3470} nVar3422 := proc130(24);
+ call {:si_unique_call 3471} nVar3423 := proc130(4);
+ call {:si_unique_call 3472} nVar3424 := proc130(16);
+ call {:si_unique_call 3473} nVar3425 := proc130(28);
+ call {:si_unique_call 3474} nVar3426 := proc130(28);
+ call {:si_unique_call 3475} nVar3427 := proc130(28);
+ call {:si_unique_call 3476} nVar3428 := proc130(28);
+ call {:si_unique_call 3477} nVar3429 := proc130(28);
+ call {:si_unique_call 3478} nVar3430 := proc130(28);
+ call {:si_unique_call 3479} nVar3431 := proc130(28);
+ call {:si_unique_call 3480} nVar3432 := proc130(28);
+ call {:si_unique_call 3481} nVar3433 := proc130(28);
+ call {:si_unique_call 3482} nVar3434 := proc130(28);
+ call {:si_unique_call 3483} nVar3435 := proc130(28);
+ call {:si_unique_call 3484} nVar3436 := proc130(28);
+ call {:si_unique_call 3485} nVar3437 := proc130(28);
+ call {:si_unique_call 3486} nVar3438 := proc130(28);
+ call {:si_unique_call 3487} nVar3439 := proc130(28);
+ call {:si_unique_call 3488} nVar3440 := proc130(28);
+ call {:si_unique_call 3489} nVar3441 := proc130(28);
+ call {:si_unique_call 3490} nVar3442 := proc130(28);
+ call {:si_unique_call 3491} nVar3443 := proc130(28);
+ call {:si_unique_call 3492} nVar3444 := proc130(28);
+ call {:si_unique_call 3493} nVar3445 := proc130(28);
+ call {:si_unique_call 3494} nVar3446 := proc130(28);
+ call {:si_unique_call 3495} nVar3447 := proc130(28);
+ call {:si_unique_call 3496} nVar3448 := proc130(24);
+ call {:si_unique_call 3497} nVar3449 := proc130(28);
+ call {:si_unique_call 3498} nVar3450 := proc130(28);
+ call {:si_unique_call 3499} nVar3451 := proc130(4);
+ call {:si_unique_call 3500} nVar3452 := proc130(28);
+ call {:si_unique_call 3501} nVar3453 := proc130(24);
+ call {:si_unique_call 3502} nVar3454 := proc130(28);
+ call {:si_unique_call 3503} nVar3455 := proc130(28);
+ call {:si_unique_call 3504} nVar3456 := proc130(28);
+ call {:si_unique_call 3505} nVar3457 := proc130(28);
+ call {:si_unique_call 3506} nVar3458 := proc130(16);
+ call {:si_unique_call 3507} nVar3459 := proc130(28);
+ call {:si_unique_call 3508} nVar3460 := proc130(12);
+ call {:si_unique_call 3509} nVar3461 := proc130(28);
+ call {:si_unique_call 3510} nVar3462 := proc130(28);
+ call {:si_unique_call 3511} nVar3463 := proc130(28);
+ call {:si_unique_call 3512} nVar3464 := proc130(28);
+ call {:si_unique_call 3513} nVar3465 := proc130(28);
+ call {:si_unique_call 3514} nVar3466 := proc130(4);
+ call {:si_unique_call 3515} nVar3467 := proc130(28);
+ call {:si_unique_call 3516} nVar3468 := proc130(28);
+ call {:si_unique_call 3517} nVar3469 := proc130(4);
+ call {:si_unique_call 3518} nVar3470 := proc130(28);
+ call {:si_unique_call 3519} nVar3471 := proc130(28);
+ call {:si_unique_call 3520} nVar3472 := proc130(28);
+ call {:si_unique_call 3521} nVar3473 := proc130(12);
+ call {:si_unique_call 3522} nVar3474 := proc130(28);
+ call {:si_unique_call 3523} nVar3475 := proc130(28);
+ call {:si_unique_call 3524} nVar3476 := proc130(28);
+ call {:si_unique_call 3525} nVar3477 := proc130(28);
+ call {:si_unique_call 3526} nVar3478 := proc130(28);
+ call {:si_unique_call 3527} nVar3479 := proc130(16);
+ call {:si_unique_call 3528} nVar3480 := proc130(24);
+ call {:si_unique_call 3529} nVar3481 := proc130(28);
+ call {:si_unique_call 3530} nVar3482 := proc130(28);
+ call {:si_unique_call 3531} nVar3483 := proc130(4);
+ call {:si_unique_call 3532} nVar3484 := proc130(28);
+ call {:si_unique_call 3533} nVar3485 := proc130(28);
+ call {:si_unique_call 3534} nVar3486 := proc130(28);
+ call {:si_unique_call 3535} nVar3487 := proc130(28);
+ call {:si_unique_call 3536} nVar3488 := proc130(28);
+ call {:si_unique_call 3537} nVar3489 := proc130(28);
+ call {:si_unique_call 3538} nVar3490 := proc130(28);
+ call {:si_unique_call 3539} nVar3491 := proc130(24);
+ call {:si_unique_call 3540} nVar3492 := proc130(28);
+ call {:si_unique_call 3541} nVar3493 := proc130(28);
+ call {:si_unique_call 3542} nVar3494 := proc130(28);
+ call {:si_unique_call 3543} nVar3495 := proc130(16);
+ call {:si_unique_call 3544} nVar3496 := proc130(28);
+ call {:si_unique_call 3545} nVar3497 := proc130(24);
+ call {:si_unique_call 3546} nVar3498 := proc130(28);
+ call {:si_unique_call 3547} nVar3499 := proc130(28);
+ call {:si_unique_call 3548} nVar3500 := proc130(28);
+ call {:si_unique_call 3549} nVar3501 := proc130(28);
+ call {:si_unique_call 3550} nVar3502 := proc130(28);
+ call {:si_unique_call 3551} nVar3503 := proc130(28);
+ call {:si_unique_call 3552} nVar3504 := proc130(28);
+ call {:si_unique_call 3553} nVar3505 := proc130(28);
+ call {:si_unique_call 3554} nVar3506 := proc130(28);
+ call {:si_unique_call 3555} nVar3507 := proc130(4);
+ call {:si_unique_call 3556} nVar3508 := proc130(28);
+ call {:si_unique_call 3557} nVar3509 := proc130(28);
+ call {:si_unique_call 3558} nVar3510 := proc130(28);
+ call {:si_unique_call 3559} nVar3511 := proc130(28);
+ call {:si_unique_call 3560} nVar3512 := proc130(28);
+ call {:si_unique_call 3561} nVar3513 := proc130(28);
+ call {:si_unique_call 3562} nVar3514 := proc130(28);
+ call {:si_unique_call 3563} nVar3515 := proc130(28);
+ call {:si_unique_call 3564} nVar3516 := proc130(28);
+ call {:si_unique_call 3565} nVar3517 := proc130(28);
+ call {:si_unique_call 3566} nVar3518 := proc130(28);
+ call {:si_unique_call 3567} nVar3519 := proc130(28);
+ call {:si_unique_call 3568} nVar3520 := proc130(16);
+ call {:si_unique_call 3569} nVar3521 := proc130(56);
+ call {:si_unique_call 3570} nVar3522 := proc130(12);
+ call {:si_unique_call 3571} nVar3523 := proc130(28);
+ call {:si_unique_call 3572} nVar3524 := proc130(28);
+ call {:si_unique_call 3573} nVar3525 := proc130(28);
+ call {:si_unique_call 3574} nVar3526 := proc130(16);
+ call {:si_unique_call 3575} nVar3527 := proc130(28);
+ call {:si_unique_call 3576} nVar3528 := proc130(4);
+ call {:si_unique_call 3577} nVar3529 := proc130(16);
+ call {:si_unique_call 3578} nVar3530 := proc130(28);
+ call {:si_unique_call 3579} nVar3531 := proc130(28);
+ call {:si_unique_call 3580} nVar3532 := proc130(28);
+ call {:si_unique_call 3581} nVar3533 := proc130(28);
+ call {:si_unique_call 3582} nVar3534 := proc130(8);
+ call {:si_unique_call 3583} nVar3535 := proc130(12);
+ call {:si_unique_call 3584} nVar3536 := proc130(28);
+ call {:si_unique_call 3585} nVar3537 := proc130(28);
+ call {:si_unique_call 3586} nVar3538 := proc130(8);
+ call {:si_unique_call 3587} nVar3539 := proc130(28);
+ call {:si_unique_call 3588} nVar3540 := proc130(28);
+ call {:si_unique_call 3589} nVar3541 := proc130(28);
+ call {:si_unique_call 3590} nVar3542 := proc130(28);
+ call {:si_unique_call 3591} nVar3543 := proc130(28);
+ call {:si_unique_call 3592} nVar3544 := proc130(8);
+ call {:si_unique_call 3593} nVar3545 := proc130(12);
+ call {:si_unique_call 3594} nVar3546 := proc130(28);
+ call {:si_unique_call 3595} nVar3547 := proc130(28);
+ call {:si_unique_call 3596} nVar3548 := proc130(12);
+ call {:si_unique_call 3597} nVar3549 := proc130(28);
+ call {:si_unique_call 3598} nVar3550 := proc130(28);
+ call {:si_unique_call 3599} nVar3551 := proc130(28);
+ call {:si_unique_call 3600} nVar3552 := proc130(28);
+ call {:si_unique_call 3601} nVar3553 := proc130(28);
+ call {:si_unique_call 3602} nVar3554 := proc130(28);
+ call {:si_unique_call 3603} nVar3555 := proc130(28);
+ call {:si_unique_call 3604} nVar3556 := proc130(28);
+ call {:si_unique_call 3605} nVar3557 := proc130(28);
+ call {:si_unique_call 3606} nVar3558 := proc130(28);
+ call {:si_unique_call 3607} nVar3559 := proc130(56);
+ call {:si_unique_call 3608} nVar3560 := proc130(28);
+ call {:si_unique_call 3609} nVar3561 := proc130(28);
+ call {:si_unique_call 3610} nVar3562 := proc130(28);
+ call {:si_unique_call 3611} nVar3563 := proc130(28);
+ call {:si_unique_call 3612} nVar3564 := proc130(28);
+ call {:si_unique_call 3613} nVar3565 := proc130(28);
+ call {:si_unique_call 3614} nVar3566 := proc130(12);
+ call {:si_unique_call 3615} nVar3567 := proc130(28);
+ call {:si_unique_call 3616} nVar3568 := proc130(28);
+ call {:si_unique_call 3617} nVar3569 := proc130(4);
+ call {:si_unique_call 3618} nVar3570 := proc130(28);
+ call {:si_unique_call 3619} nVar3571 := proc130(28);
+ call {:si_unique_call 3620} nVar3572 := proc130(28);
+ call {:si_unique_call 3621} nVar3573 := proc130(28);
+ call {:si_unique_call 3622} nVar3574 := proc130(28);
+ call {:si_unique_call 3623} nVar3575 := proc130(28);
+ call {:si_unique_call 3624} nVar3576 := proc130(28);
+ call {:si_unique_call 3625} nVar3577 := proc130(16);
+ call {:si_unique_call 3626} nVar3578 := proc130(12);
+ call {:si_unique_call 3627} nVar3579 := proc130(28);
+ call {:si_unique_call 3628} nVar3580 := proc130(28);
+ call {:si_unique_call 3629} nVar3581 := proc130(28);
+ call {:si_unique_call 3630} nVar3582 := proc130(4);
+ call {:si_unique_call 3631} nVar3583 := proc130(28);
+ call {:si_unique_call 3632} nVar3584 := proc130(12);
+ call {:si_unique_call 3633} nVar3585 := proc130(28);
+ call {:si_unique_call 3634} nVar3586 := proc130(28);
+ call {:si_unique_call 3635} nVar3587 := proc130(28);
+ call {:si_unique_call 3636} nVar3588 := proc130(28);
+ call {:si_unique_call 3637} nVar3589 := proc130(28);
+ call {:si_unique_call 3638} nVar3590 := proc130(28);
+ call {:si_unique_call 3639} nVar3591 := proc130(24);
+ call {:si_unique_call 3640} nVar3592 := proc130(28);
+ call {:si_unique_call 3641} nVar3593 := proc130(28);
+ call {:si_unique_call 3642} nVar3594 := proc130(28);
+ call {:si_unique_call 3643} nVar3595 := proc130(28);
+ call {:si_unique_call 3644} nVar3596 := proc130(28);
+ call {:si_unique_call 3645} nVar3597 := proc130(28);
+ call {:si_unique_call 3646} nVar3598 := proc130(28);
+ call {:si_unique_call 3647} nVar3599 := proc130(28);
+ call {:si_unique_call 3648} nVar3600 := proc130(4);
+ call {:si_unique_call 3649} nVar3601 := proc130(4);
+ call {:si_unique_call 3650} nVar3602 := proc130(16);
+ call {:si_unique_call 3651} nVar4959 := proc130(16);
+ call {:si_unique_call 3652} nVar3603 := proc130(28);
+ call {:si_unique_call 3653} nVar3604 := proc130(28);
+ call {:si_unique_call 3654} nVar3605 := proc130(28);
+ call {:si_unique_call 3655} nVar3606 := proc130(28);
+ call {:si_unique_call 3656} nVar3607 := proc130(28);
+ call {:si_unique_call 3657} nVar3608 := proc130(28);
+ call {:si_unique_call 3658} nVar3609 := proc130(16);
+ call {:si_unique_call 3659} nVar3610 := proc130(28);
+ call {:si_unique_call 3660} nVar3611 := proc130(28);
+ call {:si_unique_call 3661} nVar3612 := proc130(28);
+ call {:si_unique_call 3662} nVar3613 := proc130(28);
+ call {:si_unique_call 3663} nVar3614 := proc130(28);
+ call {:si_unique_call 3664} nVar3615 := proc130(28);
+ call {:si_unique_call 3665} nVar3616 := proc130(28);
+ call {:si_unique_call 3666} nVar3617 := proc130(28);
+ call {:si_unique_call 3667} nVar3618 := proc130(28);
+ call {:si_unique_call 3668} nVar3619 := proc130(28);
+ call {:si_unique_call 3669} nVar3620 := proc130(28);
+ call {:si_unique_call 3670} nVar3621 := proc130(28);
+ call {:si_unique_call 3671} nVar3622 := proc130(12);
+ call {:si_unique_call 3672} nVar3623 := proc130(28);
+ call {:si_unique_call 3673} nVar3624 := proc130(28);
+ call {:si_unique_call 3674} nVar3625 := proc130(28);
+ call {:si_unique_call 3675} nVar3626 := proc130(28);
+ call {:si_unique_call 3676} nVar3627 := proc130(28);
+ call {:si_unique_call 3677} nVar3628 := proc130(28);
+ call {:si_unique_call 3678} nVar3629 := proc130(28);
+ call {:si_unique_call 3679} nVar3630 := proc130(28);
+ call {:si_unique_call 3680} nVar3631 := proc130(28);
+ call {:si_unique_call 3681} nVar3632 := proc130(28);
+ call {:si_unique_call 3682} nVar3633 := proc130(16);
+ call {:si_unique_call 3683} nVar3634 := proc130(28);
+ call {:si_unique_call 3684} nVar3635 := proc130(16);
+ call {:si_unique_call 3685} nVar3636 := proc130(28);
+ call {:si_unique_call 3686} nVar3637 := proc130(28);
+ call {:si_unique_call 3687} nVar3638 := proc130(4);
+ call {:si_unique_call 3688} nVar3639 := proc130(28);
+ call {:si_unique_call 3689} nVar3640 := proc130(28);
+ call {:si_unique_call 3690} nVar3641 := proc130(28);
+ call {:si_unique_call 3691} nVar3642 := proc130(28);
+ call {:si_unique_call 3692} nVar3643 := proc130(28);
+ call {:si_unique_call 3693} nVar3644 := proc130(16);
+ call {:si_unique_call 3694} nVar3645 := proc130(28);
+ call {:si_unique_call 3695} nVar3646 := proc130(28);
+ call {:si_unique_call 3696} nVar3647 := proc130(16);
+ call {:si_unique_call 3697} nVar3648 := proc130(28);
+ call {:si_unique_call 3698} nVar3649 := proc130(28);
+ call {:si_unique_call 3699} nVar3650 := proc130(28);
+ call {:si_unique_call 3700} nVar3651 := proc130(28);
+ call {:si_unique_call 3701} nVar3652 := proc130(28);
+ call {:si_unique_call 3702} nVar3653 := proc130(28);
+ call {:si_unique_call 3703} nVar3654 := proc130(28);
+ call {:si_unique_call 3704} nVar3655 := proc130(24);
+ call {:si_unique_call 3705} nVar3656 := proc130(28);
+ call {:si_unique_call 3706} nVar3657 := proc130(8);
+ call {:si_unique_call 3707} nVar3658 := proc130(28);
+ call {:si_unique_call 3708} nVar3659 := proc130(28);
+ call {:si_unique_call 3709} nVar3660 := proc130(28);
+ call {:si_unique_call 3710} nVar3661 := proc130(28);
+ call {:si_unique_call 3711} nVar3662 := proc130(28);
+ call {:si_unique_call 3712} nVar3663 := proc130(28);
+ call {:si_unique_call 3713} nVar3664 := proc130(16);
+ call {:si_unique_call 3714} nVar3665 := proc130(28);
+ call {:si_unique_call 3715} nVar3666 := proc130(28);
+ call {:si_unique_call 3716} nVar3667 := proc130(28);
+ call {:si_unique_call 3717} nVar3668 := proc130(28);
+ call {:si_unique_call 3718} nVar3669 := proc130(28);
+ call {:si_unique_call 3719} nVar3670 := proc130(4);
+ call {:si_unique_call 3720} nVar3671 := proc130(4);
+ call {:si_unique_call 3721} nVar3672 := proc130(28);
+ call {:si_unique_call 3722} nVar3673 := proc130(28);
+ call {:si_unique_call 3723} nVar3674 := proc130(28);
+ call {:si_unique_call 3724} nVar3675 := proc130(56);
+ call {:si_unique_call 3725} nVar3676 := proc130(4);
+ call {:si_unique_call 3726} nVar3677 := proc130(4);
+ call {:si_unique_call 3727} nVar3678 := proc130(28);
+ call {:si_unique_call 3728} nVar4960 := proc130(16);
+ call {:si_unique_call 3729} nVar3679 := proc130(24);
+ call {:si_unique_call 3730} nVar3680 := proc130(28);
+ call {:si_unique_call 3731} nVar3681 := proc130(28);
+ call {:si_unique_call 3732} nVar3682 := proc130(28);
+ call {:si_unique_call 3733} nVar3683 := proc130(28);
+ call {:si_unique_call 3734} nVar3684 := proc130(28);
+ call {:si_unique_call 3735} nVar3685 := proc130(28);
+ call {:si_unique_call 3736} nVar3686 := proc130(28);
+ call {:si_unique_call 3737} nVar3687 := proc130(28);
+ call {:si_unique_call 3738} nVar3688 := proc130(16);
+ call {:si_unique_call 3739} nVar3689 := proc130(28);
+ call {:si_unique_call 3740} nVar3690 := proc130(28);
+ call {:si_unique_call 3741} nVar3691 := proc130(16);
+ call {:si_unique_call 3742} nVar3692 := proc130(28);
+ call {:si_unique_call 3743} nVar3693 := proc130(12);
+ call {:si_unique_call 3744} nVar3694 := proc130(28);
+ call {:si_unique_call 3745} nVar3695 := proc130(28);
+ call {:si_unique_call 3746} nVar3696 := proc130(28);
+ call {:si_unique_call 3747} nVar3697 := proc130(28);
+ call {:si_unique_call 3748} nVar3698 := proc130(24);
+ call {:si_unique_call 3749} nVar3699 := proc130(4);
+ call {:si_unique_call 3750} nVar3700 := proc130(28);
+ call {:si_unique_call 3751} nVar3701 := proc130(28);
+ call {:si_unique_call 3752} nVar3702 := proc130(16);
+ call {:si_unique_call 3753} nVar3703 := proc130(28);
+ call {:si_unique_call 3754} nVar3704 := proc130(28);
+ call {:si_unique_call 3755} nVar3705 := proc130(28);
+ call {:si_unique_call 3756} nVar3706 := proc130(28);
+ call {:si_unique_call 3757} nVar3707 := proc130(28);
+ call {:si_unique_call 3758} nVar3708 := proc130(4);
+ call {:si_unique_call 3759} nVar3709 := proc130(28);
+ call {:si_unique_call 3760} nVar3710 := proc130(16);
+ call {:si_unique_call 3761} nVar4939 := proc131(4);
+ call {:si_unique_call 3762} nVar4939 := proc131(4);
+ call {:si_unique_call 3763} nVar4939 := proc131(4);
+ call {:si_unique_call 3764} nVar4939 := proc131(4);
+ call {:si_unique_call 3765} nVar4939 := proc131(4);
+ call {:si_unique_call 3766} nVar4939 := proc131(4);
+ call {:si_unique_call 3767} nVar4939 := proc131(4);
+ nVar347 := nVar4939;
+ call {:si_unique_call 3768} nVar4939 := proc131(4);
+ call {:si_unique_call 3769} nVar4939 := proc131(4);
+ nVar399 := nVar4939;
+ call {:si_unique_call 3770} nVar4939 := proc131(4);
+ call {:si_unique_call 3771} nVar4939 := proc131(4);
+ call {:si_unique_call 3772} nVar4939 := proc131(4);
+ call {:si_unique_call 3773} nVar4939 := proc131(4);
+ call {:si_unique_call 3774} nVar4939 := proc131(4);
+ call {:si_unique_call 3775} nVar4939 := proc131(4);
+ call {:si_unique_call 3776} nVar4939 := proc131(4);
+ call {:si_unique_call 3777} nVar4939 := proc131(4);
+ call {:si_unique_call 3778} nVar4939 := proc131(4);
+ call {:si_unique_call 3779} nVar4939 := proc131(4);
+ call {:si_unique_call 3780} nVar4939 := proc131(4);
+ call {:si_unique_call 3781} nVar4939 := proc131(4);
+ call {:si_unique_call 3782} nVar4939 := proc131(4);
+ call {:si_unique_call 3783} nVar4939 := proc131(4);
+ call {:si_unique_call 3784} nVar4939 := proc131(4);
+ call {:si_unique_call 3785} nVar4939 := proc131(4);
+ call {:si_unique_call 3786} nVar4939 := proc131(4);
+ call {:si_unique_call 3787} nVar4939 := proc131(4);
+ call {:si_unique_call 3788} nVar4939 := proc131(4);
+ call {:si_unique_call 3789} nVar4939 := proc131(4);
+ call {:si_unique_call 3790} nVar4939 := proc131(4);
+ call {:si_unique_call 3791} nVar4939 := proc131(4);
+ call {:si_unique_call 3792} nVar4939 := proc131(4);
+ call {:si_unique_call 3793} nVar4939 := proc131(4);
+ nVar1040 := nVar4939;
+ call {:si_unique_call 3794} nVar4939 := proc131(4);
+ call {:si_unique_call 3795} nVar4939 := proc131(4);
+ call {:si_unique_call 3796} nVar4939 := proc131(4);
+ call {:si_unique_call 3797} nVar4939 := proc131(4);
+ nVar1175 := nVar4939;
+ call {:si_unique_call 3798} nVar4939 := proc131(4);
+ call {:si_unique_call 3799} nVar4939 := proc131(4);
+ call {:si_unique_call 3800} nVar4939 := proc131(4);
+ call {:si_unique_call 3801} nVar4939 := proc131(4);
+ call {:si_unique_call 3802} nVar4939 := proc131(4);
+ call {:si_unique_call 3803} nVar4939 := proc131(4);
+ call {:si_unique_call 3804} nVar4939 := proc131(4);
+ call {:si_unique_call 3805} nVar4939 := proc131(4);
+ call {:si_unique_call 3806} nVar4939 := proc131(4);
+ call {:si_unique_call 3807} nVar4939 := proc131(4);
+ call {:si_unique_call 3808} nVar4939 := proc131(4);
+ call {:si_unique_call 3809} nVar4939 := proc131(4);
+ call {:si_unique_call 3810} nVar4939 := proc131(4);
+ call {:si_unique_call 3811} nVar4939 := proc131(4);
+ call {:si_unique_call 3812} nVar4939 := proc131(8);
+ call {:si_unique_call 3813} nVar4939 := proc131(4);
+ call {:si_unique_call 3814} nVar4939 := proc131(4);
+ call {:si_unique_call 3815} nVar4939 := proc131(4);
+ call {:si_unique_call 3816} nVar4939 := proc131(4);
+ call {:si_unique_call 3817} nVar4939 := proc131(4);
+ call {:si_unique_call 3818} nVar4939 := proc131(4);
+ call {:si_unique_call 3819} nVar4939 := proc131(4);
+ call {:si_unique_call 3820} nVar4939 := proc131(4);
+ nVar2103 := nVar4939;
+ call {:si_unique_call 3821} nVar4939 := proc131(4);
+ call {:si_unique_call 3822} nVar4939 := proc131(4);
+ call {:si_unique_call 3823} nVar4939 := proc131(8);
+ nVar2179 := nVar4939;
+ call {:si_unique_call 3824} nVar4939 := proc131(4);
+ call {:si_unique_call 3825} nVar4939 := proc131(4);
+ call {:si_unique_call 3826} nVar4939 := proc131(4);
+ call {:si_unique_call 3827} nVar4939 := proc131(16);
+ call {:si_unique_call 3828} nVar4939 := proc131(4);
+ call {:si_unique_call 3829} nVar4939 := proc131(4);
+ nVar2621 := nVar4939;
+ call {:si_unique_call 3830} nVar4939 := proc131(4);
+ nVar2632 := nVar4939;
+ call {:si_unique_call 3831} nVar4939 := proc131(4);
+ call {:si_unique_call 3832} nVar4939 := proc131(4);
+ call {:si_unique_call 3833} nVar4939 := proc131(4);
+ nVar2754 := nVar4939;
+ call {:si_unique_call 3834} nVar4939 := proc131(4);
+ call {:si_unique_call 3835} nVar4939 := proc131(4);
+ call {:si_unique_call 3836} nVar4939 := proc131(4);
+ call {:si_unique_call 3837} nVar4939 := proc131(4);
+ call {:si_unique_call 3838} nVar4939 := proc131(4);
+ call {:si_unique_call 3839} nVar4939 := proc131(4);
+ call {:si_unique_call 3840} nVar4939 := proc131(4);
+ call {:si_unique_call 3841} nVar4939 := proc131(4);
+ call {:si_unique_call 3842} nVar4939 := proc131(4);
+ call {:si_unique_call 3843} nVar4939 := proc131(4);
+ call {:si_unique_call 3844} nVar4939 := proc131(4);
+ call {:si_unique_call 3845} nVar4939 := proc131(4);
+ call {:si_unique_call 3846} nVar4939 := proc131(4);
+ nVar3048 := nVar4939;
+ call {:si_unique_call 3847} nVar4939 := proc131(4);
+ call {:si_unique_call 3848} nVar4939 := proc131(4);
+ nVar3062 := nVar4939;
+ call {:si_unique_call 3849} nVar4939 := proc131(4);
+ call {:si_unique_call 3850} nVar4939 := proc131(8);
+ nVar3139 := nVar4939;
+ call {:si_unique_call 3851} nVar4939 := proc131(4);
+ call {:si_unique_call 3852} nVar4939 := proc131(60);
+ call {:si_unique_call 3853} nVar4939 := proc131(4);
+ call {:si_unique_call 3854} nVar4939 := proc131(8);
+ call {:si_unique_call 3855} nVar4939 := proc131(4);
+ call {:si_unique_call 3856} nVar4939 := proc131(4);
+ call {:si_unique_call 3857} nVar4939 := proc131(4);
+ call {:si_unique_call 3858} nVar4939 := proc131(28);
+ call {:si_unique_call 3859} nVar4939 := proc131(4);
+ call {:si_unique_call 3860} nVar4939 := proc131(4);
+ call {:si_unique_call 3861} nVar4939 := proc131(8);
+ call {:si_unique_call 3862} nVar4939 := proc131(4);
+ call {:si_unique_call 3863} nVar4939 := proc131(4);
+ call {:si_unique_call 3864} nVar4938 := proc130(8);
+ call {:si_unique_call 3879} nVar4961 := proc130(16);
+ call {:si_unique_call 3880} nVar4962 := proc130(56);
+ call {:si_unique_call 3881} nVar4963 := proc130(72);
+ call {:si_unique_call 3882} nVar4964 := proc130(192);
+ call {:si_unique_call 3883} nVar4965 := proc130(56);
+ call {:si_unique_call 3884} nVar4966 := proc130(336);
+ call {:si_unique_call 3885} nVar4967 := proc130(76);
+ call {:si_unique_call 3886} nVar4968 := proc130(8);
+ call {:si_unique_call 3887} nVar4969 := proc130(112);
+ call {:si_unique_call 3888} nVar4970 := proc130(76);
+ call {:si_unique_call 3889} nVar4971 := proc130(164);
+ call {:si_unique_call 3890} nVar4972 := proc130(324);
+ call {:si_unique_call 3891} nVar4973 := proc130(140);
+ call {:si_unique_call 3892} nVar4974 := proc130(308);
+ call {:si_unique_call 3893} nVar4975 := proc130(8);
+ call {:si_unique_call 3894} nVar4976 := proc130(92);
+ call {:si_unique_call 3895} nVar4977 := proc130(124);
+ call {:si_unique_call 3896} nVar4978 := proc130(280);
+ call {:si_unique_call 3897} nVar4979 := proc130(252);
+ call {:si_unique_call 3898} nVar4980 := proc130(84);
+ call {:si_unique_call 3899} nVar4981 := proc130(32);
+ call {:si_unique_call 3900} nVar4982 := proc130(92);
+ call {:si_unique_call 3901} nVar4983 := proc130(104);
+ call {:si_unique_call 3902} nVar4984 := proc130(284);
+ call {:si_unique_call 3903} nVar4985 := proc130(340);
+ call {:si_unique_call 3904} nVar4986 := proc130(64);
+ call {:si_unique_call 3905} nVar4987 := proc130(368);
+ call {:si_unique_call 3906} nVar4988 := proc130(300);
+ call {:si_unique_call 3907} nVar4989 := proc130(176);
+ call {:si_unique_call 3908} nVar4990 := proc130(8);
+ call {:si_unique_call 3909} nVar4991 := proc130(96);
+ call {:si_unique_call 3910} nVar4992 := proc130(304);
+ call {:si_unique_call 3911} nVar4993 := proc130(272);
+ call {:si_unique_call 3912} nVar4994 := proc130(288);
+ call {:si_unique_call 3913} nVar4995 := proc130(180);
+ call {:si_unique_call 3914} nVar4996 := proc130(192);
+ call {:si_unique_call 3915} nVar4997 := proc130(136);
+ call {:si_unique_call 3916} nVar4998 := proc130(376);
+ call {:si_unique_call 3917} nVar4999 := proc130(140);
+ call {:si_unique_call 3918} nVar5000 := proc130(96);
+ call {:si_unique_call 3919} nVar5001 := proc130(172);
+ call {:si_unique_call 3920} nVar5002 := proc130(184);
+ call {:si_unique_call 3921} nVar5003 := proc130(252);
+ call {:si_unique_call 3922} nVar5004 := proc130(276);
+ call {:si_unique_call 3923} nVar5005 := proc130(104);
+ call {:si_unique_call 3924} nVar5006 := proc130(16);
+ call {:si_unique_call 3925} nVar5007 := proc130(296);
+ call {:si_unique_call 3926} nVar5008 := proc130(112);
+ call {:si_unique_call 3927} nVar5009 := proc130(4);
+ call {:si_unique_call 3928} nVar5010 := proc130(48);
+ call {:si_unique_call 3929} nVar5011 := proc130(44);
+ call {:si_unique_call 3930} nVar5012 := proc130(56);
+ call {:si_unique_call 3931} nVar5013 := proc130(312);
+ call {:si_unique_call 3932} nVar5014 := proc130(100);
+ call {:si_unique_call 3933} nVar5015 := proc130(104);
+ call {:si_unique_call 3934} nVar5016 := proc130(48);
+ call {:si_unique_call 3935} nVar5017 := proc130(104);
+ call {:si_unique_call 3936} nVar5018 := proc130(100);
+ call {:si_unique_call 3937} nVar5019 := proc130(292);
+ call {:si_unique_call 3938} nVar5020 := proc130(156);
+ call {:si_unique_call 3939} nVar5021 := proc130(96);
+ call {:si_unique_call 3940} nVar5022 := proc130(156);
+ call {:si_unique_call 3941} nVar5023 := proc130(288);
+ call {:si_unique_call 3942} nVar5024 := proc130(176);
+ call {:si_unique_call 3943} nVar5025 := proc130(80);
+ call {:si_unique_call 3944} nVar5026 := proc130(24);
+ call {:si_unique_call 3945} nVar5027 := proc130(360);
+ call {:si_unique_call 3946} nVar5028 := proc130(184);
+ call {:si_unique_call 3947} nVar5029 := proc130(132);
+ call {:si_unique_call 3948} nVar5030 := proc130(112);
+ call {:si_unique_call 3949} nVar5031 := proc130(132);
+ call {:si_unique_call 3950} nVar5032 := proc130(236);
+ call {:si_unique_call 3951} nVar5033 := proc130(56);
+ call {:si_unique_call 3952} nVar5034 := proc130(292);
+ call {:si_unique_call 3953} nVar347 := proc130(48);
+ call {:si_unique_call 3954} nVar5035 := proc130(312);
+ call {:si_unique_call 3955} nVar5036 := proc130(88);
+ call {:si_unique_call 3956} nVar5037 := proc130(184);
+ call {:si_unique_call 3957} nVar5038 := proc130(196);
+ call {:si_unique_call 3958} nVar5039 := proc130(24);
+ call {:si_unique_call 3959} nVar5040 := proc130(268);
+ call {:si_unique_call 3960} nVar5041 := proc130(168);
+ call {:si_unique_call 3961} nVar5042 := proc130(36);
+ call {:si_unique_call 3962} nVar5043 := proc130(184);
+ call {:si_unique_call 3963} nVar399 := proc130(20);
+ call {:si_unique_call 3964} nVar5044 := proc130(88);
+ call {:si_unique_call 3965} nVar5045 := proc130(8);
+ call {:si_unique_call 3966} nVar5046 := proc130(324);
+ call {:si_unique_call 3967} nVar5047 := proc130(96);
+ call {:si_unique_call 3968} nVar5048 := proc130(156);
+ call {:si_unique_call 3969} nVar5049 := proc130(404);
+ call {:si_unique_call 3970} nVar5050 := proc130(48);
+ call {:si_unique_call 3971} nVar5051 := proc130(112);
+ call {:si_unique_call 3972} nVar5052 := proc130(172);
+ call {:si_unique_call 3973} nVar5053 := proc130(152);
+ call {:si_unique_call 3974} nVar5054 := proc130(24);
+ call {:si_unique_call 3975} nVar5055 := proc130(124);
+ call {:si_unique_call 3976} nVar5056 := proc130(56);
+ call {:si_unique_call 3977} nVar5057 := proc130(60);
+ call {:si_unique_call 3978} nVar5058 := proc130(216);
+ call {:si_unique_call 3979} nVar5059 := proc130(196);
+ call {:si_unique_call 3980} nVar5060 := proc130(72);
+ call {:si_unique_call 3981} nVar5061 := proc130(44);
+ call {:si_unique_call 3982} nVar5062 := proc130(96);
+ call {:si_unique_call 3983} nVar4939 := proc130(8);
+ call {:si_unique_call 3984} nVar5063 := proc130(8);
+ call {:si_unique_call 3985} nVar5064 := proc130(152);
+ call {:si_unique_call 3986} nVar5065 := proc130(8);
+ call {:si_unique_call 3987} nVar5066 := proc130(272);
+ call {:si_unique_call 3988} nVar5067 := proc130(100);
+ call {:si_unique_call 3989} nVar5068 := proc130(100);
+ call {:si_unique_call 3990} nVar5069 := proc130(140);
+ call {:si_unique_call 3991} nVar5070 := proc130(328);
+ call {:si_unique_call 3992} nVar5071 := proc130(144);
+ call {:si_unique_call 3993} nVar5072 := proc130(324);
+ call {:si_unique_call 3994} nVar5073 := proc130(28);
+ call {:si_unique_call 3995} nVar5074 := proc130(236);
+ call {:si_unique_call 3996} nVar5075 := proc130(136);
+ call {:si_unique_call 3997} nVar5076 := proc130(176);
+ call {:si_unique_call 3998} nVar5077 := proc130(124);
+ call {:si_unique_call 3999} nVar5078 := proc130(48);
+ call {:si_unique_call 4000} nVar5079 := proc130(88);
+ call {:si_unique_call 4001} nVar5080 := proc130(136);
+ call {:si_unique_call 4002} nVar5081 := proc130(200);
+ call {:si_unique_call 4003} nVar5082 := proc130(8);
+ call {:si_unique_call 4004} nVar5083 := proc130(84);
+ call {:si_unique_call 4005} nVar5084 := proc130(164);
+ call {:si_unique_call 4006} nVar5085 := proc130(76);
+ call {:si_unique_call 4007} nVar5086 := proc130(8);
+ call {:si_unique_call 4008} nVar5087 := proc130(100);
+ call {:si_unique_call 4009} nVar5088 := proc130(8);
+ call {:si_unique_call 4010} nVar5089 := proc130(56);
+ call {:si_unique_call 4011} nVar5090 := proc130(288);
+ call {:si_unique_call 4012} nVar5091 := proc130(136);
+ call {:si_unique_call 4013} nVar5092 := proc130(24);
+ call {:si_unique_call 4014} nVar5093 := proc130(152);
+ call {:si_unique_call 4015} nVar5094 := proc130(312);
+ call {:si_unique_call 4016} nVar5095 := proc130(180);
+ call {:si_unique_call 4017} nVar5096 := proc130(164);
+ call {:si_unique_call 4018} nVar5097 := proc130(124);
+ call {:si_unique_call 4019} nVar5098 := proc130(300);
+ call {:si_unique_call 4020} nVar5099 := proc130(264);
+ call {:si_unique_call 4021} nVar5100 := proc130(184);
+ call {:si_unique_call 4022} nVar5101 := proc130(320);
+ call {:si_unique_call 4023} nVar5102 := proc130(64);
+ call {:si_unique_call 4024} nVar5103 := proc130(92);
+ call {:si_unique_call 4025} nVar5104 := proc130(96);
+ call {:si_unique_call 4026} nVar5105 := proc130(132);
+ call {:si_unique_call 4027} nVar5106 := proc130(336);
+ call {:si_unique_call 4028} nVar5107 := proc130(16);
+ call {:si_unique_call 4029} nVar5108 := proc130(180);
+ call {:si_unique_call 4030} nVar5109 := proc130(108);
+ call {:si_unique_call 4031} nVar5110 := proc130(60);
+ call {:si_unique_call 4032} nVar5111 := proc130(128);
+ call {:si_unique_call 4033} nVar5112 := proc130(212);
+ call {:si_unique_call 4034} nVar5113 := proc130(160);
+ call {:si_unique_call 4035} nVar5114 := proc130(84);
+ call {:si_unique_call 4036} nVar5115 := proc130(40);
+ call {:si_unique_call 4037} nVar5116 := proc130(44);
+ call {:si_unique_call 4038} nVar5117 := proc130(340);
+ call {:si_unique_call 4039} nVar5118 := proc130(340);
+ call {:si_unique_call 4040} nVar5119 := proc130(156);
+ call {:si_unique_call 4041} nVar5120 := proc130(308);
+ call {:si_unique_call 4042} nVar5121 := proc130(76);
+ call {:si_unique_call 4043} nVar5122 := proc130(324);
+ call {:si_unique_call 4044} nVar5123 := proc130(324);
+ call {:si_unique_call 4045} nVar5124 := proc130(72);
+ call {:si_unique_call 4046} nVar5125 := proc130(24);
+ call {:si_unique_call 4047} nVar5126 := proc130(68);
+ call {:si_unique_call 4048} nVar5127 := proc130(76);
+ call {:si_unique_call 4049} nVar5128 := proc130(76);
+ call {:si_unique_call 4050} nVar5129 := proc130(72);
+ call {:si_unique_call 4051} nVar5130 := proc130(52);
+ call {:si_unique_call 4052} nVar5131 := proc130(304);
+ call {:si_unique_call 4053} nVar5132 := proc130(180);
+ call {:si_unique_call 4054} nVar5133 := proc130(88);
+ call {:si_unique_call 4055} nVar5134 := proc130(296);
+ call {:si_unique_call 4056} nVar5135 := proc130(72);
+ call {:si_unique_call 4057} nVar5136 := proc130(120);
+ call {:si_unique_call 4058} nVar5137 := proc130(128);
+ call {:si_unique_call 4059} nVar5138 := proc130(108);
+ call {:si_unique_call 4060} nVar5139 := proc130(24);
+ call {:si_unique_call 4061} nVar5140 := proc130(260);
+ call {:si_unique_call 4062} nVar5141 := proc130(184);
+ call {:si_unique_call 4063} nVar5142 := proc130(60);
+ call {:si_unique_call 4064} nVar5143 := proc130(312);
+ call {:si_unique_call 4065} nVar5144 := proc130(276);
+ call {:si_unique_call 4066} nVar5145 := proc130(104);
+ call {:si_unique_call 4067} nVar5146 := proc130(84);
+ call {:si_unique_call 4068} nVar5147 := proc130(156);
+ call {:si_unique_call 4069} nVar5148 := proc130(28);
+ call {:si_unique_call 4070} nVar5149 := proc130(88);
+ call {:si_unique_call 4071} nVar5150 := proc130(8);
+ call {:si_unique_call 4072} nVar5151 := proc130(104);
+ call {:si_unique_call 4073} nVar5152 := proc130(168);
+ call {:si_unique_call 4074} nVar5153 := proc130(208);
+ call {:si_unique_call 4075} nVar5154 := proc130(216);
+ call {:si_unique_call 4076} nVar5155 := proc130(92);
+ call {:si_unique_call 4077} nVar5156 := proc130(116);
+ call {:si_unique_call 4078} nVar5157 := proc130(268);
+ call {:si_unique_call 4079} nVar5158 := proc130(324);
+ call {:si_unique_call 4080} nVar5159 := proc130(100);
+ call {:si_unique_call 4081} nVar5160 := proc130(116);
+ call {:si_unique_call 4082} nVar5161 := proc130(192);
+ call {:si_unique_call 4083} nVar5162 := proc130(68);
+ call {:si_unique_call 4084} nVar5163 := proc130(196);
+ call {:si_unique_call 4085} nVar5164 := proc130(20);
+ call {:si_unique_call 4086} nVar5165 := proc130(232);
+ call {:si_unique_call 4087} nVar5166 := proc130(224);
+ call {:si_unique_call 4088} nVar5167 := proc130(132);
+ call {:si_unique_call 4089} nVar5168 := proc130(152);
+ call {:si_unique_call 4090} nVar5169 := proc130(296);
+ call {:si_unique_call 4091} nVar5170 := proc130(108);
+ call {:si_unique_call 4092} nVar5171 := proc130(24);
+ call {:si_unique_call 4093} nVar5172 := proc130(80);
+ call {:si_unique_call 4094} nVar5173 := proc130(8);
+ call {:si_unique_call 4095} nVar5174 := proc130(244);
+ call {:si_unique_call 4096} nVar5175 := proc130(164);
+ call {:si_unique_call 4097} nVar5176 := proc130(84);
+ call {:si_unique_call 4098} nVar5177 := proc130(312);
+ call {:si_unique_call 4099} nVar5178 := proc130(268);
+ call {:si_unique_call 4100} nVar5179 := proc130(24);
+ call {:si_unique_call 4101} nVar5180 := proc130(144);
+ call {:si_unique_call 4102} nVar5181 := proc130(84);
+ call {:si_unique_call 4103} nVar5182 := proc130(112);
+ call {:si_unique_call 4104} nVar5183 := proc130(4);
+ call {:si_unique_call 4105} nVar5184 := proc130(332);
+ call {:si_unique_call 4106} nVar5185 := proc130(100);
+ call {:si_unique_call 4107} nVar5186 := proc130(96);
+ call {:si_unique_call 4108} nVar5187 := proc130(300);
+ call {:si_unique_call 4109} nVar5188 := proc130(176);
+ call {:si_unique_call 4110} nVar5189 := proc130(24);
+ call {:si_unique_call 4111} nVar5190 := proc130(60);
+ call {:si_unique_call 4112} nVar5191 := proc130(68);
+ call {:si_unique_call 4113} nVar5192 := proc130(16);
+ call {:si_unique_call 4114} nVar5193 := proc130(96);
+ call {:si_unique_call 4115} nVar5194 := proc130(152);
+ call {:si_unique_call 4116} nVar5195 := proc130(140);
+ call {:si_unique_call 4117} nVar5196 := proc130(328);
+ call {:si_unique_call 4118} nVar5197 := proc130(296);
+ call {:si_unique_call 4119} nVar5198 := proc130(56);
+ call {:si_unique_call 4120} nVar5199 := proc130(24);
+ call {:si_unique_call 4121} nVar5200 := proc130(276);
+ call {:si_unique_call 4122} nVar5201 := proc130(288);
+ call {:si_unique_call 4123} nVar5202 := proc130(88);
+ call {:si_unique_call 4124} nVar5203 := proc130(220);
+ call {:si_unique_call 4125} nVar5204 := proc130(100);
+ call {:si_unique_call 4126} nVar5205 := proc130(224);
+ call {:si_unique_call 4127} nVar5206 := proc130(60);
+ call {:si_unique_call 4128} nVar5207 := proc130(112);
+ call {:si_unique_call 4129} nVar1040 := proc130(24);
+ call {:si_unique_call 4130} nVar5208 := proc130(300);
+ call {:si_unique_call 4131} nVar5209 := proc130(132);
+ call {:si_unique_call 4132} nVar5210 := proc130(24);
+ call {:si_unique_call 4133} nVar5211 := proc130(124);
+ call {:si_unique_call 4134} nVar5212 := proc130(96);
+ call {:si_unique_call 4135} nVar5213 := proc130(176);
+ call {:si_unique_call 4136} nVar5214 := proc130(136);
+ call {:si_unique_call 4137} nVar5215 := proc130(48);
+ call {:si_unique_call 4138} nVar5216 := proc130(28);
+ call {:si_unique_call 4139} nVar5217 := proc130(296);
+ call {:si_unique_call 4140} nVar5218 := proc130(268);
+ call {:si_unique_call 4141} nVar5219 := proc130(144);
+ call {:si_unique_call 4142} nVar5220 := proc130(152);
+ call {:si_unique_call 4143} nVar5221 := proc130(292);
+ call {:si_unique_call 4144} nVar5222 := proc130(100);
+ call {:si_unique_call 4145} nVar5223 := proc130(252);
+ call {:si_unique_call 4146} nVar5224 := proc130(124);
+ call {:si_unique_call 4147} nVar5225 := proc130(220);
+ call {:si_unique_call 4148} nVar5226 := proc130(24);
+ call {:si_unique_call 4149} nVar5227 := proc130(16);
+ call {:si_unique_call 4150} nVar5228 := proc130(100);
+ call {:si_unique_call 4151} nVar5229 := proc130(116);
+ call {:si_unique_call 4152} nVar5230 := proc130(148);
+ call {:si_unique_call 4153} nVar5231 := proc130(144);
+ call {:si_unique_call 4154} nVar5232 := proc130(164);
+ call {:si_unique_call 4155} nVar5233 := proc130(344);
+ call {:si_unique_call 4156} nVar5234 := proc130(296);
+ call {:si_unique_call 4157} nVar5235 := proc130(16);
+ call {:si_unique_call 4158} nVar5236 := proc130(40);
+ call {:si_unique_call 4159} nVar5237 := proc130(60);
+ call {:si_unique_call 4160} nVar5238 := proc130(228);
+ call {:si_unique_call 4161} nVar5239 := proc130(348);
+ call {:si_unique_call 4162} nVar5240 := proc130(332);
+ call {:si_unique_call 4163} nVar5241 := proc130(160);
+ call {:si_unique_call 4164} nVar5242 := proc130(112);
+ call {:si_unique_call 4165} nVar5243 := proc130(80);
+ call {:si_unique_call 4166} nVar1175 := proc130(20);
+ call {:si_unique_call 4167} nVar5244 := proc130(20);
+ call {:si_unique_call 4168} nVar5245 := proc130(40);
+ call {:si_unique_call 4169} nVar5246 := proc130(64);
+ call {:si_unique_call 4170} nVar5247 := proc130(96);
+ call {:si_unique_call 4171} nVar5248 := proc130(192);
+ call {:si_unique_call 4172} nVar5249 := proc130(124);
+ call {:si_unique_call 4173} nVar5250 := proc130(72);
+ call {:si_unique_call 4174} nVar5251 := proc130(228);
+ call {:si_unique_call 4175} nVar5252 := proc130(48);
+ call {:si_unique_call 4176} nVar5253 := proc130(224);
+ call {:si_unique_call 4177} nVar5254 := proc130(152);
+ call {:si_unique_call 4178} nVar5255 := proc130(396);
+ call {:si_unique_call 4179} nVar5256 := proc130(136);
+ call {:si_unique_call 4180} nVar5257 := proc130(120);
+ call {:si_unique_call 4181} nVar5258 := proc130(196);
+ call {:si_unique_call 4182} nVar5259 := proc130(60);
+ call {:si_unique_call 4183} nVar5260 := proc130(260);
+ call {:si_unique_call 4184} nVar5261 := proc130(304);
+ call {:si_unique_call 4185} nVar5262 := proc130(136);
+ call {:si_unique_call 4186} nVar5263 := proc130(204);
+ call {:si_unique_call 4187} nVar5264 := proc130(328);
+ call {:si_unique_call 4188} nVar5265 := proc130(136);
+ call {:si_unique_call 4189} nVar5266 := proc130(184);
+ call {:si_unique_call 4190} nVar5267 := proc130(148);
+ call {:si_unique_call 4191} nVar5268 := proc130(324);
+ call {:si_unique_call 4192} nVar5269 := proc130(108);
+ call {:si_unique_call 4193} nVar5270 := proc130(44);
+ call {:si_unique_call 4194} nVar5271 := proc130(116);
+ call {:si_unique_call 4195} nVar5272 := proc130(60);
+ call {:si_unique_call 4196} nVar5273 := proc130(128);
+ call {:si_unique_call 4197} nVar5274 := proc130(344);
+ call {:si_unique_call 4198} nVar5275 := proc130(184);
+ call {:si_unique_call 4199} nVar5276 := proc130(144);
+ call {:si_unique_call 4200} nVar5277 := proc130(276);
+ call {:si_unique_call 4201} nVar5278 := proc130(264);
+ call {:si_unique_call 4202} nVar5279 := proc130(68);
+ call {:si_unique_call 4203} nVar5280 := proc130(96);
+ call {:si_unique_call 4204} nVar5281 := proc130(128);
+ call {:si_unique_call 4205} nVar5282 := proc130(172);
+ call {:si_unique_call 4206} nVar5283 := proc130(320);
+ call {:si_unique_call 4207} nVar5284 := proc130(128);
+ call {:si_unique_call 4208} nVar5285 := proc130(316);
+ call {:si_unique_call 4209} nVar5286 := proc130(68);
+ call {:si_unique_call 4210} nVar5287 := proc130(288);
+ call {:si_unique_call 4211} nVar5288 := proc130(260);
+ call {:si_unique_call 4212} nVar5289 := proc130(184);
+ call {:si_unique_call 4213} nVar5290 := proc130(140);
+ call {:si_unique_call 4214} nVar5291 := proc130(208);
+ call {:si_unique_call 4215} nVar5292 := proc130(68);
+ call {:si_unique_call 4216} nVar5293 := proc130(44);
+ call {:si_unique_call 4217} nVar5294 := proc130(128);
+ call {:si_unique_call 4218} nVar5295 := proc130(396);
+ call {:si_unique_call 4219} nVar5296 := proc130(144);
+ call {:si_unique_call 4220} nVar5297 := proc130(344);
+ call {:si_unique_call 4221} nVar5298 := proc130(300);
+ call {:si_unique_call 4222} nVar5299 := proc130(200);
+ call {:si_unique_call 4223} nVar5300 := proc130(232);
+ call {:si_unique_call 4224} nVar5301 := proc130(280);
+ call {:si_unique_call 4225} nVar5302 := proc130(104);
+ call {:si_unique_call 4226} nVar5303 := proc130(320);
+ call {:si_unique_call 4227} nVar5304 := proc130(20);
+ call {:si_unique_call 4228} nVar5305 := proc130(112);
+ call {:si_unique_call 4229} nVar5306 := proc130(92);
+ call {:si_unique_call 4230} nVar5307 := proc130(324);
+ call {:si_unique_call 4231} nVar5308 := proc130(24);
+ call {:si_unique_call 4232} nVar5309 := proc130(92);
+ call {:si_unique_call 4233} nVar5310 := proc130(56);
+ call {:si_unique_call 4234} nVar5311 := proc130(140);
+ call {:si_unique_call 4235} nVar5312 := proc130(24);
+ call {:si_unique_call 4236} nVar5313 := proc130(240);
+ call {:si_unique_call 4237} nVar5314 := proc130(116);
+ call {:si_unique_call 4238} nVar5315 := proc130(280);
+ call {:si_unique_call 4239} nVar5316 := proc130(164);
+ call {:si_unique_call 4240} nVar5317 := proc130(156);
+ call {:si_unique_call 4241} nVar5318 := proc130(24);
+ call {:si_unique_call 4242} nVar5319 := proc130(244);
+ call {:si_unique_call 4243} nVar5320 := proc130(64);
+ call {:si_unique_call 4244} nVar5321 := proc130(276);
+ call {:si_unique_call 4245} nVar5322 := proc130(320);
+ call {:si_unique_call 4246} nVar5323 := proc130(180);
+ call {:si_unique_call 4247} nVar5324 := proc130(96);
+ call {:si_unique_call 4248} nVar5325 := proc130(76);
+ call {:si_unique_call 4249} nVar5326 := proc130(152);
+ call {:si_unique_call 4250} nVar5327 := proc130(200);
+ call {:si_unique_call 4251} nVar5328 := proc130(192);
+ call {:si_unique_call 4252} nVar5329 := proc130(28);
+ call {:si_unique_call 4253} nVar5330 := proc130(132);
+ call {:si_unique_call 4254} nVar5331 := proc130(168);
+ call {:si_unique_call 4255} nVar5332 := proc130(28);
+ call {:si_unique_call 4256} nVar5333 := proc130(92);
+ call {:si_unique_call 4257} nVar5334 := proc130(296);
+ call {:si_unique_call 4258} nVar5335 := proc130(172);
+ call {:si_unique_call 4259} nVar5336 := proc130(304);
+ call {:si_unique_call 4260} nVar5337 := proc130(144);
+ call {:si_unique_call 4261} nVar5338 := proc130(136);
+ call {:si_unique_call 4262} nVar5339 := proc130(4);
+ call {:si_unique_call 4263} nVar5340 := proc130(184);
+ call {:si_unique_call 4264} nVar5341 := proc130(8);
+ call {:si_unique_call 4265} nVar5342 := proc130(76);
+ call {:si_unique_call 4266} nVar5343 := proc130(288);
+ call {:si_unique_call 4267} nVar5344 := proc130(8);
+ call {:si_unique_call 4268} nVar5345 := proc130(8);
+ call {:si_unique_call 4269} nVar5346 := proc130(168);
+ call {:si_unique_call 4270} nVar5347 := proc130(88);
+ call {:si_unique_call 4271} nVar5348 := proc130(4);
+ call {:si_unique_call 4272} nVar5349 := proc130(268);
+ call {:si_unique_call 4273} nVar5350 := proc130(96);
+ call {:si_unique_call 4274} nVar5351 := proc130(136);
+ call {:si_unique_call 4275} nVar5352 := proc130(76);
+ call {:si_unique_call 4276} nVar5353 := proc130(284);
+ call {:si_unique_call 4277} nVar5354 := proc130(24);
+ call {:si_unique_call 4278} nVar5355 := proc130(60);
+ call {:si_unique_call 4279} nVar5356 := proc130(72);
+ call {:si_unique_call 4280} nVar5357 := proc130(156);
+ call {:si_unique_call 4281} nVar5358 := proc130(168);
+ call {:si_unique_call 4282} nVar5359 := proc130(96);
+ call {:si_unique_call 4283} nVar5360 := proc130(100);
+ call {:si_unique_call 4284} nVar5361 := proc130(356);
+ call {:si_unique_call 4285} nVar5362 := proc130(140);
+ call {:si_unique_call 4286} nVar5363 := proc130(172);
+ call {:si_unique_call 4287} nVar5364 := proc130(128);
+ call {:si_unique_call 4288} nVar5365 := proc130(200);
+ call {:si_unique_call 4289} nVar5366 := proc130(20);
+ call {:si_unique_call 4290} nVar5367 := proc130(96);
+ call {:si_unique_call 4291} nVar5368 := proc130(332);
+ call {:si_unique_call 4292} nVar5369 := proc130(36);
+ call {:si_unique_call 4293} nVar5370 := proc130(128);
+ call {:si_unique_call 4294} nVar5371 := proc130(8);
+ call {:si_unique_call 4295} nVar5372 := proc130(104);
+ call {:si_unique_call 4296} nVar5373 := proc130(156);
+ call {:si_unique_call 4297} nVar5374 := proc130(332);
+ call {:si_unique_call 4298} nVar5375 := proc130(136);
+ call {:si_unique_call 4299} nVar5376 := proc130(296);
+ call {:si_unique_call 4300} nVar5377 := proc130(92);
+ call {:si_unique_call 4301} nVar5378 := proc130(100);
+ call {:si_unique_call 4302} nVar5379 := proc130(64);
+ call {:si_unique_call 4303} nVar5380 := proc130(68);
+ call {:si_unique_call 4304} nVar5381 := proc130(156);
+ call {:si_unique_call 4305} nVar5382 := proc130(296);
+ call {:si_unique_call 4306} nVar5383 := proc130(68);
+ call {:si_unique_call 4307} nVar5384 := proc130(8);
+ call {:si_unique_call 4308} nVar5385 := proc130(292);
+ call {:si_unique_call 4309} nVar5386 := proc130(212);
+ call {:si_unique_call 4310} nVar5387 := proc130(324);
+ call {:si_unique_call 4311} nVar5388 := proc130(220);
+ call {:si_unique_call 4312} nVar5389 := proc130(200);
+ call {:si_unique_call 4313} nVar5390 := proc130(152);
+ call {:si_unique_call 4314} nVar5391 := proc130(32);
+ call {:si_unique_call 4315} nVar5392 := proc130(424);
+ call {:si_unique_call 4316} nVar5393 := proc130(8);
+ call {:si_unique_call 4317} nVar5394 := proc130(128);
+ call {:si_unique_call 4318} nVar5395 := proc130(260);
+ call {:si_unique_call 4319} nVar5396 := proc130(152);
+ call {:si_unique_call 4320} nVar5397 := proc130(152);
+ call {:si_unique_call 4321} nVar5398 := proc130(204);
+ call {:si_unique_call 4322} nVar5399 := proc130(292);
+ call {:si_unique_call 4323} nVar5400 := proc130(72);
+ call {:si_unique_call 4324} nVar5401 := proc130(120);
+ call {:si_unique_call 4325} nVar5402 := proc130(188);
+ call {:si_unique_call 4326} nVar5403 := proc130(116);
+ call {:si_unique_call 4327} nVar5404 := proc130(316);
+ call {:si_unique_call 4328} nVar5405 := proc130(28);
+ call {:si_unique_call 4329} nVar5406 := proc130(300);
+ call {:si_unique_call 4330} nVar5407 := proc130(8);
+ call {:si_unique_call 4331} nVar5408 := proc130(100);
+ call {:si_unique_call 4332} nVar5409 := proc130(232);
+ call {:si_unique_call 4333} nVar5410 := proc130(88);
+ call {:si_unique_call 4334} nVar5411 := proc130(136);
+ call {:si_unique_call 4335} nVar5412 := proc130(316);
+ call {:si_unique_call 4336} nVar5413 := proc130(180);
+ call {:si_unique_call 4337} nVar5414 := proc130(288);
+ call {:si_unique_call 4338} nVar5415 := proc130(156);
+ call {:si_unique_call 4339} nVar5416 := proc130(76);
+ call {:si_unique_call 4340} nVar5417 := proc130(264);
+ call {:si_unique_call 4341} nVar5418 := proc130(324);
+ call {:si_unique_call 4342} nVar5419 := proc130(280);
+ call {:si_unique_call 4343} nVar5420 := proc130(120);
+ call {:si_unique_call 4344} nVar5421 := proc130(116);
+ call {:si_unique_call 4345} nVar5422 := proc130(188);
+ call {:si_unique_call 4346} nVar5423 := proc130(104);
+ call {:si_unique_call 4347} nVar5424 := proc130(24);
+ call {:si_unique_call 4348} nVar5425 := proc130(40);
+ call {:si_unique_call 4349} nVar5426 := proc130(108);
+ call {:si_unique_call 4350} nVar5427 := proc130(140);
+ call {:si_unique_call 4351} nVar5428 := proc130(184);
+ call {:si_unique_call 4352} nVar5429 := proc130(380);
+ call {:si_unique_call 4353} nVar5430 := proc130(132);
+ call {:si_unique_call 4354} nVar5431 := proc130(336);
+ call {:si_unique_call 4355} nVar5432 := proc130(72);
+ call {:si_unique_call 4356} nVar5433 := proc130(228);
+ call {:si_unique_call 4357} nVar5434 := proc130(8);
+ call {:si_unique_call 4358} nVar5435 := proc130(28);
+ call {:si_unique_call 4359} nVar5436 := proc130(96);
+ call {:si_unique_call 4360} nVar5437 := proc130(128);
+ call {:si_unique_call 4361} nVar5438 := proc130(124);
+ call {:si_unique_call 4362} nVar5439 := proc130(128);
+ call {:si_unique_call 4363} nVar5440 := proc130(92);
+ call {:si_unique_call 4364} nVar5441 := proc130(116);
+ call {:si_unique_call 4365} nVar5442 := proc130(28);
+ call {:si_unique_call 4366} nVar5443 := proc130(40);
+ call {:si_unique_call 4367} nVar5444 := proc130(264);
+ call {:si_unique_call 4368} nVar5445 := proc130(328);
+ call {:si_unique_call 4369} nVar5446 := proc130(296);
+ call {:si_unique_call 4370} nVar5447 := proc130(160);
+ call {:si_unique_call 4371} nVar5448 := proc130(332);
+ call {:si_unique_call 4372} nVar5449 := proc130(152);
+ call {:si_unique_call 4373} nVar5450 := proc130(112);
+ call {:si_unique_call 4374} nVar5451 := proc130(24);
+ call {:si_unique_call 4375} nVar5452 := proc130(72);
+ call {:si_unique_call 4376} nVar5453 := proc130(284);
+ call {:si_unique_call 4377} nVar5454 := proc130(148);
+ call {:si_unique_call 4378} nVar5455 := proc130(108);
+ call {:si_unique_call 4379} nVar5456 := proc130(268);
+ call {:si_unique_call 4380} nVar5457 := proc130(300);
+ call {:si_unique_call 4381} nVar5458 := proc130(28);
+ call {:si_unique_call 4382} nVar5459 := proc130(96);
+ call {:si_unique_call 4383} nVar2103 := proc130(20);
+ call {:si_unique_call 4384} nVar5460 := proc130(164);
+ call {:si_unique_call 4385} nVar5461 := proc130(36);
+ call {:si_unique_call 4386} nVar5462 := proc130(24);
+ call {:si_unique_call 4387} nVar5463 := proc130(332);
+ call {:si_unique_call 4388} nVar5464 := proc130(140);
+ call {:si_unique_call 4389} nVar5465 := proc130(80);
+ call {:si_unique_call 4390} nVar5466 := proc130(164);
+ call {:si_unique_call 4391} nVar5467 := proc130(80);
+ call {:si_unique_call 4392} nVar5468 := proc130(196);
+ call {:si_unique_call 4393} nVar2179 := proc130(16);
+ call {:si_unique_call 4394} nVar5469 := proc130(16);
+ call {:si_unique_call 4395} nVar5470 := proc130(76);
+ call {:si_unique_call 4396} nVar5471 := proc130(176);
+ call {:si_unique_call 4397} nVar5472 := proc130(152);
+ call {:si_unique_call 4398} nVar5473 := proc130(68);
+ call {:si_unique_call 4399} nVar5474 := proc130(32);
+ call {:si_unique_call 4400} nVar5475 := proc130(152);
+ call {:si_unique_call 4401} nVar5476 := proc130(100);
+ call {:si_unique_call 4402} nVar5477 := proc130(56);
+ call {:si_unique_call 4403} nVar5478 := proc130(124);
+ call {:si_unique_call 4404} nVar5479 := proc130(112);
+ call {:si_unique_call 4405} nVar5480 := proc130(48);
+ call {:si_unique_call 4406} nVar5481 := proc130(188);
+ call {:si_unique_call 4407} nVar5482 := proc130(84);
+ call {:si_unique_call 4408} nVar5483 := proc130(220);
+ call {:si_unique_call 4409} nVar5484 := proc130(136);
+ call {:si_unique_call 4410} nVar5485 := proc130(136);
+ call {:si_unique_call 4411} nVar5486 := proc130(104);
+ call {:si_unique_call 4412} nVar5487 := proc130(296);
+ call {:si_unique_call 4413} nVar5488 := proc130(112);
+ call {:si_unique_call 4414} nVar5489 := proc130(272);
+ call {:si_unique_call 4415} nVar5490 := proc130(104);
+ call {:si_unique_call 4416} nVar5491 := proc130(68);
+ call {:si_unique_call 4417} nVar5492 := proc130(104);
+ call {:si_unique_call 4418} nVar5493 := proc130(264);
+ call {:si_unique_call 4419} nVar5494 := proc130(220);
+ call {:si_unique_call 4420} nVar5495 := proc130(56);
+ call {:si_unique_call 4421} nVar5496 := proc130(68);
+ call {:si_unique_call 4422} nVar5497 := proc130(248);
+ call {:si_unique_call 4423} nVar5498 := proc130(128);
+ call {:si_unique_call 4424} nVar5499 := proc130(16);
+ call {:si_unique_call 4425} nVar5500 := proc130(116);
+ call {:si_unique_call 4426} nVar5501 := proc130(148);
+ call {:si_unique_call 4427} nVar5502 := proc130(152);
+ call {:si_unique_call 4428} nVar5503 := proc130(104);
+ call {:si_unique_call 4429} nVar5504 := proc130(100);
+ call {:si_unique_call 4430} nVar5505 := proc130(136);
+ call {:si_unique_call 4431} nVar5506 := proc130(88);
+ call {:si_unique_call 4432} nVar5507 := proc130(292);
+ call {:si_unique_call 4433} nVar5508 := proc130(128);
+ call {:si_unique_call 4434} nVar5509 := proc130(20);
+ call {:si_unique_call 4435} nVar5510 := proc130(260);
+ call {:si_unique_call 4436} nVar5511 := proc130(56);
+ call {:si_unique_call 4437} nVar5512 := proc130(296);
+ call {:si_unique_call 4438} nVar5513 := proc130(44);
+ call {:si_unique_call 4439} nVar5514 := proc130(40);
+ call {:si_unique_call 4440} nVar5515 := proc130(172);
+ call {:si_unique_call 4441} nVar5516 := proc130(80);
+ call {:si_unique_call 4442} nVar5517 := proc130(196);
+ call {:si_unique_call 4443} nVar5518 := proc130(60);
+ call {:si_unique_call 4444} nVar5519 := proc130(116);
+ call {:si_unique_call 4445} nVar5520 := proc130(120);
+ call {:si_unique_call 4446} nVar5521 := proc130(144);
+ call {:si_unique_call 4447} nVar5522 := proc130(4);
+ call {:si_unique_call 4448} nVar5523 := proc130(108);
+ call {:si_unique_call 4449} nVar5524 := proc130(124);
+ call {:si_unique_call 4450} nVar5525 := proc130(312);
+ call {:si_unique_call 4451} nVar5526 := proc130(56);
+ call {:si_unique_call 4452} nVar5527 := proc130(288);
+ call {:si_unique_call 4453} nVar5528 := proc130(116);
+ call {:si_unique_call 4454} nVar5529 := proc130(256);
+ call {:si_unique_call 4455} nVar5530 := proc130(80);
+ call {:si_unique_call 4456} nVar5531 := proc130(224);
+ call {:si_unique_call 4457} nVar5532 := proc130(204);
+ call {:si_unique_call 4458} nVar5533 := proc130(96);
+ call {:si_unique_call 4459} nVar5534 := proc130(216);
+ call {:si_unique_call 4460} nVar5535 := proc130(124);
+ call {:si_unique_call 4461} nVar5536 := proc130(136);
+ call {:si_unique_call 4462} nVar5537 := proc130(36);
+ call {:si_unique_call 4463} nVar5538 := proc130(148);
+ call {:si_unique_call 4464} nVar5539 := proc130(136);
+ call {:si_unique_call 4465} nVar5540 := proc130(180);
+ call {:si_unique_call 4466} nVar5541 := proc130(188);
+ call {:si_unique_call 4467} nVar5542 := proc130(280);
+ call {:si_unique_call 4468} nVar5543 := proc130(24);
+ call {:si_unique_call 4469} nVar5544 := proc130(228);
+ call {:si_unique_call 4470} nVar5545 := proc130(116);
+ call {:si_unique_call 4471} nVar5546 := proc130(108);
+ call {:si_unique_call 4472} nVar5547 := proc130(108);
+ call {:si_unique_call 4473} nVar5548 := proc130(96);
+ call {:si_unique_call 4474} nVar5549 := proc130(260);
+ call {:si_unique_call 4475} nVar5550 := proc130(276);
+ call {:si_unique_call 4476} nVar5551 := proc130(48);
+ call {:si_unique_call 4477} nVar5552 := proc130(208);
+ call {:si_unique_call 4478} nVar5553 := proc130(224);
+ call {:si_unique_call 4479} nVar5554 := proc130(272);
+ call {:si_unique_call 4480} nVar5555 := proc130(388);
+ call {:si_unique_call 4481} nVar5556 := proc130(180);
+ call {:si_unique_call 4482} nVar5557 := proc130(108);
+ call {:si_unique_call 4483} nVar5558 := proc130(156);
+ call {:si_unique_call 4484} nVar5559 := proc130(132);
+ call {:si_unique_call 4485} nVar5560 := proc130(152);
+ call {:si_unique_call 4486} nVar5561 := proc130(148);
+ call {:si_unique_call 4487} nVar5562 := proc130(84);
+ call {:si_unique_call 4488} nVar5563 := proc130(308);
+ call {:si_unique_call 4489} nVar5564 := proc130(144);
+ call {:si_unique_call 4490} nVar5565 := proc130(172);
+ call {:si_unique_call 4491} nVar2621 := proc130(36);
+ call {:si_unique_call 4492} nVar5566 := proc130(168);
+ call {:si_unique_call 4493} nVar5567 := proc130(116);
+ call {:si_unique_call 4494} nVar2632 := proc130(20);
+ call {:si_unique_call 4495} nVar5568 := proc130(336);
+ call {:si_unique_call 4496} nVar5569 := proc130(96);
+ call {:si_unique_call 4497} nVar5570 := proc130(100);
+ call {:si_unique_call 4498} nVar5571 := proc130(180);
+ call {:si_unique_call 4499} nVar5572 := proc130(8);
+ call {:si_unique_call 4500} nVar5573 := proc130(60);
+ call {:si_unique_call 4501} nVar5574 := proc130(16);
+ call {:si_unique_call 4502} nVar5575 := proc130(56);
+ call {:si_unique_call 4503} nVar5576 := proc130(264);
+ call {:si_unique_call 4504} nVar5577 := proc130(312);
+ call {:si_unique_call 4505} nVar5578 := proc130(148);
+ call {:si_unique_call 4506} nVar5579 := proc130(304);
+ call {:si_unique_call 4507} nVar5580 := proc130(208);
+ call {:si_unique_call 4508} nVar5581 := proc130(136);
+ call {:si_unique_call 4509} nVar5582 := proc130(336);
+ call {:si_unique_call 4510} nVar5583 := proc130(300);
+ call {:si_unique_call 4511} nVar5584 := proc130(108);
+ call {:si_unique_call 4512} nVar5585 := proc130(188);
+ call {:si_unique_call 4513} nVar5586 := proc130(288);
+ call {:si_unique_call 4514} nVar2754 := proc130(84);
+ call {:si_unique_call 4515} nVar5587 := proc130(296);
+ call {:si_unique_call 4516} nVar5588 := proc130(280);
+ call {:si_unique_call 4517} nVar5589 := proc130(100);
+ call {:si_unique_call 4518} nVar5590 := proc130(116);
+ call {:si_unique_call 4519} nVar5591 := proc130(128);
+ call {:si_unique_call 4520} nVar5592 := proc130(164);
+ call {:si_unique_call 4521} nVar5593 := proc130(24);
+ call {:si_unique_call 4522} nVar5594 := proc130(68);
+ call {:si_unique_call 4523} nVar5595 := proc130(116);
+ call {:si_unique_call 4524} nVar5596 := proc130(164);
+ call {:si_unique_call 4525} nVar5597 := proc130(32);
+ call {:si_unique_call 4526} nVar5598 := proc130(316);
+ call {:si_unique_call 4527} nVar5599 := proc130(328);
+ call {:si_unique_call 4528} nVar5600 := proc130(24);
+ call {:si_unique_call 4529} nVar5601 := proc130(40);
+ call {:si_unique_call 4530} nVar5602 := proc130(24);
+ call {:si_unique_call 4531} nVar5603 := proc130(24);
+ call {:si_unique_call 4532} nVar5604 := proc130(112);
+ call {:si_unique_call 4533} nVar5605 := proc130(112);
+ call {:si_unique_call 4534} nVar5606 := proc130(4);
+ call {:si_unique_call 4535} nVar5607 := proc130(64);
+ call {:si_unique_call 4536} nVar5608 := proc130(72);
+ call {:si_unique_call 4537} nVar5609 := proc130(40);
+ call {:si_unique_call 4538} nVar5610 := proc130(80);
+ call {:si_unique_call 4539} nVar5611 := proc130(40);
+ call {:si_unique_call 4540} nVar5612 := proc130(156);
+ call {:si_unique_call 4541} nVar5613 := proc130(80);
+ call {:si_unique_call 4542} nVar5614 := proc130(24);
+ call {:si_unique_call 4543} nVar5615 := proc130(28);
+ call {:si_unique_call 4544} nVar5616 := proc130(56);
+ call {:si_unique_call 4545} nVar5617 := proc130(220);
+ call {:si_unique_call 4546} nVar5618 := proc130(64);
+ call {:si_unique_call 4547} nVar5619 := proc130(144);
+ call {:si_unique_call 4548} nVar5620 := proc130(140);
+ call {:si_unique_call 4549} nVar5621 := proc130(296);
+ call {:si_unique_call 4550} nVar5622 := proc130(104);
+ call {:si_unique_call 4551} nVar5623 := proc130(204);
+ call {:si_unique_call 4552} nVar5624 := proc130(216);
+ call {:si_unique_call 4553} nVar5625 := proc130(348);
+ call {:si_unique_call 4554} nVar5626 := proc130(24);
+ call {:si_unique_call 4555} nVar5627 := proc130(108);
+ call {:si_unique_call 4556} nVar5628 := proc130(152);
+ call {:si_unique_call 4557} nVar5629 := proc130(172);
+ call {:si_unique_call 4558} nVar5630 := proc130(132);
+ call {:si_unique_call 4559} nVar5631 := proc130(56);
+ call {:si_unique_call 4560} nVar5632 := proc130(148);
+ call {:si_unique_call 4561} nVar5633 := proc130(228);
+ call {:si_unique_call 4562} nVar5634 := proc130(72);
+ call {:si_unique_call 4563} nVar5635 := proc130(120);
+ call {:si_unique_call 4564} nVar5636 := proc130(104);
+ call {:si_unique_call 4565} nVar5637 := proc130(164);
+ call {:si_unique_call 4566} nVar5638 := proc130(68);
+ call {:si_unique_call 4567} nVar5639 := proc130(332);
+ call {:si_unique_call 4568} nVar5640 := proc130(68);
+ call {:si_unique_call 4569} nVar5641 := proc130(4100);
+ call {:si_unique_call 4570} nVar5642 := proc130(4100);
+ call {:si_unique_call 4571} nVar5643 := proc130(24);
+ call {:si_unique_call 4572} nVar5644 := proc130(52);
+ call {:si_unique_call 4573} nVar5645 := proc130(68);
+ call {:si_unique_call 4574} nVar5646 := proc130(168);
+ call {:si_unique_call 4575} nVar5647 := proc130(72);
+ call {:si_unique_call 4576} nVar5648 := proc130(308);
+ call {:si_unique_call 4577} nVar5649 := proc130(8);
+ call {:si_unique_call 4578} nVar5650 := proc130(308);
+ call {:si_unique_call 4579} nVar5651 := proc130(236);
+ call {:si_unique_call 4580} nVar5652 := proc130(340);
+ call {:si_unique_call 4581} nVar5653 := proc130(300);
+ call {:si_unique_call 4582} nVar3048 := proc130(140);
+ call {:si_unique_call 4583} nVar5654 := proc130(124);
+ call {:si_unique_call 4584} nVar5655 := proc130(152);
+ call {:si_unique_call 4585} nVar5656 := proc130(268);
+ call {:si_unique_call 4586} nVar5657 := proc130(64);
+ call {:si_unique_call 4587} nVar3062 := proc130(16);
+ call {:si_unique_call 4588} nVar5658 := proc130(184);
+ call {:si_unique_call 4589} nVar5659 := proc130(288);
+ call {:si_unique_call 4590} nVar5660 := proc130(204);
+ call {:si_unique_call 4591} nVar5661 := proc130(104);
+ call {:si_unique_call 4592} nVar5662 := proc130(16);
+ call {:si_unique_call 4593} nVar5663 := proc130(188);
+ call {:si_unique_call 4594} nVar5664 := proc130(20);
+ call {:si_unique_call 4595} nVar5665 := proc130(200);
+ call {:si_unique_call 4596} nVar5666 := proc130(112);
+ call {:si_unique_call 4597} nVar5667 := proc130(4);
+ call {:si_unique_call 4598} nVar5668 := proc130(180);
+ call {:si_unique_call 4599} nVar5669 := proc130(168);
+ call {:si_unique_call 4600} nVar5670 := proc130(84);
+ call {:si_unique_call 4601} nVar5671 := proc130(284);
+ call {:si_unique_call 4602} nVar3139 := proc130(16);
+ call {:si_unique_call 4603} nVar5672 := proc130(324);
+ call {:si_unique_call 4604} nVar5673 := proc130(64);
+ call {:si_unique_call 4605} nVar5674 := proc130(124);
+ call {:si_unique_call 4606} nVar5675 := proc130(96);
+ call {:si_unique_call 4607} nVar5676 := proc130(40);
+ call {:si_unique_call 4608} nVar5677 := proc130(144);
+ call {:si_unique_call 4609} nVar5678 := proc130(116);
+ call {:si_unique_call 4610} nVar5679 := proc130(252);
+ call {:si_unique_call 4611} nVar5680 := proc130(32);
+ call {:si_unique_call 4612} nVar5681 := proc130(100);
+ call {:si_unique_call 4613} nVar5682 := proc130(68);
+ call {:si_unique_call 4614} nVar5683 := proc130(152);
+ call {:si_unique_call 4615} nVar5684 := proc130(84);
+ call {:si_unique_call 4616} nVar5685 := proc130(188);
+ call {:si_unique_call 4617} nVar5686 := proc130(20);
+ call {:si_unique_call 4618} nVar5687 := proc130(80);
+ call {:si_unique_call 4619} nVar5688 := proc130(344);
+ call {:si_unique_call 4620} nVar5689 := proc130(316);
+ call {:si_unique_call 4621} nVar5690 := proc130(308);
+ call {:si_unique_call 4622} nVar5691 := proc130(92);
+ call {:si_unique_call 4623} nVar5692 := proc130(352);
+ call {:si_unique_call 4624} nVar5693 := proc130(96);
+ call {:si_unique_call 4625} nVar5694 := proc130(336);
+ call {:si_unique_call 4626} nVar5695 := proc130(152);
+ call {:si_unique_call 4627} nVar5696 := proc130(380);
+ call {:si_unique_call 4628} nVar5697 := proc130(340);
+ call {:si_unique_call 4629} nVar5698 := proc130(120);
+ call {:si_unique_call 4630} nVar5699 := proc130(292);
+ call {:si_unique_call 4631} nVar5700 := proc130(432);
+ call {:si_unique_call 4632} nVar5701 := proc130(172);
+ call {:si_unique_call 4633} nVar5702 := proc130(300);
+ call {:si_unique_call 4634} nVar5703 := proc130(244);
+ call {:si_unique_call 4635} nVar5704 := proc130(88);
+ call {:si_unique_call 4636} nVar5705 := proc130(116);
+ call {:si_unique_call 4637} nVar5706 := proc130(40);
+ call {:si_unique_call 4638} nVar5707 := proc130(144);
+ call {:si_unique_call 4639} nVar5708 := proc130(316);
+ call {:si_unique_call 4640} nVar5709 := proc130(136);
+ call {:si_unique_call 4641} nVar5710 := proc130(136);
+ call {:si_unique_call 4642} nVar5711 := proc130(296);
+ call {:si_unique_call 4643} nVar5712 := proc130(204);
+ call {:si_unique_call 4644} nVar5713 := proc130(72);
+ call {:si_unique_call 4645} nVar5714 := proc130(96);
+ call {:si_unique_call 4646} nVar5715 := proc130(72);
+ call {:si_unique_call 4647} nVar5716 := proc130(100);
+ call {:si_unique_call 4648} nVar5717 := proc130(136);
+ call {:si_unique_call 4649} nVar5718 := proc130(80);
+ call {:si_unique_call 4650} nVar5719 := proc130(244);
+ call {:si_unique_call 4651} nVar5720 := proc130(88);
+ call {:si_unique_call 4652} nVar5721 := proc130(32);
+ call {:si_unique_call 4653} nVar5722 := proc130(112);
+ call {:si_unique_call 4654} nVar5723 := proc130(96);
+ call {:si_unique_call 4655} nVar5724 := proc130(292);
+ call {:si_unique_call 4656} nVar5725 := proc130(168);
+ call {:si_unique_call 4657} nVar5726 := proc130(336);
+ call {:si_unique_call 4658} nVar5727 := proc130(280);
+ call {:si_unique_call 4659} nVar5728 := proc130(48);
+ call {:si_unique_call 4660} nVar5729 := proc130(88);
+ call {:si_unique_call 4661} nVar5730 := proc130(24);
+ call {:si_unique_call 4662} nVar5731 := proc130(44);
+ call {:si_unique_call 4663} nVar5732 := proc130(16);
+ call {:si_unique_call 4664} nVar5733 := proc130(288);
+ call {:si_unique_call 4665} nVar5734 := proc130(240);
+ call {:si_unique_call 4666} nVar5735 := proc130(104);
+ call {:si_unique_call 4667} nVar5736 := proc130(268);
+ call {:si_unique_call 4668} nVar5737 := proc130(140);
+ call {:si_unique_call 4669} nVar5738 := proc130(8);
+ call {:si_unique_call 4670} nVar5739 := proc130(360);
+ call {:si_unique_call 4671} nVar5740 := proc130(332);
+ call {:si_unique_call 4672} nVar5741 := proc130(140);
+ call {:si_unique_call 4673} nVar5742 := proc130(140);
+ call {:si_unique_call 4674} nVar5743 := proc130(128);
+ call {:si_unique_call 4675} nVar5744 := proc130(272);
+ call {:si_unique_call 4676} nVar5745 := proc130(48);
+ call {:si_unique_call 4677} nVar5746 := proc130(136);
+ call {:si_unique_call 4678} nVar5747 := proc130(144);
+ call {:si_unique_call 4679} nVar5748 := proc130(208);
+ call {:si_unique_call 4680} nVar5749 := proc130(4);
+ call {:si_unique_call 4681} nVar5750 := proc130(8192);
+ call {:si_unique_call 4682} nVar5751 := proc130(156);
+ call {:si_unique_call 4683} nVar5752 := proc130(324);
+ call {:si_unique_call 4684} nVar5753 := proc130(304);
+ call {:si_unique_call 4685} nVar5754 := proc130(56);
+ call {:si_unique_call 4686} nVar5755 := proc130(92);
+ call {:si_unique_call 4687} nVar5756 := proc130(188);
+ call {:si_unique_call 4688} nVar5757 := proc130(244);
+ call {:si_unique_call 4689} nVar5758 := proc130(80);
+ call {:si_unique_call 4690} nVar5759 := proc130(240);
+ call {:si_unique_call 4691} nVar5760 := proc130(80);
+ call {:si_unique_call 4692} nVar5761 := proc130(52);
+ call {:si_unique_call 4693} nVar5762 := proc130(148);
+ call {:si_unique_call 4694} nVar5763 := proc130(304);
+ call {:si_unique_call 4695} nVar5764 := proc130(144);
+ call {:si_unique_call 4696} nVar5765 := proc130(164);
+ call {:si_unique_call 4697} nVar5766 := proc130(68);
+ call {:si_unique_call 4698} nVar5767 := proc130(172);
+ call {:si_unique_call 4699} nVar5768 := proc130(148);
+ call {:si_unique_call 4700} nVar5769 := proc130(196);
+ call {:si_unique_call 4701} nVar5770 := proc130(304);
+ call {:si_unique_call 4702} nVar5771 := proc130(16);
+ call {:si_unique_call 4703} nVar5772 := proc130(120);
+ call {:si_unique_call 4704} nVar5773 := proc130(32);
+ call {:si_unique_call 4705} nVar5774 := proc130(4);
+ call {:si_unique_call 4706} nVar5775 := proc130(140);
+ call {:si_unique_call 4707} nVar5776 := proc130(320);
+ call {:si_unique_call 4708} nVar5777 := proc130(16);
+ call {:si_unique_call 4709} nVar5778 := proc130(272);
+ call {:si_unique_call 4710} nVar5779 := proc130(312);
+ call {:si_unique_call 4711} nVar5780 := proc130(176);
+ call {:si_unique_call 4712} nVar5781 := proc130(164);
+ call {:si_unique_call 4713} nVar5782 := proc130(132);
+ call {:si_unique_call 4714} nVar5783 := proc130(300);
+ call {:si_unique_call 4715} nVar5784 := proc130(8);
+ call {:si_unique_call 4716} nVar5785 := proc130(292);
+ call {:si_unique_call 4717} nVar5786 := proc130(128);
+ call {:si_unique_call 4718} nVar5787 := proc130(124);
+ call {:si_unique_call 4719} nVar5788 := proc130(60);
+ call {:si_unique_call 4720} nVar5789 := proc130(352);
+ call {:si_unique_call 4721} nVar5790 := proc130(228);
+ call {:si_unique_call 4722} nVar5791 := proc130(72);
+ call {:si_unique_call 4723} nVar5792 := proc130(140);
+ call {:si_unique_call 4724} nVar5793 := proc130(352);
+ call {:si_unique_call 4725} nVar5794 := proc130(144);
+ call {:si_unique_call 4726} nVar5795 := proc130(388);
+ call {:si_unique_call 3877} proc65();
+ call {:si_unique_call 3878} proc66();
+ call {:si_unique_call 3876} proc67();
+ assume nVar4938 > 0;
+ call {:si_unique_call 4728} nVar4937 := proc116();
+ call {:si_unique_call 3867} proc123(nVar4938, nVar4937);
+ call {:si_unique_call 3869} nVar4936 := proc124(nVar4938);
+ call {:si_unique_call 3871} nVar4935 := proc125(nVar4936);
+ goto anon7_Then__unique__2;
+
+ anon7_Then__unique__2:
+ assume nVar4935 == 0;
+ call {:si_unique_call 3873} proc126();
+ goto anon9_Else__unique__3;
+
+ anon9_Else__unique__3:
+ assume nVar3711 == 1;
+ goto L31__unique__4;
+
+ L31__unique__4:
+ goto anon8_Else__unique__5;
+
+ anon8_Else__unique__5:
+ assume nVar3711 == 1;
+ nVar4934 := false;
+ goto L_BAF_0__unique__6;
+
+ L_BAF_0__unique__6:
+ assume !nVar4934;
+ return;
+}
+
+
+
+implementation {:entrypoint} proc63() returns (nVar5796: int, nVar5797: bool)
+{
+
+ start__unique__1:
+ call nVar5796, nVar5797 := proc64();
+ assume {:OldAssert} !nVar5797;
+ return;
+}
+
+
+
+function func0(a: int, b: int) : int;
+
+function func1(a: int, b: int) : int;
+
+function func2(a: int) : int;
+
+function func3(a: int, b: int) : int;
+
+function func4(a: int, b: int) : int;
+
+function {:inline true} func5(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func6(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func7(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func8(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func9(x: int) : int
+{
+ x + 12
+}
+
+function {:inline true} func10(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func11(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func12(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func13(x: int) : int
+{
+ x + 24
+}
+
+function {:inline true} func14(x: int) : int
+{
+ x + 12
+}
+
+function {:inline true} func15(x: int) : int
+{
+ x + 16
+}
+
+function {:inline true} func16(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func17(x: int) : int
+{
+ x + 20
+}
+
+function {:inline true} func18(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func19(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func20(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func21(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func22(x: int) : int
+{
+ x + 20
+}
+
+function {:inline true} func23(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func24(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func25(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func26(x: int) : int
+{
+ x + 24
+}
+
+function {:inline true} func27(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func28(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func29(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func30(x: int) : int
+{
+ x + 12
+}
+
+function {:inline true} func31(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func32(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func33(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func34(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func35(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func36(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func37(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func38(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func39(x: int) : int
+{
+ x + 12
+}
+
+function {:inline true} func40(x: int) : int
+{
+ x + 12
+}
+
+function {:inline true} func41(x: int) : int
+{
+ x + 24
+}
+
+function {:inline true} func42(x: int) : int
+{
+ x + 16
+}
+
+function {:inline true} func43(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func44(x: int) : int
+{
+ x + 20
+}
+
+function {:inline true} func45(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func46(x: int) : int
+{
+ x + 12
+}
+
+function {:inline true} func47(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func48(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func49(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func50(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func51(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func52(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func53(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func54(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func55(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func56(x: int) : int
+{
+ x + 0
+}
+
+function {:inline true} func57(x: int) : int
+{
+ x + 20
+}
+
+function {:inline true} func58(x: int) : int
+{
+ x + 4
+}
+
+function {:inline true} func59(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func60(x: int) : int
+{
+ x + 8
+}
+
+function {:inline true} func61(x: int) : int
+{
+ x + 8
+}
+
+function func62(a: int) : bool;
+
+axiom (forall x: int :: { func62(x) } x == 0 || x == 1 || x == 2 || x == 4 || x == 8 || x == 16 || x == 32 || x == 64 || x == 128 || x == 256 || x == 512 || x == 1024 || x == 2048 || x == 4096 || x == 8192 || x == 16384 || x == 32768 || x == 65536 || x == 131072 || x == 262144 || x == 524288 || x == 1048576 || x == 2097152 || x == 4194304 || x == 8388608 || x == 16777216 || x == 33554432 || x == 67108864 || x == 134217728 || x == 268435456 || x == 536870912 || x == 1073741824 || x == 2147483648 || x == -2147483648 ==> func62(x));
+
+axiom (forall f: int :: { func0(0, f) } func0(0, f) == 0);
+
+axiom (forall f: int :: { func0(f, f) } func0(f, f) == f);
+
+axiom (forall f: int :: { func1(0, f) } func1(0, f) == f);
+
+axiom (forall f: int :: { func1(f, 0) } func1(f, 0) == f);
+
+axiom (forall x: int, f: int :: { func0(x, f) } func62(x) && func62(f) && x != f ==> func0(x, f) == 0);
+
+axiom (forall a: int, b: int, c: int :: { func1(a, func1(b, c)) } func1(a, func1(b, c)) == func1(func1(a, b), c));
+
+axiom (forall a: int, b: int, c: int :: { func0(a, func1(b, c)) } func0(a, func1(b, c)) == func0(func1(b, c), a));
+
+axiom (forall x: int, f1: int, f2: int :: { func0(func1(x, f1), f2) } (f1 != f2 && func62(f1) && func62(f2) ==> func0(func1(x, f1), f2) == func0(x, f2)) && (f1 == f2 ==> func0(func1(x, f1), f2) == f1));
+
+axiom (forall x: int, f1: int, f2: int :: { func0(func0(x, func2(f1)), f2) } (f1 != f2 && func62(f1) && func62(f2) ==> func0(func0(x, func2(f1)), f2) == func0(x, f2)) && (f1 == f2 && func62(f1) && func62(f2) ==> func0(func0(x, func2(f1)), f2) == 0));
+
+axiom (forall x: int, f1: int, f2: int :: { func0(func1(f1, x), f2) } (f1 != f2 && func62(f1) && func62(f2) ==> func0(func1(f1, x), f2) == func0(x, f2)) && (f1 == f2 ==> func0(func1(f1, x), f2) == f1));
+
+axiom (forall x: int, y: int, f2: int :: { func0(func0(x, y), f2) } func62(f2) ==> func0(func0(x, y), f2) == 0 || func0(func0(x, y), f2) == func0(x, f2));
+
+procedure proc130(nVar5798: int) returns (nVar5799: int);
+ free requires nVar5798 >= 0;
+ modifies nVar1;
+ free ensures nVar5799 == old(nVar1);
+ free ensures nVar1 >= old(nVar1) + nVar5798;
+
+
+
+procedure proc131(nVar5800: int) returns (nVar5801: int);
+ free requires nVar5800 >= 0;
+ modifies nVar1;
+ free ensures nVar5801 == old(nVar1) || nVar5801 == 0;
+ free ensures nVar1 >= old(nVar1) + nVar5800;
+
+
+
+procedure proc132() returns (nVar5802: int);
+
+
+
+var nVar1: int;
+
+var nVar2: int;
+
+var nVar3: int;
+
+var nVar4: int;
+
+var nVar5: int;
+
+var nVar6: int;
+
+var nVar7: int;
+
+var nVar8: int;
+
+var nVar9: int;
+
+var nVar10: int;
+
+var nVar11: int;
+
+var nVar12: int;
+
+var nVar13: int;
+
+var nVar14: int;
+
+var nVar15: int;
+
+var nVar16: int;
+
+var nVar17: int;
+
+var nVar18: int;
+
+var nVar19: int;
+
+var nVar20: int;
+
+var nVar21: int;
+
+var nVar22: int;
+
+var nVar23: int;
+
+var nVar24: int;
+
+var nVar25: int;
+
+var nVar26: int;
+
+var nVar27: int;
+
+var nVar28: int;
+
+var nVar29: int;
+
+var nVar30: int;
+
+var nVar31: int;
+
+var nVar32: int;
+
+var nVar33: int;
+
+var nVar34: int;
+
+var nVar35: int;
+
+var nVar36: int;
+
+var nVar37: int;
+
+var nVar38: int;
+
+var nVar39: int;
+
+var nVar40: int;
+
+var nVar41: int;
+
+var nVar42: int;
+
+var nVar43: int;
+
+var nVar44: int;
+
+var nVar45: int;
+
+var nVar46: int;
+
+var nVar47: int;
+
+var nVar48: int;
+
+var nVar49: int;
+
+var nVar50: int;
+
+var nVar51: int;
+
+var nVar52: int;
+
+var nVar53: int;
+
+var nVar54: int;
+
+var nVar55: int;
+
+var nVar56: int;
+
+var nVar57: int;
+
+var nVar58: int;
+
+var nVar59: int;
+
+var nVar60: int;
+
+var nVar61: int;
+
+var nVar62: int;
+
+var nVar63: int;
+
+var nVar64: int;
+
+var nVar65: int;
+
+var nVar66: int;
+
+var nVar67: int;
+
+var nVar68: int;
+
+var nVar69: int;
+
+var nVar70: int;
+
+var nVar71: int;
+
+var nVar72: int;
+
+var nVar73: int;
+
+var nVar74: int;
+
+var nVar75: int;
+
+var nVar76: int;
+
+var nVar77: int;
+
+var nVar78: int;
+
+var nVar79: int;
+
+var nVar80: int;
+
+var nVar81: int;
+
+var nVar82: int;
+
+var nVar83: int;
+
+var nVar84: int;
+
+var nVar85: int;
+
+var nVar86: int;
+
+var nVar87: int;
+
+var nVar88: int;
+
+var nVar89: int;
+
+var nVar90: int;
+
+var nVar91: int;
+
+var nVar92: int;
+
+var nVar93: int;
+
+var nVar94: int;
+
+var nVar95: int;
+
+var nVar96: int;
+
+var nVar97: int;
+
+var nVar98: int;
+
+var nVar99: int;
+
+var nVar100: int;
+
+var nVar101: int;
+
+var nVar102: int;
+
+var nVar103: int;
+
+var nVar104: int;
+
+var nVar105: int;
+
+var nVar106: int;
+
+var nVar107: int;
+
+var nVar108: int;
+
+var nVar109: int;
+
+var nVar110: int;
+
+var nVar111: int;
+
+var nVar112: int;
+
+var nVar113: int;
+
+var nVar114: int;
+
+var nVar115: int;
+
+var nVar116: int;
+
+var nVar117: int;
+
+var nVar118: int;
+
+var nVar119: int;
+
+var nVar120: int;
+
+var nVar121: int;
+
+var nVar122: int;
+
+var nVar123: int;
+
+var nVar124: int;
+
+var nVar125: int;
+
+var nVar126: int;
+
+var nVar127: int;
+
+var nVar128: int;
+
+var nVar129: int;
+
+var nVar130: int;
+
+var nVar131: int;
+
+var nVar132: int;
+
+var nVar133: int;
+
+var nVar134: int;
+
+var nVar135: int;
+
+var nVar136: int;
+
+var nVar137: int;
+
+var nVar138: int;
+
+var nVar139: int;
+
+var nVar140: int;
+
+var nVar141: int;
+
+var nVar142: int;
+
+var nVar143: int;
+
+var nVar144: int;
+
+var nVar145: int;
+
+var nVar146: int;
+
+var nVar147: int;
+
+var nVar148: int;
+
+var nVar149: int;
+
+var nVar150: int;
+
+var nVar151: int;
+
+var nVar152: int;
+
+var nVar153: int;
+
+var nVar154: int;
+
+var nVar155: int;
+
+var nVar156: int;
+
+var nVar157: int;
+
+var nVar158: int;
+
+var nVar159: int;
+
+var nVar160: int;
+
+var nVar161: int;
+
+var nVar162: int;
+
+var nVar163: int;
+
+var nVar164: int;
+
+var nVar165: int;
+
+var nVar166: int;
+
+var nVar167: int;
+
+var nVar168: int;
+
+var nVar169: int;
+
+var nVar170: int;
+
+var nVar171: int;
+
+var nVar172: int;
+
+var nVar173: int;
+
+var nVar174: int;
+
+var nVar175: int;
+
+var nVar176: int;
+
+var nVar177: int;
+
+var nVar178: int;
+
+var nVar179: int;
+
+var nVar180: int;
+
+var nVar181: int;
+
+var nVar182: int;
+
+var nVar183: int;
+
+var nVar184: int;
+
+var nVar185: int;
+
+var nVar186: int;
+
+var nVar187: int;
+
+var nVar188: int;
+
+var nVar189: int;
+
+var nVar190: int;
+
+var nVar191: int;
+
+var nVar192: int;
+
+var nVar193: int;
+
+var nVar194: int;
+
+var nVar195: int;
+
+var nVar196: int;
+
+var nVar197: int;
+
+var nVar198: int;
+
+var nVar199: int;
+
+var nVar200: int;
+
+var nVar201: int;
+
+var nVar202: int;
+
+var nVar203: int;
+
+var nVar204: int;
+
+var nVar205: int;
+
+var nVar206: int;
+
+var nVar207: int;
+
+var nVar208: int;
+
+var nVar209: int;
+
+var nVar210: int;
+
+var nVar211: int;
+
+var nVar212: int;
+
+var nVar213: int;
+
+var nVar214: int;
+
+var nVar215: int;
+
+var nVar216: int;
+
+var nVar217: int;
+
+var nVar218: int;
+
+var nVar219: int;
+
+var nVar220: int;
+
+var nVar221: int;
+
+var nVar222: int;
+
+var nVar223: int;
+
+var nVar224: int;
+
+var nVar225: int;
+
+var nVar226: int;
+
+var nVar227: int;
+
+var nVar228: int;
+
+var nVar229: int;
+
+var nVar230: int;
+
+var nVar231: int;
+
+var nVar232: int;
+
+var nVar233: int;
+
+var nVar234: int;
+
+var nVar235: int;
+
+var nVar236: int;
+
+var nVar237: int;
+
+var nVar238: int;
+
+var nVar239: int;
+
+var nVar240: int;
+
+var nVar241: int;
+
+var nVar242: int;
+
+var nVar243: int;
+
+var nVar244: int;
+
+var nVar245: int;
+
+var nVar246: int;
+
+var nVar247: int;
+
+var nVar248: int;
+
+var nVar249: int;
+
+var nVar250: int;
+
+var nVar251: int;
+
+var nVar252: int;
+
+var nVar253: int;
+
+var nVar254: int;
+
+var nVar255: int;
+
+var nVar256: int;
+
+var nVar257: int;
+
+var nVar258: int;
+
+var nVar259: int;
+
+var nVar260: int;
+
+var nVar261: int;
+
+var nVar262: int;
+
+var nVar263: int;
+
+var nVar264: int;
+
+var nVar265: int;
+
+var nVar266: int;
+
+var nVar267: int;
+
+var nVar268: int;
+
+var nVar269: int;
+
+var nVar270: int;
+
+var nVar271: int;
+
+var nVar272: int;
+
+var nVar273: int;
+
+var nVar274: int;
+
+var nVar275: int;
+
+var nVar276: int;
+
+var nVar277: int;
+
+var nVar278: int;
+
+var nVar279: int;
+
+var nVar280: int;
+
+var nVar281: int;
+
+var nVar282: int;
+
+var nVar283: int;
+
+var nVar284: int;
+
+var nVar285: int;
+
+var nVar286: int;
+
+var nVar287: int;
+
+var nVar288: int;
+
+var nVar289: int;
+
+var nVar290: int;
+
+var nVar291: int;
+
+var nVar292: int;
+
+var nVar293: int;
+
+var nVar294: int;
+
+var nVar295: int;
+
+var nVar296: int;
+
+var nVar297: int;
+
+var nVar298: int;
+
+var nVar299: int;
+
+var nVar300: int;
+
+var nVar301: int;
+
+var nVar302: int;
+
+var nVar303: int;
+
+var nVar304: int;
+
+var nVar305: int;
+
+var nVar306: int;
+
+var nVar307: int;
+
+var nVar308: int;
+
+var nVar309: int;
+
+var nVar310: int;
+
+var nVar311: int;
+
+var nVar312: int;
+
+var nVar313: int;
+
+var nVar314: int;
+
+var nVar315: int;
+
+var nVar316: int;
+
+var nVar317: int;
+
+var nVar318: int;
+
+var nVar319: int;
+
+var nVar320: int;
+
+var nVar321: int;
+
+var nVar322: int;
+
+var nVar323: int;
+
+var nVar324: int;
+
+var nVar325: int;
+
+var nVar326: int;
+
+var nVar327: int;
+
+var nVar328: int;
+
+var nVar329: int;
+
+var nVar330: int;
+
+var nVar331: int;
+
+var nVar332: int;
+
+var nVar333: int;
+
+var nVar334: int;
+
+var nVar335: int;
+
+var nVar336: int;
+
+var nVar337: int;
+
+var nVar338: int;
+
+var nVar339: int;
+
+var nVar340: int;
+
+var nVar341: int;
+
+var nVar342: int;
+
+var nVar343: int;
+
+var nVar344: int;
+
+var nVar345: int;
+
+var nVar346: int;
+
+var nVar347: int;
+
+var nVar348: int;
+
+var nVar349: int;
+
+var nVar350: int;
+
+var nVar351: int;
+
+var nVar352: int;
+
+var nVar353: int;
+
+var nVar354: int;
+
+var nVar355: int;
+
+var nVar356: int;
+
+var nVar357: int;
+
+var nVar358: int;
+
+var nVar359: int;
+
+var nVar360: int;
+
+var nVar361: int;
+
+var nVar362: int;
+
+var nVar363: int;
+
+var nVar364: int;
+
+var nVar365: int;
+
+var nVar366: int;
+
+var nVar367: int;
+
+var nVar368: int;
+
+var nVar369: int;
+
+var nVar370: int;
+
+var nVar371: int;
+
+var nVar372: int;
+
+var nVar373: int;
+
+var nVar374: int;
+
+var nVar375: int;
+
+var nVar376: int;
+
+var nVar377: int;
+
+var nVar378: int;
+
+var nVar379: int;
+
+var nVar380: int;
+
+var nVar381: int;
+
+var nVar382: int;
+
+var nVar383: int;
+
+var nVar384: int;
+
+var nVar385: int;
+
+var nVar386: int;
+
+var nVar387: int;
+
+var nVar388: int;
+
+var nVar389: int;
+
+var nVar390: int;
+
+var nVar391: int;
+
+var nVar392: int;
+
+var nVar393: int;
+
+var nVar394: int;
+
+var nVar395: int;
+
+var nVar396: int;
+
+var nVar397: int;
+
+var nVar398: int;
+
+var nVar399: int;
+
+var nVar400: int;
+
+var nVar401: int;
+
+var nVar402: int;
+
+var nVar403: int;
+
+var nVar404: int;
+
+var nVar405: int;
+
+var nVar406: int;
+
+var nVar407: int;
+
+var nVar408: int;
+
+var nVar409: int;
+
+var nVar410: int;
+
+var nVar411: int;
+
+var nVar412: int;
+
+var nVar413: int;
+
+var nVar414: int;
+
+var nVar415: int;
+
+var nVar416: int;
+
+var nVar417: int;
+
+var nVar418: int;
+
+var nVar419: int;
+
+var nVar420: int;
+
+var nVar421: int;
+
+var nVar422: int;
+
+var nVar423: int;
+
+var nVar424: int;
+
+var nVar425: int;
+
+var nVar426: int;
+
+var nVar427: int;
+
+var nVar428: int;
+
+var nVar429: int;
+
+var nVar430: int;
+
+var nVar431: int;
+
+var nVar432: int;
+
+var nVar433: int;
+
+var nVar434: int;
+
+var nVar435: int;
+
+var nVar436: int;
+
+var nVar437: int;
+
+var nVar438: int;
+
+var nVar439: int;
+
+var nVar440: int;
+
+var nVar441: int;
+
+var nVar442: int;
+
+var nVar443: int;
+
+var nVar444: int;
+
+var nVar445: int;
+
+var nVar446: int;
+
+var nVar447: int;
+
+var nVar448: int;
+
+var nVar449: int;
+
+var nVar450: int;
+
+var nVar451: int;
+
+var nVar452: int;
+
+var nVar453: int;
+
+var nVar454: int;
+
+var nVar455: int;
+
+var nVar456: int;
+
+var nVar457: int;
+
+var nVar458: int;
+
+var nVar459: int;
+
+var nVar460: int;
+
+var nVar461: int;
+
+var nVar462: int;
+
+var nVar463: int;
+
+var nVar464: int;
+
+var nVar465: int;
+
+var nVar466: int;
+
+var nVar467: int;
+
+var nVar468: int;
+
+var nVar469: int;
+
+var nVar470: int;
+
+var nVar471: int;
+
+var nVar472: int;
+
+var nVar473: int;
+
+var nVar474: int;
+
+var nVar475: int;
+
+var nVar476: int;
+
+var nVar477: int;
+
+var nVar478: int;
+
+var nVar479: int;
+
+var nVar480: int;
+
+var nVar481: int;
+
+var nVar482: int;
+
+var nVar483: int;
+
+var nVar484: int;
+
+var nVar485: int;
+
+var nVar486: int;
+
+var nVar487: int;
+
+var nVar488: int;
+
+var nVar489: int;
+
+var nVar490: int;
+
+var nVar491: int;
+
+var nVar492: int;
+
+var nVar493: int;
+
+var nVar494: int;
+
+var nVar495: int;
+
+var nVar496: int;
+
+var nVar497: int;
+
+var nVar498: int;
+
+var nVar499: int;
+
+var nVar500: int;
+
+var nVar501: int;
+
+var nVar502: int;
+
+var nVar503: int;
+
+var nVar504: int;
+
+var nVar505: int;
+
+var nVar506: int;
+
+var nVar507: int;
+
+var nVar508: int;
+
+var nVar509: int;
+
+var nVar510: int;
+
+var nVar511: int;
+
+var nVar512: int;
+
+var nVar513: int;
+
+var nVar514: int;
+
+var nVar515: int;
+
+var nVar516: int;
+
+var nVar517: int;
+
+var nVar518: int;
+
+var nVar519: int;
+
+var nVar520: int;
+
+var nVar521: int;
+
+var nVar522: int;
+
+var nVar523: int;
+
+var nVar524: int;
+
+var nVar525: int;
+
+var nVar526: int;
+
+var nVar527: int;
+
+var nVar528: int;
+
+var nVar529: int;
+
+var nVar530: int;
+
+var nVar531: int;
+
+var nVar532: int;
+
+var nVar533: int;
+
+var nVar534: int;
+
+var nVar535: int;
+
+var nVar536: int;
+
+var nVar537: int;
+
+var nVar538: int;
+
+var nVar539: int;
+
+var nVar540: int;
+
+var nVar541: int;
+
+var nVar542: int;
+
+var nVar543: int;
+
+var nVar544: int;
+
+var nVar545: int;
+
+var nVar546: int;
+
+var nVar547: int;
+
+var nVar548: int;
+
+var nVar549: int;
+
+var nVar550: int;
+
+var nVar551: int;
+
+var nVar552: int;
+
+var nVar553: int;
+
+var nVar554: int;
+
+var nVar555: int;
+
+var nVar556: int;
+
+var nVar557: int;
+
+var nVar558: int;
+
+var nVar559: int;
+
+var nVar560: int;
+
+var nVar561: int;
+
+var nVar562: int;
+
+var nVar563: int;
+
+var nVar564: int;
+
+var nVar565: int;
+
+var nVar566: int;
+
+var nVar567: int;
+
+var nVar568: int;
+
+var nVar569: int;
+
+var nVar570: int;
+
+var nVar571: int;
+
+var nVar572: int;
+
+var nVar573: int;
+
+var nVar574: int;
+
+var nVar575: int;
+
+var nVar576: int;
+
+var nVar577: int;
+
+var nVar578: int;
+
+var nVar579: int;
+
+var nVar580: int;
+
+var nVar581: int;
+
+var nVar582: int;
+
+var nVar583: int;
+
+var nVar584: int;
+
+var nVar585: int;
+
+var nVar586: int;
+
+var nVar587: int;
+
+var nVar588: int;
+
+var nVar589: int;
+
+var nVar590: int;
+
+var nVar591: int;
+
+var nVar592: int;
+
+var nVar593: int;
+
+var nVar594: int;
+
+var nVar595: int;
+
+var nVar596: int;
+
+var nVar597: int;
+
+var nVar598: int;
+
+var nVar599: int;
+
+var nVar600: int;
+
+var nVar601: int;
+
+var nVar602: int;
+
+var nVar603: int;
+
+var nVar604: int;
+
+var nVar605: int;
+
+var nVar606: int;
+
+var nVar607: int;
+
+var nVar608: int;
+
+var nVar609: int;
+
+var nVar610: int;
+
+var nVar611: int;
+
+var nVar612: int;
+
+var nVar613: int;
+
+var nVar614: int;
+
+var nVar615: int;
+
+var nVar616: int;
+
+var nVar617: int;
+
+var nVar618: int;
+
+var nVar619: int;
+
+var nVar620: int;
+
+var nVar621: int;
+
+var nVar622: int;
+
+var nVar623: int;
+
+var nVar624: int;
+
+var nVar625: int;
+
+var nVar626: int;
+
+var nVar627: int;
+
+var nVar628: int;
+
+var nVar629: int;
+
+var nVar630: int;
+
+var nVar631: int;
+
+var nVar632: int;
+
+var nVar633: int;
+
+var nVar634: int;
+
+var nVar635: int;
+
+var nVar636: int;
+
+var nVar637: int;
+
+var nVar638: int;
+
+var nVar639: int;
+
+var nVar640: int;
+
+var nVar641: int;
+
+var nVar642: int;
+
+var nVar643: int;
+
+var nVar644: int;
+
+var nVar645: int;
+
+var nVar646: int;
+
+var nVar647: int;
+
+var nVar648: int;
+
+var nVar649: int;
+
+var nVar650: int;
+
+var nVar651: int;
+
+var nVar652: int;
+
+var nVar653: int;
+
+var nVar654: int;
+
+var nVar655: int;
+
+var nVar656: int;
+
+var nVar657: int;
+
+var nVar658: int;
+
+var nVar659: int;
+
+var nVar660: int;
+
+var nVar661: int;
+
+var nVar662: int;
+
+var nVar663: int;
+
+var nVar664: int;
+
+var nVar665: int;
+
+var nVar666: int;
+
+var nVar667: int;
+
+var nVar668: int;
+
+var nVar669: int;
+
+var nVar670: int;
+
+var nVar671: int;
+
+var nVar672: int;
+
+var nVar673: int;
+
+var nVar674: int;
+
+var nVar675: int;
+
+var nVar676: int;
+
+var nVar677: int;
+
+var nVar678: int;
+
+var nVar679: int;
+
+var nVar680: int;
+
+var nVar681: int;
+
+var nVar682: int;
+
+var nVar683: int;
+
+var nVar684: int;
+
+var nVar685: int;
+
+var nVar686: int;
+
+var nVar687: int;
+
+var nVar688: int;
+
+var nVar689: int;
+
+var nVar690: int;
+
+var nVar691: int;
+
+var nVar692: int;
+
+var nVar693: int;
+
+var nVar694: int;
+
+var nVar695: int;
+
+var nVar696: int;
+
+var nVar697: int;
+
+var nVar698: int;
+
+var nVar699: int;
+
+var nVar700: int;
+
+var nVar701: int;
+
+var nVar702: int;
+
+var nVar703: int;
+
+var nVar704: int;
+
+var nVar705: int;
+
+var nVar706: int;
+
+var nVar707: int;
+
+var nVar708: int;
+
+var nVar709: int;
+
+var nVar710: int;
+
+var nVar711: int;
+
+var nVar712: int;
+
+var nVar713: int;
+
+var nVar714: int;
+
+var nVar715: int;
+
+var nVar716: int;
+
+var nVar717: int;
+
+var nVar718: int;
+
+var nVar719: int;
+
+var nVar720: int;
+
+var nVar721: int;
+
+var nVar722: int;
+
+var nVar723: int;
+
+var nVar724: int;
+
+var nVar725: int;
+
+var nVar726: int;
+
+var nVar727: int;
+
+var nVar728: int;
+
+var nVar729: int;
+
+var nVar730: int;
+
+var nVar731: int;
+
+var nVar732: int;
+
+var nVar733: int;
+
+var nVar734: int;
+
+var nVar735: int;
+
+var nVar736: int;
+
+var nVar737: int;
+
+var nVar738: int;
+
+var nVar739: int;
+
+var nVar740: int;
+
+var nVar741: int;
+
+var nVar742: int;
+
+var nVar743: int;
+
+var nVar744: int;
+
+var nVar745: int;
+
+var nVar746: int;
+
+var nVar747: int;
+
+var nVar748: int;
+
+var nVar749: int;
+
+var nVar750: int;
+
+var nVar751: int;
+
+var nVar752: int;
+
+var nVar753: int;
+
+var nVar754: int;
+
+var nVar755: int;
+
+var nVar756: int;
+
+var nVar757: int;
+
+var nVar758: int;
+
+var nVar759: int;
+
+var nVar760: int;
+
+var nVar761: int;
+
+var nVar762: int;
+
+var nVar763: int;
+
+var nVar764: int;
+
+var nVar765: int;
+
+var nVar766: int;
+
+var nVar767: int;
+
+var nVar768: int;
+
+var nVar769: int;
+
+var nVar770: int;
+
+var nVar771: int;
+
+var nVar772: int;
+
+var nVar773: int;
+
+var nVar774: int;
+
+var nVar775: int;
+
+var nVar776: int;
+
+var nVar777: int;
+
+var nVar778: int;
+
+var nVar779: int;
+
+var nVar780: int;
+
+var nVar781: int;
+
+var nVar782: int;
+
+var nVar783: int;
+
+var nVar784: int;
+
+var nVar785: int;
+
+var nVar786: int;
+
+var nVar787: int;
+
+var nVar788: int;
+
+var nVar789: int;
+
+var nVar790: int;
+
+var nVar791: int;
+
+var nVar792: int;
+
+var nVar793: int;
+
+var nVar794: int;
+
+var nVar795: int;
+
+var nVar796: int;
+
+var nVar797: int;
+
+var nVar798: int;
+
+var nVar799: int;
+
+var nVar800: int;
+
+var nVar801: int;
+
+var nVar802: int;
+
+var nVar803: int;
+
+var nVar804: int;
+
+var nVar805: int;
+
+var nVar806: int;
+
+var nVar807: int;
+
+var nVar808: int;
+
+var nVar809: int;
+
+var nVar810: int;
+
+var nVar811: int;
+
+var nVar812: int;
+
+var nVar813: int;
+
+var nVar814: int;
+
+var nVar815: int;
+
+var nVar816: int;
+
+var nVar817: int;
+
+var nVar818: int;
+
+var nVar819: int;
+
+var nVar820: int;
+
+var nVar821: int;
+
+var nVar822: int;
+
+var nVar823: int;
+
+var nVar824: int;
+
+var nVar825: int;
+
+var nVar826: int;
+
+var nVar827: int;
+
+var nVar828: int;
+
+var nVar829: int;
+
+var nVar830: int;
+
+var nVar831: int;
+
+var nVar832: int;
+
+var nVar833: int;
+
+var nVar834: int;
+
+var nVar835: int;
+
+var nVar836: int;
+
+var nVar837: int;
+
+var nVar838: int;
+
+var nVar839: int;
+
+var nVar840: int;
+
+var nVar841: int;
+
+var nVar842: int;
+
+var nVar843: int;
+
+var nVar844: int;
+
+var nVar845: int;
+
+var nVar846: int;
+
+var nVar847: int;
+
+var nVar848: int;
+
+var nVar849: int;
+
+var nVar850: int;
+
+var nVar851: int;
+
+var nVar852: int;
+
+var nVar853: int;
+
+var nVar854: int;
+
+var nVar855: int;
+
+var nVar856: int;
+
+var nVar857: int;
+
+var nVar858: int;
+
+var nVar859: int;
+
+var nVar860: int;
+
+var nVar861: int;
+
+var nVar862: int;
+
+var nVar863: int;
+
+var nVar864: int;
+
+var nVar865: int;
+
+var nVar866: int;
+
+var nVar867: int;
+
+var nVar868: int;
+
+var nVar869: int;
+
+var nVar870: int;
+
+var nVar871: int;
+
+var nVar872: int;
+
+var nVar873: int;
+
+var nVar874: int;
+
+var nVar875: int;
+
+var nVar876: int;
+
+var nVar877: int;
+
+var nVar878: int;
+
+var nVar879: int;
+
+var nVar880: int;
+
+var nVar881: int;
+
+var nVar882: int;
+
+var nVar883: int;
+
+var nVar884: int;
+
+var nVar885: int;
+
+var nVar886: int;
+
+var nVar887: int;
+
+var nVar888: int;
+
+var nVar889: int;
+
+var nVar890: int;
+
+var nVar891: int;
+
+var nVar892: int;
+
+var nVar893: int;
+
+var nVar894: int;
+
+var nVar895: int;
+
+var nVar896: int;
+
+var nVar897: int;
+
+var nVar898: int;
+
+var nVar899: int;
+
+var nVar900: int;
+
+var nVar901: int;
+
+var nVar902: int;
+
+var nVar903: int;
+
+var nVar904: int;
+
+var nVar905: int;
+
+var nVar906: int;
+
+var nVar907: int;
+
+var nVar908: int;
+
+var nVar909: int;
+
+var nVar910: int;
+
+var nVar911: int;
+
+var nVar912: int;
+
+var nVar913: int;
+
+var nVar914: int;
+
+var nVar915: int;
+
+var nVar916: int;
+
+var nVar917: int;
+
+var nVar918: int;
+
+var nVar919: int;
+
+var nVar920: int;
+
+var nVar921: int;
+
+var nVar922: int;
+
+var nVar923: int;
+
+var nVar924: int;
+
+var nVar925: int;
+
+var nVar926: int;
+
+var nVar927: int;
+
+var nVar928: int;
+
+var nVar929: int;
+
+var nVar930: int;
+
+var nVar931: int;
+
+var nVar932: int;
+
+var nVar933: int;
+
+var nVar934: int;
+
+var nVar935: int;
+
+var nVar936: int;
+
+var nVar937: int;
+
+var nVar938: int;
+
+var nVar939: int;
+
+var nVar940: int;
+
+var nVar941: int;
+
+var nVar942: int;
+
+var nVar943: int;
+
+var nVar944: int;
+
+var nVar945: int;
+
+var nVar946: int;
+
+var nVar947: int;
+
+var nVar948: int;
+
+var nVar949: int;
+
+var nVar950: int;
+
+var nVar951: int;
+
+var nVar952: int;
+
+var nVar953: int;
+
+var nVar954: int;
+
+var nVar955: int;
+
+var nVar956: int;
+
+var nVar957: int;
+
+var nVar958: int;
+
+var nVar959: int;
+
+var nVar960: int;
+
+var nVar961: int;
+
+var nVar962: int;
+
+var nVar963: int;
+
+var nVar964: int;
+
+var nVar965: int;
+
+var nVar966: int;
+
+var nVar967: int;
+
+var nVar968: int;
+
+var nVar969: int;
+
+var nVar970: int;
+
+var nVar971: int;
+
+var nVar972: int;
+
+var nVar973: int;
+
+var nVar974: int;
+
+var nVar975: int;
+
+var nVar976: int;
+
+var nVar977: int;
+
+var nVar978: int;
+
+var nVar979: int;
+
+var nVar980: int;
+
+var nVar981: int;
+
+var nVar982: int;
+
+var nVar983: int;
+
+var nVar984: int;
+
+var nVar985: int;
+
+var nVar986: int;
+
+var nVar987: int;
+
+var nVar988: int;
+
+var nVar989: int;
+
+var nVar990: int;
+
+var nVar991: int;
+
+var nVar992: int;
+
+var nVar993: int;
+
+var nVar994: int;
+
+var nVar995: int;
+
+var nVar996: int;
+
+var nVar997: int;
+
+var nVar998: int;
+
+var nVar999: int;
+
+var nVar1000: int;
+
+var nVar1001: int;
+
+var nVar1002: int;
+
+var nVar1003: int;
+
+var nVar1004: int;
+
+var nVar1005: int;
+
+var nVar1006: int;
+
+var nVar1007: int;
+
+var nVar1008: int;
+
+var nVar1009: int;
+
+var nVar1010: int;
+
+var nVar1011: int;
+
+var nVar1012: int;
+
+var nVar1013: int;
+
+var nVar1014: int;
+
+var nVar1015: int;
+
+var nVar1016: int;
+
+var nVar1017: int;
+
+var nVar1018: int;
+
+var nVar1019: int;
+
+var nVar1020: int;
+
+var nVar1021: int;
+
+var nVar1022: int;
+
+var nVar1023: int;
+
+var nVar1024: int;
+
+var nVar1025: int;
+
+var nVar1026: int;
+
+var nVar1027: int;
+
+var nVar1028: int;
+
+var nVar1029: int;
+
+var nVar1030: int;
+
+var nVar1031: int;
+
+var nVar1032: int;
+
+var nVar1033: int;
+
+var nVar1034: int;
+
+var nVar1035: int;
+
+var nVar1036: int;
+
+var nVar1037: int;
+
+var nVar1038: int;
+
+var nVar1039: int;
+
+var nVar1040: int;
+
+var nVar1041: int;
+
+var nVar1042: int;
+
+var nVar1043: int;
+
+var nVar1044: int;
+
+var nVar1045: int;
+
+var nVar1046: int;
+
+var nVar1047: int;
+
+var nVar1048: int;
+
+var nVar1049: int;
+
+var nVar1050: int;
+
+var nVar1051: int;
+
+var nVar1052: int;
+
+var nVar1053: int;
+
+var nVar1054: int;
+
+var nVar1055: int;
+
+var nVar1056: int;
+
+var nVar1057: int;
+
+var nVar1058: int;
+
+var nVar1059: int;
+
+var nVar1060: int;
+
+var nVar1061: int;
+
+var nVar1062: int;
+
+var nVar1063: int;
+
+var nVar1064: int;
+
+var nVar1065: int;
+
+var nVar1066: int;
+
+var nVar1067: int;
+
+var nVar1068: int;
+
+var nVar1069: int;
+
+var nVar1070: int;
+
+var nVar1071: int;
+
+var nVar1072: int;
+
+var nVar1073: int;
+
+var nVar1074: int;
+
+var nVar1075: int;
+
+var nVar1076: int;
+
+var nVar1077: int;
+
+var nVar1078: int;
+
+var nVar1079: int;
+
+var nVar1080: int;
+
+var nVar1081: int;
+
+var nVar1082: int;
+
+var nVar1083: int;
+
+var nVar1084: int;
+
+var nVar1085: int;
+
+var nVar1086: int;
+
+var nVar1087: int;
+
+var nVar1088: int;
+
+var nVar1089: int;
+
+var nVar1090: int;
+
+var nVar1091: int;
+
+var nVar1092: int;
+
+var nVar1093: int;
+
+var nVar1094: int;
+
+var nVar1095: int;
+
+var nVar1096: int;
+
+var nVar1097: int;
+
+var nVar1098: int;
+
+var nVar1099: int;
+
+var nVar1100: int;
+
+var nVar1101: int;
+
+var nVar1102: int;
+
+var nVar1103: int;
+
+var nVar1104: int;
+
+var nVar1105: int;
+
+var nVar1106: int;
+
+var nVar1107: int;
+
+var nVar1108: int;
+
+var nVar1109: int;
+
+var nVar1110: int;
+
+var nVar1111: int;
+
+var nVar1112: int;
+
+var nVar1113: int;
+
+var nVar1114: int;
+
+var nVar1115: int;
+
+var nVar1116: int;
+
+var nVar1117: int;
+
+var nVar1118: int;
+
+var nVar1119: int;
+
+var nVar1120: int;
+
+var nVar1121: int;
+
+var nVar1122: int;
+
+var nVar1123: int;
+
+var nVar1124: int;
+
+var nVar1125: int;
+
+var nVar1126: int;
+
+var nVar1127: int;
+
+var nVar1128: int;
+
+var nVar1129: int;
+
+var nVar1130: int;
+
+var nVar1131: int;
+
+var nVar1132: int;
+
+var nVar1133: int;
+
+var nVar1134: int;
+
+var nVar1135: int;
+
+var nVar1136: int;
+
+var nVar1137: int;
+
+var nVar1138: int;
+
+var nVar1139: int;
+
+var nVar1140: int;
+
+var nVar1141: int;
+
+var nVar1142: int;
+
+var nVar1143: int;
+
+var nVar1144: int;
+
+var nVar1145: int;
+
+var nVar1146: int;
+
+var nVar1147: int;
+
+var nVar1148: int;
+
+var nVar1149: int;
+
+var nVar1150: int;
+
+var nVar1151: int;
+
+var nVar1152: int;
+
+var nVar1153: int;
+
+var nVar1154: int;
+
+var nVar1155: int;
+
+var nVar1156: int;
+
+var nVar1157: int;
+
+var nVar1158: int;
+
+var nVar1159: int;
+
+var nVar1160: int;
+
+var nVar1161: int;
+
+var nVar1162: int;
+
+var nVar1163: int;
+
+var nVar1164: int;
+
+var nVar1165: int;
+
+var nVar1166: int;
+
+var nVar1167: int;
+
+var nVar1168: int;
+
+var nVar1169: int;
+
+var nVar1170: int;
+
+var nVar1171: int;
+
+var nVar1172: int;
+
+var nVar1173: int;
+
+var nVar1174: int;
+
+var nVar1175: int;
+
+var nVar1176: int;
+
+var nVar1177: int;
+
+var nVar1178: int;
+
+var nVar1179: int;
+
+var nVar1180: int;
+
+var nVar1181: int;
+
+var nVar1182: int;
+
+var nVar1183: int;
+
+var nVar1184: int;
+
+var nVar1185: int;
+
+var nVar1186: int;
+
+var nVar1187: int;
+
+var nVar1188: int;
+
+var nVar1189: int;
+
+var nVar1190: int;
+
+var nVar1191: int;
+
+var nVar1192: int;
+
+var nVar1193: int;
+
+var nVar1194: int;
+
+var nVar1195: int;
+
+var nVar1196: int;
+
+var nVar1197: int;
+
+var nVar1198: int;
+
+var nVar1199: int;
+
+var nVar1200: int;
+
+var nVar1201: int;
+
+var nVar1202: int;
+
+var nVar1203: int;
+
+var nVar1204: int;
+
+var nVar1205: int;
+
+var nVar1206: int;
+
+var nVar1207: int;
+
+var nVar1208: int;
+
+var nVar1209: int;
+
+var nVar1210: int;
+
+var nVar1211: int;
+
+var nVar1212: int;
+
+var nVar1213: int;
+
+var nVar1214: int;
+
+var nVar1215: int;
+
+var nVar1216: int;
+
+var nVar1217: int;
+
+var nVar1218: int;
+
+var nVar1219: int;
+
+var nVar1220: int;
+
+var nVar1221: int;
+
+var nVar1222: int;
+
+var nVar1223: int;
+
+var nVar1224: int;
+
+var nVar1225: int;
+
+var nVar1226: int;
+
+var nVar1227: int;
+
+var nVar1228: int;
+
+var nVar1229: int;
+
+var nVar1230: int;
+
+var nVar1231: int;
+
+var nVar1232: int;
+
+var nVar1233: int;
+
+var nVar1234: int;
+
+var nVar1235: int;
+
+var nVar1236: int;
+
+var nVar1237: int;
+
+var nVar1238: int;
+
+var nVar1239: int;
+
+var nVar1240: int;
+
+var nVar1241: int;
+
+var nVar1242: int;
+
+var nVar1243: int;
+
+var nVar1244: int;
+
+var nVar1245: int;
+
+var nVar1246: int;
+
+var nVar1247: int;
+
+var nVar1248: int;
+
+var nVar1249: int;
+
+var nVar1250: int;
+
+var nVar1251: int;
+
+var nVar1252: int;
+
+var nVar1253: int;
+
+var nVar1254: int;
+
+var nVar1255: int;
+
+var nVar1256: int;
+
+var nVar1257: int;
+
+var nVar1258: int;
+
+var nVar1259: int;
+
+var nVar1260: int;
+
+var nVar1261: int;
+
+var nVar1262: int;
+
+var nVar1263: int;
+
+var nVar1264: int;
+
+var nVar1265: int;
+
+var nVar1266: int;
+
+var nVar1267: int;
+
+var nVar1268: int;
+
+var nVar1269: int;
+
+var nVar1270: int;
+
+var nVar1271: int;
+
+var nVar1272: int;
+
+var nVar1273: int;
+
+var nVar1274: int;
+
+var nVar1275: int;
+
+var nVar1276: int;
+
+var nVar1277: int;
+
+var nVar1278: int;
+
+var nVar1279: int;
+
+var nVar1280: int;
+
+var nVar1281: int;
+
+var nVar1282: int;
+
+var nVar1283: int;
+
+var nVar1284: int;
+
+var nVar1285: int;
+
+var nVar1286: int;
+
+var nVar1287: int;
+
+var nVar1288: int;
+
+var nVar1289: int;
+
+var nVar1290: int;
+
+var nVar1291: int;
+
+var nVar1292: int;
+
+var nVar1293: int;
+
+var nVar1294: int;
+
+var nVar1295: int;
+
+var nVar1296: int;
+
+var nVar1297: int;
+
+var nVar1298: int;
+
+var nVar1299: int;
+
+var nVar1300: int;
+
+var nVar1301: int;
+
+var nVar1302: int;
+
+var nVar1303: int;
+
+var nVar1304: int;
+
+var nVar1305: int;
+
+var nVar1306: int;
+
+var nVar1307: int;
+
+var nVar1308: int;
+
+var nVar1309: int;
+
+var nVar1310: int;
+
+var nVar1311: int;
+
+var nVar1312: int;
+
+var nVar1313: int;
+
+var nVar1314: int;
+
+var nVar1315: int;
+
+var nVar1316: int;
+
+var nVar1317: int;
+
+var nVar1318: int;
+
+var nVar1319: int;
+
+var nVar1320: int;
+
+var nVar1321: int;
+
+var nVar1322: int;
+
+var nVar1323: int;
+
+var nVar1324: int;
+
+var nVar1325: int;
+
+var nVar1326: int;
+
+var nVar1327: int;
+
+var nVar1328: int;
+
+var nVar1329: int;
+
+var nVar1330: int;
+
+var nVar1331: int;
+
+var nVar1332: int;
+
+var nVar1333: int;
+
+var nVar1334: int;
+
+var nVar1335: int;
+
+var nVar1336: int;
+
+var nVar1337: int;
+
+var nVar1338: int;
+
+var nVar1339: int;
+
+var nVar1340: int;
+
+var nVar1341: int;
+
+var nVar1342: int;
+
+var nVar1343: int;
+
+var nVar1344: int;
+
+var nVar1345: int;
+
+var nVar1346: int;
+
+var nVar1347: int;
+
+var nVar1348: int;
+
+var nVar1349: int;
+
+var nVar1350: int;
+
+var nVar1351: int;
+
+var nVar1352: int;
+
+var nVar1353: int;
+
+var nVar1354: int;
+
+var nVar1355: int;
+
+var nVar1356: int;
+
+var nVar1357: int;
+
+var nVar1358: int;
+
+var nVar1359: int;
+
+var nVar1360: int;
+
+var nVar1361: int;
+
+var nVar1362: int;
+
+var nVar1363: int;
+
+var nVar1364: int;
+
+var nVar1365: int;
+
+var nVar1366: int;
+
+var nVar1367: int;
+
+var nVar1368: int;
+
+var nVar1369: int;
+
+var nVar1370: int;
+
+var nVar1371: int;
+
+var nVar1372: int;
+
+var nVar1373: int;
+
+var nVar1374: int;
+
+var nVar1375: int;
+
+var nVar1376: int;
+
+var nVar1377: int;
+
+var nVar1378: int;
+
+var nVar1379: int;
+
+var nVar1380: int;
+
+var nVar1381: int;
+
+var nVar1382: int;
+
+var nVar1383: int;
+
+var nVar1384: int;
+
+var nVar1385: int;
+
+var nVar1386: int;
+
+var nVar1387: int;
+
+var nVar1388: int;
+
+var nVar1389: int;
+
+var nVar1390: int;
+
+var nVar1391: int;
+
+var nVar1392: int;
+
+var nVar1393: int;
+
+var nVar1394: int;
+
+var nVar1395: int;
+
+var nVar1396: int;
+
+var nVar1397: int;
+
+var nVar1398: int;
+
+var nVar1399: int;
+
+var nVar1400: int;
+
+var nVar1401: int;
+
+var nVar1402: int;
+
+var nVar1403: int;
+
+var nVar1404: int;
+
+var nVar1405: int;
+
+var nVar1406: int;
+
+var nVar1407: int;
+
+var nVar1408: int;
+
+var nVar1409: int;
+
+var nVar1410: int;
+
+var nVar1411: int;
+
+var nVar1412: int;
+
+var nVar1413: int;
+
+var nVar1414: int;
+
+var nVar1415: int;
+
+var nVar1416: int;
+
+var nVar1417: int;
+
+var nVar1418: int;
+
+var nVar1419: int;
+
+var nVar1420: int;
+
+var nVar1421: int;
+
+var nVar1422: int;
+
+var nVar1423: int;
+
+var nVar1424: int;
+
+var nVar1425: int;
+
+var nVar1426: int;
+
+var nVar1427: int;
+
+var nVar1428: int;
+
+var nVar1429: int;
+
+var nVar1430: int;
+
+var nVar1431: int;
+
+var nVar1432: int;
+
+var nVar1433: int;
+
+var nVar1434: int;
+
+var nVar1435: int;
+
+var nVar1436: int;
+
+var nVar1437: int;
+
+var nVar1438: int;
+
+var nVar1439: int;
+
+var nVar1440: int;
+
+var nVar1441: int;
+
+var nVar1442: int;
+
+var nVar1443: int;
+
+var nVar1444: int;
+
+var nVar1445: int;
+
+var nVar1446: int;
+
+var nVar1447: int;
+
+var nVar1448: int;
+
+var nVar1449: int;
+
+var nVar1450: int;
+
+var nVar1451: int;
+
+var nVar1452: int;
+
+var nVar1453: int;
+
+var nVar1454: int;
+
+var nVar1455: int;
+
+var nVar1456: int;
+
+var nVar1457: int;
+
+var nVar1458: int;
+
+var nVar1459: int;
+
+var nVar1460: int;
+
+var nVar1461: int;
+
+var nVar1462: int;
+
+var nVar1463: int;
+
+var nVar1464: int;
+
+var nVar1465: int;
+
+var nVar1466: int;
+
+var nVar1467: int;
+
+var nVar1468: int;
+
+var nVar1469: int;
+
+var nVar1470: int;
+
+var nVar1471: int;
+
+var nVar1472: int;
+
+var nVar1473: int;
+
+var nVar1474: int;
+
+var nVar1475: int;
+
+var nVar1476: int;
+
+var nVar1477: int;
+
+var nVar1478: int;
+
+var nVar1479: int;
+
+var nVar1480: int;
+
+var nVar1481: int;
+
+var nVar1482: int;
+
+var nVar1483: int;
+
+var nVar1484: int;
+
+var nVar1485: int;
+
+var nVar1486: int;
+
+var nVar1487: int;
+
+var nVar1488: int;
+
+var nVar1489: int;
+
+var nVar1490: int;
+
+var nVar1491: int;
+
+var nVar1492: int;
+
+var nVar1493: int;
+
+var nVar1494: int;
+
+var nVar1495: int;
+
+var nVar1496: int;
+
+var nVar1497: int;
+
+var nVar1498: int;
+
+var nVar1499: int;
+
+var nVar1500: int;
+
+var nVar1501: int;
+
+var nVar1502: int;
+
+var nVar1503: int;
+
+var nVar1504: int;
+
+var nVar1505: int;
+
+var nVar1506: int;
+
+var nVar1507: int;
+
+var nVar1508: int;
+
+var nVar1509: int;
+
+var nVar1510: int;
+
+var nVar1511: int;
+
+var nVar1512: int;
+
+var nVar1513: int;
+
+var nVar1514: int;
+
+var nVar1515: int;
+
+var nVar1516: int;
+
+var nVar1517: int;
+
+var nVar1518: int;
+
+var nVar1519: int;
+
+var nVar1520: int;
+
+var nVar1521: int;
+
+var nVar1522: int;
+
+var nVar1523: int;
+
+var nVar1524: int;
+
+var nVar1525: int;
+
+var nVar1526: int;
+
+var nVar1527: int;
+
+var nVar1528: int;
+
+var nVar1529: int;
+
+var nVar1530: int;
+
+var nVar1531: int;
+
+var nVar1532: int;
+
+var nVar1533: int;
+
+var nVar1534: int;
+
+var nVar1535: int;
+
+var nVar1536: int;
+
+var nVar1537: int;
+
+var nVar1538: int;
+
+var nVar1539: int;
+
+var nVar1540: int;
+
+var nVar1541: int;
+
+var nVar1542: int;
+
+var nVar1543: int;
+
+var nVar1544: int;
+
+var nVar1545: int;
+
+var nVar1546: int;
+
+var nVar1547: int;
+
+var nVar1548: int;
+
+var nVar1549: int;
+
+var nVar1550: int;
+
+var nVar1551: int;
+
+var nVar1552: int;
+
+var nVar1553: int;
+
+var nVar1554: int;
+
+var nVar1555: int;
+
+var nVar1556: int;
+
+var nVar1557: int;
+
+var nVar1558: int;
+
+var nVar1559: int;
+
+var nVar1560: int;
+
+var nVar1561: int;
+
+var nVar1562: int;
+
+var nVar1563: int;
+
+var nVar1564: int;
+
+var nVar1565: int;
+
+var nVar1566: int;
+
+var nVar1567: int;
+
+var nVar1568: int;
+
+var nVar1569: int;
+
+var nVar1570: int;
+
+var nVar1571: int;
+
+var nVar1572: int;
+
+var nVar1573: int;
+
+var nVar1574: int;
+
+var nVar1575: int;
+
+var nVar1576: int;
+
+var nVar1577: int;
+
+var nVar1578: int;
+
+var nVar1579: int;
+
+var nVar1580: int;
+
+var nVar1581: int;
+
+var nVar1582: int;
+
+var nVar1583: int;
+
+var nVar1584: int;
+
+var nVar1585: int;
+
+var nVar1586: int;
+
+var nVar1587: int;
+
+var nVar1588: int;
+
+var nVar1589: int;
+
+var nVar1590: int;
+
+var nVar1591: int;
+
+var nVar1592: int;
+
+var nVar1593: int;
+
+var nVar1594: int;
+
+var nVar1595: int;
+
+var nVar1596: int;
+
+var nVar1597: int;
+
+var nVar1598: int;
+
+var nVar1599: int;
+
+var nVar1600: int;
+
+var nVar1601: int;
+
+var nVar1602: int;
+
+var nVar1603: int;
+
+var nVar1604: int;
+
+var nVar1605: int;
+
+var nVar1606: int;
+
+var nVar1607: int;
+
+var nVar1608: int;
+
+var nVar1609: int;
+
+var nVar1610: int;
+
+var nVar1611: int;
+
+var nVar1612: int;
+
+var nVar1613: int;
+
+var nVar1614: int;
+
+var nVar1615: int;
+
+var nVar1616: int;
+
+var nVar1617: int;
+
+var nVar1618: int;
+
+var nVar1619: int;
+
+var nVar1620: int;
+
+var nVar1621: int;
+
+var nVar1622: int;
+
+var nVar1623: int;
+
+var nVar1624: int;
+
+var nVar1625: int;
+
+var nVar1626: int;
+
+var nVar1627: int;
+
+var nVar1628: int;
+
+var nVar1629: int;
+
+var nVar1630: int;
+
+var nVar1631: int;
+
+var nVar1632: int;
+
+var nVar1633: int;
+
+var nVar1634: int;
+
+var nVar1635: int;
+
+var nVar1636: int;
+
+var nVar1637: int;
+
+var nVar1638: int;
+
+var nVar1639: int;
+
+var nVar1640: int;
+
+var nVar1641: int;
+
+var nVar1642: int;
+
+var nVar1643: int;
+
+var nVar1644: int;
+
+var nVar1645: int;
+
+var nVar1646: int;
+
+var nVar1647: int;
+
+var nVar1648: int;
+
+var nVar1649: int;
+
+var nVar1650: int;
+
+var nVar1651: int;
+
+var nVar1652: int;
+
+var nVar1653: int;
+
+var nVar1654: int;
+
+var nVar1655: int;
+
+var nVar1656: int;
+
+var nVar1657: int;
+
+var nVar1658: int;
+
+var nVar1659: int;
+
+var nVar1660: int;
+
+var nVar1661: int;
+
+var nVar1662: int;
+
+var nVar1663: int;
+
+var nVar1664: int;
+
+var nVar1665: int;
+
+var nVar1666: int;
+
+var nVar1667: int;
+
+var nVar1668: int;
+
+var nVar1669: int;
+
+var nVar1670: int;
+
+var nVar1671: int;
+
+var nVar1672: int;
+
+var nVar1673: int;
+
+var nVar1674: int;
+
+var nVar1675: int;
+
+var nVar1676: int;
+
+var nVar1677: int;
+
+var nVar1678: int;
+
+var nVar1679: int;
+
+var nVar1680: int;
+
+var nVar1681: int;
+
+var nVar1682: int;
+
+var nVar1683: int;
+
+var nVar1684: int;
+
+var nVar1685: int;
+
+var nVar1686: int;
+
+var nVar1687: int;
+
+var nVar1688: int;
+
+var nVar1689: int;
+
+var nVar1690: int;
+
+var nVar1691: int;
+
+var nVar1692: int;
+
+var nVar1693: int;
+
+var nVar1694: int;
+
+var nVar1695: int;
+
+var nVar1696: int;
+
+var nVar1697: int;
+
+var nVar1698: int;
+
+var nVar1699: int;
+
+var nVar1700: int;
+
+var nVar1701: int;
+
+var nVar1702: int;
+
+var nVar1703: int;
+
+var nVar1704: int;
+
+var nVar1705: int;
+
+var nVar1706: int;
+
+var nVar1707: int;
+
+var nVar1708: int;
+
+var nVar1709: int;
+
+var nVar1710: int;
+
+var nVar1711: int;
+
+var nVar1712: int;
+
+var nVar1713: int;
+
+var nVar1714: int;
+
+var nVar1715: int;
+
+var nVar1716: int;
+
+var nVar1717: int;
+
+var nVar1718: int;
+
+var nVar1719: int;
+
+var nVar1720: int;
+
+var nVar1721: int;
+
+var nVar1722: int;
+
+var nVar1723: int;
+
+var nVar1724: int;
+
+var nVar1725: int;
+
+var nVar1726: int;
+
+var nVar1727: int;
+
+var nVar1728: int;
+
+var nVar1729: int;
+
+var nVar1730: int;
+
+var nVar1731: int;
+
+var nVar1732: int;
+
+var nVar1733: int;
+
+var nVar1734: int;
+
+var nVar1735: int;
+
+var nVar1736: int;
+
+var nVar1737: int;
+
+var nVar1738: int;
+
+var nVar1739: int;
+
+var nVar1740: int;
+
+var nVar1741: int;
+
+var nVar1742: int;
+
+var nVar1743: int;
+
+var nVar1744: int;
+
+var nVar1745: int;
+
+var nVar1746: int;
+
+var nVar1747: int;
+
+var nVar1748: int;
+
+var nVar1749: int;
+
+var nVar1750: int;
+
+var nVar1751: int;
+
+var nVar1752: int;
+
+var nVar1753: int;
+
+var nVar1754: int;
+
+var nVar1755: int;
+
+var nVar1756: int;
+
+var nVar1757: int;
+
+var nVar1758: int;
+
+var nVar1759: int;
+
+var nVar1760: int;
+
+var nVar1761: int;
+
+var nVar1762: int;
+
+var nVar1763: int;
+
+var nVar1764: int;
+
+var nVar1765: int;
+
+var nVar1766: int;
+
+var nVar1767: int;
+
+var nVar1768: int;
+
+var nVar1769: int;
+
+var nVar1770: int;
+
+var nVar1771: int;
+
+var nVar1772: int;
+
+var nVar1773: int;
+
+var nVar1774: int;
+
+var nVar1775: int;
+
+var nVar1776: int;
+
+var nVar1777: int;
+
+var nVar1778: int;
+
+var nVar1779: int;
+
+var nVar1780: int;
+
+var nVar1781: int;
+
+var nVar1782: int;
+
+var nVar1783: int;
+
+var nVar1784: int;
+
+var nVar1785: int;
+
+var nVar1786: int;
+
+var nVar1787: int;
+
+var nVar1788: int;
+
+var nVar1789: int;
+
+var nVar1790: int;
+
+var nVar1791: int;
+
+var nVar1792: int;
+
+var nVar1793: int;
+
+var nVar1794: int;
+
+var nVar1795: int;
+
+var nVar1796: int;
+
+var nVar1797: int;
+
+var nVar1798: int;
+
+var nVar1799: int;
+
+var nVar1800: int;
+
+var nVar1801: int;
+
+var nVar1802: int;
+
+var nVar1803: int;
+
+var nVar1804: int;
+
+var nVar1805: int;
+
+var nVar1806: int;
+
+var nVar1807: int;
+
+var nVar1808: int;
+
+var nVar1809: int;
+
+var nVar1810: int;
+
+var nVar1811: int;
+
+var nVar1812: int;
+
+var nVar1813: int;
+
+var nVar1814: int;
+
+var nVar1815: int;
+
+var nVar1816: int;
+
+var nVar1817: int;
+
+var nVar1818: int;
+
+var nVar1819: int;
+
+var nVar1820: int;
+
+var nVar1821: int;
+
+var nVar1822: int;
+
+var nVar1823: int;
+
+var nVar1824: int;
+
+var nVar1825: int;
+
+var nVar1826: int;
+
+var nVar1827: int;
+
+var nVar1828: int;
+
+var nVar1829: int;
+
+var nVar1830: int;
+
+var nVar1831: int;
+
+var nVar1832: int;
+
+var nVar1833: int;
+
+var nVar1834: int;
+
+var nVar1835: int;
+
+var nVar1836: int;
+
+var nVar1837: int;
+
+var nVar1838: int;
+
+var nVar1839: int;
+
+var nVar1840: int;
+
+var nVar1841: int;
+
+var nVar1842: int;
+
+var nVar1843: int;
+
+var nVar1844: int;
+
+var nVar1845: int;
+
+var nVar1846: int;
+
+var nVar1847: int;
+
+var nVar1848: int;
+
+var nVar1849: int;
+
+var nVar1850: int;
+
+var nVar1851: int;
+
+var nVar1852: int;
+
+var nVar1853: int;
+
+var nVar1854: int;
+
+var nVar1855: int;
+
+var nVar1856: int;
+
+var nVar1857: int;
+
+var nVar1858: int;
+
+var nVar1859: int;
+
+var nVar1860: int;
+
+var nVar1861: int;
+
+var nVar1862: int;
+
+var nVar1863: int;
+
+var nVar1864: int;
+
+var nVar1865: int;
+
+var nVar1866: int;
+
+var nVar1867: int;
+
+var nVar1868: int;
+
+var nVar1869: int;
+
+var nVar1870: int;
+
+var nVar1871: int;
+
+var nVar1872: int;
+
+var nVar1873: int;
+
+var nVar1874: int;
+
+var nVar1875: int;
+
+var nVar1876: int;
+
+var nVar1877: int;
+
+var nVar1878: int;
+
+var nVar1879: int;
+
+var nVar1880: int;
+
+var nVar1881: int;
+
+var nVar1882: int;
+
+var nVar1883: int;
+
+var nVar1884: int;
+
+var nVar1885: int;
+
+var nVar1886: int;
+
+var nVar1887: int;
+
+var nVar1888: int;
+
+var nVar1889: int;
+
+var nVar1890: int;
+
+var nVar1891: int;
+
+var nVar1892: int;
+
+var nVar1893: int;
+
+var nVar1894: int;
+
+var nVar1895: int;
+
+var nVar1896: int;
+
+var nVar1897: int;
+
+var nVar1898: int;
+
+var nVar1899: int;
+
+var nVar1900: int;
+
+var nVar1901: int;
+
+var nVar1902: int;
+
+var nVar1903: int;
+
+var nVar1904: int;
+
+var nVar1905: int;
+
+var nVar1906: int;
+
+var nVar1907: int;
+
+var nVar1908: int;
+
+var nVar1909: int;
+
+var nVar1910: int;
+
+var nVar1911: int;
+
+var nVar1912: int;
+
+var nVar1913: int;
+
+var nVar1914: int;
+
+var nVar1915: int;
+
+var nVar1916: int;
+
+var nVar1917: int;
+
+var nVar1918: int;
+
+var nVar1919: int;
+
+var nVar1920: int;
+
+var nVar1921: int;
+
+var nVar1922: int;
+
+var nVar1923: int;
+
+var nVar1924: int;
+
+var nVar1925: int;
+
+var nVar1926: int;
+
+var nVar1927: int;
+
+var nVar1928: int;
+
+var nVar1929: int;
+
+var nVar1930: int;
+
+var nVar1931: int;
+
+var nVar1932: int;
+
+var nVar1933: int;
+
+var nVar1934: int;
+
+var nVar1935: int;
+
+var nVar1936: int;
+
+var nVar1937: int;
+
+var nVar1938: int;
+
+var nVar1939: int;
+
+var nVar1940: int;
+
+var nVar1941: int;
+
+var nVar1942: int;
+
+var nVar1943: int;
+
+var nVar1944: int;
+
+var nVar1945: int;
+
+var nVar1946: int;
+
+var nVar1947: int;
+
+var nVar1948: int;
+
+var nVar1949: int;
+
+var nVar1950: int;
+
+var nVar1951: int;
+
+var nVar1952: int;
+
+var nVar1953: int;
+
+var nVar1954: int;
+
+var nVar1955: int;
+
+var nVar1956: int;
+
+var nVar1957: int;
+
+var nVar1958: int;
+
+var nVar1959: int;
+
+var nVar1960: int;
+
+var nVar1961: int;
+
+var nVar1962: int;
+
+var nVar1963: int;
+
+var nVar1964: int;
+
+var nVar1965: int;
+
+var nVar1966: int;
+
+var nVar1967: int;
+
+var nVar1968: int;
+
+var nVar1969: int;
+
+var nVar1970: int;
+
+var nVar1971: int;
+
+var nVar1972: int;
+
+var nVar1973: int;
+
+var nVar1974: int;
+
+var nVar1975: int;
+
+var nVar1976: int;
+
+var nVar1977: int;
+
+var nVar1978: int;
+
+var nVar1979: int;
+
+var nVar1980: int;
+
+var nVar1981: int;
+
+var nVar1982: int;
+
+var nVar1983: int;
+
+var nVar1984: int;
+
+var nVar1985: int;
+
+var nVar1986: int;
+
+var nVar1987: int;
+
+var nVar1988: int;
+
+var nVar1989: int;
+
+var nVar1990: int;
+
+var nVar1991: int;
+
+var nVar1992: int;
+
+var nVar1993: int;
+
+var nVar1994: int;
+
+var nVar1995: int;
+
+var nVar1996: int;
+
+var nVar1997: int;
+
+var nVar1998: int;
+
+var nVar1999: int;
+
+var nVar2000: int;
+
+var nVar2001: int;
+
+var nVar2002: int;
+
+var nVar2003: int;
+
+var nVar2004: int;
+
+var nVar2005: int;
+
+var nVar2006: int;
+
+var nVar2007: int;
+
+var nVar2008: int;
+
+var nVar2009: int;
+
+var nVar2010: int;
+
+var nVar2011: int;
+
+var nVar2012: int;
+
+var nVar2013: int;
+
+var nVar2014: int;
+
+var nVar2015: int;
+
+var nVar2016: int;
+
+var nVar2017: int;
+
+var nVar2018: int;
+
+var nVar2019: int;
+
+var nVar2020: int;
+
+var nVar2021: int;
+
+var nVar2022: int;
+
+var nVar2023: int;
+
+var nVar2024: int;
+
+var nVar2025: int;
+
+var nVar2026: int;
+
+var nVar2027: int;
+
+var nVar2028: int;
+
+var nVar2029: int;
+
+var nVar2030: int;
+
+var nVar2031: int;
+
+var nVar2032: int;
+
+var nVar2033: int;
+
+var nVar2034: int;
+
+var nVar2035: int;
+
+var nVar2036: int;
+
+var nVar2037: int;
+
+var nVar2038: int;
+
+var nVar2039: int;
+
+var nVar2040: int;
+
+var nVar2041: int;
+
+var nVar2042: int;
+
+var nVar2043: int;
+
+var nVar2044: int;
+
+var nVar2045: int;
+
+var nVar2046: int;
+
+var nVar2047: int;
+
+var nVar2048: int;
+
+var nVar2049: int;
+
+var nVar2050: int;
+
+var nVar2051: int;
+
+var nVar2052: int;
+
+var nVar2053: int;
+
+var nVar2054: int;
+
+var nVar2055: int;
+
+var nVar2056: int;
+
+var nVar2057: int;
+
+var nVar2058: int;
+
+var nVar2059: int;
+
+var nVar2060: int;
+
+var nVar2061: int;
+
+var nVar2062: int;
+
+var nVar2063: int;
+
+var nVar2064: int;
+
+var nVar2065: int;
+
+var nVar2066: int;
+
+var nVar2067: int;
+
+var nVar2068: int;
+
+var nVar2069: int;
+
+var nVar2070: int;
+
+var nVar2071: int;
+
+var nVar2072: int;
+
+var nVar2073: int;
+
+var nVar2074: int;
+
+var nVar2075: int;
+
+var nVar2076: int;
+
+var nVar2077: int;
+
+var nVar2078: int;
+
+var nVar2079: int;
+
+var nVar2080: int;
+
+var nVar2081: int;
+
+var nVar2082: int;
+
+var nVar2083: int;
+
+var nVar2084: int;
+
+var nVar2085: int;
+
+var nVar2086: int;
+
+var nVar2087: int;
+
+var nVar2088: int;
+
+var nVar2089: int;
+
+var nVar2090: int;
+
+var nVar2091: int;
+
+var nVar2092: int;
+
+var nVar2093: int;
+
+var nVar2094: int;
+
+var nVar2095: int;
+
+var nVar2096: int;
+
+var nVar2097: int;
+
+var nVar2098: int;
+
+var nVar2099: int;
+
+var nVar2100: int;
+
+var nVar2101: int;
+
+var nVar2102: int;
+
+var nVar2103: int;
+
+var nVar2104: int;
+
+var nVar2105: int;
+
+var nVar2106: int;
+
+var nVar2107: int;
+
+var nVar2108: int;
+
+var nVar2109: int;
+
+var nVar2110: int;
+
+var nVar2111: int;
+
+var nVar2112: int;
+
+var nVar2113: int;
+
+var nVar2114: int;
+
+var nVar2115: int;
+
+var nVar2116: int;
+
+var nVar2117: int;
+
+var nVar2118: int;
+
+var nVar2119: int;
+
+var nVar2120: int;
+
+var nVar2121: int;
+
+var nVar2122: int;
+
+var nVar2123: int;
+
+var nVar2124: int;
+
+var nVar2125: int;
+
+var nVar2126: int;
+
+var nVar2127: int;
+
+var nVar2128: int;
+
+var nVar2129: int;
+
+var nVar2130: int;
+
+var nVar2131: int;
+
+var nVar2132: int;
+
+var nVar2133: int;
+
+var nVar2134: int;
+
+var nVar2135: int;
+
+var nVar2136: int;
+
+var nVar2137: int;
+
+var nVar2138: int;
+
+var nVar2139: int;
+
+var nVar2140: int;
+
+var nVar2141: int;
+
+var nVar2142: int;
+
+var nVar2143: int;
+
+var nVar2144: int;
+
+var nVar2145: int;
+
+var nVar2146: int;
+
+var nVar2147: int;
+
+var nVar2148: int;
+
+var nVar2149: int;
+
+var nVar2150: int;
+
+var nVar2151: int;
+
+var nVar2152: int;
+
+var nVar2153: int;
+
+var nVar2154: int;
+
+var nVar2155: int;
+
+var nVar2156: int;
+
+var nVar2157: int;
+
+var nVar2158: int;
+
+var nVar2159: int;
+
+var nVar2160: int;
+
+var nVar2161: int;
+
+var nVar2162: int;
+
+var nVar2163: int;
+
+var nVar2164: int;
+
+var nVar2165: int;
+
+var nVar2166: int;
+
+var nVar2167: int;
+
+var nVar2168: int;
+
+var nVar2169: int;
+
+var nVar2170: int;
+
+var nVar2171: int;
+
+var nVar2172: int;
+
+var nVar2173: int;
+
+var nVar2174: int;
+
+var nVar2175: int;
+
+var nVar2176: int;
+
+var nVar2177: int;
+
+var nVar2178: int;
+
+var nVar2179: int;
+
+var nVar2180: int;
+
+var nVar2181: int;
+
+var nVar2182: int;
+
+var nVar2183: int;
+
+var nVar2184: int;
+
+var nVar2185: int;
+
+var nVar2186: int;
+
+var nVar2187: int;
+
+var nVar2188: int;
+
+var nVar2189: int;
+
+var nVar2190: int;
+
+var nVar2191: int;
+
+var nVar2192: int;
+
+var nVar2193: int;
+
+var nVar2194: int;
+
+var nVar2195: int;
+
+var nVar2196: int;
+
+var nVar2197: int;
+
+var nVar2198: int;
+
+var nVar2199: int;
+
+var nVar2200: int;
+
+var nVar2201: int;
+
+var nVar2202: int;
+
+var nVar2203: int;
+
+var nVar2204: int;
+
+var nVar2205: int;
+
+var nVar2206: int;
+
+var nVar2207: int;
+
+var nVar2208: int;
+
+var nVar2209: int;
+
+var nVar2210: int;
+
+var nVar2211: int;
+
+var nVar2212: int;
+
+var nVar2213: int;
+
+var nVar2214: int;
+
+var nVar2215: int;
+
+var nVar2216: int;
+
+var nVar2217: int;
+
+var nVar2218: int;
+
+var nVar2219: int;
+
+var nVar2220: int;
+
+var nVar2221: int;
+
+var nVar2222: int;
+
+var nVar2223: int;
+
+var nVar2224: int;
+
+var nVar2225: int;
+
+var nVar2226: int;
+
+var nVar2227: int;
+
+var nVar2228: int;
+
+var nVar2229: int;
+
+var nVar2230: int;
+
+var nVar2231: int;
+
+var nVar2232: int;
+
+var nVar2233: int;
+
+var nVar2234: int;
+
+var nVar2235: int;
+
+var nVar2236: int;
+
+var nVar2237: int;
+
+var nVar2238: int;
+
+var nVar2239: int;
+
+var nVar2240: int;
+
+var nVar2241: int;
+
+var nVar2242: int;
+
+var nVar2243: int;
+
+var nVar2244: int;
+
+var nVar2245: int;
+
+var nVar2246: int;
+
+var nVar2247: int;
+
+var nVar2248: int;
+
+var nVar2249: int;
+
+var nVar2250: int;
+
+var nVar2251: int;
+
+var nVar2252: int;
+
+var nVar2253: int;
+
+var nVar2254: int;
+
+var nVar2255: int;
+
+var nVar2256: int;
+
+var nVar2257: int;
+
+var nVar2258: int;
+
+var nVar2259: int;
+
+var nVar2260: int;
+
+var nVar2261: int;
+
+var nVar2262: int;
+
+var nVar2263: int;
+
+var nVar2264: int;
+
+var nVar2265: int;
+
+var nVar2266: int;
+
+var nVar2267: int;
+
+var nVar2268: int;
+
+var nVar2269: int;
+
+var nVar2270: int;
+
+var nVar2271: int;
+
+var nVar2272: int;
+
+var nVar2273: int;
+
+var nVar2274: int;
+
+var nVar2275: int;
+
+var nVar2276: int;
+
+var nVar2277: int;
+
+var nVar2278: int;
+
+var nVar2279: int;
+
+var nVar2280: int;
+
+var nVar2281: int;
+
+var nVar2282: int;
+
+var nVar2283: int;
+
+var nVar2284: int;
+
+var nVar2285: int;
+
+var nVar2286: int;
+
+var nVar2287: int;
+
+var nVar2288: int;
+
+var nVar2289: int;
+
+var nVar2290: int;
+
+var nVar2291: int;
+
+var nVar2292: int;
+
+var nVar2293: int;
+
+var nVar2294: int;
+
+var nVar2295: int;
+
+var nVar2296: int;
+
+var nVar2297: int;
+
+var nVar2298: int;
+
+var nVar2299: int;
+
+var nVar2300: int;
+
+var nVar2301: int;
+
+var nVar2302: int;
+
+var nVar2303: int;
+
+var nVar2304: int;
+
+var nVar2305: int;
+
+var nVar2306: int;
+
+var nVar2307: int;
+
+var nVar2308: int;
+
+var nVar2309: int;
+
+var nVar2310: int;
+
+var nVar2311: int;
+
+var nVar2312: int;
+
+var nVar2313: int;
+
+var nVar2314: int;
+
+var nVar2315: int;
+
+var nVar2316: int;
+
+var nVar2317: int;
+
+var nVar2318: int;
+
+var nVar2319: int;
+
+var nVar2320: int;
+
+var nVar2321: int;
+
+var nVar2322: int;
+
+var nVar2323: int;
+
+var nVar2324: int;
+
+var nVar2325: int;
+
+var nVar2326: int;
+
+var nVar2327: int;
+
+var nVar2328: int;
+
+var nVar2329: int;
+
+var nVar2330: int;
+
+var nVar2331: int;
+
+var nVar2332: int;
+
+var nVar2333: int;
+
+var nVar2334: int;
+
+var nVar2335: int;
+
+var nVar2336: int;
+
+var nVar2337: int;
+
+var nVar2338: int;
+
+var nVar2339: int;
+
+var nVar2340: int;
+
+var nVar2341: int;
+
+var nVar2342: int;
+
+var nVar2343: int;
+
+var nVar2344: int;
+
+var nVar2345: int;
+
+var nVar2346: int;
+
+var nVar2347: int;
+
+var nVar2348: int;
+
+var nVar2349: int;
+
+var nVar2350: int;
+
+var nVar2351: int;
+
+var nVar2352: int;
+
+var nVar2353: int;
+
+var nVar2354: int;
+
+var nVar2355: int;
+
+var nVar2356: int;
+
+var nVar2357: int;
+
+var nVar2358: int;
+
+var nVar2359: int;
+
+var nVar2360: int;
+
+var nVar2361: int;
+
+var nVar2362: int;
+
+var nVar2363: int;
+
+var nVar2364: int;
+
+var nVar2365: int;
+
+var nVar2366: int;
+
+var nVar2367: int;
+
+var nVar2368: int;
+
+var nVar2369: int;
+
+var nVar2370: int;
+
+var nVar2371: int;
+
+var nVar2372: int;
+
+var nVar2373: int;
+
+var nVar2374: int;
+
+var nVar2375: int;
+
+var nVar2376: int;
+
+var nVar2377: int;
+
+var nVar2378: int;
+
+var nVar2379: int;
+
+var nVar2380: int;
+
+var nVar2381: int;
+
+var nVar2382: int;
+
+var nVar2383: int;
+
+var nVar2384: int;
+
+var nVar2385: int;
+
+var nVar2386: int;
+
+var nVar2387: int;
+
+var nVar2388: int;
+
+var nVar2389: int;
+
+var nVar2390: int;
+
+var nVar2391: int;
+
+var nVar2392: int;
+
+var nVar2393: int;
+
+var nVar2394: int;
+
+var nVar2395: int;
+
+var nVar2396: int;
+
+var nVar2397: int;
+
+var nVar2398: int;
+
+var nVar2399: int;
+
+var nVar2400: int;
+
+var nVar2401: int;
+
+var nVar2402: int;
+
+var nVar2403: int;
+
+var nVar2404: int;
+
+var nVar2405: int;
+
+var nVar2406: int;
+
+var nVar2407: int;
+
+var nVar2408: int;
+
+var nVar2409: int;
+
+var nVar2410: int;
+
+var nVar2411: int;
+
+var nVar2412: int;
+
+var nVar2413: int;
+
+var nVar2414: int;
+
+var nVar2415: int;
+
+var nVar2416: int;
+
+var nVar2417: int;
+
+var nVar2418: int;
+
+var nVar2419: int;
+
+var nVar2420: int;
+
+var nVar2421: int;
+
+var nVar2422: int;
+
+var nVar2423: int;
+
+var nVar2424: int;
+
+var nVar2425: int;
+
+var nVar2426: int;
+
+var nVar2427: int;
+
+var nVar2428: int;
+
+var nVar2429: int;
+
+var nVar2430: int;
+
+var nVar2431: int;
+
+var nVar2432: int;
+
+var nVar2433: int;
+
+var nVar2434: int;
+
+var nVar2435: int;
+
+var nVar2436: int;
+
+var nVar2437: int;
+
+var nVar2438: int;
+
+var nVar2439: int;
+
+var nVar2440: int;
+
+var nVar2441: int;
+
+var nVar2442: int;
+
+var nVar2443: int;
+
+var nVar2444: int;
+
+var nVar2445: int;
+
+var nVar2446: int;
+
+var nVar2447: int;
+
+var nVar2448: int;
+
+var nVar2449: int;
+
+var nVar2450: int;
+
+var nVar2451: int;
+
+var nVar2452: int;
+
+var nVar2453: int;
+
+var nVar2454: int;
+
+var nVar2455: int;
+
+var nVar2456: int;
+
+var nVar2457: int;
+
+var nVar2458: int;
+
+var nVar2459: int;
+
+var nVar2460: int;
+
+var nVar2461: int;
+
+var nVar2462: int;
+
+var nVar2463: int;
+
+var nVar2464: int;
+
+var nVar2465: int;
+
+var nVar2466: int;
+
+var nVar2467: int;
+
+var nVar2468: int;
+
+var nVar2469: int;
+
+var nVar2470: int;
+
+var nVar2471: int;
+
+var nVar2472: int;
+
+var nVar2473: int;
+
+var nVar2474: int;
+
+var nVar2475: int;
+
+var nVar2476: int;
+
+var nVar2477: int;
+
+var nVar2478: int;
+
+var nVar2479: int;
+
+var nVar2480: int;
+
+var nVar2481: int;
+
+var nVar2482: int;
+
+var nVar2483: int;
+
+var nVar2484: int;
+
+var nVar2485: int;
+
+var nVar2486: int;
+
+var nVar2487: int;
+
+var nVar2488: int;
+
+var nVar2489: int;
+
+var nVar2490: int;
+
+var nVar2491: int;
+
+var nVar2492: int;
+
+var nVar2493: int;
+
+var nVar2494: int;
+
+var nVar2495: int;
+
+var nVar2496: int;
+
+var nVar2497: int;
+
+var nVar2498: int;
+
+var nVar2499: int;
+
+var nVar2500: int;
+
+var nVar2501: int;
+
+var nVar2502: int;
+
+var nVar2503: int;
+
+var nVar2504: int;
+
+var nVar2505: int;
+
+var nVar2506: int;
+
+var nVar2507: int;
+
+var nVar2508: int;
+
+var nVar2509: int;
+
+var nVar2510: int;
+
+var nVar2511: int;
+
+var nVar2512: int;
+
+var nVar2513: int;
+
+var nVar2514: int;
+
+var nVar2515: int;
+
+var nVar2516: int;
+
+var nVar2517: int;
+
+var nVar2518: int;
+
+var nVar2519: int;
+
+var nVar2520: int;
+
+var nVar2521: int;
+
+var nVar2522: int;
+
+var nVar2523: int;
+
+var nVar2524: int;
+
+var nVar2525: int;
+
+var nVar2526: int;
+
+var nVar2527: int;
+
+var nVar2528: int;
+
+var nVar2529: int;
+
+var nVar2530: int;
+
+var nVar2531: int;
+
+var nVar2532: int;
+
+var nVar2533: int;
+
+var nVar2534: int;
+
+var nVar2535: int;
+
+var nVar2536: int;
+
+var nVar2537: int;
+
+var nVar2538: int;
+
+var nVar2539: int;
+
+var nVar2540: int;
+
+var nVar2541: int;
+
+var nVar2542: int;
+
+var nVar2543: int;
+
+var nVar2544: int;
+
+var nVar2545: int;
+
+var nVar2546: int;
+
+var nVar2547: int;
+
+var nVar2548: int;
+
+var nVar2549: int;
+
+var nVar2550: int;
+
+var nVar2551: int;
+
+var nVar2552: int;
+
+var nVar2553: int;
+
+var nVar2554: int;
+
+var nVar2555: int;
+
+var nVar2556: int;
+
+var nVar2557: int;
+
+var nVar2558: int;
+
+var nVar2559: int;
+
+var nVar2560: int;
+
+var nVar2561: int;
+
+var nVar2562: int;
+
+var nVar2563: int;
+
+var nVar2564: int;
+
+var nVar2565: int;
+
+var nVar2566: int;
+
+var nVar2567: int;
+
+var nVar2568: int;
+
+var nVar2569: int;
+
+var nVar2570: int;
+
+var nVar2571: int;
+
+var nVar2572: int;
+
+var nVar2573: int;
+
+var nVar2574: int;
+
+var nVar2575: int;
+
+var nVar2576: int;
+
+var nVar2577: int;
+
+var nVar2578: int;
+
+var nVar2579: int;
+
+var nVar2580: int;
+
+var nVar2581: int;
+
+var nVar2582: int;
+
+var nVar2583: int;
+
+var nVar2584: int;
+
+var nVar2585: int;
+
+var nVar2586: int;
+
+var nVar2587: int;
+
+var nVar2588: int;
+
+var nVar2589: int;
+
+var nVar2590: int;
+
+var nVar2591: int;
+
+var nVar2592: int;
+
+var nVar2593: int;
+
+var nVar2594: int;
+
+var nVar2595: int;
+
+var nVar2596: int;
+
+var nVar2597: int;
+
+var nVar2598: int;
+
+var nVar2599: int;
+
+var nVar2600: int;
+
+var nVar2601: int;
+
+var nVar2602: int;
+
+var nVar2603: int;
+
+var nVar2604: int;
+
+var nVar2605: int;
+
+var nVar2606: int;
+
+var nVar2607: int;
+
+var nVar2608: int;
+
+var nVar2609: int;
+
+var nVar2610: int;
+
+var nVar2611: int;
+
+var nVar2612: int;
+
+var nVar2613: int;
+
+var nVar2614: int;
+
+var nVar2615: int;
+
+var nVar2616: int;
+
+var nVar2617: int;
+
+var nVar2618: int;
+
+var nVar2619: int;
+
+var nVar2620: int;
+
+var nVar2621: int;
+
+var nVar2622: int;
+
+var nVar2623: int;
+
+var nVar2624: int;
+
+var nVar2625: int;
+
+var nVar2626: int;
+
+var nVar2627: int;
+
+var nVar2628: int;
+
+var nVar2629: int;
+
+var nVar2630: int;
+
+var nVar2631: int;
+
+var nVar2632: int;
+
+var nVar2633: int;
+
+var nVar2634: int;
+
+var nVar2635: int;
+
+var nVar2636: int;
+
+var nVar2637: int;
+
+var nVar2638: int;
+
+var nVar2639: int;
+
+var nVar2640: int;
+
+var nVar2641: int;
+
+var nVar2642: int;
+
+var nVar2643: int;
+
+var nVar2644: int;
+
+var nVar2645: int;
+
+var nVar2646: int;
+
+var nVar2647: int;
+
+var nVar2648: int;
+
+var nVar2649: int;
+
+var nVar2650: int;
+
+var nVar2651: int;
+
+var nVar2652: int;
+
+var nVar2653: int;
+
+var nVar2654: int;
+
+var nVar2655: int;
+
+var nVar2656: int;
+
+var nVar2657: int;
+
+var nVar2658: int;
+
+var nVar2659: int;
+
+var nVar2660: int;
+
+var nVar2661: int;
+
+var nVar2662: int;
+
+var nVar2663: int;
+
+var nVar2664: int;
+
+var nVar2665: int;
+
+var nVar2666: int;
+
+var nVar2667: int;
+
+var nVar2668: int;
+
+var nVar2669: int;
+
+var nVar2670: int;
+
+var nVar2671: int;
+
+var nVar2672: int;
+
+var nVar2673: int;
+
+var nVar2674: int;
+
+var nVar2675: int;
+
+var nVar2676: int;
+
+var nVar2677: int;
+
+var nVar2678: int;
+
+var nVar2679: int;
+
+var nVar2680: int;
+
+var nVar2681: int;
+
+var nVar2682: int;
+
+var nVar2683: int;
+
+var nVar2684: int;
+
+var nVar2685: int;
+
+var nVar2686: int;
+
+var nVar2687: int;
+
+var nVar2688: int;
+
+var nVar2689: int;
+
+var nVar2690: int;
+
+var nVar2691: int;
+
+var nVar2692: int;
+
+var nVar2693: int;
+
+var nVar2694: int;
+
+var nVar2695: int;
+
+var nVar2696: int;
+
+var nVar2697: int;
+
+var nVar2698: int;
+
+var nVar2699: int;
+
+var nVar2700: int;
+
+var nVar2701: int;
+
+var nVar2702: int;
+
+var nVar2703: int;
+
+var nVar2704: int;
+
+var nVar2705: int;
+
+var nVar2706: int;
+
+var nVar2707: int;
+
+var nVar2708: int;
+
+var nVar2709: int;
+
+var nVar2710: int;
+
+var nVar2711: int;
+
+var nVar2712: int;
+
+var nVar2713: int;
+
+var nVar2714: int;
+
+var nVar2715: int;
+
+var nVar2716: int;
+
+var nVar2717: int;
+
+var nVar2718: int;
+
+var nVar2719: int;
+
+var nVar2720: int;
+
+var nVar2721: int;
+
+var nVar2722: int;
+
+var nVar2723: int;
+
+var nVar2724: int;
+
+var nVar2725: int;
+
+var nVar2726: int;
+
+var nVar2727: int;
+
+var nVar2728: int;
+
+var nVar2729: int;
+
+var nVar2730: int;
+
+var nVar2731: int;
+
+var nVar2732: int;
+
+var nVar2733: int;
+
+var nVar2734: int;
+
+var nVar2735: int;
+
+var nVar2736: int;
+
+var nVar2737: int;
+
+var nVar2738: int;
+
+var nVar2739: int;
+
+var nVar2740: int;
+
+var nVar2741: int;
+
+var nVar2742: int;
+
+var nVar2743: int;
+
+var nVar2744: int;
+
+var nVar2745: int;
+
+var nVar2746: int;
+
+var nVar2747: int;
+
+var nVar2748: int;
+
+var nVar2749: int;
+
+var nVar2750: int;
+
+var nVar2751: int;
+
+var nVar2752: int;
+
+var nVar2753: int;
+
+var nVar2754: int;
+
+var nVar2755: int;
+
+var nVar2756: int;
+
+var nVar2757: int;
+
+var nVar2758: int;
+
+var nVar2759: int;
+
+var nVar2760: int;
+
+var nVar2761: int;
+
+var nVar2762: int;
+
+var nVar2763: int;
+
+var nVar2764: int;
+
+var nVar2765: int;
+
+var nVar2766: int;
+
+var nVar2767: int;
+
+var nVar2768: int;
+
+var nVar2769: int;
+
+var nVar2770: int;
+
+var nVar2771: int;
+
+var nVar2772: int;
+
+var nVar2773: int;
+
+var nVar2774: int;
+
+var nVar2775: int;
+
+var nVar2776: int;
+
+var nVar2777: int;
+
+var nVar2778: int;
+
+var nVar2779: int;
+
+var nVar2780: int;
+
+var nVar2781: int;
+
+var nVar2782: int;
+
+var nVar2783: int;
+
+var nVar2784: int;
+
+var nVar2785: int;
+
+var nVar2786: int;
+
+var nVar2787: int;
+
+var nVar2788: int;
+
+var nVar2789: int;
+
+var nVar2790: int;
+
+var nVar2791: int;
+
+var nVar2792: int;
+
+var nVar2793: int;
+
+var nVar2794: int;
+
+var nVar2795: int;
+
+var nVar2796: int;
+
+var nVar2797: int;
+
+var nVar2798: int;
+
+var nVar2799: int;
+
+var nVar2800: int;
+
+var nVar2801: int;
+
+var nVar2802: int;
+
+var nVar2803: int;
+
+var nVar2804: int;
+
+var nVar2805: int;
+
+var nVar2806: int;
+
+var nVar2807: int;
+
+var nVar2808: int;
+
+var nVar2809: int;
+
+var nVar2810: int;
+
+var nVar2811: int;
+
+var nVar2812: int;
+
+var nVar2813: int;
+
+var nVar2814: int;
+
+var nVar2815: int;
+
+var nVar2816: int;
+
+var nVar2817: int;
+
+var nVar2818: int;
+
+var nVar2819: int;
+
+var nVar2820: int;
+
+var nVar2821: int;
+
+var nVar2822: int;
+
+var nVar2823: int;
+
+var nVar2824: int;
+
+var nVar2825: int;
+
+var nVar2826: int;
+
+var nVar2827: int;
+
+var nVar2828: int;
+
+var nVar2829: int;
+
+var nVar2830: int;
+
+var nVar2831: int;
+
+var nVar2832: int;
+
+var nVar2833: int;
+
+var nVar2834: int;
+
+var nVar2835: int;
+
+var nVar2836: int;
+
+var nVar2837: int;
+
+var nVar2838: int;
+
+var nVar2839: int;
+
+var nVar2840: int;
+
+var nVar2841: int;
+
+var nVar2842: int;
+
+var nVar2843: int;
+
+var nVar2844: int;
+
+var nVar2845: int;
+
+var nVar2846: int;
+
+var nVar2847: int;
+
+var nVar2848: int;
+
+var nVar2849: int;
+
+var nVar2850: int;
+
+var nVar2851: int;
+
+var nVar2852: int;
+
+var nVar2853: int;
+
+var nVar2854: int;
+
+var nVar2855: int;
+
+var nVar2856: int;
+
+var nVar2857: int;
+
+var nVar2858: int;
+
+var nVar2859: int;
+
+var nVar2860: int;
+
+var nVar2861: int;
+
+var nVar2862: int;
+
+var nVar2863: int;
+
+var nVar2864: int;
+
+var nVar2865: int;
+
+var nVar2866: int;
+
+var nVar2867: int;
+
+var nVar2868: int;
+
+var nVar2869: int;
+
+var nVar2870: int;
+
+var nVar2871: int;
+
+var nVar2872: int;
+
+var nVar2873: int;
+
+var nVar2874: int;
+
+var nVar2875: int;
+
+var nVar2876: int;
+
+var nVar2877: int;
+
+var nVar2878: int;
+
+var nVar2879: int;
+
+var nVar2880: int;
+
+var nVar2881: int;
+
+var nVar2882: int;
+
+var nVar2883: int;
+
+var nVar2884: int;
+
+var nVar2885: int;
+
+var nVar2886: int;
+
+var nVar2887: int;
+
+var nVar2888: int;
+
+var nVar2889: int;
+
+var nVar2890: int;
+
+var nVar2891: int;
+
+var nVar2892: int;
+
+var nVar2893: int;
+
+var nVar2894: int;
+
+var nVar2895: int;
+
+var nVar2896: int;
+
+var nVar2897: int;
+
+var nVar2898: int;
+
+var nVar2899: int;
+
+var nVar2900: int;
+
+var nVar2901: int;
+
+var nVar2902: int;
+
+var nVar2903: int;
+
+var nVar2904: int;
+
+var nVar2905: int;
+
+var nVar2906: int;
+
+var nVar2907: int;
+
+var nVar2908: int;
+
+var nVar2909: int;
+
+var nVar2910: int;
+
+var nVar2911: int;
+
+var nVar2912: int;
+
+var nVar2913: int;
+
+var nVar2914: int;
+
+var nVar2915: int;
+
+var nVar2916: int;
+
+var nVar2917: int;
+
+var nVar2918: int;
+
+var nVar2919: int;
+
+var nVar2920: int;
+
+var nVar2921: int;
+
+var nVar2922: int;
+
+var nVar2923: int;
+
+var nVar2924: int;
+
+var nVar2925: int;
+
+var nVar2926: int;
+
+var nVar2927: int;
+
+var nVar2928: int;
+
+var nVar2929: int;
+
+var nVar2930: int;
+
+var nVar2931: int;
+
+var nVar2932: int;
+
+var nVar2933: int;
+
+var nVar2934: int;
+
+var nVar2935: int;
+
+var nVar2936: int;
+
+var nVar2937: int;
+
+var nVar2938: int;
+
+var nVar2939: int;
+
+var nVar2940: int;
+
+var nVar2941: int;
+
+var nVar2942: int;
+
+var nVar2943: int;
+
+var nVar2944: int;
+
+var nVar2945: int;
+
+var nVar2946: int;
+
+var nVar2947: int;
+
+var nVar2948: int;
+
+var nVar2949: int;
+
+var nVar2950: int;
+
+var nVar2951: int;
+
+var nVar2952: int;
+
+var nVar2953: int;
+
+var nVar2954: int;
+
+var nVar2955: int;
+
+var nVar2956: int;
+
+var nVar2957: int;
+
+var nVar2958: int;
+
+var nVar2959: int;
+
+var nVar2960: int;
+
+var nVar2961: int;
+
+var nVar2962: int;
+
+var nVar2963: int;
+
+var nVar2964: int;
+
+var nVar2965: int;
+
+var nVar2966: int;
+
+var nVar2967: int;
+
+var nVar2968: int;
+
+var nVar2969: int;
+
+var nVar2970: int;
+
+var nVar2971: int;
+
+var nVar2972: int;
+
+var nVar2973: int;
+
+var nVar2974: int;
+
+var nVar2975: int;
+
+var nVar2976: int;
+
+var nVar2977: int;
+
+var nVar2978: int;
+
+var nVar2979: int;
+
+var nVar2980: int;
+
+var nVar2981: int;
+
+var nVar2982: int;
+
+var nVar2983: int;
+
+var nVar2984: int;
+
+var nVar2985: int;
+
+var nVar2986: int;
+
+var nVar2987: int;
+
+var nVar2988: int;
+
+var nVar2989: int;
+
+var nVar2990: int;
+
+var nVar2991: int;
+
+var nVar2992: int;
+
+var nVar2993: int;
+
+var nVar2994: int;
+
+var nVar2995: int;
+
+var nVar2996: int;
+
+var nVar2997: int;
+
+var nVar2998: int;
+
+var nVar2999: int;
+
+var nVar3000: int;
+
+var nVar3001: int;
+
+var nVar3002: int;
+
+var nVar3003: int;
+
+var nVar3004: int;
+
+var nVar3005: int;
+
+var nVar3006: int;
+
+var nVar3007: int;
+
+var nVar3008: int;
+
+var nVar3009: int;
+
+var nVar3010: int;
+
+var nVar3011: int;
+
+var nVar3012: int;
+
+var nVar3013: int;
+
+var nVar3014: int;
+
+var nVar3015: int;
+
+var nVar3016: int;
+
+var nVar3017: int;
+
+var nVar3018: int;
+
+var nVar3019: int;
+
+var nVar3020: int;
+
+var nVar3021: int;
+
+var nVar3022: int;
+
+var nVar3023: int;
+
+var nVar3024: int;
+
+var nVar3025: int;
+
+var nVar3026: int;
+
+var nVar3027: int;
+
+var nVar3028: int;
+
+var nVar3029: int;
+
+var nVar3030: int;
+
+var nVar3031: int;
+
+var nVar3032: int;
+
+var nVar3033: int;
+
+var nVar3034: int;
+
+var nVar3035: int;
+
+var nVar3036: int;
+
+var nVar3037: int;
+
+var nVar3038: int;
+
+var nVar3039: int;
+
+var nVar3040: int;
+
+var nVar3041: int;
+
+var nVar3042: int;
+
+var nVar3043: int;
+
+var nVar3044: int;
+
+var nVar3045: int;
+
+var nVar3046: int;
+
+var nVar3047: int;
+
+var nVar3048: int;
+
+var nVar3049: int;
+
+var nVar3050: int;
+
+var nVar3051: int;
+
+var nVar3052: int;
+
+var nVar3053: int;
+
+var nVar3054: int;
+
+var nVar3055: int;
+
+var nVar3056: int;
+
+var nVar3057: int;
+
+var nVar3058: int;
+
+var nVar3059: int;
+
+var nVar3060: int;
+
+var nVar3061: int;
+
+var nVar3062: int;
+
+var nVar3063: int;
+
+var nVar3064: int;
+
+var nVar3065: int;
+
+var nVar3066: int;
+
+var nVar3067: int;
+
+var nVar3068: int;
+
+var nVar3069: int;
+
+var nVar3070: int;
+
+var nVar3071: int;
+
+var nVar3072: int;
+
+var nVar3073: int;
+
+var nVar3074: int;
+
+var nVar3075: int;
+
+var nVar3076: int;
+
+var nVar3077: int;
+
+var nVar3078: int;
+
+var nVar3079: int;
+
+var nVar3080: int;
+
+var nVar3081: int;
+
+var nVar3082: int;
+
+var nVar3083: int;
+
+var nVar3084: int;
+
+var nVar3085: int;
+
+var nVar3086: int;
+
+var nVar3087: int;
+
+var nVar3088: int;
+
+var nVar3089: int;
+
+var nVar3090: int;
+
+var nVar3091: int;
+
+var nVar3092: int;
+
+var nVar3093: int;
+
+var nVar3094: int;
+
+var nVar3095: int;
+
+var nVar3096: int;
+
+var nVar3097: int;
+
+var nVar3098: int;
+
+var nVar3099: int;
+
+var nVar3100: int;
+
+var nVar3101: int;
+
+var nVar3102: int;
+
+var nVar3103: int;
+
+var nVar3104: int;
+
+var nVar3105: int;
+
+var nVar3106: int;
+
+var nVar3107: int;
+
+var nVar3108: int;
+
+var nVar3109: int;
+
+var nVar3110: int;
+
+var nVar3111: int;
+
+var nVar3112: int;
+
+var nVar3113: int;
+
+var nVar3114: int;
+
+var nVar3115: int;
+
+var nVar3116: int;
+
+var nVar3117: int;
+
+var nVar3118: int;
+
+var nVar3119: int;
+
+var nVar3120: int;
+
+var nVar3121: int;
+
+var nVar3122: int;
+
+var nVar3123: int;
+
+var nVar3124: int;
+
+var nVar3125: int;
+
+var nVar3126: int;
+
+var nVar3127: int;
+
+var nVar3128: int;
+
+var nVar3129: int;
+
+var nVar3130: int;
+
+var nVar3131: int;
+
+var nVar3132: int;
+
+var nVar3133: int;
+
+var nVar3134: int;
+
+var nVar3135: int;
+
+var nVar3136: int;
+
+var nVar3137: int;
+
+var nVar3138: int;
+
+var nVar3139: int;
+
+var nVar3140: int;
+
+var nVar3141: int;
+
+var nVar3142: int;
+
+var nVar3143: int;
+
+var nVar3144: int;
+
+var nVar3145: int;
+
+var nVar3146: int;
+
+var nVar3147: int;
+
+var nVar3148: int;
+
+var nVar3149: int;
+
+var nVar3150: int;
+
+var nVar3151: int;
+
+var nVar3152: int;
+
+var nVar3153: int;
+
+var nVar3154: int;
+
+var nVar3155: int;
+
+var nVar3156: int;
+
+var nVar3157: int;
+
+var nVar3158: int;
+
+var nVar3159: int;
+
+var nVar3160: int;
+
+var nVar3161: int;
+
+var nVar3162: int;
+
+var nVar3163: int;
+
+var nVar3164: int;
+
+var nVar3165: int;
+
+var nVar3166: int;
+
+var nVar3167: int;
+
+var nVar3168: int;
+
+var nVar3169: int;
+
+var nVar3170: int;
+
+var nVar3171: int;
+
+var nVar3172: int;
+
+var nVar3173: int;
+
+var nVar3174: int;
+
+var nVar3175: int;
+
+var nVar3176: int;
+
+var nVar3177: int;
+
+var nVar3178: int;
+
+var nVar3179: int;
+
+var nVar3180: int;
+
+var nVar3181: int;
+
+var nVar3182: int;
+
+var nVar3183: int;
+
+var nVar3184: int;
+
+var nVar3185: int;
+
+var nVar3186: int;
+
+var nVar3187: int;
+
+var nVar3188: int;
+
+var nVar3189: int;
+
+var nVar3190: int;
+
+var nVar3191: int;
+
+var nVar3192: int;
+
+var nVar3193: int;
+
+var nVar3194: int;
+
+var nVar3195: int;
+
+var nVar3196: int;
+
+var nVar3197: int;
+
+var nVar3198: int;
+
+var nVar3199: int;
+
+var nVar3200: int;
+
+var nVar3201: int;
+
+var nVar3202: int;
+
+var nVar3203: int;
+
+var nVar3204: int;
+
+var nVar3205: int;
+
+var nVar3206: int;
+
+var nVar3207: int;
+
+var nVar3208: int;
+
+var nVar3209: int;
+
+var nVar3210: int;
+
+var nVar3211: int;
+
+var nVar3212: int;
+
+var nVar3213: int;
+
+var nVar3214: int;
+
+var nVar3215: int;
+
+var nVar3216: int;
+
+var nVar3217: int;
+
+var nVar3218: int;
+
+var nVar3219: int;
+
+var nVar3220: int;
+
+var nVar3221: int;
+
+var nVar3222: int;
+
+var nVar3223: int;
+
+var nVar3224: int;
+
+var nVar3225: int;
+
+var nVar3226: int;
+
+var nVar3227: int;
+
+var nVar3228: int;
+
+var nVar3229: int;
+
+var nVar3230: int;
+
+var nVar3231: int;
+
+var nVar3232: int;
+
+var nVar3233: int;
+
+var nVar3234: int;
+
+var nVar3235: int;
+
+var nVar3236: int;
+
+var nVar3237: int;
+
+var nVar3238: int;
+
+var nVar3239: int;
+
+var nVar3240: int;
+
+var nVar3241: int;
+
+var nVar3242: int;
+
+var nVar3243: int;
+
+var nVar3244: int;
+
+var nVar3245: int;
+
+var nVar3246: int;
+
+var nVar3247: int;
+
+var nVar3248: int;
+
+var nVar3249: int;
+
+var nVar3250: int;
+
+var nVar3251: int;
+
+var nVar3252: int;
+
+var nVar3253: int;
+
+var nVar3254: int;
+
+var nVar3255: int;
+
+var nVar3256: int;
+
+var nVar3257: int;
+
+var nVar3258: int;
+
+var nVar3259: int;
+
+var nVar3260: int;
+
+var nVar3261: int;
+
+var nVar3262: int;
+
+var nVar3263: int;
+
+var nVar3264: int;
+
+var nVar3265: int;
+
+var nVar3266: int;
+
+var nVar3267: int;
+
+var nVar3268: int;
+
+var nVar3269: int;
+
+var nVar3270: int;
+
+var nVar3271: int;
+
+var nVar3272: int;
+
+var nVar3273: int;
+
+var nVar3274: int;
+
+var nVar3275: int;
+
+var nVar3276: int;
+
+var nVar3277: int;
+
+var nVar3278: int;
+
+var nVar3279: int;
+
+var nVar3280: int;
+
+var nVar3281: int;
+
+var nVar3282: int;
+
+var nVar3283: int;
+
+var nVar3284: int;
+
+var nVar3285: int;
+
+var nVar3286: int;
+
+var nVar3287: int;
+
+var nVar3288: int;
+
+var nVar3289: int;
+
+var nVar3290: int;
+
+var nVar3291: int;
+
+var nVar3292: int;
+
+var nVar3293: int;
+
+var nVar3294: int;
+
+var nVar3295: int;
+
+var nVar3296: int;
+
+var nVar3297: int;
+
+var nVar3298: int;
+
+var nVar3299: int;
+
+var nVar3300: int;
+
+var nVar3301: int;
+
+var nVar3302: int;
+
+var nVar3303: int;
+
+var nVar3304: int;
+
+var nVar3305: int;
+
+var nVar3306: int;
+
+var nVar3307: int;
+
+var nVar3308: int;
+
+var nVar3309: int;
+
+var nVar3310: int;
+
+var nVar3311: int;
+
+var nVar3312: int;
+
+var nVar3313: int;
+
+var nVar3314: int;
+
+var nVar3315: int;
+
+var nVar3316: int;
+
+var nVar3317: int;
+
+var nVar3318: int;
+
+var nVar3319: int;
+
+var nVar3320: int;
+
+var nVar3321: int;
+
+var nVar3322: int;
+
+var nVar3323: int;
+
+var nVar3324: int;
+
+var nVar3325: int;
+
+var nVar3326: int;
+
+var nVar3327: int;
+
+var nVar3328: int;
+
+var nVar3329: int;
+
+var nVar3330: int;
+
+var nVar3331: int;
+
+var nVar3332: int;
+
+var nVar3333: int;
+
+var nVar3334: int;
+
+var nVar3335: int;
+
+var nVar3336: int;
+
+var nVar3337: int;
+
+var nVar3338: int;
+
+var nVar3339: int;
+
+var nVar3340: int;
+
+var nVar3341: int;
+
+var nVar3342: int;
+
+var nVar3343: int;
+
+var nVar3344: int;
+
+var nVar3345: int;
+
+var nVar3346: int;
+
+var nVar3347: int;
+
+var nVar3348: int;
+
+var nVar3349: int;
+
+var nVar3350: int;
+
+var nVar3351: int;
+
+var nVar3352: int;
+
+var nVar3353: int;
+
+var nVar3354: int;
+
+var nVar3355: int;
+
+var nVar3356: int;
+
+var nVar3357: int;
+
+var nVar3358: int;
+
+var nVar3359: int;
+
+var nVar3360: int;
+
+var nVar3361: int;
+
+var nVar3362: int;
+
+var nVar3363: int;
+
+var nVar3364: int;
+
+var nVar3365: int;
+
+var nVar3366: int;
+
+var nVar3367: int;
+
+var nVar3368: int;
+
+var nVar3369: int;
+
+var nVar3370: int;
+
+var nVar3371: int;
+
+var nVar3372: int;
+
+var nVar3373: int;
+
+var nVar3374: int;
+
+var nVar3375: int;
+
+var nVar3376: int;
+
+var nVar3377: int;
+
+var nVar3378: int;
+
+var nVar3379: int;
+
+var nVar3380: int;
+
+var nVar3381: int;
+
+var nVar3382: int;
+
+var nVar3383: int;
+
+var nVar3384: int;
+
+var nVar3385: int;
+
+var nVar3386: int;
+
+var nVar3387: int;
+
+var nVar3388: int;
+
+var nVar3389: int;
+
+var nVar3390: int;
+
+var nVar3391: int;
+
+var nVar3392: int;
+
+var nVar3393: int;
+
+var nVar3394: int;
+
+var nVar3395: int;
+
+var nVar3396: int;
+
+var nVar3397: int;
+
+var nVar3398: int;
+
+var nVar3399: int;
+
+var nVar3400: int;
+
+var nVar3401: int;
+
+var nVar3402: int;
+
+var nVar3403: int;
+
+var nVar3404: int;
+
+var nVar3405: int;
+
+var nVar3406: int;
+
+var nVar3407: int;
+
+var nVar3408: int;
+
+var nVar3409: int;
+
+var nVar3410: int;
+
+var nVar3411: int;
+
+var nVar3412: int;
+
+var nVar3413: int;
+
+var nVar3414: int;
+
+var nVar3415: int;
+
+var nVar3416: int;
+
+var nVar3417: int;
+
+var nVar3418: int;
+
+var nVar3419: int;
+
+var nVar3420: int;
+
+var nVar3421: int;
+
+var nVar3422: int;
+
+var nVar3423: int;
+
+var nVar3424: int;
+
+var nVar3425: int;
+
+var nVar3426: int;
+
+var nVar3427: int;
+
+var nVar3428: int;
+
+var nVar3429: int;
+
+var nVar3430: int;
+
+var nVar3431: int;
+
+var nVar3432: int;
+
+var nVar3433: int;
+
+var nVar3434: int;
+
+var nVar3435: int;
+
+var nVar3436: int;
+
+var nVar3437: int;
+
+var nVar3438: int;
+
+var nVar3439: int;
+
+var nVar3440: int;
+
+var nVar3441: int;
+
+var nVar3442: int;
+
+var nVar3443: int;
+
+var nVar3444: int;
+
+var nVar3445: int;
+
+var nVar3446: int;
+
+var nVar3447: int;
+
+var nVar3448: int;
+
+var nVar3449: int;
+
+var nVar3450: int;
+
+var nVar3451: int;
+
+var nVar3452: int;
+
+var nVar3453: int;
+
+var nVar3454: int;
+
+var nVar3455: int;
+
+var nVar3456: int;
+
+var nVar3457: int;
+
+var nVar3458: int;
+
+var nVar3459: int;
+
+var nVar3460: int;
+
+var nVar3461: int;
+
+var nVar3462: int;
+
+var nVar3463: int;
+
+var nVar3464: int;
+
+var nVar3465: int;
+
+var nVar3466: int;
+
+var nVar3467: int;
+
+var nVar3468: int;
+
+var nVar3469: int;
+
+var nVar3470: int;
+
+var nVar3471: int;
+
+var nVar3472: int;
+
+var nVar3473: int;
+
+var nVar3474: int;
+
+var nVar3475: int;
+
+var nVar3476: int;
+
+var nVar3477: int;
+
+var nVar3478: int;
+
+var nVar3479: int;
+
+var nVar3480: int;
+
+var nVar3481: int;
+
+var nVar3482: int;
+
+var nVar3483: int;
+
+var nVar3484: int;
+
+var nVar3485: int;
+
+var nVar3486: int;
+
+var nVar3487: int;
+
+var nVar3488: int;
+
+var nVar3489: int;
+
+var nVar3490: int;
+
+var nVar3491: int;
+
+var nVar3492: int;
+
+var nVar3493: int;
+
+var nVar3494: int;
+
+var nVar3495: int;
+
+var nVar3496: int;
+
+var nVar3497: int;
+
+var nVar3498: int;
+
+var nVar3499: int;
+
+var nVar3500: int;
+
+var nVar3501: int;
+
+var nVar3502: int;
+
+var nVar3503: int;
+
+var nVar3504: int;
+
+var nVar3505: int;
+
+var nVar3506: int;
+
+var nVar3507: int;
+
+var nVar3508: int;
+
+var nVar3509: int;
+
+var nVar3510: int;
+
+var nVar3511: int;
+
+var nVar3512: int;
+
+var nVar3513: int;
+
+var nVar3514: int;
+
+var nVar3515: int;
+
+var nVar3516: int;
+
+var nVar3517: int;
+
+var nVar3518: int;
+
+var nVar3519: int;
+
+var nVar3520: int;
+
+var nVar3521: int;
+
+var nVar3522: int;
+
+var nVar3523: int;
+
+var nVar3524: int;
+
+var nVar3525: int;
+
+var nVar3526: int;
+
+var nVar3527: int;
+
+var nVar3528: int;
+
+var nVar3529: int;
+
+var nVar3530: int;
+
+var nVar3531: int;
+
+var nVar3532: int;
+
+var nVar3533: int;
+
+var nVar3534: int;
+
+var nVar3535: int;
+
+var nVar3536: int;
+
+var nVar3537: int;
+
+var nVar3538: int;
+
+var nVar3539: int;
+
+var nVar3540: int;
+
+var nVar3541: int;
+
+var nVar3542: int;
+
+var nVar3543: int;
+
+var nVar3544: int;
+
+var nVar3545: int;
+
+var nVar3546: int;
+
+var nVar3547: int;
+
+var nVar3548: int;
+
+var nVar3549: int;
+
+var nVar3550: int;
+
+var nVar3551: int;
+
+var nVar3552: int;
+
+var nVar3553: int;
+
+var nVar3554: int;
+
+var nVar3555: int;
+
+var nVar3556: int;
+
+var nVar3557: int;
+
+var nVar3558: int;
+
+var nVar3559: int;
+
+var nVar3560: int;
+
+var nVar3561: int;
+
+var nVar3562: int;
+
+var nVar3563: int;
+
+var nVar3564: int;
+
+var nVar3565: int;
+
+var nVar3566: int;
+
+var nVar3567: int;
+
+var nVar3568: int;
+
+var nVar3569: int;
+
+var nVar3570: int;
+
+var nVar3571: int;
+
+var nVar3572: int;
+
+var nVar3573: int;
+
+var nVar3574: int;
+
+var nVar3575: int;
+
+var nVar3576: int;
+
+var nVar3577: int;
+
+var nVar3578: int;
+
+var nVar3579: int;
+
+var nVar3580: int;
+
+var nVar3581: int;
+
+var nVar3582: int;
+
+var nVar3583: int;
+
+var nVar3584: int;
+
+var nVar3585: int;
+
+var nVar3586: int;
+
+var nVar3587: int;
+
+var nVar3588: int;
+
+var nVar3589: int;
+
+var nVar3590: int;
+
+var nVar3591: int;
+
+var nVar3592: int;
+
+var nVar3593: int;
+
+var nVar3594: int;
+
+var nVar3595: int;
+
+var nVar3596: int;
+
+var nVar3597: int;
+
+var nVar3598: int;
+
+var nVar3599: int;
+
+var nVar3600: int;
+
+var nVar3601: int;
+
+var nVar3602: int;
+
+var nVar3603: int;
+
+var nVar3604: int;
+
+var nVar3605: int;
+
+var nVar3606: int;
+
+var nVar3607: int;
+
+var nVar3608: int;
+
+var nVar3609: int;
+
+var nVar3610: int;
+
+var nVar3611: int;
+
+var nVar3612: int;
+
+var nVar3613: int;
+
+var nVar3614: int;
+
+var nVar3615: int;
+
+var nVar3616: int;
+
+var nVar3617: int;
+
+var nVar3618: int;
+
+var nVar3619: int;
+
+var nVar3620: int;
+
+var nVar3621: int;
+
+var nVar3622: int;
+
+var nVar3623: int;
+
+var nVar3624: int;
+
+var nVar3625: int;
+
+var nVar3626: int;
+
+var nVar3627: int;
+
+var nVar3628: int;
+
+var nVar3629: int;
+
+var nVar3630: int;
+
+var nVar3631: int;
+
+var nVar3632: int;
+
+var nVar3633: int;
+
+var nVar3634: int;
+
+var nVar3635: int;
+
+var nVar3636: int;
+
+var nVar3637: int;
+
+var nVar3638: int;
+
+var nVar3639: int;
+
+var nVar3640: int;
+
+var nVar3641: int;
+
+var nVar3642: int;
+
+var nVar3643: int;
+
+var nVar3644: int;
+
+var nVar3645: int;
+
+var nVar3646: int;
+
+var nVar3647: int;
+
+var nVar3648: int;
+
+var nVar3649: int;
+
+var nVar3650: int;
+
+var nVar3651: int;
+
+var nVar3652: int;
+
+var nVar3653: int;
+
+var nVar3654: int;
+
+var nVar3655: int;
+
+var nVar3656: int;
+
+var nVar3657: int;
+
+var nVar3658: int;
+
+var nVar3659: int;
+
+var nVar3660: int;
+
+var nVar3661: int;
+
+var nVar3662: int;
+
+var nVar3663: int;
+
+var nVar3664: int;
+
+var nVar3665: int;
+
+var nVar3666: int;
+
+var nVar3667: int;
+
+var nVar3668: int;
+
+var nVar3669: int;
+
+var nVar3670: int;
+
+var nVar3671: int;
+
+var nVar3672: int;
+
+var nVar3673: int;
+
+var nVar3674: int;
+
+var nVar3675: int;
+
+var nVar3676: int;
+
+var nVar3677: int;
+
+var nVar3678: int;
+
+var nVar3679: int;
+
+var nVar3680: int;
+
+var nVar3681: int;
+
+var nVar3682: int;
+
+var nVar3683: int;
+
+var nVar3684: int;
+
+var nVar3685: int;
+
+var nVar3686: int;
+
+var nVar3687: int;
+
+var nVar3688: int;
+
+var nVar3689: int;
+
+var nVar3690: int;
+
+var nVar3691: int;
+
+var nVar3692: int;
+
+var nVar3693: int;
+
+var nVar3694: int;
+
+var nVar3695: int;
+
+var nVar3696: int;
+
+var nVar3697: int;
+
+var nVar3698: int;
+
+var nVar3699: int;
+
+var nVar3700: int;
+
+var nVar3701: int;
+
+var nVar3702: int;
+
+var nVar3703: int;
+
+var nVar3704: int;
+
+var nVar3705: int;
+
+var nVar3706: int;
+
+var nVar3707: int;
+
+var nVar3708: int;
+
+var nVar3709: int;
+
+var nVar3710: int;
+
+var nVar3711: int;
+
+var nVar3712: [int]int;
+
+var nVar3713: [int]int;
+
+var nVar3714: [int]int;
+
+var nVar3715: [int]int;
+
+var nVar3716: [int]int;
+
+var nVar3717: [int]int;
+
+var nVar3718: [int]int;
+
+var nVar3719: [int]int;
+
+var nVar3720: [int]int;
+
+var nVar3721: [int]int;
+
+var nVar3722: [int]int;
+
+const unique nVar3723: int;
+
+const unique nVar3724: int;
+
+const unique nVar3725: int;
+
+const unique nVar3726: int;
+
+const unique nVar3727: int;
+
+const unique nVar3728: int;
+
+const unique nVar3729: int;
+
+const unique nVar3730: int;
+
+const unique nVar3731: int;
+
+const unique nVar3732: int;
+
+const unique nVar3733: int;
+
+const unique nVar3734: int;
+
+const unique nVar3735: int;
+
+const unique nVar3736: int;
+
+const unique nVar3737: int;
+
+const unique nVar3738: int;
+
+const unique nVar3739: int;
+
+const unique nVar3740: int;
+
+const unique nVar3741: int;
+
+const unique nVar3742: int;
+
+const unique nVar3743: int;
+
+const unique nVar3744: int;
+
+const unique nVar3745: int;
+
+const unique nVar3746: int;
+
+const unique nVar3747: int;
+
+const unique nVar3748: int;
+
+const unique nVar3749: int;
+
+const unique nVar3750: int;
+
+const unique nVar3751: int;
+
+const unique nVar3752: int;
+
+const unique nVar3753: int;
+
+const unique nVar3754: int;
+
+const unique nVar3755: int;
+
+const unique nVar3756: int;
+
+const unique nVar3757: int;
+
+const unique nVar3758: int;
+
+const unique nVar3759: int;
+
+const unique nVar3760: int;
+
+const unique nVar3761: int;
+
+const unique nVar3762: int;
+
+const unique nVar3763: int;
+
+const unique nVar3764: int;
+
+const unique nVar3765: int;
+
+const unique nVar3766: int;
+
+const unique nVar3767: int;
+
+const unique nVar3768: int;
+
+const unique nVar3769: int;
+
+const unique nVar3770: int;
+
+const unique nVar3771: int;
+
+const unique nVar3772: int;
+
+const unique nVar3773: int;
+
+const unique nVar3774: int;
+
+const unique nVar3775: int;
+
+const unique nVar3776: int;
+
+const unique nVar3777: int;
+
+const unique nVar3778: int;
+
+const unique nVar3779: int;
+
+const unique nVar3780: int;
+
+const unique nVar3781: int;
+
+const unique nVar3782: int;
+
+const unique nVar3783: int;
+
+const unique nVar3784: int;
+
+const unique nVar3785: int;
+
+const unique nVar3786: int;
+
+const unique nVar3787: int;
+
+const unique nVar3788: int;
+
+const unique nVar3789: int;
+
+const unique nVar3790: int;
+
+const unique nVar3791: int;
+
+const unique nVar3792: int;
+
+const unique nVar3793: int;
+
+const unique nVar3794: int;
+
+const unique nVar3795: int;
+
+const unique nVar3796: int;
+
+const unique nVar3797: int;
+
+const unique nVar3798: int;
+
+const unique nVar3799: int;
+
+const unique nVar3800: int;
+
+const unique nVar3801: int;
+
+const unique nVar3802: int;
+
+const unique nVar3803: int;
+
+const unique nVar3804: int;
+
+const unique nVar3805: int;
+
+const unique nVar3806: int;
+
+const unique nVar3807: int;
+
+const unique nVar3808: int;
+
+const unique nVar3809: int;
+
+const unique nVar3810: int;
+
+const unique nVar3811: int;
+
+const unique nVar3812: int;
+
+const unique nVar3813: int;
+
+const unique nVar3814: int;
+
+const unique nVar3815: int;
+
+const unique nVar3816: int;
+
+const unique nVar3817: int;
+
+const unique nVar3818: int;
+
+const unique nVar3819: int;
+
+const unique nVar3820: int;
+
+const unique nVar3821: int;
+
+const unique nVar3822: int;
+
+const unique nVar3823: int;
+
+const unique nVar3824: int;
+
+const unique nVar3825: int;
+
+const unique nVar3826: int;
+
+const unique nVar3827: int;
+
+const unique nVar3828: int;
+
+const unique nVar3829: int;
+
+const unique nVar3830: int;
+
+const unique nVar3831: int;
+
+const unique nVar3832: int;
+
+const unique nVar3833: int;
+
+const unique nVar3834: int;
+
+const unique nVar3835: int;
+
+const unique nVar3836: int;
+
+const unique nVar3837: int;
+
+const unique nVar3838: int;
+
+const unique nVar3839: int;
+
+const unique nVar3840: int;
+
+const unique nVar3841: int;
+
+const unique nVar3842: int;
+
+const unique nVar3843: int;
+
+const unique nVar3844: int;
+
+const unique nVar3845: int;
+
+const unique nVar3846: int;
+
+const unique nVar3847: int;
+
+const unique nVar3848: int;
+
+const unique nVar3849: int;
+
+const unique nVar3850: int;
+
+const unique nVar3851: int;
+
+const unique nVar3852: int;
+
+const unique nVar3853: int;
+
+const unique nVar3854: int;
+
+const unique nVar3855: int;
+
+const unique nVar3856: int;
+
+const unique nVar3857: int;
+
+const unique nVar3858: int;
+
+const unique nVar3859: int;
+
+const unique nVar3860: int;
+
+const unique nVar3861: int;
+
+const unique nVar3862: int;
+
+const unique nVar3863: int;
+
+const unique nVar3864: int;
+
+const unique nVar3865: int;
+
+const unique nVar3866: int;
+
+const unique nVar3867: int;
+
+const unique nVar3868: int;
+
+const unique nVar3869: int;
+
+const unique nVar3870: int;
+
+const unique nVar3871: int;
+
+const unique nVar3872: int;
+
+const unique nVar3873: int;
+
+const unique nVar3874: int;
+
+const unique nVar3875: int;
+
+const unique nVar3876: int;
+
+const unique nVar3877: int;
+
+const unique nVar3878: int;
+
+const unique nVar3879: int;
+
+const unique nVar3880: int;
+
+const unique nVar3881: int;
+
+const unique nVar3882: int;
+
+const unique nVar3883: int;
+
+const unique nVar3884: int;
+
+const unique nVar3885: int;
+
+const unique nVar3886: int;
+
+const unique nVar3887: int;
+
+const unique nVar3888: int;
+
+const unique nVar3889: int;
+
+const unique nVar3890: int;
+
+const unique nVar3891: int;
+
+const unique nVar3892: int;
+
+const unique nVar3893: int;
+
+const unique nVar3894: int;
+
+const unique nVar3895: int;
+
+const unique nVar3896: int;
+
+const unique nVar3897: int;
+
+const unique nVar3898: int;
+
+const unique nVar3899: int;
+
+const unique nVar3900: int;
+
+const unique nVar3901: int;
+
+const unique nVar3902: int;
+
+const unique nVar3903: int;
+
+const unique nVar3904: int;
+
+const unique nVar3905: int;
+
+const unique nVar3906: int;
+
+const unique nVar3907: int;
+
+const unique nVar3908: int;
+
+const unique nVar3909: int;
+
+const unique nVar3910: int;
+
+const unique nVar3911: int;
+
+const unique nVar3912: int;
+
+const unique nVar3913: int;
+
+const unique nVar3914: int;
+
+const unique nVar3915: int;
+
+const unique nVar3916: int;
+
+const unique nVar3917: int;
+
+const unique nVar3918: int;
+
+const unique nVar3919: int;
+
+const unique nVar3920: int;
+
+const unique nVar3921: int;
+
+const unique nVar3922: int;
+
+const unique nVar3923: int;
+
+const unique nVar3924: int;
+
+const unique nVar3925: int;
+
+const unique nVar3926: int;
+
+const unique nVar3927: int;
+
+const unique nVar3928: int;
+
+const unique nVar3929: int;
+
+const unique nVar3930: int;
+
+const unique nVar3931: int;
+
+const unique nVar3932: int;
+
+const unique nVar3933: int;
+
+const unique nVar3934: int;
+
+const unique nVar3935: int;
+
+const unique nVar3936: int;
+
+const unique nVar3937: int;
+
+const unique nVar3938: int;
+
+const unique nVar3939: int;
+
+const unique nVar3940: int;
+
+const unique nVar3941: int;
+
+const unique nVar3942: int;
+
+const unique nVar3943: int;
+
+const unique nVar3944: int;
+
+const unique nVar3945: int;
+
+const unique nVar3946: int;
+
+const unique nVar3947: int;
+
+const unique nVar3948: int;
+
+const unique nVar3949: int;
+
+const unique nVar3950: int;
+
+const unique nVar3951: int;
+
+const unique nVar3952: int;
+
+const unique nVar3953: int;
+
+const unique nVar3954: int;
+
+const unique nVar3955: int;
+
+const unique nVar3956: int;
+
+const unique nVar3957: int;
+
+const unique nVar3958: int;
+
+const unique nVar3959: int;
+
+const unique nVar3960: int;
+
+const unique nVar3961: int;
+
+const unique nVar3962: int;
+
+const unique nVar3963: int;
+
+const unique nVar3964: int;
+
+const unique nVar3965: int;
+
+const unique nVar3966: int;
+
+const unique nVar3967: int;
+
+const unique nVar3968: int;
+
+const unique nVar3969: int;
+
+const unique nVar3970: int;
+
+const unique nVar3971: int;
+
+const unique nVar3972: int;
+
+const unique nVar3973: int;
+
+const unique nVar3974: int;
+
+const unique nVar3975: int;
+
+const unique nVar3976: int;
+
+const unique nVar3977: int;
+
+const unique nVar3978: int;
+
+const unique nVar3979: int;
+
+const unique nVar3980: int;
+
+const unique nVar3981: int;
+
+const unique nVar3982: int;
+
+const unique nVar3983: int;
+
+const unique nVar3984: int;
+
+const unique nVar3985: int;
+
+const unique nVar3986: int;
+
+const unique nVar3987: int;
+
+const unique nVar3988: int;
+
+const unique nVar3989: int;
+
+const unique nVar3990: int;
+
+const unique nVar3991: int;
+
+const unique nVar3992: int;
+
+const unique nVar3993: int;
+
+const unique nVar3994: int;
+
+const unique nVar3995: int;
+
+const unique nVar3996: int;
+
+const unique nVar3997: int;
+
+const unique nVar3998: int;
+
+const unique nVar3999: int;
+
+const unique nVar4000: int;
+
+const unique nVar4001: int;
+
+const unique nVar4002: int;
+
+const unique nVar4003: int;
+
+const unique nVar4004: int;
+
+const unique nVar4005: int;
+
+const unique nVar4006: int;
+
+const unique nVar4007: int;
+
+const unique nVar4008: int;
+
+const unique nVar4009: int;
+
+const unique nVar4010: int;
+
+const unique nVar4011: int;
+
+const unique nVar4012: int;
+
+const unique nVar4013: int;
+
+const unique nVar4014: int;
+
+const unique nVar4015: int;
+
+const unique nVar4016: int;
+
+const unique nVar4017: int;
+
+const unique nVar4018: int;
+
+const unique nVar4019: int;
+
+const unique nVar4020: int;
+
+const unique nVar4021: int;
+
+const unique nVar4022: int;
+
+const unique nVar4023: int;
+
+const unique nVar4024: int;
+
+const unique nVar4025: int;
+
+const unique nVar4026: int;
+
+const unique nVar4027: int;
+
+const unique nVar4028: int;
+
+const unique nVar4029: int;
+
+const unique nVar4030: int;
+
+const unique nVar4031: int;
+
+const unique nVar4032: int;
+
+const unique nVar4033: int;
+
+const unique nVar4034: int;
+
+const unique nVar4035: int;
+
+const unique nVar4036: int;
+
+const unique nVar4037: int;
+
+const unique nVar4038: int;
+
+const unique nVar4039: int;
+
+const unique nVar4040: int;
+
+const unique nVar4041: int;
+
+const unique nVar4042: int;
+
+const unique nVar4043: int;
+
+const unique nVar4044: int;
+
+const unique nVar4045: int;
+
+const unique nVar4046: int;
+
+const unique nVar4047: int;
+
+const unique nVar4048: int;
+
+const unique nVar4049: int;
+
+const unique nVar4050: int;
+
+const unique nVar4051: int;
+
+const unique nVar4052: int;
+
+const unique nVar4053: int;
+
+const unique nVar4054: int;
+
+const unique nVar4055: int;
+
+const unique nVar4056: int;
+
+const unique nVar4057: int;
+
+const unique nVar4058: int;
+
+const unique nVar4059: int;
+
+const unique nVar4060: int;
+
+const unique nVar4061: int;
+
+const unique nVar4062: int;
+
+const unique nVar4063: int;
+
+const unique nVar4064: int;
+
+const unique nVar4065: int;
+
+const unique nVar4066: int;
+
+const unique nVar4067: int;
+
+const unique nVar4068: int;
+
+const unique nVar4069: int;
+
+const unique nVar4070: int;
+
+const unique nVar4071: int;
+
+const unique nVar4072: int;
+
+const unique nVar4073: int;
+
+const unique nVar4074: int;
+
+const unique nVar4075: int;
+
+const unique nVar4076: int;
+
+const unique nVar4077: int;
+
+const unique nVar4078: int;
+
+const unique nVar4079: int;
+
+const unique nVar4080: int;
+
+const unique nVar4081: int;
+
+const unique nVar4082: int;
+
+const unique nVar4083: int;
+
+const unique nVar4084: int;
+
+const unique nVar4085: int;
+
+const unique nVar4086: int;
+
+const unique nVar4087: int;
+
+const unique nVar4088: int;
+
+const unique nVar4089: int;
+
+const unique nVar4090: int;
+
+const unique nVar4091: int;
+
+const unique nVar4092: int;
+
+const unique nVar4093: int;
+
+const unique nVar4094: int;
+
+const unique nVar4095: int;
+
+const unique nVar4096: int;
+
+const unique nVar4097: int;
+
+const unique nVar4098: int;
+
+const unique nVar4099: int;
+
+const unique nVar4100: int;
+
+const unique nVar4101: int;
+
+const unique nVar4102: int;
+
+const unique nVar4103: int;
+
+const unique nVar4104: int;
+
+const unique nVar4105: int;
+
+const unique nVar4106: int;
+
+const unique nVar4107: int;
+
+const unique nVar4108: int;
+
+const unique nVar4109: int;
+
+const unique nVar4110: int;
+
+const unique nVar4111: int;
+
+const unique nVar4112: int;
+
+const unique nVar4113: int;
+
+const unique nVar4114: int;
+
+const unique nVar4115: int;
+
+const unique nVar4116: int;
+
+const unique nVar4117: int;
+
+const unique nVar4118: int;
+
+const unique nVar4119: int;
+
+const unique nVar4120: int;
+
+const unique nVar4121: int;
+
+const unique nVar4122: int;
+
+const unique nVar4123: int;
+
+const unique nVar4124: int;
+
+const unique nVar4125: int;
+
+const unique nVar4126: int;
+
+const unique nVar4127: int;
+
+const unique nVar4128: int;
+
+const unique nVar4129: int;
+
+const unique nVar4130: int;
+
+const unique nVar4131: int;
+
+const unique nVar4132: int;
+
+const unique nVar4133: int;
+
+const unique nVar4134: int;
+
+const unique nVar4135: int;
+
+const unique nVar4136: int;
+
+const unique nVar4137: int;
+
+const unique nVar4138: int;
+
+const unique nVar4139: int;
+
+const unique nVar4140: int;
+
+const unique nVar4141: int;
+
+const unique nVar4142: int;
+
+const unique nVar4143: int;
+
+const unique nVar4144: int;
+
+const unique nVar4145: int;
+
+const unique nVar4146: int;
+
+const unique nVar4147: int;
+
+const unique nVar4148: int;
+
+const unique nVar4149: int;
+
+const unique nVar4150: int;
+
+const unique nVar4151: int;
+
+const unique nVar4152: int;
+
+const unique nVar4153: int;
+
+const unique nVar4154: int;
+
+const unique nVar4155: int;
+
+const unique nVar4156: int;
+
+const unique nVar4157: int;
+
+const unique nVar4158: int;
+
+const unique nVar4159: int;
+
+const unique nVar4160: int;
+
+const unique nVar4161: int;
+
+const unique nVar4162: int;
+
+const unique nVar4163: int;
+
+const unique nVar4164: int;
+
+const unique nVar4165: int;
+
+const unique nVar4166: int;
+
+const unique nVar4167: int;
+
+const unique nVar4168: int;
+
+const unique nVar4169: int;
+
+const unique nVar4170: int;
+
+const unique nVar4171: int;
+
+const unique nVar4172: int;
+
+const unique nVar4173: int;
+
+const unique nVar4174: int;
+
+const unique nVar4175: int;
+
+const unique nVar4176: int;
+
+const unique nVar4177: int;
+
+const unique nVar4178: int;
+
+const unique nVar4179: int;
+
+const unique nVar4180: int;
+
+const unique nVar4181: int;
+
+const unique nVar4182: int;
+
+const unique nVar4183: int;
+
+const unique nVar4184: int;
+
+const unique nVar4185: int;
+
+const unique nVar4186: int;
+
+const unique nVar4187: int;
+
+const unique nVar4188: int;
+
+const unique nVar4189: int;
+
+const unique nVar4190: int;
+
+const unique nVar4191: int;
+
+const unique nVar4192: int;
+
+const unique nVar4193: int;
+
+const unique nVar4194: int;
+
+const unique nVar4195: int;
+
+const unique nVar4196: int;
+
+const unique nVar4197: int;
+
+const unique nVar4198: int;
+
+const unique nVar4199: int;
+
+const unique nVar4200: int;
+
+const unique nVar4201: int;
+
+const unique nVar4202: int;
+
+const unique nVar4203: int;
+
+const unique nVar4204: int;
+
+const unique nVar4205: int;
+
+const unique nVar4206: int;
+
+const unique nVar4207: int;
+
+const unique nVar4208: int;
+
+const unique nVar4209: int;
+
+const unique nVar4210: int;
+
+const unique nVar4211: int;
+
+const unique nVar4212: int;
+
+const unique nVar4213: int;
+
+const unique nVar4214: int;
+
+const unique nVar4215: int;
+
+const unique nVar4216: int;
+
+const unique nVar4217: int;
+
+const unique nVar4218: int;
+
+const unique nVar4219: int;
+
+const unique nVar4220: int;
+
+const unique nVar4221: int;
+
+const unique nVar4222: int;
+
+const unique nVar4223: int;
+
+const unique nVar4224: int;
+
+const unique nVar4225: int;
+
+const unique nVar4226: int;
+
+const unique nVar4227: int;
+
+const unique nVar4228: int;
+
+const unique nVar4229: int;
+
+const unique nVar4230: int;
+
+const unique nVar4231: int;
+
+const unique nVar4232: int;
+
+const unique nVar4233: int;
+
+const unique nVar4234: int;
+
+const unique nVar4235: int;
+
+const unique nVar4236: int;
+
+const unique nVar4237: int;
+
+const unique nVar4238: int;
+
+const unique nVar4239: int;
+
+const unique nVar4240: int;
+
+const unique nVar4241: int;
+
+const unique nVar4242: int;
+
+const unique nVar4243: int;
+
+const unique nVar4244: int;
+
+const unique nVar4245: int;
+
+const unique nVar4246: int;
+
+const unique nVar4247: int;
+
+const unique nVar4248: int;
+
+const unique nVar4249: int;
+
+const unique nVar4250: int;
+
+const unique nVar4251: int;
+
+const unique nVar4252: int;
+
+const unique nVar4253: int;
+
+const unique nVar4254: int;
+
+const unique nVar4255: int;
+
+const unique nVar4256: int;
+
+const unique nVar4257: int;
+
+const unique nVar4258: int;
+
+const unique nVar4259: int;
+
+const unique nVar4260: int;
+
+const unique nVar4261: int;
+
+const unique nVar4262: int;
+
+const unique nVar4263: int;
+
+const unique nVar4264: int;
+
+const unique nVar4265: int;
+
+const unique nVar4266: int;
+
+const unique nVar4267: int;
+
+const unique nVar4268: int;
+
+const unique nVar4269: int;
+
+const unique nVar4270: int;
+
+const unique nVar4271: int;
+
+const unique nVar4272: int;
+
+const unique nVar4273: int;
+
+const unique nVar4274: int;
+
+const unique nVar4275: int;
+
+const unique nVar4276: int;
+
+const unique nVar4277: int;
+
+const unique nVar4278: int;
+
+const unique nVar4279: int;
+
+const unique nVar4280: int;
+
+const unique nVar4281: int;
+
+const unique nVar4282: int;
+
+const unique nVar4283: int;
+
+const unique nVar4284: int;
+
+const unique nVar4285: int;
+
+const unique nVar4286: int;
+
+const unique nVar4287: int;
+
+const unique nVar4288: int;
+
+const unique nVar4289: int;
+
+const unique nVar4290: int;
+
+const unique nVar4291: int;
+
+const unique nVar4292: int;
+
+const unique nVar4293: int;
+
+const unique nVar4294: int;
+
+const unique nVar4295: int;
+
+const unique nVar4296: int;
+
+const unique nVar4297: int;
+
+const unique nVar4298: int;
+
+const unique nVar4299: int;
+
+const unique nVar4300: int;
+
+const unique nVar4301: int;
+
+const unique nVar4302: int;
+
+const unique nVar4303: int;
+
+const unique nVar4304: int;
+
+const unique nVar4305: int;
+
+const unique nVar4306: int;
+
+const unique nVar4307: int;
+
+const unique nVar4308: int;
+
+const unique nVar4309: int;
+
+const unique nVar4310: int;
+
+const unique nVar4311: int;
+
+const unique nVar4312: int;
+
+const unique nVar4313: int;
+
+const unique nVar4314: int;
+
+const unique nVar4315: int;
+
+const unique nVar4316: int;
+
+const unique nVar4317: int;
+
+const unique nVar4318: int;
+
+const unique nVar4319: int;
+
+const unique nVar4320: int;
+
+const unique nVar4321: int;
+
+const unique nVar4322: int;
+
+const unique nVar4323: int;
+
+const unique nVar4324: int;
+
+const unique nVar4325: int;
+
+const unique nVar4326: int;
+
+const unique nVar4327: int;
+
+const unique nVar4328: int;
+
+const unique nVar4329: int;
+
+const unique nVar4330: int;
+
+const unique nVar4331: int;
+
+const unique nVar4332: int;
+
+const unique nVar4333: int;
+
+const unique nVar4334: int;
+
+const unique nVar4335: int;
+
+const unique nVar4336: int;
+
+const unique nVar4337: int;
+
+const unique nVar4338: int;
+
+const unique nVar4339: int;
+
+const unique nVar4340: int;
+
+const unique nVar4341: int;
+
+const unique nVar4342: int;
+
+const unique nVar4343: int;
+
+const unique nVar4344: int;
+
+const unique nVar4345: int;
+
+const unique nVar4346: int;
+
+const unique nVar4347: int;
+
+const unique nVar4348: int;
+
+const unique nVar4349: int;
+
+const unique nVar4350: int;
+
+const unique nVar4351: int;
+
+const unique nVar4352: int;
+
+const unique nVar4353: int;
+
+const unique nVar4354: int;
+
+const unique nVar4355: int;
+
+const unique nVar4356: int;
+
+const unique nVar4357: int;
+
+const unique nVar4358: int;
+
+const unique nVar4359: int;
+
+const unique nVar4360: int;
+
+const unique nVar4361: int;
+
+const unique nVar4362: int;
+
+const unique nVar4363: int;
+
+const unique nVar4364: int;
+
+const unique nVar4365: int;
+
+const unique nVar4366: int;
+
+const unique nVar4367: int;
+
+const unique nVar4368: int;
+
+const unique nVar4369: int;
+
+const unique nVar4370: int;
+
+const unique nVar4371: int;
+
+const unique nVar4372: int;
+
+const unique nVar4373: int;
+
+const unique nVar4374: int;
+
+const unique nVar4375: int;
+
+const unique nVar4376: int;
+
+const unique nVar4377: int;
+
+const unique nVar4378: int;
+
+const unique nVar4379: int;
+
+const unique nVar4380: int;
+
+const unique nVar4381: int;
+
+const unique nVar4382: int;
+
+const unique nVar4383: int;
+
+const unique nVar4384: int;
+
+const unique nVar4385: int;
+
+const unique nVar4386: int;
+
+const unique nVar4387: int;
+
+const unique nVar4388: int;
+
+const unique nVar4389: int;
+
+const unique nVar4390: int;
+
+const unique nVar4391: int;
+
+const unique nVar4392: int;
+
+const unique nVar4393: int;
+
+const unique nVar4394: int;
+
+const unique nVar4395: int;
+
+const unique nVar4396: int;
+
+const unique nVar4397: int;
+
+const unique nVar4398: int;
+
+const unique nVar4399: int;
+
+const unique nVar4400: int;
+
+const unique nVar4401: int;
+
+const unique nVar4402: int;
+
+const unique nVar4403: int;
+
+const unique nVar4404: int;
+
+const unique nVar4405: int;
+
+const unique nVar4406: int;
+
+const unique nVar4407: int;
+
+const unique nVar4408: int;
+
+const unique nVar4409: int;
+
+const unique nVar4410: int;
+
+const unique nVar4411: int;
+
+const unique nVar4412: int;
+
+const unique nVar4413: int;
+
+const unique nVar4414: int;
+
+const unique nVar4415: int;
+
+const unique nVar4416: int;
+
+const unique nVar4417: int;
+
+const unique nVar4418: int;
+
+const unique nVar4419: int;
+
+const unique nVar4420: int;
+
+const unique nVar4421: int;
+
+const unique nVar4422: int;
+
+const unique nVar4423: int;
+
+const unique nVar4424: int;
+
+const unique nVar4425: int;
+
+const unique nVar4426: int;
+
+const unique nVar4427: int;
+
+const unique nVar4428: int;
+
+const unique nVar4429: int;
+
+const unique nVar4430: int;
+
+const unique nVar4431: int;
+
+const unique nVar4432: int;
+
+const unique nVar4433: int;
+
+const unique nVar4434: int;
+
+const unique nVar4435: int;
+
+const unique nVar4436: int;
+
+const unique nVar4437: int;
+
+const unique nVar4438: int;
+
+const unique nVar4439: int;
+
+const unique nVar4440: int;
+
+const unique nVar4441: int;
+
+const unique nVar4442: int;
+
+const unique nVar4443: int;
+
+const unique nVar4444: int;
+
+const unique nVar4445: int;
+
+const unique nVar4446: int;
+
+const unique nVar4447: int;
+
+const unique nVar4448: int;
+
+const unique nVar4449: int;
+
+const unique nVar4450: int;
+
+const unique nVar4451: int;
+
+const unique nVar4452: int;
+
+const unique nVar4453: int;
+
+const unique nVar4454: int;
+
+const unique nVar4455: int;
+
+const unique nVar4456: int;
+
+const unique nVar4457: int;
+
+const unique nVar4458: int;
+
+const unique nVar4459: int;
+
+const unique nVar4460: int;
+
+const unique nVar4461: int;
+
+const unique nVar4462: int;
+
+const unique nVar4463: int;
+
+const unique nVar4464: int;
+
+const unique nVar4465: int;
+
+const unique nVar4466: int;
+
+const unique nVar4467: int;
+
+const unique nVar4468: int;
+
+const unique nVar4469: int;
+
+const unique nVar4470: int;
+
+const unique nVar4471: int;
+
+const unique nVar4472: int;
+
+const unique nVar4473: int;
+
+const unique nVar4474: int;
+
+const unique nVar4475: int;
+
+const unique nVar4476: int;
+
+const unique nVar4477: int;
+
+const unique nVar4478: int;
+
+const unique nVar4479: int;
+
+const unique nVar4480: int;
+
+const unique nVar4481: int;
+
+const unique nVar4482: int;
+
+const unique nVar4483: int;
+
+const unique nVar4484: int;
+
+const unique nVar4485: int;
+
+const unique nVar4486: int;
+
+const unique nVar4487: int;
+
+const unique nVar4488: int;
+
+const unique nVar4489: int;
+
+const unique nVar4490: int;
+
+const unique nVar4491: int;
+
+const unique nVar4492: int;
+
+const unique nVar4493: int;
+
+const unique nVar4494: int;
+
+const unique nVar4495: int;
+
+const unique nVar4496: int;
+
+const unique nVar4497: int;
+
+const unique nVar4498: int;
+
+const unique nVar4499: int;
+
+const unique nVar4500: int;
+
+const unique nVar4501: int;
+
+const unique nVar4502: int;
+
+const unique nVar4503: int;
+
+const unique nVar4504: int;
+
+const unique nVar4505: int;
+
+const unique nVar4506: int;
+
+const unique nVar4507: int;
+
+const unique nVar4508: int;
+
+const unique nVar4509: int;
+
+const unique nVar4510: int;
+
+const unique nVar4511: int;
+
+const unique nVar4512: int;
+
+const unique nVar4513: int;
+
+const unique nVar4514: int;
+
+const unique nVar4515: int;
+
+const unique nVar4516: int;
+
+const unique nVar4517: int;
+
+const unique nVar4518: int;
+
+const unique nVar4519: int;
+
+const unique nVar4520: int;
+
+const unique nVar4521: int;
+
+const unique nVar4522: int;
+
+const unique nVar4523: int;
+
+const unique nVar4524: int;
+
+const unique nVar4525: int;
+
+const unique nVar4526: int;
+
+const unique nVar4527: int;
+
+const unique nVar4528: int;
+
+const unique nVar4529: int;
+
+const unique nVar4530: int;
+
+const unique nVar4531: int;
+
+const unique nVar4532: int;
+
+const unique nVar4533: int;
+
+const unique nVar4534: int;
+
+const unique nVar4535: int;
+
+const unique nVar4536: int;
+
+const unique nVar4537: int;
+
+const unique nVar4538: int;
+
+const unique nVar4539: int;
+
+const unique nVar4540: int;
+
+const unique nVar4541: int;
+
+const unique nVar4542: int;
+
+const unique nVar4543: int;
+
+const unique nVar4544: int;
+
+const unique nVar4545: int;
+
+const unique nVar4546: int;
+
+const unique nVar4547: int;
+
+const unique nVar4548: int;
+
+const unique nVar4549: int;
+
+const unique nVar4550: int;
+
+const unique nVar4551: int;
+
+const unique nVar4552: int;
+
+const unique nVar4553: int;
+
+const unique nVar4554: int;
+
+const unique nVar4555: int;
+
+const unique nVar4556: int;
+
+const unique nVar4557: int;
+
+const unique nVar4558: int;
+
+const unique nVar4559: int;
+
+const unique nVar4560: int;
+
+const unique nVar4561: int;
+
+const unique nVar4562: int;
+
+const unique nVar4563: int;
+
+const unique nVar4564: int;
+
+const unique nVar4565: int;
+
+const unique nVar4566: int;
+
+const unique nVar4567: int;
+
+const unique nVar4568: int;
+
+const unique nVar4569: int;
+
+const unique nVar4570: int;
+
+const unique nVar4571: int;
+
+const unique nVar4572: int;
+
+const unique nVar4573: int;
+
+const unique nVar4574: int;
+
+const unique nVar4575: int;
+
+const unique nVar4576: int;
+
+const unique nVar4577: int;
+
+const unique nVar4578: int;
+
+const unique nVar4579: int;
+
+const unique nVar4580: int;
+
+const unique nVar4581: int;
+
+const unique nVar4582: int;
+
+const unique nVar4583: int;
+
+const unique nVar4584: int;
+
+const unique nVar4585: int;
+
+const unique nVar4586: int;
+
+const unique nVar4587: int;
+
+const unique nVar4588: int;
+
+const unique nVar4589: int;
+
+const unique nVar4590: int;
+
+const unique nVar4591: int;
+
+const unique nVar4592: int;
+
+const unique nVar4593: int;
+
+const unique nVar4594: int;
+
+const unique nVar4595: int;
+
+const unique nVar4596: int;
+
+const unique nVar4597: int;
+
+const unique nVar4598: int;
+
+const unique nVar4599: int;
+
+const unique nVar4600: int;
+
+const unique nVar4601: int;
+
+const unique nVar4602: int;
+
+const unique nVar4603: int;
+
+const unique nVar4604: int;
+
+const unique nVar4605: int;
+
+const unique nVar4606: int;
+
+const unique nVar4607: int;
+
+const unique nVar4608: int;
+
+const unique nVar4609: int;
+
+const unique nVar4610: int;
+
+const unique nVar4611: int;
+
+const unique nVar4612: int;
+
+const unique nVar4613: int;
+
+const unique nVar4614: int;
+
+const unique nVar4615: int;
+
+const unique nVar4616: int;
+
+const unique nVar4617: int;
+
+const unique nVar4618: int;
+
+const unique nVar4619: int;
+
+const unique nVar4620: int;
+
+const unique nVar4621: int;
+
+const unique nVar4622: int;
+
+const unique nVar4623: int;
+
+const unique nVar4624: int;
+
+const unique nVar4625: int;
+
+const unique nVar4626: int;
+
+const unique nVar4627: int;
+
+const unique nVar4628: int;
+
+const unique nVar4629: int;
+
+const unique nVar4630: int;
+
+const unique nVar4631: int;
+
+const unique nVar4632: int;
+
+const unique nVar4633: int;
+
+const unique nVar4634: int;
+
+const unique nVar4635: int;
+
+const unique nVar4636: int;
+
+const unique nVar4637: int;
+
+const unique nVar4638: int;
+
+const unique nVar4639: int;
+
+const unique nVar4640: int;
+
+const unique nVar4641: int;
+
+const unique nVar4642: int;
+
+const unique nVar4643: int;
+
+const unique nVar4644: int;
+
+const unique nVar4645: int;
+
+const unique nVar4646: int;
+
+const unique nVar4647: int;
+
+const unique nVar4648: int;
+
+const unique nVar4649: int;
+
+const unique nVar4650: int;
+
+const unique nVar4651: int;
+
+const unique nVar4652: int;
+
+const unique nVar4653: int;
+
+const unique nVar4654: int;
+
+const unique nVar4655: int;
+
+const unique nVar4656: int;
+
+const unique nVar4657: int;
diff --git a/Test/symdiff/foo.bpl b/Test/symdiff/foo.bpl
index 85d025d0..9d13ecd1 100644
--- a/Test/symdiff/foo.bpl
+++ b/Test/symdiff/foo.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie -z3multipleErrors -errorTrace:0 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Foo(x:int)
-{
- var ok:bool;
-
- ok := true;
-
- if (x == 1) {
- ok := false;
- } else if (x == 2) {
- ok := false;
- } else if (x == 3) {
- ok := false;
- }
-
- assert ok;
-
-}
+// RUN: %boogie -z3multipleErrors -errorTrace:0 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Foo(x:int)
+{
+ var ok:bool;
+
+ ok := true;
+
+ if (x == 1) {
+ ok := false;
+ } else if (x == 2) {
+ ok := false;
+ } else if (x == 3) {
+ ok := false;
+ }
+
+ assert ok;
+
+}
diff --git a/Test/test0/Arrays0.bpl b/Test/test0/Arrays0.bpl
index 6c208b1e..3f365d8f 100644
--- a/Test/test0/Arrays0.bpl
+++ b/Test/test0/Arrays0.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff NoErrors.expect "%t"
-var one: [int]int;
-var two: [int,int]int;
-var three: [int,int,int]int; // three's a crowd
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff NoErrors.expect "%t"
+var one: [int]int;
+var two: [int,int]int;
+var three: [int,int,int]int; // three's a crowd
diff --git a/Test/test0/Arrays1.bpl b/Test/test0/Arrays1.bpl
index 4e031cb8..0c9f6044 100644
--- a/Test/test0/Arrays1.bpl
+++ b/Test/test0/Arrays1.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -noVerify "%s" | %OutputCheck "%s"
-var Q: [int,int][int]int;
-
-procedure P()
-{
- var q: [int]int;
-
- start:
- // here's how to do it:
- q := Q[5,8];
- q[13] := 21;
-
- // CHECK-L: ${CHECKFILE_NAME}(${LINE:+1},11): Error: command assigns to a global variable that is not in the enclosing procedure's modifies clause: Q
- Q[5,8] := q;
-
- // not like this:
- // CHECK-L: ${CHECKFILE_NAME}(${LINE:+1},15): Error: command assigns to a global variable that is not in the enclosing procedure's modifies clause: Q
- Q[5,8][13] := 21; // error: the updated array must be an identifier
- return;
-}
-
-// CHECK-L: 2 type checking errors detected in ${CHECKFILE_NAME}
+// RUN: %boogie -noVerify "%s" | %OutputCheck "%s"
+var Q: [int,int][int]int;
+
+procedure P()
+{
+ var q: [int]int;
+
+ start:
+ // here's how to do it:
+ q := Q[5,8];
+ q[13] := 21;
+
+ // CHECK-L: ${CHECKFILE_NAME}(${LINE:+1},11): Error: command assigns to a global variable that is not in the enclosing procedure's modifies clause: Q
+ Q[5,8] := q;
+
+ // not like this:
+ // CHECK-L: ${CHECKFILE_NAME}(${LINE:+1},15): Error: command assigns to a global variable that is not in the enclosing procedure's modifies clause: Q
+ Q[5,8][13] := 21; // error: the updated array must be an identifier
+ return;
+}
+
+// CHECK-L: 2 type checking errors detected in ${CHECKFILE_NAME}
diff --git a/Test/test0/AssertVerifiedUnder0.bpl b/Test/test0/AssertVerifiedUnder0.bpl
new file mode 100644
index 00000000..1b054f68
--- /dev/null
+++ b/Test/test0/AssertVerifiedUnder0.bpl
@@ -0,0 +1,8 @@
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0()
+{
+ assert {:verified_under} true;
+ assert {:verified_under true, false} true;
+}
diff --git a/Test/test0/AssertVerifiedUnder0.bpl.expect b/Test/test0/AssertVerifiedUnder0.bpl.expect
new file mode 100644
index 00000000..b3d8177d
--- /dev/null
+++ b/Test/test0/AssertVerifiedUnder0.bpl.expect
@@ -0,0 +1,3 @@
+AssertVerifiedUnder0.bpl(6,11): Error: attribute :verified_under accepts only one argument
+AssertVerifiedUnder0.bpl(7,11): Error: attribute :verified_under accepts only one argument
+2 name resolution errors detected in AssertVerifiedUnder0.bpl
diff --git a/Test/test0/AttributeParsing.bpl b/Test/test0/AttributeParsing.bpl
index afc0a88d..7372fcc4 100644
--- a/Test/test0/AttributeParsing.bpl
+++ b/Test/test0/AttributeParsing.bpl
@@ -1,40 +1,40 @@
-// RUN: %boogie -noVerify -print:- -env:0 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type {:sourcefile "test.ssc"} T;
-
-function {:source "test.scc"} f(int) returns (int);
-
-const {:description "The largest integer value"} unique MAXINT: int;
-
-axiom {:naming "MyFavoriteAxiom"} (forall i: int :: {f(i)} f(i) == i+1);
-
-var {:description "memory"} $Heap: [ref, name]any;
-
-var {:sort_of_like_a_trigger (forall i: int :: true)} Bla: [ref, name]any;
-
-procedure {:use_impl 1} foo(x : int) returns(n : int);
-
-implementation {:id 1} foo(x : int) returns(n : int)
-{
- block1: return;
-}
-
-implementation {:id 2} foo(x : int) returns(n : int)
-{
- block1: return;
-}
-
-type ref, any, name;
-
-
-// allow \" and other backslashes rather liberally:
-
-procedure
- {:myAttribute
- "h\n\"ello\"",
- "again",
- "and\\" a\"gain\"",
- again}
-P();
-
-const again: int;
+// RUN: %boogie -noVerify -print:- -env:0 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type {:sourcefile "test.ssc"} T;
+
+function {:source "test.scc"} f(int) returns (int);
+
+const {:description "The largest integer value"} unique MAXINT: int;
+
+axiom {:naming "MyFavoriteAxiom"} (forall i: int :: {f(i)} f(i) == i+1);
+
+var {:description "memory"} $Heap: [ref, name]any;
+
+var {:sort_of_like_a_trigger (forall i: int :: true)} Bla: [ref, name]any;
+
+procedure {:use_impl 1} foo(x : int) returns(n : int);
+
+implementation {:id 1} foo(x : int) returns(n : int)
+{
+ block1: return;
+}
+
+implementation {:id 2} foo(x : int) returns(n : int)
+{
+ block1: return;
+}
+
+type ref, any, name;
+
+
+// allow \" and other backslashes rather liberally:
+
+procedure
+ {:myAttribute
+ "h\n\"ello\"",
+ "again",
+ "and\\" a\"gain\"",
+ again}
+P();
+
+const again: int;
diff --git a/Test/test0/AttributeParsingErr.bpl b/Test/test0/AttributeParsingErr.bpl
index 438f674d..9498daf1 100644
--- a/Test/test0/AttributeParsingErr.bpl
+++ b/Test/test0/AttributeParsingErr.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type {:sourcefile "test.ssc"} {1} T;
-
-function {:source "test.scc"} {1} f(int) returns (int);
-
-const {:description "The largest integer value"} {1} unique MAXINT: int;
-
-axiom {:naming "MyFavoriteAxiom"} {1} (forall i: int :: {f(i)} f(i) == i+1);
-
-var {:description "memory"} {1} $Heap: [ref, name]any;
-
-var {(forall i: int :: true)} Bla: [ref, name]any;
-
-procedure {1} {:use_impl 1} foo(x : int) returns(n : int);
-
-implementation {1} {:id 1} foo(x : int) returns(n : int)
-{
- block1: return;
-}
-
-implementation {:id 2} {1} foo(x : int) returns(n : int)
-{
- block1: return;
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type {:sourcefile "test.ssc"} {1} T;
+
+function {:source "test.scc"} {1} f(int) returns (int);
+
+const {:description "The largest integer value"} {1} unique MAXINT: int;
+
+axiom {:naming "MyFavoriteAxiom"} {1} (forall i: int :: {f(i)} f(i) == i+1);
+
+var {:description "memory"} {1} $Heap: [ref, name]any;
+
+var {(forall i: int :: true)} Bla: [ref, name]any;
+
+procedure {1} {:use_impl 1} foo(x : int) returns(n : int);
+
+implementation {1} {:id 1} foo(x : int) returns(n : int)
+{
+ block1: return;
+}
+
+implementation {:id 2} {1} foo(x : int) returns(n : int)
+{
+ block1: return;
+}
diff --git a/Test/test0/AttributeResolution.bpl b/Test/test0/AttributeResolution.bpl
index e5094932..17d79727 100644
--- a/Test/test0/AttributeResolution.bpl
+++ b/Test/test0/AttributeResolution.bpl
@@ -1,40 +1,40 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type {:sourcefile foo} T;
-
-function {:source bar} f(int) returns (int);
-
-const {:description baz} unique MAXINT: int;
-
-axiom {:naming qux} (forall i: int :: {f(ij)} f(i) == i+1);
-
-var {:description mux} $Heap: [ref, int]bool;
-
-var {:sort_of_like_a_trigger fux} Bla: [ref, int]bool;
-
-procedure {:use_impl bzzt} foo(x : int) returns(n : int);
-
-implementation {:id blt} foo(x : int) returns(n : int)
-{
- block1: return;
-}
-
-// ------ and here are various correct things
-
-
-
-const {:Correct hux0 + F(hux1)} hux0: int;
-
-function {:Correct F(hux0) + hux1} F(int) returns (int);
-
-axiom {:Correct F(hux0 + hux1)} true;
-
-var {:Correct hux0*hux1} hux1: int;
-
-procedure {:Correct hux0 - hux1} P();
-
-implementation {:Correct hux0 + hux1} {:AlsoCorrect "hello"} P()
-{
-}
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type {:sourcefile foo} T;
+
+function {:source bar} f(int) returns (int);
+
+const {:description baz} unique MAXINT: int;
+
+axiom {:naming qux} (forall i: int :: {f(ij)} f(i) == i+1);
+
+var {:description mux} $Heap: [ref, int]bool;
+
+var {:sort_of_like_a_trigger fux} Bla: [ref, int]bool;
+
+procedure {:use_impl bzzt} foo(x : int) returns(n : int);
+
+implementation {:id blt} foo(x : int) returns(n : int)
+{
+ block1: return;
+}
+
+// ------ and here are various correct things
+
+
+
+const {:Correct hux0 + F(hux1)} hux0: int;
+
+function {:Correct F(hux0) + hux1} F(int) returns (int);
+
+axiom {:Correct F(hux0 + hux1)} true;
+
+var {:Correct hux0*hux1} hux1: int;
+
+procedure {:Correct hux0 - hux1} P();
+
+implementation {:Correct hux0 + hux1} {:AlsoCorrect "hello"} P()
+{
+}
+
+type ref;
diff --git a/Test/test0/BadLabels0.bpl b/Test/test0/BadLabels0.bpl
index b3f6f896..6b02a2d1 100644
--- a/Test/test0/BadLabels0.bpl
+++ b/Test/test0/BadLabels0.bpl
@@ -1,15 +1,15 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Dup(y: int)
-{
- X:
- X: // error: duplicate label
- while (y < 100)
- {
- Y:
- }
- while (y < 1000)
- {
- Y: // error: duplicate label (labels must be unique in entire procedure body)
- }
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Dup(y: int)
+{
+ X:
+ X: // error: duplicate label
+ while (y < 100)
+ {
+ Y:
+ }
+ while (y < 1000)
+ {
+ Y: // error: duplicate label (labels must be unique in entire procedure body)
+ }
+}
diff --git a/Test/test0/BadLabels1.bpl b/Test/test0/BadLabels1.bpl
index d0b4e396..dca59b57 100644
--- a/Test/test0/BadLabels1.bpl
+++ b/Test/test0/BadLabels1.bpl
@@ -1,83 +1,83 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P0()
-{
- // these labels don't exist at all
- goto X; // error: undefined label
- goto Y; // error: undefined label
-}
-
-procedure P1(y: int)
-{
- goto X;
- while (y < 100)
- {
- X:
- }
-
- Q:
- if (y == 102) {
- A:
- goto Q;
- } else if (y == 104) {
- B:
- } else {
- C:
- goto K;
- }
-
- while (y < 1000)
- {
- K:
- goto A;
- if (y mod 2 == 0) {
- goto L;
- M:
- }
- goto K, L;
- L:
- if (*) {
- goto M;
- }
- }
- goto B;
-}
-
-
-procedure Break(n: int)
-{
- break; // error: break not inside a loop
- if (*) {
- break; // error: label-less break not inside a loop
- }
-
- A:
- if (*) {
- break A; // this is fine, since the break statement uses a label
- }
-
- B:
- assert 2 <= n;
- while (*) {
- break B; // error: B does not label a loop
- break;
- C: while (*) { assert n < 100; }
- break A; // error: A does not label a loop
- break C; // error: A does not label an enclosing loop
- F: break F; // error: F does not label an enclosing loop
- }
-
- D:
- while (*) {
- E:
- while (*) {
- if (*) {
- break;
- } else if (*) {
- if (*) { break E; }
- } else {
- break D;
- }
- }
- }
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P0()
+{
+ // these labels don't exist at all
+ goto X; // error: undefined label
+ goto Y; // error: undefined label
+}
+
+procedure P1(y: int)
+{
+ goto X;
+ while (y < 100)
+ {
+ X:
+ }
+
+ Q:
+ if (y == 102) {
+ A:
+ goto Q;
+ } else if (y == 104) {
+ B:
+ } else {
+ C:
+ goto K;
+ }
+
+ while (y < 1000)
+ {
+ K:
+ goto A;
+ if (y mod 2 == 0) {
+ goto L;
+ M:
+ }
+ goto K, L;
+ L:
+ if (*) {
+ goto M;
+ }
+ }
+ goto B;
+}
+
+
+procedure Break(n: int)
+{
+ break; // error: break not inside a loop
+ if (*) {
+ break; // error: label-less break not inside a loop
+ }
+
+ A:
+ if (*) {
+ break A; // this is fine, since the break statement uses a label
+ }
+
+ B:
+ assert 2 <= n;
+ while (*) {
+ break B; // error: B does not label a loop
+ break;
+ C: while (*) { assert n < 100; }
+ break A; // error: A does not label a loop
+ break C; // error: A does not label an enclosing loop
+ F: break F; // error: F does not label an enclosing loop
+ }
+
+ D:
+ while (*) {
+ E:
+ while (*) {
+ if (*) {
+ break;
+ } else if (*) {
+ if (*) { break E; }
+ } else {
+ break D;
+ }
+ }
+ }
+}
diff --git a/Test/test0/BadQuantifier.bpl b/Test/test0/BadQuantifier.bpl
index db704a6e..9b020642 100644
--- a/Test/test0/BadQuantifier.bpl
+++ b/Test/test0/BadQuantifier.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-function f(int) returns (bool);
-axiom (forall int x :: f(x) <== x >= 0);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+function f(int) returns (bool);
+axiom (forall int x :: f(x) <== x >= 0);
diff --git a/Test/test0/EmptyCallArgs.bpl b/Test/test0/EmptyCallArgs.bpl
index 54b374d7..062dbcdf 100644
--- a/Test/test0/EmptyCallArgs.bpl
+++ b/Test/test0/EmptyCallArgs.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff NoErrors.expect "%t"
-type C;
-
-procedure P(x:int, y:bool) returns (z:C);
-procedure Q<a>(x:int, y:a) returns (z:a);
-
-procedure CallP() {
- var x:int;
- var y:bool;
- var z:C;
-
- call z := P(x, y);
-}
-
-procedure CallQ() {
- var x:int;
- var y:bool;
- var z:bool;
-
- call z := Q(x, y);
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff NoErrors.expect "%t"
+type C;
+
+procedure P(x:int, y:bool) returns (z:C);
+procedure Q<a>(x:int, y:a) returns (z:a);
+
+procedure CallP() {
+ var x:int;
+ var y:bool;
+ var z:C;
+
+ call z := P(x, y);
+}
+
+procedure CallQ() {
+ var x:int;
+ var y:bool;
+ var z:bool;
+
+ call z := Q(x, y);
+}
diff --git a/Test/test0/LargeLiterals0.bpl b/Test/test0/LargeLiterals0.bpl
index af9c02b4..2db94141 100644
--- a/Test/test0/LargeLiterals0.bpl
+++ b/Test/test0/LargeLiterals0.bpl
@@ -1,9 +1,9 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff NoErrors.expect "%t"
-// Test to parse large integer literals
-
-axiom 1234567890987654321 == 1234567890987654321;
-
-function f(int) returns (int);
-
-axiom f(1234567890987654321) == 0;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff NoErrors.expect "%t"
+// Test to parse large integer literals
+
+axiom 1234567890987654321 == 1234567890987654321;
+
+function f(int) returns (int);
+
+axiom f(1234567890987654321) == 0;
diff --git a/Test/test0/LineParse.bpl b/Test/test0/LineParse.bpl
index 76149ff6..8de34149 100644
--- a/Test/test0/LineParse.bpl
+++ b/Test/test0/LineParse.bpl
@@ -1,14 +1,14 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-#line
-#line
-#line 0
-#line 0
-
-#dontknow what this is No, I don't well, it's an error is what it is
-
-#define ASSERT(x) {if (!(x)) { crash(); }} // error: A B C . txt(12,0)
-
-// this is line 5; an error occurs on line 6:
- #line 10 // this is not even scanned like a pragma, because the # is not in column 0
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+#line
+#line
+#line 0
+#line 0
+
+#dontknow what this is No, I don't well, it's an error is what it is
+
+#define ASSERT(x) {if (!(x)) { crash(); }} // error: A B C . txt(12,0)
+
+// this is line 5; an error occurs on line 6:
+ #line 10 // this is not even scanned like a pragma, because the # is not in column 0
+
diff --git a/Test/test0/LineResolve.bpl b/Test/test0/LineResolve.bpl
index 39bf9983..cca5c4a5 100644
--- a/Test/test0/LineResolve.bpl
+++ b/Test/test0/LineResolve.bpl
@@ -1,45 +1,45 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P() {
-var x: int;
-x :=
-
- a+ // error: LineResolve.bpl(5,1)
-
- b+ // error: LineResolve.bpl(7,2)
-#line 12
-c+ // error: LineResolve.bpl(12,0)
- d+ // error: LineResolve.bpl(13,10)
-#line 12
-e+ // error: LineResolve.bpl(12,0)
-#line 2
-f+ // error: LineResolve.bpl(2,0)
-#line 1000
-#line 900
-g+ // error: LineResolve.bpl(900,0)
-
-#line 10 Abc.txt
-
- h+ // error: Abc.txt(11,3)
-
-i+ // error: Abc.txt(13,0)
-#line 98
-
-j+ // error: Abc.txt(99,0)
-
-#line 103 c:\Users\leino\Documents\Programs\MyClass.ssc
-
-k+ // error: c:\Users\leino\Documents\Programs\MyClass.ssc(104,0)
-
-#line -58
-
-#line 12 A B C . txt
-l+ // error: A B C . txt(12,0)
-
-0;
-}
-
-#line 100 LineResolve.bpl
-procedure ResolutionTest() {
- x := 0; // error: undeclared identifier (once upon a time, this used to crash Boogie)
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P() {
+var x: int;
+x :=
+
+ a+ // error: LineResolve.bpl(5,1)
+
+ b+ // error: LineResolve.bpl(7,2)
+#line 12
+c+ // error: LineResolve.bpl(12,0)
+ d+ // error: LineResolve.bpl(13,10)
+#line 12
+e+ // error: LineResolve.bpl(12,0)
+#line 2
+f+ // error: LineResolve.bpl(2,0)
+#line 1000
+#line 900
+g+ // error: LineResolve.bpl(900,0)
+
+#line 10 Abc.txt
+
+ h+ // error: Abc.txt(11,3)
+
+i+ // error: Abc.txt(13,0)
+#line 98
+
+j+ // error: Abc.txt(99,0)
+
+#line 103 c:\Users\leino\Documents\Programs\MyClass.ssc
+
+k+ // error: c:\Users\leino\Documents\Programs\MyClass.ssc(104,0)
+
+#line -58
+
+#line 12 A B C . txt
+l+ // error: A B C . txt(12,0)
+
+0;
+}
+
+#line 100 LineResolve.bpl
+procedure ResolutionTest() {
+ x := 0; // error: undeclared identifier (once upon a time, this used to crash Boogie)
+}
diff --git a/Test/test0/MapsResolutionErrors.bpl b/Test/test0/MapsResolutionErrors.bpl
index 4cd5ff19..204cb7b0 100644
--- a/Test/test0/MapsResolutionErrors.bpl
+++ b/Test/test0/MapsResolutionErrors.bpl
@@ -1,30 +1,30 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-var m: []int;
-var p: <a>[]a;
-
-type C _;
-var bad: <a,b>[]C a; // error: b is not used
-
-function F<a>(a, int) returns (bool) { true }
-
-type Set _;
-function EmptySet<a>() returns (Set a);
-function G<a>(a, int) returns (Set a) { EmptySet() }
-
-function H<a>(int) returns (Set a);
-
-function {:inline true} K<a>(int) returns (Set a)
-{ EmptySet() }
-
-
-procedure P<a>(x: int, y: bool) returns (z: int, w: bool); // error: "a" is not used
-
-procedure Q<a>(x: int, y: bool) returns (z: int, w: a);
-procedure R<a>(x: int, y: bool) returns (z: int, w: Set a);
-procedure S<a>(x: a, y: bool) returns (z: int, w: Set a);
-
-
-function K2<a>(int) returns (Set a) // now ok
-{ EmptySet() }
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+var m: []int;
+var p: <a>[]a;
+
+type C _;
+var bad: <a,b>[]C a; // error: b is not used
+
+function F<a>(a, int) returns (bool) { true }
+
+type Set _;
+function EmptySet<a>() returns (Set a);
+function G<a>(a, int) returns (Set a) { EmptySet() }
+
+function H<a>(int) returns (Set a);
+
+function {:inline true} K<a>(int) returns (Set a)
+{ EmptySet() }
+
+
+procedure P<a>(x: int, y: bool) returns (z: int, w: bool); // error: "a" is not used
+
+procedure Q<a>(x: int, y: bool) returns (z: int, w: a);
+procedure R<a>(x: int, y: bool) returns (z: int, w: Set a);
+procedure S<a>(x: a, y: bool) returns (z: int, w: Set a);
+
+
+function K2<a>(int) returns (Set a) // now ok
+{ EmptySet() }
diff --git a/Test/test0/ModifiedBag.bpl b/Test/test0/ModifiedBag.bpl
index b3677621..5d9f2aaa 100644
--- a/Test/test0/ModifiedBag.bpl
+++ b/Test/test0/ModifiedBag.bpl
@@ -1,373 +1,373 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff NoErrors.expect "%t"
-// ----------- BEGIN PRELUDE
-
-
-type elements;
-
-type name;
-
-const $CALL: name;
-
-const $REQ: name;
-
-const $ENS: name;
-
-const $PACK: name;
-
-const $UNPACK: name;
-
-const $HEAD: name;
-
-const $THROW: name;
-
-var $RefHeap: [ref, name]ref;
-
-var $IntHeap: [ref, name]int;
-
-var $RealHeap: [ref, name]real;
-
-var $BoolHeap: [ref, name]bool;
-
-var $ArrayHeap: [ref, name]elements;
-
-const $allocated: name;
-
-const $elements: name;
-
-function $ArrayLength(ref) returns (int);
-
-function $RefArrayGet(elements, int) returns (ref);
-
-function $RefArraySet(elements, int, ref) returns (elements);
-
-function $IntArrayGet(elements, int) returns (value: int);
-
-function $IntArraySet(elements, int, int) returns (elements);
-
-function $RealArrayGet(elements, int) returns (value: real);
-
-function $RealArraySet(elements, int, real) returns (elements);
-
-function $BoolArrayGet(elements, int) returns (value: bool);
-
-function $BoolArraySet(elements, int, bool) returns (elements);
-
-function $ArrayArrayGet(elements, int) returns (value: elements);
-
-function $ArrayArraySet(elements, int, elements) returns (elements);
-
-axiom (forall A: elements, i: int, x: ref :: $RefArrayGet($RefArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> $RefArrayGet($RefArraySet(A, i, x), j) == $RefArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: int :: $IntArrayGet($IntArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: int :: i != j ==> $IntArrayGet($IntArraySet(A, i, x), j) == $IntArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: real :: $RealArrayGet($RealArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: real :: i != j ==> $RealArrayGet($RealArraySet(A, i, x), j) == $RealArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: bool :: $BoolArrayGet($BoolArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: bool :: i != j ==> $BoolArrayGet($BoolArraySet(A, i, x), j) == $BoolArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: elements :: $ArrayArrayGet($ArrayArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: elements :: i != j ==> $ArrayArrayGet($ArrayArraySet(A, i, x), j) == $ArrayArrayGet(A, j));
-
-axiom (forall a: ref :: 0 <= $ArrayLength(a));
-
-function $typeof(ref) returns (name);
-
-function $BoolIs(bool, name) returns (bool);
-
-function $RealIs(real, name) returns (bool);
-
-function $IntIs(int, name) returns (bool);
-
-const System.Int16: name;
-
-const System.Int32: name;
-
-const System.Int64: name;
-
-const System.Int16.MinValue: int;
-
-const System.Int16.MaxValue: int;
-
-const System.Int32.MinValue: int;
-
-const System.Int32.MaxValue: int;
-
-const System.Int64.MinValue: int;
-
-const System.Int64.MaxValue: int;
-
-axiom System.Int64.MinValue < System.Int32.MinValue;
-
-axiom System.Int32.MinValue < System.Int16.MinValue;
-
-axiom System.Int16.MinValue < System.Int16.MaxValue;
-
-axiom System.Int16.MaxValue < System.Int32.MaxValue;
-
-axiom System.Int32.MaxValue < System.Int64.MaxValue;
-
-axiom (forall i: int :: $IntIs(i, System.Int16) <==> System.Int16.MinValue <= i && i <= System.Int16.MaxValue);
-
-axiom (forall i: int :: $IntIs(i, System.Int32) <==> System.Int32.MinValue <= i && i <= System.Int32.MaxValue);
-
-axiom (forall i: int :: $IntIs(i, System.Int64) <==> System.Int64.MinValue <= i && i <= System.Int64.MaxValue);
-
-function $RefIs(ref, name) returns (bool);
-
-axiom (forall o: ref, T: name :: $RefIs(o, T) <==> o == null || $typeof(o) <: T);
-
-axiom (forall o: ref, T: name :: $RefIs(o, $NotNull(T)) <==> o != null && $RefIs(o, T));
-
-axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $IntArray(T)) && a != null ==> $IntIs($IntArrayGet($ArrayHeap[a, $elements], i), T));
-
-axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $RealArray(T)) && a != null ==> $RealIs($RealArrayGet($ArrayHeap[a, $elements], i), T));
-
-axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $BoolArray(T)) && a != null ==> $BoolIs($BoolArrayGet($ArrayHeap[a, $elements], i), T));
-
-axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $RefArray(T)) && a != null ==> $RefIs($RefArrayGet($ArrayHeap[a, $elements], i), T));
-
-function $NotNull(name) returns (name);
-
-function $IntArray(name) returns (name);
-
-function $BoolArray(name) returns (name);
-
-function $RealArray(name) returns (name);
-
-function $RefArray(name) returns (name);
-// ----------- END PRELUDE
-const Bag.a: name;
-
-const Bag.n: name;
-
-const Bag: name;
-
-
-
-
-
-procedure Bag..ctor$(this: ref, initialElements$in: ref);
-
-
-
-
-
-
-procedure System.Object..ctor(this: ref);
-
-
-
-procedure System.Array.CopyTo$System.Array$System.Int32(this: ref, array$in: ref, index$in: int);
-
-
-
-procedure Bag..ctor$$System.Int32$System.Int32(this: ref, initialElements$in: ref, start$in: int, howMany$in: int);
- requires 0 <= howMany$in;
- requires start$in + howMany$in <= $ArrayLength(initialElements$in);
- modifies $IntHeap, $RefHeap;
-
-
-
-implementation Bag..ctor$$System.Int32$System.Int32(this: ref, initialElements$in: ref, start$in: int, howMany$in: int)
-{
- var initialElements: ref, start: int, howMany: int, stack0i: int, stack0o: ref, stack1i: int, stack2i: int;
-
- entry:
- assume $RefIs(this, $NotNull(Bag));
- initialElements := initialElements$in;
- assume $RefIs(initialElements, $NotNull($IntArray(System.Int32)));
- start := start$in;
- assume $IntIs(start, System.Int32);
- howMany := howMany$in;
- assume $IntIs(howMany, System.Int32);
- goto block165;
-
- block165:
- call System.Object..ctor(this);
- $IntHeap[this, Bag.n] := howMany;
- stack0i := howMany;
- havoc stack0o;
- assume $BoolHeap[stack0o, $allocated] == true && $ArrayLength(stack0o) == stack0i;
- $RefHeap[this, Bag.a] := stack0o;
- stack0o := $RefHeap[this, Bag.a];
- stack1i := 0;
- stack2i := start + howMany;
- call System.Array.Copy$System.Array$System.Int32$System.Array$System.Int32$System.Int32(initialElements, start, stack0o, stack1i, stack2i);
- assert this != null;
- assert 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
- return;
-}
-
-
-
-procedure System.Array.Copy$System.Array$System.Int32$System.Array$System.Int32$System.Int32(sourceArray$in: ref, sourceIndex$in: int, destinationArray$in: ref, destinationIndex$in: int, length$in: int);
-
-
-
-procedure Bag.Add$System.Int32(this: ref, x$in: int);
- modifies $ArrayHeap, $IntHeap;
-
-
-
-implementation Bag.Add$System.Int32(this: ref, x$in: int)
-{
- var x: int, stack0i: int, stack1o: ref, stack1i: int, stack0b: bool, stack0o: ref, stack2i: int, b: ref;
-
- entry:
- assume $RefIs(this, $NotNull(Bag));
- x := x$in;
- assume $IntIs(x, System.Int32);
- assert this != null;
- assume 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
- goto block205;
-
- block205:
- stack0i := $IntHeap[this, Bag.n];
- stack1o := $RefHeap[this, Bag.a];
- stack1i := $ArrayLength(stack1o);
- stack1i := stack1i;
- stack0b := stack0i != stack1i;
- goto trueblock208, falseblock206;
-
- trueblock208:
- assume stack0b == true;
-assume false;
-// goto block208;
-return;
-
- falseblock206:
- assume stack0b == false;
- goto block206;
-
- block206:
-// assert label-([$PACK@0:3:4425:0], $IntHeap[this, Bag.n] <= 2 * $ArrayLength($RefHeap[this, Bag.a]));
- stack0i := 2;
- stack1o := $RefHeap[this, Bag.a];
- stack1i := $ArrayLength(stack1o);
- stack1i := stack1i;
- stack0i := stack0i * stack1i;
- stack0i := stack0i;
- assert $IntHeap[this, Bag.n] <= stack0i;
-// havoc b;
-// assume $BoolHeap[b, $allocated] == true && $ArrayLength(b) == stack0i;
-// assert label-([$PACK@0:3:4427:0], $IntHeap[this, Bag.n] <= $ArrayLength(b));
-// stack0o := $RefHeap[this, Bag.a];
-// stack1i := 0;
-// call [$CALL@0:7:39:0] System.Array.CopyTo$System.Array$System.Int32(stack0o, b, stack1i);
-// $RefHeap[this, Bag.a] := b;
-// assert label-([$PACK@0:3:4428:0], $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]));
-// goto block208;
- return;
-
- block208:
- stack0o := $RefHeap[this, Bag.a];
- stack1i := $IntHeap[this, Bag.n];
- $ArrayHeap[stack0o, $elements] := $IntArraySet($ArrayHeap[stack0o, $elements], stack1i, x);
- stack0o := this;
- stack1o := stack0o;
- stack1i := $IntHeap[stack1o, Bag.n];
- stack2i := 1;
- stack1i := stack1i + stack2i;
- $IntHeap[stack0o, Bag.n] := stack1i;
- assert this != null;
- assert 0 <= $IntHeap[this, Bag.n];
- assert $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
- return;
-
-}
-
-
-
-procedure Bag.ExtractMin(this: ref) returns ($result: int);
- modifies $IntHeap, $ArrayHeap;
-
-
-
-implementation Bag.ExtractMin(this: ref) returns ($result: int)
-{
- var m: int, mindex: int, i: int, stack0i: int, stack0b: bool, stack0o: ref, stack1o: ref, stack1i: int, stack2i: int, CS$00000003$00000000: int;
-
- entry:
- assume $RefIs(this, $NotNull(Bag));
- assert this != null;
- assume 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
- goto block282;
-
- block282:
- m := 2147483647;
- mindex := 0;
- i := 1;
- goto block286;
-
- block285:
- stack0i := 1;
- stack0i := i + stack0i;
- i := stack0i;
- goto block286;
-
- block286:
- stack0i := $IntHeap[this, Bag.n];
- stack0b := i <= stack0i;
- goto trueblock283, falseblock287;
-
- trueblock283:
- assume stack0b == true;
- goto block283;
-
- falseblock287:
- assume stack0b == false;
- goto block287;
-
- block283:
- stack0o := $RefHeap[this, Bag.a];
- stack0i := $IntArrayGet($ArrayHeap[stack0o, $elements], i);
- stack0b := stack0i >= m;
- goto trueblock285, falseblock284;
-
- block287:
- stack0o := this;
- stack1o := stack0o;
- stack1i := $IntHeap[stack1o, Bag.n];
- stack2i := 1;
- stack1i := stack1i - stack2i;
- $IntHeap[stack0o, Bag.n] := stack1i;
- stack0o := $RefHeap[this, Bag.a];
- stack1o := $RefHeap[this, Bag.a];
- stack2i := $IntHeap[this, Bag.n];
- stack1i := $IntArrayGet($ArrayHeap[stack1o, $elements], stack2i);
- $ArrayHeap[stack0o, $elements] := $IntArraySet($ArrayHeap[stack0o, $elements], mindex, stack1i);
- CS$00000003$00000000 := m;
- goto block289;
-
- trueblock285:
- assume stack0b == true;
- goto block285;
-
- falseblock284:
- assume stack0b == false;
- goto block284;
-
- block284:
- mindex := i;
- stack0o := $RefHeap[this, Bag.a];
- m := $IntArrayGet($ArrayHeap[stack0o, $elements], i);
- goto block285;
-
- block289:
- $result := CS$00000003$00000000;
- assert this != null;
- assert 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
- return;
-}
-
-type ref;
-const null : ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff NoErrors.expect "%t"
+// ----------- BEGIN PRELUDE
+
+
+type elements;
+
+type name;
+
+const $CALL: name;
+
+const $REQ: name;
+
+const $ENS: name;
+
+const $PACK: name;
+
+const $UNPACK: name;
+
+const $HEAD: name;
+
+const $THROW: name;
+
+var $RefHeap: [ref, name]ref;
+
+var $IntHeap: [ref, name]int;
+
+var $RealHeap: [ref, name]real;
+
+var $BoolHeap: [ref, name]bool;
+
+var $ArrayHeap: [ref, name]elements;
+
+const $allocated: name;
+
+const $elements: name;
+
+function $ArrayLength(ref) returns (int);
+
+function $RefArrayGet(elements, int) returns (ref);
+
+function $RefArraySet(elements, int, ref) returns (elements);
+
+function $IntArrayGet(elements, int) returns (value: int);
+
+function $IntArraySet(elements, int, int) returns (elements);
+
+function $RealArrayGet(elements, int) returns (value: real);
+
+function $RealArraySet(elements, int, real) returns (elements);
+
+function $BoolArrayGet(elements, int) returns (value: bool);
+
+function $BoolArraySet(elements, int, bool) returns (elements);
+
+function $ArrayArrayGet(elements, int) returns (value: elements);
+
+function $ArrayArraySet(elements, int, elements) returns (elements);
+
+axiom (forall A: elements, i: int, x: ref :: $RefArrayGet($RefArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> $RefArrayGet($RefArraySet(A, i, x), j) == $RefArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: int :: $IntArrayGet($IntArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: int :: i != j ==> $IntArrayGet($IntArraySet(A, i, x), j) == $IntArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: real :: $RealArrayGet($RealArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: real :: i != j ==> $RealArrayGet($RealArraySet(A, i, x), j) == $RealArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: bool :: $BoolArrayGet($BoolArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: bool :: i != j ==> $BoolArrayGet($BoolArraySet(A, i, x), j) == $BoolArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: elements :: $ArrayArrayGet($ArrayArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: elements :: i != j ==> $ArrayArrayGet($ArrayArraySet(A, i, x), j) == $ArrayArrayGet(A, j));
+
+axiom (forall a: ref :: 0 <= $ArrayLength(a));
+
+function $typeof(ref) returns (name);
+
+function $BoolIs(bool, name) returns (bool);
+
+function $RealIs(real, name) returns (bool);
+
+function $IntIs(int, name) returns (bool);
+
+const System.Int16: name;
+
+const System.Int32: name;
+
+const System.Int64: name;
+
+const System.Int16.MinValue: int;
+
+const System.Int16.MaxValue: int;
+
+const System.Int32.MinValue: int;
+
+const System.Int32.MaxValue: int;
+
+const System.Int64.MinValue: int;
+
+const System.Int64.MaxValue: int;
+
+axiom System.Int64.MinValue < System.Int32.MinValue;
+
+axiom System.Int32.MinValue < System.Int16.MinValue;
+
+axiom System.Int16.MinValue < System.Int16.MaxValue;
+
+axiom System.Int16.MaxValue < System.Int32.MaxValue;
+
+axiom System.Int32.MaxValue < System.Int64.MaxValue;
+
+axiom (forall i: int :: $IntIs(i, System.Int16) <==> System.Int16.MinValue <= i && i <= System.Int16.MaxValue);
+
+axiom (forall i: int :: $IntIs(i, System.Int32) <==> System.Int32.MinValue <= i && i <= System.Int32.MaxValue);
+
+axiom (forall i: int :: $IntIs(i, System.Int64) <==> System.Int64.MinValue <= i && i <= System.Int64.MaxValue);
+
+function $RefIs(ref, name) returns (bool);
+
+axiom (forall o: ref, T: name :: $RefIs(o, T) <==> o == null || $typeof(o) <: T);
+
+axiom (forall o: ref, T: name :: $RefIs(o, $NotNull(T)) <==> o != null && $RefIs(o, T));
+
+axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $IntArray(T)) && a != null ==> $IntIs($IntArrayGet($ArrayHeap[a, $elements], i), T));
+
+axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $RealArray(T)) && a != null ==> $RealIs($RealArrayGet($ArrayHeap[a, $elements], i), T));
+
+axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $BoolArray(T)) && a != null ==> $BoolIs($BoolArrayGet($ArrayHeap[a, $elements], i), T));
+
+axiom (forall a: ref, T: name, i: int, $ArrayHeap: [ref, name]elements :: $RefIs(a, $RefArray(T)) && a != null ==> $RefIs($RefArrayGet($ArrayHeap[a, $elements], i), T));
+
+function $NotNull(name) returns (name);
+
+function $IntArray(name) returns (name);
+
+function $BoolArray(name) returns (name);
+
+function $RealArray(name) returns (name);
+
+function $RefArray(name) returns (name);
+// ----------- END PRELUDE
+const Bag.a: name;
+
+const Bag.n: name;
+
+const Bag: name;
+
+
+
+
+
+procedure Bag..ctor$(this: ref, initialElements$in: ref);
+
+
+
+
+
+
+procedure System.Object..ctor(this: ref);
+
+
+
+procedure System.Array.CopyTo$System.Array$System.Int32(this: ref, array$in: ref, index$in: int);
+
+
+
+procedure Bag..ctor$$System.Int32$System.Int32(this: ref, initialElements$in: ref, start$in: int, howMany$in: int);
+ requires 0 <= howMany$in;
+ requires start$in + howMany$in <= $ArrayLength(initialElements$in);
+ modifies $IntHeap, $RefHeap;
+
+
+
+implementation Bag..ctor$$System.Int32$System.Int32(this: ref, initialElements$in: ref, start$in: int, howMany$in: int)
+{
+ var initialElements: ref, start: int, howMany: int, stack0i: int, stack0o: ref, stack1i: int, stack2i: int;
+
+ entry:
+ assume $RefIs(this, $NotNull(Bag));
+ initialElements := initialElements$in;
+ assume $RefIs(initialElements, $NotNull($IntArray(System.Int32)));
+ start := start$in;
+ assume $IntIs(start, System.Int32);
+ howMany := howMany$in;
+ assume $IntIs(howMany, System.Int32);
+ goto block165;
+
+ block165:
+ call System.Object..ctor(this);
+ $IntHeap[this, Bag.n] := howMany;
+ stack0i := howMany;
+ havoc stack0o;
+ assume $BoolHeap[stack0o, $allocated] == true && $ArrayLength(stack0o) == stack0i;
+ $RefHeap[this, Bag.a] := stack0o;
+ stack0o := $RefHeap[this, Bag.a];
+ stack1i := 0;
+ stack2i := start + howMany;
+ call System.Array.Copy$System.Array$System.Int32$System.Array$System.Int32$System.Int32(initialElements, start, stack0o, stack1i, stack2i);
+ assert this != null;
+ assert 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
+ return;
+}
+
+
+
+procedure System.Array.Copy$System.Array$System.Int32$System.Array$System.Int32$System.Int32(sourceArray$in: ref, sourceIndex$in: int, destinationArray$in: ref, destinationIndex$in: int, length$in: int);
+
+
+
+procedure Bag.Add$System.Int32(this: ref, x$in: int);
+ modifies $ArrayHeap, $IntHeap;
+
+
+
+implementation Bag.Add$System.Int32(this: ref, x$in: int)
+{
+ var x: int, stack0i: int, stack1o: ref, stack1i: int, stack0b: bool, stack0o: ref, stack2i: int, b: ref;
+
+ entry:
+ assume $RefIs(this, $NotNull(Bag));
+ x := x$in;
+ assume $IntIs(x, System.Int32);
+ assert this != null;
+ assume 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
+ goto block205;
+
+ block205:
+ stack0i := $IntHeap[this, Bag.n];
+ stack1o := $RefHeap[this, Bag.a];
+ stack1i := $ArrayLength(stack1o);
+ stack1i := stack1i;
+ stack0b := stack0i != stack1i;
+ goto trueblock208, falseblock206;
+
+ trueblock208:
+ assume stack0b == true;
+assume false;
+// goto block208;
+return;
+
+ falseblock206:
+ assume stack0b == false;
+ goto block206;
+
+ block206:
+// assert label-([$PACK@0:3:4425:0], $IntHeap[this, Bag.n] <= 2 * $ArrayLength($RefHeap[this, Bag.a]));
+ stack0i := 2;
+ stack1o := $RefHeap[this, Bag.a];
+ stack1i := $ArrayLength(stack1o);
+ stack1i := stack1i;
+ stack0i := stack0i * stack1i;
+ stack0i := stack0i;
+ assert $IntHeap[this, Bag.n] <= stack0i;
+// havoc b;
+// assume $BoolHeap[b, $allocated] == true && $ArrayLength(b) == stack0i;
+// assert label-([$PACK@0:3:4427:0], $IntHeap[this, Bag.n] <= $ArrayLength(b));
+// stack0o := $RefHeap[this, Bag.a];
+// stack1i := 0;
+// call [$CALL@0:7:39:0] System.Array.CopyTo$System.Array$System.Int32(stack0o, b, stack1i);
+// $RefHeap[this, Bag.a] := b;
+// assert label-([$PACK@0:3:4428:0], $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]));
+// goto block208;
+ return;
+
+ block208:
+ stack0o := $RefHeap[this, Bag.a];
+ stack1i := $IntHeap[this, Bag.n];
+ $ArrayHeap[stack0o, $elements] := $IntArraySet($ArrayHeap[stack0o, $elements], stack1i, x);
+ stack0o := this;
+ stack1o := stack0o;
+ stack1i := $IntHeap[stack1o, Bag.n];
+ stack2i := 1;
+ stack1i := stack1i + stack2i;
+ $IntHeap[stack0o, Bag.n] := stack1i;
+ assert this != null;
+ assert 0 <= $IntHeap[this, Bag.n];
+ assert $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
+ return;
+
+}
+
+
+
+procedure Bag.ExtractMin(this: ref) returns ($result: int);
+ modifies $IntHeap, $ArrayHeap;
+
+
+
+implementation Bag.ExtractMin(this: ref) returns ($result: int)
+{
+ var m: int, mindex: int, i: int, stack0i: int, stack0b: bool, stack0o: ref, stack1o: ref, stack1i: int, stack2i: int, CS$00000003$00000000: int;
+
+ entry:
+ assume $RefIs(this, $NotNull(Bag));
+ assert this != null;
+ assume 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
+ goto block282;
+
+ block282:
+ m := 2147483647;
+ mindex := 0;
+ i := 1;
+ goto block286;
+
+ block285:
+ stack0i := 1;
+ stack0i := i + stack0i;
+ i := stack0i;
+ goto block286;
+
+ block286:
+ stack0i := $IntHeap[this, Bag.n];
+ stack0b := i <= stack0i;
+ goto trueblock283, falseblock287;
+
+ trueblock283:
+ assume stack0b == true;
+ goto block283;
+
+ falseblock287:
+ assume stack0b == false;
+ goto block287;
+
+ block283:
+ stack0o := $RefHeap[this, Bag.a];
+ stack0i := $IntArrayGet($ArrayHeap[stack0o, $elements], i);
+ stack0b := stack0i >= m;
+ goto trueblock285, falseblock284;
+
+ block287:
+ stack0o := this;
+ stack1o := stack0o;
+ stack1i := $IntHeap[stack1o, Bag.n];
+ stack2i := 1;
+ stack1i := stack1i - stack2i;
+ $IntHeap[stack0o, Bag.n] := stack1i;
+ stack0o := $RefHeap[this, Bag.a];
+ stack1o := $RefHeap[this, Bag.a];
+ stack2i := $IntHeap[this, Bag.n];
+ stack1i := $IntArrayGet($ArrayHeap[stack1o, $elements], stack2i);
+ $ArrayHeap[stack0o, $elements] := $IntArraySet($ArrayHeap[stack0o, $elements], mindex, stack1i);
+ CS$00000003$00000000 := m;
+ goto block289;
+
+ trueblock285:
+ assume stack0b == true;
+ goto block285;
+
+ falseblock284:
+ assume stack0b == false;
+ goto block284;
+
+ block284:
+ mindex := i;
+ stack0o := $RefHeap[this, Bag.a];
+ m := $IntArrayGet($ArrayHeap[stack0o, $elements], i);
+ goto block285;
+
+ block289:
+ $result := CS$00000003$00000000;
+ assert this != null;
+ assert 0 <= $IntHeap[this, Bag.n] && $IntHeap[this, Bag.n] <= $ArrayLength($RefHeap[this, Bag.a]);
+ return;
+}
+
+type ref;
+const null : ref;
diff --git a/Test/test0/Orderings.bpl b/Test/test0/Orderings.bpl
index 0d55ed27..1cf900b6 100644
--- a/Test/test0/Orderings.bpl
+++ b/Test/test0/Orderings.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-type C;
-
-const c:int extends a;
-const d:int extends a complete;
-const e:int extends unique a, b;
-const f:int extends complete;
-
-const a:int;
-const b:int;
-
-const g:int extends x; // error: undeclared parent
-
-const c0:C;
-const c1:C extends c0, c0; // error: parent mentioned twice
-const c2:C extends c2; // error: constant as its own parent
-
-const h:int extends y; // error: variable cannot be parent
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+type C;
+
+const c:int extends a;
+const d:int extends a complete;
+const e:int extends unique a, b;
+const f:int extends complete;
+
+const a:int;
+const b:int;
+
+const g:int extends x; // error: undeclared parent
+
+const c0:C;
+const c1:C extends c0, c0; // error: parent mentioned twice
+const c2:C extends c2; // error: constant as its own parent
+
+const h:int extends y; // error: variable cannot be parent
+
var y:int; \ No newline at end of file
diff --git a/Test/test0/PrettyPrint.bpl b/Test/test0/PrettyPrint.bpl
index c79eff80..faa6bfd1 100644
--- a/Test/test0/PrettyPrint.bpl
+++ b/Test/test0/PrettyPrint.bpl
@@ -1,67 +1,67 @@
-// RUN: %boogie -pretty:0 -noVerify -printInstrumented "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const x: int;
-const y: int;
-const z: int;
-const r: real;
-const s: real;
-const t: real;
-const P: bool;
-const Q: bool;
-const R: bool;
-
-axiom x * (y + z) == x + (y * z);
-axiom (x * y) + z == (x + y) * z;
-
-axiom x * y * z == (x * (y * z));
-axiom (x * y) * (z * x) == (x * y) * z;
-
-axiom x div y div z == (x div (y div z));
-axiom (x div y) div (z div x) == (x div y) div z;
-
-axiom x + y mod z == ((y mod z) + x);
-axiom (x + y) mod z == (x mod z) + (y mod z);
-
-axiom x / y / z == (x / (y / z));
-axiom (x / y) / (z / x) == (x / y) / z;
-axiom x / s / z == (x / (s / z));
-axiom (x / s) / (z / x) == (x / s) / z;
-axiom r / s / t == (r / (s / t));
-axiom (r / s) / (t / r) == (r / s) / t;
-
-axiom ((r * s) / t) == r * s / t;
-axiom ((r / s) * t) == (r / s) * t;
-
-axiom (r * s) ** t == (r ** t) * (s ** t);
-axiom r ** (s + t) == r ** s * r ** t;
-
-axiom int(real(x)) == x;
-axiom r >= 0.0 ==> real(int(r)) <= r;
-axiom int(0e-3 - 0.02) == 0;
-axiom int(0e2 - 3.5e1) == -35;
-axiom int(27e-1) == 2;
-
-axiom x - y - z == (x - (y - z));
-axiom (x - y) - (z - x) == (x - y) - z;
-
-axiom x + y - z - x + y == 0;
-axiom ((((x + y) - z) - x) + y) == (x + (y - (z - (x + y))));
-
-axiom P ==> Q ==> R <==> (P ==> (Q ==> R));
-axiom ((P ==> Q) ==> (R ==> P)) == ((P ==> Q) ==> R);
-
-axiom P <==> Q <==> R;
-axiom P ==> Q <==> Q ==> R <==> R ==> P;
-
-axiom (P && Q) || (Q && R);
-axiom (P || Q) && (Q || R);
-axiom (P || Q) || (Q || R);
-axiom (P && Q) && (Q && R);
-
-// -------------- quantifier key-value decorations
-
-function f(int) returns (int);
-
-axiom (forall x: int :: {:xname "hello"}
- { :weight 5} {f(x+x)} {:ValueFunc f(x+1) } {f(x)*f(x)} {:nopats f(x+x+x)}
- f(f(x)) < 200);
+// RUN: %boogie -pretty:0 -noVerify -printInstrumented "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const x: int;
+const y: int;
+const z: int;
+const r: real;
+const s: real;
+const t: real;
+const P: bool;
+const Q: bool;
+const R: bool;
+
+axiom x * (y + z) == x + (y * z);
+axiom (x * y) + z == (x + y) * z;
+
+axiom x * y * z == (x * (y * z));
+axiom (x * y) * (z * x) == (x * y) * z;
+
+axiom x div y div z == (x div (y div z));
+axiom (x div y) div (z div x) == (x div y) div z;
+
+axiom x + y mod z == ((y mod z) + x);
+axiom (x + y) mod z == (x mod z) + (y mod z);
+
+axiom x / y / z == (x / (y / z));
+axiom (x / y) / (z / x) == (x / y) / z;
+axiom x / s / z == (x / (s / z));
+axiom (x / s) / (z / x) == (x / s) / z;
+axiom r / s / t == (r / (s / t));
+axiom (r / s) / (t / r) == (r / s) / t;
+
+axiom ((r * s) / t) == r * s / t;
+axiom ((r / s) * t) == (r / s) * t;
+
+axiom (r * s) ** t == (r ** t) * (s ** t);
+axiom r ** (s + t) == r ** s * r ** t;
+
+axiom int(real(x)) == x;
+axiom r >= 0.0 ==> real(int(r)) <= r;
+axiom int(0e-3 - 0.02) == 0;
+axiom int(0e2 - 3.5e1) == -35;
+axiom int(27e-1) == 2;
+
+axiom x - y - z == (x - (y - z));
+axiom (x - y) - (z - x) == (x - y) - z;
+
+axiom x + y - z - x + y == 0;
+axiom ((((x + y) - z) - x) + y) == (x + (y - (z - (x + y))));
+
+axiom P ==> Q ==> R <==> (P ==> (Q ==> R));
+axiom ((P ==> Q) ==> (R ==> P)) == ((P ==> Q) ==> R);
+
+axiom P <==> Q <==> R;
+axiom P ==> Q <==> Q ==> R <==> R ==> P;
+
+axiom (P && Q) || (Q && R);
+axiom (P || Q) && (Q || R);
+axiom (P || Q) || (Q || R);
+axiom (P && Q) && (Q && R);
+
+// -------------- quantifier key-value decorations
+
+function f(int) returns (int);
+
+axiom (forall x: int :: {:xname "hello"}
+ { :weight 5} {f(x+x)} {:ValueFunc f(x+1) } {f(x)*f(x)} {:nopats f(x+x+x)}
+ f(f(x)) < 200);
diff --git a/Test/test0/Prog0.bpl b/Test/test0/Prog0.bpl
index d9e467ec..51383660 100644
--- a/Test/test0/Prog0.bpl
+++ b/Test/test0/Prog0.bpl
@@ -1,53 +1,53 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff NoErrors.expect "%t"
-// BoogiePL Examples
-
-type elements;
-
-var x:int; var y:real; var z:ref; // Variables
-var x.3:bool; var $ar:ref; // Names can have glyphs
-
-const a, b, c:int; // Consts
-
-function f (int, int) returns (int); // Function with arity 2
-function g ( int , int) returns (int); // Function with arity 2
-function h(int,int) returns (int); // Function with arity 2
-
-function m (int) returns (int); // Function with arity 1
-function k(int) returns (int); // Function with arity 1
-
-
-axiom
- (forall x : int :: f(g(h(a,b),c),x) > 100) ;
-
-procedure p (x:int, y:ref) returns (z:int, w:[int,ref]ref, q:int);
-
-
-procedure q(x:int, y:ref) returns (z:int) // Procedure with output params
- requires x > 0; // as many req/ens/mod you want
- ensures z > 3;
- ensures old(x) == 1; // old only in ensures..
- modifies z,y,$ar;
-{
- var t, s: int;
- var r: [int,ref]ref;
-
- start: // one label per block
- t := x;
- s := t;
- z := x + t;
- call s, r,z := p(t,r[3,null]); // procedure call with mutiple returns
- goto continue, end ; // as many labels as you like
-
- continue:
- return; // ends control flow
-
- end:
- goto start;
-}
-
-procedure s(e: elements) { L: return; }
-procedure r (x:int, y:ref) returns (z:int);
-
-type ref;
-const null : ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff NoErrors.expect "%t"
+// BoogiePL Examples
+
+type elements;
+
+var x:int; var y:real; var z:ref; // Variables
+var x.3:bool; var $ar:ref; // Names can have glyphs
+
+const a, b, c:int; // Consts
+
+function f (int, int) returns (int); // Function with arity 2
+function g ( int , int) returns (int); // Function with arity 2
+function h(int,int) returns (int); // Function with arity 2
+
+function m (int) returns (int); // Function with arity 1
+function k(int) returns (int); // Function with arity 1
+
+
+axiom
+ (forall x : int :: f(g(h(a,b),c),x) > 100) ;
+
+procedure p (x:int, y:ref) returns (z:int, w:[int,ref]ref, q:int);
+
+
+procedure q(x:int, y:ref) returns (z:int) // Procedure with output params
+ requires x > 0; // as many req/ens/mod you want
+ ensures z > 3;
+ ensures old(x) == 1; // old only in ensures..
+ modifies z,y,$ar;
+{
+ var t, s: int;
+ var r: [int,ref]ref;
+
+ start: // one label per block
+ t := x;
+ s := t;
+ z := x + t;
+ call s, r,z := p(t,r[3,null]); // procedure call with mutiple returns
+ goto continue, end ; // as many labels as you like
+
+ continue:
+ return; // ends control flow
+
+ end:
+ goto start;
+}
+
+procedure s(e: elements) { L: return; }
+procedure r (x:int, y:ref) returns (z:int);
+
+type ref;
+const null : ref;
diff --git a/Test/test0/Quoting.bpl b/Test/test0/Quoting.bpl
index bf1f268e..db8ccf92 100644
--- a/Test/test0/Quoting.bpl
+++ b/Test/test0/Quoting.bpl
@@ -1,18 +1,18 @@
-// RUN: %boogie -noVerify -print:- -env:0 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function \true() returns(bool);
-
-type \procedure;
-procedure \old(\any : \procedure) returns(\var : \procedure)
-{
- var \modifies : \procedure;
- \modifies := \any;
- \var := \modifies;
-}
-
-procedure qux(a : \procedure)
-{
- var \var : \procedure; var x : bool;
- call \var := \old(a);
- x := \true();
-}
+// RUN: %boogie -noVerify -print:- -env:0 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function \true() returns(bool);
+
+type \procedure;
+procedure \old(\any : \procedure) returns(\var : \procedure)
+{
+ var \modifies : \procedure;
+ \modifies := \any;
+ \var := \modifies;
+}
+
+procedure qux(a : \procedure)
+{
+ var \var : \procedure; var x : bool;
+ call \var := \old(a);
+ x := \true();
+}
diff --git a/Test/test0/SeparateVerification0.bpl b/Test/test0/SeparateVerification0.bpl
index a5c3962a..93324437 100644
--- a/Test/test0/SeparateVerification0.bpl
+++ b/Test/test0/SeparateVerification0.bpl
@@ -1,27 +1,27 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// RUN: %boogie -noVerify "%s" "%s" > "%t"
-// RUN: %diff NoErrors.expect "%t"
-// RUN: %boogie -noVerify "%s" "%s" SeparateVerification1.bpl > "%t"
-// RUN: %diff NoErrors.expect "%t"
-// need to include this file twice for it to include all necessary declarations
-
-#if FILE_0
-const x: int;
-#else
-const y: int;
-#endif
-
-#if FILE_1
-axiom x == 12;
-procedure Q();
-#else
-axiom y == 7;
-#endif
-
-// duplicates of :extern's are fine (Boogie keeps the non-:extern or chooses arbitrarily among the :extern's)
-type {:extern} T;
-const {:extern} C: int;
-function {:extern} F(): int;
-var {:extern} n: int;
-procedure {:extern} P(inconsistentParameterButThatIsOkayBecauseTheExternIsIgnored: int);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noVerify "%s" "%s" > "%t"
+// RUN: %diff NoErrors.expect "%t"
+// RUN: %boogie -noVerify "%s" "%s" SeparateVerification1.bpl > "%t"
+// RUN: %diff NoErrors.expect "%t"
+// need to include this file twice for it to include all necessary declarations
+
+#if FILE_0
+const x: int;
+#else
+const y: int;
+#endif
+
+#if FILE_1
+axiom x == 12;
+procedure Q();
+#else
+axiom y == 7;
+#endif
+
+// duplicates of :extern's are fine (Boogie keeps the non-:extern or chooses arbitrarily among the :extern's)
+type {:extern} T;
+const {:extern} C: int;
+function {:extern} F(): int;
+var {:extern} n: int;
+procedure {:extern} P(inconsistentParameterButThatIsOkayBecauseTheExternIsIgnored: int);
diff --git a/Test/test0/SeparateVerification1.bpl b/Test/test0/SeparateVerification1.bpl
index 5956828f..d06aa043 100644
--- a/Test/test0/SeparateVerification1.bpl
+++ b/Test/test0/SeparateVerification1.bpl
@@ -1,21 +1,21 @@
-// RUN: %boogie -noVerify "%s" SeparateVerification0.bpl > "%t"
-// RUN: %diff "%s.expect" "%t"
-// to be used with SeparateVerification0.bpl
-
-// x and y are declared in SeparateVerification0.bpl
-axiom x + y <= 100;
-
-// these are declared as :extern as SeparateVerification0.bpl
-type T;
-const C: int;
-function F(): int;
-var n: int;
-procedure P();
-procedure {:extern} Q(x: int);
-
-procedure Main() {
- call P(); // note, calling the parameter-less non-extern P (an extern and a non-extern
- // declaration of the same name are usually mostly identical declarations,
- // but Boogie allows them to be different, because it ignores the extern ones)
- call Q(); // ditto
-}
+// RUN: %boogie -noVerify "%s" SeparateVerification0.bpl > "%t"
+// RUN: %diff "%s.expect" "%t"
+// to be used with SeparateVerification0.bpl
+
+// x and y are declared in SeparateVerification0.bpl
+axiom x + y <= 100;
+
+// these are declared as :extern as SeparateVerification0.bpl
+type T;
+const C: int;
+function F(): int;
+var n: int;
+procedure P();
+procedure {:extern} Q(x: int);
+
+procedure Main() {
+ call P(); // note, calling the parameter-less non-extern P (an extern and a non-extern
+ // declaration of the same name are usually mostly identical declarations,
+ // but Boogie allows them to be different, because it ignores the extern ones)
+ call Q(); // ditto
+}
diff --git a/Test/test0/Triggers0.bpl b/Test/test0/Triggers0.bpl
index 0113b992..34e89727 100644
--- a/Test/test0/Triggers0.bpl
+++ b/Test/test0/Triggers0.bpl
@@ -1,17 +1,17 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Trigger errors
-
-function f(int, int) returns (int);
-function P(int, int) returns (bool);
-
-// -------------- tests specific to pattern exclusions
-
-axiom (forall x: int ::
- {:nopats f(x,10) }
- { : nopats f(x,10) }
- f(x,10) == 3);
-
-axiom (forall x: int ::
- {:nopats f(x,10), f(x,x) } // error: a pattern exclusion can only mention one expression
- f(x,10) == 3);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Trigger errors
+
+function f(int, int) returns (int);
+function P(int, int) returns (bool);
+
+// -------------- tests specific to pattern exclusions
+
+axiom (forall x: int ::
+ {:nopats f(x,10) }
+ { : nopats f(x,10) }
+ f(x,10) == 3);
+
+axiom (forall x: int ::
+ {:nopats f(x,10), f(x,x) } // error: a pattern exclusion can only mention one expression
+ f(x,10) == 3);
diff --git a/Test/test0/Triggers1.bpl b/Test/test0/Triggers1.bpl
index 12d734be..7ab1c191 100644
--- a/Test/test0/Triggers1.bpl
+++ b/Test/test0/Triggers1.bpl
@@ -1,129 +1,129 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Trigger errors
-
-function f(int, int) returns (int);
-function P(int, int) returns (bool);
-
-axiom (forall x: int ::
- { f(x,10) && f(x,9) } // error: && not allowed
- f(x,10) == 3);
-
-axiom (forall x: int ::
- { ((((f(x,10) || f(x,9))))) } // error: || not allowed
- f(x,10) == 3);
-
-axiom (forall x: int ::
- { !f(x,10) } // error: ! not allowed
- f(x,10) == 3);
-
-axiom (forall x: int ::
- { (!f(x,10)) } // error: ! not allowed
- f(x,10) == 3);
-
-axiom (forall x: int ::
- { P(x,10) ==> P(20,x) } // error: ==> not allowed
- f(x,10) == 3);
-
-axiom (forall x: int ::
- { P(x,10) <==> P(20,x) } // error: <==> not allowed
- f(x,10) == 3);
-
-
-axiom (forall x: int ::
- { f(x,10) == 3 } // error: == not allowed
- f(x,10) == 3);
-
-axiom (forall x: int ::
- { f(x,10) < 3 } // error: < not allowed
- f(x,10) == 3);
-
-
-axiom (forall x: int ::
- { f(x,10) + f(x,x) != 3 } // yes, != is allowed
- f(x,10) == 3);
-
-axiom (forall b: bool ::
- { (forall y: int :: b) } // error: quantifiers not allowed
- b);
-
-// -------------- tests of free variables
-
-const g: int;
-
-axiom (forall x: int ::
- { false, 6 } // error: does not mention "x"
- x < x + 1);
-
-axiom (forall x: int ::
- { false, x+1, 6 } // allowed
- x < x + 1);
-
-axiom (forall x: int, y: int ::
- { x+1 } // error: does not mention "y"
- { y+1 } // error: does not mention "x"
- x < y + 1);
-
-axiom (forall x: int ::
- { g+x != 65 } // allowed
- x < x + 1);
-
-axiom (forall x: int ::
- { x } // "x" by itself is not a good trigger
- x < x + 1);
-
-//axiom (forall x: any :: // PR: removed for the time being
-// { cast(x,int) } // can't fool me, still not allowed
-// x == x );
-
-// --- multiple triggers
-
-axiom (forall x: int, y: int, z: int ::
- { x+y+z } // good
- { x+y, y+z } // also good
- { f(f(x,y),y) } // error: does not mention z
- x == x );
-
-// --- multi-triggers
-
-axiom (forall x: int, y: int, z: int ::
- { f(x,x), f(y,y), f(z,z) } // good
- f(x,y) < f(y,z) );
-
-// --- pattern exclusion
-
-axiom (forall x: int, y: int ::
- {:nopats x } // error: "x" by itself is not allowed here either
- {:nopats g } // error: "g" by itself is not allowed here either
- x < y);
-
-axiom (forall x: int, y: int ::
- {:nopats f(g,g) } // but it is okay not to mention the bound variables (in a pattern exclusion)
- x < y);
-
-// --- merging of nested quantifiers (disabled unless both have no triggers)
-
-axiom (forall x:int :: (forall y:int :: { f(x,y) } f(x,y) > 0)); // OK, but no merging - outer quantifier has no trigger
-axiom (forall x:int :: (forall y:int :: { f(x,x) } f(x,x) > 0)); // error
-axiom (forall x:int :: (forall y:int :: { f(y,y) } f(y,y) > 0)); // OK - no merging
-
-// three levels
-axiom (forall x:int :: (forall y:int :: (forall z:int :: { f(x,y) } f(y,y) > 0))); // error - z not mentioned
-axiom (forall x:int :: (forall y:int :: (forall z:int :: { f(x,z) } f(y,y) > 0))); // OK - only outer two quantifiers are merged
-//axiom (forall x:int :: (forall y:int :: (forall z:int :: f(y,y) > 0))); // OK - all three are merged
-axiom (forall x:int :: (forall y:int :: (forall z:int :: { f(x,y), f(y,z) } f(y,y) > 0))); // OK - but not a trigger for outer x,y (which get merged)
-
-// --- no free variables
-
-var h0: int;
-var h1: [ref,ref]int;
-
-axiom (forall o: ref, f: ref :: h1[o,f] // error: cannot mention free variable "h1"
- < h0); // error: cannot mention free variable "h0"
-
-const c0: int;
-const c1: [ref,ref]int;
-
-axiom (forall o: ref, f: ref :: c1[o,f] < c0);
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Trigger errors
+
+function f(int, int) returns (int);
+function P(int, int) returns (bool);
+
+axiom (forall x: int ::
+ { f(x,10) && f(x,9) } // error: && not allowed
+ f(x,10) == 3);
+
+axiom (forall x: int ::
+ { ((((f(x,10) || f(x,9))))) } // error: || not allowed
+ f(x,10) == 3);
+
+axiom (forall x: int ::
+ { !f(x,10) } // error: ! not allowed
+ f(x,10) == 3);
+
+axiom (forall x: int ::
+ { (!f(x,10)) } // error: ! not allowed
+ f(x,10) == 3);
+
+axiom (forall x: int ::
+ { P(x,10) ==> P(20,x) } // error: ==> not allowed
+ f(x,10) == 3);
+
+axiom (forall x: int ::
+ { P(x,10) <==> P(20,x) } // error: <==> not allowed
+ f(x,10) == 3);
+
+
+axiom (forall x: int ::
+ { f(x,10) == 3 } // error: == not allowed
+ f(x,10) == 3);
+
+axiom (forall x: int ::
+ { f(x,10) < 3 } // error: < not allowed
+ f(x,10) == 3);
+
+
+axiom (forall x: int ::
+ { f(x,10) + f(x,x) != 3 } // yes, != is allowed
+ f(x,10) == 3);
+
+axiom (forall b: bool ::
+ { (forall y: int :: b) } // error: quantifiers not allowed
+ b);
+
+// -------------- tests of free variables
+
+const g: int;
+
+axiom (forall x: int ::
+ { false, 6 } // error: does not mention "x"
+ x < x + 1);
+
+axiom (forall x: int ::
+ { false, x+1, 6 } // allowed
+ x < x + 1);
+
+axiom (forall x: int, y: int ::
+ { x+1 } // error: does not mention "y"
+ { y+1 } // error: does not mention "x"
+ x < y + 1);
+
+axiom (forall x: int ::
+ { g+x != 65 } // allowed
+ x < x + 1);
+
+axiom (forall x: int ::
+ { x } // "x" by itself is not a good trigger
+ x < x + 1);
+
+//axiom (forall x: any :: // PR: removed for the time being
+// { cast(x,int) } // can't fool me, still not allowed
+// x == x );
+
+// --- multiple triggers
+
+axiom (forall x: int, y: int, z: int ::
+ { x+y+z } // good
+ { x+y, y+z } // also good
+ { f(f(x,y),y) } // error: does not mention z
+ x == x );
+
+// --- multi-triggers
+
+axiom (forall x: int, y: int, z: int ::
+ { f(x,x), f(y,y), f(z,z) } // good
+ f(x,y) < f(y,z) );
+
+// --- pattern exclusion
+
+axiom (forall x: int, y: int ::
+ {:nopats x } // error: "x" by itself is not allowed here either
+ {:nopats g } // error: "g" by itself is not allowed here either
+ x < y);
+
+axiom (forall x: int, y: int ::
+ {:nopats f(g,g) } // but it is okay not to mention the bound variables (in a pattern exclusion)
+ x < y);
+
+// --- merging of nested quantifiers (disabled unless both have no triggers)
+
+axiom (forall x:int :: (forall y:int :: { f(x,y) } f(x,y) > 0)); // OK, but no merging - outer quantifier has no trigger
+axiom (forall x:int :: (forall y:int :: { f(x,x) } f(x,x) > 0)); // error
+axiom (forall x:int :: (forall y:int :: { f(y,y) } f(y,y) > 0)); // OK - no merging
+
+// three levels
+axiom (forall x:int :: (forall y:int :: (forall z:int :: { f(x,y) } f(y,y) > 0))); // error - z not mentioned
+axiom (forall x:int :: (forall y:int :: (forall z:int :: { f(x,z) } f(y,y) > 0))); // OK - only outer two quantifiers are merged
+//axiom (forall x:int :: (forall y:int :: (forall z:int :: f(y,y) > 0))); // OK - all three are merged
+axiom (forall x:int :: (forall y:int :: (forall z:int :: { f(x,y), f(y,z) } f(y,y) > 0))); // OK - but not a trigger for outer x,y (which get merged)
+
+// --- no free variables
+
+var h0: int;
+var h1: [ref,ref]int;
+
+axiom (forall o: ref, f: ref :: h1[o,f] // error: cannot mention free variable "h1"
+ < h0); // error: cannot mention free variable "h0"
+
+const c0: int;
+const c1: [ref,ref]int;
+
+axiom (forall o: ref, f: ref :: c1[o,f] < c0);
+
+type ref;
diff --git a/Test/test0/Types0.bpl b/Test/test0/Types0.bpl
index 62385acf..d606951b 100644
--- a/Test/test0/Types0.bpl
+++ b/Test/test0/Types0.bpl
@@ -1,10 +1,10 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type T, U;
-type V;
-
-function f([U,V]T, int) returns (U);
-function g(x: [U,V]T, y: int) returns (z: U);
-function h([U,V]T: int, y: int) returns (z: U); // parse error
-function k(T: int, y: int) returns (U: [any]int);
-function l(x) returns (int); // resolve error
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type T, U;
+type V;
+
+function f([U,V]T, int) returns (U);
+function g(x: [U,V]T, y: int) returns (z: U);
+function h([U,V]T: int, y: int) returns (z: U); // parse error
+function k(T: int, y: int) returns (U: [any]int);
+function l(x) returns (int); // resolve error
diff --git a/Test/test0/Types1.bpl b/Test/test0/Types1.bpl
index 75bb6178..2580fe40 100644
--- a/Test/test0/Types1.bpl
+++ b/Test/test0/Types1.bpl
@@ -1,9 +1,9 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type T, U;
-type V;
-
-function h(T) returns (int);
-function k(x:T) returns (int);
-function l(x) returns (int); // resolve error
-function m(x, x) returns (bool); // resolve error
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type T, U;
+type V;
+
+function h(T) returns (int);
+function k(x:T) returns (int);
+function l(x) returns (int); // resolve error
+function m(x, x) returns (bool); // resolve error
diff --git a/Test/test0/WhereParsing.bpl b/Test/test0/WhereParsing.bpl
index e75a1c81..e6a0ab4e 100644
--- a/Test/test0/WhereParsing.bpl
+++ b/Test/test0/WhereParsing.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const x: int;
-
-function R(int) returns (bool);
-function Even(int) returns (bool);
-
-var y: int where R(y);
-var g: int where g == 12;
-
-procedure P(x: int where x > 0) returns (y: int where y < 0);
- requires x < 100;
- modifies g;
- ensures -100 < y;
-
-implementation P(xx: int where xx > 0) // error: where not allowed in implementation decl
- returns (yy: int where yy < 0) // error: where not allowed in implementation decl
-{
- var a: int where a == b; // b is not allowed to be mentioned here, but this test is only
- var b: int; // for parsing, so no complaint will be issued
-
- start:
- a := xx;
- call b := P(a);
- yy := b;
- return;
-}
-
-procedure {:myProcAttr} Attr(x: int, {:myParamAttr x, y} y: bool) returns (z: int, {:retAttr x} w: bool)
-{
-}
-
-procedure BadAttrs(x: int);
-implementation BadAttrs({:myParamAttr} x: int) // error: attributes not allowed in implementation decl
-{
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const x: int;
+
+function R(int) returns (bool);
+function Even(int) returns (bool);
+
+var y: int where R(y);
+var g: int where g == 12;
+
+procedure P(x: int where x > 0) returns (y: int where y < 0);
+ requires x < 100;
+ modifies g;
+ ensures -100 < y;
+
+implementation P(xx: int where xx > 0) // error: where not allowed in implementation decl
+ returns (yy: int where yy < 0) // error: where not allowed in implementation decl
+{
+ var a: int where a == b; // b is not allowed to be mentioned here, but this test is only
+ var b: int; // for parsing, so no complaint will be issued
+
+ start:
+ a := xx;
+ call b := P(a);
+ yy := b;
+ return;
+}
+
+procedure {:myProcAttr} Attr(x: int, {:myParamAttr x, y} y: bool) returns (z: int, {:retAttr x} w: bool)
+{
+}
+
+procedure BadAttrs(x: int);
+implementation BadAttrs({:myParamAttr} x: int) // error: attributes not allowed in implementation decl
+{
+}
diff --git a/Test/test0/WhereParsing0.bpl b/Test/test0/WhereParsing0.bpl
index da26bc5e..9e9579df 100644
--- a/Test/test0/WhereParsing0.bpl
+++ b/Test/test0/WhereParsing0.bpl
@@ -1,34 +1,34 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const x: int;
-
-function R(int) returns (bool);
-function Even(int) returns (bool);
-
-var y: int where R(y);
-var g: int where g == 12;
-
-procedure P(x: int where x > 0) returns (y: int where y < 0);
- requires x < 100;
- modifies g;
- ensures -100 < y;
-
-procedure Q(x: int where x > 0) returns (y: int where y < 0)
- requires x < 100;
- modifies g;
- ensures (forall t: int where Even(t) :: -100 < y + t) || // error: where not allowed in quant
- (exists t: int where Even(t) :: -100 < y + t); // error: where not allowed in quant
-{
- var a: int;
- var b: int;
-
- start:
- a := x;
- call b := P(a);
- y := b;
- return;
-}
-
-axiom (forall yu: bool, {:myAttr} x: int :: x < 100);
-axiom (forall {:myAttr} x: int :: x < 100);
-axiom (forall <T> {:myAttr} x: T :: x == x);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const x: int;
+
+function R(int) returns (bool);
+function Even(int) returns (bool);
+
+var y: int where R(y);
+var g: int where g == 12;
+
+procedure P(x: int where x > 0) returns (y: int where y < 0);
+ requires x < 100;
+ modifies g;
+ ensures -100 < y;
+
+procedure Q(x: int where x > 0) returns (y: int where y < 0)
+ requires x < 100;
+ modifies g;
+ ensures (forall t: int where Even(t) :: -100 < y + t) || // error: where not allowed in quant
+ (exists t: int where Even(t) :: -100 < y + t); // error: where not allowed in quant
+{
+ var a: int;
+ var b: int;
+
+ start:
+ a := x;
+ call b := P(a);
+ y := b;
+ return;
+}
+
+axiom (forall yu: bool, {:myAttr} x: int :: x < 100);
+axiom (forall {:myAttr} x: int :: x < 100);
+axiom (forall <T> {:myAttr} x: T :: x == x);
diff --git a/Test/test0/WhereParsing1.bpl b/Test/test0/WhereParsing1.bpl
index b65f7ce9..2e9d4b37 100644
--- a/Test/test0/WhereParsing1.bpl
+++ b/Test/test0/WhereParsing1.bpl
@@ -1,17 +1,17 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const x: int;
-
-function R(int) returns (bool);
-function Even(int) returns (bool);
-
-var y: int where R(y);
-var g: int where g == 12;
-
-procedure P(x: int where x > 0) returns (y: int where y < 0);
- requires x < 100;
- modifies g;
- ensures -100 < y;
-
-function f(a: int, b: int where b < 0) // error: where not allowed among function parameters
- returns (bool);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const x: int;
+
+function R(int) returns (bool);
+function Even(int) returns (bool);
+
+var y: int where R(y);
+var g: int where g == 12;
+
+procedure P(x: int where x > 0) returns (y: int where y < 0);
+ requires x < 100;
+ modifies g;
+ ensures -100 < y;
+
+function f(a: int, b: int where b < 0) // error: where not allowed among function parameters
+ returns (bool);
diff --git a/Test/test0/WhereParsing2.bpl b/Test/test0/WhereParsing2.bpl
index e7a0bd62..192b1720 100644
--- a/Test/test0/WhereParsing2.bpl
+++ b/Test/test0/WhereParsing2.bpl
@@ -1,4 +1,4 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const x: int where x < 0; // error: where clauses not allowed on constants
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const x: int where x < 0; // error: where clauses not allowed on constants
+
diff --git a/Test/test0/WhereResolution.bpl b/Test/test0/WhereResolution.bpl
index fac91dc8..9083d1fa 100644
--- a/Test/test0/WhereResolution.bpl
+++ b/Test/test0/WhereResolution.bpl
@@ -1,64 +1,64 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type double;
-
-function R(int) returns (bool);
-function K(double, bool) returns (bool);
-
-var y: int where R(y);
-var g: int where h ==> g == 12;
-var h: bool where g < 100;
-var k: double where K(k, h);
-
-procedure P(x: int where x > 0) returns (y: int where y < 0);
- requires x < 100;
- modifies g;
- ensures -100 < y;
-
-implementation P(xx: int) returns (yy: int)
-{
- var a: int where a == 10;
- var b: int where a == b && b < g;
-
- start:
- a := xx;
- call b := P(a);
- yy := b;
- return;
-}
-
-procedure Q(w: int where x < w || x > alpha/*error: out-parameter alpha is not in scope*/, x: int where x + w > 0)
- returns (v: bool where v,
- y: int where x + y + z < 0,
- z: int where g == 12,
- alpha: ref where old(alpha) != null, // error: cannot use old in where clause
- beta: ref where (forall r: ref :: r == beta ==> beta == null))
- requires x < 100;
- modifies g;
- ensures -100 < y;
-{
- var a: int;
- var b: int;
-
- start:
- a := x;
- call b := P(a);
- y := b;
- return;
-}
-
-const SomeConstant: ref;
-
-procedure Cnst(n: ref where n != SomeConstant) returns (SomeConstant: int)
-{
- var m: ref where m != SomeConstant;
- var k: int where k != SomeConstant;
- var r: ref where (forall abc: ref :: abc == SomeConstant);
- var b: bool;
- start:
- b := (forall l: ref :: l == SomeConstant);
- return;
-}
-
-type ref;
-const null : ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type double;
+
+function R(int) returns (bool);
+function K(double, bool) returns (bool);
+
+var y: int where R(y);
+var g: int where h ==> g == 12;
+var h: bool where g < 100;
+var k: double where K(k, h);
+
+procedure P(x: int where x > 0) returns (y: int where y < 0);
+ requires x < 100;
+ modifies g;
+ ensures -100 < y;
+
+implementation P(xx: int) returns (yy: int)
+{
+ var a: int where a == 10;
+ var b: int where a == b && b < g;
+
+ start:
+ a := xx;
+ call b := P(a);
+ yy := b;
+ return;
+}
+
+procedure Q(w: int where x < w || x > alpha/*error: out-parameter alpha is not in scope*/, x: int where x + w > 0)
+ returns (v: bool where v,
+ y: int where x + y + z < 0,
+ z: int where g == 12,
+ alpha: ref where old(alpha) != null, // error: cannot use old in where clause
+ beta: ref where (forall r: ref :: r == beta ==> beta == null))
+ requires x < 100;
+ modifies g;
+ ensures -100 < y;
+{
+ var a: int;
+ var b: int;
+
+ start:
+ a := x;
+ call b := P(a);
+ y := b;
+ return;
+}
+
+const SomeConstant: ref;
+
+procedure Cnst(n: ref where n != SomeConstant) returns (SomeConstant: int)
+{
+ var m: ref where m != SomeConstant;
+ var k: int where k != SomeConstant;
+ var r: ref where (forall abc: ref :: abc == SomeConstant);
+ var b: bool;
+ start:
+ b := (forall l: ref :: l == SomeConstant);
+ return;
+}
+
+type ref;
+const null : ref;
diff --git a/Test/test1/Arrays.bpl b/Test/test1/Arrays.bpl
index cb21e4ed..2013a69c 100644
--- a/Test/test1/Arrays.bpl
+++ b/Test/test1/Arrays.bpl
@@ -1,226 +1,226 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var one: [int]int;
-var two: [int, int]int;
-
-procedure Good0(x: int, y: int)
- requires one[x] == two[x,y];
- modifies one, two;
-{
- start:
- one[x] := two[x,y];
- two[x,y] := one[x];
- return;
-}
-
-procedure Bad0(x: int, y: int)
- requires one[x,y] == 7;
- requires two[x] == 8;
- modifies one, two;
-{
- start:
- one[x,y] := 10;
- two[x] := 11;
- return;
-}
-
-var A: [int]bool;
-var B: [bool, ref]int;
-
-procedure Good1(x: int, b: bool, o: ref)
- requires A[x] && B[b,o] == 18;
- modifies A, B;
-{
- start:
- A[x] := true;
- B[b,o] := 19;
- A[100] := false;
- B[false,null] := 70;
- return;
-}
-
-procedure Bad1(x: int, b: bool, o: ref)
- requires A[b];
- requires A[x] == 7;
- requires B[x,x] < 12;
- requires B[b,b] == B[o,o];
- requires B[null,5];
- requires B[7,7] == A[7];
- modifies A, B;
-{
- start:
- A[b] := true;
- B[3,14] := null;
- A[A[x]] := 9;
- B[false,false] := 70;
- return;
-}
-
-var M: [ [int,int]bool, [name]name ]int;
-var Q: [int,int][int]int;
-var R: [int][int,int]int;
-
-procedure Good2(k: [int,int]bool, l: [name]name) returns (n: int)
- modifies M, Q, R;
-{
- var m: [ [int,int]bool, [name]name ]int;
- var p: [int,int]bool;
- var q: [int]int;
- var qq: [int,int][int]int;
- var r: [int,int]int;
-
- start:
- n := M[k,l];
- m := M;
- p := k;
- p[5,8] := true;
- m[p,l] := 13;
- M := m;
- goto next;
-
- next:
- qq := Q;
- q := Q[13,21];
- n := n + Q[34,55][89];
- R[1] := R[2];
- n := n + R[1][2,3];
- Q[144,233] := q;
- goto deepUpdate;
-
- deepUpdate:
- // To effectively do:
- // Q[5,8][13] := 21;
- // do:
- q := Q[5,8];
- q[13] := 21;
- Q[5,8] := q;
- return;
-}
-
-const Sven: name;
-const Mia: name;
-const Tryggve: name;
-const Gunnel: name;
-
-procedure Bad2(k: [int,int]bool, l: [name]name) returns (n: int)
- modifies M, Q, R;
-{
- var m: [ [int,int]bool, [name]name ]int;
- var p: [int,int]bool;
- var q: [int]int;
- var qq: [int,int][int]int;
- var qqx: [int,int][name]int;
-
- start:
- n := M[Sven,l];
- m := p;
- p := l[Mia];
- p[5,8] := Tryggve;
- m[p,Gunnel] := 13;
- M := qq;
- goto next;
-
- next:
- qq := Q; // okay
- q := Q[13];
- n := n - Q[89][34,55];
- Q[true,233] := q;
- qqx := qq;
- Q := qqx;
- qqx := qqx; // okay
- Q := Q; // okay
- n := n + Q[34,55][144,169];
- R[1,2] := 0;
- R[1] := R[2,3];
- n := n + R[1][2];
- n := n + R[1,2];
- return;
-}
-
-type MyType;
-var S0: bool;
-var S1: [ref]bool;
-var S2: [ref,int]bool;
-var S3: [[ref,int]bool,MyType]MyType;
-var S4: <a>[int,a]bool;
-var S5: [int,int]bool;
-var S6: [any,any]bool;
-var S7: [int,any]any;
-var S8: [any]bool;
-
-function Sf(any) returns (bool);
-
-procedure SubtypesGood(a: any)
- modifies S0;
-{
- var t: MyType;
- var b: bool;
-
- start:
- S0 := S1[null]; // bool := bool
- S0 := S2[null,0]; // bool := bool
- t := S3[S2,t];
- goto next;
- next:
- b := S4[4,a];
- b := S4[5,null]; // any := ref
- b := S4[6,S4]; // any := [int,any]bool
- b := Sf(S5);
- return;
-}
-
-procedure SubtypesBad()
- modifies S4,S5,S6;
- modifies S8;
-{
- start:
- S4 := S4;
- S4 := S5; // no
- S5 := S4; // no
- S4 := S6; // no
- S6 := S4; // no
- S8 := S1; // no
- return;
-}
-
-// ----------------------------------------------------
-
-var ArrayA: [int]bool;
-var ArrayB: <a>[a]bool;
-
-procedure ArrayP(x: int, y: any)
- requires ArrayA[x];
- requires ArrayA[y]; // error
- requires ArrayB[x];
- requires ArrayB[y];
- modifies ArrayA, ArrayB;
-{
- start:
- ArrayA[x] := true;
- ArrayA[y] := true; // error
- ArrayB[x] := true;
- ArrayB[y] := true;
- return;
-}
-
-// ----------------------------------------------------
-
-procedure IntMethod(p: any) returns (r: int);
-procedure AnyMethod(p: int) returns (r: any);
-
-procedure IntMethodCaller()
-{
- var x: any, y: int;
- entry:
- call x := AnyMethod(y); // types are exact
- call x := IntMethod(y); // error: type mismatch for out-parameter
- x := y;
- y := x; // error: cannot assign any to int
- call y := IntMethod(x); // types are exact
- call y := AnyMethod(x); // type error on both in-parameter and out-parameter
- return;
-}
-
-
-type ref, any, name;
-const null : ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var one: [int]int;
+var two: [int, int]int;
+
+procedure Good0(x: int, y: int)
+ requires one[x] == two[x,y];
+ modifies one, two;
+{
+ start:
+ one[x] := two[x,y];
+ two[x,y] := one[x];
+ return;
+}
+
+procedure Bad0(x: int, y: int)
+ requires one[x,y] == 7;
+ requires two[x] == 8;
+ modifies one, two;
+{
+ start:
+ one[x,y] := 10;
+ two[x] := 11;
+ return;
+}
+
+var A: [int]bool;
+var B: [bool, ref]int;
+
+procedure Good1(x: int, b: bool, o: ref)
+ requires A[x] && B[b,o] == 18;
+ modifies A, B;
+{
+ start:
+ A[x] := true;
+ B[b,o] := 19;
+ A[100] := false;
+ B[false,null] := 70;
+ return;
+}
+
+procedure Bad1(x: int, b: bool, o: ref)
+ requires A[b];
+ requires A[x] == 7;
+ requires B[x,x] < 12;
+ requires B[b,b] == B[o,o];
+ requires B[null,5];
+ requires B[7,7] == A[7];
+ modifies A, B;
+{
+ start:
+ A[b] := true;
+ B[3,14] := null;
+ A[A[x]] := 9;
+ B[false,false] := 70;
+ return;
+}
+
+var M: [ [int,int]bool, [name]name ]int;
+var Q: [int,int][int]int;
+var R: [int][int,int]int;
+
+procedure Good2(k: [int,int]bool, l: [name]name) returns (n: int)
+ modifies M, Q, R;
+{
+ var m: [ [int,int]bool, [name]name ]int;
+ var p: [int,int]bool;
+ var q: [int]int;
+ var qq: [int,int][int]int;
+ var r: [int,int]int;
+
+ start:
+ n := M[k,l];
+ m := M;
+ p := k;
+ p[5,8] := true;
+ m[p,l] := 13;
+ M := m;
+ goto next;
+
+ next:
+ qq := Q;
+ q := Q[13,21];
+ n := n + Q[34,55][89];
+ R[1] := R[2];
+ n := n + R[1][2,3];
+ Q[144,233] := q;
+ goto deepUpdate;
+
+ deepUpdate:
+ // To effectively do:
+ // Q[5,8][13] := 21;
+ // do:
+ q := Q[5,8];
+ q[13] := 21;
+ Q[5,8] := q;
+ return;
+}
+
+const Sven: name;
+const Mia: name;
+const Tryggve: name;
+const Gunnel: name;
+
+procedure Bad2(k: [int,int]bool, l: [name]name) returns (n: int)
+ modifies M, Q, R;
+{
+ var m: [ [int,int]bool, [name]name ]int;
+ var p: [int,int]bool;
+ var q: [int]int;
+ var qq: [int,int][int]int;
+ var qqx: [int,int][name]int;
+
+ start:
+ n := M[Sven,l];
+ m := p;
+ p := l[Mia];
+ p[5,8] := Tryggve;
+ m[p,Gunnel] := 13;
+ M := qq;
+ goto next;
+
+ next:
+ qq := Q; // okay
+ q := Q[13];
+ n := n - Q[89][34,55];
+ Q[true,233] := q;
+ qqx := qq;
+ Q := qqx;
+ qqx := qqx; // okay
+ Q := Q; // okay
+ n := n + Q[34,55][144,169];
+ R[1,2] := 0;
+ R[1] := R[2,3];
+ n := n + R[1][2];
+ n := n + R[1,2];
+ return;
+}
+
+type MyType;
+var S0: bool;
+var S1: [ref]bool;
+var S2: [ref,int]bool;
+var S3: [[ref,int]bool,MyType]MyType;
+var S4: <a>[int,a]bool;
+var S5: [int,int]bool;
+var S6: [any,any]bool;
+var S7: [int,any]any;
+var S8: [any]bool;
+
+function Sf(any) returns (bool);
+
+procedure SubtypesGood(a: any)
+ modifies S0;
+{
+ var t: MyType;
+ var b: bool;
+
+ start:
+ S0 := S1[null]; // bool := bool
+ S0 := S2[null,0]; // bool := bool
+ t := S3[S2,t];
+ goto next;
+ next:
+ b := S4[4,a];
+ b := S4[5,null]; // any := ref
+ b := S4[6,S4]; // any := [int,any]bool
+ b := Sf(S5);
+ return;
+}
+
+procedure SubtypesBad()
+ modifies S4,S5,S6;
+ modifies S8;
+{
+ start:
+ S4 := S4;
+ S4 := S5; // no
+ S5 := S4; // no
+ S4 := S6; // no
+ S6 := S4; // no
+ S8 := S1; // no
+ return;
+}
+
+// ----------------------------------------------------
+
+var ArrayA: [int]bool;
+var ArrayB: <a>[a]bool;
+
+procedure ArrayP(x: int, y: any)
+ requires ArrayA[x];
+ requires ArrayA[y]; // error
+ requires ArrayB[x];
+ requires ArrayB[y];
+ modifies ArrayA, ArrayB;
+{
+ start:
+ ArrayA[x] := true;
+ ArrayA[y] := true; // error
+ ArrayB[x] := true;
+ ArrayB[y] := true;
+ return;
+}
+
+// ----------------------------------------------------
+
+procedure IntMethod(p: any) returns (r: int);
+procedure AnyMethod(p: int) returns (r: any);
+
+procedure IntMethodCaller()
+{
+ var x: any, y: int;
+ entry:
+ call x := AnyMethod(y); // types are exact
+ call x := IntMethod(y); // error: type mismatch for out-parameter
+ x := y;
+ y := x; // error: cannot assign any to int
+ call y := IntMethod(x); // types are exact
+ call y := AnyMethod(x); // type error on both in-parameter and out-parameter
+ return;
+}
+
+
+type ref, any, name;
+const null : ref;
diff --git a/Test/test1/AssertVerifiedUnder0.bpl b/Test/test1/AssertVerifiedUnder0.bpl
new file mode 100644
index 00000000..e419a5ef
--- /dev/null
+++ b/Test/test1/AssertVerifiedUnder0.bpl
@@ -0,0 +1,8 @@
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0()
+{
+ assert {:verified_under 4} true;
+ assert {:verified_under 3.0} true;
+}
diff --git a/Test/test1/AssertVerifiedUnder0.bpl.expect b/Test/test1/AssertVerifiedUnder0.bpl.expect
new file mode 100644
index 00000000..6d3c04cd
--- /dev/null
+++ b/Test/test1/AssertVerifiedUnder0.bpl.expect
@@ -0,0 +1,3 @@
+AssertVerifiedUnder0.bpl(6,11): Error: attribute :verified_under accepts only one argument of type bool
+AssertVerifiedUnder0.bpl(7,11): Error: attribute :verified_under accepts only one argument of type bool
+2 type checking errors detected in AssertVerifiedUnder0.bpl
diff --git a/Test/test1/AssumptionVariables0.bpl b/Test/test1/AssumptionVariables0.bpl
index 7046ea59..7ebd3d24 100644
--- a/Test/test1/AssumptionVariables0.bpl
+++ b/Test/test1/AssumptionVariables0.bpl
@@ -1,57 +1,57 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Test0()
-{
- var {:assumption} a0: bool where a0; // error
-}
-
-
-procedure Test1()
-{
- var {:assumption} a0: bool;
-
- a0 := a0 && true;
-}
-
-
-procedure Test2()
-{
- var {:assumption} a0: bool;
-
- a0 := true; // error
-}
-
-
-procedure Test3()
-{
- var {:assumption} a0: bool;
- var {:assumption} a1: bool;
-
- a0 := a1 && true; // error
-}
-
-
-procedure Test4()
-{
- var {:assumption} a0: bool;
-
- a0 := a0 && true;
- a0 := a0 && true; // error
-}
-
-
-procedure Test5()
- modifies a0;
-{
- a0 := a0 && true;
-}
-
-
-var {:assumption} a0: bool;
-
-
-procedure Test6()
- modifies a0;
-{
- a0 := a0 && true; // error
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Test0()
+{
+ var {:assumption} a0: bool where a0; // error
+}
+
+
+procedure Test1()
+{
+ var {:assumption} a0: bool;
+
+ a0 := a0 && true;
+}
+
+
+procedure Test2()
+{
+ var {:assumption} a0: bool;
+
+ a0 := true; // error
+}
+
+
+procedure Test3()
+{
+ var {:assumption} a0: bool;
+ var {:assumption} a1: bool;
+
+ a0 := a1 && true; // error
+}
+
+
+procedure Test4()
+{
+ var {:assumption} a0: bool;
+
+ a0 := a0 && true;
+ a0 := a0 && true; // error
+}
+
+
+procedure Test5()
+ modifies a0;
+{
+ a0 := a0 && true;
+}
+
+
+var {:assumption} a0: bool;
+
+
+procedure Test6()
+ modifies a0;
+{
+ a0 := a0 && true; // error
+}
diff --git a/Test/test1/AssumptionVariables1.bpl b/Test/test1/AssumptionVariables1.bpl
index 3125650c..918a9b63 100644
--- a/Test/test1/AssumptionVariables1.bpl
+++ b/Test/test1/AssumptionVariables1.bpl
@@ -1,6 +1,6 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Test0()
-{
- var {:assumption} a0: int; // error
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Test0()
+{
+ var {:assumption} a0: int; // error
+}
diff --git a/Test/test1/AssumptionVariables1.bpl.expect b/Test/test1/AssumptionVariables1.bpl.expect
index 9e894bf9..badc18b3 100644
--- a/Test/test1/AssumptionVariables1.bpl.expect
+++ b/Test/test1/AssumptionVariables1.bpl.expect
@@ -1,2 +1,2 @@
-AssumptionVariables1.bpl(5,22): Error: assumption variable must be of type 'bool'
-1 type checking errors detected in AssumptionVariables1.bpl
+AssumptionVariables1.bpl(5,22): Error: assumption variable must be of type 'bool'
+1 type checking errors detected in AssumptionVariables1.bpl
diff --git a/Test/test1/AttributeTyping.bpl b/Test/test1/AttributeTyping.bpl
index bcd98feb..713f464c 100644
--- a/Test/test1/AttributeTyping.bpl
+++ b/Test/test1/AttributeTyping.bpl
@@ -1,38 +1,38 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-const {:Incorrect pux0 ++ F0(pux1)} pux0: int;
-
-function {:Incorrect F0(pux0 < 0) + pux1} F0(int) returns (int);
-
-axiom {:Incorrect F0(pux0 == pux1)} true;
-
-var {:Incorrect pux0 && pux1} pux1: int;
-
-procedure {:Incorrect !(pux0 - pux1)} P();
-
-implementation {:Incorrect pux0 ==> pux1} P()
-{
-}
-
-// ------ and here are various correct things
-
-
-
-const {:Correct hux0 + F1(hux1)} hux0: int;
-
-function {:Correct F1(hux0) + hux1} F1(int) returns (int);
-
-axiom {:Correct F1(hux0 + hux1)} true;
-
-var {:Correct hux0*hux1} hux1: int;
-
-procedure {:Correct hux0 - hux1} H();
-
-implementation {:Correct hux0 + hux1} {:AlsoCorrect "hello"} H()
-{
-}
-
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+const {:Incorrect pux0 ++ F0(pux1)} pux0: int;
+
+function {:Incorrect F0(pux0 < 0) + pux1} F0(int) returns (int);
+
+axiom {:Incorrect F0(pux0 == pux1)} true;
+
+var {:Incorrect pux0 && pux1} pux1: int;
+
+procedure {:Incorrect !(pux0 - pux1)} P();
+
+implementation {:Incorrect pux0 ==> pux1} P()
+{
+}
+
+// ------ and here are various correct things
+
+
+
+const {:Correct hux0 + F1(hux1)} hux0: int;
+
+function {:Correct F1(hux0) + hux1} F1(int) returns (int);
+
+axiom {:Correct F1(hux0 + hux1)} true;
+
+var {:Correct hux0*hux1} hux1: int;
+
+procedure {:Correct hux0 - hux1} H();
+
+implementation {:Correct hux0 + hux1} {:AlsoCorrect "hello"} H()
+{
+}
+
+
type any; \ No newline at end of file
diff --git a/Test/test1/EmptyCallArgs.bpl b/Test/test1/EmptyCallArgs.bpl
index 8f5ae31f..3c2aa177 100644
--- a/Test/test1/EmptyCallArgs.bpl
+++ b/Test/test1/EmptyCallArgs.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type C;
-
-procedure P(x:int, y:bool) returns (z:C);
-procedure Q<a>(x:int, y:a) returns (z:a);
-
-procedure CallP() {
- var x:int;
- var y:bool;
- var z:C;
-
- call z := P(x, y);
-}
-
-procedure CallQ() {
- var x:int;
- var y:bool;
- var z:bool;
-
- call x := Q(x, y); // type error
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type C;
+
+procedure P(x:int, y:bool) returns (z:C);
+procedure Q<a>(x:int, y:a) returns (z:a);
+
+procedure CallP() {
+ var x:int;
+ var y:bool;
+ var z:C;
+
+ call z := P(x, y);
+}
+
+procedure CallQ() {
+ var x:int;
+ var y:bool;
+ var z:bool;
+
+ call x := Q(x, y); // type error
} \ No newline at end of file
diff --git a/Test/test1/Family.bpl b/Test/test1/Family.bpl
index fec96332..0ec5fb20 100644
--- a/Test/test1/Family.bpl
+++ b/Test/test1/Family.bpl
@@ -1,49 +1,49 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type T;
-
-var Heap: <x>[ref,Field x]x;
-
-function IsHeap(<x>[ref,Field x]x) returns (bool);
-
-const alloc: Field bool;
-const C.x: Field int;
-
-axiom (forall h: <x>[ref,Field x]x, f: Field ref, o: ref :: IsHeap(h) && o != null ==> h[h[o,f], alloc]);
-
-procedure P(this: ref) returns (r: int)
- modifies Heap;
-{
- start:
- r := Heap[this, C.x];
- Heap[this, C.x] := r;
- return;
-}
-
-// -----------------
-
-procedure R(this: ref)
- modifies Heap;
-{
- var field: any, refField: Field ref, yField: Field y, anyField: Field any;
- var b: bool, a: any;
-
- start:
- b := Heap[this, C.x]; // type error
- Heap[this, C.x] := true; // type error
- Heap[this, refField] := this;
- Heap[this, yField] := 2; // type error
- Heap[this, field] := a; // type error
- Heap[this, field] := b; // type error
- Heap[this, anyField] := a;
- Heap[this, anyField] := b;
- Heap[this, anyField] := anyField;
- Heap[this, anyField] := yField;
- Heap[this, anyField] := field;
- return;
-}
-
-type Field a;
-type y;
-type ref, any;
-const null : ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type T;
+
+var Heap: <x>[ref,Field x]x;
+
+function IsHeap(<x>[ref,Field x]x) returns (bool);
+
+const alloc: Field bool;
+const C.x: Field int;
+
+axiom (forall h: <x>[ref,Field x]x, f: Field ref, o: ref :: IsHeap(h) && o != null ==> h[h[o,f], alloc]);
+
+procedure P(this: ref) returns (r: int)
+ modifies Heap;
+{
+ start:
+ r := Heap[this, C.x];
+ Heap[this, C.x] := r;
+ return;
+}
+
+// -----------------
+
+procedure R(this: ref)
+ modifies Heap;
+{
+ var field: any, refField: Field ref, yField: Field y, anyField: Field any;
+ var b: bool, a: any;
+
+ start:
+ b := Heap[this, C.x]; // type error
+ Heap[this, C.x] := true; // type error
+ Heap[this, refField] := this;
+ Heap[this, yField] := 2; // type error
+ Heap[this, field] := a; // type error
+ Heap[this, field] := b; // type error
+ Heap[this, anyField] := a;
+ Heap[this, anyField] := b;
+ Heap[this, anyField] := anyField;
+ Heap[this, anyField] := yField;
+ Heap[this, anyField] := field;
+ return;
+}
+
+type Field a;
+type y;
+type ref, any;
+const null : ref;
diff --git a/Test/test1/Frame0.bpl b/Test/test1/Frame0.bpl
index 6155fc27..a3ef6138 100644
--- a/Test/test1/Frame0.bpl
+++ b/Test/test1/Frame0.bpl
@@ -1,17 +1,17 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g0: int;
-var g1: int;
-
-var h0: [ref, name]any;
-var h1: [ref, name]any;
-
-const X: name;
-
-procedure P(a: ref, hh: [ref, name]any) returns (b: int, hout: [ref, name]any);
- modifies a; // in-parameters are not mutable
- modifies h1, g0;
- modifies b; // out-parameters are not allowed explicitly in modifies clause
-
-
-type ref, name, any;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g0: int;
+var g1: int;
+
+var h0: [ref, name]any;
+var h1: [ref, name]any;
+
+const X: name;
+
+procedure P(a: ref, hh: [ref, name]any) returns (b: int, hout: [ref, name]any);
+ modifies a; // in-parameters are not mutable
+ modifies h1, g0;
+ modifies b; // out-parameters are not allowed explicitly in modifies clause
+
+
+type ref, name, any;
diff --git a/Test/test1/Frame1.bpl b/Test/test1/Frame1.bpl
index 2ec70270..5e637660 100644
--- a/Test/test1/Frame1.bpl
+++ b/Test/test1/Frame1.bpl
@@ -1,99 +1,99 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g0: int;
-var g1: int;
-
-var h0: [ref, name]int;
-var h1: [ref, name]int;
-
-const X: name;
-
-procedure P(a: ref, hh: [ref, name]int) returns (b: int, hout: [ref, name]any);
- modifies h1, g0;
-
-implementation P(a: ref, hh: [ref, name]int)
- returns (b: int, hout: [ref, name]any) {
- start:
- g0 := 5;
- g1 := 6; // error: g1 is not in modifies clause
- a := null; // error: in-parameters are not mutable
- b := 12;
- goto next;
- next:
- havoc g0;
- havoc g1; // error: g1 is not in modifies clause
- havoc a; // error: in-parameters are not mutable
- havoc b;
- goto more;
- more:
- hh[a,X] := 101; // error: in-parameter (hh) is not mutable
- h0[a,X] := 102; // error: h0 is not in modifies clause
- h1[a,X] := 103;
- hh := h0; // error: in-parameter is not mutable
- h0 := h1; // error: h0 is not in modifies clause
- h1 := hh;
- havoc hh; // error: in-parameter is not mutable
- havoc h0; // error: h0 is not in modifies clause
- havoc h1;
- return;
-}
-
-procedure PX();
- modifies h1, g0;
-
-procedure PY()
- modifies h1, g0;
-{
- start:
- call PX();
- call PY();
- return;
-}
-
-procedure PZ()
- modifies h1;
-{
- start:
- call PX(); // error: PX has larger frame than PZ
- return;
-}
-
-procedure Q() returns (x: int, y: int, h: [ref, name]int)
-{
- start:
- return;
-}
-
-procedure QCallerBad()
-{
- start:
- call g0, g1, h0 := Q();
- return;
-}
-
-procedure QCallerGood()
- modifies g0, h0;
-{
- var t: int;
-
- start:
- call t, g0, h0 := Q();
- return;
-}
-
-procedure MismatchedTypes(x: int);
-
-implementation MismatchedTypes(x: bool) // error
-{
- start:
- return;
-}
-implementation MismatchedTypes(y: bool) // error (this time with a different name for the formal)
-{
- start:
- return;
-}
-
-
-type ref, name, any;
-const null : ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g0: int;
+var g1: int;
+
+var h0: [ref, name]int;
+var h1: [ref, name]int;
+
+const X: name;
+
+procedure P(a: ref, hh: [ref, name]int) returns (b: int, hout: [ref, name]any);
+ modifies h1, g0;
+
+implementation P(a: ref, hh: [ref, name]int)
+ returns (b: int, hout: [ref, name]any) {
+ start:
+ g0 := 5;
+ g1 := 6; // error: g1 is not in modifies clause
+ a := null; // error: in-parameters are not mutable
+ b := 12;
+ goto next;
+ next:
+ havoc g0;
+ havoc g1; // error: g1 is not in modifies clause
+ havoc a; // error: in-parameters are not mutable
+ havoc b;
+ goto more;
+ more:
+ hh[a,X] := 101; // error: in-parameter (hh) is not mutable
+ h0[a,X] := 102; // error: h0 is not in modifies clause
+ h1[a,X] := 103;
+ hh := h0; // error: in-parameter is not mutable
+ h0 := h1; // error: h0 is not in modifies clause
+ h1 := hh;
+ havoc hh; // error: in-parameter is not mutable
+ havoc h0; // error: h0 is not in modifies clause
+ havoc h1;
+ return;
+}
+
+procedure PX();
+ modifies h1, g0;
+
+procedure PY()
+ modifies h1, g0;
+{
+ start:
+ call PX();
+ call PY();
+ return;
+}
+
+procedure PZ()
+ modifies h1;
+{
+ start:
+ call PX(); // error: PX has larger frame than PZ
+ return;
+}
+
+procedure Q() returns (x: int, y: int, h: [ref, name]int)
+{
+ start:
+ return;
+}
+
+procedure QCallerBad()
+{
+ start:
+ call g0, g1, h0 := Q();
+ return;
+}
+
+procedure QCallerGood()
+ modifies g0, h0;
+{
+ var t: int;
+
+ start:
+ call t, g0, h0 := Q();
+ return;
+}
+
+procedure MismatchedTypes(x: int);
+
+implementation MismatchedTypes(x: bool) // error
+{
+ start:
+ return;
+}
+implementation MismatchedTypes(y: bool) // error (this time with a different name for the formal)
+{
+ start:
+ return;
+}
+
+
+type ref, name, any;
+const null : ref;
diff --git a/Test/test1/FunBody.bpl b/Test/test1/FunBody.bpl
index fc566681..caaf06f5 100644
--- a/Test/test1/FunBody.bpl
+++ b/Test/test1/FunBody.bpl
@@ -1,15 +1,15 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-function g0<beta>(x:beta) returns (beta);
-function g1<beta>() returns (beta);
-
-function {:inline true} f1() returns (int) { 13 }
-function {:inline true} f2() returns (int) { true } // wrong type
-function {:inline true} f3<alpha>(x:alpha) returns (alpha) { g0(x) }
-function {:inline true} f4<alpha>(x:alpha) returns (alpha) { g0(5) } // wrong type
-function {:inline true} f5<alpha>() returns (alpha) { g1() }
-function {:inline true} f6<alpha>() returns (alpha) { g1():int } // wrong type
-
-
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+function g0<beta>(x:beta) returns (beta);
+function g1<beta>() returns (beta);
+
+function {:inline true} f1() returns (int) { 13 }
+function {:inline true} f2() returns (int) { true } // wrong type
+function {:inline true} f3<alpha>(x:alpha) returns (alpha) { g0(x) }
+function {:inline true} f4<alpha>(x:alpha) returns (alpha) { g0(5) } // wrong type
+function {:inline true} f5<alpha>() returns (alpha) { g1() }
+function {:inline true} f6<alpha>() returns (alpha) { g1():int } // wrong type
+
+
+
diff --git a/Test/test1/IfThenElse0.bpl b/Test/test1/IfThenElse0.bpl
index 19918827..65ae65f6 100644
--- a/Test/test1/IfThenElse0.bpl
+++ b/Test/test1/IfThenElse0.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
procedure foo()
{
var b:bool, i:int;
diff --git a/Test/test1/IntReal.bpl b/Test/test1/IntReal.bpl
index 962aadf3..7b3d77e5 100644
--- a/Test/test1/IntReal.bpl
+++ b/Test/test1/IntReal.bpl
@@ -1,50 +1,50 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const i: int;
-const r: real;
-
-axiom i == 0;
-axiom i >= 0.0; // type error
-axiom i <= 0.0e0; // type error
-axiom i < 0.0e-0; // type error
-axiom i > 0.0e20; // type error
-
-axiom -i == r; // type error
-axiom i + r == 0.0; // type error
-axiom i - r == 0.0; // type error
-axiom i * r == 0.0; // type error
-axiom i div r == 0; // type error
-axiom i mod r == 0; // type error
-
-axiom i / i == 0; // type error
-axiom i / i == 0.0;
-axiom i / r == 0.0;
-axiom r / i == 0.0;
-axiom r / r == 0.0;
-
-axiom i ** r == 0.0; // type error
-axiom r ** r == 0.0;
-
-axiom real(i) == 0.0;
-axiom real(i) == i; // type error
-axiom int(r) == 0;
-axiom int(r) == r; // type error
-axiom int(real(i)) == i;
-axiom real(int(r)) == r;
-axiom int(int(r)) == i; // type error
-axiom real(real(i)) == r; // type error
-
-axiom i == 0;
-axiom real(i) >= 0.0;
-axiom real(i) <= 0.0e0;
-axiom r < 0.0e-0;
-axiom r > 0.0e20;
-
-axiom -r == real(i);
-axiom real(i) + r == 0.0;
-axiom r - real(0) == 0.0;
-axiom r * r == 0.0;
-axiom r div 0 == 0; // type error
-axiom r mod 0 == 0; // type error
-
-axiom r ** r == 0.0;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const i: int;
+const r: real;
+
+axiom i == 0;
+axiom i >= 0.0; // type error
+axiom i <= 0.0e0; // type error
+axiom i < 0.0e-0; // type error
+axiom i > 0.0e20; // type error
+
+axiom -i == r; // type error
+axiom i + r == 0.0; // type error
+axiom i - r == 0.0; // type error
+axiom i * r == 0.0; // type error
+axiom i div r == 0; // type error
+axiom i mod r == 0; // type error
+
+axiom i / i == 0; // type error
+axiom i / i == 0.0;
+axiom i / r == 0.0;
+axiom r / i == 0.0;
+axiom r / r == 0.0;
+
+axiom i ** r == 0.0; // type error
+axiom r ** r == 0.0;
+
+axiom real(i) == 0.0;
+axiom real(i) == i; // type error
+axiom int(r) == 0;
+axiom int(r) == r; // type error
+axiom int(real(i)) == i;
+axiom real(int(r)) == r;
+axiom int(int(r)) == i; // type error
+axiom real(real(i)) == r; // type error
+
+axiom i == 0;
+axiom real(i) >= 0.0;
+axiom real(i) <= 0.0e0;
+axiom r < 0.0e-0;
+axiom r > 0.0e20;
+
+axiom -r == real(i);
+axiom real(i) + r == 0.0;
+axiom r - real(0) == 0.0;
+axiom r * r == 0.0;
+axiom r div 0 == 0; // type error
+axiom r mod 0 == 0; // type error
+
+axiom r ** r == 0.0;
diff --git a/Test/test1/Lambda.bpl b/Test/test1/Lambda.bpl
index 016bece7..5136a1e5 100644
--- a/Test/test1/Lambda.bpl
+++ b/Test/test1/Lambda.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
procedure foo()
{
var a: [int,int]int;
diff --git a/Test/test1/LogicalExprs.bpl b/Test/test1/LogicalExprs.bpl
index 02174a32..a5d3f987 100644
--- a/Test/test1/LogicalExprs.bpl
+++ b/Test/test1/LogicalExprs.bpl
@@ -1,8 +1,8 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const P: bool;
-const Q: bool;
-
-axiom (forall x: int :: x < 0);
-axiom Q ==> P;
-axiom (forall x: int :: x < 0) ==> P;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const P: bool;
+const Q: bool;
+
+axiom (forall x: int :: x < 0);
+axiom Q ==> P;
+axiom (forall x: int :: x < 0) ==> P;
diff --git a/Test/test1/MapsTypeErrors.bpl b/Test/test1/MapsTypeErrors.bpl
index bedb02ec..4b1bfec6 100644
--- a/Test/test1/MapsTypeErrors.bpl
+++ b/Test/test1/MapsTypeErrors.bpl
@@ -1,129 +1,129 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var m: []int;
-var p: <a>[]a;
-
-type ref;
-const null: ref;
-
-procedure P()
- requires m[] == 5;
- modifies m;
- modifies p;
- ensures m[] == 30;
- ensures p[] + p[] == 24;
- ensures p[] == null;
-{
- m[] := 12;
- p[] := 12;
- p[] := true;
- assert p[] == m[];
- assert p[];
- m := m[:= 30];
- p := p[:=null];
-}
-
-procedure A()
-{
- m[] := 12; // error: illegal assignment, because m is not in modifies clause
-}
-
-procedure B()
- modifies m;
-{
- m := m[]; // type error
- m[] := m; // type error
-}
-
-procedure C()
- modifies m;
-{
- m[] := true; // type error
-}
-
-// -----
-
-procedure Genrc<T>(x: int) returns (t: T);
-
-procedure Caller() returns (b: bool)
-{
- var y: ref;
- call y := Genrc(5);
- b := y == null;
-}
-
-// ----
-
-type Field a;
-type HeapType = <a>[ref, Field a]a;
-const F0: Field int;
-const F1: Field bool;
-const alloc: Field bool;
-var Heap: HeapType;
-
-function LiberalEqual<a,b>(a, b) returns (bool);
-function StrictEqual<a>(a,a) returns (bool);
-function IntEqual(Field int,Field int) returns (bool);
-
-procedure FrameCondition(this: ref)
- requires F0 == F1; // error
- requires LiberalEqual(F0, F1);
- requires StrictEqual(F0, F0);
- requires StrictEqual(F0, F1); // error
- modifies Heap;
- ensures (forall<alpha> o: ref, f: Field alpha ::
- Heap[o,f] == old(Heap)[o,f] ||
- !old(Heap)[o,alloc] ||
- (o == this && StrictEqual(f, F0)) || // error: f and F0 don't have the same type
- (o == this && LiberalEqual(f, f)) ||
- (o == this && IntEqual(F0, f)) // error: f and F0 don't have the same type
- );
-{
-}
-
-// ---- bitvector inference ----
-
-function Gimmie<T>() returns (T);
-function Same<T>(T,T) returns (T);
-procedure ConsumeAnything<T>(t: T);
-
-procedure Bvs(x: bv31, y: int) returns (a: bv32)
-{
- a := x[50 : 18]; // error
- a := y[50 : 18]; // error
-
- a := Gimmie(); // fine, this can be made to have at least 32 bits
- a := Gimmie()[50 : 18]; // fine, result is always 32 bits and Gimmie() can be made to have at least 50 bits
- a := Gimmie()[50 : 17]; // error, result is 33 bits (but there's nothing wrong with Gimmie())
-
- a := Gimmie() ++ Gimmie() ++ Gimmie();
- a := Gimmie() ++ Gimmie()[20:0];
- a := 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie() ++ Gimmie()[27:0];
- a := 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie() ++ Gimmie()[22:0];
- a := 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie()[22:0] ++ Gimmie();
- a := Gimmie() ++ 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie()[22:0];
- a := Same(Gimmie(), Gimmie());
- a := Same(Gimmie()[20:0], Gimmie()); // error, have only bv20, need bv32
-
- a := Same(Gimmie() ++ Gimmie()[20:0], 0bv32);
- a := Same(Gimmie() ++ Gimmie()[20:0], Gimmie());
- a := Same(Gimmie() ++ Gimmie()[20:0], Gimmie() ++ Gimmie());
- a := Same(Gimmie() ++ Gimmie()[20:0], Gimmie()[40:30] ++ Gimmie());
- call ConsumeAnything(Same(Gimmie() ++ Gimmie()[20:0], 0bv18)); // error, can't make things smaller
-}
-
-// ---- maps again ----
-
-procedure Mmm() returns (a: [int,int]bool, b: HeapType, c: int)
-{
- if (Gimmie()[null] == Gimmie()) {
- a := Same(Gimmie()[Gimmie(), Gimmie() := Gimmie()], Gimmie());
- b := Same(Gimmie()[Gimmie(), Gimmie() := Gimmie()], Gimmie());
- a := Same(Gimmie()[Gimmie(), Gimmie() := 4], Gimmie()); // error
- b := Same(Gimmie()[Gimmie(), Gimmie() := 5], Gimmie());
- b := Same(Gimmie()[Gimmie(), 6 := Gimmie()], Gimmie()); // error
- }
- c := Gimmie()[Gimmie() := 10][null];
- c := Gimmie()[Gimmie() := Gimmie()][null];
- c := Gimmie()[Gimmie() := false][null];
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var m: []int;
+var p: <a>[]a;
+
+type ref;
+const null: ref;
+
+procedure P()
+ requires m[] == 5;
+ modifies m;
+ modifies p;
+ ensures m[] == 30;
+ ensures p[] + p[] == 24;
+ ensures p[] == null;
+{
+ m[] := 12;
+ p[] := 12;
+ p[] := true;
+ assert p[] == m[];
+ assert p[];
+ m := m[:= 30];
+ p := p[:=null];
+}
+
+procedure A()
+{
+ m[] := 12; // error: illegal assignment, because m is not in modifies clause
+}
+
+procedure B()
+ modifies m;
+{
+ m := m[]; // type error
+ m[] := m; // type error
+}
+
+procedure C()
+ modifies m;
+{
+ m[] := true; // type error
+}
+
+// -----
+
+procedure Genrc<T>(x: int) returns (t: T);
+
+procedure Caller() returns (b: bool)
+{
+ var y: ref;
+ call y := Genrc(5);
+ b := y == null;
+}
+
+// ----
+
+type Field a;
+type HeapType = <a>[ref, Field a]a;
+const F0: Field int;
+const F1: Field bool;
+const alloc: Field bool;
+var Heap: HeapType;
+
+function LiberalEqual<a,b>(a, b) returns (bool);
+function StrictEqual<a>(a,a) returns (bool);
+function IntEqual(Field int,Field int) returns (bool);
+
+procedure FrameCondition(this: ref)
+ requires F0 == F1; // error
+ requires LiberalEqual(F0, F1);
+ requires StrictEqual(F0, F0);
+ requires StrictEqual(F0, F1); // error
+ modifies Heap;
+ ensures (forall<alpha> o: ref, f: Field alpha ::
+ Heap[o,f] == old(Heap)[o,f] ||
+ !old(Heap)[o,alloc] ||
+ (o == this && StrictEqual(f, F0)) || // error: f and F0 don't have the same type
+ (o == this && LiberalEqual(f, f)) ||
+ (o == this && IntEqual(F0, f)) // error: f and F0 don't have the same type
+ );
+{
+}
+
+// ---- bitvector inference ----
+
+function Gimmie<T>() returns (T);
+function Same<T>(T,T) returns (T);
+procedure ConsumeAnything<T>(t: T);
+
+procedure Bvs(x: bv31, y: int) returns (a: bv32)
+{
+ a := x[50 : 18]; // error
+ a := y[50 : 18]; // error
+
+ a := Gimmie(); // fine, this can be made to have at least 32 bits
+ a := Gimmie()[50 : 18]; // fine, result is always 32 bits and Gimmie() can be made to have at least 50 bits
+ a := Gimmie()[50 : 17]; // error, result is 33 bits (but there's nothing wrong with Gimmie())
+
+ a := Gimmie() ++ Gimmie() ++ Gimmie();
+ a := Gimmie() ++ Gimmie()[20:0];
+ a := 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie() ++ Gimmie()[27:0];
+ a := 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie() ++ Gimmie()[22:0];
+ a := 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie()[22:0] ++ Gimmie();
+ a := Gimmie() ++ 0bv0 ++ Gimmie()[6:6] ++ Gimmie()[17:12] ++ Gimmie() ++ Gimmie()[22:0];
+ a := Same(Gimmie(), Gimmie());
+ a := Same(Gimmie()[20:0], Gimmie()); // error, have only bv20, need bv32
+
+ a := Same(Gimmie() ++ Gimmie()[20:0], 0bv32);
+ a := Same(Gimmie() ++ Gimmie()[20:0], Gimmie());
+ a := Same(Gimmie() ++ Gimmie()[20:0], Gimmie() ++ Gimmie());
+ a := Same(Gimmie() ++ Gimmie()[20:0], Gimmie()[40:30] ++ Gimmie());
+ call ConsumeAnything(Same(Gimmie() ++ Gimmie()[20:0], 0bv18)); // error, can't make things smaller
+}
+
+// ---- maps again ----
+
+procedure Mmm() returns (a: [int,int]bool, b: HeapType, c: int)
+{
+ if (Gimmie()[null] == Gimmie()) {
+ a := Same(Gimmie()[Gimmie(), Gimmie() := Gimmie()], Gimmie());
+ b := Same(Gimmie()[Gimmie(), Gimmie() := Gimmie()], Gimmie());
+ a := Same(Gimmie()[Gimmie(), Gimmie() := 4], Gimmie()); // error
+ b := Same(Gimmie()[Gimmie(), Gimmie() := 5], Gimmie());
+ b := Same(Gimmie()[Gimmie(), 6 := Gimmie()], Gimmie()); // error
+ }
+ c := Gimmie()[Gimmie() := 10][null];
+ c := Gimmie()[Gimmie() := Gimmie()][null];
+ c := Gimmie()[Gimmie() := false][null];
+}
diff --git a/Test/test1/Orderings.bpl b/Test/test1/Orderings.bpl
index 4ab28a48..bad7c2ad 100644
--- a/Test/test1/Orderings.bpl
+++ b/Test/test1/Orderings.bpl
@@ -1,10 +1,10 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-type C;
-
-const c1:C;
-const c2:C extends c1;
-const c0:C extends a; // error: parent of wrong type
-
-const a:int;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+type C;
+
+const c1:C;
+const c2:C extends c1;
+const c0:C extends a; // error: parent of wrong type
+
+const a:int;
diff --git a/Test/test1/StatementIds0.bpl b/Test/test1/StatementIds0.bpl
new file mode 100644
index 00000000..abf26159
--- /dev/null
+++ b/Test/test1/StatementIds0.bpl
@@ -0,0 +1,24 @@
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0(n: int)
+{
+ assume {:id "s0"} true;
+ assert {:id "s0"} true;
+}
+
+procedure test1()
+{
+ call {:id "s0"} P();
+}
+
+procedure test2(n: int)
+{
+ while (*)
+ invariant {:id "s0"} true;
+ invariant {:id "s0"} true;
+ {
+ }
+}
+
+procedure P();
diff --git a/Test/test1/StatementIds0.bpl.expect b/Test/test1/StatementIds0.bpl.expect
new file mode 100644
index 00000000..4783d912
--- /dev/null
+++ b/Test/test1/StatementIds0.bpl.expect
@@ -0,0 +1,5 @@
+StatementIds0.bpl(7,4): Error: more than one statement with same id: s0
+StatementIds0.bpl(12,4): Error: more than one statement with same id: s0
+StatementIds0.bpl(18,6): Error: more than one statement with same id: s0
+StatementIds0.bpl(19,6): Error: more than one statement with same id: s0
+4 name resolution errors detected in StatementIds0.bpl
diff --git a/Test/test1/UpdateExprTyping.bpl b/Test/test1/UpdateExprTyping.bpl
index bf8fd47c..41b88a3c 100644
--- a/Test/test1/UpdateExprTyping.bpl
+++ b/Test/test1/UpdateExprTyping.bpl
@@ -1,45 +1,45 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P(a: [int]bool, b: [int]ref, c: [bool]bool)
-{
- assert a == b; // type error
- assert a == c; // type error
-
- assert a == a[5 := true];
- assert a == a[true := true]; // type error
- assert a == a[5 := 5]; // type error in RHS
- assert a == b[5 := null]; // type error
-}
-
-procedure Q(aa: [int,ref]bool)
-{
- assert aa[5,null := true] != aa[2,null := false];
- assert aa == aa[null,null := true]; // type error, index 0
- assert aa == aa[5,true := true]; // type error, index 1
- assert aa == aa[5,null := null]; // type error, RHS
-}
-
-type Field a;
-const unique IntField: Field int;
-const unique RefField: Field ref;
-const unique SomeField: Field any;
-
-procedure R(H: <x>[ref,Field x]x, this: ref)
-{
- var i: int, r: ref, y: any;
- var K: <wz>[ref,Field wz]wz;
-
- i := H[this, IntField];
- r := H[this, RefField];
- y := H[this, IntField]; // type error, wrong LHS
- y := H[this, SomeField];
-
- K := H[this, IntField := i][this, RefField := r][this, SomeField := y];
- K := H[this, SomeField := r]; // type error, wrong RHS
-
- K := K[this, IntField := r]; // RHS has wrong type (ref, expecting int)
- K := K[this, RefField := i]; // RHS has wrong type (int, expecting ref)
-}
-
-type ref, any;
-const null : ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P(a: [int]bool, b: [int]ref, c: [bool]bool)
+{
+ assert a == b; // type error
+ assert a == c; // type error
+
+ assert a == a[5 := true];
+ assert a == a[true := true]; // type error
+ assert a == a[5 := 5]; // type error in RHS
+ assert a == b[5 := null]; // type error
+}
+
+procedure Q(aa: [int,ref]bool)
+{
+ assert aa[5,null := true] != aa[2,null := false];
+ assert aa == aa[null,null := true]; // type error, index 0
+ assert aa == aa[5,true := true]; // type error, index 1
+ assert aa == aa[5,null := null]; // type error, RHS
+}
+
+type Field a;
+const unique IntField: Field int;
+const unique RefField: Field ref;
+const unique SomeField: Field any;
+
+procedure R(H: <x>[ref,Field x]x, this: ref)
+{
+ var i: int, r: ref, y: any;
+ var K: <wz>[ref,Field wz]wz;
+
+ i := H[this, IntField];
+ r := H[this, RefField];
+ y := H[this, IntField]; // type error, wrong LHS
+ y := H[this, SomeField];
+
+ K := H[this, IntField := i][this, RefField := r][this, SomeField := y];
+ K := H[this, SomeField := r]; // type error, wrong RHS
+
+ K := K[this, IntField := r]; // RHS has wrong type (ref, expecting int)
+ K := K[this, RefField := i]; // RHS has wrong type (int, expecting ref)
+}
+
+type ref, any;
+const null : ref;
diff --git a/Test/test1/WhereTyping.bpl b/Test/test1/WhereTyping.bpl
index 0884e8ef..b3675f45 100644
--- a/Test/test1/WhereTyping.bpl
+++ b/Test/test1/WhereTyping.bpl
@@ -1,47 +1,47 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int where g == 12;
-
-procedure P(x: int where x > 0) returns (y: int where y < 0);
- requires x < 100;
- modifies g;
- ensures -100 < y;
-
-implementation P(xx: int) returns (yy: int)
-{
- var a: int;
- var b: int;
-
- start:
- a := xx;
- call b := P(a);
- yy := b;
- return;
-}
-
-type double;
-function F(double) returns (double);
-function G(double) returns (bool);
-
-procedure Q(omega: double where omega == F(omega),
- psi: double where psi + 1 == 0, // error: psi doesn't have right type for +
- pi: double where F(pi), // error: F has wrong return type
- sigma: double where G(sigma));
-
-
-const SomeConstant: name;
-function fgh(int) returns (int);
-
-procedure Cnst(n: name where n <: SomeConstant /*this SomeConstant refers to the const*/) returns (SomeConstant: int)
-{
- var k: int where k != SomeConstant; // fine, since SomeConstants refers to the out parameter
- var m: name where m != SomeConstant; // error: types don't match up
- var r: ref where (forall abc: int :: abc == SomeConstant);
- var b: bool;
- start:
- b := (forall x: int :: fgh(x) < SomeConstant);
- b := (forall l: name :: l == SomeConstant); // error: SomeConstant here refers to the out parameter
- return;
-}
-
-type ref, name;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int where g == 12;
+
+procedure P(x: int where x > 0) returns (y: int where y < 0);
+ requires x < 100;
+ modifies g;
+ ensures -100 < y;
+
+implementation P(xx: int) returns (yy: int)
+{
+ var a: int;
+ var b: int;
+
+ start:
+ a := xx;
+ call b := P(a);
+ yy := b;
+ return;
+}
+
+type double;
+function F(double) returns (double);
+function G(double) returns (bool);
+
+procedure Q(omega: double where omega == F(omega),
+ psi: double where psi + 1 == 0, // error: psi doesn't have right type for +
+ pi: double where F(pi), // error: F has wrong return type
+ sigma: double where G(sigma));
+
+
+const SomeConstant: name;
+function fgh(int) returns (int);
+
+procedure Cnst(n: name where n <: SomeConstant /*this SomeConstant refers to the const*/) returns (SomeConstant: int)
+{
+ var k: int where k != SomeConstant; // fine, since SomeConstants refers to the out parameter
+ var m: name where m != SomeConstant; // error: types don't match up
+ var r: ref where (forall abc: int :: abc == SomeConstant);
+ var b: bool;
+ start:
+ b := (forall x: int :: fgh(x) < SomeConstant);
+ b := (forall l: name :: l == SomeConstant); // error: SomeConstant here refers to the out parameter
+ return;
+}
+
+type ref, name;
diff --git a/Test/test13/ErrorTraceTestLoopInvViolationBPL.bpl b/Test/test13/ErrorTraceTestLoopInvViolationBPL.bpl
index 1c27c258..d9723426 100644
--- a/Test/test13/ErrorTraceTestLoopInvViolationBPL.bpl
+++ b/Test/test13/ErrorTraceTestLoopInvViolationBPL.bpl
@@ -1,32 +1,32 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// simple assert
-procedure asserting() {
- var x: int;
-
- x := 0;
-
- assert x == 1;
-}
-
-// invariant failing initially
-procedure loopInvInitiallyViolated(y: int) {
- var x: int;
-
- x := y;
-
- while (true) invariant (x == 1); {
- x := 1;
- }
-}
-
-// invariant failing after iteration
-procedure loopInvMaintenanceViolated() {
- var x: int;
-
- x := 0;
-
- while (true) invariant x == 0; {
- x := 1;
- }
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// simple assert
+procedure asserting() {
+ var x: int;
+
+ x := 0;
+
+ assert x == 1;
+}
+
+// invariant failing initially
+procedure loopInvInitiallyViolated(y: int) {
+ var x: int;
+
+ x := y;
+
+ while (true) invariant (x == 1); {
+ x := 1;
+ }
+}
+
+// invariant failing after iteration
+procedure loopInvMaintenanceViolated() {
+ var x: int;
+
+ x := 0;
+
+ while (true) invariant x == 0; {
+ x := 1;
+ }
+}
diff --git a/Test/test15/CaptureState.bpl b/Test/test15/CaptureState.bpl
index 113e0b6a..ba3345f5 100644
--- a/Test/test15/CaptureState.bpl
+++ b/Test/test15/CaptureState.bpl
@@ -1,29 +1,29 @@
-// RUN: %boogie "%s" -mv:- > "%t"
-// RUN: %diff "%s.expect" "%t"
-type Ref;
-type FieldName;
-var Heap: [Ref,FieldName]int;
-
-const unique F: FieldName;
-
-procedure P(this: Ref, x: int, y: int) returns (r: int)
- ensures 0 <= r;
-{
- var m: int;
-
- assume {:captureState "top"} true;
-
- m := Heap[this, F];
- if (0 <= x) {
- assume {:captureState "then"} true;
- m := m + 1;
- assume {:captureState "postUpdate0"} true;
- } else {
- assume {:captureState "else"} true;
- m := (m + y) * (m + y);
- assume {:captureState "postUpdate1"} true;
- }
- r := m + m;
- m := 7;
- assume {:captureState "end"} true;
-}
+// RUN: %boogie "%s" -mv:- > "%t"
+// RUN: %diff "%s.expect" "%t"
+type Ref;
+type FieldName;
+var Heap: [Ref,FieldName]int;
+
+const unique F: FieldName;
+
+procedure P(this: Ref, x: int, y: int) returns (r: int)
+ ensures 0 <= r;
+{
+ var m: int;
+
+ assume {:captureState "top"} true;
+
+ m := Heap[this, F];
+ if (0 <= x) {
+ assume {:captureState "then"} true;
+ m := m + 1;
+ assume {:captureState "postUpdate0"} true;
+ } else {
+ assume {:captureState "else"} true;
+ m := (m + y) * (m + y);
+ assume {:captureState "postUpdate1"} true;
+ }
+ r := m + m;
+ m := 7;
+ assume {:captureState "end"} true;
+}
diff --git a/Test/test15/CaptureState.bpl.expect b/Test/test15/CaptureState.bpl.expect
index 5d9d41c5..6939fee4 100644
--- a/Test/test15/CaptureState.bpl.expect
+++ b/Test/test15/CaptureState.bpl.expect
@@ -14,17 +14,17 @@ $mv_state_const -> 3
F -> T@FieldName!val!0
Heap -> |T@[Ref,FieldName]Int!val!0|
m -> **m
-m@0 -> (- 276)
-m@1 -> (- 275)
-m@3 -> (- 275)
+m@0 -> (- 2)
+m@1 -> (- 1)
+m@3 -> (- 1)
r -> **r
-r@0 -> (- 550)
+r@0 -> (- 2)
this -> T@Ref!val!0
x -> 719
y -> **y
Select_[Ref,FieldName]$int -> {
- |T@[Ref,FieldName]Int!val!0| T@Ref!val!0 T@FieldName!val!0 -> (- 276)
- else -> (- 276)
+ |T@[Ref,FieldName]Int!val!0| T@Ref!val!0 T@FieldName!val!0 -> (- 2)
+ else -> (- 2)
}
$mv_state -> {
3 0 -> true
@@ -49,13 +49,13 @@ tickleBool -> {
*** STATE top
*** END_STATE
*** STATE then
- m -> (- 276)
+ m -> (- 2)
*** END_STATE
*** STATE postUpdate0
- m -> (- 275)
+ m -> (- 1)
*** END_STATE
*** STATE end
- r -> (- 550)
+ r -> (- 2)
m -> 7
*** END_STATE
*** END_MODEL
diff --git a/Test/test15/IntInModel.bpl b/Test/test15/IntInModel.bpl
index 55bc14d9..8fa2e2bb 100644
--- a/Test/test15/IntInModel.bpl
+++ b/Test/test15/IntInModel.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -printModel:2 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure M (i: int) {
- assert i != 0;
-}
+// RUN: %boogie -printModel:2 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure M (i: int) {
+ assert i != 0;
+}
diff --git a/Test/test15/InterpretedFunctionTests.bpl b/Test/test15/InterpretedFunctionTests.bpl
index 33db52ef..5712595e 100644
--- a/Test/test15/InterpretedFunctionTests.bpl
+++ b/Test/test15/InterpretedFunctionTests.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure addition(x: int, y: int) {
- assume x == 1;
- assume y == 2;
- assert x + y == 4;
-}
-
-procedure subtraction(x: int, y: int) {
- assume x == 1;
- assume y == 2;
- assert x - y == 4; //only shows x-y == -1 when run with /method:subtraction, WHY???
-}
-
-procedure multiplication(x: int, y: int) {
- assume x == 1;
- assume y == 2;
- assert x * y == 4;
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure addition(x: int, y: int) {
+ assume x == 1;
+ assume y == 2;
+ assert x + y == 4;
+}
+
+procedure subtraction(x: int, y: int) {
+ assume x == 1;
+ assume y == 2;
+ assert x - y == 4; //only shows x-y == -1 when run with /method:subtraction, WHY???
+}
+
+procedure multiplication(x: int, y: int) {
+ assume x == 1;
+ assume y == 2;
+ assert x * y == 4;
+}
diff --git a/Test/test15/ModelTest.bpl b/Test/test15/ModelTest.bpl
index 7764cb41..31e21de0 100644
--- a/Test/test15/ModelTest.bpl
+++ b/Test/test15/ModelTest.bpl
@@ -1,12 +1,12 @@
-// RUN: %boogie -printModel:2 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure M (s : ref, r : ref) {
- var i : int, j : int;
- i := 0 + 1;
- j := i + 1;
- j := j + 1;
- j := j + 1;
- assert i == j;
- assert s == r;
-}
-type ref;
+// RUN: %boogie -printModel:2 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure M (s : ref, r : ref) {
+ var i : int, j : int;
+ i := 0 + 1;
+ j := i + 1;
+ j := j + 1;
+ j := j + 1;
+ assert i == j;
+ assert s == r;
+}
+type ref;
diff --git a/Test/test15/NullInModel.bpl b/Test/test15/NullInModel.bpl
index aa68b763..560f2952 100644
--- a/Test/test15/NullInModel.bpl
+++ b/Test/test15/NullInModel.bpl
@@ -1,7 +1,7 @@
-// RUN: %boogie -printModel:2 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure M (s: ref) {
- assert s != null;
-}
-type ref;
-const null: ref;
+// RUN: %boogie -printModel:2 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure M (s: ref) {
+ assert s != null;
+}
+type ref;
+const null: ref;
diff --git a/Test/test16/LoopUnroll.bpl b/Test/test16/LoopUnroll.bpl
index 4ba99eba..5410c756 100644
--- a/Test/test16/LoopUnroll.bpl
+++ b/Test/test16/LoopUnroll.bpl
@@ -1,85 +1,85 @@
-// RUN: %boogie -loopUnroll:1 -logPrefix:-lu1 LoopUnroll.bpl > "%t1"
-// RUN: %diff "%s.1.expect" "%t1"
-// RUN: %boogie -loopUnroll:2 -logPrefix:-lu2 -proc:ManyIterations LoopUnroll.bpl > "%t2"
-// RUN: %diff "%s.2.expect" "%t2"
-// RUN: %boogie -loopUnroll:3 -logPrefix:-lu3 -proc:ManyIterations LoopUnroll.bpl > "%t3"
-// RUN: %diff "%s.3.expect" "%t3"
-procedure P()
-{
- var x: int;
-
- A:
- x := 0;
- goto B, Goner, C;
-
- B:
- x := 1;
- goto D;
-
- C:
- x := 2;
- goto D;
-
- Goner:
- x := 5;
- assume false;
- x := 6;
- goto B;
-
- D:
- x := 3;
- goto LoopHead;
-
- LoopHead:
- assert x < 100;
- goto LoopBody, LoopDone;
-
- LoopBody:
- x := x + 1;
- goto LoopHead, LoopBodyMore;
-
- LoopBodyMore:
- x := x + 2;
- goto LoopHead;
-
- LoopDone:
- x := 88;
- return;
-}
-
-type MyValue;
-const SpecialValue: MyValue;
-
-procedure WrongRange(a: [int]MyValue, N: int)
- requires 0 <= N;
-{
- var i: int, v: MyValue;
-
- i := 1; // bad idea
- while (i <= N) // also a bad idea
- {
- assert 0 <= i; // lower bounds check
- assert i < N; // error: upper bounds check
- v := a[i];
- i := i + 1;
- }
-}
-
-procedure ManyIterations(a: [int]MyValue, N: int)
- requires 0 <= N;
- requires a[0] != SpecialValue && a[1] != SpecialValue;
-{
- var i: int, v: MyValue;
-
- i := 0;
- while (i < N)
- {
- assert 0 <= i; // lower bounds check
- assert i < N; // upper bounds check
- v := a[i];
- assert a[i] != SpecialValue; // error: after more than 2 loop unrollings
- i := i + 1;
- }
-}
-
-// ERROR: /printInstrumented seems to erase filename source-location information
+// RUN: %boogie -loopUnroll:1 -logPrefix:-lu1 LoopUnroll.bpl > "%t1"
+// RUN: %diff "%s.1.expect" "%t1"
+// RUN: %boogie -loopUnroll:2 -logPrefix:-lu2 -proc:ManyIterations LoopUnroll.bpl > "%t2"
+// RUN: %diff "%s.2.expect" "%t2"
+// RUN: %boogie -loopUnroll:3 -logPrefix:-lu3 -proc:ManyIterations LoopUnroll.bpl > "%t3"
+// RUN: %diff "%s.3.expect" "%t3"
+procedure P()
+{
+ var x: int;
+
+ A:
+ x := 0;
+ goto B, Goner, C;
+
+ B:
+ x := 1;
+ goto D;
+
+ C:
+ x := 2;
+ goto D;
+
+ Goner:
+ x := 5;
+ assume false;
+ x := 6;
+ goto B;
+
+ D:
+ x := 3;
+ goto LoopHead;
+
+ LoopHead:
+ assert x < 100;
+ goto LoopBody, LoopDone;
+
+ LoopBody:
+ x := x + 1;
+ goto LoopHead, LoopBodyMore;
+
+ LoopBodyMore:
+ x := x + 2;
+ goto LoopHead;
+
+ LoopDone:
+ x := 88;
+ return;
+}
+
+type MyValue;
+const SpecialValue: MyValue;
+
+procedure WrongRange(a: [int]MyValue, N: int)
+ requires 0 <= N;
+{
+ var i: int, v: MyValue;
+
+ i := 1; // bad idea
+ while (i <= N) // also a bad idea
+ {
+ assert 0 <= i; // lower bounds check
+ assert i < N; // error: upper bounds check
+ v := a[i];
+ i := i + 1;
+ }
+}
+
+procedure ManyIterations(a: [int]MyValue, N: int)
+ requires 0 <= N;
+ requires a[0] != SpecialValue && a[1] != SpecialValue;
+{
+ var i: int, v: MyValue;
+
+ i := 0;
+ while (i < N)
+ {
+ assert 0 <= i; // lower bounds check
+ assert i < N; // upper bounds check
+ v := a[i];
+ assert a[i] != SpecialValue; // error: after more than 2 loop unrollings
+ i := i + 1;
+ }
+}
+
+// ERROR: /printInstrumented seems to erase filename source-location information
diff --git a/Test/test17/Answer b/Test/test17/Answer
index 8a1a816b..826591c0 100644
--- a/Test/test17/Answer
+++ b/Test/test17/Answer
@@ -1,8 +1,8 @@
-
--------------------- contractinfer --------------------
-
-Boogie program verifier finished with 2 verified, 0 errors
-
--------------------- flpydisk --------------------
-
-Boogie program verifier finished with 2 verified, 0 errors
+
+-------------------- contractinfer --------------------
+
+Boogie program verifier finished with 2 verified, 0 errors
+
+-------------------- flpydisk --------------------
+
+Boogie program verifier finished with 2 verified, 0 errors
diff --git a/Test/test17/contractinfer.bpl b/Test/test17/contractinfer.bpl
index aeec020a..afe5a2ea 100644
--- a/Test/test17/contractinfer.bpl
+++ b/Test/test17/contractinfer.bpl
@@ -1,24 +1,24 @@
-const {:existential true} b1:bool;
-const {:existential true} b2:bool;
-const {:existential true} b3:bool;
-const {:existential true} b4:bool;
-
-var array:[int]int;
-
-procedure foo (i:int)
-requires b2 ==> i > 0;
-ensures b3 ==> array[i] > 0;
-modifies array;
-ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
-{
- array[i] := 2 * i;
-}
-
-procedure bar (j:int) returns (result:int)
-requires b4 ==> j > 0;
-modifies array;
-ensures (forall x:int :: {array[x]} (b1 && x == j) || array[x] == old(array)[x]);
-{
- call foo(j);
- result := array[j];
+const {:existential true} b1:bool;
+const {:existential true} b2:bool;
+const {:existential true} b3:bool;
+const {:existential true} b4:bool;
+
+var array:[int]int;
+
+procedure foo (i:int)
+requires b2 ==> i > 0;
+ensures b3 ==> array[i] > 0;
+modifies array;
+ensures (forall x:int :: {array[x]} x == i || array[x] == old(array)[x]);
+{
+ array[i] := 2 * i;
+}
+
+procedure bar (j:int) returns (result:int)
+requires b4 ==> j > 0;
+modifies array;
+ensures (forall x:int :: {array[x]} (b1 && x == j) || array[x] == old(array)[x]);
+{
+ call foo(j);
+ result := array[j];
} \ No newline at end of file
diff --git a/Test/test17/flpydisk.bpl b/Test/test17/flpydisk.bpl
index 4883f080..ff7f00e6 100644
--- a/Test/test17/flpydisk.bpl
+++ b/Test/test17/flpydisk.bpl
@@ -1,2295 +1,2295 @@
-type ptr;
-function Ptr(ref, int) returns (ptr);
-function Obj(ptr) returns (ref);
-function Off(ptr) returns (int);
-
-// Ptr, Obj, Off axioms
-axiom(forall x:ptr :: {Obj(x)}{Off(x)} x == Ptr(Obj(x), Off(x)));
-axiom(forall x_obj:ref, x_off:int :: {Ptr(x_obj, x_off)} x_obj == Obj(Ptr(x_obj, x_off)));
-axiom(forall x_obj:ref, x_off:int :: {Ptr(x_obj, x_off)} x_off == Off(Ptr(x_obj, x_off)));
-
-// Mutable
-var Mem:[ptr]ptr;
-var alloc:[ref]name;
-var BS:[ptr]bool;
-const field:[ptr]name;
-
-// Immutable
-function Size(ref) returns (int);
-function Type(ref) returns (int);
-function IsHeap(ref) returns (bool); //if the object was allocated by malloc or allocation due to address taken
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED:name;
-
-function In(ptr, [ptr]bool) returns (bool);
-function Subset([ptr]bool, [ptr]bool) returns (bool);
-//function Equal([ptr]bool, [ptr]bool) returns (bool);
-function Disjoint([ptr]bool, [ptr]bool) returns (bool);
-//function UniqueDereference([ptr]bool, [ptr]ptr, ptr) returns (bool);
-
-//function Element(a:ptr) returns (bool);
-//axiom(forall a:ptr, S:[ptr]bool :: {In(a,S)} Element(a));
-
-function Empty() returns ([ptr]bool);
-function Singleton(ptr) returns ([ptr]bool);
-function Reachable([ptr,ptr]bool, ptr) returns ([ptr]bool);
-function Union([ptr]bool, [ptr]bool) returns ([ptr]bool);
-function Intersection([ptr]bool, [ptr]bool) returns ([ptr]bool);
-function Difference([ptr]bool, [ptr]bool) returns ([ptr]bool);
-function Decrement([ptr]bool, int) returns ([ptr]bool);
-function Increment([ptr]bool, int) returns ([ptr]bool);
-function Dereference([ptr]bool, [ptr]ptr) returns ([ptr]bool);
-function Array(ptr, int, ptr) returns ([ptr]bool);
-function Array1(ptr, ptr) returns ([ptr]bool);
-
-
-axiom(forall x:ptr :: !In(x, Empty()));
-
-axiom(forall x:ptr, y:ptr :: {In(x, Singleton(y))} In(x, Singleton(y)) ==> x == y);
-axiom(forall y:ptr :: {Singleton(y)} In(y, Singleton(y)));
-
-/* this formulation of Union IS more complete than the earlier one */
-/* In(e, A U B), In(d, A), A U B = Singleton(c), d != e */
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x, Union(S,T))} In(x, Union(S,T)) ==> In(x, S) || In(x,T));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,S)} In(x, S) ==> In(x, Union(S,T)));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,T)} In(x, T) ==> In(x, Union(S,T)));
-
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,S), In(x,T), Intersection(S,T)} In(x,S) && In(x,T) ==> In(x, Intersection(S,T)));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,Intersection(S,T))} In(x, Intersection(S,T)) ==> In(x,S) && In(x,T));
-
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Difference(S,T), In(x,S)} In(x, S) ==> In(x, Difference(S,T)) || In(x,T));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,Difference(S,T))} In(x, Difference(S,T)) ==> In(x, S));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,Difference(S,T)), In(x,T)} !(In(x, Difference(S,T)) && In(x,T)));
-
-axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Decrement(S,n))} In(x, Decrement(S,n)) <==> In(Ptr(Obj(x),Off(x)+n),S));
-axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Increment(S,n))} In(x, Increment(S,n)) <==> In(Ptr(Obj(x),Off(x)-n),S));
-
-axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {In(x, Dereference(S,M))} In(x, Dereference(S,M)) ==> (exists y:ptr :: x == M[y] && In(y,S)));
-axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {M[x], In(x, S), Dereference(S,M)} In(x, S) ==> In(M[x], Dereference(S,M)));
-
-axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a,Array(x,n,z))}
- In(a,Array(x,n,z)) ==>
- (Obj(a) == Obj(x) && Obj(z) == null && (exists k:int :: 0 <= k && k < Off(z) && Off(a) == Off(x) + n*k)));
-
-axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a, Array(x,n,z))}
- In(a, Array(x,n,z)) ==> (exists k:int :: 0 <= k && a == PLUS(x,n,Ptr(null,k))));
-axiom(forall x:ptr, n:int, z:ptr :: {Array(x,n,z)} Obj(z) == null && Off(z) > 0 ==> In(x, Array(x,n,z)));
-axiom(forall x:ptr, n:int, y:ptr, z:ptr :: {PLUS(x,n,y), Array(x,n,z)}
- Obj(y) == null && Obj(z) == null && Off(x) <= Off(PLUS(x,n,y)) && Off(PLUS(x,n,y)) < Off(PLUS(x,n,z)) <==> In(PLUS(x,n,y), Array(x,n,z)));
-
-axiom(forall x:ptr, y:ptr, z:ptr :: {In(x,Array1(y,z))}
- In(x,Array1(y,z)) <==>
- (Obj(x) == Obj(y) && Off(y) <= Off(x) && Off(x) < Off(y) + Off(z)));
-
-
-/*
-axiom(forall x:ptr :: !In(x, Empty()));
-axiom(forall x:ptr, y:ptr :: {In(x, Singleton(y))} In(x, Singleton(y)) <==> x == y);
-
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x, Union(S,T))} In(x, Union(S,T)) <==> In(x, S) || In(x,T));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,S)} In(x, S) ==> In(x, Union(S,T)));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,T)} In(x, T) ==> In(x, Union(S,T)));
-
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x, Difference(S,T))} In(x, Difference(S,T)) <==> In(x, S) && !In(x,T));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Difference(S,T), In(x,S), In(x,T)} (In(x, S) && !In(x,T)) ==> In(x, Difference(S,T)));
-
-axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Decrement(S,n))} In(x, Decrement(S,n)) <==> In(Ptr(Obj(x),Off(x)+n),S));
-axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Increment(S,n))} In(x, Increment(S,n)) <==> In(Ptr(Obj(x),Off(x)-n),S));
-axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {In(x, Dereference(S,M))} In(x, Dereference(S,M)) <==> (exists y:ptr :: x == M[y] && In(y,S)));
-axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {In(x, S), Dereference(S,M)} In(x, S) ==> In(M[x], Dereference(S,M)));
-
-axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a,Array(x,n,z))}
- In(a,Array(x,n,z)) ==>
- (Obj(a) == Obj(x) && Obj(z) == null && (exists k:int :: 0 <= k && k < Off(z) && Off(a) == Off(x) + n*k)));
-
-axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a, Array(x,n,z))}
- In(a, Array(x,n,z)) ==> (exists k:int :: 0 <= k && a == PLUS(x,n,Ptr(null,k))));
-axiom(forall x:ptr, n:int, z:ptr :: {Array(x,n,z)} Obj(z) == null && Off(z) > 0 ==> In(x, Array(x,n,z)));
-axiom(forall x:ptr, n:int, y:ptr, z:ptr :: {PLUS(x,n,y), Array(x,n,z)}
- Obj(y) == null && Obj(z) == null && Off(x) <= Off(PLUS(x,n,y)) && Off(PLUS(x,n,y)) < Off(PLUS(x,n,z)) <==> In(PLUS(x,n,y), Array(x,n,z)));
-
-axiom(forall x:ptr, y:ptr, z:ptr :: {In(x,Array1(y,z))}
- In(x,Array1(y,z)) <==>
- (Obj(x) == Obj(y) && Off(y) <= Off(x) && Off(x) < Off(y) + Off(z)));
-*/
-
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,S), Subset(S,T)} In(x,S) && Subset(S,T) ==> In(x,T));
-axiom(forall S:[ptr]bool, T:[ptr]bool :: {Subset(S,T)} Subset(S,T) || (exists x:ptr :: In(x,S) && !In(x,T)));
-axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,S), Disjoint(S,T), In(x,T)} !(In(x,S) && Disjoint(S,T) && In(x,T)));
-axiom(forall S:[ptr]bool, T:[ptr]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:ptr :: In(x,S) && In(x,T)));
-
-/*
-axiom(forall S:[ptr]bool, T:[ptr]bool :: {Subset(S,T)} Subset(S,T) <==> (forall x:ptr :: In(x,S) ==> In(x,T)));
-axiom(forall S:[ptr]bool, T:[ptr]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(T,S) && Subset(S,T));
-axiom(forall S:[ptr]bool, T:[ptr]bool :: {Disjoint(S,T)} Disjoint(S,T) <==> (forall x:ptr :: !(In(x,S) && In(x,T))));
-axiom(forall S:[ptr]bool, M:[ptr]ptr, p:ptr :: {UniqueDereference(S,M,p)}
- UniqueDereference(S,M,p) <==>
- (forall x:ptr, y:ptr :: {M[x],M[y]} In(x,S) && In(y,S) && M[x] == M[y] ==> x == y || M[x] == p));
-*/
-
-
-function ByteCapacity__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_ByteCapacity__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_ByteCapacity__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_ByteCapacity__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {ByteCapacity__DISKETTE_EXTENSION(x)} home_ByteCapacity__DISKETTE_EXTENSION(ByteCapacity__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_ByteCapacity__DISKETTE_EXTENSION(x)} ByteCapacity__DISKETTE_EXTENSION(home_ByteCapacity__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {ByteCapacity__DISKETTE_EXTENSION(x)} ByteCapacity__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 152));
-axiom (forall x:ptr :: {home_ByteCapacity__DISKETTE_EXTENSION(x)} home_ByteCapacity__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 152));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ByteCapacity__DISKETTE_EXTENSION(S))} In(x, _S_ByteCapacity__DISKETTE_EXTENSION(S)) ==> In(home_ByteCapacity__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ByteCapacity__DISKETTE_EXTENSION(S))} In(x, _S_home_ByteCapacity__DISKETTE_EXTENSION(S)) ==> In(ByteCapacity__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ByteCapacity__DISKETTE_EXTENSION(S)} In(x, S) ==> In(ByteCapacity__DISKETTE_EXTENSION(x), _S_ByteCapacity__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ByteCapacity__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_ByteCapacity__DISKETTE_EXTENSION(x), _S_home_ByteCapacity__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,152), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,152), 1) == home_ByteCapacity__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,152))} MINUS_LEFT_PTR(x, 1, Ptr(null,152)) == home_ByteCapacity__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function ByteOffset___unnamed_16_39e6661e(ptr) returns (ptr);
-function home_ByteOffset___unnamed_16_39e6661e(ptr) returns (ptr);
-function _S_ByteOffset___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
-function _S_home_ByteOffset___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {ByteOffset___unnamed_16_39e6661e(x)} home_ByteOffset___unnamed_16_39e6661e(ByteOffset___unnamed_16_39e6661e(x)) == x);
-axiom (forall x:ptr :: {home_ByteOffset___unnamed_16_39e6661e(x)} ByteOffset___unnamed_16_39e6661e(home_ByteOffset___unnamed_16_39e6661e(x)) == x);
-axiom (forall x:ptr :: {ByteOffset___unnamed_16_39e6661e(x)} ByteOffset___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) + 8));
-axiom (forall x:ptr :: {home_ByteOffset___unnamed_16_39e6661e(x)} home_ByteOffset___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) - 8));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ByteOffset___unnamed_16_39e6661e(S))} In(x, _S_ByteOffset___unnamed_16_39e6661e(S)) ==> In(home_ByteOffset___unnamed_16_39e6661e(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ByteOffset___unnamed_16_39e6661e(S))} In(x, _S_home_ByteOffset___unnamed_16_39e6661e(S)) ==> In(ByteOffset___unnamed_16_39e6661e(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ByteOffset___unnamed_16_39e6661e(S)} In(x, S) ==> In(ByteOffset___unnamed_16_39e6661e(x), _S_ByteOffset___unnamed_16_39e6661e(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ByteOffset___unnamed_16_39e6661e(S)} In(x, S) ==> In(home_ByteOffset___unnamed_16_39e6661e(x), _S_home_ByteOffset___unnamed_16_39e6661e(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1) == home_ByteOffset___unnamed_16_39e6661e(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,8))} MINUS_LEFT_PTR(x, 1, Ptr(null,8)) == home_ByteOffset___unnamed_16_39e6661e(x));
-
-
-
-
-
-function BytesPerSector__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_BytesPerSector__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_BytesPerSector__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_BytesPerSector__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {BytesPerSector__DISKETTE_EXTENSION(x)} home_BytesPerSector__DISKETTE_EXTENSION(BytesPerSector__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_BytesPerSector__DISKETTE_EXTENSION(x)} BytesPerSector__DISKETTE_EXTENSION(home_BytesPerSector__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {BytesPerSector__DISKETTE_EXTENSION(x)} BytesPerSector__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 148));
-axiom (forall x:ptr :: {home_BytesPerSector__DISKETTE_EXTENSION(x)} home_BytesPerSector__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 148));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_BytesPerSector__DISKETTE_EXTENSION(S))} In(x, _S_BytesPerSector__DISKETTE_EXTENSION(S)) ==> In(home_BytesPerSector__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_BytesPerSector__DISKETTE_EXTENSION(S))} In(x, _S_home_BytesPerSector__DISKETTE_EXTENSION(S)) ==> In(BytesPerSector__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_BytesPerSector__DISKETTE_EXTENSION(S)} In(x, S) ==> In(BytesPerSector__DISKETTE_EXTENSION(x), _S_BytesPerSector__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_BytesPerSector__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_BytesPerSector__DISKETTE_EXTENSION(x), _S_home_BytesPerSector__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,148), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,148), 1) == home_BytesPerSector__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,148))} MINUS_LEFT_PTR(x, 1, Ptr(null,148)) == home_BytesPerSector__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function CancelRoutine__IRP(ptr) returns (ptr);
-function home_CancelRoutine__IRP(ptr) returns (ptr);
-function _S_CancelRoutine__IRP([ptr]bool) returns ([ptr]bool);
-function _S_home_CancelRoutine__IRP([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {CancelRoutine__IRP(x)} home_CancelRoutine__IRP(CancelRoutine__IRP(x)) == x);
-axiom (forall x:ptr :: {home_CancelRoutine__IRP(x)} CancelRoutine__IRP(home_CancelRoutine__IRP(x)) == x);
-axiom (forall x:ptr :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == Ptr(Obj(x), Off(x) + 56));
-axiom (forall x:ptr :: {home_CancelRoutine__IRP(x)} home_CancelRoutine__IRP(x) == Ptr(Obj(x), Off(x) - 56));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_CancelRoutine__IRP(S))} In(x, _S_CancelRoutine__IRP(S)) ==> In(home_CancelRoutine__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_CancelRoutine__IRP(S))} In(x, _S_home_CancelRoutine__IRP(S)) ==> In(CancelRoutine__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_CancelRoutine__IRP(S)} In(x, S) ==> In(CancelRoutine__IRP(x), _S_CancelRoutine__IRP(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_CancelRoutine__IRP(S)} In(x, S) ==> In(home_CancelRoutine__IRP(x), _S_home_CancelRoutine__IRP(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,56), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,56), 1) == home_CancelRoutine__IRP(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,56))} MINUS_LEFT_PTR(x, 1, Ptr(null,56)) == home_CancelRoutine__IRP(x));
-
-
-
-
-
-function Cancel__IRP(ptr) returns (ptr);
-function home_Cancel__IRP(ptr) returns (ptr);
-function _S_Cancel__IRP([ptr]bool) returns ([ptr]bool);
-function _S_home_Cancel__IRP([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Cancel__IRP(x)} home_Cancel__IRP(Cancel__IRP(x)) == x);
-axiom (forall x:ptr :: {home_Cancel__IRP(x)} Cancel__IRP(home_Cancel__IRP(x)) == x);
-axiom (forall x:ptr :: {Cancel__IRP(x)} Cancel__IRP(x) == Ptr(Obj(x), Off(x) + 36));
-axiom (forall x:ptr :: {home_Cancel__IRP(x)} home_Cancel__IRP(x) == Ptr(Obj(x), Off(x) - 36));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Cancel__IRP(S))} In(x, _S_Cancel__IRP(S)) ==> In(home_Cancel__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Cancel__IRP(S))} In(x, _S_home_Cancel__IRP(S)) ==> In(Cancel__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Cancel__IRP(S)} In(x, S) ==> In(Cancel__IRP(x), _S_Cancel__IRP(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Cancel__IRP(S)} In(x, S) ==> In(home_Cancel__IRP(x), _S_home_Cancel__IRP(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,36), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,36), 1) == home_Cancel__IRP(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,36))} MINUS_LEFT_PTR(x, 1, Ptr(null,36)) == home_Cancel__IRP(x));
-
-
-
-
-
-function Control__IO_STACK_LOCATION(ptr) returns (ptr);
-function home_Control__IO_STACK_LOCATION(ptr) returns (ptr);
-function _S_Control__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
-function _S_home_Control__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Control__IO_STACK_LOCATION(x)} home_Control__IO_STACK_LOCATION(Control__IO_STACK_LOCATION(x)) == x);
-axiom (forall x:ptr :: {home_Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(home_Control__IO_STACK_LOCATION(x)) == x);
-axiom (forall x:ptr :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) + 3));
-axiom (forall x:ptr :: {home_Control__IO_STACK_LOCATION(x)} home_Control__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) - 3));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Control__IO_STACK_LOCATION(S))} In(x, _S_Control__IO_STACK_LOCATION(S)) ==> In(home_Control__IO_STACK_LOCATION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Control__IO_STACK_LOCATION(S))} In(x, _S_home_Control__IO_STACK_LOCATION(S)) ==> In(Control__IO_STACK_LOCATION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Control__IO_STACK_LOCATION(S)} In(x, S) ==> In(Control__IO_STACK_LOCATION(x), _S_Control__IO_STACK_LOCATION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Control__IO_STACK_LOCATION(S)} In(x, S) ==> In(home_Control__IO_STACK_LOCATION(x), _S_home_Control__IO_STACK_LOCATION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,3), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,3), 1) == home_Control__IO_STACK_LOCATION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,3))} MINUS_LEFT_PTR(x, 1, Ptr(null,3)) == home_Control__IO_STACK_LOCATION(x));
-
-
-
-
-
-function CurrentStackLocation___unnamed_4_f80453a0(ptr) returns (ptr);
-function home_CurrentStackLocation___unnamed_4_f80453a0(ptr) returns (ptr);
-function _S_CurrentStackLocation___unnamed_4_f80453a0([ptr]bool) returns ([ptr]bool);
-function _S_home_CurrentStackLocation___unnamed_4_f80453a0([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {CurrentStackLocation___unnamed_4_f80453a0(x)} home_CurrentStackLocation___unnamed_4_f80453a0(CurrentStackLocation___unnamed_4_f80453a0(x)) == x);
-axiom (forall x:ptr :: {home_CurrentStackLocation___unnamed_4_f80453a0(x)} CurrentStackLocation___unnamed_4_f80453a0(home_CurrentStackLocation___unnamed_4_f80453a0(x)) == x);
-axiom (forall x:ptr :: {CurrentStackLocation___unnamed_4_f80453a0(x)} CurrentStackLocation___unnamed_4_f80453a0(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_CurrentStackLocation___unnamed_4_f80453a0(x)} home_CurrentStackLocation___unnamed_4_f80453a0(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_CurrentStackLocation___unnamed_4_f80453a0(S))} In(x, _S_CurrentStackLocation___unnamed_4_f80453a0(S)) ==> In(home_CurrentStackLocation___unnamed_4_f80453a0(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_CurrentStackLocation___unnamed_4_f80453a0(S))} In(x, _S_home_CurrentStackLocation___unnamed_4_f80453a0(S)) ==> In(CurrentStackLocation___unnamed_4_f80453a0(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_CurrentStackLocation___unnamed_4_f80453a0(S)} In(x, S) ==> In(CurrentStackLocation___unnamed_4_f80453a0(x), _S_CurrentStackLocation___unnamed_4_f80453a0(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_CurrentStackLocation___unnamed_4_f80453a0(S)} In(x, S) ==> In(home_CurrentStackLocation___unnamed_4_f80453a0(x), _S_home_CurrentStackLocation___unnamed_4_f80453a0(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_CurrentStackLocation___unnamed_4_f80453a0(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_CurrentStackLocation___unnamed_4_f80453a0(x));
-
-
-
-
-
-function DeviceExtension__DEVICE_OBJECT(ptr) returns (ptr);
-function home_DeviceExtension__DEVICE_OBJECT(ptr) returns (ptr);
-function _S_DeviceExtension__DEVICE_OBJECT([ptr]bool) returns ([ptr]bool);
-function _S_home_DeviceExtension__DEVICE_OBJECT([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {DeviceExtension__DEVICE_OBJECT(x)} home_DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:ptr :: {home_DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(home_DeviceExtension__DEVICE_OBJECT(x)) == x);
-axiom (forall x:ptr :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == Ptr(Obj(x), Off(x) + 40));
-axiom (forall x:ptr :: {home_DeviceExtension__DEVICE_OBJECT(x)} home_DeviceExtension__DEVICE_OBJECT(x) == Ptr(Obj(x), Off(x) - 40));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_DeviceExtension__DEVICE_OBJECT(S))} In(x, _S_DeviceExtension__DEVICE_OBJECT(S)) ==> In(home_DeviceExtension__DEVICE_OBJECT(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_DeviceExtension__DEVICE_OBJECT(S))} In(x, _S_home_DeviceExtension__DEVICE_OBJECT(S)) ==> In(DeviceExtension__DEVICE_OBJECT(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_DeviceExtension__DEVICE_OBJECT(S)} In(x, S) ==> In(DeviceExtension__DEVICE_OBJECT(x), _S_DeviceExtension__DEVICE_OBJECT(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_DeviceExtension__DEVICE_OBJECT(S)} In(x, S) ==> In(home_DeviceExtension__DEVICE_OBJECT(x), _S_home_DeviceExtension__DEVICE_OBJECT(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,40), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,40), 1) == home_DeviceExtension__DEVICE_OBJECT(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,40))} MINUS_LEFT_PTR(x, 1, Ptr(null,40)) == home_DeviceExtension__DEVICE_OBJECT(x));
-
-
-
-
-
-function DeviceObject__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_DeviceObject__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_DeviceObject__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_DeviceObject__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {DeviceObject__DISKETTE_EXTENSION(x)} home_DeviceObject__DISKETTE_EXTENSION(DeviceObject__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_DeviceObject__DISKETTE_EXTENSION(x)} DeviceObject__DISKETTE_EXTENSION(home_DeviceObject__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {DeviceObject__DISKETTE_EXTENSION(x)} DeviceObject__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 28));
-axiom (forall x:ptr :: {home_DeviceObject__DISKETTE_EXTENSION(x)} home_DeviceObject__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 28));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_DeviceObject__DISKETTE_EXTENSION(S))} In(x, _S_DeviceObject__DISKETTE_EXTENSION(S)) ==> In(home_DeviceObject__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_DeviceObject__DISKETTE_EXTENSION(S))} In(x, _S_home_DeviceObject__DISKETTE_EXTENSION(S)) ==> In(DeviceObject__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_DeviceObject__DISKETTE_EXTENSION(S)} In(x, S) ==> In(DeviceObject__DISKETTE_EXTENSION(x), _S_DeviceObject__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_DeviceObject__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_DeviceObject__DISKETTE_EXTENSION(x), _S_home_DeviceObject__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,28), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,28), 1) == home_DeviceObject__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,28))} MINUS_LEFT_PTR(x, 1, Ptr(null,28)) == home_DeviceObject__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function FlCancelSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_FlCancelSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_FlCancelSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_FlCancelSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {FlCancelSpinLock__DISKETTE_EXTENSION(x)} home_FlCancelSpinLock__DISKETTE_EXTENSION(FlCancelSpinLock__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_FlCancelSpinLock__DISKETTE_EXTENSION(x)} FlCancelSpinLock__DISKETTE_EXTENSION(home_FlCancelSpinLock__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {FlCancelSpinLock__DISKETTE_EXTENSION(x)} FlCancelSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_FlCancelSpinLock__DISKETTE_EXTENSION(x)} home_FlCancelSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_FlCancelSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_FlCancelSpinLock__DISKETTE_EXTENSION(S)) ==> In(home_FlCancelSpinLock__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S)) ==> In(FlCancelSpinLock__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_FlCancelSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(FlCancelSpinLock__DISKETTE_EXTENSION(x), _S_FlCancelSpinLock__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_FlCancelSpinLock__DISKETTE_EXTENSION(x), _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_FlCancelSpinLock__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_FlCancelSpinLock__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function HoldNewReqMutex__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_HoldNewReqMutex__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_HoldNewReqMutex__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_HoldNewReqMutex__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {HoldNewReqMutex__DISKETTE_EXTENSION(x)} home_HoldNewReqMutex__DISKETTE_EXTENSION(HoldNewReqMutex__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_HoldNewReqMutex__DISKETTE_EXTENSION(x)} HoldNewReqMutex__DISKETTE_EXTENSION(home_HoldNewReqMutex__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {HoldNewReqMutex__DISKETTE_EXTENSION(x)} HoldNewReqMutex__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 316));
-axiom (forall x:ptr :: {home_HoldNewReqMutex__DISKETTE_EXTENSION(x)} home_HoldNewReqMutex__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 316));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_HoldNewReqMutex__DISKETTE_EXTENSION(S))} In(x, _S_HoldNewReqMutex__DISKETTE_EXTENSION(S)) ==> In(home_HoldNewReqMutex__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S))} In(x, _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S)) ==> In(HoldNewReqMutex__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_HoldNewReqMutex__DISKETTE_EXTENSION(S)} In(x, S) ==> In(HoldNewReqMutex__DISKETTE_EXTENSION(x), _S_HoldNewReqMutex__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_HoldNewReqMutex__DISKETTE_EXTENSION(x), _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,316), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,316), 1) == home_HoldNewReqMutex__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,316))} MINUS_LEFT_PTR(x, 1, Ptr(null,316)) == home_HoldNewReqMutex__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function HoldNewRequests__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_HoldNewRequests__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_HoldNewRequests__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_HoldNewRequests__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {HoldNewRequests__DISKETTE_EXTENSION(x)} home_HoldNewRequests__DISKETTE_EXTENSION(HoldNewRequests__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_HoldNewRequests__DISKETTE_EXTENSION(x)} HoldNewRequests__DISKETTE_EXTENSION(home_HoldNewRequests__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {HoldNewRequests__DISKETTE_EXTENSION(x)} HoldNewRequests__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 14));
-axiom (forall x:ptr :: {home_HoldNewRequests__DISKETTE_EXTENSION(x)} home_HoldNewRequests__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 14));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_HoldNewRequests__DISKETTE_EXTENSION(S))} In(x, _S_HoldNewRequests__DISKETTE_EXTENSION(S)) ==> In(home_HoldNewRequests__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_HoldNewRequests__DISKETTE_EXTENSION(S))} In(x, _S_home_HoldNewRequests__DISKETTE_EXTENSION(S)) ==> In(HoldNewRequests__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_HoldNewRequests__DISKETTE_EXTENSION(S)} In(x, S) ==> In(HoldNewRequests__DISKETTE_EXTENSION(x), _S_HoldNewRequests__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_HoldNewRequests__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_HoldNewRequests__DISKETTE_EXTENSION(x), _S_home_HoldNewRequests__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,14), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,14), 1) == home_HoldNewRequests__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,14))} MINUS_LEFT_PTR(x, 1, Ptr(null,14)) == home_HoldNewRequests__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function Information__IO_STATUS_BLOCK(ptr) returns (ptr);
-function home_Information__IO_STATUS_BLOCK(ptr) returns (ptr);
-function _S_Information__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
-function _S_home_Information__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Information__IO_STATUS_BLOCK(x)} home_Information__IO_STATUS_BLOCK(Information__IO_STATUS_BLOCK(x)) == x);
-axiom (forall x:ptr :: {home_Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(home_Information__IO_STATUS_BLOCK(x)) == x);
-axiom (forall x:ptr :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) + 4));
-axiom (forall x:ptr :: {home_Information__IO_STATUS_BLOCK(x)} home_Information__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) - 4));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Information__IO_STATUS_BLOCK(S))} In(x, _S_Information__IO_STATUS_BLOCK(S)) ==> In(home_Information__IO_STATUS_BLOCK(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Information__IO_STATUS_BLOCK(S))} In(x, _S_home_Information__IO_STATUS_BLOCK(S)) ==> In(Information__IO_STATUS_BLOCK(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Information__IO_STATUS_BLOCK(S)} In(x, S) ==> In(Information__IO_STATUS_BLOCK(x), _S_Information__IO_STATUS_BLOCK(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Information__IO_STATUS_BLOCK(S)} In(x, S) ==> In(home_Information__IO_STATUS_BLOCK(x), _S_home_Information__IO_STATUS_BLOCK(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1) == home_Information__IO_STATUS_BLOCK(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,4))} MINUS_LEFT_PTR(x, 1, Ptr(null,4)) == home_Information__IO_STATUS_BLOCK(x));
-
-
-
-
-
-function IoStatus__IRP(ptr) returns (ptr);
-function home_IoStatus__IRP(ptr) returns (ptr);
-function _S_IoStatus__IRP([ptr]bool) returns ([ptr]bool);
-function _S_home_IoStatus__IRP([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {IoStatus__IRP(x)} home_IoStatus__IRP(IoStatus__IRP(x)) == x);
-axiom (forall x:ptr :: {home_IoStatus__IRP(x)} IoStatus__IRP(home_IoStatus__IRP(x)) == x);
-axiom (forall x:ptr :: {IoStatus__IRP(x)} IoStatus__IRP(x) == Ptr(Obj(x), Off(x) + 24));
-axiom (forall x:ptr :: {home_IoStatus__IRP(x)} home_IoStatus__IRP(x) == Ptr(Obj(x), Off(x) - 24));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_IoStatus__IRP(S))} In(x, _S_IoStatus__IRP(S)) ==> In(home_IoStatus__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_IoStatus__IRP(S))} In(x, _S_home_IoStatus__IRP(S)) ==> In(IoStatus__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_IoStatus__IRP(S)} In(x, S) ==> In(IoStatus__IRP(x), _S_IoStatus__IRP(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_IoStatus__IRP(S)} In(x, S) ==> In(home_IoStatus__IRP(x), _S_home_IoStatus__IRP(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1) == home_IoStatus__IRP(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,24))} MINUS_LEFT_PTR(x, 1, Ptr(null,24)) == home_IoStatus__IRP(x));
-
-
-
-
-
-function IsRemoved__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_IsRemoved__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_IsRemoved__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_IsRemoved__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {IsRemoved__DISKETTE_EXTENSION(x)} home_IsRemoved__DISKETTE_EXTENSION(IsRemoved__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_IsRemoved__DISKETTE_EXTENSION(x)} IsRemoved__DISKETTE_EXTENSION(home_IsRemoved__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {IsRemoved__DISKETTE_EXTENSION(x)} IsRemoved__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 13));
-axiom (forall x:ptr :: {home_IsRemoved__DISKETTE_EXTENSION(x)} home_IsRemoved__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 13));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_IsRemoved__DISKETTE_EXTENSION(S))} In(x, _S_IsRemoved__DISKETTE_EXTENSION(S)) ==> In(home_IsRemoved__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_IsRemoved__DISKETTE_EXTENSION(S))} In(x, _S_home_IsRemoved__DISKETTE_EXTENSION(S)) ==> In(IsRemoved__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_IsRemoved__DISKETTE_EXTENSION(S)} In(x, S) ==> In(IsRemoved__DISKETTE_EXTENSION(x), _S_IsRemoved__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_IsRemoved__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_IsRemoved__DISKETTE_EXTENSION(x), _S_home_IsRemoved__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,13), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,13), 1) == home_IsRemoved__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,13))} MINUS_LEFT_PTR(x, 1, Ptr(null,13)) == home_IsRemoved__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function IsStarted__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_IsStarted__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_IsStarted__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_IsStarted__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {IsStarted__DISKETTE_EXTENSION(x)} home_IsStarted__DISKETTE_EXTENSION(IsStarted__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_IsStarted__DISKETTE_EXTENSION(x)} IsStarted__DISKETTE_EXTENSION(home_IsStarted__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {IsStarted__DISKETTE_EXTENSION(x)} IsStarted__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 12));
-axiom (forall x:ptr :: {home_IsStarted__DISKETTE_EXTENSION(x)} home_IsStarted__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 12));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_IsStarted__DISKETTE_EXTENSION(S))} In(x, _S_IsStarted__DISKETTE_EXTENSION(S)) ==> In(home_IsStarted__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_IsStarted__DISKETTE_EXTENSION(S))} In(x, _S_home_IsStarted__DISKETTE_EXTENSION(S)) ==> In(IsStarted__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_IsStarted__DISKETTE_EXTENSION(S)} In(x, S) ==> In(IsStarted__DISKETTE_EXTENSION(x), _S_IsStarted__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_IsStarted__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_IsStarted__DISKETTE_EXTENSION(x), _S_home_IsStarted__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,12), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,12), 1) == home_IsStarted__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,12))} MINUS_LEFT_PTR(x, 1, Ptr(null,12)) == home_IsStarted__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function Length___unnamed_16_39e6661e(ptr) returns (ptr);
-function home_Length___unnamed_16_39e6661e(ptr) returns (ptr);
-function _S_Length___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
-function _S_home_Length___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Length___unnamed_16_39e6661e(x)} home_Length___unnamed_16_39e6661e(Length___unnamed_16_39e6661e(x)) == x);
-axiom (forall x:ptr :: {home_Length___unnamed_16_39e6661e(x)} Length___unnamed_16_39e6661e(home_Length___unnamed_16_39e6661e(x)) == x);
-axiom (forall x:ptr :: {Length___unnamed_16_39e6661e(x)} Length___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_Length___unnamed_16_39e6661e(x)} home_Length___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Length___unnamed_16_39e6661e(S))} In(x, _S_Length___unnamed_16_39e6661e(S)) ==> In(home_Length___unnamed_16_39e6661e(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Length___unnamed_16_39e6661e(S))} In(x, _S_home_Length___unnamed_16_39e6661e(S)) ==> In(Length___unnamed_16_39e6661e(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Length___unnamed_16_39e6661e(S)} In(x, S) ==> In(Length___unnamed_16_39e6661e(x), _S_Length___unnamed_16_39e6661e(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Length___unnamed_16_39e6661e(S)} In(x, S) ==> In(home_Length___unnamed_16_39e6661e(x), _S_home_Length___unnamed_16_39e6661e(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Length___unnamed_16_39e6661e(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Length___unnamed_16_39e6661e(x));
-
-
-
-
-
-function ListEntry___unnamed_12_003c1454(ptr) returns (ptr);
-function home_ListEntry___unnamed_12_003c1454(ptr) returns (ptr);
-function _S_ListEntry___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
-function _S_home_ListEntry___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {ListEntry___unnamed_12_003c1454(x)} home_ListEntry___unnamed_12_003c1454(ListEntry___unnamed_12_003c1454(x)) == x);
-axiom (forall x:ptr :: {home_ListEntry___unnamed_12_003c1454(x)} ListEntry___unnamed_12_003c1454(home_ListEntry___unnamed_12_003c1454(x)) == x);
-axiom (forall x:ptr :: {ListEntry___unnamed_12_003c1454(x)} ListEntry___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_ListEntry___unnamed_12_003c1454(x)} home_ListEntry___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ListEntry___unnamed_12_003c1454(S))} In(x, _S_ListEntry___unnamed_12_003c1454(S)) ==> In(home_ListEntry___unnamed_12_003c1454(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ListEntry___unnamed_12_003c1454(S))} In(x, _S_home_ListEntry___unnamed_12_003c1454(S)) ==> In(ListEntry___unnamed_12_003c1454(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ListEntry___unnamed_12_003c1454(S)} In(x, S) ==> In(ListEntry___unnamed_12_003c1454(x), _S_ListEntry___unnamed_12_003c1454(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ListEntry___unnamed_12_003c1454(S)} In(x, S) ==> In(home_ListEntry___unnamed_12_003c1454(x), _S_home_ListEntry___unnamed_12_003c1454(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_ListEntry___unnamed_12_003c1454(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_ListEntry___unnamed_12_003c1454(x));
-
-
-
-
-
-function ListSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_ListSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_ListSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_ListSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {ListSpinLock__DISKETTE_EXTENSION(x)} home_ListSpinLock__DISKETTE_EXTENSION(ListSpinLock__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_ListSpinLock__DISKETTE_EXTENSION(x)} ListSpinLock__DISKETTE_EXTENSION(home_ListSpinLock__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {ListSpinLock__DISKETTE_EXTENSION(x)} ListSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 52));
-axiom (forall x:ptr :: {home_ListSpinLock__DISKETTE_EXTENSION(x)} home_ListSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 52));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ListSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_ListSpinLock__DISKETTE_EXTENSION(S)) ==> In(home_ListSpinLock__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ListSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_home_ListSpinLock__DISKETTE_EXTENSION(S)) ==> In(ListSpinLock__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ListSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(ListSpinLock__DISKETTE_EXTENSION(x), _S_ListSpinLock__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ListSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_ListSpinLock__DISKETTE_EXTENSION(x), _S_home_ListSpinLock__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,52), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,52), 1) == home_ListSpinLock__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,52))} MINUS_LEFT_PTR(x, 1, Ptr(null,52)) == home_ListSpinLock__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function LowPart___unnamed_8_34582070(ptr) returns (ptr);
-function home_LowPart___unnamed_8_34582070(ptr) returns (ptr);
-function _S_LowPart___unnamed_8_34582070([ptr]bool) returns ([ptr]bool);
-function _S_home_LowPart___unnamed_8_34582070([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {LowPart___unnamed_8_34582070(x)} home_LowPart___unnamed_8_34582070(LowPart___unnamed_8_34582070(x)) == x);
-axiom (forall x:ptr :: {home_LowPart___unnamed_8_34582070(x)} LowPart___unnamed_8_34582070(home_LowPart___unnamed_8_34582070(x)) == x);
-axiom (forall x:ptr :: {LowPart___unnamed_8_34582070(x)} LowPart___unnamed_8_34582070(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_LowPart___unnamed_8_34582070(x)} home_LowPart___unnamed_8_34582070(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_LowPart___unnamed_8_34582070(S))} In(x, _S_LowPart___unnamed_8_34582070(S)) ==> In(home_LowPart___unnamed_8_34582070(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_LowPart___unnamed_8_34582070(S))} In(x, _S_home_LowPart___unnamed_8_34582070(S)) ==> In(LowPart___unnamed_8_34582070(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_LowPart___unnamed_8_34582070(S)} In(x, S) ==> In(LowPart___unnamed_8_34582070(x), _S_LowPart___unnamed_8_34582070(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_LowPart___unnamed_8_34582070(S)} In(x, S) ==> In(home_LowPart___unnamed_8_34582070(x), _S_home_LowPart___unnamed_8_34582070(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_LowPart___unnamed_8_34582070(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_LowPart___unnamed_8_34582070(x));
-
-
-
-
-
-function MediaType__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_MediaType__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_MediaType__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_MediaType__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {MediaType__DISKETTE_EXTENSION(x)} home_MediaType__DISKETTE_EXTENSION(MediaType__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_MediaType__DISKETTE_EXTENSION(x)} MediaType__DISKETTE_EXTENSION(home_MediaType__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {MediaType__DISKETTE_EXTENSION(x)} MediaType__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 156));
-axiom (forall x:ptr :: {home_MediaType__DISKETTE_EXTENSION(x)} home_MediaType__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 156));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_MediaType__DISKETTE_EXTENSION(S))} In(x, _S_MediaType__DISKETTE_EXTENSION(S)) ==> In(home_MediaType__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_MediaType__DISKETTE_EXTENSION(S))} In(x, _S_home_MediaType__DISKETTE_EXTENSION(S)) ==> In(MediaType__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_MediaType__DISKETTE_EXTENSION(S)} In(x, S) ==> In(MediaType__DISKETTE_EXTENSION(x), _S_MediaType__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_MediaType__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_MediaType__DISKETTE_EXTENSION(x), _S_home_MediaType__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,156), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,156), 1) == home_MediaType__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,156))} MINUS_LEFT_PTR(x, 1, Ptr(null,156)) == home_MediaType__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function NewRequestQueueSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} NewRequestQueueSpinLock__DISKETTE_EXTENSION(home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} NewRequestQueueSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 24));
-axiom (forall x:ptr :: {home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 24));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)) ==> In(home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)) ==> In(NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1) == home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,24))} MINUS_LEFT_PTR(x, 1, Ptr(null,24)) == home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function NewRequestQueue__DISKETTE_EXTENSION(ptr) returns (ptr);
-function home_NewRequestQueue__DISKETTE_EXTENSION(ptr) returns (ptr);
-function _S_NewRequestQueue__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-function _S_home_NewRequestQueue__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {NewRequestQueue__DISKETTE_EXTENSION(x)} home_NewRequestQueue__DISKETTE_EXTENSION(NewRequestQueue__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {home_NewRequestQueue__DISKETTE_EXTENSION(x)} NewRequestQueue__DISKETTE_EXTENSION(home_NewRequestQueue__DISKETTE_EXTENSION(x)) == x);
-axiom (forall x:ptr :: {NewRequestQueue__DISKETTE_EXTENSION(x)} NewRequestQueue__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 16));
-axiom (forall x:ptr :: {home_NewRequestQueue__DISKETTE_EXTENSION(x)} home_NewRequestQueue__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 16));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_NewRequestQueue__DISKETTE_EXTENSION(S))} In(x, _S_NewRequestQueue__DISKETTE_EXTENSION(S)) ==> In(home_NewRequestQueue__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_NewRequestQueue__DISKETTE_EXTENSION(S))} In(x, _S_home_NewRequestQueue__DISKETTE_EXTENSION(S)) ==> In(NewRequestQueue__DISKETTE_EXTENSION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_NewRequestQueue__DISKETTE_EXTENSION(S)} In(x, S) ==> In(NewRequestQueue__DISKETTE_EXTENSION(x), _S_NewRequestQueue__DISKETTE_EXTENSION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_NewRequestQueue__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_NewRequestQueue__DISKETTE_EXTENSION(x), _S_home_NewRequestQueue__DISKETTE_EXTENSION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,16), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,16), 1) == home_NewRequestQueue__DISKETTE_EXTENSION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,16))} MINUS_LEFT_PTR(x, 1, Ptr(null,16)) == home_NewRequestQueue__DISKETTE_EXTENSION(x));
-
-
-
-
-
-function Overlay___unnamed_48_c27ef811(ptr) returns (ptr);
-function home_Overlay___unnamed_48_c27ef811(ptr) returns (ptr);
-function _S_Overlay___unnamed_48_c27ef811([ptr]bool) returns ([ptr]bool);
-function _S_home_Overlay___unnamed_48_c27ef811([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Overlay___unnamed_48_c27ef811(x)} home_Overlay___unnamed_48_c27ef811(Overlay___unnamed_48_c27ef811(x)) == x);
-axiom (forall x:ptr :: {home_Overlay___unnamed_48_c27ef811(x)} Overlay___unnamed_48_c27ef811(home_Overlay___unnamed_48_c27ef811(x)) == x);
-axiom (forall x:ptr :: {Overlay___unnamed_48_c27ef811(x)} Overlay___unnamed_48_c27ef811(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_Overlay___unnamed_48_c27ef811(x)} home_Overlay___unnamed_48_c27ef811(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Overlay___unnamed_48_c27ef811(S))} In(x, _S_Overlay___unnamed_48_c27ef811(S)) ==> In(home_Overlay___unnamed_48_c27ef811(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Overlay___unnamed_48_c27ef811(S))} In(x, _S_home_Overlay___unnamed_48_c27ef811(S)) ==> In(Overlay___unnamed_48_c27ef811(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Overlay___unnamed_48_c27ef811(S)} In(x, S) ==> In(Overlay___unnamed_48_c27ef811(x), _S_Overlay___unnamed_48_c27ef811(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Overlay___unnamed_48_c27ef811(S)} In(x, S) ==> In(home_Overlay___unnamed_48_c27ef811(x), _S_home_Overlay___unnamed_48_c27ef811(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Overlay___unnamed_48_c27ef811(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Overlay___unnamed_48_c27ef811(x));
-
-
-
-
-
-function Parameters__IO_STACK_LOCATION(ptr) returns (ptr);
-function home_Parameters__IO_STACK_LOCATION(ptr) returns (ptr);
-function _S_Parameters__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
-function _S_home_Parameters__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Parameters__IO_STACK_LOCATION(x)} home_Parameters__IO_STACK_LOCATION(Parameters__IO_STACK_LOCATION(x)) == x);
-axiom (forall x:ptr :: {home_Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(home_Parameters__IO_STACK_LOCATION(x)) == x);
-axiom (forall x:ptr :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) + 4));
-axiom (forall x:ptr :: {home_Parameters__IO_STACK_LOCATION(x)} home_Parameters__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) - 4));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Parameters__IO_STACK_LOCATION(S))} In(x, _S_Parameters__IO_STACK_LOCATION(S)) ==> In(home_Parameters__IO_STACK_LOCATION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Parameters__IO_STACK_LOCATION(S))} In(x, _S_home_Parameters__IO_STACK_LOCATION(S)) ==> In(Parameters__IO_STACK_LOCATION(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Parameters__IO_STACK_LOCATION(S)} In(x, S) ==> In(Parameters__IO_STACK_LOCATION(x), _S_Parameters__IO_STACK_LOCATION(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Parameters__IO_STACK_LOCATION(S)} In(x, S) ==> In(home_Parameters__IO_STACK_LOCATION(x), _S_home_Parameters__IO_STACK_LOCATION(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1) == home_Parameters__IO_STACK_LOCATION(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,4))} MINUS_LEFT_PTR(x, 1, Ptr(null,4)) == home_Parameters__IO_STACK_LOCATION(x));
-
-
-
-
-
-function Read___unnamed_16_c0f0e7de(ptr) returns (ptr);
-function home_Read___unnamed_16_c0f0e7de(ptr) returns (ptr);
-function _S_Read___unnamed_16_c0f0e7de([ptr]bool) returns ([ptr]bool);
-function _S_home_Read___unnamed_16_c0f0e7de([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Read___unnamed_16_c0f0e7de(x)} home_Read___unnamed_16_c0f0e7de(Read___unnamed_16_c0f0e7de(x)) == x);
-axiom (forall x:ptr :: {home_Read___unnamed_16_c0f0e7de(x)} Read___unnamed_16_c0f0e7de(home_Read___unnamed_16_c0f0e7de(x)) == x);
-axiom (forall x:ptr :: {Read___unnamed_16_c0f0e7de(x)} Read___unnamed_16_c0f0e7de(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_Read___unnamed_16_c0f0e7de(x)} home_Read___unnamed_16_c0f0e7de(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Read___unnamed_16_c0f0e7de(S))} In(x, _S_Read___unnamed_16_c0f0e7de(S)) ==> In(home_Read___unnamed_16_c0f0e7de(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Read___unnamed_16_c0f0e7de(S))} In(x, _S_home_Read___unnamed_16_c0f0e7de(S)) ==> In(Read___unnamed_16_c0f0e7de(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Read___unnamed_16_c0f0e7de(S)} In(x, S) ==> In(Read___unnamed_16_c0f0e7de(x), _S_Read___unnamed_16_c0f0e7de(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Read___unnamed_16_c0f0e7de(S)} In(x, S) ==> In(home_Read___unnamed_16_c0f0e7de(x), _S_home_Read___unnamed_16_c0f0e7de(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Read___unnamed_16_c0f0e7de(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Read___unnamed_16_c0f0e7de(x));
-
-
-
-
-
-function Status___unnamed_4_c7b3d275(ptr) returns (ptr);
-function home_Status___unnamed_4_c7b3d275(ptr) returns (ptr);
-function _S_Status___unnamed_4_c7b3d275([ptr]bool) returns ([ptr]bool);
-function _S_home_Status___unnamed_4_c7b3d275([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Status___unnamed_4_c7b3d275(x)} home_Status___unnamed_4_c7b3d275(Status___unnamed_4_c7b3d275(x)) == x);
-axiom (forall x:ptr :: {home_Status___unnamed_4_c7b3d275(x)} Status___unnamed_4_c7b3d275(home_Status___unnamed_4_c7b3d275(x)) == x);
-axiom (forall x:ptr :: {Status___unnamed_4_c7b3d275(x)} Status___unnamed_4_c7b3d275(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home_Status___unnamed_4_c7b3d275(x)} home_Status___unnamed_4_c7b3d275(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Status___unnamed_4_c7b3d275(S))} In(x, _S_Status___unnamed_4_c7b3d275(S)) ==> In(home_Status___unnamed_4_c7b3d275(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Status___unnamed_4_c7b3d275(S))} In(x, _S_home_Status___unnamed_4_c7b3d275(S)) ==> In(Status___unnamed_4_c7b3d275(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Status___unnamed_4_c7b3d275(S)} In(x, S) ==> In(Status___unnamed_4_c7b3d275(x), _S_Status___unnamed_4_c7b3d275(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Status___unnamed_4_c7b3d275(S)} In(x, S) ==> In(home_Status___unnamed_4_c7b3d275(x), _S_home_Status___unnamed_4_c7b3d275(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Status___unnamed_4_c7b3d275(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Status___unnamed_4_c7b3d275(x));
-
-
-
-
-
-function Tail__IRP(ptr) returns (ptr);
-function home_Tail__IRP(ptr) returns (ptr);
-function _S_Tail__IRP([ptr]bool) returns ([ptr]bool);
-function _S_home_Tail__IRP([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {Tail__IRP(x)} home_Tail__IRP(Tail__IRP(x)) == x);
-axiom (forall x:ptr :: {home_Tail__IRP(x)} Tail__IRP(home_Tail__IRP(x)) == x);
-axiom (forall x:ptr :: {Tail__IRP(x)} Tail__IRP(x) == Ptr(Obj(x), Off(x) + 64));
-axiom (forall x:ptr :: {home_Tail__IRP(x)} home_Tail__IRP(x) == Ptr(Obj(x), Off(x) - 64));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Tail__IRP(S))} In(x, _S_Tail__IRP(S)) ==> In(home_Tail__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Tail__IRP(S))} In(x, _S_home_Tail__IRP(S)) ==> In(Tail__IRP(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Tail__IRP(S)} In(x, S) ==> In(Tail__IRP(x), _S_Tail__IRP(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Tail__IRP(S)} In(x, S) ==> In(home_Tail__IRP(x), _S_home_Tail__IRP(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,64), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,64), 1) == home_Tail__IRP(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,64))} MINUS_LEFT_PTR(x, 1, Ptr(null,64)) == home_Tail__IRP(x));
-
-
-
-
-
-function __unnamed_12_003c1454___unnamed_40_6ef75b20(ptr) returns (ptr);
-function home___unnamed_12_003c1454___unnamed_40_6ef75b20(ptr) returns (ptr);
-function _S___unnamed_12_003c1454___unnamed_40_6ef75b20([ptr]bool) returns ([ptr]bool);
-function _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {__unnamed_12_003c1454___unnamed_40_6ef75b20(x)} home___unnamed_12_003c1454___unnamed_40_6ef75b20(__unnamed_12_003c1454___unnamed_40_6ef75b20(x)) == x);
-axiom (forall x:ptr :: {home___unnamed_12_003c1454___unnamed_40_6ef75b20(x)} __unnamed_12_003c1454___unnamed_40_6ef75b20(home___unnamed_12_003c1454___unnamed_40_6ef75b20(x)) == x);
-axiom (forall x:ptr :: {__unnamed_12_003c1454___unnamed_40_6ef75b20(x)} __unnamed_12_003c1454___unnamed_40_6ef75b20(x) == Ptr(Obj(x), Off(x) + 24));
-axiom (forall x:ptr :: {home___unnamed_12_003c1454___unnamed_40_6ef75b20(x)} home___unnamed_12_003c1454___unnamed_40_6ef75b20(x) == Ptr(Obj(x), Off(x) - 24));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S))} In(x, _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S)) ==> In(home___unnamed_12_003c1454___unnamed_40_6ef75b20(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S))} In(x, _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S)) ==> In(__unnamed_12_003c1454___unnamed_40_6ef75b20(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S)} In(x, S) ==> In(__unnamed_12_003c1454___unnamed_40_6ef75b20(x), _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S)} In(x, S) ==> In(home___unnamed_12_003c1454___unnamed_40_6ef75b20(x), _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1) == home___unnamed_12_003c1454___unnamed_40_6ef75b20(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,24))} MINUS_LEFT_PTR(x, 1, Ptr(null,24)) == home___unnamed_12_003c1454___unnamed_40_6ef75b20(x));
-
-
-
-
-
-function __unnamed_4_c7b3d275__IO_STATUS_BLOCK(ptr) returns (ptr);
-function home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(ptr) returns (ptr);
-function _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
-function _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)) == x);
-axiom (forall x:ptr :: {home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} __unnamed_4_c7b3d275__IO_STATUS_BLOCK(home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)) == x);
-axiom (forall x:ptr :: {__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} __unnamed_4_c7b3d275__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S))} In(x, _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)) ==> In(home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S))} In(x, _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)) ==> In(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)} In(x, S) ==> In(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)} In(x, S) ==> In(home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x));
-
-
-
-
-
-function __unnamed_4_f80453a0___unnamed_12_003c1454(ptr) returns (ptr);
-function home___unnamed_4_f80453a0___unnamed_12_003c1454(ptr) returns (ptr);
-function _S___unnamed_4_f80453a0___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
-function _S_home___unnamed_4_f80453a0___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {__unnamed_4_f80453a0___unnamed_12_003c1454(x)} home___unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_4_f80453a0___unnamed_12_003c1454(x)) == x);
-axiom (forall x:ptr :: {home___unnamed_4_f80453a0___unnamed_12_003c1454(x)} __unnamed_4_f80453a0___unnamed_12_003c1454(home___unnamed_4_f80453a0___unnamed_12_003c1454(x)) == x);
-axiom (forall x:ptr :: {__unnamed_4_f80453a0___unnamed_12_003c1454(x)} __unnamed_4_f80453a0___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) + 8));
-axiom (forall x:ptr :: {home___unnamed_4_f80453a0___unnamed_12_003c1454(x)} home___unnamed_4_f80453a0___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) - 8));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_4_f80453a0___unnamed_12_003c1454(S))} In(x, _S___unnamed_4_f80453a0___unnamed_12_003c1454(S)) ==> In(home___unnamed_4_f80453a0___unnamed_12_003c1454(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S))} In(x, _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S)) ==> In(__unnamed_4_f80453a0___unnamed_12_003c1454(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_4_f80453a0___unnamed_12_003c1454(S)} In(x, S) ==> In(__unnamed_4_f80453a0___unnamed_12_003c1454(x), _S___unnamed_4_f80453a0___unnamed_12_003c1454(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S)} In(x, S) ==> In(home___unnamed_4_f80453a0___unnamed_12_003c1454(x), _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1) == home___unnamed_4_f80453a0___unnamed_12_003c1454(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,8))} MINUS_LEFT_PTR(x, 1, Ptr(null,8)) == home___unnamed_4_f80453a0___unnamed_12_003c1454(x));
-
-
-
-
-
-function __unnamed_8_34582070__LARGE_INTEGER(ptr) returns (ptr);
-function home___unnamed_8_34582070__LARGE_INTEGER(ptr) returns (ptr);
-function _S___unnamed_8_34582070__LARGE_INTEGER([ptr]bool) returns ([ptr]bool);
-function _S_home___unnamed_8_34582070__LARGE_INTEGER([ptr]bool) returns ([ptr]bool);
-
-axiom (forall x:ptr :: {__unnamed_8_34582070__LARGE_INTEGER(x)} home___unnamed_8_34582070__LARGE_INTEGER(__unnamed_8_34582070__LARGE_INTEGER(x)) == x);
-axiom (forall x:ptr :: {home___unnamed_8_34582070__LARGE_INTEGER(x)} __unnamed_8_34582070__LARGE_INTEGER(home___unnamed_8_34582070__LARGE_INTEGER(x)) == x);
-axiom (forall x:ptr :: {__unnamed_8_34582070__LARGE_INTEGER(x)} __unnamed_8_34582070__LARGE_INTEGER(x) == Ptr(Obj(x), Off(x) + 0));
-axiom (forall x:ptr :: {home___unnamed_8_34582070__LARGE_INTEGER(x)} home___unnamed_8_34582070__LARGE_INTEGER(x) == Ptr(Obj(x), Off(x) - 0));
-
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_8_34582070__LARGE_INTEGER(S))} In(x, _S___unnamed_8_34582070__LARGE_INTEGER(S)) ==> In(home___unnamed_8_34582070__LARGE_INTEGER(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_8_34582070__LARGE_INTEGER(S))} In(x, _S_home___unnamed_8_34582070__LARGE_INTEGER(S)) ==> In(__unnamed_8_34582070__LARGE_INTEGER(x), S));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_8_34582070__LARGE_INTEGER(S)} In(x, S) ==> In(__unnamed_8_34582070__LARGE_INTEGER(x), _S___unnamed_8_34582070__LARGE_INTEGER(S)));
-axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_8_34582070__LARGE_INTEGER(S)} In(x, S) ==> In(home___unnamed_8_34582070__LARGE_INTEGER(x), _S_home___unnamed_8_34582070__LARGE_INTEGER(S)));
-
-axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home___unnamed_8_34582070__LARGE_INTEGER(x));
-axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home___unnamed_8_34582070__LARGE_INTEGER(x));
-
-
-
-// Axiom for null constraint
-//modifying to make the signature match with old BSConstraint that constrains Mem
-function BSConstraint
-(
- BS:[ptr]bool,
- Mem:[ptr]ptr
-) returns (bool);
-
-axiom (
- forall
- BS:[ptr]bool, Mem:[ptr]ptr :: {BSConstraint(BS,Mem)}
-
- BSConstraint(BS,Mem)
- ==>
- (
- (forall i:int :: {Ptr(null,i)} BS[Ptr(null,i)])
-/*
- &&
-
- (forall a:ptr :: {BS[a]} Element(a))
-*/
- )
-);
-procedure __delBS(a:ptr);
-requires(BS[a]);
-modifies BS;
-ensures(forall x:ptr :: {BS[x]} x == a || (old(BS)[x] <==> BS[x]));
-ensures(!BS[a]);
-
-procedure __addBS(a:ptr);
-requires(!BS[a]);
-modifies BS;
-ensures(forall x:ptr :: {BS[x]} x == a || (old(BS)[x] <==> BS[x]));
-ensures(BS[a]);
-
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:ptr, b:ptr, size:int) returns (ptr);
-axiom(forall a:ptr, b:ptr, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-(Obj(a) == Obj(b) ==> Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == null && size * Off(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Off(a) - Off(b))
-&&
-(Obj(b) == null && size == 1 ==> Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Obj(a) && Off(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Off(a) - Off(b))
-&&
-(Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == null || Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Obj(a) || Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Obj(b))
-);
-
-function MINUS_LEFT_PTR(a:ptr, a_size:int, b:ptr) returns (ptr);
-axiom(forall a:ptr, a_size:int, b:ptr :: {MINUS_LEFT_PTR(a,a_size,b)}
-(Obj(b) == null ==> Obj(MINUS_LEFT_PTR(a,a_size,b)) == Obj(a) && Off(MINUS_LEFT_PTR(a,a_size,b)) == Off(a) - a_size * Off(b))
-&&
-(Obj(a) == Obj(b) && a_size == 1 ==> Obj(MINUS_LEFT_PTR(a,a_size,b)) == null && Off(MINUS_LEFT_PTR(a,a_size,b)) == Off(a) - Off(b))
-&&
-(Obj(MINUS_LEFT_PTR(a,a_size,b)) == null || Obj(MINUS_LEFT_PTR(a,a_size,b)) == Obj(a) || Obj(MINUS_LEFT_PTR(a,a_size,b)) == Obj(b))
-);
-
-function PLUS(a:ptr, a_size:int, b:ptr) returns (ptr);
-axiom(forall a:ptr, a_size:int, b:ptr :: {PLUS(a,a_size,b)}
-(Obj(b) == null ==> Obj(PLUS(a,a_size,b)) == Obj(a) && Off(PLUS(a,a_size,b)) == Off(a) + a_size * Off(b))
-&&
-(Obj(a) == null && a_size == 1 ==> Obj(PLUS(a,a_size,b)) == Obj(b) && Off(PLUS(a,a_size,b)) == Off(a) + Off(b))
-&&
-(Obj(PLUS(a,a_size,b)) == null || Obj(PLUS(a,a_size,b)) == Obj(a) || Obj(PLUS(a,a_size,b)) == Obj(b))
-);
-
-function MULT(a:ptr, b:ptr) returns (ptr);
-axiom(forall a:ptr, b:ptr :: {MULT(a,b)} Obj(MULT(a,b)) == null);
-
-function BINARY_BOTH_INT(a:ptr, b:ptr) returns (ptr);
-axiom(forall a:ptr, b:ptr :: {BINARY_BOTH_INT(a,b)} Obj(BINARY_BOTH_INT(a,b)) == null);
-
-function POW2(a:ptr) returns (bool);
-axiom POW2(Ptr(null,1));
-axiom POW2(Ptr(null,2));
-axiom POW2(Ptr(null,4));
-axiom POW2(Ptr(null,8));
-axiom POW2(Ptr(null,16));
-axiom POW2(Ptr(null,32));
-axiom POW2(Ptr(null,64));
-axiom POW2(Ptr(null,128));
-axiom POW2(Ptr(null,256));
-axiom POW2(Ptr(null,512));
-axiom POW2(Ptr(null,1024));
-axiom POW2(Ptr(null,2048));
-axiom POW2(Ptr(null,4096));
-axiom POW2(Ptr(null,8192));
-axiom POW2(Ptr(null,16384));
-axiom POW2(Ptr(null,32768));
-axiom POW2(Ptr(null,65536));
-axiom POW2(Ptr(null,131072));
-axiom POW2(Ptr(null,262144));
-axiom POW2(Ptr(null,524288));
-axiom POW2(Ptr(null,1048576));
-axiom POW2(Ptr(null,2097152));
-axiom POW2(Ptr(null,4194304));
-axiom POW2(Ptr(null,8388608));
-axiom POW2(Ptr(null,16777216));
-axiom POW2(Ptr(null,33554432));
-
-axiom (forall n:int, m:int :: {Ptr(null,n),POW2(Ptr(null,m))} POW2(Ptr(null,m)) && m < n && n < 2*m ==> !POW2(Ptr(null,n)));
-
-function choose(a:bool, b:ptr, c:ptr) returns (x:ptr);
-axiom(forall a:bool, b:ptr, c:ptr :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:ptr, c:ptr :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:ptr, b:ptr) returns (x:ptr);
-axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} Obj(BIT_BAND(a,b)) == null || Obj(BIT_BAND(a,b)) == Obj(a) || Obj(BIT_BAND(a,b)) == Obj(b));
-axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == Ptr(null,0));
-axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} a == Ptr(null,0) || b == Ptr(null,0) ==> BIT_BAND(a,b) == Ptr(null,0));
-axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(a,b),c)} BIT_BAND(BIT_BAND(a,b),c) == c <==> BIT_BAND(a,c) == c && BIT_BAND(b,c) == c);
-
-function BIT_BOR(a:ptr, b:ptr) returns (x:ptr);
-axiom(forall a:ptr, b:ptr :: {BIT_BOR(a,b)} Obj(BIT_BOR(a,b)) == null || Obj(BIT_BOR(a,b)) == Obj(a) || Obj(BIT_BOR(a,b)) == Obj(b));
-axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BOR(a,b),c)} BIT_BAND(a,c) != Ptr(null,0) || BIT_BAND(b,c) != Ptr(null,0) <==> BIT_BAND(BIT_BOR(a,b),c) != Ptr(null,0));
-axiom(forall n:int, m:int :: {POW2(Ptr(null,n)), POW2(Ptr(null,m))} n > 0 && POW2(Ptr(null,m)) && m < n && 2*m > n ==>
- Ptr(null, n) == BIT_BOR(Ptr(null, m), Ptr(null, n - m)));
-
-
-function BIT_BXOR(a:ptr, b:ptr) returns (x:ptr);
-axiom(forall a:ptr, b:ptr :: {BIT_BXOR(a,b)} Obj(BIT_BXOR(a,b)) == null || Obj(BIT_BXOR(a,b)) == Obj(a) || Obj(BIT_BXOR(a,b)) == Obj(b));
-
-function BIT_BNOT(a:ptr) returns (ptr);
-axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} a == BIT_BNOT(b) || b == BIT_BNOT(a) ==> BIT_BAND(a,b) == Ptr(null,0));
-axiom(forall a:ptr, b:ptr :: {BIT_BNOT(BIT_BOR(a,b))} BIT_BNOT(BIT_BOR(a,b)) == BIT_BAND(BIT_BNOT(a),BIT_BNOT(b)));
-axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(a,b),c)} a == BIT_BNOT(c) || b == BIT_BNOT(c) ==> BIT_BAND(BIT_BAND(a,b),c) == Ptr(null,0));
-axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(BIT_BNOT(a),b),c)} POW2(c) && POW2(a) && c != a ==>
- (BIT_BAND(b,c) != Ptr(null,0) <==> BIT_BAND(BIT_BAND(BIT_BNOT(a),b),c) != Ptr(null,0)));
-axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(a,BIT_BNOT(b)),c)} POW2(c) && POW2(b) && c != b ==>
- (BIT_BAND(a,c) != Ptr(null,0) <==> BIT_BAND(BIT_BAND(a,BIT_BNOT(b)),c) != Ptr(null,0)));
-
-
-function LIFT(a:bool) returns (ptr);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != Ptr(null,0));
-axiom(forall a:bool :: {LIFT(a)} Obj(LIFT(a)) == null); // need to show T_char(LIFT(a))
-
-function NOT(a:ptr) returns (ptr);
-axiom(forall a:ptr :: {NOT(a)} a == Ptr(null,0) ==> NOT(a) != Ptr(null,0));
-axiom(forall a:ptr :: {NOT(a)} a != Ptr(null,0) ==> NOT(a) == Ptr(null,0));
-
-function NULL_CHECK(a:ptr) returns (ptr);
-axiom(forall a:ptr :: {NULL_CHECK(a)} a == Ptr(null,0) ==> NULL_CHECK(a) != Ptr(null,0));
-axiom(forall a:ptr :: {NULL_CHECK(a)} a != Ptr(null,0) ==> NULL_CHECK(a) == Ptr(null,0));
-
-
-function FreshObj(alloc:[ref]name, old_alloc:[ref]name, p: ptr) returns (bool);
-axiom(forall alloc:[ref]name, old_alloc:[ref]name, p: ptr :: {FreshObj(alloc, old_alloc, p)}
- FreshObj(alloc, old_alloc, p) <==> alloc[Obj(p)] == ALLOCATED && old_alloc[Obj(p)] == UNALLOCATED
-);
-
-
-procedure nondet_choice() returns (x:ptr);
-ensures (Obj(x) == null);
-
-procedure CreateMutexA$12 (a0:ptr, a1:ptr, a2:ptr) returns (new:ptr);
-modifies alloc;
-ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
-ensures (Size(Obj(new)) == 1);
-ensures (Off(new) == 0);
-ensures (Obj(new) != null);
-ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
-ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
-ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
-ensures (Mem[new] == Ptr(null,0));
-
-procedure WaitForSingleObject$8 (lock :ptr, wait:ptr) returns (status:ptr);
-modifies Mem;
-ensures (forall x:ptr :: {Mem[x]} x == lock || old(Mem)[x] == Mem[x]);
-ensures (old(Mem)[lock] == Ptr(null,0) && Mem[lock] == Ptr(null,1));
-
-procedure ReleaseMutex$4 (lock:ptr) returns (status:ptr);
-modifies Mem;
-ensures (forall x:ptr :: {Mem[x]} x == lock || old(Mem)[x] == Mem[x]);
-ensures (old(Mem)[lock] == Ptr(null,1) && Mem[lock] == Ptr(null,0));
-
-
-
-procedure havoc_assert(i:ptr);
-requires (i != Ptr(null, 0));
-
-procedure havoc_assume(i:ptr);
-ensures (i != Ptr(null, 0));
-
-
-procedure __HAVOC_free(a:ptr);
-modifies alloc;
-//requires (alloc[Obj(a)] == ALLOCATED);
-//requires (Off(a) == 0);
-ensures (alloc[Obj(a)] != UNALLOCATED);
-ensures (alloc[Obj(a)] != ALLOCATED);
-ensures (forall x_obj:ref :: {alloc[x_obj]} Obj(a) == x_obj || old(alloc)[x_obj] == alloc[x_obj]);
-
-procedure __HAVOC_malloc_heap(obj_size:ptr) returns (new:ptr);
-modifies alloc;
-ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
-ensures (Size(Obj(new)) == Off(obj_size));
-ensures (Off(new) == 0);
-ensures (Obj(new) != null);
-ensures (IsHeap(Obj(new)));
-ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
-ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
-ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
-
-
-procedure __HAVOC_malloc_stack(obj_size:ptr) returns (new:ptr);
-modifies alloc;
-ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
-ensures (Size(Obj(new)) == Off(obj_size));
-ensures (Off(new) == 0);
-ensures (Obj(new) != null);
-ensures (!IsHeap(Obj(new)));
-ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
-ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
-ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
-
-procedure _strdup(str:ptr) returns (new:ptr);
-modifies alloc;
-ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
-ensures (Off(new) == 0);
-ensures (Obj(new) != null);
-ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
-ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
-ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
-
-procedure _xstrcasecmp(a0:ptr, a1:ptr) returns (ret:ptr);
-
-procedure _xstrcmp(a0:ptr, a1:ptr) returns (ret:ptr);
-var Mem_ByteCapacity__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_ByteOffset___unnamed_16_39e6661e:[ptr]ptr;
-var Mem_BytesPerSector__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_CHAR:[ptr]ptr;
-var Mem_CancelRoutine__IRP:[ptr]ptr;
-var Mem_Cancel__IRP:[ptr]ptr;
-var Mem_Control__IO_STACK_LOCATION:[ptr]ptr;
-var Mem_CurrentStackLocation___unnamed_4_f80453a0:[ptr]ptr;
-var Mem_DeviceExtension__DEVICE_OBJECT:[ptr]ptr;
-var Mem_DeviceObject__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_FUNCTION:[ptr]ptr;
-var Mem_FlCancelSpinLock__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_HoldNewReqMutex__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_HoldNewRequests__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_INT4:[ptr]ptr;
-var Mem_Information__IO_STATUS_BLOCK:[ptr]ptr;
-var Mem_IoStatus__IRP:[ptr]ptr;
-var Mem_IsRemoved__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_IsStarted__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_Length___unnamed_16_39e6661e:[ptr]ptr;
-var Mem_ListEntry___unnamed_12_003c1454:[ptr]ptr;
-var Mem_ListSpinLock__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_LowPart___unnamed_8_34582070:[ptr]ptr;
-var Mem_MediaType__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_NewRequestQueue__DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_Overlay___unnamed_48_c27ef811:[ptr]ptr;
-var Mem_PCHAR:[ptr]ptr;
-var Mem_PFUNCTION:[ptr]ptr;
-var Mem_PPFUNCTION:[ptr]ptr;
-var Mem_PUINT4:[ptr]ptr;
-var Mem_PVOID:[ptr]ptr;
-var Mem_P_DISKETTE_EXTENSION:[ptr]ptr;
-var Mem_P_FAST_MUTEX:[ptr]ptr;
-var Mem_P_IO_STACK_LOCATION:[ptr]ptr;
-var Mem_P_LIST_ENTRY:[ptr]ptr;
-var Mem_Parameters__IO_STACK_LOCATION:[ptr]ptr;
-var Mem_Read___unnamed_16_c0f0e7de:[ptr]ptr;
-var Mem_Status___unnamed_4_c7b3d275:[ptr]ptr;
-var Mem_Tail__IRP:[ptr]ptr;
-var Mem_UCHAR:[ptr]ptr;
-var Mem_UINT4:[ptr]ptr;
-var Mem___unnamed_12_003c1454___unnamed_40_6ef75b20:[ptr]ptr;
-var Mem___unnamed_4_c7b3d275__IO_STATUS_BLOCK:[ptr]ptr;
-var Mem___unnamed_4_f80453a0___unnamed_12_003c1454:[ptr]ptr;
-var Mem___unnamed_8_34582070__LARGE_INTEGER:[ptr]ptr;
-
-var Res_IRQL:[ptr]ptr;
-var Res_SPINLOCK:[ptr]ptr;
-var Res_SPINLOCK_IRQL:[ptr]ptr;
-
-
-
-const unique DriverEntry : ptr;
-const unique DriverEntry_ref : ref;
-const unique FloppyCancelQueuedRequest : ptr;
-const unique FloppyCancelQueuedRequest_ref : ref;
-var FloppyDebugLevel : ptr;
-var PagingMutex : ptr;
-var PagingReferenceCount : ptr;
-const {:existential true} $FloppyQueueRequest$pre$0 : bool;
-const {:existential true} $FloppyQueueRequest$pre$1 : bool;
-const {:existential true} $FloppyQueueRequest$pre$2 : bool;
-const {:existential true} $FloppyQueueRequest$pre$3 : bool;
-const {:existential true} $FloppyQueueRequest$post$12 : bool;
-const {:existential true} $FloppyQueueRequest$post$13 : bool;
-const {:existential true} $FloppyQueueRequest$post$14 : bool;
-const {:existential true} $FloppyQueueRequest$post$15 : bool;
-const {:existential true} $FloppyQueueRequest$mod$16 : bool;
-const {:existential true} $FloppyQueueRequest$mod$17 : bool;
-const {:existential true} $FloppyQueueRequest$mod$18 : bool;
-const {:existential true} $FloppyQueueRequest$mod$19 : bool;
-const {:existential true} $FloppyQueueRequest$mod$20 : bool;
-const {:existential true} $FloppyQueueRequest$mod$21 : bool;
-const {:existential true} $FloppyReadWrite$pre$42 : bool;
-const {:existential true} $FloppyReadWrite$pre$43 : bool;
-const {:existential true} $FloppyReadWrite$pre$44 : bool;
-const {:existential true} $FloppyReadWrite$pre$45 : bool;
-const {:existential true} $FloppyReadWrite$pre$46 : bool;
-const {:existential true} $FloppyReadWrite$post$57 : bool;
-const {:existential true} $FloppyReadWrite$post$58 : bool;
-const {:existential true} $FloppyReadWrite$post$59 : bool;
-const {:existential true} $FloppyReadWrite$post$60 : bool;
-const {:existential true} $FloppyReadWrite$post$61 : bool;
-const {:existential true} $FloppyReadWrite$mod$62 : bool;
-const {:existential true} $FloppyReadWrite$mod$63 : bool;
-const {:existential true} $FloppyReadWrite$mod$64 : bool;
-const {:existential true} $FloppyReadWrite$mod$65 : bool;
-const {:existential true} $FloppyReadWrite$mod$66 : bool;
-const {:existential true} $FloppyReadWrite$mod$67 : bool;
-
-
-procedure ExAcquireFastMutex ( a0:ptr) ;
-
-
-procedure ExReleaseFastMutex ( a0:ptr) ;
-
-
-procedure ExfInterlockedInsertTailList ( a0:ptr, a1:ptr, a2:ptr) returns (ret:ptr);
-
-
-procedure FlQueueIrpToThread ( Irp$21:ptr, DisketteExtension$11:ptr) returns ( $result.FlQueueIrpToThread$861.0$1$:ptr) ;
-
-
-
-
-
-procedure IofCompleteRequest ( a0:ptr, a1:ptr) ;
-
-
-procedure KfAcquireSpinLock ( SpinLock1:ptr) returns ( $result.__prototypewdm_KfAcquireSpinLock$92.0$1$__prototypewdm_KfAcquireSpinLock$4:ptr) ;
-
-//TAG: requires __resource("SPINLOCK", SpinLock) == 0
-requires(Res_SPINLOCK[SpinLock1] == Ptr(null, 0));
-//TAG: ensures __resource("SPINLOCK", SpinLock) == 1
-ensures(Res_SPINLOCK[SpinLock1] == Ptr(null, 1));
-//TAG: ensures __resource("SPINLOCK_IRQL", SpinLock) == __return
-ensures(Res_SPINLOCK_IRQL[SpinLock1] == $result.__prototypewdm_KfAcquireSpinLock$92.0$1$__prototypewdm_KfAcquireSpinLock$4);
-//TAG: ensures __global_resource("IRQL") == 2
-ensures(Res_IRQL[Ptr(null,1)] == Ptr(null, 2));
-//TAG: ensures __return == __old_global_resource("IRQL")
-ensures($result.__prototypewdm_KfAcquireSpinLock$92.0$1$__prototypewdm_KfAcquireSpinLock$4 == old(Res_IRQL)[Ptr(null,1)]);
-
-modifies Res_IRQL;
-ensures(forall r:ptr :: {Res_IRQL[r]} (Ptr(null, 1) == r) || Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
-free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-modifies Res_SPINLOCK;
-//TAG: net change in resource SPINLOCK only for: SpinLock
-ensures(forall r:ptr :: {Res_SPINLOCK[r]} (SpinLock1 == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
-free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-modifies Res_SPINLOCK_IRQL;
-//TAG: net change in resource SPINLOCK_IRQL only for: SpinLock
-ensures(forall r:ptr :: {Res_SPINLOCK_IRQL[r]} (SpinLock1 == r) || Off(old(Res_SPINLOCK_IRQL)[r]) == Off(Res_SPINLOCK_IRQL[r]));
-free requires ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
-free requires (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
-
-
-
-procedure KfReleaseSpinLock ( SpinLock$11:ptr, NewIrql1:ptr);
-
-//TAG: requires __global_resource("IRQL") == 2
-requires(Res_IRQL[Ptr(null,1)] == Ptr(null, 2));
-//TAG: requires __resource("SPINLOCK", SpinLock) == 1
-requires(Res_SPINLOCK[SpinLock$11] == Ptr(null, 1));
-//TAG: requires __resource("SPINLOCK_IRQL", SpinLock) == NewIrql
-requires(Res_SPINLOCK_IRQL[SpinLock$11] == NewIrql1);
-//TAG: ensures __resource("SPINLOCK", SpinLock) == 0
-ensures(Res_SPINLOCK[SpinLock$11] == Ptr(null, 0));
-//TAG: ensures __global_resource("IRQL") == NewIrql
-ensures(Res_IRQL[Ptr(null,1)] == NewIrql1);
-
-modifies Res_IRQL;
-ensures(forall r:ptr :: {Res_IRQL[r]} (Ptr(null, 1) == r) || Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
-free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-modifies Res_SPINLOCK;
-//TAG: net change in resource SPINLOCK only for: SpinLock
-ensures(forall r:ptr :: {Res_SPINLOCK[r]} (SpinLock$11 == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
-free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-
-
-
-procedure MmPageEntireDriver ( a0:ptr) returns (ret:ptr);
-
-
-procedure MmResetDriverPaging ( a0:ptr) ;
-
-
-procedure FloppyQueueRequest ( DisketteExtension1:ptr, Irp1:ptr) returns ( $result.FloppyQueueRequest$5780.0$1$:ptr)
-
-//TAG: requires $FloppyQueueRequest$pre$0 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->ListSpinLock) == 0)
-requires($FloppyQueueRequest$pre$0 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
-//TAG: requires $FloppyQueueRequest$pre$1 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->FlCancelSpinLock) == 0)
-requires($FloppyQueueRequest$pre$1 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
-//TAG: requires $FloppyQueueRequest$pre$2 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->NewRequestQueueSpinLock) == 0)
-requires($FloppyQueueRequest$pre$2 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
-//TAG: requires $FloppyQueueRequest$pre$3 || (1 ==> ((DISKETTE_EXTENSION *)DeviceExtension)->DeviceObject->DeviceExtension == DeviceExtension)
-requires($FloppyQueueRequest$pre$3 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(DisketteExtension1)])] == DisketteExtension1)));
-//TAG: ensures $FloppyQueueRequest$post$12 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->ListSpinLock) == 0)
-ensures($FloppyQueueRequest$post$12 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
-//TAG: ensures $FloppyQueueRequest$post$13 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->FlCancelSpinLock) == 0)
-ensures($FloppyQueueRequest$post$13 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
-//TAG: ensures $FloppyQueueRequest$post$14 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->NewRequestQueueSpinLock) == 0)
-ensures($FloppyQueueRequest$post$14 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
-//TAG: ensures $FloppyQueueRequest$post$15 || (1 ==> ((DISKETTE_EXTENSION *)DeviceExtension)->DeviceObject->DeviceExtension == DeviceExtension)
-ensures($FloppyQueueRequest$post$15 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(DisketteExtension1)])] == DisketteExtension1)));
-modifies alloc;
-free ensures(forall f:ref :: {alloc[f]} old(alloc)[f] != UNALLOCATED ==> alloc[f] == old(alloc)[f]);
-
-modifies Res_IRQL;
-//TAG: no net change in resource IRQL
-ensures(forall r:ptr :: {Res_IRQL[r]} Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
-free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-modifies Res_SPINLOCK;
-//TAG: net change in resource SPINLOCK only for: &DeviceExtension->ListSpinLock, &DeviceExtension->FlCancelSpinLock, &DeviceExtension->NewRequestQueueSpinLock
-ensures(forall r:ptr :: {Res_SPINLOCK[r]} (!$FloppyQueueRequest$mod$16 && ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$18 && FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$20 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
-free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-modifies Res_SPINLOCK_IRQL;
-//TAG: net change in resource SPINLOCK_IRQL only for: &DeviceExtension->ListSpinLock, &DeviceExtension->FlCancelSpinLock, &DeviceExtension->NewRequestQueueSpinLock
-ensures(forall r:ptr :: {Res_SPINLOCK_IRQL[r]} (!$FloppyQueueRequest$mod$17 && ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$19 && FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$21 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || Off(old(Res_SPINLOCK_IRQL)[r]) == Off(Res_SPINLOCK_IRQL[r]));
-free requires ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
-free requires (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
-modifies Mem_Control__IO_STACK_LOCATION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
-free ensures(Mem_Control__IO_STACK_LOCATION[Ptr(null,0)] == old(Mem_Control__IO_STACK_LOCATION)[Ptr(null,0)]);
-modifies Mem_FUNCTION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_FUNCTION[m]} Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
-free ensures(Mem_FUNCTION[Ptr(null,0)] == old(Mem_FUNCTION)[Ptr(null,0)]);
-modifies Mem_FlCancelSpinLock__DISKETTE_EXTENSION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
-free ensures(Mem_FlCancelSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
-modifies Mem_Information__IO_STATUS_BLOCK;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
-free ensures(Mem_Information__IO_STATUS_BLOCK[Ptr(null,0)] == old(Mem_Information__IO_STATUS_BLOCK)[Ptr(null,0)]);
-modifies Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
-free ensures(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
-modifies Mem_Status___unnamed_4_c7b3d275;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
-free ensures(Mem_Status___unnamed_4_c7b3d275[Ptr(null,0)] == old(Mem_Status___unnamed_4_c7b3d275)[Ptr(null,0)]);
-modifies Mem_UINT4;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_UINT4[m]} Mem_UINT4[m] == old(Mem_UINT4)[m]);
-free ensures(Mem_UINT4[Ptr(null,0)] == old(Mem_UINT4)[Ptr(null,0)]);
-
-{
-var havoc_stringTemp:ptr;
-var condVal:ptr;
-var DisketteExtension : ptr;
-var Irp : ptr;
-var $RtlAssert.arg.1$3$ : ptr;
-var $RtlAssert.arg.2$2$ : ptr;
-var $_InterlockedExchange.arg.1$7$ : ptr;
-var $_InterlockedExchange.arg.1$9$ : ptr;
-var $_InterlockedExchange.arg.2$6$ : ptr;
-var $ntStatus$4$5806.24$ : ptr;
-var $oldIrql$3$5805.24$ : ptr;
-var $result.ExfInterlockedInsertTailList$5854.36$11$ : ptr;
-var $result.KfAcquireSpinLock$5825.4$4$ : ptr;
-var $result.MmPageEntireDriver$5842.8$10$ : ptr;
-var $result._InterlockedExchange$5826.4$5$ : ptr;
-var $result._InterlockedExchange$5831.26$8$ : ptr;
-var tempBoogie0:ptr;
-var tempBoogie1:ptr;
-var tempBoogie2:ptr;
-var tempBoogie3:ptr;
-var tempBoogie4:ptr;
-var tempBoogie5:ptr;
-var tempBoogie6:ptr;
-var tempBoogie7:ptr;
-var tempBoogie8:ptr;
-var tempBoogie9:ptr;
-var tempBoogie10:ptr;
-var tempBoogie11:ptr;
-var tempBoogie12:ptr;
-var tempBoogie13:ptr;
-var tempBoogie14:ptr;
-var tempBoogie15:ptr;
-var tempBoogie16:ptr;
-var tempBoogie17:ptr;
-var tempBoogie18:ptr;
-var tempBoogie19:ptr;
-
-
-start:
-
-assume (alloc[Obj(DisketteExtension1)] != UNALLOCATED);
-assume (alloc[Obj(Irp1)] != UNALLOCATED);
-DisketteExtension := Ptr(null, 0);
-Irp := Ptr(null, 0);
-$RtlAssert.arg.1$3$ := Ptr(null, 0);
-$RtlAssert.arg.2$2$ := Ptr(null, 0);
-$_InterlockedExchange.arg.1$7$ := Ptr(null, 0);
-$_InterlockedExchange.arg.1$9$ := Ptr(null, 0);
-$_InterlockedExchange.arg.2$6$ := Ptr(null, 0);
-$ntStatus$4$5806.24$ := Ptr(null, 0);
-$oldIrql$3$5805.24$ := Ptr(null, 0);
-$result.ExfInterlockedInsertTailList$5854.36$11$ := Ptr(null, 0);
-$result.KfAcquireSpinLock$5825.4$4$ := Ptr(null, 0);
-$result.MmPageEntireDriver$5842.8$10$ := Ptr(null, 0);
-$result._InterlockedExchange$5826.4$5$ := Ptr(null, 0);
-$result._InterlockedExchange$5831.26$8$ := Ptr(null, 0);
-DisketteExtension := DisketteExtension1;
-Irp := Irp1;
-$result.FloppyQueueRequest$5780.0$1$ := Ptr(null,0);
-goto label_3;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5864)
-label_1:
-assume (forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
-assume (forall m:ptr :: {Mem_FUNCTION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
-assume (forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
-assume (forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
-assume (forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
-assume (forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
-assume (forall m:ptr :: {Mem_UINT4[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_UINT4[m] == old(Mem_UINT4)[m]);
-return;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5864)
-label_2:
-assume false;
-return;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5805)
-label_3:
-goto label_4;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5806)
-label_4:
-goto label_5;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
-label_5:
-call ExAcquireFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
-goto label_8;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
-label_8:
-tempBoogie0 := Ptr(Obj(Mem_UINT4[PagingReferenceCount]), Off(Mem_UINT4[PagingReferenceCount]) + 1 * 1) ;
-Mem_UINT4[PagingReferenceCount] := tempBoogie0;
-goto label_8_true , label_8_false ;
-
-
-label_8_true :
-assume (Mem_UINT4[PagingReferenceCount] == Ptr(null, 1));
-goto label_12;
-
-
-label_8_false :
-assume !(Mem_UINT4[PagingReferenceCount] == Ptr(null, 1));
-goto label_9;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
-label_9:
-call ExReleaseFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
-goto label_15;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
-label_12:
-call MmResetDriverPaging (DriverEntry);
-goto label_9;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
-label_15:
-goto label_15_true , label_15_false ;
-
-
-label_15_true :
-assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION(DisketteExtension)] != Ptr(null,0));
-goto label_17;
-
-
-label_15_false :
-assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION(DisketteExtension)] == Ptr(null,0));
-goto label_16;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
-label_16:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$RtlAssert.arg.2$2$ := havoc_stringTemp ;
-goto label_61;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5825)
-label_17:
-assume (Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
-call $result.KfAcquireSpinLock$5825.4$4$ := KfAcquireSpinLock (FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension));
-Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
-goto label_20;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5825)
-label_20:
-$oldIrql$3$5805.24$ := $result.KfAcquireSpinLock$5825.4$4$ ;
-goto label_21;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5826)
-label_21:
-$_InterlockedExchange.arg.2$6$ := FloppyCancelQueuedRequest ;
-goto label_22;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5826)
-label_22:
-$_InterlockedExchange.arg.1$7$ := CancelRoutine__IRP(Irp) ;
-goto label_23;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5826)
-label_23:
-// ignoring intrinsic intrinsic._InterlockedExchange
-havoc $result._InterlockedExchange$5826.4$5$;
-goto label_26;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
-label_26:
-goto label_26_true , label_26_false ;
-
-
-label_26_true :
-assume (Mem_Cancel__IRP[Cancel__IRP(Irp)] != Ptr(null,0));
-goto label_28;
-
-
-label_26_false :
-assume (Mem_Cancel__IRP[Cancel__IRP(Irp)] == Ptr(null,0));
-goto label_27;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5850)
-label_27:
-Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp)))] := Ptr(null, 259) ;
-goto label_53;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
-label_28:
-$_InterlockedExchange.arg.1$9$ := CancelRoutine__IRP(Irp) ;
-goto label_29;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
-label_29:
-// ignoring intrinsic intrinsic._InterlockedExchange
-havoc $result._InterlockedExchange$5831.26$8$;
-goto label_32;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
-label_32:
-goto label_32_true , label_32_false ;
-
-
-label_32_true :
-assume ($result._InterlockedExchange$5831.26$8$ != Ptr(null,0));
-goto label_33;
-
-
-label_32_false :
-assume ($result._InterlockedExchange$5831.26$8$ == Ptr(null,0));
-goto label_27;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5836)
-label_33:
-Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp)))] := Ptr(null, -1073741536) ;
-goto label_34;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5837)
-label_34:
-Mem_Information__IO_STATUS_BLOCK[Information__IO_STATUS_BLOCK(IoStatus__IRP(Irp))] := Ptr(null, 0) ;
-goto label_35;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5839)
-label_35:
-assume (Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
-call KfReleaseSpinLock (FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension), $oldIrql$3$5805.24$);
-Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
-goto label_38;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5840)
-label_38:
-call IofCompleteRequest (Irp, Ptr(null, 0));
-goto label_41;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
-label_41:
-call ExAcquireFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
-goto label_44;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
-label_44:
-tempBoogie0 := Ptr(Obj(Mem_UINT4[PagingReferenceCount]), Off(Mem_UINT4[PagingReferenceCount]) - 1) ;
-Mem_UINT4[PagingReferenceCount] := tempBoogie0;
-goto label_44_true , label_44_false ;
-
-
-label_44_true :
-assume (Mem_UINT4[PagingReferenceCount] != Ptr(null,0));
-goto label_48;
-
-
-label_44_false :
-assume (Mem_UINT4[PagingReferenceCount] == Ptr(null,0));
-goto label_45;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
-label_45:
-call $result.MmPageEntireDriver$5842.8$10$ := MmPageEntireDriver (DriverEntry);
-goto label_48;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
-label_48:
-call ExReleaseFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
-goto label_51;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5844)
-label_51:
-$ntStatus$4$5806.24$ := Ptr(null, -1073741536) ;
-goto label_52;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5863)
-label_52:
-$result.FloppyQueueRequest$5780.0$1$ := $ntStatus$4$5806.24$ ;
-goto label_1;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5852)
-label_53:
-tempBoogie0 := BIT_BOR(Mem_Control__IO_STACK_LOCATION[Control__IO_STACK_LOCATION(Mem_CurrentStackLocation___unnamed_4_f80453a0[CurrentStackLocation___unnamed_4_f80453a0(__unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp)))))])], Ptr(null, 1)) ;
-Mem_Control__IO_STACK_LOCATION[Control__IO_STACK_LOCATION(Mem_CurrentStackLocation___unnamed_4_f80453a0[CurrentStackLocation___unnamed_4_f80453a0(__unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp)))))])] := tempBoogie0 ;
-goto label_54;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5854)
-label_54:
-assume (Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
-call $result.ExfInterlockedInsertTailList$5854.36$11$ := ExfInterlockedInsertTailList (NewRequestQueue__DISKETTE_EXTENSION(DisketteExtension), ListEntry___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp)))), NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension));
-Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
-goto label_57;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5858)
-label_57:
-assume (Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
-call KfReleaseSpinLock (FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension), $oldIrql$3$5805.24$);
-Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
-goto label_60;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5860)
-label_60:
-$ntStatus$4$5806.24$ := Ptr(null, 259) ;
-goto label_52;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
-label_61:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$RtlAssert.arg.1$3$ := havoc_stringTemp ;
-goto label_62;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
-label_62:
-// skip RtlAssert
-goto label_17;
-
-}
-
-
-
-procedure FloppyReadWrite ( DeviceObject1:ptr, Irp$11:ptr) returns ( $result.FloppyReadWrite$2203.0$1$:ptr)
-
-//TAG: requires $FloppyReadWrite$pre$42 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock) == 0)
-requires($FloppyReadWrite$pre$42 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
-//TAG: requires $FloppyReadWrite$pre$43 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock) == 0)
-requires($FloppyReadWrite$pre$43 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
-//TAG: requires $FloppyReadWrite$pre$44 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock) == 0)
-requires($FloppyReadWrite$pre$44 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
-//TAG: requires $FloppyReadWrite$pre$45 || (1 ==> ((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject->DeviceExtension == (DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))
-requires($FloppyReadWrite$pre$45 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])])] == Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])));
-//TAG: requires $FloppyReadWrite$pre$46 || (((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject == DeviceObject)
-requires($FloppyReadWrite$pre$46 || (Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == DeviceObject1));
-//TAG: ensures $FloppyReadWrite$post$57 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock) == 0)
-ensures($FloppyReadWrite$post$57 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
-//TAG: ensures $FloppyReadWrite$post$58 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock) == 0)
-ensures($FloppyReadWrite$post$58 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
-//TAG: ensures $FloppyReadWrite$post$59 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock) == 0)
-ensures($FloppyReadWrite$post$59 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
-//TAG: ensures $FloppyReadWrite$post$60 || (1 ==> ((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject->DeviceExtension == (DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))
-ensures($FloppyReadWrite$post$60 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])])] == Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])));
-//TAG: ensures $FloppyReadWrite$post$61 || (((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject == DeviceObject)
-ensures($FloppyReadWrite$post$61 || (Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == DeviceObject1));
-modifies alloc;
-free ensures(forall f:ref :: {alloc[f]} old(alloc)[f] != UNALLOCATED ==> alloc[f] == old(alloc)[f]);
-
-modifies Res_IRQL;
-//TAG: no net change in resource IRQL
-ensures(forall r:ptr :: {Res_IRQL[r]} Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
-free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
-free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
-modifies Res_SPINLOCK;
-//TAG: net change in resource SPINLOCK only for: &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock
-ensures(forall r:ptr :: {Res_SPINLOCK[r]} (!$FloppyReadWrite$mod$62 && ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$64 && FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$66 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
-free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
-free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
-modifies Res_SPINLOCK_IRQL;
-//TAG: net change in resource SPINLOCK_IRQL only for: &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock
-ensures(forall r:ptr :: {Res_SPINLOCK_IRQL[r]} (!$FloppyReadWrite$mod$63 && ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$65 && FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$67 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || Off(old(Res_SPINLOCK_IRQL)[r]) == Off(Res_SPINLOCK_IRQL[r]));
-free requires ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
-free ensures ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
-free requires (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
-free ensures (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
-modifies Mem_Control__IO_STACK_LOCATION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
-free ensures(Mem_Control__IO_STACK_LOCATION[Ptr(null,0)] == old(Mem_Control__IO_STACK_LOCATION)[Ptr(null,0)]);
-modifies Mem_FUNCTION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_FUNCTION[m]} Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
-free ensures(Mem_FUNCTION[Ptr(null,0)] == old(Mem_FUNCTION)[Ptr(null,0)]);
-modifies Mem_FlCancelSpinLock__DISKETTE_EXTENSION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
-free ensures(Mem_FlCancelSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
-modifies Mem_Information__IO_STATUS_BLOCK;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
-free ensures(Mem_Information__IO_STATUS_BLOCK[Ptr(null,0)] == old(Mem_Information__IO_STATUS_BLOCK)[Ptr(null,0)]);
-modifies Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
-free ensures(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
-modifies Mem_Status___unnamed_4_c7b3d275;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
-free ensures(Mem_Status___unnamed_4_c7b3d275[Ptr(null,0)] == old(Mem_Status___unnamed_4_c7b3d275)[Ptr(null,0)]);
-modifies Mem_UINT4;
-//TAG: no updated memory locations
-free ensures(forall m:ptr :: {Mem_UINT4[m]} Mem_UINT4[m] == old(Mem_UINT4)[m]);
-free ensures(Mem_UINT4[Ptr(null,0)] == old(Mem_UINT4)[Ptr(null,0)]);
-
-{
-var havoc_stringTemp:ptr;
-var condVal:ptr;
-var $DbgPrint.arg.1$10$ : ptr;
-var $DbgPrint.arg.1$13$ : ptr;
-var $DbgPrint.arg.1$15$ : ptr;
-var $DbgPrint.arg.1$3$ : ptr;
-var $DbgPrint.arg.1$6$ : ptr;
-var $DbgPrint.arg.1$8$ : ptr;
-var DeviceObject : ptr;
-var Irp$1 : ptr;
-var $disketteExtension$5$2232.24$ : ptr;
-var $irpSp$3$2230.23$ : ptr;
-var $ntStatus$4$2231.13$ : ptr;
-var $result.DbgPrint$2234.4$2$ : ptr;
-var $result.DbgPrint$2278.0$5$ : ptr;
-var $result.DbgPrint$2280.0$7$ : ptr;
-var $result.DbgPrint$2305.0$9$ : ptr;
-var $result.DbgPrint$2317.0$12$ : ptr;
-var $result.DbgPrint$2327.0$14$ : ptr;
-var $result.FlQueueIrpToThread$2308.41$11$ : ptr;
-var $result.FloppyQueueRequest$2247.37$4$ : ptr;
-var tempBoogie0:ptr;
-var tempBoogie1:ptr;
-var tempBoogie2:ptr;
-var tempBoogie3:ptr;
-var tempBoogie4:ptr;
-var tempBoogie5:ptr;
-var tempBoogie6:ptr;
-var tempBoogie7:ptr;
-var tempBoogie8:ptr;
-var tempBoogie9:ptr;
-var tempBoogie10:ptr;
-var tempBoogie11:ptr;
-var tempBoogie12:ptr;
-var tempBoogie13:ptr;
-var tempBoogie14:ptr;
-var tempBoogie15:ptr;
-var tempBoogie16:ptr;
-var tempBoogie17:ptr;
-var tempBoogie18:ptr;
-var tempBoogie19:ptr;
-
-
-start:
-
-assume (alloc[Obj(DeviceObject1)] != UNALLOCATED);
-assume (alloc[Obj(Irp$11)] != UNALLOCATED);
-$DbgPrint.arg.1$10$ := Ptr(null, 0);
-$DbgPrint.arg.1$13$ := Ptr(null, 0);
-$DbgPrint.arg.1$15$ := Ptr(null, 0);
-$DbgPrint.arg.1$3$ := Ptr(null, 0);
-$DbgPrint.arg.1$6$ := Ptr(null, 0);
-$DbgPrint.arg.1$8$ := Ptr(null, 0);
-DeviceObject := Ptr(null, 0);
-Irp$1 := Ptr(null, 0);
-$disketteExtension$5$2232.24$ := Ptr(null, 0);
-$irpSp$3$2230.23$ := Ptr(null, 0);
-$ntStatus$4$2231.13$ := Ptr(null, 0);
-$result.DbgPrint$2234.4$2$ := Ptr(null, 0);
-$result.DbgPrint$2278.0$5$ := Ptr(null, 0);
-$result.DbgPrint$2280.0$7$ := Ptr(null, 0);
-$result.DbgPrint$2305.0$9$ := Ptr(null, 0);
-$result.DbgPrint$2317.0$12$ := Ptr(null, 0);
-$result.DbgPrint$2327.0$14$ := Ptr(null, 0);
-$result.FlQueueIrpToThread$2308.41$11$ := Ptr(null, 0);
-$result.FloppyQueueRequest$2247.37$4$ := Ptr(null, 0);
-DeviceObject := DeviceObject1;
-Irp$1 := Irp$11;
-$result.FloppyReadWrite$2203.0$1$ := Ptr(null,0);
-goto label_3;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2334)
-label_1:
-assume (forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
-assume (forall m:ptr :: {Mem_FUNCTION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
-assume (forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
-assume (forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
-assume (forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
-assume (forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
-assume (forall m:ptr :: {Mem_UINT4[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_UINT4[m] == old(Mem_UINT4)[m]);
-return;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2334)
-label_2:
-assume false;
-return;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2230)
-label_3:
-goto label_4;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2231)
-label_4:
-goto label_5;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2232)
-label_5:
-goto label_6;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2234)
-label_6:
-goto label_6_true , label_6_false ;
-
-
-label_6_true :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 8)) != Ptr(null,0));
-goto label_8;
-
-
-label_6_false :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 8)) == Ptr(null,0));
-goto label_7;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2236)
-label_7:
-$disketteExtension$5$2232.24$ := Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject)] ;
-goto label_12;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2234)
-label_8:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$DbgPrint.arg.1$3$ := havoc_stringTemp ;
-goto label_9;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2234)
-label_9:
-havoc $result.DbgPrint$2234.4$2$;
-// skip DbgPrint
-goto label_7;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2238)
-label_12:
-$irpSp$3$2230.23$ := Mem_CurrentStackLocation___unnamed_4_f80453a0[CurrentStackLocation___unnamed_4_f80453a0(__unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp$1)))))] ;
-goto label_13;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2244)
-label_13:
-call ExAcquireFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
-goto label_16;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2245)
-label_16:
-goto label_16_true , label_16_false ;
-
-
-label_16_true :
-assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
-goto label_18;
-
-
-label_16_false :
-assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
-goto label_17;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2257)
-label_17:
-goto label_17_true , label_17_false ;
-
-
-label_17_true :
-assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
-goto label_27;
-
-
-label_17_false :
-assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
-goto label_26;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2247)
-label_18:
-call $result.FloppyQueueRequest$2247.37$4$ := FloppyQueueRequest ($disketteExtension$5$2232.24$, Irp$1);
-goto label_21;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2247)
-label_21:
-$ntStatus$4$2231.13$ := $result.FloppyQueueRequest$2247.37$4$ ;
-goto label_22;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2249)
-label_22:
-call ExReleaseFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
-goto label_25;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2250)
-label_25:
-$result.FloppyReadWrite$2203.0$1$ := $ntStatus$4$2231.13$ ;
-goto label_1;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2257)
-label_26:
-goto label_26_true , label_26_false ;
-
-
-label_26_true :
-assume (Mem_IsStarted__DISKETTE_EXTENSION[IsStarted__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
-goto label_39;
-
-
-label_26_false :
-assume (Mem_IsStarted__DISKETTE_EXTENSION[IsStarted__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
-goto label_27;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2259)
-label_27:
-call ExReleaseFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
-goto label_30;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2261)
-label_30:
-goto label_30_true , label_30_false ;
-
-
-label_30_true :
-assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
-goto label_32;
-
-
-label_30_false :
-assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
-goto label_31;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2264)
-label_31:
-$ntStatus$4$2231.13$ := Ptr(null, -1073741823) ;
-goto label_33;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2262)
-label_32:
-$ntStatus$4$2231.13$ := Ptr(null, -1073741738) ;
-goto label_33;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2266)
-label_33:
-Mem_Information__IO_STATUS_BLOCK[Information__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1))] := Ptr(null, 0) ;
-goto label_34;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2267)
-label_34:
-Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1)))] := $ntStatus$4$2231.13$ ;
-goto label_35;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2268)
-label_35:
-call IofCompleteRequest (Irp$1, Ptr(null, 0));
-goto label_38;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2269)
-label_38:
-$result.FloppyReadWrite$2203.0$1$ := $ntStatus$4$2231.13$ ;
-goto label_1;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2272)
-label_39:
-assume (null == Obj(Mem_MediaType__DISKETTE_EXTENSION[MediaType__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]));
-goto label_39_true , label_39_false ;
-
-
-label_39_true :
-assume (0 < Off(Mem_MediaType__DISKETTE_EXTENSION[MediaType__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]));
-goto label_41;
-
-
-label_39_false :
-assume !(0 < Off(Mem_MediaType__DISKETTE_EXTENSION[MediaType__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]));
-goto label_40;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2299)
-label_40:
-goto label_40_true , label_40_false ;
-
-
-label_40_true :
-assume (Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))] != Ptr(null,0));
-goto label_69;
-
-
-label_40_false :
-assume (Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))] == Ptr(null,0));
-goto label_68;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2274)
-label_41:
-assume (Obj(Mem_ByteCapacity__DISKETTE_EXTENSION[ByteCapacity__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) == Obj(PLUS(Mem_LowPart___unnamed_8_34582070[LowPart___unnamed_8_34582070(__unnamed_8_34582070__LARGE_INTEGER(ByteOffset___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))))], 1, Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))])));
-goto label_41_true , label_41_false ;
-
-
-label_41_true :
-assume (Off(Mem_ByteCapacity__DISKETTE_EXTENSION[ByteCapacity__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) < Off(PLUS(Mem_LowPart___unnamed_8_34582070[LowPart___unnamed_8_34582070(__unnamed_8_34582070__LARGE_INTEGER(ByteOffset___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))))], 1, Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))])));
-goto label_43;
-
-
-label_41_false :
-assume !(Off(Mem_ByteCapacity__DISKETTE_EXTENSION[ByteCapacity__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) < Off(PLUS(Mem_LowPart___unnamed_8_34582070[LowPart___unnamed_8_34582070(__unnamed_8_34582070__LARGE_INTEGER(ByteOffset___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))))], 1, Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))])));
-goto label_42;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2275)
-label_42:
-goto label_42_true , label_42_false ;
-
-
-label_42_true :
-assume (BIT_BAND(Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))], Ptr(Obj(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]), Off(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) - 1)) != Ptr(null,0));
-goto label_43;
-
-
-label_42_false :
-assume (BIT_BAND(Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))], Ptr(Obj(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]), Off(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) - 1)) == Ptr(null,0));
-goto label_40;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2278)
-label_43:
-goto label_43_true , label_43_false ;
-
-
-label_43_true :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) != Ptr(null,0));
-goto label_45;
-
-
-label_43_false :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) == Ptr(null,0));
-goto label_44;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2280)
-label_44:
-goto label_44_true , label_44_false ;
-
-
-label_44_true :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 2)) != Ptr(null,0));
-goto label_50;
-
-
-label_44_false :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 2)) == Ptr(null,0));
-goto label_49;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2278)
-label_45:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$DbgPrint.arg.1$6$ := havoc_stringTemp ;
-goto label_46;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2278)
-label_46:
-havoc $result.DbgPrint$2278.0$5$;
-// skip DbgPrint
-goto label_44;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2290)
-label_49:
-$ntStatus$4$2231.13$ := Ptr(null, -1073741811) ;
-goto label_54;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2280)
-label_50:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$DbgPrint.arg.1$8$ := havoc_stringTemp ;
-goto label_51;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2280)
-label_51:
-havoc $result.DbgPrint$2280.0$7$;
-// skip DbgPrint
-goto label_49;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2323)
-label_54:
-call ExReleaseFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
-goto label_57;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2325)
-label_57:
-goto label_57_true , label_57_false ;
-
-
-label_57_true :
-assume ($ntStatus$4$2231.13$ != Ptr(null, 259));
-goto label_59;
-
-
-label_57_false :
-assume !($ntStatus$4$2231.13$ != Ptr(null, 259));
-goto label_58;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2333)
-label_58:
-$result.FloppyReadWrite$2203.0$1$ := $ntStatus$4$2231.13$ ;
-goto label_1;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2326)
-label_59:
-Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1)))] := $ntStatus$4$2231.13$ ;
-goto label_60;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2327)
-label_60:
-goto label_60_true , label_60_false ;
-
-
-label_60_true :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) != Ptr(null,0));
-goto label_64;
-
-
-label_60_false :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) == Ptr(null,0));
-goto label_61;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2330)
-label_61:
-call IofCompleteRequest (Irp$1, Ptr(null, 0));
-goto label_58;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2327)
-label_64:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$DbgPrint.arg.1$15$ := havoc_stringTemp ;
-goto label_65;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2327)
-label_65:
-havoc $result.DbgPrint$2327.0$14$;
-// skip DbgPrint
-goto label_61;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2315)
-label_68:
-Mem_Information__IO_STATUS_BLOCK[Information__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1))] := Ptr(null, 0) ;
-goto label_78;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2305)
-label_69:
-goto label_69_true , label_69_false ;
-
-
-label_69_true :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 16)) != Ptr(null,0));
-goto label_73;
-
-
-label_69_false :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 16)) == Ptr(null,0));
-goto label_70;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2308)
-label_70:
-call $result.FlQueueIrpToThread$2308.41$11$ := FlQueueIrpToThread (Irp$1, $disketteExtension$5$2232.24$);
-goto label_77;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2305)
-label_73:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$DbgPrint.arg.1$10$ := havoc_stringTemp ;
-goto label_74;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2305)
-label_74:
-havoc $result.DbgPrint$2305.0$9$;
-// skip DbgPrint
-goto label_70;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2308)
-label_77:
-$ntStatus$4$2231.13$ := $result.FlQueueIrpToThread$2308.41$11$ ;
-goto label_54;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2316)
-label_78:
-Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1)))] := Ptr(null, 0) ;
-goto label_79;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2317)
-label_79:
-goto label_79_true , label_79_false ;
-
-
-label_79_true :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) != Ptr(null,0));
-goto label_81;
-
-
-label_79_false :
-assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) == Ptr(null,0));
-goto label_80;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2319)
-label_80:
-$ntStatus$4$2231.13$ := Ptr(null, 0) ;
-goto label_54;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2317)
-label_81:
-call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
-$DbgPrint.arg.1$13$ := havoc_stringTemp ;
-goto label_82;
-
-
-// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2317)
-label_82:
-havoc $result.DbgPrint$2317.0$12$;
-// skip DbgPrint
-goto label_80;
-
-}
-
+type ptr;
+function Ptr(ref, int) returns (ptr);
+function Obj(ptr) returns (ref);
+function Off(ptr) returns (int);
+
+// Ptr, Obj, Off axioms
+axiom(forall x:ptr :: {Obj(x)}{Off(x)} x == Ptr(Obj(x), Off(x)));
+axiom(forall x_obj:ref, x_off:int :: {Ptr(x_obj, x_off)} x_obj == Obj(Ptr(x_obj, x_off)));
+axiom(forall x_obj:ref, x_off:int :: {Ptr(x_obj, x_off)} x_off == Off(Ptr(x_obj, x_off)));
+
+// Mutable
+var Mem:[ptr]ptr;
+var alloc:[ref]name;
+var BS:[ptr]bool;
+const field:[ptr]name;
+
+// Immutable
+function Size(ref) returns (int);
+function Type(ref) returns (int);
+function IsHeap(ref) returns (bool); //if the object was allocated by malloc or allocation due to address taken
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED:name;
+
+function In(ptr, [ptr]bool) returns (bool);
+function Subset([ptr]bool, [ptr]bool) returns (bool);
+//function Equal([ptr]bool, [ptr]bool) returns (bool);
+function Disjoint([ptr]bool, [ptr]bool) returns (bool);
+//function UniqueDereference([ptr]bool, [ptr]ptr, ptr) returns (bool);
+
+//function Element(a:ptr) returns (bool);
+//axiom(forall a:ptr, S:[ptr]bool :: {In(a,S)} Element(a));
+
+function Empty() returns ([ptr]bool);
+function Singleton(ptr) returns ([ptr]bool);
+function Reachable([ptr,ptr]bool, ptr) returns ([ptr]bool);
+function Union([ptr]bool, [ptr]bool) returns ([ptr]bool);
+function Intersection([ptr]bool, [ptr]bool) returns ([ptr]bool);
+function Difference([ptr]bool, [ptr]bool) returns ([ptr]bool);
+function Decrement([ptr]bool, int) returns ([ptr]bool);
+function Increment([ptr]bool, int) returns ([ptr]bool);
+function Dereference([ptr]bool, [ptr]ptr) returns ([ptr]bool);
+function Array(ptr, int, ptr) returns ([ptr]bool);
+function Array1(ptr, ptr) returns ([ptr]bool);
+
+
+axiom(forall x:ptr :: !In(x, Empty()));
+
+axiom(forall x:ptr, y:ptr :: {In(x, Singleton(y))} In(x, Singleton(y)) ==> x == y);
+axiom(forall y:ptr :: {Singleton(y)} In(y, Singleton(y)));
+
+/* this formulation of Union IS more complete than the earlier one */
+/* In(e, A U B), In(d, A), A U B = Singleton(c), d != e */
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x, Union(S,T))} In(x, Union(S,T)) ==> In(x, S) || In(x,T));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,S)} In(x, S) ==> In(x, Union(S,T)));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,T)} In(x, T) ==> In(x, Union(S,T)));
+
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,S), In(x,T), Intersection(S,T)} In(x,S) && In(x,T) ==> In(x, Intersection(S,T)));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,Intersection(S,T))} In(x, Intersection(S,T)) ==> In(x,S) && In(x,T));
+
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Difference(S,T), In(x,S)} In(x, S) ==> In(x, Difference(S,T)) || In(x,T));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,Difference(S,T))} In(x, Difference(S,T)) ==> In(x, S));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,Difference(S,T)), In(x,T)} !(In(x, Difference(S,T)) && In(x,T)));
+
+axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Decrement(S,n))} In(x, Decrement(S,n)) <==> In(Ptr(Obj(x),Off(x)+n),S));
+axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Increment(S,n))} In(x, Increment(S,n)) <==> In(Ptr(Obj(x),Off(x)-n),S));
+
+axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {In(x, Dereference(S,M))} In(x, Dereference(S,M)) ==> (exists y:ptr :: x == M[y] && In(y,S)));
+axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {M[x], In(x, S), Dereference(S,M)} In(x, S) ==> In(M[x], Dereference(S,M)));
+
+axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a,Array(x,n,z))}
+ In(a,Array(x,n,z)) ==>
+ (Obj(a) == Obj(x) && Obj(z) == null && (exists k:int :: 0 <= k && k < Off(z) && Off(a) == Off(x) + n*k)));
+
+axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a, Array(x,n,z))}
+ In(a, Array(x,n,z)) ==> (exists k:int :: 0 <= k && a == PLUS(x,n,Ptr(null,k))));
+axiom(forall x:ptr, n:int, z:ptr :: {Array(x,n,z)} Obj(z) == null && Off(z) > 0 ==> In(x, Array(x,n,z)));
+axiom(forall x:ptr, n:int, y:ptr, z:ptr :: {PLUS(x,n,y), Array(x,n,z)}
+ Obj(y) == null && Obj(z) == null && Off(x) <= Off(PLUS(x,n,y)) && Off(PLUS(x,n,y)) < Off(PLUS(x,n,z)) <==> In(PLUS(x,n,y), Array(x,n,z)));
+
+axiom(forall x:ptr, y:ptr, z:ptr :: {In(x,Array1(y,z))}
+ In(x,Array1(y,z)) <==>
+ (Obj(x) == Obj(y) && Off(y) <= Off(x) && Off(x) < Off(y) + Off(z)));
+
+
+/*
+axiom(forall x:ptr :: !In(x, Empty()));
+axiom(forall x:ptr, y:ptr :: {In(x, Singleton(y))} In(x, Singleton(y)) <==> x == y);
+
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x, Union(S,T))} In(x, Union(S,T)) <==> In(x, S) || In(x,T));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,S)} In(x, S) ==> In(x, Union(S,T)));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Union(S,T), In(x,T)} In(x, T) ==> In(x, Union(S,T)));
+
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x, Difference(S,T))} In(x, Difference(S,T)) <==> In(x, S) && !In(x,T));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {Difference(S,T), In(x,S), In(x,T)} (In(x, S) && !In(x,T)) ==> In(x, Difference(S,T)));
+
+axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Decrement(S,n))} In(x, Decrement(S,n)) <==> In(Ptr(Obj(x),Off(x)+n),S));
+axiom(forall x:ptr, n:int, S:[ptr]bool :: {In(x, Increment(S,n))} In(x, Increment(S,n)) <==> In(Ptr(Obj(x),Off(x)-n),S));
+axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {In(x, Dereference(S,M))} In(x, Dereference(S,M)) <==> (exists y:ptr :: x == M[y] && In(y,S)));
+axiom(forall x:ptr, S:[ptr]bool, M:[ptr]ptr :: {In(x, S), Dereference(S,M)} In(x, S) ==> In(M[x], Dereference(S,M)));
+
+axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a,Array(x,n,z))}
+ In(a,Array(x,n,z)) ==>
+ (Obj(a) == Obj(x) && Obj(z) == null && (exists k:int :: 0 <= k && k < Off(z) && Off(a) == Off(x) + n*k)));
+
+axiom(forall a:ptr, x:ptr, n:int, z:ptr :: {In(a, Array(x,n,z))}
+ In(a, Array(x,n,z)) ==> (exists k:int :: 0 <= k && a == PLUS(x,n,Ptr(null,k))));
+axiom(forall x:ptr, n:int, z:ptr :: {Array(x,n,z)} Obj(z) == null && Off(z) > 0 ==> In(x, Array(x,n,z)));
+axiom(forall x:ptr, n:int, y:ptr, z:ptr :: {PLUS(x,n,y), Array(x,n,z)}
+ Obj(y) == null && Obj(z) == null && Off(x) <= Off(PLUS(x,n,y)) && Off(PLUS(x,n,y)) < Off(PLUS(x,n,z)) <==> In(PLUS(x,n,y), Array(x,n,z)));
+
+axiom(forall x:ptr, y:ptr, z:ptr :: {In(x,Array1(y,z))}
+ In(x,Array1(y,z)) <==>
+ (Obj(x) == Obj(y) && Off(y) <= Off(x) && Off(x) < Off(y) + Off(z)));
+*/
+
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,S), Subset(S,T)} In(x,S) && Subset(S,T) ==> In(x,T));
+axiom(forall S:[ptr]bool, T:[ptr]bool :: {Subset(S,T)} Subset(S,T) || (exists x:ptr :: In(x,S) && !In(x,T)));
+axiom(forall x:ptr, S:[ptr]bool, T:[ptr]bool :: {In(x,S), Disjoint(S,T), In(x,T)} !(In(x,S) && Disjoint(S,T) && In(x,T)));
+axiom(forall S:[ptr]bool, T:[ptr]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:ptr :: In(x,S) && In(x,T)));
+
+/*
+axiom(forall S:[ptr]bool, T:[ptr]bool :: {Subset(S,T)} Subset(S,T) <==> (forall x:ptr :: In(x,S) ==> In(x,T)));
+axiom(forall S:[ptr]bool, T:[ptr]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(T,S) && Subset(S,T));
+axiom(forall S:[ptr]bool, T:[ptr]bool :: {Disjoint(S,T)} Disjoint(S,T) <==> (forall x:ptr :: !(In(x,S) && In(x,T))));
+axiom(forall S:[ptr]bool, M:[ptr]ptr, p:ptr :: {UniqueDereference(S,M,p)}
+ UniqueDereference(S,M,p) <==>
+ (forall x:ptr, y:ptr :: {M[x],M[y]} In(x,S) && In(y,S) && M[x] == M[y] ==> x == y || M[x] == p));
+*/
+
+
+function ByteCapacity__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_ByteCapacity__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_ByteCapacity__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_ByteCapacity__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {ByteCapacity__DISKETTE_EXTENSION(x)} home_ByteCapacity__DISKETTE_EXTENSION(ByteCapacity__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_ByteCapacity__DISKETTE_EXTENSION(x)} ByteCapacity__DISKETTE_EXTENSION(home_ByteCapacity__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {ByteCapacity__DISKETTE_EXTENSION(x)} ByteCapacity__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 152));
+axiom (forall x:ptr :: {home_ByteCapacity__DISKETTE_EXTENSION(x)} home_ByteCapacity__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 152));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ByteCapacity__DISKETTE_EXTENSION(S))} In(x, _S_ByteCapacity__DISKETTE_EXTENSION(S)) ==> In(home_ByteCapacity__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ByteCapacity__DISKETTE_EXTENSION(S))} In(x, _S_home_ByteCapacity__DISKETTE_EXTENSION(S)) ==> In(ByteCapacity__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ByteCapacity__DISKETTE_EXTENSION(S)} In(x, S) ==> In(ByteCapacity__DISKETTE_EXTENSION(x), _S_ByteCapacity__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ByteCapacity__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_ByteCapacity__DISKETTE_EXTENSION(x), _S_home_ByteCapacity__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,152), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,152), 1) == home_ByteCapacity__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,152))} MINUS_LEFT_PTR(x, 1, Ptr(null,152)) == home_ByteCapacity__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function ByteOffset___unnamed_16_39e6661e(ptr) returns (ptr);
+function home_ByteOffset___unnamed_16_39e6661e(ptr) returns (ptr);
+function _S_ByteOffset___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
+function _S_home_ByteOffset___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {ByteOffset___unnamed_16_39e6661e(x)} home_ByteOffset___unnamed_16_39e6661e(ByteOffset___unnamed_16_39e6661e(x)) == x);
+axiom (forall x:ptr :: {home_ByteOffset___unnamed_16_39e6661e(x)} ByteOffset___unnamed_16_39e6661e(home_ByteOffset___unnamed_16_39e6661e(x)) == x);
+axiom (forall x:ptr :: {ByteOffset___unnamed_16_39e6661e(x)} ByteOffset___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) + 8));
+axiom (forall x:ptr :: {home_ByteOffset___unnamed_16_39e6661e(x)} home_ByteOffset___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) - 8));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ByteOffset___unnamed_16_39e6661e(S))} In(x, _S_ByteOffset___unnamed_16_39e6661e(S)) ==> In(home_ByteOffset___unnamed_16_39e6661e(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ByteOffset___unnamed_16_39e6661e(S))} In(x, _S_home_ByteOffset___unnamed_16_39e6661e(S)) ==> In(ByteOffset___unnamed_16_39e6661e(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ByteOffset___unnamed_16_39e6661e(S)} In(x, S) ==> In(ByteOffset___unnamed_16_39e6661e(x), _S_ByteOffset___unnamed_16_39e6661e(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ByteOffset___unnamed_16_39e6661e(S)} In(x, S) ==> In(home_ByteOffset___unnamed_16_39e6661e(x), _S_home_ByteOffset___unnamed_16_39e6661e(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1) == home_ByteOffset___unnamed_16_39e6661e(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,8))} MINUS_LEFT_PTR(x, 1, Ptr(null,8)) == home_ByteOffset___unnamed_16_39e6661e(x));
+
+
+
+
+
+function BytesPerSector__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_BytesPerSector__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_BytesPerSector__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_BytesPerSector__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {BytesPerSector__DISKETTE_EXTENSION(x)} home_BytesPerSector__DISKETTE_EXTENSION(BytesPerSector__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_BytesPerSector__DISKETTE_EXTENSION(x)} BytesPerSector__DISKETTE_EXTENSION(home_BytesPerSector__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {BytesPerSector__DISKETTE_EXTENSION(x)} BytesPerSector__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 148));
+axiom (forall x:ptr :: {home_BytesPerSector__DISKETTE_EXTENSION(x)} home_BytesPerSector__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 148));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_BytesPerSector__DISKETTE_EXTENSION(S))} In(x, _S_BytesPerSector__DISKETTE_EXTENSION(S)) ==> In(home_BytesPerSector__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_BytesPerSector__DISKETTE_EXTENSION(S))} In(x, _S_home_BytesPerSector__DISKETTE_EXTENSION(S)) ==> In(BytesPerSector__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_BytesPerSector__DISKETTE_EXTENSION(S)} In(x, S) ==> In(BytesPerSector__DISKETTE_EXTENSION(x), _S_BytesPerSector__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_BytesPerSector__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_BytesPerSector__DISKETTE_EXTENSION(x), _S_home_BytesPerSector__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,148), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,148), 1) == home_BytesPerSector__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,148))} MINUS_LEFT_PTR(x, 1, Ptr(null,148)) == home_BytesPerSector__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function CancelRoutine__IRP(ptr) returns (ptr);
+function home_CancelRoutine__IRP(ptr) returns (ptr);
+function _S_CancelRoutine__IRP([ptr]bool) returns ([ptr]bool);
+function _S_home_CancelRoutine__IRP([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {CancelRoutine__IRP(x)} home_CancelRoutine__IRP(CancelRoutine__IRP(x)) == x);
+axiom (forall x:ptr :: {home_CancelRoutine__IRP(x)} CancelRoutine__IRP(home_CancelRoutine__IRP(x)) == x);
+axiom (forall x:ptr :: {CancelRoutine__IRP(x)} CancelRoutine__IRP(x) == Ptr(Obj(x), Off(x) + 56));
+axiom (forall x:ptr :: {home_CancelRoutine__IRP(x)} home_CancelRoutine__IRP(x) == Ptr(Obj(x), Off(x) - 56));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_CancelRoutine__IRP(S))} In(x, _S_CancelRoutine__IRP(S)) ==> In(home_CancelRoutine__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_CancelRoutine__IRP(S))} In(x, _S_home_CancelRoutine__IRP(S)) ==> In(CancelRoutine__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_CancelRoutine__IRP(S)} In(x, S) ==> In(CancelRoutine__IRP(x), _S_CancelRoutine__IRP(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_CancelRoutine__IRP(S)} In(x, S) ==> In(home_CancelRoutine__IRP(x), _S_home_CancelRoutine__IRP(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,56), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,56), 1) == home_CancelRoutine__IRP(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,56))} MINUS_LEFT_PTR(x, 1, Ptr(null,56)) == home_CancelRoutine__IRP(x));
+
+
+
+
+
+function Cancel__IRP(ptr) returns (ptr);
+function home_Cancel__IRP(ptr) returns (ptr);
+function _S_Cancel__IRP([ptr]bool) returns ([ptr]bool);
+function _S_home_Cancel__IRP([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Cancel__IRP(x)} home_Cancel__IRP(Cancel__IRP(x)) == x);
+axiom (forall x:ptr :: {home_Cancel__IRP(x)} Cancel__IRP(home_Cancel__IRP(x)) == x);
+axiom (forall x:ptr :: {Cancel__IRP(x)} Cancel__IRP(x) == Ptr(Obj(x), Off(x) + 36));
+axiom (forall x:ptr :: {home_Cancel__IRP(x)} home_Cancel__IRP(x) == Ptr(Obj(x), Off(x) - 36));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Cancel__IRP(S))} In(x, _S_Cancel__IRP(S)) ==> In(home_Cancel__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Cancel__IRP(S))} In(x, _S_home_Cancel__IRP(S)) ==> In(Cancel__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Cancel__IRP(S)} In(x, S) ==> In(Cancel__IRP(x), _S_Cancel__IRP(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Cancel__IRP(S)} In(x, S) ==> In(home_Cancel__IRP(x), _S_home_Cancel__IRP(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,36), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,36), 1) == home_Cancel__IRP(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,36))} MINUS_LEFT_PTR(x, 1, Ptr(null,36)) == home_Cancel__IRP(x));
+
+
+
+
+
+function Control__IO_STACK_LOCATION(ptr) returns (ptr);
+function home_Control__IO_STACK_LOCATION(ptr) returns (ptr);
+function _S_Control__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
+function _S_home_Control__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Control__IO_STACK_LOCATION(x)} home_Control__IO_STACK_LOCATION(Control__IO_STACK_LOCATION(x)) == x);
+axiom (forall x:ptr :: {home_Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(home_Control__IO_STACK_LOCATION(x)) == x);
+axiom (forall x:ptr :: {Control__IO_STACK_LOCATION(x)} Control__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) + 3));
+axiom (forall x:ptr :: {home_Control__IO_STACK_LOCATION(x)} home_Control__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) - 3));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Control__IO_STACK_LOCATION(S))} In(x, _S_Control__IO_STACK_LOCATION(S)) ==> In(home_Control__IO_STACK_LOCATION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Control__IO_STACK_LOCATION(S))} In(x, _S_home_Control__IO_STACK_LOCATION(S)) ==> In(Control__IO_STACK_LOCATION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Control__IO_STACK_LOCATION(S)} In(x, S) ==> In(Control__IO_STACK_LOCATION(x), _S_Control__IO_STACK_LOCATION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Control__IO_STACK_LOCATION(S)} In(x, S) ==> In(home_Control__IO_STACK_LOCATION(x), _S_home_Control__IO_STACK_LOCATION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,3), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,3), 1) == home_Control__IO_STACK_LOCATION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,3))} MINUS_LEFT_PTR(x, 1, Ptr(null,3)) == home_Control__IO_STACK_LOCATION(x));
+
+
+
+
+
+function CurrentStackLocation___unnamed_4_f80453a0(ptr) returns (ptr);
+function home_CurrentStackLocation___unnamed_4_f80453a0(ptr) returns (ptr);
+function _S_CurrentStackLocation___unnamed_4_f80453a0([ptr]bool) returns ([ptr]bool);
+function _S_home_CurrentStackLocation___unnamed_4_f80453a0([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {CurrentStackLocation___unnamed_4_f80453a0(x)} home_CurrentStackLocation___unnamed_4_f80453a0(CurrentStackLocation___unnamed_4_f80453a0(x)) == x);
+axiom (forall x:ptr :: {home_CurrentStackLocation___unnamed_4_f80453a0(x)} CurrentStackLocation___unnamed_4_f80453a0(home_CurrentStackLocation___unnamed_4_f80453a0(x)) == x);
+axiom (forall x:ptr :: {CurrentStackLocation___unnamed_4_f80453a0(x)} CurrentStackLocation___unnamed_4_f80453a0(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_CurrentStackLocation___unnamed_4_f80453a0(x)} home_CurrentStackLocation___unnamed_4_f80453a0(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_CurrentStackLocation___unnamed_4_f80453a0(S))} In(x, _S_CurrentStackLocation___unnamed_4_f80453a0(S)) ==> In(home_CurrentStackLocation___unnamed_4_f80453a0(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_CurrentStackLocation___unnamed_4_f80453a0(S))} In(x, _S_home_CurrentStackLocation___unnamed_4_f80453a0(S)) ==> In(CurrentStackLocation___unnamed_4_f80453a0(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_CurrentStackLocation___unnamed_4_f80453a0(S)} In(x, S) ==> In(CurrentStackLocation___unnamed_4_f80453a0(x), _S_CurrentStackLocation___unnamed_4_f80453a0(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_CurrentStackLocation___unnamed_4_f80453a0(S)} In(x, S) ==> In(home_CurrentStackLocation___unnamed_4_f80453a0(x), _S_home_CurrentStackLocation___unnamed_4_f80453a0(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_CurrentStackLocation___unnamed_4_f80453a0(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_CurrentStackLocation___unnamed_4_f80453a0(x));
+
+
+
+
+
+function DeviceExtension__DEVICE_OBJECT(ptr) returns (ptr);
+function home_DeviceExtension__DEVICE_OBJECT(ptr) returns (ptr);
+function _S_DeviceExtension__DEVICE_OBJECT([ptr]bool) returns ([ptr]bool);
+function _S_home_DeviceExtension__DEVICE_OBJECT([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {DeviceExtension__DEVICE_OBJECT(x)} home_DeviceExtension__DEVICE_OBJECT(DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:ptr :: {home_DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(home_DeviceExtension__DEVICE_OBJECT(x)) == x);
+axiom (forall x:ptr :: {DeviceExtension__DEVICE_OBJECT(x)} DeviceExtension__DEVICE_OBJECT(x) == Ptr(Obj(x), Off(x) + 40));
+axiom (forall x:ptr :: {home_DeviceExtension__DEVICE_OBJECT(x)} home_DeviceExtension__DEVICE_OBJECT(x) == Ptr(Obj(x), Off(x) - 40));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_DeviceExtension__DEVICE_OBJECT(S))} In(x, _S_DeviceExtension__DEVICE_OBJECT(S)) ==> In(home_DeviceExtension__DEVICE_OBJECT(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_DeviceExtension__DEVICE_OBJECT(S))} In(x, _S_home_DeviceExtension__DEVICE_OBJECT(S)) ==> In(DeviceExtension__DEVICE_OBJECT(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_DeviceExtension__DEVICE_OBJECT(S)} In(x, S) ==> In(DeviceExtension__DEVICE_OBJECT(x), _S_DeviceExtension__DEVICE_OBJECT(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_DeviceExtension__DEVICE_OBJECT(S)} In(x, S) ==> In(home_DeviceExtension__DEVICE_OBJECT(x), _S_home_DeviceExtension__DEVICE_OBJECT(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,40), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,40), 1) == home_DeviceExtension__DEVICE_OBJECT(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,40))} MINUS_LEFT_PTR(x, 1, Ptr(null,40)) == home_DeviceExtension__DEVICE_OBJECT(x));
+
+
+
+
+
+function DeviceObject__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_DeviceObject__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_DeviceObject__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_DeviceObject__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {DeviceObject__DISKETTE_EXTENSION(x)} home_DeviceObject__DISKETTE_EXTENSION(DeviceObject__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_DeviceObject__DISKETTE_EXTENSION(x)} DeviceObject__DISKETTE_EXTENSION(home_DeviceObject__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {DeviceObject__DISKETTE_EXTENSION(x)} DeviceObject__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 28));
+axiom (forall x:ptr :: {home_DeviceObject__DISKETTE_EXTENSION(x)} home_DeviceObject__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 28));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_DeviceObject__DISKETTE_EXTENSION(S))} In(x, _S_DeviceObject__DISKETTE_EXTENSION(S)) ==> In(home_DeviceObject__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_DeviceObject__DISKETTE_EXTENSION(S))} In(x, _S_home_DeviceObject__DISKETTE_EXTENSION(S)) ==> In(DeviceObject__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_DeviceObject__DISKETTE_EXTENSION(S)} In(x, S) ==> In(DeviceObject__DISKETTE_EXTENSION(x), _S_DeviceObject__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_DeviceObject__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_DeviceObject__DISKETTE_EXTENSION(x), _S_home_DeviceObject__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,28), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,28), 1) == home_DeviceObject__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,28))} MINUS_LEFT_PTR(x, 1, Ptr(null,28)) == home_DeviceObject__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function FlCancelSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_FlCancelSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_FlCancelSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_FlCancelSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {FlCancelSpinLock__DISKETTE_EXTENSION(x)} home_FlCancelSpinLock__DISKETTE_EXTENSION(FlCancelSpinLock__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_FlCancelSpinLock__DISKETTE_EXTENSION(x)} FlCancelSpinLock__DISKETTE_EXTENSION(home_FlCancelSpinLock__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {FlCancelSpinLock__DISKETTE_EXTENSION(x)} FlCancelSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_FlCancelSpinLock__DISKETTE_EXTENSION(x)} home_FlCancelSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_FlCancelSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_FlCancelSpinLock__DISKETTE_EXTENSION(S)) ==> In(home_FlCancelSpinLock__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S)) ==> In(FlCancelSpinLock__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_FlCancelSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(FlCancelSpinLock__DISKETTE_EXTENSION(x), _S_FlCancelSpinLock__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_FlCancelSpinLock__DISKETTE_EXTENSION(x), _S_home_FlCancelSpinLock__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_FlCancelSpinLock__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_FlCancelSpinLock__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function HoldNewReqMutex__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_HoldNewReqMutex__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_HoldNewReqMutex__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_HoldNewReqMutex__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {HoldNewReqMutex__DISKETTE_EXTENSION(x)} home_HoldNewReqMutex__DISKETTE_EXTENSION(HoldNewReqMutex__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_HoldNewReqMutex__DISKETTE_EXTENSION(x)} HoldNewReqMutex__DISKETTE_EXTENSION(home_HoldNewReqMutex__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {HoldNewReqMutex__DISKETTE_EXTENSION(x)} HoldNewReqMutex__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 316));
+axiom (forall x:ptr :: {home_HoldNewReqMutex__DISKETTE_EXTENSION(x)} home_HoldNewReqMutex__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 316));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_HoldNewReqMutex__DISKETTE_EXTENSION(S))} In(x, _S_HoldNewReqMutex__DISKETTE_EXTENSION(S)) ==> In(home_HoldNewReqMutex__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S))} In(x, _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S)) ==> In(HoldNewReqMutex__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_HoldNewReqMutex__DISKETTE_EXTENSION(S)} In(x, S) ==> In(HoldNewReqMutex__DISKETTE_EXTENSION(x), _S_HoldNewReqMutex__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_HoldNewReqMutex__DISKETTE_EXTENSION(x), _S_home_HoldNewReqMutex__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,316), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,316), 1) == home_HoldNewReqMutex__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,316))} MINUS_LEFT_PTR(x, 1, Ptr(null,316)) == home_HoldNewReqMutex__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function HoldNewRequests__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_HoldNewRequests__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_HoldNewRequests__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_HoldNewRequests__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {HoldNewRequests__DISKETTE_EXTENSION(x)} home_HoldNewRequests__DISKETTE_EXTENSION(HoldNewRequests__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_HoldNewRequests__DISKETTE_EXTENSION(x)} HoldNewRequests__DISKETTE_EXTENSION(home_HoldNewRequests__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {HoldNewRequests__DISKETTE_EXTENSION(x)} HoldNewRequests__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 14));
+axiom (forall x:ptr :: {home_HoldNewRequests__DISKETTE_EXTENSION(x)} home_HoldNewRequests__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 14));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_HoldNewRequests__DISKETTE_EXTENSION(S))} In(x, _S_HoldNewRequests__DISKETTE_EXTENSION(S)) ==> In(home_HoldNewRequests__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_HoldNewRequests__DISKETTE_EXTENSION(S))} In(x, _S_home_HoldNewRequests__DISKETTE_EXTENSION(S)) ==> In(HoldNewRequests__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_HoldNewRequests__DISKETTE_EXTENSION(S)} In(x, S) ==> In(HoldNewRequests__DISKETTE_EXTENSION(x), _S_HoldNewRequests__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_HoldNewRequests__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_HoldNewRequests__DISKETTE_EXTENSION(x), _S_home_HoldNewRequests__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,14), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,14), 1) == home_HoldNewRequests__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,14))} MINUS_LEFT_PTR(x, 1, Ptr(null,14)) == home_HoldNewRequests__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function Information__IO_STATUS_BLOCK(ptr) returns (ptr);
+function home_Information__IO_STATUS_BLOCK(ptr) returns (ptr);
+function _S_Information__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
+function _S_home_Information__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Information__IO_STATUS_BLOCK(x)} home_Information__IO_STATUS_BLOCK(Information__IO_STATUS_BLOCK(x)) == x);
+axiom (forall x:ptr :: {home_Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(home_Information__IO_STATUS_BLOCK(x)) == x);
+axiom (forall x:ptr :: {Information__IO_STATUS_BLOCK(x)} Information__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) + 4));
+axiom (forall x:ptr :: {home_Information__IO_STATUS_BLOCK(x)} home_Information__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) - 4));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Information__IO_STATUS_BLOCK(S))} In(x, _S_Information__IO_STATUS_BLOCK(S)) ==> In(home_Information__IO_STATUS_BLOCK(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Information__IO_STATUS_BLOCK(S))} In(x, _S_home_Information__IO_STATUS_BLOCK(S)) ==> In(Information__IO_STATUS_BLOCK(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Information__IO_STATUS_BLOCK(S)} In(x, S) ==> In(Information__IO_STATUS_BLOCK(x), _S_Information__IO_STATUS_BLOCK(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Information__IO_STATUS_BLOCK(S)} In(x, S) ==> In(home_Information__IO_STATUS_BLOCK(x), _S_home_Information__IO_STATUS_BLOCK(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1) == home_Information__IO_STATUS_BLOCK(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,4))} MINUS_LEFT_PTR(x, 1, Ptr(null,4)) == home_Information__IO_STATUS_BLOCK(x));
+
+
+
+
+
+function IoStatus__IRP(ptr) returns (ptr);
+function home_IoStatus__IRP(ptr) returns (ptr);
+function _S_IoStatus__IRP([ptr]bool) returns ([ptr]bool);
+function _S_home_IoStatus__IRP([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {IoStatus__IRP(x)} home_IoStatus__IRP(IoStatus__IRP(x)) == x);
+axiom (forall x:ptr :: {home_IoStatus__IRP(x)} IoStatus__IRP(home_IoStatus__IRP(x)) == x);
+axiom (forall x:ptr :: {IoStatus__IRP(x)} IoStatus__IRP(x) == Ptr(Obj(x), Off(x) + 24));
+axiom (forall x:ptr :: {home_IoStatus__IRP(x)} home_IoStatus__IRP(x) == Ptr(Obj(x), Off(x) - 24));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_IoStatus__IRP(S))} In(x, _S_IoStatus__IRP(S)) ==> In(home_IoStatus__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_IoStatus__IRP(S))} In(x, _S_home_IoStatus__IRP(S)) ==> In(IoStatus__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_IoStatus__IRP(S)} In(x, S) ==> In(IoStatus__IRP(x), _S_IoStatus__IRP(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_IoStatus__IRP(S)} In(x, S) ==> In(home_IoStatus__IRP(x), _S_home_IoStatus__IRP(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1) == home_IoStatus__IRP(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,24))} MINUS_LEFT_PTR(x, 1, Ptr(null,24)) == home_IoStatus__IRP(x));
+
+
+
+
+
+function IsRemoved__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_IsRemoved__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_IsRemoved__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_IsRemoved__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {IsRemoved__DISKETTE_EXTENSION(x)} home_IsRemoved__DISKETTE_EXTENSION(IsRemoved__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_IsRemoved__DISKETTE_EXTENSION(x)} IsRemoved__DISKETTE_EXTENSION(home_IsRemoved__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {IsRemoved__DISKETTE_EXTENSION(x)} IsRemoved__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 13));
+axiom (forall x:ptr :: {home_IsRemoved__DISKETTE_EXTENSION(x)} home_IsRemoved__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 13));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_IsRemoved__DISKETTE_EXTENSION(S))} In(x, _S_IsRemoved__DISKETTE_EXTENSION(S)) ==> In(home_IsRemoved__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_IsRemoved__DISKETTE_EXTENSION(S))} In(x, _S_home_IsRemoved__DISKETTE_EXTENSION(S)) ==> In(IsRemoved__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_IsRemoved__DISKETTE_EXTENSION(S)} In(x, S) ==> In(IsRemoved__DISKETTE_EXTENSION(x), _S_IsRemoved__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_IsRemoved__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_IsRemoved__DISKETTE_EXTENSION(x), _S_home_IsRemoved__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,13), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,13), 1) == home_IsRemoved__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,13))} MINUS_LEFT_PTR(x, 1, Ptr(null,13)) == home_IsRemoved__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function IsStarted__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_IsStarted__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_IsStarted__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_IsStarted__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {IsStarted__DISKETTE_EXTENSION(x)} home_IsStarted__DISKETTE_EXTENSION(IsStarted__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_IsStarted__DISKETTE_EXTENSION(x)} IsStarted__DISKETTE_EXTENSION(home_IsStarted__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {IsStarted__DISKETTE_EXTENSION(x)} IsStarted__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 12));
+axiom (forall x:ptr :: {home_IsStarted__DISKETTE_EXTENSION(x)} home_IsStarted__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 12));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_IsStarted__DISKETTE_EXTENSION(S))} In(x, _S_IsStarted__DISKETTE_EXTENSION(S)) ==> In(home_IsStarted__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_IsStarted__DISKETTE_EXTENSION(S))} In(x, _S_home_IsStarted__DISKETTE_EXTENSION(S)) ==> In(IsStarted__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_IsStarted__DISKETTE_EXTENSION(S)} In(x, S) ==> In(IsStarted__DISKETTE_EXTENSION(x), _S_IsStarted__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_IsStarted__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_IsStarted__DISKETTE_EXTENSION(x), _S_home_IsStarted__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,12), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,12), 1) == home_IsStarted__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,12))} MINUS_LEFT_PTR(x, 1, Ptr(null,12)) == home_IsStarted__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function Length___unnamed_16_39e6661e(ptr) returns (ptr);
+function home_Length___unnamed_16_39e6661e(ptr) returns (ptr);
+function _S_Length___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
+function _S_home_Length___unnamed_16_39e6661e([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Length___unnamed_16_39e6661e(x)} home_Length___unnamed_16_39e6661e(Length___unnamed_16_39e6661e(x)) == x);
+axiom (forall x:ptr :: {home_Length___unnamed_16_39e6661e(x)} Length___unnamed_16_39e6661e(home_Length___unnamed_16_39e6661e(x)) == x);
+axiom (forall x:ptr :: {Length___unnamed_16_39e6661e(x)} Length___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_Length___unnamed_16_39e6661e(x)} home_Length___unnamed_16_39e6661e(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Length___unnamed_16_39e6661e(S))} In(x, _S_Length___unnamed_16_39e6661e(S)) ==> In(home_Length___unnamed_16_39e6661e(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Length___unnamed_16_39e6661e(S))} In(x, _S_home_Length___unnamed_16_39e6661e(S)) ==> In(Length___unnamed_16_39e6661e(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Length___unnamed_16_39e6661e(S)} In(x, S) ==> In(Length___unnamed_16_39e6661e(x), _S_Length___unnamed_16_39e6661e(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Length___unnamed_16_39e6661e(S)} In(x, S) ==> In(home_Length___unnamed_16_39e6661e(x), _S_home_Length___unnamed_16_39e6661e(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Length___unnamed_16_39e6661e(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Length___unnamed_16_39e6661e(x));
+
+
+
+
+
+function ListEntry___unnamed_12_003c1454(ptr) returns (ptr);
+function home_ListEntry___unnamed_12_003c1454(ptr) returns (ptr);
+function _S_ListEntry___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
+function _S_home_ListEntry___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {ListEntry___unnamed_12_003c1454(x)} home_ListEntry___unnamed_12_003c1454(ListEntry___unnamed_12_003c1454(x)) == x);
+axiom (forall x:ptr :: {home_ListEntry___unnamed_12_003c1454(x)} ListEntry___unnamed_12_003c1454(home_ListEntry___unnamed_12_003c1454(x)) == x);
+axiom (forall x:ptr :: {ListEntry___unnamed_12_003c1454(x)} ListEntry___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_ListEntry___unnamed_12_003c1454(x)} home_ListEntry___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ListEntry___unnamed_12_003c1454(S))} In(x, _S_ListEntry___unnamed_12_003c1454(S)) ==> In(home_ListEntry___unnamed_12_003c1454(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ListEntry___unnamed_12_003c1454(S))} In(x, _S_home_ListEntry___unnamed_12_003c1454(S)) ==> In(ListEntry___unnamed_12_003c1454(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ListEntry___unnamed_12_003c1454(S)} In(x, S) ==> In(ListEntry___unnamed_12_003c1454(x), _S_ListEntry___unnamed_12_003c1454(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ListEntry___unnamed_12_003c1454(S)} In(x, S) ==> In(home_ListEntry___unnamed_12_003c1454(x), _S_home_ListEntry___unnamed_12_003c1454(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_ListEntry___unnamed_12_003c1454(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_ListEntry___unnamed_12_003c1454(x));
+
+
+
+
+
+function ListSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_ListSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_ListSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_ListSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {ListSpinLock__DISKETTE_EXTENSION(x)} home_ListSpinLock__DISKETTE_EXTENSION(ListSpinLock__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_ListSpinLock__DISKETTE_EXTENSION(x)} ListSpinLock__DISKETTE_EXTENSION(home_ListSpinLock__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {ListSpinLock__DISKETTE_EXTENSION(x)} ListSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 52));
+axiom (forall x:ptr :: {home_ListSpinLock__DISKETTE_EXTENSION(x)} home_ListSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 52));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_ListSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_ListSpinLock__DISKETTE_EXTENSION(S)) ==> In(home_ListSpinLock__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_ListSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_home_ListSpinLock__DISKETTE_EXTENSION(S)) ==> In(ListSpinLock__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_ListSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(ListSpinLock__DISKETTE_EXTENSION(x), _S_ListSpinLock__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_ListSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_ListSpinLock__DISKETTE_EXTENSION(x), _S_home_ListSpinLock__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,52), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,52), 1) == home_ListSpinLock__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,52))} MINUS_LEFT_PTR(x, 1, Ptr(null,52)) == home_ListSpinLock__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function LowPart___unnamed_8_34582070(ptr) returns (ptr);
+function home_LowPart___unnamed_8_34582070(ptr) returns (ptr);
+function _S_LowPart___unnamed_8_34582070([ptr]bool) returns ([ptr]bool);
+function _S_home_LowPart___unnamed_8_34582070([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {LowPart___unnamed_8_34582070(x)} home_LowPart___unnamed_8_34582070(LowPart___unnamed_8_34582070(x)) == x);
+axiom (forall x:ptr :: {home_LowPart___unnamed_8_34582070(x)} LowPart___unnamed_8_34582070(home_LowPart___unnamed_8_34582070(x)) == x);
+axiom (forall x:ptr :: {LowPart___unnamed_8_34582070(x)} LowPart___unnamed_8_34582070(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_LowPart___unnamed_8_34582070(x)} home_LowPart___unnamed_8_34582070(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_LowPart___unnamed_8_34582070(S))} In(x, _S_LowPart___unnamed_8_34582070(S)) ==> In(home_LowPart___unnamed_8_34582070(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_LowPart___unnamed_8_34582070(S))} In(x, _S_home_LowPart___unnamed_8_34582070(S)) ==> In(LowPart___unnamed_8_34582070(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_LowPart___unnamed_8_34582070(S)} In(x, S) ==> In(LowPart___unnamed_8_34582070(x), _S_LowPart___unnamed_8_34582070(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_LowPart___unnamed_8_34582070(S)} In(x, S) ==> In(home_LowPart___unnamed_8_34582070(x), _S_home_LowPart___unnamed_8_34582070(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_LowPart___unnamed_8_34582070(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_LowPart___unnamed_8_34582070(x));
+
+
+
+
+
+function MediaType__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_MediaType__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_MediaType__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_MediaType__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {MediaType__DISKETTE_EXTENSION(x)} home_MediaType__DISKETTE_EXTENSION(MediaType__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_MediaType__DISKETTE_EXTENSION(x)} MediaType__DISKETTE_EXTENSION(home_MediaType__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {MediaType__DISKETTE_EXTENSION(x)} MediaType__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 156));
+axiom (forall x:ptr :: {home_MediaType__DISKETTE_EXTENSION(x)} home_MediaType__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 156));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_MediaType__DISKETTE_EXTENSION(S))} In(x, _S_MediaType__DISKETTE_EXTENSION(S)) ==> In(home_MediaType__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_MediaType__DISKETTE_EXTENSION(S))} In(x, _S_home_MediaType__DISKETTE_EXTENSION(S)) ==> In(MediaType__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_MediaType__DISKETTE_EXTENSION(S)} In(x, S) ==> In(MediaType__DISKETTE_EXTENSION(x), _S_MediaType__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_MediaType__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_MediaType__DISKETTE_EXTENSION(x), _S_home_MediaType__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,156), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,156), 1) == home_MediaType__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,156))} MINUS_LEFT_PTR(x, 1, Ptr(null,156)) == home_MediaType__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function NewRequestQueueSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} NewRequestQueueSpinLock__DISKETTE_EXTENSION(home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} NewRequestQueueSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 24));
+axiom (forall x:ptr :: {home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x)} home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 24));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)) ==> In(home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S))} In(x, _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)) ==> In(NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), _S_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x), _S_home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1) == home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,24))} MINUS_LEFT_PTR(x, 1, Ptr(null,24)) == home_NewRequestQueueSpinLock__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function NewRequestQueue__DISKETTE_EXTENSION(ptr) returns (ptr);
+function home_NewRequestQueue__DISKETTE_EXTENSION(ptr) returns (ptr);
+function _S_NewRequestQueue__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+function _S_home_NewRequestQueue__DISKETTE_EXTENSION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {NewRequestQueue__DISKETTE_EXTENSION(x)} home_NewRequestQueue__DISKETTE_EXTENSION(NewRequestQueue__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {home_NewRequestQueue__DISKETTE_EXTENSION(x)} NewRequestQueue__DISKETTE_EXTENSION(home_NewRequestQueue__DISKETTE_EXTENSION(x)) == x);
+axiom (forall x:ptr :: {NewRequestQueue__DISKETTE_EXTENSION(x)} NewRequestQueue__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) + 16));
+axiom (forall x:ptr :: {home_NewRequestQueue__DISKETTE_EXTENSION(x)} home_NewRequestQueue__DISKETTE_EXTENSION(x) == Ptr(Obj(x), Off(x) - 16));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_NewRequestQueue__DISKETTE_EXTENSION(S))} In(x, _S_NewRequestQueue__DISKETTE_EXTENSION(S)) ==> In(home_NewRequestQueue__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_NewRequestQueue__DISKETTE_EXTENSION(S))} In(x, _S_home_NewRequestQueue__DISKETTE_EXTENSION(S)) ==> In(NewRequestQueue__DISKETTE_EXTENSION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_NewRequestQueue__DISKETTE_EXTENSION(S)} In(x, S) ==> In(NewRequestQueue__DISKETTE_EXTENSION(x), _S_NewRequestQueue__DISKETTE_EXTENSION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_NewRequestQueue__DISKETTE_EXTENSION(S)} In(x, S) ==> In(home_NewRequestQueue__DISKETTE_EXTENSION(x), _S_home_NewRequestQueue__DISKETTE_EXTENSION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,16), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,16), 1) == home_NewRequestQueue__DISKETTE_EXTENSION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,16))} MINUS_LEFT_PTR(x, 1, Ptr(null,16)) == home_NewRequestQueue__DISKETTE_EXTENSION(x));
+
+
+
+
+
+function Overlay___unnamed_48_c27ef811(ptr) returns (ptr);
+function home_Overlay___unnamed_48_c27ef811(ptr) returns (ptr);
+function _S_Overlay___unnamed_48_c27ef811([ptr]bool) returns ([ptr]bool);
+function _S_home_Overlay___unnamed_48_c27ef811([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Overlay___unnamed_48_c27ef811(x)} home_Overlay___unnamed_48_c27ef811(Overlay___unnamed_48_c27ef811(x)) == x);
+axiom (forall x:ptr :: {home_Overlay___unnamed_48_c27ef811(x)} Overlay___unnamed_48_c27ef811(home_Overlay___unnamed_48_c27ef811(x)) == x);
+axiom (forall x:ptr :: {Overlay___unnamed_48_c27ef811(x)} Overlay___unnamed_48_c27ef811(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_Overlay___unnamed_48_c27ef811(x)} home_Overlay___unnamed_48_c27ef811(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Overlay___unnamed_48_c27ef811(S))} In(x, _S_Overlay___unnamed_48_c27ef811(S)) ==> In(home_Overlay___unnamed_48_c27ef811(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Overlay___unnamed_48_c27ef811(S))} In(x, _S_home_Overlay___unnamed_48_c27ef811(S)) ==> In(Overlay___unnamed_48_c27ef811(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Overlay___unnamed_48_c27ef811(S)} In(x, S) ==> In(Overlay___unnamed_48_c27ef811(x), _S_Overlay___unnamed_48_c27ef811(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Overlay___unnamed_48_c27ef811(S)} In(x, S) ==> In(home_Overlay___unnamed_48_c27ef811(x), _S_home_Overlay___unnamed_48_c27ef811(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Overlay___unnamed_48_c27ef811(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Overlay___unnamed_48_c27ef811(x));
+
+
+
+
+
+function Parameters__IO_STACK_LOCATION(ptr) returns (ptr);
+function home_Parameters__IO_STACK_LOCATION(ptr) returns (ptr);
+function _S_Parameters__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
+function _S_home_Parameters__IO_STACK_LOCATION([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Parameters__IO_STACK_LOCATION(x)} home_Parameters__IO_STACK_LOCATION(Parameters__IO_STACK_LOCATION(x)) == x);
+axiom (forall x:ptr :: {home_Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(home_Parameters__IO_STACK_LOCATION(x)) == x);
+axiom (forall x:ptr :: {Parameters__IO_STACK_LOCATION(x)} Parameters__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) + 4));
+axiom (forall x:ptr :: {home_Parameters__IO_STACK_LOCATION(x)} home_Parameters__IO_STACK_LOCATION(x) == Ptr(Obj(x), Off(x) - 4));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Parameters__IO_STACK_LOCATION(S))} In(x, _S_Parameters__IO_STACK_LOCATION(S)) ==> In(home_Parameters__IO_STACK_LOCATION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Parameters__IO_STACK_LOCATION(S))} In(x, _S_home_Parameters__IO_STACK_LOCATION(S)) ==> In(Parameters__IO_STACK_LOCATION(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Parameters__IO_STACK_LOCATION(S)} In(x, S) ==> In(Parameters__IO_STACK_LOCATION(x), _S_Parameters__IO_STACK_LOCATION(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Parameters__IO_STACK_LOCATION(S)} In(x, S) ==> In(home_Parameters__IO_STACK_LOCATION(x), _S_home_Parameters__IO_STACK_LOCATION(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,4), 1) == home_Parameters__IO_STACK_LOCATION(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,4))} MINUS_LEFT_PTR(x, 1, Ptr(null,4)) == home_Parameters__IO_STACK_LOCATION(x));
+
+
+
+
+
+function Read___unnamed_16_c0f0e7de(ptr) returns (ptr);
+function home_Read___unnamed_16_c0f0e7de(ptr) returns (ptr);
+function _S_Read___unnamed_16_c0f0e7de([ptr]bool) returns ([ptr]bool);
+function _S_home_Read___unnamed_16_c0f0e7de([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Read___unnamed_16_c0f0e7de(x)} home_Read___unnamed_16_c0f0e7de(Read___unnamed_16_c0f0e7de(x)) == x);
+axiom (forall x:ptr :: {home_Read___unnamed_16_c0f0e7de(x)} Read___unnamed_16_c0f0e7de(home_Read___unnamed_16_c0f0e7de(x)) == x);
+axiom (forall x:ptr :: {Read___unnamed_16_c0f0e7de(x)} Read___unnamed_16_c0f0e7de(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_Read___unnamed_16_c0f0e7de(x)} home_Read___unnamed_16_c0f0e7de(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Read___unnamed_16_c0f0e7de(S))} In(x, _S_Read___unnamed_16_c0f0e7de(S)) ==> In(home_Read___unnamed_16_c0f0e7de(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Read___unnamed_16_c0f0e7de(S))} In(x, _S_home_Read___unnamed_16_c0f0e7de(S)) ==> In(Read___unnamed_16_c0f0e7de(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Read___unnamed_16_c0f0e7de(S)} In(x, S) ==> In(Read___unnamed_16_c0f0e7de(x), _S_Read___unnamed_16_c0f0e7de(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Read___unnamed_16_c0f0e7de(S)} In(x, S) ==> In(home_Read___unnamed_16_c0f0e7de(x), _S_home_Read___unnamed_16_c0f0e7de(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Read___unnamed_16_c0f0e7de(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Read___unnamed_16_c0f0e7de(x));
+
+
+
+
+
+function Status___unnamed_4_c7b3d275(ptr) returns (ptr);
+function home_Status___unnamed_4_c7b3d275(ptr) returns (ptr);
+function _S_Status___unnamed_4_c7b3d275([ptr]bool) returns ([ptr]bool);
+function _S_home_Status___unnamed_4_c7b3d275([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Status___unnamed_4_c7b3d275(x)} home_Status___unnamed_4_c7b3d275(Status___unnamed_4_c7b3d275(x)) == x);
+axiom (forall x:ptr :: {home_Status___unnamed_4_c7b3d275(x)} Status___unnamed_4_c7b3d275(home_Status___unnamed_4_c7b3d275(x)) == x);
+axiom (forall x:ptr :: {Status___unnamed_4_c7b3d275(x)} Status___unnamed_4_c7b3d275(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home_Status___unnamed_4_c7b3d275(x)} home_Status___unnamed_4_c7b3d275(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Status___unnamed_4_c7b3d275(S))} In(x, _S_Status___unnamed_4_c7b3d275(S)) ==> In(home_Status___unnamed_4_c7b3d275(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Status___unnamed_4_c7b3d275(S))} In(x, _S_home_Status___unnamed_4_c7b3d275(S)) ==> In(Status___unnamed_4_c7b3d275(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Status___unnamed_4_c7b3d275(S)} In(x, S) ==> In(Status___unnamed_4_c7b3d275(x), _S_Status___unnamed_4_c7b3d275(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Status___unnamed_4_c7b3d275(S)} In(x, S) ==> In(home_Status___unnamed_4_c7b3d275(x), _S_home_Status___unnamed_4_c7b3d275(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home_Status___unnamed_4_c7b3d275(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home_Status___unnamed_4_c7b3d275(x));
+
+
+
+
+
+function Tail__IRP(ptr) returns (ptr);
+function home_Tail__IRP(ptr) returns (ptr);
+function _S_Tail__IRP([ptr]bool) returns ([ptr]bool);
+function _S_home_Tail__IRP([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {Tail__IRP(x)} home_Tail__IRP(Tail__IRP(x)) == x);
+axiom (forall x:ptr :: {home_Tail__IRP(x)} Tail__IRP(home_Tail__IRP(x)) == x);
+axiom (forall x:ptr :: {Tail__IRP(x)} Tail__IRP(x) == Ptr(Obj(x), Off(x) + 64));
+axiom (forall x:ptr :: {home_Tail__IRP(x)} home_Tail__IRP(x) == Ptr(Obj(x), Off(x) - 64));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_Tail__IRP(S))} In(x, _S_Tail__IRP(S)) ==> In(home_Tail__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home_Tail__IRP(S))} In(x, _S_home_Tail__IRP(S)) ==> In(Tail__IRP(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_Tail__IRP(S)} In(x, S) ==> In(Tail__IRP(x), _S_Tail__IRP(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home_Tail__IRP(S)} In(x, S) ==> In(home_Tail__IRP(x), _S_home_Tail__IRP(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,64), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,64), 1) == home_Tail__IRP(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,64))} MINUS_LEFT_PTR(x, 1, Ptr(null,64)) == home_Tail__IRP(x));
+
+
+
+
+
+function __unnamed_12_003c1454___unnamed_40_6ef75b20(ptr) returns (ptr);
+function home___unnamed_12_003c1454___unnamed_40_6ef75b20(ptr) returns (ptr);
+function _S___unnamed_12_003c1454___unnamed_40_6ef75b20([ptr]bool) returns ([ptr]bool);
+function _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {__unnamed_12_003c1454___unnamed_40_6ef75b20(x)} home___unnamed_12_003c1454___unnamed_40_6ef75b20(__unnamed_12_003c1454___unnamed_40_6ef75b20(x)) == x);
+axiom (forall x:ptr :: {home___unnamed_12_003c1454___unnamed_40_6ef75b20(x)} __unnamed_12_003c1454___unnamed_40_6ef75b20(home___unnamed_12_003c1454___unnamed_40_6ef75b20(x)) == x);
+axiom (forall x:ptr :: {__unnamed_12_003c1454___unnamed_40_6ef75b20(x)} __unnamed_12_003c1454___unnamed_40_6ef75b20(x) == Ptr(Obj(x), Off(x) + 24));
+axiom (forall x:ptr :: {home___unnamed_12_003c1454___unnamed_40_6ef75b20(x)} home___unnamed_12_003c1454___unnamed_40_6ef75b20(x) == Ptr(Obj(x), Off(x) - 24));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S))} In(x, _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S)) ==> In(home___unnamed_12_003c1454___unnamed_40_6ef75b20(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S))} In(x, _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S)) ==> In(__unnamed_12_003c1454___unnamed_40_6ef75b20(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S)} In(x, S) ==> In(__unnamed_12_003c1454___unnamed_40_6ef75b20(x), _S___unnamed_12_003c1454___unnamed_40_6ef75b20(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S)} In(x, S) ==> In(home___unnamed_12_003c1454___unnamed_40_6ef75b20(x), _S_home___unnamed_12_003c1454___unnamed_40_6ef75b20(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,24), 1) == home___unnamed_12_003c1454___unnamed_40_6ef75b20(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,24))} MINUS_LEFT_PTR(x, 1, Ptr(null,24)) == home___unnamed_12_003c1454___unnamed_40_6ef75b20(x));
+
+
+
+
+
+function __unnamed_4_c7b3d275__IO_STATUS_BLOCK(ptr) returns (ptr);
+function home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(ptr) returns (ptr);
+function _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
+function _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)) == x);
+axiom (forall x:ptr :: {home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} __unnamed_4_c7b3d275__IO_STATUS_BLOCK(home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)) == x);
+axiom (forall x:ptr :: {__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} __unnamed_4_c7b3d275__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x)} home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S))} In(x, _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)) ==> In(home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S))} In(x, _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)) ==> In(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)} In(x, S) ==> In(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), _S___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)} In(x, S) ==> In(home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x), _S_home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home___unnamed_4_c7b3d275__IO_STATUS_BLOCK(x));
+
+
+
+
+
+function __unnamed_4_f80453a0___unnamed_12_003c1454(ptr) returns (ptr);
+function home___unnamed_4_f80453a0___unnamed_12_003c1454(ptr) returns (ptr);
+function _S___unnamed_4_f80453a0___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
+function _S_home___unnamed_4_f80453a0___unnamed_12_003c1454([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {__unnamed_4_f80453a0___unnamed_12_003c1454(x)} home___unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_4_f80453a0___unnamed_12_003c1454(x)) == x);
+axiom (forall x:ptr :: {home___unnamed_4_f80453a0___unnamed_12_003c1454(x)} __unnamed_4_f80453a0___unnamed_12_003c1454(home___unnamed_4_f80453a0___unnamed_12_003c1454(x)) == x);
+axiom (forall x:ptr :: {__unnamed_4_f80453a0___unnamed_12_003c1454(x)} __unnamed_4_f80453a0___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) + 8));
+axiom (forall x:ptr :: {home___unnamed_4_f80453a0___unnamed_12_003c1454(x)} home___unnamed_4_f80453a0___unnamed_12_003c1454(x) == Ptr(Obj(x), Off(x) - 8));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_4_f80453a0___unnamed_12_003c1454(S))} In(x, _S___unnamed_4_f80453a0___unnamed_12_003c1454(S)) ==> In(home___unnamed_4_f80453a0___unnamed_12_003c1454(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S))} In(x, _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S)) ==> In(__unnamed_4_f80453a0___unnamed_12_003c1454(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_4_f80453a0___unnamed_12_003c1454(S)} In(x, S) ==> In(__unnamed_4_f80453a0___unnamed_12_003c1454(x), _S___unnamed_4_f80453a0___unnamed_12_003c1454(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S)} In(x, S) ==> In(home___unnamed_4_f80453a0___unnamed_12_003c1454(x), _S_home___unnamed_4_f80453a0___unnamed_12_003c1454(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,8), 1) == home___unnamed_4_f80453a0___unnamed_12_003c1454(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,8))} MINUS_LEFT_PTR(x, 1, Ptr(null,8)) == home___unnamed_4_f80453a0___unnamed_12_003c1454(x));
+
+
+
+
+
+function __unnamed_8_34582070__LARGE_INTEGER(ptr) returns (ptr);
+function home___unnamed_8_34582070__LARGE_INTEGER(ptr) returns (ptr);
+function _S___unnamed_8_34582070__LARGE_INTEGER([ptr]bool) returns ([ptr]bool);
+function _S_home___unnamed_8_34582070__LARGE_INTEGER([ptr]bool) returns ([ptr]bool);
+
+axiom (forall x:ptr :: {__unnamed_8_34582070__LARGE_INTEGER(x)} home___unnamed_8_34582070__LARGE_INTEGER(__unnamed_8_34582070__LARGE_INTEGER(x)) == x);
+axiom (forall x:ptr :: {home___unnamed_8_34582070__LARGE_INTEGER(x)} __unnamed_8_34582070__LARGE_INTEGER(home___unnamed_8_34582070__LARGE_INTEGER(x)) == x);
+axiom (forall x:ptr :: {__unnamed_8_34582070__LARGE_INTEGER(x)} __unnamed_8_34582070__LARGE_INTEGER(x) == Ptr(Obj(x), Off(x) + 0));
+axiom (forall x:ptr :: {home___unnamed_8_34582070__LARGE_INTEGER(x)} home___unnamed_8_34582070__LARGE_INTEGER(x) == Ptr(Obj(x), Off(x) - 0));
+
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S___unnamed_8_34582070__LARGE_INTEGER(S))} In(x, _S___unnamed_8_34582070__LARGE_INTEGER(S)) ==> In(home___unnamed_8_34582070__LARGE_INTEGER(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, _S_home___unnamed_8_34582070__LARGE_INTEGER(S))} In(x, _S_home___unnamed_8_34582070__LARGE_INTEGER(S)) ==> In(__unnamed_8_34582070__LARGE_INTEGER(x), S));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S___unnamed_8_34582070__LARGE_INTEGER(S)} In(x, S) ==> In(__unnamed_8_34582070__LARGE_INTEGER(x), _S___unnamed_8_34582070__LARGE_INTEGER(S)));
+axiom (forall x:ptr, S:[ptr]bool :: {In(x, S), _S_home___unnamed_8_34582070__LARGE_INTEGER(S)} In(x, S) ==> In(home___unnamed_8_34582070__LARGE_INTEGER(x), _S_home___unnamed_8_34582070__LARGE_INTEGER(S)));
+
+axiom (forall x:ptr :: {MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1)} MINUS_BOTH_PTR_OR_BOTH_INT(x, Ptr(null,0), 1) == home___unnamed_8_34582070__LARGE_INTEGER(x));
+axiom (forall x:ptr :: {MINUS_LEFT_PTR(x, 1, Ptr(null,0))} MINUS_LEFT_PTR(x, 1, Ptr(null,0)) == home___unnamed_8_34582070__LARGE_INTEGER(x));
+
+
+
+// Axiom for null constraint
+//modifying to make the signature match with old BSConstraint that constrains Mem
+function BSConstraint
+(
+ BS:[ptr]bool,
+ Mem:[ptr]ptr
+) returns (bool);
+
+axiom (
+ forall
+ BS:[ptr]bool, Mem:[ptr]ptr :: {BSConstraint(BS,Mem)}
+
+ BSConstraint(BS,Mem)
+ ==>
+ (
+ (forall i:int :: {Ptr(null,i)} BS[Ptr(null,i)])
+/*
+ &&
+
+ (forall a:ptr :: {BS[a]} Element(a))
+*/
+ )
+);
+procedure __delBS(a:ptr);
+requires(BS[a]);
+modifies BS;
+ensures(forall x:ptr :: {BS[x]} x == a || (old(BS)[x] <==> BS[x]));
+ensures(!BS[a]);
+
+procedure __addBS(a:ptr);
+requires(!BS[a]);
+modifies BS;
+ensures(forall x:ptr :: {BS[x]} x == a || (old(BS)[x] <==> BS[x]));
+ensures(BS[a]);
+
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:ptr, b:ptr, size:int) returns (ptr);
+axiom(forall a:ptr, b:ptr, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+(Obj(a) == Obj(b) ==> Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == null && size * Off(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Off(a) - Off(b))
+&&
+(Obj(b) == null && size == 1 ==> Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Obj(a) && Off(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Off(a) - Off(b))
+&&
+(Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == null || Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Obj(a) || Obj(MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)) == Obj(b))
+);
+
+function MINUS_LEFT_PTR(a:ptr, a_size:int, b:ptr) returns (ptr);
+axiom(forall a:ptr, a_size:int, b:ptr :: {MINUS_LEFT_PTR(a,a_size,b)}
+(Obj(b) == null ==> Obj(MINUS_LEFT_PTR(a,a_size,b)) == Obj(a) && Off(MINUS_LEFT_PTR(a,a_size,b)) == Off(a) - a_size * Off(b))
+&&
+(Obj(a) == Obj(b) && a_size == 1 ==> Obj(MINUS_LEFT_PTR(a,a_size,b)) == null && Off(MINUS_LEFT_PTR(a,a_size,b)) == Off(a) - Off(b))
+&&
+(Obj(MINUS_LEFT_PTR(a,a_size,b)) == null || Obj(MINUS_LEFT_PTR(a,a_size,b)) == Obj(a) || Obj(MINUS_LEFT_PTR(a,a_size,b)) == Obj(b))
+);
+
+function PLUS(a:ptr, a_size:int, b:ptr) returns (ptr);
+axiom(forall a:ptr, a_size:int, b:ptr :: {PLUS(a,a_size,b)}
+(Obj(b) == null ==> Obj(PLUS(a,a_size,b)) == Obj(a) && Off(PLUS(a,a_size,b)) == Off(a) + a_size * Off(b))
+&&
+(Obj(a) == null && a_size == 1 ==> Obj(PLUS(a,a_size,b)) == Obj(b) && Off(PLUS(a,a_size,b)) == Off(a) + Off(b))
+&&
+(Obj(PLUS(a,a_size,b)) == null || Obj(PLUS(a,a_size,b)) == Obj(a) || Obj(PLUS(a,a_size,b)) == Obj(b))
+);
+
+function MULT(a:ptr, b:ptr) returns (ptr);
+axiom(forall a:ptr, b:ptr :: {MULT(a,b)} Obj(MULT(a,b)) == null);
+
+function BINARY_BOTH_INT(a:ptr, b:ptr) returns (ptr);
+axiom(forall a:ptr, b:ptr :: {BINARY_BOTH_INT(a,b)} Obj(BINARY_BOTH_INT(a,b)) == null);
+
+function POW2(a:ptr) returns (bool);
+axiom POW2(Ptr(null,1));
+axiom POW2(Ptr(null,2));
+axiom POW2(Ptr(null,4));
+axiom POW2(Ptr(null,8));
+axiom POW2(Ptr(null,16));
+axiom POW2(Ptr(null,32));
+axiom POW2(Ptr(null,64));
+axiom POW2(Ptr(null,128));
+axiom POW2(Ptr(null,256));
+axiom POW2(Ptr(null,512));
+axiom POW2(Ptr(null,1024));
+axiom POW2(Ptr(null,2048));
+axiom POW2(Ptr(null,4096));
+axiom POW2(Ptr(null,8192));
+axiom POW2(Ptr(null,16384));
+axiom POW2(Ptr(null,32768));
+axiom POW2(Ptr(null,65536));
+axiom POW2(Ptr(null,131072));
+axiom POW2(Ptr(null,262144));
+axiom POW2(Ptr(null,524288));
+axiom POW2(Ptr(null,1048576));
+axiom POW2(Ptr(null,2097152));
+axiom POW2(Ptr(null,4194304));
+axiom POW2(Ptr(null,8388608));
+axiom POW2(Ptr(null,16777216));
+axiom POW2(Ptr(null,33554432));
+
+axiom (forall n:int, m:int :: {Ptr(null,n),POW2(Ptr(null,m))} POW2(Ptr(null,m)) && m < n && n < 2*m ==> !POW2(Ptr(null,n)));
+
+function choose(a:bool, b:ptr, c:ptr) returns (x:ptr);
+axiom(forall a:bool, b:ptr, c:ptr :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:ptr, c:ptr :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:ptr, b:ptr) returns (x:ptr);
+axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} Obj(BIT_BAND(a,b)) == null || Obj(BIT_BAND(a,b)) == Obj(a) || Obj(BIT_BAND(a,b)) == Obj(b));
+axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == Ptr(null,0));
+axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} a == Ptr(null,0) || b == Ptr(null,0) ==> BIT_BAND(a,b) == Ptr(null,0));
+axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(a,b),c)} BIT_BAND(BIT_BAND(a,b),c) == c <==> BIT_BAND(a,c) == c && BIT_BAND(b,c) == c);
+
+function BIT_BOR(a:ptr, b:ptr) returns (x:ptr);
+axiom(forall a:ptr, b:ptr :: {BIT_BOR(a,b)} Obj(BIT_BOR(a,b)) == null || Obj(BIT_BOR(a,b)) == Obj(a) || Obj(BIT_BOR(a,b)) == Obj(b));
+axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BOR(a,b),c)} BIT_BAND(a,c) != Ptr(null,0) || BIT_BAND(b,c) != Ptr(null,0) <==> BIT_BAND(BIT_BOR(a,b),c) != Ptr(null,0));
+axiom(forall n:int, m:int :: {POW2(Ptr(null,n)), POW2(Ptr(null,m))} n > 0 && POW2(Ptr(null,m)) && m < n && 2*m > n ==>
+ Ptr(null, n) == BIT_BOR(Ptr(null, m), Ptr(null, n - m)));
+
+
+function BIT_BXOR(a:ptr, b:ptr) returns (x:ptr);
+axiom(forall a:ptr, b:ptr :: {BIT_BXOR(a,b)} Obj(BIT_BXOR(a,b)) == null || Obj(BIT_BXOR(a,b)) == Obj(a) || Obj(BIT_BXOR(a,b)) == Obj(b));
+
+function BIT_BNOT(a:ptr) returns (ptr);
+axiom(forall a:ptr, b:ptr :: {BIT_BAND(a,b)} a == BIT_BNOT(b) || b == BIT_BNOT(a) ==> BIT_BAND(a,b) == Ptr(null,0));
+axiom(forall a:ptr, b:ptr :: {BIT_BNOT(BIT_BOR(a,b))} BIT_BNOT(BIT_BOR(a,b)) == BIT_BAND(BIT_BNOT(a),BIT_BNOT(b)));
+axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(a,b),c)} a == BIT_BNOT(c) || b == BIT_BNOT(c) ==> BIT_BAND(BIT_BAND(a,b),c) == Ptr(null,0));
+axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(BIT_BNOT(a),b),c)} POW2(c) && POW2(a) && c != a ==>
+ (BIT_BAND(b,c) != Ptr(null,0) <==> BIT_BAND(BIT_BAND(BIT_BNOT(a),b),c) != Ptr(null,0)));
+axiom(forall a:ptr, b:ptr, c:ptr :: {BIT_BAND(BIT_BAND(a,BIT_BNOT(b)),c)} POW2(c) && POW2(b) && c != b ==>
+ (BIT_BAND(a,c) != Ptr(null,0) <==> BIT_BAND(BIT_BAND(a,BIT_BNOT(b)),c) != Ptr(null,0)));
+
+
+function LIFT(a:bool) returns (ptr);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != Ptr(null,0));
+axiom(forall a:bool :: {LIFT(a)} Obj(LIFT(a)) == null); // need to show T_char(LIFT(a))
+
+function NOT(a:ptr) returns (ptr);
+axiom(forall a:ptr :: {NOT(a)} a == Ptr(null,0) ==> NOT(a) != Ptr(null,0));
+axiom(forall a:ptr :: {NOT(a)} a != Ptr(null,0) ==> NOT(a) == Ptr(null,0));
+
+function NULL_CHECK(a:ptr) returns (ptr);
+axiom(forall a:ptr :: {NULL_CHECK(a)} a == Ptr(null,0) ==> NULL_CHECK(a) != Ptr(null,0));
+axiom(forall a:ptr :: {NULL_CHECK(a)} a != Ptr(null,0) ==> NULL_CHECK(a) == Ptr(null,0));
+
+
+function FreshObj(alloc:[ref]name, old_alloc:[ref]name, p: ptr) returns (bool);
+axiom(forall alloc:[ref]name, old_alloc:[ref]name, p: ptr :: {FreshObj(alloc, old_alloc, p)}
+ FreshObj(alloc, old_alloc, p) <==> alloc[Obj(p)] == ALLOCATED && old_alloc[Obj(p)] == UNALLOCATED
+);
+
+
+procedure nondet_choice() returns (x:ptr);
+ensures (Obj(x) == null);
+
+procedure CreateMutexA$12 (a0:ptr, a1:ptr, a2:ptr) returns (new:ptr);
+modifies alloc;
+ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
+ensures (Size(Obj(new)) == 1);
+ensures (Off(new) == 0);
+ensures (Obj(new) != null);
+ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
+ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
+ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
+ensures (Mem[new] == Ptr(null,0));
+
+procedure WaitForSingleObject$8 (lock :ptr, wait:ptr) returns (status:ptr);
+modifies Mem;
+ensures (forall x:ptr :: {Mem[x]} x == lock || old(Mem)[x] == Mem[x]);
+ensures (old(Mem)[lock] == Ptr(null,0) && Mem[lock] == Ptr(null,1));
+
+procedure ReleaseMutex$4 (lock:ptr) returns (status:ptr);
+modifies Mem;
+ensures (forall x:ptr :: {Mem[x]} x == lock || old(Mem)[x] == Mem[x]);
+ensures (old(Mem)[lock] == Ptr(null,1) && Mem[lock] == Ptr(null,0));
+
+
+
+procedure havoc_assert(i:ptr);
+requires (i != Ptr(null, 0));
+
+procedure havoc_assume(i:ptr);
+ensures (i != Ptr(null, 0));
+
+
+procedure __HAVOC_free(a:ptr);
+modifies alloc;
+//requires (alloc[Obj(a)] == ALLOCATED);
+//requires (Off(a) == 0);
+ensures (alloc[Obj(a)] != UNALLOCATED);
+ensures (alloc[Obj(a)] != ALLOCATED);
+ensures (forall x_obj:ref :: {alloc[x_obj]} Obj(a) == x_obj || old(alloc)[x_obj] == alloc[x_obj]);
+
+procedure __HAVOC_malloc_heap(obj_size:ptr) returns (new:ptr);
+modifies alloc;
+ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
+ensures (Size(Obj(new)) == Off(obj_size));
+ensures (Off(new) == 0);
+ensures (Obj(new) != null);
+ensures (IsHeap(Obj(new)));
+ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
+ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
+ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
+
+
+procedure __HAVOC_malloc_stack(obj_size:ptr) returns (new:ptr);
+modifies alloc;
+ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
+ensures (Size(Obj(new)) == Off(obj_size));
+ensures (Off(new) == 0);
+ensures (Obj(new) != null);
+ensures (!IsHeap(Obj(new)));
+ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
+ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
+ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
+
+procedure _strdup(str:ptr) returns (new:ptr);
+modifies alloc;
+ensures (old(alloc)[Obj(new)] == UNALLOCATED && alloc[Obj(new)] == ALLOCATED);
+ensures (Off(new) == 0);
+ensures (Obj(new) != null);
+ensures (forall i:int :: BS[Ptr(Obj(new), i)]);
+ensures (forall i:int :: Obj(Mem[Ptr(Obj(new), i)]) == null);
+ensures (forall x_obj:ref :: {alloc[x_obj]} x_obj == Obj(new) || old(alloc)[x_obj] == alloc[x_obj]);
+
+procedure _xstrcasecmp(a0:ptr, a1:ptr) returns (ret:ptr);
+
+procedure _xstrcmp(a0:ptr, a1:ptr) returns (ret:ptr);
+var Mem_ByteCapacity__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_ByteOffset___unnamed_16_39e6661e:[ptr]ptr;
+var Mem_BytesPerSector__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_CHAR:[ptr]ptr;
+var Mem_CancelRoutine__IRP:[ptr]ptr;
+var Mem_Cancel__IRP:[ptr]ptr;
+var Mem_Control__IO_STACK_LOCATION:[ptr]ptr;
+var Mem_CurrentStackLocation___unnamed_4_f80453a0:[ptr]ptr;
+var Mem_DeviceExtension__DEVICE_OBJECT:[ptr]ptr;
+var Mem_DeviceObject__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_FUNCTION:[ptr]ptr;
+var Mem_FlCancelSpinLock__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_HoldNewReqMutex__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_HoldNewRequests__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_INT4:[ptr]ptr;
+var Mem_Information__IO_STATUS_BLOCK:[ptr]ptr;
+var Mem_IoStatus__IRP:[ptr]ptr;
+var Mem_IsRemoved__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_IsStarted__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_Length___unnamed_16_39e6661e:[ptr]ptr;
+var Mem_ListEntry___unnamed_12_003c1454:[ptr]ptr;
+var Mem_ListSpinLock__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_LowPart___unnamed_8_34582070:[ptr]ptr;
+var Mem_MediaType__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_NewRequestQueue__DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_Overlay___unnamed_48_c27ef811:[ptr]ptr;
+var Mem_PCHAR:[ptr]ptr;
+var Mem_PFUNCTION:[ptr]ptr;
+var Mem_PPFUNCTION:[ptr]ptr;
+var Mem_PUINT4:[ptr]ptr;
+var Mem_PVOID:[ptr]ptr;
+var Mem_P_DISKETTE_EXTENSION:[ptr]ptr;
+var Mem_P_FAST_MUTEX:[ptr]ptr;
+var Mem_P_IO_STACK_LOCATION:[ptr]ptr;
+var Mem_P_LIST_ENTRY:[ptr]ptr;
+var Mem_Parameters__IO_STACK_LOCATION:[ptr]ptr;
+var Mem_Read___unnamed_16_c0f0e7de:[ptr]ptr;
+var Mem_Status___unnamed_4_c7b3d275:[ptr]ptr;
+var Mem_Tail__IRP:[ptr]ptr;
+var Mem_UCHAR:[ptr]ptr;
+var Mem_UINT4:[ptr]ptr;
+var Mem___unnamed_12_003c1454___unnamed_40_6ef75b20:[ptr]ptr;
+var Mem___unnamed_4_c7b3d275__IO_STATUS_BLOCK:[ptr]ptr;
+var Mem___unnamed_4_f80453a0___unnamed_12_003c1454:[ptr]ptr;
+var Mem___unnamed_8_34582070__LARGE_INTEGER:[ptr]ptr;
+
+var Res_IRQL:[ptr]ptr;
+var Res_SPINLOCK:[ptr]ptr;
+var Res_SPINLOCK_IRQL:[ptr]ptr;
+
+
+
+const unique DriverEntry : ptr;
+const unique DriverEntry_ref : ref;
+const unique FloppyCancelQueuedRequest : ptr;
+const unique FloppyCancelQueuedRequest_ref : ref;
+var FloppyDebugLevel : ptr;
+var PagingMutex : ptr;
+var PagingReferenceCount : ptr;
+const {:existential true} $FloppyQueueRequest$pre$0 : bool;
+const {:existential true} $FloppyQueueRequest$pre$1 : bool;
+const {:existential true} $FloppyQueueRequest$pre$2 : bool;
+const {:existential true} $FloppyQueueRequest$pre$3 : bool;
+const {:existential true} $FloppyQueueRequest$post$12 : bool;
+const {:existential true} $FloppyQueueRequest$post$13 : bool;
+const {:existential true} $FloppyQueueRequest$post$14 : bool;
+const {:existential true} $FloppyQueueRequest$post$15 : bool;
+const {:existential true} $FloppyQueueRequest$mod$16 : bool;
+const {:existential true} $FloppyQueueRequest$mod$17 : bool;
+const {:existential true} $FloppyQueueRequest$mod$18 : bool;
+const {:existential true} $FloppyQueueRequest$mod$19 : bool;
+const {:existential true} $FloppyQueueRequest$mod$20 : bool;
+const {:existential true} $FloppyQueueRequest$mod$21 : bool;
+const {:existential true} $FloppyReadWrite$pre$42 : bool;
+const {:existential true} $FloppyReadWrite$pre$43 : bool;
+const {:existential true} $FloppyReadWrite$pre$44 : bool;
+const {:existential true} $FloppyReadWrite$pre$45 : bool;
+const {:existential true} $FloppyReadWrite$pre$46 : bool;
+const {:existential true} $FloppyReadWrite$post$57 : bool;
+const {:existential true} $FloppyReadWrite$post$58 : bool;
+const {:existential true} $FloppyReadWrite$post$59 : bool;
+const {:existential true} $FloppyReadWrite$post$60 : bool;
+const {:existential true} $FloppyReadWrite$post$61 : bool;
+const {:existential true} $FloppyReadWrite$mod$62 : bool;
+const {:existential true} $FloppyReadWrite$mod$63 : bool;
+const {:existential true} $FloppyReadWrite$mod$64 : bool;
+const {:existential true} $FloppyReadWrite$mod$65 : bool;
+const {:existential true} $FloppyReadWrite$mod$66 : bool;
+const {:existential true} $FloppyReadWrite$mod$67 : bool;
+
+
+procedure ExAcquireFastMutex ( a0:ptr) ;
+
+
+procedure ExReleaseFastMutex ( a0:ptr) ;
+
+
+procedure ExfInterlockedInsertTailList ( a0:ptr, a1:ptr, a2:ptr) returns (ret:ptr);
+
+
+procedure FlQueueIrpToThread ( Irp$21:ptr, DisketteExtension$11:ptr) returns ( $result.FlQueueIrpToThread$861.0$1$:ptr) ;
+
+
+
+
+
+procedure IofCompleteRequest ( a0:ptr, a1:ptr) ;
+
+
+procedure KfAcquireSpinLock ( SpinLock1:ptr) returns ( $result.__prototypewdm_KfAcquireSpinLock$92.0$1$__prototypewdm_KfAcquireSpinLock$4:ptr) ;
+
+//TAG: requires __resource("SPINLOCK", SpinLock) == 0
+requires(Res_SPINLOCK[SpinLock1] == Ptr(null, 0));
+//TAG: ensures __resource("SPINLOCK", SpinLock) == 1
+ensures(Res_SPINLOCK[SpinLock1] == Ptr(null, 1));
+//TAG: ensures __resource("SPINLOCK_IRQL", SpinLock) == __return
+ensures(Res_SPINLOCK_IRQL[SpinLock1] == $result.__prototypewdm_KfAcquireSpinLock$92.0$1$__prototypewdm_KfAcquireSpinLock$4);
+//TAG: ensures __global_resource("IRQL") == 2
+ensures(Res_IRQL[Ptr(null,1)] == Ptr(null, 2));
+//TAG: ensures __return == __old_global_resource("IRQL")
+ensures($result.__prototypewdm_KfAcquireSpinLock$92.0$1$__prototypewdm_KfAcquireSpinLock$4 == old(Res_IRQL)[Ptr(null,1)]);
+
+modifies Res_IRQL;
+ensures(forall r:ptr :: {Res_IRQL[r]} (Ptr(null, 1) == r) || Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
+free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+modifies Res_SPINLOCK;
+//TAG: net change in resource SPINLOCK only for: SpinLock
+ensures(forall r:ptr :: {Res_SPINLOCK[r]} (SpinLock1 == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
+free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+modifies Res_SPINLOCK_IRQL;
+//TAG: net change in resource SPINLOCK_IRQL only for: SpinLock
+ensures(forall r:ptr :: {Res_SPINLOCK_IRQL[r]} (SpinLock1 == r) || Off(old(Res_SPINLOCK_IRQL)[r]) == Off(Res_SPINLOCK_IRQL[r]));
+free requires ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
+free requires (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
+
+
+
+procedure KfReleaseSpinLock ( SpinLock$11:ptr, NewIrql1:ptr);
+
+//TAG: requires __global_resource("IRQL") == 2
+requires(Res_IRQL[Ptr(null,1)] == Ptr(null, 2));
+//TAG: requires __resource("SPINLOCK", SpinLock) == 1
+requires(Res_SPINLOCK[SpinLock$11] == Ptr(null, 1));
+//TAG: requires __resource("SPINLOCK_IRQL", SpinLock) == NewIrql
+requires(Res_SPINLOCK_IRQL[SpinLock$11] == NewIrql1);
+//TAG: ensures __resource("SPINLOCK", SpinLock) == 0
+ensures(Res_SPINLOCK[SpinLock$11] == Ptr(null, 0));
+//TAG: ensures __global_resource("IRQL") == NewIrql
+ensures(Res_IRQL[Ptr(null,1)] == NewIrql1);
+
+modifies Res_IRQL;
+ensures(forall r:ptr :: {Res_IRQL[r]} (Ptr(null, 1) == r) || Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
+free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+modifies Res_SPINLOCK;
+//TAG: net change in resource SPINLOCK only for: SpinLock
+ensures(forall r:ptr :: {Res_SPINLOCK[r]} (SpinLock$11 == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
+free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+
+
+
+procedure MmPageEntireDriver ( a0:ptr) returns (ret:ptr);
+
+
+procedure MmResetDriverPaging ( a0:ptr) ;
+
+
+procedure FloppyQueueRequest ( DisketteExtension1:ptr, Irp1:ptr) returns ( $result.FloppyQueueRequest$5780.0$1$:ptr)
+
+//TAG: requires $FloppyQueueRequest$pre$0 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->ListSpinLock) == 0)
+requires($FloppyQueueRequest$pre$0 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
+//TAG: requires $FloppyQueueRequest$pre$1 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->FlCancelSpinLock) == 0)
+requires($FloppyQueueRequest$pre$1 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
+//TAG: requires $FloppyQueueRequest$pre$2 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->NewRequestQueueSpinLock) == 0)
+requires($FloppyQueueRequest$pre$2 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
+//TAG: requires $FloppyQueueRequest$pre$3 || (1 ==> ((DISKETTE_EXTENSION *)DeviceExtension)->DeviceObject->DeviceExtension == DeviceExtension)
+requires($FloppyQueueRequest$pre$3 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(DisketteExtension1)])] == DisketteExtension1)));
+//TAG: ensures $FloppyQueueRequest$post$12 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->ListSpinLock) == 0)
+ensures($FloppyQueueRequest$post$12 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
+//TAG: ensures $FloppyQueueRequest$post$13 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->FlCancelSpinLock) == 0)
+ensures($FloppyQueueRequest$post$13 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
+//TAG: ensures $FloppyQueueRequest$post$14 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)DeviceExtension)->NewRequestQueueSpinLock) == 0)
+ensures($FloppyQueueRequest$post$14 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1)] == Ptr(null, 0))));
+//TAG: ensures $FloppyQueueRequest$post$15 || (1 ==> ((DISKETTE_EXTENSION *)DeviceExtension)->DeviceObject->DeviceExtension == DeviceExtension)
+ensures($FloppyQueueRequest$post$15 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(DisketteExtension1)])] == DisketteExtension1)));
+modifies alloc;
+free ensures(forall f:ref :: {alloc[f]} old(alloc)[f] != UNALLOCATED ==> alloc[f] == old(alloc)[f]);
+
+modifies Res_IRQL;
+//TAG: no net change in resource IRQL
+ensures(forall r:ptr :: {Res_IRQL[r]} Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
+free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+modifies Res_SPINLOCK;
+//TAG: net change in resource SPINLOCK only for: &DeviceExtension->ListSpinLock, &DeviceExtension->FlCancelSpinLock, &DeviceExtension->NewRequestQueueSpinLock
+ensures(forall r:ptr :: {Res_SPINLOCK[r]} (!$FloppyQueueRequest$mod$16 && ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$18 && FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$20 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
+free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+modifies Res_SPINLOCK_IRQL;
+//TAG: net change in resource SPINLOCK_IRQL only for: &DeviceExtension->ListSpinLock, &DeviceExtension->FlCancelSpinLock, &DeviceExtension->NewRequestQueueSpinLock
+ensures(forall r:ptr :: {Res_SPINLOCK_IRQL[r]} (!$FloppyQueueRequest$mod$17 && ListSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$19 && FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || (!$FloppyQueueRequest$mod$21 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension1) == r) || Off(old(Res_SPINLOCK_IRQL)[r]) == Off(Res_SPINLOCK_IRQL[r]));
+free requires ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
+free requires (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
+modifies Mem_Control__IO_STACK_LOCATION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
+free ensures(Mem_Control__IO_STACK_LOCATION[Ptr(null,0)] == old(Mem_Control__IO_STACK_LOCATION)[Ptr(null,0)]);
+modifies Mem_FUNCTION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_FUNCTION[m]} Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
+free ensures(Mem_FUNCTION[Ptr(null,0)] == old(Mem_FUNCTION)[Ptr(null,0)]);
+modifies Mem_FlCancelSpinLock__DISKETTE_EXTENSION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
+free ensures(Mem_FlCancelSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
+modifies Mem_Information__IO_STATUS_BLOCK;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
+free ensures(Mem_Information__IO_STATUS_BLOCK[Ptr(null,0)] == old(Mem_Information__IO_STATUS_BLOCK)[Ptr(null,0)]);
+modifies Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
+free ensures(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
+modifies Mem_Status___unnamed_4_c7b3d275;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
+free ensures(Mem_Status___unnamed_4_c7b3d275[Ptr(null,0)] == old(Mem_Status___unnamed_4_c7b3d275)[Ptr(null,0)]);
+modifies Mem_UINT4;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_UINT4[m]} Mem_UINT4[m] == old(Mem_UINT4)[m]);
+free ensures(Mem_UINT4[Ptr(null,0)] == old(Mem_UINT4)[Ptr(null,0)]);
+
+{
+var havoc_stringTemp:ptr;
+var condVal:ptr;
+var DisketteExtension : ptr;
+var Irp : ptr;
+var $RtlAssert.arg.1$3$ : ptr;
+var $RtlAssert.arg.2$2$ : ptr;
+var $_InterlockedExchange.arg.1$7$ : ptr;
+var $_InterlockedExchange.arg.1$9$ : ptr;
+var $_InterlockedExchange.arg.2$6$ : ptr;
+var $ntStatus$4$5806.24$ : ptr;
+var $oldIrql$3$5805.24$ : ptr;
+var $result.ExfInterlockedInsertTailList$5854.36$11$ : ptr;
+var $result.KfAcquireSpinLock$5825.4$4$ : ptr;
+var $result.MmPageEntireDriver$5842.8$10$ : ptr;
+var $result._InterlockedExchange$5826.4$5$ : ptr;
+var $result._InterlockedExchange$5831.26$8$ : ptr;
+var tempBoogie0:ptr;
+var tempBoogie1:ptr;
+var tempBoogie2:ptr;
+var tempBoogie3:ptr;
+var tempBoogie4:ptr;
+var tempBoogie5:ptr;
+var tempBoogie6:ptr;
+var tempBoogie7:ptr;
+var tempBoogie8:ptr;
+var tempBoogie9:ptr;
+var tempBoogie10:ptr;
+var tempBoogie11:ptr;
+var tempBoogie12:ptr;
+var tempBoogie13:ptr;
+var tempBoogie14:ptr;
+var tempBoogie15:ptr;
+var tempBoogie16:ptr;
+var tempBoogie17:ptr;
+var tempBoogie18:ptr;
+var tempBoogie19:ptr;
+
+
+start:
+
+assume (alloc[Obj(DisketteExtension1)] != UNALLOCATED);
+assume (alloc[Obj(Irp1)] != UNALLOCATED);
+DisketteExtension := Ptr(null, 0);
+Irp := Ptr(null, 0);
+$RtlAssert.arg.1$3$ := Ptr(null, 0);
+$RtlAssert.arg.2$2$ := Ptr(null, 0);
+$_InterlockedExchange.arg.1$7$ := Ptr(null, 0);
+$_InterlockedExchange.arg.1$9$ := Ptr(null, 0);
+$_InterlockedExchange.arg.2$6$ := Ptr(null, 0);
+$ntStatus$4$5806.24$ := Ptr(null, 0);
+$oldIrql$3$5805.24$ := Ptr(null, 0);
+$result.ExfInterlockedInsertTailList$5854.36$11$ := Ptr(null, 0);
+$result.KfAcquireSpinLock$5825.4$4$ := Ptr(null, 0);
+$result.MmPageEntireDriver$5842.8$10$ := Ptr(null, 0);
+$result._InterlockedExchange$5826.4$5$ := Ptr(null, 0);
+$result._InterlockedExchange$5831.26$8$ := Ptr(null, 0);
+DisketteExtension := DisketteExtension1;
+Irp := Irp1;
+$result.FloppyQueueRequest$5780.0$1$ := Ptr(null,0);
+goto label_3;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5864)
+label_1:
+assume (forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
+assume (forall m:ptr :: {Mem_FUNCTION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
+assume (forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
+assume (forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
+assume (forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
+assume (forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
+assume (forall m:ptr :: {Mem_UINT4[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_UINT4[m] == old(Mem_UINT4)[m]);
+return;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5864)
+label_2:
+assume false;
+return;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5805)
+label_3:
+goto label_4;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5806)
+label_4:
+goto label_5;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
+label_5:
+call ExAcquireFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
+goto label_8;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
+label_8:
+tempBoogie0 := Ptr(Obj(Mem_UINT4[PagingReferenceCount]), Off(Mem_UINT4[PagingReferenceCount]) + 1 * 1) ;
+Mem_UINT4[PagingReferenceCount] := tempBoogie0;
+goto label_8_true , label_8_false ;
+
+
+label_8_true :
+assume (Mem_UINT4[PagingReferenceCount] == Ptr(null, 1));
+goto label_12;
+
+
+label_8_false :
+assume !(Mem_UINT4[PagingReferenceCount] == Ptr(null, 1));
+goto label_9;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
+label_9:
+call ExReleaseFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
+goto label_15;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5811)
+label_12:
+call MmResetDriverPaging (DriverEntry);
+goto label_9;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
+label_15:
+goto label_15_true , label_15_false ;
+
+
+label_15_true :
+assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION(DisketteExtension)] != Ptr(null,0));
+goto label_17;
+
+
+label_15_false :
+assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION(DisketteExtension)] == Ptr(null,0));
+goto label_16;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
+label_16:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$RtlAssert.arg.2$2$ := havoc_stringTemp ;
+goto label_61;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5825)
+label_17:
+assume (Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
+call $result.KfAcquireSpinLock$5825.4$4$ := KfAcquireSpinLock (FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension));
+Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
+goto label_20;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5825)
+label_20:
+$oldIrql$3$5805.24$ := $result.KfAcquireSpinLock$5825.4$4$ ;
+goto label_21;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5826)
+label_21:
+$_InterlockedExchange.arg.2$6$ := FloppyCancelQueuedRequest ;
+goto label_22;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5826)
+label_22:
+$_InterlockedExchange.arg.1$7$ := CancelRoutine__IRP(Irp) ;
+goto label_23;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5826)
+label_23:
+// ignoring intrinsic intrinsic._InterlockedExchange
+havoc $result._InterlockedExchange$5826.4$5$;
+goto label_26;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
+label_26:
+goto label_26_true , label_26_false ;
+
+
+label_26_true :
+assume (Mem_Cancel__IRP[Cancel__IRP(Irp)] != Ptr(null,0));
+goto label_28;
+
+
+label_26_false :
+assume (Mem_Cancel__IRP[Cancel__IRP(Irp)] == Ptr(null,0));
+goto label_27;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5850)
+label_27:
+Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp)))] := Ptr(null, 259) ;
+goto label_53;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
+label_28:
+$_InterlockedExchange.arg.1$9$ := CancelRoutine__IRP(Irp) ;
+goto label_29;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
+label_29:
+// ignoring intrinsic intrinsic._InterlockedExchange
+havoc $result._InterlockedExchange$5831.26$8$;
+goto label_32;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5831)
+label_32:
+goto label_32_true , label_32_false ;
+
+
+label_32_true :
+assume ($result._InterlockedExchange$5831.26$8$ != Ptr(null,0));
+goto label_33;
+
+
+label_32_false :
+assume ($result._InterlockedExchange$5831.26$8$ == Ptr(null,0));
+goto label_27;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5836)
+label_33:
+Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp)))] := Ptr(null, -1073741536) ;
+goto label_34;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5837)
+label_34:
+Mem_Information__IO_STATUS_BLOCK[Information__IO_STATUS_BLOCK(IoStatus__IRP(Irp))] := Ptr(null, 0) ;
+goto label_35;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5839)
+label_35:
+assume (Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
+call KfReleaseSpinLock (FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension), $oldIrql$3$5805.24$);
+Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
+goto label_38;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5840)
+label_38:
+call IofCompleteRequest (Irp, Ptr(null, 0));
+goto label_41;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
+label_41:
+call ExAcquireFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
+goto label_44;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
+label_44:
+tempBoogie0 := Ptr(Obj(Mem_UINT4[PagingReferenceCount]), Off(Mem_UINT4[PagingReferenceCount]) - 1) ;
+Mem_UINT4[PagingReferenceCount] := tempBoogie0;
+goto label_44_true , label_44_false ;
+
+
+label_44_true :
+assume (Mem_UINT4[PagingReferenceCount] != Ptr(null,0));
+goto label_48;
+
+
+label_44_false :
+assume (Mem_UINT4[PagingReferenceCount] == Ptr(null,0));
+goto label_45;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
+label_45:
+call $result.MmPageEntireDriver$5842.8$10$ := MmPageEntireDriver (DriverEntry);
+goto label_48;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5842)
+label_48:
+call ExReleaseFastMutex (Mem_P_FAST_MUTEX[PagingMutex]);
+goto label_51;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5844)
+label_51:
+$ntStatus$4$5806.24$ := Ptr(null, -1073741536) ;
+goto label_52;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5863)
+label_52:
+$result.FloppyQueueRequest$5780.0$1$ := $ntStatus$4$5806.24$ ;
+goto label_1;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5852)
+label_53:
+tempBoogie0 := BIT_BOR(Mem_Control__IO_STACK_LOCATION[Control__IO_STACK_LOCATION(Mem_CurrentStackLocation___unnamed_4_f80453a0[CurrentStackLocation___unnamed_4_f80453a0(__unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp)))))])], Ptr(null, 1)) ;
+Mem_Control__IO_STACK_LOCATION[Control__IO_STACK_LOCATION(Mem_CurrentStackLocation___unnamed_4_f80453a0[CurrentStackLocation___unnamed_4_f80453a0(__unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp)))))])] := tempBoogie0 ;
+goto label_54;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5854)
+label_54:
+assume (Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
+call $result.ExfInterlockedInsertTailList$5854.36$11$ := ExfInterlockedInsertTailList (NewRequestQueue__DISKETTE_EXTENSION(DisketteExtension), ListEntry___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp)))), NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension));
+Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[NewRequestQueueSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
+goto label_57;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5858)
+label_57:
+assume (Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] == Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)]);
+call KfReleaseSpinLock (FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension), $oldIrql$3$5805.24$);
+Mem_FlCancelSpinLock__DISKETTE_EXTENSION[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)] := Mem_UINT4[FlCancelSpinLock__DISKETTE_EXTENSION(DisketteExtension)];
+goto label_60;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5860)
+label_60:
+$ntStatus$4$5806.24$ := Ptr(null, 259) ;
+goto label_52;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
+label_61:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$RtlAssert.arg.1$3$ := havoc_stringTemp ;
+goto label_62;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(5816)
+label_62:
+// skip RtlAssert
+goto label_17;
+
+}
+
+
+
+procedure FloppyReadWrite ( DeviceObject1:ptr, Irp$11:ptr) returns ( $result.FloppyReadWrite$2203.0$1$:ptr)
+
+//TAG: requires $FloppyReadWrite$pre$42 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock) == 0)
+requires($FloppyReadWrite$pre$42 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
+//TAG: requires $FloppyReadWrite$pre$43 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock) == 0)
+requires($FloppyReadWrite$pre$43 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
+//TAG: requires $FloppyReadWrite$pre$44 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock) == 0)
+requires($FloppyReadWrite$pre$44 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
+//TAG: requires $FloppyReadWrite$pre$45 || (1 ==> ((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject->DeviceExtension == (DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))
+requires($FloppyReadWrite$pre$45 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])])] == Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])));
+//TAG: requires $FloppyReadWrite$pre$46 || (((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject == DeviceObject)
+requires($FloppyReadWrite$pre$46 || (Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == DeviceObject1));
+//TAG: ensures $FloppyReadWrite$post$57 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock) == 0)
+ensures($FloppyReadWrite$post$57 || ((true) ==> (Res_SPINLOCK[ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
+//TAG: ensures $FloppyReadWrite$post$58 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock) == 0)
+ensures($FloppyReadWrite$post$58 || ((true) ==> (Res_SPINLOCK[FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
+//TAG: ensures $FloppyReadWrite$post$59 || (1 ==> __resource("SPINLOCK", &((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock) == 0)
+ensures($FloppyReadWrite$post$59 || ((true) ==> (Res_SPINLOCK[NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == Ptr(null, 0))));
+//TAG: ensures $FloppyReadWrite$post$60 || (1 ==> ((DISKETTE_EXTENSION *)(DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject->DeviceExtension == (DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))
+ensures($FloppyReadWrite$post$60 || ((true) ==> (Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])])] == Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])));
+//TAG: ensures $FloppyReadWrite$post$61 || (((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->DeviceObject == DeviceObject)
+ensures($FloppyReadWrite$post$61 || (Mem_DeviceObject__DISKETTE_EXTENSION[DeviceObject__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)])] == DeviceObject1));
+modifies alloc;
+free ensures(forall f:ref :: {alloc[f]} old(alloc)[f] != UNALLOCATED ==> alloc[f] == old(alloc)[f]);
+
+modifies Res_IRQL;
+//TAG: no net change in resource IRQL
+ensures(forall r:ptr :: {Res_IRQL[r]} Off(old(Res_IRQL)[r]) == Off(Res_IRQL[r]));
+free requires ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_IRQL[__x]} Obj(Res_IRQL[__x]) == null && Off(Res_IRQL[__x]) >= 0));
+free requires (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_IRQL[Ptr(null,0)] == Ptr(null,0));
+modifies Res_SPINLOCK;
+//TAG: net change in resource SPINLOCK only for: &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock
+ensures(forall r:ptr :: {Res_SPINLOCK[r]} (!$FloppyReadWrite$mod$62 && ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$64 && FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$66 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || Off(old(Res_SPINLOCK)[r]) == Off(Res_SPINLOCK[r]));
+free requires ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_SPINLOCK[__x]} Obj(Res_SPINLOCK[__x]) == null && Off(Res_SPINLOCK[__x]) >= 0));
+free requires (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_SPINLOCK[Ptr(null,0)] == Ptr(null,0));
+modifies Res_SPINLOCK_IRQL;
+//TAG: net change in resource SPINLOCK_IRQL only for: &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->ListSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->FlCancelSpinLock, &((DISKETTE_EXTENSION *)(DeviceObject->DeviceExtension))->NewRequestQueueSpinLock
+ensures(forall r:ptr :: {Res_SPINLOCK_IRQL[r]} (!$FloppyReadWrite$mod$63 && ListSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$65 && FlCancelSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || (!$FloppyReadWrite$mod$67 && NewRequestQueueSpinLock__DISKETTE_EXTENSION(Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject1)]) == r) || Off(old(Res_SPINLOCK_IRQL)[r]) == Off(Res_SPINLOCK_IRQL[r]));
+free requires ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
+free ensures ((forall __x:ptr :: {Res_SPINLOCK_IRQL[__x]} Obj(Res_SPINLOCK_IRQL[__x]) == null && Off(Res_SPINLOCK_IRQL[__x]) >= 0));
+free requires (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
+free ensures (Res_SPINLOCK_IRQL[Ptr(null,0)] == Ptr(null,0));
+modifies Mem_Control__IO_STACK_LOCATION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
+free ensures(Mem_Control__IO_STACK_LOCATION[Ptr(null,0)] == old(Mem_Control__IO_STACK_LOCATION)[Ptr(null,0)]);
+modifies Mem_FUNCTION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_FUNCTION[m]} Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
+free ensures(Mem_FUNCTION[Ptr(null,0)] == old(Mem_FUNCTION)[Ptr(null,0)]);
+modifies Mem_FlCancelSpinLock__DISKETTE_EXTENSION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
+free ensures(Mem_FlCancelSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
+modifies Mem_Information__IO_STATUS_BLOCK;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
+free ensures(Mem_Information__IO_STATUS_BLOCK[Ptr(null,0)] == old(Mem_Information__IO_STATUS_BLOCK)[Ptr(null,0)]);
+modifies Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
+free ensures(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[Ptr(null,0)] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[Ptr(null,0)]);
+modifies Mem_Status___unnamed_4_c7b3d275;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
+free ensures(Mem_Status___unnamed_4_c7b3d275[Ptr(null,0)] == old(Mem_Status___unnamed_4_c7b3d275)[Ptr(null,0)]);
+modifies Mem_UINT4;
+//TAG: no updated memory locations
+free ensures(forall m:ptr :: {Mem_UINT4[m]} Mem_UINT4[m] == old(Mem_UINT4)[m]);
+free ensures(Mem_UINT4[Ptr(null,0)] == old(Mem_UINT4)[Ptr(null,0)]);
+
+{
+var havoc_stringTemp:ptr;
+var condVal:ptr;
+var $DbgPrint.arg.1$10$ : ptr;
+var $DbgPrint.arg.1$13$ : ptr;
+var $DbgPrint.arg.1$15$ : ptr;
+var $DbgPrint.arg.1$3$ : ptr;
+var $DbgPrint.arg.1$6$ : ptr;
+var $DbgPrint.arg.1$8$ : ptr;
+var DeviceObject : ptr;
+var Irp$1 : ptr;
+var $disketteExtension$5$2232.24$ : ptr;
+var $irpSp$3$2230.23$ : ptr;
+var $ntStatus$4$2231.13$ : ptr;
+var $result.DbgPrint$2234.4$2$ : ptr;
+var $result.DbgPrint$2278.0$5$ : ptr;
+var $result.DbgPrint$2280.0$7$ : ptr;
+var $result.DbgPrint$2305.0$9$ : ptr;
+var $result.DbgPrint$2317.0$12$ : ptr;
+var $result.DbgPrint$2327.0$14$ : ptr;
+var $result.FlQueueIrpToThread$2308.41$11$ : ptr;
+var $result.FloppyQueueRequest$2247.37$4$ : ptr;
+var tempBoogie0:ptr;
+var tempBoogie1:ptr;
+var tempBoogie2:ptr;
+var tempBoogie3:ptr;
+var tempBoogie4:ptr;
+var tempBoogie5:ptr;
+var tempBoogie6:ptr;
+var tempBoogie7:ptr;
+var tempBoogie8:ptr;
+var tempBoogie9:ptr;
+var tempBoogie10:ptr;
+var tempBoogie11:ptr;
+var tempBoogie12:ptr;
+var tempBoogie13:ptr;
+var tempBoogie14:ptr;
+var tempBoogie15:ptr;
+var tempBoogie16:ptr;
+var tempBoogie17:ptr;
+var tempBoogie18:ptr;
+var tempBoogie19:ptr;
+
+
+start:
+
+assume (alloc[Obj(DeviceObject1)] != UNALLOCATED);
+assume (alloc[Obj(Irp$11)] != UNALLOCATED);
+$DbgPrint.arg.1$10$ := Ptr(null, 0);
+$DbgPrint.arg.1$13$ := Ptr(null, 0);
+$DbgPrint.arg.1$15$ := Ptr(null, 0);
+$DbgPrint.arg.1$3$ := Ptr(null, 0);
+$DbgPrint.arg.1$6$ := Ptr(null, 0);
+$DbgPrint.arg.1$8$ := Ptr(null, 0);
+DeviceObject := Ptr(null, 0);
+Irp$1 := Ptr(null, 0);
+$disketteExtension$5$2232.24$ := Ptr(null, 0);
+$irpSp$3$2230.23$ := Ptr(null, 0);
+$ntStatus$4$2231.13$ := Ptr(null, 0);
+$result.DbgPrint$2234.4$2$ := Ptr(null, 0);
+$result.DbgPrint$2278.0$5$ := Ptr(null, 0);
+$result.DbgPrint$2280.0$7$ := Ptr(null, 0);
+$result.DbgPrint$2305.0$9$ := Ptr(null, 0);
+$result.DbgPrint$2317.0$12$ := Ptr(null, 0);
+$result.DbgPrint$2327.0$14$ := Ptr(null, 0);
+$result.FlQueueIrpToThread$2308.41$11$ := Ptr(null, 0);
+$result.FloppyQueueRequest$2247.37$4$ := Ptr(null, 0);
+DeviceObject := DeviceObject1;
+Irp$1 := Irp$11;
+$result.FloppyReadWrite$2203.0$1$ := Ptr(null,0);
+goto label_3;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2334)
+label_1:
+assume (forall m:ptr :: {Mem_Control__IO_STACK_LOCATION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Control__IO_STACK_LOCATION[m] == old(Mem_Control__IO_STACK_LOCATION)[m]);
+assume (forall m:ptr :: {Mem_FUNCTION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FUNCTION[m] == old(Mem_FUNCTION)[m]);
+assume (forall m:ptr :: {Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_FlCancelSpinLock__DISKETTE_EXTENSION[m] == old(Mem_FlCancelSpinLock__DISKETTE_EXTENSION)[m]);
+assume (forall m:ptr :: {Mem_Information__IO_STATUS_BLOCK[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Information__IO_STATUS_BLOCK[m] == old(Mem_Information__IO_STATUS_BLOCK)[m]);
+assume (forall m:ptr :: {Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION[m] == old(Mem_NewRequestQueueSpinLock__DISKETTE_EXTENSION)[m]);
+assume (forall m:ptr :: {Mem_Status___unnamed_4_c7b3d275[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_Status___unnamed_4_c7b3d275[m] == old(Mem_Status___unnamed_4_c7b3d275)[m]);
+assume (forall m:ptr :: {Mem_UINT4[m]} alloc[Obj(m)] != ALLOCATED && old(alloc)[Obj(m)] != ALLOCATED ==> Mem_UINT4[m] == old(Mem_UINT4)[m]);
+return;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2334)
+label_2:
+assume false;
+return;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2230)
+label_3:
+goto label_4;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2231)
+label_4:
+goto label_5;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2232)
+label_5:
+goto label_6;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2234)
+label_6:
+goto label_6_true , label_6_false ;
+
+
+label_6_true :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 8)) != Ptr(null,0));
+goto label_8;
+
+
+label_6_false :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 8)) == Ptr(null,0));
+goto label_7;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2236)
+label_7:
+$disketteExtension$5$2232.24$ := Mem_DeviceExtension__DEVICE_OBJECT[DeviceExtension__DEVICE_OBJECT(DeviceObject)] ;
+goto label_12;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2234)
+label_8:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$DbgPrint.arg.1$3$ := havoc_stringTemp ;
+goto label_9;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2234)
+label_9:
+havoc $result.DbgPrint$2234.4$2$;
+// skip DbgPrint
+goto label_7;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2238)
+label_12:
+$irpSp$3$2230.23$ := Mem_CurrentStackLocation___unnamed_4_f80453a0[CurrentStackLocation___unnamed_4_f80453a0(__unnamed_4_f80453a0___unnamed_12_003c1454(__unnamed_12_003c1454___unnamed_40_6ef75b20(Overlay___unnamed_48_c27ef811(Tail__IRP(Irp$1)))))] ;
+goto label_13;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2244)
+label_13:
+call ExAcquireFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
+goto label_16;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2245)
+label_16:
+goto label_16_true , label_16_false ;
+
+
+label_16_true :
+assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
+goto label_18;
+
+
+label_16_false :
+assume (Mem_HoldNewRequests__DISKETTE_EXTENSION[HoldNewRequests__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
+goto label_17;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2257)
+label_17:
+goto label_17_true , label_17_false ;
+
+
+label_17_true :
+assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
+goto label_27;
+
+
+label_17_false :
+assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
+goto label_26;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2247)
+label_18:
+call $result.FloppyQueueRequest$2247.37$4$ := FloppyQueueRequest ($disketteExtension$5$2232.24$, Irp$1);
+goto label_21;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2247)
+label_21:
+$ntStatus$4$2231.13$ := $result.FloppyQueueRequest$2247.37$4$ ;
+goto label_22;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2249)
+label_22:
+call ExReleaseFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
+goto label_25;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2250)
+label_25:
+$result.FloppyReadWrite$2203.0$1$ := $ntStatus$4$2231.13$ ;
+goto label_1;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2257)
+label_26:
+goto label_26_true , label_26_false ;
+
+
+label_26_true :
+assume (Mem_IsStarted__DISKETTE_EXTENSION[IsStarted__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
+goto label_39;
+
+
+label_26_false :
+assume (Mem_IsStarted__DISKETTE_EXTENSION[IsStarted__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
+goto label_27;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2259)
+label_27:
+call ExReleaseFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
+goto label_30;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2261)
+label_30:
+goto label_30_true , label_30_false ;
+
+
+label_30_true :
+assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] != Ptr(null,0));
+goto label_32;
+
+
+label_30_false :
+assume (Mem_IsRemoved__DISKETTE_EXTENSION[IsRemoved__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)] == Ptr(null,0));
+goto label_31;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2264)
+label_31:
+$ntStatus$4$2231.13$ := Ptr(null, -1073741823) ;
+goto label_33;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2262)
+label_32:
+$ntStatus$4$2231.13$ := Ptr(null, -1073741738) ;
+goto label_33;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2266)
+label_33:
+Mem_Information__IO_STATUS_BLOCK[Information__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1))] := Ptr(null, 0) ;
+goto label_34;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2267)
+label_34:
+Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1)))] := $ntStatus$4$2231.13$ ;
+goto label_35;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2268)
+label_35:
+call IofCompleteRequest (Irp$1, Ptr(null, 0));
+goto label_38;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2269)
+label_38:
+$result.FloppyReadWrite$2203.0$1$ := $ntStatus$4$2231.13$ ;
+goto label_1;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2272)
+label_39:
+assume (null == Obj(Mem_MediaType__DISKETTE_EXTENSION[MediaType__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]));
+goto label_39_true , label_39_false ;
+
+
+label_39_true :
+assume (0 < Off(Mem_MediaType__DISKETTE_EXTENSION[MediaType__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]));
+goto label_41;
+
+
+label_39_false :
+assume !(0 < Off(Mem_MediaType__DISKETTE_EXTENSION[MediaType__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]));
+goto label_40;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2299)
+label_40:
+goto label_40_true , label_40_false ;
+
+
+label_40_true :
+assume (Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))] != Ptr(null,0));
+goto label_69;
+
+
+label_40_false :
+assume (Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))] == Ptr(null,0));
+goto label_68;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2274)
+label_41:
+assume (Obj(Mem_ByteCapacity__DISKETTE_EXTENSION[ByteCapacity__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) == Obj(PLUS(Mem_LowPart___unnamed_8_34582070[LowPart___unnamed_8_34582070(__unnamed_8_34582070__LARGE_INTEGER(ByteOffset___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))))], 1, Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))])));
+goto label_41_true , label_41_false ;
+
+
+label_41_true :
+assume (Off(Mem_ByteCapacity__DISKETTE_EXTENSION[ByteCapacity__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) < Off(PLUS(Mem_LowPart___unnamed_8_34582070[LowPart___unnamed_8_34582070(__unnamed_8_34582070__LARGE_INTEGER(ByteOffset___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))))], 1, Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))])));
+goto label_43;
+
+
+label_41_false :
+assume !(Off(Mem_ByteCapacity__DISKETTE_EXTENSION[ByteCapacity__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) < Off(PLUS(Mem_LowPart___unnamed_8_34582070[LowPart___unnamed_8_34582070(__unnamed_8_34582070__LARGE_INTEGER(ByteOffset___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))))], 1, Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))])));
+goto label_42;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2275)
+label_42:
+goto label_42_true , label_42_false ;
+
+
+label_42_true :
+assume (BIT_BAND(Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))], Ptr(Obj(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]), Off(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) - 1)) != Ptr(null,0));
+goto label_43;
+
+
+label_42_false :
+assume (BIT_BAND(Mem_Length___unnamed_16_39e6661e[Length___unnamed_16_39e6661e(Read___unnamed_16_c0f0e7de(Parameters__IO_STACK_LOCATION($irpSp$3$2230.23$)))], Ptr(Obj(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]), Off(Mem_BytesPerSector__DISKETTE_EXTENSION[BytesPerSector__DISKETTE_EXTENSION($disketteExtension$5$2232.24$)]) - 1)) == Ptr(null,0));
+goto label_40;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2278)
+label_43:
+goto label_43_true , label_43_false ;
+
+
+label_43_true :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) != Ptr(null,0));
+goto label_45;
+
+
+label_43_false :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) == Ptr(null,0));
+goto label_44;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2280)
+label_44:
+goto label_44_true , label_44_false ;
+
+
+label_44_true :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 2)) != Ptr(null,0));
+goto label_50;
+
+
+label_44_false :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 2)) == Ptr(null,0));
+goto label_49;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2278)
+label_45:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$DbgPrint.arg.1$6$ := havoc_stringTemp ;
+goto label_46;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2278)
+label_46:
+havoc $result.DbgPrint$2278.0$5$;
+// skip DbgPrint
+goto label_44;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2290)
+label_49:
+$ntStatus$4$2231.13$ := Ptr(null, -1073741811) ;
+goto label_54;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2280)
+label_50:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$DbgPrint.arg.1$8$ := havoc_stringTemp ;
+goto label_51;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2280)
+label_51:
+havoc $result.DbgPrint$2280.0$7$;
+// skip DbgPrint
+goto label_49;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2323)
+label_54:
+call ExReleaseFastMutex (HoldNewReqMutex__DISKETTE_EXTENSION($disketteExtension$5$2232.24$));
+goto label_57;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2325)
+label_57:
+goto label_57_true , label_57_false ;
+
+
+label_57_true :
+assume ($ntStatus$4$2231.13$ != Ptr(null, 259));
+goto label_59;
+
+
+label_57_false :
+assume !($ntStatus$4$2231.13$ != Ptr(null, 259));
+goto label_58;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2333)
+label_58:
+$result.FloppyReadWrite$2203.0$1$ := $ntStatus$4$2231.13$ ;
+goto label_1;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2326)
+label_59:
+Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1)))] := $ntStatus$4$2231.13$ ;
+goto label_60;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2327)
+label_60:
+goto label_60_true , label_60_false ;
+
+
+label_60_true :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) != Ptr(null,0));
+goto label_64;
+
+
+label_60_false :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) == Ptr(null,0));
+goto label_61;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2330)
+label_61:
+call IofCompleteRequest (Irp$1, Ptr(null, 0));
+goto label_58;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2327)
+label_64:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$DbgPrint.arg.1$15$ := havoc_stringTemp ;
+goto label_65;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2327)
+label_65:
+havoc $result.DbgPrint$2327.0$14$;
+// skip DbgPrint
+goto label_61;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2315)
+label_68:
+Mem_Information__IO_STATUS_BLOCK[Information__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1))] := Ptr(null, 0) ;
+goto label_78;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2305)
+label_69:
+goto label_69_true , label_69_false ;
+
+
+label_69_true :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 16)) != Ptr(null,0));
+goto label_73;
+
+
+label_69_false :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 16)) == Ptr(null,0));
+goto label_70;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2308)
+label_70:
+call $result.FlQueueIrpToThread$2308.41$11$ := FlQueueIrpToThread (Irp$1, $disketteExtension$5$2232.24$);
+goto label_77;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2305)
+label_73:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$DbgPrint.arg.1$10$ := havoc_stringTemp ;
+goto label_74;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2305)
+label_74:
+havoc $result.DbgPrint$2305.0$9$;
+// skip DbgPrint
+goto label_70;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2308)
+label_77:
+$ntStatus$4$2231.13$ := $result.FlQueueIrpToThread$2308.41$11$ ;
+goto label_54;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2316)
+label_78:
+Mem_Status___unnamed_4_c7b3d275[Status___unnamed_4_c7b3d275(__unnamed_4_c7b3d275__IO_STATUS_BLOCK(IoStatus__IRP(Irp$1)))] := Ptr(null, 0) ;
+goto label_79;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2317)
+label_79:
+goto label_79_true , label_79_false ;
+
+
+label_79_true :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) != Ptr(null,0));
+goto label_81;
+
+
+label_79_false :
+assume (BIT_BAND(Mem_UINT4[FloppyDebugLevel], Ptr(null, 1)) == Ptr(null,0));
+goto label_80;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2319)
+label_80:
+$ntStatus$4$2231.13$ := Ptr(null, 0) ;
+goto label_54;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2317)
+label_81:
+call havoc_stringTemp := __HAVOC_malloc_stack(Ptr(null,1));
+$DbgPrint.arg.1$13$ := havoc_stringTemp ;
+goto label_82;
+
+
+// c:\nt\drivers\storage\fdc\flpydisk\floppy.c(2317)
+label_82:
+havoc $result.DbgPrint$2317.0$12$;
+// skip DbgPrint
+goto label_80;
+
+}
+
diff --git a/Test/test17/runtest.bat b/Test/test17/runtest.bat
index 727d4a89..48ebcf82 100644
--- a/Test/test17/runtest.bat
+++ b/Test/test17/runtest.bat
@@ -1,12 +1,12 @@
-@echo off
-setlocal
-
-set BOOGIEDIR=..\..\Binaries
-set BGEXE=%BOOGIEDIR%\Boogie.exe
-
-
-for %%f in (contractinfer flpydisk) do (
- echo.
- echo -------------------- %%f --------------------
- %BGEXE% %* /errorLimit:1 /contractInfer /z3mam:4 /subsumption:0 %%f.bpl
-)
+@echo off
+setlocal
+
+set BOOGIEDIR=..\..\Binaries
+set BGEXE=%BOOGIEDIR%\Boogie.exe
+
+
+for %%f in (contractinfer flpydisk) do (
+ echo.
+ echo -------------------- %%f --------------------
+ %BGEXE% %* /errorLimit:1 /contractInfer /z3mam:4 /subsumption:0 %%f.bpl
+)
diff --git a/Test/test2/Arrays.bpl b/Test/test2/Arrays.bpl
index 5f4bd9c9..2b88be4a 100644
--- a/Test/test2/Arrays.bpl
+++ b/Test/test2/Arrays.bpl
@@ -1,184 +1,184 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// RUN: %boogie -noinfer -typeEncoding:m "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// -------------------- 1-dimensional arrays --------------------
-
-var A: [ref]int;
-
-procedure P0(o: ref, q: ref, y: int)
- requires o != q;
- modifies A;
- ensures A[o] == old(A[o]) + y;
- ensures (forall p: ref :: A[p] == old(A[p]) || p == o);
-{
- var k: int;
-
- start:
- k := A[q];
- A[o] := y + A[o];
- A[q] := k;
- return;
-}
-
-procedure P1(o: ref, q: ref, y: int)
- // This procedure does not have the assumption that o != q.
- modifies A;
- // It also does not ensures anything about A[o]
- ensures (forall p: ref :: A[p] == old(A[p]) || p == o);
-{
- var k: int;
-
- start:
- k := A[q];
- A[o] := y + A[o];
- A[q] := k;
- return;
-}
-
-procedure P2(o: ref, q: ref, y: int)
- // This procedure does not have the assumption that o != q.
- modifies A;
- ensures A[o] == old(A[o]) + y;
-{
- var k: int;
-
- start:
- k := A[q];
- A[o] := y + A[o];
- A[q] := k;
- return;
-} // error: postcondition violated (if o == q)
-
-// -------------------- 2-dimensional arrays --------------------
-
-var B: [ref,name]int;
-const F: name;
-
-procedure Q0(o: ref, q: ref, y: int, G: name)
- requires o != q && F != G;
- modifies B;
- ensures B[o,F] == old(B[o,F]) + y;
- ensures (forall p: ref, f: name :: B[p,f] == old(B[p,f]) ||
- (p == o && f == F));
-{
- var k: int;
-
- start:
- k := B[q,G];
- B[o,F] := y + B[o,F];
- B[q,G] := k;
- return;
-}
-
-procedure Q1(o: ref, q: ref, y: int, G: name)
- // This procedure does not have the assumption that o != q && F != G.
- modifies B;
- // It also does not ensures anything about B[o,F]
- ensures (forall p: ref, f: name :: B[p,f] == old(B[p,f]) ||
- (p == o && f == F));
-{
- var k: int;
-
- start:
- k := B[q,G];
- B[o,F] := y + B[o,F];
- B[q,G] := k;
- return;
-}
-
-procedure Q2(o: ref, q: ref, y: int, G: name)
- requires F != G;
- // This procedure does not have the assumption that o != q.
- modifies B;
- ensures B[o,F] == old(B[o,F]) + y;
-{
- var k: int;
-
- start:
- k := B[q,G];
- B[o,F] := y + B[o,F];
- B[q,G] := k;
- return;
-}
-
-procedure Q3(o: ref, q: ref, y: int, G: name)
- requires o != q;
- // This procedure does not have the assumption that F != G.
- modifies B;
- ensures B[o,F] == old(B[o,F]) + y;
-{
- var k: int;
-
- start:
- k := B[q,G];
- B[o,F] := y + B[o,F];
- B[q,G] := k;
- return;
-}
-
-procedure Q4(o: ref, q: ref, y: int, G: name)
- // This procedure does not have either of the assumptions o != q and F != G.
- modifies B;
- ensures B[o,F] == old(B[o,F]) + y;
-{
- var k: int;
-
- start:
- k := B[q,G];
- B[o,F] := y + B[o,F];
- B[q,G] := k;
- return;
-} // error: postcondition violated
-
-// -------------------- more tests --------------------
-
-procedure Skip0(o: ref, q: ref, G: name, H: name)
- modifies A,B;
- ensures (forall p: ref :: A[p] == old(A[p]));
- ensures (forall p: ref, g: name :: B[p,g] == old(B[p,g]));
-{
- start:
- return;
-}
-
-procedure Skip1(o: ref, q: ref, G: name, H: name)
- modifies A,B;
- ensures (forall p: ref :: A[p] == old(A[p]));
- ensures (forall p: ref, g: name :: B[p,g] == old(B[p,g]));
-{
- var k: int;
- var l: int;
-
- start:
- k := A[o];
- l := A[q];
- goto oneWay, theOtherWay;
-
- oneWay:
- A[o] := k;
- A[q] := l;
- goto next;
-
- theOtherWay:
- A[q] := l;
- A[o] := k;
- goto next;
-
- next:
- k := B[o,G];
- l := B[q,H];
- goto Lx, Ly;
-
- Lx:
- B[o,G] := k;
- B[q,H] := l;
- return;
-
- Ly:
- B[q,H] := l;
- B[o,G] := k;
- return;
-}
-
-type name, ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noinfer -typeEncoding:m "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// -------------------- 1-dimensional arrays --------------------
+
+var A: [ref]int;
+
+procedure P0(o: ref, q: ref, y: int)
+ requires o != q;
+ modifies A;
+ ensures A[o] == old(A[o]) + y;
+ ensures (forall p: ref :: A[p] == old(A[p]) || p == o);
+{
+ var k: int;
+
+ start:
+ k := A[q];
+ A[o] := y + A[o];
+ A[q] := k;
+ return;
+}
+
+procedure P1(o: ref, q: ref, y: int)
+ // This procedure does not have the assumption that o != q.
+ modifies A;
+ // It also does not ensures anything about A[o]
+ ensures (forall p: ref :: A[p] == old(A[p]) || p == o);
+{
+ var k: int;
+
+ start:
+ k := A[q];
+ A[o] := y + A[o];
+ A[q] := k;
+ return;
+}
+
+procedure P2(o: ref, q: ref, y: int)
+ // This procedure does not have the assumption that o != q.
+ modifies A;
+ ensures A[o] == old(A[o]) + y;
+{
+ var k: int;
+
+ start:
+ k := A[q];
+ A[o] := y + A[o];
+ A[q] := k;
+ return;
+} // error: postcondition violated (if o == q)
+
+// -------------------- 2-dimensional arrays --------------------
+
+var B: [ref,name]int;
+const F: name;
+
+procedure Q0(o: ref, q: ref, y: int, G: name)
+ requires o != q && F != G;
+ modifies B;
+ ensures B[o,F] == old(B[o,F]) + y;
+ ensures (forall p: ref, f: name :: B[p,f] == old(B[p,f]) ||
+ (p == o && f == F));
+{
+ var k: int;
+
+ start:
+ k := B[q,G];
+ B[o,F] := y + B[o,F];
+ B[q,G] := k;
+ return;
+}
+
+procedure Q1(o: ref, q: ref, y: int, G: name)
+ // This procedure does not have the assumption that o != q && F != G.
+ modifies B;
+ // It also does not ensures anything about B[o,F]
+ ensures (forall p: ref, f: name :: B[p,f] == old(B[p,f]) ||
+ (p == o && f == F));
+{
+ var k: int;
+
+ start:
+ k := B[q,G];
+ B[o,F] := y + B[o,F];
+ B[q,G] := k;
+ return;
+}
+
+procedure Q2(o: ref, q: ref, y: int, G: name)
+ requires F != G;
+ // This procedure does not have the assumption that o != q.
+ modifies B;
+ ensures B[o,F] == old(B[o,F]) + y;
+{
+ var k: int;
+
+ start:
+ k := B[q,G];
+ B[o,F] := y + B[o,F];
+ B[q,G] := k;
+ return;
+}
+
+procedure Q3(o: ref, q: ref, y: int, G: name)
+ requires o != q;
+ // This procedure does not have the assumption that F != G.
+ modifies B;
+ ensures B[o,F] == old(B[o,F]) + y;
+{
+ var k: int;
+
+ start:
+ k := B[q,G];
+ B[o,F] := y + B[o,F];
+ B[q,G] := k;
+ return;
+}
+
+procedure Q4(o: ref, q: ref, y: int, G: name)
+ // This procedure does not have either of the assumptions o != q and F != G.
+ modifies B;
+ ensures B[o,F] == old(B[o,F]) + y;
+{
+ var k: int;
+
+ start:
+ k := B[q,G];
+ B[o,F] := y + B[o,F];
+ B[q,G] := k;
+ return;
+} // error: postcondition violated
+
+// -------------------- more tests --------------------
+
+procedure Skip0(o: ref, q: ref, G: name, H: name)
+ modifies A,B;
+ ensures (forall p: ref :: A[p] == old(A[p]));
+ ensures (forall p: ref, g: name :: B[p,g] == old(B[p,g]));
+{
+ start:
+ return;
+}
+
+procedure Skip1(o: ref, q: ref, G: name, H: name)
+ modifies A,B;
+ ensures (forall p: ref :: A[p] == old(A[p]));
+ ensures (forall p: ref, g: name :: B[p,g] == old(B[p,g]));
+{
+ var k: int;
+ var l: int;
+
+ start:
+ k := A[o];
+ l := A[q];
+ goto oneWay, theOtherWay;
+
+ oneWay:
+ A[o] := k;
+ A[q] := l;
+ goto next;
+
+ theOtherWay:
+ A[q] := l;
+ A[o] := k;
+ goto next;
+
+ next:
+ k := B[o,G];
+ l := B[q,H];
+ goto Lx, Ly;
+
+ Lx:
+ B[o,G] := k;
+ B[q,H] := l;
+ return;
+
+ Ly:
+ B[q,H] := l;
+ B[o,G] := k;
+ return;
+}
+
+type name, ref;
diff --git a/Test/test2/AssertVerifiedUnder0.bpl b/Test/test2/AssertVerifiedUnder0.bpl
index 9e82545f..76d7660e 100644
--- a/Test/test2/AssertVerifiedUnder0.bpl
+++ b/Test/test2/AssertVerifiedUnder0.bpl
@@ -1,39 +1,39 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-procedure Test0()
-{
- assert {:verified_under false} false; // error
-}
-
-
-procedure Test1()
-{
- assert {:verified_under true} false;
-}
-
-
-procedure Test2(P: bool, A: bool)
-{
- assert {:verified_under A} P; // error
-}
-
-
-procedure Test3(P: bool, A: bool)
- requires !A ==> P;
-{
- assert {:verified_under A} P;
-}
-
-
-procedure Test4(P: bool, A: bool)
-{
- assert {:verified_under A} {:verified_under true} P; // error
-}
-
-
-procedure Test5(P: bool, A: bool)
- requires !A ==> P;
-{
- assert {:verified_under A} {:verified_under true} P;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure Test0()
+{
+ assert {:verified_under false} false; // error
+}
+
+
+procedure Test1()
+{
+ assert {:verified_under true} false;
+}
+
+
+procedure Test2(P: bool, A: bool)
+{
+ assert {:verified_under A} P; // error
+}
+
+
+procedure Test3(P: bool, A: bool)
+ requires !A ==> P;
+{
+ assert {:verified_under A} P;
+}
+
+
+procedure Test4(P: bool, A: bool)
+{
+ assert {:verified_under A} {:verified_under true} P; // error
+}
+
+
+procedure Test5(P: bool, A: bool)
+ requires !A ==> P;
+{
+ assert {:verified_under A} {:verified_under true} P;
+}
diff --git a/Test/test2/AssertVerifiedUnder0.bpl.expect b/Test/test2/AssertVerifiedUnder0.bpl.expect
index 83016c63..7fa23f60 100644
--- a/Test/test2/AssertVerifiedUnder0.bpl.expect
+++ b/Test/test2/AssertVerifiedUnder0.bpl.expect
@@ -1,11 +1,11 @@
-AssertVerifiedUnder0.bpl(6,5): Error BP5001: This assertion might not hold.
-Execution trace:
- AssertVerifiedUnder0.bpl(6,5): anon0
-AssertVerifiedUnder0.bpl(18,5): Error BP5001: This assertion might not hold.
-Execution trace:
- AssertVerifiedUnder0.bpl(18,5): anon0
-AssertVerifiedUnder0.bpl(31,5): Error BP5001: This assertion might not hold.
-Execution trace:
- AssertVerifiedUnder0.bpl(31,5): anon0
-
-Boogie program verifier finished with 3 verified, 3 errors
+AssertVerifiedUnder0.bpl(6,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ AssertVerifiedUnder0.bpl(6,5): anon0
+AssertVerifiedUnder0.bpl(18,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ AssertVerifiedUnder0.bpl(18,5): anon0
+AssertVerifiedUnder0.bpl(31,5): Error BP5001: This assertion might not hold.
+Execution trace:
+ AssertVerifiedUnder0.bpl(31,5): anon0
+
+Boogie program verifier finished with 3 verified, 3 errors
diff --git a/Test/test2/AssumeEnsures.bpl b/Test/test2/AssumeEnsures.bpl
index 74789135..2c5ad6a2 100644
--- a/Test/test2/AssumeEnsures.bpl
+++ b/Test/test2/AssumeEnsures.bpl
@@ -1,71 +1,71 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var g: int;
-
-procedure Foo() returns ();
- modifies g;
- free ensures 0 <= g;
-
-implementation Foo() returns ()
-{
- entry:
- g := g + 1;
- return;
-}
-
-procedure BarGood() returns ()
- modifies g;
-{
- entry:
- call Foo();
- assert 0 <= g;
- return;
-}
-
-procedure BarBad() returns ()
- modifies g;
-{
- entry:
- call Foo();
- assert 0 < g;
- return;
-}
-
-// ----- Free preconditions
-
-procedure Proc() returns ();
- free requires g == 15;
-
-implementation Proc() returns ()
-{
- entry:
- assert g > 10; // yes, this condition can be used here
- return;
-}
-
-implementation Proc() returns ()
-{
- entry:
- assert g < 10; // error
- return;
-}
-
-procedure Caller0() returns ()
-{
- entry:
- call Proc(); // yes, legal, since the precondition is not checked
- return;
-}
-
-procedure Caller1() returns ()
-{
- entry:
- call Proc();
- assert g > 10; // error, because:
- // Free preconditions are ignored (that is, treated as "skip") for the caller.
- // This is a BoogiePL design choice. Another alternative would be to treat free
- // preconditions as assume commands also on the caller side, either in the order
- // that all preconditions are given, or before or after all the checked preconditions
- // have been checked.
- return;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var g: int;
+
+procedure Foo() returns ();
+ modifies g;
+ free ensures 0 <= g;
+
+implementation Foo() returns ()
+{
+ entry:
+ g := g + 1;
+ return;
+}
+
+procedure BarGood() returns ()
+ modifies g;
+{
+ entry:
+ call Foo();
+ assert 0 <= g;
+ return;
+}
+
+procedure BarBad() returns ()
+ modifies g;
+{
+ entry:
+ call Foo();
+ assert 0 < g;
+ return;
+}
+
+// ----- Free preconditions
+
+procedure Proc() returns ();
+ free requires g == 15;
+
+implementation Proc() returns ()
+{
+ entry:
+ assert g > 10; // yes, this condition can be used here
+ return;
+}
+
+implementation Proc() returns ()
+{
+ entry:
+ assert g < 10; // error
+ return;
+}
+
+procedure Caller0() returns ()
+{
+ entry:
+ call Proc(); // yes, legal, since the precondition is not checked
+ return;
+}
+
+procedure Caller1() returns ()
+{
+ entry:
+ call Proc();
+ assert g > 10; // error, because:
+ // Free preconditions are ignored (that is, treated as "skip") for the caller.
+ // This is a BoogiePL design choice. Another alternative would be to treat free
+ // preconditions as assume commands also on the caller side, either in the order
+ // that all preconditions are given, or before or after all the checked preconditions
+ // have been checked.
+ return;
+}
diff --git a/Test/test2/AssumptionVariables0.bpl b/Test/test2/AssumptionVariables0.bpl
index cc73707c..84bf14ad 100644
--- a/Test/test2/AssumptionVariables0.bpl
+++ b/Test/test2/AssumptionVariables0.bpl
@@ -1,40 +1,73 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Test0()
-{
- var {:assumption} a0: bool;
-
- assert a0;
-}
-
-
-procedure Test1(n: int)
-{
- var {:assumption} a0: bool;
-
- a0 := a0 && (0 <= n);
-
- assert a0; // error
-}
-
-
-procedure Test2()
-{
- var {:assumption} a0: bool;
-
- havoc a0;
-
- assert a0; // error
-}
-
-
-var {:assumption} a0: bool;
-
-
-procedure Test3()
- modifies a0;
-{
- a0 := a0 && true;
-
- assert a0; // error
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Test0()
+{
+ var {:assumption} a0: bool;
+
+ assert a0;
+}
+
+
+procedure Test1(n: int)
+{
+ var {:assumption} a0: bool;
+
+ a0 := a0 && (0 <= n);
+
+ assert a0; // error
+}
+
+
+procedure Test2()
+{
+ var {:assumption} a0: bool;
+
+ havoc a0;
+
+ assert a0; // error
+}
+
+
+var {:assumption} ga0: bool;
+
+
+procedure Test3()
+ modifies ga0;
+{
+ ga0 := ga0 && true;
+
+ assert ga0; // error
+}
+
+
+procedure Test4()
+{
+ var {:assumption} a0: bool;
+ var tmp: bool;
+
+ tmp := a0;
+
+ havoc a0;
+
+ assert a0 ==> tmp;
+}
+
+
+procedure Test5(A: bool)
+{
+ var {:assumption} a0: bool;
+ var tmp0, tmp1: bool;
+
+ a0 := a0 && A;
+ tmp0 := a0;
+
+ havoc a0;
+
+ assert a0 ==> tmp0;
+
+ tmp1 := a0;
+
+ havoc a0;
+
+ assert a0 ==> tmp1;
+}
diff --git a/Test/test2/AssumptionVariables0.bpl.expect b/Test/test2/AssumptionVariables0.bpl.expect
index 54ddb2a9..284a41ad 100644
--- a/Test/test2/AssumptionVariables0.bpl.expect
+++ b/Test/test2/AssumptionVariables0.bpl.expect
@@ -6,6 +6,6 @@ Execution trace:
AssumptionVariables0.bpl(25,5): anon0
AssumptionVariables0.bpl(39,5): Error BP5001: This assertion might not hold.
Execution trace:
- AssumptionVariables0.bpl(37,8): anon0
+ AssumptionVariables0.bpl(37,9): anon0
-Boogie program verifier finished with 1 verified, 3 errors
+Boogie program verifier finished with 3 verified, 3 errors
diff --git a/Test/test2/Axioms.bpl b/Test/test2/Axioms.bpl
index 1fa8fab3..51d9ed00 100644
--- a/Test/test2/Axioms.bpl
+++ b/Test/test2/Axioms.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-const Seven: int;
-axiom Seven == 7;
-
-function inc(int) returns (int);
-axiom (forall j: int :: inc(j) == j+1);
-
-procedure P()
-{
- start:
- assert 4 <= Seven;
- assert Seven < inc(Seven);
- assert inc(5) + inc(inc(2)) == Seven + 3;
- return;
-}
-
-procedure Q()
-{
- start:
- assert inc(5) + inc(inc(2)) == Seven; // error
- return;
-}
-
-function inc2(x:int) returns(int) { x + 2 }
-
-procedure ExpandTest()
-{
- var q:int;
- assert inc(inc(q)) == inc2(q);
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+const Seven: int;
+axiom Seven == 7;
+
+function inc(int) returns (int);
+axiom (forall j: int :: inc(j) == j+1);
+
+procedure P()
+{
+ start:
+ assert 4 <= Seven;
+ assert Seven < inc(Seven);
+ assert inc(5) + inc(inc(2)) == Seven + 3;
+ return;
+}
+
+procedure Q()
+{
+ start:
+ assert inc(5) + inc(inc(2)) == Seven; // error
+ return;
+}
+
+function inc2(x:int) returns(int) { x + 2 }
+
+procedure ExpandTest()
+{
+ var q:int;
+ assert inc(inc(q)) == inc2(q);
+}
diff --git a/Test/test2/B.bpl b/Test/test2/B.bpl
index 78f91915..c90c156b 100644
--- a/Test/test2/B.bpl
+++ b/Test/test2/B.bpl
@@ -1,88 +1,88 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// ----------- BEGIN PRELUDE
-
-var Heap: [ref, name]int;
-const N: name;
-
-procedure Q0()
-{
- var h: int;
-
- entry:
- goto Else;
-
- Then:
- h := 15;
- goto end;
-
- Else:
- assume h == 0;
- goto end;
-
- end:
- assert 0 <= h;
- return;
-}
-
-procedure Q1()
-{
- var h: int;
-
- entry:
- goto Else;
-
- Then:
- h := -15;
- goto end;
-
- Else:
- assume h == 0;
- goto end;
-
- end:
- h := -h;
- assert 0 <= h;
- return;
-}
-
-procedure P0(this: ref)
- modifies Heap;
-{
- entry:
- goto Else;
-
- Then:
- Heap[this, N] := 15;
- goto end;
-
- Else:
- assume Heap[this, N] == 0;
- goto end;
-
- end:
- assert 0 <= Heap[this, N];
- return;
-}
-
-procedure P1(this: ref)
- modifies Heap;
-{
- entry:
- goto Else;
-
- Then:
- Heap[this, N] := -15;
- goto end;
-
- Else:
- assume Heap[this, N] == 0;
- goto end;
-
- end:
- Heap[this, N] := -Heap[this, N];
- assert 0 <= Heap[this, N];
- return;
-}
-
-type name, ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// ----------- BEGIN PRELUDE
+
+var Heap: [ref, name]int;
+const N: name;
+
+procedure Q0()
+{
+ var h: int;
+
+ entry:
+ goto Else;
+
+ Then:
+ h := 15;
+ goto end;
+
+ Else:
+ assume h == 0;
+ goto end;
+
+ end:
+ assert 0 <= h;
+ return;
+}
+
+procedure Q1()
+{
+ var h: int;
+
+ entry:
+ goto Else;
+
+ Then:
+ h := -15;
+ goto end;
+
+ Else:
+ assume h == 0;
+ goto end;
+
+ end:
+ h := -h;
+ assert 0 <= h;
+ return;
+}
+
+procedure P0(this: ref)
+ modifies Heap;
+{
+ entry:
+ goto Else;
+
+ Then:
+ Heap[this, N] := 15;
+ goto end;
+
+ Else:
+ assume Heap[this, N] == 0;
+ goto end;
+
+ end:
+ assert 0 <= Heap[this, N];
+ return;
+}
+
+procedure P1(this: ref)
+ modifies Heap;
+{
+ entry:
+ goto Else;
+
+ Then:
+ Heap[this, N] := -15;
+ goto end;
+
+ Else:
+ assume Heap[this, N] == 0;
+ goto end;
+
+ end:
+ Heap[this, N] := -Heap[this, N];
+ assert 0 <= Heap[this, N];
+ return;
+}
+
+type name, ref;
diff --git a/Test/test2/BadLineNumber.bpl b/Test/test2/BadLineNumber.bpl
new file mode 100644
index 00000000..b8776a4e
--- /dev/null
+++ b/Test/test2/BadLineNumber.bpl
@@ -0,0 +1,15 @@
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure p();
+ ensures false;
+
+implementation p()
+{
+ if (*)
+ {
+ }
+ else
+ {
+ }
+} \ No newline at end of file
diff --git a/Test/test2/BadLineNumber.bpl.expect b/Test/test2/BadLineNumber.bpl.expect
new file mode 100644
index 00000000..bc5d1984
--- /dev/null
+++ b/Test/test2/BadLineNumber.bpl.expect
@@ -0,0 +1,7 @@
+BadLineNumber.bpl(15,1): Error BP5003: A postcondition might not hold on this return path.
+BadLineNumber.bpl(5,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ BadLineNumber.bpl(9,5): anon0
+ BadLineNumber.bpl(14,5): anon3_Else
+
+Boogie program verifier finished with 0 verified, 1 error
diff --git a/Test/test2/BoundedTypeParameterQuantifier.bpl b/Test/test2/BoundedTypeParameterQuantifier.bpl
new file mode 100644
index 00000000..146ba445
--- /dev/null
+++ b/Test/test2/BoundedTypeParameterQuantifier.bpl
@@ -0,0 +1,14 @@
+// RUN: %boogie /proverWarnings:1 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+function Map#Domain<QUN, YAN>(Map QUN YAN): [QUN] bool;
+function Map#Empty<QUN, YAN>(): Map QUN YAN;
+type Map QUN YAN;
+
+axiom (forall<QUN, YAN> u: QUN ::
+ { Map#Domain(Map#Empty(): Map QUN YAN)[u] }
+ !Map#Domain(Map#Empty(): Map QUN YAN)[u]);
+
+procedure P()
+{
+}
diff --git a/Test/test2/BoundedTypeParameterQuantifier.bpl.expect b/Test/test2/BoundedTypeParameterQuantifier.bpl.expect
new file mode 100644
index 00000000..37fad75c
--- /dev/null
+++ b/Test/test2/BoundedTypeParameterQuantifier.bpl.expect
@@ -0,0 +1,2 @@
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/test2/Call.bpl b/Test/test2/Call.bpl
index bf2690cc..bb67c3dc 100644
--- a/Test/test2/Call.bpl
+++ b/Test/test2/Call.bpl
@@ -1,62 +1,62 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Bar() returns (barresult: ref);
-
-procedure Foo();
-
-implementation Foo()
-{
- var x: ref;
-
- entry:
- call x := Bar();
- assume x == null;
- call x := Bar();
- assert x == null;
- return;
-
-}
-
-procedure DifferentFormalNames(x: int, y: int) returns (z: int);
- requires x < y;
- ensures z == x;
-
-implementation DifferentFormalNames(x: int, y: int) returns (z: int)
-{
- start:
- assert x < y;
- z := x;
- return;
-}
-
-implementation DifferentFormalNames(y: int, x: int) returns (w: int)
-{
- start:
- goto A, B;
- A:
- assert y < x;
- assume false;
- return;
- B:
- w := y;
- return;
-}
-
-implementation DifferentFormalNames(y: int, x: int) returns (w: int)
-{
- start:
- assert x < y; // error
- w := y;
- return;
-}
-
-implementation DifferentFormalNames(y: int, x: int) returns (w: int)
-{
- start:
- w := x;
- return; // error: postcondition violation
-}
-
-type ref;
-
-const null : ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Bar() returns (barresult: ref);
+
+procedure Foo();
+
+implementation Foo()
+{
+ var x: ref;
+
+ entry:
+ call x := Bar();
+ assume x == null;
+ call x := Bar();
+ assert x == null;
+ return;
+
+}
+
+procedure DifferentFormalNames(x: int, y: int) returns (z: int);
+ requires x < y;
+ ensures z == x;
+
+implementation DifferentFormalNames(x: int, y: int) returns (z: int)
+{
+ start:
+ assert x < y;
+ z := x;
+ return;
+}
+
+implementation DifferentFormalNames(y: int, x: int) returns (w: int)
+{
+ start:
+ goto A, B;
+ A:
+ assert y < x;
+ assume false;
+ return;
+ B:
+ w := y;
+ return;
+}
+
+implementation DifferentFormalNames(y: int, x: int) returns (w: int)
+{
+ start:
+ assert x < y; // error
+ w := y;
+ return;
+}
+
+implementation DifferentFormalNames(y: int, x: int) returns (w: int)
+{
+ start:
+ w := x;
+ return; // error: postcondition violation
+}
+
+type ref;
+
+const null : ref;
diff --git a/Test/test2/CallVerifiedUnder0.bpl b/Test/test2/CallVerifiedUnder0.bpl
new file mode 100644
index 00000000..5d99ec53
--- /dev/null
+++ b/Test/test2/CallVerifiedUnder0.bpl
@@ -0,0 +1,42 @@
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure A(P: bool);
+ requires P;
+
+procedure Test0()
+{
+ call {:verified_under false} A(false); // error
+}
+
+
+procedure Test1()
+{
+ call {:verified_under true} A(false);
+}
+
+
+procedure Test2(P: bool, A: bool)
+{
+ call {:verified_under A} A(P); // error
+}
+
+
+procedure Test3(P: bool, A: bool)
+ requires !A ==> P;
+{
+ call {:verified_under A} A(P);
+}
+
+
+procedure Test4(P: bool, A: bool)
+{
+ call {:verified_under A} {:verified_under true} A(P); // error
+}
+
+
+procedure Test5(P: bool, A: bool)
+ requires !A ==> P;
+{
+ call {:verified_under A} {:verified_under true} A(P);
+}
diff --git a/Test/test2/CallVerifiedUnder0.bpl.expect b/Test/test2/CallVerifiedUnder0.bpl.expect
new file mode 100644
index 00000000..90949273
--- /dev/null
+++ b/Test/test2/CallVerifiedUnder0.bpl.expect
@@ -0,0 +1,14 @@
+CallVerifiedUnder0.bpl(9,5): Error BP5002: A precondition for this call might not hold.
+CallVerifiedUnder0.bpl(5,3): Related location: This is the precondition that might not hold.
+Execution trace:
+ CallVerifiedUnder0.bpl(9,5): anon0
+CallVerifiedUnder0.bpl(21,5): Error BP5002: A precondition for this call might not hold.
+CallVerifiedUnder0.bpl(5,3): Related location: This is the precondition that might not hold.
+Execution trace:
+ CallVerifiedUnder0.bpl(21,5): anon0
+CallVerifiedUnder0.bpl(34,5): Error BP5002: A precondition for this call might not hold.
+CallVerifiedUnder0.bpl(5,3): Related location: This is the precondition that might not hold.
+Execution trace:
+ CallVerifiedUnder0.bpl(34,5): anon0
+
+Boogie program verifier finished with 3 verified, 3 errors
diff --git a/Test/test2/ContractEvaluationOrder.bpl b/Test/test2/ContractEvaluationOrder.bpl
index 8719dcfa..4115c4b0 100644
--- a/Test/test2/ContractEvaluationOrder.bpl
+++ b/Test/test2/ContractEvaluationOrder.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P() returns (x, y: int)
- ensures x == y; // ensured by the body
- ensures x == 0; // error: not ensured by the body
- ensures y == 0; // follows from the previous two ensures clauses (provided they are
- // indeed evaluated in this order, which they are supposed to be)
-{
- x := y;
-}
-
-procedure Q() returns (x, y: int)
-{
- x := y;
-
- assert x == y; // ensured by the body
- assert x == 0; // error: not ensured by the body
- assert y == 0; // follows from the previous two asserts (provided they are
- // indeed evaluated in this order, which they are supposed to be)
-}
-
-procedure R()
-{
- var a, b: int;
- a := b;
- call S(a, b);
-}
-
-procedure S(x, y: int)
- // In the call from R:
- requires x == y; // ensured by the body of R
- requires x == 0; // error: not ensured by the body of R
- requires y == 0; // follows from the previous two requires clauses (provided they are
- // indeed evaluated in this order, which they are supposed to be)
-{
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P() returns (x, y: int)
+ ensures x == y; // ensured by the body
+ ensures x == 0; // error: not ensured by the body
+ ensures y == 0; // follows from the previous two ensures clauses (provided they are
+ // indeed evaluated in this order, which they are supposed to be)
+{
+ x := y;
+}
+
+procedure Q() returns (x, y: int)
+{
+ x := y;
+
+ assert x == y; // ensured by the body
+ assert x == 0; // error: not ensured by the body
+ assert y == 0; // follows from the previous two asserts (provided they are
+ // indeed evaluated in this order, which they are supposed to be)
+}
+
+procedure R()
+{
+ var a, b: int;
+ a := b;
+ call S(a, b);
+}
+
+procedure S(x, y: int)
+ // In the call from R:
+ requires x == y; // ensured by the body of R
+ requires x == 0; // error: not ensured by the body of R
+ requires y == 0; // follows from the previous two requires clauses (provided they are
+ // indeed evaluated in this order, which they are supposed to be)
+{
+}
diff --git a/Test/test2/CutBackEdge.bpl b/Test/test2/CutBackEdge.bpl
index 2ee7cd68..4d507c1e 100644
--- a/Test/test2/CutBackEdge.bpl
+++ b/Test/test2/CutBackEdge.bpl
@@ -1,42 +1,42 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Test()
-{
- var i: int;
-
- entry:
- i := 0;
- goto block850;
-
- block850:
- assert i == 0;
- havoc i;
- goto block850;
-
-}
-
-// The following procedure once exhibited a bug in Boogie's DAG manipulations
-procedure TightLoop0()
-{
- L:
- assert !true; // error
- goto L;
-}
-procedure TightLoop1()
-{
- L:
- assert false; // error
- goto L;
-}
-procedure TightLoop2()
-{
- L:
- assert true; // cool
- goto L;
-}
-procedure TightLoop3(b: bool)
-{
- L:
- assert b; // error
- goto L;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Test()
+{
+ var i: int;
+
+ entry:
+ i := 0;
+ goto block850;
+
+ block850:
+ assert i == 0;
+ havoc i;
+ goto block850;
+
+}
+
+// The following procedure once exhibited a bug in Boogie's DAG manipulations
+procedure TightLoop0()
+{
+ L:
+ assert !true; // error
+ goto L;
+}
+procedure TightLoop1()
+{
+ L:
+ assert false; // error
+ goto L;
+}
+procedure TightLoop2()
+{
+ L:
+ assert true; // cool
+ goto L;
+}
+procedure TightLoop3(b: bool)
+{
+ L:
+ assert b; // error
+ goto L;
+}
diff --git a/Test/test2/Ensures.bpl b/Test/test2/Ensures.bpl
index c37e31a0..16f6105f 100644
--- a/Test/test2/Ensures.bpl
+++ b/Test/test2/Ensures.bpl
@@ -1,77 +1,77 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var H: [ref,name]int;
-var that: ref;
-
-const X: name;
-const Y: name;
-
-procedure P(this: ref);
- modifies H;
- ensures H[this,X] == 5;
-
-implementation P(this: ref) {
- start:
- H[this,X] := 5;
- return;
-}
-
-procedure Q(this: ref);
- modifies H;
- ensures (forall o: ref, F: name :: o == this && F == X ==> H[o,F] == 5);
-
-implementation Q(this: ref) {
- start:
- H[this,X] := 5;
- return;
-}
-
-implementation Q(this: ref) {
- start:
- H[this,X] := 7;
- return; // error
-}
-
-implementation Q(this: ref) {
- start:
- return; // error
-}
-
-implementation Q(this: ref) {
- start:
- H[that,X] := 5;
- return; // error
-}
-
-implementation Q(this: ref) {
- start:
- H[this,Y] := 5;
- return; // error
-}
-
-implementation Q(this: ref) {
- start:
- call P(this);
- return;
-}
-
-implementation Q(this: ref) {
- start:
- call Q(this);
- return;
-}
-
-implementation Q(this: ref) {
- start:
- call P(this);
- call Q(this);
- return;
-}
-
-implementation Q(this: ref) {
- start:
- call P(that);
- return; // error
-}
-
-type name, ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var H: [ref,name]int;
+var that: ref;
+
+const X: name;
+const Y: name;
+
+procedure P(this: ref);
+ modifies H;
+ ensures H[this,X] == 5;
+
+implementation P(this: ref) {
+ start:
+ H[this,X] := 5;
+ return;
+}
+
+procedure Q(this: ref);
+ modifies H;
+ ensures (forall o: ref, F: name :: o == this && F == X ==> H[o,F] == 5);
+
+implementation Q(this: ref) {
+ start:
+ H[this,X] := 5;
+ return;
+}
+
+implementation Q(this: ref) {
+ start:
+ H[this,X] := 7;
+ return; // error
+}
+
+implementation Q(this: ref) {
+ start:
+ return; // error
+}
+
+implementation Q(this: ref) {
+ start:
+ H[that,X] := 5;
+ return; // error
+}
+
+implementation Q(this: ref) {
+ start:
+ H[this,Y] := 5;
+ return; // error
+}
+
+implementation Q(this: ref) {
+ start:
+ call P(this);
+ return;
+}
+
+implementation Q(this: ref) {
+ start:
+ call Q(this);
+ return;
+}
+
+implementation Q(this: ref) {
+ start:
+ call P(this);
+ call Q(this);
+ return;
+}
+
+implementation Q(this: ref) {
+ start:
+ call P(that);
+ return; // error
+}
+
+type name, ref;
diff --git a/Test/test2/False.bpl b/Test/test2/False.bpl
index a0337182..54b95e2e 100644
--- a/Test/test2/False.bpl
+++ b/Test/test2/False.bpl
@@ -1,18 +1,18 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure Test1()
-{
- entry:
- assert !true == false;
- return;
-}
-
-procedure Test2()
-{
- var b: bool;
-
- entry:
- assume b != false;
- assert b;
- return;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure Test1()
+{
+ entry:
+ assert !true == false;
+ return;
+}
+
+procedure Test2()
+{
+ var b: bool;
+
+ entry:
+ assume b != false;
+ assert b;
+ return;
+}
diff --git a/Test/test2/FormulaTerm.bpl b/Test/test2/FormulaTerm.bpl
index 7e762afe..41c2f441 100644
--- a/Test/test2/FormulaTerm.bpl
+++ b/Test/test2/FormulaTerm.bpl
@@ -1,141 +1,141 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Test formula-term distinction in Simplify
-
-procedure plus(x: int, y: int) returns (z: int);
- ensures z == x + y;
-
-implementation plus(x: int, y: int) returns (z: int)
-{
-start:
- assume z == 3;
- return; // ERROR: postcondition possibly violated
-}
-
-implementation plus(x: int, y: int) returns (z: int)
-{
-start:
- z := x + y;
- return;
-}
-
-implementation plus(x: int, y: int) returns (z: int)
-{
-start:
- z := x + y;
- z := 0 + z;
- return;
-}
-
-procedure plus2(x: int, y: int) returns (z: int)
- ensures z == x + y;
-{
-start:
- z := x + y;
- return;
-}
-
-procedure or(x: int, y: int, a: int, b: int) returns (z: int)
- requires a == b;
-{
-var t: bool;
-start:
- t := (x < y || x > y || x == y || x != y) && a >= b && a <= b;
- assert (x < y || x > y || x == y || x != y) && a >= b && a <= b;
- assert t;
- return;
-}
-
-procedure less(x: int, y: int) returns (z: bool);
- requires x < y;
- ensures z == (x < y);
-
-implementation less(x: int, y: int) returns (z: bool)
-{
-start:
- z := x < y;
- return;
-}
-
-implementation less(x: int, y: int) returns (z: bool)
-{
-start:
- goto yes, no;
-yes:
- assume x < y;
- z := true;
- return;
-no:
- assume !(x < y);
- z := false;
- return;
-}
-
-implementation less(x: int, y: int) returns (z: bool)
-{
-start:
- goto yes, no;
-yes:
- assume x < y;
- z := true;
- return;
-no:
- assume x >= y;
- z := false;
- return;
-}
-
-procedure LESS(x: int, y: int) returns (z: bool);
- requires x < y;
- ensures z <==> (x < y);
-
-implementation LESS(x: int, y: int) returns (z: bool)
-{
-start:
- z := x < y;
- return;
-}
-
-implementation LESS(x: int, y: int) returns (z: bool)
-{
-start:
- goto yes, no;
-yes:
- assume x < y;
- z := true;
- return;
-no:
- assume !(x < y);
- z := false;
- return;
-}
-
-implementation LESS(x: int, y: int) returns (z: bool)
-{
-start:
- goto yes, no;
-yes:
- assume x < y;
- z := true;
- return;
-no:
- assume x >= y;
- z := false;
- return;
-}
-
-procedure Assignments()
-{
- var b: bool;
- var c: bool;
- var d: bool;
- var x: bool, y: bool;
-
- entry:
- b := c || d;
- b := c && d;
- x := c <==> d;
- y := c ==> d;
- assert x ==> y;
- return;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Test formula-term distinction in Simplify
+
+procedure plus(x: int, y: int) returns (z: int);
+ ensures z == x + y;
+
+implementation plus(x: int, y: int) returns (z: int)
+{
+start:
+ assume z == 3;
+ return; // ERROR: postcondition possibly violated
+}
+
+implementation plus(x: int, y: int) returns (z: int)
+{
+start:
+ z := x + y;
+ return;
+}
+
+implementation plus(x: int, y: int) returns (z: int)
+{
+start:
+ z := x + y;
+ z := 0 + z;
+ return;
+}
+
+procedure plus2(x: int, y: int) returns (z: int)
+ ensures z == x + y;
+{
+start:
+ z := x + y;
+ return;
+}
+
+procedure or(x: int, y: int, a: int, b: int) returns (z: int)
+ requires a == b;
+{
+var t: bool;
+start:
+ t := (x < y || x > y || x == y || x != y) && a >= b && a <= b;
+ assert (x < y || x > y || x == y || x != y) && a >= b && a <= b;
+ assert t;
+ return;
+}
+
+procedure less(x: int, y: int) returns (z: bool);
+ requires x < y;
+ ensures z == (x < y);
+
+implementation less(x: int, y: int) returns (z: bool)
+{
+start:
+ z := x < y;
+ return;
+}
+
+implementation less(x: int, y: int) returns (z: bool)
+{
+start:
+ goto yes, no;
+yes:
+ assume x < y;
+ z := true;
+ return;
+no:
+ assume !(x < y);
+ z := false;
+ return;
+}
+
+implementation less(x: int, y: int) returns (z: bool)
+{
+start:
+ goto yes, no;
+yes:
+ assume x < y;
+ z := true;
+ return;
+no:
+ assume x >= y;
+ z := false;
+ return;
+}
+
+procedure LESS(x: int, y: int) returns (z: bool);
+ requires x < y;
+ ensures z <==> (x < y);
+
+implementation LESS(x: int, y: int) returns (z: bool)
+{
+start:
+ z := x < y;
+ return;
+}
+
+implementation LESS(x: int, y: int) returns (z: bool)
+{
+start:
+ goto yes, no;
+yes:
+ assume x < y;
+ z := true;
+ return;
+no:
+ assume !(x < y);
+ z := false;
+ return;
+}
+
+implementation LESS(x: int, y: int) returns (z: bool)
+{
+start:
+ goto yes, no;
+yes:
+ assume x < y;
+ z := true;
+ return;
+no:
+ assume x >= y;
+ z := false;
+ return;
+}
+
+procedure Assignments()
+{
+ var b: bool;
+ var c: bool;
+ var d: bool;
+ var x: bool, y: bool;
+
+ entry:
+ b := c || d;
+ b := c && d;
+ x := c <==> d;
+ y := c ==> d;
+ assert x ==> y;
+ return;
+}
diff --git a/Test/test2/FormulaTerm2.bpl b/Test/test2/FormulaTerm2.bpl
index 14ae5dab..8a2b0ceb 100644
--- a/Test/test2/FormulaTerm2.bpl
+++ b/Test/test2/FormulaTerm2.bpl
@@ -1,51 +1,51 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// This file has been created to test some of the formula/term issues in Zap.
-// However, the test harness does not specify any particular prover to be used,
-// since these tests should pass regardless of which prover is used.
-
-procedure P()
-{
- var a: int, b: int, t: bool;
-
- start:
- assume a == b;
- t := a == b;
- assert t;
- return;
-}
-
-function f(bool) returns (int);
-const A: int;
-const B: int;
-
-axiom f(A < B) == 5;
-
-procedure Q()
-{
- start:
- assume A < B;
- assert f(true) == 5;
- return;
-}
-
-// ----- and now some erroneous procedures
-
-procedure PX()
-{
- var a: int, b: int, t: bool;
-
- start:
- assume a == b;
- t := a == b;
- assert !t; // error
- return;
-}
-
-procedure QX()
-{
- start:
- assume A < B;
- assert f(true) < 2; // error
- return;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// This file has been created to test some of the formula/term issues in Zap.
+// However, the test harness does not specify any particular prover to be used,
+// since these tests should pass regardless of which prover is used.
+
+procedure P()
+{
+ var a: int, b: int, t: bool;
+
+ start:
+ assume a == b;
+ t := a == b;
+ assert t;
+ return;
+}
+
+function f(bool) returns (int);
+const A: int;
+const B: int;
+
+axiom f(A < B) == 5;
+
+procedure Q()
+{
+ start:
+ assume A < B;
+ assert f(true) == 5;
+ return;
+}
+
+// ----- and now some erroneous procedures
+
+procedure PX()
+{
+ var a: int, b: int, t: bool;
+
+ start:
+ assume a == b;
+ t := a == b;
+ assert !t; // error
+ return;
+}
+
+procedure QX()
+{
+ start:
+ assume A < B;
+ assert f(true) < 2; // error
+ return;
+}
diff --git a/Test/test2/FreeCall.bpl b/Test/test2/FreeCall.bpl
index 16f182d9..3bd21e21 100644
--- a/Test/test2/FreeCall.bpl
+++ b/Test/test2/FreeCall.bpl
@@ -1,84 +1,84 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Test the implementation of free calls. These calls don't check the preconditions of the
-// called procedure in the caller.
-
-
-procedure Uncallable(i: int)
- requires 0 <= i;
- free requires true;
- requires false;
-{
-
-}
-
-procedure UncallableReturn(i: int) returns (b: bool)
- requires 0 <= i;
- free requires true;
- requires false;
-{
- b := true;
-}
-
-function T(b: bool) : bool
-{
- b == true
-}
-
-procedure TestCallForall(b: bool)
- requires T(b);
- free requires true;
- ensures T(b);
-{
-
-}
-
-
-procedure NormalCall0()
-{
- call Uncallable(0); // error: precondition violation
-}
-
-procedure NormalCall1()
-{
- call Uncallable(-1); // error: precondition violation
-}
-
-procedure FreeCall0()
-{
- free call Uncallable(0);
-}
-
-procedure FreeCall1()
-{
- free call Uncallable(-1);
-}
-
-procedure NormalCall2()
-{
- var b: bool;
-
- call b := UncallableReturn(0); // error: precondition violation
-}
-
-procedure NormalCall3()
-{
- var b: bool;
-
- call b := UncallableReturn(-1); // error: precondition violation
-}
-
-procedure FreeCall3()
-{
- var b: bool;
-
- free call b := UncallableReturn(0);
-}
-
-procedure FreeCall4()
-{
- var b: bool;
-
- free call b := UncallableReturn(-1);
-}
-
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Test the implementation of free calls. These calls don't check the preconditions of the
+// called procedure in the caller.
+
+
+procedure Uncallable(i: int)
+ requires 0 <= i;
+ free requires true;
+ requires false;
+{
+
+}
+
+procedure UncallableReturn(i: int) returns (b: bool)
+ requires 0 <= i;
+ free requires true;
+ requires false;
+{
+ b := true;
+}
+
+function T(b: bool) : bool
+{
+ b == true
+}
+
+procedure TestCallForall(b: bool)
+ requires T(b);
+ free requires true;
+ ensures T(b);
+{
+
+}
+
+
+procedure NormalCall0()
+{
+ call Uncallable(0); // error: precondition violation
+}
+
+procedure NormalCall1()
+{
+ call Uncallable(-1); // error: precondition violation
+}
+
+procedure FreeCall0()
+{
+ free call Uncallable(0);
+}
+
+procedure FreeCall1()
+{
+ free call Uncallable(-1);
+}
+
+procedure NormalCall2()
+{
+ var b: bool;
+
+ call b := UncallableReturn(0); // error: precondition violation
+}
+
+procedure NormalCall3()
+{
+ var b: bool;
+
+ call b := UncallableReturn(-1); // error: precondition violation
+}
+
+procedure FreeCall3()
+{
+ var b: bool;
+
+ free call b := UncallableReturn(0);
+}
+
+procedure FreeCall4()
+{
+ var b: bool;
+
+ free call b := UncallableReturn(-1);
+}
+
diff --git a/Test/test2/IfThenElse1.bpl b/Test/test2/IfThenElse1.bpl
index 5c12c1f4..1f27a9a9 100644
--- a/Test/test2/IfThenElse1.bpl
+++ b/Test/test2/IfThenElse1.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
type t1;
procedure ok()
diff --git a/Test/test2/Implies.bpl b/Test/test2/Implies.bpl
index 36c4a134..09337d40 100644
--- a/Test/test2/Implies.bpl
+++ b/Test/test2/Implies.bpl
@@ -1,38 +1,38 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-const a:bool;
-const b:bool;
-const c:bool;
-const d:bool;
-
-function f(int) returns (bool);
-axiom (forall x:int :: f(x) <== x >= 0);
-
-procedure P() {
- assert (a ==> (b ==> c) ==> d) == (d <== (c <== b) <== a);
- assert (a ==> b ==> c) == (c <== (a ==> b)); // error
-
- assert f(23);
- assert f(-5); // error
-}
-
-procedure Q0(x: int) {
- assert x == 2; // error
- assert x == 2; // nothing reported for this line, since control cannot reach here
-}
-
-procedure Q1(x: int) {
- assert {:subsumption 0} x == 2; // error
- assert x == 2; // error (because the subsumption attribute above makes the execution 'forget' the condition)
-}
-
-procedure Q2(x: int) {
- assert x == 2; // error
- assert {:subsumption 0} x == 2; // nothing reported for this line, since control cannot reach here
-}
-
-procedure Q3(x: int) {
- assert {:subsumption 0} x == 2; // error
- assert {:subsumption 0} x == 2; // error (because the subsumption attribute above makes the execution 'forget' the condition)
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+const a:bool;
+const b:bool;
+const c:bool;
+const d:bool;
+
+function f(int) returns (bool);
+axiom (forall x:int :: f(x) <== x >= 0);
+
+procedure P() {
+ assert (a ==> (b ==> c) ==> d) == (d <== (c <== b) <== a);
+ assert (a ==> b ==> c) == (c <== (a ==> b)); // error
+
+ assert f(23);
+ assert f(-5); // error
+}
+
+procedure Q0(x: int) {
+ assert x == 2; // error
+ assert x == 2; // nothing reported for this line, since control cannot reach here
+}
+
+procedure Q1(x: int) {
+ assert {:subsumption 0} x == 2; // error
+ assert x == 2; // error (because the subsumption attribute above makes the execution 'forget' the condition)
+}
+
+procedure Q2(x: int) {
+ assert x == 2; // error
+ assert {:subsumption 0} x == 2; // nothing reported for this line, since control cannot reach here
+}
+
+procedure Q3(x: int) {
+ assert {:subsumption 0} x == 2; // error
+ assert {:subsumption 0} x == 2; // error (because the subsumption attribute above makes the execution 'forget' the condition)
+}
diff --git a/Test/test2/InvariantVerifiedUnder0.bpl b/Test/test2/InvariantVerifiedUnder0.bpl
new file mode 100644
index 00000000..dc8e0d4a
--- /dev/null
+++ b/Test/test2/InvariantVerifiedUnder0.bpl
@@ -0,0 +1,54 @@
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure Test0()
+{
+ while (*)
+ invariant {:verified_under false} false; // error
+ {}
+}
+
+
+procedure Test1()
+{
+ while (*)
+ invariant {:verified_under true} false;
+ {}
+}
+
+
+procedure Test2(P: bool, Q: bool, A: bool)
+{
+ while (*)
+ invariant {:verified_under A} P; // error
+ invariant {:verified_under A} Q; // error
+ {}
+}
+
+
+procedure Test3(P: bool, Q: bool, A: bool)
+ requires !A ==> P;
+{
+ while (*)
+ invariant {:verified_under A} P;
+ invariant {:verified_under A} Q; // error
+ {}
+}
+
+procedure Test4(P: bool, Q: bool, A: bool)
+{
+ while (*)
+ invariant {:verified_under A} {:verified_under true} P; // error
+ invariant {:verified_under A} {:verified_under true} Q; // error
+ {}
+}
+
+
+procedure Test5(P: bool, Q: bool, A: bool)
+ requires !A ==> Q;
+{
+ while (*)
+ invariant {:verified_under A} {:verified_under true} P; // error
+ invariant {:verified_under A} {:verified_under true} Q;
+ {}
+}
diff --git a/Test/test2/InvariantVerifiedUnder0.bpl.expect b/Test/test2/InvariantVerifiedUnder0.bpl.expect
new file mode 100644
index 00000000..a95a10e1
--- /dev/null
+++ b/Test/test2/InvariantVerifiedUnder0.bpl.expect
@@ -0,0 +1,23 @@
+InvariantVerifiedUnder0.bpl(7,7): Error BP5001: This assertion might not hold.
+Execution trace:
+ InvariantVerifiedUnder0.bpl(6,5): anon0
+InvariantVerifiedUnder0.bpl(23,7): Error BP5004: This loop invariant might not hold on entry.
+Execution trace:
+ InvariantVerifiedUnder0.bpl(22,5): anon0
+InvariantVerifiedUnder0.bpl(24,7): Error BP5004: This loop invariant might not hold on entry.
+Execution trace:
+ InvariantVerifiedUnder0.bpl(22,5): anon0
+InvariantVerifiedUnder0.bpl(34,7): Error BP5004: This loop invariant might not hold on entry.
+Execution trace:
+ InvariantVerifiedUnder0.bpl(32,5): anon0
+InvariantVerifiedUnder0.bpl(41,7): Error BP5004: This loop invariant might not hold on entry.
+Execution trace:
+ InvariantVerifiedUnder0.bpl(40,5): anon0
+InvariantVerifiedUnder0.bpl(42,7): Error BP5004: This loop invariant might not hold on entry.
+Execution trace:
+ InvariantVerifiedUnder0.bpl(40,5): anon0
+InvariantVerifiedUnder0.bpl(51,7): Error BP5004: This loop invariant might not hold on entry.
+Execution trace:
+ InvariantVerifiedUnder0.bpl(50,5): anon0
+
+Boogie program verifier finished with 1 verified, 7 errors
diff --git a/Test/test2/LambdaOldExpressions.bpl b/Test/test2/LambdaOldExpressions.bpl
index e865f4ab..24ce498d 100644
--- a/Test/test2/LambdaOldExpressions.bpl
+++ b/Test/test2/LambdaOldExpressions.bpl
@@ -1,63 +1,63 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var b: bool;
-
-
-procedure p0();
- requires b;
- modifies b;
- ensures (lambda x: bool :: {:MyAttr "put an attr here", !b} old(b))[true];
- ensures !(lambda x: bool :: {:AnotherAttr "yes, why not", b} {:ABC b, b, old(b)} b)[true];
-
-implementation p0()
-{
- b := !b;
- assert (lambda x: bool :: old(b))[true];
- assert !(lambda x: bool :: b)[true];
-}
-
-
-procedure p1();
- requires !b;
- modifies b;
- ensures (lambda x: bool :: old(b))[true]; // error
-
-implementation p1()
-{
- b := !b;
- assert !(lambda x: bool :: old(b))[true];
-}
-
-
-procedure p2();
- requires b;
- modifies b;
- ensures (lambda x: bool :: old(b) != b)[true];
-
-implementation p2()
-{
- b := !b;
- assert (lambda x: bool :: old(b) != b)[true];
-}
-
-
-procedure p3();
- requires b;
- modifies b;
- ensures (lambda x: int :: old(old(b)) != b)[15];
-
-implementation p3()
-{
- b := !b;
- assert (lambda x: int :: old(old(b)) != b)[15];
-}
-
-// Note that variables (inside and outside old expressions) mentioned
-// in attributes (even if they are not mentioned in the body of the
-// lambda) are also picked up by the auto-generated lambda functions,
-// so that the attributes can be copied to the function and axiom.
-var h: int;
-procedure TestAttributeParameters()
- ensures (lambda x: int :: {:MyAttribute old(h), h} x < 100)[23];
-{
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var b: bool;
+
+
+procedure p0();
+ requires b;
+ modifies b;
+ ensures (lambda x: bool :: {:MyAttr "put an attr here", !b} old(b))[true];
+ ensures !(lambda x: bool :: {:AnotherAttr "yes, why not", b} {:ABC b, b, old(b)} b)[true];
+
+implementation p0()
+{
+ b := !b;
+ assert (lambda x: bool :: old(b))[true];
+ assert !(lambda x: bool :: b)[true];
+}
+
+
+procedure p1();
+ requires !b;
+ modifies b;
+ ensures (lambda x: bool :: old(b))[true]; // error
+
+implementation p1()
+{
+ b := !b;
+ assert !(lambda x: bool :: old(b))[true];
+}
+
+
+procedure p2();
+ requires b;
+ modifies b;
+ ensures (lambda x: bool :: old(b) != b)[true];
+
+implementation p2()
+{
+ b := !b;
+ assert (lambda x: bool :: old(b) != b)[true];
+}
+
+
+procedure p3();
+ requires b;
+ modifies b;
+ ensures (lambda x: int :: old(old(b)) != b)[15];
+
+implementation p3()
+{
+ b := !b;
+ assert (lambda x: int :: old(old(b)) != b)[15];
+}
+
+// Note that variables (inside and outside old expressions) mentioned
+// in attributes (even if they are not mentioned in the body of the
+// lambda) are also picked up by the auto-generated lambda functions,
+// so that the attributes can be copied to the function and axiom.
+var h: int;
+procedure TestAttributeParameters()
+ ensures (lambda x: int :: {:MyAttribute old(h), h} x < 100)[23];
+{
+}
diff --git a/Test/test2/LambdaPoly.bpl b/Test/test2/LambdaPoly.bpl
index a850d43b..9bbab100 100644
--- a/Test/test2/LambdaPoly.bpl
+++ b/Test/test2/LambdaPoly.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
type set a = [a]bool;
function union<T>(a:set T, b:set T) : set T;
axiom (forall<T> a,b:set T :: union(a,b) == (lambda x:T :: a[x] || b[x]));
diff --git a/Test/test2/LoopInvAssume.bpl b/Test/test2/LoopInvAssume.bpl
index fd95c52e..a1e9a894 100644
--- a/Test/test2/LoopInvAssume.bpl
+++ b/Test/test2/LoopInvAssume.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Check that assumes in loop invariants are handled correctly
-
-var x : int;
-
-procedure Test()
- modifies x;
-{
- entry:
- goto loophead, exit;
-
- loophead:
- assume x >= 0;
- x := 0;
- goto loophead, exit;
-
- exit:
- assume x < 0;
- assert false;
- return;
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Check that assumes in loop invariants are handled correctly
+
+var x : int;
+
+procedure Test()
+ modifies x;
+{
+ entry:
+ goto loophead, exit;
+
+ loophead:
+ assume x >= 0;
+ x := 0;
+ goto loophead, exit;
+
+ exit:
+ assume x < 0;
+ assert false;
+ return;
+}
diff --git a/Test/test2/NeverPattern.bpl b/Test/test2/NeverPattern.bpl
index aa301129..5b8fc241 100644
--- a/Test/test2/NeverPattern.bpl
+++ b/Test/test2/NeverPattern.bpl
@@ -1,70 +1,70 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function {:never_pattern true} f1(x:int) returns(int);
-function {:never_pattern false} f2(x:int) returns(int);
-function f3(x:int) returns(int);
-
-
-procedure foo()
-{
- assume (forall x : int :: f1(x) > 0 && f2(x) > 0 && f3(x) > 0);
- assert f2(3) > 0;
- assert f3(4) > 0;
-}
-
-procedure bar()
-{
- assume (forall x : int :: f1(x) > 0 && f2(x) > 0 && f3(x) > 0 && f1(7) == 3);
- assert f1(3) > 0;
-}
-
-procedure bar1()
-{
- assume (forall x : int :: {:nopats f2(x)} f1(x) > 0 && f2(x) > 0 && f3(x) > 0 && f1(7) == 3);
- assert f1(3) > 0;
-}
-
-procedure bar2()
-{
- assume (forall x : int :: {:nopats f2(x)} f1(x) > 0 && f2(x) > 0 && f3(x) > 0 && f1(7) == 3);
- assert f2(3) > 0;
-}
-
-// ----- nested binders -----
-
-function {:never_pattern} P(int): bool;
-function F(int, int): int;
-function G(int): bool;
-
-procedure NestedBinders()
-{
- goto A, B, C, D;
- A:
- assume (forall s: int ::
- // the occurrence of P in the next line had once caused a crash
- (forall x: int :: { F(s, x) } P(F(s, x)))
- ==> G(s)); // this places the nested forall in a negative position
- goto End;
-
- B:
- assume (forall s: int ::
- // the occurrence of P in the next line had once caused a crash
- (exists x: int :: { F(s, x) } P(F(s, x))));
- goto End;
-
- C:
- assume (forall s: int, m: [int]bool ::
- // the occurrence of P in the next line had once caused a crash
- (lambda x: int :: P(F(s, x))) == m);
- goto End;
-
- D:
- assume (forall x0: int ::
- // The following quantifier will get a {:nopats P(x1,s)}, which is good.
- // But that added trigger expression had once caused the outer quantifier
- // to crash.
- (forall x1: int :: P(x1)));
- goto End;
-
- End:
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function {:never_pattern true} f1(x:int) returns(int);
+function {:never_pattern false} f2(x:int) returns(int);
+function f3(x:int) returns(int);
+
+
+procedure foo()
+{
+ assume (forall x : int :: f1(x) > 0 && f2(x) > 0 && f3(x) > 0);
+ assert f2(3) > 0;
+ assert f3(4) > 0;
+}
+
+procedure bar()
+{
+ assume (forall x : int :: f1(x) > 0 && f2(x) > 0 && f3(x) > 0 && f1(7) == 3);
+ assert f1(3) > 0;
+}
+
+procedure bar1()
+{
+ assume (forall x : int :: {:nopats f2(x)} f1(x) > 0 && f2(x) > 0 && f3(x) > 0 && f1(7) == 3);
+ assert f1(3) > 0;
+}
+
+procedure bar2()
+{
+ assume (forall x : int :: {:nopats f2(x)} f1(x) > 0 && f2(x) > 0 && f3(x) > 0 && f1(7) == 3);
+ assert f2(3) > 0;
+}
+
+// ----- nested binders -----
+
+function {:never_pattern} P(int): bool;
+function F(int, int): int;
+function G(int): bool;
+
+procedure NestedBinders()
+{
+ goto A, B, C, D;
+ A:
+ assume (forall s: int ::
+ // the occurrence of P in the next line had once caused a crash
+ (forall x: int :: { F(s, x) } P(F(s, x)))
+ ==> G(s)); // this places the nested forall in a negative position
+ goto End;
+
+ B:
+ assume (forall s: int ::
+ // the occurrence of P in the next line had once caused a crash
+ (exists x: int :: { F(s, x) } P(F(s, x))));
+ goto End;
+
+ C:
+ assume (forall s: int, m: [int]bool ::
+ // the occurrence of P in the next line had once caused a crash
+ (lambda x: int :: P(F(s, x))) == m);
+ goto End;
+
+ D:
+ assume (forall x0: int ::
+ // The following quantifier will get a {:nopats P(x1,s)}, which is good.
+ // But that added trigger expression had once caused the outer quantifier
+ // to crash.
+ (forall x1: int :: P(x1)));
+ goto End;
+
+ End:
+}
diff --git a/Test/test2/NullaryMaps.bpl b/Test/test2/NullaryMaps.bpl
index a02f4594..142d18f2 100644
--- a/Test/test2/NullaryMaps.bpl
+++ b/Test/test2/NullaryMaps.bpl
@@ -1,59 +1,59 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// aren't these cool!
-
-var m: []int;
-var p: <a>[]a;
-
-type ref;
-const null: ref;
-
-procedure P()
- requires m[] == 5;
- modifies m;
- modifies p;
- ensures m[] == 30;
- ensures p[] == null;
-{
- m[] := 12;
- p[] := 12;
- p[] := true;
- assert p[] == m[];
- assert p[];
- m := m[:= 30];
- p := p[:=null];
-}
-
-procedure Q()
- modifies m;
-{
- assert m[] == 5; // error
- m[] := 30;
- assert m[] == 5; // error
-}
-
-procedure R()
- modifies p;
-{
- assert p[] < 3; // error
-}
-
-// ----
-
-type Field a;
-type HeapType = <a>[ref, Field a]a;
-const F0: Field int;
-const F1: Field bool;
-const alloc: Field bool;
-var Heap: HeapType;
-procedure FrameCondition(this: ref)
- modifies Heap;
- ensures (forall<a> o: ref, f: Field a ::
- Heap[o,f] == old(Heap)[o,f] ||
- !old(Heap)[o,alloc] ||
- (o == this && f == F0) ||
- (o == this && f == F1)
- );
-{
-}
-
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// aren't these cool!
+
+var m: []int;
+var p: <a>[]a;
+
+type ref;
+const null: ref;
+
+procedure P()
+ requires m[] == 5;
+ modifies m;
+ modifies p;
+ ensures m[] == 30;
+ ensures p[] == null;
+{
+ m[] := 12;
+ p[] := 12;
+ p[] := true;
+ assert p[] == m[];
+ assert p[];
+ m := m[:= 30];
+ p := p[:=null];
+}
+
+procedure Q()
+ modifies m;
+{
+ assert m[] == 5; // error
+ m[] := 30;
+ assert m[] == 5; // error
+}
+
+procedure R()
+ modifies p;
+{
+ assert p[] < 3; // error
+}
+
+// ----
+
+type Field a;
+type HeapType = <a>[ref, Field a]a;
+const F0: Field int;
+const F1: Field bool;
+const alloc: Field bool;
+var Heap: HeapType;
+procedure FrameCondition(this: ref)
+ modifies Heap;
+ ensures (forall<a> o: ref, f: Field a ::
+ Heap[o,f] == old(Heap)[o,f] ||
+ !old(Heap)[o,alloc] ||
+ (o == this && f == F0) ||
+ (o == this && f == F1)
+ );
+{
+}
+
diff --git a/Test/test2/Old.bpl b/Test/test2/Old.bpl
index beb98d40..017dcd85 100644
--- a/Test/test2/Old.bpl
+++ b/Test/test2/Old.bpl
@@ -1,134 +1,134 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-var x: int;
-var y: int;
-
-procedure P()
- modifies x;
- ensures x == old(x) + 1;
-{
- start:
- x := 1 + x;
- return;
-}
-
-procedure Q();
- modifies x;
- ensures x == old(x) + 1;
-
-implementation Q()
-{
- start:
- x := 1 + x;
- return;
-}
-
-procedure R()
- modifies x;
- ensures x == old(x) + 1;
-{
- start:
- return;
-} // error: does not establish postcondition
-
-procedure Swap()
- modifies x, y;
- ensures x == old(y) && y == old(x);
-{
- var t: int;
-
- start:
- goto A, B;
- A:
- t := x;
- x := y;
- y := t;
- goto end;
- B:
- x := x - y; // x == old(x) - old(y)
- y := y + x; // y == old(y) + (old(x) - old(y)) == old(x)
- x := y - x; // x == old(x) - (old(x) - old(y)) == old(y)
- goto end;
- end:
- return;
-}
-
-procedure OutParam0(x: int) returns (y: int)
- ensures y == x + 1;
-{
- start:
- y := x + 1;
- return;
-}
-
-// OutParam1 is like OutParam0, except that there's now a separate
-// implementation declaration, which means that the specification
-// and body use different AST nodes for the formal parameters. This
-// may make a difference in the various substitutions going on.
-// (Indeed, a previous bug caused OutParam0 to verify but not OutParam1.)
-procedure OutParam1(x: int) returns (y: int);
- ensures y == x + 1;
-implementation OutParam1(x: int) returns (y: int)
-{
- start:
- y := x + 1;
- return;
-}
-
-var a: [ref]int;
-var b: [ref]int;
-
-procedure SwapElems(o: ref) returns (p: ref)
- modifies a, b;
- ensures a[o] == old(b[p]) && b[o] == old(a[p]);
-{
- var ta: int, tb: int;
-
- start:
- goto A, B, C;
- A:
- havoc p;
- goto B, C;
- B:
- ta := a[p];
- tb := b[p];
- a[o] := tb;
- b[o] := ta;
- return;
- C:
- assume a[o] == b[o];assume false;
-
- p := o;
- return;
-}
-
-
-
-//-------------------------------------------------------------------------
-// Test old in Boogie PL code
-//-------------------------------------------------------------------------
-
-var Global0: int;
-
-// Good
-procedure OldInCode0()
- requires Global0 >= 0;
- ensures Global0 <= old(Global0) + 1;
- modifies Global0;
-{
- var local0: int;
-
- start:
- goto A,B;
- A:
- assert Global0 == old(Global0);
- return;
-
- B:
- local0 := Global0 + 1;
- local0 := local0 - 1;
- Global0 := old(local0 + 1);
- return;
-}
-
-type ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+var x: int;
+var y: int;
+
+procedure P()
+ modifies x;
+ ensures x == old(x) + 1;
+{
+ start:
+ x := 1 + x;
+ return;
+}
+
+procedure Q();
+ modifies x;
+ ensures x == old(x) + 1;
+
+implementation Q()
+{
+ start:
+ x := 1 + x;
+ return;
+}
+
+procedure R()
+ modifies x;
+ ensures x == old(x) + 1;
+{
+ start:
+ return;
+} // error: does not establish postcondition
+
+procedure Swap()
+ modifies x, y;
+ ensures x == old(y) && y == old(x);
+{
+ var t: int;
+
+ start:
+ goto A, B;
+ A:
+ t := x;
+ x := y;
+ y := t;
+ goto end;
+ B:
+ x := x - y; // x == old(x) - old(y)
+ y := y + x; // y == old(y) + (old(x) - old(y)) == old(x)
+ x := y - x; // x == old(x) - (old(x) - old(y)) == old(y)
+ goto end;
+ end:
+ return;
+}
+
+procedure OutParam0(x: int) returns (y: int)
+ ensures y == x + 1;
+{
+ start:
+ y := x + 1;
+ return;
+}
+
+// OutParam1 is like OutParam0, except that there's now a separate
+// implementation declaration, which means that the specification
+// and body use different AST nodes for the formal parameters. This
+// may make a difference in the various substitutions going on.
+// (Indeed, a previous bug caused OutParam0 to verify but not OutParam1.)
+procedure OutParam1(x: int) returns (y: int);
+ ensures y == x + 1;
+implementation OutParam1(x: int) returns (y: int)
+{
+ start:
+ y := x + 1;
+ return;
+}
+
+var a: [ref]int;
+var b: [ref]int;
+
+procedure SwapElems(o: ref) returns (p: ref)
+ modifies a, b;
+ ensures a[o] == old(b[p]) && b[o] == old(a[p]);
+{
+ var ta: int, tb: int;
+
+ start:
+ goto A, B, C;
+ A:
+ havoc p;
+ goto B, C;
+ B:
+ ta := a[p];
+ tb := b[p];
+ a[o] := tb;
+ b[o] := ta;
+ return;
+ C:
+ assume a[o] == b[o];assume false;
+
+ p := o;
+ return;
+}
+
+
+
+//-------------------------------------------------------------------------
+// Test old in Boogie PL code
+//-------------------------------------------------------------------------
+
+var Global0: int;
+
+// Good
+procedure OldInCode0()
+ requires Global0 >= 0;
+ ensures Global0 <= old(Global0) + 1;
+ modifies Global0;
+{
+ var local0: int;
+
+ start:
+ goto A,B;
+ A:
+ assert Global0 == old(Global0);
+ return;
+
+ B:
+ local0 := Global0 + 1;
+ local0 := local0 - 1;
+ Global0 := old(local0 + 1);
+ return;
+}
+
+type ref;
diff --git a/Test/test2/OldIllegal.bpl b/Test/test2/OldIllegal.bpl
index b9f7bd75..0a9b9b54 100644
--- a/Test/test2/OldIllegal.bpl
+++ b/Test/test2/OldIllegal.bpl
@@ -1,18 +1,18 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Test old appearing in illegal locations
-
-var Global0: int;
-
-// Bad
-procedure OldInCode1()
- requires old(Global0) == 0;
-{
- start:
- return;
-}
-
-// Bad
-axiom (forall o:ref :: old(o) == o);
-
-type ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Test old appearing in illegal locations
+
+var Global0: int;
+
+// Bad
+procedure OldInCode1()
+ requires old(Global0) == 0;
+{
+ start:
+ return;
+}
+
+// Bad
+axiom (forall o:ref :: old(o) == o);
+
+type ref;
diff --git a/Test/test2/Passification.bpl b/Test/test2/Passification.bpl
index a248ca97..05912565 100644
--- a/Test/test2/Passification.bpl
+++ b/Test/test2/Passification.bpl
@@ -1,171 +1,171 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// VC generation tests: passification
-
-procedure good0(x: int) returns (y: int, z: int)
- ensures z == 4 || z == 4+x;
-{
-var t: int;
-A:
- t := y;
- z := 3;
- goto B, C;
-B:
- z := z + x;
- goto D;
-C:
- goto D;
-D:
- z := z + 1;
- y := t;
- return;
-}
-
-procedure good1(x: int) returns (y: int, z: int)
- ensures z == x + 4;
-{
-var t: int;
-A:
- t := y;
- z := 3;
- z := z + x;
- z := z + 1;
- y := t;
- return;
-}
-
-procedure bad0(x: int) returns (y: int, z: int)
- ensures y == 4; // ERROR: postcondition violation
-{
-var t: int;
-A:
- t := z;
- z := 3;
- z := z + 1;
- y := t;
- return;
-}
-
-procedure Loop()
-{
-start:
- goto start;
-}
-
-procedure UnreachableBlock()
-{
-start:
- return;
-notReached:
- goto start;
-reallyNeverReached:
- goto reallyNeverReached;
-}
-
-procedure Loop0() returns (z: int)
- ensures 10 <= z;
-{
-var x: int;
-A:
- goto B, C;
-B:
- assume x < 10;
- x := x + 1;
- goto A;
-C:
- assume !(x < 10);
- z := x;
- return;
-}
-
-const unique A0: name;
-const unique A1: name;
-const unique A2: name;
-
-procedure Array0() returns (z: int)
- ensures z >= 5;
-{
-var a: [name,name]int;
-L0:
- a[A0,A2] := 5;
- a[A0,A1] := 20;
- assert a[A0,A1] == 20;
- goto L1,L2;
-L1:
- a[A0,A2] := 18;
- assert a[A0,A2] == 18;
- goto L2;
-L2:
- assert a[A0,A1] == 20;
- z := a[A0,A2];
- return;
-}
-
-procedure Array1(o0: ref, o1: ref) returns (z: int)
- ensures z >= 5;
-{
-var a: [ref,name]int;
-L0:
- a[o1,A0] := 5;
- a[o0,A0] := 20;
- assert a[o0,A0] == 20;
- goto L1,L2;
-L1:
- a[o1,A0] := 18;
- assert a[o1,A0] == 18;
- goto L2;
-L2:
- assert a[o0,A0] == 20; // ERROR: assertion failure
- z := a[o1,A0];
- return;
-}
-
-procedure Array2(o0: ref, o1: ref) returns (z: int)
- ensures z >= 5;
-{
-var a: [ref,name]int;
-L0:
- assume o1 != o0;
- a[o1,A0] := 5;
- a[o0,A0] := 20;
- assert a[o0,A0] == 20;
- goto L1,L2;
-L1:
- a[o1,A0] := 18;
- assert a[o1,A0] == 18;
- goto L2;
-L2:
- assert a[o0,A0] == 20;
- z := a[o1,A0];
- return;
-}
-
-procedure P()
-{
-var t: int;
-L0:
- t := 0;
- goto L1, L2;
-L1:
- t := 1;
- goto L2;
-L2:
- assert t == 1; // ERROR: assert failure
- return;
-}
-
-procedure Q()
-{
-var t: int;
-L0:
- t := 0;
- goto L1, L2;
-L1:
- t := 1;
- goto L2;
-L2:
- assert t == 0; // ERROR: assert failure
- return;
-}
-
-type name, ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// VC generation tests: passification
+
+procedure good0(x: int) returns (y: int, z: int)
+ ensures z == 4 || z == 4+x;
+{
+var t: int;
+A:
+ t := y;
+ z := 3;
+ goto B, C;
+B:
+ z := z + x;
+ goto D;
+C:
+ goto D;
+D:
+ z := z + 1;
+ y := t;
+ return;
+}
+
+procedure good1(x: int) returns (y: int, z: int)
+ ensures z == x + 4;
+{
+var t: int;
+A:
+ t := y;
+ z := 3;
+ z := z + x;
+ z := z + 1;
+ y := t;
+ return;
+}
+
+procedure bad0(x: int) returns (y: int, z: int)
+ ensures y == 4; // ERROR: postcondition violation
+{
+var t: int;
+A:
+ t := z;
+ z := 3;
+ z := z + 1;
+ y := t;
+ return;
+}
+
+procedure Loop()
+{
+start:
+ goto start;
+}
+
+procedure UnreachableBlock()
+{
+start:
+ return;
+notReached:
+ goto start;
+reallyNeverReached:
+ goto reallyNeverReached;
+}
+
+procedure Loop0() returns (z: int)
+ ensures 10 <= z;
+{
+var x: int;
+A:
+ goto B, C;
+B:
+ assume x < 10;
+ x := x + 1;
+ goto A;
+C:
+ assume !(x < 10);
+ z := x;
+ return;
+}
+
+const unique A0: name;
+const unique A1: name;
+const unique A2: name;
+
+procedure Array0() returns (z: int)
+ ensures z >= 5;
+{
+var a: [name,name]int;
+L0:
+ a[A0,A2] := 5;
+ a[A0,A1] := 20;
+ assert a[A0,A1] == 20;
+ goto L1,L2;
+L1:
+ a[A0,A2] := 18;
+ assert a[A0,A2] == 18;
+ goto L2;
+L2:
+ assert a[A0,A1] == 20;
+ z := a[A0,A2];
+ return;
+}
+
+procedure Array1(o0: ref, o1: ref) returns (z: int)
+ ensures z >= 5;
+{
+var a: [ref,name]int;
+L0:
+ a[o1,A0] := 5;
+ a[o0,A0] := 20;
+ assert a[o0,A0] == 20;
+ goto L1,L2;
+L1:
+ a[o1,A0] := 18;
+ assert a[o1,A0] == 18;
+ goto L2;
+L2:
+ assert a[o0,A0] == 20; // ERROR: assertion failure
+ z := a[o1,A0];
+ return;
+}
+
+procedure Array2(o0: ref, o1: ref) returns (z: int)
+ ensures z >= 5;
+{
+var a: [ref,name]int;
+L0:
+ assume o1 != o0;
+ a[o1,A0] := 5;
+ a[o0,A0] := 20;
+ assert a[o0,A0] == 20;
+ goto L1,L2;
+L1:
+ a[o1,A0] := 18;
+ assert a[o1,A0] == 18;
+ goto L2;
+L2:
+ assert a[o0,A0] == 20;
+ z := a[o1,A0];
+ return;
+}
+
+procedure P()
+{
+var t: int;
+L0:
+ t := 0;
+ goto L1, L2;
+L1:
+ t := 1;
+ goto L2;
+L2:
+ assert t == 1; // ERROR: assert failure
+ return;
+}
+
+procedure Q()
+{
+var t: int;
+L0:
+ t := 0;
+ goto L1, L2;
+L1:
+ t := 1;
+ goto L2;
+L2:
+ assert t == 0; // ERROR: assert failure
+ return;
+}
+
+type name, ref;
diff --git a/Test/test2/Quantifiers.bpl b/Test/test2/Quantifiers.bpl
index 659a0c47..0392ca23 100644
--- a/Test/test2/Quantifiers.bpl
+++ b/Test/test2/Quantifiers.bpl
@@ -1,156 +1,156 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// ----------------------------------------------------------------------- single trigger
-
-function f(int, int) returns (int);
-
-axiom (forall x: int, y: int :: f(x,y) < x+y);
-axiom (forall x: int :: { f(x,10) } f(x,10) == 3);
-
-procedure P(a: int, b: int)
- requires a <= 25 && b <= 30;
-{
- start:
- assert f(a,b) <= 100;
- return;
-}
-
-procedure Q(a: int, b: int)
- requires a + 2 <= b;
-{
- start:
- assert f(a,b) == 3; // not provable with the trigger given above
- return;
-}
-
-procedure R(a: int, b: int)
- requires a + 2 <= b;
-{
- start:
- assume b <= 10 && 8 <= a;
- assert f(a,b) == 3; // now, the trigger should fire
- return;
-}
-
-// ----------------------------------------------------------------------- multi trigger
-
-function g(int, int) returns (int);
-
-axiom (forall x: int, y: int :: { g(x,10),g(x,y) } g(x,y) == 3); // multi-trigger
-
-procedure S(a: int, b: int)
- requires a + 2 <= b;
-{
- start:
- assert g(a,b) == 3; // not provable with the trigger given above
- return;
-}
-
-procedure T(a: int, b: int)
- requires a + 2 <= b;
-{
- start:
- assume b <= 10 && 8 <= a;
- assert g(a,b) == 3; // this should trigger
- return;
-}
-
-// ----------------------------------------------------------------------- several triggers
-
-function h(int, int) returns (int);
-
-axiom (forall y: int :: { g(y,y) } { h(y,h(y,10)) } h(y, h(y,y)) == y); // several triggers
-
-procedure U0(a: int)
-{
- start:
- assert h(a,h(a,a)) == a; // not provable with the triggers given above
- return;
-}
-
-procedure U1(a: int, b: int)
-{
- start:
- assume g(a,b) == 5;
- assert h(a,h(a,a)) == a; // not provable with the triggers given above
- return;
-}
-
-procedure V0(a: int, b: int)
- requires a == b;
-{
- start:
- assume g(a,b) == 5;
- assert h(a,h(a,a)) == a; // this should trigger
- return;
-}
-
-procedure V1(a: int, b: int)
-{
- start:
- assume a == 10;
- assert h(a,h(a,a)) == a; // this should trigger
- return;
-}
-
-procedure V2(a: int, b: int)
-{
- start:
- assume 0 <= h(a,h(a,10));
- assume a == 17;
- assert h(a,h(a,a)) == a; // this should trigger
- return;
-}
-
-// ----------------------------------------------------------------------- negated triggers
-
-function ka(ref) returns (int);
-function kb(ref) returns (int);
-function kbSynonym(ref) returns (int);
-function isA(ref, name) returns (bool);
-function isB(ref, name) returns (bool);
-const $T: name;
-
-axiom (forall o: ref ::
- isA(o, $T) ==> ka(o) < ka(o)); // automatically inferred triggers can be both isA(o,$T) and ka(o)
-
-axiom (forall o: ref ::
- {:nopats isB(o, $T) }
- isB(o, $T) ==> kb(o) < kbSynonym(o)); // prevent isB(o,$T) from being used as a trigger
-
-axiom (forall o: ref :: kb(o) == kbSynonym(o));
-
-procedure W(o: ref, e: int)
- requires isB(o, $T);
-{
- start:
- assert e > 20; // the isB axiom should not trigger, so this cannot be proved
- return;
-}
-
-procedure X0(o: ref, e: int)
- requires isA(o, $T);
-{
- start:
- assert e > 20; // this should trigger the isA axiom, so anything is provable
- return;
-}
-
-procedure X1(o: ref, e: int, u: int)
- requires isB(o, $T);
-{
- start:
- assume f(kb(o), kb(o)) == u;
- assert e > 20; // this should now trigger the isB axiom, so anything is provable
- return;
-}
-
-procedure X2(o: ref, e: int, u: int)
- requires isB(o, $T);
-{
- start:
- assert e > 20; // error is report here, providing evidence that the isB axiom has not been triggered
- return;
-}
-
-type name, ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// ----------------------------------------------------------------------- single trigger
+
+function f(int, int) returns (int);
+
+axiom (forall x: int, y: int :: f(x,y) < x+y);
+axiom (forall x: int :: { f(x,10) } f(x,10) == 3);
+
+procedure P(a: int, b: int)
+ requires a <= 25 && b <= 30;
+{
+ start:
+ assert f(a,b) <= 100;
+ return;
+}
+
+procedure Q(a: int, b: int)
+ requires a + 2 <= b;
+{
+ start:
+ assert f(a,b) == 3; // not provable with the trigger given above
+ return;
+}
+
+procedure R(a: int, b: int)
+ requires a + 2 <= b;
+{
+ start:
+ assume b <= 10 && 8 <= a;
+ assert f(a,b) == 3; // now, the trigger should fire
+ return;
+}
+
+// ----------------------------------------------------------------------- multi trigger
+
+function g(int, int) returns (int);
+
+axiom (forall x: int, y: int :: { g(x,10),g(x,y) } g(x,y) == 3); // multi-trigger
+
+procedure S(a: int, b: int)
+ requires a + 2 <= b;
+{
+ start:
+ assert g(a,b) == 3; // not provable with the trigger given above
+ return;
+}
+
+procedure T(a: int, b: int)
+ requires a + 2 <= b;
+{
+ start:
+ assume b <= 10 && 8 <= a;
+ assert g(a,b) == 3; // this should trigger
+ return;
+}
+
+// ----------------------------------------------------------------------- several triggers
+
+function h(int, int) returns (int);
+
+axiom (forall y: int :: { g(y,y) } { h(y,h(y,10)) } h(y, h(y,y)) == y); // several triggers
+
+procedure U0(a: int)
+{
+ start:
+ assert h(a,h(a,a)) == a; // not provable with the triggers given above
+ return;
+}
+
+procedure U1(a: int, b: int)
+{
+ start:
+ assume g(a,b) == 5;
+ assert h(a,h(a,a)) == a; // not provable with the triggers given above
+ return;
+}
+
+procedure V0(a: int, b: int)
+ requires a == b;
+{
+ start:
+ assume g(a,b) == 5;
+ assert h(a,h(a,a)) == a; // this should trigger
+ return;
+}
+
+procedure V1(a: int, b: int)
+{
+ start:
+ assume a == 10;
+ assert h(a,h(a,a)) == a; // this should trigger
+ return;
+}
+
+procedure V2(a: int, b: int)
+{
+ start:
+ assume 0 <= h(a,h(a,10));
+ assume a == 17;
+ assert h(a,h(a,a)) == a; // this should trigger
+ return;
+}
+
+// ----------------------------------------------------------------------- negated triggers
+
+function ka(ref) returns (int);
+function kb(ref) returns (int);
+function kbSynonym(ref) returns (int);
+function isA(ref, name) returns (bool);
+function isB(ref, name) returns (bool);
+const $T: name;
+
+axiom (forall o: ref ::
+ isA(o, $T) ==> ka(o) < ka(o)); // automatically inferred triggers can be both isA(o,$T) and ka(o)
+
+axiom (forall o: ref ::
+ {:nopats isB(o, $T) }
+ isB(o, $T) ==> kb(o) < kbSynonym(o)); // prevent isB(o,$T) from being used as a trigger
+
+axiom (forall o: ref :: kb(o) == kbSynonym(o));
+
+procedure W(o: ref, e: int)
+ requires isB(o, $T);
+{
+ start:
+ assert e > 20; // the isB axiom should not trigger, so this cannot be proved
+ return;
+}
+
+procedure X0(o: ref, e: int)
+ requires isA(o, $T);
+{
+ start:
+ assert e > 20; // this should trigger the isA axiom, so anything is provable
+ return;
+}
+
+procedure X1(o: ref, e: int, u: int)
+ requires isB(o, $T);
+{
+ start:
+ assume f(kb(o), kb(o)) == u;
+ assert e > 20; // this should now trigger the isB axiom, so anything is provable
+ return;
+}
+
+procedure X2(o: ref, e: int, u: int)
+ requires isB(o, $T);
+{
+ start:
+ assert e > 20; // error is report here, providing evidence that the isB axiom has not been triggered
+ return;
+}
+
+type name, ref;
diff --git a/Test/test2/SelectiveChecking.bpl b/Test/test2/SelectiveChecking.bpl
index 188243c8..1c505abb 100644
--- a/Test/test2/SelectiveChecking.bpl
+++ b/Test/test2/SelectiveChecking.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
procedure {:selective_checking} foo()
{
var x, y, z : int;
diff --git a/Test/test2/Structured.bpl b/Test/test2/Structured.bpl
index 55ee847a..a5aebaa9 100644
--- a/Test/test2/Structured.bpl
+++ b/Test/test2/Structured.bpl
@@ -1,346 +1,346 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-const K: int;
-
-function f(int) returns (int);
-
-axiom (exists k: int :: f(k) == K);
-
-procedure Find(a: int, b: int) returns (k: int);
- requires a <= b && (forall j: int :: a < j && j < b ==> f(j) != K);
- ensures f(k) == K;
-
-// nondeterministic, unstructured, recursive version
-implementation Find(a: int, b: int) returns (k: int)
-{
- entry:
- goto A, B, C;
-
- A:
- assume f(a) == K;
- k := a;
- return;
-
- B:
- assume f(b) == K;
- k := b;
- return;
-
- C:
- assume f(a) != K && f(b) != K;
- call k := Find(a-1, b+1);
- return;
-}
-
-// nondeterministic, recursive version
-implementation Find(a: int, b: int) returns (k: int)
-{
- if (*) {
- assume f(a) == K;
- k := a;
- } else if (*) {
- assume f(b) == K;
- k := b;
- } else {
- assume f(a) != K && f(b) != K;
- call k := Find(a-1, b+1);
- }
-}
-
-// deterministic, structured, recursive version
-implementation Find(a: int, b: int) returns (k: int)
-{
- if (f(a) == K) {
- k := a;
- } else if (f(b) == K) {
- k := b;
- } else {
- call k := Find(a-1, b+1);
- }
-}
-
-// deterministic, structured, iterative version
-implementation Find(a: int, b: int) returns (k: int)
-{
- var x: int, y: int;
-
- x := a;
- y := b;
-
- while (f(x) != K && f(y) != K)
- invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
- {
- x := x-1;
- y := y+1;
- }
-
- if (f(x) == K) {
- k := x;
- } else {
- k := y;
- }
-}
-
-// deterministic, structured, iterative version with breaks
-implementation Find(a: int, b: int) returns (k: int)
-{
- var x: int, y: int;
-
- x := a;
- y := b;
-
- while (true)
- invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
- {
- if (f(x) == K) {
- k := x;
- break;
- } else if (f(y) == K) {
- k := y;
- break;
- }
- x := x-1;
- y := y+1;
- }
-}
-
-// deterministic, somewhat structured, iterative version
-implementation Find(a: int, b: int) returns (k: int)
-{
- var x: int, y: int;
-
- x := a;
- y := b;
-
- while (true)
- invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
- {
- if (f(x) == K) {
- goto FoundX;
- } else if (f(y) == K) {
- goto FoundY;
- }
- x := x-1;
- y := y+1;
- }
-
- FoundX:
- k := x;
- return;
-
- FoundY:
- k := y;
- return;
-}
-
-// deterministic, structured, iterative version with breaks
-implementation Find(a: int, b: int) returns (k: int)
-{
- var x: int, y: int;
-
- x := a;
- y := b;
-
- outer:
- if (true) {
- inner:
- while (true)
- invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
- {
- if (f(x) == K) {
- break inner;
- } else if (f(y) == K) {
- break outer;
- }
- x := x-1;
- y := y+1;
- }
-
- k := x;
- return;
- }
- k := y;
-}
-
-// ----- free invariant -----
-
-function Teal(int) returns (bool);
-function ShadeOfGreen(int) returns (bool);
-axiom (forall w: int :: Teal(w) ==> ShadeOfGreen(w));
-
-procedure P(x: int) returns (y: int)
- requires Teal(x);
- ensures ShadeOfGreen(y);
-{
- y := x;
- while (y < 100)
- free invariant Teal(y);
- {
- y := y + 5;
- }
-}
-
-// ----- run off the end of the BigBlock -----
-
-procedure RunOffEnd0() returns (x: int)
- ensures x == 3;
-{
- x := 0;
- Label0:
- x := x + 1;
- Label1:
- x := x + 1;
- Label2:
- Label3:
- Label4:
- x := x + 1;
-}
-
-procedure RunOffEnd1() returns (x: int)
- ensures x == 4;
-{
- x := 0;
- Label0:
- x := x + 1;
- Label1:
- if (*) {
- Label2:
- x := x + 2;
- } else if (*) {
- Label3:
- x := 2;
- x := x + 2;
- Label4:
- Label5:
- x := x - 1;
- } else {
- if (*) {
- x := 0;
- while (x < 3)
- invariant x <= 3;
- { x := x + 1; }
- } else {
- x := x + 2;
- }
- }
- x := x + 1;
-}
-
-procedure RunOffEnd2() returns (x: int)
- ensures x == 10;
-{
- while (true) {
- while (true) {
- if (*) {
- x := 10;
- break;
- }
- }
- if (*) { break; }
- }
-}
-
-procedure RunOffEnd3() returns (x: int)
- ensures x == 9;
-{ x := 9;
- while (true) {
- while (true) {
- if (*) {
- x := 10;
- break;
- }
- }
- if (*) { break; }
- } // error: violated postcondition
-}
-
-procedure RunOffEnd4() returns (x: int)
-{
- var y: int;
- var bad: bool;
-
- while (true) {
- y := x;
- bad := false;
- if (*) {
- x := x + 1;
- bad := true;
- }
- if (x == y) { break; }
- }
- assert !bad;
-}
-
-procedure RunOffEnd5() returns (x: int)
-{
- while (true) {
- if (x == 5) { }
- }
- assert false;
-}
-
-procedure RunOffEnd6() returns (x: int)
-{
- x := 7;
- while (true)
- invariant x == 7;
- {
- x := 5;
- MyLabel:
- x := 7;
- }
-}
-
-// ----- jump optimizations -----
-
-procedure Q0()
-{
- var x: int;
-
- x := 0;
- if (*) {
- x := 1;
- }
- assert x == 1; // error
-}
-
-procedure Q1() returns (x: int)
-{
- if (x == 0) {
- A:
- x := x + 0;
- assert x == 0; // error
- B:
- x := x + 1;
- goto A;
- }
-}
-
-procedure Q2() returns (x: int)
-{
- if (x == 0) {
- while (x < 10)
- invariant x <= 10;
- {
- x := x + 1;
- }
- }
-}
-
-// There was once a bug in Boogie's handling of the following break statement.
-procedure BreakIssue(x: int) returns (curr: int)
- ensures x == 18 || curr == 100; // holds, because the procedure doesn't
- // actually ever terminate if x != 18
-{
- while (x != 18) {
- while (x != 19) {
- call curr := Read();
- if (curr == 0) {
- break;
- }
- }
- }
-}
-
-procedure Read() returns (val: int);
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+const K: int;
+
+function f(int) returns (int);
+
+axiom (exists k: int :: f(k) == K);
+
+procedure Find(a: int, b: int) returns (k: int);
+ requires a <= b && (forall j: int :: a < j && j < b ==> f(j) != K);
+ ensures f(k) == K;
+
+// nondeterministic, unstructured, recursive version
+implementation Find(a: int, b: int) returns (k: int)
+{
+ entry:
+ goto A, B, C;
+
+ A:
+ assume f(a) == K;
+ k := a;
+ return;
+
+ B:
+ assume f(b) == K;
+ k := b;
+ return;
+
+ C:
+ assume f(a) != K && f(b) != K;
+ call k := Find(a-1, b+1);
+ return;
+}
+
+// nondeterministic, recursive version
+implementation Find(a: int, b: int) returns (k: int)
+{
+ if (*) {
+ assume f(a) == K;
+ k := a;
+ } else if (*) {
+ assume f(b) == K;
+ k := b;
+ } else {
+ assume f(a) != K && f(b) != K;
+ call k := Find(a-1, b+1);
+ }
+}
+
+// deterministic, structured, recursive version
+implementation Find(a: int, b: int) returns (k: int)
+{
+ if (f(a) == K) {
+ k := a;
+ } else if (f(b) == K) {
+ k := b;
+ } else {
+ call k := Find(a-1, b+1);
+ }
+}
+
+// deterministic, structured, iterative version
+implementation Find(a: int, b: int) returns (k: int)
+{
+ var x: int, y: int;
+
+ x := a;
+ y := b;
+
+ while (f(x) != K && f(y) != K)
+ invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
+ {
+ x := x-1;
+ y := y+1;
+ }
+
+ if (f(x) == K) {
+ k := x;
+ } else {
+ k := y;
+ }
+}
+
+// deterministic, structured, iterative version with breaks
+implementation Find(a: int, b: int) returns (k: int)
+{
+ var x: int, y: int;
+
+ x := a;
+ y := b;
+
+ while (true)
+ invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
+ {
+ if (f(x) == K) {
+ k := x;
+ break;
+ } else if (f(y) == K) {
+ k := y;
+ break;
+ }
+ x := x-1;
+ y := y+1;
+ }
+}
+
+// deterministic, somewhat structured, iterative version
+implementation Find(a: int, b: int) returns (k: int)
+{
+ var x: int, y: int;
+
+ x := a;
+ y := b;
+
+ while (true)
+ invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
+ {
+ if (f(x) == K) {
+ goto FoundX;
+ } else if (f(y) == K) {
+ goto FoundY;
+ }
+ x := x-1;
+ y := y+1;
+ }
+
+ FoundX:
+ k := x;
+ return;
+
+ FoundY:
+ k := y;
+ return;
+}
+
+// deterministic, structured, iterative version with breaks
+implementation Find(a: int, b: int) returns (k: int)
+{
+ var x: int, y: int;
+
+ x := a;
+ y := b;
+
+ outer:
+ if (true) {
+ inner:
+ while (true)
+ invariant x <= y && (forall j: int :: x < j && j < y ==> f(j) != K);
+ {
+ if (f(x) == K) {
+ break inner;
+ } else if (f(y) == K) {
+ break outer;
+ }
+ x := x-1;
+ y := y+1;
+ }
+
+ k := x;
+ return;
+ }
+ k := y;
+}
+
+// ----- free invariant -----
+
+function Teal(int) returns (bool);
+function ShadeOfGreen(int) returns (bool);
+axiom (forall w: int :: Teal(w) ==> ShadeOfGreen(w));
+
+procedure P(x: int) returns (y: int)
+ requires Teal(x);
+ ensures ShadeOfGreen(y);
+{
+ y := x;
+ while (y < 100)
+ free invariant Teal(y);
+ {
+ y := y + 5;
+ }
+}
+
+// ----- run off the end of the BigBlock -----
+
+procedure RunOffEnd0() returns (x: int)
+ ensures x == 3;
+{
+ x := 0;
+ Label0:
+ x := x + 1;
+ Label1:
+ x := x + 1;
+ Label2:
+ Label3:
+ Label4:
+ x := x + 1;
+}
+
+procedure RunOffEnd1() returns (x: int)
+ ensures x == 4;
+{
+ x := 0;
+ Label0:
+ x := x + 1;
+ Label1:
+ if (*) {
+ Label2:
+ x := x + 2;
+ } else if (*) {
+ Label3:
+ x := 2;
+ x := x + 2;
+ Label4:
+ Label5:
+ x := x - 1;
+ } else {
+ if (*) {
+ x := 0;
+ while (x < 3)
+ invariant x <= 3;
+ { x := x + 1; }
+ } else {
+ x := x + 2;
+ }
+ }
+ x := x + 1;
+}
+
+procedure RunOffEnd2() returns (x: int)
+ ensures x == 10;
+{
+ while (true) {
+ while (true) {
+ if (*) {
+ x := 10;
+ break;
+ }
+ }
+ if (*) { break; }
+ }
+}
+
+procedure RunOffEnd3() returns (x: int)
+ ensures x == 9;
+{ x := 9;
+ while (true) {
+ while (true) {
+ if (*) {
+ x := 10;
+ break;
+ }
+ }
+ if (*) { break; }
+ } // error: violated postcondition
+}
+
+procedure RunOffEnd4() returns (x: int)
+{
+ var y: int;
+ var bad: bool;
+
+ while (true) {
+ y := x;
+ bad := false;
+ if (*) {
+ x := x + 1;
+ bad := true;
+ }
+ if (x == y) { break; }
+ }
+ assert !bad;
+}
+
+procedure RunOffEnd5() returns (x: int)
+{
+ while (true) {
+ if (x == 5) { }
+ }
+ assert false;
+}
+
+procedure RunOffEnd6() returns (x: int)
+{
+ x := 7;
+ while (true)
+ invariant x == 7;
+ {
+ x := 5;
+ MyLabel:
+ x := 7;
+ }
+}
+
+// ----- jump optimizations -----
+
+procedure Q0()
+{
+ var x: int;
+
+ x := 0;
+ if (*) {
+ x := 1;
+ }
+ assert x == 1; // error
+}
+
+procedure Q1() returns (x: int)
+{
+ if (x == 0) {
+ A:
+ x := x + 0;
+ assert x == 0; // error
+ B:
+ x := x + 1;
+ goto A;
+ }
+}
+
+procedure Q2() returns (x: int)
+{
+ if (x == 0) {
+ while (x < 10)
+ invariant x <= 10;
+ {
+ x := x + 1;
+ }
+ }
+}
+
+// There was once a bug in Boogie's handling of the following break statement.
+procedure BreakIssue(x: int) returns (curr: int)
+ ensures x == 18 || curr == 100; // holds, because the procedure doesn't
+ // actually ever terminate if x != 18
+{
+ while (x != 18) {
+ while (x != 19) {
+ call curr := Read();
+ if (curr == 0) {
+ break;
+ }
+ }
+ }
+}
+
+procedure Read() returns (val: int);
diff --git a/Test/test2/Timeouts0.bpl b/Test/test2/Timeouts0.bpl
index 6fa379d9..ee2ad566 100644
--- a/Test/test2/Timeouts0.bpl
+++ b/Test/test2/Timeouts0.bpl
@@ -1,85 +1,85 @@
-// RUN: %boogie -timeLimit:4 "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure TestTimeouts0(in: [int]int, len: int) returns (out: [int]int)
- requires in[0] == 0 && (forall i: int :: 0 <= i ==> in[i + 1] == in[i] + 1);
- requires 0 < len;
- ensures (forall j: int :: 0 <= j && j < len ==> out[j] == j);
-{
- var i : int;
-
- i := 0;
- out[i] := 0;
- while (i < len)
- invariant 0 <= i && i <= len;
- invariant out[0] == 0 && (forall j: int :: 0 <= j && j < i ==> out[j + 1] == out[j] + 1);
- {
- out[i + 1] := out[i] + 1;
- i := i + 1;
- }
-
- i := 0;
- while (i < len)
- invariant 0 <= i && i <= len;
- invariant (forall j: int :: 0 <= j && j < i ==> out[j] == in[j]);
- {
- i := i + 1;
- }
-}
-
-
-procedure TestTimeouts1(in: [int]int, len: int) returns (out: [int]int);
- requires in[0] == 0 && (forall i: int :: 0 <= i ==> in[i + 1] == in[i] + 1);
- requires 0 < len;
- ensures (forall j: int :: 0 <= j && j < len ==> out[j] == j);
-
-implementation {:timeLimit 8} TestTimeouts1(in: [int]int, len: int) returns (out: [int]int)
-{
- var i : int;
-
- i := 0;
- out[i] := 0;
- while (i < len)
- invariant 0 <= i && i <= len;
- invariant out[0] == 0 && (forall j: int :: 0 <= j && j < i ==> out[j + 1] == out[j] + 1);
- {
- out[i + 1] := out[i] + 1;
- i := i + 1;
- }
-
- i := 0;
- while (i < len)
- invariant 0 <= i && i <= len;
- invariant (forall j: int :: 0 <= j && j < i ==> out[j] == in[j]);
- {
- i := i + 1;
- }
-}
-
-
-procedure TestTimeouts2(in: [int]int, len: int) returns (out: [int]int);
- requires in[0] == 0 && (forall i: int :: 0 <= i ==> in[i + 1] == in[i] + 1);
- requires 0 < len;
- ensures (forall j: int :: 0 <= j && j < len ==> out[j] == j);
-
-implementation {:timeLimit 2} TestTimeouts2(in: [int]int, len: int) returns (out: [int]int)
-{
- var i : int;
-
- i := 0;
- out[i] := 0;
- while (i < len)
- invariant 0 <= i && i <= len;
- invariant out[0] == 0 && (forall j: int :: 0 <= j && j < i ==> out[j + 1] == out[j] + 1);
- {
- out[i + 1] := out[i] + 1;
- i := i + 1;
- }
-
- i := 0;
- while (i < len)
- invariant 0 <= i && i <= len;
- invariant (forall j: int :: 0 <= j && j < i ==> out[j] == in[j]);
- {
- i := i + 1;
- }
-}
+// RUN: %boogie -timeLimit:4 "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure TestTimeouts0(in: [int]int, len: int) returns (out: [int]int)
+ requires in[0] == 0 && (forall i: int :: 0 <= i ==> in[i + 1] == in[i] + 1);
+ requires 0 < len;
+ ensures (forall j: int :: 0 <= j && j < len ==> out[j] == j);
+{
+ var i : int;
+
+ i := 0;
+ out[i] := 0;
+ while (i < len)
+ invariant 0 <= i && i <= len;
+ invariant out[0] == 0 && (forall j: int :: 0 <= j && j < i ==> out[j + 1] == out[j] + 1);
+ {
+ out[i + 1] := out[i] + 1;
+ i := i + 1;
+ }
+
+ i := 0;
+ while (i < len)
+ invariant 0 <= i && i <= len;
+ invariant (forall j: int :: 0 <= j && j < i ==> out[j] == in[j]);
+ {
+ i := i + 1;
+ }
+}
+
+
+procedure TestTimeouts1(in: [int]int, len: int) returns (out: [int]int);
+ requires in[0] == 0 && (forall i: int :: 0 <= i ==> in[i + 1] == in[i] + 1);
+ requires 0 < len;
+ ensures (forall j: int :: 0 <= j && j < len ==> out[j] == j);
+
+implementation {:timeLimit 8} TestTimeouts1(in: [int]int, len: int) returns (out: [int]int)
+{
+ var i : int;
+
+ i := 0;
+ out[i] := 0;
+ while (i < len)
+ invariant 0 <= i && i <= len;
+ invariant out[0] == 0 && (forall j: int :: 0 <= j && j < i ==> out[j + 1] == out[j] + 1);
+ {
+ out[i + 1] := out[i] + 1;
+ i := i + 1;
+ }
+
+ i := 0;
+ while (i < len)
+ invariant 0 <= i && i <= len;
+ invariant (forall j: int :: 0 <= j && j < i ==> out[j] == in[j]);
+ {
+ i := i + 1;
+ }
+}
+
+
+procedure TestTimeouts2(in: [int]int, len: int) returns (out: [int]int);
+ requires in[0] == 0 && (forall i: int :: 0 <= i ==> in[i + 1] == in[i] + 1);
+ requires 0 < len;
+ ensures (forall j: int :: 0 <= j && j < len ==> out[j] == j);
+
+implementation {:timeLimit 2} TestTimeouts2(in: [int]int, len: int) returns (out: [int]int)
+{
+ var i : int;
+
+ i := 0;
+ out[i] := 0;
+ while (i < len)
+ invariant 0 <= i && i <= len;
+ invariant out[0] == 0 && (forall j: int :: 0 <= j && j < i ==> out[j + 1] == out[j] + 1);
+ {
+ out[i + 1] := out[i] + 1;
+ i := i + 1;
+ }
+
+ i := 0;
+ while (i < len)
+ invariant 0 <= i && i <= len;
+ invariant (forall j: int :: 0 <= j && j < i ==> out[j] == in[j]);
+ {
+ i := i + 1;
+ }
+}
diff --git a/Test/test2/TypeEncodingM.bpl b/Test/test2/TypeEncodingM.bpl
index 0287da12..40e60cf5 100644
--- a/Test/test2/TypeEncodingM.bpl
+++ b/Test/test2/TypeEncodingM.bpl
@@ -1,5 +1,5 @@
-// RUN: %boogie -noinfer -typeEncoding:m "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noinfer -typeEncoding:m "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
type TT;
procedure A()
diff --git a/Test/test2/UpdateExpr.bpl b/Test/test2/UpdateExpr.bpl
index eb5ba2e1..fb858a44 100644
--- a/Test/test2/UpdateExpr.bpl
+++ b/Test/test2/UpdateExpr.bpl
@@ -1,83 +1,83 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-const a: [int]bool;
-
-// element 5 of a stores the value true
-axiom a == a[5 := true];
-
-procedure P()
-{
- assert a[5];
-}
-
-procedure Q()
-{
- assert a[4]; // error
-}
-
-procedure R()
-{
- assert !a[5]; // error
-}
-
-procedure S(y: int, t: bool)
- requires y <= 5;
-{
- if (a[y := t][5] == false) {
- assert y == 5;
- }
-}
-
-procedure T0(aa: [int,ref]bool)
-{
- assert aa[5,null := true] != aa[2,null := false]; // error
-}
-
-procedure T1(aa: [int,ref]bool)
- requires aa[5,null] && !aa[2,null];
-{
- assert aa[5,null := true] == aa[2,null := false]; // error, because we have no extensionality
-}
-
-procedure T2(aa: [int,ref]bool)
- requires aa[5,null] && !aa[2,null];
-{
- assert (forall x: int, y: ref :: aa[5,null := true][x,y] == aa[2,null := false][x,y]);
-}
-
-procedure U0(a: [int]int)
-{
- var b: [int]int;
-
- b := a[5 := 12];
- assert a == b; // error
-}
-
-procedure U1() returns (a: [int]int)
-{
- var b: [int]int;
-
- b := a[5 := 12];
- a[5] := 12;
- assert a == b;
-}
-
-type Field a;
-const unique IntField: Field int;
-const unique RefField: Field ref;
-const unique SomeField: Field int;
-
-procedure FieldProc(H: <a>[ref,Field a]a, this: ref)
-{
- var i: int, r: ref, y: any;
- var K: <a>[ref,Field a]a;
-
- K := H[this, IntField := 5][this, RefField := null][this, SomeField := 100][this, IntField := 7];
- assert K[this, IntField] == 7;
- assert K[this, RefField] == null;
- assert K[this, SomeField] == 100;
-}
-
-type ref, any;
-const null : ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+const a: [int]bool;
+
+// element 5 of a stores the value true
+axiom a == a[5 := true];
+
+procedure P()
+{
+ assert a[5];
+}
+
+procedure Q()
+{
+ assert a[4]; // error
+}
+
+procedure R()
+{
+ assert !a[5]; // error
+}
+
+procedure S(y: int, t: bool)
+ requires y <= 5;
+{
+ if (a[y := t][5] == false) {
+ assert y == 5;
+ }
+}
+
+procedure T0(aa: [int,ref]bool)
+{
+ assert aa[5,null := true] != aa[2,null := false]; // error
+}
+
+procedure T1(aa: [int,ref]bool)
+ requires aa[5,null] && !aa[2,null];
+{
+ assert aa[5,null := true] == aa[2,null := false]; // error, because we have no extensionality
+}
+
+procedure T2(aa: [int,ref]bool)
+ requires aa[5,null] && !aa[2,null];
+{
+ assert (forall x: int, y: ref :: aa[5,null := true][x,y] == aa[2,null := false][x,y]);
+}
+
+procedure U0(a: [int]int)
+{
+ var b: [int]int;
+
+ b := a[5 := 12];
+ assert a == b; // error
+}
+
+procedure U1() returns (a: [int]int)
+{
+ var b: [int]int;
+
+ b := a[5 := 12];
+ a[5] := 12;
+ assert a == b;
+}
+
+type Field a;
+const unique IntField: Field int;
+const unique RefField: Field ref;
+const unique SomeField: Field int;
+
+procedure FieldProc(H: <a>[ref,Field a]a, this: ref)
+{
+ var i: int, r: ref, y: any;
+ var K: <a>[ref,Field a]a;
+
+ K := H[this, IntField := 5][this, RefField := null][this, SomeField := 100][this, IntField := 7];
+ assert K[this, IntField] == 7;
+ assert K[this, RefField] == null;
+ assert K[this, SomeField] == 100;
+}
+
+type ref, any;
+const null : ref;
diff --git a/Test/test2/Where.bpl b/Test/test2/Where.bpl
index fed05d76..762da163 100644
--- a/Test/test2/Where.bpl
+++ b/Test/test2/Where.bpl
@@ -1,165 +1,165 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P0()
-{
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- assert 0 <= x;
- assert x <= y;
- assert y < 5; // error
-}
-
-procedure P1()
-{
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- x := 5;
- havoc y;
- assert 5 <= y;
-
- havoc x;
- assert 0 <= x;
- assert x <= y; // error
-}
-
-procedure P2()
-{
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- havoc y; // y first
- havoc x;
- assert x <= y; // error
-}
-
-procedure P3()
-{
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- x := 5;
- havoc x; // this time, x first
- havoc y;
- assert x <= y; // yeah!
- assert 5 <= y; // error
-}
-
-procedure P4()
-{
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- havoc x, y; // both at the same time
- assert 0 <= x && x <= y;
- havoc y, x; // or in the other order
- assert 0 <= x && x <= y;
-
- assert x == 7; // error
-}
-
-procedure R0() returns (wProc: int where wProc == xProc,
- xProc: int where 0 <= xProc,
- yProc: int where xProc <= yProc);
-implementation R0() returns (w: int, x: int, y: int)
-{
- while (*) {
- assert w == x;
- assert 0 <= x;
- assert x <= y;
- }
- while (*) {
- assert w == x;
- assert 0 <= x;
- assert x <= y;
- // the following makes w, x, y loop targets
- w := w + 1;
- havoc x;
- y := w;
- }
- assert w == x;
- assert 0 <= x;
- assert x <= y;
-}
-
-procedure R1()
-{
- var a: int;
- var b: int;
- var c: int;
-
- call a, b, c := R0();
- assert a == b;
- assert 0 <= b;
- assert b <= c;
-}
-
-procedure R2()
-{
- var w: int where w == x;
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- x := 5;
- y := 10;
- while (*) {
- w := w + 1;
- assert w == 6;
- y := y + 2;
- assert 7 <= y;
- }
- assert x == 5 && 0 <= y - w;
- assert y == 10; // error
-}
-
-procedure R3()
-{
- var w: int where w == x;
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- // change w and x
- y := 10;
- while (*) {
- w := w; x := x;
- }
- assert w == x;
- assert 0 <= x;
- assert y == 10;
- assert w <= 10; // error
-}
-
-procedure R4()
-{
- var w: int where w == x;
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- // change x and y
- w := 12;
- while (*) {
- x := x; y := y;
- }
- assert 0 <= x;
- assert x <= y;
- assert w == 12;
- assert 8 <= y; // error
-}
-
-procedure R5(K: int)
-{
- var w: int where w == x;
- var x: int where 0 <= x;
- var y: int where x <= y;
-
- // change w and y
- x := K;
- while (*) {
- w := w; y := y;
- }
- assert w == K;
- assert K <= y;
- assert x == K;
- assert 0 <= x; // error
-}
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P0()
+{
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ assert 0 <= x;
+ assert x <= y;
+ assert y < 5; // error
+}
+
+procedure P1()
+{
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ x := 5;
+ havoc y;
+ assert 5 <= y;
+
+ havoc x;
+ assert 0 <= x;
+ assert x <= y; // error
+}
+
+procedure P2()
+{
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ havoc y; // y first
+ havoc x;
+ assert x <= y; // error
+}
+
+procedure P3()
+{
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ x := 5;
+ havoc x; // this time, x first
+ havoc y;
+ assert x <= y; // yeah!
+ assert 5 <= y; // error
+}
+
+procedure P4()
+{
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ havoc x, y; // both at the same time
+ assert 0 <= x && x <= y;
+ havoc y, x; // or in the other order
+ assert 0 <= x && x <= y;
+
+ assert x == 7; // error
+}
+
+procedure R0() returns (wProc: int where wProc == xProc,
+ xProc: int where 0 <= xProc,
+ yProc: int where xProc <= yProc);
+implementation R0() returns (w: int, x: int, y: int)
+{
+ while (*) {
+ assert w == x;
+ assert 0 <= x;
+ assert x <= y;
+ }
+ while (*) {
+ assert w == x;
+ assert 0 <= x;
+ assert x <= y;
+ // the following makes w, x, y loop targets
+ w := w + 1;
+ havoc x;
+ y := w;
+ }
+ assert w == x;
+ assert 0 <= x;
+ assert x <= y;
+}
+
+procedure R1()
+{
+ var a: int;
+ var b: int;
+ var c: int;
+
+ call a, b, c := R0();
+ assert a == b;
+ assert 0 <= b;
+ assert b <= c;
+}
+
+procedure R2()
+{
+ var w: int where w == x;
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ x := 5;
+ y := 10;
+ while (*) {
+ w := w + 1;
+ assert w == 6;
+ y := y + 2;
+ assert 7 <= y;
+ }
+ assert x == 5 && 0 <= y - w;
+ assert y == 10; // error
+}
+
+procedure R3()
+{
+ var w: int where w == x;
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ // change w and x
+ y := 10;
+ while (*) {
+ w := w; x := x;
+ }
+ assert w == x;
+ assert 0 <= x;
+ assert y == 10;
+ assert w <= 10; // error
+}
+
+procedure R4()
+{
+ var w: int where w == x;
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ // change x and y
+ w := 12;
+ while (*) {
+ x := x; y := y;
+ }
+ assert 0 <= x;
+ assert x <= y;
+ assert w == 12;
+ assert 8 <= y; // error
+}
+
+procedure R5(K: int)
+{
+ var w: int where w == x;
+ var x: int where 0 <= x;
+ var y: int where x <= y;
+
+ // change w and y
+ x := K;
+ while (*) {
+ w := w; y := y;
+ }
+ assert w == K;
+ assert K <= y;
+ assert x == K;
+ assert 0 <= x; // error
+}
diff --git a/Test/test2/sk_hack.bpl b/Test/test2/sk_hack.bpl
index 7ce8e4dc..163bbc26 100644
--- a/Test/test2/sk_hack.bpl
+++ b/Test/test2/sk_hack.bpl
@@ -1,34 +1,34 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function in_set(int) returns(bool);
-function next(int) returns(int);
-function f(int) returns(bool);
-function g(int) returns(bool);
-
-// this function is treated specially by Z3 when used in triggers
-// sk_hack(f(x)) means to activate the e-node f(x0) when trying to prove
-// !(forall x : T :: {sk_hack(f(x))} p(x)) by proving !p(x0)
-// (i.e., after skolemization of x to x0).
-function sk_hack(bool) returns(bool);
-
-// PR: sk_hack cannot be defined as a polymorphic function
-// when using /quantifierTypePremisses:a, because then it would
-// get an additional explicit type parameter, and Z3 would
-// no longer recognise it.
-
-procedure foo()
-{
- assume (forall x:int :: {in_set(next(x))}
- in_set(x) ==> in_set(next(x)));
-
- assume (forall x:int :: {in_set(x)}
- in_set(x) ==> f(x));
-
- assume (forall x:int :: {f(next(x))}
- f(next(x)) ==> g(x));
-
- assert (forall x:int ::
- { sk_hack(in_set(next(x))) }
- in_set(x) ==> g(x));
- }
-
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function in_set(int) returns(bool);
+function next(int) returns(int);
+function f(int) returns(bool);
+function g(int) returns(bool);
+
+// this function is treated specially by Z3 when used in triggers
+// sk_hack(f(x)) means to activate the e-node f(x0) when trying to prove
+// !(forall x : T :: {sk_hack(f(x))} p(x)) by proving !p(x0)
+// (i.e., after skolemization of x to x0).
+function sk_hack(bool) returns(bool);
+
+// PR: sk_hack cannot be defined as a polymorphic function
+// when using /quantifierTypePremisses:a, because then it would
+// get an additional explicit type parameter, and Z3 would
+// no longer recognise it.
+
+procedure foo()
+{
+ assume (forall x:int :: {in_set(next(x))}
+ in_set(x) ==> in_set(next(x)));
+
+ assume (forall x:int :: {in_set(x)}
+ in_set(x) ==> f(x));
+
+ assume (forall x:int :: {f(next(x))}
+ f(next(x)) ==> g(x));
+
+ assert (forall x:int ::
+ { sk_hack(in_set(next(x))) }
+ in_set(x) ==> g(x));
+ }
+
diff --git a/Test/test2/strings-no-where.bpl b/Test/test2/strings-no-where.bpl
index 6a89a9b2..79dd2ddb 100644
--- a/Test/test2/strings-no-where.bpl
+++ b/Test/test2/strings-no-where.bpl
@@ -1,997 +1,997 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-type elements;
-
-type struct;
-
-var $Heap: [ref,name]any;
-function cast<S,T>(S) returns (T);
-function IsHeap(h: [ref,name]any) returns (bool);
-
-const unique $allocated: name;
-
-const unique $elements: name;
-
-const unique $inv: name;
-
-const unique $writable: name;
-
-const unique $sharingMode: name;
-
-const unique $SharingMode_Unshared: name;
-
-const unique $SharingMode_LockProtected: name;
-
-function ClassRepr(class: name) returns (ref);
-
-axiom (forall c0: name, c1: name :: c0 != c1 ==> ClassRepr(c0) != ClassRepr(c1));
-
-axiom (forall T: name :: !($typeof(ClassRepr(T)) <: System.Object));
-
-axiom (forall T: name :: ClassRepr(T) != null);
-
-axiom (forall T: name, h: [ref,name]any :: { h[ClassRepr(T), $writable] } IsHeap(h) ==> cast(h[ClassRepr(T), $writable]):bool);
-
-function IsDirectlyModifiableField(f: name) returns (bool);
-
-axiom !IsDirectlyModifiableField($allocated);
-
-axiom IsDirectlyModifiableField($elements);
-
-axiom !IsDirectlyModifiableField($inv);
-
-axiom !IsDirectlyModifiableField($writable);
-
-function IsStaticField(f: name) returns (bool);
-
-axiom !IsStaticField($allocated);
-
-axiom !IsStaticField($elements);
-
-axiom !IsStaticField($inv);
-
-axiom !IsStaticField($writable);
-
-function ValueArrayGet(elements, int) returns (any);
-
-function ValueArraySet(elements, int, any) returns (elements);
-
-function RefArrayGet(elements, int) returns (ref);
-
-function RefArraySet(elements, int, ref) returns (elements);
-
-axiom (forall A: elements, i: int, x: any :: ValueArrayGet(ValueArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: any :: i != j ==> ValueArrayGet(ValueArraySet(A, i, x), j) == ValueArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: ref :: RefArrayGet(RefArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> RefArrayGet(RefArraySet(A, i, x), j) == RefArrayGet(A, j));
-
-function ArrayIndex(arr: ref, dim: int, indexAtDim: int, remainingIndexContribution: int) returns (int);
-
-axiom (forall a: ref, d: int, x: int, y: int, x': int, y': int :: ArrayIndex(a, d, x, y) == ArrayIndex(a, d, x', y') ==> x == x' && y == y');
-
-axiom (forall a: ref, T: name, i: int, r: int, heap: [ref,name]any :: $typeof(a) <: RefArray(T, r) ==> $Is(RefArrayGet(cast(heap[a, $elements]):elements, i), T));
-
-function $Rank(ref) returns (int);
-
-axiom (forall a: ref :: 1 <= $Rank(a));
-
-axiom (forall a: ref, T: name, r: int :: { $Is(a, ValueArray(T, r)) } $Is(a, ValueArray(T, r)) ==> $Rank(a) == r);
-
-axiom (forall a: ref, T: name, r: int :: { $Is(a, RefArray(T, r)) } $Is(a, RefArray(T, r)) ==> $Rank(a) == r);
-
-function $Length(ref) returns (int);
-
-axiom (forall a: ref :: { $Length(a) } 0 <= $Length(a));
-
-function $DimLength(ref, int) returns (int);
-
-axiom (forall a: ref, i: int :: 0 <= $DimLength(a, i));
-
-axiom (forall a: ref :: $Rank(a) == 1 ==> $DimLength(a, 0) == $Length(a));
-
-function $LBound(ref, int) returns (int);
-
-function $UBound(ref, int) returns (int);
-
-axiom (forall a: ref, i: int :: { $LBound(a, i) } $LBound(a, i) == 0);
-
-axiom (forall a: ref, i: int :: { $UBound(a, i) } $UBound(a, i) == $DimLength(a, i) - 1);
-
-const unique System.Array: name;
-
-axiom $IsClass(System.Array);
-
-axiom System.Array <: System.Object;
-
-function $ElementType(name) returns (name);
-
-function ValueArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { ValueArray(T, r) } ValueArray(T, r) <: System.Array);
-
-function RefArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { RefArray(T, r) } RefArray(T, r) <: System.Array);
-
-axiom (forall T: name, U: name, r: int :: U <: T ==> RefArray(U, r) <: RefArray(T, r));
-
-axiom (forall A: name, r: int :: $ElementType(ValueArray(A, r)) == A);
-
-axiom (forall A: name, r: int :: $ElementType(RefArray(A, r)) == A);
-
-axiom (forall A: name, r: int, T: name :: { T <: RefArray(A, r) } T <: RefArray(A, r) ==> T == RefArray($ElementType(T), r) && $ElementType(T) <: A);
-
-axiom (forall A: name, r: int, T: name :: { T <: ValueArray(A, r) } T <: ValueArray(A, r) ==> T == ValueArray(A, r));
-
-axiom (forall A: name, r: int, T: name :: RefArray(A, r) <: T ==> System.Array <: T || (T == RefArray($ElementType(T), r) && A <: $ElementType(T)));
-
-axiom (forall A: name, r: int, T: name :: ValueArray(A, r) <: T ==> System.Array <: T || T == ValueArray(A, r));
-
-function $ArrayPtr(elementType: name) returns (name);
-
-function $StructGet(struct, name) returns (any);
-
-function $StructSet(struct, name, any) returns (struct);
-
-axiom (forall s: struct, f: name, x: any :: $StructGet($StructSet(s, f, x), f) == x);
-
-axiom (forall s: struct, f: name, f': name, x: any :: f != f' ==> $StructGet($StructSet(s, f, x), f') == $StructGet(s, f'));
-
-function ZeroInit(s: struct, typ: name) returns (bool);
-
-function $typeof(ref) returns (name);
-
-function Implements(class: name, interface: name) returns (bool);
-
-axiom (forall T: name, J: name :: { Implements(T, J) } Implements(T, J) ==> T <: J);
-
-function InterfaceExtends(subIntf: name, superIntf: name) returns (bool);
-
-axiom (forall J: name, K: name :: { InterfaceExtends(J, K) } InterfaceExtends(J, K) ==> J <: K);
-
-function $IsClass(name) returns (bool);
-
-axiom (forall C: name :: { $IsClass(C) } $IsClass(C) ==> C <: C);
-
-function AsDirectSubClass(sub: name, base: name) returns (sub': name);
-
-function OneClassDown(sub: name, base: name) returns (directSub: name);
-
-axiom (forall A: name, B: name, C: name :: { C <: AsDirectSubClass(B, A) } C <: AsDirectSubClass(B, A) ==> OneClassDown(C, A) == B);
-
-function $IsInterface(name) returns (bool);
-
-axiom (forall J: name :: { $IsInterface(J) } $IsInterface(J) ==> J <: System.Object);
-
-function $IsValueType(name) returns (bool);
-
-axiom (forall T: name :: $IsValueType(T) ==> (forall U: name :: T <: U ==> T == U) && (forall U: name :: U <: T ==> T == U));
-
-const unique System.Object: name;
-
-axiom $IsClass(System.Object);
-
-function $IsTokenForType(struct, name) returns (bool);
-
-function TypeObject(name) returns (ref);
-
-const unique System.Type: name;
-
-axiom System.Type <: System.Object;
-
-axiom (forall T: name :: { TypeObject(T) } $IsNotNull(TypeObject(T), System.Type));
-
-function $Is(ref, name) returns (bool);
-
-axiom (forall o: ref, T: name :: { $Is(o, T) } $Is(o, T) <==> o == null || $typeof(o) <: T);
-
-function $IsNotNull(ref, name) returns (bool);
-
-axiom (forall o: ref, T: name :: { $IsNotNull(o, T) } $IsNotNull(o, T) <==> o != null && $Is(o, T));
-
-function $As(ref, name) returns (ref);
-
-axiom (forall o: ref, T: name :: $Is(o, T) ==> $As(o, T) == o);
-
-axiom (forall o: ref, T: name :: !$Is(o, T) ==> $As(o, T) == null);
-
-axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, RefArray(A, r)) ==> heap[o, $inv] == $typeof(o));
-
-axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, ValueArray(A, r)) ==> heap[o, $inv] == $typeof(o));
-
-function IsAllocated(h: [ref,name]any, o: any) returns (bool);
-
-axiom (forall h: [ref,name]any, o: ref, f: name :: { IsAllocated(h, h[o, f]) } IsHeap(h) ==> IsAllocated(h, h[o, f]));
-
-axiom (forall h: [ref,name]any, s: struct, f: name :: { IsAllocated(h, $StructGet(s, f)) } IsAllocated(h, s) ==> IsAllocated(h, $StructGet(s, f)));
-
-axiom (forall h: [ref,name]any, e: elements, i: int :: { IsAllocated(h, RefArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, RefArrayGet(e, i)));
-
-axiom (forall h: [ref,name]any, o: ref :: { h[o, $allocated] } IsAllocated(h, o) ==> cast(h[o, $allocated]):bool);
-
-axiom (forall h: [ref,name]any, c: name :: { h[ClassRepr(c), $allocated] } IsHeap(h) ==> cast(h[ClassRepr(c), $allocated]):bool);
-
-function DeclType(field: name) returns (class: name);
-
-function AsNonNullRefField(field: name, T: name) returns (f: name);
-
-function AsRefField(field: name, T: name) returns (f: name);
-
-function AsRangeField(field: name, T: name) returns (f: name);
-
-axiom (forall f: name, T: name :: { AsNonNullRefField(f, T) } AsNonNullRefField(f, T) == f ==> AsRefField(f, T) == f);
-
-axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRefField(f, T)] } IsHeap(h) ==> $Is(cast(h[o, AsRefField(f, T)]):ref, T));
-
-axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsNonNullRefField(f, T)] } IsHeap(h) ==> cast(h[o, AsNonNullRefField(f, T)]):ref != null);
-
-axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRangeField(f, T)] } IsHeap(h) ==> InRange(cast(h[o, AsRangeField(f, T)]):int, T));
-
-const unique System.String: name;
-
-axiom (forall h: [ref,name]any, s: ref :: IsHeap(h) && $typeof(s) == System.String ==> h[s, $inv] == $typeof(s) && cast(h[s, $writable]):bool);
-
-function AsOwnedField(f: name) returns (name);
-
-axiom (forall h: [ref,name]any, o: ref, f: name :: { h[o, AsOwnedField(f)] } IsHeap(h) && cast(h[o, $inv]):name <: DeclType(AsOwnedField(f)) ==> cast(h[o, AsOwnedField(f)]):ref == null || $typeof(cast(h[o, AsOwnedField(f)]):ref) == System.String || !cast(h[cast(h[o, AsOwnedField(f)]):ref, $writable]):bool);
-
-axiom (forall h: [ref,name]any, o: ref :: { h[o, $writable] } IsHeap(h) && !cast(h[o, $writable]):bool ==> cast(h[o, $inv]):name == $typeof(o));
-
-function Box(any, ref) returns (ref);
-
-function Unbox(ref) returns (any);
-
-axiom (forall x: any, p: ref :: { Unbox(Box(x, p)) } Unbox(Box(x, p)) == x);
-
-axiom (forall heap: [ref,name]any, x: any, p: ref :: { heap[Box(x, p), $inv] } IsHeap(heap) ==> heap[Box(x, p), $inv] == $typeof(Box(x, p)));
-
-function UnboxedType(ref) returns (name);
-
-function BoxTester(p: ref, typ: name) returns (ref);
-
-axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } UnboxedType(p) == typ <==> BoxTester(p, typ) != null);
-
-const unique System.Int16: name;
-
-axiom $IsValueType(System.Int16);
-
-const unique System.Int32: name;
-
-axiom $IsValueType(System.Int32);
-
-const unique System.Int64: name;
-
-axiom $IsValueType(System.Int64);
-
-const unique System.Byte: name;
-
-axiom $IsValueType(System.Byte);
-
-const unique System.Int16.MinValue: int;
-
-const unique System.Int16.MaxValue: int;
-
-const unique System.Int32.MinValue: int;
-
-const unique System.Int32.MaxValue: int;
-
-const unique System.Int64.MinValue: int;
-
-const unique System.Int64.MaxValue: int;
-
-axiom System.Int64.MinValue < System.Int32.MinValue;
-
-axiom System.Int32.MinValue < System.Int16.MinValue;
-
-axiom System.Int16.MinValue < System.Int16.MaxValue;
-
-axiom System.Int16.MaxValue < System.Int32.MaxValue;
-
-axiom System.Int32.MaxValue < System.Int64.MaxValue;
-
-function InRange(i: int, T: name) returns (bool);
-
-axiom (forall i: int :: InRange(i, System.Int16) <==> System.Int16.MinValue <= i && i <= System.Int16.MaxValue);
-
-axiom (forall i: int :: InRange(i, System.Int32) <==> System.Int32.MinValue <= i && i <= System.Int32.MaxValue);
-
-axiom (forall i: int :: InRange(i, System.Int64) <==> System.Int64.MinValue <= i && i <= System.Int64.MaxValue);
-
-axiom (forall i: int :: { InRange(i, System.Byte) } InRange(i, System.Byte) <==> 0 <= i && i < 256);
-
-function $RealToInt(real) returns (int);
-
-function $IntToReal(int) returns (real);
-
-function $SizeIs(name, int) returns (bool);
-
-function $IfThenElse(bool, any, any) returns (any);
-
-axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } b ==> $IfThenElse(b, x, y) == x);
-
-axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } !b ==> $IfThenElse(b, x, y) == y);
-
-function #neg(int) returns (int);
-
-function #rneg(real) returns (real);
-
-function #rdiv(real, real) returns (real);
-
-function #and(int, int) returns (int);
-
-function #or(int, int) returns (int);
-
-function #xor(int, int) returns (int);
-
-function #shl(int, int) returns (int);
-
-function #shr(int, int) returns (int);
-
-axiom (forall x: int, y: int :: { x mod y } { x div y } x mod y == x - x div y * y);
-
-axiom (forall x: int, y: int :: { x mod y } 0 <= x && 0 < y ==> 0 <= x mod y && x mod y < y);
-
-axiom (forall x: int, y: int :: { x mod y } 0 <= x && y < 0 ==> 0 <= x mod y && x mod y < 0 - y);
-
-axiom (forall x: int, y: int :: { x mod y } x <= 0 && 0 < y ==> 0 - y < x mod y && x mod y <= 0);
-
-axiom (forall x: int, y: int :: { x mod y } x <= 0 && y < 0 ==> y < x mod y && x mod y <= 0);
-
-axiom (forall x: int, y: int :: { (x + y) mod y } 0 <= x && 0 <= y ==> (x + y) mod y == x mod y);
-
-axiom (forall x: int, y: int :: { (y + x) mod y } 0 <= x && 0 <= y ==> (y + x) mod y == x mod y);
-
-axiom (forall x: int, y: int :: { (x - y) mod y } 0 <= x - y && 0 <= y ==> (x - y) mod y == x mod y);
-
-axiom (forall a: int, b: int, d: int :: { a mod d,b mod d } 2 <= d && a mod d == b mod d && a < b ==> a + d <= b);
-
-axiom (forall i: int :: { #shl(i, 0) } #shl(i, 0) == i);
-
-axiom (forall i: int, j: int :: 0 <= j ==> #shl(i, j + 1) == #shl(i, j) * 2);
-
-axiom (forall i: int :: { #shr(i, 0) } #shr(i, 0) == i);
-
-axiom (forall i: int, j: int :: 0 <= j ==> #shr(i, j + 1) == #shr(i, j) div 2);
-
-const unique $UnknownRef: ref;
-
-const unique System.IComparable: name;
-
-const unique Microsoft.Singularity.Applications.ThreadTest: name;
-
-const unique System.Threading.Thread: name;
-
-const unique System.Collections.IEnumerable: name;
-
-const unique System.Threading.ThreadStart: name;
-
-const unique System.ICloneable: name;
-
-const unique System.MulticastDelegate: name;
-
-const unique System.Delegate: name;
-
-const unique $stringLiteral0: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral0, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral0, $allocated]):bool) && $IsNotNull($stringLiteral0, System.String) && $Length($stringLiteral0) == 13;
-
-const unique $stringLiteral1: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral1, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral1, $allocated]):bool) && $IsNotNull($stringLiteral1, System.String) && $Length($stringLiteral1) == 14;
-
-const unique $stringLiteral2: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral2, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral2, $allocated]):bool) && $IsNotNull($stringLiteral2, System.String) && $Length($stringLiteral2) == 11;
-
-const unique $stringLiteral3: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral3, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral3, $allocated]):bool) && $IsNotNull($stringLiteral3, System.String) && $Length($stringLiteral3) == 18;
-
-const unique $stringLiteral4: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral4, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral4, $allocated]):bool) && $IsNotNull($stringLiteral4, System.String) && $Length($stringLiteral4) == 19;
-
-const unique $stringLiteral5: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral5, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral5, $allocated]):bool) && $IsNotNull($stringLiteral5, System.String) && $Length($stringLiteral5) == 14;
-
-const unique $stringLiteral6: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral6, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral6, $allocated]):bool) && $IsNotNull($stringLiteral6, System.String) && $Length($stringLiteral6) == 15;
-
-const unique $stringLiteral7: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral7, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral7, $allocated]):bool) && $IsNotNull($stringLiteral7, System.String) && $Length($stringLiteral7) == 11;
-
-const unique $stringLiteral8: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral8, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral8, $allocated]):bool) && $IsNotNull($stringLiteral8, System.String) && $Length($stringLiteral8) == 19;
-
-const unique $stringLiteral9: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral9, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral9, $allocated]):bool) && $IsNotNull($stringLiteral9, System.String) && $Length($stringLiteral9) == 20;
-
-const unique $stringLiteral10: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral10, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral10, $allocated]):bool) && $IsNotNull($stringLiteral10, System.String) && $Length($stringLiteral10) == 22;
-
-const unique $stringLiteral11: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral11, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral11, $allocated]):bool) && $IsNotNull($stringLiteral11, System.String) && $Length($stringLiteral11) == 21;
-
-const unique $stringLiteral12: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral12, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral12, $allocated]):bool) && $IsNotNull($stringLiteral12, System.String) && $Length($stringLiteral12) == 23;
-
-const unique $stringLiteral13: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral13, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral13, $allocated]):bool) && $IsNotNull($stringLiteral13, System.String) && $Length($stringLiteral13) == 22;
-
-axiom $IsClass(Microsoft.Singularity.Applications.ThreadTest);
-
-axiom Microsoft.Singularity.Applications.ThreadTest <: System.Object && AsDirectSubClass(Microsoft.Singularity.Applications.ThreadTest, System.Object) == Microsoft.Singularity.Applications.ThreadTest;
-
-axiom (forall $K: name :: { Microsoft.Singularity.Applications.ThreadTest <: $K } Microsoft.Singularity.Applications.ThreadTest <: $K <==> Microsoft.Singularity.Applications.ThreadTest == $K || System.Object <: $K);
-
-function Inv_Microsoft.Singularity.Applications.ThreadTest(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) } Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest } { Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest ==> Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap));
-
-procedure Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod();
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod()
-{
- var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block1513$LoopPreheader: [ref,name]any;
-
- entry:
- assume IsHeap($Heap);
- goto block1479;
-
- block1479:
- goto block1496;
-
- block1496:
- // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
- stack0o := $stringLiteral0;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
- stack0o := $stringLiteral1;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,18)
- i := 0;
- goto block1513$LoopPreheader;
-
- block1513:
- // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- assert (forall $o: ref :: $Heap$block1513$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool != true);
- assert (forall $o: ref :: cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- stack0i := 10;
- // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- stack0b := i >= stack0i;
- // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- goto true1513to1547, false1513to1530;
-
- true1513to1547:
- assume stack0b == true;
- goto block1547;
-
- false1513to1530:
- assume stack0b == false;
- goto block1530;
-
- block1547:
- // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
- stack0o := $stringLiteral3;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
- stack0o := $stringLiteral4;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(31,10)
- return;
-
- block1530:
- // ----- load constant [0] ... ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
- stack0o := $stringLiteral2;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
- // Commented out, to avoid problems with the theorem prover nondeterministically choosing this error over the one 12 lines above: call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(26,17)
- call System.Threading.Thread.Yield();
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,37)
- local1 := i;
- // ----- load constant 1
- stack0i := 1;
- // ----- binary operator
- stack0i := local1 + stack0i;
- // ----- copy
- i := stack0i;
- // ----- copy
- stack0i := local1;
- // ----- branch
- goto block1513;
-
- block1513$LoopPreheader:
- $Heap$block1513$LoopPreheader := $Heap;
- goto block1513;
-
-}
-
-
-
-axiom $IsClass(System.String);
-
-axiom System.String <: System.Object && AsDirectSubClass(System.String, System.Object) == System.String;
-
-axiom $IsInterface(System.IComparable);
-
-axiom (forall $K: name :: { System.IComparable <: $K } System.IComparable <: $K <==> System.IComparable == $K || System.Object == $K);
-
-axiom Implements(System.String, System.IComparable);
-
-axiom $IsInterface(System.ICloneable);
-
-axiom (forall $K: name :: { System.ICloneable <: $K } System.ICloneable <: $K <==> System.ICloneable == $K || System.Object == $K);
-
-axiom Implements(System.String, System.ICloneable);
-
-axiom $IsInterface(System.Collections.IEnumerable);
-
-axiom (forall $K: name :: { System.Collections.IEnumerable <: $K } System.Collections.IEnumerable <: $K <==> System.Collections.IEnumerable == $K || System.Object == $K);
-
-axiom Implements(System.String, System.Collections.IEnumerable);
-
-axiom (forall $K: name :: { System.String <: $K } System.String <: $K <==> System.String == $K || System.Object <: $K || System.IComparable <: $K || System.ICloneable <: $K || System.Collections.IEnumerable <: $K);
-
-axiom (forall $U: name :: { $U <: System.String } $U <: System.String ==> $U == System.String);
-
-function Inv_System.String(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.String(this, heap) } Inv_System.String(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.String } { Inv_System.String($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.String ==> Inv_System.String($o, heap));
-
-procedure System.Console.WriteLine$System.String(value$in: ref);
- requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Microsoft.Singularity.DebugStub.Print$System.String(value$in: ref);
- requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure System.Threading.Thread.Yield();
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod();
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod()
-{
- var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block2516$LoopPreheader: [ref,name]any;
-
- entry:
- assume IsHeap($Heap);
- goto block2482;
-
- block2482:
- goto block2499;
-
- block2499:
- // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
- stack0o := $stringLiteral5;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
- stack0o := $stringLiteral6;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,18)
- i := 0;
- goto block2516$LoopPreheader;
-
- block2516:
- // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- assert (forall $o: ref :: $Heap$block2516$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool != true);
- assert (forall $o: ref :: cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- stack0i := 10;
- // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- stack0b := i >= stack0i;
- // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- goto true2516to2550, false2516to2533;
-
- true2516to2550:
- assume stack0b == true;
- goto block2550;
-
- false2516to2533:
- assume stack0b == false;
- goto block2533;
-
- block2550:
- // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
- stack0o := $stringLiteral8;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
- stack0o := $stringLiteral9;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(46,10)
- return;
-
- block2533:
- // ----- load constant ... [1] ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
- stack0o := $stringLiteral7;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
- // Commented out, to avoid problems with the theorem prover nondeterministically choosing this error over the one 12 lines above: call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(41,17)
- call System.Threading.Thread.Yield();
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,37)
- local1 := i;
- // ----- load constant 1
- stack0i := 1;
- // ----- binary operator
- stack0i := local1 + stack0i;
- // ----- copy
- i := stack0i;
- // ----- copy
- stack0i := local1;
- // ----- branch
- goto block2516;
-
- block2516$LoopPreheader:
- $Heap$block2516$LoopPreheader := $Heap;
- goto block2516;
-
-}
-
-
-
-procedure Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int);
- requires args$in == null || (cast($Heap[args$in, $writable]):bool == true && cast($Heap[args$in, $inv]):name == $typeof(args$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures IsAllocated($Heap, $result);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int)
-{
- var args: ref, stack0o: ref, stack1o: ref, stack50000o: ref, t1: ref, t2: ref, i: int, stack0i: int, stack0b: bool, local3: int, return.value: int, SS$Display.Return.Local: int, $Heap$block3825$LoopPreheader: [ref,name]any;
-
- entry:
- assume IsHeap($Heap);
- args := args$in;
- assume $Is(args, RefArray(System.String, 1));
- assume cast($Heap[args$in, $allocated]):bool == true;
- goto block3791;
-
- block3791:
- goto block3808;
-
- block3808:
- stack0o := null;
- // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- havoc stack1o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- assert stack50000o != null;
- call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- stack0o := stack50000o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- assert stack50000o != null;
- call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- stack0o := stack50000o;
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- t1 := stack0o;
- stack0o := null;
- // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- havoc stack1o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- assert stack50000o != null;
- call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- stack0o := stack50000o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- assert stack50000o != null;
- call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- stack0o := stack50000o;
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- t2 := stack0o;
- // ----- load constant Starting first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
- stack0o := $stringLiteral10;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(55,13)
- assert t1 != null;
- call System.Threading.Thread.Start(t1);
- // ----- load constant Started first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
- stack0o := $stringLiteral11;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant Starting second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
- stack0o := $stringLiteral12;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(59,13)
- assert t2 != null;
- call System.Threading.Thread.Start(t2);
- // ----- load constant Started second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
- stack0o := $stringLiteral13;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,18)
- i := 0;
- goto block3825$LoopPreheader;
-
- block3825:
- // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- assert (forall $o: ref :: $Heap$block3825$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool != true);
- assert (forall $o: ref :: cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- // ----- load constant 30 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- stack0i := 30;
- // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- stack0b := i >= stack0i;
- // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- goto true3825to3859, false3825to3842;
-
- true3825to3859:
- assume stack0b == true;
- goto block3859;
-
- false3825to3842:
- assume stack0b == false;
- goto block3842;
-
- block3859:
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(66,13)
- return.value := 0;
- // ----- branch
- goto block3876;
-
- block3842:
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(64,17)
- call System.Threading.Thread.Yield();
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,37)
- local3 := i;
- // ----- load constant 1
- stack0i := 1;
- // ----- binary operator
- stack0i := local3 + stack0i;
- // ----- copy
- i := stack0i;
- // ----- copy
- stack0i := local3;
- // ----- branch
- goto block3825;
-
- block3876:
- // ----- copy
- SS$Display.Return.Local := return.value;
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
- stack0i := return.value;
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
- $result := stack0i;
- return;
-
- block3825$LoopPreheader:
- $Heap$block3825$LoopPreheader := $Heap;
- goto block3825;
-
-}
-
-
-
-axiom $IsClass(System.Threading.ThreadStart);
-
-axiom $IsClass(System.MulticastDelegate);
-
-axiom $IsClass(System.Delegate);
-
-axiom System.Delegate <: System.Object && AsDirectSubClass(System.Delegate, System.Object) == System.Delegate;
-
-axiom Implements(System.Delegate, System.ICloneable);
-
-axiom (forall $K: name :: { System.Delegate <: $K } System.Delegate <: $K <==> System.Delegate == $K || System.Object <: $K || System.ICloneable <: $K);
-
-function Inv_System.Delegate(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Delegate(this, heap) } Inv_System.Delegate(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Delegate } { Inv_System.Delegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Delegate ==> Inv_System.Delegate($o, heap));
-
-axiom System.MulticastDelegate <: System.Delegate && AsDirectSubClass(System.MulticastDelegate, System.Delegate) == System.MulticastDelegate;
-
-axiom (forall $K: name :: { System.MulticastDelegate <: $K } System.MulticastDelegate <: $K <==> System.MulticastDelegate == $K || System.Delegate <: $K);
-
-function Inv_System.MulticastDelegate(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.MulticastDelegate(this, heap) } Inv_System.MulticastDelegate(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.MulticastDelegate } { Inv_System.MulticastDelegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.MulticastDelegate ==> Inv_System.MulticastDelegate($o, heap));
-
-axiom System.Threading.ThreadStart <: System.MulticastDelegate && AsDirectSubClass(System.Threading.ThreadStart, System.MulticastDelegate) == System.Threading.ThreadStart;
-
-axiom (forall $K: name :: { System.Threading.ThreadStart <: $K } System.Threading.ThreadStart <: $K <==> System.Threading.ThreadStart == $K || System.MulticastDelegate <: $K);
-
-axiom (forall $U: name :: { $U <: System.Threading.ThreadStart } $U <: System.Threading.ThreadStart ==> $U == System.Threading.ThreadStart);
-
-function Inv_System.Threading.ThreadStart(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.ThreadStart(this, heap) } Inv_System.Threading.ThreadStart(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.ThreadStart } { Inv_System.Threading.ThreadStart($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.ThreadStart ==> Inv_System.Threading.ThreadStart($o, heap));
-
-procedure System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(this: ref, object$in: ref, method$in: ref);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.ThreadStart;
-
-
-
-axiom $IsClass(System.Threading.Thread);
-
-axiom System.Threading.Thread <: System.Object && AsDirectSubClass(System.Threading.Thread, System.Object) == System.Threading.Thread;
-
-axiom (forall $K: name :: { System.Threading.Thread <: $K } System.Threading.Thread <: $K <==> System.Threading.Thread == $K || System.Object <: $K);
-
-axiom (forall $U: name :: { $U <: System.Threading.Thread } $U <: System.Threading.Thread ==> $U == System.Threading.Thread);
-
-function Inv_System.Threading.Thread(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.Thread(this, heap) } Inv_System.Threading.Thread(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.Thread } { Inv_System.Threading.Thread($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.Thread ==> Inv_System.Threading.Thread($o, heap));
-
-procedure System.Threading.Thread..ctor$System.Threading.ThreadStart(this: ref, start$in: ref);
- requires start$in == null || (cast($Heap[start$in, $writable]):bool == true && cast($Heap[start$in, $inv]):name == $typeof(start$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Threading.Thread <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.Thread;
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
-
-
-
-procedure System.Threading.Thread.Start(this: ref);
- requires cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == $typeof(this);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(Microsoft.Singularity.Applications.ThreadTest <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == Microsoft.Singularity.Applications.ThreadTest;
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref)
-{
-
- entry:
- assume IsHeap($Heap);
- assume $IsNotNull(this, Microsoft.Singularity.Applications.ThreadTest);
- assume cast($Heap[this, $allocated]):bool == true;
- assume cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
- goto block4777;
-
- block4777:
- goto block4794;
-
- block4794:
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,18)
- assert this != null;
- call System.Object..ctor(this);
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,28)
- assert this != null;
- assert cast($Heap[this, $writable]):bool == true && System.Object <: cast($Heap[this, $inv]):name;
- assert cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
- assert Inv_Microsoft.Singularity.Applications.ThreadTest(this, $Heap);
- $Heap[this, $inv] := Microsoft.Singularity.Applications.ThreadTest;
- return;
-
-}
-
-
-
-procedure System.Object..ctor(this: ref);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Object <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
-
-
-
-type ref, name, any;
-const null : ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+type elements;
+
+type struct;
+
+var $Heap: [ref,name]any;
+function cast<S,T>(S) returns (T);
+function IsHeap(h: [ref,name]any) returns (bool);
+
+const unique $allocated: name;
+
+const unique $elements: name;
+
+const unique $inv: name;
+
+const unique $writable: name;
+
+const unique $sharingMode: name;
+
+const unique $SharingMode_Unshared: name;
+
+const unique $SharingMode_LockProtected: name;
+
+function ClassRepr(class: name) returns (ref);
+
+axiom (forall c0: name, c1: name :: c0 != c1 ==> ClassRepr(c0) != ClassRepr(c1));
+
+axiom (forall T: name :: !($typeof(ClassRepr(T)) <: System.Object));
+
+axiom (forall T: name :: ClassRepr(T) != null);
+
+axiom (forall T: name, h: [ref,name]any :: { h[ClassRepr(T), $writable] } IsHeap(h) ==> cast(h[ClassRepr(T), $writable]):bool);
+
+function IsDirectlyModifiableField(f: name) returns (bool);
+
+axiom !IsDirectlyModifiableField($allocated);
+
+axiom IsDirectlyModifiableField($elements);
+
+axiom !IsDirectlyModifiableField($inv);
+
+axiom !IsDirectlyModifiableField($writable);
+
+function IsStaticField(f: name) returns (bool);
+
+axiom !IsStaticField($allocated);
+
+axiom !IsStaticField($elements);
+
+axiom !IsStaticField($inv);
+
+axiom !IsStaticField($writable);
+
+function ValueArrayGet(elements, int) returns (any);
+
+function ValueArraySet(elements, int, any) returns (elements);
+
+function RefArrayGet(elements, int) returns (ref);
+
+function RefArraySet(elements, int, ref) returns (elements);
+
+axiom (forall A: elements, i: int, x: any :: ValueArrayGet(ValueArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: any :: i != j ==> ValueArrayGet(ValueArraySet(A, i, x), j) == ValueArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: ref :: RefArrayGet(RefArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> RefArrayGet(RefArraySet(A, i, x), j) == RefArrayGet(A, j));
+
+function ArrayIndex(arr: ref, dim: int, indexAtDim: int, remainingIndexContribution: int) returns (int);
+
+axiom (forall a: ref, d: int, x: int, y: int, x': int, y': int :: ArrayIndex(a, d, x, y) == ArrayIndex(a, d, x', y') ==> x == x' && y == y');
+
+axiom (forall a: ref, T: name, i: int, r: int, heap: [ref,name]any :: $typeof(a) <: RefArray(T, r) ==> $Is(RefArrayGet(cast(heap[a, $elements]):elements, i), T));
+
+function $Rank(ref) returns (int);
+
+axiom (forall a: ref :: 1 <= $Rank(a));
+
+axiom (forall a: ref, T: name, r: int :: { $Is(a, ValueArray(T, r)) } $Is(a, ValueArray(T, r)) ==> $Rank(a) == r);
+
+axiom (forall a: ref, T: name, r: int :: { $Is(a, RefArray(T, r)) } $Is(a, RefArray(T, r)) ==> $Rank(a) == r);
+
+function $Length(ref) returns (int);
+
+axiom (forall a: ref :: { $Length(a) } 0 <= $Length(a));
+
+function $DimLength(ref, int) returns (int);
+
+axiom (forall a: ref, i: int :: 0 <= $DimLength(a, i));
+
+axiom (forall a: ref :: $Rank(a) == 1 ==> $DimLength(a, 0) == $Length(a));
+
+function $LBound(ref, int) returns (int);
+
+function $UBound(ref, int) returns (int);
+
+axiom (forall a: ref, i: int :: { $LBound(a, i) } $LBound(a, i) == 0);
+
+axiom (forall a: ref, i: int :: { $UBound(a, i) } $UBound(a, i) == $DimLength(a, i) - 1);
+
+const unique System.Array: name;
+
+axiom $IsClass(System.Array);
+
+axiom System.Array <: System.Object;
+
+function $ElementType(name) returns (name);
+
+function ValueArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { ValueArray(T, r) } ValueArray(T, r) <: System.Array);
+
+function RefArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { RefArray(T, r) } RefArray(T, r) <: System.Array);
+
+axiom (forall T: name, U: name, r: int :: U <: T ==> RefArray(U, r) <: RefArray(T, r));
+
+axiom (forall A: name, r: int :: $ElementType(ValueArray(A, r)) == A);
+
+axiom (forall A: name, r: int :: $ElementType(RefArray(A, r)) == A);
+
+axiom (forall A: name, r: int, T: name :: { T <: RefArray(A, r) } T <: RefArray(A, r) ==> T == RefArray($ElementType(T), r) && $ElementType(T) <: A);
+
+axiom (forall A: name, r: int, T: name :: { T <: ValueArray(A, r) } T <: ValueArray(A, r) ==> T == ValueArray(A, r));
+
+axiom (forall A: name, r: int, T: name :: RefArray(A, r) <: T ==> System.Array <: T || (T == RefArray($ElementType(T), r) && A <: $ElementType(T)));
+
+axiom (forall A: name, r: int, T: name :: ValueArray(A, r) <: T ==> System.Array <: T || T == ValueArray(A, r));
+
+function $ArrayPtr(elementType: name) returns (name);
+
+function $StructGet(struct, name) returns (any);
+
+function $StructSet(struct, name, any) returns (struct);
+
+axiom (forall s: struct, f: name, x: any :: $StructGet($StructSet(s, f, x), f) == x);
+
+axiom (forall s: struct, f: name, f': name, x: any :: f != f' ==> $StructGet($StructSet(s, f, x), f') == $StructGet(s, f'));
+
+function ZeroInit(s: struct, typ: name) returns (bool);
+
+function $typeof(ref) returns (name);
+
+function Implements(class: name, interface: name) returns (bool);
+
+axiom (forall T: name, J: name :: { Implements(T, J) } Implements(T, J) ==> T <: J);
+
+function InterfaceExtends(subIntf: name, superIntf: name) returns (bool);
+
+axiom (forall J: name, K: name :: { InterfaceExtends(J, K) } InterfaceExtends(J, K) ==> J <: K);
+
+function $IsClass(name) returns (bool);
+
+axiom (forall C: name :: { $IsClass(C) } $IsClass(C) ==> C <: C);
+
+function AsDirectSubClass(sub: name, base: name) returns (sub': name);
+
+function OneClassDown(sub: name, base: name) returns (directSub: name);
+
+axiom (forall A: name, B: name, C: name :: { C <: AsDirectSubClass(B, A) } C <: AsDirectSubClass(B, A) ==> OneClassDown(C, A) == B);
+
+function $IsInterface(name) returns (bool);
+
+axiom (forall J: name :: { $IsInterface(J) } $IsInterface(J) ==> J <: System.Object);
+
+function $IsValueType(name) returns (bool);
+
+axiom (forall T: name :: $IsValueType(T) ==> (forall U: name :: T <: U ==> T == U) && (forall U: name :: U <: T ==> T == U));
+
+const unique System.Object: name;
+
+axiom $IsClass(System.Object);
+
+function $IsTokenForType(struct, name) returns (bool);
+
+function TypeObject(name) returns (ref);
+
+const unique System.Type: name;
+
+axiom System.Type <: System.Object;
+
+axiom (forall T: name :: { TypeObject(T) } $IsNotNull(TypeObject(T), System.Type));
+
+function $Is(ref, name) returns (bool);
+
+axiom (forall o: ref, T: name :: { $Is(o, T) } $Is(o, T) <==> o == null || $typeof(o) <: T);
+
+function $IsNotNull(ref, name) returns (bool);
+
+axiom (forall o: ref, T: name :: { $IsNotNull(o, T) } $IsNotNull(o, T) <==> o != null && $Is(o, T));
+
+function $As(ref, name) returns (ref);
+
+axiom (forall o: ref, T: name :: $Is(o, T) ==> $As(o, T) == o);
+
+axiom (forall o: ref, T: name :: !$Is(o, T) ==> $As(o, T) == null);
+
+axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, RefArray(A, r)) ==> heap[o, $inv] == $typeof(o));
+
+axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, ValueArray(A, r)) ==> heap[o, $inv] == $typeof(o));
+
+function IsAllocated(h: [ref,name]any, o: any) returns (bool);
+
+axiom (forall h: [ref,name]any, o: ref, f: name :: { IsAllocated(h, h[o, f]) } IsHeap(h) ==> IsAllocated(h, h[o, f]));
+
+axiom (forall h: [ref,name]any, s: struct, f: name :: { IsAllocated(h, $StructGet(s, f)) } IsAllocated(h, s) ==> IsAllocated(h, $StructGet(s, f)));
+
+axiom (forall h: [ref,name]any, e: elements, i: int :: { IsAllocated(h, RefArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, RefArrayGet(e, i)));
+
+axiom (forall h: [ref,name]any, o: ref :: { h[o, $allocated] } IsAllocated(h, o) ==> cast(h[o, $allocated]):bool);
+
+axiom (forall h: [ref,name]any, c: name :: { h[ClassRepr(c), $allocated] } IsHeap(h) ==> cast(h[ClassRepr(c), $allocated]):bool);
+
+function DeclType(field: name) returns (class: name);
+
+function AsNonNullRefField(field: name, T: name) returns (f: name);
+
+function AsRefField(field: name, T: name) returns (f: name);
+
+function AsRangeField(field: name, T: name) returns (f: name);
+
+axiom (forall f: name, T: name :: { AsNonNullRefField(f, T) } AsNonNullRefField(f, T) == f ==> AsRefField(f, T) == f);
+
+axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRefField(f, T)] } IsHeap(h) ==> $Is(cast(h[o, AsRefField(f, T)]):ref, T));
+
+axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsNonNullRefField(f, T)] } IsHeap(h) ==> cast(h[o, AsNonNullRefField(f, T)]):ref != null);
+
+axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRangeField(f, T)] } IsHeap(h) ==> InRange(cast(h[o, AsRangeField(f, T)]):int, T));
+
+const unique System.String: name;
+
+axiom (forall h: [ref,name]any, s: ref :: IsHeap(h) && $typeof(s) == System.String ==> h[s, $inv] == $typeof(s) && cast(h[s, $writable]):bool);
+
+function AsOwnedField(f: name) returns (name);
+
+axiom (forall h: [ref,name]any, o: ref, f: name :: { h[o, AsOwnedField(f)] } IsHeap(h) && cast(h[o, $inv]):name <: DeclType(AsOwnedField(f)) ==> cast(h[o, AsOwnedField(f)]):ref == null || $typeof(cast(h[o, AsOwnedField(f)]):ref) == System.String || !cast(h[cast(h[o, AsOwnedField(f)]):ref, $writable]):bool);
+
+axiom (forall h: [ref,name]any, o: ref :: { h[o, $writable] } IsHeap(h) && !cast(h[o, $writable]):bool ==> cast(h[o, $inv]):name == $typeof(o));
+
+function Box(any, ref) returns (ref);
+
+function Unbox(ref) returns (any);
+
+axiom (forall x: any, p: ref :: { Unbox(Box(x, p)) } Unbox(Box(x, p)) == x);
+
+axiom (forall heap: [ref,name]any, x: any, p: ref :: { heap[Box(x, p), $inv] } IsHeap(heap) ==> heap[Box(x, p), $inv] == $typeof(Box(x, p)));
+
+function UnboxedType(ref) returns (name);
+
+function BoxTester(p: ref, typ: name) returns (ref);
+
+axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } UnboxedType(p) == typ <==> BoxTester(p, typ) != null);
+
+const unique System.Int16: name;
+
+axiom $IsValueType(System.Int16);
+
+const unique System.Int32: name;
+
+axiom $IsValueType(System.Int32);
+
+const unique System.Int64: name;
+
+axiom $IsValueType(System.Int64);
+
+const unique System.Byte: name;
+
+axiom $IsValueType(System.Byte);
+
+const unique System.Int16.MinValue: int;
+
+const unique System.Int16.MaxValue: int;
+
+const unique System.Int32.MinValue: int;
+
+const unique System.Int32.MaxValue: int;
+
+const unique System.Int64.MinValue: int;
+
+const unique System.Int64.MaxValue: int;
+
+axiom System.Int64.MinValue < System.Int32.MinValue;
+
+axiom System.Int32.MinValue < System.Int16.MinValue;
+
+axiom System.Int16.MinValue < System.Int16.MaxValue;
+
+axiom System.Int16.MaxValue < System.Int32.MaxValue;
+
+axiom System.Int32.MaxValue < System.Int64.MaxValue;
+
+function InRange(i: int, T: name) returns (bool);
+
+axiom (forall i: int :: InRange(i, System.Int16) <==> System.Int16.MinValue <= i && i <= System.Int16.MaxValue);
+
+axiom (forall i: int :: InRange(i, System.Int32) <==> System.Int32.MinValue <= i && i <= System.Int32.MaxValue);
+
+axiom (forall i: int :: InRange(i, System.Int64) <==> System.Int64.MinValue <= i && i <= System.Int64.MaxValue);
+
+axiom (forall i: int :: { InRange(i, System.Byte) } InRange(i, System.Byte) <==> 0 <= i && i < 256);
+
+function $RealToInt(real) returns (int);
+
+function $IntToReal(int) returns (real);
+
+function $SizeIs(name, int) returns (bool);
+
+function $IfThenElse(bool, any, any) returns (any);
+
+axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } b ==> $IfThenElse(b, x, y) == x);
+
+axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } !b ==> $IfThenElse(b, x, y) == y);
+
+function #neg(int) returns (int);
+
+function #rneg(real) returns (real);
+
+function #rdiv(real, real) returns (real);
+
+function #and(int, int) returns (int);
+
+function #or(int, int) returns (int);
+
+function #xor(int, int) returns (int);
+
+function #shl(int, int) returns (int);
+
+function #shr(int, int) returns (int);
+
+axiom (forall x: int, y: int :: { x mod y } { x div y } x mod y == x - x div y * y);
+
+axiom (forall x: int, y: int :: { x mod y } 0 <= x && 0 < y ==> 0 <= x mod y && x mod y < y);
+
+axiom (forall x: int, y: int :: { x mod y } 0 <= x && y < 0 ==> 0 <= x mod y && x mod y < 0 - y);
+
+axiom (forall x: int, y: int :: { x mod y } x <= 0 && 0 < y ==> 0 - y < x mod y && x mod y <= 0);
+
+axiom (forall x: int, y: int :: { x mod y } x <= 0 && y < 0 ==> y < x mod y && x mod y <= 0);
+
+axiom (forall x: int, y: int :: { (x + y) mod y } 0 <= x && 0 <= y ==> (x + y) mod y == x mod y);
+
+axiom (forall x: int, y: int :: { (y + x) mod y } 0 <= x && 0 <= y ==> (y + x) mod y == x mod y);
+
+axiom (forall x: int, y: int :: { (x - y) mod y } 0 <= x - y && 0 <= y ==> (x - y) mod y == x mod y);
+
+axiom (forall a: int, b: int, d: int :: { a mod d,b mod d } 2 <= d && a mod d == b mod d && a < b ==> a + d <= b);
+
+axiom (forall i: int :: { #shl(i, 0) } #shl(i, 0) == i);
+
+axiom (forall i: int, j: int :: 0 <= j ==> #shl(i, j + 1) == #shl(i, j) * 2);
+
+axiom (forall i: int :: { #shr(i, 0) } #shr(i, 0) == i);
+
+axiom (forall i: int, j: int :: 0 <= j ==> #shr(i, j + 1) == #shr(i, j) div 2);
+
+const unique $UnknownRef: ref;
+
+const unique System.IComparable: name;
+
+const unique Microsoft.Singularity.Applications.ThreadTest: name;
+
+const unique System.Threading.Thread: name;
+
+const unique System.Collections.IEnumerable: name;
+
+const unique System.Threading.ThreadStart: name;
+
+const unique System.ICloneable: name;
+
+const unique System.MulticastDelegate: name;
+
+const unique System.Delegate: name;
+
+const unique $stringLiteral0: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral0, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral0, $allocated]):bool) && $IsNotNull($stringLiteral0, System.String) && $Length($stringLiteral0) == 13;
+
+const unique $stringLiteral1: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral1, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral1, $allocated]):bool) && $IsNotNull($stringLiteral1, System.String) && $Length($stringLiteral1) == 14;
+
+const unique $stringLiteral2: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral2, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral2, $allocated]):bool) && $IsNotNull($stringLiteral2, System.String) && $Length($stringLiteral2) == 11;
+
+const unique $stringLiteral3: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral3, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral3, $allocated]):bool) && $IsNotNull($stringLiteral3, System.String) && $Length($stringLiteral3) == 18;
+
+const unique $stringLiteral4: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral4, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral4, $allocated]):bool) && $IsNotNull($stringLiteral4, System.String) && $Length($stringLiteral4) == 19;
+
+const unique $stringLiteral5: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral5, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral5, $allocated]):bool) && $IsNotNull($stringLiteral5, System.String) && $Length($stringLiteral5) == 14;
+
+const unique $stringLiteral6: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral6, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral6, $allocated]):bool) && $IsNotNull($stringLiteral6, System.String) && $Length($stringLiteral6) == 15;
+
+const unique $stringLiteral7: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral7, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral7, $allocated]):bool) && $IsNotNull($stringLiteral7, System.String) && $Length($stringLiteral7) == 11;
+
+const unique $stringLiteral8: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral8, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral8, $allocated]):bool) && $IsNotNull($stringLiteral8, System.String) && $Length($stringLiteral8) == 19;
+
+const unique $stringLiteral9: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral9, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral9, $allocated]):bool) && $IsNotNull($stringLiteral9, System.String) && $Length($stringLiteral9) == 20;
+
+const unique $stringLiteral10: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral10, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral10, $allocated]):bool) && $IsNotNull($stringLiteral10, System.String) && $Length($stringLiteral10) == 22;
+
+const unique $stringLiteral11: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral11, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral11, $allocated]):bool) && $IsNotNull($stringLiteral11, System.String) && $Length($stringLiteral11) == 21;
+
+const unique $stringLiteral12: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral12, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral12, $allocated]):bool) && $IsNotNull($stringLiteral12, System.String) && $Length($stringLiteral12) == 23;
+
+const unique $stringLiteral13: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral13, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral13, $allocated]):bool) && $IsNotNull($stringLiteral13, System.String) && $Length($stringLiteral13) == 22;
+
+axiom $IsClass(Microsoft.Singularity.Applications.ThreadTest);
+
+axiom Microsoft.Singularity.Applications.ThreadTest <: System.Object && AsDirectSubClass(Microsoft.Singularity.Applications.ThreadTest, System.Object) == Microsoft.Singularity.Applications.ThreadTest;
+
+axiom (forall $K: name :: { Microsoft.Singularity.Applications.ThreadTest <: $K } Microsoft.Singularity.Applications.ThreadTest <: $K <==> Microsoft.Singularity.Applications.ThreadTest == $K || System.Object <: $K);
+
+function Inv_Microsoft.Singularity.Applications.ThreadTest(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) } Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest } { Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest ==> Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap));
+
+procedure Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod();
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod()
+{
+ var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block1513$LoopPreheader: [ref,name]any;
+
+ entry:
+ assume IsHeap($Heap);
+ goto block1479;
+
+ block1479:
+ goto block1496;
+
+ block1496:
+ // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
+ stack0o := $stringLiteral0;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
+ stack0o := $stringLiteral1;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,18)
+ i := 0;
+ goto block1513$LoopPreheader;
+
+ block1513:
+ // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ assert (forall $o: ref :: $Heap$block1513$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool != true);
+ assert (forall $o: ref :: cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ stack0i := 10;
+ // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ stack0b := i >= stack0i;
+ // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ goto true1513to1547, false1513to1530;
+
+ true1513to1547:
+ assume stack0b == true;
+ goto block1547;
+
+ false1513to1530:
+ assume stack0b == false;
+ goto block1530;
+
+ block1547:
+ // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
+ stack0o := $stringLiteral3;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
+ stack0o := $stringLiteral4;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(31,10)
+ return;
+
+ block1530:
+ // ----- load constant [0] ... ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
+ stack0o := $stringLiteral2;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
+ // Commented out, to avoid problems with the theorem prover nondeterministically choosing this error over the one 12 lines above: call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(26,17)
+ call System.Threading.Thread.Yield();
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,37)
+ local1 := i;
+ // ----- load constant 1
+ stack0i := 1;
+ // ----- binary operator
+ stack0i := local1 + stack0i;
+ // ----- copy
+ i := stack0i;
+ // ----- copy
+ stack0i := local1;
+ // ----- branch
+ goto block1513;
+
+ block1513$LoopPreheader:
+ $Heap$block1513$LoopPreheader := $Heap;
+ goto block1513;
+
+}
+
+
+
+axiom $IsClass(System.String);
+
+axiom System.String <: System.Object && AsDirectSubClass(System.String, System.Object) == System.String;
+
+axiom $IsInterface(System.IComparable);
+
+axiom (forall $K: name :: { System.IComparable <: $K } System.IComparable <: $K <==> System.IComparable == $K || System.Object == $K);
+
+axiom Implements(System.String, System.IComparable);
+
+axiom $IsInterface(System.ICloneable);
+
+axiom (forall $K: name :: { System.ICloneable <: $K } System.ICloneable <: $K <==> System.ICloneable == $K || System.Object == $K);
+
+axiom Implements(System.String, System.ICloneable);
+
+axiom $IsInterface(System.Collections.IEnumerable);
+
+axiom (forall $K: name :: { System.Collections.IEnumerable <: $K } System.Collections.IEnumerable <: $K <==> System.Collections.IEnumerable == $K || System.Object == $K);
+
+axiom Implements(System.String, System.Collections.IEnumerable);
+
+axiom (forall $K: name :: { System.String <: $K } System.String <: $K <==> System.String == $K || System.Object <: $K || System.IComparable <: $K || System.ICloneable <: $K || System.Collections.IEnumerable <: $K);
+
+axiom (forall $U: name :: { $U <: System.String } $U <: System.String ==> $U == System.String);
+
+function Inv_System.String(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.String(this, heap) } Inv_System.String(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.String } { Inv_System.String($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.String ==> Inv_System.String($o, heap));
+
+procedure System.Console.WriteLine$System.String(value$in: ref);
+ requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Microsoft.Singularity.DebugStub.Print$System.String(value$in: ref);
+ requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure System.Threading.Thread.Yield();
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod();
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod()
+{
+ var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block2516$LoopPreheader: [ref,name]any;
+
+ entry:
+ assume IsHeap($Heap);
+ goto block2482;
+
+ block2482:
+ goto block2499;
+
+ block2499:
+ // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
+ stack0o := $stringLiteral5;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
+ stack0o := $stringLiteral6;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,18)
+ i := 0;
+ goto block2516$LoopPreheader;
+
+ block2516:
+ // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ assert (forall $o: ref :: $Heap$block2516$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool != true);
+ assert (forall $o: ref :: cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ stack0i := 10;
+ // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ stack0b := i >= stack0i;
+ // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ goto true2516to2550, false2516to2533;
+
+ true2516to2550:
+ assume stack0b == true;
+ goto block2550;
+
+ false2516to2533:
+ assume stack0b == false;
+ goto block2533;
+
+ block2550:
+ // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
+ stack0o := $stringLiteral8;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
+ stack0o := $stringLiteral9;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(46,10)
+ return;
+
+ block2533:
+ // ----- load constant ... [1] ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
+ stack0o := $stringLiteral7;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
+ // Commented out, to avoid problems with the theorem prover nondeterministically choosing this error over the one 12 lines above: call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(41,17)
+ call System.Threading.Thread.Yield();
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,37)
+ local1 := i;
+ // ----- load constant 1
+ stack0i := 1;
+ // ----- binary operator
+ stack0i := local1 + stack0i;
+ // ----- copy
+ i := stack0i;
+ // ----- copy
+ stack0i := local1;
+ // ----- branch
+ goto block2516;
+
+ block2516$LoopPreheader:
+ $Heap$block2516$LoopPreheader := $Heap;
+ goto block2516;
+
+}
+
+
+
+procedure Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int);
+ requires args$in == null || (cast($Heap[args$in, $writable]):bool == true && cast($Heap[args$in, $inv]):name == $typeof(args$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures IsAllocated($Heap, $result);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int)
+{
+ var args: ref, stack0o: ref, stack1o: ref, stack50000o: ref, t1: ref, t2: ref, i: int, stack0i: int, stack0b: bool, local3: int, return.value: int, SS$Display.Return.Local: int, $Heap$block3825$LoopPreheader: [ref,name]any;
+
+ entry:
+ assume IsHeap($Heap);
+ args := args$in;
+ assume $Is(args, RefArray(System.String, 1));
+ assume cast($Heap[args$in, $allocated]):bool == true;
+ goto block3791;
+
+ block3791:
+ goto block3808;
+
+ block3808:
+ stack0o := null;
+ // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ havoc stack1o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ assert stack50000o != null;
+ call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ stack0o := stack50000o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ assert stack50000o != null;
+ call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ stack0o := stack50000o;
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ t1 := stack0o;
+ stack0o := null;
+ // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ havoc stack1o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ assert stack50000o != null;
+ call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ stack0o := stack50000o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ assert stack50000o != null;
+ call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ stack0o := stack50000o;
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ t2 := stack0o;
+ // ----- load constant Starting first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
+ stack0o := $stringLiteral10;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(55,13)
+ assert t1 != null;
+ call System.Threading.Thread.Start(t1);
+ // ----- load constant Started first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
+ stack0o := $stringLiteral11;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant Starting second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
+ stack0o := $stringLiteral12;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(59,13)
+ assert t2 != null;
+ call System.Threading.Thread.Start(t2);
+ // ----- load constant Started second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
+ stack0o := $stringLiteral13;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,18)
+ i := 0;
+ goto block3825$LoopPreheader;
+
+ block3825:
+ // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ assert (forall $o: ref :: $Heap$block3825$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool != true);
+ assert (forall $o: ref :: cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ // ----- load constant 30 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ stack0i := 30;
+ // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ stack0b := i >= stack0i;
+ // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ goto true3825to3859, false3825to3842;
+
+ true3825to3859:
+ assume stack0b == true;
+ goto block3859;
+
+ false3825to3842:
+ assume stack0b == false;
+ goto block3842;
+
+ block3859:
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(66,13)
+ return.value := 0;
+ // ----- branch
+ goto block3876;
+
+ block3842:
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(64,17)
+ call System.Threading.Thread.Yield();
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,37)
+ local3 := i;
+ // ----- load constant 1
+ stack0i := 1;
+ // ----- binary operator
+ stack0i := local3 + stack0i;
+ // ----- copy
+ i := stack0i;
+ // ----- copy
+ stack0i := local3;
+ // ----- branch
+ goto block3825;
+
+ block3876:
+ // ----- copy
+ SS$Display.Return.Local := return.value;
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
+ stack0i := return.value;
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
+ $result := stack0i;
+ return;
+
+ block3825$LoopPreheader:
+ $Heap$block3825$LoopPreheader := $Heap;
+ goto block3825;
+
+}
+
+
+
+axiom $IsClass(System.Threading.ThreadStart);
+
+axiom $IsClass(System.MulticastDelegate);
+
+axiom $IsClass(System.Delegate);
+
+axiom System.Delegate <: System.Object && AsDirectSubClass(System.Delegate, System.Object) == System.Delegate;
+
+axiom Implements(System.Delegate, System.ICloneable);
+
+axiom (forall $K: name :: { System.Delegate <: $K } System.Delegate <: $K <==> System.Delegate == $K || System.Object <: $K || System.ICloneable <: $K);
+
+function Inv_System.Delegate(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Delegate(this, heap) } Inv_System.Delegate(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Delegate } { Inv_System.Delegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Delegate ==> Inv_System.Delegate($o, heap));
+
+axiom System.MulticastDelegate <: System.Delegate && AsDirectSubClass(System.MulticastDelegate, System.Delegate) == System.MulticastDelegate;
+
+axiom (forall $K: name :: { System.MulticastDelegate <: $K } System.MulticastDelegate <: $K <==> System.MulticastDelegate == $K || System.Delegate <: $K);
+
+function Inv_System.MulticastDelegate(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.MulticastDelegate(this, heap) } Inv_System.MulticastDelegate(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.MulticastDelegate } { Inv_System.MulticastDelegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.MulticastDelegate ==> Inv_System.MulticastDelegate($o, heap));
+
+axiom System.Threading.ThreadStart <: System.MulticastDelegate && AsDirectSubClass(System.Threading.ThreadStart, System.MulticastDelegate) == System.Threading.ThreadStart;
+
+axiom (forall $K: name :: { System.Threading.ThreadStart <: $K } System.Threading.ThreadStart <: $K <==> System.Threading.ThreadStart == $K || System.MulticastDelegate <: $K);
+
+axiom (forall $U: name :: { $U <: System.Threading.ThreadStart } $U <: System.Threading.ThreadStart ==> $U == System.Threading.ThreadStart);
+
+function Inv_System.Threading.ThreadStart(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.ThreadStart(this, heap) } Inv_System.Threading.ThreadStart(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.ThreadStart } { Inv_System.Threading.ThreadStart($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.ThreadStart ==> Inv_System.Threading.ThreadStart($o, heap));
+
+procedure System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(this: ref, object$in: ref, method$in: ref);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.ThreadStart;
+
+
+
+axiom $IsClass(System.Threading.Thread);
+
+axiom System.Threading.Thread <: System.Object && AsDirectSubClass(System.Threading.Thread, System.Object) == System.Threading.Thread;
+
+axiom (forall $K: name :: { System.Threading.Thread <: $K } System.Threading.Thread <: $K <==> System.Threading.Thread == $K || System.Object <: $K);
+
+axiom (forall $U: name :: { $U <: System.Threading.Thread } $U <: System.Threading.Thread ==> $U == System.Threading.Thread);
+
+function Inv_System.Threading.Thread(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.Thread(this, heap) } Inv_System.Threading.Thread(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.Thread } { Inv_System.Threading.Thread($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.Thread ==> Inv_System.Threading.Thread($o, heap));
+
+procedure System.Threading.Thread..ctor$System.Threading.ThreadStart(this: ref, start$in: ref);
+ requires start$in == null || (cast($Heap[start$in, $writable]):bool == true && cast($Heap[start$in, $inv]):name == $typeof(start$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Threading.Thread <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.Thread;
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+
+
+
+procedure System.Threading.Thread.Start(this: ref);
+ requires cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == $typeof(this);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(Microsoft.Singularity.Applications.ThreadTest <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == Microsoft.Singularity.Applications.ThreadTest;
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref)
+{
+
+ entry:
+ assume IsHeap($Heap);
+ assume $IsNotNull(this, Microsoft.Singularity.Applications.ThreadTest);
+ assume cast($Heap[this, $allocated]):bool == true;
+ assume cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
+ goto block4777;
+
+ block4777:
+ goto block4794;
+
+ block4794:
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,18)
+ assert this != null;
+ call System.Object..ctor(this);
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,28)
+ assert this != null;
+ assert cast($Heap[this, $writable]):bool == true && System.Object <: cast($Heap[this, $inv]):name;
+ assert cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
+ assert Inv_Microsoft.Singularity.Applications.ThreadTest(this, $Heap);
+ $Heap[this, $inv] := Microsoft.Singularity.Applications.ThreadTest;
+ return;
+
+}
+
+
+
+procedure System.Object..ctor(this: ref);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Object <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+
+
+
+type ref, name, any;
+const null : ref;
diff --git a/Test/test2/strings-where.bpl b/Test/test2/strings-where.bpl
index b2ad7217..c9b6772f 100644
--- a/Test/test2/strings-where.bpl
+++ b/Test/test2/strings-where.bpl
@@ -1,997 +1,997 @@
-// RUN: %boogie -noinfer "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-type elements;
-
-type struct;
-
-var $Heap: [ref,name]any where IsHeap($Heap);
-function cast<S,T>(S) returns (T);
-function IsHeap(h: [ref,name]any) returns (bool);
-
-const unique $allocated: name;
-
-const unique $elements: name;
-
-const unique $inv: name;
-
-const unique $writable: name;
-
-const unique $sharingMode: name;
-
-const unique $SharingMode_Unshared: name;
-
-const unique $SharingMode_LockProtected: name;
-
-function ClassRepr(class: name) returns (ref);
-
-axiom (forall c0: name, c1: name :: c0 != c1 ==> ClassRepr(c0) != ClassRepr(c1));
-
-axiom (forall T: name :: !($typeof(ClassRepr(T)) <: System.Object));
-
-axiom (forall T: name :: ClassRepr(T) != null);
-
-axiom (forall T: name, h: [ref,name]any :: { h[ClassRepr(T), $writable] } IsHeap(h) ==> cast(h[ClassRepr(T), $writable]):bool);
-
-function IsDirectlyModifiableField(f: name) returns (bool);
-
-axiom !IsDirectlyModifiableField($allocated);
-
-axiom IsDirectlyModifiableField($elements);
-
-axiom !IsDirectlyModifiableField($inv);
-
-axiom !IsDirectlyModifiableField($writable);
-
-function IsStaticField(f: name) returns (bool);
-
-axiom !IsStaticField($allocated);
-
-axiom !IsStaticField($elements);
-
-axiom !IsStaticField($inv);
-
-axiom !IsStaticField($writable);
-
-function ValueArrayGet(elements, int) returns (any);
-
-function ValueArraySet(elements, int, any) returns (elements);
-
-function RefArrayGet(elements, int) returns (ref);
-
-function RefArraySet(elements, int, ref) returns (elements);
-
-axiom (forall A: elements, i: int, x: any :: ValueArrayGet(ValueArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: any :: i != j ==> ValueArrayGet(ValueArraySet(A, i, x), j) == ValueArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: ref :: RefArrayGet(RefArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> RefArrayGet(RefArraySet(A, i, x), j) == RefArrayGet(A, j));
-
-function ArrayIndex(arr: ref, dim: int, indexAtDim: int, remainingIndexContribution: int) returns (int);
-
-axiom (forall a: ref, d: int, x: int, y: int, x': int, y': int :: ArrayIndex(a, d, x, y) == ArrayIndex(a, d, x', y') ==> x == x' && y == y');
-
-axiom (forall a: ref, T: name, i: int, r: int, heap: [ref,name]any :: $typeof(a) <: RefArray(T, r) ==> $Is(RefArrayGet(cast(heap[a, $elements]):elements, i), T));
-
-function $Rank(ref) returns (int);
-
-axiom (forall a: ref :: 1 <= $Rank(a));
-
-axiom (forall a: ref, T: name, r: int :: { $Is(a, ValueArray(T, r)) } $Is(a, ValueArray(T, r)) ==> $Rank(a) == r);
-
-axiom (forall a: ref, T: name, r: int :: { $Is(a, RefArray(T, r)) } $Is(a, RefArray(T, r)) ==> $Rank(a) == r);
-
-function $Length(ref) returns (int);
-
-axiom (forall a: ref :: { $Length(a) } 0 <= $Length(a));
-
-function $DimLength(ref, int) returns (int);
-
-axiom (forall a: ref, i: int :: 0 <= $DimLength(a, i));
-
-axiom (forall a: ref :: $Rank(a) == 1 ==> $DimLength(a, 0) == $Length(a));
-
-function $LBound(ref, int) returns (int);
-
-function $UBound(ref, int) returns (int);
-
-axiom (forall a: ref, i: int :: { $LBound(a, i) } $LBound(a, i) == 0);
-
-axiom (forall a: ref, i: int :: { $UBound(a, i) } $UBound(a, i) == $DimLength(a, i) - 1);
-
-const unique System.Array: name;
-
-axiom $IsClass(System.Array);
-
-axiom System.Array <: System.Object;
-
-function $ElementType(name) returns (name);
-
-function ValueArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { ValueArray(T, r) } ValueArray(T, r) <: System.Array);
-
-function RefArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { RefArray(T, r) } RefArray(T, r) <: System.Array);
-
-axiom (forall T: name, U: name, r: int :: U <: T ==> RefArray(U, r) <: RefArray(T, r));
-
-axiom (forall A: name, r: int :: $ElementType(ValueArray(A, r)) == A);
-
-axiom (forall A: name, r: int :: $ElementType(RefArray(A, r)) == A);
-
-axiom (forall A: name, r: int, T: name :: { T <: RefArray(A, r) } T <: RefArray(A, r) ==> T == RefArray($ElementType(T), r) && $ElementType(T) <: A);
-
-axiom (forall A: name, r: int, T: name :: { T <: ValueArray(A, r) } T <: ValueArray(A, r) ==> T == ValueArray(A, r));
-
-axiom (forall A: name, r: int, T: name :: RefArray(A, r) <: T ==> System.Array <: T || (T == RefArray($ElementType(T), r) && A <: $ElementType(T)));
-
-axiom (forall A: name, r: int, T: name :: ValueArray(A, r) <: T ==> System.Array <: T || T == ValueArray(A, r));
-
-function $ArrayPtr(elementType: name) returns (name);
-
-function $StructGet(struct, name) returns (any);
-
-function $StructSet(struct, name, any) returns (struct);
-
-axiom (forall s: struct, f: name, x: any :: $StructGet($StructSet(s, f, x), f) == x);
-
-axiom (forall s: struct, f: name, f': name, x: any :: f != f' ==> $StructGet($StructSet(s, f, x), f') == $StructGet(s, f'));
-
-function ZeroInit(s: struct, typ: name) returns (bool);
-
-function $typeof(ref) returns (name);
-
-function Implements(class: name, interface: name) returns (bool);
-
-axiom (forall T: name, J: name :: { Implements(T, J) } Implements(T, J) ==> T <: J);
-
-function InterfaceExtends(subIntf: name, superIntf: name) returns (bool);
-
-axiom (forall J: name, K: name :: { InterfaceExtends(J, K) } InterfaceExtends(J, K) ==> J <: K);
-
-function $IsClass(name) returns (bool);
-
-axiom (forall C: name :: { $IsClass(C) } $IsClass(C) ==> C <: C);
-
-function AsDirectSubClass(sub: name, base: name) returns (sub': name);
-
-function OneClassDown(sub: name, base: name) returns (directSub: name);
-
-axiom (forall A: name, B: name, C: name :: { C <: AsDirectSubClass(B, A) } C <: AsDirectSubClass(B, A) ==> OneClassDown(C, A) == B);
-
-function $IsInterface(name) returns (bool);
-
-axiom (forall J: name :: { $IsInterface(J) } $IsInterface(J) ==> J <: System.Object);
-
-function $IsValueType(name) returns (bool);
-
-axiom (forall T: name :: $IsValueType(T) ==> (forall U: name :: T <: U ==> T == U) && (forall U: name :: U <: T ==> T == U));
-
-const unique System.Object: name;
-
-axiom $IsClass(System.Object);
-
-function $IsTokenForType(struct, name) returns (bool);
-
-function TypeObject(name) returns (ref);
-
-const unique System.Type: name;
-
-axiom System.Type <: System.Object;
-
-axiom (forall T: name :: { TypeObject(T) } $IsNotNull(TypeObject(T), System.Type));
-
-function $Is(ref, name) returns (bool);
-
-axiom (forall o: ref, T: name :: { $Is(o, T) } $Is(o, T) <==> o == null || $typeof(o) <: T);
-
-function $IsNotNull(ref, name) returns (bool);
-
-axiom (forall o: ref, T: name :: { $IsNotNull(o, T) } $IsNotNull(o, T) <==> o != null && $Is(o, T));
-
-function $As(ref, name) returns (ref);
-
-axiom (forall o: ref, T: name :: $Is(o, T) ==> $As(o, T) == o);
-
-axiom (forall o: ref, T: name :: !$Is(o, T) ==> $As(o, T) == null);
-
-axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, RefArray(A, r)) ==> heap[o, $inv] == $typeof(o));
-
-axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, ValueArray(A, r)) ==> heap[o, $inv] == $typeof(o));
-
-function IsAllocated(h: [ref,name]any, o: any) returns (bool);
-
-axiom (forall h: [ref,name]any, o: ref, f: name :: { IsAllocated(h, h[o, f]) } IsHeap(h) ==> IsAllocated(h, h[o, f]));
-
-axiom (forall h: [ref,name]any, s: struct, f: name :: { IsAllocated(h, $StructGet(s, f)) } IsAllocated(h, s) ==> IsAllocated(h, $StructGet(s, f)));
-
-axiom (forall h: [ref,name]any, e: elements, i: int :: { IsAllocated(h, RefArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, RefArrayGet(e, i)));
-
-axiom (forall h: [ref,name]any, o: ref :: { h[o, $allocated] } IsAllocated(h, o) ==> cast(h[o, $allocated]):bool);
-
-axiom (forall h: [ref,name]any, c: name :: { h[ClassRepr(c), $allocated] } IsHeap(h) ==> cast(h[ClassRepr(c), $allocated]):bool);
-
-function DeclType(field: name) returns (class: name);
-
-function AsNonNullRefField(field: name, T: name) returns (f: name);
-
-function AsRefField(field: name, T: name) returns (f: name);
-
-function AsRangeField(field: name, T: name) returns (f: name);
-
-axiom (forall f: name, T: name :: { AsNonNullRefField(f, T) } AsNonNullRefField(f, T) == f ==> AsRefField(f, T) == f);
-
-axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRefField(f, T)] } IsHeap(h) ==> $Is(cast(h[o, AsRefField(f, T)]):ref, T));
-
-axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsNonNullRefField(f, T)] } IsHeap(h) ==> cast(h[o, AsNonNullRefField(f, T)]):ref != null);
-
-axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRangeField(f, T)] } IsHeap(h) ==> InRange(cast(h[o, AsRangeField(f, T)]):int, T));
-
-const unique System.String: name;
-
-axiom (forall h: [ref,name]any, s: ref :: IsHeap(h) && $typeof(s) == System.String ==> h[s, $inv] == $typeof(s) && cast(h[s, $writable]):bool);
-
-function AsOwnedField(f: name) returns (name);
-
-axiom (forall h: [ref,name]any, o: ref, f: name :: { h[o, AsOwnedField(f)] } IsHeap(h) && cast(h[o, $inv]):name <: DeclType(AsOwnedField(f)) ==> cast(h[o, AsOwnedField(f)]):ref == null || $typeof(cast(h[o, AsOwnedField(f)]):ref) == System.String || !cast(h[cast(h[o, AsOwnedField(f)]):ref, $writable]):bool);
-
-axiom (forall h: [ref,name]any, o: ref :: { h[o, $writable] } IsHeap(h) && !cast(h[o, $writable]):bool ==> cast(h[o, $inv]):name == $typeof(o));
-
-function Box(any, ref) returns (ref);
-
-function Unbox(ref) returns (any);
-
-axiom (forall x: any, p: ref :: { Unbox(Box(x, p)) } Unbox(Box(x, p)) == x);
-
-axiom (forall heap: [ref,name]any, x: any, p: ref :: { heap[Box(x, p), $inv] } IsHeap(heap) ==> heap[Box(x, p), $inv] == $typeof(Box(x, p)));
-
-function UnboxedType(ref) returns (name);
-
-function BoxTester(p: ref, typ: name) returns (ref);
-
-axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } UnboxedType(p) == typ <==> BoxTester(p, typ) != null);
-
-const unique System.Int16: name;
-
-axiom $IsValueType(System.Int16);
-
-const unique System.Int32: name;
-
-axiom $IsValueType(System.Int32);
-
-const unique System.Int64: name;
-
-axiom $IsValueType(System.Int64);
-
-const unique System.Byte: name;
-
-axiom $IsValueType(System.Byte);
-
-const unique System.Int16.MinValue: int;
-
-const unique System.Int16.MaxValue: int;
-
-const unique System.Int32.MinValue: int;
-
-const unique System.Int32.MaxValue: int;
-
-const unique System.Int64.MinValue: int;
-
-const unique System.Int64.MaxValue: int;
-
-axiom System.Int64.MinValue < System.Int32.MinValue;
-
-axiom System.Int32.MinValue < System.Int16.MinValue;
-
-axiom System.Int16.MinValue < System.Int16.MaxValue;
-
-axiom System.Int16.MaxValue < System.Int32.MaxValue;
-
-axiom System.Int32.MaxValue < System.Int64.MaxValue;
-
-function InRange(i: int, T: name) returns (bool);
-
-axiom (forall i: int :: InRange(i, System.Int16) <==> System.Int16.MinValue <= i && i <= System.Int16.MaxValue);
-
-axiom (forall i: int :: InRange(i, System.Int32) <==> System.Int32.MinValue <= i && i <= System.Int32.MaxValue);
-
-axiom (forall i: int :: InRange(i, System.Int64) <==> System.Int64.MinValue <= i && i <= System.Int64.MaxValue);
-
-axiom (forall i: int :: { InRange(i, System.Byte) } InRange(i, System.Byte) <==> 0 <= i && i < 256);
-
-function $RealToInt(real) returns (int);
-
-function $IntToReal(int) returns (real);
-
-function $SizeIs(name, int) returns (bool);
-
-function $IfThenElse(bool, any, any) returns (any);
-
-axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } b ==> $IfThenElse(b, x, y) == x);
-
-axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } !b ==> $IfThenElse(b, x, y) == y);
-
-function #neg(int) returns (int);
-
-function #rneg(real) returns (real);
-
-function #rdiv(real, real) returns (real);
-
-function #and(int, int) returns (int);
-
-function #or(int, int) returns (int);
-
-function #xor(int, int) returns (int);
-
-function #shl(int, int) returns (int);
-
-function #shr(int, int) returns (int);
-
-axiom (forall x: int, y: int :: { x mod y } { x div y } x mod y == x - x div y * y);
-
-axiom (forall x: int, y: int :: { x mod y } 0 <= x && 0 < y ==> 0 <= x mod y && x mod y < y);
-
-axiom (forall x: int, y: int :: { x mod y } 0 <= x && y < 0 ==> 0 <= x mod y && x mod y < 0 - y);
-
-axiom (forall x: int, y: int :: { x mod y } x <= 0 && 0 < y ==> 0 - y < x mod y && x mod y <= 0);
-
-axiom (forall x: int, y: int :: { x mod y } x <= 0 && y < 0 ==> y < x mod y && x mod y <= 0);
-
-axiom (forall x: int, y: int :: { (x + y) mod y } 0 <= x && 0 <= y ==> (x + y) mod y == x mod y);
-
-axiom (forall x: int, y: int :: { (y + x) mod y } 0 <= x && 0 <= y ==> (y + x) mod y == x mod y);
-
-axiom (forall x: int, y: int :: { (x - y) mod y } 0 <= x - y && 0 <= y ==> (x - y) mod y == x mod y);
-
-axiom (forall a: int, b: int, d: int :: { a mod d,b mod d } 2 <= d && a mod d == b mod d && a < b ==> a + d <= b);
-
-axiom (forall i: int :: { #shl(i, 0) } #shl(i, 0) == i);
-
-axiom (forall i: int, j: int :: 0 <= j ==> #shl(i, j + 1) == #shl(i, j) * 2);
-
-axiom (forall i: int :: { #shr(i, 0) } #shr(i, 0) == i);
-
-axiom (forall i: int, j: int :: 0 <= j ==> #shr(i, j + 1) == #shr(i, j) div 2);
-
-const unique $UnknownRef: ref;
-
-const unique System.IComparable: name;
-
-const unique Microsoft.Singularity.Applications.ThreadTest: name;
-
-const unique System.Threading.Thread: name;
-
-const unique System.Collections.IEnumerable: name;
-
-const unique System.Threading.ThreadStart: name;
-
-const unique System.ICloneable: name;
-
-const unique System.MulticastDelegate: name;
-
-const unique System.Delegate: name;
-
-const unique $stringLiteral0: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral0, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral0, $allocated]):bool) && $IsNotNull($stringLiteral0, System.String) && $Length($stringLiteral0) == 13;
-
-const unique $stringLiteral1: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral1, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral1, $allocated]):bool) && $IsNotNull($stringLiteral1, System.String) && $Length($stringLiteral1) == 14;
-
-const unique $stringLiteral2: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral2, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral2, $allocated]):bool) && $IsNotNull($stringLiteral2, System.String) && $Length($stringLiteral2) == 11;
-
-const unique $stringLiteral3: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral3, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral3, $allocated]):bool) && $IsNotNull($stringLiteral3, System.String) && $Length($stringLiteral3) == 18;
-
-const unique $stringLiteral4: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral4, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral4, $allocated]):bool) && $IsNotNull($stringLiteral4, System.String) && $Length($stringLiteral4) == 19;
-
-const unique $stringLiteral5: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral5, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral5, $allocated]):bool) && $IsNotNull($stringLiteral5, System.String) && $Length($stringLiteral5) == 14;
-
-const unique $stringLiteral6: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral6, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral6, $allocated]):bool) && $IsNotNull($stringLiteral6, System.String) && $Length($stringLiteral6) == 15;
-
-const unique $stringLiteral7: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral7, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral7, $allocated]):bool) && $IsNotNull($stringLiteral7, System.String) && $Length($stringLiteral7) == 11;
-
-const unique $stringLiteral8: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral8, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral8, $allocated]):bool) && $IsNotNull($stringLiteral8, System.String) && $Length($stringLiteral8) == 19;
-
-const unique $stringLiteral9: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral9, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral9, $allocated]):bool) && $IsNotNull($stringLiteral9, System.String) && $Length($stringLiteral9) == 20;
-
-const unique $stringLiteral10: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral10, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral10, $allocated]):bool) && $IsNotNull($stringLiteral10, System.String) && $Length($stringLiteral10) == 22;
-
-const unique $stringLiteral11: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral11, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral11, $allocated]):bool) && $IsNotNull($stringLiteral11, System.String) && $Length($stringLiteral11) == 21;
-
-const unique $stringLiteral12: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral12, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral12, $allocated]):bool) && $IsNotNull($stringLiteral12, System.String) && $Length($stringLiteral12) == 23;
-
-const unique $stringLiteral13: ref;
-
-axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral13, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral13, $allocated]):bool) && $IsNotNull($stringLiteral13, System.String) && $Length($stringLiteral13) == 22;
-
-axiom $IsClass(Microsoft.Singularity.Applications.ThreadTest);
-
-axiom Microsoft.Singularity.Applications.ThreadTest <: System.Object && AsDirectSubClass(Microsoft.Singularity.Applications.ThreadTest, System.Object) == Microsoft.Singularity.Applications.ThreadTest;
-
-axiom (forall $K: name :: { Microsoft.Singularity.Applications.ThreadTest <: $K } Microsoft.Singularity.Applications.ThreadTest <: $K <==> Microsoft.Singularity.Applications.ThreadTest == $K || System.Object <: $K);
-
-function Inv_Microsoft.Singularity.Applications.ThreadTest(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) } Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest } { Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest ==> Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap));
-
-procedure Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod();
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod()
-{
- var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block1513$LoopPreheader: [ref,name]any;
-
- entry:
- assume IsHeap($Heap);
- goto block1479;
-
- block1479:
- goto block1496;
-
- block1496:
- // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
- stack0o := $stringLiteral0;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
- stack0o := $stringLiteral1;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,18)
- i := 0;
- goto block1513$LoopPreheader;
-
- block1513:
- // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- assert (forall $o: ref :: $Heap$block1513$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool != true);
- assert (forall $o: ref :: cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- stack0i := 10;
- // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- stack0b := i >= stack0i;
- // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
- goto true1513to1547, false1513to1530;
-
- true1513to1547:
- assume stack0b == true;
- goto block1547;
-
- false1513to1530:
- assume stack0b == false;
- goto block1530;
-
- block1547:
- // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
- stack0o := $stringLiteral3;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
- stack0o := $stringLiteral4;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(31,10)
- return;
-
- block1530:
- // ----- load constant [0] ... ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
- stack0o := $stringLiteral2;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(26,17)
- call System.Threading.Thread.Yield();
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,37)
- local1 := i;
- // ----- load constant 1
- stack0i := 1;
- // ----- binary operator
- stack0i := local1 + stack0i;
- // ----- copy
- i := stack0i;
- // ----- copy
- stack0i := local1;
- // ----- branch
- goto block1513;
-
- block1513$LoopPreheader:
- $Heap$block1513$LoopPreheader := $Heap;
- goto block1513;
-
-}
-
-
-
-axiom $IsClass(System.String);
-
-axiom System.String <: System.Object && AsDirectSubClass(System.String, System.Object) == System.String;
-
-axiom $IsInterface(System.IComparable);
-
-axiom (forall $K: name :: { System.IComparable <: $K } System.IComparable <: $K <==> System.IComparable == $K || System.Object == $K);
-
-axiom Implements(System.String, System.IComparable);
-
-axiom $IsInterface(System.ICloneable);
-
-axiom (forall $K: name :: { System.ICloneable <: $K } System.ICloneable <: $K <==> System.ICloneable == $K || System.Object == $K);
-
-axiom Implements(System.String, System.ICloneable);
-
-axiom $IsInterface(System.Collections.IEnumerable);
-
-axiom (forall $K: name :: { System.Collections.IEnumerable <: $K } System.Collections.IEnumerable <: $K <==> System.Collections.IEnumerable == $K || System.Object == $K);
-
-axiom Implements(System.String, System.Collections.IEnumerable);
-
-axiom (forall $K: name :: { System.String <: $K } System.String <: $K <==> System.String == $K || System.Object <: $K || System.IComparable <: $K || System.ICloneable <: $K || System.Collections.IEnumerable <: $K);
-
-axiom (forall $U: name :: { $U <: System.String } $U <: System.String ==> $U == System.String);
-
-function Inv_System.String(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.String(this, heap) } Inv_System.String(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.String } { Inv_System.String($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.String ==> Inv_System.String($o, heap));
-
-procedure System.Console.WriteLine$System.String(value$in: ref);
- requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Microsoft.Singularity.DebugStub.Print$System.String(value$in: ref);
- requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure System.Threading.Thread.Yield();
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod();
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod()
-{
- var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block2516$LoopPreheader: [ref,name]any;
-
- entry:
- assume IsHeap($Heap);
- goto block2482;
-
- block2482:
- goto block2499;
-
- block2499:
- // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
- stack0o := $stringLiteral5;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
- stack0o := $stringLiteral6;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,18)
- i := 0;
- goto block2516$LoopPreheader;
-
- block2516:
- // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- assert (forall $o: ref :: $Heap$block2516$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool != true);
- assert (forall $o: ref :: cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- stack0i := 10;
- // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- stack0b := i >= stack0i;
- // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
- goto true2516to2550, false2516to2533;
-
- true2516to2550:
- assume stack0b == true;
- goto block2550;
-
- false2516to2533:
- assume stack0b == false;
- goto block2533;
-
- block2550:
- // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
- stack0o := $stringLiteral8;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
- stack0o := $stringLiteral9;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
- call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(46,10)
- return;
-
- block2533:
- // ----- load constant ... [1] ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
- stack0o := $stringLiteral7;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(41,17)
- call System.Threading.Thread.Yield();
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,37)
- local1 := i;
- // ----- load constant 1
- stack0i := 1;
- // ----- binary operator
- stack0i := local1 + stack0i;
- // ----- copy
- i := stack0i;
- // ----- copy
- stack0i := local1;
- // ----- branch
- goto block2516;
-
- block2516$LoopPreheader:
- $Heap$block2516$LoopPreheader := $Heap;
- goto block2516;
-
-}
-
-
-
-procedure Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int);
- requires args$in == null || (cast($Heap[args$in, $writable]):bool == true && cast($Heap[args$in, $inv]):name == $typeof(args$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures IsAllocated($Heap, $result);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int)
-{
- var args: ref, stack0o: ref, stack1o: ref, stack50000o: ref, t1: ref, t2: ref, i: int, stack0i: int, stack0b: bool, local3: int, return.value: int, SS$Display.Return.Local: int, $Heap$block3825$LoopPreheader: [ref,name]any;
-
- entry:
- assume IsHeap($Heap);
- args := args$in;
- assume $Is(args, RefArray(System.String, 1));
- assume cast($Heap[args$in, $allocated]):bool == true;
- goto block3791;
-
- block3791:
- goto block3808;
-
- block3808:
- stack0o := null;
- // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- havoc stack1o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- assert stack50000o != null;
- call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- stack0o := stack50000o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- assert stack50000o != null;
- call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- stack0o := stack50000o;
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
- t1 := stack0o;
- stack0o := null;
- // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- havoc stack1o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- assert stack50000o != null;
- call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- stack0o := stack50000o;
- // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- havoc stack50000o;
- assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
- $Heap[stack50000o, $allocated] := true;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- assert stack50000o != null;
- call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- stack0o := stack50000o;
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
- t2 := stack0o;
- // ----- load constant Starting first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
- stack0o := $stringLiteral10;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(55,13)
- assert t1 != null;
- call System.Threading.Thread.Start(t1);
- // ----- load constant Started first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
- stack0o := $stringLiteral11;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant Starting second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
- stack0o := $stringLiteral12;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(59,13)
- assert t2 != null;
- call System.Threading.Thread.Start(t2);
- // ----- load constant Started second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
- stack0o := $stringLiteral13;
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
- call System.Console.WriteLine$System.String(stack0o);
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,18)
- i := 0;
- goto block3825$LoopPreheader;
-
- block3825:
- // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- assert (forall $o: ref :: $Heap$block3825$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool != true);
- assert (forall $o: ref :: cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- // ----- load constant 30 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- stack0i := 30;
- // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- stack0b := i >= stack0i;
- // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
- goto true3825to3859, false3825to3842;
-
- true3825to3859:
- assume stack0b == true;
- goto block3859;
-
- false3825to3842:
- assume stack0b == false;
- goto block3842;
-
- block3859:
- // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(66,13)
- return.value := 0;
- // ----- branch
- goto block3876;
-
- block3842:
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(64,17)
- call System.Threading.Thread.Yield();
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,37)
- local3 := i;
- // ----- load constant 1
- stack0i := 1;
- // ----- binary operator
- stack0i := local3 + stack0i;
- // ----- copy
- i := stack0i;
- // ----- copy
- stack0i := local3;
- // ----- branch
- goto block3825;
-
- block3876:
- // ----- copy
- SS$Display.Return.Local := return.value;
- // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
- stack0i := return.value;
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
- $result := stack0i;
- return;
-
- block3825$LoopPreheader:
- $Heap$block3825$LoopPreheader := $Heap;
- goto block3825;
-
-}
-
-
-
-axiom $IsClass(System.Threading.ThreadStart);
-
-axiom $IsClass(System.MulticastDelegate);
-
-axiom $IsClass(System.Delegate);
-
-axiom System.Delegate <: System.Object && AsDirectSubClass(System.Delegate, System.Object) == System.Delegate;
-
-axiom Implements(System.Delegate, System.ICloneable);
-
-axiom (forall $K: name :: { System.Delegate <: $K } System.Delegate <: $K <==> System.Delegate == $K || System.Object <: $K || System.ICloneable <: $K);
-
-function Inv_System.Delegate(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Delegate(this, heap) } Inv_System.Delegate(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Delegate } { Inv_System.Delegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Delegate ==> Inv_System.Delegate($o, heap));
-
-axiom System.MulticastDelegate <: System.Delegate && AsDirectSubClass(System.MulticastDelegate, System.Delegate) == System.MulticastDelegate;
-
-axiom (forall $K: name :: { System.MulticastDelegate <: $K } System.MulticastDelegate <: $K <==> System.MulticastDelegate == $K || System.Delegate <: $K);
-
-function Inv_System.MulticastDelegate(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.MulticastDelegate(this, heap) } Inv_System.MulticastDelegate(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.MulticastDelegate } { Inv_System.MulticastDelegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.MulticastDelegate ==> Inv_System.MulticastDelegate($o, heap));
-
-axiom System.Threading.ThreadStart <: System.MulticastDelegate && AsDirectSubClass(System.Threading.ThreadStart, System.MulticastDelegate) == System.Threading.ThreadStart;
-
-axiom (forall $K: name :: { System.Threading.ThreadStart <: $K } System.Threading.ThreadStart <: $K <==> System.Threading.ThreadStart == $K || System.MulticastDelegate <: $K);
-
-axiom (forall $U: name :: { $U <: System.Threading.ThreadStart } $U <: System.Threading.ThreadStart ==> $U == System.Threading.ThreadStart);
-
-function Inv_System.Threading.ThreadStart(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.ThreadStart(this, heap) } Inv_System.Threading.ThreadStart(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.ThreadStart } { Inv_System.Threading.ThreadStart($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.ThreadStart ==> Inv_System.Threading.ThreadStart($o, heap));
-
-procedure System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(this: ref, object$in: ref, method$in: ref);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.ThreadStart;
-
-
-
-axiom $IsClass(System.Threading.Thread);
-
-axiom System.Threading.Thread <: System.Object && AsDirectSubClass(System.Threading.Thread, System.Object) == System.Threading.Thread;
-
-axiom (forall $K: name :: { System.Threading.Thread <: $K } System.Threading.Thread <: $K <==> System.Threading.Thread == $K || System.Object <: $K);
-
-axiom (forall $U: name :: { $U <: System.Threading.Thread } $U <: System.Threading.Thread ==> $U == System.Threading.Thread);
-
-function Inv_System.Threading.Thread(object: ref, heap: [ref,name]any) returns (result: bool);
-
-axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.Thread(this, heap) } Inv_System.Threading.Thread(this, heap) <==> true);
-
-axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.Thread } { Inv_System.Threading.Thread($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.Thread ==> Inv_System.Threading.Thread($o, heap));
-
-procedure System.Threading.Thread..ctor$System.Threading.ThreadStart(this: ref, start$in: ref);
- requires start$in == null || (cast($Heap[start$in, $writable]):bool == true && cast($Heap[start$in, $inv]):name == $typeof(start$in));
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Threading.Thread <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.Thread;
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
-
-
-
-procedure System.Threading.Thread.Start(this: ref);
- requires cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == $typeof(this);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(Microsoft.Singularity.Applications.ThreadTest <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == Microsoft.Singularity.Applications.ThreadTest;
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
-
-
-
-implementation Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref)
-{
-
- entry:
- assume IsHeap($Heap);
- assume $IsNotNull(this, Microsoft.Singularity.Applications.ThreadTest);
- assume cast($Heap[this, $allocated]):bool == true;
- assume cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
- goto block4777;
-
- block4777:
- goto block4794;
-
- block4794:
- // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,18)
- assert this != null;
- call System.Object..ctor(this);
- // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,28)
- assert this != null;
- assert cast($Heap[this, $writable]):bool == true && System.Object <: cast($Heap[this, $inv]):name;
- assert cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
- assert Inv_Microsoft.Singularity.Applications.ThreadTest(this, $Heap);
- $Heap[this, $inv] := Microsoft.Singularity.Applications.ThreadTest;
- return;
-
-}
-
-
-
-procedure System.Object..ctor(this: ref);
- modifies $Heap;
- free ensures IsHeap($Heap);
- free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Object <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
- free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
- free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
- free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
- ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
-
-
-
-type ref, name, any;
-const null : ref;
+// RUN: %boogie -noinfer "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+type elements;
+
+type struct;
+
+var $Heap: [ref,name]any where IsHeap($Heap);
+function cast<S,T>(S) returns (T);
+function IsHeap(h: [ref,name]any) returns (bool);
+
+const unique $allocated: name;
+
+const unique $elements: name;
+
+const unique $inv: name;
+
+const unique $writable: name;
+
+const unique $sharingMode: name;
+
+const unique $SharingMode_Unshared: name;
+
+const unique $SharingMode_LockProtected: name;
+
+function ClassRepr(class: name) returns (ref);
+
+axiom (forall c0: name, c1: name :: c0 != c1 ==> ClassRepr(c0) != ClassRepr(c1));
+
+axiom (forall T: name :: !($typeof(ClassRepr(T)) <: System.Object));
+
+axiom (forall T: name :: ClassRepr(T) != null);
+
+axiom (forall T: name, h: [ref,name]any :: { h[ClassRepr(T), $writable] } IsHeap(h) ==> cast(h[ClassRepr(T), $writable]):bool);
+
+function IsDirectlyModifiableField(f: name) returns (bool);
+
+axiom !IsDirectlyModifiableField($allocated);
+
+axiom IsDirectlyModifiableField($elements);
+
+axiom !IsDirectlyModifiableField($inv);
+
+axiom !IsDirectlyModifiableField($writable);
+
+function IsStaticField(f: name) returns (bool);
+
+axiom !IsStaticField($allocated);
+
+axiom !IsStaticField($elements);
+
+axiom !IsStaticField($inv);
+
+axiom !IsStaticField($writable);
+
+function ValueArrayGet(elements, int) returns (any);
+
+function ValueArraySet(elements, int, any) returns (elements);
+
+function RefArrayGet(elements, int) returns (ref);
+
+function RefArraySet(elements, int, ref) returns (elements);
+
+axiom (forall A: elements, i: int, x: any :: ValueArrayGet(ValueArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: any :: i != j ==> ValueArrayGet(ValueArraySet(A, i, x), j) == ValueArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: ref :: RefArrayGet(RefArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> RefArrayGet(RefArraySet(A, i, x), j) == RefArrayGet(A, j));
+
+function ArrayIndex(arr: ref, dim: int, indexAtDim: int, remainingIndexContribution: int) returns (int);
+
+axiom (forall a: ref, d: int, x: int, y: int, x': int, y': int :: ArrayIndex(a, d, x, y) == ArrayIndex(a, d, x', y') ==> x == x' && y == y');
+
+axiom (forall a: ref, T: name, i: int, r: int, heap: [ref,name]any :: $typeof(a) <: RefArray(T, r) ==> $Is(RefArrayGet(cast(heap[a, $elements]):elements, i), T));
+
+function $Rank(ref) returns (int);
+
+axiom (forall a: ref :: 1 <= $Rank(a));
+
+axiom (forall a: ref, T: name, r: int :: { $Is(a, ValueArray(T, r)) } $Is(a, ValueArray(T, r)) ==> $Rank(a) == r);
+
+axiom (forall a: ref, T: name, r: int :: { $Is(a, RefArray(T, r)) } $Is(a, RefArray(T, r)) ==> $Rank(a) == r);
+
+function $Length(ref) returns (int);
+
+axiom (forall a: ref :: { $Length(a) } 0 <= $Length(a));
+
+function $DimLength(ref, int) returns (int);
+
+axiom (forall a: ref, i: int :: 0 <= $DimLength(a, i));
+
+axiom (forall a: ref :: $Rank(a) == 1 ==> $DimLength(a, 0) == $Length(a));
+
+function $LBound(ref, int) returns (int);
+
+function $UBound(ref, int) returns (int);
+
+axiom (forall a: ref, i: int :: { $LBound(a, i) } $LBound(a, i) == 0);
+
+axiom (forall a: ref, i: int :: { $UBound(a, i) } $UBound(a, i) == $DimLength(a, i) - 1);
+
+const unique System.Array: name;
+
+axiom $IsClass(System.Array);
+
+axiom System.Array <: System.Object;
+
+function $ElementType(name) returns (name);
+
+function ValueArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { ValueArray(T, r) } ValueArray(T, r) <: System.Array);
+
+function RefArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { RefArray(T, r) } RefArray(T, r) <: System.Array);
+
+axiom (forall T: name, U: name, r: int :: U <: T ==> RefArray(U, r) <: RefArray(T, r));
+
+axiom (forall A: name, r: int :: $ElementType(ValueArray(A, r)) == A);
+
+axiom (forall A: name, r: int :: $ElementType(RefArray(A, r)) == A);
+
+axiom (forall A: name, r: int, T: name :: { T <: RefArray(A, r) } T <: RefArray(A, r) ==> T == RefArray($ElementType(T), r) && $ElementType(T) <: A);
+
+axiom (forall A: name, r: int, T: name :: { T <: ValueArray(A, r) } T <: ValueArray(A, r) ==> T == ValueArray(A, r));
+
+axiom (forall A: name, r: int, T: name :: RefArray(A, r) <: T ==> System.Array <: T || (T == RefArray($ElementType(T), r) && A <: $ElementType(T)));
+
+axiom (forall A: name, r: int, T: name :: ValueArray(A, r) <: T ==> System.Array <: T || T == ValueArray(A, r));
+
+function $ArrayPtr(elementType: name) returns (name);
+
+function $StructGet(struct, name) returns (any);
+
+function $StructSet(struct, name, any) returns (struct);
+
+axiom (forall s: struct, f: name, x: any :: $StructGet($StructSet(s, f, x), f) == x);
+
+axiom (forall s: struct, f: name, f': name, x: any :: f != f' ==> $StructGet($StructSet(s, f, x), f') == $StructGet(s, f'));
+
+function ZeroInit(s: struct, typ: name) returns (bool);
+
+function $typeof(ref) returns (name);
+
+function Implements(class: name, interface: name) returns (bool);
+
+axiom (forall T: name, J: name :: { Implements(T, J) } Implements(T, J) ==> T <: J);
+
+function InterfaceExtends(subIntf: name, superIntf: name) returns (bool);
+
+axiom (forall J: name, K: name :: { InterfaceExtends(J, K) } InterfaceExtends(J, K) ==> J <: K);
+
+function $IsClass(name) returns (bool);
+
+axiom (forall C: name :: { $IsClass(C) } $IsClass(C) ==> C <: C);
+
+function AsDirectSubClass(sub: name, base: name) returns (sub': name);
+
+function OneClassDown(sub: name, base: name) returns (directSub: name);
+
+axiom (forall A: name, B: name, C: name :: { C <: AsDirectSubClass(B, A) } C <: AsDirectSubClass(B, A) ==> OneClassDown(C, A) == B);
+
+function $IsInterface(name) returns (bool);
+
+axiom (forall J: name :: { $IsInterface(J) } $IsInterface(J) ==> J <: System.Object);
+
+function $IsValueType(name) returns (bool);
+
+axiom (forall T: name :: $IsValueType(T) ==> (forall U: name :: T <: U ==> T == U) && (forall U: name :: U <: T ==> T == U));
+
+const unique System.Object: name;
+
+axiom $IsClass(System.Object);
+
+function $IsTokenForType(struct, name) returns (bool);
+
+function TypeObject(name) returns (ref);
+
+const unique System.Type: name;
+
+axiom System.Type <: System.Object;
+
+axiom (forall T: name :: { TypeObject(T) } $IsNotNull(TypeObject(T), System.Type));
+
+function $Is(ref, name) returns (bool);
+
+axiom (forall o: ref, T: name :: { $Is(o, T) } $Is(o, T) <==> o == null || $typeof(o) <: T);
+
+function $IsNotNull(ref, name) returns (bool);
+
+axiom (forall o: ref, T: name :: { $IsNotNull(o, T) } $IsNotNull(o, T) <==> o != null && $Is(o, T));
+
+function $As(ref, name) returns (ref);
+
+axiom (forall o: ref, T: name :: $Is(o, T) ==> $As(o, T) == o);
+
+axiom (forall o: ref, T: name :: !$Is(o, T) ==> $As(o, T) == null);
+
+axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, RefArray(A, r)) ==> heap[o, $inv] == $typeof(o));
+
+axiom (forall heap: [ref,name]any, o: ref, A: name, r: int :: $Is(o, ValueArray(A, r)) ==> heap[o, $inv] == $typeof(o));
+
+function IsAllocated(h: [ref,name]any, o: any) returns (bool);
+
+axiom (forall h: [ref,name]any, o: ref, f: name :: { IsAllocated(h, h[o, f]) } IsHeap(h) ==> IsAllocated(h, h[o, f]));
+
+axiom (forall h: [ref,name]any, s: struct, f: name :: { IsAllocated(h, $StructGet(s, f)) } IsAllocated(h, s) ==> IsAllocated(h, $StructGet(s, f)));
+
+axiom (forall h: [ref,name]any, e: elements, i: int :: { IsAllocated(h, RefArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, RefArrayGet(e, i)));
+
+axiom (forall h: [ref,name]any, o: ref :: { h[o, $allocated] } IsAllocated(h, o) ==> cast(h[o, $allocated]):bool);
+
+axiom (forall h: [ref,name]any, c: name :: { h[ClassRepr(c), $allocated] } IsHeap(h) ==> cast(h[ClassRepr(c), $allocated]):bool);
+
+function DeclType(field: name) returns (class: name);
+
+function AsNonNullRefField(field: name, T: name) returns (f: name);
+
+function AsRefField(field: name, T: name) returns (f: name);
+
+function AsRangeField(field: name, T: name) returns (f: name);
+
+axiom (forall f: name, T: name :: { AsNonNullRefField(f, T) } AsNonNullRefField(f, T) == f ==> AsRefField(f, T) == f);
+
+axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRefField(f, T)] } IsHeap(h) ==> $Is(cast(h[o, AsRefField(f, T)]):ref, T));
+
+axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsNonNullRefField(f, T)] } IsHeap(h) ==> cast(h[o, AsNonNullRefField(f, T)]):ref != null);
+
+axiom (forall h: [ref,name]any, o: ref, f: name, T: name :: { h[o, AsRangeField(f, T)] } IsHeap(h) ==> InRange(cast(h[o, AsRangeField(f, T)]):int, T));
+
+const unique System.String: name;
+
+axiom (forall h: [ref,name]any, s: ref :: IsHeap(h) && $typeof(s) == System.String ==> h[s, $inv] == $typeof(s) && cast(h[s, $writable]):bool);
+
+function AsOwnedField(f: name) returns (name);
+
+axiom (forall h: [ref,name]any, o: ref, f: name :: { h[o, AsOwnedField(f)] } IsHeap(h) && cast(h[o, $inv]):name <: DeclType(AsOwnedField(f)) ==> cast(h[o, AsOwnedField(f)]):ref == null || $typeof(cast(h[o, AsOwnedField(f)]):ref) == System.String || !cast(h[cast(h[o, AsOwnedField(f)]):ref, $writable]):bool);
+
+axiom (forall h: [ref,name]any, o: ref :: { h[o, $writable] } IsHeap(h) && !cast(h[o, $writable]):bool ==> cast(h[o, $inv]):name == $typeof(o));
+
+function Box(any, ref) returns (ref);
+
+function Unbox(ref) returns (any);
+
+axiom (forall x: any, p: ref :: { Unbox(Box(x, p)) } Unbox(Box(x, p)) == x);
+
+axiom (forall heap: [ref,name]any, x: any, p: ref :: { heap[Box(x, p), $inv] } IsHeap(heap) ==> heap[Box(x, p), $inv] == $typeof(Box(x, p)));
+
+function UnboxedType(ref) returns (name);
+
+function BoxTester(p: ref, typ: name) returns (ref);
+
+axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } UnboxedType(p) == typ <==> BoxTester(p, typ) != null);
+
+const unique System.Int16: name;
+
+axiom $IsValueType(System.Int16);
+
+const unique System.Int32: name;
+
+axiom $IsValueType(System.Int32);
+
+const unique System.Int64: name;
+
+axiom $IsValueType(System.Int64);
+
+const unique System.Byte: name;
+
+axiom $IsValueType(System.Byte);
+
+const unique System.Int16.MinValue: int;
+
+const unique System.Int16.MaxValue: int;
+
+const unique System.Int32.MinValue: int;
+
+const unique System.Int32.MaxValue: int;
+
+const unique System.Int64.MinValue: int;
+
+const unique System.Int64.MaxValue: int;
+
+axiom System.Int64.MinValue < System.Int32.MinValue;
+
+axiom System.Int32.MinValue < System.Int16.MinValue;
+
+axiom System.Int16.MinValue < System.Int16.MaxValue;
+
+axiom System.Int16.MaxValue < System.Int32.MaxValue;
+
+axiom System.Int32.MaxValue < System.Int64.MaxValue;
+
+function InRange(i: int, T: name) returns (bool);
+
+axiom (forall i: int :: InRange(i, System.Int16) <==> System.Int16.MinValue <= i && i <= System.Int16.MaxValue);
+
+axiom (forall i: int :: InRange(i, System.Int32) <==> System.Int32.MinValue <= i && i <= System.Int32.MaxValue);
+
+axiom (forall i: int :: InRange(i, System.Int64) <==> System.Int64.MinValue <= i && i <= System.Int64.MaxValue);
+
+axiom (forall i: int :: { InRange(i, System.Byte) } InRange(i, System.Byte) <==> 0 <= i && i < 256);
+
+function $RealToInt(real) returns (int);
+
+function $IntToReal(int) returns (real);
+
+function $SizeIs(name, int) returns (bool);
+
+function $IfThenElse(bool, any, any) returns (any);
+
+axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } b ==> $IfThenElse(b, x, y) == x);
+
+axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } !b ==> $IfThenElse(b, x, y) == y);
+
+function #neg(int) returns (int);
+
+function #rneg(real) returns (real);
+
+function #rdiv(real, real) returns (real);
+
+function #and(int, int) returns (int);
+
+function #or(int, int) returns (int);
+
+function #xor(int, int) returns (int);
+
+function #shl(int, int) returns (int);
+
+function #shr(int, int) returns (int);
+
+axiom (forall x: int, y: int :: { x mod y } { x div y } x mod y == x - x div y * y);
+
+axiom (forall x: int, y: int :: { x mod y } 0 <= x && 0 < y ==> 0 <= x mod y && x mod y < y);
+
+axiom (forall x: int, y: int :: { x mod y } 0 <= x && y < 0 ==> 0 <= x mod y && x mod y < 0 - y);
+
+axiom (forall x: int, y: int :: { x mod y } x <= 0 && 0 < y ==> 0 - y < x mod y && x mod y <= 0);
+
+axiom (forall x: int, y: int :: { x mod y } x <= 0 && y < 0 ==> y < x mod y && x mod y <= 0);
+
+axiom (forall x: int, y: int :: { (x + y) mod y } 0 <= x && 0 <= y ==> (x + y) mod y == x mod y);
+
+axiom (forall x: int, y: int :: { (y + x) mod y } 0 <= x && 0 <= y ==> (y + x) mod y == x mod y);
+
+axiom (forall x: int, y: int :: { (x - y) mod y } 0 <= x - y && 0 <= y ==> (x - y) mod y == x mod y);
+
+axiom (forall a: int, b: int, d: int :: { a mod d,b mod d } 2 <= d && a mod d == b mod d && a < b ==> a + d <= b);
+
+axiom (forall i: int :: { #shl(i, 0) } #shl(i, 0) == i);
+
+axiom (forall i: int, j: int :: 0 <= j ==> #shl(i, j + 1) == #shl(i, j) * 2);
+
+axiom (forall i: int :: { #shr(i, 0) } #shr(i, 0) == i);
+
+axiom (forall i: int, j: int :: 0 <= j ==> #shr(i, j + 1) == #shr(i, j) div 2);
+
+const unique $UnknownRef: ref;
+
+const unique System.IComparable: name;
+
+const unique Microsoft.Singularity.Applications.ThreadTest: name;
+
+const unique System.Threading.Thread: name;
+
+const unique System.Collections.IEnumerable: name;
+
+const unique System.Threading.ThreadStart: name;
+
+const unique System.ICloneable: name;
+
+const unique System.MulticastDelegate: name;
+
+const unique System.Delegate: name;
+
+const unique $stringLiteral0: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral0, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral0, $allocated]):bool) && $IsNotNull($stringLiteral0, System.String) && $Length($stringLiteral0) == 13;
+
+const unique $stringLiteral1: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral1, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral1, $allocated]):bool) && $IsNotNull($stringLiteral1, System.String) && $Length($stringLiteral1) == 14;
+
+const unique $stringLiteral2: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral2, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral2, $allocated]):bool) && $IsNotNull($stringLiteral2, System.String) && $Length($stringLiteral2) == 11;
+
+const unique $stringLiteral3: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral3, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral3, $allocated]):bool) && $IsNotNull($stringLiteral3, System.String) && $Length($stringLiteral3) == 18;
+
+const unique $stringLiteral4: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral4, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral4, $allocated]):bool) && $IsNotNull($stringLiteral4, System.String) && $Length($stringLiteral4) == 19;
+
+const unique $stringLiteral5: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral5, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral5, $allocated]):bool) && $IsNotNull($stringLiteral5, System.String) && $Length($stringLiteral5) == 14;
+
+const unique $stringLiteral6: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral6, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral6, $allocated]):bool) && $IsNotNull($stringLiteral6, System.String) && $Length($stringLiteral6) == 15;
+
+const unique $stringLiteral7: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral7, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral7, $allocated]):bool) && $IsNotNull($stringLiteral7, System.String) && $Length($stringLiteral7) == 11;
+
+const unique $stringLiteral8: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral8, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral8, $allocated]):bool) && $IsNotNull($stringLiteral8, System.String) && $Length($stringLiteral8) == 19;
+
+const unique $stringLiteral9: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral9, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral9, $allocated]):bool) && $IsNotNull($stringLiteral9, System.String) && $Length($stringLiteral9) == 20;
+
+const unique $stringLiteral10: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral10, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral10, $allocated]):bool) && $IsNotNull($stringLiteral10, System.String) && $Length($stringLiteral10) == 22;
+
+const unique $stringLiteral11: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral11, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral11, $allocated]):bool) && $IsNotNull($stringLiteral11, System.String) && $Length($stringLiteral11) == 21;
+
+const unique $stringLiteral12: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral12, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral12, $allocated]):bool) && $IsNotNull($stringLiteral12, System.String) && $Length($stringLiteral12) == 23;
+
+const unique $stringLiteral13: ref;
+
+axiom (forall heap: [ref,name]any :: { cast(heap[$stringLiteral13, $allocated]):bool } IsHeap(heap) ==> cast(heap[$stringLiteral13, $allocated]):bool) && $IsNotNull($stringLiteral13, System.String) && $Length($stringLiteral13) == 22;
+
+axiom $IsClass(Microsoft.Singularity.Applications.ThreadTest);
+
+axiom Microsoft.Singularity.Applications.ThreadTest <: System.Object && AsDirectSubClass(Microsoft.Singularity.Applications.ThreadTest, System.Object) == Microsoft.Singularity.Applications.ThreadTest;
+
+axiom (forall $K: name :: { Microsoft.Singularity.Applications.ThreadTest <: $K } Microsoft.Singularity.Applications.ThreadTest <: $K <==> Microsoft.Singularity.Applications.ThreadTest == $K || System.Object <: $K);
+
+function Inv_Microsoft.Singularity.Applications.ThreadTest(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) } Inv_Microsoft.Singularity.Applications.ThreadTest(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest } { Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: Microsoft.Singularity.Applications.ThreadTest ==> Inv_Microsoft.Singularity.Applications.ThreadTest($o, heap));
+
+procedure Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod();
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest.FirstThreadMethod()
+{
+ var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block1513$LoopPreheader: [ref,name]any;
+
+ entry:
+ assume IsHeap($Heap);
+ goto block1479;
+
+ block1479:
+ goto block1496;
+
+ block1496:
+ // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
+ stack0o := $stringLiteral0;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(21,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant First thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
+ stack0o := $stringLiteral1;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(22,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,18)
+ i := 0;
+ goto block1513$LoopPreheader;
+
+ block1513:
+ // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ assert (forall $o: ref :: $Heap$block1513$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool != true);
+ assert (forall $o: ref :: cast($Heap$block1513$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ stack0i := 10;
+ // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ stack0b := i >= stack0i;
+ // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,29)
+ goto true1513to1547, false1513to1530;
+
+ true1513to1547:
+ assume stack0b == true;
+ goto block1547;
+
+ false1513to1530:
+ assume stack0b == false;
+ goto block1530;
+
+ block1547:
+ // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
+ stack0o := $stringLiteral3;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(29,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant First thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
+ stack0o := $stringLiteral4;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(30,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(31,10)
+ return;
+
+ block1530:
+ // ----- load constant [0] ... ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
+ stack0o := $stringLiteral2;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(25,17)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(26,17)
+ call System.Threading.Thread.Yield();
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(24,37)
+ local1 := i;
+ // ----- load constant 1
+ stack0i := 1;
+ // ----- binary operator
+ stack0i := local1 + stack0i;
+ // ----- copy
+ i := stack0i;
+ // ----- copy
+ stack0i := local1;
+ // ----- branch
+ goto block1513;
+
+ block1513$LoopPreheader:
+ $Heap$block1513$LoopPreheader := $Heap;
+ goto block1513;
+
+}
+
+
+
+axiom $IsClass(System.String);
+
+axiom System.String <: System.Object && AsDirectSubClass(System.String, System.Object) == System.String;
+
+axiom $IsInterface(System.IComparable);
+
+axiom (forall $K: name :: { System.IComparable <: $K } System.IComparable <: $K <==> System.IComparable == $K || System.Object == $K);
+
+axiom Implements(System.String, System.IComparable);
+
+axiom $IsInterface(System.ICloneable);
+
+axiom (forall $K: name :: { System.ICloneable <: $K } System.ICloneable <: $K <==> System.ICloneable == $K || System.Object == $K);
+
+axiom Implements(System.String, System.ICloneable);
+
+axiom $IsInterface(System.Collections.IEnumerable);
+
+axiom (forall $K: name :: { System.Collections.IEnumerable <: $K } System.Collections.IEnumerable <: $K <==> System.Collections.IEnumerable == $K || System.Object == $K);
+
+axiom Implements(System.String, System.Collections.IEnumerable);
+
+axiom (forall $K: name :: { System.String <: $K } System.String <: $K <==> System.String == $K || System.Object <: $K || System.IComparable <: $K || System.ICloneable <: $K || System.Collections.IEnumerable <: $K);
+
+axiom (forall $U: name :: { $U <: System.String } $U <: System.String ==> $U == System.String);
+
+function Inv_System.String(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.String(this, heap) } Inv_System.String(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.String } { Inv_System.String($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.String ==> Inv_System.String($o, heap));
+
+procedure System.Console.WriteLine$System.String(value$in: ref);
+ requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Microsoft.Singularity.DebugStub.Print$System.String(value$in: ref);
+ requires value$in == null || (cast($Heap[value$in, $writable]):bool == true && cast($Heap[value$in, $inv]):name == $typeof(value$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure System.Threading.Thread.Yield();
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod();
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest.SecondThreadMethod()
+{
+ var stack0o: ref, i: int, stack0i: int, stack0b: bool, local1: int, $Heap$block2516$LoopPreheader: [ref,name]any;
+
+ entry:
+ assume IsHeap($Heap);
+ goto block2482;
+
+ block2482:
+ goto block2499;
+
+ block2499:
+ // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
+ stack0o := $stringLiteral5;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(35,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant Second thread! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
+ stack0o := $stringLiteral6;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(36,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,18)
+ i := 0;
+ goto block2516$LoopPreheader;
+
+ block2516:
+ // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ assert (forall $o: ref :: $Heap$block2516$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool != true);
+ assert (forall $o: ref :: cast($Heap$block2516$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ // ----- load constant 10 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ stack0i := 10;
+ // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ stack0b := i >= stack0i;
+ // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,29)
+ goto true2516to2550, false2516to2533;
+
+ true2516to2550:
+ assume stack0b == true;
+ goto block2550;
+
+ false2516to2533:
+ assume stack0b == false;
+ goto block2533;
+
+ block2550:
+ // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
+ stack0o := $stringLiteral8;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(44,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant Second thread done! ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
+ stack0o := $stringLiteral9;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(45,13)
+ call Microsoft.Singularity.DebugStub.Print$System.String(stack0o);
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(46,10)
+ return;
+
+ block2533:
+ // ----- load constant ... [1] ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
+ stack0o := $stringLiteral7;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(40,17)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(41,17)
+ call System.Threading.Thread.Yield();
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(38,37)
+ local1 := i;
+ // ----- load constant 1
+ stack0i := 1;
+ // ----- binary operator
+ stack0i := local1 + stack0i;
+ // ----- copy
+ i := stack0i;
+ // ----- copy
+ stack0i := local1;
+ // ----- branch
+ goto block2516;
+
+ block2516$LoopPreheader:
+ $Heap$block2516$LoopPreheader := $Heap;
+ goto block2516;
+
+}
+
+
+
+procedure Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int);
+ requires args$in == null || (cast($Heap[args$in, $writable]):bool == true && cast($Heap[args$in, $inv]):name == $typeof(args$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures IsAllocated($Heap, $result);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest.Main$System.String.array(args$in: ref) returns ($result: int)
+{
+ var args: ref, stack0o: ref, stack1o: ref, stack50000o: ref, t1: ref, t2: ref, i: int, stack0i: int, stack0b: bool, local3: int, return.value: int, SS$Display.Return.Local: int, $Heap$block3825$LoopPreheader: [ref,name]any;
+
+ entry:
+ assume IsHeap($Heap);
+ args := args$in;
+ assume $Is(args, RefArray(System.String, 1));
+ assume cast($Heap[args$in, $allocated]):bool == true;
+ goto block3791;
+
+ block3791:
+ goto block3808;
+
+ block3808:
+ stack0o := null;
+ // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ havoc stack1o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ assert stack50000o != null;
+ call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ stack0o := stack50000o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ assert stack50000o != null;
+ call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ stack0o := stack50000o;
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(51,13)
+ t1 := stack0o;
+ stack0o := null;
+ // ----- load function ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ havoc stack1o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.ThreadStart;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ assert stack50000o != null;
+ call System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(stack50000o, stack0o, stack1o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ stack0o := stack50000o;
+ // ----- new object ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ havoc stack50000o;
+ assume cast($Heap[stack50000o, $allocated]):bool == false && stack50000o != null && $typeof(stack50000o) == System.Threading.Thread;
+ $Heap[stack50000o, $allocated] := true;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ assert stack50000o != null;
+ call System.Threading.Thread..ctor$System.Threading.ThreadStart(stack50000o, stack0o);
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ stack0o := stack50000o;
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(52,13)
+ t2 := stack0o;
+ // ----- load constant Starting first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
+ stack0o := $stringLiteral10;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(54,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(55,13)
+ assert t1 != null;
+ call System.Threading.Thread.Start(t1);
+ // ----- load constant Started first thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
+ stack0o := $stringLiteral11;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(56,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant Starting second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
+ stack0o := $stringLiteral12;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(58,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(59,13)
+ assert t2 != null;
+ call System.Threading.Thread.Start(t2);
+ // ----- load constant Started second thread. ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
+ stack0o := $stringLiteral13;
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(60,13)
+ call System.Console.WriteLine$System.String(stack0o);
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,18)
+ i := 0;
+ goto block3825$LoopPreheader;
+
+ block3825:
+ // ----- default loop invariant: $inv field ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ assert (forall $o: ref :: $Heap$block3825$LoopPreheader[$o, $inv] == $Heap[$o, $inv] || cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool != true);
+ assert (forall $o: ref :: cast($Heap$block3825$LoopPreheader[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ // ----- load constant 30 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ stack0i := 30;
+ // ----- binary operator ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ stack0b := i >= stack0i;
+ // ----- branch ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,29)
+ goto true3825to3859, false3825to3842;
+
+ true3825to3859:
+ assume stack0b == true;
+ goto block3859;
+
+ false3825to3842:
+ assume stack0b == false;
+ goto block3842;
+
+ block3859:
+ // ----- load constant 0 ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(66,13)
+ return.value := 0;
+ // ----- branch
+ goto block3876;
+
+ block3842:
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(64,17)
+ call System.Threading.Thread.Yield();
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(62,37)
+ local3 := i;
+ // ----- load constant 1
+ stack0i := 1;
+ // ----- binary operator
+ stack0i := local3 + stack0i;
+ // ----- copy
+ i := stack0i;
+ // ----- copy
+ stack0i := local3;
+ // ----- branch
+ goto block3825;
+
+ block3876:
+ // ----- copy
+ SS$Display.Return.Local := return.value;
+ // ----- copy ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
+ stack0i := return.value;
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(67,10)
+ $result := stack0i;
+ return;
+
+ block3825$LoopPreheader:
+ $Heap$block3825$LoopPreheader := $Heap;
+ goto block3825;
+
+}
+
+
+
+axiom $IsClass(System.Threading.ThreadStart);
+
+axiom $IsClass(System.MulticastDelegate);
+
+axiom $IsClass(System.Delegate);
+
+axiom System.Delegate <: System.Object && AsDirectSubClass(System.Delegate, System.Object) == System.Delegate;
+
+axiom Implements(System.Delegate, System.ICloneable);
+
+axiom (forall $K: name :: { System.Delegate <: $K } System.Delegate <: $K <==> System.Delegate == $K || System.Object <: $K || System.ICloneable <: $K);
+
+function Inv_System.Delegate(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Delegate(this, heap) } Inv_System.Delegate(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Delegate } { Inv_System.Delegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Delegate ==> Inv_System.Delegate($o, heap));
+
+axiom System.MulticastDelegate <: System.Delegate && AsDirectSubClass(System.MulticastDelegate, System.Delegate) == System.MulticastDelegate;
+
+axiom (forall $K: name :: { System.MulticastDelegate <: $K } System.MulticastDelegate <: $K <==> System.MulticastDelegate == $K || System.Delegate <: $K);
+
+function Inv_System.MulticastDelegate(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.MulticastDelegate(this, heap) } Inv_System.MulticastDelegate(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.MulticastDelegate } { Inv_System.MulticastDelegate($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.MulticastDelegate ==> Inv_System.MulticastDelegate($o, heap));
+
+axiom System.Threading.ThreadStart <: System.MulticastDelegate && AsDirectSubClass(System.Threading.ThreadStart, System.MulticastDelegate) == System.Threading.ThreadStart;
+
+axiom (forall $K: name :: { System.Threading.ThreadStart <: $K } System.Threading.ThreadStart <: $K <==> System.Threading.ThreadStart == $K || System.MulticastDelegate <: $K);
+
+axiom (forall $U: name :: { $U <: System.Threading.ThreadStart } $U <: System.Threading.ThreadStart ==> $U == System.Threading.ThreadStart);
+
+function Inv_System.Threading.ThreadStart(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.ThreadStart(this, heap) } Inv_System.Threading.ThreadStart(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.ThreadStart } { Inv_System.Threading.ThreadStart($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.ThreadStart ==> Inv_System.Threading.ThreadStart($o, heap));
+
+procedure System.Threading.ThreadStart..ctor$System.Object$System.IntPtr(this: ref, object$in: ref, method$in: ref);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.ThreadStart;
+
+
+
+axiom $IsClass(System.Threading.Thread);
+
+axiom System.Threading.Thread <: System.Object && AsDirectSubClass(System.Threading.Thread, System.Object) == System.Threading.Thread;
+
+axiom (forall $K: name :: { System.Threading.Thread <: $K } System.Threading.Thread <: $K <==> System.Threading.Thread == $K || System.Object <: $K);
+
+axiom (forall $U: name :: { $U <: System.Threading.Thread } $U <: System.Threading.Thread ==> $U == System.Threading.Thread);
+
+function Inv_System.Threading.Thread(object: ref, heap: [ref,name]any) returns (result: bool);
+
+axiom (forall this: ref, heap: [ref,name]any :: { Inv_System.Threading.Thread(this, heap) } Inv_System.Threading.Thread(this, heap) <==> true);
+
+axiom (forall $o: ref, heap: [ref,name]any :: { cast(heap[$o, $inv]):name <: System.Threading.Thread } { Inv_System.Threading.Thread($o, heap) } IsHeap(heap) && cast(heap[$o, $inv]):name <: System.Threading.Thread ==> Inv_System.Threading.Thread($o, heap));
+
+procedure System.Threading.Thread..ctor$System.Threading.ThreadStart(this: ref, start$in: ref);
+ requires start$in == null || (cast($Heap[start$in, $writable]):bool == true && cast($Heap[start$in, $inv]):name == $typeof(start$in));
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Threading.Thread <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Threading.Thread;
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+
+
+
+procedure System.Threading.Thread.Start(this: ref);
+ requires cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == $typeof(this);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(Microsoft.Singularity.Applications.ThreadTest <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == Microsoft.Singularity.Applications.ThreadTest;
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+
+
+
+implementation Microsoft.Singularity.Applications.ThreadTest..ctor(this: ref)
+{
+
+ entry:
+ assume IsHeap($Heap);
+ assume $IsNotNull(this, Microsoft.Singularity.Applications.ThreadTest);
+ assume cast($Heap[this, $allocated]):bool == true;
+ assume cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
+ goto block4777;
+
+ block4777:
+ goto block4794;
+
+ block4794:
+ // ----- call ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,18)
+ assert this != null;
+ call System.Object..ctor(this);
+ // ----- return ----- C:\Maf\Singularity\base\Applications\Tests\ThreadTest\ThreadTest.cs(17,28)
+ assert this != null;
+ assert cast($Heap[this, $writable]):bool == true && System.Object <: cast($Heap[this, $inv]):name;
+ assert cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
+ assert Inv_Microsoft.Singularity.Applications.ThreadTest(this, $Heap);
+ $Heap[this, $inv] := Microsoft.Singularity.Applications.ThreadTest;
+ return;
+
+}
+
+
+
+procedure System.Object..ctor(this: ref);
+ modifies $Heap;
+ free ensures IsHeap($Heap);
+ free ensures (forall $o: ref, $f: name :: $f != $inv && $o != null && cast(old($Heap)[$o, $allocated]):bool == true && cast(old($Heap)[$o, $writable]):bool == true && (!IsStaticField($f) || !IsDirectlyModifiableField($f)) && ($o != this || !(System.Object <: DeclType($f))) ==> old($Heap[$o, $f]) == $Heap[$o, $f]);
+ free ensures (forall $o: ref :: $o == this || old($Heap)[$o, $inv] == $Heap[$o, $inv] || cast(old($Heap)[$o, $allocated]):bool != true);
+ free ensures (forall $o: ref :: cast(old($Heap)[$o, $allocated]):bool ==> cast($Heap[$o, $allocated]):bool);
+ free ensures (forall $o: ref :: $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+ ensures cast($Heap[this, $writable]):bool == true && cast($Heap[this, $inv]):name == System.Object;
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+
+
+
+type ref, name, any;
+const null : ref;
diff --git a/Test/test20/Coercions.bpl b/Test/test20/Coercions.bpl
index 0ad114a6..5487f33a 100644
--- a/Test/test20/Coercions.bpl
+++ b/Test/test20/Coercions.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-type C, D, E _;
-
-const x:int;
-const c:C;
-const d:D;
-
-axiom (x:int > 0);
-axiom (x:int < 0);
-axiom (x:E <a>[a]int < 0); // impossible coercion
-
-axiom (c:D == d); // impossible coercion
-
-axiom (15:D == d); // impossible coercion
-axiom (15:E int == d); // impossible coercion
-axiom ((18*15):int == 0);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+type C, D, E _;
+
+const x:int;
+const c:C;
+const d:D;
+
+axiom (x:int > 0);
+axiom (x:int < 0);
+axiom (x:E <a>[a]int < 0); // impossible coercion
+
+axiom (c:D == d); // impossible coercion
+
+axiom (15:D == d); // impossible coercion
+axiom (15:E int == d); // impossible coercion
+axiom ((18*15):int == 0);
diff --git a/Test/test20/EmptySeq.bpl b/Test/test20/EmptySeq.bpl
index 2eeb9589..b1758acc 100644
--- a/Test/test20/EmptySeq.bpl
+++ b/Test/test20/EmptySeq.bpl
@@ -1,8 +1,8 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type Seq T;
-
-function Seq#Length<T>(Seq T) returns (int);
-function Seq#Empty<T>() returns (Seq T);
-
-axiom (forall<T> :: Seq#Length(Seq#Empty(): Seq T) == 0);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type Seq T;
+
+function Seq#Length<T>(Seq T) returns (int);
+function Seq#Empty<T>() returns (Seq T);
+
+axiom (forall<T> :: Seq#Length(Seq#Empty(): Seq T) == 0);
diff --git a/Test/test20/ParallelAssignment.bpl b/Test/test20/ParallelAssignment.bpl
index d84b96ab..677bb476 100644
--- a/Test/test20/ParallelAssignment.bpl
+++ b/Test/test20/ParallelAssignment.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Examples from the Boogie2 language report
-// (stuff where resolution succeeds, but typechecking might fail)
-
-type C, D;
-
-var x : int;
-var y : int;
-var z : int;
-var a : [int]int;
-var b : [int][C, D]int;
-
-procedure P(i:int, j:int, m:C, n:D) returns () modifies x, y, a, b; {
- x := x+1;
- a[i] := 12;
- x, y := y, x;
- x, a[i] := x+1, x;
- x := true; // type error
- a[true] := 5; // type error
-
- z := 23; // assignment to non-modifiable variable
- b[i][m, n] := 17;
- b[i][m, n], x := a[x], y;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Examples from the Boogie2 language report
+// (stuff where resolution succeeds, but typechecking might fail)
+
+type C, D;
+
+var x : int;
+var y : int;
+var z : int;
+var a : [int]int;
+var b : [int][C, D]int;
+
+procedure P(i:int, j:int, m:C, n:D) returns () modifies x, y, a, b; {
+ x := x+1;
+ a[i] := 12;
+ x, y := y, x;
+ x, a[i] := x+1, x;
+ x := true; // type error
+ a[true] := 5; // type error
+
+ z := 23; // assignment to non-modifiable variable
+ b[i][m, n] := 17;
+ b[i][m, n], x := a[x], y;
} \ No newline at end of file
diff --git a/Test/test20/ParallelAssignment2.bpl b/Test/test20/ParallelAssignment2.bpl
index 8f309b75..df9e5655 100644
--- a/Test/test20/ParallelAssignment2.bpl
+++ b/Test/test20/ParallelAssignment2.bpl
@@ -1,13 +1,13 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Examples from the Boogie2 language report
-// (examples where already resolution fails)
-
-var x : int;
-var y : int;
-var a : [int]int;
-
-procedure P(i:int, j:int) returns () modifies x, y, a; {
- x, y := 1; // wrong number of rhss
- a[i], a[j] := a[j], a[i]; // variable assigned more than once
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Examples from the Boogie2 language report
+// (examples where already resolution fails)
+
+var x : int;
+var y : int;
+var a : [int]int;
+
+procedure P(i:int, j:int) returns () modifies x, y, a; {
+ x, y := 1; // wrong number of rhss
+ a[i], a[j] := a[j], a[i]; // variable assigned more than once
} \ No newline at end of file
diff --git a/Test/test20/PolyFuns0.bpl b/Test/test20/PolyFuns0.bpl
index c7d44b9f..b1a4a017 100644
--- a/Test/test20/PolyFuns0.bpl
+++ b/Test/test20/PolyFuns0.bpl
@@ -1,57 +1,57 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-function size<alpha>(x : alpha) returns (int);
-
-axiom (forall x:int :: size(x) == 0);
-axiom (forall<alpha> x:alpha :: size(x) >= 0);
-
-axiom (forall m:[int]int, x:int :: size(m) >= m[x]);
-axiom (forall m:<a>[a]int :: size(m) == 13);
-
-type Field a;
-
-function fieldValue<a>(ref, Field a) returns (a);
-
-const intField : Field int;
-const refField : Field ref;
-const obj : ref;
-const someInt : int;
-
-axiom someInt == fieldValue(obj, intField);
-axiom someInt == fieldValue(fieldValue(obj, refField), intField);
-
-axiom someInt == fieldValue(obj, fieldValue(obj, refField)); // error: wrong argument type
-
-axiom (forall<a> f : Field a ::
- (exists x:a :: fieldValue(obj, f) == x));
-
-axiom (forall<beta, alpha> a:alpha, b:beta ::
- a == b ==> (exists c:alpha :: c == b));
-axiom (forall<a> f : Field a ::
- (exists<b> x:b :: fieldValue(obj, f) == x));
-axiom (forall<a> f : Field a ::
- (exists x:int :: fieldValue(obj, f) == x));
-
-function lessThan<a>(x : a, y : a) returns (bool);
-
-axiom (forall x:int, y:int :: x < y ==> lessThan(x, y));
-axiom lessThan(false, true);
-
-axiom lessThan(5, true); // error: incompatible arguments
-axiom (forall<a,b> x:a, y:b :: lessThan(x, y)); // error: incompatible arguments
-
-function lessThan2<a,b>(x : a, y : b) returns (bool);
-
-axiom (forall<a> x:a, y:a :: lessThan(x,y) == lessThan2(x,y));
-axiom (forall<a> x:a :: (exists m:a :: (forall y:a :: lessThan2(m, y))));
-
-axiom (exists<a,b> x:a, y:b :: lessThan2(x, y) == lessThan2(y, x));
-
-axiom (exists<a,b> x:<c>[Field c]a, y:<d>[Field d]b :: x == y);
-axiom (exists<a> x:<c>[Field c]a, y:<d>[Field d]int :: x == y);
-axiom (exists<a> x:<c>[Field c]int, y:<d>[Field d]a :: x == y);
-axiom (exists<a> x:<c>[Field c]a, y:<d>[Field d]d :: x == y); // error: not unifiable
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+function size<alpha>(x : alpha) returns (int);
+
+axiom (forall x:int :: size(x) == 0);
+axiom (forall<alpha> x:alpha :: size(x) >= 0);
+
+axiom (forall m:[int]int, x:int :: size(m) >= m[x]);
+axiom (forall m:<a>[a]int :: size(m) == 13);
+
+type Field a;
+
+function fieldValue<a>(ref, Field a) returns (a);
+
+const intField : Field int;
+const refField : Field ref;
+const obj : ref;
+const someInt : int;
+
+axiom someInt == fieldValue(obj, intField);
+axiom someInt == fieldValue(fieldValue(obj, refField), intField);
+
+axiom someInt == fieldValue(obj, fieldValue(obj, refField)); // error: wrong argument type
+
+axiom (forall<a> f : Field a ::
+ (exists x:a :: fieldValue(obj, f) == x));
+
+axiom (forall<beta, alpha> a:alpha, b:beta ::
+ a == b ==> (exists c:alpha :: c == b));
+axiom (forall<a> f : Field a ::
+ (exists<b> x:b :: fieldValue(obj, f) == x));
+axiom (forall<a> f : Field a ::
+ (exists x:int :: fieldValue(obj, f) == x));
+
+function lessThan<a>(x : a, y : a) returns (bool);
+
+axiom (forall x:int, y:int :: x < y ==> lessThan(x, y));
+axiom lessThan(false, true);
+
+axiom lessThan(5, true); // error: incompatible arguments
+axiom (forall<a,b> x:a, y:b :: lessThan(x, y)); // error: incompatible arguments
+
+function lessThan2<a,b>(x : a, y : b) returns (bool);
+
+axiom (forall<a> x:a, y:a :: lessThan(x,y) == lessThan2(x,y));
+axiom (forall<a> x:a :: (exists m:a :: (forall y:a :: lessThan2(m, y))));
+
+axiom (exists<a,b> x:a, y:b :: lessThan2(x, y) == lessThan2(y, x));
+
+axiom (exists<a,b> x:<c>[Field c]a, y:<d>[Field d]b :: x == y);
+axiom (exists<a> x:<c>[Field c]a, y:<d>[Field d]int :: x == y);
+axiom (exists<a> x:<c>[Field c]int, y:<d>[Field d]a :: x == y);
+axiom (exists<a> x:<c>[Field c]a, y:<d>[Field d]d :: x == y); // error: not unifiable
+
+type ref;
diff --git a/Test/test20/PolyFuns1.bpl b/Test/test20/PolyFuns1.bpl
index 12a8a1b8..01d6638c 100644
--- a/Test/test20/PolyFuns1.bpl
+++ b/Test/test20/PolyFuns1.bpl
@@ -1,61 +1,61 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-function F<a>( <b>[b]a ) returns (bool);
-const M: <a>[ <b>[b]a ] bool;
-
-procedure P()
-{
- var f: <c>[c]c;
- var b: bool;
-
- b := F(f); // type error
- b := M[f]; // type error
- b := (forall g: <c>[c]c :: F(g)); // type error
- b := (forall g: <c>[c]c :: M[g]); // type error
-}
-
-type Field a;
-axiom (exists<a> x:<c>[Field c]a, y:<d>[Field d]d :: x == y); // error: not unifiable
-axiom (forall<a> x:<c>[Field c]a, y:<d>[Field d]d :: x == y); // error: not unifiable
-
-procedure Uhu<a>(x: <c>[Field c]a, y: <d>[Field d]d);
-procedure Oyeah<T>(t: T)
-{
- var xx: <cc>[Field cc]T;
- var yy: <dd>[Field dd]dd;
- var zz: <ee>[Field T]ee;
-
- call Uhu(xx, yy);
- call Uhu(yy, yy); // type error in argument 0
- call Uhu(xx, xx); // type error in argument 1
- assert xx == yy; // error: not unifiable
- assert yy == xx; // error: not unifiable
-
- call Uhu(xx, zz); // type error in argument 1
-}
-
-procedure Jitters()
-{
- var x: <a>[a,a]int;
- var y: <b>[b,int]int;
- var z: <c>[int,c]int;
- assert x == y; // error: not unifiable
- assert y == z; // error: not unifiable
- assert x == z; // error: not unifiable
-}
-
-procedure Nuther()
-{
- var x: <a,b>[a,a,b]int;
- var y: <a,b>[a,b,b]int;
- assert x == y; // error: not unifiable
-}
-
-type NagainCtor a;
-procedure Nagain()
- requires (forall<a,b> x: a, y: b :: x == y);
- ensures (forall<a,b> x: a, y: Field b, z: NagainCtor b :: x == y && x == z);
- ensures (forall<b> y: Field b, z: NagainCtor b :: y == z); // error: types not unifiable
-{
-}
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+function F<a>( <b>[b]a ) returns (bool);
+const M: <a>[ <b>[b]a ] bool;
+
+procedure P()
+{
+ var f: <c>[c]c;
+ var b: bool;
+
+ b := F(f); // type error
+ b := M[f]; // type error
+ b := (forall g: <c>[c]c :: F(g)); // type error
+ b := (forall g: <c>[c]c :: M[g]); // type error
+}
+
+type Field a;
+axiom (exists<a> x:<c>[Field c]a, y:<d>[Field d]d :: x == y); // error: not unifiable
+axiom (forall<a> x:<c>[Field c]a, y:<d>[Field d]d :: x == y); // error: not unifiable
+
+procedure Uhu<a>(x: <c>[Field c]a, y: <d>[Field d]d);
+procedure Oyeah<T>(t: T)
+{
+ var xx: <cc>[Field cc]T;
+ var yy: <dd>[Field dd]dd;
+ var zz: <ee>[Field T]ee;
+
+ call Uhu(xx, yy);
+ call Uhu(yy, yy); // type error in argument 0
+ call Uhu(xx, xx); // type error in argument 1
+ assert xx == yy; // error: not unifiable
+ assert yy == xx; // error: not unifiable
+
+ call Uhu(xx, zz); // type error in argument 1
+}
+
+procedure Jitters()
+{
+ var x: <a>[a,a]int;
+ var y: <b>[b,int]int;
+ var z: <c>[int,c]int;
+ assert x == y; // error: not unifiable
+ assert y == z; // error: not unifiable
+ assert x == z; // error: not unifiable
+}
+
+procedure Nuther()
+{
+ var x: <a,b>[a,a,b]int;
+ var y: <a,b>[a,b,b]int;
+ assert x == y; // error: not unifiable
+}
+
+type NagainCtor a;
+procedure Nagain()
+ requires (forall<a,b> x: a, y: b :: x == y);
+ ensures (forall<a,b> x: a, y: Field b, z: NagainCtor b :: x == y && x == z);
+ ensures (forall<b> y: Field b, z: NagainCtor b :: y == z); // error: types not unifiable
+{
+}
diff --git a/Test/test20/PolyPolyPoly.bpl b/Test/test20/PolyPolyPoly.bpl
index 718452f2..1b2f8823 100644
--- a/Test/test20/PolyPolyPoly.bpl
+++ b/Test/test20/PolyPolyPoly.bpl
@@ -1,24 +1,24 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-type C _;
-
-const p: <a>[]a;
-const q: <a>[a, a]a;
-const r: <a>[](C a);
-
-const x: C int;
-const y: C bool;
-
-axiom (p[][:= 5][:= true] == p);
-axiom (p[][:= 5][:= true] == r); // error
-axiom (p[][:= x][:= y] == p);
-axiom (p[][:= x][:= y] == r);
-axiom (p[][:= x][:= 5] == r); // error
-axiom (p[][:= x][:= y] == p[][:= 5][:= true]);
-axiom (q[p[][:= x][:= y], p[][:= 5][:= true]] == p);
-axiom (q[p[], p[]][:= 5][:= true] == p);
-
-axiom (exists<a> x:a :: p[][:= 5][:= true] == x);
-axiom (exists<a,b> x:a, y:b :: p[][:= 5][:= true] == q[x,y]); // error
-axiom (exists<a,b> x:a, y:b :: q[x, x] == q[y, y]);
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+type C _;
+
+const p: <a>[]a;
+const q: <a>[a, a]a;
+const r: <a>[](C a);
+
+const x: C int;
+const y: C bool;
+
+axiom (p[][:= 5][:= true] == p);
+axiom (p[][:= 5][:= true] == r); // error
+axiom (p[][:= x][:= y] == p);
+axiom (p[][:= x][:= y] == r);
+axiom (p[][:= x][:= 5] == r); // error
+axiom (p[][:= x][:= y] == p[][:= 5][:= true]);
+axiom (q[p[][:= x][:= y], p[][:= 5][:= true]] == p);
+axiom (q[p[], p[]][:= 5][:= true] == p);
+
+axiom (exists<a> x:a :: p[][:= 5][:= true] == x);
+axiom (exists<a,b> x:a, y:b :: p[][:= 5][:= true] == q[x,y]); // error
+axiom (exists<a,b> x:a, y:b :: q[x, x] == q[y, y]);
diff --git a/Test/test20/PolyPolyPoly2.bpl b/Test/test20/PolyPolyPoly2.bpl
index e50251c1..cf4df9c3 100644
--- a/Test/test20/PolyPolyPoly2.bpl
+++ b/Test/test20/PolyPolyPoly2.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-const p: <a>[]a;
-const q: <a,b>[a]b;
-
-axiom (p[] == p[]); // warning
-axiom (p[][13 := false] == q);
-axiom (p[][13 := false] == p[]); // warning
-
-const c: bv17;
-
-axiom (p[] ++ p[] ++ c == p[]); // warning
-axiom (p[] ++ p[] == c); // warning
-axiom (p[] == c);
-
-type List _;
-
-function emptyList<a>() returns (List a);
-function append<a>(List a, List a) returns (List a);
-
-axiom (forall<a> l:List a :: append(emptyList(), l) == l);
-axiom (forall<a> l:List a :: append(l, emptyList()) == l);
-axiom (append(emptyList(), emptyList()) == emptyList()); // warning
-axiom (forall<a> l:List a :: l==emptyList() ==> append(l, emptyList()) == emptyList());
-
-var x: <a>[]a;
-var y: <a>[a]a;
-
-procedure P() returns () modifies x, y; {
- x[] := 15;
- x[] := false;
- x[] := p[]; // warning
- x[] := q[false]; // warning
- y[13] := q[false];
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+const p: <a>[]a;
+const q: <a,b>[a]b;
+
+axiom (p[] == p[]); // warning
+axiom (p[][13 := false] == q);
+axiom (p[][13 := false] == p[]); // warning
+
+const c: bv17;
+
+axiom (p[] ++ p[] ++ c == p[]); // warning
+axiom (p[] ++ p[] == c); // warning
+axiom (p[] == c);
+
+type List _;
+
+function emptyList<a>() returns (List a);
+function append<a>(List a, List a) returns (List a);
+
+axiom (forall<a> l:List a :: append(emptyList(), l) == l);
+axiom (forall<a> l:List a :: append(l, emptyList()) == l);
+axiom (append(emptyList(), emptyList()) == emptyList()); // warning
+axiom (forall<a> l:List a :: l==emptyList() ==> append(l, emptyList()) == emptyList());
+
+var x: <a>[]a;
+var y: <a>[a]a;
+
+procedure P() returns () modifies x, y; {
+ x[] := 15;
+ x[] := false;
+ x[] := p[]; // warning
+ x[] := q[false]; // warning
+ y[13] := q[false];
} \ No newline at end of file
diff --git a/Test/test20/PolyProcs0.bpl b/Test/test20/PolyProcs0.bpl
index 698e2f12..cc0ba491 100644
--- a/Test/test20/PolyProcs0.bpl
+++ b/Test/test20/PolyProcs0.bpl
@@ -1,35 +1,35 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-type Field a;
-
-function FieldAccessFun<b>(heap : <a>[ref, Field a]a, obj : ref, f : Field b)
- returns (res:b);
-
-procedure FieldAccess<b>(heap : <a>[ref, Field a]a, obj : ref, f : Field b)
- returns (res:b) {
- start:
- res := heap[f, obj]; // error: wrong argument order
- res := heap[obj, f];
- assert res == FieldAccessFun(heap, obj, f);
- return;
-}
-
-procedure UseHeap(heap : <a>[ref, Field a]a) {
- var f1 : Field int; var f2 : Field bool; var obj : ref;
- var x : int; var y : bool;
-
- call x := FieldAccess(heap, f1, obj); // error: wrong argument order
- call x := FieldAccess(heap, obj, f1);
- call y := FieldAccess(heap, obj, f2);
-
- call y := FieldAccess(heap, obj, f1); // error: wrong result type
- call x := FieldAccess(heap, obj, obj); // error: wrong argument type
-}
-
-procedure injective<b>(heap : <a>[ref, Field a]a, obj0 : ref, obj1 : ref, f : Field b);
- requires obj0 != obj1;
- ensures heap[obj0, f] != heap[obj1, f];
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+type Field a;
+
+function FieldAccessFun<b>(heap : <a>[ref, Field a]a, obj : ref, f : Field b)
+ returns (res:b);
+
+procedure FieldAccess<b>(heap : <a>[ref, Field a]a, obj : ref, f : Field b)
+ returns (res:b) {
+ start:
+ res := heap[f, obj]; // error: wrong argument order
+ res := heap[obj, f];
+ assert res == FieldAccessFun(heap, obj, f);
+ return;
+}
+
+procedure UseHeap(heap : <a>[ref, Field a]a) {
+ var f1 : Field int; var f2 : Field bool; var obj : ref;
+ var x : int; var y : bool;
+
+ call x := FieldAccess(heap, f1, obj); // error: wrong argument order
+ call x := FieldAccess(heap, obj, f1);
+ call y := FieldAccess(heap, obj, f2);
+
+ call y := FieldAccess(heap, obj, f1); // error: wrong result type
+ call x := FieldAccess(heap, obj, obj); // error: wrong argument type
+}
+
+procedure injective<b>(heap : <a>[ref, Field a]a, obj0 : ref, obj1 : ref, f : Field b);
+ requires obj0 != obj1;
+ ensures heap[obj0, f] != heap[obj1, f];
+
+type ref;
diff --git a/Test/test20/ProcParamReordering.bpl b/Test/test20/ProcParamReordering.bpl
index 2532964f..225eed33 100644
--- a/Test/test20/ProcParamReordering.bpl
+++ b/Test/test20/ProcParamReordering.bpl
@@ -1,17 +1,17 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-type C _;
-
-
-procedure P<a, b>(x : a, y : b) returns ();
-
-implementation P<a, b>(x : a, y : b) returns () {}
-
-implementation P<c, d>(a : c, b : d) returns () {}
-
-implementation P<d, c>(a : c, b : d) returns () {}
-
-implementation P<d, c>(a : c, b : C d) returns () {}
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+type C _;
+
+
+procedure P<a, b>(x : a, y : b) returns ();
+
+implementation P<a, b>(x : a, y : b) returns () {}
+
+implementation P<c, d>(a : c, b : d) returns () {}
+
+implementation P<d, c>(a : c, b : d) returns () {}
+
+implementation P<d, c>(a : c, b : C d) returns () {}
+
implementation P<a>(x : a, y : a) returns () {} \ No newline at end of file
diff --git a/Test/test20/Prog0.bpl b/Test/test20/Prog0.bpl
index 26642737..512984dc 100644
--- a/Test/test20/Prog0.bpl
+++ b/Test/test20/Prog0.bpl
@@ -1,37 +1,37 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Let's test some Boogie 2 features ...
-
-type elements;
-
-type Field a;
-var heap : <a> [ref, Field a] a;
-
-const emptyset : <a> [a] bool;
-
-function union(<a> [a] bool, <a> [a] bool) returns (<a> [a] bool);
-
-axiom (forall x : <a> [a] bool, y : <a> [a] bool,
- z : int ::
- { union(x, y)[z] }
- union(x, y)[z] == (x[z] || y[z]));
-
-var tau : <a> [ref] int; // error: type variable has to occur in arguments
-
-axiom (forall x : int :: !emptyset[x]);
-
-// the more general version of the axiom that also uses type quantifiers
-
-axiom (forall<alpha>
- x : <a> [a] bool, y : <a> [a] bool,
- z : alpha ::
- { union(x, y)[z] }
- union(x, y)[z] == (x[z] || y[z]));
-
-axiom (forall<beta, alpha, beta> a:alpha, b:beta :: // error: variable bound twice
- a == b ==> (exists c:alpha :: c == b));
-
-axiom (forall<beta> a:alpha, b:beta :: // error: alpha is not declared
- a == b ==> (exists c:alpha :: c == b));
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Let's test some Boogie 2 features ...
+
+type elements;
+
+type Field a;
+var heap : <a> [ref, Field a] a;
+
+const emptyset : <a> [a] bool;
+
+function union(<a> [a] bool, <a> [a] bool) returns (<a> [a] bool);
+
+axiom (forall x : <a> [a] bool, y : <a> [a] bool,
+ z : int ::
+ { union(x, y)[z] }
+ union(x, y)[z] == (x[z] || y[z]));
+
+var tau : <a> [ref] int; // error: type variable has to occur in arguments
+
+axiom (forall x : int :: !emptyset[x]);
+
+// the more general version of the axiom that also uses type quantifiers
+
+axiom (forall<alpha>
+ x : <a> [a] bool, y : <a> [a] bool,
+ z : alpha ::
+ { union(x, y)[z] }
+ union(x, y)[z] == (x[z] || y[z]));
+
+axiom (forall<beta, alpha, beta> a:alpha, b:beta :: // error: variable bound twice
+ a == b ==> (exists c:alpha :: c == b));
+
+axiom (forall<beta> a:alpha, b:beta :: // error: alpha is not declared
+ a == b ==> (exists c:alpha :: c == b));
+
+type ref;
diff --git a/Test/test20/Prog1.bpl b/Test/test20/Prog1.bpl
index 7fcf91b6..1c26db31 100644
--- a/Test/test20/Prog1.bpl
+++ b/Test/test20/Prog1.bpl
@@ -1,28 +1,28 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Let's test some Boogie 2 features ...
-
-type elements;
-
-type Field a;
-var heap : <a> [ref, Field a] a;
-
-
-
-procedure p (x:int, y:ref, z:<a> [ref, Field a] a) returns (newHeap : <a> [ref, Field a] a) {
-
- var f : Field int;
- var g : Field bool;
-
- var heap : <a> [ref, Field a] a;
-
- assert z[y, f] >= 0;
- assert z[x, f] >= 0; // error: x has wrong type
- assert z[y, x] >= 0; // error: x has wrong type
- assert z[y, g] >= 0; // error: result of map select has wrong type
-
- heap[y, g] := false;
-
-}
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Let's test some Boogie 2 features ...
+
+type elements;
+
+type Field a;
+var heap : <a> [ref, Field a] a;
+
+
+
+procedure p (x:int, y:ref, z:<a> [ref, Field a] a) returns (newHeap : <a> [ref, Field a] a) {
+
+ var f : Field int;
+ var g : Field bool;
+
+ var heap : <a> [ref, Field a] a;
+
+ assert z[y, f] >= 0;
+ assert z[x, f] >= 0; // error: x has wrong type
+ assert z[y, x] >= 0; // error: x has wrong type
+ assert z[y, g] >= 0; // error: result of map select has wrong type
+
+ heap[y, g] := false;
+
+}
+
+type ref;
diff --git a/Test/test20/Prog2.bpl b/Test/test20/Prog2.bpl
index 79555d28..67d9396e 100644
--- a/Test/test20/Prog2.bpl
+++ b/Test/test20/Prog2.bpl
@@ -1,18 +1,18 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-function union(<a> [a] bool, <a> [a] bool) returns (<a> [a] bool);
-
-axiom (forall<alpha> // error: alpha has to occur in dummy types
- x : <a> [a] bool, y : <a> [a] bool,
- z : int ::
- { union(x, y)[z] }
- union(x, y)[z] == (x[z] || y[z]));
-
-function poly<a>() returns (a);
-
-axiom (forall<alpha>
- x : <a> [a] bool, y : <a> [a] bool,
- z : int ::
- { union(x, y)[z], poly() : alpha }
- union(x, y)[z] == (x[z] || y[z]));
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+function union(<a> [a] bool, <a> [a] bool) returns (<a> [a] bool);
+
+axiom (forall<alpha> // error: alpha has to occur in dummy types
+ x : <a> [a] bool, y : <a> [a] bool,
+ z : int ::
+ { union(x, y)[z] }
+ union(x, y)[z] == (x[z] || y[z]));
+
+function poly<a>() returns (a);
+
+axiom (forall<alpha>
+ x : <a> [a] bool, y : <a> [a] bool,
+ z : int ::
+ { union(x, y)[z], poly() : alpha }
+ union(x, y)[z] == (x[z] || y[z]));
+
diff --git a/Test/test20/TypeDecls0.bpl b/Test/test20/TypeDecls0.bpl
index a78008c2..42b988d8 100644
--- a/Test/test20/TypeDecls0.bpl
+++ b/Test/test20/TypeDecls0.bpl
@@ -1,47 +1,47 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-type C a _ b;
-type D;
-type E _;
-
-var A0 : D;
-
-var A1 : C D D D;
-
-var A2 : <a,b> [b, C a b D] C a D [D]a;
-
-var A3 : <a,b> [b, C a int D] C bool ref [bv32]a;
-
-var A4 : <a,a> [a] a; // error: a bound twice
-var A5 : <a> [a] <a> [a] int; // error: a bound twice
-
-var A6 : <a> [a] <b> [b] int;
-
-var A7 : <a> [a] <b> [int] int; // error: b does not occur as map argument
-
-type C _ _; // error: C is already declared
-
-var A8 : C int ref; // error: wrong number of arguments
-
-var A9 : A0; // error: undeclared type
-var A10: F int; // error: undeclared type
-
-var A11: E D;
-var A12: E E D; // error: wrong number of arguments
-var A13: E (E D);
-var A14: E E E D; // error: wrong number of arguments
-
-var A15: E E int; // error: wrong number of arguments
-var A16: E (E int);
-
-var A17: bv64;
-var A18: [int] bv64;
-
-var A19: C E E D; // error: wrong number of arguments
-var A20: C (E (E D)) int [int] int;
-var A21: C (<a> [a] <b> [b] int) int [int] int;
-
-var A22: (D);
-var A23: ((D));
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+type C a _ b;
+type D;
+type E _;
+
+var A0 : D;
+
+var A1 : C D D D;
+
+var A2 : <a,b> [b, C a b D] C a D [D]a;
+
+var A3 : <a,b> [b, C a int D] C bool ref [bv32]a;
+
+var A4 : <a,a> [a] a; // error: a bound twice
+var A5 : <a> [a] <a> [a] int; // error: a bound twice
+
+var A6 : <a> [a] <b> [b] int;
+
+var A7 : <a> [a] <b> [int] int; // error: b does not occur as map argument
+
+type C _ _; // error: C is already declared
+
+var A8 : C int ref; // error: wrong number of arguments
+
+var A9 : A0; // error: undeclared type
+var A10: F int; // error: undeclared type
+
+var A11: E D;
+var A12: E E D; // error: wrong number of arguments
+var A13: E (E D);
+var A14: E E E D; // error: wrong number of arguments
+
+var A15: E E int; // error: wrong number of arguments
+var A16: E (E int);
+
+var A17: bv64;
+var A18: [int] bv64;
+
+var A19: C E E D; // error: wrong number of arguments
+var A20: C (E (E D)) int [int] int;
+var A21: C (<a> [a] <b> [b] int) int [int] int;
+
+var A22: (D);
+var A23: ((D));
+
+type ref;
diff --git a/Test/test20/TypeDecls1.bpl b/Test/test20/TypeDecls1.bpl
index 52f28e06..a4fa7de6 100644
--- a/Test/test20/TypeDecls1.bpl
+++ b/Test/test20/TypeDecls1.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-// set of maps from anything to a specific type a
-const mapSet : <a>[<b>[b]a]bool;
-
-const emptySet : <a>[a]bool;
-
-axiom mapSet[5]; // type error
-
-axiom mapSet[emptySet] == true;
-
-axiom mapSet[emptySet := false] != mapSet;
-
-axiom mapSet[emptySet := 5] == mapSet; // type error
-
-axiom emptySet[13 := true][13] == true;
-
-axiom (forall f : <c>[c]int, x : ref :: mapSet[f] ==> f[x] >= 0);
-
-axiom (forall f : <c>[c]c :: mapSet[f]); // type error
-
-axiom mapSet[mapSet] == true; // type error
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+// set of maps from anything to a specific type a
+const mapSet : <a>[<b>[b]a]bool;
+
+const emptySet : <a>[a]bool;
+
+axiom mapSet[5]; // type error
+
+axiom mapSet[emptySet] == true;
+
+axiom mapSet[emptySet := false] != mapSet;
+
+axiom mapSet[emptySet := 5] == mapSet; // type error
+
+axiom emptySet[13 := true][13] == true;
+
+axiom (forall f : <c>[c]int, x : ref :: mapSet[f] ==> f[x] >= 0);
+
+axiom (forall f : <c>[c]c :: mapSet[f]); // type error
+
+axiom mapSet[mapSet] == true; // type error
+
+type ref;
diff --git a/Test/test20/TypeSynonyms0.bpl b/Test/test20/TypeSynonyms0.bpl
index 1703f4a7..261b94cf 100644
--- a/Test/test20/TypeSynonyms0.bpl
+++ b/Test/test20/TypeSynonyms0.bpl
@@ -1,33 +1,33 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// RUN: %boogie -noVerify -print:- -env:0 "%s" > "%t"
-// RUN: %diff "%s.print.expect" "%t"
-
-
-type Set a = [a]bool;
-
-type Field a, Heap = <a>[ref, Field a]a;
-
-type notAllParams a b = Field b;
-
-type Cyclic0 = Cyclic1;
-type Cyclic1 = Cyclic0;
-
-type AlsoCyclic a = <b>[AlsoCyclic b]int;
-
-type C a b;
-
-type C2 b a = C a b;
-
-function f(C int bool) returns (int);
-const x : C2 bool int;
-
-
-const y : Field int bool; // wrong number of arguments
-const z : Set int bool; // wrong number of arguments
-
-
-const d : <a,b>[notAllParams a b]int; // error: not all parameters are used
-
-
-type ref;
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noVerify -print:- -env:0 "%s" > "%t"
+// RUN: %diff "%s.print.expect" "%t"
+
+
+type Set a = [a]bool;
+
+type Field a, Heap = <a>[ref, Field a]a;
+
+type notAllParams a b = Field b;
+
+type Cyclic0 = Cyclic1;
+type Cyclic1 = Cyclic0;
+
+type AlsoCyclic a = <b>[AlsoCyclic b]int;
+
+type C a b;
+
+type C2 b a = C a b;
+
+function f(C int bool) returns (int);
+const x : C2 bool int;
+
+
+const y : Field int bool; // wrong number of arguments
+const z : Set int bool; // wrong number of arguments
+
+
+const d : <a,b>[notAllParams a b]int; // error: not all parameters are used
+
+
+type ref;
diff --git a/Test/test20/TypeSynonyms1.bpl b/Test/test20/TypeSynonyms1.bpl
index 98ecedca..9f61335c 100644
--- a/Test/test20/TypeSynonyms1.bpl
+++ b/Test/test20/TypeSynonyms1.bpl
@@ -1,49 +1,49 @@
-// RUN: %boogie -noVerify "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-
-
-
-type C a b;
-type C2 b a = C a b;
-
-
-// ordering of map type parameters
-function g0(<a,b>[C2 a b]int) returns (int);
-function g1(<a,b>[C2 b a]int) returns (int);
-function g2(<a,b>[C a b]int) returns (int);
-function g3(<a,b>[C b a]int) returns (int);
-
-const c0 : <a,b>[C2 a b]int;
-const c1 : <a,b>[C2 b a]int;
-const c2 : <a,b>[C a b]int;
-const c3 : <a,b>[C b a]int;
-
-axiom g0(c0) == 0;
-axiom g1(c0) == 0;
-axiom g2(c0) == 0;
-axiom g3(c0) == 0;
-axiom g0(c1) == 0;
-axiom g1(c1) == 0;
-axiom g2(c1) == 0;
-axiom g3(c1) == 0;
-axiom g0(c2) == 0;
-axiom g1(c2) == 0;
-axiom g2(c2) == 0;
-axiom g3(c2) == 0;
-axiom g0(c3) == 0;
-axiom g1(c3) == 0;
-axiom g2(c3) == 0;
-axiom g3(c3) == 0;
-
-
-type nested a = <b>[b, b, a]int;
-type nested2 = nested (nested int);
-
-
-function h(nested2) returns (bool);
-const e : <b>[b, b, <b2>[b2, b2, int]int]int;
-axiom h(e);
-
-const e2 : <b>[b, b, <b2>[b2, b, int]int]int; // wrong binding
-axiom h(e2);
-
+// RUN: %boogie -noVerify "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+
+
+type C a b;
+type C2 b a = C a b;
+
+
+// ordering of map type parameters
+function g0(<a,b>[C2 a b]int) returns (int);
+function g1(<a,b>[C2 b a]int) returns (int);
+function g2(<a,b>[C a b]int) returns (int);
+function g3(<a,b>[C b a]int) returns (int);
+
+const c0 : <a,b>[C2 a b]int;
+const c1 : <a,b>[C2 b a]int;
+const c2 : <a,b>[C a b]int;
+const c3 : <a,b>[C b a]int;
+
+axiom g0(c0) == 0;
+axiom g1(c0) == 0;
+axiom g2(c0) == 0;
+axiom g3(c0) == 0;
+axiom g0(c1) == 0;
+axiom g1(c1) == 0;
+axiom g2(c1) == 0;
+axiom g3(c1) == 0;
+axiom g0(c2) == 0;
+axiom g1(c2) == 0;
+axiom g2(c2) == 0;
+axiom g3(c2) == 0;
+axiom g0(c3) == 0;
+axiom g1(c3) == 0;
+axiom g2(c3) == 0;
+axiom g3(c3) == 0;
+
+
+type nested a = <b>[b, b, a]int;
+type nested2 = nested (nested int);
+
+
+function h(nested2) returns (bool);
+const e : <b>[b, b, <b2>[b2, b2, int]int]int;
+axiom h(e);
+
+const e2 : <b>[b, b, <b2>[b2, b, int]int]int; // wrong binding
+axiom h(e2);
+
diff --git a/Test/test20/TypeSynonyms2.bpl b/Test/test20/TypeSynonyms2.bpl
index 1cb6e781..87a7451f 100644
--- a/Test/test20/TypeSynonyms2.bpl
+++ b/Test/test20/TypeSynonyms2.bpl
@@ -1,24 +1,24 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// RUN: %boogie -noVerify -print:- -pretty:0 -env:0 -printDesugared "%s" > "%t"
-// RUN: %diff "%s.print.expect" "%t"
-
-
-type Set a = [a]bool;
-
-function union<a>(x : Set a, y : Set a) returns (Set a);
-axiom (forall<a> x : Set a, y : Set a, z : a :: (x[z] || y[z]) == union(x, y)[z]);
-
-
-const intSet0 : Set int;
-axiom (forall x:int :: intSet0[x] == (x == 0 || x == 2 || x == 3));
-
-const intSet1 : Set int;
-axiom (forall x:int :: intSet1[x] == (x == -5 || x == 3));
-
-
-procedure P() returns () {
- assert (forall x:int :: union(intSet0, intSet1)[x] ==
- (x == -5 || x == 0 || x == 2 || x == 3));
-}
-
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// RUN: %boogie -noVerify -print:- -pretty:0 -env:0 -printDesugared "%s" > "%t"
+// RUN: %diff "%s.print.expect" "%t"
+
+
+type Set a = [a]bool;
+
+function union<a>(x : Set a, y : Set a) returns (Set a);
+axiom (forall<a> x : Set a, y : Set a, z : a :: (x[z] || y[z]) == union(x, y)[z]);
+
+
+const intSet0 : Set int;
+axiom (forall x:int :: intSet0[x] == (x == 0 || x == 2 || x == 3));
+
+const intSet1 : Set int;
+axiom (forall x:int :: intSet1[x] == (x == -5 || x == 3));
+
+
+procedure P() returns () {
+ assert (forall x:int :: union(intSet0, intSet1)[x] ==
+ (x == -5 || x == 0 || x == 2 || x == 3));
+}
+
diff --git a/Test/test21/BooleanQuantification.bpl b/Test/test21/BooleanQuantification.bpl
index 1493269b..7a0c66d5 100644
--- a/Test/test21/BooleanQuantification.bpl
+++ b/Test/test21/BooleanQuantification.bpl
@@ -1,38 +1,38 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-
-function f(bool) returns (int);
-
-axiom f(true) == 17;
-axiom f(false) == 19;
-
-procedure P() returns () {
- assert (forall x:bool :: f(x) >= 0);
-}
-
-procedure Q() returns () {
- assert (forall x:int :: (x==7 || x==9) ==> x >= 0);
-}
-
-procedure R() returns () {
- assert f((forall x:bool :: f(x) >= 10)) < 19;
- assert (exists x:bool :: f(x) > 20); // should not be provable
-}
-
-
-function g<a>(a) returns (int);
-
-axiom g(true) == 17;
-axiom g(false) == 21;
-
-procedure S() returns () {
- assert (forall x:bool :: g(x) >= 0);
- assert g((forall x:bool :: g(x) >= 0)) >= 17;
- assert (forall x:bool :: f(x) == g(x)); // should not be provable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+
+function f(bool) returns (int);
+
+axiom f(true) == 17;
+axiom f(false) == 19;
+
+procedure P() returns () {
+ assert (forall x:bool :: f(x) >= 0);
+}
+
+procedure Q() returns () {
+ assert (forall x:int :: (x==7 || x==9) ==> x >= 0);
+}
+
+procedure R() returns () {
+ assert f((forall x:bool :: f(x) >= 10)) < 19;
+ assert (exists x:bool :: f(x) > 20); // should not be provable
+}
+
+
+function g<a>(a) returns (int);
+
+axiom g(true) == 17;
+axiom g(false) == 21;
+
+procedure S() returns () {
+ assert (forall x:bool :: g(x) >= 0);
+ assert g((forall x:bool :: g(x) >= 0)) >= 17;
+ assert (forall x:bool :: f(x) == g(x)); // should not be provable
} \ No newline at end of file
diff --git a/Test/test21/BooleanQuantification2.bpl b/Test/test21/BooleanQuantification2.bpl
index 22dfd217..77ac26c8 100644
--- a/Test/test21/BooleanQuantification2.bpl
+++ b/Test/test21/BooleanQuantification2.bpl
@@ -1,20 +1,20 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-axiom (forall x:bool :: x || !x);
-axiom (forall x:bool :: x == true || x == false);
-
-procedure P() returns () {
- var i : int;
- var j : bool;
-
- assert i != 3 || i != 4;
- assert j || !j;
-
- assert false;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+axiom (forall x:bool :: x || !x);
+axiom (forall x:bool :: x == true || x == false);
+
+procedure P() returns () {
+ var i : int;
+ var j : bool;
+
+ assert i != 3 || i != 4;
+ assert j || !j;
+
+ assert false;
} \ No newline at end of file
diff --git a/Test/test21/Boxing.bpl b/Test/test21/Boxing.bpl
index 0112b6cf..aa7c53b3 100644
--- a/Test/test21/Boxing.bpl
+++ b/Test/test21/Boxing.bpl
@@ -1,27 +1,27 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-type Box;
-
-function box<a>(a) returns (Box);
-function unbox<a>(Box) returns (a);
-
-axiom (forall<a> x:a :: unbox(box(x)) == x);
-
-var b1: Box;
-var b2: Box;
-var b3: Box;
-
-procedure P() returns ()
- modifies b1, b2, b3; {
- b1 := box(13);
- b2 := box(true);
- b3 := box(b1);
-
- assert unbox(b1) == 13 && unbox(b2) == true && unbox(unbox(b3)) == 13;
- assert unbox(b1) == true; // error
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+type Box;
+
+function box<a>(a) returns (Box);
+function unbox<a>(Box) returns (a);
+
+axiom (forall<a> x:a :: unbox(box(x)) == x);
+
+var b1: Box;
+var b2: Box;
+var b3: Box;
+
+procedure P() returns ()
+ modifies b1, b2, b3; {
+ b1 := box(13);
+ b2 := box(true);
+ b3 := box(b1);
+
+ assert unbox(b1) == 13 && unbox(b2) == true && unbox(unbox(b3)) == 13;
+ assert unbox(b1) == true; // error
} \ No newline at end of file
diff --git a/Test/test21/Casts.bpl b/Test/test21/Casts.bpl
index 739185ea..07494ec1 100644
--- a/Test/test21/Casts.bpl
+++ b/Test/test21/Casts.bpl
@@ -1,17 +1,17 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-procedure P() returns () {
- var m : [int]int, n : [int]int, x : int;
-
- assume m[x] == x;
- assume n[x] == 1;
-
- assert n[m[x]] == 1;
- assert m[n[x]] == 1; // should not be provable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+procedure P() returns () {
+ var m : [int]int, n : [int]int, x : int;
+
+ assume m[x] == x;
+ assume n[x] == 1;
+
+ assert n[m[x]] == 1;
+ assert m[n[x]] == 1; // should not be provable
} \ No newline at end of file
diff --git a/Test/test21/Coercions2.bpl b/Test/test21/Coercions2.bpl
index e9a78574..a52fb0e6 100644
--- a/Test/test21/Coercions2.bpl
+++ b/Test/test21/Coercions2.bpl
@@ -1,30 +1,30 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type Box, C;
-
-function box<a>(a) returns (Box);
-function unbox<a>(Box) returns (a);
-
-axiom (forall<a> x:a :: unbox(box(x)) == x);
-
-axiom (forall<a> x:Box :: {unbox(x):a} box(unbox(x):a) == x);
-
-axiom (forall x:Box :: box(unbox(x)) == x); // warning
-
-procedure P() {
- var b : Box;
- var i : C;
-
- assert unbox(box(13)) == 13;
-
- i := unbox(b);
- assert b == box(i);
-
- assert false;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type Box, C;
+
+function box<a>(a) returns (Box);
+function unbox<a>(Box) returns (a);
+
+axiom (forall<a> x:a :: unbox(box(x)) == x);
+
+axiom (forall<a> x:Box :: {unbox(x):a} box(unbox(x):a) == x);
+
+axiom (forall x:Box :: box(unbox(x)) == x); // warning
+
+procedure P() {
+ var b : Box;
+ var i : C;
+
+ assert unbox(box(13)) == 13;
+
+ i := unbox(b);
+ assert b == box(i);
+
+ assert false;
} \ No newline at end of file
diff --git a/Test/test21/Colors.bpl b/Test/test21/Colors.bpl
index f0e12672..fdfc307f 100644
--- a/Test/test21/Colors.bpl
+++ b/Test/test21/Colors.bpl
@@ -1,27 +1,27 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type Color;
-
-const Blue, Red, Green : Color;
-
-axiom (forall x : Color :: x == Blue || x == Red || x == Green);
-
-procedure P() returns () {
- var x : Color;
-
- assume x != Blue;
- assert x == Red; // should not be provable
-}
-
-procedure Q() returns () {
- var x : Color;
-
- assume x != Blue && x != Green;
- assert x == Red;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type Color;
+
+const Blue, Red, Green : Color;
+
+axiom (forall x : Color :: x == Blue || x == Red || x == Green);
+
+procedure P() returns () {
+ var x : Color;
+
+ assume x != Blue;
+ assert x == Red; // should not be provable
+}
+
+procedure Q() returns () {
+ var x : Color;
+
+ assume x != Blue && x != Green;
+ assert x == Red;
} \ No newline at end of file
diff --git a/Test/test21/DisjointDomains.bpl b/Test/test21/DisjointDomains.bpl
index 30d8a6f7..405d325c 100644
--- a/Test/test21/DisjointDomains.bpl
+++ b/Test/test21/DisjointDomains.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-type C _;
-
-function f<a>(C a) returns (int);
-
-axiom (forall x : C int :: f(x) == 3);
-axiom (forall x : C bool :: f(x) == 7);
-
-procedure P() returns () {
- var a : C int, b : C bool, c : C ref;
-
- start:
- assert f(a) == 3;
- assert f(b) == 7;
- assert f(b) == 8; // should not be provable
-}
-
-procedure Q() returns () {
- var c : C ref;
-
- start:
- assert f(c) == 7; // should not be provable
-}
-
-procedure R<a>(c : C a) returns () {
-
- start:
- assert f(c) == 7; // should not be provable
-}
-
-type ref;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+type C _;
+
+function f<a>(C a) returns (int);
+
+axiom (forall x : C int :: f(x) == 3);
+axiom (forall x : C bool :: f(x) == 7);
+
+procedure P() returns () {
+ var a : C int, b : C bool, c : C ref;
+
+ start:
+ assert f(a) == 3;
+ assert f(b) == 7;
+ assert f(b) == 8; // should not be provable
+}
+
+procedure Q() returns () {
+ var c : C ref;
+
+ start:
+ assert f(c) == 7; // should not be provable
+}
+
+procedure R<a>(c : C a) returns () {
+
+ start:
+ assert f(c) == 7; // should not be provable
+}
+
+type ref;
diff --git a/Test/test21/DisjointDomains2.bpl b/Test/test21/DisjointDomains2.bpl
index ae25a20e..9f9dd63e 100644
--- a/Test/test21/DisjointDomains2.bpl
+++ b/Test/test21/DisjointDomains2.bpl
@@ -1,70 +1,70 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-type C _;
-
-function f<a>(C a) returns (int);
-
-axiom (forall<a> x : C a :: f(x) == 42);
-
-procedure P(a : C int) returns () {
-
- start:
- assert f(a) == 42;
- assert f(a) == 43; // should not be provable
-}
-
-procedure Q<a>(c : C a) returns () {
-
- start:
- assert f(c) == 42;
- assert f(c) == 43; // should not be provable
-}
-
-function g<a,b>(a, b) returns (int);
-
-
-axiom (forall x : int, y : bool :: g(x,y) == 13);
-axiom (forall<a> x : int, y : C a :: g(x,y) == 42);
-axiom (forall<a,z> x : C z, y : C a :: g(x,y) == 43);
-
-procedure R() returns () {
-
- start:
- assert g(7, true) == 13;
- assert g(7, false) == 15; // should not be provable
-}
-
-procedure S<b>(y : C b) returns () {
-
- start:
- assert g(3, y) == f(y);
- assert g(y, false) == 15; // should not be provable
-}
-
-procedure T<a,b>(y : C b, param : a) returns () {
- var x : C a; var z : C b;
-
- start:
- assert g(y, x) == g(x, y);
- assert g(y, x) == 43;
- assert g(f(x), y) == 42;
- assert g(y, z) == 15; // should not be provable
-}
-
-
-type D _ _;
-
-procedure U() returns () {
- var u : D int bool, v : D bool int;
-
- start:
- assume (forall<a,b> x:D a b, y:b :: g(x, y) == -3);
-
- assert g(v, 32) == -3;
- assert g(v, 716371398712982312321) == -3;
- assert g(u, 1) == -3; // should not be provable
-}
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+type C _;
+
+function f<a>(C a) returns (int);
+
+axiom (forall<a> x : C a :: f(x) == 42);
+
+procedure P(a : C int) returns () {
+
+ start:
+ assert f(a) == 42;
+ assert f(a) == 43; // should not be provable
+}
+
+procedure Q<a>(c : C a) returns () {
+
+ start:
+ assert f(c) == 42;
+ assert f(c) == 43; // should not be provable
+}
+
+function g<a,b>(a, b) returns (int);
+
+
+axiom (forall x : int, y : bool :: g(x,y) == 13);
+axiom (forall<a> x : int, y : C a :: g(x,y) == 42);
+axiom (forall<a,z> x : C z, y : C a :: g(x,y) == 43);
+
+procedure R() returns () {
+
+ start:
+ assert g(7, true) == 13;
+ assert g(7, false) == 15; // should not be provable
+}
+
+procedure S<b>(y : C b) returns () {
+
+ start:
+ assert g(3, y) == f(y);
+ assert g(y, false) == 15; // should not be provable
+}
+
+procedure T<a,b>(y : C b, param : a) returns () {
+ var x : C a; var z : C b;
+
+ start:
+ assert g(y, x) == g(x, y);
+ assert g(y, x) == 43;
+ assert g(f(x), y) == 42;
+ assert g(y, z) == 15; // should not be provable
+}
+
+
+type D _ _;
+
+procedure U() returns () {
+ var u : D int bool, v : D bool int;
+
+ start:
+ assume (forall<a,b> x:D a b, y:b :: g(x, y) == -3);
+
+ assert g(v, 32) == -3;
+ assert g(v, 716371398712982312321) == -3;
+ assert g(u, 1) == -3; // should not be provable
+}
diff --git a/Test/test21/EmptyList.bpl b/Test/test21/EmptyList.bpl
index 450cd064..6acd2736 100644
--- a/Test/test21/EmptyList.bpl
+++ b/Test/test21/EmptyList.bpl
@@ -1,53 +1,53 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type List _;
-
-function NIL<a>() returns (List a);
-function Cons<a>(a, List a) returns (List a);
-
-function car<a>(List a) returns (a);
-function cdr<a>(List a) returns (List a);
-
-axiom (forall<a> x:a, l:List a :: car(Cons(x, l)) == x);
-axiom (forall<a> x:a, l:List a :: cdr(Cons(x, l)) == l);
-
-axiom (forall<a> x:a, l:List a :: Cons(x, l) != NIL());
-
-var l:List bool;
-
-var m:List int;
-var mar:[int](List int);
-
-procedure P() returns ()
- requires m != NIL();
- requires mar[0] == m && (forall i:int :: i > 0 ==> mar[i] == cdr(mar[i-1]));
- modifies l, m, mar; {
-
- l := Cons(true, NIL());
-
- assert l != NIL();
- l := cdr(l);
-
- assert l == NIL();
- l := Cons(true, l);
- l := Cons(false, l);
-
- assert car(mar[1]) == car(cdr(m));
- mar[0] := NIL();
- assert mar[0] != m;
-
- assert !car(l) && car(cdr(l));
- l := cdr(cdr(l));
-
- assert (forall i:int :: i > 0 ==> mar[i] == cdr(mar[i-1])); // error
-}
-
-procedure Q() returns () {
- assert Cons(NIL(), NIL()) != NIL(); // warning, but provable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type List _;
+
+function NIL<a>() returns (List a);
+function Cons<a>(a, List a) returns (List a);
+
+function car<a>(List a) returns (a);
+function cdr<a>(List a) returns (List a);
+
+axiom (forall<a> x:a, l:List a :: car(Cons(x, l)) == x);
+axiom (forall<a> x:a, l:List a :: cdr(Cons(x, l)) == l);
+
+axiom (forall<a> x:a, l:List a :: Cons(x, l) != NIL());
+
+var l:List bool;
+
+var m:List int;
+var mar:[int](List int);
+
+procedure P() returns ()
+ requires m != NIL();
+ requires mar[0] == m && (forall i:int :: i > 0 ==> mar[i] == cdr(mar[i-1]));
+ modifies l, m, mar; {
+
+ l := Cons(true, NIL());
+
+ assert l != NIL();
+ l := cdr(l);
+
+ assert l == NIL();
+ l := Cons(true, l);
+ l := Cons(false, l);
+
+ assert car(mar[1]) == car(cdr(m));
+ mar[0] := NIL();
+ assert mar[0] != m;
+
+ assert !car(l) && car(cdr(l));
+ l := cdr(cdr(l));
+
+ assert (forall i:int :: i > 0 ==> mar[i] == cdr(mar[i-1])); // error
+}
+
+procedure Q() returns () {
+ assert Cons(NIL(), NIL()) != NIL(); // warning, but provable
} \ No newline at end of file
diff --git a/Test/test21/EmptySetBug.bpl b/Test/test21/EmptySetBug.bpl
index e3feb16c..6c25ed95 100644
--- a/Test/test21/EmptySetBug.bpl
+++ b/Test/test21/EmptySetBug.bpl
@@ -1,36 +1,36 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-type ref;
-
-const null: ref;
-
-type Set T = [T]bool;
-
-function Set#Empty<T>() returns (Set T);
-
-axiom (forall<T> o: T :: { Set#Empty()[o] } !Set#Empty()[o]);
-
-function Set#Singleton<T>(T) returns (Set T);
-
-axiom (forall<T> r: T :: { Set#Singleton(r) } Set#Singleton(r)[r]);
-
-axiom (forall<T> r: T, o: T :: { Set#Singleton(r)[o] } Set#Singleton(r)[o] <==> r == o);
-
-function Set#UnionOne<T>(Set T, T) returns (Set T);
-
-axiom (forall<T> a: Set T, x: T, o: T :: { Set#UnionOne(a, x)[o] } Set#UnionOne(a, x)[o] <==> o == x || a[o]);
-
-procedure Test(this: ref)
-{
- var s: Set ref;
-
- s := Set#UnionOne(Set#Empty(), this);
- assert s[this];
- assert !Set#Empty()[this];
-
- assert Set#Singleton(this)[null]; // should not be provable
-}
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+type ref;
+
+const null: ref;
+
+type Set T = [T]bool;
+
+function Set#Empty<T>() returns (Set T);
+
+axiom (forall<T> o: T :: { Set#Empty()[o] } !Set#Empty()[o]);
+
+function Set#Singleton<T>(T) returns (Set T);
+
+axiom (forall<T> r: T :: { Set#Singleton(r) } Set#Singleton(r)[r]);
+
+axiom (forall<T> r: T, o: T :: { Set#Singleton(r)[o] } Set#Singleton(r)[o] <==> r == o);
+
+function Set#UnionOne<T>(Set T, T) returns (Set T);
+
+axiom (forall<T> a: Set T, x: T, o: T :: { Set#UnionOne(a, x)[o] } Set#UnionOne(a, x)[o] <==> o == x || a[o]);
+
+procedure Test(this: ref)
+{
+ var s: Set ref;
+
+ s := Set#UnionOne(Set#Empty(), this);
+ assert s[this];
+ assert !Set#Empty()[this];
+
+ assert Set#Singleton(this)[null]; // should not be provable
+}
diff --git a/Test/test21/Flattening.bpl b/Test/test21/Flattening.bpl
index ddebd9ab..3931c573 100644
--- a/Test/test21/Flattening.bpl
+++ b/Test/test21/Flattening.bpl
@@ -1,19 +1,19 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-function g(int) returns (int);
-function f(bool) returns (int);
-
-
-axiom (f((exists x:int :: g(x) >= 12)) == 3);
-axiom (f((exists x:int :: g(f((forall y:int :: g(x+y) >= 0))) >= 12)) == 3);
-
-
-procedure P() returns () {
- assert false;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+function g(int) returns (int);
+function f(bool) returns (int);
+
+
+axiom (f((exists x:int :: g(x) >= 12)) == 3);
+axiom (f((exists x:int :: g(f((forall y:int :: g(x+y) >= 0))) >= 12)) == 3);
+
+
+procedure P() returns () {
+ assert false;
} \ No newline at end of file
diff --git a/Test/test21/FunAxioms.bpl b/Test/test21/FunAxioms.bpl
index 5964b4e8..2baa2169 100644
--- a/Test/test21/FunAxioms.bpl
+++ b/Test/test21/FunAxioms.bpl
@@ -1,46 +1,46 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type Pair a b;
-
-function MP<a,b>(x:a, y:b) returns (Pair a b);
-function Left<a,b>(Pair a b) returns (a);
-function Right<a,b>(Pair a b) returns (b);
-
-axiom (forall<a,b> x:a, y:b :: Left(MP(x,y)) == x);
-axiom (forall<a,b> x:a, y:b :: Right(MP(x,y)) == y);
-
-type A, B;
-
-procedure P() returns () {
-
- var x:A, y:B, z:A, p : Pair A B;
-
- assert Left(MP(x,y)) == x;
- assert Right(MP(x,y)) == y;
- assert Right(MP(x,MP(x,y))) == MP(x,y);
- assert Left(MP(x,MP(x,y))) == x;
- assert Right(Right(MP(x,MP(x,y)))) == y;
-
- p := MP(x, y);
-
- p := MP(Left(p), y);
-
- assert Left(p) == x && Right(p) == y;
-
- assert Left(p) == z; // should not be provable
-
-}
-
-procedure Q() returns () {
-
- assert Left(MP(1,3)) == 1;
- assert Right(MP(1,3)) == 3;
- assert Right(MP(1,true)) == true;
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type Pair a b;
+
+function MP<a,b>(x:a, y:b) returns (Pair a b);
+function Left<a,b>(Pair a b) returns (a);
+function Right<a,b>(Pair a b) returns (b);
+
+axiom (forall<a,b> x:a, y:b :: Left(MP(x,y)) == x);
+axiom (forall<a,b> x:a, y:b :: Right(MP(x,y)) == y);
+
+type A, B;
+
+procedure P() returns () {
+
+ var x:A, y:B, z:A, p : Pair A B;
+
+ assert Left(MP(x,y)) == x;
+ assert Right(MP(x,y)) == y;
+ assert Right(MP(x,MP(x,y))) == MP(x,y);
+ assert Left(MP(x,MP(x,y))) == x;
+ assert Right(Right(MP(x,MP(x,y)))) == y;
+
+ p := MP(x, y);
+
+ p := MP(Left(p), y);
+
+ assert Left(p) == x && Right(p) == y;
+
+ assert Left(p) == z; // should not be provable
+
+}
+
+procedure Q() returns () {
+
+ assert Left(MP(1,3)) == 1;
+ assert Right(MP(1,3)) == 3;
+ assert Right(MP(1,true)) == true;
+
} \ No newline at end of file
diff --git a/Test/test21/FunAxioms2.bpl b/Test/test21/FunAxioms2.bpl
index 6e087baf..341807f8 100644
--- a/Test/test21/FunAxioms2.bpl
+++ b/Test/test21/FunAxioms2.bpl
@@ -1,27 +1,27 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-type T;
-
-function f() returns (int); // functions without arguments
-function g() returns (T);
-
-
-const c : T;
-
-axiom (f() >= 13);
-axiom (g() != c);
-
-procedure P() returns () {
- var x : int;
-
- x := f();
-
- assert x >= 0 && f() >= 7;
- assert g() != c;
- assert f() >= 20; // should not be provable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+type T;
+
+function f() returns (int); // functions without arguments
+function g() returns (T);
+
+
+const c : T;
+
+axiom (f() >= 13);
+axiom (g() != c);
+
+procedure P() returns () {
+ var x : int;
+
+ x := f();
+
+ assert x >= 0 && f() >= 7;
+ assert g() != c;
+ assert f() >= 20; // should not be provable
} \ No newline at end of file
diff --git a/Test/test21/HeapAbstraction.bpl b/Test/test21/HeapAbstraction.bpl
index 0fb2f007..b1abf0c0 100644
--- a/Test/test21/HeapAbstraction.bpl
+++ b/Test/test21/HeapAbstraction.bpl
@@ -1,25 +1,25 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type Field a, Heap = <a>[ref, Field a]a;
-
-function f<b>(<a>[b, Field a]a) returns (int);
-
-axiom (forall x:<a>[int, Field a]a :: f(x) == 17);
-
-axiom (forall x:<a>[ref, Field a]a :: f(x) == 42);
-
-procedure P() returns () {
- var h : Heap, g : <a>[bool, Field a]a;
-
- assert f(h) == 42;
- assert f(g) >= 0; // should not be provable
-}
-
-type ref;
-const null : ref;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type Field a, Heap = <a>[ref, Field a]a;
+
+function f<b>(<a>[b, Field a]a) returns (int);
+
+axiom (forall x:<a>[int, Field a]a :: f(x) == 17);
+
+axiom (forall x:<a>[ref, Field a]a :: f(x) == 42);
+
+procedure P() returns () {
+ var h : Heap, g : <a>[bool, Field a]a;
+
+ assert f(h) == 42;
+ assert f(g) >= 0; // should not be provable
+}
+
+type ref;
+const null : ref;
diff --git a/Test/test21/HeapAxiom.bpl b/Test/test21/HeapAxiom.bpl
index 691c97f9..a49ddd36 100644
--- a/Test/test21/HeapAxiom.bpl
+++ b/Test/test21/HeapAxiom.bpl
@@ -1,33 +1,33 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type Field a, Heap = <a>[ref, Field a]a;
-
-function IsHeap(Heap) returns (bool);
-const alloc : Field bool;
-
-axiom (forall H:Heap, o:ref, f:Field ref ::
- IsHeap(H) && H[o,alloc] ==> H[H[o,f], alloc]);
-
-procedure P() returns () {
- var h : Heap, o : ref, g : Field ref, i : Field ref, o2 : ref;
- assume IsHeap(h) && h[o, alloc];
-
- o2 := h[o, g];
- assert h[o2, alloc];
-
- o2 := h[o2, g];
- assert h[o2, alloc];
-
- h[o2, alloc] := false;
-
- o2 := h[o2, g];
- assert h[o2, alloc]; // should not be provable
-}
-
-type ref;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type Field a, Heap = <a>[ref, Field a]a;
+
+function IsHeap(Heap) returns (bool);
+const alloc : Field bool;
+
+axiom (forall H:Heap, o:ref, f:Field ref ::
+ IsHeap(H) && H[o,alloc] ==> H[H[o,f], alloc]);
+
+procedure P() returns () {
+ var h : Heap, o : ref, g : Field ref, i : Field ref, o2 : ref;
+ assume IsHeap(h) && h[o, alloc];
+
+ o2 := h[o, g];
+ assert h[o2, alloc];
+
+ o2 := h[o2, g];
+ assert h[o2, alloc];
+
+ h[o2, alloc] := false;
+
+ o2 := h[o2, g];
+ assert h[o2, alloc]; // should not be provable
+}
+
+type ref;
diff --git a/Test/test21/InterestingExamples0.bpl b/Test/test21/InterestingExamples0.bpl
index 08ed61d4..fd79ad5c 100644
--- a/Test/test21/InterestingExamples0.bpl
+++ b/Test/test21/InterestingExamples0.bpl
@@ -1,14 +1,14 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-procedure P() returns () {
-var a : <t>[t]int;
-
-a[5] := 0;
-a[true] := 1;
-assert a[5] == 0;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+procedure P() returns () {
+var a : <t>[t]int;
+
+a[5] := 0;
+a[true] := 1;
+assert a[5] == 0;
} \ No newline at end of file
diff --git a/Test/test21/InterestingExamples1.bpl b/Test/test21/InterestingExamples1.bpl
index 247e2c5b..48b4a5dd 100644
--- a/Test/test21/InterestingExamples1.bpl
+++ b/Test/test21/InterestingExamples1.bpl
@@ -1,33 +1,33 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-type Set = <a> [a] bool;
-type Field a;
-type Heap = <b> [ref, Field b] b;
-
-
-const emptySet : Set;
-axiom (forall<t> x:t :: !emptySet[x]);
-
-procedure P() returns () {
- var x : Set, f : Field Set, g : Field int, heap : Heap, o : ref;
-
- x := emptySet;
- heap[o, f] := x;
- heap[o, g] := 13;
- assert heap[o, f] == emptySet && heap[o, g] == 13;
-
- heap[o, f] := heap[o, f][17 := true];
- heap[o, f] := heap[o, f][g := true];
-
- assert (forall<t> y:t :: heap[o, f][y] == (y == 17 || y == g));
- assert (forall<t> y:t :: heap[o, f][y] == (y == 16 || y == g)); // should not hold
-
-}
-
-type ref;
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+type Set = <a> [a] bool;
+type Field a;
+type Heap = <b> [ref, Field b] b;
+
+
+const emptySet : Set;
+axiom (forall<t> x:t :: !emptySet[x]);
+
+procedure P() returns () {
+ var x : Set, f : Field Set, g : Field int, heap : Heap, o : ref;
+
+ x := emptySet;
+ heap[o, f] := x;
+ heap[o, g] := 13;
+ assert heap[o, f] == emptySet && heap[o, g] == 13;
+
+ heap[o, f] := heap[o, f][17 := true];
+ heap[o, f] := heap[o, f][g := true];
+
+ assert (forall<t> y:t :: heap[o, f][y] == (y == 17 || y == g));
+ assert (forall<t> y:t :: heap[o, f][y] == (y == 16 || y == g)); // should not hold
+
+}
+
+type ref;
+
diff --git a/Test/test21/InterestingExamples2.bpl b/Test/test21/InterestingExamples2.bpl
index 6fc8d259..4c07ee68 100644
--- a/Test/test21/InterestingExamples2.bpl
+++ b/Test/test21/InterestingExamples2.bpl
@@ -1,20 +1,20 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-procedure P() returns () {
-var m : <a>[a]ref;
-var n : <b>[b]b;
-var o : ref;
-
-m[5] := null;
-assert m[true := o][5] == null;
-assert m[n[true] := o][5] == null;
-}
-
-type ref;
-const null : ref;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+procedure P() returns () {
+var m : <a>[a]ref;
+var n : <b>[b]b;
+var o : ref;
+
+m[5] := null;
+assert m[true := o][5] == null;
+assert m[n[true] := o][5] == null;
+}
+
+type ref;
+const null : ref;
diff --git a/Test/test21/InterestingExamples3.bpl b/Test/test21/InterestingExamples3.bpl
index 24e89b2b..4990fb72 100644
--- a/Test/test21/InterestingExamples3.bpl
+++ b/Test/test21/InterestingExamples3.bpl
@@ -1,33 +1,33 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-procedure P() returns () {
-
- assume (forall<t> m : [t]bool :: // uses "infinitely many" map types
- (forall x : t :: m[x] == false));
-
-}
-
-
-procedure Q() returns () {
- var h : [int] bool;
-
- assume (forall<t> m : [t]bool, x : t :: m[x] == false);
- assert !h[42];
- assert false; // should really be provable
-}
-
-
-
-procedure R() returns () {
- var h : [int] bool;
-
- assume (forall<t> m : [t]bool, x : t :: m[x] == false);
- assert !h[42];
- assert !h[42 := true][42];
- assert false; // wow
-}
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+procedure P() returns () {
+
+ assume (forall<t> m : [t]bool :: // uses "infinitely many" map types
+ (forall x : t :: m[x] == false));
+
+}
+
+
+procedure Q() returns () {
+ var h : [int] bool;
+
+ assume (forall<t> m : [t]bool, x : t :: m[x] == false);
+ assert !h[42];
+ assert false; // should really be provable
+}
+
+
+
+procedure R() returns () {
+ var h : [int] bool;
+
+ assume (forall<t> m : [t]bool, x : t :: m[x] == false);
+ assert !h[42];
+ assert !h[42 := true][42];
+ assert false; // wow
+}
diff --git a/Test/test21/InterestingExamples4.bpl b/Test/test21/InterestingExamples4.bpl
index 941c9020..aa8993db 100644
--- a/Test/test21/InterestingExamples4.bpl
+++ b/Test/test21/InterestingExamples4.bpl
@@ -1,48 +1,48 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-// a property that should hold according to the Boogie semantics
-// (but no automatic theorem prover will be able to prove it)
-
-
-type C a;
-
-function sameType<a,b>(x:a, y:b) returns (bool);
-
-axiom (forall<a,b> x:a, y:b :: sameType(x,y) == (exists z:a :: y==z));
-
-// Will be defined to hold whenever the type of y (i.e., b)
-// can be reached from the type of x (a) by applying the type
-// constructor C a finite number of times. In order words,
-// b = C^n(a)
-function rel<a,b>(x:a, y:b) returns (bool);
-
-function relHelp<a,b>(x:a, y:b, z:int) returns (bool);
-
-axiom (forall<a, b> x:a, y:b :: relHelp(x, y, 0) == sameType(x, y));
-axiom (forall<a, b> n:int, x:a, y:b ::
- (n >= 0 ==>
- relHelp(x, y, n+1) ==
- (exists<c> z:c, y' : C c :: relHelp(x, z, n) && y==y')));
-
-axiom (forall<a, b> x:a, y:b ::
- rel(x, y) == (exists n:int :: n >= 0 && relHelp(x, y, n)));
-
-// Assert that from every type we can reach a type that is
-// minimal, i.e., that cannot be reached by applying C to some
-// other type. This will only hold in well-founded type
-// hierarchies
-
-procedure P() returns () {
- var v : C int;
-
- assert relHelp(7, 13, 0);
- assert rel(7, 13);
-
- assert (forall<b> y:b :: (exists<a> x:a :: // too hard for a theorem prover
- rel(x, y) &&
- (forall<c> z:c :: (rel(z, x) ==> sameType(z, x)))));
-}
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+// a property that should hold according to the Boogie semantics
+// (but no automatic theorem prover will be able to prove it)
+
+
+type C a;
+
+function sameType<a,b>(x:a, y:b) returns (bool);
+
+axiom (forall<a,b> x:a, y:b :: sameType(x,y) == (exists z:a :: y==z));
+
+// Will be defined to hold whenever the type of y (i.e., b)
+// can be reached from the type of x (a) by applying the type
+// constructor C a finite number of times. In order words,
+// b = C^n(a)
+function rel<a,b>(x:a, y:b) returns (bool);
+
+function relHelp<a,b>(x:a, y:b, z:int) returns (bool);
+
+axiom (forall<a, b> x:a, y:b :: relHelp(x, y, 0) == sameType(x, y));
+axiom (forall<a, b> n:int, x:a, y:b ::
+ (n >= 0 ==>
+ relHelp(x, y, n+1) ==
+ (exists<c> z:c, y' : C c :: relHelp(x, z, n) && y==y')));
+
+axiom (forall<a, b> x:a, y:b ::
+ rel(x, y) == (exists n:int :: n >= 0 && relHelp(x, y, n)));
+
+// Assert that from every type we can reach a type that is
+// minimal, i.e., that cannot be reached by applying C to some
+// other type. This will only hold in well-founded type
+// hierarchies
+
+procedure P() returns () {
+ var v : C int;
+
+ assert relHelp(7, 13, 0);
+ assert rel(7, 13);
+
+ assert (forall<b> y:b :: (exists<a> x:a :: // too hard for a theorem prover
+ rel(x, y) &&
+ (forall<c> z:c :: (rel(z, x) ==> sameType(z, x)))));
+}
diff --git a/Test/test21/InterestingExamples5.bpl b/Test/test21/InterestingExamples5.bpl
index 3f4e4f34..8eadadc9 100644
--- a/Test/test21/InterestingExamples5.bpl
+++ b/Test/test21/InterestingExamples5.bpl
@@ -1,22 +1,22 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type C a;
-
-function f<a>(C a) returns (int);
-
-//axiom (forall<a> x:C a :: {f(x)} (exists y:C a :: f(y) == 42));
-
-function g<a>(C a) returns (C a);
-axiom (forall<a> x:C a :: f(g(x)) == 42);
-
-procedure P() returns () {
- var z : C int;
- assume g(z) == z;
- assert (exists x : C int :: f(x) == 42);
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type C a;
+
+function f<a>(C a) returns (int);
+
+//axiom (forall<a> x:C a :: {f(x)} (exists y:C a :: f(y) == 42));
+
+function g<a>(C a) returns (C a);
+axiom (forall<a> x:C a :: f(g(x)) == 42);
+
+procedure P() returns () {
+ var z : C int;
+ assume g(z) == z;
+ assert (exists x : C int :: f(x) == 42);
} \ No newline at end of file
diff --git a/Test/test21/Keywords.bpl b/Test/test21/Keywords.bpl
index 3be91fa8..53a323cd 100644
--- a/Test/test21/Keywords.bpl
+++ b/Test/test21/Keywords.bpl
@@ -1,15 +1,15 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-function NOT(x:int) returns(int);
-
-axiom (forall x:int :: NOT(x) == 1 - x);
-
-procedure P() returns () {
- assert NOT(5) == -4;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+function NOT(x:int) returns(int);
+
+axiom (forall x:int :: NOT(x) == 1 - x);
+
+procedure P() returns () {
+ assert NOT(5) == -4;
} \ No newline at end of file
diff --git a/Test/test21/LargeLiterals0.bpl b/Test/test21/LargeLiterals0.bpl
index 57877f9d..0f602910 100644
--- a/Test/test21/LargeLiterals0.bpl
+++ b/Test/test21/LargeLiterals0.bpl
@@ -1,26 +1,26 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-var x : int;
-
-procedure P() modifies x; {
-
- x := 1000000;
- assert x > 0 && x < 2000000;
-
- x := x + 256;
- assert x == 1000256;
-
- x := 1000000000000;
- x := x + 100100;
- x := x - 100;
- assert x == 1000000100000;
-
- assert x < -123456789; // error
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+var x : int;
+
+procedure P() modifies x; {
+
+ x := 1000000;
+ assert x > 0 && x < 2000000;
+
+ x := x + 256;
+ assert x == 1000256;
+
+ x := 1000000000000;
+ x := x + 100100;
+ x := x - 100;
+ assert x == 1000000100000;
+
+ assert x < -123456789; // error
+
} \ No newline at end of file
diff --git a/Test/test21/LetSorting.bpl b/Test/test21/LetSorting.bpl
index c58c6242..9c76dbea 100644
--- a/Test/test21/LetSorting.bpl
+++ b/Test/test21/LetSorting.bpl
@@ -1,21 +1,21 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-procedure Array0() returns (z: int)
- ensures z >= 5;
-{
-L0:
- goto L1, L2;
-L1:
- z := 10;
-L2:
- z := 20;
- return;
-}
-
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+procedure Array0() returns (z: int)
+ ensures z >= 5;
+{
+L0:
+ goto L1, L2;
+L1:
+ z := 10;
+L2:
+ z := 20;
+ return;
+}
+
+
diff --git a/Test/test21/MapAxiomsConsistency.bpl b/Test/test21/MapAxiomsConsistency.bpl
index 4c8302a4..4020c00d 100644
--- a/Test/test21/MapAxiomsConsistency.bpl
+++ b/Test/test21/MapAxiomsConsistency.bpl
@@ -1,103 +1,103 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-// Dafny program verifier version 0.92, Copyright (c) 2003-2008, Microsoft.
-// Command Line Options: /trace /typeEncoding:arguments /print:test.bpl test.dfy
-
-type ref;
-
-const null: ref;
-
-type Set T = [T]bool;
-function Set#Empty<T>() returns (Set T);
-function Set#Singleton<T>(T) returns (Set T);
-function Set#UnionOne<T>(Set T, T) returns (Set T);
-function Set#Union<T>(Set T, Set T) returns (Set T);
-function Set#Intersection<T>(Set T, Set T) returns (Set T);
-function Set#Difference<T>(Set T, Set T) returns (Set T);
-function Set#Subset<T>(Set T, Set T) returns (bool);
-function Set#Equal<T>(Set T, Set T) returns (bool);
-function Set#Disjoint<T>(Set T, Set T) returns (bool);
-
-type Seq _;
-function Seq#Length<T>(Seq T) returns (int);
-function Seq#Empty<T>() returns (Seq T);
-function Seq#Singleton<T>(T) returns (Seq T);
-function Seq#Build<T>(s: Seq T, index: int, val: T, newLength: int) returns (Seq T);
-function Seq#Append<T>(Seq T, Seq T) returns (Seq T);
-function Seq#Index<T>(Seq T, int) returns (T);
-function Seq#Contains<T>(Seq T, T) returns (bool);
-function Seq#Equal<T>(Seq T, Seq T) returns (bool);
-function Seq#SameUntil<T>(Seq T, Seq T, int) returns (bool);
-function Seq#Take<T>(s:Seq T, howMany: int) returns (Seq T);
-function Seq#Drop<T>(s:Seq T, howMany: int) returns (Seq T);
-
-type Field _;
-type HeapType = <alpha>[ref,Field alpha]alpha;
-function $IsGoodHeap(HeapType) returns (bool);
-var $Heap: HeapType where $IsGoodHeap($Heap);
-const alloc: Field bool;
-function $HeapSucc(HeapType, HeapType) returns (bool);
-
-const unique Node.list: Field (Seq ref);
-const unique Node.footprint: Field [ref]bool;
-const unique Node.data: Field ref;
-const unique Node.next: Field ref;
-function Node.Valid($heap: HeapType, this: ref) returns (bool);
-
-
-
-
-axiom (forall<T> r: T, o: T :: { Set#Singleton(r)[o] } Set#Singleton(r)[o] <==> r == o);
-
-axiom (forall $Heap: HeapType, this: ref :: { Node.Valid($Heap, this) } this != null && $IsGoodHeap($Heap) ==> Node.Valid($Heap, this) == ($Heap[this, Node.footprint][this] && !$Heap[this, Node.footprint][null] && (forall n: ref :: $Heap[this, Node.footprint][n] ==> $Heap[n, Node.footprint][n] && !$Heap[n, Node.footprint][null] && Set#Subset($Heap[n, Node.footprint], $Heap[this, Node.footprint]) && ($Heap[n, Node.next] == null ==> Seq#Equal($Heap[n, Node.list], Seq#Build(Seq#Empty(), 0, $Heap[n, Node.data], 1))) && ($Heap[n, Node.next] != null ==> $Heap[n, Node.footprint][$Heap[n, Node.next]] && Set#Subset($Heap[$Heap[n, Node.next], Node.footprint], $Heap[n, Node.footprint]) && !$Heap[$Heap[n, Node.next], Node.footprint][n] && Seq#Equal($Heap[n, Node.list], Seq#Append(Seq#Build(Seq#Empty(), 0, $Heap[n, Node.data], 1), $Heap[$Heap[n, Node.next], Node.list])))) && ($Heap[this, Node.next] != null ==> Node.Valid($Heap, $Heap[this, Node.next]))));
-
-
-
-
-procedure Node.ReverseInPlace(this: ref where this != null && $Heap[this, alloc]) returns (reverse: ref where reverse == null || $Heap[reverse, alloc]);
- // user-defined preconditions
- free requires Node.Valid($Heap, this);
- requires $Heap[this, Node.footprint][this];
- requires !$Heap[this, Node.footprint][null];
- requires $Heap[this, Node.next] != null ==> Node.Valid($Heap, $Heap[this, Node.next]);
- modifies $Heap;
- // frame condition
- // boilerplate
- free ensures $HeapSucc(old($Heap), $Heap);
-
-
-
-procedure CheckWellformed$$Node.Valid(this: ref where this != null && $Heap[this, alloc]);
-
-
-
-
-
-implementation Node.ReverseInPlace(this: ref) returns (reverse: ref)
-{
- var current: ref where current == null || $Heap[current, alloc], $PreLoopHeap0: HeapType, nx: ref where nx == null || $Heap[nx, alloc];
-
- // ----- var-declaration statement ----- test.dfy(28,9)
- current := $Heap[this, Node.next];
-
-
- // ----- assignment statement ----- test.dfy(29,13)
- reverse := this;
- // ----- assignment statement ----- test.dfy(30,18)
- $Heap[reverse, Node.next] := null;
- assume $IsGoodHeap($Heap);
-
-
-
- // ----- assignment statement ----- test.dfy(31,23)
- $Heap[reverse, Node.footprint] := // Set#UnionOne(Set#Empty(), reverse);
- Set#Singleton(reverse);
-
- assert current == null;
-}
-
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+// Dafny program verifier version 0.92, Copyright (c) 2003-2008, Microsoft.
+// Command Line Options: /trace /typeEncoding:arguments /print:test.bpl test.dfy
+
+type ref;
+
+const null: ref;
+
+type Set T = [T]bool;
+function Set#Empty<T>() returns (Set T);
+function Set#Singleton<T>(T) returns (Set T);
+function Set#UnionOne<T>(Set T, T) returns (Set T);
+function Set#Union<T>(Set T, Set T) returns (Set T);
+function Set#Intersection<T>(Set T, Set T) returns (Set T);
+function Set#Difference<T>(Set T, Set T) returns (Set T);
+function Set#Subset<T>(Set T, Set T) returns (bool);
+function Set#Equal<T>(Set T, Set T) returns (bool);
+function Set#Disjoint<T>(Set T, Set T) returns (bool);
+
+type Seq _;
+function Seq#Length<T>(Seq T) returns (int);
+function Seq#Empty<T>() returns (Seq T);
+function Seq#Singleton<T>(T) returns (Seq T);
+function Seq#Build<T>(s: Seq T, index: int, val: T, newLength: int) returns (Seq T);
+function Seq#Append<T>(Seq T, Seq T) returns (Seq T);
+function Seq#Index<T>(Seq T, int) returns (T);
+function Seq#Contains<T>(Seq T, T) returns (bool);
+function Seq#Equal<T>(Seq T, Seq T) returns (bool);
+function Seq#SameUntil<T>(Seq T, Seq T, int) returns (bool);
+function Seq#Take<T>(s:Seq T, howMany: int) returns (Seq T);
+function Seq#Drop<T>(s:Seq T, howMany: int) returns (Seq T);
+
+type Field _;
+type HeapType = <alpha>[ref,Field alpha]alpha;
+function $IsGoodHeap(HeapType) returns (bool);
+var $Heap: HeapType where $IsGoodHeap($Heap);
+const alloc: Field bool;
+function $HeapSucc(HeapType, HeapType) returns (bool);
+
+const unique Node.list: Field (Seq ref);
+const unique Node.footprint: Field [ref]bool;
+const unique Node.data: Field ref;
+const unique Node.next: Field ref;
+function Node.Valid($heap: HeapType, this: ref) returns (bool);
+
+
+
+
+axiom (forall<T> r: T, o: T :: { Set#Singleton(r)[o] } Set#Singleton(r)[o] <==> r == o);
+
+axiom (forall $Heap: HeapType, this: ref :: { Node.Valid($Heap, this) } this != null && $IsGoodHeap($Heap) ==> Node.Valid($Heap, this) == ($Heap[this, Node.footprint][this] && !$Heap[this, Node.footprint][null] && (forall n: ref :: $Heap[this, Node.footprint][n] ==> $Heap[n, Node.footprint][n] && !$Heap[n, Node.footprint][null] && Set#Subset($Heap[n, Node.footprint], $Heap[this, Node.footprint]) && ($Heap[n, Node.next] == null ==> Seq#Equal($Heap[n, Node.list], Seq#Build(Seq#Empty(), 0, $Heap[n, Node.data], 1))) && ($Heap[n, Node.next] != null ==> $Heap[n, Node.footprint][$Heap[n, Node.next]] && Set#Subset($Heap[$Heap[n, Node.next], Node.footprint], $Heap[n, Node.footprint]) && !$Heap[$Heap[n, Node.next], Node.footprint][n] && Seq#Equal($Heap[n, Node.list], Seq#Append(Seq#Build(Seq#Empty(), 0, $Heap[n, Node.data], 1), $Heap[$Heap[n, Node.next], Node.list])))) && ($Heap[this, Node.next] != null ==> Node.Valid($Heap, $Heap[this, Node.next]))));
+
+
+
+
+procedure Node.ReverseInPlace(this: ref where this != null && $Heap[this, alloc]) returns (reverse: ref where reverse == null || $Heap[reverse, alloc]);
+ // user-defined preconditions
+ free requires Node.Valid($Heap, this);
+ requires $Heap[this, Node.footprint][this];
+ requires !$Heap[this, Node.footprint][null];
+ requires $Heap[this, Node.next] != null ==> Node.Valid($Heap, $Heap[this, Node.next]);
+ modifies $Heap;
+ // frame condition
+ // boilerplate
+ free ensures $HeapSucc(old($Heap), $Heap);
+
+
+
+procedure CheckWellformed$$Node.Valid(this: ref where this != null && $Heap[this, alloc]);
+
+
+
+
+
+implementation Node.ReverseInPlace(this: ref) returns (reverse: ref)
+{
+ var current: ref where current == null || $Heap[current, alloc], $PreLoopHeap0: HeapType, nx: ref where nx == null || $Heap[nx, alloc];
+
+ // ----- var-declaration statement ----- test.dfy(28,9)
+ current := $Heap[this, Node.next];
+
+
+ // ----- assignment statement ----- test.dfy(29,13)
+ reverse := this;
+ // ----- assignment statement ----- test.dfy(30,18)
+ $Heap[reverse, Node.next] := null;
+ assume $IsGoodHeap($Heap);
+
+
+
+ // ----- assignment statement ----- test.dfy(31,23)
+ $Heap[reverse, Node.footprint] := // Set#UnionOne(Set#Empty(), reverse);
+ Set#Singleton(reverse);
+
+ assert current == null;
+}
+
+
diff --git a/Test/test21/MapOutputTypeParams.bpl b/Test/test21/MapOutputTypeParams.bpl
index c9304d34..484c7dc1 100644
--- a/Test/test21/MapOutputTypeParams.bpl
+++ b/Test/test21/MapOutputTypeParams.bpl
@@ -1,39 +1,39 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-
-var p : <a>[int]a;
-
-procedure P() returns () modifies p; {
- p[13] := 5;
- p[17] := true;
- p[13] := false;
- p[17] := 8;
-
- assert p[13] == 5 && !p[13] && p[17] == 8 && p[17];
- assert p == p[28 := p]; // error
-}
-
-var q : <a, b>[int][a]b;
-
-procedure Q() returns () modifies q; {
- q[17] := q[17][true := 13];
- q[17] := q[17][true := false];
- q[16] := q[17][true := 14];
-
- assert q[17][true] == 13 && !q[17][true];
- assert q[17][true] == 14; // error
-}
-
-procedure R() returns () modifies p; {
- p[7] := 28;
- p[5] := p[7];
-
- assert p[7] == 28;
- assert p[6] == 28; // error
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+
+var p : <a>[int]a;
+
+procedure P() returns () modifies p; {
+ p[13] := 5;
+ p[17] := true;
+ p[13] := false;
+ p[17] := 8;
+
+ assert p[13] == 5 && !p[13] && p[17] == 8 && p[17];
+ assert p == p[28 := p]; // error
+}
+
+var q : <a, b>[int][a]b;
+
+procedure Q() returns () modifies q; {
+ q[17] := q[17][true := 13];
+ q[17] := q[17][true := false];
+ q[16] := q[17][true := 14];
+
+ assert q[17][true] == 13 && !q[17][true];
+ assert q[17][true] == 14; // error
+}
+
+procedure R() returns () modifies p; {
+ p[7] := 28;
+ p[5] := p[7];
+
+ assert p[7] == 28;
+ assert p[6] == 28; // error
} \ No newline at end of file
diff --git a/Test/test21/Maps0.bpl b/Test/test21/Maps0.bpl
index 125730ef..f64bd336 100644
--- a/Test/test21/Maps0.bpl
+++ b/Test/test21/Maps0.bpl
@@ -1,62 +1,62 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-const a : [int] bool;
-const b : [int, bool] int;
-
-function f<a>(a) returns (int);
-
-axiom (forall x : [int] bool :: f(x) == 7);
-axiom (forall y : [int, bool] int :: f(y) == 7);
-
-procedure P() returns () {
- var x : [int] bool;
-
- assert f(a) > 0;
- assert f(b) > 0;
-
- x := a;
- x[17] := false;
- x[16] := true;
-
- assert x[15] == a[15] && !x[17];
- assert f(x) == 7;
- assert f(x) == 8; // should not be provable
-}
-
-
-type Field a;
-
-const heap : <a>[ref, Field a] a;
-
-procedure Q() returns () {
- assert f(heap) > 0; // should not be provable
-}
-
-
-procedure R() returns () {
- var o : ref;
- var e : Field int, g : Field bool, h : Field (Field int), i : Field int;
- var heap2 : <a>[ref, Field a] a;
-
- heap2 := heap;
- heap2[o, e] := 17;
- assert heap2 == heap[o, e := 17];
-
- heap2[o, g] := true;
- assert heap2[o, e] == 17 && heap2[o, g];
-
- heap2[o, h] := e;
- assert heap2[o, heap2[o, h]] == 17;
-
- heap2[o, i] := 16;
- assert heap2[o, g];
- assert heap2[o, heap2[o, h]] == 17; // should no longer be provable
-}
-
-type ref;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+const a : [int] bool;
+const b : [int, bool] int;
+
+function f<a>(a) returns (int);
+
+axiom (forall x : [int] bool :: f(x) == 7);
+axiom (forall y : [int, bool] int :: f(y) == 7);
+
+procedure P() returns () {
+ var x : [int] bool;
+
+ assert f(a) > 0;
+ assert f(b) > 0;
+
+ x := a;
+ x[17] := false;
+ x[16] := true;
+
+ assert x[15] == a[15] && !x[17];
+ assert f(x) == 7;
+ assert f(x) == 8; // should not be provable
+}
+
+
+type Field a;
+
+const heap : <a>[ref, Field a] a;
+
+procedure Q() returns () {
+ assert f(heap) > 0; // should not be provable
+}
+
+
+procedure R() returns () {
+ var o : ref;
+ var e : Field int, g : Field bool, h : Field (Field int), i : Field int;
+ var heap2 : <a>[ref, Field a] a;
+
+ heap2 := heap;
+ heap2[o, e] := 17;
+ assert heap2 == heap[o, e := 17];
+
+ heap2[o, g] := true;
+ assert heap2[o, e] == 17 && heap2[o, g];
+
+ heap2[o, h] := e;
+ assert heap2[o, heap2[o, h]] == 17;
+
+ heap2[o, i] := 16;
+ assert heap2[o, g];
+ assert heap2[o, heap2[o, h]] == 17; // should no longer be provable
+}
+
+type ref;
diff --git a/Test/test21/Maps1.bpl b/Test/test21/Maps1.bpl
index 024cd50f..bcb5a9b9 100644
--- a/Test/test21/Maps1.bpl
+++ b/Test/test21/Maps1.bpl
@@ -1,42 +1,42 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-// different map type classes with the same arity
-
-const c : [int] bool;
-const d : [ref] bool;
-const e : <a> [a] bool;
-const f : <a> [a] a;
-
-axiom (c[17] ==> c[19]);
-axiom (forall<t> x:t :: e[x]);
-axiom (!d[null]);
-axiom (forall<t> x:t :: f[x] == x);
-
-procedure P() returns () {
-
- var x : <a> [a] bool;
-
- assume !c[19];
- assert !c[17];
-
- x := e;
- x[true] := false;
- x[17] := true;
-
- assert !x[true];
- assert !(forall<t> y:t :: x[y]);
- assert x != e;
-
- assert f[x] == x;
- assert f[17] > 17; // should not be provable
-
-}
-
-type ref;
-const null : ref;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+// different map type classes with the same arity
+
+const c : [int] bool;
+const d : [ref] bool;
+const e : <a> [a] bool;
+const f : <a> [a] a;
+
+axiom (c[17] ==> c[19]);
+axiom (forall<t> x:t :: e[x]);
+axiom (!d[null]);
+axiom (forall<t> x:t :: f[x] == x);
+
+procedure P() returns () {
+
+ var x : <a> [a] bool;
+
+ assume !c[19];
+ assert !c[17];
+
+ x := e;
+ x[true] := false;
+ x[17] := true;
+
+ assert !x[true];
+ assert !(forall<t> y:t :: x[y]);
+ assert x != e;
+
+ assert f[x] == x;
+ assert f[17] > 17; // should not be provable
+
+}
+
+type ref;
+const null : ref;
diff --git a/Test/test21/Maps2.bpl b/Test/test21/Maps2.bpl
index 0b7980c7..9713875f 100644
--- a/Test/test21/Maps2.bpl
+++ b/Test/test21/Maps2.bpl
@@ -1,31 +1,31 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-// XFAIL: *
-
-type T;
-
-function f(x : [T][int]int) returns (int);
-
-axiom (forall x:[T][int]int :: {f(x)}
- (exists t:T :: x[t][13] == 42) ==> f(x) == 5);
-
-procedure P() returns () {
- var x : [T][int]int, t : T;
-
- x[t] := x[t][13 := 42];
-
- assert f(x) == 5;
-}
-
-
-type name;
-
-function Field(int) returns (name);
-function Unified([name][int]int) returns ([int]int);
-
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])}
- Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+// XFAIL: *
+
+type T;
+
+function f(x : [T][int]int) returns (int);
+
+axiom (forall x:[T][int]int :: {f(x)}
+ (exists t:T :: x[t][13] == 42) ==> f(x) == 5);
+
+procedure P() returns () {
+ var x : [T][int]int, t : T;
+
+ x[t] := x[t][13 := 42];
+
+ assert f(x) == 5;
+}
+
+
+type name;
+
+function Field(int) returns (name);
+function Unified([name][int]int) returns ([int]int);
+
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])}
+ Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
diff --git a/Test/test21/NameClash.bpl b/Test/test21/NameClash.bpl
index d31a6e01..59f361a8 100644
--- a/Test/test21/NameClash.bpl
+++ b/Test/test21/NameClash.bpl
@@ -1,14 +1,14 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-function f(int) returns (int);
-axiom f(13) == 0;
-
-procedure P() returns () {
- assert (exists f:int :: 0 == f(f));
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+function f(int) returns (int);
+axiom f(13) == 0;
+
+procedure P() returns () {
+ assert (exists f:int :: 0 == f(f));
} \ No newline at end of file
diff --git a/Test/test21/Orderings.bpl b/Test/test21/Orderings.bpl
index 39361461..158f0e89 100644
--- a/Test/test21/Orderings.bpl
+++ b/Test/test21/Orderings.bpl
@@ -1,26 +1,26 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-const a, b:int;
-const c:int extends a, b;
-
-procedure P() returns () {
- var x:int;
-
- assert c <: a;
-
- assume c <: x && x <: a;
- assert x == c || a == x;
-
- assert x == b; // should not be provable
-}
-
-procedure Q() returns () {
- assume b <: a;
- assert b == a;
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+const a, b:int;
+const c:int extends a, b;
+
+procedure P() returns () {
+ var x:int;
+
+ assert c <: a;
+
+ assume c <: x && x <: a;
+ assert x == c || a == x;
+
+ assert x == b; // should not be provable
+}
+
+procedure Q() returns () {
+ assume b <: a;
+ assert b == a;
} \ No newline at end of file
diff --git a/Test/test21/Orderings2.bpl b/Test/test21/Orderings2.bpl
index 01d3be15..c475ca79 100644
--- a/Test/test21/Orderings2.bpl
+++ b/Test/test21/Orderings2.bpl
@@ -1,24 +1,24 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-const b:int;
-const a:int extends b complete;
-
-const c:int extends a;
-const d:int extends a;
-
-procedure P() returns () {
- var x:int;
-
- assert c <: b && d <: a;
-
- assume x <: a && !(x <: c) && x != a;
- assert x <: d;
-
- assert b <: x; // should not be provable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+const b:int;
+const a:int extends b complete;
+
+const c:int extends a;
+const d:int extends a;
+
+procedure P() returns () {
+ var x:int;
+
+ assert c <: b && d <: a;
+
+ assume x <: a && !(x <: c) && x != a;
+ assert x <: d;
+
+ assert b <: x; // should not be provable
} \ No newline at end of file
diff --git a/Test/test21/Orderings3.bpl b/Test/test21/Orderings3.bpl
index 3036d8e6..82b619ac 100644
--- a/Test/test21/Orderings3.bpl
+++ b/Test/test21/Orderings3.bpl
@@ -1,44 +1,44 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-// Example from the Boogie 2 language report
-
-
-type Wicket;
-
-
-const unique a: Wicket extends complete;
-const unique b: Wicket;
-const unique c: Wicket extends a, b complete;
-const unique d: Wicket extends c;
-const unique e: Wicket;
-
-procedure P() returns () {
-
- assert !(exists x:Wicket :: a <: x && a != x);
- assert (forall x:Wicket :: x <: a ==> x == a || x <: c);
-
- assert c <: b && !(exists x:Wicket :: c <: x && x <: b && x != c && x != b);
-
- assert !(b <: a) && !(b <: c);
-
- assert c <: a && c <: b && d <: c;
- assert (forall x:Wicket :: c <: x ==> c==x || a <: x || b <: x);
- assert (forall x:Wicket :: x <: c ==> c==x || x <: d);
-
- assert d <: c;
- assert !(a <: d) && !(b <: d) && !(c <: d);
-
- assert false; // unprovable
-}
-
-procedure Q() returns () {
-
- assert (forall x:Wicket :: x <: b && x != b ==> x <: c); // unprovable
-
- assert !(exists x:Wicket :: b <: x && b != x); // unprovable
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+// Example from the Boogie 2 language report
+
+
+type Wicket;
+
+
+const unique a: Wicket extends complete;
+const unique b: Wicket;
+const unique c: Wicket extends a, b complete;
+const unique d: Wicket extends c;
+const unique e: Wicket;
+
+procedure P() returns () {
+
+ assert !(exists x:Wicket :: a <: x && a != x);
+ assert (forall x:Wicket :: x <: a ==> x == a || x <: c);
+
+ assert c <: b && !(exists x:Wicket :: c <: x && x <: b && x != c && x != b);
+
+ assert !(b <: a) && !(b <: c);
+
+ assert c <: a && c <: b && d <: c;
+ assert (forall x:Wicket :: c <: x ==> c==x || a <: x || b <: x);
+ assert (forall x:Wicket :: x <: c ==> c==x || x <: d);
+
+ assert d <: c;
+ assert !(a <: d) && !(b <: d) && !(c <: d);
+
+ assert false; // unprovable
+}
+
+procedure Q() returns () {
+
+ assert (forall x:Wicket :: x <: b && x != b ==> x <: c); // unprovable
+
+ assert !(exists x:Wicket :: b <: x && b != x); // unprovable
+
} \ No newline at end of file
diff --git a/Test/test21/Orderings4.bpl b/Test/test21/Orderings4.bpl
index 00da92dc..9b4bbf0a 100644
--- a/Test/test21/Orderings4.bpl
+++ b/Test/test21/Orderings4.bpl
@@ -1,17 +1,17 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-type Wicket;
-
-const unique r: Wicket;
-const unique s, t: Wicket extends unique r;
-
-procedure P() returns () {
- assert (forall x:Wicket, y:Wicket :: x <: s && y <: t ==> x != y);
- assert false; // unprovable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+type Wicket;
+
+const unique r: Wicket;
+const unique s, t: Wicket extends unique r;
+
+procedure P() returns () {
+ assert (forall x:Wicket, y:Wicket :: x <: s && y <: t ==> x != y);
+ assert false; // unprovable
} \ No newline at end of file
diff --git a/Test/test21/ParallelAssignment.bpl b/Test/test21/ParallelAssignment.bpl
index 6f7c7639..8ff3b1de 100644
--- a/Test/test21/ParallelAssignment.bpl
+++ b/Test/test21/ParallelAssignment.bpl
@@ -1,62 +1,62 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-// Examples from the Boogie2 language report
-
-type C, D;
-
-var x : int;
-var y : int;
-var z : int;
-var a : [int]int;
-var b : [int][C, D]int;
-
-procedure P(i:int, j:int, m:C, n:D) returns () modifies x, y, a, b; {
- var x1 : int;
- var y1 : int;
-
- x := x+1;
- a[i] := 12;
-
- assert a[i] == 12;
-
- x1 := x;
- y1 := y;
-
- x, y := y, x;
-
- assert x == y1 && y == x1;
- assert x == x1; // error
-
- x, a[i] := x+1, x;
- assert x == y1+1 && a[i] == y1;
-
- b[i][m, n] := 17;
- b[i][m, n], x := a[x], y;
-
- assert b[i][m, n] == a[y1+1];
- assert false; // error
-}
-
-procedure Q() returns () modifies x, y, z; {
-
- x, y, z := 1, 2, 3;
-
- x, y, z := y, z, x;
- x, y, z := y, z, x;
- x, y, z := y, z, x;
-
- assert x == 1 && y == 2 && z == 3;
-
- x, y, z := y+1, z+1, x+1;
- x, y, z := y+1, z+1, x+1;
- x, y, z := y+1, z+1, x+1;
-
- assert x == 4 && y == 5 && z == 6;
-
- assert a[x] == a[y]; // error
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+// Examples from the Boogie2 language report
+
+type C, D;
+
+var x : int;
+var y : int;
+var z : int;
+var a : [int]int;
+var b : [int][C, D]int;
+
+procedure P(i:int, j:int, m:C, n:D) returns () modifies x, y, a, b; {
+ var x1 : int;
+ var y1 : int;
+
+ x := x+1;
+ a[i] := 12;
+
+ assert a[i] == 12;
+
+ x1 := x;
+ y1 := y;
+
+ x, y := y, x;
+
+ assert x == y1 && y == x1;
+ assert x == x1; // error
+
+ x, a[i] := x+1, x;
+ assert x == y1+1 && a[i] == y1;
+
+ b[i][m, n] := 17;
+ b[i][m, n], x := a[x], y;
+
+ assert b[i][m, n] == a[y1+1];
+ assert false; // error
+}
+
+procedure Q() returns () modifies x, y, z; {
+
+ x, y, z := 1, 2, 3;
+
+ x, y, z := y, z, x;
+ x, y, z := y, z, x;
+ x, y, z := y, z, x;
+
+ assert x == 1 && y == 2 && z == 3;
+
+ x, y, z := y+1, z+1, x+1;
+ x, y, z := y+1, z+1, x+1;
+ x, y, z := y+1, z+1, x+1;
+
+ assert x == 4 && y == 5 && z == 6;
+
+ assert a[x] == a[y]; // error
+
} \ No newline at end of file
diff --git a/Test/test21/PolyList.bpl b/Test/test21/PolyList.bpl
index 08fcd637..f7ff40d6 100644
--- a/Test/test21/PolyList.bpl
+++ b/Test/test21/PolyList.bpl
@@ -1,68 +1,68 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-
-type List a;
-
-function Cons<a>(x:a, y:List a) returns (List a);
-
-// we need some argument ... ugly
-function Nil<a>(a) returns (List a);
-
-function Car<a>(List a) returns (a);
-function Cdr<a>(List a) returns (List a);
-
-axiom (forall<a> x:a, y:List a :: Car(Cons(x, y)) == x);
-axiom (forall<a> x:a, y:List a :: Cdr(Cons(x, y)) == y);
-
-function Len<a>(List a) returns (int);
-
-axiom (forall <a> x:a :: Len(Nil(x)) == 0);
-axiom (forall <a> x:a, y:List a :: Len(Cons(x, y)) == 1 + Len(y));
-
-
-
-procedure P<a>(param : a) returns () {
- var x:a, NIL : List a, l : List a;
-
- NIL := Nil(x);
-
- assert Len(NIL) == 0;
- assert Len(Cons(x,Cons(x,NIL))) == 2;
-
- l := Cons(x,Cons(x,NIL));
- assert Len(l) == 2;
-
- l := Cons(x, l);
- assert Len(l) == 3 && Car(l) == x && Len(Cdr(l)) < Len(l);
- assert (forall m : List a, y : a :: Len(Cons(y, m)) > Len(m));
-
- l := Cdr(l);
- assert Len(l) == 2 && Car(l) == x;
-
- assert Len(Cons(x,Cons(x,Cons(x,NIL)))) == 2; // should not be provable
-
-}
-
-procedure Q() returns () {
- var NIL : List int, l : List int;
-
- NIL := Nil(0);
-
- assert Len(NIL) == 0;
- assert Len(Cons(1,Cons(2,NIL))) == 2;
-
- l := NIL;
- l := Cons(42, l);
- l := Cons(Car(l) + 17, Cdr(l));
-
- assert Len(l) == 1 && Car(l) == 59;
-
- assert Len(Cons(1,Cons(2,Cons(3,NIL)))) == 2; // should not be provable
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+
+type List a;
+
+function Cons<a>(x:a, y:List a) returns (List a);
+
+// we need some argument ... ugly
+function Nil<a>(a) returns (List a);
+
+function Car<a>(List a) returns (a);
+function Cdr<a>(List a) returns (List a);
+
+axiom (forall<a> x:a, y:List a :: Car(Cons(x, y)) == x);
+axiom (forall<a> x:a, y:List a :: Cdr(Cons(x, y)) == y);
+
+function Len<a>(List a) returns (int);
+
+axiom (forall <a> x:a :: Len(Nil(x)) == 0);
+axiom (forall <a> x:a, y:List a :: Len(Cons(x, y)) == 1 + Len(y));
+
+
+
+procedure P<a>(param : a) returns () {
+ var x:a, NIL : List a, l : List a;
+
+ NIL := Nil(x);
+
+ assert Len(NIL) == 0;
+ assert Len(Cons(x,Cons(x,NIL))) == 2;
+
+ l := Cons(x,Cons(x,NIL));
+ assert Len(l) == 2;
+
+ l := Cons(x, l);
+ assert Len(l) == 3 && Car(l) == x && Len(Cdr(l)) < Len(l);
+ assert (forall m : List a, y : a :: Len(Cons(y, m)) > Len(m));
+
+ l := Cdr(l);
+ assert Len(l) == 2 && Car(l) == x;
+
+ assert Len(Cons(x,Cons(x,Cons(x,NIL)))) == 2; // should not be provable
+
+}
+
+procedure Q() returns () {
+ var NIL : List int, l : List int;
+
+ NIL := Nil(0);
+
+ assert Len(NIL) == 0;
+ assert Len(Cons(1,Cons(2,NIL))) == 2;
+
+ l := NIL;
+ l := Cons(42, l);
+ l := Cons(Car(l) + 17, Cdr(l));
+
+ assert Len(l) == 1 && Car(l) == 59;
+
+ assert Len(Cons(1,Cons(2,Cons(3,NIL)))) == 2; // should not be provable
+
} \ No newline at end of file
diff --git a/Test/test21/Real.bpl b/Test/test21/Real.bpl
index eb140f77..584fb77b 100644
--- a/Test/test21/Real.bpl
+++ b/Test/test21/Real.bpl
@@ -1,66 +1,66 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-axiom (forall r: real :: r == 0.0 || r / r == 1.0);
-
-procedure P(a: real, b: real) returns () {
- assume a >= b && a != 0.0 && a >= 1.3579;
-
- assert 2e0 * (a + 3.0) - 0.5 >= b;
- assert 2e0 * (a + 3.0) - 0.5 > b;
- assert b <= 2e0 * (a + 3.0) - 0.5;
- assert b < 2e0 * (a + 3.0) - 0.5;
-
- assert 1/2 <= 0.65;
- assert a > 100e-2 ==> 1 / a <= a;
- assert a / 2 != a || a == 0.00;
- assert a != 0.0 ==> a / a == 1.0;
-
- assert int(a) >= 0 ==> real(3) * a > a;
-}
-
-procedure ManyDigitReals()
-{
- var x: real;
- var y: real;
- x := 15e-1;
- y := real(3);
- if (*) {
- assert x == y / 2000000000000000000000000001e-27; // error
- } else {
- assert x == y / 2000000000000000000000000000e-27;
- }
-}
-
-procedure Rounding()
-{
- assert real(3) == 3.0;
- assert int(2.2) == int(2.8);
- assert int(2.2) == 2;
- assert int(-2.2) == int(-2.8);
- if (*) {
- assert int(-2.2) == -3;
- } else {
- assert int(-2.2) == -2; // error: int truncates downward
- }
-}
-
-procedure VariousCornerCaseBigDecPrintingTests()
-{
- assert 200e-2 == 2.0;
- assert 000e-2 == 0.0;
- assert 000e-1 == 0.0;
- assert 000e-4 == 0.0;
- assert 000e0 == 0.0;
- assert 0e-300 == 0.0;
- assert 12300e-4 == 1.230;
- assert 12300e-5 == 0.123;
- assert 12300e-8 == 000.000123;
- assert 1.9850404e5 == 198504.04;
- assert 19850404e-4 == 1985.0404;
- assert 19850404e-12 == 0.00001985040400000;
- assert 19850404e0000000000000000 == 1985.0404e4;
-}
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+axiom (forall r: real :: r == 0.0 || r / r == 1.0);
+
+procedure P(a: real, b: real) returns () {
+ assume a >= b && a != 0.0 && a >= 1.3579;
+
+ assert 2e0 * (a + 3.0) - 0.5 >= b;
+ assert 2e0 * (a + 3.0) - 0.5 > b;
+ assert b <= 2e0 * (a + 3.0) - 0.5;
+ assert b < 2e0 * (a + 3.0) - 0.5;
+
+ assert 1/2 <= 0.65;
+ assert a > 100e-2 ==> 1 / a <= a;
+ assert a / 2 != a || a == 0.00;
+ assert a != 0.0 ==> a / a == 1.0;
+
+ assert int(a) >= 0 ==> real(3) * a > a;
+}
+
+procedure ManyDigitReals()
+{
+ var x: real;
+ var y: real;
+ x := 15e-1;
+ y := real(3);
+ if (*) {
+ assert x == y / 2000000000000000000000000001e-27; // error
+ } else {
+ assert x == y / 2000000000000000000000000000e-27;
+ }
+}
+
+procedure Rounding()
+{
+ assert real(3) == 3.0;
+ assert int(2.2) == int(2.8);
+ assert int(2.2) == 2;
+ assert int(-2.2) == int(-2.8);
+ if (*) {
+ assert int(-2.2) == -3;
+ } else {
+ assert int(-2.2) == -2; // error: int truncates downward
+ }
+}
+
+procedure VariousCornerCaseBigDecPrintingTests()
+{
+ assert 200e-2 == 2.0;
+ assert 000e-2 == 0.0;
+ assert 000e-1 == 0.0;
+ assert 000e-4 == 0.0;
+ assert 000e0 == 0.0;
+ assert 0e-300 == 0.0;
+ assert 12300e-4 == 1.230;
+ assert 12300e-5 == 0.123;
+ assert 12300e-8 == 000.000123;
+ assert 1.9850404e5 == 198504.04;
+ assert 19850404e-4 == 1985.0404;
+ assert 19850404e-12 == 0.00001985040400000;
+ assert 19850404e0000000000000000 == 1985.0404e4;
+}
diff --git a/Test/test21/Triggers0.bpl b/Test/test21/Triggers0.bpl
index c3ff14d5..c4b610f2 100644
--- a/Test/test21/Triggers0.bpl
+++ b/Test/test21/Triggers0.bpl
@@ -1,50 +1,50 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-const ar : [int]bool;
-axiom (forall x:int :: {ar[x]} !ar[x]);
-
-type S, T, C a b;
-
-function m(T,S) returns (bool);
-function n(T,T) returns (bool);
-function f<a>(C a T, a) returns (int);
-function f2<a>(C a T, a) returns (int);
-function g(T) returns (T);
-function h<a>(a) returns (a);
-function k<a>(C a a) returns (bool);
-function l<a>(a) returns (bool);
-function o<a>(a) returns (bool);
-
-const con : T;
-const someConst : int;
-
-axiom (forall <b> x:C b b :: k(x));
-axiom (forall x:C S T, y : S :: f(x,y) == f2(x,y));
-axiom (forall x:S, y:T :: l(x) && n(y, con) == m(y,x));
-axiom (forall x:T :: {g(h(x))} {g(x)} x == x);
-axiom (forall <b> x:b :: {h(x)} x == x);
-axiom (forall <b> x:b, y:b :: {o(x), o(y)} o(x) ==> someConst == 42);
-axiom (forall <b> x:C b b :: {k(x)} k(x));
-
-procedure P() returns () {
- var v0 : C S S, v1 : C S T, v2 : S, v3 : T;
-
- assert ar[27] == false;
- assert k(v0);
- assert f(v1, v2) == f2(v1, v2);
- assert n(v3, con) == m(v3, v2);
-}
-
-procedure Q<a>(x : a) returns () {
- assert someConst == 42; // should not be provable
-
- assume o(x) == o(x);
- assert someConst == 42;
- assert someConst == 43; // should not be provable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+const ar : [int]bool;
+axiom (forall x:int :: {ar[x]} !ar[x]);
+
+type S, T, C a b;
+
+function m(T,S) returns (bool);
+function n(T,T) returns (bool);
+function f<a>(C a T, a) returns (int);
+function f2<a>(C a T, a) returns (int);
+function g(T) returns (T);
+function h<a>(a) returns (a);
+function k<a>(C a a) returns (bool);
+function l<a>(a) returns (bool);
+function o<a>(a) returns (bool);
+
+const con : T;
+const someConst : int;
+
+axiom (forall <b> x:C b b :: k(x));
+axiom (forall x:C S T, y : S :: f(x,y) == f2(x,y));
+axiom (forall x:S, y:T :: l(x) && n(y, con) == m(y,x));
+axiom (forall x:T :: {g(h(x))} {g(x)} x == x);
+axiom (forall <b> x:b :: {h(x)} x == x);
+axiom (forall <b> x:b, y:b :: {o(x), o(y)} o(x) ==> someConst == 42);
+axiom (forall <b> x:C b b :: {k(x)} k(x));
+
+procedure P() returns () {
+ var v0 : C S S, v1 : C S T, v2 : S, v3 : T;
+
+ assert ar[27] == false;
+ assert k(v0);
+ assert f(v1, v2) == f2(v1, v2);
+ assert n(v3, con) == m(v3, v2);
+}
+
+procedure Q<a>(x : a) returns () {
+ assert someConst == 42; // should not be provable
+
+ assume o(x) == o(x);
+ assert someConst == 42;
+ assert someConst == 43; // should not be provable
} \ No newline at end of file
diff --git a/Test/test21/Triggers1.bpl b/Test/test21/Triggers1.bpl
index a4199040..3d8c95af 100644
--- a/Test/test21/Triggers1.bpl
+++ b/Test/test21/Triggers1.bpl
@@ -1,23 +1,23 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-
-
-
-function f<a>(a) returns (bool);
-function g(int) returns (bool);
-
-axiom (forall x:int :: f(x));
-axiom (forall x:int :: g(x));
-
-procedure P() returns () {
- var x : int, m : [int]int;
- assert f(x);
- assert f(m[x]);
- assert g(x);
- assert g(m[x]);
- assert f(true); // should not be provable
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+
+
+
+function f<a>(a) returns (bool);
+function g(int) returns (bool);
+
+axiom (forall x:int :: f(x));
+axiom (forall x:int :: g(x));
+
+procedure P() returns () {
+ var x : int, m : [int]int;
+ assert f(x);
+ assert f(m[x]);
+ assert g(x);
+ assert g(m[x]);
+ assert f(true); // should not be provable
} \ No newline at end of file
diff --git a/Test/test21/test3_AddMethod_conv.bpl b/Test/test21/test3_AddMethod_conv.bpl
index 89c34c45..beb848f0 100644
--- a/Test/test21/test3_AddMethod_conv.bpl
+++ b/Test/test21/test3_AddMethod_conv.bpl
@@ -1,1827 +1,1827 @@
-// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
-// RUN: %diff "%s.n.expect" "%t"
-// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
-// RUN: %diff "%s.p.expect" "%t"
-// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
-// RUN: %diff "%s.a.expect" "%t"
-// XFAIL: *
-// Spec# program verifier version 0.90, Copyright (c) 2003-2008, Microsoft.
-// Command Line Options: /print:debug.txt AddMethod.dll
-
-type real;
-
-type elements;
-
-type struct;
-
-type name;
-type any;
-
-type exposeVersionType;
-
-type Field a;
-type Heap = <x>[ref,Field x]x;
-
-var $Heap: Heap where IsHeap($Heap);
-
-type ActivityType;
-
-var $ActivityIndicator: ActivityType;
-
-function IsHeap(h: Heap) returns (bool);
-
-const unique $allocated: Field bool;
-
-const unique $elements: Field elements;
-
-function DeclType222<a>(Field a) returns (name);
-
-axiom DeclType222($elements) == System.Object;
-
-const unique $inv: Field name;
-
-const unique $localinv: Field name;
-
-const unique $exposeVersion: Field exposeVersionType;
-
-axiom DeclType222($exposeVersion) == System.Object;
-
-const unique $sharingMode: Field any;
-
-const unique $SharingMode_Unshared: any;
-
-const unique $SharingMode_LockProtected: any;
-
-const unique $ownerRef: Field ref;
-
-const unique $ownerFrame: Field name;
-
-const unique $PeerGroupPlaceholder: name;
-
-function ClassRepr(class: name) returns (ref);
-
-function ClassReprInv(ref) returns (name);
-
-axiom (forall c: name :: { ClassRepr(c) } ClassReprInv(ClassRepr(c)) == c);
-
-axiom (forall T: name :: !($typeof(ClassRepr(T)) <: System.Object));
-
-axiom (forall T: name :: ClassRepr(T) != null);
-
-axiom (forall T: name, h: Heap :: { h[ClassRepr(T), $ownerFrame] } IsHeap(h) ==> h[ClassRepr(T), $ownerFrame] == $PeerGroupPlaceholder);
-
-function IncludeInMainFrameCondition<a>(f: Field a) returns (bool);
-
-axiom IncludeInMainFrameCondition($allocated);
-
-axiom IncludeInMainFrameCondition($elements);
-
-axiom !IncludeInMainFrameCondition($inv);
-
-axiom !IncludeInMainFrameCondition($localinv);
-
-axiom IncludeInMainFrameCondition($ownerRef);
-
-axiom IncludeInMainFrameCondition($ownerFrame);
-
-axiom IncludeInMainFrameCondition($exposeVersion);
-
-axiom !IncludeInMainFrameCondition($FirstConsistentOwner);
-
-function IsStaticField<a>(f: Field a) returns (bool);
-
-axiom !IsStaticField($allocated);
-
-axiom !IsStaticField($elements);
-
-axiom !IsStaticField($inv);
-
-axiom !IsStaticField($localinv);
-
-axiom !IsStaticField($exposeVersion);
-
-function $IncludedInModifiesStar<a>(f: Field a) returns (bool);
-
-axiom !$IncludedInModifiesStar($ownerRef);
-
-axiom !$IncludedInModifiesStar($ownerFrame);
-
-axiom $IncludedInModifiesStar($exposeVersion);
-
-axiom $IncludedInModifiesStar($elements);
-
-function ValueArrayGet(elements, int) returns (any);
-
-function ValueArraySet(elements, int, any) returns (elements);
-
-function IntArrayGet(elements, int) returns (int);
-
-function IntArraySet(elements, int, int) returns (elements);
-
-function RefArrayGet(elements, int) returns (ref);
-
-function RefArraySet(elements, int, ref) returns (elements);
-
-axiom (forall A: elements, i: int, x: any :: ValueArrayGet(ValueArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: any :: i != j ==> ValueArrayGet(ValueArraySet(A, i, x), j) == ValueArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: int :: IntArrayGet(IntArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: int :: i != j ==> IntArrayGet(IntArraySet(A, i, x), j) == IntArrayGet(A, j));
-
-axiom (forall A: elements, i: int, x: ref :: RefArrayGet(RefArraySet(A, i, x), i) == x);
-
-axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> RefArrayGet(RefArraySet(A, i, x), j) == RefArrayGet(A, j));
-
-function ArrayIndex(arr: ref, dim: int, indexAtDim: int, remainingIndexContribution: int) returns (int);
-
-function ArrayIndexInvX(arrayIndex: int) returns (indexAtDim: int);
-
-function ArrayIndexInvY(arrayIndex: int) returns (remainingIndexContribution: int);
-
-axiom (forall a: ref, d: int, x: int, y: int :: { ArrayIndex(a, d, x, y) } ArrayIndexInvX(ArrayIndex(a, d, x, y)) == x);
-
-axiom (forall a: ref, d: int, x: int, y: int :: { ArrayIndex(a, d, x, y) } ArrayIndexInvY(ArrayIndex(a, d, x, y)) == y);
-
-axiom (forall a: ref, i: int, heap: Heap :: { IntArrayGet(heap[a, $elements], i) } IsHeap(heap) ==> InRange(IntArrayGet(heap[a, $elements], i), $ElementType($typeof(a))));
-
-axiom (forall a: ref, i: int, heap: Heap :: { $typeof(RefArrayGet(heap[a, $elements], i)) } IsHeap(heap) && RefArrayGet(heap[a, $elements], i) != null ==> $typeof(RefArrayGet(heap[a, $elements], i)) <: $ElementType($typeof(a)));
-
-axiom (forall a: ref, T: name, i: int, r: int, heap: Heap :: { $typeof(a) <: NonNullRefArray(T, r), RefArrayGet(heap[a, $elements], i) } IsHeap(heap) && $typeof(a) <: NonNullRefArray(T, r) ==> RefArrayGet(heap[a, $elements], i) != null);
-
-function $Rank(ref) returns (int);
-
-axiom (forall a: ref :: 1 <= $Rank(a));
-
-axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: RefArray(T, r) } a != null && $typeof(a) <: RefArray(T, r) ==> $Rank(a) == r);
-
-axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: NonNullRefArray(T, r) } a != null && $typeof(a) <: NonNullRefArray(T, r) ==> $Rank(a) == r);
-
-axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: ValueArray(T, r) } a != null && $typeof(a) <: ValueArray(T, r) ==> $Rank(a) == r);
-
-axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: IntArray(T, r) } a != null && $typeof(a) <: IntArray(T, r) ==> $Rank(a) == r);
-
-function $Length(ref) returns (int);
-
-axiom (forall a: ref :: { $Length(a) } 0 <= $Length(a) && $Length(a) <= int#2147483647);
-
-function $DimLength(ref, int) returns (int);
-
-axiom (forall a: ref, i: int :: 0 <= $DimLength(a, i));
-
-axiom (forall a: ref :: { $DimLength(a, 0) } $Rank(a) == 1 ==> $DimLength(a, 0) == $Length(a));
-
-function $LBound(ref, int) returns (int);
-
-function $UBound(ref, int) returns (int);
-
-axiom (forall a: ref, i: int :: { $LBound(a, i) } $LBound(a, i) == 0);
-
-axiom (forall a: ref, i: int :: { $UBound(a, i) } $UBound(a, i) == $DimLength(a, i) - 1);
-
-const unique $ArrayCategoryValue: name;
-
-const unique $ArrayCategoryInt: name;
-
-const unique $ArrayCategoryRef: name;
-
-const unique $ArrayCategoryNonNullRef: name;
-
-function $ArrayCategory(arrayType: name) returns (arrayCategory: name);
-
-axiom (forall T: name, ET: name, r: int :: { T <: ValueArray(ET, r) } T <: ValueArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryValue);
-
-axiom (forall T: name, ET: name, r: int :: { T <: IntArray(ET, r) } T <: IntArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryInt);
-
-axiom (forall T: name, ET: name, r: int :: { T <: RefArray(ET, r) } T <: RefArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryRef);
-
-axiom (forall T: name, ET: name, r: int :: { T <: NonNullRefArray(ET, r) } T <: NonNullRefArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryNonNullRef);
-
-const unique System.Array: name;
-
-axiom System.Array <: System.Object;
-
-function $ElementType(name) returns (name);
-
-function ValueArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { ValueArray(T, r) } ValueArray(T, r) <: ValueArray(T, r) && ValueArray(T, r) <: System.Array);
-
-function IntArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { IntArray(T, r) } IntArray(T, r) <: IntArray(T, r) && IntArray(T, r) <: System.Array);
-
-function RefArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { RefArray(T, r) } RefArray(T, r) <: RefArray(T, r) && RefArray(T, r) <: System.Array);
-
-function NonNullRefArray(elementType: name, rank: int) returns (name);
-
-axiom (forall T: name, r: int :: { NonNullRefArray(T, r) } NonNullRefArray(T, r) <: NonNullRefArray(T, r) && NonNullRefArray(T, r) <: System.Array);
-
-function NonNullRefArrayRaw(array: ref, elementType: name, rank: int) returns (bool);
-
-axiom (forall array: ref, elementType: name, rank: int :: { NonNullRefArrayRaw(array, elementType, rank) } NonNullRefArrayRaw(array, elementType, rank) ==> $typeof(array) <: System.Array && $Rank(array) == rank && elementType <: $ElementType($typeof(array)));
-
-axiom (forall T: name, U: name, r: int :: U <: T ==> RefArray(U, r) <: RefArray(T, r));
-
-axiom (forall T: name, U: name, r: int :: U <: T ==> NonNullRefArray(U, r) <: NonNullRefArray(T, r));
-
-axiom (forall A: name, r: int :: $ElementType(ValueArray(A, r)) == A);
-
-axiom (forall A: name, r: int :: $ElementType(IntArray(A, r)) == A);
-
-axiom (forall A: name, r: int :: $ElementType(RefArray(A, r)) == A);
-
-axiom (forall A: name, r: int :: $ElementType(NonNullRefArray(A, r)) == A);
-
-axiom (forall A: name, r: int, T: name :: { T <: RefArray(A, r) } T <: RefArray(A, r) ==> T != A && T == RefArray($ElementType(T), r) && $ElementType(T) <: A);
-
-axiom (forall A: name, r: int, T: name :: { T <: NonNullRefArray(A, r) } T <: NonNullRefArray(A, r) ==> T != A && T == NonNullRefArray($ElementType(T), r) && $ElementType(T) <: A);
-
-axiom (forall A: name, r: int, T: name :: { T <: ValueArray(A, r) } T <: ValueArray(A, r) ==> T == ValueArray(A, r));
-
-axiom (forall A: name, r: int, T: name :: { T <: IntArray(A, r) } T <: IntArray(A, r) ==> T == IntArray(A, r));
-
-axiom (forall A: name, r: int, T: name :: { RefArray(A, r) <: T } RefArray(A, r) <: T ==> System.Array <: T || (T == RefArray($ElementType(T), r) && A <: $ElementType(T)));
-
-axiom (forall A: name, r: int, T: name :: { NonNullRefArray(A, r) <: T } NonNullRefArray(A, r) <: T ==> System.Array <: T || (T == NonNullRefArray($ElementType(T), r) && A <: $ElementType(T)));
-
-axiom (forall A: name, r: int, T: name :: { ValueArray(A, r) <: T } ValueArray(A, r) <: T ==> System.Array <: T || T == ValueArray(A, r));
-
-axiom (forall A: name, r: int, T: name :: { IntArray(A, r) <: T } IntArray(A, r) <: T ==> System.Array <: T || T == IntArray(A, r));
-
-function $ArrayPtr(elementType: name) returns (name);
-
-function $ElementProxy(ref, int) returns (ref);
-
-function $ElementProxyStruct(struct, int) returns (ref);
-
-axiom (forall a: ref, i: int, heap: Heap :: { heap[RefArrayGet(heap[a, $elements], i), $ownerRef] } { heap[RefArrayGet(heap[a, $elements], i), $ownerFrame] } IsHeap(heap) && $typeof(a) <: System.Array ==> RefArrayGet(heap[a, $elements], i) == null || $IsImmutable($typeof(RefArrayGet(heap[a, $elements], i))) || (heap[RefArrayGet(heap[a, $elements], i), $ownerRef] == heap[$ElementProxy(a, 0 - 1), $ownerRef] && heap[RefArrayGet(heap[a, $elements], i), $ownerFrame] == heap[$ElementProxy(a, 0 - 1), $ownerFrame]));
-
-axiom (forall a: ref, heap: Heap :: { IsAllocated(heap, a) } IsHeap(heap) && IsAllocated(heap, a) && $typeof(a) <: System.Array ==> IsAllocated(heap, $ElementProxy(a, 0 - 1)));
-
-axiom (forall o: ref, pos: int :: { $typeof($ElementProxy(o, pos)) } $typeof($ElementProxy(o, pos)) == System.Object);
-
-axiom (forall o: struct, pos: int :: { $typeof($ElementProxyStruct(o, pos)) } $typeof($ElementProxyStruct(o, pos)) == System.Object);
-
-function $StructGet(struct, name) returns (any);
-
-function $StructSet(struct, name, any) returns (struct);
-
-axiom (forall s: struct, f: name, x: any :: $StructGet($StructSet(s, f, x), f) == x);
-
-axiom (forall s: struct, f: name, f': name, x: any :: f != f' ==> $StructGet($StructSet(s, f, x), f') == $StructGet(s, f'));
-
-function ZeroInit(s: struct, typ: name) returns (bool);
-
-function $typeof(ref) returns (name);
-
-function $BaseClass(sub: name) returns (base: name);
-
-axiom (forall T: name :: { $BaseClass(T) } T <: $BaseClass(T) && (T != System.Object ==> T != $BaseClass(T)));
-
-function AsDirectSubClass(sub: name, base: name) returns (sub': name);
-
-function OneClassDown(sub: name, base: name) returns (directSub: name);
-
-axiom (forall A: name, B: name, C: name :: { C <: AsDirectSubClass(B, A) } C <: AsDirectSubClass(B, A) ==> OneClassDown(C, A) == B);
-
-function $IsValueType(name) returns (bool);
-
-axiom (forall T: name :: $IsValueType(T) ==> (forall U: name :: T <: U ==> T == U) && (forall U: name :: U <: T ==> T == U));
-
-const unique System.Boolean: name;
-
-axiom $IsValueType(System.Boolean);
-
-const unique System.Object: name;
-
-function $IsTokenForType(struct, name) returns (bool);
-
-function TypeObject(name) returns (ref);
-
-const unique System.Type: name;
-
-axiom System.Type <: System.Object;
-
-axiom (forall T: name :: { TypeObject(T) } $IsNotNull(TypeObject(T), System.Type));
-
-function TypeName(ref) returns (name);
-
-axiom (forall T: name :: { TypeObject(T) } TypeName(TypeObject(T)) == T);
-
-function $Is(ref, name) returns (bool);
-
-axiom (forall o: ref, T: name :: { $Is(o, T) } $Is(o, T) <==> o == null || $typeof(o) <: T);
-
-function $IsNotNull(ref, name) returns (bool);
-
-axiom (forall o: ref, T: name :: { $IsNotNull(o, T) } $IsNotNull(o, T) <==> o != null && $Is(o, T));
-
-function $As(ref, name) returns (ref);
-
-axiom (forall o: ref, T: name :: $Is(o, T) ==> $As(o, T) == o);
-
-axiom (forall o: ref, T: name :: !$Is(o, T) ==> $As(o, T) == null);
-
-axiom (forall h: Heap, o: ref :: { $typeof(o) <: System.Array, h[o, $inv] } IsHeap(h) && o != null && $typeof(o) <: System.Array ==> h[o, $inv] == $typeof(o) && h[o, $localinv] == $typeof(o));
-
-function IsAllocated<a>(h: Heap, o: a) returns (bool);
-
-axiom (forall<a> h: Heap, o: ref, f: Field a :: { IsAllocated(h, h[o, f]) } IsHeap(h) && h[o, $allocated] ==> IsAllocated(h, h[o, f]));
-
-axiom (forall h: Heap, o: ref, f: Field ref :: { h[h[o, f], $allocated] } IsHeap(h) && h[o, $allocated] ==> h[h[o, f], $allocated]);
-
-axiom (forall h: Heap, s: struct, f: name :: { IsAllocated(h, $StructGet(s, f)) } IsAllocated(h, s) ==> IsAllocated(h, $StructGet(s, f)));
-
-axiom (forall h: Heap, e: elements, i: int :: { IsAllocated(h, RefArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, RefArrayGet(e, i)));
-
-axiom (forall h: Heap, e: elements, i: int :: { IsAllocated(h, ValueArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, ValueArrayGet(e, i)));
-
-axiom (forall h: Heap, o: ref :: { h[o, $allocated] } IsAllocated(h, o) ==> h[o, $allocated]);
-
-axiom (forall h: Heap, c: name :: { h[ClassRepr(c), $allocated] } IsHeap(h) ==> h[ClassRepr(c), $allocated]);
-
-const $BeingConstructed: ref;
-
-const unique $NonNullFieldsAreInitialized: Field bool;
-
-const $PurityAxiomsCanBeAssumed: bool;
-
-axiom DeclType222($NonNullFieldsAreInitialized) == System.Object;
-
-
-
-function AsNonNullRefField(field: Field ref, T: name) returns (f: Field ref);
-
-function AsRefField(field: Field ref, T: name) returns (f: Field ref);
-
-function AsRangeField(field: Field int, T: name) returns (f: Field int);
-
-axiom (forall f: Field ref, T: name :: { AsNonNullRefField(f, T) } AsNonNullRefField(f, T) == f ==> AsRefField(f, T) == f);
-
-axiom (forall h: Heap, o: ref, f: Field ref, T: name :: { h[o, AsRefField(f, T)] } IsHeap(h) ==> $Is(h[o, AsRefField(f, T)], T));
-
-axiom (forall h: Heap, o: ref, f: Field ref, T: name :: { h[o, AsNonNullRefField(f, T)] } IsHeap(h) && o != null && (o != $BeingConstructed || h[$BeingConstructed, $NonNullFieldsAreInitialized] == true) ==> h[o, AsNonNullRefField(f, T)] != null);
-
-axiom (forall h: Heap, o: ref, f: Field int, T: name :: { h[o, AsRangeField(f, T)] } IsHeap(h) ==> InRange(h[o, AsRangeField(f, T)], T));
-
-function $IsMemberlessType(name) returns (bool);
-
-axiom (forall o: ref :: { $IsMemberlessType($typeof(o)) } !$IsMemberlessType($typeof(o)));
-
-function $AsInterface(name) returns (name);
-
-axiom (forall $J: name, s: any, b: ref :: { UnboxedType(Box(s, b)) <: $AsInterface($J) } $AsInterface($J) == $J && Box(s, b) == b && UnboxedType(Box(s, b)) <: $AsInterface($J) ==> $typeof(b) <: $J);
-
-function $HeapSucc(oldHeap: Heap, newHeap: Heap) returns (bool);
-
-function $IsImmutable(T: name) returns (bool);
-
-axiom !$IsImmutable(System.Object);
-
-function $AsImmutable(T: name) returns (theType: name);
-
-function $AsMutable(T: name) returns (theType: name);
-
-axiom (forall T: name, U: name :: { U <: $AsImmutable(T) } U <: $AsImmutable(T) ==> $IsImmutable(U) && $AsImmutable(U) == U);
-
-axiom (forall T: name, U: name :: { U <: $AsMutable(T) } U <: $AsMutable(T) ==> !$IsImmutable(U) && $AsMutable(U) == U);
-
-function AsOwner(string: ref, owner: ref) returns (theString: ref);
-
-axiom (forall o: ref, T: name :: { $typeof(o) <: $AsImmutable(T) } o != null && o != $BeingConstructed && $typeof(o) <: $AsImmutable(T) ==> (forall h: Heap :: { IsHeap(h) } IsHeap(h) ==> h[o, $inv] == $typeof(o) && h[o, $localinv] == $typeof(o) && h[o, $ownerFrame] == $PeerGroupPlaceholder && AsOwner(o, h[o, $ownerRef]) == o && (forall t: ref :: { AsOwner(o, h[t, $ownerRef]) } AsOwner(o, h[t, $ownerRef]) == o ==> t == o || h[t, $ownerFrame] != $PeerGroupPlaceholder)));
-
-const unique System.String: name;
-
-function $StringLength(ref) returns (int);
-
-axiom (forall s: ref :: { $StringLength(s) } 0 <= $StringLength(s));
-
-function AsRepField(f: Field ref, declaringType: name) returns (theField: Field ref);
-
-axiom (forall h: Heap, o: ref, f: Field ref, T: name :: { h[o, AsRepField(f, T)] } IsHeap(h) && h[o, AsRepField(f, T)] != null ==> h[h[o, AsRepField(f, T)], $ownerRef] == o && h[h[o, AsRepField(f, T)], $ownerFrame] == T);
-
-function AsPeerField(f: Field ref) returns (theField: Field ref);
-
-axiom (forall h: Heap, o: ref, f: Field ref :: { h[o, AsPeerField(f)] } IsHeap(h) && h[o, AsPeerField(f)] != null ==> h[h[o, AsPeerField(f)], $ownerRef] == h[o, $ownerRef] && h[h[o, AsPeerField(f)], $ownerFrame] == h[o, $ownerFrame]);
-
-function AsElementsRepField(f: Field ref, declaringType: name, position: int) returns (theField: Field ref);
-
-axiom (forall h: Heap, o: ref, f: Field ref, T: name, i: int :: { h[o, AsElementsRepField(f, T, i)] } IsHeap(h) && h[o, AsElementsRepField(f, T, i)] != null ==> h[$ElementProxy(h[o, AsElementsRepField(f, T, i)], i), $ownerRef] == o && h[$ElementProxy(h[o, AsElementsRepField(f, T, i)], i), $ownerFrame] == T);
-
-function AsElementsPeerField(f: Field ref, position: int) returns (theField: Field ref);
-
-axiom (forall h: Heap, o: ref, f: Field ref, i: int :: { h[o, AsElementsPeerField(f, i)] } IsHeap(h) && h[o, AsElementsPeerField(f, i)] != null ==> h[$ElementProxy(h[o, AsElementsPeerField(f, i)], i), $ownerRef] == h[o, $ownerRef] && h[$ElementProxy(h[o, AsElementsPeerField(f, i)], i), $ownerFrame] == h[o, $ownerFrame]);
-
-axiom (forall h: Heap, o: ref :: { h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] } IsHeap(h) && h[o, $ownerFrame] != $PeerGroupPlaceholder && h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] && h[h[o, $ownerRef], $localinv] != $BaseClass(h[o, $ownerFrame]) ==> h[o, $inv] == $typeof(o) && h[o, $localinv] == $typeof(o));
-
-procedure $SetOwner(o: ref, ow: ref, fr: name);
- modifies $Heap;
- ensures (forall<a> p: ref, F: Field a :: { $Heap[p, F] } (F != $ownerRef && F != $ownerFrame) || old($Heap[p, $ownerRef] != $Heap[o, $ownerRef]) || old($Heap[p, $ownerFrame] != $Heap[o, $ownerFrame]) ==> old($Heap[p, F]) == $Heap[p, F]);
- ensures (forall p: ref :: { $Heap[p, $ownerRef] } { $Heap[p, $ownerFrame] } old($Heap[p, $ownerRef] == $Heap[o, $ownerRef]) && old($Heap[p, $ownerFrame] == $Heap[o, $ownerFrame]) ==> $Heap[p, $ownerRef] == ow && $Heap[p, $ownerFrame] == fr);
- free ensures $HeapSucc(old($Heap), $Heap);
-
-
-
-procedure $UpdateOwnersForRep(o: ref, T: name, e: ref);
- modifies $Heap;
- ensures (forall<a> p: ref, F: Field a :: { $Heap[p, F] } (F != $ownerRef && F != $ownerFrame) || old($Heap[p, $ownerRef] != $Heap[e, $ownerRef]) || old($Heap[p, $ownerFrame] != $Heap[e, $ownerFrame]) ==> old($Heap[p, F]) == $Heap[p, F]);
- ensures e == null ==> $Heap == old($Heap);
- ensures e != null ==> (forall p: ref :: { $Heap[p, $ownerRef] } { $Heap[p, $ownerFrame] } old($Heap[p, $ownerRef] == $Heap[e, $ownerRef]) && old($Heap[p, $ownerFrame] == $Heap[e, $ownerFrame]) ==> $Heap[p, $ownerRef] == o && $Heap[p, $ownerFrame] == T);
- free ensures $HeapSucc(old($Heap), $Heap);
-
-
-
-procedure $UpdateOwnersForPeer(c: ref, d: ref);
- modifies $Heap;
- ensures (forall<a> p: ref, F: Field a :: { $Heap[p, F] } (F != $ownerRef && F != $ownerFrame) || old($Heap[p, $ownerRef] != $Heap[d, $ownerRef] || $Heap[p, $ownerFrame] != $Heap[d, $ownerFrame]) ==> old($Heap[p, F]) == $Heap[p, F]);
- ensures d == null ==> $Heap == old($Heap);
- ensures d != null ==> (forall p: ref :: { $Heap[p, $ownerRef] } { $Heap[p, $ownerFrame] } old($Heap[p, $ownerRef] == $Heap[d, $ownerRef] && $Heap[p, $ownerFrame] == $Heap[d, $ownerFrame]) ==> $Heap[p, $ownerRef] == old($Heap)[c, $ownerRef] && $Heap[p, $ownerFrame] == old($Heap)[c, $ownerFrame]);
- free ensures $HeapSucc(old($Heap), $Heap);
-
-
-
-const unique $FirstConsistentOwner: Field ref;
-
-function $AsPureObject(ref) returns (ref);
-
-function ##FieldDependsOnFCO<a>(o: ref, f: Field a, ev: exposeVersionType) returns (value: any);
-
-axiom (forall<a> o: ref, f: Field a, h: Heap :: { h[$AsPureObject(o), f] } IsHeap(h) && o != null && h[o, $allocated] == true && $AsPureObject(o) == o && h[o, $ownerFrame] != $PeerGroupPlaceholder && h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] && h[h[o, $ownerRef], $localinv] != $BaseClass(h[o, $ownerFrame]) ==> h[o, f] == ##FieldDependsOnFCO(o, f, h[h[o, $FirstConsistentOwner], $exposeVersion]));
-
-axiom (forall o: ref, h: Heap :: { h[o, $FirstConsistentOwner] } IsHeap(h) && o != null && h[o, $allocated] == true && h[o, $ownerFrame] != $PeerGroupPlaceholder && h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] && h[h[o, $ownerRef], $localinv] != $BaseClass(h[o, $ownerFrame]) ==> h[o, $FirstConsistentOwner] != null && h[h[o, $FirstConsistentOwner], $allocated] == true && (h[h[o, $FirstConsistentOwner], $ownerFrame] == $PeerGroupPlaceholder || !(h[h[h[o, $FirstConsistentOwner], $ownerRef], $inv] <: h[h[o, $FirstConsistentOwner], $ownerFrame]) || h[h[h[o, $FirstConsistentOwner], $ownerRef], $localinv] == $BaseClass(h[h[o, $FirstConsistentOwner], $ownerFrame])));
-
-function Box<a>(a, ref) returns (ref);
-
-function Unbox(ref) returns (any);
-
-type NondetType;
-
-function MeldNondets(NondetType, any) returns (NondetType);
-
-function BoxFunc<a>(value: a, typ: name) returns (boxedValue: ref);
-
-function AllocFunc(typ: name) returns (newValue: ref);
-
-function NewInstance(object: ref, occurrence: NondetType, activity: ActivityType) returns (newInstance: ref);
-
-axiom (forall value: any, typ: name, occurrence: NondetType, activity: ActivityType :: { NewInstance(BoxFunc(value, typ), occurrence, activity) } Box(value, NewInstance(BoxFunc(value, typ), occurrence, activity)) == NewInstance(BoxFunc(value, typ), occurrence, activity) && UnboxedType(NewInstance(BoxFunc(value, typ), occurrence, activity)) == typ);
-
-axiom (forall x: ref, typ: name, occurrence: NondetType, activity: ActivityType :: !$IsValueType(UnboxedType(x)) ==> NewInstance(BoxFunc(x, typ), occurrence, activity) == x);
-
-axiom (forall x: any, p: ref :: { Unbox(Box(x, p)) } Unbox(Box(x, p)) == x);
-
-function UnboxedType(ref) returns (name);
-
-axiom (forall p: ref :: { $IsValueType(UnboxedType(p)) } $IsValueType(UnboxedType(p)) ==> (forall heap: Heap, x: any :: { heap[Box(x, p), $inv] } IsHeap(heap) ==> heap[Box(x, p), $inv] == $typeof(Box(x, p)) && heap[Box(x, p), $localinv] == $typeof(Box(x, p))));
-
-axiom (forall<a> x: a, p: ref :: { UnboxedType(Box(x, p)) <: System.Object } UnboxedType(Box(x, p)) <: System.Object && Box(x, p) == p ==> x == p);
-
-function BoxTester(p: ref, typ: name) returns (ref);
-
-axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } UnboxedType(p) == typ <==> BoxTester(p, typ) != null);
-
-axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } BoxTester(p, typ) != null ==> Box(Unbox(p), p) == p);
-
-axiom (forall typ: name, occurrence: NondetType, activity: ActivityType :: { NewInstance(AllocFunc(typ), occurrence, activity) } $typeof(NewInstance(AllocFunc(typ), occurrence, activity)) == typ && NewInstance(AllocFunc(typ), occurrence, activity) != null);
-
-axiom (forall typ: name, occurrence: NondetType, activity: ActivityType, heap: Heap :: { heap[NewInstance(AllocFunc(typ), occurrence, activity), $allocated] } IsHeap(heap) ==> heap[NewInstance(AllocFunc(typ), occurrence, activity), $allocated]);
-
-const unique System.SByte: name;
-
-axiom $IsValueType(System.SByte);
-
-const unique System.Byte: name;
-
-axiom $IsValueType(System.Byte);
-
-const unique System.Int16: name;
-
-axiom $IsValueType(System.Int16);
-
-const unique System.UInt16: name;
-
-axiom $IsValueType(System.UInt16);
-
-const unique System.Int32: name;
-
-axiom $IsValueType(System.Int32);
-
-const unique System.UInt32: name;
-
-axiom $IsValueType(System.UInt32);
-
-const unique System.Int64: name;
-
-axiom $IsValueType(System.Int64);
-
-const unique System.UInt64: name;
-
-axiom $IsValueType(System.UInt64);
-
-const unique System.Char: name;
-
-axiom $IsValueType(System.Char);
-
-const unique System.UIntPtr: name;
-
-axiom $IsValueType(System.UIntPtr);
-
-const unique System.IntPtr: name;
-
-axiom $IsValueType(System.IntPtr);
-
-const int#m2147483648: int;
-
-const int#2147483647: int;
-
-const int#4294967295: int;
-
-const int#m9223372036854775808: int;
-
-const int#9223372036854775807: int;
-
-const int#18446744073709551615: int;
-
-axiom int#m9223372036854775808 < int#m2147483648;
-
-axiom int#m2147483648 < 0 - 100000;
-
-axiom 100000 < int#2147483647;
-
-axiom int#2147483647 < int#4294967295;
-
-axiom int#4294967295 < int#9223372036854775807;
-
-axiom int#9223372036854775807 < int#18446744073709551615;
-
-axiom int#m9223372036854775808 + 1 == 0 - int#9223372036854775807;
-
-axiom int#m2147483648 + 1 == 0 - int#2147483647;
-
-function InRange(i: int, T: name) returns (bool);
-
-axiom (forall i: int :: InRange(i, System.SByte) <==> 0 - 128 <= i && i < 128);
-
-axiom (forall i: int :: InRange(i, System.Byte) <==> 0 <= i && i < 256);
-
-axiom (forall i: int :: InRange(i, System.Int16) <==> 0 - 32768 <= i && i < 32768);
-
-axiom (forall i: int :: InRange(i, System.UInt16) <==> 0 <= i && i < 65536);
-
-axiom (forall i: int :: InRange(i, System.Int32) <==> int#m2147483648 <= i && i <= int#2147483647);
-
-axiom (forall i: int :: InRange(i, System.UInt32) <==> 0 <= i && i <= int#4294967295);
-
-axiom (forall i: int :: InRange(i, System.Int64) <==> int#m9223372036854775808 <= i && i <= int#9223372036854775807);
-
-axiom (forall i: int :: InRange(i, System.UInt64) <==> 0 <= i && i <= int#18446744073709551615);
-
-axiom (forall i: int :: InRange(i, System.Char) <==> 0 <= i && i < 65536);
-
-function $IntToInt(val: int, fromType: name, toType: name) returns (int);
-
-function $IntToReal(int, fromType: name, toType: name) returns (real);
-
-function $RealToInt(real, fromType: name, toType: name) returns (int);
-
-function $RealToReal(val: real, fromType: name, toType: name) returns (real);
-
-axiom (forall z: int, B: name, C: name :: InRange(z, C) ==> $IntToInt(z, B, C) == z);
-
-function $SizeIs(name, int) returns (bool);
-
-function $IfThenElse(bool, any, any) returns (any);
-
-axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } b ==> $IfThenElse(b, x, y) == x);
-
-axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } !b ==> $IfThenElse(b, x, y) == y);
-
-function #neg(int) returns (int);
-
-function #and(int, int) returns (int);
-
-function #or(int, int) returns (int);
-
-function #xor(int, int) returns (int);
-
-function #shl(int, int) returns (int);
-
-function #shr(int, int) returns (int);
-
-function #rneg(real) returns (real);
-
-function #radd(real, real) returns (real);
-
-function #rsub(real, real) returns (real);
-
-function #rmul(real, real) returns (real);
-
-function #rdiv(real, real) returns (real);
-
-function #rmod(real, real) returns (real);
-
-function #rLess(real, real) returns (bool);
-
-function #rAtmost(real, real) returns (bool);
-
-function #rEq(real, real) returns (bool);
-
-function #rNeq(real, real) returns (bool);
-
-function #rAtleast(real, real) returns (bool);
-
-function #rGreater(real, real) returns (bool);
-
-axiom (forall x: int, y: int :: { x % y } { x / y } x % y == x - x / y * y);
-
-axiom (forall x: int, y: int :: { x % y } 0 <= x && 0 < y ==> 0 <= x % y && x % y < y);
-
-axiom (forall x: int, y: int :: { x % y } 0 <= x && y < 0 ==> 0 <= x % y && x % y < 0 - y);
-
-axiom (forall x: int, y: int :: { x % y } x <= 0 && 0 < y ==> 0 - y < x % y && x % y <= 0);
-
-axiom (forall x: int, y: int :: { x % y } x <= 0 && y < 0 ==> y < x % y && x % y <= 0);
-
-axiom (forall x: int, y: int :: { (x + y) % y } 0 <= x && 0 <= y ==> (x + y) % y == x % y);
-
-axiom (forall x: int, y: int :: { (y + x) % y } 0 <= x && 0 <= y ==> (y + x) % y == x % y);
-
-axiom (forall x: int, y: int :: { (x - y) % y } 0 <= x - y && 0 <= y ==> (x - y) % y == x % y);
-
-axiom (forall a: int, b: int, d: int :: { a % d, b % d } 2 <= d && a % d == b % d && a < b ==> a + d <= b);
-
-axiom (forall x: int, y: int :: { #and(x, y) } 0 <= x || 0 <= y ==> 0 <= #and(x, y));
-
-axiom (forall x: int, y: int :: { #or(x, y) } 0 <= x && 0 <= y ==> 0 <= #or(x, y) && #or(x, y) <= x + y);
-
-axiom (forall i: int :: { #shl(i, 0) } #shl(i, 0) == i);
-
-axiom (forall i: int, j: int :: { #shl(i, j) } 1 <= j ==> #shl(i, j) == #shl(i, j - 1) * 2);
-
-axiom (forall i: int, j: int :: { #shl(i, j) } 0 <= i && i < 32768 && 0 <= j && j <= 16 ==> 0 <= #shl(i, j) && #shl(i, j) <= int#2147483647);
-
-axiom (forall i: int :: { #shr(i, 0) } #shr(i, 0) == i);
-
-axiom (forall i: int, j: int :: { #shr(i, j) } 1 <= j ==> #shr(i, j) == #shr(i, j - 1) / 2);
-
-function #min(int, int) returns (int);
-
-function #max(int, int) returns (int);
-
-axiom (forall x: int, y: int :: { #min(x, y) } (#min(x, y) == x || #min(x, y) == y) && #min(x, y) <= x && #min(x, y) <= y);
-
-axiom (forall x: int, y: int :: { #max(x, y) } (#max(x, y) == x || #max(x, y) == y) && x <= #max(x, y) && y <= #max(x, y));
-
-function #System.String.IsInterned$System.String$notnull(Heap, ref) returns (ref);
-
-function #System.String.Equals$System.String(Heap, ref, ref) returns (bool);
-
-function #System.String.Equals$System.String$System.String(Heap, ref, ref) returns (bool);
-
-function ##StringEquals(ref, ref) returns (bool);
-
-axiom (forall h: Heap, a: ref, b: ref :: { #System.String.Equals$System.String(h, a, b) } #System.String.Equals$System.String(h, a, b) == #System.String.Equals$System.String$System.String(h, a, b));
-
-axiom (forall h: Heap, a: ref, b: ref :: { #System.String.Equals$System.String$System.String(h, a, b) } #System.String.Equals$System.String$System.String(h, a, b) == ##StringEquals(a, b) && #System.String.Equals$System.String$System.String(h, a, b) == ##StringEquals(b, a) && (a == b ==> ##StringEquals(a, b)));
-
-axiom (forall a: ref, b: ref, c: ref :: ##StringEquals(a, b) && ##StringEquals(b, c) ==> ##StringEquals(a, c));
-
-axiom (forall h: Heap, a: ref, b: ref :: { #System.String.Equals$System.String$System.String(h, a, b) } a != null && b != null && #System.String.Equals$System.String$System.String(h, a, b) ==> #System.String.IsInterned$System.String$notnull(h, a) == #System.String.IsInterned$System.String$notnull(h, b));
-
-const $UnknownRef: ref;
-
-const unique Bag.a: Field ref;
-
-const unique Bag.n: Field int;
-
-const unique Microsoft.Contracts.GuardException: name;
-
-const unique System.ICloneable: name;
-
-const unique Microsoft.Contracts.ObjectInvariantException: name;
-
-const unique System.Exception: name;
-
-const unique System.Collections.IEnumerable: name;
-
-const unique System.Collections.IList: name;
-
-const unique Microsoft.Contracts.ICheckedException: name;
-
-const unique System.Reflection.MemberInfo: name;
-
-const unique Bag: name;
-
-const unique System.Reflection.IReflect: name;
-
-const unique System.Runtime.InteropServices._MemberInfo: name;
-
-const unique System.Runtime.InteropServices._Type: name;
-
-const unique System.Collections.ICollection: name;
-
-const unique System.Runtime.InteropServices._Exception: name;
-
-const unique System.Runtime.Serialization.ISerializable: name;
-
-const unique System.Reflection.ICustomAttributeProvider: name;
-
-axiom !IsStaticField(Bag.n);
-
-axiom IncludeInMainFrameCondition(Bag.n);
-
-axiom $IncludedInModifiesStar(Bag.n);
-
-axiom DeclType222(Bag.n) == Bag;
-
-axiom AsRangeField(Bag.n, System.Int32) == Bag.n;
-
-axiom !IsStaticField(Bag.a);
-
-axiom IncludeInMainFrameCondition(Bag.a);
-
-axiom $IncludedInModifiesStar(Bag.a);
-
-axiom AsRepField(Bag.a, Bag) == Bag.a;
-
-axiom DeclType222(Bag.a) == Bag;
-
-axiom AsNonNullRefField(Bag.a, IntArray(System.Int32, 1)) == Bag.a;
-
-axiom Bag <: Bag;
-
-axiom $BaseClass(Bag) == System.Object && AsDirectSubClass(Bag, $BaseClass(Bag)) == Bag;
-
-axiom !$IsImmutable(Bag) && $AsMutable(Bag) == Bag;
-
-axiom System.Array <: System.Array;
-
-axiom $BaseClass(System.Array) == System.Object && AsDirectSubClass(System.Array, $BaseClass(System.Array)) == System.Array;
-
-axiom !$IsImmutable(System.Array) && $AsMutable(System.Array) == System.Array;
-
-axiom System.ICloneable <: System.ICloneable;
-
-axiom System.ICloneable <: System.Object;
-
-axiom $IsMemberlessType(System.ICloneable);
-
-axiom $AsInterface(System.ICloneable) == System.ICloneable;
-
-axiom System.Array <: System.ICloneable;
-
-axiom System.Collections.IList <: System.Collections.IList;
-
-axiom System.Collections.IList <: System.Object;
-
-axiom System.Collections.ICollection <: System.Collections.ICollection;
-
-axiom System.Collections.ICollection <: System.Object;
-
-axiom System.Collections.IEnumerable <: System.Collections.IEnumerable;
-
-axiom System.Collections.IEnumerable <: System.Object;
-
-axiom $IsMemberlessType(System.Collections.IEnumerable);
-
-axiom $AsInterface(System.Collections.IEnumerable) == System.Collections.IEnumerable;
-
-axiom System.Collections.ICollection <: System.Collections.IEnumerable;
-
-axiom $IsMemberlessType(System.Collections.ICollection);
-
-axiom $AsInterface(System.Collections.ICollection) == System.Collections.ICollection;
-
-axiom System.Collections.IList <: System.Collections.ICollection;
-
-axiom System.Collections.IList <: System.Collections.IEnumerable;
-
-axiom $IsMemberlessType(System.Collections.IList);
-
-axiom $AsInterface(System.Collections.IList) == System.Collections.IList;
-
-axiom System.Array <: System.Collections.IList;
-
-axiom System.Array <: System.Collections.ICollection;
-
-axiom System.Array <: System.Collections.IEnumerable;
-
-axiom $IsMemberlessType(System.Array);
-
-// System.Array object invariant
-axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Array } IsHeap($h) && $h[$oi, $inv] <: System.Array && $h[$oi, $localinv] != $BaseClass(System.Array) ==> true);
-
-// Bag object invariant
-axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: Bag } IsHeap($h) && $h[$oi, $inv] <: Bag && $h[$oi, $localinv] != $BaseClass(Bag) ==> 0 <= $h[$oi, Bag.n] && $h[$oi, Bag.n] <= $Length($h[$oi, Bag.a]));
-
-procedure Bag.SpecSharp.CheckInvariant$System.Boolean(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], throwException$in: bool where true) returns ($result: bool where true);
- // user-declared preconditions
- requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this) && (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == this && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
- free requires $BeingConstructed == null;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != this || !($typeof(this) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Bag.SpecSharp.CheckInvariant$System.Boolean(this: ref, throwException$in: bool) returns ($result: bool)
-{
- var throwException: bool where true, stack0i: int, stack1i: int, stack0b: bool, stack1o: ref, return.value: bool where true, stack50000o: ref, stack0o: ref, SS$Display.Return.Local: bool where true;
-
- entry:
- throwException := throwException$in;
- goto block2380;
-
- block2380:
- goto block2482;
-
- block2482:
- // ----- nop
- // ----- load constant 0
- stack0i := 0;
- // ----- load field
- assert this != null;
- stack1i := $Heap[this, Bag.n];
- // ----- binary operator
- // ----- branch
- goto true2482to2550, false2482to2414;
-
- true2482to2550:
- assume stack0i > stack1i;
- goto block2550;
-
- false2482to2414:
- assume stack0i <= stack1i;
- goto block2414;
-
- block2550:
- // ----- copy
- stack0b := throwException;
- // ----- unary operator
- // ----- branch
- goto true2550to2584, false2550to2601;
-
- block2414:
- // ----- load field
- assert this != null;
- stack0i := $Heap[this, Bag.n];
- // ----- load field
- assert this != null;
- stack1o := $Heap[this, Bag.a];
- // ----- unary operator
- assert stack1o != null;
- stack1i := $Length(stack1o);
- // ----- unary operator
- stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
- // ----- binary operator
- // ----- branch
- goto true2414to2550, false2414to2465;
-
- true2414to2550:
- assume stack0i > stack1i;
- goto block2550;
-
- false2414to2465:
- assume stack0i <= stack1i;
- goto block2465;
-
- block2465:
- // ----- branch
- goto block2448;
-
- true2550to2584:
- assume !stack0b;
- goto block2584;
-
- false2550to2601:
- assume stack0b;
- goto block2601;
-
- block2584:
- // ----- load constant 0
- return.value := false;
- // ----- branch
- goto block2567;
-
- block2601:
- assume false;
- // ----- new object
- havoc stack50000o;
- assume $Heap[stack50000o, $allocated] == false && stack50000o != null && $typeof(stack50000o) == Microsoft.Contracts.ObjectInvariantException;
- assume $Heap[stack50000o, $ownerRef] == stack50000o && $Heap[stack50000o, $ownerFrame] == $PeerGroupPlaceholder;
- // ----- call
- assert stack50000o != null;
- call Microsoft.Contracts.ObjectInvariantException..ctor(stack50000o);
- // ----- copy
- stack0o := stack50000o;
- // ----- throw
- assert stack0o != null;
- assume false;
- return;
-
- block2448:
- // ----- load constant 1
- return.value := true;
- // ----- branch
- goto block2567;
-
- block2567:
- // ----- copy
- SS$Display.Return.Local := return.value;
- // ----- copy
- stack0b := return.value;
- // ----- return
- $result := stack0b;
- return;
-}
-
-
-
-axiom Microsoft.Contracts.ObjectInvariantException <: Microsoft.Contracts.ObjectInvariantException;
-
-axiom Microsoft.Contracts.GuardException <: Microsoft.Contracts.GuardException;
-
-axiom System.Exception <: System.Exception;
-
-axiom $BaseClass(System.Exception) == System.Object && AsDirectSubClass(System.Exception, $BaseClass(System.Exception)) == System.Exception;
-
-axiom !$IsImmutable(System.Exception) && $AsMutable(System.Exception) == System.Exception;
-
-axiom System.Runtime.Serialization.ISerializable <: System.Runtime.Serialization.ISerializable;
-
-axiom System.Runtime.Serialization.ISerializable <: System.Object;
-
-axiom $IsMemberlessType(System.Runtime.Serialization.ISerializable);
-
-axiom $AsInterface(System.Runtime.Serialization.ISerializable) == System.Runtime.Serialization.ISerializable;
-
-axiom System.Exception <: System.Runtime.Serialization.ISerializable;
-
-axiom System.Runtime.InteropServices._Exception <: System.Runtime.InteropServices._Exception;
-
-axiom System.Runtime.InteropServices._Exception <: System.Object;
-
-axiom $IsMemberlessType(System.Runtime.InteropServices._Exception);
-
-axiom $AsInterface(System.Runtime.InteropServices._Exception) == System.Runtime.InteropServices._Exception;
-
-axiom System.Exception <: System.Runtime.InteropServices._Exception;
-
-// System.Exception object invariant
-axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Exception } IsHeap($h) && $h[$oi, $inv] <: System.Exception && $h[$oi, $localinv] != $BaseClass(System.Exception) ==> true);
-
-axiom $BaseClass(Microsoft.Contracts.GuardException) == System.Exception && AsDirectSubClass(Microsoft.Contracts.GuardException, $BaseClass(Microsoft.Contracts.GuardException)) == Microsoft.Contracts.GuardException;
-
-axiom !$IsImmutable(Microsoft.Contracts.GuardException) && $AsMutable(Microsoft.Contracts.GuardException) == Microsoft.Contracts.GuardException;
-
-// Microsoft.Contracts.GuardException object invariant
-axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: Microsoft.Contracts.GuardException } IsHeap($h) && $h[$oi, $inv] <: Microsoft.Contracts.GuardException && $h[$oi, $localinv] != $BaseClass(Microsoft.Contracts.GuardException) ==> true);
-
-axiom $BaseClass(Microsoft.Contracts.ObjectInvariantException) == Microsoft.Contracts.GuardException && AsDirectSubClass(Microsoft.Contracts.ObjectInvariantException, $BaseClass(Microsoft.Contracts.ObjectInvariantException)) == Microsoft.Contracts.ObjectInvariantException;
-
-axiom !$IsImmutable(Microsoft.Contracts.ObjectInvariantException) && $AsMutable(Microsoft.Contracts.ObjectInvariantException) == Microsoft.Contracts.ObjectInvariantException;
-
-// Microsoft.Contracts.ObjectInvariantException object invariant
-axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: Microsoft.Contracts.ObjectInvariantException } IsHeap($h) && $h[$oi, $inv] <: Microsoft.Contracts.ObjectInvariantException && $h[$oi, $localinv] != $BaseClass(Microsoft.Contracts.ObjectInvariantException) ==> true);
-
-procedure Microsoft.Contracts.ObjectInvariantException..ctor(this: ref where $IsNotNull(this, Microsoft.Contracts.ObjectInvariantException) && $Heap[this, $allocated]);
- // object is fully unpacked: this.inv == Object
- free requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
- // nothing is owned by [this,*] and 'this' is alone in its own peer group
- free requires (forall $o: ref :: $o != this ==> $Heap[$o, $ownerRef] != this) && $Heap[this, $ownerRef] == this && $Heap[this, $ownerFrame] == $PeerGroupPlaceholder;
- free requires $BeingConstructed == this;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // target object is allocated upon return
- free ensures $Heap[this, $allocated];
- // target object is additively exposable for Microsoft.Contracts.ObjectInvariantException
- ensures ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == Microsoft.Contracts.ObjectInvariantException && $Heap[this, $localinv] == $typeof(this);
- ensures $Heap[this, $ownerRef] == old($Heap)[this, $ownerRef] && $Heap[this, $ownerFrame] == old($Heap)[this, $ownerFrame];
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && ($o != this || !(Microsoft.Contracts.ObjectInvariantException <: DeclType222($f))) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] && $o != this ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Bag..ctor$System.Int32.array$notnull(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], initialElements$in: ref where $IsNotNull(initialElements$in, IntArray(System.Int32, 1)) && $Heap[initialElements$in, $allocated]);
- // object is fully unpacked: this.inv == Object
- free requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
- // initialElements is peer consistent
- requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[initialElements$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[initialElements$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- // initialElements is peer consistent (owner must not be valid)
- requires $Heap[initialElements$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[initialElements$in, $ownerRef], $inv] <: $Heap[initialElements$in, $ownerFrame]) || $Heap[$Heap[initialElements$in, $ownerRef], $localinv] == $BaseClass($Heap[initialElements$in, $ownerFrame]);
- // nothing is owned by [this,*] and 'this' is alone in its own peer group
- free requires (forall $o: ref :: $o != this ==> $Heap[$o, $ownerRef] != this) && $Heap[this, $ownerRef] == this && $Heap[this, $ownerFrame] == $PeerGroupPlaceholder;
- free requires $BeingConstructed == this;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // target object is allocated upon return
- free ensures $Heap[this, $allocated];
- // target object is additively exposable for Bag
- ensures ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == Bag && $Heap[this, $localinv] == $typeof(this);
- ensures $Heap[this, $ownerRef] == old($Heap)[this, $ownerRef] && $Heap[this, $ownerFrame] == old($Heap)[this, $ownerFrame];
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && ($o != this || !(Bag <: DeclType222($f))) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] && $o != this ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Bag..ctor$System.Int32.array$notnull(this: ref, initialElements$in: ref)
-{
- var initialElements: ref where $IsNotNull(initialElements, IntArray(System.Int32, 1)) && $Heap[initialElements, $allocated], stack0o: ref, stack0i: int, temp0: exposeVersionType, temp1: ref, temp2: exposeVersionType, stack1i: int, temp3: ref;
-
- entry:
- initialElements := initialElements$in;
- assume $Heap[this, Bag.n] == 0;
- goto block3332;
-
- block3332:
- goto block3468;
-
- block3468:
- // ----- nop
- // ----- copy ----- AddMethod.ssc(13,5)
- stack0o := initialElements;
- // ----- unary operator ----- AddMethod.ssc(13,5)
- assert stack0o != null;
- stack0i := $Length(stack0o);
- // ----- unary operator ----- AddMethod.ssc(13,5)
- stack0i := $IntToInt(stack0i, System.UIntPtr, System.Int32);
- // ----- store field ----- AddMethod.ssc(13,5)
- assert this != null;
- assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- havoc temp0;
- $Heap[this, $exposeVersion] := temp0;
- $Heap[this, Bag.n] := stack0i;
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
- assume IsHeap($Heap);
- // ----- copy ----- AddMethod.ssc(14,5)
- stack0o := initialElements;
- // ----- unary operator ----- AddMethod.ssc(14,5)
- assert stack0o != null;
- stack0i := $Length(stack0o);
- // ----- unary operator ----- AddMethod.ssc(14,5)
- stack0i := $IntToInt(stack0i, System.UIntPtr, System.Int32);
- // ----- new array ----- AddMethod.ssc(14,5)
- assert 0 <= stack0i;
- havoc temp1;
- assume $Heap[temp1, $allocated] == false && $Length(temp1) == stack0i;
- assume $Heap[$ElementProxy(temp1, -1), $allocated] == false && $ElementProxy(temp1, -1) != temp1 && $ElementProxy(temp1, -1) != null;
- assume temp1 != null;
- assume $typeof(temp1) == IntArray(System.Int32, 1);
- assume $Heap[temp1, $ownerRef] == temp1 && $Heap[temp1, $ownerFrame] == $PeerGroupPlaceholder;
- assume $Heap[$ElementProxy(temp1, -1), $ownerRef] == $ElementProxy(temp1, -1) && $Heap[$ElementProxy(temp1, -1), $ownerFrame] == $PeerGroupPlaceholder;
- assume $Heap[temp1, $inv] == $typeof(temp1) && $Heap[temp1, $localinv] == $typeof(temp1);
- assume (forall $i: int :: IntArrayGet($Heap[temp1, $elements], $i) == 0);
- $Heap[temp1, $allocated] := true;
- call System.Object..ctor($ElementProxy(temp1, -1));
- stack0o := temp1;
- assume IsHeap($Heap);
- // ----- store field ----- AddMethod.ssc(14,5)
- assert this != null;
- assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- assert ($Heap[stack0o, $ownerRef] == this && $Heap[stack0o, $ownerFrame] == Bag) || $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder;
- assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[stack0o, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[stack0o, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> $Heap[this, $ownerRef] != $Heap[stack0o, $ownerRef] || $Heap[this, $ownerFrame] != $Heap[stack0o, $ownerFrame];
- call $UpdateOwnersForRep(this, Bag, stack0o);
- havoc temp2;
- $Heap[this, $exposeVersion] := temp2;
- $Heap[this, Bag.a] := stack0o;
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
- assume IsHeap($Heap);
- // ----- call ----- AddMethod.ssc(15,5)
- assert this != null;
- call System.Object..ctor(this);
- $Heap[this, $NonNullFieldsAreInitialized] := true;
- assume IsHeap($Heap);
- goto block3417;
-
- block3417:
- // ----- load field ----- AddMethod.ssc(16,5)
- assert this != null;
- stack0o := $Heap[this, Bag.a];
- // ----- load constant 0 ----- AddMethod.ssc(16,5)
- stack1i := 0;
- // ----- call ----- AddMethod.ssc(16,5)
- assert initialElements != null;
- call System.Array.CopyTo$System.Array$notnull$System.Int32$.Virtual.$(initialElements, stack0o, stack1i);
- // ----- FrameGuard processing ----- AddMethod.ssc(17,3)
- temp3 := this;
- // ----- classic pack ----- AddMethod.ssc(17,3)
- assert temp3 != null;
- assert $Heap[temp3, $inv] == System.Object && $Heap[temp3, $localinv] == $typeof(temp3);
- assert 0 <= $Heap[temp3, Bag.n];
- assert $Heap[temp3, Bag.n] <= $Length($Heap[temp3, Bag.a]);
- assert (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == temp3 && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
- $Heap[temp3, $inv] := Bag;
- assume IsHeap($Heap);
- // ----- return
- return;
-}
-
-
-
-procedure System.Object..ctor(this: ref where $IsNotNull(this, System.Object) && $Heap[this, $allocated]);
- // object is fully unpacked: this.inv == Object
- free requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
- // nothing is owned by [this,*] and 'this' is alone in its own peer group
- free requires (forall $o: ref :: $o != this ==> $Heap[$o, $ownerRef] != this) && $Heap[this, $ownerRef] == this && $Heap[this, $ownerFrame] == $PeerGroupPlaceholder;
- free requires $BeingConstructed == this;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // target object is allocated upon return
- free ensures $Heap[this, $allocated];
- // target object is additively exposable for System.Object
- ensures ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
- ensures $Heap[this, $ownerRef] == old($Heap)[this, $ownerRef] && $Heap[this, $ownerFrame] == old($Heap)[this, $ownerFrame];
- ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && ($o != this || !(System.Object <: DeclType222($f))) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] && $o != this ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure System.Array.CopyTo$System.Array$notnull$System.Int32$.Virtual.$(this: ref where $IsNotNull(this, System.Array) && $Heap[this, $allocated], array$in: ref where $IsNotNull(array$in, System.Array) && $Heap[array$in, $allocated], index$in: int where InRange(index$in, System.Int32));
- // user-declared preconditions
- requires array$in != null;
- requires $LBound(array$in, 0) <= index$in;
- requires $Rank(this) == 1;
- requires $Rank(array$in) == 1;
- requires $Length(this) <= $UBound(array$in, 0) + 1 - index$in;
- // target object is peer consistent
- requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[this, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[this, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- // target object is peer consistent (owner must not be valid)
- requires $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- // array is peer consistent
- requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[array$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[array$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- // array is peer consistent (owner must not be valid)
- requires $Heap[array$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[array$in, $ownerRef], $inv] <: $Heap[array$in, $ownerFrame]) || $Heap[$Heap[array$in, $ownerRef], $localinv] == $BaseClass($Heap[array$in, $ownerFrame]);
- free requires $BeingConstructed == null;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // hard-coded postcondition
- ensures (forall $k: int :: { ValueArrayGet($Heap[array$in, $elements], $k) } (index$in <= $k && $k < index$in + $Length(this) ==> old(ValueArrayGet($Heap[this, $elements], $k + 0 - index$in)) == ValueArrayGet($Heap[array$in, $elements], $k)) && (!(index$in <= $k && $k < index$in + $Length(this)) ==> old(ValueArrayGet($Heap[array$in, $elements], $k)) == ValueArrayGet($Heap[array$in, $elements], $k)));
- ensures (forall $k: int :: { IntArrayGet($Heap[array$in, $elements], $k) } (index$in <= $k && $k < index$in + $Length(this) ==> old(IntArrayGet($Heap[this, $elements], $k + 0 - index$in)) == IntArrayGet($Heap[array$in, $elements], $k)) && (!(index$in <= $k && $k < index$in + $Length(this)) ==> old(IntArrayGet($Heap[array$in, $elements], $k)) == IntArrayGet($Heap[array$in, $elements], $k)));
- ensures (forall $k: int :: { RefArrayGet($Heap[array$in, $elements], $k) } (index$in <= $k && $k < index$in + $Length(this) ==> old(RefArrayGet($Heap[this, $elements], $k + 0 - index$in)) == RefArrayGet($Heap[array$in, $elements], $k)) && (!(index$in <= $k && $k < index$in + $Length(this)) ==> old(RefArrayGet($Heap[array$in, $elements], $k)) == RefArrayGet($Heap[array$in, $elements], $k)));
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != array$in || !($typeof(array$in) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != array$in || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-procedure Bag.Add$System.Int32(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], x$in: int where InRange(x$in, System.Int32));
- // target object is peer consistent
- requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[this, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[this, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- // target object is peer consistent (owner must not be valid)
- requires $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- free requires $BeingConstructed == null;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != this || !($typeof(this) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != this || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Bag.Add$System.Int32(this: ref, x$in: int)
-{
- var x: int where InRange(x, System.Int32), temp0: ref, stack1s: struct, stack1o: ref, temp1: exposeVersionType, local2: ref where $Is(local2, System.Exception) && $Heap[local2, $allocated], stack0i: int, stack1i: int, stack0b: bool, b: ref where $Is(b, IntArray(System.Int32, 1)) && $Heap[b, $allocated], temp2: ref, stack0o: ref, stack2o: ref, stack3i: int, stack4o: ref, stack4i: int, temp3: exposeVersionType, local4: int where InRange(local4, System.Int32), temp4: exposeVersionType, stack0s: struct;
-
- entry:
- x := x$in;
- goto block4335;
-
- block4335:
- goto block4488;
-
- block4488:
- // ----- nop
- // ----- FrameGuard processing ----- AddMethod.ssc(22,13)
- temp0 := this;
- // ----- load token ----- AddMethod.ssc(22,13)
- havoc stack1s;
- assume $IsTokenForType(stack1s, Bag);
- // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(22,13)
- stack1o := TypeObject(Bag);
- // ----- local unpack ----- AddMethod.ssc(22,13)
- assert temp0 != null;
- assert ($Heap[temp0, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[temp0, $ownerRef], $inv] <: $Heap[temp0, $ownerFrame]) || $Heap[$Heap[temp0, $ownerRef], $localinv] == $BaseClass($Heap[temp0, $ownerFrame])) && $Heap[temp0, $inv] <: Bag && $Heap[temp0, $localinv] == $typeof(temp0);
- $Heap[temp0, $localinv] := System.Object;
- havoc temp1;
- $Heap[temp0, $exposeVersion] := temp1;
- assume IsHeap($Heap);
- local2 := null;
- goto block4505;
-
- block4505:
- // ----- load field ----- AddMethod.ssc(24,7)
- assert this != null;
- stack0i := $Heap[this, Bag.n];
- // ----- load field ----- AddMethod.ssc(24,7)
- assert this != null;
- stack1o := $Heap[this, Bag.a];
- // ----- unary operator ----- AddMethod.ssc(24,7)
- assert stack1o != null;
- stack1i := $Length(stack1o);
- // ----- unary operator ----- AddMethod.ssc(24,7)
- stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
- // ----- binary operator ----- AddMethod.ssc(24,7)
- // ----- branch ----- AddMethod.ssc(24,7)
- goto true4505to4539, false4505to4522;
-
- true4505to4539:
- assume stack0i != stack1i;
- goto block4539;
-
- false4505to4522:
- assume stack0i == stack1i;
- goto block4522;
-
- block4539:
- // ----- load field ----- AddMethod.ssc(30,7)
- assert this != null;
- stack0o := $Heap[this, Bag.a];
- // ----- load field ----- AddMethod.ssc(30,7)
- assert this != null;
- stack1i := $Heap[this, Bag.n];
- // ----- store element ----- AddMethod.ssc(30,7)
- assert stack0o != null;
- assert 0 <= stack1i;
- assert stack1i < $Length(stack0o);
- assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[stack0o, $ownerRef], $inv] <: $Heap[stack0o, $ownerFrame]) || $Heap[$Heap[stack0o, $ownerRef], $localinv] == $BaseClass($Heap[stack0o, $ownerFrame]);
- $Heap[stack0o, $elements] := IntArraySet($Heap[stack0o, $elements], stack1i, x);
- assume IsHeap($Heap);
- // ----- load field ----- AddMethod.ssc(31,7)
- assert this != null;
- local4 := $Heap[this, Bag.n];
- // ----- load constant 1 ----- AddMethod.ssc(31,7)
- stack0i := 1;
- // ----- binary operator ----- AddMethod.ssc(31,7)
- stack0i := local4 + stack0i;
- // ----- store field ----- AddMethod.ssc(31,7)
- assert this != null;
- assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- havoc temp4;
- $Heap[this, $exposeVersion] := temp4;
- $Heap[this, Bag.n] := stack0i;
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
- assume IsHeap($Heap);
- // ----- copy
- stack0i := local4;
- // ----- branch
- goto block4658;
-
- block4522:
- // ----- load constant 2 ----- AddMethod.ssc(26,15)
- stack0i := 2;
- // ----- load field ----- AddMethod.ssc(26,15)
- assert this != null;
- stack1o := $Heap[this, Bag.a];
- // ----- unary operator ----- AddMethod.ssc(26,15)
- assert stack1o != null;
- stack1i := $Length(stack1o);
- // ----- unary operator ----- AddMethod.ssc(26,15)
- stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
- // ----- binary operator ----- AddMethod.ssc(26,15)
- stack0i := stack0i * stack1i;
- // ----- load constant 1 ----- AddMethod.ssc(26,15)
- stack1i := 1;
- // ----- binary operator ----- AddMethod.ssc(26,15)
- stack0i := stack0i + stack1i;
- // ----- new array ----- AddMethod.ssc(26,15)
- assert 0 <= stack0i;
- havoc temp2;
- assume $Heap[temp2, $allocated] == false && $Length(temp2) == stack0i;
- assume $Heap[$ElementProxy(temp2, -1), $allocated] == false && $ElementProxy(temp2, -1) != temp2 && $ElementProxy(temp2, -1) != null;
- assume temp2 != null;
- assume $typeof(temp2) == IntArray(System.Int32, 1);
- assume $Heap[temp2, $ownerRef] == temp2 && $Heap[temp2, $ownerFrame] == $PeerGroupPlaceholder;
- assume $Heap[$ElementProxy(temp2, -1), $ownerRef] == $ElementProxy(temp2, -1) && $Heap[$ElementProxy(temp2, -1), $ownerFrame] == $PeerGroupPlaceholder;
- assume $Heap[temp2, $inv] == $typeof(temp2) && $Heap[temp2, $localinv] == $typeof(temp2);
- assume (forall $i: int :: IntArrayGet($Heap[temp2, $elements], $i) == 0);
- $Heap[temp2, $allocated] := true;
- call System.Object..ctor($ElementProxy(temp2, -1));
- b := temp2;
- assume IsHeap($Heap);
- // ----- load field ----- AddMethod.ssc(27,9)
- assert this != null;
- stack0o := $Heap[this, Bag.a];
- // ----- load constant 0 ----- AddMethod.ssc(27,9)
- stack1i := 0;
- // ----- copy ----- AddMethod.ssc(27,9)
- stack2o := b;
- // ----- load constant 0 ----- AddMethod.ssc(27,9)
- stack3i := 0;
- // ----- load field ----- AddMethod.ssc(27,9)
- assert this != null;
- stack4o := $Heap[this, Bag.a];
- // ----- unary operator ----- AddMethod.ssc(27,9)
- assert stack4o != null;
- stack4i := $Length(stack4o);
- // ----- unary operator ----- AddMethod.ssc(27,9)
- stack4i := $IntToInt(stack4i, System.UIntPtr, System.Int32);
- // ----- call ----- AddMethod.ssc(27,9)
- call System.Array.Copy$System.Array$notnull$System.Int32$System.Array$notnull$System.Int32$System.Int32(stack0o, stack1i, stack2o, stack3i, stack4i);
- // ----- store field ----- AddMethod.ssc(28,9)
- assert this != null;
- assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- assert ($Heap[b, $ownerRef] == this && $Heap[b, $ownerFrame] == Bag) || $Heap[b, $ownerFrame] == $PeerGroupPlaceholder;
- assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[b, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[b, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> $Heap[this, $ownerRef] != $Heap[b, $ownerRef] || $Heap[this, $ownerFrame] != $Heap[b, $ownerFrame];
- call $UpdateOwnersForRep(this, Bag, b);
- havoc temp3;
- $Heap[this, $exposeVersion] := temp3;
- $Heap[this, Bag.a] := b;
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
- assume IsHeap($Heap);
- goto block4539;
-
- block4658:
- stack0o := null;
- // ----- binary operator
- // ----- branch
- goto true4658to4624, false4658to4641;
-
- true4658to4624:
- assume local2 == stack0o;
- goto block4624;
-
- false4658to4641:
- assume local2 != stack0o;
- goto block4641;
-
- block4624:
- // ----- load token ----- AddMethod.ssc(32,5)
- havoc stack0s;
- assume $IsTokenForType(stack0s, Bag);
- // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(32,5)
- stack0o := TypeObject(Bag);
- // ----- local pack ----- AddMethod.ssc(32,5)
- assert temp0 != null;
- assert $Heap[temp0, $localinv] == System.Object;
- assert 0 <= $Heap[temp0, Bag.n];
- assert $Heap[temp0, Bag.n] <= $Length($Heap[temp0, Bag.a]);
- assert (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == temp0 && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
- $Heap[temp0, $localinv] := $typeof(temp0);
- assume IsHeap($Heap);
- goto block4726;
-
- block4641:
- // ----- is instance
- // ----- branch
- goto true4641to4624, false4641to4692;
-
- true4641to4624:
- assume $As(local2, Microsoft.Contracts.ICheckedException) != null;
- goto block4624;
-
- false4641to4692:
- assume $As(local2, Microsoft.Contracts.ICheckedException) == null;
- goto block4692;
-
- block4692:
- // ----- branch
- goto block4726;
-
- block4726:
- // ----- nop
- // ----- branch
- goto block4590;
-
- block4590:
- // ----- return
- return;
-}
-
-
-
-axiom System.Type <: System.Type;
-
-axiom System.Reflection.MemberInfo <: System.Reflection.MemberInfo;
-
-axiom $BaseClass(System.Reflection.MemberInfo) == System.Object && AsDirectSubClass(System.Reflection.MemberInfo, $BaseClass(System.Reflection.MemberInfo)) == System.Reflection.MemberInfo;
-
-axiom $IsImmutable(System.Reflection.MemberInfo) && $AsImmutable(System.Reflection.MemberInfo) == System.Reflection.MemberInfo;
-
-axiom System.Reflection.ICustomAttributeProvider <: System.Reflection.ICustomAttributeProvider;
-
-axiom System.Reflection.ICustomAttributeProvider <: System.Object;
-
-axiom $IsMemberlessType(System.Reflection.ICustomAttributeProvider);
-
-axiom $AsInterface(System.Reflection.ICustomAttributeProvider) == System.Reflection.ICustomAttributeProvider;
-
-axiom System.Reflection.MemberInfo <: System.Reflection.ICustomAttributeProvider;
-
-axiom System.Runtime.InteropServices._MemberInfo <: System.Runtime.InteropServices._MemberInfo;
-
-axiom System.Runtime.InteropServices._MemberInfo <: System.Object;
-
-axiom $IsMemberlessType(System.Runtime.InteropServices._MemberInfo);
-
-axiom $AsInterface(System.Runtime.InteropServices._MemberInfo) == System.Runtime.InteropServices._MemberInfo;
-
-axiom System.Reflection.MemberInfo <: System.Runtime.InteropServices._MemberInfo;
-
-axiom $IsMemberlessType(System.Reflection.MemberInfo);
-
-// System.Reflection.MemberInfo object invariant
-axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Reflection.MemberInfo } IsHeap($h) && $h[$oi, $inv] <: System.Reflection.MemberInfo && $h[$oi, $localinv] != $BaseClass(System.Reflection.MemberInfo) ==> true);
-
-axiom $BaseClass(System.Type) == System.Reflection.MemberInfo && AsDirectSubClass(System.Type, $BaseClass(System.Type)) == System.Type;
-
-axiom $IsImmutable(System.Type) && $AsImmutable(System.Type) == System.Type;
-
-axiom System.Runtime.InteropServices._Type <: System.Runtime.InteropServices._Type;
-
-axiom System.Runtime.InteropServices._Type <: System.Object;
-
-axiom $IsMemberlessType(System.Runtime.InteropServices._Type);
-
-axiom $AsInterface(System.Runtime.InteropServices._Type) == System.Runtime.InteropServices._Type;
-
-axiom System.Type <: System.Runtime.InteropServices._Type;
-
-axiom System.Reflection.IReflect <: System.Reflection.IReflect;
-
-axiom System.Reflection.IReflect <: System.Object;
-
-axiom $IsMemberlessType(System.Reflection.IReflect);
-
-axiom $AsInterface(System.Reflection.IReflect) == System.Reflection.IReflect;
-
-axiom System.Type <: System.Reflection.IReflect;
-
-axiom $IsMemberlessType(System.Type);
-
-// System.Type object invariant
-axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Type } IsHeap($h) && $h[$oi, $inv] <: System.Type && $h[$oi, $localinv] != $BaseClass(System.Type) ==> true);
-
-procedure System.Array.Copy$System.Array$notnull$System.Int32$System.Array$notnull$System.Int32$System.Int32(sourceArray$in: ref where $IsNotNull(sourceArray$in, System.Array) && $Heap[sourceArray$in, $allocated], sourceIndex$in: int where InRange(sourceIndex$in, System.Int32), destinationArray$in: ref where $IsNotNull(destinationArray$in, System.Array) && $Heap[destinationArray$in, $allocated], destinationIndex$in: int where InRange(destinationIndex$in, System.Int32), length$in: int where InRange(length$in, System.Int32));
- // user-declared preconditions
- requires sourceArray$in != null;
- requires destinationArray$in != null;
- requires $Rank(sourceArray$in) == $Rank(destinationArray$in);
- requires sourceIndex$in >= $LBound(sourceArray$in, 0);
- requires destinationIndex$in >= $LBound(destinationArray$in, 0);
- requires length$in >= 0;
- requires sourceIndex$in + length$in <= $LBound(sourceArray$in, 0) + $Length(sourceArray$in);
- requires destinationIndex$in + length$in <= $LBound(destinationArray$in, 0) + $Length(destinationArray$in);
- // sourceArray is peer consistent
- requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[sourceArray$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[sourceArray$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- // sourceArray is peer consistent (owner must not be valid)
- requires $Heap[sourceArray$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[sourceArray$in, $ownerRef], $inv] <: $Heap[sourceArray$in, $ownerFrame]) || $Heap[$Heap[sourceArray$in, $ownerRef], $localinv] == $BaseClass($Heap[sourceArray$in, $ownerFrame]);
- // destinationArray is peer consistent
- requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[destinationArray$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[destinationArray$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- // destinationArray is peer consistent (owner must not be valid)
- requires $Heap[destinationArray$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[destinationArray$in, $ownerRef], $inv] <: $Heap[destinationArray$in, $ownerFrame]) || $Heap[$Heap[destinationArray$in, $ownerRef], $localinv] == $BaseClass($Heap[destinationArray$in, $ownerFrame]);
- free requires $BeingConstructed == null;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // hard-coded postcondition
- ensures (forall $k: int :: { ValueArrayGet($Heap[destinationArray$in, $elements], $k) } (destinationIndex$in <= $k && $k < destinationIndex$in + length$in ==> old(ValueArrayGet($Heap[sourceArray$in, $elements], $k + sourceIndex$in - destinationIndex$in)) == ValueArrayGet($Heap[destinationArray$in, $elements], $k)) && (!(destinationIndex$in <= $k && $k < destinationIndex$in + length$in) ==> old(ValueArrayGet($Heap[destinationArray$in, $elements], $k)) == ValueArrayGet($Heap[destinationArray$in, $elements], $k)));
- ensures (forall $k: int :: { IntArrayGet($Heap[destinationArray$in, $elements], $k) } (destinationIndex$in <= $k && $k < destinationIndex$in + length$in ==> old(IntArrayGet($Heap[sourceArray$in, $elements], $k + sourceIndex$in - destinationIndex$in)) == IntArrayGet($Heap[destinationArray$in, $elements], $k)) && (!(destinationIndex$in <= $k && $k < destinationIndex$in + length$in) ==> old(IntArrayGet($Heap[destinationArray$in, $elements], $k)) == IntArrayGet($Heap[destinationArray$in, $elements], $k)));
- ensures (forall $k: int :: { RefArrayGet($Heap[destinationArray$in, $elements], $k) } (destinationIndex$in <= $k && $k < destinationIndex$in + length$in ==> old(RefArrayGet($Heap[sourceArray$in, $elements], $k + sourceIndex$in - destinationIndex$in)) == RefArrayGet($Heap[destinationArray$in, $elements], $k)) && (!(destinationIndex$in <= $k && $k < destinationIndex$in + length$in) ==> old(RefArrayGet($Heap[destinationArray$in, $elements], $k)) == RefArrayGet($Heap[destinationArray$in, $elements], $k)));
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != destinationArray$in || !($typeof(destinationArray$in) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != destinationArray$in || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-axiom Microsoft.Contracts.ICheckedException <: Microsoft.Contracts.ICheckedException;
-
-axiom Microsoft.Contracts.ICheckedException <: System.Object;
-
-axiom $IsMemberlessType(Microsoft.Contracts.ICheckedException);
-
-axiom $AsInterface(Microsoft.Contracts.ICheckedException) == Microsoft.Contracts.ICheckedException;
-
-procedure Bag.AddAgain$System.Int32(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], x$in: int where InRange(x$in, System.Int32));
- // target object is peer consistent
- requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[this, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[this, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- // target object is peer consistent (owner must not be valid)
- requires $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- free requires $BeingConstructed == null;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != this || !($typeof(this) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != this || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Bag.AddAgain$System.Int32(this: ref, x$in: int)
-{
- var x: int where InRange(x, System.Int32), temp0: ref, stack1s: struct, stack1o: ref, temp1: exposeVersionType, local2: ref where $Is(local2, System.Exception) && $Heap[local2, $allocated], stack0i: int, stack1i: int, stack0b: bool, stack0o: ref, local4: int where InRange(local4, System.Int32), temp2: exposeVersionType, b: ref where $Is(b, IntArray(System.Int32, 1)) && $Heap[b, $allocated], temp3: ref, stack2i: int, temp4: exposeVersionType, stack0s: struct;
-
- entry:
- x := x$in;
- goto block6188;
-
- block6188:
- goto block6341;
-
- block6341:
- // ----- nop
- // ----- FrameGuard processing ----- AddMethod.ssc(38,13)
- temp0 := this;
- // ----- load token ----- AddMethod.ssc(38,13)
- havoc stack1s;
- assume $IsTokenForType(stack1s, Bag);
- // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(38,13)
- stack1o := TypeObject(Bag);
- // ----- local unpack ----- AddMethod.ssc(38,13)
- assert temp0 != null;
- assert ($Heap[temp0, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[temp0, $ownerRef], $inv] <: $Heap[temp0, $ownerFrame]) || $Heap[$Heap[temp0, $ownerRef], $localinv] == $BaseClass($Heap[temp0, $ownerFrame])) && $Heap[temp0, $inv] <: Bag && $Heap[temp0, $localinv] == $typeof(temp0);
- $Heap[temp0, $localinv] := System.Object;
- havoc temp1;
- $Heap[temp0, $exposeVersion] := temp1;
- assume IsHeap($Heap);
- local2 := null;
- goto block6358;
-
- block6358:
- // ----- load field ----- AddMethod.ssc(40,7)
- assert this != null;
- stack0i := $Heap[this, Bag.n];
- // ----- load field ----- AddMethod.ssc(40,7)
- assert this != null;
- stack1o := $Heap[this, Bag.a];
- // ----- unary operator ----- AddMethod.ssc(40,7)
- assert stack1o != null;
- stack1i := $Length(stack1o);
- // ----- unary operator ----- AddMethod.ssc(40,7)
- stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
- // ----- binary operator ----- AddMethod.ssc(40,7)
- // ----- branch ----- AddMethod.ssc(40,7)
- goto true6358to6392, false6358to6375;
-
- true6358to6392:
- assume stack0i != stack1i;
- goto block6392;
-
- false6358to6375:
- assume stack0i == stack1i;
- goto block6375;
-
- block6392:
- // ----- load field ----- AddMethod.ssc(46,7)
- assert this != null;
- stack0o := $Heap[this, Bag.a];
- // ----- load field ----- AddMethod.ssc(46,7)
- assert this != null;
- stack1i := $Heap[this, Bag.n];
- // ----- store element ----- AddMethod.ssc(46,7)
- assert stack0o != null;
- assert 0 <= stack1i;
- assert stack1i < $Length(stack0o);
- assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[stack0o, $ownerRef], $inv] <: $Heap[stack0o, $ownerFrame]) || $Heap[$Heap[stack0o, $ownerRef], $localinv] == $BaseClass($Heap[stack0o, $ownerFrame]);
- $Heap[stack0o, $elements] := IntArraySet($Heap[stack0o, $elements], stack1i, x);
- assume IsHeap($Heap);
- // ----- load field ----- AddMethod.ssc(47,7)
- assert this != null;
- local4 := $Heap[this, Bag.n];
- // ----- load constant 1 ----- AddMethod.ssc(47,7)
- stack0i := 1;
- // ----- binary operator ----- AddMethod.ssc(47,7)
- stack0i := local4 + stack0i;
- // ----- store field ----- AddMethod.ssc(47,7)
- assert this != null;
- assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- havoc temp2;
- $Heap[this, $exposeVersion] := temp2;
- $Heap[this, Bag.n] := stack0i;
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
- assume IsHeap($Heap);
- // ----- copy
- stack0i := local4;
- // ----- branch
- goto block6562;
-
- block6375:
- // ----- load constant 2 ----- AddMethod.ssc(42,15)
- stack0i := 2;
- // ----- load field ----- AddMethod.ssc(42,15)
- assert this != null;
- stack1o := $Heap[this, Bag.a];
- // ----- unary operator ----- AddMethod.ssc(42,15)
- assert stack1o != null;
- stack1i := $Length(stack1o);
- // ----- unary operator ----- AddMethod.ssc(42,15)
- stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
- // ----- binary operator ----- AddMethod.ssc(42,15)
- stack0i := stack0i * stack1i;
- // ----- load constant 1 ----- AddMethod.ssc(42,15)
- stack1i := 1;
- // ----- binary operator ----- AddMethod.ssc(42,15)
- stack0i := stack0i + stack1i;
- // ----- new array ----- AddMethod.ssc(42,15)
- assert 0 <= stack0i;
- havoc temp3;
- assume $Heap[temp3, $allocated] == false && $Length(temp3) == stack0i;
- assume $Heap[$ElementProxy(temp3, -1), $allocated] == false && $ElementProxy(temp3, -1) != temp3 && $ElementProxy(temp3, -1) != null;
- assume temp3 != null;
- assume $typeof(temp3) == IntArray(System.Int32, 1);
- assume $Heap[temp3, $ownerRef] == temp3 && $Heap[temp3, $ownerFrame] == $PeerGroupPlaceholder;
- assume $Heap[$ElementProxy(temp3, -1), $ownerRef] == $ElementProxy(temp3, -1) && $Heap[$ElementProxy(temp3, -1), $ownerFrame] == $PeerGroupPlaceholder;
- assume $Heap[temp3, $inv] == $typeof(temp3) && $Heap[temp3, $localinv] == $typeof(temp3);
- assume (forall $i: int :: IntArrayGet($Heap[temp3, $elements], $i) == 0);
- $Heap[temp3, $allocated] := true;
- call System.Object..ctor($ElementProxy(temp3, -1));
- b := temp3;
- assume IsHeap($Heap);
- // ----- load field ----- AddMethod.ssc(43,9)
- assert this != null;
- stack0o := $Heap[this, Bag.a];
- // ----- copy ----- AddMethod.ssc(43,9)
- stack1o := b;
- // ----- load constant 0 ----- AddMethod.ssc(43,9)
- stack2i := 0;
- // ----- call ----- AddMethod.ssc(43,9)
- assert stack0o != null;
- call System.Array.CopyTo$System.Array$notnull$System.Int32$.Virtual.$(stack0o, stack1o, stack2i);
- // ----- store field ----- AddMethod.ssc(44,9)
- assert this != null;
- assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
- assert ($Heap[b, $ownerRef] == this && $Heap[b, $ownerFrame] == Bag) || $Heap[b, $ownerFrame] == $PeerGroupPlaceholder;
- assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[b, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[b, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
- assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> $Heap[this, $ownerRef] != $Heap[b, $ownerRef] || $Heap[this, $ownerFrame] != $Heap[b, $ownerFrame];
- call $UpdateOwnersForRep(this, Bag, b);
- havoc temp4;
- $Heap[this, $exposeVersion] := temp4;
- $Heap[this, Bag.a] := b;
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
- assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
- assume IsHeap($Heap);
- goto block6392;
-
- block6562:
- stack0o := null;
- // ----- binary operator
- // ----- branch
- goto true6562to6477, false6562to6579;
-
- true6562to6477:
- assume local2 == stack0o;
- goto block6477;
-
- false6562to6579:
- assume local2 != stack0o;
- goto block6579;
-
- block6477:
- // ----- load token ----- AddMethod.ssc(48,5)
- havoc stack0s;
- assume $IsTokenForType(stack0s, Bag);
- // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(48,5)
- stack0o := TypeObject(Bag);
- // ----- local pack ----- AddMethod.ssc(48,5)
- assert temp0 != null;
- assert $Heap[temp0, $localinv] == System.Object;
- assert 0 <= $Heap[temp0, Bag.n];
- assert $Heap[temp0, Bag.n] <= $Length($Heap[temp0, Bag.a]);
- assert (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == temp0 && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
- $Heap[temp0, $localinv] := $typeof(temp0);
- assume IsHeap($Heap);
- goto block6545;
-
- block6579:
- // ----- is instance
- // ----- branch
- goto true6579to6477, false6579to6528;
-
- true6579to6477:
- assume $As(local2, Microsoft.Contracts.ICheckedException) != null;
- goto block6477;
-
- false6579to6528:
- assume $As(local2, Microsoft.Contracts.ICheckedException) == null;
- goto block6528;
-
- block6528:
- // ----- branch
- goto block6545;
-
- block6545:
- // ----- nop
- // ----- branch
- goto block6443;
-
- block6443:
- // ----- return
- return;
-}
-
-
-
-procedure Bag..cctor();
- free requires $BeingConstructed == null;
- free requires $PurityAxiomsCanBeAssumed;
- modifies $Heap, $ActivityIndicator;
- // newly allocated objects are fully valid
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
- // first consistent owner unchanged if its exposeVersion is
- free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
- // frame condition
- ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
- free ensures $HeapSucc(old($Heap), $Heap);
- // inv/localinv change only in blocks
- free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
- free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
- free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
-
-
-
-implementation Bag..cctor()
-{
-
- entry:
- goto block7650;
-
- block7650:
- goto block7701;
-
- block7701:
- // ----- nop
- // ----- return
- return;
-}
-
-
+// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
+// RUN: %diff "%s.n.expect" "%t"
+// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
+// RUN: %diff "%s.p.expect" "%t"
+// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
+// RUN: %diff "%s.a.expect" "%t"
+// XFAIL: *
+// Spec# program verifier version 0.90, Copyright (c) 2003-2008, Microsoft.
+// Command Line Options: /print:debug.txt AddMethod.dll
+
+type real;
+
+type elements;
+
+type struct;
+
+type name;
+type any;
+
+type exposeVersionType;
+
+type Field a;
+type Heap = <x>[ref,Field x]x;
+
+var $Heap: Heap where IsHeap($Heap);
+
+type ActivityType;
+
+var $ActivityIndicator: ActivityType;
+
+function IsHeap(h: Heap) returns (bool);
+
+const unique $allocated: Field bool;
+
+const unique $elements: Field elements;
+
+function DeclType222<a>(Field a) returns (name);
+
+axiom DeclType222($elements) == System.Object;
+
+const unique $inv: Field name;
+
+const unique $localinv: Field name;
+
+const unique $exposeVersion: Field exposeVersionType;
+
+axiom DeclType222($exposeVersion) == System.Object;
+
+const unique $sharingMode: Field any;
+
+const unique $SharingMode_Unshared: any;
+
+const unique $SharingMode_LockProtected: any;
+
+const unique $ownerRef: Field ref;
+
+const unique $ownerFrame: Field name;
+
+const unique $PeerGroupPlaceholder: name;
+
+function ClassRepr(class: name) returns (ref);
+
+function ClassReprInv(ref) returns (name);
+
+axiom (forall c: name :: { ClassRepr(c) } ClassReprInv(ClassRepr(c)) == c);
+
+axiom (forall T: name :: !($typeof(ClassRepr(T)) <: System.Object));
+
+axiom (forall T: name :: ClassRepr(T) != null);
+
+axiom (forall T: name, h: Heap :: { h[ClassRepr(T), $ownerFrame] } IsHeap(h) ==> h[ClassRepr(T), $ownerFrame] == $PeerGroupPlaceholder);
+
+function IncludeInMainFrameCondition<a>(f: Field a) returns (bool);
+
+axiom IncludeInMainFrameCondition($allocated);
+
+axiom IncludeInMainFrameCondition($elements);
+
+axiom !IncludeInMainFrameCondition($inv);
+
+axiom !IncludeInMainFrameCondition($localinv);
+
+axiom IncludeInMainFrameCondition($ownerRef);
+
+axiom IncludeInMainFrameCondition($ownerFrame);
+
+axiom IncludeInMainFrameCondition($exposeVersion);
+
+axiom !IncludeInMainFrameCondition($FirstConsistentOwner);
+
+function IsStaticField<a>(f: Field a) returns (bool);
+
+axiom !IsStaticField($allocated);
+
+axiom !IsStaticField($elements);
+
+axiom !IsStaticField($inv);
+
+axiom !IsStaticField($localinv);
+
+axiom !IsStaticField($exposeVersion);
+
+function $IncludedInModifiesStar<a>(f: Field a) returns (bool);
+
+axiom !$IncludedInModifiesStar($ownerRef);
+
+axiom !$IncludedInModifiesStar($ownerFrame);
+
+axiom $IncludedInModifiesStar($exposeVersion);
+
+axiom $IncludedInModifiesStar($elements);
+
+function ValueArrayGet(elements, int) returns (any);
+
+function ValueArraySet(elements, int, any) returns (elements);
+
+function IntArrayGet(elements, int) returns (int);
+
+function IntArraySet(elements, int, int) returns (elements);
+
+function RefArrayGet(elements, int) returns (ref);
+
+function RefArraySet(elements, int, ref) returns (elements);
+
+axiom (forall A: elements, i: int, x: any :: ValueArrayGet(ValueArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: any :: i != j ==> ValueArrayGet(ValueArraySet(A, i, x), j) == ValueArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: int :: IntArrayGet(IntArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: int :: i != j ==> IntArrayGet(IntArraySet(A, i, x), j) == IntArrayGet(A, j));
+
+axiom (forall A: elements, i: int, x: ref :: RefArrayGet(RefArraySet(A, i, x), i) == x);
+
+axiom (forall A: elements, i: int, j: int, x: ref :: i != j ==> RefArrayGet(RefArraySet(A, i, x), j) == RefArrayGet(A, j));
+
+function ArrayIndex(arr: ref, dim: int, indexAtDim: int, remainingIndexContribution: int) returns (int);
+
+function ArrayIndexInvX(arrayIndex: int) returns (indexAtDim: int);
+
+function ArrayIndexInvY(arrayIndex: int) returns (remainingIndexContribution: int);
+
+axiom (forall a: ref, d: int, x: int, y: int :: { ArrayIndex(a, d, x, y) } ArrayIndexInvX(ArrayIndex(a, d, x, y)) == x);
+
+axiom (forall a: ref, d: int, x: int, y: int :: { ArrayIndex(a, d, x, y) } ArrayIndexInvY(ArrayIndex(a, d, x, y)) == y);
+
+axiom (forall a: ref, i: int, heap: Heap :: { IntArrayGet(heap[a, $elements], i) } IsHeap(heap) ==> InRange(IntArrayGet(heap[a, $elements], i), $ElementType($typeof(a))));
+
+axiom (forall a: ref, i: int, heap: Heap :: { $typeof(RefArrayGet(heap[a, $elements], i)) } IsHeap(heap) && RefArrayGet(heap[a, $elements], i) != null ==> $typeof(RefArrayGet(heap[a, $elements], i)) <: $ElementType($typeof(a)));
+
+axiom (forall a: ref, T: name, i: int, r: int, heap: Heap :: { $typeof(a) <: NonNullRefArray(T, r), RefArrayGet(heap[a, $elements], i) } IsHeap(heap) && $typeof(a) <: NonNullRefArray(T, r) ==> RefArrayGet(heap[a, $elements], i) != null);
+
+function $Rank(ref) returns (int);
+
+axiom (forall a: ref :: 1 <= $Rank(a));
+
+axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: RefArray(T, r) } a != null && $typeof(a) <: RefArray(T, r) ==> $Rank(a) == r);
+
+axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: NonNullRefArray(T, r) } a != null && $typeof(a) <: NonNullRefArray(T, r) ==> $Rank(a) == r);
+
+axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: ValueArray(T, r) } a != null && $typeof(a) <: ValueArray(T, r) ==> $Rank(a) == r);
+
+axiom (forall a: ref, T: name, r: int :: { $typeof(a) <: IntArray(T, r) } a != null && $typeof(a) <: IntArray(T, r) ==> $Rank(a) == r);
+
+function $Length(ref) returns (int);
+
+axiom (forall a: ref :: { $Length(a) } 0 <= $Length(a) && $Length(a) <= int#2147483647);
+
+function $DimLength(ref, int) returns (int);
+
+axiom (forall a: ref, i: int :: 0 <= $DimLength(a, i));
+
+axiom (forall a: ref :: { $DimLength(a, 0) } $Rank(a) == 1 ==> $DimLength(a, 0) == $Length(a));
+
+function $LBound(ref, int) returns (int);
+
+function $UBound(ref, int) returns (int);
+
+axiom (forall a: ref, i: int :: { $LBound(a, i) } $LBound(a, i) == 0);
+
+axiom (forall a: ref, i: int :: { $UBound(a, i) } $UBound(a, i) == $DimLength(a, i) - 1);
+
+const unique $ArrayCategoryValue: name;
+
+const unique $ArrayCategoryInt: name;
+
+const unique $ArrayCategoryRef: name;
+
+const unique $ArrayCategoryNonNullRef: name;
+
+function $ArrayCategory(arrayType: name) returns (arrayCategory: name);
+
+axiom (forall T: name, ET: name, r: int :: { T <: ValueArray(ET, r) } T <: ValueArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryValue);
+
+axiom (forall T: name, ET: name, r: int :: { T <: IntArray(ET, r) } T <: IntArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryInt);
+
+axiom (forall T: name, ET: name, r: int :: { T <: RefArray(ET, r) } T <: RefArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryRef);
+
+axiom (forall T: name, ET: name, r: int :: { T <: NonNullRefArray(ET, r) } T <: NonNullRefArray(ET, r) ==> $ArrayCategory(T) == $ArrayCategoryNonNullRef);
+
+const unique System.Array: name;
+
+axiom System.Array <: System.Object;
+
+function $ElementType(name) returns (name);
+
+function ValueArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { ValueArray(T, r) } ValueArray(T, r) <: ValueArray(T, r) && ValueArray(T, r) <: System.Array);
+
+function IntArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { IntArray(T, r) } IntArray(T, r) <: IntArray(T, r) && IntArray(T, r) <: System.Array);
+
+function RefArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { RefArray(T, r) } RefArray(T, r) <: RefArray(T, r) && RefArray(T, r) <: System.Array);
+
+function NonNullRefArray(elementType: name, rank: int) returns (name);
+
+axiom (forall T: name, r: int :: { NonNullRefArray(T, r) } NonNullRefArray(T, r) <: NonNullRefArray(T, r) && NonNullRefArray(T, r) <: System.Array);
+
+function NonNullRefArrayRaw(array: ref, elementType: name, rank: int) returns (bool);
+
+axiom (forall array: ref, elementType: name, rank: int :: { NonNullRefArrayRaw(array, elementType, rank) } NonNullRefArrayRaw(array, elementType, rank) ==> $typeof(array) <: System.Array && $Rank(array) == rank && elementType <: $ElementType($typeof(array)));
+
+axiom (forall T: name, U: name, r: int :: U <: T ==> RefArray(U, r) <: RefArray(T, r));
+
+axiom (forall T: name, U: name, r: int :: U <: T ==> NonNullRefArray(U, r) <: NonNullRefArray(T, r));
+
+axiom (forall A: name, r: int :: $ElementType(ValueArray(A, r)) == A);
+
+axiom (forall A: name, r: int :: $ElementType(IntArray(A, r)) == A);
+
+axiom (forall A: name, r: int :: $ElementType(RefArray(A, r)) == A);
+
+axiom (forall A: name, r: int :: $ElementType(NonNullRefArray(A, r)) == A);
+
+axiom (forall A: name, r: int, T: name :: { T <: RefArray(A, r) } T <: RefArray(A, r) ==> T != A && T == RefArray($ElementType(T), r) && $ElementType(T) <: A);
+
+axiom (forall A: name, r: int, T: name :: { T <: NonNullRefArray(A, r) } T <: NonNullRefArray(A, r) ==> T != A && T == NonNullRefArray($ElementType(T), r) && $ElementType(T) <: A);
+
+axiom (forall A: name, r: int, T: name :: { T <: ValueArray(A, r) } T <: ValueArray(A, r) ==> T == ValueArray(A, r));
+
+axiom (forall A: name, r: int, T: name :: { T <: IntArray(A, r) } T <: IntArray(A, r) ==> T == IntArray(A, r));
+
+axiom (forall A: name, r: int, T: name :: { RefArray(A, r) <: T } RefArray(A, r) <: T ==> System.Array <: T || (T == RefArray($ElementType(T), r) && A <: $ElementType(T)));
+
+axiom (forall A: name, r: int, T: name :: { NonNullRefArray(A, r) <: T } NonNullRefArray(A, r) <: T ==> System.Array <: T || (T == NonNullRefArray($ElementType(T), r) && A <: $ElementType(T)));
+
+axiom (forall A: name, r: int, T: name :: { ValueArray(A, r) <: T } ValueArray(A, r) <: T ==> System.Array <: T || T == ValueArray(A, r));
+
+axiom (forall A: name, r: int, T: name :: { IntArray(A, r) <: T } IntArray(A, r) <: T ==> System.Array <: T || T == IntArray(A, r));
+
+function $ArrayPtr(elementType: name) returns (name);
+
+function $ElementProxy(ref, int) returns (ref);
+
+function $ElementProxyStruct(struct, int) returns (ref);
+
+axiom (forall a: ref, i: int, heap: Heap :: { heap[RefArrayGet(heap[a, $elements], i), $ownerRef] } { heap[RefArrayGet(heap[a, $elements], i), $ownerFrame] } IsHeap(heap) && $typeof(a) <: System.Array ==> RefArrayGet(heap[a, $elements], i) == null || $IsImmutable($typeof(RefArrayGet(heap[a, $elements], i))) || (heap[RefArrayGet(heap[a, $elements], i), $ownerRef] == heap[$ElementProxy(a, 0 - 1), $ownerRef] && heap[RefArrayGet(heap[a, $elements], i), $ownerFrame] == heap[$ElementProxy(a, 0 - 1), $ownerFrame]));
+
+axiom (forall a: ref, heap: Heap :: { IsAllocated(heap, a) } IsHeap(heap) && IsAllocated(heap, a) && $typeof(a) <: System.Array ==> IsAllocated(heap, $ElementProxy(a, 0 - 1)));
+
+axiom (forall o: ref, pos: int :: { $typeof($ElementProxy(o, pos)) } $typeof($ElementProxy(o, pos)) == System.Object);
+
+axiom (forall o: struct, pos: int :: { $typeof($ElementProxyStruct(o, pos)) } $typeof($ElementProxyStruct(o, pos)) == System.Object);
+
+function $StructGet(struct, name) returns (any);
+
+function $StructSet(struct, name, any) returns (struct);
+
+axiom (forall s: struct, f: name, x: any :: $StructGet($StructSet(s, f, x), f) == x);
+
+axiom (forall s: struct, f: name, f': name, x: any :: f != f' ==> $StructGet($StructSet(s, f, x), f') == $StructGet(s, f'));
+
+function ZeroInit(s: struct, typ: name) returns (bool);
+
+function $typeof(ref) returns (name);
+
+function $BaseClass(sub: name) returns (base: name);
+
+axiom (forall T: name :: { $BaseClass(T) } T <: $BaseClass(T) && (T != System.Object ==> T != $BaseClass(T)));
+
+function AsDirectSubClass(sub: name, base: name) returns (sub': name);
+
+function OneClassDown(sub: name, base: name) returns (directSub: name);
+
+axiom (forall A: name, B: name, C: name :: { C <: AsDirectSubClass(B, A) } C <: AsDirectSubClass(B, A) ==> OneClassDown(C, A) == B);
+
+function $IsValueType(name) returns (bool);
+
+axiom (forall T: name :: $IsValueType(T) ==> (forall U: name :: T <: U ==> T == U) && (forall U: name :: U <: T ==> T == U));
+
+const unique System.Boolean: name;
+
+axiom $IsValueType(System.Boolean);
+
+const unique System.Object: name;
+
+function $IsTokenForType(struct, name) returns (bool);
+
+function TypeObject(name) returns (ref);
+
+const unique System.Type: name;
+
+axiom System.Type <: System.Object;
+
+axiom (forall T: name :: { TypeObject(T) } $IsNotNull(TypeObject(T), System.Type));
+
+function TypeName(ref) returns (name);
+
+axiom (forall T: name :: { TypeObject(T) } TypeName(TypeObject(T)) == T);
+
+function $Is(ref, name) returns (bool);
+
+axiom (forall o: ref, T: name :: { $Is(o, T) } $Is(o, T) <==> o == null || $typeof(o) <: T);
+
+function $IsNotNull(ref, name) returns (bool);
+
+axiom (forall o: ref, T: name :: { $IsNotNull(o, T) } $IsNotNull(o, T) <==> o != null && $Is(o, T));
+
+function $As(ref, name) returns (ref);
+
+axiom (forall o: ref, T: name :: $Is(o, T) ==> $As(o, T) == o);
+
+axiom (forall o: ref, T: name :: !$Is(o, T) ==> $As(o, T) == null);
+
+axiom (forall h: Heap, o: ref :: { $typeof(o) <: System.Array, h[o, $inv] } IsHeap(h) && o != null && $typeof(o) <: System.Array ==> h[o, $inv] == $typeof(o) && h[o, $localinv] == $typeof(o));
+
+function IsAllocated<a>(h: Heap, o: a) returns (bool);
+
+axiom (forall<a> h: Heap, o: ref, f: Field a :: { IsAllocated(h, h[o, f]) } IsHeap(h) && h[o, $allocated] ==> IsAllocated(h, h[o, f]));
+
+axiom (forall h: Heap, o: ref, f: Field ref :: { h[h[o, f], $allocated] } IsHeap(h) && h[o, $allocated] ==> h[h[o, f], $allocated]);
+
+axiom (forall h: Heap, s: struct, f: name :: { IsAllocated(h, $StructGet(s, f)) } IsAllocated(h, s) ==> IsAllocated(h, $StructGet(s, f)));
+
+axiom (forall h: Heap, e: elements, i: int :: { IsAllocated(h, RefArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, RefArrayGet(e, i)));
+
+axiom (forall h: Heap, e: elements, i: int :: { IsAllocated(h, ValueArrayGet(e, i)) } IsAllocated(h, e) ==> IsAllocated(h, ValueArrayGet(e, i)));
+
+axiom (forall h: Heap, o: ref :: { h[o, $allocated] } IsAllocated(h, o) ==> h[o, $allocated]);
+
+axiom (forall h: Heap, c: name :: { h[ClassRepr(c), $allocated] } IsHeap(h) ==> h[ClassRepr(c), $allocated]);
+
+const $BeingConstructed: ref;
+
+const unique $NonNullFieldsAreInitialized: Field bool;
+
+const $PurityAxiomsCanBeAssumed: bool;
+
+axiom DeclType222($NonNullFieldsAreInitialized) == System.Object;
+
+
+
+function AsNonNullRefField(field: Field ref, T: name) returns (f: Field ref);
+
+function AsRefField(field: Field ref, T: name) returns (f: Field ref);
+
+function AsRangeField(field: Field int, T: name) returns (f: Field int);
+
+axiom (forall f: Field ref, T: name :: { AsNonNullRefField(f, T) } AsNonNullRefField(f, T) == f ==> AsRefField(f, T) == f);
+
+axiom (forall h: Heap, o: ref, f: Field ref, T: name :: { h[o, AsRefField(f, T)] } IsHeap(h) ==> $Is(h[o, AsRefField(f, T)], T));
+
+axiom (forall h: Heap, o: ref, f: Field ref, T: name :: { h[o, AsNonNullRefField(f, T)] } IsHeap(h) && o != null && (o != $BeingConstructed || h[$BeingConstructed, $NonNullFieldsAreInitialized] == true) ==> h[o, AsNonNullRefField(f, T)] != null);
+
+axiom (forall h: Heap, o: ref, f: Field int, T: name :: { h[o, AsRangeField(f, T)] } IsHeap(h) ==> InRange(h[o, AsRangeField(f, T)], T));
+
+function $IsMemberlessType(name) returns (bool);
+
+axiom (forall o: ref :: { $IsMemberlessType($typeof(o)) } !$IsMemberlessType($typeof(o)));
+
+function $AsInterface(name) returns (name);
+
+axiom (forall $J: name, s: any, b: ref :: { UnboxedType(Box(s, b)) <: $AsInterface($J) } $AsInterface($J) == $J && Box(s, b) == b && UnboxedType(Box(s, b)) <: $AsInterface($J) ==> $typeof(b) <: $J);
+
+function $HeapSucc(oldHeap: Heap, newHeap: Heap) returns (bool);
+
+function $IsImmutable(T: name) returns (bool);
+
+axiom !$IsImmutable(System.Object);
+
+function $AsImmutable(T: name) returns (theType: name);
+
+function $AsMutable(T: name) returns (theType: name);
+
+axiom (forall T: name, U: name :: { U <: $AsImmutable(T) } U <: $AsImmutable(T) ==> $IsImmutable(U) && $AsImmutable(U) == U);
+
+axiom (forall T: name, U: name :: { U <: $AsMutable(T) } U <: $AsMutable(T) ==> !$IsImmutable(U) && $AsMutable(U) == U);
+
+function AsOwner(string: ref, owner: ref) returns (theString: ref);
+
+axiom (forall o: ref, T: name :: { $typeof(o) <: $AsImmutable(T) } o != null && o != $BeingConstructed && $typeof(o) <: $AsImmutable(T) ==> (forall h: Heap :: { IsHeap(h) } IsHeap(h) ==> h[o, $inv] == $typeof(o) && h[o, $localinv] == $typeof(o) && h[o, $ownerFrame] == $PeerGroupPlaceholder && AsOwner(o, h[o, $ownerRef]) == o && (forall t: ref :: { AsOwner(o, h[t, $ownerRef]) } AsOwner(o, h[t, $ownerRef]) == o ==> t == o || h[t, $ownerFrame] != $PeerGroupPlaceholder)));
+
+const unique System.String: name;
+
+function $StringLength(ref) returns (int);
+
+axiom (forall s: ref :: { $StringLength(s) } 0 <= $StringLength(s));
+
+function AsRepField(f: Field ref, declaringType: name) returns (theField: Field ref);
+
+axiom (forall h: Heap, o: ref, f: Field ref, T: name :: { h[o, AsRepField(f, T)] } IsHeap(h) && h[o, AsRepField(f, T)] != null ==> h[h[o, AsRepField(f, T)], $ownerRef] == o && h[h[o, AsRepField(f, T)], $ownerFrame] == T);
+
+function AsPeerField(f: Field ref) returns (theField: Field ref);
+
+axiom (forall h: Heap, o: ref, f: Field ref :: { h[o, AsPeerField(f)] } IsHeap(h) && h[o, AsPeerField(f)] != null ==> h[h[o, AsPeerField(f)], $ownerRef] == h[o, $ownerRef] && h[h[o, AsPeerField(f)], $ownerFrame] == h[o, $ownerFrame]);
+
+function AsElementsRepField(f: Field ref, declaringType: name, position: int) returns (theField: Field ref);
+
+axiom (forall h: Heap, o: ref, f: Field ref, T: name, i: int :: { h[o, AsElementsRepField(f, T, i)] } IsHeap(h) && h[o, AsElementsRepField(f, T, i)] != null ==> h[$ElementProxy(h[o, AsElementsRepField(f, T, i)], i), $ownerRef] == o && h[$ElementProxy(h[o, AsElementsRepField(f, T, i)], i), $ownerFrame] == T);
+
+function AsElementsPeerField(f: Field ref, position: int) returns (theField: Field ref);
+
+axiom (forall h: Heap, o: ref, f: Field ref, i: int :: { h[o, AsElementsPeerField(f, i)] } IsHeap(h) && h[o, AsElementsPeerField(f, i)] != null ==> h[$ElementProxy(h[o, AsElementsPeerField(f, i)], i), $ownerRef] == h[o, $ownerRef] && h[$ElementProxy(h[o, AsElementsPeerField(f, i)], i), $ownerFrame] == h[o, $ownerFrame]);
+
+axiom (forall h: Heap, o: ref :: { h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] } IsHeap(h) && h[o, $ownerFrame] != $PeerGroupPlaceholder && h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] && h[h[o, $ownerRef], $localinv] != $BaseClass(h[o, $ownerFrame]) ==> h[o, $inv] == $typeof(o) && h[o, $localinv] == $typeof(o));
+
+procedure $SetOwner(o: ref, ow: ref, fr: name);
+ modifies $Heap;
+ ensures (forall<a> p: ref, F: Field a :: { $Heap[p, F] } (F != $ownerRef && F != $ownerFrame) || old($Heap[p, $ownerRef] != $Heap[o, $ownerRef]) || old($Heap[p, $ownerFrame] != $Heap[o, $ownerFrame]) ==> old($Heap[p, F]) == $Heap[p, F]);
+ ensures (forall p: ref :: { $Heap[p, $ownerRef] } { $Heap[p, $ownerFrame] } old($Heap[p, $ownerRef] == $Heap[o, $ownerRef]) && old($Heap[p, $ownerFrame] == $Heap[o, $ownerFrame]) ==> $Heap[p, $ownerRef] == ow && $Heap[p, $ownerFrame] == fr);
+ free ensures $HeapSucc(old($Heap), $Heap);
+
+
+
+procedure $UpdateOwnersForRep(o: ref, T: name, e: ref);
+ modifies $Heap;
+ ensures (forall<a> p: ref, F: Field a :: { $Heap[p, F] } (F != $ownerRef && F != $ownerFrame) || old($Heap[p, $ownerRef] != $Heap[e, $ownerRef]) || old($Heap[p, $ownerFrame] != $Heap[e, $ownerFrame]) ==> old($Heap[p, F]) == $Heap[p, F]);
+ ensures e == null ==> $Heap == old($Heap);
+ ensures e != null ==> (forall p: ref :: { $Heap[p, $ownerRef] } { $Heap[p, $ownerFrame] } old($Heap[p, $ownerRef] == $Heap[e, $ownerRef]) && old($Heap[p, $ownerFrame] == $Heap[e, $ownerFrame]) ==> $Heap[p, $ownerRef] == o && $Heap[p, $ownerFrame] == T);
+ free ensures $HeapSucc(old($Heap), $Heap);
+
+
+
+procedure $UpdateOwnersForPeer(c: ref, d: ref);
+ modifies $Heap;
+ ensures (forall<a> p: ref, F: Field a :: { $Heap[p, F] } (F != $ownerRef && F != $ownerFrame) || old($Heap[p, $ownerRef] != $Heap[d, $ownerRef] || $Heap[p, $ownerFrame] != $Heap[d, $ownerFrame]) ==> old($Heap[p, F]) == $Heap[p, F]);
+ ensures d == null ==> $Heap == old($Heap);
+ ensures d != null ==> (forall p: ref :: { $Heap[p, $ownerRef] } { $Heap[p, $ownerFrame] } old($Heap[p, $ownerRef] == $Heap[d, $ownerRef] && $Heap[p, $ownerFrame] == $Heap[d, $ownerFrame]) ==> $Heap[p, $ownerRef] == old($Heap)[c, $ownerRef] && $Heap[p, $ownerFrame] == old($Heap)[c, $ownerFrame]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+
+
+
+const unique $FirstConsistentOwner: Field ref;
+
+function $AsPureObject(ref) returns (ref);
+
+function ##FieldDependsOnFCO<a>(o: ref, f: Field a, ev: exposeVersionType) returns (value: any);
+
+axiom (forall<a> o: ref, f: Field a, h: Heap :: { h[$AsPureObject(o), f] } IsHeap(h) && o != null && h[o, $allocated] == true && $AsPureObject(o) == o && h[o, $ownerFrame] != $PeerGroupPlaceholder && h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] && h[h[o, $ownerRef], $localinv] != $BaseClass(h[o, $ownerFrame]) ==> h[o, f] == ##FieldDependsOnFCO(o, f, h[h[o, $FirstConsistentOwner], $exposeVersion]));
+
+axiom (forall o: ref, h: Heap :: { h[o, $FirstConsistentOwner] } IsHeap(h) && o != null && h[o, $allocated] == true && h[o, $ownerFrame] != $PeerGroupPlaceholder && h[h[o, $ownerRef], $inv] <: h[o, $ownerFrame] && h[h[o, $ownerRef], $localinv] != $BaseClass(h[o, $ownerFrame]) ==> h[o, $FirstConsistentOwner] != null && h[h[o, $FirstConsistentOwner], $allocated] == true && (h[h[o, $FirstConsistentOwner], $ownerFrame] == $PeerGroupPlaceholder || !(h[h[h[o, $FirstConsistentOwner], $ownerRef], $inv] <: h[h[o, $FirstConsistentOwner], $ownerFrame]) || h[h[h[o, $FirstConsistentOwner], $ownerRef], $localinv] == $BaseClass(h[h[o, $FirstConsistentOwner], $ownerFrame])));
+
+function Box<a>(a, ref) returns (ref);
+
+function Unbox(ref) returns (any);
+
+type NondetType;
+
+function MeldNondets(NondetType, any) returns (NondetType);
+
+function BoxFunc<a>(value: a, typ: name) returns (boxedValue: ref);
+
+function AllocFunc(typ: name) returns (newValue: ref);
+
+function NewInstance(object: ref, occurrence: NondetType, activity: ActivityType) returns (newInstance: ref);
+
+axiom (forall value: any, typ: name, occurrence: NondetType, activity: ActivityType :: { NewInstance(BoxFunc(value, typ), occurrence, activity) } Box(value, NewInstance(BoxFunc(value, typ), occurrence, activity)) == NewInstance(BoxFunc(value, typ), occurrence, activity) && UnboxedType(NewInstance(BoxFunc(value, typ), occurrence, activity)) == typ);
+
+axiom (forall x: ref, typ: name, occurrence: NondetType, activity: ActivityType :: !$IsValueType(UnboxedType(x)) ==> NewInstance(BoxFunc(x, typ), occurrence, activity) == x);
+
+axiom (forall x: any, p: ref :: { Unbox(Box(x, p)) } Unbox(Box(x, p)) == x);
+
+function UnboxedType(ref) returns (name);
+
+axiom (forall p: ref :: { $IsValueType(UnboxedType(p)) } $IsValueType(UnboxedType(p)) ==> (forall heap: Heap, x: any :: { heap[Box(x, p), $inv] } IsHeap(heap) ==> heap[Box(x, p), $inv] == $typeof(Box(x, p)) && heap[Box(x, p), $localinv] == $typeof(Box(x, p))));
+
+axiom (forall<a> x: a, p: ref :: { UnboxedType(Box(x, p)) <: System.Object } UnboxedType(Box(x, p)) <: System.Object && Box(x, p) == p ==> x == p);
+
+function BoxTester(p: ref, typ: name) returns (ref);
+
+axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } UnboxedType(p) == typ <==> BoxTester(p, typ) != null);
+
+axiom (forall p: ref, typ: name :: { BoxTester(p, typ) } BoxTester(p, typ) != null ==> Box(Unbox(p), p) == p);
+
+axiom (forall typ: name, occurrence: NondetType, activity: ActivityType :: { NewInstance(AllocFunc(typ), occurrence, activity) } $typeof(NewInstance(AllocFunc(typ), occurrence, activity)) == typ && NewInstance(AllocFunc(typ), occurrence, activity) != null);
+
+axiom (forall typ: name, occurrence: NondetType, activity: ActivityType, heap: Heap :: { heap[NewInstance(AllocFunc(typ), occurrence, activity), $allocated] } IsHeap(heap) ==> heap[NewInstance(AllocFunc(typ), occurrence, activity), $allocated]);
+
+const unique System.SByte: name;
+
+axiom $IsValueType(System.SByte);
+
+const unique System.Byte: name;
+
+axiom $IsValueType(System.Byte);
+
+const unique System.Int16: name;
+
+axiom $IsValueType(System.Int16);
+
+const unique System.UInt16: name;
+
+axiom $IsValueType(System.UInt16);
+
+const unique System.Int32: name;
+
+axiom $IsValueType(System.Int32);
+
+const unique System.UInt32: name;
+
+axiom $IsValueType(System.UInt32);
+
+const unique System.Int64: name;
+
+axiom $IsValueType(System.Int64);
+
+const unique System.UInt64: name;
+
+axiom $IsValueType(System.UInt64);
+
+const unique System.Char: name;
+
+axiom $IsValueType(System.Char);
+
+const unique System.UIntPtr: name;
+
+axiom $IsValueType(System.UIntPtr);
+
+const unique System.IntPtr: name;
+
+axiom $IsValueType(System.IntPtr);
+
+const int#m2147483648: int;
+
+const int#2147483647: int;
+
+const int#4294967295: int;
+
+const int#m9223372036854775808: int;
+
+const int#9223372036854775807: int;
+
+const int#18446744073709551615: int;
+
+axiom int#m9223372036854775808 < int#m2147483648;
+
+axiom int#m2147483648 < 0 - 100000;
+
+axiom 100000 < int#2147483647;
+
+axiom int#2147483647 < int#4294967295;
+
+axiom int#4294967295 < int#9223372036854775807;
+
+axiom int#9223372036854775807 < int#18446744073709551615;
+
+axiom int#m9223372036854775808 + 1 == 0 - int#9223372036854775807;
+
+axiom int#m2147483648 + 1 == 0 - int#2147483647;
+
+function InRange(i: int, T: name) returns (bool);
+
+axiom (forall i: int :: InRange(i, System.SByte) <==> 0 - 128 <= i && i < 128);
+
+axiom (forall i: int :: InRange(i, System.Byte) <==> 0 <= i && i < 256);
+
+axiom (forall i: int :: InRange(i, System.Int16) <==> 0 - 32768 <= i && i < 32768);
+
+axiom (forall i: int :: InRange(i, System.UInt16) <==> 0 <= i && i < 65536);
+
+axiom (forall i: int :: InRange(i, System.Int32) <==> int#m2147483648 <= i && i <= int#2147483647);
+
+axiom (forall i: int :: InRange(i, System.UInt32) <==> 0 <= i && i <= int#4294967295);
+
+axiom (forall i: int :: InRange(i, System.Int64) <==> int#m9223372036854775808 <= i && i <= int#9223372036854775807);
+
+axiom (forall i: int :: InRange(i, System.UInt64) <==> 0 <= i && i <= int#18446744073709551615);
+
+axiom (forall i: int :: InRange(i, System.Char) <==> 0 <= i && i < 65536);
+
+function $IntToInt(val: int, fromType: name, toType: name) returns (int);
+
+function $IntToReal(int, fromType: name, toType: name) returns (real);
+
+function $RealToInt(real, fromType: name, toType: name) returns (int);
+
+function $RealToReal(val: real, fromType: name, toType: name) returns (real);
+
+axiom (forall z: int, B: name, C: name :: InRange(z, C) ==> $IntToInt(z, B, C) == z);
+
+function $SizeIs(name, int) returns (bool);
+
+function $IfThenElse(bool, any, any) returns (any);
+
+axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } b ==> $IfThenElse(b, x, y) == x);
+
+axiom (forall b: bool, x: any, y: any :: { $IfThenElse(b, x, y) } !b ==> $IfThenElse(b, x, y) == y);
+
+function #neg(int) returns (int);
+
+function #and(int, int) returns (int);
+
+function #or(int, int) returns (int);
+
+function #xor(int, int) returns (int);
+
+function #shl(int, int) returns (int);
+
+function #shr(int, int) returns (int);
+
+function #rneg(real) returns (real);
+
+function #radd(real, real) returns (real);
+
+function #rsub(real, real) returns (real);
+
+function #rmul(real, real) returns (real);
+
+function #rdiv(real, real) returns (real);
+
+function #rmod(real, real) returns (real);
+
+function #rLess(real, real) returns (bool);
+
+function #rAtmost(real, real) returns (bool);
+
+function #rEq(real, real) returns (bool);
+
+function #rNeq(real, real) returns (bool);
+
+function #rAtleast(real, real) returns (bool);
+
+function #rGreater(real, real) returns (bool);
+
+axiom (forall x: int, y: int :: { x % y } { x / y } x % y == x - x / y * y);
+
+axiom (forall x: int, y: int :: { x % y } 0 <= x && 0 < y ==> 0 <= x % y && x % y < y);
+
+axiom (forall x: int, y: int :: { x % y } 0 <= x && y < 0 ==> 0 <= x % y && x % y < 0 - y);
+
+axiom (forall x: int, y: int :: { x % y } x <= 0 && 0 < y ==> 0 - y < x % y && x % y <= 0);
+
+axiom (forall x: int, y: int :: { x % y } x <= 0 && y < 0 ==> y < x % y && x % y <= 0);
+
+axiom (forall x: int, y: int :: { (x + y) % y } 0 <= x && 0 <= y ==> (x + y) % y == x % y);
+
+axiom (forall x: int, y: int :: { (y + x) % y } 0 <= x && 0 <= y ==> (y + x) % y == x % y);
+
+axiom (forall x: int, y: int :: { (x - y) % y } 0 <= x - y && 0 <= y ==> (x - y) % y == x % y);
+
+axiom (forall a: int, b: int, d: int :: { a % d, b % d } 2 <= d && a % d == b % d && a < b ==> a + d <= b);
+
+axiom (forall x: int, y: int :: { #and(x, y) } 0 <= x || 0 <= y ==> 0 <= #and(x, y));
+
+axiom (forall x: int, y: int :: { #or(x, y) } 0 <= x && 0 <= y ==> 0 <= #or(x, y) && #or(x, y) <= x + y);
+
+axiom (forall i: int :: { #shl(i, 0) } #shl(i, 0) == i);
+
+axiom (forall i: int, j: int :: { #shl(i, j) } 1 <= j ==> #shl(i, j) == #shl(i, j - 1) * 2);
+
+axiom (forall i: int, j: int :: { #shl(i, j) } 0 <= i && i < 32768 && 0 <= j && j <= 16 ==> 0 <= #shl(i, j) && #shl(i, j) <= int#2147483647);
+
+axiom (forall i: int :: { #shr(i, 0) } #shr(i, 0) == i);
+
+axiom (forall i: int, j: int :: { #shr(i, j) } 1 <= j ==> #shr(i, j) == #shr(i, j - 1) / 2);
+
+function #min(int, int) returns (int);
+
+function #max(int, int) returns (int);
+
+axiom (forall x: int, y: int :: { #min(x, y) } (#min(x, y) == x || #min(x, y) == y) && #min(x, y) <= x && #min(x, y) <= y);
+
+axiom (forall x: int, y: int :: { #max(x, y) } (#max(x, y) == x || #max(x, y) == y) && x <= #max(x, y) && y <= #max(x, y));
+
+function #System.String.IsInterned$System.String$notnull(Heap, ref) returns (ref);
+
+function #System.String.Equals$System.String(Heap, ref, ref) returns (bool);
+
+function #System.String.Equals$System.String$System.String(Heap, ref, ref) returns (bool);
+
+function ##StringEquals(ref, ref) returns (bool);
+
+axiom (forall h: Heap, a: ref, b: ref :: { #System.String.Equals$System.String(h, a, b) } #System.String.Equals$System.String(h, a, b) == #System.String.Equals$System.String$System.String(h, a, b));
+
+axiom (forall h: Heap, a: ref, b: ref :: { #System.String.Equals$System.String$System.String(h, a, b) } #System.String.Equals$System.String$System.String(h, a, b) == ##StringEquals(a, b) && #System.String.Equals$System.String$System.String(h, a, b) == ##StringEquals(b, a) && (a == b ==> ##StringEquals(a, b)));
+
+axiom (forall a: ref, b: ref, c: ref :: ##StringEquals(a, b) && ##StringEquals(b, c) ==> ##StringEquals(a, c));
+
+axiom (forall h: Heap, a: ref, b: ref :: { #System.String.Equals$System.String$System.String(h, a, b) } a != null && b != null && #System.String.Equals$System.String$System.String(h, a, b) ==> #System.String.IsInterned$System.String$notnull(h, a) == #System.String.IsInterned$System.String$notnull(h, b));
+
+const $UnknownRef: ref;
+
+const unique Bag.a: Field ref;
+
+const unique Bag.n: Field int;
+
+const unique Microsoft.Contracts.GuardException: name;
+
+const unique System.ICloneable: name;
+
+const unique Microsoft.Contracts.ObjectInvariantException: name;
+
+const unique System.Exception: name;
+
+const unique System.Collections.IEnumerable: name;
+
+const unique System.Collections.IList: name;
+
+const unique Microsoft.Contracts.ICheckedException: name;
+
+const unique System.Reflection.MemberInfo: name;
+
+const unique Bag: name;
+
+const unique System.Reflection.IReflect: name;
+
+const unique System.Runtime.InteropServices._MemberInfo: name;
+
+const unique System.Runtime.InteropServices._Type: name;
+
+const unique System.Collections.ICollection: name;
+
+const unique System.Runtime.InteropServices._Exception: name;
+
+const unique System.Runtime.Serialization.ISerializable: name;
+
+const unique System.Reflection.ICustomAttributeProvider: name;
+
+axiom !IsStaticField(Bag.n);
+
+axiom IncludeInMainFrameCondition(Bag.n);
+
+axiom $IncludedInModifiesStar(Bag.n);
+
+axiom DeclType222(Bag.n) == Bag;
+
+axiom AsRangeField(Bag.n, System.Int32) == Bag.n;
+
+axiom !IsStaticField(Bag.a);
+
+axiom IncludeInMainFrameCondition(Bag.a);
+
+axiom $IncludedInModifiesStar(Bag.a);
+
+axiom AsRepField(Bag.a, Bag) == Bag.a;
+
+axiom DeclType222(Bag.a) == Bag;
+
+axiom AsNonNullRefField(Bag.a, IntArray(System.Int32, 1)) == Bag.a;
+
+axiom Bag <: Bag;
+
+axiom $BaseClass(Bag) == System.Object && AsDirectSubClass(Bag, $BaseClass(Bag)) == Bag;
+
+axiom !$IsImmutable(Bag) && $AsMutable(Bag) == Bag;
+
+axiom System.Array <: System.Array;
+
+axiom $BaseClass(System.Array) == System.Object && AsDirectSubClass(System.Array, $BaseClass(System.Array)) == System.Array;
+
+axiom !$IsImmutable(System.Array) && $AsMutable(System.Array) == System.Array;
+
+axiom System.ICloneable <: System.ICloneable;
+
+axiom System.ICloneable <: System.Object;
+
+axiom $IsMemberlessType(System.ICloneable);
+
+axiom $AsInterface(System.ICloneable) == System.ICloneable;
+
+axiom System.Array <: System.ICloneable;
+
+axiom System.Collections.IList <: System.Collections.IList;
+
+axiom System.Collections.IList <: System.Object;
+
+axiom System.Collections.ICollection <: System.Collections.ICollection;
+
+axiom System.Collections.ICollection <: System.Object;
+
+axiom System.Collections.IEnumerable <: System.Collections.IEnumerable;
+
+axiom System.Collections.IEnumerable <: System.Object;
+
+axiom $IsMemberlessType(System.Collections.IEnumerable);
+
+axiom $AsInterface(System.Collections.IEnumerable) == System.Collections.IEnumerable;
+
+axiom System.Collections.ICollection <: System.Collections.IEnumerable;
+
+axiom $IsMemberlessType(System.Collections.ICollection);
+
+axiom $AsInterface(System.Collections.ICollection) == System.Collections.ICollection;
+
+axiom System.Collections.IList <: System.Collections.ICollection;
+
+axiom System.Collections.IList <: System.Collections.IEnumerable;
+
+axiom $IsMemberlessType(System.Collections.IList);
+
+axiom $AsInterface(System.Collections.IList) == System.Collections.IList;
+
+axiom System.Array <: System.Collections.IList;
+
+axiom System.Array <: System.Collections.ICollection;
+
+axiom System.Array <: System.Collections.IEnumerable;
+
+axiom $IsMemberlessType(System.Array);
+
+// System.Array object invariant
+axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Array } IsHeap($h) && $h[$oi, $inv] <: System.Array && $h[$oi, $localinv] != $BaseClass(System.Array) ==> true);
+
+// Bag object invariant
+axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: Bag } IsHeap($h) && $h[$oi, $inv] <: Bag && $h[$oi, $localinv] != $BaseClass(Bag) ==> 0 <= $h[$oi, Bag.n] && $h[$oi, Bag.n] <= $Length($h[$oi, Bag.a]));
+
+procedure Bag.SpecSharp.CheckInvariant$System.Boolean(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], throwException$in: bool where true) returns ($result: bool where true);
+ // user-declared preconditions
+ requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this) && (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == this && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
+ free requires $BeingConstructed == null;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != this || !($typeof(this) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Bag.SpecSharp.CheckInvariant$System.Boolean(this: ref, throwException$in: bool) returns ($result: bool)
+{
+ var throwException: bool where true, stack0i: int, stack1i: int, stack0b: bool, stack1o: ref, return.value: bool where true, stack50000o: ref, stack0o: ref, SS$Display.Return.Local: bool where true;
+
+ entry:
+ throwException := throwException$in;
+ goto block2380;
+
+ block2380:
+ goto block2482;
+
+ block2482:
+ // ----- nop
+ // ----- load constant 0
+ stack0i := 0;
+ // ----- load field
+ assert this != null;
+ stack1i := $Heap[this, Bag.n];
+ // ----- binary operator
+ // ----- branch
+ goto true2482to2550, false2482to2414;
+
+ true2482to2550:
+ assume stack0i > stack1i;
+ goto block2550;
+
+ false2482to2414:
+ assume stack0i <= stack1i;
+ goto block2414;
+
+ block2550:
+ // ----- copy
+ stack0b := throwException;
+ // ----- unary operator
+ // ----- branch
+ goto true2550to2584, false2550to2601;
+
+ block2414:
+ // ----- load field
+ assert this != null;
+ stack0i := $Heap[this, Bag.n];
+ // ----- load field
+ assert this != null;
+ stack1o := $Heap[this, Bag.a];
+ // ----- unary operator
+ assert stack1o != null;
+ stack1i := $Length(stack1o);
+ // ----- unary operator
+ stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
+ // ----- binary operator
+ // ----- branch
+ goto true2414to2550, false2414to2465;
+
+ true2414to2550:
+ assume stack0i > stack1i;
+ goto block2550;
+
+ false2414to2465:
+ assume stack0i <= stack1i;
+ goto block2465;
+
+ block2465:
+ // ----- branch
+ goto block2448;
+
+ true2550to2584:
+ assume !stack0b;
+ goto block2584;
+
+ false2550to2601:
+ assume stack0b;
+ goto block2601;
+
+ block2584:
+ // ----- load constant 0
+ return.value := false;
+ // ----- branch
+ goto block2567;
+
+ block2601:
+ assume false;
+ // ----- new object
+ havoc stack50000o;
+ assume $Heap[stack50000o, $allocated] == false && stack50000o != null && $typeof(stack50000o) == Microsoft.Contracts.ObjectInvariantException;
+ assume $Heap[stack50000o, $ownerRef] == stack50000o && $Heap[stack50000o, $ownerFrame] == $PeerGroupPlaceholder;
+ // ----- call
+ assert stack50000o != null;
+ call Microsoft.Contracts.ObjectInvariantException..ctor(stack50000o);
+ // ----- copy
+ stack0o := stack50000o;
+ // ----- throw
+ assert stack0o != null;
+ assume false;
+ return;
+
+ block2448:
+ // ----- load constant 1
+ return.value := true;
+ // ----- branch
+ goto block2567;
+
+ block2567:
+ // ----- copy
+ SS$Display.Return.Local := return.value;
+ // ----- copy
+ stack0b := return.value;
+ // ----- return
+ $result := stack0b;
+ return;
+}
+
+
+
+axiom Microsoft.Contracts.ObjectInvariantException <: Microsoft.Contracts.ObjectInvariantException;
+
+axiom Microsoft.Contracts.GuardException <: Microsoft.Contracts.GuardException;
+
+axiom System.Exception <: System.Exception;
+
+axiom $BaseClass(System.Exception) == System.Object && AsDirectSubClass(System.Exception, $BaseClass(System.Exception)) == System.Exception;
+
+axiom !$IsImmutable(System.Exception) && $AsMutable(System.Exception) == System.Exception;
+
+axiom System.Runtime.Serialization.ISerializable <: System.Runtime.Serialization.ISerializable;
+
+axiom System.Runtime.Serialization.ISerializable <: System.Object;
+
+axiom $IsMemberlessType(System.Runtime.Serialization.ISerializable);
+
+axiom $AsInterface(System.Runtime.Serialization.ISerializable) == System.Runtime.Serialization.ISerializable;
+
+axiom System.Exception <: System.Runtime.Serialization.ISerializable;
+
+axiom System.Runtime.InteropServices._Exception <: System.Runtime.InteropServices._Exception;
+
+axiom System.Runtime.InteropServices._Exception <: System.Object;
+
+axiom $IsMemberlessType(System.Runtime.InteropServices._Exception);
+
+axiom $AsInterface(System.Runtime.InteropServices._Exception) == System.Runtime.InteropServices._Exception;
+
+axiom System.Exception <: System.Runtime.InteropServices._Exception;
+
+// System.Exception object invariant
+axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Exception } IsHeap($h) && $h[$oi, $inv] <: System.Exception && $h[$oi, $localinv] != $BaseClass(System.Exception) ==> true);
+
+axiom $BaseClass(Microsoft.Contracts.GuardException) == System.Exception && AsDirectSubClass(Microsoft.Contracts.GuardException, $BaseClass(Microsoft.Contracts.GuardException)) == Microsoft.Contracts.GuardException;
+
+axiom !$IsImmutable(Microsoft.Contracts.GuardException) && $AsMutable(Microsoft.Contracts.GuardException) == Microsoft.Contracts.GuardException;
+
+// Microsoft.Contracts.GuardException object invariant
+axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: Microsoft.Contracts.GuardException } IsHeap($h) && $h[$oi, $inv] <: Microsoft.Contracts.GuardException && $h[$oi, $localinv] != $BaseClass(Microsoft.Contracts.GuardException) ==> true);
+
+axiom $BaseClass(Microsoft.Contracts.ObjectInvariantException) == Microsoft.Contracts.GuardException && AsDirectSubClass(Microsoft.Contracts.ObjectInvariantException, $BaseClass(Microsoft.Contracts.ObjectInvariantException)) == Microsoft.Contracts.ObjectInvariantException;
+
+axiom !$IsImmutable(Microsoft.Contracts.ObjectInvariantException) && $AsMutable(Microsoft.Contracts.ObjectInvariantException) == Microsoft.Contracts.ObjectInvariantException;
+
+// Microsoft.Contracts.ObjectInvariantException object invariant
+axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: Microsoft.Contracts.ObjectInvariantException } IsHeap($h) && $h[$oi, $inv] <: Microsoft.Contracts.ObjectInvariantException && $h[$oi, $localinv] != $BaseClass(Microsoft.Contracts.ObjectInvariantException) ==> true);
+
+procedure Microsoft.Contracts.ObjectInvariantException..ctor(this: ref where $IsNotNull(this, Microsoft.Contracts.ObjectInvariantException) && $Heap[this, $allocated]);
+ // object is fully unpacked: this.inv == Object
+ free requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
+ // nothing is owned by [this,*] and 'this' is alone in its own peer group
+ free requires (forall $o: ref :: $o != this ==> $Heap[$o, $ownerRef] != this) && $Heap[this, $ownerRef] == this && $Heap[this, $ownerFrame] == $PeerGroupPlaceholder;
+ free requires $BeingConstructed == this;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // target object is allocated upon return
+ free ensures $Heap[this, $allocated];
+ // target object is additively exposable for Microsoft.Contracts.ObjectInvariantException
+ ensures ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == Microsoft.Contracts.ObjectInvariantException && $Heap[this, $localinv] == $typeof(this);
+ ensures $Heap[this, $ownerRef] == old($Heap)[this, $ownerRef] && $Heap[this, $ownerFrame] == old($Heap)[this, $ownerFrame];
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && ($o != this || !(Microsoft.Contracts.ObjectInvariantException <: DeclType222($f))) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] && $o != this ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Bag..ctor$System.Int32.array$notnull(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], initialElements$in: ref where $IsNotNull(initialElements$in, IntArray(System.Int32, 1)) && $Heap[initialElements$in, $allocated]);
+ // object is fully unpacked: this.inv == Object
+ free requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
+ // initialElements is peer consistent
+ requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[initialElements$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[initialElements$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ // initialElements is peer consistent (owner must not be valid)
+ requires $Heap[initialElements$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[initialElements$in, $ownerRef], $inv] <: $Heap[initialElements$in, $ownerFrame]) || $Heap[$Heap[initialElements$in, $ownerRef], $localinv] == $BaseClass($Heap[initialElements$in, $ownerFrame]);
+ // nothing is owned by [this,*] and 'this' is alone in its own peer group
+ free requires (forall $o: ref :: $o != this ==> $Heap[$o, $ownerRef] != this) && $Heap[this, $ownerRef] == this && $Heap[this, $ownerFrame] == $PeerGroupPlaceholder;
+ free requires $BeingConstructed == this;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // target object is allocated upon return
+ free ensures $Heap[this, $allocated];
+ // target object is additively exposable for Bag
+ ensures ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == Bag && $Heap[this, $localinv] == $typeof(this);
+ ensures $Heap[this, $ownerRef] == old($Heap)[this, $ownerRef] && $Heap[this, $ownerFrame] == old($Heap)[this, $ownerFrame];
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && ($o != this || !(Bag <: DeclType222($f))) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] && $o != this ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Bag..ctor$System.Int32.array$notnull(this: ref, initialElements$in: ref)
+{
+ var initialElements: ref where $IsNotNull(initialElements, IntArray(System.Int32, 1)) && $Heap[initialElements, $allocated], stack0o: ref, stack0i: int, temp0: exposeVersionType, temp1: ref, temp2: exposeVersionType, stack1i: int, temp3: ref;
+
+ entry:
+ initialElements := initialElements$in;
+ assume $Heap[this, Bag.n] == 0;
+ goto block3332;
+
+ block3332:
+ goto block3468;
+
+ block3468:
+ // ----- nop
+ // ----- copy ----- AddMethod.ssc(13,5)
+ stack0o := initialElements;
+ // ----- unary operator ----- AddMethod.ssc(13,5)
+ assert stack0o != null;
+ stack0i := $Length(stack0o);
+ // ----- unary operator ----- AddMethod.ssc(13,5)
+ stack0i := $IntToInt(stack0i, System.UIntPtr, System.Int32);
+ // ----- store field ----- AddMethod.ssc(13,5)
+ assert this != null;
+ assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ havoc temp0;
+ $Heap[this, $exposeVersion] := temp0;
+ $Heap[this, Bag.n] := stack0i;
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
+ assume IsHeap($Heap);
+ // ----- copy ----- AddMethod.ssc(14,5)
+ stack0o := initialElements;
+ // ----- unary operator ----- AddMethod.ssc(14,5)
+ assert stack0o != null;
+ stack0i := $Length(stack0o);
+ // ----- unary operator ----- AddMethod.ssc(14,5)
+ stack0i := $IntToInt(stack0i, System.UIntPtr, System.Int32);
+ // ----- new array ----- AddMethod.ssc(14,5)
+ assert 0 <= stack0i;
+ havoc temp1;
+ assume $Heap[temp1, $allocated] == false && $Length(temp1) == stack0i;
+ assume $Heap[$ElementProxy(temp1, -1), $allocated] == false && $ElementProxy(temp1, -1) != temp1 && $ElementProxy(temp1, -1) != null;
+ assume temp1 != null;
+ assume $typeof(temp1) == IntArray(System.Int32, 1);
+ assume $Heap[temp1, $ownerRef] == temp1 && $Heap[temp1, $ownerFrame] == $PeerGroupPlaceholder;
+ assume $Heap[$ElementProxy(temp1, -1), $ownerRef] == $ElementProxy(temp1, -1) && $Heap[$ElementProxy(temp1, -1), $ownerFrame] == $PeerGroupPlaceholder;
+ assume $Heap[temp1, $inv] == $typeof(temp1) && $Heap[temp1, $localinv] == $typeof(temp1);
+ assume (forall $i: int :: IntArrayGet($Heap[temp1, $elements], $i) == 0);
+ $Heap[temp1, $allocated] := true;
+ call System.Object..ctor($ElementProxy(temp1, -1));
+ stack0o := temp1;
+ assume IsHeap($Heap);
+ // ----- store field ----- AddMethod.ssc(14,5)
+ assert this != null;
+ assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ assert ($Heap[stack0o, $ownerRef] == this && $Heap[stack0o, $ownerFrame] == Bag) || $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder;
+ assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[stack0o, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[stack0o, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> $Heap[this, $ownerRef] != $Heap[stack0o, $ownerRef] || $Heap[this, $ownerFrame] != $Heap[stack0o, $ownerFrame];
+ call $UpdateOwnersForRep(this, Bag, stack0o);
+ havoc temp2;
+ $Heap[this, $exposeVersion] := temp2;
+ $Heap[this, Bag.a] := stack0o;
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
+ assume IsHeap($Heap);
+ // ----- call ----- AddMethod.ssc(15,5)
+ assert this != null;
+ call System.Object..ctor(this);
+ $Heap[this, $NonNullFieldsAreInitialized] := true;
+ assume IsHeap($Heap);
+ goto block3417;
+
+ block3417:
+ // ----- load field ----- AddMethod.ssc(16,5)
+ assert this != null;
+ stack0o := $Heap[this, Bag.a];
+ // ----- load constant 0 ----- AddMethod.ssc(16,5)
+ stack1i := 0;
+ // ----- call ----- AddMethod.ssc(16,5)
+ assert initialElements != null;
+ call System.Array.CopyTo$System.Array$notnull$System.Int32$.Virtual.$(initialElements, stack0o, stack1i);
+ // ----- FrameGuard processing ----- AddMethod.ssc(17,3)
+ temp3 := this;
+ // ----- classic pack ----- AddMethod.ssc(17,3)
+ assert temp3 != null;
+ assert $Heap[temp3, $inv] == System.Object && $Heap[temp3, $localinv] == $typeof(temp3);
+ assert 0 <= $Heap[temp3, Bag.n];
+ assert $Heap[temp3, Bag.n] <= $Length($Heap[temp3, Bag.a]);
+ assert (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == temp3 && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
+ $Heap[temp3, $inv] := Bag;
+ assume IsHeap($Heap);
+ // ----- return
+ return;
+}
+
+
+
+procedure System.Object..ctor(this: ref where $IsNotNull(this, System.Object) && $Heap[this, $allocated]);
+ // object is fully unpacked: this.inv == Object
+ free requires ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
+ // nothing is owned by [this,*] and 'this' is alone in its own peer group
+ free requires (forall $o: ref :: $o != this ==> $Heap[$o, $ownerRef] != this) && $Heap[this, $ownerRef] == this && $Heap[this, $ownerFrame] == $PeerGroupPlaceholder;
+ free requires $BeingConstructed == this;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // target object is allocated upon return
+ free ensures $Heap[this, $allocated];
+ // target object is additively exposable for System.Object
+ ensures ($Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame])) && $Heap[this, $inv] == System.Object && $Heap[this, $localinv] == $typeof(this);
+ ensures $Heap[this, $ownerRef] == old($Heap)[this, $ownerRef] && $Heap[this, $ownerFrame] == old($Heap)[this, $ownerFrame];
+ ensures $Heap[this, $sharingMode] == $SharingMode_Unshared;
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && ($o != this || !(System.Object <: DeclType222($f))) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] && $o != this ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } $o == this || old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure System.Array.CopyTo$System.Array$notnull$System.Int32$.Virtual.$(this: ref where $IsNotNull(this, System.Array) && $Heap[this, $allocated], array$in: ref where $IsNotNull(array$in, System.Array) && $Heap[array$in, $allocated], index$in: int where InRange(index$in, System.Int32));
+ // user-declared preconditions
+ requires array$in != null;
+ requires $LBound(array$in, 0) <= index$in;
+ requires $Rank(this) == 1;
+ requires $Rank(array$in) == 1;
+ requires $Length(this) <= $UBound(array$in, 0) + 1 - index$in;
+ // target object is peer consistent
+ requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[this, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[this, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ // target object is peer consistent (owner must not be valid)
+ requires $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ // array is peer consistent
+ requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[array$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[array$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ // array is peer consistent (owner must not be valid)
+ requires $Heap[array$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[array$in, $ownerRef], $inv] <: $Heap[array$in, $ownerFrame]) || $Heap[$Heap[array$in, $ownerRef], $localinv] == $BaseClass($Heap[array$in, $ownerFrame]);
+ free requires $BeingConstructed == null;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // hard-coded postcondition
+ ensures (forall $k: int :: { ValueArrayGet($Heap[array$in, $elements], $k) } (index$in <= $k && $k < index$in + $Length(this) ==> old(ValueArrayGet($Heap[this, $elements], $k + 0 - index$in)) == ValueArrayGet($Heap[array$in, $elements], $k)) && (!(index$in <= $k && $k < index$in + $Length(this)) ==> old(ValueArrayGet($Heap[array$in, $elements], $k)) == ValueArrayGet($Heap[array$in, $elements], $k)));
+ ensures (forall $k: int :: { IntArrayGet($Heap[array$in, $elements], $k) } (index$in <= $k && $k < index$in + $Length(this) ==> old(IntArrayGet($Heap[this, $elements], $k + 0 - index$in)) == IntArrayGet($Heap[array$in, $elements], $k)) && (!(index$in <= $k && $k < index$in + $Length(this)) ==> old(IntArrayGet($Heap[array$in, $elements], $k)) == IntArrayGet($Heap[array$in, $elements], $k)));
+ ensures (forall $k: int :: { RefArrayGet($Heap[array$in, $elements], $k) } (index$in <= $k && $k < index$in + $Length(this) ==> old(RefArrayGet($Heap[this, $elements], $k + 0 - index$in)) == RefArrayGet($Heap[array$in, $elements], $k)) && (!(index$in <= $k && $k < index$in + $Length(this)) ==> old(RefArrayGet($Heap[array$in, $elements], $k)) == RefArrayGet($Heap[array$in, $elements], $k)));
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != array$in || !($typeof(array$in) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != array$in || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+procedure Bag.Add$System.Int32(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], x$in: int where InRange(x$in, System.Int32));
+ // target object is peer consistent
+ requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[this, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[this, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ // target object is peer consistent (owner must not be valid)
+ requires $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ free requires $BeingConstructed == null;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != this || !($typeof(this) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != this || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Bag.Add$System.Int32(this: ref, x$in: int)
+{
+ var x: int where InRange(x, System.Int32), temp0: ref, stack1s: struct, stack1o: ref, temp1: exposeVersionType, local2: ref where $Is(local2, System.Exception) && $Heap[local2, $allocated], stack0i: int, stack1i: int, stack0b: bool, b: ref where $Is(b, IntArray(System.Int32, 1)) && $Heap[b, $allocated], temp2: ref, stack0o: ref, stack2o: ref, stack3i: int, stack4o: ref, stack4i: int, temp3: exposeVersionType, local4: int where InRange(local4, System.Int32), temp4: exposeVersionType, stack0s: struct;
+
+ entry:
+ x := x$in;
+ goto block4335;
+
+ block4335:
+ goto block4488;
+
+ block4488:
+ // ----- nop
+ // ----- FrameGuard processing ----- AddMethod.ssc(22,13)
+ temp0 := this;
+ // ----- load token ----- AddMethod.ssc(22,13)
+ havoc stack1s;
+ assume $IsTokenForType(stack1s, Bag);
+ // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(22,13)
+ stack1o := TypeObject(Bag);
+ // ----- local unpack ----- AddMethod.ssc(22,13)
+ assert temp0 != null;
+ assert ($Heap[temp0, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[temp0, $ownerRef], $inv] <: $Heap[temp0, $ownerFrame]) || $Heap[$Heap[temp0, $ownerRef], $localinv] == $BaseClass($Heap[temp0, $ownerFrame])) && $Heap[temp0, $inv] <: Bag && $Heap[temp0, $localinv] == $typeof(temp0);
+ $Heap[temp0, $localinv] := System.Object;
+ havoc temp1;
+ $Heap[temp0, $exposeVersion] := temp1;
+ assume IsHeap($Heap);
+ local2 := null;
+ goto block4505;
+
+ block4505:
+ // ----- load field ----- AddMethod.ssc(24,7)
+ assert this != null;
+ stack0i := $Heap[this, Bag.n];
+ // ----- load field ----- AddMethod.ssc(24,7)
+ assert this != null;
+ stack1o := $Heap[this, Bag.a];
+ // ----- unary operator ----- AddMethod.ssc(24,7)
+ assert stack1o != null;
+ stack1i := $Length(stack1o);
+ // ----- unary operator ----- AddMethod.ssc(24,7)
+ stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
+ // ----- binary operator ----- AddMethod.ssc(24,7)
+ // ----- branch ----- AddMethod.ssc(24,7)
+ goto true4505to4539, false4505to4522;
+
+ true4505to4539:
+ assume stack0i != stack1i;
+ goto block4539;
+
+ false4505to4522:
+ assume stack0i == stack1i;
+ goto block4522;
+
+ block4539:
+ // ----- load field ----- AddMethod.ssc(30,7)
+ assert this != null;
+ stack0o := $Heap[this, Bag.a];
+ // ----- load field ----- AddMethod.ssc(30,7)
+ assert this != null;
+ stack1i := $Heap[this, Bag.n];
+ // ----- store element ----- AddMethod.ssc(30,7)
+ assert stack0o != null;
+ assert 0 <= stack1i;
+ assert stack1i < $Length(stack0o);
+ assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[stack0o, $ownerRef], $inv] <: $Heap[stack0o, $ownerFrame]) || $Heap[$Heap[stack0o, $ownerRef], $localinv] == $BaseClass($Heap[stack0o, $ownerFrame]);
+ $Heap[stack0o, $elements] := IntArraySet($Heap[stack0o, $elements], stack1i, x);
+ assume IsHeap($Heap);
+ // ----- load field ----- AddMethod.ssc(31,7)
+ assert this != null;
+ local4 := $Heap[this, Bag.n];
+ // ----- load constant 1 ----- AddMethod.ssc(31,7)
+ stack0i := 1;
+ // ----- binary operator ----- AddMethod.ssc(31,7)
+ stack0i := local4 + stack0i;
+ // ----- store field ----- AddMethod.ssc(31,7)
+ assert this != null;
+ assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ havoc temp4;
+ $Heap[this, $exposeVersion] := temp4;
+ $Heap[this, Bag.n] := stack0i;
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
+ assume IsHeap($Heap);
+ // ----- copy
+ stack0i := local4;
+ // ----- branch
+ goto block4658;
+
+ block4522:
+ // ----- load constant 2 ----- AddMethod.ssc(26,15)
+ stack0i := 2;
+ // ----- load field ----- AddMethod.ssc(26,15)
+ assert this != null;
+ stack1o := $Heap[this, Bag.a];
+ // ----- unary operator ----- AddMethod.ssc(26,15)
+ assert stack1o != null;
+ stack1i := $Length(stack1o);
+ // ----- unary operator ----- AddMethod.ssc(26,15)
+ stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
+ // ----- binary operator ----- AddMethod.ssc(26,15)
+ stack0i := stack0i * stack1i;
+ // ----- load constant 1 ----- AddMethod.ssc(26,15)
+ stack1i := 1;
+ // ----- binary operator ----- AddMethod.ssc(26,15)
+ stack0i := stack0i + stack1i;
+ // ----- new array ----- AddMethod.ssc(26,15)
+ assert 0 <= stack0i;
+ havoc temp2;
+ assume $Heap[temp2, $allocated] == false && $Length(temp2) == stack0i;
+ assume $Heap[$ElementProxy(temp2, -1), $allocated] == false && $ElementProxy(temp2, -1) != temp2 && $ElementProxy(temp2, -1) != null;
+ assume temp2 != null;
+ assume $typeof(temp2) == IntArray(System.Int32, 1);
+ assume $Heap[temp2, $ownerRef] == temp2 && $Heap[temp2, $ownerFrame] == $PeerGroupPlaceholder;
+ assume $Heap[$ElementProxy(temp2, -1), $ownerRef] == $ElementProxy(temp2, -1) && $Heap[$ElementProxy(temp2, -1), $ownerFrame] == $PeerGroupPlaceholder;
+ assume $Heap[temp2, $inv] == $typeof(temp2) && $Heap[temp2, $localinv] == $typeof(temp2);
+ assume (forall $i: int :: IntArrayGet($Heap[temp2, $elements], $i) == 0);
+ $Heap[temp2, $allocated] := true;
+ call System.Object..ctor($ElementProxy(temp2, -1));
+ b := temp2;
+ assume IsHeap($Heap);
+ // ----- load field ----- AddMethod.ssc(27,9)
+ assert this != null;
+ stack0o := $Heap[this, Bag.a];
+ // ----- load constant 0 ----- AddMethod.ssc(27,9)
+ stack1i := 0;
+ // ----- copy ----- AddMethod.ssc(27,9)
+ stack2o := b;
+ // ----- load constant 0 ----- AddMethod.ssc(27,9)
+ stack3i := 0;
+ // ----- load field ----- AddMethod.ssc(27,9)
+ assert this != null;
+ stack4o := $Heap[this, Bag.a];
+ // ----- unary operator ----- AddMethod.ssc(27,9)
+ assert stack4o != null;
+ stack4i := $Length(stack4o);
+ // ----- unary operator ----- AddMethod.ssc(27,9)
+ stack4i := $IntToInt(stack4i, System.UIntPtr, System.Int32);
+ // ----- call ----- AddMethod.ssc(27,9)
+ call System.Array.Copy$System.Array$notnull$System.Int32$System.Array$notnull$System.Int32$System.Int32(stack0o, stack1i, stack2o, stack3i, stack4i);
+ // ----- store field ----- AddMethod.ssc(28,9)
+ assert this != null;
+ assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ assert ($Heap[b, $ownerRef] == this && $Heap[b, $ownerFrame] == Bag) || $Heap[b, $ownerFrame] == $PeerGroupPlaceholder;
+ assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[b, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[b, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> $Heap[this, $ownerRef] != $Heap[b, $ownerRef] || $Heap[this, $ownerFrame] != $Heap[b, $ownerFrame];
+ call $UpdateOwnersForRep(this, Bag, b);
+ havoc temp3;
+ $Heap[this, $exposeVersion] := temp3;
+ $Heap[this, Bag.a] := b;
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
+ assume IsHeap($Heap);
+ goto block4539;
+
+ block4658:
+ stack0o := null;
+ // ----- binary operator
+ // ----- branch
+ goto true4658to4624, false4658to4641;
+
+ true4658to4624:
+ assume local2 == stack0o;
+ goto block4624;
+
+ false4658to4641:
+ assume local2 != stack0o;
+ goto block4641;
+
+ block4624:
+ // ----- load token ----- AddMethod.ssc(32,5)
+ havoc stack0s;
+ assume $IsTokenForType(stack0s, Bag);
+ // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(32,5)
+ stack0o := TypeObject(Bag);
+ // ----- local pack ----- AddMethod.ssc(32,5)
+ assert temp0 != null;
+ assert $Heap[temp0, $localinv] == System.Object;
+ assert 0 <= $Heap[temp0, Bag.n];
+ assert $Heap[temp0, Bag.n] <= $Length($Heap[temp0, Bag.a]);
+ assert (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == temp0 && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
+ $Heap[temp0, $localinv] := $typeof(temp0);
+ assume IsHeap($Heap);
+ goto block4726;
+
+ block4641:
+ // ----- is instance
+ // ----- branch
+ goto true4641to4624, false4641to4692;
+
+ true4641to4624:
+ assume $As(local2, Microsoft.Contracts.ICheckedException) != null;
+ goto block4624;
+
+ false4641to4692:
+ assume $As(local2, Microsoft.Contracts.ICheckedException) == null;
+ goto block4692;
+
+ block4692:
+ // ----- branch
+ goto block4726;
+
+ block4726:
+ // ----- nop
+ // ----- branch
+ goto block4590;
+
+ block4590:
+ // ----- return
+ return;
+}
+
+
+
+axiom System.Type <: System.Type;
+
+axiom System.Reflection.MemberInfo <: System.Reflection.MemberInfo;
+
+axiom $BaseClass(System.Reflection.MemberInfo) == System.Object && AsDirectSubClass(System.Reflection.MemberInfo, $BaseClass(System.Reflection.MemberInfo)) == System.Reflection.MemberInfo;
+
+axiom $IsImmutable(System.Reflection.MemberInfo) && $AsImmutable(System.Reflection.MemberInfo) == System.Reflection.MemberInfo;
+
+axiom System.Reflection.ICustomAttributeProvider <: System.Reflection.ICustomAttributeProvider;
+
+axiom System.Reflection.ICustomAttributeProvider <: System.Object;
+
+axiom $IsMemberlessType(System.Reflection.ICustomAttributeProvider);
+
+axiom $AsInterface(System.Reflection.ICustomAttributeProvider) == System.Reflection.ICustomAttributeProvider;
+
+axiom System.Reflection.MemberInfo <: System.Reflection.ICustomAttributeProvider;
+
+axiom System.Runtime.InteropServices._MemberInfo <: System.Runtime.InteropServices._MemberInfo;
+
+axiom System.Runtime.InteropServices._MemberInfo <: System.Object;
+
+axiom $IsMemberlessType(System.Runtime.InteropServices._MemberInfo);
+
+axiom $AsInterface(System.Runtime.InteropServices._MemberInfo) == System.Runtime.InteropServices._MemberInfo;
+
+axiom System.Reflection.MemberInfo <: System.Runtime.InteropServices._MemberInfo;
+
+axiom $IsMemberlessType(System.Reflection.MemberInfo);
+
+// System.Reflection.MemberInfo object invariant
+axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Reflection.MemberInfo } IsHeap($h) && $h[$oi, $inv] <: System.Reflection.MemberInfo && $h[$oi, $localinv] != $BaseClass(System.Reflection.MemberInfo) ==> true);
+
+axiom $BaseClass(System.Type) == System.Reflection.MemberInfo && AsDirectSubClass(System.Type, $BaseClass(System.Type)) == System.Type;
+
+axiom $IsImmutable(System.Type) && $AsImmutable(System.Type) == System.Type;
+
+axiom System.Runtime.InteropServices._Type <: System.Runtime.InteropServices._Type;
+
+axiom System.Runtime.InteropServices._Type <: System.Object;
+
+axiom $IsMemberlessType(System.Runtime.InteropServices._Type);
+
+axiom $AsInterface(System.Runtime.InteropServices._Type) == System.Runtime.InteropServices._Type;
+
+axiom System.Type <: System.Runtime.InteropServices._Type;
+
+axiom System.Reflection.IReflect <: System.Reflection.IReflect;
+
+axiom System.Reflection.IReflect <: System.Object;
+
+axiom $IsMemberlessType(System.Reflection.IReflect);
+
+axiom $AsInterface(System.Reflection.IReflect) == System.Reflection.IReflect;
+
+axiom System.Type <: System.Reflection.IReflect;
+
+axiom $IsMemberlessType(System.Type);
+
+// System.Type object invariant
+axiom (forall $oi: ref, $h: Heap :: { $h[$oi, $inv] <: System.Type } IsHeap($h) && $h[$oi, $inv] <: System.Type && $h[$oi, $localinv] != $BaseClass(System.Type) ==> true);
+
+procedure System.Array.Copy$System.Array$notnull$System.Int32$System.Array$notnull$System.Int32$System.Int32(sourceArray$in: ref where $IsNotNull(sourceArray$in, System.Array) && $Heap[sourceArray$in, $allocated], sourceIndex$in: int where InRange(sourceIndex$in, System.Int32), destinationArray$in: ref where $IsNotNull(destinationArray$in, System.Array) && $Heap[destinationArray$in, $allocated], destinationIndex$in: int where InRange(destinationIndex$in, System.Int32), length$in: int where InRange(length$in, System.Int32));
+ // user-declared preconditions
+ requires sourceArray$in != null;
+ requires destinationArray$in != null;
+ requires $Rank(sourceArray$in) == $Rank(destinationArray$in);
+ requires sourceIndex$in >= $LBound(sourceArray$in, 0);
+ requires destinationIndex$in >= $LBound(destinationArray$in, 0);
+ requires length$in >= 0;
+ requires sourceIndex$in + length$in <= $LBound(sourceArray$in, 0) + $Length(sourceArray$in);
+ requires destinationIndex$in + length$in <= $LBound(destinationArray$in, 0) + $Length(destinationArray$in);
+ // sourceArray is peer consistent
+ requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[sourceArray$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[sourceArray$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ // sourceArray is peer consistent (owner must not be valid)
+ requires $Heap[sourceArray$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[sourceArray$in, $ownerRef], $inv] <: $Heap[sourceArray$in, $ownerFrame]) || $Heap[$Heap[sourceArray$in, $ownerRef], $localinv] == $BaseClass($Heap[sourceArray$in, $ownerFrame]);
+ // destinationArray is peer consistent
+ requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[destinationArray$in, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[destinationArray$in, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ // destinationArray is peer consistent (owner must not be valid)
+ requires $Heap[destinationArray$in, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[destinationArray$in, $ownerRef], $inv] <: $Heap[destinationArray$in, $ownerFrame]) || $Heap[$Heap[destinationArray$in, $ownerRef], $localinv] == $BaseClass($Heap[destinationArray$in, $ownerFrame]);
+ free requires $BeingConstructed == null;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // hard-coded postcondition
+ ensures (forall $k: int :: { ValueArrayGet($Heap[destinationArray$in, $elements], $k) } (destinationIndex$in <= $k && $k < destinationIndex$in + length$in ==> old(ValueArrayGet($Heap[sourceArray$in, $elements], $k + sourceIndex$in - destinationIndex$in)) == ValueArrayGet($Heap[destinationArray$in, $elements], $k)) && (!(destinationIndex$in <= $k && $k < destinationIndex$in + length$in) ==> old(ValueArrayGet($Heap[destinationArray$in, $elements], $k)) == ValueArrayGet($Heap[destinationArray$in, $elements], $k)));
+ ensures (forall $k: int :: { IntArrayGet($Heap[destinationArray$in, $elements], $k) } (destinationIndex$in <= $k && $k < destinationIndex$in + length$in ==> old(IntArrayGet($Heap[sourceArray$in, $elements], $k + sourceIndex$in - destinationIndex$in)) == IntArrayGet($Heap[destinationArray$in, $elements], $k)) && (!(destinationIndex$in <= $k && $k < destinationIndex$in + length$in) ==> old(IntArrayGet($Heap[destinationArray$in, $elements], $k)) == IntArrayGet($Heap[destinationArray$in, $elements], $k)));
+ ensures (forall $k: int :: { RefArrayGet($Heap[destinationArray$in, $elements], $k) } (destinationIndex$in <= $k && $k < destinationIndex$in + length$in ==> old(RefArrayGet($Heap[sourceArray$in, $elements], $k + sourceIndex$in - destinationIndex$in)) == RefArrayGet($Heap[destinationArray$in, $elements], $k)) && (!(destinationIndex$in <= $k && $k < destinationIndex$in + length$in) ==> old(RefArrayGet($Heap[destinationArray$in, $elements], $k)) == RefArrayGet($Heap[destinationArray$in, $elements], $k)));
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != destinationArray$in || !($typeof(destinationArray$in) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != destinationArray$in || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+axiom Microsoft.Contracts.ICheckedException <: Microsoft.Contracts.ICheckedException;
+
+axiom Microsoft.Contracts.ICheckedException <: System.Object;
+
+axiom $IsMemberlessType(Microsoft.Contracts.ICheckedException);
+
+axiom $AsInterface(Microsoft.Contracts.ICheckedException) == Microsoft.Contracts.ICheckedException;
+
+procedure Bag.AddAgain$System.Int32(this: ref where $IsNotNull(this, Bag) && $Heap[this, $allocated], x$in: int where InRange(x$in, System.Int32));
+ // target object is peer consistent
+ requires (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[this, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[this, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ // target object is peer consistent (owner must not be valid)
+ requires $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ free requires $BeingConstructed == null;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old($o != this || !($typeof(this) <: DeclType222($f)) || !$IncludedInModifiesStar($f)) && old($o != this || $f != $exposeVersion) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Bag.AddAgain$System.Int32(this: ref, x$in: int)
+{
+ var x: int where InRange(x, System.Int32), temp0: ref, stack1s: struct, stack1o: ref, temp1: exposeVersionType, local2: ref where $Is(local2, System.Exception) && $Heap[local2, $allocated], stack0i: int, stack1i: int, stack0b: bool, stack0o: ref, local4: int where InRange(local4, System.Int32), temp2: exposeVersionType, b: ref where $Is(b, IntArray(System.Int32, 1)) && $Heap[b, $allocated], temp3: ref, stack2i: int, temp4: exposeVersionType, stack0s: struct;
+
+ entry:
+ x := x$in;
+ goto block6188;
+
+ block6188:
+ goto block6341;
+
+ block6341:
+ // ----- nop
+ // ----- FrameGuard processing ----- AddMethod.ssc(38,13)
+ temp0 := this;
+ // ----- load token ----- AddMethod.ssc(38,13)
+ havoc stack1s;
+ assume $IsTokenForType(stack1s, Bag);
+ // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(38,13)
+ stack1o := TypeObject(Bag);
+ // ----- local unpack ----- AddMethod.ssc(38,13)
+ assert temp0 != null;
+ assert ($Heap[temp0, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[temp0, $ownerRef], $inv] <: $Heap[temp0, $ownerFrame]) || $Heap[$Heap[temp0, $ownerRef], $localinv] == $BaseClass($Heap[temp0, $ownerFrame])) && $Heap[temp0, $inv] <: Bag && $Heap[temp0, $localinv] == $typeof(temp0);
+ $Heap[temp0, $localinv] := System.Object;
+ havoc temp1;
+ $Heap[temp0, $exposeVersion] := temp1;
+ assume IsHeap($Heap);
+ local2 := null;
+ goto block6358;
+
+ block6358:
+ // ----- load field ----- AddMethod.ssc(40,7)
+ assert this != null;
+ stack0i := $Heap[this, Bag.n];
+ // ----- load field ----- AddMethod.ssc(40,7)
+ assert this != null;
+ stack1o := $Heap[this, Bag.a];
+ // ----- unary operator ----- AddMethod.ssc(40,7)
+ assert stack1o != null;
+ stack1i := $Length(stack1o);
+ // ----- unary operator ----- AddMethod.ssc(40,7)
+ stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
+ // ----- binary operator ----- AddMethod.ssc(40,7)
+ // ----- branch ----- AddMethod.ssc(40,7)
+ goto true6358to6392, false6358to6375;
+
+ true6358to6392:
+ assume stack0i != stack1i;
+ goto block6392;
+
+ false6358to6375:
+ assume stack0i == stack1i;
+ goto block6375;
+
+ block6392:
+ // ----- load field ----- AddMethod.ssc(46,7)
+ assert this != null;
+ stack0o := $Heap[this, Bag.a];
+ // ----- load field ----- AddMethod.ssc(46,7)
+ assert this != null;
+ stack1i := $Heap[this, Bag.n];
+ // ----- store element ----- AddMethod.ssc(46,7)
+ assert stack0o != null;
+ assert 0 <= stack1i;
+ assert stack1i < $Length(stack0o);
+ assert $Heap[stack0o, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[stack0o, $ownerRef], $inv] <: $Heap[stack0o, $ownerFrame]) || $Heap[$Heap[stack0o, $ownerRef], $localinv] == $BaseClass($Heap[stack0o, $ownerFrame]);
+ $Heap[stack0o, $elements] := IntArraySet($Heap[stack0o, $elements], stack1i, x);
+ assume IsHeap($Heap);
+ // ----- load field ----- AddMethod.ssc(47,7)
+ assert this != null;
+ local4 := $Heap[this, Bag.n];
+ // ----- load constant 1 ----- AddMethod.ssc(47,7)
+ stack0i := 1;
+ // ----- binary operator ----- AddMethod.ssc(47,7)
+ stack0i := local4 + stack0i;
+ // ----- store field ----- AddMethod.ssc(47,7)
+ assert this != null;
+ assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ havoc temp2;
+ $Heap[this, $exposeVersion] := temp2;
+ $Heap[this, Bag.n] := stack0i;
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
+ assume IsHeap($Heap);
+ // ----- copy
+ stack0i := local4;
+ // ----- branch
+ goto block6562;
+
+ block6375:
+ // ----- load constant 2 ----- AddMethod.ssc(42,15)
+ stack0i := 2;
+ // ----- load field ----- AddMethod.ssc(42,15)
+ assert this != null;
+ stack1o := $Heap[this, Bag.a];
+ // ----- unary operator ----- AddMethod.ssc(42,15)
+ assert stack1o != null;
+ stack1i := $Length(stack1o);
+ // ----- unary operator ----- AddMethod.ssc(42,15)
+ stack1i := $IntToInt(stack1i, System.UIntPtr, System.Int32);
+ // ----- binary operator ----- AddMethod.ssc(42,15)
+ stack0i := stack0i * stack1i;
+ // ----- load constant 1 ----- AddMethod.ssc(42,15)
+ stack1i := 1;
+ // ----- binary operator ----- AddMethod.ssc(42,15)
+ stack0i := stack0i + stack1i;
+ // ----- new array ----- AddMethod.ssc(42,15)
+ assert 0 <= stack0i;
+ havoc temp3;
+ assume $Heap[temp3, $allocated] == false && $Length(temp3) == stack0i;
+ assume $Heap[$ElementProxy(temp3, -1), $allocated] == false && $ElementProxy(temp3, -1) != temp3 && $ElementProxy(temp3, -1) != null;
+ assume temp3 != null;
+ assume $typeof(temp3) == IntArray(System.Int32, 1);
+ assume $Heap[temp3, $ownerRef] == temp3 && $Heap[temp3, $ownerFrame] == $PeerGroupPlaceholder;
+ assume $Heap[$ElementProxy(temp3, -1), $ownerRef] == $ElementProxy(temp3, -1) && $Heap[$ElementProxy(temp3, -1), $ownerFrame] == $PeerGroupPlaceholder;
+ assume $Heap[temp3, $inv] == $typeof(temp3) && $Heap[temp3, $localinv] == $typeof(temp3);
+ assume (forall $i: int :: IntArrayGet($Heap[temp3, $elements], $i) == 0);
+ $Heap[temp3, $allocated] := true;
+ call System.Object..ctor($ElementProxy(temp3, -1));
+ b := temp3;
+ assume IsHeap($Heap);
+ // ----- load field ----- AddMethod.ssc(43,9)
+ assert this != null;
+ stack0o := $Heap[this, Bag.a];
+ // ----- copy ----- AddMethod.ssc(43,9)
+ stack1o := b;
+ // ----- load constant 0 ----- AddMethod.ssc(43,9)
+ stack2i := 0;
+ // ----- call ----- AddMethod.ssc(43,9)
+ assert stack0o != null;
+ call System.Array.CopyTo$System.Array$notnull$System.Int32$.Virtual.$(stack0o, stack1o, stack2i);
+ // ----- store field ----- AddMethod.ssc(44,9)
+ assert this != null;
+ assert $Heap[this, $ownerFrame] == $PeerGroupPlaceholder || !($Heap[$Heap[this, $ownerRef], $inv] <: $Heap[this, $ownerFrame]) || $Heap[$Heap[this, $ownerRef], $localinv] == $BaseClass($Heap[this, $ownerFrame]);
+ assert ($Heap[b, $ownerRef] == this && $Heap[b, $ownerFrame] == Bag) || $Heap[b, $ownerFrame] == $PeerGroupPlaceholder;
+ assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> (forall $pc: ref :: { $typeof($pc) } { $Heap[$pc, $localinv] } { $Heap[$pc, $inv] } { $Heap[$pc, $ownerFrame] } { $Heap[$pc, $ownerRef] } $pc != null && $Heap[$pc, $allocated] && $Heap[$pc, $ownerRef] == $Heap[b, $ownerRef] && $Heap[$pc, $ownerFrame] == $Heap[b, $ownerFrame] ==> $Heap[$pc, $inv] == $typeof($pc) && $Heap[$pc, $localinv] == $typeof($pc));
+ assert $Heap[b, $ownerFrame] == $PeerGroupPlaceholder && $Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag) ==> $Heap[this, $ownerRef] != $Heap[b, $ownerRef] || $Heap[this, $ownerFrame] != $Heap[b, $ownerFrame];
+ call $UpdateOwnersForRep(this, Bag, b);
+ havoc temp4;
+ $Heap[this, $exposeVersion] := temp4;
+ $Heap[this, Bag.a] := b;
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || 0 <= $Heap[this, Bag.n];
+ assert !($Heap[this, $inv] <: Bag && $Heap[this, $localinv] != $BaseClass(Bag)) || $Heap[this, Bag.n] <= $Length($Heap[this, Bag.a]);
+ assume IsHeap($Heap);
+ goto block6392;
+
+ block6562:
+ stack0o := null;
+ // ----- binary operator
+ // ----- branch
+ goto true6562to6477, false6562to6579;
+
+ true6562to6477:
+ assume local2 == stack0o;
+ goto block6477;
+
+ false6562to6579:
+ assume local2 != stack0o;
+ goto block6579;
+
+ block6477:
+ // ----- load token ----- AddMethod.ssc(48,5)
+ havoc stack0s;
+ assume $IsTokenForType(stack0s, Bag);
+ // ----- statically resolved GetTypeFromHandle call ----- AddMethod.ssc(48,5)
+ stack0o := TypeObject(Bag);
+ // ----- local pack ----- AddMethod.ssc(48,5)
+ assert temp0 != null;
+ assert $Heap[temp0, $localinv] == System.Object;
+ assert 0 <= $Heap[temp0, Bag.n];
+ assert $Heap[temp0, Bag.n] <= $Length($Heap[temp0, Bag.a]);
+ assert (forall $p: ref :: $p != null && $Heap[$p, $allocated] && $Heap[$p, $ownerRef] == temp0 && $Heap[$p, $ownerFrame] == Bag ==> $Heap[$p, $inv] == $typeof($p) && $Heap[$p, $localinv] == $typeof($p));
+ $Heap[temp0, $localinv] := $typeof(temp0);
+ assume IsHeap($Heap);
+ goto block6545;
+
+ block6579:
+ // ----- is instance
+ // ----- branch
+ goto true6579to6477, false6579to6528;
+
+ true6579to6477:
+ assume $As(local2, Microsoft.Contracts.ICheckedException) != null;
+ goto block6477;
+
+ false6579to6528:
+ assume $As(local2, Microsoft.Contracts.ICheckedException) == null;
+ goto block6528;
+
+ block6528:
+ // ----- branch
+ goto block6545;
+
+ block6545:
+ // ----- nop
+ // ----- branch
+ goto block6443;
+
+ block6443:
+ // ----- return
+ return;
+}
+
+
+
+procedure Bag..cctor();
+ free requires $BeingConstructed == null;
+ free requires $PurityAxiomsCanBeAssumed;
+ modifies $Heap, $ActivityIndicator;
+ // newly allocated objects are fully valid
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } $o != null && !old($Heap)[$o, $allocated] && $Heap[$o, $allocated] ==> $Heap[$o, $inv] == $typeof($o) && $Heap[$o, $localinv] == $typeof($o));
+ // first consistent owner unchanged if its exposeVersion is
+ free ensures (forall $o: ref :: { $Heap[$o, $FirstConsistentOwner] } old($Heap)[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] == $Heap[old($Heap)[$o, $FirstConsistentOwner], $exposeVersion] ==> old($Heap)[$o, $FirstConsistentOwner] == $Heap[$o, $FirstConsistentOwner]);
+ // frame condition
+ ensures (forall<a> $o: ref, $f: Field a :: { $Heap[$o, $f] } IncludeInMainFrameCondition($f) && $o != null && old($Heap)[$o, $allocated] && (old($Heap)[$o, $ownerFrame] == $PeerGroupPlaceholder || !(old($Heap)[old($Heap)[$o, $ownerRef], $inv] <: old($Heap)[$o, $ownerFrame]) || old($Heap)[old($Heap)[$o, $ownerRef], $localinv] == $BaseClass(old($Heap)[$o, $ownerFrame])) && old(true) && old(true) ==> old($Heap)[$o, $f] == $Heap[$o, $f]);
+ free ensures $HeapSucc(old($Heap), $Heap);
+ // inv/localinv change only in blocks
+ free ensures (forall $o: ref :: { $Heap[$o, $localinv] } { $Heap[$o, $inv] } old($Heap)[$o, $allocated] ==> old($Heap)[$o, $inv] == $Heap[$o, $inv] && old($Heap)[$o, $localinv] == $Heap[$o, $localinv]);
+ free ensures (forall $o: ref :: { $Heap[$o, $allocated] } old($Heap)[$o, $allocated] ==> $Heap[$o, $allocated]) && (forall $ot: ref :: { $Heap[$ot, $ownerFrame] } { $Heap[$ot, $ownerRef] } old($Heap)[$ot, $allocated] && old($Heap)[$ot, $ownerFrame] != $PeerGroupPlaceholder ==> $Heap[$ot, $ownerRef] == old($Heap)[$ot, $ownerRef] && $Heap[$ot, $ownerFrame] == old($Heap)[$ot, $ownerFrame]) && old($Heap)[$BeingConstructed, $NonNullFieldsAreInitialized] == $Heap[$BeingConstructed, $NonNullFieldsAreInitialized];
+ free ensures (forall $o: ref :: { $Heap[$o, $sharingMode] } old($Heap[$o, $sharingMode]) == $Heap[$o, $sharingMode]);
+
+
+
+implementation Bag..cctor()
+{
+
+ entry:
+ goto block7650;
+
+ block7650:
+ goto block7701;
+
+ block7701:
+ // ----- nop
+ // ----- return
+ return;
+}
+
+
diff --git a/Test/test7/MultipleErrors.bpl b/Test/test7/MultipleErrors.bpl
index 6f5944fc..8d07841a 100644
--- a/Test/test7/MultipleErrors.bpl
+++ b/Test/test7/MultipleErrors.bpl
@@ -1,38 +1,38 @@
-// RUN: %boogie -vc:block -errorLimit:1 -errorTrace:1 -logPrefix:-1block "%s" > "%t1"
-// RUN: %diff "%s.e1.block.expect" "%t1"
-// RUN: %boogie -vc:local -errorLimit:1 -errorTrace:1 -logPrefix:-1local "%s" > "%t2"
-// RUN: %diff "%s.e1.local.expect" "%t2"
-// RUN: %boogie -vc:dag -errorLimit:1 -errorTrace:1 -logPrefix:-1dag "%s" > "%t3"
-// RUN: %diff "%s.e1.dag.expect" "%t3"
-// RUN: %boogie -vc:local -errorLimit:10 -errorTrace:1 -logPrefix:-10local "%s" > "%t4"
-// RUN: %diff "%s.e10.local.expect" "%t4"
-// RUN: %boogie -vc:dag -errorLimit:10 -errorTrace:1 -logPrefix:-10dag "%s" > "%t5"
-// RUN: %diff "%s.e10.dag.expect" "%t5"
-
-// Author of this comment: mikebarnett ec02177eefb5
-// The following tests are rather fickle at the moment--different errors
-// may be reported during different runs. Moreover, it is conceivable that
-// the error trace would be reported in different orders, since we do not
-// attempt to sort the trace labels at this time.
-// An interesting thing is that /vc:local can with Simplify report more than one
-// error for this file, even with /errorLimit:1. Other than that, only
-// local and dag produce VCs to which Simplify actually produces different
-// counterexamples.
-
-procedure P(x: int)
-{
-start:
- goto A, B;
-
-A:
- assert 0 <= x;
- goto C;
-
-B:
- assert x < 100;
- goto C;
-
-C:
- assert x == 87;
- return;
-}
+// RUN: %boogie -vc:block -errorLimit:1 -errorTrace:1 -logPrefix:-1block "%s" > "%t1"
+// RUN: %diff "%s.e1.block.expect" "%t1"
+// RUN: %boogie -vc:local -errorLimit:1 -errorTrace:1 -logPrefix:-1local "%s" > "%t2"
+// RUN: %diff "%s.e1.local.expect" "%t2"
+// RUN: %boogie -vc:dag -errorLimit:1 -errorTrace:1 -logPrefix:-1dag "%s" > "%t3"
+// RUN: %diff "%s.e1.dag.expect" "%t3"
+// RUN: %boogie -vc:local -errorLimit:10 -errorTrace:1 -logPrefix:-10local "%s" > "%t4"
+// RUN: %diff "%s.e10.local.expect" "%t4"
+// RUN: %boogie -vc:dag -errorLimit:10 -errorTrace:1 -logPrefix:-10dag "%s" > "%t5"
+// RUN: %diff "%s.e10.dag.expect" "%t5"
+
+// Author of this comment: mikebarnett ec02177eefb5
+// The following tests are rather fickle at the moment--different errors
+// may be reported during different runs. Moreover, it is conceivable that
+// the error trace would be reported in different orders, since we do not
+// attempt to sort the trace labels at this time.
+// An interesting thing is that /vc:local can with Simplify report more than one
+// error for this file, even with /errorLimit:1. Other than that, only
+// local and dag produce VCs to which Simplify actually produces different
+// counterexamples.
+
+procedure P(x: int)
+{
+start:
+ goto A, B;
+
+A:
+ assert 0 <= x;
+ goto C;
+
+B:
+ assert x < 100;
+ goto C;
+
+C:
+ assert x == 87;
+ return;
+}
diff --git a/Test/test7/NestedVC.bpl b/Test/test7/NestedVC.bpl
index 6865be93..4fd22d22 100644
--- a/Test/test7/NestedVC.bpl
+++ b/Test/test7/NestedVC.bpl
@@ -1,23 +1,23 @@
-// RUN: %boogie -vc:nested "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-procedure P()
-{
-A: goto B, C;
-B: goto G;
-C: goto D, E;
-D: goto F;
-E: goto F;
-F: goto G;
-G: return;
-}
-
-procedure Q(x: bool)
-{
-A: goto B, C;
-B: assert x; goto G;
-C: goto D, E;
-D: goto F;
-E: goto F;
-F: goto G;
-G: return;
-}
+// RUN: %boogie -vc:nested "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+procedure P()
+{
+A: goto B, C;
+B: goto G;
+C: goto D, E;
+D: goto F;
+E: goto F;
+F: goto G;
+G: return;
+}
+
+procedure Q(x: bool)
+{
+A: goto B, C;
+B: assert x; goto G;
+C: goto D, E;
+D: goto F;
+E: goto F;
+F: goto G;
+G: return;
+}
diff --git a/Test/test7/UnreachableBlocks.bpl b/Test/test7/UnreachableBlocks.bpl
index 95c35029..90f0b0cb 100644
--- a/Test/test7/UnreachableBlocks.bpl
+++ b/Test/test7/UnreachableBlocks.bpl
@@ -1,42 +1,42 @@
-// RUN: %boogie -vc:nested "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// In the following program, block "A" has no dominator, which would cause Boogie
-// to crash if Boogie didn't first remove unreachable blocks. That is essentially
-// what this test tests
-procedure P()
-{
-entry:
- goto A;
-A:
- return;
-B:
- goto A;
-}
-
-procedure Q()
-{
-entry:
- goto entry, A;
-A:
- return;
-}
-
-procedure R()
-{
-entry:
- return;
-A:
- goto A;
-}
-
-procedure S()
-{
-entry:
- return;
-A:
- goto C;
-B:
- goto C;
-C: // C has no dominator
- return;
-}
+// RUN: %boogie -vc:nested "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// In the following program, block "A" has no dominator, which would cause Boogie
+// to crash if Boogie didn't first remove unreachable blocks. That is essentially
+// what this test tests
+procedure P()
+{
+entry:
+ goto A;
+A:
+ return;
+B:
+ goto A;
+}
+
+procedure Q()
+{
+entry:
+ goto entry, A;
+A:
+ return;
+}
+
+procedure R()
+{
+entry:
+ return;
+A:
+ goto A;
+}
+
+procedure S()
+{
+entry:
+ return;
+A:
+ goto C;
+B:
+ goto C;
+C: // C has no dominator
+ return;
+}
diff --git a/Test/textbook/BQueue.bpl b/Test/textbook/BQueue.bpl
index f224334c..3fdc407c 100644
--- a/Test/textbook/BQueue.bpl
+++ b/Test/textbook/BQueue.bpl
@@ -1,432 +1,432 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// BQueue.bpl
-// A queue program specified in the style of dynamic frames.
-// Rustan Leino, Michal Moskal, and Wolfram Schulte, 2007.
-
-// ---------------------------------------------------------------
-
-type ref;
-const null: ref;
-
-type Field x;
-
-// this variable represents the heap; read its type as \forall \alpha. ref * Field \alpha --> \alpha
-type HeapType = <x>[ref, Field x]x;
-var H: HeapType;
-
-// every object has an 'alloc' field, which says whether or not the object has been allocated
-const unique alloc: Field bool;
-
-// for simplicity, we say that every object has one field representing its abstract value and one
-// field representing its footprint (aka frame aka data group).
-
-const unique abstractValue: Field Seq;
-const unique footprint: Field [ref]bool;
-
-// ---------------------------------------------------------------
-
-type T; // the type of the elements of the queue
-const NullT: T; // some value of type T
-
-// ---------------------------------------------------------------
-
-// Queue:
-const unique head: Field ref;
-const unique tail: Field ref;
-const unique mynodes: Field [ref]bool;
-// Node:
-const unique data: Field T;
-const unique next: Field ref;
-
-function ValidQueue(HeapType, ref) returns (bool);
-axiom (forall h: HeapType, q: ref ::
- { ValidQueue(h, q) }
- q != null && h[q,alloc] ==>
- (ValidQueue(h, q) <==>
- h[q,head] != null && h[h[q,head],alloc] &&
- h[q,tail] != null && h[h[q,tail],alloc] &&
- h[h[q,tail], next] == null &&
- // The following line can be suppressed now that we have a ValidFootprint invariant
- (forall o: ref :: { h[q,footprint][o] } o != null && h[q,footprint][o] ==> h[o,alloc]) &&
- h[q,footprint][q] &&
- h[q,mynodes][h[q,head]] && h[q,mynodes][h[q,tail]] &&
- (forall n: ref :: { h[q,mynodes][n] }
- h[q,mynodes][n] ==>
- n != null && h[n,alloc] && ValidNode(h, n) &&
- SubSet(h[n,footprint], h[q,footprint]) &&
- !h[n,footprint][q] &&
- (h[n,next] == null ==> n == h[q,tail])
- ) &&
- (forall n: ref :: { h[n,next] }
- h[q,mynodes][n] ==>
- (h[n,next] != null ==> h[q,mynodes][h[n,next]])
- ) &&
- h[q,abstractValue] == h[h[q,head],abstractValue]
- ));
-
-// frame axiom for ValidQueue
-axiom (forall h0: HeapType, h1: HeapType, n: ref ::
- { ValidQueue(h0,n), ValidQueue(h1,n) }
- (forall<alpha> o: ref, f: Field alpha :: o != null && h0[o,alloc] && h0[n,footprint][o]
- ==> h0[o,f] == h1[o,f])
- &&
- (forall<alpha> o: ref, f: Field alpha :: o != null && h1[o,alloc] && h1[n,footprint][o]
- ==> h0[o,f] == h1[o,f])
- ==>
- ValidQueue(h0,n) == ValidQueue(h1,n));
-
-function ValidNode(HeapType, ref) returns (bool);
-axiom (forall h: HeapType, n: ref ::
- { ValidNode(h, n) }
- n != null && h[n,alloc] ==>
- (ValidNode(h, n) <==>
- // The following line can be suppressed now that we have a ValidFootprint invariant
- (forall o: ref :: { h[n,footprint][o] } o != null && h[n,footprint][o] ==> h[o,alloc]) &&
- h[n,footprint][n] &&
- (h[n,next] != null ==>
- h[h[n,next],alloc] &&
- SubSet(h[h[n,next], footprint], h[n,footprint]) &&
- !h[h[n,next], footprint][n]) &&
- (h[n,next] == null ==> EqualSeq(h[n,abstractValue], EmptySeq)) &&
- (h[n,next] != null ==> EqualSeq(h[n,abstractValue],
- Append(Singleton(h[h[n,next],data]), h[h[n,next],abstractValue])))
- ));
-
-// frame axiom for ValidNode
-axiom (forall h0: HeapType, h1: HeapType, n: ref ::
- { ValidNode(h0,n), ValidNode(h1,n) }
- (forall<alpha> o: ref, f: Field alpha :: o != null && h0[o,alloc] && h0[n,footprint][o]
- ==> h0[o,f] == h1[o,f])
- &&
- (forall<alpha> o: ref, f: Field alpha :: o != null && h1[o,alloc] && h1[n,footprint][o]
- ==> h0[o,f] == h1[o,f])
- ==>
- ValidNode(h0,n) == ValidNode(h1,n));
-
-// ---------------------------------------------------------------
-
-procedure MakeQueue() returns (q: ref)
- requires ValidFootprints(H);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySet(old(H), H, EmptySet);
- ensures q != null && H[q,alloc];
- ensures AllNewSet(old(H), H[q,footprint]);
- ensures ValidQueue(H, q);
- ensures Length(H[q,abstractValue]) == 0;
-{
- var n: ref;
-
- assume Fresh(H,q);
- H[q,alloc] := true;
-
- call n := MakeNode(NullT);
- H[q,head] := n;
- H[q,tail] := n;
- H[q,mynodes] := SingletonSet(n);
- H[q,footprint] := UnionSet(SingletonSet(q), H[n,footprint]);
- H[q,abstractValue] := H[n,abstractValue];
-}
-
-procedure IsEmpty(q: ref) returns (isEmpty: bool)
- requires ValidFootprints(H);
- requires q != null && H[q,alloc] && ValidQueue(H, q);
- ensures isEmpty <==> Length(H[q,abstractValue]) == 0;
-{
- isEmpty := H[q,head] == H[q,tail];
-}
-
-procedure Enqueue(q: ref, t: T)
- requires ValidFootprints(H);
- requires q != null && H[q,alloc] && ValidQueue(H, q);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySet(old(H), H, old(H)[q,footprint]);
- ensures DifferenceIsNew(old(H), old(H)[q,footprint], H[q,footprint]);
- ensures ValidQueue(H, q);
- ensures EqualSeq(H[q,abstractValue], Append(old(H)[q,abstractValue], Singleton(t)));
-{
- var n: ref;
-
- call n := MakeNode(t);
-
- // foreach m in q.mynodes { m.footprint := m.footprint U n.footprint }
- call BulkUpdateFootprint(H[q,mynodes], H[n,footprint]);
- H[q,footprint] := UnionSet(H[q,footprint], H[n,footprint]);
-
- // foreach m in q.mynodes { m.abstractValue := Append(m.abstractValue, Singleton(t)) }
- call BulkUpdateAbstractValue(H[q,mynodes], t);
- H[q,abstractValue] := H[H[q,head],abstractValue];
-
- H[q,mynodes] := UnionSet(H[q,mynodes], SingletonSet(n));
-
- H[H[q,tail], next] := n;
- H[q,tail] := n;
-}
-
-procedure BulkUpdateFootprint(targetSet: [ref]bool, delta: [ref]bool);
- requires ValidFootprints(H);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySetField(old(H), H, targetSet, footprint);
- ensures (forall o: ref ::
- o != null && old(H)[o,alloc] && targetSet[o]
- ==> H[o,footprint] == UnionSet(old(H)[o,footprint], delta));
-
-procedure BulkUpdateAbstractValue(targetSet: [ref]bool, t: T);
- requires ValidFootprints(H);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySetField(old(H), H, targetSet, abstractValue);
- ensures (forall o: ref ::
- o != null && old(H)[o,alloc] && targetSet[o]
- ==> EqualSeq(H[o,abstractValue], Append(old(H)[o,abstractValue], Singleton(t))));
-
-procedure Front(q: ref) returns (t: T)
- requires ValidFootprints(H);
- requires q != null && H[q,alloc] && ValidQueue(H, q);
- requires 0 < Length(H[q,abstractValue]);
- ensures t == Index(H[q,abstractValue], 0);
-{
- t := H[H[H[q,head], next], data];
-}
-
-procedure Dequeue(q: ref)
- requires ValidFootprints(H);
- requires q != null && H[q,alloc] && ValidQueue(H, q);
- requires 0 < Length(H[q,abstractValue]);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySet(old(H), H, old(H)[q,footprint]);
- ensures DifferenceIsNew(old(H), old(H)[q,footprint], H[q,footprint]);
- ensures ValidQueue(H, q);
- ensures EqualSeq(H[q,abstractValue], Drop(old(H)[q,abstractValue], 1));
-{
- var n: ref;
-
- n := H[H[q,head], next];
- H[q,head] := n;
- // we could also remove old(H)[q,head] from H[q,mynodes], and similar for the footprints
- H[q,abstractValue] := H[n,abstractValue];
-}
-
-// --------------------------------------------------------------------------------
-
-procedure MakeNode(t: T) returns (n: ref)
- requires ValidFootprints(H);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySet(old(H), H, EmptySet);
- ensures n != null && H[n,alloc];
- ensures AllNewSet(old(H), H[n,footprint]);
- ensures ValidNode(H, n);
- ensures H[n,data] == t && H[n,next] == null;
-{
- assume Fresh(H,n);
- H[n,alloc] := true;
-
- H[n,next] := null;
- H[n,data] := t;
- H[n,footprint] := SingletonSet(n);
- H[n,abstractValue] := EmptySeq;
-}
-
-// --------------------------------------------------------------------------------
-
-procedure Main(t: T, u: T, v: T)
- requires ValidFootprints(H);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySet(old(H), H, EmptySet);
-{
- var q0, q1: ref;
- var w: T;
-
- call q0 := MakeQueue();
- call q1 := MakeQueue();
-
- call Enqueue(q0, t);
- call Enqueue(q0, u);
-
- call Enqueue(q1, v);
-
- assert Length(H[q0,abstractValue]) == 2;
-
- call w := Front(q0);
- assert w == t;
- call Dequeue(q0);
-
- call w := Front(q0);
- assert w == u;
-
- assert Length(H[q0,abstractValue]) == 1;
- assert Length(H[q1,abstractValue]) == 1;
-}
-
-// --------------------------------------------------------------------------------
-
-procedure Main2(t: T, u: T, v: T, q0: ref, q1: ref)
- requires q0 != null && H[q0,alloc] && ValidQueue(H, q0);
- requires q1 != null && H[q1,alloc] && ValidQueue(H, q1);
- requires DisjointSet(H[q0,footprint], H[q1,footprint]);
- requires Length(H[q0,abstractValue]) == 0;
-
- requires ValidFootprints(H);
- modifies H;
- ensures ValidFootprints(H);
- ensures ModifiesOnlySet(old(H), H, UnionSet(old(H)[q0,footprint], old(H)[q1,footprint]));
-{
- var w: T;
-
- call Enqueue(q0, t);
- call Enqueue(q0, u);
-
- call Enqueue(q1, v);
-
- assert Length(H[q0,abstractValue]) == 2;
-
- call w := Front(q0);
- assert w == t;
- call Dequeue(q0);
-
- call w := Front(q0);
- assert w == u;
-
- assert Length(H[q0,abstractValue]) == 1;
- assert Length(H[q1,abstractValue]) == old(Length(H[q1,abstractValue])) + 1;
-}
-
-// ---------------------------------------------------------------
-
-// Helpful predicates used in specs
-
-function ModifiesOnlySet(oldHeap: HeapType, newHeap: HeapType, set: [ref]bool) returns (bool);
-axiom (forall oldHeap: HeapType, newHeap: HeapType, set: [ref]bool ::
- { ModifiesOnlySet(oldHeap, newHeap, set) }
- ModifiesOnlySet(oldHeap, newHeap, set) <==>
- NoDeallocs(oldHeap, newHeap) &&
- (forall<alpha> o: ref, f: Field alpha :: { newHeap[o,f] }
- o != null && oldHeap[o,alloc] ==>
- oldHeap[o,f] == newHeap[o,f] || set[o]));
-
-function ModifiesOnlySetField<alpha>(oldHeap: HeapType, newHeap: HeapType,
- set: [ref]bool, field: Field alpha) returns (bool);
-axiom (forall<alpha> oldHeap: HeapType, newHeap: HeapType, set: [ref]bool, field: Field alpha ::
- { ModifiesOnlySetField(oldHeap, newHeap, set, field) }
- ModifiesOnlySetField(oldHeap, newHeap, set, field) <==>
- NoDeallocs(oldHeap, newHeap) &&
- (forall<beta> o: ref, f: Field beta :: { newHeap[o,f] }
- o != null && oldHeap[o,alloc] ==>
- oldHeap[o,f] == newHeap[o,f] || (set[o] && f == field)));
-
-function NoDeallocs(oldHeap: HeapType, newHeap: HeapType) returns (bool);
-axiom (forall oldHeap: HeapType, newHeap: HeapType ::
- { NoDeallocs(oldHeap, newHeap) }
- NoDeallocs(oldHeap, newHeap) <==>
- (forall o: ref :: { newHeap[o,alloc] }
- o != null && oldHeap[o,alloc] ==> newHeap[o,alloc]));
-
-function AllNewSet(oldHeap: HeapType, set: [ref]bool) returns (bool);
-axiom (forall oldHeap: HeapType, set: [ref]bool ::
- { AllNewSet(oldHeap, set) }
- AllNewSet(oldHeap, set) <==>
- (forall o: ref :: { oldHeap[o,alloc] }
- o != null && set[o] ==> !oldHeap[o,alloc]));
-
-function DifferenceIsNew(oldHeap: HeapType, oldSet: [ref]bool, newSet: [ref]bool) returns (bool);
-axiom (forall oldHeap: HeapType, oldSet: [ref]bool, newSet: [ref]bool ::
- { DifferenceIsNew(oldHeap, oldSet, newSet) }
- DifferenceIsNew(oldHeap, oldSet, newSet) <==>
- (forall o: ref :: { oldHeap[o,alloc] }
- o != null && !oldSet[o] && newSet[o] ==> !oldHeap[o,alloc]));
-
-function ValidFootprints(h: HeapType) returns (bool);
-axiom (forall h: HeapType ::
- { ValidFootprints(h) }
- ValidFootprints(h) <==>
- (forall o: ref, r: ref :: { h[o,footprint][r] }
- o != null && h[o,alloc] && r != null && h[o,footprint][r] ==> h[r,alloc]));
-
-function Fresh(h: HeapType, o: ref) returns (bool);
-axiom (forall h: HeapType, o: ref ::
- { Fresh(h,o) }
- Fresh(h,o) <==>
- o != null && !h[o,alloc] && h[o,footprint] == SingletonSet(o));
-
-// ---------------------------------------------------------------
-
-const EmptySet: [ref]bool;
-axiom (forall o: ref :: { EmptySet[o] } !EmptySet[o]);
-
-function SingletonSet(ref) returns ([ref]bool);
-axiom (forall r: ref :: { SingletonSet(r) } SingletonSet(r)[r]);
-axiom (forall r: ref, o: ref :: { SingletonSet(r)[o] } SingletonSet(r)[o] <==> r == o);
-
-function UnionSet([ref]bool, [ref]bool) returns ([ref]bool);
-axiom (forall a: [ref]bool, b: [ref]bool, o: ref :: { UnionSet(a,b)[o] }
- UnionSet(a,b)[o] <==> a[o] || b[o]);
-
-function SubSet([ref]bool, [ref]bool) returns (bool);
-axiom(forall a: [ref]bool, b: [ref]bool :: { SubSet(a,b) }
- SubSet(a,b) <==> (forall o: ref :: {a[o]} {b[o]} a[o] ==> b[o]));
-
-function EqualSet([ref]bool, [ref]bool) returns (bool);
-axiom(forall a: [ref]bool, b: [ref]bool :: { EqualSet(a,b) }
- EqualSet(a,b) <==> (forall o: ref :: {a[o]} {b[o]} a[o] <==> b[o]));
-
-function DisjointSet([ref]bool, [ref]bool) returns (bool);
-axiom (forall a: [ref]bool, b: [ref]bool :: { DisjointSet(a,b) }
- DisjointSet(a,b) <==> (forall o: ref :: {a[o]} {b[o]} !a[o] || !b[o]));
-
-// ---------------------------------------------------------------
-
-// Sequence of T
-type Seq;
-
-function Length(Seq) returns (int);
-axiom (forall s: Seq :: { Length(s) } 0 <= Length(s));
-
-const EmptySeq: Seq;
-axiom Length(EmptySeq) == 0;
-axiom (forall s: Seq :: { Length(s) } Length(s) == 0 ==> s == EmptySeq);
-
-function Singleton(T) returns (Seq);
-axiom (forall t: T :: { Length(Singleton(t)) } Length(Singleton(t)) == 1);
-
-function Append(Seq, Seq) returns (Seq);
-axiom (forall s0: Seq, s1: Seq :: { Length(Append(s0,s1)) }
- Length(Append(s0,s1)) == Length(s0) + Length(s1));
-
-function Index(Seq, int) returns (T);
-axiom (forall t: T :: { Index(Singleton(t), 0) } Index(Singleton(t), 0) == t);
-axiom (forall s0: Seq, s1: Seq, n: int :: { Index(Append(s0,s1), n) }
- (n < Length(s0) ==> Index(Append(s0,s1), n) == Index(s0, n)) &&
- (Length(s0) <= n ==> Index(Append(s0,s1), n) == Index(s1, n - Length(s0))));
-
-function EqualSeq(Seq, Seq) returns (bool);
-axiom (forall s0: Seq, s1: Seq :: { EqualSeq(s0,s1) }
- EqualSeq(s0,s1) <==>
- Length(s0) == Length(s1) &&
- (forall j: int :: { Index(s0,j) } { Index(s1,j) }
- 0 <= j && j < Length(s0) ==> Index(s0,j) == Index(s1,j)));
-
-function Take(s: Seq, howMany: int) returns (Seq);
-axiom (forall s: Seq, n: int :: { Length(Take(s,n)) }
- 0 <= n ==>
- (n <= Length(s) ==> Length(Take(s,n)) == n) &&
- (Length(s) < n ==> Length(Take(s,n)) == Length(s)));
-axiom (forall s: Seq, n: int, j: int :: { Index(Take(s,n), j) }
- 0 <= j && j < n && j < Length(s) ==>
- Index(Take(s,n), j) == Index(s, j));
-
-function Drop(s: Seq, howMany: int) returns (Seq);
-axiom (forall s: Seq, n: int :: { Length(Drop(s,n)) }
- 0 <= n ==>
- (n <= Length(s) ==> Length(Drop(s,n)) == Length(s) - n) &&
- (Length(s) < n ==> Length(Drop(s,n)) == 0));
-axiom (forall s: Seq, n: int, j: int :: { Index(Drop(s,n), j) }
- 0 <= n && 0 <= j && j < Length(s)-n ==>
- Index(Drop(s,n), j) == Index(s, j+n));
-
-// ---------------------------------------------------------------
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// BQueue.bpl
+// A queue program specified in the style of dynamic frames.
+// Rustan Leino, Michal Moskal, and Wolfram Schulte, 2007.
+
+// ---------------------------------------------------------------
+
+type ref;
+const null: ref;
+
+type Field x;
+
+// this variable represents the heap; read its type as \forall \alpha. ref * Field \alpha --> \alpha
+type HeapType = <x>[ref, Field x]x;
+var H: HeapType;
+
+// every object has an 'alloc' field, which says whether or not the object has been allocated
+const unique alloc: Field bool;
+
+// for simplicity, we say that every object has one field representing its abstract value and one
+// field representing its footprint (aka frame aka data group).
+
+const unique abstractValue: Field Seq;
+const unique footprint: Field [ref]bool;
+
+// ---------------------------------------------------------------
+
+type T; // the type of the elements of the queue
+const NullT: T; // some value of type T
+
+// ---------------------------------------------------------------
+
+// Queue:
+const unique head: Field ref;
+const unique tail: Field ref;
+const unique mynodes: Field [ref]bool;
+// Node:
+const unique data: Field T;
+const unique next: Field ref;
+
+function ValidQueue(HeapType, ref) returns (bool);
+axiom (forall h: HeapType, q: ref ::
+ { ValidQueue(h, q) }
+ q != null && h[q,alloc] ==>
+ (ValidQueue(h, q) <==>
+ h[q,head] != null && h[h[q,head],alloc] &&
+ h[q,tail] != null && h[h[q,tail],alloc] &&
+ h[h[q,tail], next] == null &&
+ // The following line can be suppressed now that we have a ValidFootprint invariant
+ (forall o: ref :: { h[q,footprint][o] } o != null && h[q,footprint][o] ==> h[o,alloc]) &&
+ h[q,footprint][q] &&
+ h[q,mynodes][h[q,head]] && h[q,mynodes][h[q,tail]] &&
+ (forall n: ref :: { h[q,mynodes][n] }
+ h[q,mynodes][n] ==>
+ n != null && h[n,alloc] && ValidNode(h, n) &&
+ SubSet(h[n,footprint], h[q,footprint]) &&
+ !h[n,footprint][q] &&
+ (h[n,next] == null ==> n == h[q,tail])
+ ) &&
+ (forall n: ref :: { h[n,next] }
+ h[q,mynodes][n] ==>
+ (h[n,next] != null ==> h[q,mynodes][h[n,next]])
+ ) &&
+ h[q,abstractValue] == h[h[q,head],abstractValue]
+ ));
+
+// frame axiom for ValidQueue
+axiom (forall h0: HeapType, h1: HeapType, n: ref ::
+ { ValidQueue(h0,n), ValidQueue(h1,n) }
+ (forall<alpha> o: ref, f: Field alpha :: o != null && h0[o,alloc] && h0[n,footprint][o]
+ ==> h0[o,f] == h1[o,f])
+ &&
+ (forall<alpha> o: ref, f: Field alpha :: o != null && h1[o,alloc] && h1[n,footprint][o]
+ ==> h0[o,f] == h1[o,f])
+ ==>
+ ValidQueue(h0,n) == ValidQueue(h1,n));
+
+function ValidNode(HeapType, ref) returns (bool);
+axiom (forall h: HeapType, n: ref ::
+ { ValidNode(h, n) }
+ n != null && h[n,alloc] ==>
+ (ValidNode(h, n) <==>
+ // The following line can be suppressed now that we have a ValidFootprint invariant
+ (forall o: ref :: { h[n,footprint][o] } o != null && h[n,footprint][o] ==> h[o,alloc]) &&
+ h[n,footprint][n] &&
+ (h[n,next] != null ==>
+ h[h[n,next],alloc] &&
+ SubSet(h[h[n,next], footprint], h[n,footprint]) &&
+ !h[h[n,next], footprint][n]) &&
+ (h[n,next] == null ==> EqualSeq(h[n,abstractValue], EmptySeq)) &&
+ (h[n,next] != null ==> EqualSeq(h[n,abstractValue],
+ Append(Singleton(h[h[n,next],data]), h[h[n,next],abstractValue])))
+ ));
+
+// frame axiom for ValidNode
+axiom (forall h0: HeapType, h1: HeapType, n: ref ::
+ { ValidNode(h0,n), ValidNode(h1,n) }
+ (forall<alpha> o: ref, f: Field alpha :: o != null && h0[o,alloc] && h0[n,footprint][o]
+ ==> h0[o,f] == h1[o,f])
+ &&
+ (forall<alpha> o: ref, f: Field alpha :: o != null && h1[o,alloc] && h1[n,footprint][o]
+ ==> h0[o,f] == h1[o,f])
+ ==>
+ ValidNode(h0,n) == ValidNode(h1,n));
+
+// ---------------------------------------------------------------
+
+procedure MakeQueue() returns (q: ref)
+ requires ValidFootprints(H);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySet(old(H), H, EmptySet);
+ ensures q != null && H[q,alloc];
+ ensures AllNewSet(old(H), H[q,footprint]);
+ ensures ValidQueue(H, q);
+ ensures Length(H[q,abstractValue]) == 0;
+{
+ var n: ref;
+
+ assume Fresh(H,q);
+ H[q,alloc] := true;
+
+ call n := MakeNode(NullT);
+ H[q,head] := n;
+ H[q,tail] := n;
+ H[q,mynodes] := SingletonSet(n);
+ H[q,footprint] := UnionSet(SingletonSet(q), H[n,footprint]);
+ H[q,abstractValue] := H[n,abstractValue];
+}
+
+procedure IsEmpty(q: ref) returns (isEmpty: bool)
+ requires ValidFootprints(H);
+ requires q != null && H[q,alloc] && ValidQueue(H, q);
+ ensures isEmpty <==> Length(H[q,abstractValue]) == 0;
+{
+ isEmpty := H[q,head] == H[q,tail];
+}
+
+procedure Enqueue(q: ref, t: T)
+ requires ValidFootprints(H);
+ requires q != null && H[q,alloc] && ValidQueue(H, q);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySet(old(H), H, old(H)[q,footprint]);
+ ensures DifferenceIsNew(old(H), old(H)[q,footprint], H[q,footprint]);
+ ensures ValidQueue(H, q);
+ ensures EqualSeq(H[q,abstractValue], Append(old(H)[q,abstractValue], Singleton(t)));
+{
+ var n: ref;
+
+ call n := MakeNode(t);
+
+ // foreach m in q.mynodes { m.footprint := m.footprint U n.footprint }
+ call BulkUpdateFootprint(H[q,mynodes], H[n,footprint]);
+ H[q,footprint] := UnionSet(H[q,footprint], H[n,footprint]);
+
+ // foreach m in q.mynodes { m.abstractValue := Append(m.abstractValue, Singleton(t)) }
+ call BulkUpdateAbstractValue(H[q,mynodes], t);
+ H[q,abstractValue] := H[H[q,head],abstractValue];
+
+ H[q,mynodes] := UnionSet(H[q,mynodes], SingletonSet(n));
+
+ H[H[q,tail], next] := n;
+ H[q,tail] := n;
+}
+
+procedure BulkUpdateFootprint(targetSet: [ref]bool, delta: [ref]bool);
+ requires ValidFootprints(H);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySetField(old(H), H, targetSet, footprint);
+ ensures (forall o: ref ::
+ o != null && old(H)[o,alloc] && targetSet[o]
+ ==> H[o,footprint] == UnionSet(old(H)[o,footprint], delta));
+
+procedure BulkUpdateAbstractValue(targetSet: [ref]bool, t: T);
+ requires ValidFootprints(H);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySetField(old(H), H, targetSet, abstractValue);
+ ensures (forall o: ref ::
+ o != null && old(H)[o,alloc] && targetSet[o]
+ ==> EqualSeq(H[o,abstractValue], Append(old(H)[o,abstractValue], Singleton(t))));
+
+procedure Front(q: ref) returns (t: T)
+ requires ValidFootprints(H);
+ requires q != null && H[q,alloc] && ValidQueue(H, q);
+ requires 0 < Length(H[q,abstractValue]);
+ ensures t == Index(H[q,abstractValue], 0);
+{
+ t := H[H[H[q,head], next], data];
+}
+
+procedure Dequeue(q: ref)
+ requires ValidFootprints(H);
+ requires q != null && H[q,alloc] && ValidQueue(H, q);
+ requires 0 < Length(H[q,abstractValue]);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySet(old(H), H, old(H)[q,footprint]);
+ ensures DifferenceIsNew(old(H), old(H)[q,footprint], H[q,footprint]);
+ ensures ValidQueue(H, q);
+ ensures EqualSeq(H[q,abstractValue], Drop(old(H)[q,abstractValue], 1));
+{
+ var n: ref;
+
+ n := H[H[q,head], next];
+ H[q,head] := n;
+ // we could also remove old(H)[q,head] from H[q,mynodes], and similar for the footprints
+ H[q,abstractValue] := H[n,abstractValue];
+}
+
+// --------------------------------------------------------------------------------
+
+procedure MakeNode(t: T) returns (n: ref)
+ requires ValidFootprints(H);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySet(old(H), H, EmptySet);
+ ensures n != null && H[n,alloc];
+ ensures AllNewSet(old(H), H[n,footprint]);
+ ensures ValidNode(H, n);
+ ensures H[n,data] == t && H[n,next] == null;
+{
+ assume Fresh(H,n);
+ H[n,alloc] := true;
+
+ H[n,next] := null;
+ H[n,data] := t;
+ H[n,footprint] := SingletonSet(n);
+ H[n,abstractValue] := EmptySeq;
+}
+
+// --------------------------------------------------------------------------------
+
+procedure Main(t: T, u: T, v: T)
+ requires ValidFootprints(H);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySet(old(H), H, EmptySet);
+{
+ var q0, q1: ref;
+ var w: T;
+
+ call q0 := MakeQueue();
+ call q1 := MakeQueue();
+
+ call Enqueue(q0, t);
+ call Enqueue(q0, u);
+
+ call Enqueue(q1, v);
+
+ assert Length(H[q0,abstractValue]) == 2;
+
+ call w := Front(q0);
+ assert w == t;
+ call Dequeue(q0);
+
+ call w := Front(q0);
+ assert w == u;
+
+ assert Length(H[q0,abstractValue]) == 1;
+ assert Length(H[q1,abstractValue]) == 1;
+}
+
+// --------------------------------------------------------------------------------
+
+procedure Main2(t: T, u: T, v: T, q0: ref, q1: ref)
+ requires q0 != null && H[q0,alloc] && ValidQueue(H, q0);
+ requires q1 != null && H[q1,alloc] && ValidQueue(H, q1);
+ requires DisjointSet(H[q0,footprint], H[q1,footprint]);
+ requires Length(H[q0,abstractValue]) == 0;
+
+ requires ValidFootprints(H);
+ modifies H;
+ ensures ValidFootprints(H);
+ ensures ModifiesOnlySet(old(H), H, UnionSet(old(H)[q0,footprint], old(H)[q1,footprint]));
+{
+ var w: T;
+
+ call Enqueue(q0, t);
+ call Enqueue(q0, u);
+
+ call Enqueue(q1, v);
+
+ assert Length(H[q0,abstractValue]) == 2;
+
+ call w := Front(q0);
+ assert w == t;
+ call Dequeue(q0);
+
+ call w := Front(q0);
+ assert w == u;
+
+ assert Length(H[q0,abstractValue]) == 1;
+ assert Length(H[q1,abstractValue]) == old(Length(H[q1,abstractValue])) + 1;
+}
+
+// ---------------------------------------------------------------
+
+// Helpful predicates used in specs
+
+function ModifiesOnlySet(oldHeap: HeapType, newHeap: HeapType, set: [ref]bool) returns (bool);
+axiom (forall oldHeap: HeapType, newHeap: HeapType, set: [ref]bool ::
+ { ModifiesOnlySet(oldHeap, newHeap, set) }
+ ModifiesOnlySet(oldHeap, newHeap, set) <==>
+ NoDeallocs(oldHeap, newHeap) &&
+ (forall<alpha> o: ref, f: Field alpha :: { newHeap[o,f] }
+ o != null && oldHeap[o,alloc] ==>
+ oldHeap[o,f] == newHeap[o,f] || set[o]));
+
+function ModifiesOnlySetField<alpha>(oldHeap: HeapType, newHeap: HeapType,
+ set: [ref]bool, field: Field alpha) returns (bool);
+axiom (forall<alpha> oldHeap: HeapType, newHeap: HeapType, set: [ref]bool, field: Field alpha ::
+ { ModifiesOnlySetField(oldHeap, newHeap, set, field) }
+ ModifiesOnlySetField(oldHeap, newHeap, set, field) <==>
+ NoDeallocs(oldHeap, newHeap) &&
+ (forall<beta> o: ref, f: Field beta :: { newHeap[o,f] }
+ o != null && oldHeap[o,alloc] ==>
+ oldHeap[o,f] == newHeap[o,f] || (set[o] && f == field)));
+
+function NoDeallocs(oldHeap: HeapType, newHeap: HeapType) returns (bool);
+axiom (forall oldHeap: HeapType, newHeap: HeapType ::
+ { NoDeallocs(oldHeap, newHeap) }
+ NoDeallocs(oldHeap, newHeap) <==>
+ (forall o: ref :: { newHeap[o,alloc] }
+ o != null && oldHeap[o,alloc] ==> newHeap[o,alloc]));
+
+function AllNewSet(oldHeap: HeapType, set: [ref]bool) returns (bool);
+axiom (forall oldHeap: HeapType, set: [ref]bool ::
+ { AllNewSet(oldHeap, set) }
+ AllNewSet(oldHeap, set) <==>
+ (forall o: ref :: { oldHeap[o,alloc] }
+ o != null && set[o] ==> !oldHeap[o,alloc]));
+
+function DifferenceIsNew(oldHeap: HeapType, oldSet: [ref]bool, newSet: [ref]bool) returns (bool);
+axiom (forall oldHeap: HeapType, oldSet: [ref]bool, newSet: [ref]bool ::
+ { DifferenceIsNew(oldHeap, oldSet, newSet) }
+ DifferenceIsNew(oldHeap, oldSet, newSet) <==>
+ (forall o: ref :: { oldHeap[o,alloc] }
+ o != null && !oldSet[o] && newSet[o] ==> !oldHeap[o,alloc]));
+
+function ValidFootprints(h: HeapType) returns (bool);
+axiom (forall h: HeapType ::
+ { ValidFootprints(h) }
+ ValidFootprints(h) <==>
+ (forall o: ref, r: ref :: { h[o,footprint][r] }
+ o != null && h[o,alloc] && r != null && h[o,footprint][r] ==> h[r,alloc]));
+
+function Fresh(h: HeapType, o: ref) returns (bool);
+axiom (forall h: HeapType, o: ref ::
+ { Fresh(h,o) }
+ Fresh(h,o) <==>
+ o != null && !h[o,alloc] && h[o,footprint] == SingletonSet(o));
+
+// ---------------------------------------------------------------
+
+const EmptySet: [ref]bool;
+axiom (forall o: ref :: { EmptySet[o] } !EmptySet[o]);
+
+function SingletonSet(ref) returns ([ref]bool);
+axiom (forall r: ref :: { SingletonSet(r) } SingletonSet(r)[r]);
+axiom (forall r: ref, o: ref :: { SingletonSet(r)[o] } SingletonSet(r)[o] <==> r == o);
+
+function UnionSet([ref]bool, [ref]bool) returns ([ref]bool);
+axiom (forall a: [ref]bool, b: [ref]bool, o: ref :: { UnionSet(a,b)[o] }
+ UnionSet(a,b)[o] <==> a[o] || b[o]);
+
+function SubSet([ref]bool, [ref]bool) returns (bool);
+axiom(forall a: [ref]bool, b: [ref]bool :: { SubSet(a,b) }
+ SubSet(a,b) <==> (forall o: ref :: {a[o]} {b[o]} a[o] ==> b[o]));
+
+function EqualSet([ref]bool, [ref]bool) returns (bool);
+axiom(forall a: [ref]bool, b: [ref]bool :: { EqualSet(a,b) }
+ EqualSet(a,b) <==> (forall o: ref :: {a[o]} {b[o]} a[o] <==> b[o]));
+
+function DisjointSet([ref]bool, [ref]bool) returns (bool);
+axiom (forall a: [ref]bool, b: [ref]bool :: { DisjointSet(a,b) }
+ DisjointSet(a,b) <==> (forall o: ref :: {a[o]} {b[o]} !a[o] || !b[o]));
+
+// ---------------------------------------------------------------
+
+// Sequence of T
+type Seq;
+
+function Length(Seq) returns (int);
+axiom (forall s: Seq :: { Length(s) } 0 <= Length(s));
+
+const EmptySeq: Seq;
+axiom Length(EmptySeq) == 0;
+axiom (forall s: Seq :: { Length(s) } Length(s) == 0 ==> s == EmptySeq);
+
+function Singleton(T) returns (Seq);
+axiom (forall t: T :: { Length(Singleton(t)) } Length(Singleton(t)) == 1);
+
+function Append(Seq, Seq) returns (Seq);
+axiom (forall s0: Seq, s1: Seq :: { Length(Append(s0,s1)) }
+ Length(Append(s0,s1)) == Length(s0) + Length(s1));
+
+function Index(Seq, int) returns (T);
+axiom (forall t: T :: { Index(Singleton(t), 0) } Index(Singleton(t), 0) == t);
+axiom (forall s0: Seq, s1: Seq, n: int :: { Index(Append(s0,s1), n) }
+ (n < Length(s0) ==> Index(Append(s0,s1), n) == Index(s0, n)) &&
+ (Length(s0) <= n ==> Index(Append(s0,s1), n) == Index(s1, n - Length(s0))));
+
+function EqualSeq(Seq, Seq) returns (bool);
+axiom (forall s0: Seq, s1: Seq :: { EqualSeq(s0,s1) }
+ EqualSeq(s0,s1) <==>
+ Length(s0) == Length(s1) &&
+ (forall j: int :: { Index(s0,j) } { Index(s1,j) }
+ 0 <= j && j < Length(s0) ==> Index(s0,j) == Index(s1,j)));
+
+function Take(s: Seq, howMany: int) returns (Seq);
+axiom (forall s: Seq, n: int :: { Length(Take(s,n)) }
+ 0 <= n ==>
+ (n <= Length(s) ==> Length(Take(s,n)) == n) &&
+ (Length(s) < n ==> Length(Take(s,n)) == Length(s)));
+axiom (forall s: Seq, n: int, j: int :: { Index(Take(s,n), j) }
+ 0 <= j && j < n && j < Length(s) ==>
+ Index(Take(s,n), j) == Index(s, j));
+
+function Drop(s: Seq, howMany: int) returns (Seq);
+axiom (forall s: Seq, n: int :: { Length(Drop(s,n)) }
+ 0 <= n ==>
+ (n <= Length(s) ==> Length(Drop(s,n)) == Length(s) - n) &&
+ (Length(s) < n ==> Length(Drop(s,n)) == 0));
+axiom (forall s: Seq, n: int, j: int :: { Index(Drop(s,n), j) }
+ 0 <= n && 0 <= j && j < Length(s)-n ==>
+ Index(Drop(s,n), j) == Index(s, j+n));
+
+// ---------------------------------------------------------------
diff --git a/Test/textbook/Bubble.bpl b/Test/textbook/Bubble.bpl
index 702b2cc9..a3f16baa 100644
--- a/Test/textbook/Bubble.bpl
+++ b/Test/textbook/Bubble.bpl
@@ -1,82 +1,82 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Bubble Sort, where the specification says the output is a permutation of
-// the input.
-
-// Introduce a constant 'N' and postulate that it is non-negative
-const N: int;
-axiom 0 <= N;
-
-// Declare a map from integers to integers. In the procedure below, 'a' will be
-// treated as an array of 'N' elements, indexed from 0 to less than 'N'.
-var a: [int]int;
-
-// This procedure implements Bubble Sort. One of the postconditions says that,
-// in the final state of the procedure, the array is sorted. The other
-// postconditions say that the final array is a permutation of the initial
-// array. To write that part of the specification, the procedure returns that
-// permutation mapping. That is, out-parameter 'perm' injectively maps the
-// numbers [0..N) to [0..N), as stated by the second and third postconditions.
-// The final postcondition says that 'perm' describes how the elements in
-// 'a' moved: what is now at index 'i' used to be at index 'perm[i]'.
-// Note, the specification says nothing about the elements of 'a' outside the
-// range [0..N). Moreover, Boogie does not prove that the program will terminate.
-
-procedure BubbleSort() returns (perm: [int]int)
- modifies a;
- // array is sorted
- ensures (forall i, j: int :: 0 <= i && i <= j && j < N ==> a[i] <= a[j]);
- // perm is a permutation
- ensures (forall i: int :: 0 <= i && i < N ==> 0 <= perm[i] && perm[i] < N);
- ensures (forall i, j: int :: 0 <= i && i < j && j < N ==> perm[i] != perm[j]);
- // the final array is that permutation of the input array
- ensures (forall i: int :: 0 <= i && i < N ==> a[i] == old(a)[perm[i]]);
-{
- var n, p, tmp: int;
-
- n := 0;
- while (n < N)
- invariant n <= N;
- invariant (forall i: int :: 0 <= i && i < n ==> perm[i] == i);
- {
- perm[n] := n;
- n := n + 1;
- }
-
- while (true)
- invariant 0 <= n && n <= N;
- // array is sorted from n onwards
- invariant (forall i, k: int :: n <= i && i < N && 0 <= k && k < i ==> a[k] <= a[i]);
- // perm is a permutation
- invariant (forall i: int :: 0 <= i && i < N ==> 0 <= perm[i] && perm[i] < N);
- invariant (forall i, j: int :: 0 <= i && i < j && j < N ==> perm[i] != perm[j]);
- // the current array is that permutation of the input array
- invariant (forall i: int :: 0 <= i && i < N ==> a[i] == old(a)[perm[i]]);
- {
- n := n - 1;
- if (n < 0) {
- break;
- }
-
- p := 0;
- while (p < n)
- invariant p <= n;
- // array is sorted from n+1 onwards
- invariant (forall i, k: int :: n+1 <= i && i < N && 0 <= k && k < i ==> a[k] <= a[i]);
- // perm is a permutation
- invariant (forall i: int :: 0 <= i && i < N ==> 0 <= perm[i] && perm[i] < N);
- invariant (forall i, j: int :: 0 <= i && i < j && j < N ==> perm[i] != perm[j]);
- // the current array is that permutation of the input array
- invariant (forall i: int :: 0 <= i && i < N ==> a[i] == old(a)[perm[i]]);
- // a[p] is at least as large as any of the first p elements
- invariant (forall k: int :: 0 <= k && k < p ==> a[k] <= a[p]);
- {
- if (a[p+1] < a[p]) {
- tmp := a[p]; a[p] := a[p+1]; a[p+1] := tmp;
- tmp := perm[p]; perm[p] := perm[p+1]; perm[p+1] := tmp;
- }
-
- p := p + 1;
- }
- }
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Bubble Sort, where the specification says the output is a permutation of
+// the input.
+
+// Introduce a constant 'N' and postulate that it is non-negative
+const N: int;
+axiom 0 <= N;
+
+// Declare a map from integers to integers. In the procedure below, 'a' will be
+// treated as an array of 'N' elements, indexed from 0 to less than 'N'.
+var a: [int]int;
+
+// This procedure implements Bubble Sort. One of the postconditions says that,
+// in the final state of the procedure, the array is sorted. The other
+// postconditions say that the final array is a permutation of the initial
+// array. To write that part of the specification, the procedure returns that
+// permutation mapping. That is, out-parameter 'perm' injectively maps the
+// numbers [0..N) to [0..N), as stated by the second and third postconditions.
+// The final postcondition says that 'perm' describes how the elements in
+// 'a' moved: what is now at index 'i' used to be at index 'perm[i]'.
+// Note, the specification says nothing about the elements of 'a' outside the
+// range [0..N). Moreover, Boogie does not prove that the program will terminate.
+
+procedure BubbleSort() returns (perm: [int]int)
+ modifies a;
+ // array is sorted
+ ensures (forall i, j: int :: 0 <= i && i <= j && j < N ==> a[i] <= a[j]);
+ // perm is a permutation
+ ensures (forall i: int :: 0 <= i && i < N ==> 0 <= perm[i] && perm[i] < N);
+ ensures (forall i, j: int :: 0 <= i && i < j && j < N ==> perm[i] != perm[j]);
+ // the final array is that permutation of the input array
+ ensures (forall i: int :: 0 <= i && i < N ==> a[i] == old(a)[perm[i]]);
+{
+ var n, p, tmp: int;
+
+ n := 0;
+ while (n < N)
+ invariant n <= N;
+ invariant (forall i: int :: 0 <= i && i < n ==> perm[i] == i);
+ {
+ perm[n] := n;
+ n := n + 1;
+ }
+
+ while (true)
+ invariant 0 <= n && n <= N;
+ // array is sorted from n onwards
+ invariant (forall i, k: int :: n <= i && i < N && 0 <= k && k < i ==> a[k] <= a[i]);
+ // perm is a permutation
+ invariant (forall i: int :: 0 <= i && i < N ==> 0 <= perm[i] && perm[i] < N);
+ invariant (forall i, j: int :: 0 <= i && i < j && j < N ==> perm[i] != perm[j]);
+ // the current array is that permutation of the input array
+ invariant (forall i: int :: 0 <= i && i < N ==> a[i] == old(a)[perm[i]]);
+ {
+ n := n - 1;
+ if (n < 0) {
+ break;
+ }
+
+ p := 0;
+ while (p < n)
+ invariant p <= n;
+ // array is sorted from n+1 onwards
+ invariant (forall i, k: int :: n+1 <= i && i < N && 0 <= k && k < i ==> a[k] <= a[i]);
+ // perm is a permutation
+ invariant (forall i: int :: 0 <= i && i < N ==> 0 <= perm[i] && perm[i] < N);
+ invariant (forall i, j: int :: 0 <= i && i < j && j < N ==> perm[i] != perm[j]);
+ // the current array is that permutation of the input array
+ invariant (forall i: int :: 0 <= i && i < N ==> a[i] == old(a)[perm[i]]);
+ // a[p] is at least as large as any of the first p elements
+ invariant (forall k: int :: 0 <= k && k < p ==> a[k] <= a[p]);
+ {
+ if (a[p+1] < a[p]) {
+ tmp := a[p]; a[p] := a[p+1]; a[p+1] := tmp;
+ tmp := perm[p]; perm[p] := perm[p+1]; perm[p+1] := tmp;
+ }
+
+ p := p + 1;
+ }
+ }
+}
diff --git a/Test/textbook/DivMod.bpl b/Test/textbook/DivMod.bpl
index bdbc4f19..0af38ec8 100644
--- a/Test/textbook/DivMod.bpl
+++ b/Test/textbook/DivMod.bpl
@@ -1,65 +1,65 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// This file contains two definitions of integer div/mod (truncated division, as is
-// used in C, C#, Java, and several other languages, and Euclidean division, which
-// has mathematical appeal and is used by SMT Lib) and proves the correct
-// correspondence between the two.
-//
-// Rustan Leino, 23 Sep 2010
-
-function abs(x: int): int { if 0 <= x then x else -x }
-
-function divt(int, int): int;
-function modt(int, int): int;
-
-axiom (forall a,b: int :: divt(a,b)*b + modt(a,b) == a);
-axiom (forall a,b: int ::
- (0 <= a ==> 0 <= modt(a,b) && modt(a,b) < abs(b)) &&
- (a < 0 ==> -abs(b) < modt(a,b) && modt(a,b) <= 0));
-
-function dive(int, int): int;
-function mode(int, int): int;
-
-axiom (forall a,b: int :: dive(a,b)*b + mode(a,b) == a);
-axiom (forall a,b: int :: 0 <= mode(a,b) && mode(a,b) < abs(b));
-
-procedure T_from_E(a,b: int) returns (q,r: int)
- requires b != 0;
- // It would be nice to prove:
- // ensures q == divt(a,b);
- // ensures r == modt(a,b);
- // but since we know that the axioms about divt/modt have unique solutions (for
- // non-zero b), we just prove that the axioms hold.
- ensures q*b + r == a;
- ensures 0 <= a ==> 0 <= r && r < abs(b);
- ensures a < 0 ==> -abs(b) < r && r <= 0;
-{
- // note, this implementation uses only dive/mode
- var qq,rr: int;
- qq := dive(a,b);
- rr := mode(a,b);
-
- q := if 0 <= a || rr == 0 then qq else if 0 <= b then qq+1 else qq-1;
- r := if 0 <= a || rr == 0 then rr else if 0 <= b then rr-b else rr+b;
- assume {:captureState "end of T_from_E"} true;
-}
-
-procedure E_from_T(a,b: int) returns (q,r: int)
- requires b != 0;
- // It would be nice to prove:
- // ensures q == dive(a,b);
- // ensures r == mode(a,b);
- // but since we know that the axioms about dive/mode have unique solutions (for
- // non-zero b), we just prove that the axioms hold.
- ensures q*b + r == a;
- ensures 0 <= r;
- ensures r < abs(b);
-{
- // note, this implementation uses only divt/modt
- var qq,rr: int;
- qq := divt(a,b);
- rr := modt(a,b);
-
- q := if 0 <= rr then qq else if 0 < b then qq-1 else qq+1;
- r := if 0 <= rr then rr else if 0 < b then rr+b else rr-b;
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// This file contains two definitions of integer div/mod (truncated division, as is
+// used in C, C#, Java, and several other languages, and Euclidean division, which
+// has mathematical appeal and is used by SMT Lib) and proves the correct
+// correspondence between the two.
+//
+// Rustan Leino, 23 Sep 2010
+
+function abs(x: int): int { if 0 <= x then x else -x }
+
+function divt(int, int): int;
+function modt(int, int): int;
+
+axiom (forall a,b: int :: divt(a,b)*b + modt(a,b) == a);
+axiom (forall a,b: int ::
+ (0 <= a ==> 0 <= modt(a,b) && modt(a,b) < abs(b)) &&
+ (a < 0 ==> -abs(b) < modt(a,b) && modt(a,b) <= 0));
+
+function dive(int, int): int;
+function mode(int, int): int;
+
+axiom (forall a,b: int :: dive(a,b)*b + mode(a,b) == a);
+axiom (forall a,b: int :: 0 <= mode(a,b) && mode(a,b) < abs(b));
+
+procedure T_from_E(a,b: int) returns (q,r: int)
+ requires b != 0;
+ // It would be nice to prove:
+ // ensures q == divt(a,b);
+ // ensures r == modt(a,b);
+ // but since we know that the axioms about divt/modt have unique solutions (for
+ // non-zero b), we just prove that the axioms hold.
+ ensures q*b + r == a;
+ ensures 0 <= a ==> 0 <= r && r < abs(b);
+ ensures a < 0 ==> -abs(b) < r && r <= 0;
+{
+ // note, this implementation uses only dive/mode
+ var qq,rr: int;
+ qq := dive(a,b);
+ rr := mode(a,b);
+
+ q := if 0 <= a || rr == 0 then qq else if 0 <= b then qq+1 else qq-1;
+ r := if 0 <= a || rr == 0 then rr else if 0 <= b then rr-b else rr+b;
+ assume {:captureState "end of T_from_E"} true;
+}
+
+procedure E_from_T(a,b: int) returns (q,r: int)
+ requires b != 0;
+ // It would be nice to prove:
+ // ensures q == dive(a,b);
+ // ensures r == mode(a,b);
+ // but since we know that the axioms about dive/mode have unique solutions (for
+ // non-zero b), we just prove that the axioms hold.
+ ensures q*b + r == a;
+ ensures 0 <= r;
+ ensures r < abs(b);
+{
+ // note, this implementation uses only divt/modt
+ var qq,rr: int;
+ qq := divt(a,b);
+ rr := modt(a,b);
+
+ q := if 0 <= rr then qq else if 0 < b then qq-1 else qq+1;
+ r := if 0 <= rr then rr else if 0 < b then rr+b else rr-b;
+}
diff --git a/Test/textbook/DutchFlag.bpl b/Test/textbook/DutchFlag.bpl
index 8bac6aec..f5ee73bb 100644
--- a/Test/textbook/DutchFlag.bpl
+++ b/Test/textbook/DutchFlag.bpl
@@ -1,71 +1,71 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// The partition step of Quick Sort picks a 'pivot' element from a specified subsection
-// of a given integer array. It then partially sorts the elements of the array so that
-// elements smaller than the pivot end up to the left of the pivot and elements larger
-// than the pivot end up to the right of the pivot. Finally, the index of the pivot is
-// returned.
-// The procedure below always picks the first element of the subregion as the pivot.
-// The specification of the procedure talks about the ordering of the elements, but
-// does not say anything about keeping the multiset of elements the same.
-
-var A: [int]int;
-const N: int;
-
-procedure Partition(l: int, r: int) returns (result: int)
- requires 0 <= l && l+2 <= r && r <= N;
- modifies A;
- ensures l <= result && result < r;
- ensures (forall k: int, j: int :: l <= k && k < result && result <= j && j < r ==> A[k] <= A[j]);
- ensures (forall k: int :: l <= k && k < result ==> A[k] <= old(A)[l]);
- ensures (forall k: int :: result <= k && k < r ==> old(A)[l] <= A[k]);
-{
- var pv, i, j, tmp: int;
-
- pv := A[l];
- i := l;
- j := r-1;
- // swap A[l] and A[j]
- tmp := A[l];
- A[l] := A[j];
- A[j] := tmp;
- goto LoopHead;
-
- // The following loop iterates while 'i < j'. In each iteration,
- // one of the three alternatives (A, B, or C) is chosen in such
- // a way that the assume statements will evaluate to true.
- LoopHead:
- // The following the assert statements give the loop invariant
- assert (forall k: int :: l <= k && k < i ==> A[k] <= pv);
- assert (forall k: int :: j <= k && k < r ==> pv <= A[k]);
- assert l <= i && i <= j && j < r;
- goto A, B, C, exit;
-
- A:
- assume i < j;
- assume A[i] <= pv;
- i := i + 1;
- goto LoopHead;
-
- B:
- assume i < j;
- assume pv <= A[j-1];
- j := j - 1;
- goto LoopHead;
-
- C:
- assume i < j;
- assume A[j-1] < pv && pv < A[i];
- // swap A[j-1] and A[i]
- tmp := A[i];
- A[i] := A[j-1];
- A[j-1] := tmp;
- assert A[i] < pv && pv < A[j-1];
- i := i + 1;
- j := j - 1;
- goto LoopHead;
-
- exit:
- assume i == j;
- result := i;
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// The partition step of Quick Sort picks a 'pivot' element from a specified subsection
+// of a given integer array. It then partially sorts the elements of the array so that
+// elements smaller than the pivot end up to the left of the pivot and elements larger
+// than the pivot end up to the right of the pivot. Finally, the index of the pivot is
+// returned.
+// The procedure below always picks the first element of the subregion as the pivot.
+// The specification of the procedure talks about the ordering of the elements, but
+// does not say anything about keeping the multiset of elements the same.
+
+var A: [int]int;
+const N: int;
+
+procedure Partition(l: int, r: int) returns (result: int)
+ requires 0 <= l && l+2 <= r && r <= N;
+ modifies A;
+ ensures l <= result && result < r;
+ ensures (forall k: int, j: int :: l <= k && k < result && result <= j && j < r ==> A[k] <= A[j]);
+ ensures (forall k: int :: l <= k && k < result ==> A[k] <= old(A)[l]);
+ ensures (forall k: int :: result <= k && k < r ==> old(A)[l] <= A[k]);
+{
+ var pv, i, j, tmp: int;
+
+ pv := A[l];
+ i := l;
+ j := r-1;
+ // swap A[l] and A[j]
+ tmp := A[l];
+ A[l] := A[j];
+ A[j] := tmp;
+ goto LoopHead;
+
+ // The following loop iterates while 'i < j'. In each iteration,
+ // one of the three alternatives (A, B, or C) is chosen in such
+ // a way that the assume statements will evaluate to true.
+ LoopHead:
+ // The following the assert statements give the loop invariant
+ assert (forall k: int :: l <= k && k < i ==> A[k] <= pv);
+ assert (forall k: int :: j <= k && k < r ==> pv <= A[k]);
+ assert l <= i && i <= j && j < r;
+ goto A, B, C, exit;
+
+ A:
+ assume i < j;
+ assume A[i] <= pv;
+ i := i + 1;
+ goto LoopHead;
+
+ B:
+ assume i < j;
+ assume pv <= A[j-1];
+ j := j - 1;
+ goto LoopHead;
+
+ C:
+ assume i < j;
+ assume A[j-1] < pv && pv < A[i];
+ // swap A[j-1] and A[i]
+ tmp := A[i];
+ A[i] := A[j-1];
+ A[j-1] := tmp;
+ assert A[i] < pv && pv < A[j-1];
+ i := i + 1;
+ j := j - 1;
+ goto LoopHead;
+
+ exit:
+ assume i == j;
+ result := i;
+}
diff --git a/Test/textbook/Find.bpl b/Test/textbook/Find.bpl
index 5a77c621..758ba4cc 100644
--- a/Test/textbook/Find.bpl
+++ b/Test/textbook/Find.bpl
@@ -1,40 +1,40 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// Declare a constant 'K' and a function 'f' and postulate that 'K' is
-// in the image of 'f'
-const K: int;
-function f(int) returns (int);
-axiom (exists k: int :: f(k) == K);
-
-// This procedure will find a domain value 'k' that 'f' maps to 'K'. It will
-// do that by recursively enlarging the range where no such domain value exists.
-// Note, Boogie does not prove termination.
-procedure Find(a: int, b: int) returns (k: int)
- requires a <= b;
- requires (forall j: int :: a < j && j < b ==> f(j) != K);
- ensures f(k) == K;
-{
- goto A, B, C; // nondeterministically choose one of these 3 goto targets
-
- A:
- assume f(a) == K; // assume we get here only if 'f' maps 'a' to 'K'
- k := a;
- return;
-
- B:
- assume f(b) == K; // assume we get here only if 'f' maps 'b' to 'K'
- k := b;
- return;
-
- C:
- assume f(a) != K && f(b) != K; // neither of the two above
- call k := Find(a-1, b+1);
- return;
-}
-
-// This procedure shows one way to call 'Find'
-procedure Main() returns (k: int)
- ensures f(k) == K;
-{
- call k := Find(0, 0);
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// Declare a constant 'K' and a function 'f' and postulate that 'K' is
+// in the image of 'f'
+const K: int;
+function f(int) returns (int);
+axiom (exists k: int :: f(k) == K);
+
+// This procedure will find a domain value 'k' that 'f' maps to 'K'. It will
+// do that by recursively enlarging the range where no such domain value exists.
+// Note, Boogie does not prove termination.
+procedure Find(a: int, b: int) returns (k: int)
+ requires a <= b;
+ requires (forall j: int :: a < j && j < b ==> f(j) != K);
+ ensures f(k) == K;
+{
+ goto A, B, C; // nondeterministically choose one of these 3 goto targets
+
+ A:
+ assume f(a) == K; // assume we get here only if 'f' maps 'a' to 'K'
+ k := a;
+ return;
+
+ B:
+ assume f(b) == K; // assume we get here only if 'f' maps 'b' to 'K'
+ k := b;
+ return;
+
+ C:
+ assume f(a) != K && f(b) != K; // neither of the two above
+ call k := Find(a-1, b+1);
+ return;
+}
+
+// This procedure shows one way to call 'Find'
+procedure Main() returns (k: int)
+ ensures f(k) == K;
+{
+ call k := Find(0, 0);
+}
diff --git a/Test/textbook/McCarthy-91.bpl b/Test/textbook/McCarthy-91.bpl
index 6bfbcb04..b4244b8d 100644
--- a/Test/textbook/McCarthy-91.bpl
+++ b/Test/textbook/McCarthy-91.bpl
@@ -1,14 +1,14 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// McCarthy 91 function
-procedure F(n: int) returns (r: int)
- ensures 100 < n ==> r == n - 10;
- ensures n <= 100 ==> r == 91;
-{
- if (100 < n) {
- r := n - 10;
- } else {
- call r := F(n + 11);
- call r := F(r);
- }
-}
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// McCarthy 91 function
+procedure F(n: int) returns (r: int)
+ ensures 100 < n ==> r == n - 10;
+ ensures n <= 100 ==> r == 91;
+{
+ if (100 < n) {
+ r := n - 10;
+ } else {
+ call r := F(n + 11);
+ call r := F(r);
+ }
+}
diff --git a/Test/textbook/TuringFactorial.bpl b/Test/textbook/TuringFactorial.bpl
index dffc36ab..de00e3c0 100644
--- a/Test/textbook/TuringFactorial.bpl
+++ b/Test/textbook/TuringFactorial.bpl
@@ -1,35 +1,35 @@
-// RUN: %boogie "%s" > "%t"
-// RUN: %diff "%s.expect" "%t"
-// A Boogie version of Turing's additive factorial program, from "Checking a large routine"
-// published in the "Report of a Conference of High Speed Automatic Calculating Machines",
-// pp. 67-69, 1949.
-
-procedure ComputeFactorial(n: int) returns (u: int)
- requires 1 <= n;
- ensures u == Factorial(n);
-{
- var r, v, s: int;
- r, u := 1, 1;
-TOP: // B
- assert r <= n;
- assert u == Factorial(r);
- v := u;
- if (n <= r) { return; }
- s := 1;
-INNER: // E
- assert s <= r;
- assert v == Factorial(r) && u == s * Factorial(r);
- u := u + v;
- s := s + 1;
- assert s - 1 <= r;
- if (s <= r) { goto INNER; }
- r := r + 1;
- goto TOP;
-}
-
-function Factorial(int): int;
-axiom Factorial(0) == 1;
-axiom (forall n: int :: {Factorial(n)} 1 <= n ==> Factorial(n) == n * Factorial_Aux(n-1));
-
-function Factorial_Aux(int): int;
-axiom (forall n: int :: {Factorial(n)} Factorial(n) == Factorial_Aux(n));
+// RUN: %boogie "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+// A Boogie version of Turing's additive factorial program, from "Checking a large routine"
+// published in the "Report of a Conference of High Speed Automatic Calculating Machines",
+// pp. 67-69, 1949.
+
+procedure ComputeFactorial(n: int) returns (u: int)
+ requires 1 <= n;
+ ensures u == Factorial(n);
+{
+ var r, v, s: int;
+ r, u := 1, 1;
+TOP: // B
+ assert r <= n;
+ assert u == Factorial(r);
+ v := u;
+ if (n <= r) { return; }
+ s := 1;
+INNER: // E
+ assert s <= r;
+ assert v == Factorial(r) && u == s * Factorial(r);
+ u := u + v;
+ s := s + 1;
+ assert s - 1 <= r;
+ if (s <= r) { goto INNER; }
+ r := r + 1;
+ goto TOP;
+}
+
+function Factorial(int): int;
+axiom Factorial(0) == 1;
+axiom (forall n: int :: {Factorial(n)} 1 <= n ==> Factorial(n) == n * Factorial_Aux(n-1));
+
+function Factorial_Aux(int): int;
+axiom (forall n: int :: {Factorial(n)} Factorial(n) == Factorial_Aux(n));
diff --git a/Test/unnecessaryassumes/unnecessaryassumes0.bpl b/Test/unnecessaryassumes/unnecessaryassumes0.bpl
new file mode 100644
index 00000000..a955495a
--- /dev/null
+++ b/Test/unnecessaryassumes/unnecessaryassumes0.bpl
@@ -0,0 +1,13 @@
+// RUN: %boogie /printNecessaryAssumes "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0(n: int)
+{
+ assume {:id "s0"} 0 < n;
+ assume {:id "s0"} 0 < n;
+}
+
+procedure test1(n: int)
+{
+ assume {:id "s0"} 0 < n;
+}
diff --git a/Test/unnecessaryassumes/unnecessaryassumes0.bpl.expect b/Test/unnecessaryassumes/unnecessaryassumes0.bpl.expect
new file mode 100644
index 00000000..9e420fa7
--- /dev/null
+++ b/Test/unnecessaryassumes/unnecessaryassumes0.bpl.expect
@@ -0,0 +1,3 @@
+unnecessaryassumes0.bpl(7,4): Error: more than one statement with same id: s0
+unnecessaryassumes0.bpl(12,4): Error: more than one statement with same id: s0
+2 name resolution errors detected in unnecessaryassumes0.bpl
diff --git a/Test/unnecessaryassumes/unnecessaryassumes1.bpl b/Test/unnecessaryassumes/unnecessaryassumes1.bpl
new file mode 100644
index 00000000..04226dfd
--- /dev/null
+++ b/Test/unnecessaryassumes/unnecessaryassumes1.bpl
@@ -0,0 +1,23 @@
+// RUN: %boogie /printNecessaryAssumes "%s" > "%t"
+// RUN: %diff "%s.expect" "%t"
+
+procedure test0(n: int)
+{
+ assume {:id "s0"} 0 < n;
+ assert 0 <= n; // verified under s0
+}
+
+procedure test1(n: int)
+{
+ assume 0 < n;
+ assume {:id "s1"} n == 3;
+ assert 0 <= n; // verified under true
+}
+
+procedure test2(n: int)
+{
+ assume 0 < n;
+ assume {:id "s2"} n <= 42;
+ assume {:id "s3"} 42 <= n;
+ assert n == 42; // verified under s2 and s3
+}
diff --git a/Test/og/Program3.bpl.expect b/Test/unnecessaryassumes/unnecessaryassumes1.bpl.expect
index 5b2909f1..0d3aeca2 100644
--- a/Test/og/Program3.bpl.expect
+++ b/Test/unnecessaryassumes/unnecessaryassumes1.bpl.expect
@@ -1,2 +1,3 @@
-
-Boogie program verifier finished with 3 verified, 0 errors
+Necessary assume command(s): s0, s2, s3
+
+Boogie program verifier finished with 3 verified, 0 errors
diff --git a/Test/z3api/Answer b/Test/z3api/Answer
index d18f12ef..6fa628b0 100644
--- a/Test/z3api/Answer
+++ b/Test/z3api/Answer
@@ -1,259 +1,259 @@
-
--------------------- boog0.bpl --------------------
-boog0.bpl(49,1): Error BP5003: A postcondition might not hold on this return path.
-boog0.bpl(43,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog0.bpl(46,7): anon0
-
-Boogie program verifier finished with 1 verified, 1 error
-
--------------------- boog1.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog2.bpl --------------------
-boog2.bpl(24,1): Error BP5003: A postcondition might not hold on this return path.
-boog2.bpl(20,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog2.bpl(23,8): anon0
-
-Boogie program verifier finished with 1 verified, 1 error
-
--------------------- boog3.bpl --------------------
-boog3.bpl(7,3): Error BP5001: This assertion might not hold.
-Execution trace:
- boog3.bpl(7,3): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog4.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog5.bpl --------------------
-boog5.bpl(37,3): Error BP5003: A postcondition might not hold on this return path.
-boog5.bpl(30,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog5.bpl(33,3): anon0
- boog5.bpl(36,13): anon3_Else
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog6.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog7.bpl --------------------
-boog7.bpl(18,1): Error BP5003: A postcondition might not hold on this return path.
-boog7.bpl(14,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog7.bpl(17,11): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog8.bpl --------------------
-boog8.bpl(23,1): Error BP5003: A postcondition might not hold on this return path.
-boog8.bpl(19,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog8.bpl(22,11): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog9.bpl --------------------
-boog9.bpl(20,1): Error BP5003: A postcondition might not hold on this return path.
-boog9.bpl(16,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog9.bpl(19,11): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog10.bpl --------------------
-boog10.bpl(19,3): Error BP5001: This assertion might not hold.
-Execution trace:
- boog10.bpl(19,3): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog11.bpl --------------------
-boog11.bpl(15,1): Error BP5003: A postcondition might not hold on this return path.
-boog11.bpl(11,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog11.bpl(14,8): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog12.bpl --------------------
-boog12.bpl(19,1): Error BP5003: A postcondition might not hold on this return path.
-boog12.bpl(14,3): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog12.bpl(17,16): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog13.bpl --------------------
-boog13.bpl(10,18): Error: more than one declaration of variable name: v
-1 name resolution errors detected in boog13.bpl
-
--------------------- boog14.bpl --------------------
-boog14.bpl(12,1): Error BP5003: A postcondition might not hold on this return path.
-boog14.bpl(9,1): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog14.bpl(11,8): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog15.bpl --------------------
-boog15.bpl(11,1): Error BP5003: A postcondition might not hold on this return path.
-boog15.bpl(8,1): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog15.bpl(10,8): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog16.bpl --------------------
-boog16.bpl(12,1): Error BP5003: A postcondition might not hold on this return path.
-boog16.bpl(9,1): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog16.bpl(11,8): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog17.bpl --------------------
-boog17.bpl(26,3): Error BP5001: This assertion might not hold.
-Execution trace:
- boog17.bpl(17,1): start
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog18.bpl --------------------
-boog18.bpl(16,1): Error BP5003: A postcondition might not hold on this return path.
-boog18.bpl(13,1): Related location: This is the postcondition that might not hold.
-Execution trace:
- boog18.bpl(15,4): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog19.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog20.bpl --------------------
-boog20.bpl(16,1): Error BP5001: This assertion might not hold.
-Execution trace:
- boog20.bpl(16,1): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog21.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog22.bpl --------------------
-boog22.bpl(5,9): Error: more than one declaration of function/procedure name: f1
-1 name resolution errors detected in boog22.bpl
-
--------------------- boog23.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog24.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog25.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog28.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog29.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog30.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog31.bpl --------------------
-boog31.bpl(13,1): Error BP5001: This assertion might not hold.
-Execution trace:
- boog31.bpl(13,1): anon0
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- boog34.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- boog35.bpl --------------------
-boog35.bpl(16,3): Error BP5001: This assertion might not hold.
-Execution trace:
- boog35.bpl(14,11): anon0
-
-Boogie program verifier finished with 1 verified, 1 error
-
--------------------- bar1.bpl --------------------
-bar1.bpl(25,1): Error BP5003: A postcondition might not hold on this return path.
-bar1.bpl(21,1): Related location: This is the postcondition that might not hold.
-Execution trace:
- bar1.bpl(24,3): anon0
- Inlined call to procedure foo begins
- bar1.bpl(13,5): anon0
- Inlined call to procedure bar begins
- bar1.bpl(7,5): anon0
- Inlined call to procedure bar ends
- Inlined call to procedure bar begins
- bar1.bpl(7,5): anon0
- Inlined call to procedure bar ends
- Inlined call to procedure foo ends
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- bar2.bpl --------------------
-bar2.bpl(21,3): Error BP5001: This assertion might not hold.
-Execution trace:
- bar2.bpl(19,3): anon0
- Inlined call to procedure foo begins
- bar2.bpl(5,3): anon0
- bar2.bpl(9,7): anon3_Else
- Inlined call to procedure foo ends
- Inlined call to procedure foo begins
- bar2.bpl(5,3): anon0
- bar2.bpl(6,7): anon3_Then
- Inlined call to procedure foo ends
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- bar3.bpl --------------------
-bar3.bpl(41,1): Error BP5003: A postcondition might not hold on this return path.
-bar3.bpl(34,1): Related location: This is the postcondition that might not hold.
-Execution trace:
- bar3.bpl(38,3): anon0
- Inlined call to procedure foo begins
- bar3.bpl(18,3): anon0
- bar3.bpl(24,7): anon3_Else
- Inlined call to procedure bar begins
- bar3.bpl(7,3): anon0
- bar3.bpl(10,7): anon3_Else
- Inlined call to procedure bar ends
- Inlined call to procedure bar begins
- bar3.bpl(7,3): anon0
- bar3.bpl(10,7): anon3_Else
- Inlined call to procedure bar ends
- Inlined call to procedure foo ends
- Inlined call to procedure bar begins
- bar3.bpl(7,3): anon0
- bar3.bpl(10,7): anon3_Else
- Inlined call to procedure bar ends
-
-Boogie program verifier finished with 0 verified, 1 error
-
--------------------- bar4.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
-
--------------------- bar6.bpl --------------------
-
-Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog0.bpl --------------------
+boog0.bpl(49,1): Error BP5003: A postcondition might not hold on this return path.
+boog0.bpl(43,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog0.bpl(46,7): anon0
+
+Boogie program verifier finished with 1 verified, 1 error
+
+-------------------- boog1.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog2.bpl --------------------
+boog2.bpl(24,1): Error BP5003: A postcondition might not hold on this return path.
+boog2.bpl(20,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog2.bpl(23,8): anon0
+
+Boogie program verifier finished with 1 verified, 1 error
+
+-------------------- boog3.bpl --------------------
+boog3.bpl(7,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ boog3.bpl(7,3): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog4.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog5.bpl --------------------
+boog5.bpl(37,3): Error BP5003: A postcondition might not hold on this return path.
+boog5.bpl(30,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog5.bpl(33,3): anon0
+ boog5.bpl(36,13): anon3_Else
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog6.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog7.bpl --------------------
+boog7.bpl(18,1): Error BP5003: A postcondition might not hold on this return path.
+boog7.bpl(14,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog7.bpl(17,11): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog8.bpl --------------------
+boog8.bpl(23,1): Error BP5003: A postcondition might not hold on this return path.
+boog8.bpl(19,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog8.bpl(22,11): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog9.bpl --------------------
+boog9.bpl(20,1): Error BP5003: A postcondition might not hold on this return path.
+boog9.bpl(16,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog9.bpl(19,11): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog10.bpl --------------------
+boog10.bpl(19,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ boog10.bpl(19,3): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog11.bpl --------------------
+boog11.bpl(15,1): Error BP5003: A postcondition might not hold on this return path.
+boog11.bpl(11,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog11.bpl(14,8): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog12.bpl --------------------
+boog12.bpl(19,1): Error BP5003: A postcondition might not hold on this return path.
+boog12.bpl(14,3): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog12.bpl(17,16): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog13.bpl --------------------
+boog13.bpl(10,18): Error: more than one declaration of variable name: v
+1 name resolution errors detected in boog13.bpl
+
+-------------------- boog14.bpl --------------------
+boog14.bpl(12,1): Error BP5003: A postcondition might not hold on this return path.
+boog14.bpl(9,1): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog14.bpl(11,8): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog15.bpl --------------------
+boog15.bpl(11,1): Error BP5003: A postcondition might not hold on this return path.
+boog15.bpl(8,1): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog15.bpl(10,8): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog16.bpl --------------------
+boog16.bpl(12,1): Error BP5003: A postcondition might not hold on this return path.
+boog16.bpl(9,1): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog16.bpl(11,8): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog17.bpl --------------------
+boog17.bpl(26,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ boog17.bpl(17,1): start
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog18.bpl --------------------
+boog18.bpl(16,1): Error BP5003: A postcondition might not hold on this return path.
+boog18.bpl(13,1): Related location: This is the postcondition that might not hold.
+Execution trace:
+ boog18.bpl(15,4): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog19.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog20.bpl --------------------
+boog20.bpl(16,1): Error BP5001: This assertion might not hold.
+Execution trace:
+ boog20.bpl(16,1): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog21.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog22.bpl --------------------
+boog22.bpl(5,9): Error: more than one declaration of function/procedure name: f1
+1 name resolution errors detected in boog22.bpl
+
+-------------------- boog23.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog24.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog25.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog28.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog29.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog30.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog31.bpl --------------------
+boog31.bpl(13,1): Error BP5001: This assertion might not hold.
+Execution trace:
+ boog31.bpl(13,1): anon0
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- boog34.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- boog35.bpl --------------------
+boog35.bpl(16,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ boog35.bpl(14,11): anon0
+
+Boogie program verifier finished with 1 verified, 1 error
+
+-------------------- bar1.bpl --------------------
+bar1.bpl(25,1): Error BP5003: A postcondition might not hold on this return path.
+bar1.bpl(21,1): Related location: This is the postcondition that might not hold.
+Execution trace:
+ bar1.bpl(24,3): anon0
+ Inlined call to procedure foo begins
+ bar1.bpl(13,5): anon0
+ Inlined call to procedure bar begins
+ bar1.bpl(7,5): anon0
+ Inlined call to procedure bar ends
+ Inlined call to procedure bar begins
+ bar1.bpl(7,5): anon0
+ Inlined call to procedure bar ends
+ Inlined call to procedure foo ends
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- bar2.bpl --------------------
+bar2.bpl(21,3): Error BP5001: This assertion might not hold.
+Execution trace:
+ bar2.bpl(19,3): anon0
+ Inlined call to procedure foo begins
+ bar2.bpl(5,3): anon0
+ bar2.bpl(9,7): anon3_Else
+ Inlined call to procedure foo ends
+ Inlined call to procedure foo begins
+ bar2.bpl(5,3): anon0
+ bar2.bpl(6,7): anon3_Then
+ Inlined call to procedure foo ends
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- bar3.bpl --------------------
+bar3.bpl(41,1): Error BP5003: A postcondition might not hold on this return path.
+bar3.bpl(34,1): Related location: This is the postcondition that might not hold.
+Execution trace:
+ bar3.bpl(38,3): anon0
+ Inlined call to procedure foo begins
+ bar3.bpl(18,3): anon0
+ bar3.bpl(24,7): anon3_Else
+ Inlined call to procedure bar begins
+ bar3.bpl(7,3): anon0
+ bar3.bpl(10,7): anon3_Else
+ Inlined call to procedure bar ends
+ Inlined call to procedure bar begins
+ bar3.bpl(7,3): anon0
+ bar3.bpl(10,7): anon3_Else
+ Inlined call to procedure bar ends
+ Inlined call to procedure foo ends
+ Inlined call to procedure bar begins
+ bar3.bpl(7,3): anon0
+ bar3.bpl(10,7): anon3_Else
+ Inlined call to procedure bar ends
+
+Boogie program verifier finished with 0 verified, 1 error
+
+-------------------- bar4.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
+
+-------------------- bar6.bpl --------------------
+
+Boogie program verifier finished with 1 verified, 0 errors
diff --git a/Test/z3api/Boog24.bpl b/Test/z3api/Boog24.bpl
index d3da775d..05da0153 100644
--- a/Test/z3api/Boog24.bpl
+++ b/Test/z3api/Boog24.bpl
@@ -1,17 +1,17 @@
-type ref;
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-procedure main ( )
-
-{
-var a : int;
-var b : int;
-var c : int;
-
-c := LIFT (b < a) ;
-assert (c != 0 <==> b < a);
-
-}
-
+type ref;
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+procedure main ( )
+
+{
+var a : int;
+var b : int;
+var c : int;
+
+c := LIFT (b < a) ;
+assert (c != 0 <==> b < a);
+
+}
+
diff --git a/Test/z3api/bar1.bpl b/Test/z3api/bar1.bpl
index 845954d5..b22f0237 100644
--- a/Test/z3api/bar1.bpl
+++ b/Test/z3api/bar1.bpl
@@ -1,26 +1,26 @@
-var x: int;
-var y: int;
-
-procedure {:inline 1} bar()
-modifies y;
-{
- y := y + 1;
-}
-
-procedure {:inline 1} foo()
-modifies x, y;
-{
- x := x + 1;
- call bar();
- call bar();
- x := x + 1;
-}
-
-procedure main()
-requires x == y;
-ensures x != y;
-modifies x, y;
-{
- call foo();
-}
-
+var x: int;
+var y: int;
+
+procedure {:inline 1} bar()
+modifies y;
+{
+ y := y + 1;
+}
+
+procedure {:inline 1} foo()
+modifies x, y;
+{
+ x := x + 1;
+ call bar();
+ call bar();
+ x := x + 1;
+}
+
+procedure main()
+requires x == y;
+ensures x != y;
+modifies x, y;
+{
+ call foo();
+}
+
diff --git a/Test/z3api/bar2.bpl b/Test/z3api/bar2.bpl
index 76991a8f..6a7d4ed9 100644
--- a/Test/z3api/bar2.bpl
+++ b/Test/z3api/bar2.bpl
@@ -1,24 +1,24 @@
-
-procedure {:inline 1} foo() returns (x: bool)
-{
- var b: bool;
- if (b) {
- x := false;
- return;
- } else {
- x := true;
- return;
- }
-}
-
-procedure main()
-{
- var b1: bool;
- var b2: bool;
-
- call b1 := foo();
- call b2 := foo();
- assert b1 == b2;
-}
-
-
+
+procedure {:inline 1} foo() returns (x: bool)
+{
+ var b: bool;
+ if (b) {
+ x := false;
+ return;
+ } else {
+ x := true;
+ return;
+ }
+}
+
+procedure main()
+{
+ var b1: bool;
+ var b2: bool;
+
+ call b1 := foo();
+ call b2 := foo();
+ assert b1 == b2;
+}
+
+
diff --git a/Test/z3api/bar3.bpl b/Test/z3api/bar3.bpl
index 7bd91184..17fc79c3 100644
--- a/Test/z3api/bar3.bpl
+++ b/Test/z3api/bar3.bpl
@@ -1,41 +1,41 @@
-var y: int;
-var x: int;
-
-procedure {:inline 1} bar(b: bool)
-modifies y;
-{
- if (b) {
- y := y + 1;
- } else {
- y := y - 1;
- }
-}
-
-procedure {:inline 1} foo()
-modifies x, y;
-{
- var b: bool;
- if (b) {
- x := x + 1;
- call bar(true);
- call bar(true);
- x := x + 1;
- } else {
- x := x - 1;
- call bar(false);
- call bar(false);
- x := x - 1;
- }
-}
-
-
-procedure main()
-requires x == y;
-ensures x == y;
-modifies x, y;
-modifies y;
-{
- call foo();
- assert x == y;
- call bar(false);
-}
+var y: int;
+var x: int;
+
+procedure {:inline 1} bar(b: bool)
+modifies y;
+{
+ if (b) {
+ y := y + 1;
+ } else {
+ y := y - 1;
+ }
+}
+
+procedure {:inline 1} foo()
+modifies x, y;
+{
+ var b: bool;
+ if (b) {
+ x := x + 1;
+ call bar(true);
+ call bar(true);
+ x := x + 1;
+ } else {
+ x := x - 1;
+ call bar(false);
+ call bar(false);
+ x := x - 1;
+ }
+}
+
+
+procedure main()
+requires x == y;
+ensures x == y;
+modifies x, y;
+modifies y;
+{
+ call foo();
+ assert x == y;
+ call bar(false);
+}
diff --git a/Test/z3api/bar4.bpl b/Test/z3api/bar4.bpl
index 84640811..f13ce0dd 100644
--- a/Test/z3api/bar4.bpl
+++ b/Test/z3api/bar4.bpl
@@ -1,38 +1,38 @@
-var y: int;
-var x: int;
-
-procedure {:inline 1} bar() returns (b: bool)
-modifies y;
-{
- if (b) {
- y := y + 1;
- } else {
- y := y - 1;
- }
-}
-
-procedure {:inline 1} foo()
-modifies x, y;
-{
- var b: bool;
-
- call b := bar();
- if (b) {
- x := x + 1;
- } else {
- x := x - 1;
- }
-}
-
-
-procedure main() returns (b: bool)
-requires x == y;
-ensures !b ==> x == y+1;
-ensures b ==> x+1 == y;
-modifies x, y;
-modifies y;
-{
- call foo();
- assert x == y;
- call b := bar();
-}
+var y: int;
+var x: int;
+
+procedure {:inline 1} bar() returns (b: bool)
+modifies y;
+{
+ if (b) {
+ y := y + 1;
+ } else {
+ y := y - 1;
+ }
+}
+
+procedure {:inline 1} foo()
+modifies x, y;
+{
+ var b: bool;
+
+ call b := bar();
+ if (b) {
+ x := x + 1;
+ } else {
+ x := x - 1;
+ }
+}
+
+
+procedure main() returns (b: bool)
+requires x == y;
+ensures !b ==> x == y+1;
+ensures b ==> x+1 == y;
+modifies x, y;
+modifies y;
+{
+ call foo();
+ assert x == y;
+ call b := bar();
+}
diff --git a/Test/z3api/bar6.bpl b/Test/z3api/bar6.bpl
index e133aef7..b0f72767 100644
--- a/Test/z3api/bar6.bpl
+++ b/Test/z3api/bar6.bpl
@@ -1,36 +1,36 @@
-var M: [int]int;
-
-procedure {:inline 1} bar(y: int) returns (b: bool)
-modifies M;
-{
- if (b) {
- M[y] := M[y] + 1;
- } else {
- M[y] := M[y] - 1;
- }
-}
-
-procedure {:inline 1} foo(x: int, y: int)
-modifies M;
-{
- var b: bool;
-
- call b := bar(y);
- if (b) {
- M[x] := M[x] + 1;
- } else {
- M[x] := M[x] - 1;
- }
-}
-
-procedure main(x: int, y: int) returns (b: bool)
-requires x != y;
-requires M[x] == M[y];
-ensures !b ==> M[x] == M[y]+1;
-ensures b ==> M[x]+1 == M[y];
-modifies M;
-{
- call foo(x, y);
- assert M[x] == M[y];
- call b := bar(y);
-}
+var M: [int]int;
+
+procedure {:inline 1} bar(y: int) returns (b: bool)
+modifies M;
+{
+ if (b) {
+ M[y] := M[y] + 1;
+ } else {
+ M[y] := M[y] - 1;
+ }
+}
+
+procedure {:inline 1} foo(x: int, y: int)
+modifies M;
+{
+ var b: bool;
+
+ call b := bar(y);
+ if (b) {
+ M[x] := M[x] + 1;
+ } else {
+ M[x] := M[x] - 1;
+ }
+}
+
+procedure main(x: int, y: int) returns (b: bool)
+requires x != y;
+requires M[x] == M[y];
+ensures !b ==> M[x] == M[y]+1;
+ensures b ==> M[x]+1 == M[y];
+modifies M;
+{
+ call foo(x, y);
+ assert M[x] == M[y];
+ call b := bar(y);
+}
diff --git a/Test/z3api/boog0.bpl b/Test/z3api/boog0.bpl
index 4206152b..7681589a 100644
--- a/Test/z3api/boog0.bpl
+++ b/Test/z3api/boog0.bpl
@@ -1,49 +1,49 @@
-type ref;
-type Wicket;
-const w: Wicket;
-var favorite: Wicket;
-function age(Wicket) returns (int);
-
-axiom age(w)==7;
-
-procedure NewFavorite(p: Wicket);
- modifies favorite;
-
- ensures favorite==p;
-
-implementation NewFavorite(l: Wicket) {
- favorite:=l;
-}
-
-const myBool: bool;
-const myRef: ref;
-const v: Wicket;
-
-axiom 7 < 8;
-axiom 7 <= 8;
-axiom 8 > 7;
-axiom 8 >= 7;
-axiom 6 != 7;
-
-axiom 7+1==8;
-axiom 8-1==7;
-axiom 7/1==7;
-axiom 7%2==1;
-axiom 4*2==8;
-
-axiom ((7==7) || (8==8));
-axiom ((7==7) ==> (7<8));
-axiom ((7==7) <==> (10==10));
-axiom ((7==7) && (8==8));
-
-var favorite2: Wicket;
-procedure SwapFavorites()
- modifies favorite,favorite2;
-
- ensures (favorite==old(favorite2)) && (favorite2==old(favorite));
-{
- var temp: Wicket;
- temp:=favorite;
- favorite:=favorite2;
- // favorite2:=temp; // commenting this line seeds a bug
-}
+type ref;
+type Wicket;
+const w: Wicket;
+var favorite: Wicket;
+function age(Wicket) returns (int);
+
+axiom age(w)==7;
+
+procedure NewFavorite(p: Wicket);
+ modifies favorite;
+
+ ensures favorite==p;
+
+implementation NewFavorite(l: Wicket) {
+ favorite:=l;
+}
+
+const myBool: bool;
+const myRef: ref;
+const v: Wicket;
+
+axiom 7 < 8;
+axiom 7 <= 8;
+axiom 8 > 7;
+axiom 8 >= 7;
+axiom 6 != 7;
+
+axiom 7+1==8;
+axiom 8-1==7;
+axiom 7/1==7;
+axiom 7%2==1;
+axiom 4*2==8;
+
+axiom ((7==7) || (8==8));
+axiom ((7==7) ==> (7<8));
+axiom ((7==7) <==> (10==10));
+axiom ((7==7) && (8==8));
+
+var favorite2: Wicket;
+procedure SwapFavorites()
+ modifies favorite,favorite2;
+
+ ensures (favorite==old(favorite2)) && (favorite2==old(favorite));
+{
+ var temp: Wicket;
+ temp:=favorite;
+ favorite:=favorite2;
+ // favorite2:=temp; // commenting this line seeds a bug
+}
diff --git a/Test/z3api/boog1.bpl b/Test/z3api/boog1.bpl
index 9f4d2349..7fd54c4c 100644
--- a/Test/z3api/boog1.bpl
+++ b/Test/z3api/boog1.bpl
@@ -1,18 +1,18 @@
-type ref;
-type Wicket;
-const w: Wicket;
-var favorite: Wicket;
-
-function age(Wicket) returns (int);
-
-axiom age(w)==7;
-
-procedure NewFavorite(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation NewFavorite(l: Wicket) {
- favorite:=l;
+type ref;
+type Wicket;
+const w: Wicket;
+var favorite: Wicket;
+
+function age(Wicket) returns (int);
+
+axiom age(w)==7;
+
+procedure NewFavorite(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation NewFavorite(l: Wicket) {
+ favorite:=l;
} \ No newline at end of file
diff --git a/Test/z3api/boog10.bpl b/Test/z3api/boog10.bpl
index 075432d7..628d275f 100644
--- a/Test/z3api/boog10.bpl
+++ b/Test/z3api/boog10.bpl
@@ -1,24 +1,24 @@
-type ref;
-// types
-type Color;
-const unique red: Color;
-const unique blue: Color;
-const unique green: Color;
-
-axiom (forall ce:Color :: ce==red || ce==blue || ce==green);
-var myColor: Color;
-
-// procedure
-procedure SetTo(c: Color);
- modifies myColor
-;
-
- ensures myColor==c;
-
-implementation SetTo(c: Color) {
- assert (blue==green);
- myColor:=blue;
-}
-
-
-
+type ref;
+// types
+type Color;
+const unique red: Color;
+const unique blue: Color;
+const unique green: Color;
+
+axiom (forall ce:Color :: ce==red || ce==blue || ce==green);
+var myColor: Color;
+
+// procedure
+procedure SetTo(c: Color);
+ modifies myColor
+;
+
+ ensures myColor==c;
+
+implementation SetTo(c: Color) {
+ assert (blue==green);
+ myColor:=blue;
+}
+
+
+
diff --git a/Test/z3api/boog11.bpl b/Test/z3api/boog11.bpl
index 5b83de6a..c6e4f5f0 100644
--- a/Test/z3api/boog11.bpl
+++ b/Test/z3api/boog11.bpl
@@ -1,18 +1,18 @@
-type ref;
-// types
-const top: ref;
-var myRef: ref;
-
-// procedure
-procedure SetTo(r: ref);
- modifies myRef
-;
-
- ensures myRef==r;
-
-implementation SetTo(c: ref) {
- myRef:=top;
-}
-
-
-
+type ref;
+// types
+const top: ref;
+var myRef: ref;
+
+// procedure
+procedure SetTo(r: ref);
+ modifies myRef
+;
+
+ ensures myRef==r;
+
+implementation SetTo(c: ref) {
+ myRef:=top;
+}
+
+
+
diff --git a/Test/z3api/boog12.bpl b/Test/z3api/boog12.bpl
index c277a674..fe3803e9 100644
--- a/Test/z3api/boog12.bpl
+++ b/Test/z3api/boog12.bpl
@@ -1,22 +1,22 @@
-type ref;
-// types
-type Color;
-const blue: Color;
-
-var myArray:[int] Color;
-var myMatrix:[int,int] Color;
-
-// procedure
-procedure SetTo(c: Color);
- modifies myArray, myMatrix
-;
-
- ensures myArray[0]==c;
-
-implementation SetTo(c: Color) {
- myMatrix[0,1]:=c;
- myArray[0]:=blue;
-}
-
-
-
+type ref;
+// types
+type Color;
+const blue: Color;
+
+var myArray:[int] Color;
+var myMatrix:[int,int] Color;
+
+// procedure
+procedure SetTo(c: Color);
+ modifies myArray, myMatrix
+;
+
+ ensures myArray[0]==c;
+
+implementation SetTo(c: Color) {
+ myMatrix[0,1]:=c;
+ myArray[0]:=blue;
+}
+
+
+
diff --git a/Test/z3api/boog13.bpl b/Test/z3api/boog13.bpl
index 9cd873c6..3fe58fd7 100644
--- a/Test/z3api/boog13.bpl
+++ b/Test/z3api/boog13.bpl
@@ -1,28 +1,28 @@
-type ref;
-// types
-type Wicket;
-var favorite: Wicket;
-var v: Wicket;
-
-function age(w:Wicket) returns (int);
-
-axiom (exists v:Wicket :: age(v)<8 &&
- (forall v:Wicket
- :: age(v)==7)
-
- );
-
-
-// procedure
-procedure SetToSeven(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation SetToSeven(l: Wicket) {
- favorite:=favorite;
-}
-
-
-
+type ref;
+// types
+type Wicket;
+var favorite: Wicket;
+var v: Wicket;
+
+function age(w:Wicket) returns (int);
+
+axiom (exists v:Wicket :: age(v)<8 &&
+ (forall v:Wicket
+ :: age(v)==7)
+
+ );
+
+
+// procedure
+procedure SetToSeven(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation SetToSeven(l: Wicket) {
+ favorite:=favorite;
+}
+
+
+
diff --git a/Test/z3api/boog14.bpl b/Test/z3api/boog14.bpl
index 41450d85..40526011 100644
--- a/Test/z3api/boog14.bpl
+++ b/Test/z3api/boog14.bpl
@@ -1,12 +1,12 @@
-type ref;
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-
-
-var myInt:int;
-procedure main()
-modifies myInt;
-ensures myInt==5;
-{
- myInt:=4;
+type ref;
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+
+
+var myInt:int;
+procedure main()
+modifies myInt;
+ensures myInt==5;
+{
+ myInt:=4;
} \ No newline at end of file
diff --git a/Test/z3api/boog15.bpl b/Test/z3api/boog15.bpl
index 428c0f6e..5c3eb0e5 100644
--- a/Test/z3api/boog15.bpl
+++ b/Test/z3api/boog15.bpl
@@ -1,11 +1,11 @@
-type ref;
-function AtLeast(int, int) returns ([int]bool);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-
-var myInt:int;
-procedure main()
-modifies myInt;
-ensures myInt==5;
-{
- myInt:=4;
+type ref;
+function AtLeast(int, int) returns ([int]bool);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+
+var myInt:int;
+procedure main()
+modifies myInt;
+ensures myInt==5;
+{
+ myInt:=4;
} \ No newline at end of file
diff --git a/Test/z3api/boog16.bpl b/Test/z3api/boog16.bpl
index a002c166..6e741cbf 100644
--- a/Test/z3api/boog16.bpl
+++ b/Test/z3api/boog16.bpl
@@ -1,12 +1,12 @@
-type ref;
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int ::
- {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-var myInt:int;
-procedure main()
-modifies myInt;
-ensures myInt==5;
-{
- myInt:=4;
+type ref;
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int ::
+ {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+var myInt:int;
+procedure main()
+modifies myInt;
+ensures myInt==5;
+{
+ myInt:=4;
} \ No newline at end of file
diff --git a/Test/z3api/boog17.bpl b/Test/z3api/boog17.bpl
index 89159af1..24d87dc7 100644
--- a/Test/z3api/boog17.bpl
+++ b/Test/z3api/boog17.bpl
@@ -1,27 +1,27 @@
-type name;
-type ref;
-const unique g : int;
-axiom(g != 0);
-
-const unique PINT4_name:name;
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function HasType(v:int, t:name) returns (bool);
-
-
-procedure main ( ) returns ($result.main$11.5$1$:int) {
- var p : int;
-
-start:
- assume(HasType(p, PINT4_name));
- goto label_3;
-
-label_3:
- goto label_4;
-
-label_4:
- p := PLUS(g, 4, 55) ;
- assert(HasType(p, PINT4_name));
+type name;
+type ref;
+const unique g : int;
+axiom(g != 0);
+
+const unique PINT4_name:name;
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function HasType(v:int, t:name) returns (bool);
+
+
+procedure main ( ) returns ($result.main$11.5$1$:int) {
+ var p : int;
+
+start:
+ assume(HasType(p, PINT4_name));
+ goto label_3;
+
+label_3:
+ goto label_4;
+
+label_4:
+ p := PLUS(g, 4, 55) ;
+ assert(HasType(p, PINT4_name));
} \ No newline at end of file
diff --git a/Test/z3api/boog18.bpl b/Test/z3api/boog18.bpl
index 35f7d48a..996b502e 100644
--- a/Test/z3api/boog18.bpl
+++ b/Test/z3api/boog18.bpl
@@ -1,16 +1,16 @@
-type ref;
-const A100INT4_name:int;
-
-function Match(a:int, t:int) returns (int);
-function Array(int, int, int) returns (bool);
-
-axiom(forall a:int :: {Match(a, A100INT4_name)} Array(a, 4, 100));
-
-const myNull: int;
-var p: int;
-procedure main()
-modifies p;
-ensures p!=myNull;
-{
- p:=myNull;
+type ref;
+const A100INT4_name:int;
+
+function Match(a:int, t:int) returns (int);
+function Array(int, int, int) returns (bool);
+
+axiom(forall a:int :: {Match(a, A100INT4_name)} Array(a, 4, 100));
+
+const myNull: int;
+var p: int;
+procedure main()
+modifies p;
+ensures p!=myNull;
+{
+ p:=myNull;
} \ No newline at end of file
diff --git a/Test/z3api/boog19.bpl b/Test/z3api/boog19.bpl
index 178bb04f..6e4f47ac 100644
--- a/Test/z3api/boog19.bpl
+++ b/Test/z3api/boog19.bpl
@@ -1,230 +1,230 @@
-type name;
-type ref;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), S[x]} S[x] ==> Union(S,T)[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), T[x]} T[x] ==> Union(S,T)[x]);
-
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), S[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), T[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
-
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T), S[x]} S[x] ==> Difference(S,T)[x] || T[x]);
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Disjoint(S,T), T[x]} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name) returns (bool);
-function Values(t:name) returns ([int]bool);
-
-axiom(forall v:int, t:name :: {Values(t)[v]} Values(t)[v] ==> HasType(v, t));
-axiom(forall v:int, t:name :: {HasType(v, t), Values(t)} HasType(v, t) ==> Values(t)[v]);
-
-// Field declarations
-
-
-// Type declarations
-
-const unique A100INT4_name:name;
-const unique INT4_name:name;
-const unique PA100INT4_name:name;
-const unique PINT4_name:name;
-const unique PPINT4_name:name;
-
-// Field definitions
-
-// Type definitions
-
-axiom(forall a:int :: {Match(a, A100INT4_name)} Subset(Empty(), Array(a, 4, 100)));
-axiom(forall a:int, e:int :: {Match(a, A100INT4_name), Array(a, 4, 100)[e]}
- Match(a, A100INT4_name) && Array(a, 4, 100)[e] ==> Match(e, INT4_name));
-
-axiom(forall a:int :: {Match(a, INT4_name)}
- Match(a, INT4_name) <==> Field(a) == INT4_name);
-axiom(forall v:int :: HasType(v, INT4_name));
-
-axiom(forall a:int :: {Match(a, PA100INT4_name)}
- Match(a, PA100INT4_name) <==> Field(a) == PA100INT4_name);
-axiom(forall v:int :: {HasType(v, PA100INT4_name)} {Match(v, A100INT4_name)}
- HasType(v, PA100INT4_name) <==> (v == 0 || (v > 0 && Match(v, A100INT4_name))));
-
-axiom(forall a:int :: {Match(a, PINT4_name)}
- Match(a, PINT4_name) <==> Field(a) == PINT4_name);
-axiom(forall v:int :: {HasType(v, PINT4_name)} {Match(v, INT4_name)}
- HasType(v, PINT4_name) <==> (v == 0 || (v > 0 && Match(v, INT4_name))));
-
-axiom(forall a:int :: {Match(a, PPINT4_name)}
- Match(a, PPINT4_name) <==> Field(a) == PPINT4_name);
-axiom(forall v:int :: {HasType(v, PPINT4_name)} {Match(v, PINT4_name)}
- HasType(v, PPINT4_name) <==> (v == 0 || (v > 0 && Match(v, PINT4_name))));
-
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom(forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-/*
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-*/
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-const unique g : int;
-axiom(g != 0);
-
-
-procedure main ( ) returns ($result.main$11.5$1$:int)
-
-//TAG: requires __objectOf(g) != 0
-requires(Base(g) != 0);
-
-//TAG: requires __allocated(g)
-requires(alloc[Base(g)] == ALLOCATED);
-
-//TAG: requires __allocated(g + 55)
-requires(alloc[Base(PLUS(g, 4, 55))] == ALLOCATED);
-
-//TAG: Type Safety Precondition
-requires(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-requires(HasType(g, PA100INT4_name));
-
-{
-var p : int;
-
-assume(HasType(p, PINT4_name));
-p := PLUS(g, 4, 55) ;
-assert(HasType(p, PINT4_name));
-
-}
-
+type name;
+type ref;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), S[x]} S[x] ==> Union(S,T)[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), T[x]} T[x] ==> Union(S,T)[x]);
+
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), S[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), T[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
+
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T), S[x]} S[x] ==> Difference(S,T)[x] || T[x]);
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Disjoint(S,T), T[x]} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name) returns (bool);
+function Values(t:name) returns ([int]bool);
+
+axiom(forall v:int, t:name :: {Values(t)[v]} Values(t)[v] ==> HasType(v, t));
+axiom(forall v:int, t:name :: {HasType(v, t), Values(t)} HasType(v, t) ==> Values(t)[v]);
+
+// Field declarations
+
+
+// Type declarations
+
+const unique A100INT4_name:name;
+const unique INT4_name:name;
+const unique PA100INT4_name:name;
+const unique PINT4_name:name;
+const unique PPINT4_name:name;
+
+// Field definitions
+
+// Type definitions
+
+axiom(forall a:int :: {Match(a, A100INT4_name)} Subset(Empty(), Array(a, 4, 100)));
+axiom(forall a:int, e:int :: {Match(a, A100INT4_name), Array(a, 4, 100)[e]}
+ Match(a, A100INT4_name) && Array(a, 4, 100)[e] ==> Match(e, INT4_name));
+
+axiom(forall a:int :: {Match(a, INT4_name)}
+ Match(a, INT4_name) <==> Field(a) == INT4_name);
+axiom(forall v:int :: HasType(v, INT4_name));
+
+axiom(forall a:int :: {Match(a, PA100INT4_name)}
+ Match(a, PA100INT4_name) <==> Field(a) == PA100INT4_name);
+axiom(forall v:int :: {HasType(v, PA100INT4_name)} {Match(v, A100INT4_name)}
+ HasType(v, PA100INT4_name) <==> (v == 0 || (v > 0 && Match(v, A100INT4_name))));
+
+axiom(forall a:int :: {Match(a, PINT4_name)}
+ Match(a, PINT4_name) <==> Field(a) == PINT4_name);
+axiom(forall v:int :: {HasType(v, PINT4_name)} {Match(v, INT4_name)}
+ HasType(v, PINT4_name) <==> (v == 0 || (v > 0 && Match(v, INT4_name))));
+
+axiom(forall a:int :: {Match(a, PPINT4_name)}
+ Match(a, PPINT4_name) <==> Field(a) == PPINT4_name);
+axiom(forall v:int :: {HasType(v, PPINT4_name)} {Match(v, PINT4_name)}
+ HasType(v, PPINT4_name) <==> (v == 0 || (v > 0 && Match(v, PINT4_name))));
+
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom(forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+/*
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+*/
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+const unique g : int;
+axiom(g != 0);
+
+
+procedure main ( ) returns ($result.main$11.5$1$:int)
+
+//TAG: requires __objectOf(g) != 0
+requires(Base(g) != 0);
+
+//TAG: requires __allocated(g)
+requires(alloc[Base(g)] == ALLOCATED);
+
+//TAG: requires __allocated(g + 55)
+requires(alloc[Base(PLUS(g, 4, 55))] == ALLOCATED);
+
+//TAG: Type Safety Precondition
+requires(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+requires(HasType(g, PA100INT4_name));
+
+{
+var p : int;
+
+assume(HasType(p, PINT4_name));
+p := PLUS(g, 4, 55) ;
+assert(HasType(p, PINT4_name));
+
+}
+
diff --git a/Test/z3api/boog2.bpl b/Test/z3api/boog2.bpl
index 315c51af..812c4054 100644
--- a/Test/z3api/boog2.bpl
+++ b/Test/z3api/boog2.bpl
@@ -1,24 +1,24 @@
-type ref;
-type Wicket;
-
-var favorite: Wicket;
-var hate: Wicket;
-
-procedure NewFavorite(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation NewFavorite(l: Wicket) {
- favorite:=l;
-}
-
-
-procedure Swap();
- modifies favorite,hate;
- ensures favorite==old(hate);
-
-implementation Swap() {
- hate := favorite;
+type ref;
+type Wicket;
+
+var favorite: Wicket;
+var hate: Wicket;
+
+procedure NewFavorite(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation NewFavorite(l: Wicket) {
+ favorite:=l;
+}
+
+
+procedure Swap();
+ modifies favorite,hate;
+ ensures favorite==old(hate);
+
+implementation Swap() {
+ hate := favorite;
} \ No newline at end of file
diff --git a/Test/z3api/boog20.bpl b/Test/z3api/boog20.bpl
index 10181400..bfcf5f63 100644
--- a/Test/z3api/boog20.bpl
+++ b/Test/z3api/boog20.bpl
@@ -1,18 +1,18 @@
-type ref;
-
-function PLUS(int, int, int) returns (int);
-function Rep(int, int) returns (int);
-
-//PLUS(a,b,z)
-// ERROR
-
-axiom(forall a:int, b:int, z:int :: Rep(a,b) == Rep(a,0));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) == x));
-// END ERROR
-
-
-procedure main ( )
-{
-assert (PLUS(0, 4, 55)!=0);
-}
-
+type ref;
+
+function PLUS(int, int, int) returns (int);
+function Rep(int, int) returns (int);
+
+//PLUS(a,b,z)
+// ERROR
+
+axiom(forall a:int, b:int, z:int :: Rep(a,b) == Rep(a,0));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) == x));
+// END ERROR
+
+
+procedure main ( )
+{
+assert (PLUS(0, 4, 55)!=0);
+}
+
diff --git a/Test/z3api/boog21.bpl b/Test/z3api/boog21.bpl
index 8e3abde7..dd3ecc76 100644
--- a/Test/z3api/boog21.bpl
+++ b/Test/z3api/boog21.bpl
@@ -1,19 +1,19 @@
-type ref;
-
-function PLUS(int, int, int) returns (int);
-function Rep(int,int) returns (int);
-
-
-// ERROR
-
-axiom(forall a:int, b:int, z:int :: Rep(a,b) == PLUS(a,b,z
-));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) == x));
-// END ERROR
-
-
-procedure main ( )
-{
-assert (PLUS(0, 4, 55)!=0);
-}
-
+type ref;
+
+function PLUS(int, int, int) returns (int);
+function Rep(int,int) returns (int);
+
+
+// ERROR
+
+axiom(forall a:int, b:int, z:int :: Rep(a,b) == PLUS(a,b,z
+));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) == x));
+// END ERROR
+
+
+procedure main ( )
+{
+assert (PLUS(0, 4, 55)!=0);
+}
+
diff --git a/Test/z3api/boog22.bpl b/Test/z3api/boog22.bpl
index c255a3c5..d1b9bc0f 100644
--- a/Test/z3api/boog22.bpl
+++ b/Test/z3api/boog22.bpl
@@ -1,11 +1,11 @@
-type ref;
-type W;
-
-function f1(W,int) returns (int);
-function f1(W,int,int) returns (int);
-
-procedure main()
-{
- var w: W;
- assert(f1(w,0)==f1(w,0,0));
+type ref;
+type W;
+
+function f1(W,int) returns (int);
+function f1(W,int,int) returns (int);
+
+procedure main()
+{
+ var w: W;
+ assert(f1(w,0)==f1(w,0,0));
} \ No newline at end of file
diff --git a/Test/z3api/boog23.bpl b/Test/z3api/boog23.bpl
index 4e0fc4d0..346f39d9 100644
--- a/Test/z3api/boog23.bpl
+++ b/Test/z3api/boog23.bpl
@@ -1,412 +1,412 @@
-type name;
-type ref;
-type byte;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), S[x]} S[x] ==> Union(S,T)[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), T[x]} T[x] ==> Union(S,T)[x]);
-
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), S[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), T[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
-
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T), S[x]} S[x] ==> Difference(S,T)[x] || T[x]);
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Disjoint(S,T), T[x]} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name) returns (bool);
-function Values(t:name) returns ([int]bool);
-
-axiom(forall v:int, t:name :: {Values(t)[v]} Values(t)[v] ==> HasType(v, t));
-axiom(forall v:int, t:name :: {HasType(v, t), Values(t)} HasType(v, t) ==> Values(t)[v]);
-
-// Field declarations
-
-
-// Type declarations
-
-const unique INT4_name:name;
-const unique PINT4_name:name;
-
-// Field definitions
-
-// Type definitions
-
-axiom(forall a:int :: {Match(a, INT4_name)}
- Match(a, INT4_name) <==> Field(a) == INT4_name);
-axiom(forall v:int :: HasType(v, INT4_name));
-
-axiom(forall a:int :: {Match(a, PINT4_name)}
- Match(a, PINT4_name) <==> Field(a) == PINT4_name);
-axiom(forall v:int :: {HasType(v, PINT4_name)} {Match(v, INT4_name)}
- HasType(v, PINT4_name) <==> (v == 0 || (v > 0 && Match(v, INT4_name))));
-
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom(forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-procedure nondet_choice() returns (x:int);
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-
-
-
-
-procedure main ( ) returns ($result.main$3.5$1$:int)
-
-modifies alloc;
-//TAG: no freed locations
-ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Mem;
-//TAG: no updated memory locations
-ensures(forall f: name, m:int :: {Mem[f][m]} Mem[f][m] == old(Mem[f])[m]);
-free ensures(Mem[Field(0)][0] == old(Mem[Field(0)])[0]);
-
-//TAG: Type Safety Precondition
-requires(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-//TAG: Type Safety Postcondition
-ensures(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-ensures(HasType($result.main$3.5$1$, INT4_name));
-{
-var havoc_stringTemp:int;
-var condVal:int;
-var $a$1$4.6$main : int;
-var b : int;
-var c : int;
-var flag : int;
-var tempBoogie0:int;
-var tempBoogie1:int;
-var tempBoogie2:int;
-var tempBoogie3:int;
-var tempBoogie4:int;
-var tempBoogie5:int;
-var tempBoogie6:int;
-var tempBoogie7:int;
-var tempBoogie8:int;
-var tempBoogie9:int;
-var tempBoogie10:int;
-var tempBoogie11:int;
-var tempBoogie12:int;
-var tempBoogie13:int;
-var tempBoogie14:int;
-var tempBoogie15:int;
-var tempBoogie16:int;
-var tempBoogie17:int;
-var tempBoogie18:int;
-var tempBoogie19:int;
-
-
-start:
-
-assume(HasType($a$1$4.6$main, INT4_name));
-assume(HasType(b, INT4_name));
-assume(HasType(c, INT4_name));
-assume(HasType(flag, INT4_name));
-assume(HasType($result.main$3.5$1$, INT4_name));
-goto label_3;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(20)
-label_1:
-assume (forall m:int :: {Mem[Field(m)][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[Field(m)][m] == old(Mem[Field(m)])[m]);
-return;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(20)
-label_2:
-assume false;
-return;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(4)
-label_3:
-goto label_4;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(4)
-label_4:
-goto label_5;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(4)
-label_5:
-goto label_6;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(5)
-label_6:
-goto label_7;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(7)
-label_7:
-c := LIFT(b < $a$1$4.6$main) ;
-//TAG: Type Safety Assertion
-assert(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-assert(HasType($a$1$4.6$main, INT4_name));
-assert(HasType(b, INT4_name));
-assert(HasType(c, INT4_name));
-assert(HasType(flag, INT4_name));
-goto label_8;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(9)
-label_8:
-goto label_8_true , label_8_false ;
-
-
-label_8_true :
-assume (c != 0);
-goto label_10;
-
-
-label_8_false :
-assume (c == 0);
-goto label_9;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(12)
-label_9:
-flag := 0 ;
-//TAG: Type Safety Assertion
-assert(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-assert(HasType($a$1$4.6$main, INT4_name));
-assert(HasType(b, INT4_name));
-assert(HasType(c, INT4_name));
-assert(HasType(flag, INT4_name));
-goto label_11;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(10)
-label_10:
-flag := 1 ;
-//TAG: Type Safety Assertion
-assert(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-assert(HasType($a$1$4.6$main, INT4_name));
-assert(HasType(b, INT4_name));
-assert(HasType(c, INT4_name));
-assert(HasType(flag, INT4_name));
-goto label_11;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(15)
-label_11:
-goto label_11_true , label_11_false ;
-
-
-label_11_true :
-assume (b < $a$1$4.6$main);
-goto label_13;
-
-
-label_11_false :
-assume !(b < $a$1$4.6$main);
-goto label_12;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(18)
-label_12:
-//TAG: flag == 0
-assert (flag == 0);
-goto label_1;
-
-
-// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(16)
-label_13:
-//TAG: flag == 1
-assert (flag == 1);
-goto label_1;
-
-}
-
+type name;
+type ref;
+type byte;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), S[x]} S[x] ==> Union(S,T)[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), T[x]} T[x] ==> Union(S,T)[x]);
+
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), S[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), T[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
+
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T), S[x]} S[x] ==> Difference(S,T)[x] || T[x]);
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Disjoint(S,T), T[x]} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name) returns (bool);
+function Values(t:name) returns ([int]bool);
+
+axiom(forall v:int, t:name :: {Values(t)[v]} Values(t)[v] ==> HasType(v, t));
+axiom(forall v:int, t:name :: {HasType(v, t), Values(t)} HasType(v, t) ==> Values(t)[v]);
+
+// Field declarations
+
+
+// Type declarations
+
+const unique INT4_name:name;
+const unique PINT4_name:name;
+
+// Field definitions
+
+// Type definitions
+
+axiom(forall a:int :: {Match(a, INT4_name)}
+ Match(a, INT4_name) <==> Field(a) == INT4_name);
+axiom(forall v:int :: HasType(v, INT4_name));
+
+axiom(forall a:int :: {Match(a, PINT4_name)}
+ Match(a, PINT4_name) <==> Field(a) == PINT4_name);
+axiom(forall v:int :: {HasType(v, PINT4_name)} {Match(v, INT4_name)}
+ HasType(v, PINT4_name) <==> (v == 0 || (v > 0 && Match(v, INT4_name))));
+
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom(forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+procedure nondet_choice() returns (x:int);
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+
+
+
+
+procedure main ( ) returns ($result.main$3.5$1$:int)
+
+modifies alloc;
+//TAG: no freed locations
+ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Mem;
+//TAG: no updated memory locations
+ensures(forall f: name, m:int :: {Mem[f][m]} Mem[f][m] == old(Mem[f])[m]);
+free ensures(Mem[Field(0)][0] == old(Mem[Field(0)])[0]);
+
+//TAG: Type Safety Precondition
+requires(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+//TAG: Type Safety Postcondition
+ensures(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+ensures(HasType($result.main$3.5$1$, INT4_name));
+{
+var havoc_stringTemp:int;
+var condVal:int;
+var $a$1$4.6$main : int;
+var b : int;
+var c : int;
+var flag : int;
+var tempBoogie0:int;
+var tempBoogie1:int;
+var tempBoogie2:int;
+var tempBoogie3:int;
+var tempBoogie4:int;
+var tempBoogie5:int;
+var tempBoogie6:int;
+var tempBoogie7:int;
+var tempBoogie8:int;
+var tempBoogie9:int;
+var tempBoogie10:int;
+var tempBoogie11:int;
+var tempBoogie12:int;
+var tempBoogie13:int;
+var tempBoogie14:int;
+var tempBoogie15:int;
+var tempBoogie16:int;
+var tempBoogie17:int;
+var tempBoogie18:int;
+var tempBoogie19:int;
+
+
+start:
+
+assume(HasType($a$1$4.6$main, INT4_name));
+assume(HasType(b, INT4_name));
+assume(HasType(c, INT4_name));
+assume(HasType(flag, INT4_name));
+assume(HasType($result.main$3.5$1$, INT4_name));
+goto label_3;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(20)
+label_1:
+assume (forall m:int :: {Mem[Field(m)][m]} alloc[Base(m)] != ALLOCATED && old(alloc)[Base(m)] != ALLOCATED ==> Mem[Field(m)][m] == old(Mem[Field(m)])[m]);
+return;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(20)
+label_2:
+assume false;
+return;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(4)
+label_3:
+goto label_4;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(4)
+label_4:
+goto label_5;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(4)
+label_5:
+goto label_6;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(5)
+label_6:
+goto label_7;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(7)
+label_7:
+c := LIFT(b < $a$1$4.6$main) ;
+//TAG: Type Safety Assertion
+assert(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+assert(HasType($a$1$4.6$main, INT4_name));
+assert(HasType(b, INT4_name));
+assert(HasType(c, INT4_name));
+assert(HasType(flag, INT4_name));
+goto label_8;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(9)
+label_8:
+goto label_8_true , label_8_false ;
+
+
+label_8_true :
+assume (c != 0);
+goto label_10;
+
+
+label_8_false :
+assume (c == 0);
+goto label_9;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(12)
+label_9:
+flag := 0 ;
+//TAG: Type Safety Assertion
+assert(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+assert(HasType($a$1$4.6$main, INT4_name));
+assert(HasType(b, INT4_name));
+assert(HasType(c, INT4_name));
+assert(HasType(flag, INT4_name));
+goto label_11;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(10)
+label_10:
+flag := 1 ;
+//TAG: Type Safety Assertion
+assert(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+assert(HasType($a$1$4.6$main, INT4_name));
+assert(HasType(b, INT4_name));
+assert(HasType(c, INT4_name));
+assert(HasType(flag, INT4_name));
+goto label_11;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(15)
+label_11:
+goto label_11_true , label_11_false ;
+
+
+label_11_true :
+assume (b < $a$1$4.6$main);
+goto label_13;
+
+
+label_11_false :
+assume !(b < $a$1$4.6$main);
+goto label_12;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(18)
+label_12:
+//TAG: flag == 0
+assert (flag == 0);
+goto label_1;
+
+
+// c:\espmain1\esp\tests\hvregr\split_memory\014\bool_vals_gt.c(16)
+label_13:
+//TAG: flag == 1
+assert (flag == 1);
+goto label_1;
+
+}
+
diff --git a/Test/z3api/boog25.bpl b/Test/z3api/boog25.bpl
index 0ee4163c..eff6e2fb 100644
--- a/Test/z3api/boog25.bpl
+++ b/Test/z3api/boog25.bpl
@@ -1,284 +1,284 @@
-type name;
-type ref;
-type byte;
-function OneByteToInt(byte) returns (int);
-function TwoBytesToInt(byte, byte) returns (int);
-function FourBytesToInt(byte, byte, byte, byte) returns (int);
-axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
-axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
-axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
-
-// Mutable
-var Mem_BYTE:[int]byte;
-var alloc:[int]name;
-
-
-function Field(int) returns (name);
-function Base(int) returns (int);
-
-// Constants
-const unique UNALLOCATED:name;
-const unique ALLOCATED: name;
-const unique FREED:name;
-
-const unique BYTE:name;
-
-function Equal([int]bool, [int]bool) returns (bool);
-function Subset([int]bool, [int]bool) returns (bool);
-function Disjoint([int]bool, [int]bool) returns (bool);
-
-function Empty() returns ([int]bool);
-function Singleton(int) returns ([int]bool);
-function Reachable([int,int]bool, int) returns ([int]bool);
-function Union([int]bool, [int]bool) returns ([int]bool);
-function Intersection([int]bool, [int]bool) returns ([int]bool);
-function Difference([int]bool, [int]bool) returns ([int]bool);
-function Dereference([int]bool, [int]int) returns ([int]bool);
-function Inverse(f:[int]int, x:int) returns ([int]bool);
-
-function AtLeast(int, int) returns ([int]bool);
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
-axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
-axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
-axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
-
-/*
-function AtLeast(int, int) returns ([int]bool);
-function ModEqual(int, int, int) returns (bool);
-axiom(forall n:int, x:int :: ModEqual(n,x,x));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
-axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
-axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
-axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
-axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
-axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
-*/
-
-function Array(int, int, int) returns ([int]bool);
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
-axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
-
-
-axiom(forall x:int :: !Empty()[x]);
-
-axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
-axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
-
-/* this formulation of Union IS more complete than the earlier one */
-/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]} Union(S,T)[x] <==> S[x] || T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), S[x]} S[x] ==> Union(S,T)[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), T[x]} T[x] ==> Union(S,T)[x]);
-
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), S[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), T[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
-
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T), S[x]} S[x] ==> Difference(S,T)[x] || T[x]);
-
-axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
-axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
-axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
- S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
-
-axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
-axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
-axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
-
-axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
-axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
-axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Disjoint(S,T), T[x]} !(S[x] && Disjoint(S,T) && T[x]));
-axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
-
-function Unified([name][int]int) returns ([int]int);
-axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
-axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
-// Memory model
-
-var Mem: [name][int]int;
-
-function Match(a:int, t:name) returns (bool);
-function HasType(v:int, t:name) returns (bool);
-function Values(t:name) returns ([int]bool);
-
-axiom(forall v:int, t:name :: {Values(t)[v]} Values(t)[v] ==> HasType(v, t));
-axiom(forall v:int, t:name :: {HasType(v, t), Values(t)} HasType(v, t) ==> Values(t)[v]);
-
-// Field declarations
-
-
-// Type declarations
-
-const unique INT4_name:name;
-const unique PINT4_name:name;
-
-// Field definitions
-
-// Type definitions
-
-axiom(forall a:int :: {Match(a, INT4_name)}
- Match(a, INT4_name) <==> Field(a) == INT4_name);
-axiom(forall v:int :: HasType(v, INT4_name));
-
-axiom(forall a:int :: {Match(a, PINT4_name)}
- Match(a, PINT4_name) <==> Field(a) == PINT4_name);
-axiom(forall v:int :: {HasType(v, PINT4_name)} {Match(v, INT4_name)}
- HasType(v, PINT4_name) <==> (v == 0 || (v > 0 && Match(v, INT4_name))));
-
-function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
-axiom(forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
-size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
-
-function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
-
-function PLUS(a:int, a_size:int, b:int) returns (int);
-axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
-
-function MULT(a:int, b:int) returns (int); // a*b
-axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
-
-function DIV(a:int, b:int) returns (int); // a/b
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
-);
-
-axiom(forall a:int, b:int :: {DIV(a,b)}
-a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
-);
-
-function BINARY_BOTH_INT(a:int, b:int) returns (int);
-
-function POW2(a:int) returns (bool);
-axiom POW2(1);
-axiom POW2(2);
-axiom POW2(4);
-axiom POW2(8);
-axiom POW2(16);
-axiom POW2(32);
-axiom POW2(64);
-axiom POW2(128);
-axiom POW2(256);
-axiom POW2(512);
-axiom POW2(1024);
-axiom POW2(2048);
-axiom POW2(4096);
-axiom POW2(8192);
-axiom POW2(16384);
-axiom POW2(32768);
-axiom POW2(65536);
-axiom POW2(131072);
-axiom POW2(262144);
-axiom POW2(524288);
-axiom POW2(1048576);
-axiom POW2(2097152);
-axiom POW2(4194304);
-axiom POW2(8388608);
-axiom POW2(16777216);
-axiom POW2(33554432);
-
-function choose(a:bool, b:int, c:int) returns (x:int);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
-axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
-
-function BIT_BAND(a:int, b:int) returns (x:int);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
-axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
-
-function BIT_BOR(a:int, b:int) returns (x:int);
-
-function BIT_BXOR(a:int, b:int) returns (x:int);
-
-function BIT_BNOT(a:int) returns (int);
-
-function LIFT(a:bool) returns (int);
-axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
-
-function NOT(a:int) returns (int);
-axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
-axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
-
-function NULL_CHECK(a:int) returns (int);
-axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
-axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
-
-procedure nondet_choice() returns (x:int);
-
-
-procedure havoc_assert(i:int);
-requires (i != 0);
-
-procedure havoc_assume(i:int);
-ensures (i != 0);
-
-procedure __HAVOC_free(a:int);
-modifies alloc;
-ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
-ensures (alloc[a] == FREED);
-// Additional checks guarded by tranlator flags
-// requires alloc[a] == ALLOCATED;
-// requires Base(a) == a;
-
-procedure __HAVOC_malloc(obj_size:int) returns (new:int);
-requires obj_size >= 0;
-modifies alloc;
-ensures (new > 0);
-ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
-ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
-ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
-
-procedure _strdup(str:int) returns (new:int);
-
-procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
-
-procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
-
-
-
-
-
-procedure main ( ) returns ($result.main$3.5$1$:int)
-
-modifies alloc;
-//TAG: no freed locations
-ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
-
-modifies Mem;
-//TAG: no updated memory locations
-ensures(forall f: name, m:int :: {Mem[f][m]} Mem[f][m] == old(Mem[f])[m]);
-free ensures(Mem[Field(0)][0] == old(Mem[Field(0)])[0]);
-
-//TAG: Type Safety Precondition
-requires(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-//TAG: Type Safety Postcondition
-ensures(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
-ensures(HasType($result.main$3.5$1$, INT4_name));
-{
-
-var a : int;
-var b : int;
-var c : int;
-
-c := LIFT (b < a) ;
-assert (c != 0 <==> b < a);
-
-
-}
-
+type name;
+type ref;
+type byte;
+function OneByteToInt(byte) returns (int);
+function TwoBytesToInt(byte, byte) returns (int);
+function FourBytesToInt(byte, byte, byte, byte) returns (int);
+axiom(forall b0:byte, c0:byte :: {OneByteToInt(b0), OneByteToInt(c0)} OneByteToInt(b0) == OneByteToInt(c0) ==> b0 == c0);
+axiom(forall b0:byte, b1: byte, c0:byte, c1:byte :: {TwoBytesToInt(b0, b1), TwoBytesToInt(c0, c1)} TwoBytesToInt(b0, b1) == TwoBytesToInt(c0, c1) ==> b0 == c0 && b1 == c1);
+axiom(forall b0:byte, b1: byte, b2:byte, b3:byte, c0:byte, c1:byte, c2:byte, c3:byte :: {FourBytesToInt(b0, b1, b2, b3), FourBytesToInt(c0, c1, c2, c3)} FourBytesToInt(b0, b1, b2, b3) == FourBytesToInt(c0, c1, c2, c3) ==> b0 == c0 && b1 == c1 && b2 == c2 && b3 == c3);
+
+// Mutable
+var Mem_BYTE:[int]byte;
+var alloc:[int]name;
+
+
+function Field(int) returns (name);
+function Base(int) returns (int);
+
+// Constants
+const unique UNALLOCATED:name;
+const unique ALLOCATED: name;
+const unique FREED:name;
+
+const unique BYTE:name;
+
+function Equal([int]bool, [int]bool) returns (bool);
+function Subset([int]bool, [int]bool) returns (bool);
+function Disjoint([int]bool, [int]bool) returns (bool);
+
+function Empty() returns ([int]bool);
+function Singleton(int) returns ([int]bool);
+function Reachable([int,int]bool, int) returns ([int]bool);
+function Union([int]bool, [int]bool) returns ([int]bool);
+function Intersection([int]bool, [int]bool) returns ([int]bool);
+function Difference([int]bool, [int]bool) returns ([int]bool);
+function Dereference([int]bool, [int]int) returns ([int]bool);
+function Inverse(f:[int]int, x:int) returns ([int]bool);
+
+function AtLeast(int, int) returns ([int]bool);
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x)[y]} AtLeast(n,x)[y] ==> x <= y && Rep(n,x) == Rep(n,y));
+axiom(forall n:int, x:int, y:int :: {AtLeast(n,x),Rep(n,x),Rep(n,y)} x <= y && Rep(n,x) == Rep(n,y) ==> AtLeast(n,x)[y]);
+axiom(forall n:int, x:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} Rep(n,x) == Rep(n,PLUS(x,n,z)));
+axiom(forall n:int, x:int :: {Rep(n,x)} (exists k:int :: Rep(n,x) - x == n*k));
+
+/*
+function AtLeast(int, int) returns ([int]bool);
+function ModEqual(int, int, int) returns (bool);
+axiom(forall n:int, x:int :: ModEqual(n,x,x));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> ModEqual(n,y,x));
+axiom(forall n:int, x:int, y:int, z:int :: {ModEqual(n,x,y), ModEqual(n,y,z)} ModEqual(n,x,y) && ModEqual(n,y,z) ==> ModEqual(n,x,z));
+axiom(forall n:int, x:int, z:int :: {PLUS(x,n,z)} ModEqual(n,x,PLUS(x,n,z)));
+axiom(forall n:int, x:int, y:int :: {ModEqual(n,x,y)} ModEqual(n,x,y) ==> (exists k:int :: x - y == n*k));
+axiom(forall x:int, n:int, y:int :: {AtLeast(n,x)[y]}{ModEqual(n,x,y)} AtLeast(n,x)[y] <==> x <= y && ModEqual(n,x,y));
+axiom(forall x:int, n:int :: {AtLeast(n,x)} AtLeast(n,x)[x]);
+*/
+
+function Array(int, int, int) returns ([int]bool);
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z <= 0 ==> Equal(Array(x,n,z), Empty()));
+axiom(forall x:int, n:int, z:int :: {Array(x,n,z)} z > 0 ==> Equal(Array(x,n,z), Difference(AtLeast(n,x),AtLeast(n,PLUS(x,n,z)))));
+
+
+axiom(forall x:int :: !Empty()[x]);
+
+axiom(forall x:int, y:int :: {Singleton(y)[x]} Singleton(y)[x] <==> x == y);
+axiom(forall y:int :: {Singleton(y)} Singleton(y)[y]);
+
+/* this formulation of Union IS more complete than the earlier one */
+/* (A U B)[e], A[d], A U B = Singleton(c), d != e */
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T)[x]} Union(S,T)[x] <==> S[x] || T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), S[x]} S[x] ==> Union(S,T)[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Union(S,T), T[x]} T[x] ==> Union(S,T)[x]);
+
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T)[x]} Intersection(S,T)[x] <==> S[x] && T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), S[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Intersection(S,T), T[x]} S[x] && T[x] ==> Intersection(S,T)[x]);
+
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T)[x]} Difference(S,T)[x] <==> S[x] && !T[x]);
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {Difference(S,T), S[x]} S[x] ==> Difference(S,T)[x] || T[x]);
+
+axiom(forall x:int, S:[int]bool, M:[int]int :: {Dereference(S,M)[x]} Dereference(S,M)[x] ==> (exists y:int :: x == M[y] && S[y]));
+axiom(forall x:int, S:[int]bool, M:[int]int :: {M[x], S[x], Dereference(S,M)} S[x] ==> Dereference(S,M)[M[x]]);
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])} !S[x] ==> Equal(Dereference(S,M[x := y]), Dereference(S,M)));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Difference(Dereference(S,M), Singleton(M[x])), Singleton(y))));
+axiom(forall x:int, y:int, S:[int]bool, M:[int]int :: {Dereference(S,M[x := y])}
+ S[x] && !Equal(Intersection(Inverse(M,M[x]), S), Singleton(x)) ==> Equal(Dereference(S,M[x := y]), Union(Dereference(S,M), Singleton(y))));
+
+axiom(forall f:[int]int, x:int :: {Inverse(f,f[x])} Inverse(f,f[x])[x]);
+axiom(forall f:[int]int, x:int, y:int :: {Inverse(f[x := y],y)} Equal(Inverse(f[x := y],y), Union(Inverse(f,y), Singleton(x))));
+axiom(forall f:[int]int, x:int, y:int, z:int :: {Inverse(f[x := y],z)} y == z || Equal(Inverse(f[x := y],z), Difference(Inverse(f,z), Singleton(x))));
+
+axiom(forall S:[int]bool, T:[int]bool :: {Equal(S,T)} Equal(S,T) <==> Subset(S,T) && Subset(T,S));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Subset(S,T)} S[x] && Subset(S,T) ==> T[x]);
+axiom(forall S:[int]bool, T:[int]bool :: {Subset(S,T)} Subset(S,T) || (exists x:int :: S[x] && !T[x]));
+axiom(forall x:int, S:[int]bool, T:[int]bool :: {S[x], Disjoint(S,T), T[x]} !(S[x] && Disjoint(S,T) && T[x]));
+axiom(forall S:[int]bool, T:[int]bool :: {Disjoint(S,T)} Disjoint(S,T) || (exists x:int :: S[x] && T[x]));
+
+function Unified([name][int]int) returns ([int]int);
+axiom(forall M:[name][int]int, x:int :: {Unified(M)[x]} Unified(M)[x] == M[Field(x)][x]);
+axiom(forall M:[name][int]int, x:int, y:int :: {Unified(M[Field(x) := M[Field(x)][x := y]])} Unified(M[Field(x) := M[Field(x)][x := y]]) == Unified(M)[x := y]);
+// Memory model
+
+var Mem: [name][int]int;
+
+function Match(a:int, t:name) returns (bool);
+function HasType(v:int, t:name) returns (bool);
+function Values(t:name) returns ([int]bool);
+
+axiom(forall v:int, t:name :: {Values(t)[v]} Values(t)[v] ==> HasType(v, t));
+axiom(forall v:int, t:name :: {HasType(v, t), Values(t)} HasType(v, t) ==> Values(t)[v]);
+
+// Field declarations
+
+
+// Type declarations
+
+const unique INT4_name:name;
+const unique PINT4_name:name;
+
+// Field definitions
+
+// Type definitions
+
+axiom(forall a:int :: {Match(a, INT4_name)}
+ Match(a, INT4_name) <==> Field(a) == INT4_name);
+axiom(forall v:int :: HasType(v, INT4_name));
+
+axiom(forall a:int :: {Match(a, PINT4_name)}
+ Match(a, PINT4_name) <==> Field(a) == PINT4_name);
+axiom(forall v:int :: {HasType(v, PINT4_name)} {Match(v, INT4_name)}
+ HasType(v, PINT4_name) <==> (v == 0 || (v > 0 && Match(v, INT4_name))));
+
+function MINUS_BOTH_PTR_OR_BOTH_INT(a:int, b:int, size:int) returns (int);
+axiom(forall a:int, b:int, size:int :: {MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size)}
+size * MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) <= a - b && a - b < size * (MINUS_BOTH_PTR_OR_BOTH_INT(a,b,size) + 1));
+
+function MINUS_LEFT_PTR(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {MINUS_LEFT_PTR(a,a_size,b)} MINUS_LEFT_PTR(a,a_size,b) == a - a_size * b);
+
+function PLUS(a:int, a_size:int, b:int) returns (int);
+axiom(forall a:int, a_size:int, b:int :: {PLUS(a,a_size,b)} PLUS(a,a_size,b) == a + a_size * b);
+
+function MULT(a:int, b:int) returns (int); // a*b
+axiom(forall a:int, b:int :: {MULT(a,b)} MULT(a,b) == a * b);
+
+function DIV(a:int, b:int) returns (int); // a/b
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b > 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) + 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a >= 0 && b < 0 ==> b * DIV(a,b) <= a && a < b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b > 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) - 1)
+);
+
+axiom(forall a:int, b:int :: {DIV(a,b)}
+a < 0 && b < 0 ==> b * DIV(a,b) >= a && a > b * (DIV(a,b) + 1)
+);
+
+function BINARY_BOTH_INT(a:int, b:int) returns (int);
+
+function POW2(a:int) returns (bool);
+axiom POW2(1);
+axiom POW2(2);
+axiom POW2(4);
+axiom POW2(8);
+axiom POW2(16);
+axiom POW2(32);
+axiom POW2(64);
+axiom POW2(128);
+axiom POW2(256);
+axiom POW2(512);
+axiom POW2(1024);
+axiom POW2(2048);
+axiom POW2(4096);
+axiom POW2(8192);
+axiom POW2(16384);
+axiom POW2(32768);
+axiom POW2(65536);
+axiom POW2(131072);
+axiom POW2(262144);
+axiom POW2(524288);
+axiom POW2(1048576);
+axiom POW2(2097152);
+axiom POW2(4194304);
+axiom POW2(8388608);
+axiom POW2(16777216);
+axiom POW2(33554432);
+
+function choose(a:bool, b:int, c:int) returns (x:int);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} a ==> choose(a,b,c) == b);
+axiom(forall a:bool, b:int, c:int :: {choose(a,b,c)} !a ==> choose(a,b,c) == c);
+
+function BIT_BAND(a:int, b:int) returns (x:int);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == b ==> BIT_BAND(a,b) == a);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} POW2(a) && POW2(b) && a != b ==> BIT_BAND(a,b) == 0);
+axiom(forall a:int, b:int :: {BIT_BAND(a,b)} a == 0 || b == 0 ==> BIT_BAND(a,b) == 0);
+
+function BIT_BOR(a:int, b:int) returns (x:int);
+
+function BIT_BXOR(a:int, b:int) returns (x:int);
+
+function BIT_BNOT(a:int) returns (int);
+
+function LIFT(a:bool) returns (int);
+axiom(forall a:bool :: {LIFT(a)} a <==> LIFT(a) != 0);
+
+function NOT(a:int) returns (int);
+axiom(forall a:int :: {NOT(a)} a == 0 ==> NOT(a) != 0);
+axiom(forall a:int :: {NOT(a)} a != 0 ==> NOT(a) == 0);
+
+function NULL_CHECK(a:int) returns (int);
+axiom(forall a:int :: {NULL_CHECK(a)} a == 0 ==> NULL_CHECK(a) != 0);
+axiom(forall a:int :: {NULL_CHECK(a)} a != 0 ==> NULL_CHECK(a) == 0);
+
+procedure nondet_choice() returns (x:int);
+
+
+procedure havoc_assert(i:int);
+requires (i != 0);
+
+procedure havoc_assume(i:int);
+ensures (i != 0);
+
+procedure __HAVOC_free(a:int);
+modifies alloc;
+ensures (forall x:int :: {alloc[x]} x == a || old(alloc)[x] == alloc[x]);
+ensures (alloc[a] == FREED);
+// Additional checks guarded by tranlator flags
+// requires alloc[a] == ALLOCATED;
+// requires Base(a) == a;
+
+procedure __HAVOC_malloc(obj_size:int) returns (new:int);
+requires obj_size >= 0;
+modifies alloc;
+ensures (new > 0);
+ensures (forall x:int :: {Base(x)} new <= x && x < new+obj_size ==> Base(x) == new);
+ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]);
+ensures old(alloc)[new] == UNALLOCATED && alloc[new] == ALLOCATED;
+
+procedure _strdup(str:int) returns (new:int);
+
+procedure _xstrcasecmp(a0:int, a1:int) returns (ret:int);
+
+procedure _xstrcmp(a0:int, a1:int) returns (ret:int);
+
+
+
+
+
+procedure main ( ) returns ($result.main$3.5$1$:int)
+
+modifies alloc;
+//TAG: no freed locations
+ensures(forall f:int :: {alloc[Base(f)]} old(alloc)[Base(f)] == UNALLOCATED || old(alloc)[Base(f)] == alloc[Base(f)]);
+
+modifies Mem;
+//TAG: no updated memory locations
+ensures(forall f: name, m:int :: {Mem[f][m]} Mem[f][m] == old(Mem[f])[m]);
+free ensures(Mem[Field(0)][0] == old(Mem[Field(0)])[0]);
+
+//TAG: Type Safety Precondition
+requires(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+//TAG: Type Safety Postcondition
+ensures(forall a:int :: {Mem[Field(a)][a]} HasType(Mem[Field(a)][a], Field(a)));
+ensures(HasType($result.main$3.5$1$, INT4_name));
+{
+
+var a : int;
+var b : int;
+var c : int;
+
+c := LIFT (b < a) ;
+assert (c != 0 <==> b < a);
+
+
+}
+
diff --git a/Test/z3api/boog28.bpl b/Test/z3api/boog28.bpl
index ab7f4ad2..d59d3630 100644
--- a/Test/z3api/boog28.bpl
+++ b/Test/z3api/boog28.bpl
@@ -1,17 +1,17 @@
-type ref;
-
-function LIFT(x:bool) returns (int);
-axiom(forall x:bool :: {LIFT(x)} x <==> LIFT(x) != 0);
-
-procedure main ( )
-
-{
-var a : int;
-var b : int;
-var c : int;
-
-c := LIFT (b == a) ;
-assert (c != 0 <==> b == a);
-
-}
-
+type ref;
+
+function LIFT(x:bool) returns (int);
+axiom(forall x:bool :: {LIFT(x)} x <==> LIFT(x) != 0);
+
+procedure main ( )
+
+{
+var a : int;
+var b : int;
+var c : int;
+
+c := LIFT (b == a) ;
+assert (c != 0 <==> b == a);
+
+}
+
diff --git a/Test/z3api/boog29.bpl b/Test/z3api/boog29.bpl
index 035e69fd..3320e0a8 100644
--- a/Test/z3api/boog29.bpl
+++ b/Test/z3api/boog29.bpl
@@ -1,20 +1,20 @@
-type ref;
-
-function LIFT(x:bool) returns (int);
-axiom(forall x:bool :: {LIFT(x)} x <==> LIFT(x) != 0);
-
-procedure main ( )
-
-{
-var c: int;
-c := LIFT(false);
-assert (c==0);
-
-c := LIFT(true);
-assert (c!=0);
-/*
-c := LIFT(1==5);
-assert (c==0);
-*/
-}
-
+type ref;
+
+function LIFT(x:bool) returns (int);
+axiom(forall x:bool :: {LIFT(x)} x <==> LIFT(x) != 0);
+
+procedure main ( )
+
+{
+var c: int;
+c := LIFT(false);
+assert (c==0);
+
+c := LIFT(true);
+assert (c!=0);
+/*
+c := LIFT(1==5);
+assert (c==0);
+*/
+}
+
diff --git a/Test/z3api/boog3.bpl b/Test/z3api/boog3.bpl
index 207ddbd0..48fae4a4 100644
--- a/Test/z3api/boog3.bpl
+++ b/Test/z3api/boog3.bpl
@@ -1,8 +1,8 @@
-type ref;
-type Wicket;
-
-procedure Dummy();
-implementation Dummy() {
- var x: Wicket;
- assert (x!=x);
+type ref;
+type Wicket;
+
+procedure Dummy();
+implementation Dummy() {
+ var x: Wicket;
+ assert (x!=x);
} \ No newline at end of file
diff --git a/Test/z3api/boog30.bpl b/Test/z3api/boog30.bpl
index 81e04f20..d26c617c 100644
--- a/Test/z3api/boog30.bpl
+++ b/Test/z3api/boog30.bpl
@@ -1,14 +1,14 @@
-type ref;
-
-function LIFT(x:bool) returns (int);
-axiom(forall x:bool :: {LIFT(x)} x <==> LIFT(x) != 0);
-
-procedure main ( )
-
-{
-var c: int;
-
-c := LIFT(1==5);
-assert (c==0);
-}
-
+type ref;
+
+function LIFT(x:bool) returns (int);
+axiom(forall x:bool :: {LIFT(x)} x <==> LIFT(x) != 0);
+
+procedure main ( )
+
+{
+var c: int;
+
+c := LIFT(1==5);
+assert (c==0);
+}
+
diff --git a/Test/z3api/boog31.bpl b/Test/z3api/boog31.bpl
index 86386a90..ca195c74 100644
--- a/Test/z3api/boog31.bpl
+++ b/Test/z3api/boog31.bpl
@@ -1,15 +1,15 @@
-type ref;
-
-const b1:bool;
-const b2:bool;
-const b3:bool;
-
-axiom (b1==true && b2==false && b3==true);
-
-procedure main ( )
-
-{
-var c: int;
-assert (c==0);
-}
-
+type ref;
+
+const b1:bool;
+const b2:bool;
+const b3:bool;
+
+axiom (b1==true && b2==false && b3==true);
+
+procedure main ( )
+
+{
+var c: int;
+assert (c==0);
+}
+
diff --git a/Test/z3api/boog34.bpl b/Test/z3api/boog34.bpl
index 88a587aa..f04bc46f 100644
--- a/Test/z3api/boog34.bpl
+++ b/Test/z3api/boog34.bpl
@@ -1,11 +1,11 @@
-type ref;
-
-function Rep(int, int) returns (int);
-axiom(forall n:int, x:int :: {Rep(n,x)}
- (exists k:int :: Rep(n,x) - x == n*k));
-
-procedure main(x:int)
-{
-assert((Rep(0,x)==x));
-return;
+type ref;
+
+function Rep(int, int) returns (int);
+axiom(forall n:int, x:int :: {Rep(n,x)}
+ (exists k:int :: Rep(n,x) - x == n*k));
+
+procedure main(x:int)
+{
+assert((Rep(0,x)==x));
+return;
} \ No newline at end of file
diff --git a/Test/z3api/boog35.bpl b/Test/z3api/boog35.bpl
index beae0c74..8b442ea3 100644
--- a/Test/z3api/boog35.bpl
+++ b/Test/z3api/boog35.bpl
@@ -1,17 +1,17 @@
-procedure foo1(x: int, y: int)
-{
- var a: [int][int]int;
-
- a[x][y] := 42;
-
- assert a[x][y] == 42;
-}
-
-procedure foo2(x: int, y: int)
-{
- var a: [int][int]int;
-
- a[x][y] := 42;
-
- assert a[x][y] == 43;
+procedure foo1(x: int, y: int)
+{
+ var a: [int][int]int;
+
+ a[x][y] := 42;
+
+ assert a[x][y] == 42;
+}
+
+procedure foo2(x: int, y: int)
+{
+ var a: [int][int]int;
+
+ a[x][y] := 42;
+
+ assert a[x][y] == 43;
} \ No newline at end of file
diff --git a/Test/z3api/boog4.bpl b/Test/z3api/boog4.bpl
index 95ec7011..ffb46f68 100644
--- a/Test/z3api/boog4.bpl
+++ b/Test/z3api/boog4.bpl
@@ -1,43 +1,43 @@
-type ref;
-type Wicket;
-
-const w: Wicket;
-const myBool: bool;
-const v: Wicket;
-
-var favorite: Wicket;
-
-function age(Wicket) returns (int);
-
-axiom age(w)==7;
-axiom 7 < 8;
-axiom 7 <= 8;
-
-axiom 8 > 7;
-axiom 8 >= 7;
-axiom 6 != 7;
-axiom 7+1==8;
-axiom 8-1==7;
-axiom 7/1==7;
-axiom 7%2==1;
-axiom 4*2==8;
-axiom ((7==7) || (8==8));
-axiom ((7==7) ==> (7<8));
-axiom ((7==7) <==> (10==10));
-axiom ((7==7) && (8==8));
-
-axiom 7!=7;
-
-
-procedure NewFavorite(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation NewFavorite(l: Wicket) {
- favorite:=l;
-}
-
-
-
+type ref;
+type Wicket;
+
+const w: Wicket;
+const myBool: bool;
+const v: Wicket;
+
+var favorite: Wicket;
+
+function age(Wicket) returns (int);
+
+axiom age(w)==7;
+axiom 7 < 8;
+axiom 7 <= 8;
+
+axiom 8 > 7;
+axiom 8 >= 7;
+axiom 6 != 7;
+axiom 7+1==8;
+axiom 8-1==7;
+axiom 7/1==7;
+axiom 7%2==1;
+axiom 4*2==8;
+axiom ((7==7) || (8==8));
+axiom ((7==7) ==> (7<8));
+axiom ((7==7) <==> (10==10));
+axiom ((7==7) && (8==8));
+
+axiom 7!=7;
+
+
+procedure NewFavorite(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation NewFavorite(l: Wicket) {
+ favorite:=l;
+}
+
+
+
diff --git a/Test/z3api/boog5.bpl b/Test/z3api/boog5.bpl
index 4b76fd22..fc81d266 100644
--- a/Test/z3api/boog5.bpl
+++ b/Test/z3api/boog5.bpl
@@ -1,43 +1,43 @@
-type ref;
-// types
-type Wicket;
-
-// consts
-const w: Wicket;
-const myBool: bool;
-const v: Wicket;
-const u: Wicket;
-const x: Wicket;
-
-
-// vars
-var favorite: Wicket;
-
-// functions
-function age(Wicket) returns (int);
-
-// axioms
-axiom age(w)==6;
-axiom age(u)==5;
-axiom age(x)==4;
-
-
-// procedure
-procedure SetToSeven(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation SetToSeven(l: Wicket) {
- if (age(w)==7) {
- favorite:=l;
- } else {
- favorite:=v;
- }
-
-
-}
-
-
-
+type ref;
+// types
+type Wicket;
+
+// consts
+const w: Wicket;
+const myBool: bool;
+const v: Wicket;
+const u: Wicket;
+const x: Wicket;
+
+
+// vars
+var favorite: Wicket;
+
+// functions
+function age(Wicket) returns (int);
+
+// axioms
+axiom age(w)==6;
+axiom age(u)==5;
+axiom age(x)==4;
+
+
+// procedure
+procedure SetToSeven(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation SetToSeven(l: Wicket) {
+ if (age(w)==7) {
+ favorite:=l;
+ } else {
+ favorite:=v;
+ }
+
+
+}
+
+
+
diff --git a/Test/z3api/boog6.bpl b/Test/z3api/boog6.bpl
index f6c3c23f..05a63440 100644
--- a/Test/z3api/boog6.bpl
+++ b/Test/z3api/boog6.bpl
@@ -1,24 +1,24 @@
-type ref;
-// types
-type Wicket;
-
-// consts
-var favorite: Wicket;
-
-// axioms
-const b: bool;
-axiom b==true;
-
-// procedure
-procedure SetToSeven(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation SetToSeven(l: Wicket) {
- favorite:=l;
-}
-
-
-
+type ref;
+// types
+type Wicket;
+
+// consts
+var favorite: Wicket;
+
+// axioms
+const b: bool;
+axiom b==true;
+
+// procedure
+procedure SetToSeven(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation SetToSeven(l: Wicket) {
+ favorite:=l;
+}
+
+
+
diff --git a/Test/z3api/boog7.bpl b/Test/z3api/boog7.bpl
index 78e5e3e6..abe0b17a 100644
--- a/Test/z3api/boog7.bpl
+++ b/Test/z3api/boog7.bpl
@@ -1,21 +1,21 @@
-type ref;
-// consts
-const w: int;
-
-
-// vars
-var favorite: int;
-
-// procedure
-procedure SetToSeven(p: int);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation SetToSeven(l: int) {
- favorite:=w;
-}
-
-
-
+type ref;
+// consts
+const w: int;
+
+
+// vars
+var favorite: int;
+
+// procedure
+procedure SetToSeven(p: int);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation SetToSeven(l: int) {
+ favorite:=w;
+}
+
+
+
diff --git a/Test/z3api/boog8.bpl b/Test/z3api/boog8.bpl
index 121f27cf..f027e9f6 100644
--- a/Test/z3api/boog8.bpl
+++ b/Test/z3api/boog8.bpl
@@ -1,26 +1,26 @@
-type ref;
-// types
-type Wicket;
-var favorite: Wicket;
-
-
-const myBv: bv5;
-axiom myBv==1bv2++2bv3;
-
-const myBool: bool;
-axiom myBool==true;
-
-
-// procedure
-procedure SetToSeven(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation SetToSeven(l: Wicket) {
- favorite:=favorite;
-}
-
-
-
+type ref;
+// types
+type Wicket;
+var favorite: Wicket;
+
+
+const myBv: bv5;
+axiom myBv==1bv2++2bv3;
+
+const myBool: bool;
+axiom myBool==true;
+
+
+// procedure
+procedure SetToSeven(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation SetToSeven(l: Wicket) {
+ favorite:=favorite;
+}
+
+
+
diff --git a/Test/z3api/boog9.bpl b/Test/z3api/boog9.bpl
index 3bd6ff63..7ba21eb3 100644
--- a/Test/z3api/boog9.bpl
+++ b/Test/z3api/boog9.bpl
@@ -1,23 +1,23 @@
-type ref;
-// types
-type Wicket;
-var favorite: Wicket;
-
-function age(w:Wicket) returns (int);
-axiom (forall v:Wicket :: age(v)==7);
-axiom (exists v:Wicket :: age(v)<8);
-
-
-// procedure
-procedure SetToSeven(p: Wicket);
- modifies favorite
-;
-
- ensures favorite==p;
-
-implementation SetToSeven(l: Wicket) {
- favorite:=favorite;
-}
-
-
-
+type ref;
+// types
+type Wicket;
+var favorite: Wicket;
+
+function age(w:Wicket) returns (int);
+axiom (forall v:Wicket :: age(v)==7);
+axiom (exists v:Wicket :: age(v)<8);
+
+
+// procedure
+procedure SetToSeven(p: Wicket);
+ modifies favorite
+;
+
+ ensures favorite==p;
+
+implementation SetToSeven(l: Wicket) {
+ favorite:=favorite;
+}
+
+
+
diff --git a/Test/z3api/runtest.bat b/Test/z3api/runtest.bat
index 6645667e..d74d3444 100644
--- a/Test/z3api/runtest.bat
+++ b/Test/z3api/runtest.bat
@@ -1,16 +1,16 @@
-@echo off
-setlocal
-
-set BGEXE=..\..\Binaries\Boogie.exe
-
-for %%f in (boog0.bpl boog1.bpl boog2.bpl boog3.bpl boog4.bpl boog5.bpl boog6.bpl boog7.bpl boog8.bpl boog9.bpl boog10.bpl boog11.bpl boog12.bpl boog13.bpl boog14.bpl boog15.bpl boog16.bpl boog17.bpl boog18.bpl boog19.bpl boog20.bpl boog21.bpl boog22.bpl boog23.bpl boog24.bpl boog25.bpl boog28.bpl boog29.bpl boog30.bpl boog31.bpl boog34.bpl boog35.bpl) do (
- echo.
- echo -------------------- %%f --------------------
- %BGEXE% %* /nologo /typeEncoding:m /prover:z3api %%f
-)
-
-for %%f in (bar1.bpl bar2.bpl bar3.bpl bar4.bpl bar6.bpl) do (
- echo.
- echo -------------------- %%f --------------------
- %BGEXE% %* /nologo /noinfer /stratifiedInline:1 /prover:z3api %%f
+@echo off
+setlocal
+
+set BGEXE=..\..\Binaries\Boogie.exe
+
+for %%f in (boog0.bpl boog1.bpl boog2.bpl boog3.bpl boog4.bpl boog5.bpl boog6.bpl boog7.bpl boog8.bpl boog9.bpl boog10.bpl boog11.bpl boog12.bpl boog13.bpl boog14.bpl boog15.bpl boog16.bpl boog17.bpl boog18.bpl boog19.bpl boog20.bpl boog21.bpl boog22.bpl boog23.bpl boog24.bpl boog25.bpl boog28.bpl boog29.bpl boog30.bpl boog31.bpl boog34.bpl boog35.bpl) do (
+ echo.
+ echo -------------------- %%f --------------------
+ %BGEXE% %* /nologo /typeEncoding:m /prover:z3api %%f
+)
+
+for %%f in (bar1.bpl bar2.bpl bar3.bpl bar4.bpl bar6.bpl) do (
+ echo.
+ echo -------------------- %%f --------------------
+ %BGEXE% %* /nologo /noinfer /stratifiedInline:1 /prover:z3api %%f
) \ No newline at end of file
diff --git a/Util/BoogieBuildAndTest.cmd b/Util/BoogieBuildAndTest.cmd
index 08d5baeb..acaa8053 100644
--- a/Util/BoogieBuildAndTest.cmd
+++ b/Util/BoogieBuildAndTest.cmd
@@ -1,27 +1,27 @@
-@echo off
-pushd ..\test
-goto Cleanandbuild
-
-:Cleanandbuild
-cls
-@echo on
-devenv ..\Source\Boogie.sln /Clean
-@echo off
-if errorlevel 1 goto fail
-@echo on
-devenv ..\source\Boogie.sln /Build
-@echo off
-if errorlevel 1 goto fail
-goto reg
-
-:Reg
-cls
-call runtestall
-goto end
-
-:fail
-echo Some part of the rebuild failed.
-goto end
-
-:end
+@echo off
+pushd ..\test
+goto Cleanandbuild
+
+:Cleanandbuild
+cls
+@echo on
+devenv ..\Source\Boogie.sln /Clean
+@echo off
+if errorlevel 1 goto fail
+@echo on
+devenv ..\source\Boogie.sln /Build
+@echo off
+if errorlevel 1 goto fail
+goto reg
+
+:Reg
+cls
+call runtestall
+goto end
+
+:fail
+echo Some part of the rebuild failed.
+goto end
+
+:end
popd \ No newline at end of file
diff --git a/Util/Code Snippets/contractassertnonnull.snippet b/Util/Code Snippets/contractassertnonnull.snippet
index 4979600a..298cb164 100644
--- a/Util/Code Snippets/contractassertnonnull.snippet
+++ b/Util/Code Snippets/contractassertnonnull.snippet
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- </SnippetTypes>
- <Title>Contract.Assert(...!=null)</Title>
- <Shortcut>can</Shortcut>
- <Description>Emits a 'Contract.Assert' non-null clause</Description>
- <Author>tabarbe</Author>
- </Header>
- <Snippet>
- <Imports>
- <Import>
- <Namespace>System.Diagnostics.Contracts</Namespace>
- </Import>
- </Imports>
- <Declarations>
- <Object Editable="true">
- <ID>condition</ID>
- <ToolTip>condition that must not be null</ToolTip>
- <Default>arg</Default>
- <Function>
- </Function>
- </Object>
- </Declarations>
- <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Assert($condition$ != null);$end$]]></Code>
- </Snippet>
- </CodeSnippet>
-</CodeSnippets>
+<?xml version="1.0" encoding="utf-8"?>
+<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
+ <CodeSnippet Format="1.0.0">
+ <Header>
+ <SnippetTypes>
+ <SnippetType>Expansion</SnippetType>
+ </SnippetTypes>
+ <Title>Contract.Assert(...!=null)</Title>
+ <Shortcut>can</Shortcut>
+ <Description>Emits a 'Contract.Assert' non-null clause</Description>
+ <Author>tabarbe</Author>
+ </Header>
+ <Snippet>
+ <Imports>
+ <Import>
+ <Namespace>System.Diagnostics.Contracts</Namespace>
+ </Import>
+ </Imports>
+ <Declarations>
+ <Object Editable="true">
+ <ID>condition</ID>
+ <ToolTip>condition that must not be null</ToolTip>
+ <Default>arg</Default>
+ <Function>
+ </Function>
+ </Object>
+ </Declarations>
+ <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Assert($condition$ != null);$end$]]></Code>
+ </Snippet>
+ </CodeSnippet>
+</CodeSnippets>
diff --git a/Util/Code Snippets/contractassertnonnullelem.snippet b/Util/Code Snippets/contractassertnonnullelem.snippet
index 86273d71..34c20a00 100644
--- a/Util/Code Snippets/contractassertnonnullelem.snippet
+++ b/Util/Code Snippets/contractassertnonnullelem.snippet
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- </SnippetTypes>
- <Title>Contract.Assert(cce.NonNullElements(...))</Title>
- <Shortcut>cann</Shortcut>
- <Description>Emits a 'Contract.Assert' non-null elements clause</Description>
- <Author>tabarbe</Author>
- </Header>
- <Snippet>
- <Imports>
- <Import>
- <Namespace>System.Diagnostics.Contracts</Namespace>
- </Import>
- </Imports>
- <Declarations>
- <Object Editable="true">
- <ID>collection</ID>
- <ToolTip>collection whose elements must not be null</ToolTip>
- <Default>arg</Default>
- <Function>
- </Function>
- </Object>
- </Declarations>
- <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Assert(cce.NonNullElements($collection$));$end$]]></Code>
- </Snippet>
- </CodeSnippet>
-</CodeSnippets>
+<?xml version="1.0" encoding="utf-8"?>
+<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
+ <CodeSnippet Format="1.0.0">
+ <Header>
+ <SnippetTypes>
+ <SnippetType>Expansion</SnippetType>
+ </SnippetTypes>
+ <Title>Contract.Assert(cce.NonNullElements(...))</Title>
+ <Shortcut>cann</Shortcut>
+ <Description>Emits a 'Contract.Assert' non-null elements clause</Description>
+ <Author>tabarbe</Author>
+ </Header>
+ <Snippet>
+ <Imports>
+ <Import>
+ <Namespace>System.Diagnostics.Contracts</Namespace>
+ </Import>
+ </Imports>
+ <Declarations>
+ <Object Editable="true">
+ <ID>collection</ID>
+ <ToolTip>collection whose elements must not be null</ToolTip>
+ <Default>arg</Default>
+ <Function>
+ </Function>
+ </Object>
+ </Declarations>
+ <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Assert(cce.NonNullElements($collection$));$end$]]></Code>
+ </Snippet>
+ </CodeSnippet>
+</CodeSnippets>
diff --git a/Util/Code Snippets/contractensuresnonnullelem.snippet b/Util/Code Snippets/contractensuresnonnullelem.snippet
index fabd9d1a..9d462275 100644
--- a/Util/Code Snippets/contractensuresnonnullelem.snippet
+++ b/Util/Code Snippets/contractensuresnonnullelem.snippet
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- </SnippetTypes>
- <Title>Contract.Ensures(cce.NonNullElements(Contract.Result&lt;...&gt;()))</Title>
- <Shortcut>cenn</Shortcut>
- <Description>Emits a 'Contract.Ensures' non-null elements clause</Description>
- <Author>tabarbe</Author>
- </Header>
- <Snippet>
- <Imports>
- <Import>
- <Namespace>System.Diagnostics.Contracts</Namespace>
- </Import>
- </Imports>
- <Declarations>
- <Object Editable="true">
- <ID>collection</ID>
- <ToolTip>Collection whose elements must not be null</ToolTip>
- <Default>List&lt;string&gt;</Default>
- <Function>
- </Function>
- </Object>
- </Declarations>
- <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(cce.NonNullElements(Contract.Result<$collection$>()));$end$]]></Code>
- </Snippet>
- </CodeSnippet>
+<?xml version="1.0" encoding="utf-8"?>
+<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
+ <CodeSnippet Format="1.0.0">
+ <Header>
+ <SnippetTypes>
+ <SnippetType>Expansion</SnippetType>
+ </SnippetTypes>
+ <Title>Contract.Ensures(cce.NonNullElements(Contract.Result&lt;...&gt;()))</Title>
+ <Shortcut>cenn</Shortcut>
+ <Description>Emits a 'Contract.Ensures' non-null elements clause</Description>
+ <Author>tabarbe</Author>
+ </Header>
+ <Snippet>
+ <Imports>
+ <Import>
+ <Namespace>System.Diagnostics.Contracts</Namespace>
+ </Import>
+ </Imports>
+ <Declarations>
+ <Object Editable="true">
+ <ID>collection</ID>
+ <ToolTip>Collection whose elements must not be null</ToolTip>
+ <Default>List&lt;string&gt;</Default>
+ <Function>
+ </Function>
+ </Object>
+ </Declarations>
+ <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(cce.NonNullElements(Contract.Result<$collection$>()));$end$]]></Code>
+ </Snippet>
+ </CodeSnippet>
</CodeSnippets> \ No newline at end of file
diff --git a/Util/Code Snippets/contractensuresvalret.snippet b/Util/Code Snippets/contractensuresvalret.snippet
index b46be4fc..0be87286 100644
--- a/Util/Code Snippets/contractensuresvalret.snippet
+++ b/Util/Code Snippets/contractensuresvalret.snippet
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- </SnippetTypes>
- <Title>Contract.Ensures(Contract.ValueAtReturn(...)!=null)</Title>
- <Shortcut>cern</Shortcut>
- <Description>Emits a 'Contract.Ensures' non-null out or ref parameter clause</Description>
- <Author>tabarbe</Author>
- </Header>
- <Snippet>
- <Imports>
- <Import>
- <Namespace>System.Diagnostics.Contracts</Namespace>
- </Import>
- </Imports>
- <Declarations>
- <Object Editable="true">
- <ID>value</ID>
- <ToolTip>Value that must not be null</ToolTip>
- <Default>arg</Default>
- <Function>
- </Function>
- </Object>
- </Declarations>
- <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(Contract.ValueAtReturn(out $value$)!=null);$end$]]></Code>
- </Snippet>
- </CodeSnippet>
+<?xml version="1.0" encoding="utf-8"?>
+<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
+ <CodeSnippet Format="1.0.0">
+ <Header>
+ <SnippetTypes>
+ <SnippetType>Expansion</SnippetType>
+ </SnippetTypes>
+ <Title>Contract.Ensures(Contract.ValueAtReturn(...)!=null)</Title>
+ <Shortcut>cern</Shortcut>
+ <Description>Emits a 'Contract.Ensures' non-null out or ref parameter clause</Description>
+ <Author>tabarbe</Author>
+ </Header>
+ <Snippet>
+ <Imports>
+ <Import>
+ <Namespace>System.Diagnostics.Contracts</Namespace>
+ </Import>
+ </Imports>
+ <Declarations>
+ <Object Editable="true">
+ <ID>value</ID>
+ <ToolTip>Value that must not be null</ToolTip>
+ <Default>arg</Default>
+ <Function>
+ </Function>
+ </Object>
+ </Declarations>
+ <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(Contract.ValueAtReturn(out $value$)!=null);$end$]]></Code>
+ </Snippet>
+ </CodeSnippet>
</CodeSnippets> \ No newline at end of file
diff --git a/Util/Code Snippets/contractensuresvalretNonNullElem.snippet b/Util/Code Snippets/contractensuresvalretNonNullElem.snippet
index c5915f44..195e9b68 100644
--- a/Util/Code Snippets/contractensuresvalretNonNullElem.snippet
+++ b/Util/Code Snippets/contractensuresvalretNonNullElem.snippet
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- </SnippetTypes>
- <Title>Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(...)))</Title>
- <Shortcut>cernn</Shortcut>
- <Description>Emits a 'Contract.Ensures' cce.non-nullelements out parameter clause</Description>
- <Author>tabarbe</Author>
- </Header>
- <Snippet>
- <Imports>
- <Import>
- <Namespace>System.Diagnostics.Contracts</Namespace>
- </Import>
- </Imports>
- <Declarations>
- <Object Editable="true">
- <ID>value</ID>
- <ToolTip>Value that must not be null</ToolTip>
- <Default>arg</Default>
- <Function>
- </Function>
- </Object>
- </Declarations>
- <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out $value$)));$end$]]></Code>
- </Snippet>
- </CodeSnippet>
+<?xml version="1.0" encoding="utf-8"?>
+<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
+ <CodeSnippet Format="1.0.0">
+ <Header>
+ <SnippetTypes>
+ <SnippetType>Expansion</SnippetType>
+ </SnippetTypes>
+ <Title>Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(...)))</Title>
+ <Shortcut>cernn</Shortcut>
+ <Description>Emits a 'Contract.Ensures' cce.non-nullelements out parameter clause</Description>
+ <Author>tabarbe</Author>
+ </Header>
+ <Snippet>
+ <Imports>
+ <Import>
+ <Namespace>System.Diagnostics.Contracts</Namespace>
+ </Import>
+ </Imports>
+ <Declarations>
+ <Object Editable="true">
+ <ID>value</ID>
+ <ToolTip>Value that must not be null</ToolTip>
+ <Default>arg</Default>
+ <Function>
+ </Function>
+ </Object>
+ </Declarations>
+ <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out $value$)));$end$]]></Code>
+ </Snippet>
+ </CodeSnippet>
</CodeSnippets> \ No newline at end of file
diff --git a/Util/Code Snippets/contractinvnonnullelem.snippet b/Util/Code Snippets/contractinvnonnullelem.snippet
index cd0ff1c6..e665411c 100644
--- a/Util/Code Snippets/contractinvnonnullelem.snippet
+++ b/Util/Code Snippets/contractinvnonnullelem.snippet
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- </SnippetTypes>
- <Title>Contract.Invariant(cce.NonNullElements(...))</Title>
- <Shortcut>cinn</Shortcut>
- <Description>Emits a 'Contract.Invariant' non-null elements clause</Description>
- <Author>tabarbe</Author>
- </Header>
- <Snippet>
- <Imports>
- <Import>
- <Namespace>System.Diagnostics.Contracts</Namespace>
- </Import>
- </Imports>
- <Declarations>
- <Object Editable="true">
- <ID>collection</ID>
- <ToolTip>collection whose elements must not be null</ToolTip>
- <Default>arg</Default>
- <Function>
- </Function>
- </Object>
- </Declarations>
- <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Invariant(cce.NonNullElements($collection$));$end$]]></Code>
- </Snippet>
- </CodeSnippet>
-</CodeSnippets>
+<?xml version="1.0" encoding="utf-8"?>
+<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
+ <CodeSnippet Format="1.0.0">
+ <Header>
+ <SnippetTypes>
+ <SnippetType>Expansion</SnippetType>
+ </SnippetTypes>
+ <Title>Contract.Invariant(cce.NonNullElements(...))</Title>
+ <Shortcut>cinn</Shortcut>
+ <Description>Emits a 'Contract.Invariant' non-null elements clause</Description>
+ <Author>tabarbe</Author>
+ </Header>
+ <Snippet>
+ <Imports>
+ <Import>
+ <Namespace>System.Diagnostics.Contracts</Namespace>
+ </Import>
+ </Imports>
+ <Declarations>
+ <Object Editable="true">
+ <ID>collection</ID>
+ <ToolTip>collection whose elements must not be null</ToolTip>
+ <Default>arg</Default>
+ <Function>
+ </Function>
+ </Object>
+ </Declarations>
+ <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Invariant(cce.NonNullElements($collection$));$end$]]></Code>
+ </Snippet>
+ </CodeSnippet>
+</CodeSnippets>
diff --git a/Util/Code Snippets/contractrequiresnonnullelem.snippet b/Util/Code Snippets/contractrequiresnonnullelem.snippet
index eb07bc66..bd550cae 100644
--- a/Util/Code Snippets/contractrequiresnonnullelem.snippet
+++ b/Util/Code Snippets/contractrequiresnonnullelem.snippet
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- </SnippetTypes>
- <Title>Contract.Requires(cce.NonNullElements(...))</Title>
- <Shortcut>crnn</Shortcut>
- <Description>Emits a 'Contract.Requires' non-null elements clause</Description>
- <Author>tabarbe</Author>
- </Header>
- <Snippet>
- <Imports>
- <Import>
- <Namespace>System.Diagnostics.Contracts</Namespace>
- </Import>
- </Imports>
- <Declarations>
- <Object Editable="true">
- <ID>collection</ID>
- <ToolTip>collection whose elements must not be null</ToolTip>
- <Default>arg</Default>
- <Function>
- </Function>
- </Object>
- </Declarations>
- <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires(cce.NonNullElements($collection$));$end$]]></Code>
- </Snippet>
- </CodeSnippet>
-</CodeSnippets>
+<?xml version="1.0" encoding="utf-8"?>
+<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
+ <CodeSnippet Format="1.0.0">
+ <Header>
+ <SnippetTypes>
+ <SnippetType>Expansion</SnippetType>
+ </SnippetTypes>
+ <Title>Contract.Requires(cce.NonNullElements(...))</Title>
+ <Shortcut>crnn</Shortcut>
+ <Description>Emits a 'Contract.Requires' non-null elements clause</Description>
+ <Author>tabarbe</Author>
+ </Header>
+ <Snippet>
+ <Imports>
+ <Import>
+ <Namespace>System.Diagnostics.Contracts</Namespace>
+ </Import>
+ </Imports>
+ <Declarations>
+ <Object Editable="true">
+ <ID>collection</ID>
+ <ToolTip>collection whose elements must not be null</ToolTip>
+ <Default>arg</Default>
+ <Function>
+ </Function>
+ </Object>
+ </Declarations>
+ <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires(cce.NonNullElements($collection$));$end$]]></Code>
+ </Snippet>
+ </CodeSnippet>
+</CodeSnippets>
diff --git a/Util/Emacs/boogie-mode.el b/Util/Emacs/boogie-mode.el
index 5763d695..39d1ef5d 100644
--- a/Util/Emacs/boogie-mode.el
+++ b/Util/Emacs/boogie-mode.el
@@ -1,120 +1,120 @@
-;; boogie-mode.el - GNU Emacs mode for Boogie 2
-;; Adapted by Rustan Leino from Jean-Christophe FILLIATRE's GNU Emancs mode for Why
-
-(defvar boogie-mode-hook nil)
-
-(defvar boogie-mode-map nil
- "Keymap for Boogie major mode")
-
-(if boogie-mode-map nil
- (setq boogie-mode-map (make-keymap))
- (define-key boogie-mode-map "\C-c\C-c" 'boogie-run-boogie)
- (define-key boogie-mode-map [(control return)] 'font-lock-fontify-buffer))
-
-(setq auto-mode-alist
- (append
- '(("\\.bpl" . boogie-mode))
- auto-mode-alist))
-
-;; font-lock
-
-(defun boogie-regexp-opt (l)
- (concat "\\<" (concat (regexp-opt l t) "\\>")))
-
-(defconst boogie-font-lock-keywords-1
- (list
- ; comments have the form /* ... */
- '("/\\*\\([^*]\\|\\*[^/]\\)*\\*/" . font-lock-comment-face)
- ; or // ...
- '("//\\([^
-]\\)*" . font-lock-comment-face)
-
- `(,(boogie-regexp-opt '(
- "type" "const" "function" "axiom" "var" "procedure" "implementation"
- "returns" "where" "requires" "ensures" "modifies" "free" "unique"
- "invariant" "extends" "complete"
- )) . font-lock-builtin-face)
- `(,(boogie-regexp-opt '(
- "assert" "assume" "break" "call" "then" "else" "havoc" "if" "goto" "return" "while"
- "old" "forall" "exists" "lambda" "cast" "div" "mod"
- "false" "true")) . font-lock-keyword-face)
- `(,(boogie-regexp-opt '("bool" "int" "real"
- "bv0" "bv1" "bv2" "bv3" "bv4" "bv5" "bv6" "bv7" "bv8" "bv9"
- "bv10" "bv11" "bv12" "bv13" "bv14" "bv15" "bv16" "bv17" "bv18" "bv19"
- "bv20" "bv21" "bv22" "bv23" "bv24" "bv25" "bv26" "bv27" "bv28" "bv29"
- "bv30" "bv31" "bv32" "bv33" "bv34" "bv35" "bv36" "bv37" "bv38" "bv39"
- "bv40" "bv41" "bv42" "bv43" "bv44" "bv45" "bv46" "bv47" "bv48" "bv49"
- "bv50" "bv51" "bv52" "bv53" "bv54" "bv55" "bv56" "bv57" "bv58" "bv59"
- "bv60" "bv61" "bv62" "bv63" "bv64" ; and so on
- )) . font-lock-type-face)
- )
- "Minimal highlighting for Boogie mode")
-
-(defvar boogie-font-lock-keywords boogie-font-lock-keywords-1
- "Default highlighting for Boogie mode")
-
-;; syntax
-
-(defvar boogie-mode-syntax-table nil
- "Syntax table for boogie-mode")
-
-(defun boogie-create-syntax-table ()
- (if boogie-mode-syntax-table
- ()
- (setq boogie-mode-syntax-table (make-syntax-table))
- (set-syntax-table boogie-mode-syntax-table)
- (modify-syntax-entry ?' "w" boogie-mode-syntax-table)
- (modify-syntax-entry ?_ "w" boogie-mode-syntax-table)))
-
-;; menu
-
-(require 'easymenu)
-
-(defun boogie-menu ()
- (easy-menu-define
- boogie-mode-menu (list boogie-mode-map)
- "Boogie Mode Menu."
- '("Boogie"
- ["Run Boogie" boogie-run-boogie t]
- "---"
- ["Recolor buffer" font-lock-fontify-buffer t]
- "---"
- ))
- (easy-menu-add boogie-mode-menu))
-
-;; commands
-
-(defun boogie-command-line (file)
- (concat "boogie -nologo -abbrevOutput " file))
-
-(defun boogie-run-boogie ()
- "run Boogie to check the Boogie program"
- (interactive)
- (let ((f (buffer-name)))
- (compile (boogie-command-line f))))
-
-;; setting the mode
-
-(defun boogie-mode ()
- "Major mode for editing Boogie programs.
-
-\\{boogie-mode-map}"
- (interactive)
- (kill-all-local-variables)
- (boogie-create-syntax-table)
- ; hilight
- (make-local-variable 'font-lock-defaults)
- (setq font-lock-defaults '(boogie-font-lock-keywords))
- ; indentation
- ; (make-local-variable 'indent-line-function)
- ; (setq indent-line-function 'boogie-indent-line)
- ; menu
- ; providing the mode
- (setq major-mode 'boogie-mode)
- (setq mode-name "Boogie")
- (use-local-map boogie-mode-map)
- (font-lock-mode 1)
- (boogie-menu)
- (run-hooks 'boogie-mode-hook))
-
-(provide 'boogie-mode)
+;; boogie-mode.el - GNU Emacs mode for Boogie 2
+;; Adapted by Rustan Leino from Jean-Christophe FILLIATRE's GNU Emancs mode for Why
+
+(defvar boogie-mode-hook nil)
+
+(defvar boogie-mode-map nil
+ "Keymap for Boogie major mode")
+
+(if boogie-mode-map nil
+ (setq boogie-mode-map (make-keymap))
+ (define-key boogie-mode-map "\C-c\C-c" 'boogie-run-boogie)
+ (define-key boogie-mode-map [(control return)] 'font-lock-fontify-buffer))
+
+(setq auto-mode-alist
+ (append
+ '(("\\.bpl" . boogie-mode))
+ auto-mode-alist))
+
+;; font-lock
+
+(defun boogie-regexp-opt (l)
+ (concat "\\<" (concat (regexp-opt l t) "\\>")))
+
+(defconst boogie-font-lock-keywords-1
+ (list
+ ; comments have the form /* ... */
+ '("/\\*\\([^*]\\|\\*[^/]\\)*\\*/" . font-lock-comment-face)
+ ; or // ...
+ '("//\\([^
+]\\)*" . font-lock-comment-face)
+
+ `(,(boogie-regexp-opt '(
+ "type" "const" "function" "axiom" "var" "procedure" "implementation"
+ "returns" "where" "requires" "ensures" "modifies" "free" "unique"
+ "invariant" "extends" "complete"
+ )) . font-lock-builtin-face)
+ `(,(boogie-regexp-opt '(
+ "assert" "assume" "break" "call" "then" "else" "havoc" "if" "goto" "return" "while"
+ "old" "forall" "exists" "lambda" "cast" "div" "mod"
+ "false" "true")) . font-lock-keyword-face)
+ `(,(boogie-regexp-opt '("bool" "int" "real"
+ "bv0" "bv1" "bv2" "bv3" "bv4" "bv5" "bv6" "bv7" "bv8" "bv9"
+ "bv10" "bv11" "bv12" "bv13" "bv14" "bv15" "bv16" "bv17" "bv18" "bv19"
+ "bv20" "bv21" "bv22" "bv23" "bv24" "bv25" "bv26" "bv27" "bv28" "bv29"
+ "bv30" "bv31" "bv32" "bv33" "bv34" "bv35" "bv36" "bv37" "bv38" "bv39"
+ "bv40" "bv41" "bv42" "bv43" "bv44" "bv45" "bv46" "bv47" "bv48" "bv49"
+ "bv50" "bv51" "bv52" "bv53" "bv54" "bv55" "bv56" "bv57" "bv58" "bv59"
+ "bv60" "bv61" "bv62" "bv63" "bv64" ; and so on
+ )) . font-lock-type-face)
+ )
+ "Minimal highlighting for Boogie mode")
+
+(defvar boogie-font-lock-keywords boogie-font-lock-keywords-1
+ "Default highlighting for Boogie mode")
+
+;; syntax
+
+(defvar boogie-mode-syntax-table nil
+ "Syntax table for boogie-mode")
+
+(defun boogie-create-syntax-table ()
+ (if boogie-mode-syntax-table
+ ()
+ (setq boogie-mode-syntax-table (make-syntax-table))
+ (set-syntax-table boogie-mode-syntax-table)
+ (modify-syntax-entry ?' "w" boogie-mode-syntax-table)
+ (modify-syntax-entry ?_ "w" boogie-mode-syntax-table)))
+
+;; menu
+
+(require 'easymenu)
+
+(defun boogie-menu ()
+ (easy-menu-define
+ boogie-mode-menu (list boogie-mode-map)
+ "Boogie Mode Menu."
+ '("Boogie"
+ ["Run Boogie" boogie-run-boogie t]
+ "---"
+ ["Recolor buffer" font-lock-fontify-buffer t]
+ "---"
+ ))
+ (easy-menu-add boogie-mode-menu))
+
+;; commands
+
+(defun boogie-command-line (file)
+ (concat "boogie -nologo -abbrevOutput " file))
+
+(defun boogie-run-boogie ()
+ "run Boogie to check the Boogie program"
+ (interactive)
+ (let ((f (buffer-name)))
+ (compile (boogie-command-line f))))
+
+;; setting the mode
+
+(defun boogie-mode ()
+ "Major mode for editing Boogie programs.
+
+\\{boogie-mode-map}"
+ (interactive)
+ (kill-all-local-variables)
+ (boogie-create-syntax-table)
+ ; hilight
+ (make-local-variable 'font-lock-defaults)
+ (setq font-lock-defaults '(boogie-font-lock-keywords))
+ ; indentation
+ ; (make-local-variable 'indent-line-function)
+ ; (setq indent-line-function 'boogie-indent-line)
+ ; menu
+ ; providing the mode
+ (setq major-mode 'boogie-mode)
+ (setq mode-name "Boogie")
+ (use-local-map boogie-mode-map)
+ (font-lock-mode 1)
+ (boogie-menu)
+ (run-hooks 'boogie-mode-hook))
+
+(provide 'boogie-mode)
diff --git a/Util/VS2010/Boogie/BoogieLanguageService.sln b/Util/VS2010/Boogie/BoogieLanguageService.sln
index 0ad3f0e7..d54efb50 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService.sln
+++ b/Util/VS2010/Boogie/BoogieLanguageService.sln
@@ -1,20 +1,20 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoogieLanguageService", "BoogieLanguageService\BoogieLanguageService.csproj", "{66E611EE-84D8-4EB9-9A33-164A53E00553}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {66E611EE-84D8-4EB9-9A33-164A53E00553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {66E611EE-84D8-4EB9-9A33-164A53E00553}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {66E611EE-84D8-4EB9-9A33-164A53E00553}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {66E611EE-84D8-4EB9-9A33-164A53E00553}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoogieLanguageService", "BoogieLanguageService\BoogieLanguageService.csproj", "{66E611EE-84D8-4EB9-9A33-164A53E00553}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {66E611EE-84D8-4EB9-9A33-164A53E00553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {66E611EE-84D8-4EB9-9A33-164A53E00553}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {66E611EE-84D8-4EB9-9A33-164A53E00553}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {66E611EE-84D8-4EB9-9A33-164A53E00553}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj b/Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj
index 86e0a2bc..a7a0fd0c 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj
+++ b/Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj
@@ -1,179 +1,179 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.30729</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Demo.BoogieLanguageService</RootNamespace>
- <AssemblyName>BoogieLanguageService</AssemblyName>
- <SignAssembly>True</SignAssembly>
- <AssemblyOriginatorKeyFile>Key.snk</AssemblyOriginatorKeyFile>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <ProjectGuid>{66E611EE-84D8-4EB9-9A33-164A53E00553}</ProjectGuid>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>4.0</OldToolsVersion>
- <UpgradeBackupLocation>
- </UpgradeBackupLocation>
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <TargetFrameworkProfile />
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <RunCodeAnalysis>true</RunCodeAnalysis>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Irony, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ca48ace7223ead47, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>Resources\Irony.dll</HintPath>
- </Reference>
- <Reference Include="Microsoft.VisualStudio.OLE.Interop" />
- <Reference Include="Microsoft.VisualStudio.Package.LanguageService.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Package.LanguageService.10.0.dll</HintPath>
- </Reference>
- <Reference Include="Microsoft.VisualStudio.Shell.10.0">
- <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.10.0.dll</HintPath>
- </Reference>
- <Reference Include="Microsoft.VisualStudio.Shell.Immutable.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.Immutable.10.0.dll</HintPath>
- </Reference>
- <Reference Include="Microsoft.VisualStudio.Shell.Interop" />
- <Reference Include="Microsoft.VisualStudio.Shell.Interop.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <SpecificVersion>False</SpecificVersion>
- <EmbedInteropTypes>True</EmbedInteropTypes>
- <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.Interop.10.0.dll</HintPath>
- </Reference>
- <Reference Include="Microsoft.VisualStudio.Shell.Interop.8.0" />
- <Reference Include="Microsoft.VisualStudio.Shell.Interop.9.0" />
- <Reference Include="Microsoft.VisualStudio.TextManager.Interop" />
- <Reference Include="Microsoft.VisualStudio.TextManager.Interop.8.0, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\..\..\..\..\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.TextManager.Interop.8.0.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Design" />
- <Reference Include="System.Drawing" />
- <Reference Include="System.Windows.Forms" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Configuration.cs" />
- <Compile Include="Grammar.cs" />
- <Compile Include="Guids.cs" />
- <Compile Include="Integration\AuthoringScope.cs" />
- <Compile Include="Integration\Configuration.cs" />
- <Compile Include="Integration\Declaration.cs" />
- <Compile Include="Integration\Declarations.cs" />
- <Compile Include="Integration\IASTResolver.cs" />
- <Compile Include="Integration\IronyViewFilter.cs" />
- <Compile Include="Integration\IronyLanguageService.cs" />
- <Compile Include="Integration\LineScanner.cs" />
- <Compile Include="Integration\Method.cs" />
- <Compile Include="Integration\Methods.cs" />
- <Compile Include="Integration\Package.cs" />
- <Compile Include="Integration\Resolver.cs" />
- <Compile Include="Integration\Source.cs" />
- <Compile Include="Resources.Designer.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Resources.resx</DependentUpon>
- </Compile>
- <Compile Include="GlobalSuppressions.cs" />
- <Compile Include="IronyLanguageServicePackage.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <EmbeddedResource Include="Resources.resx">
- <Generator>ResXFileCodeGenerator</Generator>
- <LastGenOutput>Resources.Designer.cs</LastGenOutput>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="VSPackage.resx">
- <MergeWithCTO>true</MergeWithCTO>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- </ItemGroup>
- <ItemGroup>
- <Content Include="Resources\Irony.dll" />
- <None Include="source.extension.vsixmanifest" />
- </ItemGroup>
- <ItemGroup>
- <None Include="Key.snk" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.VisualBasic.PowerPacks.10.0">
- <Visible>False</Visible>
- <ProductName>Microsoft Visual Basic PowerPacks 10.0</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <PropertyGroup>
- <!--
- To specify a different registry root to register your package, uncomment the TargetRegistryRoot
- tag and specify a registry root in it.
- <TargetRegistryRoot></TargetRegistryRoot>
- -->
- <RegisterOutputPackage>true</RegisterOutputPackage>
- <RegisterWithCodebase>true</RegisterWithCodebase>
- </PropertyGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
- <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Demo.BoogieLanguageService</RootNamespace>
+ <AssemblyName>BoogieLanguageService</AssemblyName>
+ <SignAssembly>True</SignAssembly>
+ <AssemblyOriginatorKeyFile>Key.snk</AssemblyOriginatorKeyFile>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <ProjectGuid>{66E611EE-84D8-4EB9-9A33-164A53E00553}</ProjectGuid>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>4.0</OldToolsVersion>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <RunCodeAnalysis>true</RunCodeAnalysis>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Irony, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ca48ace7223ead47, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>Resources\Irony.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.VisualStudio.OLE.Interop" />
+ <Reference Include="Microsoft.VisualStudio.Package.LanguageService.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Package.LanguageService.10.0.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.VisualStudio.Shell.10.0">
+ <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.10.0.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.VisualStudio.Shell.Immutable.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.Immutable.10.0.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop" />
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <SpecificVersion>False</SpecificVersion>
+ <EmbedInteropTypes>True</EmbedInteropTypes>
+ <HintPath>C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.Interop.10.0.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop.8.0" />
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop.9.0" />
+ <Reference Include="Microsoft.VisualStudio.TextManager.Interop" />
+ <Reference Include="Microsoft.VisualStudio.TextManager.Interop.8.0, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\..\..\..\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.TextManager.Interop.8.0.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Design" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Configuration.cs" />
+ <Compile Include="Grammar.cs" />
+ <Compile Include="Guids.cs" />
+ <Compile Include="Integration\AuthoringScope.cs" />
+ <Compile Include="Integration\Configuration.cs" />
+ <Compile Include="Integration\Declaration.cs" />
+ <Compile Include="Integration\Declarations.cs" />
+ <Compile Include="Integration\IASTResolver.cs" />
+ <Compile Include="Integration\IronyViewFilter.cs" />
+ <Compile Include="Integration\IronyLanguageService.cs" />
+ <Compile Include="Integration\LineScanner.cs" />
+ <Compile Include="Integration\Method.cs" />
+ <Compile Include="Integration\Methods.cs" />
+ <Compile Include="Integration\Package.cs" />
+ <Compile Include="Integration\Resolver.cs" />
+ <Compile Include="Integration\Source.cs" />
+ <Compile Include="Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="GlobalSuppressions.cs" />
+ <Compile Include="IronyLanguageServicePackage.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="VSPackage.resx">
+ <MergeWithCTO>true</MergeWithCTO>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Resources\Irony.dll" />
+ <None Include="source.extension.vsixmanifest" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Key.snk" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.VisualBasic.PowerPacks.10.0">
+ <Visible>False</Visible>
+ <ProductName>Microsoft Visual Basic PowerPacks 10.0</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <PropertyGroup>
+ <!--
+ To specify a different registry root to register your package, uncomment the TargetRegistryRoot
+ tag and specify a registry root in it.
+ <TargetRegistryRoot></TargetRegistryRoot>
+ -->
+ <RegisterOutputPackage>true</RegisterOutputPackage>
+ <RegisterWithCodebase>true</RegisterWithCodebase>
+ </PropertyGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project> \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs b/Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs
index 97775fdf..3a3fed64 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs
@@ -1,24 +1,24 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.VisualStudio.Package;
-using Microsoft.VisualStudio.TextManager.Interop;
-
-namespace Demo
-{
- public static partial class Configuration
- {
- public const string Name = "Boogie";
- public const string FormatList = "Boogie File (*.bpl)\n*.bpl";
-
- static Configuration()
- {
- // default colors - currently, these need to be declared
- CreateColor("Keyword", COLORINDEX.CI_BLUE, COLORINDEX.CI_USERTEXT_BK);
- CreateColor("Comment", COLORINDEX.CI_DARKGREEN, COLORINDEX.CI_USERTEXT_BK);
- CreateColor("Identifier", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK);
- CreateColor("String", COLORINDEX.CI_MAROON, COLORINDEX.CI_USERTEXT_BK);
- CreateColor("Number", COLORINDEX.CI_RED, COLORINDEX.CI_USERTEXT_BK);
- CreateColor("Text", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK);
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Microsoft.VisualStudio.Package;
+using Microsoft.VisualStudio.TextManager.Interop;
+
+namespace Demo
+{
+ public static partial class Configuration
+ {
+ public const string Name = "Boogie";
+ public const string FormatList = "Boogie File (*.bpl)\n*.bpl";
+
+ static Configuration()
+ {
+ // default colors - currently, these need to be declared
+ CreateColor("Keyword", COLORINDEX.CI_BLUE, COLORINDEX.CI_USERTEXT_BK);
+ CreateColor("Comment", COLORINDEX.CI_DARKGREEN, COLORINDEX.CI_USERTEXT_BK);
+ CreateColor("Identifier", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK);
+ CreateColor("String", COLORINDEX.CI_MAROON, COLORINDEX.CI_USERTEXT_BK);
+ CreateColor("Number", COLORINDEX.CI_RED, COLORINDEX.CI_USERTEXT_BK);
+ CreateColor("Text", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK);
+ }
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs b/Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs
index f0857cbb..746e3dae 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs
@@ -1,11 +1,11 @@
-// This file is used by Code Analysis to maintain SuppressMessage
-// attributes that are applied to this project. Project-level
-// suppressions either have no target or are given a specific target
-// and scoped to a namespace, type, member, etc.
-//
-// To add a suppression to this file, right-click the message in the
-// Error List, point to "Suppress Message(s)", and click "In Project
-// Suppression File". You do not need to add suppressions to this
-// file manually.
-
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1017:MarkAssembliesWithComVisible")]
+// This file is used by Code Analysis to maintain SuppressMessage
+// attributes that are applied to this project. Project-level
+// suppressions either have no target or are given a specific target
+// and scoped to a namespace, type, member, etc.
+//
+// To add a suppression to this file, right-click the message in the
+// Error List, point to "Suppress Message(s)", and click "In Project
+// Suppression File". You do not need to add suppressions to this
+// file manually.
+
+[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1017:MarkAssembliesWithComVisible")]
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs b/Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs
index fd7c561d..bedb0cfa 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs
@@ -1,397 +1,397 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Irony.Parsing;
-
-namespace Demo
-{
- [Language("Boogie", "1.0", "Microsoft Research Boogie, intermediate verification language")]
- public class Grammar : Irony.Parsing.Grammar
- {
- public Grammar() {
- #region 1. Terminals
- NumberLiteral n = TerminalFactory.CreateCSharpNumber("number");
- StringLiteral stringLiteral = TerminalFactory.CreateCSharpString("String");
-
- IdentifierTerminal ident = new IdentifierTerminal("Identifier");
- this.MarkReservedWords(
- "assert", "assume", "axiom",
- "bool", "break",
- "bv0", "bv1", "bv2", "bv3", "bv4", "bv5", "bv6", "bv7", "bv8", "bv9",
- "bv10", "bv11", "bv12", "bv13", "bv14", "bv15", "bv16", "bv17", "bv18", "bv19",
- "bv20", "bv21", "bv22", "bv23", "bv24", "bv25", "bv26", "bv27", "bv28", "bv29",
- "bv30", "bv31", "bv32",
- "bv64",
- "call", "complete", "const",
- "div",
- "else", "ensures", "exists", "extends",
- "false", "forall", "free", "function",
- "goto",
- "havoc",
- "if", "implementation", "int", "invariant",
- "lambda",
- "mod", "modifies",
- "old",
- "procedure",
- "real", "requires", "return", "returns",
- "then", "true", "type",
- "unique",
- "var",
- "where", "while"
- );
-
- StringLiteral s = new StringLiteral("String", "'", StringFlags.AllowsDoubledQuote);
-
- Terminal dot = ToTerm(".", "dot");
- Terminal less = ToTerm("<");
- Terminal greater = ToTerm(">");
- Terminal iff = ToTerm("<==>");
- Terminal implication = ToTerm("==>");
- Terminal explication = ToTerm("<==");
- Terminal LBracket = ToTerm("[");
- Terminal RBracket = ToTerm("]");
- Terminal LParen = ToTerm("(");
- Terminal RParen = ToTerm(")");
- Terminal RCurly = ToTerm("}");
- Terminal LCurly = ToTerm("{");
- Terminal LDoubleCurly = ToTerm("{{");
- Terminal RDoubleCurly = ToTerm("}}");
- Terminal comma = ToTerm(",");
- Terminal semicolon = ToTerm(";");
- Terminal colon = ToTerm(":");
- Terminal doubleColon = ToTerm("::");
-
- #endregion
-
- #region 2. Non-terminals
- #region 2.1 Expressions
- NonTerminal expression = new NonTerminal("Expr");
- NonTerminal BinOp = new NonTerminal("BinOp");
- NonTerminal LUnOp = new NonTerminal("LUnOp");
- NonTerminal RUnOp = new NonTerminal("RUnOp");
-
- NonTerminal ArrayConstructor = new NonTerminal("ArrayConstructor");
- #endregion
-
- #region 2.2 QualifiedName
- //Expression List: expr1, expr2, expr3, ..
- NonTerminal expressionList = new NonTerminal("ExprList");
- NonTerminal identList = new NonTerminal("identList");
- //A name in form: a.b.c().d[1,2].e ....
- NonTerminal NewStmt = new NonTerminal("NewStmt");
- NonTerminal NewArrStmt = new NonTerminal("NewArrStmt");
- NonTerminal QualifiedName = new NonTerminal("QualifiedName");
- NonTerminal GenericsPostfix = new NonTerminal("GenericsPostfix");
- NonTerminal ArrayExpression = new NonTerminal("ArrayExpression");
- NonTerminal FunctionExpression = new NonTerminal("FunctionExpression");
- NonTerminal selectExpr = new NonTerminal("selectExpr");
- #endregion
-
- #region 2.3 Statement
- NonTerminal Condition = new NonTerminal("Condition");
-
- NonTerminal Statement = new NonTerminal("Statement");
- NonTerminal Statements = new NonTerminal("Statements");
-
- //Block
- NonTerminal blockStatement = new NonTerminal("CompoundStatement");
- #endregion
-
- #region 2.4 Program and Functions
- NonTerminal Prog = new NonTerminal("Prog");
- NonTerminal anything = new NonTerminal("anything"); // temporary hack
- NonTerminal declaration = new NonTerminal("declaration");
- NonTerminal classDecl = new NonTerminal("class decl");
- NonTerminal memberDecl = new NonTerminal("member decl");
- NonTerminal fieldDecl = new NonTerminal("field declaration");
- NonTerminal idType = new NonTerminal("identifier type");
- NonTerminal typeDecl = new NonTerminal("type reference");
- NonTerminal methodDecl = new NonTerminal("method declaration");
- NonTerminal formalParameters = new NonTerminal("formals");
- NonTerminal methodSpec = new NonTerminal("method spec");
- NonTerminal formalsList = new NonTerminal("ParamaterListOpt");
- NonTerminal functionDecl = new NonTerminal("function declaration");
- NonTerminal predicateDecl = new NonTerminal("predicate declaration");
- NonTerminal invariantDecl = new NonTerminal("invariant declaration");
- NonTerminal Semi = new NonTerminal("semi");
- NonTerminal Rhs = new NonTerminal("right-hand side");
- NonTerminal FieldInit = new NonTerminal("field init");
- NonTerminal FieldInits = new NonTerminal("field inits");
- NonTerminal installBounds = new NonTerminal("installBounds");
- NonTerminal localVarStmt = new NonTerminal("localVarStmt");
- NonTerminal evalstate = new NonTerminal("evalstate");
- NonTerminal channelDecl = new NonTerminal("channel declaration");
- NonTerminal loopSpec = new NonTerminal("loop specification");
- NonTerminal rdPermArg = new NonTerminal("rdPermArg");
- #endregion
-
- #endregion
-
- #region 3. BNF rules
-
- Semi.Rule = semicolon;
-
- #region 3.1 Expressions
- selectExpr.Rule = (ToTerm("this") + ".").Q() + QualifiedName;
- evalstate.Rule =
- ident + ToTerm(".") +
- (ToTerm("acquire")
- | "release"
- | "fork" + FunctionExpression
- )
- ;
- rdPermArg.Rule = ToTerm("*") | expression;
-
- expression.Rule = ToTerm("true")
- | "false"
- | "null"
- | "maxlock"
- | "lockbottom"
- | "this"
- | "result"
- | s
- | n
- | QualifiedName
- // The following is needed: to parse "A<B ..." either as comparison or as beginning of GenericsPostfix
- | QualifiedName + less + expression
- //| QualifiedName + less + QualifiedName + greater
- //| NewStmt
- | NewArrStmt
- | ArrayExpression
- | FunctionExpression
- | ArrayConstructor
- | expression + BinOp + expression
- | LUnOp + expression
- | expression + RUnOp
- | LParen + expression + RParen
- | ToTerm("unfolding") + expression + "in" + expression
- | ToTerm("acc") + "(" + selectExpr + (("," + expression) | Empty) + ")"
- | ToTerm("old") + "(" + expression + ")"
- | ToTerm("eval") + "(" + evalstate + "," + expression + ")"
- | ToTerm("credit") + "(" + expression + "," + expression + ")"
- | ToTerm("credit") + "(" + expression + ")"
- | expression + PreferShiftHere() + "?" + expression + ":" + expression
- | ToTerm("rd") +
- (ToTerm("holds") + "(" + expression + ")"
- | "(" + selectExpr + rdPermArg.Q() + ")"
- )
-
- ;
- expressionList.Rule = MakePlusRule(expressionList, comma, expression);
- identList.Rule = MakePlusRule(identList, comma, ident);
- NewStmt.Rule = "new" + QualifiedName + GenericsPostfix.Q() + LParen + expressionList.Q() + RParen;
- NewArrStmt.Rule = "new" + QualifiedName + GenericsPostfix.Q() + LBracket + expressionList.Q() + RBracket;
- BinOp.Rule = ToTerm("+") | "-" | "*" | "div" | "mod" | "^" | "&" | "|"
- | "&&" | "||" | "==" | "!=" | greater | less
- | ">=" | "<=" | "is"
- | "=" | "+=" | "-="
- | "."
- | "==>" | "<==>" | "<<"
- ;
-
- LUnOp.Rule = ToTerm("-") | "~" | "!";
- RUnOp.Rule = ToTerm("++") | "--";
-
- ArrayConstructor.Rule = LBracket + expressionList + RBracket;
- #endregion
-
- #region 3.2 QualifiedName
- ArrayExpression.Rule = QualifiedName + LBracket + expressionList + RBracket;
- FunctionExpression.Rule = QualifiedName + LParen + expressionList.Q() + RParen;
-
- QualifiedName.Rule = ident | QualifiedName + dot + ident;
-
-
- GenericsPostfix.Rule = less + QualifiedName + greater;
-
- //ExprList.Rule = Expr.Plus(comma);
- #endregion
-
- #region 3.3 Statement
- Condition.Rule = LParen + expression + RParen;
- installBounds.Rule
- = "installBounds"
- //= ToTerm("between") + expressionList + "and" + expressionList
- //| "below" + expressionList
- //| "below" + expressionList + "above" + expressionList
- //| "above" + expressionList
- //| "above" + expressionList + "below" + expressionList
- ;
- FieldInit.Rule
- = ident + ":=" + expression
- ;
- FieldInits.Rule = MakeStarRule(FieldInits, ToTerm(","), FieldInit);
- Rhs.Rule
- = ToTerm("new") + ident
- | ToTerm("new") + ident + "{" + FieldInits + "}"
- | ToTerm("new") + ident + installBounds
- | ToTerm("new") + ident + "{" + FieldInits + "}" + installBounds
- | expression
- ;
- localVarStmt.Rule
- = idType + ":=" + Rhs + Semi
- | idType + Semi
- ;
- loopSpec.Rule
- = ToTerm("invariant") + expression + Semi
- | "lockchange" + expressionList + Semi
- ;
-
-
-
- Statement.Rule = Semi
- | "if" + Condition + Statement
- ;
- Statements.Rule = MakeStarRule(Statements, null, Statement);
- blockStatement.Rule = LCurly + Statements + RCurly;
-
-
- #endregion
-
- #region 3.4 Prog
- Prog.Rule = anything.Star() + Eof;
-
- anything.Rule
- = ToTerm("assert")
- | "assume" | "axiom" |
- "bool" | "break" |
- "bv0" | "bv1" | "bv2" | "bv3" | "bv4" | "bv5" | "bv6" | "bv7" | "bv8" | "bv9" |
- "bv10" | "bv11" | "bv12" | "bv13" | "bv14" | "bv15" | "bv16" | "bv17" | "bv18" | "bv19" |
- "bv20" | "bv21" | "bv22" | "bv23" | "bv24" | "bv25" | "bv26" | "bv27" | "bv28" | "bv29" |
- "bv30" | "bv31" | "bv32" |
- "bv64" |
- "call" | "complete" | "const" |
- "else" | "ensures" | "exists" | "extends" |
- "false" | "forall" | "free" | "function" |
- "goto" |
- "havoc" |
- "if" | "implementation" | "int" | "invariant" |
- "lambda" |
- "modifies" |
- "old" |
- "procedure" |
- "real" | "requires" | "return" | "returns" |
- "then" | "true" | "type" |
- "unique" |
- "var" |
- "where" | "while"
- | ident
- | "}"
- | "{"
- | "("
- | ")"
- | "["
- | "]"
- | ","
- | ":"
- | ";"
- | "."
- | "`"
- | "=="
- | "="
- | "!="
- | "<"
- | "<="
- | ">="
- | ">"
- | "=>"
- | ":="
- | "+"
- | "-"
- | "*"
- | "/"
- | "%"
- | "!!"
- | "|"
- | "!"
- | "&&"
- | "||"
- | "==>"
- | "<==>"
- | "#"
- | "$"
- | "^"
- | n
- | stringLiteral
- ;
-
- idType.Rule
- = ident + ":" + typeDecl
- | ident
- ;
-
- typeDecl.Rule
- = (ToTerm("int") | "bool" | "real" | ident)
- ;
-
- fieldDecl.Rule
- = ToTerm("var") + idType + Semi
- | ToTerm("ghost") + "var" + idType + Semi
- ;
-
- methodSpec.Rule = (ToTerm("requires") | "ensures" | "lockchange") + expression + Semi;
-
- formalsList.Rule = MakeStarRule(formalsList, comma, idType);
- formalParameters.Rule = LParen + formalsList + RParen;
- methodDecl.Rule = "method" + ident + formalParameters
- + (("returns" + formalParameters) | Empty)
- + methodSpec.Star()
- + blockStatement;
- functionDecl.Rule
- = ToTerm("function") + ident + formalParameters + ":" + typeDecl + methodSpec.Star() + "{" + expression + "}";
- predicateDecl.Rule
- = ToTerm("predicate") + ident + "{" + expression + "}";
- invariantDecl.Rule
- = ToTerm("invariant") + expression + Semi;
-
- memberDecl.Rule
- = fieldDecl
- | invariantDecl
- | methodDecl
- //| conditionDecl
- | predicateDecl
- | functionDecl
- ;
- classDecl.Rule
- = (ToTerm("external") | Empty) + "class" + ident + ("module" + ident | Empty) + "{" + memberDecl.Star() + "}";
- channelDecl.Rule
- = ToTerm("channel") + ident + formalParameters + "where" + expression + Semi
- | ToTerm("channel") + ident + formalParameters + Semi;
- declaration.Rule = classDecl | channelDecl
- ;
-
-
- Terminal Comment = new CommentTerminal("Comment", "/*", "*/");
- NonGrammarTerminals.Add(Comment);
- Terminal LineComment = new CommentTerminal("LineComment", "//", "\n");
- NonGrammarTerminals.Add(LineComment);
- #endregion
- #endregion
-
- #region 4. Set starting symbol
- this.Root = Prog; // Set grammar root
- #endregion
-
- #region 5. Operators precedence
- RegisterOperators(1, "<==>");
- RegisterOperators(2, "+", "-");
- RegisterOperators(3, "*", "div", "mod", "!!");
- RegisterOperators(4, Associativity.Right, "^");
- RegisterOperators(5, "||");
- RegisterOperators(6, "&&");
- RegisterOperators(7, "==", "=", "!=", ">", "<", ">=", "<=");
- RegisterOperators(8, "in");
- RegisterOperators(9, "-", "!", "++", "--");
- RegisterOperators(10, "==>");
- RegisterOperators(11, ".");
-
- //RegisterOperators(10, Associativity.Right, ".",",", ")", "(", "]", "[", "{", "}");
- //RegisterOperators(11, Associativity.Right, "else");
- #endregion
-
- #region 6. Punctuation symbols
- RegisterPunctuation("(", ")", "[", "]", "{", "}", ",", ";");
- #endregion
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Irony.Parsing;
+
+namespace Demo
+{
+ [Language("Boogie", "1.0", "Microsoft Research Boogie, intermediate verification language")]
+ public class Grammar : Irony.Parsing.Grammar
+ {
+ public Grammar() {
+ #region 1. Terminals
+ NumberLiteral n = TerminalFactory.CreateCSharpNumber("number");
+ StringLiteral stringLiteral = TerminalFactory.CreateCSharpString("String");
+
+ IdentifierTerminal ident = new IdentifierTerminal("Identifier");
+ this.MarkReservedWords(
+ "assert", "assume", "axiom",
+ "bool", "break",
+ "bv0", "bv1", "bv2", "bv3", "bv4", "bv5", "bv6", "bv7", "bv8", "bv9",
+ "bv10", "bv11", "bv12", "bv13", "bv14", "bv15", "bv16", "bv17", "bv18", "bv19",
+ "bv20", "bv21", "bv22", "bv23", "bv24", "bv25", "bv26", "bv27", "bv28", "bv29",
+ "bv30", "bv31", "bv32",
+ "bv64",
+ "call", "complete", "const",
+ "div",
+ "else", "ensures", "exists", "extends",
+ "false", "forall", "free", "function",
+ "goto",
+ "havoc",
+ "if", "implementation", "int", "invariant",
+ "lambda",
+ "mod", "modifies",
+ "old",
+ "procedure",
+ "real", "requires", "return", "returns",
+ "then", "true", "type",
+ "unique",
+ "var",
+ "where", "while"
+ );
+
+ StringLiteral s = new StringLiteral("String", "'", StringFlags.AllowsDoubledQuote);
+
+ Terminal dot = ToTerm(".", "dot");
+ Terminal less = ToTerm("<");
+ Terminal greater = ToTerm(">");
+ Terminal iff = ToTerm("<==>");
+ Terminal implication = ToTerm("==>");
+ Terminal explication = ToTerm("<==");
+ Terminal LBracket = ToTerm("[");
+ Terminal RBracket = ToTerm("]");
+ Terminal LParen = ToTerm("(");
+ Terminal RParen = ToTerm(")");
+ Terminal RCurly = ToTerm("}");
+ Terminal LCurly = ToTerm("{");
+ Terminal LDoubleCurly = ToTerm("{{");
+ Terminal RDoubleCurly = ToTerm("}}");
+ Terminal comma = ToTerm(",");
+ Terminal semicolon = ToTerm(";");
+ Terminal colon = ToTerm(":");
+ Terminal doubleColon = ToTerm("::");
+
+ #endregion
+
+ #region 2. Non-terminals
+ #region 2.1 Expressions
+ NonTerminal expression = new NonTerminal("Expr");
+ NonTerminal BinOp = new NonTerminal("BinOp");
+ NonTerminal LUnOp = new NonTerminal("LUnOp");
+ NonTerminal RUnOp = new NonTerminal("RUnOp");
+
+ NonTerminal ArrayConstructor = new NonTerminal("ArrayConstructor");
+ #endregion
+
+ #region 2.2 QualifiedName
+ //Expression List: expr1, expr2, expr3, ..
+ NonTerminal expressionList = new NonTerminal("ExprList");
+ NonTerminal identList = new NonTerminal("identList");
+ //A name in form: a.b.c().d[1,2].e ....
+ NonTerminal NewStmt = new NonTerminal("NewStmt");
+ NonTerminal NewArrStmt = new NonTerminal("NewArrStmt");
+ NonTerminal QualifiedName = new NonTerminal("QualifiedName");
+ NonTerminal GenericsPostfix = new NonTerminal("GenericsPostfix");
+ NonTerminal ArrayExpression = new NonTerminal("ArrayExpression");
+ NonTerminal FunctionExpression = new NonTerminal("FunctionExpression");
+ NonTerminal selectExpr = new NonTerminal("selectExpr");
+ #endregion
+
+ #region 2.3 Statement
+ NonTerminal Condition = new NonTerminal("Condition");
+
+ NonTerminal Statement = new NonTerminal("Statement");
+ NonTerminal Statements = new NonTerminal("Statements");
+
+ //Block
+ NonTerminal blockStatement = new NonTerminal("CompoundStatement");
+ #endregion
+
+ #region 2.4 Program and Functions
+ NonTerminal Prog = new NonTerminal("Prog");
+ NonTerminal anything = new NonTerminal("anything"); // temporary hack
+ NonTerminal declaration = new NonTerminal("declaration");
+ NonTerminal classDecl = new NonTerminal("class decl");
+ NonTerminal memberDecl = new NonTerminal("member decl");
+ NonTerminal fieldDecl = new NonTerminal("field declaration");
+ NonTerminal idType = new NonTerminal("identifier type");
+ NonTerminal typeDecl = new NonTerminal("type reference");
+ NonTerminal methodDecl = new NonTerminal("method declaration");
+ NonTerminal formalParameters = new NonTerminal("formals");
+ NonTerminal methodSpec = new NonTerminal("method spec");
+ NonTerminal formalsList = new NonTerminal("ParamaterListOpt");
+ NonTerminal functionDecl = new NonTerminal("function declaration");
+ NonTerminal predicateDecl = new NonTerminal("predicate declaration");
+ NonTerminal invariantDecl = new NonTerminal("invariant declaration");
+ NonTerminal Semi = new NonTerminal("semi");
+ NonTerminal Rhs = new NonTerminal("right-hand side");
+ NonTerminal FieldInit = new NonTerminal("field init");
+ NonTerminal FieldInits = new NonTerminal("field inits");
+ NonTerminal installBounds = new NonTerminal("installBounds");
+ NonTerminal localVarStmt = new NonTerminal("localVarStmt");
+ NonTerminal evalstate = new NonTerminal("evalstate");
+ NonTerminal channelDecl = new NonTerminal("channel declaration");
+ NonTerminal loopSpec = new NonTerminal("loop specification");
+ NonTerminal rdPermArg = new NonTerminal("rdPermArg");
+ #endregion
+
+ #endregion
+
+ #region 3. BNF rules
+
+ Semi.Rule = semicolon;
+
+ #region 3.1 Expressions
+ selectExpr.Rule = (ToTerm("this") + ".").Q() + QualifiedName;
+ evalstate.Rule =
+ ident + ToTerm(".") +
+ (ToTerm("acquire")
+ | "release"
+ | "fork" + FunctionExpression
+ )
+ ;
+ rdPermArg.Rule = ToTerm("*") | expression;
+
+ expression.Rule = ToTerm("true")
+ | "false"
+ | "null"
+ | "maxlock"
+ | "lockbottom"
+ | "this"
+ | "result"
+ | s
+ | n
+ | QualifiedName
+ // The following is needed: to parse "A<B ..." either as comparison or as beginning of GenericsPostfix
+ | QualifiedName + less + expression
+ //| QualifiedName + less + QualifiedName + greater
+ //| NewStmt
+ | NewArrStmt
+ | ArrayExpression
+ | FunctionExpression
+ | ArrayConstructor
+ | expression + BinOp + expression
+ | LUnOp + expression
+ | expression + RUnOp
+ | LParen + expression + RParen
+ | ToTerm("unfolding") + expression + "in" + expression
+ | ToTerm("acc") + "(" + selectExpr + (("," + expression) | Empty) + ")"
+ | ToTerm("old") + "(" + expression + ")"
+ | ToTerm("eval") + "(" + evalstate + "," + expression + ")"
+ | ToTerm("credit") + "(" + expression + "," + expression + ")"
+ | ToTerm("credit") + "(" + expression + ")"
+ | expression + PreferShiftHere() + "?" + expression + ":" + expression
+ | ToTerm("rd") +
+ (ToTerm("holds") + "(" + expression + ")"
+ | "(" + selectExpr + rdPermArg.Q() + ")"
+ )
+
+ ;
+ expressionList.Rule = MakePlusRule(expressionList, comma, expression);
+ identList.Rule = MakePlusRule(identList, comma, ident);
+ NewStmt.Rule = "new" + QualifiedName + GenericsPostfix.Q() + LParen + expressionList.Q() + RParen;
+ NewArrStmt.Rule = "new" + QualifiedName + GenericsPostfix.Q() + LBracket + expressionList.Q() + RBracket;
+ BinOp.Rule = ToTerm("+") | "-" | "*" | "div" | "mod" | "^" | "&" | "|"
+ | "&&" | "||" | "==" | "!=" | greater | less
+ | ">=" | "<=" | "is"
+ | "=" | "+=" | "-="
+ | "."
+ | "==>" | "<==>" | "<<"
+ ;
+
+ LUnOp.Rule = ToTerm("-") | "~" | "!";
+ RUnOp.Rule = ToTerm("++") | "--";
+
+ ArrayConstructor.Rule = LBracket + expressionList + RBracket;
+ #endregion
+
+ #region 3.2 QualifiedName
+ ArrayExpression.Rule = QualifiedName + LBracket + expressionList + RBracket;
+ FunctionExpression.Rule = QualifiedName + LParen + expressionList.Q() + RParen;
+
+ QualifiedName.Rule = ident | QualifiedName + dot + ident;
+
+
+ GenericsPostfix.Rule = less + QualifiedName + greater;
+
+ //ExprList.Rule = Expr.Plus(comma);
+ #endregion
+
+ #region 3.3 Statement
+ Condition.Rule = LParen + expression + RParen;
+ installBounds.Rule
+ = "installBounds"
+ //= ToTerm("between") + expressionList + "and" + expressionList
+ //| "below" + expressionList
+ //| "below" + expressionList + "above" + expressionList
+ //| "above" + expressionList
+ //| "above" + expressionList + "below" + expressionList
+ ;
+ FieldInit.Rule
+ = ident + ":=" + expression
+ ;
+ FieldInits.Rule = MakeStarRule(FieldInits, ToTerm(","), FieldInit);
+ Rhs.Rule
+ = ToTerm("new") + ident
+ | ToTerm("new") + ident + "{" + FieldInits + "}"
+ | ToTerm("new") + ident + installBounds
+ | ToTerm("new") + ident + "{" + FieldInits + "}" + installBounds
+ | expression
+ ;
+ localVarStmt.Rule
+ = idType + ":=" + Rhs + Semi
+ | idType + Semi
+ ;
+ loopSpec.Rule
+ = ToTerm("invariant") + expression + Semi
+ | "lockchange" + expressionList + Semi
+ ;
+
+
+
+ Statement.Rule = Semi
+ | "if" + Condition + Statement
+ ;
+ Statements.Rule = MakeStarRule(Statements, null, Statement);
+ blockStatement.Rule = LCurly + Statements + RCurly;
+
+
+ #endregion
+
+ #region 3.4 Prog
+ Prog.Rule = anything.Star() + Eof;
+
+ anything.Rule
+ = ToTerm("assert")
+ | "assume" | "axiom" |
+ "bool" | "break" |
+ "bv0" | "bv1" | "bv2" | "bv3" | "bv4" | "bv5" | "bv6" | "bv7" | "bv8" | "bv9" |
+ "bv10" | "bv11" | "bv12" | "bv13" | "bv14" | "bv15" | "bv16" | "bv17" | "bv18" | "bv19" |
+ "bv20" | "bv21" | "bv22" | "bv23" | "bv24" | "bv25" | "bv26" | "bv27" | "bv28" | "bv29" |
+ "bv30" | "bv31" | "bv32" |
+ "bv64" |
+ "call" | "complete" | "const" |
+ "else" | "ensures" | "exists" | "extends" |
+ "false" | "forall" | "free" | "function" |
+ "goto" |
+ "havoc" |
+ "if" | "implementation" | "int" | "invariant" |
+ "lambda" |
+ "modifies" |
+ "old" |
+ "procedure" |
+ "real" | "requires" | "return" | "returns" |
+ "then" | "true" | "type" |
+ "unique" |
+ "var" |
+ "where" | "while"
+ | ident
+ | "}"
+ | "{"
+ | "("
+ | ")"
+ | "["
+ | "]"
+ | ","
+ | ":"
+ | ";"
+ | "."
+ | "`"
+ | "=="
+ | "="
+ | "!="
+ | "<"
+ | "<="
+ | ">="
+ | ">"
+ | "=>"
+ | ":="
+ | "+"
+ | "-"
+ | "*"
+ | "/"
+ | "%"
+ | "!!"
+ | "|"
+ | "!"
+ | "&&"
+ | "||"
+ | "==>"
+ | "<==>"
+ | "#"
+ | "$"
+ | "^"
+ | n
+ | stringLiteral
+ ;
+
+ idType.Rule
+ = ident + ":" + typeDecl
+ | ident
+ ;
+
+ typeDecl.Rule
+ = (ToTerm("int") | "bool" | "real" | ident)
+ ;
+
+ fieldDecl.Rule
+ = ToTerm("var") + idType + Semi
+ | ToTerm("ghost") + "var" + idType + Semi
+ ;
+
+ methodSpec.Rule = (ToTerm("requires") | "ensures" | "lockchange") + expression + Semi;
+
+ formalsList.Rule = MakeStarRule(formalsList, comma, idType);
+ formalParameters.Rule = LParen + formalsList + RParen;
+ methodDecl.Rule = "method" + ident + formalParameters
+ + (("returns" + formalParameters) | Empty)
+ + methodSpec.Star()
+ + blockStatement;
+ functionDecl.Rule
+ = ToTerm("function") + ident + formalParameters + ":" + typeDecl + methodSpec.Star() + "{" + expression + "}";
+ predicateDecl.Rule
+ = ToTerm("predicate") + ident + "{" + expression + "}";
+ invariantDecl.Rule
+ = ToTerm("invariant") + expression + Semi;
+
+ memberDecl.Rule
+ = fieldDecl
+ | invariantDecl
+ | methodDecl
+ //| conditionDecl
+ | predicateDecl
+ | functionDecl
+ ;
+ classDecl.Rule
+ = (ToTerm("external") | Empty) + "class" + ident + ("module" + ident | Empty) + "{" + memberDecl.Star() + "}";
+ channelDecl.Rule
+ = ToTerm("channel") + ident + formalParameters + "where" + expression + Semi
+ | ToTerm("channel") + ident + formalParameters + Semi;
+ declaration.Rule = classDecl | channelDecl
+ ;
+
+
+ Terminal Comment = new CommentTerminal("Comment", "/*", "*/");
+ NonGrammarTerminals.Add(Comment);
+ Terminal LineComment = new CommentTerminal("LineComment", "//", "\n");
+ NonGrammarTerminals.Add(LineComment);
+ #endregion
+ #endregion
+
+ #region 4. Set starting symbol
+ this.Root = Prog; // Set grammar root
+ #endregion
+
+ #region 5. Operators precedence
+ RegisterOperators(1, "<==>");
+ RegisterOperators(2, "+", "-");
+ RegisterOperators(3, "*", "div", "mod", "!!");
+ RegisterOperators(4, Associativity.Right, "^");
+ RegisterOperators(5, "||");
+ RegisterOperators(6, "&&");
+ RegisterOperators(7, "==", "=", "!=", ">", "<", ">=", "<=");
+ RegisterOperators(8, "in");
+ RegisterOperators(9, "-", "!", "++", "--");
+ RegisterOperators(10, "==>");
+ RegisterOperators(11, ".");
+
+ //RegisterOperators(10, Associativity.Right, ".",",", ")", "(", "]", "[", "{", "}");
+ //RegisterOperators(11, Associativity.Right, "else");
+ #endregion
+
+ #region 6. Punctuation symbols
+ RegisterPunctuation("(", ")", "[", "]", "{", "}", ",", ";");
+ #endregion
+ }
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Guids.cs b/Util/VS2010/Boogie/BoogieLanguageService/Guids.cs
index a09463fd..73d0cbb0 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Guids.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Guids.cs
@@ -1,13 +1,13 @@
-using System;
-
-namespace Demo
-{
- static class GuidList
- {
- public const string guidIronyLanguageServiceString = "0A949930-AB4A-4A00-ABD0-191E81249240";
- public const string guidIronyLanguageServicePkgString = "FC7F6CE7-49C7-40C9-8636-EB37A936D77F";
- public const string guidIronyLanguageServiceCmdSetString = "72B8E853-2250-426B-9566-6D318ADE7C2D";
-
- public static readonly Guid guidIronyLanguageServiceCmdSet = new Guid(guidIronyLanguageServiceCmdSetString);
- };
+using System;
+
+namespace Demo
+{
+ static class GuidList
+ {
+ public const string guidIronyLanguageServiceString = "0A949930-AB4A-4A00-ABD0-191E81249240";
+ public const string guidIronyLanguageServicePkgString = "FC7F6CE7-49C7-40C9-8636-EB37A936D77F";
+ public const string guidIronyLanguageServiceCmdSetString = "72B8E853-2250-426B-9566-6D318ADE7C2D";
+
+ public static readonly Guid guidIronyLanguageServiceCmdSet = new Guid(guidIronyLanguageServiceCmdSetString);
+ };
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs
index 9a49dbe4..b5bc4a0e 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs
@@ -1,66 +1,66 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.VisualStudio;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Microsoft.VisualStudio.Package;
-
-namespace Demo
-{
- public class AuthoringScope : Microsoft.VisualStudio.Package.AuthoringScope
- {
- public AuthoringScope(object parseResult)
- {
- this.parseResult = parseResult;
-
- // how should this be set?
- this.resolver = new Resolver();
- }
-
- object parseResult;
- IASTResolver resolver;
-
- // ParseReason.QuickInfo
- public override string GetDataTipText(int line, int col, out TextSpan span)
- {
- span = new TextSpan();
- return null;
- }
-
- // ParseReason.CompleteWord
- // ParseReason.DisplayMemberList
- // ParseReason.MemberSelect
- // ParseReason.MemberSelectAndHilightBraces
- public override Microsoft.VisualStudio.Package.Declarations GetDeclarations(IVsTextView view, int line, int col, TokenInfo info, ParseReason reason)
- {
- IList<Declaration> declarations;
- switch (reason)
- {
- case ParseReason.CompleteWord:
- declarations = resolver.FindCompletions(parseResult, line, col);
- break;
- case ParseReason.DisplayMemberList:
- case ParseReason.MemberSelect:
- case ParseReason.MemberSelectAndHighlightBraces:
- declarations = resolver.FindMembers(parseResult, line, col);
- break;
- default:
- throw new ArgumentException("reason");
- }
-
- return new Declarations(declarations);
- }
-
- // ParseReason.GetMethods
- public override Microsoft.VisualStudio.Package.Methods GetMethods(int line, int col, string name)
- {
- return new Methods(resolver.FindMethods(parseResult, line, col, name));
- }
-
- // ParseReason.Goto
- public override string Goto(VSConstants.VSStd97CmdID cmd, IVsTextView textView, int line, int col, out TextSpan span)
- {
- span = new TextSpan();
- return null;
- }
- }
+using System;
+using System.Collections.Generic;
+using Microsoft.VisualStudio;
+using Microsoft.VisualStudio.TextManager.Interop;
+using Microsoft.VisualStudio.Package;
+
+namespace Demo
+{
+ public class AuthoringScope : Microsoft.VisualStudio.Package.AuthoringScope
+ {
+ public AuthoringScope(object parseResult)
+ {
+ this.parseResult = parseResult;
+
+ // how should this be set?
+ this.resolver = new Resolver();
+ }
+
+ object parseResult;
+ IASTResolver resolver;
+
+ // ParseReason.QuickInfo
+ public override string GetDataTipText(int line, int col, out TextSpan span)
+ {
+ span = new TextSpan();
+ return null;
+ }
+
+ // ParseReason.CompleteWord
+ // ParseReason.DisplayMemberList
+ // ParseReason.MemberSelect
+ // ParseReason.MemberSelectAndHilightBraces
+ public override Microsoft.VisualStudio.Package.Declarations GetDeclarations(IVsTextView view, int line, int col, TokenInfo info, ParseReason reason)
+ {
+ IList<Declaration> declarations;
+ switch (reason)
+ {
+ case ParseReason.CompleteWord:
+ declarations = resolver.FindCompletions(parseResult, line, col);
+ break;
+ case ParseReason.DisplayMemberList:
+ case ParseReason.MemberSelect:
+ case ParseReason.MemberSelectAndHighlightBraces:
+ declarations = resolver.FindMembers(parseResult, line, col);
+ break;
+ default:
+ throw new ArgumentException("reason");
+ }
+
+ return new Declarations(declarations);
+ }
+
+ // ParseReason.GetMethods
+ public override Microsoft.VisualStudio.Package.Methods GetMethods(int line, int col, string name)
+ {
+ return new Methods(resolver.FindMethods(parseResult, line, col, name));
+ }
+
+ // ParseReason.Goto
+ public override string Goto(VSConstants.VSStd97CmdID cmd, IVsTextView textView, int line, int col, out TextSpan span)
+ {
+ span = new TextSpan();
+ return null;
+ }
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs
index f7412393..706471da 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs
@@ -1,116 +1,116 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.VisualStudio.Package;
-using Microsoft.VisualStudio.TextManager.Interop;
-
-namespace Demo
-{
- public static partial class Configuration
- {
- public static Grammar Grammar = new Grammar();
- static List<Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem> colorableItems = new List<Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem>();
-
- public static IList<Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem> ColorableItems
- {
- get { return colorableItems; }
- }
-
- public static TokenColor CreateColor(string name, COLORINDEX foreground, COLORINDEX background)
- {
- return CreateColor(name, foreground, background, false, false);
- }
-
- public static TokenColor CreateColor(string name, COLORINDEX foreground, COLORINDEX background, bool bold, bool strikethrough)
- {
- colorableItems.Add(new ColorableItem(name, foreground, background, bold, strikethrough));
- return (TokenColor)colorableItems.Count;
- }
-
- public static void ColorToken(string tokenName, TokenType type, TokenColor color, TokenTriggers trigger)
- {
- definitions[tokenName] = new TokenDefinition(type, color, trigger);
- }
-
- public static TokenDefinition GetDefinition(string tokenName)
- {
- TokenDefinition result;
- return definitions.TryGetValue(tokenName, out result) ? result : defaultDefinition;
- }
-
- private static TokenDefinition defaultDefinition = new TokenDefinition(TokenType.Text, TokenColor.Text, TokenTriggers.None);
- private static Dictionary<string, TokenDefinition> definitions = new Dictionary<string, TokenDefinition>();
-
- public struct TokenDefinition
- {
- public TokenDefinition(TokenType type, TokenColor color, TokenTriggers triggers)
- {
- this.TokenType = type;
- this.TokenColor = color;
- this.TokenTriggers = triggers;
- }
-
- public TokenType TokenType;
- public TokenColor TokenColor;
- public TokenTriggers TokenTriggers;
- }
- }
-
- public class ColorableItem : Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem
- {
- private string displayName;
- private COLORINDEX background;
- private COLORINDEX foreground;
- private uint fontFlags = (uint)FONTFLAGS.FF_DEFAULT;
-
- public ColorableItem(string displayName, COLORINDEX foreground, COLORINDEX background, bool bold, bool strikethrough)
- {
- this.displayName = displayName;
- this.background = background;
- this.foreground = foreground;
-
- if (bold)
- this.fontFlags = this.fontFlags | (uint)FONTFLAGS.FF_BOLD;
- if (strikethrough)
- this.fontFlags = this.fontFlags | (uint)FONTFLAGS.FF_STRIKETHROUGH;
- }
-
- #region IVsColorableItem Members
- public int GetDefaultColors(COLORINDEX[] piForeground, COLORINDEX[] piBackground)
- {
- if (null == piForeground)
- {
- throw new ArgumentNullException("piForeground");
- }
- if (0 == piForeground.Length)
- {
- throw new ArgumentOutOfRangeException("piForeground");
- }
- piForeground[0] = foreground;
-
- if (null == piBackground)
- {
- throw new ArgumentNullException("piBackground");
- }
- if (0 == piBackground.Length)
- {
- throw new ArgumentOutOfRangeException("piBackground");
- }
- piBackground[0] = background;
-
- return Microsoft.VisualStudio.VSConstants.S_OK;
- }
-
- public int GetDefaultFontFlags(out uint pdwFontFlags)
- {
- pdwFontFlags = this.fontFlags;
- return Microsoft.VisualStudio.VSConstants.S_OK;
- }
-
- public int GetDisplayName(out string pbstrName)
- {
- pbstrName = displayName;
- return Microsoft.VisualStudio.VSConstants.S_OK;
- }
- #endregion
- }
+using System;
+using System.Collections.Generic;
+using Microsoft.VisualStudio.Package;
+using Microsoft.VisualStudio.TextManager.Interop;
+
+namespace Demo
+{
+ public static partial class Configuration
+ {
+ public static Grammar Grammar = new Grammar();
+ static List<Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem> colorableItems = new List<Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem>();
+
+ public static IList<Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem> ColorableItems
+ {
+ get { return colorableItems; }
+ }
+
+ public static TokenColor CreateColor(string name, COLORINDEX foreground, COLORINDEX background)
+ {
+ return CreateColor(name, foreground, background, false, false);
+ }
+
+ public static TokenColor CreateColor(string name, COLORINDEX foreground, COLORINDEX background, bool bold, bool strikethrough)
+ {
+ colorableItems.Add(new ColorableItem(name, foreground, background, bold, strikethrough));
+ return (TokenColor)colorableItems.Count;
+ }
+
+ public static void ColorToken(string tokenName, TokenType type, TokenColor color, TokenTriggers trigger)
+ {
+ definitions[tokenName] = new TokenDefinition(type, color, trigger);
+ }
+
+ public static TokenDefinition GetDefinition(string tokenName)
+ {
+ TokenDefinition result;
+ return definitions.TryGetValue(tokenName, out result) ? result : defaultDefinition;
+ }
+
+ private static TokenDefinition defaultDefinition = new TokenDefinition(TokenType.Text, TokenColor.Text, TokenTriggers.None);
+ private static Dictionary<string, TokenDefinition> definitions = new Dictionary<string, TokenDefinition>();
+
+ public struct TokenDefinition
+ {
+ public TokenDefinition(TokenType type, TokenColor color, TokenTriggers triggers)
+ {
+ this.TokenType = type;
+ this.TokenColor = color;
+ this.TokenTriggers = triggers;
+ }
+
+ public TokenType TokenType;
+ public TokenColor TokenColor;
+ public TokenTriggers TokenTriggers;
+ }
+ }
+
+ public class ColorableItem : Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem
+ {
+ private string displayName;
+ private COLORINDEX background;
+ private COLORINDEX foreground;
+ private uint fontFlags = (uint)FONTFLAGS.FF_DEFAULT;
+
+ public ColorableItem(string displayName, COLORINDEX foreground, COLORINDEX background, bool bold, bool strikethrough)
+ {
+ this.displayName = displayName;
+ this.background = background;
+ this.foreground = foreground;
+
+ if (bold)
+ this.fontFlags = this.fontFlags | (uint)FONTFLAGS.FF_BOLD;
+ if (strikethrough)
+ this.fontFlags = this.fontFlags | (uint)FONTFLAGS.FF_STRIKETHROUGH;
+ }
+
+ #region IVsColorableItem Members
+ public int GetDefaultColors(COLORINDEX[] piForeground, COLORINDEX[] piBackground)
+ {
+ if (null == piForeground)
+ {
+ throw new ArgumentNullException("piForeground");
+ }
+ if (0 == piForeground.Length)
+ {
+ throw new ArgumentOutOfRangeException("piForeground");
+ }
+ piForeground[0] = foreground;
+
+ if (null == piBackground)
+ {
+ throw new ArgumentNullException("piBackground");
+ }
+ if (0 == piBackground.Length)
+ {
+ throw new ArgumentOutOfRangeException("piBackground");
+ }
+ piBackground[0] = background;
+
+ return Microsoft.VisualStudio.VSConstants.S_OK;
+ }
+
+ public int GetDefaultFontFlags(out uint pdwFontFlags)
+ {
+ pdwFontFlags = this.fontFlags;
+ return Microsoft.VisualStudio.VSConstants.S_OK;
+ }
+
+ public int GetDisplayName(out string pbstrName)
+ {
+ pbstrName = displayName;
+ return Microsoft.VisualStudio.VSConstants.S_OK;
+ }
+ #endregion
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs
index c0fda5ca..fa1ac730 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs
@@ -1,30 +1,30 @@
-using System;
-using System.Collections.Generic;
-
-namespace Demo
-{
- public struct Declaration : IComparable<Declaration>
- {
- public Declaration(string description, string displayText, int glyph, string name)
- {
- this.Description = description;
- this.DisplayText = displayText;
- this.Glyph = glyph;
- this.Name = name;
- }
-
- public string Description;
- public string DisplayText;
- public int Glyph;
- public string Name;
-
- #region IComparable<Declaration> Members
-
- public int CompareTo(Declaration other)
- {
- return DisplayText.CompareTo(other.DisplayText);
- }
-
- #endregion
- }
+using System;
+using System.Collections.Generic;
+
+namespace Demo
+{
+ public struct Declaration : IComparable<Declaration>
+ {
+ public Declaration(string description, string displayText, int glyph, string name)
+ {
+ this.Description = description;
+ this.DisplayText = displayText;
+ this.Glyph = glyph;
+ this.Name = name;
+ }
+
+ public string Description;
+ public string DisplayText;
+ public int Glyph;
+ public string Name;
+
+ #region IComparable<Declaration> Members
+
+ public int CompareTo(Declaration other)
+ {
+ return DisplayText.CompareTo(other.DisplayText);
+ }
+
+ #endregion
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs
index 98a411ce..ddda8783 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs
@@ -1,56 +1,56 @@
-/***************************************************************************
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-This code is licensed under the Visual Studio SDK license terms.
-THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
-ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
-IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
-PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
-
-***************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Microsoft.VisualStudio.Package;
-
-namespace Demo
-{
- public class Declarations : Microsoft.VisualStudio.Package.Declarations
- {
- IList<Declaration> declarations;
- public Declarations(IList<Declaration> declarations)
- {
- this.declarations = declarations;
- }
-
- public override int GetCount()
- {
- return declarations.Count;
- }
-
- public override string GetDescription(int index)
- {
- return declarations[index].Description;
- }
-
- public override string GetDisplayText(int index)
- {
- return declarations[index].DisplayText;
- }
-
- public override int GetGlyph(int index)
- {
- return declarations[index].Glyph;
- }
-
- public override string GetName(int index)
- {
- if (index >= 0)
- return declarations[index].Name;
-
- return null;
- }
- }
+/***************************************************************************
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+This code is licensed under the Visual Studio SDK license terms.
+THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
+ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
+IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
+PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
+
+***************************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Microsoft.VisualStudio.TextManager.Interop;
+using Microsoft.VisualStudio.Package;
+
+namespace Demo
+{
+ public class Declarations : Microsoft.VisualStudio.Package.Declarations
+ {
+ IList<Declaration> declarations;
+ public Declarations(IList<Declaration> declarations)
+ {
+ this.declarations = declarations;
+ }
+
+ public override int GetCount()
+ {
+ return declarations.Count;
+ }
+
+ public override string GetDescription(int index)
+ {
+ return declarations[index].Description;
+ }
+
+ public override string GetDisplayText(int index)
+ {
+ return declarations[index].DisplayText;
+ }
+
+ public override int GetGlyph(int index)
+ {
+ return declarations[index].Glyph;
+ }
+
+ public override string GetName(int index)
+ {
+ if (index >= 0)
+ return declarations[index].Name;
+
+ return null;
+ }
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs
index 8de1a454..f3ff41f4 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs
@@ -1,13 +1,13 @@
-using System;
-using System.Collections.Generic;
-
-namespace Demo
-{
- interface IASTResolver
- {
- IList<Declaration> FindCompletions(object result, int line, int col);
- IList<Declaration> FindMembers(object result, int line, int col);
- string FindQuickInfo(object result, int line, int col);
- IList<Method> FindMethods(object result, int line, int col, string name);
- }
+using System;
+using System.Collections.Generic;
+
+namespace Demo
+{
+ interface IASTResolver
+ {
+ IList<Declaration> FindCompletions(object result, int line, int col);
+ IList<Declaration> FindMembers(object result, int line, int col);
+ string FindQuickInfo(object result, int line, int col);
+ IList<Method> FindMethods(object result, int line, int col, string name);
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs
index 1d1bdce4..30279078 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs
@@ -1,343 +1,343 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using Microsoft.VisualStudio;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Microsoft.VisualStudio.Package;
-
-using Irony.Parsing;
-using Irony.Ast;
-
-using System.IO;
-
-namespace Demo
-{
- public class IronyLanguageService : Microsoft.VisualStudio.Package.LanguageService
- {
- private Grammar grammar;
- private Parser parser;
- private ParsingContext context;
-
- public IronyLanguageService()
- {
- grammar = new Grammar();
- parser = new Parser(Configuration.Grammar);
- context = new ParsingContext(parser);
- }
-
-
- #region Custom Colors
- public override int GetColorableItem(int index, out IVsColorableItem item)
- {
- if (index <= Configuration.ColorableItems.Count)
- {
- item = Configuration.ColorableItems[index - 1];
- return Microsoft.VisualStudio.VSConstants.S_OK;
- }
- else
- {
- throw new ArgumentNullException("index");
- }
- }
-
- public override int GetItemCount(out int count)
- {
- count = Configuration.ColorableItems.Count;
- return Microsoft.VisualStudio.VSConstants.S_OK;
- }
- #endregion
-
- #region MPF Accessor and Factory specialisation
- private LanguagePreferences preferences;
- public override LanguagePreferences GetLanguagePreferences()
- {
- if (this.preferences == null)
- {
- this.preferences = new LanguagePreferences(this.Site,
- typeof(IronyLanguageService).GUID,
- this.Name);
- this.preferences.Init();
- }
-
- return this.preferences;
- }
-
- public override Microsoft.VisualStudio.Package.Source CreateSource(IVsTextLines buffer)
- {
- return new Source(this, buffer, this.GetColorizer(buffer));
- }
-
- private IScanner scanner;
- public override IScanner GetScanner(IVsTextLines buffer)
- {
- if (scanner == null)
- this.scanner = new LineScanner(grammar);
-
- return this.scanner;
- }
- #endregion
-
- public override void OnIdle(bool periodic)
- {
- // from IronPythonLanguage sample
- // this appears to be necessary to get a parse request with ParseReason = Check?
- Source src = (Source)GetSource(this.LastActiveTextView);
- if (src != null && src.LastParseTime >= Int32.MaxValue >> 12)
- {
- src.LastParseTime = 0;
- }
- base.OnIdle(periodic);
- }
-
- public override Microsoft.VisualStudio.Package.AuthoringScope ParseSource(ParseRequest req)
- {
- Debug.Print("ParseSource at ({0}:{1}), reason {2}", req.Line, req.Col, req.Reason);
- Source source = (Source)this.GetSource(req.FileName);
- switch (req.Reason)
- {
- case ParseReason.Check:
- // This is where you perform your syntax highlighting.
- // Parse entire source as given in req.Text.
- // Store results in the AuthoringScope object.
- var parsed = parser.Parse(req.Text, req.FileName);
- var root = parsed.Root;
- if (root != null) {
-
- AstNode node = (AstNode)root.AstNode;
- source.ParseResult = node;
- }
-
- // Used for brace matching.
- TokenStack braces = parser.Context.OpenBraces;
- foreach (Token brace in braces) {
- if (brace.OtherBrace == null) continue;
- TextSpan openBrace = new TextSpan();
- openBrace.iStartLine = brace.Location.Line;
- openBrace.iStartIndex = brace.Location.Column;
- openBrace.iEndLine = brace.Location.Line;
- openBrace.iEndIndex = openBrace.iStartIndex + brace.Length;
-
- TextSpan closeBrace = new TextSpan();
- closeBrace.iStartLine = brace.OtherBrace.Location.Line;
- closeBrace.iStartIndex = brace.OtherBrace.Location.Column;
- closeBrace.iEndLine = brace.OtherBrace.Location.Line;
- closeBrace.iEndIndex = closeBrace.iStartIndex + brace.OtherBrace.Length;
-
- if (source.Braces == null) {
- source.Braces = new List<TextSpan[]>();
- }
- source.Braces.Add(new TextSpan[2] { openBrace, closeBrace });
- }
-
- if (parser.Context.CurrentParseTree.ParserMessages.Count > 0) {
- foreach (ParserMessage error in parser.Context.CurrentParseTree.ParserMessages) {
- TextSpan span = new TextSpan();
- span.iStartLine = span.iEndLine = error.Location.Line - 1;
- span.iStartIndex = error.Location.Column;
- span.iEndIndex = error.Location.Position;
- req.Sink.AddError(req.FileName, error.Message, span, Severity.Error);
- }
- } else { // parse looks okay, send it to Boogie.
- if (!File.Exists(@"C:\tmp\StartBoogie.bat")) {
- AddErrorBecauseOfToolProblems(req, @"Can't find C:\tmp\StartBoogie.bat");
- } else {
-
- // From: http://dotnetperls.com/process-redirect-standard-output
- // (Also, see: http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx)
- //
- // Setup the process with the ProcessStartInfo class.
- //
- ProcessStartInfo start = new ProcessStartInfo();
- start.FileName = @"cmd.exe";
- start.Arguments = @"/c C:\tmp\StartBoogie.bat"; // Specify exe name.
- start.UseShellExecute = false;
- start.RedirectStandardInput = true;
- start.RedirectStandardOutput = true;
- start.CreateNoWindow = true;
- //start.WindowStyle = ProcessWindowStyle.Minimized; // need this or else you see the window pop up
- //
- // Start the process.
- //
- using (Process process = Process.Start(start)) {
- //
- // Push the file contents to the new process
- //
- StreamWriter myStreamWriter = process.StandardInput;
- myStreamWriter.WriteLine(req.Text);
- myStreamWriter.Close();
- //
- // Read in all the text from the process with the StreamReader.
- //
- using (StreamReader reader = process.StandardOutput) {
- //string result = reader.ReadToEnd();
- //Console.Write(result);
-
- for (string line = reader.ReadLine(); !String.IsNullOrEmpty(line); line = reader.ReadLine()) {
- // the lines of interest have the form "filename(line,col): some_error_label: error_message"
- // where "some_error_label" is "Error" or "syntax error" or "Error BP5003" or "Related location"
- string message;
- int n = line.IndexOf("): ", 2); // we start at 2, to avoid problems with "C:\..."
- if (n == -1) {
- continue;
- } else {
- int m = line.IndexOf(": ", n + 3);
- if (m == -1) {
- continue;
- }
- message = line.Substring(m + 2);
- }
- line = line.Substring(0, n); // line now has the form "filename(line,col"
-
- n = line.LastIndexOf(',');
- if (n == -1) { continue; }
- var colString = line.Substring(n + 1);
- line = line.Substring(0, n); // line now has the form "filename(line"
-
- n = line.LastIndexOf('(');
- if (n == -1) { continue; }
- var lineString = line.Substring(n + 1);
-
- try {
- TextSpan span = new TextSpan();
- span.iStartLine = span.iEndLine = Int32.Parse(lineString) - 1;
- span.iStartIndex = Int32.Parse(colString) - 1;
- span.iEndIndex = span.iStartIndex + 5; // hack
- req.Sink.AddError(req.FileName, message, span, Severity.Error);
- } catch (System.FormatException) {
- continue;
- } catch (System.OverflowException) {
- continue;
- }
- }
- }
- }
- }
- }
-
- break;
-
- case ParseReason.DisplayMemberList:
- // Parse the line specified in req.Line for the two
- // tokens just before req.Col to obtain the identifier
- // and the member connector symbol.
- // Examine existing parse tree for members of the identifer
- // and return a list of members in your version of the
- // Declarations class as stored in the AuthoringScope
- // object.
- break;
-
- case ParseReason.MethodTip:
- // Parse the line specified in req.Line for the token
- // just before req.Col to obtain the name of the method
- // being entered.
- // Examine the existing parse tree for all method signatures
- // with the same name and return a list of those signatures
- // in your version of the Methods class as stored in the
- // AuthoringScope object.
- break;
-
- case ParseReason.HighlightBraces:
- case ParseReason.MemberSelectAndHighlightBraces:
- if (source.Braces != null)
- {
- foreach (TextSpan[] brace in source.Braces)
- {
- if (brace.Length == 2)
- req.Sink.MatchPair(brace[0], brace[1], 1);
- else if (brace.Length >= 3)
- req.Sink.MatchTriple(brace[0], brace[1], brace[2], 1);
- }
- }
- break;
- }
-
- return new AuthoringScope(source.ParseResult);
- }
-
- private static void AddErrorBecauseOfToolProblems(ParseRequest req, string msg) {
- TextSpan span = new TextSpan();
- span.iStartLine = span.iEndLine = 1;
- span.iStartIndex = 1;
- span.iEndIndex = 2;
- req.Sink.AddError(req.FileName, msg, span, Severity.Error);
- }
-
- /// <summary>
- /// Called to determine if the given location can have a breakpoint applied to it.
- /// </summary>
- /// <param name="buffer">The IVsTextBuffer object containing the source file.</param>
- /// <param name="line">The line number where the breakpoint is to be set.</param>
- /// <param name="col">The offset into the line where the breakpoint is to be set.</param>
- /// <param name="pCodeSpan">
- /// Returns the TextSpan giving the extent of the code affected by the breakpoint if the
- /// breakpoint can be set.
- /// </param>
- /// <returns>
- /// If successful, returns S_OK; otherwise returns S_FALSE if there is no code at the given
- /// position or returns an error code (the validation is deferred until the debug engine is loaded).
- /// </returns>
- /// <remarks>
- /// <para>
- /// CAUTION: Even if you do not intend to support the ValidateBreakpointLocation but your language
- /// does support breakpoints, you must override the ValidateBreakpointLocation method and return a
- /// span that contains the specified line and column; otherwise, breakpoints cannot be set anywhere
- /// except line 1. You can return E_NOTIMPL to indicate that you do not otherwise support this
- /// method but the span must always be set. The example shows how this can be done.
- /// </para>
- /// <para>
- /// Since the language service parses the code, it generally knows what is considered code and what
- /// is not. Normally, the debug engine is loaded and the pending breakpoints are bound to the source. It is at this time the breakpoint location is validated. This method is a fast way to determine if a breakpoint can be set at a particular location without loading the debug engine.
- /// </para>
- /// <para>
- /// You can implement this method to call the ParseSource method with the parse reason of CodeSpan.
- /// The parser examines the specified location and returns a span identifying the code at that
- /// location. If there is code at the location, the span identifying that code should be passed to
- /// your implementation of the CodeSpan method in your version of the AuthoringSink class. Then your
- /// implementation of the ValidateBreakpointLocation method retrieves that span from your version of
- /// the AuthoringSink class and returns that span in the pCodeSpan argument.
- /// </para>
- /// <para>
- /// The base method returns E_NOTIMPL.
- /// </para>
- /// </remarks>
- public override int ValidateBreakpointLocation(IVsTextBuffer buffer, int line, int col, TextSpan[] pCodeSpan)
- {
- // TODO: Add code to not allow breakpoints to be placed on non-code lines.
- // TODO: Refactor to allow breakpoint locations to span multiple lines.
- if (pCodeSpan != null)
- {
- pCodeSpan[0].iStartLine = line;
- pCodeSpan[0].iStartIndex = col;
- pCodeSpan[0].iEndLine = line;
- pCodeSpan[0].iEndIndex = col;
- if (buffer != null)
- {
- int length;
- buffer.GetLengthOfLine(line, out length);
- pCodeSpan[0].iStartIndex = 0;
- pCodeSpan[0].iEndIndex = length;
- }
- return VSConstants.S_OK;
- }
- else
- {
- return VSConstants.S_FALSE;
- }
- }
-
- public override ViewFilter CreateViewFilter(CodeWindowManager mgr, IVsTextView newView)
- {
- return new IronyViewFilter(mgr, newView);
- }
-
- public override string Name
- {
- get { return Configuration.Name; }
- }
-
- public override string GetFormatFilterList()
- {
- return Configuration.FormatList;
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using Microsoft.VisualStudio;
+using Microsoft.VisualStudio.TextManager.Interop;
+using Microsoft.VisualStudio.Package;
+
+using Irony.Parsing;
+using Irony.Ast;
+
+using System.IO;
+
+namespace Demo
+{
+ public class IronyLanguageService : Microsoft.VisualStudio.Package.LanguageService
+ {
+ private Grammar grammar;
+ private Parser parser;
+ private ParsingContext context;
+
+ public IronyLanguageService()
+ {
+ grammar = new Grammar();
+ parser = new Parser(Configuration.Grammar);
+ context = new ParsingContext(parser);
+ }
+
+
+ #region Custom Colors
+ public override int GetColorableItem(int index, out IVsColorableItem item)
+ {
+ if (index <= Configuration.ColorableItems.Count)
+ {
+ item = Configuration.ColorableItems[index - 1];
+ return Microsoft.VisualStudio.VSConstants.S_OK;
+ }
+ else
+ {
+ throw new ArgumentNullException("index");
+ }
+ }
+
+ public override int GetItemCount(out int count)
+ {
+ count = Configuration.ColorableItems.Count;
+ return Microsoft.VisualStudio.VSConstants.S_OK;
+ }
+ #endregion
+
+ #region MPF Accessor and Factory specialisation
+ private LanguagePreferences preferences;
+ public override LanguagePreferences GetLanguagePreferences()
+ {
+ if (this.preferences == null)
+ {
+ this.preferences = new LanguagePreferences(this.Site,
+ typeof(IronyLanguageService).GUID,
+ this.Name);
+ this.preferences.Init();
+ }
+
+ return this.preferences;
+ }
+
+ public override Microsoft.VisualStudio.Package.Source CreateSource(IVsTextLines buffer)
+ {
+ return new Source(this, buffer, this.GetColorizer(buffer));
+ }
+
+ private IScanner scanner;
+ public override IScanner GetScanner(IVsTextLines buffer)
+ {
+ if (scanner == null)
+ this.scanner = new LineScanner(grammar);
+
+ return this.scanner;
+ }
+ #endregion
+
+ public override void OnIdle(bool periodic)
+ {
+ // from IronPythonLanguage sample
+ // this appears to be necessary to get a parse request with ParseReason = Check?
+ Source src = (Source)GetSource(this.LastActiveTextView);
+ if (src != null && src.LastParseTime >= Int32.MaxValue >> 12)
+ {
+ src.LastParseTime = 0;
+ }
+ base.OnIdle(periodic);
+ }
+
+ public override Microsoft.VisualStudio.Package.AuthoringScope ParseSource(ParseRequest req)
+ {
+ Debug.Print("ParseSource at ({0}:{1}), reason {2}", req.Line, req.Col, req.Reason);
+ Source source = (Source)this.GetSource(req.FileName);
+ switch (req.Reason)
+ {
+ case ParseReason.Check:
+ // This is where you perform your syntax highlighting.
+ // Parse entire source as given in req.Text.
+ // Store results in the AuthoringScope object.
+ var parsed = parser.Parse(req.Text, req.FileName);
+ var root = parsed.Root;
+ if (root != null) {
+
+ AstNode node = (AstNode)root.AstNode;
+ source.ParseResult = node;
+ }
+
+ // Used for brace matching.
+ TokenStack braces = parser.Context.OpenBraces;
+ foreach (Token brace in braces) {
+ if (brace.OtherBrace == null) continue;
+ TextSpan openBrace = new TextSpan();
+ openBrace.iStartLine = brace.Location.Line;
+ openBrace.iStartIndex = brace.Location.Column;
+ openBrace.iEndLine = brace.Location.Line;
+ openBrace.iEndIndex = openBrace.iStartIndex + brace.Length;
+
+ TextSpan closeBrace = new TextSpan();
+ closeBrace.iStartLine = brace.OtherBrace.Location.Line;
+ closeBrace.iStartIndex = brace.OtherBrace.Location.Column;
+ closeBrace.iEndLine = brace.OtherBrace.Location.Line;
+ closeBrace.iEndIndex = closeBrace.iStartIndex + brace.OtherBrace.Length;
+
+ if (source.Braces == null) {
+ source.Braces = new List<TextSpan[]>();
+ }
+ source.Braces.Add(new TextSpan[2] { openBrace, closeBrace });
+ }
+
+ if (parser.Context.CurrentParseTree.ParserMessages.Count > 0) {
+ foreach (ParserMessage error in parser.Context.CurrentParseTree.ParserMessages) {
+ TextSpan span = new TextSpan();
+ span.iStartLine = span.iEndLine = error.Location.Line - 1;
+ span.iStartIndex = error.Location.Column;
+ span.iEndIndex = error.Location.Position;
+ req.Sink.AddError(req.FileName, error.Message, span, Severity.Error);
+ }
+ } else { // parse looks okay, send it to Boogie.
+ if (!File.Exists(@"C:\tmp\StartBoogie.bat")) {
+ AddErrorBecauseOfToolProblems(req, @"Can't find C:\tmp\StartBoogie.bat");
+ } else {
+
+ // From: http://dotnetperls.com/process-redirect-standard-output
+ // (Also, see: http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx)
+ //
+ // Setup the process with the ProcessStartInfo class.
+ //
+ ProcessStartInfo start = new ProcessStartInfo();
+ start.FileName = @"cmd.exe";
+ start.Arguments = @"/c C:\tmp\StartBoogie.bat"; // Specify exe name.
+ start.UseShellExecute = false;
+ start.RedirectStandardInput = true;
+ start.RedirectStandardOutput = true;
+ start.CreateNoWindow = true;
+ //start.WindowStyle = ProcessWindowStyle.Minimized; // need this or else you see the window pop up
+ //
+ // Start the process.
+ //
+ using (Process process = Process.Start(start)) {
+ //
+ // Push the file contents to the new process
+ //
+ StreamWriter myStreamWriter = process.StandardInput;
+ myStreamWriter.WriteLine(req.Text);
+ myStreamWriter.Close();
+ //
+ // Read in all the text from the process with the StreamReader.
+ //
+ using (StreamReader reader = process.StandardOutput) {
+ //string result = reader.ReadToEnd();
+ //Console.Write(result);
+
+ for (string line = reader.ReadLine(); !String.IsNullOrEmpty(line); line = reader.ReadLine()) {
+ // the lines of interest have the form "filename(line,col): some_error_label: error_message"
+ // where "some_error_label" is "Error" or "syntax error" or "Error BP5003" or "Related location"
+ string message;
+ int n = line.IndexOf("): ", 2); // we start at 2, to avoid problems with "C:\..."
+ if (n == -1) {
+ continue;
+ } else {
+ int m = line.IndexOf(": ", n + 3);
+ if (m == -1) {
+ continue;
+ }
+ message = line.Substring(m + 2);
+ }
+ line = line.Substring(0, n); // line now has the form "filename(line,col"
+
+ n = line.LastIndexOf(',');
+ if (n == -1) { continue; }
+ var colString = line.Substring(n + 1);
+ line = line.Substring(0, n); // line now has the form "filename(line"
+
+ n = line.LastIndexOf('(');
+ if (n == -1) { continue; }
+ var lineString = line.Substring(n + 1);
+
+ try {
+ TextSpan span = new TextSpan();
+ span.iStartLine = span.iEndLine = Int32.Parse(lineString) - 1;
+ span.iStartIndex = Int32.Parse(colString) - 1;
+ span.iEndIndex = span.iStartIndex + 5; // hack
+ req.Sink.AddError(req.FileName, message, span, Severity.Error);
+ } catch (System.FormatException) {
+ continue;
+ } catch (System.OverflowException) {
+ continue;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ break;
+
+ case ParseReason.DisplayMemberList:
+ // Parse the line specified in req.Line for the two
+ // tokens just before req.Col to obtain the identifier
+ // and the member connector symbol.
+ // Examine existing parse tree for members of the identifer
+ // and return a list of members in your version of the
+ // Declarations class as stored in the AuthoringScope
+ // object.
+ break;
+
+ case ParseReason.MethodTip:
+ // Parse the line specified in req.Line for the token
+ // just before req.Col to obtain the name of the method
+ // being entered.
+ // Examine the existing parse tree for all method signatures
+ // with the same name and return a list of those signatures
+ // in your version of the Methods class as stored in the
+ // AuthoringScope object.
+ break;
+
+ case ParseReason.HighlightBraces:
+ case ParseReason.MemberSelectAndHighlightBraces:
+ if (source.Braces != null)
+ {
+ foreach (TextSpan[] brace in source.Braces)
+ {
+ if (brace.Length == 2)
+ req.Sink.MatchPair(brace[0], brace[1], 1);
+ else if (brace.Length >= 3)
+ req.Sink.MatchTriple(brace[0], brace[1], brace[2], 1);
+ }
+ }
+ break;
+ }
+
+ return new AuthoringScope(source.ParseResult);
+ }
+
+ private static void AddErrorBecauseOfToolProblems(ParseRequest req, string msg) {
+ TextSpan span = new TextSpan();
+ span.iStartLine = span.iEndLine = 1;
+ span.iStartIndex = 1;
+ span.iEndIndex = 2;
+ req.Sink.AddError(req.FileName, msg, span, Severity.Error);
+ }
+
+ /// <summary>
+ /// Called to determine if the given location can have a breakpoint applied to it.
+ /// </summary>
+ /// <param name="buffer">The IVsTextBuffer object containing the source file.</param>
+ /// <param name="line">The line number where the breakpoint is to be set.</param>
+ /// <param name="col">The offset into the line where the breakpoint is to be set.</param>
+ /// <param name="pCodeSpan">
+ /// Returns the TextSpan giving the extent of the code affected by the breakpoint if the
+ /// breakpoint can be set.
+ /// </param>
+ /// <returns>
+ /// If successful, returns S_OK; otherwise returns S_FALSE if there is no code at the given
+ /// position or returns an error code (the validation is deferred until the debug engine is loaded).
+ /// </returns>
+ /// <remarks>
+ /// <para>
+ /// CAUTION: Even if you do not intend to support the ValidateBreakpointLocation but your language
+ /// does support breakpoints, you must override the ValidateBreakpointLocation method and return a
+ /// span that contains the specified line and column; otherwise, breakpoints cannot be set anywhere
+ /// except line 1. You can return E_NOTIMPL to indicate that you do not otherwise support this
+ /// method but the span must always be set. The example shows how this can be done.
+ /// </para>
+ /// <para>
+ /// Since the language service parses the code, it generally knows what is considered code and what
+ /// is not. Normally, the debug engine is loaded and the pending breakpoints are bound to the source. It is at this time the breakpoint location is validated. This method is a fast way to determine if a breakpoint can be set at a particular location without loading the debug engine.
+ /// </para>
+ /// <para>
+ /// You can implement this method to call the ParseSource method with the parse reason of CodeSpan.
+ /// The parser examines the specified location and returns a span identifying the code at that
+ /// location. If there is code at the location, the span identifying that code should be passed to
+ /// your implementation of the CodeSpan method in your version of the AuthoringSink class. Then your
+ /// implementation of the ValidateBreakpointLocation method retrieves that span from your version of
+ /// the AuthoringSink class and returns that span in the pCodeSpan argument.
+ /// </para>
+ /// <para>
+ /// The base method returns E_NOTIMPL.
+ /// </para>
+ /// </remarks>
+ public override int ValidateBreakpointLocation(IVsTextBuffer buffer, int line, int col, TextSpan[] pCodeSpan)
+ {
+ // TODO: Add code to not allow breakpoints to be placed on non-code lines.
+ // TODO: Refactor to allow breakpoint locations to span multiple lines.
+ if (pCodeSpan != null)
+ {
+ pCodeSpan[0].iStartLine = line;
+ pCodeSpan[0].iStartIndex = col;
+ pCodeSpan[0].iEndLine = line;
+ pCodeSpan[0].iEndIndex = col;
+ if (buffer != null)
+ {
+ int length;
+ buffer.GetLengthOfLine(line, out length);
+ pCodeSpan[0].iStartIndex = 0;
+ pCodeSpan[0].iEndIndex = length;
+ }
+ return VSConstants.S_OK;
+ }
+ else
+ {
+ return VSConstants.S_FALSE;
+ }
+ }
+
+ public override ViewFilter CreateViewFilter(CodeWindowManager mgr, IVsTextView newView)
+ {
+ return new IronyViewFilter(mgr, newView);
+ }
+
+ public override string Name
+ {
+ get { return Configuration.Name; }
+ }
+
+ public override string GetFormatFilterList()
+ {
+ return Configuration.FormatList;
+ }
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs
index 55c3509e..7c673629 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs
@@ -1,42 +1,42 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.VisualStudio.Package;
-using Microsoft.VisualStudio.TextManager.Interop;
-
-using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
-
-namespace Demo
-{
- public class IronyViewFilter : ViewFilter
- {
- public IronyViewFilter(CodeWindowManager mgr, IVsTextView view)
- : base(mgr, view)
- {
-
- }
-
- public override void HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut, bool bufferWasChanged)
- {
- if (guidCmdGroup == typeof(VsCommands2K).GUID)
- {
- VsCommands2K cmd = (VsCommands2K)nCmdId;
- switch (cmd)
- {
- case VsCommands2K.UP:
- case VsCommands2K.UP_EXT:
- case VsCommands2K.UP_EXT_COL:
- case VsCommands2K.DOWN:
- case VsCommands2K.DOWN_EXT:
- case VsCommands2K.DOWN_EXT_COL:
- Source.OnCommand(TextView, cmd, '\0');
- return;
- }
- }
-
-
- base.HandlePostExec(ref guidCmdGroup, nCmdId, nCmdexecopt, pvaIn, pvaOut, bufferWasChanged);
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.VisualStudio.Package;
+using Microsoft.VisualStudio.TextManager.Interop;
+
+using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
+
+namespace Demo
+{
+ public class IronyViewFilter : ViewFilter
+ {
+ public IronyViewFilter(CodeWindowManager mgr, IVsTextView view)
+ : base(mgr, view)
+ {
+
+ }
+
+ public override void HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut, bool bufferWasChanged)
+ {
+ if (guidCmdGroup == typeof(VsCommands2K).GUID)
+ {
+ VsCommands2K cmd = (VsCommands2K)nCmdId;
+ switch (cmd)
+ {
+ case VsCommands2K.UP:
+ case VsCommands2K.UP_EXT:
+ case VsCommands2K.UP_EXT_COL:
+ case VsCommands2K.DOWN:
+ case VsCommands2K.DOWN_EXT:
+ case VsCommands2K.DOWN_EXT_COL:
+ Source.OnCommand(TextView, cmd, '\0');
+ return;
+ }
+ }
+
+
+ base.HandlePostExec(ref guidCmdGroup, nCmdId, nCmdexecopt, pvaIn, pvaOut, bufferWasChanged);
+ }
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs
index 966e9c43..b5fdeb8b 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs
@@ -1,58 +1,58 @@
-using System;
-using Microsoft.VisualStudio.Package;
-using Irony.Parsing;
-
-namespace Demo
-{
- public class LineScanner : IScanner
- {
- private Parser parser;
-
- public LineScanner(Grammar grammar)
- {
- this.parser = new Parser(grammar);
- this.parser.Context.Mode = ParseMode.VsLineScan;
- }
-
- public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, ref int state)
- {
- // Reads each token in a source line and performs syntax coloring. It will continue to
- // be called for the source until false is returned.
- Token token = parser.Scanner.VsReadToken(ref state);
-
- // !EOL and !EOF
- if (token != null && token.Terminal != Grammar.CurrentGrammar.Eof && token.Category != TokenCategory.Error)
- {
- tokenInfo.StartIndex = token.Location.Position;
- tokenInfo.EndIndex = tokenInfo.StartIndex + token.Length - 1;
- if (token.EditorInfo != null) {
- tokenInfo.Color = (Microsoft.VisualStudio.Package.TokenColor)token.EditorInfo.Color;
- tokenInfo.Type = (Microsoft.VisualStudio.Package.TokenType)token.EditorInfo.Type;
- }
-
- if (token.KeyTerm != null && token.KeyTerm.EditorInfo != null)
- {
- tokenInfo.Trigger =
- (Microsoft.VisualStudio.Package.TokenTriggers)token.KeyTerm.EditorInfo.Triggers;
- }
- else
- {
- if (token.EditorInfo != null) {
- tokenInfo.Trigger =
- (Microsoft.VisualStudio.Package.TokenTriggers)token.EditorInfo.Triggers;
- }
- }
-
- return true;
- }
-
- return false;
- }
-
- public void SetSource(string source, int offset)
- {
- // Stores line of source to be used by ScanTokenAndProvideInfoAboutIt.
- parser.Scanner.VsSetSource(source, offset);
- }
- }
-}
+using System;
+using Microsoft.VisualStudio.Package;
+using Irony.Parsing;
+
+namespace Demo
+{
+ public class LineScanner : IScanner
+ {
+ private Parser parser;
+
+ public LineScanner(Grammar grammar)
+ {
+ this.parser = new Parser(grammar);
+ this.parser.Context.Mode = ParseMode.VsLineScan;
+ }
+
+ public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, ref int state)
+ {
+ // Reads each token in a source line and performs syntax coloring. It will continue to
+ // be called for the source until false is returned.
+ Token token = parser.Scanner.VsReadToken(ref state);
+
+ // !EOL and !EOF
+ if (token != null && token.Terminal != Grammar.CurrentGrammar.Eof && token.Category != TokenCategory.Error)
+ {
+ tokenInfo.StartIndex = token.Location.Position;
+ tokenInfo.EndIndex = tokenInfo.StartIndex + token.Length - 1;
+ if (token.EditorInfo != null) {
+ tokenInfo.Color = (Microsoft.VisualStudio.Package.TokenColor)token.EditorInfo.Color;
+ tokenInfo.Type = (Microsoft.VisualStudio.Package.TokenType)token.EditorInfo.Type;
+ }
+
+ if (token.KeyTerm != null && token.KeyTerm.EditorInfo != null)
+ {
+ tokenInfo.Trigger =
+ (Microsoft.VisualStudio.Package.TokenTriggers)token.KeyTerm.EditorInfo.Triggers;
+ }
+ else
+ {
+ if (token.EditorInfo != null) {
+ tokenInfo.Trigger =
+ (Microsoft.VisualStudio.Package.TokenTriggers)token.EditorInfo.Triggers;
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public void SetSource(string source, int offset)
+ {
+ // Stores line of source to be used by ScanTokenAndProvideInfoAboutIt.
+ parser.Scanner.VsSetSource(source, offset);
+ }
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs
index c5071612..6b6ba00e 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs
@@ -1,20 +1,20 @@
-using System;
-using System.Collections.Generic;
-
-namespace Demo
-{
- public struct Method
- {
- public string Name;
- public string Description;
- public string Type;
- public IList<Parameter> Parameters;
- }
-
- public struct Parameter
- {
- public string Name;
- public string Display;
- public string Description;
- }
+using System;
+using System.Collections.Generic;
+
+namespace Demo
+{
+ public struct Method
+ {
+ public string Name;
+ public string Description;
+ public string Type;
+ public IList<Parameter> Parameters;
+ }
+
+ public struct Parameter
+ {
+ public string Name;
+ public string Display;
+ public string Description;
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs
index 1d7c124f..7ce0bb2b 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs
@@ -1,50 +1,50 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Microsoft.VisualStudio.Package;
-
-namespace Demo
-{
- public class Methods : Microsoft.VisualStudio.Package.Methods
- {
- IList<Method> methods;
- public Methods(IList<Method> methods)
- {
- this.methods = methods;
- }
-
- public override int GetCount()
- {
- return methods.Count;
- }
-
- public override string GetName(int index)
- {
- return methods[index].Name;
- }
-
- public override string GetDescription(int index)
- {
- return methods[index].Description;
- }
-
- public override string GetType(int index)
- {
- return methods[index].Type;
- }
-
- public override int GetParameterCount(int index)
- {
- return (methods[index].Parameters == null) ? 0 : methods[index].Parameters.Count;
- }
-
- public override void GetParameterInfo(int index, int paramIndex, out string name, out string display, out string description)
- {
- Parameter parameter = methods[index].Parameters[paramIndex];
- name = parameter.Name;
- display = parameter.Display;
- description = parameter.Description;
- }
- }
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Microsoft.VisualStudio.TextManager.Interop;
+using Microsoft.VisualStudio.Package;
+
+namespace Demo
+{
+ public class Methods : Microsoft.VisualStudio.Package.Methods
+ {
+ IList<Method> methods;
+ public Methods(IList<Method> methods)
+ {
+ this.methods = methods;
+ }
+
+ public override int GetCount()
+ {
+ return methods.Count;
+ }
+
+ public override string GetName(int index)
+ {
+ return methods[index].Name;
+ }
+
+ public override string GetDescription(int index)
+ {
+ return methods[index].Description;
+ }
+
+ public override string GetType(int index)
+ {
+ return methods[index].Type;
+ }
+
+ public override int GetParameterCount(int index)
+ {
+ return (methods[index].Parameters == null) ? 0 : methods[index].Parameters.Count;
+ }
+
+ public override void GetParameterInfo(int index, int paramIndex, out string name, out string display, out string description)
+ {
+ Parameter parameter = methods[index].Parameters[paramIndex];
+ name = parameter.Name;
+ display = parameter.Display;
+ description = parameter.Description;
+ }
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs
index dc1244d6..28762c41 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs
@@ -1,130 +1,130 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Runtime.InteropServices;
-using Microsoft.VisualStudio.OLE.Interop;
-using MPF = Microsoft.VisualStudio.Package;
-using System.ComponentModel.Design;
-
-namespace Demo
-{
- public class IronyPackage : Microsoft.VisualStudio.Shell.Package, IOleComponent
- {
- uint componentID = 0;
- public IronyPackage()
- {
- ServiceCreatorCallback callback = new ServiceCreatorCallback(
- delegate(IServiceContainer container, Type serviceType)
- {
- if (typeof(IronyLanguageService) == serviceType)
- {
- IronyLanguageService language = new IronyLanguageService();
- language.SetSite(this);
-
- // register for idle time callbacks
- IOleComponentManager mgr = GetService(typeof(SOleComponentManager)) as IOleComponentManager;
- if (componentID == 0 && mgr != null)
- {
- OLECRINFO[] crinfo = new OLECRINFO[1];
- crinfo[0].cbSize = (uint)Marshal.SizeOf(typeof(OLECRINFO));
- crinfo[0].grfcrf = (uint)_OLECRF.olecrfNeedIdleTime |
- (uint)_OLECRF.olecrfNeedPeriodicIdleTime;
- crinfo[0].grfcadvf = (uint)_OLECADVF.olecadvfModal |
- (uint)_OLECADVF.olecadvfRedrawOff |
- (uint)_OLECADVF.olecadvfWarningsOff;
- crinfo[0].uIdleTimeInterval = 300;
- int hr = mgr.FRegisterComponent(this, crinfo, out componentID);
- }
-
- return language;
- }
- else
- {
- return null;
- }
- });
-
- // proffer the LanguageService
- (this as IServiceContainer).AddService(typeof(IronyLanguageService), callback, true);
- }
-
- protected override void Dispose(bool disposing)
- {
- try
- {
- if (componentID != 0)
- {
- IOleComponentManager mgr = GetService(typeof(SOleComponentManager)) as IOleComponentManager;
- if (mgr != null)
- {
- mgr.FRevokeComponent(componentID);
- }
- componentID = 0;
- }
- }
- finally
- {
- base.Dispose(disposing);
- }
- }
-
- #region IOleComponent Members
- public int FContinueMessageLoop(uint uReason, IntPtr pvLoopData, MSG[] pMsgPeeked)
- {
- return 1;
- }
-
- public int FDoIdle(uint grfidlef)
- {
- IronyLanguageService ls = GetService(typeof(IronyLanguageService)) as IronyLanguageService;
-
- if (ls != null)
- {
- ls.OnIdle((grfidlef & (uint)_OLEIDLEF.oleidlefPeriodic) != 0);
- }
-
- return 0;
- }
-
- public int FPreTranslateMessage(MSG[] pMsg)
- {
- return 0;
- }
-
- public int FQueryTerminate(int fPromptUser)
- {
- return 1;
- }
-
- public int FReserved1(uint dwReserved, uint message, IntPtr wParam, IntPtr lParam)
- {
- return 1;
- }
-
- public IntPtr HwndGetWindow(uint dwWhich, uint dwReserved)
- {
- return IntPtr.Zero;
- }
-
- public void OnActivationChange(IOleComponent pic, int fSameComponent, OLECRINFO[] pcrinfo, int fHostIsActivating, OLECHOSTINFO[] pchostinfo, uint dwReserved)
- {
- }
-
- public void OnAppActivate(int fActive, uint dwOtherThreadID)
- {
- }
-
- public void OnEnterState(uint uStateID, int fEnter)
- {
- }
-
- public void OnLoseActivation()
- {
- }
-
- public void Terminate()
- {
- }
- #endregion
- }
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+using Microsoft.VisualStudio.OLE.Interop;
+using MPF = Microsoft.VisualStudio.Package;
+using System.ComponentModel.Design;
+
+namespace Demo
+{
+ public class IronyPackage : Microsoft.VisualStudio.Shell.Package, IOleComponent
+ {
+ uint componentID = 0;
+ public IronyPackage()
+ {
+ ServiceCreatorCallback callback = new ServiceCreatorCallback(
+ delegate(IServiceContainer container, Type serviceType)
+ {
+ if (typeof(IronyLanguageService) == serviceType)
+ {
+ IronyLanguageService language = new IronyLanguageService();
+ language.SetSite(this);
+
+ // register for idle time callbacks
+ IOleComponentManager mgr = GetService(typeof(SOleComponentManager)) as IOleComponentManager;
+ if (componentID == 0 && mgr != null)
+ {
+ OLECRINFO[] crinfo = new OLECRINFO[1];
+ crinfo[0].cbSize = (uint)Marshal.SizeOf(typeof(OLECRINFO));
+ crinfo[0].grfcrf = (uint)_OLECRF.olecrfNeedIdleTime |
+ (uint)_OLECRF.olecrfNeedPeriodicIdleTime;
+ crinfo[0].grfcadvf = (uint)_OLECADVF.olecadvfModal |
+ (uint)_OLECADVF.olecadvfRedrawOff |
+ (uint)_OLECADVF.olecadvfWarningsOff;
+ crinfo[0].uIdleTimeInterval = 300;
+ int hr = mgr.FRegisterComponent(this, crinfo, out componentID);
+ }
+
+ return language;
+ }
+ else
+ {
+ return null;
+ }
+ });
+
+ // proffer the LanguageService
+ (this as IServiceContainer).AddService(typeof(IronyLanguageService), callback, true);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ try
+ {
+ if (componentID != 0)
+ {
+ IOleComponentManager mgr = GetService(typeof(SOleComponentManager)) as IOleComponentManager;
+ if (mgr != null)
+ {
+ mgr.FRevokeComponent(componentID);
+ }
+ componentID = 0;
+ }
+ }
+ finally
+ {
+ base.Dispose(disposing);
+ }
+ }
+
+ #region IOleComponent Members
+ public int FContinueMessageLoop(uint uReason, IntPtr pvLoopData, MSG[] pMsgPeeked)
+ {
+ return 1;
+ }
+
+ public int FDoIdle(uint grfidlef)
+ {
+ IronyLanguageService ls = GetService(typeof(IronyLanguageService)) as IronyLanguageService;
+
+ if (ls != null)
+ {
+ ls.OnIdle((grfidlef & (uint)_OLEIDLEF.oleidlefPeriodic) != 0);
+ }
+
+ return 0;
+ }
+
+ public int FPreTranslateMessage(MSG[] pMsg)
+ {
+ return 0;
+ }
+
+ public int FQueryTerminate(int fPromptUser)
+ {
+ return 1;
+ }
+
+ public int FReserved1(uint dwReserved, uint message, IntPtr wParam, IntPtr lParam)
+ {
+ return 1;
+ }
+
+ public IntPtr HwndGetWindow(uint dwWhich, uint dwReserved)
+ {
+ return IntPtr.Zero;
+ }
+
+ public void OnActivationChange(IOleComponent pic, int fSameComponent, OLECRINFO[] pcrinfo, int fHostIsActivating, OLECHOSTINFO[] pchostinfo, uint dwReserved)
+ {
+ }
+
+ public void OnAppActivate(int fActive, uint dwOtherThreadID)
+ {
+ }
+
+ public void OnEnterState(uint uStateID, int fEnter)
+ {
+ }
+
+ public void OnLoseActivation()
+ {
+ }
+
+ public void Terminate()
+ {
+ }
+ #endregion
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs
index 9f6ddeba..579a8a37 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs
@@ -1,50 +1,50 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Irony.Parsing;
-
-namespace Demo
-{
- public class Resolver : Demo.IASTResolver
- {
- #region IASTResolver Members
-
-
- public IList<Demo.Declaration> FindCompletions(object result, int line, int col)
- {
- // Used for intellisense.
- List<Demo.Declaration> declarations = new List<Demo.Declaration>();
-
- // Add keywords defined by grammar
- foreach (KeyTerm key in Configuration.Grammar.KeyTerms.Values)
- {
- if(key.OptionIsSet(TermOptions.IsKeyword))
- {
- declarations.Add(new Declaration("", key.Name, 206, key.Name));
- }
- }
-
- declarations.Sort();
- return declarations;
- }
-
- public IList<Demo.Declaration> FindMembers(object result, int line, int col)
- {
- List<Demo.Declaration> members = new List<Demo.Declaration>();
-
- return members;
- }
-
- public string FindQuickInfo(object result, int line, int col)
- {
- return "unknown";
- }
-
- public IList<Demo.Method> FindMethods(object result, int line, int col, string name)
- {
- return new List<Demo.Method>();
- }
-
- #endregion
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Irony.Parsing;
+
+namespace Demo
+{
+ public class Resolver : Demo.IASTResolver
+ {
+ #region IASTResolver Members
+
+
+ public IList<Demo.Declaration> FindCompletions(object result, int line, int col)
+ {
+ // Used for intellisense.
+ List<Demo.Declaration> declarations = new List<Demo.Declaration>();
+
+ // Add keywords defined by grammar
+ foreach (KeyTerm key in Configuration.Grammar.KeyTerms.Values)
+ {
+ if(key.OptionIsSet(TermOptions.IsKeyword))
+ {
+ declarations.Add(new Declaration("", key.Name, 206, key.Name));
+ }
+ }
+
+ declarations.Sort();
+ return declarations;
+ }
+
+ public IList<Demo.Declaration> FindMembers(object result, int line, int col)
+ {
+ List<Demo.Declaration> members = new List<Demo.Declaration>();
+
+ return members;
+ }
+
+ public string FindQuickInfo(object result, int line, int col)
+ {
+ return "unknown";
+ }
+
+ public IList<Demo.Method> FindMethods(object result, int line, int col, string name)
+ {
+ return new List<Demo.Method>();
+ }
+
+ #endregion
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs
index 418bec01..92b5a884 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs
@@ -1,41 +1,41 @@
-/***************************************************************************
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-This code is licensed under the Visual Studio SDK license terms.
-THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
-ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
-IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
-PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
-
-***************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Microsoft.VisualStudio.Package;
-
-namespace Demo
-{
- public class Source : Microsoft.VisualStudio.Package.Source
- {
- public Source(LanguageService service, IVsTextLines textLines, Colorizer colorizer)
- : base(service, textLines, colorizer)
- {
- }
-
- private object parseResult;
- public object ParseResult
- {
- get { return parseResult; }
- set { parseResult = value; }
- }
-
- private IList<TextSpan[]> braces;
- public IList<TextSpan[]> Braces
- {
- get { return braces; }
- set { braces = value; }
- }
- }
+/***************************************************************************
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+This code is licensed under the Visual Studio SDK license terms.
+THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
+ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
+IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
+PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
+
+***************************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Microsoft.VisualStudio.TextManager.Interop;
+using Microsoft.VisualStudio.Package;
+
+namespace Demo
+{
+ public class Source : Microsoft.VisualStudio.Package.Source
+ {
+ public Source(LanguageService service, IVsTextLines textLines, Colorizer colorizer)
+ : base(service, textLines, colorizer)
+ {
+ }
+
+ private object parseResult;
+ public object ParseResult
+ {
+ get { return parseResult; }
+ set { parseResult = value; }
+ }
+
+ private IList<TextSpan[]> braces;
+ public IList<TextSpan[]> Braces
+ {
+ get { return braces; }
+ set { braces = value; }
+ }
+ }
} \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs b/Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs
index 411207c7..0b5ed7a2 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs
@@ -1,90 +1,90 @@
-// VsPkg.cs : Implementation of IronyLanguageService
-//
-
-using System;
-using System.Diagnostics;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using System.ComponentModel.Design;
-using Microsoft.Win32;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.Shell;
-
-namespace Demo
-{
- /// <summary>
- /// This is the class that implements the package exposed by this assembly.
- ///
- /// The minimum requirement for a class to be considered a valid package for Visual Studio
- /// is to implement the IVsPackage interface and register itself with the shell.
- /// This package uses the helper classes defined inside the Managed Package Framework (MPF)
- /// to do it: it derives from the Package class that provides the implementation of the
- /// IVsPackage interface and uses the registration attributes defined in the framework to
- /// register itself and its components with the shell.
- /// </summary>
- // This attribute tells the registration utility (regpkg.exe) that this class needs
- // to be registered as package.
- [PackageRegistration(UseManagedResourcesOnly = true)]
- // A Visual Studio component can be registered under different regitry roots; for instance
- // when you debug your package you want to register it in the experimental hive. This
- // attribute specifies the registry root to use if no one is provided to regpkg.exe with
- // the /root switch.
- [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\10.0Exp")]
- // This attribute is used to register the informations needed to show the this package
- // in the Help/About dialog of Visual Studio.
- [InstalledProductRegistration(/*false,*/ "#110", "#112", "1.0", IconResourceID = 400)]
- // This attribute will make your language service accessible by other packages installed.
- [ProvideService(typeof(IronyLanguageService))]
- // This attribute(s) associates file extensions with your language service.
- [ProvideLanguageExtension(typeof(IronyLanguageService), ".bpl")]
-
- // This attributes informs Visual Studio that this package provides a langauge service and
- // which features are implemented.
- [ProvideLanguageService(typeof(IronyLanguageService), Configuration.Name, 0,
- CodeSense = true,
- EnableCommenting = true,
- MatchBraces = true,
- MatchBracesAtCaret = true,
- ShowMatchingBrace = true,
- AutoOutlining = true)]
- // In order be loaded inside Visual Studio in a machine that has not the VS SDK installed,
- // package needs to have a valid load key (it can be requested at
- // http://msdn.microsoft.com/vstudio/extend/). This attributes tells the shell that this
- // package has a load key embedded in its resources.
- [ProvideLoadKey("Standard", "1.0", "Boogie", "Demo", 104)]
- [Guid(GuidList.guidIronyLanguageServicePkgString)]
- public sealed class BoogieLanguageService : IronyPackage
- {
- /// <summary>
- /// Default constructor of the package.
- /// Inside this method you can place any initialization code that does not require
- /// any Visual Studio service because at this point the package object is created but
- /// not sited yet inside Visual Studio environment. The place to do all the other
- /// initialization is the Initialize method.
- /// </summary>
- public BoogieLanguageService()
- {
- Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString()));
- }
-
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Overriden Package Implementation
- #region Package Members
-
- /// <summary>
- /// Initialization of the package; this method is called right after the package is sited, so this is the place
- /// where you can put all the initilaization code that rely on services provided by VisualStudio.
- /// </summary>
- protected override void Initialize()
- {
- Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString()));
- base.Initialize();
-
- }
- #endregion
-
- }
-}
+// VsPkg.cs : Implementation of IronyLanguageService
+//
+
+using System;
+using System.Diagnostics;
+using System.Globalization;
+using System.Runtime.InteropServices;
+using System.ComponentModel.Design;
+using Microsoft.Win32;
+using Microsoft.VisualStudio.Shell.Interop;
+using Microsoft.VisualStudio.OLE.Interop;
+using Microsoft.VisualStudio.Shell;
+
+namespace Demo
+{
+ /// <summary>
+ /// This is the class that implements the package exposed by this assembly.
+ ///
+ /// The minimum requirement for a class to be considered a valid package for Visual Studio
+ /// is to implement the IVsPackage interface and register itself with the shell.
+ /// This package uses the helper classes defined inside the Managed Package Framework (MPF)
+ /// to do it: it derives from the Package class that provides the implementation of the
+ /// IVsPackage interface and uses the registration attributes defined in the framework to
+ /// register itself and its components with the shell.
+ /// </summary>
+ // This attribute tells the registration utility (regpkg.exe) that this class needs
+ // to be registered as package.
+ [PackageRegistration(UseManagedResourcesOnly = true)]
+ // A Visual Studio component can be registered under different regitry roots; for instance
+ // when you debug your package you want to register it in the experimental hive. This
+ // attribute specifies the registry root to use if no one is provided to regpkg.exe with
+ // the /root switch.
+ [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\10.0Exp")]
+ // This attribute is used to register the informations needed to show the this package
+ // in the Help/About dialog of Visual Studio.
+ [InstalledProductRegistration(/*false,*/ "#110", "#112", "1.0", IconResourceID = 400)]
+ // This attribute will make your language service accessible by other packages installed.
+ [ProvideService(typeof(IronyLanguageService))]
+ // This attribute(s) associates file extensions with your language service.
+ [ProvideLanguageExtension(typeof(IronyLanguageService), ".bpl")]
+
+ // This attributes informs Visual Studio that this package provides a langauge service and
+ // which features are implemented.
+ [ProvideLanguageService(typeof(IronyLanguageService), Configuration.Name, 0,
+ CodeSense = true,
+ EnableCommenting = true,
+ MatchBraces = true,
+ MatchBracesAtCaret = true,
+ ShowMatchingBrace = true,
+ AutoOutlining = true)]
+ // In order be loaded inside Visual Studio in a machine that has not the VS SDK installed,
+ // package needs to have a valid load key (it can be requested at
+ // http://msdn.microsoft.com/vstudio/extend/). This attributes tells the shell that this
+ // package has a load key embedded in its resources.
+ [ProvideLoadKey("Standard", "1.0", "Boogie", "Demo", 104)]
+ [Guid(GuidList.guidIronyLanguageServicePkgString)]
+ public sealed class BoogieLanguageService : IronyPackage
+ {
+ /// <summary>
+ /// Default constructor of the package.
+ /// Inside this method you can place any initialization code that does not require
+ /// any Visual Studio service because at this point the package object is created but
+ /// not sited yet inside Visual Studio environment. The place to do all the other
+ /// initialization is the Initialize method.
+ /// </summary>
+ public BoogieLanguageService()
+ {
+ Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString()));
+ }
+
+
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Overriden Package Implementation
+ #region Package Members
+
+ /// <summary>
+ /// Initialization of the package; this method is called right after the package is sited, so this is the place
+ /// where you can put all the initilaization code that rely on services provided by VisualStudio.
+ /// </summary>
+ protected override void Initialize()
+ {
+ Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString()));
+ base.Initialize();
+
+ }
+ #endregion
+
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Properties/AssemblyInfo.cs b/Util/VS2010/Boogie/BoogieLanguageService/Properties/AssemblyInfo.cs
index 118d4488..6848b03a 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Properties/AssemblyInfo.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Properties/AssemblyInfo.cs
@@ -1,36 +1,36 @@
-using System;
-using System.Reflection;
-using System.Resources;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Package Name")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Company")]
-[assembly: AssemblyProduct("Package Name")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-[assembly: ComVisible(false)]
-[assembly: CLSCompliant(false)]
-[assembly: NeutralResourcesLanguage("en-US")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
-
-
-
+using System;
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Package Name")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Company")]
+[assembly: AssemblyProduct("Package Name")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: ComVisible(false)]
+[assembly: CLSCompliant(false)]
+[assembly: NeutralResourcesLanguage("en-US")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+
+
+
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Resources.Designer.cs b/Util/VS2010/Boogie/BoogieLanguageService/Resources.Designer.cs
index 1b30575c..98bd9301 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Resources.Designer.cs
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Resources.Designer.cs
@@ -1,63 +1,63 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:4.0.21006.1
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace Demo {
- using System;
-
-
- /// <summary>
- /// A strongly-typed resource class, for looking up localized strings, etc.
- /// </summary>
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- /// <summary>
- /// Returns the cached ResourceManager instance used by this class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Demo.BoogieLanguageService.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- /// <summary>
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.21006.1
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Demo {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Demo.BoogieLanguageService.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Resources.resx b/Util/VS2010/Boogie/BoogieLanguageService/Resources.resx
index 03fef612..7ad9af7a 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/Resources.resx
+++ b/Util/VS2010/Boogie/BoogieLanguageService/Resources.resx
@@ -1,130 +1,130 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- VS SDK Notes: This resx file contains the resources that will be consumed directly by your package.
- For example, if you chose to create a tool window, there is a resource with ID 'CanNotCreateWindow'. This
- is used in VsPkg.cs to determine the string to show the user if there is an error when attempting to create
- the tool window.
-
- Resources that are accessed directly from your package *by Visual Studio* are stored in the VSPackage.resx
- file.
--->
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ VS SDK Notes: This resx file contains the resources that will be consumed directly by your package.
+ For example, if you chose to create a tool window, there is a resource with ID 'CanNotCreateWindow'. This
+ is used in VsPkg.cs to determine the string to show the user if there is an error when attempting to create
+ the tool window.
+
+ Resources that are accessed directly from your package *by Visual Studio* are stored in the VSPackage.resx
+ file.
+-->
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</root> \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/VSPackage.resx b/Util/VS2010/Boogie/BoogieLanguageService/VSPackage.resx
index 17dae8cb..fb95a654 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/VSPackage.resx
+++ b/Util/VS2010/Boogie/BoogieLanguageService/VSPackage.resx
@@ -1,129 +1,129 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <data name="104" xml:space="preserve">
- <value>Paste PLK Here</value>
- </data>
- <data name="110" xml:space="preserve">
- <value>Boogie</value>
- </data>
- <data name="112" xml:space="preserve">
- <value>Microsoft Research Boogie, intermediate verification language</value>
- </data>
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="104" xml:space="preserve">
+ <value>Paste PLK Here</value>
+ </data>
+ <data name="110" xml:space="preserve">
+ <value>Boogie</value>
+ </data>
+ <data name="112" xml:space="preserve">
+ <value>Microsoft Research Boogie, intermediate verification language</value>
+ </data>
</root> \ No newline at end of file
diff --git a/Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest b/Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest
index a6528172..4a64ecc2 100644
--- a/Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest
+++ b/Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest
@@ -1,27 +1,27 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
-
- <Identifier Id="BoogieService.MicrosoftResearch.A38156F6-63DF-4E3C-8D23-07D3DE0D3388">
- <Name>BoogieService</Name>
- <Author>Microsoft Research</Author>
- <Version>1.0</Version>
- <Description>Information about my package</Description>
- <Locale>1033</Locale>
- <!--<InstalledByMSI>false</InstalledByMSI>-->
- <SupportedProducts>
- <VisualStudio Version="10.0">
- <Edition>Pro</Edition>
- <Edition>VST_All</Edition>
- </VisualStudio>
- </SupportedProducts>
- <SupportedFrameworkRuntimeEdition MinVersion="2.0" MaxVersion="4.0" />
- </Identifier>
-
- <References/>
-
- <Content>
- <VsPackage>
- BoogieService.pkgdef
- </VsPackage>
- </Content>
-</Vsix>
+<?xml version="1.0" encoding="utf-8"?>
+<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
+
+ <Identifier Id="BoogieService.MicrosoftResearch.A38156F6-63DF-4E3C-8D23-07D3DE0D3388">
+ <Name>BoogieService</Name>
+ <Author>Microsoft Research</Author>
+ <Version>1.0</Version>
+ <Description>Information about my package</Description>
+ <Locale>1033</Locale>
+ <!--<InstalledByMSI>false</InstalledByMSI>-->
+ <SupportedProducts>
+ <VisualStudio Version="10.0">
+ <Edition>Pro</Edition>
+ <Edition>VST_All</Edition>
+ </VisualStudio>
+ </SupportedProducts>
+ <SupportedFrameworkRuntimeEdition MinVersion="2.0" MaxVersion="4.0" />
+ </Identifier>
+
+ <References/>
+
+ <Content>
+ <VsPackage>
+ BoogieService.pkgdef
+ </VsPackage>
+ </Content>
+</Vsix>
diff --git a/Util/latex/boogie.sty b/Util/latex/boogie.sty
index e67c61f4..65fa7fb1 100644
--- a/Util/latex/boogie.sty
+++ b/Util/latex/boogie.sty
@@ -1,121 +1,121 @@
-% boogie.sty
-% Boogie mode for the LaTeX listings package.
-% Rustan Leino, 30 May 2008.
-% Example:
-% \begin{boogie}
-% type Field \alpha;
-% var Heap: <<\alpha>>[ref, Field \alpha]\alpha where IsHeap(Heap);
-% function IsHeap(<<\alpha>>[ref, Field \alpha]\alpha) returns (bool);
-% procedure Inc(x: int) returns (y: int)
-% modifies Heap;
-% {
-% havoc Heap;
-% if (0 <= x && x < 100) {
-% y := x + 1;
-% }
-% }
-% \end{boogie}
-
-\usepackage{listings}
-
-\lstdefinelanguage{boogie}{
- morekeywords={type,bool,int,real,%
- bv0,bv1,bv2,bv3,bv4,bv5,bv6,bv7,bv8,bv9,%
- bv10,bv11,bv12,bv13,bv14,bv15,bv16,bv17,bv18,bv19,%
- bv20,bv21,bv22,bv23,bv24,bv25,bv26,bv27,bv28,bv29,%
- bv30,bv31,bv32,bv33,bv34,bv35,bv36,bv37,bv38,bv39,%
- bv40,bv41,bv42,bv43,bv44,bv45,bv46,bv47,bv48,bv49,%
- bv50,bv51,bv52,bv53,bv54,bv55,bv56,bv57,bv58,bv59,%
- bv60,bv61,bv62,bv63,bv64,% ...
- const,unique,complete,partition,
- axiom,
- function,returns,
- var,where,
- procedure,implementation,
- requires,modifies,ensures,free,
- % expressions
- false,true,null,old,then,div,mod,
- % statements
- assert,assume,havoc,call,if,else,while,invariant,break,return,goto,
- },
- literate=%
- {:}{$\colon$}1
- {::}{$\bullet$}2
- {:=}{$:$$=$}2
- {!}{$\lnot$}1
- {==}{$=$}1
- {!=}{$\neq$}1
- {&&}{$\land$}1
- {||}{$\lor$}1
- {<=}{$\le$}1
- {>=}{$\ge$}1
- {==>}{$\Longrightarrow$}3
- {<==>}{$\Longleftrightarrow$}4
- {forall}{$\forall$}1
- {exists}{$\exists$}1
- {lambda}{$\lambda$}1
- % the following isn't actually Boogie, but it gives the option to produce nicer latex
- {<<}{$\langle$}1
- {>>}{$\rangle$}1
- {\\alpha}{$\alpha$}1
- {\\beta}{$\beta$}1
- {\\gamma}{$\gamma$}1
- {\\delta}{$\delta$}1
- {\\epsilon}{$\epsilon$}1
- {\\zeta}{$\zeta$}1
- {\\eta}{$\eta$}1
- {\\theta}{$\theta$}1
- {\\iota}{$\iota$}1
- {\\kappa}{$\kappa$}1
- {\\lambda}{$\lambda$}1
- {\\mu}{$\mu$}1
- {\\nu}{$\nu$}1
- {\\xi}{$\xi$}1
- {\\pi}{$\pi$}1
- {\\rho}{$\rho$}1
- {\\sigma}{$\sigma$}1
- {\\tau}{$\tau$}1
- {\\upsilon}{$\upsilon$}1
- {\\phi}{$\phi$}1
- {\\chi}{$\chi$}1
- {\\psi}{$\psi$}1
- {\\omega}{$\omega$}1
- {\\Gamma}{$\Gamma$}1
- {\\Delta}{$\Delta$}1
- {\\Theta}{$\Theta$}1
- {\\Lambda}{$\Lambda$}1
- {\\Xi}{$\Xi$}1
- {\\Pi}{$\Pi$}1
- {\\Sigma}{$\Sigma$}1
- {\\Upsilon}{$\Upsilon$}1
- {\\Phi}{$\Phi$}1
- {\\Psi}{$\Psi$}1
- {\\Omega}{$\Omega$}1
- ,
- sensitive=true, % case sensitive
- morecomment=[l]{//},
- morecomment=[s]{/*}{*/},
- morestring=[b]",
- numbers=none,
- firstnumber=0,
- numberstyle=\tiny,
- stepnumber=5,
- basicstyle=\scriptsize\sffamily,
- commentstyle=\itshape,
- keywordstyle=\bfseries,
- ndkeywordstyle=\bfseries,
-}
-\lstnewenvironment{boogie}[1][]{%
- \lstset{language=boogie,
- floatplacement={tbp},captionpos=b,
- frame=lines,xleftmargin=8pt,xrightmargin=8pt,basicstyle=\ttfamily,#1}}{}
-\lstnewenvironment{boogieNoLines}[1][]{%
- \lstset{language=boogie,
- floatplacement={tbp},captionpos=b,
- xleftmargin=8pt,xrightmargin=8pt,basicstyle=\ttfamily,#1}}{}
-\def\inlineboogie{%
- \lstinline[language=boogie,basicstyle=\ttfamily,columns=fixed]}
-\newcommand{\lstfile}[1]{
- \lstinputlisting[language=boogie,%
- frame=lines,xleftmargin=8pt,xrightmargin=8pt,basicstyle=\ttfamily,columns=fixed]{#1}
-}
+% boogie.sty
+% Boogie mode for the LaTeX listings package.
+% Rustan Leino, 30 May 2008.
+% Example:
+% \begin{boogie}
+% type Field \alpha;
+% var Heap: <<\alpha>>[ref, Field \alpha]\alpha where IsHeap(Heap);
+% function IsHeap(<<\alpha>>[ref, Field \alpha]\alpha) returns (bool);
+% procedure Inc(x: int) returns (y: int)
+% modifies Heap;
+% {
+% havoc Heap;
+% if (0 <= x && x < 100) {
+% y := x + 1;
+% }
+% }
+% \end{boogie}
+
+\usepackage{listings}
+
+\lstdefinelanguage{boogie}{
+ morekeywords={type,bool,int,real,%
+ bv0,bv1,bv2,bv3,bv4,bv5,bv6,bv7,bv8,bv9,%
+ bv10,bv11,bv12,bv13,bv14,bv15,bv16,bv17,bv18,bv19,%
+ bv20,bv21,bv22,bv23,bv24,bv25,bv26,bv27,bv28,bv29,%
+ bv30,bv31,bv32,bv33,bv34,bv35,bv36,bv37,bv38,bv39,%
+ bv40,bv41,bv42,bv43,bv44,bv45,bv46,bv47,bv48,bv49,%
+ bv50,bv51,bv52,bv53,bv54,bv55,bv56,bv57,bv58,bv59,%
+ bv60,bv61,bv62,bv63,bv64,% ...
+ const,unique,complete,partition,
+ axiom,
+ function,returns,
+ var,where,
+ procedure,implementation,
+ requires,modifies,ensures,free,
+ % expressions
+ false,true,null,old,then,div,mod,
+ % statements
+ assert,assume,havoc,call,if,else,while,invariant,break,return,goto,
+ },
+ literate=%
+ {:}{$\colon$}1
+ {::}{$\bullet$}2
+ {:=}{$:$$=$}2
+ {!}{$\lnot$}1
+ {==}{$=$}1
+ {!=}{$\neq$}1
+ {&&}{$\land$}1
+ {||}{$\lor$}1
+ {<=}{$\le$}1
+ {>=}{$\ge$}1
+ {==>}{$\Longrightarrow$}3
+ {<==>}{$\Longleftrightarrow$}4
+ {forall}{$\forall$}1
+ {exists}{$\exists$}1
+ {lambda}{$\lambda$}1
+ % the following isn't actually Boogie, but it gives the option to produce nicer latex
+ {<<}{$\langle$}1
+ {>>}{$\rangle$}1
+ {\\alpha}{$\alpha$}1
+ {\\beta}{$\beta$}1
+ {\\gamma}{$\gamma$}1
+ {\\delta}{$\delta$}1
+ {\\epsilon}{$\epsilon$}1
+ {\\zeta}{$\zeta$}1
+ {\\eta}{$\eta$}1
+ {\\theta}{$\theta$}1
+ {\\iota}{$\iota$}1
+ {\\kappa}{$\kappa$}1
+ {\\lambda}{$\lambda$}1
+ {\\mu}{$\mu$}1
+ {\\nu}{$\nu$}1
+ {\\xi}{$\xi$}1
+ {\\pi}{$\pi$}1
+ {\\rho}{$\rho$}1
+ {\\sigma}{$\sigma$}1
+ {\\tau}{$\tau$}1
+ {\\upsilon}{$\upsilon$}1
+ {\\phi}{$\phi$}1
+ {\\chi}{$\chi$}1
+ {\\psi}{$\psi$}1
+ {\\omega}{$\omega$}1
+ {\\Gamma}{$\Gamma$}1
+ {\\Delta}{$\Delta$}1
+ {\\Theta}{$\Theta$}1
+ {\\Lambda}{$\Lambda$}1
+ {\\Xi}{$\Xi$}1
+ {\\Pi}{$\Pi$}1
+ {\\Sigma}{$\Sigma$}1
+ {\\Upsilon}{$\Upsilon$}1
+ {\\Phi}{$\Phi$}1
+ {\\Psi}{$\Psi$}1
+ {\\Omega}{$\Omega$}1
+ ,
+ sensitive=true, % case sensitive
+ morecomment=[l]{//},
+ morecomment=[s]{/*}{*/},
+ morestring=[b]",
+ numbers=none,
+ firstnumber=0,
+ numberstyle=\tiny,
+ stepnumber=5,
+ basicstyle=\scriptsize\sffamily,
+ commentstyle=\itshape,
+ keywordstyle=\bfseries,
+ ndkeywordstyle=\bfseries,
+}
+\lstnewenvironment{boogie}[1][]{%
+ \lstset{language=boogie,
+ floatplacement={tbp},captionpos=b,
+ frame=lines,xleftmargin=8pt,xrightmargin=8pt,basicstyle=\ttfamily,#1}}{}
+\lstnewenvironment{boogieNoLines}[1][]{%
+ \lstset{language=boogie,
+ floatplacement={tbp},captionpos=b,
+ xleftmargin=8pt,xrightmargin=8pt,basicstyle=\ttfamily,#1}}{}
+\def\inlineboogie{%
+ \lstinline[language=boogie,basicstyle=\ttfamily,columns=fixed]}
+\newcommand{\lstfile}[1]{
+ \lstinputlisting[language=boogie,%
+ frame=lines,xleftmargin=8pt,xrightmargin=8pt,basicstyle=\ttfamily,columns=fixed]{#1}
+}